]> git.sur5r.net Git - cc65/commitdiff
trying to clean up the mess of failed merge. git sucks
authormrdudz <mrdudz@users.noreply.github.com>
Thu, 22 Oct 2015 17:07:30 +0000 (19:07 +0200)
committermrdudz <mrdudz@users.noreply.github.com>
Thu, 22 Oct 2015 17:07:30 +0000 (19:07 +0200)
2542 files changed:
.gitignore [deleted file]
.travis.yml [deleted file]
LICENSE [deleted file]
Makefile [deleted file]
Makefile.travis [deleted file]
README.md [deleted file]
asminc/_file.inc [deleted file]
asminc/_heap.inc [deleted file]
asminc/apple2.inc [deleted file]
asminc/atari.inc [deleted file]
asminc/atari.mac [deleted file]
asminc/atari5200.inc [deleted file]
asminc/atari_antic.inc [deleted file]
asminc/atari_gtia.inc [deleted file]
asminc/atari_pokey.inc [deleted file]
asminc/atmos.inc [deleted file]
asminc/c128.inc [deleted file]
asminc/c16.inc [deleted file]
asminc/c64.inc [deleted file]
asminc/cbm.mac [deleted file]
asminc/cbm510.inc [deleted file]
asminc/cbm610.inc [deleted file]
asminc/cbm_filetype.inc [deleted file]
asminc/cpu.mac [deleted file]
asminc/ctype.inc [deleted file]
asminc/em-error.inc [deleted file]
asminc/em-kernel.inc [deleted file]
asminc/errno.inc [deleted file]
asminc/fcntl.inc [deleted file]
asminc/generic.mac [deleted file]
asminc/get_tv.inc [deleted file]
asminc/joy-error.inc [deleted file]
asminc/joy-kernel.inc [deleted file]
asminc/longbranch.mac [deleted file]
asminc/lynx.inc [deleted file]
asminc/modload.inc [deleted file]
asminc/module.mac [deleted file]
asminc/mouse-kernel.inc [deleted file]
asminc/nes.inc [deleted file]
asminc/o65.inc [deleted file]
asminc/opcodes.inc [deleted file]
asminc/pce.inc [deleted file]
asminc/pet.inc [deleted file]
asminc/plus4.inc [deleted file]
asminc/ser-error.inc [deleted file]
asminc/ser-kernel.inc [deleted file]
asminc/signal.inc [deleted file]
asminc/smc.inc [deleted file]
asminc/stdio.inc [deleted file]
asminc/supervision.inc [deleted file]
asminc/tgi-error.inc [deleted file]
asminc/tgi-kernel.inc [deleted file]
asminc/tgi-vectorfont.inc [deleted file]
asminc/time.inc [deleted file]
asminc/utsname.inc [deleted file]
asminc/vic20.inc [deleted file]
asminc/zeropage.inc [deleted file]
cfg/apple2-asm.cfg [deleted file]
cfg/apple2-overlay.cfg [deleted file]
cfg/apple2-system.cfg [deleted file]
cfg/apple2.cfg [deleted file]
cfg/apple2enh-asm.cfg [deleted file]
cfg/apple2enh-overlay.cfg [deleted file]
cfg/apple2enh-system.cfg [deleted file]
cfg/apple2enh.cfg [deleted file]
cfg/atari-asm.cfg [deleted file]
cfg/atari-cart.cfg [deleted file]
cfg/atari-cassette.cfg [deleted file]
cfg/atari-overlay.cfg [deleted file]
cfg/atari.cfg [deleted file]
cfg/atari5200.cfg [deleted file]
cfg/atarixl-largehimem.cfg [deleted file]
cfg/atarixl-overlay.cfg [deleted file]
cfg/atarixl.cfg [deleted file]
cfg/atmos.cfg [deleted file]
cfg/bbc.cfg [deleted file]
cfg/c128-overlay.cfg [deleted file]
cfg/c128.cfg [deleted file]
cfg/c16.cfg [deleted file]
cfg/c64-asm.cfg [deleted file]
cfg/c64-overlay.cfg [deleted file]
cfg/c64.cfg [deleted file]
cfg/cbm510.cfg [deleted file]
cfg/cbm610.cfg [deleted file]
cfg/geos-apple.cfg [deleted file]
cfg/geos-cbm.cfg [deleted file]
cfg/lunix.cfg [deleted file]
cfg/lynx-bll.cfg [deleted file]
cfg/lynx-coll.cfg [deleted file]
cfg/lynx-uploader.cfg [deleted file]
cfg/lynx.cfg [deleted file]
cfg/module.cfg [deleted file]
cfg/nes.cfg [deleted file]
cfg/none.cfg [deleted file]
cfg/osic1p-asm.cfg [deleted file]
cfg/osic1p.cfg [deleted file]
cfg/pce.cfg [deleted file]
cfg/pet.cfg [deleted file]
cfg/plus4.cfg [deleted file]
cfg/sim6502.cfg [deleted file]
cfg/sim65c02.cfg [deleted file]
cfg/supervision-128k.cfg [deleted file]
cfg/supervision-16k.cfg [deleted file]
cfg/supervision-64k.cfg [deleted file]
cfg/supervision.cfg [deleted file]
cfg/vic20-32k.cfg [deleted file]
cfg/vic20.cfg [deleted file]
doc/Makefile [deleted file]
doc/apple2.sgml [deleted file]
doc/apple2enh.sgml [deleted file]
doc/ar65.sgml [deleted file]
doc/atari.sgml [deleted file]
doc/atari5200.sgml [deleted file]
doc/atmos.sgml [deleted file]
doc/c128.sgml [deleted file]
doc/c16.sgml [deleted file]
doc/c64.sgml [deleted file]
doc/ca65.sgml [deleted file]
doc/cbm510.sgml [deleted file]
doc/cbm610.sgml [deleted file]
doc/cc65.sgml [deleted file]
doc/cl65.sgml [deleted file]
doc/co65.sgml [deleted file]
doc/coding.sgml [deleted file]
doc/customizing.sgml [deleted file]
doc/da65.sgml [deleted file]
doc/debugging.sgml [deleted file]
doc/dio.sgml [deleted file]
doc/doc.css [deleted file]
doc/doc.png [deleted file]
doc/funcref.sgml [deleted file]
doc/geos.sgml [deleted file]
doc/grc65.sgml [deleted file]
doc/header.html [deleted file]
doc/index.sgml [deleted file]
doc/intro.sgml [deleted file]
doc/ld65.sgml [deleted file]
doc/library.sgml [deleted file]
doc/lynx.sgml [deleted file]
doc/nes.sgml [deleted file]
doc/od65.sgml [deleted file]
doc/osi.sgml [deleted file]
doc/pce.sgml [deleted file]
doc/pet.sgml [deleted file]
doc/plus4.sgml [deleted file]
doc/smc.sgml [deleted file]
doc/sp65.sgml [deleted file]
doc/supervision.sgml [deleted file]
doc/using-make.sgml [deleted file]
doc/vic20.sgml [deleted file]
include/6502.h [deleted file]
include/_6522.h [deleted file]
include/_6525.h [deleted file]
include/_6526.h [deleted file]
include/_6545.h [deleted file]
include/_6551.h [deleted file]
include/_antic.h [deleted file]
include/_gtia.h [deleted file]
include/_heap.h [deleted file]
include/_mikey.h [deleted file]
include/_pbi.h [deleted file]
include/_pia.h [deleted file]
include/_pokey.h [deleted file]
include/_sid.h [deleted file]
include/_suzy.h [deleted file]
include/_ted.h [deleted file]
include/_vdc.h [deleted file]
include/_vic.h [deleted file]
include/_vic2.h [deleted file]
include/ace.h [deleted file]
include/apple2.h [deleted file]
include/apple2enh.h [deleted file]
include/assert.h [deleted file]
include/atari.h [deleted file]
include/atari5200.h [deleted file]
include/atmos.h [deleted file]
include/c128.h [deleted file]
include/c16.h [deleted file]
include/c64.h [deleted file]
include/cbm.h [deleted file]
include/cbm264.h [deleted file]
include/cbm510.h [deleted file]
include/cbm610.h [deleted file]
include/cbm_filetype.h [deleted file]
include/cc65.h [deleted file]
include/conio.h [deleted file]
include/ctype.h [deleted file]
include/dbg.h [deleted file]
include/device.h [deleted file]
include/dio.h [deleted file]
include/dirent.h [deleted file]
include/em.h [deleted file]
include/em/em-kernel.h [deleted file]
include/errno.h [deleted file]
include/fcntl.h [deleted file]
include/geos.h [deleted file]
include/geos/gconst.h [deleted file]
include/geos/gdisk.h [deleted file]
include/geos/gdlgbox.h [deleted file]
include/geos/gfile.h [deleted file]
include/geos/ggraph.h [deleted file]
include/geos/gmemory.h [deleted file]
include/geos/gmenu.h [deleted file]
include/geos/gprocess.h [deleted file]
include/geos/gsprite.h [deleted file]
include/geos/gstruct.h [deleted file]
include/geos/gsym.h [deleted file]
include/geos/gsys.h [deleted file]
include/inttypes.h [deleted file]
include/iso646.h [deleted file]
include/joystick.h [deleted file]
include/joystick/joy-kernel.h [deleted file]
include/limits.h [deleted file]
include/locale.h [deleted file]
include/lynx.h [deleted file]
include/modload.h [deleted file]
include/mouse.h [deleted file]
include/mouse/mouse-kernel.h [deleted file]
include/nes.h [deleted file]
include/o65.h [deleted file]
include/osic1p.h [deleted file]
include/pce.h [deleted file]
include/peekpoke.h [deleted file]
include/pen.h [deleted file]
include/pet.h [deleted file]
include/plus4.h [deleted file]
include/serial.h [deleted file]
include/setjmp.h [deleted file]
include/signal.h [deleted file]
include/stdarg.h [deleted file]
include/stdbool.h [deleted file]
include/stddef.h [deleted file]
include/stdint.h [deleted file]
include/stdio.h [deleted file]
include/stdlib.h [deleted file]
include/string.h [deleted file]
include/supervision.h [deleted file]
include/sys/types.h [deleted file]
include/sys/utsname.h [deleted file]
include/tgi.h [deleted file]
include/tgi/tgi-error.h [deleted file]
include/tgi/tgi-kernel.h [deleted file]
include/tgi/tgi-vectorfont.h [deleted file]
include/time.h [deleted file]
include/unistd.h [deleted file]
include/vic20.h [deleted file]
include/zlib.h [deleted file]
libsrc/Makefile [deleted file]
libsrc/apple2/_scrsize.s [deleted file]
libsrc/apple2/break.s [deleted file]
libsrc/apple2/cclear.s [deleted file]
libsrc/apple2/cgetc.s [deleted file]
libsrc/apple2/chline.s [deleted file]
libsrc/apple2/close.s [deleted file]
libsrc/apple2/closedir.c [deleted file]
libsrc/apple2/clrscr.s [deleted file]
libsrc/apple2/color.s [deleted file]
libsrc/apple2/cout.s [deleted file]
libsrc/apple2/cputc.s [deleted file]
libsrc/apple2/crt0.s [deleted file]
libsrc/apple2/ctype.s [deleted file]
libsrc/apple2/curdevice.s [deleted file]
libsrc/apple2/cvline.s [deleted file]
libsrc/apple2/devicedir.s [deleted file]
libsrc/apple2/dioclose.s [deleted file]
libsrc/apple2/diocommon.s [deleted file]
libsrc/apple2/dioopen.s [deleted file]
libsrc/apple2/dioread.s [deleted file]
libsrc/apple2/diosectcount.s [deleted file]
libsrc/apple2/diosectsize.s [deleted file]
libsrc/apple2/diowrite.s [deleted file]
libsrc/apple2/dir.h [deleted file]
libsrc/apple2/dosdetect.s [deleted file]
libsrc/apple2/emd/a2.auxmem.s [deleted file]
libsrc/apple2/exec.s [deleted file]
libsrc/apple2/exehdr.s [deleted file]
libsrc/apple2/extra/iobuf-0800.s [deleted file]
libsrc/apple2/filedes.inc [deleted file]
libsrc/apple2/filedes.s [deleted file]
libsrc/apple2/filename.s [deleted file]
libsrc/apple2/get_ostype.s [deleted file]
libsrc/apple2/getdevice.s [deleted file]
libsrc/apple2/gotoxy.s [deleted file]
libsrc/apple2/gotoy.s [deleted file]
libsrc/apple2/home.s [deleted file]
libsrc/apple2/initcwd.s [deleted file]
libsrc/apple2/iobuf.s [deleted file]
libsrc/apple2/irq.s [deleted file]
libsrc/apple2/isdevice.s [deleted file]
libsrc/apple2/joy/a2.stdjoy.s [deleted file]
libsrc/apple2/joy_stat_stddrv.s [deleted file]
libsrc/apple2/joy_stddrv.s [deleted file]
libsrc/apple2/kbhit.s [deleted file]
libsrc/apple2/libref.s [deleted file]
libsrc/apple2/lseek.s [deleted file]
libsrc/apple2/mainargs.s [deleted file]
libsrc/apple2/mcbdefault.s [deleted file]
libsrc/apple2/mli.inc [deleted file]
libsrc/apple2/mli.s [deleted file]
libsrc/apple2/mou/a2.stdmou.s [deleted file]
libsrc/apple2/mouse_stat_stddrv.s [deleted file]
libsrc/apple2/mouse_stddrv.s [deleted file]
libsrc/apple2/open.s [deleted file]
libsrc/apple2/opendir.c [deleted file]
libsrc/apple2/oserrlist.s [deleted file]
libsrc/apple2/oserror.s [deleted file]
libsrc/apple2/randomize.s [deleted file]
libsrc/apple2/rdkey.s [deleted file]
libsrc/apple2/read.s [deleted file]
libsrc/apple2/readdir.c [deleted file]
libsrc/apple2/reboot.s [deleted file]
libsrc/apple2/revers.s [deleted file]
libsrc/apple2/rewinddir.c [deleted file]
libsrc/apple2/rwcommon.s [deleted file]
libsrc/apple2/ser/a2.ssc.s [deleted file]
libsrc/apple2/syschdir.s [deleted file]
libsrc/apple2/sysmkdir.s [deleted file]
libsrc/apple2/sysremove.s [deleted file]
libsrc/apple2/sysrename.s [deleted file]
libsrc/apple2/sysrmdir.s [deleted file]
libsrc/apple2/systime.s [deleted file]
libsrc/apple2/sysuname.s [deleted file]
libsrc/apple2/targetutil/Makefile.inc [deleted file]
libsrc/apple2/targetutil/loader.cfg [deleted file]
libsrc/apple2/targetutil/loader.s [deleted file]
libsrc/apple2/textframe.s [deleted file]
libsrc/apple2/tgi/a2.hi.fnt [deleted file]
libsrc/apple2/tgi/a2.hi.s [deleted file]
libsrc/apple2/tgi/a2.lo.s [deleted file]
libsrc/apple2/tgi_colors.s [deleted file]
libsrc/apple2/tgi_stat_stddrv.s [deleted file]
libsrc/apple2/tgi_stddrv.s [deleted file]
libsrc/apple2/toascii.s [deleted file]
libsrc/apple2/videomode.s [deleted file]
libsrc/apple2/vtabz.s [deleted file]
libsrc/apple2/wherex.s [deleted file]
libsrc/apple2/wherey.s [deleted file]
libsrc/apple2/write.s [deleted file]
libsrc/atari/Makefile.inc [deleted file]
libsrc/atari/_scrsize.s [deleted file]
libsrc/atari/_sys.s [deleted file]
libsrc/atari/break.s [deleted file]
libsrc/atari/carthdr.s [deleted file]
libsrc/atari/cartinit.s [deleted file]
libsrc/atari/cartstart.s [deleted file]
libsrc/atari/cashdr.s [deleted file]
libsrc/atari/casinit.s [deleted file]
libsrc/atari/cclear.s [deleted file]
libsrc/atari/cgetc.s [deleted file]
libsrc/atari/chline.s [deleted file]
libsrc/atari/clock.s [deleted file]
libsrc/atari/close.s [deleted file]
libsrc/atari/clrscr.s [deleted file]
libsrc/atari/color.s [deleted file]
libsrc/atari/cputc.s [deleted file]
libsrc/atari/crt0.s [deleted file]
libsrc/atari/ctype.s [deleted file]
libsrc/atari/cvline.s [deleted file]
libsrc/atari/dio_cts.s [deleted file]
libsrc/atari/dio_stc.s [deleted file]
libsrc/atari/diopncls.s [deleted file]
libsrc/atari/dioqsize.s [deleted file]
libsrc/atari/dioread.s [deleted file]
libsrc/atari/diowrite.s [deleted file]
libsrc/atari/diowritev.s [deleted file]
libsrc/atari/do_oserr.s [deleted file]
libsrc/atari/dosdetect.s [deleted file]
libsrc/atari/emd/atr130.s [deleted file]
libsrc/atari/exehdr.s [deleted file]
libsrc/atari/exetrailer.s [deleted file]
libsrc/atari/fd.inc [deleted file]
libsrc/atari/fdtab.s [deleted file]
libsrc/atari/fdtable.s [deleted file]
libsrc/atari/fdtoiocb.s [deleted file]
libsrc/atari/findfreeiocb.inc [deleted file]
libsrc/atari/findfreeiocb.s [deleted file]
libsrc/atari/get_tv.s [deleted file]
libsrc/atari/getargs.s [deleted file]
libsrc/atari/getdefdev.s [deleted file]
libsrc/atari/getfd.s [deleted file]
libsrc/atari/gotox.s [deleted file]
libsrc/atari/gotoxy.s [deleted file]
libsrc/atari/gotoy.s [deleted file]
libsrc/atari/graphics.s [deleted file]
libsrc/atari/initcwd.s [deleted file]
libsrc/atari/inviocb.s [deleted file]
libsrc/atari/irq.s [deleted file]
libsrc/atari/joy/atrmj8.s [deleted file]
libsrc/atari/joy/atrstd.s [deleted file]
libsrc/atari/joy_stat_stddrv.s [deleted file]
libsrc/atari/joy_stddrv.s [deleted file]
libsrc/atari/kbhit.s [deleted file]
libsrc/atari/libref.s [deleted file]
libsrc/atari/lseek.s [deleted file]
libsrc/atari/mcbdefault.s [deleted file]
libsrc/atari/mcbpm-shape.s [deleted file]
libsrc/atari/mcbpm.s [deleted file]
libsrc/atari/mcbtxtchar-char.s [deleted file]
libsrc/atari/mcbtxtchar.s [deleted file]
libsrc/atari/mou/atrami.s [deleted file]
libsrc/atari/mou/atrjoy.s [deleted file]
libsrc/atari/mou/atrst.s [deleted file]
libsrc/atari/mou/atrtrk.s [deleted file]
libsrc/atari/mou/atrtt.s [deleted file]
libsrc/atari/mouse_stat_stddrv.s [deleted file]
libsrc/atari/mouse_stddrv.s [deleted file]
libsrc/atari/mouseref.s [deleted file]
libsrc/atari/mul40.s [deleted file]
libsrc/atari/open.s [deleted file]
libsrc/atari/oserrlist.s [deleted file]
libsrc/atari/oserror.s [deleted file]
libsrc/atari/ostype.s [deleted file]
libsrc/atari/posixdirent.s [deleted file]
libsrc/atari/randomize.s [deleted file]
libsrc/atari/read.s [deleted file]
libsrc/atari/revers.s [deleted file]
libsrc/atari/romswitch.inc [deleted file]
libsrc/atari/rwcommon.s [deleted file]
libsrc/atari/save_area.inc [deleted file]
libsrc/atari/save_area.s [deleted file]
libsrc/atari/savevec.s [deleted file]
libsrc/atari/scrdev.s [deleted file]
libsrc/atari/scroll.s [deleted file]
libsrc/atari/ser/atrrdev.s [deleted file]
libsrc/atari/serref.s [deleted file]
libsrc/atari/setcolor.s [deleted file]
libsrc/atari/shadow_ram_handlers.s [deleted file]
libsrc/atari/shadow_ram_prepare.s [deleted file]
libsrc/atari/shadow_ram_timerirq1.s [deleted file]
libsrc/atari/siocall.s [deleted file]
libsrc/atari/syschdir.s [deleted file]
libsrc/atari/sysmkdir.s [deleted file]
libsrc/atari/sysremove.s [deleted file]
libsrc/atari/sysrename.s [deleted file]
libsrc/atari/sysrmdir.s [deleted file]
libsrc/atari/system_check.s [deleted file]
libsrc/atari/systime.s [deleted file]
libsrc/atari/sysuname.s [deleted file]
libsrc/atari/targetutil/Makefile.inc [deleted file]
libsrc/atari/targetutil/w2cas.c [deleted file]
libsrc/atari/tgi/atari_tgi_common.inc [deleted file]
libsrc/atari/tgi/atr10.s [deleted file]
libsrc/atari/tgi/atr10p2.s [deleted file]
libsrc/atari/tgi/atr11.s [deleted file]
libsrc/atari/tgi/atr14.s [deleted file]
libsrc/atari/tgi/atr15.s [deleted file]
libsrc/atari/tgi/atr15p2.s [deleted file]
libsrc/atari/tgi/atr3.s [deleted file]
libsrc/atari/tgi/atr4.s [deleted file]
libsrc/atari/tgi/atr5.s [deleted file]
libsrc/atari/tgi/atr6.s [deleted file]
libsrc/atari/tgi/atr7.s [deleted file]
libsrc/atari/tgi/atr8.s [deleted file]
libsrc/atari/tgi/atr8p2.s [deleted file]
libsrc/atari/tgi/atr9.s [deleted file]
libsrc/atari/tgi/atr9p2.s [deleted file]
libsrc/atari/tgi_colors.s [deleted file]
libsrc/atari/tgi_stat_stddrv.s [deleted file]
libsrc/atari/tgi_stddrv.s [deleted file]
libsrc/atari/toascii.s [deleted file]
libsrc/atari/ucase_fn.s [deleted file]
libsrc/atari/wherex.s [deleted file]
libsrc/atari/wherey.s [deleted file]
libsrc/atari/write.s [deleted file]
libsrc/atari/xlmemchk.inc [deleted file]
libsrc/atari5200/cartentry.s [deleted file]
libsrc/atari5200/cartname.s [deleted file]
libsrc/atari5200/cartyear.s [deleted file]
libsrc/atari5200/cclear.s [deleted file]
libsrc/atari5200/chline.s [deleted file]
libsrc/atari5200/clock.s [deleted file]
libsrc/atari5200/clrscr.s [deleted file]
libsrc/atari5200/conioscreen.s [deleted file]
libsrc/atari5200/cputc.s [deleted file]
libsrc/atari5200/crt0.s [deleted file]
libsrc/atari5200/ctype.s [deleted file]
libsrc/atari5200/cvline.s [deleted file]
libsrc/atari5200/get_tv.s [deleted file]
libsrc/atari5200/gotox.s [deleted file]
libsrc/atari5200/gotoxy.s [deleted file]
libsrc/atari5200/gotoy.s [deleted file]
libsrc/atari5200/irq.s [deleted file]
libsrc/atari5200/joy/atr5200std.s [deleted file]
libsrc/atari5200/joy_stat_stddrv.s [deleted file]
libsrc/atari5200/libref.s [deleted file]
libsrc/atari5200/mul20.s [deleted file]
libsrc/atari5200/randomize.s [deleted file]
libsrc/atari5200/setcursor.s [deleted file]
libsrc/atari5200/sysuname.s [deleted file]
libsrc/atari5200/y2k.inc [deleted file]
libsrc/atmos/_scrsize.s [deleted file]
libsrc/atmos/atmos.s [deleted file]
libsrc/atmos/atmos_load.s [deleted file]
libsrc/atmos/atmos_save.s [deleted file]
libsrc/atmos/bashdr.s [deleted file]
libsrc/atmos/capslock.s [deleted file]
libsrc/atmos/cclear.s [deleted file]
libsrc/atmos/cgetc.s [deleted file]
libsrc/atmos/chline.s [deleted file]
libsrc/atmos/clock.s [deleted file]
libsrc/atmos/clrscr.s [deleted file]
libsrc/atmos/color.s [deleted file]
libsrc/atmos/cputc.s [deleted file]
libsrc/atmos/crt0.s [deleted file]
libsrc/atmos/ctype.s [deleted file]
libsrc/atmos/cvline.s [deleted file]
libsrc/atmos/gotox.s [deleted file]
libsrc/atmos/gotoxy.s [deleted file]
libsrc/atmos/gotoy.s [deleted file]
libsrc/atmos/irq.s [deleted file]
libsrc/atmos/joy/atmos-pase.s [deleted file]
libsrc/atmos/joy_stat_stddrv.s [deleted file]
libsrc/atmos/joy_stddrv.s [deleted file]
libsrc/atmos/kbhit.s [deleted file]
libsrc/atmos/libref.s [deleted file]
libsrc/atmos/mainargs.s [deleted file]
libsrc/atmos/oserrlist.s [deleted file]
libsrc/atmos/oserror.s [deleted file]
libsrc/atmos/read.s [deleted file]
libsrc/atmos/revers.s [deleted file]
libsrc/atmos/ser/atmos-acia.s [deleted file]
libsrc/atmos/store_filename.s [deleted file]
libsrc/atmos/systime.s [deleted file]
libsrc/atmos/sysuname.s [deleted file]
libsrc/atmos/tapehdr.s [deleted file]
libsrc/atmos/tgi/atmos-228-200-3.s [deleted file]
libsrc/atmos/tgi/atmos-240-200-2.s [deleted file]
libsrc/atmos/tgi_colors.s [deleted file]
libsrc/atmos/tgi_stat_stddrv.s [deleted file]
libsrc/atmos/tgi_stddrv.s [deleted file]
libsrc/atmos/toascii.s [deleted file]
libsrc/atmos/wherex.s [deleted file]
libsrc/atmos/wherey.s [deleted file]
libsrc/atmos/write.s [deleted file]
libsrc/c128/_scrsize.s [deleted file]
libsrc/c128/break.s [deleted file]
libsrc/c128/c64mode.s [deleted file]
libsrc/c128/cgetc.s [deleted file]
libsrc/c128/clrscr.s [deleted file]
libsrc/c128/color.s [deleted file]
libsrc/c128/conio.s [deleted file]
libsrc/c128/cputc.s [deleted file]
libsrc/c128/crt0.s [deleted file]
libsrc/c128/dbgbreak.s_ [deleted file]
libsrc/c128/devnum.s [deleted file]
libsrc/c128/emd/c128-georam.s [deleted file]
libsrc/c128/emd/c128-ram.s [deleted file]
libsrc/c128/emd/c128-ram2.s [deleted file]
libsrc/c128/emd/c128-ramcart.s [deleted file]
libsrc/c128/emd/c128-reu.s [deleted file]
libsrc/c128/emd/c128-vdc.s [deleted file]
libsrc/c128/fast.s [deleted file]
libsrc/c128/get_tv.s [deleted file]
libsrc/c128/irq.s [deleted file]
libsrc/c128/joy/c128-ptvjoy.s [deleted file]
libsrc/c128/joy/c128-stdjoy.s [deleted file]
libsrc/c128/joy_stat_stddrv.s [deleted file]
libsrc/c128/joy_stddrv.s [deleted file]
libsrc/c128/kbhit.s [deleted file]
libsrc/c128/kernal.s [deleted file]
libsrc/c128/libref.s [deleted file]
libsrc/c128/mainargs.s [deleted file]
libsrc/c128/mcbdefault.s [deleted file]
libsrc/c128/mou/c128-1351.s [deleted file]
libsrc/c128/mou/c128-inkwell.s [deleted file]
libsrc/c128/mou/c128-joy.s [deleted file]
libsrc/c128/mou/c128-pot.s [deleted file]
libsrc/c128/mou/callback.inc [deleted file]
libsrc/c128/mouse_stat_stddrv.s [deleted file]
libsrc/c128/mouse_stddrv.s [deleted file]
libsrc/c128/mouseref.s [deleted file]
libsrc/c128/pencalib.c [deleted file]
libsrc/c128/randomize.s [deleted file]
libsrc/c128/revers.s [deleted file]
libsrc/c128/ser/c128-swlink.s [deleted file]
libsrc/c128/slow.s [deleted file]
libsrc/c128/status.s [deleted file]
libsrc/c128/systime.s [deleted file]
libsrc/c128/sysuname.s [deleted file]
libsrc/c128/tgi/c128-vdc.s [deleted file]
libsrc/c128/tgi/c128-vdc2.s [deleted file]
libsrc/c128/tgi_colors.s [deleted file]
libsrc/c128/tgi_stat_stddrv.s [deleted file]
libsrc/c128/tgi_stddrv.s [deleted file]
libsrc/c128/toggle_videomode.s [deleted file]
libsrc/c128/videomode.s [deleted file]
libsrc/c16/_scrsize.s [deleted file]
libsrc/c16/break.s [deleted file]
libsrc/c16/cgetc.s [deleted file]
libsrc/c16/clrscr.s [deleted file]
libsrc/c16/color.s [deleted file]
libsrc/c16/conio.s [deleted file]
libsrc/c16/cputc.s [deleted file]
libsrc/c16/crt0.s [deleted file]
libsrc/c16/devnum.s [deleted file]
libsrc/c16/emd/c16-ram.s [deleted file]
libsrc/c16/get_tv.s [deleted file]
libsrc/c16/irq.s [deleted file]
libsrc/c16/joy/c16-stdjoy.s [deleted file]
libsrc/c16/joy_stat_stddrv.s [deleted file]
libsrc/c16/joy_stddrv.s [deleted file]
libsrc/c16/kbhit.s [deleted file]
libsrc/c16/kclose.s [deleted file]
libsrc/c16/kernal.s [deleted file]
libsrc/c16/libref.s [deleted file]
libsrc/c16/mainargs.s [deleted file]
libsrc/c16/randomize.s [deleted file]
libsrc/c16/revers.s [deleted file]
libsrc/c16/status.s [deleted file]
libsrc/c16/systime.s [deleted file]
libsrc/c16/sysuname.s [deleted file]
libsrc/c64/_scrsize.s [deleted file]
libsrc/c64/break.s [deleted file]
libsrc/c64/cgetc.s [deleted file]
libsrc/c64/clrscr.s [deleted file]
libsrc/c64/color.s [deleted file]
libsrc/c64/conio.s [deleted file]
libsrc/c64/cputc.s [deleted file]
libsrc/c64/crt0.s [deleted file]
libsrc/c64/devnum.s [deleted file]
libsrc/c64/emd/c64-c256k.s [deleted file]
libsrc/c64/emd/c64-dqbb.s [deleted file]
libsrc/c64/emd/c64-georam.s [deleted file]
libsrc/c64/emd/c64-isepic.s [deleted file]
libsrc/c64/emd/c64-ram.s [deleted file]
libsrc/c64/emd/c64-ramcart.s [deleted file]
libsrc/c64/emd/c64-reu.s [deleted file]
libsrc/c64/emd/c64-vdc.s [deleted file]
libsrc/c64/emd/dtv-himem.s [deleted file]
libsrc/c64/get_ostype.s [deleted file]
libsrc/c64/get_tv.s [deleted file]
libsrc/c64/irq.s [deleted file]
libsrc/c64/joy/c64-hitjoy.s [deleted file]
libsrc/c64/joy/c64-numpad.s [deleted file]
libsrc/c64/joy/c64-ptvjoy.s [deleted file]
libsrc/c64/joy/c64-stdjoy.s [deleted file]
libsrc/c64/joy_stat_stddrv.s [deleted file]
libsrc/c64/joy_stddrv.s [deleted file]
libsrc/c64/kbhit.s [deleted file]
libsrc/c64/kernal.s [deleted file]
libsrc/c64/kplot.s [deleted file]
libsrc/c64/libref.s [deleted file]
libsrc/c64/mainargs.s [deleted file]
libsrc/c64/mcbdefault.s [deleted file]
libsrc/c64/mou/c64-1351.s [deleted file]
libsrc/c64/mou/c64-inkwell.s [deleted file]
libsrc/c64/mou/c64-joy.s [deleted file]
libsrc/c64/mou/c64-pot.s [deleted file]
libsrc/c64/mouse_stat_stddrv.s [deleted file]
libsrc/c64/mouse_stddrv.s [deleted file]
libsrc/c64/mouseref.s [deleted file]
libsrc/c64/pencalib.c [deleted file]
libsrc/c64/randomize.s [deleted file]
libsrc/c64/revers.s [deleted file]
libsrc/c64/ser/c64-swlink.s [deleted file]
libsrc/c64/status.s [deleted file]
libsrc/c64/systime.s [deleted file]
libsrc/c64/sysuname.s [deleted file]
libsrc/c64/tgi/c64-hi.s [deleted file]
libsrc/c64/tgi_colors.s [deleted file]
libsrc/c64/tgi_stat_stddrv.s [deleted file]
libsrc/c64/tgi_stddrv.s [deleted file]
libsrc/cbm/c_acptr.s [deleted file]
libsrc/cbm/c_basin.s [deleted file]
libsrc/cbm/c_bsout.s [deleted file]
libsrc/cbm/c_chkin.s [deleted file]
libsrc/cbm/c_ciout.s [deleted file]
libsrc/cbm/c_ckout.s [deleted file]
libsrc/cbm/c_clall.s [deleted file]
libsrc/cbm/c_close.s [deleted file]
libsrc/cbm/c_clrch.s [deleted file]
libsrc/cbm/c_getin.s [deleted file]
libsrc/cbm/c_iobase.s [deleted file]
libsrc/cbm/c_listen.s [deleted file]
libsrc/cbm/c_load.s [deleted file]
libsrc/cbm/c_open.s [deleted file]
libsrc/cbm/c_readst.s [deleted file]
libsrc/cbm/c_save.s [deleted file]
libsrc/cbm/c_setlfs.s [deleted file]
libsrc/cbm/c_setnam.s [deleted file]
libsrc/cbm/c_talk.s [deleted file]
libsrc/cbm/c_unlsn.s [deleted file]
libsrc/cbm/c_untlk.s [deleted file]
libsrc/cbm/cbm.inc [deleted file]
libsrc/cbm/cbm_close.s [deleted file]
libsrc/cbm/cbm_dir.c [deleted file]
libsrc/cbm/cbm_filetype.s [deleted file]
libsrc/cbm/cbm_load.c [deleted file]
libsrc/cbm/cbm_open.s [deleted file]
libsrc/cbm/cbm_read.s [deleted file]
libsrc/cbm/cbm_save.c [deleted file]
libsrc/cbm/cbm_write.s [deleted file]
libsrc/cbm/cclear.s [deleted file]
libsrc/cbm/chline.s [deleted file]
libsrc/cbm/clock.s [deleted file]
libsrc/cbm/close.s [deleted file]
libsrc/cbm/closedir.s [deleted file]
libsrc/cbm/ctype.s [deleted file]
libsrc/cbm/curdevice.s [deleted file]
libsrc/cbm/cvline.s [deleted file]
libsrc/cbm/devicedir.s [deleted file]
libsrc/cbm/dir.h [deleted file]
libsrc/cbm/dir.inc [deleted file]
libsrc/cbm/dir.s [deleted file]
libsrc/cbm/diskcmd.s [deleted file]
libsrc/cbm/diskinit.s [deleted file]
libsrc/cbm/exec.c [deleted file]
libsrc/cbm/execvars.s [deleted file]
libsrc/cbm/exehdr.s [deleted file]
libsrc/cbm/filedes.inc [deleted file]
libsrc/cbm/filedes.s [deleted file]
libsrc/cbm/filename.s [deleted file]
libsrc/cbm/filetype.s [deleted file]
libsrc/cbm/filevars.s [deleted file]
libsrc/cbm/getdevice.s [deleted file]
libsrc/cbm/gotox.s [deleted file]
libsrc/cbm/gotoxy.s [deleted file]
libsrc/cbm/gotoy.s [deleted file]
libsrc/cbm/initcwd.s [deleted file]
libsrc/cbm/loadaddr.s [deleted file]
libsrc/cbm/open.s [deleted file]
libsrc/cbm/opendir.c [deleted file]
libsrc/cbm/oserrlist.s [deleted file]
libsrc/cbm/oserror.s [deleted file]
libsrc/cbm/overlayaddr.s [deleted file]
libsrc/cbm/penadjust.c [deleted file]
libsrc/cbm/read.s [deleted file]
libsrc/cbm/readdir.c [deleted file]
libsrc/cbm/rewinddir.s [deleted file]
libsrc/cbm/rwcommon.s [deleted file]
libsrc/cbm/scratch.s [deleted file]
libsrc/cbm/seekdir.c [deleted file]
libsrc/cbm/syschdir.s [deleted file]
libsrc/cbm/sysremove.s [deleted file]
libsrc/cbm/sysrename.s [deleted file]
libsrc/cbm/telldir.s [deleted file]
libsrc/cbm/toascii.s [deleted file]
libsrc/cbm/wherex.s [deleted file]
libsrc/cbm/wherey.s [deleted file]
libsrc/cbm/write.s [deleted file]
libsrc/cbm510/_scrsize.s [deleted file]
libsrc/cbm510/banking.s [deleted file]
libsrc/cbm510/break.s [deleted file]
libsrc/cbm510/cgetc.s [deleted file]
libsrc/cbm510/clrscr.s [deleted file]
libsrc/cbm510/color.s [deleted file]
libsrc/cbm510/cputc.s [deleted file]
libsrc/cbm510/crt0.s [deleted file]
libsrc/cbm510/devnum.s [deleted file]
libsrc/cbm510/emd/cbm510-ram.s [deleted file]
libsrc/cbm510/extzp.inc [deleted file]
libsrc/cbm510/extzp.s [deleted file]
libsrc/cbm510/irq.s [deleted file]
libsrc/cbm510/joy/cbm510-std.s [deleted file]
libsrc/cbm510/joy_stat_stddrv.s [deleted file]
libsrc/cbm510/joy_stddrv.s [deleted file]
libsrc/cbm510/kbhit.s [deleted file]
libsrc/cbm510/kclose.s [deleted file]
libsrc/cbm510/kernal.s [deleted file]
libsrc/cbm510/kiobase.s [deleted file]
libsrc/cbm510/kopen.s [deleted file]
libsrc/cbm510/krdtim.s [deleted file]
libsrc/cbm510/kreadst.s [deleted file]
libsrc/cbm510/kscnkey.s [deleted file]
libsrc/cbm510/kscreen.s [deleted file]
libsrc/cbm510/ksetnam.s [deleted file]
libsrc/cbm510/ksettim.s [deleted file]
libsrc/cbm510/kudtim.s [deleted file]
libsrc/cbm510/libref.s [deleted file]
libsrc/cbm510/mainargs.s [deleted file]
libsrc/cbm510/mcbdefault.s [deleted file]
libsrc/cbm510/mou/cbm510-inkwl.s [deleted file]
libsrc/cbm510/mou/cbm510-joy.s [deleted file]
libsrc/cbm510/mouse_stat_stddrv.s [deleted file]
libsrc/cbm510/mouse_stddrv.s [deleted file]
libsrc/cbm510/mouseref.s [deleted file]
libsrc/cbm510/peeksys.s [deleted file]
libsrc/cbm510/pencalib.c [deleted file]
libsrc/cbm510/pokesys.s [deleted file]
libsrc/cbm510/randomize.s [deleted file]
libsrc/cbm510/revers.s [deleted file]
libsrc/cbm510/ser/cbm510-std.s [deleted file]
libsrc/cbm510/systime.s [deleted file]
libsrc/cbm510/sysuname.s [deleted file]
libsrc/cbm610/_scrsize.s [deleted file]
libsrc/cbm610/banking.s [deleted file]
libsrc/cbm610/break.s [deleted file]
libsrc/cbm610/cgetc.s [deleted file]
libsrc/cbm610/clrscr.s [deleted file]
libsrc/cbm610/color.s [deleted file]
libsrc/cbm610/cputc.s [deleted file]
libsrc/cbm610/crt0.s [deleted file]
libsrc/cbm610/crtc.s [deleted file]
libsrc/cbm610/devnum.s [deleted file]
libsrc/cbm610/emd/cbm610-ram.s [deleted file]
libsrc/cbm610/extzp.inc [deleted file]
libsrc/cbm610/extzp.s [deleted file]
libsrc/cbm610/get_tv.s [deleted file]
libsrc/cbm610/irq.s [deleted file]
libsrc/cbm610/kbhit.s [deleted file]
libsrc/cbm610/kclose.s [deleted file]
libsrc/cbm610/kernal.s [deleted file]
libsrc/cbm610/kiobase.s [deleted file]
libsrc/cbm610/kopen.s [deleted file]
libsrc/cbm610/krdtim.s [deleted file]
libsrc/cbm610/kreadst.s [deleted file]
libsrc/cbm610/kscnkey.s [deleted file]
libsrc/cbm610/kscreen.s [deleted file]
libsrc/cbm610/ksetnam.s [deleted file]
libsrc/cbm610/ksettim.s [deleted file]
libsrc/cbm610/kudtim.s [deleted file]
libsrc/cbm610/libref.s [deleted file]
libsrc/cbm610/mainargs.s [deleted file]
libsrc/cbm610/peeksys.s [deleted file]
libsrc/cbm610/pokesys.s [deleted file]
libsrc/cbm610/randomize.s [deleted file]
libsrc/cbm610/revers.s [deleted file]
libsrc/cbm610/ser/cbm610-std.s [deleted file]
libsrc/cbm610/systime.s [deleted file]
libsrc/cbm610/sysuname.s [deleted file]
libsrc/common/_afailed.c [deleted file]
libsrc/common/_cwd.s [deleted file]
libsrc/common/_directerrno.s [deleted file]
libsrc/common/_environ.s [deleted file]
libsrc/common/_fdesc.s [deleted file]
libsrc/common/_file.h [deleted file]
libsrc/common/_file.s [deleted file]
libsrc/common/_fopen.s [deleted file]
libsrc/common/_heap.s [deleted file]
libsrc/common/_heapadd.s [deleted file]
libsrc/common/_heapblocksize.s [deleted file]
libsrc/common/_heapmaxavail.s [deleted file]
libsrc/common/_heapmemavail.s [deleted file]
libsrc/common/_hextab.c [deleted file]
libsrc/common/_longminstr.c [deleted file]
libsrc/common/_mappederrno.s [deleted file]
libsrc/common/_oserror.s [deleted file]
libsrc/common/_poserror.c [deleted file]
libsrc/common/_printf.h [deleted file]
libsrc/common/_printf.s [deleted file]
libsrc/common/_scanf.c [deleted file]
libsrc/common/_scanf.h [deleted file]
libsrc/common/_scanf.inc [deleted file]
libsrc/common/_seterrno.s [deleted file]
libsrc/common/_swap.s [deleted file]
libsrc/common/_sys.s [deleted file]
libsrc/common/abort.c [deleted file]
libsrc/common/abs.s [deleted file]
libsrc/common/asctime.c [deleted file]
libsrc/common/atexit.s [deleted file]
libsrc/common/atoi.s [deleted file]
libsrc/common/bsearch.c [deleted file]
libsrc/common/calloc.s [deleted file]
libsrc/common/cc65_idiv32by16r16.s [deleted file]
libsrc/common/cc65_imul16x16r32.s [deleted file]
libsrc/common/cc65_imul8x8r16.s [deleted file]
libsrc/common/cc65_sincos.s [deleted file]
libsrc/common/cc65_udiv32by16r16.s [deleted file]
libsrc/common/cc65_umul16x16r32.s [deleted file]
libsrc/common/cc65_umul16x8r32.s [deleted file]
libsrc/common/cc65_umul8x8r16.s [deleted file]
libsrc/common/chdir.s [deleted file]
libsrc/common/copydata.s [deleted file]
libsrc/common/creat.s [deleted file]
libsrc/common/ctime.s [deleted file]
libsrc/common/divt.s [deleted file]
libsrc/common/errno.s [deleted file]
libsrc/common/errormsg.c [deleted file]
libsrc/common/fclose.s [deleted file]
libsrc/common/fdopen.c [deleted file]
libsrc/common/fgetc.c [deleted file]
libsrc/common/fgetpos.c [deleted file]
libsrc/common/fgets.c [deleted file]
libsrc/common/fmisc.s [deleted file]
libsrc/common/fopen.s [deleted file]
libsrc/common/fprintf.s [deleted file]
libsrc/common/fputc.c [deleted file]
libsrc/common/fputs.c [deleted file]
libsrc/common/fread.s [deleted file]
libsrc/common/free.s [deleted file]
libsrc/common/freopen.c [deleted file]
libsrc/common/fscanf.s [deleted file]
libsrc/common/fseek.c [deleted file]
libsrc/common/fsetpos.c [deleted file]
libsrc/common/ftell.c [deleted file]
libsrc/common/fwrite.s [deleted file]
libsrc/common/getchar.c [deleted file]
libsrc/common/getcpu.s [deleted file]
libsrc/common/getcwd.s [deleted file]
libsrc/common/getenv.s [deleted file]
libsrc/common/getopt.c [deleted file]
libsrc/common/gets.c [deleted file]
libsrc/common/gmtime.c [deleted file]
libsrc/common/interrupt.s [deleted file]
libsrc/common/isalnum.s [deleted file]
libsrc/common/isalpha.s [deleted file]
libsrc/common/isblank.s [deleted file]
libsrc/common/iscntrl.s [deleted file]
libsrc/common/isdigit.s [deleted file]
libsrc/common/isgraph.s [deleted file]
libsrc/common/islower.s [deleted file]
libsrc/common/isprint.s [deleted file]
libsrc/common/ispunct.s [deleted file]
libsrc/common/isspace.s [deleted file]
libsrc/common/isupper.s [deleted file]
libsrc/common/isxdigit.s [deleted file]
libsrc/common/itoa.s [deleted file]
libsrc/common/labs.s [deleted file]
libsrc/common/locale.c [deleted file]
libsrc/common/localtime.c [deleted file]
libsrc/common/longjmp.s [deleted file]
libsrc/common/ltoa.s [deleted file]
libsrc/common/malloc.s [deleted file]
libsrc/common/memchr.s [deleted file]
libsrc/common/memcmp.s [deleted file]
libsrc/common/memcpy.s [deleted file]
libsrc/common/memmove.s [deleted file]
libsrc/common/memset.s [deleted file]
libsrc/common/mkdir.s [deleted file]
libsrc/common/mktime.c [deleted file]
libsrc/common/modfree.s [deleted file]
libsrc/common/modload.s [deleted file]
libsrc/common/perror.c [deleted file]
libsrc/common/pmemalign.c [deleted file]
libsrc/common/printf.s [deleted file]
libsrc/common/putchar.s [deleted file]
libsrc/common/putenv.s [deleted file]
libsrc/common/puts.c [deleted file]
libsrc/common/qsort.c [deleted file]
libsrc/common/raise.s [deleted file]
libsrc/common/rand.s [deleted file]
libsrc/common/realloc.c [deleted file]
libsrc/common/remove.s [deleted file]
libsrc/common/rename.s [deleted file]
libsrc/common/rewind.c [deleted file]
libsrc/common/rmdir.s [deleted file]
libsrc/common/scanf.s [deleted file]
libsrc/common/searchenv.s [deleted file]
libsrc/common/setjmp.s [deleted file]
libsrc/common/signal.s [deleted file]
libsrc/common/sigtable.s [deleted file]
libsrc/common/sleep.c [deleted file]
libsrc/common/snprintf.s [deleted file]
libsrc/common/sprintf.s [deleted file]
libsrc/common/sscanf.s [deleted file]
libsrc/common/strcat.s [deleted file]
libsrc/common/strchr.s [deleted file]
libsrc/common/strcmp.s [deleted file]
libsrc/common/strcoll.s [deleted file]
libsrc/common/strcpy.s [deleted file]
libsrc/common/strcspn.s [deleted file]
libsrc/common/strdup.s [deleted file]
libsrc/common/strerror.s [deleted file]
libsrc/common/strftime.c [deleted file]
libsrc/common/stricmp.s [deleted file]
libsrc/common/strlen.s [deleted file]
libsrc/common/strlower.s [deleted file]
libsrc/common/strncat.s [deleted file]
libsrc/common/strncmp.s [deleted file]
libsrc/common/strncpy.s [deleted file]
libsrc/common/strnicmp.s [deleted file]
libsrc/common/stroserr.s [deleted file]
libsrc/common/strpbrk.s [deleted file]
libsrc/common/strqtok.c [deleted file]
libsrc/common/strrchr.s [deleted file]
libsrc/common/strspn.s [deleted file]
libsrc/common/strstr.s [deleted file]
libsrc/common/strtoimax.s [deleted file]
libsrc/common/strtok.c [deleted file]
libsrc/common/strtol.c [deleted file]
libsrc/common/strtoul.c [deleted file]
libsrc/common/strtoumax.s [deleted file]
libsrc/common/strupper.s [deleted file]
libsrc/common/strxfrm.c [deleted file]
libsrc/common/system.c [deleted file]
libsrc/common/time.s [deleted file]
libsrc/common/timezone.c [deleted file]
libsrc/common/tolower.s [deleted file]
libsrc/common/toupper.s [deleted file]
libsrc/common/uname.s [deleted file]
libsrc/common/ungetc.s [deleted file]
libsrc/common/unlink.s [deleted file]
libsrc/common/utscopy.s [deleted file]
libsrc/common/vfprintf.s [deleted file]
libsrc/common/vfscanf.s [deleted file]
libsrc/common/vprintf.s [deleted file]
libsrc/common/vscanf.s [deleted file]
libsrc/common/vsnprintf.s [deleted file]
libsrc/common/vsprintf.s [deleted file]
libsrc/common/vsscanf.s [deleted file]
libsrc/common/zerobss.s [deleted file]
libsrc/conio/_cursor.s [deleted file]
libsrc/conio/cprintf.s [deleted file]
libsrc/conio/cputhex.s [deleted file]
libsrc/conio/cputs.s [deleted file]
libsrc/conio/cscanf.s [deleted file]
libsrc/conio/cursor.s [deleted file]
libsrc/conio/scrsize.s [deleted file]
libsrc/conio/vcprintf.s [deleted file]
libsrc/conio/vcscanf.s [deleted file]
libsrc/dbg/asmtab.s [deleted file]
libsrc/dbg/dbg.c [deleted file]
libsrc/dbg/dbgdasm.s [deleted file]
libsrc/dbg/dbgdump.s [deleted file]
libsrc/dbg/dbgisram.s [deleted file]
libsrc/dbg/dbgsupp.s [deleted file]
libsrc/em/em-kernel.s [deleted file]
libsrc/em/em_commit.s [deleted file]
libsrc/em/em_copyfrom.s [deleted file]
libsrc/em/em_copyto.s [deleted file]
libsrc/em/em_load.s [deleted file]
libsrc/em/em_map.s [deleted file]
libsrc/em/em_pagecount.s [deleted file]
libsrc/em/em_unload.s [deleted file]
libsrc/em/em_use.s [deleted file]
libsrc/geos-apple/Makefile.inc [deleted file]
libsrc/geos-apple/disk/enterturbo.s [deleted file]
libsrc/geos-apple/disk/exitturbo.s [deleted file]
libsrc/geos-apple/disk/purgeturbo.s [deleted file]
libsrc/geos-apple/diskdrv.inc [deleted file]
libsrc/geos-apple/geossym.inc [deleted file]
libsrc/geos-apple/jumptab.inc [deleted file]
libsrc/geos-apple/targetutil/Makefile.inc [deleted file]
libsrc/geos-apple/targetutil/convert.c [deleted file]
libsrc/geos-cbm/Makefile.inc [deleted file]
libsrc/geos-cbm/dio.inc [deleted file]
libsrc/geos-cbm/disk/changediskdevice.s [deleted file]
libsrc/geos-cbm/disk/chkdkgeos.s [deleted file]
libsrc/geos-cbm/disk/dio_cts.s [deleted file]
libsrc/geos-cbm/disk/dio_openclose.s [deleted file]
libsrc/geos-cbm/disk/dio_params.s [deleted file]
libsrc/geos-cbm/disk/dio_qcount.s [deleted file]
libsrc/geos-cbm/disk/dio_qsize.s [deleted file]
libsrc/geos-cbm/disk/dio_read.s [deleted file]
libsrc/geos-cbm/disk/dio_stc.s [deleted file]
libsrc/geos-cbm/disk/dio_write.s [deleted file]
libsrc/geos-cbm/disk/dio_writev.s [deleted file]
libsrc/geos-cbm/disk/enterturbo.s [deleted file]
libsrc/geos-cbm/disk/exitturbo.s [deleted file]
libsrc/geos-cbm/disk/findbambit.s [deleted file]
libsrc/geos-cbm/disk/newdisk.s [deleted file]
libsrc/geos-cbm/disk/purgeturbo.s [deleted file]
libsrc/geos-cbm/disk/readblock.s [deleted file]
libsrc/geos-cbm/disk/readbuff.s [deleted file]
libsrc/geos-cbm/disk/setgeosdisk.s [deleted file]
libsrc/geos-cbm/disk/verwriteblock.s [deleted file]
libsrc/geos-cbm/disk/writeblock.s [deleted file]
libsrc/geos-cbm/disk/writebuff.s [deleted file]
libsrc/geos-cbm/diskdrv.inc [deleted file]
libsrc/geos-cbm/emd/geos-vdc.s [deleted file]
libsrc/geos-cbm/file/followchain.s [deleted file]
libsrc/geos-cbm/geossym.inc [deleted file]
libsrc/geos-cbm/geossym2.inc [deleted file]
libsrc/geos-cbm/inputdrv.inc [deleted file]
libsrc/geos-cbm/joy/geos-stdjoy.s [deleted file]
libsrc/geos-cbm/jumptab.inc [deleted file]
libsrc/geos-cbm/memory/fetchram.s [deleted file]
libsrc/geos-cbm/memory/reuregs.s [deleted file]
libsrc/geos-cbm/memory/stashram.s [deleted file]
libsrc/geos-cbm/memory/swapram.s [deleted file]
libsrc/geos-cbm/memory/verifyram.s [deleted file]
libsrc/geos-cbm/printdrv.inc [deleted file]
libsrc/geos-cbm/system/get_ostype.s [deleted file]
libsrc/geos-cbm/system/getserialnumber.s [deleted file]
libsrc/geos-cbm/system/initdoneio.s [deleted file]
libsrc/geos-cbm/system/libref.s [deleted file]
libsrc/geos-cbm/system/setdevice.s [deleted file]
libsrc/geos-cbm/system/tobasic.s [deleted file]
libsrc/geos-cbm/tgi/geos-tgi.s [deleted file]
libsrc/geos-common/common/_afailed.c [deleted file]
libsrc/geos-common/common/_poserror.c [deleted file]
libsrc/geos-common/common/abort.c [deleted file]
libsrc/geos-common/common/copydata.s [deleted file]
libsrc/geos-common/common/memcpy.s [deleted file]
libsrc/geos-common/common/memmove.s [deleted file]
libsrc/geos-common/common/memset.s [deleted file]
libsrc/geos-common/common/perror.c [deleted file]
libsrc/geos-common/common/sleep.c [deleted file]
libsrc/geos-common/common/zerobss.s [deleted file]
libsrc/geos-common/conio/_scrsize.s [deleted file]
libsrc/geos-common/conio/cclear.s [deleted file]
libsrc/geos-common/conio/cgetc.s [deleted file]
libsrc/geos-common/conio/chline.s [deleted file]
libsrc/geos-common/conio/clrscr.s [deleted file]
libsrc/geos-common/conio/cputc.s [deleted file]
libsrc/geos-common/conio/cvline.s [deleted file]
libsrc/geos-common/conio/dummies.s [deleted file]
libsrc/geos-common/conio/gotoxy.s [deleted file]
libsrc/geos-common/conio/kbhit.s [deleted file]
libsrc/geos-common/conio/where.s [deleted file]
libsrc/geos-common/const.inc [deleted file]
libsrc/geos-common/disk/blkalloc.s [deleted file]
libsrc/geos-common/disk/calcblksfree.s [deleted file]
libsrc/geos-common/disk/freeblock.s [deleted file]
libsrc/geos-common/disk/getblock.s [deleted file]
libsrc/geos-common/disk/getdirhead.s [deleted file]
libsrc/geos-common/disk/getptrcurdknm.s [deleted file]
libsrc/geos-common/disk/gettrse.s [deleted file]
libsrc/geos-common/disk/nxtblkalloc.s [deleted file]
libsrc/geos-common/disk/opendisk.s [deleted file]
libsrc/geos-common/disk/putblock.s [deleted file]
libsrc/geos-common/disk/putdirhead.s [deleted file]
libsrc/geos-common/disk/setnextfree.s [deleted file]
libsrc/geos-common/dlgbox/dbget2lines.s [deleted file]
libsrc/geos-common/dlgbox/dlgboxfileselect.s [deleted file]
libsrc/geos-common/dlgbox/dlgboxgetstring.s [deleted file]
libsrc/geos-common/dlgbox/dlgboxok.s [deleted file]
libsrc/geos-common/dlgbox/dlgboxokcancel.s [deleted file]
libsrc/geos-common/dlgbox/dlgboxyesno.s [deleted file]
libsrc/geos-common/dlgbox/dodlgbox.s [deleted file]
libsrc/geos-common/dlgbox/messagebox.c [deleted file]
libsrc/geos-common/dlgbox/rstrfrmdialogue.s [deleted file]
libsrc/geos-common/drivers/fio_module.s [deleted file]
libsrc/geos-common/drivers/geos-stdmou.s [deleted file]
libsrc/geos-common/drivers/mcbdefault.s [deleted file]
libsrc/geos-common/drivers/mouse_stddrv.s [deleted file]
libsrc/geos-common/file/appendrecord.s [deleted file]
libsrc/geos-common/file/closerecordfile.s [deleted file]
libsrc/geos-common/file/deletefile.s [deleted file]
libsrc/geos-common/file/deleterecord.s [deleted file]
libsrc/geos-common/file/findfile.s [deleted file]
libsrc/geos-common/file/findftypes.s [deleted file]
libsrc/geos-common/file/freefile.s [deleted file]
libsrc/geos-common/file/get1stdirentry.s [deleted file]
libsrc/geos-common/file/getfhdrinfo.s [deleted file]
libsrc/geos-common/file/getfile.s [deleted file]
libsrc/geos-common/file/getnxtdirentry.s [deleted file]
libsrc/geos-common/file/insertrecord.s [deleted file]
libsrc/geos-common/file/nextrecord.s [deleted file]
libsrc/geos-common/file/openrecordfile.s [deleted file]
libsrc/geos-common/file/pointrecord.s [deleted file]
libsrc/geos-common/file/previousrecord.s [deleted file]
libsrc/geos-common/file/readbyte.s [deleted file]
libsrc/geos-common/file/readfile.s [deleted file]
libsrc/geos-common/file/readrecord.s [deleted file]
libsrc/geos-common/file/renamefile.s [deleted file]
libsrc/geos-common/file/savefile.s [deleted file]
libsrc/geos-common/file/sysremove.s [deleted file]
libsrc/geos-common/file/sysrename.s [deleted file]
libsrc/geos-common/file/updaterecordfile.s [deleted file]
libsrc/geos-common/file/writerecord.s [deleted file]
libsrc/geos-common/geosmac.inc [deleted file]
libsrc/geos-common/graph/bitmapclip.s [deleted file]
libsrc/geos-common/graph/bitmapregs.s [deleted file]
libsrc/geos-common/graph/bitmapup.s [deleted file]
libsrc/geos-common/graph/bitotherclip.s [deleted file]
libsrc/geos-common/graph/drawline.s [deleted file]
libsrc/geos-common/graph/drawpoint.s [deleted file]
libsrc/geos-common/graph/framerectangle.s [deleted file]
libsrc/geos-common/graph/getcharwidth.s [deleted file]
libsrc/geos-common/graph/getintcharint.s [deleted file]
libsrc/geos-common/graph/graphicsstring.s [deleted file]
libsrc/geos-common/graph/hlineregs.s [deleted file]
libsrc/geos-common/graph/horizontalline.s [deleted file]
libsrc/geos-common/graph/imprintrectangle.s [deleted file]
libsrc/geos-common/graph/initdrawwindow.s [deleted file]
libsrc/geos-common/graph/invertline.s [deleted file]
libsrc/geos-common/graph/invertrectangle.s [deleted file]
libsrc/geos-common/graph/loadcharset.s [deleted file]
libsrc/geos-common/graph/pointregs.s [deleted file]
libsrc/geos-common/graph/put_char.s [deleted file]
libsrc/geos-common/graph/putdecimal.s [deleted file]
libsrc/geos-common/graph/putstring.s [deleted file]
libsrc/geos-common/graph/recoverline.s [deleted file]
libsrc/geos-common/graph/recoverrectangle.s [deleted file]
libsrc/geos-common/graph/rectangle.s [deleted file]
libsrc/geos-common/graph/setpattern.s [deleted file]
libsrc/geos-common/graph/testpoint.s [deleted file]
libsrc/geos-common/graph/usesystemfont.s [deleted file]
libsrc/geos-common/graph/verticalline.s [deleted file]
libsrc/geos-common/memory/clearram.s [deleted file]
libsrc/geos-common/memory/cmpfstring.s [deleted file]
libsrc/geos-common/memory/cmpstring.s [deleted file]
libsrc/geos-common/memory/copyfstring.s [deleted file]
libsrc/geos-common/memory/copystring.s [deleted file]
libsrc/geos-common/memory/crc.s [deleted file]
libsrc/geos-common/memory/doublepop.s [deleted file]
libsrc/geos-common/memory/doublespop.s [deleted file]
libsrc/geos-common/memory/fillram.s [deleted file]
libsrc/geos-common/memory/initram.s [deleted file]
libsrc/geos-common/memory/movedata.s [deleted file]
libsrc/geos-common/menuicon/doicons.s [deleted file]
libsrc/geos-common/menuicon/domenu.s [deleted file]
libsrc/geos-common/menuicon/dopreviousmenu.s [deleted file]
libsrc/geos-common/menuicon/gotofirstmenu.s [deleted file]
libsrc/geos-common/menuicon/recoverallmenus.s [deleted file]
libsrc/geos-common/menuicon/recovermenu.s [deleted file]
libsrc/geos-common/menuicon/redomenu.s [deleted file]
libsrc/geos-common/mousesprite/clearmousemode.s [deleted file]
libsrc/geos-common/mousesprite/disablsprite.s [deleted file]
libsrc/geos-common/mousesprite/drawsprite.s [deleted file]
libsrc/geos-common/mousesprite/enablsprite.s [deleted file]
libsrc/geos-common/mousesprite/getnextchar.s [deleted file]
libsrc/geos-common/mousesprite/inittextprompt.s [deleted file]
libsrc/geos-common/mousesprite/ismseinregion.s [deleted file]
libsrc/geos-common/mousesprite/mouseoff.s [deleted file]
libsrc/geos-common/mousesprite/mouseup.s [deleted file]
libsrc/geos-common/mousesprite/possprite.s [deleted file]
libsrc/geos-common/mousesprite/promptoff.s [deleted file]
libsrc/geos-common/mousesprite/prompton.s [deleted file]
libsrc/geos-common/mousesprite/startmousemode.s [deleted file]
libsrc/geos-common/process/processblock.s [deleted file]
libsrc/geos-common/process/processfreeze.s [deleted file]
libsrc/geos-common/process/processinitrestartenable.s [deleted file]
libsrc/geos-common/process/processsleep.s [deleted file]
libsrc/geos-common/runtime/call.s [deleted file]
libsrc/geos-common/symbols.txt [deleted file]
libsrc/geos-common/system/callroutine.s [deleted file]
libsrc/geos-common/system/crt0.s [deleted file]
libsrc/geos-common/system/ctype.s [deleted file]
libsrc/geos-common/system/enterdesktop.s [deleted file]
libsrc/geos-common/system/extzp.s [deleted file]
libsrc/geos-common/system/firstinit.s [deleted file]
libsrc/geos-common/system/getrandom.s [deleted file]
libsrc/geos-common/system/joy_stddrv.s [deleted file]
libsrc/geos-common/system/mainargs.s [deleted file]
libsrc/geos-common/system/mainloop.s [deleted file]
libsrc/geos-common/system/oserrlist.s [deleted file]
libsrc/geos-common/system/oserror.s [deleted file]
libsrc/geos-common/system/panic.s [deleted file]
libsrc/geos-common/system/randomize.s [deleted file]
libsrc/geos-common/system/setoserror.s [deleted file]
libsrc/geos-common/system/systime.c [deleted file]
libsrc/geos-common/system/sysuname.s [deleted file]
libsrc/geos-common/system/tgi_colors.s [deleted file]
libsrc/geos-common/system/tgi_stddrv.s [deleted file]
libsrc/joystick/joy-kernel.s [deleted file]
libsrc/joystick/joy_count.s [deleted file]
libsrc/joystick/joy_load.s [deleted file]
libsrc/joystick/joy_read.s [deleted file]
libsrc/joystick/joy_unload.s [deleted file]
libsrc/lynx/bllhdr.s [deleted file]
libsrc/lynx/bootldr.s [deleted file]
libsrc/lynx/cgetc.s [deleted file]
libsrc/lynx/clock.s [deleted file]
libsrc/lynx/crt0.s [deleted file]
libsrc/lynx/ctype.s [deleted file]
libsrc/lynx/defdir.s [deleted file]
libsrc/lynx/eeprom.s [deleted file]
libsrc/lynx/eeprom46.s [deleted file]
libsrc/lynx/eeprom66.s [deleted file]
libsrc/lynx/eeprom86.s [deleted file]
libsrc/lynx/exec.s [deleted file]
libsrc/lynx/exehdr.s [deleted file]
libsrc/lynx/extzp.inc [deleted file]
libsrc/lynx/extzp.s [deleted file]
libsrc/lynx/irq.s [deleted file]
libsrc/lynx/joy/lynx-stdjoy.s [deleted file]
libsrc/lynx/joy_stat_stddrv.s [deleted file]
libsrc/lynx/joy_stddrv.s [deleted file]
libsrc/lynx/kbhit.s [deleted file]
libsrc/lynx/libref.s [deleted file]
libsrc/lynx/load.s [deleted file]
libsrc/lynx/lseek.s [deleted file]
libsrc/lynx/lynx-cart.s [deleted file]
libsrc/lynx/lynx-snd.s [deleted file]
libsrc/lynx/mainargs.s [deleted file]
libsrc/lynx/open.s [deleted file]
libsrc/lynx/oserror.s [deleted file]
libsrc/lynx/read.s [deleted file]
libsrc/lynx/ser/lynx-comlynx.s [deleted file]
libsrc/lynx/sysuname.s [deleted file]
libsrc/lynx/tgi/lynx-160-102-16.s [deleted file]
libsrc/lynx/tgi_colors.s [deleted file]
libsrc/lynx/tgi_stat_stddrv.s [deleted file]
libsrc/lynx/tgi_stddrv.s [deleted file]
libsrc/lynx/toascii.s [deleted file]
libsrc/lynx/uploader.s [deleted file]
libsrc/mouse/mouse-kernel.s [deleted file]
libsrc/mouse/mouse_buttons.s [deleted file]
libsrc/mouse/mouse_getbox.s [deleted file]
libsrc/mouse/mouse_geterrormsg.s [deleted file]
libsrc/mouse/mouse_hide.s [deleted file]
libsrc/mouse/mouse_info.s [deleted file]
libsrc/mouse/mouse_ioctl.s [deleted file]
libsrc/mouse/mouse_load.s [deleted file]
libsrc/mouse/mouse_move.s [deleted file]
libsrc/mouse/mouse_pos.s [deleted file]
libsrc/mouse/mouse_setbox.s [deleted file]
libsrc/mouse/mouse_show.s [deleted file]
libsrc/mouse/mouse_unload.s [deleted file]
libsrc/nes/Makefile.inc [deleted file]
libsrc/nes/_scrsize.s [deleted file]
libsrc/nes/cclear.s [deleted file]
libsrc/nes/chline.s [deleted file]
libsrc/nes/clock.s [deleted file]
libsrc/nes/clrscr.s [deleted file]
libsrc/nes/color.s [deleted file]
libsrc/nes/cputc.s [deleted file]
libsrc/nes/crt0.s [deleted file]
libsrc/nes/ctype.s [deleted file]
libsrc/nes/cvline.s [deleted file]
libsrc/nes/get_tv.s [deleted file]
libsrc/nes/gotox.s [deleted file]
libsrc/nes/gotoxy.s [deleted file]
libsrc/nes/gotoy.s [deleted file]
libsrc/nes/irq.s [deleted file]
libsrc/nes/joy/nes-stdjoy.s [deleted file]
libsrc/nes/joy_stat_stddrv.s [deleted file]
libsrc/nes/joy_stddrv.s [deleted file]
libsrc/nes/libref.s [deleted file]
libsrc/nes/mainargs.s [deleted file]
libsrc/nes/neschar.inc [deleted file]
libsrc/nes/ppu.s [deleted file]
libsrc/nes/ppubuf.s [deleted file]
libsrc/nes/randomize.s [deleted file]
libsrc/nes/revers.s [deleted file]
libsrc/nes/setcursor.s [deleted file]
libsrc/nes/sysuname.s [deleted file]
libsrc/nes/tgi/nes-64-56-2.s [deleted file]
libsrc/nes/tgi_colors.s [deleted file]
libsrc/nes/tgi_stat_stddrv.s [deleted file]
libsrc/nes/tgi_stddrv.s [deleted file]
libsrc/nes/waitvblank.s [deleted file]
libsrc/nes/wherex.s [deleted file]
libsrc/nes/wherey.s [deleted file]
libsrc/osic1p/bootstrap.s [deleted file]
libsrc/osic1p/cclear.s [deleted file]
libsrc/osic1p/cgetc.s [deleted file]
libsrc/osic1p/chline.s [deleted file]
libsrc/osic1p/crt0.s [deleted file]
libsrc/osic1p/ctype.s [deleted file]
libsrc/osic1p/cvline.s [deleted file]
libsrc/osic1p/extra/screen-s3-32x28.s [deleted file]
libsrc/osic1p/extzp.inc [deleted file]
libsrc/osic1p/extzp.s [deleted file]
libsrc/osic1p/gotox.s [deleted file]
libsrc/osic1p/gotoxy.s [deleted file]
libsrc/osic1p/gotoy.s [deleted file]
libsrc/osic1p/kbhit.s [deleted file]
libsrc/osic1p/oserror.s [deleted file]
libsrc/osic1p/osic1p.inc [deleted file]
libsrc/osic1p/osiscreen.inc [deleted file]
libsrc/osic1p/screen-c1p-24x24.s [deleted file]
libsrc/osic1p/wherex.s [deleted file]
libsrc/osic1p/wherey.s [deleted file]
libsrc/pce/_scrsize.s [deleted file]
libsrc/pce/chline.s [deleted file]
libsrc/pce/clock.s [deleted file]
libsrc/pce/clrscr.s [deleted file]
libsrc/pce/color.s [deleted file]
libsrc/pce/conio.s [deleted file]
libsrc/pce/cputc.s [deleted file]
libsrc/pce/crt0.s [deleted file]
libsrc/pce/ctype.s [deleted file]
libsrc/pce/cvline.s [deleted file]
libsrc/pce/extzp.inc [deleted file]
libsrc/pce/extzp.s [deleted file]
libsrc/pce/gotoxy.s [deleted file]
libsrc/pce/irq.s [deleted file]
libsrc/pce/joy/pce-stdjoy.s [deleted file]
libsrc/pce/joy_stat_stddrv.s [deleted file]
libsrc/pce/joy_stddrv.s [deleted file]
libsrc/pce/kplot.s [deleted file]
libsrc/pce/libref.s [deleted file]
libsrc/pce/psg.s [deleted file]
libsrc/pce/revers.s [deleted file]
libsrc/pce/ticktock.s [deleted file]
libsrc/pce/vce.s [deleted file]
libsrc/pce/vdc.s [deleted file]
libsrc/pce/vga.inc [deleted file]
libsrc/pce/waitvblank.s [deleted file]
libsrc/pet/_scrsize.s [deleted file]
libsrc/pet/break.s [deleted file]
libsrc/pet/cgetc.s [deleted file]
libsrc/pet/checkst.s [deleted file]
libsrc/pet/clrscr.s [deleted file]
libsrc/pet/color.s [deleted file]
libsrc/pet/conio.s [deleted file]
libsrc/pet/cputc.s [deleted file]
libsrc/pet/crt0.s [deleted file]
libsrc/pet/devnum.s [deleted file]
libsrc/pet/get_tv.s [deleted file]
libsrc/pet/irq.s [deleted file]
libsrc/pet/joy/pet-ptvjoy.s [deleted file]
libsrc/pet/joy/pet-stdjoy.s [deleted file]
libsrc/pet/joy_stat_stddrv.s [deleted file]
libsrc/pet/joy_stddrv.s [deleted file]
libsrc/pet/kbhit.s [deleted file]
libsrc/pet/kbsout.s [deleted file]
libsrc/pet/kchkin.s [deleted file]
libsrc/pet/kckout.s [deleted file]
libsrc/pet/kclose.s [deleted file]
libsrc/pet/kernal.s [deleted file]
libsrc/pet/kopen.s [deleted file]
libsrc/pet/kplot.s [deleted file]
libsrc/pet/krdtim.s [deleted file]
libsrc/pet/kreadst.s [deleted file]
libsrc/pet/ksetlfs.s [deleted file]
libsrc/pet/ksetnam.s [deleted file]
libsrc/pet/libref.s [deleted file]
libsrc/pet/mainargs.s [deleted file]
libsrc/pet/randomize.s [deleted file]
libsrc/pet/revers.s [deleted file]
libsrc/pet/status.s [deleted file]
libsrc/pet/sysuname.s [deleted file]
libsrc/plus4/_scrsize.s [deleted file]
libsrc/plus4/break.s [deleted file]
libsrc/plus4/cgetc.s [deleted file]
libsrc/plus4/clrscr.s [deleted file]
libsrc/plus4/color.s [deleted file]
libsrc/plus4/conio.s [deleted file]
libsrc/plus4/cputc.s [deleted file]
libsrc/plus4/crt0.s [deleted file]
libsrc/plus4/devnum.s [deleted file]
libsrc/plus4/get_tv.s [deleted file]
libsrc/plus4/irq.s [deleted file]
libsrc/plus4/joy/plus4-stdjoy.s [deleted file]
libsrc/plus4/joy_stat_stddrv.s [deleted file]
libsrc/plus4/joy_stddrv.s [deleted file]
libsrc/plus4/kacptr.s [deleted file]
libsrc/plus4/kbasin.s [deleted file]
libsrc/plus4/kbhit.s [deleted file]
libsrc/plus4/kbsout.s [deleted file]
libsrc/plus4/kchkin.s [deleted file]
libsrc/plus4/kciout.s [deleted file]
libsrc/plus4/kckout.s [deleted file]
libsrc/plus4/kclall.s [deleted file]
libsrc/plus4/kclose.s [deleted file]
libsrc/plus4/kclrch.s [deleted file]
libsrc/plus4/kiobase.s [deleted file]
libsrc/plus4/klisten.s [deleted file]
libsrc/plus4/kload.s [deleted file]
libsrc/plus4/kopen.s [deleted file]
libsrc/plus4/kplot.s [deleted file]
libsrc/plus4/krdtim.s [deleted file]
libsrc/plus4/kreadst.s [deleted file]
libsrc/plus4/ksave.s [deleted file]
libsrc/plus4/ksetlfs.s [deleted file]
libsrc/plus4/ksetnam.s [deleted file]
libsrc/plus4/ksettim.s [deleted file]
libsrc/plus4/ktalk.s [deleted file]
libsrc/plus4/kunlsn.s [deleted file]
libsrc/plus4/kuntlk.s [deleted file]
libsrc/plus4/libref.s [deleted file]
libsrc/plus4/mainargs.s [deleted file]
libsrc/plus4/randomize.s [deleted file]
libsrc/plus4/revers.s [deleted file]
libsrc/plus4/ser/plus4-stdser.s [deleted file]
libsrc/plus4/status.s [deleted file]
libsrc/plus4/systime.s [deleted file]
libsrc/plus4/sysuname.s [deleted file]
libsrc/runtime/add.s [deleted file]
libsrc/runtime/addeqsp.s [deleted file]
libsrc/runtime/addysp.s [deleted file]
libsrc/runtime/along.s [deleted file]
libsrc/runtime/and.s [deleted file]
libsrc/runtime/aslax1.s [deleted file]
libsrc/runtime/aslax2.s [deleted file]
libsrc/runtime/aslax3.s [deleted file]
libsrc/runtime/aslax4.s [deleted file]
libsrc/runtime/asleax1.s [deleted file]
libsrc/runtime/asleax2.s [deleted file]
libsrc/runtime/asleax3.s [deleted file]
libsrc/runtime/asleax4.s [deleted file]
libsrc/runtime/asr.s [deleted file]
libsrc/runtime/asrax1.s [deleted file]
libsrc/runtime/asrax2.s [deleted file]
libsrc/runtime/asrax3.s [deleted file]
libsrc/runtime/asrax4.s [deleted file]
libsrc/runtime/asreax1.s [deleted file]
libsrc/runtime/asreax2.s [deleted file]
libsrc/runtime/asreax3.s [deleted file]
libsrc/runtime/asreax4.s [deleted file]
libsrc/runtime/axlong.s [deleted file]
libsrc/runtime/bneg.s [deleted file]
libsrc/runtime/bpushbsp.s [deleted file]
libsrc/runtime/call.s [deleted file]
libsrc/runtime/callirq.s [deleted file]
libsrc/runtime/callmain.s [deleted file]
libsrc/runtime/compl.s [deleted file]
libsrc/runtime/condes.s [deleted file]
libsrc/runtime/decax1.s [deleted file]
libsrc/runtime/decax2.s [deleted file]
libsrc/runtime/decax3.s [deleted file]
libsrc/runtime/decax4.s [deleted file]
libsrc/runtime/decax5.s [deleted file]
libsrc/runtime/decax6.s [deleted file]
libsrc/runtime/decax7.s [deleted file]
libsrc/runtime/decax8.s [deleted file]
libsrc/runtime/decaxy.s [deleted file]
libsrc/runtime/decsp1.s [deleted file]
libsrc/runtime/decsp2.s [deleted file]
libsrc/runtime/decsp3.s [deleted file]
libsrc/runtime/decsp4.s [deleted file]
libsrc/runtime/decsp5.s [deleted file]
libsrc/runtime/decsp6.s [deleted file]
libsrc/runtime/decsp7.s [deleted file]
libsrc/runtime/decsp8.s [deleted file]
libsrc/runtime/div.s [deleted file]
libsrc/runtime/enter.s [deleted file]
libsrc/runtime/eq.s [deleted file]
libsrc/runtime/ge.s [deleted file]
libsrc/runtime/gt.s [deleted file]
libsrc/runtime/icmp.s [deleted file]
libsrc/runtime/idiv32by16r16.s [deleted file]
libsrc/runtime/imul16x16r32.s [deleted file]
libsrc/runtime/imul8x8r16.s [deleted file]
libsrc/runtime/incax1.s [deleted file]
libsrc/runtime/incax2.s [deleted file]
libsrc/runtime/incax3.s [deleted file]
libsrc/runtime/incax5.s [deleted file]
libsrc/runtime/incax6.s [deleted file]
libsrc/runtime/incax7.s [deleted file]
libsrc/runtime/incax8.s [deleted file]
libsrc/runtime/incaxy.s [deleted file]
libsrc/runtime/incsp1.s [deleted file]
libsrc/runtime/incsp2.s [deleted file]
libsrc/runtime/incsp3.s [deleted file]
libsrc/runtime/incsp4.s [deleted file]
libsrc/runtime/incsp5.s [deleted file]
libsrc/runtime/incsp6.s [deleted file]
libsrc/runtime/incsp7.s [deleted file]
libsrc/runtime/incsp8.s [deleted file]
libsrc/runtime/jmpvec.s [deleted file]
libsrc/runtime/ladd.s [deleted file]
libsrc/runtime/laddeq.s [deleted file]
libsrc/runtime/laddeqsp.s [deleted file]
libsrc/runtime/land.s [deleted file]
libsrc/runtime/lasr.s [deleted file]
libsrc/runtime/lbneg.s [deleted file]
libsrc/runtime/lcmp.s [deleted file]
libsrc/runtime/lcompl.s [deleted file]
libsrc/runtime/ldai.s [deleted file]
libsrc/runtime/ldau0sp.s [deleted file]
libsrc/runtime/ldaui.s [deleted file]
libsrc/runtime/ldauisp.s [deleted file]
libsrc/runtime/ldaxi.s [deleted file]
libsrc/runtime/ldaxsp.s [deleted file]
libsrc/runtime/ldeaxi.s [deleted file]
libsrc/runtime/ldeaxysp.s [deleted file]
libsrc/runtime/ldec.s [deleted file]
libsrc/runtime/ldiv.s [deleted file]
libsrc/runtime/le.s [deleted file]
libsrc/runtime/leaaxsp.s [deleted file]
libsrc/runtime/leave.s [deleted file]
libsrc/runtime/leq.s [deleted file]
libsrc/runtime/lge.s [deleted file]
libsrc/runtime/lgt.s [deleted file]
libsrc/runtime/linc.s [deleted file]
libsrc/runtime/lle.s [deleted file]
libsrc/runtime/llt.s [deleted file]
libsrc/runtime/lmod.s [deleted file]
libsrc/runtime/lmul.s [deleted file]
libsrc/runtime/lne.s [deleted file]
libsrc/runtime/lneg.s [deleted file]
libsrc/runtime/lor.s [deleted file]
libsrc/runtime/lpop.s [deleted file]
libsrc/runtime/lpush.s [deleted file]
libsrc/runtime/lrsub.s [deleted file]
libsrc/runtime/lsave.s [deleted file]
libsrc/runtime/lshelp.s [deleted file]
libsrc/runtime/lshl.s [deleted file]
libsrc/runtime/lshr.s [deleted file]
libsrc/runtime/lsub.s [deleted file]
libsrc/runtime/lsubeq.s [deleted file]
libsrc/runtime/lsubeqsp.s [deleted file]
libsrc/runtime/lt.s [deleted file]
libsrc/runtime/ltest.s [deleted file]
libsrc/runtime/ludiv.s [deleted file]
libsrc/runtime/luge.s [deleted file]
libsrc/runtime/lugt.s [deleted file]
libsrc/runtime/lule.s [deleted file]
libsrc/runtime/lult.s [deleted file]
libsrc/runtime/lumod.s [deleted file]
libsrc/runtime/lxor.s [deleted file]
libsrc/runtime/makebool.s [deleted file]
libsrc/runtime/mod.s [deleted file]
libsrc/runtime/mul.s [deleted file]
libsrc/runtime/mul8.s [deleted file]
libsrc/runtime/mulax10.s [deleted file]
libsrc/runtime/mulax3.s [deleted file]
libsrc/runtime/mulax5.s [deleted file]
libsrc/runtime/mulax6.s [deleted file]
libsrc/runtime/mulax7.s [deleted file]
libsrc/runtime/mulax9.s [deleted file]
libsrc/runtime/ne.s [deleted file]
libsrc/runtime/neg.s [deleted file]
libsrc/runtime/or.s [deleted file]
libsrc/runtime/popa.s [deleted file]
libsrc/runtime/popsreg.s [deleted file]
libsrc/runtime/push1.s [deleted file]
libsrc/runtime/push2.s [deleted file]
libsrc/runtime/push3.s [deleted file]
libsrc/runtime/push4.s [deleted file]
libsrc/runtime/push5.s [deleted file]
libsrc/runtime/push6.s [deleted file]
libsrc/runtime/push7.s [deleted file]
libsrc/runtime/pusha.s [deleted file]
libsrc/runtime/pushaff.s [deleted file]
libsrc/runtime/pushax.s [deleted file]
libsrc/runtime/pushb.s [deleted file]
libsrc/runtime/pushbsp.s [deleted file]
libsrc/runtime/pushc0.s [deleted file]
libsrc/runtime/pushc1.s [deleted file]
libsrc/runtime/pushc2.s [deleted file]
libsrc/runtime/pushlysp.s [deleted file]
libsrc/runtime/pushw.s [deleted file]
libsrc/runtime/pushwsp.s [deleted file]
libsrc/runtime/regswap.s [deleted file]
libsrc/runtime/regswap1.s [deleted file]
libsrc/runtime/regswap2.s [deleted file]
libsrc/runtime/return0.s [deleted file]
libsrc/runtime/return1.s [deleted file]
libsrc/runtime/rsub.s [deleted file]
libsrc/runtime/shelp.s [deleted file]
libsrc/runtime/shl.s [deleted file]
libsrc/runtime/shr.s [deleted file]
libsrc/runtime/shrax1.s [deleted file]
libsrc/runtime/shrax2.s [deleted file]
libsrc/runtime/shrax3.s [deleted file]
libsrc/runtime/shrax4.s [deleted file]
libsrc/runtime/shreax1.s [deleted file]
libsrc/runtime/shreax2.s [deleted file]
libsrc/runtime/shreax3.s [deleted file]
libsrc/runtime/shreax4.s [deleted file]
libsrc/runtime/staspidx.s [deleted file]
libsrc/runtime/staxsp.s [deleted file]
libsrc/runtime/staxspi.s [deleted file]
libsrc/runtime/steaxsp.s [deleted file]
libsrc/runtime/steaxspi.s [deleted file]
libsrc/runtime/stkchk.s [deleted file]
libsrc/runtime/sub.s [deleted file]
libsrc/runtime/subeqsp.s [deleted file]
libsrc/runtime/subysp.s [deleted file]
libsrc/runtime/swap.s [deleted file]
libsrc/runtime/tosint.s [deleted file]
libsrc/runtime/toslong.s [deleted file]
libsrc/runtime/udiv.s [deleted file]
libsrc/runtime/udiv32by16r16.s [deleted file]
libsrc/runtime/uge.s [deleted file]
libsrc/runtime/ugt.s [deleted file]
libsrc/runtime/ule.s [deleted file]
libsrc/runtime/ult.s [deleted file]
libsrc/runtime/umod.s [deleted file]
libsrc/runtime/umul16x16r32.s [deleted file]
libsrc/runtime/umul8x16r24.s [deleted file]
libsrc/runtime/umul8x8r16.s [deleted file]
libsrc/runtime/xor.s [deleted file]
libsrc/runtime/zeropage.s [deleted file]
libsrc/serial/ser-kernel.s [deleted file]
libsrc/serial/ser_close.s [deleted file]
libsrc/serial/ser_get.s [deleted file]
libsrc/serial/ser_ioctl.s [deleted file]
libsrc/serial/ser_load.s [deleted file]
libsrc/serial/ser_open.s [deleted file]
libsrc/serial/ser_put.s [deleted file]
libsrc/serial/ser_status.s [deleted file]
libsrc/serial/ser_unload.s [deleted file]
libsrc/sim6502/crt0.s [deleted file]
libsrc/sim6502/ctype.s [deleted file]
libsrc/sim6502/exehdr.s [deleted file]
libsrc/sim6502/mainargs.s [deleted file]
libsrc/sim6502/paravirt.s [deleted file]
libsrc/supervision/crt0.s [deleted file]
libsrc/supervision/ctype.s [deleted file]
libsrc/tgi/tgi-kernel.s [deleted file]
libsrc/tgi/tgi_arc.c [deleted file]
libsrc/tgi/tgi_bar.s [deleted file]
libsrc/tgi/tgi_circle.s [deleted file]
libsrc/tgi/tgi_clear.s [deleted file]
libsrc/tgi/tgi_clippedline.s [deleted file]
libsrc/tgi/tgi_curtoxy.s [deleted file]
libsrc/tgi/tgi_done.s [deleted file]
libsrc/tgi/tgi_ellipse.s [deleted file]
libsrc/tgi/tgi_free_vectorfont.s [deleted file]
libsrc/tgi/tgi_getaspectratio.s [deleted file]
libsrc/tgi/tgi_getcolor.s [deleted file]
libsrc/tgi/tgi_getcolorcount.s [deleted file]
libsrc/tgi/tgi_getdefpalette.s [deleted file]
libsrc/tgi/tgi_geterror.s [deleted file]
libsrc/tgi/tgi_geterrormsg.s [deleted file]
libsrc/tgi/tgi_getmaxcolor.s [deleted file]
libsrc/tgi/tgi_getmaxx.s [deleted file]
libsrc/tgi/tgi_getmaxy.s [deleted file]
libsrc/tgi/tgi_getpagecount.s [deleted file]
libsrc/tgi/tgi_getpalette.s [deleted file]
libsrc/tgi/tgi_getpixel.s [deleted file]
libsrc/tgi/tgi_getset.s [deleted file]
libsrc/tgi/tgi_gettextheight.s [deleted file]
libsrc/tgi/tgi_gettextwidth.s [deleted file]
libsrc/tgi/tgi_getxres.s [deleted file]
libsrc/tgi/tgi_getyres.s [deleted file]
libsrc/tgi/tgi_gotoxy.s [deleted file]
libsrc/tgi/tgi_imulround.s [deleted file]
libsrc/tgi/tgi_init.s [deleted file]
libsrc/tgi/tgi_install_vectorfont.s [deleted file]
libsrc/tgi/tgi_ioctl.s [deleted file]
libsrc/tgi/tgi_line.s [deleted file]
libsrc/tgi/tgi_linepop.s [deleted file]
libsrc/tgi/tgi_lineto.s [deleted file]
libsrc/tgi/tgi_load.s [deleted file]
libsrc/tgi/tgi_load_vectorfont.c [deleted file]
libsrc/tgi/tgi_outcode.s [deleted file]
libsrc/tgi/tgi_outtext.s [deleted file]
libsrc/tgi/tgi_outtextxy.s [deleted file]
libsrc/tgi/tgi_pieslice.c [deleted file]
libsrc/tgi/tgi_popxy.s [deleted file]
libsrc/tgi/tgi_popxy2.s [deleted file]
libsrc/tgi/tgi_setaspectratio.s [deleted file]
libsrc/tgi/tgi_setcolor.s [deleted file]
libsrc/tgi/tgi_setdrawpage.s [deleted file]
libsrc/tgi/tgi_setpalette.s [deleted file]
libsrc/tgi/tgi_setpixel.s [deleted file]
libsrc/tgi/tgi_settextdir.s [deleted file]
libsrc/tgi/tgi_settextstyle.s [deleted file]
libsrc/tgi/tgi_setviewpage.s [deleted file]
libsrc/tgi/tgi_unload.s [deleted file]
libsrc/tgi/tgi_vectorchar.s [deleted file]
libsrc/tgi/tgidrv_line.inc [deleted file]
libsrc/vic20/_scrsize.s [deleted file]
libsrc/vic20/break.s [deleted file]
libsrc/vic20/cgetc.s [deleted file]
libsrc/vic20/clrscr.s [deleted file]
libsrc/vic20/color.s [deleted file]
libsrc/vic20/conio.s [deleted file]
libsrc/vic20/cputc.s [deleted file]
libsrc/vic20/crt0.s [deleted file]
libsrc/vic20/devnum.s [deleted file]
libsrc/vic20/get_tv.s [deleted file]
libsrc/vic20/irq.s [deleted file]
libsrc/vic20/joy/vic20-ptvjoy.s [deleted file]
libsrc/vic20/joy/vic20-stdjoy.s [deleted file]
libsrc/vic20/joy_stat_stddrv.s [deleted file]
libsrc/vic20/joy_stddrv.s [deleted file]
libsrc/vic20/kbhit.s [deleted file]
libsrc/vic20/kernal.s [deleted file]
libsrc/vic20/kplot.s [deleted file]
libsrc/vic20/libref.s [deleted file]
libsrc/vic20/mainargs.s [deleted file]
libsrc/vic20/randomize.s [deleted file]
libsrc/vic20/revers.s [deleted file]
libsrc/vic20/status.s [deleted file]
libsrc/vic20/sysuname.s [deleted file]
libsrc/zlib/adler32.s [deleted file]
libsrc/zlib/crc32.s [deleted file]
libsrc/zlib/inflatemem.s [deleted file]
libsrc/zlib/uncompress.c [deleted file]
samples/Makefile [deleted file]
samples/README [deleted file]
samples/ascii.c [deleted file]
samples/diodemo.c [deleted file]
samples/enumdevdir.c [deleted file]
samples/fire.c [deleted file]
samples/geos/bitmap-demo.c [deleted file]
samples/geos/bitmap-demores.grc [deleted file]
samples/geos/dialog.c [deleted file]
samples/geos/filesel.c [deleted file]
samples/geos/fileselres.grc [deleted file]
samples/geos/geosconio.c [deleted file]
samples/geos/geosconiores.grc [deleted file]
samples/geos/getid.c [deleted file]
samples/geos/getidres.grc [deleted file]
samples/geos/grphstr.c [deleted file]
samples/geos/hello1.c [deleted file]
samples/geos/hello1res.grc [deleted file]
samples/geos/hello2.c [deleted file]
samples/geos/hello2res.grc [deleted file]
samples/geos/inittab.c [deleted file]
samples/geos/logo.pcx [deleted file]
samples/geos/menu.c [deleted file]
samples/geos/overlay-demo.c [deleted file]
samples/geos/overlay-demores.grc [deleted file]
samples/geos/rmvprot.c [deleted file]
samples/geos/rmvprotres.grc [deleted file]
samples/geos/vector-demo.c [deleted file]
samples/geos/vector-demores.grc [deleted file]
samples/geos/yesno.c [deleted file]
samples/geos/yesnores.grc [deleted file]
samples/gunzip65.c [deleted file]
samples/hello.c [deleted file]
samples/mandelbrot.c [deleted file]
samples/mousetest.c [deleted file]
samples/multidemo.c [deleted file]
samples/nachtm.c [deleted file]
samples/overlaydemo.c [deleted file]
samples/plasma.c [deleted file]
samples/sieve.c [deleted file]
samples/tgidemo.c [deleted file]
samples/tutorial/hello.c [deleted file]
samples/tutorial/text.s [deleted file]
src/.gitignore [deleted file]
src/Makefile [deleted file]
src/ar65.vcxproj [deleted file]
src/ar65/add.c [deleted file]
src/ar65/add.h [deleted file]
src/ar65/del.c [deleted file]
src/ar65/del.h [deleted file]
src/ar65/error.c [deleted file]
src/ar65/error.h [deleted file]
src/ar65/exports.c [deleted file]
src/ar65/exports.h [deleted file]
src/ar65/extract.c [deleted file]
src/ar65/extract.h [deleted file]
src/ar65/fileio.c [deleted file]
src/ar65/fileio.h [deleted file]
src/ar65/global.c [deleted file]
src/ar65/global.h [deleted file]
src/ar65/library.c [deleted file]
src/ar65/library.h [deleted file]
src/ar65/list.c [deleted file]
src/ar65/list.h [deleted file]
src/ar65/main.c [deleted file]
src/ar65/objdata.c [deleted file]
src/ar65/objdata.h [deleted file]
src/ar65/objfile.c [deleted file]
src/ar65/objfile.h [deleted file]
src/ca65.vcxproj [deleted file]
src/ca65/anonname.c [deleted file]
src/ca65/anonname.h [deleted file]
src/ca65/asserts.c [deleted file]
src/ca65/asserts.h [deleted file]
src/ca65/condasm.c [deleted file]
src/ca65/condasm.h [deleted file]
src/ca65/dbginfo.c [deleted file]
src/ca65/dbginfo.h [deleted file]
src/ca65/ea.h [deleted file]
src/ca65/ea65.c [deleted file]
src/ca65/ea65.h [deleted file]
src/ca65/easw16.c [deleted file]
src/ca65/easw16.h [deleted file]
src/ca65/enum.c [deleted file]
src/ca65/enum.h [deleted file]
src/ca65/error.c [deleted file]
src/ca65/error.h [deleted file]
src/ca65/expr.c [deleted file]
src/ca65/expr.h [deleted file]
src/ca65/feature.c [deleted file]
src/ca65/feature.h [deleted file]
src/ca65/filetab.c [deleted file]
src/ca65/filetab.h [deleted file]
src/ca65/fragment.c [deleted file]
src/ca65/fragment.h [deleted file]
src/ca65/global.c [deleted file]
src/ca65/global.h [deleted file]
src/ca65/incpath.c [deleted file]
src/ca65/incpath.h [deleted file]
src/ca65/instr.c [deleted file]
src/ca65/instr.h [deleted file]
src/ca65/istack.c [deleted file]
src/ca65/istack.h [deleted file]
src/ca65/lineinfo.c [deleted file]
src/ca65/lineinfo.h [deleted file]
src/ca65/listing.c [deleted file]
src/ca65/listing.h [deleted file]
src/ca65/macro.c [deleted file]
src/ca65/macro.h [deleted file]
src/ca65/main.c [deleted file]
src/ca65/nexttok.c [deleted file]
src/ca65/nexttok.h [deleted file]
src/ca65/objcode.c [deleted file]
src/ca65/objcode.h [deleted file]
src/ca65/objfile.c [deleted file]
src/ca65/objfile.h [deleted file]
src/ca65/options.c [deleted file]
src/ca65/options.h [deleted file]
src/ca65/pseudo.c [deleted file]
src/ca65/pseudo.h [deleted file]
src/ca65/repeat.c [deleted file]
src/ca65/repeat.h [deleted file]
src/ca65/scanner.c [deleted file]
src/ca65/scanner.h [deleted file]
src/ca65/segdef.c [deleted file]
src/ca65/segdef.h [deleted file]
src/ca65/segment.c [deleted file]
src/ca65/segment.h [deleted file]
src/ca65/sizeof.c [deleted file]
src/ca65/sizeof.h [deleted file]
src/ca65/span.c [deleted file]
src/ca65/span.h [deleted file]
src/ca65/spool.c [deleted file]
src/ca65/spool.h [deleted file]
src/ca65/struct.c [deleted file]
src/ca65/struct.h [deleted file]
src/ca65/studyexpr.c [deleted file]
src/ca65/studyexpr.h [deleted file]
src/ca65/symbol.c [deleted file]
src/ca65/symbol.h [deleted file]
src/ca65/symentry.c [deleted file]
src/ca65/symentry.h [deleted file]
src/ca65/symtab.c [deleted file]
src/ca65/symtab.h [deleted file]
src/ca65/token.c [deleted file]
src/ca65/token.h [deleted file]
src/ca65/toklist.c [deleted file]
src/ca65/toklist.h [deleted file]
src/ca65/ulabel.c [deleted file]
src/ca65/ulabel.h [deleted file]
src/cc65.sln [deleted file]
src/cc65.vcxproj [deleted file]
src/cc65/.lclintrc [deleted file]
src/cc65/anonname.c [deleted file]
src/cc65/anonname.h [deleted file]
src/cc65/asmcode.c [deleted file]
src/cc65/asmcode.h [deleted file]
src/cc65/asmlabel.c [deleted file]
src/cc65/asmlabel.h [deleted file]
src/cc65/asmstmt.c [deleted file]
src/cc65/asmstmt.h [deleted file]
src/cc65/assignment.c [deleted file]
src/cc65/assignment.h [deleted file]
src/cc65/casenode.c [deleted file]
src/cc65/casenode.h [deleted file]
src/cc65/codeent.c [deleted file]
src/cc65/codeent.h [deleted file]
src/cc65/codegen.c [deleted file]
src/cc65/codegen.h [deleted file]
src/cc65/codeinfo.c [deleted file]
src/cc65/codeinfo.h [deleted file]
src/cc65/codelab.c [deleted file]
src/cc65/codelab.h [deleted file]
src/cc65/codeopt.c [deleted file]
src/cc65/codeopt.h [deleted file]
src/cc65/codeseg.c [deleted file]
src/cc65/codeseg.h [deleted file]
src/cc65/compile.c [deleted file]
src/cc65/compile.h [deleted file]
src/cc65/coptadd.c [deleted file]
src/cc65/coptadd.h [deleted file]
src/cc65/coptc02.c [deleted file]
src/cc65/coptc02.h [deleted file]
src/cc65/coptcmp.c [deleted file]
src/cc65/coptcmp.h [deleted file]
src/cc65/coptind.c [deleted file]
src/cc65/coptind.h [deleted file]
src/cc65/coptneg.c [deleted file]
src/cc65/coptneg.h [deleted file]
src/cc65/coptptrload.c [deleted file]
src/cc65/coptptrload.h [deleted file]
src/cc65/coptptrstore.c [deleted file]
src/cc65/coptptrstore.h [deleted file]
src/cc65/coptpush.c [deleted file]
src/cc65/coptpush.h [deleted file]
src/cc65/coptshift.c [deleted file]
src/cc65/coptshift.h [deleted file]
src/cc65/coptsize.c [deleted file]
src/cc65/coptsize.h [deleted file]
src/cc65/coptstop.c [deleted file]
src/cc65/coptstop.h [deleted file]
src/cc65/coptstore.c [deleted file]
src/cc65/coptstore.h [deleted file]
src/cc65/coptsub.c [deleted file]
src/cc65/coptsub.h [deleted file]
src/cc65/copttest.c [deleted file]
src/cc65/copttest.h [deleted file]
src/cc65/copyleft.jrd [deleted file]
src/cc65/dataseg.c [deleted file]
src/cc65/dataseg.h [deleted file]
src/cc65/datatype.c [deleted file]
src/cc65/datatype.h [deleted file]
src/cc65/declare.c [deleted file]
src/cc65/declare.h [deleted file]
src/cc65/declattr.c [deleted file]
src/cc65/declattr.h [deleted file]
src/cc65/error.c [deleted file]
src/cc65/error.h [deleted file]
src/cc65/expr.c [deleted file]
src/cc65/expr.h [deleted file]
src/cc65/exprdesc.c [deleted file]
src/cc65/exprdesc.h [deleted file]
src/cc65/funcdesc.c [deleted file]
src/cc65/funcdesc.h [deleted file]
src/cc65/function.c [deleted file]
src/cc65/function.h [deleted file]
src/cc65/global.c [deleted file]
src/cc65/global.h [deleted file]
src/cc65/goto.c [deleted file]
src/cc65/goto.h [deleted file]
src/cc65/hexval.c [deleted file]
src/cc65/hexval.h [deleted file]
src/cc65/ident.c [deleted file]
src/cc65/ident.h [deleted file]
src/cc65/incpath.c [deleted file]
src/cc65/incpath.h [deleted file]
src/cc65/input.c [deleted file]
src/cc65/input.h [deleted file]
src/cc65/lineinfo.c [deleted file]
src/cc65/lineinfo.h [deleted file]
src/cc65/litpool.c [deleted file]
src/cc65/litpool.h [deleted file]
src/cc65/loadexpr.c [deleted file]
src/cc65/loadexpr.h [deleted file]
src/cc65/locals.c [deleted file]
src/cc65/locals.h [deleted file]
src/cc65/loop.c [deleted file]
src/cc65/loop.h [deleted file]
src/cc65/macrotab.c [deleted file]
src/cc65/macrotab.h [deleted file]
src/cc65/main.c [deleted file]
src/cc65/opcodes.c [deleted file]
src/cc65/opcodes.h [deleted file]
src/cc65/output.c [deleted file]
src/cc65/output.h [deleted file]
src/cc65/pragma.c [deleted file]
src/cc65/pragma.h [deleted file]
src/cc65/preproc.c [deleted file]
src/cc65/preproc.h [deleted file]
src/cc65/reginfo.c [deleted file]
src/cc65/reginfo.h [deleted file]
src/cc65/scanner.c [deleted file]
src/cc65/scanner.h [deleted file]
src/cc65/scanstrbuf.c [deleted file]
src/cc65/scanstrbuf.h [deleted file]
src/cc65/segments.c [deleted file]
src/cc65/segments.h [deleted file]
src/cc65/shiftexpr.c [deleted file]
src/cc65/shiftexpr.h [deleted file]
src/cc65/stackptr.c [deleted file]
src/cc65/stackptr.h [deleted file]
src/cc65/standard.c [deleted file]
src/cc65/standard.h [deleted file]
src/cc65/stdfunc.c [deleted file]
src/cc65/stdfunc.h [deleted file]
src/cc65/stdnames.c [deleted file]
src/cc65/stdnames.h [deleted file]
src/cc65/stmt.c [deleted file]
src/cc65/stmt.h [deleted file]
src/cc65/swstmt.c [deleted file]
src/cc65/swstmt.h [deleted file]
src/cc65/symentry.c [deleted file]
src/cc65/symentry.h [deleted file]
src/cc65/symtab.c [deleted file]
src/cc65/symtab.h [deleted file]
src/cc65/testexpr.c [deleted file]
src/cc65/testexpr.h [deleted file]
src/cc65/textseg.c [deleted file]
src/cc65/textseg.h [deleted file]
src/cc65/typecmp.c [deleted file]
src/cc65/typecmp.h [deleted file]
src/cc65/typeconv.c [deleted file]
src/cc65/typeconv.h [deleted file]
src/cc65/util.c [deleted file]
src/cc65/util.h [deleted file]
src/chrcvt/error.c [deleted file]
src/chrcvt/error.h [deleted file]
src/chrcvt/main.c [deleted file]
src/cl65.vcxproj [deleted file]
src/cl65/error.c [deleted file]
src/cl65/error.h [deleted file]
src/cl65/global.c [deleted file]
src/cl65/global.h [deleted file]
src/cl65/main.c [deleted file]
src/cl65/spawn-amiga.inc [deleted file]
src/cl65/spawn-unix.inc [deleted file]
src/co65.vcxproj [deleted file]
src/co65/convert.c [deleted file]
src/co65/convert.h [deleted file]
src/co65/error.c [deleted file]
src/co65/error.h [deleted file]
src/co65/fileio.c [deleted file]
src/co65/fileio.h [deleted file]
src/co65/global.c [deleted file]
src/co65/global.h [deleted file]
src/co65/main.c [deleted file]
src/co65/model.c [deleted file]
src/co65/model.h [deleted file]
src/co65/o65.c [deleted file]
src/co65/o65.h [deleted file]
src/common.vcxproj [deleted file]
src/common/abend.c [deleted file]
src/common/abend.h [deleted file]
src/common/addrsize.c [deleted file]
src/common/addrsize.h [deleted file]
src/common/alignment.c [deleted file]
src/common/alignment.h [deleted file]
src/common/assertion.c [deleted file]
src/common/assertion.h [deleted file]
src/common/attrib.h [deleted file]
src/common/bitops.c [deleted file]
src/common/bitops.h [deleted file]
src/common/cddefs.h [deleted file]
src/common/chartype.c [deleted file]
src/common/chartype.h [deleted file]
src/common/check.c [deleted file]
src/common/check.h [deleted file]
src/common/cmdline.c [deleted file]
src/common/cmdline.h [deleted file]
src/common/coll.c [deleted file]
src/common/coll.h [deleted file]
src/common/cpu.c [deleted file]
src/common/cpu.h [deleted file]
src/common/debugflag.c [deleted file]
src/common/debugflag.h [deleted file]
src/common/exprdefs.c [deleted file]
src/common/exprdefs.h [deleted file]
src/common/fileid.c [deleted file]
src/common/fileid.h [deleted file]
src/common/filepos.c [deleted file]
src/common/filepos.h [deleted file]
src/common/filestat.c [deleted file]
src/common/filestat.h [deleted file]
src/common/filetime.c [deleted file]
src/common/filetime.h [deleted file]
src/common/filetype.c [deleted file]
src/common/filetype.h [deleted file]
src/common/fname.c [deleted file]
src/common/fname.h [deleted file]
src/common/fp.c [deleted file]
src/common/fp.h [deleted file]
src/common/fragdefs.h [deleted file]
src/common/gentype.c [deleted file]
src/common/gentype.h [deleted file]
src/common/hashfunc.c [deleted file]
src/common/hashfunc.h [deleted file]
src/common/hashtab.c [deleted file]
src/common/hashtab.h [deleted file]
src/common/hlldbgsym.h [deleted file]
src/common/inline.h [deleted file]
src/common/intstack.c [deleted file]
src/common/intstack.h [deleted file]
src/common/inttypes.h [deleted file]
src/common/libdefs.h [deleted file]
src/common/lidefs.h [deleted file]
src/common/matchpat.c [deleted file]
src/common/matchpat.h [deleted file]
src/common/mmodel.c [deleted file]
src/common/mmodel.h [deleted file]
src/common/objdefs.h [deleted file]
src/common/optdefs.h [deleted file]
src/common/print.c [deleted file]
src/common/print.h [deleted file]
src/common/scopedefs.h [deleted file]
src/common/searchpath.c [deleted file]
src/common/searchpath.h [deleted file]
src/common/segdefs.h [deleted file]
src/common/segnames.c [deleted file]
src/common/segnames.h [deleted file]
src/common/shift.c [deleted file]
src/common/shift.h [deleted file]
src/common/strbuf.c [deleted file]
src/common/strbuf.h [deleted file]
src/common/strpool.c [deleted file]
src/common/strpool.h [deleted file]
src/common/strstack.c [deleted file]
src/common/strstack.h [deleted file]
src/common/strutil.c [deleted file]
src/common/strutil.h [deleted file]
src/common/symdefs.h [deleted file]
src/common/target.c [deleted file]
src/common/target.h [deleted file]
src/common/tgttrans.c [deleted file]
src/common/tgttrans.h [deleted file]
src/common/va_copy.h [deleted file]
src/common/version.c [deleted file]
src/common/version.h [deleted file]
src/common/xmalloc.c [deleted file]
src/common/xmalloc.h [deleted file]
src/common/xsprintf.c [deleted file]
src/common/xsprintf.h [deleted file]
src/da65.vcxproj [deleted file]
src/da65/asminc.c [deleted file]
src/da65/asminc.h [deleted file]
src/da65/attrtab.c [deleted file]
src/da65/attrtab.h [deleted file]
src/da65/code.c [deleted file]
src/da65/code.h [deleted file]
src/da65/comments.c [deleted file]
src/da65/comments.h [deleted file]
src/da65/data.c [deleted file]
src/da65/data.h [deleted file]
src/da65/error.c [deleted file]
src/da65/error.h [deleted file]
src/da65/global.c [deleted file]
src/da65/global.h [deleted file]
src/da65/handler.c [deleted file]
src/da65/handler.h [deleted file]
src/da65/infofile.c [deleted file]
src/da65/infofile.h [deleted file]
src/da65/labels.c [deleted file]
src/da65/labels.h [deleted file]
src/da65/main.c [deleted file]
src/da65/opc6502.c [deleted file]
src/da65/opc6502.h [deleted file]
src/da65/opc6502x.c [deleted file]
src/da65/opc6502x.h [deleted file]
src/da65/opc65816.c [deleted file]
src/da65/opc65816.h [deleted file]
src/da65/opc65c02.c [deleted file]
src/da65/opc65c02.h [deleted file]
src/da65/opc65sc02.c [deleted file]
src/da65/opc65sc02.h [deleted file]
src/da65/opcdesc.h [deleted file]
src/da65/opchuc6280.c [deleted file]
src/da65/opchuc6280.h [deleted file]
src/da65/opcm740.c [deleted file]
src/da65/opcm740.h [deleted file]
src/da65/opctable.c [deleted file]
src/da65/opctable.h [deleted file]
src/da65/output.c [deleted file]
src/da65/output.h [deleted file]
src/da65/scanner.c [deleted file]
src/da65/scanner.h [deleted file]
src/da65/segment.c [deleted file]
src/da65/segment.h [deleted file]
src/dbginfo/dbginfo.c [deleted file]
src/dbginfo/dbginfo.h [deleted file]
src/dbginfo/dbgsh.c [deleted file]
src/grc65.vcxproj [deleted file]
src/grc65/main.c [deleted file]
src/ld65.vcxproj [deleted file]
src/ld65/asserts.c [deleted file]
src/ld65/asserts.h [deleted file]
src/ld65/bin.c [deleted file]
src/ld65/bin.h [deleted file]
src/ld65/binfmt.c [deleted file]
src/ld65/binfmt.h [deleted file]
src/ld65/cfgexpr.c [deleted file]
src/ld65/cfgexpr.h [deleted file]
src/ld65/condes.c [deleted file]
src/ld65/condes.h [deleted file]
src/ld65/config.c [deleted file]
src/ld65/config.h [deleted file]
src/ld65/dbgfile.c [deleted file]
src/ld65/dbgfile.h [deleted file]
src/ld65/dbgsyms.c [deleted file]
src/ld65/dbgsyms.h [deleted file]
src/ld65/error.c [deleted file]
src/ld65/error.h [deleted file]
src/ld65/exports.c [deleted file]
src/ld65/exports.h [deleted file]
src/ld65/expr.c [deleted file]
src/ld65/expr.h [deleted file]
src/ld65/extsyms.c [deleted file]
src/ld65/extsyms.h [deleted file]
src/ld65/fileinfo.c [deleted file]
src/ld65/fileinfo.h [deleted file]
src/ld65/fileio.c [deleted file]
src/ld65/fileio.h [deleted file]
src/ld65/filepath.c [deleted file]
src/ld65/filepath.h [deleted file]
src/ld65/fragment.c [deleted file]
src/ld65/fragment.h [deleted file]
src/ld65/global.c [deleted file]
src/ld65/global.h [deleted file]
src/ld65/library.c [deleted file]
src/ld65/library.h [deleted file]
src/ld65/lineinfo.c [deleted file]
src/ld65/lineinfo.h [deleted file]
src/ld65/main.c [deleted file]
src/ld65/mapfile.c [deleted file]
src/ld65/mapfile.h [deleted file]
src/ld65/memarea.c [deleted file]
src/ld65/memarea.h [deleted file]
src/ld65/o65.c [deleted file]
src/ld65/o65.h [deleted file]
src/ld65/objdata.c [deleted file]
src/ld65/objdata.h [deleted file]
src/ld65/objfile.c [deleted file]
src/ld65/objfile.h [deleted file]
src/ld65/scanner.c [deleted file]
src/ld65/scanner.h [deleted file]
src/ld65/scopes.c [deleted file]
src/ld65/scopes.h [deleted file]
src/ld65/segments.c [deleted file]
src/ld65/segments.h [deleted file]
src/ld65/span.c [deleted file]
src/ld65/span.h [deleted file]
src/ld65/spool.c [deleted file]
src/ld65/spool.h [deleted file]
src/ld65/tpool.c [deleted file]
src/ld65/tpool.h [deleted file]
src/od65.vcxproj [deleted file]
src/od65/dump.c [deleted file]
src/od65/dump.h [deleted file]
src/od65/error.c [deleted file]
src/od65/error.h [deleted file]
src/od65/fileio.c [deleted file]
src/od65/fileio.h [deleted file]
src/od65/global.c [deleted file]
src/od65/global.h [deleted file]
src/od65/main.c [deleted file]
src/sim65.vcxproj [deleted file]
src/sim65/6502.c [deleted file]
src/sim65/6502.h [deleted file]
src/sim65/error.c [deleted file]
src/sim65/error.h [deleted file]
src/sim65/main.c [deleted file]
src/sim65/memory.c [deleted file]
src/sim65/memory.h [deleted file]
src/sim65/paravirt.c [deleted file]
src/sim65/paravirt.h [deleted file]
src/sp65.vcxproj [deleted file]
src/sp65/asm.c [deleted file]
src/sp65/asm.h [deleted file]
src/sp65/attr.c [deleted file]
src/sp65/attr.h [deleted file]
src/sp65/bin.c [deleted file]
src/sp65/bin.h [deleted file]
src/sp65/bitmap.c [deleted file]
src/sp65/bitmap.h [deleted file]
src/sp65/c.c [deleted file]
src/sp65/c.h [deleted file]
src/sp65/color.c [deleted file]
src/sp65/color.h [deleted file]
src/sp65/convert.c [deleted file]
src/sp65/convert.h [deleted file]
src/sp65/error.c [deleted file]
src/sp65/error.h [deleted file]
src/sp65/fileio.c [deleted file]
src/sp65/fileio.h [deleted file]
src/sp65/geosbitmap.c [deleted file]
src/sp65/geosbitmap.h [deleted file]
src/sp65/geosicon.c [deleted file]
src/sp65/geosicon.h [deleted file]
src/sp65/input.c [deleted file]
src/sp65/input.h [deleted file]
src/sp65/koala.c [deleted file]
src/sp65/koala.h [deleted file]
src/sp65/lynxsprite.c [deleted file]
src/sp65/lynxsprite.h [deleted file]
src/sp65/main.c [deleted file]
src/sp65/output.c [deleted file]
src/sp65/output.h [deleted file]
src/sp65/palette.c [deleted file]
src/sp65/palette.h [deleted file]
src/sp65/pcx.c [deleted file]
src/sp65/pcx.h [deleted file]
src/sp65/pixel.h [deleted file]
src/sp65/raw.c [deleted file]
src/sp65/raw.h [deleted file]
src/sp65/vic2sprite.c [deleted file]
src/sp65/vic2sprite.h [deleted file]
test/.gitignore [deleted file]
test/Makefile [deleted file]
test/bdiff.c [deleted file]
test/err/Makefile [deleted file]
test/err/cc65091001.c [deleted file]
test/err/cc65150311-1.c [deleted file]
test/err/cc65150311-10.c [deleted file]
test/err/cc65150311-11.c [deleted file]
test/err/cc65150311-2.c [deleted file]
test/err/cc65150311-3.c [deleted file]
test/err/cc65150311-4.c [deleted file]
test/err/cc65150311-5.c [deleted file]
test/err/cc65150311-6.c [deleted file]
test/err/cc65150311-7.c [deleted file]
test/err/cc65150311-8.c [deleted file]
test/err/cc65150311-9.c [deleted file]
test/err/front.c [deleted file]
test/err/static-2.c [deleted file]
test/err/static-3.c [deleted file]
test/err/static-4.c [deleted file]
test/misc/Makefile [deleted file]
test/misc/cc65141011.c [deleted file]
test/misc/common.h [deleted file]
test/misc/endless.c [deleted file]
test/misc/fields.c [deleted file]
test/misc/limits.c [deleted file]
test/misc/limits.ref [deleted file]
test/misc/sitest.c [deleted file]
test/readme.txt [deleted file]
test/ref/8q.c [deleted file]
test/ref/Makefile [deleted file]
test/ref/array.c [deleted file]
test/ref/cc65070303.c [deleted file]
test/ref/cc65080227.c [deleted file]
test/ref/cc65080328.c [deleted file]
test/ref/cc65090111.c [deleted file]
test/ref/cc65090124.c [deleted file]
test/ref/cc65090726.c [deleted file]
test/ref/cc65090910.c [deleted file]
test/ref/cc65090913.c [deleted file]
test/ref/cc65091007.c [deleted file]
test/ref/cc65091022.c [deleted file]
test/ref/cc65101102.c [deleted file]
test/ref/cc65101209.c [deleted file]
test/ref/cc65101216.c [deleted file]
test/ref/cc65110210.c [deleted file]
test/ref/cc65110211.c [deleted file]
test/ref/cf.c [deleted file]
test/ref/cf.in [deleted file]
test/ref/charconst.c [deleted file]
test/ref/charset.c [deleted file]
test/ref/common.h [deleted file]
test/ref/cvt.c [deleted file]
test/ref/dijkstra.c [deleted file]
test/ref/divmod.c [deleted file]
test/ref/hanoi.c [deleted file]
test/ref/ifexpr.c [deleted file]
test/ref/incr.c [deleted file]
test/ref/init.c [deleted file]
test/ref/macro.c [deleted file]
test/ref/mandel.c [deleted file]
test/ref/minimal.c [deleted file]
test/ref/otccex.c [deleted file]
test/ref/paranoia.c [deleted file]
test/ref/pointer2.c [deleted file]
test/ref/return.c [deleted file]
test/ref/sort.c [deleted file]
test/ref/spill.c [deleted file]
test/ref/stdarg.c [deleted file]
test/ref/strptr.c [deleted file]
test/ref/struct.c [deleted file]
test/ref/switch.c [deleted file]
test/ref/switch2.c [deleted file]
test/ref/varargs.c [deleted file]
test/ref/wf1.c [deleted file]
test/ref/wf1.in [deleted file]
test/ref/yacc.c [deleted file]
test/ref/yacc.in [deleted file]
test/ref/yacc2.c [deleted file]
test/ref/yaccdbg.c [deleted file]
test/val/Makefile [deleted file]
test/val/add1.c [deleted file]
test/val/add2.c [deleted file]
test/val/add3.c [deleted file]
test/val/add3a.c [deleted file]
test/val/add4.c [deleted file]
test/val/and1.c [deleted file]
test/val/and2.c [deleted file]
test/val/atoi-test.c [deleted file]
test/val/bool1.c [deleted file]
test/val/bool3.c [deleted file]
test/val/call1.c [deleted file]
test/val/casttochar.c [deleted file]
test/val/cc65091020.c [deleted file]
test/val/cc65141002.c [deleted file]
test/val/cc65141022.c [deleted file]
test/val/cc65150311.c [deleted file]
test/val/common.h [deleted file]
test/val/compare1.c [deleted file]
test/val/compare10.c [deleted file]
test/val/compare2.c [deleted file]
test/val/compare3.c [deleted file]
test/val/compare4.c [deleted file]
test/val/compare5.c [deleted file]
test/val/compare6.c [deleted file]
test/val/compare7.c [deleted file]
test/val/compare8.c [deleted file]
test/val/compare9.c [deleted file]
test/val/cq22.c [deleted file]
test/val/cq241.c [deleted file]
test/val/cq243.c [deleted file]
test/val/cq244.c [deleted file]
test/val/cq25.c [deleted file]
test/val/cq26.c [deleted file]
test/val/cq4.c [deleted file]
test/val/cq61.c [deleted file]
test/val/cq626.c [deleted file]
test/val/cq71.c [deleted file]
test/val/cq714.c [deleted file]
test/val/cq714b.c [deleted file]
test/val/cq715.c [deleted file]
test/val/cq72.c [deleted file]
test/val/cq757.c [deleted file]
test/val/cq7813.c [deleted file]
test/val/cq81.c [deleted file]
test/val/cq84.c [deleted file]
test/val/cq85.c [deleted file]
test/val/cq86.c [deleted file]
test/val/cq88.c [deleted file]
test/val/cq9.c [deleted file]
test/val/for.c [deleted file]
test/val/mult1.c [deleted file]
test/val/nestfor.c [deleted file]
test/val/or1.c [deleted file]
test/val/pointed-array.c [deleted file]
test/val/pointer1.c [deleted file]
test/val/ptrfunc.c [deleted file]
test/val/rotate1.c [deleted file]
test/val/rotate2.c [deleted file]
test/val/rotate3.c [deleted file]
test/val/rotate4.c [deleted file]
test/val/rotate5.c [deleted file]
test/val/rotate6.c [deleted file]
test/val/rotate7.c [deleted file]
test/val/static-1.c [deleted file]
test/val/strtol-test.c [deleted file]
test/val/strtoul-test.c [deleted file]
test/val/struct1.c [deleted file]
test/val/sub1.c [deleted file]
test/val/sub2.c [deleted file]
test/val/switch1.c [deleted file]
test/val/while.c [deleted file]
test/val/xor.c [deleted file]
testcode/assembler/.gitignore [deleted file]
testcode/assembler/Makefile [deleted file]
testcode/assembler/all.s [deleted file]
testcode/assembler/illegal.ref [deleted file]
testcode/assembler/illegal.s [deleted file]
testcode/assembler/legal.ref [deleted file]
testcode/assembler/legal.s [deleted file]
testcode/compiler/pptest1.c [deleted file]
testcode/compiler/pptest2.c [deleted file]
testcode/compiler/pptest3.c [deleted file]
testcode/compiler/pptest4.c [deleted file]
testcode/compiler/pptest5.c [deleted file]
testcode/grc/test.grc [deleted file]
testcode/grc/vlir.grc [deleted file]
testcode/grc/vlir0.s [deleted file]
testcode/grc/vlir1.s [deleted file]
testcode/grc/vlir2.s [deleted file]
testcode/lib/arg-test.c [deleted file]
testcode/lib/atari/defdev.c [deleted file]
testcode/lib/atari/mem.c [deleted file]
testcode/lib/atari/ostype.c [deleted file]
testcode/lib/atari/scrcode.s [deleted file]
testcode/lib/atari/sys.c [deleted file]
testcode/lib/atoi-test.c [deleted file]
testcode/lib/clock.c [deleted file]
testcode/lib/cprintf.c [deleted file]
testcode/lib/cursor.c [deleted file]
testcode/lib/deb.c [deleted file]
testcode/lib/dir-test.c [deleted file]
testcode/lib/div-test.c [deleted file]
testcode/lib/em-test.c [deleted file]
testcode/lib/exec-test1.c [deleted file]
testcode/lib/exec-test2.c [deleted file]
testcode/lib/fileio-test.c [deleted file]
testcode/lib/ft.c [deleted file]
testcode/lib/getopt-test.c [deleted file]
testcode/lib/getsp.s [deleted file]
testcode/lib/heaptest.c [deleted file]
testcode/lib/joy-test.c [deleted file]
testcode/lib/moddiv-test.c [deleted file]
testcode/lib/mul-test.c [deleted file]
testcode/lib/pce/Makefile [deleted file]
testcode/lib/pce/conio.c [deleted file]
testcode/lib/posixio-test.c [deleted file]
testcode/lib/rename-test.c [deleted file]
testcode/lib/scanf-test.c [deleted file]
testcode/lib/seek.c [deleted file]
testcode/lib/ser-test.c [deleted file]
testcode/lib/shift-test.c [deleted file]
testcode/lib/signal-test.c [deleted file]
testcode/lib/snprintf-test.c [deleted file]
testcode/lib/sprintf-test.c [deleted file]
testcode/lib/strchr-test.c [deleted file]
testcode/lib/strdup-test.c [deleted file]
testcode/lib/strncmp-test.c [deleted file]
testcode/lib/strnicmp-test.c [deleted file]
testcode/lib/stroserror-test.c [deleted file]
testcode/lib/strqtok-test.c [deleted file]
testcode/lib/strtol-test.c [deleted file]
testcode/lib/strtoul-test.c [deleted file]
testcode/lib/time-test.c [deleted file]
testcode/lib/tinyshell.c [deleted file]
testcode/lib/uname-test.c [deleted file]
util/atari/ataricvt.c [deleted file]
util/ca65html [deleted file]
util/cbm/cbmcvt.c [deleted file]
util/zlib/deflater.c [deleted file]

diff --git a/.gitignore b/.gitignore
deleted file mode 100644 (file)
index 196cdc3..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-/bin/
-/emd/
-/html/
-/info/
-/joy/
-/lib/
-/libwrk/
-/mou/
-/ser/
-/targetutil/
-/testwrk/
-/tgi/
-/wrk/
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644 (file)
index 6c6a428..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-language:
-  - c
-install:
-  - sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass
-script:
-  - make bin USER_CFLAGS=-Werror
-  - make lib QUIET=1
-  - make -C test
-  - make -C src clean
-  - make bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32-
-  - make doc zip
-after_success:
-  - make -f Makefile.travis
-env:
-  global:
-    - secure: "h+hoQdEHGPLNwaqGKmSaM8NBRDLc2X+W05VsnNG2Feq/wPv/AiBjONNlzN7jRf6D6f3aoPXaQ2Lc3bYWdxGvFRCmwiofdxkJI9n5L8HPHLZ2lf37MQsXmGJzoTFOvjPLj73H6HlbI9Ux0El3zO6hvalxiXj6TfoZ41dbhNyvpYk="
-    - secure: "A4hMEe5RRfUtYjFGbT7QAvT1Tyo434N+/TiuQeQ4q0L46c79LnXuGQzbFLOFZshZiplLkJr7lFg466CoI1bf2L0cQOew/LesMhE75v0HQ7tZnExWhdpAk0ri6nWixbjn/dmQ0+HxjzJ48A44DMMBYcvSIsO4vflvuJ8etfSg42k="
diff --git a/LICENSE b/LICENSE
deleted file mode 100644 (file)
index 88cacf1..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,17 +0,0 @@
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from
-the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not
-claim that you wrote the original software. If you use this software in
-a product, an acknowledgment in the product documentation would be
-appreciated but is not required.
-
-2. Altered source versions must be plainly marked as such, and must not
-be misrepresented as being the original software.
-
-3. This notice may not be removed or altered from any source distribution.
diff --git a/Makefile b/Makefile
deleted file mode 100644 (file)
index e0530e9..0000000
--- a/Makefile
+++ /dev/null
@@ -1,23 +0,0 @@
-.PHONY: all mostlyclean clean install zip avail unavail bin lib doc
-
-.SUFFIXES:
-
-all mostlyclean clean install zip:
-       @$(MAKE) -C src    --no-print-directory $@
-       @$(MAKE) -C libsrc --no-print-directory $@
-       @$(MAKE) -C doc    --no-print-directory $@
-
-avail unavail bin:
-       @$(MAKE) -C src    --no-print-directory $@
-
-lib:
-       @$(MAKE) -C libsrc --no-print-directory $@
-
-doc:
-       @$(MAKE) -C doc    --no-print-directory $@
-
-%65:
-       @$(MAKE) -C src    --no-print-directory $@
-
-%:
-       @$(MAKE) -C libsrc --no-print-directory $@
diff --git a/Makefile.travis b/Makefile.travis
deleted file mode 100644 (file)
index 4c0f688..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-.PHONY: all gh-pages sf-files
-
-.SUFFIXES:
-
-all: gh-pages sf-files
-
-GH_NAME = Oliver Schmidt
-GH_MAIL = ol.sc@web.de
-GH_PATH = ../doc
-
-gh-pages:
-ifdef GH_TOKEN
-       @echo 'git clone --branch=gh-pages https://$$(GH_TOKEN)@github.com/cc65/doc.git $(GH_PATH)'
-       @git clone --branch=gh-pages https://$(GH_TOKEN)@github.com/cc65/doc.git $(GH_PATH)
-       cd $(GH_PATH) && git config user.name "$(GH_NAME)"
-       cd $(GH_PATH) && git config user.email "$(GH_MAIL)"
-       cd $(GH_PATH) && git config push.default simple
-       $(RM) $(GH_PATH)/*.*
-       cp html/*.* $(GH_PATH)
-       cd $(GH_PATH) && git add -A
-       -cd $(GH_PATH) && git commit -m "Updated from commit $(TRAVIS_COMMIT)."
-       cd $(GH_PATH) && git push -q
-endif
-
-SF_USER = oliverschmidt
-SF_HOST = frs.sourceforge.net
-SF_FILE = /home/frs/project/cc65/cc65-snapshot-win32.zip
-
-SCPFLAGS = -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -q
-
-sf-files:
-ifdef SF_PASS
-       echo $(TRAVIS_COMMIT) | zip -z cc65
-       @echo 'sshpass -p $$(SF_PASS) scp $(SCPFLAGS) cc65.zip $(SF_USER)@$(SF_HOST):$(SF_FILE)'
-       @sshpass -p $(SF_PASS) scp $(SCPFLAGS) cc65.zip $(SF_USER)@$(SF_HOST):$(SF_FILE)
-endif
diff --git a/README.md b/README.md
deleted file mode 100644 (file)
index 688b380..0000000
--- a/README.md
+++ /dev/null
@@ -1,36 +0,0 @@
-[Windows Snapshot](http://sourceforge.net/projects/cc65/files/cc65-snapshot-win32.zip)
-
-[Documentation](http://cc65.github.io/doc)
-
-[Wiki](http://github.com/cc65/wiki/wiki)
-
-[![Build Status](https://api.travis-ci.org/cc65/cc65.svg?branch=master)](https://travis-ci.org/cc65/cc65/builds)
-
-cc65 is a complete cross development package for 65(C)02 systems, including
-a powerful macro assembler, a C compiler, linker, librarian and several
-other tools.
-
-cc65 has C and runtime library support for many of the old 6502 machines,
-including
-
-- the following Commodore machines:
-  - VIC20
-  - C16/C116 and Plus/4
-  - C64
-  - C128
-  - CBM 510 (aka P500)
-  - the 600/700 family
-  - newer PET machines (not 2001).
-- the Apple ][+ and successors.
-- the Atari 8 bit machines.
-- the Atari 5200 console.
-- GEOS for the C64, C128 and Apple //e.
-- the NEC PC-Engine (aka TurboGrafx-16).
-- the Nintendo Entertainment System (NES) console.
-- the Supervision console.
-- the Oric Atmos.
-- the Lynx console.
-- the Ohio Scientific Challenger 1P
-
-The libraries are fairly portable, so creating a version for other 6502s
-shouldn't be too much work.
diff --git a/asminc/_file.inc b/asminc/_file.inc
deleted file mode 100644 (file)
index 2f9938a..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; _file.inc
-;
-; (C) Copyright 2002 Ullrich von Bassewitz (uz@cc65.org)
-;
-
-; Assembler include file that makes the constants and structures in _file.h
-; available for asm code.
-
-; Struct _FILE
-.struct _FILE
-        f_fd        .byte
-        f_flags     .byte
-        f_pushback  .byte
-.endstruct
-
-; Flags field
-_FCLOSED        = $00
-_FOPEN          = $01
-_FEOF           = $02
-_FERROR         = $04
-_FPUSHBACK      = $08
-
-; File table
-.global         __filetab
-
-    
diff --git a/asminc/_heap.inc b/asminc/_heap.inc
deleted file mode 100644 (file)
index a7d6ace..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-;
-; _heap.inc
-;
-; (c) Copyright 2003, Ullrich von Bassewitz (uz@cc65.org)
-;
-
-; Assembler include file that makes the constants and structures in _heap.h
-; available for asm code.
-
-; Struct freeblock
-; NOTE: For performance reasons, the asm code often uses increment/decrement
-; operators to access other offsets, so just changing offsets here will
-; probably not work.
-.struct freeblock
-        size    .word
-        next    .addr
-        prev    .addr
-.endstruct
-
-; Struct usedblock
-; See notes above
-.struct usedblock
-        size    .word
-        start   .addr
-.endstruct
-
-HEAP_MIN_BLOCKSIZE  = .sizeof (freeblock)   ; Minimum size of an allocated block
-HEAP_ADMIN_SPACE    = .sizeof (usedblock)   ; Additional space for used bock
-
-; Variables
-.global         __heaporg
-.global         __heapptr
-.global         __heapend
-.global         __heapfirst
-.global         __heaplast
diff --git a/asminc/apple2.inc b/asminc/apple2.inc
deleted file mode 100644 (file)
index 536a1d8..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-
-;-----------------------------------------------------------------------------
-; Zero page stuff
-
-WNDLFT  :=      $20     ; Text window left
-WNDWDTH :=      $21     ; Text window width
-WNDTOP  :=      $22     ; Text window top
-WNDBTM  :=      $23     ; Text window bottom+1
-CH      :=      $24     ; Cursor horizontal position
-CV      :=      $25     ; Cursor vertical position
-BASL    :=      $28     ; Text base address low
-BASH    :=      $29     ; Text base address high
-INVFLG  :=      $32     ; Normal/inverse(/flash)
-PROMPT  :=      $33     ; Used by GETLN
-RNDL    :=      $4E     ; Random counter low
-RNDH    :=      $4F     ; Random counter high
-HIMEM   :=      $73     ; Highest available memory address+1
-
-;-----------------------------------------------------------------------------
-; Vectors
-
-DOSWARM :=      $03D0   ; DOS warmstart vector
-BRKVec  :=      $03F0   ; Break vector
-SOFTEV  :=      $03F2   ; Vector for warm start
-PWREDUP :=      $03F4   ; This must be = EOR #$A5 of SOFTEV+1
-
-;-----------------------------------------------------------------------------
-; Hardware
-
-; Keyboard input
-KBD     :=      $C000   ; Read keyboard
-KBDSTRB :=      $C010   ; Clear keyboard strobe
-
-; 80 column video switches
-CLR80COL:=      $C000   ; Disable 80 column store
-SET80COL:=      $C001   ; Enable 80 column store
-RD80COL :=      $C018   ; >127 if 80 column store enabled
-RD80VID :=      $C01F   ; >127 if 80 column video enabled
-
-; Character set switches
-CLRALTCHAR :=   $C00E   ; Normal Apple II char set
-SETALTCHAR :=   $C00F   ; Norm/inv LC, no flash
-ALTCHARSET :=   $C01E   ; >127 if alt charset switched in
-
-; Language card switches
-RDLCBNK2:=      $C011   ; >127 if LC bank 2 in use
-RDLCRAM :=      $C012   ; >127 if LC is read enabled
-ROMIN   :=      $C081   ; Swap in D000-FFFF ROM
-LCBANK2 :=      $C083   ; Swap in LC bank 2
-LCBANK1 :=      $C08B   ; Swap in LC bank 1
-
-; Video mode switches
-TXTCLR  :=      $C050   ; Display graphics
-TXTSET  :=      $C051   ; Display text
-MIXCLR  :=      $C052   ; Disable 4 lines of text
-MIXSET  :=      $C053   ; Enable 4 lines of text
-LOWSCR  :=      $C054   ; Page 1
-HISCR   :=      $C055   ; Page 2
-LORES   :=      $C056   ; Lores graphics
-HIRES   :=      $C057   ; Hires graphics
-
-; Game controller
-BUTN0   :=      $C061   ; Open-Apple Key
-BUTN1   :=      $C062   ; Closed-Apple Key
diff --git a/asminc/atari.inc b/asminc/atari.inc
deleted file mode 100644 (file)
index 3cce030..0000000
+++ /dev/null
@@ -1,1009 +0,0 @@
-;-------------------------------------------------------------------------
-; Atari System Equates
-; by Freddy Offenga, Christian Groessler, and Christian Krueger
-;
-; References:
-; - Atari 400/800 OS rev.B source code, Atari 1979
-; - Atari OS manual - XL addendum
-; - Atari XL/XE rev.2 source code, Atari 1984
-; - Mapping the Atari - revised edition, Ian Chadwick 1985
-;
-; ##old##       old OS rev.B label - moved or deleted
-; ##1200xl##    new label introduced in 1200XL OS (rev.10/11)
-; ##rev2##      new label introduced in XL/XE OS rev.2
-;-------------------------------------------------------------------------
-
-;-------------------------------------------------------------------------
-; Configuration Equates
-;-------------------------------------------------------------------------
-
-MAXDEV  = 33            ;offset to last possible entry of HATABS
-IOCBSZ  = 16            ;length of IOCB
-
-SEIOCB  = 0*IOCBSZ      ;##rev2## screen editor IOCB index
-MAXIOC  = 8*IOCBSZ      ;first invalid IOCB index
-
-DSCTSZ  = 128           ;##rev2## disk sector size
-
-LEDGE   = 2             ;left edge
-REDGE   = 39            ;right edge
-
-INIML   = $0700         ;##rev2## initial MEMLO
-
-ICSORG  = $CC00         ;##rev2## international character set origin
-DCSORG  = $E000         ;##rev2## domestic character set origin
-
-; IOCB Command Code Equates
-
-OPEN    = $03           ;open
-GETREC  = $05           ;get record
-GETCHR  = $07           ;get character(s)
-PUTREC  = $09           ;put record
-PUTCHR  = $0B           ;put character(s)
-CLOSE   = $0C           ;close
-STATIS  = $0D           ;status
-SPECIL  = $0E           ;special
-
-; DOS IOCB command codes
-
-RENAME  = $20           ;rename disk file
-DELETE  = $21           ;delete disk file
-LOCKFL  = $23           ;lock file (set to read-only)
-UNLOCK  = $24           ;unlock file
-POINT   = $25           ;point sector
-NOTE    = $26           ;note sector
-GETFL   = $27           ;get file length
-CHDIR_MYDOS     = $29   ;change directory (MyDOS)
-MKDIR   = $2A           ;make directory (MyDOS/SpartaDOS)
-RMDIR   = $2B           ;remove directory (SpartaDOS)
-CHDIR_SPDOS     = $2C   ;change directory (SpartaDOS)
-FORMAT  = $FE           ;format
-
-GETCWD  = $30           ;get current directory (MyDOS/SpartaDOS)
-
-; Special Entry Command Equates
-; DOS Commands
-; Command line table, Index values for (DOSVEC),Y -- COMTAB
-; Compatible with OS/A+, DOS XL and SpartaDOS
-
-COMTAB  = 0             ;DOS entry jump vector
-ZCRNAME = 3             ;file name crunch routine jump vector
-BUFOFF  = 10            ;next parameter buffer offset
-COMFNAM = 33            ;destination buffer for crunch routine
-LBUF    = 63            ;command line input buffer
-
-; Screen IOCB Commands
-
-DRAWLN  = $11           ;draw line
-FILLIN  = $12           ;draw line with right fill
-
-; ICAX1 Auxiliary Byte 1 Equates
-
-APPEND  = $01           ;open write append (D:)
-DIRECT  = $02           ;open for directory access (D:)
-OPNIN   = $04           ;open for input (all devices)
-OPNOT   = $08           ;open for output (all devices)
-MXDMOD  = $10           ;open for mixed mode (E:, S:)
-INSCLR  = $20           ;open for input without clearing screen
-
-; Device Code Equates
-
-CASSET  = 'C'           ;cassette
-DISK    = 'D'           ;disk
-SCREDT  = 'E'           ;screen editor
-KBD     = 'K'           ;keyboard
-PRINTR  = 'P'           ;printer
-DISPLY  = 'S'           ;screen display
-
-; SIO Command Code Equates
-
-SIO_FORMAT   = $21      ;format disk (default density)
-SIO_FORMATS  = $22      ;1050: format medium density
-SIO_CONFIG   = $44      ;configure drive
-SIO_CONFIGSF = $4B      ;slow/fast configure drive??
-SIO_RDPERCOM = $4E      ;read PERCOM block (XF551)
-SIO_WRPERCOM = $4F      ;write PERCOM block (XF551)
-SIO_WRITE    = $50      ;write sector
-SIO_READ     = $52      ;read sector
-SIO_STAT     = $53      ;get status information
-SIO_VERIFY   = $56      ;verify sector 
-SIO_WRITEV   = $57      ;write sector with verify
-SIO_WRITETRK = $60      ;write track (Speedy)
-SIO_READTRK  = $62      ;read track (Speedy)
-
-; SIO Status Code (DSTATS)
-; Input: data direction
-;     Bit #7 - W (write operation)
-;         #6 - R (read operation)
-; Output: status code
-;     $01 (001) -- OPERATION COMPLETE (NO ERRORS)
-;     $8A (138) -- DEVICE TIMEOUT (DOESN'T RESPOND)
-;     $8B (139) -- DEVICE NAK
-;     $8C (140) -- SERIAL BUS INPUT FRAMING ERROR
-;     $8E (142) -- SERIAL BUS DATA FRAME OVERRUN ERROR
-;     $8F (143) -- SERIAL BUS DATA FRAME CHECKSUM ERROR
-;     $90 (144) -- DEVICE DONE ERROR
-
-; Character and Key Code Equates
-
-CLS     = $7D           ;##rev2## clear screen
-EOL     = $9B           ;end of line (RETURN)
-
-HELP    = $11           ;##1200xl## key code for HELP
-CNTLF1  = $83           ;##1200xl## key code for CTRL-F1
-CNTLF2  = $84           ;##1200xl## key code for CTRL-F2
-CNTLF3  = $93           ;##1200xl## key code for CTRL-F3
-CNTLF4  = $94           ;##1200xl## key code for CTRL-F4
-CNTL1   = $9F           ;##1200xl## key code for CTRL-1
-
-; Status Code Equates
-
-SUCCES  = 1             ;($01) succesful operation
-
-BRKABT  = 128           ;($80) BREAK key abort
-PRVOPN  = 129           ;($81) IOCB already open error
-NONDEV  = 130           ;($82) nonexistent device error
-WRONLY  = 131           ;($83) IOCB opened for write only error
-NVALID  = 132           ;($84) invalid command error
-NOTOPN  = 133           ;($85) device/file not open error
-BADIOC  = 134           ;($86) invalid IOCB index error
-RDONLY  = 135           ;($87) IOCB opened for read only error
-EOFERR  = 136           ;($88) end of file error
-TRNRCD  = 137           ;($89) truncated record error
-TIMOUT  = 138           ;($8A) peripheral device timeout error
-DNACK   = 139           ;($8B) device does not acknowledge command
-FRMERR  = 140           ;($8C) serial bus framing error
-CRSROR  = 141           ;($8D) cursor overrange error
-OVRRUN  = 142           ;($8E) serial bus data overrun error
-CHKERR  = 143           ;($8F) serial bus checksum error
-DERROR  = 144           ;($90) device done (operation incomplete)
-BADMOD  = 145           ;($91) bad screen mode number error
-FNCNOT  = 146           ;($92) function not implemented in handler
-SCRMEM  = 147           ;($93) insufficient memory for screen mode
-
-DSKFMT  = 148           ;($94) SpartaDOS: unrecognized disk format
-INCVER  = 149           ;($95) SpartaDOS: disk was made with incompat. version
-DIRNFD  = 150           ;($96) SpartaDOS: directory not found
-FEXIST  = 151           ;($97) SpartaDOS: file exists
-NOTBIN  = 152           ;($98) SpartaDOS: file not binary
-LSYMND  = 154           ;($9A) SDX: loader symbol not defined
-BADPRM  = 156           ;($9C) SDX: bad parameter
-OUTOFM  = 158           ;($9E) SDX: out of memory
-INVDEV  = 160           ;($A0) invalid device number
-TMOF    = 161           ;($A1) too many open files
-DSKFLL  = 162           ;($A2) disk full
-FATLIO  = 163           ;($A3) fatal I/O error
-FNMSMT  = 164           ;($A4) internal file number mismatch
-INVFNM  = 165           ;($A5) invalid file name
-PDLERR  = 166           ;($A6) point data length error
-EPERM   = 167           ;($A7) permission denied
-DINVCM  = 168           ;($A8) command invalid for disk
-DIRFLL  = 169           ;($A9) directory full
-FNTFND  = 170           ;($AA) file not found
-PNTINV  = 171           ;($AB) point invalid
-BADDSK  = 173           ;($AD) bad disk
-INCFMT  = 176           ;($B0) DOS 3: incompatible file system
-
-; DCB Device Bus Equates
-
-DISKID  = $31           ;##rev2## disk bus ID
-PDEVN   = $40           ;##rev2## printer bus ID
-CASET   = $60           ;##rev2## cassette bus ID
-
-; Bus Command Equates
-
-FOMAT   = '!'           ;##rev2## format command
-PUTSEC  = 'P'           ;##rev2## put sector command
-READ    = 'R'           ;##rev2## read command
-STATC   = 'S'           ;##rev2## status command
-WRITE   = 'W'           ;##rev2## write command
-
-; Command Auxiliary Byte Equates
-
-DOUBLE  = 'D'           ;##rev2## print 20 characters double width
-NORMAL  = 'N'           ;##rev2## print 40 characters normally
-PLOT    = 'P'           ;##rev2## plot
-SIDWAY  = 'S'           ;##rev2## print 16 characters sideways
-
-; Bus Response Equates
-
-ACK     = 'A'           ;##rev2## device acknowledged
-COMPLT  = 'C'           ;##rev2## device succesfully completed operation
-ERROR   = 'E'           ;##rev2## device incurred error
-NACK    = 'N'           ;##rev2## device did not understand
-
-; Floating Point Miscellaneous Equates
-
-FPREC   = 6             ;precision
-
-FMPREC  = FPREC-1       ;##rev2## length of mantissa
-
-; Cassette Record Type Equates
-
-HDR     = $FB           ;##rev2## header
-DTA     = $FC           ;##rev2## data record
-DT1     = $FA           ;##rev2## last data record
-EOT     = $FE           ;##rev2## end of tape (file)
-
-TONE1   = 2             ;##rev2## record
-TONE2   = 1             ;##rev2## playback
-
-; Cassette Timing Equates
-
-WLEADN  = 1152          ;##rev2## NTSC 19.2 second WRITE file leader
-RLEADN  = 576           ;##rev2## NTSC 9.6 second READ file leader
-WIRGLN  = 180           ;##rev2## NTSC 3.0 second WRITE IRG
-RIRGLN  = 120           ;##rev2## NTSC 2.0 second READ IRG
-WSIRGN  = 15            ;##rev2## NTSC 0.25 second WRITE short IRG
-RSIRGN  = 10            ;##rev2## NTSC 0.16 second READ short IRG
-BEEPNN  = 30            ;##rev2## NTSC 0.5 second beep duration
-BEEPFN  = 10            ;##rev2## NTSC 0.16 seconrd beep duration
-
-WLEADP  = 960           ;##rev2## PAL 19.2 second WRITE file leader
-RLEADP  = 480           ;##rev2## PAL 9.6 second READ file leader
-WIRGLP  = 150           ;##rev2## PAL 3.0 second WRITE IRG
-RIRGLP  = 100           ;##rev2## PAL 2.0 second READ IRG
-WSIRGP  = 13            ;##rev2## PAL 0.25 second WRITE short IRG
-RSIRGP  = 8             ;##rev2## PAL 0.16 second READ short IRG
-BEEPNP  = 25            ;##rev2## PAL 0.5 second beep duration
-BEEPFP  = 8             ;##rev2## PAL 0.16 seconrd beep duration
-
-WIRGHI  = 0             ;##rev2## high WRITE IRG
-RIRGHI  = 0             ;##rev2## high READ IRG
-
-; Power-up Validation Byte Value Equates
-
-PUPVL1  = $5C           ;##rev2## power-up validation value 1
-PUPVL2  = $93           ;##rev2## power-up validation value 2
-PUPVL3  = $25           ;##rev2## power-up validation value 3
-
-; Relocating Loader Miscellaneous Equates
-
-DATAER  = 156           ;##rev2## end of record appears before END
-MEMERR  = 157           ;##rev2## memory insufficient for load error
-
-; Miscellaneous Equates
-
-IOCFRE  = $FF           ;IOCB free indication
-
-B19200  = $0028         ;##rev2## 19200 baud POKEY counter value
-B00600  = $05CC         ;##rev2## 600 baud POKEY counter value
-
-HITONE  = $05           ;##rev2## FSK high freq. POKEY counter value
-LOTONE  = $07           ;##rev2## FSK low freq. POKEY counter value
-
-NCOMLO  = $34           ;##rev2## PIA lower NOT COMMAND line command
-NCOMHI  = $3C           ;##rev2## PIA raise NOT COMMAND line command
-
-MOTRGO  = $34           ;##rev2## PIA cassette motor ON command
-MOTRST  = $3C           ;##rev2## PIA cassette motor OFF command
-
-NODAT   = $00           ;##rev2## SIO immediate operation
-GETDAT  = $40           ;##rev2## SIO read data frame
-PUTDAT  = $80           ;##rev2## SIO write data frame
-
-CRETRI  = 13            ;##rev2## number of command frame retries
-DRETRI  = 1             ;##rev2## number of device retries
-CTIM    = 2             ;##rev2## command frame ACK timeout
-
-NBUFSZ  = 40            ;##rev2## print normal buffer size
-DBUFSZ  = 20            ;##rev2## print double buffer size
-SBUFSZ  = 29            ;##rev2## print sideways buffer size
-
-;-------------------------------------------------------------------------
-; Page Zero Address Equates
-;-------------------------------------------------------------------------
-
-LINZBS  = $00           ;LINBUG RAM (WILL BE REPLACED BY MONITOR RAM)
-LNFLG   = $00           ;##1200xl## 1-byte LNBUG flag (0 = not LNBUG)
-NGFLAG  = $01           ;##1200xl## 1-byte memory status (0 = failure)
-
-; Not Cleared
-
-CASINI  = $02           ;CASSETTE INIT LOCATION
-RAMLO   = $04           ;RAM POINTER FOR MEMORY TEST
-TRAMSZ  = $06           ;TEMPORARY REGISTER FOR RAM SIZE
-;TSTDAT = $07           ;##old## RAM TEST DATA REGISTER
-CMCMD   = $07           ;##rev2## 1-byte command communications
-
-; Cleared upon Coldstart only
-
-WARMST  = $08           ;WARM START FLAG
-BOOTQ   = $09           ;SUCCESSFUL BOOT FLAG
-DOSVEC  = $0A           ;DISK SOFTWARE START VECTOR
-DOSINI  = $0C           ;DISK SOFTWARE INIT ADDRESS
-APPMHI  = $0E           ;APPLICATIONS MEMORY HI LIMIT
-
-; Cleared upon Coldstart or Warmstart
-
-INTZBS  = $10           ;INTERRUPT HANDLER
-
-POKMSK  = $10           ;SYSTEM MASK FOR POKEY IRQ ENABLE (shadow of IRQEN)
-BRKKEY  = $11           ;BREAK KEY FLAG
-RTCLOK  = $12           ;REAL TIME CLOCK (IN 16 MSEC UNITS>
-BUFADR  = $15           ;INDIRECT BUFFER ADDRESS REGISTER
-ICCOMT  = $17           ;COMMAND FOR VECTOR
-DSKFMS  = $18           ;DISK FILE MANAGER POINTER
-DSKUTL  = $1A           ;DISK UTILITIES POINTER
-ABUFPT  = $1C           ;##1200xl## 4-byte ACMI buffer pointer area
-
-;PTIMOT = $1C           ;##old## PRINTER TIME OUT REGISTER
-;PBPNT  = $1D           ;##old## PRINT BUFFER POINTER
-;PBUFSZ = $1E           ;##old## PRINT BUFFER SIZE
-;PTEMP  = $1F           ;##old## TEMPORARY REGISTER
-
-ZIOCB   = $20           ;ZERO PAGE I/O CONTROL BLOCK
-IOCBAS  = $20           ;16-byte page zero IOCB
-ICHIDZ  = $20           ;HANDLER INDEX NUMBER (FF = IOCB FREE)
-ICDNOZ  = $21           ;DEVICE NUMBER (DRIVE NUMBER)
-ICCOMZ  = $22           ;COMMAND CODE
-ICSTAZ  = $23           ;STATUS OF LAST IOCB ACTION
-ICBALZ  = $24           ;BUFFER ADDRESS LOW BYTE
-ICBAHZ  = $25           ;1-byte high buffer address
-ICPTLZ  = $26           ;PUT BYTE ROUTINE ADDRESS -1
-ICPTHZ  = $27           ;1-byte high PUT-BYTE routine address
-ICBLLZ  = $28           ;BUFFER LENGTH LOW BYTE
-ICBLHZ  = $29           ;1-byte high buffer length
-ICAX1Z  = $2A           ;AUXILIARY INFORMATION FIRST BYTE
-ICAX2Z  = $2B           ;1-byte second auxiliary information
-ICSPRZ  = $2C           ;4-byte spares
-
-ENTVEC  = $2C           ;##rev2## 2-byte (not used)
-ICIDNO  = $2E           ;IOCB NUMBER X 16
-CIOCHR  = $2F           ;CHARACTER BYTE FOR CURRENT OPERATION
-
-STATUS  = $30           ;INTERNAL STATUS STORAGE
-CHKSUM  = $31           ;CHECKSUM (SINGLE BYTE SUM WITH CARRY)
-BUFRLO  = $32           ;POINTER TO DATA BUFFER (LO BYTE)
-BUFRHI  = $33           ;POINTER TO DATA BUFFER (HI BYTE)
-BFENLO  = $34           ;NEXT BYTE PAST END OF THE DATA BUFFER LO
-BFENHI  = $35           ;NEXT BYTE PAST END OF THE DATA BUFFER HI
-;CRETRY = $36           ;##old## NUMBER OF COMMAND FRAME RETRIES
-;DRETRY = $37           ;##old## NUMBER OF DEVICE RETRIES
-LTEMP   = $36           ;##1200xl## 2-byte loader temporary
-BUFRFL  = $38           ;DATA BUFFER FULL FLAG
-RECVDN  = $39           ;RECEIVE DONE FLAG
-XMTDON  = $3A           ;TRANSMISSION DONE FLAG
-CHKSNT  = $3B           ;CHECKSUM SENT FLAG
-NOCKSM  = $3C           ;NO CHECKSUM FOLLOWS DATA FLAG
-BPTR    = $3D           ;1-byte cassette buffer pointer
-FTYPE   = $3E           ;1-byte cassette IRG type
-FEOF    = $3F           ;1-byte cassette EOF flag (0 = quiet)
-FREQ    = $40           ;1-byte cassette beep counter
-SOUNDR  = $41           ;NOISY I/0 FLAG. (ZERO IS QUIET)
-
-CRITIC  = $42           ;DEFINES CRITICAL SECTION (CRITICAL IF NON-Z)
-
-FMSZPG  = $43           ;DISK FILE MANAGER SYSTEM ZERO PAGE
-
-;CKEY   = $4A           ;##old## FLAG SET WHEN GAME START PRESSED
-ZCHAIN  = $4A           ;##1200xl## 2-byte handler linkage chain pointer
-;CASSBT = $4B           ;##old## CASSETTE BOOT FLAG
-DSTAT   = $4C           ;DISPLAY STATUS
-ATRACT  = $4D           ;ATRACT FLAG
-DRKMSK  = $4E           ;DARK ATRACT MASK
-COLRSH  = $4F           ;ATRACT COLOR SHIFTER (EOR'ED WITH PLAYFIELD
-
-
-TMPCHR  = $50           ;1-byte temporary character
-HOLD1   = $51           ;1-byte temporary
-LMARGN  = $52           ;left margin (normally 2, cc65 C startup code sets it to 0)
-RMARGN  = $53           ;right margin (normally 39 if no XEP80 is used)
-ROWCRS  = $54           ;1-byte cursor row
-COLCRS  = $55           ;2-byte cursor column
-DINDEX  = $57           ;1-byte display mode
-SAVMSC  = $58           ;2-byte saved memory scan counter
-OLDROW  = $5A           ;1-byte prior row
-OLDCOL  = $5B           ;2-byte prior column
-OLDCHR  = $5D           ;DATA UNDER CURSOR
-OLDADR  = $5E           ;2-byte saved cursor memory address
-FKDEF   = $60           ;##1200xl## 2-byte function key definition table
-;NEWROW = $60           ;##old## POINT DRAW GOES TO
-;NEWCOL = $61           ;##old##
-PALNTS  = $62           ;##1200xl## 1-byte PAL/NTSC indicator (0 = NTSC)
-LOGCOL  = $63           ;POINTS AT COLUMN IN LOGICAL LINE
-ADRESS  = $64           ;2-byte temporary address
-
-MLTTMP  = $66           ;1-byte temporary
-OPNTMP  = $66           ;FIRST BYTE IS USED IN OPEN AS TEMP
-TOADR   = $66           ;##rev2## 2-byte destination address
-
-SAVADR  = $68           ;2-byte saved address
-FRMADR  = $68           ;##rev2## 2-byte source address
-
-RAMTOP  = $6A           ;RAM SIZE DEFINED BY POWER ON LOGIC
-BUFCNT  = $6B           ;BUFFER COUNT
-BUFSTR  = $6C           ;EDITOR GETCH POINTER
-BITMSK  = $6E           ;BIT MASK
-SHFAMT  = $6F           ;1-byte shift amount for pixel justifucation
-ROWAC   = $70           ;2-byte draw working row
-COLAC   = $72           ;2-byte draw working column
-ENDPT   = $74           ;2-byte end point
-DELTAR  = $76           ;1-byte row difference
-DELTAC  = $77           ;2-byte column difference
-KEYDEF  = $79           ;##1200xl## 2-byte key definition table address
-;ROWINC = $79           ;##old##
-;COLINC = $7A           ;##old##
-SWPFLG  = $7B           ;NON-0 1F TXT AND REGULAR RAM IS SWAPPED
-HOLDCH  = $7C           ;CH IS MOVED HERE IN KGETCH BEFORE CNTL & SH
-INSDAT  = $7D           ;1-byte temporary
-COUNTR  = $7E           ;2-byte draw iteration count
-
-; Floating Point Package Page Zero Address Equates
-
-FR0     = $D4           ;6-byte register 0
-FR0M    = $D5           ;##rev2## 5-byte register 0 mantissa
-QTEMP   = $D9           ;##rev2## 1-byte temporary
-
-FRE     = $DA           ;6-byte (internal) register E
-
-FR1     = $E0           ;FP REG1
-FR1M    = $E1           ;##rev2## 5-byte register 1 mantissa
-
-FR2     = $E6           ;6-byte (internal) register 2
-
-FRX     = $EC           ;1-byte temporary
-
-EEXP    = $ED           ;VALUE OF E
-
-FRSIGN  = $EE           ;##rev2## 1-byte floating point sign
-NSIGN   = $EE           ;SIGN OF #
-
-PLYCNT  = $EF           ;##rev2## 1-byte polynomial degree
-ESIGN   = $EF           ;SIGN OF EXPONENT
-
-SGNFLG  = $F0           ;##rev2## 1-byte sign flag
-FCHRFLG = $F0           ;1ST CHAR FLAG
-
-XFMFLG  = $F1           ;##rev2## 1-byte transform flag
-DIGRT   = $F1           ;# OF DIGITS RIGHT OF DECIMAL
-
-CIX     = $F2           ;CURRENT INPUT INDEX
-INBUFF  = $F3           ;POINTS TO USER'S LINE INPUT BUFFER
-
-ZTEMP1  = $F5           ;2-byte temporary
-ZTEMP4  = $F7           ;2-byte temporary
-ZTEMP3  = $F9           ;2-byte temporary
-
-;DEGFLG = $FB           ;##old## same as RADFLG
-;RADFLG = $FB           ;##old## 0=RADIANS, 6=DEGREES
-
-FLPTR   = $FC           ;2-byte floating point number pointer
-FPTR2   = $FE           ;2-byte floating point number pointer
-
-;-------------------------------------------------------------------------
-; Page Two Address Equates
-;-------------------------------------------------------------------------
-
-INTABS  = $0200         ;INTERRUPT RAM
-
-VDSLST  = $0200         ;DISPLAY LIST NMI VECTOR
-VPRCED  = $0202         ;PROCEED LINE IRQ VECTOR
-VINTER  = $0204         ;INTERRUPT LINE IRQ VECTOR
-VBREAK  = $0206         ;SOFTWARE BREAK (00) INSTRUCTION IRQ VECTOR
-VKEYBD  = $0208         ;POKEY KEYBOARD IRQ VECTOR
-VSERIN  = $020A         ;POKEY SERIAL INPUT READY IRQ
-VSEROR  = $020C         ;POKEY SERIAL OUTPUT READY IRQ
-VSEROC  = $020E         ;POKEY SERIAL OUTPUT COMPLETE IRQ
-VTIMR1  = $0210         ;POKEY TIMER 1 IRQ
-VTIMR2  = $0212         ;POKEY TIMER 2 IRQ
-VTIMR4  = $0214         ;POKEY TIMER 4 IRQ
-VIMIRQ  = $0216         ;IMMEDIATE IRQ VECTOR
-CDTMV1  = $0218         ;COUNT DOWN TIMER 1
-CDTMV2  = $021A         ;COUNT DOWN TIMER 2
-CDTMV3  = $021C         ;COUNT DOWN TIMER 3
-CDTMV4  = $021E         ;COUNT DOWN TIMER 4
-CDTMV5  = $0220         ;COUNT DOWN TIMER 5
-VVBLKI  = $0222         ;IMMEDIATE VERTICAL BLANK NMI VECTOR
-VVBLKD  = $0224         ;DEFERRED VERTICAL BLANK NMI VECTOR
-CDTMA1  = $0226         ;COUNT DOWN TIMER 1 JSR ADDRESS
-CDTMA2  = $0228         ;COUNT DOWN TIMER 2 JSR ADDRESS
-CDTMF3  = $022A         ;COUNT DOWN TIMER 3 FLAG
-SRTIMR  = $022B         ;SOFTWARE REPEAT TIMER
-CDTMF4  = $022C         ;COUNT DOWN TIMER 4 FLAG
-INTEMP  = $022D         ;IAN'S TEMP
-CDTMF5  = $022E         ;COUNT DOWN TIMER FLAG 5
-SDMCTL  = $022F         ;SAVE DMACTL REGISTER
-SDLSTL  = $0230         ;SAVE DISPLAY LIST LOW BYTE
-SDLSTH  = $0231         ;SAVE DISPLAY LIST HI BYTE
-SSKCTL  = $0232         ;SKCTL REGISTER RAM
-LCOUNT  = $0233         ;##1200xl## 1-byte relocating loader record
-LPENH   = $0234         ;LIGHT PEN HORIZONTAL VALUE
-LPENV   = $0235         ;LIGHT PEN VERTICAL VALUE
-BRKKY   = $0236         ;BREAK KEY VECTOR
-;RELADR = $0238         ;##1200xl## 2-byte relocatable loader address
-VPIRQ   = $0238         ;##rev2## 2-byte parallel device IRQ vector
-CDEVIC  = $023A         ;COMMAND FRAME BUFFER - DEVICE
-CCOMND  = $023B         ;COMMAND
-CAUX1   = $023C         ;COMMAND AUX BYTE 1
-CAUX2   = $023D         ;COMMAND AUX BYTE 2
-
-TEMP    = $023E         ;TEMPORARY RAM CELL
-
-ERRFLG  = $023F         ;ERROR FLAG - ANY DEVICE ERROR EXCEPT TIME OUT
-
-DFLAGS  = $0240         ;DISK FLAGS FROM SECTOR ONE
-DBSECT  = $0241         ;NUMBER OF DISK BOOT SECTORS
-BOOTAD  = $0242         ;ADDRESS WHERE DISK BOOT LOADER WILL BE PUT
-COLDST  = $0244         ;COLDSTART FLAG (1=IN MIDDLE OF COLDSTART>
-RECLEN  = $0245         ;##1200xl## 1-byte relocating loader record length
-DSKTIM  = $0246         ;DISK TIME OUT REGISTER
-;LINBUF = $0247         ;##old## CHAR LINE BUFFER
-PDVMSK  = $0247         ;##rev2## 1-byte parallel device selection mask
-SHPDVS  = $0248         ;##rev2## 1-byte PDVS (parallel device select)
-PDIMSK  = $0249         ;##rev2## 1-byte parallel device IRQ selection
-RELADR  = $024A         ;##rev2## 2-byte relocating loader relative adr.
-PPTMPA  = $024C         ;##rev2## 1-byte parallel device handler temporary
-PPTMPX  = $024D         ;##rev2## 1-byte parallel device handler temporary
-
-CHSALT  = $026B         ;##1200xl## 1-byte character set alternate
-VSFLAG  = $026C         ;##1200xl## 1-byte fine vertical scroll count
-KEYDIS  = $026D         ;##1200xl## 1-byte keyboard disable
-FINE    = $026E         ;##1200xl## 1-byte fine scrolling mode
-GPRIOR  = $026F         ;GLOBAL PRIORITY CELL
-
-PADDL0  = $0270         ;1-byte potentiometer 0
-PADDL1  = $0271         ;1-byte potentiometer 1
-PADDL2  = $0272         ;1-byte potentiometer 2
-PADDL3  = $0273         ;1-byte potentiometer 3
-PADDL4  = $0274         ;1-byte potentiometer 4
-PADDL5  = $0275         ;1-byte potentiometer 5
-PADDL6  = $0276         ;1-byte potentiometer 6
-PADDL7  = $0277         ;1-byte potentiometer 7
-
-STICK0  = $0278         ;1-byte joystick 0
-STICK1  = $0279         ;1-byte joystick 1
-STICK2  = $027A         ;1-byte joystick 2
-STICK3  = $027B         ;1-byte joystick 3
-
-PTRIG0  = $027C         ;1-byte paddle trigger 0
-PTRIG1  = $027D         ;1-byte paddle trigger 1
-PTRIG2  = $027E         ;1-byte paddle trigger 2
-PTRIG3  = $027F         ;1-byte paddle trigger 3
-PTRIG4  = $0280         ;1-byte paddle trigger 4
-PTRIG5  = $0281         ;1-byte paddle trigger 5
-PTRIG6  = $0281         ;1-byte paddle trigger 6
-PTRIG7  = $0283         ;1-byte paddle trigger 7
-
-STRIG0  = $0284         ;1-byte joystick trigger 0
-STRIG1  = $0285         ;1-byte joystick trigger 1
-STRIG2  = $0286         ;1-byte joystick trigger 2
-STRIG3  = $0287         ;1-byte joystick trigger 3
-
-;CSTAT  = $0288         ;##old## cassette status register
-HIBYTE  = $0288         ;##1200xl## 1-byte relocating loader high byte
-WMODE   = $0289         ;1-byte cassette WRITE mode
-BLIM    = $028A         ;1-byte cassette buffer limit
-IMASK   = $028B         ;##rev2## (not used)
-JVECK   = $028C         ;2-byte jump vector or temporary
-NEWADR  = $028E         ;##1200xl## 2-byte relocating address
-TXTROW  = $0290         ;TEXT ROWCRS
-TXTCOL  = $0291         ;TEXT COLCRS
-TINDEX  = $0293         ;TEXT INDEX
-TXTMSC  = $0294         ;FOOLS CONVRT INTO NEW MSC
-TXTOLD  = $0296         ;OLDROW & OLDCOL FOR TEXT (AND THEN SOME)
-;TMPX1  = $029C         ;##old## 1-byte temporary register
-CRETRY  = $029C         ;##1200xl## 1-byte number of command frame retries
-HOLD3   = $029D         ;1-byte temporary
-SUBTMP  = $029E         ;1-byte temporary
-HOLD2   = $029F         ;1-byte (not used)
-DMASK   = $02A0         ;1-byte display (pixel location) mask
-TMPLBT  = $02A1         ;1-byte (not used)
-ESCFLG  = $02A2         ;ESCAPE FLAG
-TABMAP  = $02A3         ;15-byte (120 bit) tab stop bit map
-LOGMAP  = $02B2         ;LOGICAL LINE START BIT MAP
-INVFLG  = $02B6         ;INVERSE VIDEO FLAG (TOGGLED BY ATARI KEY)
-FILFLG  = $02B7         ;RIGHT FILL FLAG FOR DRAW
-TMPROW  = $02B8         ;1-byte temporary row
-TMPCOL  = $02B9         ;2-byte temporary column
-SCRFLG  = $02BB         ;SET IF SCROLL OCCURS
-HOLD4   = $02BC         ;TEMP CELL USED IN DRAW ONLY
-;HOLD5  = $02BD         ;##old## DITTO
-DRETRY  = $02BD         ;##1200xl## 1-byte number of device retries
-SHFLOK  = $02BE         ;1-byte shift/control lock flags
-BOTSCR  = $02BF         ;BOTTOM OF SCREEN   24 NORM 4 SPLIT
-
-PCOLR0  = $02C0         ;1-byte player-missile 0 color/luminance
-PCOLR1  = $02C1         ;1-byte player-missile 1 color/luminance
-PCOLR2  = $02C2         ;1-byte player-missile 2 color/luminance
-PCOLR3  = $02C3         ;1-byte player-missile 3 color/luminance
-
-COLOR0  = $02C4         ;1-byte playfield 0 color/luminance
-COLOR1  = $02C5         ;1-byte playfield 1 color/luminance
-COLOR2  = $02C6         ;1-byte playfield 2 color/luminance
-COLOR3  = $02C7         ;1-byte playfield 3 color/luminance
-
-COLOR4  = $02C8         ;1-byte background color/luminance
-
-PARMBL  = $02C9         ;##rev2## 6-byte relocating loader parameter
-RUNADR  = $02C9         ;##1200xl## 2-byte run address
-HIUSED  = $02CB         ;##1200xl## 2-byte highest non-zero page address
-ZHIUSE  = $02CD         ;##1200xl## 2-byte highest zero page address
-
-OLDPAR  = $02CF         ;##rev2## 6-byte relocating loader parameter
-GBYTEA  = $02CF         ;##1200xl## 2-byte GET-BYTE routine address
-LOADAD  = $02D1         ;##1200xl## 2-byte non-zero page load address
-ZLOADA  = $02D3         ;##1200xl## 2-byte zero page load address
-
-DSCTLN  = $02D5         ;##1200xl## 2-byte disk sector length
-ACMISR  = $02D7         ;##1200xl## 2-byte ACMI interrupt service routine
-KRPDEL  = $02D9         ;##1200xl## 1-byte auto-repeat delay
-KEYREP  = $02DA         ;##1200xl## 1-byte auto-repeat rate
-NOCLIK  = $02DB         ;##1200xl## 1-byte key click disable
-HELPFG  = $02DC         ;##1200xl## 1-byte HELP key flag (0 = no HELP)
-DMASAV  = $02DD         ;##1200xl## 1-byte SDMCTL save/restore
-PBPNT   = $02DE         ;##1200xl## 1-byte printer buffer pointer
-PBUFSZ  = $02DF         ;##1200xl## 1-byte printer buffer size
-
-GLBABS  = $02E0         ;4-byte global variables for non-DOS users
-RUNAD   = $02E0         ;##map## 2-byte binary file run address
-INITAD  = $02E2         ;##map## 2-byte binary file initialization address
-
-RAMSIZ  = $02E4         ;RAM SIZE (HI BYTE ONLY)
-MEMTOP  = $02E5         ;TOP OF AVAILABLE USER MEMORY
-MEMLO   = $02E7         ;BOTTOM OF AVAILABLE USER MEMORY
-HNDLOD  = $02E9         ;##1200xl## 1-byte user load flag
-DVSTAT  = $02EA         ;STATUS BUFFER
-CBAUDL  = $02EE         ;1-byte low cassette baud rate
-CBAUDH  = $02EF         ;1-byte high cassette baud rate
-CRSINH  = $02F0         ;CURSOR INHIBIT (00 = CURSOR ON)
-KEYDEL  = $02F1         ;KEY DELAY
-CH1     = $02F2         ;1-byte prior keyboard character
-CHACT   = $02F3         ;CHACTL REGISTER RAM
-CHBAS   = $02F4         ;CHBAS REGISTER RAM
-
-NEWROW  = $02F5         ;##1200xl## 1-byte draw destination row
-NEWCOL  = $02F6         ;##1200xl## 2-byte draw destination column
-ROWINC  = $02F8         ;##1200xl## 1-byte draw row increment
-COLINC  = $02F9         ;##1200xl## 1-byte draw column increment
-
-CHAR    = $02FA         ;1-byte internal character
-ATACHR  = $02FB         ;ATASCII CHARACTER
-CH      = $02FC         ;GLOBAL VARIABLE FOR KEYBOARD
-FILDAT  = $02FD         ;RIGHT FILL DATA <DRAW>
-DSPFLG  = $02FE         ;DISPLAY FLAG   DISPLAY CNTLS IF NON-ZERO
-SSFLAG  = $02FF         ;START/STOP FLAG FOR PAGING (CNTL 1). CLEARE
-
-;-------------------------------------------------------------------------
-; Page Three Address Equates
-;-------------------------------------------------------------------------
-
-DCB     = $0300         ;DEVICE CONTROL BLOCK
-DDEVIC  = $0300         ;PERIPHERAL UNIT 1 BUS I.D. NUMBER
-DUNIT   = $0301         ;UNIT NUMBER
-DCOMND  = $0302         ;BUS COMMAND
-DSTATS  = $0303         ;COMMAND TYPE/STATUS RETURN
-DBUFLO  = $0304         ;1-byte low data buffer address
-DBUFHI  = $0305         ;1-byte high data buffer address
-DTIMLO  = $0306         ;DEVICE TIME OUT IN 1 SECOND UNITS
-DUNUSE  = $0307         ;UNUSED BYTE
-DBYTLO  = $0308         ;1-byte low number of bytes to transfer
-DBYTHI  = $0309         ;1-byte high number of bytes to transfer
-DAUX1   = $030A         ;1-byte first command auxiliary
-DAUX2   = $030B         ;1-byte second command auxiliary
-
-TIMER1  = $030C         ;INITIAL TIMER VALUE
-;ADDCOR = $030E         ;##old## ADDITION CORRECTION
-JMPERS  = $030E         ;##1200xl## 1-byte jumper options
-CASFLG  = $030F         ;CASSETTE MODE WHEN SET
-TIMER2  = $0310         ;2-byte final baud rate timer value
-TEMP1   = $0312         ;TEMPORARY STORAGE REGISTER
-;TEMP2  = $0314         ;##old## TEMPORARY STORAGE REGISTER
-TEMP2   = $0313         ;##1200xl## 1-byte temporary 
-PTIMOT  = $0314         ;##1200xl## 1-byte printer timeout
-TEMP3   = $0315         ;TEMPORARY STORAGE REGISTER
-SAVIO   = $0316         ;SAVE SERIAL IN DATA PORT
-TIMFLG  = $0317         ;TIME OUT FLAG FOR BAUD RATE CORRECTION
-STACKP  = $0318         ;SIO STACK POINTER SAVE CELL
-TSTAT   = $0319         ;TEMPORARY STATUS HOLDER
-
-HATABS  = $031A         ;35-byte handler address table (was 38 bytes)
-PUPBT1  = $033D         ;##1200xl## 1-byte power-up validation byte 1
-PUPBT2  = $033E         ;##1200xl## 1-byte power-up validation byte 2
-PUPBT3  = $033F         ;##1200xl## 1-byte power-up validation byte 3
-
-IOCB    = $0340         ;I/O CONTROL BLOCKS
-ICHID   = $0340         ;HANDLER INDEX NUMBER (FF=IOCB FREE)
-ICDNO   = $0341         ;DEVICE NUMBER (DRIVE NUMBER)
-ICCOM   = $0342         ;COMMAND CODE
-ICSTA   = $0343         ;STATUS OF LAST IOCB ACTION
-ICBAL   = $0344         ;1-byte low buffer address
-ICBAH   = $0345         ;1-byte high buffer address
-ICPTL   = $0346         ;1-byte low PUT-BYTE routine address - 1
-ICPTH   = $0347         ;1-byte high PUT-BYTE routine address - 1
-ICBLL   = $0348         ;1-byte low buffer length
-ICBLH   = $0349         ;1-byte high buffer length
-ICAX1   = $034A         ;1-byte first auxiliary information
-ICAX2   = $034B         ;1-byte second auxiliary information
-ICAX3   = $034C         ;1-byte third auxiliary information
-ICAX4   = $034D         ;1-byte fourth auxiliary information
-ICAX5   = $034E         ;1-byte fifth auxiliary information
-ICSPR   = $034F         ;SPARE BYTE
-
-PRNBUF  = $03C0         ;PRINTER BUFFER
-SUPERF  = $03E8         ;##1200xl## 1-byte editor super function flag
-CKEY    = $03E9         ;##1200xl## 1-byte cassette boot request flag
-CASSBT  = $03EA         ;##1200xl## 1-byte cassette boot flag
-CARTCK  = $03EB         ;##1200xl## 1-byte cartridge equivalence check
-DERRF   = $03EC         ;##rev2## 1-byte screen OPEN error flag
-
-; Remainder of Page Three Not Cleared upon Reset
-
-ACMVAR  = $03ED         ;##1200xl## 11 bytes reserved for ACMI
-BASICF  = $03F8         ;##rev2## 1-byte BASIC switch flag
-MINTLK  = $03F9         ;##1200xl## 1-byte ACMI module interlock
-GINTLK  = $03FA         ;##1200xl## 1-byte cartridge interlock
-CHLINK  = $03FB         ;##1200xl## 2-byte loaded handler chain link
-CASBUF  = $03FD         ;CASSETTE BUFFER
-
-;-------------------------------------------------------------------------
-; Page Four/Five Address Equates
-;-------------------------------------------------------------------------
-
-; USER AREA STARTS HERE AND GOES TO END OF PAGE FIVE
-USAREA  = $0480         ;128 bytes reserved for application
-
-LBPR1   = $057E         ;LBUFF PREFIX 1
-LBPR2   = $057F         ;LBUFF PREFIX 2
-LBUFF   = $0580         ;128-byte line buffer
-
-PLYARG  = $05E0         ;6-byte floating point polynomial argument
-FPSCR   = $05E6         ;6-byte floating point temporary
-FPSCR1  = $05EC         ;6-byte floating point temporary
-
-;LBFEND = $05FF         ;##old## END OF LBUFF
-
-
-DOS     = $0700
-
-;-------------------------------------------------------------------------
-; Cartridge Address Equates
-;-------------------------------------------------------------------------
-
-CARTCS  = $BFFA         ;##rev2## 2-byte cartridge coldstart address
-CART    = $BFFC         ;##rev2## 1-byte cartridge present indicator
-                        ;0=Cart Exists
-CARTFG  = $BFFD         ;##rev2## 1-byte cartridge flags
-                        ;D7  0=Not a Diagnostic Cart
-                        ;    1=Is a Diagnostic cart and control is 
-                        ;      given to cart before any OS is init.
-                        ;D2  0=Init but Do not Start Cart
-                        ;    1=Init and Start Cart
-                        ;D0  0=Do not boot disk
-                        ;    1=Boot Disk
-CARTAD  = $BFFE         ;##rev2## 2-byte cartridge start vector
-
-;-------------------------------------------------------------------------
-; CTIA/GTIA Address Equates
-;-------------------------------------------------------------------------
-
-GTIA    = $D000         ;CTIA/GTIA area
-.include "atari_gtia.inc"
-
-;-------------------------------------------------------------------------
-; PBI Address Equates
-;-------------------------------------------------------------------------
-
-PBI     = $D100         ;##rev2## parallel bus interface area
-
-; Read Addresses
-
-PDVI    = $D1FF         ;##rev2## parallel device IRQ status
-
-; Write Addresses
-
-PDVS    = $D1FF         ;##rev2## parallel device select
-
-;-------------------------------------------------------------------------
-; POKEY Address Equates
-;-------------------------------------------------------------------------
-
-POKEY     = $D200         ;POKEY area
-.include  "atari_pokey.inc"
-
-;-------------------------------------------------------------------------
-; ANTIC Address Equates
-;-------------------------------------------------------------------------
-
-ANTIC     = $D400         ;ANTIC area
-.include  "atari_antic.inc"
-
-; PBI RAM Address Equates
-
-PBIRAM  = $D600         ;##rev2## parallel bus interface RAM area
-
-; Parallel Device Address Equates
-
-PDID1   = $D803         ;##rev2## parallel device ID 1
-PDIDV   = $D805         ;##rev2## parallel device I/O vector
-PDIRQV  = $D808         ;##rev2## parallel device IRQ vector
-PDID2   = $D80B         ;##rev2## parallel device ID 2
-PDVV    = $D80D         ;##rev2## parallel device vector table
-
-;-------------------------------------------------------------------------
-; PIA Address Equates
-;-------------------------------------------------------------------------
-
-PIA     = $D300         ;PIA area
-
-PORTA   = $D300         ;port A direction register or jacks one/two
-PORTB   = $D301         ;port B direction register or memory management
-
-PACTL   = $D302         ;port A control
-PBCTL   = $D303         ;port B control
-
-;-------------------------------------------------------------------------
-; Floating Point Package Address Equates
-;-------------------------------------------------------------------------
-
-AFP     = $D800         ;convert ASCII to floating point
-FASC    = $D8E6         ;convert floating point to ASCII
-IFP     = $D9AA         ;convert integer to floating point
-FPI     = $D9D2         ;convert floating point to integer
-ZFR0    = $DA44         ;zero FR0
-ZF1     = $DA46         ;zero floating point number
-FSUB    = $DA60         ;subtract floating point numbers
-FADD    = $DA66         ;add floating point numbers
-FMUL    = $DADB         ;multiply floating point numbers
-FDIV    = $DB28         ;divide floating point numbers
-PLYEVL  = $DD40         ;evaluate floating point polynomial
-FLD0R   = $DD89         ;load floating point number
-FLD0P   = $DD8D         ;load floating point number
-FLD1R   = $DD98         ;load floating point number
-PLD1P   = $DD9C         ;load floating point number
-FST0R   = $DDA7         ;store floating point number
-FST0P   = $DDAB         ;store floating point number
-FMOVE   = $DDB6         ;move floating point number
-LOG     = $DECD         ;calculate floating point logarithm
-LOG10   = $DED1         ;calculate floating point base 10 logarithm
-EXP     = $DDC0         ;calculate floating point exponential
-EXP10   = $DDCC         ;calculate floating point base 10 exponential
-
-;-------------------------------------------------------------------------
-; Device Handler Vector Table Address Equates
-;-------------------------------------------------------------------------
-
-EDITRV  = $E400         ;editor handler vector table
-SCRENV  = $E410         ;screen handler vector table
-KEYBDV  = $E420         ;keyboard handler vector table
-PRINTV  = $E430         ;printer handler vector table
-CASETV  = $E440         ;cassette handler vector table
-
-;-------------------------------------------------------------------------
-; Jump Vector Address Equates
-;-------------------------------------------------------------------------
-
-DISKIV  = $E450         ;vector to initialize DIO
-DSKINV  = $E453         ;vector to DIO
-.ifdef __ATARIXL__
-.ifndef SHRAM_HANDLERS
-.import CIO_handler, SIO_handler, SETVBV_handler
-.endif
-.define CIOV    CIO_handler
-.define SIOV    SIO_handler
-.define SETVBV  SETVBV_handler
-CIOV_org    = $E456     ;vector to CIO
-SIOV_org    = $E459     ;vector to SIO
-SETVBV_org  = $E45C     ;vector to set VBLANK parameters
-.else
-CIOV    = $E456         ;vector to CIO
-SIOV    = $E459         ;vector to SIO
-SETVBV  = $E45C         ;vector to set VBLANK parameters
-.endif
-SYSVBV  = $E45F         ;vector to process immediate VBLANK
-XITVBV  = $E462         ;vector to process deferred VBLANK
-SIOINV  = $E465         ;vector to initialize SIO
-SENDEV  = $E468         ;vector to enable SEND
-INTINV  = $E46B         ;vector to initialize interrupt handler
-CIOINV  = $E46E         ;vector to initialize CIO
-BLKBDV  = $E471         ;vector to power-up display
-WARMSV  = $E474         ;vector to warmstart
-COLDSV  = $E477         ;vector to coldstart
-RBLOKV  = $E47A         ;vector to read cassette block
-CSOPIV  = $E47D         ;vector to open cassette for input
-VCTABL  = $E480         ;RAM vector initial value table
-PUPDIV  = $E480         ;##rev2## vector to power-up display
-SLFTSV  = $E483         ;##rev2## vector to self-test
-PHENTV  = $E486         ;##rev2## vector to enter peripheral handler
-PHUNLV  = $E489         ;##rev2## vector to unlink peripheral handler
-PHINIV  = $E48C         ;##rev2## vector to initialize peripheral handler
-GPDVV   = $E48F         ;##rev2## generic parallel device handler vector
-
-; NOTE: OS rom self-test labels are not included in this file
-
-;-------------------------------------------------------------------------
-; Some misc. stuff from the 400/800 rev.B source
-;-------------------------------------------------------------------------
-
-; THE FOLLOWING ARE IN BASIC CARTRIDGE:
-SIN     = $BD81         ;FR0 <- SIN (FR0) DEGFLG (0=RAD,6=DEG) CARRY
-COS     = $BD73         ;FR0 <- COS (FR0) CARRY
-ATAN    = $BE43         ;FR0 <- ATAN(FR0) CARRY
-SQR     = $BEB1         ;FR0 <- ROOT(FR0) CARRY
-
-RADON   = 0             ;INDICATES RADIANS
-DEGON   = 6             ;INDICATES DEGREES
-
-ASCZER  = '0'           ;ASCII ZERO
-COLON   = $3A           ;ASCII COLON 
-CR      = $9B           ;SYSTEM EOL (CARRIAGE RETURN)
-
-;-------------------------------------------------------------------------
-; 6502
-;-------------------------------------------------------------------------
-
-NMIVEC  = $FFFA
-RESVEC  = $FFFC
-IRQVEC  = $FFFE
-
-;-------------------------------------------------------------------------
-; BASIC
-;-------------------------------------------------------------------------
-
-LOMEM   = $80           ;2-byte low memory pointer
-VNTP    = $82           ;2-byte variable name table address
-VNTD    = $84           ;2-byte variable name table end + 1
-VVTP    = $86           ;2-byte variable value table
-STMTAB  = $88           ;2-byte statement table address
-STMCUR  = $8A           ;2-byte current statement pointer
-STARP   = $8C           ;2-byte string and array table pointer
-RUNSTK  = $8E           ;2-byte runtime stack address
-BMEMTOP = $90           ;2-byte top of memory pointer
-STOPLN  = $BA           ;2-byte stopped line number
-ERRSAVE = $C3           ;1-byte error code
-PTABW   = $C9           ;1-byte tab width
-
-;-------------------------------------------------------------------------
-; ATASCII CHARACTER DEFS
-;-------------------------------------------------------------------------
-
-ATCLR   = $7D           ;CLEAR SCREEN CHARACTER
-ATRUB   = $7E           ;BACK SPACE (RUBOUT)
-ATTAB   = $7F           ;TAB
-ATEOL   = $9B           ;END-OF-LINE
-ATDELL  = $9C           ;delete line
-ATINSL  = $9D           ;insert line
-ATCTAB  = $9E           ;clear TAB
-ATSTAB  = $9F           ;set TAB
-ATBEL   = $FD           ;CONSOLE BELL
-ATDEL   = $FE           ;delete char.
-ATINS   = $FF           ;insert char.
-ATURW   = $1C           ;UP-ARROW
-ATDRW   = $1D           ;DOWN-ARROW
-ATLRW   = $1E           ;LEFT-ARROW
-ATRRW   = $1F           ;RIGHT-ARROW
-ATESC   = $1B           ;ESCAPE
-
-;-------------------------------------------------------------------------
-; OFFSETS INTO SECTSIZETAB (DIO functions)
-;-------------------------------------------------------------------------
-
-sst_flag     = 0        ; length 1
-sst_sectsize = 1        ;        2
-sst_driveno  = 3        ;        1  (drive #)
-sst_size     = 4        ; size of one entry
-                        ; if changed, adapt diopncls.s
-
-;-------------------------------------------------------------------------
-; OFFSETS INTO dio_phys_pos
-;-------------------------------------------------------------------------
-
-diopp_head   = 0        ; head
-diopp_track  = 1        ; track / cylinder
-diopp_sector = 3        ; sector
-diopp_size   = 5        ; size of structure
-
-;-------------------------------------------------------------------------
-; VALUES for dos_type
-;-------------------------------------------------------------------------
-
-ATARIDOS     = 0
-SPARTADOS    = 1
-OSADOS       = 2        ; OS/A+
-MYDOS        = 3
-XDOS         = 4
-NODOS        = 255
-
-;-------------------------------------------------------------------------
-; End of atari.inc
-;-------------------------------------------------------------------------
diff --git a/asminc/atari.mac b/asminc/atari.mac
deleted file mode 100644 (file)
index 8e76888..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-; Convert characters to screen codes
-                                                              
-; Helper macro that converts and outputs one character
-.macro _scrcode char
-        .if (char >= 0) .and (char <= 31)
-                .byte   (char + 64)
-        .elseif (char >= 32) .and (char <= 95)
-                .byte   (char - 32)
-        .elseif (char >= 96) .and (char <= 127)
-                .byte   char
-        .elseif (char >= 128) .and (char <= 159)
-                .byte   (char + 64)
-        .elseif (char >= 160) .and (char <= 223)
-                .byte   (char - 32)
-        .elseif (char >= 224) .and (char <= 255)
-                .byte   char
-        .else
-                .error  "scrcode: Character constant out of range"
-        .endif
-.endmacro
-
-.macro  scrcode arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
-
-        ; Bail out if next argument is empty
-        .if     .blank (arg1)
-                .exitmacro
-        .endif
-
-        ; Check for a string
-        .if     .match ({arg1}, "")
-
-                ; Walk over all string chars
-                .repeat .strlen (arg1), i
-                        _scrcode        {.strat (arg1, i)}
-                .endrepeat
-
-        ; Check for a number
-        .elseif .match (.left (1, {arg1}), 0)
-
-                ; Just output the number
-                _scrcode        arg1
-
-        ; Check for a character
-        .elseif .match (.left (1, {arg1}), 'a')
-
-                ; Just output the character
-                _scrcode        arg1
-
-        ; Anything else is an error
-        .else
-
-                .error  "scrcode: invalid argument type"
-
-        .endif
-
-        ; Call the macro recursively with the remaining args
-        scrcode arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
-.endmacro
-
diff --git a/asminc/atari5200.inc b/asminc/atari5200.inc
deleted file mode 100644 (file)
index b67c9a8..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-;-------------------------------------------------------------------------
-; Atari 5200 System Equates
-; by Christian Groessler <chris@groessler.org>
-; taken from EQUATES.INC from Atari Inc.
-;-------------------------------------------------------------------------
-
-;-------------------------------------------------------------------------
-; ATASCII CHARACTER DEFS
-;-------------------------------------------------------------------------
-ATEOL   = $9B           ;END-OF-LINE, used by CONIO
-
-
-;-------------------------------------------------------------------------
-; Zero Page
-;-------------------------------------------------------------------------
-
-POKMSK  =  $00   ;Mask for Pokey IRQ enable
-RTCLOK  =  $01   ;60 hz. clock
-JUMP    =  $01   
-CRITIC  =  $03   ;Critical section
-ATRACT  =  $04   ;Attract Mode 
-
-SDLSTL  =  $05   ;DLISTL Shadow
-SDLSTH  =  $06   ;DLISTH  "
-SDMCTL  =  $07   ;DMACTL  "
-
-PCOLR0  =  $08   ;COLPM0 Shadow
-PCOLR1  =  $09   ;COLPM1  "
-PCOLR2  =  $0A   ;COLPM2  "
-PCOLR3  =  $0B   ;COLPM3  "
-
-COLOR0  =  $0C   ;COLPF0 Shadow
-COLOR1  =  $0D   ;COLPF1  "
-COLOR2  =  $0E   ;COLPF2  "
-COLOR3  =  $0F   ;COLPF3  "
-COLOR4  =  $10   ;COLBK   "
-
-PADDL0  =  $11   ;POT0 Shadow
-PADDL1  =  $12   ;POT1  "
-PADDL2  =  $13   ;POT2  "
-PADDL3  =  $14   ;POT3  "
-PADDL4  =  $15   ;POT4  "
-PADDL5  =  $16   ;POT5  "
-PADDL6  =  $17   ;POT6  "
-PADDL7  =  $18   ;POT7  "
-
-; cc65 runtime zero page variables
-
-ROWCRS_5200     =       $19
-COLCRS_5200     =       $1A
-SAVMSC          =       $1B             ; pointer to screen memory (conio)
-
-;-------------------------------------------------------------------------
-; Page #2
-;-------------------------------------------------------------------------
-
-;Interrupt Vectors
-                 
-VIMIRQ  =  $0200   ;Immediate IRQ    
-                      ;Preset $FC03 (SYSIRQ)
-VVBLKI  =  $0202   ;Vblank immediate
-                      ;Preset $FCB8 (SYSVBL)
-VVBLKD  =  $0204   ;Vblank deferred
-                      ;Preset $FCB2 (XITVBL)
-VDSLST  =  $0206   ;Display List 
-                      ;Preset $FEA1 (OSDLI)
-VKYBDI  =  $0208   ;Keyboard immediate
-                      ;Preset $FD02 (SYSKBD)
-VKYBDF  =  $020A   ;Deferred Keyboard
-                      ;Preset $FCB2 (XITVBL)
-VTRIGR  =  $020C   ;Soft Trigger   
-VBRKOP  =  $020E   ;BRK Opcode
-VSERIN  =  $0210   ;Serial in Ready
-VSEROR  =  $0212   ;Serial Out Ready
-VSEROC  =  $0214   ;Serial Output complete
-VTIMR1  =  $0216   ;Pokey Timer 1
-VTIMR2  =  $0218   ;Pokey Timer 2
-VTIMR4  =  $021A   ;Pokey Timer 4
-
-
-
-;-------------------------------------------------------------------------
-; CTIA/GTIA Address Equates
-;-------------------------------------------------------------------------
-
-GTIA    = $C000         ;CTIA/GTIA area
-.include "atari_gtia.inc"
-
-;-------------------------------------------------------------------------
-; ANTIC Address Equates
-;-------------------------------------------------------------------------
-
-ANTIC     = $D400         ;ANTIC area
-.include  "atari_antic.inc"
-
-;-------------------------------------------------------------------------
-; POKEY Address Equates
-;-------------------------------------------------------------------------
-
-POKEY     = $E800         ;POKEY area
-.include  "atari_pokey.inc"
-
-
-;-------------------------------------------------------------------------
-; Cartridge Parameters
-;-------------------------------------------------------------------------
-
-CARTNM  =  $BFE8   ;Cartridge Name Area
-COPYD   =  $BFFC   ;Copyright Decade in Cart
-COPYR   =  $BFFD   ;Copyright Year in Cart
-                      ; $FF=Diagnostic Cart
-GOCART  =  $BFFE   ;Cartridge Start Vector
-
-
-CHRORG  =  $F800   ;Character Generator Base
diff --git a/asminc/atari_antic.inc b/asminc/atari_antic.inc
deleted file mode 100644 (file)
index 1eb4c87..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-;-------------------------------------------------------------------------
-; ANTIC Address Equates
-;-------------------------------------------------------------------------
-
-; Read Addresses
-
-VCOUNT  = ANTIC + $0B         ;vertical line counter
-PENH    = ANTIC + $0C         ;light pen horizontal position
-PENV    = ANTIC + $0D         ;light pen vertical position
-NMIST   = ANTIC + $0F         ;NMI interrupt status
-
-; Write Addresses
-
-DMACTL  = ANTIC + $00         ;DMA control
-CHACTL  = ANTIC + $01         ;character control
-DLISTL  = ANTIC + $02         ;low display list address
-DLISTH  = ANTIC + $03         ;high display list address
-HSCROL  = ANTIC + $04         ;horizontal scroll
-VSCROL  = ANTIC + $05         ;vertical scroll
-PMBASE  = ANTIC + $07         ;player-missile base address
-CHBASE  = ANTIC + $09         ;character base address
-WSYNC   = ANTIC + $0A         ;wait for HBLANK synchronization
-NMIEN   = ANTIC + $0E         ;NMI enable
-NMIRES  = ANTIC + $0F         ;NMI interrupt reset
-
-
-;-------------------------------------------------------------------------
-; Antic opcodes
-;-------------------------------------------------------------------------
-
-; usage example:
-;
-; ScreenDL:
-; .byte DL_BLK8
-; .byte DL_BLK8
-; .byte DL_CHR40x8x1 + DL_LMS + DL_DLI
-; .word ScreenAlignment
-; .byte DL_BLK1 + DL_DLI
-; .byte DL_MAP320x1x1 + DL_LMS
-; .word Screen
-;
-; .repeat 99
-; .byte DL_MAP320x1x1
-; .endrepeat
-; .byte DL_MAP320x1x1 + DL_LMS
-; .word Screen + 40 * 100       ; 100 lines a 40 byte, 'Screen' has to be aligned correctly!
-; .repeat 92
-; .byte DL_MAP320x1x1
-; .endrepeat
-;
-; .byte DL_JVB
-
-; absolute instructions (non mode lines)
-
-DL_JMP  = 1
-DL_JVB  = 65
-
-DL_BLK1  = 0
-DL_BLK2  = 16
-DL_BLK3  = 32
-DL_BLK4  = 48
-DL_BLK5  = 64
-DL_BLK6  = 80
-DL_BLK7  = 96
-DL_BLK8  = 112
-
-; absolute instructions (mode lines)
-
-DL_CHR40x8x1  = 2               ; monochrome, 40 character & 8 scanlines per mode line (GR. 0)
-DL_CHR40x10x1 = 3               ; monochrome, 40 character & 10 scanlines per mode line
-DL_CHR40x8x4  = 4               ; colour, 40 character & 8 scanlines per mode line (GR. 12)
-DL_CHR40x16x4 = 5               ; colour, 40 character & 16 scanlines per mode line (GR. 13)
-DL_CHR20x8x2  = 6               ; colour (duochrome per character), 20 character & 8 scanlines per mode line (GR. 1)
-DL_CHR20x16x2 = 7               ; colour (duochrome per character), 20 character & 16 scanlines per mode line (GR. 2)
-
-DL_MAP40x8x4  = 8               ; colour, 40 pixel & 8 scanlines per mode line (GR. 3)
-DL_MAP80x4x2  = 9               ; 'duochrome', 80 pixel & 4 scanlines per mode line (GR.4) 
-DL_MAP80x4x4  = 10              ; colour, 80 pixel & 4 scanlines per mode line (GR.5) 
-DL_MAP160x2x2 = 11              ; 'duochrome', 160 pixel & 2 scanlines per mode line (GR.6) 
-DL_MAP160x1x2 = 12              ; 'duochrome', 160 pixel & 1 scanline per mode line (GR.14) 
-DL_MAP160x2x4 = 13              ; 4 colours, 160 pixel & 2 scanlines per mode line (GR.7) 
-DL_MAP160x1x4 = 14              ; 4 colours, 160 pixel & 1 scanline per mode line (GR.15) 
-DL_MAP320x1x1 = 15              ; monochrome, 320 pixel & 1 scanline per mode line (GR.8) 
-
-; modifiers on mode lines...
-
-DL_HSCROL = 16
-DL_VSCROL = 32
-DL_LMS    = 64
-
-; general modifier...
-
-DL_DLI    = 128
diff --git a/asminc/atari_gtia.inc b/asminc/atari_gtia.inc
deleted file mode 100644 (file)
index f505832..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-;-------------------------------------------------------------------------
-; CTIA/GTIA Address Equates
-;-------------------------------------------------------------------------
-
-; Read/Write Addresses
-
-CONSOL  = GTIA + $1F         ;console switches and speaker control
-
-; Read Addresses
-
-M0PF    = GTIA + $00         ;missile 0 and playfield collision
-M1PF    = GTIA + $01         ;missile 1 and playfield collision
-M2PF    = GTIA + $02         ;missile 2 and playfield collision
-M3PF    = GTIA + $03         ;missile 3 and playfield collision
-
-P0PF    = GTIA + $04         ;player 0 and playfield collision
-P1PF    = GTIA + $05         ;player 1 and playfield collision
-P2PF    = GTIA + $06         ;player 2 and playfield collision
-P3PF    = GTIA + $07         ;player 3 and playfield collision
-
-M0PL    = GTIA + $08         ;missile 0 and player collision
-M1PL    = GTIA + $09         ;missile 1 and player collision
-M2PL    = GTIA + $0A         ;missile 2 and player collision
-M3PL    = GTIA + $0B         ;missile 3 and player collision
-
-P0PL    = GTIA + $0C         ;player 0 and player collision
-P1PL    = GTIA + $0D         ;player 1 and player collision
-P2PL    = GTIA + $0E         ;player 2 and player collision
-P3PL    = GTIA + $0F         ;player 3 and player collision
-
-TRIG0   = GTIA + $10         ;joystick trigger 0
-TRIG1   = GTIA + $11         ;joystick trigger 1
-
-TRIG2   = GTIA + $12         ;cartridge interlock
-TRIG3   = GTIA + $13         ;ACMI module interlock
-
-PAL     = GTIA + $14         ;##rev2## PAL/NTSC indicator
-
-; Write Addresses
-
-HPOSP0  = GTIA + $00         ;player 0 horizontal position
-HPOSP1  = GTIA + $01         ;player 1 horizontal position
-HPOSP2  = GTIA + $02         ;player 2 horizontal position
-HPOSP3  = GTIA + $03         ;player 3 horizontal position
-
-HPOSM0  = GTIA + $04         ;missile 0 horizontal position
-HPOSM1  = GTIA + $05         ;missile 1 horizontal position
-HPOSM2  = GTIA + $06         ;missile 2 horizontal position
-HPOSM3  = GTIA + $07         ;missile 3 horizontal position
-
-SIZEP0  = GTIA + $08         ;player 0 size
-SIZEP1  = GTIA + $09         ;player 1 size
-SIZEP2  = GTIA + $0A         ;player 2 size
-SIZEP3  = GTIA + $0B         ;player 3 size
-
-SIZEM   = GTIA + $0C         ;missile sizes
-
-GRAFP0  = GTIA + $0D         ;player 0 graphics
-GRAFP1  = GTIA + $0E         ;player 1 graphics
-GRAFP2  = GTIA + $0F         ;player 2 graphics
-GRAFP3  = GTIA + $10         ;player 3 graphics
-
-GRAFM   = GTIA + $11         ;missile graphics
-
-COLPM0  = GTIA + $12         ;player-missile 0 color/luminance
-COLPM1  = GTIA + $13         ;player-missile 1 color/luminance
-COLPM2  = GTIA + $14         ;player-missile 2 color/luminance
-COLPM3  = GTIA + $15         ;player-missile 3 color/luminance
-
-COLPF0  = GTIA + $16         ;playfield 0 color/luminance
-COLPF1  = GTIA + $17         ;playfield 1 color/luminance
-COLPF2  = GTIA + $18         ;playfield 2 color/luminance
-COLPF3  = GTIA + $19         ;playfield 3 color/luminance
-
-COLBK   = GTIA + $1A         ;background color/luminance
-
-PRIOR   = GTIA + $1B         ;priority select
-VDELAY  = GTIA + $1C         ;vertical delay
-GRACTL  = GTIA + $1D         ;graphic control
-HITCLR  = GTIA + $1E         ;collision clear
-
diff --git a/asminc/atari_pokey.inc b/asminc/atari_pokey.inc
deleted file mode 100644 (file)
index 99d192f..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-;-------------------------------------------------------------------------
-; POKEY Address Equates
-;-------------------------------------------------------------------------
-
-; Read Addresses
-
-POT0    = POKEY + $00         ;potentiometer 0
-POT1    = POKEY + $01         ;potentiometer 1
-POT2    = POKEY + $02         ;potentiometer 2
-POT3    = POKEY + $03         ;potentiometer 3
-POT4    = POKEY + $04         ;potentiometer 4
-POT5    = POKEY + $05         ;potentiometer 5
-POT6    = POKEY + $06         ;potentiometer 6
-POT7    = POKEY + $07         ;potentiometer 7
-
-ALLPOT  = POKEY + $08         ;potentiometer port status
-KBCODE  = POKEY + $09         ;keyboard code
-RANDOM  = POKEY + $0A         ;random number generator
-SERIN   = POKEY + $0D         ;serial port input
-IRQST   = POKEY + $0E         ;IRQ interrupt status
-SKSTAT  = POKEY + $0F         ;serial port and keyboard status
-
-; Write Addresses
-
-AUDF1   = POKEY + $00         ;channel 1 audio frequency
-AUDC1   = POKEY + $01         ;channel 1 audio control
-
-AUDF2   = POKEY + $02         ;channel 2 audio frequency
-AUDC2   = POKEY + $03         ;channel 2 audio control
-
-AUDF3   = POKEY + $04         ;channel 3 audio frequency
-AUDC3   = POKEY + $05         ;channel 3 audio control
-
-AUDF4   = POKEY + $06         ;channel 4 audio frequency
-AUDC4   = POKEY + $07         ;channel 4 audio control
-
-AUDCTL  = POKEY + $08         ;audio control
-STIMER  = POKEY + $09         ;start timers
-SKRES   = POKEY + $0A         ;reset SKSTAT status
-POTGO   = POKEY + $0B         ;start potentiometer scan sequence
-SEROUT  = POKEY + $0D         ;serial port output
-IRQEN   = POKEY + $0E         ;IRQ interrupt enable
-SKCTL   = POKEY + $0F         ;serial port and keyboard control
-
diff --git a/asminc/atmos.inc b/asminc/atmos.inc
deleted file mode 100644 (file)
index 4c3c442..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-;
-; Oric Atmos definitions
-; BASIC 1.1 addresses
-;
-
-
-; ---------------------------------------------------------------------------
-; Constants
-
-SCREEN_XSIZE    = 40            ; screen columns
-SCREEN_YSIZE    = 28            ; screen rows
-
-FUNCTKEY        = $A5
-
-FNAME_LEN       = 16            ; maximum length of file-name
-
-
-; ---------------------------------------------------------------------------
-; Zero page
-
-SCRPTR          := $12
-BASIC_BUF       := $35
-CHARGOT         := $E8
-TXTPTR          := $E9
-
-
-; ---------------------------------------------------------------------------
-; Low memory
-
-MODEKEY         := $0209
-CAPSLOCK        := $020C        ; $7F = not locked, $FF = locked
-PATTERN         := $0213
-IRQVec          := $0245        ; "fast" interrupt vector
-JOINFLAG        := $025A        ; 0 = don't joiu, $4A = join BASIC programs
-VERIFYFLAG      := $025B        ; 0 = load, 1 = verify
-CURS_Y          := $0268
-CURS_X          := $0269
-STATUS          := $026A
-BACKGRND        := $026B
-FOREGRND        := $026C
-TIMER3          := $0276
-CFILE_NAME      := $027F
-CFOUND_NAME     := $0293
-FILESTART       := $02A9
-FILEEND         := $02AB
-AUTORUN         := $02AD        ; $00 = only load, $C7 = autorun
-LANGFLAG        := $02AE        ; $00 = BASIC, $80 = machine code
-LOADERR         := $02B1
-KEYBUF          := $02DF
-PARMERR         := $02E0
-PARAM1          := $02E1        ; & $02E2
-PARAM2          := $02E3        ; & $02E4
-PARAM3          := $02E5        ; & $02E6
-BANGVEC         := $02F5
-
-
-; ---------------------------------------------------------------------------
-; I/O locations
-
-; 6522
-.struct VIA                     ; Versatile Interface Adapter
-        .res    $0300
-PRB     .byte                   ; Port Register B
-PRA     .byte                   ; Port Register A
-DDRB    .byte                   ; Data Direction Register B
-DDRA    .byte                   ; Data Direction Register A
-T1      .word                   ; Timer 1
-T1L     .word                   ; Timer 1 Latch
-T2      .word                   ; Timer 2
-SR      .byte                   ; Shift Register
-ACR     .byte                   ; Auxiliary Control Register
-PCR     .byte                   ; Peripheral Control Register
-IFR     .byte                   ; Interrupt Flags Register
-IER     .byte                   ; Interrupt Enable Register
-PRA2    .byte                   ; Port Register A without handshaking
-.endstruct
-
-; 6551
-.struct ACIA                    ; Asynchronous Communications Interface Adapter
-        .res    $031C
-DATA    .byte
-STATUS  .byte
-CMD     .byte                   ; Command register
-CTRL    .byte                   ; Control register
-.endstruct
-
-SCREEN          := $BB80
-
-
-; ---------------------------------------------------------------------------
-; ROM entries
-
-GETLINE         := $C592
-TEXT            := $EC21
-HIRES           := $EC33
-CURSET          := $F0C8
-CURMOV          := $F0FD
-DRAW            := $F110
-CHAR            := $F12D
-POINT           := $F1C8
-PAPER           := $F204
-INK             := $F210
-PRINT           := $F77C
-
-; Sound Effects
-PING            := $FA9F
-SHOOT           := $FAB5
-EXPLODE         := $FACB
-ZAP             := $FAE1
-TICK            := $FB14
-TOCK            := $FB2A
diff --git a/asminc/c128.inc b/asminc/c128.inc
deleted file mode 100644 (file)
index 6e30782..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-;
-; C128 generic definitions. Stolen from Elite128
-;
-
-
-; ---------------------------------------------------------------------------
-; Zero page, Commodore stuff
-
-TXTPTR          := $3D          ; Pointer into BASIC source code
-TIME            := $A0          ; 60HZ clock
-FNAM_LEN        := $B7          ; Length of filename
-SECADR          := $B9          ; Secondary address
-DEVNUM          := $BA          ; Device number
-FNAM            := $BB          ; Address of filename
-FNAM_BANK       := $C7          ; Bank for filename
-KEY_COUNT       := $D0          ; Number of keys in input buffer
-FKEY_COUNT      := $D1          ; Characters for function key
-MODE            := $D7          ; 40/80 column mode flag
-CURS_X          := $EC          ; Cursor column
-CURS_Y          := $EB          ; Cursor row
-SCREEN_PTR      := $E0          ; Pointer to current char in text screen
-CRAM_PTR        := $E2          ; Pointer to current char in color RAM
-
-CHARCOLOR       := $F1
-RVS             := $F3          ; Reverse output flag
-SCROLL          := $F8          ; Disable scrolling flag
-
-BASIC_BUF       := $200         ; Location of command-line
-BASIC_BUF_LEN   = 162           ; Maximum length of command-line
-
-FETCH           := $2A2         ; Fetch subroutine in RAM
-FETVEC          := $2AA         ; Vector patch location for FETCH
-STASH           := $2AF         ; Stash routine in RAM
-STAVEC          := $2B9         ; Vector patch location for STASH
-IRQInd          := $2FD         ; JMP $0000 -- used as indirect IRQ vector
-PALFLAG         := $A03         ; $FF=PAL, $00=NTSC
-INIT_STATUS     := $A04         ; Flags: Reset/Restore initiation status
-FKEY_LEN        := $1000        ; Function key lengths
-FKEY_TEXT       := $100A        ; Function key texts
-
-; ---------------------------------------------------------------------------
-; Kernal routines
-
-; Direct entries
-CURS_SET        := $CD57
-CURS_ON         := $CD6F
-CURS_OFF        := $CD9F
-CLRSCR          := $C142
-KBDREAD         := $C006
-NEWLINE         := $C363
-PRINT           := $C322
-NMIEXIT         := $FF33
-INDFET          := $FF74
-
-; ---------------------------------------------------------------------------
-; Vectors
-
-IRQVec          := $0314
-BRKVec          := $0316
-NMIVec          := $0318
-KeyStoreVec     := $033C
-
-; ---------------------------------------------------------------------------
-; I/O: VIC
-
-VIC             := $D000
-VIC_SPR0_X      := $D000
-VIC_SPR0_Y      := $D001
-VIC_SPR1_X      := $D002
-VIC_SPR1_Y      := $D003
-VIC_SPR2_X      := $D004
-VIC_SPR2_Y      := $D005
-VIC_SPR3_X      := $D006
-VIC_SPR3_Y      := $D007
-VIC_SPR4_X      := $D008
-VIC_SPR4_Y      := $D009
-VIC_SPR5_X      := $D00A
-VIC_SPR5_Y      := $D00B
-VIC_SPR6_X      := $D00C
-VIC_SPR6_Y      := $D00D
-VIC_SPR7_X      := $D00E
-VIC_SPR7_Y      := $D00F
-VIC_SPR_HI_X    := $D010
-VIC_SPR_ENA     := $D015
-VIC_SPR_EXP_Y   := $D017
-VIC_SPR_EXP_X   := $D01D
-VIC_SPR_MCOLOR  := $D01C
-VIC_SPR_BG_PRIO := $D01B
-
-VIC_SPR_MCOLOR0 := $D025
-VIC_SPR_MCOLOR1 := $D026
-
-VIC_SPR0_COLOR  := $D027
-VIC_SPR1_COLOR  := $D028
-VIC_SPR2_COLOR  := $D029
-VIC_SPR3_COLOR  := $D02A
-VIC_SPR4_COLOR  := $D02B
-VIC_SPR5_COLOR  := $D02C
-VIC_SPR6_COLOR  := $D02D
-VIC_SPR7_COLOR  := $D02E
-
-VIC_CTRL1       := $D011
-VIC_CTRL2       := $D016
-
-VIC_HLINE       := $D012
-
-VIC_LPEN_X      := $D013
-VIC_LPEN_Y      := $D014
-
-VIC_VIDEO_ADR   := $D018
-
-VIC_IRR         := $D019        ; Interrupt request register
-VIC_IMR         := $D01A        ; Interrupt mask register
-
-VIC_BORDERCOLOR := $D020
-VIC_BG_COLOR0   := $D021
-VIC_BG_COLOR1   := $D022
-VIC_BG_COLOR2   := $D023
-VIC_BG_COLOR3   := $D024
-
-; 128 stuff:
-VIC_KBD_128     := $D02F        ; Extended kbd bits (visible in 64 mode)
-VIC_CLK_128     := $D030        ; Clock rate register (visible in 64 mode)
-
-
-; ---------------------------------------------------------------------------
-; I/O: SID
-
-SID             := $D400
-SID_S1Lo        := $D400
-SID_S1Hi        := $D401
-SID_PB1Lo       := $D402
-SID_PB1Hi       := $D403
-SID_Ctl1        := $D404
-SID_AD1         := $D405
-SID_SUR1        := $D406
-
-SID_S2Lo        := $D407
-SID_S2Hi        := $D408
-SID_PB2Lo       := $D409
-SID_PB2Hi       := $D40A
-SID_Ctl2        := $D40B
-SID_AD2         := $D40C
-SID_SUR2        := $D40D
-
-SID_S3Lo        := $D40E
-SID_S3Hi        := $D40F
-SID_PB3Lo       := $D410
-SID_PB3Hi       := $D411
-SID_Ctl3        := $D412
-SID_AD3         := $D413
-SID_SUR3        := $D414
-
-SID_FltLo       := $D415
-SID_FltHi       := $D416
-SID_FltCtl      := $D417
-SID_Amp         := $D418
-SID_ADConv1     := $D419
-SID_ADConv2     := $D41A
-SID_Noise       := $D41B
-SID_Read3       := $D41C
-
-; ---------------------------------------------------------------------------
-; I/O: VDC (128 only)
-
-VDC_INDEX       := $D600
-VDC_DATA        := $D601
-
-; ---------------------------------------------------------------------------
-; I/O: CIAs
-
-CIA1            := $DC00
-CIA1_PRA        := $DC00
-CIA1_PRB        := $DC01
-CIA1_DDRA       := $DC02
-CIA1_DDRB       := $DC03
-CIA1_TOD10      := $DC08
-CIA1_TODSEC     := $DC09
-CIA1_TODMIN     := $DC0A
-CIA1_TODHR      := $DC0B
-CIA1_ICR        := $DC0D
-CIA1_CRA        := $DC0E
-CIA1_CRB        := $DC0F
-
-CIA2            := $DD00
-CIA2_PRA        := $DD00
-CIA2_PRB        := $DD01
-CIA2_DDRA       := $DD02
-CIA2_DDRB       := $DD03
-CIA2_TOD10      := $DD08
-CIA2_TODSEC     := $DD09
-CIA2_TODMIN     := $DD0A
-CIA2_TODHR      := $DD0B
-CIA2_ICR        := $DD0D
-CIA2_CRA        := $DD0E
-CIA2_CRB        := $DD0F
-
-; ---------------------------------------------------------------------------
-; I/O: MMU
-
-MMU_CR          := $FF00
-MMU_CFG_CC65    := %00001110    ; Bank 0 with kernal ROM
-MMU_CFG_RAM0    := %00111111    ; Bank 0 full RAM
-MMU_CFG_RAM1    := %01111111    ; Bank 1 full RAM
-MMU_CFG_RAM2    := %10111111    ; Bank 2 full RAM
-MMU_CFG_RAM3    := %11111111    ; Bank 3 full RAM
-
-; ---------------------------------------------------------------------------
-; Super CPU
-
-SCPU_VIC_Bank1  := $D075
-SCPU_Slow       := $D07A
-SCPU_Fast       := $D07B
-SCPU_EnableRegs := $D07E
-SCPU_DisableRegs:= $D07F
-SCPU_Detect     := $D0BC
diff --git a/asminc/c16.inc b/asminc/c16.inc
deleted file mode 100644 (file)
index d99a3c7..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-;
-; C16 generic definitions.
-;
-; The C16 and Plus/4 are identical, so just include the Plus/4 include file.
-
-
-.include        "plus4.inc"
-
-
diff --git a/asminc/c64.inc b/asminc/c64.inc
deleted file mode 100644 (file)
index f450fcc..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-;
-; C64 generic definitions. Stolen from Elite128
-;
-
-
-; ---------------------------------------------------------------------------
-; Zero page, Commodore stuff
-
-TXTPTR          := $7A          ; Pointer into BASIC source code
-TIME            := $A0          ; 60 HZ clock
-FNAM_LEN        := $B7          ; Length of filename
-SECADR          := $B9          ; Secondary address
-DEVNUM          := $BA          ; Device number
-FNAM            := $BB          ; Pointer to filename
-KEY_COUNT       := $C6          ; Number of keys in input buffer
-RVS             := $C7          ; Reverse flag
-CURS_FLAG       := $CC          ; 1 = cursor off
-CURS_BLINK      := $CD          ; Blink counter
-CURS_CHAR       := $CE          ; Character under the cursor
-CURS_STATE      := $CF          ; Cursor blink state
-SCREEN_PTR      := $D1          ; Pointer to current char in text screen
-CURS_X          := $D3          ; Cursor column
-CURS_Y          := $D6          ; Cursor row
-CRAM_PTR        := $F3          ; Pointer to current char in color RAM
-
-BASIC_BUF       := $200         ; Location of command-line
-BASIC_BUF_LEN   = 89            ; Maximum length of command-line
-
-CHARCOLOR       := $286
-CURS_COLOR      := $287         ; Color under the cursor
-PALFLAG         := $2A6         ; $01 = PAL, $00 = NTSC
-
-
-; ---------------------------------------------------------------------------
-; Kernal routines
-
-; Direct entries
-CLRSCR          := $E544
-KBDREAD         := $E5B4
-NMIEXIT         := $FEBC
-
-; ---------------------------------------------------------------------------
-; Vector and other locations
-
-IRQVec          := $0314
-BRKVec          := $0316
-NMIVec          := $0318
-
-; ---------------------------------------------------------------------------
-; Screen size
-
-XSIZE           = 40
-YSIZE           = 25
-
-; ---------------------------------------------------------------------------
-; I/O: VIC
-
-VIC             := $D000
-VIC_SPR0_X      := $D000
-VIC_SPR0_Y      := $D001
-VIC_SPR1_X      := $D002
-VIC_SPR1_Y      := $D003
-VIC_SPR2_X      := $D004
-VIC_SPR2_Y      := $D005
-VIC_SPR3_X      := $D006
-VIC_SPR3_Y      := $D007
-VIC_SPR4_X      := $D008
-VIC_SPR4_Y      := $D009
-VIC_SPR5_X      := $D00A
-VIC_SPR5_Y      := $D00B
-VIC_SPR6_X      := $D00C
-VIC_SPR6_Y      := $D00D
-VIC_SPR7_X      := $D00E
-VIC_SPR7_Y      := $D00F
-VIC_SPR_HI_X    := $D010
-VIC_SPR_ENA     := $D015
-VIC_SPR_EXP_Y   := $D017
-VIC_SPR_EXP_X   := $D01D
-VIC_SPR_MCOLOR  := $D01C
-VIC_SPR_BG_PRIO := $D01B
-
-VIC_SPR_MCOLOR0 := $D025
-VIC_SPR_MCOLOR1 := $D026
-
-VIC_SPR0_COLOR  := $D027
-VIC_SPR1_COLOR  := $D028
-VIC_SPR2_COLOR  := $D029
-VIC_SPR3_COLOR  := $D02A
-VIC_SPR4_COLOR  := $D02B
-VIC_SPR5_COLOR  := $D02C
-VIC_SPR6_COLOR  := $D02D
-VIC_SPR7_COLOR  := $D02E
-
-VIC_CTRL1       := $D011
-VIC_CTRL2       := $D016
-
-VIC_HLINE       := $D012
-
-VIC_LPEN_X      := $D013
-VIC_LPEN_Y      := $D014
-
-VIC_VIDEO_ADR   := $D018
-
-VIC_IRR         := $D019        ; Interrupt request register
-VIC_IMR         := $D01A        ; Interrupt mask register
-
-VIC_BORDERCOLOR := $D020
-VIC_BG_COLOR0   := $D021
-VIC_BG_COLOR1   := $D022
-VIC_BG_COLOR2   := $D023
-VIC_BG_COLOR3   := $D024
-
-; 128 stuff:
-VIC_KBD_128     := $D02F        ; Extended kbd bits (visible in 64 mode)
-VIC_CLK_128     := $D030        ; Clock rate register (visible in 64 mode)
-
-
-; ---------------------------------------------------------------------------
-; I/O: SID
-
-SID             := $D400
-SID_S1Lo        := $D400
-SID_S1Hi        := $D401
-SID_PB1Lo       := $D402
-SID_PB1Hi       := $D403
-SID_Ctl1        := $D404
-SID_AD1         := $D405
-SID_SUR1        := $D406
-
-SID_S2Lo        := $D407
-SID_S2Hi        := $D408
-SID_PB2Lo       := $D409
-SID_PB2Hi       := $D40A
-SID_Ctl2        := $D40B
-SID_AD2         := $D40C
-SID_SUR2        := $D40D
-
-SID_S3Lo        := $D40E
-SID_S3Hi        := $D40F
-SID_PB3Lo       := $D410
-SID_PB3Hi       := $D411
-SID_Ctl3        := $D412
-SID_AD3         := $D413
-SID_SUR3        := $D414
-
-SID_FltLo       := $D415
-SID_FltHi       := $D416
-SID_FltCtl      := $D417
-SID_Amp         := $D418
-SID_ADConv1     := $D419
-SID_ADConv2     := $D41A
-SID_Noise       := $D41B
-SID_Read3       := $D41C
-
-; ---------------------------------------------------------------------------
-; I/O: VDC (128 only)
-
-VDC_INDEX       := $D600
-VDC_DATA        := $D601
-
-; ---------------------------------------------------------------------------
-; I/O: CIAs
-
-CIA1            := $DC00
-CIA1_PRA        := $DC00
-CIA1_PRB        := $DC01
-CIA1_DDRA       := $DC02
-CIA1_DDRB       := $DC03
-CIA1_TOD10      := $DC08
-CIA1_TODSEC     := $DC09
-CIA1_TODMIN     := $DC0A
-CIA1_TODHR      := $DC0B
-CIA1_ICR        := $DC0D
-CIA1_CRA        := $DC0E
-CIA1_CRB        := $DC0F
-
-CIA2            := $DD00
-CIA2_PRA        := $DD00
-CIA2_PRB        := $DD01
-CIA2_DDRA       := $DD02
-CIA2_DDRB       := $DD03
-CIA2_TOD10      := $DD08
-CIA2_TODSEC     := $DD09
-CIA2_TODMIN     := $DD0A
-CIA2_TODHR      := $DD0B
-CIA2_ICR        := $DD0D
-CIA2_CRA        := $DD0E
-CIA2_CRB        := $DD0F
-
-; ---------------------------------------------------------------------------
-; Super CPU
-
-SCPU_VIC_Bank1  := $D075
-SCPU_Slow       := $D07A
-SCPU_Fast       := $D07B
-SCPU_EnableRegs := $D07E
-SCPU_DisableRegs:= $D07F
-SCPU_Detect     := $D0BC
-
-
-; ---------------------------------------------------------------------------
-; Processor Port at $01
-
-LORAM           = $01           ; Enable the basic rom
-HIRAM           = $02           ; Enable the kernal rom
-IOEN            = $04           ; Enable I/O
-CASSDATA        = $08           ; Cassette data
-CASSPLAY        = $10           ; Cassette: Play
-CASSMOT         = $20           ; Cassette motor on
-TP_FAST         = $80           ; Switch Rossmoeller TurboProcess to fast mode
-
-RAMONLY         = $F8           ; (~(LORAM | HIRAM | IOEN)) & $FF
-
diff --git a/asminc/cbm.mac b/asminc/cbm.mac
deleted file mode 100644 (file)
index b2bfe59..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-; Convert characters to screen codes
-
-; Helper macro that converts and outputs one character
-.macro _scrcode char
-        .if (char < 256)
-                .byte   <(.strat ("h@dbdlhh", char >> 5) << 4) ^ char
-        .else
-                .error  "scrcode: Character constant out of range"
-        .endif
-.endmacro
-
-.macro  scrcode arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
-
-        ; Bail out if next argument is empty
-        .if     .blank ({arg1})
-                .exitmacro
-        .endif
-
-        ; Check for a string
-        .if     .match ({arg1}, "")
-
-                ; Walk over all string chars
-                .repeat .strlen (arg1), i
-                        _scrcode        {.strat (arg1, i)}
-                .endrepeat
-
-        ; Check for a number
-        .elseif .match (.left (1, {arg1}), 0)
-
-                ; Just output the number
-                _scrcode        arg1
-
-        ; Check for a character
-        .elseif .match (.left (1, {arg1}), 'a')
-
-                ; Just output the character
-                _scrcode        arg1
-
-        ; Anything else is an error
-        .else
-
-                .error  "scrcode: invalid argument type"
-
-        .endif
-
-        ; Call the macro recursively with the remaining args
-        scrcode arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
-.endmacro
-
-
diff --git a/asminc/cbm510.inc b/asminc/cbm510.inc
deleted file mode 100644 (file)
index e1a86c4..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-;
-; Zero page variables and I/O definitions for the CBM 510
-;
-; Taken from a kernal disassembly done by myself in 2000/2001.
-;
-; 2001-09-13, Ullrich von Bassewitz
-; 2014-04-02, Greg King
-
-
-;-----------------------------------------------------------------------------
-; Zeropage stuff
-
-ExecReg         := $00          ; Controls execution memory bank
-IndReg          := $01          ; Controls indirect indexed load-store bank
-
-TXTPTR          := $85          ; Far pointer into BASIC source code
-FNAM            := $90          ; Far pointer to LOAD/SAVE file-name
-FNAM_LEN        := $9D          ; Holds length of file-name
-
-; ---------------------------------------------------------------------------
-; Screen size
-
-XSIZE           = 40
-YSIZE           = 25
-
-;-----------------------------------------------------------------------------
-; I/O Definitions
-; Note:  These numbers aren't addresses.  They are offsets from the start of
-; each chip's register set.  They are used in the indirect indexed addressing
-; mode.
-
-; I/O  $d800: VIC-II
-
-VIC_SPR0_X      = $00
-VIC_SPR0_Y      = $01
-VIC_SPR1_X      = $02
-VIC_SPR1_Y      = $03
-VIC_SPR2_X      = $04
-VIC_SPR2_Y      = $05
-VIC_SPR3_X      = $06
-VIC_SPR3_Y      = $07
-VIC_SPR4_X      = $08
-VIC_SPR4_Y      = $09
-VIC_SPR5_X      = $0A
-VIC_SPR5_Y      = $0B
-VIC_SPR6_X      = $0C
-VIC_SPR6_Y      = $0D
-VIC_SPR7_X      = $0E
-VIC_SPR7_Y      = $0F
-VIC_SPR_HI_X    = $10
-VIC_SPR_ENA     = $15
-VIC_SPR_EXP_Y   = $17
-VIC_SPR_EXP_X   = $1D
-VIC_SPR_MCOLOR  = $1C
-VIC_SPR_BG_PRIO = $1B
-
-VIC_SPR_MCOLOR0 = $25
-VIC_SPR_MCOLOR1 = $26
-
-VIC_SPR0_COLOR  = $27
-VIC_SPR1_COLOR  = $28
-VIC_SPR2_COLOR  = $29
-VIC_SPR3_COLOR  = $2A
-VIC_SPR4_COLOR  = $2B
-VIC_SPR5_COLOR  = $2C
-VIC_SPR6_COLOR  = $2D
-VIC_SPR7_COLOR  = $2E
-
-VIC_CTRL1       = $11
-VIC_CTRL2       = $16
-
-VIC_HLINE       = $12
-
-VIC_LPEN_X      = $13
-VIC_LPEN_Y      = $14
-
-VIC_VIDEO_ADR   = $18
-
-VIC_IRR         = $19           ; Interrupt request register
-VIC_IMR         = $1A           ; Interrupt mask register
-
-VIC_BORDERCOLOR = $20
-VIC_BG_COLOR0   = $21
-VIC_BG_COLOR1   = $22
-VIC_BG_COLOR2   = $23
-VIC_BG_COLOR3   = $24
-
-
-; I/O  $da00: SID 6581
-
-SID_S1Lo        = $00
-SID_S1Hi        = $01
-SID_PB1Lo       = $02
-SID_PB1Hi       = $03
-SID_Ctl1        = $04
-SID_AD1         = $05
-SID_SUR1        = $06
-
-SID_S2Lo        = $07
-SID_S2Hi        = $08
-SID_PB2Lo       = $09
-SID_PB2Hi       = $0A
-SID_Ctl2        = $0B
-SID_AD2         = $0C
-SID_SUR2        = $0D
-
-SID_S3Lo        = $0E
-SID_S3Hi        = $0F
-SID_PB3Lo       = $10
-SID_PB3Hi       = $11
-SID_Ctl3        = $12
-SID_AD3         = $13
-SID_SUR3        = $14
-
-SID_FltLo       = $15
-SID_FltHi       = $16
-SID_FltCtl      = $17
-SID_Amp         = $18
-SID_ADConv1     = $19
-SID_ADConv2     = $1A
-SID_Noise       = $1B
-SID_Read3       = $1C
-
-
-; I/O  $db00: CIA 6526, Inter Process Communication
-; I/O  $dc00: CIA 6526
-
-.struct CIA
-        PRA     .byte
-        PRB     .byte
-        DDRA    .byte
-        DDRB    .byte
-        .union
-            .struct
-                TALO    .byte
-                TAHI    .byte
-            .endstruct
-            TA          .word
-        .endunion
-        .union
-            .struct
-                TBLO    .byte
-                TBHI    .byte
-            .endstruct
-            TB          .word
-        .endunion
-        TOD10   .byte
-        TODSEC  .byte
-        TODMIN  .byte
-        TODHR   .byte
-        SDR     .byte
-        ICR     .byte
-        CRA     .byte
-        CRB     .byte
-.endstruct
-
-
-; I/O  $dd00: ACIA 6551
-
-.struct ACIA
-        DATA    .byte
-        STATUS  .byte
-        CMD     .byte
-        CTRL    .BYTE
-.endstruct
-
-
-; I/O  $de00: Triport #1 6525
-; I/O  $df00: Triport #2 6525
-
-.struct TPI
-        PRA     .byte
-        PRB     .byte
-        .union
-                PRC     .byte
-                INT     .byte
-        .endunion
-        DDRA    .byte
-        DDRB    .byte
-        .union
-                DDRC    .byte
-                IMR     .byte
-        .endunion
-        CR      .byte
-        AIR     .byte
-.endstruct
-
-
-;-----------------------------------------------------------------------------
-; Our video memory address
-
-COLOR_RAM       := $D400        ; System bank
-
-
-;-----------------------------------------------------------------------------
-
-BASIC_BUF       := $FB5E        ; Bank 0 location of command-line
-BASIC_BUF_LEN   = 162           ; Maximum length of command-line
diff --git a/asminc/cbm610.inc b/asminc/cbm610.inc
deleted file mode 100644 (file)
index b1b03eb..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-;
-; Zero page variables and I/O definitions for the CBM 610
-;
-; Taken from a kernal disassembly done by myself in 1987.
-;
-; 1998-09-28, Ullrich von Bassewitz
-; 2014-04-02, Greg King
-
-
-; ---------------------------------------------------------------------------
-; Zeropage stuff
-
-ExecReg         := $00          ; Controls execution memory bank
-IndReg          := $01          ; Controls indirect indexed load-store bank
-
-TXTPTR          := $85          ; Far pointer into BASIC source code
-FNAM            := $90          ; Far pointer to LOAD/SAVE file-name
-FNAM_LEN        := $9D          ; Holds length of file-name
-
-; ---------------------------------------------------------------------------
-; Screen size
-
-XSIZE           = 80
-YSIZE           = 25
-
-; ---------------------------------------------------------------------------
-; I/O definitions
-
-
-; I/O  $d800: CRTC 6545
-
-.struct CRTC
-        ADDR    .byte
-        DATA    .byte
-.endstruct
-
-
-; I/O  $db00: CIA 6526, Inter Process Communication
-;
-;       IPCcia          =       $db00
-
-.struct CIA
-        PRA     .byte
-        PRB     .byte
-        DDRA    .byte
-        DDRB    .byte
-        .union
-            .struct
-                TALO    .byte
-                TAHI    .byte
-            .endstruct
-            TA          .word
-        .endunion
-        .union
-            .struct
-                TBLO    .byte
-                TBHI    .byte
-            .endstruct
-            TB          .word
-        .endunion
-        TOD10   .byte
-        TODSEC  .byte
-        TODMIN  .byte
-        TODHR   .byte
-        SDR     .byte
-        ICR     .byte
-        CRA     .byte
-        CRB     .byte
-.endstruct
-
-
-; I/O  $dc00: CIA 6526
-;
-;       cia             =       $dc00
-
-
-; I/O  $dd00: ACIA 6551
-;
-;       acia            =       $dd00
-
-.struct ACIA
-        DATA    .byte
-        STATUS  .byte
-        CMD     .byte
-        CTRL    .BYTE
-.endstruct
-
-
-; I/O  $de00: Triport #1 6525
-;
-;       tpi1            =       $de00
-
-.struct TPI
-        PRA     .byte
-        PRB     .byte
-        .union
-                PRC     .byte
-                INT     .byte
-        .endunion
-        DDRA    .byte
-        DDRB    .byte
-        .union
-                DDRC    .byte
-                IMR     .byte
-        .endunion
-        CR      .byte
-        AIR     .byte
-.endstruct
-
-
-; I/O  $df00: Triport #2 6525
-
-;       tpi2            =       $df00
-
-
-;-----------------------------------------------------------------------------
-
-BASIC_BUF       := $FA5E        ; Bank 1 location of command-line
-BASIC_BUF_LEN   = 162           ; Maximum length of command-line
diff --git a/asminc/cbm_filetype.inc b/asminc/cbm_filetype.inc
deleted file mode 100644 (file)
index 9e9ba24..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-;
-; Definitions for CBM file types. From cbm.h
-;
-; Ullrich von Bassewitz, 2012-06-03
-;
-
-; Define bitmapped constants for the table entries
-
-.enum
-        CBM_T_REG     = $10     ; Bit set for regular files
-        CBM_T_SEQ     = $10     ; Sequential file
-        CBM_T_PRG     = $11     ; Program file
-        CBM_T_USR     = $12     ; User file
-        CBM_T_REL     = $13     ; Relative file
-        CBM_T_VRP     = $14     ; Vorpal fast-loadable format
-        CBM_T_DEL     = $00     ; Deleted file
-        CBM_T_CBM     = $01     ; 1581 sub-partition
-        CBM_T_DIR     = $02     ; IDE64 and CMD sub-directory
-        CBM_T_LNK     = $03     ; IDE64 soft-link
-        CBM_T_OTHER   = $04     ; File-type not recognized
-        CBM_T_HEADER  = $05     ; Disk header / title
-.endenum
-
-
-; The following function maps the start character for a file type to
-; one of the file types above. Note: 'd' will always mapped to CBM_T_DEL.
-; The calling function has to look at the following character to determine
-; if the file type is actually CBM_T_DIR.
-;
-; unsigned char __fastcall__ _cbm_filetype (unsigned char c);
-
-        .global __cbm_filetype
-
-
diff --git a/asminc/cpu.mac b/asminc/cpu.mac
deleted file mode 100644 (file)
index 6b8aa6d..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-; CPU bitmask constants
-CPU_ISET_NONE      = $0001
-CPU_ISET_6502      = $0002
-CPU_ISET_6502X     = $0004
-CPU_ISET_65SC02    = $0008
-CPU_ISET_65C02     = $0010
-CPU_ISET_65816     = $0020
-CPU_ISET_SWEET16   = $0040
-CPU_ISET_HUC6280   = $0080
-
-; CPU capabilities
-CPU_NONE           = CPU_ISET_NONE
-CPU_6502           = CPU_ISET_6502
-CPU_6502X          = CPU_ISET_6502|CPU_ISET_6502X
-CPU_65SC02         = CPU_ISET_6502|CPU_ISET_65SC02
-CPU_65C02          = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02
-CPU_65816          = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65816
-CPU_SWEET16        = CPU_ISET_SWEET16
-CPU_HUC6280        = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02|CPU_ISET_HUC6280
diff --git a/asminc/ctype.inc b/asminc/ctype.inc
deleted file mode 100644 (file)
index d6b0ccf..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-;
-; Definitions for the character type tables
-;
-; Ullrich von Bassewitz, 08.09.2001
-;
-
-; Make the __ctype table an exported/imported symbol
-
-        .global    __ctype
-
-; Define bitmapped constants for the table entries
-
-CT_NONE         = $00           ; Nothing special
-CT_LOWER        = $01           ; 0 - Lower case char
-CT_UPPER        = $02           ; 1 - Upper case char
-CT_DIGIT        = $04           ; 2 - Numeric digit
-CT_XDIGIT       = $08           ; 3 - Hex digit (both, lower and upper)
-CT_CTRL         = $10           ; 4 - Control character
-CT_SPACE        = $20           ; 5 - The space character itself
-CT_OTHER_WS     = $40           ; 6 - Other whitespace ('\f', '\n', '\r', '\t' and '\v')
-CT_SPACE_TAB    = $80           ; 7 - Space or tab character
-
-; Combined stuff
-CT_ALNUM        = (CT_LOWER | CT_UPPER | CT_DIGIT)
-CT_ALPHA        = (CT_LOWER | CT_UPPER)
-CT_CTRL_SPACE   = (CT_CTRL | CT_SPACE)
-CT_NOT_PUNCT    = (CT_SPACE | CT_CTRL | CT_DIGIT | CT_UPPER | CT_LOWER)
-
-
diff --git a/asminc/em-error.inc b/asminc/em-error.inc
deleted file mode 100644 (file)
index e0c8850..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-;/*****************************************************************************/
-;/*                                                                           */
-;/*                               em-error.inc                                */
-;/*                                                                           */
-;/*                              EM error codes                               */
-;/*                                                                           */
-;/*                                                                           */
-;/*                                                                           */
-;/* (C) 2002-2012, Ullrich von Bassewitz                                      */
-;/*                Roemerstrasse 52                                           */
-;/*                D-70794 Filderstadt                                        */
-;/* EMail:         uz@cc65.org                                                */
-;/*                                                                           */
-;/*                                                                           */
-;/* This software is provided 'as-is', without any expressed or implied       */
-;/* warranty.  In no event will the authors be held liable for any damages    */
-;/* arising from the use of this software.                                    */
-;/*                                                                           */
-;/* Permission is granted to anyone to use this software for any purpose,     */
-;/* including commercial applications, and to alter it and redistribute it    */
-;/* freely, subject to the following restrictions:                            */
-;/*                                                                           */
-;/* 1. The origin of this software must not be misrepresented; you must not   */
-;/*    claim that you wrote the original software. If you use this software   */
-;/*    in a product, an acknowledgment in the product documentation would be  */
-;/*    appreciated but is not required.                                       */
-;/* 2. Altered source versions must be plainly marked as such, and must not   */
-;/*    be misrepresented as being the original software.                      */
-;/* 3. This notice may not be removed or altered from any source              */
-;/*    distribution.                                                          */
-;/*                                                                           */
-;/*****************************************************************************/
-
-
-
-; Error constants
-.enum
-        EM_ERR_OK                       ; No error
-        EM_ERR_NO_DRIVER                ; No driver available
-        EM_ERR_CANNOT_LOAD              ; Error loading driver
-        EM_ERR_INV_DRIVER               ; Invalid driver
-        EM_ERR_NO_DEVICE                ; Device (hardware) not found
-        EM_ERR_INSTALLED                ; A driver is already installed
-
-        EM_ERR_COUNT                    ; Special: Number of error messages
-.endenum
-
-
-
diff --git a/asminc/em-kernel.inc b/asminc/em-kernel.inc
deleted file mode 100644 (file)
index e7cdf9a..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-;/*****************************************************************************/
-;/*                                                                           */
-;/*                              em-kernel.inc                                */
-;/*                                                                           */
-;/*                           EM kernel interface                             */
-;/*                                                                           */
-;/*                                                                           */
-;/*                                                                           */
-;/* (C) 2002-2003 Ullrich von Bassewitz                                       */
-;/*               Römerstrasse 52                                             */
-;/*               D-70794 Filderstadt                                         */
-;/* EMail:        uz@cc65.org                                                 */
-;/*                                                                           */
-;/*                                                                           */
-;/* This software is provided 'as-is', without any expressed or implied       */
-;/* warranty.  In no event will the authors be held liable for any damages    */
-;/* arising from the use of this software.                                    */
-;/*                                                                           */
-;/* Permission is granted to anyone to use this software for any purpose,     */
-;/* including commercial applications, and to alter it and redistribute it    */
-;/* freely, subject to the following restrictions:                            */
-;/*                                                                           */
-;/* 1. The origin of this software must not be misrepresented; you must not   */
-;/*    claim that you wrote the original software. If you use this software   */
-;/*    in a product, an acknowledgment in the product documentation would be  */
-;/*    appreciated but is not required.                                       */
-;/* 2. Altered source versions must be plainly marked as such, and must not   */
-;/*    be misrepresented as being the original software.                      */
-;/* 3. This notice may not be removed or altered from any source              */
-;/*    distribution.                                                          */
-;/*                                                                           */
-;/*****************************************************************************/
-
-
-
-;------------------------------------------------------------------------------
-; The driver header
-
-.struct EMD_HDR
-        ID      .byte   3       ; Contains 0x65, 0x6d, 0x64 ("emd")
-        VERSION .byte   1       ; Interface version
-        LIBREF  .addr           ; Library reference
-        JUMPTAB .struct
-            INSTALL     .addr   ; INSTALL routine
-            UNINSTALL   .addr   ; UNINSTALL routine
-            PAGECOUNT   .addr   ; PAGECOUNT routine
-            MAP         .addr   ; MAP routine
-            USE         .addr   ; USE routine
-            MAPCLEAN    .addr   ; MAPCLEAN routine
-            COPYFROM    .addr   ; COPYFROM routine
-            COPYTO      .addr   ; COPYTO routine
-        .endstruct
-.endstruct
-
-;------------------------------------------------------------------------------
-; The EMD API version, stored in EMD_HDR::VERSION
-
-EMD_API_VERSION         = $02
-
-;------------------------------------------------------------------------------
-; The asm equivalent to the C em_copy structure
-
-.struct EM_COPY
-        BUF     .addr           ; Memory buffer to copy from or to
-        OFFS    .byte           ; Offset into page
-        PAGE    .word           ; Starting page to copy from or to
-        COUNT   .word           ; Number of bytes to copy
-        UNUSED  .byte           ; Make the size 8 bytes
-.endstruct
-
-;------------------------------------------------------------------------------
-; Variables
-
-        .global _em_drv                         ; Pointer to driver
-
-;------------------------------------------------------------------------------
-; Driver entry points
-             
-        .global emd_install
-        .global emd_uninstall
-        .global emd_pagecount
-        .global emd_map
-        .global emd_use
-        .global emd_commit
-        .global emd_copyfrom
-        .global emd_copyto
-
-;------------------------------------------------------------------------------
-; ASM functions
-
-        .global em_clear_ptr
-
-;------------------------------------------------------------------------------
-; C callable functions
-
-        .global _em_load_driver
-        .global _em_unload
-        .global _em_install
-        .global _em_uninstall
-        .global _em_pagecount
-        .global _em_map
-        .global _em_use
-        .global _em_commit
-        .global _em_copyfrom
-        .global _em_copyto
-
diff --git a/asminc/errno.inc b/asminc/errno.inc
deleted file mode 100644 (file)
index 83cd9a7..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-;                                                   
-; Ullrich von Bassewitz, 16.05.2000
-;
-
-; Variables and functions
-
-        .global         __errno, __oserror
-        .global         __osmaperrno
-        .global         __seterrno
-        .global         __directerrno, __mappederrno
-
-; Error codes, must match the values in the C headers
-.enum
-        EOK                     ; No error
-        ENOENT                  ; No such file or directory
-        ENOMEM                  ; Out of memory
-        EACCES                  ; Permission denied
-        ENODEV                  ; No such device
-        EMFILE                  ; Too many open files
-        EBUSY                   ; Device or resource busy
-        EINVAL                  ; Invalid argument
-        ENOSPC                  ; No space left on device
-        EEXIST                  ; File exists
-        EAGAIN                  ; Try again
-        EIO                     ; I/O error
-        EINTR                   ; Interrupted system call
-        ENOSYS                  ; Function not implemented
-        ESPIPE                  ; Illegal seek
-        ERANGE                  ; Range error
-        EBADF                   ; Bad file number
-        EUNKNOWN                ; Unknown OS specific error - must be last!
-
-        EMAX    = EUNKNOWN      ; Highest error code
-.endenum
-
-
diff --git a/asminc/fcntl.inc b/asminc/fcntl.inc
deleted file mode 100644 (file)
index 5e6333d..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.06.1999
-;
-
-; Predefined file handles
-STDIN_FILENO    = 0
-STDOUT_FILENO   = 1
-STDERR_FILENO   = 2
-
-; File mode constants, must match the values in the C headers
-O_RDONLY        = $01
-O_WRONLY        = $02
-O_RDWR          = $03
-O_CREAT         = $10
-O_TRUNC         = $20
-O_APPEND        = $40
-O_EXCL          = $80
-
-
-
-
diff --git a/asminc/generic.mac b/asminc/generic.mac
deleted file mode 100644 (file)
index bc6f592..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-
-; add - Add without carry
-.macro  add     Arg1, Arg2
-        clc
-        .if .paramcount = 2
-                adc     Arg1, Arg2
-        .else
-                adc     Arg1
-        .endif
-.endmacro
-
-; sub - subtract without borrow
-.macro  sub     Arg1, Arg2
-        sec
-        .if .paramcount = 2
-                sbc     Arg1, Arg2
-        .else
-                sbc     Arg1
-        .endif
-.endmacro
-
-; bge - jump if unsigned greater or equal
-.macro  bge     Arg
-        bcs     Arg
-.endmacro
-
-; blt - Jump if unsigned less
-.macro  blt     Arg
-        bcc     Arg
-.endmacro
-
-; bgt - jump if unsigned greater
-.macro  bgt     Arg
-        .local  L
-        beq     L
-        bcs     Arg
-L:
-.endmacro
-
-; ble - jump if unsigned less or equal
-.macro  ble     Arg
-        beq     Arg
-        bcc     Arg
-.endmacro
-
-; bnz - jump if not zero
-.macro  bnz     Arg
-        bne     Arg
-.endmacro
-
-; bze - jump if zero
-.macro  bze     Arg
-        beq     Arg
-.endmacro
-
diff --git a/asminc/get_tv.inc b/asminc/get_tv.inc
deleted file mode 100644 (file)
index 47e0d9c..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; get_tv.inc
-;
-; Ullrich von Bassewitz, 2004-10-15
-;
-; Defines for the get_tv function.
-
-
-
-; Error codes returned by all functions
-.enum TV
-    NTSC
-    PAL
-    OTHER
-.endenum
-
-
-; get_tv function
-
-        .global _get_tv
-
-
diff --git a/asminc/joy-error.inc b/asminc/joy-error.inc
deleted file mode 100644 (file)
index 5c13386..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-;/*****************************************************************************/
-;/*                                                                           */
-;/*                              joy-error.inc                                */
-;/*                                                                           */
-;/*                         Joystick error codes                              */
-;/*                                                                           */
-;/*                                                                           */
-;/*                                                                           */
-;/* (C) 2002      Ullrich von Bassewitz                                       */
-;/*               Wacholderweg 14                                             */
-;/*               D-70597 Stuttgart                                           */
-;/* EMail:        uz@musoftware.de                                            */
-;/*                                                                           */
-;/*                                                                           */
-;/* This software is provided 'as-is', without any expressed or implied       */
-;/* warranty.  In no event will the authors be held liable for any damages    */
-;/* arising from the use of this software.                                    */
-;/*                                                                           */
-;/* Permission is granted to anyone to use this software for any purpose,     */
-;/* including commercial applications, and to alter it and redistribute it    */
-;/* freely, subject to the following restrictions:                            */
-;/*                                                                           */
-;/* 1. The origin of this software must not be misrepresented; you must not   */
-;/*    claim that you wrote the original software. If you use this software   */
-;/*    in a product, an acknowledgment in the product documentation would be  */
-;/*    appreciated but is not required.                                       */
-;/* 2. Altered source versions must be plainly marked as such, and must not   */
-;/*    be misrepresented as being the original software.                      */
-;/* 3. This notice may not be removed or altered from any source              */
-;/*    distribution.                                                          */
-;/*                                                                           */
-;/*****************************************************************************/
-
-
-
-; Error codes
-JOY_ERR_OK              = 0       ; No error
-JOY_ERR_NO_DRIVER       = 1       ; No driver available
-JOY_ERR_CANNOT_LOAD     = 2       ; Error loading driver
-JOY_ERR_INV_DRIVER      = 3       ; Invalid driver
-JOY_ERR_NO_DEVICE       = 4       ; Device (hardware) not found
-
-
-
diff --git a/asminc/joy-kernel.inc b/asminc/joy-kernel.inc
deleted file mode 100644 (file)
index 4fe5572..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-;/*****************************************************************************/
-;/*                                                                           */
-;/*                              joy-kernel.inc                               */
-;/*                                                                           */
-;/*                    Internally used joystick functions                     */
-;/*                                                                           */
-;/*                                                                           */
-;/*                                                                           */
-;/* (C) 2002-2006, Ullrich von Bassewitz                                      */
-;/*                Römerstraße 52                                             */
-;/*                D-70794 Filderstadt                                        */
-;/* EMail:         uz@cc65.org                                                */
-;/*                                                                           */
-;/*                                                                           */
-;/* This software is provided 'as-is', without any expressed or implied       */
-;/* warranty.  In no event will the authors be held liable for any damages    */
-;/* arising from the use of this software.                                    */
-;/*                                                                           */
-;/* Permission is granted to anyone to use this software for any purpose,     */
-;/* including commercial applications, and to alter it and redistribute it    */
-;/* freely, subject to the following restrictions:                            */
-;/*                                                                           */
-;/* 1. The origin of this software must not be misrepresented; you must not   */
-;/*    claim that you wrote the original software. If you use this software   */
-;/*    in a product, an acknowledgment in the product documentation would be  */
-;/*    appreciated but is not required.                                       */
-;/* 2. Altered source versions must be plainly marked as such, and must not   */
-;/*    be misrepresented as being the original software.                      */
-;/* 3. This notice may not be removed or altered from any source              */
-;/*    distribution.                                                          */
-;/*                                                                           */
-;/*****************************************************************************/
-
-
-
-
-
-
-;------------------------------------------------------------------------------
-; Driver header stuff
-
-.struct JOY_HDR
-        ID      .byte   3       ; $6A, $6F, $79 ("joy")
-        VERSION .byte   1       ; Interface version
-        LIBREF  .addr           ; Library reference
-        MASKS   .byte   8       ; Joystick state mask array
-        JUMPTAB .struct
-            INSTALL     .addr   ; INSTALL routine
-            UNINSTALL   .addr   ; UNINSTALL routine
-            COUNT       .addr   ; COUNT routine
-            READ        .addr   ; READ routine
-            IRQ         .addr   ; IRQ routine
-        .endstruct
-.endstruct
-
-;------------------------------------------------------------------------------
-; The JOY API version, stored in JOY_HDR::VERSION
-
-JOY_API_VERSION         = $03
-
-;------------------------------------------------------------------------------
-; Variables
-
-        .global _joy_drv                        ; Pointer to driver
-        .global _joy_masks
-
-;------------------------------------------------------------------------------
-; Driver entry points
-
-        .global joy_install
-        .global joy_uninstall
-        .global joy_count
-        .global joy_read
-
-;------------------------------------------------------------------------------
-; C callable functions
-
-        .global _joy_load_driver
-        .global _joy_unload
-        .global _joy_install
-        .global _joy_uninstall
-        .global _joy_count
-        .global _joy_read
-
-        .global _joy_clear_ptr
diff --git a/asminc/longbranch.mac b/asminc/longbranch.mac
deleted file mode 100644 (file)
index d6f6cde..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-.macro  jeq     Target
-        .if     .match(Target, 0)
-        bne     *+5
-        jmp     Target
-        .elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
-                beq     Target
-        .else
-                bne     *+5
-                jmp     Target
-        .endif
-.endmacro
-.macro  jne     Target
-        .if     .match(Target, 0)
-                beq     *+5
-                jmp     Target
-        .elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
-                bne     Target
-        .else
-                beq     *+5
-                jmp     Target
-        .endif
-.endmacro
-.macro  jmi     Target
-        .if     .match(Target, 0)
-                bpl     *+5
-                jmp     Target
-        .elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
-                bmi     Target
-        .else
-                bpl     *+5
-                jmp     Target
-        .endif
-.endmacro
-.macro  jpl     Target
-        .if     .match(Target, 0)
-                bmi     *+5
-                jmp     Target
-        .elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
-                bpl     Target
-        .else
-                bmi     *+5
-                jmp     Target
-        .endif
-.endmacro
-.macro  jcs     Target
-        .if     .match(Target, 0)
-                bcc     *+5
-                jmp     Target
-        .elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
-                bcs     Target
-        .else
-                bcc     *+5
-                jmp     Target
-        .endif
-.endmacro
-.macro  jcc     Target
-        .if     .match(Target, 0)
-                bcs     *+5
-                jmp     Target
-        .elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
-                bcc     Target
-        .else
-                bcs     *+5
-                jmp     Target
-        .endif
-.endmacro
-.macro  jvs     Target
-        .if     .match(Target, 0)
-                bvc     *+5
-                jmp     Target
-        .elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
-                bvs     Target
-        .else
-                bvc     *+5
-                jmp     Target
-        .endif
-.endmacro
-.macro  jvc     Target
-        .if     .match(Target, 0)
-                bvs     *+5
-                jmp     Target
-        .elseif .def(Target) .and .const((*-2)-(Target)) .and ((*+2)-(Target) <= 127)
-                bvc     Target
-        .else
-                bvs     *+5
-                jmp     Target
-        .endif
-.endmacro
diff --git a/asminc/lynx.inc b/asminc/lynx.inc
deleted file mode 100644 (file)
index 2225bf3..0000000
+++ /dev/null
@@ -1,279 +0,0 @@
-; Lynx system hardware includes
-; Shawn Jefferson
-; June 18th, 2004
-;
-; Reference:
-;  Bastian Schick's Lynx Documentation
-;  http://www.geocities.com/SiliconValley/Byte/4242/lynx/
-;
-
-; ***
-; *** Suzy Addresses
-; ***
-
-; Sprite Control Block
-
-TMPADRL     = $FC00
-TMPADRH     = $FC01
-TILTACUML   = $FC02
-TILTACUMH   = $FC03
-HOFFL       = $FC04
-HOFFH       = $FC05
-VOFFL       = $FC06
-VOFFH       = $FC07
-VIDBASL     = $FC08
-VIDBASH     = $FC09
-COLLBASL    = $FC0A
-COLLBASH    = $FC0B
-VIDADRL     = $FC0C
-VIDADRH     = $FC0D
-COLLADRL    = $FC0E
-COLLADRH    = $FC0F
-SCBNEXTL    = $FC10
-SCBNEXTH    = $FC11
-SPRDLINEL   = $FC12
-SPRDLINEH   = $FC13
-HPOSSTRTL   = $FC14
-HPOSSTRTH   = $FC15
-VPOSSTRTL   = $FC16
-VPOSSTRTH   = $FC17
-SPRHSIZL    = $FC18
-SPRHSIZH    = $FC19
-SPRVSIZL    = $FC1A
-SPRVSIZH    = $FC1B
-STRETCHL    = $FC1C
-STRETCHH    = $FC1D
-TILTL       = $FC1E
-TILTH       = $FC1F
-SPRDOFFL    = $FC20
-SPRDOFFH    = $FC21
-SPRVPOSL    = $FC22
-SPRVPOSH    = $FC23
-COLLOFFL    = $FC24
-COLLOFFH    = $FC25
-VSIZACUML   = $FC26
-VSIZACUMH   = $FC27
-HSIZOFFL    = $FC28
-HSIZOFFH    = $FC29
-VSIZOFFL    = $FC2A
-VSIZOFFH    = $FC2B
-SCBADRL     = $FC2C
-SCBADRH     = $FC2D
-PROCADRL    = $FC2E
-PROCADRH    = $FC2F
-
-; Suzy Math
-
-MATHD       = $FC52
-MATHC       = $FC53
-MATHB       = $FC54
-MATHA       = $FC55
-MATHP       = $FC56
-MATHN       = $FC57
-MATHH       = $FC60
-MATHG       = $FC61
-MATHF       = $FC62
-MATHE       = $FC63
-MATHM       = $FC6C
-MATHL       = $FC6D
-MATHK       = $FC6E
-MATHJ       = $FC6F
-
-; Suzy Misc
-
-SPRCTL0     = $FC80
-SPRCTL1     = $FC81
-SPRCOLL     = $FC82
-SPRINIT     = $FC83
-SUZYHREV    = $FC88
-SUZYSREV    = $FC89
-SUZYBUSEN   = $FC90
-SPRGO       = $FC91
-SPRSYS      = $FC92
-JOYSTICK    = $FCB0
-SWITCHES    = $FCB1
-RCART0      = $FCB2
-RCART1      = $FCB3
-LEDS        = $FCC0
-PARSTATUS   = $FCC2
-PARDATA     = $FCC3
-HOWIE       = $FCC4
-
-
-; ***
-; *** Mikey Addresses
-; ***
-
-; Mikey Timers
-
-TIMER0      = $FD00
-TIMER1      = $FD04
-TIMER2      = $FD08
-TIMER3      = $FD0C
-TIMER4      = $FD10
-TIMER5      = $FD14
-TIMER6      = $FD18
-TIMER7      = $FD1C
-HTIMER      = $FD00             ; horizontal line timer (timer 0)
-VTIMER      = $FD08             ; vertical blank timer (timer 2)
-STIMER      = $FD1C             ; sound timer (timer 7)
-
-HTIMBKUP    = $FD00             ; horizontal line timer (timer 0)
-HTIMCTLA    = $FD01
-HTIMCNT     = $FD02
-HTIMCTLB    = $FD03
-VTIMBKUP    = $FD08             ; vertical blank timer (timer 2)
-VTIMCTLA    = $FD09
-VTIMCNT     = $FD0A
-VTIMCTLB    = $FD0B
-BAUDBKUP    = $FD10             ; serial timer (timer 4)
-STIMBKUP    = $FD1C             ; sound timer (timer 7)
-STIMCTLA    = $FD1D
-STIMCNT     = $FD1E
-STIMCTLB    = $FD1F
-
-TIM0BKUP    = $FD00
-TIM0CTLA    = $FD01
-TIM0CNT     = $FD02
-TIM0CTLB    = $FD03 
-TIM1BKUP    = $FD04
-TIM1CTLA    = $FD05
-TIM1CNT     = $FD06
-TIM1CTLB    = $FD07 
-TIM2BKUP    = $FD08
-TIM2CTLA    = $FD09
-TIM2CNT     = $FD0A
-TIM2CTLB    = $FD0B 
-TIM3BKUP    = $FD0C
-TIM3CTLA    = $FD0D
-TIM3CNT     = $FD0E
-TIM3CTLB    = $FD0F 
-TIM4BKUP    = $FD10
-TIM4CTLA    = $FD11
-TIM4CNT     = $FD12
-TIM4CTLB    = $FD13 
-TIM5BKUP    = $FD14
-TIM5CTLA    = $FD15
-TIM5CNT     = $FD16
-TIM5CTLB    = $FD17 
-TIM6BKUP    = $FD18
-TIM6CTLA    = $FD19
-TIM6CNT     = $FD1A
-TIM6CTLB    = $FD1B 
-TIM7BKUP    = $FD1C
-TIM7CTLA    = $FD1D
-TIM7CNT     = $FD1E
-TIM7CTLB    = $FD1F 
-
-; Mikey Audio
-
-AUDIO0      = $FD20             ; audio channel 0
-AUDIO1      = $FD28             ; audio channel 1
-AUDIO2      = $FD30             ; audio channel 2
-AUDIO3      = $FD38             ; audio channel 3
-
-AUD0VOL     = $FD20
-AUD0FEED    = $FD21
-AUD0OUT     = $FD22
-AUD0SHIFT   = $FD23
-AUD0BKUP    = $FD24
-AUD0CTLA    = $FD25
-AUD0CNT     = $FD26
-AUD0CTLB    = $FD27
-AUD1VOL     = $FD28
-AUD1FEED    = $FD29
-AUD1OUT     = $FD2A
-AUD1SHIFT   = $FD2B
-AUD1BKUP    = $FD2C
-AUD1CTLA    = $FD2D
-AUD1CNT     = $FD2E
-AUD1CTLB    = $FD2F
-AUD2VOL     = $FD30
-AUD2FEED    = $FD31
-AUD2OUT     = $FD32
-AUD2SHIFT   = $FD33
-AUD2BKUP    = $FD34
-AUD2CTLA    = $FD35
-AUD2CNT     = $FD36
-AUD2CTLB    = $FD37
-AUD3VOL     = $FD38
-AUD3FEED    = $FD39
-AUD3OUT     = $FD3A
-AUD3SHIFT   = $FD3B
-AUD3BKUP    = $FD3C
-AUD3CTLA    = $FD3D
-AUD3CNT     = $FD3E
-AUD3CTLB    = $FD3F
-MSTEREO     = $FD50
-
-; Mikey Misc
-
-; Interrupt bits in INTRST and INTSET
-TIMER0_INTERRUPT = $01
-TIMER1_INTERRUPT = $02
-TIMER2_INTERRUPT = $04
-TIMER3_INTERRUPT = $08
-TIMER4_INTERRUPT = $10
-TIMER5_INTERRUPT = $20
-TIMER6_INTERRUPT = $40
-TIMER7_INTERRUPT = $80
-
-HBL_INTERRUPT = TIMER0_INTERRUPT
-VBL_INTERRUPT = TIMER2_INTERRUPT
-SERIAL_INTERRUPT = TIMER4_INTERRUPT
-SND_INTERRUPT = TIMER7_INTERRUPT
-
-INTRST      = $FD80
-INTSET      = $FD81
-MAGRDY0     = $FD84
-MAGRDY1     = $FD85
-AUDIN       = $FD86
-SYSCTL1     = $FD87
-MIKEYHREV   = $FD88
-MIKEYSREV   = $FD89
-IODIR       = $FD8A
-IODAT       = $FD8B
-TxIntEnable = %10000000
-RxIntEnable = %01000000
-TxParEnable = %00010000
-ResetErr    = %00001000
-TxOpenColl  = %00000100
-TxBreak     = %00000010
-ParEven     = %00000001
-TxReady     = %10000000
-RxReady     = %01000000
-TxEmpty     = %00100000
-RxParityErr = %00010000
-RxOverrun   = %00001000
-RxFrameErr  = %00000100
-RxBreak     = %00000010
-ParityBit   = %00000001
-SERCTL      = $FD8C
-SERDAT      = $FD8D
-SDONEACK    = $FD90
-CPUSLEEP    = $FD91
-DISPCTL     = $FD92
-PBKUP       = $FD93
-DISPADRL    = $FD94
-DISPADRH    = $FD95
-MTEST0      = $FD9C
-MTEST1      = $FD9D
-MTEST2      = $FD9E
-PALETTE     = $FDA0                 ; hardware rgb palette
-GCOLMAP     = $FDA0                 ; hardware rgb palette (green)
-RBCOLMAP    = $FDB0                 ; hardware rgb palette (red-blue)
-
-
-; ***
-; *** Misc Hardware + 6502 vectors
-; ***
-
-MAPCTL      = $FFF9
-VECTORS     = $FFFB
-INTVECTL    = $FFFE
-INTVECTH    = $FFFF
-RSTVECTL    = $FFFC
-RSTVECTH    = $FFFD
-NMIVECTL    = $FFFA
-NMIVECTH    = $FFFB
-
diff --git a/asminc/modload.inc b/asminc/modload.inc
deleted file mode 100644 (file)
index 168dd67..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-;*****************************************************************************/
-;*                                                                           */
-;*                                  modload.inc                              */
-;*                                                                           */
-;*                     o65 module loader interface for cc65                  */
-;*                                                                           */
-;*                                                                           */
-;*                                                                           */
-;* (C) 2002      Ullrich von Bassewitz                                       */
-;*               Wacholderweg 14                                             */
-;*               D-70597 Stuttgart                                           */
-;* EMail:        uz@musoftware.de                                            */
-;*                                                                           */
-;*                                                                           */
-;* This software is provided 'as-is', without any expressed or implied       */
-;* warranty.  In no event will the authors be held liable for any damages    */
-;* arising from the use of this software.                                    */
-;*                                                                           */
-;* Permission is granted to anyone to use this software for any purpose,     */
-;* including commercial applications, and to alter it and redistribute it    */
-;* freely, subject to the following restrictions:                            */
-;*                                                                           */
-;* 1. The origin of this software must not be misrepresented; you must not   */
-;*    claim that you wrote the original software. If you use this software   */
-;*    in a product, an acknowledgment in the product documentation would be  */
-;*    appreciated but is not required.                                       */
-;* 2. Altered source versions must be plainly marked as such, and must not   */
-;*    be misrepresented as being the original software.                      */
-;* 3. This notice may not be removed or altered from any source              */
-;*    distribution.                                                          */
-;*                                                                           */
-;*****************************************************************************/
-
-
-
-; Exports structures and functions to load relocatable o65 modules at
-; runtime.
-
-
-
-; Offsets for the mod_ctrl struct. This struct is passed to the module loader.
-; It contains stuff, the loader needs to work, and another area where the
-; loader will place informational data if it was successful. You will have to
-; check the return code of mod_load before accessing any of these additional
-; struct members.
-.struct MOD_CTRL
-        READ            .addr
-        CALLERDATA      .word
-        MODULE          .addr           ; Pointer to module data
-        MODULE_SIZE     .word           ; Total size of loaded module
-        MODULE_ID       .word
-.endstruct
-
-; unsigned char mod_load (struct mod_ctrl* ctrl);
-; /* Load a module into memory and relocate it. The function will return an
-;  * error code (see below). If MLOAD_OK is returned, the outgoing fields in
-;  * the passed mod_ctrl struct contain information about the module just
-;  * loaded.
-;  */
-.global         _mod_load
-
-; void mod_free (void* module);
-; /* Free a loaded module. Note: The given pointer is the pointer to the
-;  * module memory, not a pointer to a control structure.
-;  */
-.global         _mod_free
-
-; Errors
-.enum
-        MLOAD_OK        ; Module load successful
-        MLOAD_ERR_READ  ; Read error
-        MLOAD_ERR_HDR   ; Header error
-        MLOAD_ERR_OS    ; Wrong OS
-        MLOAD_ERR_FMT   ; Data format error
-        MLOAD_ERR_MEM   ; Not enough memory
-.endenum
-
-
diff --git a/asminc/module.mac b/asminc/module.mac
deleted file mode 100644 (file)
index d844ec1..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-.ifndef DYN_DRV
-        DYN_DRV = 1
-.endif
-
-.macro  module_header   module_label
-        .if DYN_DRV
-                .segment        "HEADER"
-        .else
-                .data
-                .export         module_label
-                module_label:
-        .endif
-.endmacro
diff --git a/asminc/mouse-kernel.inc b/asminc/mouse-kernel.inc
deleted file mode 100644 (file)
index 3eebca2..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-;/*****************************************************************************/
-;/*                                                                           */
-;/*                            mouse-kernel.inc                               */
-;/*                                                                           */
-;/*                                Mouse API                                  */
-;/*                                                                           */
-;/*                                                                           */
-;/*                                                                           */
-;/* (C) 2003-2009, Ullrich von Bassewitz                                      */
-;/*                Roemerstrasse 52                                           */
-;/*                D-70794 Filderstadt                                        */
-;/* EMail:         uz@cc65.org                                                */
-;/*                                                                           */
-;/*                                                                           */
-;/*                                                                           */
-;/*                                                                           */
-;/* This software is provided 'as-is', without any expressed or implied       */
-;/* warranty.  In no event will the authors be held liable for any damages    */
-;/* arising from the use of this software.                                    */
-;/*                                                                           */
-;/* Permission is granted to anyone to use this software for any purpose,     */
-;/* including commercial applications, and to alter it and redistribute it    */
-;/* freely, subject to the following restrictions:                            */
-;/*                                                                           */
-;/* 1. The origin of this software must not be misrepresented; you must not   */
-;/*    claim that you wrote the original software. If you use this software   */
-;/*    in a product, an acknowledgment in the product documentation would be  */
-;/*    appreciated but is not required.                                       */
-;/* 2. Altered source versions must be plainly marked as such, and must not   */
-;/*    be misrepresented as being the original software.                      */
-;/* 3. This notice may not be removed or altered from any source              */
-;/*    distribution.                                                          */
-;/*                                                                           */
-;/*****************************************************************************/
-
-
-
-
-;------------------------------------------------------------------------------
-; Error codes
-
-.enum
-        MOUSE_ERR_OK                    ; No error
-        MOUSE_ERR_NO_DRIVER             ; No driver available
-        MOUSE_ERR_CANNOT_LOAD           ; Error loading driver
-        MOUSE_ERR_INV_DRIVER            ; Invalid driver
-        MOUSE_ERR_NO_DEVICE             ; Mouse hardware not found
-        MOUSE_ERR_INV_IOCTL             ; Invalid ioctl code
-
-        MOUSE_ERR_COUNT                 ; Special: Number of error codes
-.endenum
-
-;------------------------------------------------------------------------------
-; The driver header
-
-.struct MOUSE_HDR
-        ID              .byte   3       ; Contains 0x6D, 0x6F, 0x75 ("mou")
-        VERSION         .byte   1       ; Interface version
-        LIBREF          .addr           ; Library reference
-        JUMPTAB         .struct
-            INSTALL     .addr
-            UNINSTALL   .addr
-            HIDE        .addr
-            SHOW        .addr
-            SETBOX      .addr
-            GETBOX      .addr
-            MOVE        .addr
-            BUTTONS     .addr
-            POS         .addr
-            INFO        .addr
-            IOCTL       .addr
-            IRQ         .addr
-        .endstruct
-        FLAGS           .byte           ; Mouse driver flags
-        CALLBACKS .struct               ; Jump instructions
-                        .byte           ; JMP opcode
-            CHIDE       .addr           ; Jump address
-                        .byte
-            CSHOW       .addr
-                        .byte
-            CPREP       .addr
-                        .byte
-            CDRAW       .addr
-                        .byte
-            CMOVEX      .addr
-                        .byte
-            CMOVEY      .addr
-        .endstruct
-.endstruct
-
-;------------------------------------------------------------------------------
-; The mouse callback structure
-
-.struct MOUSE_CALLBACKS
-        HIDE    .addr                   ; Hide the mouse cursor
-        SHOW    .addr                   ; Show the mouse cursor
-        PREP    .addr                   ; Prepare to move the mouse cursor
-        DRAW    .addr                   ; Draw the mouse cursor
-        MOVEX   .addr                   ; Move the mouse cursor to X coord
-        MOVEY   .addr                   ; Move the mouse cursor to Y coord
-.endstruct
-
-;------------------------------------------------------------------------------
-; The mouse API version, stored in MOUSE_HDR::VERSION
-
-MOUSE_API_VERSION       = $05
-
-;------------------------------------------------------------------------------
-; Bitmapped mouse driver flags, stored in MOUSE_HDR::FLAGS.
-; Note: If neither of MOUSE_FLAG_XXX_IRQ is set, no interrupts are supplied
-; to the driver. If one of the bits is set, the interrupt vector MUST be
-; valid.
-; Beware: Some of the bits are tested using the BIT instruction, so do not
-; change the values without checking the code!
-
-MOUSE_FLAG_EARLY_IRQ    = $40           ; Enable IRQ *before* calling INSTALL
-MOUSE_FLAG_LATE_IRQ     = $80           ; Enable IRQ *after* calling INSTALL
-
-;------------------------------------------------------------------------------
-; Mouse button definitions
-
-MOUSE_BTN_LEFT          = $10
-MOUSE_BTN_RIGHT         = $01
-
-;------------------------------------------------------------------------------
-; Structures used to return data from the mouse driver
-
-.struct MOUSE_POS
-        XCOORD  .word
-        YCOORD  .word
-.endstruct
-
-.struct MOUSE_INFO
-        POS     .tag    MOUSE_POS
-        BUTTONS .byte
-.endstruct
-
-.struct MOUSE_BOX
-        MINX    .word
-        MINY    .word
-        MAXX    .word
-        MAXY    .word
-.endstruct
-
-;------------------------------------------------------------------------------
-; Variables
-
-        .global _mouse_drv              ; Pointer to driver
-        .global _mouse_hidden           ; Counter, 0 = mouse is visible
-
-;------------------------------------------------------------------------------
-; C callable functions
-
-        .global _mouse_load_driver
-        .global _mouse_unload
-        .global _mouse_install
-        .global _mouse_uninstall
-        .global _mouse_geterrormsg
-        .global _mouse_hide
-        .global _mouse_show
-        .global _mouse_setbox
-        .global _mouse_getbox
-        .global _mouse_move
-        .global _mouse_buttons
-        .global _mouse_pos
-        .global _mouse_info
-        .global _mouse_ioctl
-
-        .global _mouse_clear_ptr
-
-;------------------------------------------------------------------------------
-; Driver entry points (asm callable)
-
-        .global mouse_install
-        .global mouse_uninstall
-        .global mouse_hide
-        .global mouse_show
-        .global mouse_setbox
-        .global mouse_getbox
-        .global mouse_move
-        .global mouse_buttons
-        .global mouse_pos
-        .global mouse_info
-        .global mouse_ioctl
diff --git a/asminc/nes.inc b/asminc/nes.inc
deleted file mode 100644 (file)
index cc83d7c..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-;
-; NES definitions. By Groepaz/Hitmem.
-;
-
-
-;; FIXME: optimize zeropage usage
-
-SCREEN_PTR      = $62           ;2
-CRAM_PTR        = $64           ;2
-CHARCOLOR       = $66
-BGCOLOR         = $67
-RVS             = $68
-CURS_X          = $69
-CURS_Y          = $6a
-
-tickcount       = $6b           ;2
-
-VBLANK_FLAG     = $70
-
-ringbuff        = $0200
-ringwrite       = $71
-ringread        = $72
-ringcount       = $73
-
-ppuhi           = $74
-ppulo           = $75
-ppuval          = $76
-
-screenrows      = (30-1)
-charsperline    = 32
-xsize           = charsperline
-
-;; PPU defines
-
-PPU_CTRL1       = $2000
-PPU_CTRL2       = $2001
-PPU_STATUS      = $2002
-PPU_SPR_ADDR    = $2003
-PPU_SPR_IO      = $2004
-PPU_VRAM_ADDR1  = $2005
-PPU_VRAM_ADDR2  = $2006
-PPU_VRAM_IO     = $2007
-
-;; APU defines
-
-APU_PULSE1CTRL  = $4000         ; Pulse #1 Control Register (W)
-APU_PULSE1RAMP  = $4001         ; Pulse #1 Ramp Control Register (W)
-APU_PULSE1FTUNE = $4002         ; Pulse #1 Fine Tune (FT) Register (W)
-APU_PULSE1CTUNE = $4003         ; Pulse #1 Coarse Tune (CT) Register (W)
-APU_PULSE2CTRL  = $4004         ; Pulse #2 Control Register (W)
-APU_PULSE2RAMP  = $4005         ; Pulse #2 Ramp Control Register (W)
-APU_PULSE2FTUNE = $4006         ; Pulse #2 Fine Tune Register (W)
-APU_PULSE2STUNE = $4007         ; Pulse #2 Coarse Tune Register (W)
-APU_TRICTRL1    = $4008         ; Triangle Control Register #1 (W)
-APU_TRICTRL2    = $4009         ; Triangle Control Register #2 (?)
-APU_TRIFREQ1    = $400A         ; Triangle Frequency Register #1 (W)
-APU_TRIFREQ2    = $400B         ; Triangle Frequency Register #2 (W)
-APU_NOISECTRL   = $400C         ; Noise Control Register #1 (W)
-;;APU_ = $400D  ; Unused (???)
-APU_NOISEFREQ1  = $400E         ; Noise Frequency Register #1 (W)
-APU_NOISEFREQ2  = $400F         ; Noise Frequency Register #2 (W)
-APU_MODCTRL     = $4010         ; Delta Modulation Control Register (W)
-APU_MODDA       = $4011         ; Delta Modulation D/A Register (W)
-APU_MODADDR     = $4012         ; Delta Modulation Address Register (W)
-APU_MODLEN      = $4013         ; Delta Modulation Data Length Register (W)
-APU_SPR_DMA     = $4014         ; Sprite DMA Register (W)
-APU_CHANCTRL    = $4015         ; Sound/Vertical Clock Signal Register (R)
-APU_PAD1        = $4016         ; Joypad #1 (RW)
-APU_PAD2        = $4017         ; Joypad #2/SOFTCLK (RW)
-
-
-CH_HLINE        = 11
-CH_VLINE        = 14
-CH_ULCORNER     = 176
-CH_URCORNER     = 174
-CH_LLCORNER     = 173
-CH_LRCORNER     = 189
-CH_TTEE         = 178
-CH_RTEE         = 179
-CH_BTEE         = 177
-CH_LTEE         = 171
-CH_CROSS        = 123
-CH_CURS_UP      = 145
-CH_CURS_DOWN    = 17
-CH_CURS_LEFT    = 157
-CH_CURS_RIGHT   = 29
-CH_PI           = 126
-CH_DEL          = 20
-CH_INS          = 148
-CH_ENTER        = 10
-CH_STOP         = 3
-CH_ESC          = 27
-
diff --git a/asminc/o65.inc b/asminc/o65.inc
deleted file mode 100644 (file)
index 6e0caa7..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-;*****************************************************************************/
-;*                                                                           */
-;*                                  o65.inc                                  */
-;*                                                                           */
-;*                    Definitions for the o65 file format                    */
-;*                                                                           */
-;*                                                                           */
-;*                                                                           */
-;* (C) 2002-2009, Ullrich von Bassewitz                                      */
-;*                Roemerstrasse 52                                           */
-;*                D-70794 Filderstadt                                        */
-;* EMail:         uz@cc65.org                                                */
-;*                                                                           */
-;*                                                                           */
-;* This software is provided 'as-is', without any expressed or implied       */
-;* warranty.  In no event will the authors be held liable for any damages    */
-;* arising from the use of this software.                                    */
-;*                                                                           */
-;* Permission is granted to anyone to use this software for any purpose,     */
-;* including commercial applications, and to alter it and redistribute it    */
-;* freely, subject to the following restrictions:                            */
-;*                                                                           */
-;* 1. The origin of this software must not be misrepresented; you must not   */
-;*    claim that you wrote the original software. If you use this software   */
-;*    in a product, an acknowledgment in the product documentation would be  */
-;*    appreciated but is not required.                                       */
-;* 2. Altered source versions must be plainly marked as such, and must not   */
-;*    be misrepresented as being the original software.                      */
-;* 3. This notice may not be removed or altered from any source              */
-;*    distribution.                                                          */
-;*                                                                           */
-;*****************************************************************************/
-
-
-
-; This files exports structures and constants to handle the o65 relocatable
-; file format as defined by Andre Fachat.
-
-
-
-; The o65 header structure (6502 format)
-.struct O65_HDR
-        MARKER          .byte   2       ; Non-C64 marker: $01 $00
-        MAGIC           .byte   3       ; o65 magic: "o65"
-        VERSION         .byte   1       ; Version number
-        MODE            .word           ; Mode word
-        TBASE           .word           ; Original text (code) segment address
-        TLEN            .word           ; Size of text (code) segment
-        DBASE           .word           ; Original data segment address
-        DLEN            .word           ; Size of data segment
-        BBASE           .word           ; Original bss segment address
-        BLEN            .word           ; Size of bss segment
-        ZBASE           .word           ; Original zp segment address
-        ZLEN            .word           ; Size of zp segment
-        STACK           .word           ; Stacksize needed
-.endstruct
-
-; Marker, magic and version number
-O65_MARKER_0            =       $01
-O65_MARKER_1            =       $00
-O65_MAGIC_0             =       $6F     ; 'o'
-O65_MAGIC_1             =       $36     ; '6'
-O65_MAGIC_2             =       $35     ; '5'
-O65_VERSION             =       $00
-
-; Defines for the mode word
-O65_CPU_65816           =       $8000   ; Executable is for 65816
-O65_CPU_6502            =       $0000   ; Executable is for the 6502
-O65_CPU_MASK            =       $8000   ; Mask to extract CPU type
-
-O65_RELOC_PAGE          =       $4000   ; Page wise relocation
-O65_RELOC_BYTE          =       $0000   ; Byte wise relocation
-O65_RELOC_MASK          =       $4000   ; Mask to extract relocation type
-
-O65_SIZE_32BIT          =       $2000   ; All size words are 32bit
-O65_SIZE_16BIT          =       $0000   ; All size words are 16bit
-O65_SIZE_MASK           =       $2000   ; Mask to extract size
-
-O65_FTYPE_OBJ           =       $1000   ; Object file
-O65_FTYPE_EXE           =       $0000   ; Executable file
-O65_FTYPE_MASK          =       $1000   ; Mask to extract type
-
-O65_ADDR_SIMPLE         =       $0800   ; Simple addressing
-O65_ADDR_DEFAULT        =       $0000   ; Default addressing
-O65_ADDR_MASK           =       $0800   ; Mask to extract addressing
-
-O65_CHAIN               =       $0400   ; Chained file, another one follows
-O65_CHAIN_MASK          =       $0400   ; Mask to extract chain flag
-
-O65_BSSZERO             =       $0200   ; BSS segment must be zeroed
-O65_BSSZERO_MASK        =       $0200   ; Mask to extract bss zero flag
-
-; The following is used if O65_CPU == 6502
-O65_CPU2_6502           =       $0000   ; Executable is for 6502
-O65_CPU2_65C02          =       $0010   ; Executable is for 65C02
-O65_CPU2_65SC02         =       $0020   ; Executable is for 65SC02
-O65_CPU2_65CE02         =       $0030   ; Executable is for 65CE02
-O65_CPU2_6502X          =       $0040   ; Executable is for NMOS 6502
-O65_CPU2_65816_EMU      =       $0050   ; Executable is for 65816 in emul mode
-O65_CPU2_MASK           =       $00F0   ; Mask to extract CPU2 field
-
-O65_ALIGN_1             =       $0000   ; Bytewise alignment
-O65_ALIGN_2             =       $0001   ; Align words
-O65_ALIGN_4             =       $0002   ; Align longwords
-O65_ALIGN_256           =       $0003   ; Align pages (256 bytes)
-O65_ALIGN_MASK          =       $0003   ; Mask to extract alignment
-
-; The mode word as generated by the ld65 linker
-O65_MODE_CC65           = O65_CPU_6502 | O65_RELOC_BYTE | O65_SIZE_16BIT | O65_FTYPE_EXE | O65_ADDR_SIMPLE | O65_ALIGN_1
-
-; Relocation type codes
-O65_RTYPE_WORD          =       $80
-O65_RTYPE_HIGH          =       $40
-O65_RTYPE_LOW           =       $20
-O65_RTYPE_SEGADDR       =       $C0
-O65_RTYPE_SEG           =       $A0
-O65_RTYPE_MASK          =       $E0
-
-; Segment IDs
-O65_SEGID_UNDEF         =       $00
-O65_SEGID_ABS           =       $01
-O65_SEGID_TEXT          =       $02
-O65_SEGID_DATA          =       $03
-O65_SEGID_BSS           =       $04
-O65_SEGID_ZP            =       $05
-O65_SEGID_MASK          =       $07
-
-; Option tags
-O65_OPT_FILENAME        =       0
-O65_OPT_OS              =       1
-O65_OPT_ASM             =       2
-O65_OPT_AUTHOR          =       3
-O65_OPT_TIMESTAMP       =       4
-
-; Operating system codes for O65_OPT_OS
-O65_OS_OSA65            =       1
-O65_OS_LUNIX            =       2
-O65_OS_CC65             =       3
-O65_OS_OPENCBM          =       4
-
-; Load errors
-O65_LOAD_OK             =       0       ; Module load successful
-O65_LOAD_ERR_READ       =       1       ; Read error
-O65_LOAD_ERR_HDR        =       2       ; Header error
-O65_LOAD_ERR_OS         =       3       ; Wrong OS
-O65_LOAD_ERR_FMT        =       4       ; Data format error
-O65_LOAD_ERR_MEM        =       5       ; Not enough memory
-
-
-
diff --git a/asminc/opcodes.inc b/asminc/opcodes.inc
deleted file mode 100644 (file)
index 7c52871..0000000
+++ /dev/null
@@ -1,509 +0,0 @@
-; opcodes.inc\r
-; ca65 6502 - opcode definitions, mainly for self modifying code\r
-;\r
-; Christian Krüger, latest change: 18-Sep-2010\r
-;\r
-; This software is provided 'as-is', without any expressed or implied      \r
-; warranty.  In no event will the authors be held liable for any damages   \r
-; arising from the use of this software.                                   \r
-;                                                                          \r
-; Permission is granted to anyone to use this software for any purpose,    \r
-; including commercial applications, and to alter it and redistribute it   \r
-; freely, subject to the following restrictions:                           \r
-;                                                                          \r
-; 1. The origin of this software must not be misrepresented; you must not  \r
-;    claim that you wrote the original software. If you use this software  \r
-;    in a product, an acknowledgment in the product documentation would be \r
-;    appreciated but is not required.                                      \r
-; 2. Altered source versions must be plainly marked as such, and must not  \r
-;    be misrepresented as being the original software.                     \r
-; 3. This notice may not be removed or altered from any source             \r
-;    distribution.                                                         \r
-;                                                                          \r
-\r
-; Opcode-Table\r
-; ------------\r
-; Post fix explanation:\r
-; imm = #$00\r
-; zp = $00\r
-; zpx = $00,X\r
-; zpy = $00,Y\r
-; izp = ($00)\r
-; izx = ($00,X)\r
-; izy = ($00),Y\r
-; abs = $0000\r
-; abx = $0000,X\r
-; aby = $0000,Y\r
-; ind = ($0000)\r
-; iax = ($0000,X)\r
-; rel = $0000 (PC-relative) (supressed here)\r
-\r
-.macpack        cpu\r
-\r
-OPC_BRK     = $00\r
-OPC_ORA_izx = $01\r
-OPC_ORA_zp  = $05\r
-OPC_ASL_zp  = $06\r
-OPC_PHP     = $08\r
-OPC_ORA_imm = $09\r
-OPC_ASL     = $0A\r
-OPC_ORA_abs = $0D\r
-OPC_ASL_abs = $0E\r
-\r
-OPC_BPL     = $10\r
-OPC_ORA_izy = $11\r
-OPC_ORA_zpx = $15\r
-OPC_ASL_zpx = $16\r
-OPC_CLC     = $18\r
-OPC_ORA_aby = $19\r
-OPC_ORA_abx = $1D\r
-OPC_ASL_abx = $1E\r
-\r
-OPC_JSR_abs = $20\r
-OPC_AND_izx = $21\r
-OPC_BIT_zp  = $24\r
-OPC_AND_zp  = $25\r
-OPC_ROL_zp  = $26\r
-OPC_PLP     = $28\r
-OPC_AND_imm = $29\r
-OPC_ROL     = $2A\r
-OPC_BIT_abs = $2C\r
-OPC_AND_abs = $2D\r
-OPC_ROL_abs = $2E\r
-\r
-OPC_BMI     = $30\r
-OPC_AND_izy = $31\r
-OPC_AND_zpx = $35\r
-OPC_ROL_zpx = $36\r
-OPC_SEC     = $38\r
-OPC_AND_aby = $39\r
-OPC_AND_abx = $3D\r
-OPC_ROL_abx = $3E\r
-\r
-\r
-OPC_RTI     = $40\r
-OPC_EOR_izx = $41\r
-OPC_EOR_zp  = $45\r
-OPC_LSR_zp  = $46\r
-OPC_PHA     = $48\r
-OPC_EOR_imm = $49\r
-OPC_LSR     = $4A\r
-OPC_JMP_abs = $4C\r
-OPC_EOR_abs = $4D\r
-OPC_LSR_abs = $4E\r
-\r
-OPC_BVC     = $50\r
-OPC_EOR_izy = $51\r
-OPC_EOR_zpx = $55\r
-OPC_LSR_zpx = $56\r
-OPC_CLI     = $58\r
-OPC_EOR_aby = $59\r
-OPC_EOR_abx = $5D\r
-OPC_LSR_abx = $5E\r
-\r
-OPC_RTS     = $60\r
-OPC_ADC_izx = $61\r
-OPC_ADC_zp  = $65\r
-OPC_ROR_zp  = $66\r
-OPC_PLA     = $68\r
-OPC_ADC_imm = $69\r
-OPC_ROR     = $6A\r
-OPC_JMP_ind = $6C\r
-OPC_ADC_abs = $6D\r
-OPC_ROR_abs = $6E\r
-\r
-OPC_BVS     = $70\r
-OPC_ADC_izy = $71\r
-OPC_ADC_zpx = $75\r
-OPC_ROR_zpx = $76\r
-OPC_SEI     = $78\r
-OPC_ADC_aby = $79\r
-OPC_ADC_abx = $7D\r
-OPC_ROR_abx = $7E\r
-\r
-OPC_STA_izx = $81\r
-OPC_STY_zp  = $84\r
-OPC_STA_zp  = $85\r
-OPC_STX_zp  = $86\r
-OPC_DEY     = $88\r
-OPC_TXA     = $8A\r
-OPC_STY_abs = $8C\r
-OPC_STA_abs = $8D\r
-OPC_STX_abs = $8E\r
-\r
-OPC_BCC     = $90\r
-OPC_STA_izy = $91\r
-OPC_STY_zpx = $94\r
-OPC_STA_zpx = $95\r
-OPC_STX_zpy = $96\r
-OPC_TYA     = $98\r
-OPC_STA_aby = $99\r
-OPC_TXS     = $9A\r
-OPC_STA_abx = $9D\r
-\r
-OPC_LDY_imm = $A0\r
-OPC_LDA_izx = $A1\r
-OPC_LDX_imm = $A2\r
-OPC_LDY_zp  = $A4\r
-OPC_LDA_zp  = $A5\r
-OPC_LDX_zp  = $A6\r
-OPC_TAY     = $A8\r
-OPC_LDA_imm = $A9\r
-OPC_TAX     = $AA\r
-OPC_LDY_abs = $AC\r
-OPC_LDA_abs = $AD\r
-OPC_LDX_abs = $AE\r
-\r
-OPC_BCS     = $B0\r
-OPC_LDA_izy = $B1\r
-OPC_LDY_zpx = $B4\r
-OPC_LDA_zpx = $B5\r
-OPC_LDX_zpy = $B6\r
-OPC_CLV     = $B8\r
-OPC_LDA_aby = $B9\r
-OPC_TSX     = $BA\r
-OPC_LDY_abx = $BC\r
-OPC_LDA_abx = $BD\r
-OPC_LDX_aby = $BE\r
-\r
-OPC_CPY_imm = $C0\r
-OPC_CMP_izx = $C1\r
-OPC_CPY_zp  = $C4\r
-OPC_CMP_zp  = $C5\r
-OPC_DEC_zp  = $C6\r
-OPC_INY     = $C8\r
-OPC_CMP_imm = $C9\r
-OPC_DEX     = $CA\r
-OPC_CPY_abs = $CC\r
-OPC_CMP_abs = $CD\r
-OPC_DEC_abs = $CE\r
-\r
-OPC_BNE     = $D0\r
-OPC_CMP_izy = $D1\r
-OPC_CMP_zpx = $D5\r
-OPC_DEC_zpx = $D6\r
-OPC_CLD     = $D8\r
-OPC_CMP_aby = $D9\r
-OPC_CMP_abx = $DD\r
-OPC_DEC_abx = $DE\r
-\r
-OPC_CPX_imm = $E0\r
-OPC_SBC_izx = $E1\r
-OPC_CPX_zp  = $E4\r
-OPC_SBC_zp  = $E5\r
-OPC_INC_zp  = $E6\r
-OPC_INX     = $E8\r
-OPC_SBC_imm = $E9\r
-OPC_NOP     = $EA\r
-OPC_CPX_abs = $EC\r
-OPC_SBC_abs = $ED\r
-OPC_INC_abs = $EE\r
-\r
-\r
-OPC_BEQ     = $F0\r
-OPC_SBC_izy = $F1\r
-OPC_SBC_zpx = $F5\r
-OPC_INC_zpx = $F6\r
-OPC_SED     = $F8\r
-OPC_SBC_aby = $F9\r
-OPC_SBC_abx = $FD\r
-OPC_INC_abx = $FE\r
-\r
-\r
-.if (.cpu .bitand ::CPU_ISET_65SC02)\r
-\r
-; OPC_NOP   = $02               ; doublet\r
-; OPC_NOP   = $03               ; doublet\r
-OPC_TSB_zp  = $04\r
-; OPC_NOP   = $0B               ; doublet\r
-OPC_TSB_abs = $0C\r
-\r
-OPC_ORA_izp = $12\r
-; OPC_NOP   = $13               ; doublet\r
-OPC_TRB_zp  = $14\r
-OPC_INC     = $1A\r
-; OPC_NOP   = $1B               ; doublet\r
-OPC_TRB_abs = $1C\r
-\r
-; OPC_NOP   = $22               ; doublet\r
-; OPC_NOP   = $23               ; doublet\r
-; OPC_NOP   = $2B               ; doublet\r
-\r
-OPC_AND_izp = $32\r
-; OPC_NOP   = $33               ; doublet\r
-OPC_BIT_zpx = $34\r
-OPC_DEC     = $3A\r
-; OPC_NOP   = $3B               ; doublet\r
-OPC_BIT_abx = $3C\r
-\r
-; OPC_NOP   = $42               ; doublet\r
-; OPC_NOP   = $43               ; doublet\r
-; OPC_NOP   = $44               ; doublet\r
-; OPC_NOP   = $4B               ; doublet\r
-\r
-OPC_EOR_izp = $52               \r
-; OPC_NOP   = $53               ; doublet\r
-; OPC_NOP   = $54               ; doublet\r
-; OPC_NOP   = $5A               ; doublet\r
-; OPC_NOP   = $5B               ; doublet\r
-OPC_EOR_abx = $5C\r
-\r
-; OPC_NOP   = $62               ; doublet\r
-; OPC_NOP   = $63               ; doublet\r
-OPC_STZ_zp  = $64\r
-; OPC_NOP   = $6B               ; doublet\r
-\r
-OPC_ADC_izp = $72\r
-; OPC_NOP   = $73               ; doublet\r
-OPC_STZ_zpx = $74\r
-OPC_PLY     = $7A\r
-; OPC_NOP   = $7B               ; doublet\r
-OPC_JMP_iax = $7C\r
-\r
-OPC_BRA     = $80\r
-; OPC_NOP   = $82               ; doublet\r
-; OPC_NOP   = $83               ; doublet\r
-OPC_BIT_imm = $89\r
-; OPC_NOP   = $8B               ; doublet\r
-\r
-OPC_STA_izp = $92\r
-; OPC_NOP   = $93               ; doublet\r
-; OPC_NOP   = $9B               ; doublet\r
-OPC_STZ_abs = $9C\r
-OPC_STZ_abx = $9E\r
-\r
-; OPC_NOP   = $A3               ; doublet\r
-; OPC_NOP   = $AB               ; doublet\r
-\r
-OPC_LDA_izp = $B2\r
-; OPC_NOP   = $B3               ; doublet\r
-; OPC_NOP   = $BB               ; doublet\r
-\r
-; OPC_NOP   = $C2               ; doublet\r
-; OPC_NOP   = $C3               ; doublet\r
-; OPC_NOP   = $CB               ; doublet\r
-\r
-OPC_CMP_izp = $D2\r
-; OPC_NOP   = $D3               ; doublet\r
-; OPC_NOP   = $D4               ; doublet\r
-OPC_PHX     = $DA\r
-; OPC_NOP   = $DB               ; doublet\r
-; OPC_NOP   = $DC               ; doublet\r
-\r
-; OPC_NOP   = $E2               ; doublet\r
-; OPC_NOP   = $E3               ; doublet\r
-; OPC_NOP   = $EB               ; doublet\r
-\r
-OPC_SBC_izp = $F2\r
-; OPC_NOP   = $F3               ; doublet\r
-; OPC_NOP   = $F4               ; doublet\r
-OPC_PLX     = $FA\r
-; OPC_NOP   = $FB               ; doublet\r
-; OPC_NOP   = $FC               ; doublet\r
-\r
-\r
-.if (.cpu .bitand ::CPU_ISET_65C02)\r
-\r
-; bit instructions for 65C02\r
-\r
-OPC_RMB0    = $07\r
-OPC_RMB1    = $17\r
-OPC_RMB2    = $27\r
-OPC_RMB3    = $37\r
-OPC_RMB4    = $47\r
-OPC_RMB5    = $57\r
-OPC_RMB6    = $67\r
-OPC_RMB7    = $77\r
-\r
-OPC_SMB0    = $87\r
-OPC_SMB1    = $97\r
-OPC_SMB2    = $A7\r
-OPC_SMB3    = $B7\r
-OPC_SMB4    = $C7\r
-OPC_SMB5    = $D7\r
-OPC_SMB6    = $E7\r
-OPC_SMB7    = $F7\r
-\r
-OPC_BBR0    = $0F\r
-OPC_BBR1    = $1F\r
-OPC_BBR2    = $2F\r
-OPC_BBR3    = $3F\r
-OPC_BBR4    = $4F\r
-OPC_BBR5    = $5F\r
-OPC_BBR6    = $6F\r
-OPC_BBR7    = $7F\r
-\r
-OPC_BBS0    = $8F\r
-OPC_BBS1    = $9F\r
-OPC_BBS2    = $AF\r
-OPC_BBS3    = $BF\r
-OPC_BBS4    = $CF\r
-OPC_BBS5    = $DF\r
-OPC_BBS6    = $EF\r
-OPC_BBS7    = $FF\r
-\r
-.else\r
-\r
-; no bit instructions for 65SC02\r
-\r
-; OPC_NOP   = $07               ; doublet\r
-; OPC_NOP   = $17               ; doublet\r
-; OPC_NOP   = $27               ; doublet\r
-; OPC_NOP   = $37               ; doublet\r
-; OPC_NOP   = $47               ; doublet\r
-; OPC_NOP   = $57               ; doublet\r
-; OPC_NOP   = $67               ; doublet\r
-; OPC_NOP   = $77               ; doublet\r
-; OPC_NOP   = $87               ; doublet\r
-; OPC_NOP   = $97               ; doublet\r
-; OPC_NOP   = $A7               ; doublet\r
-; OPC_NOP   = $B7               ; doublet\r
-; OPC_NOP   = $C7               ; doublet\r
-; OPC_NOP   = $D7               ; doublet\r
-; OPC_NOP   = $E7               ; doublet\r
-; OPC_NOP   = $F7               ; doublet\r
-; OPC_NOP   = $0F               ; doublet\r
-; OPC_NOP   = $1F               ; doublet\r
-; OPC_NOP   = $2F               ; doublet\r
-; OPC_NOP   = $3F               ; doublet\r
-; OPC_NOP   = $4F               ; doublet\r
-; OPC_NOP   = $5F               ; doublet\r
-; OPC_NOP   = $6F               ; doublet\r
-; OPC_NOP   = $7F               ; doublet\r
-; OPC_NOP   = $8F               ; doublet\r
-; OPC_NOP   = $9F               ; doublet\r
-; OPC_NOP   = $AF               ; doublet\r
-; OPC_NOP   = $BF               ; doublet\r
-; OPC_NOP   = $CF               ; doublet\r
-; OPC_NOP   = $DF               ; doublet\r
-; OPC_NOP   = $EF               ; doublet\r
-; OPC_NOP   = $FF               ; doublet\r
-\r
-.endif\r
-\r
-.elseif (.cpu .bitand ::CPU_ISET_6502X)\r
-\r
-; stable, undocumented opcodes\r
-\r
-; OPC_KIL   = $02               ; unstable\r
-OPC_SLO_izx = $03\r
-OPC_NOP_zp  = $04\r
-OPC_SLO_zp  = $07\r
-OPC_ANC_imm = $0B\r
-OPC_NOP_abs = $0C\r
-OPC_SLO_abs = $0F\r
-\r
-; OPC_KIL   = $12               ; unstable\r
-OPC_SLO_izy = $13\r
-OPC_NOP_zpx = $14\r
-OPC_SLO_zpx = $17\r
-;OPC_NOP    = $1A\r
-OPC_SLO_aby = $1B\r
-OPC_NOP_abx = $1C\r
-OPC_SLO_abx = $1F\r
-\r
-; OPC_KIL   = $22               ; unstable\r
-OPC_RLA_izx = $23\r
-OPC_RLA_zp  = $27\r
-OPC_ANC_imm = $2B\r
-OPC_RLA_abs = $2F\r
-\r
-; OPC_KIL   = $32               ; unstable\r
-OPC_RLA_izy = $33\r
-OPC_NOP_zpx = $34\r
-OPC_RLA_zpx = $37\r
-; OPC_NOP   = $3A               ; doublet\r
-OPC_RLA_aby = $3B\r
-OPC_NOP_abx = $3C\r
-OPC_RLA_abx = $3F\r
-\r
-; OPC_KIL   = $42               ; unstable\r
-OPC_SRE_izx = $43\r
-OPC_NOP_zp  = $44\r
-OPC_SRE_zp  = $47\r
-OPC_ALR_imm = $4B\r
-OPC_SRE_abs = $4F\r
-\r
-; OPC_KIL   = $52               ; unstable\r
-OPC_SRE_izy = $53\r
-OPC_NOP_zpx = $54\r
-OPC_SRE_zpx = $57\r
-; OPC_NOP   = $5A               ; doublet\r
-OPC_SRE_aby = $5B\r
-OPC_NOP_abx = $5C\r
-OPC_SRE_abx = $5F\r
-\r
-; OPC_KIL   = $62\r
-OPC_RRA_izx = $63\r
-OPC_NOP_zp  = $64\r
-OPC_RRA_zp  = $67\r
-OPC_ARR_imm = $6B\r
-OPC_RRA_abs = $6F\r
-\r
-; OPC_KIL   = $72\r
-OPC_RRA_izy = $73\r
-OPC_NOP_zpx = $74\r
-OPC_RRA_zpx = $77\r
-; OPC_NOP   = $7A               ; doublet\r
-OPC_RRA_aby = $7B\r
-OPC_NOP_abx = $7C\r
-OPC_RRA_abx = $7F\r
-\r
-OPC_NOP_imm = $80\r
-; OPC_NOP_imm = $82             ; doublet\r
-OPC_SAX_izx = $83\r
-OPC_SAX_zp  = $87\r
-; OPC_NOP_imm = $89             ; doublet\r
-; OPC_XAA = $8B                 ; unstable\r
-OPC_SAX_abs = $8F\r
-\r
-; OPC_KIL   = $92               ; unstable\r
-; OPC_AHX_izy = $93             ; unstable\r
-OPC_SAX_zpy = $97\r
-; OPC_TAS_aby = $9B             ; unstable\r
-; OPC_SHY_abx = $9C             ; unstable\r
-; OPC_SHX_aby = $9E             ; unstable\r
-; OPC_AHX_aby = $9F             ; unstable\r
-\r
-OPC_LAX_izx = $A3\r
-OPC_LAX_zp  = $A7\r
-; OPC_LAX_imm = $AB             ; unstable\r
-OPC_LAX_abs = $AF\r
-\r
-; OPC_KIL   = $B2               ; unstable\r
-OPC_LAX_izy = $B3\r
-OPC_LAX_zpy = $B7\r
-OPC_LAS_aby = $BB\r
-OPC_LAX_aby = $BF\r
-\r
-; OPC_NOP_imm = $C2             ; doublet\r
-OPC_DCP_izx = $C3\r
-OPC_DCP_zp  = $C7\r
-OPC_AXS_imm = $CB\r
-OPC_DCP_abs = $CF\r
-\r
-; OPC_KIL   = $D2               ; unstable\r
-OPC_DCP_izy = $D3\r
-OPC_NOP_zpx = $D4\r
-OPC_DCP_zpx = $D7\r
-OPC_NOP_DA  = $DA\r
-OPC_DCP_aby = $DB\r
-OPC_NOP_abx = $DC\r
-OPC_DCP_abx = $DF\r
-\r
-; OPC_NOP_imm = $E2             ; doublet\r
-OPC_ISC_izx = $E3\r
-OPC_ISC_zp  = $E7\r
-; OPC_SBC_imm = $EB             ; doublet\r
-OPC_ISC_abs = $EF\r
-\r
-; OPC_KIL   = $F2               ; unstable\r
-OPC_ISC_izy = $F3\r
-OPC_NOP_zpx = $F4\r
-OPC_ISC_zpx = $F7\r
-OPC_NOP_FA  = $FA\r
-OPC_ISC_aby = $FB\r
-OPC_NOP_abx = $FC\r
-OPC_ISC_abx = $FF\r
-\r
-.endif\r
diff --git a/asminc/pce.inc b/asminc/pce.inc
deleted file mode 100644 (file)
index 623ab4d..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-;
-; PCE definitions. By Groepaz/Hitmem.
-;
-
-; FIXME: screen dimensions my change according to selected video mode
-screenrows      = (224/8)
-charsperline    = 61
-
-CH_HLINE        = 1
-CH_VLINE        = 2
-
-; huc6270 - Video Display Controller (VDC)
-
-VDC_MAWR        = 0             ; Memory Address Write Register
-VDC_MARR        = 1             ; Memory Address Read Register
-VDC_VWR         = 2             ; VRAM Write Register (write only)
-VDC_VRR         = 2             ; VRAM Read Register (read only)
-VDC_UNK03       = 3             ; (unknown)
-VDC_UNK04       = 4             ; (unknown)
-VDC_CR          = 5             ; Control Register
-VDC_RCR         = 6             ; Raster Counter Register
-VDC_BXR         = 7             ; Background X-Scroll Register
-VDC_BYR         = 8             ; Background Y-Scroll Register
-VDC_MWR         = 9             ; Memory-access Width Register
-VDC_HSR         = 10            ; Horizontal Sync Register
-VDC_HDR         = 11            ; Horizontal Display Register
-VDC_VPR         = 12            ; Vertical synchronous register
-VDC_VDW         = 13            ; Vertical display register
-VDC_VCR         = 14            ; Vertical display END position register
-VDC_DCR         = 15            ; (DMA) Control Register
-VDC_SOUR        = 16            ; (DMA) Source Register
-VDC_DESR        = 17            ; (DMA) Destination Register
-VDC_LENR        = 18            ; (DMA) Length Register
-VDC_SATB        = 19            ; Sprite Attribute Table
-
-; VDC port
-; Note: absolute addressing mode must be used when writing to this port
-
-VDC_CTRL        = $0000
-VDC_DATA_LO     = $0002
-VDC_DATA_HI     = $0003
-
-; huc6260 - Video Color Encoder (vce)
-
-; The DAC has a palette of 512 colours.
-; bitmap of the palette data is this: 0000000gggrrrbbb.
-; You can read and write the DAC-registers.
-
-VCE             = $0400         ; base
-
-VCE_CTRL        = $0400         ; write$00 to reset
-VCE_ADDR_LO     = $0402         ; LSB of byte offset into palette
-VCE_ADDR_HI     = $0403         ; MSB of byte offset into palette
-VCE_DATA_LO     = $0404         ; LSB of 16-bit palette data
-VCE_DATA_HI     = $0405         ; MSB of 16-bit palette data
-
-; programmable sound generator (PSG)
-
-PSG             = $0800         ; base
-
-PSG_CHAN_SELECT = $0800
-PSG_GLOBAL_PAN  = $0801
-PSG_FREQ_LO     = $0802
-PSG_FREQ_HI     = $0803
-PSG_CHAN_CTRL   = $0804
-PSG_CHAN_PAN    = $0805
-PSG_CHAN_DATA   = $0806
-PSG_NOISE       = $0807
-PSG_LFO_FREQ    = $0808
-PSG_LFO_CTRL    = $0809
-
-; timer
-
-TIMER           = $0c00         ; base
-
-TIMER_COUNT     = $0c00
-TIMER_CTRL      = $0c01
-
-JOY_CTRL        = $1000
-
-IRQ_MASK        = $1402
-IRQ_STATUS      = $1403
-
-CDR_MEM_DISABLE = $1803
-CDR_MEM_ENABLE  = $1807
-
-; Write VDC register
-.macro VREG arg1,arg2
-        st0     #arg1
-        st1     #<(arg2)
-        st2     #>(arg2)
-.endmacro
diff --git a/asminc/pet.inc b/asminc/pet.inc
deleted file mode 100644 (file)
index 1ebf391..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-;
-; PET generic definitions.
-;
-
-
-; ---------------------------------------------------------------------------
-; Zero page, Commodore stuff
-
-MEMSIZE         := $34          ; Size of memory installed
-TXTPTR          := $77          ; Pointer into BASIC source code
-TIME            := $8D          ; 60HZ clock
-KEY_COUNT       := $9E          ; Number of keys in input buffer
-RVS             := $9F          ; Reverse flag
-CURS_FLAG       := $A7          ; 1 = cursor off
-CURS_BLINK      := $A8          ; Blink counter
-CURS_CHAR       := $A9          ; Character under the cursor
-CURS_STATE      := $AA          ; Cursor blink state
-SCREEN_PTR      := $C4          ; Pointer to current char in text screen
-CURS_X          := $C6          ; Cursor column
-FNLEN           := $D1          ; Length of filename
-LFN             := $D2          ; Current Logical File Number
-SECADR          := $D3          ; Secondary address
-DEVNUM          := $D4          ; Device number
-SCR_LINELEN     := $D5          ; Screen line length
-CURS_Y          := $D8          ; Cursor row
-FNADR           := $DA          ; Pointer to file name
-
-BASIC_BUF       := $200         ; Location of command-line
-BASIC_BUF_LEN   = 81            ; Maximum length of command-line
-
-KEY_BUF         := $26F         ; Keyboard buffer
-
-;----------------------------------------------------------------------------
-; PET ROM type detection
-
-PET_DETECT      := $FFFB
-PET_2000        = $CA
-PET_3000        = $FC
-PET_4000        = $FD
-
-
-;----------------------------------------------------------------------------
-; Vector and other locations
-
-IRQVec          := $0090
-BRKVec          := $0092
-NMIVec          := $0094
-
-; ---------------------------------------------------------------------------
-; I/O: 6522 VIA2
-
-VIA             := $E840
-VIA_PRB         := $E840
-VIA_PRA         := $E841
-VIA_DDRB        := $E842
-VIA_DDRA        := $E843
-
-
diff --git a/asminc/plus4.inc b/asminc/plus4.inc
deleted file mode 100644 (file)
index 17e2505..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-;
-; Plus/4 generic definitions.
-;
-
-
-; ---------------------------------------------------------------------------
-; Zero page, Commodore stuff
-
-TMPPTR          := $22          ; Temporary ptr used by BASIC
-TXTPTR          := $3B          ; Pointer into BASIC source code
-TIME            := $A3          ; 60HZ clock
-FNAM_LEN        := $AB          ; Length of filename
-LFN             := $AC          ; Logical file number
-SECADR          := $AD          ; Secondary address
-DEVNUM          := $AE          ; Device number
-FNAM            := $AF          ; Pointer to filename for OPEN
-KEY_COUNT       := $EF          ; Number of keys in input buffer
-RVS             := $C2          ; Reverse flag
-CURS_X          := $CA          ; Cursor column
-CURS_Y          := $CD          ; Cursor row
-SCREEN_PTR      := $C8          ; Pointer to current char in text screen
-CRAM_PTR        := $EA          ; Pointer to current char in color RAM
-
-BASIC_BUF       := $200         ; Location of command-line
-BASIC_BUF_LEN   = 89            ; Maximum length of command-line
-
-FNBUF           := $25E         ; Buffer for filename
-FETCH           := $494         ; lda (zp),y from RAM
-CHARCOLOR       := $53B
-FKEY_COUNT      := $55D         ; Characters for function key
-FKEY_SPACE      := $55F         ; Function key definitions
-FKEY_ORIG       := $F3D2        ; Original definitions
-
-; ---------------------------------------------------------------------------
-; Kernal routines
-
-; Direct entries
-CLRSCR          := $D88B
-KBDREAD         := $D8C1
-
-; ---------------------------------------------------------------------------
-; Vector and other locations
-
-IRQVec          := $0314
-BRKVec          := $0316
-NMIVec          := $0318
-
-; ---------------------------------------------------------------------------
-; Screen size
-
-XSIZE           = 40
-YSIZE           = 25
-
-; ---------------------------------------------------------------------------
-; I/O
-
-TED_T1LO        := $FF00
-TED_T1HI        := $FF01
-TED_T2LO        := $FF02
-TED_T2HI        := $FF03
-TED_T3LO        := $FF04
-TED_T4HI        := $FF05
-TED_MULTI1      := $FF07
-TED_KBD         := $FF08
-TED_CURSHI      := $FF0C
-TED_CURSLO      := $FF0D
-TED_V1FRQLO     := $FF0E
-TED_V2FRQLO     := $FF0F
-TED_V2FRQHI     := $FF10
-TED_BGCOLOR     := $FF15
-TED_COLOR1      := $FF16
-TED_COLOR2      := $FF17
-TED_COLOR3      := $FF18
-TED_BORDERCOLOR := $FF19
-TED_VLINEHI     := $FF1C
-TED_VLINELO     := $FF1D
-TED_HPOS        := $FF1E
-TED_ROMSEL      := $FF3E
-TED_RAMSEL      := $FF3F
-
-; ---------------------------------------------------------------------------
-; RAM/ROM selection addresses
-
-ENABLE_ROM      := TED_ROMSEL
-ENABLE_RAM      := TED_RAMSEL
-
-
diff --git a/asminc/ser-error.inc b/asminc/ser-error.inc
deleted file mode 100644 (file)
index ff4e2b4..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-;****************************************************************************
-;*                                                                          *
-;*                              ser-error.inc                               *
-;*                                                                          *
-;*                        Serial communication API                          *
-;*                                                                          *
-;*                                                                          *
-;*                                                                          *
-;* (C) 2003-2012, Ullrich von Bassewitz                                     *
-;*                Roemerstrasse 52                                          *
-;*                D-70794 Filderstadt                                       *
-;* EMail:         uz@cc65.org                                               *
-;*                                                                          *
-;*                                                                          *
-;*This software is provided 'as-is', without any expressed or implied       *
-;*warranty.  In no event will the authors be held liable for any damages    *
-;*arising from the use of this software.                                    *
-;*                                                                          *
-;*Permission is granted to anyone to use this software for any purpose,     *
-;*including commercial applications, and to alter it and redistribute it    *
-;*freely, subject to the following restrictions:                            *
-;*                                                                          *
-;*1. The origin of this software must not be misrepresented; you must not   *
-;*   claim that you wrote the original software. If you use this software   *
-;*   in a product, an acknowledgment in the product documentation would be  *
-;*   appreciated but is not required.                                       *
-;*2. Altered source versions must be plainly marked as such, and must not   *
-;*   be misrepresented as being the original software.                      *
-;*3. This notice may not be removed or altered from any source              *
-;*   distribution.                                                          *
-;*                                                                          *
-;****************************************************************************
-
-
-
-;------------------------------------------------------------------------------
-; Error codes
-
-.enum
-        SER_ERR_OK                      ; Not an error - relax
-        SER_ERR_NO_DRIVER               ; No driver available
-        SER_ERR_CANNOT_LOAD             ; Error loading driver
-        SER_ERR_INV_DRIVER              ; Invalid driver
-        SER_ERR_NO_DEVICE               ; Device (hardware) not found
-        SER_ERR_BAUD_UNAVAIL            ; Baud rate not available
-        SER_ERR_NO_DATA                 ; Nothing to read
-        SER_ERR_OVERFLOW                ; No room in send buffer
-        SER_ERR_INIT_FAILED             ; Initialization failed
-        SER_ERR_INV_IOCTL               ; IOCTL not supported
-        SER_ERR_INSTALLED               ; A driver is already installed
-        SER_ERR_NOT_OPEN                ; Driver not open
-
-        SER_ERR_COUNT                   ; Special: Number of error codes
-.endenum
-
diff --git a/asminc/ser-kernel.inc b/asminc/ser-kernel.inc
deleted file mode 100644 (file)
index 3ddb7f3..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-;****************************************************************************
-;*                                                                          *
-;*                              ser-kernel.inc                              *
-;*                                                                          *
-;*                        Serial communication API                          *
-;*                                                                          *
-;*                                                                          *
-;*                                                                          *
-;*(C) 2003-2006, Ullrich von Bassewitz                                      *
-;*               Römerstrasse 52                                            *
-;*               D-70794 Filderstadt                                        *
-;*EMail:         uz@cc65.org                                                *
-;*                                                                          *
-;*                                                                          *
-;*This software is provided 'as-is', without any expressed or implied       *
-;*warranty.  In no event will the authors be held liable for any damages    *
-;*arising from the use of this software.                                    *
-;*                                                                          *
-;*Permission is granted to anyone to use this software for any purpose,     *
-;*including commercial applications, and to alter it and redistribute it    *
-;*freely, subject to the following restrictions:                            *
-;*                                                                          *
-;*1. The origin of this software must not be misrepresented; you must not   *
-;*   claim that you wrote the original software. If you use this software   *
-;*   in a product, an acknowledgment in the product documentation would be  *
-;*   appreciated but is not required.                                       *
-;*2. Altered source versions must be plainly marked as such, and must not   *
-;*   be misrepresented as being the original software.                      *
-;*3. This notice may not be removed or altered from any source              *
-;*   distribution.                                                          *
-;*                                                                          *
-;****************************************************************************
-
-
-
-;------------------------------------------------------------------------------
-; The driver header
-
-.struct SER_HDR
-        ID      .byte   3       ; Contains 0x73, 0x65, 0x72 ("ser")
-        VERSION .byte   1       ; Interface version
-        LIBREF  .addr           ; Library reference
-        JUMPTAB .struct
-            INSTALL     .addr   ; INSTALL routine
-            UNINSTALL   .addr   ; UNINSTALL routine
-            OPEN        .addr   ; OPEN routine
-            CLOSE       .addr   ; CLOSE routine
-            GET         .addr   ; GET routine
-            PUT         .addr   ; PUT routine
-            STATUS      .addr   ; STATUS routine
-            IOCTL       .addr   ; IOCTL routine
-            IRQ         .addr   ; IRQ routine
-        .endstruct
-.endstruct
-
-
-;------------------------------------------------------------------------------
-; The SER API version, stored SER_HDR::VERSION
-
-SER_API_VERSION         = $02
-
-;------------------------------------------------------------------------------
-; ser_params
-
-.struct SER_PARAMS
-        BAUDRATE        .byte           ; Baudrate
-        DATABITS        .byte           ; Number of data bits
-        STOPBITS        .byte           ; Number of stop bits
-        PARITY          .byte           ; Parity setting
-        HANDSHAKE       .byte           ; Type of handshake to use
-.endstruct
-
-;------------------------------------------------------------------------------
-; Serial parameters
-
-; Baudrate
-SER_BAUD_45_5           =       $00
-SER_BAUD_50             =       $01
-SER_BAUD_75             =       $02
-SER_BAUD_110            =       $03
-SER_BAUD_134_5          =       $04
-SER_BAUD_150            =       $05
-SER_BAUD_300            =       $06
-SER_BAUD_600            =       $07
-SER_BAUD_1200           =       $08
-SER_BAUD_1800           =       $09
-SER_BAUD_2400           =       $0A
-SER_BAUD_3600           =       $0B
-SER_BAUD_4800           =       $0C
-SER_BAUD_7200           =       $0D
-SER_BAUD_9600           =       $0E
-SER_BAUD_19200          =       $0F
-SER_BAUD_38400          =       $10
-SER_BAUD_57600          =       $11
-SER_BAUD_115200         =       $12
-SER_BAUD_230400         =       $13
-SER_BAUD_31250          =       $14
-SER_BAUD_62500          =       $15
-SER_BAUD_56_875         =       $16
-
-; Data bit settings
-SER_BITS_5              =       $00
-SER_BITS_6              =       $01
-SER_BITS_7              =       $02
-SER_BITS_8              =       $03
-
-; Stop bit settings
-SER_STOP_1              =       $00
-SER_STOP_2              =       $01
-
-; Parity
-SER_PAR_NONE            =       $00
-SER_PAR_ODD             =       $01
-SER_PAR_EVEN            =       $02
-SER_PAR_MARK            =       $03
-SER_PAR_SPACE           =       $04
-
-; Handshake
-SER_HS_NONE             =       $00    ; No handshake
-SER_HS_HW               =       $01    ; Hardware (RTS/CTS) handshake
-SER_HS_SW               =       $02    ; Software handshake
-
-; Bit masks to mask out things from the status returned by ser_status
-SER_STATUS_PE           =       $01     ; Parity error
-SER_STATUS_FE           =       $02     ; Framing error
-SER_STATUS_OE           =       $04     ; Overrun error
-SER_STATUS_DCD          =       $20     ; NOT data carrier detect
-SER_STATUS_DSR          =       $40     ; NOT data set ready
-
-;------------------------------------------------------------------------------
-; Variables
-
-        .global _ser_drv                         ; Pointer to driver
-
-;------------------------------------------------------------------------------
-; Driver entry points
-
-        .global ser_install
-        .global ser_uninstall
-        .global ser_open
-        .global ser_close
-        .global ser_get
-        .global ser_put
-        .global ser_status
-        .global ser_ioctl
-        .global ser_irq
-
-;------------------------------------------------------------------------------
-; C callable functions
-
-        .global _ser_load_driver
-        .global _ser_unload
-        .global _ser_install
-        .global _ser_uninstall
-        .global _ser_open
-        .global _ser_close
-        .global _ser_get
-        .global _ser_put
-        .global _ser_status
-        .global _ser_ioctl
-
-        .global _ser_clear_ptr
-
diff --git a/asminc/signal.inc b/asminc/signal.inc
deleted file mode 100644 (file)
index ebde07e..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-;/*****************************************************************************/
-;/*                                                                           */
-;/*                                signal.inc                                 */
-;/*                                                                           */
-;/*                        Signal handling definitions                        */
-;/*                                                                           */
-;/*                                                                           */
-;/*                                                                           */
-;/* (C) 2002      Ullrich von Bassewitz                                       */
-;/*               Wacholderweg 14                                             */
-;/*               D-70597 Stuttgart                                           */
-;/* EMail:        uz@musoftware.de                                            */
-;/*                                                                           */
-;/*                                                                           */
-;/* This software is provided 'as-is', without any expressed or implied       */
-;/* warranty.  In no event will the authors be held liable for any damages    */
-;/* arising from the use of this software.                                    */
-;/*                                                                           */
-;/* Permission is granted to anyone to use this software for any purpose,     */
-;/* including commercial applications, and to alter it and redistribute it    */
-;/* freely, subject to the following restrictions:                            */
-;/*                                                                           */
-;/* 1. The origin of this software must not be misrepresented; you must not   */
-;/*    claim that you wrote the original software. If you use this software   */
-;/*    in a product, an acknowledgment in the product documentation would be  */
-;/*    appreciated but is not required.                                       */
-;/* 2. Altered source versions must be plainly marked as such, and must not   */
-;/*    be misrepresented as being the original software.                      */
-;/* 3. This notice may not be removed or altered from any source              */
-;/*    distribution.                                                          */
-;/*                                                                           */
-;/*****************************************************************************/
-
-
-
-; Standard signal handling functions
-SIG_ERR         = $0000
-
-; Signal numbers
-SIGABRT         = 0
-SIGFPE          = 1
-SIGILL          = 2
-SIGINT          = 3
-SIGSEGV         = 4
-SIGTERM         = 5
-SIGCOUNT        = 6             ; Number of signals
-
-; Table with signal handlers (asm code only)
-.global         sigtable
-
-; Function declarations
-.global         __sig_ign
-.global         __sig_dfl
-.global         _signal
-.global         _raise
-
-
diff --git a/asminc/smc.inc b/asminc/smc.inc
deleted file mode 100644 (file)
index 383417c..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-; smc.mac\r
-; ca65 Macro-Pack for Self Modifying Code (SMC)\r
-;\r
-; (c) Christian Krüger, latest change: 09-Nov-2011\r
-;\r
-; This software is provided 'as-is', without any expressed or implied\r
-; warranty.  In no event will the authors be held liable for any damages\r
-; arising from the use of this software.\r
-;\r
-; Permission is granted to anyone to use this software for any purpose,\r
-; including commercial applications, and to alter it and redistribute it\r
-; freely, subject to the following restrictions:\r
-;\r
-; 1. The origin of this software must not be misrepresented; you must not\r
-;    claim that you wrote the original software. If you use this software\r
-;    in a product, an acknowledgment in the product documentation would be\r
-;    appreciated but is not required.\r
-; 2. Altered source versions must be plainly marked as such, and must not\r
-;    be misrepresented as being the original software.\r
-; 3. This notice may not be removed or altered from any source\r
-;    distribution.\r
-;\r
-\r
-.define _SMCDesignator  .mid(0, .tcount(label) - 1, label) .ident(.concat(.string(.right(1, label)), "_SMC"))\r
-.define _SMCAlias       .mid(0, .tcount(alias) - 1, alias) .ident(.concat(.string(.right(1, alias)), "_SMC"))\r
-.define SMC_AbsAdr      $FADE\r
-.define SMC_ZpAdr       $00\r
-.define SMC_Opcode      nop\r
-.define SMC_Value       $42\r
-\r
-.macro SMC_OperateOnValue opcode, label\r
-        opcode _SMCDesignator+1\r
-.endmacro\r
-\r
-.macro SMC_OperateOnLowByte opcode, label\r
-        SMC_OperateOnValue opcode, label\r
-.endmacro\r
-\r
-.macro SMC_OperateOnHighByte opcode, label\r
-        opcode _SMCDesignator + 2\r
-.endmacro\r
-\r
-.macro SMC_Import alias\r
-.import _SMCAlias\r
-.endmacro\r
-\r
-.macro SMC_Export alias, label\r
-.export _SMCAlias := _SMCDesignator\r
-.endmacro\r
-\r
-.macro  SMC     label, statement\r
-_SMCDesignator: statement\r
-.endmacro\r
-\r
-.macro SMC_TransferOpcode       label, opcode, register\r
-.if .paramcount = 2 .or .match ({register}, a)\r
-        lda #opcode\r
-        sta _SMCDesignator\r
-.elseif .match ({register}, x)\r
-        ldx #opcode\r
-        stx _SMCDesignator\r
-.elseif .match ({register}, y)\r
-        ldy #opcode\r
-        sty _SMCDesignator\r
-.endif\r
-.endmacro\r
-\r
-.macro SMC_LoadOpcode   label, register\r
-.if .paramcount = 1 .or .match ({register}, a)\r
-        lda _SMCDesignator\r
-.elseif .match ({register}, x)\r
-        ldx _SMCDesignator\r
-.elseif .match ({register}, y)\r
-        ldy _SMCDesignator\r
-.endif\r
-.endmacro\r
-\r
-.macro SMC_StoreOpcode  label, register\r
-.if .paramcount = 1 .or .match ({register}, a)\r
-        sta _SMCDesignator\r
-.elseif .match ({register}, x)\r
-        stx _SMCDesignator\r
-.elseif .match ({register}, y)\r
-        sty _SMCDesignator\r
-.endif\r
-.endmacro\r
-\r
-.macro SMC_ChangeBranch         label, destination, register\r
-.if .paramcount = 2 .or .match ({register}, a)\r
-        lda #(destination - _SMCDesignator -2)\r
-        sta _SMCDesignator+1\r
-.elseif .match ({register}, x)\r
-        ldx #(destination - _SMCDesignator - 2)\r
-        stx _SMCDesignator+1\r
-.elseif .match ({register}, y)\r
-        ldy #(destination - _SMCDesignator - 2)\r
-        sty _SMCDesignator+1\r
-.endif\r
-.endmacro\r
-\r
-.macro SMC_TransferValue        label, value, register\r
-.if .paramcount = 2 .or .match ({register}, a)\r
-        lda value\r
-        sta _SMCDesignator+1\r
-.elseif .match ({register}, x)\r
-        ldx value\r
-        stx _SMCDesignator+1\r
-.elseif .match ({register}, y)\r
-        ldy value\r
-        sty _SMCDesignator+1\r
-.endif\r
-.endmacro\r
-\r
-.macro SMC_LoadValue    label, register\r
-.if .paramcount = 1 .or .match ({register}, a)\r
-        lda _SMCDesignator+1\r
-.elseif .match ({register}, x)\r
-        ldx _SMCDesignator+1\r
-.elseif .match ({register}, y)\r
-        ldy _SMCDesignator+1\r
-.endif\r
-.endmacro\r
-\r
-.macro SMC_StoreValue   label, register\r
-.if .paramcount = 1 .or .match ({register}, a)\r
-        sta _SMCDesignator+1\r
-.elseif .match ({register}, x)\r
-        stx _SMCDesignator+1\r
-.elseif .match ({register}, y)\r
-        sty _SMCDesignator+1\r
-.endif\r
-.endmacro\r
-\r
-\r
-.macro SMC_TransferLowByte      label, value, register\r
-SMC_TransferValue label, value, register\r
-.endmacro\r
-\r
-.macro SMC_LoadLowByte  label, register\r
-SMC_LoadValue label, register\r
-.endmacro\r
-\r
-.macro SMC_StoreLowByte label, register\r
-SMC_StoreValue label, register\r
-.endmacro\r
-\r
-.macro SMC_TransferHighByte     label, value, register\r
-.if .paramcount = 2 .or .match ({register}, a)\r
-        lda value\r
-        sta _SMCDesignator+2\r
-.elseif .match ({register}, x)\r
-        ldx value\r
-        stx _SMCDesignator+2\r
-.elseif .match ({register}, y)\r
-        ldy value\r
-        sty _SMCDesignator+2\r
-.endif\r
-.endmacro\r
-\r
-.macro SMC_LoadHighByte label, register\r
-.if .paramcount = 1 .or .match ({register}, a)\r
-        lda _SMCDesignator+2\r
-.elseif .match ({register}, x)\r
-        ldx _SMCDesignator+2\r
-.elseif .match ({register}, y)\r
-        ldy _SMCDesignator+2\r
-.endif\r
-.endmacro\r
-\r
-.macro SMC_StoreHighByte        label, register\r
-.if .paramcount = 1 .or .match ({register}, a)\r
-        sta _SMCDesignator+2\r
-.elseif .match ({register}, x)\r
-        stx _SMCDesignator+2\r
-.elseif .match ({register}, y)\r
-        sty _SMCDesignator+2\r
-.endif\r
-.endmacro\r
-\r
-.macro SMC_TransferAddressSingle        label, address, register\r
-.if .paramcount = 2 .or .match ((register), a)\r
-        .if (.match (.left (1, {address}), #))\r
-                ; immediate mode\r
-                lda #<(.right (.tcount ({address})-1, {address}))\r
-                sta _SMCDesignator+1\r
-                lda #>(.right (.tcount ({address})-1, {address}))\r
-                sta _SMCDesignator+2\r
-        .else\r
-                ; assume absolute or zero page\r
-                lda address\r
-                sta _SMCDesignator+1\r
-                lda 1+(address)\r
-                sta _SMCDesignator+2\r
-        .endif\r
-.elseif .match ((register), x)\r
-        .if (.match (.left (1, {address}), #))\r
-                ; immediate mode\r
-                ldx #<(.right (.tcount ({address})-1, {address}))\r
-                stx _SMCDesignator+1\r
-                ldx #>(.right (.tcount ({address})-1, {address}))\r
-                stx _SMCDesignator+2\r
-        .else\r
-                ; assume absolute or zero page\r
-                ldx address\r
-                stx _SMCDesignator+1\r
-                ldx 1+(address)\r
-                stx _SMCDesignator+2\r
-        .endif\r
-.elseif .match ((register), y)\r
-        .if (.match (.left (1, {address}), #))\r
-                ; immediate mode\r
-                ldy #<(.right (.tcount ({address})-1, {address}))\r
-                sty _SMCDesignator+1\r
-                ldy #>(.right (.tcount ({address})-1, {address}))\r
-                sty _SMCDesignator+2\r
-        .else\r
-                ; assume absolute or zero page\r
-                ldy address\r
-                sty _SMCDesignator+1\r
-                ldy 1+(address)\r
-                sty _SMCDesignator+2\r
-        .endif\r
-.endif\r
-.endmacro\r
-\r
-.macro SMC_TransferAddress      label, address\r
-.if (.match (.left (1, {address}), #))\r
-        ; immediate mode\r
-        lda #<(.right (.tcount ({address})-1, {address}))\r
-        sta _SMCDesignator+1\r
-        ldx #>(.right (.tcount ({address})-1, {address}))\r
-        stx _SMCDesignator+2\r
-.else\r
-        ; assume absolute or zero page\r
-        lda {address}\r
-        sta _SMCDesignator+1\r
-        ldx 1+{address}\r
-        stx _SMCDesignator)+2\r
-.endif\r
-.endmacro\r
-\r
-.macro SMC_StoreAddress label\r
-        sta _SMCDesignator+1\r
-        stx _SMCDesignator+2\r
-.endmacro\r
diff --git a/asminc/stdio.inc b/asminc/stdio.inc
deleted file mode 100644 (file)
index 18a7541..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-;*****************************************************************************/
-;*                                                                           */
-;*                                 stdio.inc                                 */
-;*                                                                           */
-;*                      Mirror definitions for stdio.h                       */
-;*                                                                           */
-;*                                                                           */
-;*                                                                           */
-;* (C) 2003-2005, Ullrich von Bassewitz                                      */
-;*                Römerstrasse 52                                            */
-;*                D-70794 Filderstadt                                        */
-;* EMail:         uz@cc65.org                                                */
-;*                                                                           */
-;*                                                                           */
-;* This software is provided 'as-is', without any expressed or implied       */
-;* warranty.  In no event will the authors be held liable for any damages    */
-;* arising from the use of this software.                                    */
-;*                                                                           */
-;* Permission is granted to anyone to use this software for any purpose,     */
-;* including commercial applications, and to alter it and redistribute it    */
-;* freely, subject to the following restrictions:                            */
-;*                                                                           */
-;* 1. The origin of this software must not be misrepresented; you must not   */
-;*    claim that you wrote the original software. If you use this software   */
-;*    in a product, an acknowledgment in the product documentation would be  */
-;*    appreciated but is not required.                                       */
-;* 2. Altered source versions must be plainly marked as such, and must not   */
-;*    be misrepresented as being the original software.                      */
-;* 3. This notice may not be removed or altered from any source              */
-;*    distribution.                                                          */
-;*                                                                           */
-;*****************************************************************************/
-
-
-
-;----------------------------------------------------------------------------
-; Constants
-
-_IOFBF          = 0
-_IOLBF          = 1
-_IONBF          = 2
-BUFSIZ          = 256
-EOF             = -1
-.if .defined(__APPLE2__)
-FILENAME_MAX    = 64+1
-.elseif .defined(__ATARI__)
-FILENAME_MAX    = 12+1
-.elseif .defined(__LUNIX__)
-FILENAME_MAX    = 80+1
-.else
-FILENAME_MAX    = 16+1
-.endif
-L_tmpnam        = FILENAME_MAX
-SEEK_CUR        = 0
-SEEK_END        = 1
-SEEK_SET        = 2
-TMP_MAX         = 256
-
-; Maximum number of open files (size of the file table)
-FOPEN_MAX       = 8
-
-;----------------------------------------------------------------------------
-; External variables
-
-        .global _stdin
-        .global _stdout
-        .global _stderr
-
-
-
diff --git a/asminc/supervision.inc b/asminc/supervision.inc
deleted file mode 100644 (file)
index a75fb02..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-; supervision symbols
-
-;  supervision 65c02s
-; in cc65 up to 2.9.1 65c02 means 65c02s
-.pc02
-
-lcd_addr = $4000
-LCD_LINESIZE = $30
-LCD_WIDTH = 160
-LCD_HEIGHT = 160
-; 2 bit per pixel, packed
-
-lcd_width = $2000
-lcd_height = $2001
-lcd_xpos = $2002 ; in pixel, bit 0+1 not used
-lcd_ypos = $2003 ; weird
-
-sv_port_r = $2021
-sv_port_w = $2022
-
-sv_timer_count = $2023
-; read for quitting
-sv_timer_quit = $2024
-
-; bit 0 timer, bit 1 dma
-sv_irq_source = $2027
-SV_IRQ_REQUEST_TIMER = 1
-SV_IRQ_REQUEST_DMA = 2
-
-; bit 5,6,7 select bank at 0x8000
-sv_bank = $2026
-SV_NMI_ENABLE_ON = 1
-SV_IRQ_ENABLE_TIMER = 2
-SV_IRQ_ENABLE_DMA = 4
-SV_LCD_ON = 8
-SV_TIMER_MODE_240Hz = $10 ; else 15360
-
-
-; low activ/pressed
-sv_control = $2020
-SV_RIGHT = 1
-SV_LEFT = 2
-SV_DOWN = 4
-SV_UP = 8
-SV_BUTTONB = $10
-SV_BUTTONA = $20
-SV_SELECT = $40
-SV_START = $80
-
-; frequency=125000/counter
-sv_audio_right_counter = $2010 ;word
-sv_audio_left_counter = $2014
-SV_AUDIO_ON =$40
-;bits 0..3 volume
-; bit 4 ?
-; bit 5 ?
-sv_audio_right_control = $2012
-sv_audio_left_control = $2016
-; write activates tone for x/60 sec (0 means 256)
-sv_audio_right_timer = $2013
-sv_audio_left_timer = $2017
-
-
-;read for irq quitting
-sv_dma_quit = $2025
-sv_dma_on = $201c
-; bit 7 true start, false stop
-sv_dma_start = $2018 ; word
-sv_dma_size = $201a ; *32 samples
-sv_dma_control = $201b
-; bit 0,1 speed: 0 15360, 11 15360/4
-; bit 2,3 volume: 0 silent, 11 loud
-
-sv_noise_volume = $2028 ; and frequency
-sv_noise_timer = $2029
-sv_noise_control = $202a
diff --git a/asminc/tgi-error.inc b/asminc/tgi-error.inc
deleted file mode 100644 (file)
index a4559bb..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-;*****************************************************************************/
-;*                                                                           */
-;*                                 tgi-error.inc                             */
-;*                                                                           */
-;*                                TGI error codes                            */
-;*                                                                           */
-;*                                                                           */
-;*                                                                           */
-;* (C) 2002-2012, Ullrich von Bassewitz                                      */
-;*                Roemerstrasse 52                                           */
-;*                D-70794 Filderstadt                                        */
-;* EMail:         uz@cc65.org                                                */
-;*                                                                           */
-;*                                                                           */
-;* This software is provided 'as-is', without any expressed or implied       */
-;* warranty.  In no event will the authors be held liable for any damages    */
-;* arising from the use of this software.                                    */
-;*                                                                           */
-;* Permission is granted to anyone to use this software for any purpose,     */
-;* including commercial applications, and to alter it and redistribute it    */
-;* freely, subject to the following restrictions:                            */
-;*                                                                           */
-;* 1. The origin of this software must not be misrepresented; you must not   */
-;*    claim that you wrote the original software. If you use this software   */
-;*    in a product, an acknowledgment in the product documentation would be  */
-;*    appreciated but is not required.                                       */
-;* 2. Altered source versions must be plainly marked as such, and must not   */
-;*    be misrepresented as being the original software.                      */
-;* 3. This notice may not be removed or altered from any source              */
-;*    distribution.                                                          */
-;*                                                                           */
-;*****************************************************************************/
-
-
-
-; Error constants
-.enum
-        TGI_ERR_OK              ; No error
-        TGI_ERR_NO_DRIVER       ; No driver available
-        TGI_ERR_CANNOT_LOAD     ; Error loading driver or font
-        TGI_ERR_INV_DRIVER      ; Invalid driver
-        TGI_ERR_INV_MODE        ; Mode not supported by driver
-        TGI_ERR_INV_ARG         ; Invalid function argument
-        TGI_ERR_INV_FUNC        ; Function not supported
-        TGI_ERR_INV_FONT        ; Font file is invalid
-        TGI_ERR_NO_RES          ; Out of resources (memory, handles, ...)
-        TGI_ERR_UNKNOWN         ; Unknown error
-        TGI_ERR_INSTALLED       ; A driver is already installed
-
-        TGI_ERR_COUNT           ; Special: Number of error messages
-.endenum
-
diff --git a/asminc/tgi-kernel.inc b/asminc/tgi-kernel.inc
deleted file mode 100644 (file)
index e9f2f6a..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-;*****************************************************************************/
-;*                                                                           */
-;*                                tgi-kernel.inc                             */
-;*                                                                           */
-;*                             TGI kernel interface                          */
-;*                                                                           */
-;*                                                                           */
-;*                                                                           */
-;* (C) 2002-2012, Ullrich von Bassewitz                                      */
-;*                Roemerstrasse 52                                           */
-;*                D-70794 Filderstadt                                        */
-;* EMail:         uz@cc65.org                                                */
-;*                                                                           */
-;*                                                                           */
-;* This software is provided 'as-is', without any expressed or implied       */
-;* warranty.  In no event will the authors be held liable for any damages    */
-;* arising from the use of this software.                                    */
-;*                                                                           */
-;* Permission is granted to anyone to use this software for any purpose,     */
-;* including commercial applications, and to alter it and redistribute it    */
-;* freely, subject to the following restrictions:                            */
-;*                                                                           */
-;* 1. The origin of this software must not be misrepresented; you must not   */
-;*    claim that you wrote the original software. If you use this software   */
-;*    in a product, an acknowledgment in the product documentation would be  */
-;*    appreciated but is not required.                                       */
-;* 2. Altered source versions must be plainly marked as such, and must not   */
-;*    be misrepresented as being the original software.                      */
-;* 3. This notice may not be removed or altered from any source              */
-;*    distribution.                                                          */
-;*                                                                           */
-;*****************************************************************************/
-
-
-
-;------------------------------------------------------------------------------
-; The driver header
-
-.struct TGI_HDR
-        ID                  .byte   3   ; Contains 0x74, 0x67, 0x69 ("tgi")
-        VERSION             .byte   1   ; Interface version
-        LIBREF              .addr       ; Library reference
-        VARS                .struct
-            XRES            .word   1   ; X resolution
-            YRES            .word   1   ; Y resolution
-            COLORCOUNT      .byte   1   ; Number of available colors
-            PAGECOUNT       .byte   1   ; Number of screens available
-            FONTWIDTH       .byte   1   ; System font width in pixel
-            FONTHEIGHT      .byte   1   ; System font height in pixel
-            ASPECTRATIO     .word   1   ; Fixed point 8.8 format
-            FLAGS           .byte   1   ; TGI driver flags
-        .endstruct
-        JUMPTAB             .struct
-            INSTALL         .addr       ; INSTALL routine
-            UNINSTALL       .addr       ; UNINSTALL routine
-            INIT            .addr       ; INIT routine
-            DONE            .addr       ; DONE routine
-            GETERROR        .addr       ; GETERROR routine
-            CONTROL         .addr       ; CONTROL routine
-            CLEAR           .addr       ; CLEAR routine
-            SETVIEWPAGE     .addr       ; SETVIEWPAGE routine
-            SETDRAWPAGE     .addr       ; SETDRAWPAGE routine
-            SETCOLOR        .addr       ; SETCOLOR routine
-            SETPALETTE      .addr       ; SETPALETTE routine
-            GETPALETTE      .addr       ; GETPALETTE routine
-            GETDEFPALETTE   .addr       ; GETDEFPALETTE routine
-            SETPIXEL        .addr       ; SETPIXEL routine
-            GETPIXEL        .addr       ; GETPIXEL routine
-            LINE            .addr       ; LINE routine
-            BAR             .addr       ; BAR routine
-            TEXTSTYLE       .addr       ; TEXTSTYLE routine
-            OUTTEXT         .addr       ; OUTTEXT routine
-            IRQ             .addr       ; IRQ routine
-        .endstruct
-.endstruct
-
-;------------------------------------------------------------------------------
-; The TGI API version, stored at TGI_HDR_VERSION
-
-TGI_API_VERSION         = $05
-
-;------------------------------------------------------------------------------
-; Bitmapped tgi driver flags, stored in TGI_HDR::VARS::FLAGS.
-; Beware: Some of the bits are tested using the BIT instruction, so do not
-; change the values without checking the code!
-
-TGI_BM_FONT_FINESCALE   = $80           ; Bitmap fonts are fine grained scalable
-
-;------------------------------------------------------------------------------
-; Text constants
-
-TGI_FONT_BITMAP         = 0
-TGI_FONT_VECTOR         = 1
-
-TGI_TEXT_HORIZONTAL     = 0
-TGI_TEXT_VERTICAL       = 1
-
-;----------------------------------------------------------------------------
-; Results of tgi_outcode
-
-TGI_CLIP_NONE           = $00
-TGI_CLIP_LEFT           = $01
-TGI_CLIP_RIGHT          = $02
-TGI_CLIP_BOTTOM         = $04
-TGI_CLIP_TOP            = $08
-
-;------------------------------------------------------------------------------
-; ASM accessible color constants
-
-        .global tgi_color_black:zp      ; Target-specific value for black
-        .global tgi_color_white:zp      ; Target-specific value for white
-
-;------------------------------------------------------------------------------
-; C accessible variables
-
-        .global _tgi_drv                ; Pointer to driver
-        .global _tgi_error              ; Last error code
-        .global _tgi_gmode              ; Flag: graphics mode active
-        .global _tgi_curx               ; Current drawing cursor X
-        .global _tgi_cury               ; Current drawing cursor Y
-        .global _tgi_color              ; Current drawing color
-        .global _tgi_font               ; Which font to use
-        .global _tgi_textdir            ; Current text direction
-        .global _tgi_vectorfont         ; Pointer to vector font
-        .global _tgi_textscalew         ; Text magnification for the width
-        .global _tgi_textscaleh         ; Text magnification for the height
-        .global _tgi_charwidth          ; Width of scaled system font char
-        .global _tgi_charheight         ; Height of scaled system font char
-        .global _tgi_xres               ; X resolution of the current mode
-        .global _tgi_yres               ; Y resolution of the current mode
-        .global _tgi_xmax               ; Maximum X coordinate
-        .global _tgi_ymax               ; Maximum Y coordinate
-        .global _tgi_colorcount         ; Number of available colors
-        .global _tgi_pagecount          ; Number of available screen pages
-        .global _tgi_fontwidth          ; System font width
-        .global _tgi_fontheight         ; System font height
-        .global _tgi_aspectratio        ; Aspect ratio, fixed point 8.8
-        .global _tgi_flags              ; TGI driver flags
-
-;------------------------------------------------------------------------------
-; ASM accessible variables
-
-        .global tgi_clip_x1             ; Coordinate for line clipper
-        .global tgi_clip_y1             ; Coordinate for line clipper
-        .global tgi_clip_x2             ; Coordinate for line clipper
-        .global tgi_clip_y2             ; Coordinate for line clipper
-
-;------------------------------------------------------------------------------
-; Driver entry points
-
-        .global tgi_install
-        .global tgi_uninstall
-        .global tgi_init
-        .global tgi_done
-        .global tgi_geterror
-        .global tgi_control
-        .global tgi_clear
-        .global tgi_setviewpage
-        .global tgi_setdrawpage
-        .global tgi_setcolor
-        .global tgi_setpalette
-        .global tgi_getpalette
-        .global tgi_getdefpalette
-        .global tgi_setpixel
-        .global tgi_getpixel
-        .global tgi_line
-        .global tgi_bar
-        .global tgi_textstyle
-        .global tgi_outtext
-
-;------------------------------------------------------------------------------
-; ASM functions
-
-        .global tgi_clear_ptr
-        .global tgi_clippedline
-        .global tgi_curtoxy
-        .global tgi_getset
-        .global tgi_imulround
-        .global tgi_inv_arg
-        .global tgi_inv_drv
-        .global tgi_linepop
-        .global tgi_outcode
-        .global tgi_popxy
-        .global tgi_popxy2
-        .global tgi_set_ptr
-
-;------------------------------------------------------------------------------
-; C callable functions
-
-        .global _tgi_arc
-        .global _tgi_bar
-        .global _tgi_circle
-        .global _tgi_clear
-        .global _tgi_done
-        .global _tgi_ellipse
-        .global _tgi_getaspectratio
-        .global _tgi_getcolor
-        .global _tgi_getcolorcount
-        .global _tgi_getdefpalette
-        .global _tgi_geterror
-        .global _tgi_geterrormsg
-        .global _tgi_getmaxcolor
-        .global _tgi_getmaxx
-        .global _tgi_getmaxy
-        .global _tgi_getpagecount
-        .global _tgi_getpalette
-        .global _tgi_getpixel
-        .global _tgi_gettextheight
-        .global _tgi_gettextwidth
-        .global _tgi_getxres
-        .global _tgi_getyres
-        .global _tgi_gotoxy
-        .global _tgi_imulround
-        .global _tgi_init
-        .global _tgi_install
-        .global _tgi_install_vectorfont
-        .global _tgi_ioctl
-        .global _tgi_line
-        .global _tgi_lineto
-        .global _tgi_load_driver
-        .global _tgi_outtext
-        .global _tgi_outtextxy
-        .global _tgi_pieslice
-        .global _tgi_setaspectratio
-        .global _tgi_setcolor
-        .global _tgi_setdrawpage
-        .global _tgi_setpalette
-        .global _tgi_setpixel
-        .global _tgi_settextdir
-        .global _tgi_settextscale
-        .global _tgi_settextstyle
-        .global _tgi_setviewpage
-        .global _tgi_uninstall
-        .global _tgi_unload
diff --git a/asminc/tgi-vectorfont.inc b/asminc/tgi-vectorfont.inc
deleted file mode 100644 (file)
index ffe6ac6..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-;*****************************************************************************/
-;*                                                                           */
-;*                            tgi-vectorfont.inc                             */
-;*                                                                           */
-;*                        TGI vector font definitions                        */
-;*                                                                           */
-;*                                                                           */
-;*                                                                           */
-;* (C) 2009,      Ullrich von Bassewitz                                      */
-;*                Roemerstrasse 52                                           */
-;*                D-70794 Filderstadt                                        */
-;* EMail:         uz@cc65.org                                                */
-;*                                                                           */
-;*                                                                           */
-;* This software is provided 'as-is', without any expressed or implied       */
-;* warranty.  In no event will the authors be held liable for any damages    */
-;* arising from the use of this software.                                    */
-;*                                                                           */
-;* Permission is granted to anyone to use this software for any purpose,     */
-;* including commercial applications, and to alter it and redistribute it    */
-;* freely, subject to the following restrictions:                            */
-;*                                                                           */
-;* 1. The origin of this software must not be misrepresented; you must not   */
-;*    claim that you wrote the original software. If you use this software   */
-;*    in a product, an acknowledgment in the product documentation would be  */
-;*    appreciated but is not required.                                       */
-;* 2. Altered source versions must be plainly marked as such, and must not   */
-;*    be misrepresented as being the original software.                      */
-;* 3. This notice may not be removed or altered from any source              */
-;*    distribution.                                                          */
-;*                                                                           */
-;*****************************************************************************/
-
-
-
-;------------------------------------------------------------------------------
-; Vectorfont constants
-
-TGI_VF_VERSION          = $00                   ; File version number
-TGI_VF_FIRSTCHAR        = $20                   ; First char in file
-TGI_VF_LASTCHAR         = $7E                   ; Last char in file
-TGI_VF_CCOUNT           = (TGI_VF_LASTCHAR - TGI_VF_FIRSTCHAR + 1)
-
-;------------------------------------------------------------------------------
-; TCH file header and font data structures
-
-; TCH file header
-.struct TGI_VF_HDR
-        MAGIC           .byte   3               ; "TCH"
-        VERSION         .byte   1               ; Version number
-        SIZE            .word   1               ; Font data size
-.endstruct
-
-; Font data loaded directly from file
-.struct TGI_VECTORFONT
-        TOP             .byte                   ; Height of char
-        BOTTOM          .byte                   ; Descender          
-        HEIGHT          .byte                   ; Maximum char height
-        WIDTHS          .byte   ::TGI_VF_CCOUNT ; Char widths
-        CHARS           .word   ::TGI_VF_CCOUNT ; Pointer to character defs
-        OPS             .byte                   ; Actually dynamic
-.endstruct
-
-;------------------------------------------------------------------------------
-; C callable functions
-
-        .global _tgi_vectorchar
-
-
-
diff --git a/asminc/time.inc b/asminc/time.inc
deleted file mode 100644 (file)
index 1685847..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-;/*****************************************************************************/
-;/*                                                                           */
-;/*                                 time.inc                                  */
-;/*                                                                           */
-;/*                              Date and time                                */
-;/*                                                                           */
-;/*                                                                           */
-;/*                                                                           */
-;/* (C) 2009      Ullrich von Bassewitz                                       */
-;/*               Roemerstrasse 52                                            */
-;/*               D-70794 Filderstadt                                         */
-;/* EMail:        uz@cc65.org                                                 */
-;/*                                                                           */
-;/*                                                                           */
-;/* This software is provided 'as-is', without any expressed or implied       */
-;/* warranty.  In no event will the authors be held liable for any damages    */
-;/* arising from the use of this software.                                    */
-;/*                                                                           */
-;/* Permission is granted to anyone to use this software for any purpose,     */
-;/* including commercial applications, and to alter it and redistribute it    */
-;/* freely, subject to the following restrictions:                            */
-;/*                                                                           */
-;/* 1. The origin of this software must not be misrepresented; you must not   */
-;/*    claim that you wrote the original software. If you use this software   */
-;/*    in a product, an acknowledgment in the product documentation would be  */
-;/*    appreciated but is not required.                                       */
-;/* 2. Altered source versions must be plainly marked as such, and must not   */
-;/*    be misrepresented as being the original software.                      */
-;/* 3. This notice may not be removed or altered from any source              */
-;/*    distribution.                                                          */
-;/*                                                                           */
-;/*****************************************************************************/
-
-
-
-;------------------------------------------------------------------------------
-; Struct tm - must match the struct defined in time.h
-
-.struct tm
-        tm_sec      .word
-        tm_min      .word
-        tm_hour     .word
-        tm_mday     .word
-        tm_mon      .word
-        tm_year     .word
-        tm_wday     .word
-        tm_yday     .word
-        tm_isdst    .word
-.endstruct
-
-
-;------------------------------------------------------------------------------
-; Exported functions
-
-.global         __systime
-.global         _mktime
-
-
-
diff --git a/asminc/utsname.inc b/asminc/utsname.inc
deleted file mode 100644 (file)
index 6e22892..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-;/*****************************************************************************/
-;/*                                                                           */
-;/*                                utsname.inc                                */
-;/*                                                                           */
-;/*                         Return system information                         */
-;/*                                                                           */
-;/*                                                                           */
-;/*                                                                           */
-;/* (C) 2003      Ullrich von Bassewitz                                       */
-;/*               Römerstrasse 52                                             */
-;/*               D-70794 Filderstadt                                         */
-;/* EMail:        uz@cc65.org                                                 */
-;/*                                                                           */
-;/*                                                                           */
-;/* This software is provided 'as-is', without any expressed or implied       */
-;/* warranty.  In no event will the authors be held liable for any damages    */
-;/* arising from the use of this software.                                    */
-;/*                                                                           */
-;/* Permission is granted to anyone to use this software for any purpose,     */
-;/* including commercial applications, and to alter it and redistribute it    */
-;/* freely, subject to the following restrictions:                            */
-;/*                                                                           */
-;/* 1. The origin of this software must not be misrepresented; you must not   */
-;/*    claim that you wrote the original software. If you use this software   */
-;/*    in a product, an acknowledgment in the product documentation would be  */
-;/*    appreciated but is not required.                                       */
-;/* 2. Altered source versions must be plainly marked as such, and must not   */
-;/*    be misrepresented as being the original software.                      */
-;/* 3. This notice may not be removed or altered from any source              */
-;/*    distribution.                                                          */
-;/*                                                                           */
-;/*****************************************************************************/
-
-
-
-; Struct utsname 
-.struct utsname
-        sysname         .byte   17
-        nodename        .byte   9
-        release         .byte   9
-        version         .byte   9
-        machine         .byte   25
-.endstruct
-
-
-
diff --git a/asminc/vic20.inc b/asminc/vic20.inc
deleted file mode 100644 (file)
index c42db42..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-;
-; Vic20 generic definitions. Stolen mostly from c64.inc - Steve Schmidtke
-;
-
-
-; ---------------------------------------------------------------------------
-; Zero page, Commodore stuff
-
-TXTPTR          := $7A          ; Pointer into BASIC source code
-TIME            := $A0          ; 60HZ clock
-FNAM_LEN        := $B7          ; Length of filename
-SECADR          := $B9          ; Secondary address
-DEVNUM          := $BA          ; Device number
-FNAM            := $BB          ; Pointer to filename
-KEY_COUNT       := $C6          ; Number of keys in input buffer
-RVS             := $C7          ; Reverse flag
-CURS_FLAG       := $CC          ; 1 = cursor off
-CURS_BLINK      := $CD          ; Blink counter
-CURS_CHAR       := $CE          ; Character under the cursor
-CURS_STATE      := $CF          ; Cursor blink state
-SCREEN_PTR      := $D1          ; Pointer to current char in text screen
-CURS_X          := $D3          ; Cursor column
-CURS_Y          := $D6          ; Cursor row
-CRAM_PTR        := $F3          ; Pointer to current char in color RAM
-
-BASIC_BUF       := $200         ; Location of command-line
-BASIC_BUF_LEN   = 89            ; Maximum length of command-line
-
-CHARCOLOR       := $286
-CURS_COLOR      := $287         ; Color under the cursor
-
-
-; ---------------------------------------------------------------------------
-; Screen size
-
-XSIZE           = 22
-YSIZE           = 23
-
-; ---------------------------------------------------------------------------
-; Kernal routines
-
-; Direct entries
-CLRSCR          := $E55F
-KBDREAD         := $E5CF
-
-; ---------------------------------------------------------------------------
-; Vector and other locations
-
-IRQVec          := $0314
-BRKVec          := $0316
-NMIVec          := $0318
-
-; ---------------------------------------------------------------------------
-; I/O: 6560 VIC
-
-VIC             := $9000
-VIC_LINES       := $9003        ; Screen lines, bit 7 is bit 0 from VIC_HLINE
-VIC_HLINE       := $9004        ; Rasterline, bits 1-8
-VIC_COLOR       := $900F        ; Border and background color
-
-; ---------------------------------------------------------------------------
-; I/O: 6522 VIA1
-
-VIA1            := $9110
-VIA1_JOY        := $9111
-VIA1_DDRB       := $9112
-VIA1_DDRA       := $9113
-
-; ---------------------------------------------------------------------------
-; I/O: 6522 VIA2
-
-VIA2            := $9120
-VIA2_JOY        := $9120
-VIA2_DDRB       := $9122
-VIA2_DDRA       := $9123
-
diff --git a/asminc/zeropage.inc b/asminc/zeropage.inc
deleted file mode 100644 (file)
index 1ba0358..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; zeropage.inc
-;
-; (C) Copyright 2002-2012, Ullrich von Bassewitz (uz@cc65.org)
-;
-
-; Assembler include file that imports the runtime zero page locations used
-; by the compiler, ready for usage in asm code.
-
-
-        .globalzp       sp, sreg, regsave
-        .globalzp       ptr1, ptr2, ptr3, ptr4
-        .globalzp       tmp1, tmp2, tmp3, tmp4
-        .globalzp       regbank
-  
-; The size of the register bank
-regbanksize     = 6
-
-; The total amount of zero page space used
-zpspace         = 26
-
-; The amount of space that needs to be saved by an interrupt handler that
-; calls C code (does not include the register bank, which is saved by the
-; generated C code if required).
-zpsavespace     = zpspace - regbanksize
-
diff --git a/cfg/apple2-asm.cfg b/cfg/apple2-asm.cfg
deleted file mode 100644 (file)
index 1e18776..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# Configuration for assembler programs which don't need a special setup
-
-FEATURES {
-    STARTADDRESS: default = $0803;
-}
-SYMBOLS {
-    __LOADADDR__: type = weak, value = __CODE_RUN__;
-    __LOADSIZE__: type = weak, value = __BSS_RUN__ - __CODE_RUN__;
-}
-MEMORY {
-    ZP:                start = $0080, size = $001A,      define = yes;
-    HEADER: file = %O, start = $0000, size = $0004;
-    RAM:    file = %O, start = %S,    size = $C000 - %S;
-}
-SEGMENTS {
-    ZEROPAGE: load = ZP,     type = zp,  optional = yes;
-    EXEHDR:   load = HEADER, type = ro,  optional = yes;
-    CODE:     load = RAM,    type = rw,  optional = yes, define = yes;
-    RODATA:   load = RAM,    type = ro,  optional = yes;
-    DATA:     load = RAM,    type = rw,  optional = yes;
-    BSS:      load = RAM,    type = bss, optional = yes, define = yes;
-}
diff --git a/cfg/apple2-overlay.cfg b/cfg/apple2-overlay.cfg
deleted file mode 100644 (file)
index d0b3469..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-# Configuration for overlay programs (overlays located below main program)
-
-# The overlay files don't include the 4 byte DOS 3.3 header so use AppleCommander like this:
-# java -jar ac.jar -cc65 mydisk.dsk myprog   bin < myprog
-# java -jar ac.jar -p    mydisk.dsk myprog.1 bin < myprog.1
-# java -jar ac.jar -p    mydisk.dsk myprog.2 bin < myprog.2
-# java -jar ac.jar -p    mydisk.dsk myprog.3 bin < myprog.3
-# ...
-
-FEATURES {
-    STARTADDRESS: default = $0803;
-}
-SYMBOLS {
-    __EXEHDR__:      type = import;
-    __HIMEM__:       type = weak, value = $9600; # Presumed RAM end
-    __LCADDR__:      type = weak, value = $D400; # Behind quit code
-    __LCSIZE__:      type = weak, value = $0C00; # Rest of bank two
-    __STACKSIZE__:   type = weak, value = $0800; # 2k stack
-    __OVERLAYSIZE__: type = weak, value = $1000; # 4k overlay
-    __LOADADDR__:    type = weak, value = __STARTUP_RUN__;
-    __LOADSIZE__:    type = weak, value = __ZPSAVE_RUN__ - __STARTUP_RUN__ +
-                                          __MOVE_LAST__  - __MOVE_START__;
-}
-MEMORY {
-    ZP:                define = yes, start = $0080,                size = $001A;
-    HEADER: file = %O,               start = $0000,                size = $0004;
-    RAM:    file = %O,               start = %S + __OVERLAYSIZE__, size = __HIMEM__ - __STACKSIZE__ - __OVERLAYSIZE__ - %S;
-    MOVE:   file = %O, define = yes, start = $0000,                size = $FFFF;
-    LC:                define = yes, start = __LCADDR__,           size = __LCSIZE__;
-    OVL1:   file = "%O.1",           start = %S,                   size = __OVERLAYSIZE__;
-    OVL2:   file = "%O.2",           start = %S,                   size = __OVERLAYSIZE__;
-    OVL3:   file = "%O.3",           start = %S,                   size = __OVERLAYSIZE__;
-    OVL4:   file = "%O.4",           start = %S,                   size = __OVERLAYSIZE__;
-    OVL5:   file = "%O.5",           start = %S,                   size = __OVERLAYSIZE__;
-    OVL6:   file = "%O.6",           start = %S,                   size = __OVERLAYSIZE__;
-    OVL7:   file = "%O.7",           start = %S,                   size = __OVERLAYSIZE__;
-    OVL8:   file = "%O.8",           start = %S,                   size = __OVERLAYSIZE__;
-    OVL9:   file = "%O.9",           start = %S,                   size = __OVERLAYSIZE__;
-}
-SEGMENTS {
-    ZEROPAGE: load = ZP,              type = zp;
-    EXEHDR:   load = HEADER,          type = ro;
-    STARTUP:  load = RAM,             type = ro,  define = yes;
-    LOWCODE:  load = RAM,             type = ro,                optional = yes;
-    CODE:     load = RAM,             type = ro;
-    RODATA:   load = RAM,             type = ro;
-    DATA:     load = RAM,             type = rw;
-    ZPSAVE:   load = RAM,             type = bss, define = yes;
-    BSS:      load = RAM,             type = bss, define = yes;
-    INIT:     load = MOVE, run = RAM, type = ro,  define = yes, optional = yes;
-    LC:       load = MOVE, run = LC,  type = ro,                optional = yes;
-    OVERLAY1: load = OVL1,            type = ro,  define = yes, optional = yes;
-    OVERLAY2: load = OVL2,            type = ro,  define = yes, optional = yes;
-    OVERLAY3: load = OVL3,            type = ro,  define = yes, optional = yes;
-    OVERLAY4: load = OVL4,            type = ro,  define = yes, optional = yes;
-    OVERLAY5: load = OVL5,            type = ro,  define = yes, optional = yes;
-    OVERLAY6: load = OVL6,            type = ro,  define = yes, optional = yes;
-    OVERLAY7: load = OVL7,            type = ro,  define = yes, optional = yes;
-    OVERLAY8: load = OVL8,            type = ro,  define = yes, optional = yes;
-    OVERLAY9: load = OVL9,            type = ro,  define = yes, optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/apple2-system.cfg b/cfg/apple2-system.cfg
deleted file mode 100644 (file)
index 33ab04f..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# Configuration for ProDOS 8 system programs (without the header)
-
-SYMBOLS {
-    __LCADDR__:    type = weak, value = $D400; # Behind quit code
-    __LCSIZE__:    type = weak, value = $0C00; # Rest of bank two
-    __STACKSIZE__: type = weak, value = $0800; # 2k stack
-    __LOADADDR__:  type = weak, value = __STARTUP_RUN__;
-    __LOADSIZE__:  type = weak, value = __ZPSAVE_RUN__ - __STARTUP_RUN__ +
-                                        __MOVE_LAST__  - __MOVE_START__;
-}
-MEMORY {
-    ZP:              define = yes, start = $0080,      size = $001A;
-    RAM:  file = %O,               start = $2000,      size = $9F00 - __STACKSIZE__;
-    MOVE: file = %O, define = yes, start = $0000,      size = $FFFF;
-    LC:              define = yes, start = __LCADDR__, size = __LCSIZE__;
-}
-SEGMENTS {
-    ZEROPAGE: load = ZP,              type = zp;
-    STARTUP:  load = RAM,             type = ro,  define   = yes;
-    LOWCODE:  load = RAM,             type = ro,                  optional = yes;
-    CODE:     load = RAM,             type = ro;
-    RODATA:   load = RAM,             type = ro;
-    DATA:     load = RAM,             type = rw;
-    ZPSAVE:   load = RAM,             type = bss, define   = yes;
-    BSS:      load = RAM,             type = bss, define   = yes;
-    INIT:     load = MOVE, run = RAM, type = ro,  define   = yes, optional = yes;
-    LC:       load = MOVE, run = LC,  type = ro,                  optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/apple2.cfg b/cfg/apple2.cfg
deleted file mode 100644 (file)
index 5673302..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-# Default configuration (allowing for 3KB in LC)
-
-FEATURES {
-    STARTADDRESS: default = $0803;
-}
-SYMBOLS {
-    __EXEHDR__:    type = import;
-    __HIMEM__:     type = weak, value = $9600; # Presumed RAM end
-    __LCADDR__:    type = weak, value = $D400; # Behind quit code
-    __LCSIZE__:    type = weak, value = $0C00; # Rest of bank two
-    __STACKSIZE__: type = weak, value = $0800; # 2k stack
-    __LOADADDR__:  type = weak, value = __STARTUP_RUN__;
-    __LOADSIZE__:  type = weak, value = __ZPSAVE_RUN__ - __STARTUP_RUN__ +
-                                        __MOVE_LAST__  - __MOVE_START__;
-}
-MEMORY {
-    ZP:                define = yes, start = $0080,      size = $001A;
-    HEADER: file = %O,               start = $0000,      size = $0004;
-    RAM:    file = %O,               start = %S,         size = __HIMEM__ - __STACKSIZE__ - %S;
-    MOVE:   file = %O, define = yes, start = $0000,      size = $FFFF;
-    LC:                define = yes, start = __LCADDR__, size = __LCSIZE__;
-}
-SEGMENTS {
-    ZEROPAGE: load = ZP,              type = zp;
-    EXEHDR:   load = HEADER,          type = ro;
-    STARTUP:  load = RAM,             type = ro,  define   = yes;
-    LOWCODE:  load = RAM,             type = ro,                  optional = yes;
-    CODE:     load = RAM,             type = ro;
-    RODATA:   load = RAM,             type = ro;
-    DATA:     load = RAM,             type = rw;
-    ZPSAVE:   load = RAM,             type = bss, define   = yes;
-    BSS:      load = RAM,             type = bss, define   = yes;
-    INIT:     load = MOVE, run = RAM, type = ro,  define   = yes, optional = yes;
-    LC:       load = MOVE, run = LC,  type = ro,                  optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/apple2enh-asm.cfg b/cfg/apple2enh-asm.cfg
deleted file mode 100644 (file)
index e70ed44..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-# Configuration for assembler programs which don't need a special setup
-
-FEATURES {
-    STARTADDRESS: default = $0803;
-}
-SYMBOLS {
-    __LOADADDR__: type = weak, value = __CODE_RUN__;
-    __LOADSIZE__: type = weak, value = __BSS_RUN__ - __CODE_RUN__;
-}
-MEMORY {
-    HEADER: file = %O, start = $0000, size = $0004;
-    RAM:    file = %O, start = %S,    size = $C000 - %S;
-}
-SEGMENTS {
-    EXEHDR: load = HEADER, type = ro,  optional = yes;
-    CODE:   load = RAM,    type = rw,  optional = yes, define = yes;
-    RODATA: load = RAM,    type = ro,  optional = yes;
-    DATA:   load = RAM,    type = rw,  optional = yes;
-    BSS:    load = RAM,    type = bss, optional = yes, define = yes;
-}
diff --git a/cfg/apple2enh-overlay.cfg b/cfg/apple2enh-overlay.cfg
deleted file mode 100644 (file)
index d0b3469..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-# Configuration for overlay programs (overlays located below main program)
-
-# The overlay files don't include the 4 byte DOS 3.3 header so use AppleCommander like this:
-# java -jar ac.jar -cc65 mydisk.dsk myprog   bin < myprog
-# java -jar ac.jar -p    mydisk.dsk myprog.1 bin < myprog.1
-# java -jar ac.jar -p    mydisk.dsk myprog.2 bin < myprog.2
-# java -jar ac.jar -p    mydisk.dsk myprog.3 bin < myprog.3
-# ...
-
-FEATURES {
-    STARTADDRESS: default = $0803;
-}
-SYMBOLS {
-    __EXEHDR__:      type = import;
-    __HIMEM__:       type = weak, value = $9600; # Presumed RAM end
-    __LCADDR__:      type = weak, value = $D400; # Behind quit code
-    __LCSIZE__:      type = weak, value = $0C00; # Rest of bank two
-    __STACKSIZE__:   type = weak, value = $0800; # 2k stack
-    __OVERLAYSIZE__: type = weak, value = $1000; # 4k overlay
-    __LOADADDR__:    type = weak, value = __STARTUP_RUN__;
-    __LOADSIZE__:    type = weak, value = __ZPSAVE_RUN__ - __STARTUP_RUN__ +
-                                          __MOVE_LAST__  - __MOVE_START__;
-}
-MEMORY {
-    ZP:                define = yes, start = $0080,                size = $001A;
-    HEADER: file = %O,               start = $0000,                size = $0004;
-    RAM:    file = %O,               start = %S + __OVERLAYSIZE__, size = __HIMEM__ - __STACKSIZE__ - __OVERLAYSIZE__ - %S;
-    MOVE:   file = %O, define = yes, start = $0000,                size = $FFFF;
-    LC:                define = yes, start = __LCADDR__,           size = __LCSIZE__;
-    OVL1:   file = "%O.1",           start = %S,                   size = __OVERLAYSIZE__;
-    OVL2:   file = "%O.2",           start = %S,                   size = __OVERLAYSIZE__;
-    OVL3:   file = "%O.3",           start = %S,                   size = __OVERLAYSIZE__;
-    OVL4:   file = "%O.4",           start = %S,                   size = __OVERLAYSIZE__;
-    OVL5:   file = "%O.5",           start = %S,                   size = __OVERLAYSIZE__;
-    OVL6:   file = "%O.6",           start = %S,                   size = __OVERLAYSIZE__;
-    OVL7:   file = "%O.7",           start = %S,                   size = __OVERLAYSIZE__;
-    OVL8:   file = "%O.8",           start = %S,                   size = __OVERLAYSIZE__;
-    OVL9:   file = "%O.9",           start = %S,                   size = __OVERLAYSIZE__;
-}
-SEGMENTS {
-    ZEROPAGE: load = ZP,              type = zp;
-    EXEHDR:   load = HEADER,          type = ro;
-    STARTUP:  load = RAM,             type = ro,  define = yes;
-    LOWCODE:  load = RAM,             type = ro,                optional = yes;
-    CODE:     load = RAM,             type = ro;
-    RODATA:   load = RAM,             type = ro;
-    DATA:     load = RAM,             type = rw;
-    ZPSAVE:   load = RAM,             type = bss, define = yes;
-    BSS:      load = RAM,             type = bss, define = yes;
-    INIT:     load = MOVE, run = RAM, type = ro,  define = yes, optional = yes;
-    LC:       load = MOVE, run = LC,  type = ro,                optional = yes;
-    OVERLAY1: load = OVL1,            type = ro,  define = yes, optional = yes;
-    OVERLAY2: load = OVL2,            type = ro,  define = yes, optional = yes;
-    OVERLAY3: load = OVL3,            type = ro,  define = yes, optional = yes;
-    OVERLAY4: load = OVL4,            type = ro,  define = yes, optional = yes;
-    OVERLAY5: load = OVL5,            type = ro,  define = yes, optional = yes;
-    OVERLAY6: load = OVL6,            type = ro,  define = yes, optional = yes;
-    OVERLAY7: load = OVL7,            type = ro,  define = yes, optional = yes;
-    OVERLAY8: load = OVL8,            type = ro,  define = yes, optional = yes;
-    OVERLAY9: load = OVL9,            type = ro,  define = yes, optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/apple2enh-system.cfg b/cfg/apple2enh-system.cfg
deleted file mode 100644 (file)
index 33ab04f..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# Configuration for ProDOS 8 system programs (without the header)
-
-SYMBOLS {
-    __LCADDR__:    type = weak, value = $D400; # Behind quit code
-    __LCSIZE__:    type = weak, value = $0C00; # Rest of bank two
-    __STACKSIZE__: type = weak, value = $0800; # 2k stack
-    __LOADADDR__:  type = weak, value = __STARTUP_RUN__;
-    __LOADSIZE__:  type = weak, value = __ZPSAVE_RUN__ - __STARTUP_RUN__ +
-                                        __MOVE_LAST__  - __MOVE_START__;
-}
-MEMORY {
-    ZP:              define = yes, start = $0080,      size = $001A;
-    RAM:  file = %O,               start = $2000,      size = $9F00 - __STACKSIZE__;
-    MOVE: file = %O, define = yes, start = $0000,      size = $FFFF;
-    LC:              define = yes, start = __LCADDR__, size = __LCSIZE__;
-}
-SEGMENTS {
-    ZEROPAGE: load = ZP,              type = zp;
-    STARTUP:  load = RAM,             type = ro,  define   = yes;
-    LOWCODE:  load = RAM,             type = ro,                  optional = yes;
-    CODE:     load = RAM,             type = ro;
-    RODATA:   load = RAM,             type = ro;
-    DATA:     load = RAM,             type = rw;
-    ZPSAVE:   load = RAM,             type = bss, define   = yes;
-    BSS:      load = RAM,             type = bss, define   = yes;
-    INIT:     load = MOVE, run = RAM, type = ro,  define   = yes, optional = yes;
-    LC:       load = MOVE, run = LC,  type = ro,                  optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/apple2enh.cfg b/cfg/apple2enh.cfg
deleted file mode 100644 (file)
index 5673302..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-# Default configuration (allowing for 3KB in LC)
-
-FEATURES {
-    STARTADDRESS: default = $0803;
-}
-SYMBOLS {
-    __EXEHDR__:    type = import;
-    __HIMEM__:     type = weak, value = $9600; # Presumed RAM end
-    __LCADDR__:    type = weak, value = $D400; # Behind quit code
-    __LCSIZE__:    type = weak, value = $0C00; # Rest of bank two
-    __STACKSIZE__: type = weak, value = $0800; # 2k stack
-    __LOADADDR__:  type = weak, value = __STARTUP_RUN__;
-    __LOADSIZE__:  type = weak, value = __ZPSAVE_RUN__ - __STARTUP_RUN__ +
-                                        __MOVE_LAST__  - __MOVE_START__;
-}
-MEMORY {
-    ZP:                define = yes, start = $0080,      size = $001A;
-    HEADER: file = %O,               start = $0000,      size = $0004;
-    RAM:    file = %O,               start = %S,         size = __HIMEM__ - __STACKSIZE__ - %S;
-    MOVE:   file = %O, define = yes, start = $0000,      size = $FFFF;
-    LC:                define = yes, start = __LCADDR__, size = __LCSIZE__;
-}
-SEGMENTS {
-    ZEROPAGE: load = ZP,              type = zp;
-    EXEHDR:   load = HEADER,          type = ro;
-    STARTUP:  load = RAM,             type = ro,  define   = yes;
-    LOWCODE:  load = RAM,             type = ro,                  optional = yes;
-    CODE:     load = RAM,             type = ro;
-    RODATA:   load = RAM,             type = ro;
-    DATA:     load = RAM,             type = rw;
-    ZPSAVE:   load = RAM,             type = bss, define   = yes;
-    BSS:      load = RAM,             type = bss, define   = yes;
-    INIT:     load = MOVE, run = RAM, type = ro,  define   = yes, optional = yes;
-    LC:       load = MOVE, run = LC,  type = ro,                  optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/atari-asm.cfg b/cfg/atari-asm.cfg
deleted file mode 100644 (file)
index 4ff7c31..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-FEATURES {
-    STARTADDRESS: default = $2E00;
-}
-SYMBOLS {
-    __EXEHDR__:          type = import;
-    __AUTOSTART__:       type = import;  # force inclusion of autostart "trailer"
-    __STARTADDRESS__:    type = export, value = %S;
-}
-MEMORY {
-    ZP:            file = "", define = yes, start = $0082, size = $007E;
-
-# file header, just $FFFF
-    HEADER:        file = %O,               start = $0000, size = $0002;
-
-# "main program" load chunk
-    MAINHDR:       file = %O,               start = $0000, size = $0004;
-    RAM:           file = %O, define = yes, start = %S,    size = $BC20 - %S;
-    TRAILER:       file = %O,               start = $0000, size = $0006;
-}
-SEGMENTS {
-    EXEHDR:    load = HEADER,     type = ro,                optional = yes;
-    MAINHDR:   load = MAINHDR,    type = ro,                optional = yes;
-    CODE:      load = RAM,        type = ro,  define = yes, optional = yes;
-    RODATA:    load = RAM,        type = ro                 optional = yes;
-    DATA:      load = RAM,        type = rw                 optional = yes;
-    BSS:       load = RAM,        type = bss, define = yes, optional = yes;
-    ZEROPAGE:  load = ZP,         type = zp,                optional = yes;
-    EXTZP:     load = ZP,         type = zp,                optional = yes; # to enable modules to be able to link to C and assembler programs
-    AUTOSTRT:  load = TRAILER,    type = ro,                optional = yes;
-}
diff --git a/cfg/atari-cart.cfg b/cfg/atari-cart.cfg
deleted file mode 100644 (file)
index db9486a..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-FEATURES {
-    STARTADDRESS: default = $2000;
-}
-SYMBOLS {
-    __CARTSIZE__:        type = weak,   value = $2000; # possible values: $2000 and $4000
-    __CART_HEADER__:     type = import;
-    __STACKSIZE__:       type = weak,   value = $0800; # 2k stack
-    __STARTADDRESS__:    type = export, value = %S;
-    __RESERVED_MEMORY__: type = export, value = $0000;
-    __CARTFLAGS__:       type = weak,   value = $01;   # see documentation for other possible values
-}
-MEMORY {
-    ZP:         file = "", define = yes, start = $0082,                size = $007E;
-    RAM:        file = "", define = yes, start = %S,                   size = __CARTSIZE__;
-    ROM:        file = %O, define = yes, start = $C000 - __CARTSIZE__, size = __CARTSIZE__ - 6, fill = yes, fillval = $FF;
-    CARTID:     file = %O,               start = $BFFA,                size = $0006;
-}
-SEGMENTS {
-    STARTUP:   load = ROM,            type = ro,  define = yes, optional = yes;
-    LOWCODE:   load = ROM,            type = ro,  define = yes, optional = yes;
-    INIT:      load = ROM,            type = ro,                optional = yes;
-    CODE:      load = ROM,            type = ro,  define = yes;
-    RODATA:    load = ROM,            type = ro,                optional = yes;
-    DATA:      load = ROM, run = RAM, type = rw,  define = yes, optional = yes;
-    BSS:       load = RAM,            type = bss, define = yes, optional = yes;
-    CARTHDR:   load = CARTID,         type = ro;
-    ZEROPAGE:  load = ZP,             type = zp,                optional = yes;
-    EXTZP:     load = ZP,             type = zp,                optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/atari-cassette.cfg b/cfg/atari-cassette.cfg
deleted file mode 100644 (file)
index 2116aec..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-FEATURES {
-    STARTADDRESS: default = $0900;
-}
-SYMBOLS {
-    __STACKSIZE__:       type = weak,   value = $0800; # 2k stack
-    __RESERVED_MEMORY__: type = weak,   value = $0000;
-    __STARTADDRESS__:    type = export, value = %S;
-    _cas_hdr:            type = import;
-}
-MEMORY {
-    ZP:            file = "", define = yes, start = $0082, size = $007E;
-    RAM:           file = %O, define = yes, start = %S,    size = $BC20 - __STACKSIZE__ - __RESERVED_MEMORY__ - %S;
-}
-SEGMENTS {
-    CASHDR:    load = RAM, type = ro;
-    STARTUP:   load = RAM, type = ro,  define = yes, optional = yes;
-    LOWCODE:   load = RAM, type = ro,  define = yes, optional = yes;
-    INIT:      load = RAM, type = ro,                optional = yes;
-    CODE:      load = RAM, type = ro,  define = yes;
-    RODATA:    load = RAM, type = ro,                optional = yes;
-    DATA:      load = RAM, type = rw,                optional = yes;
-    BSS:       load = RAM, type = bss, define = yes, optional = yes;
-    ZEROPAGE:  load = ZP,  type = zp,                optional = yes;
-    EXTZP:     load = ZP,  type = zp,                optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/atari-overlay.cfg b/cfg/atari-overlay.cfg
deleted file mode 100644 (file)
index 1d339b2..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-FEATURES {
-    STARTADDRESS: default = $2000;
-}
-SYMBOLS {
-    __EXEHDR__:          type = import;
-    __SYSTEM_CHECK__:    type = import;  # force inclusion of "system check" load chunk
-    __AUTOSTART__:       type = import;  # force inclusion of autostart "trailer"
-    __STACKSIZE__:       type = weak, value = $0800; # 2k stack
-    __OVERLAYSIZE__:     type = weak, value = $1000; # 4k overlay
-    __STARTADDRESS__:    type = export, value = %S;
-    __RESERVED_MEMORY__: type = weak, value = $0000;
-}
-MEMORY {
-    ZP:            file = "", define = yes, start = $0082, size = $007E;
-
-# file header, just $FFFF
-    HEADER:        file = %O,               start = $0000, size = $0002;
-
-# "system check" load chunk
-    SYSCHKHDR:     file = %O,               start = $0000, size = $0004;
-    SYSCHKCHNK:    file = %O,               start = $2E00, size = $0300;
-    SYSCHKTRL:     file = %O,               start = $0000, size = $0006;
-
-# "main program" load chunk
-    MAINHDR:       file = %O,               start = $0000, size = $0004;
-    RAM:           file = %O, define = yes, start = %S + __OVERLAYSIZE__,
-                                                           size = $BC20 - __OVERLAYSIZE__ - __STACKSIZE__ - __RESERVED_MEMORY__ - %S;
-    TRAILER:       file = %O,               start = $0000, size = $0006;
-
-    OVL1:          file = "%O.1",           start = %S,    size = __OVERLAYSIZE__;
-    OVL2:          file = "%O.2",           start = %S,    size = __OVERLAYSIZE__;
-    OVL3:          file = "%O.3",           start = %S,    size = __OVERLAYSIZE__;
-    OVL4:          file = "%O.4",           start = %S,    size = __OVERLAYSIZE__;
-    OVL5:          file = "%O.5",           start = %S,    size = __OVERLAYSIZE__;
-    OVL6:          file = "%O.6",           start = %S,    size = __OVERLAYSIZE__;
-    OVL7:          file = "%O.7",           start = %S,    size = __OVERLAYSIZE__;
-    OVL8:          file = "%O.8",           start = %S,    size = __OVERLAYSIZE__;
-    OVL9:          file = "%O.9",           start = %S,    size = __OVERLAYSIZE__;
-}
-SEGMENTS {
-    EXEHDR:    load = HEADER,     type = ro;
-    SYSCHKHDR: load = SYSCHKHDR,  type = ro,                optional = yes;
-    SYSCHK:    load = SYSCHKCHNK, type = rw,  define = yes, optional = yes;
-    SYSCHKTRL: load = SYSCHKTRL,  type = ro,                optional = yes;
-    MAINHDR:   load = MAINHDR,    type = ro;
-    STARTUP:   load = RAM,        type = ro,  define = yes;
-    LOWCODE:   load = RAM,        type = ro,  define = yes, optional = yes;
-    INIT:      load = RAM,        type = ro,                optional = yes;
-    CODE:      load = RAM,        type = ro,  define = yes;
-    RODATA:    load = RAM,        type = ro;
-    DATA:      load = RAM,        type = rw;
-    BSS:       load = RAM,        type = bss, define = yes;
-    ZEROPAGE:  load = ZP,         type = zp;
-    EXTZP:     load = ZP,         type = zp,                optional = yes;
-    AUTOSTRT:  load = TRAILER,    type = ro;
-    OVERLAY1:  load = OVL1,       type = ro,  define = yes, optional = yes;
-    OVERLAY2:  load = OVL2,       type = ro,  define = yes, optional = yes;
-    OVERLAY3:  load = OVL3,       type = ro,  define = yes, optional = yes;
-    OVERLAY4:  load = OVL4,       type = ro,  define = yes, optional = yes;
-    OVERLAY5:  load = OVL5,       type = ro,  define = yes, optional = yes;
-    OVERLAY6:  load = OVL6,       type = ro,  define = yes, optional = yes;
-    OVERLAY7:  load = OVL7,       type = ro,  define = yes, optional = yes;
-    OVERLAY8:  load = OVL8,       type = ro,  define = yes, optional = yes;
-    OVERLAY9:  load = OVL9,       type = ro,  define = yes, optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/atari.cfg b/cfg/atari.cfg
deleted file mode 100644 (file)
index dce593f..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-FEATURES {
-    STARTADDRESS: default = $2000;
-}
-SYMBOLS {
-    __EXEHDR__:          type = import;
-    __SYSTEM_CHECK__:    type = import;  # force inclusion of "system check" load chunk
-    __AUTOSTART__:       type = import;  # force inclusion of autostart "trailer"
-    __STACKSIZE__:       type = weak, value = $0800; # 2k stack
-    __STARTADDRESS__:    type = export, value = %S;
-    __RESERVED_MEMORY__: type = weak, value = $0000;
-}
-MEMORY {
-    ZP:            file = "", define = yes, start = $0082, size = $007E;
-
-# file header, just $FFFF
-    HEADER:        file = %O,               start = $0000, size = $0002;
-
-# "system check" load chunk
-    SYSCHKHDR:     file = %O,               start = $0000, size = $0004;
-    SYSCHKCHNK:    file = %O,               start = $2E00, size = $0300;
-    SYSCHKTRL:     file = %O,               start = $0000, size = $0006;
-
-# "main program" load chunk
-    MAINHDR:       file = %O,               start = $0000, size = $0004;
-    RAM:           file = %O, define = yes, start = %S,    size = $BC20 - __STACKSIZE__ - __RESERVED_MEMORY__ - %S;
-    TRAILER:       file = %O,               start = $0000, size = $0006;
-}
-SEGMENTS {
-    EXEHDR:    load = HEADER,     type = ro;
-    SYSCHKHDR: load = SYSCHKHDR,  type = ro,                optional = yes;
-    SYSCHK:    load = SYSCHKCHNK, type = rw,  define = yes, optional = yes;
-    SYSCHKTRL: load = SYSCHKTRL,  type = ro,                optional = yes;
-    MAINHDR:   load = MAINHDR,    type = ro;
-    STARTUP:   load = RAM,        type = ro,  define = yes;
-    LOWCODE:   load = RAM,        type = ro,  define = yes, optional = yes;
-    INIT:      load = RAM,        type = ro,                optional = yes;
-    CODE:      load = RAM,        type = ro,  define = yes;
-    RODATA:    load = RAM,        type = ro;
-    DATA:      load = RAM,        type = rw;
-    BSS:       load = RAM,        type = bss, define = yes;
-    ZEROPAGE:  load = ZP,         type = zp;
-    EXTZP:     load = ZP,         type = zp,                optional = yes;
-    AUTOSTRT:  load = TRAILER,    type = ro;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/atari5200.cfg b/cfg/atari5200.cfg
deleted file mode 100644 (file)
index 4a90303..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-SYMBOLS {
-    __CARTSIZE__:        type = weak,   value = $4000;   # possible values: $4000 and $8000
-    __CART_ENTRY__:      type = import;
-    __STACKSIZE__:       type = weak,   value = $0400;   # 4 pages stack
-    __RESERVED_MEMORY__: type = export, value = $01E0;   # space for 20x24 screen buffer (default display list is in ROM)
-}
-MEMORY {
-    ZP:        file = "", start = $001D,                size = $00E3,                                               define = yes;
-    RAM:       file = "", start = $021C,                size = $4000 - __STACKSIZE__ - __RESERVED_MEMORY__ - $021C, define = yes;
-    ROM:       file = %O, start = $C000 - __CARTSIZE__, size = __CARTSIZE__ - $18,                                  define = yes, fill = yes, fillval = $FF;
-    CARTNAME:  file = %O, start = $BFE8,                size = $0014                                                              fill = yes, fillval = $40;
-    CARTYEAR:  file = %O, start = $BFFC,                size = $0002                                                              fill = yes, fillval = $59;
-    CARTENTRY: file = %O, start = $BFFE,                size = $0002;
-}
-SEGMENTS {
-    STARTUP:   load = ROM,            type = ro,  define = yes, optional = yes;
-    LOWCODE:   load = ROM,            type = ro,  define = yes, optional = yes;
-    INIT:      load = ROM,            type = ro,                optional = yes;
-    CODE:      load = ROM,            type = ro,  define = yes;
-    RODATA:    load = ROM,            type = ro,                optional = yes;
-    DATA:      load = ROM, run = RAM, type = rw,  define = yes, optional = yes;
-    BSS:       load = RAM,            type = bss, define = yes, optional = yes;
-    CARTNAME:  load = CARTNAME,       type = ro,  define = yes;
-    CARTYEAR:  load = CARTYEAR,       type = ro,  define = yes;
-    CARTENTRY: load = CARTENTRY,      type = ro,  define = yes;
-    ZEROPAGE:  load = ZP,             type = zp,                optional = yes;
-    EXTZP:     load = ZP,             type = zp,                optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/atarixl-largehimem.cfg b/cfg/atarixl-largehimem.cfg
deleted file mode 100644 (file)
index 01fc76a..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-# This config file provides a single big upper memory block (HIDDEN_RAM).
-# To achieve this, it relocates the character generator from $E000 to CHARGEN.
-# The runtime library must be compiled with CHARGEN_RELOC for this config
-# file to work. See libsrc/atari/Makefile.inc.
-
-FEATURES {
-    STARTADDRESS: default = $2400;
-}
-
-SYMBOLS {
-    __EXEHDR__:          type = import;
-    __SYSTEM_CHECK__:    type = import;  # force inclusion of "system check" load chunk
-    __AUTOSTART__:       type = import;  # force inclusion of autostart "trailer"
-    __STACKSIZE__:       type = weak, value = $0800; # 2k stack
-    __STARTADDRESS__:    type = export, value = %S;
-}
-
-MEMORY {
-    ZP:            file = "", define = yes, start = $0082,                  size = $007E;
-
-# just $FFFF
-    HEADER:        file = %O,               start = $0000,                  size = $0002;
-
-# "system check" load chunk
-    SYSCHKHDR:     file = %O,               start = $0000,                  size = $0004;
-    SYSCHKCHNK:    file = %O,               start = $2E00,                  size = $0300;
-    SYSCHKTRL:     file = %O,               start = $0000,                  size = $0006;
-
-# "shadow RAM preparation" load chunk
-    SRPREPHDR:     file = %O,               start = $0000,                  size = $0004;
-    SRPREPCHNK:    file = %O, define = yes, start = %S,                     size = $7C20 - %S - $07FF;  # $07FF: space for temp. chargen buffer, 1K aligned
-    SRPREPTRL:     file = %O,               start = $0000,                  size = $0006;
-
-# "main program" load chunk
-    MAINHDR:       file = %O,               start = $0000,                  size = $0004;
-    RAM:           file = %O, define = yes, start = %S +
-                                                    __LOWBSS_SIZE__,        size = $D000 -
-                                                                                   __STACKSIZE__ -
-                                                                                   %S -
-                                                                                   __LOWBSS_SIZE__;
-
-# defines entry point into program
-    TRAILER:       file = %O,               start = $0000, size = $0006;
-
-# address of relocated character generator
-    CHARGEN:       file = "", define = yes, start = $D800, size = $0400;
-
-# memory beneath the ROM
-    HIDDEN_RAM:    file = "", define = yes, start = $DC00, size = $FFFA - $DC00;
-}
-
-SEGMENTS {
-    EXEHDR:      load = HEADER,                       type = ro;
-
-    SYSCHKHDR:   load = SYSCHKHDR,                    type = ro,                optional = yes;
-    SYSCHK:      load = SYSCHKCHNK,                   type = rw,  define = yes, optional = yes;
-    SYSCHKTRL:   load = SYSCHKTRL,                    type = ro,                optional = yes;
-
-    SRPREPHDR:   load = SRPREPHDR,                    type = ro;
-    LOWBSS:      load = SRPREPCHNK,                   type = bss, define = yes;  # shared btw. SRPREPCHNK and RAM, not zero initialized
-    SRPREP:      load = SRPREPCHNK,                   type = rw,  define = yes;
-    SHADOW_RAM:  load = SRPREPCHNK, run = HIDDEN_RAM, type = rw,  define = yes, optional = yes;
-    SHADOW_RAM2: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw,  define = yes, optional = yes;
-    SRPREPTRL:   load = SRPREPTRL,                    type = ro;
-
-    MAINHDR:     load = MAINHDR,                      type = ro;
-    STARTUP:     load = RAM,                          type = ro,  define = yes;
-    LOWCODE:     load = RAM,                          type = ro,  define = yes, optional = yes;
-    INIT:        load = RAM,                          type = ro,                optional = yes;
-    CODE:        load = RAM,                          type = ro,  define = yes;
-    RODATA:      load = RAM,                          type = ro;
-    DATA:        load = RAM,                          type = rw;
-    BSS:         load = RAM,                          type = bss, define = yes;
-    ZEROPAGE:    load = ZP,                           type = zp;
-    EXTZP:       load = ZP,                           type = zp,                optional = yes;
-    AUTOSTRT:    load = TRAILER,                      type = ro;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/atarixl-overlay.cfg b/cfg/atarixl-overlay.cfg
deleted file mode 100644 (file)
index 68d0f52..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-FEATURES {
-    STARTADDRESS: default = $2400;
-}
-
-SYMBOLS {
-    __EXEHDR__:          type = import;
-    __SYSTEM_CHECK__:    type = import;  # force inclusion of "system check" load chunk
-    __AUTOSTART__:       type = import;  # force inclusion of autostart "trailer"
-    __STACKSIZE__:       type = weak, value = $0800; # 2k stack
-    __OVERLAYSIZE__:     type = weak, value = $1000; # 4k overlay
-    __STARTADDRESS__:    type = export, value = %S;
-}
-
-MEMORY {
-    ZP:            file = "", define = yes, start = $0082,                  size = $007E;
-
-# just $FFFF
-    HEADER:        file = %O,               start = $0000,                  size = $0002;
-
-# "system check" load chunk
-    SYSCHKHDR:     file = %O,               start = $0000,                  size = $0004;
-    SYSCHKCHNK:    file = %O,               start = $2E00,                  size = $0300;
-    SYSCHKTRL:     file = %O,               start = $0000,                  size = $0006;
-
-# "shadow RAM preparation" load chunk
-    SRPREPHDR:     file = %O,               start = $0000,                  size = $0004;
-    SRPREPCHNK:    file = %O, define = yes, start = %S + __OVERLAYSIZE__,   size = $7C20 - %S - __OVERLAYSIZE__ - $07FF;  # $07FF: space for temp. chargen buffer, 1K aligned
-    SRPREPTRL:     file = %O,               start = $0000,                  size = $0006;
-
-# "main program" load chunk
-    MAINHDR:       file = %O,               start = $0000,                  size = $0004;
-    RAM:           file = %O, define = yes, start = %S +
-                                                    __OVERLAYSIZE__ +
-                                                    __LOWBSS_SIZE__,        size = $D000 -
-                                                                                   __STACKSIZE__ -
-                                                                                   %S -
-                                                                                   __OVERLAYSIZE__ -
-                                                                                   __LOWBSS_SIZE__;
-
-# defines entry point into program
-    TRAILER:       file = %O,               start = $0000, size = $0006;
-
-# memory beneath the ROM preceeding the character generator
-    HIDDEN_RAM2:   file = "", define = yes, start = $D800, size = $0800;
-
-# address of relocated character generator (same addess as ROM version)
-    CHARGEN:       file = "", define = yes, start = $E000, size = $0400;
-
-# memory beneath the ROM
-    HIDDEN_RAM:    file = "", define = yes, start = $E400, size = $FFFA - $E400;
-
-# overlays
-    OVL1:          file = "%O.1",           start = %S,                     size = __OVERLAYSIZE__;
-    OVL2:          file = "%O.2",           start = %S,                     size = __OVERLAYSIZE__;
-    OVL3:          file = "%O.3",           start = %S,                     size = __OVERLAYSIZE__;
-    OVL4:          file = "%O.4",           start = %S,                     size = __OVERLAYSIZE__;
-    OVL5:          file = "%O.5",           start = %S,                     size = __OVERLAYSIZE__;
-    OVL6:          file = "%O.6",           start = %S,                     size = __OVERLAYSIZE__;
-    OVL7:          file = "%O.7",           start = %S,                     size = __OVERLAYSIZE__;
-    OVL8:          file = "%O.8",           start = %S,                     size = __OVERLAYSIZE__;
-    OVL9:          file = "%O.9",           start = %S,                     size = __OVERLAYSIZE__;
-}
-
-SEGMENTS {
-    EXEHDR:      load = HEADER,                        type = ro;
-
-    SYSCHKHDR:   load = SYSCHKHDR,                     type = ro,                optional = yes;
-    SYSCHK:      load = SYSCHKCHNK,                    type = rw,  define = yes, optional = yes;
-    SYSCHKTRL:   load = SYSCHKTRL,                     type = ro,                optional = yes;
-
-    SRPREPHDR:   load = SRPREPHDR,                     type = ro;
-    LOWBSS:      load = SRPREPCHNK,                    type = bss, define = yes;  # shared btw. SRPREPCHNK and RAM, not zero initialized
-    SRPREP:      load = SRPREPCHNK,                    type = rw,  define = yes;
-    SHADOW_RAM:  load = SRPREPCHNK, run = HIDDEN_RAM,  type = rw,  define = yes, optional = yes;
-    SHADOW_RAM2: load = SRPREPCHNK, run = HIDDEN_RAM2, type = rw,  define = yes, optional = yes;
-    SRPREPTRL:   load = SRPREPTRL,                     type = ro;
-
-    MAINHDR:     load = MAINHDR,                       type = ro;
-    STARTUP:     load = RAM,                           type = ro,  define = yes;
-    LOWCODE:     load = RAM,                           type = ro,  define = yes, optional = yes;
-    INIT:        load = RAM,                           type = ro,                optional = yes;
-    CODE:        load = RAM,                           type = ro,  define = yes;
-    RODATA:      load = RAM,                           type = ro;
-    DATA:        load = RAM,                           type = rw;
-    BSS:         load = RAM,                           type = bss, define = yes;
-    ZEROPAGE:    load = ZP,                            type = zp;
-    EXTZP:       load = ZP,                            type = zp,                optional = yes;
-    AUTOSTRT:    load = TRAILER,                       type = ro;
-
-    OVERLAY1:    load = OVL1,                          type = ro,  define = yes, optional = yes;
-    OVERLAY2:    load = OVL2,                          type = ro,  define = yes, optional = yes;
-    OVERLAY3:    load = OVL3,                          type = ro,  define = yes, optional = yes;
-    OVERLAY4:    load = OVL4,                          type = ro,  define = yes, optional = yes;
-    OVERLAY5:    load = OVL5,                          type = ro,  define = yes, optional = yes;
-    OVERLAY6:    load = OVL6,                          type = ro,  define = yes, optional = yes;
-    OVERLAY7:    load = OVL7,                          type = ro,  define = yes, optional = yes;
-    OVERLAY8:    load = OVL8,                          type = ro,  define = yes, optional = yes;
-    OVERLAY9:    load = OVL9,                          type = ro,  define = yes, optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/atarixl.cfg b/cfg/atarixl.cfg
deleted file mode 100644 (file)
index aad3ce6..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-FEATURES {
-    STARTADDRESS: default = $2400;
-}
-
-SYMBOLS {
-    __EXEHDR__:          type = import;
-    __SYSTEM_CHECK__:    type = import;  # force inclusion of "system check" load chunk
-    __AUTOSTART__:       type = import;  # force inclusion of autostart "trailer"
-    __STACKSIZE__:       type = weak, value = $0800; # 2k stack
-    __STARTADDRESS__:    type = export, value = %S;
-}
-
-MEMORY {
-    ZP:            file = "", define = yes, start = $0082,                  size = $007E;
-
-# just $FFFF
-    HEADER:        file = %O,               start = $0000,                  size = $0002;
-
-# "system check" load chunk
-    SYSCHKHDR:     file = %O,               start = $0000,                  size = $0004;
-    SYSCHKCHNK:    file = %O,               start = $2E00,                  size = $0300;
-    SYSCHKTRL:     file = %O,               start = $0000,                  size = $0006;
-
-# "shadow RAM preparation" load chunk
-    SRPREPHDR:     file = %O,               start = $0000,                  size = $0004;
-    SRPREPCHNK:    file = %O, define = yes, start = %S,                     size = $7C20 - %S - $07FF;  # $07FF: space for temp. chargen buffer, 1K aligned
-    SRPREPTRL:     file = %O,               start = $0000,                  size = $0006;
-
-# "main program" load chunk
-    MAINHDR:       file = %O,               start = $0000,                  size = $0004;
-    RAM:           file = %O, define = yes, start = %S +
-                                                    __LOWBSS_SIZE__,        size = $D000 -
-                                                                                   __STACKSIZE__ -
-                                                                                   %S -
-                                                                                   __LOWBSS_SIZE__;
-
-# defines entry point into program
-    TRAILER:       file = %O,               start = $0000, size = $0006;
-
-# memory beneath the ROM preceeding the character generator
-    HIDDEN_RAM2:   file = "", define = yes, start = $D800, size = $0800;
-
-# address of relocated character generator (same addess as ROM version)
-    CHARGEN:       file = "", define = yes, start = $E000, size = $0400;
-
-# memory beneath the ROM
-    HIDDEN_RAM:    file = "", define = yes, start = $E400, size = $FFFA - $E400;
-}
-
-SEGMENTS {
-    EXEHDR:      load = HEADER,                        type = ro;
-
-    SYSCHKHDR:   load = SYSCHKHDR,                     type = ro,                optional = yes;
-    SYSCHK:      load = SYSCHKCHNK,                    type = rw,  define = yes, optional = yes;
-    SYSCHKTRL:   load = SYSCHKTRL,                     type = ro,                optional = yes;
-
-    SRPREPHDR:   load = SRPREPHDR,                     type = ro;
-    LOWBSS:      load = SRPREPCHNK,                    type = bss, define = yes;  # shared btw. SRPREPCHNK and RAM, not zero initialized
-    SRPREP:      load = SRPREPCHNK,                    type = rw,  define = yes;
-    SHADOW_RAM:  load = SRPREPCHNK, run = HIDDEN_RAM,  type = rw,  define = yes, optional = yes;
-    SHADOW_RAM2: load = SRPREPCHNK, run = HIDDEN_RAM2, type = rw,  define = yes, optional = yes;
-    SRPREPTRL:   load = SRPREPTRL,                     type = ro;
-
-    MAINHDR:     load = MAINHDR,                       type = ro;
-    STARTUP:     load = RAM,                           type = ro,  define = yes;
-    LOWCODE:     load = RAM,                           type = ro,  define = yes, optional = yes;
-    INIT:        load = RAM,                           type = ro,                optional = yes;
-    CODE:        load = RAM,                           type = ro,  define = yes;
-    RODATA:      load = RAM,                           type = ro;
-    DATA:        load = RAM,                           type = rw;
-    BSS:         load = RAM,                           type = bss, define = yes;
-    ZEROPAGE:    load = ZP,                            type = zp;
-    EXTZP:       load = ZP,                            type = zp,                optional = yes;
-    AUTOSTRT:    load = TRAILER,                       type = ro;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/atmos.cfg b/cfg/atmos.cfg
deleted file mode 100644 (file)
index a1f935e..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-SYMBOLS {
-    __TAPEHDR__:   type = import;
-    __BASHDR__:    type = import;
-    __PROGFLAG__:  type = weak, value = $00; # $00=BASIC, $80=machine code
-    __AUTORUN__:   type = weak, value = $00; # $00=only load, $C7=run
-    __STACKSIZE__: type = weak, value = $0800; # 2K stack
-    __GRAB__:      type = weak, value = 0; # 0=don't grab graphics RAM, 1=grab graphics RAM
-    __RAMEND__:    type = weak, value = $9800 + $1C00 * __GRAB__;
-}
-MEMORY {
-    ZP:      file = "", define = yes, start = $00E2, size = $001A;
-    TAPEHDR: file = %O, type   = ro,  start = $0000, size = $001F;
-    BASHEAD: file = %O, define = yes, start = $0501, size = $000D;
-    RAM:     file = %O, define = yes, start = __BASHEAD_LAST__, size = __RAMEND__ - __RAM_START__ - __STACKSIZE__;
-}
-SEGMENTS {
-    ZEROPAGE: load = ZP,      type = zp;
-    TAPEHDR:  load = TAPEHDR, type = ro;
-    BASHDR:   load = BASHEAD, type = ro,  define = yes, optional = yes;
-    STARTUP:  load = RAM,     type = ro;
-    LOWCODE:  load = RAM,     type = ro,                optional = yes;
-    CODE:     load = RAM,     type = ro;
-    RODATA:   load = RAM,     type = ro;
-    INIT:     load = RAM,     type = ro,  define = yes, optional = yes;
-    DATA:     load = RAM,     type = rw;
-    ZPSAVE1:  load = RAM,     type = rw,  define = yes; # ZPSAVE1, ZPSAVE2 must be together
-    ZPSAVE2:  load = RAM,     type = bss;               # see "libsrc/atmos/crt0.s"
-    BSS:      load = RAM,     type = bss, define = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/bbc.cfg b/cfg/bbc.cfg
deleted file mode 100644 (file)
index 6304c30..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-SYMBOLS {
-    __STACKSIZE__: type = weak, value = $0800; # 2k stack
-}
-MEMORY {
-    ZP:  file = "", define = yes, start = $0070, size = $0020;
-    RAM: file = %O,               start = $0E00, size = $7200 - __STACKSIZE__;
-}
-SEGMENTS {
-    STARTUP:  load = RAM, type = ro,  define = yes;
-    LOWCODE:  load = RAM, type = ro,                optional = yes;
-    INIT:     load = RAM, type = ro,  define = yes, optional = yes;
-    CODE:     load = RAM, type = ro;
-    RODATA:   load = RAM, type = ro;
-    DATA:     load = RAM, type = rw;
-    BSS:      load = RAM, type = bss, define = yes;
-    ZEROPAGE: load = ZP,  type = zp;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/c128-overlay.cfg b/cfg/c128-overlay.cfg
deleted file mode 100644 (file)
index e16ad4b..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-SYMBOLS {
-    __LOADADDR__:    type = import;
-    __EXEHDR__:      type = import;
-    __OVERLAYADDR__: type = import;
-    __STACKSIZE__:   type = weak, value = $0800; # 2k stack
-    __OVERLAYSIZE__: type = weak, value = $1000; # 4k overlay
-}
-MEMORY {
-    ZP:       file = "", define = yes, start = $0002,                   size = $001A;
-    LOADADDR: file = %O,               start = $1BFF,                   size = $0002;
-    HEADER:   file = %O,               start = $1C01,                   size = $000C;
-    RAM:      file = %O, define = yes, start = $1C0D,                   size = $A3F3 - __OVERLAYSIZE__ - __STACKSIZE__;
-    OVL1ADDR: file = "%O.1",           start = $BFFE - __OVERLAYSIZE__, size = $0002;
-    OVL1:     file = "%O.1",           start = $C000 - __OVERLAYSIZE__, size = __OVERLAYSIZE__;
-    OVL2ADDR: file = "%O.2",           start = $BFFE - __OVERLAYSIZE__, size = $0002;
-    OVL2:     file = "%O.2",           start = $C000 - __OVERLAYSIZE__, size = __OVERLAYSIZE__;
-    OVL3ADDR: file = "%O.3",           start = $BFFE - __OVERLAYSIZE__, size = $0002;
-    OVL3:     file = "%O.3",           start = $C000 - __OVERLAYSIZE__, size = __OVERLAYSIZE__;
-    OVL4ADDR: file = "%O.4",           start = $BFFE - __OVERLAYSIZE__, size = $0002;
-    OVL4:     file = "%O.4",           start = $C000 - __OVERLAYSIZE__, size = __OVERLAYSIZE__;
-    OVL5ADDR: file = "%O.5",           start = $BFFE - __OVERLAYSIZE__, size = $0002;
-    OVL5:     file = "%O.5",           start = $C000 - __OVERLAYSIZE__, size = __OVERLAYSIZE__;
-    OVL6ADDR: file = "%O.6",           start = $BFFE - __OVERLAYSIZE__, size = $0002;
-    OVL6:     file = "%O.6",           start = $C000 - __OVERLAYSIZE__, size = __OVERLAYSIZE__;
-    OVL7ADDR: file = "%O.7",           start = $BFFE - __OVERLAYSIZE__, size = $0002;
-    OVL7:     file = "%O.7",           start = $C000 - __OVERLAYSIZE__, size = __OVERLAYSIZE__;
-    OVL8ADDR: file = "%O.8",           start = $BFFE - __OVERLAYSIZE__, size = $0002;
-    OVL8:     file = "%O.8",           start = $C000 - __OVERLAYSIZE__, size = __OVERLAYSIZE__;
-    OVL9ADDR: file = "%O.9",           start = $BFFE - __OVERLAYSIZE__, size = $0002;
-    OVL9:     file = "%O.9",           start = $C000 - __OVERLAYSIZE__, size = __OVERLAYSIZE__;
-}
-SEGMENTS {
-    LOADADDR: load = LOADADDR, type = ro;
-    EXEHDR:   load = HEADER,   type = ro;
-    STARTUP:  load = RAM,      type = ro;
-    LOWCODE:  load = RAM,      type = ro,                optional = yes;
-    INIT:     load = RAM,      type = ro,  define = yes, optional = yes;
-    CODE:     load = RAM,      type = ro;
-    RODATA:   load = RAM,      type = ro;
-    DATA:     load = RAM,      type = rw;
-    ZPSAVE:   load = RAM,      type = bss;
-    BSS:      load = RAM,      type = bss, define = yes;
-    ZEROPAGE: load = ZP,       type = zp;
-    OVL1ADDR: load = OVL1ADDR, type = ro;
-    OVERLAY1: load = OVL1,     type = ro,  define = yes, optional = yes;
-    OVL2ADDR: load = OVL2ADDR, type = ro;
-    OVERLAY2: load = OVL2,     type = ro,  define = yes, optional = yes;
-    OVL3ADDR: load = OVL3ADDR, type = ro;
-    OVERLAY3: load = OVL3,     type = ro,  define = yes, optional = yes;
-    OVL4ADDR: load = OVL4ADDR, type = ro;
-    OVERLAY4: load = OVL4,     type = ro,  define = yes, optional = yes;
-    OVL5ADDR: load = OVL5ADDR, type = ro;
-    OVERLAY5: load = OVL5,     type = ro,  define = yes, optional = yes;
-    OVL6ADDR: load = OVL6ADDR, type = ro;
-    OVERLAY6: load = OVL6,     type = ro,  define = yes, optional = yes;
-    OVL7ADDR: load = OVL7ADDR, type = ro;
-    OVERLAY7: load = OVL7,     type = ro,  define = yes, optional = yes;
-    OVL8ADDR: load = OVL8ADDR, type = ro;
-    OVERLAY8: load = OVL8,     type = ro,  define = yes, optional = yes;
-    OVL9ADDR: load = OVL9ADDR, type = ro;
-    OVERLAY9: load = OVL9,     type = ro,  define = yes, optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/c128.cfg b/cfg/c128.cfg
deleted file mode 100644 (file)
index 0e12591..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-SYMBOLS {
-    __LOADADDR__:  type = import;
-    __EXEHDR__:    type = import;
-    __STACKSIZE__: type = weak, value = $0800; # 2k stack
-}
-MEMORY {
-    ZP:       file = "", define = yes, start = $0002, size = $001A;
-    LOADADDR: file = %O,               start = $1BFF, size = $0002;
-    HEADER:   file = %O,               start = $1C01, size = $000C;
-    RAM:      file = %O, define = yes, start = $1C0D, size = $A3F3 - __STACKSIZE__;
-}
-SEGMENTS {
-    LOADADDR: load = LOADADDR, type = ro;
-    EXEHDR:   load = HEADER,   type = ro;
-    STARTUP:  load = RAM,      type = ro;
-    LOWCODE:  load = RAM,      type = ro,                optional = yes;
-    INIT:     load = RAM,      type = ro,  define = yes, optional = yes;
-    CODE:     load = RAM,      type = ro;
-    RODATA:   load = RAM,      type = ro;
-    DATA:     load = RAM,      type = rw;
-    ZPSAVE:   load = RAM,      type = bss;
-    BSS:      load = RAM,      type = bss, define = yes;
-    ZEROPAGE: load = ZP,       type = zp;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/c16.cfg b/cfg/c16.cfg
deleted file mode 100644 (file)
index 78c1739..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-SYMBOLS {
-    __LOADADDR__:  type = import;
-    __EXEHDR__:    type = import;
-    __STACKSIZE__: type = weak, value = $0800; # 2k stack
-}
-MEMORY {
-    ZP:       file = "", define = yes, start = $0002, size = $001A;
-    LOADADDR: file = %O,               start = $0FFF, size = $0002;
-    HEADER:   file = %O,               start = $1001, size = $000C;
-    RAM:      file = %O,               start = $100D, size = $6FF3 - __STACKSIZE__;
-}
-SEGMENTS {
-    LOADADDR: load = LOADADDR, type = ro;
-    EXEHDR:   load = HEADER, type = ro;
-    STARTUP:  load = RAM,    type = ro;
-    LOWCODE:  load = RAM,    type = ro,                optional = yes;
-    INIT:     load = RAM,    type = ro,  define = yes, optional = yes;
-    CODE:     load = RAM,    type = ro;
-    RODATA:   load = RAM,    type = ro;
-    DATA:     load = RAM,    type = rw;
-    ZPSAVE:   load = RAM,    type = bss;
-    BSS:      load = RAM,    type = bss, define = yes;
-    ZEROPAGE: load = ZP,     type = zp;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/c64-asm.cfg b/cfg/c64-asm.cfg
deleted file mode 100644 (file)
index 1ab80be..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-FEATURES {
-    STARTADDRESS: default = $0801;
-}
-SYMBOLS {
-    __LOADADDR__: type = import;
-}
-MEMORY {
-    ZP:       file = "", start = $0002,  size = $001A,      define = yes;
-    LOADADDR: file = %O, start = %S - 2, size = $0002;
-    RAM:      file = %O, start = %S,     size = $D000 - %S;
-}
-SEGMENTS {
-    LOADADDR: load = LOADADDR, type = ro;
-    EXEHDR:   load = RAM,      type = ro,  optional = yes;
-    CODE:     load = RAM,      type = rw,  optional = yes;
-    RODATA:   load = RAM,      type = ro,  optional = yes;
-    DATA:     load = RAM,      type = rw,  optional = yes;
-    BSS:      load = RAM,      type = bss, optional = yes;
-    ZEROPAGE: load = ZP,       type = zp,  optional = yes;
-}
diff --git a/cfg/c64-overlay.cfg b/cfg/c64-overlay.cfg
deleted file mode 100644 (file)
index 2f7693e..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-SYMBOLS {
-    __LOADADDR__:    type = import;
-    __EXEHDR__:      type = import;
-    __OVERLAYADDR__: type = import;
-    __STACKSIZE__:   type = weak, value = $0800; # 2k stack
-    __OVERLAYSIZE__: type = weak, value = $1000; # 4k overlay
-}
-MEMORY {
-    ZP:       file = "", define = yes, start = $0002,                   size = $001A;
-    LOADADDR: file = %O,               start = $07FF,                   size = $0002;
-    HEADER:   file = %O,               start = $0801,                   size = $000C;
-    RAM:      file = %O, define = yes, start = $080D,                   size = $C7F3 - __OVERLAYSIZE__ - __STACKSIZE__;
-    OVL1ADDR: file = "%O.1",           start = $CFFE - __OVERLAYSIZE__, size = $0002;
-    OVL1:     file = "%O.1",           start = $D000 - __OVERLAYSIZE__, size = __OVERLAYSIZE__;
-    OVL2ADDR: file = "%O.2",           start = $CFFE - __OVERLAYSIZE__, size = $0002;
-    OVL2:     file = "%O.2",           start = $D000 - __OVERLAYSIZE__, size = __OVERLAYSIZE__;
-    OVL3ADDR: file = "%O.3",           start = $CFFE - __OVERLAYSIZE__, size = $0002;
-    OVL3:     file = "%O.3",           start = $D000 - __OVERLAYSIZE__, size = __OVERLAYSIZE__;
-    OVL4ADDR: file = "%O.4",           start = $CFFE - __OVERLAYSIZE__, size = $0002;
-    OVL4:     file = "%O.4",           start = $D000 - __OVERLAYSIZE__, size = __OVERLAYSIZE__;
-    OVL5ADDR: file = "%O.5",           start = $CFFE - __OVERLAYSIZE__, size = $0002;
-    OVL5:     file = "%O.5",           start = $D000 - __OVERLAYSIZE__, size = __OVERLAYSIZE__;
-    OVL6ADDR: file = "%O.6",           start = $CFFE - __OVERLAYSIZE__, size = $0002;
-    OVL6:     file = "%O.6",           start = $D000 - __OVERLAYSIZE__, size = __OVERLAYSIZE__;
-    OVL7ADDR: file = "%O.7",           start = $CFFE - __OVERLAYSIZE__, size = $0002;
-    OVL7:     file = "%O.7",           start = $D000 - __OVERLAYSIZE__, size = __OVERLAYSIZE__;
-    OVL8ADDR: file = "%O.8",           start = $CFFE - __OVERLAYSIZE__, size = $0002;
-    OVL8:     file = "%O.8",           start = $D000 - __OVERLAYSIZE__, size = __OVERLAYSIZE__;
-    OVL9ADDR: file = "%O.9",           start = $CFFE - __OVERLAYSIZE__, size = $0002;
-    OVL9:     file = "%O.9",           start = $D000 - __OVERLAYSIZE__, size = __OVERLAYSIZE__;
-}
-SEGMENTS {
-    LOADADDR: load = LOADADDR, type = ro;
-    EXEHDR:   load = HEADER,   type = ro;
-    STARTUP:  load = RAM,      type = ro;
-    LOWCODE:  load = RAM,      type = ro,                optional = yes;
-    INIT:     load = RAM,      type = ro,  define = yes, optional = yes;
-    CODE:     load = RAM,      type = ro;
-    RODATA:   load = RAM,      type = ro;
-    DATA:     load = RAM,      type = rw;
-    ZPSAVE:   load = RAM,      type = bss;
-    BSS:      load = RAM,      type = bss, define = yes;
-    ZEROPAGE: load = ZP,       type = zp;
-    OVL1ADDR: load = OVL1ADDR, type = ro;
-    OVERLAY1: load = OVL1,     type = ro,  define = yes, optional = yes;
-    OVL2ADDR: load = OVL2ADDR, type = ro;
-    OVERLAY2: load = OVL2,     type = ro,  define = yes, optional = yes;
-    OVL3ADDR: load = OVL3ADDR, type = ro;
-    OVERLAY3: load = OVL3,     type = ro,  define = yes, optional = yes;
-    OVL4ADDR: load = OVL4ADDR, type = ro;
-    OVERLAY4: load = OVL4,     type = ro,  define = yes, optional = yes;
-    OVL5ADDR: load = OVL5ADDR, type = ro;
-    OVERLAY5: load = OVL5,     type = ro,  define = yes, optional = yes;
-    OVL6ADDR: load = OVL6ADDR, type = ro;
-    OVERLAY6: load = OVL6,     type = ro,  define = yes, optional = yes;
-    OVL7ADDR: load = OVL7ADDR, type = ro;
-    OVERLAY7: load = OVL7,     type = ro,  define = yes, optional = yes;
-    OVL8ADDR: load = OVL8ADDR, type = ro;
-    OVERLAY8: load = OVL8,     type = ro,  define = yes, optional = yes;
-    OVL9ADDR: load = OVL9ADDR, type = ro;
-    OVERLAY9: load = OVL9,     type = ro,  define = yes, optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/c64.cfg b/cfg/c64.cfg
deleted file mode 100644 (file)
index 5d8befd..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-SYMBOLS {
-    __LOADADDR__:  type = import;
-    __EXEHDR__:    type = import;
-    __STACKSIZE__: type = weak, value = $0800; # 2k stack
-}
-MEMORY {
-    ZP:       file = "", define = yes, start = $0002, size = $001A;
-    LOADADDR: file = %O,               start = $07FF, size = $0002;
-    HEADER:   file = %O,               start = $0801, size = $000C;
-    RAM:      file = %O, define = yes, start = $080D, size = $C7F3 - __STACKSIZE__;
-}
-SEGMENTS {
-    LOADADDR: load = LOADADDR, type = ro;
-    EXEHDR:   load = HEADER,   type = ro;
-    STARTUP:  load = RAM,      type = ro;
-    LOWCODE:  load = RAM,      type = ro,                optional = yes;
-    INIT:     load = RAM,      type = ro,  define = yes, optional = yes;
-    CODE:     load = RAM,      type = ro;
-    RODATA:   load = RAM,      type = ro;
-    DATA:     load = RAM,      type = rw;
-    ZPSAVE:   load = RAM,      type = bss;
-    BSS:      load = RAM,      type = bss, define = yes;
-    ZEROPAGE: load = ZP,       type = zp;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/cbm510.cfg b/cfg/cbm510.cfg
deleted file mode 100644 (file)
index 7635c6e..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-SYMBOLS {
-    # The stack starts from $FEC3 and grows towards the video ram
-    __STACKSIZE__: type = weak, value = $06C3; # ~1.5k stack
-}
-MEMORY {
-    HEADER:  file = %O,               start = $0001, size = $0050, fill = yes;
-    ZP:      file = %O, define = yes, start = $0051, size = $00AD, fill = yes;
-    STARTUP: file = %O,               start = $00FE, size = $0102, fill = yes;
-    PAGE2:   file = %O,               start = $0200, size = $0100, fill = yes;
-    PAGE3:   file = %O,               start = $0300, size = $0100, fill = yes;
-    RAM:     file = %O,               start = $0400, size = $DC00;
-    CHARRAM: file = "", define = yes, start = $E000, size = $1000;
-    VIDRAM:  file = "", define = yes, start = $F000, size = $0400;
-}
-SEGMENTS {
-    EXEHDR:   load = HEADER,  type = rw;
-    STARTUP:  load = STARTUP, type = rw;
-    PAGE2:    load = PAGE2,   type = rw;
-    PAGE3:    load = PAGE3,   type = rw;
-    LOWCODE:  load = RAM,     type = ro,                optional = yes;
-    INIT:     load = RAM,     type = ro,  define = yes, optional = yes;
-    CODE:     load = RAM,     type = ro;
-    RODATA:   load = RAM,     type = ro;
-    DATA:     load = RAM,     type = rw;
-    BSS:      load = RAM,     type = bss, define = yes;
-    ZEROPAGE: load = ZP,      type = zp;
-    EXTZP:    load = ZP,      type = rw,  define = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/cbm610.cfg b/cfg/cbm610.cfg
deleted file mode 100644 (file)
index 48b5eba..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-SYMBOLS {
-    __STACKSIZE__: type = weak, value = $0800; # 2k stack
-}
-MEMORY {
-    HEADER:  file = %O,               start = $0001, size = $0050, fill = yes;
-    ZP:      file = %O, define = yes, start = $0051, size = $00AD, fill = yes;
-    STARTUP: file = %O,               start = $00FE, size = $0102, fill = yes;
-    PAGE2:   file = %O,               start = $0200, size = $0100, fill = yes;
-    PAGE3:   file = %O,               start = $0300, size = $0100, fill = yes;
-    RAM:     file = %O,               start = $0400, size = $FECB - __STACKSIZE__;
-}
-SEGMENTS {
-    EXEHDR:   load = HEADER,  type = rw;
-    STARTUP:  load = STARTUP, type = rw;
-    PAGE2:    load = PAGE2,   type = rw;
-    PAGE3:    load = PAGE3,   type = rw;
-    LOWCODE:  load = RAM,     type = ro,                optional = yes;
-    INIT:     load = RAM,     type = ro,  define = yes, optional = yes;
-    CODE:     load = RAM,     type = ro;
-    RODATA:   load = RAM,     type = ro;
-    DATA:     load = RAM,     type = rw;
-    BSS:      load = RAM,     type = bss, define = yes;
-    ZEROPAGE: load = ZP,      type = zp;
-    EXTZP:    load = ZP,      type = rw,  define = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/geos-apple.cfg b/cfg/geos-apple.cfg
deleted file mode 100644 (file)
index 746e1f2..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-SYMBOLS {
-    __BACKBUFSIZE__: type = weak, value = $2000;
-    __OVERLAYSIZE__: type = weak, value = $0000;
-    __OVERLAYADDR__: type = weak, value = $C000 - __BACKBUFSIZE__ - __OVERLAYSIZE__;
-    __STACKSIZE__:   type = weak, value = $0400;
-    __STACKADDR__:   type = weak, value = $2000 - __STACKSIZE__;
-}
-MEMORY {
-    CVT:    file   = %O,  start = $0,              size = $20000;
-    ZP:     define = yes, start = $80,             size = $1A + $06;
-    EXT:    define = yes, start = $0C00,           size = __STACKADDR__ - $0C00;
-    VLIR0:  define = yes, start = $4000,           size = __OVERLAYADDR__ - $4000;
-    VLIR1:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR2:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR3:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR4:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR5:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR6:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR7:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR8:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR9:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR10: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR11: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR12: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR13: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR14: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR15: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR16: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR17: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR18: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR19: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-}
-SEGMENTS {
-    ZEROPAGE:  type = zp,  load = ZP;
-    EXTZP:     type = zp,  load = ZP,                 optional   = yes;
-    EXTBSS:    type = bss, load = EXT,                define     = yes,  optional = yes;
-    FILEINFO:  type = ro,                 load = CVT, offset     = $002;
-    RECORDS:   type = ro,                 load = CVT, offset     = $100, optional = yes;
-    DIRENTRY:  type = ro,                 load = CVT, offset     = $180;
-    VLIRIDX0:  type = ro,                 load = CVT, align      = $200, optional = yes;
-    STARTUP:   type = ro,  run  = VLIR0,  load = CVT, align_load = $200, define   = yes;
-    LOWCODE:   type = ro,  run  = VLIR0,  load = CVT,                    optional = yes;
-    INIT:      type = ro,  run  = VLIR0,  load = CVT, define     = yes,  optional = yes;
-    CODE:      type = ro,  run  = VLIR0,  load = CVT;
-    RODATA:    type = ro,  run  = VLIR0,  load = CVT;
-    DATA:      type = rw,  run  = VLIR0,  load = CVT;
-    BSS:       type = bss, load = VLIR0,              define     = yes;
-    VLIRIDX1:  type = ro,                 load = CVT, align      = $200, optional = yes;
-    OVERLAY1:  type = ro,  run  = VLIR1,  load = CVT, align_load = $200, optional = yes;
-    VLIRIDX2:  type = ro,                 load = CVT, align      = $200, optional = yes;
-    OVERLAY2:  type = ro,  run  = VLIR2,  load = CVT, align_load = $200, optional = yes;
-    VLIRIDX3:  type = ro,                 load = CVT, align      = $200, optional = yes;
-    OVERLAY3:  type = ro,  run  = VLIR3,  load = CVT, align_load = $200, optional = yes;
-    VLIRIDX4:  type = ro,                 load = CVT, align      = $200, optional = yes;
-    OVERLAY4:  type = ro,  run  = VLIR4,  load = CVT, align_load = $200, optional = yes;
-    VLIRIDX5:  type = ro,                 load = CVT, align      = $200, optional = yes;
-    OVERLAY5:  type = ro,  run  = VLIR5,  load = CVT, align_load = $200, optional = yes;
-    VLIRIDX6:  type = ro,                 load = CVT, align      = $200, optional = yes;
-    OVERLAY6:  type = ro,  run  = VLIR6,  load = CVT, align_load = $200, optional = yes;
-    VLIRIDX7:  type = ro,                 load = CVT, align      = $200, optional = yes;
-    OVERLAY7:  type = ro,  run  = VLIR7,  load = CVT, align_load = $200, optional = yes;
-    VLIRIDX8:  type = ro,                 load = CVT, align      = $200, optional = yes;
-    OVERLAY8:  type = ro,  run  = VLIR8,  load = CVT, align_load = $200, optional = yes;
-    VLIRIDX9:  type = ro,                 load = CVT, align      = $200, optional = yes;
-    OVERLAY9:  type = ro,  run  = VLIR9,  load = CVT, align_load = $200, optional = yes;
-    VLIRIDX10: type = ro,                 load = CVT, align      = $200, optional = yes;
-    OVERLAY10: type = ro,  run  = VLIR10, load = CVT, align_load = $200, optional = yes;
-    VLIRIDX11: type = ro,                 load = CVT, align      = $200, optional = yes;
-    OVERLAY11: type = ro,  run  = VLIR11, load = CVT, align_load = $200, optional = yes;
-    VLIRIDX12: type = ro,                 load = CVT, align      = $200, optional = yes;
-    OVERLAY12: type = ro,  run  = VLIR12, load = CVT, align_load = $200, optional = yes;
-    VLIRIDX13: type = ro,                 load = CVT, align      = $200, optional = yes;
-    OVERLAY13: type = ro,  run  = VLIR13, load = CVT, align_load = $200, optional = yes;
-    VLIRIDX14: type = ro,                 load = CVT, align      = $200, optional = yes;
-    OVERLAY14: type = ro,  run  = VLIR14, load = CVT, align_load = $200, optional = yes;
-    VLIRIDX15: type = ro,                 load = CVT, align      = $200, optional = yes;
-    OVERLAY15: type = ro,  run  = VLIR15, load = CVT, align_load = $200, optional = yes;
-    VLIRIDX16: type = ro,                 load = CVT, align      = $200, optional = yes;
-    OVERLAY16: type = ro,  run  = VLIR16, load = CVT, align_load = $200, optional = yes;
-    VLIRIDX17: type = ro,                 load = CVT, align      = $200, optional = yes;
-    OVERLAY17: type = ro,  run  = VLIR17, load = CVT, align_load = $200, optional = yes;
-    VLIRIDX18: type = ro,                 load = CVT, align      = $200, optional = yes;
-    OVERLAY18: type = ro,  run  = VLIR18, load = CVT, align_load = $200, optional = yes;
-    VLIRIDX19: type = ro,                 load = CVT, align      = $200, optional = yes;
-    OVERLAY19: type = ro,  run  = VLIR19, load = CVT, align_load = $200, optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/geos-cbm.cfg b/cfg/geos-cbm.cfg
deleted file mode 100644 (file)
index ddef00a..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-SYMBOLS {
-    __BACKBUFSIZE__: type = weak, value = $2000;
-    __OVERLAYSIZE__: type = weak, value = $0000;
-    __OVERLAYADDR__: type = weak, value = $8000 - __BACKBUFSIZE__ - __OVERLAYSIZE__;
-    __STACKSIZE__:   type = weak, value = $0400;
-    __STACKADDR__:   type = weak, value = __OVERLAYADDR__ - __STACKSIZE__;
-}
-MEMORY {
-    CVT:    file   = %O,  start = $0,              size = $40000;
-    ZP:     define = yes, start = $58,             size = $1A + $06;
-    VLIR0:  define = yes, start = $0400,           size = __STACKADDR__ - $0400;
-    VLIR1:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR2:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR3:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR4:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR5:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR6:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR7:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR8:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR9:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR10: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR11: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR12: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR13: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR14: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR15: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR16: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR17: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR18: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-    VLIR19: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
-}
-SEGMENTS {
-    ZEROPAGE:  type = zp,  load = ZP;
-    EXTZP:     type = zp,  load = ZP,                 optional   = yes;
-    DIRENTRY:  type = ro,                 load = CVT, align      = $FE;
-    FILEINFO:  type = ro,                 load = CVT, align      = $FE;
-    RECORDS:   type = ro,                 load = CVT, align      = $FE, optional = yes;
-    STARTUP:   type = ro,  run  = VLIR0,  load = CVT, align_load = $FE, define   = yes;
-    LOWCODE:   type = ro,  run  = VLIR0,  load = CVT,                   optional = yes;
-    INIT:      type = ro,  run  = VLIR0,  load = CVT, define     = yes, optional = yes;
-    CODE:      type = ro,  run  = VLIR0,  load = CVT;
-    RODATA:    type = ro,  run  = VLIR0,  load = CVT;
-    DATA:      type = rw,  run  = VLIR0,  load = CVT;
-    BSS:       type = bss, load = VLIR0,              define     = yes;
-    OVERLAY1:  type = ro,  run  = VLIR1,  load = CVT, align_load = $FE, optional = yes;
-    OVERLAY2:  type = ro,  run  = VLIR2,  load = CVT, align_load = $FE, optional = yes;
-    OVERLAY3:  type = ro,  run  = VLIR3,  load = CVT, align_load = $FE, optional = yes;
-    OVERLAY4:  type = ro,  run  = VLIR4,  load = CVT, align_load = $FE, optional = yes;
-    OVERLAY5:  type = ro,  run  = VLIR5,  load = CVT, align_load = $FE, optional = yes;
-    OVERLAY6:  type = ro,  run  = VLIR6,  load = CVT, align_load = $FE, optional = yes;
-    OVERLAY7:  type = ro,  run  = VLIR7,  load = CVT, align_load = $FE, optional = yes;
-    OVERLAY8:  type = ro,  run  = VLIR8,  load = CVT, align_load = $FE, optional = yes;
-    OVERLAY9:  type = ro,  run  = VLIR9,  load = CVT, align_load = $FE, optional = yes;
-    OVERLAY10: type = ro,  run  = VLIR10, load = CVT, align_load = $FE, optional = yes;
-    OVERLAY11: type = ro,  run  = VLIR11, load = CVT, align_load = $FE, optional = yes;
-    OVERLAY12: type = ro,  run  = VLIR12, load = CVT, align_load = $FE, optional = yes;
-    OVERLAY13: type = ro,  run  = VLIR13, load = CVT, align_load = $FE, optional = yes;
-    OVERLAY14: type = ro,  run  = VLIR14, load = CVT, align_load = $FE, optional = yes;
-    OVERLAY15: type = ro,  run  = VLIR15, load = CVT, align_load = $FE, optional = yes;
-    OVERLAY16: type = ro,  run  = VLIR16, load = CVT, align_load = $FE, optional = yes;
-    OVERLAY17: type = ro,  run  = VLIR17, load = CVT, align_load = $FE, optional = yes;
-    OVERLAY18: type = ro,  run  = VLIR18, load = CVT, align_load = $FE, optional = yes;
-    OVERLAY19: type = ro,  run  = VLIR19, load = CVT, align_load = $FE, optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/lunix.cfg b/cfg/lunix.cfg
deleted file mode 100644 (file)
index 1342c39..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-# ld65 Linker-configuration for LUnix, Next Generation.
-
-SYMBOLS {
-    __HEAPSIZE__:  type = weak, value = $2000; # 8k heap [temporary, until LUnix malloc() exists]
-    __STACKSIZE__: type = weak, value = $0400; # 1k stack (do typical LUnix apps. need 2k?)
-}
-MEMORY {
-    ZP:  start = $0080, size = $0040;
-    RAM: start = %S,    size = $7600 - __STACKSIZE__;
-}
-SEGMENTS {
-    ZEROPAGE: load = ZP,  type = zp,  define = yes;                 # Pseudo-registers
-    STARTUP:  load = RAM, type = ro;                                # First initialization code
-    LOWCODE:  load = RAM, type = ro,                optional = yes; # Legacy from other platforms
-    INIT:     load = RAM, type = ro,  define = yes, optional = yes; # Library initialization code
-    CODE:     load = RAM, type = ro;                                # Program
-    RODATA:   load = RAM, type = ro;                                # Literals, constants
-    DATA:     load = RAM, type = rw;                                # Initialized variables
-    BSS:      load = RAM, type = bss, define = yes;                 # Uninitialized variables
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
-FILES {
-    %O: format = o65;
-}
-FORMATS {
-    o65: os     = lunix,
-         type   = small,
-         export = main,         # Program entry-point
-         import = LUNIXKERNEL;  # Kernel entry-points
-}
diff --git a/cfg/lynx-bll.cfg b/cfg/lynx-bll.cfg
deleted file mode 100644 (file)
index 2196775..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-SYMBOLS {
-    __STACKSIZE__:        type = weak, value = $0800; # 2k stack
-    __STARTOFDIRECTORY__: type = weak, value = $00CB; # start just after loader
-    __BLOCKSIZE__:        type = weak, value = $0400; # cart block size
-    __BLLHDR__:           type = import;
-}
-MEMORY {
-    ZP:     file = "", define = yes, start = $0000, size = $0100;
-    HEADER: file = %O,               start = $0000, size = $000a;
-    RAM:    file = %O, define = yes, start = $0400, size = $BC38 - __STACKSIZE__;
-}
-SEGMENTS {
-    BLLHDR:   load = HEADER, type = ro;
-    STARTUP:  load = RAM,    type = ro,  define = yes;
-    LOWCODE:  load = RAM,    type = ro,  define = yes, optional = yes;
-    INIT:     load = RAM,    type = ro,  define = yes, optional = yes;
-    CODE:     load = RAM,    type = ro,  define = yes;
-    RODATA:   load = RAM,    type = ro,  define = yes;
-    DATA:     load = RAM,    type = rw,  define = yes;
-    BSS:      load = RAM,    type = bss, define = yes;
-    ZEROPAGE: load = ZP,     type = zp;
-    EXTZP:    load = ZP,     type = zp,                optional = yes;
-    APPZP:    load = ZP,     type = zp,                optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/lynx-coll.cfg b/cfg/lynx-coll.cfg
deleted file mode 100644 (file)
index b7fd787..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-SYMBOLS {
-    __STACKSIZE__:        type = weak, value = $0800; # 2k stack
-    __STARTOFDIRECTORY__: type = weak, value = $00CB; # start just after loader
-    __BLOCKSIZE__:        type = weak, value = $0400; # cart block size
-    __EXEHDR__:           type = import;
-    __BOOTLDR__:          type = import;
-    __DEFDIR__:           type = import;
-}
-MEMORY {
-    ZP:     file = "", define = yes, start = $0000, size = $0100;
-    HEADER: file = %O,               start = $0000, size = $0040;
-    BOOT:   file = %O,               start = $0200, size = __STARTOFDIRECTORY__;
-    DIR:    file = %O,               start = $0000, size = 8;
-    RAM:    file = %O, define = yes, start = $0200, size = $9E58 - __STACKSIZE__;
-}
-SEGMENTS {
-    EXEHDR:    load = HEADER, type = ro;
-    BOOTLDR:   load = BOOT,   type = ro;
-    DIRECTORY: load = DIR,    type = ro;
-    STARTUP:   load = RAM,    type = ro,  define = yes;
-    LOWCODE:   load = RAM,    type = ro,  define = yes, optional = yes;
-    INIT:      load = RAM,    type = ro,  define = yes, optional = yes;
-    CODE:      load = RAM,    type = ro,  define = yes;
-    RODATA:    load = RAM,    type = ro,  define = yes;
-    DATA:      load = RAM,    type = rw,  define = yes;
-    BSS:       load = RAM,    type = bss, define = yes;
-    ZEROPAGE:  load = ZP,     type = zp;
-    EXTZP:     load = ZP,     type = zp,                optional = yes;
-    APPZP:     load = ZP,     type = zp,                optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/lynx-uploader.cfg b/cfg/lynx-uploader.cfg
deleted file mode 100644 (file)
index 740a18b..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-SYMBOLS {
-    __STACKSIZE__:        type = weak, value = $0800; # 2k stack
-    __STARTOFDIRECTORY__: type = weak, value = $00CB; # start just after loader
-    __BLOCKSIZE__:        type = weak, value = $0400; # cart block size
-    __EXEHDR__:           type = import;
-    __BOOTLDR__:          type = import;
-    __DEFDIR__:           type = import;
-    __UPLOADER__:         type = import;
-}
-MEMORY {
-    ZP:     file = "", define = yes, start = $0000, size = $0100;
-    HEADER: file = %O,               start = $0000, size = $0040;
-    BOOT:   file = %O,               start = $0200, size = __STARTOFDIRECTORY__;
-    DIR:    file = %O,               start = $0000, size = 8;
-    RAM:    file = %O, define = yes, start = $0200, size = $BD38 - __STACKSIZE__;
-    UPLDR:  file = %O, define = yes, start = $BFDC, size = $005C;
-}
-SEGMENTS {
-    EXEHDR:   load = HEADER, type = ro;
-    BOOTLDR:  load = BOOT,   type = ro;
-    DIRECTORY:load = DIR,    type = ro;
-    STARTUP:  load = RAM,    type = ro,  define = yes;
-    LOWCODE:  load = RAM,    type = ro,  define = yes, optional = yes;
-    INIT:     load = RAM,    type = ro,  define = yes, optional = yes;
-    CODE:     load = RAM,    type = ro,  define = yes;
-    RODATA:   load = RAM,    type = ro,  define = yes;
-    DATA:     load = RAM,    type = rw,  define = yes;
-    BSS:      load = RAM,    type = bss, define = yes;
-    UPCODE:   load = UPLDR,  type = ro,  define = yes;
-    UPDATA:   load = UPLDR,  type = rw,  define = yes;
-    ZEROPAGE: load = ZP,     type = zp;
-    EXTZP:    load = ZP,     type = zp,                optional = yes;
-    APPZP:    load = ZP,     type = zp,                optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/lynx.cfg b/cfg/lynx.cfg
deleted file mode 100644 (file)
index 2c9e762..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-SYMBOLS {
-    __STACKSIZE__:        type = weak, value = $0800; # 2k stack
-    __STARTOFDIRECTORY__: type = weak, value = $00CB; # start just after loader
-    __BLOCKSIZE__:        type = weak, value = 1024; # cart block size
-    __EXEHDR__:           type = import;
-    __BOOTLDR__:          type = import;
-    __DEFDIR__:           type = import;
-}
-MEMORY {
-    ZP:     file = "", define = yes, start = $0000, size = $0100;
-    HEADER: file = %O,               start = $0000, size = $0040;
-    BOOT:   file = %O,               start = $0200, size = __STARTOFDIRECTORY__;
-    DIR:    file = %O,               start = $0000, size = 8;
-    RAM:    file = %O, define = yes, start = $0200, size = $BE38 - __STACKSIZE__;
-}
-SEGMENTS {
-    EXEHDR:    load = HEADER, type = ro;
-    BOOTLDR:   load = BOOT,   type = ro;
-    DIRECTORY: load = DIR,    type = ro;
-    STARTUP:   load = RAM,    type = ro,  define = yes;
-    LOWCODE:   load = RAM,    type = ro,  define = yes, optional = yes;
-    INIT:      load = RAM,    type = ro,  define = yes, optional = yes;
-    CODE:      load = RAM,    type = ro,  define = yes;
-    RODATA:    load = RAM,    type = ro,  define = yes;
-    DATA:      load = RAM,    type = rw,  define = yes;
-    BSS:       load = RAM,    type = bss, define = yes;
-    ZEROPAGE:  load = ZP,     type = zp;
-    EXTZP:     load = ZP,     type = zp,                optional = yes;
-    APPZP:     load = ZP,     type = zp,                optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/module.cfg b/cfg/module.cfg
deleted file mode 100644 (file)
index 452491e..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-MEMORY {
-    ZP:                  start = $0000, size = $0100;
-    COMBINED: file = %O, start = $0000, size = $FFFF;
-}
-SEGMENTS {
-    ZEROPAGE: load = ZP,       type = zp;
-    EXTZP:    load = ZP,       type = zp, optional = yes;
-    HEADER:   load = COMBINED, type = ro;
-    INIT:     load = COMBINED, type = ro, optional = yes;
-    CODE:     load = COMBINED, type = ro;
-    RODATA:   load = COMBINED, type = ro;
-    DATA:     load = COMBINED, type = rw;
-    BSS:      load = COMBINED, type = bss;
-}
-FILES {
-    %O: format = o65;
-}
-FORMATS {
-    o65: os   = cc65,
-         type = small;
-}
diff --git a/cfg/nes.cfg b/cfg/nes.cfg
deleted file mode 100644 (file)
index 3e2f408..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-SYMBOLS {
-    __STACKSIZE__: type = weak, value = $0300; # 3 pages stack
-}
-MEMORY {
-    ZP:     file = "", start = $0002, size = $001A, type = rw, define = yes;
-
-    # INES Cartridge Header
-    HEADER: file = %O, start = $0000, size = $0010, fill = yes;
-
-    # 2 16K ROM Banks
-    # - startup
-    # - code
-    # - rodata
-    # - data (load)
-    ROM0:   file = %O, start = $8000, size = $7FF4, fill = yes, define = yes;
-
-    # Hardware Vectors at End of 2nd 8K ROM
-    ROMV:   file = %O, start = $FFF6, size = $000C, fill = yes;
-
-    # 1 8k CHR Bank
-    ROM2:   file = %O, start = $0000, size = $2000, fill = yes;
-
-    # standard 2k SRAM (-zeropage)
-    # $0100-$0200 cpu stack
-    # $0200-$0500 3 pages for ppu memory write buffer
-    # $0500-$0800 3 pages for cc65 parameter stack
-    SRAM:   file = "", start = $0500, size = __STACKSIZE__, define = yes;
-
-    # additional 8K SRAM Bank
-    # - data (run)
-    # - bss
-    # - heap
-    RAM:    file = "", start = $6000, size = $2000, define = yes;
-}
-SEGMENTS {
-    HEADER:   load = HEADER,          type = ro;
-    STARTUP:  load = ROM0,            type = ro,  define = yes;
-    LOWCODE:  load = ROM0,            type = ro,                optional = yes;
-    INIT:     load = ROM0,            type = ro,  define = yes, optional = yes;
-    CODE:     load = ROM0,            type = ro,  define = yes;
-    RODATA:   load = ROM0,            type = ro,  define = yes;
-    DATA:     load = ROM0, run = RAM, type = rw,  define = yes;
-    VECTORS:  load = ROMV,            type = rw;
-    CHARS:    load = ROM2,            type = rw;
-    BSS:      load = RAM,             type = bss, define = yes;
-    ZEROPAGE: load = ZP,              type = zp;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/none.cfg b/cfg/none.cfg
deleted file mode 100644 (file)
index 49409a8..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-SYMBOLS {
-    __STACKSIZE__: type = weak, value = $0800; # 2k stack
-}
-MEMORY {
-    ZP:  file = "", define = yes, start = $0000, size = $0001F;
-    RAM: file = %O,               start = %S,    size = $10000 - __STACKSIZE__;
-}
-SEGMENTS {
-    LOWCODE:  load = RAM, type = ro,                optional = yes;
-    INIT:     load = RAM, type = ro,  define = yes, optional = yes;
-    CODE:     load = RAM, type = rw;
-    RODATA:   load = RAM, type = rw;
-    DATA:     load = RAM, type = rw;
-    BSS:      load = RAM, type = bss, define = yes;
-    ZEROPAGE: load = ZP,  type = zp;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/osic1p-asm.cfg b/cfg/osic1p-asm.cfg
deleted file mode 100644 (file)
index 4000890..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-FEATURES {
-    STARTADDRESS: default = $0200;
-}
-SYMBOLS {
-# If you want ld65 to output a loadable-format file by default, then uncomment
-# the next line. (Then, "-u __BOOT__" wouldn't be needed on the command line.)
-#    __BOOT__:      type = import;
-    __STACKSIZE__: type = weak, value = $0400; # 1 kB stack
-    __HIMEM__:     type = weak, value = $8000; # 32 kB RAM
-}
-MEMORY {
-    # for size of ZP, see runtime/zeropage.s and c1p/extzp.s
-    ZP:       file = "", define = yes, start = $0002, size = $001A + $0006;
-    HEAD:     file = %O,               start = $0000, size = $00B6;
-    RAM:      file = %O, define = yes, start = %S, size = __HIMEM__ - __STACKSIZE__ - %S;
-}
-SEGMENTS {
-    BOOT:     load = HEAD, type = ro,                optional = yes;
-    INIT:     load = RAM,  type = ro,  define = yes, optional = yes;
-    CODE:     load = RAM,  type = rw;
-    RODATA:   load = RAM,  type = rw;
-    DATA:     load = RAM,  type = rw;
-    BSS:      load = RAM,  type = bss, define = yes;
-    ZEROPAGE: load = ZP,   type = zp;
-}
diff --git a/cfg/osic1p.cfg b/cfg/osic1p.cfg
deleted file mode 100644 (file)
index fd9aa60..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-FEATURES {
-    STARTADDRESS: default = $0200;
-}
-SYMBOLS {
-# If you want ld65 to output a loadable-format file by default, then uncomment
-# the next line. (Then, "-u __BOOT__" wouldn't be needed on the command line.)
-#    __BOOT__:      type = import;
-    __STACKSIZE__: type = weak, value = $0400; # 1 kB stack
-    __HIMEM__:     type = weak, value = $8000; # 32 kB RAM
-}
-MEMORY {
-    # for size of ZP, see runtime/zeropage.s and c1p/extzp.s
-    ZP:       file = "", define = yes, start = $0002, size = $001A + $0020;
-    HEAD:     file = %O,               start = $0000, size = $00B6;
-    RAM:      file = %O, define = yes, start = %S, size = __HIMEM__ - __STACKSIZE__ - %S;
-}
-SEGMENTS {
-    BOOT:     load = HEAD, type = ro,                optional = yes;
-    STARTUP:  load = RAM,  type = ro;
-    LOWCODE:  load = RAM,  type = ro,                optional = yes;
-    INIT:     load = RAM,  type = ro,  define = yes, optional = yes;
-    CODE:     load = RAM,  type = rw;
-    RODATA:   load = RAM,  type = rw;
-    DATA:     load = RAM,  type = rw;
-    BSS:      load = RAM,  type = bss, define = yes;
-    ZEROPAGE: load = ZP,   type = zp;
-    EXTZP:    load = ZP,   type = zp,  define = yes, optional = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-}
diff --git a/cfg/pce.cfg b/cfg/pce.cfg
deleted file mode 100644 (file)
index 9128eb7..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-# linker config to produce simple NEC PC-Engine cartridge (.pce)
-
-SYMBOLS {
-        __STACKSIZE__: type = weak, value = $0300; # 3 pages stack
-}
-
-MEMORY {
-        # FIXME: is this correct? the first 3? bytes cant be used?
-        ZP: start = $03, size = $fd, type = rw, define = yes;
-
-        # reset-bank and hardware vectors
-        ROM0: start = $e000, size = $1ff6, file = %O ,fill = yes, define = yes;
-        ROMV: start = $fff6, size = $a, file = %O,fill = yes;
-
-        # first RAM page (also contains stack and zeropage)
-        RAM: start = $2200, size = $1e00, define = yes;
-}
-
-SEGMENTS {
-        STARTUP: load = ROM0, type = ro, define = yes;
-        INIT:    load = ROM0, type = ro, define = yes, optional = yes;
-        CODE:    load = ROM0, type = ro, define = yes;
-        RODATA:  load = ROM0, type = ro, define = yes;
-        DATA:    load = ROM0, run= RAM, type = rw, define = yes;
-        BSS:     load = RAM, type = bss, define = yes;
-        VECTORS: load = ROMV, type = rw, define = yes;
-        ZEROPAGE: load = ZP, type = zp, define = yes;
-        EXTZP: load = ZP, type = zp, define = yes, optional = yes;
-        APPZP: load = ZP, type = zp, define = yes, optional = yes;
-}
-
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/pet.cfg b/cfg/pet.cfg
deleted file mode 100644 (file)
index ef8b82e..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-SYMBOLS {
-    __LOADADDR__:  type = import;
-    __EXEHDR__:    type = import;
-    __STACKSIZE__: type = weak, value = $0800; # 2k stack
-}
-MEMORY {
-    ZP:       file = "", define = yes, start = $0055, size = $001A;
-    LOADADDR: file = %O,               start = $03FF, size = $0002;
-    HEADER:   file = %O,               start = $0401, size = $000C;
-    RAM:      file = %O,               start = $040D, size = $7BF3 - __STACKSIZE__;
-}
-SEGMENTS {
-    LOADADDR: load = LOADADDR, type = ro;
-    EXEHDR:   load = HEADER,   type = ro;
-    STARTUP:  load = RAM,      type = ro;
-    LOWCODE:  load = RAM,      type = ro,                optional = yes;
-    INIT:     load = RAM,      type = ro,  define = yes, optional = yes;
-    CODE:     load = RAM,      type = ro;
-    RODATA:   load = RAM,      type = ro;
-    DATA:     load = RAM,      type = rw;
-    ZPSAVE:   load = RAM,      type = bss;
-    BSS:      load = RAM,      type = bss, define = yes;
-    ZEROPAGE: load = ZP,       type = zp;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/plus4.cfg b/cfg/plus4.cfg
deleted file mode 100644 (file)
index c756f45..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-SYMBOLS {
-    __LOADADDR__:  type = import;
-    __EXEHDR__:    type = import;
-    __STACKSIZE__: type = weak, value = $0800; # 2k stack
-}
-MEMORY {
-    ZP:       file = "", define = yes, start = $0002, size = $001A;
-    LOADADDR: file = %O,               start = $0FFF, size = $0002;
-    HEADER:   file = %O,               start = $1001, size = $000C;
-    RAM:      file = %O, define = yes, start = $100D, size = $ECF3 - __STACKSIZE__;
-}
-SEGMENTS {
-    LOADADDR: load = LOADADDR, type = ro;
-    EXEHDR:   load = HEADER,   type = ro;
-    STARTUP:  load = RAM,      type = ro;
-    LOWCODE:  load = RAM,      type = ro,                optional = yes;
-    INIT:     load = RAM,      type = ro,  define = yes, optional = yes;
-    CODE:     load = RAM,      type = ro;
-    RODATA:   load = RAM,      type = ro;
-    DATA:     load = RAM,      type = rw;
-    ZPSAVE:   load = RAM,      type = bss;
-    BSS:      load = RAM,      type = bss, define = yes;
-    ZEROPAGE: load = ZP,       type = zp;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/sim6502.cfg b/cfg/sim6502.cfg
deleted file mode 100644 (file)
index edb630d..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-SYMBOLS {
-    __EXEHDR__:    type = import;
-    __STACKSIZE__: type = weak, value = $0800; # 2k stack
-}
-MEMORY {
-    ZP:       file = "",               start = $0000, size = $001A;
-    HEADER:   file = %O,               start = $0000, size = $0001;
-    RAM:      file = %O, define = yes, start = $0200, size = $FDF0 - __STACKSIZE__;
-}
-SEGMENTS {
-    EXEHDR:   load = HEADER,   type = ro;
-    STARTUP:  load = RAM,      type = ro;
-    LOWCODE:  load = RAM,      type = ro,                optional = yes;
-    INIT:     load = RAM,      type = ro,  define = yes, optional = yes;
-    CODE:     load = RAM,      type = ro;
-    RODATA:   load = RAM,      type = ro;
-    DATA:     load = RAM,      type = rw;
-    BSS:      load = RAM,      type = bss, define = yes;
-    ZEROPAGE: load = ZP,       type = zp;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/sim65c02.cfg b/cfg/sim65c02.cfg
deleted file mode 100644 (file)
index edb630d..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-SYMBOLS {
-    __EXEHDR__:    type = import;
-    __STACKSIZE__: type = weak, value = $0800; # 2k stack
-}
-MEMORY {
-    ZP:       file = "",               start = $0000, size = $001A;
-    HEADER:   file = %O,               start = $0000, size = $0001;
-    RAM:      file = %O, define = yes, start = $0200, size = $FDF0 - __STACKSIZE__;
-}
-SEGMENTS {
-    EXEHDR:   load = HEADER,   type = ro;
-    STARTUP:  load = RAM,      type = ro;
-    LOWCODE:  load = RAM,      type = ro,                optional = yes;
-    INIT:     load = RAM,      type = ro,  define = yes, optional = yes;
-    CODE:     load = RAM,      type = ro;
-    RODATA:   load = RAM,      type = ro;
-    DATA:     load = RAM,      type = rw;
-    BSS:      load = RAM,      type = bss, define = yes;
-    ZEROPAGE: load = ZP,       type = zp;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/supervision-128k.cfg b/cfg/supervision-128k.cfg
deleted file mode 100644 (file)
index ce835db..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-# supervision 1284kbyte cartridge with bankswitching
-# for assembler
-
-# ld65 config file
-# ld65 --config supervision.cfg -o <prog>.bin <prog>.o
-
-SYMBOLS {
-    __STACKSIZE__: type = weak, value = $0100; # 1 page stack
-}
-MEMORY {
-    RAM:      file = "", start = $0000, size = $2000 - __STACKSIZE__;
-    VRAM:     file = "", start = $4000, size = $2000;
-    BANKROM1: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF;
-    BANKROM2: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF;
-    BANKROM3: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF;
-    BANKROM4: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF;
-    BANKROM5: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF;
-    BANKROM6: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF;
-    BANKROM7: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF;
-    ROM:      file = %O, start = $c000, size = $4000, fill = yes, fillval = $FF;
-}
-SEGMENTS {
-    LOWCODE:  load = ROM,      type = ro,                optional = yes;
-    INIT:     load = ROM,      type = ro,  define = yes, optional = yes;
-    CODE:     load = ROM,      type = ro;
-    BANK1:    load = BANKROM1, type = ro;
-    BANK2:    load = BANKROM2, type = ro;
-    BANK3:    load = BANKROM3, type = ro;
-    BANK4:    load = BANKROM4, type = ro;
-    BANK5:    load = BANKROM5, type = ro;
-    BANK6:    load = BANKROM6, type = ro;
-    BANK7:    load = BANKROM7, type = ro;
-    ZEROPAGE: load = RAM,      type = bss, define = yes;
-    DATA:     load = RAM,      type = bss, define = yes, offset = $0200;
-    BSS:      load = RAM,      type = bss, define = yes;
-    VECTOR:   load = ROM,      type = ro,                offset = $3FFA;
-}
diff --git a/cfg/supervision-16k.cfg b/cfg/supervision-16k.cfg
deleted file mode 100644 (file)
index e38948d..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-# supervision 16kbyte cartridge
-
-# ld65 config file
-# ld65 --config supervision16.cfg -o <prog>.bin <prog>.o
-
-SYMBOLS {
-    __STACKSIZE__: type = weak, value = $0100; # 1 page stack
-}
-MEMORY {
-    ZP:       file = "", start = $0000, size = $0100;
-    CPUSTACK: file = "", start = $0100, size = $0100;
-    RAM:      file = "", start = $0200, size = $1E00 - __STACKSIZE__;
-    VRAM:     file = "", start = $4000, size = $2000;
-    ROM:      file = %O, start = $C000, size = $4000, fill = yes, fillval = $ff, define=yes;
-}
-SEGMENTS {
-    LOWCODE:  load = ROM,            type = ro,                optional = yes;
-    INIT:     load = ROM,            type = ro,  define = yes, optional = yes;
-    CODE:     load = ROM,            type = ro,  define = yes;
-    RODATA:   load = ROM,            type = ro,  define = yes;
-    DATA:     load = ROM, run = RAM, type = rw,  define = yes;
-    FFF0:     load = ROM,            type = ro,  offset = $3FF0;
-    VECTOR:   load = ROM,            type = ro,  offset = $3FFA;
-    BSS:      load = RAM,            type = bss, define = yes;
-    ZEROPAGE: load = ZP,             type = zp,  define = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/supervision-64k.cfg b/cfg/supervision-64k.cfg
deleted file mode 100644 (file)
index fd5370f..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# supervision 64kbyte cartridge with bankswitching
-# for assembler
-
-# ld65 config file
-# ld65 --config supervision.cfg -o <prog>.bin <prog>.o
-
-SYMBOLS {
-    __STACKSIZE__: type = weak, value = $0100; # 1 page stack
-}
-MEMORY {
-    RAM:      file = "", start = $0000, size = $2000 - __STACKSIZE__;
-    VRAM:     file = "", start = $4000, size = $2000;
-    BANKROM1: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF;
-    BANKROM2: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF;
-    BANKROM3: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF;
-    ROM:      file = %O, start = $C000, size = $4000, fill = yes, fillval = $FF;
-}
-SEGMENTS {
-    LOWCODE:  load = ROM,      type = ro,                optional = yes;
-    INIT:     load = ROM,      type = ro,  define = yes, optional = yes;
-    CODE:     load = ROM,      type = ro;
-    RODATA:   load = ROM,      type = ro;
-    BANK1:    load = BANKROM1, type = ro;
-    BANK2:    load = BANKROM2, type = ro;
-    BANK3:    load = BANKROM3, type = ro;
-    ZEROPAGE: load = RAM,      type = bss, define = yes;
-    DATA:     load = RAM,      type = bss, define = yes, offset = $0200;
-    BSS:      load = RAM,      type = bss, define = yes;
-    VECTOR:   load = ROM,      type = ro,                offset = $3FFA;
-}
diff --git a/cfg/supervision.cfg b/cfg/supervision.cfg
deleted file mode 100644 (file)
index 66fb4cf..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-# if you want to combine the 2 16 kbyte roms
-# make sure the halves are mirrored in the 64kbyte cartridge image
-# or reset from code >0xc000 and switch bank to the 3rd bank
-
-MEMORY {
-    ZP:       file = "", start = $0000, size = $0100;
-    CPUSTACK: file = "", start = $0100, size = $0100;
-    RAM:      file = "", start = $0200, size = $1E00, define = yes;
-    VRAM:     file = "", start = $4000, size = $2000;
-    ROM:      file = %O, start = $8000, size = $8000, fill = yes, fillval = $FF, define = yes;
-}
-SEGMENTS {
-    LOWCODE:  load = ROM,            type = ro,                optional = yes;
-    INIT:     load = ROM,            type = ro,  define = yes, optional = yes;
-    CODE:     load = ROM,            type = ro,  define = yes;
-    RODATA:   load = ROM,            type = ro,  define = yes;
-    DATA:     load = ROM, run = RAM, type = rw,  define = yes;
-    FFF0:     load = ROM,            type = ro,  offset = $7FF0;
-    VECTOR:   load = ROM,            type = ro,  offset = $7FFA;
-    BSS:      load = RAM,            type = bss, define = yes;
-    ZEROPAGE: load = ZP,             type = zp,  define = yes;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/vic20-32k.cfg b/cfg/vic20-32k.cfg
deleted file mode 100644 (file)
index c66b352..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-# Memory configuration for the VIC-20 with 32K RAM Cartridge
-# Contributed by Stefan Haubenthal
-SYMBOLS {
-    __LOADADDR__:  type = import;
-    __EXEHDR__:    type = import;
-    __STACKSIZE__: type = weak, value = $0400; # 1k stack
-}
-MEMORY {
-    ZP:       file = "", define = yes, start = $0002, size = $001A;
-    LOADADDR: file = %O,               start = $11FF, size = $0002;
-    HEADER:   file = %O,               start = $1201, size = $000C;
-    RAM:      file = %O, define = yes, start = $120D, size = $6DF3 - __STACKSIZE__;
-}
-SEGMENTS {
-    LOADADDR: load = LOADADDR, type = ro;
-    EXEHDR:   load = HEADER,   type = ro;
-    STARTUP:  load = RAM,      type = ro;
-    LOWCODE:  load = RAM,      type = ro,                optional = yes;
-    INIT:     load = RAM,      type = ro,  define = yes, optional = yes;
-    CODE:     load = RAM,      type = ro;
-    RODATA:   load = RAM,      type = ro;
-    DATA:     load = RAM,      type = rw;
-    ZPSAVE:   load = RAM,      type = bss;
-    BSS:      load = RAM,      type = bss, define = yes;
-    ZEROPAGE: load = ZP,       type = zp;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/cfg/vic20.cfg b/cfg/vic20.cfg
deleted file mode 100644 (file)
index f356eb6..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-SYMBOLS {
-    __LOADADDR__:  type = import;
-    __EXEHDR__:    type = import;
-    __STACKSIZE__: type = weak, value = $0400; # 1k stack
-}
-MEMORY {
-    ZP:       file = "", define = yes, start = $0002, size = $001A;
-    LOADADDR: file = %O,               start = $0FFF, size = $0002;
-    HEADER:   file = %O,               start = $1001, size = $000C;
-    RAM:      file = %O, define = yes, start = $100D, size = $0DF3 - __STACKSIZE__;
-}
-SEGMENTS {
-    LOADADDR: load = LOADADDR, type = ro;
-    EXEHDR:   load = HEADER,   type = ro;
-    STARTUP:  load = RAM,      type = ro;
-    LOWCODE:  load = RAM,      type = ro,                optional = yes;
-    INIT:     load = RAM,      type = ro,  define = yes, optional = yes;
-    CODE:     load = RAM,      type = ro;
-    RODATA:   load = RAM,      type = ro;
-    DATA:     load = RAM,      type = rw;
-    ZPSAVE:   load = RAM,      type = bss;
-    BSS:      load = RAM,      type = bss, define = yes;
-    ZEROPAGE: load = ZP,       type = zp;
-}
-FEATURES {
-    CONDES: type    = constructor,
-            label   = __CONSTRUCTOR_TABLE__,
-            count   = __CONSTRUCTOR_COUNT__,
-            segment = INIT;
-    CONDES: type    = destructor,
-            label   = __DESTRUCTOR_TABLE__,
-            count   = __DESTRUCTOR_COUNT__,
-            segment = RODATA;
-    CONDES: type    = interruptor,
-            label   = __INTERRUPTOR_TABLE__,
-            count   = __INTERRUPTOR_COUNT__,
-            segment = RODATA,
-            import  = __CALLIRQ__;
-}
diff --git a/doc/Makefile b/doc/Makefile
deleted file mode 100644 (file)
index 967443e..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-ifneq ($(shell echo),)
-  CMD_EXE = 1
-endif
-
-.PHONY: all mostlyclean clean install zip doc html info
-
-.SUFFIXES:
-
-htmldir = $(prefix)/share/doc/cc65$(DESTPACKAGE_SUFFIX)/html
-infodir = $(prefix)/share/info
-
-all mostlyclean:
-
-ifdef CMD_EXE
-
-clean install zip doc:
-
-else # CMD_EXE
-
-SGMLS := $(wildcard *.sgml)
-
-../html/coding.html ../html/index.html: \
-TOC_LEVEL = 0
-
-TOC_LEVEL = 2
-
-INSTALL = install
-
-clean:
-       $(RM) -r ../html ../info
-
-install:
-       $(if $(prefix),,$(error variable `prefix' must be set))
-ifeq ($(wildcard ../html),../html)
-       $(INSTALL) -d $(DESTDIR)$(htmldir)
-       $(INSTALL) -m644 ../html/*.* $(DESTDIR)$(htmldir)
-endif
-ifeq ($(wildcard ../info),../info)
-       $(INSTALL) -d $(DESTDIR)$(infodir)
-       $(INSTALL) -m644 ../info/*.* $(DESTDIR)$(infodir)
-endif
-
-zip:
-       @cd .. && zip cc65 html/*.*
-
-doc: html info
-
-html: $(addprefix ../html/,$(SGMLS:.sgml=.html) doc.css doc.png)
-
-info: $(addprefix ../info/,$(SGMLS:.sgml=.info))
-
-../html ../info:
-       @mkdir $@
-
-../html/%.html: %.sgml header.html | ../html
-       @cd ../html && linuxdoc -B html -s 0 -T $(TOC_LEVEL) -H ../doc/header.html ../doc/$<
-
-../html/doc.%: doc.% | ../html
-       cp $< ../html
-
-../info/%.info: %.sgml | ../info
-       @cd ../info && linuxdoc -B info ../doc/$<
-
-endif # CMD_EXE
diff --git a/doc/apple2.sgml b/doc/apple2.sgml
deleted file mode 100644 (file)
index e585653..0000000
+++ /dev/null
@@ -1,531 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>Apple&nbsp;&rsqb;&lsqb; specific information for cc65
-<author><url url="mailto:ol.sc@web.de" name="Oliver Schmidt">
-<date>2014-04-10
-
-<abstract>
-An overview over the Apple&nbsp;&rsqb;&lsqb; runtime system as it is
-implemented for the cc65 C compiler.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This file contains an overview of the Apple&nbsp;&rsqb;&lsqb; runtime system
-as it comes with the cc65 C compiler. It describes the memory layout,
-Apple&nbsp;&rsqb;&lsqb; specific header files, available drivers, and any
-pitfalls specific to that platform.
-
-Please note that Apple&nbsp;&rsqb;&lsqb; specific functions are just mentioned
-here, they are described in detail in the separate <url url="funcref.html"
-name="function reference">. Even functions marked as "platform dependent" may
-be available on more than one platform. Please see the function reference for
-more information.
-
-
-
-<sect>Binary format<p>
-
-The standard binary file format generated by the linker for the
-Apple&nbsp;&rsqb;&lsqb; target is a binary program with a 4 byte DOS 3.3 header
-containing the load address and load length. The default load address is
-&dollar;803.
-
-<bf/AppleCommander 1.3.5/ or later (available at <url
-url="http://applecommander.sourceforge.net/">) includes the option <tt/-cc65/
-that allows to put binary files with a DOS 3.3 header onto disk images
-containing DOS 3.3 as well as ProDOS 8.
-
-For ProDOS 8 system programs the load address is fixed to &dollar;2000 so there
-is no need for a header. Thus the linker configuration
-<ref id="apple-sys-cfg" name="apple2-system.cfg"> for those programs
-omits the DOS 3.3 header. The right AppleCommander option to put system files
-without a header on a ProDOS 8 disk image is <tt/-p/.
-
-
-<sect>Memory layout<p>
-
-In the standard setup, cc65 generated programs use the memory from
-&dollar;803 to &dollar;95FF, so 35.5 KB of RAM are available.
-
-Special locations:
-
-<descrip>
-
-  <tag/Stack/
-  The C runtime stack is located at HIMEM and grows downwards, regardless of
-  how your linker config file is setup.
-
-  <tag/Heap/
-  The C heap is located at the end of the program and grows towards the C
-  runtime stack.
-
-</descrip><p>
-
-While running <tt/main()/ the Language Card bank 2 is enabled for read access.
-However while running module constructors/destructors the Language Card is disabled.
-
-Enabling the Language Card allows to use it as additional memory for cc65
-generated code. However code is never automatically placed there. Rather code
-needs to be explicitly placed in the Language Card either per file by compiling
-with <tt/--code-name HIGHCODE/ or per function by enclosing in <tt/#pragma
-code-name (push, "HIGHCODE")/ and <tt/#pragma code-name (pop)/. In either case the
-cc65 runtime system takes care of actually moving the code into the Language
-Card.
-
-The amount of memory available in the Language Card for generated code depends
-on the chosen <ref id="link-configs" name="linker configuration">.
-
-
-
-<sect>Linker configurations<label id="link-configs"><p>
-
-The ld65 linker comes with a default config file for the Apple&nbsp;&rsqb;&lsqb;,
-which is used via <tt/-t apple2/.
-The apple2 package comes with additional secondary linker config files, which
-are used via <tt/-t apple2 -C &lt;configfile&gt;/.
-
-
-<sect1>default config file (<tt/apple2.cfg/)<p>
-
-Default configuration optimized for a binary program running on ProDOS 8 with
-BASIC.SYSTEM. A plain vanilla ProDOS 8 doesn't actually use the Language Card
-bank 2 memory from &dollar;D400 to &dollar;DFFF.
-
-<descrip>
-
-  <tag><tt/RAM:/ Main memory area</tag>
-  From &dollar;803 to &dollar;95FF (35.5 KB)
-
-  <tag><tt/LC:/ Language Card memory area</tag>
-  From &dollar;D400 to &dollar;DFFF (3 KB)
-
-  <tag><tt/STARTADDRESS:/ Program start address</tag>
-  Variable (default: &dollar;803)
-
-  <tag><tt/HEADER:/ Binary file header</tag>
-  DOS 3.3 header (address and length)
-
-</descrip><p>
-
-
-<sect1><tt/apple2-dos33.cfg/<p>
-
-Configuration optimized for a binary program running on DOS 3.3. A plain
-vanilla DOS 3.3 doesn't make use of the Language Card at all.
-
-<descrip>
-
-  <tag><tt/RAM:/ Main memory area</tag>
-  From &dollar;803 to &dollar;95FF (35.5 KB)
-
-  <tag><tt/LC:/ Language Card memory area</tag>
-  From &dollar;D000 to &dollar;FFFF (12 KB)
-
-  <tag><tt/STARTADDRESS:/ Program start address</tag>
-  Variable (default: &dollar;803)
-
-  <tag><tt/HEADER:/ Binary file header</tag>
-  DOS 3.3 header (address and length)
-
-</descrip><p>
-
-
-<sect1><tt/apple2-system.cfg/<label id="apple-sys-cfg"><p>
-
-Configuration for a system program running on ProDOS 8.
-
-<descrip>
-
-  <tag><tt/RAM:/ Main memory area</tag>
-  From &dollar;2000 to &dollar;BEFF (39.75 KB)
-
-  <tag><tt/LC:/ Language Card memory area</tag>
-  From &dollar;D400 to &dollar;DFFF (3 KB)
-
-  <tag><tt/STARTADDRESS:/ Program start address</tag>
-  Fixed (&dollar;2000)
-
-  <tag><tt/HEADER:/ Binary file header</tag>
-  None
-
-</descrip><p>
-
-
-<sect1><tt/apple2-loader.cfg/<label id="apple-load-cfg"><p>
-
-Configuration optimized for a binary program running on ProDOS 8 without
-BASIC.SYSTEM. Intended to be used with <bf/LOADER.SYSTEM - an
-Apple&nbsp;&rsqb;&lsqb; ProDOS 8 loader for cc65 programs/, which is available
-in the cc65 User Contributions section.
-
-A program loaded by LOADER.SYSTEM works like a ProDOS 8 system program but
-isn't tied to the start address &dollar;2000. Thus with the default start
-address &dollar;800 the main memory area is increased by 6 KB.
-
-<descrip>
-
-  <tag><tt/RAM:/ Main memory area</tag>
-  From &dollar;800 to &dollar;BEFF (45.75 KB)
-
-  <tag><tt/LC:/ Language Card memory area</tag>
-  From &dollar;D400 to &dollar;DFFF (3 KB)
-
-  <tag><tt/STARTADDRESS:/ Program start address</tag>
-  Variable (default: &dollar;800)
-
-  <tag><tt/HEADER:/ Binary file header</tag>
-  DOS 3.3 header (address and length)
-
-</descrip><p>
-
-
-<sect1><tt/apple2-reboot.cfg/<p>
-
-Configuration optimized for a binary program running on ProDOS 8 without
-BASIC.SYSTEM. Intended to be used with <bf/LOADER.SYSTEM - an
-Apple&nbsp;&rsqb;&lsqb; ProDOS 8 loader for cc65 programs/ (see above) together
-with the function <tt/rebootafterexit()/.
-
-If a ProDOS 8 system program doesn't quit to the ProDOS 8 dispatcher but rather
-reboots the machine after exit then a plain vanilla ProDOS 8 doesn't make use of
-the Language Card bank 2 at all.
-
-This setup makes nearly 50 KB available to a cc65 program - on a 64 KB machine!
-
-<descrip>
-
-  <tag><tt/RAM:/ Main memory area</tag>
-  From &dollar;800 to &dollar;BEFF (45.75 KB)
-
-  <tag><tt/LC:/ Language Card memory area</tag>
-  From &dollar;D000 to &dollar;DFFF (4 KB)
-
-  <tag><tt/STARTADDRESS:/ Program start address</tag>
-  Variable (default: &dollar;800)
-
-  <tag><tt/HEADER:/ Binary file header</tag>
-  DOS 3.3 header (address and length)
-
-</descrip><p>
-
-
-
-<sect>ProDOS 8 system programs<p>
-
-ProDOS 8 system programs are always loaded to the start address &dollar;2000.
-For cc65 programs this means that the 6 KB from &dollar;800 to &dollar;2000 are
-by default unused. There are however several options to make use of that memory
-range.
-
-
-<sect1>LOADER.SYSTEM<p>
-
-The easiest (and for really large programs in fact the only) way to have a cc65
-program use the memory from &dollar;800 to &dollar;2000 is to link it as binary
-(as opposed to system) program using the linker configuration
-<ref id="apple-load-cfg" name="apple2-loader.cfg"> with start address
-&dollar;803 and load it with the targetutil LOADER.SYSTEM. The program then works
-like a system program (i.e. quits to the ProDOS dispatcher).
-
-Using LOADER.SYSTEM is as simple as copying it to the ProDOS 8 directory of the
-program to load under name &lt;program&gt;.SYSTEM as a system program. For
-example the program <tt/MYPROG/ is loaded by <tt/MYPROG.SYSTEM/.
-
-
-<sect1>Heap<p>
-
-If the cc65 program can be successfully linked as system program using the linker
-configuration <ref id="apple-sys-cfg" name="apple2-system.cfg">, but
-uses the heap either explicitly or implicitly (i.e. by loading a driver) then
-the memory from &dollar;800 to &dollar;2000 can be added to the heap by calling
-<tt/_heapadd ((void *) 0x0800, 0x1800);/ at the beginning of <tt/main()/.
-
-
-<sect1>ProDOS 8 I/O buffers<p>
-
-ProDOS 8 requires for every open file a page-aligned 1 KB I/O buffer. By default
-these buffers are allocated by the cc65 runtime system on the heap using
-<tt/posix_memalign()/. While this is generally the best solution it means quite
-some overhead for (especially rather small) cc65 programs which do open files
-but don't make use of the heap otherwise.
-
-The apple2 package comes with the alternative ProDOS 8 I/O buffer allocation
-module <tt/apple2-iobuf-0800.o/ which uses the memory between &dollar;800 and
-the program start address for the 1 KB I/O buffers. For system programs (with
-start address &dollar;2000) this results in up to 6 I/O buffers and thus up to 6
-concurrently open files.
-
-While using <tt/_heapadd()/ as described in the section above together with the
-default I/O buffer allocation basically yields the same placement of I/O buffers
-in memory the primary benefit of <tt/apple2-iobuf-0800.o/ is a reduction in code
-size - and thus program file size - of more than 1400 bytes.
-
-Using <tt/apple2-iobuf-0800.o/ is as simple as placing it on the linker command
-line like this:
-
-<tscreen><verb>
-cl65 -t apple2 -C apple2-system.cfg myprog.c apple2-iobuf-0800.o
-</verb></tscreen>
-
-
-
-<sect>Platform specific header files<p>
-
-Programs containing Apple&nbsp;&rsqb;&lsqb; specific code may use the
-<tt/apple2.h/ header file.
-
-
-<sect1>Apple&nbsp;&rsqb;&lsqb; specific functions<p>
-
-The functions listed below are special for the Apple&nbsp;&rsqb;&lsqb;. See
-the <url url="funcref.html" name="function reference"> for declaration and
-usage.
-
-<itemize>
-<item>_auxtype
-<item>_dos_type
-<item>_filetype
-<item>get_ostype
-<item>rebootafterexit
-<item>ser_apple2_slot
-<item>tgi_apple2_mix
-</itemize>
-
-
-<sect1>Hardware access<p>
-
-There's currently no support for direct hardware access. This does not mean
-you cannot do it, it just means that there's no help.
-
-
-
-<sect>Loadable drivers<p>
-
-The names in the parentheses denote the symbols to be used for static linking of the drivers.
-
-
-<sect1>Graphics drivers<p>
-
-<descrip>
-
-  <tag><tt/a2.lo.tgi (a2_lo_tgi)/</tag>
-  This driver features a resolution of 40&times;48 with 16 colors.
-
-  The function <tt/tgi_apple2_mix()/ allows to activate 4 lines of text. The
-  function clears the corresponding area at the bottom of the screen.
-
-  <tag><tt/a2.hi.tgi (a2_hi_tgi)/</tag>
-  This driver features a resolution of 280&times;192 with 8 colors and two
-  hires pages. Note that programs using this driver will have to be linked
-  with <tt/--start-addr $4000/ to reserve the first hires page or with
-  <tt/--start-addr $6000/ to reserve both hires pages.
-
-  The function <tt/tgi_apple2_mix()/ allows to activate 4 lines of text. The
-  function doesn't clear the corresponding area at the bottom of the screen.
-
-  In memory constrained situations the memory from &dollar;803 to &dollar;1FFF
-  can be made available to a program by calling <tt/_heapadd ((void *) 0x0803, 0x17FD);/
-  at the beginning of <tt/main()/. Doing so is beneficial even if the program
-  doesn't use the the heap explicitly because loading the driver (and in fact
-  already opening the driver file) uses the heap implicitly.
-
-</descrip><p>
-
-
-<sect1>Extended memory drivers<p>
-
-<descrip>
-
-  <tag><tt/a2.auxmem.emd (a2_auxmem_emd)/</tag>
-  Gives access to 47.5 KB RAM (190 pages of 256 bytes each) on an Extended
-  80-Column Text Card.
-
-  Note that this driver doesn't check for the actual existence of the memory
-  and that it doesn't check for ProDOS 8 RAM disk content!
-
-</descrip><p>
-
-
-<sect1>Joystick drivers<p>
-
-<descrip>
-
-  <tag><tt/a2.stdjoy.joy (a2_stdjoy_joy)/</tag>
-  Supports up to two standard analog joysticks connected to the game port of
-  the Apple&nbsp;&rsqb;&lsqb;.
-
-</descrip><p>
-
-
-<sect1>Mouse drivers<p>
-
-<descrip>
-
-  <tag><tt/a2.stdmou.mou (a2_stdmou_mou)/</tag>
-  Driver for the AppleMouse&nbsp;II Card. Searches all Apple&nbsp;II slots
-  for an AppleMouse&nbsp;II Card compatible firmware. The default bounding
-  box is &lsqb;0..279,0..191&rsqb;.
-
-  Programs using this driver will have to be linked with <tt/--start-addr $4000/
-  to reserve the first hires page if they are intended to run on an
-  Apple&nbsp;&rsqb;&lsqb; (in contrast to an Apple&nbsp;//e) because the
-  AppleMouse&nbsp;II Card firmware writes to the hires page when initializing
-  on that machine.
-
-  Note that the Apple&nbsp;&rsqb;&lsqb; default mouse callbacks support text
-  mode only.
-
-</descrip><p>
-
-
-<sect1>RS232 device drivers<p>
-
-<descrip>
-
-  <tag><tt/a2.ssc.ser (a2_ssc_ser)/</tag>
-  Driver for the Apple&nbsp;II Super Serial Card. Supports up to 19200 baud,
-  hardware flow control (RTS/CTS) and interrupt driven receives. Note
-  that because of the peculiarities of the 6551 chip transmits are not
-  interrupt driven, and the transceiver blocks if the receiver asserts
-  flow control because of a full buffer.
-
-  The driver defaults to slot 2. Call <tt/ser_apple2_slot()/ prior to
-  <tt/ser_open()/ in order to select a different slot. <tt/ser_apple2_slot()/
-  succeeds for all Apple&nbsp;II slots, but <tt/ser_open()/ fails with
-  <tt/SER_ERR_NO_DEVICE/ if there's no SSC firmware found in the selected slot.
-
-</descrip><p>
-
-
-
-<sect>Limitations<p>
-
-
-<sect1>DOS 3.3<p>
-
-Although the standard binaries generated by the linker for the Apple&nbsp;&rsqb;&lsqb;
-generally run both on DOS 3.3 (with Applesoft BASIC) and on ProDOS 8 (with
-BASIC.SYSTEM) there are some limitations for DOS 3.3:
-
-<descrip>
-
-  <tag>Disk File I/O</tag>
-  There's no disk file I/O support. Any attempt to use it yields an error with
-  <tt/errno/ set to <tt/ENOSYS/. This implicitly means that loadable drivers
-  are in general not functional as they depend on disk file I/O. Therefore the statically
-  linked drivers have to be used instead.
-
-  <tag/Interrupts/
-  There's no <tt/interruptor/ support. Any attempt to use it yields the message
-  'FAILED TO ALLOC INTERRUPT' on program startup. This implicitly means that
-  <tt/a2.stdmou.mou/ and <tt/a2.ssc.ser/ are not functional as they depend on
-  interrupts.
-
-</descrip><p>
-
-
-<sect1>Direct console I/O<p>
-
-<descrip>
-
-  <tag/Color/
-  The Apple&nbsp;&rsqb;&lsqb; has no color text mode. Therefore the functions textcolor(),
-  bgcolor() and bordercolor() have no effect.
-
-  <tag/Cursor/
-  The Apple&nbsp;&rsqb;&lsqb; has no hardware cursor. Therefore the function cursor() has
-  no effect.
-
-</descrip><p>
-
-
-
-<sect>Other hints<p>
-
-
-<sect1>Passing arguments to the program<p>
-
-Command line arguments can be passed to <tt/main()/ after BLOAD. Since this is not
-supported by BASIC, the following syntax was chosen:
-
-<tscreen><verb>
-]CALL2051:REM ARG1 " ARG2 IS QUOTED" ARG3 "" ARG5
-</verb></tscreen>
-
-<enum>
-<item>Arguments are separated by spaces.
-<item>Arguments may be quoted.
-<item>Leading and trailing spaces around an argument are ignored. Spaces within
-      a quoted argument are allowed.
-<item>The first argument passed to <tt/main/ is the program name.
-<item>A maximum number of 10 arguments (including the program name) are
-      supported.
-</enum>
-
-
-<sect1>Interrupts<p>
-
-The runtime for the Apple&nbsp;&rsqb;&lsqb; uses routines marked as
-<tt/.INTERRUPTOR/ for ProDOS 8 interrupt handlers. Such routines must be
-written as simple machine language subroutines and will be called
-automatically by the interrupt handler code when they are linked into a
-program. See the discussion of the <tt/.CONDES/ feature in the <url
-url="ca65.html" name="assembler manual">.
-
-
-<sect1>DIO<p>
-
-<descrip>
-
-  <tag/Drive ID/
-  The function <url url="dio.html#s1" name="dio_open()"> has the single
-  parameter <tt/device/ to identify the device to be opened. Therefore an
-  Apple&nbsp;II slot and drive pair is mapped to that <tt/device/ according
-  to the formula
-
-  <tscreen>
-    device = slot + (drive - 1) * 8
-  </tscreen>
-
-  so that for example slot 6 drive 2 is mapped to <tt/device/ 14.
-
-  <tag/Sector count/
-  The function <url url="dio.html#s3" name="dio_query_sectcount()"> returns
-  the correct sector count for all ProDOS 8 disks. However for any non-ProDOS 8
-  disk it simply always returns 280 (which is only correct for a 140 KB disk).
-  This condition is indicated by the <tt/_oserror/ value 82.
-
-</descrip><p>
-
-
-
-<sect>License<p>
-
-This software is provided 'as-is', without any expressed or implied
-warranty. In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml
deleted file mode 100644 (file)
index 215c6d3..0000000
+++ /dev/null
@@ -1,537 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>Enhanced&nbsp;Apple&nbsp;//e specific information for cc65
-<author><url url="mailto:ol.sc@web.de" name="Oliver Schmidt">
-<date>2014-04-10
-
-<abstract>
-An overview over the enhanced&nbsp;Apple&nbsp;//e runtime system as it is
-implemented for the cc65 C compiler.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This file contains an overview of the enhanced&nbsp;Apple&nbsp;//e runtime system
-as it comes with the cc65 C compiler. It describes the memory layout,
-enhanced&nbsp;Apple&nbsp;//e specific header files, available drivers, and any
-pitfalls specific to that platform.
-
-Please note that enhanced&nbsp;Apple&nbsp;//e specific functions are just mentioned
-here, they are described in detail in the separate <url url="funcref.html"
-name="function reference">. Even functions marked as "platform dependent" may
-be available on more than one platform. Please see the function reference for
-more information.
-
-
-
-<sect>Binary format<p>
-
-The standard binary file format generated by the linker for the
-enhanced&nbsp;Apple&nbsp;//e target is a binary program with a 4 byte DOS 3.3 header
-containing the load address and load length. The default load address is
-&dollar;803.
-
-<bf/AppleCommander 1.3.5/ or later (available at <url
-url="http://applecommander.sourceforge.net/">) includes the option <tt/-cc65/
-that allows to put binary files with a DOS 3.3 header onto disk images
-containing DOS 3.3 as well as ProDOS 8.
-
-For ProDOS 8 system programs the load address is fixed to &dollar;2000 so there
-is no need for a header. Thus the linker configuration
-<ref id="apple-sys-cfg" name="apple2enh-system.cfg"> for those programs
-omits the DOS 3.3 header. The right AppleCommander option to put system files
-without a header on a ProDOS 8 disk image is <tt/-p/.
-
-
-<sect>Memory layout<p>
-
-In the standard setup, cc65 generated programs use the memory from
-&dollar;803 to &dollar;95FF, so 35.5 KB of RAM are available.
-
-Special locations:
-
-<descrip>
-
-  <tag/Stack/
-  The C runtime stack is located at HIMEM and grows downwards, regardless of
-  how your linker config file is setup.
-
-  <tag/Heap/
-  The C heap is located at the end of the program and grows towards the C
-  runtime stack.
-
-</descrip><p>
-
-While running <tt/main()/ the Language Card bank 2 is enabled for read access.
-However while running module constructors/destructors the Language Card is disabled.
-
-Enabling the Language Card allows to use it as additional memory for cc65
-generated code. However code is never automatically placed there. Rather code
-needs to be explicitly placed in the Language Card either per file by compiling
-with <tt/--code-name HIGHCODE/ or per function by enclosing in <tt/#pragma
-code-name (push, "HIGHCODE")/ and <tt/#pragma code-name (pop)/. In either case the
-cc65 runtime system takes care of actually moving the code into the Language
-Card.
-
-The amount of memory available in the Language Card for generated code depends
-on the chosen <ref id="link-configs" name="linker configuration">.
-
-
-
-<sect>Linker configurations<label id="link-configs"><p>
-
-The ld65 linker comes with a default config file for the enhanced&nbsp;Apple&nbsp;//e,
-which is used via <tt/-t apple2enh/.
-The apple2enh package comes with additional secondary linker config files, which
-are used via <tt/-t apple2enh -C &lt;configfile&gt;/.
-
-
-<sect1>default config file (<tt/apple2enh.cfg/)<p>
-
-Default configuration optimized for a binary program running on ProDOS 8 with
-BASIC.SYSTEM. A plain vanilla ProDOS 8 doesn't actually use the Language Card
-bank 2 memory from &dollar;D400 to &dollar;DFFF.
-
-<descrip>
-
-  <tag><tt/RAM:/ Main memory area</tag>
-  From &dollar;803 to &dollar;95FF (35.5 KB)
-
-  <tag><tt/LC:/ Language Card memory area</tag>
-  From &dollar;D400 to &dollar;DFFF (3 KB)
-
-  <tag><tt/STARTADDRESS:/ Program start address</tag>
-  Variable (default: &dollar;803)
-
-  <tag><tt/HEADER:/ Binary file header</tag>
-  DOS 3.3 header (address and length)
-
-</descrip><p>
-
-
-<sect1><tt/apple2enh-dos33.cfg/<p>
-
-Configuration optimized for a binary program running on DOS 3.3. A plain
-vanilla DOS 3.3 doesn't make use of the Language Card at all.
-
-<descrip>
-
-  <tag><tt/RAM:/ Main memory area</tag>
-  From &dollar;803 to &dollar;95FF (35.5 KB)
-
-  <tag><tt/LC:/ Language Card memory area</tag>
-  From &dollar;D000 to &dollar;FFFF (12 KB)
-
-  <tag><tt/STARTADDRESS:/ Program start address</tag>
-  Variable (default: &dollar;803)
-
-  <tag><tt/HEADER:/ Binary file header</tag>
-  DOS 3.3 header (address and length)
-
-</descrip><p>
-
-
-<sect1><tt/apple2enh-system.cfg/<label id="apple-sys-cfg"><p>
-
-Configuration for a system program running on ProDOS 8.
-
-<descrip>
-
-  <tag><tt/RAM:/ Main memory area</tag>
-  From &dollar;2000 to &dollar;BEFF (39.75 KB)
-
-  <tag><tt/LC:/ Language Card memory area</tag>
-  From &dollar;D400 to &dollar;DFFF (3 KB)
-
-  <tag><tt/STARTADDRESS:/ Program start address</tag>
-  Fixed (&dollar;2000)
-
-  <tag><tt/HEADER:/ Binary file header</tag>
-  None
-
-</descrip><p>
-
-
-<sect1><tt/apple2enh-loader.cfg/<label id="apple-load-cfg"><p>
-
-Configuration optimized for a binary program running on ProDOS 8 without
-BASIC.SYSTEM. Intended to be used with <bf/LOADER.SYSTEM - an
-Apple&nbsp;&rsqb;&lsqb; ProDOS 8 loader for cc65 programs/, which is available
-in the cc65 User Contributions section.
-
-A program loaded by LOADER.SYSTEM works like a ProDOS 8 system program but
-isn't tied to the start address &dollar;2000. Thus with the default start
-address &dollar;800 the main memory area is increased by 6 KB.
-
-<descrip>
-
-  <tag><tt/RAM:/ Main memory area</tag>
-  From &dollar;800 to &dollar;BEFF (45.75 KB)
-
-  <tag><tt/LC:/ Language Card memory area</tag>
-  From &dollar;D400 to &dollar;DFFF (3 KB)
-
-  <tag><tt/STARTADDRESS:/ Program start address</tag>
-  Variable (default: &dollar;800)
-
-  <tag><tt/HEADER:/ Binary file header</tag>
-  DOS 3.3 header (address and length)
-
-</descrip><p>
-
-
-<sect1><tt/apple2enh-reboot.cfg/<p>
-
-Configuration optimized for a binary program running on ProDOS 8 without
-BASIC.SYSTEM. Intended to be used with <bf/LOADER.SYSTEM - an
-Apple&nbsp;&rsqb;&lsqb; ProDOS 8 loader for cc65 programs/ (see above) together
-with the function <tt/rebootafterexit()/.
-
-If a ProDOS 8 system program doesn't quit to the ProDOS 8 dispatcher but rather
-reboots the machine after exit then a plain vanilla ProDOS 8 doesn't make use of
-the Language Card bank 2 at all.
-
-This setup makes nearly 50 KB available to a cc65 program - on a 64 KB machine!
-
-<descrip>
-
-  <tag><tt/RAM:/ Main memory area</tag>
-  From &dollar;800 to &dollar;BEFF (45.75 KB)
-
-  <tag><tt/LC:/ Language Card memory area</tag>
-  From &dollar;D000 to &dollar;DFFF (4 KB)
-
-  <tag><tt/STARTADDRESS:/ Program start address</tag>
-  Variable (default: &dollar;800)
-
-  <tag><tt/HEADER:/ Binary file header</tag>
-  DOS 3.3 header (address and length)
-
-</descrip><p>
-
-
-
-<sect>ProDOS 8 system programs<p>
-
-ProDOS 8 system programs are always loaded to the start address &dollar;2000.
-For cc65 programs this means that the 6 KB from &dollar;800 to &dollar;2000 are
-by default unused. There are however several options to make use of that memory
-range.
-
-
-<sect1>LOADER.SYSTEM<p>
-
-The easiest (and for really large programs in fact the only) way to have a cc65
-program use the memory from &dollar;800 to &dollar;2000 is to link it as binary
-(as opposed to system) program using the linker configuration
-<ref id="apple-load-cfg" name="apple2enh-loader.cfg"> with start address
-&dollar;803 and load it with the targetutil LOADER.SYSTEM. The program then works
-like a system program (i.e. quits to the ProDOS dispatcher).
-
-Using LOADER.SYSTEM is as simple as copying it to the ProDOS 8 directory of the
-program to load under name &lt;program&gt;.SYSTEM as a system program. For
-example the program <tt/MYPROG/ is loaded by <tt/MYPROG.SYSTEM/.
-
-
-<sect1>Heap<p>
-
-If the cc65 program can be successfully linked as system program using the linker
-configuration <ref id="apple-sys-cfg" name="apple2enh-system.cfg">, but
-uses the heap either explicitly or implicitly (i.e. by loading a driver) then
-the memory from &dollar;800 to &dollar;2000 can be added to the heap by calling
-<tt/_heapadd ((void *) 0x0800, 0x1800);/ at the beginning of <tt/main()/.
-
-
-<sect1>ProDOS 8 I/O buffers<p>
-
-ProDOS 8 requires for every open file a page-aligned 1 KB I/O buffer. By default
-these buffers are allocated by the cc65 runtime system on the heap using
-<tt/posix_memalign()/. While this is generally the best solution it means quite
-some overhead for (especially rather small) cc65 programs which do open files
-but don't make use of the heap otherwise.
-
-The apple2enh package comes with the alternative ProDOS 8 I/O buffer allocation
-module <tt/apple2enh-iobuf-0800.o/ which uses the memory between &dollar;800 and
-the program start address for the 1 KB I/O buffers. For system programs (with
-start address &dollar;2000) this results in up to 6 I/O buffers and thus up to 6
-concurrently open files.
-
-While using <tt/_heapadd()/ as described in the section above together with the
-default I/O buffer allocation basically yields the same placement of I/O buffers
-in memory the primary benefit of <tt/apple2enh-iobuf-0800.o/ is a reduction in code
-size - and thus program file size - of more than 1400 bytes.
-
-Using <tt/apple2enh-iobuf-0800.o/ is as simple as placing it on the linker command 
-line like this:
-
-<tscreen><verb>
-cl65 -t apple2enh -C apple2enh-system.cfg myprog.c apple2enh-iobuf-0800.o
-</verb></tscreen>
-
-
-
-<sect>Platform specific header files<p>
-
-Programs containing enhanced&nbsp;Apple&nbsp;//e specific code may use the
-<tt/apple2enh.h/ header file.
-
-
-<sect1>Enhanced&nbsp;Apple&nbsp;//e specific functions<p>
-
-The functions listed below are special for the enhanced&nbsp;Apple&nbsp;//e. See
-the <url url="funcref.html" name="function reference"> for declaration and
-usage.
-
-<itemize>
-<item>_auxtype
-<item>_dos_type
-<item>_filetype
-<item>get_ostype
-<item>rebootafterexit
-<item>ser_apple2_slot
-<item>textframe
-<item>textframexy
-<item>tgi_apple2_mix
-<item>videomode
-</itemize>
-
-
-<sect1>Hardware access<p>
-
-There's currently no support for direct hardware access. This does not mean
-you cannot do it, it just means that there's no help.
-
-
-
-<sect>Loadable drivers<p>
-
-The names in the parentheses denote the symbols to be used for static linking of the drivers.
-
-
-<sect1>Graphics drivers<p>
-
-<descrip>
-
-  <tag><tt/a2e.lo.tgi (a2e_lo_tgi)/</tag>
-  This driver features a resolution of 40&times;48 with 16 colors.
-
-  The function <tt/tgi_apple2_mix()/ allows to activate 4 lines of text. The
-  function clears the corresponding area at the bottom of the screen.
-
-  <tag><tt/a2e.hi.tgi (a2e_hi_tgi)/</tag>
-  This driver features a resolution of 280&times;192 with 8 colors and two
-  hires pages. Note that programs using this driver will have to be linked
-  with <tt/--start-addr $4000/ to reserve the first hires page or with
-  <tt/--start-addr $6000/ to reserve both hires pages.
-
-  Note that the second hires page is only available if the text display is not in
-  80 column mode. This can be asserted by calling <tt/videomode (VIDEOMODE_40COL);/
-  before installing the driver.
-
-  The function <tt/tgi_apple2_mix()/ allows to activate 4 lines of text. The
-  function doesn't clear the corresponding area at the bottom of the screen.
-
-  In memory constrained situations the memory from &dollar;803 to &dollar;1FFF
-  can be made available to a program by calling <tt/_heapadd ((void *) 0x0803, 0x17FD);/
-  at the beginning of <tt/main()/. Doing so is beneficial even if the program
-  doesn't use the the heap explicitly because loading the driver (and in fact
-  already opening the driver file) uses the heap implicitly.
-
-</descrip><p>
-
-
-<sect1>Extended memory drivers<p>
-
-<descrip>
-
-  <tag><tt/a2e.auxmem.emd (a2e_auxmem_emd)/</tag>
-  Gives access to 47.5 KB RAM (190 pages of 256 bytes each) on an Extended
-  80-Column Text Card.
-  
-  Note that this driver doesn't check for the actual existence of the memory
-  and that it doesn't check for ProDOS 8 RAM disk content!
-
-</descrip><p>
-
-
-<sect1>Joystick drivers<p>
-
-<descrip>
-
-  <tag><tt/a2e.stdjoy.joy (a2e_stdjoy_joy)/</tag>
-  Supports up to two standard analog joysticks connected to the game port of
-  the enhanced&nbsp;Apple&nbsp;//e.
-
-</descrip><p>
-
-
-<sect1>Mouse drivers<p>
-
-<descrip>
-
-  <tag><tt/a2e.stdmou.mou (a2e_stdmou_mou)/</tag>
-  Driver for the AppleMouse&nbsp;II Card. Searches all Apple&nbsp;II slots
-  for an AppleMouse&nbsp;II Card compatible firmware. The default bounding
-  box is &lsqb;0..279,0..191&rsqb;.
-
-  Note that the enhanced&nbsp;Apple&nbsp;//e default mouse callbacks support
-  text mode only.
-
-</descrip><p>
-
-
-<sect1>RS232 device drivers<p>
-
-<descrip>
-
-  <tag><tt/a2e.ssc.ser (a2e_ssc_ser)/</tag>
-  Driver for the Apple&nbsp;II Super Serial Card. Supports up to 19200 baud,
-  hardware flow control (RTS/CTS) and interrupt driven receives. Note
-  that because of the peculiarities of the 6551 chip transmits are not
-  interrupt driven, and the transceiver blocks if the receiver asserts
-  flow control because of a full buffer.
-
-  The driver defaults to slot 2. Call <tt/ser_apple2_slot()/ prior to
-  <tt/ser_open()/ in order to select a different slot. <tt/ser_apple2_slot()/
-  succeeds for all Apple&nbsp;II slots, but <tt/ser_open()/ fails with
-  <tt/SER_ERR_NO_DEVICE/ if there's no SSC firmware found in the selected slot.
-
-</descrip><p>
-
-
-
-<sect>Limitations<p>
-
-
-<sect1>DOS 3.3<p>
-
-Although the standard binaries generated by the linker for the enhanced&nbsp;Apple&nbsp;//e
-generally run both on DOS 3.3 (with Applesoft BASIC) and on ProDOS 8 (with
-BASIC.SYSTEM) there are some limitations for DOS 3.3:
-
-<descrip>
-
-  <tag>Disk File I/O</tag>
-  There's no disk file I/O support. Any attempt to use it yields an error with
-  <tt/errno/ set to <tt/ENOSYS/. This implicitly means that loadable drivers
-  are in general not functional as they depend on disk file I/O. Therefore the statically
-  linked drivers have to be used instead.
-
-  <tag/Interrupts/
-  There's no <tt/interruptor/ support. Any attempt to use it yields the message
-  'Failed to alloc interrupt' on program startup. This implicitly means that
-  <tt/a2e.stdmou.mou/ and <tt/a2e.ssc.ser/ are not functional as they depend on
-  interrupts.
-  
-</descrip><p>
-
-
-<sect1>Direct console I/O<p>
-
-<descrip>
-
-  <tag/Color/
-  The enhanced&nbsp;Apple&nbsp;//e has no color text mode. Therefore the functions
-  textcolor(), bgcolor() and bordercolor() have no effect.
-
-  <tag/Cursor/
-  The enhanced&nbsp;Apple&nbsp;//e has no hardware cursor. Therefore the function
-  cursor() has no effect.
-
-</descrip><p>
-
-
-
-<sect>Other hints<p>
-
-
-<sect1>Passing arguments to the program<p>
-
-Command line arguments can be passed to <tt/main()/ after BLOAD. Since this is not
-supported by BASIC, the following syntax was chosen:
-
-<tscreen><verb>
-]CALL2051:REM ARG1 " ARG2 IS QUOTED" ARG3 "" ARG5
-</verb></tscreen>
-
-<enum>
-<item>Arguments are separated by spaces.
-<item>Arguments may be quoted.
-<item>Leading and trailing spaces around an argument are ignored. Spaces within
-      a quoted argument are allowed.
-<item>The first argument passed to <tt/main/ is the program name.
-<item>A maximum number of 10 arguments (including the program name) are
-      supported.
-</enum>
-
-
-<sect1>Function keys<p>
-
-These are defined to be OpenApple + number key.
-
-
-<sect1>Interrupts<p>
-
-The runtime for the enhanced&nbsp;Apple&nbsp;//e uses routines marked as
-<tt/.INTERRUPTOR/ for ProDOS 8 interrupt handlers. Such routines must be
-written as simple machine language subroutines and will be called
-automatically by the interrupt handler code when they are linked into a
-program. See the discussion of the <tt/.CONDES/ feature in the <url
-url="ca65.html" name="assembler manual">.
-
-
-<sect1>DIO<p>
-
-<descrip>
-
-  <tag/Drive ID/
-  The function <url url="dio.html#s1" name="dio_open()"> has the single
-  parameter <tt/device/ to identify the device to be opened. Therefore an
-  Apple&nbsp;II slot and drive pair is mapped to that <tt/drive_id/ according
-  to the formula
-
-  <tscreen>
-    device = slot + (drive - 1) * 8
-  </tscreen>
-
-  so that for example slot 6 drive 2 is mapped to <tt/device/ 14.
-
-  <tag/Sector count/
-  The function <url url="dio.html#s3" name="dio_query_sectcount()"> returns
-  the correct sector count for all ProDOS 8 disks. However for any non-ProDOS 8
-  disk it simply always returns 280 (which is only correct for a 140 KB disk).
-  This condition is indicated by the <tt/_oserror/ value 82.
-
-</descrip><p>
-
-
-
-<sect>License<p>
-
-This software is provided 'as-is', without any expressed or implied
-warranty. In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
diff --git a/doc/ar65.sgml b/doc/ar65.sgml
deleted file mode 100644 (file)
index 136defd..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>ar65 Users Guide
-<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
-<date>19.07.2000
-
-<abstract>
-ar65 is an archiver for object files generated by ca65. It allows to create
-archives, add or remove modules from archives, and to extract modules from
-existing archives.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-
-ar65 is a replacement for the libr65 archiver that was part of the cc65 C
-compiler suite developed by John R. Dunning. libr65 had some problems and
-the copyright does not permit some things which I wanted to be possible,
-so I decided to write a completely new assembler/linker/archiver suite
-for the cc65 compiler. ar65 is part of this suite.
-
-<sect>Usage<p>
-
-
-The archiver is called as follows:
-
-<tscreen><verb>
-       Usage: ar65 <operation> lib file|module ...
-       Operation is one of:
-               a       Add modules
-               d       Delete modules
-               l       List library contents
-               x       Extract modules
-                       V       Print the archiver version
-</verb></tscreen>
-
-You may add modules to a library using the `a' command. If the library
-does not exist, it is created (and a warning message is printed which you
-may ignore if creation of the library was your intention). You may
-specify any number of modules on the command line following the library.
-
-If a module with the same name exists in the library, it is replaced by
-the new one. The archiver prints a warning, if the module in the library
-has a newer timestamp than the one to add.
-
-Here's an example:
-
-<tscreen><verb>
-       ar65 a mysubs.lib sub1.o sub2.o
-</verb></tscreen>
-
-This will add two modules to the library `mysubs.lib' creating the
-library if necessary. If the library contains modules named sub1.o or
-sub2.o, they are replaced by the new ones.
-
-Modules names in the library are stored without the path, so, using
-
-<tscreen><verb>
-       ar65 a mysubs.lib ofiles/sub1.o ofiles/sub2.o
-</verb></tscreen>
-
-will add two modules named `sub1.o' and `sub2.o' to the library.
-
-Deleting modules from a library is done with the `d' command. You may not
-give a path when naming the modules.
-
-Example:
-
-<tscreen><verb>
-       ar65 d mysubs.lib sub1.o
-</verb></tscreen>
-
-This will delete the module named `sub1.o' from the library, printing an
-error if the library does not contain that module.
-
-
-The `l' command prints a list of all modules in the library. Any module
-names on the command line are ignored.
-
-Example:
-
-<tscreen><verb>
-       ar65 l mysubs.lib
-</verb></tscreen>
-
-
-Using the `x' command, you may extract modules from the library. The
-modules named on the command line are extracted from the library and put
-into the current directory.
-
-Note: Because of the indexing done by the archiver, the modules may have
-a changed binary layout, that is, a binary compare with the old module
-(before importing it into the library) may yield differences. The
-extracted modules are accepted by the linker and archiver, however, so
-this is not a problem.
-
-Example for extracting a module from the library:
-
-<tscreen><verb>
-       ar65 x mysubs.lib sub1.o
-</verb></tscreen>
-
-
-The `V' command prints the version number of the assembler. If you send
-any suggestions or bugfixes, please include your version number.
-
-In addition to these operations, the archiver will check for, and warn
-about duplicate external symbols in the library, every time when an
-operation does update the library. This is only a warning, the linker
-will ignore one of the duplicate symbols (which one is unspecified).
-
-
-<sect>Copyright<p>
-
-ar65 (and all cc65 binutils) are (C) Copyright 1998-2000 Ullrich von
-Bassewitz. For usage of the binaries and/or sources the following conditions
-do apply:
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
-
-
-
diff --git a/doc/atari.sgml b/doc/atari.sgml
deleted file mode 100644 (file)
index 47ce050..0000000
+++ /dev/null
@@ -1,1015 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>Atari specific information for cc65
-<author>
-<url url="mailto:shawnjefferson@24fightingchickens.com" name="Shawn Jefferson"> and<newline>
-<url url="mailto:chris@groessler.org" name="Christian Groessler">
-<date>2014-04-24
-
-<abstract>
-An overview over the Atari runtime system as it is implemented for the cc65 C
-compiler.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This file contains an overview of the Atari runtime system as it comes
-with the cc65 C compiler. It describes the memory layout, Atari specific
-header files, available drivers, and any pitfalls specific to that
-platform.
-
-The Atari runtime support comes in two flavors: <tt/atari/ and <tt/atarixl/.
-The <tt/atari/ target supports all Atari 8-bit computers, the <tt/atarixl/ only
-supports XL type or newer machines (excluding the 600XL).
-
-The <tt/atarixl/ runtime makes the whole 64K of memory available, with the
-exception of the I/O area at &dollar;D000 - &dollar;D7FF. Since the
-<tt/atarixl/ runtime has some <ref name="limitations" id="limitations">, it is
-recommended to use the <tt/atari/ target unless lack of memory dictates the
-use of the <tt/atarixl/ target.
-
-Please note that Atari specific functions are just mentioned here, they are
-described in detail in the separate <url url="funcref.html" name="function
-reference">. Even functions marked as "platform dependent" may be available on
-more than one platform. Please see the function reference for more
-information.
-
-
-<sect>Binary format<p>
-
-The Atari DOS executable file format supports more than one load block (<it/chunk/).
-
-The default binary output format generated by the linker for the
-Atari target is a machine language program with a standard executable
-header (FF FF &lt;load chunk #1&gt; ... &lt;load chunk #n&gt).
-A load chunk has the format &lsqb;&lt;2 byte start address&gt; &lt;2 bytes end address&gt;
-&lt;chunk data&gt;&rsqb;.
-A run vector is added to the end of the
-file (&dollar;02E0 &dollar;02E1 &lt;run vector&gt;) and is calculated using
-the <tt/start/ label in crt0.s.  (Technically the run vector is also a load chunk,
-but is not regarded as such here.)
-
-An <tt/atari/ program has two load chunks, an <tt/atarixl/ program has three load
-chunks.  The load chunks are defined in the linker configuration files.  For more
-detailed information about the load chunks see the chapter
-<ref name="Technical details" id="techdetail">. For the discussion here it's
-sufficient to know that the first load chunk(s) do preparation work and the
-main part of the program is in the last load chunk.
-
-The values determining the size of the main part of the program (the second load
-chunk for <tt/atari/, the third load chunk for <tt/atarixl/) are calculated in
-the crt0.s file from the __STARTUP_LOAD__ and __BSS_LOAD__ values.
-Be aware of that if you create a custom linker config file and start moving segments around (see section
-<ref name="Reserving a memory area inside the program" id="memhole">).
-
-
-<sect>Memory layout<p>
-
-<sect1><tt/atari/ target<p>
-
-The default linker config file assumes that the BASIC ROM is disabled (or
-the BASIC cartridge unplugged). This gives a usable memory range of
-&lsqb;&dollar;2000-&dollar;BC1F&rsqb;. The library startup code examines the
-current memory configuration, which depends on the size of the
-installed memory and cartridges. It does so by using the value in
-the MEMTOP (&dollar;2E5) variable as highest memory address the program
-can use. The initial stack pointer, which is the upper bound of
-memory used by the program, is set to this value, minus an optionally
-defined __RESERVED_MEMORY__ value.
-
-The default load address of &dollar;2000 can be changed by creating a custom
-linker config file or by using the "--start-addr" cl65 command line
-argument or the "--start-addr" or "-S" ld65 command line arguments.
-
-Please note that the first load chunk (which checks the available memory)
-will always be loaded at &dollar;2E00, regardless of the specified start
-address. This address can only be changed by a custom linker config file.
-
-Special locations:
-
-<descrip>
-  <tag/Text screen/
-  The text screen depends on the installed memory size and cartridges
-  and can be obtained from the SAVMSC variable (&dollar;58).
-
-  <tag/Stack/
-  The C runtime stack is located at MEMTOP and grows downwards,
-  regardless of how your linker config file is setup.  This
-  accommodates the different memory configurations of the Atari
-  machines, as well as having a cartridge installed.  You can override
-  this behaviour by writing your own crt0.s file and linking it to
-  your program (see also <ref name="Final note"
-  id="memhole_final_note">).
-
-  <tag/Heap/
-  The C heap is located at the end of the program and grows towards the C
-  runtime stack.
-
-</descrip><p>
-
-<sect1><tt/atarixl/ target<p>
-
-The startup code rearranges the memory as follows:
-
-<enum>
-<item>Sceen memory and display list are moved below the program start address.
-<item>The ROM is disabled, making the memory in the areas &lsqb;&dollar;C000-&dollar;CFFF&rsqb;
-and &lsqb;&dollar;D800-&dollar;FFF9&rsqb; available.
-<item>Character generator data is copied from ROM to the CHARGEN location specified in the
-linker config file.  This is (in the default <tt/atarixl.cfg/ file) at the same address as
-where it is in ROM (&dollar;E000, it can be changed, see <ref name="atarixl chargen location"
-id="chargenloc">).  With the character generator at &dollar;E000, there are two upper memory
-areas available, &lsqb;&dollar;D800-&dollar;DFFF&rsqb; and &lsqb;&dollar;E400-&dollar;FFF9&rsqb;.
-</enum>
-
-With the default load address of &dollar;2400 this gives a usable memory range of
-&lsqb;&dollar;2400-&dollar;CFFF&rsqb;.
-
-Please note that the first load chunk (which checks the system
-compatibilty and available memory) will always be loaded at
-&dollar;2E00, regardless of the specified start address. This address
-can only be changed by a custom linker config file.
-
-Special locations:
-
-<descrip>
-  <tag/Text screen/
-  The text screen depends on the selected load address (&dollar;2400
-  by default), and resides directly before that address, rounded to the next
-  lower page boundary.
-  The screen memory's start address can be obtained from the SAVMSC variable
-  (&dollar;58).
-
-  <tag/Stack/
-  The C runtime stack is located at end of the RAM memory area (&dollar;CFFF)
-  and grows downwards.
-
-  <tag/Heap/
-  The C heap is located at the end of the program (end of BSS segment) and
-  grows towards the C runtime stack.
-
-</descrip><p>
-
-<sect>Linker configurations<p>
-
-The ld65 linker comes with default config files for the Atari. There
-are two targets for the Atari, <tt/atari/ and <tt/atarixl/.
-The default config file for <tt/atari/ is selected with
-<tt/-t atari/, and the default config file for <tt/atarixl/ is selected with
-<tt/-t atarixl/.
-The Atari package comes with additional secondary linker config files which
-can be used via <tt/-t atari -C &lt;configfile&gt;/ (for <tt/atari/ target) or
-<tt/-t atarixl -C &lt;configfile&gt;/ (for <tt/atarixl/ target).
-
-<sect1><tt/atari/ config files<p>
-
-<sect2>default config file (<tt/atari.cfg/)<p>
-
-The default configuration is tailored to C programs. It creates files
-which have a default load address of &dollar;2000.
-
-The files generated by this config file include the
-<ref name="&dquot;system check&dquot;" id="syschk"> load chunk. It can
-optionally be left out, see <ref name="Getting rid of the &dquot;system check&dquot; load chunk" id="nosyschk">.
-
-<sect2><tt/atari-asm.cfg/<p>
-
-This config file aims to give the assembler programmer maximum
-flexibility. All program segments (<tt/CODE/, <tt/DATA/, etc.) are
-optional.
-
-By default it creates regular DOS executable files, which have a default
-load address of &dollar;2E00. It's also possible to generate an image of
-just the program data without EXE header, load address, or (auto-)start address.
-To you so, you have to define the symbols <tt/__AUTOSTART__/ and <tt/__EXEHDR__/
-when linking the program. Therefore, to generate a "plain" binary file, pass the
-options "<tt/-D__AUTOSTART__=1 -D__EXEHDR__=1/" to the linker.
-It's also possible to create a non auto-starting program file, by defining
-only the <tt/__AUTOSTART__/ symbol. Such a program has to be run manually
-after being loaded by DOS (for example by using the "M" option of DOS 2.5).
-Defining only the <tt/__EXEHDR__/ symbol will create a (useless) file which
-doesn't conform to the DOS executable file format (like a "plain" binary file)
-but still has the "autostart" load chunk appended.
-
-The sections of the file which the defines refer to (<tt/__AUTOSTART__/ for
-the autostart trailer, <tt/__EXEHDR__/ for the EXE header and load address)
-is <it/left out/, keep this in mind.
-
-The values you assign to the two symbols <tt/__AUTOSTART__/ and <tt/__EXEHDR__/
-don't matter.
-
-<sect2><tt/atari-cart.cfg/<p>
-
-This config file can be used to create 8K or 16K cartridges. It's suited both
-for C and assembly language programs.
-
-By default, an 8K cartridge is generated. To create a 16K cartridge, pass the
-size of the cartridge to the linker, like "<tt/-D__CARTSIZE__=0x4000/".
-The only valid values for <tt/__CARTSIZE__/ are 0x2000 and 0x4000.
-
-The option byte of the cartridge can be set with the <tt/__CARTFLAGS__/
-value, passed to the linker. The default value is &dollar;01, which means
-that the cartridge doesn't prevent the booting of DOS.
-
-The option byte will be located at address &dollar;BFFD. For more information
-about its use, see e.g. "Mapping the Atari".
-
-<sect2><tt/atari-cassette.cfg/<p>
-
-This config file can be used to create cassette boot files. It's suited both
-for C and assembly language programs.
-
-The size of a cassette boot file is restricted to 32K. Larger programs
-would need to be split in more parts and the parts to be loaded manually.
-
-To write the generated file to a cassette, a utility to run
-on an Atari is provided in the <tt/targetutil/ directory (<tt/w2cas.com/).
-
-<sect1><tt/atarixl/ config files<p>
-
-<sect2>default config file (<tt/atarixl.cfg/)<p>
-
-The default configuration is tailored to C programs. It creates files
-which have a default load address of &dollar;2400.
-
-The files generated by this config file include the
-<ref name="&dquot;system check&dquot;" id="syschkxl"> load chunk. It can
-optionally be left out, see <ref name="Getting rid of the &dquot;system check&dquot; load chunk" id="nosyschk">.
-
-<sect2><tt/atarixl-largehimem.cfg/<p>
-
-This is the same as the default config file, but it rearranges the
-high memory beneath the ROM into one large block. In order for this
-config file to work, the runtime library has to be recompiled with a
-special define. See the file <tt/libsrc&sol;atari&sol;Makefile.inc/ in the
-source distribution.
-
-The files generated by this config file include the
-<ref name="&dquot;system check&dquot;" id="syschkxl"> load chunk. It can
-optionally be left out, see <ref name="Getting rid of the &dquot;system check&dquot; load chunk" id="nosyschk">.
-
-
-<sect>Platform specific header files<p>
-
-Programs containing Atari specific code may use the <tt/atari.h/
-header file.
-
-
-<sect1>Atari specific functions<p>
-
-The functions and global variable listed below are special for the Atari.
-See the <url url="funcref.html" name="function reference"> for declaration and usage.
-
-<itemize>
-<item>get_ostype
-<item>get_tv
-<item>_dos_type
-<item>_gtia_mkcolor
-<item>_getcolor
-<item>_getdefdev
-<item>_graphics
-<item>_rest_vecs
-<item>_save_vecs
-<item>_scroll
-<item>_setcolor
-<item>_setcolor_low
-</itemize>
-
-
-<sect1>Hardware access<p>
-
-The following pseudo variables declared in the <tt/atari.h/ header
-file do allow access to hardware located in the address space. Some
-variables are structures, accessing the struct fields will access the
-chip registers.
-
-<descrip>
-
-  <tag><tt/GTIA_READ/ and <tt/GTIA_WRITE/</tag>
-  The <tt/GTIA_READ/ structure allows read access to the GTIA. The
-  <tt/GTIA_WRITE/ structure allows write access to the GTIA.
-  See the <tt/_gtia.h/ header file located in the include directory
-  for the declaration of the structure.
-
-  <tag><tt/POKEY_READ/ and <tt/POKEY_WRITE/</tag>
-  The <tt/POKEY_READ/ structure allows read access to the POKEY. The
-  <tt/POKEY_WRITE/ structure allows write access to the POKEY.
-  See the <tt/_pokey.h/ header file located in the include directory
-  for the declaration of the structure.
-
-  <tag><tt/ANTIC/</tag>
-  The <tt/ANTIC/ structure allows read access to the ANTIC.
-  See the <tt/_antic.h/ header file located in the include directory
-  for the declaration of the structure.
-
-  <tag><tt/PIA/</tag>
-  The <tt/PIA/ structure allows read access to the PIA 6520.
-  See the <tt/_pia.h/ header file located in the include directory
-  for the declaration of the structure.
-
-</descrip><p>
-
-
-
-<sect>Loadable drivers<p>
-
-The names in the parentheses denote the symbols to be used for static linking of the drivers.
-
-
-<sect1>Graphics drivers<p>
-
-<table><tabular ca="rrrr">
-<tt/atari/|<tt/atarixl/|screen resolution|display pages@<hline>
-<tt/atr3.tgi (atr3_tgi)/|<tt/atrx3.tgi (atrx3_tgi)/|40x24x4 (CIO mode 3, ANTIC mode 8)|1@
-<tt/atr4.tgi (atr4_tgi)/|<tt/atrx4.tgi (atrx4_tgi)/|80x48x2 (CIO mode 4, ANTIC mode 9)|1@
-<tt/atr5.tgi (atr5_tgi)/|<tt/atrx5.tgi (atrx5_tgi)/|80x48x4 (CIO mode 5, ANTIC mode A)|1@
-<tt/atr6.tgi (atr6_tgi)/|<tt/atrx6.tgi (atrx6_tgi)/|160x96x2 (CIO mode 6, ANTIC mode B)|1@
-<tt/atr7.tgi (atr7_tgi)/|<tt/atrx7.tgi (atrx7_tgi)/|160x96x4 (CIO mode 7, ANTIC mode D)|1@
-<tt/atr8.tgi (atr8_tgi)/|<tt/atrx8.tgi (atrx8_tgi)/|320x192x2 (CIO mode 8, ANTIC mode F)|1@
-<tt/atr8p2.tgi (atr8p2_tgi)/|<tt/atrx8p2.tgi (atrx8p2_tgi)/|320x192x2 (CIO mode 8, ANTIC mode F)|2@
-<tt/atr9.tgi (atr9_tgi)/|<tt/atrx9.tgi (atrx9_tgi)/|80x192x16b (CIO mode 9, ANTIC mode F, GTIA mode &dollar;40)|1@
-<tt/atr9p2.tgi (atr9p2_tgi)/|<tt/atrx9p2.tgi (atrx9p2_tgi)/|80x192x16b (CIO mode 9, ANTIC mode F, GTIA mode &dollar;40)|2@
-<tt/atr10.tgi (atr10_tgi)/|<tt/atrx10.tgi (atrx10_tgi)/|80x192x9 (CIO mode 10, ANTIC mode F, GTIA mode &dollar;80)|1@
-<tt/atr10p2.tgi (atr10p2_tgi)/|<tt/atrx10p2.tgi (atrx10p2_tgi)/|80x192x9 (CIO mode 10, ANTIC mode F, GTIA mode &dollar;80)|2@
-<tt/atr11.tgi (atr11_tgi)/|<tt/atrx11.tgi (atrx11_tgi)/|80x192x16h (CIO mode 11, ANTIC mode F, GTIA mode &dollar;C0)|1@
-<tt/atr14.tgi (atr14_tgi)/|<tt/atrx14.tgi (atrx14_tgi)/|160x192x2 (CIO mode 14, ANTIC mode C)|1@
-<tt/atr15.tgi (atr15_tgi)/|<tt/atrx15.tgi (atrx15_tgi)/|160x192x4 (CIO mode 15, ANTIC mode E)|1@
-<tt/atr15p2.tgi (atr15p2_tgi)/|<tt/atrx15p2.tgi (atrx15p2_tgi)/|160x192x4 (CIO mode 15, ANTIC mode E)|2
-</tabular>
-<!-- <caption>bla bla -->
-</table>
-
-
-Many graphics modes require more memory than the text screen which is
-in effect when the program starts up. Therefore the programmer has to
-tell the program beforehand the memory requirements of the graphics
-modes the program intends to use.
-
-On the <tt/atari/ target his can be done by using the __RESERVED_MEMORY__
-linker config variable. The number specified there describes the number
-of bytes to subtract from the top of available memory as seen from the
-runtime library. This memory is then used by the screen buffer.
-
-On the <tt/atarixl/ target the screen memory resides below the program
-load address.  In order to reserve memory for a graphics mode, one
-simply uses a higher program load address.  There are restrictions on
-selectable load addresses,
-see <ref name="Selecting a good program load address" id="loadaddr">.
-
-The numbers for the different graphics modes presented below should
-only be seen as a rule of thumb. Since the screen buffer memory needs
-to start at specific boundaries, the numbers depend on the current top
-of available memory.
-The following numbers were determined by a BASIC program.
-
-<table>
-<tabular ca="rr">
-graphics mode|reserved memory@<hline>
-0|1@
-1|1@
-2|1@
-3|1@
-4|1@
-5|182@
-6|1182@
-7|3198@
-8|7120@
-9|7146@
-10|7146@
-11|7146@
-12|162@
-13|1@
-14|3278@
-15|7120@
-16|1@
-17|1@
-18|1@
-19|1@
-20|1@
-21|184@
-22|1192@
-23|3208@
-24|7146@
-25|7146@
-26|7146@
-27|7146@
-28|162@
-29|1@
-30|3304@
-31|7146
-</tabular>
-<caption>reserved memory required for different graphics modes
-</table>
-
-The values of "1" are needed because the graphics command crashes if
-it doesn't have at least one byte available. This seems to be a bug of
-the Atari ROM code.
-
-Default drivers: <tt/atr8.tgi (atr8_tgi)/ and <tt/atrx8.tgi (atrx8_tgi)/.
-
-<sect1>Extended memory drivers<p>
-
-Currently there is only one extended memory driver.  It manages the second 64K of a 130XE.
-
-<table>
-<tabular ca="rr">
-<tt/atari/|<tt/atarixl/@<hline>
-<tt/atr130.emd (atr130_emd)/|<tt/atrx130.emd (atrx130_emd)/
-</tabular>
-</table>
-
-<sect1>Joystick drivers<p>
-
-Currently there are two joystick drivers available:
-
-<table>
-<tabular ca="rrr">
-<tt/atari/|<tt/atarixl/|description@<hline>
-<tt/atrstd.joy (atrstd_joy)/|<tt/atrxstd.joy (atrxstd_joy)/|Supports up to two/four standard joysticks connected to the joystick ports of the Atari. (Four on the pre-XL systems, two on XL or newer.)@
-<tt/atrmj8.joy (atrmj8_joy)/|<tt/atrxmj8.joy (atrxmj8_joy)/|Supports up to eight standard joysticks connected to a MultiJoy adapter.
-</tabular>
-</table>
-
-Default drivers: <tt/atrstd.joy (atrstd_joy)/ and <tt/atrxstd.joy (atrxstd_joy)/.
-
-<sect1>Mouse drivers<p>
-
-Currently there are five mouse drivers available:
-
-<table>
-<tabular ca="rrr">
-<tt/atari/|<tt/atarixl/|description@<hline>
-<tt/atrjoy.mou (atrjoy_mou)/|<tt/atrxjoy.mou (atrxjoy_mou)/|Supports a mouse emulated by a standard joystick.@
-<tt/atrst.mou (atrst_mou)/|<tt/atrxst.mou (atrxst_mou)/|Supports an Atari ST mouse.@
-<tt/atrami.mou (atrami_mou)/|<tt/atrxami.mou (atrxami_mou)/|Supports an Amiga mouse.@
-<tt/atrtrk.mou (atrtrk_mou)/|<tt/atrxtrk.mou (atrxtrk_mou)/|Supports an Atari trakball.@
-<tt/atrtt.mou (atrtt_mou)/|<tt/atrxtt.mou (atrxtt_mou)/|Supports an Atari touch tablet.
-</tabular>
-</table>
-
-All mouse devices connect to joystick port #0.
-
-Default drivers: <tt/atrst.mou (atrst_mou)/ and <tt/atrxst.mou (atrxst_mou)/.
-
-<sect2>Mouse callbacks<p>
-
-There are two mouse callbacks available.
-<p>
-The "text mode" callbacks (<tt/mouse_txt_callbacks/) display the mouse cursor as a "diamond" character
-on the standard "GRAPHICS 0" text mode screen. The mouse cursor character can be changed by an
-assembly file defining the character by exporting the zeropage symbol <tt/mouse_txt_char/.
-The default file looks like this:
-<tscreen><verb>
-        .export mouse_txt_char : zp = 96     ; 'diamond' screen code
-</verb></tscreen>
-<p>
-The "P/M" callbacks (<tt/mouse_pm_callbacks/) use Player-Missile graphics for the mouse cursor.
-The cursor shape can be changed, too, by an assembly file. Here's the default shape definition:
-<tscreen><verb>
-        .export mouse_pm_bits
-        .export mouse_pm_height    : zeropage
-        .export mouse_pm_hotspot_x : zeropage
-        .export mouse_pm_hotspot_y : zeropage
-        .rodata
-mouse_pm_bits:
-        .byte   %11110000
-        .byte   %11000000
-        .byte   %10100000
-        .byte   %10010000
-        .byte   %10001000
-        .byte   %00000100
-        .byte   %00000010
-mouse_pm_height = * - mouse_pm_bits
-; hot spot is upper left corner
-mouse_pm_hotspot_x = 0
-mouse_pm_hotspot_y = 0
-</verb></tscreen>
-<p>
-<tt/mouse_pm_bits/ defines the shape of the cursor, <tt/mouse_pm_height/ defines the number of
-bytes in <tt/mouse_pm_bits/. <tt/mouse_pm_hotspot_x/ and <tt/mouse_pm_hotspot_y/ define the
-position in the shape where "the mouse points to". When using this callback page #6 (&dollar;600
- - &dollar;6FF) is used for the P/M graphics data and no P/M graphics can otherwise be used
-by the program. The height of the shape (<tt/mouse_pm_height/)
-must not exceed 32 lines since the callback routines cannot handle more than 32 lines.
-<p>
-The default callbacks definition (<tt/mouse_def_callbacks/) is an alias for the "P/M" callbacks.
-
-<sect1>RS232 device drivers<p>
-
-Currently there is one RS232 driver.  It uses the R: device (therefore
-an R: driver needs to be installed) and was tested with the 850
-interface module.
-
-<table>
-<tabular ca="rr">
-<tt/atari/|<tt/atarixl/@<hline>
-<tt/atrrdev.ser (atrrdev_ser)/|<tt/atrxrdev.ser (atrxrdev_ser)/
-</tabular>
-</table>
-
-
-<sect>Limitations<p>
-
-<sect1><tt/atarixl/<#if output="info|latex2e"> limitations</#if><label id="limitations"<p>
-
-<itemize>
-<item>The display is cleared at program start and at program termination.  This is a side
-effect of relocating the display memory below the program start address.
-<item>Not all possible CIO and SIO functions are handled by the runtime stub code which banks
-the ROM in and out.  All functions used by the runtime library are handled, though.
-<item>The <tt/_sys()/ function is not supported.
-<item>It is not compatible with DOSes or other programs using the memory below the ROM.
-</itemize>
-
-<sect>DIO implementation<label id="dio"><p>
-
-The Atari supports disk drives with either 128 or 256 byte sectors.
-The first three sectors of any disk are always 128 bytes long though. This is
-because the system can only boot from 128 bytes sectors.
-
-Therefore the DIO read and write functions transfer only 128 bytes
-for sectors 1 to 3, regardless of the type of diskette.
-
-
-<sect>CONIO implementation<label id="conio"><p>
-
-The console I/O is speed optimized therefore support for XEP80 hardware
-or f80.com software is missing. Of course you may use stdio.h functions.
-
-
-<sect>Technical details<label id="techdetail"><p>
-
-<sect1><tt/atari/<#if output="info|latex2e"> details</#if><p>
-
-<sect2><#if output="info|latex2e"><tt/atari/ </#if>Load chunks<p>
-
-An <tt/atari/ program contains two load chunks.
-
-<enum>
-<item>"system check"<label id="syschk">&nl;
-This load chunk is always loaded at address &dollar;2E00, and checks if the system has
-enough memory to run the program. It also checks if the program start address is not
-below MEMLO. If any of the checks return false, the loading of the program is aborted.&nl;
-The contents of this chunk come from the SYSCHKCHNK memory area of the linker config file.
-<item>main program&nl;
-This load chunk is loaded at the selected program start address (default &dollar;2000) and
-contains all of the code and data of the program.&nl;
-The contents of this chunk come from the RAM memory area of the linker config file.
-</enum>
-
-
-<sect1><tt/atarixl/<#if output="info|latex2e"> details</#if><p>
-
-<sect2>General operation<p>
-
-The <tt/atarixl/ target banks out the ROM while the program is running in
-order to make more memory available to the program.
-
-The screen memory is by default located at the top of available memory,
-&dollar;BFFF if BASIC is not enabled, &dollar;9FFF if BASIC is enabled.
-Therefore, in order to create a largest possible continuous memory area,
-the screen memory is moved below the program load address.  This gives
-a memory area from &lt;program load addr&gt; to &dollar;CFFF.
-
-The startup code installs wrappers for interrupt handlers and ROM routines.
-When an interrupt or call to a ROM routine happens, the wrappers enable the
-ROM, call the handler or routine, and disable the ROM again.
-
-The "wrapping" of the ROM routines is done by changing the ROM entry
-point symbols in <tt/atari.inc/ to point to the wrapper functions.
-
-For ROM functions which require input or output buffers, the wrappers
-copy the data as required to buffers in low memory.
-
-<sect2><#if output="info|latex2e"><tt/atarixl/ </#if>Load chunks<label id="xlchunks"><p>
-
-An <tt/atarixl/ program contains three load chunks.
-
-<enum>
-<item>"system check"<label id="syschkxl">&nl;
-This load chunk is always loaded at address &dollar;2E00, and checks if the system is
-suitable for running the program. It also checks if there is enough room between MEMLO
-and the program start address to move the text mode screen buffer there. If any of the
-checks return false, the loading of the program is aborted.&nl;
-The contents of this chunk come from the SYSCHKCHNK memory area of the linker config file.
-<item>"shadow RAM prepare"&nl;
-The second load chunk gets loaded to the selected program load address (default &dollar;2400).
-It moves the screen memory below the program load address, copies the character generator
-from ROM to its new place in RAM, and copies the parts of the program which reside in
-high memory below the ROM to their place. The high memory parts are included in this load chunk.&nl;
-At the beginning of this load chunk there is a .bss area, which is not part of the
-EXE file. Therefore the on-disk start address of this load chunk will be higher than the
-selected start address. This .bss area (segment LOWBSS) contains the buffers for the
-double buffering of ROM input and output data.  If you add contents to this segment be aware
-that the contents won't be zero initialized by the startup code.&nl;
-The contents of this chunk come from the SRPREPCHNK memory area of the linker config file.
-<item>main program&nl;
-This load chunk is loaded just above the LOWBSS segment, replacing the code of
-the previous load chunk. It contains all remaining code and data sections of the program,
-including the startup code.&nl;
-The contents of this chunk come from the RAM memory area of the linker config file.
-</enum>
-
-<sect2>Moving screen memory below the program start address<p>
-
-When setting a graphics mode, the ROM looks at the RAMTOP location. RAMTOP
-describes the amount of installed memory in pages (RAMTOP is only one byte).
-The screen memory and display list are placed immediately below RAMTOP.
-
-Now in order to relocate the screen memory to lower memory, the startup code
-puts a value into RAMTOP which causes the ROM routines to allocate the display
-memory below the program start address and then it issues a ROM call to setup
-the regular text mode.
-
-<sect2>Selecting a good program load address<label id="loadaddr"><p>
-
-Due to the movement of the screen memory below the program start, there are some
-load addresses which are sub-optimal because they waste memory or prevent a
-higher resolution graphics mode from being enabled.
-
-There are restrictions at which addresses screen memory (display buffer and display
-list) can be placed. The display buffer cannot cross a 4K boundary and a display
-list cannot cross a 1K boundary.
-
-The startup code takes this into account when moving the screen memory down.
-If the program start address (aligned to the next lower page boundary) minus
-the screen buffer size would result in a screen buffer which spans a 4K
-boundary, the startup code lowers RAMTOP to this 4K boundary.&nl;
-The size of the screen buffer in text mode is 960 (&dollar;3C0) bytes. So, for
-example, a selected start address of &dollar;2300 would span the 4K boundary
-at &dollar;2000. The startup code would adjust the RAMTOP value in such way that
-the screen memory would be located just below this boundary (at &dollar;1C40).
-This results in the area &lsqb;&dollar;2000-&dollar;22FF&rsqb; being wasted.
-Additionally, the program might fail to load since the lowest address used
-by the screen memory could be below MEMLO. (The lowest address used in this
-example would be at &dollar;1C20, where the display list would allocated.)
-
-These calculations are performed by the startup code (in the first two
-load chunks), but the startup code only takes the default 40x24 text mode
-into account. If the program later wants to load TGI drivers which set
-a more memory consuming graphics mode, the user has to pick a higher
-load address.
-Using higher resolution modes there is a restriction in the ROM that it
-doesn't expect RAMTOP to be at arbitrary values. The Atari memory modules
-came only in 8K or 16K sizes, so the ROM expects RAMTOP to only have
-values in 8K steps. Therefore, when using the highest resolution modes
-the program start address must be at an 8K boundary.
-
-
-<sect2>Character generator location<label id="chargenloc"><p>
-
-The default <tt/atarixl/ linker config file (<tt/atarixl.cfg/) leaves the
-character generator location at the same address where it is in ROM
-(&dollar;E000). This has the disadvatage to split the upper memory into
-two parts (&lsqb;&dollar;D800-&dollar;DFFF&rsqb; and
-&lsqb;&dollar;E400-&dollar;FFF9&rsqb;). For applications which
-require a large continuous upper memory area, an alternative linker
-config file (<tt/atarixl-largehimem.cfg/) is provided. It relocates the
-character generator to &dollar;D800, providing a single big upper
-memory area at &lsqb;&dollar;DC00-&dollar;FFF9&rsqb;.
-
-With the character generator at a different address than in ROM, the routines
-which enable and disable the ROM also have to update the chargen pointer.
-This code is not enabled by default. In order to enable it,
-uncomment the line which sets CHARGEN_RELOC in <tt/libsrc&sol;atari&sol;Makefile.inc/
-and recompile the <tt/atarixl/ runtime library.
-
-<sect>Other hints<p>
-
-
-<sect1>Function keys<p>
-
-Function keys are mapped to Atari + number key.
-
-
-<sect1>Passing arguments to the program<p>
-
-Command line arguments can be passed to <tt/main()/ when the used DOS supports it.
-
-<enum>
-<item>Arguments are separated by spaces.
-<item>Leading and trailing spaces around an argument are ignored.
-<item>The first argument passed to <tt/main/ is the program name.
-<item>A maximum number of 16 arguments (including the program name) are
-      supported.
-</enum>
-
-
-<sect1>Interrupts<p>
-
-The runtime for the Atari uses routines marked as <tt/.INTERRUPTOR/ for
-interrupt handlers. Such routines must be written as simple machine language
-subroutines and will be called automatically by the VBI handler code
-when they are linked into a program. See the discussion of the <tt/.CONDES/
-feature in the <url url="ca65.html" name="assembler manual">.
-
-Please note that on the Atari targets the <tt/.INTERRUPTOR/s are being
-run in NMI context. The other targets run them in IRQ context.
-
-<sect1>Reserving a memory area inside a program<label id="memhole"><p>
-
-(This section is primarily applicable to the <tt/atari/ target, but the
-principles apply to <tt/atatixl/ as well.)
-
-The Atari 130XE maps its additional memory into CPU memory in 16K
-chunks at address &dollar;4000 to &dollar;7FFF. One might want to
-prevent this memory area from being used by cc65. Other reasons to
-prevent the use of some memory area could be to reserve space for the
-buffers for display lists and screen memory.
-<p>
-The Atari executable format allows holes inside a program, e.g. one
-part loads into &dollar;2E00 to &dollar;3FFF, going below the reserved
-memory area (assuming a reserved area from &dollar;4000 to
-&dollar;7FFF), and another part loads into &dollar;8000 to
-&dollar;BC1F.
-<p>
-Each load chunk of the executable starts with a 4 byte header which
-defines its load address and size. In the following linker config files
-these headers are named HEADER and SECHDR (for the MEMORY layout), and
-accordingly NEXEHDR and CHKHDR (for the SEGMENTS layout).
-<p>
-<sect2>Low code and high data example<p>
-Goal: Create an executable with 2 load chunks which doesn't use the
-memory area from &dollar;4000 to &dollar;7FFF. The CODE segment of
-the program should go below &dollar;4000 and the DATA and RODATA
-segments should go above &dollar;7FFF.
-<p>
-The main problem is that the EXE header generated by the cc65 runtime
-lib is wrong. It defines a single load chunk with the sizes/addresses
-of the STARTUP, LOWCODE, INIT, CODE, RODATA, and DATA segments, in
-fact, the whole user program (we're disregarding the "system check"
-load chunk here).
-<p>
-The contents of the EXE header come from the EXEHDR and MAINHDR segments.
-The EXEHDR segment just contains the &dollar;FFFF value which is required
-to be the first bytes of the EXE file.&nl;
-The MAINHDR are defined in in crt0.s. This cannot be changed without
-modifying and recompiling the cc65 atari runtime library. Therefore
-the original contents of this segment must be discarded and be
-replaced by a user created one. This discarding is done by assigning the
-MAINHDR segment to the (new introduced) DISCARD memory area. The DISCARD memory area is
-thrown away in the new linker config file (written to file "").
-We add a new FSTHDR segment for the chunk header of the first chunk.
-<p>
-The user needs to create a customized linker config file which adds
-new memory areas and segments to hold the new header data for the first load
-chunk and the header data for the second load chunk. Also an assembly source file
-needs to be created which defines the contents of the new header data
-for the two load chunks.
-<p>
-<p>
-This is an example of a modified cc65 Atari linker configuration file
-(split.cfg):
-<tscreen><verb>
-SYMBOLS {
-    __STACKSIZE__:       value = $800   type = weak;    # 2K stack
-    __RESERVED_MEMORY__: value = $0000, type = weak;
-}
-FEATURES {
-    STARTADDRESS: default = $2E00;
-}
-MEMORY {
-    ZP: start = $82, size = $7E, type = rw, define = yes;
-
-    HEADER: start = $0000, size = $2, file = %O;        # first load chunk
-
-    FSTHDR: start = $0000, size = $4, file = %O;        # second load chunk
-    RAMLO: start = %S, size = $4000 - %S, file = %O;
-
-    DISCARD: start = $4000, size = $4000, file = "";
-
-    SECHDR: start = $0000, size = $4, file = %O;        # second load chunk
-    RAM: start = $8000, size = $3C20, file = %O;        # $3C20: matches upper bound $BC1F
-}
-SEGMENTS {
-    EXEHDR: load = HEADER, type = ro;
-
-    MAINHDR: load = DISCARD, type = ro;
-
-    NEXEHDR: load = FSTHDR, type = ro;                  # first load chunk
-    STARTUP: load = RAMLO, type = ro, define = yes;
-    LOWCODE: load = RAMLO, type = ro, define = yes, optional = yes;
-    INIT: load = RAMLO, type = ro, optional = yes;
-    CODE: load = RAMLO, type = ro, define = yes;
-
-    CHKHDR: load = SECHDR, type = ro;                   # second load chunk
-    RODATA: load = RAM, type = ro, define = yes;
-    DATA: load = RAM, type = rw, define = yes;
-    BSS: load = RAM, type = bss, define = yes;
-
-    ZEROPAGE: load = ZP, type = zp;
-    AUTOSTRT: load = RAM, type = ro;                    # defines program entry point
-}
-FEATURES {
-    CONDES: segment = RODATA,
-            type = constructor,
-            label = __CONSTRUCTOR_TABLE__,
-            count = __CONSTRUCTOR_COUNT__;
-    CONDES: segment = RODATA,
-            type = destructor,
-            label = __DESTRUCTOR_TABLE__,
-            count = __DESTRUCTOR_COUNT__;
-}
-</verb></tscreen>
-<p>
-
-A new memory area DISCARD was added.
-It gets loaded with the contents of the (now unused) MAINHDR segment. But the
-memory area isn't written to the output file. This way the contents of
-the MAINHDR segment get discarded.
-<p>
-The newly added NEXEHDR segment defines the correct chunk header for the
-first intended load chunk. It
-puts the STARTUP, LOWCODE, INIT, and CODE segments, which are the
-segments containing only code, into load chunk #1 (RAMLO memory area).
-<p>
-The header for the second load chunk comes from the new CHKHDR
-segment. It puts the RODATA, DATA, BSS, and ZPSAVE segments into load
-chunk #2 (RAM memory area).
-<p>
-<p>
-The contents of the new NEXEHDR and CHKHDR segments come from this
-file (split.s):
-<tscreen><verb>
-       .import __CODE_LOAD__, __BSS_LOAD__, __CODE_SIZE__
-       .import __DATA_LOAD__, __RODATA_LOAD__, __STARTUP_LOAD__
-
-       .segment "NEXEHDR"
-       .word    __STARTUP_LOAD__
-       .word    __CODE_LOAD__ + __CODE_SIZE__ - 1
-
-       .segment "CHKHDR"
-       .word    __RODATA_LOAD__
-       .word    __BSS_LOAD__ - 1
-</verb></tscreen>
-<p>
-Compile with
-<tscreen><verb>
-cl65 -t atari -C split.cfg -o prog.com prog.c split.s
-</verb></tscreen>
-
-<sect2>Low data and high code example<p>
-
-
-Goal: Put RODATA and DATA into low memory and STARTUP, LOWCODE, INIT,
-CODE, BSS, ZPSAVE into high memory (split2.cfg):
-
-<tscreen><verb>
-SYMBOLS {
-    __STACKSIZE__:       value = $800   type = weak;    # 2K stack
-    __RESERVED_MEMORY__: value = $0000, type = weak;
-}
-FEATURES {
-    STARTADDRESS: default = $2E00;
-}
-MEMORY {
-    ZP: start = $82, size = $7E, type = rw, define = yes;
-
-    HEADER: start = $0000, size = $2, file = %O;        # first load chunk
-
-    FSTHDR: start = $0000, size = $4, file = %O;        # second load chunk
-    RAMLO: start = %S, size = $4000 - %S, file = %O;
-
-    DISCARD: start = $4000, size = $4000, file = "";
-
-    SECHDR: start = $0000, size = $4, file = %O;        # second load chunk
-    RAM: start = $8000, size = $3C20, file = %O;        # $3C20: matches upper bound $BC1F
-}
-SEGMENTS {
-    EXEHDR: load = HEADER, type = ro;                     # discarded old EXE header
-
-    MAINHDR: load = DISCARD, type = ro;
-
-    NEXEHDR: load = FSTHDR, type = ro;                  # first load chunk
-    RODATA: load = RAMLO, type = ro, define = yes;
-    DATA: load = RAMLO, type = rw, define = yes;
-
-    CHKHDR: load = SECHDR, type = ro;                   # second load chunk
-    STARTUP: load = RAM, type = ro, define = yes;
-    INIT: load = RAM, type = ro, optional = yes;
-    CODE: load = RAM, type = ro, define = yes;
-    BSS: load = RAM, type = bss, define = yes;
-
-    ZEROPAGE: load = ZP, type = zp;
-    AUTOSTRT: load = RAM, type = ro;                    # defines program entry point
-}
-FEATURES {
-    CONDES: segment = RODATA,
-            type = constructor,
-            label = __CONSTRUCTOR_TABLE__,
-            count = __CONSTRUCTOR_COUNT__;
-    CONDES: segment = RODATA,
-            type = destructor,
-            label = __DESTRUCTOR_TABLE__,
-            count = __DESTRUCTOR_COUNT__;
-}
-</verb></tscreen>
-
-New contents for NEXEHDR and CHKHDR are needed (split2.s):
-<tscreen><verb>
-       .import __STARTUP_LOAD__, __BSS_LOAD__, __DATA_SIZE__
-       .import __DATA_LOAD__, __RODATA_LOAD__
-
-       .segment "NEXEHDR"
-       .word    __RODATA_LOAD__
-       .word    __DATA_LOAD__ + __DATA_SIZE__ - 1
-
-       .segment "CHKHDR"
-       .word    __STARTUP_LOAD__
-       .word    __BSS_LOAD__ - 1
-</verb></tscreen>
-
-Compile with
-<tscreen><verb>
-cl65 -t atari -C split2.cfg -o prog.com prog.c split2.s
-</verb></tscreen>
-
-<sect2>Final note<label id="memhole_final_note"><p>
-
-There are two other memory areas which don't appear directly in the
-linker config file. They are the stack and the heap.
-
-The cc65 runtime lib places the stack location at the end of available
-memory. This is dynamically set from the MEMTOP system variable at
-startup. The heap is located in the area between the end of the BSS
-segment and the top of the stack as defined by __STACKSIZE__.
-
-If BSS and/or the stack shouldn't stay at the end of the program,
-some parts of the cc65 runtime lib need to be replaced/modified.
-
-common/_heap.s defines the location of the heap and atari/crt0.s
-defines the location of the stack by initializing sp.
-
-
-<sect1>Upgrading from an older cc65 version<p>
-
-If you are using a customized linker config file you might get some errors
-regarding the MAINHDR segment. Like this:
-
-<tscreen><verb>
-ld65: Error: Missing memory area assignment for segment `MAINHDR'
-</verb></tscreen>
-
-The old "HEADER" memory description contained six bytes: &dollar;FFFF
-and the first and last memory addess of the program. For the "system
-check" load chunk this had to be split into two memory assigments. The
-"HEADER" now only contains the &dollar;FFFF. The main program's first
-and last memory address were moved to a new segment, called "MAINHDR",
-which in the new linker config file goes into its own memory area (also
-called "MAINHDR").&nl;&nl;
-A simple way to adapt your old linker config file is to add the
-following line to the "SEGMENTS" section:
-
-<tscreen><verb>
-MAINHDR: load = HEADER, type = ro;
-</verb></tscreen>
-
-
-
-<sect1>Getting rid of the "system check" load chunk<label id="nosyschk"><p>
-
-If, for some reason, you don't want to include the "system check" load
-chunk, you can do so by defining the symbol <tt/__SYSTEM_CHECK__/ when linking the
-program. The "system check" chunk doesn't include vital parts of the
-program. So if you don't want the system checks, it is save to leave them out.
-This is probably mostly interesting for debugging.
-
-When using cl65, you can leave it out with this command line:
-
-<tscreen><verb>
-cl65 -Wl -D__SYSTEM_CHECK__=1 <arguments>
-</verb></tscreen>
-
-The value you assign to <tt/__SYSTEM_CHECK_/ doesn't matter. If the
-<tt/__SYSTEM_CHECK__/ symbol is defined, the load chunk won't be included.
-
-
-<sect>License<p>
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
diff --git a/doc/atari5200.sgml b/doc/atari5200.sgml
deleted file mode 100644 (file)
index a19641f..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>Atari 5200 specific information for cc65
-<author>
-<url url="mailto:chris@groessler.org" name="Christian Groessler"><newline>
-<date>2014-05-27
-
-<abstract>
-An overview over the Atari 5200 runtime system as it is implemented for the
-cc65 C compiler.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This file contains an overview of the Atari 5200 runtime system as it comes
-with the cc65 C compiler. It describes the memory layout, Atari 5200 specific header
-files, available drivers, and any pitfalls specific to that platform.
-
-Please note that Atari 5200 specific functions are just mentioned here, they are
-described in detail in the separate <url url="funcref.html" name="function
-reference">. Even functions marked as "platform dependent" may be available on
-more than one platform. Please see the function reference for more
-information.
-
-
-<sect>Binary format<p>
-
-The standard binary output format generated by the linker for the Atari 5200 target
-is a cartridge image. It is of course
-possible to change this behaviour by using a modified startup file and linker
-config.
-
-<sect>Memory layout<p>
-
-cc65 generated programs with the default setup use the RAM space from &dollar;021C to
-&dollar;3FFF. If you want to reserve memory for the display list and screen buffer
-you should define the __RESERVED_MEMORY__ linker variable. The number
-of bytes specified by __RESERVED_MEMORY__ are lowering the top of
-memory, therefore the available
-RAM memory for the program is &dollar;021C to &dollar;3FFF-__RESERVED_MEMORY__.
-The default linker config file sets __RESERVED_MEMORY__ to &dollar;1E0
-to reserve space for an optional CONIO text screen.
-
-Special locations:
-
-<descrip>
-  <tag/Text screen/
-  The text screen is only enabled if any of the CONIO output functions
-  is used in the program. Its size is 20x24 characters (Antic mode 6,
-  BASIC mode 1). The text screen is located at &dollar;3E00. The
-  address of the screen memory is available at runtime in the variable
-  SAVMSC (&dollar;001B).<p>
-  If the program doesn't use any CONIO output functions it needs to setup its own
-  display list.
-
-  <tag/Stack/
-  The C runtime stack is located at &dollar;3FFF-__RESERVED_MEMORY__ and growing downwards.
-
-  <tag/Heap/
-  The C heap is located at the end of the program and grows towards the C
-  runtime stack.
-
-</descrip><p>
-
-
-
-<sect>Platform specific header files<p>
-
-Programs containing Atari 5200 specific code may use the <tt/atari5200.h/ header file.
-
-
-<sect1>Atari 5200 specific functions<p>
-
-<itemize>
-<item>TBD.
-</itemize>
-
-
-
-<sect1>Hardware access<p>
-
-The following pseudo variables declared in the <tt/atari5200.h/ header
-file do allow access to hardware located in the address space. Some
-variables are structures, accessing the struct fields will access the
-chip registers.
-
-<descrip>
-
-  <tag><tt/GTIA_READ/ and <tt/GTIA_WRITE/</tag>
-  The <tt/GTIA_READ/ structure allows read access to the GTIA. The
-  <tt/GTIA_WRITE/ structure allows write access to the GTIA.
-  See the <tt/_gtia.h/ header file located in the include directory
-  for the declaration of the structure.
-
-  <tag><tt/POKEY_READ/ and <tt/POKEY_WRITE/</tag>
-  The <tt/POKEY_READ/ structure allows read access to the POKEY. The
-  <tt/POKEY_WRITE/ structure allows write access to the POKEY.
-  See the <tt/_pokey.h/ header file located in the include directory
-  for the declaration of the structure.
-
-  <tag><tt/ANTIC/</tag>
-  The <tt/ANTIC/ structure allows read access to the ANTIC.
-  See the <tt/_antic.h/ header file located in the include directory
-  for the declaration of the structure.
-
-</descrip><p>
-
-
-<sect>Loadable drivers<p>
-
-All drivers must be statically linked because no disk I/O is available.
-The names in the parentheses denote the symbols to be used for static linking of the drivers.
-
-
-<sect1>Graphics drivers<p>
-
-No graphics drivers are currently available for the Atari 5200.
-
-
-<sect1>Extended memory drivers<p>
-
-No extended memory drivers are available for the Atari 5200.
-
-
-<sect1>Joystick drivers<p>
-
-<descrip>
-
-  <tag><tt/atr5200std.joy (atr5200std_joy)/</tag>
-  A joystick driver for the standard Atari 5200 joystick is
-  available. Depending on the version of the 5200 console, two or four joysticks can be attached.
-
-</descrip><p>
-
-
-<sect1>Mouse drivers<p>
-
-No mouse drivers are available for the Atari 5200.
-
-
-<sect1>RS232 device drivers<p>
-
-No serial drivers are available for the Atari 5200.
-
-
-
-<sect>Limitations<p>
-
-<sect1>Disk I/O<p>
-
-Disk I/O is not supported by the <tt/atari5200/ target. This means that
-you cannot use any of the following functions (and a few others):
-
-<itemize>
-<item>fclose
-<item>fopen
-<item>fread
-<item>fprintf
-<item>fputc
-<item>fscanf
-<item>fwrite
-<item>...
-</itemize>
-
-
-
-<sect>Other hints<p>
-
-
-
-<sect>License<p>
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
diff --git a/doc/atmos.sgml b/doc/atmos.sgml
deleted file mode 100644 (file)
index 68f7f9d..0000000
+++ /dev/null
@@ -1,291 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>Oric Atmos-specific information for cc65
-<author>
-<url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">,<newline>
-<url url="mailto:polluks@sdf.lonestar.org" name="Stefan A. Haubenthal">,<newline>
-<url url="mailto:greg.king5@verizon.net" name="Greg King">
-<date>2015-01-09
-
-<abstract>
-An overview over the Atmos runtime system as it is implemented for the cc65 C
-compiler.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This file contains an overview of the Atmos runtime system as it comes with the
-cc65 C compiler. It describes the memory layout, Atmos-specific header files,
-available drivers, and any pitfalls specific to that platform.
-
-Please note that Atmos-specific functions are just mentioned here, they are
-described in detail in the separate <url url="funcref.html" name="function
-reference">. Even functions marked as "platform dependent" may be available on
-more than one platform. Please see the function reference for more
-information.
-
-
-
-<sect>Binary format<p>
-
-The standard binary output format generated by the linker for the Atmos target
-is a machine language program with a one-line BASIC stub that jumps to the
-machine-language part through <tt/CALL/.  It has one sacrificial byte attached
-to the end (a bug in the Oric ROM means that BASIC can put a variable on top
-of the last byte that was loaded).  It has a 24-byte tape header.  A file can
-be CLOADed as a BASIC program, and started by typing <tt/RUN/.  The standard
-load address is &dollar;501.
-
-
-
-<sect>Memory layout<p>
-
-In the standard setup, cc65-generated programs use the memory from
-&dollar;0501 to &dollar;9800; so, nearly 37K of memory (including the stack) is
-available. ROM calls are possible without further precautions.
-
-If your program needs more memory, and it won't use TGI graphics, then you can
-use the ld65 command-line option, <tt/-D __GRAB__=1/, when building the
-program, to include the graphics screen RAM.  Then, nearly 44K of memory
-(&dollar;0501 to &dollar;B400) is available.
-
-Special locations:
-
-<descrip>
-  <tag/Stack/
-  The C runtime stack is located at &dollar;97FF (or &dollar;B3FF), and grows
-  downwards.
-
-  <tag/Heap/
-  The C heap is located at the end of the program, and grows towards the C
-  runtime stack.
-
-</descrip><p>
-
-
-
-<sect>Platform-specific header files<p>
-
-Programs containing Atmos-specific code may use the <tt/atmos.h/ header file.
-
-
-<sect1>Atmos-specific functions<p>
-
-The functions listed below are special for the Atmos. See the <url
-url="funcref.html" name="function reference"> for declaration and usage.
-
-<itemize>
-<item>atmos_load
-<item>atmos_save
-<item>atmos_explode
-<item>atmos_ping
-<item>atmos_shoot
-<item>atmos_tick
-<item>atmos_tock
-<item>atmos_zap
-</itemize>
-
-
-<sect1>Hardware access<p>
-
-The following pseudo variables declared in the <tt/atmos.h/ header file do allow
-access to hardware located in the address space. Some variables are
-structures; accessing the struct fields will access the chip registers.
-
-<descrip>
-
-  <tag><tt/VIA/</tag>
-  Access to the VIA (Versatile Interface Adapter) chip is available via the
-  <tt/VIA/ variable. The structure behind this variable is explained in <tt/_6522.h/.
-
-</descrip><p>
-
-
-
-<sect>Loadable drivers<p>
-
-<em>Note:</em> Since the Atmos doesn't have working disk I/O
-(see <ref id="limitations" name="section &quot;Limitations&quot;">), the
-available drivers cannot be loaded at runtime (so the term "loadable drivers"
-is somewhat misleading). Instead, the drivers have to be statically linked. While
-this may seem overhead, it has two advantages:
-
-<enum>
-<item>The interface is identical to the one used for other platforms
-      and to the one for the Atmos once it has disk I/O.
-<item>Once disk I/O is available, existing code can be changed to load drivers
-      at runtime with almost no effort.
-</enum>
-
-The names in the parentheses denote the symbols to be used for static linking of the drivers.
-
-
-<sect1>Graphics drivers<p>
-
-The default drivers, <tt/tgi_stddrv (tgi_static_stddrv)/,
-point to <tt/atmos-240-200-2.tgi (atmos_240_200_2_tgi)/.
-
-<descrip>
-
-  <tag><tt/atmos-228-200-3.tgi (atmos_228_200_3_tgi)/</tag>
-  This driver was written by Greg King and Stefan Haubenthal.
-  It features a resolution of 228&times;200 with a palette of two colors that
-  can be chosen from the Atmos's eight colors.  The driver supports a third
-  palette-"color" that actually "flips" the pixel (it becomes the other color)
-  that is on the screen under the graphics cursor.
-
-  <tag><tt/atmos-240-200-2.tgi (atmos_240_200_2_tgi)/</tag>
-  This driver was written by Stefan Haubenthal and Greg King.
-  It features a resolution of 240&times;200 with black and white colors.
-  It is the default graphics driver for the Atmos.
-
-</descrip><p>
-
-
-<sect1>Extended memory drivers<p>
-
-No extended memory drivers are currently available for the Atmos.
-
-
-<sect1>Joystick drivers<p>
-
-<descrip>
-
-  <tag><tt/atmos-pase.joy (atmos_pase_joy)/</tag>
-  Supports two standard joysticks connected to the P.A.S.E. interface of the Atmos.
-
-</descrip><p>
-
-
-<sect1>Mouse drivers<p>
-
-No mouse drivers are currently available for the Atmos.
-
-
-<sect1>RS232 device drivers<p>
-
-<descrip>
-
-  <tag><tt/atmos-acia.ser (atmos_acia_ser)/</tag>
-  Driver for the Telestrat integrated serial controller and the Atmos with a
-  serial add-on.
-  Note that, because of the peculiarities of the 6551 chip, together with the
-  use of the NMI, transmits are not interrupt driven; and, the transceiver
-  blocks if the receiver asserts flow control because of a full buffer.
-
-</descrip><p>
-
-
-
-<sect>Limitations<label id="limitations"><p>
-
-<sect1>Disk I/O<p>
-
-The existing library for the Atmos doesn't implement C file I/O. There are
-hacks for the <tt/read()/ and <tt/write()/ routines in place, which will make
-functions work that read from <tt/stdin/ and write to <tt/stdout/ and
-<tt/stderr/ (such as <tt/printf()/). However, those functions have some
-shortcomings which won't be fixed, because they're going to be replaced
-anyway.
-
-To be more concrete, that limitation means that you cannot use any of the
-following functions (and a few others):
-
-<itemize>
-<item>fclose
-<item>fopen
-<item>fread
-<item>fprintf
-<item>fputc
-<item>fscanf
-<item>fwrite
-<item>...
-</itemize>
-
-
-
-<sect>Other hints<p>
-
-
-<sect1>Function keys<p>
-
-They are defined to be FUNCT + a number key.
-
-
-<sect1>Capitals lock<p>
-
-The keyboard's "CAPS Lock" mode is turned off while the program is running.
-The previous mode (usually, CAPS Lock turned on [because Oric BASIC keywords
-must be UPPER-case]) is restored when the program stops.
-
-
-<sect1>Passing arguments to the program<p>
-
-Command-line arguments can be passed to <tt/main()/. Since that is not
-supported directly by BASIC, the following syntax was chosen:
-
-<tscreen><verb>
-    RUN:REM arg1 " ARG2 IS QUOTED" ARG3 "" ARG5
-</verb></tscreen>
-
-<enum>
-<item>You must turn <tt/CAPS/ lock off (tap CTRL-T) when you want to type
-      lower-case arguments (but, <tt/RUN/ and <tt/REM/ must be UPPER-case).
-<item>Arguments are separated by spaces.
-<item>Arguments may be quoted.
-<item>Leading and trailing spaces around an argument are ignored. Spaces within
-      a quoted argument are allowed.
-<item>The first argument passed to <tt/main()/ is the program name.
-<item>A maximum number of 10 arguments (including the program name) are
-      supported.
-</enum>
-
-
-<sect1>Automatic starting<p>
-
-Usually, a cc65-built program just will sit quietly in memory, after it is
-CLOADed.  It waits for you to start it (by typing BASIC's <tt/RUN/ command).
-But, if you want to create a program that will start running immediately after
-it is loaded, then you can use the linker command-line option
-<tt/-D __AUTORUN__=$C7/.
-
-
-<sect1>Interrupts<p>
-
-The runtime for the Atmos uses routines marked as <tt/.INTERRUPTOR/ for
-interrupt handlers. Such routines must be written as simple machine language
-subroutines and will be called automatically by the interrupt handler code
-when they are linked into a program. See the discussion of the <tt/.CONDES/
-feature in the <url url="ca65.html" name="assembler manual">.
-
-
-
-<sect>License<p>
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
diff --git a/doc/c128.sgml b/doc/c128.sgml
deleted file mode 100644 (file)
index 4154c0a..0000000
+++ /dev/null
@@ -1,359 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>Commodore 128-specific information for cc65
-<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
-<date>2014-04-12
-
-<abstract>
-An overview over the C128 runtime system as it is implemented for the cc65 C
-compiler.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This file contains an overview of the C128 runtime system as it comes with the
-cc65 C compiler. It describes the memory layout, C128-specific header files,
-available drivers, and any pitfalls specific to that platform.
-
-Please note that C128-specific functions are just mentioned here, they are
-described in detail in the separate <url url="funcref.html" name="function
-reference">. Even functions marked as "platform dependent" may be available on
-more than one platform. Please see the function reference for more
-information.
-
-
-<sect>Binary format<p>
-
-The standard binary output format generated by the linker for the C128 target
-is a machine language program with a one line BASIC stub, which calls the
-machine language part via SYS. This means that a program can be loaded as
-BASIC program and started with RUN. It is of course possible to change this
-behaviour by using a modified startup file and linker config.
-
-
-<sect>Memory layout<p>
-
-cc65 generated programs with the default setup run with the I/O area and the
-kernal ROM enabled. Note that this is a non standard memory layout, and that
-there is no "memory configuration index" for this layout. This means that
-special care has to be taken when changing the configuration, or calling any
-code that does this. The memory configuration register at &dollar;FF00 should
-be saved and restored instead of relying on the memory configuration index
-stored in the zero page.
-
-The setup gives a usable memory range of &dollar;1C00 - &dollar;BFFF. Having
-just the kernal ROM mapped in means, that kernal entry points may be called
-directly, but using the BASIC ROM is not possible without additional code.
-
-Special locations:
-
-<descrip>
-  <tag/Text screen/
-  The text screen is located at &dollar;400 (as in the standard setup).
-
-  <tag/Stack/
-  The C runtime stack is located at &dollar;BFFF, and growing downwards.
-
-  <tag/Heap/
-  The C heap is located at the end of the program, and grows towards the C
-  runtime stack.
-
-</descrip><p>
-
-
-
-<sect>Platform-specific header files<p>
-
-Programs containing C128-specific code may use the <tt/c128.h/ or <tt/cbm.h/
-header files. Using the later may be an option when writing code for more than
-one CBM platform, since it includes <tt/c128.h/ and declares several functions
-common to all CBM platforms.
-
-
-<sect1>C128-specific functions<p>
-
-The functions listed below are special for the C128. See the <url
-url="funcref.html" name="function reference"> for declaration and usage.
-
-<itemize>
-<item>videomode
-<item>c64mode
-<item>fast
-<item>slow
-</itemize>
-
-
-<sect1>CBM-specific functions<p>
-
-Some functions are available for all (or at least most) of the Commodore
-machines. See the <url url="funcref.html" name="function reference"> for
-declaration and usage.
-
-<itemize>
-<item>cbm_close
-<item>cbm_closedir
-<item>cbm_k_setlfs
-<item>cbm_k_setnam
-<item>cbm_k_load
-<item>cbm_k_save
-<item>cbm_k_open
-<item>cbm_k_close
-<item>cbm_k_readst
-<item>cbm_k_chkin
-<item>cbm_k_ckout
-<item>cbm_k_basin
-<item>cbm_k_bsout
-<item>cbm_k_clrch
-<item>cbm_load
-<item>cbm_open
-<item>cbm_opendir
-<item>cbm_read
-<item>cbm_readdir
-<item>cbm_save
-<item>cbm_write
-<item>get_tv
-</itemize>
-
-
-<sect1>Hardware access<p>
-
-The following pseudo variables declared in the <tt/c128.h/ header file do
-allow access to hardware located in the address space. Some variables are
-structures, accessing the struct fields will access the chip registers.
-
-<descrip>
-
-  <tag><tt/VIC/</tag>
-  The <tt/VIC/ structure allows access to the VIC II (the graphics
-  controller). See the <tt/_vic2.h/ header file located in the include
-  directory for the declaration of the structure.
-
-  <tag><tt/SID/</tag>
-  The <tt/SID/ structure allows access to the SID (the sound interface
-  device). See the <tt/_sid.h/ header file located in the include directory
-  for the declaration of the structure.
-
-  <tag><tt/VDC/</tag>
-  The <tt/VDC/ structure allows access to the VDC (the video display
-  controller). See the <tt/_vdc.h/ header file located in the include
-  directory for the declaration of the structure.
-
-  <tag><tt/CIA1, CIA2/</tag>
-  Access to the two CIA (complex interface adapter) chips is available via
-  the <tt/CIA1/ and <tt/CIA2/ variables. The structure behind these variables
-  is explained in <tt/_6526.h/.
-
-  <tag><tt/COLOR_RAM/</tag>
-  A character array that mirrors the color RAM of the C128 at &dollar;D800.
-
-</descrip><p>
-
-
-
-<sect>Loadable drivers<p>
-
-The names in the parentheses denote the symbols to be used for static linking of the drivers.
-
-
-<sect1>Graphics drivers<p>
-
-The default drivers, <tt/tgi_stddrv (tgi_static_stddrv)/, point to <tt/c128-vdc.tgi (c128_vdc_tgi)/.
-
-Note: The graphics drivers for the VDC are incompatible with the extended
-memory drivers using the VDC memory!
-
-<descrip>
-  <tag><tt/c128-vdc.tgi (c128_vdc_tgi)/</tag>
-  This driver was written by Maciej Witkowiak. It uses the 80-column display,
-  and features a resolution of 640*200 with two colors and an adjustable
-  palette (that means that the two colors can be chosen out of the 16 VDC
-  colors).
-
-  <tag><tt/c128-vdc2.tgi (c128_vdc2_tgi)/</tag>
-  This driver was written by Maciej Witkowiak. This driver uses the 80-column
-  display, and features a resolution of 640*480 with two colors and an
-  adjustable palette (that means that the two colors can be chosen out of the
-  16 VDC colors). The driver requires 64KB VDC RAM.
-</descrip><p>
-
-Note: The colors are translated from definitions in headers to correct VDC values;
-so, please use definitions or VIC color numbers only. Colors <tt/GRAY3/ and <tt/BROWN/ are
-missing on VDC, and are translated to the two colors missing from the VIC palette.
-
-<sect1>Extended memory drivers<p>
-
-<descrip>
-
-  <tag><tt/c128-georam.emd (c128_georam_emd)/</tag>
-  A driver for the GeoRam cartridge. The driver will always assume 2048 pages
-  of 256 bytes each. There are no checks, so if your program knows better,
-  just go ahead.
-
-  <tag><tt/c128-ram.emd (c128_ram_emd)/</tag>
-  An extended memory driver for the RAM in page 1. The common memory area is
-  excluded, so this driver supports 251 pages of 256 bytes each.
-
-  <tag><tt/c128-ram2.emd (c128_ram2_emd)/</tag>
-  An extended memory driver for the RAM in pages 1-3. The common memory area
-  is excluded, so this driver supports up to 731 pages of 256 bytes each. The
-  driver can be used as a full replacement for <tt/c128-ram.emd/, because RAM
-  in pages 2+3 is autodetected, but it's larger and there are not many
-  machines with RAM in banks 2+3, so it has been made a separate driver. The
-  additional code was contributed by Marco van den Heuvel.
-
-  <tag><tt/c128-ramcart.emd (c128_ramcart_emd)/</tag>
-  A driver for the RamCart 64/128 written and contributed by Maciej Witkowiak.
-  Will test the hardware for the available RAM.
-
-  <tag><tt/c128-reu.emd (c128_reu_emd)/</tag>
-  A driver for the CBM REUs. The driver will determine from the connected REU
-  if it supports 128KB of RAM or more. In the latter case, 256KB are assumed,
-  but since there are no range checks, the application can use more memory if
-  it has better knowledge about the hardware than the driver.
-
-  <tag><tt/c128-vdc.emd (c128_vdc_emd)/</tag>
-  A driver for the VDC memory of the C128, written and contributed by Maciej
-  Witkowiak. Autodetects the amount of memory available (16 or 64K), and offers
-  64 or 256 pages of 256 bytes each. Note: This driver is incompatible with
-  any of the graphics drivers using the VDC!
-
-</descrip><p>
-
-
-<sect1>Joystick drivers<p>
-
-The default drivers, <tt/joy_stddrv (joy_static_stddrv)/, point to <tt/c128-stdjoy.joy (c128_stdjoy_joy)/.
-
-<descrip>
-
-  <tag><tt/c128-ptvjoy.joy (c128_ptvjoy_joy)/</tag>
-  Driver for the Protovision 4-player adapter originally written by Groepaz
-  for the C64, and converted for the C128 by Uz. See <url
-  url="http://www.protovision-online.de/hardw/hardwstart.htm"> for prices and
-  building instructions. Up to four joysticks are supported.
-
-  <tag><tt/c128-stdjoy.joy (c128_stdjoy_joy)/</tag>
-  Supports up to two joysticks connected to the standard joysticks ports of
-  the C128.
-
-</descrip><p>
-
-
-
-<sect1>Mouse drivers<p>
-
-The default drivers, <tt/mouse_stddrv (mouse_static_stddrv)/, point to <tt/c128-1351.mou (c128_1351_mou)/.
-
-<descrip>
-
-  <tag><tt/c128-1351.mou (c128_1351_mou)/</tag>
-  Supports a standard mouse connected to port #0 of the C128.
-
-  <tag><tt/c128-inkwell.mou (c128_inkwell_mou)/</tag>
-  Supports the Inkwell Systems lightpens, connected to port #0 of the
-  C128.  It can read both the one-button 170-C and the two-button 184-C pens.
-  (It can read other lightpens and light-guns that send their button signal to
-  the joystick left-button pin or the paddle Y [up/down] pin.)  It works on
-  only the 40-column screen.
-
-  <tag><tt/c128-joy.mou (c128_joy_mou)/</tag>
-  Supports a mouse emulated by a standard joystick, e.g. 1350 mouse, in port
-  #1 of the C128.
-
-  <tag><tt/c128-pot.mou (c128_pot_mou)/</tag>
-  Supports a potentiometer device, e.g. Koala Pad, connected to port #1 of
-  the C128.
-
-</descrip><p>
-
-
-<sect1>RS232 device drivers<p>
-
-<descrip>
-
-  <tag><tt/c128-swlink.ser (c128_swlink_ser)/</tag>
-  Driver for the SwiftLink cartridge. Supports up to 38400 BPS, hardware flow
-  control (RTS/CTS), and interrupt-driven receives. Note that, because of the
-  peculiarities of the 6551 chip, together with the use of the NMI, transmits
-  are not interrupt driven; and, the transceiver blocks if the receiver asserts
-  flow control because of a full buffer.
-
-  The driver uses the RS232 variables and buffers of the kernal (buffers at
-  &dollar;C00 and &dollar;D00).
-
-</descrip><p>
-
-
-
-<sect>Limitations<p>
-
-
-
-<sect>Other hints<p>
-
-
-<sect1>Passing arguments to the program<p>
-
-Command-line arguments can be passed to <tt/main()/. Since this is not
-supported directly by BASIC, the following syntax was chosen:
-
-<tscreen><verb>
-    RUN:REM ARG1 " ARG2 IS QUOTED" ARG3 "" ARG5
-</verb></tscreen>
-
-<enum>
-<item>Arguments are separated by spaces.
-<item>Arguments may be quoted.
-<item>Leading and trailing spaces around an argument are ignored. Spaces within
-      a quoted argument are allowed.
-<item>The first argument passed to <tt/main()/ is the program name.
-<item>A maximum number of 10 arguments (including the program name) are
-      supported.
-</enum>
-
-
-<sect1>Program return code<p>
-
-The program return code (low byte) is passed back to BASIC by use of the
-<tt/ST/ variable.
-
-
-<sect1>Interrupts<p>
-
-The runtime for the C128 uses routines marked as <tt/.INTERRUPTOR/ for
-interrupt handlers. Such routines must be written as simple machine language
-subroutines and will be called automatically by the interrupt handler code
-when they are linked into a program. See the discussion of the <tt/.CONDES/
-feature in the <url url="ca65.html" name="assembler manual">.
-
-
-
-<sect>License<p>
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
diff --git a/doc/c16.sgml b/doc/c16.sgml
deleted file mode 100644 (file)
index 1614516..0000000
+++ /dev/null
@@ -1,264 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>Commodore 16/116 specific information for cc65
-<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
-<date>2014-04-10
-
-<abstract>
-An overview over the C16 runtime system as it is implemented for the cc65 C
-compiler.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This file contains an overview of the C16 runtime system as it comes with the
-cc65 C compiler. It describes the memory layout, C16/116 specific header
-files, available drivers, and any pitfalls specific to that platform.
-
-Please note that C16 specific functions are just mentioned here, they are
-described in detail in the separate <url url="funcref.html" name="function
-reference">. Even functions marked as "platform dependent" may be available on
-more than one platform. Please see the function reference for more
-information.
-
-Since the C16/C116 and the Commodore Plus/4 are almost identical (the former
-don't have the 6551 ACIA and only 16KB of memory), the <url
-url="plus4.html" name="Plus/4 documentation"> is also worth a look. The
-difference between both cc65 targets is that the Plus/4 runtime uses banking
-to support full 64K RAM, while the C16 does not use banking and supports up to
-32K RAM. Because banking is not needed, most C16 programs will be somewhat
-smaller than the same program compiled for the Plus/4. However, programs C16
-will always run on the Plus/4, while the reverse is not necessarily true.
-
-
-<sect>Binary format<p>
-
-The standard binary output format generated by the linker for the C16/116
-target is a machine language program with a one line BASIC stub which, calls
-the machine language part via SYS. This means that a program can be loaded as
-BASIC program and started with RUN. It is of course possible to change this
-behaviour by using a modified startup file and linker config.
-
-
-<sect>Memory layout<p>
-
-cc65 generated programs with the default setup run with the kernal and basic
-banked in. This gives a usable memory range of &dollar;1000 - &dollar;4000
-(or &dollar;8000 if the machine is equipped with 32K RAM or more). Having the
-kernal and basic ROMs banked in means, that ROM entry points may be called
-directly from user code.
-
-Special locations:
-
-<descrip>
-  <tag/Text screen/
-  The text screen is located at &dollar;C00 (as in the standard setup).
-
-  <tag/Color RAM/
-  The color RAM is located at &dollar;800 (standard location).
-
-  <tag/Stack/
-  The C runtime stack is located at &dollar;3FFF (&dollar;7FFF in case of a
-  machine with 32K of memory or more) and growing downwards.
-
-  <tag/Heap/
-  The C heap is located at the end of the program and grows towards the C
-  runtime stack.
-
-</descrip><p>
-
-
-
-<sect>Platform specific header files<p>
-
-Programs containing C16 specific code may use the <tt/c16.h/ or <tt/cbm.h/
-header files. Using the later may be an option when writing code for more than
-one CBM platform, since it includes <tt/c16.h/ and declares several functions
-common to all CBM platforms.
-
-Please note that most of the header file declarations from the <tt/c16.h/
-header file are shared between the C16 and Plus/4 configurations. For this
-reason, most of it is located in a common header file named <tt/cbm264.h/.
-
-
-
-<sect1>C16/C116 specific functions<p>
-
-There are currently no special C16/C116 functions.
-
-
-<sect1>CBM specific functions<p>
-
-Some functions are available for all (or at least most) of the Commodore
-machines. See the <url url="funcref.html" name="function reference"> for
-declaration and usage.
-
-<itemize>
-<item>cbm_close
-<item>cbm_closedir
-<item>cbm_k_setlfs
-<item>cbm_k_setnam
-<item>cbm_k_load
-<item>cbm_k_save
-<item>cbm_k_open
-<item>cbm_k_close
-<item>cbm_k_readst
-<item>cbm_k_chkin
-<item>cbm_k_ckout
-<item>cbm_k_basin
-<item>cbm_k_bsout
-<item>cbm_k_clrch
-<item>cbm_load
-<item>cbm_open
-<item>cbm_opendir
-<item>cbm_read
-<item>cbm_readdir
-<item>cbm_save
-<item>cbm_write
-<item>get_tv
-</itemize>
-
-
-<sect1>Hardware access<p>
-
-The following pseudo variables declared in the <tt/c16.h/ header file do
-allow access to hardware located in the address space. Some variables are
-structures, accessing the struct fields will access the chip registers.
-
-<descrip>
-
-  <tag><tt/TED/</tag>
-  The <tt/TED/ structure allows access to the TED chip. See the
-  <tt/_ted.h/ header file located in the include directory for the
-  declaration of the structure.
-
-  <tag><tt/COLOR_RAM/</tag>
-  A character array that mirrors the color RAM of the C16 at &dollar;0800.
-
-</descrip><p>
-
-
-
-<sect>Loadable drivers<p>
-
-The names in the parentheses denote the symbols to be used for static linking of the drivers.
-
-
-<sect1>Graphics drivers<p>
-
-No graphics drivers are currently available for the C16/C116.
-
-
-<sect1>Extended memory drivers<p>
-
-<descrip>
-
-  <tag><tt/c16-ram.emd (c16_ram_emd)/</tag>
-  A driver for the hidden RAM below the BASIC and KERNAL ROMs. Supports 125
-  pages with 256 bytes each if the machine is equipped with 64K of memory
-  (a Plus/4 or a memory extended C16/116).
-
-</descrip><p>
-
-
-
-<sect1>Joystick drivers<p>
-
-<descrip>
-
-  <tag><tt/c16-stdjoy.joy (c16_stdjoy_joy)/</tag>
-  Supports up to two joysticks connected to the standard joysticks port of
-  the Commodore 16/116.
-
-</descrip><p>
-
-
-
-<sect1>Mouse drivers<p>
-
-No mouse drivers are currently available for the C16/C116.
-
-
-<sect1>RS232 device drivers<p>
-
-The Commodore 16 does not have a builtin ACIA and no RS232 extensions are
-known. For this reason, there are no RS232 drivers available. Please note that
-the standard Plus/4 driver will <em>not</em> run together with the C16
-library, because the latter does not support interrupts needed by the driver.
-
-
-<sect>Limitations<p>
-
-
-
-<sect>Other hints<p>
-
-<sect1>Passing arguments to the program<p>
-
-Command line arguments can be passed to <tt/main()/. Since this is not
-supported by BASIC, the following syntax was chosen:
-
-<tscreen><verb>
-    RUN:REM ARG1 " ARG2 IS QUOTED" ARG3 "" ARG5
-</verb></tscreen>
-
-<enum>
-<item>Arguments are separated by spaces.
-<item>Arguments may be quoted.
-<item>Leading and trailing spaces around an argument are ignored. Spaces within
-      a quoted argument are allowed.
-<item>The first argument passed to <tt/main/ is the program name.
-<item>A maximum number of 10 arguments (including the program name) are
-      supported.
-</enum>
-
-
-<sect1>Program return code<p>
-
-The program return code (low byte) is passed back to BASIC by use of the
-<tt/ST/ variable.
-
-
-<sect1>Interrupts<p>
-
-The runtime for the C16 uses routines marked as <tt/.INTERRUPTOR/ for
-interrupt handlers. Such routines must be written as simple machine language
-subroutines and will be called automatically by the interrupt handler code
-when they are linked into a program. See the discussion of the <tt/.CONDES/
-feature in the <url url="ca65.html" name="assembler manual">.
-
-
-
-<sect>License<p>
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
-
-
-
-
diff --git a/doc/c64.sgml b/doc/c64.sgml
deleted file mode 100644 (file)
index ca99e00..0000000
+++ /dev/null
@@ -1,406 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>Commodore 64-specific information for cc65
-<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
-<date>2014-04-14
-
-<abstract>
-An overview over the C64 runtime system as it is implemented for the cc65 C
-compiler.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This file contains an overview of the C64 runtime system as it comes with the
-cc65 C compiler. It describes the memory layout, C64-specific header files,
-available drivers, and any pitfalls specific to that platform.
-
-Please note that C64-specific functions are just mentioned here, they are
-described in detail in the separate <url url="funcref.html" name="function
-reference">. Even functions marked as "platform dependent" may be available on
-more than one platform. Please see the function reference for more
-information.
-
-
-<sect>Binary format<p>
-
-The standard binary output format generated by the linker for the C64 target
-is a machine language program with a one line BASIC stub, which calls the
-machine language part via SYS. This means that a program can be loaded as
-BASIC program and started with RUN. It is of course possible to change this
-behaviour by using a modified startup file and linker config.
-
-
-<sect>Memory layout<p>
-
-cc65 generated programs with the default setup run with the I/O area and the
-kernal ROM enabled (memory under the kernal may be used for graphics or as
-extended memory - see the sections about graphics and extended memory
-drivers). The BASIC ROM is disabled, which gives a usable memory range of
-&dollar;0800 - &dollar;CFFF. This means that kernal entry points may be called
-directly, but using the BASIC ROM is not possible without additional code.
-
-Special locations:
-
-<descrip>
-  <tag/Text screen/
-  The text screen is located at &dollar;400 (as in the standard setup).
-
-  <tag/Stack/
-  The C runtime stack is located at &dollar;CFFF and growing downwards.
-
-  <tag/Heap/
-  The C heap is located at the end of the program and grows towards the C
-  runtime stack.
-
-</descrip><p>
-
-
-<sect>Linker configurations<p>
-
-The ld65 linker comes with a default config file for the Commodore&nbsp;64,
-which is used via <tt/-t c64/. The
-c64 package comes with additional secondary linker config files, which are
-used via <tt/-t c64 -C &lt;configfile&gt;/.
-
-
-<sect1>default config file (<tt/c64.cfg/)<p>
-
-The default configuration is tailored to C programs. It supplies the load
-address and a small BASIC stub that starts the compiled program using a SYS
-command.
-
-
-<sect1><tt/c64-asm.cfg/<p>
-
-This configuration is made for assembler programmers who don't need a special
-setup. The default start address is &dollar;801. It can be changed with the
-linker command line option <tt/--start-addr/. All standard segments with the
-exception of <tt/zeropage/ are written to the output file and a two byte load
-address is prepended.
-
-To use this config file, assemble with <tt/-t c64/ and link with <tt/-C
-c64-asm.cfg/. The former will make sure that correct character translation is
-in effect, while the latter supplies the actual config. When using <tt/cl65/,
-use both command line options.
-
-Sample command line for <tt/cl65/:
-
-<tscreen><verb>
-cl65 -o file.prg -t c64 -C c64-asm.cfg source.s
-</verb></tscreen>
-
-To generate code that loads to &dollar;C000:
-
-<tscreen><verb>
-cl65 -o file.prg --start-addr $C000 -t c64 -C c64-asm.cfg source.s
-</verb></tscreen>
-
-It is also possible to add a small BASIC header to the program, that uses SYS
-to jump to the program entry point (which is the start of the code segment).
-The advantage is that the program can be started using RUN.
-
-To generate a program with a BASIC SYS header, use
-
-<tscreen><verb>
-cl65 -o file.prg -u __EXEHDR__ -t c64 -C c64-asm.cfg source.s
-</verb></tscreen>
-
-Please note that in this case a changed start address doesn't make sense,
-since the program must be loaded to the BASIC start address.
-
-
-<sect>Platform-specific header files<p>
-
-Programs containing C64-specific code may use the <tt/c64.h/ or <tt/cbm.h/
-header files. Using the later may be an option when writing code for more than
-one CBM platform, since it includes <tt/c64.h/ and declares several functions
-common to all CBM platforms.
-
-
-<sect1>C64-specific functions<p>
-
-The functions listed below are special for the C64. See the <url
-url="funcref.html" name="function reference"> for declaration and usage.
-
-<itemize>
-<item>get_ostype
-</itemize>
-
-
-<sect1>CBM-specific functions<p>
-
-Some functions are available for all (or at least most) of the Commodore
-machines. See the <url url="funcref.html" name="function reference"> for
-declaration and usage.
-
-<itemize>
-<item>cbm_close
-<item>cbm_closedir
-<item>cbm_k_setlfs
-<item>cbm_k_setnam
-<item>cbm_k_load
-<item>cbm_k_save
-<item>cbm_k_open
-<item>cbm_k_close
-<item>cbm_k_readst
-<item>cbm_k_chkin
-<item>cbm_k_ckout
-<item>cbm_k_basin
-<item>cbm_k_bsout
-<item>cbm_k_clrch
-<item>cbm_load
-<item>cbm_open
-<item>cbm_opendir
-<item>cbm_read
-<item>cbm_readdir
-<item>cbm_save
-<item>cbm_write
-<item>get_tv
-</itemize>
-
-
-<sect1>Hardware access<p>
-
-The following pseudo variables declared in the <tt/c64.h/ header file do allow
-access to hardware located in the address space. Some variables are
-structures, accessing the struct fields will access the chip registers.
-
-<descrip>
-
-  <tag><tt/VIC/</tag>
-  The <tt/VIC/ structure allows access to the VIC II (the graphics
-  controller). See the <tt/_vic2.h/ header file located in the include
-  directory for the declaration of the structure.
-
-  <tag><tt/SID/</tag>
-  The <tt/SID/ structure allows access to the SID (the sound interface
-  device). See the <tt/_sid.h/ header file located in the include directory
-  for the declaration of the structure.
-
-  <tag><tt/CIA1, CIA2/</tag>
-  Access to the two CIA (complex interface adapter) chips is available via
-  the <tt/CIA1/ and <tt/CIA2/ variables. The structure behind these variables
-  is explained in <tt/_6526.h/.
-
-  <tag><tt/COLOR_RAM/</tag>
-  A character array that mirrors the color RAM of the C64 at &dollar;D800.
-
-</descrip><p>
-
-
-
-<sect>Loadable drivers<p>
-
-The names in the parentheses denote the symbols to be used for static linking of the drivers.
-
-
-<sect1>Graphics drivers<p>
-
-<em>Note:</em> All available graphics drivers for the TGI interface will use
-the space below the I/O area and kernal ROM, so you can have hires graphics in
-the standard setup without any memory loss or need for a changed
-configuration.
-
-<descrip>
-  <tag><tt/c64-hi.tgi (c64_hi_tgi)/</tag>
-  This driver features a resolution of 320*200 with two colors and an
-  adjustable palette (that means that the two colors can be chosen out of a
-  palette of the 16 C64 colors).
-</descrip><p>
-
-
-<sect1>Extended memory drivers<p>
-
-<descrip>
-
-  <tag><tt/c64-c256k.emd (c64_c256k_emd)/</tag>
-  A driver for the C64 256K memory expansion. This driver offers 768 pages of
-  256 bytes each. Written and contributed by Marco van den Heuvel.
-
-  <tag><tt/c64-dqbb.emd (c64_dqbb_emd)/</tag>
-  A driver for the Double Quick Brown Box cartridge. This driver offers
-  64 pages of 256 bytes each. Written and contributed by Marco van den Heuvel.
-
-  <tag><tt/c64-georam.emd (c64_georam_emd)/</tag>
-  A driver for the Berkeley Softworks GeoRam cartridge. The driver will
-  determine the available RAM from the connected cartridge. It supports 64KB
-  up to 2048KB of RAM.
-
-  <tag><tt/c64-isepic.emd (c64_isepic_emd)/</tag>
-  A driver for the ISEPIC cartridge. This driver offers just 8 pages of 256
-  bytes each. Written and contributed by Marco van den Heuvel.
-
-  <tag><tt/c64-ram.emd (c64_ram_emd)/</tag>
-  A driver for the hidden RAM below the I/O area and kernal ROM. Supports 48
-  256 byte pages. Please note that this driver is incompatible with any of the
-  graphics drivers!
-
-  <tag><tt/c64-ramcart.emd (c64_ramcart_emd)/</tag>
-  A driver for the RamCart 64/128 written and contributed by Maciej Witkowiak.
-  Will test the hardware for the available RAM.
-
-  <tag><tt/c64-reu.emd (c64_reu_emd)/</tag>
-  A driver for the CBM REUs. The driver will determine from the connected REU
-  if it supports 128KB of RAM or more. In the latter case, 256KB are assumed,
-  but since there are no range checks, the application can use more memory if
-  it has better knowledge about the hardware than the driver.
-
-  <tag><tt/c64-vdc.emd (c64_vdc_emd)/</tag>
-  A driver for the VDC memory of the C128. Written and contributed by Maciej
-  Witkowiak. Can be used if the program is running in C64 mode of the C128.
-  Autodetects the amount of memory available (16 or 64K) and offers 64 or 256
-  pages of 256 bytes each.
-
-  <tag><tt/dtv-himem.emd (dtv_himem_emd)/</tag>
-  A driver for the C64 D2TV (the second or PAL version). This driver offers
-  indeed 7680 pages of 256 bytes each.
-
-</descrip><p>
-
-
-<sect1>Joystick drivers<p>
-
-The default drivers, <tt/joy_stddrv (joy_static_stddrv)/, point to <tt/c64-stdjoy.joy (c64_stdjoy_joy)/.
-
-<descrip>
-
-  <tag><tt/c64-hitjoy.joy (c64_hitjoy_joy)/</tag>
-  Driver for the Digital Excess &amp; Hitmen adapter contributed by Groepaz.
-  See <url url="http://www.digitalexcess.de/downloads/productions.php"> on
-  instructions how to build one. Up to four joysticks are supported.
-
-  <tag><tt/c64-ptvjoy.joy (c64_ptvjoy_joy)/</tag>
-  Driver for the Protovision 4-player adapter contributed by Groepaz. See
-  <url url="http://www.protovision-online.de/hardw/hardwstart.htm"> for prices and
-  building instructions. Up to four joysticks are supported.
-
-  <tag><tt/c64-stdjoy.joy (c64_stdjoy_joy)/</tag>
-  Supports up to two standard joysticks connected to the joysticks port of
-  the C64.
-
-  <tag><tt/c64-numpad.joy (c64_numpad_joy)/</tag>
-  Supports one joystick emulated by the numberpad of the C128 in C64 mode,
-  the firebutton is labeled &dquot;5&dquot; and ENTER.
-
-</descrip><p>
-
-
-<sect1>Mouse drivers<p>
-
-The default drivers, <tt/mouse_stddrv (mouse_static_stddrv)/, point to <tt/c64-1351.mou (c64_1351_mou)/.
-
-<descrip>
-
-  <tag><tt/c64-1351.mou (c64_1351_mou)/</tag>
-  Supports a standard mouse connected to port #0 of the C64.
-
-  <tag><tt/c64-inkwell.mou (c64_inkwell_mou)/</tag>
-  Supports the Inkwell Systems lightpens, connected to port #0 of the C64.
-  It can read both the one-button 170-C and the two-button 184-C pens.  (It can
-  read other lightpens and light-guns that send their button signal to the
-  joystick left-button pin or the paddle Y [up/down] pin.)
-
-  <tag><tt/c64-joy.mou (c64_joy_mou)/</tag>
-  Supports a mouse emulated by a standard joystick, e.g. 1350 mouse, in port
-  #1 of the C64.
-
-  <tag><tt/c64-pot.mou (c64_pot_mou)/</tag>
-  Supports a potentiometer device, e.g. Koala Pad, connected to port #1 of
-  the C64.
-
-</descrip><p>
-
-
-<sect1>RS232 device drivers<p>
-
-<descrip>
-
-  <tag><tt/c64-swlink.ser (c64_swlink_ser)/</tag>
-  Driver for the SwiftLink cartridge. Supports up to 38400 BPS, hardware flow
-  control (RTS/CTS), and interrupt-driven receives. Note that, because of the
-  peculiarities of the 6551 chip, together with the use of the NMI, transmits
-  are not interrupt driven; and, the transceiver blocks if the receiver asserts
-  flow control because of a full buffer.
-
-</descrip><p>
-
-
-
-<sect>Limitations<p>
-
-
-
-<sect>Other hints<p>
-
-
-<sect1>Escape code<p>
-
-For an Esc, press CTRL and the <tt/[/ key.
-
-
-<sect1>Passing arguments to the program<p>
-
-Command-line arguments can be passed to <tt/main()/. Since this is not
-supported directly by BASIC, the following syntax was chosen:
-
-<tscreen><verb>
-    RUN:REM ARG1 " ARG2 IS QUOTED" ARG3 "" ARG5
-</verb></tscreen>
-
-<enum>
-<item>Arguments are separated by spaces.
-<item>Arguments may be quoted.
-<item>Leading and trailing spaces around an argument are ignored. Spaces within
-      a quoted argument are allowed.
-<item>The first argument passed to <tt/main()/ is the program name.
-<item>A maximum number of 10 arguments (including the program name) are
-      supported.
-</enum>
-
-
-<sect1>Program return code<p>
-
-The program return code (low byte) is passed back to BASIC by use of the
-<tt/ST/ variable.
-
-
-<sect1>Interrupts<p>
-
-The runtime for the C64 uses routines marked as <tt/.INTERRUPTOR/ for
-interrupt handlers. Such routines must be written as simple machine language
-subroutines and will be called automatically by the interrupt handler code
-when they are linked into a program. See the discussion of the <tt/.CONDES/
-feature in the <url url="ca65.html" name="assembler manual">.
-
-
-
-<sect>License<p>
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
diff --git a/doc/ca65.sgml b/doc/ca65.sgml
deleted file mode 100644 (file)
index 19c09b8..0000000
+++ /dev/null
@@ -1,4825 +0,0 @@
-<!doctype linuxdoc system>      <!-- -*- text-mode -*- -->
-
-<article>
-<title>ca65 Users Guide
-<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
-<date>2015-08-01
-
-<abstract>
-ca65 is a powerful macro assembler for the 6502, 65C02, and 65816 CPUs. It is
-used as a companion assembler for the cc65 crosscompiler, but it may also be
-used as a standalone product.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-ca65 is a replacement for the ra65 assembler that was part of the cc65 C
-compiler, originally developed by John R. Dunning. I had some problems with
-ra65 and the copyright does not permit some things which I wanted to be
-possible, so I decided to write a completely new assembler/linker/archiver
-suite for the cc65 compiler. ca65 is part of this suite.
-
-Some parts of the assembler (code generation and some routines for symbol
-table handling) are taken from an older crossassembler named a816 written
-by me a long time ago.
-
-
-<sect1>Design criteria<p>
-
-Here's a list of the design criteria, that I considered important for the
-development:
-
-<itemize>
-
-<item> The assembler must support macros. Macros are not essential, but they
-       make some things easier, especially when you use the assembler in the
-       backend of a compiler.
-<item> The assembler must support the newer 65C02 and 65816 CPUs. I have been
-       thinking about a 65816 backend for the C compiler, and even my old
-       a816 assembler had support for these CPUs, so this wasn't really a
-       problem.
-<item> The assembler must produce relocatable code. This is necessary for the
-       compiler support, and it is more convenient.
-<item> Conditional assembly must be supported. This is a must for bigger
-       projects written in assembler (like Elite128).
-<item> The assembler must support segments, and it must support more than
-       three segments (this is the count, most other assemblers support).
-       Having more than one code segments helps developing code for systems
-       with a divided ROM area (like the C64).
-<item> The linker must be able to resolve arbitrary expressions. It should
-       be able to get things like
-<tscreen><verb>
-       .import S1, S2
-       .export Special
-       Special = 2*S1 + S2/7
-</verb></tscreen>
-       right.
-<item> True lexical nesting for symbols. This is very convenient for larger
-       assembly projects.
-<item> "Cheap" local symbols without lexical nesting for those quick, late
-       night hacks.
-<item> I liked the idea of "options" as Anre Fachats .o65 format has it, so I
-       introduced the concept into the object file format use by the new cc65
-       binutils.
-<item> The assembler will be a one pass assembler. There was no real need for
-       this decision, but I've written several multipass assemblers, and it
-       started to get boring. A one pass assembler needs much more elaborated
-       data structures, and because of that it's much more fun:-)
-<item> Non-GPLed code that may be used in any project without restrictions or
-       fear of "GPL infecting" other code.
-</itemize>
-<p>
-
-
-<sect>Usage<p>
-
-
-<sect1>Command line option overview<p>
-
-The assembler accepts the following options:
-
-<tscreen><verb>
----------------------------------------------------------------------------
-Usage: ca65 [options] file
-Short options:
-  -D name[=value]               Define a symbol
-  -I dir                        Set an include directory search path
-  -U                            Mark unresolved symbols as import
-  -V                            Print the assembler version
-  -W n                          Set warning level n
-  -d                            Debug mode
-  -g                            Add debug info to object file
-  -h                            Help (this text)
-  -i                            Ignore case of symbols
-  -l name                       Create a listing file if assembly was ok
-  -mm model                     Set the memory model
-  -o name                       Name the output file
-  -s                            Enable smart mode
-  -t sys                        Set the target system
-  -v                            Increase verbosity
-
-Long options:
-  --auto-import                 Mark unresolved symbols as import
-  --bin-include-dir dir         Set a search path for binary includes
-  --cpu type                    Set cpu type
-  --create-dep name             Create a make dependency file
-  --create-full-dep name        Create a full make dependency file
-  --debug                       Debug mode
-  --debug-info                  Add debug info to object file
-  --feature name                Set an emulation feature
-  --help                        Help (this text)
-  --ignore-case                 Ignore case of symbols
-  --include-dir dir             Set an include directory search path
-  --large-alignment             Don't warn about large alignments
-  --listing name                Create a listing file if assembly was ok
-  --list-bytes n                Maximum number of bytes per listing line
-  --memory-model model          Set the memory model
-  --pagelength n                Set the page length for the listing
-  --relax-checks                Relax some checks (see docs)
-  --smart                       Enable smart mode
-  --target sys                  Set the target system
-  --verbose                     Increase verbosity
-  --version                     Print the assembler version
----------------------------------------------------------------------------
-</verb></tscreen>
-
-
-<sect1>Command line options in detail<p>
-
-Here is a description of all the command line options:
-
-<descrip>
-
-  <label id="option--bin-include-dir">
-  <tag><tt>--bin-include-dir dir</tt></tag>
-
-  Name a directory which is searched for binary include files. The option
-  may be used more than once to specify more than one directory to search. The
-  current directory is always searched first before considering any
-  additional directories. See also the section about <ref id="search-paths"
-  name="search paths">.
-
-
-  <label id="option--cpu">
-  <tag><tt>--cpu type</tt></tag>
-
-  Set the default for the CPU type. The option takes a parameter, which
-  may be one of
-
-               6502, 65SC02, 65C02, 65816, sweet16, HuC6280
-
-
-  <label id="option-create-dep">
-  <tag><tt>--create-dep name</tt></tag>
-
-  Tells the assembler to generate a file containing the dependency list for
-  the assembled module in makefile syntax. The output is written to a file
-  with the given name. The output does not include files passed via debug
-  information to the assembler.
-
-
-  <label id="option-create-full-dep">
-  <tag><tt>--create-full-dep name</tt></tag>
-
-  Tells the assembler to generate a file containing the dependency list for
-  the assembled module in makefile syntax. The output is written to a file
-  with the given name. The output does include files passed via debug
-  information to the assembler.
-
-
-  <tag><tt>-d, --debug</tt></tag>
-
-  Enables debug mode, something that should not be needed for mere
-  mortals:-)
-
-
-  <label id="option--feature">
-  <tag><tt>--feature name</tt></tag>
-
-  Enable an emulation feature. This is identical as using <tt/.FEATURE/
-  in the source with two exceptions: Feature names must be lower case, and
-  each feature must be specified by using an extra <tt/--feature/ option,
-  comma separated lists are not allowed.
-
-  See the discussion of the <tt><ref id=".FEATURE" name=".FEATURE"></tt>
-  command for a list of emulation features.
-
-
-  <label id="option-g">
-  <tag><tt>-g, --debug-info</tt></tag>
-
-  When this option (or the equivalent control command <tt/.DEBUGINFO/) is
-  used, the assembler will add a section to the object file that contains
-  all symbols (including local ones) together with the symbol values and
-  source file positions. The linker will put these additional symbols into
-  the VICE label file, so even local symbols can be seen in the VICE
-  monitor.
-
-
-  <label id="option-h">
-  <tag><tt>-h, --help</tt></tag>
-
-  Print the short option summary shown above.
-
-
-  <label id="option-i">
-  <tag><tt>-i, --ignore-case</tt></tag>
-
-  This option makes the assembler case insensitive on identifiers and labels.
-  This option will override the default, but may itself be overridden by the
-  <tt><ref id=".CASE" name=".CASE"></tt> control command.
-
-
-  <label id="option-l">
-  <tag><tt>-l name, --listing name</tt></tag>
-
-  Generate an assembler listing with the given name. A listing file will
-  never be generated in case of assembly errors.
-
-
-  <label id="option--large-alignment">
-  <tag><tt>--large-alignment</tt></tag>
-
-  Disable warnings about a large combined alignment. See the discussion of the
-  <tt><ref id=".ALIGN" name=".ALIGN"></tt> directive for futher information.
-
-
-  <label id="option--list-bytes">
-  <tag><tt>--list-bytes n</tt></tag>
-
-  Set the maximum number of bytes printed in the listing for one line of
-  input. See the <tt><ref id=".LISTBYTES" name=".LISTBYTES"></tt> directive
-  for more information. The value zero can be used to encode an unlimited
-  number of printed bytes.
-
-
-  <label id="option-mm">
-  <tag><tt>-mm model, --memory-model model</tt></tag>
-
-  Define the default memory model. Possible model specifiers are near, far and
-  huge.
-
-
-  <label id="option-o">
-  <tag><tt>-o name</tt></tag>
-
-  The default output name is the name of the input file with the extension
-  replaced by ".o". If you don't like that, you may give another name with
-  the -o option. The output file will be placed in the same directory as
-  the source file, or, if -o is given, the full path in this name is used.
-
-
-  <label id="option--pagelength">
-  <tag><tt>--pagelength n</tt></tag>
-
-  sets the length of a listing page in lines. See the <tt><ref
-  id=".PAGELENGTH" name=".PAGELENGTH"></tt> directive for more information.
-
-
-  <label id="option--relax-checks">
-  <tag><tt>--relax-checks</tt></tag>
-
-  Relax some checks done by the assembler. This will allow code that is an
-  error in most cases and flagged as such by the assembler, but can be valid
-  in special situations.
-
-  Examples are:
-<itemize>
-<item>Short branches between two different segments.
-<item>Byte sized address loads where the address is not a zeropage address.
-</itemize>
-
-
-  <label id="option-s">
-  <tag><tt>-s, --smart-mode</tt></tag>
-
-  In smart mode (enabled by -s or the <tt><ref id=".SMART" name=".SMART"></tt>
-  pseudo instruction) the assembler will track usage of the <tt/REP/ and
-  <tt/SEP/ instructions in 65816 mode and update the operand sizes
-  accordingly. If the operand of such an instruction cannot be evaluated by
-  the assembler (for example, because the operand is an imported symbol), a
-  warning is issued.
-
-  Beware: Since the assembler cannot trace the execution flow this may
-  lead to false results in some cases. If in doubt, use the .ixx and .axx
-  instructions to tell the assembler about the current settings. Smart
-  mode is off by default.
-
-
-  <label id="option-t">
-  <tag><tt>-t sys, --target sys</tt></tag>
-
-  Set the target system. This will enable translation of character strings and
-  character constants into the character set of the target platform. The
-  default for the target system is "none", which means that no translation
-  will take place. The assembler supports the same target systems as the
-  compiler, see there for a list.
-
-  Depending on the target, the default CPU type is also set. This can be
-  overriden by using the <tt/<ref id="option--cpu" name="--cpu">/ option.
-
-
-  <label id="option-v">
-  <tag><tt>-v, --verbose</tt></tag>
-
-  Increase the assembler verbosity. Usually only needed for debugging
-  purposes. You may use this option more than one time for even more
-  verbose output.
-
-
-  <label id="option-D">
-  <tag><tt>-D</tt></tag>
-
-  This option allows you to define symbols on the command line. Without a
-  value, the symbol is defined with the value zero. When giving a value,
-  you may use the '&dollar;' prefix for hexadecimal symbols. Please note
-  that for some operating systems, '&dollar;' has a special meaning, so
-  you may have to quote the expression.
-
-
-  <label id="option-I">
-  <tag><tt>-I dir, --include-dir dir</tt></tag>
-
-  Name a directory which is searched for include files. The option may be
-  used more than once to specify more than one directory to search. The
-  current directory is always searched first before considering any
-  additional directories. See also the section about <ref id="search-paths"
-  name="search paths">.
-
-
-  <label id="option-U">
-  <tag><tt>-U, --auto-import</tt></tag>
-
-  Mark symbols that are not defined in the sources as imported symbols. This
-  should be used with care since it delays error messages about typos and such
-  until the linker is run. The compiler uses the equivalent of this switch
-  (<tt><ref id=".AUTOIMPORT" name=".AUTOIMPORT"></tt>) to enable auto imported
-  symbols for the runtime library. However, the compiler is supposed to
-  generate code that runs through the assembler without problems, something
-  which is not always true for assembler programmers.
-
-
-  <label id="option-V">
-  <tag><tt>-V, --version</tt></tag>
-
-  Print the version number of the assembler. If you send any suggestions
-  or bugfixes, please include the version number.
-
-
-  <label id="option-W">
-  <tag><tt>-Wn</tt></tag>
-
-  Set the warning level for the assembler. Using -W2 the assembler will
-  even warn about such things like unused imported symbols. The default
-  warning level is 1, and it would probably be silly to set it to
-  something lower.
-
-</descrip>
-<p>
-
-
-
-<sect>Search paths<label id="search-paths"><p>
-
-Normal include files are searched in the following places:
-
-<enum>
-<item>The current file's directory.
-<item>Any directory added with the <tt/<ref id="option-I" name="-I">/ option
-on the command line.
-<item>The value of the environment variable <tt/CA65_INC/ if it is defined.
-<item>A subdirectory named <tt/asminc/ of the directory defined in the
-      environment variable <tt/CC65_HOME/, if it is defined.
-<item>An optionally compiled-in directory.
-</enum>
-
-Binary include files are searched in the following places:
-
-<enum>
-<item>The current file's directory.
-<item>Any directory added with the <tt/<ref id="option--bin-include-dir"
-name="--bin-include-dir">/ option on the command line.
-</enum>
-
-
-
-<sect>Input format<p>
-
-<sect1>Assembler syntax<p>
-
-The assembler accepts the standard 6502/65816 assembler syntax. One line may
-contain a label (which is identified by a colon), and, in addition to the
-label, an assembler mnemonic, a macro, or a control command (see section <ref
-id="control-commands" name="Control Commands"> for supported control
-commands). Alternatively, the line may contain a symbol definition using
-the '=' token. Everything after a semicolon is handled as a comment (that is,
-it is ignored).
-
-Here are some examples for valid input lines:
-
-<tscreen><verb>
-       Label:                          ; A label and a comment
-               lda     #$20            ; A 6502 instruction plus comment
-       L1:     ldx     #$20            ; Same with label
-       L2:     .byte   "Hello world"   ; Label plus control command
-               mymac   $20             ; Macro expansion
-               MySym = 3*L1            ; Symbol definition
-       MaSym   = Label                 ; Another symbol
-</verb></tscreen>
-
-The assembler accepts
-
-<itemize>
-<item>all valid 6502 mnemonics when in 6502 mode (the default or after the
-      <tt><ref id=".P02" name=".P02"></tt> command was given).
-<item>all valid 6502 mnemonics plus a set of illegal instructions when in
-      <ref id="6502X-mode" name="6502X mode">.
-<item>all valid 65SC02 mnemonics when in 65SC02 mode (after the
-      <tt><ref id=".PSC02" name=".PSC02"></tt> command was given).
-<item>all valid 65C02 mnemonics when in 65C02 mode (after the
-      <tt><ref id=".PC02" name=".PC02"></tt> command was given).
-<item>all valid 65618 mnemonics when in 65816 mode (after the
-      <tt><ref id=".P816" name=".P816"></tt> command was given).
-</itemize>
-
-
-<sect1>65816 mode<p>
-
-In 65816 mode, several aliases are accepted, in addition to the official
-mnemonics:
-
-<tscreen><verb>
-CPA is an alias for CMP
-DEA is an alias for DEC A
-INA is an alias for INC A
-SWA is an alias for XBA
-TAD is an alias for TCD
-TAS is an alias for TCS
-TDA is an alias for TDC
-TSA is an alias for TSC
-</verb></tscreen>
-
-
-<sect1>6502X mode<label id="6502X-mode"><p>
-
-6502X mode is an extension to the normal 6502 mode. In this mode, several
-mnemonics for illegal instructions of the NMOS 6502 CPUs are accepted. Since
-these instructions are illegal, there are no official mnemonics for them. The
-unofficial ones are taken from <url
-url="http://www.oxyron.de/html/opcodes02.html">. Please note that only the
-ones marked as "stable" are supported. The following table uses information
-from the mentioned web page, for more information, see there.
-
-<itemize>
-<item><tt>ALR: A:=(A and #{imm})/2;</tt>
-<item><tt>ANC: A:=A and #{imm};</tt> Generates opcode &dollar;0B.
-<item><tt>ARR: A:=(A and #{imm})/2;</tt>
-<item><tt>AXS: X:=A and X-#{imm};</tt>
-<item><tt>DCP: {adr}:={adr}-1; A-{adr};</tt>
-<item><tt>ISC: {adr}:={adr}+1; A:=A-{adr};</tt>
-<item><tt>LAS: A,X,S:={adr} and S;</tt>
-<item><tt>LAX: A,X:={adr};</tt>
-<item><tt>RLA: {adr}:={adr}rol; A:=A and {adr};</tt>
-<item><tt>RRA: {adr}:={adr}ror; A:=A adc {adr};</tt>
-<item><tt>SAX: {adr}:=A and X;</tt>
-<item><tt>SLO: {adr}:={adr}*2; A:=A or {adr};</tt>
-<item><tt>SRE: {adr}:={adr}/2; A:=A xor {adr};</tt>
-</itemize>
-
-
-
-<sect1>sweet16 mode<label id="sweet16-mode"><p>
-
-SWEET 16 is an interpreter for a pseudo 16 bit CPU written by Steve Wozniak
-for the Apple ][ machines. It is available in the Apple ][ ROM. ca65 can
-generate code for this pseudo CPU when switched into sweet16 mode. The
-following is special in sweet16 mode:
-
-<itemize>
-
-<item>The '@' character denotes indirect addressing and is no longer available
-for cheap local labels. If you need cheap local labels, you will have to
-switch to another lead character using the <tt/<ref id=".LOCALCHAR"
-name=".LOCALCHAR">/ command.
-
-<item>Registers are specified using <tt/R0/ .. <tt/R15/. In sweet16 mode,
-these identifiers are reserved words.
-
-</itemize>
-
-Please note that the assembler does neither supply the interpreter needed for
-SWEET 16 code, nor the zero page locations needed for the SWEET 16 registers,
-nor does it call the interpreter. All this must be done by your program. Apple
-][ programmers do probably know how to use sweet16 mode.
-
-For more information about SWEET 16, see
-<url url="http://www.6502.org/source/interpreters/sweet16.htm">.
-
-
-<sect1>Number format<p>
-
-For literal values, the assembler accepts the widely used number formats: A
-preceding '&dollar;' or a trailing 'h' denotes a hex value, a preceding '%'
-denotes a binary value, and a bare number is interpreted as a decimal. There
-are currently no octal values and no floats.
-
-
-<sect1>Conditional assembly<p>
-
-Please note that when using the conditional directives (<tt/.IF/ and friends),
-the input must consist of valid assembler tokens, even in <tt/.IF/ branches
-that are not assembled. The reason for this behaviour is that the assembler
-must still be able to detect the ending tokens (like <tt/.ENDIF/), so
-conversion of the input stream into tokens still takes place. As a consequence
-conditional assembly directives may <bf/not/ be used to prevent normal text
-(used as a comment or similar) from being assembled. <p>
-
-
-<sect>Expressions<p>
-
-
-<sect1>Expression evaluation<p>
-
-All expressions are evaluated with (at least) 32 bit precision. An
-expression may contain constant values and any combination of internal and
-external symbols. Expressions that cannot be evaluated at assembly time
-are stored inside the object file for evaluation by the linker.
-Expressions referencing imported symbols must always be evaluated by the
-linker.
-
-
-<sect1>Size of an expression result<p>
-
-Sometimes, the assembler must know about the size of the value that is the
-result of an expression. This is usually the case, if a decision has to be
-made, to generate a zero page or an absolute memory references. In this
-case, the assembler has to make some assumptions about the result of an
-expression:
-
-<itemize>
-<item>         If the result of an expression is constant, the actual value is
-               checked to see if it's a byte sized expression or not.
-<item>         If the expression is explicitly casted to a byte sized expression by
-               one of the '&gt;', '&lt;' or '^' operators, it is a byte expression.
-<item>         If this is not the case, and the expression contains a symbol,
-               explicitly declared as zero page symbol (by one of the .importzp or
-               .exportzp instructions), then the whole expression is assumed to be
-               byte sized.
-<item>         If the expression contains symbols that are not defined, and these
-               symbols are local symbols, the enclosing scopes are searched for a
-               symbol with the same name. If one exists and this symbol is defined,
-               its attributes are used to determine the result size.
-<item>         In all other cases the expression is assumed to be word sized.
-</itemize>
-
-Note: If the assembler is not able to evaluate the expression at assembly
-time, the linker will evaluate it and check for range errors as soon as
-the result is known.
-
-
-<sect1>Boolean expressions<p>
-
-In the context of a boolean expression, any non zero value is evaluated as
-true, any other value to false. The result of a boolean expression is 1 if
-it's true, and zero if it's false. There are boolean operators with extreme
-low precedence with version 2.x (where x &gt; 0). The <tt/.AND/ and <tt/.OR/
-operators are shortcut operators. That is, if the result of the expression is
-already known, after evaluating the left hand side, the right hand side is
-not evaluated.
-
-
-<sect1>Constant expressions<p>
-
-Sometimes an expression must evaluate to a constant without looking at any
-further input. One such example is the <tt/<ref id=".IF" name=".IF">/ command
-that decides if parts of the code are assembled or not. An expression used in
-the <tt/.IF/ command cannot reference a symbol defined later, because the
-decision about the <tt/.IF/ must be made at the point when it is read. If the
-expression used in such a context contains only constant numerical values,
-there is no problem. When unresolvable symbols are involved it may get harder
-for the assembler to determine if the expression is actually constant, and it
-is even possible to create expressions that aren't recognized as constant.
-Simplifying the expressions will often help.
-
-In cases where the result of the expression is not needed immediately, the
-assembler will delay evaluation until all input is read, at which point all
-symbols are known. So using arbitrary complex constant expressions is no
-problem in most cases.
-
-
-
-<sect1>Available operators<label id="operators"><p>
-
-<table>
-<tabular ca="clc">
-<bf/Operator/| <bf/Description/| <bf/Precedence/@<hline>
-| Built-in string functions| 0@
-||~@
-| Built-in pseudo-variables| 1@
-| Built-in pseudo-functions| 1@
-+| Unary positive| 1@
--| Unary negative| 1@
-&tilde;<newline>
-.BITNOT| Unary bitwise not| 1@
-&lt;<newline>
-.LOBYTE| Unary low-byte operator| 1@
-&gt;<newline>
-.HIBYTE| Unary high-byte operator| 1@
-^<newline>
-.BANKBYTE| Unary bank-byte operator| 1@
-||~@
-*| Multiplication| 2@
-/| Division| 2@
-.MOD| Modulo operator| 2@
-&amp;<newline>
-.BITAND| Bitwise and| 2@
-^<newline>
-.BITXOR| Binary bitwise xor| 2@
-&lt;&lt;<newline>
-.SHL| Shift-left operator| 2@
-&gt;&gt;<newline>
-.SHR| Shift-right operator| 2@
-||~@
-+| Binary addition| 3@
--| Binary subtraction| 3@
-&verbar;<newline>
-.BITOR| Bitwise or| 3@
-||~@
-= | Compare operator (equal)| 4@
-&lt;&gt;| Compare operator (not equal)| 4@
-&lt;| Compare operator (less)| 4@
-&gt;| Compare operator (greater)| 4@
-&lt;=| Compare operator (less or equal)| 4@
-&gt;=| Compare operator (greater or equal)| 4@
-||~@
-&amp;&amp;<newline>
-.AND| Boolean and| 5@
-.XOR| Boolean xor| 5@
-||~@
-&verbar;&verbar;<newline>
-.OR| Boolean or| 6@
-||~@
-!<newline>
-.NOT| Boolean not| 7@<hline>
-</tabular>
-<caption>Available operators, sorted by precedence
-</table>
-
-To force a specific order of evaluation, parentheses may be used, as usual.
-
-
-
-<sect>Symbols and labels<p>
-
-A symbol or label is an identifier that starts with a letter and is followed
-by letters and digits. Depending on some features enabled (see
-<tt><ref id="at_in_identifiers" name="at_in_identifiers"></tt>,
-<tt><ref id="dollar_in_identifiers" name="dollar_in_identifiers"></tt> and
-<tt><ref id="leading_dot_in_identifiers" name="leading_dot_in_identifiers"></tt>)
-other characters may be present. Use of identifiers consisting of a single
-character will not work in all cases, because some of these identifiers are
-reserved keywords (for example "A" is not a valid identifier for a label,
-because it is the keyword for the accumulator).
-
-The assembler allows you to use symbols instead of naked values to make
-the source more readable. There are a lot of different ways to define and
-use symbols and labels, giving a lot of flexibility.
-
-<sect1>Numeric constants<p>
-
-Numeric constants are defined using the equal sign or the label assignment
-operator. After doing
-
-<tscreen><verb>
-        two = 2
-</verb></tscreen>
-
-may use the symbol "two" in every place where a number is expected, and it is
-evaluated to the value 2 in this context. The label assignment operator is
-almost identical, but causes the symbol to be marked as a label, so it may be
-handled differently in a debugger:
-
-<tscreen><verb>
-        io := $d000
-</verb></tscreen>
-
-The right side can of course be an expression:
-
-<tscreen><verb>
-        four = two * two
-</verb></tscreen>
-
-
-<label id="variables">
-<sect1>Numeric variables<p>
-
-Within macros and other control structures (<tt><ref id=".REPEAT"
-name=".REPEAT"></tt>, ...) it is sometimes useful to have some sort of
-variable. This can be achieved by the <tt>.SET</tt> operator. It creates a
-symbol that may get assigned a different value later:
-
-<tscreen><verb>
-        four .set 4
-        lda     #four           ; Loads 4 into A
-        four .set 3
-        lda     #four           ; Loads 3 into A
-</verb></tscreen>
-
-Since the value of the symbol can change later, it must be possible to
-evaluate it when used (no delayed evaluation as with normal symbols). So the
-expression used as the value must be constant.
-
-Following is an example for a macro that generates a different label each time
-it is used. It uses the <tt><ref id=".SPRINTF" name=".SPRINTF"></tt> function
-and a numeric variable named <tt>lcount</tt>.
-
-<tscreen><verb>
-        .lcount .set 0          ; Initialize the counter
-
-        .macro  genlab
-                .ident (.sprintf ("L%04X", lcount)):
-                lcount .set lcount + 1
-        .endmacro
-</verb></tscreen>
-
-
-<sect1>Standard labels<p>
-
-A label is defined by writing the name of the label at the start of the line
-(before any instruction mnemonic, macro or pseudo directive), followed by a
-colon. This will declare a symbol with the given name and the value of the
-current program counter.
-
-
-<sect1>Local labels and symbols<p>
-
-Using the <tt><ref id=".PROC" name=".PROC"></tt> directive, it is possible to
-create regions of code where the names of labels and symbols are local to this
-region. They are not known outside of this region and cannot be accessed from
-there. Such regions may be nested like PROCEDUREs in Pascal.
-
-See the description of the <tt><ref id=".PROC" name=".PROC"></tt>
-directive for more information.
-
-
-<sect1>Cheap local labels<p>
-
-Cheap local labels are defined like standard labels, but the name of the
-label must begin with a special symbol (usually '@', but this can be
-changed by the <tt><ref id=".LOCALCHAR" name=".LOCALCHAR"></tt>
-directive).
-
-Cheap local labels are visible only between two non cheap labels. As soon as a
-standard symbol is encountered (this may also be a local symbol if inside a
-region defined with the <tt><ref id=".PROC" name=".PROC"></tt> directive), the
-cheap local symbol goes out of scope.
-
-You may use cheap local labels as an easy way to reuse common label
-names like "Loop". Here is an example:
-
-<tscreen><verb>
-       Clear:  lda    #$00             ; Global label
-               ldy    #$20
-       @Loop:  sta    Mem,y            ; Local label
-               dey
-               bne    @Loop            ; Ok
-               rts
-               Sub:    ...                     ; New global label
-               bne    @Loop            ; ERROR: Unknown identifier!
-</verb></tscreen>
-
-<sect1>Unnamed labels<p>
-
-If you really want to write messy code, there are also unnamed labels. These
-labels do not have a name (you guessed that already, didn't you?). A colon is
-used to mark the absence of the name.
-
-Unnamed labels may be accessed by using the colon plus several minus or plus
-characters as a label designator. Using the '-' characters will create a back
-reference (use the n'th label backwards), using '+' will create a forward
-reference (use the n'th label in forward direction). An example will help to
-understand this:
-
-<tscreen><verb>
-       :       lda     (ptr1),y        ; #1
-               cmp     (ptr2),y
-               bne     :+              ; -> #2
-               tax
-               beq     :+++            ; -> #4
-               iny
-               bne     :-              ; -> #1
-               inc     ptr1+1
-               inc     ptr2+1
-               bne     :-              ; -> #1
-
-       :       bcs     :+              ; #2 -> #3
-               ldx     #$FF
-               rts
-
-       :       ldx     #$01            ; #3
-       :       rts                     ; #4
-</verb></tscreen>
-
-As you can see from the example, unnamed labels will make even short
-sections of code hard to understand, because you have to count labels
-to find branch targets (this is the reason why I for my part do
-prefer the "cheap" local labels). Nevertheless, unnamed labels are
-convenient in some situations, so it's your decision.
-
-<em/Note:/ <ref id="scopes" name="Scopes"> organize named symbols, not
-unnamed ones, so scopes don't have an effect on unnamed labels.
-
-
-
-<sect1>Using macros to define labels and constants<p>
-
-While there are drawbacks with this approach, it may be handy in a few rare
-situations. Using <tt><ref id=".DEFINE" name=".DEFINE"></tt>, it is possible
-to define symbols or constants that may be used elsewhere. One of the
-advantages is that you can use it to define string constants (this is not
-possible with the other symbol types).
-
-Please note: <tt/.DEFINE/ style macros do token replacements on a low level,
-so the names do not adhere to scoping, diagnostics may be misleading, there
-are no symbols to look up in the map file, and there is no debug info.
-Especially the first problem in the list can lead to very nasty programming
-errors. Because of these problems, the general advice is, <bf/NOT/ do use
-<tt/.DEFINE/ if you don't have to.
-
-Example:
-
-<tscreen><verb>
-       .DEFINE two     2
-       .DEFINE version "SOS V2.3"
-
-       four = two * two        ; Ok
-       .byte   version         ; Ok
-
-       .PROC                   ; Start local scope
-       two = 3                 ; Will give "2 = 3" - invalid!
-       .ENDPROC
-</verb></tscreen>
-
-
-<sect1>Symbols and <tt>.DEBUGINFO</tt><p>
-
-If <tt><ref id=".DEBUGINFO" name=".DEBUGINFO"></tt> is enabled (or <ref
-id="option-g" name="-g"> is given on the command line), global, local and
-cheap local labels are written to the object file and will be available in the
-symbol file via the linker. Unnamed labels are not written to the object file,
-because they don't have a name which would allow to access them.
-
-
-
-<sect>Scopes<label id="scopes"><p>
-
-ca65 implements several sorts of scopes for symbols.
-
-<sect1>Global scope<p>
-
-All (non cheap local) symbols that are declared outside of any nested scopes
-are in global scope.
-
-
-<sect1>Cheap locals<p>
-
-A special scope is the scope for cheap local symbols. It lasts from one non
-local symbol to the next one, without any provisions made by the programmer.
-All other scopes differ in usage but use the same concept internally.
-
-
-<sect1>Generic nested scopes<p>
-
-A nested scoped for generic use is started with <tt/<ref id=".SCOPE"
-name=".SCOPE">/ and closed with <tt/<ref id=".ENDSCOPE" name=".ENDSCOPE">/.
-The scope can have a name, in which case it is accessible from the outside by
-using <ref id="scopesyntax" name="explicit scopes">. If the scope does not
-have a name, all symbols created within the scope are local to the scope, and
-aren't accessible from the outside.
-
-A nested scope can access symbols from the local or from enclosing scopes by
-name without using explicit scope names. In some cases there may be
-ambiguities, for example if there is a reference to a local symbol that is not
-yet defined, but a symbol with the same name exists in outer scopes:
-
-<tscreen><verb>
-        .scope  outer
-                foo     = 2
-                .scope  inner
-                        lda     #foo
-                        foo     = 3
-                .endscope
-        .endscope
-</verb></tscreen>
-
-In the example above, the <tt/lda/ instruction will load the value 3 into the
-accumulator, because <tt/foo/ is redefined in the scope. However:
-
-<tscreen><verb>
-        .scope  outer
-                foo     = $1234
-                .scope  inner
-                        lda     foo,x
-                        foo     = $12
-                .endscope
-        .endscope
-</verb></tscreen>
-
-Here, <tt/lda/ will still load from <tt/$12,x/, but since it is unknown to the
-assembler that <tt/foo/ is a zeropage symbol when translating the instruction,
-absolute mode is used instead. In fact, the assembler will not use absolute
-mode by default, but it will search through the enclosing scopes for a symbol
-with the given name. If one is found, the address size of this symbol is used.
-This may lead to errors:
-
-<tscreen><verb>
-        .scope  outer
-                foo     = $12
-                .scope  inner
-                        lda     foo,x
-                        foo     = $1234
-                .endscope
-        .endscope
-</verb></tscreen>
-
-In this case, when the assembler sees the symbol <tt/foo/ in the <tt/lda/
-instruction, it will search for an already defined symbol <tt/foo/. It will
-find <tt/foo/ in scope <tt/outer/, and a close look reveals that it is a
-zeropage symbol. So the assembler will use zeropage addressing mode. If
-<tt/foo/ is redefined later in scope <tt/inner/, the assembler tries to change
-the address in the <tt/lda/ instruction already translated, but since the new
-value needs absolute addressing mode, this fails, and an error message "Range
-error" is output.
-
-Of course the most simple solution for the problem is to move the definition
-of <tt/foo/ in scope <tt/inner/ upwards, so it precedes its use. There may be
-rare cases when this cannot be done. In these cases, you can use one of the
-address size override operators:
-
-<tscreen><verb>
-        .scope  outer
-                foo     = $12
-                .scope  inner
-                        lda     a:foo,x
-                        foo     = $1234
-                .endscope
-        .endscope
-</verb></tscreen>
-
-This will cause the <tt/lda/ instruction to be translated using absolute
-addressing mode, which means changing the symbol reference later does not
-cause any errors.
-
-
-<sect1>Nested procedures<p>
-
-A nested procedure is created by use of <tt/<ref id=".PROC" name=".PROC">/. It
-differs from a <tt/<ref id=".SCOPE" name=".SCOPE">/ in that it must have a
-name, and a it will introduce a symbol with this name in the enclosing scope.
-So
-
-<tscreen><verb>
-        .proc   foo
-                ...
-        .endproc
-</verb></tscreen>
-
-is actually the same as
-
-<tscreen><verb>
-        foo:
-        .scope  foo
-                ...
-        .endscope
-</verb></tscreen>
-
-This is the reason why a procedure must have a name. If you want a scope
-without a name, use <tt/<ref id=".SCOPE" name=".SCOPE">/.
-
-<em/Note:/ As you can see from the example above, scopes and symbols live in
-different namespaces. There can be a symbol named <tt/foo/ and a scope named
-<tt/foo/ without any conflicts (but see the section titled <ref
-id="scopesearch" name="&quot;Scope search order&quot;">).
-
-
-<sect1>Structs, unions and enums<p>
-
-Structs, unions and enums are explained in a <ref id="structs" name="separate
-section">, I do only cover them here, because if they are declared with a
-name, they open a nested scope, similar to <tt/<ref id=".SCOPE"
-name=".SCOPE">/. However, when no name is specified, the behaviour is
-different: In this case, no new scope will be opened, symbols declared within
-a struct, union, or enum declaration will then be added to the enclosing scope
-instead.
-
-
-<sect1>Explicit scope specification<label id="scopesyntax"><p>
-
-Accessing symbols from other scopes is possible by using an explicit scope
-specification, provided that the scope where the symbol lives in has a name.
-The namespace token (<tt/::/) is used to access other scopes:
-
-<tscreen><verb>
-        .scope  foo
-        bar:    .word   0
-        .endscope
-
-                ...
-                lda     foo::bar        ; Access foo in scope bar
-</verb></tscreen>
-
-The only way to deny access to a scope from the outside is to declare a scope
-without a name (using the <tt/<ref id=".SCOPE" name=".SCOPE">/ command).
-
-A special syntax is used to specify the global scope: If a symbol or scope is
-preceded by the namespace token, the global scope is searched:
-
-<tscreen><verb>
-        bar     = 3
-
-        .scope  foo
-                bar     = 2
-                lda     #::bar  ; Access the global bar (which is 3)
-        .endscope
-</verb></tscreen>
-
-
-<sect1>Scope search order<label id="scopesearch"><p>
-
-The assembler searches for a scope in a similar way as for a symbol. First, it
-looks in the current scope, and then it walks up the enclosing scopes until
-the scope is found.
-
-However, one important thing to note when using explicit scope syntax is, that
-a symbol may be accessed before it is defined, but a scope may <bf/not/ be
-used without a preceding definition. This means that in the following
-example:
-
-<tscreen><verb>
-        .scope  foo
-                bar     = 3
-        .endscope
-
-        .scope  outer
-                lda     #foo::bar  ; Will load 3, not 2!
-                .scope  foo
-                        bar     = 2
-                .endscope
-        .endscope
-</verb></tscreen>
-
-the reference to the scope <tt/foo/ will use the global scope, and not the
-local one, because the local one is not visible at the point where it is
-referenced.
-
-Things get more complex if a complete chain of scopes is specified:
-
-<tscreen><verb>
-        .scope  foo
-                .scope  outer
-                        .scope  inner
-                                bar = 1
-                        .endscope
-                .endscope
-                .scope  another
-                        .scope  nested
-                                lda     #outer::inner::bar      ; 1
-                        .endscope
-                .endscope
-        .endscope
-
-        .scope  outer
-                .scope  inner
-                        bar = 2
-                .endscope
-        .endscope
-</verb></tscreen>
-
-When <tt/outer::inner::bar/ is referenced in the <tt/lda/ instruction, the
-assembler will first search in the local scope for a scope named <tt/outer/.
-Since none is found, the enclosing scope (<tt/another/) is checked. There is
-still no scope named <tt/outer/, so scope <tt/foo/ is checked, and finally
-scope <tt/outer/ is found. Within this scope, <tt/inner/ is searched, and in
-this scope, the assembler looks for a symbol named <tt/bar/.
-
-Please note that once the anchor scope is found, all following scopes
-(<tt/inner/ in this case) are expected to be found exactly in this scope. The
-assembler will search the scope tree only for the first scope (if it is not
-anchored in the root scope). Starting from there on, there is no flexibility,
-so if the scope named <tt/outer/ found by the assembler does not contain a
-scope named <tt/inner/, this would be an error, even if such a pair does exist
-(one level up in global scope).
-
-Ambiguities that may be introduced by this search algorithm may be removed by
-anchoring the scope specification in the global scope. In the example above,
-if you want to access the "other" symbol <tt/bar/, you would have to write:
-
-<tscreen><verb>
-        .scope  foo
-                .scope  outer
-                        .scope  inner
-                                bar = 1
-                        .endscope
-                .endscope
-                .scope  another
-                        .scope  nested
-                                lda     #::outer::inner::bar    ; 2
-                        .endscope
-                .endscope
-        .endscope
-
-        .scope  outer
-                .scope  inner
-                        bar = 2
-                .endscope
-        .endscope
-</verb></tscreen>
-
-
-<sect>Address sizes and memory models<label id="address-sizes"><p>
-
-<sect1>Address sizes<p>
-
-ca65 assigns each segment and each symbol an address size. This is true, even
-if the symbol is not used as an address. You may also think of a value range
-of the symbol instead of an address size.
-
-Possible address sizes are:
-
-<itemize>
-<item>Zeropage or direct (8 bits)
-<item>Absolute (16 bits)
-<item>Far (24 bits)
-<item>Long (32 bits)
-</itemize>
-
-Since the assembler uses default address sizes for the segments and symbols,
-it is usually not necessary to override the default behaviour. In cases, where
-it is necessary, the following keywords may be used to specify address sizes:
-
-<itemize>
-<item>DIRECT, ZEROPAGE or ZP for zeropage addressing (8 bits).
-<item>ABSOLUTE, ABS or NEAR for absolute addressing (16 bits).
-<item>FAR for far addressing (24 bits).
-<item>LONG or DWORD for long addressing (32 bits).
-</itemize>
-
-
-<sect1>Address sizes of segments<p>
-
-The assembler assigns an address size to each segment. Since the
-representation of a label within this segment is "segment start + offset",
-labels will inherit the address size of the segment they are declared in.
-
-The address size of a segment may be changed, by using an optional address
-size modifier. See the <tt/<ref id=".SEGMENT" name="segment directive">/ for
-an explanation on how this is done.
-
-
-<sect1>Address sizes of symbols<p>
-
-
-
-
-<sect1>Memory models<p>
-
-The default address size of a segment depends on the memory model used. Since
-labels inherit the address size from the segment they are declared in,
-changing the memory model is an easy way to change the address size of many
-symbols at once.
-
-
-
-
-<sect>Pseudo variables<label id="pseudo-variables"><p>
-
-Pseudo variables are readable in all cases, and in some special cases also
-writable.
-
-<sect1><tt>*</tt><p>
-
-  Reading this pseudo variable will return the program counter at the start
-  of the current input line.
-
-  Assignment to this variable is possible when <tt/<ref id=".FEATURE"
-  name=".FEATURE pc_assignment">/ is used. Note: You should not use
-  assignments to <tt/*/, use <tt/<ref id=".ORG" name=".ORG">/ instead.
-
-
-<sect1><tt>.CPU</tt><label id=".CPU"><p>
-
-  Reading this pseudo variable will give a constant integer value that
-  tells which CPU is currently enabled. It can also tell which instruction
-  set the CPU is able to translate. The value read from the pseudo variable
-  should be further examined by using one of the constants defined by the
-  "cpu" macro package (see <tt/<ref id=".MACPACK" name=".MACPACK">/).
-
-  It may be used to replace the .IFPxx pseudo instructions or to construct
-  even more complex expressions.
-
-  Example:
-
-  <tscreen><verb>
-        .macpack        cpu
-               .if     (.cpu .bitand CPU_ISET_65816)
-               phx
-               phy
-       .else
-               txa
-               pha
-               tya
-               pha
-       .endif
-  </verb></tscreen>
-
-
-<sect1><tt>.PARAMCOUNT</tt><label id=".PARAMCOUNT"><p>
-
-  This builtin pseudo variable is only available in macros. It is replaced by
-  the actual number of parameters that were given in the macro invocation.
-
-  Example:
-
-  <tscreen><verb>
-       .macro  foo     arg1, arg2, arg3
-       .if     .paramcount <> 3
-       .error  "Too few parameters for macro foo"
-       .endif
-       ...
-       .endmacro
-  </verb></tscreen>
-
-  See section <ref id="macros" name="Macros">.
-
-
-<sect1><tt>.TIME</tt><label id=".TIME"><p>
-
-  Reading this pseudo variable will give a constant integer value that
-  represents the current time in POSIX standard (as seconds since the
-  Epoch).
-
-  It may be used to encode the time of translation somewhere in the created
-  code.
-
-  Example:
-
-  <tscreen><verb>
-        .dword  .time   ; Place time here
-  </verb></tscreen>
-
-
-<sect1><tt>.VERSION</tt><label id=".VERSION"><p>
-
-  Reading this pseudo variable will give the assembler version according to
-  the following formula:
-
-        VER_MAJOR*$100 + VER_MINOR*$10
-
-  It may be used to encode the assembler version or check the assembler for
-  special features not available with older versions.
-
-  Example:
-
-  Version 2.14 of the assembler will return $2E0 as numerical constant when
-  reading the pseudo variable <tt/.VERSION/.
-
-
-
-<sect>Pseudo functions<label id="pseudo-functions"><p>
-
-Pseudo functions expect their arguments in parenthesis, and they have a result,
-either a string or an expression.
-
-
-<sect1><tt>.ADDRSIZE</tt><label id=".ADDRSIZE"><p>
-
-  The <tt/.ADDRSIZE/ function is used to return the interal address size 
-  associated with a symbol. This can be helpful in macros when knowing the address 
-  size of symbol can help with custom instructions.
-
-  Example:
-
-  <tscreen><verb>
-        .macro myLDA foo
-                .if .ADDRSIZE(foo) = 1
-                        ;do custom command based on zeropage addressing:
-                        .byte 0A5h, foo
-                .elseif .ADDRSIZE(foo) = 2
-                        ;do custom command based on absolute addressing:
-                        .byte 0ADh
-                        .word foo
-                .elseif .ADDRSIZE(foo) = 0
-                        ; no address size defined for this symbol:
-                        .out .sprintf("Error, address size unknown for symbol %s", .string(foo))
-                .endif
-        .endmacro
-  </verb></tscreen>
-
-  This command is new and must be enabled with the <tt/.FEATURE addrsize/ command.
-
-  See: <tt><ref id=".FEATURE" name=".FEATURE"></tt>
-
-
-<sect1><tt>.BANK</tt><label id=".BANK"><p>
-
-  The <tt/.BANK/ function is used to support systems with banked memory. The
-  argument is an expression with exactly one segment reference - usually a
-  label. The function result is the value of the <tt/bank/ attribute assigned
-  to the run memory area of the segment. Please see the linker documentation
-  for more information about memory areas and their attributes.
-
-  The value of <tt/.BANK/ can be used to switch memory so that a memory bank
-  containing specific data is available.
-
-  The <tt/bank/ attribute is a 32 bit integer and so is the result of the
-  <tt/.BANK/ function. You will have to use <tt><ref id=".LOBYTE"
-  name=".LOBYTE"></tt> or similar functions to address just part of it.
-
-  Please note that <tt/.BANK/ will always get evaluated in the link stage, so
-  an expression containing <tt/.BANK/ can never be used where a constant known
-  result is expected (for example with <tt/.RES/).
-
-  Example:
-
-  <tscreen><verb>
-        .segment "BANK1"
-        .proc   banked_func_1
-                ...
-        .endproc
-
-        .segment "BANK2"
-        .proc   banked_func_2
-                ...
-        .endproc
-
-        .proc   bank_table
-               .addr   banked_func_1
-                .byte   <.BANK (banked_func_1)
-
-                .addr   banked_func_2
-                .byte   <.BANK (banked_func_2)
-        .endproc
-  </verb></tscreen>
-
-
-
-<sect1><tt>.BANKBYTE</tt><label id=".BANKBYTE"><p>
-
-  The function returns the bank byte (that is, bits 16-23) of its argument.
-  It works identical to the '^' operator.
-
-  See: <tt><ref id=".HIBYTE" name=".HIBYTE"></tt>,
-       <tt><ref id=".LOBYTE" name=".LOBYTE"></tt>
-
-
-<sect1><tt>.BLANK</tt><label id=".BLANK"><p>
-
-  Builtin function. The function evaluates its argument in braces and yields
-  "false" if the argument is non blank (there is an argument), and "true" if
-  there is no argument.  The token list that makes up the function argument
-  may optionally be enclosed in curly braces. This allows the inclusion of
-  tokens that would otherwise terminate the list (the closing right
-  parenthesis). The curly braces are not considered part of the list, a list
-  just consisting of curly braces is considered to be empty.
-
-  As an example, the <tt/.IFBLANK/ statement may be replaced by
-
-  <tscreen><verb>
-       .if     .blank({arg})
-  </verb></tscreen>
-
-
-
-<sect1><tt>.CONCAT</tt><label id=".CONCAT"><p>
-
-  Builtin string function. The function allows to concatenate a list of string
-  constants separated by commas. The result is a string constant that is the
-  concatenation of all arguments. This function is most useful in macros and
-  when used together with the <tt/.STRING/ builtin function. The function may
-  be used in any case where a string constant is expected.
-
-  Example:
-
-  <tscreen><verb>
-       .include        .concat ("myheader", ".", "inc")
-  </verb></tscreen>
-
-  This is the same as the command
-
-  <tscreen><verb>
-       .include        "myheader.inc"
-  </verb></tscreen>
-
-
-<sect1><tt>.CONST</tt><label id=".CONST"><p>
-
-  Builtin function. The function evaluates its argument in braces and
-  yields "true" if the argument is a constant expression (that is, an
-  expression that yields a constant value at assembly time) and "false"
-  otherwise. As an example, the .IFCONST statement may be replaced by
-
-  <tscreen><verb>
-       .if     .const(a + 3)
-  </verb></tscreen>
-
-
-<sect1><tt>.HIBYTE</tt><label id=".HIBYTE"><p>
-
-  The function returns the high byte (that is, bits 8-15) of its argument.
-  It works identical to the '>' operator.
-
-  See: <tt><ref id=".LOBYTE" name=".LOBYTE"></tt>,
-       <tt><ref id=".BANKBYTE" name=".BANKBYTE"></tt>
-
-
-<sect1><tt>.HIWORD</tt><label id=".HIWORD"><p>
-
-  The function returns the high word (that is, bits 16-31) of its argument.
-
-  See: <tt><ref id=".LOWORD" name=".LOWORD"></tt>
-
-
-<sect1><tt>.IDENT</tt><label id=".IDENT"><p>
-
-  The function expects a string as its argument, and converts this argument
-  into an identifier. If the string starts with the current <tt/<ref
-  id=".LOCALCHAR" name=".LOCALCHAR">/, it will be converted into a cheap local
-  identifier, otherwise it will be converted into a normal identifier.
-
-  Example:
-
-  <tscreen><verb>
-       .macro  makelabel       arg1, arg2
-                .ident (.concat (arg1, arg2)):
-        .endmacro
-
-                makelabel       "foo", "bar"
-
-                .word           foobar          ; Valid label
-  </verb></tscreen>
-
-
-<sect1><tt>.LEFT</tt><label id=".LEFT"><p>
-
-  Builtin function. Extracts the left part of a given token list.
-
-  Syntax:
-
-  <tscreen><verb>
-               .LEFT (&lt;int expr&gt;, &lt;token list&gt;)
-  </verb></tscreen>
-
-  The first integer expression gives the number of tokens to extract from
-  the token list. The second argument is the token list itself. The token
-  list may optionally be enclosed into curly braces. This allows the
-  inclusion of tokens that would otherwise terminate the list (the closing
-  right paren in the given case).
-
-  Example:
-
-  To check in a macro if the given argument has a '#' as first token
-  (immediate addressing mode), use something like this:
-
-  <tscreen><verb>
-       .macro  ldax    arg
-               ...
-               .if (.match (.left (1, {arg}), #))
-
-               ; ldax called with immediate operand
-               ...
-
-               .endif
-               ...
-               .endmacro
-  </verb></tscreen>
-
-  See also the <tt><ref id=".MID" name=".MID"></tt> and <tt><ref id=".RIGHT"
-  name=".RIGHT"></tt> builtin functions.
-
-
-<sect1><tt>.LOBYTE</tt><label id=".LOBYTE"><p>
-
-  The function returns the low byte (that is, bits 0-7) of its argument.
-  It works identical to the '<' operator.
-
-  See: <tt><ref id=".HIBYTE" name=".HIBYTE"></tt>,
-       <tt><ref id=".BANKBYTE" name=".BANKBYTE"></tt>
-
-
-<sect1><tt>.LOWORD</tt><label id=".LOWORD"><p>
-
-  The function returns the low word (that is, bits 0-15) of its argument.
-
-  See: <tt><ref id=".HIWORD" name=".HIWORD"></tt>
-
-
-<sect1><tt>.MATCH</tt><label id=".MATCH"><p>
-
-  Builtin function. Matches two token lists against each other. This is
-  most useful within macros, since macros are not stored as strings, but
-  as lists of tokens.
-
-  The syntax is
-
-  <tscreen><verb>
-               .MATCH(&lt;token list #1&gt;, &lt;token list #2&gt;)
-  </verb></tscreen>
-
-  Both token list may contain arbitrary tokens with the exception of the
-  terminator token (comma resp. right parenthesis) and
-
-  <itemize>
-  <item>end-of-line
-  <item>end-of-file
-  </itemize>
-
-  The token lists may optionally be enclosed into curly braces. This allows
-  the inclusion of tokens that would otherwise terminate the list (the closing
-  right paren in the given case). Often a macro parameter is used for any of
-  the token lists.
-
-  Please note that the function does only compare tokens, not token
-  attributes. So any number is equal to any other number, regardless of the
-  actual value. The same is true for strings. If you need to compare tokens
-  <em/and/ token attributes, use the <tt><ref id=".XMATCH"
-  name=".XMATCH"></tt> function.
-
-  Example:
-
-  Assume the macro <tt/ASR/, that will shift right the accumulator by one,
-  while honoring the sign bit. The builtin processor instructions will allow
-  an optional "A" for accu addressing for instructions like <tt/ROL/ and
-  <tt/ROR/. We will use the <tt><ref id=".MATCH" name=".MATCH"></tt> function
-  to check for this and print and error for invalid calls.
-
-  <tscreen><verb>
-       .macro  asr     arg
-
-                       .if (.not .blank(arg)) .and (.not .match ({arg}, a))
-               .error "Syntax error"
-               .endif
-
-               cmp     #$80            ; Bit 7 into carry
-               lsr     a               ; Shift carry into bit 7
-
-       .endmacro
-  </verb></tscreen>
-
-  The macro will only accept no arguments, or one argument that must be the
-  reserved keyword "A".
-
-  See: <tt><ref id=".XMATCH" name=".XMATCH"></tt>
-
-
-<sect1><tt>.MAX</tt><label id=".MAX"><p>
-
-  Builtin function. The result is the larger of two values.
-
-  The syntax is
-
-  <tscreen><verb>
-               .MAX (&lt;value #1&gt;, &lt;value #2&gt;)
-  </verb></tscreen>
-
-  Example:
-
-  <tscreen><verb>
-        ; Reserve space for the larger of two data blocks
-               savearea:       .max (.sizeof (foo), .sizeof (bar))
-  </verb></tscreen>
-
-  See: <tt><ref id=".MIN" name=".MIN"></tt>
-
-
-<sect1><tt>.MID</tt><label id=".MID"><p>
-
-  Builtin function. Takes a starting index, a count and a token list as
-  arguments. Will return part of the token list.
-
-  Syntax:
-
-  <tscreen><verb>
-               .MID (&lt;int expr&gt;, &lt;int expr&gt;, &lt;token list&gt;)
-  </verb></tscreen>
-
-  The first integer expression gives the starting token in the list (the first
-  token has index 0). The second integer expression gives the number of tokens
-  to extract from the token list. The third argument is the token list itself.
-  The token list may optionally be enclosed into curly braces. This allows the
-  inclusion of tokens that would otherwise terminate the list (the closing
-  right paren in the given case).
-
-  Example:
-
-  To check in a macro if the given argument has a '<tt/#/' as first token
-  (immediate addressing mode), use something like this:
-
-    <tscreen><verb>
-       .macro  ldax    arg
-               ...
-               .if (.match (.mid (0, 1, {arg}), #))
-
-               ; ldax called with immediate operand
-               ...
-
-               .endif
-               ...
-               .endmacro
-  </verb></tscreen>
-
-  See also the <tt><ref id=".LEFT" name=".LEFT"></tt> and <tt><ref id=".RIGHT"
-  name=".RIGHT"></tt> builtin functions.
-
-
-<sect1><tt>.MIN</tt><label id=".MIN"><p>
-
-  Builtin function. The result is the smaller of two values.
-
-  The syntax is
-
-  <tscreen><verb>
-               .MIN (&lt;value #1&gt;, &lt;value #2&gt;)
-  </verb></tscreen>
-
-  Example:
-
-  <tscreen><verb>
-        ; Reserve space for some data, but 256 bytes minimum
-               savearea:       .min (.sizeof (foo), 256)
-  </verb></tscreen>
-
-  See: <tt><ref id=".MAX" name=".MAX"></tt>
-
-
-<sect1><tt>.REF, .REFERENCED</tt><label id=".REFERENCED"><p>
-
-  Builtin function. The function expects an identifier as argument in braces.
-  The argument is evaluated, and the function yields "true" if the identifier
-  is a symbol that has already been referenced somewhere in the source file up
-  to the current position. Otherwise the function yields false. As an example,
-  the <tt><ref id=".IFREF" name=".IFREF"></tt> statement may be replaced by
-
-  <tscreen><verb>
-       .if     .referenced(a)
-  </verb></tscreen>
-
-  See: <tt><ref id=".DEFINED" name=".DEFINED"></tt>
-
-
-<sect1><tt>.RIGHT</tt><label id=".RIGHT"><p>
-
-  Builtin function. Extracts the right part of a given token list.
-
-  Syntax:
-
-  <tscreen><verb>
-               .RIGHT (&lt;int expr&gt;, &lt;token list&gt;)
-  </verb></tscreen>
-
-  The first integer expression gives the number of tokens to extract from the
-  token list. The second argument is the token list itself.  The token list
-  may optionally be enclosed into curly braces. This allows the inclusion of
-  tokens that would otherwise terminate the list (the closing right paren in
-  the given case).
-
-  See also the <tt><ref id=".LEFT" name=".LEFT"></tt> and <tt><ref id=".MID"
-  name=".MID"></tt> builtin functions.
-
-
-<sect1><tt>.SIZEOF</tt><label id=".SIZEOF"><p>
-
-  <tt/.SIZEOF/ is a pseudo function that returns the size of its argument. The
-  argument can be a struct/union, a struct member, a procedure, or a label. In
-  case of a procedure or label, its size is defined by the amount of data
-  placed in the segment where the label is relative to. If a line of code
-  switches segments (for example in a macro) data placed in other segments
-  does not count for the size.
-
-  Please note that a symbol or scope must exist, before it is used together with
-  <tt/.SIZEOF/ (this may get relaxed later, but will always be true for scopes).
-  A scope has preference over a symbol with the same name, so if the last part
-  of a name represents both, a scope and a symbol, the scope is chosen over the
-  symbol.
-
-  After the following code:
-
-  <tscreen><verb>
-        .struct Point                   ; Struct size = 4
-                xcoord  .word
-                ycoord  .word
-        .endstruct
-
-        P:      .tag    Point           ; Declare a point
-        @P:     .tag    Point           ; Declare another point
-
-        .code
-        .proc   Code
-                nop
-                .proc   Inner
-                        nop
-                .endproc
-                nop
-        .endproc
-
-        .proc   Data
-        .data                           ; Segment switch!!!
-                .res    4
-        .endproc
-  </verb></tscreen>
-
-  <descrip>
-    <tag><tt/.sizeof(Point)/</tag>
-    will have the value 4, because this is the size of struct <tt/Point/.
-
-    <tag><tt/.sizeof(Point::xcoord)/</tag>
-    will have the value 2, because this is the size of the member <tt/xcoord/
-    in struct <tt/Point/.
-
-    <tag><tt/.sizeof(P)/</tag>
-    will have the value 4, this is the size of the data declared on the same
-    source line as the label <tt/P/, which is in the same segment that <tt/P/
-    is relative to.
-
-    <tag><tt/.sizeof(@P)/</tag>
-    will have the value 4, see above. The example demonstrates that <tt/.SIZEOF/
-    does also work for cheap local symbols.
-
-    <tag><tt/.sizeof(Code)/</tag>
-    will have the value 3, since this is amount of data emitted into the code
-    segment, the segment that was active when <tt/Code/ was entered. Note that
-    this value includes the amount of data emitted in child scopes (in this
-    case <tt/Code::Inner/).
-
-    <tag><tt/.sizeof(Code::Inner)/</tag>
-    will have the value 1 as expected.
-
-    <tag><tt/.sizeof(Data)/</tag>
-    will have the value 0. Data is emitted within the scope <tt/Data/, but since
-    the segment is switched after entry, this data is emitted into another
-    segment.
-  </descrip>
-
-
-<sect1><tt>.STRAT</tt><label id=".STRAT"><p>
-
-  Builtin function. The function accepts a string and an index as
-  arguments and returns the value of the character at the given position
-  as an integer value. The index is zero based.
-
-  Example:
-
-  <tscreen><verb>
-               .macro  M       Arg
-               ; Check if the argument string starts with '#'
-               .if (.strat (Arg, 0) = '#')
-               ...
-               .endif
-               .endmacro
-  </verb></tscreen>
-
-
-<sect1><tt>.SPRINTF</tt><label id=".SPRINTF"><p>
-
-  Builtin function. It expects a format string as first argument. The number
-  and type of the following arguments depend on the format string. The format
-  string is similar to the one of the C <tt/printf/ function. Missing things
-  are: Length modifiers, variable width.
-
-  The result of the function is a string.
-
-  Example:
-
-  <tscreen><verb>
-        num     = 3
-
-        ; Generate an identifier:
-        .ident (.sprintf ("%s%03d", "label", num)):
-  </verb></tscreen>
-
-
-<sect1><tt>.STRING</tt><label id=".STRING"><p>
-
-  Builtin function. The function accepts an argument in braces and converts
-  this argument into a string constant. The argument may be an identifier, or
-  a constant numeric value.
-
-  Since you can use a string in the first place, the use of the function may
-  not be obvious. However, it is useful in macros, or more complex setups.
-
-  Example:
-
-  <tscreen><verb>
-               ; Emulate other assemblers:
-               .macro  section name
-                       .segment        .string(name)
-               .endmacro
-  </verb></tscreen>
-
-
-<sect1><tt>.STRLEN</tt><label id=".STRLEN"><p>
-
-  Builtin function. The function accepts a string argument in braces and
-  evaluates to the length of the string.
-
-  Example:
-
-  The following macro encodes a string as a pascal style string with
-  a leading length byte.
-
-  <tscreen><verb>
-               .macro  PString Arg
-               .byte   .strlen(Arg), Arg
-               .endmacro
-  </verb></tscreen>
-
-
-<sect1><tt>.TCOUNT</tt><label id=".TCOUNT"><p>
-
-  Builtin function. The function accepts a token list in braces. The function
-  result is the number of tokens given as argument. The token list may
-  optionally be enclosed into curly braces which are not considered part of
-  the list and not counted. Enclosement in curly braces allows the inclusion
-  of tokens that would otherwise terminate the list (the closing right paren
-  in the given case).
-
-  Example:
-
-  The <tt/ldax/ macro accepts the '#' token to denote immediate addressing (as
-  with the normal 6502 instructions). To translate it into two separate 8 bit
-  load instructions, the '#' token has to get stripped from the argument:
-
-  <tscreen><verb>
-       .macro  ldax    arg
-               .if (.match (.mid (0, 1, {arg}), #))
-               ; ldax called with immediate operand
-               lda     #<(.right (.tcount ({arg})-1, {arg}))
-               ldx     #>(.right (.tcount ({arg})-1, {arg}))
-               .else
-               ...
-               .endif
-               .endmacro
-  </verb></tscreen>
-
-
-<sect1><tt>.XMATCH</tt><label id=".XMATCH"><p>
-
-  Builtin function. Matches two token lists against each other. This is
-  most useful within macros, since macros are not stored as strings, but
-  as lists of tokens.
-
-  The syntax is
-
-  <tscreen><verb>
-               .XMATCH(&lt;token list #1&gt;, &lt;token list #2&gt;)
-  </verb></tscreen>
-
-  Both token list may contain arbitrary tokens with the exception of the
-  terminator token (comma resp. right parenthesis) and
-
-  <itemize>
-  <item>end-of-line
-  <item>end-of-file
-  </itemize>
-
-  The token lists may optionally be enclosed into curly braces. This allows
-  the inclusion of tokens that would otherwise terminate the list (the closing
-  right paren in the given case). Often a macro parameter is used for any of
-  the token lists.
-
-  The function compares tokens <em/and/ token values. If you need a function
-  that just compares the type of tokens, have a look at the <tt><ref
-  id=".MATCH" name=".MATCH"></tt> function.
-
-  See: <tt><ref id=".MATCH" name=".MATCH"></tt>
-
-
-
-<sect>Control commands<label id="control-commands"><p>
-
-Here's a list of all control commands and a description, what they do:
-
-
-<sect1><tt>.A16</tt><label id=".A16"><p>
-
-  Valid only in 65816 mode. Switch the accumulator to 16 bit.
-
-  Note: This command will not emit any code, it will tell the assembler to
-  create 16 bit operands for immediate accumulator addressing mode.
-
-  See also: <tt><ref id=".SMART" name=".SMART"></tt>
-
-
-<sect1><tt>.A8</tt><label id=".A8"><p>
-
-  Valid only in 65816 mode. Switch the accumulator to 8 bit.
-
-  Note: This command will not emit any code, it will tell the assembler to
-  create 8 bit operands for immediate accu addressing mode.
-
-  See also: <tt><ref id=".SMART" name=".SMART"></tt>
-
-
-<sect1><tt>.ADDR</tt><label id=".ADDR"><p>
-
-  Define word sized data. In 6502 mode, this is an alias for <tt/.WORD/ and
-  may be used for better readability if the data words are address values. In
-  65816 mode, the address is forced to be 16 bit wide to fit into the current
-  segment. See also <tt><ref id=".FARADDR" name=".FARADDR"></tt>. The command
-  must be followed by a sequence of (not necessarily constant) expressions.
-
-  Example:
-
-  <tscreen><verb>
-       .addr   $0D00, $AF13, _Clear
-  </verb></tscreen>
-
-  See: <tt><ref id=".FARADDR" name=".FARADDR"></tt>, <tt><ref id=".WORD"
-       name=".WORD"></tt>
-
-
-<sect1><tt>.ALIGN</tt><label id=".ALIGN"><p>
-
-  Align data to a given boundary. The command expects a constant integer
-  argument in the range 1 ... 65536, plus an optional second argument
-  in byte range. If there is a second argument, it is used as fill value,
-  otherwise the value defined in the linker configuration file is used
-  (the default for this value is zero).
-
-  <tt/.ALIGN/ will insert fill bytes, and the number of fill bytes depend of
-  the final address of the segment. <tt/.ALIGN/ cannot insert a variable
-  number of bytes, since that would break address calculations within the
-  module. So each <tt/.ALIGN/ expects the segment to be aligned to a multiple
-  of the alignment, because that allows the number of fill bytes to be
-  calculated in advance by the assembler. You are therefore required to
-  specify a matching alignment for the segment in the linker config. The
-  linker will output a warning if the alignment of the segment is less than
-  what is necessary to have a correct alignment in the object file.
-
-  Example:
-
-  <tscreen><verb>
-       .align  256
-  </verb></tscreen>
-
-  Some unexpected behaviour might occur if there are multiple <tt/.ALIGN/
-  commands with different arguments. To allow the assembler to calculate the
-  number of fill bytes in advance, the alignment of the segment must be a
-  multiple of each of the alignment factors. This may result in unexpectedly
-  large alignments for the segment within the module.
-
-  Example:
-
-  <tscreen><verb>
-        .align  15
-        .byte   15
-        .align  18
-        .byte   18
-  </verb></tscreen>
-
-  For the assembler to be able to align correctly, the segment must be aligned
-  to the least common multiple of 15 and 18 which is 90. The assembler will
-  calculate this automatically and will mark the segment with this value.
-
-  Unfortunately, the combined alignment may get rather large without the user
-  knowing about it, wasting space in the final executable. If we add another
-  alignment to the example above
-
-  <tscreen><verb>
-        .align  15
-        .byte   15
-        .align  18
-        .byte   18
-        .align  251
-        .byte   0
-  </verb></tscreen>
-
-  the assembler will force a segment alignment to the least common multiple of
-  15, 18 and 251 - which is 22590. To protect the user against errors, the
-  assembler will issue a warning when the combined alignment exceeds 256. The
-  command line option <tt><ref id="option--large-alignment"
-  name="--large-alignment"></tt> will disable this warning.
-
-  Please note that with alignments that are a power of two (which were the
-  only alignments possible in older versions of the assembler), the problem is
-  less severe, because the least common multiple of powers to the same base is
-  always the larger one.
-
-
-
-<sect1><tt>.ASCIIZ</tt><label id=".ASCIIZ"><p>
-
-  Define a string with a trailing zero.
-
-  Example:
-
-  <tscreen><verb>
-       Msg:    .asciiz "Hello world"
-  </verb></tscreen>
-
-  This will put the string "Hello world" followed by a binary zero into
-  the current segment. There may be more strings separated by commas, but
-  the binary zero is only appended once (after the last one).
-
-
-<sect1><tt>.ASSERT</tt><label id=".ASSERT"><p>
-
-  Add an assertion. The command is followed by an expression, an action
-  specifier, and an optional message that is output in case the assertion
-  fails. If no message was given, the string "Assertion failed" is used. The
-  action specifier may be one of <tt/warning/, <tt/error/, <tt/ldwarning/ or
-  <tt/lderror/. In the former two cases, the assertion is evaluated by the
-  assembler if possible, and in any case, it's also passed to the linker in
-  the object file (if one is generated). The linker will then evaluate the
-  expression when segment placement has been done.
-
-  Example:
-
-  <tscreen><verb>
-               .assert         * = $8000, error, "Code not at $8000"
-  </verb></tscreen>
-
-  The example assertion will check that the current location is at $8000,
-  when the output file is written, and abort with an error if this is not
-  the case. More complex expressions are possible. The action specifier
-  <tt/warning/ outputs a warning, while the <tt/error/ specifier outputs
-  an error message. In the latter case, generation of the output file is
-  suppressed in both the assembler and linker.
-
-
-<sect1><tt>.AUTOIMPORT</tt><label id=".AUTOIMPORT"><p>
-
-  Is followed by a plus or a minus character. When switched on (using a
-  +), undefined symbols are automatically marked as import instead of
-  giving errors. When switched off (which is the default so this does not
-  make much sense), this does not happen and an error message is
-  displayed. The state of the autoimport flag is evaluated when the
-  complete source was translated, before outputting actual code, so it is
-  <em/not/ possible to switch this feature on or off for separate sections
-  of code. The last setting is used for all symbols.
-
-  You should probably not use this switch because it delays error
-  messages about undefined symbols until the link stage. The cc65
-  compiler (which is supposed to produce correct assembler code in all
-  circumstances, something which is not true for most assembler
-  programmers) will insert this command to avoid importing each and every
-  routine from the runtime library.
-
-  Example:
-
-  <tscreen><verb>
-       .autoimport     +       ; Switch on auto import
-  </verb></tscreen>
-
-<sect1><tt>.BANKBYTES</tt><label id=".BANKBYTES"><p>
-
-  Define byte sized data by extracting only the bank byte (that is, bits 16-23) from
-  each expression.  This is equivalent to <tt><ref id=".BYTE" name=".BYTE"></tt> with
-  the operator '^' prepended to each expression in its list.
-
-  Example:
-
-  <tscreen><verb>
-        .define MyTable TableItem0, TableItem1, TableItem2, TableItem3
-
-       TableLookupLo:   .lobytes   MyTable
-       TableLookupHi:   .hibytes   MyTable
-       TableLookupBank: .bankbytes MyTable
-  </verb></tscreen>
-
-  which is equivalent to
-
-  <tscreen><verb>
-        TableLookupLo:   .byte &lt;TableItem0, &lt;TableItem1, &lt;TableItem2, &lt;TableItem3
-       TableLookupHi:   .byte &gt;TableItem0, &gt;TableItem1, &gt;TableItem2, &gt;TableItem3
-       TableLookupBank: .byte ^TableItem0, ^TableItem1, ^TableItem2, ^TableItem3
-  </verb></tscreen>
-
-  See also: <tt><ref id=".BYTE" name=".BYTE"></tt>,
-            <tt><ref id=".HIBYTES" name=".HIBYTES"></tt>,
-            <tt><ref id=".LOBYTES" name=".LOBYTES"></tt>
-
-
-<sect1><tt>.BSS</tt><label id=".BSS"><p>
-
-  Switch to the BSS segment. The name of the BSS segment is always "BSS",
-  so this is a shortcut for
-
-  <tscreen><verb>
-       .segment  "BSS"
-  </verb></tscreen>
-
-  See also the <tt><ref id=".SEGMENT" name=".SEGMENT"></tt> command.
-
-
-<sect1><tt>.BYT, .BYTE</tt><label id=".BYTE"><p>
-
-  Define byte sized data. Must be followed by a sequence of (byte ranged)
-  expressions or strings.
-
-  Example:
-
-  <tscreen><verb>
-       .byte   "Hello "
-       .byt    "world", $0D, $00
-  </verb></tscreen>
-
-
-<sect1><tt>.CASE</tt><label id=".CASE"><p>
-
-  Switch on or off case sensitivity on identifiers. The default is off
-  (that is, identifiers are case sensitive), but may be changed by the
-  -i switch on the command line.
-  The command must be followed by a '+' or '-' character to switch the
-  option on or off respectively.
-
-  Example:
-
-  <tscreen><verb>
-               .case   -               ; Identifiers are not case sensitive
-  </verb></tscreen>
-
-
-<sect1><tt>.CHARMAP</tt><label id=".CHARMAP"><p>
-
-  Apply a custom mapping for characters. The command is followed by two
-  numbers. The first one is the index of the source character (range 1..255),
-  the second one is the mapping (range 0..255). The mapping applies to all
-  character and string constants when they generate output, and overrides a
-  mapping table specified with the <tt><ref id="option-t" name="-t"></tt>
-  command line switch.
-
-  Example:
-
-  <tscreen><verb>
-               .charmap        $41, $61        ; Map 'A' to 'a'
-  </verb></tscreen>
-
-
-<sect1><tt>.CODE</tt><label id=".CODE"><p>
-
-  Switch to the CODE segment. The name of the CODE segment is always
-  "CODE", so this is a shortcut for
-
-  <tscreen><verb>
-               .segment  "CODE"
-  </verb></tscreen>
-
-  See also the <tt><ref id=".SEGMENT" name=".SEGMENT"></tt> command.
-
-
-<sect1><tt>.CONDES</tt><label id=".CONDES"><p>
-
-  Export a symbol and mark it in a special way. The linker is able to build
-  tables of all such symbols. This may be used to automatically create a list
-  of functions needed to initialize linked library modules.
-
-  Note: The linker has a feature to build a table of marked routines, but it
-  is your code that must call these routines, so just declaring a symbol with
-  <tt/.CONDES/ does nothing by itself.
-
-  All symbols are exported as an absolute (16 bit) symbol. You don't need to
-  use an additional <tt><ref id=".EXPORT" name=".EXPORT"></tt> statement, this
-  is implied by <tt/.CONDES/.
-
-  <tt/.CONDES/ is followed by the type, which may be <tt/constructor/,
-  <tt/destructor/ or a numeric value between 0 and 6 (where 0 is the same as
-  specifying <tt/constructor/ and 1 is equal to specifying <tt/destructor/).
-  The <tt><ref id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt>, <tt><ref
-  id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> and <tt><ref id=".INTERRUPTOR"
-  name=".INTERRUPTOR"></tt> commands are actually shortcuts for <tt/.CONDES/
-  with a type of <tt/constructor/ resp. <tt/destructor/ or <tt/interruptor/.
-
-  After the type, an optional priority may be specified. Higher numeric values
-  mean higher priority. If no priority is given, the default priority of 7 is
-  used. Be careful when assigning priorities to your own module constructors
-  so they won't interfere with the ones in the cc65 library.
-
-  Example:
-
-  <tscreen><verb>
-       .condes         ModuleInit, constructor
-       .condes         ModInit, 0, 16
-  </verb></tscreen>
-
-  See the <tt><ref id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt>, <tt><ref
-  id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> and <tt><ref id=".INTERRUPTOR"
-  name=".INTERRUPTOR"></tt> commands and the separate section <ref id="condes"
-  name="Module constructors/destructors"> explaining the feature in more
-  detail.
-
-
-<sect1><tt>.CONSTRUCTOR</tt><label id=".CONSTRUCTOR"><p>
-
-  Export a symbol and mark it as a module constructor. This may be used
-  together with the linker to build a table of constructor subroutines that
-  are called by the startup code.
-
-  Note: The linker has a feature to build a table of marked routines, but it
-  is your code that must call these routines, so just declaring a symbol as
-  constructor does nothing by itself.
-
-  A constructor is always exported as an absolute (16 bit) symbol. You don't
-  need to use an additional <tt/.export/ statement, this is implied by
-  <tt/.constructor/. It may have an optional priority that is separated by a
-  comma. Higher numeric values mean a higher priority. If no priority is
-  given, the default priority of 7 is used. Be careful when assigning
-  priorities to your own module constructors so they won't interfere with the
-  ones in the cc65 library.
-
-  Example:
-
-  <tscreen><verb>
-       .constructor    ModuleInit
-       .constructor    ModInit, 16
-  </verb></tscreen>
-
-  See the <tt><ref id=".CONDES" name=".CONDES"></tt> and <tt><ref
-  id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> commands and the separate section
-  <ref id="condes" name="Module constructors/destructors"> explaining the
-  feature in more detail.
-
-
-<sect1><tt>.DATA</tt><label id=".DATA"><p>
-
-  Switch to the DATA segment. The name of the DATA segment is always
-  "DATA", so this is a shortcut for
-
-  <tscreen><verb>
-               .segment  "DATA"
-  </verb></tscreen>
-
-  See also the <tt><ref id=".SEGMENT" name=".SEGMENT"></tt> command.
-
-
-<sect1><tt>.DBYT</tt><label id=".DBYT"><p>
-
-  Define word sized data with the hi and lo bytes swapped (use <tt/.WORD/ to
-  create word sized data in native 65XX format). Must be followed by a
-  sequence of (word ranged) expressions.
-
-  Example:
-
-  <tscreen><verb>
-       .dbyt   $1234, $4512
-  </verb></tscreen>
-
-  This will emit the bytes
-
-  <tscreen><verb>
-       $12 $34 $45 $12
-  </verb></tscreen>
-
-  into the current segment in that order.
-
-
-<sect1><tt>.DEBUGINFO</tt><label id=".DEBUGINFO"><p>
-
-  Switch on or off debug info generation. The default is off (that is,
-  the object file will not contain debug infos), but may be changed by the
-  -g switch on the command line.
-  The command must be followed by a '+' or '-' character to switch the
-  option on or off respectively.
-
-  Example:
-
-  <tscreen><verb>
-               .debuginfo      +       ; Generate debug info
-  </verb></tscreen>
-
-
-<sect1><tt>.DEFINE</tt><label id=".DEFINE"><p>
-
-  Start a define style macro definition. The command is followed by an
-  identifier (the macro name) and optionally by a list of formal arguments
-  in braces.
-
-  Please note that <tt/.DEFINE/ shares most disadvantages with its C
-  counterpart, so the general advice is, <bf/NOT/ do use <tt/.DEFINE/ if you
-  don't have to.
-
-  See also the <tt><ref id=".UNDEFINE" name=".UNDEFINE"></tt> command and
-  section <ref id="macros" name="Macros">.
-
-
-<sect1><tt>.DELMAC, .DELMACRO</tt><label id=".DELMACRO"><p>
-
-  Delete a classic macro (defined with <tt><ref id=".MACRO"
-  name=".MACRO"></tt>) . The command is followed by the name of an
-  existing macro. Its definition will be deleted together with the name.
-  If necessary, another macro with this name may be defined later.
-
-  See: <tt><ref id=".ENDMACRO" name=".ENDMACRO"></tt>,
-       <tt><ref id=".EXITMACRO" name=".EXITMACRO"></tt>,
-       <tt><ref id=".MACRO" name=".MACRO"></tt>
-
-  See also section <ref id="macros" name="Macros">.
-
-
-<sect1><tt>.DEF, .DEFINED</tt><label id=".DEFINED"><p>
-
-  Builtin function. The function expects an identifier as argument in braces.
-  The argument is evaluated, and the function yields "true" if the identifier
-  is a symbol that is already defined somewhere in the source file up to the
-  current position. Otherwise the function yields false. As an example, the
-  <tt><ref id=".IFDEF" name=".IFDEF"></tt> statement may be replaced by
-
-  <tscreen><verb>
-       .if     .defined(a)
-  </verb></tscreen>
-
-
-<sect1><tt>.DEFINEDMACRO</tt><label id=".DEFINEDMACRO"><p>
-
-  Builtin function. The function expects an identifier as argument in braces.
-  The argument is evaluated, and the function yields "true" if the identifier 
-  has already been defined as the name of a macro. Otherwise the function yields 
-  false. Example:
-
-  <tscreen><verb>
-        .macro add foo
-                clc
-                adc foo
-        .endmacro
-                 
-       .if     .definedmacro(add)
-                add #$01
-        .else
-                clc
-                adc #$01
-        .endif
-  </verb></tscreen>
-
-
-<sect1><tt>.DESTRUCTOR</tt><label id=".DESTRUCTOR"><p>
-
-  Export a symbol and mark it as a module destructor. This may be used
-  together with the linker to build a table of destructor subroutines that
-  are called by the startup code.
-
-  Note: The linker has a feature to build a table of marked routines, but it
-  is your code that must call these routines, so just declaring a symbol as
-  constructor does nothing by itself.
-
-  A destructor is always exported as an absolute (16 bit) symbol. You don't
-  need to use an additional <tt/.export/ statement, this is implied by
-  <tt/.destructor/. It may have an optional priority that is separated by a
-  comma. Higher numerical values mean a higher priority. If no priority is
-  given, the default priority of 7 is used. Be careful when assigning
-  priorities to your own module destructors so they won't interfere with the
-  ones in the cc65 library.
-
-  Example:
-
-  <tscreen><verb>
-       .destructor     ModuleDone
-       .destructor     ModDone, 16
-  </verb></tscreen>
-
-  See the <tt><ref id=".CONDES" name=".CONDES"></tt> and <tt><ref
-  id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt> commands and the separate
-  section <ref id="condes" name="Module constructors/destructors"> explaining
-  the feature in more detail.
-
-
-<sect1><tt>.DWORD</tt><label id=".DWORD"><p>
-
-  Define dword sized data (4 bytes) Must be followed by a sequence of
-  expressions.
-
-  Example:
-
-  <tscreen><verb>
-               .dword  $12344512, $12FA489
-  </verb></tscreen>
-
-
-<sect1><tt>.ELSE</tt><label id=".ELSE"><p>
-
-  Conditional assembly: Reverse the current condition.
-
-
-<sect1><tt>.ELSEIF</tt><label id=".ELSEIF"><p>
-
-  Conditional assembly: Reverse current condition and test a new one.
-
-
-<sect1><tt>.END</tt><label id=".END"><p>
-
-  Forced end of assembly. Assembly stops at this point, even if the command
-  is read from an include file.
-
-
-<sect1><tt>.ENDENUM</tt><label id=".ENDENUM"><p>
-
-  End a <tt><ref id=".ENUM" name=".ENUM"></tt> declaration.
-
-
-<sect1><tt>.ENDIF</tt><label id=".ENDIF"><p>
-
-  Conditional assembly: Close a <tt><ref id=".IF" name=".IF..."></tt> or
-  <tt><ref id=".ELSE" name=".ELSE"></tt> branch.
-
-
-<sect1><tt>.ENDMAC, .ENDMACRO</tt><label id=".ENDMACRO"><p>
-
-  Marks the end of a macro definition.
-
-  See: <tt><ref id=".DELMACRO" name=".DELMACRO"></tt>,
-       <tt><ref id=".EXITMACRO" name=".EXITMACRO"></tt>,
-       <tt><ref id=".MACRO" name=".MACRO"></tt>
-
-  See also section <ref id="macros" name="Macros">.
-
-
-<sect1><tt>.ENDPROC</tt><label id=".ENDPROC"><p>
-
-  End of local lexical level (see <tt><ref id=".PROC" name=".PROC"></tt>).
-
-
-<sect1><tt>.ENDREP, .ENDREPEAT</tt><label id=".ENDREPEAT"><p>
-
-  End a <tt><ref id=".REPEAT" name=".REPEAT"></tt> block.
-
-
-<sect1><tt>.ENDSCOPE</tt><label id=".ENDSCOPE"><p>
-
-  End of local lexical level (see <tt/<ref id=".SCOPE" name=".SCOPE">/).
-
-
-<sect1><tt>.ENDSTRUCT</tt><label id=".ENDSTRUCT"><p>
-
-  Ends a struct definition. See the <tt/<ref id=".STRUCT" name=".STRUCT">/
-  command and the separate section named <ref id="structs" name="&quot;Structs
-  and unions&quot;">.
-
-
-<sect1><tt>.ENDUNION</tt><label id=".ENDUNION"><p>
-
-  Ends a union definition. See the <tt/<ref id=".UNION" name=".UNION">/
-  command and the separate section named <ref id="structs" name="&quot;Structs
-  and unions&quot;">.
-
-
-<sect1><tt>.ENUM</tt><label id=".ENUM"><p>
-
-  Start an enumeration. This directive is very similar to the C <tt/enum/
-  keyword. If a name is given, a new scope is created for the enumeration,
-  otherwise the enumeration members are placed in the enclosing scope.
-
-  In the enumeration body, symbols are declared. The first symbol has a value
-  of zero, and each following symbol will get the value of the preceding plus
-  one. This behaviour may be overridden by an explicit assignment. Two symbols
-  may have the same value.
-
-  Example:
-
-  <tscreen><verb>
-        .enum   errorcodes
-                no_error
-                file_error
-                parse_error
-        .endenum
-  </verb></tscreen>
-
-  Above example will create a new scope named <tt/errorcodes/ with three
-  symbols in it that get the values 0, 1 and 2 respectively. Another way
-  to write this would have been:
-
-  <tscreen><verb>
-        .scope  errorcodes
-                no_error        = 0
-                file_error      = 1
-                parse_error     = 2
-        .endscope
-  </verb></tscreen>
-
-  Please note that explicit scoping must be used to access the identifiers:
-
-  <tscreen><verb>
-        .word   errorcodes::no_error
-  </verb></tscreen>
-
-  A more complex example:
-
-  <tscreen><verb>
-        .enum
-                EUNKNOWN        = -1
-                EOK
-                EFILE
-                EBUSY
-                EAGAIN
-                EWOULDBLOCK     = EAGAIN
-        .endenum
-  </verb></tscreen>
-
-  In this example, the enumeration does not have a name, which means that the
-  members will be visible in the enclosing scope and can be used in this scope
-  without explicit scoping. The first member (<tt/EUNKNOWN/) has the value -1.
-  The value for the following members is incremented by one, so <tt/EOK/ would
-  be zero and so on. <tt/EWOULDBLOCK/ is an alias for <tt/EGAIN/, so it has an
-  override for the value using an already defined symbol.
-
-
-<sect1><tt>.ERROR</tt><label id=".ERROR"><p>
-
-  Force an assembly error. The assembler will output an error message
-  preceded by "User error". Assembly is continued but no object file will
-  generated.
-
-  This command may be used to check for initial conditions that must be
-  set before assembling a source file.
-
-  Example:
-
-  <tscreen><verb>
-       .if     foo = 1
-       ...
-       .elseif bar = 1
-       ...
-       .else
-       .error  "Must define foo or bar!"
-       .endif
-  </verb></tscreen>
-
-  See also: <tt><ref id=".FATAL" name=".FATAL"></tt>,
-            <tt><ref id=".OUT" name=".OUT"></tt>,
-            <tt><ref id=".WARNING" name=".WARNING"></tt>
-
-
-<sect1><tt>.EXITMAC, .EXITMACRO</tt><label id=".EXITMACRO"><p>
-
-  Abort a macro expansion immediately. This command is often useful in
-  recursive macros.
-
-  See: <tt><ref id=".DELMACRO" name=".DELMACRO"></tt>,
-       <tt><ref id=".ENDMACRO" name=".ENDMACRO"></tt>,
-       <tt><ref id=".MACRO" name=".MACRO"></tt>
-
-  See also section <ref id="macros" name="Macros">.
-
-
-<sect1><tt>.EXPORT</tt><label id=".EXPORT"><p>
-
-  Make symbols accessible from other modules. Must be followed by a comma
-  separated list of symbols to export, with each one optionally followed by an
-  address specification and (also optional) an assignment. Using an additional
-  assignment in the export statement allows to define and export a symbol in
-  one statement. The default is to export the symbol with the address size it
-  actually has. The assembler will issue a warning, if the symbol is exported
-  with an address size smaller than the actual address size.
-
-  Examples:
-
-  <tscreen><verb>
-       .export foo
-        .export bar: far
-        .export foobar: far = foo * bar
-        .export baz := foobar, zap: far = baz - bar
-  </verb></tscreen>
-
-  As with constant definitions, using <tt/:=/ instead of <tt/=/ marks the
-  symbols as a label.
-
-  See: <tt><ref id=".EXPORTZP" name=".EXPORTZP"></tt>
-
-
-<sect1><tt>.EXPORTZP</tt><label id=".EXPORTZP"><p>
-
-  Make symbols accessible from other modules. Must be followed by a comma
-  separated list of symbols to export. The exported symbols are explicitly
-  marked as zero page symbols. An assignment may be included in the
-  <tt/.EXPORTZP/ statement. This allows to define and export a symbol in one
-  statement.
-
-  Examples:
-
-  <tscreen><verb>
-       .exportzp  foo, bar
-        .exportzp  baz := &dollar;02
-  </verb></tscreen>
-
-  See: <tt><ref id=".EXPORT" name=".EXPORT"></tt>
-
-
-<sect1><tt>.FARADDR</tt><label id=".FARADDR"><p>
-
-  Define far (24 bit) address data. The command must be followed by a
-  sequence of (not necessarily constant) expressions.
-
-  Example:
-
-  <tscreen><verb>
-       .faraddr        DrawCircle, DrawRectangle, DrawHexagon
-  </verb></tscreen>
-
-  See: <tt><ref id=".ADDR" name=".ADDR"></tt>
-
-
-<sect1><tt>.FATAL</tt><label id=".FATAL"><p>
-
-  Force an assembly error and terminate assembly. The assembler will output an
-  error message preceded by "User error" and will terminate assembly
-  immediately.
-
-  This command may be used to check for initial conditions that must be
-  set before assembling a source file.
-
-  Example:
-
-  <tscreen><verb>
-       .if     foo = 1
-       ...
-       .elseif bar = 1
-       ...
-       .else
-               .fatal  "Must define foo or bar!"
-       .endif
-  </verb></tscreen>
-
-  See also: <tt><ref id=".ERROR" name=".ERROR"></tt>,
-            <tt><ref id=".OUT" name=".OUT"></tt>,
-            <tt><ref id=".WARNING" name=".WARNING"></tt>
-
-
-<sect1><tt>.FEATURE</tt><label id=".FEATURE"><p>
-
-  This directive may be used to enable one or more compatibility features
-  of the assembler. While the use of <tt/.FEATURE/ should be avoided when
-  possible, it may be useful when porting sources written for other
-  assemblers. There is no way to switch a feature off, once you have
-  enabled it, so using
-
-  <tscreen><verb>
-               .FEATURE        xxx
-  </verb></tscreen>
-
-  will enable the feature until end of assembly is reached.
-
-  The following features are available:
-
-  <descrip>
-
-  <tag><tt>addrsize</tt><label id="addrsize"></tag>
-
-    Enables the .ADDRSIZE pseudo function. This function is experimental and not enabled by default.
-
-    See also: <tt><ref id=".ADDRSIZE" name=".ADDRSIZE"></tt>
-
-  <tag><tt>at_in_identifiers</tt><label id="at_in_identifiers"></tag>
-
-    Accept the at character (`@') as a valid character in identifiers. The
-    at character is not allowed to start an identifier, even with this
-    feature enabled.
-
-  <tag><tt>c_comments</tt><label id="c_comments"></tag>
-
-    Allow C like comments using <tt>/*</tt> and <tt>*/</tt> as left and right
-    comment terminators. Note that C comments may not be nested. There's also a
-    pitfall when using C like comments: All statements must be terminated by
-    "end-of-line". Using C like comments, it is possible to hide the newline,
-    which results in error messages. See the following non working example:
-
-    <tscreen><verb>
-        lda     #$00  /* This comment hides the newline
-*/      sta     $82
-    </verb></tscreen>
-
-  <tag><tt>dollar_in_identifiers</tt><label id="dollar_in_identifiers"></tag>
-
-    Accept the dollar sign (`&dollar;') as a valid character in identifiers. The
-    dollar character is not allowed to start an identifier, even with this
-    feature enabled.
-
-  <tag><tt>dollar_is_pc</tt><label id="dollar_is_pc"></tag>
-
-    The dollar sign may be used as an alias for the star (`*'), which
-    gives the value of the current PC in expressions.
-    Note: Assignment to the pseudo variable is not allowed.
-
-  <tag><tt>force_range</tt><label id="force_range"></tag>
-
-    Force expressions into their valid range for immediate addressing and
-    storage operators like <tt><ref id=".BYTE" name=".BYTE"></tt> and
-    <tt><ref id=".WORD" name=".WORD"></tt>. Be very careful with this one,
-    since it will completely disable error checks.
-
-  <tag><tt>labels_without_colons</tt><label id="labels_without_colons"></tag>
-
-    Allow labels without a trailing colon. These labels are only accepted,
-    if they start at the beginning of a line (no leading white space).
-
-  <tag><tt>leading_dot_in_identifiers</tt><label id="leading_dot_in_identifiers"></tag>
-
-    Accept the dot (`.') as the first character of an identifier. This may be
-    used for example to create macro names that start with a dot emulating
-    control directives of other assemblers. Note however, that none of the
-    reserved keywords built into the assembler, that starts with a dot, may be
-    overridden. When using this feature, you may also get into trouble if
-    later versions of the assembler define new keywords starting with a dot.
-
-  <tag><tt>loose_char_term</tt><label id="loose_char_term"></tag>
-
-    Accept single quotes as well as double quotes as terminators for char
-    constants.
-
-  <tag><tt>loose_string_term</tt><label id="loose_string_term"></tag>
-
-    Accept single quotes as well as double quotes as terminators for string
-    constants.
-
-  <tag><tt>missing_char_term</tt><label id="missing_char_term"></tag>
-
-    Accept single quoted character constants where the terminating quote is
-    missing.
-    <tscreen><verb>
-        lda     #'a
-    </verb></tscreen>
-    <em/Note:/ This does not work in conjunction with <tt/.FEATURE
-    loose_string_term/, since in this case the input would be ambiguous.
-
-  <tag><tt>org_per_seg</tt><label id="org_per_seg"></tag>
-
-    This feature makes relocatable/absolute mode local to the current segment.
-    Using <tt><ref id=".ORG" name=".ORG"></tt> when <tt/org_per_seg/ is in
-    effect will only enable absolute mode for the current segment. Dito for
-    <tt><ref id=".RELOC" name=".RELOC"></tt>.
-
-  <tag><tt>pc_assignment</tt><label id="pc_assignment"></tag>
-
-    Allow assignments to the PC symbol (`*' or `&dollar;' if <tt/dollar_is_pc/
-    is enabled). Such an assignment is handled identical to the <tt><ref
-    id=".ORG" name=".ORG"></tt> command (which is usually not needed, so just
-    removing the lines with the assignments may also be an option when porting
-    code written for older assemblers).
-
-  <tag><tt>ubiquitous_idents</tt><label id="ubiquitous_idents"></tag>
-
-    Allow the use of instructions names as names for macros and symbols. This
-    makes it possible to "overload" instructions by defining a macro with the
-    same name. This does also make it possible to introduce hard to find errors
-    in your code, so be careful!
-
-  <tag><tt>underline_in_numbers</tt><label id="underline_in_numbers"></tag>
-
-    Allow underlines within numeric constants. These may be used for grouping
-    the digits of numbers for easier reading.
-    Example:
-    <tscreen><verb>
-        .feature        underline_in_numbers
-        .word           %1100001110100101
-        .word           %1100_0011_1010_0101    ; Identical but easier to read
-    </verb></tscreen>
-
-  </descrip>
-
-  It is also possible to specify features on the command line using the
-  <tt><ref id="option--feature" name="--feature"></tt> command line option.
-  This is useful when translating sources written for older assemblers, when
-  you don't want to change the source code.
-
-  As an example, to translate sources written for Andre Fachats xa65
-  assembler, the features
-
-  <verb>
-       labels_without_colons, pc_assignment, loose_char_term
-  </verb>
-
-  may be helpful. They do not make ca65 completely compatible, so you may not
-  be able to translate the sources without changes, even when enabling these
-  features. However, I have found several sources that translate without
-  problems when enabling these features on the command line.
-
-
-<sect1><tt>.FILEOPT, .FOPT</tt><label id=".FOPT"><p>
-
-  Insert an option string into the object file. There are two forms of
-  this command, one specifies the option by a keyword, the second
-  specifies it as a number. Since usage of the second one needs knowledge
-  of the internal encoding, its use is not recommended and I will only
-  describe the first form here.
-
-  The command is followed by one of the keywords
-
-  <tscreen><verb>
-       author
-       comment
-       compiler
-  </verb></tscreen>
-
-  a comma and a string. The option is written into the object file
-  together with the string value. This is currently unidirectional and
-  there is no way to actually use these options once they are in the
-  object file.
-
-  Examples:
-
-  <tscreen><verb>
-               .fileopt        comment, "Code stolen from my brother"
-       .fileopt        compiler, "BASIC 2.0"
-       .fopt           author, "J. R. User"
-  </verb></tscreen>
-
-
-<sect1><tt>.FORCEIMPORT</tt><label id=".FORCEIMPORT"><p>
-
-  Import an absolute symbol from another module. The command is followed by a
-  comma separated list of symbols to import. The command is similar to <tt>
-  <ref id=".IMPORT" name=".IMPORT"></tt>, but the import reference is always
-  written to the generated object file, even if the symbol is never referenced
-  (<tt><ref id=".IMPORT" name=".IMPORT"></tt> will not generate import
-  references for unused symbols).
-
-  Example:
-
-  <tscreen><verb>
-       .forceimport    needthisone, needthistoo
-  </verb></tscreen>
-
-  See: <tt><ref id=".IMPORT" name=".IMPORT"></tt>
-
-
-<sect1><tt>.GLOBAL</tt><label id=".GLOBAL"><p>
-
-  Declare symbols as global. Must be followed by a comma separated list of
-  symbols to declare. Symbols from the list, that are defined somewhere in the
-  source, are exported, all others are imported. Additional <tt><ref
-  id=".IMPORT" name=".IMPORT"></tt> or <tt><ref id=".EXPORT"
-  name=".EXPORT"></tt> commands for the same symbol are allowed.
-
-  Example:
-
-  <tscreen><verb>
-       .global foo, bar
-  </verb></tscreen>
-
-
-<sect1><tt>.GLOBALZP</tt><label id=".GLOBALZP"><p>
-
-  Declare symbols as global. Must be followed by a comma separated list of
-  symbols to declare. Symbols from the list, that are defined somewhere in the
-  source, are exported, all others are imported. Additional <tt><ref
-  id=".IMPORTZP" name=".IMPORTZP"></tt> or <tt><ref id=".EXPORTZP"
-  name=".EXPORTZP"></tt> commands for the same symbol are allowed. The symbols
-  in the list are explicitly marked as zero page symbols.
-
-  Example:
-
-  <tscreen><verb>
-               .globalzp foo, bar
-  </verb></tscreen>
-
-<sect1><tt>.HIBYTES</tt><label id=".HIBYTES"><p>
-
-  Define byte sized data by extracting only the high byte (that is, bits 8-15) from
-  each expression.  This is equivalent to <tt><ref id=".BYTE" name=".BYTE"></tt> with
-  the operator '>' prepended to each expression in its list.
-
-  Example:
-
-  <tscreen><verb>
-        .lobytes         $1234, $2345, $3456, $4567
-       .hibytes         $fedc, $edcb, $dcba, $cba9
-  </verb></tscreen>
-
-  which is equivalent to
-
-  <tscreen><verb>
-        .byte            $34, $45, $56, $67
-       .byte            $fe, $ed, $dc, $cb
-  </verb></tscreen>
-
-  Example:
-
-  <tscreen><verb>
-        .define MyTable TableItem0, TableItem1, TableItem2, TableItem3
-
-       TableLookupLo:   .lobytes MyTable
-       TableLookupHi:   .hibytes MyTable
-  </verb></tscreen>
-
-  which is equivalent to
-
-  <tscreen><verb>
-        TableLookupLo:   .byte &lt;TableItem0, &lt;TableItem1, &lt;TableItem2, &lt;TableItem3
-       TableLookupHi:   .byte &gt;TableItem0, &gt;TableItem1, &gt;TableItem2, &gt;TableItem3
-  </verb></tscreen>
-
-  See also: <tt><ref id=".BYTE" name=".BYTE"></tt>,
-            <tt><ref id=".LOBYTES" name=".LOBYTES"></tt>,
-            <tt><ref id=".BANKBYTES" name=".BANKBYTES"></tt>
-
-
-<sect1><tt>.I16</tt><label id=".I16"><p>
-
-  Valid only in 65816 mode. Switch the index registers to 16 bit.
-
-  Note: This command will not emit any code, it will tell the assembler to
-  create 16 bit operands for immediate operands.
-
-  See also the <tt><ref id=".I8" name=".I8"></tt> and <tt><ref id=".SMART"
-  name=".SMART"></tt> commands.
-
-
-<sect1><tt>.I8</tt><label id=".I8"><p>
-
-  Valid only in 65816 mode. Switch the index registers to 8 bit.
-
-  Note: This command will not emit any code, it will tell the assembler to
-  create 8 bit operands for immediate operands.
-
-  See also the <tt><ref id=".I16" name=".I16"></tt> and <tt><ref id=".SMART"
-  name=".SMART"></tt> commands.
-
-
-<sect1><tt>.IF</tt><label id=".IF"><p>
-
-  Conditional assembly: Evaluate an expression and switch assembler output
-  on or off depending on the expression. The expression must be a constant
-  expression, that is, all operands must be defined.
-
-  A expression value of zero evaluates to FALSE, any other value evaluates
-  to TRUE.
-
-
-<sect1><tt>.IFBLANK</tt><label id=".IFBLANK"><p>
-
-  Conditional assembly: Check if there are any remaining tokens in this line,
-  and evaluate to FALSE if this is the case, and to TRUE otherwise. If the
-  condition is not true, further lines are not assembled until an <tt><ref
-  id=".ELSE" name=".ESLE"></tt>, <tt><ref id=".ELSEIF" name=".ELSEIF"></tt> or
-  <tt><ref id=".ENDIF" name=".ENDIF"></tt> directive.
-
-  This command is often used to check if a macro parameter was given. Since an
-  empty macro parameter will evaluate to nothing, the condition will evaluate
-  to TRUE if an empty parameter was given.
-
-  Example:
-
-  <tscreen><verb>
-               .macro     arg1, arg2
-               .ifblank   arg2
-                          lda     #arg1
-               .else
-                          lda     #arg2
-               .endif
-               .endmacro
-  </verb></tscreen>
-
-  See also: <tt><ref id=".BLANK" name=".BLANK"></tt>
-
-
-<sect1><tt>.IFCONST</tt><label id=".IFCONST"><p>
-
-  Conditional assembly: Evaluate an expression and switch assembler output
-  on or off depending on the constness of the expression.
-
-  A const expression evaluates to to TRUE, a non const expression (one
-  containing an imported or currently undefined symbol) evaluates to
-  FALSE.
-
-  See also: <tt><ref id=".CONST" name=".CONST"></tt>
-
-
-<sect1><tt>.IFDEF</tt><label id=".IFDEF"><p>
-
-  Conditional assembly: Check if a symbol is defined. Must be followed by
-  a symbol name. The condition is true if the the given symbol is already
-  defined, and false otherwise.
-
-  See also: <tt><ref id=".DEFINED" name=".DEFINED"></tt>
-
-
-<sect1><tt>.IFNBLANK</tt><label id=".IFNBLANK"><p>
-
-  Conditional assembly: Check if there are any remaining tokens in this line,
-  and evaluate to TRUE if this is the case, and to FALSE otherwise. If the
-  condition is not true, further lines are not assembled until an <tt><ref
-  id=".ELSE" name=".ELSE"></tt>, <tt><ref id=".ELSEIF" name=".ELSEIF"></tt> or
-  <tt><ref id=".ENDIF" name=".ENDIF"></tt> directive.
-
-  This command is often used to check if a macro parameter was given.
-  Since an empty macro parameter will evaluate to nothing, the condition
-  will evaluate to FALSE if an empty parameter was given.
-
-  Example:
-
-  <tscreen><verb>
-       .macro     arg1, arg2
-                  lda     #arg1
-       .ifnblank  arg2
-                  lda     #arg2
-       .endif
-       .endmacro
-  </verb></tscreen>
-
-  See also: <tt><ref id=".BLANK" name=".BLANK"></tt>
-
-
-<sect1><tt>.IFNDEF</tt><label id=".IFNDEF"><p>
-
-  Conditional assembly: Check if a symbol is defined. Must be followed by
-  a symbol name. The condition is true if the the given symbol is not
-  defined, and false otherwise.
-
-  See also: <tt><ref id=".DEFINED" name=".DEFINED"></tt>
-
-
-<sect1><tt>.IFNREF</tt><label id=".IFNREF"><p>
-
-  Conditional assembly: Check if a symbol is referenced. Must be followed
-  by a symbol name. The condition is true if if the the given symbol was
-  not referenced before, and false otherwise.
-
-  See also: <tt><ref id=".REFERENCED" name=".REFERENCED"></tt>
-
-
-<sect1><tt>.IFP02</tt><label id=".IFP02"><p>
-
-  Conditional assembly: Check if the assembler is currently in 6502 mode
-  (see <tt><ref id=".P02" name=".P02"></tt> command).
-
-
-<sect1><tt>.IFP816</tt><label id=".IFP816"><p>
-
-  Conditional assembly: Check if the assembler is currently in 65816 mode
-  (see <tt><ref id=".P816" name=".P816"></tt> command).
-
-
-<sect1><tt>.IFPC02</tt><label id=".IFPC02"><p>
-
-  Conditional assembly: Check if the assembler is currently in 65C02 mode
-  (see <tt><ref id=".PC02" name=".PC02"></tt> command).
-
-
-<sect1><tt>.IFPSC02</tt><label id=".IFPSC02"><p>
-
-  Conditional assembly: Check if the assembler is currently in 65SC02 mode
-  (see <tt><ref id=".PSC02" name=".PSC02"></tt> command).
-
-
-<sect1><tt>.IFREF</tt><label id=".IFREF"><p>
-
-  Conditional assembly: Check if a symbol is referenced. Must be followed
-  by a symbol name. The condition is true if if the the given symbol was
-  referenced before, and false otherwise.
-
-  This command may be used to build subroutine libraries in include files
-  (you may use separate object modules for this purpose too).
-
-  Example:
-
-  <tscreen><verb>
-       .ifref  ToHex                   ; If someone used this subroutine
-       ToHex:  tay                     ; Define subroutine
-               lda     HexTab,y
-               rts
-       .endif
-  </verb></tscreen>
-
-  See also: <tt><ref id=".REFERENCED" name=".REFERENCED"></tt>
-
-
-<sect1><tt>.IMPORT</tt><label id=".IMPORT"><p>
-
-  Import a symbol from another module. The command is followed by a comma
-  separated list of symbols to import, with each one optionally followed by
-  an address specification.
-
-  Example:
-
-  <tscreen><verb>
-       .import foo
-        .import bar: zeropage
-  </verb></tscreen>
-
-  See: <tt><ref id=".IMPORTZP" name=".IMPORTZP"></tt>
-
-
-<sect1><tt>.IMPORTZP</tt><label id=".IMPORTZP"><p>
-
-  Import a symbol from another module. The command is followed by a comma
-  separated list of symbols to import. The symbols are explicitly imported
-  as zero page symbols (that is, symbols with values in byte range).
-
-  Example:
-
-  <tscreen><verb>
-       .importzp       foo, bar
-  </verb></tscreen>
-
-  See: <tt><ref id=".IMPORT" name=".IMPORT"></tt>
-
-
-<sect1><tt>.INCBIN</tt><label id=".INCBIN"><p>
-
-  Include a file as binary data. The command expects a string argument
-  that is the name of a file to include literally in the current segment.
-  In addition to that, a start offset and a size value may be specified,
-  separated by commas. If no size is specified, all of the file from the
-  start offset to end-of-file is used. If no start position is specified
-  either, zero is assumed (which means that the whole file is inserted).
-
-  Example:
-
-  <tscreen><verb>
-       ; Include whole file
-       .incbin         "sprites.dat"
-
-       ; Include file starting at offset 256
-       .incbin         "music.dat", $100
-
-       ; Read 100 bytes starting at offset 200
-       .incbin         "graphics.dat", 200, 100
-  </verb></tscreen>
-
-
-<sect1><tt>.INCLUDE</tt><label id=".INCLUDE"><p>
-
-  Include another file. Include files may be nested up to a depth of 16.
-
-  Example:
-
-  <tscreen><verb>
-       .include        "subs.inc"
-  </verb></tscreen>
-
-
-<sect1><tt>.INTERRUPTOR</tt><label id=".INTERRUPTOR"><p>
-
-  Export a symbol and mark it as an interruptor. This may be used together
-  with the linker to build a table of interruptor subroutines that are called
-  in an interrupt.
-
-  Note: The linker has a feature to build a table of marked routines, but it
-  is your code that must call these routines, so just declaring a symbol as
-  interruptor does nothing by itself.
-
-  An interruptor is always exported as an absolute (16 bit) symbol. You don't
-  need to use an additional <tt/.export/ statement, this is implied by
-  <tt/.interruptor/. It may have an optional priority that is separated by a
-  comma. Higher numeric values mean a higher priority. If no priority is
-  given, the default priority of 7 is used. Be careful when assigning
-  priorities to your own module constructors so they won't interfere with the
-  ones in the cc65 library.
-
-  Example:
-
-  <tscreen><verb>
-       .interruptor    IrqHandler
-       .interruptor    Handler, 16
-  </verb></tscreen>
-
-  See the <tt><ref id=".CONDES" name=".CONDES"></tt> command and the separate
-  section <ref id="condes" name="Module constructors/destructors"> explaining
-  the feature in more detail.
-
-
-<sect1><tt>.ISMNEM, .ISMNEMONIC</tt><label id=".ISMNEMONIC"><p>
-
-  Builtin function. The function expects an identifier as argument in braces.
-  The argument is evaluated, and the function yields "true" if the identifier
-  is defined as an instruction mnemonic that is recognized by the assembler.
-  Example:
-
-  <tscreen><verb>
-       .if     .not .ismnemonic(ina)
-               .macro ina
-                       clc
-                       adc #$01
-               .endmacro
-       .endif
-  </verb></tscreen>
-
-
-<sect1><tt>.LINECONT</tt><label id=".LINECONT"><p>
-
-  Switch on or off line continuations using the backslash character
-  before a newline. The option is off by default.
-  Note: Line continuations do not work in a comment. A backslash at the
-  end of a comment is treated as part of the comment and does not trigger
-  line continuation.
-  The command must be followed by a '+' or '-' character to switch the
-  option on or off respectively.
-
-  Example:
-
-  <tscreen><verb>
-               .linecont       +               ; Allow line continuations
-
-       lda     \
-               #$20                    ; This is legal now
-  </verb></tscreen>
-
-
-<sect1><tt>.LIST</tt><label id=".LIST"><p>
-
-  Enable output to the listing. The command must be followed by a boolean
-  switch ("on", "off", "+" or "-") and will enable or disable listing
-  output.
-  The option has no effect if the listing is not enabled by the command line
-  switch -l. If -l is used, an internal counter is set to 1. Lines are output
-  to the listing file, if the counter is greater than zero, and suppressed if
-  the counter is zero. Each use of <tt/.LIST/ will increment or decrement the
-  counter.
-
-  Example:
-
-  <tscreen><verb>
-               .list   on              ; Enable listing output
-  </verb></tscreen>
-
-
-<sect1><tt>.LISTBYTES</tt><label id=".LISTBYTES"><p>
-
-  Set, how many bytes are shown in the listing for one source line. The
-  default is 12, so the listing will show only the first 12 bytes for any
-  source line that generates more than 12 bytes of code or data.
-  The directive needs an argument, which is either "unlimited", or an
-  integer constant in the range 4..255.
-
-  Examples:
-
-  <tscreen><verb>
-               .listbytes      unlimited       ; List all bytes
-       .listbytes      12              ; List the first 12 bytes
-       .incbin         "data.bin"      ; Include large binary file
-  </verb></tscreen>
-
-
-<sect1><tt>.LOBYTES</tt><label id=".LOBYTES"><p>
-
-  Define byte sized data by extracting only the low byte (that is, bits 0-7) from
-  each expression.  This is equivalent to <tt><ref id=".BYTE" name=".BYTE"></tt> with
-  the operator '<' prepended to each expression in its list.
-
-  Example:
-
-  <tscreen><verb>
-        .lobytes         $1234, $2345, $3456, $4567
-       .hibytes         $fedc, $edcb, $dcba, $cba9
-  </verb></tscreen>
-
-  which is equivalent to
-
-  <tscreen><verb>
-        .byte            $34, $45, $56, $67
-       .byte            $fe, $ed, $dc, $cb
-  </verb></tscreen>
-
-  Example:
-
-  <tscreen><verb>
-        .define MyTable TableItem0, TableItem1, TableItem2, TableItem3
-
-       TableLookupLo:   .lobytes MyTable
-       TableLookupHi:   .hibytes MyTable
-  </verb></tscreen>
-
-  which is equivalent to
-
-  <tscreen><verb>
-        TableLookupLo:   .byte &lt;TableItem0, &lt;TableItem1, &lt;TableItem2, &lt;TableItem3
-       TableLookupHi:   .byte &gt;TableItem0, &gt;TableItem1, &gt;TableItem2, &gt;TableItem3
-  </verb></tscreen>
-
-  See also: <tt><ref id=".BYTE" name=".BYTE"></tt>,
-            <tt><ref id=".HIBYTES" name=".HIBYTES"></tt>,
-            <tt><ref id=".BANKBYTES" name=".BANKBYTES"></tt>
-
-
-<sect1><tt>.LOCAL</tt><label id=".LOCAL"><p>
-
-  This command may only be used inside a macro definition. It declares a
-  list of identifiers as local to the macro expansion.
-
-  A problem when using macros are labels: Since they don't change their name,
-  you get a "duplicate symbol" error if the macro is expanded the second time.
-  Labels declared with <tt><ref id=".LOCAL" name=".LOCAL"></tt> have their
-  name mapped to an internal unique name (<tt/___ABCD__/) with each macro
-  invocation.
-
-  Some other assemblers start a new lexical block inside a macro expansion.
-  This has some drawbacks however, since that will not allow <em/any/ symbol
-  to be visible outside a macro, a feature that is sometimes useful. The
-  <tt><ref id=".LOCAL" name=".LOCAL"></tt> command is in my eyes a better way
-  to address the problem.
-
-  You get an error when using <tt><ref id=".LOCAL" name=".LOCAL"></tt> outside
-  a macro.
-
-
-<sect1><tt>.LOCALCHAR</tt><label id=".LOCALCHAR"><p>
-
-  Defines the character that start "cheap" local labels. You may use one
-  of '@' and '?' as start character. The default is '@'.
-
-  Cheap local labels are labels that are visible only between two non
-  cheap labels. This way you can reuse identifiers like "<tt/loop/" without
-  using explicit lexical nesting.
-
-  Example:
-
-  <tscreen><verb>
-               .localchar      '?'
-
-       Clear:  lda     #$00            ; Global label
-               ?Loop:  sta     Mem,y           ; Local label
-               dey
-               bne     ?Loop           ; Ok
-               rts
-       Sub:    ...                     ; New global label
-               bne     ?Loop           ; ERROR: Unknown identifier!
-  </verb></tscreen>
-
-
-<sect1><tt>.MACPACK</tt><label id=".MACPACK"><p>
-
-  Insert a predefined macro package. The command is followed by an
-  identifier specifying the macro package to insert. Available macro
-  packages are:
-
-  <tscreen><verb>
-        atari           Defines the scrcode macro.
-        cbm             Defines the scrcode macro.
-        cpu             Defines constants for the .CPU variable.
-        generic         Defines generic macroes like add, sub, and blt.
-        longbranch      Defines conditional long-jump macroes.
-  </verb></tscreen>
-
-  Including a macro package twice, or including a macro package that
-  redefines already existing macros will lead to an error.
-
-  Example:
-
-  <tscreen><verb>
-               .macpack        longbranch      ; Include macro package
-
-                       cmp     #$20            ; Set condition codes
-                       jne     Label           ; Jump long on condition
-  </verb></tscreen>
-
-  Macro packages are explained in more detail in section <ref
-  id="macropackages" name="Macro packages">.
-
-
-<sect1><tt>.MAC, .MACRO</tt><label id=".MACRO"><p>
-
-  Start a classic macro definition. The command is followed by an identifier
-  (the macro name) and optionally by a comma separated list of identifiers
-  that are macro parameters. A macro definition is terminated by <tt><ref
-  id=".ENDMACRO" name=".ENDMACRO"></tt>.
-
-  Example:
-
-  <tscreen><verb>
-               .macro  ldax    arg             ; Define macro ldax
-                lda     arg
-                ldx     arg+1
-  </verb></tscreen>
-
-  See: <tt><ref id=".DELMACRO" name=".DELMACRO"></tt>,
-       <tt><ref id=".ENDMACRO" name=".ENDMACRO"></tt>,
-       <tt><ref id=".EXITMACRO" name=".EXITMACRO"></tt>
-
-  See also section <ref id="macros" name="Macros">.
-
-
-<sect1><tt>.ORG</tt><label id=".ORG"><p>
-
-  Start a section of absolute code. The command is followed by a constant
-  expression that gives the new PC counter location for which the code is
-  assembled. Use <tt><ref id=".RELOC" name=".RELOC"></tt> to switch back to
-  relocatable code.
-
-  By default, absolute/relocatable mode is global (valid even when switching
-  segments). Using <tt>.FEATURE <ref id="org_per_seg" name="org_per_seg"></tt>
-  it can be made segment local.
-
-  Please note that you <em/do not need/ <tt/.ORG/ in most cases. Placing
-  code at a specific address is the job of the linker, not the assembler, so
-  there is usually no reason to assemble code to a specific address.
-
-  Example:
-
-  <tscreen><verb>
-       .org    $7FF            ; Emit code starting at $7FF
-  </verb></tscreen>
-
-
-<sect1><tt>.OUT</tt><label id=".OUT"><p>
-
-  Output a string to the console without producing an error. This command
-  is similar to <tt/.ERROR/, however, it does not force an assembler error
-  that prevents the creation of an object file.
-
-  Example:
-
-  <tscreen><verb>
-       .out    "This code was written by the codebuster(tm)"
-  </verb></tscreen>
-
-  See also: <tt><ref id=".ERROR" name=".ERROR"></tt>,
-            <tt><ref id=".FATAL" name=".FATAL"></tt>,
-            <tt><ref id=".WARNING" name=".WARNING"></tt>
-
-
-<sect1><tt>.P02</tt><label id=".P02"><p>
-
-  Enable the 6502 instruction set, disable 65SC02, 65C02 and 65816
-  instructions. This is the default if not overridden by the
-  <tt><ref id="option--cpu" name="--cpu"></tt> command line option.
-
-  See: <tt><ref id=".PC02" name=".PC02"></tt>, <tt><ref id=".PSC02"
-  name=".PSC02"></tt> and <tt><ref id=".P816" name=".P816"></tt>
-
-
-<sect1><tt>.P816</tt><label id=".P816"><p>
-
-  Enable the 65816 instruction set. This is a superset of the 65SC02 and
-  6502 instruction sets.
-
-  See: <tt><ref id=".P02" name=".P02"></tt>, <tt><ref id=".PSC02"
-  name=".PSC02"></tt> and <tt><ref id=".PC02" name=".PC02"></tt>
-
-
-<sect1><tt>.PAGELEN, .PAGELENGTH</tt><label id=".PAGELENGTH"><p>
-
-  Set the page length for the listing. Must be followed by an integer
-  constant. The value may be "unlimited", or in the range 32 to 127. The
-  statement has no effect if no listing is generated. The default value is -1
-  (unlimited) but may be overridden by the <tt/--pagelength/ command line
-  option. Beware: Since ca65 is a one pass assembler, the listing is generated
-  after assembly is complete, you cannot use multiple line lengths with one
-  source. Instead, the value set with the last <tt/.PAGELENGTH/ is used.
-
-  Examples:
-
-  <tscreen><verb>
-       .pagelength     66              ; Use 66 lines per listing page
-
-       .pagelength     unlimited       ; Unlimited page length
-  </verb></tscreen>
-
-
-<sect1><tt>.PC02</tt><label id=".PC02"><p>
-
-  Enable the 65C02 instructions set. This instruction set includes all
-  6502 and 65SC02 instructions.
-
-  See: <tt><ref id=".P02" name=".P02"></tt>, <tt><ref id=".PSC02"
-  name=".PSC02"></tt> and <tt><ref id=".P816" name=".P816"></tt>
-
-
-<sect1><tt>.POPCPU</tt><label id=".POPCPU"><p>
-
-  Pop the last CPU setting from the stack, and activate it.
-
-  This command will switch back to the CPU that was last pushed onto the CPU
-  stack using the <tt><ref id=".PUSHCPU" name=".PUSHCPU"></tt> command, and
-  remove this entry from the stack.
-
-  The assembler will print an error message if the CPU stack is empty when
-  this command is issued.
-
-  See: <tt><ref id=".CPU" name=".CPU"></tt>, <tt><ref id=".PUSHCPU"
-  name=".PUSHCPU"></tt>, <tt><ref id=".SETCPU" name=".SETCPU"></tt>
-
-
-<sect1><tt>.POPSEG</tt><label id=".POPSEG"><p>
-
-  Pop the last pushed segment from the stack, and set it.
-
-  This command will switch back to the segment that was last pushed onto the
-  segment stack using the <tt><ref id=".PUSHSEG" name=".PUSHSEG"></tt>
-  command, and remove this entry from the stack.
-
-  The assembler will print an error message if the segment stack is empty
-  when this command is issued.
-
-  See: <tt><ref id=".PUSHSEG" name=".PUSHSEG"></tt>
-
-
-<sect1><tt>.PROC</tt><label id=".PROC"><p>
-
-  Start a nested lexical level with the given name and adds a symbol with this
-  name to the enclosing scope. All new symbols from now on are in the local
-  lexical level and are accessible from outside only via <ref id="scopesyntax"
-  name="explicit scope specification">. Symbols defined outside this local
-  level may be accessed as long as their names are not used for new symbols
-  inside the level. Symbols names in other lexical levels do not clash, so you
-  may use the same names for identifiers. The lexical level ends when the
-  <tt><ref id=".ENDPROC" name=".ENDPROC"></tt> command is read. Lexical levels
-  may be nested up to a depth of 16 (this is an artificial limit to protect
-  against errors in the source).
-
-  Note: Macro names are always in the global level and in a separate name
-  space. There is no special reason for this, it's just that I've never
-  had any need for local macro definitions.
-
-  Example:
-
-  <tscreen><verb>
-               .proc   Clear           ; Define Clear subroutine, start new level
-               lda     #$00
-       L1:     sta     Mem,y   ; L1 is local and does not cause a
-                                       ; duplicate symbol error if used in other
-                               ; places
-               dey
-               bne     L1      ; Reference local symbol
-               rts
-       .endproc                ; Leave lexical level
-  </verb></tscreen>
-
-  See: <tt/<ref id=".ENDPROC" name=".ENDPROC">/ and <tt/<ref id=".SCOPE"
-  name=".SCOPE">/
-
-
-<sect1><tt>.PSC02</tt><label id=".PSC02"><p>
-
-  Enable the 65SC02 instructions set. This instruction set includes all
-  6502 instructions.
-
-  See: <tt><ref id=".P02" name=".P02"></tt>, <tt><ref id=".PC02"
-  name=".PC02"></tt> and <tt><ref id=".P816" name=".P816"></tt>
-
-
-<sect1><tt>.PUSHCPU</tt><label id=".PUSHCPU"><p>
-
-  Push the currently active CPU onto a stack. The stack has a size of 8
-  entries.
-
-  <tt/.PUSHCPU/ allows together with <tt><ref id=".POPCPU"
-  name=".POPCPU"></tt> to switch to another CPU and to restore the old CPU
-  later, without knowledge of the current CPU setting.
-
-  The assembler will print an error message if the CPU stack is already full,
-  when this command is issued.
-
-  See: <tt><ref id=".CPU" name=".CPU"></tt>, <tt><ref id=".POPCPU"
-  name=".POPCPU"></tt>, <tt><ref id=".SETCPU" name=".SETCPU"></tt>
-
-
-<sect1><tt>.PUSHSEG</tt><label id=".PUSHSEG"><p>
-
-  Push the currently active segment onto a stack. The entries on the stack
-  include the name of the segment and the segment type. The stack has a size
-  of 16 entries.
-
-  <tt/.PUSHSEG/ allows together with <tt><ref id=".POPSEG" name=".POPSEG"></tt>
-  to switch to another segment and to restore the old segment later, without
-  even knowing the name and type of the current segment.
-
-  The assembler will print an error message if the segment stack is already
-  full, when this command is issued.
-
-  See: <tt><ref id=".POPSEG" name=".POPSEG"></tt>
-
-
-<sect1><tt>.RELOC</tt><label id=".RELOC"><p>
-
-  Switch back to relocatable mode. See the <tt><ref id=".ORG"
-  name=".ORG"></tt> command.
-
-
-<sect1><tt>.REPEAT</tt><label id=".REPEAT"><p>
-
-  Repeat all commands between <tt/.REPEAT/ and <tt><ref id=".ENDREPEAT"
-  name=".ENDREPEAT"></tt> constant number of times. The command is followed by
-  a constant expression that tells how many times the commands in the body
-  should get repeated. Optionally, a comma and an identifier may be specified.
-  If this identifier is found in the body of the repeat statement, it is
-  replaced by the current repeat count (starting with zero for the first time
-  the body is repeated).
-
-  <tt/.REPEAT/ statements may be nested. If you use the same repeat count
-  identifier for a nested <tt/.REPEAT/ statement, the one from the inner
-  level will be used, not the one from the outer level.
-
-  Example:
-
-  The following macro will emit a string that is "encrypted" in that all
-  characters of the string are XORed by the value $55.
-
-  <tscreen><verb>
-       .macro  Crypt   Arg
-               .repeat .strlen(Arg), I
-               .byte   .strat(Arg, I) ^ $55
-               .endrep
-       .endmacro
-  </verb></tscreen>
-
-  See: <tt><ref id=".ENDREPEAT" name=".ENDREPEAT"></tt>
-
-
-<sect1><tt>.RES</tt><label id=".RES"><p>
-
-  Reserve storage. The command is followed by one or two constant
-  expressions. The first one is mandatory and defines, how many bytes of
-  storage should be defined. The second, optional expression must by a
-  constant byte value that will be used as value of the data. If there
-  is no fill value given, the linker will use the value defined in the
-  linker configuration file (default: zero).
-
-  Example:
-
-  <tscreen><verb>
-       ; Reserve 12 bytes of memory with value $AA
-       .res    12, $AA
-  </verb></tscreen>
-
-
-<sect1><tt>.RODATA</tt><label id=".RODATA"><p>
-
-  Switch to the RODATA segment. The name of the RODATA segment is always
-  "RODATA", so this is a shortcut for
-
-  <tscreen><verb>
-               .segment  "RODATA"
-  </verb></tscreen>
-
-  The RODATA segment is a segment that is used by the compiler for
-  readonly data like string constants.
-
-  See also the <tt><ref id=".SEGMENT" name=".SEGMENT"></tt> command.
-
-
-<sect1><tt>.SCOPE</tt><label id=".SCOPE"><p>
-
-  Start a nested lexical level with the given name. All new symbols from now
-  on are in the local lexical level and are accessible from outside only via
-  <ref id="scopesyntax" name="explicit scope specification">. Symbols defined
-  outside this local level may be accessed as long as their names are not used
-  for new symbols inside the level. Symbols names in other lexical levels do
-  not clash, so you may use the same names for identifiers. The lexical level
-  ends when the <tt><ref id=".ENDSCOPE" name=".ENDSCOPE"></tt> command is
-  read. Lexical levels may be nested up to a depth of 16 (this is an
-  artificial limit to protect against errors in the source).
-
-  Note: Macro names are always in the global level and in a separate name
-  space. There is no special reason for this, it's just that I've never
-  had any need for local macro definitions.
-
-  Example:
-
-  <tscreen><verb>
-               .scope  Error                   ; Start new scope named Error
-                None = 0                ; No error
-                File = 1                ; File error
-                Parse = 2               ; Parse error
-       .endscope                       ; Close lexical level
-
-                ...
-                lda #Error::File        ; Use symbol from scope Error
-  </verb></tscreen>
-
-  See: <tt/<ref id=".ENDSCOPE" name=".ENDSCOPE">/ and <tt/<ref id=".PROC"
-  name=".PROC">/
-
-
-<sect1><tt>.SEGMENT</tt><label id=".SEGMENT"><p>
-
-  Switch to another segment. Code and data is always emitted into a
-  segment, that is, a named section of data. The default segment is
-  "CODE". There may be up to 254 different segments per object file
-  (and up to 65534 per executable). There are shortcut commands for
-  the most common segments ("ZEROPAGE", "CODE", "RODATA", "DATA", and "BSS").
-
-  The command is followed by a string containing the segment name (there are
-  some constraints for the name - as a rule of thumb use only those segment
-  names that would also be valid identifiers). There may also be an optional
-  address size separated by a colon. See the section covering <tt/<ref
-  id="address-sizes" name="address sizes">/ for more information.
-
-  The default address size for a segment depends on the memory model specified
-  on the command line. The default is "absolute", which means that you don't
-  have to use an address size modifier in most cases.
-
-  "absolute" means that the is a segment with 16 bit (absolute) addressing.
-  That is, the segment will reside somewhere in core memory outside the zero
-  page. "zeropage" (8 bit) means that the segment will be placed in the zero
-  page and direct (short) addressing is possible for data in this segment.
-
-  Beware: Only labels in a segment with the zeropage attribute are marked
-  as reachable by short addressing. The `*' (PC counter) operator will
-  work as in other segments and will create absolute variable values.
-
-  Please note that a segment cannot have two different address sizes. A
-  segment specified as zeropage cannot be declared as being absolute later.
-
-  Examples:
-
-  <tscreen><verb>
-               .segment "ROM2"                 ; Switch to ROM2 segment
-       .segment "ZP2": zeropage        ; New direct segment
-       .segment "ZP2"                  ; Ok, will use last attribute
-       .segment "ZP2": absolute        ; Error, redecl mismatch
-  </verb></tscreen>
-
-  See: <tt><ref id=".BSS" name=".BSS"></tt>, <tt><ref id=".CODE"
-  name=".CODE"></tt>, <tt><ref id=".DATA" name=".DATA"></tt>, <tt><ref
-  id=".RODATA" name=".RODATA"></tt>, and <tt><ref id=".ZEROPAGE"
-  name=".ZEROPAGE"></tt>
-
-
-<sect1><tt>.SET</tt><label id=".SET"><p>
-
-  <tt/.SET/ is used to assign a value to a variable. See <ref id="variables"
-  name="Numeric variables"> for a full description.
-
-
-<sect1><tt>.SETCPU</tt><label id=".SETCPU"><p>
-
-  Switch the CPU instruction set. The command is followed by a string that
-  specifies the CPU. Possible values are those that can also be supplied to
-  the <tt><ref id="option--cpu" name="--cpu"></tt> command line option,
-  namely: 6502, 6502X, 65SC02, 65C02, 65816 and HuC6280.
-
-  See: <tt><ref id=".CPU" name=".CPU"></tt>,
-       <tt><ref id=".IFP02" name=".IFP02"></tt>,
-       <tt><ref id=".IFP816" name=".IFP816"></tt>,
-       <tt><ref id=".IFPC02" name=".IFPC02"></tt>,
-       <tt><ref id=".IFPSC02" name=".IFPSC02"></tt>,
-       <tt><ref id=".P02" name=".P02"></tt>,
-       <tt><ref id=".P816" name=".P816"></tt>,
-       <tt><ref id=".PC02" name=".PC02"></tt>,
-       <tt><ref id=".PSC02" name=".PSC02"></tt>
-
-
-<sect1><tt>.SMART</tt><label id=".SMART"><p>
-
-  Switch on or off smart mode. The command must be followed by a '+' or '-'
-  character to switch the option on or off respectively. The default is off
-  (that is, the assembler doesn't try to be smart), but this default may be
-  changed by the -s switch on the command line.
-
-  In smart mode the assembler will do the following:
-
-  <itemize>
-  <item>Track usage of the <tt/REP/ and <tt/SEP/ instructions in 65816 mode
-        and update the operand sizes accordingly. If the operand of such an
-        instruction cannot be evaluated by the assembler (for example, because
-        the operand is an imported symbol), a warning is issued. Beware: Since
-        the assembler cannot trace the execution flow this may lead to false
-        results in some cases. If in doubt, use the <tt/.Inn/ and <tt/.Ann/
-        instructions to tell the assembler about the current settings.
-  <item>In 65816 mode, replace a <tt/RTS/ instruction by <tt/RTL/ if it is
-        used within a procedure declared as <tt/far/, or if the procedure has
-        no explicit address specification, but it is <tt/far/ because of the
-        memory model used.
-  </itemize>
-
-  Example:
-
-  <tscreen><verb>
-       .smart                          ; Be smart
-       .smart  -                       ; Stop being smart
-  </verb></tscreen>
-
-  See: <tt><ref id=".A16" name=".A16"></tt>,
-       <tt><ref id=".A8" name=".A8"></tt>,
-       <tt><ref id=".I16" name=".I16"></tt>,
-       <tt><ref id=".I8" name=".I8"></tt>
-
-
-<sect1><tt>.STRUCT</tt><label id=".STRUCT"><p>
-
-  Starts a struct definition. Structs are covered in a separate section named
-  <ref id="structs" name="&quot;Structs and unions&quot;">.
-
-  See also: <tt><ref id=".ENDSTRUCT" name=".ENDSTRUCT"></tt>,
-            <tt><ref id=".ENDUNION" name=".ENDUNION"></tt>,
-            <tt><ref id=".UNION" name=".UNION"></tt>
-
-
-<sect1><tt>.TAG</tt><label id=".TAG"><p>
-
-  Allocate space for a struct or union.
-
-  Example:
-
-  <tscreen><verb>
-        .struct Point
-                xcoord  .word
-                ycoord  .word
-        .endstruct
-
-        .bss
-                .tag    Point           ; Allocate 4 bytes
-  </verb></tscreen>
-
-
-<sect1><tt>.UNDEF, .UNDEFINE</tt><label id=".UNDEFINE"><p>
-
-  Delete a define style macro definition. The command is followed by an
-  identifier which specifies the name of the macro to delete. Macro
-  replacement is switched of when reading the token following the command
-  (otherwise the macro name would be replaced by its replacement list).
-
-  See also the <tt><ref id=".DEFINE" name=".DEFINE"></tt> command and
-  section <ref id="macros" name="Macros">.
-
-
-<sect1><tt>.UNION</tt><label id=".UNION"><p>
-
-  Starts a union definition. Unions are covered in a separate section named
-  <ref id="structs" name="&quot;Structs and unions&quot;">.
-
-  See also: <tt><ref id=".ENDSTRUCT" name=".ENDSTRUCT"></tt>,
-            <tt><ref id=".ENDUNION" name=".ENDUNION"></tt>,
-            <tt><ref id=".STRUCT" name=".STRUCT"></tt>
-
-
-<sect1><tt>.WARNING</tt><label id=".WARNING"><p>
-
-  Force an assembly warning. The assembler will output a warning message
-  preceded by "User warning". This warning will always be output, even if
-  other warnings are disabled with the <tt><ref id="option-W" name="-W0"></tt>
-  command line option.
-
-  This command may be used to output possible problems when assembling
-  the source file.
-
-  Example:
-
-  <tscreen><verb>
-       .macro  jne     target
-               .local L1
-               .ifndef target
-               .warning "Forward jump in jne, cannot optimize!"
-               beq     L1
-               jmp     target
-       L1:
-               .else
-               ...
-               .endif
-       .endmacro
-  </verb></tscreen>
-
-  See also: <tt><ref id=".ERROR" name=".ERROR"></tt>,
-            <tt><ref id=".FATAL" name=".FATAL"></tt>,
-            <tt><ref id=".OUT" name=".OUT"></tt>
-
-
-<sect1><tt>.WORD</tt><label id=".WORD"><p>
-
-  Define word sized data. Must be followed by a sequence of (word ranged,
-  but not necessarily constant) expressions.
-
-  Example:
-
-  <tscreen><verb>
-       .word   $0D00, $AF13, _Clear
-  </verb></tscreen>
-
-
-<sect1><tt>.ZEROPAGE</tt><label id=".ZEROPAGE"><p>
-
-  Switch to the ZEROPAGE segment and mark it as direct (zeropage) segment.
-  The name of the ZEROPAGE segment is always "ZEROPAGE", so this is a
-  shortcut for
-
-  <tscreen><verb>
-        .segment  "ZEROPAGE": zeropage
-  </verb></tscreen>
-
-  Because of the "zeropage" attribute, labels declared in this segment are
-  addressed using direct addressing mode if possible. You <em/must/ instruct
-  the linker to place this segment somewhere in the address range 0..$FF
-  otherwise you will get errors.
-
-  See: <tt><ref id=".SEGMENT" name=".SEGMENT"></tt>
-
-
-
-<sect>Macros<label id="macros"><p>
-
-
-<sect1>Introduction<p>
-
-Macros may be thought of as "parametrized super instructions". Macros are
-sequences of tokens that have a name. If that name is used in the source
-file, the macro is "expanded", that is, it is replaced by the tokens that
-were specified when the macro was defined.
-
-
-<sect1>Macros without parameters<p>
-
-In its simplest form, a macro does not have parameters. Here's an
-example:
-
-<tscreen><verb>
-               .macro  asr             ; Arithmetic shift right
-               cmp     #$80    ; Put bit 7 into carry
-               ror             ; Rotate right with carry
-       .endmacro
-</verb></tscreen>
-
-The macro above consists of two real instructions, that are inserted into
-the code, whenever the macro is expanded. Macro expansion is simply done
-by using the name, like this:
-
-<tscreen><verb>
-       lda     $2010
-       asr
-       sta     $2010
-</verb></tscreen>
-
-
-<sect1>Parametrized macros<p>
-
-When using macro parameters, macros can be even more useful:
-
-<tscreen><verb>
-       .macro  inc16   addr
-               clc
-               lda     addr
-               adc     #$01
-               sta     addr
-               lda     addr+1
-               adc     #$00
-               sta     addr+1
-       .endmacro
-</verb></tscreen>
-
-When calling the macro, you may give a parameter, and each occurrence of
-the name "addr" in the macro definition will be replaced by the given
-parameter. So
-
-<tscreen><verb>
-       inc16   $1000
-</verb></tscreen>
-
-will be expanded to
-
-<tscreen><verb>
-               clc
-               lda     $1000
-               adc     #$01
-               sta     $1000
-               lda     $1000+1
-               adc     #$00
-               sta     $1000+1
-</verb></tscreen>
-
-A macro may have more than one parameter, in this case, the parameters
-are separated by commas. You are free to give less parameters than the
-macro actually takes in the definition. You may also leave intermediate
-parameters empty. Empty parameters are replaced by empty space (that is,
-they are removed when the macro is expanded). If you have a look at our
-macro definition above, you will see, that replacing the "addr" parameter
-by nothing will lead to wrong code in most lines. To help you, writing
-macros with a variable parameter list, there are some control commands:
-
-<tt><ref id=".IFBLANK" name=".IFBLANK"></tt> tests the rest of the line and
-returns true, if there are any tokens on the remainder of the line. Since
-empty parameters are replaced by nothing, this may be used to test if a given
-parameter is empty. <tt><ref id=".IFNBLANK" name=".IFNBLANK"></tt> tests the
-opposite.
-
-Look at this example:
-
-<tscreen><verb>
-       .macro  ldaxy   a, x, y
-       .ifnblank       a
-               lda     #a
-       .endif
-       .ifnblank       x
-               ldx     #x
-       .endif
-       .ifnblank       y
-               ldy     #y
-       .endif
-       .endmacro
-</verb></tscreen>
-
-This macro may be called as follows:
-
-<tscreen><verb>
-       ldaxy   1, 2, 3         ; Load all three registers
-
-       ldaxy   1, , 3          ; Load only a and y
-
-       ldaxy   , , 3           ; Load y only
-</verb></tscreen>
-
-There's another helper command for determining, which macro parameters are
-valid: <tt><ref id=".PARAMCOUNT" name=".PARAMCOUNT"></tt> This command is
-replaced by the parameter count given, <em/including/ intermediate empty macro
-parameters:
-
-<tscreen><verb>
-       ldaxy   1               ; .PARAMCOUNT = 1
-       ldaxy   1,,3            ; .PARAMCOUNT = 3
-       ldaxy   1,2             ; .PARAMCOUNT = 2
-       ldaxy   1,              ; .PARAMCOUNT = 2
-       ldaxy   1,2,3           ; .PARAMCOUNT = 3
-</verb></tscreen>
-
-Macro parameters may optionally be enclosed into curly braces. This allows the
-inclusion of tokens that would otherwise terminate the parameter (the comma in
-case of a macro parameter).
-
-<tscreen><verb>
-        .macro  foo     arg1, arg2
-                ...
-        .endmacro
-
-                foo     ($00,x)         ; Two parameters passed
-                foo     {($00,x)}       ; One parameter passed
-</verb></tscreen>
-
-In the first case, the macro is called with two parameters: '<tt/(&dollar;00/'
-and 'x)'. The comma is not passed to the macro, since it is part of the
-calling sequence, not the parameters.
-
-In the second case, '(&dollar;00,x)' is passed to the macro, this time
-including the comma.
-
-
-<sect1>Detecting parameter types<p>
-
-Sometimes it is nice to write a macro that acts differently depending on the
-type of the argument supplied. An example would be a macro that loads a 16 bit
-value from either an immediate operand, or from memory. The <tt/<ref
-id=".MATCH" name=".MATCH">/ and <tt/<ref id=".XMATCH" name=".XMATCH">/
-functions will allow you to do exactly this:
-
-<tscreen><verb>
-        .macro  ldax    arg
-                .if (.match (.left (1, {arg}), #))
-                    ; immediate mode
-                    lda     #<(.right (.tcount ({arg})-1, {arg}))
-                    ldx     #>(.right (.tcount ({arg})-1, {arg}))
-                .else
-                    ; assume absolute or zero page
-                    lda     arg
-                    ldx     1+(arg)
-                .endif
-        .endmacro
-</verb></tscreen>
-
-Using the <tt/<ref id=".MATCH" name=".MATCH">/ function, the macro is able to
-check if its argument begins with a hash mark. If so, two immediate loads are
-emitted, Otherwise a load from an absolute zero page memory location is
-assumed. Please note how the curly braces are used to enclose parameters to
-pseudo functions handling token lists. This is necessary, because the token
-lists may include commas or parens, which would be treated by the assembler
-as end-of-list.
-
-The macro can be used as
-
-<tscreen><verb>
-        foo:    .word   $5678
-        ...
-                ldax    #$1234          ; X=$12, A=$34
-        ...
-                ldax    foo             ; X=$56, A=$78
-</verb></tscreen>
-
-
-<sect1>Recursive macros<p>
-
-Macros may be used recursively:
-
-<tscreen><verb>
-       .macro  push    r1, r2, r3
-               lda     r1
-               pha
-       .if     .paramcount > 1
-               push    r2, r3
-       .endif
-       .endmacro
-</verb></tscreen>
-
-There's also a special macro to help writing recursive macros: <tt><ref
-id=".EXITMACRO" name=".EXITMACRO"></tt> This command will stop macro expansion
-immediately:
-
-<tscreen><verb>
-       .macro  push    r1, r2, r3, r4, r5, r6, r7
-       .ifblank        r1
-               ; First parameter is empty
-               .exitmacro
-       .else
-               lda     r1
-               pha
-       .endif
-               push    r2, r3, r4, r5, r6, r7
-       .endmacro
-</verb></tscreen>
-
-When expanding this macro, the expansion will push all given parameters
-until an empty one is encountered. The macro may be called like this:
-
-<tscreen><verb>
-       push    $20, $21, $32           ; Push 3 ZP locations
-       push    $21                     ; Push one ZP location
-</verb></tscreen>
-
-
-<sect1>Local symbols inside macros<p>
-
-Now, with recursive macros, <tt><ref id=".IFBLANK" name=".IFBLANK"></tt> and
-<tt><ref id=".PARAMCOUNT" name=".PARAMCOUNT"></tt>, what else do you need?
-Have a look at the inc16 macro above. Here is it again:
-
-<tscreen><verb>
-               .macro  inc16   addr
-                       clc
-                       lda     addr
-                       adc     #$01
-                       sta     addr
-                       lda     addr+1
-                       adc     #$00
-                       sta     addr+1
-               .endmacro
-</verb></tscreen>
-
-If you have a closer look at the code, you will notice, that it could be
-written more efficiently, like this:
-
-<tscreen><verb>
-               .macro  inc16   addr
-                       inc     addr
-                       bne     Skip
-                       inc     addr+1
-               Skip:
-               .endmacro
-</verb></tscreen>
-
-But imagine what happens, if you use this macro twice? Since the label "Skip"
-has the same name both times, you get a "duplicate symbol" error. Without a
-way to circumvent this problem, macros are not as useful, as they could be.
-One possible solution is the command <tt><ref id=".LOCAL" name=".LOCAL"></tt>.
-It declares one or more symbols as local to the macro expansion. The names of
-local variables are replaced by a unique name in each separate macro
-expansion. So we can solve the problem above by using <tt/.LOCAL/:
-
-<tscreen><verb>
-       .macro  inc16   addr
-                       .local  Skip            ; Make Skip a local symbol
-               inc     addr
-                       bne     Skip
-               inc     addr+1
-       Skip:                           ; Not visible outside
-       .endmacro
-</verb></tscreen>
-
-Another solution is of course to start a new lexical block inside the macro
-that hides any labels:
-
-<tscreen><verb>
-       .macro  inc16   addr
-       .proc
-                       inc     addr
-                       bne     Skip
-                       inc     addr+1
-       Skip:
-       .endproc
-       .endmacro
-</verb></tscreen>
-
-
-<sect1>C style macros<p>
-
-Starting with version 2.5 of the assembler, there is a second macro type
-available: C style macros using the <tt/.DEFINE/ directive. These macros are
-similar to the classic macro type described above, but behaviour is sometimes
-different:
-
-<itemize>
-
-<item> Macros defined with <tt><ref id=".DEFINE" name=".DEFINE"></tt> may not
-       span more than a line. You may use line continuation (see <tt><ref
-       id=".LINECONT" name=".LINECONT"></tt>) to spread the definition over
-       more than one line for increased readability, but the macro itself
-       may not contain an end-of-line token.
-
-<item> Macros defined with <tt><ref id=".DEFINE" name=".DEFINE"></tt> share
-       the name space with classic macros, but they are detected and replaced
-       at the scanner level. While classic macros may be used in every place,
-       where a mnemonic or other directive is allowed, <tt><ref id=".DEFINE"
-       name=".DEFINE"></tt> style macros are allowed anywhere in a line. So
-       they are more versatile in some situations.
-
-<item> <tt><ref id=".DEFINE" name=".DEFINE"></tt> style macros may take
-       parameters. While classic macros may have empty parameters, this is
-       not true for <tt><ref id=".DEFINE" name=".DEFINE"></tt> style macros.
-       For this macro type, the number of actual parameters must match
-       exactly the number of formal parameters.
-
-       To make this possible, formal parameters are enclosed in braces when
-       defining the macro. If there are no parameters, the empty braces may
-       be omitted.
-
-<item> Since <tt><ref id=".DEFINE" name=".DEFINE"></tt> style macros may not
-       contain end-of-line tokens, there are things that cannot be done. They
-       may not contain several processor instructions for example. So, while
-       some things may be done with both macro types, each type has special
-       usages. The types complement each other.
-
-</itemize>
-
-Let's look at a few examples to make the advantages and disadvantages
-clear.
-
-To emulate assemblers that use "<tt/EQU/" instead of "<tt/=/" you may use the
-following <tt/.DEFINE/:
-
-<tscreen><verb>
-       .define EQU     =
-
-       foo     EQU     $1234           ; This is accepted now
-</verb></tscreen>
-
-You may use the directive to define string constants used elsewhere:
-
-<tscreen><verb>
-       ; Define the version number
-       .define VERSION         "12.3a"
-
-       ; ... and use it
-       .asciiz VERSION
-</verb></tscreen>
-
-Macros with parameters may also be useful:
-
-<tscreen><verb>
-       .define DEBUG(message)  .out    message
-
-       DEBUG   "Assembling include file #3"
-</verb></tscreen>
-
-Note that, while formal parameters have to be placed in braces, this is
-not true for the actual parameters. Beware: Since the assembler cannot
-detect the end of one parameter, only the first token is used. If you
-don't like that, use classic macros instead:
-
-<tscreen><verb>
-       .macro  DEBUG   message
-               .out    message
-       .endmacro
-</verb></tscreen>
-
-(This is an example where a problem can be solved with both macro types).
-
-
-<sect1>Characters in macros<p>
-
-When using the <ref id="option-t" name="-t"> option, characters are translated
-into the target character set of the specific machine. However, this happens
-as late as possible. This means that strings are translated if they are part
-of a <tt><ref id=".BYTE" name=".BYTE"></tt> or <tt><ref id=".ASCIIZ"
-name=".ASCIIZ"></tt> command. Characters are translated as soon as they are
-used as part of an expression.
-
-This behaviour is very intuitive outside of macros but may be confusing when
-doing more complex macros. If you compare characters against numeric values,
-be sure to take the translation into account.
-
-
-<sect1>Deleting macros<p>
-
-Macros can be deleted. This will not work if the macro that should be deleted
-is currently expanded as in the following non working example:
-
-<tscreen><verb>
-       .macro  notworking
-               .delmacro       notworking
-       .endmacro
-
-        notworking              ; Will not work
-</verb></tscreen>
-
-The commands to delete classic and define style macros differ. Classic macros
-can be deleted by use of <tt><ref id=".DELMACRO" name=".DELMACRO"></tt>, while
-for <tt><ref id=".DEFINE" name=".DEFINE"></tt> style macros, <tt><ref
-id=".UNDEFINE" name=".UNDEFINE"></tt> must be used. Example:
-
-<tscreen><verb>
-        .define value   1
-       .macro  mac
-               .byte   2
-       .endmacro
-
-                .byte   value           ; Emit one byte with value 1
-                mac                     ; Emit another byte with value 2
-
-        .undefine value
-        .delmacro mac
-
-                .byte   value           ; Error: Unknown identifier
-                mac                     ; Error: Missing ":"
-</verb></tscreen>
-
-A separate command for <tt>.DEFINE</tt> style macros was necessary, because
-the name of such a macro is replaced by its replacement list on a very low
-level. To get the actual name, macro replacement has to be switched off when
-reading the argument to <tt>.UNDEFINE</tt>. This does also mean that the
-argument to <tt>.UNDEFINE</tt> is not allowed to come from another
-<tt>.DEFINE</tt>. All this is not necessary for classic macros, so having two
-different commands increases flexibility.
-
-
-<sect>Macro packages<label id="macropackages"><p>
-
-Using the <tt><ref id=".MACPACK" name=".MACPACK"></tt> directive, predefined
-macro packages may be included with just one command. Available macro packages
-are:
-
-
-<sect1><tt>.MACPACK generic</tt><p>
-
-This macro package defines macroes that are useful in almost any program.
-Currently defined macroes are:
-
-<tscreen><verb>
-        .macro  add     Arg     ; add without carry
-               clc
-               adc     Arg
-       .endmacro
-
-        .macro  sub     Arg     ; subtract without borrow
-               sec
-               sbc     Arg
-       .endmacro
-
-        .macro  bge     Arg     ; branch on greater-than or equal
-                bcs     Arg
-        .endmacro
-
-        .macro  blt     Arg     ; branch on less-than
-                bcc     Arg
-        .endmacro
-
-        .macro  bgt     Arg     ; branch on greater-than
-                .local  L
-                beq     L
-                bcs     Arg
-        L:
-        .endmacro
-
-        .macro  ble     Arg     ; branch on less-than or equal
-                beq     Arg
-                bcc     Arg
-        .endmacro
-
-        .macro  bnz     Arg     ; branch on not zero
-                bne     Arg
-        .endmacro
-
-        .macro  bze     Arg     ; branch on zero
-                beq     Arg
-        .endmacro
-</verb></tscreen>
-
-
-<sect1><tt>.MACPACK longbranch</tt><p>
-
-This macro package defines long conditional jumps. They are named like the
-short counterpart but with the 'b' replaced by a 'j'. Here is a sample
-definition for the "<tt/jeq/" macro, the other macros are built using the same
-scheme:
-
-<tscreen><verb>
-               .macro  jeq     Target
-                       .if     .def(Target) .and ((*+2)-(Target) <= 127)
-                       beq     Target
-                       .else
-                       bne     *+5
-                       jmp     Target
-                       .endif
-               .endmacro
-</verb></tscreen>
-
-All macros expand to a short branch, if the label is already defined (back
-jump) and is reachable with a short jump. Otherwise the macro expands to a
-conditional branch with the branch condition inverted, followed by an absolute
-jump to the actual branch target.
-
-The package defines the following macros:
-
-<tscreen><verb>
-               jeq, jne, jmi, jpl, jcs, jcc, jvs, jvc
-</verb></tscreen>
-
-
-
-<sect1><tt>.MACPACK atari</tt><p>
-
-This macro package defines a macro named <tt/scrcode/. It takes a string
-as argument and places this string into memory translated into screen codes.
-
-
-<sect1><tt>.MACPACK cbm</tt><p>
-
-This macro package defines a macro named <tt/scrcode/. It takes a string
-as argument and places this string into memory translated into screen codes.
-
-
-<sect1><tt>.MACPACK cpu</tt><p>
-
-This macro package does not define any macros but constants used to examine
-the value read from the <tt/<ref id=".CPU" name=".CPU">/ pseudo variable. For
-each supported CPU a constant similar to
-
-<tscreen><verb>
-    CPU_6502
-    CPU_65SC02
-    CPU_65C02
-    CPU_65816
-    CPU_SWEET16
-    CPU_HUC6280
-</verb></tscreen>
-
-is defined. These constants may be used to determine the exact type of the
-currently enabled CPU. In addition to that, for each CPU instruction set,
-another constant is defined:
-
-<tscreen><verb>
-    CPU_ISET_6502
-    CPU_ISET_65SC02
-    CPU_ISET_65C02
-    CPU_ISET_65816
-    CPU_ISET_SWEET16
-    CPU_ISET_HUC6280
-</verb></tscreen>
-
-The value read from the <tt/<ref id=".CPU" name=".CPU">/ pseudo variable may
-be checked with <tt/<ref id="operators" name=".BITAND">/ to determine if the
-currently enabled CPU supports a specific instruction set. For example the
-65C02 supports all instructions of the 65SC02 CPU, so it has the
-<tt/CPU_ISET_65SC02/ bit set in addition to its native <tt/CPU_ISET_65C02/
-bit. Using
-
-<tscreen><verb>
-        .if (.cpu .bitand CPU_ISET_65SC02)
-                lda     (sp)
-        .else
-                ldy     #$00
-                lda     (sp),y
-        .endif
-</verb></tscreen>
-
-it is possible to determine if the
-
-<tscreen><verb>
-                lda     (sp)
-</verb></tscreen>
-
-instruction is supported, which is the case for the 65SC02, 65C02 and 65816
-CPUs (the latter two are upwards compatible to the 65SC02).
-
-  
-<sect1><tt>.MACPACK module</tt><p>
-
-This macro package defines a macro named <tt/module_header/. It takes an
-identifier as argument and is used to define the header of a module both
-in the dynamic and static variant.
-
-
-
-<sect>Predefined constants<label id="predefined-constants"><p>
-
-For better orthogonality, the assembler defines similar symbols as the
-compiler, depending on the target system selected:
-
-<itemize>
-<item><tt/__APPLE2__/ - Target system is <tt/apple2/ or <tt/apple2enh/
-<item><tt/__APPLE2ENH__/ - Target system is <tt/apple2enh/
-<item><tt/__ATARI5200__/ - Target system is <tt/atari5200/
-<item><tt/__ATARI__/ - Target system is <tt/atari/ or <tt/atarixl/
-<item><tt/__ATARIXL__/ - Target system is <tt/atarixl/
-<item><tt/__ATMOS__/ - Target system is <tt/atmos/
-<item><tt/__BBC__/ - Target system is <tt/bbc/
-<item><tt/__C128__/ - Target system is <tt/c128/
-<item><tt/__C16__/ - Target system is <tt/c16/ or <tt/plus4/
-<item><tt/__C64__/ - Target system is <tt/c64/
-<item><tt/__CBM__/ - Target is a Commodore system
-<item><tt/__CBM510__/ - Target system is <tt/cbm510/
-<item><tt/__CBM610__/ - Target system is <tt/cbm610/
-<item><tt/__GEOS__/ - Target is a GEOS system
-<item><tt/__GEOS_APPLE__/ - Target system is <tt/geos-apple/
-<item><tt/__GEOS_CBM__/ - Target system is <tt/geos-cbm/
-<item><tt/__LUNIX__/ - Target system is <tt/lunix/
-<item><tt/__LYNX__/ - Target system is <tt/lynx/
-<item><tt/__NES__/ - Target system is <tt/nes/
-<item><tt/__OSIC1P__/ - Target system is <tt/osic1p/
-<item><tt/__PET__/ - Target system is <tt/pet/
-<item><tt/__PLUS4__/ - Target system is <tt/plus4/
-<item><tt/__SIM6502__/ - Target system is <tt/sim6502/
-<item><tt/__SIM65C02__/ - Target system is <tt/sim65c02/
-<item><tt/__SUPERVISION__/ - Target system is <tt/supervision/
-<item><tt/__VIC20__/ - Target system is <tt/vic20/
-</itemize>
-
-
-<sect>Structs and unions<label id="structs"><p>
-
-<sect1>Structs and unions Overview<p>
-
-Structs and unions are special forms of <ref id="scopes" name="scopes">.  They
-are to some degree comparable to their C counterparts. Both have a list of
-members. Each member allocates storage and may optionally have a name, which,
-in case of a struct, is the offset from the beginning and, in case of a union,
-is always zero.
-
-
-<sect1>Declaration<p>
-
-Here is an example for a very simple struct with two members and a total size
-of 4 bytes:
-
-<tscreen><verb>
-      .struct Point
-              xcoord  .word
-              ycoord  .word
-      .endstruct
-</verb></tscreen>
-
-A union shares the total space between all its members, its size is the same
-as that of the largest member. The offset of all members relative to the union
-is zero.
-
-<tscreen><verb>
-      .union  Entry
-              index   .word
-              ptr     .addr
-      .endunion
-</verb></tscreen>
-
-A struct or union must not necessarily have a name. If it is anonymous, no
-local scope is opened, the identifiers used to name the members are placed
-into the current scope instead.
-
-A struct may contain unnamed members and definitions of local structs. The
-storage allocators may contain a multiplier, as in the example below:
-
-<tscreen><verb>
-      .struct Circle
-              .struct Point
-                      .word   2         ; Allocate two words
-              .endstruct
-              Radius  .word
-      .endstruct
-</verb></tscreen>
-
-
-<sect1>The <tt/.TAG/ keyword<p>
-
-Using the <ref id=".TAG" name=".TAG"> keyword, it is possible to reserve space
-for an already defined struct or unions within another struct:
-
-<tscreen><verb>
-      .struct Point
-              xcoord  .word
-              ycoord  .word
-      .endstruct
-
-      .struct Circle
-              Origin  .tag    Point
-              Radius  .byte
-      .endstruct
-</verb></tscreen>
-
-Space for a struct or union may be allocated using the <ref id=".TAG"
-name=".TAG"> directive.
-
-<tscreen><verb>
-        C:      .tag    Circle
-</verb></tscreen>
-
-Currently, members are just offsets from the start of the struct or union. To
-access a field of a struct, the member offset has to be added to the address
-of the struct itself:
-
-<tscreen><verb>
-        lda     C+Circle::Radius        ; Load circle radius into A
-</verb></tscreen>
-
-This may change in a future version of the assembler.
-
-
-<sect1>Limitations<p>
-
-Structs and unions are currently implemented as nested symbol tables (in fact,
-they were a by-product of the improved scoping rules). Currently, the
-assembler has no idea of types. This means that the <ref id=".TAG"
-name=".TAG"> keyword will only allocate space. You won't be able to initialize
-variables declared with <ref id=".TAG" name=".TAG">, and adding an embedded
-structure to another structure with <ref id=".TAG" name=".TAG"> will not make
-this structure accessible by using the '::' operator.
-
-
-
-<sect>Module constructors/destructors<label id="condes"><p>
-
-<em>Note:</em> This section applies mostly to C programs, so the explanation
-below uses examples from the C libraries. However, the feature may also be
-useful for assembler programs.
-
-
-<sect1>Module constructors/destructors Overview<p>
-
-Using the <tt><ref id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt>, <tt><ref
-id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> and <tt><ref id=".INTERRUPTOR"
-name=".INTERRUPTOR"></tt> keywords it is possible to export functions in a
-special way. The linker is able to generate tables with all functions of a
-specific type. Such a table will <em>only</em> include symbols from object
-files that are linked into a specific executable. This may be used to add
-initialization and cleanup code for library modules, or a table of interrupt
-handler functions.
-
-The C heap functions are an example where module initialization code is used.
-All heap functions (<tt>malloc</tt>, <tt>free</tt>, ...) work with a few
-variables that contain the start and the end of the heap, pointers to the free
-list and so on. Since the end of the heap depends on the size and start of the
-stack, it must be initialized at runtime. However, initializing these
-variables for programs that do not use the heap are a waste of time and
-memory.
-
-So the central module defines a function that contains initialization code and
-exports this function using the <tt/.CONSTRUCTOR/ statement. If (and only if)
-this module is added to an executable by the linker, the initialization
-function will be placed into the table of constructors by the linker. The C
-startup code will call all constructors before <tt/main/ and all destructors
-after <tt/main/, so without any further work, the heap initialization code is
-called once the module is linked in.
-
-While it would be possible to add explicit calls to initialization functions
-in the startup code, the new approach has several advantages:
-
-<enum>
-<item>
-If a module is not included, the initialization code is not linked in and not
-called. So you don't pay for things you don't need.
-
-<item>
-Adding another library that needs initialization does not mean that the
-startup code has to be changed. Before we had module constructors and
-destructors, the startup code for all systems had to be adjusted to call the
-new initialization code.
-
-<item>
-The feature saves memory: Each additional initialization function needs just
-two bytes in the table (a pointer to the function).
-
-</enum>
-
-
-<sect1>Calling order<p>
-
-The symbols are sorted in increasing priority order by the linker when using
-one of the builtin linker configurations, so the functions with lower
-priorities come first and are followed by those with higher priorities. The C
-library runtime subroutine that walks over the function tables calls the
-functions starting from the top of the table - which means that functions with
-a high priority are called first.
-
-So when using the C runtime, functions are called with high priority functions
-first, followed by low priority functions.
-
-
-<sect1>Pitfalls<p>
-
-When using these special symbols, please take care of the following:
-
-<itemize>
-
-<item>
-The linker will only generate function tables, it will not generate code to
-call these functions. If you're using the feature in some other than the
-existing C environments, you have to write code to call all functions in a
-linker generated table yourself. See the <tt/condes/ and <tt/callirq/ modules
-in the C runtime for an example on how to do this.
-
-<item>
-The linker will only add addresses of functions that are in modules linked to
-the executable. This means that you have to be careful where to place the
-condes functions. If initialization or an irq handler is needed for a group of
-functions, be sure to place the function into a module that is linked in
-regardless of which function is called by the user.
-
-<item>
-The linker will generate the tables only when requested to do so by the
-<tt/FEATURE CONDES/ statement in the linker config file. Each table has to
-be requested separately.
-
-<item>
-Constructors and destructors may have priorities. These priorities determine
-the order of the functions in the table. If your initialization or cleanup code
-does depend on other initialization or cleanup code, you have to choose the
-priority for the functions accordingly.
-
-<item>
-Besides the <tt><ref id=".CONSTRUCTOR" name=".CONSTRUCTOR"></tt>, <tt><ref
-id=".DESTRUCTOR" name=".DESTRUCTOR"></tt> and <tt><ref id=".INTERRUPTOR"
-name=".INTERRUPTOR"></tt> statements, there is also a more generic command:
-<tt><ref id=".CONDES" name=".CONDES"></tt>. This allows to specify an
-additional type. Predefined types are 0 (constructor), 1 (destructor) and 2
-(interruptor). The linker generates a separate table for each type on request.
-
-</itemize>
-
-
-<sect>Porting sources from other assemblers<p>
-
-Sometimes it is necessary to port code written for older assemblers to ca65.
-In some cases, this can be done without any changes to the source code by
-using the emulation features of ca65 (see <tt><ref id=".FEATURE"
-name=".FEATURE"></tt>). In other cases, it is necessary to make changes to the
-source code.
-
-Probably the biggest difference is the handling of the <tt><ref id=".ORG"
-name=".ORG"></tt> directive. ca65 generates relocatable code, and placement is
-done by the linker. Most other assemblers generate absolute code, placement is
-done within the assembler and there is no external linker.
-
-In general it is not a good idea to write new code using the emulation
-features of the assembler, but there may be situations where even this rule is
-not valid.
-
-<sect1>TASS<p>
-
-You need to use some of the ca65 emulation features to simulate the behaviour
-of such simple assemblers.
-
-<enum>
-<item>Prepare your sourcecode like this:
-
-<tscreen><verb>
-        ; if you want TASS style labels without colons
-        .feature labels_without_colons
-
-        ; if you want TASS style character constants
-        ; ("a" instead of the default 'a')
-        .feature loose_char_term
-
-                .word *+2       ; the cbm load address
-
-                [yourcode here]
-</verb></tscreen>
-
-notice that the two emulation features are mostly useful for porting
-sources originally written in/for TASS, they are not needed for the
-actual "simple assembler operation" and are not recommended if you are
-writing new code from scratch.
-
-<item>Replace all program counter assignments (which are not possible in ca65
-by default, and the respective emulation feature works different from what
-you'd expect) by another way to skip to memory locations, for example the
-<tt><ref id=".RES" name=".RES"></tt> directive.
-
-<tscreen><verb>
-        ; *=$2000
-        .res $2000-*    ; reserve memory up to $2000
-</verb></tscreen>
-
-Please note that other than the original TASS, ca65 can never move the program
-counter backwards - think of it as if you are assembling to disk with TASS.
-
-<item>Conditional assembly (<tt/.ifeq//<tt/.endif//<tt/.goto/ etc.) must be
-rewritten to match ca65 syntax. Most importantly notice that due to the lack
-of <tt/.goto/, everything involving loops must be replaced by
-<tt><ref id=".REPEAT" name=".REPEAT"></tt>.
-
-<item>To assemble code to a different address than it is executed at, use the
-<tt><ref id=".ORG" name=".ORG"></tt> directive instead of
-<tt/.offs/-constructs.
-
-<tscreen><verb>
-        .org $1800
-
-        [floppy code here]
-
-        .reloc  ; back to normal
-</verb></tscreen>
-
-<item>Then assemble like this:
-
-<tscreen><verb>
-        cl65 --start-addr 0x0ffe -t none myprog.s -o myprog.prg
-</verb></tscreen>
-
-Note that you need to use the actual start address minus two, since two bytes
-are used for the cbm load address.
-
-</enum>
-
-
-<sect>Copyright<p>
-
-ca65 (and all cc65 binutils) are (C) Copyright 1998-2003 Ullrich von
-Bassewitz. For usage of the binaries and/or sources the following
-conditions do apply:
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item>         The origin of this software must not be misrepresented; you must not
-               claim that you wrote the original software. If you use this software
-               in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-
-
-</article>
-
-
-
diff --git a/doc/cbm510.sgml b/doc/cbm510.sgml
deleted file mode 100644 (file)
index c24eba1..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>Commodore 510 (aka P500) specific information for cc65
-<author>
-<url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">,<newline>
-<url url="mailto:polluks@sdf.lonestar.org" name="Stefan A. Haubenthal">,<newline>
-<url url="mailto:greg.king5@verizon.net" name="Greg King">
-<date>2014-04-25
-
-<abstract>
-An overview over the Commodore 510 runtime system as it is implemented for the
-cc65 C compiler.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This file contains an overview of the CBM 510 runtime system as it comes with
-the cc65 C compiler. It describes the memory layout, CBM 510-specific header
-files, available drivers, and any pitfalls specific to that platform.
-
-Please note that CBM 510-specific functions are just mentioned here, they are
-described in detail in the separate <url url="funcref.html" name="function
-reference">. Even functions marked as "platform dependent" may be available on
-more than one platform. Please see the function reference for more
-information.
-
-In addition to the Commodore 510 (named P128 in the U.S.), no other
-machines are supported by this cc65 target.
-
-
-
-<sect>Binary format<p>
-
-The standard binary output format generated by the linker for the Commodore
-510 target is a machine language program with a one-line BASIC stub, which
-transfers control to the machine language running in bank 0. That means that a
-program can be loaded as a BASIC program, and started with RUN. It is, of course,
-possible to change that behaviour by using a modified startup file and linker
-config.
-
-
-
-<sect>Memory layout<p>
-
-cc65 generated programs for the Commodore 510 run in bank 0, the memory bank
-reserved for BASIC programs. Since there are no ROMs in this memory bank,
-kernal subroutines are either emulated or called by bank switching, which has
-the disadvantage of being slow compared to a direct call.
-
-The default memory configuration for the CBM 510 allocates all memory between
-&dollar;0002 and &dollar;FFF0 in bank 0 for the compiled program. Some space
-in low memory is lost, because a separate hardware stack is set up in page 1,
-and the kernal replacement functions need some more memory locations. A few
-more pages are lost in high memory, because the runtime sets up a copy of the
-character ROM, a text screen, and a CBM-compatible jump table at &dollar;FF81.
-The main startup code is located at &dollar;0400, so about 54K of the complete
-bank are actually usable for applications.
-
-Special locations:
-
-<descrip>
-  <tag/Stack/
-  The C runtime stack is located at &dollar;FF81, and grows downwards.
-
-  <tag/Heap/
-  The C heap is located at the end of the program, and grows towards the C
-  runtime stack.
-</descrip><p>
-
-
-
-<sect>Platform-specific header files<p>
-
-Programs containing CBM 510-specific code may use the <tt/cbm510.h/ or
-<tt/cbm.h/ header files. Using the later may be an option when writing code
-for more than one CBM platform, since it includes <tt/cbm510.h/, and declares
-several functions common to all CBM platforms.
-
-<sect1>CBM 510-specific functions<p>
-
-The functions listed below are special for the CBM 510. See the <url
-url="funcref.html" name="function reference"> for declaration and usage.
-
-<itemize>
-<item>peekbsys
-<item>peekwsys
-<item>pokebsys
-<item>pokewsys
-</itemize>
-
-
-<sect1>CBM-specific functions<p>
-
-Some functions are available for all (or at least most) of the Commodore
-machines. See the <url url="funcref.html" name="function reference"> for
-declaration and usage.
-
-
-<itemize>
-<item>cbm_close
-<item>cbm_closedir
-<item>cbm_k_setlfs
-<item>cbm_k_setnam
-<item>cbm_k_load
-<item>cbm_k_save
-<item>cbm_k_open
-<item>cbm_k_close
-<item>cbm_k_readst
-<item>cbm_k_chkin
-<item>cbm_k_ckout
-<item>cbm_k_basin
-<item>cbm_k_bsout
-<item>cbm_k_clrch
-<item>cbm_load
-<item>cbm_open
-<item>cbm_opendir
-<item>cbm_read
-<item>cbm_readdir
-<item>cbm_save
-<item>cbm_write
-<item>get_tv
-</itemize>
-
-
-
-<sect1>Hardware access<p>
-
-The following pseudo variables declared in the <tt/cbm510.h/ header file do
-allow access to hardware located in the address space. Some variables are
-structures; accessing the struct fields will access the chip registers.
-
-<em/Note:/ All I/O chips are located in the system bank (bank 15); and can
-therefore not be accessed like on other platforms. Please use one of the
-<tt/peekbsys/, <tt/peekwsys/, <tt/pokebsys/, and <tt/pokewsys/ functions to
-access the I/O chips. Direct reads and writes to the structures named below
-will <em>not</em> work!
-
-<descrip>
-
-  <tag><tt/VIC/</tag>
-  The <tt/VIC/ structure allows access to the VIC II (the graphics
-  controller). See the <tt/_vic2.h/ header file located in the include
-  directory for the declaration of the structure.
-
-  <tag><tt/SID/</tag>
-  The <tt/SID/ structure allows access to the SID (the sound interface
-  device). See the <tt/_sid.h/ header file located in the include directory
-  for the declaration of the structure.
-
-  <tag><tt/ACIA/</tag>
-  Access to the ACIA (the RS232 chip) is available via the <tt/ACIA/ variable.
-  See the <tt/_6551.h/ header file located in the include directory for the
-  declaration of the structure.
-
-  <tag><tt/CIA/</tag>
-  Access to the CIA chip is available via the <tt/CIA/ variable. See the
-  <tt/_6526.h/ header file located in the include directory for the
-  declaration of the structure.
-
-  <tag><tt/TPI1, TPI2/</tag>
-  The two 6525 triport chips may be accessed by using these variables. See the
-  <tt/_6525.h/ header file located in the include directory for the
-  declaration of the structure.
-
-</descrip><p>
-
-
-
-<sect>Loadable drivers<p>
-
-The names in the parentheses denote the symbols to be used for static linking of the drivers.
-
-
-<sect1>Graphics drivers<p>
-
-No graphics drivers are currently available for the Commodore 510.
-
-
-<sect1>Extended memory drivers<p>
-
-<descrip>
-  <tag><tt/cbm510-ram.emd (cbm510_ram_emd)/</tag>
-  A driver for the RAM in bank 1. Supports up to 255 pages with 256 bytes
-  each.
-</descrip><p>
-
-
-<sect1>Joystick drivers<p>
-
-<descrip>
-
-  <tag><tt/cbm510-std.joy (cbm510_std_joy)/</tag>
-  Supports up to two standard joysticks connected to the joysticks ports of
-  the Commodore 510.
-
-</descrip><p>
-
-
-<sect1>Mouse drivers<p>
-
-The default drivers, <tt/mouse_stddrv (mouse_static_stddrv)/, point to <tt/cbm510-joy.mou (cbm510_joy_mou)/.
-
-<descrip>
-
-  <tag><tt/cbm510-joy.mou (cbm510_joy_mou)/</tag>
-  Supports a mouse that is emulated by a standard joystick, e.g. 1350
-  mouse, in joystick port #2 of the CBM510. That stick's fire button acts as
-  the left mouse button. The fire button of a stick in joystick port #1 can
-  act as the right mouse button.
-
-  <tag><tt/cbm510-inkwl.mou (cbm510_inkwl_mou)/</tag>
-  Supports the Inkwell Systems lightpens, connected to port #1 of the CBM510.
-  It can read both the 170-C and one button of the 184-C pens.  (It can
-  read other lightpens and light-guns that send their button signal to the
-  joystick left-button pin.)
-
-</descrip><p>
-
-
-<sect1>RS232 device drivers<p>
-
-<descrip>
-
-  <tag><tt/cbm510-std.ser (cbm510_std_ser)/</tag>
-  Driver for the 6551 ACIA chip built into the Commodore 510. Supports up to
-  19200 BPS, hardware flow control (RTS/CTS), and interrupt-driven receives.
-  Note that, because of the peculiarities of the 6551 chip, transmits are not
-  interrupt driven; and, the transceiver blocks if the receiver asserts flow
-  control because of a full buffer.
-
-</descrip><p>
-
-
-
-<sect>Limitations<label id="limitations"><p>
-
-
-<sect1>Kernal and hardware access<p>
-
-Since the program runs in bank 0, and the kernal and all I/O chips are located
-in bank 15, calling ROM routines or accessing hardware needs special code. The
-cc65 runtime implements wrappers for all functions in the kernal jump table.
-While this simplifies things, it should be noted that the wrappers do have
-quite an impact on performance: A cross-bank call has an extra 300&micro;s
-penalty added by the wrapper.
-
-
-<sect1>Interrupts<p>
-
-Compiled programs contain an interrupt handler that runs in the program bank.
-This has several advantages, one of them being performance (see cross-bank
-call overhead mentioned above). However, this introduces one problem:
-Interrupts are lost while the CPU executes code in the kernal bank. As a
-result, the clock may go wrong; and (worse), serial interrupts may get lost.
-
-Since the cc65 runtime does only call the kernal for disk I/O, this means that
-a program should not do file I/O while it depends on interrupts.
-
-
-
-<sect>Other hints<p>
-
-
-<sect1>Passing arguments to the program<p>
-
-Command-line arguments can be passed to <tt/main()/. Since that is not
-supported directly by BASIC, the following syntax was chosen:
-
-<tscreen><verb>
-    RUN:REM ARG1 " ARG2 IS QUOTED" ARG3 "" ARG5
-</verb></tscreen>
-
-<enum>
-<item>Arguments are separated by spaces.
-<item>Arguments may be quoted.
-<item>Leading and trailing spaces around an argument are ignored. Spaces within
-      a quoted argument are allowed.
-<item>The first argument passed to <tt/main()/ is the program name.
-<item>A maximum number of 10 arguments (including the program name) are
-      supported.
-</enum>
-
-
-<sect1>Program return code<p>
-
-The program return code (signed char) is passed back to BASIC by use of the
-<tt/ST/ variable.
-
-
-<sect1>Interrupt handlers<p>
-
-The runtime for the Commodore 510 uses routines marked as <tt/.INTERRUPTOR/
-for interrupt handlers. Such routines must be written as simple machine
-language subroutines and will be called automatically by the interrupt handler
-code when they are linked into a program. See the discussion of the
-<tt/.CONDES/ feature in the <url url="ca65.html" name="assembler manual">.
-
-
-
-<sect>License<p>
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
diff --git a/doc/cbm610.sgml b/doc/cbm610.sgml
deleted file mode 100644 (file)
index 790983b..0000000
+++ /dev/null
@@ -1,310 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>Commodore 610-specific information for cc65
-<author>
-<url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">,<newline>
-<url url="mailto:greg.king5@verizon.net" name="Greg King">
-<date>2014-04-25
-
-<abstract>
-An overview over the Commodore 610 runtime system as it is implemented for the
-cc65 C compiler.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This file contains an overview of the CBM 610 runtime system as it comes with
-the cc65 C compiler. It describes the memory layout, CBM 610-specific header
-files, available drivers, and any pitfalls specific to that platform.
-
-Please note that CBM 610-specific functions are just mentioned here, they are
-described in detail in the separate <url url="funcref.html" name="function
-reference">. Even functions marked as "platform dependent" may be available on
-more than one platform. Please see the function reference for more
-information.
-
-In addition to the Commodore 610 (named B40 in the U.S.), several other
-machines are supported by this cc65 target, since they have identical
-hardware: The Commodore 620 and 630 (more memory, additional coprocessor
-card), and the Commodore 710, 720, and 730 (same hardware in another case with
-a built-in monitor).
-
-
-
-<sect>Binary format<p>
-
-The standard binary output format generated by the linker for the Commodore
-610 target is a machine language program with a one-line BASIC stub, which
-transfers control to the machine language running in bank 1. That means that a
-program can be loaded as a BASIC program, and started with RUN. It is, of course,
-possible to change that behaviour by using a modified startup file and linker
-config.
-
-
-
-<sect>Memory layout<p>
-
-cc65 generated programs for the Commodore 610 run in bank 1, the memory bank
-reserved for BASIC programs. Since there are no ROMs in this memory bank,
-kernal subroutines are either emulated or called by bank switching, which has
-the disadvantage of being slow compared to a direct call.
-
-The default memory configuration for the CBM 610 allocates all memory between
-&dollar;0002 and &dollar;FFF0 in bank 1 for the compiled program. Some space
-in low memory is lost, because a separate hardware stack is set up in page 1,
-and the kernal replacement functions need some more memory locations. A few
-more bytes are lost in high memory, because the runtime sets up a CBM-compatible
-jump table at &dollar;FF81. The main startup code is located at
-&dollar;0400, so about 63K of the complete bank are actually usable for
-applications.
-
-Special locations:
-
-<descrip>
-  <tag/Stack/
-  The C runtime stack is located at &dollar;FF81, and grows downwards.
-
-  <tag/Heap/
-  The C heap is located at the end of the program, and grows towards the C
-  runtime stack.
-</descrip><p>
-
-
-
-<sect>Platform-specific header files<p>
-
-Programs containing CBM 610-specific code may use the <tt/cbm610.h/ or
-<tt/cbm.h/ header files. Using the later may be an option when writing code
-for more than one CBM platform, since it includes <tt/cbm610.h/, and declares
-several functions common to all CBM platforms.
-
-
-<sect1>CBM 610-specific functions<p>
-
-The functions listed below are special for the CBM 610. See the <url
-url="funcref.html" name="function reference"> for declaration and usage.
-
-<itemize>
-<item>peekbsys
-<item>peekwsys
-<item>pokebsys
-<item>pokewsys
-</itemize>
-
-
-<sect1>CBM-specific functions<p>
-
-Some functions are available for all (or at least most) of the Commodore
-machines. See the <url url="funcref.html" name="function reference"> for
-declaration and usage.
-
-
-<itemize>
-<item>cbm_close
-<item>cbm_closedir
-<item>cbm_k_setlfs
-<item>cbm_k_setnam
-<item>cbm_k_load
-<item>cbm_k_save
-<item>cbm_k_open
-<item>cbm_k_close
-<item>cbm_k_readst
-<item>cbm_k_chkin
-<item>cbm_k_ckout
-<item>cbm_k_basin
-<item>cbm_k_bsout
-<item>cbm_k_clrch
-<item>cbm_load
-<item>cbm_open
-<item>cbm_opendir
-<item>cbm_read
-<item>cbm_readdir
-<item>cbm_save
-<item>cbm_write
-<item>get_tv
-</itemize>
-
-
-<sect1>Hardware access<p>
-
-The following pseudo variables declared in the <tt/cbm610.h/ header file do
-allow access to hardware located in the address space. Some variables are
-structures; accessing the struct fields will access the chip registers.
-
-<em/Note:/ All I/O chips are located in the system bank (bank 15); and can
-therefore not be accessed like on other platforms. Please use one of the
-<tt/peekbsys/, <tt/peekwsys/, <tt/pokebsys/, and <tt/pokewsys/ functions to
-access the I/O chips. Direct reads and writes to the structures named below
-will <em>not</em> work!
-
-<descrip>
-
-  <tag><tt/CRTC/</tag>
-  The <tt/CRTC/ structure allows access to the CRTC (the video controller).
-  See the <tt/_6545.h/ header file located in the include directory for the
-  declaration of the structure.
-
-  <tag><tt/SID/</tag> The <tt/SID/ structure allows access to the SID (the
-  sound interface device). See the <tt/_sid.h/ header file located in the
-  include directory for the declaration of the structure.
-
-  <tag><tt/ACIA/</tag>
-  Access to the ACIA (the RS232 chip) is available via the <tt/ACIA/ variable.
-  See the <tt/_6551.h/ header file located in the include directory for the
-  declaration of the structure.
-
-  <tag><tt/CIA/</tag>
-  Access to the CIA chip is available via the <tt/CIA/ variable. See the
-  <tt/_6526.h/ header file located in the include directory for the
-  declaration of the structure.
-
-  <tag><tt/TPI1, TPI2/</tag>
-  The two 6525 triport chips may be accessed by using these variables. See the
-  <tt/_6525.h/ header file located in the include directory for the
-  declaration of the structure.
-
-</descrip><p>
-
-
-
-<sect>Loadable drivers<p>
-
-The names in the parentheses denote the symbols to be used for static linking of the drivers.
-
-
-<sect1>Graphics drivers<p>
-
-No graphics drivers are currently available for the Commodore 610 (and since
-the machine has no graphics capabilities, chances for a graphics driver aren't
-really good :-).
-
-
-<sect1>Extended memory drivers<p>
-
-<descrip>
-  <tag><tt/cbm610-ram.emd (cbm610_ram_emd)/</tag>
-  A driver for the RAM in bank 2. Supports up to 255 pages with 256 bytes
-  each.
-</descrip><p>
-
-
-<sect1>Joystick drivers<p>
-
-The Commodore 610 is a business machine, and doesn't have joystick ports. There
-are no drivers for the non-existing ports available.
-
-
-<sect1>Mouse drivers<p>
-
-No mouse drivers are currently available for the Commodore 610.
-
-
-<sect1>RS232 device drivers<p>
-
-<descrip>
-
-  <tag><tt/cbm610-std.ser (cbm610_std_ser)/</tag>
-  Driver for the 6551 ACIA chip built into the Commodore 610. Supports up to
-  19200 BPS, hardware flow control (RTS/CTS), and interrupt-driven receives.
-  Note that, because of the peculiarities of the 6551 chip, transmits are not
-  interrupt driven; and, the transceiver blocks if the receiver asserts flow
-  control because of a full buffer.
-
-</descrip><p>
-
-
-
-<sect>Limitations<label id="limitations"><p>
-
-
-<sect1>Kernal and hardware access<p>
-
-Since the program runs in bank 1, and the kernal and all I/O chips are located
-in bank 15, calling ROM routines or accessing hardware needs special code. The
-cc65 runtime implements wrappers for all functions in the kernal jump table.
-While this simplifies things, it should be noted that the wrappers do have
-quite an impact on performance: A cross-bank call has an extra 300&micro;s
-penalty added by the wrapper.
-
-
-<sect1>Interrupts<p>
-
-Compiled programs contain an interrupt handler that runs in the program bank.
-This has several advantages, one of them being performance (see cross-bank
-call overhead mentioned above). However, this introduces one problem:
-Interrupts are lost while the CPU executes code in the kernal bank. As a
-result, the clock may go wrong; and (worse), serial interrupts may get lost.
-
-Since the cc65 runtime does only call the kernal for disk I/O, this means that
-a program should not do file I/O while it depends on interrupts.
-
-
-
-<sect>Other hints<p>
-
-
-<sect1>Passing arguments to the program<p>
-
-Command-line arguments can be passed to <tt/main()/. Since that is not
-supported directly by BASIC, the following syntax was chosen:
-
-<tscreen><verb>
-    RUN:REM ARG1 " ARG2 IS QUOTED" ARG3 "" ARG5
-</verb></tscreen>
-
-<enum>
-<item>Arguments are separated by spaces.
-<item>Arguments may be quoted.
-<item>Leading and trailing spaces around an argument are ignored. Spaces within
-      a quoted argument are allowed.
-<item>The first argument passed to <tt/main()/ is the program name.
-<item>A maximum number of 10 arguments (including the program name) are
-      supported.
-</enum>
-
-
-<sect1>Program return code<p>
-
-The program return code (low byte) is passed back to BASIC by use of the
-<tt/ST/ variable.
-
-
-<sect1>Interrupt handlers<p>
-
-The runtime for the Commodore 610 uses routines marked as <tt/.INTERRUPTOR/
-for interrupt handlers. Such routines must be written as simple machine
-language subroutines and will be called automatically by the interrupt handler
-code when they are linked into a program. See the discussion of the
-<tt/.CONDES/ feature in the <url url="ca65.html" name="assembler manual">.
-
-
-
-<sect>License<p>
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
diff --git a/doc/cc65.sgml b/doc/cc65.sgml
deleted file mode 100644 (file)
index 9198d69..0000000
+++ /dev/null
@@ -1,1437 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-<title>cc65 Users Guide
-<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
-<date>2015-05-26
-
-<abstract>
-cc65 is a C compiler for 6502 targets. It supports several 6502 based home
-computers like the Commodore and Atari machines, but it is easily retargetable.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-
-<sect>Overview<p>
-
-cc65 was originally a C compiler for the Atari 8-bit machines written by
-John R. Dunning. In prior releases I've described the compiler by listing
-up the changes made by me. I have made many more changes in the meantime
-(and rewritten major parts of the compiler), so I will no longer do that,
-since the list would be too large and of no use to anyone. Instead I will
-describe the compiler in respect to the ANSI/ISO C standard.
-
-There are separate documents named <url url="library.html"> and <url
-url="funcref.html"> that cover the library that is available for the compiler.
-If you know C, and are interested in doing actual programming, the library
-documentation is probably of much more use than this document.
-
-If you need some hints for getting the best code out of the compiler, you
-may have a look at <url url="coding.html"> which covers some code generation
-issues.
-
-
-
-<sect>Usage<p>
-
-The compiler translates C files into files containing assembly code that
-may be translated by the ca65 macroassembler (for more information about
-the assembler, have a look at <url url="ca65.html">).
-
-
-<sect1>Command line option overview<p>
-
-The compiler may be called as follows:
-
-<tscreen><verb>
----------------------------------------------------------------------------
-Usage: cc65 [options] file
-Short options:
-  -Cl                           Make local variables static
-  -Dsym[=defn]                  Define a symbol
-  -E                            Stop after the preprocessing stage
-  -I dir                        Set an include directory search path
-  -O                            Optimize code
-  -Oi                           Optimize code, inline more code
-  -Or                           Enable register variables
-  -Os                           Inline some known functions
-  -T                            Include source as comment
-  -V                            Print the compiler version number
-  -W warning[,...]              Suppress warnings
-  -d                            Debug mode
-  -g                            Add debug info to object file
-  -h                            Help (this text)
-  -j                            Default characters are signed
-  -mm model                     Set the memory model
-  -o name                       Name the output file
-  -r                            Enable register variables
-  -t sys                        Set the target system
-  -v                            Increase verbosity
-
-Long options:
-  --add-source                  Include source as comment
-  --all-cdecl                   Make functions default to __cdecl__
-  --bss-name seg                Set the name of the BSS segment
-  --check-stack                 Generate stack overflow checks
-  --code-name seg               Set the name of the CODE segment
-  --codesize x                  Accept larger code by factor x
-  --cpu type                    Set cpu type (6502, 65c02)
-  --create-dep name             Create a make dependency file
-  --create-full-dep name        Create a full make dependency file
-  --data-name seg               Set the name of the DATA segment
-  --debug                       Debug mode
-  --debug-info                  Add debug info to object file
-  --debug-opt name              Debug optimization steps
-  --dep-target target           Use this dependency target
-  --disable-opt name            Disable an optimization step
-  --enable-opt name             Enable an optimization step
-  --help                        Help (this text)
-  --include-dir dir             Set an include directory search path
-  --list-opt-steps              List all optimizer steps and exit
-  --list-warnings               List available warning types for -W
-  --local-strings               Emit string literals immediately
-  --memory-model model          Set the memory model
-  --register-space b            Set space available for register variables
-  --register-vars               Enable register variables
-  --rodata-name seg             Set the name of the RODATA segment
-  --signed-chars                Default characters are signed
-  --standard std                Language standard (c89, c99, cc65)
-  --static-locals               Make local variables static
-  --target sys                  Set the target system
-  --verbose                     Increase verbosity
-  --version                     Print the compiler version number
-  --writable-strings            Make string literals writable
----------------------------------------------------------------------------
-</verb></tscreen>
-
-
-<sect1>Command line options in detail<p>
-
-Here is a description of all the command line options:
-
-<descrip>
-
-  <tag><tt>--all-cdecl</tt></tag>
-
-  Tells the compiler that functions which aren't declared explicitly with
-  either the <tt/__cdecl__/ or <tt/__fastcall__/ calling conventions should
-  have the cdecl convention.  (Normally, functions that aren't variadic are
-  fast-called.)
-
-
-  <label id="option-bss-name">
-  <tag><tt>--bss-name seg</tt></tag>
-
-  Set the name of the bss segment. See also <tt/<ref id="pragma-bss-name"
-  name="#pragma&nbsp;bss-name">/.
-
-
-  <label id="option-check-stack">
-  <tag><tt>--check-stack</tt></tag>
-
-  Tells the compiler to generate code that checks for stack overflows. See
-  <tt/<ref id="pragma-check-stack" name="#pragma&nbsp;check-stack">/ for an
-  explanation of this feature.
-
-
-  <label id="option-code-name">
-  <tag><tt>--code-name seg</tt></tag>
-
-  Set the name of the code segment. See also <tt/<ref id="pragma-code-name"
-  name="#pragma&nbsp;code-name">/
-
-
-  <label id="option-codesize">
-  <tag><tt>--codesize x</tt></tag>
-
-  This options allows finer control about speed vs. size decisions in the code
-  generation and optimization phases. It gives the allowed size increase
-  factor (in percent). The default is 100 when not using <tt/-Oi/ and 200 when
-  using <tt/-Oi/ (<tt/-Oi/ is the same as <tt/-O --codesize&nbsp;200/).
-
-
-  <label id="option--cpu">
-  <tag><tt>--cpu CPU</tt></tag>
-
-  Set the CPU, the compiler generates code for. You may specify "6502" or
-  "65C02" as the CPU. The default depends on the selected target (see option
-  <tt/<ref id="option-t" name="-t">/). It is the 6502 CPU for most targets or
-  if no target has been set. Specifying 65C02 will use a few 65C02
-  instructions when generating code. Don't expect too much from this option:
-  In most cases the difference in size and speed is just 1-2%.
-
-
-  <label id="option-create-dep">
-  <tag><tt>--create-dep name</tt></tag>
-
-  Tells the compiler to generate a file containing the dependency list for the
-  compiled module in makefile syntax. The output is written to a file with the
-  given name. The output does not include system include files (in angle
-  brackets).
-
-
-  <label id="option-create-full-dep">
-  <tag><tt>--create-full-dep name</tt></tag>
-
-  Tells the compiler to generate a file containing the dependency list for the
-  compiled module in makefile syntax. The output is written to a file with the
-  given name. The output does include system include files (in angle
-  brackets).
-
-
-  <label id="option-data-name">
-  <tag><tt>--data-name seg</tt></tag>
-
-  Set the name of the data segment. See also <tt/<ref id="pragma-data-name"
-  name="#pragma&nbsp;data-name">/
-
-
-  <tag><tt>-d, --debug</tt></tag>
-
-  Enables debug mode, something that should not be needed for mere
-  mortals:-)
-
-
-  <label id="option-dep-target">
-  <tag><tt>--dep-target target</tt></tag>
-
-  When generating a dependency file, don't use the actual output file as the
-  target of the dependency, but the file specified with this option. The
-  option has no effect if neither <tt/<ref id="option-create-dep"
-  name="--create-dep">/ nor <tt/<ref id="option-create-full-dep"
-  name="--create-full-dep">/ is specified.
-
-
-  <tag><tt>-D sym[=definition]</tt></tag>
-
-  Define a macro on the command line. If no definition is given, the macro
-  is defined to the value "1".
-
-
-  <tag><tt>-g, --debug-info</tt></tag>
-
-  This will cause the compiler to insert a <tt/.DEBUGINFO/ command into the
-  generated assembler code. This will cause the assembler to include all
-  symbols in a special section in the object file.
-
-
-  <tag><tt>-h, --help</tt></tag>
-
-  Print the short option summary shown above.
-
-
-  <label id="option-list-warnings">
-  <tag><tt>--list-warnings</tt></tag>
-
-  List the names of warning types available for use with <tt><ref
-  id="option-W" name="-W"></tt>.
-
-
-  <label id="option-local-strings">
-  <tag><tt>--local-strings</tt></tag>
-
-  Emit string literals into the rodata segment as soon as they're encountered
-  in the source (even if you do nothing but get the sizeof those strings). The
-  default is to keep string literals until end of assembly, merge read only
-  literals if possible, and then output the literals into the data or rodata
-  segment that is active at that point. Use of this option prevents merging of
-  duplicate strings, but the options that change the name of one of the data
-  segments will work.
-
-  You can also use <tt><ref id="pragma-local-strings"
-  name="#pragma&nbsp;local-strings"></tt> for fine grained control.
-
-
-  <tag><tt>-o name</tt></tag>
-
-  Specify the name of the output file. If you don't specify a name, the
-  name of the C input file is used, with the extension replaced by ".s".
-
-
-  <label id="option-register-vars">
-  <tag><tt>-r, --register-vars</tt></tag>
-
-  <tt/-r/ will make the compiler honor the <tt/register/ keyword. Local
-  variables may be placed in registers (which are actually zero page
-  locations). There is some overhead involved with register variables, since
-  the old contents of the registers must be saved and restored. Since register
-  variables are of limited use without the optimizer, there is also a combined
-  switch: <tt/-Or/ will enable both, the optimizer and register variables.
-
-  For more information about register variables see <ref id="register-vars"
-  name="register variables">.
-
-  The compiler setting can also be changed within the source file by using
-  <tt/<ref id="pragma-register-vars" name="#pragma&nbsp;register-vars">/.
-
-
-  <label id="option-register-space">
-  <tag><tt>--register-space</tt></tag>
-
-  This option takes a numeric parameter and is used to specify, how much
-  zero page register space is available. Please note that just giving this
-  option will not increase or decrease by itself, it will just tell the
-  compiler about the available space. You will have to allocate that space
-  yourself using an assembler module with the necessary allocations, and a
-  linker configuration that matches the assembler module. The default value
-  for this option is 6 (bytes).
-
-  If you don't know what all this means, please don't use this option.
-
-
-  <label id="option-rodata-name">
-  <tag><tt>--rodata-name seg</tt></tag>
-
-  Set the name of the rodata segment (the segment used for readonly data).
-  See also <tt/<ref id="pragma-rodata-name" name="#pragma&nbsp;rodata-name">/
-
-  <label id="option-signed-chars">
-  <tag><tt>-j, --signed-chars</tt></tag>
-
-  Using this option, you can make the default characters signed. Since the
-  6502 has no provisions for sign extending characters (which is needed on
-  almost any load operation), this will make the code larger and slower. A
-  better way is to declare characters explicitly as "signed" if needed. You
-  can also use <tt><ref id="pragma-signed-chars"
-  name="#pragma&nbsp;signed-chars"></tt> for better control of this option.
-
-
-  <label id="option--standard">
-  <tag><tt>--standard std</tt></tag>
-
-  This option allows to set the language standard supported. The argument is
-  one of
-  <descrip>
-    <tag/c89/
-      This disables anything that is illegal in C89/C90. Among those things
-      are <tt>//</tt> comments and the non-standard keywords without
-      underscores. Please note that cc65 is not a fully C89 compliant compiler
-      despite this option. A few more things (like floats) are missing.
-
-    <tag/c99/
-      This enables a few features from the C99 standard. With this option,
-      <tt>//</tt> comments are allowed. It will also cause warnings and even
-      errors in a few situations that are allowed with <tt/--standard c89/.
-      For example, a call to a function without a prototype is an error in
-      this mode.
-
-    <tag/cc65/
-      This is the default mode. It is like c99 mode, but additional features
-      are enabled. Among these are "void data", non-standard keywords without
-      the underlines, unnamed function parameters and the requirement for
-      main() to return an int.
-  </descrip>
-
-  Please note that the compiler does not support the C99 standard and never
-  will. c99 mode is actually c89 mode with a few selected C99 extensions.
-
-
-  <label id="option-t">
-  <tag><tt>-t target, --target target</tt></tag>
-
-  This option is used to set the target system. The target system determines
-  the character set that is used for strings and character constants and the
-  default CPU. The CPU setting can be overriden by use of the <tt/<ref
-  id="option--cpu" name="--cpu">/ option.
-
-  The following target systems are supported:
-
-  <itemize>
-  <item>none
-  <item>apple2
-  <item>apple2enh
-  <item>atari
-  <item>atarixl
-  <item>atmos
-  <item>c16 (works also for the c116 with memory up to 32K)
-  <item>c64
-  <item>c128
-  <item>cbm510 (CBM-II series with 40 column video)
-  <item>cbm610 (all CBM-II II computers with 80 column video)
-  <item>geos-apple
-  <item>geos-cbm
-  <item>lunix
-  <item>lynx
-  <item>nes
-  <item>osic1p
-  <item>pet (all CBM PET systems except the 2001)
-  <item>plus4
-  <item>sim6502
-  <item>sim65c02
-  <item>supervision
-  <item>vic20
-  </itemize>
-
-  <tag><tt>-v, --verbose</tt></tag>
-
-  Using this option, the compiler will be somewhat more verbose if errors
-  or warnings are encountered.
-
-
-  <label id="option-writable-strings">
-  <tag><tt>--writable-strings</tt></tag>
-
-  Make string literals writable by placing them into the data segment instead
-  of the rodata segment. You can also use <tt><ref id="pragma-writable-strings"
-  name="#pragma&nbsp;writable-strings"></tt> to control this option from within
-  the source file.
-
-
-  <label id="option-static-locals">
-  <tag><tt>-Cl, --static-locals</tt></tag>
-
-  Use static storage for local variables instead of storage on the stack.
-  Since the stack is emulated in software, this gives shorter and usually
-  faster code, but the code is no longer reentrant. The difference between
-  <tt/-Cl/ and declaring local variables as static yourself is, that
-  initializer code is executed each time, the function is entered. So when
-  using
-
-  <tscreen><verb>
-       void f (void)
-       {
-           unsigned a = 1;
-           ...
-       }
-  </verb></tscreen>
-
-  the variable <tt/a/ will always have the value <tt/1/ when entering the
-  function and using <tt/-Cl/, while in
-
-  <tscreen><verb>
-       void f (void)
-       {
-           static unsigned a = 1;
-           ....
-       }
-  </verb></tscreen>
-
-  the variable <tt/a/ will have the value <tt/1/ only the first time that the
-  function is entered, and will keep the old value from one call of the
-  function to the next.
-
-  You may also use <tt><ref id="pragma-static-locals"
-  name="#pragma&nbsp;static-locals"></tt> to change this setting in your
-  sources.
-
-
-  <label id="option-include-dir">
-  <tag><tt>-I dir, --include-dir dir</tt></tag>
-
-  Set a directory where the compiler searches for include files. You may
-  use this option multiple times to add more than one directory to the
-  search list.
-
-
-  <label id="option-O">
-  <tag><tt>-O, -Oi, -Or, -Os</tt></tag>
-
-  Enable an optimizer run over the produced code.
-
-  Using <tt/-Oi/, the code generator will inline some code where otherwise a
-  runtime functions would have been called, even if the generated code is
-  larger. This will not only remove the overhead for a function call, but will
-  make the code visible for the optimizer. <tt/-Oi/ is an alias for
-  <tt/-O --codesize&nbsp;200/.
-
-  <tt/-Or/ will make the compiler honor the <tt/register/ keyword. Local
-  variables may be placed in registers (which are actually zero page
-  locations). See also the <tt/<ref id="option-register-vars"
-  name="--register-vars">/ command line option, and the <ref
-  id="register-vars" name="discussion of register variables"> below.
-
-  Using <tt/-Os/ will force the compiler to inline some known functions from
-  the C library like strlen. Note: This has two consequences:
-  <p>
-  <itemize>
-  <item>You may not use names of standard C functions in your own code. If you
-       do that, your program is not standard compliant anyway, but using
-       <tt/-Os/ will actually break things.
-       <p>
-  <item>The inlined string and memory functions will not handle strings or
-       memory areas larger than 255 bytes. Similarly, the inlined <tt/is..()/
-       functions will not work with values outside the char. range (such as
-       <tt/EOF/).
-       <p>
-  </itemize>
-  <p>
-  It is possible to concatenate the modifiers for <tt/-O/. For example, to
-  enable register variables and inlining of known functions, you may use
-  <tt/-Ors/.
-
-
-  <tag><tt>-T, --add-source</tt></tag>
-
-  This include the source code as comments in the generated code. This is
-  normally not needed.
-
-
-  <tag><tt>-V, --version</tt></tag>
-
-  Print the version number of the compiler. When submitting a bug report,
-  please include the operating system you're using, and the compiler
-  version.
-
-
-  <label id="option-W">
-  <tag><tt>-W name[,name]</tt></tag>
-
-  This option allows to control warnings generated by the compiler. It is
-  followed by a comma separated list of warnings that should be enabled or
-  disabled. To disable a warning, its name is prefixed by a minus sign. If
-  no such prefix exists, or the name is prefixed by a plus sign, the warning
-  is enabled.
-
-  The following warning names are currently recognized:
-  <descrip>
-  <tag><tt/const-comparison/</tag>
-        Warn if the result of a comparison is constant.
-  <tag><tt/error/</tag>
-        Treat all warnings as errors.
-  <tag><tt/no-effect/</tag>
-        Warn about statements that don't have an effect.
-  <tag><tt/struct-param/</tag>
-        Warn when passing structs by value.
-  <tag><tt/unknown-pragma/</tag>
-        Warn about known #pragmas.
-  <tag><tt/unused-label/</tag>
-        Warn about unused labels.
-  <tag><tt/unused-param/</tag>
-        Warn about unused function parameters.
-  <tag><tt/unused-var/</tag>
-        Warn about unused variables.
-  </descrip>
-
-  The full list of available warning names may be retrieved by using the
-  option <tt><ref id="option-list-warnings" name="--list-warnings"></tt>.
-
-  You may also use <tt><ref id="pragma-warn" name="#pragma&nbsp;warn"></tt> to
-  control this setting for smaller pieces of code from within your code.
-
-</descrip><p>
-
-
-<sect>Input and output<p>
-
-The compiler will accept one C file per invocation and create a file with
-the same base name, but with the extension replaced by ".s". The output
-file contains assembler code suitable for use with the ca65 macro
-assembler.
-
-Include files in quotes are searched in the following places:
-<enum>
-<item>The current file's directory.
-<item>Any directory added with the <tt/-I/ option on the command line.
-<item>The value of the environment variable <tt/CC65_INC/ if it is defined.
-</enum>
-
-Include files in angle brackets are searched in the following places:
-<enum>
-<item>Any directory added with the <tt/-I/ option on the command line.
-<item>The value of the environment variable <tt/CC65_INC/ if it is defined.
-<item>A subdirectory named <tt/include/ of the directory defined in the
-      environment variable <tt/CC65_HOME/, if it is defined.
-<item>An optionally compiled-in directory.
-</enum>
-
-
-
-<sect>Differences to the ISO standard<p>
-
-Apart from the things listed below, the compiler does support additional
-keywords, has several functions in the standard headers with names outside the
-reserved namespace and a few syntax extensions. All these can be disabled with
-the <tt><ref id="option--standard" name="--standard"></tt> command line
-option. Its use for maximum standards compatibility is advised.
-
-Here is a list of differences between the language, the compiler accepts,
-and the one defined by the ISO standard:
-
-<itemize>
-
-<item> The datatypes "float" and "double" are not available.
-       <p>
-<item>         C Functions may not return structs (or unions), and structs may not
-        be passed as parameters by value. However, struct assignment *is*
-       possible.
-       <p>
-<item> Most of the C library is available with only the fastcall calling
-       convention (<ref id="extension-fastcall" name="see below">).  It means
-       that you must not mix pointers to those functions with pointers to
-       user-written, cdecl functions (the calling conventions are incompatible).
-       <p>
-<item> The <tt/volatile/ keyword doesn't have an effect. This is not as bad
-        as it sounds, since the 6502 has so few registers that it isn't
-        possible to keep values in registers anyway.
-       <p>
-</itemize>
-
-There may be some more minor differences I'm currently not aware of. The
-biggest problem is the missing float data type. With this limitation in
-mind, you should be able to write fairly portable code.
-
-
-
-<sect>Extensions<p>
-
-This cc65 version has some extensions to the ISO C standard.
-
-<itemize>
-
-<item> The compiler allows to insert assembler statements into the output
-       file. The syntax is
-
-       <tscreen><verb>
-       asm (&lt;string literal&gt;[, optional parameters]) ;
-       </verb></tscreen>
-       or
-       <tscreen><verb>
-               __asm__ (&lt;string literal&gt;[, optional parameters]) ;
-       </verb></tscreen>
-
-       The first form is in the user namespace and is disabled if the <tt/-A/
-       switch is given.
-
-       There is a whole section covering inline assembler statements,
-       <ref id="inline-asm" name="see there">.
-       <p>
-
-<label id="extension-fastcall">
-<item> The normal calling convention -- for non-variadic functions -- is
-       named "fastcall". The syntax for a function declaration that
-       <em/explicitly/ uses fastcall is
-
-       <tscreen><verb>
-       &lt;return type&gt; fastcall &lt;function name&gt; (&lt;parameter list&gt;)
-       </verb></tscreen>
-       or
-       <tscreen><verb>
-       &lt;return type&gt; __fastcall__ &lt;function name&gt; (&lt;parameter list&gt;)
-       </verb></tscreen>
-       An example is
-       <tscreen><verb>
-       void __fastcall__ f (unsigned char c)
-       </verb></tscreen>
-       The first form of the fastcall keyword is in the user namespace and can
-       therefore be disabled with the <tt><ref id="option--standard"
-        name="--standard"></tt> command line option.
-
-       For functions that are <tt/fastcall/, the rightmost parameter is not
-       pushed on the stack but left in the primary register when the function
-       is called. That significantly reduces the cost of calling those functions.
-       <newline><newline>
-       <p>
-
-<item>  There is another calling convention named "cdecl". Variadic functions
-        (their prototypes have an ellipsis &lsqb;<tt/.../&rsqb;) always use that
-        convention. The syntax for a function declaration using cdecl is
-
-        <tscreen><verb>
-        &lt;return type&gt; cdecl &lt;function name&gt; (&lt;parameter list&gt;)
-        </verb></tscreen>
-        or
-        <tscreen><verb>
-        &lt;return type&gt; __cdecl__ &lt;function name&gt; (&lt;parameter list&gt;)
-        </verb></tscreen>
-        An example is
-        <tscreen><verb>
-        int* __cdecl__ f (unsigned char c)
-        </verb></tscreen>
-
-        The first form of the cdecl keyword is in the user namespace;
-        and therefore, can be disabled with the <tt/<ref id="option--standard"
-        name="--standard">/ command-line option.
-
-        For functions that are <tt/cdecl/, the rightmost parameter is pushed
-        onto the stack before the function is called. That increases the cost
-        of calling those functions, especially when they are called from many
-        places.<newline><newline>
-        <p>
-
-<item> There are two pseudo variables named <tt/__AX__/ and <tt/__EAX__/.
-       Both refer to the primary register that is used by the compiler to
-       evaluate expressions or return function results. <tt/__AX__/ is of
-       type <tt/unsigned int/ and <tt/__EAX__/ of type <tt/long unsigned int/
-       respectively. The pseudo variables may be used as lvalue and rvalue as
-       every other variable. They are most useful together with short
-       sequences of assembler code. For example, the macro
-
-       <tscreen><verb>
-               #define hi(x)           \
-            (__AX__ = (x),      \
-             asm ("txa"),       \
-             asm ("ldx #$00"),  \
-             __AX__)
-       </verb></tscreen>
-
-       will give the high byte of any unsigned value.
-       <p>
-
-<item> Inside a function, the identifier <tt/__func__/ gives the name of the
-       current function as a string. Outside of functions, <tt/__func__/ is
-       undefined.
-       Example:
-
-       <tscreen><verb>
-       #define PRINT_DEBUG(s)  printf ("%s: %s\n", __func__, s);
-       </verb></tscreen>
-
-       The macro will print the name of the current function plus a given
-       string.
-       <p>
-
-<item>         cc65 allows the initialization of <tt/void/ variables. This may be
-       used to create variable structures that are more compatible with
-       interfaces written for assembler languages. Here is an example:
-
-       <tscreen><verb>
-       void GCmd = {   (char)3, (unsigned)0x2000, (unsigned)0x3000 };
-       </verb></tscreen>
-
-       This will be translated as follows:
-
-       <tscreen><verb>
-       _GCmd:
-               .byte   3
-               .word   $2000
-               .word   $3000
-       </verb></tscreen>
-
-       Since the variable is of type <tt/void/ you may not use it as is.
-       However, taking the address of the variable results in a <tt/void*/
-       which may be passed to any function expecting a pointer.
-
-       See the <url url="geos.html" name="GEOS library document"> for examples
-       on how to use this feature.
-       <p>
-
-<item>  cc65 implements flexible array struct members as defined in the C99 ISO
-        standard. As an extension, these fields may be initialized. There are
-        several exceptions, however (which is probably the reason why the
-        standard does not define this feature, because it is highly
-        unorthogonal). Flexible array members cannot be initialized ...
-
-        <itemize>
-        <item>... when defining an array of structs with flexible
-                members.
-        <item>... if such a struct is a member field of another struct
-                which is not the last field.
-        <item>... if the struct which contains a flexible array member is
-                declared as <tt/register/, and the size and compiler settings
-                do allow the compiler actually to place the struct into the
-                register bank in the zero page.
-        </itemize>
-
-        Please note that -- as defined in the ISO C standard -- the <tt/sizeof/
-        operator returns the struct size with the flexible array member having
-        size zero, even if it is initialized.
-        <p>
-
-</itemize>
-<p>
-
-
-<sect>Predefined macros<p>
-
-The compiler defines several macros at startup:
-
-<descrip>
-  <tag><tt>__APPLE2__</tt></tag>
-
-  This macro is defined if the target is the Apple ][ (-t apple2) or the enhanced Apple //e (-t apple2enh).
-
-  <tag><tt>__APPLE2ENH__</tt></tag>
-
-  This macro is defined if the target is the enhanced Apple //e (-t apple2enh).
-
-  <tag><tt>__ATARI5200__</tt></tag>
-
-  This macro is defined if the target is the Atari 5200 game console.
-
-  <tag><tt>__ATARI__</tt></tag>
-
-  This macro is defined if the target is the Atari 400/800 (-t atari) or the Atari 800XL/130XE (-t atarixl).
-
-  <tag><tt>__ATARIXL__</tt></tag>
-
-  This macro is defined if the target is the Atari 800XL/130XE (-t atarixl).
-
-  <tag><tt>__ATMOS__</tt></tag>
-
-  This macro is defined if the target is the Oric Atmos (-t atmos).
-
-  <tag><tt>__C128__</tt></tag>
-
-  This macro is defined if the target is the Commodore 128 (-t c128).
-
-  <tag><tt>__C16__</tt></tag>
-
-  This macro is defined if the target is the Commodore 16/116 (-t c16) or the Commodore Plus/4 (-t plus4).
-
-  <tag><tt>__C64__</tt></tag>
-
-  This macro is defined if the target is the Commodore 64 (-t c64).
-
-  <tag><tt>__CBM__</tt></tag>
-
-  This macro is defined if the target system is one of the CBM targets.
-
-  <tag><tt>__CBM510__</tt></tag>
-
-  This macro is defined if the target is the CBM 500 series of computers.
-
-  <tag><tt>__CBM610__</tt></tag>
-
-  This macro is defined if the target is one of the CBM 600/700 family of
-  computers (called B series in the US).
-
-  <tag><tt>__CC65__</tt></tag>
-
-  This macro is always defined. Its value is the version number of the
-  compiler in hex.  For example, version 2.14 of the compiler has this macro
-  defined as <tt/0x02E0/.
-
-  <tag><tt>__CC65_STD__</tt></tag>
-
-  This macro is defined to one of the following depending on the <tt><ref
-  id="option--standard" name="--standard"></tt> command line option:
-  <itemize>
-  <item><tt/__CC65_STD_C89__/
-  <item><tt/__CC65_STD_C99__/
-  <item><tt/__CC65_STD_CC65__/
-  </itemize>
-
-  <tag><tt>__DATE__</tt></tag>
-
-  This macro expands to the date of translation of the preprocessing
-  translation unit in the form "Mmm dd yyyy".
-
-  <tag><tt>__FILE__</tt></tag>
-
-  This macro expands to a string containing the name of the C source file.
-
-  <tag><tt>__GEOS__</tt></tag>
-
-  This macro is defined if you are compiling for one of the GEOS systems.
-
-  <tag><tt>__GEOS_APPLE__</tt></tag>
-
-  This macro is defined if you are compiling for the Apple GEOS system (-t geos-apple).
-
-  <tag><tt>__GEOS_CBM__</tt></tag>
-
-  This macro is defined if you are compiling for the GEOS 64/128 system (-t geos-cbm).
-
-  <tag><tt>__LINE__</tt></tag>
-
-  This macro expands to the current line number.
-
-  <tag><tt>__LUNIX__</tt></tag>
-
-  This macro is defined if you are compiling for the LUnix system (-t lunix).
-
-  <tag><tt>__LYNX__</tt></tag>
-
-  This macro is defined if the target is the Atari Lynx (-t lynx).
-
-  <tag><tt>__NES__</tt></tag>
-
-  This macro is defined if the target is the Nintendo Entertainment System (-t nes).
-
-  <tag><tt>__OPT__</tt></tag>
-
-  Is defined if the compiler was called with the <tt/-O/ command line option.
-
-  <tag><tt>__OPT_i__</tt></tag>
-
-  Is defined if the compiler was called with the <tt/-Oi/ command line option.
-
-  <tag><tt>__OPT_r__</tt></tag>
-
-  Is defined if the compiler was called with the <tt/-Or/ command line option.
-
-  <tag><tt>__OPT_s__</tt></tag>
-
-  Is defined if the compiler was called with the <tt/-Os/ command line option.
-
-  <tag><tt>__OSIC1P__</tt></tag>
-
-  This macro is defined if the target is the Ohio Scientific Challenger 1P
-  (-t osic1p).
-
-  <tag><tt>__PET__</tt></tag>
-
-  This macro is defined if the target is the PET family of computers (-t pet).
-
-  <tag><tt>__PLUS4__</tt></tag>
-
-  This macro is defined if the target is the Commodore Plus/4 (-t plus4).
-
-  <tag><tt>__STDC_HOSTED__</tt></tag>
-
-  This macro is expands to the integer constant 1.
-
-  <tag><tt>__SIM6502__</tt></tag>
-
-  This macro is defined if the target is sim65 in 6502 mode (-t sim6502).
-
-  <tag><tt>__SIM65C02__</tt></tag>
-  This macro is defined if the target is sim65 in 65C02 mode (-t sim65c02).
-
-  <tag><tt>__SUPERVISION__</tt></tag>
-
-  This macro is defined if the target is the Supervision (-t supervision).
-
-  <tag><tt>__TIME__</tt></tag>
-
-  This macro expands to the time of translation of the preprocessing
-  translation unit in the form "hh:mm:ss".
-
-  <tag><tt>__VIC20__</tt></tag>
-
-  This macro is defined if the target is the Commodore VIC20 (-t vic20).
-</descrip>
-
-
-<sect>&num;pragmas<label id="pragmas"><p>
-
-The compiler understands some pragmas that may be used to change code
-generation and other stuff. Some of these pragmas understand a special form:
-If the first parameter is <tt/push/, the old value is saved onto a stack
-before changing it. The value may later be restored by using the <tt/pop/
-parameter with the <tt/#pragma/.
-
-<sect1><tt>#pragma bss-name (&lsqb;push,&rsqb; &lt;name&gt;)</tt><label id="pragma-bss-name"><p>
-
-  This pragma changes the name used for the BSS segment (the BSS segment
-  is used to store uninitialized data). The argument is a string enclosed
-  in double quotes.
-
-  Note: The default linker configuration file does only map the standard
-  segments. If you use other segments, you have to create a new linker
-  configuration file.
-
-  Beware: The startup code will zero only the default BSS segment. If you
-  use another BSS segment, you have to do that yourself, otherwise
-  uninitialized variables do not have the value zero.
-
-  The <tt/#pragma/ understands the push and pop parameters as explained above.
-
-  Example:
-  <tscreen><verb>
-               #pragma bss-name ("MyBSS")
-  </verb></tscreen>
-
-
-<sect1><tt>#pragma charmap (&lt;index&gt;, &lt;code&gt;)</tt><label id="pragma-charmap"><p>
-
-  Each literal string and each literal character in the source is translated
-  by use of a translation table. This translation table is preset when the
-  compiler is started depending on the target system, for example to map
-  ISO-8859-1 characters into PETSCII if the target is a commodore machine.
-
-  This pragma allows to change entries in the translation table, so the
-  translation for individual characters, or even the complete table may be
-  adjusted.
-
-  Both arguments are assumed to be unsigned characters with a valid range of
-  1-255.
-
-  Beware of two pitfalls:
-
-    <itemize>
-    <item>The character index is actually the code of the character in the
-         C source, so character mappings do always depend on the source
-         character set. This means that <tt/#pragma&nbsp;charmap/ is not
-         portable -- it depends on the build environment.
-    <item>While it is possible to use character literals as indices, the
-         result may be somewhat unexpected, since character literals are
-         itself translated. For this reason I would suggest to avoid
-         character literals and use numeric character codes instead.
-    </itemize>
-
-  Example:
-  <tscreen><verb>
-        /* Use a space wherever an 'a' occurs in ISO-8859-1 source */
-               #pragma charmap (0x61, 0x20);
-  </verb></tscreen>
-
-
-<sect1><tt>#pragma check-stack ([push,] on|off)</tt><label id="pragma-check-stack"><p>
-
-  Tells the compiler to insert calls to a stack checking subroutine to detect
-  stack overflows. The stack checking code will lead to somewhat larger and
-  slower programs, so you may want to use this pragma when debugging your
-  program and switch it off for the release version. If a stack overflow is
-  detected, the program is aborted.
-
-  If the argument is "off", stack checks are disabled (the default), otherwise
-  they're enabled.
-
-  The <tt/#pragma/ understands the push and pop parameters as explained above.
-
-<sect1><tt>#pragma code-name ([push,] &lt;name&gt;)</tt><label id="pragma-code-name"><p>
-
-  This pragma changes the name used for the CODE segment (the CODE segment
-  is used to store executable code). The argument is a string enclosed in
-  double quotes.
-
-  Note: The default linker configuration file does only map the standard
-  segments. If you use other segments, you have to create a new linker
-  configuration file.
-
-  The <tt/#pragma/ understands the push and pop parameters as explained above.
-
-  Example:
-  <tscreen><verb>
-               #pragma code-name ("MyCODE")
-  </verb></tscreen>
-
-
-<sect1><tt>#pragma codesize ([push,] &lt;int&gt;)</tt><label id="pragma-codesize"><p>
-
-  This pragma allows finer control about speed vs. size decisions in the code
-  generation and optimization phase. It gives the allowed size increase factor
-  (in percent). The default is can be changed by use of the <tt/<ref
-  id="option-codesize" name="--codesize">/ compiler option.
-
-  The <tt/#pragma/ understands the push and pop parameters as explained above.
-
-
-<sect1><tt>#pragma data-name ([push,] &lt;name&gt;)</tt><label id="pragma-data-name"><p>
-
-  This pragma changes the name used for the DATA segment (the DATA segment
-  is used to store initialized data). The argument is a string enclosed in
-  double quotes.
-
-  Note: The default linker configuration file does only map the standard
-  segments. If you use other segments, you have to create a new linker
-  configuration file.
-
-  The <tt/#pragma/ understands the push and pop parameters as explained above.
-
-  Example:
-  <tscreen><verb>
-               #pragma data-name ("MyDATA")
-  </verb></tscreen>
-
-
-<sect1><tt>#pragma local-strings ([push,] on|off)</tt><label id="pragma-local-strings"><p>
-
-  When "on", emit string literals to the data segment when they're encountered
-  in the source. The default ("off") is to keep string literals until end of
-  assembly, merge read only literals if possible, and then output the literals
-  into the data or rodata segment that is active at that point.
-
-  Using this <tt/#pragma/ it is possible to control the behaviour from within
-  the source. When <tt/#pragma local-strings/ is active, string literals are
-  output immediately, which means that they go into the currently active data
-  or rodata segment, but cannot be merged. When inactive, string literals are
-  remembered and output as a whole when translation is finished.
-
-
-<sect1><tt>#pragma optimize ([push,] on|off)</tt><label id="pragma-optimize"><p>
-
-  Switch optimization on or off. If the argument is "off", optimization is
-  disabled, otherwise it is enabled. Please note that this pragma only effects
-  whole functions. The setting in effect when the function is encountered will
-  determine if the generated code is optimized or not.
-
-  Optimization and code generation is also controlled by the <ref
-  id="pragma-codesize" name="codesize pragma">.
-
-  The default is "off", but may be changed with the <tt/<ref name="-O"
-  id="option-O">/ compiler option.
-
-  The <tt/#pragma/ understands the push and pop parameters as explained above.
-
-
-<sect1><tt>#pragma rodata-name ([push,] &lt;name&gt;)</tt><label id="pragma-rodata-name"><p>
-
-  This pragma changes the name used for the RODATA segment (the RODATA
-  segment is used to store readonly data). The argument is a string
-  enclosed in double quotes.
-
-  Note: The default linker configuration file does only map the standard
-  segments. If you use other segments, you have to create a new linker
-  configuration file.
-
-  The <tt/#pragma/ understands the push and pop parameters as explained above.
-
-  Example:
-  <tscreen><verb>
-               #pragma rodata-name ("MyRODATA")
-  </verb></tscreen>
-
-
-<sect1><tt>#pragma regvaraddr ([push,] on|off)</tt><label id="pragma-regvaraddr"><p>
-
-  The compiler does not allow to take the address of register variables.
-  The regvaraddr pragma changes this. Taking the address of a register
-  variable is allowed after using this pragma with "on" as argument.
-  Using "off" as an argument switches back to the default behaviour.
-
-  Beware: The C standard does not allow taking the address of a variable
-  declared as register. So your programs become non-portable if you use
-  this pragma. In addition, your program may not work. This is usually the
-  case if a subroutine is called with the address of a register variable,
-  and this subroutine (or a subroutine called from there) uses
-  register variables. So be careful with this #pragma.
-
-  The <tt/#pragma/ understands the push and pop parameters as explained above.
-
-  Example:
-  <tscreen><verb>
-               #pragma regvaraddr(on)  /* Allow taking the address
-                                        * of register variables
-                                        */
-  </verb></tscreen>
-
-
-<sect1><tt>#pragma register-vars ([push,] on|off)</tt><label id="pragma-register-vars"><p>
-
-  Enables or disables use of register variables. If register variables are
-  disabled (the default), the <tt/register/ keyword is ignored. Register
-  variables are explained in more detail in <ref id="register-vars" name="a separate
-  chapter">.
-
-  The <tt/#pragma/ understands the push and pop parameters as explained above.
-
-
-<sect1><tt>#pragma signed-chars ([push,] on|off)</tt><label id="pragma-signed-chars"><p>
-
-  Changes the signedness of the default character type. If the argument is
-  "on", default characters are signed, otherwise characters are unsigned. The
-  compiler default is to make characters unsigned since this creates a lot
-  better code. This default may be overridden by the <tt/<ref
-  name="--signed-chars" id="option-signed-chars">/ command line option.
-
-  The <tt/#pragma/ understands the push and pop parameters as explained above.
-
-
-<sect1><tt>#pragma static-locals ([push,] on|off)</tt><label id="pragma-static-locals"<p>
-
-  Use variables in the bss segment instead of variables on the stack. This
-  pragma changes the default set by the compiler option <tt/<ref
-  name="--static-locals" id="option-static-locals">/. If the argument is "on",
-  local variables are allocated in the BSS segment, leading to shorter and in
-  most cases faster, but non-reentrant code.
-
-  The <tt/#pragma/ understands the push and pop parameters as explained above.
-
-
-<sect1><tt>#pragma warn (name, [push,] on|off)</tt><label id="pragma-warn"><p>
-
-  Switch compiler warnings on or off. "name" is the name of a warning (see the
-  <tt/<ref name="-W" id="option-W">/ compiler option for a list). The name is
-  either followed by "pop", which restores the last pushed state, or by "on" or
-  "off", optionally preceeded by "push" to push the current state before
-  changing it.
-
-  Example:
-  <tscreen><verb>
-        /* Don't warn about the unused parameter in function func */
-       #pragma warn (unused-param, push, off)
-        static int func (int unused)
-        {
-            return 0;
-        }
-        #pragma warn (unused-param, pop)
-  </verb></tscreen>
-
-<sect1><tt>#pragma writable-strings ([push,] on|off)</tt><label id="pragma-writable-strings"><p>
-
-  Changes the storage location of string literals. For historical reasons,
-  the C standard defines that string literals are of type "char[]", but
-  writing to such a literal causes undefined behaviour. Most compilers
-  (including cc65) place string literals in the read-only data segment, which
-  may cause problems with old C code that writes to string literals.
-
-  Using this pragma (or the corresponding command line option <tt/<ref
-  name="--writable-strings" id="option-writable-strings">/) causes the
-  literals to be placed in the data segment so they can be written to without
-  worry.
-
-  The <tt/#pragma/ understands the push and pop parameters as explained above.
-
-
-<sect1><tt>#pragma zpsym (&lt;name&gt;)</tt><p>
-
-  Tell the compiler that the -- previously as external declared -- symbol with
-  the given name is a zero page symbol (usually from an assembler file).
-  The compiler will create a matching import declaration for the assembler.
-
-  Example:
-  <tscreen><verb>
-       extern int foo;
-       #pragma zpsym ("foo");  /* foo is in the zeropage */
-  </verb></tscreen>
-
-
-
-
-<sect>Register variables<label id="register-vars"><p>
-
-The runtime for all supported platforms has 6 bytes of zero page space
-available for register variables (this could be increased, but I think it's a
-good value). So you can declare register variables up to a total size of 6 per
-function. The compiler will allocate register space on a "first come, first
-served" base and convert any <tt/register/ declarations that exceed the
-available register space silently to <tt/auto/. Parameters can also be
-declared as <tt/register/, this will in fact give slightly shorter code than
-using a register variable.
-
-Since a function must save the current values of the registers on entry and
-restore them on exit, there is an overhead associated with register variables,
-and this overhead is quite high (about 20 bytes per variable). This means that
-just declaring anything as <tt/register/ is not a good idea.
-
-The best use for register variables are pointers, especially those that point
-to structures. The magic number here is about 3 uses of a struct field: If the
-function contains this number or even more, the generated code will be usually
-shorter and faster when using a register variable for the struct pointer. The
-reason for this is that the register variable can in many cases be used as a
-pointer directly. Having a pointer in an auto variable means that this pointer
-must first be copied into a zero page location, before it can be dereferenced.
-
-Second best use for register variables are counters. However, there is not
-much difference in the code generated for counters, so you will need at least
-100 operations on this variable (for example in a loop) to make it worth the
-trouble. The only savings you get here are by the use of a zero page variable
-instead of one on the stack or in the data segment.
-
-Register variables must be explicitly enabled, either by using <tt/<ref
-name="-Or" id="option-O">/ or <tt/<ref name="--register-vars"
-id="option-register-vars">/ on the command line or by use of <tt/<ref
-name="#pragma register-vars" id="pragma-register-vars">/. Register variables
-are only accepted on function top level, register variables declared in
-interior blocks are silently converted to <tt/auto/. With register variables
-disabled, all variables declared as <tt/register/ are actually auto variables.
-
-Please take care when using register variables: While they are helpful and can
-lead to a tremendous speedup when used correctly, improper usage will cause
-bloated code and a slowdown.
-
-
-
-<sect>Inline assembler<label id="inline-asm"><p>
-
-The compiler allows to insert assembler statements into the output file. The
-syntax is
-
-<tscreen><verb>
-       asm (&lt;string literal&gt;[, optional parameters]) ;
-</verb></tscreen>
-or
-<tscreen><verb>
-               __asm__ (&lt;string literal&gt;[, optional parameters]) ;
-</verb></tscreen>
-<p>
-
-The first form is in the user namespace and is disabled by <tt><ref
-id="option--standard" name="--standard"></tt> if the argument is not <tt/cc65/.
-
-The asm statement may be used inside a function and on global file level. An
-inline assembler statement is a primary expression, so it may also be used as
-part of an expression. Please note however that the result of an expression
-containing just an inline assembler statement is always of type <tt/void/.
-
-The contents of the string literal are preparsed by the compiler and inserted
-into the generated assembly output, so that the can be further processed by
-the backend and especially the optimizer. For this reason, the compiler does
-only allow regular 6502 opcodes to be used with the inline assembler. Pseudo
-instructions (like <tt/.import/, <tt/.byte/ and so on) are <em/not/ allowed,
-even if the ca65 assembler (which is used to translate the generated assembler
-code) would accept them. The builtin inline assembler is not a replacement for
-the full blown macro assembler which comes with the compiler.
-
-Note: Inline assembler statements are subject to all optimizations done by the
-compiler. There is currently no way to protect an inline assembler statement
-from being moved or removed completely by the optimizer. If in doubt, check
-the generated assembler output, or disable optimizations.
-
-The string literal may contain format specifiers from the following list. For
-each format specifier, an argument is expected which is inserted instead of
-the format specifier before passing the assembly code line to the backend.
-
-<itemize>
-  <item><tt/%b/ - Numerical 8-bit value
-  <item><tt/%w/ - Numerical 16-bit value
-  <item><tt/%l/ - Numerical 32-bit value
-  <item><tt/%v/ - Assembler name of a global variable or function
-  <item><tt/%o/ - Stack offset of a local variable
-  <item><tt/%g/ - Assembler name of a C label
-  <item><tt/%s/ - The argument is converted to a string
-  <item><tt/%%/ - The % sign itself
-</itemize><p>
-
-Using these format specifiers, you can access C <tt/#defines/, variables or
-similar stuff from the inline assembler. For example, to load the value of
-a C <tt/#define/ into the Y register, one would use
-
-<tscreen><verb>
-       #define OFFS  23
-               __asm__ ("ldy #%b", OFFS);
-</verb></tscreen>
-
-Or, to access a struct member of a static variable:
-
-<tscreen><verb>
-       typedef struct {
-           unsigned char x;
-           unsigned char y;
-           unsigned char color;
-       } pixel_t;
-       static pixel_t pixel;
-               __asm__ ("ldy #%b", offsetof(pixel_t, color));
-       __asm__ ("lda %v,y", pixel);
-</verb></tscreen>
-<p>
-The next example shows how to use global variables to exchange data between C
-an assembler and how to handle assembler jumps:
-
-<tscreen><verb>
-        unsigned char globalSubA, globalSubB, globalSubResult;
-
-        /* return a-b, return 255 if b>a */
-        unsigned char sub (unsigned char a, unsigned char b)
-        {
-            globalSubA = a;
-            globalSubB = b;
-            __asm__ ("sec");
-            __asm__ ("lda %v", globalSubA);
-            __asm__ ("sbc %v", globalSubB);
-            __asm__ ("bcs %g", jumpSubNoError);
-            __asm__ ("lda #$FF");
-        jumpSubNoError:
-            __asm__ ("sta %v", globalSubResult);
-            return globalSubResult;
-        }
-</verb></tscreen>
-<p>
-
-Arrays can also be accessed:
-
-<tscreen><verb>
-        unsigned char globalSquareTable[] = {
-            0, 1, 4, 9, 16, 25, 36, 49, 64, 81,
-            100, 121, 144, 169, 196, 225
-        };
-        unsigned char globalSquareA, globalSquareResult;
-
-        /* return a*a for a<16, else 255 */
-        unsigned char square (unsigned char a)
-        {
-            if (a>15){
-                return 255;
-            }
-            globalSquareA = a;
-            __asm__ ("ldx %v", globalSquareA);
-            __asm__ ("lda %v,x", globalSquareTable);
-            __asm__ ("sta %v", globalSquareResult);
-            return globalSquareResult;
-        }
-</verb></tscreen>
-<p>
-
-Note: Do not embed the assembler labels that are used as names of global
-variables or functions into your asm statements. Code like this
-
-<tscreen><verb>
-        int foo;
-        int bar () { return 1; }
-               __asm__ ("lda _foo");           /* DON'T DO THAT! */
-        ...
-        __asm__ ("jsr _bar");           /* DON'T DO THAT EITHER! */
-</verb></tscreen>
-<p>
-
-may stop working if the way, the compiler generates these names is changed in
-a future version. Instead use the format specifiers from the table above:
-
-<tscreen><verb>
-               __asm__ ("lda %v", foo);        /* OK */
-        ...
-        __asm__ ("jsr %v", bar);        /* OK */
-</verb></tscreen>
-<p>
-
-
-<sect>Implementation-defined behavior<p>
-
-This section describes the behavior of cc65 when the standard describes the
-behavior as implementation-defined.
-
-(to be done)
-
-<sect>Copyright<p>
-
-This is the original compiler copyright:
-
-<tscreen><verb>
---------------------------------------------------------------------------
-  -*- Mode: Text -*-
-
-     This is the copyright notice for RA65, LINK65, LIBR65, and other
-  Atari 8-bit programs.  Said programs are Copyright 1989, by John R.
-  Dunning.  All rights reserved, with the following exceptions:
-
-      Anyone may copy or redistribute these programs, provided that:
-
-  1:  You don't charge anything for the copy.  It is permissable to
-      charge a nominal fee for media, etc.
-
-  2:  All source code and documentation for the programs is made
-      available as part of the distribution.
-
-  3:  This copyright notice is preserved verbatim, and included in
-      the distribution.
-
-      You are allowed to modify these programs, and redistribute the
-  modified versions, provided that the modifications are clearly noted.
-
-      There is NO WARRANTY with this software, it comes as is, and is
-  distributed in the hope that it may be useful.
-
-      This copyright notice applies to any program which contains
-  this text, or the refers to this file.
-
-      This copyright notice is based on the one published by the Free
-  Software Foundation, sometimes known as the GNU project.  The idea
-  is the same as theirs, ie the software is free, and is intended to
-  stay that way.  Everybody has the right to copy, modify, and re-
-  distribute this software.  Nobody has the right to prevent anyone
-  else from copying, modifying or redistributing it.
-
---------------------------------------------------------------------------
-</verb></tscreen>
-
-Small parts of the compiler (parts of the preprocessor and main parser) are
-still covered by this copyright. The main portion is covered by the usual
-cc65 license, which reads:
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item>         The origin of this software must not be misrepresented; you must not
-               claim that you wrote the original software. If you use this software
-               in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
-
diff --git a/doc/cl65.sgml b/doc/cl65.sgml
deleted file mode 100644 (file)
index 6e044b8..0000000
+++ /dev/null
@@ -1,307 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-<title>cl65 Users Guide
-<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
-<date>01.08.2000, 27.11.2000, 02.10.2001
-
-<abstract>
-cl65 is the compile &amp; link utility for cc65, the 6502 C compiler. It was
-designed as a smart frontend for the C compiler (cc65), the assembler (ca65),
-the object file converter (co65), and the linker (ld65).
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-cl65 is a frontend for cc65, ca65, co65 and ld65. While you may not use the
-full power of the tools when calling them through cl65, most features are
-available, and the use of cl65 is much simpler.
-
-
-<sect>Basic Usage<p>
-
-The cl65 compile and link utility may be used to convert, compile, assemble
-and link files. While the separate tools do just one step, cl65 knows how to
-build object files from C files (by calling the compiler, then the assembler)
-and other things.
-
-<tscreen><verb>
----------------------------------------------------------------------------
-Usage: cl65 [options] file [...]
-Short options:
-  -c                            Compile and assemble but don't link
-  -d                            Debug mode
-  -g                            Add debug info
-  -h                            Help (this text)
-  -l name                       Create an assembler listing file
-  -m name                       Create a map file
-  -mm model                     Set the memory model
-  -o name                       Name the output file
-  -r                            Enable register variables
-  -t sys                        Set the target system
-  -u sym                        Force an import of symbol `sym'
-  -v                            Verbose mode
-  -vm                           Verbose map file
-  -C name                       Use linker config file
-  -Cl                           Make local variables static
-  -D sym[=defn]                 Define a preprocessor symbol
-  -I dir                        Set a compiler include directory path
-  -L path                       Specify a library search path
-  -Ln name                      Create a VICE label file
-  -O                            Optimize code
-  -Oi                           Optimize code, inline functions
-  -Or                           Optimize code, honour the register keyword
-  -Os                           Optimize code, inline known C funtions
-  -S                            Compile but don't assemble and link
-  -T                            Include source as comment
-  -V                            Print the version number
-  -W name[,...]                 Supress compiler warnings
-  -Wa options                   Pass options to the assembler
-  -Wl options                   Pass options to the linker
-
-Long options:
-  --add-source                  Include source as comment
-  --asm-args options            Pass options to the assembler
-  --asm-define sym[=v]          Define an assembler symbol
-  --asm-include-dir dir         Set an assembler include directory
-  --bin-include-dir dir         Set an assembler binary include directory
-  --bss-label name              Define and export a BSS segment label
-  --bss-name seg                Set the name of the BSS segment
-  --cc-args options             Pass options to the compiler
-  --cfg-path path               Specify a config file search path
-  --check-stack                 Generate stack overflow checks
-  --code-label name             Define and export a CODE segment label
-  --code-name seg               Set the name of the CODE segment
-  --codesize x                  Accept larger code by factor x
-  --config name                 Use linker config file
-  --cpu type                    Set cpu type
-  --create-dep name             Create a make dependency file
-  --create-full-dep name        Create a full make dependency file
-  --data-label name             Define and export a DATA segment label
-  --data-name seg               Set the name of the DATA segment
-  --debug                       Debug mode
-  --debug-info                  Add debug info
-  --feature name                Set an emulation feature
-  --force-import sym            Force an import of symbol `sym'
-  --help                        Help (this text)
-  --include-dir dir             Set a compiler include directory path
-  --ld-args options             Pass options to the linker
-  --lib file                    Link this library
-  --lib-path path               Specify a library search path
-  --list-targets                List all available targets
-  --listing name                Create an assembler listing file
-  --list-bytes n                Number of bytes per assembler listing line
-  --mapfile name                Create a map file
-  --memory-model model          Set the memory model
-  --module                      Link as a module
-  --module-id id                Specify a module id for the linker
-  --o65-model model             Override the o65 model
-  --obj file                    Link this object file
-  --obj-path path               Specify an object file search path
-  --register-space b            Set space available for register variables
-  --register-vars               Enable register variables
-  --rodata-name seg             Set the name of the RODATA segment
-  --signed-chars                Default characters are signed
-  --standard std                Language standard (c89, c99, cc65)
-  --start-addr addr             Set the default start address
-  --static-locals               Make local variables static
-  --target sys                  Set the target system
-  --version                     Print the version number
-  --verbose                     Verbose mode
-  --zeropage-label name         Define and export a ZEROPAGE segment label
-  --zeropage-name seg           Set the name of the ZEROPAGE segment
----------------------------------------------------------------------------
-</verb></tscreen>
-
-Most of the options have the same meaning than the corresponding compiler,
-assembler or linker option. See the documentation for these tools for an
-explanation. If an option is available for more than one of the tools, it
-is set for all tools, where it is available. One example for this is <tt/-v/:
-The compiler, the assembler and the linker are all called with the <tt/-v/
-switch.
-
-There are a few remaining options that control the behaviour of cl65:
-
-<descrip>
-
-  <tag><tt>-S</tt></tag>
-
-  This option forces cl65 to stop after the assembly step. This means that
-  C files are translated into assembler files, but nothing more is done.
-  Assembler files, object files and libraries given on the command line
-  are ignored.
-
-
-  <tag><tt>-c</tt></tag>
-
-  This options forces cl65 to stop after the assembly step. This means
-  that C and assembler files given on the command line are translated into
-  object files, but there is no link step, and object files and libraries
-  given on the command line are ignored.
-
-
-  <tag><tt>-o name</tt></tag>
-
-  The -o option is used for the target name in the final step. This causes
-  problems, if the linker will not be called, and there are several input
-  files on the command line. In this case, the name given with -o will be
-  used for all of them, which makes the option pretty useless. You
-  shouldn't use -o when more than one output file is created.
-
-
-  <tag><tt>-t sys, --target sys</tt></tag>
-
-  The default for this option is different from the compiler and linker in the
-  case that the option is missing: While the other tools (compiler, assembler
-  and linker) will use the "none" system settings by default, cl65 will use
-  the C64 as a target system by default. This was chosen since most people
-  seem to use cc65 to develop for the C64.
-
-  <tag><tt>-Wa options, --asm-args options</tt></tag>
-
-  Pass options directly to the assembler. This may be used to pass options
-  that aren't directly supported by cl65. Several options may be separated by
-  commas, the commas are replaced by spaces when passing them to the
-  assembler. Beware: Passing arguments directly to the assembler may interfere
-  with some of the defaults, because cl65 doesn't parse the options passed. So
-  if cl65 supports an option by itself, do not pass this option to the
-  assembler by means of the <tt/-Wa/ switch.
-
-  <tag><tt>-Wc options, --cc-args options</tt></tag>
-
-  Pass options directly to the compiler. This may be used to pass options
-  that aren't directly supported by cl65. Several options may be separated by
-  commas, the commas are replaced by spaces when passing them to the
-  compiler. Beware: Passing arguments directly to the compiler may interfere
-  with some of the defaults, because cl65 doesn't parse the options passed. So
-  if cl65 supports an option by itself, do not pass this option to the
-  compiler by means of the <tt/-Wc/ switch.
-
-  <tag><tt>-Wl options, --ld-args options</tt></tag>
-
-  Pass options directly to the linker. This may be used to pass options that
-  aren't directly supported by cl65. Several options may be separated by
-  commas, the commas are replaced by spaces when passing them to the linker.
-  Beware: Passing arguments directly to the linker may interfere with some of
-  the defaults, because cl65 doesn't parse the options passed. So if cl65
-  supports an option by itself, do not pass this option to the linker by means
-  of the <tt/-Wl/ switch.
-
-</descrip>                        
-
-
-
-<sect>More usage<p>
-
-Since cl65 was created to simplify the use of the cc65 development
-package, it tries to be smart about several things.
-
-<itemize>
-
-<item> If you don't give a target system on the command line, cl65
-       defaults to the C64.
-
-<item> When linking, cl65 will supply the names of the startup file and
-       library for the target system to the linker, so you don't have to do
-       that.
-
-<item> If the final step is the linker, and the name of the output file was
-       not explicitly given, cl65 will use the name of the first input file
-       without the extension, provided that the name of this file has an
-       extension. So you don't need to name the executable name in most
-       cases, just give the name of your "main" file as first input file.
-</itemize>
-
-The command line is parsed from left to right, and the actual processing tool
-(compiler, assembler, ...) is invoked whenever a file name is encountered.
-This means that only the options to the left of a file name are in effect when
-this file is processed. It does also mean that you're able to specify
-different options for different files on the command line. As an example.
-
-<tscreen><verb>
-        cl65 -Oirs main.c -O -g module.c
-</verb></tscreen>
-
-translates main.c with full optimization and module.c with less optimization
-and debug info enabled.
-
-The type of an input file is derived from its extension:
-
-<itemize>
-<item>C files: <tt/.c/
-<item>Assembler files: <tt/.s/, <tt/.asm/, <tt/.a65/
-<item>Object files: <tt/.o/ <tt/.obj/
-<item>Libraries: <tt/.a/, <tt/.lib/
-<item>GEOS resource files: <tt/.grc/
-<item>o65 files: <tt/.o65/, <tt/.emd/, <tt/.joy/, <tt/.tgi/
-</itemize>
-
-Please note that the program cannot handle input files with unknown file
-extensions.
-
-
-<sect>Examples<p>
-
-The morse trainer software, which consists of one C file (morse.c) and one
-assembler file (irq.s) will need the following separate steps to compile
-into an executable named morse:
-
-<tscreen><verb>
-       cc65 -g -Oi -t c64 morse.c
-       ca65 -g morse.s
-       ca65 -g irq.s
-       ld65 -o morse -t c64 c64.o morse.o irq.o c64.lib
-</verb></tscreen>
-
-When using cl65, this is simplified to
-
-<tscreen><verb>
-       cl65 -g -Oi morse.c irq.s
-</verb></tscreen>
-
-As a general rule, you may use cl65 instead of cc65 at most times,
-especially in makefiles to build object files directly from C files. Use
-
-<tscreen><verb>
-       .c.o:
-               cl65 -g -Oi $<
-</verb></tscreen>
-
-to do this.
-
-
-
-<sect>Copyright<p>
-
-cl65 (and all cc65 binutils) are (C) Copyright 1998-2004 Ullrich von
-Bassewitz. For usage of the binaries and/or sources the following
-conditions do apply:
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item>         The origin of this software must not be misrepresented; you must not
-               claim that you wrote the original software. If you use this software
-               in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-
-
-</article>
-
diff --git a/doc/co65.sgml b/doc/co65.sgml
deleted file mode 100644 (file)
index 9d70ffe..0000000
+++ /dev/null
@@ -1,344 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-<title>co65 Users Guide
-<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
-<date>12.02.2003
-
-<abstract>
-co65 is an object file conversion utility. It converts o65 object files into
-the native object file format used by the cc65 tool chain. Since o65 is the
-file format used by cc65 for loadable drivers, the co65 utility allows (among
-other things) to link drivers statically to the generated executables instead
-of loading them from disk.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-
-<sect>Overview<p>
-
-co65 is an object file conversion utility. It converts o65 object files into
-assembler files, which may be translated by ca65 to generate object files in
-the native object file format used by the cc65 tool chain.
-
-Since loadable drivers used by the library that comes with cc65 use the o65
-relocatable object code format, using the co65 utility allows to link these
-drivers statically. This enables the use of these drivers without loading
-additional files from a disk or other secondary storage.
-
-Another use would be to link object files generated by other development tools
-to projects using the cc65 tool chain, but this has not been tested until now,
-since such tools are currently rare.
-
-
-
-<sect>Usage<p>
-
-The co65 utility converts one o65 file per run into one assembler files in
-ca65 format. The utility tries to autodetect the type of the o65 input file
-using the operating system identifier contained in the o65 option list.
-
-
-<sect1>Command line option overview<p>
-
-The converter may be called as follows:
-
-<tscreen><verb>
----------------------------------------------------------------------------
-Usage: co65 [options] file
-Short options:
-  -V                    Print the version number
-  -g                    Add debug info to object file
-  -h                    Help (this text)
-  -m model              Override the o65 model
-  -n                    Don't generate an output file
-  -o name               Name the output file
-  -v                    Increase verbosity
-
-Long options:
-  --bss-label name      Define and export a BSS segment label
-  --bss-name seg        Set the name of the BSS segment
-  --code-label name     Define and export a CODE segment label
-  --code-name seg       Set the name of the CODE segment
-  --data-label name     Define and export a DATA segment label
-  --data-name seg       Set the name of the DATA segment
-  --debug-info          Add debug info to object file
-  --help                Help (this text)
-  --no-output           Don't generate an output file
-  --o65-model model     Override the o65 model
-  --verbose             Increase verbosity
-  --version             Print the version number
-  --zeropage-label name Define and export a ZEROPAGE segment label
-  --zeropage-name seg   Set the name of the ZEROPAGE segment
----------------------------------------------------------------------------
-</verb></tscreen>
-
-
-<sect1>Command line options in detail<p>
-
-Here is a description of all the command line options:
-
-<descrip>
-
-  <tag><tt>--bss-label name</tt></tag>
-
-  Set the label used to mark the start of the bss segment. When this option is
-  given, the label is also exported and may be accessed from other code. When
-  accessing such a label from C code, be sure to include the leading
-  underscore. If you don't need to access the bss segment, there's no need to
-  use this option.
-
-
-  <tag><tt>--bss-name seg</tt></tag>
-
-  Set the name of the bss segment. The default name is "BSS" which is
-  compatible with the standard ld65 linker configurations.
-
-
-  <tag><tt>--code-label name</tt></tag>
-
-  Set the label used to mark the start of the code segment. When this option
-  is given, the label is also exported and may be accessed from other code.
-  When accessing such a label from C code, be sure to include the leading
-  underscore. If you don't need to access the code segment, there's no need to
-  use this option.
-
-
-  <tag><tt>--code-name seg</tt></tag>
-
-  Set the name of the code segment. The default name is "CODE" which is
-  compatible with the standard ld65 linker configurations.
-
-
-  <tag><tt>--data-label name</tt></tag>
-
-  Set the label used to mark the start of the data segment. When this option
-  is given, the label is also exported and may be accessed from other code.
-  When accessing such a label from C code, be sure to include the leading
-  underscore. If you don't need to access the data segment, there's no need to
-  use this option.
-
-
-  <tag><tt>--data-name seg</tt></tag>
-
-  Set the name of the data segment. The default name is "DATA" which is
-  compatible with the standard ld65 linker configurations.
-
-
-  <tag><tt>-d, --debug</tt></tag>
-
-  Enables debug mode, something that should not be needed for mere mortals.
-  Currently the converter does only accept cc65 loadable modules generated by
-  ld65 when not in debug mode. Please note that correct conversion has never
-  been tested for o65 files from other sources, so be careful when using
-  <tt/-d/.
-
-
-  <tag><tt>-g, --debug-info</tt></tag>
-
-  This will cause the converter to insert a <tt/.DEBUGINFO/ command into the
-  generated assembler code. This will cause the assembler to include all
-  symbols in a special section in the object file.
-
-
-  <tag><tt>-h, --help</tt></tag>
-
-  Print the short option summary shown above.
-
-
-  <tag><tt>-m model, --o65-model model</tt></tag>
-
-  Set an o65 model. This option changes the way, output is generated for the
-  given o65 file. For example, cc65 loadable drivers have a zero page segment,
-  but this segment must not be defined in the file itself, because the
-  standard module loader will overlay it with the zeropage space used by the
-  application that loads this module. So instead of allocating space in the
-  zero page segment, the converter will reference the start of the zero page
-  area used by the application.
-
-  Currently, the following models are defined:
-
-  <itemize>
-  <item>lunix
-  <item>os/a65
-  <item>cc65-module
-  </itemize>
-
-  The default is to autodetect the model to use from the input file, so
-  there's rarely a need to use this option.
-
-
-  <tag><tt>-n, --no-output</tt></tag>
-
-  Don't do the actual conversion, just read in the o65 file checking for
-  problems. This option may be used in conjunction with <tt/--verbose/ to
-  view some information about the input file.
-
-
-  <tag><tt>-o name</tt></tag>
-
-  Specify the name of the output file. If you don't specify a name, the
-  name of the o65 input file is used, with the extension replaced by ".s".
-
-
-  <tag><tt>-v, --verbose</tt></tag>
-
-  Using this option, the converter will be somewhat more verbose and print
-  some information about the o65 input file (among other things). You may use
-  this option together with <tt/--no-output/ to just get the o65 info.
-
-
-  <tag><tt>-V, --version</tt></tag>
-
-  Print the version number of the compiler. When submitting a bug report,
-  please include the operating system you're using, and the compiler
-  version.
-
-
-  <tag><tt>--zeropage-label name</tt></tag>
-
-  Set the label used to mark the start of the zeropage segment. When this
-  option is given, the label is also exported and may be accessed from other
-  code. When accessing such a label from C code, be sure to include the
-  leading underscore. If you don't need to access the zeropage segment,
-  there's no need to use this option.
-
-
-  <tag><tt>--zeropage-name seg</tt></tag>
-
-  Set the name of the zeropage segment. The default name is "ZEROPAGE" which is
-  compatible with the standard ld65 linker configurations.
-
-</descrip>
-
-
-<sect>Input and output<p>
-
-The converter will accept one o65 file per invocation and create a file with
-the same base name, but with the extension replaced by ".s". The output
-file contains assembler code suitable for the use with the ca65 macro
-assembler.
-
-
-<sect>Converting loadable drivers<p>
-
-<sect1>Differences between static linking and runtime loading<p>
-
-One main use of the utility is conversion of loadable drivers, so they may be
-linked statically to an application. Statically linking will cause a few
-things to be different from runtime loading:
-
-<itemize>
-
-<item>  Without changing the segment names, all segments take the default
-        names used by the standard linker configurations. This means that the
-        driver code is no longer contingous in memory, instead the code
-        segment is placed somewhere in between all other code segments, the
-        data segment is placed with all other data segments and so on. If the
-        driver doesn't do strange things this shouldn't be a problem.
-
-<item>  With statically linked code, data and bss segments will get intialized
-        once (when the application is loaded), while a loadable driver will
-        get its initialization each time the driver is loaded into memory
-        (which may be more than once in the lifetime of a program). It depends
-        on the driver if this is a problem. Currently, most drivers supplied
-        with cc65 behave correctly when linked statically.
-
-</itemize>
-
-
-<sect1>Additional requirements<p>
-
-All loadable drivers used by cc65 have a header and a jump table at the start
-of the code segment. The header is needed to detect the driver (it may also
-contain some data that is necessary to access the driver). The jump table is
-used to access the functions in the driver code.
-
-When loading a driver at runtime, the load address of the driver is also the
-address of the code segment, so the locations of the header and jump table are
-known. However, when linking the driver statically, it is up to the programmer
-to provide this information to the driver API.
-
-For this purpose, it is necessary to define a code segment label that can be
-accessed from the outside later. Please note that the converter does currently
-<em/not/ create such a label without being ordered to do so, even if the input
-file is a cc65 module.
-
-To create such a label, use the <tt/--code-label/ option when calling the
-converter. Be sure to begin the label with a leading underscore when accessing
-it from C code. In your code, define an arbitrary variable with this name. Use
-the address of this variable as the address of the code segment of the driver.
-Be sure to never modify the variable which is in reality the start of your
-driver!
-
-
-<sect1>Example - Convert and link a graphics driver<p>
-
-As an example, here are some instructions to convert and use the c64-hi.tgi
-graphics driver:
-
-First, convert the driver, generating a label named "_c64_hi" for the code
-segment. Use the assembler to generate an object file from the assembler
-output.
-
-  <tscreen><verb>
-               co65 --code-label _c64_hi c64-hi.tgi
-        ca65 c64-hi.s
-  </verb></tscreen>
-
-Next, change your C code to declare a variable that is actually the address
-of the driver:
-
-  <tscreen><verb>
-               extern void c64_hi[];
-  </verb></tscreen>
-
-Instead of loading and unloading the driver, change the code to install and
-uninstall the driver, which will be already in memory after linking:
-
-  <tscreen><verb>
-        /* Install the driver */
-        tgi_install (c64_hi);
-
-        ...
-
-        /* Uninstall the driver */
-        tgi_uninstall ();
-  </verb></tscreen>
-
-Don't forget to link the driver object file to your application, otherwise you
-will get an "undefined external" error for the _c64_hi symbol.
-
-
-
-
-<sect>Copyright<p>
-
-co65 is (C) Copyright 2003 Ullrich von Bassewitz. For usage of the binaries
-and/or sources the following conditions apply:
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item>         The origin of this software must not be misrepresented; you must not
-               claim that you wrote the original software. If you use this software
-               in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
-
diff --git a/doc/coding.sgml b/doc/coding.sgml
deleted file mode 100644 (file)
index f6dfc3a..0000000
+++ /dev/null
@@ -1,308 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-<title>cc65 coding hints
-<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
-<date>2000-12-03, 2009-09-01
-
-<abstract>
-How to generate the most effective code with cc65.
-</abstract>
-
-
-
-<sect>Use prototypes<p>
-
-This will not only help to find errors between separate modules, it will also
-generate better code, since the compiler must not assume that a variable sized
-parameter list is in place and must not pass the argument count to the called
-function. This will lead to shorter and faster code.
-
-
-
-<sect>Don't declare auto variables in nested function blocks<p>
-
-Variable declarations in nested blocks are usually a good thing. But with
-cc65, there is a drawback: Since the compiler generates code in one pass, it
-must create the variables on the stack each time the block is entered and
-destroy them when the block is left. This causes a speed penalty and larger
-code.
-
-
-
-<sect>Remember that the compiler does no high level optimizations<p>
-
-The compiler needs hints from you about the code to generate. It will try to
-optimize the generated code, but follow the outline you gave in your C
-program. So for example, when accessing indexed data structures, get a pointer
-to the element and use this pointer instead of calculating the index again and
-again. If you want to have your loops unrolled, or loop invariant code moved
-outside the loop, you have to do that yourself.
-
-
-
-<sect>Longs are slow!<p>
-
-While long support is necessary for some things, it's really, really slow on
-the 6502. Remember that any long variable will use 4 bytes of memory, and any
-operation works on double the data compared to an int.
-
-
-
-<sect>Use unsigned types wherever possible<p>
-
-The 6502 CPU has no opcodes to handle signed values greater than 8 bit. So
-sign extension, test of signedness etc. has to be done with extra code. As a
-consequence, the code to handle signed operations is usually a bit larger and
-slower than the same code for unsigned types.
-
-
-
-<sect>Use chars instead of ints if possible<p>
-
-While in arithmetic operations, chars are immidiately promoted to ints, they
-are passed as chars in parameter lists and are accessed as chars in variables.
-The code generated is usually not much smaller, but it is faster, since
-accessing chars is faster. For several operations, the generated code may be
-better if intermediate results that are known not to be larger than 8 bit are
-casted to chars.
-
-You should especially use unsigned chars for loop control variables if the
-loop is known not to execute more than 255 times.
-
-
-
-<sect>Make the size of your array elements one of 1, 2, 4, 8<p>
-
-When indexing into an array, the compiler has to calculate the byte offset
-into the array, which is the index multiplied by the size of one element. When
-doing the multiplication, the compiler will do a strength reduction, that is,
-replace the multiplication by a shift if possible. For the values 2, 4 and 8,
-there are even more specialized subroutines available. So, array access is
-fastest when using one of these sizes.
-
-
-
-<sect>Expressions are evaluated from left to right<p>
-
-Since cc65 is not building an explicit expression tree when parsing an
-expression, constant subexpressions may not be detected and optimized properly
-if you don't help. Look at this example:
-
-<tscreen><verb>
-      #define OFFS   4
-      int  i;
-      i = i + OFFS + 3;
-</verb></tscreen>
-
-The expression is parsed from left to right, that means, the compiler sees 'i',
-and puts it contents into the secondary register. Next is OFFS, which is
-constant. The compiler emits code to add a constant to the secondary register.
-Same thing again for the constant 3. So the code produced contains a fetch
-of 'i', two additions of constants, and a store (into 'i'). Unfortunately, the
-compiler does not see, that "OFFS + 3" is a constant for itself, since it does
-its evaluation from left to right. There are some ways to help the compiler
-to recognize expression like this:
-
-<enum>
-
-<item>Write "i = OFFS + 3 + i;". Since the first and second operand are
-constant, the compiler will evaluate them at compile time reducing the code to
-a fetch, one addition (secondary + constant) and one store.
-
-<item>Write "i = i + (OFFS + 3)". When seeing the opening parenthesis, the
-compiler will start a new expression evaluation for the stuff in the braces,
-and since all operands in the subexpression are constant, it will detect this
-and reduce the code to one fetch, one addition and one store.
-
-</enum>
-
-
-<sect>Use the preincrement and predecrement operators<p>
-
-The compiler is not always smart enough to figure out, if the rvalue of an
-increment is used or not. So it has to save and restore that value when
-producing code for the postincrement and postdecrement operators, even if this
-value is never used. To avoid the additional overhead, use the preincrement
-and predecrement operators if you don't need the resulting value. That means,
-use
-
-<tscreen><verb>
-               ...
-               ++i;
-               ...
-</verb></tscreen>
-
-    instead of
-
-<tscreen><verb>
-       ...
-       i++;
-       ...
-</verb></tscreen>
-
-
-
-<sect>Use constants to access absolute memory locations<p>
-
-The compiler produces optimized code, if the value of a pointer is a constant.
-So, to access direct memory locations, use
-
-<tscreen><verb>
-       #define VDC_STATUS 0xD601
-       *(char*)VDC_STATUS = 0x01;
-</verb></tscreen>
-
-That will be translated to
-
-<tscreen><verb>
-       lda     #$01
-       sta     $D601
-</verb></tscreen>
-
-The constant value detection works also for struct pointers and arrays, if the
-subscript is a constant. So
-
-<tscreen><verb>
-       #define VDC     ((unsigned char*)0xD600)
-       #define STATUS  0x01
-               VDC[STATUS] = 0x01;
-</verb></tscreen>
-
-will also work.
-
-If you first load the constant into a variable and use that variable to access
-an absolute memory location, the generated code will be much slower, since the
-compiler does not know anything about the contents of the variable.
-
-
-
-<sect>Use initialized local variables<p>
-
-Initialization of local variables when declaring them gives shorter and faster
-code. So, use
-
-<tscreen><verb>
-       int i = 1;
-</verb></tscreen>
-
-instead of
-
-<tscreen><verb>
-       int i;
-       i = 1;
-</verb></tscreen>
-
-But beware: To maximize your savings, don't mix uninitialized and initialized
-variables. Create one block of initialized variables and one of uniniitalized
-ones. The reason for this is, that the compiler will sum up the space needed
-for uninitialized variables as long as possible, and then allocate the space
-once for all these variables. If you mix uninitialized and initialized
-variables, you force the compiler to allocate space for the uninitialized
-variables each time, it parses an initialized one. So do this:
-
-<tscreen><verb>
-       int i, j;
-       int a = 3;
-       int b = 0;
-</verb></tscreen>
-
-instead of
-
-<tscreen><verb>
-       int i;
-       int a = 3;
-       int j;
-       int b = 0;
-</verb></tscreen>
-
-The latter will work, but will create larger and slower code.
-
-
-
-<sect>Use the array operator &lsqb;&rsqb; even for pointers<p>
-
-When addressing an array via a pointer, don't use the plus and dereference
-operators, but the array operator. This will generate better code in some
-common cases.
-
-Don't use
-
-<tscreen><verb>
-       char* a;
-       char b, c;
-       char b = *(a + c);
-</verb></tscreen>
-
-Use
-
-<tscreen><verb>
-       char* a;
-       char b, c;
-       char b = a[c];
-</verb></tscreen>
-
-instead.
-
-
-
-<sect>Use register variables with care<p>
-
-Register variables may give faster and shorter code, but they do also have an
-overhead. Register variables are actually zero page locations, so using them
-saves roughly one cycle per access. The calling routine may also use register
-variables, so the old values have to be saved on function entry and restored
-on exit. Saving an d restoring has an overhead of about 70 cycles per 2 byte
-variable. It is easy to see, that - apart from the additional code that is
-needed to save and restore the values - you need to make heavy use of a
-variable to justify the overhead.
-
-As a general rule: Use register variables only for pointers that are
-dereferenced several times in your function, or for heavily used induction
-variables in a loop (with several 100 accesses).
-
-When declaring register variables, try to keep them together, because this
-will allow the compiler to save and restore the old values in one chunk, and
-not in several.
-
-And remember: Register variables must be enabled with <tt/-r/ or <tt/-Or/.
-
-
-
-<sect>Decimal constants greater than 0x7FFF are actually long ints<p>
-
-The language rules for constant numeric values specify that decimal constants
-without a type suffix that are not in integer range must be of type long int
-or unsigned long int. So a simple constant like 40000 is of type long int!
-This is often unexpected and may cause an expression to be evaluated with 32
-bits. While in many cases the compiler takes care about it, in some places it
-can't. So be careful when you get a warning like
-
-<tscreen><verb>
-        test.c(7): Warning: Constant is long
-</verb></tscreen>
-
-Use the <tt/U/, <tt/L/ or <tt/UL/ suffixes to tell the compiler the desired
-type of a numeric constant.
-
-
-
-<sect>Access to parameters in variadic functions is expensive<p>
-
-Since cc65 has the "wrong" calling order, the location of the fixed parameters
-in a variadic function (a function with a variable parameter list) depends on
-the number and size of variable arguments passed. Since this number and size
-is unknown at compile time, the compiler will generate code to calculate the
-location on the stack when needed.
-
-Because of this additional code, accessing the fixed parameters in a variadic
-function is much more expensive than access to parameters in a "normal"
-function. Unfortunately, this additional code is also invisible to the
-programmer, so it is easy to forget.
-
-As a rule of thumb, if you access such a parameter more than once, you should
-think about copying it into a normal variable and using this variable instead.
-
-
-</article>
-
diff --git a/doc/customizing.sgml b/doc/customizing.sgml
deleted file mode 100644 (file)
index 0a0b8c8..0000000
+++ /dev/null
@@ -1,731 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-<title>Defining a Custom cc65 Target
-<author>Bruce Reidenbach
-<date>2015-03-13
-
-<abstract>
-This section provides step-by-step instructions on how to use the cc65
-toolset for a custom hardware platform (a target system not currently
-supported by the cc65 library set).
-</abstract>
-
-<!-- Table of contents -->
-
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-The cc65 toolset provides a set of pre-defined libraries that allow the
-user to target the executable image to a variety of hardware platforms.
-In addition, the user can create a customized environment so that the
-executable can be targeted to a custom platform.  The following
-instructions provide step-by-step instructions on how to customize the
-toolset for a target that is not supported by the standard cc65
-installation.
-
-The platform used in this example is a Xilinx Field Programmable Gate
-Array (FPGA) with an embedded 65C02 core.  The processor core supports
-the additional opcodes/addressing modes of the 65SC02, along with the
-STP and WAI instructions.  These instructions will create a set of files
-to create a custom target, named SBC, for <bf>S</bf>ingle <bf>B</bf>oard
-<bf>C</bf>omputer.
-
-<sect>System Memory Map Definition<p>
-
-The targeted system uses block RAM contained on the XILINX FPGA for the
-system memory (both RAM and ROM).  The block RAMs are available in
-various aspect ratios, and they will be used in this system as 2K*8
-devices.  There will be two RAMs used for data storage, starting at
-location $0000 and growing upwards.  There will be one ROM (realized as
-initialized RAM) used code storage, starting at location $FFFF and
-growing downwards.
-
-The cc65 toolset requires a memory configuration file to define the
-memory that is available to the cc65 run-time environment, which is
-defined as follows:
-
-<tscreen><code>
-MEMORY {
-    ZP:        start =    $0, size =  $100, type   = rw, define = yes;
-    RAM:       start =  $200, size = $0E00, define = yes;
-    ROM:       start = $F800, size = $0800, file   = %O;
-}
-</code></tscreen>
-
-ZP defines the available zero page locations, which in this case starts
-at $0 and has a length of $100.  Keep in mind that certain systems may
-require access to some zero page locations, so the starting address may
-need to be adjusted accordingly to prevent cc65 from attempting to reuse
-those locations.  Also, at a minimum, the cc65 run-time environment uses
-26 zero page locations, so the smallest zero page size that can be
-specified is $1A.  The usable RAM memory area begins after the 6502
-stack storage in page 1, so it is defined as starting at location $200
-and filling the remaining 4K of space (4096 - 2 *
-256&nbsp;=&nbsp;3584&nbsp;=&nbsp;$0E00).  The 2K of ROM space begins at
-address $F800 and goes to $FFFF (size&nbsp;=&nbsp;$0800).
-
-Next, the memory segments within the memory devices need to be defined.
-A standard segment definition is used, with one notable exception.  The
-interrupt and reset vector locations need to be defined at locations
-$FFFA through $FFFF.  A special segment named VECTORS is defined that
-resides at these locations.  Later, the interrupt vector map will be
-created and placed in the VECTORS segment, and the linker will put these
-vectors at the proper memory locations.  The segment definition is:
-
-<tscreen><code>
-SEGMENTS {
-    ZEROPAGE:  load = ZP,  type = zp,  define   = yes;
-    DATA:      load = ROM, type = rw,  define   = yes, run = RAM;
-    BSS:       load = RAM, type = bss, define   = yes;
-    HEAP:      load = RAM, type = bss, optional = yes;
-    STARTUP:   load = ROM, type = ro;
-    INIT:      load = ROM, type = ro,  optional = yes;
-    CODE:      load = ROM, type = ro;
-    RODATA:    load = ROM, type = ro;
-    VECTORS:   load = ROM, type = ro,  start    = $FFFA;
-}
-</code></tscreen>
-
-The meaning of each of these segments is as follows.
-
-<p><tt>       ZEROPAGE:  </tt>Data in page 0, defined by ZP as starting at $0 with length $100
-<p><tt>       DATA:      </tt>Initialized data that can be modified by the program, stored in RAM
-<p><tt>       BSS:       </tt>Uninitialized data stored in RAM (used for variable storage)
-<p><tt>       HEAP:      </tt>Uninitialized C-level heap storage in RAM, optional
-<p><tt>       STARTUP:   </tt>The program initialization code, stored in ROM
-<p><tt>       INIT:      </tt>The code needed to initialize the system, stored in ROM
-<p><tt>       CODE:      </tt>The program code, stored in ROM
-<p><tt>       RODATA:    </tt>Initialized data that cannot be modified by the program, stored in ROM
-<p><tt>       VECTORS:   </tt>The interrupt vector table, stored in ROM at location $FFFA
-
-A note about initialized data:  any variables that require an initial
-value, such as external (global) variables, require that the initial
-values be stored in the ROM code image.  However, variables stored in
-ROM cannot change; therefore the data must be moved into variables that
-are located in RAM.  Specifying <tt>run&nbsp;=&nbsp;RAM</tt> as part of
-the DATA segment definition will indicate that those variables will
-require their initialization value to be copied via a call to the
-<tt>copydata</tt> routine in the startup assembly code.  In addition,
-there are system level variables that will need to be initialized as
-well, especially if the heap segment is used via a C-level call to
-<tt>malloc&nbsp;()</tt>.
-
-The final section of the definition file contains the data constructors
-and destructors used for system startup.  In addition, if the heap is
-used, the maximum C-level stack size needs to be defined in order for
-the system to be able to reliably allocate blocks of memory.  The stack
-size selection must be greater than the maximum amount of storage
-required to run the program, keeping in mind that the C-level subroutine
-call stack and all local variables are stored in this stack.  The
-<tt>FEATURES</tt> section defines the required constructor/destructor
-attributes and the <tt>SYMBOLS</tt> section defines the stack size.  The
-constructors will be run via a call to <tt>initlib</tt> in the startup
-assembly code and the destructors will be run via an assembly language
-call to <tt>donelib</tt> during program termination.
-
-<tscreen><code>
-FEATURES {
-    CONDES:    segment = STARTUP,
-               type    = constructor,
-               label   = __CONSTRUCTOR_TABLE__,
-               count   = __CONSTRUCTOR_COUNT__;
-    CONDES:    segment = STARTUP,
-               type    = destructor,
-               label   = __DESTRUCTOR_TABLE__,
-               count   = __DESTRUCTOR_COUNT__;
-}
-
-SYMBOLS {
-    # Define the stack size for the application
-    __STACKSIZE__:  value = $0200, weak = yes;
-}
-</code></tscreen>
-
-These definitions are placed in a file named &quot;sbc.cfg&quot;
-and are referred to during the ld65 linker stage.
-
-<sect>Startup Code Definition<p>
-
-In the cc65 toolset, a startup routine must be defined that is executed
-when the CPU is reset.  This startup code is marked with the STARTUP
-segment name, which was defined in the system configuration file as
-being in read only memory.  The standard convention used in the
-predefined libraries is that this code is resident in the crt0 module.
-For this custom system, all that needs to be done is to perform a little
-bit of 6502 housekeeping, set up the C-level stack pointer, initialize
-the memory storage, and call the C-level routine <tt>main&nbsp;()</tt>.
-The following code was used for the crt0 module, defined in the file
-&quot;crt0.s&quot;:
-
-<tscreen><code>
-; ---------------------------------------------------------------------------
-; crt0.s
-; ---------------------------------------------------------------------------
-;
-; Startup code for cc65 (Single Board Computer version)
-
-.export   _init, _exit
-.import   _main
-
-.export   __STARTUP__ : absolute = 1        ; Mark as startup
-.import   __RAM_START__, __RAM_SIZE__       ; Linker generated
-
-.import    copydata, zerobss, initlib, donelib
-
-.include  &quot;zeropage.inc&quot;
-
-; ---------------------------------------------------------------------------
-; Place the startup code in a special segment
-
-.segment  &quot;STARTUP&quot;
-
-; ---------------------------------------------------------------------------
-; A little light 6502 housekeeping
-
-_init:    LDX     #$FF                 ; Initialize stack pointer to $01FF
-          TXS
-          CLD                          ; Clear decimal mode
-
-; ---------------------------------------------------------------------------
-; Set cc65 argument stack pointer
-
-          LDA     #&lt;(__RAM_START__ + __RAM_SIZE__)
-          STA     sp
-          LDA     #&gt;(__RAM_START__ + __RAM_SIZE__)
-          STA     sp+1
-
-; ---------------------------------------------------------------------------
-; Initialize memory storage
-
-          JSR     zerobss              ; Clear BSS segment
-          JSR     copydata             ; Initialize DATA segment
-          JSR     initlib              ; Run constructors
-
-; ---------------------------------------------------------------------------
-; Call main()
-
-          JSR     _main
-
-; ---------------------------------------------------------------------------
-; Back from main (this is also the _exit entry):  force a software break
-
-_exit:    JSR     donelib              ; Run destructors
-          BRK
-</code></tscreen>
-
-The following discussion explains the purpose of several important
-assembler level directives in this file.
-
-<tscreen><verb>
-.export   _init, _exit
-</verb></tscreen>
-
-This line instructs the assembler that the symbols <tt>_init</tt> and
-<tt>_exit</tt> are to be accessible from other modules.  In this
-example, <tt>_init</tt> is the location that the CPU should jump to when
-reset, and <tt>_exit</tt> is the location that will be called when the
-program is finished.
-
-<tscreen><verb>
-.import   _main
-</verb></tscreen>
-
-This line instructs the assembler to import the symbol <tt>_main</tt>
-from another module.  cc65 names all C-level routines as
-{underscore}{name} in assembler, thus the <tt>main&nbsp;()</tt> routine
-in C is named <tt>_main</tt> in the assembler.  This is how the startup
-code will link to the C-level code.
-
-<tscreen><verb>
-.export   __STARTUP__ : absolute = 1        ; Mark as startup
-</verb></tscreen>
-
-This line marks this code as startup code (code that is executed when
-the processor is reset), which will then be automatically linked into
-the executable code.
-
-<tscreen><verb>
-.import   __RAM_START__, __RAM_SIZE__       ; Linker generated
-</verb></tscreen>
-
-This line imports the RAM starting address and RAM size constants, which
-are used to initialize the cc65 C-level argument stack pointer.
-
-<tscreen><verb>
-.segment  &quot;STARTUP&quot;
-</verb></tscreen>
-
-This line instructs the assembler that the code is to be placed in the
-STARTUP segment of memory.
-
-<tscreen><verb>
-          JSR     zerobss              ; Clear BSS segment
-          JSR     copydata             ; Initialize DATA segment
-          JSR     initlib              ; Run constructors
-</verb></tscreen>
-
-These three lines initialize the external (global) and system
-variables.  The first line sets the BSS segment -- the memory locations
-used for external variables -- to 0.  The second line copies the
-initialization value stored in ROM to the RAM locations used for
-initialized external variables.  The last line runs the constructors
-that are used to initialize the system run-time variables.
-
-<tscreen><verb>
-          JSR     _main
-</verb></tscreen>
-
-This is the actual call to the C-level <tt>main&nbsp;()</tt> routine,
-which is called after the startup code completes.
-
-<tscreen><verb>
-_exit:    JSR     donelib              ; Run destructors
-          BRK
-</verb></tscreen>
-
-This is the code that will be executed when <tt>main ()</tt>
-terminates.  The first thing that must be done is run the destructors
-via a call to <tt>donelib</tt>.  Then the program can terminate.  In
-this example, the program is expected to run forever.  Therefore, there
-needs to be a way of indicating when something has gone wrong and the
-system needs to be shut down, requiring a restart only by a hard reset.
-The BRK instruction will be used to indicate a software fault.  This is
-advantageous because cc65 uses the BRK instruction as the fill byte in
-the final binary code.  In addition, the hardware has been designed to
-force the data lines to $00 for all illegal memory accesses, thereby
-also forcing a BRK instruction into the CPU.
-
-<sect>Custom Run-Time Library Creation<p>
-
-The next step in customizing the cc65 toolset is creating a run-time
-library for the targeted hardware.  The easiest way to do this is to
-modify a standard library from the cc65 distribution.  In this example,
-there is no console I/O, mouse, joystick, etc. in the system, so it is
-most appropriate to use the simplest library as the base, which is for
-the Watara Supervision and is named &quot;supervision.lib&quot; in the
-lib directory of the distribution.
-
-The only modification required is to replace the <tt>crt0</tt> module in
-the supervision.lib library with custom startup code.  This is simply
-done by first copying the library and giving it a new name, compiling
-the startup code with ca65, and finally using the ar65 archiver to
-replace the module in the new library.  The steps are shown below:
-
-<tscreen><verb>
-$ copy &quot;C:\Program Files\cc65\lib\supervision.lib&quot; sbc.lib
-$ ca65 crt0.s
-$ ar65 a sbc.lib crt0.o
-</verb></tscreen>
-
-<sect>Interrupt Service Routine Definition<p>
-
-For this system, the CPU is put into a wait condition prior to allowing
-interrupt processing.  Therefore, the interrupt service routine is very
-simple:  return from all valid interrupts.  However, as mentioned
-before, the BRK instruction is used to indicate a software fault, which
-will call the same interrupt service routine as the maskable interrupt
-signal IRQ.  The interrupt service routine must be able to tell the
-difference between the two, and act appropriately.
-
-The interrupt service routine shown below includes code to detect when a
-BRK instruction has occurred and stops the CPU from further processing.
-The interrupt service routine is in a file named
-&quot;interrupt.s&quot;.
-
-<tscreen><code>
-; ---------------------------------------------------------------------------
-; interrupt.s
-; ---------------------------------------------------------------------------
-;
-; Interrupt handler.
-;
-; Checks for a BRK instruction and returns from all valid interrupts.
-
-.import   _stop
-.export   _irq_int, _nmi_int
-
-.segment  &quot;CODE&quot;
-
-.PC02                             ; Force 65C02 assembly mode
-
-; ---------------------------------------------------------------------------
-; Non-maskable interrupt (NMI) service routine
-
-_nmi_int:  RTI                    ; Return from all NMI interrupts
-
-; ---------------------------------------------------------------------------
-; Maskable interrupt (IRQ) service routine
-
-_irq_int:  PHX                    ; Save X register contents to stack
-           TSX                    ; Transfer stack pointer to X
-           PHA                    ; Save accumulator contents to stack
-           INX                    ; Increment X so it points to the status
-           INX                    ;   register value saved on the stack
-           LDA $100,X             ; Load status register contents
-           AND #$10               ; Isolate B status bit
-           BNE break              ; If B = 1, BRK detected
-
-; ---------------------------------------------------------------------------
-; IRQ detected, return
-
-irq:       PLA                    ; Restore accumulator contents
-           PLX                    ; Restore X register contents
-           RTI                    ; Return from all IRQ interrupts
-
-; ---------------------------------------------------------------------------
-; BRK detected, stop
-
-break:     JMP _stop              ; If BRK is detected, something very bad
-                                  ;   has happened, so stop running
-</code></tscreen>
-
-The following discussion explains the purpose of several important
-assembler level directives in this file.
-
-<tscreen><verb>
-.import   _stop
-</verb></tscreen>
-
-This line instructs the assembler to import the symbol <tt>_stop</tt>
-from another module.  This routine will be called if a BRK instruction
-is encountered, signaling a software fault.
-
-<tscreen><verb>
-.export   _irq_int, _nmi_int
-</verb></tscreen>
-
-This line instructs the assembler that the symbols <tt>_irq_int</tt> and
-<tt>_nmi_int</tt> are to be accessible from other modules.  In this
-example, the address of these symbols will be placed in the interrupt
-vector table.
-
-<tscreen><verb>
-.segment  &quot;CODE&quot;
-</verb></tscreen>
-
-This line instructs the assembler that the code is to be placed in the
-CODE segment of memory.  Note that because there are 65C02 mnemonics in
-the assembly code, the assembler is forced to use the 65C02 instruction
-set with the <tt>.PC02</tt> directive.
-
-The final step is to define the interrupt vector memory locations.
-Recall that a segment named VECTORS was defined in the memory
-configuration file, which started at location $FFFA.  The addresses of
-the interrupt service routines from &quot;interrupt.s&quot; along with
-the address for the initialization code in crt0 are defined in a file
-named &quot;vectors.s&quot;.  Note that these vectors will be placed in
-memory in their proper little-endian format as:
-
-<p><tt>       $FFFA&nbsp;-&nbsp;$FFFB:</tt> NMI interrupt vector (low byte, high byte)
-<p><tt>       $FFFC&nbsp;-&nbsp;$FFFD:</tt> Reset vector (low byte, high byte)
-<p><tt>       $FFFE&nbsp;-&nbsp;$FFFF:</tt> IRQ/BRK interrupt vector (low byte, high byte)
-
-using the <tt>.addr</tt> assembler directive.  The contents of the file are:
-
-<tscreen><code>
-; ---------------------------------------------------------------------------
-; vectors.s
-; ---------------------------------------------------------------------------
-;
-; Defines the interrupt vector table.
-
-.import    _init
-.import    _nmi_int, _irq_int
-
-.segment  &quot;VECTORS&quot;
-
-.addr      _nmi_int    ; NMI vector
-.addr      _init       ; Reset vector
-.addr      _irq_int    ; IRQ/BRK vector
-</code></tscreen>
-
-The cc65 toolset will replace the address symbols defined here with the
-actual addresses of the routines during the link process.
-
-<sect>Adding Custom Instructions<p>
-
-The cc65 instruction set only supports the WAI (Wait for Interrupt) and
-STP (Stop) instructions when used with the 65816 CPU (accessed via the
---cpu command line option of the ca65 macro assembler).  The 65C02 core
-used in this example supports these two instructions, and in fact the
-system benefits from the use of both the WAI and STP instructions.
-
-In order to use the WAI instruction in this case, a C routine named
-&quot;wait&quot; was created that consists of the WAI opcode followed by
-a subroutine return.  It was convenient in this example to put the IRQ
-interrupt enable in this subroutine as well, since interrupts should
-only be enabled when the code is in this wait condition.
-
-For both the WAI and STP instructions, the assembler is
-&quot;fooled&quot; into placing those opcodes into memory by inserting a
-single byte of data that just happens to be the opcode for those
-instructions.  The assembly code routines are placed in a file, named
-&quot;wait.s&quot;, which is shown below:
-
-<tscreen><code>
-; ---------------------------------------------------------------------------
-; wait.s
-; ---------------------------------------------------------------------------
-;
-; Wait for interrupt and return
-
-.export  _wait, _stop
-
-; ---------------------------------------------------------------------------
-; Wait for interrupt:  Forces the assembler to emit a WAI opcode ($CB)
-; ---------------------------------------------------------------------------
-
-.segment  &quot;CODE&quot;
-
-.proc _wait: near
-
-           CLI                    ; Enable interrupts
-.byte      $CB                    ; Inserts a WAI opcode
-           RTS                    ; Return to caller
-
-.endproc
-
-; ---------------------------------------------------------------------------
-; Stop:  Forces the assembler to emit a STP opcode ($DB)
-; ---------------------------------------------------------------------------
-
-.proc _stop: near
-
-.byte      $DB                    ; Inserts a STP opcode
-
-.endproc
-</code></tscreen>
-
-The label <tt>_wait</tt>, when exported, can be called by using the
-<tt>wait&nbsp;()</tt> subroutine call in C.  The section is marked as
-code so that it will be stored in read-only memory, and the procedure is
-tagged for 16-bit absolute addressing via the &quot;near&quot;
-modifier.  Similarly, the <tt>_stop</tt> routine can be called from
-within the C-level code via a call to <tt>stop&nbsp;()</tt>.  In
-addition, the routine can be called from assembly code by calling
-<tt>_stop</tt> (as was done in the interrupt service routine).
-
-<sect>Hardware Drivers<p>
-
-Oftentimes, it can be advantageous to create small application helpers
-in assembly language to decrease codespace and increase execution speed
-of the overall program.  An example of this would be the transfer of
-characters to a FIFO (<bf>F</bf>irst-<bf>I</bf>n,
-<bf>F</bf>irst-<bf>O</bf>ut) storage buffer for transmission over a
-serial port.  This simple action could be performed by an assembly
-language driver which would execute much quicker than coding it in C.
-The following discussion outlines a method of interfacing a C program
-with an assembly language subroutine.
-
-The first step in creating the assembly language code for the driver is
-to determine how to pass the C arguments to the assembly language
-routine.  The cc65 toolset allows the user to specify whether the data
-is passed to a subroutine via the stack or by the processor registers by
-using the <tt/__fastcall__/ and <tt/__cdecl__/ function qualifiers (note that
-there are two underscore characters in front of and two behind each
-qualifier).  <tt/__fastcall__/ is the default.  When <tt/__cdecl__/ <em/isn't/
-specified, and the function isn't variadic (i.e., its prototype doesn't have
-an ellipsis), the rightmost argument in the function call is passed to the
-subroutine using the 6502 registers instead of the stack.  Note that if
-there is only one argument in the function call, the execution overhead
-required by the stack interface routines is completely avoided.
-
-With <tt/__cdecl__</tt>, the last argument is loaded into the A and X
-registers and then pushed onto the stack via a call to <tt>pushax</tt>.
-The first thing the subroutine does is retrieve the argument from the
-stack via a call to <tt>ldax0sp</tt>, which copies the values into the A
-and X.  When the subroutine is finished, the values on the stack must be
-popped off and discarded via a jump to <tt>incsp2</tt>, which includes
-the RTS subroutine return command.  This is shown in the following code
-sample.
-
-Calling sequence:
-
-<tscreen><verb>
-        lda     #&lt;(L0001)  ;  Load A with the high order byte
-        ldx     #&gt;(L0001)  ;  Load X with the low order byte
-        jsr     pushax     ;  Push A and X onto the stack
-        jsr     _foo       ;  Call foo, i.e., foo (arg)
-</verb></tscreen>
-
-Subroutine code:
-
-<tscreen><verb>
-_foo:   jsr     ldax0sp    ;  Retrieve A and X from the stack
-        sta     ptr        ;  Store A in ptr
-        stx     ptr+1      ;  Store X in ptr+1
-        ...                ;  (more subroutine code goes here)
-        jmp     incsp2     ;  Pop A and X from the stack (includes return)
-</verb></tscreen>
-
-If <tt/__cdecl__/ isn't specified, then the argument is loaded into the A
-and X registers as before, but the subroutine is then called
-immediately.  The subroutine does not need to retrieve the argument
-since the value is already available in the A and X registers.
-Furthermore, the subroutine can be terminated with an RTS statement
-since there is no stack cleanup which needs to be performed.  This is
-shown in the following code sample.
-
-Calling sequence:
-
-<tscreen><verb>
-        lda     #&lt;(L0001)  ;  Load A with the high order byte
-        ldx     #&gt;(L0001)  ;  Load X with the low order byte
-        jsr     _foo       ;  Call foo, i.e., foo (arg)
-</verb></tscreen>
-
-Subroutine code:
-
-<tscreen><verb>
-_foo:   sta     ptr        ;  Store A in ptr
-        stx     ptr+1      ;  Store X in ptr+1
-        ...                ;  (more subroutine code goes here)
-        rts                ;  Return from subroutine
-</verb></tscreen>
-
-The hardware driver in this example writes a string of character data to
-a hardware FIFO located at memory location $1000.  Each character is
-read and is compared to the C string termination value ($00), which will
-terminate the loop.  All other character data is written to the FIFO.
-For convenience, a carriage return/line feed sequence is automatically
-appended to the serial stream.  The driver defines a local pointer
-variable which is stored in the zero page memory space in order to allow
-for retrieval of each character in the string via the indirect indexed
-addressing mode.
-
-The assembly language routine is stored in a file names
-&quot;rs232_tx.s&quot; and is shown below:
-
-<tscreen><code>
-; ---------------------------------------------------------------------------
-; rs232_tx.s
-; ---------------------------------------------------------------------------
-;
-; Write a string to the transmit UART FIFO
-
-.export         _rs232_tx
-.exportzp       _rs232_data: near
-
-.define         TX_FIFO $1000    ;  Transmit FIFO memory location
-
-.zeropage
-
-_rs232_data:    .res 2, $00      ;  Reserve a local zero page pointer
-
-.segment  &quot;CODE&quot;
-
-.proc _rs232_tx: near
-
-; ---------------------------------------------------------------------------
-; Store pointer to zero page memory and load first character
-
-        sta     _rs232_data      ;  Set zero page pointer to string address
-        stx     _rs232_data+1    ;    (pointer passed in via the A/X registers)
-        ldy     #00              ;  Initialize Y to 0
-        lda     (_rs232_data)    ;  Load first character
-
-; ---------------------------------------------------------------------------
-; Main loop:  read data and store to FIFO until \0 is encountered
-
-loop:   sta     TX_FIFO          ;  Loop:  Store character in FIFO
-        iny                      ;         Increment Y index
-        lda     (_rs232_data),y  ;         Get next character
-        bne     loop             ;         If character == 0, exit loop
-
-; ---------------------------------------------------------------------------
-; Append CR/LF to output stream and return
-
-        lda     #$0D             ;  Store CR
-        sta     TX_FIFO
-        lda     #$0A             ;  Store LF
-        sta     TX_FIFO
-        rts                      ;  Return
-
-.endproc
-</code></tscreen>
-
-<sect>Hello World! Example<p>
-
-The following short example demonstrates programming in C using the cc65
-toolset with a custom run-time environment.  In this example, a Xilinx
-FPGA contains a UART which is connected to a 65c02 processor with FIFO
-(<bf>F</bf>irst-<bf>I</bf>n, <bf>F</bf>irst-<bf>O</bf>ut) storage to
-buffer the data.  The C program will wait for an interrupt generated by
-the receive UART and then respond by transmitting the string &quot;Hello
-World! &quot; every time a question mark character is received via a
-call to the hardware driver <tt>rs232_tx&nbsp;()</tt>.  The driver
-prototype uses the <tt>__fastcall__</tt> extension to indicate that the
-driver does not use the stack.  The FIFO data interface is at address
-$1000 and is defined as the symbolic constant <tt>FIFO_DATA</tt>.
-Writing to <tt>FIFO_DATA</tt> transfers a byte of data into the transmit
-FIFO for subsequent transmission over the serial interface.  Reading
-from <tt>FIFO_DATA</tt> transfers a byte of previously received data out
-of the receive FIFO.  The FIFO status data is at address $1001 and is
-defined as the symbolic constant <tt>FIFO_STATUS</tt>.  For convenience,
-the symbolic constants <tt>TX_FIFO_FULL</tt> (which isolates bit 0 of
-the register) and <tt>RX_FIFO_EMPTY</tt> (which isolates bit 1 of the
-register) have been defined to read the FIFO status.
-
-The following C code is saved in the file &quot;main.c&quot;.  As this
-example demonstrates, the run-time environment has been set up such that
-all of the behind-the-scene work is transparent to the user.
-
-<tscreen><code>
-#define FIFO_DATA     (*(unsigned char *) 0x1000)
-#define FIFO_STATUS   (*(unsigned char *) 0x1001)
-
-#define TX_FIFO_FULL  (FIFO_STATUS &amp; 0x01)
-#define RX_FIFO_EMPTY (FIFO_STATUS &amp; 0x02)
-
-extern void wait ();
-extern void __fastcall__ rs232_tx (char *str);
-
-int main () {
-  while (1) {                                     //  Run forever
-    wait ();                                      //  Wait for an RX FIFO interrupt
-
-    while (RX_FIFO_EMPTY == 0) {                  //  While the RX FIFO is not empty
-      if (FIFO_DATA == '?') {                     //  Does the RX character = '?'
-        rs232_tx (&quot;Hello World!&quot;);                //  Transmit &quot;Hello World!&quot;
-      }                                           //  Discard any other RX characters
-    }
-  }
-
-  return (0);                                     //  We should never get here!
-}
-</code></tscreen>
-
-<sect>Putting It All Together<p>
-
-The following commands will create a ROM image named &quot;a.out&quot;
-that can be used as the initialization data for the Xilinx Block RAM
-used for code storage:
-
-<tscreen><verb>
-$ cc65 -t none -O --cpu 65sc02 main.c
-$ ca65 --cpu 65sc02 main.s
-$ ca65 --cpu 65sc02 rs232_tx.s
-$ ca65 --cpu 65sc02 interrupt.s
-$ ca65 --cpu 65sc02 vectors.s
-$ ca65 --cpu 65sc02 wait.s
-$ ld65 -C sbc.cfg -m main.map interrupt.o vectors.o wait.o rs232_tx.o
-          main.o sbc.lib
-</verb></tscreen>
-
-During the C-level code compilation phase (<tt>cc65</tt>), assumptions
-about the target system are disabled via the <tt>-t none</tt> command
-line option.  During the object module linker phase (<tt>ld65</tt>), the
-target customization is enabled via inclusion of the <tt>sbc.lib</tt>
-file and the selection of the configuration file via the <tt>-C
-sbc.cfg</tt> command line option.
-
-The 65C02 core used most closely matches the cc65 toolset processor
-named 65SC02 (the 65C02 extensions without the bit manipulation
-instructions), so all the commands specify the use of that processor via
-the <tt>--cpu 65sc02</tt> option.
-
-</article>
diff --git a/doc/da65.sgml b/doc/da65.sgml
deleted file mode 100644 (file)
index df8cd77..0000000
+++ /dev/null
@@ -1,685 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-<title>da65 Users Guide
-<author>
-<url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">,<newline>
-<url url="mailto:greg.king5@verizon.net" name="Greg King">
-<date>2014-11-23
-
-<abstract>
-da65 is a 6502/65C02 disassembler that is able to read user-supplied
-information about its input data, for better results. The output is ready for
-feeding into ca65, the macro assembler supplied with the cc65 C compiler.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-da65 is a disassembler for 6502/65C02 code. It is supplied as a utility with
-the cc65 C compiler and generates output that is suitable for the ca65
-macro assembler.
-
-Besides generating output for ca65, one of the design goals was that the user
-is able to feed additional information about the code into the disassembler,
-for improved results. This information may include the location and size of
-tables, and their format.
-
-One nice advantage of this concept is that disassembly of copyrighted binaries
-may be handled without problems: One can just pass the information file for
-disassembling the binary, so everyone with a legal copy of the binary can
-generate a nicely formatted disassembly with readable labels and other
-information.
-
-
-<sect>Usage<p>
-
-
-<sect1>Command line option overview<p>
-
-The assembler accepts the following options:
-
-<tscreen><verb>
----------------------------------------------------------------------------
-Usage: da65 [options] [inputfile]
-Short options:
-  -g                    Add debug info to object file
-  -h                    Help (this text)
-  -i name               Specify an info file
-  -o name               Name the output file
-  -v                    Increase verbosity
-  -F                    Add formfeeds to the output
-  -S addr               Set the start/load address
-  -V                    Print the disassembler version
-
-Long options:
-  --argument-column n   Specify argument start column
-  --comment-column n    Specify comment start column
-  --comments n          Set the comment level for the output
-  --cpu type            Set cpu type
-  --debug-info          Add debug info to object file
-  --formfeeds           Add formfeeds to the output
-  --help                Help (this text)
-  --hexoffs             Use hexadecimal label offsets
-  --info name           Specify an info file
-  --label-break n       Add newline if label exceeds length n
-  --mnemonic-column n   Specify mnemonic start column
-  --pagelength n        Set the page length for the listing
-  --start-addr addr     Set the start/load address
-  --text-column n       Specify text start column
-  --verbose             Increase verbosity
-  --version             Print the disassembler version
----------------------------------------------------------------------------
-</verb></tscreen>
-
-
-<sect1>Command line options in detail<p>
-
-Here is a description of all the command line options:
-
-<descrip>
-
-  <label id="option--argument-column">
-  <tag><tt>--argument-column n</tt></tag>
-
-  Specifies the column where the argument for a mnemonic or pseudo instruction
-  starts.
-
-
-  <label id="option--comment-column">
-  <tag><tt>--comment-column n</tt></tag>
-
-  Specifies the column where the comment for an instruction starts.
-
-
-  <label id="option--comments">
-  <tag><tt>--comments n</tt></tag>
-
-  Set the comment level for the output. Valid arguments are 0..4. Greater
-  values will increase the level of additional information written to the
-  output file in form of comments.
-
-
-  <label id="option--cpu">
-  <tag><tt>--cpu type</tt></tag>
-
-  Set the CPU type. The option takes a parameter, which may be one of
-  <itemize>
-  <item>6502
-  <item>6502x
-  <item>65sc02
-  <item>65c02
-  <item>huc6280
-  </itemize>
-
-  6502x is for the NMOS 6502 with unofficial opcodes. huc6280 is the CPU of
-  the PC engine. Support for the 65816 currently is not available.
-
-
-  <label id="option--formfeeds">
-  <tag><tt>-F, --formfeeds</tt></tag>
-
-  Add formfeeds to the generated output. This feature is useful together
-  with the <tt><ref id="option--pagelength" name="--pagelength"></tt> option.
-  If <tt/--formfeeds/ is given, a formfeed is added to the output after each
-  page.
-
-
-  <tag><tt>-g, --debug-info</tt></tag>
-
-  This option adds the <tt/.DEBUGINFO/ command to the output file, so the
-  assembler will generate debug information when re-assembling the generated
-  output.
-
-
-  <tag><tt>-h, --help</tt></tag>
-
-  Print the short option summary shown above.
-
-
-  <label id="option--hexoffs">
-  <tag><tt>--hexoffs</tt></tag>
-
-  Output label offsets in hexadecimal instead of decimal notation.
-
-
-  <label id="option--info">
-  <tag><tt>-i name, --info name</tt></tag>
-
-  Specify an info file. The info file contains global options that may
-  override or replace command line options plus informations about the code
-  that has to be disassembled. See the separate section <ref id="infofile"
-  name="Info File Format">.
-
-
-  <label id="option-o">
-  <tag><tt>-o name</tt></tag>
-
-  Specify a name for an output file. The default is to use <tt/stdout/, so
-  without this switch or the corresponding <ref id="global-options"
-  name="global option"> <tt><ref id="OUTPUTNAME" name="OUTPUTNAME"></tt>,
-  the output will go to the terminal.
-
-
-  <label id="option--label-break">
-  <tag><tt>--label-break n</tt></tag>
-
-  Adds a newline if the length of a label exceeds the given length.
-  Note: If the label would run into the code in the mid column, a
-  linefeed is always inserted regardless of this setting.
-
-  This option overrides the <ref id="global-options" name="global option">
-  <tt><ref id="LABELBREAK" name="LABELBREAK"></tt>.
-
-
-  <label id="option--mnemonic-column">
-  <tag><tt>--mnemonic-column n</tt></tag>
-
-  Specifies the column where a mnemonic or pseudo instrcuction is output.
-
-
-  <label id="option--pagelength">
-  <tag><tt>--pagelength n</tt></tag>
-
-  Sets the length of a listing page in lines. After this number of lines, a
-  new page header is generated. If the <tt><ref id="option--formfeeds"
-  name="--formfeeds"></tt> is also given, a formfeed is inserted before
-  generating the page header.
-
-  A value of zero for the page length will disable paging of the output.
-
-
-  <label id="option--start-addr">
-  <tag><tt>-S addr, --start-addr addr</tt></tag>
-
-  Specify the start/load address of the binary code that is going to be
-  disassembled. The given address is interpreted as an octal value if
-  preceded with a '0' digit, as a hexadecimal value if preceded
-  with '0x', '0X', or '$', and as a decimal value in all other cases. If no
-  start address is specified, $10000 minus the size of the input file is used.
-
-
-  <label id="option--text-column">
-  <tag><tt>--text-column n</tt></tag>
-
-  Specifies the column where additional text is output. This additional text
-  consists of the bytes encoded in this line in text representation.
-
-
-  <tag><tt>-v, --verbose</tt></tag>
-
-  Increase the disassembler verbosity. Usually only needed for debugging
-  purposes. You may use this option more than one time for even more
-  verbose output.
-
-
-  <tag><tt>-V, --version</tt></tag>
-
-  Print the version number of the assembler. If you send any suggestions
-  or bugfixes, please include the version number.
-
-</descrip>
-<p>
-
-
-<sect>Detailed workings<p>
-
-<sect1>Supported CPUs<p>
-
-The default (no CPU given on the command line or in the <tt/GLOBAL/ section of
-the info file) is the 6502 CPU. The disassembler knows all "official" opcodes
-for this CPU. Invalid opcodes are translated into <tt/.byte/ commands.
-
-With the command line option <tt><ref id="option--cpu" name="--cpu"></tt>, the
-disassembler may be told to recognize either the 65SC02 or 65C02 CPUs. The
-latter understands the same opcodes as the former, plus 16 additional bit
-manipulation and bit test-and-branch commands.
-
-While there is some code for the 65816 in the sources, it is currently
-unsupported.
-
-
-<sect1>Attribute map<p>
-
-The disassembler works by creating an attribute map for the whole address
-space ($0000 - $FFFF). Initially, all attributes are cleared. Then, an
-external info file (if given) is read. Disassembly is done in several passes.
-In all passes, with the exception of the last one, information about the
-disassembled code is gathered and added to the symbol and attribute maps. The
-last pass generates output using the information from the maps.
-
-<sect1>Labels<p>
-
-Some instructions may generate labels in the first pass, while most other
-instructions do not generate labels, but use them if they are available. Among
-others, the branch and jump instructions will generate labels for the target
-of the branch in the first pass. External labels (taken from the info file)
-have precedence over internally generated ones, They must be valid identifiers
-as specified for the ca65 assembler. Internal labels (generated by the
-disassembler) have the form <tt/Labcd/, where <tt/abcd/ is the hexadecimal
-address of the label in upper case letters. You should probably avoid using
-such label names for external labels.
-
-
-<sect1>Info File<p>
-
-The info file is used to pass additional information about the input code to
-the disassembler. This includes label names, data areas or tables, and global
-options like input and output file names. See the <ref id="infofile"
-name="next section"> for more information.
-
-
-
-<sect>Info File Format<label id="infofile"><p>
-
-The info file contains lists of specifications grouped together. Each group
-directive has an identifying token and an attribute list enclosed in curly
-braces. Attributes have a name followed by a value. The syntax of the value
-depends on the type of the attribute. String attributes are places in double
-quotes, numeric attributes may be specified as decimal numbers or hexadecimal
-with a leading dollar sign. There are also attributes where the attribute
-value is a keyword; in this case, the keyword is given as-is (without quotes or
-anything). Each attribute is terminated by a semicolon.
-
-<tscreen><verb>
-        group-name { attribute1 attribute-value; attribute2 attribute-value; }
-</verb></tscreen>
-
-
-<sect1>Comments<p>
-
-Comments start with a hash mark (<tt/#/); and, extend from the position of
-the mark to the end of the current line. Hash marks inside of strings will
-<em/not/ start a comment, of course.
-
-
-<sect1>Specifying global options<label id="global-options"><p>
-
-Global options may be specified in a group with the name <tt/GLOBAL/. The
-following attributes are recognized:
-
-<descrip>
-
-  <tag><tt/ARGUMENTCOLUMN/</tag>
-  This attribute specifies the column in the output, where the argument for
-  an opcode or pseudo instruction starts. The corresponding command line
-  option is
-  <tt><ref id="option--argument-column" name="--argument-column"></tt>.
-
-
-  <tag><tt/COMMENTCOLUMN/</tag>
-  This attribute specifies the column in the output, where the comment starts
-  in a line. It is only used for in-line comments. The corresponding command
-  line option is
-  <tt><ref id="option--comment-column" name="--comment-column"></tt>.
-
-
-  <label id="COMMENTS">
-  <tag><tt/COMMENTS/</tag>
-  This attribute may be used instead of the <tt><ref id="option--comments"
-  name="--comments"></tt> option on the command line. It takes a numerical
-  parameter between 0 and 4. Higher values increase the amount of information
-  written to the output file in form of comments.
-
-
-  <tag><tt/CPU/</tag>
-  This attribute may be used instead of the <tt><ref id="option--cpu"
-  name="--cpu"></tt> option on the command line. For possible values see
-  there. The value is a string and must be enclosed in quotes.
-
-
-  <tag><tt/HEXOFFS/</tag>
-  The attribute is followed by a boolean value. If true, offsets to labels are
-  output in hex, otherwise they're output in decimal notation. The default is
-  false. The attribute may be changed on the command line using the <tt><ref
-  id="option--hexoffs" name="--hexoffs"></tt> option.
-
-
-  <tag><tt/INPUTNAME/</tag>
-  The attribute is followed by a string value, which gives the name of the
-  input file to read. If it is present, the disassembler does not accept an
-  input file name on the command line.
-
-
-  <tag><tt/INPUTOFFS/</tag>
-  The attribute is followed by a numerical value that gives an offset into
-  the input file which is skipped before reading data. The attribute may be
-  used to skip headers or unwanted code sections in the input file.
-
-
-  <tag><tt/INPUTSIZE/</tag>
-  <tt/INPUTSIZE/ is followed by a numerical value that gives the amount of
-  data to read from the input file. Data beyond <tt/INPUTOFFS + INPUTSIZE/
-  is ignored.
-
-
-  <label id="LABELBREAK">
-  <tag><tt/LABELBREAK/</tag>
-  <tt/LABELBREAK/ is followed by a numerical value that specifies the label
-  length that will force a newline. To have all labels on their own lines,
-  you may set this value to zero.
-
-  See also the <tt><ref id="option--label-break" name="--label-break"></tt>
-  command line option. A <tt/LABELBREAK/ statement in the info file will
-  override any value given on the command line.
-
-
-  <tag><tt/MNEMONICCOLUMN/</tag>
-  This attribute specifies the column in the output, where the mnemonic or
-  pseudo instruction is placed. The corresponding command line option is
-  <tt><ref id="option--mnemonic-column" name="--mnemonic-column"></tt>.
-
-
-  <tag><tt/NEWLINEAFTERJMP/</tag>
-  This attribute is followed by a boolean value. When true, a newline is
-  inserted after each <tt/JMP/ instruction. The default is false.
-
-
-  <tag><tt/NEWLINEAFTERRTS/</tag>
-  This attribute is followed by a boolean value. When true, a newline is
-  inserted after each <tt/RTS/ instruction. The default is false.
-
-
-  <label id="OUTPUTNAME">
-  <tag><tt/OUTPUTNAME/</tag>
-  The attribute is followed by string value, which gives the name of the
-  output file to write. If it is present, specification of an output file on
-  the command line using the <tt><ref id="option-o" name="-o"></tt> option is
-  not allowed.
-
-  The default is to use <tt/stdout/ for output, so without this attribute or
-  the corresponding command line option <tt/<ref id="option-o" name="-o">/
-  the output will go to the terminal.
-
-
-  <tag><tt/PAGELENGTH/</tag>
-  This attribute may be used instead of the <tt><ref id="option--pagelength"
-  name="--pagelength"></tt> option on the command line. It takes a numerical
-  parameter. Using zero as page length (which is the default) means that no
-  pages are generated.
-
-
-  <tag><tt/STARTADDR/</tag>
-  This attribute may be used instead of the <tt><ref id="option--start-addr"
-  name="--start-addr"></tt> option on the command line. It takes a numerical
-  parameter. The default for the start address is $10000 minus the size of
-  the input file (this assumes that the input file is a ROM that contains the
-  reset and irq vectors).
-
-
-  <tag><tt/TEXTCOLUMN/</tag>
-  This attribute specifies the column, where the data bytes are output
-  translated into ASCII text. It is only used if
-  <tt><ref id="COMMENTS" name="COMMENTS"></tt> is set to at least 4. The
-  corresponding command line option is
-  <tt><ref id="option--text-column" name="--text-column"></tt>.
-
-</descrip>
-
-
-<sect1>Specifying Ranges<p>
-
-The <tt/RANGE/ directive is used to give information about address ranges. The
-following attributes are recognized:
-
-<descrip>
-
-  <tag><tt>COMMENT</tt></tag>
-  This attribute is only allowed if a label is also given. It takes a string
-  as argument. See the description of the <tt><ref id="infofile-label"
-  name="LABEL"></tt> directive for an explanation.
-
-  <tag><tt>END</tt></tag>
-  This gives the end address of the range. The end address is inclusive, that
-  means, it is part of the range. Of course, it may not be smaller than the
-  start address.
-
-  <tag><tt>NAME</tt></tag>
-  This is a convenience attribute. It takes a string argument and will cause
-  the disassembler to define a label for the start of the range with the
-  given name. So a separate <tt><ref id="infofile-label" name="LABEL"></tt>
-  directive is not needed.
-
-  <tag><tt>START</tt></tag>
-  This gives the start address of the range.
-
-  <tag><tt>TYPE</tt></tag>
-  This attribute specifies the type of data within the range. The attribute
-  value is one of the following keywords:
-
-  <descrip>
-    <tag><tt>ADDRTABLE</tt></tag>
-    The range consists of data and is disassembled as a table of words
-    (16 bit values). The difference to the <tt/WORDTABLE/ type is that
-    a label is defined for each entry in the table.
-
-    <tag><tt>BYTETABLE</tt></tag>
-    The range consists of data and is disassembled as a byte table.
-
-    <tag><tt>CODE</tt></tag>
-    The range consists of code.
-
-    <tag><tt>DBYTETABLE</tt></tag>
-    The range consists of data and is disassembled as a table of dbytes
-    (double byte values, 16 bit values with the low byte containing the
-    most significant byte of the 16 bit value).
-
-    <tag><tt>DWORDTABLE</tt></tag>
-    The range consists of data and is disassembled as a table of double
-    words (32 bit values).
-
-    <tag><tt>RTSTABLE</tt></tag>
-    The range consists of data and is disassembled as a table of words (16 bit
-    values). The values are interpreted as words that are pushed onto the
-    stack and jump to it via <tt/RTS/. This means that they contain
-    <tt/address-1/ of a function, for which a label will get defined by the
-    disassembler.
-
-    <tag><tt>SKIP</tt></tag>
-    The range is simply ignored when generating the output file. Please note
-    that this means that reassembling the output file will <em/not/ generate
-    the original file, not only because the missing piece in between, but also
-    because the following code will be located on wrong addresses. Output
-    generated with <tt/SKIP/ ranges will need manual rework.
-
-    <tag><tt>TEXTTABLE</tt></tag>
-    The range consists of readable text.
-
-    <tag><tt>WORDTABLE</tt></tag>
-    The range consists of data and is disassembled as a table of words
-    (16 bit values).
-
-  </descrip>
-
-</descrip>
-
-
-<sect1>Specifying Labels<label id="infofile-label"><p>
-
-The <tt/LABEL/ directive is used to give names for labels in the disassembled
-code. The following attributes are recognized:
-
-<descrip>
-
-  <tag><tt>ADDR</tt></tag>
-  Followed by a numerical value. Specifies the value of the label.
-
-  <tag><tt>COMMENT</tt></tag>
-  Attribute argument is a string. The comment will show up in a separate line
-  before the label, if the label is within code or data range, or after the
-  label if it is outside.
-
-  Example output:
-
-<tscreen><verb>
-        foo     := $0001        ; Comment for label named "foo"
-
-        ; Comment for label named "bar"
-        bar:
-</verb></tscreen>
-
-  <tag><tt>NAME</tt></tag>
-  The attribute is followed by a string value which gives the name of the
-  label. Empty names are allowed, in this case the disassembler will create
-  an unnamed label (see the assembler docs for more information about unnamed
-  labels).
-
-  <tag><tt>SIZE</tt></tag>
-  This attribute is optional and may be used to specify the size of the data
-  that follows. If a size greater than 1 is specified, the disassembler will
-  create labels in the form <tt/label+offs/ for all bytes within the given
-  range, where <tt/label/ is the label name given with the <tt/NAME/
-  attribute, and <tt/offs/ is the offset within the data.
-
-</descrip>
-
-
-<sect1>Specifying Segments<label id="infofile-segment"><p>
-
-The <tt/SEGMENT/ directive is used to specify a segment within the
-disassembled code. The following attributes are recognized:
-
-<descrip>
-
-  <tag><tt>START</tt></tag>
-  Followed by a numerical value. Specifies the start address of the segment.
-
-  <tag><tt>END</tt></tag>
-  Followed by a numerical value. Specifies the end address of the segment. The
-  end address is the last address that is a part of the segment.
-
-  <tag><tt>NAME</tt></tag>
-  The attribute is followed by a string value which gives the name of the
-  segment.
-</descrip>
-
-All attributes are mandatory. Segments must not overlap. The disassembler will
-change back to the (default) <tt/.code/ segment after the end of each defined
-segment. That might not be what you want. As a rule of thumb, if you're using
-segments, you should define segments for all disassembled code.
-
-
-<sect1>Specifying Assembler Includes<label id="infofile-asminc"><p>
-
-The <tt/ASMINC/ directive is used to give the names of input files containing
-symbol assignments in assembler syntax:
-
-<tscreen><verb>
-        Name = value
-        Name := value
-</verb></tscreen>
-
-The usual conventions apply for symbol names. Values may be specified as hex
-(leading &dollar;), binary (leading %) or decimal. The values may optionally
-be signed.
-
-NOTE: The include file parser is very simple. Expressions are not allowed, and
-anything but symbol assignments is flagged as an error (but see the
-<tt/IGNOREUNKNOWN/ directive below).
-
-The following attributes are recognized:
-
-<descrip>
-
-  <tag><tt>FILE</tt></tag>
-  Followed by a string value. Specifies the name of the file to read.
-
-  <tag><tt>COMMENTSTART</tt></tag>
-  The optional attribute is followed by a character constant. It specifies the
-  character that starts a comment. The default value is a semicolon. This
-  value is ignored if <tt/IGNOREUNKNOWN/ is true.
-
-  <tag><tt>IGNOREUNKNOWN</tt></tag>
-  This attribute is optional and is followed by a boolean value. It allows to
-  ignore input lines that don't have a valid syntax. This allows to read in
-  assembler include files that contain more than just symbol assignments.
-  Note: When this attribute is used, the disassembler will ignore any errors
-  in the given include file. This may have undesired side effects.
-
-</descrip>
-
-
-<sect1>An Info File Example<p>
-
-The following is a short example for an info file that contains most of the
-directives explained above:
-
-<tscreen><verb>
-        # This is a comment. It extends to the end of the line
-        GLOBAL {
-            OUTPUTNAME      "kernal.s";
-            INPUTNAME       "kernal.bin";
-            STARTADDR       $E000;
-            PAGELENGTH      0;                  # No paging
-            CPU             "6502";
-        };
-
-        # One segment for the whole stuff
-        SEGMENT { START $E000;  END   $FFFF; NAME "kernal"; };
-
-        RANGE { START $E612;    END   $E631; TYPE Code;      };
-        RANGE { START $E632;    END   $E640; TYPE ByteTable; };
-        RANGE { START $EA51;    END   $EA84; TYPE RtsTable;  };
-        RANGE { START $EC6C;    END   $ECAB; TYPE RtsTable;  };
-        RANGE { START $ED08;    END   $ED11; TYPE AddrTable; };
-
-        # Zero-page variables
-        LABEL { NAME "fnadr";   ADDR  $90;   SIZE 3;    };
-        LABEL { NAME "sal";     ADDR  $93;   };
-        LABEL { NAME "sah";     ADDR  $94;   };
-        LABEL { NAME "sas";     ADDR  $95;   };
-
-        # Stack
-        LABEL { NAME "stack";   ADDR  $100;  SIZE 255;  };
-
-        # Indirect vectors
-        LABEL { NAME "cinv";    ADDR  $300;  SIZE 2;    };      # IRQ
-        LABEL { NAME "cbinv";   ADDR  $302;  SIZE 2;    };      # BRK
-        LABEL { NAME "nminv";   ADDR  $304;  SIZE 2;    };      # NMI
-
-        # Jump table at end of kernal ROM
-        LABEL { NAME "kscrorg"; ADDR  $FFED; };
-        LABEL { NAME "kplot";   ADDR  $FFF0; };
-        LABEL { NAME "kiobase"; ADDR  $FFF3; };
-        LABEL { NAME "kgbye";   ADDR  $FFF6; };
-
-        # Hardware vectors
-        LABEL { NAME "hanmi";   ADDR  $FFFA; };
-        LABEL { NAME "hares";   ADDR  $FFFC; };
-        LABEL { NAME "hairq";   ADDR  $FFFE; };
-</verb></tscreen>
-
-
-
-<sect>Copyright<p>
-
-da65 (and all cc65 binutils) is (C) Copyright 1998-2011, Ullrich von
-Bassewitz. For usage of the binaries and/or sources, the following
-conditions do apply:
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item>  The origin of this software must not be misrepresented; you must not
-        claim that you wrote the original software. If you use this software
-        in a product, an acknowledgment in the product documentation would be
-        appreciated but is not required.
-<item>  Altered source versions must be plainly marked as such, and must not
-        be misrepresented as being the original software.
-<item>  This notice may not be removed or altered from any source
-        distribution.
-</enum>
-
-
-
-</article>
diff --git a/doc/debugging.sgml b/doc/debugging.sgml
deleted file mode 100644 (file)
index c7c7792..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>Using emulators with cc65
-<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
-<date>2014-04-11
-
-<abstract>
-How to debug your code using the VICE and Oricutron emulators.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This document describes how to debug your programs using the cc65 development
-tools and the VICE CBM emulator.
-
-
-
-<sect>What is VICE?<p>
-
-VICE is an emulator for many of the CBM machines. It runs on Unix, MS-DOS,
-Win32, OS/2, Acorn RISC OS, BeOS, QNX 6.x, Amiga, GP2X and Mac OS X. It emulates
-the Commodore 64, 128, VIC20, PET and the 600/700 machines. For more information
-see the VICE home page:
-
-<url url="http://vice-emu.sourceforge.net/">.
-
-VICE has a builtin machine language monitor that may be used for debugging
-your programs. Using an emulator for debugging has some advantages:
-
-<itemize>
-
-<item>Since you're using a crossassembler/-compiler anyway, you don't need to
-transfer the program to the real machine until it is done.
-
-<item>An emulator allows many things that are almost impossible one of the
-original machines. You may set watchpoints (detect read or write access to
-arbitary addresses), debug interrupt handlers and even debug routines that run
-inside the 1541 floppy.
-
-<item>You may use the label file generated by the linker to make much more use
-from the monitor.
-
-</itemize>
-
-
-
-<sect>How to prepare your programs<p>
-
-VICE support is mostly done via a label file that is generated by the linker
-and that may be read by the VICE monitor, so it knows about your program.
-Source level debugging is <tt/not/ available, you have to debug your programs
-in the assembler view.
-
-The first step is to generate object files that contain information about
-<em/all/ labels in your sources, not just the exported ones. This can be done
-by several means:
-
-<itemize>
-
-<item>Use the -g switch on the assembler command line.
-
-<item>Use the
-<tscreen><verb>
-      .debuginfo +
-</verb></tscreen>
-    command in your source.
-
-<item>Use the <tt/-g/ switch when invoking the compiler. The compiler will
-then place a <tt/.debuginfo/ command into the generated assembler source.
-
-</itemize>
-
-So, if you have just C code, all you need is to invoke the compiler with
-<tt/-g/. If you're using assembler code, you have to use <tt/-g/ for the
-assembler, or add "<tt/.debuginfo on/" to your source files. Since the
-generated debug info is not appended to the generated executables, it is a
-good idea to always use <tt/-g/. It makes the object files and libraries
-slightly larger (&tilde;30%), but this is usually not a problem.
-
-The second step is to tell the linker that it should generate a VICE label
-file. This is done by the <tt/-Ln/ switch followed by the name of the label
-file (I'm usually using a <tt/.lbl/ extension for these files). An example for
-a linker command line would be:
-
-<tscreen><verb>
-    ld65 -o hello -t c64 -Ln hello.lbl -m hello.map hello.o c64.lib
-</verb></tscreen>
-or
-<tscreen><verb>
-    ld65 -o hello.tap -t atmos -Ln hello.sym -m hello.map hello.o atmos.lib
-</verb></tscreen>
-
-This will generate a file named hello.lbl that contains all symbols used in
-your program.
-
-<bf>Note</bf>: The runtime libraries and startup files were generated with
-debug info, so you don't have to care about this.
-
-
-
-<sect>How to use the label file with VICE<p>
-
-Load your program, then enter the monitor and use the "<tt/ll/" command to
-load your label file like this:
-
-<tscreen><verb>
-               ll "hello.lbl"
-</verb></tscreen>
-
-You will get lots of warnings and even a few errors. You may ignore safely all
-these warnings and errors as long as they reference any problems VICE thinks
-it has with the labels.
-
-After loading the labels, they are used by VICE in the disassembler listing,
-and you may use them whereever you need to specify an address. Try
-
-<tscreen><verb>
-       d ._main
-</verb></tscreen>
-
-as an example (note that VICE needs a leading dot before all labels, and that
-the compiler prepends an underline under most named labels).
-
-
-
-<sect>How to use the label file with Oricutron<p>
-
-Load your program, then enter the monitor and use the "<tt/sl/" command to
-load your label file like this:
-
-<tscreen><verb>
-               sl hello.sym
-</verb></tscreen>
-
-After loading the labels, they are used by Oricutron in the disassembler listing,
-and you may use them whereever you need to specify an address. Try
-
-<tscreen><verb>
-       d ._main
-</verb></tscreen>
-
-as an example (note that VICE needs a leading dot before all labels, and that
-the compiler prepends an underline under most named labels).
-
-
-
-</article>
diff --git a/doc/dio.sgml b/doc/dio.sgml
deleted file mode 100644 (file)
index c85992a..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-<title>Diskette Sector I/O Routines
-<author><url url="mailto:chris@groessler.org" name="Christian Groessler">
-<date>2014-04-10
-
-<abstract>
-The cc65 library provides functions to read and write raw disk sectors.
-Include the dio.h header file to get the necessary definitions.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Opening the disk for low level I/O<p>
-
-Prior to using these functions a handle to the device has to be obtained. This
-is done with the <tt>dio_open</tt> function. After use, the handle should be
-released with the <tt>dio_close</tt> function.
-
-<tscreen><verb>
-    dhandle_t __fastcall__ dio_open (unsigned char device);
-</verb></tscreen>
-
-The <tt>device</tt> specifies the device to access, with 0 being the first
-device, 1 the second, and so on.
-
-<tscreen><verb>
-    unsigned char __fastcall__ dio_close (dhandle_t handle);
-</verb></tscreen>
-
-Closes a handle obtained by <tt>dio_open</tt>. Returns status code.
-<p>
-
-<sect>Reading and writing sectors<p>
-
-The read and write functions are:
-
-<tscreen><verb>
-    unsigned char __fastcall__ dio_read (dhandle_t handle,
-                                         unsigned sect_num,
-                                         void *buffer);
-</verb></tscreen>
-
-This function will read the sector specified by <tt>sect_num</tt> into the memory
-location at buffer.
-
-<tscreen><verb>
-    unsigned char __fastcall__ dio_write (dhandle_t handle,
-                                          unsigned sect_num,
-                                          const void *buffer);
-</verb></tscreen>
-
-This function will write the memory contents at buffer to the sector specified
-by <tt>sect_num</tt>. No verify is performed.
-
-<tscreen><verb>
-    unsigned char __fastcall__ dio_write_verify (dhandle_t handle,
-                                                 unsigned sect_num,
-                                                 const void *buffer);
-</verb></tscreen>
-
-This function will write the memory contents at buffer to the sector specified
-by <tt>sect_num</tt>. A verification is performed.
-<p>
-
-Use the <tt><ref name="dio_query_sectsize" id="sectsizecount"></tt> function to query
-the size of a sector and the <tt><ref name="dio_query_sectcount" id="sectsizecount"></tt>
-function to query the number of available sectors.
-<p>
-
-All these functions will return 0 for success and an OS specific error code in
-case of failure.
-<p>
-
-<sect>Querying sector size and count<label id="sectsizecount"><p>
-
-Some systems support multiple diskette formats which have different sector sizes
-and/or different sector counts.
-<p>
-
-The following function returns the sector size of the currently inserted disk:
-
-<tscreen><verb>
-    unsigned __fastcall__ dio_query_sectsize (dhandle_t handle);
-</verb></tscreen>
-
-On the Atari platform, the sector size is handled specially. Please refer
-to the DIO section in the <url url="atari.html" name="Atari-specific
-platform documentation">.
-<p>
-
-The following function returns the sector count of the currently inserted disk:
-
-<tscreen><verb>
-    unsigned __fastcall__ dio_query_sectcount (dhandle_t handle);
-</verb></tscreen>
-
-<sect>Converting sector numbers<p>
-
-Since the read and write functions expect a sector number, for systems where
-the sectors aren't addressed by a logical sector number (e.g. CBM devices),
-there are 2 conversion functions. One of them converts a logical sector number
-to a head/track/sector triple. The other conversion function works the other
-way round.
-
-<tscreen><verb>
-    unsigned char __fastcall__ dio_phys_to_log (dhandle_t handle,
-                                                const dio_phys_pos *physpos,
-                                                unsigned *sectnum);
-</verb></tscreen>
-
-This function converts track/head/sector to logical sector number.
-
-<tscreen><verb>
-    unsigned char __fastcall__ dio_log_to_phys (dhandle_t handle,
-                                                const unsigned *sectnum,
-                                                dio_phys_pos *physpos);
-</verb></tscreen>
-
-This function converts a logical sector number to track/head/sector notation.
-<p>
-
-Note, that on systems which natively use logical sector numbers (e.g. Atari),
-the conversion functions are dummies. They ignore head/track
-(<tt>dio_phys_to_log</tt>) or return them as zero (<tt>dio_log_to_phys</tt>).
-The logical sector number is returned as physical sector and vice versa.
-<p>
-
-
-</article>
diff --git a/doc/doc.css b/doc/doc.css
deleted file mode 100644 (file)
index 232599a..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-body {
-    font-family:        arial, helvetica, sans-serif;
-    font-size:          100%;
-    text-align:         justify;
-    margin-left:        110px;
-    margin-top:         10px;
-    margin-right:       30px;
-    margin-bottom:      10px;
-    background-image:   url(doc.png);
-    background-repeat:  repeat-y;
-}
-
-h1, h2, h2 a:link, h2 a:active, h2 a:visited {
-    font-weight:        bold;
-    font-style:         italic;
-    text-align:         left;
-    color:              #DB3232;
-}
-
-h1 {
-    font-size:          250%;
-    text-shadow:        2px 2px 6px #505050;
-    letter-spacing:     2px;
-    padding-top:        40px;
-}
-
-h2 {
-    font-size:          160%;
-    text-shadow:        2px 2px 6px #303030;
-    letter-spacing:     1px;
-    margin-top:         2em;
-    margin-bottom:      1em;
-}
diff --git a/doc/doc.png b/doc/doc.png
deleted file mode 100644 (file)
index 91af80d..0000000
Binary files a/doc/doc.png and /dev/null differ
diff --git a/doc/funcref.sgml b/doc/funcref.sgml
deleted file mode 100644 (file)
index a2ccf6c..0000000
+++ /dev/null
@@ -1,7472 +0,0 @@
-<!doctype linuxdoc system>      <!-- -*- text-mode -*- -->
-
-<article>
-<title>cc65 function reference
-<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
-<date>2015-07-21
-
-<abstract>
-cc65 is a C compiler for 6502 based systems. This function reference describes
-the C functions available in the standard library.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Introduction<p>
-
-cc65 is a C compiler for 6502 based systems. It implements a subset of the ISO
-C standard plus additional functions specially crafted for 6502 systems or
-just some of the supported machines. This function refrence describes the
-available functions together with any limitations.
-
-For an overview about the available libraries, their purpose, and any
-differences to the ISO standard, please have a look at the <url
-url="library.html" name="cc65 Library Overview">.
-
-<em/Note:/ Standard C functions are listed here, but not described in detail.
-Since these functions behave identical on all standard compliant systems, they
-are described in any book covering standard C.
-
-Each entry for a function contains a detailed description
-
-<quote>
-<descrip>
-<tag/Function/Summary of what <bf/function/ does.
-<tag/Header/The header file that contains the declaration.
-<tag/Declaration/Describes the needed header files and declaration of the
-function.
-<tag/Description/Description of the function.
-<tag/Notes/Notes on the function.
-<tag/Availability/The availability of the function.
-<tag/See also/Other related functions.
-<tag/Example/A piece of actual code using the function.
-</descrip>
-</quote>
-
-
-<sect>Functions by header file<p>
-
-<sect1><tt/6502.h/<label id="6502.h"><p>
-
-<itemize>
-<item><ref id="BRK" name="BRK">
-<item><ref id="CLI" name="CLI">
-<item><ref id="SEI" name="SEI">
-<item><ref id="_sys" name="_sys">
-<item><ref id="getcpu" name="getcpu">
-<item><ref id="reset_brk" name="reset_brk">
-<item><ref id="reset_irq" name="reset_irq">
-<item><ref id="set_brk" name="set_brk">
-<item><ref id="set_irq" name="set_irq">
-</itemize>
-
-
-<sect1><tt/apple2.h/<label id="apple2.h"><p>
-
-<itemize>
-<item>_dos_type
-<item><ref id="get_ostype" name="get_ostype">
-<item>rebootafterexit
-</itemize>
-
-
-<sect1><tt/apple2enh.h/<label id="apple2enh.h"><p>
-
-<itemize>
-<item>_dos_type
-<item><ref id="get_ostype" name="get_ostype">
-<item>rebootafterexit
-<item>textframe
-<item>textframexy
-<item><ref id="videomode" name="videomode">
-</itemize>
-
-
-<sect1><tt/assert.h/<label id="assert.h"><p>
-
-<itemize>
-<item><ref id="assert" name="assert">
-</itemize>
-
-
-<sect1><tt/atari.h/<label id="atari.h"><p>
-
-<itemize>
-<!-- <item><ref id="_getcolor" name="_getcolor"> -->
-<!-- <item><ref id="_getdefdev" name="_getdefdev"> -->
-<!-- <item><ref id="_graphics" name="_graphics"> -->
-<!-- <item><ref id="_rest_vecs" name="_rest_vecs"> -->
-<!-- <item><ref id="_save_vecs" name="_save_vecs"> -->
-<!-- <item><ref id="_scroll" name="_scroll"> -->
-<!-- <item><ref id="_setcolor" name="_setcolor"> -->
-<!-- <item><ref id="_setcolor_low" name="_setcolor_low"> -->
-<item><ref id="get_ostype" name="get_ostype">
-<!-- <item><ref id="get_tv" name="get_tv"> -->
-</itemize>
-
-(incomplete)
-
-
-<sect1><tt/atmos.h/<label id="atmos.h"><p>
-
-<itemize>
-<item><ref id="atmos_load" name="atmos_load">
-<item><ref id="atmos_save" name="atmos_save">
-<!-- <item><ref id="atmos_explode" name="atmos_explode"> -->
-<!-- <item><ref id="atmos_ping" name="atmos_ping"> -->
-<!-- <item><ref id="atmos_shoot" name="atmos_shoot"> -->
-<!-- <item><ref id="atmos_tick" name="atmos_tick"> -->
-<!-- <item><ref id="atmos_tock" name="atmos_tock"> -->
-<!-- <item><ref id="atmos_zap" name="atmos_zap"> -->
-</itemize>
-
-(incomplete)
-
-
-<sect1><tt/c128.h/<label id="c128.h"><p>
-
-<itemize>
-<item><ref id="c64mode" name="c64mode">
-<item><ref id="fast" name="fast">
-<item><ref id="slow" name="slow">
-<item><ref id="toggle_videomode" name="toggle_videomode">
-<item><ref id="videomode" name="videomode">
-</itemize>
-
-
-<sect1><tt/c16.h/<label id="c16.h"><p>
-
-(incomplete)
-
-
-<sect1><tt/c64.h/<label id="c64.h"><p>
-
-<itemize>
-<item><ref id="get_ostype" name="get_ostype">
-</itemize>
-
-
-<sect1><tt/cbm.h/<label id="cbm.h"><p>
-
-<itemize>
-<item><ref id="cbm_k_acptr" name="cbm_k_acptr">
-<item><ref id="cbm_k_basin" name="cbm_k_basin">
-<item><ref id="cbm_k_bsout" name="cbm_k_bsout">
-<item><ref id="cbm_k_chkin" name="cbm_k_chkin">
-<item><ref id="cbm_k_ciout" name="cbm_k_ciout">
-<item><ref id="cbm_k_ckout" name="cbm_k_ckout">
-<item><ref id="cbm_k_clall" name="cbm_k_clall">
-<item><ref id="cbm_k_close" name="cbm_k_close">
-<item><ref id="cbm_k_clrch" name="cbm_k_clrch">
-<item><ref id="cbm_k_getin" name="cbm_k_getin">
-<item><ref id="cbm_k_iobase" name="cbm_k_iobase">
-<item><ref id="cbm_k_listen" name="cbm_k_listen">
-<item><ref id="cbm_k_load" name="cbm_k_load">
-<item><ref id="cbm_k_open" name="cbm_k_open">
-<item><ref id="cbm_k_readst" name="cbm_k_readst">
-<item><ref id="cbm_k_save" name="cbm_k_save">
-<item><ref id="cbm_k_setlfs" name="cbm_k_setlfs">
-<item><ref id="cbm_k_setnam" name="cbm_k_setnam">
-<item><ref id="cbm_k_unlsn" name="cbm_k_unlsn">
-<!-- <item><ref id="cbm_load" name="cbm_load"> -->
-<!-- <item><ref id="cbm_open" name="cbm_open"> -->
-<!-- <item><ref id="cbm_opendir" name="cbm_opendir"> -->
-<!-- <item><ref id="cbm_read" name="cbm_read"> -->
-<!-- <item><ref id="cbm_readdir" name="cbm_readdir"> -->
-<!-- <item><ref id="cbm_save" name="cbm_save"> -->
-<!-- <item><ref id="cbm_write" name="cbm_write"> -->
-<!-- <item><ref id="get_tv" name="get_tv"> -->
-</itemize>
-
-(incomplete)
-
-
-<sect1><tt/cbm510.h/<label id="cbm510.h"><p>
-
-<itemize>
-<item><ref id="peekbsys" name="peekbsys">
-<item><ref id="peekwsys" name="peekwsys">
-<item><ref id="pokebsys" name="pokebsys">
-<item><ref id="pokewsys" name="pokewsys">
-</itemize>
-
-
-<sect1><tt/cbm610.h/<label id="cbm610.h"><p>
-
-<itemize>
-<item><ref id="peekbsys" name="peekbsys">
-<item><ref id="peekwsys" name="peekwsys">
-<item><ref id="pokebsys" name="pokebsys">
-<item><ref id="pokewsys" name="pokewsys">
-</itemize>
-
-
-<sect1><tt/cc65.h/<label id="cc65.h"><p>
-
-<!-- <itemize> -->
-<!-- <item><ref id="cc65_cos" name="cc65_cos"> -->
-<!-- <item><ref id="cc65_idiv32by16r16" name="cc65_idiv32by16r16"> -->
-<!-- <item><ref id="cc65_imul16x16r32" name="cc65_imul16x16r32"> -->
-<!-- <item><ref id="cc65_imul8x8r16" name="cc65_imul8x8r16"> -->
-<!-- <item><ref id="cc65_sin" name="cc65_sin"> -->
-<!-- <item><ref id="cc65_udiv32by16r16" name="cc65_udiv32by16r16"> -->
-<!-- <item><ref id="cc65_umul16x16r32" name="cc65_umul16x16r32"> -->
-<!-- <item><ref id="cc65_umul16x8r32" name="cc65_umul16x8r32"> -->
-<!-- <item><ref id="cc65_umul8x8r16" name="cc65_umul8x8r16"> -->
-<!-- </itemize> -->
-
-(incomplete)
-
-
-<sect1><tt/conio.h/<label id="conio.h"><p>
-
-<itemize>
-<item><ref id="bgcolor" name="bgcolor">
-<item><ref id="bordercolor" name="bordercolor">
-<item><ref id="cclear" name="cclear">
-<item><ref id="cclearxy" name="cclearxy">
-<item><ref id="cgetc" name="cgetc">
-<item><ref id="chline" name="chline">
-<item><ref id="chlinexy" name="chlinexy">
-<item><ref id="clrscr" name="clrscr">
-<item><ref id="cprintf" name="cprintf">
-<item><ref id="cputc" name="cputc">
-<item><ref id="cputcxy" name="cputcxy">
-<item><ref id="cputs" name="cputs">
-<item><ref id="cputsxy" name="cputsxy">
-<item><ref id="cursor" name="cursor">
-<item><ref id="cvline" name="cvline">
-<item><ref id="cvlinexy" name="cvlinexy">
-<item><ref id="gotox" name="gotox">
-<item><ref id="gotoxy" name="gotoxy">
-<item><ref id="gotoy" name="gotoy">
-<item><ref id="kbhit" name="kbhit">
-<item><ref id="revers" name="revers">
-<item><ref id="screensize" name="screensize">
-<item><ref id="textcolor" name="textcolor">
-<item><ref id="vcprintf" name="vcprintf">
-<item><ref id="wherex" name="wherex">
-<item><ref id="wherey" name="wherey">
-</itemize>
-
-
-<sect1><tt/ctype.h/<label id="ctype.h"><p>
-
-<itemize>
-<item><ref id="isalnum" name="isalnum">
-<item><ref id="isalpha" name="isalpha">
-<item><ref id="isascii" name="isascii">
-<item><ref id="isblank" name="isblank">
-<item><ref id="iscntrl" name="iscntrl">
-<item><ref id="isdigit" name="isdigit">
-<item><ref id="isgraph" name="isgraph">
-<item><ref id="islower" name="islower">
-<item><ref id="isprint" name="isprint">
-<item><ref id="ispunct" name="ispunct">
-<item><ref id="isspace" name="isspace">
-<item><ref id="isupper" name="isupper">
-<item><ref id="isxdigit" name="isxdigit">
-<item><ref id="tolower" name="tolower">
-<item><ref id="toupper" name="toupper">
-</itemize>
-
-
-<sect1><tt/dbg.h/<label id="dbg.h"><p>
-
-<!-- <itemize> -->
-<!-- <item><ref id="DbgInit" name="DbgInit"> -->
-<!-- </itemize> -->
-
-(incomplete)
-
-
-<sect1><tt/dio.h/<label id="dio.h"><p>
-
-<url url="dio.html" name="Low-level disk I/O API">.
-
-
-<sect1><tt/dirent.h/<label id="dirent.h"><p>
-
-<itemize>
-<item><ref id="_DE_ISDIR" name="_DE_ISDIR">
-<item><ref id="_DE_ISLBL" name="_DE_ISLBL">
-<item><ref id="_DE_ISLNK" name="_DE_ISLNK">
-<item><ref id="_DE_ISREG" name="_DE_ISREG">
-<item><ref id="closedir" name="closedir">
-<item><ref id="opendir" name="opendir">
-<item><ref id="readdir" name="readdir">
-<item><ref id="rewinddir" name="rewinddir">
-<item><ref id="seekdir" name="seekdir">
-<item><ref id="telldir" name="telldir">
-</itemize>
-
-(incomplete)
-
-
-<sect1><tt/em.h/<label id="em.h"><p>
-
-<itemize>
-<item><ref id="em_commit" name="em_commit">
-<item><ref id="em_copyfrom" name="em_copyfrom">
-<item><ref id="em_copyto" name="em_copyto">
-<item><ref id="em_install" name="em_install">
-<item><ref id="em_load_driver" name="em_load_driver">
-<item><ref id="em_map" name="em_map">
-<item><ref id="em_pagecount" name="em_pagecount">
-<item><ref id="em_uninstall" name="em_uninstall">
-<item><ref id="em_unload" name="em_unload">
-<item><ref id="em_use" name="em_use">
-</itemize>
-
-
-<sect1><tt/errno.h/<label id="errno.h"><p>
-
-<!-- <itemize> -->
-<!-- <item><ref id="_directerrno" name="_directerrno"> -->
-<!-- <item><ref id="_mappederrno" name="_mappederrno"> -->
-<!-- <item><ref id="_osmaperrno" name="_osmaperrno"> -->
-<!-- <item><ref id="_seterrno" name="_seterrno"> -->
-<!-- </itemize> -->
-
-(incomplete)
-
-
-<sect1><tt/fcntl.h/<label id="fcntl.h"><p>
-
-<itemize>
-<item><ref id="close" name="close">
-<item><ref id="creat" name="creat">
-<item><ref id="open" name="open">
-</itemize>
-
-
-<sect1><tt/geos.h/<label id="geos.h"><p>
-
-(incomplete)
-
-
-<sect1><tt/joystick.h/<label id="joystick.h"><p>
-
-<itemize>
-<item><ref id="joy_count" name="joy_count">
-<item><ref id="joy_install" name="joy_install">
-<item><ref id="joy_load_driver" name="joy_load_driver">
-<item><ref id="joy_read" name="joy_read">
-<item><ref id="joy_uninstall" name="joy_uninstall">
-<item><ref id="joy_unload" name="joy_unload">
-</itemize>
-
-
-<sect1><tt/locale.h/<label id="locale.h"><p>
-
-<itemize>
-<item><ref id="localeconv" name="localeconv">
-<item><ref id="setlocale" name="setlocale">
-</itemize>
-
-
-<sect1><tt/lynx.h/<label id="lynx.h"><p>
-
-<!-- <itemize> -->
-<!-- <item><ref id="lynx_eeprom_erase" name="lynx_eeprom_erase"> -->
-<!-- <item><ref id="lynx_eeprom_read" name="lynx_eeprom_read"> -->
-<!-- <item><ref id="lynx_eeprom_write" name="lynx_eeprom_write"> -->
-<!-- <item><ref id="lynx_eeread" name="lynx_eeread"> -->
-<!-- <item><ref id="lynx_eewrite" name="lynx_eewrite"> -->
-<!-- <item><ref id="lynx_exec" name="lynx_exec"> -->
-<!-- <item><ref id="lynx_load" name="lynx_load"> -->
-<!-- </itemize> -->
-
-(incomplete)
-
-
-<sect1><tt/modload.h/<label id="modload.h"><p>
-
-<itemize>
-<item><ref id="mod_load" name="mod_load">
-<item><ref id="mod_free" name="mod_free">
-</itemize>
-
-
-<sect1><tt/mouse.h/<label id="mouse.h"><p>
-
-<itemize>
-<item><ref id="mouse_buttons" name="mouse_buttons">
-<item><ref id="mouse_getbox" name="mouse_getbox">
-<item><ref id="mouse_geterrormsg" name="mouse_geterrormsg">
-<item><ref id="mouse_hide" name="mouse_hide">
-<item><ref id="mouse_info" name="mouse_info">
-<item><ref id="mouse_install" name="mouse_install">
-<item><ref id="mouse_ioctl" name="mouse_ioctl">
-<item><ref id="mouse_load_driver" name="mouse_load_driver">
-<item><ref id="mouse_move" name="mouse_move">
-<item><ref id="mouse_pos" name="mouse_pos">
-<item><ref id="mouse_setbox" name="mouse_setbox">
-<item><ref id="mouse_show" name="mouse_show">
-<item><ref id="mouse_uninstall" name="mouse_uninstall">
-<item><ref id="mouse_unload" name="mouse_unload">
-</itemize>
-
-
-<sect1><tt/nes.h/<label id="nes.h"><p>
-
-<!-- <itemize> -->
-<!-- <item><ref id="get_tv" name="get_tv"> -->
-<!-- <item><ref id="waitvblank" name="waitvblank"> -->
-<!-- </itemize> -->
-
-(incomplete)
-
-
-<sect1><tt/o65.h/<label id="o65.h"><p>
-
-The <tt/o65.h/ header file contains structure and constant definitions that
-may be used when dealing with files in <url
-url="http://www.6502.org/users/andre/o65/fileformat.html" name="the o65 format">.
-It does not declare any functions.
-
-
-<sect1><tt/peekpoke.h/<label id="peekpoke.h"><p>
-
-<itemize>
-<item><ref id="PEEK" name="PEEK">
-<item><ref id="PEEKW" name="PEEKW">
-<item><ref id="POKE" name="POKE">
-<item><ref id="POKEW" name="POKEW">
-</itemize>
-
-
-<sect1><tt/pet.h/<label id="pet.h"><p>
-
-(incomplete)
-
-
-<sect1><tt/plus4.h/<label id="plus4.h"><p>
-
-(incomplete)
-
-
-<sect1><tt/serial.h/<label id="serial.h"><p>
-
-The <tt/serial.h/ header file contains definitions for initializing serial
-communication.
-
-<itemize>
-<item><ref id="ser_close" name="ser_close">
-<item><ref id="ser_get" name="ser_get">
-<item><ref id="ser_install" name="ser_install">
-<item><ref id="ser_ioctl" name="ser_ioctl">
-<item><ref id="ser_load_driver" name="ser_load_driver">
-<item><ref id="ser_open" name="ser_open">
-<item><ref id="ser_put" name="ser_put">
-<item><ref id="ser_status" name="ser_status">
-<item><ref id="ser_uninstall" name="ser_uninstall">
-<item><ref id="ser_unload" name="ser_unload">
-</itemize>
-
-
-<sect1><tt/setjmp.h/<label id="setjmp.h"><p>
-
-<itemize>
-<item><ref id="setjmp" name="setjmp">
-<item><ref id="longjmp" name="longjmp">
-</itemize>
-
-
-<sect1><tt/signal.h/<label id="signal.h"><p>
-
-<itemize>
-<item><ref id="raise" name="raise">
-<item><ref id="signal" name="signal">
-</itemize>
-
-
-<sect1><tt/stdarg.h/<label id="stdarg.h"><p>
-
-(incomplete)
-
-
-<sect1><tt/stdbool.h/<label id="stdbool.h"><p>
-
-(incomplete)
-
-
-<sect1><tt/stddef.h/<label id="stddef.h"><p>
-
-<itemize>
-<item><ref id="offsetof" name="offsetof">
-</itemize>
-
-
-<sect1><tt/stdio.h/<label id="stdio.h"><p>
-
-<itemize>
-<item><ref id="_poserror" name="_poserror">
-<item><ref id="clearerr" name="clearerr">
-<!-- <item><ref id="fclose" name="fclose"> -->
-<!-- <item><ref id="fdopen" name="fdopen"> -->
-<item><ref id="feof" name="feof">
-<item><ref id="ferror" name="ferror">
-<!-- <item><ref id="fflush" name="fflush"> -->
-<!-- <item><ref id="fgetc" name="fgetc"> -->
-<!-- <item><ref id="fgetpos" name="fgetpos"> -->
-<!-- <item><ref id="fgets" name="fgets"> -->
-<item><ref id="fileno" name="fileno">
-<!-- <item><ref id="fopen" name="fopen"> -->
-<!-- <item><ref id="fprintf" name="fprintf"> -->
-<!-- <item><ref id="fputc" name="fputc"> -->
-<!-- <item><ref id="fputs" name="fputs"> -->
-<!-- <item><ref id="fread" name="fread"> -->
-<!-- <item><ref id="freopen" name="freopen"> -->
-<!-- <item><ref id="fscanf" name="fscanf"> -->
-<!-- <item><ref id="fseek" name="fseek"> -->
-<!-- <item><ref id="fsetpos" name="fsetpos"> -->
-<!-- <item><ref id="ftell" name="ftell"> -->
-<!-- <item><ref id="fwrite" name="fwrite"> -->
-<!-- <item><ref id="getc" name="getc"> -->
-<!-- <item><ref id="getchar" name="getchar"> -->
-<!-- <item><ref id="gets" name="gets"> -->
-<!-- <item><ref id="printf" name="printf"> -->
-<!-- <item><ref id="putc" name="putc"> -->
-<!-- <item><ref id="putchar" name="putchar"> -->
-<!-- <item><ref id="puts" name="puts"> -->
-<item><ref id="rename" name="rename">
-<item><ref id="remove" name="remove">
-<!-- <item><ref id="rewind" name="rewind"> -->
-<!-- <item><ref id="scanf" name="scanf"> -->
-<!-- <item><ref id="snprintf" name="snprintf"> -->
-<!-- <item><ref id="sprintf" name="sprintf"> -->
-<!-- <item><ref id="sscanf" name="sscanf"> -->
-<!-- <item><ref id="vfprintf" name="vfprintf"> -->
-<!-- <item><ref id="vfscanf" name="vfscanf"> -->
-<!-- <item><ref id="vprintf" name="vprintf"> -->
-<!-- <item><ref id="vscanf" name="vscanf"> -->
-<!-- <item><ref id="vsnprintf" name="vsnprintf"> -->
-<!-- <item><ref id="vsprintf" name="vsprintf"> -->
-<!-- <item><ref id="vsscanf" name="vsscanf"> -->
-</itemize>
-
-(incomplete)
-
-
-<sect1><tt/stdlib.h/<label id="stdlib.h"><p>
-
-<itemize>
-<item><ref id="_heapadd" name="_heapadd">
-<item><ref id="_heapblocksize" name="_heapblocksize">
-<item><ref id="_heapmaxavail" name="_heapmaxavail">
-<item><ref id="_heapmemavail" name="_heapmemavail">
-<item><ref id="_randomize" name="_randomize">
-<item><ref id="_swap" name="_swap">
-<item><ref id="abort" name="abort">
-<item><ref id="abs" name="abs">
-<item><ref id="atexit" name="atexit">
-<item><ref id="atoi" name="atoi">
-<item><ref id="atol" name="atol">
-<item><ref id="bsearch" name="bsearch">
-<item><ref id="calloc" name="calloc">
-<item><ref id="div" name="div">
-<item><ref id="exit" name="exit">
-<item><ref id="free" name="free">
-<item><ref id="getenv" name="getenv">
-<item><ref id="itoa" name="itoa">
-<item><ref id="labs" name="labs">
-<item><ref id="ltoa" name="ltoa">
-<item><ref id="malloc" name="malloc">
-<item><ref id="perror" name="perror">
-<!-- <item><ref id="posix_memalign" name="posix_memalign"> -->
-<!-- <item><ref id="putenv" name="putenv"> -->
-<item><ref id="qsort" name="qsort">
-<item><ref id="rand" name="rand">
-<item><ref id="realloc" name="realloc">
-<item><ref id="srand" name="srand">
-<!-- <item><ref id="system" name="system"> -->
-<item><ref id="ultoa" name="ultoa">
-<item><ref id="utoa" name="utoa">
-</itemize>
-
-(incomplete)
-
-
-<sect1><tt/string.h/<label id="string.h"><p>
-
-<itemize>
-<item><ref id="_stroserror" name="_stroserror">
-<item><ref id="bzero" name="bzero">
-<item><ref id="memchr" name="memchr">
-<item><ref id="memcmp" name="memcmp">
-<item><ref id="memcpy" name="memcpy">
-<item><ref id="memmove" name="memmove">
-<item><ref id="memset" name="memset">
-<item><ref id="strcasecmp" name="strcasecmp">
-<item><ref id="strcat" name="strcat">
-<item><ref id="strchr" name="strchr">
-<item><ref id="strcmp" name="strcmp">
-<item><ref id="strcoll" name="strcoll">
-<item><ref id="strcpy" name="strcpy">
-<item><ref id="strcspn" name="strcspn">
-<item><ref id="strdup" name="strdup">
-<item><ref id="strerror" name="strerror">
-<item><ref id="stricmp" name="stricmp">
-<item><ref id="strlen" name="strlen">
-<item><ref id="strlower" name="strlower">
-<item><ref id="strlwr" name="strlwr">
-<item><ref id="strncat" name="strncat">
-<item><ref id="strncmp" name="strncmp">
-<item><ref id="strncpy" name="strncpy">
-<item><ref id="strqtok" name="strqtok">
-<item><ref id="strrchr" name="strrchr">
-<item><ref id="strspn" name="strspn">
-<item><ref id="strstr" name="strstr">
-<item><ref id="strtok" name="strtok">
-<item><ref id="strxfrm" name="strxfrm">
-<item><ref id="strupper" name="strupper">
-<item><ref id="strupr" name="strupr">
-</itemize>
-
-(incomplete)
-
-
-<sect1><tt/tgi.h/<label id="tgi.h"><p>
-
-<itemize>
-<item><ref id="tgi_arc" name="tgi_arc">
-<item><ref id="tgi_bar" name="tgi_bar">
-<item><ref id="tgi_circle" name="tgi_circle">
-<item><ref id="tgi_clear" name="tgi_clear">
-<item><ref id="tgi_done" name="tgi_done">
-<item><ref id="tgi_ellipse" name="tgi_ellipse">
-<item><ref id="tgi_free_vectorfont" name="tgi_free_vectorfont">
-<item><ref id="tgi_getaspectratio" name="tgi_getaspectratio">
-<item><ref id="tgi_getcolor" name="tgi_getcolor">
-<item><ref id="tgi_getcolorcount" name="tgi_getcolorcount">
-<item><ref id="tgi_getdefpalette" name="tgi_getdefpalette">
-<item><ref id="tgi_geterror" name="tgi_geterror">
-<item><ref id="tgi_geterrormsg" name="tgi_geterrormsg">
-<item><ref id="tgi_getmaxcolor" name="tgi_getmaxcolor">
-<item><ref id="tgi_getmaxx" name="tgi_getmaxx">
-<item><ref id="tgi_getmaxy" name="tgi_getmaxy">
-<item><ref id="tgi_getpagecount" name="tgi_getpagecount">
-<item><ref id="tgi_getpalette" name="tgi_getpalette">
-<item><ref id="tgi_getpixel" name="tgi_getpixel">
-<item><ref id="tgi_gettextheight" name="tgi_gettextheight">
-<item><ref id="tgi_gettextwidth" name="tgi_gettextwidth">
-<item><ref id="tgi_getxres" name="tgi_getxres">
-<item><ref id="tgi_getyres" name="tgi_getyres">
-<item><ref id="tgi_gotoxy" name="tgi_gotoxy">
-<item><ref id="tgi_init" name="tgi_init">
-<item><ref id="tgi_install" name="tgi_install">
-<item><ref id="tgi_install_vectorfont" name="tgi_install_vectorfont">
-<item><ref id="tgi_ioctl" name="tgi_ioctl">
-<item><ref id="tgi_line" name="tgi_line">
-<item><ref id="tgi_lineto" name="tgi_lineto">
-<item><ref id="tgi_load_driver" name="tgi_load_driver">
-<item><ref id="tgi_load_vectorfont" name="tgi_load_vectorfont">
-<item><ref id="tgi_outtext" name="tgi_outtext">
-<item><ref id="tgi_outtextxy" name="tgi_outtextxy">
-<item><ref id="tgi_setaspectratio" name="tgi_setaspectratio">
-<item><ref id="tgi_setcolor" name="tgi_setcolor">
-<item><ref id="tgi_setdrawpage" name="tgi_setdrawpage">
-<item><ref id="tgi_setpalette" name="tgi_setpalette">
-<item><ref id="tgi_setpixel" name="tgi_setpixel">
-<item><ref id="tgi_setviewpage" name="tgi_setviewpage">
-<item><ref id="tgi_settextscale" name="tgi_settextscale">
-<item><ref id="tgi_settextstyle" name="tgi_settextstyle">
-<item><ref id="tgi_uninstall" name="tgi_uninstall">
-<item><ref id="tgi_unload" name="tgi_unload">
-</itemize>
-
-<sect1><tt/time.h/<label id="time.h"><p>
-
-<itemize>
-<!-- <item><ref id="_systime" name="_systime"> -->
-<!-- <item><ref id="asctime" name="asctime"> -->
-<item><ref id="clock" name="clock">
-<!-- <item><ref id="ctime" name="ctime"> -->
-<!-- <item><ref id="gmtime" name="gmtime"> -->
-<!-- <item><ref id="localtime" name="localtime"> -->
-<!-- <item><ref id="mktime" name="mktime"> -->
-<!-- <item><ref id="strftime" name="strftime"> -->
-<item><ref id="time" name="time">
-</itemize>
-
-(incomplete)
-
-
-<sect1><tt/unistd.h/<label id="unistd.h"><p>
-
-<itemize>
-<!-- <item><ref id="chdir" name="chdir"> -->
-<item><ref id="exec" name="exec">
-<!-- <item><ref id="getcwd" name="getcwd"> -->
-<item><ref id="getopt" name="getopt">
-<!-- <item><ref id="lseek" name="lseek"> -->
-<!-- <item><ref id="mkdir" name="mkdir"> -->
-<!-- <item><ref id="read" name="read"> -->
-<!-- <item><ref id="rmdir" name="rmdir"> -->
-<item><ref id="sleep" name="sleep">
-<item><ref id="unlink" name="unlink">
-<!-- <item><ref id="write" name="write"> -->
-</itemize>
-
-(incomplete)
-
-
-<sect1><tt/vic20.h/<label id="vic20.h"><p>
-
-(incomplete)
-
-
-<sect1><tt/zlib.h/<label id="zlib.h"><p>
-
-<!-- <itemize> -->
-<!-- <item><ref id="adler32" name="adler32"> -->
-<!-- <item><ref id="crc32" name="crc32"> -->
-<!-- <item><ref id="inflatemem" name="inflatemem"> -->
-<!-- <item><ref id="uncompress" name="uncompress"> -->
-<!-- </itemize> -->
-
-(incomplete)
-
-
-<sect>Alphabetical function reference<p>
-
-<sect1>_DE_ISDIR<label id="_DE_ISDIR"><p>
-
-<quote>
-<descrip>
-<tag/Function/Determine if a directory entry specifies a directory.
-<tag/Header/<tt/<ref id="dirent.h" name="dirent.h">/
-<tag/Declaration/<tt/int _DE_ISDIR(unsigned char type);/
-<tag/Description/The function is called with the type of a directory entry
-taken from a <tt/struct dirent/ and returns true if the entry designates
-a directory.
-<tag/Notes/<itemize>
-<item>The function is actually a macro.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="_DE_ISLBL" name="_DE_ISLBL">,
-<ref id="_DE_ISLNK" name="_DE_ISLNK">,
-<ref id="_DE_ISREG" name="_DE_ISREG">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>_DE_ISLBL<label id="_DE_ISLBL"><p>
-
-<quote>
-<descrip>
-<tag/Function/Determine if a directory entry specifies a disk label.
-<tag/Header/<tt/<ref id="dirent.h" name="dirent.h">/
-<tag/Declaration/<tt/int _DE_ISLBL(unsigned char type);/
-<tag/Description/The function is called with the type of a directory entry
-taken from a <tt/struct dirent/ and returns true if the entry designates
-a disk label.
-<tag/Notes/<itemize>
-<item>The function is actually a macro.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="_DE_ISDIR" name="_DE_ISDIR">,
-<ref id="_DE_ISLNK" name="_DE_ISLNK">,
-<ref id="_DE_ISREG" name="_DE_ISREG">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>_DE_ISLNK<label id="_DE_ISLNK"><p>
-
-<quote>
-<descrip>
-<tag/Function/Determine if a directory entry specifies a link.
-<tag/Header/<tt/<ref id="dirent.h" name="dirent.h">/
-<tag/Declaration/<tt/int _DE_ISLNK(unsigned char type);/
-<tag/Description/The function is called with the type of a directory entry
-taken from a <tt/struct dirent/ and returns true if the entry designates
-a link.
-<tag/Notes/<itemize>
-<item>The function is actually a macro.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="_DE_ISDIR" name="_DE_ISDIR">,
-<ref id="_DE_ISLBL" name="_DE_ISLBL">,
-<ref id="_DE_ISREG" name="_DE_ISREG">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>_DE_ISREG<label id="_DE_ISREG"><p>
-
-<quote>
-<descrip>
-<tag/Function/Determine if a directory entry specifies a regular file.
-<tag/Header/<tt/<ref id="dirent.h" name="dirent.h">/
-<tag/Declaration/<tt/int _DE_ISREG(unsigned char type);/
-<tag/Description/The function is called with the type of a directory entry
-taken from a <tt/struct dirent/ and returns true if the entry designates
-a regular file.
-<tag/Notes/<itemize>
-<item>The function is actually a macro.
-<item>A "regular file" means anything with data in it. This might still mean
-that special processing is needed, when accessing the file. Relative files of
-the CBM systems are classified as being "regular" files, for example.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="_DE_ISDIR" name="_DE_ISDIR">,
-<ref id="_DE_ISLBL" name="_DE_ISLBL">,
-<ref id="_DE_ISLNK" name="_DE_ISLNK">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>_heapadd<label id="_heapadd"><p>
-
-<quote>
-<descrip>
-<tag/Function/Add a block to the heap.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/void __fastcall__ _heapadd (void* mem, size_t size);/
-<tag/Description/The function adds a block of raw memory to the heap.
-<tag/Notes/<itemize>
-<item>The minimum blocksize that can be added is 6 bytes; the function will
-ignore smaller blocks.
-<item>The function is available only as a fastcall function; so, it may be used
-only in the presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="_heapblocksize" name="_heapblocksize">,
-<ref id="_heapmaxavail" name="_heapmaxavail">,
-<ref id="_heapmemavail" name="_heapmemavail">,
-<ref id="calloc" name="calloc">,
-<ref id="free" name="free">,
-<ref id="malloc" name="malloc">,
-<ref id="realloc" name="realloc">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>_heapblocksize<label id="_heapblocksize"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the size of an allocated block.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/size_t __fastcall__ _heapblocksize (const void* block);/
-<tag/Description/The function returns the size of a block that must have
-previously been allocated by <tt/<ref id="malloc" name="malloc">/, <tt/<ref
-id="calloc" name="calloc">/ or <tt/<ref id="realloc" name="realloc">/.
-<tag/Notes/<itemize>
-<item>Passing a pointer to a block that was is not the result of one of the
-allocation functions, or that has been free'd will give unpredicable results.
-<item>The function is available only as a fastcall function; so, it may be used
-only in the presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="_heapadd" name="_heapadd">,
-<ref id="_heapmaxavail" name="_heapmaxavail">,
-<ref id="_heapmemavail" name="_heapmemavail">,
-<ref id="calloc" name="calloc">,
-<ref id="free" name="free">,
-<ref id="malloc" name="malloc">,
-<ref id="realloc" name="realloc">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>_heapmaxavail<label id="_heapmaxavail"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the largest block that is available on the heap.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/size_t _heapmaxavail (void);/
-<tag/Description/The function returns the size of the largest block that may
-be allocated from the heap using <tt/<ref id="malloc" name="malloc">/.
-<tag/Availability/cc65
-<tag/See also/
-<ref id="_heapadd" name="_heapadd">,
-<ref id="_heapblocksize" name="_heapblocksize">,
-<ref id="_heapmemavail" name="_heapmemavail">,
-<ref id="calloc" name="calloc">,
-<ref id="free" name="free">,
-<ref id="malloc" name="malloc">,
-<ref id="realloc" name="realloc">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>_heapmemavail<label id="_heapmemavail"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the total available space on the heap.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/size_t _heapmemavail (void);/
-<tag/Description/The function returns the total number of bytes available on
-the heap.
-<tag/Notes/<itemize>
-<item>This function is of less use than usually assumed, since the returned
-heap space may be available but not in one block. So even if this function
-says that several times more heap space is available than needed, <ref
-id="malloc" name="malloc"> may still return <tt/NULL/.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="_heapadd" name="_heapadd">,
-<ref id="_heapblocksize" name="_heapblocksize">,
-<ref id="_heapmaxavail" name="_heapmaxavail">,
-<ref id="calloc" name="calloc">,
-<ref id="free" name="free">,
-<ref id="malloc" name="malloc">,
-<ref id="realloc" name="realloc">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>_poserror<label id="_poserror"><p>
-
-<quote>
-<descrip>
-<tag/Function/Print an error message for the error in <tt/_oserror/.
-<tag/Header/<tt/<ref id="stdio.h" name="stdio.h">/
-<tag/Declaration/<tt/void __fastcall__ _poserror (const char* msg);/
-<tag/Description/<tt/_poserror/ prints an error message to <tt/stderr/. If
-<tt/msg/ is not <tt/NULL/ and not an empty string, it is printed followed by
-a colon and a blank. Then the error message for the current contents of
-<tt/_oserror/ are printed followed by a newline. The message output is the
-same as returned by <tt/<ref id="_stroserror" name="_stroserror">/ with an
-argument of <tt/_oserror/.
-<tag/Notes/<itemize>
-<item>Since operating system specific error code are - you guessed it -
-operating system specific, the value in <tt/_oserror/ and the message that is
-printed depends on the cc65 target.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="_stroserror" name="_stroserror">,
-<ref id="perror" name="perror">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>_randomize<label id="_randomize"><p>
-
-<quote>
-<descrip>
-<tag/Function/Initialize the pseudo random number generator.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/void _randomize (void);/
-<tag/Description/The function initializes the random number generator with
-a seed derived from fast changing hardware events, so the seed itself can be
-considered random to a certain degree.
-<tag/Notes/<itemize>
-<item>The randomness of the seed depends on the machine hardware.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="rand" name="rand">,
-<ref id="srand" name="srand">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>_stroserror<label id="_stroserror"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return a string describing an OS specific error code.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/const char* __fastcall__ _stroserror (unsigned char errcode);/
-<tag/Description/<tt/_stroserror/ will return a string describing the given
-operating system specific error code.
-<tag/Notes/<itemize>
-<item>Since operating system specific error code are - you guessed it -
-operating system specific, the parameter and the string returned depend on the
-cc65 target.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="strerror" name="strerror">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>_swap<label id="_swap"><p>
-
-<quote>
-<descrip>
-<tag/Function/Swap the contents of memory areas.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/void __fastcall__ _swap (void* p, void* q, size_t size);/
-<tag/Description/<tt/_swap/ will swap (exchange) the contents of the two memory
-areas pointed to by <tt/p/ and <tt/q/. Both memory areas are assumed to be
-<tt/size/ bytes in size.
-<tag/Notes/<itemize>
-<item>The memory areas may not overlap, otherwise the results are undefined.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="memcpy" name="memcpy">,
-<ref id="memmove" name="memmove">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>_sys<label id="_sys"><p>
-
-<quote>
-<descrip>
-<tag/Function/Call a subroutine passing register values.
-<tag/Header/<tt/<ref id="6502.h" name="6502.h">/
-<tag/Declaration/<tt/void __fastcall__ _sys (struct regs* r);/
-<tag/Description/The function will call the subroutine at the address
-specified in the <tt/pc/ member of the passed <tt/regs/ structure. All
-registers and the CPU flags are set to the values given in the <tt/regs/
-structure. On return from the subroutine, the new values of the registers and
-flags are stored back overwriting the old values.
-<tag/Notes/<itemize>
-<item>Bits 4 and 5 of the flags value in the <tt/regs/ structure are ignored
-when calling the subroutine (they are unchanged from their current values).
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>BRK<label id="BRK"><p>
-
-<quote>
-<descrip>
-<tag/Function/Insert a 6502 BRK instrunction into the code.
-<tag/Header/<tt/<ref id="6502.h" name="6502.h">/
-<tag/Declaration/<tt/void BRK (void);/
-<tag/Description/The function will insert a 6502 BRK instruction into the code
-which may be used to trigger a debugger.
-<tag/Notes/<itemize>
-<item>The function is actually a macro.
-<item>The inserted instruction may lead to unexpected results if no debugger
-is present.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="CLI" name="CLI">,
-<ref id="SEI" name="SEI">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>CLI<label id="CLI"><p>
-
-<quote>
-<descrip>
-<tag/Function/Insert a 6502 CLI instrunction into the code.
-<tag/Header/<tt/<ref id="6502.h" name="6502.h">/
-<tag/Declaration/<tt/void CLI (void);/
-<tag/Description/The function will insert a 6502 CLI instruction into the code,
-so interrupts are enabled. Enabling interrupts has no effects if they are
-already enabled (the default).
-<tag/Notes/<itemize>
-<item>The function is actually a macro.
-<item>Disabling interrupts may lead to unexpected results.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="BRK" name="BRK">,
-<ref id="SEI" name="SEI">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>PEEK<label id="PEEK"><p>
-
-<quote>
-<descrip>
-<tag/Function/Read a byte from memory.
-<tag/Header/<tt/<ref id="peekpoke.h" name="peekpoke.h">/
-<tag/Declaration/<tt/unsigned char PEEK (unsigned addr);/
-<tag/Description/The function will read the absolute memory given by <tt/addr/
-and return the value read.
-<tag/Notes/<itemize>
-<item>The function is actually a macro.
-<item>This function depends highly on the platform and environment.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="PEEKW" name="PEEKW">,
-<ref id="POKE" name="POKE">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>PEEKW<label id="PEEKW"><p>
-
-<quote>
-<descrip>
-<tag/Function/Read a word (two bytes) from memory.
-<tag/Header/<tt/<ref id="peekpoke.h" name="peekpoke.h">/
-<tag/Declaration/<tt/unsigned PEEKW (unsigned addr);/
-<tag/Description/The function will read the absolute memory given by <tt/addr/
-and return the value read. The byte read from the higher address is the high
-byte of the return value.
-<tag/Notes/<itemize>
-<item>The function is actually a macro.
-<item>This function depends highly on the platform and environment.
-<item>The order in which the two bytes are read is unspecified and may
-depend of the address expression used.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="PEEK" name="PEEK">,
-<ref id="POKE" name="POKE">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>POKE<label id="POKE"><p>
-
-<quote>
-<descrip>
-<tag/Function/Write a byte to memory.
-<tag/Header/<tt/<ref id="peekpoke.h" name="peekpoke.h">/
-<tag/Declaration/<tt/void POKE (unsigned addr, unsigned char val);/
-<tag/Description/The function writes the value <tt/val/ to the absolute
-memory address given by <tt/addr/.
-<tag/Notes/<itemize>
-<item>The function is actually a macro.
-<item>This function depends highly on the platform and environment.
-<item>Careless use will cause the program to act strange or may crash the
-machine.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="PEEK" name="PEEK">,
-<ref id="POKEW" name="POKEW">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>POKEW<label id="POKEW"><p>
-
-<quote>
-<descrip>
-<tag/Function/Write a word (two bytes) to memory.
-<tag/Header/<tt/<ref id="peekpoke.h" name="peekpoke.h">/
-<tag/Declaration/<tt/void POKEW (unsigned addr, unsigned val);/
-<tag/Description/The function writes the value <tt/val/ to the absolute
-memory address given by <tt/addr/. The low byte of <tt/val/ is written to
-the <tt/addr/, the high byte is written to <tt/addr+1/.
-<tag/Notes/<itemize>
-<item>The function is actually a macro.
-<item>This function depends highly on the platform and environment.
-<item>Careless use will cause the program to act strange or may crash the
-machine.
-<item>The order in which the two bytes are written is unspecified and may
-depend of the address expression used.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="PEEK" name="PEEK">,
-<ref id="POKE" name="POKE">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>SEI<label id="SEI"><p>
-
-<quote>
-<descrip>
-<tag/Function/Insert a 6502 SEI instrunction into the code.
-<tag/Header/<tt/<ref id="6502.h" name="6502.h">/
-<tag/Declaration/<tt/void SEI (void);/
-<tag/Description/The function will insert a 6502 SEI instruction into the code,
-so interrupts are disabled. Note that non maskable interrupts cannot be
-disabled.
-<tag/Notes/<itemize>
-<item>The function is actually a macro.
-<item>Disabling interrupts may lead to unexpected results.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="BRK" name="BRK">,
-<ref id="CLI" name="CLI">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>abort<label id="abort"><p>
-
-<quote>
-<descrip>
-<tag/Function/Terminates a program abnormally.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/void abort (void);/
-<tag/Description/<tt/abort/ raises <tt/SIGABRT/, writes a termination message
-on stderr, then terminates the program with an exit code of 3.
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="assert" name="assert">,
-<ref id="exit" name="exit">,
-<ref id="raise" name="raise">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>abs<label id="abs"><p>
-
-<quote>
-<descrip>
-<tag/Function/Returns the absolute value of an integer.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/int __fastcall__ abs (int v);/
-<tag/Description/<tt/abs/ returns the absolute value of the argument passed to
-the function.
-<tag/Notes/<itemize>
-<item>The return value is undefined if <tt/INT_MIN/ is passed to the function.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="labs" name="labs">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>assert<label id="assert"><p>
-
-<quote>
-<descrip>
-<tag/Function/Test a condition and possibly abort.
-<tag/Header/<tt/<ref id="assert.h" name="assert.h">/
-<tag/Declaration/<tt/void assert (int cond);/
-<tag/Description/<tt/assert/ is a macro that expands to a <tt/id/
-statement. If the condition evaluates t zero (false), assert prints a message
-on stderr and aborts the program.
-<tag/Notes/<itemize>
-<item>The function is actually a macro.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="abort" name="abort">,
-<ref id="exit" name="exit">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>atexit<label id="atexit"><p>
-
-<quote>
-<descrip>
-<tag/Function/Register an exit function.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/int __fastcall__ atexit (void (*exitfunc) (void));/
-<tag/Description/<tt/atexit/ registers the function pointed to by
-<tt/exitfunc/ as an exit function. Exit functions are called when the program
-terminates, they are called in LIFO order (the last function registered is
-called first). <tt/atexit/ returns zero on success and a nonzero value on
-failure.
-<tag/Notes/<itemize>
-<item>A maximum of 5 exit functions can be registered.
-<item>There is no way to unregister an exit function.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="abort" name="abort">,
-<ref id="exit" name="exit">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>atmos_load<label id="atmos_load"><p>
-
-<quote>
-<descrip>
-<tag/Function/Load Atmos tape.
-<tag/Header/<tt/<ref id="atmos.h" name="atmos.h">/
-<tag/Declaration/<tt/void __fastcall__ atmos_load(const char* name);/
-<tag/Description/<tt/atmos_load/ reads a memory block from tape.
-<tag/Notes/<itemize>
-<item>The function is available only as a fastcall function; so, it may be used
-only in the presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="atmos_save" name="atmos_save">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>atmos_save<label id="atmos_save"><p>
-
-<quote>
-<descrip>
-<tag/Function/Save Atmos tape.
-<tag/Header/<tt/<ref id="atmos.h" name="atmos.h">/
-<tag/Declaration/<tt/void __fastcall__ atmos_save(const char* name, const void* start, const void* end);/
-<tag/Description/<tt/atmos_save/ writes a memory block to tape.
-<tag/Notes/<itemize>
-<item>The function is available only as a fastcall function; so, it may be used
-only in the presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="atmos_load" name="atmos_load">
-<tag/Example/<verb>
-atmos_save("hires", 0xa000, 0xc000);
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>atoi<label id="atoi"><p>
-
-<quote>
-<descrip>
-<tag/Function/Convert a string to an integer.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/int __fastcall__ atoi (const char* s);/
-<tag/Description/<tt/atoi/ converts the given string into an integer.
-Conversion stops as soon as any invalid character is encountered.
-<tag/Notes/<itemize>
-<item>There is no way to detect any conversion errors.
-<item>The function does not check for an numerical overflow when converting.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="atol" name="atol">,
-<ref id="itoa" name="itoa">,
-<ref id="ltoa" name="ltoa">,
-<ref id="ultoa" name="ultoa">,
-<ref id="utoa" name="utoa">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>atol<label id="atol"><p>
-
-<quote>
-<descrip>
-<tag/Function/Convert a string to a long integer.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/long __fastcall__ atol (const char* s);/
-<tag/Description/<tt/atol/ converts the given string into a long integer.
-Conversion stops as soon as any invalid character is encountered.
-<tag/Notes/<itemize>
-<item>There is no way to detect any conversion errors.
-<item>The function does not check for an numerical overflow when converting.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="atoi" name="atoi">,
-<ref id="itoa" name="itoa">,
-<ref id="ltoa" name="ltoa">,
-<ref id="ultoa" name="ultoa">,
-<ref id="utoa" name="utoa">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>bgcolor<label id="bgcolor"><p>
-
-<quote>
-<descrip>
-<tag/Function/Set the background text color.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ bgcolor (unsigned char color);/
-<tag/Description/The function will set a new background color and return the
-old (current) one. The background color is valid for the whole text output
-area of the screen, not just for new text.
-<tag/Notes/<itemize>
-<item>Background colors are system dependent. The function may have no effect
-on systems where the background color cannot be changed.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="bordercolor" name="bordercolor">,
-<ref id="textcolor" name="textcolor">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>bordercolor<label id="bordercolor"><p>
-
-<quote>
-<descrip>
-<tag/Function/Set the border (frame) color.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ bordercolor (unsigned char color);/
-<tag/Description/The function will set a new border color. It returns the old
-(current) border color.
-<tag/Notes/<itemize>
-<item>Border colors are system dependent. The function may have no effect
-on systems where the border color cannot be changed.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="bgcolor" name="bgcolor">,
-<ref id="textcolor" name="textcolor">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>bsearch<label id="bsearch"><p>
-
-<quote>
-<descrip>
-<tag/Function/Do a binary search in a sorted array.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/void* __fastcall__ bsearch (const void* key,
-const void* base, size_t n, size_t size,
-int __fastcall__ (* cmp) (const void*, const void*));/
-<tag/Description/<tt/bsearch/ searches a sorted array for a member that
-matches the one pointed to by <tt/key/. <tt/base/ is the address of the array,
-<tt/n/ is the number of elements, <tt/size/ the size of an element and <tt/cmp/
-the function used to compare the members against the key. The function returns
-a pointer to the member found, or <tt/NULL/ if there was no match.
-<tag/Notes/<itemize>
-<item>The contents of the array must be sorted in ascending order according to
-the compare function given.
-<item>If there are multiple members that match the key, the function will
-return one of the members.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>The function to which <tt/cmp/ points must have the <tt/fastcall/ calling
-convention.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="qsort" name="qsort">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>bzero<label id="bzero"><p>
-
-<quote>
-<descrip>
-<tag/Function/Fill a memory area with zeroes.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/void __fastcall__ bzero (void* p, size_t count);/
-<tag/Description/<tt/bzero/ fills the memory area pointed to by <tt/p/ with
-zero.
-<tag/Notes/<itemize>
-<item>The function is non standard and therefore only available in non ANSI
-mode. You should use <tt/<ref id="memset" name="memset">/ instead.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="_swap" name="_swap">,
-<ref id="memcpy" name="memcpy">,
-<ref id="memmove" name="memmove">,
-<ref id="memset" name="memset">,
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>c64mode<label id="c64mode"><p>
-
-<quote>
-<descrip>
-<tag/Function/Switch the C128 into C64 compatible mode.
-<tag/Header/<tt/<ref id="c128.h" name="c128.h">/
-<tag/Declaration/<tt/void c64mode (void);/
-<tag/Description/The function will cause the machine to reboot into C64 mode.
-<tag/Notes/<itemize>
-<item>The function is specific to the C128.
-<item>The function will not return to the caller.
-</itemize>
-<tag/Availability/C128
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>calloc<label id="calloc"><p>
-
-<quote>
-<descrip>
-<tag/Function/Allocate and clear memory.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/void* __fastcall__ calloc (size_t n, size_t size);/
-<tag/Description/<tt/calloc/ allocates memory for an array of <tt/n/ elements
-of size <tt/size/, clears the whole block with binary zeroes and returns a
-pointer to it. On error (not enough memory available), <tt/calloc/ returns
-<tt/NULL/.
-<tag/Notes/<itemize>
-<item>Clearing the memory may not have the expected effect on all platforms:
-pointers in the block may not be <tt/NULL/ and floating point variables may
-not be zero (0.0). In other words: The "clearing" effect of this function
-should be used with care for portable programs.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="_heapadd" name="_heapadd">,
-<ref id="_heapblocksize" name="_heapblocksize">,
-<ref id="_heapmaxavail" name="_heapmaxavail">,
-<ref id="_heapmemavail" name="_heapmemavail">,
-<ref id="free" name="free">,
-<ref id="malloc" name="malloc">,
-<ref id="realloc" name="realloc">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_acptr<label id="cbm_k_acptr"><p>
-
-<quote>
-<descrip>
-<tag/Function/Input byte from serial bus
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/unsigned char cbm_k_acptr (void);/
-<tag/Description/The function returns a byte of data, which it
-gets from the current TALKer on the serial bus.
-In order to receive the data, the device must have previously been
-sent a command to TALK and a secondary address if it needs one.
-<tag/Notes/<itemize>
-<item>
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cbm_k_talk" name="cbm_k_talk">,
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_basin<label id="cbm_k_basin"><p>
-
-<quote>
-<descrip>
-<tag/Function/Input a Character from the Current Device
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/unsigned char cbm_k_basin (void);/
-<tag/Description/The function returns a character from the current input device.
-Device must first have been OPENed and then designated as the input channel by the CHKIN routine.
-When this function is called, the next byte of data available from the device is returned.
-Exception is the routine for the keyboard device (which is the default input device).
-<tag/Notes/<itemize>
-<item>
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cbm_k_open" name="cbm_k_open">,
-<ref id="cbm_k_chkin" name="cbm_k_chkin">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_bsout<label id="cbm_k_bsout"><p>
-
-<quote>
-<descrip>
-<tag/Function/Output a byte
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/void __fastcall__ cbm_k_bsout (unsigned char C);/
-<tag/Description/Function sends the character to the current output device.
-Unless a device has been OPENed and designated as the
-current output channel using the CHKOUT routine, the character is
-printed to the screen, which is the default output device.  If the
-cassette is the current device, outputting a byte will only add it to
-the buffer. No actual transmission of data will occur until the
-192-byte buffer is full.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may
-only be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cbm_k_open" name="cbm_k_open">,
-<ref id="cbm_k_chkin" name="cbm_k_chkout">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_chkin<label id="cbm_k_chkin"><p>
-
-<quote>
-<descrip>
-<tag/Function/Designate a Logical File As the Current Input Channel
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ cbm_k_chkin (unsigned char FN);/
-<tag/Description/If you wish to
-get data from any device other than the keyboard, this function must be
-called after OPENing the device, before you can get a data byte with
-the cbm_k_basin or cbm_k_getin routine.  When called, the routine will designate
-the logical file whose file number was supplied as the
-current file, its device as the current device, and its secondary
-address as the current secondary address.  If the device on the
-channel is a serial device, which requires a TALK command and
-sometimes a secondary address, function will send them over the
-serial bus.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may
-only be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cbm_k_open" name="cbm_k_open">,
-<ref id="cbm_k_basin" name="cbm_k_basin">,
-<ref id="cbm_k_getin" name="cbm_k_getin">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_ciout<label id="cbm_k_ciout"><p>
-
-<quote>
-<descrip>
-<tag/Function/Transmit a byte over the serial bus
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/void __fastcall__ cbm_k_ciout (unsigned char C);/
-<tag/Description/Purpose of this function is to send a byte of data over
-the serial bus.  In order for the data to be received, the serial
-device must have first been commanded to LISTEN and been given a
-secondary address if necessary.  This routine always buffers the
-current character, and defers sending it until the next byte is
-buffered.  When the UNLISTEN command is sent, the last byte will be
-sent with an End or Identify (EOI).
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may
-only be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cbm_k_listen" name="cbm_k_listen">,
-<ref id="cbm_k_unlsn" name="cbm_k_unlsn">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_ckout<label id="cbm_k_ckout"><p>
-
-<quote>
-<descrip>
-<tag/Function/Designate a Logical File As the Current Output Channel
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ cbm_k_ckout (unsigned char FN);/
-<tag/Description/If you wish to
-output data to any device other than the screen, this routine must be
-called after OPENing the device, and before you output a data byte
-with the cbm_k_bsout() function.  When called, the function will designate the
-logical file whose file number was supplied as the current
-file, its device as the current device, and its secondary address as
-the current secondary address.  If the device on the channel uses the
-serial bus, and therefore requires a LISTEN command and possibly a
-secondary address, this information will be sent on the bus.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may
-only be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cbm_k_bsout" name="cbm_k_bsout">,
-<ref id="cbm_k_listen" name="cbm_k_listen">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_clall<label id="cbm_k_clall"><p>
-
-<quote>
-<descrip>
-<tag/Function/Close All Logical I/O Files
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/void cbm_k_clall (void);/
-<tag/Description/It closes all
-open files, by resetting the index into open files to
-zero and restores the default I/O devices.
-<tag/Notes/<itemize>
-<item>
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cbm_k_open" name="cbm_k_open">,
-<ref id="cbm_k_close" name="cbm_k_close">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_close<label id="cbm_k_close"><p>
-
-<quote>
-<descrip>
-<tag/Function/Close a Logical I/O File
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/void __fastcall__ cbm_k_close (unsigned char FN);/
-<tag/Description/It is used to
-close a logical file after all I/O operations involving that file have
-been completed.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may
-only be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cbm_k_open" name="cbm_k_open">,
-<ref id="cbm_k_clall" name="cbm_k_clall">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_clrch<label id="cbm_k_clrch"><p>
-
-<quote>
-<descrip>
-<tag/Function/Restore Current Input and Output Devices to the Default Devices
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/void cbm_k_clrch (void);/
-<tag/Description/It sets the
-current input device to the keyboard, and the current output device to
-the screen.  Also, if the current input device was formerly a serial
-device, the routine sends it an UNTALK command on the serial bus, and
-if a serial device was formerly the current output device, the routine
-sends it an UNLISTEN command.
-<tag/Notes/<itemize>
-<item>
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cbm_k_chkin" name="cbm_k_chkin">,
-<ref id="cbm_k_ckout" name="cbm_k_ckout">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_getin<label id="cbm_k_getin"><p>
-
-<quote>
-<descrip>
-<tag/Function/Get One Byte from the Input Device
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/unsigned char cbm_k_getin (void);/
-<tag/Description/Function gets a character from the current input device.
-<tag/Notes/<itemize>
-<item>
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cbm_k_basin" name="cbm_k_basin">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_iobase<label id="cbm_k_iobase"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return Base Address of Memory-Mapped I/O Devices
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/unsigned cbm_k_iobase (void);/
-<tag/Description/This function returns the address of
-the memory section where the memory mapped I/O devices are located. This
-address can then be used with an offset to access the memory mapped I/O
-devices in the Commodore 64. The offset is the number of locations from
-the beginning of the page on which the I/O register you want is located.
-This function exists to provide compatibility between the Commodore 64,
-VIC-20, and future models of the Commodore 64. If the I/O locations for
-a program are set by a call to this function, they should
-still remain compatible with future versions of the Commodore 64, the
-KERNAL and BASIC.
-<tag/Notes/<itemize>
-<item>
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_listen<label id="cbm_k_listen"><p>
-
-<quote>
-<descrip>
-<tag/Function/Command a device on the serial bus to LISTEN
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/void __fastcall__ cbm_k_listen (unsigned char dev);/
-<tag/Description/This function will command a device on the serial bus to
-receive data. The KERNAL routine will OR the supplied device number bit by bit
-to convert it to a listen address, then transmits this data as a command on
-the serial bus. The specified device will then go into listen mode, and
-be ready to accept information.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may
-only be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cbm_k_unlsn" name="cbm_k_unlsn">,
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_load<label id="cbm_k_load"><p>
-
-<quote>
-<descrip>
-<tag/Function/Load RAM from a Device
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/unsigned int __fastcall__ cbm_k_load(unsigned char flag, unsigned addr);/
-<tag/Description/This function LOADs data bytes from any input device directly into the memory.
-It can also be used for a verify operation, comparing data from a device with the data already in
-memory, while leaving the data stored in RAM unchanged.
-The flag must be set to 0 for a LOAD operation, or 1 for a
-verify, If the input device is OPENed with a secondary address (SA) of 0
-the header information from the device is ignored. In this case, the starting address for the load must be supplied.
-If the device is addressed with a secondary address of 1, then the data is
-loaded into memory starting at the location specified by the header.
-Function returns the address of the highest RAM location loaded.
-Before this function can be called, the KERNAL SETLFS, and SETNAM
-routines must be called.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may
-only be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cbm_k_save" name="cbm_k_save">,
-<ref id="cbm_k_setlfs" name="cbm_k_setlfs">,
-<ref id="cbm_k_setnam" name="cbm_k_setnam">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_open<label id="cbm_k_open"><p>
-
-<quote>
-<descrip>
-<tag/Function/Open a Logical I/O File
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/unsigned char cbm_k_open (void);/
-<tag/Description/This function assigns a logical file to a device, so that it can be used for
-Input/Output operations. In order to specify the logical file number,
-the device number, and the secondary address if any, the cbm_k_setlfs() function must first be called.
-Likewise, in order to designate the filename, the cbm_k_setnam() function must be used first.  After these two
-functions are called, cbm_k_open() is then called.
-<tag/Notes/<itemize>
-<item>
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cbm_k_close" name="cbm_k_close">,
-<ref id="cbm_k_setlfs" name="cbm_k_setlfs">,
-<ref id="cbm_k_setnam" name="cbm_k_setnam">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_readst<label id="cbm_k_readst"><p>
-
-<quote>
-<descrip>
-<tag/Function/Read status word
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/unsigned char cbm_k_readst (void);/
-<tag/Description/This function returns the current status of the I/O devices. It is usually called after new communication to an I/O device and gives information about device status, or errors that have occurred during the I/O operation.
-<tag/Notes/<itemize>
-<item>
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_save<label id="cbm_k_save"><p>
-
-<quote>
-<descrip>
-<tag/Function/Save RAM to a Device
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ cbm_k_save(unsigned int start, unsigned int end)/
-<tag/Description/This function saves a section of memory. The cbm_k_setlfs() and cbm_k_setnam() functions must be
-used before calling this function. However, a file name is not required to
-SAVE to device 1 (the Datassette(TM) recorder). Any attempt to save to
-other devices without using a file name results in an error. NOTE: Device 0 (the keyboard), device 2 (RS-232), and device 3 (the screen) cannot be SAVEd to. If the attempt is made, an error occurs, and the SAVE is stopped.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may
-only be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cbm_k_load" name="cbm_k_load">,
-<ref id="cbm_k_setlfs" name="cbm_k_setlfs">,
-<ref id="cbm_k_setnam" name="cbm_k_setnam">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_setlfs<label id="cbm_k_setlfs"><p>
-
-<quote>
-<descrip>
-<tag/Function/Set up a logical file
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/void __fastcall__ cbm_k_setlfs (unsigned char LFN, unsigned char DEV, unsigned char SA);/
-<tag/Description/This functions sets up the logical file by setting its number, device address,
-and secondary address.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may
-only be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cbm_k_setnam" name="cbm_k_setnam">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_setnam<label id="cbm_k_setnam"><p>
-
-<quote>
-<descrip>
-<tag/Function/Set Filename Parameters
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/void __fastcall__ cbm_k_setnam (const char* Name);/
-<tag/Description/This function is used to set up the file name for the OPEN,
-SAVE, or LOAD operations.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may
-only be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cbm_k_open" name="cbm_k_open">,
-<ref id="cbm_k_load" name="cbm_k_load">,
-<ref id="cbm_k_save" name="cbm_k_save">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_talk<label id="cbm_k_talk"><p>
-
-<quote>
-<descrip>
-<tag/Function/Commands device to TALK
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/void __fastcall__ cbm_k_talk (unsigned char dev);/
-<tag/Description/When called, it ORs the device number with the TALK code (64, $40) and sends it on the serial
-bus. This commands the device to TALK.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may
-only be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cbm_k_acptr" name="cbm_k_acptr">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cbm_k_unlsn<label id="cbm_k_unlsn"><p>
-
-<quote>
-<descrip>
-<tag/Function/Send an UNLISTEN command
-<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/
-<tag/Declaration/<tt/void cbm_k_unlsn (void);/
-<tag/Description/This function commands all devices on the serial bus to
-stop receiving data from the host computer (i.e., UNLISTEN). Calling this
-function results in an UNLISTEN command being transmitted on the serial
-bus. Only devices previously commanded to LISTEN are affected. This
-function is normally used after the host computer is finished sending data
-to external devices. Sending the UNLISTEN commands the listening devices
-to get off the serial bus so it can be used for other purposes.
-<tag/Notes/<itemize>
-<item>
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cbm_k_listen" name="cbm_k_listen">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cclear<label id="cclear"><p>
-
-<quote>
-<descrip>
-<tag/Function/Clear part of a line (write a given number of spaces).
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/void __fastcall__ cclear (unsigned char length);/
-<tag/Description/The function clears part of a line by writing <tt/length/
-spaces in the current text color.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may
-only be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cclearxy" name="cclearxy">,
-<ref id="clrscr" name="clrscr">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cclearxy<label id="cclearxy"><p>
-
-<quote>
-<descrip>
-<tag/Function/Clear part of a line (write a given number of spaces) starting
-at a specific screen position.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/void __fastcall__ cclearxy (unsigned char x, unsigned char y, unsigned char length);/
-<tag/Description/The function moves the cursor to a specific position, and
-will then clear part of the line by writing <tt/length/ spaces in the current
-text color.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may
-only be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cclear" name="cclear">,
-<ref id="clrscr" name="clrscr">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cgetc<label id="cgetc"><p>
-
-<quote>
-<descrip>
-<tag/Function/Read a character from the keyboard.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/char cgetc (void);/
-<tag/Description/The function reads a character from the keyboard. If there is
-no character available, <tt/cgetc/ waits until the user presses a key. If the
-cursor is enabled by use of the <tt/cursor/ function, a blinking cursor is
-displayed while waiting.
-<tag/Notes/<itemize>
-<item>If the system supports a keyboard buffer, <tt/cgetc/ will fetch a key
-from this buffer and wait only if the buffer is empty.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cursor" name="cursor">,
-<ref id="kbhit" name="kbhit">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>chline<label id="chline"><p>
-
-<quote>
-<descrip>
-<tag/Function/Output a horizontal line in text mode.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/void __fastcall__ chline (unsigned char length);/
-<tag/Description/The function outputs a horizontal line with the given length
-starting at the current cursor position.
-<tag/Notes/<itemize>
-<item>The character used to draw the horizontal line is system dependent.
-If available, a line drawing character is used. Drawing a line that is partially
-off screen leads to undefined behaviour.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="chlinexy" name="chlinexy">,
-<ref id="cvline" name="cvline">,
-<ref id="cvlinexy" name="cvlinexy">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>chlinexy<label id="chlinexy"><p>
-
-<quote>
-<descrip>
-<tag/Function/Output a horizontal line at a given position in text mode.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/void __fastcall__ chlinexy (unsigned char x, unsigned char y, unsigned char length);/
-<tag/Description/The function outputs a horizontal line with the given length
-starting at a given position.
-<tag/Notes/<itemize>
-<item>The character used to draw the horizontal line is system dependent.
-If available, a line drawing character is used. Drawing a line that is partially
-off screen leads to undefined behaviour.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="chline" name="chline">,
-<ref id="cvline" name="cvline">,
-<ref id="cvlinexy" name="cvlinexy">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>clearerr<label id="clearerr"><p>
-
-<quote>
-<descrip>
-<tag/Function/Clear error and end-of-file status of a stream.
-<tag/Header/<tt/<ref id="stdio.h" name="stdio.h">/
-<tag/Declaration/<tt/void __fastcall__ clearerr (FILE* f);/
-<tag/Description/<tt/clearerr/ clears the error and end-of-file status
-indicators for the stream <tt/f/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="feof" name="feof">,
-<ref id="ferror" name="ferror">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>clock<label id="clock"><p>
-
-<quote>
-<descrip>
-<tag/Function/Determine the processor time used.
-<tag/Header/<tt/<ref id="time.h" name="time.h">/
-<tag/Declaration/<tt/clock_t clock (void);/
-<tag/Description/The <tt/clock/ function returns an approximaton of processor
-time used by the program. The time is returned in implementation defined
-units. It can be converted to seconds by dividing by the value of the macro
-<tt/CLOCKS_PER_SEC/.
-<tag/Notes/<itemize>
-<item>Since the machines, cc65 generated programs run on, cannot run multiple
-processes, the function will actually return the time since some
-implementation defined point in the past.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="time" name="time">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>clrscr<label id="clrscr"><p>
-
-<quote>
-<descrip>
-<tag/Function/Clear the text screen.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/void clrscr (void);/
-<tag/Description/The function clears the text screen and moves the cursor to
-the upper left corner.
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cclear" name="cclear">,
-<ref id="cclearxy" name="cclearxy">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>close<label id="close"><p>
-
-<quote>
-<descrip>
-<tag/Function/Close a file descriptor.
-<tag/Header/<tt/<ref id="fcntl.h" name="fcntl.h">/
-<tag/Declaration/<tt/int __fastcall__ close (int fd);/
-<tag/Description/The function closes the given file descriptor. It returns zero
-on success and -1 on error. If an error occurs, the cause can be determined by
-reading the <tt/errno/ variable.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/POSIX 1003.1
-<tag/See also/
-<ref id="creat" name="creat">,
-<ref id="open" name="open">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>closedir<label id="closedir"><p>
-
-<quote>
-<descrip>
-<tag/Function/Close a directory.
-<tag/Header/<tt/<ref id="dirent.h" name="dirent.h">/
-<tag/Declaration/<tt/int __fastcall__ closedir (DIR* dir);/
-<tag/Description/The function closes the given directory descriptor. It returns
-zero on success and -1 on error. If an error occurs, the cause can be determined
-by reading the <tt/errno/ variable.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/POSIX 1003.1
-<tag/See also/
-<ref id="opendir" name="opendir">,
-<ref id="readdir" name="readdir">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>creat<label id="creat"><p>
-
-<quote>
-<descrip>
-<tag/Function/Create a file.
-<tag/Header/<tt/<ref id="fcntl.h" name="fcntl.h">/
-<tag/Declaration/<tt/int __fastcall__ creat (const char* name, unsigned mode);/
-<tag/Description/<tt/creat/ creates a new file and returns the file descriptor
-associated with it. On error, -1 is returned and an error code is stored in
-<tt/errno/.
-<tag/Notes/<itemize>
-<item><tt/creat/ is identical to calling <tt/<ref id="open" name="open">/ with
-<tt/flags/ equal to <tt/O_WRONLY | O_CREAT | O_TRUNC/.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/POSIX 1003.1
-<tag/See also/
-<ref id="close" name="close">,
-<ref id="open" name="open">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cprintf<label id="cprintf"><p>
-
-<quote>
-<descrip>
-<tag/Function/Formatted output to the console.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/int cprintf (const char* format, ...);/
-<tag/Description/The arguments are converted to text where necessary and
-formatted according to the format string given. The resulting string is output
-to the console. <tt/cprintf/ supports the same format specifiers as
-<tt/printf/. <!-- <tt/<ref id="printf" name="printf">/. -->
-<tag/Notes/<itemize>
-<item>Like all other <tt/conio/ output functions, <tt/cprintf/ distinguishes
-between <tt/\r/ and <tt/\n/.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cputc" name="cputc">,
-<ref id="cputcxy" name="cputcxy">,
-<ref id="cputs" name="cputs">,
-<ref id="cputsxy" name="cputsxy">,
-<ref id="vcprintf" name="vcprintf">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cputc<label id="cputc"><p>
-
-<quote>
-<descrip>
-<tag/Function/Output a character directly to the console.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/void __fastcall__ cputc (char c);/
-<tag/Description/Output one character to the console at the current cursor
-position.
-<tag/Notes/<itemize>
-<item>Like all other <tt/conio/ output functions, <tt/cputc/ distinguishes
-between <tt/\r/ and <tt/\n/.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cprintf" name="cprintf">,
-<ref id="cputcxy" name="cputcxy">,
-<ref id="cputs" name="cputs">,
-<ref id="cputsxy" name="cputsxy">,
-<ref id="vcprintf" name="vcprintf">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cputcxy<label id="cputcxy"><p>
-
-<quote>
-<descrip>
-<tag/Function/Output a character at a specific screen position.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/void __fastcall__ cputcxy (unsigned char x, unsigned char y, char c);/
-<tag/Description/<tt/cputcxy/ moves the cursor to the given x/y position on
-the screen and outputs one character.
-<tag/Notes/<itemize>
-<item>Like all other <tt/conio/ output functions, <tt/cputcxy/ distinguishes
-between <tt/\r/ and <tt/\n/.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cprintf" name="cprintf">,
-<ref id="cputc" name="cputc">,
-<ref id="cputs" name="cputs">,
-<ref id="cputsxy" name="cputsxy">,
-<ref id="vcprintf" name="vcprintf">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cputs<label id="cputs"><p>
-
-<quote>
-<descrip>
-<tag/Function/Output a string directly to the console.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/void __fastcall__ cputs (const char* s);/
-<tag/Description/The function outputs the given string on the console at the
-current cursor position.
-<tag/Notes/<itemize>
-<item>Like all other <tt/conio/ output functions, <tt/cputs/ distinguishes
-between <tt/\r/ and <tt/\n/.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cprintf" name="cprintf">,
-<ref id="cputc" name="cputc">,
-<ref id="cputcxy" name="cputcxy">,
-<ref id="cputsxy" name="cputsxy">,
-<ref id="vcprintf" name="vcprintf">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cputsxy<label id="cputsxy"><p>
-
-<quote>
-<descrip>
-<tag/Function/Output a string to the console at a given position.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/void __fastcall__ cputsxy (unsigned char x, unsigned char y, const char* s);/
-<tag/Description/<tt/cputsxy/ moves the cursor to the given x/y position,
-and outputs the string <tt/s/.
-<tag/Notes/<itemize>
-<item>Like all other <tt/conio/ output functions, <tt/cputsxy/ distinguishes
-between <tt/\r/ and <tt/\n/.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cprintf" name="cprintf">,
-<ref id="cputc" name="cputc">,
-<ref id="cputcxy" name="cputcxy">,
-<ref id="cputs" name="cputs">,
-<ref id="vcprintf" name="vcprintf">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cursor<label id="cursor"><p>
-
-<quote>
-<descrip>
-<tag/Function/Enable/disable a blinking cursor when waiting for keyboard input.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ cursor (unsigned char onoff);/
-<tag/Description/If the argument to the function is non zero, a blinking cursor
-will be enabled when the <tt/cgetc/ function waits for input from the keyboard.
-If the argument is zero, <tt/cgetc/ will wait without a blinking cursor.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cgetc" name="cgetc">,
-<ref id="kbhit" name="kbhit">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cvline<label id="cvline"><p>
-
-<quote>
-<descrip>
-<tag/Function/Output a vertical line in text mode.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/void __fastcall__ cvline (unsigned char length);/
-<tag/Description/The function outputs a vertical line with the given length
-starting at the current cursor position.
-<tag/Notes/<itemize>
-<item>The character used to draw the vertical line is system dependent.
-If available, a line drawing character is used. Drawing a line that is partially
-off screen leads to undefined behaviour.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="chline" name="chline">,
-<ref id="chlinexy" name="chlinexy">,
-<ref id="cvlinexy" name="cvlinexy">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>cvlinexy<label id="cvlinexy"><p>
-
-<quote>
-<descrip>
-<tag/Function/Output a vertical line at a given position in text mode.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/void __fastcall__ cvlinexy (unsigned char x, unsigned char y, unsigned char length);/
-<tag/Description/The function outputs a vertical line with the given length
-starting at a given position.
-<tag/Notes/<itemize>
-<item>The character used to draw the vertical line is system dependent.
-If available, a line drawing character is used. Drawing a line that is partially
-off screen leads to undefined behaviour.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="chline" name="chline">,
-<ref id="chlinexy" name="chlinexy">,
-<ref id="cvline" name="cvline">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>div<label id="div"><p>
-
-<quote>
-<descrip>
-<tag/Function/Divide two ints and return quotient and remainder.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/div_t __fastcall__ div (int numer, int denom);/
-<tag/Description/<tt/div/ divides <tt/numer/ by <tt/denom/ and returns the
-quotient and remainder in a <tt/div_t/ structure.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-ldiv
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>em_commit<label id="em_commit"><p>
-
-<quote>
-<descrip>
-<tag/Function/Commit changes into extended memory.
-<tag/Header/<tt/<ref id="em.h" name="em.h">/
-<tag/Declaration/<tt/void em_commit (void);/
-<tag/Description/Commit changes in the memory window to extended storage. If
-the contents of the memory window have been changed, these changes may be lost
-if <tt/<ref id="em_map" name="em_map">/, <tt/<ref id="em_use" name="em_use">/,
-<tt/<ref id="em_copyfrom" name="em_copyfrom">/ or <tt/<ref id="em_copyto"
-name="em_copyto">/ are called without calling <tt/em_commit/ first.
-<tag/Notes/<itemize>
-<item>Calling <tt/em_commit/ does not necessarily mean that changes to the
-memory window are discarded, it does just mean that the drivers is allowed
-to discard it.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-<item>The function produces undefined results if no extended memory driver is
-loaded.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="em_load_driver" name="em_load_driver">,
-<ref id="em_map" name="em_map">,
-<ref id="em_use" name="em_use">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>em_copyfrom<label id="em_copyfrom"><p>
-
-<quote>
-<descrip>
-<tag/Function/Copy from extended into normal memory.
-<tag/Header/<tt/<ref id="em.h" name="em.h">/
-<tag/Declaration/<tt/void __fastcall__ em_copyfrom (const struct em_copy* copy_data);/
-<tag/Description/Copy data from extended memory into linear memory. Source and
-target addresses as well as the number of bytes to transfer are specified in
-the <tt/em_copy/ structure that is passed as a parameter.
-<tag/Notes/<itemize>
-<item>Calling <tt/em_copyfrom/ will invalidate the memory window, so if you
-made any changes to the data in the window, call <tt/<ref id="em_commit"
-name="em_commit">/ first, or the changes are lost.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-<item>The function produces undefined results if no extended memory driver is
-loaded.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="em_commit" name="em_commit">,
-<ref id="em_copyto" name="em_copyto">,
-<ref id="em_load_driver" name="em_load_driver">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>em_copyto<label id="em_copyto"><p>
-
-<quote>
-<descrip>
-<tag/Function/Copy from normal into extended memory.
-<tag/Header/<tt/<ref id="em.h" name="em.h">/
-<tag/Declaration/<tt/void __fastcall__ em_copyto (const struct em_copy* copy_data);/
-<tag/Description/Copy data from linear into extended memory. Source and
-target addresses as well as the number of bytes to transfer are specified in
-the <tt/em_copy/ structure that is passed as a parameter.
-<tag/Notes/<itemize>
-<item>Calling <tt/em_copyto/ will invalidate the memory window, so if you
-made any changes to the data in the window, call <tt/<ref id="em_commit"
-name="em_commit">/ first, or the changes are lost.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-<item>The function produces undefined results if no extended memory driver is
-loaded.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="em_commit" name="em_commit">,
-<ref id="em_copyfrom" name="em_copyfrom">,
-<ref id="em_load_driver" name="em_load_driver">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>em_install<label id="em_install"><p>
-
-<quote>
-<descrip>
-<tag/Function/Install an already loaded extended memory driver.
-<tag/Header/<tt/<ref id="em.h" name="em.h">/
-<tag/Declaration/<tt/unsigned char _fastcall__ em_install (void* driver);/
-<tag/Description/The function installs an already loaded extended memory driver
-and returns an error code. The function may be used to install a driver linked
-statically to the program.
-<tag/Notes/<itemize>
-<item>Not all drivers are able to detect if the supported hardware is really
-present.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="em_load_driver" name="em_load_driver">,
-<ref id="em_uninstall" name="em_uninstall">,
-<ref id="em_unload" name="em_unload">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>em_load_driver<label id="em_load_driver"><p>
-
-<quote>
-<descrip>
-<tag/Function/Load and initialize an extended memory driver.
-<tag/Header/<tt/<ref id="em.h" name="em.h">/
-<tag/Declaration/<tt/void __fastcall__ em_load_driver (const char* name);/
-<tag/Description/Load an extended memory driver into memory and initialize
-it. The function returns an error code that tells if all this has been
-successful.
-<tag/Notes/<itemize>
-<item>Not all drivers are able to detect if the supported hardware is really
-present.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-<item>The driver is loaded by name, so currently you must know the type of
-extended memory that should be supported. There is no autodetect capability.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="em_unload" name="em_unload">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>em_map<label id="em_map"><p>
-
-<quote>
-<descrip>
-<tag/Function/Make a page of extended memory accessible.
-<tag/Header/<tt/<ref id="em.h" name="em.h">/
-<tag/Declaration/<tt/void* __fastcall__ em_map (unsigned page);/
-<tag/Description/The function maps one page of extended memory into linear
-memory and returns a pointer to the page frame. Depending on the hardware
-and driver, the data is either mapped into the address space or transfered
-into a buffer. If you don't need the actual contents of the page (for example
-because you're going to overwrite it completely), it is better to call
-<tt/<ref id="em_use" name="em_use">/ instead. <tt/em_use/ will not transfer the
-data if it is possible to avoid that.
-<tag/Notes/<itemize>
-<item>Calling <tt/em_map/ will invalidate the memory window, so if you
-made any changes to the data in the window, call <tt/<ref id="em_commit"
-name="em_commit">/ first, or the changes are lost.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-<item>The function produces undefined results if no extended memory driver is
-loaded.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="em_commit" name="em_commit">,
-<ref id="em_load_driver" name="em_load_driver">,
-<ref id="em_use" name="em_use">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>em_pagecount<label id="em_pagecount"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the number of available extended memory pages.
-<tag/Header/<tt/<ref id="em.h" name="em.h">/
-<tag/Declaration/<tt/unsigned em_pagecount (void);/
-<tag/Description/The function returns the size of the extended memory supported
-by the driver in 256 byte pages.
-<tag/Notes/<itemize>
-<item>The function returns zero if no extended memory driver is loaded.
-<item>The function may return zero if the supported hardware was not detected.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="em_load_driver" name="em_load_driver">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>em_uninstall<label id="em_uninstall"><p>
-
-<quote>
-<descrip>
-<tag/Function/Uninstall an already loaded extended memory driver.
-<tag/Header/<tt/<ref id="em.h" name="em.h">/
-<tag/Declaration/<tt/unsigned char em_uninstall (void);/
-<tag/Description/The function uninstalls an already loaded extended memory
-driver but doesn't remove it from memory.
-<tag/Notes/<itemize>
-<item>If the driver has been loaded using <tt/<ref id="em_load_driver"
-name="em_load_driver">/, <tt/<ref id="em_unload" name="em_unload">/
-should be used instead of <tt/em_uninstall/ so the driver is also removed
-from memory.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="em_install" name="em_install">,
-<ref id="em_load_driver" name="em_load_driver">,
-<ref id="em_unload" name="em_unload">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>em_unload<label id="em_unload"><p>
-
-<quote>
-<descrip>
-<tag/Function/Unload an extended memory driver.
-<tag/Header/<tt/<ref id="em.h" name="em.h">/
-<tag/Declaration/<tt/unsigned char em_unload (void);/
-<tag/Description/The function unloads a loaded extended memory driver and
-frees all memory allocated for the driver.
-<tag/Notes/<itemize>
-<item>The function does nothing if no driver is loaded.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="em_load_driver" name="em_load_driver">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>em_use<label id="em_use"><p>
-
-<quote>
-<descrip>
-<tag/Function/Prepare an extended memory page for use.
-<tag/Header/<tt/<ref id="em.h" name="em.h">/
-<tag/Declaration/<tt/void* __fastcall__ em_use (unsigned page);/
-<tag/Description/The function maps one page of extended memory into linear
-memory and returns a pointer to the page frame. This function is similar to
-<tt/<ref id="em_map" name="em_map">/, but will not transfer data into the
-actual memory window in the assumption that the existing data is wrong or
-will get overwritten.
-<tag/Notes/<itemize>
-<item>Calling <tt/em_use/ will invalidate the memory window, so if you
-made any changes to the data in the window, call <tt/<ref id="em_commit"
-name="em_commit">/ first, or the changes are lost.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-<item>The function produces undefined results if no extended memory driver is
-loaded.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="em_commit" name="em_commit">,
-<ref id="em_load_driver" name="em_load_driver">,
-<ref id="em_map" name="em_map">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>exit<label id="exit"><p>
-
-<quote>
-<descrip>
-<tag/Function/Terminate the program.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/void __fastcall__ exit (int status);/
-<tag/Description/<tt/exit/ terminates the program. The argument specifies the
-return code of the program. Before termination, all files are closed, buffered
-output is written and any functions registered with <tt/<ref id="atexit"
-name="atexit">/ are called. Common values for status are <tt/EXIT_SUCCESS/ and
-<tt/EXIT_FAILURE/ which are also defined in <tt/<ref id="stdlib.h"
-name="stdlib.h">/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>It depends on the host machine if the program return code can be
-evaluated or is ignored.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="abort" name="abort">,
-<ref id="exit" name="exit">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>exec<label id="exec"><p>
-
-<quote>
-<descrip>
-<tag/Function/Execute a program file.
-<tag/Header/<tt/<ref id="unistd.h" name="unistd.h">/
-<tag/Declaration/<tt/int __fastcall__ exec (const char* progname, const char* cmdline);/
-<tag/Description/<tt/exec/ replaces the currently running program by a new one.
-Calling <tt/exec()/ is identical to calling <tt/<ref id="exit" name="exit()">/,
-then loading and starting the program named in the first argument, passing
-the command line specified as second argument. Instead of an empty string,
-a <tt/NULL/ pointer may be passed as second parameter.
-On success, the function does not return. On failure, -1 is returned and
-<tt/errno/ contains an error code.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>On most platforms, the function needs to copy a small stub loader to
-some memory area outside the program space. This may collide with other
-programs. See the platform specific docs on this.
-<item>Because it is necessary to terminate the running program before the
-memory can be reused to load the new one, there is a high chance that the
-function may not be able to return on errors.
-<item>The command line is passed to the new program in the same way as cc65
-programs expect the command line. If the new program is not a cc65 generated
-program, it may not be able to read it.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="exit" name="exit">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>fast<label id="fast"><p>
-
-<quote>
-<descrip>
-<tag/Function/Switch the C128 into 2MHz mode.
-<tag/Header/<tt/<ref id="c128.h" name="c128.h">/
-<tag/Declaration/<tt/void fast (void);/
-<tag/Description/The function will switch the clock of the C128 to 2MHz. This
-will nearly double the speed compared to slow mode.
-<tag/Notes/<itemize>
-<item>The function is specific to the C128.
-<item>2MHz clock will not work in 40 column mode.
-</itemize>
-<tag/Availability/C128
-<tag/See also/
-<ref id="slow" name="slow">,
-<ref id="toggle_videomode" name="toggle_videomode">,
-<ref id="videomode" name="videomode">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>feof<label id="feof"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the end-of-file indicator of a stream.
-<tag/Header/<tt/<ref id="stdio.h" name="stdio.h">/
-<tag/Declaration/<tt/int __fastcall__ feof (FILE* f);/
-<tag/Description/<tt/feof/ tests the end-of-file indicator ofthe stream
-<tt/f/, and returns a non zero value if it is set.
-<tag/Notes/<itemize>
-<item>The indicator is set only after a read past the end of a file is
-attempted.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="feof" name="clearerr">,
-<ref id="ferror" name="ferror">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>ferror<label id="ferror"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the error indicator of a stream.
-<tag/Header/<tt/<ref id="stdio.h" name="stdio.h">/
-<tag/Declaration/<tt/int __fastcall__ ferror (FILE* f);/
-<tag/Description/<tt/ferror/ tests the error indicator of the stream
-<tt/f/, and returns a non zero value if it is set.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="feof" name="clearerr">,
-<ref id="ferror" name="feof">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>fileno<label id="fileno"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the file handle used by a stream.
-<tag/Header/<tt/<ref id="stdio.h" name="stdio.h">/
-<tag/Declaration/<tt/int __fastcall__ fileno (FILE* f);/
-<tag/Description/The <tt/fileno/ function returns the file handle used
-internally by a C stream. This file handle (an integer) can be used as a
-handle for the POSIX input/output functions.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-<item>Mixing C file I/O functions and POSIX file I/O functions for the same
-file may have unpredictable results.
-</itemize>
-<tag/Availability/POSIX 1003.1
-<tag/See also/
-<ref id="creat" name="creat">,
-<ref id="open" name="open"> <!-- , -->
-<!-- <ref id="read" name="read">, -->
-<!-- <ref id="write" name="write"> -->
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>free<label id="free"><p>
-
-<quote>
-<descrip>
-<tag/Function/Free a block of dynamic memory.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/void __fastcall__ free (void* block);/
-<tag/Description/Free a block of dynamic memory previously allocated with
-<tt/<ref id="malloc" name="malloc">/, <tt/<ref id="calloc" name="calloc">/
-or <tt/<ref id="realloc" name="realloc">/. As an exception, if the passed
-pointer is <tt/NULL/, no action is performed.
-<tag/Notes/<itemize>
-<item>Passing an already free'd block to <tt/free/ again will cause undefined
-behaviour and may crash your program.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="_heapadd" name="_heapadd">,
-<ref id="_heapblocksize" name="_heapblocksize">,
-<ref id="_heapmaxavail" name="_heapmaxavail">,
-<ref id="_heapmemavail" name="_heapmemavail">,
-<ref id="calloc" name="calloc">,
-<ref id="malloc" name="malloc">,
-<ref id="realloc" name="realloc">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>get_ostype<label id="get_ostype"><p>
-
-<quote>
-<descrip>
-<tag/Function/The function returns the operating system, the program runs on.
-<tag/Header/<tt/<ref id="apple2.h" name="apple2.h">,
-<ref id="atari.h" name="atari.h">, <ref id="c64.h" name="c64.h">/
-<tag/Declaration/<tt/unsigned char get_ostype (void);/
-<tag/Description/<tt/get_ostype/ is machine dependent and does not exist for
-all supported targets. If it exists, it returns a number that identifies the
-operating system or machine type, the program runs on. The machine dependent
-header files define constants that can be used to check the return code.
-<tag/Notes/<itemize>
-<item>The function does not exist on all platforms.
-<item>The return codes are platform dependent.
-</itemize>
-<tag/Availability/cc65 (not all platforms)
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>getcpu<label id="getcpu"><p>
-
-<quote>
-<descrip>
-<tag/Function/Determine on which CPU the program is running.
-<tag/Header/<tt/<ref id="6502.h" name="6502.h">/
-<tag/Declaration/<tt/unsigned char getcpu (void);/
-<tag/Description/The function checks on which CPU the code is running. It
-returns one of the constants<itemize>
-<item><tt/CPU_6502/
-<item><tt/CPU_65C02/
-<item><tt/CPU_65816/
-</itemize>
-<tag/Notes/<itemize>
-<item>Other, more exotic CPU types are not disinguished.
-</itemize>
-<tag/Availability/cc65
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>getenv<label id="getenv"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return a value from the environment.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/char* __fastcall__ getenv (const char* name);/
-<tag/Description/The function searches the environment for an entry that
-matches <tt/name/ and returns its value. The environment consists of a list
-of strings in the form <tt/name=value/. If there is no match, <tt/getenv/
-returns <tt/NULL/.
-<tag/Notes/<itemize>
-<item>What exactly is stored in the environment depends on the machine the
-program is running on.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>getopt<label id="getopt"><p>
-
-<quote>
-<descrip>
-<tag/Function/Parse command line options.
-<tag/Header/<tt/<ref id="unistd.h" name="unistd.h">/
-<tag/Declaration/<tt/int __fastcall__ getopt (int argc, char* const* argv,
-const char* optstring);/
-<tag/Description/The function parses command line arguments, <tt/argc/ and
-<tt/argv/ are the argument count and array passed to <tt/main/. <tt/optstring/
-is a string that contains command line option characters. If a character in
-<tt/optstring/ is followed by a colon, the option requires an argument. An
-option on the command line is recognized if it is one of the option characters
-preceeded by a '-'.
-<tt/getopt/ must be called repeatedly. It will return each option character
-found on the command line and <tt/EOF/ (-1) if there is no other option. An
-option argument is placed in <tt/optarg/, the index of the next element on the
-command line to be processed is placed in <tt/optind/.
-<tag/Notes/<itemize>
-<item>The implementation will not reorder options. A non option on the command
-line will terminate option processing. All remaining arguments are not
-recognized as options, even if the start with a '-' character.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/POSIX.2
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>gotox<label id="gotox"><p>
-
-<quote>
-<descrip>
-<tag/Function/Move the text mode cursor to a new X position.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/void __fastcall__ gotox (unsigned char x);/
-<tag/Description/The function moves the text mode cursor to the specified X
-position while leaving the Y position untouched. The leftmost position on the
-screen has the coordinate 0.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may
-only be used in presence of a prototype.
-<item>Invalid values for the X position (out of screen coordinates) may
-lead to undefined behaviour.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="gotoy" name="gotoy">,
-<ref id="gotoxy" name="gotoxy">,
-<ref id="wherex" name="wherex">,
-<ref id="wherey" name="wherey">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>gotoxy<label id="gotoxy"><p>
-
-<quote>
-<descrip>
-<tag/Function/Move the text mode cursor to a new position.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/void __fastcall__ gotoxy (unsigned char x, unsigned char y);/
-<tag/Description/The function moves the text mode cursor to the specified
-position. The leftmost position on the screen has the X coordinate 0, the
-topmost line has the Y coordinate 0.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-<item>Invalid values for any of both coordinates (out of screen positions) may
-lead to undefined behaviour.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="gotox" name="gotox">,
-<ref id="gotoy" name="gotoy">,
-<ref id="wherex" name="wherex">,
-<ref id="wherey" name="wherey">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>gotoy<label id="gotoy"><p>
-
-<quote>
-<descrip>
-<tag/Function/Move the text mode cursor to a new Y position.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/void __fastcall__ gotoy (unsigned char x);/
-<tag/Description/The function moves the text mode cursor to the specified Y
-position while leaving the X position untouched. The uppermost position on the
-screen has the coordinate 0.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may
-only be used in presence of a prototype.
-<item>Invalid values for the Y position (out of screen coordinates) may lead
-to undefined behaviour.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="gotox" name="gotox">,
-<ref id="gotoxy" name="gotoxy">,
-<ref id="wherex" name="wherex">,
-<ref id="wherey" name="wherey">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>isalnum<label id="isalnum"><p>
-
-<quote>
-<descrip>
-<tag/Function/Check if a given character is a letter or digit.
-<tag/Header/<tt/<ref id="ctype.h" name="ctype.h">/
-<tag/Declaration/<tt/int __fastcall__ isalnum (int c);/
-<tag/Description/The function returns a non zero value if the given argument
-is a letter or digit. The return value is zero if the character is anything
-else.
-<tag/Notes/<itemize>
-<item>When compiling with <tt/-Os/ the function is actually a macro. The
-inline sequence generated by the macro will not work correctly for values
-outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of
-this range. The non inline function may be accessed by <tt/#undef/'ing
-the macro.
-<item>When compiling without <tt/-Os/, the function is only available as
-fastcall function, so it may only be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="isalpha" name="isalpha">,
-<ref id="isascii" name="isascii">,
-<ref id="isblank" name="isblank">,
-<ref id="iscntrl" name="iscntrl">,
-<ref id="isdigit" name="isdigit">,
-<ref id="isgraph" name="isgraph">,
-<ref id="islower" name="islower">,
-<ref id="isprint" name="isprint">,
-<ref id="ispunct" name="ispunct">,
-<ref id="isspace" name="isspace">,
-<ref id="isupper" name="isupper">,
-<ref id="isxdigit" name="isxdigit">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>isalpha<label id="isalpha"><p>
-
-<quote>
-<descrip>
-<tag/Function/Check if a given character is a letter.
-<tag/Header/<tt/<ref id="ctype.h" name="ctype.h">/
-<tag/Declaration/<tt/int __fastcall__ isalpha (int c);/
-<tag/Description/The function returns a non zero value if the given argument
-is a letter. The return value is zero if the character is anything else.
-<tag/Notes/<itemize>
-<item>When compiling with <tt/-Os/ the function is actually a macro. The
-inline sequence generated by the macro will not work correctly for values
-outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of
-this range. The non inline function may be accessed by <tt/#undef/'ing the
-macro.
-<item>When compiling without <tt/-Os/, the function is only available as
-fastcall function, so it may only be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="isalnum" name="isalnum">,
-<ref id="isascii" name="isascii">,
-<ref id="isblank" name="isblank">,
-<ref id="iscntrl" name="iscntrl">,
-<ref id="isdigit" name="isdigit">,
-<ref id="isgraph" name="isgraph">,
-<ref id="islower" name="islower">,
-<ref id="isprint" name="isprint">,
-<ref id="ispunct" name="ispunct">,
-<ref id="isspace" name="isspace">,
-<ref id="isupper" name="isupper">,
-<ref id="isxdigit" name="isxdigit">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>isascii<label id="isascii"><p>
-
-<quote>
-<descrip>
-<tag/Function/Check if a given character is in the ASCII (0..127) range.
-<tag/Header/<tt/<ref id="ctype.h" name="ctype.h">/
-<tag/Declaration/<tt/int __fastcall__ isascii (int c);/
-<tag/Description/The function returns a non zero value if the given argument
-is in the range 0..127 (the range of valid ASCII characters) and zero if not.
-<tag/Notes/<itemize>
-<item>When compiling with <tt/-Os/ the function is actually a macro. The
-inline sequence generated by the macro will not work correctly for values
-outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of
-this range. The non inline function may be accessed by <tt/#undef/'ing the
-macro.
-<item>When compiling without <tt/-Os/, the function is only available as
-fastcall function, so it may only be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="isalnum" name="isalnum">,
-<ref id="isalpha" name="isalpha">,
-<ref id="isblank" name="isblank">,
-<ref id="iscntrl" name="iscntrl">,
-<ref id="isdigit" name="isdigit">,
-<ref id="isgraph" name="isgraph">,
-<ref id="islower" name="islower">,
-<ref id="isprint" name="isprint">,
-<ref id="ispunct" name="ispunct">,
-<ref id="isspace" name="isspace">,
-<ref id="isupper" name="isupper">,
-<ref id="isxdigit" name="isxdigit">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>isblank<label id="isblank"><p>
-
-<quote>
-<descrip>
-<tag/Function/Check if a given character is a space or tab.
-<tag/Header/<tt/<ref id="ctype.h" name="ctype.h">/
-<tag/Declaration/<tt/int __fastcall__ isblank (int c);/
-<tag/Description/The function returns a non zero value if the given argument
-is a space or tab character. The return value is zero if the character is
-anything else.
-<tag/Notes/<itemize>
-<item>When compiling with <tt/-Os/ the function is actually a macro. The
-inline sequence generated by the macro will not work correctly for values
-outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of
-this range. The non inline function may be accessed by <tt/#undef/'ing the
-macro.
-<item>When compiling without <tt/-Os/, the function is only available as
-fastcall function, so it may only be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="isalnum" name="isalnum">,
-<ref id="isalpha" name="isalpha">,
-<ref id="isascii" name="isascii">,
-<ref id="iscntrl" name="iscntrl">,
-<ref id="isdigit" name="isdigit">,
-<ref id="isgraph" name="isgraph">,
-<ref id="islower" name="islower">,
-<ref id="isprint" name="isprint">,
-<ref id="ispunct" name="ispunct">,
-<ref id="isspace" name="isspace">,
-<ref id="isupper" name="isupper">,
-<ref id="isxdigit" name="isxdigit">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>iscntrl<label id="iscntrl"><p>
-
-<quote>
-<descrip>
-<tag/Function/Check if a given character is a control character.
-<tag/Header/<tt/<ref id="ctype.h" name="ctype.h">/
-<tag/Declaration/<tt/int __fastcall__ iscntrl (int c);/
-<tag/Description/The function returns a non zero value if the given argument
-is a control character. The return value is zero if the character is anything
-else.
-<tag/Notes/<itemize>
-<item>When compiling with <tt/-Os/ the function is actually a macro. The
-inline sequence generated by the macro will not work correctly for values
-outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of
-this range. The non inline function may be accessed by <tt/#undef/'ing the
-macro.
-<item>When compiling without <tt/-Os/, the function is only available as
-fastcall function, so it may only be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="isalnum" name="isalnum">,
-<ref id="isalpha" name="isalpha">,
-<ref id="isascii" name="isascii">,
-<ref id="isblank" name="isblank">,
-<ref id="isdigit" name="isdigit">,
-<ref id="isgraph" name="isgraph">,
-<ref id="islower" name="islower">,
-<ref id="isprint" name="isprint">,
-<ref id="ispunct" name="ispunct">,
-<ref id="isspace" name="isspace">,
-<ref id="isupper" name="isupper">,
-<ref id="isxdigit" name="isxdigit">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>isdigit<label id="isdigit"><p>
-
-<quote>
-<descrip>
-<tag/Function/Check if a given character is a digit.
-<tag/Header/<tt/<ref id="ctype.h" name="ctype.h">/
-<tag/Declaration/<tt/int __fastcall__ isdigit (int c);/
-<tag/Description/The function returns a non zero value if the given argument
-is a digit. The return value is zero if the character is anything else.
-<tag/Notes/<itemize>
-<item>When compiling with <tt/-Os/ the function is actually a macro. The
-inline sequence generated by the macro will not work correctly for values
-outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of
-this range. The non inline function may be accessed by <tt/#undef/'ing the
-macro.
-<item>When compiling without <tt/-Os/, the function is only available as
-fastcall function, so it may only be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="isalnum" name="isalnum">,
-<ref id="isalpha" name="isalpha">,
-<ref id="isascii" name="isascii">,
-<ref id="isblank" name="isblank">,
-<ref id="iscntrl" name="iscntrl">,
-<ref id="isgraph" name="isgraph">,
-<ref id="islower" name="islower">,
-<ref id="isprint" name="isprint">,
-<ref id="ispunct" name="ispunct">,
-<ref id="isspace" name="isspace">,
-<ref id="isupper" name="isupper">,
-<ref id="isxdigit" name="isxdigit">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>isgraph<label id="isgraph"><p>
-
-<quote>
-<descrip>
-<tag/Function/Check if a given character is a printable character (except
-space).
-<tag/Header/<tt/<ref id="ctype.h" name="ctype.h">/
-<tag/Declaration/<tt/int __fastcall__ isgraph (int c);/
-<tag/Description/The function returns a non zero value if the given argument
-is a printable character with the exception of space. The return value is zero
-if the character is anything else.
-<tag/Notes/<itemize>
-<item>When compiling with <tt/-Os/ the function is actually a macro. The
-inline sequence generated by the macro will not work correctly for values
-outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of
-this range. The non inline function may be accessed by <tt/#undef/'ing the
-macro.
-<item>When compiling without <tt/-Os/, the function is only available as
-fastcall function, so it may only be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="isalnum" name="isalnum">,
-<ref id="isalpha" name="isalpha">,
-<ref id="isascii" name="isascii">,
-<ref id="isblank" name="isblank">,
-<ref id="iscntrl" name="iscntrl">,
-<ref id="isdigit" name="isdigit">,
-<ref id="islower" name="islower">,
-<ref id="isprint" name="isprint">,
-<ref id="ispunct" name="ispunct">,
-<ref id="isspace" name="isspace">,
-<ref id="isupper" name="isupper">,
-<ref id="isxdigit" name="isxdigit">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>islower<label id="islower"><p>
-
-<quote>
-<descrip>
-<tag/Function/Check if a given character is a lower case letter.
-<tag/Header/<tt/<ref id="ctype.h" name="ctype.h">/
-<tag/Declaration/<tt/int __fastcall__ islower (int c);/
-<tag/Description/The function returns a non zero value if the given argument
-is a lower case letter. The return value is zero if the character is anything
-else.
-<tag/Notes/<itemize>
-<item>When compiling with <tt/-Os/ the function is actually a macro. The
-inline sequence generated by the macro will not work correctly for values
-outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of
-this range. The non inline function may be accessed by <tt/#undef/'ing the
-macro.
-<item>When compiling without <tt/-Os/, the function is only available as
-fastcall function, so it may only be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="isalnum" name="isalnum">,
-<ref id="isalpha" name="isalpha">,
-<ref id="isascii" name="isascii">,
-<ref id="isblank" name="isblank">,
-<ref id="iscntrl" name="iscntrl">,
-<ref id="isdigit" name="isdigit">,
-<ref id="isgraph" name="isgraph">,
-<ref id="isprint" name="isprint">,
-<ref id="ispunct" name="ispunct">,
-<ref id="isspace" name="isspace">,
-<ref id="isupper" name="isupper">,
-<ref id="isxdigit" name="isxdigit">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>isprint<label id="isprint"><p>
-
-<quote>
-<descrip>
-<tag/Function/Check if a given character is a printable character.
-<tag/Header/<tt/<ref id="ctype.h" name="ctype.h">/
-<tag/Declaration/<tt/int __fastcall__ isprint (int c);/
-<tag/Description/The function returns a non zero value if the given argument
-is a printable character (this includes the space character). The return value
-is zero if the character is anything else.
-<tag/Notes/<itemize>
-<item>When compiling with <tt/-Os/ the function is actually a macro. The
-inline sequence generated by the macro will not work correctly for values
-outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of
-this range. The non inline function may be accessed by <tt/#undef/'ing the
-macro.
-<item>When compiling without <tt/-Os/, the function is only available as
-fastcall function, so it may only be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="isalnum" name="isalnum">,
-<ref id="isalpha" name="isalpha">,
-<ref id="isascii" name="isascii">,
-<ref id="isblank" name="isblank">,
-<ref id="iscntrl" name="iscntrl">,
-<ref id="isdigit" name="isdigit">,
-<ref id="isgraph" name="isgraph">,
-<ref id="islower" name="islower">,
-<ref id="ispunct" name="ispunct">,
-<ref id="isspace" name="isspace">,
-<ref id="isupper" name="isupper">,
-<ref id="isxdigit" name="isxdigit">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>ispunct<label id="ispunct"><p>
-
-<quote>
-<descrip>
-<tag/Function/Check if a given character is a printable character but not a
-space or an alphanumeric character.
-<tag/Header/<tt/<ref id="ctype.h" name="ctype.h">/
-<tag/Declaration/<tt/int __fastcall__ ispunct (int c);/
-<tag/Description/The function returns a non zero value if the given argument
-is a printable character, but not a space or anything alphanumeric. The return
-value is zero if the character is anything else.
-<tag/Notes/<itemize>
-<item>When compiling with <tt/-Os/ the function is actually a macro. The
-inline sequence generated by the macro will not work correctly for values
-outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of
-this range. The non inline function may be accessed by <tt/#undef/'ing the
-macro.
-<item>When compiling without <tt/-Os/, the function is only available as
-fastcall function, so it may only be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="isalnum" name="isalnum">,
-<ref id="isalpha" name="isalpha">,
-<ref id="isascii" name="isascii">,
-<ref id="isblank" name="isblank">,
-<ref id="iscntrl" name="iscntrl">,
-<ref id="isdigit" name="isdigit">,
-<ref id="isgraph" name="isgraph">,
-<ref id="islower" name="islower">,
-<ref id="isprint" name="isprint">,
-<ref id="isspace" name="isspace">,
-<ref id="isupper" name="isupper">,
-<ref id="isxdigit" name="isxdigit">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>isspace<label id="isspace"><p>
-
-<quote>
-<descrip>
-<tag/Function/Check if a given character is a a white-space character.
-<tag/Header/<tt/<ref id="ctype.h" name="ctype.h">/
-<tag/Declaration/<tt/int __fastcall__ isspace (int c);/
-<tag/Description/The function returns a non zero value if the given argument
-is a white space character. The return value is zero if the character is
-anything else. The standard white space characters are: space, formfeed ('\f'),
-newline ('\n'), carriage return ('\r'), horizontal tab ('\t'), and vertical tab
-('\v').
-<tag/Notes/<itemize>
-<item>When compiling with <tt/-Os/ the function is actually a macro. The
-inline sequence generated by the macro will not work correctly for values
-outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of
-this range. The non inline function may be accessed by <tt/#undef/'ing the
-macro.
-<item>When compiling without <tt/-Os/, the function is only available as
-fastcall function, so it may only be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="isalnum" name="isalnum">,
-<ref id="isalpha" name="isalpha">,
-<ref id="isascii" name="isascii">,
-<ref id="isblank" name="isblank">,
-<ref id="iscntrl" name="iscntrl">,
-<ref id="isdigit" name="isdigit">,
-<ref id="isgraph" name="isgraph">,
-<ref id="islower" name="islower">,
-<ref id="isprint" name="isprint">,
-<ref id="ispunct" name="ispunct">,
-<ref id="isupper" name="isupper">,
-<ref id="isxdigit" name="isxdigit">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>isupper<label id="isupper"><p>
-
-<quote>
-<descrip>
-<tag/Function/Check if a given character is an upper case letter.
-<tag/Header/<tt/<ref id="ctype.h" name="ctype.h">/
-<tag/Declaration/<tt/int __fastcall__ isupper (int c);/
-<tag/Description/The function returns a non zero value if the given argument
-is an upper case letter. The return value is zero if the character is anything
-else.
-<tag/Notes/<itemize>
-<item>When compiling with <tt/-Os/ the function is actually a macro. The
-inline sequence generated by the macro will not work correctly for values
-outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of
-this range. The non inline function may be accessed by <tt/#undef/'ing the
-macro.
-<item>When compiling without <tt/-Os/, the function is only available as
-fastcall function, so it may only be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="isalnum" name="isalnum">,
-<ref id="isalpha" name="isalpha">,
-<ref id="isascii" name="isascii">,
-<ref id="isblank" name="isblank">,
-<ref id="iscntrl" name="iscntrl">,
-<ref id="isdigit" name="isdigit">,
-<ref id="isgraph" name="isgraph">,
-<ref id="islower" name="islower">,
-<ref id="isprint" name="isprint">,
-<ref id="ispunct" name="ispunct">,
-<ref id="isspace" name="isspace">,
-<ref id="isxdigit" name="isxdigit">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>isxdigit<label id="isxdigit"><p>
-
-<quote>
-<descrip>
-<tag/Function/Check if a given character is a hexadecimal digit.
-<tag/Header/<tt/<ref id="ctype.h" name="ctype.h">/
-<tag/Declaration/<tt/int __fastcall__ isxdigit (int c);/
-<tag/Description/The function returns a non zero value if the given argument
-is a hexadecimal digit (0..9, a..f and A..F). The return value is zero if the
-character is anything else.
-<tag/Notes/<itemize>
-<item>When compiling with <tt/-Os/ the function is actually a macro. The
-inline sequence generated by the macro will not work correctly for values
-outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of
-this range. The non inline function may be accessed by <tt/#undef/'ing the
-macro.
-<item>When compiling without <tt/-Os/, the function is only available as
-fastcall function, so it may only be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="isalnum" name="isalnum">,
-<ref id="isalpha" name="isalpha">,
-<ref id="isascii" name="isascii">,
-<ref id="isblank" name="isblank">,
-<ref id="iscntrl" name="iscntrl">,
-<ref id="isdigit" name="isdigit">,
-<ref id="isgraph" name="isgraph">,
-<ref id="islower" name="islower">,
-<ref id="isprint" name="isprint">,
-<ref id="ispunct" name="ispunct">,
-<ref id="isspace" name="isspace">,
-<ref id="isupper" name="isupper">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>itoa<label id="itoa"><p>
-
-<quote>
-<descrip>
-<tag/Function/Convert an integer into a string.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/char* __fastcall__ itoa (int val, char* buf, int radix);/
-<tag/Description/<tt/itoa/ converts the integer <tt/val/ into a string using
-<tt/radix/ as the base.
-<tag/Notes/<itemize>
-<item>There are no provisions to prevent a buffer overflow.
-<item>If <tt/val/ contains <tt/INT_MIN/, the behaviour is undefined.
-<item>The function is non standard, so it is not available in strict ANSI mode.
-You should probably use <tt/sprintf/ instead.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="atoi" name="atoi">,
-<ref id="atol" name="atol">,
-<ref id="ltoa" name="ltoa">,
-<ref id="ultoa" name="ultoa">,
-<ref id="utoa" name="utoa">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>joy_count<label id="joy_count"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the number of joysticks supported by the current driver.
-<tag/Header/<tt/<ref id="joystick.h" name="joystick.h">/
-<tag/Declaration/<tt/unsigned char joy_count (void);/
-<tag/Description/The function returns a the number of joysticks supported
-by the current joystick driver.
-<tag/Notes/<itemize>
-<item>A joystick driver must be loaded using <ref id="joy_load_driver"
-name="joy_load_driver"> before calling this function.
-<item>The function returns the number of joysticks supported by the driver.
-There's no way to check for the number of actually connected joysticks.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="joy_load_driver" name="joy_load_driver">,
-<ref id="joy_read" name="joy_read">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>joy_install<label id="joy_install"><p>
-
-<quote>
-<descrip>
-<tag/Function/Install an already loaded driver and return an error code.
-<tag/Header/<tt/<ref id="joystick.h" name="joystick.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ joy_install (void* driver);/
-<tag/Description/The function installs a driver that was already loaded into
-memory (or linked statically to the program). It returns an error code
-(<tt/JOY_ERR_OK/ in case of success).
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="joy_load_driver" name="joy_load_driver">,
-<ref id="joy_uninstall" name="joy_uninstall">,
-<ref id="joy_unload" name="joy_unload">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>joy_load_driver<label id="joy_load_driver"><p>
-
-<quote>
-<descrip>
-<tag/Function/Load a driver from disk and install it.
-<tag/Header/<tt/<ref id="joystick.h" name="joystick.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ joy_load_driver (const char* driver);/
-<tag/Description/The function loads a driver with the given name from disk
-and installs it. An error code is returned, which is <tt/JOY_ERR_OK/ if the
-driver was successfully loaded and installed.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="joy_install" name="joy_install">,
-<ref id="joy_uninstall" name="joy_uninstall">,
-<ref id="joy_unload" name="joy_unload">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>joy_read<label id="joy_read"><p>
-
-<quote>
-<descrip>
-<tag/Function/Read the status of a joystick.
-<tag/Header/<tt/<ref id="joystick.h" name="joystick.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ joy_read (unsigned char joystick);/
-<tag/Description/The function reads the status bits for a joystick. The number
-of the joystick is passed as parameter. The result may be examined by using one
-of the <tt/JOY_xxx/ macros from <ref id="joystick.h" name="joystick.h">.
-<tag/Notes/<itemize>
-<item>A joystick driver must be loaded using <ref id="joy_load_driver"
-name="joy_load_driver"> before calling this function.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="joy_count" name="joy_count">,
-<ref id="joy_load_driver" name="joy_load_driver">,
-<ref id="joy_unload" name="joy_unload">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>joy_uninstall<label id="joy_uninstall"><p>
-
-<quote>
-<descrip>
-<tag/Function/Uninstall the current joystick driver.
-<tag/Header/<tt/<ref id="joystick.h" name="joystick.h">/
-<tag/Declaration/<tt/unsigned char joy_uninstall (void);/
-<tag/Description/The function uninstalls the currently installed joystick
-driver. It does not remove the driver from memory. The function returns an
-error code, which is <tt/JOY_ERR_OK/ if the driver was successfully uninstalled.
-<tag/Notes/<itemize>
-<item>A joystick driver must be installed using <ref id="joy_install"
-name="joy_install"> before calling this function.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="joy_install" name="joy_install">,
-<ref id="joy_load_driver" name="joy_load_driver">,
-<ref id="joy_unload" name="joy_unload">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>joy_unload<label id="joy_unload"><p>
-
-<quote>
-<descrip>
-<tag/Function/Uninstall, then unload the current joystick driver.
-<tag/Header/<tt/<ref id="joystick.h" name="joystick.h">/
-<tag/Declaration/<tt/unsigned char joy_unload (void);/
-<tag/Description/The function uninstalls the currently installed joystick
-driver and removes it from memory. An error code is returned, which is
-<tt/JOY_ERR_OK/ if the driver was successfully uninstalled.
-<tag/Notes/<itemize>
-<item>A joystick driver must be loaded using <ref id="joy_load_driver"
-name="joy_load_driver"> before calling this function.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="joy_load_driver" name="joy_load_driver">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>kbhit<label id="kbhit"><p>
-
-<quote>
-<descrip>
-<tag/Function/Check if there's a key waiting in the keyboard buffer.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/unsigned char kbhit (void);/
-<tag/Description/The function returns a value of zero if there is no character
-waiting to be read from the keyboard. It returns non zero otherwise.
-<tag/Notes/<itemize>
-<item>If the system does not support a keyboard buffer (most systems
-do), the function is rather useless.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cgetc" name="cgetc">,
-<ref id="cursor" name="cursor">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>labs<label id="labs"><p>
-
-<quote>
-<descrip>
-<tag/Function/Returns the absolute value of a long integer.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/long __fastcall__ labs (long v);/
-<tag/Description/<tt/labs/ returns the absolute value of the argument passed to
-the function.
-<tag/Notes/<itemize>
-<item>The return value is undefined if <tt/LONG_MIN/ is passed to the function.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="abs" name="abs">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>ltoa<label id="ltoa"><p>
-
-<quote>
-<descrip>
-<tag/Function/Convert a long integer into a string.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/char* __fastcall__ ltoa (long val, char* buf, int radix);/
-<tag/Description/<tt/itoa/ converts the long integer <tt/val/ into a string
-using <tt/radix/ as the base.
-<tag/Notes/<itemize>
-<item>There are no provisions to prevent a buffer overflow.
-<item>If <tt/val/ contains <tt/LONG_MIN/, the behaviour is undefined.
-<item>The function is non standard, so it is not available in strict ANSI mode.
-You should probably use <tt/sprintf/ instead.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="atoi" name="atoi">,
-<ref id="atol" name="atol">,
-<ref id="itoa" name="itoa">,
-<ref id="ultoa" name="ultoa">,
-<ref id="utoa" name="utoa">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>localeconv<label id="localeconv"><p>
-
-<quote>
-<descrip>
-<tag/Function/Returns a pointer to the current locale structure.
-<tag/Header/<tt/<ref id="locale.h" name="locale.h">/
-<tag/Declaration/<tt/struct lconv* localeconv (void);/
-<tag/Description/<tt/localeconv/ returns a pointer to the current locale
-structure.
-<tag/Notes/<itemize>
-<item>cc65 supports only the "C" locale, so even after setting a new locale
-using <tt/<ref id="setlocale" name="setlocale">/, the structure returned will
-always be the same.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="setlocale" name="setlocale">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>longjmp<label id="longjmp"><p>
-
-<quote>
-<descrip>
-<tag/Function/Non local goto.
-<tag/Header/<tt/<ref id="setjmp.h" name="setjmp.h">/
-<tag/Declaration/<tt/void __fastcall__ longjmp (jmp_buf buf, int retval);/
-<tag/Description/The <tt/longjmp/ function restores a program context from the
-data in <tt/buf/, which must have been set by a preceeding call to
-<tt/<ref id="setjmp" name="setjmp">/. Program execution continues as if the
-call to <tt/<ref id="setjmp" name="setjmp">/ has just returned the value
-<tt/retval/.
-<tag/Notes/<itemize>
-<item>If the parameter <tt/retval/ is zero, the function will behave as if it
-was called with a value of one.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="setjmp" name="setjmp">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>malloc<label id="malloc"><p>
-
-<quote>
-<descrip>
-<tag/Function/Allocate dynamic memory.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/void* __fastcall__ malloc (size_t size);/
-<tag/Description/<tt/malloc/ allocates size bytes on the heap and returns a
-pointer to the allocated memory block. On error (not enough memory available),
-<tt/malloc/ returns <tt/NULL/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="_heapadd" name="_heapadd">,
-<ref id="_heapblocksize" name="_heapblocksize">,
-<ref id="_heapmaxavail" name="_heapmaxavail">,
-<ref id="_heapmemavail" name="_heapmemavail">,
-<ref id="calloc" name="calloc">,
-<ref id="free" name="free">,
-<ref id="realloc" name="realloc">,
-<ref id="strdup" name="strdup">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>memchr<label id="memchr"><p>
-
-<quote>
-<descrip>
-<tag/Function/Search for a character in a block of raw memory.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/void* __fastcall__ strchr (const void* mem, int c, size_t count);/
-<tag/Description/The <tt/memchr/ function locates the first occurrence of <tt/c/
-(converted to a char) in the block of raw memory string pointed to by <tt/mem/
-that is of size <tt/count/. Upon completion, the function returns a pointer to
-the character found, or a null pointer if the character was not found.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="strchr" name="strchr">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>memcmp<label id="memcmp"><p>
-
-<quote>
-<descrip>
-<tag/Function/Compare two memory areas.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/int __fastcall__ memcmp (const void* p1, const void* p2, size_t count);/
-<tag/Description/<tt/memcmp/ compares <tt/count/ bytes from the memory area
-pointed to by <tt/p1/ into the memory area pointed to by <tt/p2/. It returns a value that is less than
-zero if <tt/p1/ is less than <tt/p2/, zero if <tt/p1/ is the same as <tt/p2/,
-and a value greater than zero if <tt/p1/ is greater than <tt/p2/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="strcmp" name="strcmp">,
-<ref id="memmove" name="memmove">,
-<ref id="memset" name="memset">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>memcpy<label id="memcpy"><p>
-
-<quote>
-<descrip>
-<tag/Function/Copy a memory area.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/void* __fastcall__ memcpy (void* dest, const void* src, size_t count);/
-<tag/Description/<tt/memcpy/ copies <tt/count/ bytes from the memory area
-pointed to by <tt/src/ into the memory area pointed to by <tt/dest/. It returns
-<tt/dest/.
-<tag/Notes/<itemize>
-<item>The result is undefined if the memory areas do overlap. Use
-<tt/<ref id="memmove" name="memmove">/ to copy overlapping memory areas.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="_swap" name="_swap">,
-<ref id="memmove" name="memmove">,
-<ref id="memset" name="memset">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>memmove<label id="memmove"><p>
-
-<quote>
-<descrip>
-<tag/Function/Copy a memory area.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/void* __fastcall__ memmove (void* dest, const void* src, size_t count);/
-<tag/Description/<tt/memmove/ copies <tt/count/ bytes from the memory area
-pointed to by <tt/src/ into the memory area pointed to by <tt/dest/. It returns
-<tt/dest/.
-<tag/Notes/<itemize>
-<item>While <tt/memmove/ allows the memory areas to overlap, it has some
-additional overhead compared to <tt/<ref id="memcpy" name="memcpy">/.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="_swap" name="_swap">,
-<ref id="memcpy" name="memcpy">,
-<ref id="memset" name="memset">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>memset<label id="memset"><p>
-
-<quote>
-<descrip>
-<tag/Function/Fill a memory area.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/void* __fastcall__ memset (void* p, int val, size_t count);/
-<tag/Description/<tt/memset/ fills the memory area pointed to by <tt/p/ with
-the value <tt/val/. The function returns <tt/p/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="_swap" name="_swap">,
-<ref id="bzero" name="bzero">,
-<ref id="memcpy" name="memcpy">,
-<ref id="memmove" name="memmove">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>mod_free<label id="mod_free"><p>
-
-<quote>
-<descrip>
-<tag/Function/Free a relocatable module.
-<tag/Header/<tt/<ref id="modload.h" name="modload.h">/
-<tag/Declaration/<tt/void __fastcall__ mod_free (void* module);/
-<tag/Description/The function will free a module loaded into memory by use of
-the <tt/<ref id="mod_load" name="mod_load">/ function.
-<tag/Notes/<itemize>
-<item>The pointer passed as parameter is the pointer to the module memory,
-not the pointer to the control structure.
-<item>The function is available only as a fastcall function; so, it may be used
-only in the presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="mod_load" name="mod_load">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>mod_load<label id="mod_load"><p>
-
-<quote>
-<descrip>
-<tag/Function/Load a relocatable module.
-<tag/Header/<tt/<ref id="modload.h" name="modload.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ mod_load (struct mod_ctrl* ctrl);/
-<tag/Description/The function will load a code module into memory and relocate
-it. The function will return an error code. If <tt/MLOAD_OK/ is returned, the
-outgoing fields in the passed <tt/mod_ctrl/ struct contain information about
-the module just loaded. Possible error codes are:
-<itemize>
-<item><tt/MLOAD_OK/ - Module load successful
-<item><tt/MLOAD_ERR_READ/ - Read error
-<item><tt/MLOAD_ERR_HDR/ - Header error
-<item><tt/MLOAD_ERR_OS/ - Wrong operating system
-<item><tt/MLOAD_ERR_FMT/ - Data format error
-<item><tt/MLOAD_ERR_MEM/ - Not enough memory
-</itemize>
-<tag/Notes/<itemize>
-<item>The <htmlurl url="ld65.html" name="ld65"> linker is needed to create
-relocatable o65 modules for use with this function.
-<item>The function is available only as a fastcall function; so, it may be used
-only in the presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="mod_free" name="mod_free">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>mouse_setbox<label id="mouse_setbox"><p>
-
-<quote>
-<descrip>
-<tag/Function/Specify a bounding box for the mouse cursor.
-<tag/Header/<tt/<ref id="mouse.h" name="mouse.h">/
-<tag/Declaration/<tt/void __fastcall__ mouse_setbox (const struct mouse_box* box);/
-<tag/Description/The function allows to set a bounding box for mouse movement.
-<tag/Notes/<itemize>
-<item>The function does not check if the mouse cursor is currently within the
-given rectangle. Placing the mouse cursor within the bounding box is the
-responsibility of the programmer.
-<item>While the bounding box may be larger than the actual screen size, the
-standard mouse cursor draw routines may fail to set the cursor to coordinates
-outside of the screen area. Depending on the platform, you may have to supply
-your own mouse cursor routines.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="mouse_getbox" name="mouse_getbox">,
-<ref id="mouse_move" name="mouse_move">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>mouse_getbox<label id="mouse_getbox"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the current bounding box for the mouse cursor.
-<tag/Header/<tt/<ref id="mouse.h" name="mouse.h">/
-<tag/Declaration/<tt/void __fastcall__ mouse_getbox (struct mouse_box* box);/
-<tag/Description/The function queries the current bounding box for mouse
-movement.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="mouse_move" name="mouse_move">,
-<ref id="mouse_setbox" name="mouse_setbox">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>mouse_buttons<label id="mouse_buttons"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return a bit mask encoding the state of the mouse buttons.
-<tag/Header/<tt/<ref id="mouse.h" name="mouse.h">/
-<tag/Declaration/<tt/unsigned char mouse_buttons (void);/
-<tag/Description/The function returns a bit mask that encodes the state of the
-mouse buttons. You may use the <tt/MOUSE_BTN_XXX/ flags to decode the function
-return value.
-<tag/Availability/cc65
-<tag/See also/
-<ref id="mouse_info" name="mouse_info">,
-<ref id="mouse_pos" name="mouse_pos">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>mouse_geterrormsg<label id="mouse_geterrormsg"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return a readable error message for an error code.
-<tag/Header/<tt/<ref id="mouse.h" name="mouse.h">/
-<tag/Declaration/<tt/const char* __fastcall__ mouse_geterrormsg (unsigned char
-code);/
-<tag/Description/The function returns an error message (in english) for the
-error code passed parameter.
-<tag/Notes/<itemize>
-<item>The function will return "Unknown error" for invalid error codes.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="mouse_load_driver" name="mouse_load_driver">,
-<ref id="mouse_uninstall" name="mouse_uninstall">,
-<ref id="mouse_unload" name="mouse_unload">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>mouse_hide<label id="mouse_hide"><p>
-
-<quote>
-<descrip>
-<tag/Function/Hide the mouse pointer.
-<tag/Header/<tt/<ref id="mouse.h" name="mouse.h">/
-<tag/Declaration/<tt/void mouse_hide (void);/
-<tag/Description/The function hides the mouse pointer. It manages a counter
-that is shared between <tt/<ref id="mouse_show" name="mouse_show">/ and
-<tt/mouse_hide/ so that every call call to <tt/mouse_hide/ must be followed by
-a call to <tt/<ref id="mouse_show" name="mouse_show">/ to make the mouse cursor
-visible.
-<tag/Availability/cc65
-<tag/See also/
-<ref id="mouse_show" name="mouse_show">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>mouse_info<label id="mouse_info"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the state of the mouse buttons and the position of the
-mouse.
-<tag/Header/<tt/<ref id="mouse.h" name="mouse.h">/
-<tag/Declaration/<tt/void __fastcall__ mouse_info (struct mouse_info* info);/
-<tag/Description/The function returns the state of the mouse buttons and the
-position of the mouse in the <tt/mouse_info/ structure passed as parameter.
-<tag/Notes/<itemize>
-<item>The <tt/mouse_info/ struct is a superset of the <tt/mouse_pos/ struct,
-so if you just need the mouse position, call <tt/<ref id="mouse_pos"
-name="mouse_pos">/ instead.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="mouse_buttons" name="mouse_buttons">,
-<ref id="mouse_pos" name="mouse_pos">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>mouse_install<label id="mouse_install"><p>
-
-<quote>
-<descrip>
-<tag/Function/Install an already loaded mouse driver.
-<tag/Header/<tt/<ref id="mouse.h" name="mouse.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ mouse_install (const struct
-mouse_callbacks* c, void* driver);/
-<tag/Description/The function installs an already loaded mouse driver and
-returns an error code. The <tt/mouse_callbacks/ structure passed as first
-parameter contains pointers to routines needed to move or hide/show the mouse
-pointer. Defaults for these routines are supplied by the library, so if you
-can live with these defaults (which are platform specific), just pass a
-pointer to <tt/mouse_def_callbacks/. The function may be used to install a
-driver linked statically to the program.
-<tag/Notes/<itemize>
-<item>Not all drivers are able to detect if the supported hardware is really
-present.
-<item>After installing a driver, the mouse cursor is hidden.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="mouse_load_driver" name="mouse_load_driver">,
-<ref id="mouse_uninstall" name="mouse_uninstall">,
-<ref id="mouse_unload" name="mouse_unload">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>mouse_ioctl<label id="mouse_ioctl"><p>
-
-<quote>
-<descrip>
-<tag/Function/Call the driver specific ioctl function.
-<tag/Header/<tt/<ref id="mouse.h" name="mouse.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ mouse_ioctl (unsigned char code, void* data);/
-<tag/Description/The function calls the IOCTL entry in the mouse driver,
-which is driver specific. The <tt/code/ parameter will choose between
-different IOCTL functions, and the <tt/data/ depends on code. The
-function returns an error code. The purpose of this function is to allow
-for driver specific extensions. See the documentation for a specific mouse
-driver for supported ioctl calls.
-<tag/Notes/<itemize>
-<item>Calling this function is non portable, because each driver may
-implement different ioctl calls (or none at all).
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>mouse_load_driver<label id="mouse_load_driver"><p>
-
-<quote>
-<descrip>
-<tag/Function/Load and initialize a mouse driver.
-<tag/Header/<tt/<ref id="mouse.h" name="mouse.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ mouse_load_driver (const struct
-mouse_callbacks* c, const char* driver);/
-<tag/Description/Load a mouse driver into memory and initialize it. The
-function returns an error code that tells if the call has been successful. The
-<tt/mouse_callbacks/ structure passed as first parameter contains pointers to
-routines needed to move or hide/show the mouse pointer. Defaults for these
-routines are supplied by the library, so if you can live with these defaults
-(which are platform specific), just pass a pointer to <tt/mouse_def_callbacks/.
-<tag/Notes/<itemize>
-<item>The driver is loaded by name, so currently you must know the type of
-mouse that should be supported. There is no autodetect capability.
-<item>Not all drivers are able to detect if the supported hardware is really
-present.
-<item>After installing a driver, the mouse cursor is hidden.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="mouse_install" name="mouse_install">,
-<ref id="mouse_uninstall" name="mouse_uninstall">,
-<ref id="mouse_unload" name="mouse_unload">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>mouse_move<label id="mouse_move"><p>
-
-<quote>
-<descrip>
-<tag/Function/Move the mouse cursor to a specific position.
-<tag/Header/<tt/<ref id="mouse.h" name="mouse.h">/
-<tag/Declaration/<tt/void __fastcall__ mouse_move (int x, int y);/
-<tag/Description/The function updates the mouse position. If the mouse cursor
-is visible, it is shown at the new position.
-<tag/Notes/<itemize>
-<item>The function does not check if the new position is within the bounding
-box specified with <tt/<ref id="mouse_setbox" name="mouse_setbox">/.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="mouse_getbox" name="mouse_getbox">,
-<ref id="mouse_setbox" name="mouse_setbox">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>mouse_pos<label id="mouse_pos"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the position of the mouse.
-<tag/Header/<tt/<ref id="mouse.h" name="mouse.h">/
-<tag/Declaration/<tt/void __fastcall__ mouse_pos (struct mouse_pos* pos);/
-<tag/Description/The function returns the position of the mouse in the
-<tt/mouse_pos/ structure passed as parameter.
-<tag/Notes/<itemize>
-<item>The <tt/mouse_pos/ struct is a subset of the <tt/mouse_info/ struct,
-so if you do also need the mouse buttons, call <tt/<ref id="mouse_info"
-name="mouse_info">/ instead.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="mouse_buttons" name="mouse_buttons">,
-<ref id="mouse_info" name="mouse_info">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>mouse_show<label id="mouse_show"><p>
-
-<quote>
-<descrip>
-<tag/Function/Show the mouse pointer.
-<tag/Header/<tt/<ref id="mouse.h" name="mouse.h">/
-<tag/Declaration/<tt/void mouse_show (void);/
-<tag/Description/The function shows the mouse pointer. It manages a counter
-that is shared between <tt/<ref id="mouse_hide" name="mouse_hide">/ and
-<tt/mouse_show/. The mouse cursor is visible if there was one more call to
-<tt/mouse_show/ than to <tt/<ref id="mouse_hide" name="mouse_hide">/.
-<tag/Availability/cc65
-<tag/See also/
-<ref id="mouse_hide" name="mouse_hide">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>mouse_uninstall<label id="mouse_uninstall"><p>
-
-<quote>
-<descrip>
-<tag/Function/Uninstall an already loaded mouse driver.
-<tag/Header/<tt/<ref id="mouse.h" name="mouse.h">/
-<tag/Declaration/<tt/unsigned char mouse_uninstall (void);/
-<tag/Description/The function uninstalls an already loaded mouse driver but
-don't removes it from memory.
-<tag/Notes/<itemize>
-<item>If the driver has been loaded using <tt/<ref id="mouse_load_driver"
-name="mouse_load_driver">/, <tt/<ref id="mouse_unload" name="mouse_unload">/
-should be used instead of <tt/mouse_uninstall/ so the driver is also removed
-from memory.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="mouse_install" name="mouse_install">,
-<ref id="mouse_load_driver" name="mouse_load_driver">,
-<ref id="mouse_unload" name="mouse_unload">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>mouse_unload<label id="mouse_unload"><p>
-
-<quote>
-<descrip>
-<tag/Function/Unload a mouse driver.
-<tag/Header/<tt/<ref id="mouse.h" name="mouse.h">/
-<tag/Declaration/<tt/unsigned char mouse_unload (void);/
-<tag/Description/The function unloads a loaded mouse driver and frees all
-memory allocated for the driver.
-<tag/Notes/<itemize>
-<item>The function does nothing if no driver is loaded.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="mouse_install" name="mouse_install">,
-<ref id="mouse_load_driver" name="mouse_load_driver">,
-<ref id="mouse_uninstall" name="mouse_uninstall">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>offsetof<label id="offsetof"><p>
-
-<quote>
-<descrip>
-<tag/Function/Calculate the offset of a struct or union member.
-<tag/Header/<tt/<ref id="stddef.h" name="stddef.h">/
-<tag/Declaration/<tt/size_t offsetof (type, member);/
-<tag/Description/<tt/offsetof/ calculates the address offset of a <tt/struct/
-or <tt/union/ member.
-<tag/Notes/<itemize>
-<item>The function is actually a macro.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>open<label id="open"><p>
-
-<quote>
-<descrip>
-<tag/Function/Open and possibly create a file.
-<tag/Header/<tt/<ref id="fcntl.h" name="fcntl.h">/
-<tag/Declaration/<tt/int open (const char* name, int flags, ...);/
-<tag/Description/<tt/open/ opens a file and returns the file descriptor
-associated with it. On error, -1 is returned and an error code is stored in
-<tt/errno/. Several flags may be passed to <tt/open/ that change the behaviour.
-<tag/Notes/<itemize>
-<item>POSIX specifies an additional <tt/mode/ argument that may be passed to
-open, which is used as the permission mask when a new file is created. While
-cc65 allows to pass this argument, it is ignored.
-</itemize>
-<tag/Availability/POSIX 1003.1
-<tag/See also/
-<ref id="close" name="close">,
-<ref id="creat" name="creat">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>opendir<label id="opendir"><p>
-
-<quote>
-<descrip>
-<tag/Function/Open a directory.
-<tag/Header/<tt/<ref id="dirent.h" name="dirent.h">/
-<tag/Declaration/<tt/DIR* __fastcall__ opendir (const char* name);/
-<tag/Description/<tt/opendir/ opens a directory and returns the direcory
-descriptor associated with it. On error, NULL is returned and an error code is
-stored in <tt/errno/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/POSIX 1003.1
-<tag/See also/
-<ref id="closedir" name="closedir">,
-<ref id="readdir" name="readdir">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>peekbsys<label id="peekbsys"><p>
-
-<quote>
-<descrip>
-<tag/Function/Read one byte from a location in the system bank.
-<tag/Header/<tt/<ref id="cbm610.h" name="cbm610.h">/,
-<tt/<ref id="cbm510.h" name="cbm510.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ peekbsys (unsigned addr);/
-<tag/Description/<tt/peekbsys/ reads one byte from the given address in the
-system bank (bank 15) of the CBM PET-II machines and returns it.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>This function may be a macro depending on the compiler options. The
-actual function is accessible by #undef'ing the macro.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="PEEK" name="PEEK">,
-<ref id="PEEKW" name="PEEKW">,
-<ref id="peekwsys" name="peekwsys">,
-<ref id="pokebsys" name="pokebsys">,
-<ref id="pokewsys" name="pokewsys">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>peekwsys<label id="peekwsys"><p>
-
-<quote>
-<descrip>
-<tag/Function/Read one word from a location in the system bank.
-<tag/Header/<tt/<ref id="cbm610.h" name="cbm610.h">/,
-<tt/<ref id="cbm510.h" name="cbm510.h">/
-<tag/Declaration/<tt/unsigned __fastcall__ peekwsys (unsigned addr);/
-<tag/Description/<tt/peekwsys/ reads one word from the given address in the
-system bank (bank 15) of the CBM PET-II machines and returns it. Following
-the usual 6502 conventions, the low byte is read from <tt/addr/, and the
-high byte is read from <tt/addr+1/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>The order in which the two bytes are read is undefined.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="PEEK" name="PEEK">,
-<ref id="PEEKW" name="PEEKW">,
-<ref id="peekbsys" name="peekbsys">,
-<ref id="pokebsys" name="pokebsys">,
-<ref id="pokewsys" name="pokewsys">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>perror<label id="perror"><p>
-
-<quote>
-<descrip>
-<tag/Function/Print an error message for the error in <tt/errno/.
-<tag/Header/<tt/<ref id="stdio.h" name="stdio.h">/
-<tag/Declaration/<tt/void __fastcall__ perror (const char* s);/
-<tag/Description/<tt/perror/ prints an error message to <tt/stderr/. If <tt/s/
-is not <tt/NULL/ and not an empty string, it is printed followed by a colon and
-a blank. Then the error message for the current contents of <tt/errno/ is
-printed followed by a newline. The message output is the same as returned by
-<tt/<ref id="strerror" name="strerror">/ with an argument of <tt/errno/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="_poserror" name="_poserror">,
-<ref id="strerror" name="strerror">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>pokebsys<label id="pokebsys"><p>
-
-<quote>
-<descrip>
-<tag/Function/Write one byte to a location in the system bank.
-<tag/Header/<tt/<ref id="cbm610.h" name="cbm610.h">/,
-<tt/<ref id="cbm510.h" name="cbm510.h">/
-<tag/Declaration/<tt/void __fastcall__ pokebsys (unsigned addr, unsigned char val);/
-<tag/Description/<tt/pokebsys/ writes one byte to the given address in the
-system bank (bank 15) of the CBM PET-II machines.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="POKE" name="POKE">,
-<ref id="POKEW" name="POKEW">,
-<ref id="peekbsys" name="peekbsys">,
-<ref id="peekwsys" name="peekwsys">,
-<ref id="pokewsys" name="pokewsys">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>pokewsys<label id="pokewsys"><p>
-
-<quote>
-<descrip>
-<tag/Function/Write one word to a location in the system bank.
-<tag/Header/<tt/<ref id="cbm610.h" name="cbm610.h">/,
-<tt/<ref id="cbm510.h" name="cbm510.h">/
-<tag/Declaration/<tt/void __fastcall__ pokewsys (unsigned addr, unsigned val);/
-<tag/Description/<tt/pokewsys/ writes one word to the given address in the
-system bank (bank 15) of the CBM PET-II machines. Following the usual 6502
-conventions, the low byte of <tt/val/ is written to <tt/addr/, and the
-high byte is written to <tt/addr+1/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>The order in which the two bytes are written is undefined.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="POKE" name="POKE">,
-<ref id="POKEW" name="POKEW">,
-<ref id="peekbsys" name="peekbsys">,
-<ref id="peekwsys" name="peekwsys">,
-<ref id="pokebsys" name="pokebsys">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>qsort<label id="qsort"><p>
-
-<quote>
-<descrip>
-<tag/Function/Sort an array.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/void __fastcall__ qsort (void* base, size_t count,
-size_t size, int __fastcall__ (* compare) (const void*, const void*));/
-<tag/Description/<tt/qsort/ sorts an array according to a given compare
-function <tt/compare/. <tt/base/ is the address of the array, <tt/count/
-is the number of elements, <tt/size/ the size of an element and <tt/compare/
-the function used to compare the members.
-<tag/Notes/<itemize>
-<item>If there are multiple members with the same key, the order after calling
-the function is undefined.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>The function to which <tt/compare/ points must have the <tt/fastcall/
-calling convention.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="bsearch" name="bsearch">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>raise<label id="raise"><p>
-
-<quote>
-<descrip>
-<tag/Function/Send a signal to the executing program.
-<tag/Header/<tt/<ref id="signal.h" name="signal.h">/
-<tag/Declaration/<tt/int __fastcall__ raise (int sig);/
-<tag/Description/<tt/raise/ sends the given signal to the program. If the
-program has installed a signal handler for the signal, this signal handler
-will be executed. If no handler has been installed, the default action for
-the raised signal will be taken. The function returns zero on success,
-nonzero otherwise.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="abort" name="abort">,
-<ref id="signal" name="signal">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>rand<label id="rand"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return a pseudo random number.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/int rand (void);/
-<tag/Description/The function returns a pseudo random number
-between 0 and <tt/RAND_MAX/ (exclusive).
-<tag/Notes/<itemize>
-<item>Without using <tt><ref id="srand" name="srand"></tt>, always the same
-flow of numbers is generated.
-<item>On startup, the function behaves as if <ref id="srand" name="srand">
-had been used with an argument of 1.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="_randomize" name="_randomize">,
-<ref id="srand" name="srand">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>readdir<label id="readdir"><p>
-
-<quote>
-<descrip>
-<tag/Function/Read a directory.
-<tag/Header/<tt/<ref id="dirent.h" name="dirent.h">/
-<tag/Declaration/<tt/struct dirent* __fastcall__ readdir (DIR* dir);/
-<tag/Description/<tt/readdir/ reads the next directory entry from the directory
-stream pointed to by <tt/dir/. It stores the data in a <tt/dirent/ structure
-and returns a pointer to it. If the end of directory is reached, or an error
-occurs, NULL is returned. In case of errors, an error code is stored into
-<tt/errno/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>The returned pointer may point to a statically allocated instance of
-<tt/struct dirent/, so it may get overwritten by subsequent calls to
-<tt/readdir/.
-<item>On several platforms, namely the CBMs and the Atari, the disk drives get
-confused when opening/closing files between directory reads. So for example a
-program that reads the list of files on a disk, and after each call to
-<tt/readdir/, opens the file to process it, will fail.<newline>
-Possible solutions are reading the directory into memory before processing the
-file list, or to reset the directory by seeking to the correct position after
-opening/closing a file:
-<verb>
-        seekdir (DIR, telldir (DIR));
-</verb>
-Platforms known to work without problems are: Apple.
-</itemize>
-<tag/Availability/POSIX 1003.1
-<tag/See also/
-<ref id="closedir" name="closedir">,
-<ref id="opendir" name="opendir">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>realloc<label id="realloc"><p>
-
-<quote>
-<descrip>
-<tag/Function/Change the size of an allocated memory block.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/void* __fastcall__ realloc (void* block, size_t size);/
-<tag/Description/<tt/realloc/ changes the size of the memory block pointed to
-by <tt/block/ to <tt/size/ bytes. If <tt/block/ is <tt/NULL/, <tt/realloc/
-behaves as if <tt/malloc/ had been called. If <tt/size/ is zero, <tt/realloc/
-behaves as if <tt/free/ had been called. On error (not enough memory
-available), <tt/realloc/ returns <tt/NULL/.
-<tag/Notes/<itemize>
-<item>The part of the memory block that is returned will have its contents
-unchanged.
-<item>This function is somewhat dangerous to use. Be careful to save the
-pointer you're passing somewhere else, otherwise
-<tscreen><verb>
-        ptr = realloc (ptr, size);
-</verb></tscreen>
-will loose your only copy of <tt/ptr/ if <tt/realloc/ returns <tt/NULL/.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="_heapadd" name="_heapadd">,
-<ref id="_heapblocksize" name="_heapblocksize">,
-<ref id="_heapmaxavail" name="_heapmaxavail">,
-<ref id="_heapmemavail" name="_heapmemavail">,
-<ref id="calloc" name="calloc">,
-<ref id="free" name="free">,
-<ref id="realloc" name="realloc">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>remove<label id="remove"><p>
-
-<quote>
-<descrip>
-<tag/Function/Delete a file.
-<tag/Header/<tt/<ref id="stdio.h" name="stdio.h">/
-<tag/Declaration/<tt/int __fastcall__ remove (const char* name);/
-<tag/Description/<tt/remove/ deletes the file with the given name. On success,
-zero is returned. On error, -1 is returned and <tt/errno/ is set to an error
-code describing the reason for the failure.
-<tag/Notes/<itemize>
-<item>This function is not available on all cc65 targets (depends on the
-availability of file I/O).
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="rename" name="rename">,
-<ref id="unlink" name="unlink">
-<tag/Example/
-<verb>
-#include &lt;stdio.h&gt;
-
-#define FILENAME "helloworld"
-
-if (remove (FILENAME) == 0) {
-    printf ("We deleted %s successfully\n", FILENAME);
-} else {
-    printf ("There was a problem deleting %s\n", FILENAME);
-}
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>rename<label id="rename"><p>
-
-<quote>
-<descrip>
-<tag/Function/Rename a file.
-<tag/Header/<tt/<ref id="stdio.h" name="stdio.h">/
-<tag/Declaration/<tt/int __fastcall__ rename (const char* oldname, const char* newname);/
-<tag/Description/<tt/rename/ renames a file (gives it a new name). On success,
-zero is returned. On error, -1 is returned and <tt/errno/ is set to an error
-code describing the reason for the failure.
-<tag/Notes/<itemize>
-<item>This function is not available on all cc65 targets (depends on the
-capabilities of the storage devices).
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="remove" name="remove">
-<tag/Example/
-<verb>
-#include &lt;stdio.h&gt;
-
-#define OLDNAME "textfile.txt"
-#define NEWNAME "textfile.bak"
-
-if (rename (OLDNAME, NEWNAME) == 0) {
-    printf ("Renamed %s to %s\n", OLDNAME, NEWNAME);
-} else {
-    printf ("Error renaming %s to %s\n", OLDNAME, NEWNAME);
-}
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>reset_brk<label id="reset_brk"><p>
-
-<quote>
-<descrip>
-<tag/Function/Resets the break vector to its original value.
-<tag/Header/<tt/<ref id="6502.h" name="6502.h">/
-<tag/Declaration/<tt/void reset_brk (void);/
-<tag/Description/<tt/reset_brk/ resets the break vector to the value it had
-before a call to <tt/set_brk/.
-<tag/Notes/<itemize>
-<item>The break vector is reset on program termination, so it's not strictly
-necessary to call this function as a part of your clean-up when exitting the program.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="reset_irq" name="reset_irq">,
-<ref id="set_brk" name="set_brk">,
-<ref id="set_irq" name="set_irq">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>reset_irq<label id="reset_irq"><p>
-
-<quote>
-<descrip>
-<tag/Function/Resets the C level interrupt request vector.
-<tag/Header/<tt/<ref id="6502.h" name="6502.h">/
-<tag/Declaration/<tt/void reset_irq (void);/
-<tag/Description/<tt/reset_irq/ resets the C level interrupt request vector.
-<tag/Notes/<itemize>
-<item>The interrupt vector is reset on program termination, so it's not strictly
-necessary to call this function as a part of your clean-up when exitting the program.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="reset_brk" name="reset_brk">,
-<ref id="set_brk" name="set_brk">,
-<ref id="set_irq" name="set_irq">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>revers<label id="revers"><p>
-
-<quote>
-<descrip>
-<tag/Function/Control revers character display.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ revers (unsigned char onoff);/
-<tag/Description/If the argument is non zero, the function enables reverse
-character display. If the argument is zero, reverse character display is
-switched off. The old value of the setting is returned.
-<tag/Notes/<itemize>
-<item>The function may not be supported by the hardware, in which case
-the call is ignored.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="textcolor" name="textcolor">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>rewinddir<label id="rewinddir"><p>
-
-<quote>
-<descrip>
-<tag/Function/Reset a directory stream.
-<tag/Header/<tt/<ref id="dirent.h" name="dirent.h">/
-<tag/Declaration/<tt/void __fastcall__ rewinddir (DIR* dir);/
-<tag/Description/<tt/rewinddir/ sets the position of the directory stream
-pointed to by <tt/dir/ to the start of the directory.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/POSIX 1003.1
-<tag/See also/
-<ref id="seekdir" name="seekdir">,
-<ref id="telldir" name="telldir">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>screensize<label id="screensize"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the dimensions of the text mode screen.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/void __fastcall__ screensize (unsigned char* x, unsigned char* y);/
-<tag/Description/The function returns the dimensions of the text mode screen.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="gotox" name="gotox">,
-<ref id="gotoxy" name="gotoxy">,
-<ref id="gotoy" name="gotoy">,
-<ref id="wherex" name="wherex">,
-<ref id="wherey" name="wherey">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>seekdir<label id="seekdir"><p>
-
-<quote>
-<descrip>
-<tag/Function/Set the position of a directory stream.
-<tag/Header/<tt/<ref id="dirent.h" name="dirent.h">/
-<tag/Declaration/<tt/void __fastcall__ seekdir (DIR* dir, long offset);/
-<tag/Description/<tt/seekdir/ sets the position of the directory stream
-pointed to by <tt/dir/ to the value given in <tt/offset/, which should be a
-value returned by <tt/<ref id="telldir" name="telldir">/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/POSIX 1003.1
-<tag/See also/
-<ref id="rewinddir" name="rewinddir">,
-<ref id="telldir" name="telldir">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>ser_close<label id="ser_close"><p>
-
-<quote>
-<descrip>
-<tag/Function/Close the port and disable interrupts
-<tag/Header/<tt/<ref id="serial.h" name="serial.h">/
-<tag/Declaration/<tt/unsigned char ser_close (void);/
-<tag/Description/Close the port by clearing buffers and disable interrupts.
-<tag/Availability/cc65
-<tag/See also/Other serial functions.
-<tag/Example/
-<verb>
-#include <serial.h>
-
-static void initialize(){
-  struct ser_params params = {
-    SER_BAUD_9600,
-    SER_BITS_8,
-    SER_STOP_1,
-    SER_PAR_MARK,
-    SER_HS_NONE
-  };
-  ser_install(lynx_comlynx); // This will activate the ComLynx
-  CLI();
-  ser_open(&amp;params);
-}
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>ser_get<label id="ser_get"><p>
-
-<quote>
-<descrip>
-<tag/Function/Read a character from serial port.
-<tag/Header/<tt/<ref id="serial.h" name="serial.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ ser_get (char* b);/
-<tag/Description/Get a character from the serial port. If no characters are
-available, the function will return SER_ERR_NO_DATA, so this is not a fatal
-error.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other serial functions.
-<tag/Example/
-Wait for a character to be available from a serial port.
-<verb>
-char ch;
-while (ser_get(&amp;ch) == SER_ERR_NO_DATA)
-  ;
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>ser_install<label id="ser_install"><p>
-
-<quote>
-<descrip>
-<tag/Function/Install an already loaded driver and return an error code.
-<tag/Header/<tt/<ref id="serial.h" name="serial.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ ser_install (void* driver);/
-<tag/Description/The function installs a driver that was already loaded into
-memory (or linked statically to the program). It returns an error code
-(<tt/SER_ERR_OK/ in case of success).
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="ser_load_driver" name="ser_load_driver">,
-<ref id="ser_uninstall" name="ser_uninstall">,
-<ref id="ser_unload" name="ser_unload">
-<tag/Example/<verb>
-ser_install(lynx_comlynx); //Include the driver statically instead of loading it.
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>ser_ioctl<label id="ser_ioctl"><p>
-
-<quote>
-<descrip>
-<tag/Function/Platform dependent code extensions.
-<tag/Header/<tt/<ref id="serial.h" name="serial.h">/
-<tag/Declaration/<tt/unsigned __fastcall__ ser_ioctl (unsigned char code, void* data);/
-<tag/Description/Some platforms have extra serial functions that are not
-supported by standard serial driver functions. You can extend the driver to support
-this extra functionality bt using ser_ioctl functions.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>These functions are not easily portable to other cc65 platforms.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other serial functions.
-<tag/Example/None
-</descrip>
-</quote>
-
-<sect1>ser_load_driver<label id="ser_load_driver"><p>
-
-<quote>
-<descrip>
-<tag/Function/Load and install a serial driver.
-<tag/Header/<tt/<ref id="serial.h" name="serial.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ ser_load_driver (const char *name);/
-<tag/Description/Load and install the driver by name.
-Will just load the driver and check if loading was successful.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other serial functions.
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>ser_open<label id="ser_open"><p>
-
-<quote>
-<descrip>
-<tag/Function/Open the port by setting the port parameters and enable interrupts
-<tag/Header/<tt/<ref id="serial.h" name="serial.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ ser_open (const struct ser_params* params);/
-<tag/Description/Open the port by setting the port parameters and enable interrupts.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other serial functions.
-<tag/Example/
-<verb>
-#include <serial.h>
-
-static void initialize(){
-  struct ser_params params = {
-    SER_BAUD_9600,
-    SER_BITS_8,
-    SER_STOP_1,
-    SER_PAR_MARK,
-    SER_HS_NONE
-  };
-  ser_install(lynx_comlynx); // This will activate the ComLynx
-  CLI();
-  ser_open(&amp;params);
-}
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>ser_put<label id="ser_put"><p>
-
-<quote>
-<descrip>
-<tag/Function/Write a character to a serial port.
-<tag/Header/<tt/<ref id="serial.h" name="serial.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ ser_put (char b);/
-<tag/Description/Send a character via the serial port. There is a transmit
-buffer, but transmitting is not done via interrupt. The function returns
-SER_ERR_OVERFLOW if there is no space left in the transmit buffer.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other serial functions.
-<tag/Example/
-<verb>
-ser_put('A');
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>ser_status<label id="ser_status"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the serial port status.
-<tag/Header/<tt/<ref id="serial.h" name="serial.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ ser_status (unsigned char* status);/
-<tag/Description/Return the serial port status.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other serial functions.
-<tag/Example/None
-</descrip>
-</quote>
-
-
-<sect1>ser_uninstall<label id="ser_uninstall"><p>
-
-<quote>
-<descrip>
-<tag/Function/Uninstall the currently loaded driver but do not unload it.
-<tag/Header/<tt/<ref id="serial.h" name="serial.h">/
-<tag/Declaration/<tt/unsigned char ser_uninstall (void);/
-<tag/Description/Uninstall the currently loaded driver but do not unload it.
-<tag/Availability/cc65
-<tag/See also/Other serial functions.
-<tag/Example/None.
-</descrip>
-</quote>
-
-<sect1>ser_unload<label id="ser_unload"><p>
-
-<quote>
-<descrip>
-<tag/Function/Uninstall, then unload the currently loaded driver.
-<tag/Header/<tt/<ref id="serial.h" name="serial.h">/
-<tag/Declaration/<tt/unsigned char ser_unload (void);/
-<tag/Description/Uninstall, then unload the currently loaded driver.
-<tag/Availability/cc65
-<tag/See also/Other serial functions.
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>set_brk<label id="set_brk"><p>
-
-<quote>
-<descrip>
-<tag/Function/Set the break vector to a user function.
-<tag/Header/<tt/<ref id="6502.h" name="6502.h">/
-<tag/Declaration/<tt/void __fastcall__ set_brk (brk_handler func);/
-<tag/Description/<tt/set_brk/ allows a user program to handle breaks within the
-program code by letting the vector point to a user written C function. The
-runtime library installs a small stub that saves the registers into global
-variables that may be accessed (and changed) by the break handler.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>The stub saves the zero page registers used by the C runtime and switches
-to a small break handler stack. This means that it is safe to execute C code,
-even if C code was interrupted. Be careful however not to use too many local
-variables, and do not enable stack checks for the handler function or any other
-function called from it.
-<item>The <tt/brk_pc/ variable points to the <tt/BRK/ instruction. If you want
-the continue with the interrupted code, you have to adjust <tt/brk_pc/,
-otherwise the <tt/BRK/ instruction will get executed over and over again.
-<item>The break vector is reset on program termination, so it's not strictly
-necessary to call <tt/<ref id="reset_brk" name="reset_brk">/ as a part of your
-clean-up when exitting the program.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="reset_brk" name="reset_brk">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>set_irq<label id="set_irq"><p>
-
-<quote>
-<descrip>
-<tag/Function/Set the C level interrupt request vector to the given address.
-<tag/Header/<tt/<ref id="6502.h" name="6502.h">/
-<tag/Declaration/<tt/void __fastcall__ set_irq (irq_handler f, void *stack_addr, size_t stack_size);/
-<tag/Description/<tt/set_irq/ allows a user program to handle interrupt requests
-(IRQs) within the program code by letting the vector point to a user written C
-function. The runtime library installs a small stub that saves the zero page
-registers used by the C runtime before calling the handler function and restores
-them after the handler function returns. Additionally the stub temporarily switches
-the C runtime stack to the stack area provided as parameter. If the handler function
-was set up to handle a "private", "exclusive" interrupt request source it must
-return the value <tt/IRQ_HANDLED/ if and only if it has verified that the current
-interrupt request actually stems from that source. In all other cases it must return
-the value <tt/IRQ_NOT_HANDLED/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>The stub saves the registers and zero page locations used by the C runtime
-and switches to the provided stack area. As a consequence, there is some
-runtime overhead, but it it is safe to execute C code, even if other C code
-was interrupted. Be careful however not to call C library functions, and do not
-enable stack checks for the handler function or any other function called from
-it.
-<item>The interrupt vector is reset on program termination, so it's not strictly
-necessary to call <tt/<ref id="reset_irq" name="reset_irq">/ as a part of your
-clean-up when exitting the program.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="reset_brk" name="reset_brk">,
-<ref id="reset_irq" name="reset_irq">,
-<ref id="set_brk" name="set_brk">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>setjmp<label id="setjmp"><p>
-
-<quote>
-<descrip>
-<tag/Function/Save the context for use with <tt/longjmp/.
-<tag/Header/<tt/<ref id="setjmp.h" name="setjmp.h">/
-<tag/Declaration/<tt/int __fastcall__ setjmp (jmp_buf buf);/
-<tag/Description/The <tt/setjmp/ function saves the current context in <tt/buf/
-for subsequent use by the <tt/<ref id="longjmp" name="longjmp">/ function and
-returns zero.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item><tt/setjmp/ is actually a macro as required by the ISO standard.
-<item><tt/setjmp/ will not save the signal context.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="longjmp" name="longjmp">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>setlocale<label id="setlocale"><p>
-
-<quote>
-<descrip>
-<tag/Function/Selects a locale.
-<tag/Header/<tt/<ref id="locale.h" name="locale.h">/
-<tag/Declaration/<tt/char* __fastcall__ setlocale (int category, const char* locale);/
-<tag/Description/<tt/setlocale/ sets or queries the program's locale.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>cc65 supports only the "C" locale, so calling this function to set a
-different locale has no effect.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="localeconv" name="localeconv">,
-<ref id="strcoll" name="strcoll">
-<ref id="strxfrm" name="strxfrm">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>signal<label id="signal"><p>
-
-<quote>
-<descrip>
-<tag/Function/Install a signal handler.
-<tag/Header/<tt/<ref id="signal.h" name="signal.h">/
-<tag/Declaration/<tt/__sigfunc __fastcall__ signal (int sig, __sigfunc func);/
-<tag/Description/<tt/signal/ installs a handler for the given signal. The
-handler may either be a user supplied function, or one of the predefined
-signal handlers <tt/SIG_IGN/ or <tt/SIG_DFL/. The function returns the
-previous value if the signal , or the special function vector SIG_ERR in
-case of an error.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="abort" name="abort">,
-<ref id="raise" name="raise">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>sleep<label id="sleep"><p>
-
-<quote>
-<descrip>
-<tag/Function/Sleep for a specified amount of time.
-<tag/Header/<tt/<ref id="unistd.h" name="unistd.h">/
-<tag/Declaration/<tt/void __fastcall__ sleep (unsigned seconds);/
-<tag/Description/The function will return after the specified number of
-seconds have elapsed.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/POSIX 1003.1
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>slow<label id="slow"><p>
-
-<quote>
-<descrip>
-<tag/Function/Switch the C128 into 1MHz mode.
-<tag/Header/<tt/<ref id="c128.h" name="c128.h">/
-<tag/Declaration/<tt/void slow (void);/
-<tag/Description/The function will switch the clock of the C128 to 1MHz. This
-will halve the speed compared to fast mode.
-<tag/Notes/<itemize>
-<item>The function is specific to the C128.
-</itemize>
-<tag/Availability/C128
-<tag/See also/
-<ref id="fast" name="fast">,
-<ref id="toggle_videomode" name="toggle_videomode">,
-<ref id="videomode" name="videomode">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>srand<label id="srand"><p>
-
-<quote>
-<descrip>
-<tag/Function/Initialize the pseudo random number generator.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/void __fastcall__ srand (unsigned seed);/
-<tag/Description/The function initializes the random number generator using
-the given seed. On program startup, the generator behaves as if <tt/srand/ has
-been called with an argument of 1.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="_randomize" name="_randomize">,
-<ref id="rand" name="rand">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strcasecmp<label id="strcasecmp"><p>
-
-<quote>
-<descrip>
-<tag/Function/Compare two strings case insensitive.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/int __fastcall__ strcasecmp (const char* s1, const char* s2);/
-<tag/Description/The <tt/strcasecmp/ function compares the two strings passed
-as parameters without case sensitivity. It returns a value that is less than
-zero if <tt/s1/ is less than <tt/s2/, zero if <tt/s1/ is the same as <tt/s2/,
-and a value greater than zero if <tt/s1/ is greater than <tt/s2/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>The function is not available in strict ANSI mode.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="strcmp" name="strcmp">,
-<ref id="strcoll" name="strcoll">,
-<ref id="stricmp" name="stricmp">,
-<ref id="strncmp" name="strncmp">,
-<ref id="strxfrm" name="strxfrm">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strcat<label id="strcat"><p>
-
-<quote>
-<descrip>
-<tag/Function/Concatentate two strings.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/char* __fastcall__ strcat (char* s1, const char* s2);/
-<tag/Description/The <tt/strcat/ function appends a copy of the string
-pointed to by s2 (including the terminating null byte) to the end of the
-string pointed to by s1. The initial byte of s2 overwrites the null byte at
-the end of s1.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>If copying takes place between objects that overlap, the behaviour
-is undefined.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="strcpy" name="strcpy">,
-<ref id="strncat" name="strncat">,
-<ref id="strncpy" name="strncpy">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strchr<label id="strchr"><p>
-
-<quote>
-<descrip>
-<tag/Function/Search for a character in a string.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/char* __fastcall__ strchr (const char* s, int c);/
-<tag/Description/The <tt/strchr/ function locates the first occurrence of <tt/c/
-(converted to a char) in the string pointed to by <tt/s/. The terminating null
-byte is considered to be part of the string. Upon completion, the function
-returns a pointer to the byte, or a null pointer if the byte was not found.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="memchr" name="memchr">,
-<ref id="strrchr" name="strrchr">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strcmp<label id="strcmp"><p>
-
-<quote>
-<descrip>
-<tag/Function/Compare two strings.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/int __fastcall__ strcmp (const char* s1, const char* s2);/
-<tag/Description/The <tt/strcmp/ function compares the two strings passed as
-parameters. It returns a value that is less than zero if <tt/s1/ is less than
-<tt/s2/, zero if <tt/s1/ is the same as <tt/s2/, and a value greater than zero
-if <tt/s1/ is greater than <tt/s2/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="strcasecmp" name="strcasecmp">,
-<ref id="strcoll" name="strcoll">,
-<ref id="stricmp" name="stricmp">,
-<ref id="strncmp" name="strncmp">
-<ref id="strxfrm" name="strxfrm">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strcoll<label id="strcoll"><p>
-
-<quote>
-<descrip>
-<tag/Function/Compare two strings.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/int __fastcall__ strcoll (const char* s1, const char* s2);/
-<tag/Description/The <tt/strcoll/ function compares the two strings passed as
-parameters, according to the collating sequence set by <tt/<ref id="setlocale"
-name="setlocale">/. It returns a value that is less than zero if <tt/s1/ is
-less than <tt/s2/, zero if <tt/s1/ is the same as <tt/s2/, and a value greater
-than zero if <tt/s1/ is greater than <tt/s2/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="setlocale" name="setlocale">,
-<ref id="strcasecmp" name="strcasecmp">,
-<ref id="strcmp" name="strcmp">,
-<ref id="stricmp" name="stricmp">,
-<ref id="strncmp" name="strncmp">,
-<ref id="strxfrm" name="strxfrm">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strcpy<label id="strcpy"><p>
-
-<quote>
-<descrip>
-<tag/Function/Copy a string.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/char* __fastcall__ strcpy (char* s1, const char* s2);/
-<tag/Description/The <tt/strcpy/ function copies the string pointed to by
-<tt/s2/ (including the terminating null byte) into the array pointed to by
-<tt/s1/. The function will always return <tt/s1/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>If copying takes place between objects that overlap, the behaviour
-is undefined.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="strcat" name="strcat">,
-<ref id="strncat" name="strncat">,
-<ref id="strncpy" name="strncpy">
-<tag/Example/
-<verb>
-#include &lt;string.h&gt;
-
-static char hello[14];
-
-strcpy (hello, "Hello world!\n");
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>strcspn<label id="strcspn"><p>
-
-<quote>
-<descrip>
-<tag/Function/Compute the length of a substring.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/size_t __fastcall__ strcspn (const char* s, const char* set);/
-<tag/Description/The <tt/strcspn/ function computes and returns the length of
-the substring pointed to by <tt/s/ which does <em>not</em> consist of
-characters contained in the string <tt/set/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="strqtok" name="strqtok">,
-<ref id="strspn" name="strspn">,
-<ref id="strstr" name="strstr">,
-<ref id="strtok" name="strtok">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strdup<label id="strdup"><p>
-
-<quote>
-<descrip>
-<tag/Function/Allocate a copy of a string on the heap.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/char* __fastcall__ strdup (const char* s);/
-<tag/Description/<tt/strdup/ allocates a memory block on the heap, big enough
-to hold a copy of <tt/s/ including the terminating zero. If the allocation
-fails, <tt/NULL/ is returned, otherwise <tt/s/ is copied into the allocated
-memory block, and a pointer to the block is returned.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>It is up to the caller to free the allocated memory block.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="free" name="free">,
-<ref id="malloc" name="malloc">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strerror<label id="strerror"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return a string describing an error code.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/char* __fastcall__ strerror (int errcode);/
-<tag/Description/The <tt/strerror/ function returns a string describing the
-given error code. If an invalid error code is passed, the string "Unknown
-error" is returned, and <tt/errno/ is set to <tt/EINVAL/. In all other cases,
-<tt/errno/ is left untouched.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>While the return type of the function is a <tt/char*/, the returned
-string must not be modified by the caller!
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="_stroserror" name="_stroserror">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>stricmp<label id="stricmp"><p>
-
-<quote>
-<descrip>
-<tag/Function/Compare two strings case insensitive.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/int __fastcall__ stricmp (const char* s1, const char* s2);/
-<tag/Description/The <tt/stricmp/ function compares the two strings passed as
-parameters without case sensitivity. It returns a value that is less than zero
-if <tt/s1/ is less than <tt/s2/, zero if <tt/s1/ is the same as <tt/s2/, and a
-value greater than zero if <tt/s1/ is greater than <tt/s2/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>The function is not available in strict ANSI mode.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="strcasecmp" name="strcasecmp">,
-<ref id="strcmp" name="strcmp">,
-<ref id="strcoll" name="strcoll">,
-<ref id="strncmp" name="strncmp">,
-<ref id="strxfrm" name="strxfrm">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strlen<label id="strlen"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the length of a string.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/size_t __fastcall__ strlen (const char* s);/
-<tag/Description/The <tt/strlen/ function computes the number of bytes in the
-string to which s points, not including the terminating null byte.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>When compiling with <tt/-Os/ (inline known standard functions), the
-function does not work correctly for strings with more than 255 characters.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="strcpy" name="strcpy">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strlower<label id="strlower"><p>
-
-<quote>
-<descrip>
-<tag/Function/Make a string lower case.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/char* __fastcall__ strlower (char* s);/
-<tag/Description/The <tt/strlower/ function will apply the <tt/tolower/
-function to each character of a string. The function will always return <tt/s/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>The function prototype is unavailable when compiling in strict ANSI mode.
-<item>An alias name for this function is <tt/strlwr/.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="strupper" name="strupper">,
-<ref id="tolower" name="tolower">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strlwr<label id="strlwr"><p>
-
-<quote>
-See <tt/strlower/.
-</quote>
-
-
-<sect1>strncat<label id="strncat"><p>
-
-<quote>
-<descrip>
-<tag/Function/Concatentate two strings.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/char* __fastcall__ strncat (char* s1, const char* s2, size_t n);/
-<tag/Description/The <tt/strncat/ function appends not more than n characters
-of the string pointed to by s2 to the end of the string pointed to by s1. The
-terminating null character at the end of s1 is overwritten. A terminating null
-character is appended to the result, even if not all of s2 is appended to s1.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>If copying takes place between objects that overlap, the behaviour
-is undefined.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="strcpy" name="strcpy">,
-<ref id="strncat" name="strncat">,
-<ref id="strncpy" name="strncpy">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strncmp<label id="strncmp"><p>
-
-<quote>
-<descrip>
-<tag/Function/Compare two strings.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/int __fastcall__ strncmp (const char* s1, const char* s2, size_t count);/
-<tag/Description/The <tt/strncmp/ function compares not more than <tt/count/
-characters of the two strings passed as parameters. It returns a value that is
-less than zero if the first <tt/count/ characters of <tt/s1/ are less than
-<tt/s2/, zero if they are identical, and a value greater than zero they are
-greater.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="strcasecmp" name="strcasecmp">,
-<ref id="strcmp" name="strcmp">,
-<ref id="strcoll" name="strcoll">,
-<ref id="stricmp" name="stricmp">,
-<ref id="strxfrm" name="strxfrm">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strncpy<label id="strncpy"><p>
-
-<quote>
-<descrip>
-<tag/Function/Copy part of a string.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/char* __fastcall__ strncpy (char* s1, const char* s2, size_t n);/
-<tag/Description/The <tt/strncpy/ function copies not more than <tt/n/ bytes from
-the array pointed to by <tt/s2/ to the array pointed to by <tt/s1/. If the array
-pointed to by <tt/s2/ is a string that is shorter than <tt/n/ bytes, null bytes are
-appended to the copy in the array pointed to by <tt/s1/, until <tt/n/ bytes are
-written. The function always will return <tt/s1/.
-<tag/Notes/<itemize>
-<item>The function is available only as a fastcall function; so, it may be used
-only in the presence of a prototype.
-<item>If there is no null byte in the first <tt/n/ bytes of the array pointed
-to by <tt/s2/, the result is <em/not/ null-terminated!
-<item>If copying takes place between objects that overlap, the behaviour is
-undefined.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="memcpy" name="memcpy">,
-<ref id="strcat" name="strcat">,
-<ref id="strcpy" name="strcpy">,
-<ref id="strncat" name="strncat">
-<tag/Example/
-<verb>
-#include <string.h>
-
-static char hello[6];
-
-strncpy (hello, "Hello world!\n", sizeof hello - 1)[5] = '\0';
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>strqtok<label id="strqtok"><p>
-
-<quote>
-<descrip>
-<tag/Function/Break a string into tokens.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/char* __fastcall__ strqtok (char* s1, const char* s2);/
-<tag/Description/<tt/strqtok()/ will break the string <tt/s1/ into a sequence of
-tokens, which are delimited by either quotation marks or characters from the
-string <tt/s2/. Tokens inside quotation marks may contain characters from <tt/s2/
-(they aren't delimiters there). The first call to <tt/strqtok()/ will return a
-pointer to the first token in the string <tt/s1/. The following calls must pass
-a <tt/NULL/ pointer as <tt/s1/, in order to get the next token in the string.
-Different sets of delimiters may be used for the subsequent calls to <tt/strqtok()/.
-<tag/Notes/<itemize>
-<item>The function is available only as a fastcall function; so, it may be used
-only in the presence of a prototype.
-<item><tt/strqtok()/ will modify the string <tt/s1/.
-<item>The function will forget where it is in the <tt/s1/ string if it is given
-a second <tt/s1/ string before it finishes the first one.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="strcspn" name="strcspn">,
-<!-- <ref id="strpbrk" name="strpbrk">, -->
-<ref id="strspn" name="strspn">,
-<ref id="strtok" name="strtok">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strrchr<label id="strrchr"><p>
-
-<quote>
-<descrip>
-<tag/Function/Search for a character in a string.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/char* __fastcall__ strrchr (const char* s, int c);/
-<tag/Description/The <tt/strrchr/ function locates the last occurrence of <tt/c/
-(converted to a char) in the string pointed to by <tt/s/. The terminating null
-byte is considered to be part of the string. Upon completion, the function
-returns a pointer to the byte, or a null pointer if the byte was not found.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="strchr" name="strchr">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strspn<label id="strspn"><p>
-
-<quote>
-<descrip>
-<tag/Function/Compute the length of a substring.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/size_t __fastcall__ strspn (const char* s, const char* set);/
-<tag/Description/The <tt/strspn/ function computes and returns the length of
-the substring pointed to by <tt/s/ which does consist only of characters
-contained in the string <tt/set/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="strcspn" name="strcspn">,
-<ref id="strstr" name="strstr">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strstr<label id="strstr"><p>
-
-<quote>
-<descrip>
-<tag/Function/Find a substring.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/char* __fastcall__ strstr (const char* str, const char* substr);/
-<tag/Description/<tt/strstr/ searches for the first occurance of the string
-<tt/substr/ within <tt/str/. If found, it returns a pointer to the copy,
-otherwise it returns <tt/NULL/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="strcspn" name="strcspn">,
-<ref id="strspn" name="strspn">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strtok<label id="strtok"><p>
-
-<quote>
-<descrip>
-<tag/Function/Break a string into tokens.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/char* __fastcall__ strtok (char* s1, const char* s2);/
-<tag/Description/<tt/strtok()/ will break the string <tt/s1/ into a sequence of
-tokens, which are delimited by characters from the string <tt/s2/. The first call
-to <tt/strtok()/ will return a pointer to the first token in the string <tt/s1/.
-The following calls must pass a <tt/NULL/ pointer as <tt/s1/, in order to get
-the next token in the string. Different sets of delimiters may be used for the
-subsequent calls to <tt/strtok()/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item><tt/strtok()/ will modify the string <tt/s1/.
-<item>The function will forget where it is in the <tt/s1/ string if it is given
-a second <tt/s1/ string before it finishes the first one.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="strcspn" name="strcspn">,
-<!-- <ref id="strpbrk" name="strpbrk">, -->
-<ref id="strqtok" name="strqtok">,
-<ref id="strspn" name="strspn">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strxfrm<label id="strxfrm"><p>
-
-<quote>
-<descrip>
-<tag/Function/Transform a string.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/size_t __fastcall__ strxfrm (char* s1, const char* s2, size_t n);/
-<tag/Description/The <tt/strxfrm/ function transforms the string pointed to by
-s2 and places the resulting string into the string pointed to by s1. The
-transformation is such that if the <tt/strcmp/ function is applied to two
-transformed strings, it returns a value greater than, equal to, or less than
-zero, corresponding to the result of the <tt/strcoll/ function applied to the
-same two original strings. No more than n characters are placed into the
-resulting array pointed to by s1, including the terminating null character.
-<tag/Notes/<itemize>
-<item><tt/s1/ and <tt/s2/ must not point to the same memory area, otherwise
-the behaviour is undefined.
-<item>If <tt/n/ is zero, <tt/s1/ may be a NULL pointer.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>Since cc65 doesn't support different charcter sets, <tt/strxfrm/ will
-just copy s2 to s1 using <tt><ref id="strncpy" name="strncpy"></tt>.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="strcmp" name="strcmp">,
-<ref id="strcoll" name="strcoll">,
-<ref id="strncpy" name="strncpy">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strupper<label id="strupper"><p>
-
-<quote>
-<descrip>
-<tag/Function/Make a string upper case.
-<tag/Header/<tt/<ref id="string.h" name="string.h">/
-<tag/Declaration/<tt/char* __fastcall__ strupper (char* s);/
-<tag/Description/The <tt/strupper/ function will apply the <tt/toupper/
-function to each character of a string. The function will always return <tt/s/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>The function prototype is unavailable when compiling in strict ANSI mode.
-<item>An alias name for this function is <tt/strupr/.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="strlower" name="strlower">
-<ref id="toupper" name="toupper">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>strupr<label id="strupr"><p>
-
-<quote>
-See <tt/strupper/.
-</quote>
-
-
-<sect1>telldir<label id="telldir"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the current position of a directory stream.
-<tag/Header/<tt/<ref id="dirent.h" name="dirent.h">/
-<tag/Declaration/<tt/long __fastcall__ telldir (DIR* dir);/
-<tag/Description/<tt/telldir/ returns the current position of a directory
-stream. The return value may be used in subsequent calls to
-<tt/<ref id="seekdir" name="seekdir">/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/POSIX 1003.1
-<tag/See also/
-<ref id="seekdir" name="seekdir">,
-<ref id="telldir" name="telldir">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>textcolor<label id="textcolor"><p>
-
-<quote>
-<descrip>
-<tag/Function/Set the text color.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ textcolor (unsigned char color);/
-<tag/Description/The function will set a new text color. It returns the old
-(current) text color. Text output using any <tt/conio.h/ function will use
-the color set by this function.
-<tag/Notes/<itemize>
-<item>Text colors are system dependent. The function may have no effect
-on systems where the text color cannot be changed.
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="bgcolor" name="bgcolor">,
-<ref id="bordercolor" name="bordercolor">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_arc<label id="tgi_arc"><p>
-
-<quote>
-<descrip>
-<tag/Function/Draw an elliptic arc in the current color.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_arc (int x, int y,
-unsigned char rx, unsigned char ry, unsigned sa, unsigned ea);/
-<tag/Description/The function draws an elliptic arc with center at x/y and
-radii rx/ry using the current drawing color. The arc covers the angle
-between sa and ea (startangle and endangle), which must be in the range
-0..360.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>The function behaves unexpectedly or may crash if the angles are out
-of range.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="tgi_bar" name="tgi_bar">,
-<ref id="tgi_circle" name="tgi_circle">,
-<ref id="tgi_ellipse" name="tgi_ellipse">,
-<ref id="tgi_pieslice" name="tgi_pieslice">,
-<ref id="tgi_setcolor" name="tgi_setcolor">
-<tag/Example/<verb>
-/* Draw the upper half of an ellipse */
-tgi_setcolor(TGI_COLOR_BLUE);
-tgi_arc (50, 50, 40, 20, 0, 180);
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>tgi_bar<label id="tgi_bar"><p>
-
-<quote>
-<descrip>
-<tag/Function/The function fills a rectangle on the drawpage with the current
-color.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_bar (int x1, int y1, int x2, int y2);/
-<tag/Description/The function fills a rectangle on the drawpage with the current
-color.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other tgi function
-<tag/Example/<verb>
-tgi_setcolor(TGI_COLOR_GREEN);
-tgi_bar(10, 10, 100, 60);
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>tgi_circle<label id="tgi_circle"><p>
-
-<quote>
-<descrip>
-<tag/Function/The function draws a circle in the current color.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_circle (int x, int y, unsigned char radius);/
-<tag/Description/The function draws a circle in the current color.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="tgi_arc" name="tgi_arc">,
-<ref id="tgi_bar" name="tgi_bar">,
-<ref id="tgi_ellipse" name="tgi_ellipse">,
-<ref id="tgi_pieslice" name="tgi_pieslice">,
-<ref id="tgi_setcolor" name="tgi_setcolor">
-<tag/Example/<verb>
-tgi_setcolor(TGI_COLOR_BLACK);
-tgi_circle(50, 40, 40);
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>tgi_clear<label id="tgi_clear"><p>
-
-<quote>
-<descrip>
-<tag/Function/Clear the drawpage
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void tgi_clear (void);/
-<tag/Description/Clear the drawpage
-<tag/Availability/cc65
-<tag/See also/Other tgi functions
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_done<label id="tgi_done"><p>
-
-<quote>
-<descrip>
-<tag/Function/End graphics mode, switch back to text mode.
-Will NOT uninstall or unload the driver!
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void tgi_done (void);/
-<tag/Description/End graphics mode, switch back to text mode.
-Will NOT uninstall or unload the driver!
-<tag/Availability/cc65
-<tag/See also/Other tgi functions
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_ellipse<label id="tgi_ellipse"><p>
-
-<quote>
-<descrip>
-<tag/Function/The function draws an ellipse in the current color.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_ellipse (int x, int y, unsigned char rx, unsigned char ry);/
-<tag/Description/The function draws an ellipse at position x/y with radii
-rx and ry, using the current drawing color.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="tgi_arc" name="tgi_arc">,
-<ref id="tgi_bar" name="tgi_bar">,
-<ref id="tgi_circle" name="tgi_circle">,
-<ref id="tgi_pieslice" name="tgi_pieslice">,
-<ref id="tgi_setcolor" name="tgi_setcolor">
-<tag/Example/<verb>
-tgi_setcolor(TGI_COLOR_RED);
-tgi_ellipse (50, 40, 40, 20);
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>tgi_free_vectorfont<label id="tgi_free_vectorfont"><p>
-
-<quote>
-<descrip>
-<tag/Function/Free a vector font that was previously loaded into memory.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_free_vectorfont (const tgi_vectorfont* font);/
-<tag/Description/Free a vector font that was previously loaded into memory.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="tgi_load_vectorfont" name="tgi_load_vectorfont">,
-<ref id="tgi_install_vectorfont" name="tgi_install_vectorfont">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_getaspectratio<label id="tgi_getaspectratio"><p>
-
-<quote> <descrip> <tag/Function/Return the pixel aspect ratio.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/unsigned tgi_getaspectratio (void);/
-<tag/Description/The function returns the pixel aspect ratio for the current
-driver and display as an 8.8 fixed point value. It may be used to correct
-geometric shapes so they look correct on the display. As an example, a circle
-with a radius of 100 pixels may look elliptic on some driver/display
-combinations if the aspect ratio is not 1.00.
-<tag/Notes/<itemize>
-<item>The aspect ratio is encoded in the TGI driver which assumes a "standard"
-monitor for the given platform. The aspect ratio may be wrong if another
-monitor is used.
-<item>No TGI function will use the aspect ratio. It is up to the programmer to
-make use of it.
-<item>The <ref id="tgi_setaspectratio" name="tgi_setaspectratio"> function can
-be used to change the aspect ratio for a loaded driver. The value is not reset
-by <ref id="tgi_init" name="tgi_init">, so if a driver is linked statically to
-an application, switching into and out of graphics mode will not restore the
-original aspect ratio.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="tgi_setaspectratio" name="tgi_setaspectratio">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_getcolor<label id="tgi_getcolor"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the current drawing color.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/unsigned char tgi_getcolor (void);/
-<tag/Description/The actual color is an index to a palette. During tgi_init
-you will get a default palette. The number of colors depend on the platform.
-All platforms recognize at least TGI_COLOR_BLACK and TGI_COLOR_WHITE. But some
-platforms have many more predefined colors. If you paint using TGI_COLOR_GREEN
-and then you change the green of the palette to blue using tgi_setpalette then
-after this painting in TGI_COLOR_GREEN will actually be blue.
-<tag/Availability/cc65
-<tag/See also/Other tgi functions
-<tag/Example/<verb>
-color = tgi_getcolor();
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>tgi_getcolorcount<label id="tgi_getcolorcount"><p>
-
-<quote>
-<descrip>
-<tag/Function/Get the number of available colors.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/unsigned char tgi_getcolorcount (void);/
-<tag/Description/Tgi platforms use indexed color palettes. This function
-returns the number of entries we can use in the palette.
-<tag/Availability/cc65
-<tag/See also/Other tgi functions
-<tag/Example/<verb>
-if (tgi_getcolorcount() == 2) {
-  printf("Only monochrome graphics is supported\n");
-}
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>tgi_getdefpalette<label id="tgi_getdefpalette"><p>
-
-<quote>
-<descrip>
-<tag/Function/Get the palette installed by default.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/const unsigned char* tgi_getdefpalette (void);/
-<tag/Description/The tgi driver has a default palette that is active at startup.
-The named colors TGI_COLOR_BLACK, TGI_COLOR_WHITE, TGI_COLOR_RED... need this
-palette to work correctly.
-<tag/Availability/cc65
-<tag/See also/Other tgi functions
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_geterror<label id="tgi_geterror"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the error code for the last operation.
-This will also clear the error.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/unsigned char tgi_geterror (void);/
-<tag/Description/Return the error code for the last operation.
-This will also clear the error.
-<tag/Availability/cc65
-<tag/See also/Other tgi functions
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_geterrormsg<label id="tgi_geterrormsg"><p>
-
-<quote>
-<descrip>
-<tag/Function/Get an error message describing the error.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/const char* __fastcall__ tgi_geterrormsg (unsigned char code);/
-<tag/Description/Get an error message describing the error.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other tgi functions
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_getmaxcolor<label id="tgi_getmaxcolor"><p>
-
-<quote>
-<descrip>
-<tag/Function/Get the highest index of the palette.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/unsigned char tgi_getmaxcolor (void);/
-<tag/Description/Get the highest index of the palette.
-<tag/Availability/cc65
-<tag/See also/Other tgi functions
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_getmaxx<label id="tgi_getmaxx"><p>
-
-<quote>
-<descrip>
-<tag/Function/Get the maximum x coordinate that can be used on this screen.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/unsigned tgi_getmaxx (void);/
-<tag/Description/Get the maximum x coordinate that can be used on this screen.
-<tag/Availability/cc65
-<tag/See also/Other tgi functions
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_getmaxy<label id="tgi_getmaxy"><p>
-
-<quote>
-<descrip>
-<tag/Function/Get the maximum y coordinate that can be used on this screen.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/unsigned tgi_getmaxy (void);/
-<tag/Description/Get the maximum y coordinate that can be used on this screen.
-<tag/Availability/cc65
-<tag/See also/Other tgi functions
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_getpagecount<label id="tgi_getpagecount"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the number of screen pages available.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/unsigned tgi_getpagecount (void);/
-<tag/Description/Return the number of screen pages available.
-<tag/Availability/cc65
-<tag/See also/
-<ref id="tgi_setdrawpage" name="tgi_setdrawpage">,
-<ref id="tgi_setviewpage" name="tgi_setviewpage">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_getpalette<label id="tgi_getpalette"><p>
-
-<quote>
-<descrip>
-<tag/Function/Get the palette installed.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/const unsigned char* tgi_getpalette (void);/
-<tag/Description/Get the palette installed.
-<tag/Availability/cc65
-<tag/See also/Other tgi functions
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_getpixel<label id="tgi_getpixel"><p>
-
-<quote>
-<descrip>
-<tag/Function/Get the color of a pixel from the viewpage.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ tgi_getpixel (int x, int y);/
-<tag/Description/Get the color of a pixel from the viewpage.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_getxres<label id="tgi_getxres"><p>
-
-<quote>
-<descrip>
-<tag/Function/Get number of horisontal pixels on the screen.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/unsigned tgi_getxres (void);/
-<tag/Description/Get number of horisontal pixels on the screen.
-This is same as tgi_maxx()+1.
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_getyres<label id="tgi_getyres"><p>
-
-<quote>
-<descrip>
-<tag/Function/Get number of vertical pixels on the screen.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/unsigned tgi_getyres (void);/
-<tag/Description/Get number of vertical pixels on the screen.
-This is same as tgi_maxy()+1.
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_gotoxy<label id="tgi_gotoxy"><p>
-
-<quote>
-<descrip>
-<tag/Function/Set graphics cursor at x, y.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_gotoxy (int x, int y);/
-<tag/Description/Set graphics cursor at x, y.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_init<label id="tgi_init"><p>
-
-<quote>
-<descrip>
-<tag/Function/Initialize the already loaded graphics driver.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void tgi_init (void);/
-<tag/Description/The tgi_init function will set the default palette to the
-hardware.
-<tag/Notes/<itemize>
-<item><tt/tgi_init/ will not clear the screen. This allows switching between
-text and graphics mode on platforms that have separate memory areas for the
-screens. If you want the screen cleared, call <tt/<ref id="tgi_clear"
-name="tgi_clear">/ after <tt/tgi_init/.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/<verb>
-tgi_install(tgi_static_stddrv); //Include the driver statically instead of loading it.
-tgi_init(); //Set up the default palette and clear the screen.
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>tgi_install<label id="tgi_install"><p>
-
-<quote>
-<descrip>
-<tag/Function/Install an already loaded driver and return an error code.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/unsigned char __fastcall__ tgi_install (void* driver);/
-<tag/Description/The function installs a driver that was already loaded into
-memory (or linked statically to the program). It returns an error code
-(<tt/TGI_ERR_OK/ in case of success).
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="tgi_load_driver" name="tgi_load_driver">,
-<ref id="tgi_uninstall" name="tgi_uninstall">,
-<ref id="tgi_unload" name="tgi_unload">
-<tag/Example/<verb>
-tgi_install(tgi_static_stddrv); //Include the driver statically instead of loading it.
-tgi_init(); //Set up the default palette and clear the screen.
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>tgi_install_vectorfont<label id="tgi_install_vectorfont"><p>
-
-<quote>
-<descrip>
-<tag/Function/Install an already loaded driver and return an error code.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_install_vectorfont (const tgi_vectorfont* font);/
-<tag/Description/
-Install a vector font for use. More than one vector font can be loaded,
-but only one can be active. This function is used to tell which one. Call
-with a NULL pointer to uninstall the currently installed font.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="tgi_load_vectorfont" name="tgi_load_vectorfont">,
-<ref id="tgi_free_vectorfont" name="tgi_free_vectorfont">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_ioctl<label id="tgi_ioctl"><p>
-
-<quote>
-<descrip>
-<tag/Function/Platform dependent code extensions.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/unsigned __fastcall__ tgi_ioctl (unsigned char code, void* data);/
-<tag/Description/Some platforms have extra display hardware that is not
-supported by standard tgi functions. You can extend the driver to support
-this extra hardware using tgi_ioctl functions.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>These functions are not easily portable to other cc65 platforms.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/<verb>
-#define tgi_sprite(spr) tgi_ioctl(0, (void*)(spr))
-#define tgi_flip() tgi_ioctl(1, (void*)0)
-#define tgi_setbgcolor(bgcol) tgi_ioctl(2, (void*)(bgcol))
-#define tgi_setframerate(rate) tgi_ioctl(3, (void*)(rate))
-#define tgi_busy() tgi_ioctl(4, (void*)0)
-#define tgi_updatedisplay() tgi_ioctl(4, (void*)1)
-if (!tgi_busy()) {
-  tgi_sprite(&amp;background);
-  tgi_setcolor(TGI_COLOR_BLUE);
-  tgi_outttextxy(20,40,"Hello World");
-  tgi_updatedisplay();
-}
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>tgi_line<label id="tgi_line"><p>
-
-<quote>
-<descrip>
-<tag/Function/Draw a line in the current drawing color.
-The graphics cursor will be set to x2/y2 by this call.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_line (int x1, int y1, int x2, int y2);/
-<tag/Description/Draw a line in the current drawing color.
-The graphics cursor will be set to x2/y2 by this call.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_lineto<label id="tgi_lineto"><p>
-
-<quote>
-<descrip>
-<tag/Function/Draw a line in the current drawing color from the graphics
-cursor to the new end point. The graphics cursor will be updated to x2/y2.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_lineto (int x2, int y2);/
-<tag/Description/Draw a line in the current drawing color from the graphics
-cursor to the new end point. The graphics cursor will be updated to x2/y2.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_load_driver<label id="tgi_load_driver"><p>
-
-<quote>
-<descrip>
-<tag/Function/Load and install the given driver.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_load_driver (const char *name);/
-<tag/Description/Load and install the driver by name.
-Will just load the driver and check if loading was successful.
-Will not switch to graphics mode.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_load_vectorfont<label id="tgi_load_vectorfont"><p>
-
-<quote>
-<descrip>
-<tag/Function/Load the given vector font.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/const tgi_vectorfont* __fastcall__ tgi_load_vectorfont (const char* name);/
-<tag/Description/
-Load a vector font into memory and return it. In case of errors, NULL is
-returned and an error is set, which can be retrieved using tgi_geterror.
-To use the font, it has to be installed using tgi_install_vectorfont.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="tgi_install_vectorfont" name="tgi_install_vectorfont">,
-<ref id="tgi_free_vectorfont" name="tgi_free_vectorfont">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_outtext<label id="tgi_outtext"><p>
-
-<quote>
-<descrip>
-<tag/Function/Output text at the current graphics cursor position.
-The graphics cursor is moved to the end of the text.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_outtext (const char* s);/
-<tag/Description/Output text at the current graphics cursor position.
-The graphics cursor is moved to the end of the text.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_outtextxy<label id="tgi_outtextxy"><p>
-
-<quote>
-<descrip>
-<tag/Function/Output text at the given cursor position.
-The graphics cursor is moved to the end of the text.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_outtextxy (int x, int y, const char* s);/
-<tag/Description/Output text at the given cursor position.
-The graphics cursor is moved to the end of the text.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_pieslice<label id="tgi_pieslice"><p>
-
-<quote>
-<descrip>
-<tag/Function/Draw an elliptic pie slice in the current color.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_pie slice (int x, int y,
-unsigned char rx, unsigned char ry, unsigned sa, unsigned ea);/
-<tag/Description/The function draws an elliptic pie slice with center at x/y
-and radii rx/ry using the current drawing color. The pie slice covers the angle
-between sa and ea (startangle and endangle), which must be in the range
-0..360.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>The function behaves unexpectedly or may crash if the angles are out
-of range.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="tgi_bar" name="tgi_arc">,
-<ref id="tgi_bar" name="tgi_bar">,
-<ref id="tgi_circle" name="tgi_circle">,
-<ref id="tgi_ellipse" name="tgi_ellipse">,
-<ref id="tgi_setcolor" name="tgi_setcolor">
-<tag/Example/<verb>
-/* Draw the closed upper half of an ellipse */
-tgi_setcolor(TGI_COLOR_BLUE);
-tgi_pieslice (50, 50, 40, 20, 0, 180);
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>tgi_setaspectratio<label id="tgi_setaspectratio"><p>
-
-<quote> <descrip> <tag/Function/Set the pixel aspect ratio.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_setaspectratio (unsigned ratio);/
-<tag/Description/The function sets the pixel aspect ratio for the current
-driver and display. The argument is an 8.8 fixed point value. The aspect ratio
-may be used to correct geometric shapes so they look correct on a given
-display. As an example, a circle with a radius of 100 pixels may look elliptic
-on some driver/display combinations if the aspect ratio is not 1.00.
-<tag/Notes/<itemize>
-<item>The aspect ratio is encoded in the TGI driver which assumes a "standard"
-monitor for the given platform. The aspect ratio may be wrong if another
-monitor is used.
-<item>No TGI function will use the aspect ratio. It is up to the programmer to
-make use of it.
-<item>The <tt/tgi_setaspectratio/ function can be used to change the aspect
-ratio for a loaded driver. The value is not reset by <ref id="tgi_init"
-name="tgi_init">, so if a driver is linked statically to an application,
-switching into and out of graphics mode will not restore the original aspect
-ratio.
-<item>The function is available only as a fastcall function; so, it may be used
-only in the presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="tgi_getaspectratio" name="tgi_getaspectratio">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tgi_setcolor<label id="tgi_setcolor"><p>
-
-<quote>
-<descrip>
-<tag/Function/Set color to be used in future draw operations.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_setcolor (unsigned char color);/
-<tag/Description/Set color to be used in future draw operations.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/<verb>
-tgi_setcolor(TGI_COLOR_BLACK);
-tgi_bar(0,0,30,30);
-tgi_setcolor(TGI_COLOR_WHITE);
-tgi_bar(10,10,20,20);
-</verb>
-</descrip>
-</quote>
-
-<sect1>tgi_setdrawpage<label id="tgi_setdrawpage"><p>
-
-<quote>
-<descrip>
-<tag/Function/Set the page for drawing.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_setdrawpage (unsigned char page);/
-<tag/Description/If the drawpage and the viewpage are the same then all drawing
-is seen immediately as it is drawn. For double buffered games you can set the
-drawpage to a different page than the viewpage. This lets you draw the next
-screen in the background and when the screen is ready you display it.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/<verb>
-tgi_setdrawpage(1);
-tgi_outtextxy(10, 10, "Hello World");
-tgi_setviewpage(1); // Show page 1
-tgi_setdrawpage(0);
-tgi_outtextxy(10, 10, "Creating next frame");
-...
-tgi_setviewpage(0); // Show page 0
-</verb>
-</descrip>
-</quote>
-
-<sect1>tgi_setpalette<label id="tgi_setpalette"><p>
-
-<quote>
-<descrip>
-<tag/Function/Set the palette (not available with all drivers/hardware).
-Palette is a pointer to as many entries as there are colors.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_setpalette (const unsigned char* palette);/
-<tag/Description/Set the palette (not available with all drivers/hardware).
-Palette is a pointer to as many entries as there are colors.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/None.
-</descrip>
-</quote>
-
-<sect1>tgi_setpixel<label id="tgi_setpixel"><p>
-
-<quote>
-<descrip>
-<tag/Function/Plot a pixel on the drawpage with the current color.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_setpixel (int x, int y);/
-<tag/Description/Plot a pixel on the drawpage with the current color.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/None.
-</descrip>
-</quote>
-
-<sect1>tgi_setviewpage<label id="tgi_setviewpage"><p>
-
-<quote>
-<descrip>
-<tag/Function/Set page to be visible on screen.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_setviewpage (unsigned char page);/
-<tag/Description/If the drawpage and the viewpage are the same then all drawing
-is seen immediately as it is drawn. For double buffered games you can set the
-drawpage to a different page than the viewpage. This lets you draw the next
-screen in the background and when the screen is ready you display it.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/<verb>
-tgi_setdrawpage(1);
-tgi_outtextxy(10, 10, "Hello World");
-tgi_setviewpage(1); // Show page 1
-tgi_setdrawpage(0);
-tgi_outtextxy(10, 10, "Creating next frame");
-...
-tgi_setviewpage(0); // Show page 0
-</verb>
-</descrip>
-</quote>
-
-<sect1>tgi_gettextheight<label id="tgi_gettextheight"><p>
-
-<quote>
-<descrip>
-<tag/Function/Calculate the height of the text in pixels according to
-the current text style.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/unsigned __fastcall__ tgi_gettextheight (const char* s);/
-<tag/Description/Calculate the height of the text in pixels according to
-the current text style.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/None.
-</descrip>
-</quote>
-
-<sect1>tgi_settextscale<label id="tgi_settextscale"><p>
-
-<quote>
-<descrip>
-<tag/Function/Set the scaling for text output.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_settextscale (unsigned width, unsigned height);/
-<tag/Description/
-Set the scaling for text output. The scaling factors for width and height
-are 8.8 fixed point values. This means that $100 = 1 $200 = 2 etc.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="tgi_settextstyle" name="tgi_settextstyle">
-<tag/Example/None.
-</descrip>
-</quote>
-
-<sect1>tgi_settextstyle<label id="tgi_settextstyle"><p>
-
-<quote>
-<descrip>
-<tag/Function/Set the style for text output.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void __fastcall__ tgi_settextstyle (unsigned char magx, unsigned char magy, unsigned char dir, unsigned char font);/
-<tag/Description/Set the style for text output.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="tgi_settextscale" name="tgi_settextscale">
-<tag/Example/None.
-</descrip>
-</quote>
-
-<sect1>tgi_gettextwidth<label id="tgi_gettextwidth"><p>
-
-<quote>
-<descrip>
-<tag/Function/Calculate the width of the text in pixels according to the current text style.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/unsigned __fastcall__ tgi_gettextwidth (const char* s);/
-<tag/Description/Calculate the width of the text in pixels according to the current text style.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/None.
-</descrip>
-</quote>
-
-<sect1>tgi_uninstall<label id="tgi_uninstall"><p>
-
-<quote>
-<descrip>
-<tag/Function/Uninstall the currently loaded driver but do not unload it.
-Will call tgi_done if necessary.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void tgi_uninstall (void);/
-<tag/Description/Uninstall the currently loaded driver but do not unload it.
-Will call tgi_done if necessary.
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/None.
-</descrip>
-</quote>
-
-<sect1>tgi_unload<label id="tgi_unload"><p>
-
-<quote>
-<descrip>
-<tag/Function/Uninstall, then unload the currently loaded driver.
-Will call tgi_done if necessary.
-<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
-<tag/Declaration/<tt/void tgi_unload (void);/
-<tag/Description/Uninstall, then unload the currently loaded driver.
-Will call tgi_done if necessary.
-<tag/Availability/cc65
-<tag/See also/Other tgi functions.
-<tag/Example/None.
-</descrip>
-</quote>
-
-<sect1>time<label id="time"><p>
-
-<quote>
-<descrip>
-<tag/Function/Get the time.
-<tag/Header/<tt/<ref id="time.h" name="time.h">/
-<tag/Declaration/<tt/time_t __fastcall__ time (time_t* t);/
-<tag/Description/The function returns the time since the 1970-01-01 00:00:00
-measured in seconds. If the pointer <tt/t/ is not <tt/NULL/, the function
-result will also be stored there. If no time is available, <tt/(time_t)-1/ is
-returned and <tt/errno/ is set to <tt/ENOSYS/.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may
-only be used in presence of a prototype.
-<item>Many platforms supported by cc65 do not have a realtime clock, so the
-returned value may not be valid.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="clock" name="clock">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>toggle_videomode<label id="toggle_videomode"><p>
-
-<quote>
-<descrip>
-<tag/Function/Toggle between 40 and 80 column mode.
-<tag/Header/<tt/<ref id="c128.h" name="c128.h">/
-<tag/Declaration/<tt/void toggle_videomode (void);/
-<tag/Description/Toggle between 40 and 80 column mode. The settings for the
-old mode (cursor position, color and so on) are saved and restored together
-with the mode.
-<tag/Notes/<itemize>
-<item>The function is specific to the C128.
-<item>This function is deprecated. Please use <ref id="videomode"
-name="videomode"> instead!
-</itemize>
-<tag/Availability/C128
-<tag/See also/
-<ref id="fast" name="fast">,
-<ref id="slow" name="slow">,
-<ref id="videomode" name="videomode">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>tolower<label id="tolower"><p>
-
-<quote>
-<descrip>
-<tag/Function/Convert a character into its lower case representation.
-<tag/Header/<tt/<ref id="ctype.h" name="ctype.h">/
-<tag/Declaration/<tt/int __fastcall__ tolower (int c);/
-<tag/Description/The function returns the given character converted to lower
-case. If the given character is not a letter, it is returned unchanged.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may
-only be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="islower" name="islower">,
-<ref id="isupper" name="isupper">,
-<ref id="toupper" name="toupper">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>toupper<label id="toupper"><p>
-
-<quote>
-<descrip>
-<tag/Function/Convert a character into its upper case representation.
-<tag/Header/<tt/<ref id="ctype.h" name="ctype.h">/
-<tag/Declaration/<tt/int __fastcall__ toupper (int c);/
-<tag/Description/The function returns the given character converted to upper
-case. If the given character is not a letter, it is returned unchanged.
-<tag/Notes/<itemize>
-<item>The function is only available as fastcall function, so it may
-only be used in presence of a prototype.
-</itemize>
-<tag/Availability/ISO 9899
-<tag/See also/
-<ref id="islower" name="islower">,
-<ref id="isupper" name="isupper">,
-<ref id="tolower" name="tolower">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>ultoa<label id="ultoa"><p>
-
-<quote>
-<descrip>
-<tag/Function/Convert an unsigned long integer into a string.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/char* __fastcall__ ultoa (unsigned long val, char* buf, int radix);/
-<tag/Description/<tt/itoa/ converts the unsigned long integer <tt/val/ into a
-string using <tt/radix/ as the base.
-<tag/Notes/<itemize>
-<item>There are no provisions to prevent a buffer overflow.
-<item>The function is non standard, so it is not available in strict ANSI mode.
-You should probably use <tt/sprintf/ instead.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="atoi" name="atoi">,
-<ref id="atol" name="atol">,
-<ref id="itoa" name="itoa">,
-<ref id="ltoa" name="ltoa">,
-<ref id="utoa" name="utoa">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>unlink<label id="unlink"><p>
-
-<quote>
-<descrip>
-<tag/Function/Delete a file.
-<tag/Header/<tt/<ref id="unistd.h" name="unistd.h">/
-<tag/Declaration/<tt/int __fastcall__ unlink (const char* name);/
-<tag/Description/<tt/unlink/ deletes the file with the given name. On success,
-zero is returned. On error, -1 is returned and <tt/errno/ is set to an error
-code describing the reason for the failure.
-<tag/Notes/<itemize>
-<item>The use of this function is discouraged. Please use <tt/<ref id="remove"
-name="remove">/ instead, which is a native ANSI C function and does the same.
-<item>This function is not available on all cc65 targets (depends on the
-availability of file I/O).
-<item>The function is only available as fastcall function, so it may only
-be used in presence of a prototype.
-<item>Instead of <tt/unlink/, <tt/<ref id="remove" name="remove">/ should be
-used, which has the same semantics, but is more portable, because it conforms
-to the ISO C standard.
-</itemize>
-<tag/Availability/POSIX 1003.1
-<tag/See also/
-<ref id="remove" name="remove">
-<tag/Example/
-<verb>
-#include &lt;stdio.h&gt;
-#include &lt;unistd.h&gt;
-
-#define FILENAME "helloworld"
-
-if (unlink (FILENAME) == 0) {
-    printf ("We deleted %s successfully\n", FILENAME);
-} else {
-    printf ("There was a problem deleting %s\n", FILENAME);
-}
-</verb>
-</descrip>
-</quote>
-
-
-<sect1>utoa<label id="utoa"><p>
-
-<quote>
-<descrip>
-<tag/Function/Convert an unsigned integer into a string.
-<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/char* __fastcall__ utoa (unsigned val, char* buf, int radix);/
-<tag/Description/<tt/itoa/ converts the unsigned integer <tt/val/ into a string
-using <tt/radix/ as the base.
-<tag/Notes/<itemize>
-<item>There are no provisions to prevent a buffer overflow.
-<item>The function is non standard, so it is not available in strict ANSI mode.
-You should probably use <tt/sprintf/ instead.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="atoi" name="atoi">,
-<ref id="atol" name="atol">,
-<ref id="itoa" name="itoa">,
-<ref id="ltoa" name="ltoa">,
-<ref id="ultoa" name="ultoa">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>vcprintf<label id="vcprintf"><p>
-
-<quote>
-<descrip>
-<tag/Function/Formatted output to the console.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/int __fastcall__ vcprintf (const char* format, va_list ap);/
-<tag/Description/The arguments specified as a <tt/va_list/ are converted to
-text where necessary and formatted according to the format string given. The
-resulting string is output to the console. <tt/vcprintf/ supports the same
-format specifiers as <tt/vprintf/. <!-- <tt/<ref id="vprintf" name="vprintf">/. -->
-<tag/Notes/<itemize>
-<item>Like all other <tt/conio/ output functions, <tt/vcprintf/ distinguishes
-between <tt/\r/ and <tt/\n/.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/cc65
-<tag/See also/
-<ref id="cprintf" name="cprintf">,
-<ref id="cputc" name="cputc">,
-<ref id="cputcxy" name="cputcxy">,
-<ref id="cputs" name="cputs">,
-<ref id="cputsxy" name="cputsxy">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>videomode<label id="videomode"><p>
-
-<quote>
-<descrip>
-<tag/Function/Switch to either 40 or 80 column mode.
-<tag/Header/<tt/<ref id="apple2enh.h" name="apple2enh.h">,
-<ref id="c128.h" name="c128.h">/
-<tag/Declaration/<tt/unsigned __fastcall__ videomode (unsigned Mode);/
-<tag/Description/Switch to 40 or 80 column mode depending on the argument. If
-the requested mode is already active, nothing happens. The old mode is returned
-from the call.
-<tag/Notes/<itemize>
-<item>The function is specific to the C128 and enhanced Apple //e.
-<item>This function replaces <ref id="toggle_videomode"
-name="toggle_videomode">.
-<item>The function is only available as fastcall function, so it may only be
-used in presence of a prototype.
-</itemize>
-<tag/Availability/C128 and enhanced Apple //e
-<tag/See also/
-<ref id="fast" name="fast">,
-<ref id="slow" name="slow">,
-<ref id="toggle_videomode" name="toggle_videomode">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>wherex<label id="wherex"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the current X position of the text mode cursor.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/unsigned char wherex (void);/
-<tag/Description/The function returns the current X position of the text mode
-cursor. Zero is returned for the leftmost screen position.
-<tag/Availability/cc65
-<tag/See also/
-<ref id="gotox" name="gotox">,
-<ref id="gotoy" name="gotoy">,
-<ref id="gotoxy" name="gotoxy">,
-<ref id="wherey" name="wherey">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-<sect1>wherey<label id="wherey"><p>
-
-<quote>
-<descrip>
-<tag/Function/Return the current Y position of the text mode cursor.
-<tag/Header/<tt/<ref id="conio.h" name="conio.h">/
-<tag/Declaration/<tt/unsigned char wherey (void);/
-<tag/Description/The function returns the current Y position of the text mode
-cursor. Zero is returned for the uppermost screen position.
-<tag/Availability/cc65
-<tag/See also/
-<ref id="gotox" name="gotox">,
-<ref id="gotoy" name="gotoy">,
-<ref id="gotoxy" name="gotoxy">,
-<ref id="wherex" name="wherex">
-<tag/Example/None.
-</descrip>
-</quote>
-
-
-</article>
diff --git a/doc/geos.sgml b/doc/geos.sgml
deleted file mode 100644 (file)
index aa3725b..0000000
+++ /dev/null
@@ -1,1659 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<!-- Title information -->
-
-<title>GEOSLib docs
-<author><url url="mailto:ytm@elysium.pl" name="Maciej Witkowiak">
-<date>2014-04-11
-<abstract>
-This is the documentation of cc65's GEOSLib, but information contained here may be also
-useful for writing GEOS applications in general.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Introduction
-<p>
-As we all know that the best computers in the world are the C64 and C128. They have their GUI too -
-the excellent GEOS. GEOS seems very difficult and cryptic for many people, from programmer's point
-of view. That's not true. The designers of GEOS created a flexible and powerful system, which
-is easy to use and program.
-<p>
-Coding GEOS in C? That's something new. It is possible now - with Ulrich von Bassewitz's cc65
-package and my GEOSLib you are able to create GEOS applications in no time.
-<p>
-GEOSLib supports a subset of the standard cc65 libraries. Whenever possible native Kernal functions
-are used (e.g. <tt/memset/ is an alias for <tt/FillRam/), however not all are supported. E.g.
-string functions like <tt/strcmp/, <tt/strcpy/ are doubled with native <tt/CmpString/,
-<tt/CopyString/ because the latter can handle only 256 byte strings. Keep this in mind when
-you write your program. If you don't need long strings simply use functions from the Kernal,
-the resulting code will be smaller.
-<p>
-<tt/dio/ - direct disk access is available, but you might have problems with devices other
-than 1541, 1571 or 1581. RAM drives emulating these should work.
-<p>
-<tt/conio/ - simple console input-output is available for command line applications.
-This implementation assumes that one character does fit in 8x8 cell, so output with
-default BSW font, which is has 9 points, might be a bit messy. There is no color support in
-GEOS 2.0 so color functions are disabled. Both 40 and 80 column modes are supported
-and automatically detected.
-<p>
-<tt/tgi/ - TGI driver for GEOS that supports both 40 and 80 column modes but mode can not be
-changed between <tt/tgi_init/ and <tt/tgi_done/.
-<p>
-<tt/joy/ - JOY driver for GEOS that supports only joystick, not current pointing device.
-<p>
-It is safe to use these standard includes and their contents:
-<tt/assert.h, conio.h, dio.h, errno.h, em.h, geos.h, joystick.h, modload.h, mouse.h, stdlib.h, string.h, tgi.h, time.h/
-<p>
-For <tt/time.h/ functions <tt/systime()/ and <tt/clock()/ note that the resolution is one second.
-<p>
-Functions from the headers above are either standard C library functions or cc65-specific, in
-either case they are not GEOS specific and so they are not described here.
-<p>
-I am an assembler programmer and GEOSLib was designed in such way that cc65 could emit the best
-available code (well, the best as for machine :-). Many of the <tt/void foo (void)/ functions are
-just raw calls to the Kernal (assembled just as <tt/jsr _foo/), look in <tt/gsym.h/, where you
-can find many definitions of standard GEOS locations. Access to these addresses is optimized by
-cc65 to simple <tt/lda/ and <tt/sta/. Don't be afraid to use C syntax.
-
-<sect1>Requirements
-<p>
-You don't need a C64 or C128 for development. The only hardware requirement is a PC capable of
-running cc65. You do however need C64 or C128 emulator and GEOS disk images (.d64) to test your
-programs.
-
-The software needed:
-<itemize>
-    <item><em/cc65/ Excellent package containing a C crosscompiler, a crossassembler and a linker, you
-               can get it from: <url url="http://cc65.github.io/cc65/">.
-    <item><em/VICE/ This is a portable C64, C128 and few other Commodore computers emulator, you
-               can obtain it from: <url url="http://vice-emu.sourceforge.net/">.
-               The VICE package contains the <em/c1541/ program that is able
-               to convert/unconvert GEOS files to disk images.
-    <item><em/The Star Commander/ This tool is only for DOS. You will need it for transferring
-               object files from a PC to a 1541. There's also one important ability of this
-               tool - it automatically un-converts .cvt files into GEOS native format on
-               disk image files. Check out: <url url="http://sta.c64.org/sc.html">.
-    <item><em/opencbm/ A package that allows for communication directly with a 1541 and
-               other Commodore IEC bus drives. It can be a replacement for Star Commander if
-               you only want to transfer files to a disk and unconvert using GEOS program for
-               this purpose. Check out: <url url="http://opencbm.sourceforge.net/">.
-</itemize>
-<p>
-VICE and cc65 are portable - they run on variety of platforms - DOS, Win32 and UNIX. GEOSLib only
-needs cc65.
-<p>
-<em/Update:/ starting from v2.5.0 GEOSLib is a part of the cc65 package as its GEOS support library.
-
-<sect1>Legal
-<p>
-I want to thank Uz for his cc65 package, Alexander Boyce for his excellent GEOS Programmer's
-Reference Guide and BSW for GEOS.
-<p>
-GEOSLib is covered by the same license as cc65. You can find the whole text
-among documentation. I would really appreciate if you would like to send me
-your comments, suggestions, questions, changes, bug reports etc. I will also
-appreciate if you will just give me a sign that you are using GEOSLib - not
-especially something big and important, mail me even if you are just playing
-with it.
-<p>
-You can send postcards with hellos to:
-<p>
-Maciej Witkowiak, ul. Slowackiego 6/57, 77-400 ZLOTOW
-<p>
-POLAND
-<p>
-e-mail: <tt/ytm@elysium.pl/
-
-<sect>What do you have and what to do with it?
-<p>
-This chapter describes some rules you ought to obey, and how to use GEOSLib.
-
-<sect1>Usage
-<p>
-Apart from this file, which merely describes only standard GEOS library
-functions, you should read the <tt/grc65/ (GEOS resource compiler) documentation.
-There is information about necessary resource files (each GEOS application
-needs at least one) and the build process - what should be done and in what
-order. Please also read the cc65 documentation on how to compile C, assembler
-and link everything together.
-<p>
-All in all, you just need to place
-<tscreen><verb>
-&num;include &lt;geos.h&gt;
-</verb></tscreen>
-at the top of your source.
-<p>
-As a general rule read the sources of the example programs and read the headers.
-These are the most reliable sources of knowledge ;-). You will also find there
-many C macros representing various arguments passed to the functions. Please use
-them. You will find your sources easier to understand, and it will be easier
-to find bugs.
-<p>
-All types used in GEOSLib are <tt/unsigned/.
-<p>
-Screen coordinates are given in pixels unless stated differently.
-
-<sect1>Notes on style
-<p>
-Contrary to a typical GEOS assembly program which has a main function called after loading that
-setups the screen, menus, icons etc. exiting from the <tt/main/ function in C is equivalent to
-calling <tt/exit()/. These two are the only safe methods of terminating applications. DO NOT
-USE <tt/EnterDeskTop/! Your data may be lost as library destructors and functions registered
-with <tt/atexit/ are not called.
-<p>
-For GEOS GUI applications the recommended program structure is to have everything initialized
-in the <tt/main/ function and at the end of it a call to the <tt/MainLoop()/ function. WARNING! This
-function never returns, any code between <tt/MainLoop();/ and the end of <tt/main/ will not
-be executed. You have to call <tt/exit()/ explicitly somewhere in your code (e.g. in a menu
-handler or via DialogBox action).
-<p>
-Whenever possible use definitions from <tt/gsym.h/. The resulting code is translated by cc65 into
-series of <tt/lda/ and <tt/sta/, so you can't do it better :-).
-<p>
-Don't hesitate to use library functions. Everything was written with size and speed in mind. In
-fact many calls are just redirections to the GEOS Kernal which results in a simple <tt/jsr/.
-<p>
-The <tt/main/ function receives the standard <tt/argc/ and <tt/argv/ parameters. There are
-always either 1 or 3 parameters. The DOS application name is always set as <tt/argv[0]/.
-If present, <tt/argv[1]/ and <tt/argv[2]/ will be set to the data filename and data diskname (it only
-works if the user double-clicks on a data file associated with your application). Note that it is up
-to your application to determine which of the available (up to four) disk drives has the disk
-with given diskname inside. If this fails your program should ask to insert the proper disk into
-one of available drives.
-<p>
-You might wonder why I have chosen a sometimes weird order of arguments in functions. I just
-wanted to avoid unnecessary pushing and popping of arguments from the stack because cc65 can pass a single
-<tt/unsigned int/ through CPU registers.
-<p>
-Do not try to compile in strict ANSI mode. The library uses cc65 extensions which are not available in
-ANSI.
-<p>
-It is possible to use dynamically loaded modules, three such modules are provided:
-A GEOS TGI driver, a GEOS EMD driver (for VDC extended memory) and a GEOS JOY driver.
-Just make sure that their filenames appear UPPERCASE in DeskTop. There are no more special
-recommendations, read the cc65 documentation about modules and the demo programs source code.
-
-<sect>Library Functions
-<p>
-Functions here are sorted more or less in the way they appear in the header files. This way I am able
-to keep functions covering similar tasks near each other. All function names are identical to those
-from the <tt/geosSym/ file provided with the GeoProgrammer package. Only my extensions to <tt/geosSym/
-are covered by new names, but I tried to keep them in the naming convention.
-
-<sect1>Graphics
-<p>
-This section covers the drawing package of GEOS along with text output routines.
-
-<sect2>SetPattern
-<p>
-<tt/void SetPattern (char pattern)/
-<p>
-This function sets the current pattern to the given. There are 32 different patterns in GEOS. You can
-see them together in the filling box in GeoPaint.
-
-<sect2>GraphicsString
-<p>
-<tt/void GraphicsString (char *myGString)/
-<p>
-One of the more powerfull routines of GEOS. This function calls other graphic functions depending
-on the given command string. See the structures chapter for a more detailed description.
-
-<sect2>Rectangle functions
-<p>
-Parameters to those functions are grouped in the <tt/struct window drawWindow/. To speed up things and
-reduce overhead this structure is bound to zero page locations, where all rectangle functions
-expect their parameters. You can modify the data directly (e.g. <tt/drawWindow.top=10/) or via the
-<tt/InitDrawWindow/ function. Contents of <tt/drawWindow/ are guaranteed not to change when only
-using graphics functions. In other cases you should keep your data in separate <tt/struct window/
-and use <tt/InitDrawWindow/ before the first call to one of the rectangle functions.
-
-<sect3>InitDrawWindow
-<p>
-<tt/void InitDrawWindow (struct window *myWindow)/
-<p>
-This function only copies the contents of <tt/myWindow/ into the system area of <tt/drawWindow/. Use it
-if for some reason you have to keep your window data out of the zero page space.
-
-<sect3>Rectangle
-<p>
-<tt/void Rectangle (void)/
-<p>
-This draws on screen a rectangle filled with the current pattern.
-
-<sect3>FrameRectangle
-<p>
-<tt/void FrameRectangle (char pattern)/
-<p>
-This one draws a frame with the given bit pattern (not a pattern from the GEOS palette).
-
-<sect3>InvertRectangle
-<p>
-<tt/void InvertRectangle (void)/
-<p>
-Just as the name says...
-
-<sect3>ImprintRectangle and RecoverRectangle
-<p>
-<tt/void ImprintRectangle (void)/
-<p>
-<tt/void RecoverRectangle (void)/
-<p>
-These two functions are for copying parts of the screen to (<tt/Imprint/) and from (<tt/Recover/) the
-backbuffer of the screen. For example when drawing a new menu box GEOS first uses
-<tt/ImprintRectangle/ to save the area under the box, and restores it by <tt/RecoverRectangle/ upon
-destroying the menu.
-
-<sect2>Line Functions
-<p>
-The GEOS drawing package is optimized so there are different functions for drawing vertical and
-horizontal lines.
-
-<sect3>HorizontalLine
-<p>
-<tt/void HorizontalLine (char pattern, char y, unsigned xStart, unsigned xEnd)/
-<p>
-This function draws a horizontal line using the given pattern. Note that <tt/pattern/ is not a pattern
-number as set in <tt/SetPattern/ but a true bit pattern.
-
-<sect3>InvertLine
-<p>
-<tt/void InvertLine (char y, unsigned xStart, unsigned xEnd)/
-<p>
-There is only a horizontal version.
-
-<sect3>RecoverLine
-<p>
-<tt/void RecoverLine (char y, unsigned xStart, unsigned xEnd)/
-<p>
-This function recovers a single line. It is utilized by <tt/RecoverRectangle/. See its description
-for more details.
-
-<sect3>VerticalLine
-<p>
-<tt/void VerticalLine (char pattern, char yStart, char yEnd, unsigned x)/
-<p>
-This function draws a vertical line using the given pattern. Note that <tt/pattern/ is not a pattern
-number as set in <tt/SetPattern/ but a true bit pattern.
-
-<sect3>DrawLine
-<p>
-<tt/void DrawLine (char mode, struct window *myWindow)/
-<p>
-The <tt/top/ parameters of <tt/struct window/ describe the starting point of the line, while
-<tt/bottom/ ones are for the ending point. If <tt/mode/ is <tt/DRAW_DRAW/ then the current pattern from
-<tt/SetPattern/ is used for drawing. If <tt/mode/ is <tt/DRAW_ERASE/ then the line is erased from the
-screen. If <tt/mode/ is <tt/DRAW_COPY/ then the line is copied from/to back/frontbuffer, according to
-the <tt/dispBufferOn/ setting.
-
-<sect2>Point Functions
-<p>
-The parameters to these two functions are passed by a pointer to an own <tt/struct pixel/ filled with
-proper values.
-
-<sect3>DrawPoint
-<p>
-<tt/void DrawPoint (char mode, struct pixel *myPixel)/
-<p>
-Depending on <tt/mode/ (see <tt/DrawLine/) draws/erases/copies a single point
-on the screen.
-
-<sect3>TestPoint
-<p>
-<tt/char TestPoint (struct pixel *myPixel)/
-<p>
-This function tests if the given pixel is set and returns <tt/true/ (non-zero) or <tt/false/ (zero).
-
-<sect2>Character and string output
-
-<sect3>PutChar
-<p>
-<tt/void PutChar (char character, char y, unsigned x)/
-<p>
-This function outputs a single character using the current style and font to the screen.
-
-<sect3>PutString
-<p>
-<tt/void PutString (char *myString, char y, unsigned x)/
-<p>
-Same as <tt/PutChar/ except the fact that you can output a whole <tt/NULL/-terminated string.
-See <tt/ggraph.h/ for the list of tokens that you can also place in the string - like <tt/CBOLDON/ or
-<tt/COUTLINEON/.
-
-<sect3>PutDecimal
-<p>
-<tt/void PutDecimal (char parameter, unsigned value, char y, unsigned x)/
-<p>
-This function converts <tt/value/ to its decimal representation and outputs it to the screen.
-The <tt/parameter/ is the field width in pixels (range 1-31) and the mode bits. Depending on them
-the string can be filled with zeroes (the string is always 5 characters long) or not and left or right
-justified to the given pixel. See <tt/ggraph.h/ for predefined values for <tt/parameter/.
-
-<sect2>Font Handling
-
-<sect3>GetCharWidth
-<p>
-<tt/char GetCharWidth (char character)/
-<p>
-This function returns the real width (in pixels) of the given character with the current font. It can be used
-for counting the length of a string on the screen, allowing for indentation or justification.
-
-<sect3>LoadCharSet
-<p>
-<tt/void LoadCharSet (struct fontdesc *myFont)/
-<p>
-This function forces GEOS to use the given font. <tt/myFont/ should be casted from a
-pointer to the start of the area where a record from a font file (VLIR structure) was loaded.
-
-<sect3>UseSystemFont
-<p>
-<tt/void UseSystemFont (void)/
-<p>
-This function forces GEOS to use the built-in BSW font.
-
-<sect2>Bitmap handling
-<p>
-I'm not quite sure how these functions are working (except <tt/BitmapUp/) so you should
-probably look into the library sources and compare it with your knowledge. Please let me know
-if something is wrong or broken.
-
-<sect3>BitmapUp
-<p>
-<tt/void BitmapUp (struct iconpic *myPic)/
-<p>
-This function unpacks the bitmap and places it on the screen - just as you set it in the
-<tt/struct iconpic/ pointer which you pass. See <tt/gstruct.h/ for a description of this
-structure. Note that you can only use packed GEOS bitmaps - a simple Photo Scrap is in this format.
-
-<sect3>BitmapClip
-<p>
-<tt/void BitmapClip (char skipLeft, char skipRight, unsigned skipTop, struct iconpic *myPic)/
-<p>
-This function acts similar to <tt/BitmapUp/ but you can also define which parts of the bitmap are
-to be drawn - you give the number of columns (8-pixel) to skip on the right and left of the bitmap,
-and the number of rows to skip from the top if it.
-
-<sect3>BitOtherClip
-<p>
-<tt/void BitOtherClip (void *proc1, void *proc2, char skipLeft, char skip Right, unsigned skipTop,
-       struct iconpic *myPic)/
-<p>
-Similar to the previous one with some extension. <tt/proc1/ is called before reading a byte (it
-returns in .A the next value), and <tt/proc2/ is called every time the parser reads a byte which is
-not a piece of a pattern (byte of code greater than 219). Both procedures should be written
-separately in assembler and declared as <tt/__fastcall__/ returning char.
-
-<sect1>Menus and Icons
-<p>
-Here you will find information about functions related with menus and icons.
-
-<sect2>Menus
-<p>
-Menus are essential for a GUI. GEOS can handle only one menu at a time, but each menu can call
-another one, which results in a submenu tree. There can be up to 8 menu levels, each one with up
-to 32 items.
-<p>
-Menus are initialized with <tt/DoMenu/ and then the Kernal takes care of everything. Your code
-(called from an event handler) should be a function without parameters, returning void. You should
-use <tt/DoPreviousMenu/ or <tt/GotoFirstMenu/ at least once in its code to have the screen clean.
-
-<sect3>DoMenu
-<p>
-<tt/void DoMenu (struct menu *myMenu)/
-<p>
-This function initializes the GEOS menu processor and exits. See <tt/DoMenu structure/ for more
-information about it. Know that many GEOS applications just initialize the screen, menu and
-exit to the main Kernal loop, this proves the power of <tt/DoMenu/.
-
-<sect3>ReDoMenu
-<p>
-<tt/void ReDoMenu (void)/
-<p>
-This simply redraws the menu at the lowest level. It works like calling <tt/DoMenu/ again with
-the same parameters.
-
-<sect3>RecoverMenu
-<p>
-<tt/void RecoverMenu (void)/
-<p>
-This function erases the current menu from the screen. It doesn't change the menu level.
-
-<sect3>RecoverAllMenus
-<p>
-<tt/void RecoverAllMenus (void)/
-<p>
-This calls <tt/RecoverMenu/ and erases all menus from the screen. Then the menu level is
-set to 0 (topmost).
-
-<sect3>DoPreviousMenu
-<p>
-<tt/void DoPreviousMenu (void)/
-<p>
-This functions causes the menu processor to go back one menu level. You should use it in menu
-handler code to have the screen clean.
-
-<sect3>GotoFirstMenu
-<p>
-<tt/void GotoFirstMenu (void)/
-<p>
-This one jumps back to the topmost menu. If there is only a menu and one submenu it works the
-same as <tt/DoPreviousMenu/.
-
-<sect2>Icon Functions
-<p>
-Icons are working similar to menus except the fact that there is only one level. Icons are
-defined as a screen area filled with a bitmap, but if you would setup icons and erase the
-screen they would still be active and clicking in the place where formerly an icon was would cause
-an effect. Similarly if you would setup icons and then turn them off with <tt/ClearMouseMode/
-the bitmap would still be on the screen but clicking on it would not cause any action.
-There is only one, but powerful icon function.
-
-<sect3>DoIcons
-<p>
-<tt/void DoIcons (struct icontab *myIconTab)/
-<p>
-This function initializes all icons that are present on the screen at once. For more information
-look at the <tt/Icons/ chapter in this manual.
-
-<sect1>DialogBoxes
-<p>
-This chapter covers the most powerful GEOS user interface function - <tt/DoDlgBox/.
-
-<sect2>GEOS standard
-
-<sect3>DoDlgBox
-<p>
-<tt/char DoDlgBox (char *dialogString)/
-<p>
-This function returns one byte. It can be the value of one of six standard icons (see <tt/gdlgbox.h/)
-or whatever the closing routine passes. Register <tt/r0L/ also contains this value.
-<p>
-Read the structures chapter for the specs of the <tt/dialogString/.
-
-<sect3>RstrFrmDialogue
-<p>
-<tt/char RstrFrmDialogue/
-<p>
-This function is called from within DoDlgBox event. It immediately closes the DialogBox and returns
-the owner ID (or whatever caller has in the .A register).
-
-<sect2>GEOSLib extensions
-<p>
-To simplify the usage of DoDlgBox from C I wrote some helper functions - wrappers for DoDlgBox,
-with predefined data. In one word - these are standard DialogBoxes you can see in almost every
-GEOS application.
-
-<sect3>DlgBoxYesNo, DlgBoxOkCancel, DlgBoxOk
-<p>
-<tt/char DlgBoxYesNo (char *line1, char *line2)/
-<p>
-<tt/char DlgBoxOkCancel (char *line1, char *line2)/
-<p>
-<tt/void DlgBoxOk (char *line1, char *line2)/
-<p>
-These function show two lines of text in a standard-sized DialogBox. You can read the code of the
-pressed icon from the return value. E.g. for <tt/DlgBoxYesNo/ it can only be <tt/YES/ or <tt/NO/.
-You can pass an empty string or NULL to get a blank line.
-
-<sect3>DlgBoxGetString
-<p>
-<tt/char DlgBoxGetString (char *string, char strlen, char *line1, char *line2)/
-<p>
-This function prompts the user to enter a string of at most <tt/strlen/ characters. It is returned
-in <tt/string/. The two given lines of text are shown above the input line. Please remember
-that there is also a <tt/CANCEL/ icon in the DialogBox and you should test if user confirmed his
-input or gave up. The <tt/string/ is also shown so you can place a default input there or remember
-to place <tt/NULL/ at start.
-
-<sect3>DlgBoxFileSelect
-<p>
-<tt/char DlgBoxFileSelect (char *class, char filetype, char *filename)/
-<p>
-This routine is the standard file selector. It can return <tt/OPEN/, <tt/CANCEL/ or disk error
-on reading the directory or opening the disk.
-There is also a <tt/DISK/ icon shown, but it is handled internally. You pass as input parameters
-<tt/filetype/ and a pointer to a string containing the first part of a file's class. If this string is
-empty (<tt/NULL/ at the start), then all files with given filetype will be shown.
-<p>
-At present this file selector handles only first 16 files of given type and supports only one
-(current) drive.
-
-<sect3>MessageBox
-<p>
-<tt/char MessageBox (char mode, const char *format, ...)/
-<p>
-This function is a more general one. It works very much like <tt/printf/ in a
-box. The only difference is the <tt/mode/ parameter which allows for placing
-default icons (see <tt/gdlgbox.h/ for list of possible <tt/MB_/ values).
-Any too wide text will be clipped to the size of the default window. If <tt/mode/
-is invalid or equal to <tt/MB_EMPTY/ then the window will be closed
-after a click. Otherwise the user must choose an icon.
-<p>
-Note: Use it if you really need (or if you use it in many places) as
-it adds quite amount of code to your program.
-<p>
-Note: the formatted text <em/cannot exceed/ 255 bytes in length, there is no check
-for that.
-
-<sect1>Mouse, Sprites and Cursors
-<p>
-You will find here functions related to sprite and mouse drawing and handling.
-
-<sect2>Mouse related functions
-<p>
-These cover the mouse - as a general pointing device, but expect users to utilize as different devices
-as a digital or analog joystick, a mouse, a lightpen or a koalapad (whatever it is).
-
-<sect3>StartMouseMode
-<p>
-<tt/void StartMouseMode (void)/
-<p>
-This function initializes the mouse vectors - <tt/mouseVector/ and <tt/mouseFaultVec/, and then
-calls <tt/MouseUp/.
-
-<sect3>ClearMouseMode
-<p>
-<tt/void ClearMouseMode (void)/
-<p>
-This function disables all mouse activities - icons and menus stop to respond to mouse events,
-but they are not cleared from the screen.
-
-<sect3>MouseUp and MouseOff
-<p>
-<tt/void MouseUp (void)/
-<p>
-<tt/void MouseOff (void)/
-<p>
-The first function turns the mouse pointer on. It appears on the next IRQ. The second one does
-the opposite - it turns off the pointer, but its position is still updated by the input driver.
-
-<sect3>IsMseInRegion
-<p>
-<tt/char IsMseInRegion (struct window *myWindow)/
-<p>
-This function tests if the mouse pointer is actually in the given range of the screen. See <tt/gsprite.h/ for
-a description of the bits in the return values - they describe the position in detail.
-
-<sect2>Sprites
-<p>
-You are free to use any of the eight sprites, but keep in mind that sprite 0 is actually the mouse
-pointer and sprite 1 can be overwritten when using a text prompt. You don't have to worry about
-40/80 column issues because GEOS128 has a pretty good sprite emulator for the VDC.
-
-<sect3>DrawSprite
-<p>
-<tt/void DrawSprite (char sprite, char *mySprite)/
-<p>
-This function initializes the sprite data. <tt/mySprite/ is a 63-byte table with bitmap data, which
-is copied to the system sprite area (at <tt/sprpic/ - see <tt/gsym.h/). Hardware sprite registers are
-not initialized and the sprite is not yet visible.
-
-<sect3>PosSprite
-<p>
-<tt/void PosSprite (char sprite, struct pixel *myPixel)/
-<p>
-This function positions the sprite on the screen. The given coordinates are screen ones - they are
-converted to sprite coordinates by GEOS. Due to this you cannot use this function to position your
-sprite off the left or top to the screen.
-
-<sect3>EnablSprite and DisablSprite
-<p>
-<tt/void EnablSprite (char sprite)/
-<p>
-<tt/void DisablSprite (char sprite)/
-<p>
-These two functions are responsible for making the sprite visible or not.
-
-<sect2>Cursors and Console
-
-<sect3>InitTextPrompt
-<p>
-<tt/void InitTextPrompt (char height)/
-<p>
-This function initializes sprite 1 for a text prompt with given <tt/height/. This parameter can be in
-range 1-48.
-
-<sect3>PromptOn and PromptOff
-<p>
-<tt/void PromptOn (struct pixel *myPixel)/
-<p>
-<tt/void PromptOff (void)/
-<p>
-The first function places a text prompt in given place and enables blinking.
-The second one is pretty self-explanatory.
-
-<sect3>GetNextChar
-<p>
-<tt/char GetNextChar (void)/
-<p>
-This function gets the next character from the keyboard queue. If the queue is empty it returns
-<tt/NULL/, otherwise you receive the true ASCII code of a character or the value of a special (function)
-key. See <tt/gsprite.h/ for the list of them.
-
-<sect1>Disk
-<p>
-This chapter covers rather low-level disk routines. You should use them with care, because
-you may easily corrupt data on disks. Also remember that contemporary GEOS supports many various
-devices and sticking to 1541 track layout (e.g. expecting the directory on track 18) might be
-dangerous.
-<p>
-For some purposes you might consider using the <tt/dio.h/ interface to disk access. It is native.
-<p>
-All GEOS disk functions return an error code in the X register. In some cases this is returned by the
-GEOSLib function (if its type is <tt/char/), but in all cases the last error is saved in the <tt/__oserror/
-location. If it is nonzero - an error occured. See <tt/gdisk.h/ for the list of possible errorcodes.
-You need to include <tt/errno.h/ to get <tt/__oserror/, together with the standard <tt/errno/. The
-latter gives less verbose, but still usable information and can be used with <tt/strerror/.
-Probably you will get more information using <tt/_stroserror/ in a similar way.
-<p>
-For passing parameters use almost always a pointer to your data e.g. <tt/ReadBuff (&amp;myTrSe)/.
-
-<sect2>Buffer functions
-<p>
-These functions take a single data sector (256 bytes) to read or write on the disk.
-
-<sect3>ReadBuff and Writebuff
-<p>
-<tt/char ReadBuff (struct tr_se *myTrSe)/
-<p>
-<tt/char WriteBuff (struct tr_se *myTrSe)/
-<p>
-These functions read and write a sector placed at <tt/diskBlkBuf/.
-
-<sect3>GetBlock and ReadBlock
-<p>
-<tt/char GetBlock (struct tr_se *myTrSe, char *buffer)/
-<p>
-<tt/char ReadBlock (struct tr_se *myTrSe, char *buffer)/
-<p>
-These two functions read a single block directly to the 256 byte array placed at <tt/buffer/.
-The difference between them is that <tt/GetBlock/ initializes TurboDos in the drive if it was not
-enabled. <tt/ReadBlock/ assumes that it is already enabled thus being slightly faster.
-
-<sect3>PutBlock, WriteBlock, VerWriteBlock
-<p>
-<tt/char PutBlock (struct tr_se *myTrSe, char *buffer)/
-<p>
-<tt/char WriteBlock (struct tr_se *myTrSe, char *buffer)/
-<p>
-<tt/char VerWriteBlock (struct tr_se *myTrSe, char *buffer)/
-<p>
-Similar to previous but needed for writing the disk. <tt/VerWriteBlock/ verifies the data after
-writing. In case of an error five tries are attempted before an error code is returned.
-
-<sect2>Directory header
-<p>
-The functions described here operate on <tt/curDirHeader/ where the current disk header is stored.
-On larger (than 1541) capacity drives the second part of the directory header is in <tt/dir2Head/.
-
-<sect3>GetPtrCurDkNm
-<p>
-<tt/void GetPtrCurDkNm (char *diskName)/
-<p>
-This function fills the given character string with the name of current disk. It is converted to C
-standard - the string is terminated with <tt/NULL/ character instead of code 160 as in Commodore DOS.
-Note that the passed pointer must point to an array of at least 17 bytes.
-
-<sect3>GetDirHead and PutDirHead
-<p>
-<tt/char GetDirHead (void)/
-<p>
-<tt/char PutDirHead (void)/
-<p>
-These functions read and write the directory header. You should use <tt/GetDirHead/ before
-using any functions described below, and you should use <tt/PutDirHead/ to save the changes on the
-disk. Otherwise they will be lost. Operating area is the <tt/curDirHead/.
-
-<sect3>CalcBlksFree
-<p>
-<tt/unsigned CalcBlksFree (void)/
-<p>
-This function returns the number of free blocks on the current disk. It is counted using data in
-<tt/curDirHead/ so you must initialize the disk before calling it.
-
-<sect3>ChkDskGEOS
-<p>
-<tt/char ChkDskGEOS (void)/
-<p>
-This functions checks <tt/curDirHead/ for the GEOS Format identifier. It returns either true or false,
-and also sets <tt/isGEOS/ properly. You must initialize the disk before using this.
-
-<sect3>SetGEOSDisk
-<p>
-<tt/char SetGEOSDisk (void)/
-<p>
-This function initializes disk for use with GEOS. It sets the indicator in directory header and
-allocates a sector for the directory of border files. You don't need to initialize the disk before
-using.
-
-<sect3>FindBAMBit
-<p>
-<tt/char FindBAMBit (struct tr_se *myTrSe)/
-<p>
-This function returns the bit value from the BAM (Block Allocation Map) for the given sector. The bit is
-set if the sector is free to use. The returned value is always zero if the sector is already allocated.
-In fact, this function could be used in a following way:
-<tscreen><verb>
-&num;define BlockInUse FindBAMBit
-...
-if (!BlockInUse(&amp;myTrSe)) &lcub;
-... block not allocated ...
-&rcub;
-</verb></tscreen>
-<p>
-Anyway, I feel that this function is too low-level.
-
-<sect3>BlkAlloc and NxtBlkAlloc
-<p>
-<tt/char BlkAlloc (struct tr_se output&lsqb;&rsqb, unsigned length)/
-<p>
-<tt/char NxtBlkAlloc (struct tr_se *myTrSe, struct tr_se output&lsqb;&rsqb, unsigned length)/
-<p>
-Both functions allocate enough disk sectors to fit <tt/length/ bytes in them. You
-find the output in <tt/output/ which is a table of <tt/struct tr_se/. The last entry will have the
-track equal to 0 and sector equal to 255. The simplest way of using them is to use
-predefined space in the GEOS data space and pass <tt/fileTrScTab/, which is a predefined table.
-<p>
-The difference between those two is that <tt/NextBlkAlloc/ starts allocating from the given sector,
-and <tt/BlkAlloc/ starts from the first nonused sector.
-<p>
-You need to use <tt/PutDirHead/ later to save any changes in BAM.
-
-<sect3>FreeBlock
-<p>
-<tt/char FreeBlock (struct tr_se *myTrSe)/
-<p>
-Simply deallocates a block in the BAM. You need to update the BAM with <tt/PutDirHead/.
-
-<sect3>SetNextFree
-<p>
-<tt/struct tr_se SetNextFree (struct tr_se *myTrSe)/
-<p>
-This function finds the first free sector starting from given track and sector and allocates it.
-It might return the same argument if the given block is not allocated. I wanted it to be type
-clean, but this made the usage a bit tricky. To assign a value to your own <tt/struct tr_se/ you have to
-cast both variables to <tt/unsigned/. E.g.
-<tscreen><verb>
-struct tr_se myTrSe;
-...
-(unsigned)myTrSe=(unsigned)SetNextFree(&amp;otherTrSe);
-</verb></tscreen>
-<p>
-In this example <tt/otherTrSe/ can be replaced by <tt/myTrSe/.
-<p>
-Note: you <em/must/ use casting to have the correct values.
-
-<sect2>Low-level disk IO
-<p>
-Functions described here are more usable in Kernal or drivers code, less common in applications,
-but who knows, maybe someone will need them.
-
-<sect3>EnterTurbo, ExitTurbo, PurgeTurbo
-<p>
-<tt/void EnterTurbo (void)/
-<p>
-<tt/void ExitTurbo (void)/
-<p>
-<tt/void PurgeTurbo (void)/
-<p>
-These functions are the interface to the GEOS TurboDos feature which makes slow Commodore drives a bit
-more usable. <tt/EnterTurbo/ enables TurboDos unless it is already enabled. If not, then you will
-have to wait a bit to transfer the TurboDos code into disk drive RAM. <tt/ExitTurbo/ disables TurboDos.
-This is useful for sending some DOS commands to a drive e.g. for formatting. Note that before any
-interaction with the Kernal in ROM you have to call <tt/InitForIO/. You don't have to worry about speed.
-<tt/EnterTurbo/ will only enable TurboDos (no code transfer) if TurboDos was disabled with
-<tt/ExitTurbo/. <tt/PurgeTurbo/ acts differently from <tt/ExitTurbo/ - it not only disables TurboDos,
-but also removes it from drive RAM (not quite true, but it works like that). After using
-<tt/PurgeTurbo/ the next call to <tt/EnterTurbo/ will reload drive RAM.
-
-<sect3>ChangeDiskDevice
-<p>
-<tt/char ChangeDiskDevice (char newDevice)/
-<p>
-This function changes the device number of the current device (in fact drives only) to the given one. It is
-usable for swapping drives. There's no check if the given <tt/newDevice/ already exist, so if you want
-to change the logical number of drive 8 to 9 and you already have a drive number 9 then GEOS will probably
-hang on disk access. Use safe, large numbers. Note that the safe IEC range is 8-30.
-
-<sect2>Disk Initialization
-<p>
-GEOS has two functions for initialization ('logging in' as they say on CP/M) of a disk.
-<sect3>OpenDisk
-<p>
-<tt/char OpenDisk (void)/
-<p>
-This function initializes everything for a new disk. It loads and enables TurboDos if needed.
-Then the disk is initialized with <tt/NewDisk/. Next, <tt/GetDirHead/ initializes <tt/curDirHead/.
-Disk names are compared and if they differ then the disk cache on REU is cleared. Finally the format is
-checked with <tt/ChkDkGEOS/ and the disk name is updated in the internal tables.
-
-<sect3>NewDisk
-<p>
-<tt/char NewDisk (void)/
-<p>
-This function is similar to the DOS command I. It clears the REU cache and enables TurboDos if needed.
-
-<sect1>Files
-<p>
-This section covers the GEOS file interface.
-
-<sect2>Directory handling
-<p>
-The functions described here are common for SEQ and VLIR structures.
-
-<sect3>Get1stDirEntry and GetNxtDirEntry
-<p>
-<tt/struct filehandle *Get1stDirEntry (void)/
-<p>
-<tt/struct filehandle *GetNxtDirEntry (void)/
-<p>
-These two functions are best suited for scanning the whole directory for particular files. Note that
-the returned filehandles describe all file slots in the directory - even those with deleted files.
-The return value can be obtained by casting both sides to <tt/unsigned/ - as in the <tt/SetNextFree/
-function or read directly after a call to those two functions from <tt/r5/. The current sector number
-is in <tt/r1/ and the sector data itself is in <tt/diskBlkBuf/.
-
-<sect3>FindFile
-<p>
-<tt/char FindFile (char *fName)/
-<p>
-This function scans the whole directory for the given filename. It returns either 0 (success) or 5
-(FILE_NOT_FOUND, defined in <tt/gdisk.h/) or any other fatal disk read error. After a successful
-<tt/FindFile/ you will have <tt/struct filehandle/ at <tt/dirEntryBuf/ filled with the file's data and
-other registers set as described in <tt/GetNxtDirEntry/.
-
-<sect3>FindFTypes
-<p>
-<tt/char FindFTypes (char *buffer, char fType, char fMaxNum, char *classTxt)/
-<p>
-This function scans the directory and fills a table at <tt/buffer/ with <tt/char &lsqb;17&rsqb;/ entries.
-<tt/fType/ is the GEOS type of the searched files and <tt/classTxt/ is a string for the Class field in the file
-header. Class matches if the given string is equal or shorter than that found in the file's header block.
-If you want just to find all files with the given GEOS type you should pass an empty string or <tt/NULL/ as
-<tt/classTxt/. Be warned that for searching <tt/NON_GEOS/ files you must pass <tt/NULL/ as <tt/classTxt/.
-<tt/fMaxNum/ is the maximal number of files to find, thus the <tt/buffer/ must provide an area of size
-equal to <tt/17 * fMaxNum/. This function returns the number of found files, ranging from 0 to number
-passed as <tt/fMaxNum/. The return value can be also restored from <tt/r7H/.
-
-<sect3>DeleteFile
-<p>
-<tt/char DeleteFile (char *fName)/
-<p>
-This function deletes a file by its name. It works for SEQ and VLIR files.
-
-<sect3>RenameFile
-<p>
-<tt/char RenameFile (char *oldName, char *newName)/
-<p>
-I think it is obvious...
-
-<sect3>GetFHdrInfo
-<p>
-<tt/char GetFHdrInfo (struct filehandle *myFile)/
-<p>
-This function loads the file header into the <tt/fileHeader/ buffer. Using after e.g. <tt/FindFile/
-you can pass the address of <tt/dirEntryBuf/.
-
-<sect2>Common and SEQ structure
-<p>
-Functions described here are common for SEQ and VLIR structures because the arguments passed are the
-starting track and sector which may point either to the start of a chain for VLIR or the data for SEQ.
-
-<sect3>GetFile
-<p>
-<tt/char __fastcall__ GetFile(char flag, const char *fname, const char *loadaddr, const char *datadname, const char *datafname)/
-<p>
-This routine loads and runs a given file <tt/fname/. The file must be one of following types:
-<tt/SYSTEM, DESK_ACC, APPLICATION, APPL_DATA, PRINTER,/ or <tt/INPUT_DEVICE/. The execution
-address is taken from the file header. If it is zero, then the file is only loaded. Only the first chain
-from VLIR files is loaded. If <tt/flag/ has bit 0 set then the load address is taken from <tt/loadaddr/
-and not from the file header. In this case <tt/APPLICATION/ files will be only loaded, not executed.
-This does not apply to <tt/DESK_ACC/. If either bit 6 or 7 of <tt/flag/ are set, then 16 bytes from
-<tt/datadname/ are copied to <tt/dataDiskName/ and 16 bytes from <tt/datafname/ go to <tt/dataFileName/
-thus becoming parameters for the new application. Pass <tt/NULL/ for any unused parameter.
-
-<sect3>ReadFile
-<p>
-<tt/char ReadFile (struct tr_se *myTrSe, char *buffer, unsigned fLength)/
-<p>
-This function reads at most <tt/fLength/ bytes into <tt/buffer/ from chained sectors starting at
-<tt/myTrSe/.
-
-<sect3>ReadByte
-<p>
-<tt/char ReadByte (void)/
-<p>
-This function returns the next byte from a file. Before the first call to it you must load <tt/r5/
-with <tt/NULL/, <tt/r4/ with the sector buffer address and <tt/r1/ with the track and sector of the
-first block of a file.
-Remember to not modify <tt/r1/, <tt/r4/ and <tt/r5/. These registers must be preserved between
-calls to <tt/ReadByte/.
-<p>
-The returned value is valid only if there was no error. The end of file is marked as <tt/BFR_OVERFLOW/
-in <tt/__oserror/, this is set when trying to read one byte after the end of file, in this case the
-returned value is invalid.
-
-<sect3>SaveFile
-<p>
-<tt/char SaveFile (char skip, struct fileheader *myHeader)/
-<p>
-<tt/SaveFile/ will take care of everything needed to create a GEOS file, no matter if VLIR of SEQ
-structure. All you need to do is to place the data in the proper place and prepare a header which will
-contain all information about a file. The <tt/skip/ parameter says how many directory pages you
-want to skip before searching for a free slot for the directory entry. In most cases you will put
-<tt/0/ there.
-<p>
-You have to declare a <tt/struct fileheader/ and fill it with proper values. There is only one
-difference - the first two bytes which are a link to a nonexistent next sector are replaced by a
-pointer to the DOS filename of the file.
-<p>
-When saving sequential files the two most important fields in <tt/struct fileheader/ are <tt/fileheader.load_address/
-and <tt/fileheader.end_address/.
-
-<sect3>FreeFile
-<p>
-<tt/char FreeFile (struct tr_se myTable&lsqb;&rsqb;)/
-<p>
-This function deallocates all sectors contained in the passed table.
-
-<sect3>FollowChain
-<p>
-<tt/char FollowChain(struct tr_se *myTrSe, char *buffer)/
-<p>
-This function fills a <tt/struct tr_se/ table at <tt/buffer/ with the sector numbers for a chain of
-sectors starting with <tt/myTrSe/. You can pass such data (<tt/buffer/) to e.g. <tt/FreeFile/.
-
-<sect2>VLIR structure
-<p>
-Here is information about VLIR files (later called RecordFiles) and functions.
-<p>
-A VLIR structure file consists of up to 127 SEQ-like files called records. Each record is like one
-SEQ structure file. Records are grouped together, described by a common name - the VLIR file name and
-an own number. Each record pointed to by its number is described by the starting track and sector numbers.
-VLIR structures allow records to be empty (<tt/tr_se/ of such record is equal to <tt/&lcub;NULL,$ff&rcub;/),
-or even non-exist (<tt/&lcub;NULL,NULL&rcub;/). Any other numbers represent the starting track and sector of
-a particular file.
-<p>
-In GEOS there can be only one file opened at a time. Upon opening a VLIR file some information
-about it is copied into memory. You can retrieve the records table at <tt/fileTrScTab/ (table of
-128 <tt/struct tr_se/) and from <tt/VLIRInfo/ (<tt/struct VLIR_info/.
-E.g. the size of whole VLIR file can be retrieved by reading <tt/VLIRInfo.fileSize/.
-
-<sect3>OpenRecordFile
-<p>
-<tt/char OpenRecordFile (char *fName)/
-<p>
-This function finds and opens a given file. An error is returned if the file is not found or if it is not
-in VLIR format. Information in <tt/VLIRInfo/ is initialized. VLIR track and sector table is
-loaded at <tt/fileTrScTab/ and will be valid until a call to <tt/CloseRecordFile/ so don't modify it.
-You should call <tt/PointRecord/ before trying to do something with the file.
-
-<sect3>CloseRecordFile
-<p>
-<tt/char CloseRecordFile (void)/
-<p>
-This function calls <tt/UpdateRecordFile/ and clears internal GEOS variables.
-
-<sect3>UpdateRecordFile
-<p>
-<tt/char UpdateRecordFile (void)/
-<p>
-This function will check the <tt/VLIRInfo.fileWritten/ flag and if it is set, then <tt/curDirHead/ is
-updated along with size and date stamps in the directory entry.
-
-<sect3>PointRecord
-<p>
-<tt/char PointRecord (char recordNumber)/
-<p>
-This function will setup internal variables (and <tt/VLIRInfo.curRecord/) and return the track and
-sector of the given record in <tt/r1/. Note that the data may not be valid (if the record is non-existing
-you will get 0,0 and if it is empty - 255,0).
-
-<sect3>NextRecord and PreviousRecord
-<p>
-<tt/char NextRecord (void)/
-<p>
-<tt/char PreviousRecord (void)/
-<p>
-These two work like <tt/PointRecord/. Names are self-explanatory.
-
-<sect3>AppendRecord
-<p>
-<tt/char AppendRecord (void)/
-<p>
-This function will append an empty record (pair of 255,0) to the current VLIR track and sector
-table. It will also set <tt/VLIRInfo.curRecord/ to its number.
-
-<sect3>DeleteRecord
-<p>
-<tt/char DeleteRecord (void)/
-<p>
-This function will remove the current record from the table, and move all current+1 records one place
-back (in the table). Note that there's no BAM update and you must call <tt/UpdateRecordFile/ to
-commit changes.
-
-<sect3>InsertRecord
-<p>
-<tt/char InsertRecord (void)/
-<p>
-This function will insert an empty record in place of <tt/VLIRInfo.curRecord/ and move all following
-records in the table one place forward (contents of <tt/VLIRInfo.curRecord/ after a call to <tt/InsertRecord/
-can be found in <tt/VLIRInfo.curRecord + 1/).
-
-<sect3>ReadRecord and WriteRecord
-<p>
-<tt/char ReadRecord (char *buffer, unsigned fLength)/
-<p>
-<tt/char WriteRecord (char *buffer, unsigned fLength)/
-<p>
-This function will load or save at most <tt/fLength/ bytes from the currently pointed record into or from
-<tt/buffer/.
-
-<sect1>Memory and Strings
-<p>
-The functions covered in this section are common for the whole C world - copying memory parts and
-strings is one of the main computer tasks. GEOS also has an interface to do this. These functions
-are replacements for those like <tt/memset, memcpy, strcpy/ etc. from standard libraries.
-If you are dealing with short strings (up to 255 characters) you should use these functions
-instead of standard ones, e.g. <tt/CopyString/ instead of <tt/strcpy/. It will work faster.
-<p>
-However some of them have slightly different calling conventions (order of arguments to be specific),
-so please check their syntax here before a direct replacement.
-<p>
-Please note that the memory areas described here as <em/strings/ are up to 255 characters (without
-counting the terminating <tt/NULL/), and <em/regions/ can cover the whole 64K of memory.
-
-<sect2>CopyString
-<p>
-<tt/void CopyString (char *dest, char *src)/
-<p>
-This function copies the string from <tt/src/ to <tt/dest/, until it reaches <tt/NULL/. The <tt/NULL/
-is also copied.
-
-<sect2>CmpString
-<p>
-<tt/char CmpString (char *s1, char *s2)/
-<p>
-This function compares the strings <tt/s1/ to <tt/s2/ for equality - this is case sensitive, and both
-strings have to have the same length. It returns either <tt/true/ (non-zero) or <tt/false/ (zero).
-
-<sect2>CopyFString and CmpFString
-<p>
-<tt/void CopyFString (char length, char *dest, char *src)/
-<p>
-<tt/char CmpFString (char length, char *s1, char *s2)/
-<p>
-These two are similar to <tt/CopyString/ and <tt/CmpString/ except the fact, that you provide
-the length of the copied or compared strings. The strings can also contain several <tt/NULL/
-characters - they are not treated as delimiters.
-
-<sect2>CRC
-<p>
-<tt/unsigned CRC (char *src, unsigned length)/
-<p>
-This function calculates the CRC checksum for the given memory range. I don't know if it is
-compatible with standard CRC routines.
-
-<sect2>FillRam and ClearRam
-<p>
-<tt/void *FillRam (char *dest, char value, unsigned length)/
-<p>
-<tt/void *ClearRam (char *dest, unsigned length)/
-<p>
-Both functions are filling the given memory range. <tt/ClearRam/ fills with <tt/0s/, while
-<tt/FillRam/ uses the given <tt/value/. Be warned that these functions destroy <tt/r0, r1 and
-r2L/ registers. The functions are aliases for <tt/memset/ and <tt/bzero/, respectively.
-
-<sect2>MoveData
-<p>
-<tt/void *MoveData (char *dest, char *src, unsigned length)/
-<p>
-This functions copies one memory region to another. There are checks for an overlap and the
-non-destructive method is chosen. Be warned that this function destroys contents of the
-<tt/r0, r1 and r2/ registers. This function is an alias for <tt/memcpy/.
-
-<sect2>InitRam
-<p>
-<tt/void InitRam (char *table)/
-<p>
-This function allows to initialize multiple memory locations with single bytes or strings.
-This is done with a <tt/table/ where everything is defined. See the structures chapter for a description of
-<tt/InitRam's/ command string.
-
-<sect2>StashRAM, FetchRAM, SwapRAM, and VerifyRAM
-<p>
-<tt/void StashRAM (char bank, unsigned length, char *reuAddress, char *cpuAddress)/
-<p>
-<tt/void FetchRAM (char bank, unsigned length, char *reuAddress, char *cpuAddress)/
-<p>
-<tt/void SwapRAM (char bank, unsigned length, char *reuAddress, char *cpuAddress)/
-<p>
-<tt/ char VerifyRAM (char bank, unsigned length, char *reuAddress, char *cpuAddress)/
-<p>
-These functions are the interface to a REU - Ram Expansion Unit. I think that they are self-explanatory.
-You can check for REU presence by taking the value of <tt/ramExpSize/. You have to do it before
-using any of these functions.
-
-<sect1>Processes and Multitasking
-<p>
-Weird? Not at all. GEOS has some limited multitasking ability. You can set up a chain of functions
-called in specified intervals and you can put the main program to sleep without disturbing other
-tasks and making the user interface unresponsive.
-
-<sect2>InitProcesses
-<p>
-<tt/void InitProcesses (char number, struct process *processTab)/
-<p>
-This is the main initialization routine. After calling it processes are set up, but not
-enabled. The parameters for <tt/InitProcesses/ are:
-<itemize>
-    <item><tt/number/ - number of processes
-    <item><tt/processTab/ - a table of <tt/struct process/, with size equal to <tt/number/
-</itemize>
-<p>
-A single task is described by an entry in <tt/processTab/, it contains two values - a <tt/pointer/ to
-the task function and a number of <tt/jiffies/ which describe the delay between calls to task. On PAL
-systems there are 50 jiffies per second, while on NTSC there are 60.
-<p>
-The maximum number of tasks is 20. Be warned that GEOS doesn't check if parameters are valid and
-if <tt/processTab/ would be too large it would overwrite existing data in GEOS space.
-<p>
-There's one important thing - the last entry in <tt/processTab/ has to be <tt/NULL,NULL/, so the
-maximum size of <tt/processTab/ is equal to 21.
-<p>
-See the description of <tt/process/ structure for a more detailed discussion on this.
-
-<sect2>RestartProcess and EnableProcess
-<p>
-<tt/void RestartProcess (char processNumber)/
-<p>
-<tt/void EnableProcess (char processNumber)/
-<p>
-These two functions start the task counter. <tt/RestartProcess/ should be called for each process
-after <tt/InitProcesses/, because it resets all flags and counters and it starts the counters.
-<p>
-<tt/RestartProcess/ enables the counters and sets their initial value to that given in <tt/processTab/.
-<p>
-<tt/EnableProcess/ forces the given process to execute by simulating the timer expiring.
-
-<sect2>BlockProcess and UnblockProcess
-<p>
-<tt/void BlockProcess (char processNumber)/
-<p>
-<tt/void UnblockProcess (char processNumber)/
-<p>
-<tt/BlockProcess/ disables the execution of the given process, but this does not disable the timers.
-It means that if you call <tt/UnblockProcess/ before the timer runs out, the process will be executed.
-<p>
-<tt/UnblockProcess/ does the opposite.
-
-<sect2>FreezeProcess and UnfreezeProcess
-<p>
-<tt/void FreezeProcess (char processNumber)/
-<p>
-<tt/void UnfreezeProcess (char processNumber)/
-<p>
-<tt/FreezeProcess/ disables timer for given process. <tt/UnfreezeProcess/ does the opposite.
-This is not equal to <tt/RestartProcess/ as timers are not reloaded with initial value.
-
-<sect2>Sleep
-<p>
-<tt/void Sleep (unsigned jiffies)/
-<p>
-This function is a multitasking sleep - the program is halted, but it doesn't block other functions
-e.g. callbacks from menus and icons.
-The only argument here is the number of jiffies to wait until the app will wake up. It depends on the
-video mode (PAL or NTSC) how many jiffies there are per second (50 or 60, respectively).
-If you don't want to worry about it and need only full second resolution, call the standard
-<tt/sleep/ function from <tt/unistd.h/.
-
-<sect1>System Functions
-
-<sect2>FirstInit
-<p>
-<tt/void FirstInit (void)/
-<p>
-This function initializes some GEOS variables and mouse parameters. This is called on GEOS boot
-up. You shouldn't use this unless you know what you are doing.
-
-<sect2>InitForIO and DoneWithIO
-<p>
-<tt/void InitForIO (void)/
-<p>
-<tt/void DoneWithIO (void)/
-<p>
-These functions are called by some disk routines. You should call them only if you want to
-do something with IO registers or call one of the Kernal ROM routines. Note that this is rather an
-expensive way of turning off IRQs and enabling IO.
-
-<sect2>MainLoop
-<p>
-<tt/void MainLoop (void)/
-<p>
-Returns control to the system. Any code between call to <tt/MainLoop/ and the end of current
-function will never be executed. When in <tt/MainLoop/ the system waits for your action - using
-icons, keyboard or menus to force some specific action from the program. You have to define
-proper handlers before that.
-
-<sect2>EnterDeskTop
-<p>
-<tt/void EnterDeskTop (void)/
-<p>
-This is an alias for <tt/exit(0)/ so you will never burn yourself. Anyway, you should not
-use it. Always use <tt/exit()/ instead. Library destructors and functions registered with
-<tt/atexit()/ are called.
-
-<sect2>ToBASIC
-<p>
-<tt/void ToBASIC (void)/
-<p>
-This one is another way of terminating an application - forcing GEOS to shutdown and exit to BASIC.
-I was considering whether to include it or not, but maybe someone will need it - which I doubt.
-<p>
-<em/WARNING:/ library destructors and functions registered with <tt/atexit()/ will not be called
-so it is quite unsafe way to terminate your program.
-
-<sect2>Panic
-<p>
-<tt/void Panic (void)/
-<p>
-This calls system's <tt/Panic/ handler - it shows a dialog box with the message
-<tscreen><verb>
-System error at:xxxx
-</verb></tscreen>
-where <tt/xxxx/ is last known execution address (caller). By default this is bound to the <tt/BRK/
-instruction, but it might be usable in debugging as kind of <tt/assert/. (Note that <tt/assert/
-is available as a separate function and will give you more information than that).
-<p>
-The system is halted after a call to <tt/Panic/ which means that library destructors will not be
-called and some data may be lost (no wonder you're panicking).
-
-<sect2>CallRoutine
-<p>
-<tt/void CallRoutine (void &ast;myFunct)/
-<p>
-This is a system caller routine. You need to provide a pointer to a function and it will be immediately
-called, unless the pointer is equal to <tt/NULL/. This is the main functionality of this function -
-you don't need to check if the pointer is valid.
-
-<sect2>GetSerialNumber
-<p>
-<tt/unsigned GetSerialNumber (void)/
-<p>
-This function returns the serial number of the system. It might be used for copy-protection.
-However, please remember that Free Software is a true power and you are using it right now.
-
-<sect2>GetRandom
-<p>
-<tt/char GetRandom (void)/
-<p>
-This function returns a random number. It can be also read from <tt/random/ e.g.
-<tscreen><verb>
-a=random;
-</verb></tscreen>
-but by calling this function you are sure that the results will be always different.
-<tt/random/ is updated once a frame (50Hz PAL) and on every call to <tt/GetRandom/.
-<p>
-Note that this is not the same as the <tt/rand/ function from the standard library. <tt/GetRandom/
-will give you unpredictable results (if IRQs occur between calls to it) while
-<tt/rand/ conforms to the standard and for a given seed (<tt/srand/) always returns with the
-same sequence of values.
-
-<sect2>SetDevice
-<p>
-<tt/void SetDevice (char device)/
-<p>
-This function sets the current device to the given. It might be used together with <tt/InitForIO/,
-<tt/DoneWithIO/ and some Kernal routines. Unless the new device is a disk drive this only sets
-new value in <tt/curDevice/, in the other case new disk driver is loaded from REU or internal RAM.
-
-<sect2>get_ostype
-<p>
-<tt/char get_ostype (void)/
-<p>
-This function returns the GEOS Kernal version combined (by logical OR) with the machine type. Read
-<tt/gsys.h/ for definitions of the returned values.
-
-<sect2>get_tv
-<p>
-<tt/char get_tv (void)/
-<p>
-This function returns the PAL/NTSC flag combined (by logical OR) with the 40/80 columns flag. This is
-not the best way to check if the screen has 40 or 80 columns since a PAL/NTSC check is always
-performed and it can take as long as a full raster frame. If you just want to know if the 
-screen has 40 or 80 columns use the expression <tt/graphMode & 0x80/ which returns <tt/0/ for
-40 columns and <tt/0x80/ for 80 columns. Remember that this value can be changed during
-runtime. It is unclear if this will work for GEOS 64 so you probably do not want to test
-anything if not running under GEOS128. Use <tt/get_ostype/ to check it. Read <tt/gsys.h/ for
-definitions of the returned values.
-
-<sect>Library Structures
-<p>
-To simplify usage and optimize passing parameters to functions I have declared several structures
-which describe the most common objects. Some of these structures are bound to static addresses in
-the GEOS data space (<tt/$8000-$8fff/), so you can use their fields directly in an optimized way.
-Please see <tt/gsym.h/ to find them. All structures are defined in <tt/gstruct.h/ and you may
-find also some comments there.
-
-<sect1>Graphics Structures
-
-<sect2>pixel
-<p>
-A simple structure describing a point on the screen.
-
-<sect2>fontdesc
-<p>
-This structure describes a font in one pointsize. There is the current font - <tt/struct fontdesc/
-bound to <tt/curFontDesc/. You can also force GEOS to use your own fonts by calling
-<tt/LoadCharSet/. You just need to open a VLIR font file and load one record - one pointsize -
-somewhere. At the start of this area you already have all data for <tt/fontdesc/ so you can
-pass a pointer to the load address of that pointsize to <tt/LoadCharSet/. (Note that although
-it has 'Load' in the name, that function loads only GEOS internal data structures, not data
-from disk).
-
-<sect2>window
-<p>
-This widely used structure holds the description of a region of the screen. It describes the top-left and
-bottom-right corners of a window.
-
-<sect2>iconpic
-<p>
-Maybe the name isn't the best - it has nothing with <tt/DoIcons/ but with bitmap functions -
-<tt/BitmapUp/ for example. This structure holds the parameters needed to properly decode and show
-a bitmap on the screen. The bitmap has to be encoded - if you have some non-GEOS bitmaps simply
-convert them to Photo Scraps - this is the format used by all GEOS bitmap functions - <tt/DoIcons/
-too.
-
-<sect1>Icons
-<p>
-These structures describe click boxes (icons) that can be placed on screen or in a dialog box.
-
-<sect2>icondef
-<p>
-This is the definition of a single click box. Please see <tt/gstruct.h/ for a description of its fields.
-
-<sect2>icontab
-<p>
-This is the toplevel description of icons to be placed and enabled on the screen. This structure
-has the following fields:
-<itemize>
-    <item><tt/char number/ - total number of icons declared here
-    <item><tt/struct pixel mousepos/ - after finishing <tt/DoIcons/ the mouse pointer will be placed in
-       this point allowing you to have a hint for the user what the default action is
-    <item><tt/struct icondef tab&lsqb;&rsqb/ - this table of size equal to <tt/icontab.number/ contains
-       descriptions for all icons
-</itemize>
-
-<sect1>File and Disk
-
-<sect2>tr_se
-<p>
-This simple structure holds the track and sector number of something. Do not expect the track to be
-in range 1-35, as GEOS can support many various and weird devices. For example my C128 256K
-expansion is utilized as RAMDisk with a layout of 4 tracks of 128 sectors each. However assuming that
-a track number equal to 0 is illegal might be wise.
-
-<sect2>f_date
-<p>
-This is a placeholder for a file datestamp. This structure is also present in <tt/struct filehandle/.
-GEOS is not Y2K compliant, so if the current file has in <tt/filehandle.date.year/ a value less than 86
-you can safely assume that it is e.g. 2004 and not 1904.
-
-<sect2>filehandle
-<p>
-This is the main file descriptor. It is either an entry in the directory (returned from file functions)
-or its copy in <tt/dirEntryBuf/. This is optimized so you can safely get to the file's year e.g.
-by testing <tt/dirEntryBuf.date.year/ - it will be compiled to simple <tt/LDA, STA/.
-
-<sect2>fileheader
-<p>
-This structure holds the fileheader description. You can load a file's header into the <tt/fileHeader/
-fixed area using <tt/GetFHdrInfo/. (note that <tt/fileHeader/ is a place in memory while
-<tt/fileheader/ is a structure).
-You will also need your own fileheader for <tt/SaveFile/.
-
-<sect1>System Structures
-
-<sect2>s_date
-<p>
-This structure is defined only for <tt/system_date/. It is slightly different from <tt/f_date/
-so I prepared this one. You can e.g. get or set the current time using <tt/system_date.s_hour/ and
-<tt/system_date.s_minute/. Accesses to these will be optimized to simple <tt/LDA/ and <tt/STA/
-pair.
-
-<sect2>process
-<p>
-You should declare a table of that type to prepare data for <tt/InitProcesses/. The maximum number
-of processes is 20, and the last entry has to be equal to <tt/&lcub;NULL,NULL&rcub;/, so this table may hold
-only 21 entries. The first member of this structure (<tt/pointer/) holds the pointer to the called
-function (void returning void), you will probably have to cast that pointer into <tt/unsigned int/.
-The second field <tt/jiffies/ holds the amount of time between calls to that function.
-On PAL systems there are 50 jiffies per second, while NTSC have 60 of them.
-
-<sect1>A few things in detail...
-<p>
-GEOSLib uses cc65 non-ANSI extensions to easily initialize data in memory. This is done with a
-kind of array of unspecified length and unspecified type. Here is how it works:
-<tscreen><verb>
-void example = &lcub;
-    (char)3, (unsigned)3, (char)0 &rcub;;
-</verb></tscreen>
-Which will be compiled to following string of bytes:
-<tscreen><verb>
-_example:
-       .byte 3
-       .word 3
-       .byte 0
-</verb></tscreen>
-As you see this way it is possible to define data of any type in any order. You must remember to
-cast each member to proper type.
-
-<sect2>DoMenu structure
-<p>
-<tt/DoMenu/ is responsible for everything concerned with menu processing. Many, many GEOS programs
-are just initializing the screen and menu and returning to <tt/MainLoop/. In GEOSLib it is the same as
-returning from <tt/main/ function without using <tt/exit(0)/.
-<p>
-A menu is described by two types of data - menu descriptors and menu items. A descriptor contains
-information about the following menu items, and items contain names of entries and either
-pointers to functions to execute or, in case of nested menus, pointers to submenu descriptors.
-Note that submenu descriptor can be top-level descriptor, there's no difference in structure,
-just in the content.
-<p>
-Here is how a single descriptor looks like:
-<tscreen><verb>
-void myMenu = &lcub;
-       (char)top, (char)bottom,                // this is the size of the menubox
-       (unsigned)left, (unsigned)right,        // counting all items in the current descriptor
-       (char)number_of_items | type_of_menu,   // number of following items ORed with
-                                               // type of this menu, it can be either
-       // HORIZONTAL or VERTICAL if you will have also bit 6 set then menu won't be closed
-       // after moving mouse pointer outside the menubox. You can have at most 31 items.
-</verb></tscreen>
-This is followed by <tt/number_of_items/ of following item description.
-<tscreen><verb>
-       ...
-       "menuitemname", (char)item_type, (unsigned)pointer,
-       "nextitemname", (char)item_type, (unsigned)pointer,
-       ...
-       "lastitemname", (char)item_type, (unsigned)pointer &rcub;;
-       // Note that there isn't ending <tt/NULL/ or something like that.
-</verb></tscreen>
-<tt/pointer/ is a pointer to something, what it points for depends from <tt/item_type/. This one
-can have following values:
-<p>
-<tt/MENU_ACTION/ - a function pointed by <tt/pointer/ will be called after clicking on the menu item
-<p>
-<tt/SUB_MENU/ - <tt/pointer/ points to next menu descriptor - a submenu
-<p>
-Both of them can be ORed with <tt/DYN_SUB_MENU/ and then the <tt/pointer/ points to a function
-which will return in <tt/r0/ the needed pointer (to function to execute or a submenu).
-<p>
-For creating nested menus (you can have at most 8 levels of submenus) you need to declare such
-a structure for each submenu and top level menu.
-
-<sect2>DoDlgBox command string
-<p>
-<tt/DoDlgBox/ is together with <tt/DoMenu/ one of the most powerful routines in GEOS. It is
-responsible for creating dialog boxes, that is windows which task is to interact with the user.
-The format of the command string is following:
-<tscreen><verb>
-    (window size and position)
-    (commands and parameters)
-    NULL
-</verb></tscreen>
-There is a custom type defined for the command string: <tt/dlgBoxStr/.
-
-<sect3>Size and position
-<p>
-The first element can be specified in two ways - by using the default size and position or specifying
-your own. The first case results in
-<tscreen><verb>
-const dlgBoxStr example = &lcub;
-       DB_DEFPOS (pattern_of_shadow),
-       ...             // commands
-       DB_END &rcub;;
-</verb></tscreen>
-And the own size and position would be:
-<tscreen><verb>
-const dlgBoxStr example = &lcub;
-       DB_SETPOS (pattern, top, bottom, left, right)
-       ...             // commands
-       DB_END &rcub;;
-</verb></tscreen>
-
-<sect3>Commands
-<p>
-The next element of the <tt/DoDlgBox/ command string are the commands themselves. The first six commands are
-default icons and the number of the selected icon will be returned from window processor. The icons are
-<tt/OK, CANCEL, YES, NO, OPEN/, and <tt/DISK/. You can use predefined macros for using them, e.g.:
-<tscreen><verb>
-       ...
-       DB_ICON(OK, DBI_X_0, DBI_Y_0),
-       ...
-</verb></tscreen>
-Note that the position is counted from top left corner of window, not entire screen and that the 'x'
-position is counted in cards (8-pixel) and not in pixels. This is also true for all following commands.
-<tt/DBI_X_0/ and <tt/DBI_Y_0/ are predefined (see <tt/gdlgbox.h/ for more), the default positions
-which will cause icons to appear on a default window exactly where you would expect them.
-<p>
-<tt/DB_TXTSTR (x, y, text)/ will cause to show the given text in the window.
-<p>
-<tt/DB_VARSTR (x, y, ptr)/ works as above, but here you are passing a pointer to a zero page location
-where the address of the text is stored. This is useful for information windows where only the text content
-is variable. Consider following:
-<tscreen><verb>
-char text = "foo";
-       ...
-       r15=(unsigned)text;             // in code just before call to DoDlgBox
-       ...
-       DB_VARSTR (TXT_LN_X, TXT_LN_1_Y, &amp;r15),
-       ...
-</verb></tscreen>
-will cause the word ``foo'' to appear in the window, but you may store the pointer to any text in
-<tt/r15/ (in this case) before the call to DoDlgBox.
-<p>
-<tt/DB_GETSTR(x, y, ptr, length)/ - will add a input-from-keyboard feature. <tt/ptr/ works as in the
-previous example and points to the location where the text is to be stored. Note that the contents of this
-location will be shown upon creating the window. <tt/length/ is the maximum number of characters to input.
-<p>
-<tt/DB_SYSOPV(ptr)/ - this sets <tt/otherPressVec/ to the given pointer. It is called on every keypress.
-<p>
-<tt/DB_GRPHSTR(ptr)/ - the data for this command is a pointer for <tt/GraphicsString/ commands.
-<p>
-<tt/DB_GETFILES(x, y)/ - for a standard window you should pass 4 for both x and y. This function
-draws a file selection box and searches the current drive for files. Before the call to <tt/DoDlgBox/ you
-must load <tt/r7L/ with the GEOS filetype of searched files and <tt/r10/ with the class text. In <tt/r5/
-you have to load a pointer to a <tt/char&lsqb;17&rsqb;/ where the selected filename will be copied. It works
-like <tt/FindFTypes/ but is limited to first 16 files.
-<p>
-<tt/DB_OPVEC(ptr)/ - this sets a new pointer for the button press function, if you pass
-<tt/RstrFrmDialogue/ here you will cause the window to close after pressing mouse button.
-<p>
-<tt/DB_USRICON(x, y, ptr)/ - places a single user icon (click box) on the window, <tt/ptr/ points at a
-<tt/struct icondef/ but fields <tt/x/ and <tt/y/ are not used here. You can have at most 8 click
-boxes in a window, this is an internal limit of the GEOS Kernal.
-<p>
-<tt/DB_USRROUT(ptr)/ - this command causes to immediately call the user routine pointed by <tt/ptr/.
-
-<sect2>GraphicsString command string
-<p>
-<tt/GraphicsString/ is a very powerful routine to initialize the whole screen at once. There are
-predefined macros for all commands, names are self-explanatory, see them in <tt/ggraph.h/. The last
-command has to be <tt/GSTR_END/. There is a custom type defined for the command string: <tt/graphicStr/.
-<p>
-Here is an example for clearing the screen:
-<tscreen><verb>
-const graphicStr example = &lcub;
-       MOVEPENTO(0,0),
-       NEWPATTERN(0),
-       RECTANGLETO(319,199)
-       GSTR_END &rcub;;
-</verb></tscreen>
-
-<sect2>InitRam table
-<p>
-This type of data is used to initialize one or more bytes in different locations at once. The format is
-the following:
-<tscreen><verb>
-void example = &lcub;
-    (unsigned)address_to_store_values_at,
-    (char)number_of_bytes_that_follow,
-    (char)data,(char)data (...)
-    // more such definitions
-    (unsigned)NULL // address of 0 ends the table
-    &rcub;;
-</verb></tscreen>
-
-<sect2>Intercepting system vectors
-<p>
-It is possible to intercept events and hook into the GEOS Kernal using vectors. Here is a little example:
-<tscreen><verb>
-void_func oldVector;
-
-void NewVectorHandler(void) &lcub;
-       // do something and at the end call the old vector routine
-       oldVector();
-&rcub;
-
-void hook_into_system(void) &lcub;
-       oldVector = mouseVector;
-       mouseVector = NewVectorHandler;
-&rcub;
-
-void remove_hook(void) &lcub;
-       mouseVector = oldVector;
-&rcub;
-</verb></tscreen>
-<p>
-In your <tt/main/ function you should call <tt/hook_into_system()/ but <em/after/ all calls to the GEOS
-Kernal (like <tt/DoMenu/, <tt/DoIcons/, etc.) - right before passing control to the <tt/MainLoop()/.
-Be warned that vectors are most likely to be changed by the GEOS Kernal also via other functions (like
-<tt/GotoFirstMenu/, <tt/DoDlgBox/ and its derivatives etc.). It depends on what Kernal functions
-you use and which vectors you altered. Unfortunately there is no exact list for GEOS 2.0, a complete
-list for GEOS 1.x can be found in A. Boyce's Programmers' Reference Guide mentioned before. Most of the
-information contained there should be still valid for GEOS 2.0. When calling a function that restores
-the vector you should add a <tt/hook_into_system()/ call right after it.
-<p>
-It is critical to restore old vector values before exiting the program. If you have more than one
-place where you call <tt/exit()/ then it might be worth to register <tt/remove_hook/ function to
-be called upon exiting with <tt/atexit(&amp;remove_hook);/ call. This way you will ensure that
-such destructor will be always called.
-<p>
-That little example above intercepts <tt/mouseVector/. The <tt/NewVectorHandler/ function will be
-called every time the mouse button changes status. Other important vectors you should know about
-are:
-<itemize>
-       <item><tt/appMain/ - this is called from within the <tt/MainLoop/ system loop
-       <item><tt/keyVector/ - called whenever a keypress occurs
-       <item><tt/intTopVector/ - called at the start of the IRQ routine
-       <item><tt/intBotVector/ - called at the end of the IRQ routine
-</itemize>
-
-</article>
diff --git a/doc/grc65.sgml b/doc/grc65.sgml
deleted file mode 100644 (file)
index 1acc6b1..0000000
+++ /dev/null
@@ -1,393 +0,0 @@
-<!doctype linuxdoc system>
-<article>
-
-<!-- Title information -->
-
-<title>grc65 -- GEOS Resource Compiler
-<author>
-<url url="mailto:ytm@elysium.pl" name="Maciej 'YTM/Elysium' Witkowiak">,<newline>
-<url url="mailto:greg.king5@verizon.net" name="Greg King">
-<date>2014-04-24
-<abstract>
-This document describes a compiler that can create GEOS headers and menues for
-cc65-compiled programs.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview
-<p><bf/grc65/ is a part of cc65's GEOS support.  The tool is necessary to
-generate required and optional resources.  A required resource for every GEOS
-application is the header, that is:  an icon, some strings, and some addresses.
-Optional resources might be menu definitions, other headers (e.g., for data
-files of an app.), dialog definitions, etc.  Without an application's header,
-GEOS is unable to load and start it.
-
-Currently, <bf/grc65/ supports only menues and the required header definition,
-along with support for building applications with VLIR-structured overlays.
-
-<bf/grc65/ generates output in two formats: C header and <bf/ca65/ source (.s).
-That is because the application header data must be in assembly format, while
-the menu definitions can be translated easily into C.  The purpose of the C
-file is to include it as a header in only one project file.  The assembly source
-should be processed by <bf/ca65/ and linked to the application (read about
-<ref name="the building process" id="building-seq">).
-
-
-
-<sect>Usage
-<p>grc65 accepts the following options:
-
-<tscreen><verb>
----------------------------------------------------------------------------
-Usage: grc65 [options] file
-Short options:
-  -V                    Print the version number
-  -h                    Help (this text)
-  -o name               Name the C output file
-  -s name               Name the asm output file
-  -t sys                Set the target system
-
-Long options:
-  --help                Help (this text)
-  --target sys          Set the target system
-  --version             Print the version number
----------------------------------------------------------------------------
-</verb></tscreen>
-Default output names are made from input names with extensions replaced by
-<tt/.h/ and <tt/.s/.
-
-
-
-<sect>Resource file format
-<p>A resource file has the name extension <tt/.grc/.  That is not required, but
-it will make for an easier recognition of the file's purpose.  Also, <bf/cl65/
-recognizes those files.  <bf/grc65/'s parser is very weak at the moment; so,
-read the comments carefully, and write resources exactly as they are written
-here.  Look out for CAPS and small letters.  Everything after a '<tt/;/'
-until the end of the line is considered as a comment and ignored.  See the
-included <ref name="commented example .grc file" id="example-grc"> for a
-better view of the situation.
-
-
-<sect1>Menu definition
-<p><tscreen><verb>
-MENU menuName leftx,topy <ORIENTATION> {
-    "item name 1" <MENU_TYPE> pointer
-    ...
-    "item name x" <MENU_TYPE> pointer
-}</verb></tscreen>
-The definition starts with the keyword <tt/MENU/, then comes the menu's name,
-which will be represented in C as <tt/const void/.  Then are the co-ordinates
-of the top left corner of the menu box.  The position of the bottom right
-corner is estimated, based on the length of item names and the menu's
-orientation.  It means that the menu box always will be as large as it should
-be.  Then, there's the orientation keyword; it can be either <tt/HORIZONTAL/ or
-<tt/VERTICAL/.  Between <tt/&lcub;/ and <tt/&rcub;/, there's the menu's
-content.  It consists of item definitions.  First is an item name -- it has to
-be in quotes.  Next is a menu-type bit.  It can be <tt/MENU_ACTION/ or
-<tt/SUB_MENU/; either of them can be combined with the <tt/DYN_SUB_MENU/ bit
-(see <url name="the GEOSLib documentation" url="geos.html"> for descriptions of
-them).  You can use C logical operators in expressions, but you have to do it
-without spaces.  So a dynamically created submenu will be something like:
-<tscreen><verb>
-"dynamic" SUB_MENU|DYN_SUB_MENU create_dynamic</verb></tscreen>
-The last part of the item definition is a pointer which can be any name that is
-present in the C source code that includes the generated header.  It can point
-to a function or to another menu definition.
-
-If you are doing sub(sub)menu definitions, remember to place the lowest level
-definition first, and the top-level menu as the last one.  That way the C
-compiler won't complain about unknown names.
-
-
-<sect1>Header definition
-<p><tscreen><verb>
-HEADER <GEOS_TYPE> "dosname" "classname" "version" {
-    author    "Joe Schmoe"
-    info      "This is my killer-app!"
-    date      yy mm dd hh ss
-    dostype   SEQ
-    mode      any
-    structure SEQ
-    icon      "sprite.raw"
-}</verb></tscreen>
-The header definition describes the GEOS header sector which is unique to
-each file.  The definition starts with the keyword <tt/HEADER/, then goes the
-GEOS file-type.  You can use only <tt/APPLICATION/ here at the moment.  Then,
-there are (each one in quotes) the DOS file-name (up to 16 characters), the GEOS
-Class name (up to 12 characters), and the version info (up to 4 characters).
-The version should be written as &dquot;<tt/V/x.y&dquot;, where <em/x/ is the
-major, and <em/y/ is the minor, version number.  Those fields, along with both
-braces, are required.  The lines between braces are optional, and will be replaced
-by default and current values.  The keyword <tt/author/ and its value in quotes name
-the programmer, and can be up to 63 bytes long.  <tt/info/ (in the same format) can
-have up to 95 characters.  If the <tt/date/ field is omitted, then the time of
-that compilation will be placed into the header.  Note that, if you do specify
-the date, you have to write all 5 numbers.  The <tt/dostype/ can be <tt/SEQ/,
-<tt/PRG/, or <tt/USR/.  <tt/USR/ is used by default; GEOS usually doesn't care.
-The <tt/mode/ can be <tt/any/, <tt/40only/, <tt/80only/, or <tt/c64only/; and,
-it describes system requirements.  <tt/any/ will work on both 64-GEOS and
-128-GEOS, in 40- and 80-column modes.  <tt/40only/ will work on 128-GEOS in
-40-column mode only.  <tt/80only/ will work on only 128-GEOS in 80-column mode,
-and <tt/c64only/ will work on only 64-GEOS.  The default value for
-<tt/structure/ is <tt/SEQ/ (sequential).  You can put <tt/VLIR/ there, too; but
-then, you also have to put in a third type of resource -- a memory definition.
-The value of <tt/icon/ is a quoted file-name.  The first 63 bytes of this file
-are expected to represent a standard monochrome VIC sprite.  The file gets accessed
-when the generated assembly source is being processed by <bf/ca65/.  Examples for
-programs generating such files are <em/Sprite Painter/, <em/SpritePad/ and the
-<url name="sp65 sprite and bitmap utility" url="sp65.html">.  The default <tt/icon/
-is an empty frame internally represented in the generated assembly file.
-
-
-<sect1>Memory definition
-<p><tscreen><verb>
-MEMORY {
-    stacksize   0x0800
-    overlaysize 0x2000
-    overlaynums 0 1 2 4 5
-}</verb></tscreen>
-The memory definition is unique to each file and describes several attributes related
-to the memory layout.  It consists of the keyword <tt/MEMORY/ followed by braces which
-contain optional lines.  The value of <tt/stacksize/ can be either decimal (e.g.
-<tt/4096/) or hexadecimal with a <tt/0x/ prefix (e.g. <tt/0x1000/).  The default value
-of 0x400 comes from the linker configuration file. The value of <tt/backbuffer/ can be
-either <tt/yes/ or <tt/no/. The further means that the application uses the system-supplied
-background screen buffer while the latter means that the program uses the memory of the
-background screen buffer for own purposes.  The default value of <tt/yes/ comes from the
-linker configuration file.  If the <tt/structure/ in the header definition is set to the
-value <tt/VLIR/ then it is possible and necessary to provide here the attributes of the
-VLIR overlays. <tt/overlaysize/ defines the maximal size for all VLIR records but number
-0.  It can be either decimal (e.g. <tt/4096/) or hexadecimal with a <tt/0x/ prefix (e.g.
-<tt/0x1000/).  <tt/overlaynums/ defines the VLIR record numbers used by the application.
-Skipped numbers denote empty records.  In the example, record number 3 is missing.  Read
-<ref name="this description" id="building-vlir"> for details.
-
-
-
-<sect>Building a GEOS sequential application<label id="building-seq">
-<p>Before proceeding, please read the <url name="compiler" url="cc65.html">,
-<url name="assembler" url="ca65.html">, and <url name="linker" url="ld65.html">
-documentation, and find the appropriate sections about building programs, in
-general.
-
-GEOS support in cc65 is based on the <em/Convert v2.5/ format, well-known in
-the GEOS world.  It means that each file built with the cc65 package has to be
-deconverted in GEOS, before it can be run.  You can read a step-by-step
-description of that in the <url name="GEOS section of the cc65 Compiler Intro"
-url="intro.html#ss6.5">.
-
-Each project consists of four parts, two are provided by cc65.  Those parts
-are:<enum>
-<item>application header
-<item>start-up object
-<item>application objects
-<item>system library
-</enum>
-<bf/2./ and <bf/4./ come with cc65; however you have to write the application
-yourself ;-)
-
-The application header is defined in the <tt/HEADER/ section of the <tt/.grc/
-file and is processed into an assembly <tt/.s/ file.  You must assemble it, with
-<bf/ca65/, into the object <tt/.o/ format.
-
-Assume that there are three input files:  &dquot;<tt/test.c/&dquot; (a C
-source), &dquot;<tt/test.h/&dquot; (a header file), and
-&dquot;<tt/testres.grc/&dquot; (with menu and header definitions).  Note the
-fact that I <em/don't recommend/ naming that file &dquot;<tt/test.grc/&dquot;
-because you will have to be very careful with names (<bf/grc65/ will make
-&dquot;<tt/test.s/&dquot; and &dquot;<tt/test.h/&dquot; out of
-&dquot;<tt/test.grc/&dquot; by default; and you don't want that because
-&dquot;<tt/test.s/&dquot; is compiled from &dquot;<tt/test.c/&dquot;, and
-&dquot;<tt/test.h/&dquot; is something completely different)!
-
-<bf/One important thing/ -- the top of &dquot;<tt/test.c/&dquot; looks like:
-<tscreen><verb>
-#include <geos.h>
-#include "testres.h"
-</verb></tscreen>
-There are no other includes.
-
-
-<sect1>Building the GEOS application using cl65
-<p>This is a simple one step process:
-<tscreen><verb>
-cl65 -t geos-cbm -O -o test.cvt testres.grc test.c
-</verb></tscreen>
-Always place the <tt/.grc/ file as first input file on the command-line in order
-to make sure that the generated <tt/.h/ file is available when it is needed for
-inclusion by a <tt/.c/ file.
-
-
-<sect1>Building the GEOS application without cl65
-<sect2>First step -- compiling the resources
-<p>
-<tscreen><verb>
-grc65 -t geos-cbm testres.grc
-</verb></tscreen>
-will produce two output files:  &dquot;<tt/testres.h/&dquot; and
-&dquot;<tt/testres.s/&dquot;.
-
-Note that &dquot;<tt/testres.h/&dquot; is included at the top of
-&dquot;<tt/test.c/&dquot;.  So, resource compiling <em/must be/ the first step.
-
-<sect2>Second step -- assembling the application header
-<p>
-<tscreen><verb>
-ca65 -t geos-cbm testres.s
-</verb></tscreen>
-And, voil&aacute; -- &dquot;<tt/testres.o/&dquot; is ready.
-
-<sect2>Third step -- compiling the code
-<p>
-<tscreen><verb>
-cc65 -t geos-cbm -O test.c
-ca65 -t geos-cbm test.s
-</verb></tscreen>
-That way, you have a &dquot;<tt/test.o/&dquot; object file which
-contains all of the executable code.
-
-<sect2>Fourth and last step -- linking the application
-<p>
-<tscreen><verb>
-ld65 -t geos-cbm -o test.cvt testres.o test.o geos-cbm.lib
-</verb></tscreen>
-The last file is the GEOS system library.
-
-The resulting file &dquot;<tt/test.cvt/&dquot; is an executable that's
-contained in the well-known GEOS <em/Convert/ format.  Note that its name
-(<tt/test.cvt/) isn't important; the real name, after deconverting, is the DOS name
-that was given in the header definition.
-
-At each step, a <tt/-t geos-cbm/ was present on the command-line.  That switch is
-required for the correct process of GEOS sequential application building.
-
-
-
-<sect>Building a GEOS VLIR overlay application<label id="building-vlir">
-<p>Large GEOS applications typically don't fit in one piece in their designated
-memory area.  They are therefore split into overlays which are loaded into memory
-on demand.  The individual overlays are stored as records of a VLIR (Variable
-Length Index Record) file.  When GEOS starts a VLIR overlay appliation it loads
-record number 0 which is supposed to contain the main program.  The record numbers
-starting with 1 are to be used for the actual overlays.
-
-In "<tt>cc65/samples/geos</tt>" there's a VLIR overlay demo application consisting
-of the files "<tt/overlay-demo.c/" and "<tt/overlay-demores.grc/".
-
-
-<sect1>Building the GEOS overlay application using cl65
-<p>This is a simple one step process:
-<tscreen><verb>
-cl65 -t geos-cbm -O -o overlay-demo.cvt -m overlay-demo.map overlay-demores.grc overlay-demo.c
-</verb></tscreen>
-Always place the <tt/.grc/ file as first input file on the command-line in order
-to make sure that the generated <tt/.h/ file is available when it is needed for
-inclusion by a <tt/.c/ file.
-
-You will almost certainly want to generate a map file that shows (beside a lot of
-other infos) how large your individual overlays are.  This info is necessary to tune
-the distribution of code into the overlays and to optimize the memory area reserved
-for the overlays.
-
-
-<sect1>Building the GEOS overlay application without cl65
-<sect2>First step -- compiling the overlay resources
-<p>
-<tscreen><verb>
-grc65 -t geos-cbm overlay-demores.grc
-</verb></tscreen>
-
-<sect2>Second step -- assembling the overlay application header
-<p>
-<tscreen><verb>
-ca65 -t geos-cbm overlay-demores.s
-</verb></tscreen>
-
-<sect2>Third step -- compiling the overlay code
-<p>
-<tscreen><verb>
-cc65 -t geos-cbm -O overlay-demo.c
-ca65 -t geos-cbm overlay-demo.s
-</verb></tscreen>
-
-<sect2>Fourth and last step -- linking the overlay application
-<p>
-<tscreen><verb>
-ld65 -t geos-cbm -o overlay-demo.cvt -m overlay-demo.map overlay-demores.o overlay-demo.o geos-cbm.lib
-</verb></tscreen>
-
-
-
-<sect>Bugs and feedback
-<p>This is the first release of <bf/grc65/, and it contains bugs, for sure!  I
-am aware of them; I know that the parser is weak, and if you don't follow the
-grammar rules strictly, then everything will crash.  However, if you find an
-interesting bug, mail me. :-) Mail me also for help with writing your
-<tt/.grc/ file correctly if you have problems with it.  I would appreciate
-comments also, and help on this file because I am sure that it can be written
-better.
-
-
-
-<sect>Legal stuff
-<p><bf/grc65/ is covered by the same license as the whole cc65 package, so you
-should see its documentation for more info.  Anyway, if you like it, and want
-to encourage me to work more on it, send me a postcard with a sight of your
-neighbourhood, city, region, etc.  Or, just e-mail me with info that you
-actually used it.  See <url name="the GEOSLib documentation" url="geos.html">
-for addresses.
-
-
-
-<!-- <appendix> -->
-<sect>Appendix A -- example.grc<label id="example-grc">
-<p><tscreen><verb>
-; Note that MENU can define both menues and submenues.
-; If you want to use any C operators (such as "|", "&", etc.), do it WITHOUT
-; any spaces between the arguments (the parser is simple and weak).
-
-MENU subMenu1 15,0 VERTICAL
-; This is a vertical menu, placed at (15,0).
-{
-; There are three items, all of them will call functions.
-; The first and third ones are normal functions, see GEOSLib documentation for
-; information about what the second function should return (it's a dynamic one).
-    "subitem1" MENU_ACTION smenu1
-    "subitem2" MENU_ACTION|DYN_SUB_MENU smenu2
-    "subitem3" MENU_ACTION smenu3
-}
-
-;; Format:  MENU "name" left,top ALIGN { "itemname" TYPE pointer ... }
-
-MENU mainMenu 0,0 HORIZONTAL
-; Here, we have our main menu, placed at (0,0), and it is a horizontal menu.
-; Because it is a top-level menu, you would register it in your C source by
-; using:  DoMenu(&ero;mainMenu);
-{
-; There are two items -- a submenu and an action.
-; This calls a submenu named subMenu1 (see previous definition).
-    "first sub-menu" SUB_MENU subMenu1
-; This will work the same as an EnterDeskTop() call in C source code.
-    "quit" MENU_ACTION EnterDeskTop
-}
-
-;; Format:  HEADER <GEOS_TYPE> "dosname" "classname" "version"
-
-HEADER APPLICATION "MyFirstApp" "Class Name" "V1.0"
-; This is a header for an APPLICATION which will be seen in the directory as a
-; file named MyFirstApp with the Class-string "Class Name V1.0"
-{
-; Not all fields are required, default and current values will be used.
-    author "Maciej Witkowiak"  ; always in quotes!
-    info "Information text"    ; always in quotes!
-;    date yy mm dd hh ss       ; always 5 fields!
-;    dostype seq               ; can be:  PRG, SEQ, USR (only all UPPER- or lower-case)
-;    structure seq             ; can be:  SEQ, VLIR (only UPPER- or lower-case)
-    mode c64only               ; can be:  any, 40only, 80only, c64only
-}</verb></tscreen>
-</article>
diff --git a/doc/header.html b/doc/header.html
deleted file mode 100644 (file)
index 38a943e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
-<HEAD>
- <LINK REL="stylesheet" TYPE="text/css" HREF="doc.css">
diff --git a/doc/index.sgml b/doc/index.sgml
deleted file mode 100644 (file)
index eb13c9a..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-<title>cc65 Documentation Overview
-<author><url url="http://cc65.github.io/doc">
-<date>
-
-<sect>Program documentation<p>
-
-<descrip>
-
-  <tag><htmlurl url="ar65.html" name="ar65.html"></tag>
-  Describes the ar65 archiver.
-
-  <tag><htmlurl url="ca65.html" name="ca65.html"></tag>
-  Describes the ca65 macro assembler.
-
-  <tag><htmlurl url="cc65.html" name="cc65.html"></tag>
-  Describes the cc65 C compiler.
-
-  <tag><htmlurl url="cl65.html" name="cl65.html"></tag>
-  Describes the cl65 compile &amp; link utility.
-
-  <tag><htmlurl url="co65.html" name="co65.html"></tag>
-  Describes the co65 object-file converter.
-
-  <tag><htmlurl url="da65.html" name="da65.html"></tag>
-  Describes the da65 6502/65C02 disassembler.
-
-  <tag><htmlurl url="grc65.html" name="grc65.html"></tag>
-  Describes the GEOS resource compiler (grc65).
-
-  <tag><htmlurl url="ld65.html" name="ld65.html"></tag>
-  Describes the ld65 linker.
-
-  <tag><htmlurl url="od65.html" name="od65.html"></tag>
-  Describes the od65 object-file analyzer.
-
-  <tag><htmlurl url="sp65.html" name="sp65.html"></tag>
-  Describes the sprite and bitmap utility.
-
-</descrip>
-
-
-<sect>Usage<p>
-
-<descrip>
-
-  <tag><htmlurl url="intro.html" name="intro.html"></tag>
-  Describes the use of the tools, by building a short &dquot;hello world&dquot;
-  example.
-
-  <tag><htmlurl url="coding.html" name="coding.html"></tag>
-  Contains hints on creating the most effective code with cc65.
-
-  <tag><htmlurl url="using-make.html" name="using-make.html"></tag>
-  Build programs, using the GNU Make utility.
-
-  <tag><htmlurl url="customizing.html" name="customizing.html"></tag>
-  How to use the cc65 toolset for a custom hardware platform (a target system
-  not currently supported by the cc65 library set).
-
-  <tag><htmlurl url="debugging.html" name="debugging.html"></tag>
-  Debug programs, using the VICE emulator.
-
-</descrip>
-
-
-<sect>Library information and other references<p>
-
-<descrip>
-
-  <tag><htmlurl url="funcref.html" name="funcref.html"></tag>
-  A (currently incomplete) function reference.
-
-  <tag><htmlurl url="dio.html" name="dio.html"></tag>
-  Low-level disk I/O API.
-
-  <tag><htmlurl url="geos.html" name="geos.html"></tag>
-  The GEOSLib manual.
-
-  <tag><htmlurl url="library.html" name="library.html"></tag>
-  An overview over the cc65 runtime and C libraries.
-
-  <tag><htmlurl url="smc.html" name="smc.html"></tag>
-  Describes Christian Kr&uuml;gers macro package for writing self modifying
-  assembler code.
-
-  <tag><url name="6502 Binary Relocation Format document"
-        url="http://www.6502.org/users/andre/o65/fileformat.html"></tag>
-  Describes the o65 file format that is used for dynamically loadable modules
-  and LUnix programs.
-
-</descrip>
-
-
-<sect>Platform-specific information<p>
-
-<descrip>
-
-  <tag><htmlurl url="apple2.html" name="apple2.html"></tag>
-  Topics specific to the Apple&nbsp;&rsqb;&lsqb;.
-
-  <tag><htmlurl url="apple2enh.html" name="apple2enh.html"></tag>
-  Topics specific to the enhanced&nbsp;Apple&nbsp;//e.
-
-  <tag><htmlurl url="atari.html" name="atari.html"></tag>
-  Topics specific to the Atari 8-bit machines.
-
-  <tag><htmlurl url="atari5200.html" name="atari5200.html"></tag>
-  Topics specific to the Atari 5200 Game Console.
-
-  <tag><htmlurl url="atmos.html" name="atmos.html"></tag>
-  Topics specific to the Oric Atmos.
-
-  <tag><htmlurl url="c128.html" name="c128.html"></tag>
-  Topics specific to the Commodore 128.
-
-  <tag><htmlurl url="c16.html" name="c16.html"></tag>
-  Topics specific to the Commodore 16/116.
-
-  <tag><htmlurl url="c64.html" name="c64.html"></tag>
-  Topics specific to the Commodore 64.
-
-  <tag><htmlurl url="cbm510.html" name="cbm510.html"></tag>
-  Topics specific to the Commodore 510.
-
-  <tag><htmlurl url="cbm610.html" name="cbm610.html"></tag>
-  Topics specific to the Commodore 610.
-
-  <tag><htmlurl url="lynx.html" name="lynx.html"></tag>
-  Topics specific to the Atari Lynx Game Console.
-
-  <tag><htmlurl url="nes.html" name="nes.html"></tag>
-  Topics specific to the Nintendo Entertainment System.
-
-  <tag><htmlurl url="osi.html" name="osi.html"></tag>
-  Topics specific to the Ohio Scientific machines.
-
-  <tag><htmlurl url="pce.html" name="pce.html"></tag>
-  Topics specific to NEC PC-Engine (TurboGrafx) Console.
-
-  <tag><htmlurl url="pet.html" name="pet.html"></tag>
-  Topics specific to the Commodore PET machines.
-
-  <tag><htmlurl url="plus4.html" name="plus4.html"></tag>
-  Topics specific to the Commodore Plus/4.
-
-  <tag><htmlurl url="supervision.html" name="supervision.html"></tag>
-  Topics specific to the Supervision Console.
-
-  <tag><htmlurl url="vic20.html" name="vic20.html"></tag>
-  Topics specific to the Commodore VIC20.
-
-</descrip>
-
-
-</article>
-
diff --git a/doc/intro.sgml b/doc/intro.sgml
deleted file mode 100644 (file)
index d92fd1d..0000000
+++ /dev/null
@@ -1,657 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>cc65 Compiler Intro
-<author>
-<url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">,<newline>
-<url url="mailto:cbmnut@hushmail.com" name="CbmNut">,<newline>
-<url url="mailto:greg.king5@verizon.net" name="Greg King">,<newline>
-<url url="mailto:stephan.muehlstrasser@web.de" name="Stephan M&uuml;hlstrasser">
-<date>2015-03-07
-
-<abstract>
-How to use the cc65 C language system -- an introduction.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This is a short intro of how to use the compiler and the bin-utils. It contains
-a step-by-step example of how to build a complete application from one C and
-one assembly modules. This file does <em/not/ contain a complete reference for
-the tools used in the process. There are separate files describing those tools,
-in detail (see <url url="index.html">).
-
-I do assume that you have downloaded and installed the compiler and
-target-specific files. Windows users should use the friendly .exe installer
-(named cc65-2.13.0-1.exe for version 2.13.0 of the package - adjust the
-version number if necessary). It does not only install the target files, but
-will also set up necessary environment variables for you.
-
-If you're going for the .ZIP archives, please note that there is one file for
-the host platform (Windows, DOS or OS/2), one file for each target platform
-(C64 or whatever) and a separate file containing the docs (which include the
-file you're currently reading). So for most uses, you will need at least 3
-files and unpack all three into one directory. In case of the .ZIP archives,
-you will also need to set the environment variables <tt/CC65_INC/,
-<tt/LD65_LIB/ and <tt/LD65_CFG/ as described below.
-
-<em/Note:/ There is a much simpler way to compile this example, by using the
-<bf/cl65/ compile-and-link utility. However, it makes sense to understand how
-the separate steps work. How to do the example with the <bf/cl65/ utility is
-described <ref id="using-cl65" name="later">.
-
-
-<sect1>Before we start<p>
-
-You will find a copy of the sample modules, used in the next section, in the
-"<tt>cc65/samples/tutorial</tt>" directory. If you encounter problems with
-missing include files and/or libraries, please check the environment variables
-<tt/CC65_INC/, <tt/LD65_LIB/ and <tt/LD65_CFG/. They should point to the
-<tt/include/, <tt/lib/ and <tt/cfg/ subdirectories of the directory, where you
-installed cc65.
-
-
-<sect1>The sample modules<p>
-
-To explain the development flow, I will use the following example modules:
-
-hello.c:
-<tscreen><code>
-        #include <stdio.h>
-        #include <stdlib.h>
-
-        extern const char text[];       /* In text.s */
-
-        int main (void)
-        {
-            printf ("%s\n", text);
-            return EXIT_SUCCESS;
-        }
-</code></tscreen>
-
-text.s:
-<tscreen><code>
-        .export _text
-        _text:  .asciiz "Hello world!"
-</code></tscreen>
-
-
-<sect1>Translation phases<p>
-
-We assume that the target file should be named "hello", and the target system
-is the C64.
-
-<tscreen><verb>
-    +---------+
-    | hello.c |
-    +---------+
-         |
-        cc65
-         \/
-    +---------+       +---------+       +---------+
-    | hello.s |       | text.s  |       | crt0.o  |
-    +---------+       +---------+       +---------+
-         |                 |                 |
-        ca65              ca65              ar65
-         \/                \/                \/
-    +---------+       +---------+       +---------+
-    | hello.o |       | text.o  |       | c64.lib |
-    +---------+       +---------+       +---------+
-         |                    \          /
-         |                     \        /
-         |                      \      /
-         +----------------------->ld65<
-                                   \/
-                                 hello
-</verb></tscreen>
-
-<tt/crt0.o/ (the startup code) and <tt/c64.lib/ (the C64 version of the runtime
-and C library) are provided in binary form in the cc65 package. Actually, the
-startup code is contained in the library, so you won't need to care about it.
-
-
-
-<sect>The compiler<p>
-
-The compiler translates one C source into one assembly source, for each
-invocation. It does <em/not/ create object files directly, and it is <em/not/
-able to translate more than one file per run.
-
-In the example above, we would use the following command line, to translate
-<tt/hello.c/ into <tt/hello.s/:
-
-<tscreen><verb>
-        cc65 -O -t c64 hello.c
-</verb></tscreen>
-
-The <tt/-O/ switch tells the compiler to do an additional optimizer run, which
-is usually a good idea, since it makes the code smaller. If you don't care
-about the size, but want to have slightly faster code, use <tt/-Oi/ to inline
-some runtime functions.
-
-The <tt/-t/ switch is followed by the target system name.
-
-If the compiler does not complain about errors in our "hello world" program, we
-will have a file named "<tt/hello.s/", in our directory, that contains the
-assembly source for the <bf/hello/ module.
-
-For more information about the compiler, see <url url="cc65.html">.
-
-
-
-<sect>The assembler<p>
-
-The assembler translates one assembly source into an object file, for each
-invocation. The assembler is <em/not/ able to translate more than one source
-file per run.
-
-Let's translate the "hello.s" and "text.s" files from our example:
-
-<tscreen><verb>
-        ca65 hello.s
-        ca65 -t c64 text.s
-</verb></tscreen>
-
-The <tt/-t/ switch is needed when translating the <tt/text.s/ file, so the
-text is converted from the input character-set (usually ISO-8859-1) into the
-target character-set (PETSCII, in this example) by the assembler. The
-compiler-generated file <tt/hello.s/ does not contain any character constants,
-so specification of a target is not necessary (it wouldn't do any harm,
-however).
-
-If the assembler does not complain, we should now have two object files (named
-<tt/hello.o/ and <tt/text.o/) in the current directory.
-
-For more information about the assembler, see <url url="ca65.html">.
-
-
-
-<sect>The linker<p>
-
-The linker combines several object and library files into one output file.
-<bf/ld65/ is very configurable, but fortunately has built-in configurations,
-so we don't need to mess with configuration files, here.
-
-The compiler uses small functions to do things that cannot be done inline
-without a big impact on code size. Those runtime functions, together with the
-C library, are in an object-file archive named after the system, in this case,
-"<tt/c64.lib/". We have to specify that file on the command line, so that the
-linker can resolve those functions.
-
-Let's link our files to get the final executable:
-
-<tscreen><verb>
-        ld65 -o hello -t c64 hello.o text.o c64.lib
-</verb></tscreen>
-
-The argument after <tt/-o/ specifies the name of the output file, the argument
-after <tt/-t/ gives the target system. The following arguments are object
-files or libraries. Since the target library resolves imports in <tt/hello.o/
-and <tt/text.o/, it must be specified <em/after/ those files.
-
-After a successful linker run, we have a file named "<tt/hello/", ready for
-our C64!
-
-For more information about the linker, see <url url="ld65.html">.
-
-
-
-<sect>The easy way (using the cl65 utility)<label id="using-cl65"><p>
-
-The <bf/cl65/ utility is able to do all of the steps described above, in just
-one command line, and it has defaults for some options that are very
-well-suited for our example.
-
-To compile both files into one executable, enter:
-
-<tscreen><verb>
-        cl65 -O hello.c text.s
-</verb></tscreen>
-
-The <bf/cl65/ utility knows how to translate C files into object files (it will
-call the compiler, and then the assembler). It does know also how to create
-object files from assembly files (it will call only the assembler, for that).
-It knows how to build an executable (it will pass all object files to the
-linker). And finally, it has the C64 as a default target, and will supply the
-correct startup file and runtime library names to the linker, so you don't
-have to care about that.
-
-The one-liner above should give you a C64 executable named "<tt/hello/" in the
-current directory.
-
-For more information about the compile &amp; link utility, see <url
-url="cl65.html">.
-
-
-
-<sect>Running The Executable<p>
-
-<em/Note: this section is incomplete!/
-
-Depending on the target, cc65 chooses several methods of making a program
-available for execution. Here, we list sample emulators and instructions for
-running the program. Unless noted, similar instructions would also apply to a
-real machine. One word of advice: we suggest you clear the screen at the
-start, and wait for a keypress at the end of your program, as each target
-varies in its start and exit conditions.
-
-
-<sect1>Apple
-
-<sect2>AppleWin<p>
-Available at <url
-url="http://applewin.berlios.de/">:
-
-Emulates Apple&nbsp;&rsqb;&lsqb;/enhanced&nbsp;Apple&nbsp;//e computers, with
-sound, video, joysticks, serial port, and disk images. Includes monitor. Only
-for Windows. The package comes with a DOS 3.3 disk (called "master.dsk") image;
-however, you will need <bf/AppleCommander 1.3.5/ or later (available at <url
-url="http://applecommander.sourceforge.net/">).
-
-Compile the tutorial with
-
-<tscreen><verb>
-cl65 -O -t apple2 hello.c text.s
-</verb></tscreen>
-for the Apple&nbsp;&rsqb;&lsqb;, or:
-<tscreen><verb>
-cl65 -O -t apple2enh hello.c text.s
-</verb></tscreen>
-for the enhanced&nbsp;Apple&nbsp;//e.
-
-Then, put the file onto an Apple disk image, for use with an emulator.  Copy
-the <tt/master.dsk/ which comes with <bf/AppleWin/, and rename it to
-<tt/cc65.dsk/, then use <bf/AppleCommander/:
-
-<tscreen><verb>
-java -jar ac.jar -cc65 cc65.dsk test B < hello
-</verb></tscreen>
-
-Note that a convention in the Apple world is that "hello" is the file which is
-run automatically upon booting a DOS disk, sort of like the "autoexec.bat" of
-the MSDOS/Windows world.  We've avoided that in the example, however.  Also,
-the <tt/B/ parameter must be in caps., and "test" is the name of the program as
-it will appear on the Apple disk.
-
-Start the emulator, click on the <bf/Disk 1/ icon, and point to <bf/cc65.dsk/;
-then, click the big Apple logo, to boot the system.  Then, type this on the
-Apple:
-
-<tscreen><verb>
-BRUN TEST
-</verb></tscreen>
-
-You will see "Hello, World!" appear on the same line.  Thanks to
-<url url="mailto:ol.sc@web.de" name="Oliver Schmidt"> for his help
-in completing this section.
-
-
-<sect1>Atari
-
-<sect2>Atari800Win PLus<p>
-Available at <url
-url="http://www.atari.org.pl/PLus/index_us.htm">:
-
-Emulates Atari 400/800/65XE/130XE/800XL/1200XL/5200, with stereo sound, disk
-images, scanline-exact NTSC/PAL video, joysticks, mouse, cartridges, and RAM
-expansions. Includes monitor. Unfortunately, only for Windows. You will need
-the emulator, "atarixl.rom" or "atariosb.rom"/"ataribas.rom", and "dos25.xfd"
-files (not supplied).
-
-Compile the tutorial with
-
-<tscreen><verb>
-cl65 -O -t atari hello.c text.s
-</verb></tscreen>
-
-Start the emulator, choose <bf/File&gt;Autoboot image/ or <bf/File&gt;Load
-executable/, and point to the "<bf/hello/" executable.  It is customary to
-rename executables of that type to "<bf/hello.xex/".  The file has a 7-byte
-header meant to be loaded directly from Atari DOS 2/2.5 or compatibles.
-
-On a real Atari, you would need a disk drive, and Atari DOS 2.5 or compatible.
-Turn on the computer, type
-
-<tscreen><verb>
-DOS
-</verb></tscreen>
-
-at the BASIC prompt, then choose <bf/N. CREATE MEM.SAV/,
-then choose <bf/L. BINARY LOAD/, and enter <tt/HELLO/.
-
-The emulation, also, supports that method.  Look at <bf/Atari&gt;Settings/, and
-check <bf/Enable H: Patch for Hard Disk Devices/, then <bf/Atari&gt;Hard
-disks/, and set the path of <bf/H1:/ to your executables directory, then use
-"<bf/H0:HELLO.XEX/" in the above procedure (after pressing <tt/L/), to access
-your harddrive directly.
-
-<em/Note:/ There is no delay after the program exits, as you are returned
-to the DOS menu.  Your C program should wait for a keypress if you want to see
-any output.
-
-
-<sect1>Atmos
-
-<sect2>Oricutron<p>
-Available at <url
-url="http://code.google.com/p/oriculator/">:
-
-Emulates Oric-1 and Atmos computers, with sound, disk images,
-scanline-exact NTSC/PAL video, and movie export. Includes a monitor.
-Fortunately, for all SDL platforms. You will need just the emulator; all
-ROMs are supplied.
-
-Compile the tutorial with
-
-<tscreen><verb>
-cl65 -O -t atmos hello.c text.s -o hello.tap
-</verb></tscreen>
-
-Start the emulator, choose <bf/F1/ and <bf/Insert tape.../, and point to
-the "<bf/hello.tap/" executable. After it has finished loading, type
-
-<tscreen><verb>
-RUN
-</verb></tscreen>
-
-On a real Atmos, you would need a tape drive.
-Turn on the computer, type
-
-<tscreen><verb>
-CLOAD""
-</verb></tscreen>
-
-at the BASIC prompt. After it has finished loading, type
-
-<tscreen><verb>
-RUN
-</verb></tscreen>
-
-The emulation, also, supports that method.
-
-
-<sect1>Commodore
-
-<sect2>VICE<p>
-Available at <url
-url="http://vice-emu.sourceforge.net/">:
-
-Emulates Commodore 64/128/VIC-20/PET/CBM II/Plus 4 computers. Supports
-printers, serial port and adapters, stereo sound, disk drives and images, RAM expansions,
-cartridges, ethernet connection, cycle-exact NTSC/PAL video, mice, graphics tablet,
-lightpens, and joysticks. Includes monitor. Runs on MSDOS/PCDOS, Win9x/ME/NT/2000/XP, OS2,
-BeOS x86, Acorn RISC OS, and most Unixes.
-
-Compile the tutorial with
-<tscreen><verb>
-cl65 -O -t &lt;sys&gt; hello.c text.s
-</verb></tscreen>
-Substitute the name of a Commodore computer for that <tt/&lt;sys&gt;/:
-<itemize>
-<item><tt/c128/
-<item><tt/c16/
-<item><tt/c64/
-<item><tt/cbm510/
-<item><tt/cbm610/
-<item><tt/pet/
-<item><tt/plus4/
-<item><tt/vic20/
-</itemize>
-
-Start the desired version of the emulator (CBM610 programs run on
-the CBM II &lsqb;<tt/xcbm2/&rsqb; emulator).
-
-In the Windows versions of VICE, choose <bf>File&gt;Autoboot disk/tape
-image...</bf>, choose your executable, and click <bf/OK/.
-
-In the Unix versions, hold down the mouse's first button. Move the pointer to
-<bf>Smart-attach disk/tape...</bf>, and release the button. Choose your
-executable, and click <bf/Autostart/.
-
-The file has a 14-byte header which corresponds to a PRG-format BASIC program,
-consisting of a single line, similar to this:
-
-<tscreen><code>
-1000 sys2061
-</code></tscreen>
-
-On a real Commodore with attached disk drive, you would type:
-
-<tscreen><verb>
-LOAD "0:HELLO",8
-</verb></tscreen>
-
-for VIC-20/C64, or:
-
-<tscreen><verb>
-DLOAD "HELLO"
-</verb></tscreen>
-
-on PET/CBM II/C128/C16/Plus 4; then, type
-
-<tscreen><verb>
-RUN
-</verb></tscreen>
-
-On a Commodore 128, you can combine those two commands:
-<tscreen><verb>
-RUN "HELLO"
-</verb></tscreen>
-
-The output will appear on a separate line, and you will be returned to a BASIC
-prompt.
-
-
-<sect1>GEOS<p>
-Available at <it/Click Here Software's/ <url
-url="http://cbmfiles.com/geos/index.html" name="GEOS download section">:
-
-<it><bf/G/raphics <bf/E/nvironment <bf/O/perating <bf/S/ystem.</it>
-It provides a WIMP GUI (Windows, Icons, and Mouse-Pointer Graphical User
-Interface) for Commodore's computer models <bf/64/ and <bf/128/.  It can be
-controlled by many different types of input devices:
-<itemize>
-<item>keyboard
-<item>joysticks
-<item>mice
-<item>trackballs
-<item>graphics drawing tablets
-<item>light-pens
-</itemize>
-
-The tutorial files are different for GEOS.  You will find them "next door," in
-"<tt>cc65/samples/geos</tt>"; they are called "<tt/hello1.c/" and
-"<tt/hello1res.grc/".
-
-Compile the tutorial with
-<tscreen><verb>
-cl65 -t geos-cbm -O -o hello1 hello1res.grc hello1.c
-</verb></tscreen>
-Copy the resulting file "<tt/hello1/" onto a (GEOS-format) disk.
-
-Boot the GEOS master disk/image.
-
-<quote>
-When you want to run GEOS in an emulator, you must adjust that emulator so that
-it does a "true drive" emulation. Each emulator has its own way of turning that
-feature on.
-</quote>
-
-<quote>
-VICE even has different ways that depend on which operating system is running
-the emulator.
-<itemize>
-<item>In Windows, you must click on <bf/Options/ (in an always visible menu).
-      Then, you must click on <bf/True drive emulation/.
-<item>In Unix, you must <em/hold down/ the second button on your mouse.  Move
-      the pointer down to <bf/Drive settings/.  Then, move the pointer over to
-      <bf/Enable true drive emulation/.  (If there is a check-mark in front of
-      those words, that feature already is turned on -- then, move the pointer
-      off of that menu.) Release the mouse button.
-</itemize>
-</quote>
-
-Find the <bf/CONVERT/ program on the boot disk &lsqb;tap the 6-key; then, you
-should see its icon in the fourth position on the <bf/deskTop/'s directory
-notePad&rsqb;.  Move GEOS's pointer over to <bf/CONVERT/'s icon; double-click
-it to run that program.  Click on the <bf/Disk/ icon; put the disk with
-"<tt/hello1/" into the drive; and, click the <bf/OK/ icon.  Use the little
-icons under the list of file-names to move through that list until you find
-"<tt/hello1/".  Click on it; and then, click on the <bf/Convrt/ icon.
-<bf/CONVERT/ will ask you to confirm that you choose the correct file; click
-<bf/YES/ if you did (or, click <bf/NO/ if you made a mistake).  After the
-program has converted "<tt/hello1/" from a CBM file into a GEOS file, it will
-announce what it did -- click on <bf/OK/.  <bf/CONVERT/ will show the file list
-again.  This time, click on <bf/Quit/.
-
-(You might need to put the boot disk back into the drive, in order to reload
-<bf/deskTop/.  Then, you must swap back to the disk with the tutorial program
-on it, and click on its disk icon &lsqb;on the right side of the screen&rsqb;.)
-
-Now, you must find <bf/hello1/.  Click on the lower left-hand corner of the
-directory notePad.  Look at the eight file-positions on each page until you see
-<bf/hello1/.  Double-click on its icon.
-
-The output is shown in a GEOS dialog box; click <bf/OK/ when you have finished
-reading it.
-
-
-<sect1>Ohio Scientific Challenger 1P<p>
-The <tt/osic1p/ runtime library returns to the boot prompt when the main()
-program exits. Therefore, the C file in the tutorial must be modified
-slightly, in order to see the results on the screen. Otherwise, the program
-would print the text string, and then jump to the boot prompt, making it
-impossible to see the results of running the tutorial program.
-
-In addition to that, the <tt/osic1p/ target does not yet have support for stdio
-functions. Only the functions from the conio library are available.
-
-Therefore, modify the "<tt/hello.c/" source file, as follows:
-
-<tscreen><code>
-#include <conio.h>
-#include <stdlib.h>
-
-extern const char text[];       /* In text.s */
-
-int main (void)
-{
-    clrscr ();
-    cprintf ("%s\r\nPress <RETURN>.\r\n", text);
-    cgetc ();
-    return EXIT_SUCCESS;
-}
-</code></tscreen>
-
-Compile the tutorial with
-
-<tscreen><verb>
-cl65 -O -t osic1p -u __BOOT__ -o hello.lod hello.c text.s
-</verb></tscreen>
-
-The program is configured for a Challenger 1P computer with, at least, 32 kB
-of RAM. See the <url url="osi.html"
-name="Ohio Scientifc-specific documentation"> for instructions about how to
-compile for other RAM sizes.
-
-Plug a cassette player into your C1P computer; or, connect an RS-232 cable
-between your C1P and a PC (set the PC's serial port to 300 Bits Per Second,
-8 data bits, No parity, and 2 stop bits).  (Turn on the computers.)
-
-Tap the "<bf/BREAK/" key, to display the boot prompt; then, tap the "<tt/M/"
-key, to enter the 65V PROM monitor. Tap the "<tt/L/" key. Either start the
-cassette player (with a tape of the program), or start a transfer of the
-program file "<tt/hello.lod/" from the PC. After a while, you should see the
-following text on the screen:
-
-<tscreen><verb>
-Hello world!
-Press <RETURN>.
-</verb></tscreen>
-
-(Stop the cassette player.) After hitting the RETURN key, you should see the
-boot prompt again.
-
-<sect2>WinOSI<p>
-Available at <url
-url="http://osi.marks-lab.com/#Emulator">:
-
-Emulates the Ohio Scientific Challenger computers in different configurations.
-Configure it to emulate a C1P (model 600 board) with 32 kB of RAM.
-
-Compile the tutorial with the same command that is used to make the program
-for a real machine.
-
-Start the emulator. Tap the "<tt/M/" key, to enter the 65V PROM monitor; then,
-tap the "<tt/L/" key. If you had configured WinOSI to ask for a file when it
-starts to read data from the serial port, then you will see a file dialog box;
-otherwise, you must tap your host keyboard's F10 function key. Select the file
-"<tt/hello.lod/". After a moment, you should see the following text on the
-screen:
-
-<tscreen><verb>
-Hello world!
-Press <RETURN>.
-</verb></tscreen>
-
-After hitting the RETURN key, you should see the boot prompt again.
-
-<sect2>C1Pjs<p>
-Available at <url
-url="http://www.pcjs.org/docs/c1pjs/">:
-
-Emulates the Ohio Scientific Challenger 1P computer in different configurations.
-The 32 kB RAM machine that must be used with the default compiler settings is
-<url url="http://www.pcjs.org/devices/c1p/machine/32kb/" name="here">.
-
-In addition to cc65, the <bf/srec_cat/ program from <url
-url="http://srecord.sourceforge.net/" name="the SRecord tool collection">
-must be installed. Some Linux distributions also provide srecord directly as
-an installable package.
-
-Compile the tutorial with this command line:
-
-<tscreen><verb>
-cl65 -O -t osic1p hello.c text.s
-</verb></tscreen>
-
-Convert the binary file into a text file that can be loaded via
-the Ohio Scientific 65V PROM monitor, at start address 0x200:
-
-<tscreen><verb>
-srec_cat hello -binary -offset 0x200 -o hello.c1p -Ohio_Scientific -execution-start-address=0x200
-</verb></tscreen>
-
-Open the URL that points to the 32 kB machine; and, wait until the emulator
-has been loaded. Click on the "<bf/BREAK/" button to display the boot prompt;
-then, press the "<tt/M/" key to enter the 65V PROM monitor. Click the
-"<bf/Browse.../" button; and, select the file "<tt/hello.c1p/" that was
-created as the output of the above invocation of the "<tt/srec_cat/" command.
-Press the "<bf/Load/" button. You should see the following text on the screen:
-
-<tscreen><verb>
-Hello world!
-Press <RETURN>.
-</verb></tscreen>
-
-After hitting the RETURN key, you should see the boot prompt again.
-
-
-<sect1>Contributions wanted<p>
-
-We need your help! Recommended emulators and instructions for other targets
-are missing.  We suggest that you choose emulators with good compatibility.
-Also, being able to run all computers in the target series is good for
-target compatibility testing. A machine-language monitor is almost essential
-for debugging, but a native debugger could be used, as well.
-
-Finally, emulators which run on Unix or Windows would help to reach a wider
-audience.
-
-</article>
diff --git a/doc/ld65.sgml b/doc/ld65.sgml
deleted file mode 100644 (file)
index 329f975..0000000
+++ /dev/null
@@ -1,1088 +0,0 @@
-<!doctype linuxdoc system>      <!-- -*- text-mode -*- -->
-
-<article>
-<title>ld65 Users Guide
-<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
-<date>2014-04-20
-
-<abstract>
-The ld65 linker combines object files into an executable file. ld65 is highly
-configurable and uses configuration files for high flexibility.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-The ld65 linker combines several object modules created by the ca65
-assembler, producing an executable file. The object modules may be read
-from a library created by the ar65 archiver (this is somewhat faster and
-more convenient). The linker was designed to be as flexible as possible.
-It complements the features that are built into the ca65 macroassembler:
-
-<itemize>
-
-<item> Accept any number of segments to form an executable module.
-
-<item> Resolve arbitrary expressions stored in the object files.
-
-<item> In case of errors, use the meta information stored in the object files
-       to produce helpful error messages. In case of undefined symbols,
-       expression range errors, or symbol type mismatches, ld65 is able to
-       tell you the exact location in the original assembler source, where
-       the symbol was referenced.
-
-<item> Flexible output. The output of ld65 is highly configurable by a config
-       file. Some more-common platforms are supported by default configurations
-       that may be activated by naming the target system. The output
-       generation was designed with different output formats in mind, so
-       adding other formats shouldn't be a great problem.
-
-</itemize>
-
-
-<sect>Usage<p>
-
-
-<sect1>Command-line option overview<p>
-
-The linker is called as follows:
-
-<tscreen><verb>
----------------------------------------------------------------------------
-Usage: ld65 [options] module ...
-Short options:
-  -(                    Start a library group
-  -)                    End a library group
-  -C name               Use linker config file
-  -D sym=val            Define a symbol
-  -L path               Specify a library search path
-  -Ln name              Create a VICE label file
-  -S addr               Set the default start address
-  -V                    Print the linker version
-  -h                    Help (this text)
-  -m name               Create a map file
-  -o name               Name the default output file
-  -t sys                Set the target system
-  -u sym                Force an import of symbol `sym'
-  -v                    Verbose mode
-  -vm                   Verbose map file
-
-Long options:
-  --cfg-path path       Specify a config file search path
-  --config name         Use linker config file
-  --dbgfile name        Generate debug information
-  --define sym=val      Define a symbol
-  --end-group           End a library group
-  --force-import sym    Force an import of symbol `sym'
-  --help                Help (this text)
-  --lib file            Link this library
-  --lib-path path       Specify a library search path
-  --mapfile name        Create a map file
-  --module-id id        Specify a module id
-  --obj file            Link this object file
-  --obj-path path       Specify an object file search path
-  --start-addr addr     Set the default start address
-  --start-group         Start a library group
-  --target sys          Set the target system
-  --version             Print the linker version
----------------------------------------------------------------------------
-</verb></tscreen>
-
-
-<sect1>Command-line options in detail<p>
-
-Here is a description of all of the command-line options:
-
-<descrip>
-
-  <label id="option--start-group">
-  <tag><tt>-(, --start-group</tt></tag>
-
-  Start a library group. The libraries specified within a group are searched
-  multiple times to resolve crossreferences within the libraries. Normally,
-  crossreferences are resolved only within a library, that is the library is
-  searched multiple times. Libraries specified later on the command line
-  cannot reference otherwise unreferenced symbols in libraries specified
-  earlier, because the linker has already handled them. Library groups are
-  a solution for this problem, because the linker will search repeatedly
-  through all libraries specified in the group, until all possible open
-  symbol references have been satisfied.
-
-
-  <tag><tt>-), --end-group</tt></tag>
-
-  End a library group. See the explanation of the <tt><ref
-  id="option--start-group" name="--start-group"></tt> option.
-
-
-  <tag><tt>-h, --help</tt></tag>
-
-  Print the short option summary shown above.
-
-
-  <label id="option-m">
-  <tag><tt>-m name, --mapfile name</tt></tag>
-
-  This option (which needs an argument that will used as a filename for
-  the generated map file) will cause the linker to generate a map file.
-  The map file does contain a detailed overview over the modules used, the
-  sizes for the different segments, and a table containing exported
-  symbols.
-
-
-  <label id="option-o">
-  <tag><tt>-o name</tt></tag>
-
-  The -o switch is used to give the name of the default output file.
-  Depending on your output configuration, this name <em/might not/ be used as the
-  name for the output file. However, for the default configurations, this
-  name is used for the output file name.
-
-
-  <label id="option-t">
-  <tag><tt>-t sys, --target sys</tt></tag>
-
-  The argument for the -t switch is the name of the target system. Since this
-  switch will activate a default configuration, it may not be used together
-  with the <tt><ref id="option-C" name="-C"></tt> option. The following target
-  systems are currently supported:
-
-  <itemize>
-  <item>none
-  <item>module
-  <item>apple2
-  <item>apple2enh
-  <item>atari
-  <item>atarixl
-  <item>atmos
-  <item>c16 (works also for the c116 with memory up to 32K)
-  <item>c64
-  <item>c128
-  <item>cbm510 (CBM-II series with 40-column video)
-  <item>cbm610 (all CBM series-II computers with 80-column video)
-  <item>geos-apple
-  <item>geos-cbm
-  <item>lunix
-  <item>lynx
-  <item>nes
-  <item>pet (all CBM PET systems except the 2001)
-  <item>plus4
-  <item>sim6502
-  <item>sim65c02
-  <item>supervision
-  <item>vic20
-  </itemize>
-
-  There are a few more targets defined but neither of them is actually
-  supported.
-
-
-  <tag><tt>-u sym[:addrsize], --force-import sym[:addrsize]</tt></tag>
-
-  Force an import of a symbol. While object files are always linked to the
-  output file, regardless if there are any references, object modules from
-  libraries get only linked in if an import can be satisfied by this module.
-  The <tt/--force-import/ option may be used to add a reference to a symbol and
-  as a result force linkage of the module that exports the identifier.
-
-  The name of the symbol may optionally be followed by a colon and an address-size
-  specifier. If no address size is specified, the default address size
-  for the target machine is used.
-
-  Please note that the symbol name needs to have the internal representation,
-  meaning you have to prepend an underscore for C identifiers.
-
-
-  <label id="option-v">
-  <tag><tt>-v, --verbose</tt></tag>
-
-  Using the -v option, you may enable more output that may help you to
-  locate problems. If an undefined symbol is encountered, -v causes the
-  linker to print a detailed list of the references (that is, source file
-  and line) for this symbol.
-
-
-  <tag><tt>-vm</tt></tag>
-
-  Must be used in conjunction with <tt><ref id="option-m" name="-m"></tt>
-  (generate map file). Normally the map file will not include empty segments
-  and sections, or unreferenced symbols. Using this option, you can force the
-  linker to include all that information into the map file.  Also, it will
-  include a second <tt/Exports/ list.  The first list is sorted by name;
-  the second one is sorted by value.
-
-
-  <label id="option-C">
-  <tag><tt>-C</tt></tag>
-
-  This gives the name of an output config file to use. See section 4 for more
-  information about config files. -C may not be used together with <tt><ref
-  id="option-t" name="-t"></tt>.
-
-
-  <label id="option-D">
-  <tag><tt>-D sym=value, --define sym=value</tt></tag>
-
-  This option allows to define an external symbol on the command line. Value
-  may start with a '&dollar;' sign or with <tt/0x/ for hexadecimal values,
-  otherwise a leading zero denotes octal values. See also <ref
-  id="SYMBOLS" name="the SYMBOLS section"> in the configuration file.
-
-
-  <label id="option--lib-path">
-  <tag><tt>-L path, --lib-path path</tt></tag>
-
-  Specify a library search path. This option may be used more than once. It
-  adds a directory to the search path for library files. Libraries specified
-  without a path are searched in the current directory, in the list of
-  directories specified using <tt/--lib-path/, in directories given by
-  environment variables, and in a built-in default directory.
-
-
-  <tag><tt>-Ln</tt></tag>
-
-  This option allows you to create a file that contains all global labels and
-  may be loaded into the VICE emulator using the <tt/ll/ (load label) command. You
-  may use this to debug your code with VICE. Note: Older versions had some
-  bugs in the label code. If you have problems, please get the latest <url
-  url="http://vice-emu.sourceforge.net/" name="VICE"> version.
-
-
-  <label id="option-S">
-  <tag><tt>-S addr, --start-addr addr</tt></tag>
-
-  Using -S you may define the default starting address. If and how this
-  address is used depends on the config file in use. For the default
-  configurations, only the "none", "apple2" and "apple2enh" systems honor an
-  explicit start address, all other default configs provide their own.
-
-
-  <tag><tt>-V, --version</tt></tag>
-
-  This option prints the version number of the linker. If you send any
-  suggestions or bugfixes, please include this number.
-
-
-  <label id="option--cfg-path">
-  <tag><tt>--cfg-path path</tt></tag>
-
-  Specify a config file search path. This option may be used more than once.
-  It adds a directory to the search path for config files. A config file given
-  with the <tt><ref id="option-C" name="-C"></tt> option that has no path in
-  its name is searched in the current directory, in the list of directories
-  specified using <tt/--cfg-path/, in directories given by environment variables,
-  and in a built-in default directory.
-
-
-  <label id="option--dbgfile">
-  <tag><tt>--dbgfile name</tt></tag>
-
-  Specify an output file for debug information. Available information will be
-  written to this file. Using the <tt/-g/ option for the compiler and assembler
-  will increase the amount of information available. Please note that debug
-  information generation is currently being developed, so the format of the
-  file and its contents are subject to change without further notice.
-
-
-  <tag><tt>--lib file</tt></tag>
-
-  Links a library to the output. Use this command-line option instead of just
-  naming the library file, if the linker is not able to determine the file
-  type because of an unusual extension.
-
-
-  <tag><tt>--obj file</tt></tag>
-
-  Links an object file to the output. Use this command-line option instead
-  of just naming the object file, if the linker is not able to determine the
-  file type because of an unusual extension.
-
-
-  <label id="option--obj-path">
-  <tag><tt>--obj-path path</tt></tag>
-
-  Specify an object file search path. This option may be used more than once.
-  It adds a directory to the search path for object files. An object file
-  passed to the linker that has no path in its name is searched in the current
-  directory, in the list of directories specified using <tt/--obj-path/, in
-  directories given by environment variables, and in a built-in default directory.
-
-</descrip>
-
-
-
-<sect>Search paths<p>
-
-Starting with version 2.10, there are now several search-path lists for files needed
-by the linker: one for libraries, one for object files, and one for config
-files.
-
-
-<sect1>Library search path<p>
-
-The library search-path list contains in this order:
-
-<enum>
-<item>The current directory.
-<item>Any directory added with the <tt><ref id="option--lib-path"
-      name="--lib-path"></tt> option on the command line.
-<item>The value of the environment variable <tt/LD65_LIB/ if it is defined.
-<item>A subdirectory named <tt/lib/ of the directory defined in the environment
-      variable <tt/CC65_HOME/, if it is defined.
-<item>An optionally compiled-in library path.
-</enum>
-
-
-<sect1>Object file search path<p>
-
-The object file search-path list contains in this order:
-
-<enum>
-<item>The current directory.
-<item>Any directory added with the <tt><ref id="option--obj-path"
-      name="--obj-path"></tt> option on the command line.
-<item>The value of the environment variable <tt/LD65_OBJ/ if it is defined.
-<item>A subdirectory named <tt/obj/ of the directory defined in the environment
-      variable <tt/CC65_HOME/, if it is defined.
-<item>An optionally compiled-in directory.
-</enum>
-
-
-<sect1>Config file search path<p>
-
-The config file search-path list contains in this order:
-
-<enum>
-<item>The current directory.
-<item>Any directory added with the <tt><ref id="option--cfg-path"
-      name="--cfg-path"></tt> option on the command line.
-<item>The value of the environment variable <tt/LD65_CFG/ if it is defined.
-<item>A subdirectory named <tt/cfg/ of the directory defined in the environment
-      variable <tt/CC65_HOME/, if it is defined.
-<item>An optionally compiled-in directory.
-</enum>
-
-
-
-<sect>Detailed workings<p>
-
-The linker does several things when combining object modules:
-
-First, the command line is parsed from left to right. For each object file
-encountered (object files are recognized by a magic word in the header, so
-the linker does not care about the name), imported and exported
-identifiers are read from the file and inserted in a table. If a library
-name is given (libraries are also recognized by a magic word, there are no
-special naming conventions), all modules in the library are checked if an
-export from this module would satisfy an import from other modules. All
-modules where this is the case are marked. If duplicate identifiers are
-found, the linker issues warnings.
-
-That procedure (parsing and reading from left to right) does mean that a
-library may only satisfy references for object modules (given directly or from
-a library) named <em/before/ that library. With the command line
-
-<tscreen><verb>
-        ld65 crt0.o clib.lib test.o
-</verb></tscreen>
-
-the module <tt/test.o/ must not contain references to modules in the library
-<tt/clib.lib/.  But, if it does, you have to change the order of the modules
-on the command line:
-
-<tscreen><verb>
-        ld65 crt0.o test.o clib.lib
-</verb></tscreen>
-
-Step two is, to read the configuration file, and assign start addresses
-for the segments and define any linker symbols (see <ref id="config-files"
-name="Configuration files">).
-
-After that, the linker is ready to produce an output file. Before doing that,
-it checks its data for consistency. That is, it checks for unresolved
-externals (if the output format is not relocatable) and for symbol type
-mismatches (for example a zero-page symbol is imported by a module as an absolute
-symbol).
-
-Step four is, to write the actual target files. In this step, the linker will
-resolve any expressions contained in the segment data. Circular references are
-also detected in this step (a symbol may have a circular reference that goes
-unnoticed if the symbol is not used).
-
-Step five is to output a map file with a detailed list of all modules,
-segments and symbols encountered.
-
-And, last step, if you give the <tt><ref id="option-v" name="-v"></tt> switch
-twice, you get a dump of the segment data. However, this may be quite
-unreadable if you're not a developer. :-)
-
-
-
-<sect>Configuration files<label id="config-files"><p>
-
-Configuration files are used to describe the layout of the output file(s). Two
-major topics are covered in a config file: The memory layout of the target
-architecture, and the assignment of segments to memory areas. In addition,
-several other attributes may be specified.
-
-Case is ignored for keywords, that is, section or attribute names, but it is
-<em/not/ ignored for names and strings.
-
-
-
-<sect1>Memory areas<p>
-
-Memory areas are specified in a <tt/MEMORY/ section. Let's have a look at an
-example (this one describes the usable memory layout of the C64):
-
-<tscreen><verb>
-        MEMORY {
-            RAM1:  start = $0800, size = $9800;
-            ROM1:  start = $A000, size = $2000;
-            RAM2:  start = $C000, size = $1000;
-            ROM2:  start = $E000, size = $2000;
-        }
-</verb></tscreen>
-
-As you can see, there are two RAM areas and two ROM areas. The names
-(before the colon) are arbitrary names that must start with a letter, with
-the remaining characters being letters or digits. The names of the memory
-areas are used when assigning segments. As mentioned above, case is
-significant for those names.
-
-The syntax above is used in all sections of the config file. The name
-(<tt/ROM1/ etc.) is said to be an identifier, the remaining tokens up to the
-semicolon specify attributes for this identifier. You may use the equal sign
-to assign values to attributes, and you may use a comma to separate
-attributes, you may also leave both out. But you <em/must/ use a semicolon to
-mark the end of the attributes for one identifier. The section above may also
-have looked like this:
-
-<tscreen><verb>
-        # Start of memory section
-        MEMORY
-        {
-            RAM1:
-                start $0800
-                size $9800;
-            ROM1:
-                start $A000
-                size $2000;
-            RAM2:
-                start $C000
-                size $1000;
-            ROM2:
-                start $E000
-                size $2000;
-        }
-</verb></tscreen>
-
-There are of course more attributes for a memory section than just start and
-size. Start and size are mandatory attributes, that means, each memory area
-defined <em/must/ have these attributes given (the linker will check that). I
-will cover other attributes later. As you may have noticed, I've used a
-comment in the example above. Comments start with a hash mark (`#'), the
-remainder of the line is ignored if this character is found.
-
-
-<sect1>Segments<p>
-
-Let's assume you have written a program for your trusty old C64, and you would
-like to run it. For testing purposes, it should run in the <tt/RAM/ area. So
-we will start to assign segments to memory sections in the <tt/SEGMENTS/
-section:
-
-<tscreen><verb>
-        SEGMENTS {
-            CODE:   load = RAM1, type = ro;
-            RODATA: load = RAM1, type = ro;
-            DATA:   load = RAM1, type = rw;
-            BSS:    load = RAM1, type = bss, define = yes;
-        }
-</verb></tscreen>
-
-What we are doing here is telling the linker, that all segments go into the
-<tt/RAM1/ memory area in the order specified in the <tt/SEGMENTS/ section. So
-the linker will first write the <tt/CODE/ segment, then the <tt/RODATA/
-segment, then the <tt/DATA/ segment - but it will not write the <tt/BSS/
-segment. Why? Here enters the segment type: For each segment specified, you may also
-specify a segment attribute. There are four possible segment attributes:
-
-<tscreen><verb>
-        ro      means readonly
-        rw      means read/write
-        bss     means that this is an uninitialized segment
-        zp      a zeropage segment
-</verb></tscreen>
-
-So, because we specified that the segment with the name BSS is of type bss,
-the linker knows that this is uninitialized data, and will not write it to an
-output file. This is an important point: For the assembler, the <tt/BSS/
-segment has no special meaning. You specify, which segments have the bss
-attribute when linking. This approach is much more flexible than having one
-fixed bss segment, and is a result of the design decision to supporting an
-arbitrary segment count.
-
-If you specify "<tt/type = bss/" for a segment, the linker will make sure that
-this segment does only contain uninitialized data (that is, zeroes), and issue
-a warning if this is not the case.
-
-For a <tt/bss/ type segment to be useful, it must be cleared somehow by your
-program (this happens usually in the startup code - for example the startup
-code for cc65-generated programs takes care about that). But how does your
-code know, where the segment starts, and how big it is? The linker is able to
-give that information, but you must request it. This is, what we're doing with
-the "<tt/define = yes/" attribute in the <tt/BSS/ definitions. For each
-segment, where this attribute is true, the linker will export three symbols.
-
-<tscreen><verb>
-        __NAME_LOAD__   This is set to the address where the
-                        segment is loaded.
-        __NAME_RUN__    This is set to the run address of the
-                        segment. We will cover run addresses
-                        later.
-        __NAME_SIZE__   This is set to the segment size.
-</verb></tscreen>
-
-Replace <tt/NAME/ by the name of the segment, in the example above, this would
-be <tt/BSS/. These symbols may be accessed by your code.
-
-Now, as we've configured the linker to write the first three segments and
-create symbols for the last one, there's only one question left: Where does
-the linker put the data? It would be very convenient to have the data in a
-file, wouldn't it?
-
-<sect1>Output files<p>
-
-We don't have any files specified above, and indeed, this is not needed in a
-simple configuration like the one above. There is an additional attribute
-"file" that may be specified for a memory area, that gives a file name to
-write the area data into. If there is no file name given, the linker will
-assign the default file name. This is "a.out" or the one given with the
-<tt><ref id="option-o" name="-o"></tt> option on the command line. Since the
-default behaviour is OK for our purposes, I did not use the attribute in the
-example above. Let's have a look at it now.
-
-The "file" attribute (the keyword may also be written as "FILE" if you like
-that better) takes a string enclosed in double quotes (`&dquot;') that specifies the
-file, where the data is written. You may specify the same file several times,
-in that case the data for all memory areas having this file name is written
-into this file, in the order of the memory areas defined in the <tt/MEMORY/
-section. Let's specify some file names in the <tt/MEMORY/ section used above:
-
-<tscreen><verb>
-        MEMORY {
-            RAM1:  start = $0800, size = $9800, file = %O;
-            ROM1:  start = $A000, size = $2000, file = "rom1.bin";
-            RAM2:  start = $C000, size = $1000, file = %O;
-            ROM2:  start = $E000, size = $2000, file = "rom2.bin";
-        }
-</verb></tscreen>
-
-The <tt/%O/ used here is a way to specify the default behaviour explicitly:
-<tt/%O/ is replaced by a string (including the quotes) that contains the
-default output name, that is, "a.out" or the name specified with the <tt><ref
-id="option-o" name="-o"></tt> option on the command line. Into this file, the
-linker will first write any segments that go into <tt/RAM1/, and will append
-then the segments for <tt/RAM2/, because the memory areas are given in this
-order. So, for the RAM areas, nothing has really changed.
-
-We've not used the ROM areas, but we will do that below, so we give the file
-names here. Segments that go into <tt/ROM1/ will be written to a file named
-"rom1.bin", and segments that go into <tt/ROM2/ will be written to a file
-named "rom2.bin". The name given on the command line is ignored in both cases.
-
-Assigning an empty file name for a memory area will discard the data written
-to it. This is useful, if the memory area has segments assigned that are empty
-(for example because they are of type bss). In that case, the linker will
-create an empty output file. This may be suppressed by assigning an empty file
-name to that memory area.
-
-The <tt/%O/ sequence is also allowed inside a string. So using
-
-<tscreen><verb>
-        MEMORY {
-            ROM1:  start = $A000, size = $2000, file = "%O-1.bin";
-            ROM2:  start = $E000, size = $2000, file = "%O-2.bin";
-        }
-</verb></tscreen>
-
-would write two files that start with the name of the output file specified on
-the command line, with "-1.bin" and "-2.bin" appended respectively. Because
-'%' is used as an escape char, the sequence "%%" has to be used if a single
-percent sign is required.
-
-<sect1>LOAD and RUN addresses (ROMable code)<p>
-
-Let us look now at a more complex example. Say, you've successfully tested
-your new "Super Operating System" (SOS for short) for the C64, and you
-will now go and replace the ROMs by your own code. When doing that, you
-face a new problem: If the code runs in RAM, we need not to care about
-read/write data. But now, if the code is in ROM, we must care about it.
-Remember the default segments (you may of course specify your own):
-
-<tscreen><verb>
-        CODE            read-only code
-        RODATA          read-only data
-        DATA            read/write data
-        BSS             uninitialized data, read/write
-</verb></tscreen>
-
-Since <tt/BSS/ is not initialized, we must not care about it now, but what
-about <tt/DATA/? <tt/DATA/ contains initialized data, that is, data that was
-explicitly assigned a value. And your program will rely on these values on
-startup. Since there's no way to remember the contents of the data segment,
-other than storing it into one of the ROMs, we have to put it there. But
-unfortunately, ROM is not writable, so we have to copy it into RAM before
-running the actual code.
-
-The linker won't copy the data from ROM into RAM for you (this must be done by
-the startup code of your program), but it has some features that will help you
-in this process.
-
-First, you may not only specify a "<tt/load/" attribute for a segment, but
-also a "<tt/run/" attribute. The "<tt/load/" attribute is mandatory, and, if
-you don't specify a "<tt/run/" attribute, the linker assumes that load area
-and run area are the same. We will use this feature for our data area:
-
-<tscreen><verb>
-        SEGMENTS {
-            CODE:   load = ROM1, type = ro;
-            RODATA: load = ROM2, type = ro;
-            DATA:   load = ROM2, run = RAM2, type = rw, define = yes;
-            BSS:    load = RAM2, type = bss, define = yes;
-        }
-</verb></tscreen>
-
-Let's have a closer look at this <tt/SEGMENTS/ section. We specify that the
-<tt/CODE/ segment goes into <tt/ROM1/ (the one at $A000). The readonly data
-goes into <tt/ROM2/. Read/write data will be loaded into <tt/ROM2/ but is run
-in <tt/RAM2/. That means that all references to labels in the <tt/DATA/
-segment are relocated to be in <tt/RAM2/, but the segment is written to
-<tt/ROM2/. All your startup code has to do is, to copy the data from its
-location in <tt/ROM2/ to the final location in <tt/RAM2/.
-
-So, how do you know, where the data is located? This is the second point,
-where you get help from the linker. Remember the "<tt/define/" attribute?
-Since we have set this attribute to true, the linker will define three
-external symbols for the data segment that may be accessed from your code:
-
-<tscreen><verb>
-        __DATA_LOAD__   This is set to the address where the segment
-                        is loaded, in this case, it is an address in
-                        ROM2.
-        __DATA_RUN__    This is set to the run address of the segment,
-                        in this case, it is an address in RAM2.
-        __DATA_SIZE__   This is set to the segment size.
-</verb></tscreen>
-
-So, what your startup code must do, is to copy <tt/__DATA_SIZE__/ bytes from
-<tt/__DATA_LOAD__/ to <tt/__DATA_RUN__/ before any other routines are called.
-All references to labels in the <tt/DATA/ segment are relocated to <tt/RAM2/
-by the linker, so things will work properly.
-
-There's a library subroutine called <tt/copydata/ (in a module named
-<tt/copydata.s/) that might be used to do actual copying. Be sure to have a
-look at it's inner workings before using it!
-
-
-<sect1>Other MEMORY area attributes<p>
-
-There are some other attributes not covered above. Before starting the
-reference section, I will discuss the remaining things here.
-
-You may request symbols definitions also for memory areas. This may be
-useful for things like a software stack, or an I/O area.
-
-<tscreen><verb>
-        MEMORY {
-            STACK:  start = $C000, size = $1000, define = yes;
-        }
-</verb></tscreen>
-
-This will define some external symbols that may be used in your code:
-
-<tscreen><verb>
-        __STACK_START__         This is set to the start of the memory
-                                area, $C000 in this example.
-        __STACK_SIZE__          The size of the area, here $1000.
-        __STACK_LAST__          This is NOT the same as START+SIZE.
-                                Instead, it is defined as the first
-                                address that is not used by data. If we
-                                don't define any segments for this area,
-                                the value will be the same as START.
-        __STACK_FILEOFFS__      The binary offset in the output file. This
-                                is not defined for relocatable output file
-                                formats (o65).
-</verb></tscreen>
-
-A memory section may also have a type. Valid types are
-
-<tscreen><verb>
-        ro      for readonly memory
-        rw      for read/write memory.
-</verb></tscreen>
-
-The linker will assure, that no segment marked as read/write or bss is put
-into a memory area that is marked as readonly.
-
-Unused memory in a memory area may be filled. Use the "<tt/fill = yes/"
-attribute to request this. The default value to fill unused space is zero. If
-you don't like this, you may specify a byte value that is used to fill these
-areas with the "<tt/fillval/" attribute. If there is no "<tt/fillval/"
-attribute for the segment, the "<tt/fillval/" attribute of the memory area (or
-its default) is used instead. This means that the value may also be used to
-fill unfilled areas generated by the assembler's <tt/.ALIGN/ and <tt/.RES/
-directives.
-
-The symbol <tt/%S/ may be used to access the default start address (that is,
-the one defined in <ref id="FEATURES" name="the FEATURES section">, or the
-value given on the command line with the <tt><ref id="option-S" name="-S"></tt>
-option).
-
-To support systems with banked memory, a special attribute named <tt/bank/ is
-available. The attribute value is an arbitrary 32-bit integer. The assembler
-has a builtin function named <tt/.BANK/ which may be used with an argument
-that has a segment reference (for example a symbol). The result of this
-function is the value of the bank attribute for the run memory area of the
-segment.
-
-
-<sect1>Other SEGMENT attributes<p>
-
-Segments may be aligned to some memory boundary. Specify "<tt/align = num/" to
-request this feature. Num must be a power of two. To align all segments on a
-page boundary, use
-
-<tscreen><verb>
-        SEGMENTS {
-            CODE:   load = ROM1, type = ro, align = $100;
-            RODATA: load = ROM2, type = ro, align = $100;
-            DATA:   load = ROM2, run = RAM2, type = rw, define = yes,
-                    align = $100;
-            BSS:    load = RAM2, type = bss, define = yes, align = $100;
-        }
-</verb></tscreen>
-
-If an alignment is requested, the linker will add enough space to the output
-file, so that the new segment starts at an address that is dividable by the
-given number without a remainder. All addresses are adjusted accordingly. To
-fill the unused space, bytes of zero are used, or, if the memory area has a
-"<tt/fillval/" attribute, that value. Alignment is always needed, if you have
-used the <tt/.ALIGN/ command in the assembler. The alignment of a segment
-must be equal or greater than the alignment used in the <tt/.ALIGN/ command.
-The linker will check that, and issue a warning, if the alignment of a segment
-is lower than the alignment requested in an <tt/.ALIGN/ command of one of the
-modules making up this segment.
-
-For a given segment you may also specify a fixed offset into a memory area or
-a fixed start address. Use this if you want the code to run at a specific
-address (a prominent case is the interrupt vector table which must go at
-address $FFFA). Only one of <tt/ALIGN/ or <tt/OFFSET/ or <tt/START/ may be
-specified. If the directive creates empty space, it will be filled with zero,
-of with the value specified with the "<tt/fillval/" attribute if one is given.
-The linker will warn you if it is not possible to put the code at the
-specified offset (this may happen if other segments in this area are too
-large). Here's an example:
-
-<tscreen><verb>
-        SEGMENTS {
-            VECTORS: load = ROM2, type = ro, start = $FFFA;
-        }
-</verb></tscreen>
-
-or (for the segment definitions from above)
-
-<tscreen><verb>
-        SEGMENTS {
-            VECTORS: load = ROM2, type = ro, offset = $1FFA;
-        }
-</verb></tscreen>
-
-The "<tt/align/", "<tt/start/" and "<tt/offset/" attributes change placement
-of the segment in the run memory area, because this is what is usually
-desired. If load and run memory areas are equal (which is the case if only the
-load memory area has been specified), the attributes will also work. There is
-also an "<tt/align_load/" attribute that may be used to align the start of the
-segment in the load memory area, in case different load and run areas have
-been specified. There are no special attributes to set start or offset for
-just the load memory area.
-
-A "<tt/fillval/" attribute may not only be specified for a memory area, but
-also for a segment. The value must be an integer between 0 and 255. It is used
-as the fill value for space reserved by the assembler's <tt/.ALIGN/ and <tt/.RES/
-commands. It is also used as the fill value for space between sections (part of a
-segment that comes from one object file) caused by alignment, but not for
-space that preceeds the first section.
-
-To suppress the warning, the linker issues if it encounters a segment that is
-not found in any of the input files, use "<tt/optional=yes/" as an additional
-segment attribute. Be careful when using this attribute, because a missing
-segment may be a sign of a problem, and if you're suppressing the warning,
-there is no one left to tell you about it.
-
-<sect1>The FILES section<p>
-
-The <tt/FILES/ section is used to support other formats than straight binary
-(which is the default, so binary output files do not need an explicit entry
-in the <tt/FILES/ section).
-
-The <tt/FILES/ section lists output files and as only attribute the format of
-each output file. Assigning binary format to the default output file would
-look like this:
-
-<tscreen><verb>
-        FILES {
-            %O: format = bin;
-        }
-</verb></tscreen>
-
-The only other available output format is the o65 format specified by Andre
-Fachat (see the <url url="http://www.6502.org/users/andre/o65/fileformat.html"
-name="6502 binary relocation format specification">). It is defined like this:
-
-<tscreen><verb>
-        FILES {
-            %O: format = o65;
-        }
-</verb></tscreen>
-
-The necessary o65 attributes are defined in a special section labeled
-<ref id="FORMAT" name="FORMAT">.
-
-
-
-<sect1>The FORMAT section<label id="FORMAT"><p>
-
-The <tt/FORMAT/ section is used to describe file formats. The default (binary)
-format has currently no attributes, so, while it may be listed in this
-section, the attribute list is empty. The second supported format,
-<url url="http://www.6502.org/users/andre/o65/fileformat.html" name="o65">,
-has several attributes that may be defined here.
-
-<tscreen><verb>
-    FORMATS {
-        o65: os = lunix, version = 0, type = small,
-             import = LUNIXKERNEL,
-             export = _main;
-    }
-</verb></tscreen>
-
-
-
-<sect1>The FEATURES section<label id="FEATURES"><p>
-
-In addition to the <tt/MEMORY/ and <tt/SEGMENTS/ sections described above, the
-linker has features that may be enabled by an additional section labeled
-<tt/FEATURES/.
-
-
-<sect2>The CONDES feature<p>
-
-<tt/CONDES/ is used to tell the linker to emit module constructor/destructor
-tables.
-
-<tscreen><verb>
-        FEATURES {
-            CONDES: segment = RODATA,
-                    type = constructor,
-                    label = __CONSTRUCTOR_TABLE__,
-                    count = __CONSTRUCTOR_COUNT__;
-        }
-</verb></tscreen>
-
-The <tt/CONDES/ feature has several attributes:
-
-<descrip>
-
-  <tag><tt>segment</tt></tag>
-
-  This attribute tells the linker into which segment the table should be
-  placed. If the segment does not exist, it is created.
-
-
-  <tag><tt>type</tt></tag>
-
-  Describes the type of the routines to place in the table. Type may be one of
-  the predefined types <tt/constructor/, <tt/destructor/, <tt/interruptor/, or
-  a numeric value between 0 and 6.
-
-
-  <tag><tt>label</tt></tag>
-
-  This specifies the label to use for the table. The label points to the start
-  of the table in memory and may be used from within user-written code.
-
-
-  <tag><tt>count</tt></tag>
-
-  This is an optional attribute. If specified, an additional symbol is defined
-  by the linker using the given name. The value of this symbol is the number
-  of entries (<em/not/ bytes) in the table. While this attribute is optional,
-  it is often useful to define it.
-
-
-  <tag><tt>order</tt></tag>
-
-  An optional attribute that takes one of the keywords <tt/increasing/ or
-  <tt/decreasing/ as an argument. Specifies the sorting order of the entries
-  within the table. The default is <tt/increasing/, which means that the
-  entries are sorted with increasing priority (the first entry has the lowest
-  priority). "Priority" is the priority specified when declaring a symbol as
-  <tt/.CONDES/ with the assembler, higher values mean higher priority. You may
-  change this behaviour by specifying <tt/decreasing/ as the argument, the
-  order of entries is reversed in this case.
-
-  Please note that the order of entries with equal priority is undefined.
-
-  <tag><tt>import</tt></tag>
-
-  This attribute defines a valid symbol name, that is added as an import
-  to the modules defining a constructor/destructor of the given type.
-  This can be used to force linkage of a module if this module exports the
-  requested symbol.
-
-</descrip>
-
-Without specifying the <tt/CONDES/ feature, the linker will not create any
-tables, even if there are <tt/condes/ entries in the object files.
-
-For more information see the <tt/.CONDES/ command in the <url
-url="ca65.html" name="ca65 manual">.
-
-
-<sect2>The STARTADDRESS feature<p>
-
-<tt/STARTADDRESS/ is used to set the default value for the start address,
-which can be referenced by the <tt/%S/ symbol. The builtin default for the
-linker is &dollar;200.
-
-<tscreen><verb>
-        FEATURES {
-            # Default start address is $1000
-            STARTADDRESS:       default = $1000;
-        }
-</verb></tscreen>
-
-Please note that order is important: The default start address must be defined
-<em/before/ the <tt/%S/ symbol is used in the config file. This does usually
-mean, that the <tt/FEATURES/ section has to go to the top of the config file.
-
-
-
-<sect1>The SYMBOLS section<label id="SYMBOLS"><p>
-
-The configuration file may also be used to define symbols used in the link
-stage or to force symbols imports. This is done in the SYMBOLS section. The
-symbol name is followed by a colon and symbol attributes.
-
-The following symbol attributes are supported:
-
-<descrip>
-
-  <tag><tt>addrsize</tt></tag>
-
-  The <tt/addrsize/ attribute specifies the address size of the symbol and
-  may be one of
-<itemize>
-    <item><tt/zp/, <tt/zeropage/ or <tt/direct/
-    <item><tt/abs/, <tt/absolute/ or <tt/near/
-    <item><tt/far/
-    <item><tt/long/ or <tt/dword/.
-</itemize>
-
-Without this attribute, the default address size is <tt/abs/.
-
-  <tag><tt>type</tt></tag>
-
-  This attribute is mandatory. Its value is one of <tt/export/, <tt/import/ or
-  <tt/weak/. <tt/export/ means that the symbol is defined and exported from
-  the linker config. <tt/import/ means that an import is generated for this
-  symbol, eventually forcing a module that exports this symbol to be included
-  in the output. <tt/weak/ is similar as <tt/export/. However, the symbol is
-  only defined if it is not defined elsewhere.
-
-  <tag><tt>value</tt></tag>
-
-  This must only be given for symbols of type <tt/export/ or <tt/weak/. It
-  defines the value of the symbol and may be an expression.
-
-</descrip>
-
-The following example defines the stack size for an application, but allows
-the programmer to override the value by specifying <tt/--define
-__STACKSIZE__=xxx/ on the command line.
-
-<tscreen><verb>
-        SYMBOLS {
-            # Define the stack size for the application
-            __STACKSIZE__:  type = weak, value = $800;
-        }
-</verb></tscreen>
-
-
-
-<sect>Special segments<p>
-
-The builtin config files do contain segments that have a special meaning for
-the compiler and the libraries that come with it. If you replace the builtin
-config files, you will need the following information.
-
-<sect1>INIT<p>
-
-The INIT segment is used for initialization code that may be reused once
-execution reaches main() - provided that the program runs in RAM. You
-may for example add the INIT segment to the heap in really memory
-constrained systems.
-
-<sect1>LOWCODE<p>
-
-For the LOWCODE segment, it is guaranteed that it won't be banked out, so it
-is reachable at any time by interrupt handlers or similar.
-
-<sect1>STARTUP<p>
-
-This segment contains the startup code which initializes the C software stack
-and the libraries. It is placed in its own segment because it needs to be
-loaded at the lowest possible program address on several platforms.
-
-<sect1>ZPSAVE<p>
-
-The ZPSAVE segment contains the original values of the zeropage locations used
-by the ZEROPAGE segment. It is placed in its own segment because it must not be
-initialized.
-
-
-
-<sect>Copyright<p>
-
-ld65 (and all cc65 binutils) are (C) Copyright 1998-2005 Ullrich von
-Bassewitz. For usage of the binaries and/or sources the following
-conditions do apply:
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item>         The origin of this software must not be misrepresented; you must not
-               claim that you wrote the original software. If you use this software
-               in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-
-
-</article>
diff --git a/doc/library.sgml b/doc/library.sgml
deleted file mode 100644 (file)
index 9b923c3..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>cc65 Library Overview
-<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
-<date>2014-04-12
-
-<abstract>
-An overview over the runtime and C libraries that come with the cc65 compiler,
-including a discussion of the differences to the ISO standard.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This file contains a short overview of the libraries available for the cc65 C
-compiler. Please have a look at the <url url="funcref.html" name="function
-reference"> for a list function by function. Since the function reference is
-not complete (I'm working on that) it may happen that you don't find a
-specific function. In this case, have a look into the header files. All
-functions, that are not defined by the ISO C standard have a short comment in
-the headers, explaining their use.
-
-
-
-<sect>ISO C compatible library<p>
-
-The C library contains a large subset of the ISO C library. Functions are
-usually missing in areas, where there is no support on typical 6502 systems.
-Wide character sets are an example for this.
-
-I will not go into detail about the ISO functions. If a function is not
-mentioned here explicitly, expect it to be available and to behave as defined
-in the C standard.
-
-Functions that are <em/not/ available:
-
-<itemize>
-  <item><tt>tmpfile/tmpnam</tt>
-  <p>
-  <item><tt>system</tt>
-  <p>
-  <item>All functions that handle floating point numbers in some manner.
-  <p>
-  <item>The <tt/ldiv/ function (cc65 is currently not able to return structs
-  with a size not equal to 1, 2 or 4 bytes by value).
-  <p>
-  <item>All functions handling wide character strings.
-  <p>
-  <item>Signals and all related functions (having <tt/SIGSEGV/ would be
-  cool:-)
-  <p>
-  <item><tt>setbuf/setvbuf</tt>
-</itemize>
-
-Functions not available on all supported systems:
-
-<itemize>
-  <item><tt>fopen/fread/fwrite/fclose/fputs/fgets/fscanf</tt>: The functions
-  are built on open/read/write/close. These latter functions are not available
-  on all systems.
-  <p>
-  <item><tt>ftell/fseek/fgetpos/fsetpos</tt>: Support depends on the
-  capabilities of the target machine.
-  <p>
-  <item><tt>rename/remove/rewind</tt>: Support depends on the capabilities of
-  the target machine.
-  <p>
-  <item><tt>time</tt>: Since many of the supported systems do not have a real
-  time clock, which means that the <tt/time/ function is not available. Please
-  note that the other functions from <tt/time.h/ <em/are/ available.
-</itemize>
-
-
-Functions that are limited in any way:
-
-<itemize>
-  <item><tt>strcspn/strpbrk/strspn</tt>: These functions have a length
-  limitation of 256 for the second string argument. Since this string gives a
-  character set, and there are only 256 distinct characters, this shouldn't be
-  a problem.
-  <p>
-  <item><tt>getenv</tt>: Since there is no such thing as an environment on all
-  supported systems, the <tt/getenv/ function will always return a <tt/NULL/
-  pointer.
-  <p>
-  <item><tt>locale</tt>: There is no other locale than the "C" locale. The
-  native locale is identical to the "C" locale.
-</itemize>
-
-
-In addition to these limitations, some more functions are limited if inlined
-versions are requested by using -Os:
-
-<itemize>
-  <item>The <tt/strlen/ function only works for strings with a maximum length
-  of 255 characters.
-  <p>
-  <item>The <tt/isxxx/ character classification functions from
-  <tt/&lt;ctype.h&gt;/ will give unpredictable results if the argument is not
-  in character range (0..255). This limitation may be removed by #undef'ing
-  the function name (when using <tt/-Os/, the functions are actually macros
-  that expand to inline assembler code, but the real functions are still
-  available if the macro definition is removed).
-</itemize>
-
-
-
-<sect>CPU specific stuff - 6502.h<p>
-
-The header file 6502.h contains some functions that make only sense with the
-6502 CPU. Examples are macros to insert more or less useful instructions into
-your C code, or a function to call arbitrary machine language subroutines,
-passing registers in and out.
-
-
-
-<sect>Target specific stuff<p>
-
-For each supported system there's a header file that contains calls or defines
-specific for this system. So, when programming for the C64, include c64.h, for
-the C128, include c128.h and so on. To make the task for the Commodore systems
-easier, there is also a header file named cbm.h that will define stuff common
-for all CBM systems, and include the header file for the specific target
-system.
-
-The header files contain
-
-<itemize>
-
-  <item>Defines for special keys (like function keys)
-
-  <item>Defines for special characters (like the graphics characters)
-
-  <item>Variables with a fixed address in memory that may be used to access
-  special hardware. For the C64 and C128 there is a variable struct named
-  <tt/SID/. Writing to the fields of this struct will write to the SID device
-  instead. Using these variables will make your program more readable and more
-  portable. Don't fear ineffective code when using these variables, the
-  compiler will translate reads and writes to these structs into direct memory
-  accesses.
-
-  <item>Other routines that make only sense for a specific system. One example
-  are routines to write memory locations in the system bank for the CBM PET-II
-  family.
-
-</itemize>
-
-
-<sect>Direct console I/O - <tt/conio.h/<p>
-
-The <tt/conio.h/ header file contains a large set of functions that do screen
-and keyboard I/O. The functions will write directly to the screen or poll the
-keyboard directly with no more help from the operating system than needed.
-This has some disadvantages, but on the other side it's fast and reasonably
-portable. conio implementations exist for the following targets:
-
-  <itemize>
-  <item>apple2
-  <item>apple2enh
-  <item>atari
-  <item>atarixl
-  <item>atmos
-  <item>c16 (works also for the c116 with up to 32K memory)
-  <item>c64
-  <item>c128
-  <item>plus4 (or expanded c16/c116)
-  <item>cbm510 (40 column video)
-  <item>cbm610 (all CBM series-II computers with 80 column video)
-  <item>geos-apple
-  <item>geos-cbm
-  <item>nes
-  <item>pet (all CBM PET systems except the 2001)
-  <item>vic20
-  </itemize>
-
-The conio.h header file does also include the system specific header files
-which define constants for special characters and keys.
-
-
-
-<sect>Using the joystick - <tt/joystick.h/<p>
-
-For systems that have a joystick, <tt/joystick.h/ will define a subroutine to
-read the current value, including constants to evaluate the result of this
-function.
-
-
-
-<sect>Using a mouse - <tt/mouse.h/<p>
-
-Some target machines support a mouse. Mouse support is currently available for
-the following targets:
-
-  <itemize>
-  <item>apple2
-  <item>apple2enh
-  <item>atari
-  <item>atarixl
-  <item>c64
-  <item>c128
-  </itemize>
-
-The available functions are declared in <tt/mouse.h/.
-
-
-<sect>Copyright<p>
-
-This C runtime library implementation for the cc65 compiler is (C)
-Copyright 1998-2002 Ullrich von Bassewitz. For usage of the binaries
-and/or sources the following conditions do apply:
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
-
-
-
diff --git a/doc/lynx.sgml b/doc/lynx.sgml
deleted file mode 100644 (file)
index 73763f1..0000000
+++ /dev/null
@@ -1,352 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>Atari Lynx specific information for cc65
-<author>
-<url url="mailto:karri@sipo.fi" name="Karri Kaksonen">,<newline>
-<url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
-<date>2014-04-12
-
-<abstract>
-An overview over the Atari Lynx runtime system as it is implemented for the
-cc65 C compiler.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This file contains an overview of the Atari Lynx runtime system as it comes
-with the cc65 C compiler. It describes the memory layout, Lynx specific header
-files, available drivers, and any pitfalls specific to that platform.
-
-Please note that Lynx specific functions are just mentioned here, they are
-described in detail in the separate <url url="funcref.html" name="function
-reference">. Even functions marked as "platform dependent" may be available on
-more than one platform. Please see the function reference for more
-information.
-
-
-<sect>Building your first Hello World application<p>
-
-Here is a small traditional Hello World program for the Atari Lynx.
-
-<tscreen><verb>
-#include <lynx.h>
-#include <tgi.h>
-#include <6502.h> 
-
-void main(void) {
-  tgi_install(tgi_static_stddrv);
-  tgi_init();
-  CLI();
-  while (tgi_busy())
-    ;
-  tgi_clear();
-  tgi_setcolor(COLOR_GREEN);
-  tgi_outtextxy(0, 0, "Hello World");
-  tgi_updatedisplay();
-  while (1)
-    ;
-}
-</verb></tscreen>
-
-The lynx.h contains all kind of system dependent things.
-
-The tgi.h contains the graphics driver functions.
-
-The 6502.h is needed for executing the CLI() command.
-
-As the Atari Lynx does not have ASCII characters available you need to use
-the Tiny Graphics Interface library for producing letters on the screen.
-
-The cc65 compiler suite has a graphics library called "Tiny Graphics
-Interface". This interface has some relocatable code. In order to use this
-in your own program you need to load it at run time.
-
-Unfortunately the Lynx does not have a disk drive from where to load it.
-Therefore you must already load it at compile time. The easiest way is to
-automatically link it in statically from the Lynx C library.
-
-<tscreen><verb>
-cl65 -t lynx -o game.lnx main.c
-</verb></tscreen>
-
-This will create a bootable cart image called game.lnx
-
-
-<sect>Binary format<p>
-
-The standard binary output format generated by the linker for the Lynx target
-is a cart image. By specifying the config file lynx-bll.cfg the linker will
-generate BLL download compatible binary files.
-
-It is of course possible to change this behaviour by using a modified startup
-file and linker config.
-
-The bootloader used in the cc65 lynx library uses a very minimal bootloader
-that does not check the cart or show a title screen.
-
-The advantage of this bootloader is that it allows creation of cart images to
-many common formats.
-
-Cart sizes
-<tscreen><verb>
-Block size Rom size Description
-512 bytes  128k     Standard old games like Warbirds
-1024 bytes 256k     Most common format for homebrew. Also newer games like Lemmings
-2048 bytes 512k     Largest games like EOTB
-</verb></tscreen>
-
-<sect>Memory layout<p>
-
-cc65 generated programs with the default setup run with the I/O area and the
-kernal enabled, which gives a usable memory range of &dollar;200 - &dollar;C037.
-
-Special locations:
-<tscreen><verb>
-  0000 - 00FF Zero page
-  0100 - 01FF Machine stack
-
-  A058 - C037 Collision buffer
-  C038 - E017 Screen buffer 1
-  E018 - FFF7 Screen buffer 0
-  FFF8 - FFFF Hardware vectors
-</verb></tscreen>
-
-<descrip>
-  <tag/Text screen/
-  No conio support is currently available for the Lynx.
-
-  <tag/Keyboard/
-  The Lynx "flabode" keys, Opt 1, Pause and Opt 2 are implemented using the
-  conio interface. The only characters the keyboard is able to produce are
-  'R' for Restart (Opt 1 + Pause), 'F' for flip (Opt 2 + Pause),
-  'P' for pause, '1' for Opt 1, '2' for Opt 2, '3' for Opt 1 + Opt 2 and
-  '?' for all keys down at the same time.
-
-  <tag/Stack/
-  The C runtime stack is located at &dollar;C037 (or &dollar;A057 if collision
-  detection is enabled) and growing downwards.
-
-  <tag/Heap/
-  The C heap is located at the end of the program and grows towards the C
-  runtime stack.
-
-  <tag/Screen/
-  The collision detection screen is at &dollar;A058 if it is enabled. The
-  double buffered screens are at &dollar;C038 and &dollar;E018.
-
-</descrip><p>
-
-
-
-<sect>Platform specific header files<p>
-
-Programs containing Lynx specific code may use the <tt/lynx.h/ header file.
-
-
-<sect1>Lynx specific functions<p>
-
-<itemize>
-<item>lynx_eeprom_erase
-<item>lynx_eeprom_read
-<item>lynx_eeprom_write
-<item>lynx_eeread
-<item>lynx_eewrite
-<item>lynx_exec
-<item>lynx_load
-</itemize>
-
-
-
-<sect1>Hardware access<p>
-
-The following pseudo variables declared in the <tt/lynx.h/ header file do
-allow access to hardware located in the address space. Some variables are
-structures, accessing the struct fields will access the chip registers.
-
-<descrip>
-
-  <tag><tt/MIKEY/</tag>
-  The <tt/MIKEY/ structure allows access to MIKEY chip. See the <tt/_mikey.h/
-  header file located in the include directory for the declaration of the
-  structure.
-
-  <tag><tt/SUZY/</tag>
-  The <tt/SUZY/ structure allows access to SUZY chip. See the <tt/_suzy.h/
-  header file located in the include directory for the declaration of the
-  structure.
-
-</descrip><p>
-
-
-
-<sect>Loadable drivers<p>
-
-The names in the parentheses denote the symbols to be used for static linking of the drivers.
-
-
-<sect1>Graphics drivers<p>
-
-<descrip>
-
-  <tag><tt/lynx-160-102-16.tgi (lynx_160_102_16_tgi)/</tag>
-  A TGI driver for the standard graphics mode (160&times;102 in 16 colors).
-
-  The TGI driver is implemented as an interrupt driven dual buffering device.
-  To use it as a single-buffer device set draw page and view page to the same
-  value 0 or 1;
-
-  The TGI driver has a few Lynx-specific extensions.
-
-  Calling tgi_sprite(spr) or tgi_ioctl(0, spr) will display a standard Lynx
-  sprite on screen.
-
-  Calling tgi_flip() or tgi_ioctl(1, 0) will do a flip screen.
-
-  Calling tgi_setbgcolor(bgcolor) or tgi_ioctl(2, bgindex) will set the text
-  background color to the index defined by bgindex. If bgindex is 0 then the
-  background color is transparent.
-
-  To set the framerate of the display hardware call tgi_setframerate(rate) or
-  tgi_ioctl(3, rate). The supported framerates are 50, 60 and 75 frames per
-  second. Actually there is no real reason to use anything else than 75 frames
-  per second.
-
-  To check if the drawing engine is busy with the previous swap you can
-  call tgi_busy or tgi_ioctl(4, 0). It returns 0 if idle and 1 if busy
-
-  To update displays you can call tgi_updatedisplay() or tgi_ioctl(4, 1) it
-  will wait for the next VBL interrupt and set the draw buffer to the
-  view buffer. The draw buffer is also changed to (drawbuffer xor 1).
-
-  You can also enable or disable collision detection by a call to
-  tgi_setcollisiondetection(active) or tgi_ioctl(5, active). The collision
-  result is located before the sprite structure by default in this driver.
-
-  In order to reserve memory for the collision detection buffer you need to
-  specify lynx-coll.cfg as the configuration file to the linker.
-
-</descrip><p>
-
-
-<sect1>Extended memory drivers<p>
-
-No extended memory drivers are currently available for the Lynx.
-
-
-<sect1>Joystick drivers<p>
-
-<descrip>
-
-  <tag><tt/lynx-stdjoy.joy (lynx_stdjoy_joy)/</tag>
-  A joystick driver for the standard buttons.
-
-</descrip><p>
-
-
-<sect1>Mouse drivers<p>
-
-No mouse drivers are currently available for the Lynx.
-
-
-<sect1>RS232 device drivers<p>
-
-<descrip>
-
-  <tag><tt/lynx-comlynx.ser (lynx_comlynx_ser)/</tag>
-  A serial driver for the ComLynx port.
-
-  The ComLynx port has Tx and Rx wired together. Every byte is sent
-  to all connected Lynxes. Only one Lynx can send at a time. There is no
-  protocol created for communication. You are on your own.
-
-  If the Lynx returns framing error then it is likely that another Lynx is
-  sending data at the same time.
-
-  The Lynx can also send a break and receive a break. The Lynx break is
-  recognized if the bit is down for 24 bit cycles or more.
-
-  To send a break you just set the break bit. The length of the break depends
-  on how long this bit is down.
-
-  The driver supports the baudrates:
-  <itemize>
-  <item>62500
-  <item>31250
-  <item>9600
-  <item>7200
-  <item>4800
-  <item>3600
-  <item>2400
-  <item>1800
-  <item>1200
-  <item>600
-  <item>300
-  <item>150
-  <item>134.5
-  <item>110
-  <item>75
-  </itemize>
-  The parity bit supports MARK and SPACE. It also supports EVEN and ODD parity
-  but the parity bit is included in the calculation. Most of us don't want it
-  this way. But there is nothing we can do about it.
-
-  The Lynx hardware will always check parity on incoming traffic. Currently
-  the driver cannot receive data from standard PC's due to this parity bug.
-  For working with Lynx to Lynx communication use EVEN parity.
-
-  To send data to standard PC's use MARK or SPACE as parity setting.
-
-  There is always only one stop bit. And the data length is always 8 bits.
-
-  We have no handshaking available. Even software handshake is impossible
-  as ComLynx has only one wire for the data.
-
-  Both transmit and receive are interrupt driven.
-
-</descrip><p>
-
-
-<sect>Limitations<p>
-
-
-
-<sect>Cart access<p>
-
-At this point in time there is no support for the cart filesystem yet. I have
-a <tt/lynx-cart-demo/ example project that uses an interrupt driven display,
-has support for the cart filesystem and an abcmusic sound module.
-
-At some point in time we may find a way to rewrite these to fit the way the
-cc65 drivers require. But for the time being you can create less portable
-applications using these Lynx specific modules in <tt/lynx-cart-demo/.
-
-
-<sect>License<p>
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
diff --git a/doc/nes.sgml b/doc/nes.sgml
deleted file mode 100644 (file)
index ca9ce72..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>Nintendo Entertainment System specific information for cc65
-<author>
-<url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">,<newline>
-<url url="mailto:polluks@sdf.lonestar.org" name="Stefan A. Haubenthal">
-<date>2014-04-12
-
-<abstract>
-An overview over the NES runtime system as it is implemented for the
-cc65 C compiler.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This file contains an overview of the NES runtime system as it comes
-with the cc65 C compiler. It describes the memory layout, NES specific header
-files, available drivers, and any pitfalls specific to that platform.
-
-Please note that NES specific functions are just mentioned here, they are
-described in detail in the separate <url url="funcref.html" name="function
-reference">. Even functions marked as "platform dependent" may be available on
-more than one platform. Please see the function reference for more
-information.
-
-
-<sect>Binary format<p>
-
-The standard binary output format generated by the linker for the NES target
-is a machine language program with an INES cartridge header. It is of course
-possible to change this behaviour by using a modified startup file and linker
-config.
-
-<sect>Memory layout<p>
-
-cc65 generated programs with the default setup run with the I/O area and a
-CHR bank enabled, which gives a usable memory range of &dollar;8000 - &dollar;FFF3.
-All boot ROM entry points may be called directly without additional code.
-
-Special locations:
-
-<descrip>
-  <tag/Text screen/
-  The text screen is located at VRAM &dollar;2000.
-
-  <tag/Stack/
-  The C runtime stack is located at &dollar;7FFF and growing downwards.
-
-  <tag/Heap/
-  The C heap is located at the end of the program and grows towards the C
-  runtime stack.
-
-</descrip><p>
-
-
-
-<sect>Platform specific header files<p>
-
-Programs containing NES specific code may use the <tt/nes.h/ header file.
-
-
-<sect1>NES specific functions<p>
-
-<itemize>
-<item>waitvblank
-<item>get_tv
-</itemize>
-
-
-
-<sect1>Hardware access<p>
-
-The following pseudo variables declared in the <tt/nes.inc/ include file do
-allow access to hardware located in the address space.
-
-<descrip>
-
-  <tag><tt/PPU/</tag>
-  The <tt/PPU/ defines allow access to the PPU chip.
-
-  <tag><tt/APU/</tag>
-  The <tt/APU/ defines allow access to the APU chip.
-
-</descrip><p>
-
-
-
-<sect>Loadable drivers<p>
-
-All drivers must be statically linked because no file I/O is available.
-The names in the parentheses denote the symbols to be used for static linking of the drivers.
-
-
-<sect1>Graphics drivers<p>
-
-<descrip>
-
-  <tag><tt/nes-64-56-2.tgi (nes_64_56_2)/</tag>
-  This driver features a resolution of 64&times;56 with 2 colors using the
-  CHR bank.
-
-</descrip><p>
-
-
-<sect1>Extended memory drivers<p>
-
-No extended memory drivers are currently available for the NES.
-
-
-<sect1>Joystick drivers<p>
-
-<descrip>
-
-  <tag><tt/nes-stdjoy.joy (nes_stdjoy)/</tag>
-  A joystick driver for the standard four buttons joypad is available.
-
-</descrip><p>
-
-
-<sect1>Mouse drivers<p>
-
-No mouse drivers are currently available for the NES.
-
-
-<sect1>RS232 device drivers<p>
-
-No serial drivers are currently available for the NES.
-
-
-
-<sect>Limitations<p>
-
-<sect1>Disk I/O<p>
-
-The existing library for the NES doesn't implement C file
-I/O. There are no hacks for the <tt/read()/ and <tt/write()/ routines.
-
-To be more concrete, this limitation means that you cannot use any of the
-following functions (and a few others):
-
-<itemize>
-<item>fclose
-<item>fopen
-<item>fread
-<item>fprintf
-<item>fputc
-<item>fscanf
-<item>fwrite
-<item>...
-</itemize>
-
-
-
-<sect>Other hints<p>
-
-
-
-<sect>License<p>
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
-
-
-
diff --git a/doc/od65.sgml b/doc/od65.sgml
deleted file mode 100644 (file)
index f5611a8..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-<title>od65 Users Guide
-<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
-<date>2014-04-14
-
-<abstract>
-od65 is the object file dump utility. It is able to output most parts of
-<htmlurl url="ca65.html" name="ca65-generated"> object files in readable form.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-
-<sect>Overview<p>
-
-od65 is an object file dump utility. It is able to output most parts of
-<htmlurl url="ca65.html" name="ca65-generated"> object files in readable form.
-Since the contents and format of the object files are not documented
-elsewhere and may change at any time, this tool is a portable way to look at
-the contents.
-
-Apart from curiosity, most people don't need to use this tool.
-
-
-
-<sect>Usage<p>
-
-The od65 utility dumps contents of one or more ca65 generated object file to
-standard output. It has no cross-version compatibility, so you have to use
-a version that matches the version of ca65 used to create the object files.
-
-
-<sect1>Command line option overview<p>
-
-The program may be called as follows:
-
-<tscreen><verb>
----------------------------------------------------------------------------
-Usage: od65 [options] file [options] [file]
-Short options:
-  -h                    Help (this text)
-  -H                    Dump the object file header
-  -S                    Dump segments sizes
-  -V                    Print the version number and exit
-
-Long options:
-  --dump-all            Dump all object file information
-  --dump-dbgsyms        Dump debug symbols
-  --dump-exports        Dump exported symbols
-  --dump-files          Dump the source files
-  --dump-header         Dump the object file header
-  --dump-imports        Dump imported symbols
-  --dump-lineinfo       Dump line information
-  --dump-options        Dump object file options
-  --dump-segments       Dump the segments in the file
-  --dump-segsize        Dump segments sizes
-  --help                Help (this text)
-  --version             Print the version number and exit
----------------------------------------------------------------------------
-</verb></tscreen>
-
-
-<sect1>Command line options in detail<label id="cmdline-opt-detail"><p>
-
-Here is a description of all the command line options:
-
-<descrip>
-
-  <tag><tt>--dump-all</tt></tag>
-
-  This will output all information, od65 is able to process. The option is a
-  shortcut for specifying all the other <tt/--dump/ options.
-
-
-  <tag><tt>--dump-dbgsyms</tt></tag>
-
-  Dump all debug symbols contained in the object file.
-
-
-  <tag><tt>--dump-exports</tt></tag>
-
-  Dump all exported symbols contained in the object file.
-
-
-  <tag><tt>--dump-files</tt></tag>
-
-  Dump the file table contained in the object file.
-
-
-  <tag><tt>-H, --dump-header</tt></tag>
-
-  Dump the object file header.
-
-
-  <tag><tt>--dump-imports</tt></tag>
-
-  Dump the list of imported symbols contained in the object file.
-
-
-  <tag><tt>--dump-lineinfo</tt></tag>
-
-  Dump the line info contained in the object file.
-
-
-  <tag><tt>--dump-segments</tt></tag>
-
-  Dump the list of segments contained in the object file.
-
-
-  <tag><tt>--dump-scopes</tt></tag>
-
-  Dump the scope (lexical level) information contained in the object file.
-
-
-  <tag><tt>-S, --dump-segsize</tt></tag>
-
-  Dump the sizes of all segments contained in the object file. This option is
-  quite useful to determine the effect of measures that increase or decrease
-  code size.
-
-
-  <tag><tt>-h, --help</tt></tag>
-
-  Print the short option summary shown above.
-
-
-  <tag><tt>-V, --version</tt></tag>
-
-  Print the version number of the compiler. When submitting a bug report,
-  please include the operating system you're using, and the compiler
-  version.
-</descrip>
-
-
-<sect>Input and output<p>
-
-The converter will read one or more object files per invocation and write the
-contents in readable format to standard output. Please note that you need to
-specify any of the <tt/--dump/ options listed <ref id="cmdline-opt-detail"
-name="above">, otherwise no useful output will be generated.
-
-Example output for the command
-<tscreen><verb>
-od65 --dump-header --dump-files t.o
-</verb></tscreen>
-<tscreen><verb>
-t.o:
-  Header:
-    Magic:                 0x616E7A55
-    Version:                       12
-    Flags:                     0x0001  (OBJ_FLAGS_DBGINFO)
-    Options:
-      Offset:                      88
-      Size:                         9
-    Files:
-      Offset:                      97
-      Size:                        10
-    Segments:
-      Offset:                     107
-      Size:                       101
-    Imports:
-      Offset:                     208
-      Size:                         1
-    Exports:
-      Offset:                     209
-      Size:                         1
-    Debug symbols:
-      Offset:                     210
-      Size:                        55
-    Line infos:
-      Offset:                     265
-      Size:                         1
-    String pool:
-      Offset:                     266
-      Size:                        80
-  Files:
-    Count:                          1
-    Index:                          0
-      Name:                     "t.s"
-      Size:                       402
-      Modification time:   1280498435  (Fri Jul 30 16:00:35 2010)
-</verb></tscreen>
-
-
-<sect>Copyright<p>
-
-od65 is (C) Copyright 2000-2009, Ullrich von Bassewitz. For usage of the
-binaries and/or sources the following conditions apply:
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item>         The origin of this software must not be misrepresented; you must not
-               claim that you wrote the original software. If you use this software
-               in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
-
diff --git a/doc/osi.sgml b/doc/osi.sgml
deleted file mode 100644 (file)
index ab1b4ce..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>Ohio Scientific-specific information for cc65
-<author>
-<url url="mailto:stephan.muehlstrasser@web.de" name="Stephan M&uuml;hlstrasser">,<newline>
-<url url="mailto:greg.king5@verizon.net" name="Greg King">
-<date>2015-03-17
-
-<abstract>
-An overview over the Ohio Scientific runtime system as it is implemented for the cc65 C
-compiler.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This file contains an overview of the Ohio Scientific runtime system as it comes with the
-cc65 C compiler. It describes the memory layout, Ohio Scientific-specific header files,
-and any pitfalls specific to that platform.
-
-Please note that Ohio Scientific-specific functions are just mentioned here, they are
-described in detail in the separate <url url="funcref.html" name="function
-reference">. Even functions marked as "platform dependent" may be available on
-more than one platform. Please see the function reference for more
-information.
-
-<sect>Targets<p>
-
-Currently the target "osic1p" is implemented. This works for the Ohio Scientific
-Challenger 1P machine and for the Briel Superboard /// replica.
-
-<sect>Program file formats<p>
-
-<descrip>
-  <tag/Binary, then text/
-  The standard binary output format generated by the linker for the osic1p
-  target is a pure machine language program.
-
-  For uploading into a real machine over its serial port or into an emulator,
-  that program must be converted into a text file that can be understood by
-  the 65V PROM monitor. For that purpose, the <bf/srec_cat/ program from <url
-  url="http://srecord.sourceforge.net/" name="the SRecord tool collection">
-  can be used.
-
-  Care must be taken that the <tt/-offset/ and <tt/-execution-start-address/
-  options for the <bf/srec_cat/ program correspond to the start address
-  of the executable.
-
-  Example for converting an executable "hello" file that was built for the
-  default start address &dollar;0200 to an uploadable file "hello.c1p":
-
-  <tscreen><verb>
-  srec_cat hello -bin -of 0x200 -o hello.c1p -os -esa=0x200
-  </verb></tscreen>
-
-  <tag/Hybrid/
-  The linker can create an alternate format that contains two parts:
-  <enum>
-    <item>A text header that is understood by the 65V PROM monitor.
-          It is a boot loader that reads the second part.
-    <item>The default binary code that is described above.
-  </enum>
-
-  You can make the alternate format by adding the option <tt/-u __BOOT__/ to
-  <tt/cl65/'s or <tt/ld65/'s command lines.
-
-  This format doesn't need to be converted. It is smaller than the text-only
-  format.  But, it cannot be loaded by <url
-  url="http://www.pcjs.org/docs/c1pjs/" name="C1Pjs">; you must use the
-  SRecord-produced text-only format with that emulator. (However, if you know
-  that you never will use C1Pjs, then you can edit the
-  <tt>cfg/osic1p*.cfg</tt> files; uncomment the lines that import <tt/__BOOT__/.
-  Then, you won't need to use <tt/-u __BOOT__/ on your command lines.)
-
-</descrip>
-
-<sect>Memory layout<p>
-
-By default programs compiled for the osic1p target are configured for 32 kB RAM.
-The RAM size can be configured via the symbol <tt/__HIMEM__/.
-
-Special locations:
-
-<descrip>
-  <tag/Program start address/
-  The default start address is &dollar;0200. The start address is configurable
-  via the linker option <tt/--start-addr/.
-
-  <tag/Stack/
-  The C runtime stack is located at the top of RAM and growing downwards.
-  The size is configurable via the symbol <tt/__STACKSIZE__/. The default
-  stack size is &dollar;0400.
-
-  <tag/Heap/
-  The C heap is located at the end of the program and grows towards the C
-  runtime stack.
-
-  <tag/Video RAM/
-  The 1 kB video RAM is located at &dollar;D000. On the monitor, only a subset
-  of the available video RAM is visible. The address of the upper left corner
-  of the visible area is &dollar;D085 and corresponds to conio cursor
-  position (0, 0).
-
-</descrip><p>
-
-Example for building a program with start address &dollar;0300, stack size
-&dollar;0200 and RAM size &dollar;2000:
-
-<tscreen><verb>
-cl65 --start-addr 0x300 -Wl -D,__HIMEM__=$2000,-D,__STACKSIZE__=$0200 -t osic1p hello.c
-</verb></tscreen>
-
-<sect>Linker configurations<p>
-
-The ld65 linker comes with a default config file "osic1p.cfg" for the Ohio Scientific
-Challenger 1P, which is implicitly used via <tt/-t osic1p/. The
-osic1p package comes with additional secondary linker config files, which are
-used via <tt/-t osic1p -C &lt;configfile&gt;/.
-
-<sect1>Default config file (<tt/osic1p.cfg/)<p>
-
-The default configuration is tailored to C programs.
-
-<sect1><tt/osic1p-asm.cfg/<p>
-
-This configuration is made for assembler programmers who don't need a special
-setup.
-
-To use this config file, assemble with <tt/-t osic1p/ and link with
-<tt/-C osic1p-asm.cfg/. The former will make sure that correct runtime library
-is used, while the latter supplies the actual config. When using <tt/cl65/,
-use both command line options.
-
-Sample command lines for <tt/cl65/:
-
-<tscreen><verb>
-cl65 -t osic1p -C osic1p-asm.cfg -o program source.s
-cl65 -t osic1p -C osic1p-asm.cfg -u __BOOT__ -o program.lod source.s
-</verb></tscreen>
-
-<sect>Platform-specific header files<p>
-
-Programs containing Ohio Scientific-specific code may use the <tt/osic1p.h/
-header file.
-
-<sect1>Ohio Scientific-specific functions<p>
-
-There are currently no special Ohio Scientific functions.
-
-<sect1>Hardware access<p>
-
-There is no specific support for direct hardware access.
-
-<sect>Loadable drivers<p>
-
-There are no loadable drivers available.
-
-<sect>Support for different screen layouts<p>
-
-By default the conio library uses a 24 columns by 24 lines screen layout
-for the Challenger 1P, like under BASIC. In addition to that there is support
-for other screen layouts with extra modules.
-
-There is a module <tt/screen-c1p-24x24.o/ in the OSI-specific
-cc65 runtime library that contains all conio functions that depend
-on the screen layout. No further configuration is needed for using the
-default screen layout of the Challenger 1P.
-
-For other screen layouts additional versions of the screen module are
-available. The linker finds these modules without further configuration
-if they are specified on the compiler or linker command line. The
-extra module then overrides the default module.
-
-Sample <tt/cl65/ command line to override the default screen
-module with the module <tt/osic1p-screen-s3-32x28.o/:
-
-<tscreen><verb>
-cl65 -o hello -t osic1p osic1p-screen-s3-32x28.o hello.c
-</verb></tscreen>
-
-Currently the following extra screen configuration modules are implemented:
-
-<itemize>
-<item><tt>osic1p-screen-s3-32x28.o</tt>: 32 columns by 28 lines mode
-for Briel Superboard ///</item>
-</itemize>
-
-<sect>Limitations<p>
-
-<sect1>stdio implementation<p>
-
-There is no support for stdio at the moment.
-
-<sect>Other hints<p>
-
-<sect1>Passing arguments to the program<p>
-
-There is currently no support for passing arguments to a program.
-
-<sect1>Program return code<p>
-
-The program return code currently has no effect. When the main() function
-finishes, the boot prompt is shown again.
-
-<sect>License<p>
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
-
diff --git a/doc/pce.sgml b/doc/pce.sgml
deleted file mode 100644 (file)
index ba59c31..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>PC-Engine (TurboGrafx) System specific information for cc65
-<author>
-<url url="mailto:groepaz@gmx.net" name="Groepaz/Hitmen">
-<date>2015-07-14
-
-<abstract>
-An overview over the PCE runtime system as it is implemented for the
-cc65 C compiler.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This file contains an overview of the PCE runtime system as it comes
-with the cc65 C compiler. It describes the memory layout, PCE specific header
-files, available drivers, and any pitfalls specific to that platform.
-
-Please note that PCE specific functions are just mentioned here, they are
-described in detail in the separate <url url="funcref.html" name="function
-reference">. Even functions marked as "platform dependent" may be available on
-more than one platform. Please see the function reference for more
-information.
-
-
-<sect>Binary format<p>
-
-The standard binary output format generated by the linker for the PCE target
-is a cartridge image with no header. It is of course possible to change this
-behaviour by using a modified startup file and linker config.
-
-<sect>Memory layout<p>
-
-cc65 generated programs with the default setup run with the I/O area and a
-CHR bank enabled, which gives a usable memory range of &dollar;8000 - &dollar;FFF3.
-All boot ROM entry points may be called directly without additional code.
-
-Special locations:
-
-<descrip>
-  <tag/Text screen and Font/
-  The text screen is located at VRAM &dollar;0000,
-  the Font is located at VRAM &dollar;2000.
-
-  <tag/Stack/
-  The C runtime stack is located in system RAM at &dollar;3FFF and growing downwards.
-
-  <tag/BSS and Data/
-
-  The BSS (uninitialized variables) and Data (initialized variables) sections are
-  placed one after the other into system RAM at &dollar;2000.
-
-  <tag/Heap/
-  The C heap is located after the end of the Data section and grows towards the C
-  runtime stack.
-
-  <tag/Code/
-  The startup code is located at &dollar;E000 in the System/Hardware bank. Further
-  code can be placed in other ROM banks, this must be done manually however.
-
-</descrip><p>
-
-
-
-<sect>Platform specific header files<p>
-
-Programs containing PCE specific code may use the <tt/pce.h/ header file.
-
-
-<sect1>PCE specific functions<p>
-
-<itemize>
-<item>waitvblank</item>
-<item>get_tv (since all PCE systems are NTSC, this always returns TV_NTSC)</item>
-</itemize>
-
-
-
-<sect1>Hardware access<p>
-
-The following pseudo variables declared in the <tt/pce.inc/ include file do
-allow access to hardware located in the address space.
-
-<descrip>
-
-  <tag><tt/PSG/</tag>
-  The <tt/PSG/ defines allow access to the PSG chip (Programmable Sound Generator).
-
-  <tag><tt/VCE/</tag>
-  The <tt/VCE/ defines allow access to the VCE chip (Video Color Encoder).
-
-  <tag><tt/VDC/</tag>
-  The <tt/VDC/ defines allow access to the VDC chip (Video Display Controller).
-
-</descrip><p>
-
-
-
-<sect>Loadable drivers<p>
-
-All drivers must be statically linked because no file I/O is available.
-The names in the parentheses denote the symbols to be used for static linking of the drivers.
-
-
-<sect1>Graphics drivers<p>
-
-No TGI graphics drivers are currently available for the PCE.
-
-
-<sect1>Extended memory drivers<p>
-
-No extended memory drivers are currently available for the PCE.
-
-
-<sect1>Joystick drivers<p>
-
-<descrip>
-
-  <tag><tt/pce-stdjoy.joy (pce_stdjoy)/</tag>
-  A joystick driver for the standard two buttons joypad is available.
-
-  Note that the japanese 6-button pad is currently not supported.
-
-</descrip><p>
-
-
-<sect1>Mouse drivers<p>
-
-No mouse drivers are currently available for the PCE.
-
-
-<sect1>RS232 device drivers<p>
-
-No serial drivers are currently available for the PCE.
-
-
-
-<sect>Limitations<p>
-
-<itemize>
-<item>interruptor support in crt0 (and cfg) is missing
-</itemize>
-
-<sect1>Disk I/O<p>
-
-The existing library for the PCE doesn't implement C file
-I/O. There are no hacks for the <tt/read()/ and <tt/write()/ routines.
-
-To be more concrete, this limitation means that you cannot use any of the
-following functions (and a few others):
-
-<itemize>
-<item>printf
-<item>fclose
-<item>fopen
-<item>fread
-<item>fprintf
-<item>fputc
-<item>fscanf
-<item>fwrite
-<item>...
-</itemize>
-
-<sect>Other hints<p>
-
-<itemize>
-<item>a good emulator to use for PC-Engine is "mednafen" (<url url="http://mednafen.fobby.net/">)
-</itemize>
-
-some useful resources on PCE coding:
-
-<itemize>
-<item><url url="http://blog.blockos.org/?tag=pc-engine">
-<item><url url="http://pcedev.blockos.org/viewforum.php?f=5">
-<item><url url="http://www.romhacking.net/?page=documents&amp;category=&amp;platform=4&amp:game=&amp;author=&amp;perpage=20&amp;level=&amp;title=&amp;desc=&amp;docsearch=Go">
-<item><url url="http://archaicpixels.com/Main_Page">
-
-<item><url url="http://www.magicengine.com/mkit/doc.html">
-
-<item><url url="https://github.com/uli/huc">
-<item><url url="http://www.zeograd.com/parse.php?src=hucf">
-</itemize>
-
-<sect>License<p>
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
-
-
-
diff --git a/doc/pet.sgml b/doc/pet.sgml
deleted file mode 100644 (file)
index 7c5bd71..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>Commodore PET-specific information for cc65
-<author>
-<url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">,<newline>
-<url url="mailto:polluks@sdf.lonestar.org" name="Stefan A. Haubenthal">
-<date>2014-04-12
-
-<abstract>
-An overview over the PET runtime system as it is implemented for the cc65 C
-compiler.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This file contains an overview of the PET runtime system as it comes with the
-cc65 C compiler. It describes the memory layout, PET-specific header files,
-available drivers, and any pitfalls specific to that platform.
-
-Please note that PET-specific functions are just mentioned here, they are
-described in detail in the separate <url url="funcref.html" name="function
-reference">. Even functions marked as "platform dependent" may be available on
-more than one platform. Please see the function reference for more
-information.
-
-
-<sect>Binary format<p>
-
-The standard binary output format generated by the linker for the PET target
-is a machine language program with a one line BASIC stub, which calls the
-machine language part via SYS. This means that a program can be loaded as
-BASIC program and started with RUN. It is of course possible to change this
-behaviour by using a modified startup file and linker config.
-
-
-<sect>Memory layout<p>
-
-cc65 generated programs with the default setup run with the I/O area and the
-kernal and BASIC ROM enabled, which gives a usable memory range of
-&dollar;0400 - &dollar;7FFF (32KB machine).
-All ROM entry points may be called directly without additional code.
-
-Special locations:
-
-<descrip>
-  <tag/Text screen/
-  The text screen is located at &dollar;8000.
-
-  <tag/Stack/
-  The C runtime stack is located at &dollar;7FFF and growing downwards.
-
-  <tag/Heap/
-  The C heap is located at the end of the program and grows towards the C
-  runtime stack.
-
-</descrip><p>
-
-
-
-<sect>Platform-specific header files<p>
-
-Programs containing PET-specific code may use the <tt/pet.h/ or <tt/cbm.h/
-header files. Using the later may be an option when writing code for more than
-one CBM platform, since it includes <tt/pet.h/ and declares several functions
-common to all CBM platforms.
-
-
-<sect1>PET-specific functions<p>
-
-There are currently no special PET functions.
-
-
-
-<sect1>CBM-specific functions<p>
-
-Some functions are available for all (or at least most) of the Commodore
-machines. See the <url url="funcref.html" name="function reference"> for
-declaration and usage.
-
-<itemize>
-<item>cbm_close
-<item>cbm_closedir
-<item>cbm_k_setlfs
-<item>cbm_k_setnam
-<item>cbm_k_load
-<item>cbm_k_save
-<item>cbm_k_open
-<item>cbm_k_close
-<item>cbm_k_readst
-<item>cbm_k_chkin
-<item>cbm_k_ckout
-<item>cbm_k_basin
-<item>cbm_k_bsout
-<item>cbm_k_clrch
-<item>cbm_load
-<item>cbm_open
-<item>cbm_opendir
-<item>cbm_read
-<item>cbm_readdir
-<item>cbm_save
-<item>cbm_write
-<item>get_tv
-</itemize>
-
-
-<sect1>Hardware access<p>
-
-The following pseudo variables declared in the <tt/pet.h/ header file do allow
-access to hardware located in the address space. Some variables are
-structures, accessing the struct fields will access the chip registers.
-
-<descrip>
-
-  <tag><tt/PIA1, PIA2/</tag>
-  Access to the two PIA (peripheral interface adapter) chips is available via
-  the <tt/PIA1/ and <tt/PIA2/ variables. The structure behind these variables
-  is explained in <tt/_pia.h/.
-
-  <tag><tt/VIA/</tag>
-  The <tt/VIA/ structure allows access to the VIA (versatile interface
-  adapter). See the <tt/_6522.h/ header file located in the include
-  directory for the declaration of the structure.
-
-</descrip><p>
-
-
-
-<sect>Loadable drivers<p>
-
-The names in the parentheses denote the symbols to be used for static linking of the drivers.
-
-
-<sect1>Graphics drivers<p>
-
-No graphics drivers are currently available for the PET.
-
-
-<sect1>Extended memory drivers<p>
-
-No extended memory drivers are currently available for the PET.
-
-
-<sect1>Joystick drivers<p>
-
-The default drivers, <tt/joy_stddrv (joy_static_stddrv)/, point to <tt/pet-stdjoy.joy (pet_stdjoy_joy)/.
-
-<descrip>
-
-  <tag><tt/pet-ptvjoy.joy (pet_ptvjoy_joy)/</tag>
-  Driver for the Protovision 4-player adapter contributed by Groepaz. See
-  <url url="http://www.protovision-online.de/hardw/hardwstart.htm"> for prices and
-  building instructions. Up to two joysticks are supported.
-
-  <tag><tt/pet-stdjoy.joy (pet_stdjoy_joy)/</tag>
-  Driver for the standard PET userport joystick.
-
-</descrip><p>
-
-
-<sect1>Mouse drivers<p>
-
-No mouse drivers are currently available for the PET.
-
-
-<sect1>RS232 device drivers<p>
-
-No serial drivers are currently available for the PET.
-
-
-
-<sect>Limitations<p>
-
-
-
-<sect>Other hints<p>
-
-
-<sect1>Passing arguments to the program<p>
-
-Command-line arguments can be passed to <tt/main()/. Since that is not
-supported directly by BASIC, the following syntax was chosen:
-
-<tscreen><verb>
-    RUN:REM ARG1 " ARG2 IS QUOTED" ARG3 "" ARG5
-</verb></tscreen>
-
-<enum>
-<item>Arguments are separated by spaces.
-<item>Arguments may be quoted.
-<item>Leading and trailing spaces around an argument are ignored. Spaces within
-      a quoted argument are allowed.
-<item>The first argument passed to <tt/main()/ is the program name.
-<item>A maximum number of 10 arguments (including the program name) are
-      supported.
-</enum>
-
-
-<sect1>Program return code<p>
-
-The program return code (low byte) is passed back to BASIC by use of the
-<tt/ST/ variable.
-
-
-<sect1>Interrupts<p>
-
-The runtime for the PET uses routines marked as <tt/.INTERRUPTOR/ for
-interrupt handlers. Such routines must be written as simple machine language
-subroutines and will be called automatically by the interrupt handler code
-when they are linked into a program. See the discussion of the <tt/.CONDES/
-feature in the <url url="ca65.html" name="assembler manual">.
-
-
-<sect1>Using extended memory<p>
-
-The extended memory at $9000 of the CBM 8x96 may be added to the heap by using
-the following code:
-
-<tscreen><verb>
-    /* Check for the existence of RAM */
-    if (PEEK(0x9000) == POKE(0x9000, PEEK(0x9000)+1)) {
-        /* Add it to the heap */
-        _heapadd ((void *) 0x9000, 0x2000);
-    }
-</verb></tscreen>
-
-
-
-<sect>License<p>
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
diff --git a/doc/plus4.sgml b/doc/plus4.sgml
deleted file mode 100644 (file)
index 36d53e7..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>Commodore Plus/4 specific information for cc65
-<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
-<date>2014-04-12
-
-<abstract>
-An overview over the Plus/4 runtime system as it is implemented for the cc65 C
-compiler.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This file contains an overview of the Plus/4 runtime system as it comes with the
-cc65 C compiler. It describes the memory layout, Plus/4 specific header files,
-available drivers, and any pitfalls specific to that platform.
-
-Please note that Plus/4 specific functions are just mentioned here, they are
-described in detail in the separate <url url="funcref.html" name="function
-reference">. Even functions marked as "platform dependent" may be available on
-more than one platform. Please see the function reference for more
-information.
-
-Since the Plus/4 and the Commodore 16/116 are almost identical (the latter are
-missing the 6551 ACIA and do only have 16KB of memory), the <url
-url="c16.html" name="C16 documentation"> is also worth a look. The difference
-between both cc65 targets is that the Plus/4 runtime uses banking to support
-full 64K RAM, while the C16 does not use banking and supports up to 32K RAM.
-Because banking is not needed, most C16 programs will be somewhat smaller than
-the same program compiled for the Plus/4. However, programs compiled for the
-C16 will always run on the Plus/4, while the reverse is not necessarily true.
-
-
-<sect>Binary format<p>
-
-The standard binary output format generated by the linker for the Plus/4
-target is a machine language program with a one line BASIC stub, which calls
-the machine language part via SYS. This means that a program can be loaded as
-BASIC program and started with RUN. It is of course possible to change this
-behaviour by using a modified startup file and linker config.
-
-
-<sect>Memory layout<p>
-
-cc65 generated programs with the default setup run with the kernal and basic
-banked out. This gives a usable memory range of &dollar;1000 - &dollar;FD00.
-Having the kernal and basic ROMs banked out means, that no ROM entry points
-may be called directly from user code.
-
-Special locations:
-
-<descrip>
-  <tag/Text screen/
-  The text screen is located at &dollar;C00 (as in the standard setup).
-
-  <tag/Color RAM/
-  The color RAM is located at &dollar;800 (standard location).
-
-  <tag/Stack/
-  The C runtime stack is located at &dollar;FCFF and growing downwards.
-
-  <tag/Heap/
-  The C heap is located at the end of the program and grows towards the C
-  runtime stack.
-
-</descrip><p>
-
-
-
-<sect>Platform specific header files<p>
-
-Programs containing Plus/4 specific code may use the <tt/plus4.h/ or <tt/cbm.h/
-header files. Using the later may be an option when writing code for more than
-one CBM platform, since it includes <tt/plus4.h/ and declares several functions
-common to all CBM platforms.
-
-Please note that most of the header file declarations from the <tt/plus4.h/
-header file are shared between the C16 and Plus/4 configurations. For this
-reason, most of it is located in a common header file named <tt/cbm264.h/.
-
-
-
-<sect1>Plus/4 specific functions<p>
-
-There are currently no special Plus/4 functions.
-
-
-<sect1>CBM specific functions<p>
-
-Some functions are available for all (or at least most) of the Commodore
-machines. See the <url url="funcref.html" name="function reference"> for
-declaration and usage.
-
-<itemize>
-<item>cbm_close
-<item>cbm_closedir
-<item>cbm_k_setlfs
-<item>cbm_k_setnam
-<item>cbm_k_load
-<item>cbm_k_save
-<item>cbm_k_open
-<item>cbm_k_close
-<item>cbm_k_readst
-<item>cbm_k_chkin
-<item>cbm_k_ckout
-<item>cbm_k_basin
-<item>cbm_k_bsout
-<item>cbm_k_clrch
-<item>cbm_load
-<item>cbm_open
-<item>cbm_opendir
-<item>cbm_read
-<item>cbm_readdir
-<item>cbm_save
-<item>cbm_write
-<item>get_tv
-</itemize>
-
-
-<sect1>Hardware access<p>
-
-The following pseudo variables declared in the <tt/plus4.h/ header file do
-allow access to hardware located in the address space. Some variables are
-structures, accessing the struct fields will access the chip registers.
-
-<descrip>
-
-  <tag><tt/TED/</tag>
-  The <tt/TED/ structure allows access to the TED chip. See the
-  <tt/_ted.h/ header file located in the include directory for the
-  declaration of the structure.
-
-  <tag><tt/COLOR_RAM/</tag>
-  A character array that mirrors the color RAM of the Plus/4 at &dollar;0800.
-
-</descrip><p>
-
-
-
-<sect>Loadable drivers<p>
-
-The names in the parentheses denote the symbols to be used for static linking of the drivers.
-
-
-<sect1>Graphics drivers<p>
-
-No graphics drivers are currently available for the Plus/4.
-
-
-<sect1>Extended memory drivers<p>
-
-No extended memory drivers are currently available for the Plus/4.
-
-
-<sect1>Joystick drivers<p>
-
-<descrip>
-
-  <tag><tt/plus4-stdjoy.joy (plus4_stdjoy_joy)/</tag>
-  Supports up to two joysticks connected to the standard joysticks port of
-  the Plus/4.
-
-</descrip><p>
-
-
-<sect1>Mouse drivers<p>
-
-No mouse drivers are currently available for the Plus/4.
-
-
-<sect1>RS232 device drivers<p>
-
-<descrip>
-
-  <tag><tt/plus4-stdser.ser (plus4_stdser_ser)/</tag>
-  Driver for the 6551 ACIA chip built into the Plus/4. Supports up to 19200
-  baud, hardware flow control (RTS/CTS) and interrupt driven receives. Note
-  that because of the peculiarities of the 6551 chip transmits are not
-  interrupt driven, and the transceiver blocks if the receiver asserts flow
-  control because of a full buffer.
-
-  You need an adapter to use the builtin port, since the output levels
-  available at the user port don't follow the RS232 standard.
-
-</descrip><p>
-
-
-
-<sect>Limitations<p>
-
-
-
-<sect>Other hints<p>
-
-<sect1>Passing arguments to the program<p>
-
-Command line arguments can be passed to <tt/main()/. Since this is not
-supported by BASIC, the following syntax was chosen:
-
-<tscreen><verb>
-    RUN:REM ARG1 " ARG2 IS QUOTED" ARG3 "" ARG5
-</verb></tscreen>
-
-<enum>
-<item>Arguments are separated by spaces.
-<item>Arguments may be quoted.
-<item>Leading and trailing spaces around an argument are ignored. Spaces within
-      a quoted argument are allowed.
-<item>The first argument passed to <tt/main/ is the program name.
-<item>A maximum number of 10 arguments (including the program name) are
-      supported.
-</enum>
-
-
-
-<sect1>Program return code<p>
-
-The program return code (low byte) is passed back to BASIC by use of the
-<tt/ST/ variable.
-
-
-<sect1>Interrupts<p>
-
-The runtime for the Plus/4 uses routines marked as <tt/.INTERRUPTOR/ for
-interrupt handlers. Such routines must be written as simple machine language
-subroutines and will be called automatically by the interrupt handler code
-when they are linked into a program. See the discussion of the <tt/.CONDES/
-feature in the <url url="ca65.html" name="assembler manual">.
-
-
-
-<sect>License<p>
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
diff --git a/doc/smc.sgml b/doc/smc.sgml
deleted file mode 100644 (file)
index 240c78e..0000000
+++ /dev/null
@@ -1,593 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-<title>ca65 Macros for Self Modifying Code
-<author>Christian Kr&uuml;ger
-<date>2014-04-24
-
-<abstract>
-The 'smc.inc' macro package for ca65 eases the use, increases the safeness and
-self-explanation of 'self-modifying-code' (SMC).
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-When reading assembler sources, self modifying code is often hard to identify
-and applying it needs a lot of discipline.
-
-Since the cacheless 6502 is a thankful target of such kind of code, the macro
-package will not only reduce this complexness, but also document the use. The
-resulting source is more self-explanatory and so easier to maintain.
-
-While for general purposes SMC is not a desired form for implementations, it
-can be quite useful for a small range of scenarios. Normally SMC will be
-introduced when optimizing code in respect to:
-
-<itemize>
-<item>speed and/or
-<item>size.
-</itemize>
-
-Please mind that SMC can only be applied for code in RAM, which means that a
-general purpose library with SMC excludes ROM targets!
-
-The ca65 SMC macro package consists of two files:
-
-<itemize>
-<item><tt>smc.inc</tt>
-<item><tt>opcodes.inc</tt>
-</itemize>
-
-The latter is only needed if you also plan to modify opcodes and not only data
-within your code.
-
-<sect>Usage<p>
-The use of the macros is quite simple:
-
-Original:
-
-<tscreen><verb>
-    PHA
-    JSR SUBROUTINE
-    PLA
-</verb></tscreen>
-
-By applying SMC, the speed will now be increased by once cycle:
-
-SMC:
-
-<tscreen><verb>
-    SMC_StoreValue RestoreAccu
-    JSR SUBROUTINE
-SMC RestoreAccu, { LDA #SMC_Value }
-</verb></tscreen>
-
-The first line stores the value of the accu into the '<tt>RestoreAccu</tt>'
-labeled SMC target.
-
-Please note:
-<enum>
-<item>  for all SMC store or transfer operations, a second argument can be
-        given. This determines the register for the operation:
-        '<tt>SMC_StoreValue Label, y</tt>' will store the value of the
-        Y-register.
-
-        If the second argument is missing, the accu will be used automatically.
-
-<item>  The label targets a 'special SMC namespace'. It fits only to
-        destinations which are introduced with the macro '<tt>SMC</tt>'. A
-        normal label '<tt>RestoreAccu</tt>' wouldn't match and could even
-        coexist (even if you should abstain from doing so).
-
-<item>  The macro '<tt>SMC_StoreValue</tt>' takes care, that the store
-        operation will occur on the value-position of a SMC-instruction. As
-        you will see, other macros influence other instruction part positions.
-        There is no consistency check, if the targeted SMC instruction acually
-        contains a value. Storing a 'value' on an immplied SMC instruction
-        would corrupt the following memory cell!
-</enum>
-
-The second line needs no further explanation, this is just a placeholder for
-some code in the example.
-
-The third line is the code line which is about to be modified. It has to start
-with the '<tt>SMC</tt>' macro and must be labeled, so that the modification
-can be designated. Then the unmodified code is given in curly braces.
-
-Please note the usage of the value placeholder 'SMC_Value'. Using such a
-placeholder has two advantages:
-
-<enum>
-<item> The code is better documented. It is clearly visible that the given
-       value is about to be changed.
-<item> When examining an (initial) disassembly (e.g. in a debugger), these
-       placegolders can be better identified: They are fixed and, you may
-       notice that below, quite eye catching defined.
-</enum>
-
-<sect1>Argument placeholders<p>
-
-There are four kinds of placeholders:
-
-<descrip>
-
-  <label id="Address placeholder">
-  <tag><tt>SMC_AbsAdr</tt></tag>
-
-  Used to indicate an address. The value is '<tt>$FADE</tt>'.
-
-  Example: <tt>STA SMC_AbsAdr</tt>
-
-
-  <label id="Zero-Page-Address placeholder">
-  <tag><tt>SMC_ZpAdr</tt></tag>
-
-  Used to indicate a zero-page-address. The value is '<tt>$00</tt>'.
-
-  Example: <tt>LDA SMC_ZpAdr</tt>
-
-
-  <label id="Opcode placeholder">
-  <tag><tt>SMC_Opcode</tt></tag>
-
-  Used to indicate an instruction. The value is '<tt>NOP</tt>'.
-
-  Example: <tt>SMC_Opcode</tt>
-
-
-  <label id="Immediate value placeholder">
-  <tag><tt>SMC_Value</tt></tag>
-
-  Used to indicate a value. The value is '<tt>$42</tt>'.
-
-  Example: <tt>LDX #SMC_Value</tt>
-</descrip>
-
-Attention: Often code is modified after the initial use - where using the
-placeholders does not makes sense. Please mind also, that in very variable
-expressions (e.g. opcode and argument is about to be changed), placeholders
-can lead to unidentifyable code for a debugger/disassembler:
-
-<tt>SMC Example, { SMC_Opcode SMC_AbsAdr } </tt>
-
-Since the opcode is '<tt/NOP/', the value '<tt/$DE/' from '<tt/$FADE/' will
-interpreted as opcode in a disassembler too. This breaks the correct
-disassembly, because '<tt/$DE/' is interpreted as '<tt/DEC abx/'. Establishing
-a valid placeholder instruction may be better:
-
-<tt>SMC Example, { sta SMC_AbsAdr }     ; Note: Opcode will be modified too!</tt>
-
-<sect1>Accessing opcodes<p>
-
-Some macros are designed to access the instruction of a code line. To increase
-readability, please use the opcodes as defined in the '<tt>opcodes.inc</tt>'
-file.
-
-<descrip>
-
-  <label id="Transfer opcode">
-  <tag><tt>SMC_TransferOpcode label, opcode (, register)</tt></tag>
-  Loads and store an opcode to given SMC instruction.
-
-  Example:
-
-<tscreen><verb>
-SMC SumRegister, { LDA #10 }
-    JSR OUTPUT
-    SMC_TransferOpcode SumRegister, OPC_ADC_imm, x
-</verb></tscreen>
-
-The macro above will load the opcode '<tt>ADC #</tt>' into the x - register
-and stores it at the place of the '<tt>LDA #</tt>'.
-
- <label id="Load opcode">
-  <tag><tt>SMC_LoadOpcode label (, register)</tt></tag>
-  Loads the opcode of a SMC line to the given register.
-
-  Example:
-<tscreen><verb>
-SMC ShiftOrNothing, { LSL }
-    SMC_LoadOpcode ShiftOrNothing, y
-    CPY #OPC_NOP
-    BEQ Exit
-</verb></tscreen>
-
- <label id="Store opcode">
-  <tag><tt>SMC_StoreOpcode label (, register)</tt></tag>
-  Stores the value of the given register at the opcode place of a SMC line.
-
-  Example:
-<tscreen><verb>
-SetBoldMode:
-    LDA #OPC_INX
-    SMC_StoreOpcode AdaptCharWidth
-    SMC_StoreOpcode AdaptUnderlineWidth
-    RTS
-    ...
-SMC AdaptCharWidth, { NOP }
-    ...
-SMC AdaptUnderlineWidth, { NOP }
-</verb></tscreen>
-
-</descrip>
-
-<sect1>Accessing arguments<p>
-
-These marcos are determined to get, set and change arguments of instructions:
-
-<descrip>
-
-  <label id="Change branch">
-  <tag><tt>SMC_ChangeBranch label, destination (, register)</tt></tag>
-
-  Used to modify the destination of a branch instruction. If the adress offset
-  exceeds the supported range of 8-bit of the 6502, a error will be thrown.
-
-  Example:
-<tscreen><verb>
-Disable Handler:
-    SMC_ChangeBranch BranchToHandler, Exit
-    RTS
-    ...
-    LDA warning
-SMC BranchToHandler, { BNE Handler }
-Exit:
-    RTS
-</verb></tscreen>
-
-
-  <label id="Transfer value">
-  <tag><tt>SMC_TransferValue label, value (, register)</tt></tag>
-
-  Changes the value of a SMC line.
-
-  Example:
-<tscreen><verb>
-ClearDefault:
-    SMC_TransferValue LoadDefault, 0
-    RTS
-    ...
-SMC LoadDefault, { LDX #25 }
-</verb></tscreen>
-
-
-  <label id="Load value">
-  <tag><tt>SMC_LoadValue label (, register)</tt></tag>
-
-  Retreives the value of a SMC line.
-
-  Example:
-<tscreen><verb>
-ShowDefault:
-    SMC_LoadValue LoadDefault
-    JSR PrintValue
-    RTS
-    ...
-SMC LoadDefault, { LDX #25 }
-</verb></tscreen>
-
-
-  <label id="Store value">
-  <tag><tt>SMC_StoreValue label (, register)</tt></tag>
-
-  Stores the value in the register to given SMC line.
-
-  Example:
-<tscreen><verb>
-InitCounters:
-    LDY #0
-    SMC_StoreValue GetI, y
-    SMC_StoreValue GetJ, y
-    SMC_StoreValue GetK, y
-    ...
-SMC GetI, { LDX #SMC_Value      }
-    ...
-SMC GetJ, { LDX #SMC_Value      }
-    ...
-SMC GetK, { LDX #SMC_Value      }
-</verb></tscreen>
-
-
-  <label id="Transfer low-byte">
-  <tag><tt>SMC_TransferLowByte label, value (, register)</tt></tag>
-
-  Does the same as '<tt>SMC_TransferValue</tt>' but should be used for
-  low-bytes of adresses for better readability.
-
-  Example:
-<tscreen><verb>
-ActivateSecondDataSet:
-    SMC_TransferLowByte LoadData, $40
-        RTS
-    ...
-SMC LoadData, { LDA $2000 }
-</verb></tscreen>
-
-
-  <label id="Load low-byte">
-  <tag><tt>SMC_LoadLowByte label (, register)</tt></tag>
-
-  Does the same as '<tt>SMC_LoadValue</tt>' but should be used for low-bytes
-  of adresses for better readability.
-
-  Example:
-<tscreen><verb>
-IsSecondDataSetActive:
-        SMC_LoadLowByte LoadData, y
-        CPY #$40
-        BNE NotActive
-    ...
-SMC LoadData, { LDA $2000 }
-</verb></tscreen>
-
-
-  <label id="Store low-byte">
-  <tag><tt>SMC_StoreLowByte label (, register)</tt></tag>
-
-  Does the same as '<tt>SMC_StoreValue</tt>' but should be used for low-bytes
-  of adresses for better readability.
-
-  Example:
-<tscreen><verb>
-InitStructureBaseAddresses:
-    LDX #0
-    SMC_StoreLowByte GetPlayerGraphic, x
-    SMC_StoreLowByte GetObjectGraphic, x
-    SMC_StoreLowByte StoreCollisionData, x
-    RTS
-    ...
-SMC GetPlayerGraphic, { LDX $2000 }
-    ...
-SMC GetObjectGraphic, { LDA $2100,x }
-    ...
-SMC StoreCollisionData, { STY $2200 }
-</verb></tscreen>
-
-
-  <label id="Transfer high-byte">
-  <tag><tt>SMC_TransferHighByte label, value (, register)</tt></tag>
-
-  Loads and stores the given value via the named register to the high-byte
-  adress portion of an SMC-instruction.
-
-  Example:
-<tscreen><verb>
-PlaySFX:
-SMC GetVolume { LDA $3200,x }
-    STA SoundOut
-    INX
-    BNE PlaySFX
-    ...
-PlayOtherSound:
-    SMC_TransferHighByte GetVolume, $34
-</verb></tscreen>
-
-
-  <label id="Load high-byte">
-  <tag><tt>SMC_LoadHighByte label (, register)</tt></tag>
-
-  Loads the high-byte part of an SMC-instruction adress to the given register.
-
-  Example:
-<tscreen><verb>
-PlaySFX:
-SMC GetVolume { LDA $3200,x }
-    ...
-    SMC_LoadHighByte GetVolume
-    cmp #$34
-    beq OtherSoundPlaying
-    ...
-</verb></tscreen>
-
-
-  <label id="Store high-byte">
-  <tag><tt>SMC_StoreHighByte label (, register)</tt></tag>
-
-  Stores the high-byte adress part of an SMC-instruction from the given
-  register.
-
-  Example:
-<tscreen><verb>
-SetupLevel2:
-    LDX #(>Level2Base)
-    SMC_StoreHighByte GetLevelData, x
-    SMC_StoreHighByte GetScreenData, x
-    SMC_StoreHighByte GetSoundData, x
-    RTS
-    ...
-SMC GetLevelData, { LDA Level1Base+Data }
-    ...
-SMC GetScreenData, { LDA Level1Base+Screen, x }
-    ...
-SMC GetSoundData, { LDA Level1Base+Sound, y }
-</verb></tscreen>
-
-
-  <label id="Transfer single adress">
-  <tag><tt>SMC_TransferAddressSingle label, address (, register)</tt></tag>
-
-  Transfers the contents of the given address via the given register to the
-  designated SMC instruction.
-
-  Example:
-<tscreen><verb>
-PrintHello:
-    SMC_TransferAddressSingle GetChar, #HelloMsg
-    ...
-    LDX #0
-NextChar:
-SMC GetChar, { LDA  SMC_AbsAdr, x }
-    BEQ leave
-    JSR CharOut
-    INX
-    BNE NextChar
-</verb></tscreen>
-
-
-  <label id="Transfer adress">
-  <tag><tt>SMC_TransferAddress label, address</tt></tag>
-
-  Loads contents of given address to A/X and stores the result to SMC
-  instruction. Allows reuse of register contents by using
-  '<tt>SMC_StoreAddress</tt>' for multiple SMC instruction modifications.
-
-  Example:
-<tscreen><verb>
-    SMC_TransferAddress JumpTo, #CloseChannel
-    ...
-SMC JumpTo, { JMP OpenChannel }
-</verb></tscreen>
-
-
-  <label id="Store address">
-  <tag><tt>SMC_StoreAddress label</tt></tag>
-
-  Stores the address value in a/x to a SMC instruction address position.
-
-  Example:
-<tscreen><verb>
-    SMC_StoreAddress GetData
-    ...
-SMC GetData, { LDA SMC_AbsAdr }
-</verb></tscreen>
-
-</descrip>
-
-<sect1>Operational macros<p>
-
-These marcos are determined to let read/modify/write opcodes work on parts of
-SMC instructions.
-
-<descrip>
-
- <label id="Operate on value">
-  <tag><tt>SMC_OperateOnValue opcode, label</tt></tag>
-
-  Let given opcode work on the value part of a SMC instruction.
-
-  Example:
-<tscreen><verb>
-    SMC_OperateOnValue ASL, LoadMask   ; shift mask to left
-    ...
-SMC LoadMask, { LDA #$20 }
-</verb></tscreen>
-
-  <label id="Operate on low-byte">
-  <tag><tt>SMC_OperateOnLowByte opcode, label</tt></tag>
-
-  Same as '<tt/SMC_OperateOnValue/' but renamed for better readability when
-  accessing low-bytes of address.
-
-  Example:
-<tscreen><verb>
-    SMC_OperateOnLowByte DEC, AccessData
-    ...
-SMC AccessData, { LDX Data }
-</verb></tscreen>
-
-  <label id="Operate on high-byte">
-  <tag><tt>SMC_OperateOnHighByte opcode, label</tt></tag>
-
-  Let the given opcode work on the high-byte part on a SMC-instruction.
-
-  Example:
-<tscreen><verb>
-NextPage:
-    SMC_OperateOnHighByte INC, GetPageData
-    ...
-SMC GetPageData, { LDA SourceData, X }
-</verb></tscreen>
-</descrip>
-
-<sect1>Scope macros<p>
-
-These marcos are determined to export and import SMC labels out of the current
-file scope. Please handle with care! If you cannot abstain from leaving the
-file scope, you should at least document the exported SMC lines very well. On
-import side no checking is available if the SMC line is correct accessed (e.g.
-invalid access to the value of an implied instruction)!
-
-<descrip>
-  <label id="Export SMC line under given name">
-  <tag><tt>SMC_Export alias, label</tt></tag>
-
-  SMC label will be exported under given alias.
-
-  Example:
-<tscreen><verb>
-.proc GetValue
-SMC LoadValue, { LDA #12 }
-    rts
-.endproc
-
-SMC_Export GetValueLoader, GetValue::LoadValue
-</verb></tscreen>
-
-  <label id="Import SMC alias">
-  <tag><tt>SMC_Import alias</tt></tag>
-
-  SMC line is made accessible under given alias.
-
-  Example:
-<tscreen><verb>
-SMC_Import GetValueLoader
-    ...
-    SMC_TransferValue GetValueLoader, #47
-    ...
-</verb></tscreen>
-</descrip>
-
-<sect>A complex example<p>
-Let's have a look on a quite sophisticated example for the usage of SMC. It
-not only modifies code, but also the modification of the code is modified -
-allowing reuse of some instructions.
-
-<descrip>
-<tag/The code is from my 'memset()'implementation:/
-<tscreen><verb>
- 1:     ...
- 2:     SMC_StoreAddress StoreAccuFirstSection
- 3:
- 4: StoreToFirstSection:
- 5:     SMC StoreAccuFirstSection, { sta SMC_AbsAdr, Y }
- 6:             ...
- 7: RestoreCodeBranchBaseAdr:
- 8:     SMC FirstIncHighByte, { SMC_OperateOnHighByte inc, StoreAccuFirstSection }             ; code will be overwritten to 'beq RestoreCode' (*)
- 9:     ...
-10:     SMC_TransferOpcode FirstIncHighByte, OPC_BEQ , x                                       ; change code marked above with (*)
-11:     SMC_TransferValue FirstIncHighByte, #(restoreCode - RestoreCodeBranchBaseAdr-2), x     ; set relative adress to 'RestoreCode'
-12:     ...
-13: restoreCode:
-14:     SMC_TransferOpcode FirstIncHighByte, OPC_INC_abs , x                                   ; restore original code...
-15:     SMC_TransferValue FirstIncHighByte, #(<(StoreToFirstSection+2)), x                     ; (second byte of inc contained low-byte of adress)
-16:             ...
-</verb></tscreen>
-
-<tag/Some explanation:/
-Line 2: The register pair A/X contains an address, which is stored on the
-address location of a SMC line called 'StoreAccuFirstSection'. According to
-cc65's calling convention, the low-byte is in accu while the high-byte is in
-the X-register.
-
-Line 5: The (modified) address is accessed.
-
-Line 8: We have a line here, which is about to be modified (it begins with
-SMC), but itself modifies code. Please note: Contrary to the rest of SMC-line
-modifying macros, the 'OperateOn'-macros just expand their given arguments
-into a single instruction line. These can be changed of course too.
-
-Line 10,11: These lines construct a branch operation for line 8: The
-X-register will be used to change it from 'inc StoreAccuFirstSection+2'
-(high-byte operation) to 'beq restoreCode'. Please note: To calculate the
-relaive branch offset, we introduced a second label
-('RestoreCodeBranchBaseAdr') for to calculate it. Some could also use the
-internal name of the SMC label, but you should abstain to do so - it may be
-changed in the future...
-
-Line 14,15: The original code from line 8 is reestablished.
-</descrip>
-</article>
diff --git a/doc/sp65.sgml b/doc/sp65.sgml
deleted file mode 100644 (file)
index 909ac6d..0000000
+++ /dev/null
@@ -1,415 +0,0 @@
-<!doctype linuxdoc system>      <!-- -*- text-mode -*- -->
-
-<article>
-<title>sp65 Users Guide
-<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
-<date>2012-03-11
-
-<abstract>
-sp65 is a sprite and bitmap utility that is part of the cc65 development suite.
-It is used to convert graphics and bitmaps into the target formats of the
-supported machines.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-sp65 is a tool that converts images from common formats into formats used
-on the 6502 platforms that are the targets of the cc65 compiler suite. In
-addition, it allows some very simple operation with loaded graphics data, like
-using part of an image for further processing.
-
-The utility has been designed in a way that adding additional source or target
-formats is easy. The final output is either binary, or C/assembler source.
-
-
-
-<sect>Usage<p>
-
-
-<sect1>Command line option overview<p>
-
-The sp65 utility accepts the following options:
-
-<tscreen><verb>
----------------------------------------------------------------------------
-Usage: sp65 [options] file [options] [file]
-Short options:
-  -V                            Print the version number and exit
-  -c fmt[,attrlist]             Convert into target format
-  -h                            Help (this text)
-  -lc                           List all possible conversions
-  -r file[,attrlist]            Read an input file
-  -v                            Increase verbosity
-  -w file[,attrlist]            Write the output to a file
-
-Long options:
-  --convert-to fmt[,attrlist]   Convert into target format
-  --help                        Help (this text)
-  --list-conversions            List all possible conversions
-  --pop                         Restore the original loaded image
-  --read file[,attrlist]        Read an input file
-  --slice x,y,w,h               Generate a slice from the loaded bitmap
-  --verbose                     Increase verbosity
-  --version                     Print the version number and exit
-  --write file[,attrlist]       Write the output to a file
----------------------------------------------------------------------------
-</verb></tscreen>
-
-
-<sect1>Command line options in detail<p>
-
-Below is a description of all the command line options. For the concept of
-attribute lists see <ref id="attr-lists" name="below">.
-
-<descrip>
-
-  <label id="option--convert-to">
-  <tag><tt>-c, --convert-to format[,attrlist]</tt></tag>
-
-  Convert a bitmap into one of the supported target formats. The option
-  argument must at least contain the "format" attribute. For more attributes,
-  see section <ref id="conversions" name="Conversions">.
-
-
-  <label id="option--help">
-  <tag><tt>-h, --help</tt></tag>
-
-  Print the short option summary shown above.
-
-
-  <label id="option--list-conversions">
-  <tag><tt>-lc, --list-conversions</tt></tag>
-
-  Print a list of possible conversions.
-
-
-  <label id="option--pop">
-  <tag><tt>--pop</tt></tag>
-
-  Restore the working copy of the bitmap from the one originally loaded from
-  the file. This may for example be used when creating several output files
-  from one input file.
-
-
-  <label id="option--read">
-  <tag><tt>-r, --read filename[,attrlist]</tt></tag>
-
-  Read an input file. The option argument must at least contain the "name"
-  attribute. See <ref id="input-formats" name="input formats"> for more
-  information.
-
-
-  <label id="option-v">
-  <tag><tt>-v, --verbose</tt></tag>
-
-  Increase verbosity. Usually only needed for debugging purposes. You may use
-  this option more than one time for even more verbose output.
-
-
-  <label id="option-V">
-  <tag><tt>-V, --version</tt></tag>
-
-  Print the version number of the assembler. If you send any suggestions or
-  bugfixes, please include the version number.
-
-
-  <label id="option--write">
-  <tag><tt>-w, --write filename[,attrlist]</tt></tag>
-
-  Write an output file. The option argument must at least contain the "name"
-  attribute. See <ref id="output-formats" name="output formats"> for more
-  information.
-
-</descrip>
-<p>
-
-
-
-<sect>Processing pipeline<label id="processing-pipeline"><p>
-
-sp65 consists of
-
-<itemize>
-<item>Front ends that read graphics data,
-<item>processors for graphics data,
-<item>converters
-<item>and output modules for several formats.
-</itemize>
-
-These modules can be combined to a pipeline that reads data, does some
-optional bitmap processing, converts the bitmap into a target format, and
-writes this binary data to disk in one of several forms.
-
-
-
-<sect>Attribute lists<label id="attr-lists"><p>
-
-As described in <ref id="processing-pipeline" name="Processing pipeline">,
-sp65 consists of lots of different modules that may be combined in different
-ways, to convert an input bitmap to some output.
-
-Many of the processors and converters have options to change the way, they're
-working. To avoid having lots of command line options that must be parsed on
-high level and passed down to the relevant parts of the program, sp65 features
-something called "attribute lists". Attribute lists are lists of
-attribute/value pairs. These lists are parsed by the main program module
-without any knowledge about their meaning. Lower level parts just grab the
-attributes they need.
-
-In general, attribute lists look like this:
-
-<tscreen><verb>
-        attr1=val1[,attr2=val2[,...]]
-</verb></tscreen>
-
-Instead of the comma, colons may also be used (even mixed).
-
-To simplify things and to make the most common options look "normal", some
-mandatory attributes may be given without an attribute name. If the attribute
-name is missing, the default name is determined by the position. For example,
-the option <tt/<ref id="option--read" name="--read">/ does always need a file
-name. The attribute name for the file name is "name". To avoid having to type
-
-<tscreen><verb>
-        sp65 --read name=ball.pcx ...
-</verb></tscreen>
-
-the first attribute gets the default name "name" assigned. So if the first
-attribute doesn't have a name, it is assumed that it is the file name. This
-means that instead of the line above, one can also use
-
-<tscreen><verb>
-        sp65 --read ball.pcx ...
-</verb></tscreen>
-
-The second attribute for <tt/--read/ is the format of the input file. So when
-using
-
-<tscreen><verb>
-        sp65 --read ball.pic:pcx ...
-</verb></tscreen>
-
-a PCX file named "ball.pic" is read. The long form would be
-
-<tscreen><verb>
-        sp65 --read name=ball.pic:format=pcx ...
-</verb></tscreen>
-
-Changing the order of the attributes is possible only when explicitly
-specifying the names of the attributes. Using
-
-<tscreen><verb>
-        sp65 --read pcx:ball.pic ...
-</verb></tscreen>
-
-will make sp65 complain, because it tries to read a file named "pcx" with an
-(unknown) format of "ball.pic". The following however will work:
-
-<tscreen><verb>
-        sp65 --read format=pcx:name=ball.pic ...
-</verb></tscreen>
-
-The attributes that are valid for each processor or converter are listed
-below.
-
-
-
-<sect>Input formats<label id="input-formats"><p>
-
-Input formats are either specified explicitly when using <tt/<ref
-id="option--read" name="--read">/, or are determined by looking at the
-extension of the file name given.
-
-<sect1>PCX<p>
-
-While sp65 is prepared for more, this is currently the only possible input
-format. There are no additional attributes for this format.
-
-
-
-<sect>Conversions<label id="conversions"><p>
-
-<sect1>GEOS bitmap<p>
-
-The current bitmap working copy is converted to a GEOS compacted bitmap. This
-format is used by several GEOS functions (i.e. 'BitmapUp') and is described
-in 'The Official GEOS Programmers Reference Guide', chapter 4, section
-'Bit-Mapped Graphics'.
-
-
-<sect1>GEOS icon<p>
-
-The current bitmap working copy is converted to GEOS icon format. A GEOS icon
-has the same format as a C64 high resolution sprite (24x21, monochrome, 63
-bytes). There are no additional attributes for this conversion.
-
-
-<sect1>Koala image<p>
-
-
-<sect1>Lynx sprite<p>
-
-Lynx can handle 1, 2, 3 and 4 bits per pixel indexed sprites. The maximum size
-of a sprite is roughly 508 pixels but in reality the Lynx screen is only 160 by
-102 pixels which makes very large sprites useless.
-
-The number per pixels is taken from the number of colors of the input bitmap.
-
-There are a few attributes that you can give to the conversion software.
-
-<descrip>
-
-  <tag/mode/
-  The first is what kind of encoding to use for the sprite. The attribute for
-  this is called "mode" and the possible values are "literal", "packed" or
-  "transparent". The default is "packed" if no mode is specified.
-
-  The "literal" is a totally literal mode with no packing. In this mode the
-  number of pixels per scanline will be a multiple of 8 both right and left from
-  the action point.
-
-  If the source bitmap edge ends with a color where the least significant bit is
-  one then there will be an extra 8 zero bits on that scan line.
-
-  So if you are using totally literal sprites and intend to change them at
-  runtime then please add a single pixel border far left and far right with
-  zeros in order to prevent graphical glitches in the game.
-
-  The standard encoding is called "packed". In this mode the sprite is packed
-  using run-length encoding and literal coding mixed for optimisation to
-  produce a small sprite.
-
-  The last encoding mode "transparent" is like packed. But here we know that
-  the index 0 will be transparent so we can clip off all 0 pixels from the left
-  and right edge of the sprite. This will produce the smallest sprite possible
-  on the Lynx. The sprite is not rectangular anymore.
-
-  <tag/ax/
-  The sprite is painted around the Anchor point. The anchor point x can be
-  between 0 and the width of the sprite - 1. If anchor point x is zero then
-  painting the sprite in location 10,20 will set the left edge of the sprite
-  10 pixels from the left of the Lynx screen. When the sprite is scaled by
-  hardware the anchor point stays in place and the sprite grows or shrinks
-  around the anchor point. The default value is 0 (left).
-
-  <tag/ay/
-  The sprite is painted around the Anchor point. The anchor point y can be
-  between 0 and the height of the sprite - 1. If anchor point y is zero then
-  painting the sprite in location 10,20 will set the top of the sprite 20
-  pixels from the top of the Lynx screen. When the sprite is scaled by
-  hardware the anchor point stays in place and the sprite grows or shrinks
-  around the anchor point. The default value is 0 (top).
-
-</descrip>
-
-<sect1>VIC2 sprite<p>
-
-
-
-
-<sect>Output formats<label id="output-formats"><p>
-
-Using <tt/<ref id="option--write" name="--write">/ it is possible to write
-processed data to an output file. An attribute "name" is mandatory, it is used
-as the file name for the output. The output format can be specified using an
-attribute named "format". If this attribute doesn't exist, the output format
-is determined by looking at the file name extension.
-
-
-<sect1>Binary<p>
-
-For this format, the processed data is written to the output file in raw
-binary format. There are no additional attributes (besides "name" and
-"format") for this output format.
-
-
-<sect1>Assembler code<p>
-
-For this format, the processed data is written to the output file in ca65
-assembler format. There are several attributes for this output format:
-
-<descrip>
-
-  <tag/base/
-  The value for this attribute specifies the numeric base for the data
-  values. It may be either 2, 10 or 16. The default is 16. If the base is
-  2, the numbers are prefixed by '%', if the base is 16, the numbers are
-  prefixed by '&dollar;'. For base 10, there is no prefix.
-
-  <tag/bytesperline/
-  The value for this attribute specifies the number of bytes output in one
-  line of the assembler file. The default is 16.
-
-  <tag/ident/
-  This is an optional attribute. When given, the output processor will wrap
-  the data into a <tt/.PROC/ with the given name. In addition, three constants
-  are added as local symbols within the <tt/.PROC/: <tt/COLORS/, <tt/WIDTH/
-  and <tt/HEIGHT/.
-
-</descrip>
-
-
-
-<sect1>C code<p>
-
-When using C output format, a small piece of C source code is generated that
-defines the data containing the output in an array of <tt/unsigned char/.
-
-Possible attributes for this format are:
-
-<descrip>
-  <tag/base/
-  The value for this attribute specifies the numeric base for the data values.
-  It may be either 10 or 16. The default is 16. If the base is 16, the numbers
-  are prefixed by 0x. For base 10, there is no prefix.
-
-  <tag/bytesperline/
-  The value for this attribute specifies the number of bytes output in one
-  line of the C source code. The default is 16.
-
-  <tag/ident/
-  This is an optional attribute. When given, the output processor will wrap
-  the data into an array of unsigned char with the given name. In addition,
-  three <tt/#define/s are added for <tt/&lt;ident&gt;_COLORS/,
-  <tt/&lt;ident&gt;_WIDTH/ and <tt/&lt;ident&gt;_HEIGHT/.
-
-</descrip>
-
-
-
-<sect>Copyright<p>
-
-sp65 (and all cc65 binutils) are (C) Copyright 1998-2012 Ullrich von Bassewitz
-and others. For usage of the binaries and/or sources the following conditions
-do apply:
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item>         The origin of this software must not be misrepresented; you must not
-               claim that you wrote the original software. If you use this software
-               in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-
-
-</article>
-
-
-
diff --git a/doc/supervision.sgml b/doc/supervision.sgml
deleted file mode 100644 (file)
index 97495de..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>Watara Supervision specific information for cc65
-<author><url url="mailto:polluks@sdf.lonestar.org" name="Stefan A. Haubenthal">
-<date>2014-04-12
-
-<abstract>
-An overview over the Supervision runtime system as it is implemented for the
-cc65 C compiler.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This file contains an overview of the Supervision runtime system as it comes
-with the cc65 C compiler. It describes the memory layout, Supervision specific header
-files, available drivers, and any pitfalls specific to that platform.
-
-Please note that Supervision specific functions are just mentioned here, they are
-described in detail in the separate <url url="funcref.html" name="function
-reference">. Even functions marked as "platform dependent" may be available on
-more than one platform. Please see the function reference for more information.
-
-
-<sect>Binary format<p>
-
-The standard binary output format generated by the linker for the Supervision target
-is a 2&times;16 kbyte machine language program. It is of course
-possible to change this behaviour by using one of the different linker configs.
-
-<sect>Memory layout<p>
-
-cc65 generated programs with the default setup run with the I/O area enabled,
-which gives a usable memory range of &dollar;8000 - &dollar;FFF9.
-More ROM may need additional bankswitching code.
-
-Special locations:
-
-<descrip>
-  <tag/Text screen/
-<!--  The text screen is located at VRAM &dollar;4000.-->
-  No conio support is currently available for the Supervision.
-
-  <tag/Stack/
-  The C runtime stack is located at &dollar;1FFF and growing downwards.
-
-  <tag/Heap/
-  The C heap is located at the end of the program and grows towards the C
-  runtime stack.
-
-</descrip><p>
-
-
-
-<sect>Platform specific header files<p>
-
-Programs containing Supervision specific code may use the <tt/supervision.h/ header file.
-
-
-<sect1>Supervision specific functions<p>
-
-<itemize>
-<item>waitvblank
-</itemize>
-
-
-
-<sect1>Hardware access<p>
-
-The following pseudo variables declared in the <tt/supervision.inc/ include file do
-allow access to hardware located in the address space.
-
-<descrip>
-
-  <tag><tt/IO/</tag>
-  The <tt/IO/ defines allow access to the IO chip.
-
-</descrip><p>
-
-
-
-<sect>Loadable drivers<p>
-
-<sect1>Graphics drivers<p>
-
-No graphics drivers are currently available for the Supervision.
-<!--A TGI driver for the standard graphics mode (160&times;160 in 4 colors) is
-available, but must be statically linked, because no file I/O is available.
-See the documentation for the <url url="co65.html" name="co65 utility">
-for information on how to do that.-->
-
-<sect1>Extended memory drivers<p>
-
-No extended memory drivers are currently available for the Supervision.
-
-
-<sect1>Joystick drivers<p>
-
-No joystick drivers are currently available for the Supervision.
-<!--A joystick driver for the standard buttons is available, but must be
-statically linked, because no file I/O is available. See the documentation for
-the <url url="co65.html" name="co65 utility"> for information on how to do
-that.-->
-
-<sect1>Mouse drivers<p>
-
-No mouse drivers are currently available for the Supervision.
-
-
-<sect1>RS232 device drivers<p>
-
-No communication port drivers are currently available for the Supervision.
-
-
-
-<sect>Limitations<p>
-
-<sect1>Disk I/O<p>
-
-The existing library for the Supervision doesn't implement C file
-I/O. There are even no hacks for the <tt/read()/ and <tt/write()/ routines.
-
-To be more concrete, this limitation means that you cannot use any of the
-following functions (and a few others):
-
-<itemize>
-<item>fclose
-<item>fopen
-<item>fread
-<item>fprintf
-<item>fputc
-<item>fscanf
-<item>fwrite
-<item>...
-</itemize>
-
-
-
-<sect>Other hints<p>
-
-
-
-<sect>License<p>
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
diff --git a/doc/using-make.sgml b/doc/using-make.sgml
deleted file mode 100644 (file)
index 0c3c13a..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>Using GNU Make with cc65
-<author><url url="mailto:ol.sc@web.de" name="Oliver Schmidt">
-<date>2014-04-12
-
-<abstract>
-How to build your program using the GNU Make utility.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This document describes how to build your programs using the cc65 development
-tools and the GNU Make utility.
-
-The cc65 development package doesn't come with a make utility. However this is
-no issue because GNU Make works very nicely with cc65.
-
-
-
-<sect>What is GNU Make?<p>
-
-GNU Make is a both very powerful and very popular make utility. It might even
-be called the de facto standard for make utilities. For more information see
-the GNU Make home page:
-
-<url url="http://www.gnu.org/software/make/">
-
-The cc65 development package is available as binaries for several host systems
-and can easily built for quite some additional systems. The very same is true
-for GNU Make so a cc65-based project coming with a GNU Make Makefile can easily
-be built by any cc65 developer no matter what host system is used.
-
-Because of the strong alignment of the cc65 compiler with the ISO C standard it
-is very well feasible to compile a single C code base both with the cc65
-compiler and other C compilers like for example GCC. GNU Make turns out to be
-very well suited to build projects for several target systems using multiple
-compilers as it isn't tied to any C compiler.
-
-
-
-<sect>A sample Makefile<p>
-
-This Makefile is a fully functional sample for compiling several C sources
-(here <tt/foo.c/ and <tt/bar.c/) and link the resulting object files into an
-executable program (here <tt/foobar/):
-
-<tscreen><verb>
-SOURCES = foo.c bar.c
-
-PROGRAM = foobar
-
-ifdef CC65_TARGET
-CC      = $(CC65_HOME)/bin/cl65
-CFLAGS  = -t $(CC65_TARGET) --create-dep $(<:.c=.d) -O
-LDFLAGS = -t $(CC65_TARGET) -m $(PROGRAM).map
-else
-CC      = gcc
-CFLAGS  = -MMD -MP -O
-LDFLAGS = -Wl,-Map,$(PROGRAM).map
-endif
-
-########################################
-
-.SUFFIXES:
-.PHONY: all clean
-all: $(PROGRAM)
-
-ifneq ($(MAKECMDGOALS),clean)
--include $(SOURCES:.c=.d)
-endif
-
-%.o: %.c
-       $(CC) -c $(CFLAGS) -o $@ $<
-
-$(PROGRAM): $(SOURCES:.c=.o)
-       $(CC) $(LDFLAGS) -o $@ $^
-
-clean:
-       $(RM) $(SOURCES:.c=.o) $(SOURCES:.c=.d) $(PROGRAM) $(PROGRAM).map
-</verb></tscreen>
-
-<bf/Important:/ When using the sample Makefile above via copy & paste it is
-necessary to replace the eight spaces at the beginning of command lines (lines
-26, 29 and 32) with a tab character (ASCII code 9).
-
-
-<sect1>Invoking the sample Makefile<p>
-
-Without any specific configuration the sample Makefile will compile and link
-using GCC. In order to rather use cc65 the variable <tt/CC65_TARGET/ needs to be
-defined. This may by done as an environment variable or simply as part of the
-Makefile. However to quickly switch between compilers and/or cc65 targets it is
-best done on the GNU Make command line like this:
-
-<tscreen><verb>
-make CC65_TARGET=c64
-</verb></tscreen>
-
-The sample Makefile presumes the variable <tt/CC65_HOME/ to point to the
-directory cc65 is located in. Again there are several ways to define this
-variable but as its value typically won't change often it is best done as an
-environment variable. On Windows the cc65 .exe installer package takes care
-of creating a <tt/CC65_HOME/ environment variable.
-
-
-<sect1>Understanding the sample Makefile<p>
-
-Most parts of the sample Makefile follow the guidelines in the
-<url url="http://www.gnu.org/software/make/manual/make.html" name="GNU Make Manual">
-that can be searched online for background information. The automatic generation of
-dependency however rather works as described by the GNU Make maintainer Paul D. Smith in
-<url url="http://make.paulandlesley.org/autodep.html#advanced" name="&dquot;Advanced Auto-Dependencies&dquot;">.
-Fortunately both GCC and cc65 directly support this method in the meantime.
-
-
-<sect1>Invoking the sample Makefile on Windows<p>
-
-The recommended way to use GNU Make on Windows is to install it as part of a
-Cygwin environment. For more information see the Cygwin home page:
-
-<url url="http://www.cygwin.com/">
-  
-If however installing Cygwin shouldn't be an option for one or the other reason
-then the sample Makefile may be invoked from the Windows Command Prompt (cmd.exe)
-by downloading the following programs:
-
-<itemize>
-<item><url name="make.exe" url="http://gnuwin32.sourceforge.net/packages/make.htm">
-<item><url name="rm.exe" url="http://gnuwin32.sourceforge.net/packages/coreutils.htm">
-</itemize>
-
-
-
-<sect>Target-specific Variable Values<p>
-  
-The very limited resources of the cc65 target machines now and then require
-manual optimization of the build process by compiling individual source files
-with different compiler options. GNU Make offers
-<url url="http://www.gnu.org/software/make/manual/html_node/Target_002dspecific.html" name="Target-specific Variable Values">
-perfectly suited for doing so. For example placing the code of the two modules 
-<tt/foo/ and <tt/bar/ in the segment <tt/FOOBAR/ can be achieved with this
-target-specific variable definition:
-
-<tscreen><verb>
-foo.o bar.o: CFLAGS += --code-name FOOBAR
-</verb></tscreen>
-  
-</article>
diff --git a/doc/vic20.sgml b/doc/vic20.sgml
deleted file mode 100644 (file)
index 5fba59a..0000000
+++ /dev/null
@@ -1,264 +0,0 @@
-<!doctype linuxdoc system>
-
-<article>
-
-<title>Commodore VIC20 (aka VC20) specific information for cc65
-<author>
-<url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">,<newline>
-<url url="mailto:polluks@sdf.lonestar.org" name="Stefan A. Haubenthal">
-<date>2014-04-12
-
-<abstract>
-An overview over the VIC20 runtime system as it is implemented for the cc65 C
-compiler.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Overview<p>
-
-This file contains an overview of the VIC20 runtime system as it comes with the
-cc65 C compiler. It describes the memory layout, VIC20-specific header files,
-available drivers, and any pitfalls specific to that platform.
-
-Please note that VIC20-specific functions are just mentioned here, they are
-described in detail in the separate <url url="funcref.html" name="function
-reference">. Even functions marked as "platform dependent" may be available on
-more than one platform. Please see the function reference for more
-information.
-
-
-<sect>Binary format<p>
-
-The standard binary output format generated by the linker for the VIC20 target
-is a machine language program with a one line BASIC stub, which calls the
-machine language part via SYS. This means that a program can be loaded as
-BASIC program and started with RUN. It is of course possible to change this
-behaviour by using a modified startup file and linker config.
-
-
-<sect>Memory layout<p>
-
-cc65 generated programs with the default setup run with unexpanded memory
-(RAM at &dollar;A000 - &dollar;BFFF may be used for the heap),
-which gives a usable memory range of &dollar;1000 - &dollar;1DFF.
-All ROM entry points may be called directly without additional code.
-
-Special locations:
-
-<descrip>
-  <tag/Text screen/
-  The text screen is located at &dollar;1E00 (as in the standard setup).
-
-  <tag/Stack/
-  The C runtime stack is located at &dollar;1DFF and growing downwards.
-
-  <tag/Heap/
-  The C heap is located at the end of the program and grows towards the C
-  runtime stack.
-
-</descrip><p>
-
-
-
-<sect>Platform-specific header files<p>
-
-Programs containing VIC20-specific code may use the <tt/vic20.h/ or <tt/cbm.h/
-header files. Using the later may be an option when writing code for more than
-one CBM platform, since it includes <tt/vic20.h/ and declares several functions
-common to all CBM platforms.
-
-
-<sect1>VIC20-specific functions<p>
-
-There are currently no special VIC20 functions.
-
-
-
-<sect1>CBM-specific functions<p>
-
-Some functions are available for all (or at least most) of the Commodore
-machines. See the <url url="funcref.html" name="function reference"> for
-declaration and usage.
-
-<itemize>
-<item>cbm_close
-<item>cbm_closedir
-<item>cbm_k_setlfs
-<item>cbm_k_setnam
-<item>cbm_k_load
-<item>cbm_k_save
-<item>cbm_k_open
-<item>cbm_k_close
-<item>cbm_k_readst
-<item>cbm_k_chkin
-<item>cbm_k_ckout
-<item>cbm_k_basin
-<item>cbm_k_bsout
-<item>cbm_k_clrch
-<item>cbm_load
-<item>cbm_open
-<item>cbm_opendir
-<item>cbm_read
-<item>cbm_readdir
-<item>cbm_save
-<item>cbm_write
-<item>get_tv
-</itemize>
-
-
-<sect1>Hardware access<p>
-
-The following pseudo variables declared in the <tt/vic20.h/ header file do allow
-access to hardware located in the address space. Some variables are
-structures, accessing the struct fields will access the chip registers.
-
-<descrip>
-
-  <tag><tt/VIC/</tag>
-  The <tt/VIC/ structure allows access to the VIC (the graphics
-  controller). See the <tt/_vic.h/ header file located in the include
-  directory for the declaration of the structure.
-
-  <tag><tt/VIA1, VIA2/</tag>
-  Access to the two VIA (versatile interface adapter) chips is available via
-  the <tt/VIA1/ and <tt/VIA2/ variables. The structure behind these variables
-  is explained in <tt/_6522.h/.
-
-  <tag><tt/COLOR_RAM/</tag>
-  A character array that mirrors the color RAM of the VIC20 at &dollar;9600.
-
-</descrip><p>
-
-
-
-<sect>Loadable drivers<p>
-
-The names in the parentheses denote the symbols to be used for static linking of the drivers.
-
-
-<sect1>Graphics drivers<p>
-
-No graphics drivers are currently available for the VIC20.
-
-
-<sect1>Extended memory drivers<p>
-
-No extended memory drivers are currently available for the VIC20.
-
-
-<sect1>Joystick drivers<p>
-
-The default drivers, <tt/joy_stddrv (joy_static_stddrv)/, point to <tt/vic20-stdjoy.joy (vic20_stdjoy_joy)/.
-
-<descrip>
-
-  <tag><tt/vic20-stdjoy.joy (vic20_stdjoy_joy)/</tag>
-  Supports one standard joystick connected to the joysticks port of the VIC20.
-
-  <tag><tt/vic20-ptvjoy.joy (vic20_ptvjoy_joy)/</tag>
-  Driver for the Protovision 4-player adapter contributed by Groepaz. See
-  <url url="http://www.protovision-online.de/hardw/hardwstart.htm"> for prices and
-  building instructions. Up to three joysticks are supported.
-
-</descrip><p>
-
-
-<sect1>Mouse drivers<p>
-
-No mouse drivers are currently available for the VIC20.
-
-
-<sect1>RS232 device drivers<p>
-
-No VIC1011 drivers are currently available for the VIC20.
-
-
-
-<sect>Limitations<p>
-
-
-
-<sect>Other hints<p>
-
-
-<sect1>Escape code<p>
-
-For an Esc, press CTRL and the <tt/[/ key.
-
-
-<sect1>Passing arguments to the program<p>
-
-Command-line arguments can be passed to <tt/main()/. Since that is not
-supported directly by BASIC, the following syntax was chosen:
-
-<tscreen><verb>
-    RUN:REM ARG1 " ARG2 IS QUOTED" ARG3 "" ARG5
-</verb></tscreen>
-
-<enum>
-<item>Arguments are separated by spaces.
-<item>Arguments may be quoted.
-<item>Leading and trailing spaces around an argument are ignored. Spaces within
-      a quoted argument are allowed.
-<item>The first argument passed to <tt/main()/ is the program name.
-<item>A maximum number of 10 arguments (including the program name) are
-      supported.
-</enum>
-
-
-<sect1>Program return code<p>
-
-The program return code (low byte) is passed back to BASIC by use of the
-<tt/ST/ variable.
-
-
-<sect1>Using extended memory<p>
-
-The extended memory at $A000 may be added to the heap by using the following
-code:
-
-<tscreen><verb>
-    /* Check for the existence of RAM */
-    if (PEEK(0xA000) == POKE(0xA000, PEEK(0xA000)+1)) {
-        /* Add it to the heap */
-        _heapadd ((void *) 0xA000, 0x2000);
-    }
-</verb></tscreen>
-
-
-<sect1>Interrupts<p>
-
-The runtime for the VIC20 uses routines marked as <tt/.INTERRUPTOR/ for
-interrupt handlers. Such routines must be written as simple machine language
-subroutines and will be called automatically by the interrupt handler code
-when they are linked into a program. See the discussion of the <tt/.CONDES/
-feature in the <url url="ca65.html" name="assembler manual">.
-
-
-
-<sect>License<p>
-
-This software is provided 'as-is', without any expressed or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-<enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
-</enum>
-
-</article>
diff --git a/include/6502.h b/include/6502.h
deleted file mode 100644 (file)
index 6c104c8..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  6502.h                                   */
-/*                                                                           */
-/*                        6502 specific declarations                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _6502_H
-#define _6502_H
-
-
-
-/* We need size_t */
-#ifndef _HAVE_size_t
-#define _HAVE_size_t
-typedef unsigned size_t;
-#endif
-
-
-
-/* Possible returns of getcpu() */
-#define CPU_6502        0
-#define CPU_65C02       1
-#define CPU_65816       2
-
-unsigned char getcpu (void);
-/* Detect the CPU the program is running on */
-
-
-
-/* Macros for CPU instructions */
-#define BRK()   __asm__ ("brk")
-#define CLI()   __asm__ ("cli")
-#define SEI()   __asm__ ("sei")
-
-
-
-/* Struct that holds the registers for the sys function */
-struct regs {
-    unsigned char a;            /* A register value */
-    unsigned char x;            /* X register value */
-    unsigned char y;            /* Y register value */
-    unsigned char flags;        /* Flags value */
-    unsigned      pc;           /* Program counter */
-};
-
-/* Defines for the flags in the regs structure */
-#define F6502_N         0x80    /* N flag */
-#define F6502_V         0x40    /* V flag */
-#define F6502_B         0x10    /* B flag */
-#define F6502_D         0x08    /* D flag */
-#define F6502_I         0x04    /* I flag */
-#define F6502_Z         0x02    /* Z flag */
-#define F6502_C         0x01    /* C flag */
-
-/* Function to call any machine language subroutine. All registers in the
-** regs structure are passed into the routine and the results are passed
-** out. The B flag is ignored on input. The called routine must end with
-** an RTS.
-*/
-void __fastcall__ _sys (struct regs* r);
-
-
-
-/* Set and reset the break vector. The given user function is called if
-** a break occurs. The values of the registers may be read from the brk_...
-** variables. The value in brk_pc will point to the address that contains
-** the brk instruction.
-** The set_brk function will install an exit handler that will reset the
-** vector if the program ends.
-*/
-
-extern unsigned char brk_a;     /* A register value */
-extern unsigned char brk_x;     /* X register value */
-extern unsigned char brk_y;     /* Y register value */
-extern unsigned char brk_sr;    /* Status register */
-extern unsigned brk_pc;         /* PC value */
-
-typedef void (*brk_handler) (void);
-/* Type of the break handler */
-
-void __fastcall__ set_brk (brk_handler f);
-/* Set the break vector to the given address */
-
-void reset_brk (void);
-/* Reset the break vector to the original value */
-
-
-
-/* Possible returns for irq_handler() */
-#define IRQ_NOT_HANDLED 0
-#define IRQ_HANDLED     1
-
-typedef unsigned char (*irq_handler) (void);
-/* Type of the C level interrupt request handler */
-
-void __fastcall__ set_irq (irq_handler f, void *stack_addr, size_t stack_size);
-/* Set the C level interrupt request vector to the given address */
-
-void reset_irq (void);
-/* Reset the C level interrupt request vector */
-
-
-
-/* End of 6502.h */
-#endif
diff --git a/include/_6522.h b/include/_6522.h
deleted file mode 100644 (file)
index d6eedcf..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  _6522.h                                  */
-/*                                                                           */
-/*                Internal include file, do not use directly                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004 Stefan Haubenthal <polluks@sdf.lonestar.org>                     */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef __VIA_H
-#define __VIA_H
-
-
-
-/* Define a structure with the 6522 register offsets.
-** NOTE: The timer registers are not declared as 16 bit registers, because
-** the order in which the two 8 bit halves are written is important, and
-** the compiler doesn't guarantee any order when writing 16 bit values.
-*/
-struct __6522 {
-    unsigned char       prb;            /* Port register B */
-    unsigned char       pra;            /* Port register A */
-    unsigned char       ddrb;           /* Data direction register B */
-    unsigned char       ddra;           /* Data direction register A */
-    unsigned char       t1_lo;          /* Timer 1, low byte */
-    unsigned char       t1_hi;          /* Timer 1, high byte */
-    unsigned char       t1l_lo;         /* Timer 1 latch, low byte */
-    unsigned char       t1l_hi;         /* Timer 1 latch, high byte */
-    unsigned char       t2_lo;          /* Timer 2, low byte */
-    unsigned char       t2_hi;          /* Timer 2, high byte */
-    unsigned char       sr;             /* Shift register */
-    unsigned char       acr;            /* Auxiliary control register */
-    unsigned char       pcr;            /* Peripheral control register */
-    unsigned char       ifr;            /* Interrupt flag register */
-    unsigned char       ier;            /* Interrupt enable register */
-    unsigned char       pra2;           /* Port register A w/o handshake */
-};
-
-
-
-/* End of _6522.h */
-#endif
-
-
-
diff --git a/include/_6525.h b/include/_6525.h
deleted file mode 100644 (file)
index 128839c..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  _6525.h                                  */
-/*                                                                           */
-/*                Internal include file, do not use directly                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2000 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef __6525_H
-#define __6525_H
-
-
-
-/* Define a structure with the 6525 register offsets. The shadow registers
-** (if port C is unused) are currently not implemented, we would need a
-** union to do that, however that would introduce an additional name.
-*/
-struct __6525 {
-    unsigned char       pra;            /* Port register A */
-    unsigned char       prb;            /* Port register B */
-    unsigned char       prc;            /* Port register C */
-    unsigned char       ddra;           /* Data direction register A */
-    unsigned char       ddrb;           /* Data direction register B */
-    unsigned char       ddrc;           /* Data direction register C */
-    unsigned char       cr;             /* Control register */
-    unsigned char       air;            /* Active interrupt register */
-};
-
-
-
-/* End of _6525.h */
-#endif
-
-
-
diff --git a/include/_6526.h b/include/_6526.h
deleted file mode 100644 (file)
index aa3158d..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  _6526.h                                  */
-/*                                                                           */
-/*                Internal include file, do not use directly                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2000 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef __6526_H
-#define __6526_H
-
-
-
-/* Define a structure with the 6526 register offsets.
-** NOTE: The timer registers are not declared as 16 bit registers, because
-** the order in which the two 8 bit halves are written is important, and
-** the compiler doesn't guarantee any order when writing 16 bit values.
-*/
-struct __6526 {
-    unsigned char       pra;            /* Port register A */
-    unsigned char       prb;            /* Port register B */
-    unsigned char       ddra;           /* Data direction register A */
-    unsigned char       ddrb;           /* Data direction register B */
-    unsigned char       ta_lo;          /* Timer A, low byte */
-    unsigned char       ta_hi;          /* Timer A, high byte */
-    unsigned char       tb_lo;          /* Timer B, low byte */
-    unsigned char       tb_hi;          /* Timer B, high byte */
-    unsigned char       tod_10;         /* TOD, 1/10 sec. */
-    unsigned char       tod_sec;        /* TOD, seconds */
-    unsigned char       tod_min;        /* TOD, minutes */
-    unsigned char       tod_hour;       /* TOD, hours */
-    unsigned char       sdr;            /* Serial data register */
-    unsigned char       icr;            /* Interrupt control register */
-    unsigned char       cra;            /* Control register A */
-    unsigned char       crb;            /* Control register B */
-};
-
-
-
-/* End of _6526.h */
-#endif
-
-
-
diff --git a/include/_6545.h b/include/_6545.h
deleted file mode 100644 (file)
index ea7c859..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  _6545.h                                  */
-/*                                                                           */
-/*                Internal include file, do not use directly                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2000 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef __6545_H
-#define __6545_H
-
-
-
-/* Define a structure with the 6545 register offsets */
-struct __6545 {
-    unsigned char       ctrl;           /* Control register */
-    unsigned char       data;           /* Data register */
-};
-
-
-
-/* End of _6545.h */
-#endif
-
-
-
diff --git a/include/_6551.h b/include/_6551.h
deleted file mode 100644 (file)
index cdf766d..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  _6551.h                                  */
-/*                                                                           */
-/*                Internal include file, do not use directly                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2000 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef __6551_H
-#define __6551_H
-
-
-
-/* Define a structure with the 6551 register offsets */
-struct __6551 {
-    unsigned char       data;           /* Data register */
-    unsigned char       status;         /* Status register */
-    unsigned char       cmd;            /* Command register */
-    unsigned char       ctrl;           /* Control register */
-};
-
-
-
-/* End of _6551.h */
-#endif
-
-
-
diff --git a/include/_antic.h b/include/_antic.h
deleted file mode 100644 (file)
index ab0cd96..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                _antic.h                                   */
-/*                                                                           */
-/*                  Internal include file, do not use directly               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000 Freddy Offenga <taf_offenga@yahoo.com>                           */
-/* 24-Jan-2011: Christian Krueger: Added defines for Antic instruction set   */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-#ifndef __ANTIC_H
-#define __ANTIC_H
-
-/* Define a structure with the antic register offsets */
-struct __antic {
-    unsigned char   dmactl; /* direct memory access control */
-    unsigned char   chactl; /* character mode control */
-    unsigned char   dlistl; /* display list pointer low-byte */
-    unsigned char   dlisth; /* display list pointer high-byte */
-    unsigned char   hscrol; /* horizontal scroll enable */
-    unsigned char   vscrol; /* vertical scroll enable */
-    unsigned char   unuse0; /* unused */
-    unsigned char   pmbase; /* msb of p/m base address */
-    unsigned char   unuse1; /* unused */
-    unsigned char   chbase; /* character base address */
-    unsigned char   wsync;  /* wait for horizontal synchronization */
-    unsigned char   vcount; /* vertical line counter */
-    unsigned char   penh;   /* light pen horizontal position */
-    unsigned char   penv;   /* light pen vertical position */
-    unsigned char   nmien;  /* non-maskable interrupt enable */
-    unsigned char   nmires; /* nmi reset/status */
-};
-
-
-/* antic instruction set */
-
-/* absolute instructions (non mode lines) */
-#define DL_JMP  1
-#define DL_JVB  65
-
-#define DL_BLK1 0
-#define DL_BLK2 16
-#define DL_BLK3 32
-#define DL_BLK4 48
-#define DL_BLK5 64
-#define DL_BLK6 80
-#define DL_BLK7 96
-#define DL_BLK8 112
-
-/* absolute instructions (mode lines) */
-#define DL_CHR40x8x1    2       /* monochrome, 40 character & 8 scanlines per mode line (GR. 0) */
-#define DL_CHR40x10x1   3       /* monochrome, 40 character & 10 scanlines per mode line */
-#define DL_CHR40x8x4    4       /* colour, 40 character & 8 scanlines per mode line (GR. 12) */
-#define DL_CHR40x16x4   5       /* colour, 40 character & 16 scanlines per mode line (GR. 13) */
-#define DL_CHR20x8x2    6       /* colour (duochrome per character), 20 character & 8 scanlines per mode line (GR. 1) */
-#define DL_CHR20x16x2   7       /* colour (duochrome per character), 20 character & 16 scanlines per mode line (GR. 2) */
-
-#define DL_MAP40x8x4    8       /* colour, 40 pixel & 8 scanlines per mode line (GR. 3) */
-#define DL_MAP80x4x2    9       /* 'duochrome', 80 pixel & 4 scanlines per mode line (GR.4) */
-#define DL_MAP80x4x4    10      /* colour, 80 pixel & 4 scanlines per mode line (GR.5) */
-#define DL_MAP160x2x2   11      /* 'duochrome', 160 pixel & 2 scanlines per mode line (GR.6) */
-#define DL_MAP160x1x2   12      /* 'duochrome', 160 pixel & 1 scanline per mode line (GR.14) */
-#define DL_MAP160x2x4   13      /* 4 colours, 160 pixel & 2 scanlines per mode line (GR.7) */
-#define DL_MAP160x1x4   14      /* 4 colours, 160 pixel & 1 scanline per mode line (GR.15) */
-#define DL_MAP320x1x1   15      /* monochrome, 320 pixel & 1 scanline per mode line (GR.8) */
-
-/* modifiers on mode lines */
-#define DL_HSCROL       16
-#define DL_VSCROL       32
-#define DL_LMS          64
-
-/* general modifier */
-#define DL_DLI          128
-
-/* End of _antic.h */
-#endif /* #ifndef __ANTIC_H */
diff --git a/include/_gtia.h b/include/_gtia.h
deleted file mode 100644 (file)
index 424628f..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 _gtia.h                                   */
-/*                                                                           */
-/*                  Internal include file, do not use directly               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000 Freddy Offenga <taf_offenga@yahoo.com>                           */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-#ifndef __GTIA_H
-#define __GTIA_H
-
-/* Define a structure with the gtia register offsets */
-struct __gtia_write {
-    unsigned char   hposp0; /* horizontal position player 0 */
-    unsigned char   hposp1; /* horizontal position player 1 */
-    unsigned char   hposp2; /* horizontal position player 2 */
-    unsigned char   hposp3; /* horizontal position player 3 */
-    unsigned char   hposm0; /* horizontal position missile 0 */
-    unsigned char   hposm1; /* horizontal position missile 1 */
-    unsigned char   hposm2; /* horizontal position missile 2 */
-    unsigned char   hposm3; /* horizontal position missile 3 */
-    unsigned char   sizep0; /* size of player 0 */
-    unsigned char   sizep1; /* size of player 1 */
-    unsigned char   sizep2; /* size of player 2 */
-    unsigned char   sizep3; /* size of player 3 */
-    unsigned char   sizem;  /* size of missiles */
-    unsigned char   grafp0; /* graphics shape player 0 */
-    unsigned char   grafp1; /* graphics shape player 1 */
-    unsigned char   grafp2; /* graphics shape player 2 */
-    unsigned char   grafp3; /* graphics shape player 3 */
-    unsigned char   grafm;  /* graphics shape missiles */
-    unsigned char   colpm0; /* color player and missile 0 */
-    unsigned char   colpm1; /* color player and missile 1 */
-    unsigned char   colpm2; /* color player and missile 2 */
-    unsigned char   colpm3; /* color player and missile 3 */
-    unsigned char   colpf0; /* color playfield 0 */
-    unsigned char   colpf1; /* color playfield 1 */
-    unsigned char   colpf2; /* color playfield 2 */
-    unsigned char   colpf3; /* color playfield 3 */
-    unsigned char   colbk;  /* color background */
-    unsigned char   prior;  /* priority selection */
-    unsigned char   vdelay; /* vertical delay */
-    unsigned char   gractl; /* stick/paddle latch, p/m control */
-    unsigned char   hitclr; /* clear p/m collision */
-    unsigned char   consol; /* console buttons */
-};
-
-/* Define a structure with the gtia register offsets */
-struct __gtia_read {
-    unsigned char   m0pf;   /* missile 0 to playfield collision */
-    unsigned char   m1pf;   /* missile 1 to playfield collision */
-    unsigned char   m2pf;   /* missile 2 to playfield collision */
-    unsigned char   m3pf;   /* missile 3 to playfield collision */
-    unsigned char   p0pf;   /* player 0 to playfield collision */
-    unsigned char   p1pf;   /* player 1 to playfield collision */
-    unsigned char   p2pf;   /* player 2 to playfield collision */
-    unsigned char   p3pf;   /* player 3 to playfield collision */
-    unsigned char   m0pl;   /* missile 0 to player collision */
-    unsigned char   m1pl;   /* missile 1 to player collision */
-    unsigned char   m2pl;   /* missile 2 to player collision */
-    unsigned char   m3pl;   /* missile 3 to player collision */
-    unsigned char   p0pl;   /* player 0 to player collision */
-    unsigned char   p1pl;   /* player 1 to player collision */
-    unsigned char   p2pl;   /* player 2 to player collision */
-    unsigned char   p3pl;   /* player 3 to player collision */
-    unsigned char   trig0;  /* joystick trigger 0 */
-    unsigned char   trig1;  /* joystick trigger 1 */
-    unsigned char   trig2;  /* joystick trigger 2 */
-    unsigned char   trig3;  /* joystick trigger 3 */
-    unsigned char   pal;    /* pal/ntsc flag */
-};
-
-/* End of _gtia.h */
-#endif /* #ifndef __GTIA_H */
-
diff --git a/include/_heap.h b/include/_heap.h
deleted file mode 100644 (file)
index c054cfa..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-** _heap.h
-**
-** Ullrich von Bassewitz, 1998-06-03, 2004-12-19
-**
-*/
-
-
-
-#ifndef __HEAP_H
-#define __HEAP_H
-
-
-
-/* Structure that preceeds a user block in most cases.
-** The aligned_malloc function may generate blocks where the start pointer
-** and size are splitted to handle a memory hole that is needed for
-** alignment.
-*/
-struct usedblock {
-    unsigned            size;
-    struct usedblock*   start;
-};
-
-/* Space needed for administering used blocks */
-#define HEAP_ADMIN_SPACE        sizeof (struct usedblock)
-
-/* The data type used to implement the free list.
-** Beware: Field order is significant!
-*/
-struct freeblock {
-    unsigned            size;
-    struct freeblock*   next;
-    struct freeblock*   prev;
-};
-
-
-
-/* Variables that describe the heap */
-extern unsigned*          _heaporg;     /* Bottom of heap */
-extern unsigned*          _heapptr;     /* Current top */
-extern unsigned*          _heapend;     /* Upper limit */
-extern struct freeblock*  _heapfirst;   /* First free block in list */
-extern struct freeblock*  _heaplast;    /* Last free block in list */
-
-
-
-/* End of _heap.h */
-
-#endif
-
-
-
diff --git a/include/_mikey.h b/include/_mikey.h
deleted file mode 100644 (file)
index b9b7f69..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                _mikey.h                                   */
-/*                                                                           */
-/* Atari Lynx, Mikey chip register hardware structures                       */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-#ifndef __MIKEY_H
-#define __MIKEY_H
-
-/* timer structure */
-typedef struct _mikey_timer {
-  unsigned char reload;
-  unsigned char control;
-  unsigned char count;
-  unsigned char control2;
-} _mikey_timer;
-
-typedef struct _mikey_all_timers {
-  struct _mikey_timer timer[8];
-} _mikey_all_timers;
-
-/* audio channel structure */
-typedef struct _mikey_audio {
-  unsigned char volume;
-  unsigned char feedback;
-  unsigned char dac;
-  unsigned char shiftlo;
-  unsigned char reload;
-  unsigned char control;
-  unsigned char count;
-  unsigned char other;
-} _mikey_audio;
-
-/* Define a structure with the mikey register offsets */
-struct __mikey {
-  struct _mikey_timer timer0;       // 0xFD00
-  struct _mikey_timer timer1;       // 0xFD04
-  struct _mikey_timer timer2;       // 0xFD08
-  struct _mikey_timer timer3;       // 0xFD0C
-  struct _mikey_timer timer4;       // 0xFD10
-  struct _mikey_timer timer5;       // 0xFD14
-  struct _mikey_timer timer6;       // 0xFD18
-  struct _mikey_timer timer7;       // 0xFD1C
-  struct _mikey_audio channel_a;    // 0xFD20
-  struct _mikey_audio channel_b;    // 0xFD28
-  struct _mikey_audio channel_c;    // 0xFD30
-  struct _mikey_audio channel_d;    // 0xFD38
-  unsigned char     attena;         // 0xFD40  ?? not yet allocated?
-  unsigned char     attenb;         // 0xFD41      |
-  unsigned char     attenc;         // 0xFD42      |
-  unsigned char     attend;         // 0xFD43      |
-  unsigned char     panning;        // 0xFD44      |
-  unsigned char     unused0[11];    // 0xFD45 - 0xFD4F  not used
-  unsigned char     mstereo;        // 0xFD50  stereo control bits
-  unsigned char     unused1[47];    // 0xFD51 - 0xFD7F  not used
-  unsigned char     intrst;         // 0xFD80  interrupt poll 0
-  unsigned char     intset;         // 0xFD81  interrupt poll 1
-  unsigned char     unused2[2];     // 0xFD82 - 0xFD83  not used
-  unsigned char     magrdy0;        // 0xFD84  mag tape channel0 ready bit
-  unsigned char     magrdy1;        // 0xFD85  mag tape channel1 ready bit
-  unsigned char     audin;          // 0xFD86  audio in
-  unsigned char     sysctl1;        // 0xFD87  control bits
-  unsigned char     mikeyrev;       // 0xFD88  mikey hardware rev
-  unsigned char     mikeysrev;      // 0xFD89  mikey software rev
-  unsigned char     iodir;          // 0xFD8A  parallel i/o data dir
-  unsigned char     iodat;          // 0xFD8B  parallel data
-  unsigned char     serctl;         // 0xFD8C  serial control register
-  unsigned char     serdat;         // 0xFD8D  serial data
-  unsigned char     unused3[2];     // 0xFD8E - 0xFD8F  not used
-  unsigned char     sdoneack;       // 0xFD90  suzy done acknowledge
-  unsigned char     cpusleep;       // 0xFD91  cpu bus request disable
-  unsigned char     dispctl;        // 0xFD92  video bus request enable, viddma
-  unsigned char     pkbkup;         // 0xFD93  magic 'P' count
-  unsigned char     *scrbase;       // 0xFD94  start address of video display
-  unsigned char     unused4[6];     // 0xFD96 - 0xFD9B  not used
-  unsigned char     mtest0;         // 0xFD9C
-  unsigned char     mtest1;         // 0xFD9D
-  unsigned char     mtest2;         // 0xFD9E
-  unsigned char     unused5;        // 0xFD9F  not used
-  unsigned char     palette[32];    // 0xFDA0 - 0xFDBF  palette 32 bytes
-                                    // 0xFDC0 - 0xFDFF  not used
-};
-
-
-#endif
-
diff --git a/include/_pbi.h b/include/_pbi.h
deleted file mode 100644 (file)
index f74262f..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  _pbi.h                                   */
-/*                                                                           */
-/*                  Internal include file, do not use directly               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000 Freddy Offenga <taf_offenga@yahoo.com>                           */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-#ifndef __PBI_H
-#define __PBI_H
-
-/* parallel bus interface area */
-#define PBI             ((unsigned char*)0xD100)
-
-/* parallel device IRQ status */
-#define PDVI            ((unsigned char*)0xD1FF)
-
-/* parallel device select */
-#define PDVS            ((unsigned char*)0xD1FF)
-
-/* parallel bus interface RAM area */
-#define PBIRAM          ((unsigned char*)0xD600)
-
-/* parallel device ID 1 */
-#define PDID1           ((unsigned char*)0xD803)
-
-/* parallel device I/O vector */
-#define PDIDV           ((unsigned char*)0xD805)
-
-/* parallel device IRQ vector */
-#define PDIRQV          ((unsigned char*)0xD808)
-
-/* parallel device ID 2 */
-#define PDID2           ((unsigned char*)0xD80B)
-
-/* parallel device vector table */
-#define PDVV            ((unsigned char*)0xD80D)
-
-/* End of _pbi.h */
-#endif /* #ifndef __PBI_H */
-
diff --git a/include/_pia.h b/include/_pia.h
deleted file mode 100644 (file)
index 867c8f8..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  _pia.h                                   */
-/*                                                                           */
-/*                Internal include file, do not use directly                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000 Freddy Offenga <taf_offenga@yahoo.com>                           */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef __PIA_H
-#define __PIA_H
-
-
-/* Define a structure with the pia register offsets */
-struct __pia {
-    unsigned char   porta;  /* port A data r/w */
-    unsigned char   portb;  /* port B data r/w */
-    unsigned char   pactl;  /* port A control */
-    unsigned char   pbctl;  /* port B control */
-};
-
-
-
-/* End of _pia.h */
-#endif
-
-
-
diff --git a/include/_pokey.h b/include/_pokey.h
deleted file mode 100644 (file)
index df10eac..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 _pokey.h                                  */
-/*                                                                           */
-/*                Internal include file, do not use directly                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000 Freddy Offenga <taf_offenga@yahoo.com>                           */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef __POKEY_H
-#define __POKEY_H
-
-
-
-/* Define a structure with the pokey register offsets */
-struct __pokey_write {
-    unsigned char   audf1;  /* audio channel #1 frequency */
-    unsigned char   audc1;  /* audio channel #1 control */
-    unsigned char   audf2;  /* audio channel #2 frequency */
-    unsigned char   audc2;  /* audio channel #2 control */
-    unsigned char   audf3;  /* audio channel #3 frequency */
-    unsigned char   audc3;  /* audio channel #3 control */
-    unsigned char   audf4;  /* audio channel #4 frequency */
-    unsigned char   audc4;  /* audio channel #4 control */
-    unsigned char   audctl; /* audio control */
-    unsigned char   stimer; /* start pokey timers */
-    unsigned char   skrest; /* reset serial port status reg. */
-    unsigned char   potgo;  /* start paddle scan sequence */
-    unsigned char   unuse1; /* unused */
-    unsigned char   serout; /* serial port data output */
-    unsigned char   irqen;  /* interrupt request enable */
-    unsigned char   skctl;  /* serial port control */
-};
-struct __pokey_read {
-    unsigned char   pot0;   /* paddle 0 value */
-    unsigned char   pot1;   /* paddle 1 value */
-    unsigned char   pot2;   /* paddle 2 value */
-    unsigned char   pot3;   /* paddle 3 value */
-    unsigned char   pot4;   /* paddle 4 value */
-    unsigned char   pot5;   /* paddle 5 value */
-    unsigned char   pot6;   /* paddle 6 value */
-    unsigned char   pot7;   /* paddle 7 value */
-    unsigned char   allpot; /* eight paddle port status */
-    unsigned char   kbcode; /* keyboard code */
-    unsigned char   random; /* random number generator */
-    unsigned char   unuse2; /* unused */
-    unsigned char   unuse3; /* unused */
-    unsigned char   serin;  /* serial port input */
-    unsigned char   irqst;  /* interrupt request status */
-    unsigned char   skstat; /* serial port status */
-};
-
-/* End of _pokey.h */
-#endif /* #ifndef __POKEY_H */
-
diff --git a/include/_sid.h b/include/_sid.h
deleted file mode 100644 (file)
index 0aa61b2..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  _sid.h                                   */
-/*                                                                           */
-/*                Internal include file, do not use directly                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2000 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef __SID_H
-#define __SID_H
-
-
-
-/* Define a structure with the sid register offsets */
-struct __sid_voice {
-    unsigned            freq;           /* Frequency */
-    unsigned            pw;             /* Pulse width */
-    unsigned char       ctrl;           /* Control register */
-    unsigned char       ad;             /* Attack/decay */
-    unsigned char       sr;             /* Sustain/release */
-};
-struct __sid {
-    struct __sid_voice  v1;             /* Voice 1 */
-    struct __sid_voice  v2;             /* Voice 2 */
-    struct __sid_voice  v3;             /* Voice 3 */
-    unsigned            flt_freq;       /* Filter frequency */
-    unsigned char       flt_ctrl;       /* Filter control register */
-    unsigned char       amp;            /* Amplitude */
-    unsigned char       ad1;            /* A/D converter 1 */
-    unsigned char       ad2;            /* A/D converter 2 */
-    unsigned char       noise;          /* Noise generator */
-    unsigned char       read3;          /* Value of voice 3 */
-};
-
-
-
-/* End of _sid.h */
-#endif
-
-
-
diff --git a/include/_suzy.h b/include/_suzy.h
deleted file mode 100644 (file)
index 8ab7f68..0000000
+++ /dev/null
@@ -1,318 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                _suzy.h                                    */
-/*                                                                           */
-/* Atari Lynx, Suzy chip register hardware structures                        */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-#ifndef __SUZY_H
-#define __SUZY_H
-
-/* Joypad $FCB0 */
-#define JOYPAD_RIGHT    0x10
-#define JOYPAD_LEFT     0x20
-#define JOYPAD_DOWN     0x40
-#define JOYPAD_UP       0x80
-#define BUTTON_OPTION1  0x08
-#define BUTTON_OPTION2  0x04
-#define BUTTON_INNER    0x02
-#define BUTTON_OUTER    0x01
-
-/* Switches $FCB1 */
-#define BUTTON_PAUSE    0x01
-
-
-/* Hardware Math */
-#define FACTOR_A *(unsigned int *) 0xFC54
-#define FACTOR_B *(unsigned int *) 0xFC52
-#define PRODUCT0 *(unsigned int *) 0xFC60
-#define PRODUCT1 *(unsigned int *) 0xFC62
-#define PRODUCT *(long *) 0xFC60
-
-#define DIVIDEND0 *(unsigned int *) 0xFC60
-#define DIVIDEND1 *(unsigned int *) 0xFC62
-#define DIVIDEND *(long *) 0xFC60
-#define DIVISOR *(unsigned int *) 0xFC56
-#define QUOTIENT0 *(unsigned int *) 0xFC52
-#define QUOTIENT1 *(unsigned int *) 0xFC54
-#define QUOTIENT *(long *) 0xFC52
-#define REMAINDER0 *(unsigned int *) 0xFC6C
-#define REMAINDER1 *(unsigned int *) 0xFC6E
-#define REMAINDER *(long *) 0xFC6C
-
-
-/* Sprite control block (SCB) defines */
-
-/* SPRCTL0 $FC80 */
-#define BPP_4            0xC0
-#define BPP_3            0x80
-#define BPP_2            0x40
-#define BPP_1            0x00
-#define HFLIP            0x20
-#define VFLIP            0x10
-#define TYPE_SHADOW      0x07
-#define TYPE_XOR         0x06
-#define TYPE_NONCOLL     0x05
-#define TYPE_NORMAL      0x04
-#define TYPE_BOUNDARY    0x03
-#define TYPE_BSHADOW     0x02
-#define TYPE_BACKNONCOLL 0x01
-#define TYPE_BACKGROUND  0x00
-
-/* SPRCTL1 $FC81 */
-#define LITERAL          0x80
-#define PACKED           0x00
-#define ALGO3            0x40
-#define RENONE           0x00
-#define REHV             0x10
-#define REHVS            0x20
-#define REHVST           0x30
-#define REUSEPAL         0x08
-#define SKIP             0x04
-#define DRAWUP           0x02
-#define DRAWLEFT         0x01
-
-typedef struct SCB_REHVST_PAL {             // SCB with all attributes
-  unsigned char sprctl0;
-  unsigned char sprctl1;
-  unsigned char sprcoll;
-  char *next;
-  unsigned char *data;
-  signed int hpos;
-  signed int vpos;
-  unsigned int hsize;
-  unsigned int vsize;
-  unsigned int stretch;
-  unsigned int tilt;
-  unsigned char penpal[8];
-} SCB_REHVST_PAL;
-
-typedef struct SCB_REHVST {                  // SCB without pallette
-  unsigned char sprctl0;
-  unsigned char sprctl1;
-  unsigned char sprcoll;
-  char *next;
-  unsigned char *data;
-  signed int hpos;
-  signed int vpos;
-  unsigned int hsize;
-  unsigned int vsize;
-  unsigned int stretch;
-  unsigned int tilt;
-} SCB_REHVST;
-
-typedef struct SCB_REHV {                 // SCB without stretch/tilt
-  unsigned char sprctl0;
-  unsigned char sprctl1;
-  unsigned char sprcoll;
-  char *next;
-  unsigned char *data;
-  signed int hpos;
-  signed int vpos;
-  unsigned int hsize;
-  unsigned int vsize;
-} SCB_REHV;
-
-typedef struct SCB_REHV_PAL {             // SCB without str/tilt, w/ penpal
-  unsigned char sprctl0;
-  unsigned char sprctl1;
-  unsigned char sprcoll;
-  char *next;
-  unsigned char *data;
-  signed int hpos;
-  signed int vpos;
-  unsigned int hsize;
-  unsigned int vsize;
-  unsigned char penpal[8];
-} SCB_REHV_PAL;
-
-typedef struct SCB_REHVS {                // SCB w/o tilt & penpal
-  unsigned char sprctl0;
-  unsigned char sprctl1;
-  unsigned char sprcoll;
-  char *next;
-  unsigned char *data;
-  signed int hpos;
-  signed int vpos;
-  unsigned int hsize;
-  unsigned int vsize;
-  unsigned int stretch;
-} SCB_REHVS;
-
-typedef struct SCB_REHVS_PAL {            // SCB w/o tilt w/penpal
-  unsigned char sprctl0;
-  unsigned char sprctl1;
-  unsigned char sprcoll;
-  char *next;
-  unsigned char *data;
-  signed int hpos;
-  signed int vpos;
-  unsigned int hsize;
-  unsigned int vsize;
-  unsigned int stretch;
-  unsigned char penpal[8];
-} SCB_REHVS_PAL;
-
-typedef struct SCB_RENONE {                 // SCB w/o size/stretch/tilt/pal
-  unsigned char sprctl0;
-  unsigned char sprctl1;
-  unsigned char sprcoll;
-  char *next;
-  unsigned char *data;
-  signed int hpos;
-  signed int vpos;
-} SCB_RENONE;
-
-typedef struct SCB_RENONE_PAL {             // SCB w/o size/str/tilt w/penpal
-  unsigned char sprctl0;
-  unsigned char sprctl1;
-  unsigned char sprcoll;
-  char *next;
-  unsigned char *data;
-  signed int hpos;
-  signed int vpos;
-  unsigned char penpal[8];
-} SCB_RENONE_PAL;
-
-typedef struct PENPAL_4 {
-  unsigned char penpal[8];
-} PENPAL_4;
-
-typedef struct PENPAL_3 {
-  unsigned char penpal[4];
-} PENPAL_3;
-
-typedef struct PENPAL_2 {
-  unsigned char penpal[2];
-} PENPAL_2;
-
-typedef struct PENPAL_1 {
-  unsigned char penpal[1];
-} PENPAL_1;
-
-/* Misc system defines */
-
-/* SPRGO $FC91 */
-#define EVER_ON         0x04
-#define SPRITE_GO       0x01
-
-/* SPRSYS (write) $FC92 */
-#define SIGNMATH        0x80
-#define ACCUMULATE      0x40
-#define NO_COLLIDE      0x20
-#define VSTRETCH        0x10
-#define LEFTHAND        0x08
-#define CLR_UNSAFE      0x04
-#define SPRITESTOP      0x02
-
-/* SPRSYS (read) $FC92 */
-#define MATHWORKING     0x80
-#define MATHWARNING     0x40
-#define MATHCARRY       0x20
-#define VSTRETCHING     0x10
-#define LEFTHANDED      0x08
-#define UNSAFE_ACCESS   0x04
-#define SPRITETOSTOP    0x02
-#define SPRITEWORKING   0x01
-
-/* MAPCTL $FFF9 */
-#define HIGHSPEED       0x80
-#define VECTORSPACE     0x08
-#define ROMSPACE        0x04
-#define MIKEYSPACE      0x02
-#define SUZYSPACE       0x01
-
-
-/* Suzy Hardware Registers */
-struct __suzy {
-  unsigned int  tmpadr;         // 0xFC00  Temporary address
-  unsigned int  tiltacc;        // 0xFC02  Tilt accumulator
-  unsigned int  hoff;           // 0xFC04  Offset to H edge of screen
-  unsigned int  voff;           // 0xFC06  Offset to V edge of screen
-  unsigned char *sprbase;       // 0xFC08  Base address of sprite
-  unsigned char *colbase;       // 0xFC0A  Base address of collision buffer
-  unsigned char *vidadr;        // 0xFC0C  Current vid buffer address
-  unsigned char *coladr;        // 0xFC0E  Current col buffer address
-  unsigned char *scbnext;       // 0xFC10  Address of next SCB
-  unsigned char *sprdline;      // 0xFC12  start of sprite data line address
-  unsigned char *hposstrt;      // 0xFC14  start hpos
-  unsigned char *vposstrt;      // 0xFC16  start vpos
-  unsigned char *sprhsize;      // 0xFC18  sprite h size
-  unsigned char *sprvsize;      // 0xFC1A  sprite v size
-  unsigned int  stretchl;       // 0xFC1C  H size adder
-  unsigned int  tilt;           // 0xFC1E  H pos adder
-  unsigned int  sprdoff;        // 0xFC20  offset to next sprite data line
-  unsigned int  sprvpos;        // 0xFC22  current vpos
-  unsigned int  colloff;        // 0xFC24  offset to collision depository
-  unsigned int  vsizeacc;       // 0xFC26  vertical size accumulator
-  unsigned int  hsizeoff;       // 0xFC28  horizontal size offset
-  unsigned int  vsizeoff;       // 0xFC2A  vertical size offset
-  unsigned char *scbaddr;       // 0xFC2C  address of current SCB
-  unsigned char *procaddr;      // 0xFC2E  address of current spr data proc
-  unsigned char unused0[32];    // 0xFC30 - 0xFC4F  reserved/unused
-  unsigned char unused1[2];     // 0xFC50 - 0xFC51  do not use
-  unsigned char mathd;          // 0xFC52
-  unsigned char mathc;          // 0xFC53
-  unsigned char mathb;          // 0xFC54
-  unsigned char matha;          // 0xFC55
-  unsigned char mathp;          // 0xFC56
-  unsigned char mathn;          // 0xFC57
-  unsigned char unused2[8];     // 0xFC58 - 0xFC5F  do not use
-  unsigned char mathh;          // 0xFC60
-  unsigned char mathg;          // 0xFC61
-  unsigned char mathf;          // 0xFC62
-  unsigned char mathe;          // 0xFC63
-  unsigned char unused3[8];     // 0xFC64 - 0xFC6B  do not use
-  unsigned char mathm;          // 0xFC6C
-  unsigned char mathl;          // 0xFC6D
-  unsigned char mathk;          // 0xFC6E
-  unsigned char mathj;          // 0xFC6F
-  unsigned char unused4[16];    // 0xFC70 - 0xFC7F  do not use
-  unsigned char sprctl0;        // 0xFC80  sprite control bits 0
-  unsigned char sprctl1;        // 0xFC81  sprite control bits 1
-  unsigned char sprcoll;        // 0xFC82  sprite collision number
-  unsigned char sprinit;        // 0xFC83  sprite initialization bits
-  unsigned char unused5[4];     // 0xFC84 - 0xFC87  unused
-  unsigned char suzyhrev;       // 0xFC88  suzy hardware rev
-  unsigned char suzysrev;       // 0xFC89  suzy software rev
-  unsigned char unused6[6];     // 0xFC8A - 0xFC8F  unused
-  unsigned char suzybusen;      // 0xFC90  suzy bus enable
-  unsigned char sprgo;          // 0xFC91  sprite process start bit
-  unsigned char sprsys;         // 0xFC92  sprite system control bits
-  unsigned char unused7[29];    // 0xFC93 - 0xFCAF  unused
-  unsigned char joystick;       // 0xFCB0  joystick and buttons
-  unsigned char switches;       // 0xFCB1  other switches
-  unsigned char cart0;          // 0xFCB2  cart0 r/w
-  unsigned char cart1;          // 0xFCB3  cart1 r/w
-  unsigned char unused8[8];     // 0xFCB4 - 0xFCBF  unused
-  unsigned char leds;           // 0xFCC0  leds
-  unsigned char unused9;        // 0xFCC1  unused
-  unsigned char parstat;        // 0xFCC2  parallel port status
-  unsigned char pardata;        // 0xFCC3  parallel port data
-  unsigned char howie;          // 0xFCC4  howie (?)
-                                // 0xFCC5 - 0xFCFF  unused
-};
-
-
-#endif
-
diff --git a/include/_ted.h b/include/_ted.h
deleted file mode 100644 (file)
index 68b59d7..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  _ted.h                                   */
-/*                                                                           */
-/*                Internal include file, do not use directly                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef __TED_H
-#define __TED_H
-
-
-
-/* Define a structure with the ted register offsets */
-struct __ted {
-    unsigned char       t1_lo;          /* Timer #1 low */
-    unsigned char       t1_hi;          /* Timer #1 high */
-    unsigned char       t2_lo;          /* Timer #2 low */
-    unsigned char       t2_hi;          /* Timer #2 high */
-    unsigned char       t3_lo;          /* Timer #3 low */
-    unsigned char       t3_hi;          /* Timer #3 high */
-    unsigned char       vscroll;        /* Vertical scroll control */
-    unsigned char       hscroll;        /* Horizontal scroll control */
-    unsigned char       kbdlatch;       /* Keyboard latch */
-    unsigned char       irr;            /* Interrupt request register */
-    unsigned char       imr;            /* Interrupt mask register */
-    unsigned char       irq_rasterline; /* Interrupt rasterline */
-    unsigned char       cursor_hi;      /* Cursor position high */
-    unsigned char       cursor_lo;      /* Cursor position low */
-    unsigned char       snd1_freq_lo;   /* Channel #1 frequency */
-    unsigned char       snd2_freq_lo;   /* Channel #2 frequency low */
-    unsigned char       snd2_freq_hi;   /* Channel #2 frequency high */
-    unsigned char       snd_ctrl;       /* Sound control */
-    unsigned char       misc;           /* Channel #1 frequency high and more */
-    unsigned char       char_addr;      /* Character data base address */
-    unsigned char       video_addr;     /* Video memory base address */
-    unsigned char       bgcolor;        /* Background color */
-    unsigned char       color1;         /* Color register #1 */
-    unsigned char       color2;         /* Color register #2 */
-    unsigned char       color3;         /* Color register #3 */
-    unsigned char       bordercolor;    /* Border color */
-    unsigned char       bmap_reload_hi; /* Bitmap reload bits 8+9 */
-    unsigned char       bmap_reload_lo; /* Bitmap reload bits 0-7 */
-    unsigned char       rasterline_hi;  /* Current rasterline bit 8 */
-    unsigned char       rasterline_lo;  /* Current rasterline bits 0-7 */
-    unsigned char       rastercolumn;   /* Current rastercolumn */
-    unsigned char       cursor_blink;   /* Cursor blink attribute */
-    unsigned char       unused[30];     /* Unused */
-    unsigned char       enable_rom;     /* Write enables ROM */
-    unsigned char       enable_ram;     /* Write enables RAM */
-};
-
-
-
-/* End of _ted.h */
-#endif
-
-
-
diff --git a/include/_vdc.h b/include/_vdc.h
deleted file mode 100644 (file)
index 161721d..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  _vdc.h                                   */
-/*                                                                           */
-/*                Internal include file, do not use directly                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2000 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef __VDC_H
-#define __VDC_H
-
-
-
-/* Define a structure with the vdc register offsets */
-struct __vdc {
-    unsigned char       ctrl;           /* Control register */
-    unsigned char       data;           /* Data register */
-};
-
-
-
-/* End of _vdc.h */
-#endif
-
-
-
diff --git a/include/_vic.h b/include/_vic.h
deleted file mode 100644 (file)
index ac4d8a2..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  _vic.h                                   */
-/*                                                                           */
-/*                Internal include file, do not use directly                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef __VIC_H
-#define __VIC_H
-
-
-
-/* Define a structure with the vic register offsets */
-struct __vic {
-    unsigned char       leftborder;
-    unsigned char       upperborder;
-    unsigned char       charsperline;   /* Characters per line */
-    unsigned char       linecount;      /* Number of lines */
-    unsigned char       rasterline;     /* Current raster line */
-    unsigned char       addr;           /* Address of chargen and video ram */
-    unsigned char       strobe_x;       /* Light pen, X position */
-    unsigned char       strobe_y;       /* Light pen, Y position */
-    unsigned char       analog_x;       /* Analog input X */
-    unsigned char       analog_y;       /* Analog input Y */
-    unsigned char       voice1;         /* Sound generator #1 */
-    unsigned char       voice2;         /* Sound generator #2 */
-    unsigned char       voice3;         /* Sound generator #3 */
-    unsigned char       noise;          /* Noise generator */
-    unsigned char       volume_color;   /* Bits 0..3: volume, 4..7: color */
-    unsigned char       bg_border_color;/* Background and border color */
-};
-
-
-
-/* End of _vic.h */
-#endif
-
-
-
diff --git a/include/_vic2.h b/include/_vic2.h
deleted file mode 100644 (file)
index a28067b..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  _vic2.h                                  */
-/*                                                                           */
-/*                Internal include file, do not use directly                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef __VIC2_H
-#define __VIC2_H
-
-
-
-/* Define a structure with the vic register offsets. In cc65 mode, there
-** are aliases for the field accessible as arrays.
-*/
-#if __CC65_STD__ == __CC65_STD_CC65__
-struct __vic2 {
-    union {
-        struct {
-            unsigned char   spr0_x;         /* Sprite 0, X coordinate */
-            unsigned char   spr0_y;         /* Sprite 0, Y coordinate */
-            unsigned char   spr1_x;         /* Sprite 1, X coordinate */
-            unsigned char   spr1_y;         /* Sprite 1, Y coordinate */
-            unsigned char   spr2_x;         /* Sprite 2, X coordinate */
-            unsigned char   spr2_y;         /* Sprite 2, Y coordinate */
-            unsigned char   spr3_x;         /* Sprite 3, X coordinate */
-            unsigned char   spr3_y;         /* Sprite 3, Y coordinate */
-            unsigned char   spr4_x;         /* Sprite 4, X coordinate */
-            unsigned char   spr4_y;         /* Sprite 4, Y coordinate */
-            unsigned char   spr5_x;         /* Sprite 5, X coordinate */
-            unsigned char   spr5_y;         /* Sprite 5, Y coordinate */
-            unsigned char   spr6_x;         /* Sprite 6, X coordinate */
-            unsigned char   spr6_y;         /* Sprite 6, Y coordinate */
-            unsigned char   spr7_x;         /* Sprite 7, X coordinate */
-            unsigned char   spr7_y;         /* Sprite 7, Y coordinate */
-        };
-        struct {
-            unsigned char   x;              /* X coordinate */
-            unsigned char   y;              /* Y coordinate */
-        } spr_pos[8];
-    };
-    unsigned char           spr_hi_x;       /* High bits of X coordinate */
-    unsigned char           ctrl1;          /* Control register 1 */
-    unsigned char           rasterline;     /* Current raster line */
-    union {
-        struct {
-            unsigned char   strobe_x;       /* Light pen, X position */
-            unsigned char   strobe_y;       /* Light pen, Y position */
-        };
-        struct {
-            unsigned char   x;              /* Light pen, X position */
-            unsigned char   y;              /* Light pen, Y position */
-        } strobe;
-    };
-    unsigned char           spr_ena;        /* Enable sprites */
-    unsigned char           ctrl2;          /* Control register 2 */
-    unsigned char           spr_exp_y;      /* Expand sprites in Y dir */
-    unsigned char           addr;           /* Address of chargen and video ram */
-    unsigned char           irr;            /* Interrupt request register */
-    unsigned char           imr;            /* Interrupt mask register */
-    unsigned char           spr_bg_prio;    /* Priority to background */
-    unsigned char           spr_mcolor;     /* Sprite multicolor bits */
-    unsigned char           spr_exp_x;      /* Expand sprites in X dir */
-    unsigned char           spr_coll;       /* Sprite/sprite collision reg */
-    unsigned char           spr_bg_coll;    /* Sprite/background collision reg */
-    unsigned char           bordercolor;    /* Border color */
-    union {
-        struct {
-            unsigned char   bgcolor0;       /* Background color 0 */
-            unsigned char   bgcolor1;       /* Background color 1 */
-            unsigned char   bgcolor2;       /* Background color 2 */
-            unsigned char   bgcolor3;       /* Background color 3 */
-        };
-        unsigned char       bgcolor[4];     /* Background colors */
-    };
-    union {
-        struct {
-            unsigned char   spr_mcolor0;    /* Color 0 for multicolor sprites */
-            unsigned char   spr_mcolor1;    /* Color 1 for multicolor sprites */
-        };
-        /* spr_color is already used ... */
-        unsigned char       spr_mcolors[2]; /* Color for multicolor sprites */
-    };
-    union {
-        struct {
-            unsigned char   spr0_color;     /* Color sprite 0 */
-            unsigned char   spr1_color;     /* Color sprite 1 */
-            unsigned char   spr2_color;     /* Color sprite 2 */
-            unsigned char   spr3_color;     /* Color sprite 3 */
-            unsigned char   spr4_color;     /* Color sprite 4 */
-            unsigned char   spr5_color;     /* Color sprite 5 */
-            unsigned char   spr6_color;     /* Color sprite 6 */
-            unsigned char   spr7_color;     /* Color sprite 7 */
-        };
-        unsigned char       spr_color[8];   /* Colors for the sprites */
-    };
-
-    /* The following ones are only valid in the C128: */
-    unsigned char           x_kbd;          /* Additional keyboard lines */
-    unsigned char           clock;          /* Clock switch bit */
-};
-#else
-struct __vic2 {
-    unsigned char           spr0_x;         /* Sprite 0, X coordinate */
-    unsigned char           spr0_y;         /* Sprite 0, Y coordinate */
-    unsigned char           spr1_x;         /* Sprite 1, X coordinate */
-    unsigned char           spr1_y;         /* Sprite 1, Y coordinate */
-    unsigned char           spr2_x;         /* Sprite 2, X coordinate */
-    unsigned char           spr2_y;         /* Sprite 2, Y coordinate */
-    unsigned char           spr3_x;         /* Sprite 3, X coordinate */
-    unsigned char           spr3_y;         /* Sprite 3, Y coordinate */
-    unsigned char           spr4_x;         /* Sprite 4, X coordinate */
-    unsigned char           spr4_y;         /* Sprite 4, Y coordinate */
-    unsigned char           spr5_x;         /* Sprite 5, X coordinate */
-    unsigned char           spr5_y;         /* Sprite 5, Y coordinate */
-    unsigned char           spr6_x;         /* Sprite 6, X coordinate */
-    unsigned char           spr6_y;         /* Sprite 6, Y coordinate */
-    unsigned char           spr7_x;         /* Sprite 7, X coordinate */
-    unsigned char           spr7_y;         /* Sprite 7, Y coordinate */
-    unsigned char           spr_hi_x;       /* High bits of X coordinate */
-    unsigned char           ctrl1;          /* Control register 1 */
-    unsigned char           rasterline;     /* Current raster line */
-    unsigned char           strobe_x;       /* Light pen, X position */
-    unsigned char           strobe_y;       /* Light pen, Y position */
-    unsigned char           spr_ena;        /* Enable sprites */
-    unsigned char           ctrl2;          /* Control register 2 */
-    unsigned char           spr_exp_y;      /* Expand sprites in Y dir */
-    unsigned char           addr;           /* Address of chargen and video ram */
-    unsigned char           irr;            /* Interrupt request register */
-    unsigned char           imr;            /* Interrupt mask register */
-    unsigned char           spr_bg_prio;    /* Priority to background */
-    unsigned char           spr_mcolor;     /* Sprite multicolor bits */
-    unsigned char           spr_exp_x;      /* Expand sprites in X dir */
-    unsigned char           spr_coll;       /* Sprite/sprite collision reg */
-    unsigned char           spr_bg_coll;    /* Sprite/background collision reg */
-    unsigned char           bordercolor;    /* Border color */
-    unsigned char           bgcolor0;       /* Background color 0 */
-    unsigned char           bgcolor1;       /* Background color 1 */
-    unsigned char           bgcolor2;       /* Background color 2 */
-    unsigned char           bgcolor3;       /* Background color 3 */
-    unsigned char           spr_mcolor0;    /* Color 0 for multicolor sprites */
-    unsigned char           spr_mcolor1;    /* Color 1 for multicolor sprites */
-    unsigned char           spr0_color;     /* Color sprite 0 */
-    unsigned char           spr1_color;     /* Color sprite 1 */
-    unsigned char           spr2_color;     /* Color sprite 2 */
-    unsigned char           spr3_color;     /* Color sprite 3 */
-    unsigned char           spr4_color;     /* Color sprite 4 */
-    unsigned char           spr5_color;     /* Color sprite 5 */
-    unsigned char           spr6_color;     /* Color sprite 6 */
-    unsigned char           spr7_color;     /* Color sprite 7 */
-
-    /* The following ones are only valid in the C128: */
-    unsigned char           x_kbd;          /* Additional keyboard lines */
-    unsigned char           clock;          /* Clock switch bit */
-};
-#endif
-
-
-
-/* End of _vic2.h */
-#endif
-
-
-
diff --git a/include/ace.h b/include/ace.h
deleted file mode 100644 (file)
index fba6722..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   ace.h                                   */
-/*                                                                           */
-/*                      ACE system-specific definitions                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2015, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _ACE_H
-#define _ACE_H
-
-
-
-/* Check for errors */
-#if !defined(__ACE__)
-#  error This module may only be used when compiling for the ACE os!
-#endif
-
-
-
-#ifndef _STDDEF_H
-#include <stddef.h>
-#endif
-
-
-
-struct aceDirentBuf {
-    unsigned long   ad_size;            /* Size in bytes */
-    unsigned char   ad_date [8];        /* YY:YY:MM:DD:HH:MM:SS:TW */
-    char            ad_type [4];        /* File type as ASCIIZ string */
-    unsigned char   ad_flags;           /* File flags */
-    unsigned char   ad_usage;           /* More flags */
-    unsigned char   ad_namelen;         /* Length of name */
-    char            ad_name [17];       /* Name itself, ASCIIZ */
-};
-
-int __cdecl__ aceDirOpen (char* dir);
-int __cdecl__ aceDirClose (int handle);
-int __cdecl__ aceDirRead (int handle, struct aceDirentBuf* buf);
-
-/* Type of an ACE key. Key in low byte, shift mask in high byte */
-typedef unsigned int aceKey;
-
-/* #defines for the shift mask returned by aceConGetKey */
-#define aceSH_KEY               0x00FF  /* Mask key itself */
-#define aceSH_MASK              0xFF00  /* Mask shift mask */
-#define aceSH_EXT               0x2000  /* Extended key */
-#define aceSH_CAPS              0x1000  /* Caps lock key */
-#define aceSH_ALT               0x0800  /* Alternate key */
-#define aceSH_CTRL              0x0400  /* Ctrl key */
-#define aceSH_CBM               0x0200  /* Commodore key */
-#define aceSH_SHIFT             0x0100  /* Shift key */
-
-/* #defines for the options in aceConSetOpt/aceConGetOpt */
-#define aceOP_PUTMASK           1       /* Console put mask */
-#define aceOP_CHARCOLOR         2       /* Character color */
-#define aceOP_CHARATTR          3       /* Character attribute */
-#define aceOP_FILLCOLOR         4       /* Fill color */
-#define aceOP_FILLATTR          5       /* Fill attribute */
-#define aceOP_CRSCOLOR          6       /* Cursor color */
-#define aceOP_CRSWRAP           7       /* Force cursor wrap */
-#define aceOP_SHSCROLL          8       /* Shift keys for scrolling */
-#define aceOP_MOUSCALE          9       /* Mouse scaling */
-#define aceOP_RPTDELAY          10      /* Key repeat delay */
-#define aceOP_RPTRATE           11      /* Key repeat rate */
-
-/* Console functions */
-void __cdecl__ aceConWrite (char* buf, size_t count);
-void __cdecl__ aceConPutLit (int c);
-void __cdecl__ aceConPos (unsigned x, unsigned y);
-void __cdecl__ aceConGetPos (unsigned* x, unsigned* y);
-unsigned aceConGetX (void);
-unsigned aceConGetY (void);
-char __cdecl__* aceConInput (char* buf, unsigned initial);
-int aceConStopKey (void);
-aceKey aceConGetKey (void);
-int __cdecl__ aceConKeyAvail (aceKey* key);
-void __cdecl__ aceConKeyMat (char* matrix);
-void __cdecl__ aceConSetOpt (unsigned char opt, unsigned char val);
-int __cdecl__ aceConGetOpt (unsigned char opt);
-
-/* Misc stuff */
-int __cdecl__ aceMiscIoPeek (unsigned addr);
-void __cdecl__ aceMiscIoPoke (unsigned addr, unsigned char val);
-
-
-
-/* End of ace.h */
-#endif
-
-
-
diff --git a/include/apple2.h b/include/apple2.h
deleted file mode 100644 (file)
index a1b094d..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 apple2.h                                  */
-/*                                                                           */
-/*                   Apple ][ system specific definitions                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000  Kevin Ruland, <kevin@rodin.wustl.edu>                           */
-/* (C) 2003  Ullrich von Bassewitz, <uz@cc65.org>                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _APPLE2_H
-#define _APPLE2_H
-
-
-
-/* Check for errors */
-#if !defined(__APPLE2__)
-#  error This module may only be used when compiling for the Apple ][!
-#endif
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Color defines */
-#define COLOR_BLACK  0x00
-#define COLOR_WHITE  0x01
-
-/* TGI color defines */
-#define TGI_COLOR_BLACK      0x00
-#define TGI_COLOR_GREEN      0x01
-#define TGI_COLOR_VIOLET     0x02
-#define TGI_COLOR_WHITE      0x03
-#define TGI_COLOR_BLACK2     0x04
-#define TGI_COLOR_ORANGE     0x05
-#define TGI_COLOR_BLUE       0x06
-#define TGI_COLOR_WHITE2     0x07
-
-#define TGI_COLOR_MAGENTA    TGI_COLOR_BLACK2
-#define TGI_COLOR_DARKBLUE   TGI_COLOR_WHITE2
-#define TGI_COLOR_DARKGREEN  0x08
-#define TGI_COLOR_GRAY       0x09
-#define TGI_COLOR_CYAN       0x0A
-#define TGI_COLOR_BROWN      0x0B
-#define TGI_COLOR_GRAY2      0x0C
-#define TGI_COLOR_PINK       0x0D
-#define TGI_COLOR_YELLOW     0x0E
-#define TGI_COLOR_AQUA       0x0F
-
-/* Characters codes */
-#define CH_ENTER       0x0D
-#define CH_ESC         0x1B
-#define CH_CURS_LEFT   0x08
-#define CH_CURS_RIGHT  0x15
-
-#define CH_ULCORNER  '+'
-#define CH_URCORNER  '+'
-#define CH_LLCORNER  '+'
-#define CH_LRCORNER  '+'
-#define CH_TTEE      '+'
-#define CH_BTEE      '+'
-#define CH_LTEE      '+'
-#define CH_RTEE      '+'
-#define CH_CROSS     '+'
-
-/* Return codes for get_ostype */
-#define APPLE_UNKNOWN  0x00
-#define APPLE_II       0x10  /* Apple ][                    */
-#define APPLE_IIPLUS   0x11  /* Apple ][+                   */
-#define APPLE_IIIEM    0x20  /* Apple /// (emulation)       */
-#define APPLE_IIE      0x30  /* Apple //e                   */
-#define APPLE_IIEENH   0x31  /* Apple //e (enhanced)        */
-#define APPLE_IIECARD  0x40  /* Apple //e Option Card       */
-#define APPLE_IIC      0x50  /* Apple //c                   */
-#define APPLE_IIC35    0x51  /* Apple //c (3.5 ROM)         */
-#define APPLE_IICEXP   0x53  /* Apple //c (Mem. Exp.)       */
-#define APPLE_IICREV   0x54  /* Apple //c (Rev. Mem. Exp.)  */
-#define APPLE_IICPLUS  0x55  /* Apple //c Plus              */
-#define APPLE_IIGS     0x80  /* Apple IIgs                  */
-#define APPLE_IIGS1    0x81  /* Apple IIgs (ROM 1)          */
-#define APPLE_IIGS3    0x83  /* Apple IIgs (ROM 3)          */
-
-extern unsigned char _dos_type;
-/* Valid _dos_type values:
-**
-** AppleDOS 3.3   - 0x00
-** ProDOS 8 1.0.1 - 0x10
-** ProDOS 8 1.0.2 - 0x10
-** ProDOS 8 1.1.1 - 0x11
-** ProDOS 8 1.2   - 0x12
-** ProDOS 8 1.3   - 0x13
-** ProDOS 8 1.4   - 0x14
-** ProDOS 8 1.5   - 0x15
-** ProDOS 8 1.6   - 0x16
-** ProDOS 8 1.7   - 0x17
-** ProDOS 8 1.8   - 0x18
-** ProDOS 8 1.9   - 0x18 (!)
-** ProDOS 8 2.0.1 - 0x21
-** ProDOS 8 2.0.2 - 0x22
-** ProDOS 8 2.0.3 - 0x23
-*/
-
-
-
-/*****************************************************************************/
-/*                                 Variables                                 */
-/*****************************************************************************/
-
-
-
-/* The file stream implementation and the POSIX I/O functions will use the
-** following variables to determine the file type, aux type and creation time
-** stamp to use.
-*/
-extern unsigned char _filetype;  /* Default: 6 */
-extern unsigned int _auxtype;    /* Default: 0 */
-extern struct {
-    struct {
-        unsigned day  :5;
-        unsigned mon  :4;
-        unsigned year :7;
-    }             createdate;    /* Current date: 0 */ 
-    struct {
-        unsigned char min;
-        unsigned char hour;
-    }             createtime;    /* Current time: 0 */ 
-} _datetime;
-
-/* The addresses of the static drivers */
-#if !defined(__APPLE2ENH__)
-extern void a2_auxmem_emd[];
-extern void a2_stdjoy_joy[];     /* Referred to by joy_static_stddrv[]   */
-extern void a2_stdmou_mou[];     /* Referred to by mouse_static_stddrv[] */
-extern void a2_ssc_ser[];
-extern void a2_hi_tgi[];         /* Referred to by tgi_static_stddrv[]   */
-extern void a2_lo_tgi[];
-#endif
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned char get_ostype (void);
-/* Get the machine type. Returns one of the APPLE_xxx codes. */
-
-void rebootafterexit (void);
-/* Reboot machine after program termination has completed. */
-
-#define ser_apple2_slot(num)  ser_ioctl (0, (void*) (num))
-/* Select a slot number from 1 to 7 prior to ser_open.
-** The default slot number is 2.
-*/
-
-#define tgi_apple2_mix(onoff)  tgi_ioctl (0, (void*) (onoff))
-/* If onoff is 1, graphics/text mixed mode is enabled.
-** If onoff is 0, graphics/text mixed mode is disabled.
-*/
-
-/* The following #defines will cause the matching functions calls in conio.h
-** to be overlaid by macros with the same names, saving the function call
-** overhead.
-*/
-#define _textcolor(color)    COLOR_WHITE
-#define _bgcolor(color)      COLOR_BLACK
-#define _bordercolor(color)  COLOR_BLACK
-
-
-
-/* End of apple2.h */
-#endif
diff --git a/include/apple2enh.h b/include/apple2enh.h
deleted file mode 100644 (file)
index cc62f70..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                apple2enh.h                                */
-/*                                                                           */
-/*               enhanced Apple //e system specific definitions              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004  Oliver Schmidt, <ol.sc@web.de>                                  */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _APPLE2ENH_H
-#define _APPLE2ENH_H
-
-
-
-/* Check for errors */
-#if !defined(__APPLE2ENH__)
-#  error This module may only be used when compiling for the enhanced Apple //e!
-#endif
-
-
-
-/* If not already done, include the apple2.h header file */
-#if !defined(_APPLE2_H)
-#  include <apple2.h>
-#endif
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Characters codes */
-#define CH_DEL        0x7F
-#define CH_CURS_UP    0x0B
-#define CH_CURS_DOWN  0x0A
-
-/* These are defined to be OpenApple + NumberKey */
-#define CH_F1   0xB1
-#define CH_F2   0xB2
-#define CH_F3   0xB3
-#define CH_F4   0xB4
-#define CH_F5   0xB5
-#define CH_F6   0xB6
-#define CH_F7   0xB7
-#define CH_F8   0xB8
-#define CH_F9   0xB9
-#define CH_F10  0xB0
-
-/* Styles for textframe */
-#define TEXTFRAME_WIDE  0x00
-#define TEXTFRAME_TALL  0x04
-
-/* Video modes */
-#define VIDEOMODE_40x24  0x0011
-#define VIDEOMODE_80x24  0x0012
-#define VIDEOMODE_40COL  VIDEOMODE_40x24
-#define VIDEOMODE_80COL  VIDEOMODE_80x24
-
-
-
-/*****************************************************************************/
-/*                                 Variables                                 */
-/*****************************************************************************/
-
-
-
-/* The addresses of the static drivers */
-extern void a2e_auxmem_emd[];
-extern void a2e_stdjoy_joy[];     /* Referred to by joy_static_stddrv[]   */
-extern void a2e_stdmou_mou[];     /* Referred to by mouse_static_stddrv[] */
-extern void a2e_ssc_ser[];
-extern void a2e_hi_tgi[];         /* Referred to by tgi_static_stddrv[]   */
-extern void a2e_lo_tgi[];
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void __fastcall__ textframe (unsigned char width, unsigned char height,
-                             unsigned char style);
-/* Output a frame on the text screen with the given width and height
-** starting at the current cursor position and using the given style.
-*/
-
-void __fastcall__ textframexy (unsigned char x, unsigned char y,
-                               unsigned char width, unsigned char height,
-                               unsigned char style);
-/* Same as "gotoxy (x, y); textframe (width, height, style);" */
-
-unsigned __fastcall__ videomode (unsigned mode);
-/* Set the video mode, return the old mode. Call with one of the VIDEOMODE_xx
-** constants.
-*/
-
-
-
-/* End of apple2enh.h */
-#endif
diff --git a/include/assert.h b/include/assert.h
deleted file mode 100644 (file)
index 504964d..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 assert.h                                  */
-/*                                                                           */
-/*                                Diagnostics                                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2015, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _ASSERT_H
-#define _ASSERT_H
-
-
-
-#undef assert
-#ifdef NDEBUG
-#  define assert(expr)
-#else
-extern void __fastcall__ _afailed (const char*, unsigned);
-#  define assert(expr)  ((expr)? (void)0 : _afailed(__FILE__, __LINE__))
-#endif
-
-
-
-/* End of assert.h */
-#endif
-
-
-
diff --git a/include/atari.h b/include/atari.h
deleted file mode 100644 (file)
index 82cd073..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 atari.h                                   */
-/*                                                                           */
-/*                      Atari system specific definitions                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2006 Mark Keates <markk@dendrite.co.uk>                          */
-/*               Freddy Offenga <taf_offenga@yahoo.com>                      */
-/*               Christian Groessler <chris@groessler.org>                   */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _ATARI_H
-#define _ATARI_H
-
-
-
-/* Check for errors */
-#if !defined(__ATARI__)
-#  error This module may only be used when compiling for the Atari!
-#endif
-
-
-
-/* Character codes */
-#define CH_DELCHR       0xFE   /* delete char under the cursor */
-#define CH_ENTER        0x9B
-#define CH_ESC          0x1B
-#define CH_CURS_UP      28
-#define CH_CURS_DOWN    29
-#define CH_CURS_LEFT    30
-#define CH_CURS_RIGHT   31
-
-#define CH_TAB          0x7F   /* tabulator */
-#define CH_EOL          0x9B   /* end-of-line marker */
-#define CH_CLR          0x7D   /* clear screen */
-#define CH_BEL          0xFD   /* bell */
-#define CH_DEL          0x7E   /* back space (delete char to the left) */
-#define CH_RUBOUT       0x7E   /* back space (old, deprecated) */
-#define CH_DELLINE      0x9C   /* delete line */
-#define CH_INSLINE      0x9D   /* insert line */
-
-/* These are defined to be Atari + NumberKey */
-#define CH_F1           177
-#define CH_F2           178
-#define CH_F3           179
-#define CH_F4           180
-#define CH_F5           181
-#define CH_F6           182
-#define CH_F7           183
-#define CH_F8           184
-#define CH_F9           185
-#define CH_F10          176
-
-#define CH_ULCORNER     0x11
-#define CH_URCORNER     0x05
-#define CH_LLCORNER     0x1A
-#define CH_LRCORNER     0x03
-#define CH_TTEE         0x17
-#define CH_BTEE         0x18
-#define CH_LTEE         0x01
-#define CH_RTEE         0x04
-#define CH_CROSS        0x13
-#define CH_HLINE        0x12
-#define CH_VLINE        0x7C
-
-/* color defines */
-
-/* make GTIA color value */
-#define _gtia_mkcolor(hue,lum) (((hue) << 4) | ((lum) << 1))
-
-/* luminance values go from 0 (black) to 7 (white) */
-
-/* hue values */
-#define HUE_GREY        0
-#define HUE_GOLD        1
-#define HUE_GOLDORANGE  2
-#define HUE_REDORANGE   3
-#define HUE_ORANGE      4
-#define HUE_MAGENTA     5
-#define HUE_PURPLE      6
-#define HUE_BLUE        7
-#define HUE_BLUE2       8
-#define HUE_CYAN        9
-#define HUE_BLUEGREEN   10
-#define HUE_BLUEGREEN2  11
-#define HUE_GREEN       12
-#define HUE_YELLOWGREEN 13
-#define HUE_YELLOW      14
-#define HUE_YELLOWRED   15
-
-/* Color defines, similar to c64 colors (untested) */
-/* Note that the conio color implementation is monochrome (bgcolor and textcolor are only placeholders) */
-/* Use the defines with the setcolor() or _atari_xxxcolor() functions */
-#define COLOR_BLACK             _gtia_mkcolor(HUE_GREY,0)
-#define COLOR_WHITE             _gtia_mkcolor(HUE_GREY,7)
-#define COLOR_RED               _gtia_mkcolor(HUE_REDORANGE,1)
-#define COLOR_CYAN              _gtia_mkcolor(HUE_CYAN,3)
-#define COLOR_VIOLET            _gtia_mkcolor(HUE_PURPLE,4)
-#define COLOR_GREEN             _gtia_mkcolor(HUE_GREEN,2)
-#define COLOR_BLUE              _gtia_mkcolor(HUE_BLUE,2)
-#define COLOR_YELLOW            _gtia_mkcolor(HUE_YELLOW,7)
-#define COLOR_ORANGE            _gtia_mkcolor(HUE_ORANGE,5)
-#define COLOR_BROWN             _gtia_mkcolor(HUE_YELLOW,2)
-#define COLOR_LIGHTRED          _gtia_mkcolor(HUE_REDORANGE,6)
-#define COLOR_GRAY1             _gtia_mkcolor(HUE_GREY,2)
-#define COLOR_GRAY2             _gtia_mkcolor(HUE_GREY,3)
-#define COLOR_LIGHTGREEN        _gtia_mkcolor(HUE_GREEN,6)
-#define COLOR_LIGHTBLUE         _gtia_mkcolor(HUE_BLUE,6)
-#define COLOR_GRAY3             _gtia_mkcolor(HUE_GREY,5)
-
-/* TGI color defines */
-#define TGI_COLOR_BLACK         COLOR_BLACK
-#define TGI_COLOR_WHITE         COLOR_WHITE
-#define TGI_COLOR_RED           COLOR_RED
-#define TGI_COLOR_CYAN          COLOR_CYAN
-#define TGI_COLOR_VIOLET        COLOR_VIOLET
-#define TGI_COLOR_GREEN         COLOR_GREEN
-#define TGI_COLOR_BLUE          COLOR_BLUE
-#define TGI_COLOR_YELLOW        COLOR_YELLOW
-#define TGI_COLOR_ORANGE        COLOR_ORANGE
-#define TGI_COLOR_BROWN         COLOR_BROWN
-#define TGI_COLOR_LIGHTRED      COLOR_LIGHTRED
-#define TGI_COLOR_GRAY1         COLOR_GRAY1
-#define TGI_COLOR_GRAY2         COLOR_GRAY2
-#define TGI_COLOR_LIGHTGREEN    COLOR_LIGHTGREEN
-#define TGI_COLOR_LIGHTBLUE     COLOR_LIGHTBLUE
-#define TGI_COLOR_GRAY3         COLOR_GRAY3
-
-/* color register functions */
-extern void __fastcall__ _setcolor     (unsigned char color_reg, unsigned char hue, unsigned char luminace);
-extern void __fastcall__ _setcolor_low (unsigned char color_reg, unsigned char color_value);
-extern unsigned char __fastcall__ _getcolor (unsigned char color_reg);
-
-/* other screen functions */
-extern int  __fastcall__ _graphics (unsigned char mode); /* mode value same as in BASIC */
-extern void __fastcall__ _scroll (signed char numlines);
-                                          /* numlines > 0  scrolls up */
-                                          /* numlines < 0  scrolls down */
-
-/* misc. functions */
-extern unsigned char get_ostype(void);  /* get ROM version */
-extern unsigned char get_tv(void);      /* get TV system */
-extern void _save_vecs(void);           /* save system vectors */
-extern void _rest_vecs(void);           /* restore system vectors */
-extern char *_getdefdev(void);          /* get default floppy device */
-
-/* global variables */
-extern unsigned char _dos_type;         /* the DOS flavour */
-#ifndef __ATARIXL__
-extern void atr130_emd[];
-extern void atrstd_joy[];               /* referred to by joy_static_stddrv[] */
-extern void atrmj8_joy[];
-extern void atrjoy_mou[];
-extern void atrst_mou[];                /* referred to by mouse_static_stddrv[] */
-extern void atrami_mou[];
-extern void atrtrk_mou[];
-extern void atrtt_mou[];
-extern void atrrdev_ser[];
-extern void atr3_tgi[];
-extern void atr4_tgi[];
-extern void atr5_tgi[];
-extern void atr6_tgi[];
-extern void atr7_tgi[];
-extern void atr8_tgi[];                 /* referred to by tgi_static_stddrv[] */
-extern void atr8p2_tgi[];
-extern void atr9_tgi[];
-extern void atr9p2_tgi[];
-extern void atr10_tgi[];
-extern void atr10p2_tgi[];
-extern void atr11_tgi[];
-extern void atr14_tgi[];
-extern void atr15_tgi[];
-extern void atr15p2_tgi[];
-#else
-extern void atrx130_emd[];
-extern void atrxstd_joy[];              /* referred to by joy_static_stddrv[] */
-extern void atrxmj8_joy[];
-extern void atrxjoy_mou[];
-extern void atrxst_mou[];               /* referred to by mouse_static_stddrv[] */
-extern void atrxami_mou[];
-extern void atrxtrk_mou[];
-extern void atrxtt_mou[];
-extern void atrxrdev_ser[];
-extern void atrx3_tgi[];
-extern void atrx4_tgi[];
-extern void atrx5_tgi[];
-extern void atrx6_tgi[];
-extern void atrx7_tgi[];
-extern void atrx8_tgi[];                /* referred to by tgi_static_stddrv[] */
-extern void atrx8p2_tgi[];
-extern void atrx9_tgi[];
-extern void atrx9p2_tgi[];
-extern void atrx10_tgi[];
-extern void atrx10p2_tgi[];
-extern void atrx11_tgi[];
-extern void atrx14_tgi[];
-extern void atrx15_tgi[];
-extern void atrx15p2_tgi[];
-#endif
-
-/* provide old names for backwards compatibility */
-#ifdef ATARI_COMPAT_PRE_2_11
-#define setcolor     _setcolor
-#define setcolor_low _setcolor_low
-#define getcolor     _getcolor
-#define graphics     _graphics
-#define scroll       _scroll
-#define save_vecs    _save_vecs
-#define rest_vecs    _rest_vecs
-#define getdefdev    _getdefdev
-#endif  /* #ifdef ATARI_COMPAT_PRE_2_11 */
-
-/* get_ostype return value defines (for explanation, see ostype.s) */
-/* masks */
-#define AT_OS_TYPE_MAIN  7
-#define AT_OS_TYPE_MINOR (7 << 3)
-/* AT_OS_TYPE_MAIN values */
-#define AT_OS_UNKNOWN  0
-#define AT_OS_400800   1
-#define AT_OS_1200XL   2
-#define AT_OS_XLXE     3
-/* AS_OS_TYPE_MINOR values */
-/* for 400/800 remember this are the ROM versions */
-/* to check whether the hw is PAL or NTSC, use get_tv() */
-#define AT_OS_400800PAL_A  1
-#define AT_OS_400800PAL_B  2
-#define AT_OS_400800NTSC_A 1
-#define AT_OS_400800NTSC_B 2
-#define AT_OS_1200_10  1
-#define AT_OS_1200_11  2
-#define AT_OS_XLXE_1   1
-#define AT_OS_XLXE_2   2
-#define AT_OS_XLXE_3   3
-#define AT_OS_XLXE_4   4
-
-/* get_tv return values */
-#define AT_NTSC     0
-#define AT_PAL      1
-
-/* valid _dos_type values */
-#define ATARIDOS    0
-#define SPARTADOS   1
-#define OSADOS      2
-#define MYDOS       3
-#define XDOS        4
-#define NODOS       255
-
-/* Define hardware */
-#include <_gtia.h>
-#define GTIA_READ  (*(struct __gtia_read*)0xD000)
-#define GTIA_WRITE (*(struct __gtia_write*)0xD000)
-
-#include <_pbi.h>
-
-#include <_pokey.h>
-#define POKEY_READ  (*(struct __pokey_read*)0xD200)
-#define POKEY_WRITE (*(struct __pokey_write*)0xD200)
-
-#include <_pia.h>
-#define PIA (*(struct __pia*)0xD300)
-
-#include <_antic.h>
-#define ANTIC (*(struct __antic*)0xD400)
-
-/* device control block */
-struct __dcb {
-    unsigned char device;     /* device id */
-    unsigned char unit;       /* unit number */
-    unsigned char command;    /* command */
-    unsigned char status;     /* command type / status return */
-    void          *buffer;    /* pointer to buffer */
-    unsigned char timeout;    /* device timeout in seconds */
-    unsigned char unused;
-    unsigned int  xfersize;   /* # of bytes to transfer */
-    unsigned char aux1;       /* 1st command auxiliary byte */
-    unsigned char aux2;       /* 2nd command auxiliary byte */
-};
-#define DCB (*(struct __dcb *)0x300)
-
-/* I/O control block */
-struct __iocb {
-    unsigned char handler;    /* handler index number (0xff free) */
-    unsigned char drive;      /* device number (drive) */
-    unsigned char command;    /* command */
-    unsigned char status;     /* status of last operation */
-    void          *buffer;    /* pointer to buffer */
-    void          *put_byte;  /* pointer to device's PUT BYTE routine */
-    unsigned int  buflen;     /* length of buffer */
-    unsigned char aux1;       /* 1st auxiliary byte */
-    unsigned char aux2;       /* 2nd auxiliary byte */
-    unsigned char aux3;       /* 3rd auxiliary byte */
-    unsigned char aux4;       /* 4th auxiliary byte */
-    unsigned char aux5;       /* 5th auxiliary byte */
-    unsigned char spare;      /* spare byte */
-};
-#define ZIOCB (*(struct __iocb *)0x20)  /* zero page IOCB */
-#define IOCB (*(struct __iocb *)0x340)  /* system IOCB buffers */
-
-/* IOCB Command Codes */
-#define IOCB_OPEN        0x03  /* open */
-#define IOCB_GETREC      0x05  /* get record */
-#define IOCB_GETCHR      0x07  /* get character(s) */
-#define IOCB_PUTREC      0x09  /* put record */
-#define IOCB_PUTCHR      0x0B  /* put character(s) */
-#define IOCB_CLOSE       0x0C  /* close */
-#define IOCB_STATIS      0x0D  /* status */
-#define IOCB_SPECIL      0x0E  /* special */
-#define IOCB_DRAWLN      0x11  /* draw line */
-#define IOCB_FILLIN      0x12  /* draw line with right fill */
-#define IOCB_RENAME      0x20  /* rename disk file */
-#define IOCB_DELETE      0x21  /* delete disk file */
-#define IOCB_LOCKFL      0x23  /* lock file (set to read-only) */
-#define IOCB_UNLOCK      0x24  /* unlock file */
-#define IOCB_POINT       0x25  /* point sector */
-#define IOCB_NOTE        0x26  /* note sector */
-#define IOCB_GETFL       0x27  /* get file length */
-#define IOCB_CHDIR_MYDOS 0x29  /* change directory (MyDOS) */
-#define IOCB_MKDIR       0x2A  /* make directory (MyDOS/SpartaDOS) */
-#define IOCB_RMDIR       0x2B  /* remove directory (SpartaDOS) */
-#define IOCB_CHDIR_SPDOS 0x2C  /* change directory (SpartaDOS) */
-#define IOCB_GETCWD      0x30  /* get current directory (MyDOS/SpartaDOS) */
-#define IOCB_FORMAT      0xFE  /* format */
-
-/* End of atari.h */
-#endif /* #ifndef _ATARI_H */
diff --git a/include/atari5200.h b/include/atari5200.h
deleted file mode 100644 (file)
index 4bd5bc0..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                               atari5200.h                                 */
-/*                                                                           */
-/*                   Atari 5200 system specific definitions                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2014      Christian Groessler <chris@groessler.org>                   */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _ATARI5200_H
-#define _ATARI5200_H
-
-
-
-/* Check for errors */
-#if !defined(__ATARI5200__)
-#  error This module may only be used when compiling for the Atari 5200!
-#endif
-
-/* no support for dynamically loadable drivers */
-#define DYN_DRV 0
-
-/* the addresses of the static drivers */
-extern void atr5200std_joy[];        /* referred to by joy_static_stddrv[] */
-
-/* make GTIA color value */
-#define _gtia_mkcolor(hue,lum) (((hue) << 4) | ((lum) << 1))
-
-/* luminance values go from 0 (black) to 7 (white) */
-
-/* hue values */
-#define HUE_GREY        0
-#define HUE_GOLD        1
-#define HUE_GOLDORANGE  2
-#define HUE_REDORANGE   3
-#define HUE_ORANGE      4
-#define HUE_MAGENTA     5
-#define HUE_PURPLE      6
-#define HUE_BLUE        7
-#define HUE_BLUE2       8
-#define HUE_CYAN        9
-#define HUE_BLUEGREEN   10
-#define HUE_BLUEGREEN2  11
-#define HUE_GREEN       12
-#define HUE_YELLOWGREEN 13
-#define HUE_YELLOW      14
-#define HUE_YELLOWRED   15
-
-/* Color defines, similar to c64 colors (untested) */
-#define COLOR_BLACK             _gtia_mkcolor(HUE_GREY,0)
-#define COLOR_WHITE             _gtia_mkcolor(HUE_GREY,7)
-#define COLOR_RED               _gtia_mkcolor(HUE_REDORANGE,1)
-#define COLOR_CYAN              _gtia_mkcolor(HUE_CYAN,3)
-#define COLOR_VIOLET            _gtia_mkcolor(HUE_PURPLE,4)
-#define COLOR_GREEN             _gtia_mkcolor(HUE_GREEN,2)
-#define COLOR_BLUE              _gtia_mkcolor(HUE_BLUE,2)
-#define COLOR_YELLOW            _gtia_mkcolor(HUE_YELLOW,7)
-#define COLOR_ORANGE            _gtia_mkcolor(HUE_ORANGE,5)
-#define COLOR_BROWN             _gtia_mkcolor(HUE_YELLOW,2)
-#define COLOR_LIGHTRED          _gtia_mkcolor(HUE_REDORANGE,6)
-#define COLOR_GRAY1             _gtia_mkcolor(HUE_GREY,2)
-#define COLOR_GRAY2             _gtia_mkcolor(HUE_GREY,3)
-#define COLOR_LIGHTGREEN        _gtia_mkcolor(HUE_GREEN,6)
-#define COLOR_LIGHTBLUE         _gtia_mkcolor(HUE_BLUE,6)
-#define COLOR_GRAY3             _gtia_mkcolor(HUE_GREY,5)
-
-/* get_tv return values */
-#define AT_NTSC     0
-#define AT_PAL      1
-
-/* Define hardware */
-#include <_gtia.h>
-#define GTIA_READ  (*(struct __gtia_read*)0xC000)
-#define GTIA_WRITE (*(struct __gtia_write*)0xC000)
-
-#include <_pokey.h>
-#define POKEY_READ  (*(struct __pokey_read*)0xE800)
-#define POKEY_WRITE (*(struct __pokey_write*)0xE800)
-
-#include <_antic.h>
-#define ANTIC (*(struct __antic*)0xD400)
-
-/* End of atari5200.h */
-#endif /* #ifndef _ATARI5200_H */
diff --git a/include/atmos.h b/include/atmos.h
deleted file mode 100644 (file)
index 72388c9..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 atmos.h                                   */
-/*                                                                           */
-/*                   Oric Atmos system-specific definitions                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002       Debrune Jérome, <jede@oric.org>                            */
-/* (C) 2003-2013  Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _ATMOS_H
-#define _ATMOS_H
-
-
-
-/* Check for errors */
-#if !defined(__ATMOS__)
-#  error This module may only be used when compiling for the Oric Atmos!
-#endif
-
-
-
-/* Color defines */
-#define COLOR_BLACK     0x00
-#define COLOR_RED       0x01
-#define COLOR_GREEN     0x02
-#define COLOR_YELLOW    0x03
-#define COLOR_BLUE      0x04
-#define COLOR_MAGENTA   0x05
-#define COLOR_CYAN      0x06
-#define COLOR_WHITE     0x07
-
-/* TGI color defines */
-/* White and red are swapped, so that the pallete
-** driver is compatible with black-and-white drivers.
-*/
-#define TGI_COLOR_BLACK         COLOR_BLACK
-#define TGI_COLOR_WHITE         1
-#define TGI_COLOR_GREEN         COLOR_GREEN
-#define TGI_COLOR_YELLOW        COLOR_YELLOW
-#define TGI_COLOR_BLUE          COLOR_BLUE
-#define TGI_COLOR_MAGENTA       COLOR_MAGENTA
-#define TGI_COLOR_CYAN          COLOR_CYAN
-#define TGI_COLOR_RED           7
-
-
-
-/* Define hardware */
-#include <_6522.h>
-#define VIA     (*(struct __6522*)0x300)
-
-
-
-/* These are defined to be FUNCT + NumberKey */
-#define CH_F1           0xB1
-#define CH_F2           0xB2
-#define CH_F3           0xB3
-#define CH_F4           0xB4
-#define CH_F5           0xB5
-#define CH_F6           0xB6
-#define CH_F7           0xB7
-#define CH_F8           0xB8
-#define CH_F9           0xB9
-#define CH_F10          0xB0
-
-
-
-/* Character codes */
-#define CH_ULCORNER     '+'
-#define CH_URCORNER     '+'
-#define CH_LLCORNER     '+'
-#define CH_LRCORNER     '+'
-#define CH_TTEE         '+'
-#define CH_BTEE         '+'
-#define CH_LTEE         '+'
-#define CH_RTEE         '+'
-#define CH_CROSS        '+'
-#define CH_CURS_UP       11
-#define CH_CURS_DOWN     10
-#define CH_CURS_LEFT      8
-#define CH_CURS_RIGHT     9
-#define CH_DEL          127
-#define CH_ENTER         13
-#define CH_STOP           3
-#define CH_LIRA          95
-#define CH_ESC           27
-
-
-
-/* No support for dynamically loadable drivers */
-#define DYN_DRV         0
-
-
-
-/* The addresses of the static drivers */
-extern void atmos_pase_joy[];           /* Referred to by joy_static_stddrv[] */
-extern void atmos_acia_ser[];
-extern void atmos_228_200_3_tgi[];
-extern void atmos_240_200_2_tgi[];      /* Referred to by tgi_static_stddrv[] */
-
-
-
-/*****************************************************************************/
-/*                                 Functions                                 */
-/*****************************************************************************/
-
-
-
-void __fastcall__ atmos_load(const char* name);
-/* Load Atmos tape. */
-
-void __fastcall__ atmos_save(const char* name, const void* start, const void* end);
-/* Save Atmos tape. */
-
-void atmos_explode (void);
-/* Bomb sound effect */
-
-void atmos_ping (void);
-/* Bell or ricochet sound effect */
-
-void atmos_shoot (void);
-/* Pistol sound effect */
-
-void atmos_tick (void);
-/* High-pitch click */
-
-void atmos_tock (void);
-/* Low-pitch click */
-
-void atmos_zap (void);
-/* Raygun sound effect */
-
-
-
-/* End of atmos.h */
-#endif
diff --git a/include/c128.h b/include/c128.h
deleted file mode 100644 (file)
index 565fbc9..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  c128.h                                   */
-/*                                                                           */
-/*                     C128 system specific definitions                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _C128_H
-#define _C128_H
-
-
-
-/* Check for errors */
-#if !defined(__C128__)
-#  error This module may only be used when compiling for the C128!
-#endif
-
-
-
-/* Additional key defines */
-#define CH_F1                   133
-#define CH_F2                   137
-#define CH_F3                   134
-#define CH_F4                   138
-#define CH_F5                   135
-#define CH_F6                   139
-#define CH_F7                   136
-#define CH_F8                   140
-
-/* Color defines */
-#define COLOR_BLACK             0x00
-#define COLOR_WHITE             0x01
-#define COLOR_RED               0x02
-#define COLOR_CYAN              0x03
-#define COLOR_VIOLET            0x04
-#define COLOR_GREEN             0x05
-#define COLOR_BLUE              0x06
-#define COLOR_YELLOW            0x07
-#define COLOR_ORANGE            0x08
-#define COLOR_BROWN             0x09
-#define COLOR_LIGHTRED          0x0A
-#define COLOR_GRAY1             0x0B
-#define COLOR_GRAY2             0x0C
-#define COLOR_LIGHTGREEN        0x0D
-#define COLOR_LIGHTBLUE         0x0E
-#define COLOR_GRAY3             0x0F
-
-/* TGI color defines */
-#define TGI_COLOR_BLACK         COLOR_BLACK
-#define TGI_COLOR_WHITE         COLOR_WHITE
-#define TGI_COLOR_RED           COLOR_RED
-#define TGI_COLOR_CYAN          COLOR_CYAN
-#define TGI_COLOR_VIOLET        COLOR_VIOLET
-#define TGI_COLOR_GREEN         COLOR_GREEN
-#define TGI_COLOR_BLUE          COLOR_BLUE
-#define TGI_COLOR_YELLOW        COLOR_YELLOW
-#define TGI_COLOR_ORANGE        COLOR_ORANGE
-#define TGI_COLOR_BROWN         COLOR_BROWN
-#define TGI_COLOR_LIGHTRED      COLOR_LIGHTRED
-#define TGI_COLOR_GRAY1         COLOR_GRAY1
-#define TGI_COLOR_GRAY2         COLOR_GRAY2
-#define TGI_COLOR_LIGHTGREEN    COLOR_LIGHTGREEN
-#define TGI_COLOR_LIGHTBLUE     COLOR_LIGHTBLUE
-#define TGI_COLOR_GRAY3         COLOR_GRAY3
-
-/* Video mode defines */
-#define VIDEOMODE_40x25         0x00
-#define VIDEOMODE_80x25         0x80
-#define VIDEOMODE_40COL         VIDEOMODE_40x25
-#define VIDEOMODE_80COL         VIDEOMODE_80x25
-
-
-
-/* Define hardware */
-#include <_vic2.h>
-#define VIC     (*(struct __vic2*)0xD000)
-
-#include <_sid.h>
-#define SID     (*(struct __sid*)0xD400)
-
-#include <_vdc.h>
-#define VDC     (*(struct __vdc*)0xD600)
-
-#include <_6526.h>
-#define CIA1    (*(struct __6526*)0xDC00)
-#define CIA2    (*(struct __6526*)0xDD00)
-
-
-
-/* Define special memory areas */
-#define COLOR_RAM       ((unsigned char*)0xD800)
-
-
-
-/* The addresses of the static drivers */
-extern void c128_georam_emd[];
-extern void c128_ram_emd[];
-extern void c128_ram2_emd[];
-extern void c128_ramcart_emd[];
-extern void c128_reu_emd[];
-extern void c128_vdc_emd[];
-extern void c128_ptvjoy_joy[];
-extern void c128_stdjoy_joy[];  /* Referred to by joy_static_stddrv[] */
-extern void c128_1351_mou[];    /* Referred to by mouse_static_stddrv[] */
-extern void c128_joy_mou[];
-extern void c128_inkwell_mou[];
-extern void c128_pot_mou[];
-extern void c128_swlink_ser[];
-extern void c128_vdc_tgi[];     /* Referred to by tgi_static_stddrv[] */
-extern void c128_vdc2_tgi[];
-
-
-
-unsigned __fastcall__ videomode (unsigned Mode);
-/* Set the video mode, return the old mode. Call with one of the VIDEOMODE_xx
-** constants.
-*/
-
-void toggle_videomode (void);
-/* Toggle the video mode between 40 and 80 chars (calls SWAPPER).
-** THIS FUNCTION IS DEPRECATED, please use videomode instead!
-*/
-
-void c64mode (void);
-/* Switch the C128 into C64 mode. Note: This function will not return! */
-
-void fast (void);
-/* Switch the CPU into 2MHz mode. Note: This will disable video when in
-** 40 column mode.
-*/
-
-void slow (void);
-/* Switch the CPU into 1MHz mode. */
-
-
-
-/* End of c128.h */
-#endif
diff --git a/include/c16.h b/include/c16.h
deleted file mode 100644 (file)
index d49ca6f..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   c16.h                                   */
-/*                                                                           */
-/*                      C16 system specific definitions                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _C16_H
-#define _C16_H
-
-
-
-/* Check for errors */
-#if !defined(__C16__)
-#  error This module may only be used when compiling for the C16!
-#endif
-
-
-
-/* Include the base header file for the 264 series. include file.
- */
-#ifndef _CBM264_H
-#include <cbm264.h>
-#endif
-
-
-
-/* The addresses of the static drivers */
-extern void c16_ram_emd[];
-extern void c16_stdjoy_joy[];  /* Referred to by joy_static_stddrv[] */
-
-
-
-/* End of c16.h */
-#endif
diff --git a/include/c64.h b/include/c64.h
deleted file mode 100644 (file)
index adf3840..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   c64.h                                   */
-/*                                                                           */
-/*                      C64 system-specific definitions                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2013 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _C64_H
-#define _C64_H
-
-
-
-/* Check for errors */
-#if !defined(__C64__)
-#  error This module may only be used when compiling for the C64!
-#endif
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Additional key defines */
-#define CH_F1                   133
-#define CH_F2                   137
-#define CH_F3                   134
-#define CH_F4                   138
-#define CH_F5                   135
-#define CH_F6                   139
-#define CH_F7                   136
-#define CH_F8                   140
-
-/* Color defines */
-#define COLOR_BLACK             0x00
-#define COLOR_WHITE             0x01
-#define COLOR_RED               0x02
-#define COLOR_CYAN              0x03
-#define COLOR_VIOLET            0x04
-#define COLOR_PURPLE            COLOR_VIOLET
-#define COLOR_GREEN             0x05
-#define COLOR_BLUE              0x06
-#define COLOR_YELLOW            0x07
-#define COLOR_ORANGE            0x08
-#define COLOR_BROWN             0x09
-#define COLOR_LIGHTRED          0x0A
-#define COLOR_GRAY1             0x0B
-#define COLOR_GRAY2             0x0C
-#define COLOR_LIGHTGREEN        0x0D
-#define COLOR_LIGHTBLUE         0x0E
-#define COLOR_GRAY3             0x0F
-
-/* TGI color defines */
-#define TGI_COLOR_BLACK         COLOR_BLACK
-#define TGI_COLOR_WHITE         COLOR_WHITE
-#define TGI_COLOR_RED           COLOR_RED
-#define TGI_COLOR_CYAN          COLOR_CYAN
-#define TGI_COLOR_VIOLET        COLOR_VIOLET
-#define TGI_COLOR_PURPLE        COLOR_PURPLE
-#define TGI_COLOR_GREEN         COLOR_GREEN
-#define TGI_COLOR_BLUE          COLOR_BLUE
-#define TGI_COLOR_YELLOW        COLOR_YELLOW
-#define TGI_COLOR_ORANGE        COLOR_ORANGE
-#define TGI_COLOR_BROWN         COLOR_BROWN
-#define TGI_COLOR_LIGHTRED      COLOR_LIGHTRED
-#define TGI_COLOR_GRAY1         COLOR_GRAY1
-#define TGI_COLOR_GRAY2         COLOR_GRAY2
-#define TGI_COLOR_LIGHTGREEN    COLOR_LIGHTGREEN
-#define TGI_COLOR_LIGHTBLUE     COLOR_LIGHTBLUE
-#define TGI_COLOR_GRAY3         COLOR_GRAY3
-
-/* Define hardware */
-#include <_vic2.h>
-#define VIC     (*(struct __vic2*)0xD000)
-
-#include <_sid.h>
-#define SID     (*(struct __sid*)0xD400)
-
-#include <_6526.h>
-#define CIA1    (*(struct __6526*)0xDC00)
-#define CIA2    (*(struct __6526*)0xDD00)
-
-/* Define special memory areas */
-#define COLOR_RAM       ((unsigned char*)0xD800)
-
-/* Return codes for get_ostype */
-#define C64_OS_US       0xAA            /* US version */
-#define C64_OS_PET64    0x64            /* PET 64 */
-#define C64_OS_SX64     0x43            /* SX-64 */
-#define C64_EU_NEW      0x03
-#define C64_EU_OLD      0x00
-#define C64_DTV         0xFF            /* C64 DTV */
-
-
-
-/*****************************************************************************/
-/*                                 Variables                                 */
-/*****************************************************************************/
-
-
-
-/* The addresses of the static drivers */
-extern void c64_c256k_emd[];
-extern void c64_dqbb_emd[];
-extern void c64_georam_emd[];
-extern void c64_isepic_emd[];
-extern void c64_ram_emd[];
-extern void c64_ramcart_emd[];
-extern void c64_reu_emd[];
-extern void c64_vdc_emd[];
-extern void dtv_himem_emd[];
-extern void c64_hitjoy_joy[];
-extern void c64_numpad_joy[];
-extern void c64_ptvjoy_joy[];
-extern void c64_stdjoy_joy[];           /* Referred to by joy_static_stddrv[] */
-extern void c64_1351_mou[];             /* Referred to by mouse_static_stddrv[] */
-extern void c64_joy_mou[];
-extern void c64_inkwell_mou[];
-extern void c64_pot_mou[];
-extern void c64_swlink_ser[];
-extern void c64_hi_tgi[];               /* Referred to by tgi_static_stddrv[] */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned char get_ostype (void);
-/* Get the ROM version. Returns one of the C64_OS_xxx codes. */
-
-
-
-/* End of c64.h */
-#endif
diff --git a/include/cbm.h b/include/cbm.h
deleted file mode 100644 (file)
index 701924d..0000000
+++ /dev/null
@@ -1,287 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   cbm.h                                   */
-/*                                                                           */
-/*                      CBM system-specific definitions                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2015, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _CBM_H
-#define _CBM_H
-
-
-
-/* Check for errors */
-#if !defined(__CBM__)
-#  error This module may be used only when compiling for CBM machines!
-#endif
-
-
-
-/* We need NULL. */
-
-#if !defined(_STDDEF_H)
-#  include <stddef.h>
-#endif
-
-/* Load the system-specific files here, if needed. */
-#if   defined(__C64__)    && !defined(_C64_H)
-#  include <c64.h>
-#elif defined(__VIC20__)  && !defined(_VIC20_H)
-#  include <vic20.h>
-#elif defined(__C128__)   && !defined(_C128_H)
-#  include <c128.h>
-#elif defined(__PLUS4__)  && !defined(_PLUS4_H)
-#  include <plus4.h>
-#elif defined(__C16__)    && !defined(_C16_H)
-#  include <c16.h>
-#elif defined(__CBM510__) && !defined(_CBM510_H)
-#  include <cbm510.h>
-#elif defined(__CBM610__) && !defined(_CBM610_H)
-#  include <cbm610.h>
-#elif defined(__PET__)    && !defined(_PET_H)
-#  include <pet.h>
-#endif
-
-/* Include definitions for CBM file types */
-#include <cbm_filetype.h>
-
-
-
-/*****************************************************************************/
-/*                                 Variables                                 */
-/*****************************************************************************/
-
-
-
-/* The file stream implementation and the POSIX I/O functions will
-** use the following variable to determine the file type to use.
-*/
-extern char _filetype;          /* Defaults to 's' */
-
-
-
-/*****************************************************************************/
-/*                       Character-codes (CBM charset)                       */
-/*****************************************************************************/
-
-
-
-#define CH_HLINE        192
-#define CH_VLINE        221
-#define CH_ULCORNER     176
-#define CH_URCORNER     174
-#define CH_LLCORNER     173
-#define CH_LRCORNER     189
-#define CH_TTEE         178
-#define CH_BTEE         177
-#define CH_LTEE         171
-#define CH_RTEE         179
-#define CH_CROSS        219
-#define CH_CURS_UP      145
-#define CH_CURS_DOWN     17
-#define CH_CURS_LEFT    157
-#define CH_CURS_RIGHT    29
-#define CH_PI           222
-#define CH_HOME          19
-#define CH_DEL           20
-#define CH_INS          148
-#define CH_ENTER         13
-#define CH_STOP           3
-#define CH_LIRA          92
-#define CH_ESC           27
-
-
-
-/*****************************************************************************/
-/*                Definitions for directory reading functions                */
-/*****************************************************************************/
-
-
-
-/* CBM FILE ACCESS */
-#define CBM_A_RO    1           /* Read only   */
-#define CBM_A_WO    2           /* Write only  */
-#define CBM_A_RW    3           /* Read, Write */
-
-struct cbm_dirent {
-             char name[17];     /* File name in PetSCII, limited to 16 chars */
-    unsigned int  size;         /* Size, in 254-/256-byte blocks */
-    unsigned char type;
-    unsigned char access;
-};
-
-
-
-/*****************************************************************************/
-/*                               Machine info                                */
-/*****************************************************************************/
-
-
-
-#define TV_NTSC         0
-#define TV_PAL          1
-#define TV_OTHER        2
-
-unsigned char get_tv (void);
-/* Return the video mode the machine is using. */
-
-
-
-/*****************************************************************************/
-/*                           CBM kernal functions                            */
-/*****************************************************************************/
-
-
-
-/* Constants to use with cbm_open() for openning a file for reading or
-** writing without the need to append ",r" or ",w" to the filename.
-**
-** e.g., cbm_open(2, 8, CBM_READ, "0:data,s");
-*/
-#define CBM_READ        0       /* default is ",p" */
-#define CBM_WRITE       1       /* ditto */
-#define CBM_SEQ         2       /* default is ",r" -- or ",s" when writing */
-
-/* Kernal-level functions */
-unsigned char cbm_k_acptr (void);
-unsigned char cbm_k_basin (void);
-void __fastcall__ cbm_k_bsout (unsigned char C);
-unsigned char __fastcall__ cbm_k_chkin (unsigned char FN);
-void __fastcall__ cbm_k_ciout (unsigned char C);
-unsigned char __fastcall__ cbm_k_ckout (unsigned char FN);
-void cbm_k_clall (void);
-void __fastcall__ cbm_k_close (unsigned char FN);
-void cbm_k_clrch (void);
-unsigned char cbm_k_getin (void);
-unsigned cbm_k_iobase (void);
-void __fastcall__ cbm_k_listen (unsigned char dev);
-unsigned int __fastcall__ cbm_k_load(unsigned char flag, unsigned addr);
-unsigned char cbm_k_open (void);
-unsigned char cbm_k_readst (void);
-unsigned char __fastcall__ cbm_k_save(unsigned int start, unsigned int end);
-void __fastcall__ cbm_k_setlfs (unsigned char LFN, unsigned char DEV,
-                                unsigned char SA);
-void __fastcall__ cbm_k_setnam (const char* Name);
-void __fastcall__ cbm_k_talk (unsigned char dev);
-void cbm_k_unlsn (void);
-
-
-
-/*****************************************************************************/
-/*                       BASIC-like file I/O functions                       */
-/*****************************************************************************/
-
-
-
-/* The cbm_* I/O functions below set _oserror (see errno.h),
-** in case of an error.
-**
-** error-code   BASIC error
-** ----------   -----------
-**       1  =   too many files
-**       2  =   file open
-**       3  =   file not open
-**       4  =   file not found
-**       5  =   device not present
-**       6  =   not input-file
-**       7  =   not output-file
-**       8  =   missing file-name
-**       9  =   illegal device-number
-**
-**      10  =   STOP-key pushed
-**      11  =   general I/O-error
-*/
-
-
-
-unsigned int __fastcall__ cbm_load (const char* name, unsigned char device, void* data);
-/* Loads file "name", from given device, to given address -- or, to the load
-** address of the file if "data" is the null pointer (like load"name",8,1
-** in BASIC).
-** Returns number of bytes that were loaded if loading was successful;
-** otherwise 0, "_oserror" contains an error-code, then (see table above).
-*/
-
-unsigned char __fastcall__ cbm_save (const char* name, unsigned char device,
-                                     const void* addr, unsigned int size);
-/* Saves "size" bytes, starting at "addr", to a file.
-** Returns 0 if saving was successful, otherwise an error-code (see table
-** above).
-*/
-
-unsigned char __fastcall__ cbm_open (unsigned char lfn, unsigned char device,
-                                     unsigned char sec_addr, const char* name);
-/* Opens a file. Works just like the BASIC command.
-** Returns 0 if openning was successful, otherwise an error-code (see table
-** above).
-*/
-
-void __fastcall__ cbm_close (unsigned char lfn);
-/* Closes a file */
-
-int __fastcall__ cbm_read (unsigned char lfn, void* buffer, unsigned int size);
-/* Reads up to "size" bytes from a file into "buffer".
-** Returns the number of actually-read bytes, 0 if there are no bytes left.
-** -1 in case of an error; then, _oserror contains an error-code (see table
-** above).  (Remember:  0 means end-of-file; -1 means error.)
-*/
-
-int __fastcall__ cbm_write (unsigned char lfn, const void* buffer,
-                            unsigned int size);
-/* Writes up to "size" bytes from "buffer" to a file.
-** Returns the number of actually-written bytes, or -1 in case of an error;
-** _oserror contains an error-code, then (see above table).
-*/
-
-unsigned char cbm_opendir (unsigned char lfn, unsigned char device, ...);
-/* Opens directory listing. Returns 0 if opening directory was successful;
-** otherwise, an error-code corresponding to cbm_open(). As an optional
-** argument, the name of the directory may be passed to the function. If
-** no explicit name is specified, "$" is used.
-*/
-
-unsigned char __fastcall__ cbm_readdir (unsigned char lfn,
-                                        struct cbm_dirent* l_dirent);
-/* Reads one directory line into cbm_dirent structure.
-** Returns 0 if reading directory-line was successful.
-** Returns non-zero if reading directory failed, or no more file-names to read.
-** Returns 2 on last line.  Then, l_dirent->size = the number of "blocks free."
-*/
-
-void __fastcall__ cbm_closedir (unsigned char lfn);
-/* Closes directory by cbm_close(lfn) */
-
-
-
-/* End of cbm.h */
-#endif
-
-
diff --git a/include/cbm264.h b/include/cbm264.h
deleted file mode 100644 (file)
index ff7468d..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   cbm264.h                                */
-/*                                                                           */
-/*         System specific definitions for the C16, C116 and Plus/4          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _CBM264_H
-#define _CBM264_H
-
-
-
-/* Check for errors */
-#if !defined(__C16__)
-#  error This module may only be used when compiling for the Plus/4 or C16!
-#endif
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Additional key defines */
-#define CH_F1                   133
-#define CH_F2                   137
-#define CH_F3                   134
-#define CH_F4                   138
-#define CH_F5                   135
-#define CH_F6                   139
-#define CH_F7                   136
-#define CH_F8                   140
-
-
-
-/* Color attributes */
-#define CATTR_LUMA0             0x00
-#define CATTR_LUMA1             0x10
-#define CATTR_LUMA2             0x20
-#define CATTR_LUMA3             0x30
-#define CATTR_LUMA4             0x40
-#define CATTR_LUMA5             0x50
-#define CATTR_LUMA6             0x60
-#define CATTR_LUMA7             0x70
-#define CATTR_BLINK             0x80
-
-/* Base colors */
-#define BCOLOR_BLACK            0x00
-#define BCOLOR_WHITE            0x01
-#define BCOLOR_RED              0x02
-#define BCOLOR_CYAN             0x03
-#define BCOLOR_VIOLET           0x04
-#define BCOLOR_PURPLE           BCOLOR_VIOLET
-#define BCOLOR_GREEN            0x05
-#define BCOLOR_BLUE             0x06
-#define BCOLOR_YELLOW           0x07
-#define BCOLOR_ORANGE           0x08
-#define BCOLOR_BROWN            0x09
-#define BCOLOR_LEMON            0x0A    /* What's that color? */
-#define BCOLOR_LIGHTVIOLET      0x0B
-#define BCOLOR_BLUEGREEN        0x0C
-#define BCOLOR_LIGHTBLUE        0x0D
-#define BCOLOR_DARKBLUE         0x0E
-#define BCOLOR_LIGHTGREEN       0x0F
-
-/* Now try to mix up a C64/C128 compatible palette */
-#define COLOR_BLACK             (BCOLOR_BLACK)
-#define COLOR_WHITE             (BCOLOR_WHITE | CATTR_LUMA7)
-#define COLOR_RED               (BCOLOR_RED | CATTR_LUMA4)
-#define COLOR_CYAN              (BCOLOR_CYAN | CATTR_LUMA7)
-#define COLOR_VIOLET            (BCOLOR_VIOLET | CATTR_LUMA7)
-#define COLOR_PURPLE            COLOR_VIOLET
-#define COLOR_GREEN             (BCOLOR_GREEN | CATTR_LUMA7)
-#define COLOR_BLUE              (BCOLOR_BLUE | CATTR_LUMA7)
-#define COLOR_YELLOW            (BCOLOR_YELLOW | CATTR_LUMA7)
-#define COLOR_ORANGE            (BCOLOR_ORANGE | CATTR_LUMA7)
-#define COLOR_BROWN             (BCOLOR_BROWN | CATTR_LUMA7)
-#define COLOR_LIGHTRED          (BCOLOR_RED | CATTR_LUMA7)
-#define COLOR_GRAY1             (BCOLOR_WHITE | CATTR_LUMA1)
-#define COLOR_GRAY2             (BCOLOR_WHITE | CATTR_LUMA3)
-#define COLOR_LIGHTGREEN        (BCOLOR_LIGHTGREEN | CATTR_LUMA7)
-#define COLOR_LIGHTBLUE         (BCOLOR_LIGHTBLUE | CATTR_LUMA7)
-#define COLOR_GRAY3             (BCOLOR_WHITE | CATTR_LUMA5)
-
-/* Define hardware */
-#include <_ted.h>
-#define TED             (*(struct __ted*)0xFF00)
-
-/* Define special memory areas */
-#define COLOR_RAM       ((unsigned char*)0x0800)
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-/* End of cbm264.h */
-#endif
-
-
-
-
diff --git a/include/cbm510.h b/include/cbm510.h
deleted file mode 100644 (file)
index 25ea075..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 cbm510.h                                  */
-/*                                                                           */
-/*             System-specific definitions for the CBM5x0 / P500             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _CBM510_H
-#define _CBM510_H
-
-
-
-/* Check for errors */
-#if !defined(__CBM510__)
-#  error This module may only be used when compiling for the CBM 510!
-#endif
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Additional key defines */
-#define CH_F1                   224
-#define CH_F2                   225
-#define CH_F3                   226
-#define CH_F4                   227
-#define CH_F5                   228
-#define CH_F6                   229
-#define CH_F7                   230
-#define CH_F8                   231
-#define CH_F9                   232
-#define CH_F10                  233
-#define CH_F11                  234
-#define CH_F12                  235
-#define CH_F13                  236
-#define CH_F14                  237
-#define CH_F15                  238
-#define CH_F16                  239
-#define CH_F17                  240
-#define CH_F18                  241
-#define CH_F19                  242
-#define CH_F20                  243
-
-/* Color defines */
-#define COLOR_BLACK             0x00
-#define COLOR_WHITE             0x01
-#define COLOR_RED               0x02
-#define COLOR_CYAN              0x03
-#define COLOR_VIOLET            0x04
-#define COLOR_PURPLE            COLOR_VIOLET
-#define COLOR_GREEN             0x05
-#define COLOR_BLUE              0x06
-#define COLOR_YELLOW            0x07
-#define COLOR_ORANGE            0x08
-#define COLOR_BROWN             0x09
-#define COLOR_LIGHTRED          0x0A
-#define COLOR_GRAY1             0x0B
-#define COLOR_GRAY2             0x0C
-#define COLOR_LIGHTGREEN        0x0D
-#define COLOR_LIGHTBLUE         0x0E
-#define COLOR_GRAY3             0x0F
-
-/* Define hardware */
-#include <_vic2.h>
-#define VIC     (*(struct __vic2*)0xD800)
-
-#include <_sid.h>
-#define SID     (*(struct __sid*)0xDA00)
-
-#include <_6526.h>
-#define CIA2    (*(struct __6526*)0xDC00)
-
-#include <_6551.h>
-#define ACIA    (*(struct __6551*)0xDD00)
-
-#include <_6525.h>
-#define TPI1    (*(struct __6525*)0xDE00)
-#define TPI2    (*(struct __6525*)0xDF00)
-
-
-
-/*****************************************************************************/
-/*                                 Variables                                 */
-/*****************************************************************************/
-
-
-
-/* The addresses of the static drivers */
-extern void cbm510_inkwl_mou[];
-extern void cbm510_joy_mou[];   /* Referred to by mouse_static_stddrv[] */
-extern void cbm510_ram_emd[];
-extern void cbm510_std_joy[];   /* Referred to by joy_static_stddrv[] */
-extern void cbm510_std_ser[];
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-/* Special routines to read/write bytes and words in the system bank */
-unsigned char __fastcall__ peekbsys (unsigned addr);
-unsigned __fastcall__ peekwsys (unsigned addr);
-void __fastcall__ pokebsys (unsigned addr, unsigned char val);
-void __fastcall__ pokewsys (unsigned addr, unsigned val);
-
-#if defined(__OPT_i__) && (__OPT_i__ >= 600)
-#define peekbsys(addr)                  \
-        __AX__ = (addr),                \
-        __asm__ ("sta ptr1"),           \
-        __asm__ ("stx ptr1+1"),         \
-        __asm__ ("ldx $01"),            \
-        __asm__ ("lda #$0F"),           \
-        __asm__ ("sta $01"),            \
-        __asm__ ("ldy #$00"),           \
-        __asm__ ("lda (ptr1),y"),       \
-        __asm__ ("stx $01"),            \
-        __asm__ ("ldx #$00"),           \
-        __AX__
-#endif
-
-
-
-/* End of cbm510.h */
-#endif
-
-
-
diff --git a/include/cbm610.h b/include/cbm610.h
deleted file mode 100644 (file)
index 79d4984..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 cbm610.h                                  */
-/*                                                                           */
-/*                    CBM610 system specific definitions                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _CBM610_H
-#define _CBM610_H
-
-
-
-/* Check for errors */
-#if !defined(__CBM610__)
-#  error This module may only be used when compiling for the CBM 610!
-#endif
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Additional key defines */
-#define CH_F1                   224
-#define CH_F2                   225
-#define CH_F3                   226
-#define CH_F4                   227
-#define CH_F5                   228
-#define CH_F6                   229
-#define CH_F7                   230
-#define CH_F8                   231
-#define CH_F9                   232
-#define CH_F10                  233
-#define CH_F11                  234
-#define CH_F12                  235
-#define CH_F13                  236
-#define CH_F14                  237
-#define CH_F15                  238
-#define CH_F16                  239
-#define CH_F17                  240
-#define CH_F18                  241
-#define CH_F19                  242
-#define CH_F20                  243
-
-/* Color defines */
-#define COLOR_BLACK             0x00
-#define COLOR_WHITE             0x01
-
-/* Define hardware */
-#include <_6545.h>
-#define CRTC    (*(struct __6545)0xD800)
-
-#include <_sid.h>
-#define SID     (*(struct __sid*)0xDA00)
-
-#include <_6526.h>
-#define CIA     (*(struct __6526*)0xDC00)
-
-#include <_6551.h>
-#define ACIA    (*(struct __6551*)0xDD00)
-
-#include <_6525.h>
-#define TPI1    (*(struct __6525*)0xDE00)
-#define TPI2    (*(struct __6525*)0xDF00)
-
-
-
-/*****************************************************************************/
-/*                                 Variables                                 */
-/*****************************************************************************/
-
-
-
-/* The addresses of the static drivers */
-extern void cbm610_ram_emd[];
-extern void cbm610_std_ser[];
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-/* Special routines to read/write bytes and words in the system bank */
-unsigned char __fastcall__ peekbsys (unsigned addr);
-unsigned __fastcall__ peekwsys (unsigned addr);
-void __fastcall__ pokebsys (unsigned addr, unsigned char val);
-void __fastcall__ pokewsys (unsigned addr, unsigned val);
-
-#if defined(__OPT_i__) && (__OPT_i__ >= 600)
-#define peekbsys(addr)                  \
-        __AX__ = (addr),                \
-        __asm__ ("sta ptr1"),           \
-        __asm__ ("stx ptr1+1"),         \
-        __asm__ ("ldx $01"),            \
-        __asm__ ("lda #$0F"),           \
-        __asm__ ("sta $01"),            \
-        __asm__ ("ldy #$00"),           \
-        __asm__ ("lda (ptr1),y"),       \
-        __asm__ ("stx $01"),            \
-        __asm__ ("ldx #$00"),           \
-        __AX__
-#endif
-
-
-
-/* The following #defines will cause the matching functions calls in conio.h
-** to be overlaid by macros with the same names, saving the function call
-** overhead.
-*/
-#define _textcolor(color)       COLOR_WHITE
-#define _bgcolor(color)         COLOR_BLACK
-#define _bordercolor(color)     COLOR_BLACK
-
-
-
-/* End of cbm610.h */
-#endif
-
-
-
diff --git a/include/cbm_filetype.h b/include/cbm_filetype.h
deleted file mode 100644 (file)
index e049eb3..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                              cbm_filetype.h                               */
-/*                                                                           */
-/*                      Definitions for CBM file types                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _CBM_FILETYPE_H
-#define _CBM_FILETYPE_H
-
-
-
-/* Check for errors */
-#if !defined(__CBM__)
-#  error This module may be used only when compiling for CBM machines!
-#endif
-
-
-
-/*****************************************************************************/
-/*                                Definitions                                */
-/*****************************************************************************/
-
-
-
-/* CBM FILE TYPES. The definitions are used within standard headers, so we
-** be careful with identifiers in the user name space.
-** "Regular" files have a special bit set so it's easier to pick them out.
-*/
-#define _CBM_T_REG      0x10U   /* Bit set for regular files */
-#define _CBM_T_SEQ      0x10U
-#define _CBM_T_PRG      0x11U
-#define _CBM_T_USR      0x12U
-#define _CBM_T_REL      0x13U
-#define _CBM_T_VRP      0x14U   /* Vorpal fast-loadable format */
-#define _CBM_T_DEL      0x00U
-#define _CBM_T_CBM      0x01U   /* 1581 sub-partition */
-#define _CBM_T_DIR      0x02U   /* IDE64 and CMD sub-directory */
-#define _CBM_T_LNK      0x03U   /* IDE64 soft-link */
-#define _CBM_T_OTHER    0x04U   /* File-type not recognized */
-#define _CBM_T_HEADER   0x05U   /* Disk header / title */
-
-#if __CC65_STD__ == __CC65_STD_CC65__
-/* Allow for names without leading underscores */
-#define CBM_T_DEL       _CBM_T_DEL
-#define CBM_T_SEQ       _CBM_T_SEQ
-#define CBM_T_PRG       _CBM_T_PRG
-#define CBM_T_USR       _CBM_T_USR
-#define CBM_T_REL       _CBM_T_REL
-#define CBM_T_CBM       _CBM_T_CBM
-#define CBM_T_DIR       _CBM_T_DIR
-#define CBM_T_LNK       _CBM_T_LNK
-#define CBM_T_VRP       _CBM_T_VRP
-#define CBM_T_OTHER     _CBM_T_OTHER
-#define CBM_T_HEADER    _CBM_T_HEADER
-#endif
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned char __fastcall__ _cbm_filetype (unsigned char c);
-/* Map the start character for a file type to one of the file types above.
-** Note: 'd' will always mapped to CBM_T_DEL. The calling function has to
-** look at the following character to determine if the file type is actually
-** CBM_T_DIR.
-** This is a function used by the implementation. There is usually no need
-** to call it from user code.
-*/
-
-
-
-/* End of cbm_filetype.h */
-#endif
-
-
diff --git a/include/cc65.h b/include/cc65.h
deleted file mode 100644 (file)
index 4f9f306..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  cc65.h                                   */
-/*                                                                           */
-/*          Target independent but cc65 specific utility functions           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2009-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _CC65_H
-#define _CC65_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-long __fastcall__ cc65_idiv32by16r16 (long rhs, int lhs);
-/* Divide a 32 bit signed value by a 16 bit signed value yielding a 16
-** bit result and a 16 bit remainder. The former is returned in the lower 16
-** bit of the result, the latter in the upper. If you don't need the
-** remainder, just assign (or cast) to an int.
-*/
-
-unsigned long __fastcall__ cc65_udiv32by16r16 (unsigned long rhs, unsigned lhs);
-/* Divide a 32 bit unsigned value by a 16 bit unsigned value yielding a 16
-** bit result and a 16 bit remainder. The former is returned in the lower 16
-** bit of the result, the latter in the upper. If you don't need the
-** remainder, just assign (or cast) to an unsigned.
-*/
-
-int __fastcall__ cc65_imul8x8r16 (signed char lhs, signed char rhs);
-/* Multiplicate two signed 8 bit to yield an signed 16 bit result */
-
-long __fastcall__ cc65_imul16x16r32 (int lhs, int rhs);
-/* Multiplicate two signed 16 bit to yield a signed 32 bit result */
-
-unsigned __fastcall__ cc65_umul8x8r16 (unsigned char lhs, unsigned char rhs);
-/* Multiplicate two unsigned 8 bit to yield an unsigned 16 bit result */
-
-unsigned long __fastcall__ cc65_umul16x8r32 (unsigned lhs, unsigned char rhs);
-/* Multiplicate an unsigned 16 bit by an unsigned 8 bit number yielding a 24
-** bit unsigned result that is extended to 32 bits for easier handling from C.
-*/
-
-unsigned long __fastcall__ cc65_umul16x16r32 (unsigned lhs, unsigned rhs);
-/* Multiplicate two unsigned 16 bit to yield an unsigned 32 bit result */
-
-int __fastcall__ cc65_sin (unsigned x);
-/* Return the sine of the argument, which must be in range 0..360. The result
-** is in 8.8 fixed point format, which means that 1.0 = $100 and -1.0 = $FF00.
-*/
-
-int __fastcall__ cc65_cos (unsigned x);
-/* Return the cosine of the argument, which must be in range 0..360. The result
-** is in 8.8 fixed point format, which means that 1.0 = $100 and -1.0 = $FF00.
-*/
-
-
-
-/* End of cc65.h */
-#endif
-
-
-
diff --git a/include/conio.h b/include/conio.h
deleted file mode 100644 (file)
index 8638e94..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  conio.h                                  */
-/*                                                                           */
-/*                            Direct console I/O                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2007 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/*
-** This is the direct console interface for cc65. I do not like the function
-** names very much, but the first version started as a rewrite of Borland's
-** conio, and, even if the interface has changed, the names did not.
-**
-** The interface does direct screen I/O, so it is fast enough for most
-** programs. I did not implement text windows, since many applications do
-** not need them and should not pay for the additional overhead. It should
-** be easy to add text windows on a higher level if needed,
-**
-** Most routines do not check the parameters. This may be unfortunate but is
-** also related to speed. The coordinates are always 0/0 based.
-*/
-
-
-
-#ifndef _CONIO_H
-#define _CONIO_H
-
-
-
-#if !defined(_STDARG_H)
-#  include <stdarg.h>
-#endif
-
-/* Include the correct machine-specific file */
-#if defined(__APPLE2ENH__)
-#  include <apple2enh.h>
-#elif defined(__APPLE2__)
-#  include <apple2.h>
-#elif defined(__ATARI__)
-#  include <atari.h>
-#elif defined(__ATMOS__)
-#  include <atmos.h>
-#elif defined(__CBM__)
-#  include <cbm.h>
-#elif defined(__GEOS__)
-#  include <geos.h>
-#elif defined(__LUNIX__)
-#  include <lunix.h>
-#elif defined(__LYNX__)
-#  include <lynx.h>
-#elif defined(__NES__)
-#  include <nes.h>
-#elif defined(__OSIC1P__)
-#  include <osic1p.h>
-#elif defined(__PCE__)
-#  include <pce.h>
-#endif
-
-
-
-/*****************************************************************************/
-/*                                 Functions                                 */
-/*****************************************************************************/
-
-
-
-void clrscr (void);
-/* Clear the whole screen and put the cursor into the top left corner */
-
-unsigned char kbhit (void);
-/* Return true if there's a key waiting, return false if not */
-
-void __fastcall__ gotox (unsigned char x);
-/* Set the cursor to the specified X position, leave the Y position untouched */
-
-void __fastcall__ gotoy (unsigned char y);
-/* Set the cursor to the specified Y position, leave the X position untouched */
-
-void __fastcall__ gotoxy (unsigned char x, unsigned char y);
-/* Set the cursor to the specified position */
-
-unsigned char wherex (void);
-/* Return the X position of the cursor */
-
-unsigned char wherey (void);
-/* Return the Y position of the cursor */
-
-void __fastcall__ cputc (char c);
-/* Output one character at the current cursor position */
-
-void __fastcall__ cputcxy (unsigned char x, unsigned char y, char c);
-/* Same as "gotoxy (x, y); cputc (c);" */
-
-void __fastcall__ cputs (const char* s);
-/* Output a NUL-terminated string at the current cursor position */
-
-void __fastcall__ cputsxy (unsigned char x, unsigned char y, const char* s);
-/* Same as "gotoxy (x, y); puts (s);" */
-
-int cprintf (const char* format, ...);
-/* Like printf(), but uses direct screen output */
-
-int __fastcall__ vcprintf (const char* format, va_list ap);
-/* Like vprintf(), but uses direct screen output */
-
-char cgetc (void);
-/* Return a character from the keyboard. If there is no character available,
-** the function waits until the user does press a key. If cursor is set to
-** 1 (see below), a blinking cursor is displayed while waiting.
-*/
-
-int cscanf (const char* format, ...);
-/* Like scanf(), but uses direct keyboard input */
-
-int __fastcall__ vcscanf (const char* format, va_list ap);
-/* Like vscanf(), but uses direct keyboard input */
-
-unsigned char __fastcall__ cursor (unsigned char onoff);
-/* If onoff is 1, a cursor is displayed when waiting for keyboard input. If
-** onoff is 0, the cursor is hidden when waiting for keyboard input. The
-** function returns the old cursor setting.
-*/
-
-unsigned char __fastcall__ revers (unsigned char onoff);
-/* Enable/disable reverse character display. This may not be supported by
-** the output device. Return the old setting.
-*/
-
-unsigned char __fastcall__ textcolor (unsigned char color);
-/* Set the color for text output. The old color setting is returned. */
-
-unsigned char __fastcall__ bgcolor (unsigned char color);
-/* Set the color for the background. The old color setting is returned. */
-
-unsigned char __fastcall__ bordercolor (unsigned char color);
-/* Set the color for the border. The old color setting is returned. */
-
-void __fastcall__ chline (unsigned char length);
-/* Output a horizontal line with the given length starting at the current
-** cursor position.
-*/
-
-void __fastcall__ chlinexy (unsigned char x, unsigned char y, unsigned char length);
-/* Same as "gotoxy (x, y); chline (length);" */
-
-void __fastcall__ cvline (unsigned char length);
-/* Output a vertical line with the given length at the current cursor
-** position.
-*/
-
-void __fastcall__ cvlinexy (unsigned char x, unsigned char y, unsigned char length);
-/* Same as "gotoxy (x, y); cvline (length);" */
-
-void __fastcall__ cclear (unsigned char length);
-/* Clear part of a line (write length spaces). */
-
-void __fastcall__ cclearxy (unsigned char x, unsigned char y, unsigned char length);
-/* Same as "gotoxy (x, y); cclear (length);" */
-
-void __fastcall__ screensize (unsigned char* x, unsigned char* y);
-/* Return the current screen size. */
-
-void __fastcall__ cputhex8 (unsigned char val);
-void __fastcall__ cputhex16 (unsigned val);
-/* These shouldn't be here... */
-
-
-
-/*****************************************************************************/
-/*                                  Macros                                   */
-/*****************************************************************************/
-
-
-
-/* On some platforms, functions are not available or are dummys. To suppress
-** the call to these functions completely, the platform header files may
-** define macros for these functions that start with an underline. If such a
-** macro exists, a new macro is defined here, that expands to the one with the
-** underline. The reason for this two stepped approach is that it is sometimes
-** necessary to take the address of the function, which is not possible when
-** using a macro. Since the function prototype is still present, #undefining
-** the macro will give access to the actual function.
-*/
-
-#if defined(_textcolor)
-#  define textcolor(x)          _textcolor(x)
-#endif
-#if defined(_bgcolor)
-#  define bgcolor(x)            _bgcolor(x)
-#endif
-#if defined(_bordercolor)
-#  define bordercolor(x)        _bordercolor(x)
-#endif
-
-
-
-/* End of conio.h */
-#endif
-
-
-
diff --git a/include/ctype.h b/include/ctype.h
deleted file mode 100644 (file)
index b440bfb..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  ctype.h                                  */
-/*                                                                           */
-/*                            Character handling                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _CTYPE_H
-#define _CTYPE_H
-
-
-/* The array containing character classification data */
-extern unsigned char _ctype[256];
-
-/* Bits used to specify character classes */
-#define _CT_LOWER       0x01    /* 0 - Lower case char */
-#define _CT_UPPER       0x02    /* 1 - Upper case char */
-#define _CT_DIGIT       0x04    /* 2 - Numeric digit */
-#define _CT_XDIGIT      0x08    /* 3 - Hex digit (both lower and upper) */
-#define _CT_CNTRL       0x10    /* 4 - Control character */
-#define _CT_SPACE       0x20    /* 5 - The space character itself */
-#define _CT_OTHER_WS    0x40    /* 6 - Other whitespace ('\f', '\n', '\r', '\t', and '\v') */
-#define _CT_SPACE_TAB   0x80    /* 7 - Space or tab character */
-
-/* Bit combinations */
-#define _CT_ALNUM       (_CT_LOWER | _CT_UPPER | _CT_DIGIT)
-#define _CT_ALPHA       (_CT_LOWER | _CT_UPPER)
-#define _CT_NOT_GRAPH   (_CT_CNTRL | _CT_SPACE)
-#define _CT_NOT_PRINT   (_CT_CNTRL)
-#define _CT_NOT_PUNCT   (_CT_SPACE | _CT_CNTRL | _CT_DIGIT | _CT_UPPER | _CT_LOWER)
-#define _CT_WS          (_CT_SPACE | _CT_OTHER_WS)
-
-/* Character classification functions */
-int __fastcall__ isalnum (int c);
-int __fastcall__ isalpha (int c);
-int __fastcall__ iscntrl (int c);
-int __fastcall__ isdigit (int c);
-int __fastcall__ isgraph (int c);
-int __fastcall__ islower (int c);
-int __fastcall__ isprint (int c);
-int __fastcall__ ispunct (int c);
-int __fastcall__ isspace (int c);
-int __fastcall__ isupper (int c);
-int __fastcall__ isxdigit (int c);
-#if __CC65_STD__ >= __CC65_STD_C99__
-int __fastcall__ isblank (int c);       /* New in C99 */
-#endif
-
-int __fastcall__ toupper (int c);       /* Always external */
-int __fastcall__ tolower (int c);       /* Always external */
-
-#if __CC65_STD__ >= __CC65_STD_CC65__
-unsigned char __fastcall__ toascii (unsigned char c);
-/* Convert a target-specific character to ASCII. */
-#endif
-
-
-
-/* When inlining-of-known-functions is enabled, overload most of the above
-** functions by macroes. The function prototypes are available again after
-** #undef'ing the macroes.
-** Please note that the following macroes do NOT handle EOF correctly, as
-** stated in the manual. If you need correct behaviour for EOF, don't
-** use -Os, or #undefine the following macroes.
-*/
-#ifdef __OPT_s__
-
-#define isalnum(c)  (__AX__ = (c),                      \
-                    __asm__ ("tay"),                    \
-                    __asm__ ("lda %v,y", _ctype),       \
-                    __asm__ ("and #%b", _CT_ALNUM),     \
-                    __AX__)
-
-#define isalpha(c)  (__AX__ = (c),                      \
-                    __asm__ ("tay"),                    \
-                    __asm__ ("lda %v,y", _ctype),       \
-                    __asm__ ("and #%b", _CT_ALPHA),     \
-                    __AX__)
-
-#if __CC65_STD__ >= __CC65_STD_C99__
-#define isblank(c)  (__AX__ = (c),                      \
-                    __asm__ ("tay"),                    \
-                    __asm__ ("lda %v,y", _ctype),       \
-                    __asm__ ("and #%b", _CT_SPACE_TAB), \
-                    __AX__)
-#endif
-
-#define iscntrl(c)  (__AX__ = (c),                      \
-                    __asm__ ("tay"),                    \
-                    __asm__ ("lda %v,y", _ctype),       \
-                    __asm__ ("and #%b", _CT_CNTRL),     \
-                    __AX__)
-
-#define isdigit(c)  (__AX__ = (c),                      \
-                    __asm__ ("tay"),                    \
-                    __asm__ ("lda %v,y", _ctype),       \
-                    __asm__ ("and #%b", _CT_DIGIT),     \
-                    __AX__)
-
-#define isgraph(c)  (__AX__ = (c),                      \
-                    __asm__ ("tay"),                    \
-                    __asm__ ("lda %v,y", _ctype),       \
-                    __asm__ ("and #%b", _CT_NOT_GRAPH), \
-                    __asm__ ("cmp #1"),                 \
-                    __asm__ ("lda #1"),                 \
-                    __asm__ ("sbc #1"),                 \
-                    __AX__)
-
-#define islower(c)  (__AX__ = (c),                      \
-                    __asm__ ("tay"),                    \
-                    __asm__ ("lda %v,y", _ctype),       \
-                    __asm__ ("and #%b", _CT_LOWER),     \
-                    __AX__)
-
-#define isprint(c)  (__AX__ = (c),                      \
-                    __asm__ ("tay"),                    \
-                    __asm__ ("lda %v,y", _ctype),       \
-                    __asm__ ("and #%b", _CT_NOT_PRINT), \
-                    __asm__ ("eor #%b", _CT_NOT_PRINT), \
-                    __AX__)
-
-#define ispunct(c)  (__AX__ = (c),                      \
-                    __asm__ ("tay"),                    \
-                    __asm__ ("lda %v,y", _ctype),       \
-                    __asm__ ("and #%b", _CT_NOT_PUNCT), \
-                    __asm__ ("cmp #1"),                 \
-                    __asm__ ("lda #1"),                 \
-                    __asm__ ("sbc #1"),                 \
-                    __AX__)
-
-#define isspace(c)  (__AX__ = (c),                      \
-                    __asm__ ("tay"),                    \
-                    __asm__ ("lda %v,y", _ctype),       \
-                    __asm__ ("and #%b", _CT_WS),        \
-                    __AX__)
-
-#define isupper(c)  (__AX__ = (c),                      \
-                    __asm__ ("tay"),                    \
-                    __asm__ ("lda %v,y", _ctype),       \
-                    __asm__ ("and #%b", _CT_UPPER),     \
-                    __AX__)
-
-#define isxdigit(c) (__AX__ = (c),                      \
-                    __asm__ ("tay"),                    \
-                    __asm__ ("lda %v,y", _ctype),       \
-                    __asm__ ("and #%b", _CT_XDIGIT),    \
-                    __AX__)
-
-#endif
-
-
-
-/* End of ctype.h */
-#endif
-
-
-
diff --git a/include/dbg.h b/include/dbg.h
deleted file mode 100644 (file)
index 7b4f67e..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   dbg.h                                   */
-/*                                                                           */
-/*                         Debugger module interface                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2000, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/*
-** This is the interface to the cc65 debugger. Since many of the functions
-** used for the debugger are quite usable even in another context, they
-** are declared here.
-**
-** To use the debugger, just call DbgInit in your application. Once it has
-** been called, the debugger will catch any BRK opcode. Use the BREAK macro 
-** defined below to insert breakpoints into your code.
-**
-** There are currently a lot of things that cannot be debugged, graphical
-** applications are an example. The debugger does not save your screen
-** contents, so even your text screen gets destroyed. However, you can
-** debug the C and runtime library, even if the debugger is using this
-** stuff itself.
-**
-** Note: When using the debugger, there are some other identifiers with
-** external linkage, that start with Dbg. Avoid those names if you use the
-** module.
-*/
-
-
-
-#ifndef _DBG_H
-#define _DBG_H
-
-
-
-/*****************************************************************************/
-/*                             Utility functions                             */
-/*****************************************************************************/
-
-
-
-unsigned __fastcall__ DbgDisAsm (unsigned Addr, char* Buf, unsigned char Len);
-/* Disassemble one instruction at address addr into the given buffer.
-** The resulting line has the format, "AAAA__BB_BB_BB___OPC_OPERAND",
-** where AAAA is the hexadecimal representation of addr, BB are the
-** bytes (in hex) that make the instruction, OPC is the mnemonic, and
-** OPERAND is an operand for the instruction.
-** The buffer is filled with spaces up to the given length and terminated as
-** a usual C string. NOTE: Buf must be able to hold Len+1 characters.
-** The function returns the length of the disassembled instruction, so,
-** to disassemble the next instruction, add the return value to addr
-** and call the function again.
-*/
-
-unsigned __fastcall__ DbgDisAsmLen (unsigned Addr);
-/* Disassemble one instruction, but do only return the length, do not
-** create a visible representation. This function is useful when
-** disassembling backwards, it is much faster than DbgDisAsm.
-*/
-
-int __fastcall__ DbgIsRAM (unsigned Addr);
-/* Return true if we can read and write the given address */
-
-char* __cdecl__ DbgMemDump (unsigned Addr, char* Buf, unsigned char Len);
-/* Create a line of a memory dump in the given buffer. The buffer contains
-** the starting address (4 digits hex), then Len bytes in this format:
-** "AAAA__XX_YY_ZZ_...". The passed char buffer must hold Len*3+5 bytes
-** plus a terminator byte.
-** The function does not work correctly if the created string is longer
-** than 255 bytes.
-** The return value is Buf.
-*/
-
-
-
-/*****************************************************************************/
-/*                         High level user interface                         */
-/*****************************************************************************/
-
-
-
-void __fastcall__ DbgInit (unsigned unused);
-/* Initialize the debugger. Use 0 as parameter. The debugger will popup on
-** next brk encountered.
-*/
-
-#define BREAK()         __asm__ ("brk")
-/* Use this to insert breakpoints into your code */
-
-
-
-/* End of dbg.h */
-#endif
-
-
-
-                                  
diff --git a/include/device.h b/include/device.h
deleted file mode 100644 (file)
index 68b1c80..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 device.h                                  */
-/*                                                                           */
-/*                              Device handling                              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012  Oliver Schmidt, <ol.sc@web.de>                                  */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _DEVICE_H
-#define _DEVICE_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-#define INVALID_DEVICE  255
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned char getfirstdevice (void);
-
-unsigned char __fastcall__ getnextdevice (unsigned char device);
-
-unsigned char getcurrentdevice (void);
-
-char* __fastcall__ getdevicedir (unsigned char device, char* buf, size_t size);
-
-
-
-/* End of device.h */
-#endif
diff --git a/include/dio.h b/include/dio.h
deleted file mode 100644 (file)
index 4201728..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   dio.h                                   */
-/*                                                                           */
-/*                       Low-Level diskette I/O functions                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2005 Christian Groessler <chris@groessler.org>                        */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _DIO_H
-#define _DIO_H
-
-
-
-/* Please note: All functions in this file will set _oserror *and* return its
-** value. The only exception is dio_open, which will return NULL, but _oserror
-** will be set. All function will also set _oserror in case of successful
-** execution, effectively clearing it.
-*/
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-typedef struct __dhandle_t *dhandle_t;
-
-typedef struct {
-  unsigned char  head;
-  unsigned       track;
-  unsigned       sector;
-} dio_phys_pos;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned __fastcall__ dio_query_sectsize (dhandle_t handle);
-/* returns sector size */
-
-unsigned __fastcall__ dio_query_sectcount (dhandle_t handle);
-/* returns sector count */
-
-dhandle_t __fastcall__ dio_open (unsigned char device);
-/* open device for subsequent dio access */
-
-unsigned char __fastcall__ dio_close (dhandle_t handle);
-/* close device, returns oserror (0 for success) */
-
-unsigned char __fastcall__ dio_read (dhandle_t handle,
-                                     unsigned sect_num,
-                                     void *buffer);
-/* read sector <sect_num> from device <handle> to memory at <buffer> */
-/* the number of bytes transferred depends on the sector size */
-/* returns oserror (0 for success) */
-
-unsigned char __fastcall__ dio_write (dhandle_t handle,
-                                      unsigned sect_num,
-                                      const void *buffer);
-/* write memory at <buffer> to sector <sect_num> on device <handle>, no verify */
-/* the number of bytes transferred depends on the sector size */
-/* returns oserror (0 for success) */
-
-unsigned char __fastcall__ dio_write_verify (dhandle_t handle,
-                                             unsigned sect_num,
-                                             const void *buffer);
-/* write memory at <buffer> to sector <sect_num> on device <handle>, verify after write */
-/* the number of bytes transferred depends on the sector size */
-/* returns oserror (0 for success) */
-
-unsigned char __fastcall__ dio_phys_to_log (dhandle_t handle,
-                                            const dio_phys_pos *physpos, /* input */
-                                            unsigned *sectnum);          /* output */
-/* convert physical sector address (head/track/sector) to logical sector number */
-/* returns oserror (0 for success) */
-
-unsigned char __fastcall__ dio_log_to_phys (dhandle_t handle,
-                                            const unsigned *sectnum, /* input */
-                                            dio_phys_pos *physpos);  /* output */
-/* convert logical sector number to physical sector address (head/track/sector) */
-/* returns oserror (0 for success) */
-
-#endif /* #ifndef _DIO_H */
diff --git a/include/dirent.h b/include/dirent.h
deleted file mode 100644 (file)
index b5e1be1..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 dirent.h                                  */
-/*                                                                           */
-/*                        Directory entries for cc65                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2005  Oliver Schmidt, <ol.sc@web.de>                                  */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _DIRENT_H
-#define _DIRENT_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-typedef struct DIR DIR;
-
-#if defined(__APPLE2__)
-
-struct dirent {
-    char          d_name[16];
-    unsigned      d_ino;
-    unsigned      d_blocks;
-    unsigned long d_size;
-    unsigned char d_type;
-    struct {
-        unsigned day  :5;
-        unsigned mon  :4;
-        unsigned year :7;
-    }             d_cdate;
-    struct {
-        unsigned char min;
-        unsigned char hour;
-    }             d_ctime;
-    unsigned char d_access;
-    unsigned      d_auxtype;
-    struct {
-        unsigned day  :5;
-        unsigned mon  :4;
-        unsigned year :7;
-    }             d_mdate;
-    struct {
-        unsigned char min;
-        unsigned char hour;
-    }             d_mtime;
-};
-
-#define _DE_ISREG(t)  ((t) != 0x0F)
-#define _DE_ISDIR(t)  ((t) == 0x0F)
-#define _DE_ISLBL(t)  (0)
-#define _DE_ISLNK(t)  (0)
-
-#elif defined(__ATARI__)
-
-struct dirent {
-    char          d_name[13];  /* 8.3 + trailing 0 */
-    unsigned char d_type;
-};
-
-#define _DE_ISREG(t)  ((t) != 0xC4)
-#define _DE_ISDIR(t)  ((t) == 0xC4)
-#define _DE_ISLBL(t)  (0)
-#define _DE_ISLNK(t)  (0)
-
-#elif defined(__CBM__)
-
-struct dirent {
-    char                d_name[16+1];
-    unsigned int        d_off;
-    unsigned int        d_blocks;
-    unsigned char       d_type;         /* See _CBM_T_xxx defines */
-
-    /* bsd extensions */
-    unsigned char       d_namlen;
-};
-
-/* File type specification macros. We need definitions of CBM file types. */
-#include <cbm_filetype.h>
-
-#define _DE_ISREG(t)    (((t) & _CBM_T_REG) != 0)
-#define _DE_ISDIR(t)    ((t) == _CBM_T_DIR)
-#define _DE_ISLBL(t)    ((t) == _CBM_T_HDR)
-#define _DE_ISLNK(t)    ((t) == _CBM_T_LNK)
-
-#elif defined(__LYNX__)
-
-struct dirent {
-    unsigned char       d_blocks;
-    unsigned int        d_offset;
-    char                d_type;
-    void                *d_address;
-    unsigned int        d_size;
-};
-
-extern struct dirent FileEntry;
-#pragma zpsym ("FileEntry");
-
-#define _DE_ISREG(t)    (1)
-#define _DE_ISDIR(t)    (0)
-#define _DE_ISLBL(t)    (0)
-#define _DE_ISLNK(t)    (0)
-
-#else
-
-struct dirent {
-    char d_name[1];
-};
-
-#define _DE_ISREG(t)  (1)
-#define _DE_ISDIR(t)  (0)
-#define _DE_ISLBL(t)  (0)
-#define _DE_ISLNK(t)  (0)
-
-#endif
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-DIR* __fastcall__ opendir (const char* name);
-
-struct dirent* __fastcall__ readdir (DIR* dir);
-
-int __fastcall__ closedir (DIR* dir);
-
-long __fastcall__ telldir (DIR* dir);
-
-void __fastcall__ seekdir (DIR* dir, long offs);
-
-void __fastcall__ rewinddir (DIR* dir);
-
-
-
-/* End of dirent.h */
-#endif
diff --git a/include/em.h b/include/em.h
deleted file mode 100644 (file)
index b151800..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   em.h                                    */
-/*                                                                           */
-/*                      API for extended memory access                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _EM_H
-#define _EM_H
-
-
-
-/*****************************************************************************/
-/*                                  Definitions                              */
-/*****************************************************************************/
-
-
-
-/* Size of an extended memory page */
-#define EM_PAGE_SIZE          256
-
-/* Error codes */
-#define EM_ERR_OK               0       /* No error */
-#define EM_ERR_NO_DRIVER        1       /* No driver available */
-#define EM_ERR_CANNOT_LOAD      2       /* Error loading driver */
-#define EM_ERR_INV_DRIVER       3       /* Invalid driver */
-#define EM_ERR_NO_DEVICE        4       /* Device (hardware) not found */
-#define EM_ERR_INSTALLED        5       /* A driver is already installed */
-
-/* Parameters for the em_copy_... functions. NOTE: The first seven bytes
-** have the same order and alignment as needed for the Commodore REU, so
-** don't change the order without changing the assembler file that defines
-** the struct offsets and the code in the REU driver.
-*/
-struct em_copy {
-    void*           buf;        /* Memory buffer to copy from or to */
-    unsigned char   offs;       /* Offset into page */
-    unsigned        page;       /* Starting page to copy from or to */
-    unsigned        count;      /* Number of bytes to copy */
-    unsigned char   unused;     /* Make the size 8 bytes */
-};
-
-
-
-/*****************************************************************************/
-/*                                 Functions                                 */
-/*****************************************************************************/
-
-
-
-unsigned char __fastcall__ em_load_driver (const char* driver);
-/* Load and install an extended memory driver. Return an error code. */
-
-unsigned char em_unload (void);
-/* Uninstall, then unload the currently loaded driver. */
-
-unsigned char __fastcall__ em_install (void* driver);
-/* Install an already loaded driver. Return an error code. */
-
-unsigned char em_uninstall (void);
-/* Uninstall the currently loaded driver and return an error code.
-** Note: This call does not free allocated memory.
-*/
-
-unsigned em_pagecount (void);
-/* Return the total number of 256 byte pages available in extended memory. */
-
-void* __fastcall__ em_map (unsigned page);
-/* Unmap the current page from memory and map a new one. The function returns
-** a pointer to the location of the page in memory. Note: Without calling
-** em_commit, the old contents of the memory window may be lost!
-*/
-
-void* __fastcall__ em_use (unsigned page);
-/* Tell the driver that the memory window is associated with a given page.
-** This call is very similar to em_map. The difference is that the driver
-** does not necessarily transfer the current contents of the extended
-** memory into the returned window. If you're going to just write to the
-** window and the current contents of the window are invalid or no longer
-** use, this call may perform better than em_map.
-*/
-
-void em_commit (void);
-/* Commit changes in the memory window to extended storage. If the contents
-** of the memory window have been changed, these changes may be lost if
-** em_map, em_copyfrom or em_copyto are called without calling em_commit
-** first. Note: Not calling em_commit does not mean that the changes are
-** discarded, it does just mean that some drivers will discard the changes.
-*/
-
-void __fastcall__ em_copyfrom (const struct em_copy* copy_data);
-/* Copy from extended into linear memory. Note: This may invalidate the
-** currently mapped page.
-*/
-
-void __fastcall__ em_copyto (const struct em_copy* copy_data);
-/* Copy from linear into extended memory. Note: This may invalidate the
-** currently mapped page.
-*/
-
-
-
-/* End of em.h */
-#endif
-
-
-
diff --git a/include/em/em-kernel.h b/include/em/em-kernel.h
deleted file mode 100644 (file)
index e5df803..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                em-kernel.h                                */
-/*                                                                           */
-/*                       Internally used EM functions                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2003 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _EM_KERNEL_H
-#define _EM_KERNEL_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* A structure that describes the header of an extended memory driver loaded
-** into memory.
-*/
-typedef struct {
-
-    /* Driver header */
-    char                id[3];          /* Contains 0x65, 0x6d, 0x64 ("emd") */
-    unsigned char       version;        /* Interface version */
-
-    /* Jump vectors. Note that these are not C callable */
-    void*               install;        /* INSTALL routine */
-    void*               deinstall;      /* DEINSTALL routine */
-    void*               pagecount;      /* PAGECOUNT routine */
-    void*               map;            /* MAP routine */
-    void*               use;            /* USE routine */
-    void*               mapclean;       /* MAPCLEAN routine */
-    void*               copyfrom;       /* COPYFROM routine */
-    void*               copyto;         /* COPYTO routine */
-
-} em_drv_header;
-
-
-
-/* EM kernel variables */
-extern em_drv_header*   em_drv;         /* Pointer to driver */
-
-
-
-/* End of em-kernel.h */
-#endif
-
-
-
diff --git a/include/errno.h b/include/errno.h
deleted file mode 100644 (file)
index 0b3d67b..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  errno.h                                  */
-/*                                                                           */
-/*                                Error codes                                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2010, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _ERRNO_H
-#define _ERRNO_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Operating system specific error code */
-extern unsigned char _oserror;
-
-extern int _errno;
-/* System errors go here */
-
-#define errno   _errno
-/* errno must be a macro */
-
-
-
-/* Possible error codes */
-#define ENOENT          1       /* No such file or directory */
-#define ENOMEM          2       /* Out of memory */
-#define EACCES          3       /* Permission denied */
-#define ENODEV          4       /* No such device */
-#define EMFILE          5       /* Too many open files */
-#define EBUSY           6       /* Device or resource busy */
-#define EINVAL          7       /* Invalid argument */
-#define ENOSPC          8       /* No space left on device */
-#define EEXIST          9       /* File exists */
-#define EAGAIN          10      /* Try again */
-#define EIO             11      /* I/O error */
-#define EINTR           12      /* Interrupted system call */
-#define ENOSYS          13      /* Function not implemented */
-#define ESPIPE          14      /* Illegal seek */
-#define ERANGE          15      /* Range error */
-#define EBADF           16      /* Bad file number */
-#define EUNKNOWN        17      /* Unknown OS specific error */
-
-
-
-/*****************************************************************************/
-/*                                     Code                                  */
-/*****************************************************************************/
-
-
-
-int __fastcall__ _osmaperrno (unsigned char oserror);
-/* Map an operating system specific error code (for example from _oserror) 
-** into one of the E... codes above. It is user callable.
-*/
-
-unsigned char __fastcall__ _seterrno (unsigned char code);
-/* Set errno to a specific error code and return zero. Used by the library */
-
-int __fastcall__ _directerrno (unsigned char code);
-/* Set errno to a specific error code, clear _oserror and return -1. Used
-** by the library.
-*/
-
-int __fastcall__ _mappederrno (unsigned char code);
-/* Set _oserror to the given platform specific error code. If it is a real
-** error code (not zero) set errno to the corresponding system error code
-** and return -1. Otherwise return zero.
-** Used by the library.
-*/
-
-
-
-/* End of errno.h */
-#endif
-
-
-
diff --git a/include/fcntl.h b/include/fcntl.h
deleted file mode 100644 (file)
index 0d23983..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  fcntl.h                                  */
-/*                                                                           */
-/*                            File control operations                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2004 Ullrich von Bassewitz                                       */
-/*               Römerstraße 52                                              */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _FCNTL_H
-#define _FCNTL_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Flag values for the open() call */
-#define O_RDONLY        0x01
-#define O_WRONLY        0x02
-#define O_RDWR          0x03
-#define O_CREAT         0x10
-#define O_TRUNC         0x20
-#define O_APPEND        0x40
-#define O_EXCL          0x80
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-/* Functions */
-int open (const char* name, int flags, ...);    /* May take a mode argument */
-int __fastcall__ close (int fd);
-int __fastcall__ creat (const char* name, unsigned mode);
-
-
-
-/* End of fcntl.h */
-#endif
-
-
-
diff --git a/include/geos.h b/include/geos.h
deleted file mode 100644 (file)
index 65b85cd..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
-   Supreme GEOS header file
-   includes all other headers
-
-   Maciej 'YTM/Elysium' Witkowiak, 27.10.1999
-*/
-
-
-
-#ifndef _GEOS_H
-#define _GEOS_H
-
-
-
-/* Check for errors */
-#if !defined(__GEOS__)
-#  error This module may only be used when compiling for GEOS!
-#endif
-
-
-
-#ifndef _GCONST_H
-#include <geos/gconst.h>
-#endif
-
-#ifndef _GSTRUCT_H
-#include <geos/gstruct.h>
-#endif
-
-#ifndef _GSYM_H
-#include <geos/gsym.h>
-#endif
-
-#ifndef _GDISK_H
-#include <geos/gdisk.h>
-#endif
-
-#ifndef _GFILE_H
-#include <geos/gfile.h>
-#endif
-
-#ifndef _GPROCESS_H
-#include <geos/gprocess.h>
-#endif
-
-#ifndef _GGRAPH_H
-#include <geos/ggraph.h>
-#endif
-
-#ifndef _GMENU_H
-#include <geos/gmenu.h>
-#endif
-
-#ifndef _GSPRITE_H
-#include <geos/gsprite.h>
-#endif
-
-#ifndef _GMEMORY_H
-#include <geos/gmemory.h>
-#endif
-
-#ifndef _GSYS_H
-#include <geos/gsys.h>
-#endif
-
-#ifndef _GDLGBOX_H
-#include <geos/gdlgbox.h>
-#endif
-
-
-#define CH_ULCORNER             '+'
-#define CH_URCORNER             '+'
-#define CH_LLCORNER             '+'
-#define CH_LRCORNER             '+'
-#define CH_TTEE                 '+'
-#define CH_RTEE                 '+'
-#define CH_BTEE                 '+'
-#define CH_LTEE                 '+'
-#define CH_CROSS                '+'
-
-#define CH_F1                   KEY_F1
-#define CH_F2                   KEY_F2
-#define CH_F3                   KEY_F3
-#define CH_F4                   KEY_F4
-#define CH_F5                   KEY_F5
-#define CH_F6                   KEY_F6
-#define CH_F7                   KEY_F7
-#define CH_F8                   KEY_F8
-
-#define CH_CURS_UP              KEY_UP
-#define CH_CURS_DOWN            KEY_DOWN
-#define CH_CURS_LEFT            KEY_LEFT
-#define CH_CURS_RIGHT           KEY_RIGHT
-#define CH_DEL                  KEY_DELETE
-#define CH_INS                  KEY_INSERT
-#define CH_ENTER                KEY_ENTER
-#define CH_STOP                 KEY_STOP
-#define CH_ESC                  KEY_ESC
-
-#define COLOR_BLACK             BLACK
-#define COLOR_WHITE             WHITE
-#define COLOR_RED               RED
-#define COLOR_CYAN              CYAN
-#define COLOR_VIOLET            PURPLE
-#define COLOR_PURPLE            PURPLE
-#define COLOR_GREEN             GREEN
-#define COLOR_BLUE              BLUE
-#define COLOR_YELLOW            YELLOW
-#define COLOR_ORANGE            ORANGE
-#define COLOR_BROWN             BROWN
-#define COLOR_LIGHTRED          LTRED
-#define COLOR_GRAY1             DKGREY
-#define COLOR_GRAY2             MEDGREY
-#define COLOR_LIGHTGREEN        LTGREEN
-#define COLOR_LIGHTBLUE         LTBLUE
-#define COLOR_GRAY3             LTGREY
-
-#define TGI_COLOR_BLACK         COLOR_BLACK
-#define TGI_COLOR_WHITE         COLOR_WHITE
-#define TGI_COLOR_RED           COLOR_RED
-#define TGI_COLOR_CYAN          COLOR_CYAN
-#define TGI_COLOR_VIOLET        COLOR_VIOLET
-#define TGI_COLOR_PURPLE        COLOR_PURPLE
-#define TGI_COLOR_GREEN         COLOR_GREEN
-#define TGI_COLOR_BLUE          COLOR_BLUE
-#define TGI_COLOR_YELLOW        COLOR_YELLOW
-#define TGI_COLOR_ORANGE        COLOR_ORANGE
-#define TGI_COLOR_BROWN         COLOR_BROWN
-#define TGI_COLOR_LIGHTRED      COLOR_LIGHTRED
-#define TGI_COLOR_GRAY1         COLOR_GRAY1
-#define TGI_COLOR_GRAY2         COLOR_GRAY2
-#define TGI_COLOR_LIGHTGREEN    COLOR_LIGHTGREEN
-#define TGI_COLOR_LIGHTBLUE     COLOR_LIGHTBLUE
-#define TGI_COLOR_GRAY3         COLOR_GRAY3
-
-
-/* End of geos.h */
-#endif
diff --git a/include/geos/gconst.h b/include/geos/gconst.h
deleted file mode 100644 (file)
index e70eb93..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
-  GEOS constants
-
-  reassembled by Maciej 'YTM/Elysium' Witkowiak
-*/
-
-/* Here are constants which didn't fit into any other cathegory... */
-
-#ifndef _GCONST_H
-#define _GCONST_H
-
-#define NULL            0
-#define FALSE           NULL
-#define TRUE            0xff
-#define MOUSE_SPRNUM    0
-#define DISK_DRV_LGH    0x0d80
-
-/* drivetypes */
-#define DRV_NULL        0
-#define DRV_1541        1
-#define DRV_1571        2
-#define DRV_1581        3
-#define DRV_NETWORK     15
-
-/* various disk constants */
-#define REL_FILE_NUM    9
-#define CMND_FILE_NUM   15
-#define MAX_CMND_STR    32
-#define DIR_1581_TRACK  40
-#define DIR_ACC_CHAN    13
-#define DIR_TRACK       18
-#define N_TRACKS        35
-#define DK_NM_ID_LEN    18
-#define TRACK           9
-#define SECTOR          12
-#define TOTAL_BLOCKS    664
-
-/* offset to something */
-#define OFF_INDEX_PTR   1
-
-/* values for CPU_DATA memory config - C64 */
-#define IO_IN           0x35
-#define KRNL_IO_IN      0x36
-#define KRNL_BAS_IO_IN  0x37
-
-/* values for MMU config - C128 */
-#define CIOIN           0x7E
-#define CRAM64K         0x7F
-#define CKRNLBASIOIN    0x40
-#define CKRNLIOIN       0x4E
-
-/* alarmSetFlag */
-#define ALARMMASK       4
-
-#define CLR_SAVE        0x40
-#define CONSTRAINED     0x40
-#define UN_CONSTRAINED  0
-#define FG_SAVE         0x80
-
-#define FUTURE1         7
-#define FUTURE2         8
-#define FUTURE3         9
-#define FUTURE4         10
-#define USELAST         127
-#define SHORTCUT        128
-
-#endif
diff --git a/include/geos/gdisk.h b/include/geos/gdisk.h
deleted file mode 100644 (file)
index f65d7d3..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-  GEOS functions from disk driver
-
-  by Maciej 'YTM/Elysium' Witkowiak
-*/
-
-#ifndef _GDISK_H
-#define _GDISK_H
-
-#ifndef _GSTRUCT_H
-#include <geos/gstruct.h>
-#endif
-
-char __fastcall__ ReadBuff(struct tr_se *myTrSe);
-char __fastcall__ WriteBuff(struct tr_se *myTrSe);
-
-char __fastcall__ GetBlock(struct tr_se *myTrSe, char *buffer);
-char __fastcall__ PutBlock(struct tr_se *myTrSe, const char *buffer);
-char __fastcall__ ReadBlock(struct tr_se *myTrSe, char *buffer);
-char __fastcall__ WriteBlock(struct tr_se *myTrSe, const char *buffer);
-char __fastcall__ VerWriteBlock(struct tr_se *myTrSe, const char *buffer);
-
-unsigned CalcBlksFree(void);
-char ChkDkGEOS(void);
-char SetGEOSDisk(void);
-char NewDisk(void);
-char OpenDisk(void);
-
-char __fastcall__ FindBAMBit(struct tr_se *myTrSe);
-char __fastcall__ BlkAlloc(struct tr_se output[], unsigned length);
-char __fastcall__ NxtBlkAlloc(struct tr_se *startTrSe,
-                              struct tr_se output[], unsigned length);
-char __fastcall__ FreeBlock(struct tr_se *myTrSe);
-struct tr_se __fastcall__ SetNextFree(struct tr_se *myTrSe);
-// above needs (unsigned) casts on both sides of '='
-
-char GetDirHead(void);
-char PutDirHead(void);
-void __fastcall__ GetPtrCurDkNm(char *name);
-
-void EnterTurbo(void);
-void ExitTurbo(void);
-void PurgeTurbo(void);
-
-char __fastcall__ ChangeDiskDevice(char newdev);
-
-/* disk header offsets i.e. index curDirHead with these */
-#define OFF_TO_BAM      4
-#define OFF_DISK_NAME   144
-#define OFF_GS_DTYPE    189
-#define OFF_OP_TR_SC    171
-#define OFF_GS_ID       173
-/* disk errors reported in _oserror */
-#define ANY_FAULT       0xf0
-#define G_EOF           0
-#define NO_BLOCKS       1
-#define INV_TRACK       2
-#define INSUFF_SPACE    3
-#define FULL_DIRECTORY  4
-#define FILE_NOT_FOUND  5
-#define BAD_BAM         6
-#define UNOPENED_VLIR   7
-#define INV_RECORD      8
-#define OUT_OF_RECORDS  9
-#define STRUCT_MISMAT   10
-#define BFR_OVERFLOW    11
-#define CANCEL_ERR      12
-#define DEV_NOT_FOUND   13
-#define INCOMPATIBLE    14
-#define HDR_NOT_THERE   0x20
-#define NO_SYNC         0x21
-#define DBLK_NOT_THERE  0x22
-#define DAT_CHKSUM_ERR  0x23
-#define WR_VER_ERR      0x25
-#define WR_PR_ON        0x26
-#define HDR_CHKSUM_ERR  0x27
-#define DSK_ID_MISMAT   0x29
-#define BYTE_DEC_ERR    0x2e
-#define DOS_MISMATCH    0x73
-
-#endif
diff --git a/include/geos/gdlgbox.h b/include/geos/gdlgbox.h
deleted file mode 100644 (file)
index bca8903..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
-  GEOS dialog box functions
-
-  by Maciej 'YTM/Elysium' Witkowiak
-*/
-
-#ifndef _GDLGBOX_H
-#define _GDLGBOX_H
-
-char __fastcall__ DoDlgBox(const char *dboxstring);
-char RstrFrmDialogue(void);
-
-/* These are custom, predefined dialog boxes, I'm sure you'll find them usable
-   Most of them show 2 lines of text */
-
-char __fastcall__ DlgBoxYesNo(const char *line1, const char *line2);
-char __fastcall__ DlgBoxOkCancel(const char *line1, const char *line2);
-void __fastcall__ DlgBoxOk(const char *line1, const char *line2);
-char __fastcall__ DlgBoxGetString(char *myString, char strLength,
-                                  const char *line1, const char *line2);
-char __fastcall__ DlgBoxFileSelect(const char *classtxt, char ftype,
-                                   char *fname);
-
-/* This is a more general dialog box, works like printf in a window */
-char MessageBox(char mode, const char *format, ...);
-
-/* mode argument for MessageBox() */
-enum {
-    MB_EMPTY=0,
-    MB_OK,
-    MB_OKCANCEL,
-    MB_YESNO,
-    MB_LAST };
-
-/* Now the command string type */
-
-typedef void dlgBoxStr;
-
-/* and command string commands - macros */
-
-#define DB_DEFPOS(pattern) (char)(DEF_DB_POS | (pattern))
-#define DB_SETPOS(pattern,top,bot,left,right) \
-        (char)(SET_DB_POS | (pattern)), (char)(top), (char)(bot), \
-        (unsigned)(left), (unsigned)(right)
-#define DB_ICON(i,x,y)  (char)(i), (char)(x), (char)(y)
-#define DB_TXTSTR(x,y,text) (char)DBTXTSTR, (char)(x), (char)(y), (text)
-#define DB_VARSTR(x,y,ptr) (char)DBVARSTR, (char)(x), (char)(y), (char)(ptr)
-#define DB_GETSTR(x,y,ptr,length) (char)DBGETSTRING, (char)(x), (char)(y), (char)(ptr), (char)(length)
-#define DB_SYSOPV(ptr) (char)DBSYSOPV, (unsigned)(ptr)
-#define DB_GRPHSTR(ptr) (char)DBGRPHSTR, (unsigned)(ptr)
-#define DB_GETFILES(x,y) (char)DBGETFILES, (char)(x), (char)(y)
-#define DB_OPVEC(ptr) (char)DBOPVEC, (unsigned)(ptr)
-#define DB_USRICON(x,y,ptr) (char)DBUSRICON, (char)(x), (char)(y), (unsigned)(ptr)
-#define DB_USRROUT(ptr) (char)DB_USR_ROUT, (unsigned)(ptr)
-#define DB_END (char)NULL
-
-/*
-  part of constants below is used internally, but some are useful for macros above
-*/
-
-/* icons for DB_ICON */
-#define OK              1
-#define CANCEL          2
-#define YES             3
-#define NO              4
-#define OPEN            5
-#define DISK            6
-/* commands - internally used by command macros */
-#define DBTXTSTR        11
-#define DBVARSTR        12
-#define DBGETSTRING     13
-#define DBSYSOPV        14
-#define DBGRPHSTR       15
-#define DBGETFILES      16
-#define DBOPVEC         17
-#define DBUSRICON       18
-#define DB_USR_ROUT     19
-/* icons tabulation in standard window */
-#define DBI_X_0         1
-#define DBI_X_1         9
-#define DBI_X_2         17
-#define DBI_Y_0         8
-#define DBI_Y_1         40
-#define DBI_Y_2         72
-/* standard window size defaults */
-#define SET_DB_POS      0
-#define DEF_DB_POS      0x80
-#define DEF_DB_TOP      32
-#define DEF_DB_BOT      127
-#define DEF_DB_LEFT     64
-#define DEF_DB_RIGHT    255
-/* text tabulation in standard window */
-#define TXT_LN_1_Y      16
-#define TXT_LN_2_Y      32
-#define TXT_LN_3_Y      48
-#define TXT_LN_4_Y      64
-#define TXT_LN_5_Y      80
-#define TXT_LN_X        16
-/* system icons size */
-#define SYSDBI_HEIGHT   16
-#define SYSDBI_WIDTH    6
-/* dialogbox string offsets */
-#define OFF_DB_FORM     0
-#define OFF_DB_TOP      1
-#define OFF_DB_BOT      2
-#define OFF_DB_LEFT     3
-#define OFF_DB_RIGHT    5
-#define OFF_DB_1STCMD   7
-
-#endif
diff --git a/include/geos/gfile.h b/include/geos/gfile.h
deleted file mode 100644 (file)
index d7667d8..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-  GEOS filesystem functions
-
-  by Maciej 'YTM/Elysium' Witkowiak
-*/
-
-#ifndef _GFILE_H
-#define _GFILE_H
-
-#ifndef _GSTRUCT_H
-#include <geos/gstruct.h>
-#endif
-
-struct filehandle *Get1stDirEntry(void);
-struct filehandle *GetNxtDirEntry(void);
-
-char __fastcall__ FindFTypes(char *buffer, char ftype, char fmaxnum, const char *classtxt);
-
-char __fastcall__ GetFile(char flag, const char *fname,
-                          const char *loadaddr, const char *datadname, const char *datafname);
-char __fastcall__ FindFile(const char *fname);
-char __fastcall__ ReadFile(struct tr_se *myTrSe, char *buffer, unsigned flength);
-char __fastcall__ SaveFile(char skip, struct fileheader *myHeader);
-char __fastcall__ FreeFile(struct tr_se myTable[]);
-char __fastcall__ DeleteFile(const char *fname);
-char __fastcall__ RenameFile(const char *source, const char *target);
-
-char ReadByte(void);
-
-char __fastcall__ FollowChain(struct tr_se *startTrSe, char *buffer);
-char __fastcall__ GetFHdrInfo(struct filehandle *myFile);
-
-char __fastcall__ OpenRecordFile(const char *fname);
-char CloseRecordFile(void);
-char NextRecord(void);
-char PreviousRecord(void);
-char __fastcall__ PointRecord(char);
-char DeleteRecord(void);
-char InsertRecord(void);
-char AppendRecord(void);
-char __fastcall__ ReadRecord(char *buffer, unsigned flength);
-char __fastcall__ WriteRecord(const char *buffer, unsigned flength);
-char UpdateRecordFile(void);
-
-/* GEOS filetypes */
-#define NOT_GEOS        0
-#define BASIC           1
-#define ASSEMBLY        2
-#define DATA            3
-#define SYSTEM          4
-#define DESK_ACC        5
-#define APPLICATION     6
-#define APPL_DATA       7
-#define FONT            8
-#define PRINTER         9
-#define INPUT_DEVICE    10
-#define DISK_DEVICE     11
-#define SYSTEM_BOOT     12
-#define TEMPORARY       13
-#define AUTO_EXEC       14
-#define INPUT_128       15
-#define NUMFILETYPES    16
-/* supported structures */
-#define SEQUENTIAL      0
-#define VLIR            1
-/* DOS filetypes */
-#define DEL             0
-#define SEQ             1
-#define PRG             2
-#define USR             3
-#define REL             4
-#define CBM             5
-
-#endif
diff --git a/include/geos/ggraph.h b/include/geos/ggraph.h
deleted file mode 100644 (file)
index 961ec2d..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
-  GEOS graphic (non icon/menu/sprite) functions
-
-  by Maciej 'YTM/Elysium' Witkowiak
-*/
-
-#ifndef _GGRAPH_H
-#define _GGRAPH_H
-
-#ifndef _GSTRUCT_H
-#include <geos/gstruct.h>
-#endif
-
-void __fastcall__ SetPattern(char newpattern);
-
-void __fastcall__ HorizontalLine(char pattern, char y, unsigned xstart, unsigned xend);
-void __fastcall__ InvertLine(char y, unsigned xstart, unsigned xend);
-void __fastcall__ RecoverLine(char y, unsigned xstart, unsigned xend);
-void __fastcall__ VerticalLine(char pattern, char ystart, char yend, unsigned x);
-
-void __fastcall__ InitDrawWindow(struct window *myRectangle);
-void Rectangle(void);
-void __fastcall__ FrameRectangle(char pattern);
-void InvertRectangle(void);
-void ImprintRectangle(void);
-void RecoverRectangle(void);
-
-void __fastcall__ DrawLine(char mode, struct window *topBotCoords);
-
-void __fastcall__ DrawPoint(char mode, struct pixel *myPixel);
-char __fastcall__ TestPoint(struct pixel *myPixel);
-
-void __fastcall__ PutChar(char character, char y, unsigned x);
-void __fastcall__ PutString(char *myString, char y, unsigned x);
-void __fastcall__ PutDecimal(char style, unsigned value, char y, unsigned x);
-
-char __fastcall__ GetCharWidth(char character);
-void __fastcall__ LoadCharSet(struct fontdesc *myFont);
-void UseSystemFont(void);
-
-void __fastcall__ BitmapUp(struct iconpic *myIcon);
-void __fastcall__ BitmapClip(char skipl, char skipr, unsigned skiptop,
-                             struct iconpic *myIcon);
-void __fastcall__ BitOtherClip(void *proc1, void *proc2, char skipl,
-                               char skipr, unsigned skiptop,
-                               struct iconpic *myIcon);
-
-void __fastcall__ GraphicsString(char *myGfxString);
-
-/* VIC colour constants */
-#define BLACK           0
-#define WHITE           1
-#define RED             2
-#define CYAN            3
-#define PURPLE          4
-#define GREEN           5
-#define BLUE            6
-#define YELLOW          7
-#define ORANGE          8
-#define BROWN           9
-#define LTRED           10
-#define DKGREY          11
-#define GREY            12
-#define MEDGREY         12
-#define LTGREEN         13
-#define LTBLUE          14
-#define LTGREY          15
-/* VIC memory banks - lowest 2 bits of cia2base+0 */
-#define GRBANK0         3
-#define GRBANK1         2
-#define GRBANK2         1
-#define GRBANK3         0
-/* VIC screen sizes */
-#define VIC_X_POS_OFF   24
-#define VIC_Y_POS_OFF   50
-#ifdef __GEOS_CBM__
-#define SC_BYTE_WIDTH   40
-#define SC_PIX_HEIGHT   200
-#define SC_PIX_WIDTH    320
-#define SC_SIZE         8000
-#else
-#define SC_BYTE_WIDTH   70
-#define SC_PIX_HEIGHT   192
-#define SC_PIX_WIDTH    560
-#define SC_SIZE         13440
-#endif
-/* VDC screen constants */
-#define SCREENBYTEWIDTH         80
-#define SCREENPIXELWIDTH        640
-/* control characters for use as numbers, not characters */
-#define BACKSPACE       8
-#define FORWARDSPACE    9
-#define TAB             9
-#define LF              10
-#define HOME            11
-#define PAGE_BREAK      12
-#define UPLINE          12
-#define CR              13
-#define ULINEON         14
-#define ULINEOFF        15
-#define ESC_GRAPHICS    16
-#define ESC_RULER       17
-#define REV_ON          18
-#define REV_OFF         19
-#define GOTOX           20
-#define GOTOY           21
-#define GOTOXY          22
-#define NEWCARDSET      23
-#define BOLDON          24
-#define ITALICON        25
-#define OUTLINEON       26
-#define PLAINTEXT       27
-/* control characters for use in
-   strings: eg: str[10]=CBOLDON "Hello"; */
-#define CCR             "\015"
-#define CULINEON        "\016"
-#define CULINEOFF       "\017"
-#define CREV_ON         "\022"
-#define CREV_OFF        "\023"
-#define CBOLDON         "\030"
-#define CITALICON       "\031"
-#define COUTLINEON      "\032"
-#define CPLAINTEXT      "\033"
-
-/*values of currentMode */
-/* bitNumbers */
-#define UNDERLINE_BIT   7
-#define BOLD_BIT        6
-#define REVERSE_BIT     5
-#define ITALIC_BIT      4
-#define OUTLINE_BIT     3
-#define SUPERSCRIPT_BIT 2
-#define SUBSCRIPT_BIT   1
-/* bitMasks */
-#define SET_UNDERLINE   0x80
-#define SET_BOLD        0x40
-#define SET_REVERSE     0x20
-#define SET_ITALIC      0x10
-#define SET_OUTLINE     0x08
-#define SET_SUPERSCRIPT 0x04
-#define SET_SUBSCRIPT   0x02
-#define SET_PLAINTEXT   0
-/* values of dispBufferOn */
-#define ST_WRGS_FORE    0x20
-#define ST_WR_BACK      0x40
-#define ST_WR_FORE      0x80
-/* PutDecimal parameters */
-/* leading zeros? */
-#define SET_NOSURPRESS  0
-#define SET_SURPRESS    0x40
-/* justification */
-#define SET_RIGHTJUST   0
-#define SET_LEFTJUST    0x80
-/* C128 x-extension flags */
-#define ADD1_W          0x2000
-#define DOUBLE_B        0x80
-#define DOUBLE_W        0x8000
-/* DrawLine/DrawPoint mode values */
-#define DRAW_ERASE      0x00
-#define DRAW_DRAW       0x40
-#define DRAW_COPY       0x80
-
-typedef void graphicStr;
-
-#define MOVEPENTO(x,y) (char)1, (unsigned)(x), (char)(y)
-#define LINETO(x,y) (char)2, (unsigned)(x), (char)(y)
-#define RECTANGLETO(x,y) (char)3, (unsigned)(x), (char)(y)
-#define NEWPATTERN(p) (char)5, (char)(p)
-#define FRAME_RECTO(x,y) (char)7, (unsigned)(x), (char)(y)
-#define PEN_X_DELTA(x) (char)8, (unsigned)(x)
-#define PEN_Y_DELTA(y) (char)9, (char)(y)
-#define PEN_XY_DELTA(x,y) (char)10, (unsigned)(x), (char)(y)
-#define GSTR_END (char)NULL
-/* ESC_PUTSTRING can't be implemented - it needs text, not pointer to it
-   #define ESC_PUTSTRING(x,y,text) (char)6, (unsigned)(x), (char)(y), (text), (char)NULL
-*/
-
-#endif
diff --git a/include/geos/gmemory.h b/include/geos/gmemory.h
deleted file mode 100644 (file)
index 3fba5cb..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-  GEOS memory and string functions
-
-  by Maciej 'YTM/Elysium' Witkowiak
-*/
-
-#ifndef _GMEMORY_H
-#define _GMEMORY_H
-
-#ifndef _GSTRUCT_H
-#include <geos/gstruct.h>
-#endif
-
-void __fastcall__ CopyString(char *dest, const char *source);
-char __fastcall__ CmpString(const char *dest, const char *source);
-void __fastcall__ CopyFString(char len, char *dest, const char *source);
-char __fastcall__ CmpFString(char len, char *dest, const char *source); 
-
-unsigned __fastcall__ CRC(const char *buffer, unsigned len);
-void* __fastcall__ ClearRam(char *dest, unsigned len);
-void* __fastcall__ FillRam(char *dest, char what, unsigned len);
-
-void* __fastcall__ MoveData(char *dest, const char *source, unsigned len);
-
-void __fastcall__ InitRam(char *myInitTab);
-
-void __fastcall__ StashRAM(char REUBank, unsigned len, char *reuaddy, const char *cpuaddy);
-void __fastcall__ FetchRAM(char REUBank, unsigned len, const char *reuaddy, char *cpuaddy);
-void __fastcall__ SwapRAM(char REUBank, unsigned len, char *reuaddy, char *cpuaddy);
-char __fastcall__ VerifyRAM(char REUBank, unsigned len, const char *reuaddy, const char *cpuaddy);
-
-#endif
diff --git a/include/geos/gmenu.h b/include/geos/gmenu.h
deleted file mode 100644 (file)
index 3175b6c..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-  GEOS menu and icon functions
-
-  by Maciej 'YTM/Elysium' Witkowiak
-*/
-
-#ifndef _GMENU_H
-#define _GMENU_H
-
-#ifndef _GSTRUCT_H
-#include <geos/gstruct.h>
-#endif
-
-void __fastcall__ DoMenu(struct menu *myMenu);
-void ReDoMenu(void);
-void RecoverMenu(void);
-void RecoverAllMenus(void);
-void DoPreviousMenu(void);
-void GotoFirstMenu(void);
-
-void __fastcall__ DoIcons(struct icontab *myIconTab);
-
-/* DoMenu - menutypes */
-#define MENU_ACTION     0x00
-#define DYN_SUB_MENU    0x40
-#define SUB_MENU        0x80
-#define HORIZONTAL      0x00
-#define VERTICAL        0x80
-/* menu string offsets */
-#define OFF_MY_TOP      0
-#define OFF_MY_BOT      1
-#define OFF_MX_LEFT     2
-#define OFF_MX_RIGHT    4
-#define OFF_NUM_M_ITEMS 6
-#define OFF_1ST_M_ITEM  7
-/* icon string offsets */
-#define OFF_NM_ICNS     0
-#define OFF_IC_XMOUSE   1
-#define OFF_IC_YMOUSE   3
-#define OFF_PIC_ICON    0
-#define OFF_X_ICON_POS  2
-#define OFF_Y_ICON_POS  3
-#define OFF_WDTH_ICON   4
-#define OFF_HEIGHT_ICON 5
-#define OFF_SRV_RT_ICON 6
-#define OFF_NX_ICON     8
-/* icons, menus status flags    */
-#define ST_FLASH        0x80
-#define ST_INVERT       0x40
-#define ST_LD_AT_ADDR   0x01
-#define ST_LD_DATA      0x80
-#define ST_PR_DATA      0x40
-#define ST_WR_PR        0x40
-
-#endif
diff --git a/include/geos/gprocess.h b/include/geos/gprocess.h
deleted file mode 100644 (file)
index 6fab2ec..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-  GEOS processes (~multitasking) functions
-
-  by Maciej 'YTM/Elysium' Witkowiak
-*/
-
-#ifndef _GPROCESS_H
-#define _GPROCESS_H
-
-#ifndef _GSTRUCT_H
-#include <geos/gstruct.h>
-#endif
-
-void __fastcall__ InitProcesses(char number, struct process *proctab);
-void __fastcall__ RestartProcess(char number);
-void __fastcall__ EnableProcess(char number);
-void __fastcall__ BlockProcess(char number);
-void __fastcall__ UnblockProcess(char number);
-void __fastcall__ FreezeProcess(char number);
-void __fastcall__ UnfreezeProcess(char number);
-
-void __fastcall__ Sleep(unsigned jiffies);
-
-#endif
diff --git a/include/geos/gsprite.h b/include/geos/gsprite.h
deleted file mode 100644 (file)
index 9679e9f..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-  GEOS mouse and sprite functions
-
-  by Maciej 'YTM/Elysium' Witkowiak
-*/
-
-#ifndef _GSPRITE_H
-#define _GSPRITE_H
-
-void StartMouseMode(void);
-void ClearMouseMode(void);
-void MouseUp(void);
-void MouseOff(void);
-char __fastcall__ IsMseInRegion(struct window *region);
-
-void __fastcall__ DrawSprite(char spritenum, const char *spritepic);
-void __fastcall__ PosSprite(char spritenum, struct pixel *position);
-void __fastcall__ EnablSprite(char spritenum);
-void __fastcall__ DisablSprite(char spritenum);
-
-void __fastcall__ InitTextPrompt(char height);
-void __fastcall__ PromptOn(struct pixel *position);
-void PromptOff(void);
-char GetNextChar(void);
-
-/* keyboard constants */
-#define KEY_F1          1
-#define KEY_F2          2
-#define KEY_F3          3
-#define KEY_F4          4
-#define KEY_F5          5
-#define KEY_F6          6
-#define KEY_NOSCRL      7
-#define KEY_ENTER       13
-#define KEY_F7          14
-#define KEY_F8          15
-#define KEY_HOME        18
-#define KEY_CLEAR       19
-#define KEY_LARROW      20
-#define KEY_UPARROW     21
-#define KEY_STOP        22
-#define KEY_RUN         23
-#define KEY_BPS         24
-#define KEY_HELP        25
-#define KEY_ALT         26
-#define KEY_ESC         27
-#define KEY_INSERT      28
-#define KEY_INVALID     31
-#define KEY_LEFT        BACKSPACE
-#ifdef __GEOS_CBM__
-#define KEY_UP          16
-#define KEY_DOWN        17
-#define KEY_DELETE      29
-#define KEY_RIGHT       30
-#else
-#define KEY_UP          11
-#define KEY_DOWN        10
-#define KEY_DELETE     127
-#define KEY_RIGHT       21
-#endif
-
-/* values of faultData - pointer position vs. mouseWindow */
-/* bit numbers */
-#define OFFTOP_BIT      7
-#define OFFBOTTOM_BIT   6
-#define OFFLEFT_BIT     5
-#define OFFRIGHT_BIT    4
-#define OFFMENU_BIT     3
-/* bit masks */
-#define SET_OFFTOP      0x80
-#define SET_OFFBOTTOM   0x40
-#define SET_OFFLEFT     0x20
-#define SET_OFFRIGHT    0x10
-#define SET_OFFMENU     0x08
-
-/* mouseOn */
-/* bit numbers */
-#define MOUSEON_BIT     7
-#define MENUON_BIT      6
-#define ICONSON_BIT     5
-/* bit masks */
-#define SET_MSE_ON      0x80
-#define SET_MENUON      0x40
-#define SET_ICONSON     0x20
-
-/* pressFlag */
-/* bit numbers */
-#define KEYPRESS_BIT    7
-#define INPUT_BIT       6
-#define MOUSE_BIT       5
-/* bit masks */
-#define SET_KEYPRESS    0x80
-#define SET_INPUTCHG    0x40
-#define SET_MOUSE       0x20
-
-#endif
diff --git a/include/geos/gstruct.h b/include/geos/gstruct.h
deleted file mode 100644 (file)
index 9e5f0dd..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
-  GEOS structs
-
-  by Maciej 'YTM/Elysium' Witkowiak
-*/
-
-/*
-   apart from initializing data, structures below can be used to
-   speed up access to data and let cc65 to generate better code
-   e.g. if you have menu defined as TopMenu and you want to change the number of
-   menu items use:
-    ((struct menu*)&TopMenu)->number=newNumber;
-   This will be translated into single lda/sta pair
-*/
-
-#ifndef _GSTRUCT_H
-#define _GSTRUCT_H
-
-typedef void (*void_func) (void);
-
-struct s_date {                 /* system date & time */
-        char s_year;
-        char s_month;
-        char s_day;
-        char s_hour;
-        char s_minutes;
-        char s_seconds;
-};
-
-struct tr_se {                  /* track and sector */
-        char track;
-        char sector;
-};
-
-struct fileheader {             /* header block (like fileHeader) */
-        struct tr_se n_block;
-        char icon_desc[3];
-        char icon_pic[63];
-        char dostype;
-        char type;
-        char structure;
-        unsigned load_address;
-        unsigned end_address;
-        unsigned exec_address;
-        char class_name[19];
-        char column_flag;
-        char author[63];
-        char note[96];
-};
-
-#ifdef __GEOS_CBM__
-
-struct f_date {                 /* date in filedesctiptor */
-        char f_year;
-        char f_month;
-        char f_day;
-        char f_hour;
-        char f_minute;
-};
-
-struct filehandle {             /* filehandle in directory sectors */
-        char dostype;           /* or in dirEntryBuf               */
-        struct tr_se n_block;
-        char name[16];
-        struct tr_se header;
-        char structure;
-        char type;
-        struct f_date date;
-        unsigned size;
-};
-
-#else /* #ifdef __GEOS_CBM__ */
-
-struct f_date {                 /* date in filedesctiptor */
-        unsigned f_day:5;
-        unsigned f_month:4;
-        unsigned f_year:7;
-        char f_minute;
-        char f_hour;
-};
-
-struct filehandle {             /* filehandle in directory sectors */
-        unsigned name_len:4;    /* or in dirEntryBuf               */
-        unsigned structure:4;
-        char name[15];
-        char type;
-        struct tr_se n_block;
-        unsigned size;
-        char byte_size[3];
-        struct f_date date;
-        char version;
-        char min_version;
-        char access;
-        struct tr_se header;
-        struct f_date mod_date;
-        struct tr_se dir_head;
-};
-
-#endif /* #ifdef __GEOS_CBM__ */
-
-struct pixel {                  /* describes point              */
-        unsigned x;
-        char y;
-};
-
-struct fontdesc {               /* describes font               */
-        char baseline;
-        char width;
-        char height;
-        char *index_tbl;
-        char *data_ptr;
-};
-
-struct window {                 /* describes screen region      */
-        char top;
-        char bot;
-        unsigned left;
-        unsigned right;
-};
-
-struct VLIR_info {              /* VLIR information             */
-        char curRecord;         /* currently only used in VLIR  */
-        char usedRecords;       /* as system info (curRecord is mainly of your interest */
-        char fileWritten;
-        unsigned fileSize;
-};
-
-struct process {                /* process info, declare table of that type */
-        unsigned pointer;       /* (like: struct process proctab[2]=...    */
-        unsigned jiffies;       /* last entry HAVE TO BE {0,0}              */
-};
-
-struct iconpic {                /* icon/encoded bitmap description          */
-        char *pic_ptr;          /* ptr to a photo scrap (or encoded bitmap) */
-        char x;                 /* position in cards (*8 pixels)            */
-        char y;
-        char width;             /* in cards                                 */
-        char heigth;            /* in lines (pixels)                        */
-};
-
-struct icondef {                /* icon definition for DoIcons              */
-        char *pic_ptr;          /* ptr to a photo scrap (or encoded bitmap) */
-        char x;                 /* position in cards (*8 pixels)            */
-        char y;
-        char width;             /* of icon (in cards)                       */
-        char heigth;            /* of icon in lines (pixels)                */
-        unsigned proc_ptr;      /* pointer to function handling that icon   */
-};
-
-struct icontab {
-        char number;            /* number of declared icons                 */
-        struct pixel mousepos;  /* position of mouse after DoIcons          */
-        struct icondef tab[];   /* table of size declared by icontab.number */
-};
-
-struct menuitem {
-        char *name;
-        char type;
-        void *rest;             /* may be ptr to function, or ptr to struct menu (submenu) */
-};
-
-struct menu {
-        struct window size;
-        char number;
-        struct menuitem items[];
-};
-
-struct inittab {                /* use struct inittab mytab[n] for initram              */
-        unsigned ptr;           /* ptr to 1st byte                                      */
-        char number;            /* number of following bytes                            */
-        char values[];          /* actual string of bytes                               */
-};
-
-#endif
diff --git a/include/geos/gsym.h b/include/geos/gsym.h
deleted file mode 100644 (file)
index 0850466..0000000
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
-  GEOS system addresses and locations
-
-  reassembled by Maciej 'YTM/Elysium' Witkowiak
-*/
-
-#ifndef _GSYM_H
-#define _GSYM_H
-
-#ifndef _GSTRUCT_H
-#include <geos/gstruct.h>
-#endif
-
-#define r0              (*(unsigned*)(R_BASE + 0x00))
-#define r0L             (*(char*)(R_BASE + 0x00))
-#define r0H             (*(char*)(R_BASE + 0x01))
-#define r1              (*(unsigned*)(R_BASE + 0x02))
-#define r1L             (*(char*)(R_BASE + 0x02))
-#define r1H             (*(char*)(R_BASE + 0x03))
-#define drawWindow      (*(struct window*)(R_BASE + 0x04))
-#define r2              (*(unsigned*)(R_BASE + 0x04))
-#define r2L             (*(char*)(R_BASE + 0x04))
-#define r2H             (*(char*)(R_BASE + 0x05))
-#define r3              (*(unsigned*)(R_BASE + 0x06))
-#define r3L             (*(char*)(R_BASE + 0x06))
-#define r3H             (*(char*)(R_BASE + 0x07))
-#define r4              (*(unsigned*)(R_BASE + 0x08))
-#define r4L             (*(char*)(R_BASE + 0x08))
-#define r4H             (*(char*)(R_BASE + 0x09))
-#define r5              (*(unsigned*)(R_BASE + 0x0a))
-#define r5L             (*(char*)(R_BASE + 0x0a))
-#define r5H             (*(char*)(R_BASE + 0x0b))
-#define r6              (*(unsigned*)(R_BASE + 0x0c))
-#define r6L             (*(char*)(R_BASE + 0x0c))
-#define r6H             (*(char*)(R_BASE + 0x0d))
-#define r7              (*(unsigned*)(R_BASE + 0x0e))
-#define r7L             (*(char*)(R_BASE + 0x0e))
-#define r7H             (*(char*)(R_BASE + 0x0f))
-#define r8              (*(unsigned*)(R_BASE + 0x10))
-#define r8L             (*(char*)(R_BASE + 0x10))
-#define r8H             (*(char*)(R_BASE + 0x11))
-#define r9              (*(unsigned*)(R_BASE + 0x12))
-#define r9L             (*(char*)(R_BASE + 0x12))
-#define r9H             (*(char*)(R_BASE + 0x13))
-#define r10             (*(unsigned*)(R_BASE + 0x14))
-#define r10L            (*(char*)(R_BASE + 0x14))
-#define r10H            (*(char*)(R_BASE + 0x15))
-#define r11             (*(unsigned*)(R_BASE + 0x16))
-#define r11L            (*(char*)(R_BASE + 0x16))
-#define r11H            (*(char*)(R_BASE + 0x17))
-#define r12             (*(unsigned*)(R_BASE + 0x18))
-#define r12L            (*(char*)(R_BASE + 0x18))
-#define r12H            (*(char*)(R_BASE + 0x19))
-#define r13             (*(unsigned*)(R_BASE + 0x1a))
-#define r13L            (*(char*)(R_BASE + 0x1a))
-#define r13H            (*(char*)(R_BASE + 0x1b))
-#define r14             (*(unsigned*)(R_BASE + 0x1c))
-#define r14L            (*(char*)(R_BASE + 0x1c))
-#define r14H            (*(char*)(R_BASE + 0x1d))
-#define r15             (*(unsigned*)(R_BASE + 0x1e))
-#define r15L            (*(char*)(R_BASE + 0x1e))
-#define r15H            (*(char*)(R_BASE + 0x1f))
-
-#ifdef __GEOS_CBM__
-
-#define nameBuf         char[17]
-#define blockBuf        char[256]
-
-#define CPU_DDR         (*(char*)0x00)
-#define CPU_DATA        (*(char*)0x01)
-
-#define R_BASE          0x02
-
-#define curPattern      (*(unsigned*)0x22)
-#define string          (*(unsigned*)0x24)
-#define curFontDesc     (*(struct fontdesc*)0x26)
-#define currentMode     (*(char*)0x2e)
-#define dispBufferOn    (*(char*)0x2f)
-#define mouseOn         (*(char*)0x30)
-#define msePicPtr       (*(unsigned*)0x31)
-#define curWindow       (*(struct window*)0x33)
-#define pressFlag       (*(char*)0x39)
-#define mousePos        (*(struct pixel*)0x3a)
-#define returnAddress   (*(unsigned*)0x3d)
-#define graphMode       (*(char*)0x3f)
-#define STATUS          (*(char*)0x90)
-#define curDevice       (*(char*)0xba)
-
-#define irqvec          (*(void_func*)0x0314)
-#define bkvec           (*(void_func*)0x0316)
-#define nmivec          (*(void_func*)0x0318)
-
-#define APP_RAM         ((char*)0x0400)
-#define BACK_SCR_BASE   ((char*)0x6000)
-#define PRINTBASE       ((char*)0x7900)
-#define OS_VARS         ((char*)0x8000)
-
-#define diskBlkBuf      ((blockBuf)0x8000)
-#define fileHeader      (*(struct fileheader*)0x8100)
-#define curDirHead      ((blockBuf)0x8200)
-#define fileTrScTab     ((struct tr_se[128])0x8300)
-#define dirEntryBuf     (*(struct filehandle*)0x8400)
-
-#define DrACurDkNm      ((nameBuf)0x841e)
-#define DrBCurDkNm      ((nameBuf)0x8430)
-#define dataFileName    ((nameBuf)0x8442)
-#define dataDiskName    ((nameBuf)0x8453)
-#define PrntFileName    ((nameBuf)0x8465)
-#define PrntDiskName    ((nameBuf)0x8476)
-
-#define curDrive        (*(char*)0x8489)
-#define diskOpenFlg     (*(char*)0x848a)
-#define isGEOS          (*(char*)0x848b)
-#define interleave      (*(char*)0x848c)
-#define NUMDRV          (*(char*)0x848d)
-
-#define driveType       ((char[4])0x848e)
-#define turboFlags      ((char[4])0x8492)
-
-#define VLIRInfo        (*(struct VLIR_info*)0x8496)
-
-#define appMain         (*(void_func*)0x849b)
-#define intTopVector    (*(void_func*)0x849d)
-#define intBotVector    (*(void_func*)0x849f)
-#define mouseVector     (*(void_func*)0x84a1)
-#define keyVector       (*(void_func*)0x84a3)
-#define inputVector     (*(void_func*)0x84a5)
-#define mouseFaultVec   (*(void_func*)0x84a7)
-#define otherPressVec   (*(void_func*)0x84a9)
-#define StringFaultVec  (*(void_func*)0x84ab)
-#define alarmTmtVector  (*(void_func*)0x84ad)
-#define BRKVector       (*(void_func*)0x84af)
-#define RecoverVector   (*(void_func*)0x84b1)
-
-#define selectionFlash  (*(char*)0x84b3)
-#define alphaFlag       (*(char*)0x84b4)
-#define iconSelFlg      (*(char*)0x84b5)
-#define faultData       (*(char*)0x84b6)
-#define menuNumber      (*(char*)0x84b7)
-#define mouseWindow     (*(struct window*)0x84b8)
-#define stringXY        (*(struct pixel*)0x84be)
-#define mousePicData    (*(char*)0x84c1)
-
-#define maxMouseSpeed   (*(char*)0x8501)
-#define minMouseSpeed   (*(char*)0x8502)
-#define mouseAccel      (*(char*)0x8503)
-#define keyData         (*(char*)0x8504)
-#define mouseData       (*(char*)0x8505)
-#define inputData       (*(char*)0x8506)
-#define mouseSpeed      (*(char*)0x8507)
-#define random          (*(char*)0x850a)
-#define saveFontTab     (*(struct fontdesc*)0x850c)
-
-#define dblClickCount   (*(char*)0x8515)
-#define system_date     (*(struct s_date*)0x8516)
-#define alarmSetFlag    (*(char*)0x851c)
-#define sysDBData       (*(char*)0x851d)
-#define screencolors    (*(char*)0x851e)
-#define dlgBoxRamBuf    (*(char*)0x851f)
-
-#define savedmoby2      (*(char*)0x88bb)
-#define scr80polar      (*(char*)0x88bc)
-#define scr80colors     (*(char*)0x88bd)
-#define vdcClrMode      (*(char*)0x88be)
-#define driveData       ((char[4])0x88bf)
-#define ramExpSize      (*(char*)0x88c3)
-#define sysRAMFlg       (*(char*)0x88c4)
-#define firstBoot       (*(char*)0x88c5)
-#define curType         (*(char*)0x88c6)
-#define ramBase         (*(char*)0x88c7)
-#define inputDevName    ((nameBuf)0x88cb)
-#define DrCCurDkNm      ((nameBuf)0x88dc)
-#define DrDCurDkNm      ((nameBuf)0x88ee)
-#define dir2Head        ((blockBuf)0x8900)
-#define SPRITE_PICS     ((char*)0x8a00)
-#define sprpic          ((char[8][64])0x8a00)
-#define COLOR_MATRIX    ((char[1000])0x8c00)
-#define objPointer      ((char[8])0x8ff8)
-
-#define DISK_BASE       ((char*)0x9000)
-#define SCREEN_BASE     ((char*)0xa000)
-#define OS_ROM          ((char*)0xc000)
-#define OS_JUMPTAB      ((char*)0xc100)
-#define EXP_BASE        ((char*)0xdf00)
-#define MOUSE_BASE_128  ((char*)0xfd00)
-#define MOUSE_JMP_128   ((char*)0xfd00)
-#define END_MOUSE_128   ((char*)0xfe80)
-#define MOUSE_BASE      ((char*)0xfe80)
-#define MOUSE_JMP       ((char*)0xfe80)
-
-#define config          (*(char*)0xff00)
-#define END_MOUSE       ((char*)0xfffa)
-
-#define NMI_VECTOR      (*(void_func*)0xfffa)
-#define RESET_VECTOR    (*(void_func*)0xfffc)
-#define IRQ_VECTOR      (*(void_func*)0xfffe)
-
-#define vicbase         ((char*)0xd000)
-#define sidbase         ((char*)0xd400)
-#define mmu             ((char*)0xd500)
-#define VDC             ((char*)0xd600)
-#define ctab            ((char*)0xd800)
-#define cia1base        ((char*)0xdc00)
-#define cia2base        ((char*)0xdd00)
-
-#define mob0xpos        (*(char*)0xd000)
-#define mob0ypos        (*(char*)0xd001)
-#define mob1xpos        (*(char*)0xd002)
-#define mob1ypos        (*(char*)0xd003)
-#define mob2xpos        (*(char*)0xd004)
-#define mob2ypos        (*(char*)0xd005)
-#define mob3xpos        (*(char*)0xd006)
-#define mob3ypos        (*(char*)0xd007)
-#define mob4xpos        (*(char*)0xd008)
-#define mob4ypos        (*(char*)0xd009)
-#define mob5xpos        (*(char*)0xd00a)
-#define mob5ypos        (*(char*)0xd00b)
-#define mob6xpos        (*(char*)0xd00c)
-#define mob6ypos        (*(char*)0xd00d)
-#define mob7xpos        (*(char*)0xd00e)
-#define mob7ypos        (*(char*)0xd00f)
-#define msbxpos         (*(char*)0xd010)
-#define grcntrl1        (*(char*)0xd011)
-#define rasreg          (*(char*)0xd012)
-#define lpxpos          (*(char*)0xd013)
-#define lpypos          (*(char*)0xd014)
-#define mobenble        (*(char*)0xd015)
-#define grcntrl2        (*(char*)0xd016)
-#define grmemptr        (*(char*)0xd018)
-#define grirq           (*(char*)0xd019)
-#define grirqen         (*(char*)0xd01a)
-#define moby2           (*(char*)0xd017)
-#define mobprior        (*(char*)0xd01b)
-#define mobmcm          (*(char*)0xd01c)
-#define mobx2           (*(char*)0xd01d)
-#define mobmobcol       (*(char*)0xd01e)
-#define mobbakcol       (*(char*)0xd01f)
-#define extclr          (*(char*)0xd020)
-#define bakclr0         (*(char*)0xd021)
-#define bakclr1         (*(char*)0xd022)
-#define bakclr2         (*(char*)0xd023)
-#define bakclr3         (*(char*)0xd024)
-#define mcmclr0         (*(char*)0xd025)
-#define mcmclr1         (*(char*)0xd026)
-#define mob0clr         (*(char*)0xd027)
-#define mob1clr         (*(char*)0xd028)
-#define mob2clr         (*(char*)0xd029)
-#define mob3clr         (*(char*)0xd02a)
-#define mob4clr         (*(char*)0xd02b)
-#define mob5clr         (*(char*)0xd02c)
-#define mob6clr         (*(char*)0xd02d)
-#define mob7clr         (*(char*)0xd02e)
-#define keyreg          (*(char*)0xd02f)
-#define clkreg          (*(char*)0xd030)
-
-#define vdcreg          (*(char*)0xd600)
-#define vdcdata         (*(char*)0xd601)
-
-#else /* #ifdef __GEOS_CBM__ */
-
-#define nameBuf         char[16]
-#define blockBuf        char[512]
-
-#define R_BASE          0x00
-
-#define curPattern      (*(unsigned*)0x022c)
-#define string          (*(unsigned*)0x53)
-#define curFontDesc     (*(struct fontdesc*)0x0218)
-#define currentMode     (*(char*)0x021c)
-#define dispBufferOn    (*(char*)0x021d)
-#define mouseOn         (*(char*)0x5d)
-#define curWindow       (*(struct window*)0x021e)
-#define pressFlag       (*(char*)0x08fe)
-#define mousePos        (*(struct pixel*)0x0241)
-#define returnAddress   (*(unsigned*)0x64)
-
-#define diskBlkBuf      ((blockBuf)0xf659)
-#define fileHeader      (*(struct fileheader*)0xf859)
-#define curDirHead      ((char[39])0xfa80)
-#define dirEntryBuf     (*(struct filehandle*)0xfa59)
-
-#define DrACurDkNm      ((nameBuf)0xfaa7)
-#define DrBCurDkNm      ((nameBuf)0xfab7)
-#define dataFileName    ((nameBuf)0x02a4)
-#define dataDiskName    ((nameBuf)0x02b4)
-#define PrntFileName    ((nameBuf)0x08ac)
-
-#define curDrive        (*(char*)0xf60d)
-#define diskOpenFlg     (*(char*)0xf617)
-#define NUMDRV          (*(char*)0xf60e)
-
-#define driveType       ((char[4])0xfaf3)
-
-#define VLIRInfo        (*(struct VLIR_info*)0xf618)
-
-#define appMain         (*(void_func*)0x0200)
-#define intTopVector    (*(void_func*)0x0202)
-#define intBotVector    (*(void_func*)0x0204)
-#define mouseVector     (*(void_func*)0x0206)
-#define keyVector       (*(void_func*)0x0208)
-#define inputVector     (*(void_func*)0x020a)
-#define mouseFaultVec   (*(void_func*)0x020c)
-#define otherPressVec   (*(void_func*)0x020e)
-#define StringFaultVec  (*(void_func*)0x0210)
-#define alarmTmtVector  (*(void_func*)0x0212)
-#define BRKVector       (*(void_func*)0x0214)
-#define RecoverVector   (*(void_func*)0x0216)
-
-#define selectionFlash  (*(char*)0x0224)
-#define alphaFlag       (*(char*)0x0225)
-#define iconSelFlg      (*(char*)0x0226)
-#define faultData       (*(char*)0x0227)
-#define menuNumber      (*(char*)0x0228)
-#define mouseWindow     (*(struct window*)0x57)
-#define stringXY        (*(struct pixel*)0x022e)
-
-#define maxMouseSpeed   (*(char*)0x027d)
-#define minMouseSpeed   (*(char*)0x027e)
-#define mouseAccel      (*(char*)0x027f)
-#define keyData         (*(char*)0x0245)
-#define mouseData       (*(char*)0x0246)
-#define inputData       (*(char*)0x0247)
-#define random          (*(char*)0x024c)
-#define saveFontTab     (*(struct fontdesc*)0x024e)
-
-#define dblClickCount   (*(char*)0x0258)
-#define system_date     (*(struct s_date*)0xf200)
-#define sysDBData       (*(char*)0x0259)
-#define dlgBoxRamBuf    (*(char*)0xf381)
-
-#define firstBoot       (*(char*)0x0281)
-#define inputDevName    ((nameBuf)0x08cc)
-#define DrCCurDkNm      ((nameBuf)0xfac7)
-#define DrDCurDkNm      ((nameBuf)0xfad7)
-
-#define mobenble        (*(char*)0x0818)
-#define moby2           (*(char*)0x081a)
-#define mobx2           (*(char*)0x0819)
-
-#endif /* #ifdef __GEOS_CBM__ */
-
-#endif
diff --git a/include/geos/gsys.h b/include/geos/gsys.h
deleted file mode 100644 (file)
index 284c38b..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
-  GEOS system functions
-
-  by Maciej 'YTM/Elysium' Witkowiak
-*/
-
-#ifndef _GSYS_H
-#define _GSYS_H
-
-void FirstInit(void);
-void InitForIO(void);
-void DoneWithIO(void);
-void MainLoop(void);
-void EnterDeskTop(void);
-void ToBASIC(void);
-void Panic(void);
-
-void __fastcall__ CallRoutine(void *myRoutine);
-
-unsigned GetSerialNumber(void);
-char GetRandom(void);
-
-void __fastcall__ SetDevice(char newdev);
-
-char get_ostype(void);
-
-/* possible return values of get_ostype, machine and version flags will
-   be combined with OR */
-  /* machine flags */
-#define GEOS64          0x00
-#define GEOS4           0x04    /* plus4 geos is not or'ed with version */
-#define GEOS128         0x80
-  /* version flags */
-#define GEOS_V10        0x10
-#define GEOS_V11        0x11
-#define GEOS_V12        0x12    /* ??? not sure */
-#define GEOS_V20        0x20
-#define WHEELS          0x40    /* only Wheels? */
-
-char get_tv(void);
-
-/* possible return values of get_tv, these flags will be combined
-   note that columns state can be changed during runtime and get_tv
-   always returns the current state */
-#define COLUMNS40       0x00
-#define COLUMNS80       0x01
-#define TV_PAL          0x00
-#define TV_NTSC         0x80
-
-#endif
diff --git a/include/inttypes.h b/include/inttypes.h
deleted file mode 100644 (file)
index 65003f8..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                inttypes.h                                 */
-/*                                                                           */
-/*                    Format conversion of integer types                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* Note: This file is not fully ISO 9899-1999 compliant because cc65 lacks
-** a 64 bit data types and is not able to return structs > 4 bytes. The
-** declarations have been adjusted accordingly or left out.
-*/
-
-
-
-#ifndef _INTTYPES_H
-#define _INTTYPES_H
-
-
-
-/* inttypes.h must always include stdint.h */
-#ifndef _STDINT_H
-#include <stdint.h>
-#endif
-
-
-
-/* Standard functions */
-intmax_t __fastcall__ imaxabs (intmax_t val);
-intmax_t __fastcall__ strtoimax (const char* nptr, char** endptr, int base);
-uintmax_t __fastcall__ strtoumax (const char* nptr, char** endptr, int base);
-
-
-
-/* printf() macros for signed integers */
-#define PRId8                   "d"
-#define PRId16                  "d"
-#define PRId32                  "ld"
-
-#define PRIdLEAST8              "d"
-#define PRIdLEAST16             "d"
-#define PRIdLEAST32             "ld"
-
-#define PRIdFAST8               "d"
-#define PRIdFAST16              "d"
-#define PRIdFAST32              "ld"
-
-#define PRIdMAX                 "ld"
-#define PRIdPTR                 "d"
-
-#define PRIi8                   "i"
-#define PRIi16                  "i"
-#define PRIi32                  "li"
-
-#define PRIiLEAST8              "i"
-#define PRIiLEAST16             "i"
-#define PRIiLEAST32             "li"
-
-#define PRIiFAST8               "i"
-#define PRIiFAST16              "i"
-#define PRIiFAST32              "li"
-
-#define PRIiMAX                 "li"
-#define PRIiPTR                 "i"
-
-/* fprintf() macros for unsigned integers */
-#define PRIo8                   "o"
-#define PRIo16                  "o"
-#define PRIo32                  "lo"
-
-#define PRIoLEAST8              "o"
-#define PRIoLEAST16             "o"
-#define PRIoLEAST32             "lo"
-
-#define PRIoFAST8               "o"
-#define PRIoFAST16              "o"
-#define PRIoFAST32              "lo"
-
-#define PRIoMAX                 "lo"
-#define PRIoPTR                 "o"
-
-#define PRIu8                   "u"
-#define PRIu16                  "u"
-#define PRIu32                  "lu"
-
-#define PRIuLEAST8              "u"
-#define PRIuLEAST16             "u"
-#define PRIuLEAST32             "lu"
-
-#define PRIuFAST8               "u"
-#define PRIuFAST16              "u"
-#define PRIuFAST32              "lu"
-
-#define PRIuMAX                 "lu"
-#define PRIuPTR                 "u"
-
-#define PRIx8                   "x"
-#define PRIx16                  "x"
-#define PRIx32                  "lx"
-
-#define PRIxLEAST8              "x"
-#define PRIxLEAST16             "x"
-#define PRIxLEAST32             "lx"
-
-#define PRIxFAST8               "x"
-#define PRIxFAST16              "x"
-#define PRIxFAST32              "lx"
-
-#define PRIxMAX                 "lx"
-#define PRIxPTR                 "x"
-
-#define PRIX8                   "X"
-#define PRIX16                  "X"
-#define PRIX32                  "lX"
-
-#define PRIXLEAST8              "X"
-#define PRIXLEAST16             "X"
-#define PRIXLEAST32             "lX"
-
-#define PRIXFAST8               "X"
-#define PRIXFAST16              "X"
-#define PRIXFAST32              "lX"
-
-#define PRIXMAX                 "lX"
-#define PRIXPTR                 "X"
-
-/* fscanf() macros for signed integers */
-#define SCNd8                   "hd"
-#define SCNd16                  "d"
-#define SCNd32                  "ld"
-
-#define SCNdLEAST8              "hd"
-#define SCNdLEAST16             "d"
-#define SCNdLEAST32             "ld"
-
-#define SCNdFAST8               "hd"
-#define SCNdFAST16              "d"
-#define SCNdFAST32              "ld"
-
-#define SCNdMAX                 "ld"
-#define SCNdPTR                 "d"
-
-#define SCNi8                   "hi"
-#define SCNi16                  "i"
-#define SCNi32                  "li"
-
-#define SCNiLEAST8              "hi"
-#define SCNiLEAST16             "i"
-#define SCNiLEAST32             "li"
-
-#define SCNiFAST8               "hi"
-#define SCNiFAST16              "i"
-#define SCNiFAST32              "li"
-
-#define SCNiMAX                 "li"
-#define SCNiPTR                 "i"
-
-/* fscanf() macros for unsigned integers */
-#define SCNo8                   "ho"
-#define SCNo16                  "o"
-#define SCNo32                  "lo"
-
-#define SCNoLEAST8              "ho"
-#define SCNoLEAST16             "o"
-#define SCNoLEAST32             "lo"
-
-#define SCNoFAST8               "ho"
-#define SCNoFAST16              "o"
-#define SCNoFAST32              "lo"
-
-#define SCNoMAX                 "lo"
-#define SCNoPTR                 "o"
-
-#define SCNu8                   "hu"
-#define SCNu16                  "u"
-#define SCNu32                  "lu"
-
-#define SCNuLEAST8              "hu"
-#define SCNuLEAST16             "u"
-#define SCNuLEAST32             "lu"
-
-#define SCNuFAST8               "hu"
-#define SCNuFAST16              "u"
-#define SCNuFAST32              "lu"
-
-#define SCNuMAX                 "lu"
-#define SCNuPTR                 "u"
-
-#define SCNx8                   "hx"
-#define SCNx16                  "x"
-#define SCNx32                  "lx"
-
-#define SCNxLEAST8              "hx"
-#define SCNxLEAST16             "x"
-#define SCNxLEAST32             "lx"
-
-#define SCNxFAST8               "hx"
-#define SCNxFAST16              "x"
-#define SCNxFAST32              "lx"
-
-#define SCNxMAX                 "lx"
-#define SCNxPTR                 "x"
-
-
-
-/* End of inttypes.h */
-#endif
-
-
-
diff --git a/include/iso646.h b/include/iso646.h
deleted file mode 100644 (file)
index 18cf6e5..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 iso646.h                                  */
-/*                                                                           */
-/*                           Alternative spellings                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2000 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _ISO646_H
-#define _ISO646_H
-
-
-
-/* Operator tokens */
-#define and     &&
-#define and_eq  &=
-#define bitand  &
-#define bitor   |
-#define compl   ~
-#define not     !
-#define not_eq  !=
-#define or      ||
-#define or_eq   |=
-#define xor     ^
-#define xor_eq  ^=
-
-
-
-/* End of iso646.h */
-#endif
-
-
-
diff --git a/include/joystick.h b/include/joystick.h
deleted file mode 100644 (file)
index 710d9b5..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                joystick.h                                 */
-/*                                                                           */
-/*               Read the joystick on systems that support it                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _JOYSTICK_H
-#define _JOYSTICK_H
-
-
-
-/*****************************************************************************/
-/*                                  Definitions                              */
-/*****************************************************************************/
-
-
-
-/* Error codes */
-#define JOY_ERR_OK              0       /* No error */
-#define JOY_ERR_NO_DRIVER       1       /* No driver available */
-#define JOY_ERR_CANNOT_LOAD     2       /* Error loading driver */
-#define JOY_ERR_INV_DRIVER      3       /* Invalid driver */
-#define JOY_ERR_NO_DEVICE       4       /* Device (hardware) not found */
-
-/* Argument for the joy_read function */
-#define JOY_1           0
-#define JOY_2           1
-
-/* The following codes are *indices* into the joy_masks array */
-#define JOY_UP          0
-#define JOY_DOWN        1
-#define JOY_LEFT        2
-#define JOY_RIGHT       3
-#define JOY_FIRE        4
-#define JOY_FIRE2       5               /* Second fire button if available */
-
-/* Array of masks used to check the return value of joy_read for a state */
-extern const unsigned char joy_masks[8];
-
-/* Macros that evaluate the return code of joy_read */
-#define JOY_BTN_UP(v)           ((v) & joy_masks[JOY_UP])
-#define JOY_BTN_DOWN(v)         ((v) & joy_masks[JOY_DOWN])
-#define JOY_BTN_LEFT(v)         ((v) & joy_masks[JOY_LEFT])
-#define JOY_BTN_RIGHT(v)        ((v) & joy_masks[JOY_RIGHT])
-#define JOY_BTN_FIRE(v)         ((v) & joy_masks[JOY_FIRE])
-#define JOY_BTN_FIRE2(v)        ((v) & joy_masks[JOY_FIRE2])
-
-/* The name of the standard joystick driver for a platform */
-extern const char joy_stddrv[];
-
-/* The address of the static standard joystick driver for a platform */
-extern const void joy_static_stddrv[];
-
-
-
-/*****************************************************************************/
-/*                                 Functions                                 */
-/*****************************************************************************/
-
-
-
-unsigned char __fastcall__ joy_load_driver (const char* driver);
-/* Load and install a joystick driver. Return an error code. */
-
-unsigned char joy_unload (void);
-/* Uninstall, then unload the currently loaded driver. */
-
-unsigned char __fastcall__ joy_install (void* driver);
-/* Install an already loaded driver. Return an error code. */
-
-unsigned char joy_uninstall (void);
-/* Uninstall the currently loaded driver and return an error code.
-** Note: This call does not free allocated memory.
-*/
-
-unsigned char joy_count (void);
-/* Return the number of joysticks supported by the driver */
-
-unsigned char __fastcall__ joy_read (unsigned char joystick);
-/* Read a particular joystick */
-
-
-
-/* End of joystick.h */
-#endif
-
-
-
diff --git a/include/joystick/joy-kernel.h b/include/joystick/joy-kernel.h
deleted file mode 100644 (file)
index bb571de..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                               joy-kernel.h                                */
-/*                                                                           */
-/*                    Internally used joystick functions                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2006, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _JOY_KERNEL_H
-#define _JOY_KERNEL_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* A structure that describes the header of a joystick driver loaded into
-** memory.
-*/
-typedef struct {
-
-    /* Driver header */
-    char                id[3];          /* Contains 0x6a, 0x6f, 0x79 ("joy") */
-    unsigned char       version;        /* Interface version */
-
-    /* Bitmasks for the joystick states. See joystick.h for indices */
-    unsigned char       masks[8];
-
-    /* Jump vectors. Note that these are not C callable */
-    void*               install;        /* INSTALL routine */
-    void*               uninstall;      /* UNINSTALL routine */
-    void*               count;          /* COUNT routine */
-    void*               read;           /* READ routine */
-    void*               irq;            /* IRQ routine */
-
-} joy_drv_header;
-
-
-
-/* JOY kernel variables */
-extern joy_drv_header*  joy_drv;        /* Pointer to driver */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void joy_clear_ptr (void);
-/* Clear the joy_drv pointer */
-
-
-
-/* End of joy-kernel.h */
-#endif
-
-
-
diff --git a/include/limits.h b/include/limits.h
deleted file mode 100644 (file)
index 23474c7..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 limits.h                                  */
-/*                                                                           */
-/*                          Sizes of integer types                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2002 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _LIMITS_H
-#define _LIMITS_H
-
-
-
-#define CHAR_BIT        8
-
-#define SCHAR_MIN       ((signed char) 0x80)
-#define SCHAR_MAX       127
-
-#define UCHAR_MAX       255
-
-#define CHAR_MIN        0
-#define CHAR_MAX        255
-
-#define SHRT_MIN        ((short) 0x8000)
-#define SHRT_MAX        32767
-
-#define USHRT_MAX       65535U
-
-#define INT_MIN         ((int) 0x8000)
-#define INT_MAX         32767
-
-#define UINT_MAX        65535U
-
-#define LONG_MAX        2147483647L
-#define LONG_MIN        ((long) 0x80000000)
-
-#define ULONG_MAX       4294967295UL
-
-
-
-/* End of limits.h */
-#endif
-
-
-
diff --git a/include/locale.h b/include/locale.h
deleted file mode 100644 (file)
index 4134dd5..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 locale.h                                  */
-/*                                                                           */
-/*                          Localization <locale.h>                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2005 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _LOCALE_H
-#define _LOCALE_H
-
-
-
-/* NULL pointer */
-#ifndef _HAVE_NULL
-#define NULL    0
-#define _HAVE_NULL
-#endif
-
-/* Locale information constants */
-#define LC_ALL          0
-#define LC_COLLATE      1
-#define LC_CTYPE        2
-#define LC_MONETARY     3
-#define LC_NUMERIC      4
-#define LC_TIME         5
-
-/* Struct containing locale settings */
-struct lconv {
-    char*       currency_symbol;
-    char*       decimal_point;
-    char*       grouping;
-    char*       int_curr_symbol;
-    char*       mon_decimal_point;
-    char*       mon_grouping;
-    char*       mon_thousands_sep;
-    char*       negative_sign;
-    char*       positive_sign;
-    char*       thousands_sep;
-    char        frac_digits;
-    char        int_frac_digits;
-    char        n_cs_precedes;
-    char        n_sep_by_space;
-    char        n_sign_posn;
-    char        p_cs_precedes;
-    char        p_sep_by_space;
-    char        p_sign_posn;
-};
-
-/* Function prototypes */
-struct lconv* localeconv (void);
-char* __fastcall__ setlocale (int category, const char* locale);
-
-
-
-/* End of locale.h */
-#endif
-
-
-
diff --git a/include/lynx.h b/include/lynx.h
deleted file mode 100644 (file)
index 72f3d5b..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  lynx.h                                   */
-/*                                                                           */
-/*                     Lynx system-specific definitions                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Shawn Jefferson                                             */
-/*                                                                           */
-/* Adapted with many changes Ullrich von Bassewitz, 2004-10-09               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _LYNX_H
-#define _LYNX_H
-
-
-
-/* Check for errors */
-#if !defined(__LYNX__)
-#  error This module may only be used when compiling for the Lynx game console!
-#endif
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Color defines */
-#define COLOR_BLACK             0x00
-#define COLOR_RED               0x01
-#define COLOR_PINK              0x02
-#define COLOR_LIGHTGREY         0x03
-#define COLOR_GREY              0x04
-#define COLOR_DARKGREY          0x05
-#define COLOR_BROWN             0x06
-#define COLOR_PEACH             0x07
-#define COLOR_YELLOW            0x08
-#define COLOR_LIGHTGREEN        0x09
-#define COLOR_GREEN             0x0A
-#define COLOR_DARKBROWN         0x0B
-#define COLOR_VIOLET            0x0C
-#define COLOR_BLUE              0x0D
-#define COLOR_LIGHTBLUE         0x0E
-#define COLOR_WHITE             0x0F
-
-/* TGI color defines (default palette) */
-#define TGI_COLOR_BLACK         COLOR_BLACK
-#define TGI_COLOR_RED           COLOR_RED
-#define TGI_COLOR_PINK          COLOR_PINK
-#define TGI_COLOR_LIGHTGREY     COLOR_LIGHTGREY
-#define TGI_COLOR_GREY          COLOR_GREY
-#define TGI_COLOR_DARKGREY      COLOR_DARKGREY
-#define TGI_COLOR_BROWN         COLOR_BROWN
-#define TGI_COLOR_PEACH         COLOR_PEACH
-#define TGI_COLOR_YELLOW        COLOR_YELLOW
-#define TGI_COLOR_LIGHTGREEN    COLOR_LIGHTGREEN
-#define TGI_COLOR_GREEN         COLOR_GREEN
-#define TGI_COLOR_DARKBROWN     COLOR_DARKBROWN
-#define TGI_COLOR_VIOLET        COLOR_VIOLET
-#define TGI_COLOR_BLUE          COLOR_BLUE
-#define TGI_COLOR_LIGHTBLUE     COLOR_LIGHTBLUE
-#define TGI_COLOR_WHITE         COLOR_WHITE
-
-/* No support for dynamically loadable drivers */
-#define DYN_DRV 0
-
-
-
-/*****************************************************************************/
-/*                                 Variables                                 */
-/*****************************************************************************/
-
-
-
-/* The addresses of the static drivers */
-extern void lynx_stdjoy_joy[];        /* Referred to by joy_static_stddrv[] */
-extern void lynx_comlynx_ser[];
-extern void lynx_160_102_16_tgi[];    /* Referred to by tgi_static_stddrv[] */
-
-
-
-/*****************************************************************************/
-/*                           Sound support                                   */
-/*****************************************************************************/
-
-void lynx_snd_init (void);
-/* Initialize the sound driver */
-
-void lynx_snd_pause (void);
-/* Pause sound */
-
-void lynx_snd_continue (void);
-/* Continue sound after pause */
-
-void __fastcall__ lynx_snd_play (unsigned char channel, unsigned char *music);
-/* Play tune on channel */
-
-void lynx_snd_stop (void);
-/* Stop sound on all channels */
-
-void __fastcall__ lynx_snd_stop_channel (unsigned char channel);
-/* Stop sound on all channels */
-
-unsigned char lynx_snd_active(void);
-/* Show which channels are active */
-
-/*****************************************************************************/
-/*                           Accessing the cart                              */
-/*****************************************************************************/
-
-
-
-void __fastcall__ lynx_load (int fileno);
-/* Load a file into ram. The first entry is fileno=0. */
-
-void __fastcall__ lynx_exec (int fileno);
-/* Load a file into ram and execute it. */
-
-
-
-/*****************************************************************************/
-/*                           Accessing the EEPROM                            */
-/*****************************************************************************/
-
-
-
-unsigned __fastcall__ lynx_eeprom_read (unsigned char cell);
-/* Read a 16 bit word from the given address */
-
-unsigned __fastcall__ lynx_eeprom_write (unsigned char cell, unsigned val);
-/* Write the word at the given address */
-
-void __fastcall__ lynx_eeprom_erase (unsigned char cell);
-/* Clear the word at the given address */
-
-unsigned __fastcall__ lynx_eeread (unsigned cell);
-/* Read a 16 bit word from the given address 93C46 93C66 or 93C86*/
-
-unsigned __fastcall__ lynx_eewrite (unsigned cell, unsigned val);
-/* Write the word at the given address 93C46 93C66 or 93C86*/
-
-
-
-/*****************************************************************************/
-/*                           TGI extras                                      */
-/*****************************************************************************/
-
-
-
-#define tgi_sprite(spr) tgi_ioctl(0, spr)
-#define tgi_flip() tgi_ioctl(1, (void*)0)
-#define tgi_setbgcolor(bgcol) tgi_ioctl(2, (void*)(bgcol))
-#define tgi_setframerate(rate) tgi_ioctl(3, (void*)(rate))
-#define tgi_busy() tgi_ioctl(4, (void*)0)
-#define tgi_updatedisplay() tgi_ioctl(4, (void*)1)
-#define tgi_setcollisiondetection(active) tgi_ioctl(5, (void*)(active))
-
-/* Define Hardware */
-#include <_mikey.h>
-#define MIKEY (*(struct __mikey *)0xFD00)
-
-#define _MIKEY_TIMERS (*(struct _mikey_all_timers *) 0xFD00)  // mikey_timers[8]
-#define _HBL_TIMER (*(struct _mikey_timer *) 0xFD00)          // timer0 (HBL)
-#define _VBL_TIMER (*(struct _mikey_timer *) 0xFD08)          // timer2 (VBL)
-#define _UART_TIMER (*(struct _mikey_timer *) 0xFD14)         // timer4 (UART)
-#define _VIDDMA (*(unsigned int *) 0xFD92)                    // dispctl/viddma
-
-#include <_suzy.h>
-#define SUZY        (*(struct __suzy*)0xFC00)
-
-
-/* End of lynx.h */
-#endif
diff --git a/include/modload.h b/include/modload.h
deleted file mode 100644 (file)
index 421641a..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   modload.h                               */
-/*                                                                           */
-/*                     o65 module loader interface for cc65                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* Exports structures and functions to load relocatable o65 modules at
-** runtime.
-*/
-
-
-
-#ifndef _MODLOAD_H
-#define _MODLOAD_H
-
-
-
-/* The following struct is passed to the module loader. It contains stuff,
-** the loader needs to work, and another area where the loader will place
-** informational data if it was successful. You will have to check the return
-** code of mod_load before accessing any of these additional struct members.
-*/
-struct mod_ctrl {
-    /* Parameters passed into the loader routine. The member callerdata
-    ** is an opaque 16 bit datatype that may be used by the caller to
-    ** pass data through to the read routine. The read routine is used by the
-    ** loader to load any required data. There are several calls where the
-    ** read routine is passed a count of 1, so you may choose to make this
-    ** a special case when implementing read(). The read() should return the
-    ** number of bytes actually read. If the return value differs from the
-    ** passed count, this is considered an error.
-    ** NOTE: read() is designed so that the POSIX read() routine can be used
-    ** for this vector, if you're loading from disk.
-    */
-    int __fastcall__  (*read) (int callerdata, void* buffer, unsigned count);
-    int               callerdata;
-
-    /* Parameters set by the loader routine */
-    void*             module;           /* Pointer to module data */
-    unsigned          module_size;      /* Total size of loaded module */
-    unsigned          module_id;        /* Module id */
-};
-
-
-
-unsigned char __fastcall__ mod_load (struct mod_ctrl* ctrl);
-/* Load a module into memory and relocate it. The function will return an
-** error code (see below). If MLOAD_OK is returned, the outgoing fields in
-** the passed mod_ctrl struct contain information about the module just
-** loaded.
-*/
-
-void __fastcall__ mod_free (void* module);
-/* Free a loaded module. Note: The given pointer is the pointer to the
-** module memory, not a pointer to a control structure.
-*/
-
-
-
-/* Errors */
-#define MLOAD_OK                0       /* Module load successful */
-#define MLOAD_ERR_READ          1       /* Read error */
-#define MLOAD_ERR_HDR           2       /* Header error */
-#define MLOAD_ERR_OS            3       /* Wrong OS */
-#define MLOAD_ERR_FMT           4       /* Data format error */
-#define MLOAD_ERR_MEM           5       /* Not enough memory */
-
-
-
-/* End of modload.h */
-#endif
-
-
-
diff --git a/include/mouse.h b/include/mouse.h
deleted file mode 100644 (file)
index ac75956..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  mouse.h                                  */
-/*                                                                           */
-/*                                 Mouse API                                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _MOUSE_H
-#define _MOUSE_H
-
-
-
-/*****************************************************************************/
-/*                                Definitions                                */
-/*****************************************************************************/
-
-
-
-/* Error codes */
-#define MOUSE_ERR_OK            0       /* No error */
-#define MOUSE_ERR_NO_DRIVER     1       /* No driver available */
-#define MOUSE_ERR_CANNOT_LOAD   2       /* Error loading driver */
-#define MOUSE_ERR_INV_DRIVER    3       /* Invalid driver */
-#define MOUSE_ERR_NO_DEVICE     4       /* Mouse hardware not found */
-#define MOUSE_ERR_INV_IOCTL     5       /* Invalid ioctl code */
-
-/* Mouse button masks */
-#define MOUSE_BTN_LEFT       0x10
-#define MOUSE_BTN_RIGHT      0x01
-
-/* Structure containing the mouse coordinates */
-struct mouse_pos {
-    int                 x;
-    int                 y;
-};
-
-/* Structure containing information about the mouse */
-struct mouse_info {
-    struct mouse_pos    pos;           /* Mouse position */
-    unsigned char       buttons;       /* Mouse button mask */
-};
-
-/* Structure used for getbox/setbox */
-struct mouse_box {
-    int                 minx;
-    int                 miny;
-    int                 maxx;
-    int                 maxy;
-};
-
-/* Structure containing mouse callback functions. These functions are declared
-** in C notation here, but they cannot be C functions (at least not easily),
-** since they may be called from within an interrupt.
-*/
-struct mouse_callbacks {
-
-    void (*hide) (void);
-    /* Hide the mouse cursor. */
-
-    void (*show) (void);
-    /* Show the mouse cursor. */
-
-    void (*prep) (void);
-    /* Prepare to move the mouse cursor. This function is called,
-    ** even when the cursor is currently invisible.
-    */
-
-    void (*draw) (void);
-    /* Draw the mouse cursor. This function is called,
-    ** even when the cursor is currently invisible.
-    */
-
-    void __fastcall__ (*movex) (int x);
-    /* Move the mouse cursor to the new X coordinate. This function is called,
-    ** even when the cursor is currently invisible.
-    */
-
-    void __fastcall__ (*movey) (int y);
-    /* Move the mouse cursor to the new Y coordinate. This function is called,
-    ** even when the cursor is currently invisible.
-    */
-};
-
-
-
-/*****************************************************************************/
-/*                               Declarations                                */
-/*****************************************************************************/
-
-
-
-/* The default mouse callbacks */
-extern const struct mouse_callbacks mouse_def_callbacks;
-
-/* The name of the standard mouse driver for a platform */
-extern const char mouse_stddrv[];
-
-/* The address of the static standard mouse driver for a platform */
-extern const void mouse_static_stddrv[];
-
-
-
-/*****************************************************************************/
-/*                                 Functions                                 */
-/*****************************************************************************/
-
-
-
-unsigned char __fastcall__ mouse_load_driver (const struct mouse_callbacks* c,
-                                              const char* driver);
-/* Load and install a mouse driver, return an error code. */
-
-unsigned char mouse_unload (void);
-/* Uninstall, then unload the currently loaded driver. */
-
-unsigned char __fastcall__ mouse_install (const struct mouse_callbacks* c,
-                                          void* driver);
-/* Install an already loaded driver. Return an error code. */
-
-unsigned char mouse_uninstall (void);
-/* Uninstall the currently loaded driver. Return an error code. */
-
-const char* __fastcall__ mouse_geterrormsg (unsigned char code);
-/* Get an error message describing the error in code. */
-
-void mouse_hide (void);
-/* Hide the mouse. The function manages a counter and may be called more than
-** once. For each call to mouse_hide there must be a call to mouse_show to make
-** the mouse visible again.
-*/
-
-void mouse_show (void);
-/* Show the mouse. See mouse_hide() for more information. */
-
-void __fastcall__ mouse_setbox (const struct mouse_box* box);
-/* Set the bounding box for the mouse pointer movement. The mouse X and Y
-** coordinates will never go outside the given box.
-** NOTE: The function does *not* check if the mouse is currently inside the
-** given margins. The proper way to use this function therefore is:
-**
-**      - Hide the mouse
-**      - Set the bounding box
-**      - Place the mouse at the desired position
-**      - Show the mouse again.
-**
-** NOTE2: When setting the box to something that is larger than the actual
-** screen, the positioning of the mouse cursor can fail. If such margins
-** are really what you want, you have to use your own cursor routines.
-*/
-
-void __fastcall__ mouse_getbox (struct mouse_box* box);
-/* Get the current bounding box for the mouse pointer movement. */
-
-void __fastcall__ mouse_move (int x, int y);
-/* Set the mouse cursor to the given position. If a mouse cursor is defined
-** and currently visible, the mouse cursor is also moved.
-** NOTE: This function does not check if the given position is valid and
-** inside the bounding box.
-*/
-
-unsigned char mouse_buttons (void);
-/* Return a bit mask encoding the states of the mouse buttons. Use the
-** MOUSE_BTN_XXX flags to decode a specific button.
-*/
-
-void __fastcall__ mouse_pos (struct mouse_pos* pos);
-/* Return the current mouse position. */
-
-void __fastcall__ mouse_info (struct mouse_info* info);
-/* Return the state of the mouse buttons and the position of the mouse. */
-
-unsigned char __fastcall__ mouse_ioctl (unsigned char code, void* data);
-/* Call the driver-specific ioctl function. Return an error code.
-** NON-PORTABLE!
-*/
-
-
-
-/* End of mouse.h */
-#endif
-
-
-
diff --git a/include/mouse/mouse-kernel.h b/include/mouse/mouse-kernel.h
deleted file mode 100644 (file)
index f024b09..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                              mouse-kernel.h                               */
-/*                                                                           */
-/*                      Internally used mouse functions                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2006, Ullrich von Bassewitz                                      */
-/*                Römerstraße 52                                             */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _MOUSE_KERNEL_H
-#define _MOUSE_KERNEL_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Mouse kernel variables */
-extern void*    mouse_drv;              /* Pointer to driver */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void mouse_clear_ptr (void);
-/* Clear the mouse_drv pointer */
-
-
-
-/* End of mouse-kernel.h */
-#endif
-
-
-
diff --git a/include/nes.h b/include/nes.h
deleted file mode 100644 (file)
index 3ad4422..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   nes.h                                   */
-/*                                                                           */
-/*                      NES system specific definitions                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2003 Groepaz/Hitmen                                              */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _NES_H
-#define _NES_H
-
-
-
-/* Check for errors */
-#if !defined(__NES__)
-#  error This module may only be used when compiling for the NES!
-#endif
-
-
-
-/* Key and character defines */
-#define CH_ENTER                '\n'
-#define CH_CURS_UP              0x01
-#define CH_CURS_DOWN            0x02
-#define CH_CURS_LEFT            0x03
-#define CH_CURS_RIGHT           0x04
-#define CH_ESC                  8
-#define CH_DEL                  20
-
-#define CH_CROSS                0x10
-#define CH_RTEE                 0x17
-#define CH_LTEE                 0x0f
-#define CH_TTEE                 0x16
-#define CH_BTEE                 0x15
-#define CH_HLINE                0x0b
-#define CH_VLINE                0x0e
-#define CH_ULCORNER             0x14
-#define CH_URCORNER             0x12
-#define CH_LLCORNER             0x11
-#define CH_LRCORNER             0x08
-#define CH_PI                   0x05
-
-/* Color defines */
-#define COLOR_BLACK             0x00
-#define COLOR_WHITE             0x01
-#define COLOR_RED               0x02
-#define COLOR_CYAN              0x03
-#define COLOR_VIOLET            0x04
-#define COLOR_GREEN             0x05
-#define COLOR_BLUE              0x06
-#define COLOR_YELLOW            0x07
-#define COLOR_ORANGE            0x08
-#define COLOR_BROWN             0x09
-#define COLOR_LIGHTRED          0x0A
-#define COLOR_GRAY1             0x0B
-#define COLOR_GRAY2             0x0C
-#define COLOR_LIGHTGREEN        0x0D
-#define COLOR_LIGHTBLUE         0x0E
-#define COLOR_GRAY3             0x0F
-
-/* Return codes of get_tv */
-#define TV_NTSC         0
-#define TV_PAL          1
-#define TV_OTHER        2
-
-/* No support for dynamically loadable drivers */
-#define DYN_DRV         0
-
-
-
-/* The addresses of the static drivers */
-extern void nes_stdjoy_joy[];       /* Referred to by joy_static_stddrv[] */
-extern void nes_64_56_2_tgi[];      /* Referred to by tgi_static_stddrv[] */
-
-
-
-void waitvblank (void);
-/* Wait for the vertical blanking */
-
-unsigned char get_tv (void);
-/* Return the video mode the machine is using. */
-
-
-
-/* End of nes.h */
-#endif
diff --git a/include/o65.h b/include/o65.h
deleted file mode 100644 (file)
index a50bf2f..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   o65.h                                   */
-/*                                                                           */
-/*                    Definitions for the o65 file format                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* This files exports structures and constants to handle the o65 relocatable
-** file format as defined by Andre Fachat. See the original document under
-**
-**      http://www.6502.org/users/andre/o65/fileformat.html
-**
-** for more information.
-*/
-
-
-
-#ifndef _O65_H
-#define _O65_H
-
-
-
-/* o65 size type. It is 2 bytes for the 6502 and 4 bytes for the 65816 */
-typedef unsigned o65_size;
-
-
-/* Structure that defines the o65 file header */
-typedef struct o65_header o65_header;
-struct o65_header {
-    char        marker[2];      /* Non-C64 marker */
-    char        magic[3];       /* o65 magic */
-    char        version;        /* Version number */
-    unsigned    mode;           /* Mode word */
-    o65_size    tbase;          /* Original text (code) segment address */
-    o65_size    tlen;           /* Size of text (code) segment */
-    o65_size    dbase;          /* Original data segment address */
-    o65_size    dlen;           /* Size of data segment */
-    o65_size    bbase;          /* Original bss segment address */
-    o65_size    blen;           /* Size of bss segment */
-    o65_size    zbase;          /* Original zp segment address */
-    o65_size    zlen;           /* Size of zp segment */
-    o65_size    stack;          /* Stacksize needed */
-};
-
-
-
-/* Marker, magic and version number */
-#define O65_MARKER_0            0x01
-#define O65_MARKER_1            0x00
-#define O65_MAGIC_0             0x6F    /* 'o' */
-#define O65_MAGIC_1             0x36    /* '6' */
-#define O65_MAGIC_2             0x35    /* '5' */
-#define O65_VERSION             0x00
-
-/* Defines for the mode word */
-#define O65_CPU_65816           0x8000  /* Executable is for 65816 */
-#define O65_CPU_6502            0x0000  /* Executable is for the 6502 */
-#define O65_CPU_MASK            0x8000  /* Mask to extract CPU type */
-
-#define O65_RELOC_PAGE          0x4000  /* Page wise relocation */
-#define O65_RELOC_BYTE          0x0000  /* Byte wise relocation */
-#define O65_RELOC_MASK          0x4000  /* Mask to extract relocation type */
-
-#define O65_SIZE_32BIT          0x2000  /* All size words are 32bit */
-#define O65_SIZE_16BIT          0x0000  /* All size words are 16bit */
-#define O65_SIZE_MASK           0x2000  /* Mask to extract size */
-
-#define O65_FTYPE_OBJ           0x1000  /* Object file */
-#define O65_FTYPE_EXE           0x0000  /* Executable file */
-#define O65_FTYPE_MASK          0x1000  /* Mask to extract type */
-
-#define O65_ADDR_SIMPLE         0x0800  /* Simple addressing */
-#define O65_ADDR_DEFAULT        0x0000  /* Default addressing */
-#define O65_ADDR_MASK           0x0800  /* Mask to extract addressing */
-
-#define O65_CHAIN               0x0400  /* Chained file, another one follows */
-#define O65_CHAIN_MASK          0x0400  /* Mask to extract chain flag */
-
-#define O65_BSSZERO             0x0200  /* BSS segment must be zeroed */
-#define O65_BSSZERO_MASK        0x0200  /* Mask to extract bss zero flag */
-
-/* The following is used if O65_CPU == 6502 */
-#define O65_CPU2_6502           0x0000  /* Executable is for 6502 */
-#define O65_CPU2_65C02          0x0010  /* Executable is for 65C02 */
-#define O65_CPU2_65SC02         0x0020  /* Executable is for 65SC02 */
-#define O65_CPU2_65CE02         0x0030  /* Executable is for 65CE02 */
-#define O65_CPU2_6502X          0x0040  /* Executable is for NMOS 6502 */
-#define O65_CPU2_65816_EMU      0x0050  /* Executable is for 65816 in emul mode */
-#define O65_CPU2_MASK           0x00F0  /* Mask to extract CPU2 field */
-
-#define O65_ALIGN_1             0x0000  /* Bytewise alignment */
-#define O65_ALIGN_2             0x0001  /* Align words */
-#define O65_ALIGN_4             0x0002  /* Align longwords */
-#define O65_ALIGN_256           0x0003  /* Align pages (256 bytes) */
-#define O65_ALIGN_MASK          0x0003  /* Mask to extract alignment */
-
-/* The mode word as generated by the ld65 linker */
-#define O65_MODE_CC65           (O65_CPU_6502    |      \
-                                 O65_RELOC_BYTE  |      \
-                                 O65_SIZE_16BIT  |      \
-                                 O65_FTYPE_EXE   |      \
-                                 O65_ADDR_SIMPLE |      \
-                                 O65_ALIGN_1)
-
-/* The four o65 segment types. */
-#define O65_SEGID_UNDEF         0x00
-#define O65_SEGID_ABS           0x01
-#define O65_SEGID_TEXT          0x02
-#define O65_SEGID_DATA          0x03
-#define O65_SEGID_BSS           0x04
-#define O65_SEGID_ZP            0x05
-#define O65_SEGID_MASK          0x07
-
-/* Relocation type codes */
-#define O65_RTYPE_WORD          0x80
-#define O65_RTYPE_HIGH          0x40
-#define O65_RTYPE_LOW           0x20
-#define O65_RTYPE_SEGADDR       0xC0
-#define O65_RTYPE_SEG           0xA0
-#define O65_RTYPE_MASK          0xE0
-
-/* Segment IDs */
-#define O65_SEGID_UNDEF         0x00
-#define O65_SEGID_ABS           0x01
-#define O65_SEGID_TEXT          0x02
-#define O65_SEGID_DATA          0x03
-#define O65_SEGID_BSS           0x04
-#define O65_SEGID_ZP            0x05
-#define O65_SEGID_MASK          0x07
-
-/* Option tags */
-#define O65_OPT_FILENAME        0
-#define O65_OPT_OS              1
-#define O65_OPT_ASM             2
-#define O65_OPT_AUTHOR          3
-#define O65_OPT_TIMESTAMP       4
-
-/* Operating system codes for O65_OPT_OS */
-#define O65_OS_OSA65            1
-#define O65_OS_LUNIX            2
-#define O65_OS_CC65             3
-#define O65_OS_OPENCBM          4
-
-
-
-/* End of o65.h */
-#endif
-
-
-
diff --git a/include/osic1p.h b/include/osic1p.h
deleted file mode 100644 (file)
index 57fe0cd..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*****************************************************************************/\r
-/*                                                                           */\r
-/*                                osic1p.h                                   */\r
-/*                                                                           */\r
-/*                Challenger 1P system specific definitions                  */\r
-/*                                                                           */\r
-/*                                                                           */\r
-/*                                                                           */\r
-/* (C) 2015 Stephan Muehlstrasser                                            */\r
-/*                                                                           */\r
-/*                                                                           */\r
-/* This software is provided 'as-is', without any expressed or implied       */\r
-/* warranty.  In no event will the authors be held liable for any damages    */\r
-/* arising from the use of this software.                                    */\r
-/*                                                                           */\r
-/* Permission is granted to anyone to use this software for any purpose,     */\r
-/* including commercial applications, and to alter it and redistribute it    */\r
-/* freely, subject to the following restrictions:                            */\r
-/*                                                                           */\r
-/* 1. The origin of this software must not be misrepresented; you must not   */\r
-/*    claim that you wrote the original software. If you use this software   */\r
-/*    in a product, an acknowledgment in the product documentation would be  */\r
-/*    appreciated but is not required.                                       */\r
-/* 2. Altered source versions must be plainly marked as such, and must not   */\r
-/*    be misrepresented as being the original software.                      */\r
-/* 3. This notice may not be removed or altered from any source              */\r
-/*    distribution.                                                          */\r
-/*                                                                           */\r
-/*****************************************************************************/\r
-\r
-#ifndef _OSIC1P_H\r
-#define _OSIC1P_H\r
-\r
-/* Check for errors */\r
-#if !defined(__OSIC1P__)\r
-#  error "This module may only be used when compiling for the Challenger 1P!"\r
-#endif\r
-\r
-/* The following #defines will cause the matching functions calls in conio.h\r
-** to be overlaid by macros with the same names, saving the function call\r
-** overhead.\r
-*/\r
-#define _textcolor(color)       COLOR_WHITE\r
-#define _bgcolor(color)         COLOR_BLACK\r
-#define _bordercolor(color)     COLOR_BLACK\r
-\r
-#endif\r
diff --git a/include/pce.h b/include/pce.h
deleted file mode 100644 (file)
index 7700654..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   pce.h                                   */
-/*                                                                           */
-/*                   PC-Engine system specific definitions                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2015 Groepaz/Hitmen                                                   */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-#ifndef _PCE_H
-#define _PCE_H
-
-/* Check for errors */
-#if !defined(__PCE__)
-#  error This module may only be used when compiling for the PCE!
-#endif
-
-#define CH_HLINE                1
-#define CH_VLINE                2
-#define CH_CROSS                3
-#define CH_ULCORNER             4
-#define CH_URCORNER             5
-#define CH_LLCORNER             6
-#define CH_LRCORNER             7
-#define CH_TTEE                 8
-#define CH_BTEE                 9
-#define CH_LTEE                 10
-#define CH_RTEE                 11
-
-#define CH_ENTER                13
-#define CH_PI                   18
-
-/* Color defines (CBM compatible, for conio) */
-#define COLOR_BLACK             0x00
-#define COLOR_WHITE             0x01
-#define COLOR_RED               0x02
-#define COLOR_CYAN              0x03
-#define COLOR_VIOLET            0x04
-#define COLOR_GREEN             0x05
-#define COLOR_BLUE              0x06
-#define COLOR_YELLOW            0x07
-#define COLOR_ORANGE            0x08
-#define COLOR_BROWN             0x09
-#define COLOR_LIGHTRED          0x0A
-#define COLOR_GRAY1             0x0B
-#define COLOR_GRAY2             0x0C
-#define COLOR_LIGHTGREEN        0x0D
-#define COLOR_LIGHTBLUE         0x0E
-#define COLOR_GRAY3             0x0F
-
-#define TV_NTSC                 0
-#define TV_PAL                  1
-#define TV_OTHER                2
-
-/* No support for dynamically loadable drivers */
-#define DYN_DRV         0
-
-/* The addresses of the static drivers */
-extern void pce_stdjoy_joy[];   /* Referred to by joy_static_stddrv[] */
-
-#define JOY_FIRE_B              5
-#define JOY_SELECT              6
-#define JOY_RUN                 7
-
-void waitvblank (void);
-/* Wait for the vertical blanking */
-
-/* NOTE: all PCE are NTSC */
-#define get_tv()                TV_NTSC
-/* Return the video mode the machine is using. */
-
-/* End of pce.h */
-#endif
diff --git a/include/peekpoke.h b/include/peekpoke.h
deleted file mode 100644 (file)
index 4c1156e..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                peekpoke.h                                 */
-/*                                                                           */
-/*     PEEK and POKE macros for those who want to write BASIC code in C      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _PEEKPOKE_H
-#define _PEEKPOKE_H
-
-
-
-/*****************************************************************************/
-/*                                  Macros                                   */
-/*****************************************************************************/
-
-
-
-#define POKE(addr,val)     (*(unsigned char*) (addr) = (val))
-#define POKEW(addr,val)    (*(unsigned*) (addr) = (val))
-#define PEEK(addr)         (*(unsigned char*) (addr))
-#define PEEKW(addr)        (*(unsigned*) (addr))
-
-
-
-/* End of peekpoke.h */
-#endif
-
-
-
diff --git a/include/pen.h b/include/pen.h
deleted file mode 100644 (file)
index e17f030..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   pen.h                                   */
-/*                                                                           */
-/*                               Lightpen API                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided "as-is", without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software.  If you use this software  */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated, but is not required.                                      */
-/* 2. Altered source versions must be marked plainly as such; and, must not  */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _PEN_H
-#define _PEN_H
-
-
-
-/*****************************************************************************/
-/*                               Declarations                                */
-/*****************************************************************************/
-
-
-
-/* A program optionally can set this pointer to a function that gives
-** a calibration value to a driver.  If this pointer isn't NULL,
-** then a driver that wants a value can call that function.
-** pen_adjuster must be set before the driver is installed.
-*/
-extern void __fastcall__ (*pen_adjuster) (unsigned char *pValue);
-
-
-
-/*****************************************************************************/
-/*                                 Functions                                 */
-/*****************************************************************************/
-
-
-
-void __fastcall__ pen_calibrate (unsigned char *XOffset);
-/* Ask the user to help to calibrate a lightpen.  Changes the screen!
-** A pointer to this function can be put into pen_adjuster.
-*/
-
-void __fastcall__ pen_adjust (const char *filename);
-/* Get a lightpen calibration value from a file if it exists.  Otherwise, call
-** pen_calibrate() to create a value; then, write it into a file, so that it
-** will be available at the next time that the lightpen is used.
-** Might change the screen.
-** pen_adjust() is optional; if you want to use its feature,
-** then it must be called before a driver is installed.
-** Note:  This function merely saves the file-name pointer, and sets
-** the pen_adjuster pointer.  The file will be read only when a driver
-** is installed, and only if that driver wants to be calibrated.
-*/
-
-
-
-/* End of pen.h */
-#endif
-
-
-
diff --git a/include/pet.h b/include/pet.h
deleted file mode 100644 (file)
index 720e40a..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   pet.h                                   */
-/*                                                                           */
-/*                      PET system specific definitions                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2005 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _PET_H
-#define _PET_H
-
-
-
-/* Check for errors */
-#if !defined(__PET__)
-#  error This module may only be used when compiling for the CBM PET!
-#endif
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Color defines */
-#define COLOR_BLACK             0x00
-#define COLOR_WHITE             0x01
-
-/* Define hardware */
-#include <_pia.h>
-#define PIA1    (*(struct __pia*)0xE810)
-#define PIA2    (*(struct __pia*)0xE820)
-
-#include <_6522.h>
-#define VIA     (*(struct __6522*)0xE840)
-
-/* All models from 40xx and above */
-#include <_6545.h>
-#define CRTC    (*(struct __6545)0xE880)
-
-/* SuperPET only */
-#include <_6551.h>
-#define ACIA    (*(struct __6551*)0xEFF0)
-
-
-
-/*****************************************************************************/
-/*                                 Variables                                 */
-/*****************************************************************************/
-
-
-
-/* The addresses of the static drivers */
-extern void pet_ptvjoy_joy[];
-extern void pet_stdjoy_joy[];       /* Referred to by joy_static_stddrv[] */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-/* The following #defines will cause the matching functions calls in conio.h
-** to be overlaid by macros with the same names, saving the function call
-** overhead.
-*/
-#define _textcolor(color)       COLOR_WHITE
-#define _bgcolor(color)         COLOR_BLACK
-#define _bordercolor(color)     COLOR_BLACK
-
-
-
-/* End of pet.h */
-#endif
diff --git a/include/plus4.h b/include/plus4.h
deleted file mode 100644 (file)
index 840e8b3..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  plus4.h                                  */
-/*                                                                           */
-/*                    Plus/4 system specific definitions                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2006, Ullrich von Bassewitz                                      */
-/*                Römerstrasse 52                                            */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _PLUS4_H
-#define _PLUS4_H
-
-
-
-/* Check for errors */
-#if !defined(__PLUS4__)
-#  error This module may only be used when compiling for the Plus/4!
-#endif
-
-
-
-/* Include the base header file for the 264 series. include file.
- */
-#ifndef _CBM264_H
-#include <cbm264.h>
-#endif
-
-/* Define hardware */
-#include <_6551.h>
-#define ACIA    (*(struct __6551*)0xFD00)
-
-
-
-/* The addresses of the static drivers */
-extern void plus4_stdjoy_joy[];   /* Referred to by joy_static_stddrv[] */
-extern void plus4_stdser_ser[];
-
-
-
-/* End of plus4.h */
-#endif
diff --git a/include/serial.h b/include/serial.h
deleted file mode 100644 (file)
index 990f665..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 serial.h                                  */
-/*                                                                           */
-/*                         Serial communication API                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _SERIAL_H
-#define _SERIAL_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Baudrate settings */
-#define SER_BAUD_45_5           0x00
-#define SER_BAUD_50             0x01
-#define SER_BAUD_75             0x02
-#define SER_BAUD_110            0x03
-#define SER_BAUD_134_5          0x04
-#define SER_BAUD_150            0x05
-#define SER_BAUD_300            0x06
-#define SER_BAUD_600            0x07
-#define SER_BAUD_1200           0x08
-#define SER_BAUD_1800           0x09
-#define SER_BAUD_2400           0x0A
-#define SER_BAUD_3600           0x0B
-#define SER_BAUD_4800           0x0C
-#define SER_BAUD_7200           0x0D
-#define SER_BAUD_9600           0x0E
-#define SER_BAUD_19200          0x0F
-#define SER_BAUD_38400          0x10
-#define SER_BAUD_57600          0x11
-#define SER_BAUD_115200         0x12
-#define SER_BAUD_230400         0x13
-#define SER_BAUD_31250          0x14
-#define SER_BAUD_62500          0x15
-#define SER_BAUD_56_875         0x16
-
-/* Data bit settings */
-#define SER_BITS_5              0x00
-#define SER_BITS_6              0x01
-#define SER_BITS_7              0x02
-#define SER_BITS_8              0x03
-
-/* Stop bit settings */
-#define SER_STOP_1              0x00    /* One stop bit */
-#define SER_STOP_2              0x01    /* Two stop bits */
-
-/* Parity settings */
-#define SER_PAR_NONE            0x00
-#define SER_PAR_ODD             0x01
-#define SER_PAR_EVEN            0x02
-#define SER_PAR_MARK            0x03
-#define SER_PAR_SPACE           0x04
-
-/* Handshake settings. The latter two may be combined. */
-#define SER_HS_NONE             0x00    /* No handshake */
-#define SER_HS_HW               0x01    /* Hardware (RTS/CTS) handshake */
-#define SER_HS_SW               0x02    /* Software handshake */
-
-/* Bit masks to mask out things from the status returned by ser_status.
-** These are 6551 specific and must be mapped by drivers for other chips.
-*/
-#define SER_STATUS_PE           0x01    /* Parity error */
-#define SER_STATUS_FE           0x02    /* Framing error */
-#define SER_STATUS_OE           0x04    /* Overrun error */
-#define SER_STATUS_DCD          0x20    /* NOT data carrier detect */
-#define SER_STATUS_DSR          0x40    /* NOT data set ready */
-
-/* Error codes returned by all functions */
-#define SER_ERR_OK              0x00    /* Not an error - relax */
-#define SER_ERR_NO_DRIVER       0x01    /* No driver available */
-#define SER_ERR_CANNOT_LOAD     0x02    /* Error loading driver */
-#define SER_ERR_INV_DRIVER      0x03    /* Invalid driver */
-#define SER_ERR_NO_DEVICE       0x04    /* Device (hardware) not found */
-#define SER_ERR_BAUD_UNAVAIL    0x05    /* Baud rate not available */
-#define SER_ERR_NO_DATA         0x06    /* Nothing to read */
-#define SER_ERR_OVERFLOW        0x07    /* No room in send buffer */
-#define SER_ERR_INIT_FAILED     0x08    /* Initialization failed */
-#define SER_ERR_INV_IOCTL       0x09    /* IOCTL not supported */
-#define SER_ERR_INSTALLED       0x0A    /* A driver is already installed */
-#define SER_ERR_NOT_OPEN        0x0B    /* Driver is not open */
-
-/* Struct containing parameters for the serial port */
-struct ser_params {
-    unsigned char       baudrate;       /* Baudrate */
-    unsigned char       databits;       /* Number of data bits */
-    unsigned char       stopbits;       /* Number of stop bits */
-    unsigned char       parity;         /* Parity setting */
-    unsigned char       handshake;      /* Type of handshake to use */
-};
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned char __fastcall__ ser_load_driver (const char* driver);
-/* Load and install a serial driver. Return an error code. */
-
-unsigned char ser_unload (void);
-/* Uninstall, then unload the currently loaded driver. */
-
-unsigned char __fastcall__ ser_install (void* driver);
-/* Install an already loaded driver. Return an error code. */
-
-unsigned char ser_uninstall (void);
-/* Uninstall the currently loaded driver and return an error code.
-** Note: This call does not free allocated memory.
-*/
-
-unsigned char __fastcall__ ser_open (const struct ser_params* params);
-/* "Open" the port by setting the port parameters and enable interrupts. */
-
-unsigned char ser_close (void);
-/* "Close" the port. Clear buffers and and disable interrupts. */
-
-unsigned char __fastcall__ ser_get (char* b);
-/* Get a character from the serial port. If no characters are available, the
-** function will return SER_ERR_NO_DATA, so this is not a fatal error.
-*/
-
-unsigned char __fastcall__ ser_put (char b);
-/* Send a character via the serial port. There is a transmit buffer, but
-** transmitting is not done via interrupt. The function returns
-** SER_ERR_OVERFLOW if there is no space left in the transmit buffer.
-*/
-
-unsigned char __fastcall__ ser_status (unsigned char* status);
-/* Return the serial port status. */
-
-unsigned char __fastcall__ ser_ioctl (unsigned char code, void* data);
-/* Driver specific entry. */
-
-
-
-/* End of serial.h */
-#endif
-
-
-
diff --git a/include/setjmp.h b/include/setjmp.h
deleted file mode 100644 (file)
index 460829e..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 setjmp.h                                  */
-/*                                                                           */
-/*                              Nonlocal jumps                               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _SETJMP_H
-#define _SETJMP_H
-
-
-
-typedef char jmp_buf [5];
-
-
-
-int __fastcall__ _setjmp (jmp_buf buf);
-#define setjmp  _setjmp         /* ISO insists on a macro */
-void __fastcall__ longjmp (jmp_buf buf, int retval) __attribute__((noreturn));
-
-
-
-/* End of setjmp.h */
-#endif
-
-
-
diff --git a/include/signal.h b/include/signal.h
deleted file mode 100644 (file)
index 5cb63fc..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 signal.h                                  */
-/*                                                                           */
-/*                        Signal handling definitions                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2005, Ullrich von Bassewitz                                      */
-/*                Römerstraße 52                                             */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _SIGNAL_H
-#define _SIGNAL_H
-
-
-
-/* sig_atomic_t */
-typedef unsigned char sig_atomic_t;
-
-/* Type of a signal handler */
-typedef void __fastcall__ (*__sigfunc) (int);
-
-/* Functions that implement SIG_IGN and SIG_DFL */
-void __fastcall__ _sig_ign (int);
-void __fastcall__ _sig_dfl (int);
-
-/* Standard signal handling functions */
-#define SIG_DFL         _sig_dfl
-#define SIG_IGN         _sig_ign
-#define SIG_ERR         ((__sigfunc) 0x0000)
-
-/* Signal numbers */
-#define SIGABRT         0
-#define SIGFPE          1
-#define SIGILL          2
-#define SIGINT          3
-#define SIGSEGV         4
-#define SIGTERM         5
-
-/* Function declarations */
-__sigfunc __fastcall__ signal (int sig, __sigfunc func);
-int __fastcall__ raise (int sig);
-
-
-
-/* End of signal.h */
-#endif
-
-
-
diff --git a/include/stdarg.h b/include/stdarg.h
deleted file mode 100644 (file)
index adf7348..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 stdarg.h                                  */
-/*                                                                           */
-/*                            Variable arguments                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2004 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _STDARG_H
-#define _STDARG_H
-
-
-
-typedef unsigned char* va_list;
-
-#define va_start(ap, fix)       ap = ((va_list)&(fix))
-#define va_arg(ap,type)         (*(type*)(ap -= ((sizeof (type) + 1) & ~1)))
-#if __CC65_STD__ >= __CC65_STD_C99__
-#define va_copy(dest, src)      ((dest)=(src))
-#endif
-#define va_end(ap)
-
-
-
-/* End of stdarg.h */
-#endif
-
-
-
-
diff --git a/include/stdbool.h b/include/stdbool.h
deleted file mode 100644 (file)
index 137dde7..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 stdbool.h                                 */
-/*                                                                           */
-/*                          C99 Boolean definitions                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002 Greg King                                                        */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided "as-is," without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter and redistribute it       */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software.  If you use this software  */
-/*    in a product, an acknowledgment, in the product's documentation,       */
-/*    would be appreciated, but is not required.                             */
-/* 2. Alterred source versions must be marked plainly as such,               */
-/*    and must not be misrepresented as being the original software.         */
-/* 3. This notice may not be removed or alterred                             */
-/*    from any source distribution.                                          */
-/*****************************************************************************/
-
-
-
-#ifndef _STDBOOL_H
-#define _STDBOOL_H
-
-
-
-#define bool _Bool
-typedef unsigned char _Bool;
-
-/* Standard test-results. */
-#define false 0
-#define true  1
-
-/* All three names are macroes. */
-#define __bool_true_false_are_defined 1
-
-
-
-/* End of stdbool.h */
-#endif
-
-
-
diff --git a/include/stddef.h b/include/stddef.h
deleted file mode 100644 (file)
index 3230a32..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 stddef.h                                  */
-/*                                                                           */
-/*                            Common definitions                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _STDDEF_H
-#define _STDDEF_H
-
-
-
-/* Standard data types */
-#ifndef _HAVE_ptrdiff_t
-#define _HAVE_ptrdiff_t
-typedef int ptrdiff_t;
-#endif
-#ifndef _HAVE_wchar_t
-#define _HAVE_wchar_t
-typedef char wchar_t;
-#endif
-#ifndef _HAVE_size_t
-#define _HAVE_size_t
-typedef unsigned size_t;
-#endif
-
-/* NULL pointer */
-#ifndef _HAVE_NULL
-#define NULL    0
-#define _HAVE_NULL
-#endif
-
-/* offsetof macro */
-#define offsetof(type, member)  (size_t) (&((type*) 0)->member)
-
-
-
-/* End of stddef.h */
-#endif
-
-
-
diff --git a/include/stdint.h b/include/stdint.h
deleted file mode 100644 (file)
index 5d6f047..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 stdint.h                                  */
-/*                                                                           */
-/*                          Standard integer types                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* Note: This file is not fully ISO 9899-1999 compliant because cc65 lacks
-** a 64 bit data types. The declarations have been adjusted accordingly.
-*/
-
-
-
-#ifndef _STDINT_H
-#define _STDINT_H
-
-
-
-/* Exact-width integer types */
-typedef signed char         int8_t;
-typedef int                 int16_t;
-typedef long                int32_t;
-typedef unsigned char       uint8_t;
-typedef unsigned            uint16_t;
-typedef unsigned long       uint32_t;
-
-#define INT8_MIN            ((int8_t) 0x80)
-#define INT8_MAX            ((int8_t) 0x7F)
-#define INT16_MIN           ((int16_t) 0x8000)
-#define INT16_MAX           ((int16_t) 0x7FFF)
-#define INT32_MIN           ((int32_t) 0x80000000)
-#define INT32_MAX           ((int32_t) 0x7FFFFFFF)
-#define UINT8_MAX           ((uint8_t) 0xFF)
-#define UINT16_MAX          ((uint16_t) 0xFFFF)
-#define UINT32_MAX          ((uint32_t) 0xFFFFFFFF)
-
-/* Minimum-width integer types */
-typedef signed char         int_least8_t;
-typedef int                 int_least16_t;
-typedef long                int_least32_t;
-typedef unsigned char       uint_least8_t;
-typedef unsigned            uint_least16_t;
-typedef unsigned long       uint_least32_t;
-
-#define INT_LEAST8_MIN      ((int_least8_t) 0x80)
-#define INT_LEAST8_MAX      ((int_least8_t) 0x7F)
-#define INT_LEAST16_MIN     ((int_least16_t) 0x8000)
-#define INT_LEAST16_MAX     ((int_least16_t) 0x7FFF)
-#define INT_LEAST32_MIN     ((int_least32_t) 0x80000000)
-#define INT_LEAST32_MAX     ((int_least32_t) 0x7FFFFFFF)
-#define UINT_LEAST8_MAX     ((uint_least8_t) 0xFF)
-#define UINT_LEAST16_MAX    ((uint_least16_t) 0xFFFF)
-#define UINT_LEAST32_MAX    ((uint_least32_t) 0xFFFFFFFF)
-
-/* Fastest minimum-width integer types */
-typedef signed char         int_fast8_t;
-typedef int                 int_fast16_t;
-typedef long                int_fast32_t;
-typedef unsigned char       uint_fast8_t;
-typedef unsigned            uint_fast16_t;
-typedef unsigned long       uint_fast32_t;
-
-#define INT_FAST8_MIN       ((int_fast8_t) 0x80)
-#define INT_FAST8_MAX       ((int_fast8_t) 0x7F)
-#define INT_FAST16_MIN      ((int_fast16_t) 0x8000)
-#define INT_FAST16_MAX      ((int_fast16_t) 0x7FFF)
-#define INT_FAST32_MIN      ((int_fast32_t) 0x80000000)
-#define INT_FAST32_MAX      ((int_fast32_t) 0x7FFFFFFF)
-#define UINT_FAST8_MAX      ((uint_fast8_t) 0xFF)
-#define UINT_FAST16_MAX     ((uint_fast16_t) 0xFFFF)
-#define UINT_FAST32_MAX     ((uint_fast32_t) 0xFFFFFFFF)
-
-/* Integer types capable of holding object pointers */
-typedef int                 intptr_t;
-typedef unsigned            uintptr_t;
-
-#define INTPTR_MIN          ((intptr_t)0x8000)
-#define INTPTR_MAX          ((intptr_t)0x7FFF)
-#define UINTPTR_MAX         ((uintptr_t) 0xFFFF)
-
-/* Greatest width integer types */
-typedef long                intmax_t;
-typedef unsigned long       uintmax_t;
-
-#define INTMAX_MIN          ((intmax_t) 0x80000000)
-#define INTMAX_MAX          ((intmax_t) 0x7FFFFFFF)
-#define UINTMAX_MAX         ((uintmax_t) 0xFFFFFFFF)
-
-/* Limits of other integer types */
-#define PTRDIFF_MIN         ((int) 0x8000)
-#define PTRDIFF_MAX         ((int) 0x7FFF)
-
-#define SIG_ATOMIC_MIN      ((unsigned char) 0x00)
-#define SIG_ATOMIC_MAX      ((unsigned char) 0xFF)
-
-#define SIZE_MAX            0xFFFF
-
-/* Macros for minimum width integer constants */
-#define INT8_C(c)           c
-#define INT16_C(c)          c
-#define INT32_C(c)          c##L
-#define UINT8_C(c)          c##U
-#define UINT16_C(c)         c##U
-#define UINT32_C(c)         c##UL
-
-/* Macros for greatest width integer constants */
-#define INTMAX_C(c)         c##L
-#define UINTMAX_C(c)        c##UL
-
-
-
-/* End of stdint.h */
-#endif
-
-
-
diff --git a/include/stdio.h b/include/stdio.h
deleted file mode 100644 (file)
index c2c735c..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  stdio.h                                  */
-/*                                                                           */
-/*                               Input/output                                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _STDIO_H
-#define _STDIO_H
-
-
-
-#ifndef _STDDEF_H
-#  include <stddef.h>
-#endif
-#ifndef _STDARG_H
-#  include <stdarg.h>
-#endif
-
-
-
-/* Types */
-typedef struct _FILE FILE;
-typedef unsigned long fpos_t;
-
-/* Standard file descriptors */
-extern FILE* stdin;
-extern FILE* stdout;
-extern FILE* stderr;
-
-/* Standard defines */
-#define _IOFBF          0
-#define _IOLBF          1
-#define _IONBF          2
-#define BUFSIZ          256
-#define EOF             -1
-#define FOPEN_MAX       8
-#define SEEK_CUR        0
-#define SEEK_END        1
-#define SEEK_SET        2
-#define TMP_MAX         256
-
-/* Standard defines that are platform dependent */
-#if defined(__APPLE2__)
-#  define FILENAME_MAX  (64+1)
-#elif defined(__ATARI__)
-#  define FILENAME_MAX  (12+1)
-#elif defined(__LUNIX__)
-#  define FILENAME_MAX  (80+1)
-#else
-#  define FILENAME_MAX  (16+1)
-#endif
-#define L_tmpnam        FILENAME_MAX
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-/* Functions */
-void __fastcall__ clearerr (FILE* f);
-int __fastcall__ fclose (FILE* f);
-int __fastcall__ feof (FILE* f);
-int __fastcall__ ferror (FILE* f);
-int __fastcall__ fflush (FILE* f);
-int __fastcall__ fgetc (FILE* f);
-char* __fastcall__ fgets (char* buf, size_t size, FILE* f);
-FILE* __fastcall__ fopen (const char* name, const char* mode);
-int fprintf (FILE* f, const char* format, ...);
-int __fastcall__ fputc (int c, FILE* f);
-int __fastcall__ fputs (const char* s, FILE* f);
-size_t __fastcall__ fread (void* buf, size_t size, size_t count, FILE* f);
-FILE* __fastcall__ freopen (const char* name, const char* mode, FILE* f);
-size_t __fastcall__ fwrite (const void* buf, size_t size, size_t count, FILE* f);
-int __fastcall__ fgetpos (FILE* f, fpos_t *pos);
-int __fastcall__ fsetpos (FILE* f, const fpos_t* pos);
-long __fastcall__ ftell (FILE* f);
-int __fastcall__ fseek (FILE* f, long offset, int whence);
-void __fastcall__ rewind (FILE *f);
-int getchar (void);
-char* __fastcall__ gets (char* s);
-void __fastcall__ perror (const char* s);
-int printf (const char* format, ...);
-int __fastcall__ putchar (int c);
-int __fastcall__ puts (const char* s);
-int __fastcall__ remove (const char* name);
-int __fastcall__ rename (const char* oldname, const char* newname);
-int snprintf (char* buf, size_t size, const char* format, ...);
-int sprintf (char* buf, const char* format, ...);
-int __fastcall__ ungetc (int c, FILE* f);
-int __fastcall__ vfprintf (FILE* f, const char* format, va_list ap);
-int __fastcall__ vprintf (const char* format, va_list ap);
-int __fastcall__ vsnprintf (char* buf, size_t size, const char* format, va_list ap);
-int __fastcall__ vsprintf (char* buf, const char* format, va_list ap);
-
-int scanf (const char* format, ...);
-int fscanf (FILE* f, const char* format, ...);
-int sscanf (const char* s, const char* format, ...);
-int __fastcall__ vscanf (const char* format, va_list ap);
-int __fastcall__ vsscanf (const char* s, const char* format, va_list ap);
-int __fastcall__ vfscanf (FILE* f, const char* format, va_list ap);
-
-#if __CC65_STD__ == __CC65_STD_CC65__
-FILE* __fastcall__ fdopen (int fd, const char* mode);   /* Unix */
-int __fastcall__ fileno (FILE* f);                      /* Unix */
-#endif
-void __fastcall__ _poserror (const char* msg);          /* cc65 */
-
-/* Masking macros for some functions */
-#define getc(f)         fgetc (f)               /* ANSI */
-#define putc(c, f)      fputc (c, f)            /* ANSI */
-
-
-
-/* End of stdio.h */
-#endif
-
-
-
diff --git a/include/stdlib.h b/include/stdlib.h
deleted file mode 100644 (file)
index 3103172..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 stdlib.h                                  */
-/*                                                                           */
-/*                             General utilities                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _STDLIB_H
-#define _STDLIB_H
-
-
-
-/* size_t is needed */
-#ifndef _HAVE_size_t
-typedef unsigned size_t;
-#define _HAVE_size_t
-#endif
-
-/* Standard exit codes */
-#define EXIT_SUCCESS    0
-#define EXIT_FAILURE    1
-
-/* Return type of the div function */
-typedef struct {
-    int rem;
-    int quot;
-} div_t;
-
-/* Return type of the ldiv function (which currently doesn't exist) */
-typedef struct {
-    long rem;
-    long quot;
-} ldiv_t;
-
-/* Memory management */
-void* __fastcall__ malloc (size_t size);
-void* __fastcall__ calloc (size_t count, size_t size);
-void* __fastcall__ realloc (void* block, size_t size);
-void __fastcall__ free (void* block);
-
-/* Non standard memory management functions */
-
-#if __CC65_STD__ == __CC65_STD_CC65__
-int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size);
-/* Allocate a block of memory with the given "size", which is aligned to a
-** memory address that is a multiple of "alignment".  "alignment" MUST NOT be
-** zero, and MUST be a power of two; otherwise, this function will return
-** EINVAL.  The function returns ENOMEM if not enough memory is available
-** to satisfy the request.  "memptr" must point to a variable; that variable
-** will return the address of the allocated memory.  Use free() to release that
-** allocated block.
-*/
-#endif
-
-void __fastcall__ _heapadd (void* mem, size_t size);
-/* Add a block to the heap */
-
-size_t __fastcall__ _heapblocksize (const void* block);
-/* Return the size of an allocated block */
-
-size_t _heapmemavail (void);
-/* Return the total free heap space */
-
-size_t _heapmaxavail (void);
-/* Return the size of the largest free block on the heap */
-
-
-/* Random numbers */
-#define RAND_MAX        0x7FFF
-int rand (void);
-void __fastcall__ srand (unsigned seed);
-void _randomize (void);         /* Non-standard */
-
-/* Other standard stuff */
-void abort (void) __attribute__ ((noreturn));
-int __fastcall__ abs (int val);
-long __fastcall__ labs (long val);
-int __fastcall__ atoi (const char* s);
-long __fastcall__ atol (const char* s);
-int __fastcall__ atexit (void (*exitfunc) (void));
-void* __fastcall__ bsearch (const void* key, const void* base, size_t n,
-                            size_t size, int __fastcall__ (* cmp) (const void*, const void*));
-div_t __fastcall__ div (int numer, int denom);
-void __fastcall__ exit (int ret) __attribute__ ((noreturn));
-char* __fastcall__ getenv (const char* name);
-void __fastcall__ qsort (void* base, size_t count, size_t size,
-                         int __fastcall__ (* compare) (const void*, const void*));
-long __fastcall__ strtol (const char* nptr, char** endptr, int base);
-unsigned long __fastcall__ strtoul (const char* nptr, char** endptr, int base);
-int __fastcall__ system (const char* s);
-
-/* Non-ANSI functions */
-void __fastcall__ _swap (void* p, void* q, size_t size);
-#if __CC65_STD__ == __CC65_STD_CC65__
-char* __fastcall__ itoa (int val, char* buf, int radix);
-char* __fastcall__ utoa (unsigned val, char* buf, int radix);
-char* __fastcall__ ltoa (long val, char* buf, int radix);
-char* __fastcall__ ultoa (unsigned long val, char* buf, int radix);
-int __fastcall__ putenv (char* s);
-#endif
-
-
-
-/* End of stdlib.h */
-#endif
-
-
-
diff --git a/include/string.h b/include/string.h
deleted file mode 100644 (file)
index 46095a5..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 string.h                                  */
-/*                                                                           */
-/*                              String handling                              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2014, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _STRING_H
-#define _STRING_H
-
-
-
-#include <stddef.h>
-
-
-
-char* __fastcall__ strcat (char* dest, const char* src);
-char* __fastcall__ strchr (const char* s, int c);
-int __fastcall__ strcmp (const char* s1, const char* s2);
-int __fastcall__ strcoll (const char* s1, const char* s2);
-char* __fastcall__ strcpy (char* dest, const char* src);
-size_t __fastcall__ strcspn (const char* s1, const char* s2);
-char* __fastcall__ strerror (int errcode);
-size_t __fastcall__ strlen (const char* s);
-char* __fastcall__ strncat (char* s1, const char* s2, size_t count);
-int __fastcall__ strncmp (const char* s1, const char* s2, size_t count);
-char* __fastcall__ strncpy (char* dest, const char* src, size_t count);
-char* __fastcall__ strrchr (const char* s, int c);
-size_t __fastcall__ strspn (const char* s1, const char* s2);
-char* __fastcall__ strstr (const char* str, const char* substr);
-char* __fastcall__ strtok (char* s1, const char* s2);
-size_t __fastcall__ strxfrm (char* s1, const char* s2, size_t count);
-void* __fastcall__ memchr (const void* mem, int c, size_t count);
-int __fastcall__ memcmp (const void* p1, const void* p2, size_t count);
-void* __fastcall__ memcpy (void* dest, const void* src, size_t count);
-void* __fastcall__ memmove (void* dest, const void* src, size_t count);
-void* __fastcall__ memset (void* s, int c, size_t count);
-
-/* The following is an internal function, the compiler will replace memset
-** with it if the fill value is zero. Never use this one directly!
-*/
-void* __fastcall__ _bzero (void* ptr, size_t n);
-
-/* Non standard: */
-#if __CC65_STD__ == __CC65_STD_CC65__
-void __fastcall__ bzero (void* ptr, size_t n);                /* BSD */
-char* __fastcall__ strdup (const char* s);                    /* SYSV/BSD */
-int __fastcall__ stricmp (const char* s1, const char* s2);    /* DOS/Windows */
-int __fastcall__ strcasecmp (const char* s1, const char* s2); /* Same for Unix */
-int __fastcall__ strnicmp (const char* s1, const char* s2, size_t count);     /* DOS/Windows */
-int __fastcall__ strncasecmp (const char* s1, const char* s2, size_t count);  /* Same for Unix */
-char* __fastcall__ strlwr (char* s);
-char* __fastcall__ strlower (char* s);
-char* __fastcall__ strupr (char* s);
-char* __fastcall__ strupper (char* s);
-char* __fastcall__ strqtok (char* s1, const char* s2);
-#endif
-
-const char* __fastcall__ _stroserror (unsigned char errcode);
-/* Map an operating system error number to an error message. */
-
-
-
-/* End of string.h */
-#endif
diff --git a/include/supervision.h b/include/supervision.h
deleted file mode 100644 (file)
index ffece4e..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                               supervision.h                               */
-/*                                                                           */
-/*                     Supervision specific definitions                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* 2003 Peter Trauner (trap@utanet.at)                                       */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided "as-is," without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter and redistribute it       */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software.  If you use this software  */
-/*    in a product, an acknowledgment, in the product's documentation,       */
-/*    would be appreciated, but is not required.                             */
-/* 2. Alterred source versions must be marked plainly as such,               */
-/*    and must not be misrepresented as being the original software.         */
-/* 3. This notice may not be removed or alterred                             */
-/*    from any source distribution.                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _SUPERVISION_H
-#define _SUPERVISION_H
-
-
-
-/* Check for errors */
-#if !defined(__SUPERVISION__)
-#  error This module may only be used when compiling for the Supervision!
-#endif
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-struct __sv_lcd {
-    unsigned char       width;
-    unsigned char       height;
-    unsigned char       xpos;
-    unsigned char       ypos;
-};
-#define SV_LCD  ((struct __sv_lcd*)0x2000)
-
-struct __sv_tone {
-    unsigned            delay;
-    unsigned char       control;
-    unsigned char       timer;
-};
-#define SV_RIGHT ((struct __sv_tone*)0x2010)
-#define SV_LEFT  ((struct __sv_tone*)0x2014)
-
-struct __sv_noise {
-    unsigned char       volume;         /* and frequency */
-    unsigned char       timer;
-    unsigned char       control;
-};
-#define SV_NOISE ((struct __sv_noise*)0x2028)
-
-struct __io_port {
-    unsigned char       in;
-    unsigned char       out;
-};
-#define IO_PORT  ((struct __io_port*)(0x2021)
-
-struct __sv_dma {
-    unsigned            start;
-    unsigned char       size;
-    unsigned char       control;
-    unsigned char       on;
-};
-#define SV_DMA   ((struct __sv_dma*)0x2018)
-
-#define SV_CONTROL (*(unsigned char*)0x2020)
-
-#define SV_BANK  (*(unsigned char*)0x2026)
-#define SV_BANK_COMBINE(nmi,irq_timer,irq_dma,lcd_on, timer_prescale, bank) \
-        ((nmi)?1:0)|((irq_timer)?2:0)|((irq_dma)?4:0)|((lcd_on)?8:0) \
-        |((timer_prescale)?0x10:0)|((bank)<<5)
-
-#define SV_VIDEO ((unsigned char*)0x4000)
-#define SV_TIMER_COUNT (*(unsigned char*)0x2023)
-
-
-
-/* Counters incremented asynchronously!
-** If you want more complex, copy the crt0.s file from the libsrc/supervision
-** directory and code them yourself (in assembler)
-*/
-extern unsigned char sv_nmi_counter;
-extern unsigned char sv_timer_irq_counter;
-extern unsigned char sv_timer_dma_counter;
-
-
-
-/* End of supervision.h */
-#endif
-
-
diff --git a/include/sys/types.h b/include/sys/types.h
deleted file mode 100644 (file)
index 9b1e961..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  types.h                                  */
-/*                                                                           */
-/*                   Primitive system data types for cc65                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _TYPES_H
-#define _TYPES_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* off_t is also defined in unistd.h */
-#ifndef _HAVE_off_t
-#define _HAVE_off_t
-typedef long int off_t;
-#endif
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-/* End of types.h */
-#endif
-
-
-
diff --git a/include/sys/utsname.h b/include/sys/utsname.h
deleted file mode 100644 (file)
index a601d9e..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 utsname.h                                 */
-/*                                                                           */
-/*                         Return system information                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _UTSNAME_H
-#define _UTSNAME_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-                   
-
-
-/*
-** Suggested field contents:
-**
-**   sysname
-**      Should contain the name of the underlying operating system, or "cc65"
-**      if the program runs on the bare machine.
-**
-**   nodename
-**      Is empty or may be defined by the implementor.
-**
-**   release
-**      Contains the operating system release or the major/minor cc65 version
-**      if sysname contains "cc65".
-**
-**   version
-**      Contains the operating system version or the cc65 patch version if
-**      sysname contains "cc65".
-**
-**   machine
-**      Contains the complete name of the machine, like "Commodore 64",
-**      "Oric Atmos" or similar.
-**
-** Beware: The library sources written in assembler have knowledge about this
-** struct!
-*/
-struct utsname {
-    char sysname[17];
-    char nodename[9];
-    char release[9];
-    char version[9];
-    char machine[25];
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int __fastcall__ uname (struct utsname* buf);
-/* Return system information */
-
-
-
-/* End of utsname.h */
-#endif
-
-
-
diff --git a/include/tgi.h b/include/tgi.h
deleted file mode 100644 (file)
index 02dff88..0000000
+++ /dev/null
@@ -1,289 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                     tgi.h                                 */
-/*                                                                           */
-/*                            Tiny graphics interface                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _TGI_H
-#define _TGI_H
-
-
-
-#ifndef _TGI_ERROR_H
-#include <tgi/tgi-error.h>
-#endif
-
-
-
-/*****************************************************************************/
-/*                                  Definitions                              */
-/*****************************************************************************/
-
-
-
-/* Font constants for use with tgi_settextstyle */
-#define TGI_FONT_BITMAP         0
-#define TGI_FONT_VECTOR         1
-
-/* Direction constants for use with tgi_settextstyle */
-#define TGI_TEXT_HORIZONTAL     0
-#define TGI_TEXT_VERTICAL       1
-
-/* The name of the standard tgi driver for a platform */
-extern const char tgi_stddrv[];
-
-/* The address of the static standard tgi driver for a platform */
-extern const void tgi_static_stddrv[];
-
-/* A vector font definition */
-typedef struct tgi_vectorfont tgi_vectorfont;
-
-
-
-/*****************************************************************************/
-/*                                 Functions                                 */
-/*****************************************************************************/
-
-
-
-void __fastcall__ tgi_load_driver (const char* name);
-/* Load and install the given driver. */
-
-void tgi_unload (void);
-/* Uninstall, then unload the currently loaded driver. Will call tgi_done if
-** necessary.
-*/
-
-void __fastcall__ tgi_install (void* driver);
-/* Install an already loaded driver. */
-
-void tgi_uninstall (void);
-/* Uninstall the currently loaded driver but do not unload it. Will call
-** tgi_done if necessary.
-*/
-
-void tgi_init (void);
-/* Initialize the already loaded graphics driver. */
-
-void tgi_done (void);
-/* End graphics mode, switch back to text mode. Will NOT uninstall or unload
-** the driver!
-*/
-
-const tgi_vectorfont* __fastcall__ tgi_load_vectorfont (const char* name);
-/* Load a vector font into memory and return it. In case of errors, NULL is
-** returned and an error is set, which can be retrieved using tgi_geterror.
-** To use the font, it has to be installed using tgi_install_vectorfont.
-*/
-
-void __fastcall__ tgi_install_vectorfont (const tgi_vectorfont* font);
-/* Install a vector font for use. More than one vector font can be loaded,
-** but only one can be active. This function is used to tell which one. Call
-** with a NULL pointer to uninstall the currently installed font.
-*/
-
-void __fastcall__ tgi_free_vectorfont (const tgi_vectorfont* font);
-/* Free a vector font that was previously loaded into memory. */
-
-unsigned char tgi_geterror (void);
-/* Return the error code for the last operation. This will also clear the
-** error.
-*/
-
-const char* __fastcall__ tgi_geterrormsg (unsigned char code);
-/* Get an error message describing the error in code. */
-
-void tgi_clear (void);
-/* Clear the drawpage. */
-
-unsigned tgi_getpagecount (void);
-/* Returns the number of screen pages available. */
-
-void __fastcall__ tgi_setviewpage (unsigned char page);
-/* Set the visible page. Will set an error if the page is not available. */
-
-void __fastcall__ tgi_setdrawpage (unsigned char page);
-/* Set the drawable page. Will set an error if the page is not available. */
-
-unsigned char tgi_getcolorcount (void);
-/* Get the number of available colors. */
-
-unsigned char tgi_getmaxcolor (void);
-/* Return the maximum supported color number (the number of colors would
-** then be getmaxcolor()+1).
-*/
-
-void __fastcall__ tgi_setcolor (unsigned char color);
-/* Set the current drawing color. */
-
-unsigned char tgi_getcolor (void);
-/* Return the current drawing color. */
-
-void __fastcall__ tgi_setpalette (const unsigned char* palette);
-/* Set the palette (not available with all drivers/hardware). palette is
-** a pointer to as many entries as there are colors.
-*/
-
-const unsigned char* tgi_getpalette (void);
-/* Return the current palette. */
-
-const unsigned char* tgi_getdefpalette (void);
-/* Return the default palette. */
-
-unsigned tgi_getxres (void);
-/* Return the resolution in X direction. */
-
-unsigned tgi_getmaxx (void);
-/* Return the maximum x coordinate. The resolution in x direction is
-** getmaxx() + 1
-*/
-
-unsigned tgi_getyres (void);
-/* Return the resolution in Y direction. */
-
-unsigned tgi_getmaxy (void);
-/* Return the maximum y coordinate. The resolution in y direction is
-** getmaxy() + 1
-*/
-
-unsigned tgi_getaspectratio (void);
-/* Returns the aspect ratio for the loaded driver. The aspect ratio is an
-** 8.8 fixed point value.
-*/
-
-void __fastcall__ tgi_setaspectratio (unsigned aspectratio);
-/* Set a new aspect ratio for the loaded driver. The aspect ratio is an
-** 8.8 fixed point value.
-*/
-
-unsigned char __fastcall__ tgi_getpixel (int x, int y);
-/* Get the color value of a pixel. */
-
-void __fastcall__ tgi_setpixel (int x, int y);
-/* Plot a pixel in the current drawing color. */
-
-void __fastcall__ tgi_gotoxy (int x, int y);
-/* Set the graphics cursor to the given position. */
-
-void __fastcall__ tgi_line (int x1, int y1, int x2, int y2);
-/* Draw a line in the current drawing color. The graphics cursor will
-** be set to x2/y2 by this call.
-*/
-
-void __fastcall__ tgi_lineto (int x2, int y2);
-/* Draw a line in the current drawing color from the graphics cursor to the
-** new end point. The graphics cursor will be updated to x2/y2.
-*/
-
-void __fastcall__ tgi_circle (int x, int y, unsigned char radius);
-/* Draw a circle in the current drawing color. */
-
-void __fastcall__ tgi_ellipse (int x, int y, unsigned char rx, unsigned char ry);
-/* Draw a full ellipse with center at x/y and radii rx/ry using the current
-** drawing color.
-*/
-
-void __fastcall__ tgi_arc (int x, int y, unsigned char rx, unsigned char ry,
-                           unsigned sa, unsigned ea);
-/* Draw an ellipse arc with center at x/y and radii rx/ry using the current
-** drawing color. The arc covers the angle between sa and ea (startangle and
-** endangle), which must be in the range 0..360 (otherwise the function may
-** bevave unextectedly).
-*/
-
-void __fastcall__ tgi_pieslice (int x, int y, unsigned char rx, unsigned char ry,
-                                unsigned sa, unsigned ea);
-/* Draw an ellipse pie slice with center at x/y and radii rx/ry using the
-** current drawing color. The pie slice covers the angle between sa and ea
-** (startangle and endangle), which must be in the range 0..360 (otherwise the
-** function may behave unextectedly).
-*/
-
-void __fastcall__ tgi_bar (int x1, int y1, int x2, int y2);
-/* Draw a bar (a filled rectangle) using the current color. */
-
-void __fastcall__ tgi_settextdir (unsigned char dir);
-/* Set the direction for text output. dir is one of the TGI_TEXT_XXX
-** constants.
-*/
-
-void __fastcall__ tgi_settextscale (unsigned width, unsigned height);
-/* Set the scaling for text output. The scaling factors for width and height
-** are 8.8 fixed point values. This means that $100 = 1 $200 = 2 etc.
-*/
-
-void __fastcall__ tgi_settextstyle (unsigned width, unsigned height,
-                                    unsigned char dir, unsigned char font);
-/* Set the style for text output. The scaling factors for width and height
-** are 8.8 fixed point values. This means that $100 = 1 $200 = 2 etc.
-** dir is one of the TGI_TEXT_XXX constants. font is one of the TGI_FONT_XXX
-** constants.
-*/
-
-unsigned __fastcall__ tgi_gettextwidth (const char* s);
-/* Calculate the width of the text in pixels according to the current text
-** style.
-*/
-
-unsigned __fastcall__ tgi_gettextheight (const char* s);
-/* Calculate the height of the text in pixels according to the current text
-** style.
-*/
-
-void __fastcall__ tgi_outtext (const char* s);
-/* Output text at the current graphics cursor position. The graphics cursor
-** is moved to the end of the text.
-*/
-
-void __fastcall__ tgi_outtextxy (int x, int y, const char* s);
-/* Output text at the given cursor position. The graphics cursor is moved to
-** the end of the text.
-*/
-
-unsigned __fastcall__ tgi_ioctl (unsigned char code, void* data);
-/* Call the driver specific control function. What this function does for
-** a specific code depends on the driver. The driver will set an error
-** for unknown codes or values.
-*/
-
-int __fastcall__ tgi_imulround (int rhs, int lhs);
-/* Helper function for functions using sine/cosine: Multiply two values, one
-** being an 8.8 fixed point one, and return the rounded and scaled result.
-*/
-
-
-
-/* End of tgi.h */
-#endif
-
-
-
diff --git a/include/tgi/tgi-error.h b/include/tgi/tgi-error.h
deleted file mode 100644 (file)
index 334feaa..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  tgi-error.h                              */
-/*                                                                           */
-/*                                TGI error codes                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _TGI_ERROR_H
-#define _TGI_ERROR_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-#define TGI_ERR_OK              0       /* No error */
-#define TGI_ERR_NO_DRIVER       1       /* No driver available */
-#define TGI_ERR_CANNOT_LOAD     2       /* Error loading driver or font */
-#define TGI_ERR_INV_DRIVER      3       /* Invalid driver */
-#define TGI_ERR_INV_MODE        4       /* Mode not supported by driver */
-#define TGI_ERR_INV_ARG         5       /* Invalid function argument */
-#define TGI_ERR_INV_FUNC        6       /* Function not supported */
-#define TGI_ERR_INV_FONT        7       /* Font file is invalid */
-#define TGI_ERR_NO_RES          8       /* Out of resources */
-#define TGI_ERR_INSTALLED       9       /* A driver is already installed */
-
-
-
-/* End of tgi-error.h */
-#endif
-
-
-
diff --git a/include/tgi/tgi-kernel.h b/include/tgi/tgi-kernel.h
deleted file mode 100644 (file)
index bc5fdc3..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 tgi-kernel.h                              */
-/*                                                                           */
-/*                             TGI kernel interface                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _TGI_KERNEL_H
-#define _TGI_KERNEL_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* TGI kernel variables */
-extern void*         tgi_drv;           /* Pointer to driver */
-extern unsigned char tgi_error;         /* Last error code */
-extern unsigned char tgi_gmode;         /* Flag: Graphics mode active */
-extern int           tgi_curx;          /* Current drawing cursor X */
-extern int           tgi_cury;          /* Current drawing cursor Y */
-extern unsigned char tgi_color;         /* Current drawing color */
-extern unsigned char tgi_font;          /* Current font type */
-extern unsigned      tgi_xres;          /* X resolution of the current mode */
-extern unsigned      tgi_yres;          /* Y resolution of the current mode */
-extern unsigned char tgi_colorcount;    /* Number of available colors */
-extern unsigned char tgi_pagecount;     /* Number of available screens */
-extern unsigned char tgi_fontwidth;     /* System font width in pixels */
-extern unsigned char tgi_fontheight;    /* System font height in pixels */
-extern unsigned      tgi_aspectratio;   /* Aspect ratio as fixed point 8.8 */
-extern unsigned char tgi_flags;         /* TGI driver flags */
-extern unsigned      tgi_textscalew[2]; /* Vector/bitmap font scale 8.8 */
-extern unsigned      tgi_textscaleh[2]; /* Vector/bitmap font scale 8.8 */
-extern unsigned      tgi_charwidth;     /* Width of scaled bitmap font */
-extern unsigned      tgi_charheight;    /* Height of scaled bitmap font */
-
-
-
-/* End of tgi-kernel.h */
-#endif
-
-
-
-
diff --git a/include/tgi/tgi-vectorfont.h b/include/tgi/tgi-vectorfont.h
deleted file mode 100644 (file)
index 9cbfc30..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                             tgi-vectorfont.h                              */
-/*                                                                           */
-/*                        TGI vector font definitions                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2009,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _TGI_VECTORFONT_H
-#define _TGI_VECTORFONT_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-#define TGI_VF_FIRSTCHAR        0x20            /* First char in file */
-#define TGI_VF_LASTCHAR         0x7E            /* Last char in file */
-#define TGI_VF_CCOUNT           (TGI_VF_LASTCHAR - TGI_VF_FIRSTCHAR + 1)
-
-#define TGI_VF_VERSION          0x00            /* File version number */
-
-/* TCH file header */
-typedef struct tgi_vectorfont_header tgi_vectorfont_header;
-struct tgi_vectorfont_header {
-    unsigned char       magic[3];               /* "TCH" */
-    unsigned char       version;                /* Version number */
-    unsigned            size;                   /* Font data size */
-};
-
-/* Font data loaded directly from file */
-struct tgi_vectorfont {
-    unsigned char       top;                    /* Height of char */
-    unsigned char       baseline;               /* Character baseline */
-    unsigned char       bottom;                 /* Descender */
-    unsigned char       widths[TGI_VF_CCOUNT];  /* Char widths */
-    unsigned char*      chars[TGI_VF_CCOUNT];   /* Pointer to character defs */
-    unsigned char       vec_ops[1];             /* Actually dynamic */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void __fastcall__ tgi_vectorchar (char C);
-/* Draw one character of the vector font at the current graphics cursor
-** position using the current font magnification.
-*/
-
-
-
-/* End of tgi-vectorfont.h */
-#endif
-
-
-
diff --git a/include/time.h b/include/time.h
deleted file mode 100644 (file)
index 12f130f..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  time.h                                   */
-/*                                                                           */
-/*                               Date and time                               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _TIME_H
-#define _TIME_H
-
-
-
-/* NULL pointer */
-#ifndef _HAVE_NULL
-#define NULL    0
-#define _HAVE_NULL
-#endif
-
-/* size_t is needed */
-#ifndef _HAVE_size_t
-#define _HAVE_size_t
-typedef unsigned size_t;
-#endif
-
-typedef unsigned long time_t;
-typedef unsigned long clock_t;
-
-/* Structure for broken down time */
-struct tm {     
-    int     tm_sec;
-    int     tm_min;
-    int     tm_hour;
-    int     tm_mday;
-    int     tm_mon;
-    int     tm_year;
-    int     tm_wday;
-    int     tm_yday;
-    int     tm_isdst;
-};
-
-/* Timezone representation, default is UTC */
-extern struct _timezone {
-    char    daylight;   /* True if daylight savings time active */
-    long    timezone;   /* Number of seconds behind UTC */
-    char    tzname[5];  /* Name of timezone, e.g. CET */
-    char    dstname[5]; /* Name when daylight true, e.g. CEST */
-} _tz;
-
-
-
-#if defined(__ATARI__)
-/* The clock depends on the video standard, so read it at runtime */
-unsigned _clocks_per_sec (void);
-#  define CLK_TCK               _clocks_per_sec()
-#  define CLOCKS_PER_SEC        _clocks_per_sec()
-#elif defined(__ATARI5200__)
-#  define CLK_TCK               60      /* POSIX */
-#  define CLOCKS_PER_SEC        60      /* ANSI */
-#elif defined(__ATMOS__)
-#  define CLK_TCK               100     /* POSIX */
-#  define CLOCKS_PER_SEC        100     /* ANSI */
-#elif defined(__CBM__)
-#  if defined(__CBM510__) || defined(__CBM610__)
-/* The 510/610 gets its clock from the AC current */
-#    define CLK_TCK             50      /* POSIX */
-#    define CLOCKS_PER_SEC      50      /* ANSI */
-#  else
-#    define CLK_TCK             60      /* POSIX */
-#    define CLOCKS_PER_SEC      60      /* ANSI */
-#  endif
-#elif defined(__NES__)
-#  define CLK_TCK               50      /* POSIX */
-#  define CLOCKS_PER_SEC        50      /* ANSI */
-#elif defined(__PCE__)
-#  define CLK_TCK               60      /* POSIX */
-#  define CLOCKS_PER_SEC        60      /* ANSI */
-#elif  defined(__GEOS__)
-#  define CLK_TCK               1       /* POSIX */
-#  define CLOCKS_PER_SEC        1       /* ANSI */
-#elif defined(__LYNX__)
-/* The clock-rate depends on the video scan-rate;
-** so, read it at run-time.
-*/
-extern clock_t _clk_tck (void);
-#  define CLK_TCK               _clk_tck()
-#  define CLOCKS_PER_SEC        _clk_tck()
-#endif
-
-
-
-time_t _systime (void);
-/* Similar to time(), but:
-**   - Is not ISO C
-**   - Does not take the additional pointer
-**   - Does not set errno when returning -1
-*/
-
-/* ISO C function prototypes */
-char* __fastcall__ asctime (const struct tm* timep);
-clock_t clock (void);
-char* __fastcall__ ctime (const time_t* timep);
-struct tm* __fastcall__ gmtime (const time_t* timep);
-struct tm* __fastcall__ localtime (const time_t* timep);
-time_t __fastcall__ mktime (struct tm* timep);
-size_t __fastcall__ strftime (char* buf, size_t bufsize, const char* format, const struct tm* tm);
-time_t __fastcall__ time (time_t* t);
-
-
-
-/* End of time.h */
-
-#endif
-
-
-
diff --git a/include/unistd.h b/include/unistd.h
deleted file mode 100644 (file)
index 05b60f1..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 unistd.h                                  */
-/*                                                                           */
-/*                  Unix compatibility header file for cc65                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _UNISTD_H
-#define _UNISTD_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Predefined file handles */
-#define STDIN_FILENO    0
-#define STDOUT_FILENO   1
-#define STDERR_FILENO   2
-
-/* WE need size_t */
-#ifndef _HAVE_size_t
-#define _HAVE_size_t
-typedef unsigned size_t;
-#endif
-
-/* We need off_t if sys/types is not included */
-#ifndef _HAVE_off_t
-#define _HAVE_off_t
-typedef long int off_t;
-#endif
-
-/* Stuff for getopt */
-extern char *optarg;
-extern int optind, opterr, optopt;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-/* Files */
-int __fastcall__ write (int fd, const void* buf, unsigned count);
-int __fastcall__ read (int fd, void* buf, unsigned count);
-off_t __fastcall__ lseek (int fd, off_t offset, int whence);
-int __fastcall__ unlink (const char* name);     /* Same as remove() */
-
-/* Directories */
-int __fastcall__ chdir (const char* name);
-char* __fastcall__ getcwd (char* buf, size_t size);
-int mkdir (const char* name, ...);              /* May take a mode argument */
-int __fastcall__ rmdir (const char* name);
-
-/* Others */
-unsigned __fastcall__ sleep (unsigned seconds);
-int __fastcall__ getopt (int argc, char* const* argv, const char* optstring);
-
-/* Non standard: */
-#if __CC65_STD__ == __CC65_STD_CC65__
-int __fastcall__ exec (const char* progname, const char* cmdline);
-#endif
-
-
-
-/* End of unistd.h */
-#endif
-
-
-
diff --git a/include/vic20.h b/include/vic20.h
deleted file mode 100644 (file)
index c675de6..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   vic20.h                                 */
-/*                                                                           */
-/*                      vic20 system specific definitions                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2004 Ullrich von Bassewitz                                       */
-/*               Römerstraße 52                                              */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _VIC20_H
-#define _VIC20_H
-
-
-
-/* Check for errors */
-#if !defined(__VIC20__)
-#  error This module may only be used when compiling for the Vic20!
-#endif
-
-
-
-/* Additional key defines */
-#define CH_F1                   133
-#define CH_F2                   137
-#define CH_F3                   134
-#define CH_F4                   138
-#define CH_F5                   135
-#define CH_F6                   139
-#define CH_F7                   136
-#define CH_F8                   140
-
-
-
-/* Color defines */
-#define COLOR_BLACK             0x00
-#define COLOR_WHITE             0x01
-#define COLOR_RED               0x02
-#define COLOR_CYAN              0x03
-#define COLOR_VIOLET            0x04
-#define COLOR_GREEN             0x05
-#define COLOR_BLUE              0x06
-#define COLOR_YELLOW            0x07
-#define COLOR_ORANGE            0x08
-#define COLOR_BROWN             0x09
-#define COLOR_LIGHTRED          0x0A
-#define COLOR_GRAY1             0x0B
-#define COLOR_GRAY2             0x0C
-#define COLOR_LIGHTGREEN        0x0D
-#define COLOR_LIGHTBLUE         0x0E
-#define COLOR_GRAY3             0x0F
-
-
-
-/* Define hardware */
-#include <_vic.h>
-#define VIC     (*(struct __vic*)0x9000)
-
-#include <_6522.h>
-#define VIA1    (*(struct __6522*)0x9110)
-#define VIA2    (*(struct __6522*)0x9120)
-
-
-
-/* Define special memory areas */
-#define COLOR_RAM       ((unsigned char*)0x9600)
-
-
-
-/* The addresses of the static drivers */
-extern void vic20_ptvjoy_joy[];
-extern void vic20_stdjoy_joy[];         /* Referred to by joy_static_stddrv[] */
-
-
-
-/* End of vic20.h */
-#endif
diff --git a/include/zlib.h b/include/zlib.h
deleted file mode 100644 (file)
index 8fa6a2b..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-/*****************************************************************************/\r
-/*                                                                           */\r
-/*                                  zlib.h                                   */\r
-/*                                                                           */\r
-/*              Decompression routines for the 'deflate' format              */\r
-/*                                                                           */\r
-/*                                                                           */\r
-/*                                                                           */\r
-/* (C) 2000-2015 Piotr Fusik <fox@scene.pl>                                  */\r
-/*                                                                           */\r
-/* This file is based on the zlib.h from 'zlib' general purpose compression  */\r
-/* library, version 1.1.3, (C) 1995-1998 Jean-loup Gailly and Mark Adler.    */\r
-/*                                                                           */\r
-/*  Jean-loup Gailly        Mark Adler                                       */\r
-/*  jloup@gzip.org          madler@alumni.caltech.edu                        */\r
-/*                                                                           */\r
-/* This software is provided 'as-is', without any expressed or implied       */\r
-/* warranty.  In no event will the authors be held liable for any damages    */\r
-/* arising from the use of this software.                                    */\r
-/*                                                                           */\r
-/* Permission is granted to anyone to use this software for any purpose,     */\r
-/* including commercial applications, and to alter it and redistribute it    */\r
-/* freely, subject to the following restrictions:                            */\r
-/*                                                                           */\r
-/* 1. The origin of this software must not be misrepresented; you must not   */\r
-/*    claim that you wrote the original software. If you use this software   */\r
-/*    in a product, an acknowledgment in the product documentation would be  */\r
-/*    appreciated but is not required.                                       */\r
-/* 2. Altered source versions must be plainly marked as such, and must not   */\r
-/*    be misrepresented as being the original software.                      */\r
-/* 3. This notice may not be removed or altered from any source              */\r
-/*    distribution.                                                          */\r
-/*                                                                           */\r
-/*****************************************************************************/\r
-\r
-\r
-\r
-#ifndef _ZLIB_H\r
-#define _ZLIB_H\r
-\r
-#define Z_OK         0\r
-#define Z_DATA_ERROR (-3)\r
-/* Return codes for uncompress() */\r
-\r
-#define Z_DEFLATED   8\r
-/* The deflate compression method (the only one supported) */\r
-\r
-#define Z_NULL       0\r
-\r
-\r
-unsigned __fastcall__ inflatemem (char* dest, const char* source);\r
-/*\r
-     Decompresses the source buffer into the destination buffer.\r
-   Returns the size of the uncompressed data (number of bytes written starting\r
-   from dest).\r
-\r
-     This function expects data in the DEFLATE format, described in RFC\r
-   (Request for Comments) 1951 in the file\r
-   ftp://ds.internic.net/rfc/rfc1951.txt.\r
-\r
-     This function does not exist in the original zlib. Its implementation\r
-   using original zlib might be following:\r
-\r
-   unsigned inflatemem (char* dest, const char* source)\r
-   {\r
-     z_stream stream;\r
-\r
-     stream.next_in = (Bytef*) source;\r
-     stream.avail_in = 65535;\r
-\r
-     stream.next_out = dest;\r
-     stream.avail_out = 65535;\r
-\r
-     stream.zalloc = (alloc_func) 0;\r
-     stream.zfree = (free_func) 0;\r
-\r
-     inflateInit2(&stream, -MAX_WBITS);\r
-     inflate(&stream, Z_FINISH);\r
-     inflateEnd(&stream);\r
-\r
-     return stream.total_out;\r
-   }\r
-*/\r
-\r
-\r
-int __fastcall__ uncompress (char* dest, unsigned* destLen,\r
-                             const char* source, unsigned sourceLen);\r
-/*\r
-   Original zlib description:\r
-\r
-     Decompresses the source buffer into the destination buffer.  sourceLen is\r
-   the byte length of the source buffer. Upon entry, destLen is the total\r
-   size of the destination buffer, which must be large enough to hold the\r
-   entire uncompressed data. (The size of the uncompressed data must have\r
-   been saved previously by the compressor and transmitted to the decompressor\r
-   by some mechanism outside the scope of this compression library.)\r
-   Upon exit, destLen is the actual size of the compressed buffer.\r
-     This function can be used to decompress a whole file at once if the\r
-   input file is mmap'ed.\r
-\r
-     uncompress returns Z_OK if success, Z_MEM_ERROR if there was not\r
-   enough memory, Z_BUF_ERROR if there was not enough room in the output\r
-   buffer, or Z_DATA_ERROR if the input data was corrupted.\r
-\r
-   Implementation notes:\r
-\r
-     This function expects data in the ZLIB format, described in RFC 1950\r
-   in the file ftp://ds.internic.net/rfc/rfc1950.txt. The ZLIB format is\r
-   essentially the DEFLATE format plus a very small header and Adler-32\r
-   checksum.\r
-\r
-     Z_MEM_ERROR and Z_BUF_ERROR are never returned in this implementation.\r
-*/\r
-\r
-\r
-unsigned long __fastcall__ adler32 (unsigned long adler, const char* buf,\r
-                                    unsigned len);\r
-\r
-/*\r
-   Original zlib description:\r
-\r
-     Update a running Adler-32 checksum with the bytes buf[0..len-1] and\r
-   return the updated checksum. If buf is NULL, this function returns\r
-   the required initial value for the checksum.\r
-   An Adler-32 checksum is almost as reliable as a CRC32 but can be computed\r
-   much faster. Usage example:\r
-\r
-     unsigned long adler = adler32(0L, Z_NULL, 0);\r
-\r
-     while (read_buffer(buffer, length) != EOF) {\r
-       adler = adler32(adler, buffer, length);\r
-     }\r
-     if (adler != original_adler) error();\r
-\r
-   Implementation notes:\r
-\r
-     This function isn't actually much faster than crc32(), but it is smaller\r
-   and does not use any lookup tables.\r
-*/\r
-\r
-\r
-unsigned long __fastcall__ crc32 (unsigned long crc, const char* buf,\r
-                                  unsigned len);\r
-/*\r
-   Original zlib description:\r
-\r
-     Update a running crc with the bytes buf[0..len-1] and return the updated\r
-   crc. If buf is NULL, this function returns the required initial value\r
-   for the crc. Pre- and post-conditioning (one's complement) is performed\r
-   within this function so it shouldn't be done by the application.\r
-   Usage example:\r
-\r
-     unsigned long crc = crc32(0L, Z_NULL, 0);\r
-\r
-     while (read_buffer(buffer, length) != EOF) {\r
-       crc = crc32(crc, buffer, length);\r
-     }\r
-     if (crc != original_crc) error();\r
-\r
-   Implementation notes:\r
-\r
-     This function uses statically allocated 1 KB lookup table. The table is\r
-   initialised before it is used for the first time (that is, if buffer is\r
-   NULL or length is zero, then the lookup table isn't initialised).\r
-*/\r
-\r
-\r
-/* end of zlib.h */\r
-#endif\r
-\r
-\r
-\r
diff --git a/libsrc/Makefile b/libsrc/Makefile
deleted file mode 100644 (file)
index d70ad5a..0000000
+++ /dev/null
@@ -1,292 +0,0 @@
-ifneq ($(shell echo),)
-  CMD_EXE = 1
-endif
-
-CBMS = c128   \
-       c16    \
-       c64    \
-       cbm510 \
-       cbm610 \
-       pet    \
-       plus4  \
-       vic20
-
-GEOS = geos-apple \
-       geos-cbm
-
-TARGETS = apple2    \
-          apple2enh \
-          atari     \
-          atarixl   \
-          atari5200 \
-          atmos     \
-          $(CBMS)   \
-          $(GEOS)   \
-          lynx      \
-          nes       \
-          osic1p    \
-          pce       \
-          sim6502   \
-          sim65c02  \
-          supervision
-
-DRVTYPES = emd \
-           joy \
-           mou \
-           ser \
-           tgi
-
-OUTPUTDIRS := lib         \
-              $(DRVTYPES) \
-              targetutil  \
-              asminc      \
-              cfg         \
-              include     \
-              $(subst ../,,$(filter-out $(wildcard ../include/*.*),$(wildcard ../include/*)))
-
-.PHONY: all mostlyclean clean install zip lib $(TARGETS)
-
-.SUFFIXES:
-
-ifdef CMD_EXE
-  DIRLIST = $(strip $(foreach dir,$1,$(wildcard $(dir))))
-  MKDIR = mkdir $(subst /,\,$1)
-  RMDIR = $(if $(DIRLIST),rmdir /s /q $(subst /,\,$(DIRLIST)))
-else
-  MKDIR = mkdir -p $1
-  RMDIR = $(RM) -r $1
-endif
-
-# Every target requires its individual vpath setting but the vpath directive
-# acts globally. Therefore each target is built in a separate make instance.
-
-ifeq ($(words $(MAKECMDGOALS)),1)
-  ifeq ($(MAKECMDGOALS),$(filter $(MAKECMDGOALS),$(TARGETS)))
-    TARGET = $(MAKECMDGOALS)
-  endif
-endif
-
-ifndef TARGET
-
-datadir = $(prefix)/share/cc65
-
-all lib: $(TARGETS)
-
-mostlyclean:
-       $(call RMDIR,../libwrk)
-
-clean:
-       $(call RMDIR,../libwrk ../lib ../targetutil $(addprefix ../,$(DRVTYPES)))
-
-ifdef CMD_EXE
-
-install:
-
-else # CMD_EXE
-
-INSTALL = install
-
-define INSTALL_recipe
-
-$(if $(prefix),,$(error variable `prefix' must be set))
-$(INSTALL) -d $(DESTDIR)$(datadir)/$(dir)
-$(INSTALL) -m644 ../$(dir)/*.* $(DESTDIR)$(datadir)/$(dir)
-
-endef # INSTALL_recipe
-
-install:
-       $(foreach dir,$(OUTPUTDIRS),$(INSTALL_recipe))
-
-endif # CMD_EXE
-
-define ZIP_recipe
-
-@cd .. && zip cc65 $(dir)/*.*
-
-endef # ZIP_recipe
-
-zip:
-       $(foreach dir,$(OUTPUTDIRS),$(ZIP_recipe))
-
-$(TARGETS):
-       @$(MAKE) --no-print-directory $@
-
-else # TARGET
-
-CA65FLAGS =
-CC65FLAGS = -Or -W error
-
-EXTZP = cbm510 \
-        cbm610 \
-        lynx
-
-MKINC = $(GEOS) \
-        atari   \
-        atarixl \
-        nes
-
-TARGETUTIL = apple2    \
-             apple2enh \
-             atari     \
-             geos-apple
-
-GEOSDIRS = common      \
-           conio       \
-           disk        \
-           dlgbox      \
-           file        \
-           graph       \
-           memory      \
-           menuicon    \
-           mousesprite \
-           process     \
-           runtime     \
-           system
-
-ifeq ($(TARGET),apple2enh)
-  SRCDIR = apple2
-  OBJPFX = a2
-  DRVPFX = a2e
-else ifeq ($(TARGET),atarixl)
-  SRCDIR = atari
-  OBJPFX = atr
-  DRVPFX = atrx
-else ifeq ($(TARGET),sim65c02)
-  SRCDIR = sim6502
-else
-  SRCDIR = $(TARGET)
-endif
-
-SRCDIRS = $(SRCDIR)
-
-ifeq ($(TARGET),$(filter $(TARGET),$(CBMS)))
-  SRCDIRS += cbm
-endif
-
-ifeq ($(TARGET),$(filter $(TARGET),$(GEOS)))
-  SRCDIRS += $(addprefix $(TARGET)/,  $(GEOSDIRS))
-  SRCDIRS += $(addprefix geos-common/,$(GEOSDIRS))
-endif
-
-SRCDIRS += common   \
-           conio    \
-           dbg      \
-           em       \
-           joystick \
-           mouse    \
-           runtime  \
-           serial   \
-           tgi      \
-           zlib
-
-vpath %.s $(SRCDIRS)
-vpath %.c $(SRCDIRS)
-
-OBJS := $(patsubst %.s,%.o,$(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.s)))
-OBJS += $(patsubst %.c,%.o,$(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.c)))
-
-OBJS := $(addprefix ../libwrk/$(TARGET)/,$(sort $(notdir $(OBJS))))
-
-DEPS = $(OBJS:.o=.d)
-
-EXTRA_SRCPAT = $(SRCDIR)/extra/%.s
-EXTRA_OBJPAT = ../lib/$(TARGET)-%.o
-EXTRA_OBJS := $(patsubst $(EXTRA_SRCPAT),$(EXTRA_OBJPAT),$(wildcard $(SRCDIR)/extra/*.s))
-
-ZPOBJ = ../libwrk/$(TARGET)/zeropage.o
-ifeq ($(TARGET),$(filter $(TARGET),$(EXTZP)))
-  ZPOBJ += ../libwrk/$(TARGET)/extzp.o
-endif
-
-ifeq ($(TARGET),$(filter $(TARGET),$(MKINC)))
-  include $(SRCDIR)/Makefile.inc
-endif
-
-ifeq ($(TARGET),$(filter $(TARGET),$(TARGETUTIL)))
-  include $(SRCDIR)/targetutil/Makefile.inc
-endif
-
-define DRVTYPE_template
-
-$1_SRCDIR = $$(SRCDIR)/$1
-$1_STCDIR = ../libwrk/$$(TARGET)
-$1_DYNDIR = ../libwrk/$$(TARGET)/$1
-$1_DRVDIR = ../$1
-
-$1_SRCPAT = $$($1_SRCDIR)/$$(OBJPFX)%.s
-$1_STCPAT = $$($1_STCDIR)/$$(OBJPFX)%-$1.o
-$1_DYNPAT = $$($1_DYNDIR)/$$(OBJPFX)%.o
-$1_DRVPAT = $$($1_DRVDIR)/$$(DRVPFX)%.$1
-
-$1_SRCS := $$(wildcard $$($1_SRCDIR)/*.s)
-$1_STCS = $$(patsubst $$($1_SRCPAT),$$($1_STCPAT),$$($1_SRCS))
-$1_DYNS = $$(patsubst $$($1_SRCPAT),$$($1_DYNPAT),$$($1_SRCS))
-$1_DRVS = $$(patsubst $$($1_DYNPAT),$$($1_DRVPAT),$$($1_DYNS))
-
-$$($1_STCPAT): $$($1_SRCPAT)
-       @echo $$(TARGET) - $$< - static
-       @$$(CA65) -t $$(TARGET) -D DYN_DRV=0 $$(CA65FLAGS) --create-dep $$(@:.o=.d) -o $$@ $$<
-
-OBJS += $$($1_STCS)
-DEPS += $$($1_STCS:.o=.d)
-
-$$($1_DYNS): | $$($1_DYNDIR)
-
-$$($1_DRVPAT): $$($1_DYNPAT) $$(ZPOBJ) | $$($1_DRVDIR)
-       @echo $$(TARGET) - $$(<F)
-       @$$(LD65) -o $$@ -t module $$^
-
-$$($1_DYNDIR) $$($1_DRVDIR):
-       @$$(call MKDIR,$$@)
-
-$(TARGET): $$($1_DRVS)
-
-DEPS += $$($1_DYNS:.o=.d)
-
-endef # DRVTYPE_template
-
-$(foreach drvtype,$(DRVTYPES),$(eval $(call DRVTYPE_template,$(drvtype))))
-
-AR65 := $(if $(wildcard ../bin/ar65*),../bin/ar65,ar65)
-CA65 := $(if $(wildcard ../bin/ca65*),../bin/ca65,ca65)
-CC65 := $(if $(wildcard ../bin/cc65*),../bin/cc65,cc65)
-LD65 := $(if $(wildcard ../bin/ld65*),../bin/ld65,ld65)
-
-export CC65_HOME := $(abspath ..)
-
-define ASSEMBLE_recipe
-
-$(if $(QUIET),,@echo $(TARGET) - $<)
-@$(CA65) -t $(TARGET) $(CA65FLAGS) --create-dep $(@:.o=.d) -o $@ $<
-
-endef # ASSEMBLE_recipe
-
-define COMPILE_recipe
-
-$(if $(QUIET),,@echo $(TARGET) - $<)
-@$(CC65) -t $(TARGET) $(CC65FLAGS) --create-dep $(@:.o=.d) --dep-target $@ -o $(@:.o=.s) $<
-@$(CA65) -t $(TARGET) -o $@ $(@:.o=.s)
-
-endef # COMPILE_recipe
-
-../libwrk/$(TARGET)/%.o: %.s | ../libwrk/$(TARGET)
-       $(ASSEMBLE_recipe)
-
-../libwrk/$(TARGET)/%.o: %.c | ../libwrk/$(TARGET)
-       $(COMPILE_recipe)
-
-$(EXTRA_OBJPAT): $(EXTRA_SRCPAT) | ../lib
-       @echo $(TARGET) - $(<F)
-       @$(CA65) -t $(TARGET) $(CA65FLAGS) -o $@ $<
-
-../lib/$(TARGET).lib: $(OBJS) | ../lib
-       $(AR65) a $@ $?
-
-../libwrk/$(TARGET) ../lib ../targetutil:
-       @$(call MKDIR,$@)
-
-$(TARGET): $(EXTRA_OBJS) ../lib/$(TARGET).lib
-
--include $(DEPS)
-
-endif # TARGET
diff --git a/libsrc/apple2/_scrsize.s b/libsrc/apple2/_scrsize.s
deleted file mode 100644 (file)
index 7d1079e..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; Screen size variables
-;
-
-        .export         screensize
-
-        .include        "apple2.inc"
-
-screensize:
-        ldx     WNDWDTH
-        lda     WNDBTM
-        sec
-        sbc     WNDTOP
-        tay
-        rts
diff --git a/libsrc/apple2/break.s b/libsrc/apple2/break.s
deleted file mode 100644 (file)
index 9129dde..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-;
-; Ullrich von Bassewitz, 27.09.1998
-;
-; void set_brk (unsigned Addr);
-; void reset_brk (void);
-;
-
-        .export         _set_brk, _reset_brk
-        .destructor     _reset_brk
-
-        ; Be sure to export the following variables absolute
-        .export         _brk_a: abs, _brk_x: abs, _brk_y: abs
-        .export         _brk_sr: abs, _brk_pc: abs
-
-        .include        "apple2.inc"
-
-_brk_a = $45
-_brk_x = $46
-_brk_y = $47
-_brk_sr = $48
-_brk_sp = $49
-_brk_pc = $3A
-
-.bss
-oldvec:         .res    2               ; Old vector
-
-
-.data
-uservec:        jmp     $FFFF           ; Patched at runtime
-
-
-.code
-
-; Set the break vector
-.proc   _set_brk
-
-        sta     uservec+1
-        stx     uservec+2       ; Set the user vector
-
-        lda     oldvec
-        ora     oldvec+1        ; Did we save the vector already?
-        bne     L1              ; Jump if we installed the handler already
-
-        lda     BRKVec
-        sta     oldvec
-        lda     BRKVec+1
-        sta     oldvec+1        ; Save the old vector
-
-L1:     lda     #<brk_handler   ; Set the break vector to our routine
-        ldx     #>brk_handler
-        sta     BRKVec
-        stx     BRKVec+1
-        rts
-
-.endproc
-
-
-; Reset the break vector
-.proc   _reset_brk
-
-        lda     oldvec
-        ldx     oldvec+1
-        beq     @L9             ; Jump if vector not installed
-        sta     BRKVec
-        stx     BRKVec+1
-        lda     #$00
-        sta     oldvec          ; Clear the old vector
-        stx     oldvec+1
-@L9:    rts
-
-.endproc
-
-
-
-; Break handler, called if a break occurs
-
-.proc   brk_handler
-
-        sec
-        lda     _brk_pc
-        sbc     #$02            ; Point to start of brk
-        sta     _brk_pc
-        lda     _brk_pc+1
-        sbc     #$00
-        sta     _brk_pc+1
-
-        clc
-        lda     _brk_sp
-        adc     #$04            ; Adjust stack pointer
-        sta     _brk_sp
-
-        lda     _brk_sr         ; Clear brk
-        and     #$EF
-        sta     _brk_sr
-
-        jsr     uservec         ; Call the user's routine
-
-        lda     _brk_pc+1
-        pha
-        lda     _brk_pc
-        pha
-        lda     _brk_sr
-        pha
-
-        ldx     _brk_x
-        ldy     _brk_y
-        lda     _brk_a
-
-        rti                     ; Jump back...
-
-.endproc
-
diff --git a/libsrc/apple2/cclear.s b/libsrc/apple2/cclear.s
deleted file mode 100644 (file)
index c06cb08..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void __fastcall__ cclearxy (unsigned char x, unsigned char y, unsigned char length);
-; void __fastcall__ cclear (unsigned char length);
-;
-
-        .export         _cclearxy, _cclear
-        .import         popa, _gotoxy, chlinedirect
-
-_cclearxy:
-        pha                     ; Save the length
-        jsr     popa            ; Get y
-        jsr     _gotoxy         ; Call this one, will pop params
-        pla                     ; Restore the length and run into _cclear
-
-_cclear:
-        ldx     #' ' | $80      ; Blank, screen code
-        jmp     chlinedirect
diff --git a/libsrc/apple2/cgetc.s b/libsrc/apple2/cgetc.s
deleted file mode 100644 (file)
index 511e434..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-;
-; Kevin Ruland
-;
-; char cgetc (void);
-;
-; If open_apple key is pressed then the high-bit of the key is set.
-;
-
-        .export _cgetc
-
-        .include "apple2.inc"
-
-_cgetc:
-        lda     KBD
-        bpl     _cgetc          ; If < 128, no key pressed
-
-        ; At this time, the high bit of the key pressed is set
-        bit     KBDSTRB         ; Clear keyboard strobe
-        .ifdef __APPLE2ENH__
-        bit     BUTN0           ; Check if OpenApple is down
-        bmi     done
-        .endif
-        and     #$7F            ; If not down, then clear high bit
-done:   ldx     #$00
-        rts
diff --git a/libsrc/apple2/chline.s b/libsrc/apple2/chline.s
deleted file mode 100644 (file)
index dba0943..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void __fastcall__ chlinexy (unsigned char x, unsigned char y, unsigned char length);
-; void __fastcall__ chline (unsigned char length);
-;
-
-        .export         _chlinexy, _chline, chlinedirect
-        .import         popa, _gotoxy, cputdirect
-
-        .include        "zeropage.inc"
-        .include        "apple2.inc"
-
-_chlinexy:
-        pha                     ; Save the length
-        jsr     popa            ; Get y
-        jsr     _gotoxy         ; Call this one, will pop params
-        pla                     ; Restore the length and run into _chline
-
-_chline:
-        .ifdef  __APPLE2ENH__
-        ldx     #'S'            ; MouseText character
-        ldy     INVFLG
-        cpy     #$FF            ; Normal character display mode?
-        beq     chlinedirect
-        .endif
-        ldx     #'-' | $80      ; Horizontal line, screen code
-
-chlinedirect:
-        cmp     #$00            ; Is the length zero?
-        beq     done            ; Jump if done
-        sta     tmp1
-:       txa                     ; Screen code
-        jsr     cputdirect      ; Direct output
-        dec     tmp1
-        bne     :-
-done:   rts
diff --git a/libsrc/apple2/close.s b/libsrc/apple2/close.s
deleted file mode 100644 (file)
index cef42b6..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-;
-; Oliver Schmidt, 30.12.2004
-;
-; int __fastcall__ close (int fd);
-;
-
-        .export         _close
-
-        .import         closedirect, freebuffer
-
-        .include        "errno.inc"
-        .include        "filedes.inc"
-
-_close:
-        ; Process fd
-        jsr     getfd           ; Returns A, Y and C
-        bcs     errno
-
-        ; Check for device
-        bmi     zerofd
-
-        ; Close file
-        jsr     closedirect     ; Preserves Y
-        bcs     oserr
-
-        ; Mark fdtab slot as free
-zerofd: lda     #$00
-        sta     fdtab + FD::REF_NUM,y
-
-        ; Cleanup I/O buffer
-        jsr     freebuffer
-
-        ; Return success
-        lda     #$00
-
-        ; Set __oserror
-oserr:  jmp     __mappederrno
-
-        ; Set __errno
-errno:  jmp     __directerrno
diff --git a/libsrc/apple2/closedir.c b/libsrc/apple2/closedir.c
deleted file mode 100644 (file)
index d37d15b..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                closedir.c                                 */
-/*                                                                           */
-/*                             Close a directory                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2005  Oliver Schmidt, <ol.sc@web.de>                                  */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-#include <fcntl.h>
-#include <dirent.h>
-#include "dir.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int __fastcall__ closedir (DIR* dir)
-{
-    int result;
-
-    /* Cleanup directory file */
-    result = close (dir->fd);
-
-    /* Cleanup DIR */
-    free (dir);
-
-    return result;
-}
diff --git a/libsrc/apple2/clrscr.s b/libsrc/apple2/clrscr.s
deleted file mode 100644 (file)
index 2fe5460..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Kevin Ruland
-;
-; void clrscr (void);
-;
-
-        .export         _clrscr
-        .import         HOME
-
-_clrscr := HOME
diff --git a/libsrc/apple2/color.s b/libsrc/apple2/color.s
deleted file mode 100644 (file)
index 3b0c5b6..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; unsigned char __fastcall__ textcolor (unsigned char color);
-; unsigned char __fastcall__ bgcolor (unsigned char color);
-; unsigned char __fastcall__ bordercolor (unsigned char color);
-;
-
-        .export         _textcolor, _bgcolor, _bordercolor
-        .import         return0, return1
-
-_textcolor      := return1
-
-_bgcolor        := return0
-
-_bordercolor    := return0
\ No newline at end of file
diff --git a/libsrc/apple2/cout.s b/libsrc/apple2/cout.s
deleted file mode 100644 (file)
index 0f8014a..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Oliver Schmidt, 03.03.2007
-;
-; COUT routine
-;
-
-        .export         COUT
-
-        .include        "apple2.inc"
-
-        .segment        "LOWCODE"
-
-COUT:
-        ; Switch in ROM and call COUT
-        bit     $C082
-        jsr     $FDED           ; Vector to user output routine
-
-        ; Switch in LC bank 2 for R/O and return
-        bit     $C080
-        rts
diff --git a/libsrc/apple2/cputc.s b/libsrc/apple2/cputc.s
deleted file mode 100644 (file)
index 1cadd1f..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; void __fastcall__ cputcxy (unsigned char x, unsigned char y, char c);
-; void __fastcall__ cputc (char c);
-;
-
-        .ifdef  __APPLE2ENH__
-        .constructor    initconio
-        .endif
-        .export         _cputcxy, _cputc
-        .export         cputdirect, newline, putchar
-        .import         popa, _gotoxy, VTABZ
-
-        .include        "apple2.inc"
-
-        .segment        "INIT"
-
-        .ifdef  __APPLE2ENH__
-initconio:
-        sta     SETALTCHAR      ; Switch in alternate charset
-        bit     LORES           ; Limit SET80COL-HISCR to text
-        rts
-        .endif
-
-        .code
-
-; Plot a character - also used as internal function
-
-_cputcxy:
-        pha                     ; Save C
-        jsr     popa            ; Get Y
-        jsr     _gotoxy
-        pla                     ; Restore C
-
-_cputc:
-        cmp     #$0D            ; Test for \r = carrage return
-        beq     left
-        cmp     #$0A            ; Test for \n = line feed
-        beq     newline
-        ora     #$80            ; Turn on high bit
-        .ifndef __APPLE2ENH__
-        cmp     #$E0            ; Test for lowercase
-        bcc     cputdirect
-        and     #$DF            ; Convert to uppercase
-        .endif
-
-cputdirect:
-        jsr     putchar
-        inc     CH              ; Bump to next column
-        lda     CH
-        cmp     WNDWDTH
-        bcc     :+
-left:   lda     #$00            ; Goto left edge of screen
-        sta     CH
-:       rts
-
-newline:
-        inc     CV              ; Bump to next line
-        lda     CV
-        cmp     WNDBTM
-        bcc     :+
-        lda     WNDTOP          ; Goto top of screen
-        sta     CV
-:       jmp     VTABZ
-                
-putchar:
-        .ifdef  __APPLE2ENH__
-        ldy     INVFLG
-        cpy     #$FF            ; Normal character display mode?
-        beq     put
-        cmp     #$E0            ; Lowercase?
-        bcc     mask
-        and     #$7F            ; Inverse lowercase
-        bra     put
-        .endif
-mask:   and     INVFLG          ; Apply normal, inverse, flash
-put:    ldy     CH
-        .ifdef  __APPLE2ENH__
-        bit     RD80VID         ; In 80 column mode?
-        bpl     col40           ; No, in 40 cols
-        pha
-        tya
-        lsr                     ; Div by 2
-        tay
-        pla
-        bcs     col40           ; Odd cols go in 40 col memory
-        bit     HISCR           ; Assume SET80COL
-        sta     (BASL),Y
-        bit     LOWSCR          ; Assume SET80COL
-        rts
-        .endif
-col40:  sta     (BASL),Y
-        rts
diff --git a/libsrc/apple2/crt0.s b/libsrc/apple2/crt0.s
deleted file mode 100644 (file)
index 445039b..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-;
-; Oliver Schmidt, 2009-09-15
-;
-; Startup code for cc65 (Apple2 version)
-;
-
-        .export         _exit, done, return
-        .export         __STARTUP__ : absolute = 1      ; Mark as startup
-        .import         zerobss
-        .import         initlib, donelib
-        .import         callmain
-        .import         __LC_START__, __LC_LAST__       ; Linker generated
-        .import         __INIT_RUN__, __INIT_SIZE__     ; Linker generated
-        .import         __ZPSAVE_RUN__                  ; Linker generated
-
-        .include        "zeropage.inc"
-        .include        "apple2.inc"
-
-        .segment        "STARTUP"
-
-        ; ProDOS TechRefMan, chapter 5.2.1:
-        ; "For maximum interrupt efficiency, a system program should not
-        ;  use more than the upper 3/4 of the stack."
-        ldx     #$FF
-        txs                     ; Init stack pointer
-
-        ; Switch in LC bank 2 for W/O.
-        bit     $C081
-        bit     $C081
-
-        ; Set the source start address.
-        lda     #<(__ZPSAVE_RUN__ + __INIT_SIZE__)
-        ldy     #>(__ZPSAVE_RUN__ + __INIT_SIZE__)
-        sta     $9B
-        sty     $9C
-
-        ; Set the source last address.
-        lda     #<(__ZPSAVE_RUN__ + __INIT_SIZE__ + __LC_LAST__ - __LC_START__)
-        ldy     #>(__ZPSAVE_RUN__ + __INIT_SIZE__ + __LC_LAST__ - __LC_START__)
-        sta     $96
-        sty     $97
-
-        ; Set the destination last address.
-        lda     #<__LC_LAST__
-        ldy     #>__LC_LAST__
-        sta     $94
-        sty     $95
-
-        ; Call into Applesoft Block Transfer Up -- which handles zero-
-        ; sized blocks well -- to move the content of the LC memory area.
-        jsr     $D39A           ; BLTU2
-
-        ; Set the source start address.
-        lda     #<__ZPSAVE_RUN__
-        ldy     #>__ZPSAVE_RUN__
-        sta     $9B
-        sty     $9C
-
-        ; Set the source last address.
-        lda     #<(__ZPSAVE_RUN__ + __INIT_SIZE__)
-        ldy     #>(__ZPSAVE_RUN__ + __INIT_SIZE__)
-        sta     $96
-        sty     $97
-
-        ; Set the destination last address.
-        lda     #<(__INIT_RUN__ + __INIT_SIZE__)
-        ldy     #>(__INIT_RUN__ + __INIT_SIZE__)
-        sta     $94
-        sty     $95
-
-        ; Call into Applesoft Block Transfer Up -- which handles moving
-        ; overlapping blocks upwards well -- to move the INIT segment.
-        jsr     $D39A           ; BLTU2
-
-        ; Delegate all further processing, to keep the STARTUP segment small.
-        jsr     init
-
-        ; Avoid a re-entrance of donelib. This is also the exit() entry.
-_exit:  ldx     #<exit
-        lda     #>exit
-        jsr     reset           ; Setup RESET vector
-
-        ; Switch in ROM, in case it wasn't already switched in by a RESET.
-        bit     $C082
-
-        ; Call the module destructors.
-        jsr     donelib
-
-        ; Restore the original RESET vector.
-exit:   ldx     #$02
-:       lda     rvsave,x
-        sta     SOFTEV,x
-        dex
-        bpl     :-
-
-        ; Copy back the zero-page stuff.
-        ldx     #zpspace-1
-:       lda     zpsave,x
-        sta     sp,x
-        dex
-        bpl     :-
-
-        ; ProDOS TechRefMan, chapter 5.2.1:
-        ; "System programs should set the stack pointer to $FF at the
-        ;  warm-start entry point."
-        ldx     #$FF
-        txs                     ; Re-init stack pointer
-
-        ; We're done
-        jmp     done
-
-        .segment        "INIT"
-
-        ; Save the zero-page locations that we need.
-init:   ldx     #zpspace-1
-:       lda     sp,x
-        sta     zpsave,x
-        dex
-        bpl     :-
-
-        ; Clear the BSS data.
-        jsr     zerobss
-
-        ; Save the original RESET vector.
-        ldx     #$02
-:       lda     SOFTEV,x
-        sta     rvsave,x
-        dex
-        bpl     :-
-
-        ; ProDOS TechRefMan, chapter 5.3.5:
-        ; "Your system program should place in the RESET vector the
-        ;  address of a routine that ... closes the files."
-        ldx     #<_exit
-        lda     #>_exit
-        jsr     reset           ; Setup RESET vector
-
-        ; Check for ProDOS.
-        ldy     $BF00           ; MLI call entry point
-        cpy     #$4C            ; Is MLI present? (JMP opcode)
-        bne     basic
-
-        ; Check the ProDOS system bit map.
-        lda     $BF6F           ; Protection for pages $B8 - $BF
-        cmp     #%00000001      ; Exactly system global page is protected
-        bne     basic
-
-        ; No BASIC.SYSTEM; so, quit to the ProDOS dispatcher instead.
-        lda     #<quit
-        ldx     #>quit
-        sta     done+1
-        stx     done+2
-
-        ; No BASIC.SYSTEM; so, use the addr of the ProDOS system global page.
-        lda     #<$BF00
-        ldx     #>$BF00
-        bne     :+              ; Branch always
-
-        ; Get the highest available mem addr from the BASIC interpreter.
-basic:  lda     HIMEM
-        ldx     HIMEM+1
-
-        ; Set up the C stack.
-:       sta     sp
-        stx     sp+1
-
-        ; Call the module constructors.
-        jsr     initlib
-
-        ; Switch in LC bank 2 for R/O.
-        bit     $C080
-
-        ; Push the command-line arguments; and, call main().
-        jmp     callmain
-
-        .code
-
-        ; Set up the RESET vector.
-reset:  stx     SOFTEV
-        sta     SOFTEV+1
-        eor     #$A5
-        sta     PWREDUP
-return: rts
-
-        ; Quit to the ProDOS dispatcher.
-quit:   jsr     $BF00           ; MLI call entry point
-        .byte   $65             ; Quit
-        .word   q_param
-
-        .rodata
-
-        ; MLI parameter list for quit
-q_param:.byte   $04             ; param_count
-        .byte   $00             ; quit_type
-        .word   $0000           ; reserved
-        .byte   $00             ; reserved
-        .word   $0000           ; reserved
-
-        .data
-
-        ; Final jump when we're done
-done:   jmp     DOSWARM         ; Potentially patched at runtime
-
-        .segment        "ZPSAVE"
-
-zpsave: .res    zpspace
-
-        .bss
-
-rvsave: .res    3
diff --git a/libsrc/apple2/ctype.s b/libsrc/apple2/ctype.s
deleted file mode 100644 (file)
index fa9a65c..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-;
-; Stefan Haubenthal with minor changes from Ullrich von Bassewitz, 2003-05-02
-;
-; Character specification table.
-;
-
-        .include        "ctype.inc"
-
-; The tables are readonly, put them into the rodata segment
-
-.rodata
-
-; The following 256 byte wide table specifies attributes for the isxxx type
-; of functions. Doing it by a table means some overhead in space, but it
-; has major advantages:
-;
-;   * It is fast. If it were'nt for the slow parameter passing of cc65, one
-;     could even define macros for the isxxx functions (this is usually
-;     done on other platforms).
-;
-;   * It is highly portable. The only unportable part is the table itself,
-;     all real code goes into the common library.
-;
-;   * We save some code in the isxxx functions.
-
-
-__ctype:
-        .repeat 2
-        .byte   CT_CTRL                 ;   0/00 ___ctrl_@___
-        .byte   CT_CTRL                 ;   1/01 ___ctrl_A___
-        .byte   CT_CTRL                 ;   2/02 ___ctrl_B___
-        .byte   CT_CTRL                 ;   3/03 ___ctrl_C___
-        .byte   CT_CTRL                 ;   4/04 ___ctrl_D___
-        .byte   CT_CTRL                 ;   5/05 ___ctrl_E___
-        .byte   CT_CTRL                 ;   6/06 ___ctrl_F___
-        .byte   CT_CTRL                 ;   7/07 ___ctrl_G___
-        .byte   CT_CTRL                 ;   8/08 ___ctrl_H___
-        .byte   CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB
-                                        ;   9/09 ___ctrl_I___
-        .byte   CT_CTRL | CT_OTHER_WS   ;  10/0a ___ctrl_J___
-        .byte   CT_CTRL | CT_OTHER_WS   ;  11/0b ___ctrl_K___
-        .byte   CT_CTRL | CT_OTHER_WS   ;  12/0c ___ctrl_L___
-        .byte   CT_CTRL | CT_OTHER_WS   ;  13/0d ___ctrl_M___
-        .byte   CT_CTRL                 ;  14/0e ___ctrl_N___
-        .byte   CT_CTRL                 ;  15/0f ___ctrl_O___
-        .byte   CT_CTRL                 ;  16/10 ___ctrl_P___
-        .byte   CT_CTRL                 ;  17/11 ___ctrl_Q___
-        .byte   CT_CTRL                 ;  18/12 ___ctrl_R___
-        .byte   CT_CTRL                 ;  19/13 ___ctrl_S___
-        .byte   CT_CTRL                 ;  20/14 ___ctrl_T___
-        .byte   CT_CTRL                 ;  21/15 ___ctrl_U___
-        .byte   CT_CTRL                 ;  22/16 ___ctrl_V___
-        .byte   CT_CTRL                 ;  23/17 ___ctrl_W___
-        .byte   CT_CTRL                 ;  24/18 ___ctrl_X___
-        .byte   CT_CTRL                 ;  25/19 ___ctrl_Y___
-        .byte   CT_CTRL                 ;  26/1a ___ctrl_Z___
-        .byte   CT_CTRL                 ;  27/1b ___ctrl_[___
-        .byte   CT_CTRL                 ;  28/1c ___ctrl_\___
-        .byte   CT_CTRL                 ;  29/1d ___ctrl_]___
-        .byte   CT_CTRL                 ;  30/1e ___ctrl_^___
-        .byte   CT_CTRL                 ;  31/1f ___ctrl_____
-        .byte   CT_SPACE | CT_SPACE_TAB ;  32/20 ___SPACE___
-        .byte   CT_NONE                 ;  33/21 _____!_____
-        .byte   CT_NONE                 ;  34/22 _____"_____
-        .byte   CT_NONE                 ;  35/23 _____#_____
-        .byte   CT_NONE                 ;  36/24 _____$_____
-        .byte   CT_NONE                 ;  37/25 _____%_____
-        .byte   CT_NONE                 ;  38/26 _____&_____
-        .byte   CT_NONE                 ;  39/27 _____'_____
-        .byte   CT_NONE                 ;  40/28 _____(_____
-        .byte   CT_NONE                 ;  41/29 _____)_____
-        .byte   CT_NONE                 ;  42/2a _____*_____
-        .byte   CT_NONE                 ;  43/2b _____+_____
-        .byte   CT_NONE                 ;  44/2c _____,_____
-        .byte   CT_NONE                 ;  45/2d _____-_____
-        .byte   CT_NONE                 ;  46/2e _____._____
-        .byte   CT_NONE                 ;  47/2f _____/_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  48/30 _____0_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  49/31 _____1_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  50/32 _____2_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  51/33 _____3_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  52/34 _____4_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  53/35 _____5_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  54/36 _____6_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  55/37 _____7_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  56/38 _____8_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  57/39 _____9_____
-        .byte   CT_NONE                 ;  58/3a _____:_____
-        .byte   CT_NONE                 ;  59/3b _____;_____
-        .byte   CT_NONE                 ;  60/3c _____<_____
-        .byte   CT_NONE                 ;  61/3d _____=_____
-        .byte   CT_NONE                 ;  62/3e _____>_____
-        .byte   CT_NONE                 ;  63/3f _____?_____
-
-        .byte   CT_NONE                 ;  64/40 _____@_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  65/41 _____A_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  66/42 _____B_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  67/43 _____C_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  68/44 _____D_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  69/45 _____E_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  70/46 _____F_____
-        .byte   CT_UPPER                ;  71/47 _____G_____
-        .byte   CT_UPPER                ;  72/48 _____H_____
-        .byte   CT_UPPER                ;  73/49 _____I_____
-        .byte   CT_UPPER                ;  74/4a _____J_____
-        .byte   CT_UPPER                ;  75/4b _____K_____
-        .byte   CT_UPPER                ;  76/4c _____L_____
-        .byte   CT_UPPER                ;  77/4d _____M_____
-        .byte   CT_UPPER                ;  78/4e _____N_____
-        .byte   CT_UPPER                ;  79/4f _____O_____
-        .byte   CT_UPPER                ;  80/50 _____P_____
-        .byte   CT_UPPER                ;  81/51 _____Q_____
-        .byte   CT_UPPER                ;  82/52 _____R_____
-        .byte   CT_UPPER                ;  83/53 _____S_____
-        .byte   CT_UPPER                ;  84/54 _____T_____
-        .byte   CT_UPPER                ;  85/55 _____U_____
-        .byte   CT_UPPER                ;  86/56 _____V_____
-        .byte   CT_UPPER                ;  87/57 _____W_____
-        .byte   CT_UPPER                ;  88/58 _____X_____
-        .byte   CT_UPPER                ;  89/59 _____Y_____
-        .byte   CT_UPPER                ;  90/5a _____Z_____
-        .byte   CT_NONE                 ;  91/5b _____[_____
-        .byte   CT_NONE                 ;  92/5c _____\_____
-        .byte   CT_NONE                 ;  93/5d _____]_____
-        .byte   CT_NONE                 ;  94/5e _____^_____
-        .byte   CT_NONE                 ;  95/5f _UNDERLINE_
-        .byte   CT_NONE                 ;  96/60 ___grave___
-        .byte   CT_LOWER | CT_XDIGIT    ;  97/61 _____a_____
-        .byte   CT_LOWER | CT_XDIGIT    ;  98/62 _____b_____
-        .byte   CT_LOWER | CT_XDIGIT    ;  99/63 _____c_____
-        .byte   CT_LOWER | CT_XDIGIT    ; 100/64 _____d_____
-        .byte   CT_LOWER | CT_XDIGIT    ; 101/65 _____e_____
-        .byte   CT_LOWER | CT_XDIGIT    ; 102/66 _____f_____
-        .byte   CT_LOWER                ; 103/67 _____g_____
-        .byte   CT_LOWER                ; 104/68 _____h_____
-        .byte   CT_LOWER                ; 105/69 _____i_____
-        .byte   CT_LOWER                ; 106/6a _____j_____
-        .byte   CT_LOWER                ; 107/6b _____k_____
-        .byte   CT_LOWER                ; 108/6c _____l_____
-        .byte   CT_LOWER                ; 109/6d _____m_____
-        .byte   CT_LOWER                ; 110/6e _____n_____
-        .byte   CT_LOWER                ; 111/6f _____o_____
-        .byte   CT_LOWER                ; 112/70 _____p_____
-        .byte   CT_LOWER                ; 113/71 _____q_____
-        .byte   CT_LOWER                ; 114/72 _____r_____
-        .byte   CT_LOWER                ; 115/73 _____s_____
-        .byte   CT_LOWER                ; 116/74 _____t_____
-        .byte   CT_LOWER                ; 117/75 _____u_____
-        .byte   CT_LOWER                ; 118/76 _____v_____
-        .byte   CT_LOWER                ; 119/77 _____w_____
-        .byte   CT_LOWER                ; 120/78 _____x_____
-        .byte   CT_LOWER                ; 121/79 _____y_____
-        .byte   CT_LOWER                ; 122/7a _____z_____
-        .byte   CT_NONE                 ; 123/7b _____{_____
-        .byte   CT_NONE                 ; 124/7c _____|_____
-        .byte   CT_NONE                 ; 125/7d _____}_____
-        .byte   CT_NONE                 ; 126/7e _____~_____
-        .byte   CT_OTHER_WS             ; 127/7f ____DEL____
-        .endrepeat
-
-
diff --git a/libsrc/apple2/curdevice.s b/libsrc/apple2/curdevice.s
deleted file mode 100644 (file)
index 9781b8a..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Oliver Schmidt, 2012-10-21
-;
-; unsigned char getcurrentdevice (void);
-;
-
-        .export         _getcurrentdevice
-        .import         __dos_type
-
-        .include        "mli.inc"
-
-_getcurrentdevice:
-
-        ; Use unit number of most recent accessed device
-        lda     DEVNUM
-        lsr
-        lsr
-        lsr
-        lsr
-
-        ; Check for ProDOS 8
-        ldx     __dos_type
-        bne     :+
-        lda     #$FF            ; INVALID_DEVICE
-
-:       ldx     #$00
-        rts
diff --git a/libsrc/apple2/cvline.s b/libsrc/apple2/cvline.s
deleted file mode 100644 (file)
index 1ac3fad..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void __fastcall__ cvlinexy (unsigned char x, unsigned char y, unsigned char length);
-; void __fastcall__ cvline (unsigned char length);
-;
-
-        .export         _cvlinexy, _cvline, cvlinedirect
-        .import         popa, _gotoxy, putchar, newline
-
-        .include        "zeropage.inc"
-
-_cvlinexy:
-        pha                     ; Save the length
-        jsr     popa            ; Get y
-        jsr     _gotoxy         ; Call this one, will pop params
-        pla                     ; Restore the length and run into _cvline
-
-_cvline:
-        .ifdef  __APPLE2ENH__
-        ldx     #'|' | $80      ; Vertical line, screen code
-        .else
-        ldx     #'!' | $80      ; Vertical line, screen code
-        .endif
-
-cvlinedirect:
-        cmp     #$00            ; Is the length zero?
-        beq     done            ; Jump if done
-        sta     tmp1
-:       txa                     ; Screen code
-        jsr     putchar         ; Write, no cursor advance
-        jsr     newline         ; Advance cursor to next line
-        dec     tmp1
-        bne     :-
-done:   rts
diff --git a/libsrc/apple2/devicedir.s b/libsrc/apple2/devicedir.s
deleted file mode 100644 (file)
index dea2ba8..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-;
-; Oliver Schmidt, 2010-05-24
-;
-; char* __fastcall__ getdevicedir (unsigned char device, char* buf, size_t size);
-;
-
-        .export         _getdevicedir
-        .import         popax, popa
-
-        .include        "zeropage.inc"
-        .include        "errno.inc"
-        .include        "mli.inc"
-
-_getdevicedir:
-        ; Save size
-        sta     ptr2
-        stx     ptr2+1
-
-        ; Save buf
-        jsr     popax
-        sta     ptr1
-        stx     ptr1+1
-
-        ; Set buf
-        sta     mliparam + MLI::ON_LINE::DATA_BUFFER
-        stx     mliparam + MLI::ON_LINE::DATA_BUFFER+1
-
-        ; Set device
-        jsr     popa
-        asl
-        asl
-        asl
-        asl
-        sta     mliparam + MLI::ON_LINE::UNIT_NUM
-
-        ; Check for valid slot
-        and     #$70
-        beq     erange
-
-        ; Check for sufficient buf size
-        lda     ptr2+1
-        bne     :++             ; Buf >= 256
-        lda     ptr2
-        cmp     #17
-        bcs     :++             ; Buf >= 17
-
-        ; Handle errors
-erange: lda     #<ERANGE
-        jsr     __directerrno
-        bne     :+              ; Branch always
-oserr:  jsr     __mappederrno
-:       lda     #$00            ; Return NULL
-        tax
-        rts
-
-        ; Get volume name
-:       lda     #ON_LINE_CALL
-        ldx     #ON_LINE_COUNT
-        jsr     callmli
-        bcs     oserr
-
-        ; Get volume name length
-        ldy     #$00
-        lda     (ptr1),y
-        and     #15             ; Max volume name length
-        sta     tmp1
-        
-        ; Add leading slash
-        lda     #'/'
-        sta     (ptr1),y
-
-        ; Add terminating zero
-        ldy     tmp1
-        iny
-        lda     #$00
-        sta     (ptr1),y
-        sta     __oserror       ; Clear _oserror
-
-        ; Success, return buf
-        lda     ptr1
-        ldx     ptr1+1
-        rts
diff --git a/libsrc/apple2/dioclose.s b/libsrc/apple2/dioclose.s
deleted file mode 100644 (file)
index 59f576e..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Oliver Schmidt, 24.03.2005
-;
-; unsigned char __fastcall__ dio_close (dhandle_t handle);
-;
-
-        .export         _dio_close
-        .import         dioepilog
-
-_dio_close:
-        lda     #$00
-        jmp     dioepilog
diff --git a/libsrc/apple2/diocommon.s b/libsrc/apple2/diocommon.s
deleted file mode 100644 (file)
index 4e8d761..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-;
-; Oliver Schmidt, 24.03.2005
-;
-
-        .export         dioprolog, diocommon, dioepilog
-        .import         popax
-
-        .include        "errno.inc"
-        .include        "mli.inc"
-
-dioprolog:
-        ; Set buffer
-        sta     mliparam + MLI::RW_BLOCK::DATA_BUFFER
-        stx     mliparam + MLI::RW_BLOCK::DATA_BUFFER+1
-
-        ; Get and set sect_num
-        jsr     popax
-        sta     mliparam + MLI::RW_BLOCK::BLOCK_NUM
-        stx     mliparam + MLI::RW_BLOCK::BLOCK_NUM+1
-
-        ; Get and set handle
-        jsr     popax
-        sta     mliparam + MLI::RW_BLOCK::UNIT_NUM
-        rts
-
-diocommon:
-        ; Call read_block or write_block
-        ldx     #RW_BLOCK_COUNT
-        jsr     callmli         
-
-dioepilog:
-        ; Return success or error
-        sta     __oserror
-        ldx     #$00
-        rts
diff --git a/libsrc/apple2/dioopen.s b/libsrc/apple2/dioopen.s
deleted file mode 100644 (file)
index 62b2f06..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-;
-; Oliver Schmidt, 24.03.2005
-;
-; dhandle_t __fastcall__ dio_open (unsigned char device);
-;
-
-        .export         _dio_open
-        .import         return0, __dos_type, isdevice
-
-        .include        "errno.inc"
-        .include        "mli.inc"
-
-_dio_open:
-        ; Check for ProDOS 8
-        ldx     __dos_type
-        bne     :+
-        lda     #$01            ; "Bad system call number"
-        bne     oserr           ; Branch always
-
-        ; Check for valid device
-:       tax
-        jsr     isdevice
-        beq     :+
-        lda     #$28            ; "No device connected"
-
-        ; Return oserror
-oserr:  sta     __oserror
-        jmp     return0
-
-        ; Return success
-:       txa
-        asl
-        asl
-        asl
-        asl
-        ldx     #$00
-        stx     __oserror
-        rts
diff --git a/libsrc/apple2/dioread.s b/libsrc/apple2/dioread.s
deleted file mode 100644 (file)
index 4e80261..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Oliver Schmidt, 24.03.2005
-;
-; unsigned char __fastcall__ dio_read (dhandle_t handle, unsigned sect_num, void *buffer);
-;
-
-        .export         _dio_read
-        .import         dioprolog, diocommon
-
-        .include        "mli.inc"
-
-_dio_read:
-        jsr     dioprolog
-        lda     #READ_BLOCK_CALL
-        jmp     diocommon
diff --git a/libsrc/apple2/diosectcount.s b/libsrc/apple2/diosectcount.s
deleted file mode 100644 (file)
index 55f7e37..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-;
-; Oliver Schmidt, 31.03.2005
-;
-; unsigned __fastcall__ dio_query_sectcount (dhandle_t handle);
-;
-
-        .export         _dio_query_sectcount
-        .import         _dio_query_sectsize, _malloc, _free
-
-        .include        "zeropage.inc"
-        .include        "errno.inc"
-        .include        "mli.inc"
-
-_dio_query_sectcount:
-
-        ; Set handle
-        sta     mliparam + MLI::ON_LINE::UNIT_NUM
-
-        ; Get ProDOS 8 block size (clears __oserror)
-        jsr     _dio_query_sectsize
-
-        ; Alloc buffer
-        jsr     _malloc
-        sta     ptr4
-        stx     ptr4+1
-
-        ; Set buffer
-        sta     mliparam + MLI::ON_LINE::DATA_BUFFER
-        stx     mliparam + MLI::ON_LINE::DATA_BUFFER+1
-
-        ; Check buffer (hibyte is enough)
-        txa
-        beq     nomem
-
-        ; Get device state
-        lda     #ON_LINE_CALL
-        ldx     #ON_LINE_COUNT
-        jsr     callmli
-        bcs     check
-
-        ; UNIT_NUM already set
-        .assert MLI::RW_BLOCK::UNIT_NUM = MLI::ON_LINE::UNIT_NUM, error
-
-        ; DATA_BUFFER already set
-        .assert MLI::RW_BLOCK::DATA_BUFFER = MLI::ON_LINE::DATA_BUFFER, error
-
-        ; Read volume directory key block
-        tax                     ; A = 0
-        lda     #$02
-        sta     mliparam + MLI::RW_BLOCK::BLOCK_NUM
-        stx     mliparam + MLI::RW_BLOCK::BLOCK_NUM+1
-        lda     #READ_BLOCK_CALL
-        ldx     #RW_BLOCK_COUNT
-        jsr     callmli
-        bcs     oserr
-
-        ; Get and save total blocks from volume directory header
-        ldy     #$29
-        lda     (ptr4),y
-        pha
-        iny
-        lda     (ptr4),y
-        pha
-
-        ; Cleanup buffer
-done:   lda     ptr4
-        ldx     ptr4+1
-        jsr     _free
-
-        ; Restore total blocks and return
-        pla
-        tax
-        pla
-        rts
-
-nomem:  lda     #$FF            ; Error code for sure not used by MLI
-oserr:  sta     __oserror
-
-        ; Save total blocks for failure
-        lda     #$00
-        pha
-        pha
-        beq     done            ; Branch always
-
-        ; Check for non-ProDOS disk
-check:  cmp     #$52            ; "Not a ProDOS volume"
-        bne     oserr
-        sta     __oserror
-
-        ; Save total blocks for a 16-sector disk
-        lda     #<280
-        pha
-        lda     #>280
-        pha
-        bne     done            ; Branch always
diff --git a/libsrc/apple2/diosectsize.s b/libsrc/apple2/diosectsize.s
deleted file mode 100644 (file)
index d3ece37..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Oliver Schmidt, 31.03.2005
-;
-; unsigned __fastcall__ dio_query_sectsize (dhandle_t handle);
-;
-
-        .export         _dio_query_sectsize
-
-        .include        "errno.inc"
-
-_dio_query_sectsize:
-        ; Clear error
-        stx     __oserror       ; X = 0
-
-        ; Return ProDOS 8 block size
-        txa                     ; X = 0
-        ldx     #>512
-        rts
diff --git a/libsrc/apple2/diowrite.s b/libsrc/apple2/diowrite.s
deleted file mode 100644 (file)
index d031c49..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Oliver Schmidt, 24.03.2005
-;
-; unsigned char __fastcall__ dio_write (dhandle_t handle, unsigned sect_num, const void *buffer);
-;
-
-        .export         _dio_write
-        .import         dioprolog, diocommon
-
-        .include        "mli.inc"
-
-_dio_write:
-        jsr     dioprolog
-        lda     #WRITE_BLOCK_CALL
-        jmp     diocommon
diff --git a/libsrc/apple2/dir.h b/libsrc/apple2/dir.h
deleted file mode 100644 (file)
index 369080c..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                    dir.h                                  */
-/*                                                                           */
-/*                       Apple ][ system specific DIR                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2005  Oliver Schmidt, <ol.sc@web.de>                                  */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _DIR_H
-#define _DIR_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-struct DIR {
-    int           fd;
-    unsigned char entry_length;
-    unsigned char entries_per_block;
-    unsigned char current_entry;
-    union {
-        unsigned char bytes[512];
-        struct {
-            unsigned      prev_block;
-            unsigned      next_block;
-            unsigned char entries[1];
-        } content;
-    } block;
-};
-
-
-
-/* End of dir.h */
-#endif
diff --git a/libsrc/apple2/dosdetect.s b/libsrc/apple2/dosdetect.s
deleted file mode 100644 (file)
index 68910e3..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-;
-; Oliver Schmidt, 08.03.2004
-;
-; Identify DOS version we're running on as one of these:
-;
-; AppleDOS 3.3   - $00
-; ProDOS 8 1.0.1 - $10
-; ProDOS 8 1.0.2 - $10
-; ProDOS 8 1.1.1 - $11
-; ProDOS 8 1.2   - $12
-; ProDOS 8 1.3   - $13
-; ProDOS 8 1.4   - $14
-; ProDOS 8 1.5   - $15
-; ProDOS 8 1.6   - $16
-; ProDOS 8 1.7   - $17
-; ProDOS 8 1.8   - $18
-; ProDOS 8 1.9   - $18
-; ProDOS 8 2.0.1 - $21
-; ProDOS 8 2.0.2 - $22
-; ProDOS 8 2.0.3 - $23
-;
-
-        .constructor    initdostype, 25
-        .export         __dos_type
-
-        .include        "mli.inc"
-
-; Identify DOS version according to:
-; - Beneath Apple ProDOS, chapter 6-63
-; - Apple II ProDOS 8 TechNote #23, ProDOS 8 Changes and Minutia
-; - ProDOS TechRefMan, chapter 5.2.4
-
-        .segment        "INIT"
-
-initdostype:
-        lda     $BF00
-        cmp     #$4C            ; Is MLI present? (JMP opcode)
-        bne     done
-        lda     KVERSION        ; ProDOS 8 kernel version
-        cmp     #$10
-        bcs     :+
-        ora     #$10            ; Make high nibble match major version
-:       sta     __dos_type
-done:   rts
-
-        .bss
-
-__dos_type:     .res    1
diff --git a/libsrc/apple2/emd/a2.auxmem.s b/libsrc/apple2/emd/a2.auxmem.s
deleted file mode 100644 (file)
index 5ef2564..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-;
-; Extended memory driver for the Apple II auxiliary memory
-;
-; Stefan Haubenthal, 2003-12-12
-; Ullrich von Bassewitz, 2002-12-02
-;
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-
-        .macpack        module
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        .ifdef  __APPLE2ENH__
-        module_header   _a2e_auxmem_emd
-        .else
-        module_header   _a2_auxmem_emd
-        .endif
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-BASE    = $0200
-AUXCARD = $C30C                         ; Card signature
-AUXMOVE = $C311                         ; Auxiliary move routine
-PAGES   = ($C000 - BASE) / 256
-
-; ------------------------------------------------------------------------
-; Data.
-
-.data
-curpage:        .byte   $FF             ; Current page number (invalid)
-
-.bss
-window:         .res    256             ; Memory "window"
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-        ldx     #0
-        lda     AUXCARD
-        and     #$f0
-        cmp     #$80
-        bne     @L1
-        lda     #EM_ERR_OK
-        rts
-@L1:    lda     #EM_ERR_NO_DEVICE
-;       rts
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     #<PAGES
-        ldx     #>PAGES
-        rts
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:    sta     curpage                 ; Remember the new page
-
-        clc
-        adc     #>BASE
-        sta     ptr1+1
-        ldy     #$00
-        sty     ptr1
-
-        lda     #<window
-        sta     ptr2
-        lda     #>window
-        sta     ptr2+1
-
-; Transfer one page
-
-        clc                             ; Direction flag
-        jsr     transfer                ; Transfer one page
-
-; Return the memory window
-
-        lda     #<window
-        ldx     #>window                ; Return the window address
-
-; Done
-
-done:   rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-
-USE:    sta     curpage                 ; Remember the page
-        lda     #<window
-        ldx     #>window                ; Return the window
-        rts
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT: lda     curpage                 ; Get the current page
-        cmp     #$FF
-        beq     done                    ; Jump if no page mapped
-
-        clc
-        adc     #>BASE
-        sta     ptr2+1
-        ldy     #$00
-        sty     ptr2
-
-        lda     #<window
-        sta     ptr1
-        lda     #>window
-        sta     ptr1+1
-        lda     #<$FF
-        sta     ptr4
-        lda     #>$FF
-        sta     ptr4+1
-        sec                             ; Direction flag
-
-; Transfer one page/all bytes
-
-transfer:
-        php
-        clc
-        lda     ptr1
-        sta     $3C
-        adc     ptr4
-        sta     $3E
-        lda     ptr1+1
-        sta     $3D
-        adc     ptr4+1
-        sta     $3F
-        lda     ptr2
-        sta     $42
-        lda     ptr2+1
-        sta     $43
-        plp
-        jmp     AUXMOVE
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYFROM:
-        sta     ptr3
-        stx     ptr3+1                  ; Save the passed em_copy pointer
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr3),y
-        sta     ptr1
-        ldy     #EM_COPY::PAGE
-        lda     (ptr3),y
-        clc
-        adc     #>BASE
-        sta     ptr1+1                  ; From
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr3),y
-        sta     ptr2
-        iny
-        lda     (ptr3),y
-        sta     ptr2+1                  ; To
-        clc                             ; Direction flag
-
-common: ldy     #EM_COPY::COUNT
-        lda     (ptr3),y                ; Get bytes in last page
-        sta     ptr4
-        iny
-        lda     (ptr3),y                ; Get number of pages
-        sta     ptr4+1
-
-        jmp     transfer
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO: sta     ptr3
-        stx     ptr3+1                  ; Save the passed em_copy pointer
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr3),y
-        sta     ptr2
-        ldy     #EM_COPY::PAGE
-        lda     (ptr3),y
-        clc
-        adc     #>BASE
-        sta     ptr2+1                  ; To
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr3),y
-        sta     ptr1
-        iny
-        lda     (ptr3),y
-        sta     ptr1+1                  ; From
-
-        sec                             ; Direction flag
-        jmp     common
diff --git a/libsrc/apple2/exec.s b/libsrc/apple2/exec.s
deleted file mode 100644 (file)
index d24de60..0000000
+++ /dev/null
@@ -1,291 +0,0 @@
-;
-; Oliver Schmidt, 2011-01-26
-;
-; int __fastcall__ exec (const char* progname, const char* cmdline);
-;
-
-        .export         _exec
-        .import         pushname, popname
-        .import         popax, done, _exit
-
-        .include        "zeropage.inc"
-        .include        "errno.inc"
-        .include        "apple2.inc"
-        .include        "mli.inc"
-
-        ; Wrong file type
-typerr: lda     #$4A            ; "Incompatible file format"
-
-        ; Cleanup name
-oserr:  jsr     popname         ; Preserves A
-        
-        ; Set __oserror
-        jmp     __mappederrno
-
-_exec:
-        ; Save cmdline
-        sta     ptr4
-        stx     ptr4+1
-
-        ; Get and push name
-        jsr     popax
-        jsr     pushname
-        bne     oserr
-
-        ; ProDOS TechRefMan, chapter 5.1.5.1:
-        ; "The complete or partial pathname of the system program
-        ;  is stored at $280, starting with a length byte."
-        ; In fact BASIC.SYSTEM does the same for BLOAD and BRUN of
-        ; binary programs so we should do the same too in any case
-        ; especially as _we_ rely on it in mainargs.s for argv[0]
-        ldy     #$00
-        lda     (sp),y
-        tay
-:       lda     (sp),y
-        sta     $0280,y
-        dey
-        bpl     :-
-
-        ; Set pushed name
-        lda     sp
-        ldx     sp+1
-        sta     mliparam + MLI::INFO::PATHNAME
-        stx     mliparam + MLI::INFO::PATHNAME+1
-
-        ; Get file_type and aux_type
-        lda     #GET_INFO_CALL
-        ldx     #GET_INFO_COUNT
-        jsr     callmli
-        bcs     oserr
-
-        ; If we get here the program file at least exists so we copy
-        ; the loader stub right now and patch it later to set params
-        ldx     #size - 1
-:       lda     source,x
-        sta     target,x
-        dex
-        bpl     :-
-
-        ; Check program file type
-        lda     mliparam + MLI::INFO::FILE_TYPE
-        cmp     #$FF            ; SYS file?
-        bne     binary          ; No, check for BIN file
-        sta     file_type       ; Save file type for cmdline handling
-
-        ; SYS programs replace BASIC.SYSTEM so set in the ProDOS system bit map
-        ; protection for pages $80 - $BF just in case BASIC.SYSTEM is there now
-        ldx     #$0F            ; Start with protection for pages $B8 - $BF
-        lda     #%00000001      ; Protect only system global page
-:       sta     $BF60,x         ; Set protection for 8 pages
-        lda     #%00000000      ; Protect no page
-        dex
-        bpl     :-
-        bmi     prodos          ; Branch always
-
-binary: cmp     #$06            ; BIN file?
-        bne     typerr          ; No, wrong file type
-
-        ; Set BIN program load addr
-        lda     mliparam + MLI::INFO::AUX_TYPE
-        ldx     mliparam + MLI::INFO::AUX_TYPE+1
-        sta     data_buffer
-        stx     data_buffer+1
-
-        ; Check ProDOS system bit map for presence of BASIC.SYSTEM
-        lda     $BF6F           ; Protection for pages $B8 - $BF
-        cmp     #%00000001      ; Exactly system global page is protected
-        beq     setvec
-
-        ; Get highest available mem addr from BASIC.SYSTEM
-        ldx     HIMEM+1         ; High byte
-        bne     setbuf          ; Branch always
-
-        ; BIN programs are supposed to quit through one of the two DOS
-        ; vectors so we set up those to point to the ProDOS dispatcher
-setvec: ldx     #$03 - 1        ; Size of JMP opcode
-:       lda     dosvec,x
-        sta     DOSWARM,x       ; DOS warm start
-        sta     DOSWARM + 3,x   ; DOS cold start
-        dex
-        bpl     :-
-
-        ; No BASIC.SYSTEM so use addr of ProDOS system global page
-prodos: ldx     #>$BF00         ; High byte
-
-        ; The I/O buffer needs to be page aligned
-setbuf: lda     #$00            ; Low byte
-
-        ; The I/O buffer needs four pages
-        dex
-        dex
-        dex
-        dex
-
-        ; Set I/O buffer
-        sta     mliparam + MLI::OPEN::IO_BUFFER
-        stx     mliparam + MLI::OPEN::IO_BUFFER+1
-
-        ; PATHNAME already set
-        .assert MLI::OPEN::PATHNAME = MLI::INFO::PATHNAME, error
-
-        ; Lower file level to avoid program file
-        ; being closed by C libary shutdown code
-        ldx     LEVEL
-        stx     level
-        beq     :+
-        dec     LEVEL
-
-        ; Open file
-:       lda     #OPEN_CALL
-        ldx     #OPEN_COUNT
-        jsr     callmli
-
-        ; Restore file level
-        ldx     level
-        stx     LEVEL
-        bcc     :+
-        jmp     oserr
-
-        ; Get and save fd
-:       lda     mliparam + MLI::OPEN::REF_NUM
-        sta     read_ref
-        sta     close_ref
-
-        .ifdef  __APPLE2ENH__
-        ; Calling the 80 column firmware needs the ROM switched
-        ; in, otherwise it copies the F8 ROM to the LC (@ $CEF4)
-        bit     $C082
-
-        ; ProDOS TechRefMan, chapter 5.3.1.3:
-        ; "80-column text cards -- and other Apple IIe features -- can
-        ;  be turned off using the following sequence of instructions:"
-        lda     #$15
-        jsr     $C300
-
-        ; Switch in LC bank 2 for R/O
-        bit     $C080
-        .endif
-
-        ; Reset stack as we already passed
-        ; the point of no return anyway
-        ldx     #$FF
-        txs
-
-        ; Store up to 127 chars of cmdline (if any)
-        ; including terminating zero in stack page
-        ldy     #$00
-        lda     ptr4+1          ; NULL?
-        beq     :++             ; Yes, store as '\0'
-:       lda     (ptr4),y
-:       sta     $0100,y
-        beq     :+              ; '\0' stored, done
-        iny
-        cpy     #$7E
-        bcc     :--
-        lda     #$00            ; '\0'
-        beq     :-              ; Branch always
-
-        ; Call loader stub after C libary shutdown
-:       lda     #<target
-        ldx     #>target
-        sta     done+1
-        stx     done+2
-
-        ; Initiate C libary shutdown
-        jmp     _exit
-
-        .bss
-
-level : .res    1
-
-        .rodata
-
-        ; Read whole program file
-source: jsr     $BF00
-        .byte   READ_CALL
-        .word   read_param
-        bcs     error
-
-        ; Close program file
-        jsr     $BF00
-        .byte   CLOSE_CALL
-        .word   close_param
-        bcs     error
-
-        ; Check for cmdline handling
-        lda     $0100           ; Valid cmdline?
-        beq     jump            ; No, jump to program right away
-        ldx     file_type       ; SYS file?
-        bne     system          ; Yes, check for startup filename
-
-        ; Store REM and cmdline in BASIC input buffer
-        lda     #$B2            ; REM token
-        bne     :++             ; Branch always
-:       inx
-        lda     a:$0100-1,x
-:       sta     $0200,x
-        bne     :--
-        beq     jump            ; Branch always
-
-        ; Check for startup filename support
-        ; ProDOS TechRefMan, chapter 5.1.5.1:
-        ; "$2000 is a jump instruction. $2003 and $2004 are $EE."
-system: lda     $2000
-        cmp     #$4C
-        bne     jump
-        lda     $2003
-        cmp     #$EE
-        bne     jump
-        lda     $2004
-        cmp     #$EE
-        bne     jump
-
-        ; Store cmdline in startup filename buffer
-        ldx     #$01
-:       lda     a:$0100-1,x
-        beq     :+
-        sta     $2006,x
-        inx
-        cpx     $2005           ; Buffer full?
-        bcc     :-              ; No, continue
-:       dex
-        stx     $2006           ; Store cmdline length
-
-        ; Go for it ...
-jump:   jmp     (data_buffer)
-
-file_type       = * - source + target
-        .byte   $00
-
-read_param      = * - source + target
-        .byte   $04             ; PARAM_COUNT
-read_ref        = * - source + target
-        .byte   $00             ; REF_NUM
-data_buffer     = * - source + target
-        .addr   $2000           ; DATA_BUFFER
-        .word   $FFFF           ; REQUEST_COUNT
-        .word   $0000           ; TRANS_COUNT
-
-close_param     = * - source + target
-        .byte   $01             ; PARAM_COUNT
-close_ref       = * - source + target
-        .byte   $00             ; REF_NUM
-
-        ; Quit to ProDOS dispatcher
-quit            = * - source + target
-error:  jsr     $BF00
-        .byte   $65             ; QUIT
-        .word   quit_param
-
-quit_param      = * - source + target
-        .byte   $04             ; PARAM_COUNT
-        .byte   $00             ; QUIT_TYPE
-        .word   $0000           ; RESERVED
-        .byte   $00             ; RESERVED
-        .word   $0000           ; RESERVED
-
-size            = * - source
-
-target          = DOSWARM - size
-
-dosvec: jmp     quit
diff --git a/libsrc/apple2/exehdr.s b/libsrc/apple2/exehdr.s
deleted file mode 100644 (file)
index eb05e66..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Oliver Schmidt, 2012-06-10
-;
-; This module supplies a 4 byte DOS 3.3 header
-; containing the load address and load length.
-;
-
-        .export         __EXEHDR__ : absolute = 1       ; Linker referenced
-        .import         __LOADADDR__, __LOADSIZE__      ; Linker generated
-
-; ------------------------------------------------------------------------
-
-        .segment        "EXEHDR"
-
-        .addr           __LOADADDR__    ; Load address
-        .word           __LOADSIZE__    ; Load length
diff --git a/libsrc/apple2/extra/iobuf-0800.s b/libsrc/apple2/extra/iobuf-0800.s
deleted file mode 100644 (file)
index 7951ccb..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-;
-; Oliver Schmidt, 15.09.2009
-;
-; ProDOS 8 I/O buffer management for memory between
-; location $0800 and the cc65 program start address
-;
-
-        .constructor    initiobuf
-        .export         iobuf_alloc, iobuf_free
-        .import         __STARTUP_RUN__
-        .import         incsp2, popax
-
-        .include        "zeropage.inc"
-        .include        "errno.inc"
-        .include        "../filedes.inc"
-
-        .segment        "INIT"
-
-initiobuf:
-        ; Convert end address highbyte to table index
-        lda     #>__STARTUP_RUN__
-        sec
-        sbc     #>$0800
-        lsr
-        lsr
-
-        ; Mark all remaining table entries as used
-        tax
-        lda     #$FF
-:       cpx     #MAX_FDS
-        bcc     :+
-        rts
-:       sta     table,x
-        inx
-        bne     :--             ; Branch always
-
-; ------------------------------------------------------------------------
-
-        .code
-
-iobuf_alloc:
-        ; Get and save "memptr"
-        jsr     incsp2
-        jsr     popax
-        sta     ptr1
-        stx     ptr1+1
-
-        ; Search table for free entry
-        ldx     #$00
-:       lda     table,x
-        beq     :+
-        inx
-        cpx     #MAX_FDS
-        bcc     :-
-        lda     #ENOMEM
-        rts
-
-        ; Mark table entry as used
-:       lda     #$FF
-        sta     table,x
-
-        ; Convert table index to address hibyte
-        txa
-        asl
-        asl
-        clc
-        adc     #>$0800
-
-        ; Store address in "memptr"
-        ldy     #$01
-        sta     (ptr1),y
-        dey
-        tya
-        sta     (ptr1),y
-        rts
-
-iobuf_free:
-        ; Convert address hibyte to table index
-        txa
-        sec
-        sbc     #>$0800
-        lsr
-        lsr
-
-        ; Mark table entry as free
-        tax
-        lda     #$00
-        sta     table,x
-        rts
-
-; ------------------------------------------------------------------------
-
-        .bss
-
-table:  .res    MAX_FDS
diff --git a/libsrc/apple2/filedes.inc b/libsrc/apple2/filedes.inc
deleted file mode 100644 (file)
index 0e0dc4e..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Oliver Schmidt, 30.12.2004
-;
-; File descriptor management for the POSIX I/O routines
-;
-
-        .struct FD
-                REF_NUM .byte
-                FLAGS   .byte
-                BUFFER  .addr
-        .endstruct
-
-        .global         fdtab
-        .global         getfd
-
-MAX_FDS = 8
diff --git a/libsrc/apple2/filedes.s b/libsrc/apple2/filedes.s
deleted file mode 100644 (file)
index 04b4416..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-;
-; Oliver Schmidt, 30.12.2004
-;
-; File descriptor management for the POSIX I/O routines
-;
-
-        .include        "errno.inc"
-        .include        "fcntl.inc"
-        .include        "filedes.inc"
-
-getfd:
-        ; Check for handle >= 256
-        cpx     #$00
-        bne     error
-
-        ; Check for handle >= MAX_FDS
-        cmp     #MAX_FDS
-        bcs     error
-
-        ; Convert handle to fdtab slot
-        .assert .sizeof(FD) = 4, error
-        asl
-        asl
-
-        ; Check for fdtab slot in use
-        tay
-        lda     fdtab + FD::REF_NUM,y
-        beq     error
-
-        ; Return success
-        clc
-        rts
-
-        ; Load errno code and return error
-error:  lda     #EINVAL
-        sec
-        rts
-
-        .data
-
-fdtab:  .assert .sizeof(FD) = 4, error
-
-        .byte   $80             ; STDIN_FILENO ::REF_NUM
-        .byte   O_RDONLY        ; STDIN_FILENO ::FLAGS
-        .addr   $0000           ; STDIN_FILENO ::BUFFER
-
-        .byte   $80             ; STDOUT_FILENO::REF_NUM
-        .byte   O_WRONLY        ; STDOUT_FILENO::FLAGS
-        .addr   $0000           ; STDOUT_FILENO::BUFFER
-
-        .byte   $80             ; STDERR_FILENO::REF_NUM
-        .byte   O_WRONLY        ; STDERR_FILENO::FLAGS
-        .addr   $0000           ; STDERR_FILENO::BUFFER
-
-        .res    (MAX_FDS - 3) * .sizeof(FD)
diff --git a/libsrc/apple2/filename.s b/libsrc/apple2/filename.s
deleted file mode 100644 (file)
index aaef6ec..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-;
-; Oliver Schmidt, 30.12.2004
-;
-; File name handling for ProDOS 8 file I/O
-;
-
-        .export         pushname, popname
-        .import         subysp, addysp, decsp1
-
-        .include        "zeropage.inc"
-        .include        "mli.inc"
-
-pushname:
-        sta     ptr1
-        stx     ptr1+1
-
-        ; Alloc pathname buffer
-        ldy     #64+1           ; Max pathname length + zero
-        jsr     subysp
-
-        ; Check for full pathname
-        ldy     #$00
-        lda     (ptr1),y
-        cmp     #'/'
-        beq     copy
-
-        ; Check for system prefix
-        lda     PFIXPTR
-        bne     copy
-
-        ; Use unit number of most recent accessed device
-        lda     DEVNUM
-        sta     mliparam + MLI::ON_LINE::UNIT_NUM
-
-        ; Use allocated pathname buffer
-        lda     sp
-        ldx     sp+1
-        sta     mliparam + MLI::ON_LINE::DATA_BUFFER
-        stx     mliparam + MLI::ON_LINE::DATA_BUFFER+1
-
-        ; Get volume name
-        lda     #ON_LINE_CALL
-        ldx     #ON_LINE_COUNT
-        jsr     callmli
-        bcs     addsp65
-
-        ; Get volume name length
-        lda     (sp),y
-        and     #15             ; Max volume name length
-
-        ; Bracket volume name with slashes to form prefix
-        sta     tmp1
-        lda     #'/'
-        sta     (sp),y
-        ldy     tmp1
-        iny                     ; Leading slash
-        sta     (sp),y
-        iny                     ; Trailing slash
-
-        ; Adjust source pointer for copy
-        sty     tmp1
-        lda     ptr1
-        sec
-        sbc     tmp1
-        bcs     :+
-        dec     ptr1+1
-:       sta     ptr1
-
-        ; Copy source to allocated pathname buffer
-copy:   lda     (ptr1),y
-        sta     (sp),y
-        beq     setlen
-        iny
-        cpy     #64+1           ; Max pathname length + zero
-        bcc     copy
-
-        ; Load oserror code
-        lda     #$40            ; "Invalid pathname"
-
-        ; Free pathname buffer
-addsp65:ldy     #64+1
-        bne     addsp           ; Branch always
-
-        ; Alloc and set length byte
-setlen: tya
-        jsr     decsp1          ; Preserves A
-        ldy     #$00
-        sta     (sp),y
-
-        ; Return success
-        tya
-        rts
-
-popname:
-        ; Cleanup stack
-        ldy     #1 + 64+1       ; Length byte + max pathname length + zero
-addsp:  jmp     addysp          ; Preserves A
diff --git a/libsrc/apple2/get_ostype.s b/libsrc/apple2/get_ostype.s
deleted file mode 100644 (file)
index 68ae865..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-;
-; Oliver Schmidt, 04.01.2005
-;
-; unsigned char get_ostype (void)
-;
-
-        .constructor    initostype
-        .export         _get_ostype
-
-; Identify machine according to:
-; Apple II Miscellaneous TechNote #7, Apple II Family Identification
-
-        .segment        "INIT"
-
-initostype:
-        sec
-        jsr     $FE1F
-        bcs     nogs
-        tya
-        ora     #$80
-done:   sta     ostype
-        rts
-nogs:   ldx     #$FF
-next:   inx
-        lda     value,x
-        ldy     index,x
-        beq     done            ; $00 is no valid index
-        cmp     $FB00,y
-        beq     next
-:       inx
-        ldy     index,x
-        bne     :-
-        beq     next            ; Branch always
-
-index:  .byte   $B3, $00                ; Apple ][
-        .byte   $B3, $1E, $00           ; Apple ][+
-        .byte   $B3, $1E, $00           ; Apple /// (emulation)
-        .byte   $B3, $C0, $00           ; Apple //e
-        .byte   $B3, $C0, $DD, $BE, $00 ; Apple //e Option Card
-        .byte   $B3, $C0, $00           ; Apple //e (enhanced)
-        .byte   $B3, $C0, $BF, $00      ; Apple //c
-        .byte   $B3, $C0, $BF, $00      ; Apple //c (3.5 ROM)
-        .byte   $B3, $C0, $BF, $00      ; Apple //c (Mem. Exp.)
-        .byte   $B3, $C0, $BF, $00      ; Apple //c (Rev. Mem. Exp.)
-        .byte   $B3, $C0, $BF, $00      ; Apple //c Plus
-        .byte   $00
-
-value:  .byte   $38, $10                ; Apple ][
-        .byte   $EA, $AD, $11           ; Apple ][+
-        .byte   $EA, $8A, $20           ; Apple /// (emulation)
-        .byte   $06, $EA, $30           ; Apple //e
-        .byte   $06, $E0, $02, $00, $40 ; Apple //e Option Card
-        .byte   $06, $E0, $31           ; Apple //e (enhanced)
-        .byte   $06, $00, $FF, $50      ; Apple //c
-        .byte   $06, $00, $00, $51      ; Apple //c (3.5 ROM)
-        .byte   $06, $00, $03, $53      ; Apple //c (Mem. Exp.)
-        .byte   $06, $00, $04, $54      ; Apple //c (Rev. Mem. Exp.)
-        .byte   $06, $00, $05, $55      ; Apple //c Plus
-        .byte   $00
-
-        .code
-
-_get_ostype:
-        lda     ostype
-        ldx     #$00
-        rts
-
-        .bss
-
-ostype: .res    1
diff --git a/libsrc/apple2/getdevice.s b/libsrc/apple2/getdevice.s
deleted file mode 100644 (file)
index ef35ede..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-;
-; Oliver Schmidt, 2012-09-04
-;
-; unsigned char getfirstdevice (void);
-; unsigned char __fastcall__ getnextdevice (unsigned char device);
-;
-
-        .export         _getfirstdevice
-        .export         _getnextdevice
-        .import         __dos_type, isdevice
-
-        .include        "zeropage.inc"
-
-_getfirstdevice:
-        lda     #$FF
-        ; Fall through
-
-_getnextdevice:
-        tax
-next:   inx
-        cpx     #$FF
-        beq     done
-
-        ; Check for ProDOS 8
-        lda     __dos_type
-        beq     next
-
-        ; Check for valid device
-        jsr     isdevice
-        bne     next
-
-done:   txa
-        ldx     #$00
-        rts
diff --git a/libsrc/apple2/gotoxy.s b/libsrc/apple2/gotoxy.s
deleted file mode 100644 (file)
index dc96ac7..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; void __fastcall__ gotoxy (unsigned char x, unsigned char y);
-; void __fastcall__ gotox (unsigned char x);
-;
-
-        .export         _gotoxy, _gotox
-        .import         popa, VTABZ
-
-        .include        "apple2.inc"
-
-_gotoxy:
-        clc
-        adc     WNDTOP
-        sta     CV              ; Store Y
-        jsr     VTABZ
-        jsr     popa            ; Get X
-
-_gotox:
-        sta     CH              ; Store X
-        rts
diff --git a/libsrc/apple2/gotoy.s b/libsrc/apple2/gotoy.s
deleted file mode 100644 (file)
index 707b8fc..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; void __fastcall__ gotoy (unsigned char y);
-;
-
-        .export         _gotoy
-        .import         VTABZ
-
-        .include        "apple2.inc"
-
-_gotoy:
-        clc
-        adc     WNDTOP
-        sta     CV              ; Store Y
-        jmp     VTABZ
-
-
diff --git a/libsrc/apple2/home.s b/libsrc/apple2/home.s
deleted file mode 100644 (file)
index 02899be..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Oliver Schmidt, 03.03.2007
-;
-; HOME routine
-;
-
-        .export         HOME
-
-        .include        "apple2.inc"
-
-        .segment        "LOWCODE"
-
-HOME:
-        ; Switch in ROM and call HOME
-        bit     $C082
-        jsr     $FC58           ; Clear current text screen
-
-        ; Switch in LC bank 2 for R/O and return
-        bit     $C080
-        rts
diff --git a/libsrc/apple2/initcwd.s b/libsrc/apple2/initcwd.s
deleted file mode 100644 (file)
index 044076e..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-;
-; Oliver Schmidt, 18.04.2005
-;
-
-        .export         initcwd
-        .import         __cwd
-
-        .include        "zeropage.inc"
-        .include        "mli.inc"
-
-initcwd:
-        ; Set static prefix buffer
-        lda     #<__cwd
-        ldx     #>__cwd
-        sta     mliparam + MLI::PREFIX::PATHNAME
-        stx     mliparam + MLI::PREFIX::PATHNAME+1
-
-        ; Get current working directory
-        lda     #GET_PREFIX_CALL
-        ldx     #PREFIX_COUNT
-        jsr     callmli
-
-        ; Check for null prefix
-        lda     __cwd
-        beq     done
-
-        ; Remove length byte and trailing slash
-        sta     tmp1
-        ldx     #$01
-:       lda     __cwd,x
-        sta     __cwd - 1,x
-        inx
-        cpx     tmp1
-        bcc     :-
-
-        ; Add terminating zero
-        lda     #$00
-        sta     __cwd - 1,x
-        
-done:   rts
diff --git a/libsrc/apple2/iobuf.s b/libsrc/apple2/iobuf.s
deleted file mode 100644 (file)
index 77433ce..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-;
-; Oliver Schmidt, 10.9.2009
-;
-; Default ProDOS 8 I/O buffer management
-; 
-
-        .export         iobuf_alloc, iobuf_free
-        .import         _posix_memalign, _free
-
-iobuf_alloc := _posix_memalign
-iobuf_free  := _free
diff --git a/libsrc/apple2/irq.s b/libsrc/apple2/irq.s
deleted file mode 100644 (file)
index 0b05556..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-;
-; Oliver Schmidt, 2012-11-17
-;
-; IRQ handling (Apple2 version)
-;
-
-        .export         initirq, doneirq
-        .import         callirq, __dos_type, _exit
-
-        .include        "apple2.inc"
-
-        .segment        "INIT"
-
-initirq:
-        ; Check for ProDOS
-        lda     __dos_type
-        beq     prterr
-
-        ; Allocate interrupt vector table entry
-        jsr     $BF00           ; MLI call entry point
-        .byte   $40             ; Alloc interrupt
-        .addr   i_param
-        bcs     prterr
-
-        ; Enable interrupts, as old ProDOS versions (i.e. 1.1.1)
-        ; jump to SYS and BIN programs with interrupts disabled.
-        cli
-        rts
-
-        ; Print error message and exit
-prterr: ldx     #msglen-1
-:       lda     errmsg,x
-        jsr     $FDED           ; COUT
-        dex
-        bpl     :-
-        jmp     _exit
-
-errmsg: .ifdef  __APPLE2ENH__
-        .byte   $8D,     't'|$80, 'p'|$80, 'u'|$80, 'r'|$80, 'r'|$80
-        .byte   'e'|$80, 't'|$80, 'n'|$80, 'i'|$80, ' '|$80, 'c'|$80
-        .byte   'o'|$80, 'l'|$80, 'l'|$80, 'a'|$80, ' '|$80, 'o'|$80
-        .byte   't'|$80, ' '|$80, 'd'|$80, 'e'|$80, 'l'|$80, 'i'|$80
-        .byte   'a'|$80, 'F'|$80, $8D
-        .else
-        .byte   $8D,     'T'|$80, 'P'|$80, 'U'|$80, 'R'|$80, 'R'|$80
-        .byte   'E'|$80, 'T'|$80, 'N'|$80, 'I'|$80, ' '|$80, 'C'|$80
-        .byte   'O'|$80, 'L'|$80, 'L'|$80, 'A'|$80, ' '|$80, 'O'|$80
-        .byte   'T'|$80, ' '|$80, 'D'|$80, 'E'|$80, 'L'|$80, 'I'|$80
-        .byte   'A'|$80, 'F'|$80, $8D
-        .endif
-
-msglen = * - errmsg
-
-        .code
-
-doneirq:
-        ; Check for valid interrupt vector table entry number which
-        ; IS necessary as this gets called even if initirq failed.
-        lda     int_num
-        beq     :+
-
-        ; Deallocate interrupt vector table entry
-        dec     i_param         ; Adjust parameter count
-        jsr     $BF00           ; MLI call entry point
-        .byte   $41             ; Dealloc interrupt
-        .addr   i_param
-:       rts
-
-        .segment        "LOWCODE"
-
-intptr:
-        ; ProDOS TechRefMan, chapter 6.2:
-        ; "Each installed routine must begin with a CLD instruction."
-        cld
-
-        ; Call interruptors and check for success
-        jsr     callirq
-        bcc     :+
-
-        ; ProDOS TechRefMan, chapter 6.2:
-        ; "When the routine that can process the interrupt is called, it
-        ;  should ... return (via an RTS) with the carry flag clear."
-        clc
-        rts
-
-        ; ProDOS TechRefMan, chapter 6.2:
-        ; "When a routine that cannot process the interrupt is called,
-        ;  it should return (via an RTS) with the cary flag set ..."
-:       sec
-        rts
-
-        .data
-
-        ; MLI parameter list for (de)alloc interrupt
-i_param:.byte   $02             ; param_count
-int_num:.byte   $00             ; int_num
-        .addr   intptr          ; int_code
diff --git a/libsrc/apple2/isdevice.s b/libsrc/apple2/isdevice.s
deleted file mode 100644 (file)
index fad1688..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Oliver Schmidt, 2012-10-15
-;
-
-        .export         isdevice
-
-        .include        "zeropage.inc"
-        .include        "mli.inc"
-
-isdevice:
-        ldy     DEVCNT
-:       lda     DEVLST,y
-        lsr
-        lsr
-        lsr
-        lsr
-        sta     tmp1
-        cpx     tmp1
-        beq     :+
-        dey
-        bpl     :-
-:       rts
diff --git a/libsrc/apple2/joy/a2.stdjoy.s b/libsrc/apple2/joy/a2.stdjoy.s
deleted file mode 100644 (file)
index e4097e0..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-;
-; Standard joystick driver for the Apple ][. May be used multiple times
-; when statically linked to the application.
-;
-; Ullrich von Bassewitz, 2003-05-02
-; Oliver Schmidt, 2008-02-25
-; Using the readjoy code from Stefan Haubenthal
-;
-
-        .include        "zeropage.inc"
-
-        .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-        .include        "apple2.inc"
-
-        .macpack        module
-
-; ------------------------------------------------------------------------
-
-; Constants
-
-THRESHOLD =     20      ; Deviation from center triggering movement
-
-; ------------------------------------------------------------------------
-
-; ROM entry points
-
-PREAD   :=      $FB1E   ; Read paddle in X, return AD conv. value in Y
-
-; ------------------------------------------------------------------------
-
-; Header. Includes jump table.
-
-        .ifdef  __APPLE2ENH__
-        module_header   _a2e_stdjoy_joy
-        .else
-        module_header   _a2_stdjoy_joy
-        .endif
-
-; Driver signature
-
-        .byte   $6A, $6F, $79   ; "joy"
-        .byte   JOY_API_VERSION ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte   $10
-        .byte   $20
-        .byte   $04
-        .byte   $08
-        .byte   $40
-        .byte   $80
-        .byte   $00             ; Future expansion
-        .byte   $00             ; Future expansion
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READJOY
-        .addr   0               ; IRQ not used
-
-; ------------------------------------------------------------------------
-
-        .code
-
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-INSTALL:
-        lda     #<JOY_ERR_OK
-        ldx     #>JOY_ERR_OK
-        ; Fall through
-
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-UNINSTALL:
-        rts
-
-; COUNT: Return the total number of available joysticks in a/x.
-COUNT:
-        lda     #$02            ; Number of joysticks we support
-        ldx     #$00
-        rts
-
-; READ: Read a particular joystick passed in A.
-READJOY:
-        bit     $C082           ; Switch in ROM
-        and     #$01            ; Restrict joystick number
-
-        ; Read horizontal paddle
-        asl                     ; Joystick number -> paddle number
-        tax                     ; Set paddle number (0, 2)
-        jsr     PREAD           ; Read paddle value
-        lda     #$00            ; 0 0 0 0 0 0 0 0
-        cpy     #127 - THRESHOLD
-        ror                     ; !LEFT 0 0 0 0 0 0 0
-        cpy     #127 + THRESHOLD
-        ror                     ; RIGHT !LEFT 0 0 0 0 0 0
-
-        ; Read vertical paddle
-        pha
-        inx                     ; Set paddle number (1, 3)
-        jsr     PREAD           ; Read paddle value
-        pla
-        cpy     #127 - THRESHOLD
-        ror                     ; !UP RIGHT !LEFT 0 0 0 0 0
-        cpy     #127 + THRESHOLD
-        ror                     ; DOWN !UP RIGHT !LEFT 0 0 0 0
-
-        ; Read primary button
-        tay
-        lda     BUTN0-1,x       ; Check button (1, 3)
-        asl
-        tya
-        ror                     ; FIRE DOWN !UP RIGHT !LEFT 0 0 0
-
-        ; Read secondary button
-        tay
-        inx
-        txa
-        and     #$03            ; IIgs has fourth button at TAPEIN
-        tax
-        lda     BUTN0-1,x       ; Check button (2, 0)
-        asl
-        tya
-        ror                     ; FIRE2 FIRE DOWN !UP RIGHT !LEFT 0 0
-
-        ; Finalize
-        eor     #%00010100      ; FIRE2 FIRE DOWN UP RIGHT LEFT 0 0
-        ldx     #$00
-        bit     $C080           ; Switch in LC bank 2 for R/O
-        rts
diff --git a/libsrc/apple2/joy_stat_stddrv.s b/libsrc/apple2/joy_stat_stddrv.s
deleted file mode 100644 (file)
index d129020..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Address of the static standard joystick driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void joy_static_stddrv[];
-;
-
-        .export _joy_static_stddrv
-        .ifdef  __APPLE2ENH__
-        .import _a2e_stdjoy_joy
-        .else
-        .import _a2_stdjoy_joy
-        .endif
-
-.rodata
-
-        .ifdef  __APPLE2ENH__
-_joy_static_stddrv := _a2e_stdjoy_joy
-        .else
-_joy_static_stddrv := _a2_stdjoy_joy
-        .endif
diff --git a/libsrc/apple2/joy_stddrv.s b/libsrc/apple2/joy_stddrv.s
deleted file mode 100644 (file)
index 0c3bf67..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Name of the standard joystick driver
-;
-; Ullrich von Bassewitz, 2002-12-21
-;
-; const char joy_stddrv[];
-;
-
-        .export _joy_stddrv
-
-.rodata
-
-_joy_stddrv:
-        .ifdef  __APPLE2ENH__
-        .asciiz "A2E.STDJOY.JOY"
-        .else
-        .asciiz "A2.STDJOY.JOY"
-        .endif
-
diff --git a/libsrc/apple2/kbhit.s b/libsrc/apple2/kbhit.s
deleted file mode 100644 (file)
index c4efb38..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Kevin Ruland
-; Ullrich von Bassewitz, 2005-03-25
-;
-; unsigned char kbhit (void);
-;
-
-        .export _kbhit
-
-        .include "apple2.inc"
-
-_kbhit:
-        lda     KBD             ; Reading KBD checks for keypress
-        rol                     ; if high bit is set, key was pressed
-        lda     #$00
-        tax
-        rol
-        rts
diff --git a/libsrc/apple2/libref.s b/libsrc/apple2/libref.s
deleted file mode 100644 (file)
index fb22515..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Oliver Schmidt, 2013-05-31
-;
-
-        .export         em_libref, joy_libref, mouse_libref, ser_libref, tgi_libref
-        .import         _exit
-
-em_libref       := _exit
-joy_libref      := _exit
-mouse_libref    := _exit
-ser_libref      := _exit
-tgi_libref      := _exit
diff --git a/libsrc/apple2/lseek.s b/libsrc/apple2/lseek.s
deleted file mode 100644 (file)
index 73f4136..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-;
-; Peter Ferrie, 21.11.2014
-;
-; off_t __fastcall__ lseek(int fd, off_t offset, int whence);
-;
-
-        .export         _lseek
-        .import         popax
-
-        .include        "zeropage.inc"
-        .include        "errno.inc"
-        .include        "mli.inc"
-        .include        "filedes.inc"
-
-_lseek:
-        ; Save whence
-        sta     tmp1
-        stx     tmp2
-
-        ; Get and save offset
-        jsr     popax
-        sta     ptr1
-        stx     ptr1+1
-        jsr     popax
-        sta     ptr2
-
-        ; Get and process fd
-        jsr     popax
-        jsr     getfd           ; Returns A, Y and C
-        bcs     errno
-
-        ; Check for device
-        cmp     #$80
-        bcs     einval
-
-        ; Valid whence values are 0..2
-        ldx     tmp2
-        bne     einval
-        ldx     tmp1
-        cpx     #3
-        bcs     einval
-
-        ; Set fd
-        sta     mliparam + MLI::MARK::REF_NUM
-
-        txa
-        beq     cur
-        lda     #GET_EOF_CALL
-        dex
-        beq     end
-
-; SEEK_SET
-        dex
-        txa
-        tay
-        beq     seek_common
-
-; SEEK_CUR
-cur:
-        lda     #GET_MARK_CALL
-
-; SEEK_END
-end:
-        ; MARK_COUNT must == EOF_COUNT, otherwise unexpected behaviour
-        .assert MARK_COUNT = EOF_COUNT, error
-        ldx     #MARK_COUNT
-        jsr     callmli
-        bcs     oserr
-        lda     mliparam + MLI::MARK::POSITION
-        ldx     mliparam + MLI::MARK::POSITION+1
-        ldy     mliparam + MLI::MARK::POSITION+2
-
-seek_common:
-        adc     ptr1
-        sta     mliparam + MLI::MARK::POSITION
-        txa
-        adc     ptr1+1
-        sta     mliparam + MLI::MARK::POSITION+1
-        tya
-        adc     ptr2
-        sta     mliparam + MLI::MARK::POSITION+2
-
-        ; Set file pointer
-        lda     #SET_MARK_CALL
-        ldx     #MARK_COUNT
-        jsr     callmli
-        bcs     oserr
-
-        rts
-
-        ; Load errno code
-einval: lda     #EINVAL
-
-        ; Set __errno
-errno:  jmp     __directerrno
-
-        ; Set __oserror
-oserr:  jmp     __mappederrno
diff --git a/libsrc/apple2/mainargs.s b/libsrc/apple2/mainargs.s
deleted file mode 100644 (file)
index 2e809dc..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-; mainargs.s
-;
-; Ullrich von Bassewitz, 2003-03-07
-; Based on code from Stefan A. Haubenthal <polluks@web.de>, 2003-11-08
-; Greg King, 2003-05-18
-; Stefan Haubenthal, 2005-01-07
-; Oliver Schmidt, 2005-04-05
-;
-; Scan a group of arguments that are in BASIC's input-buffer.
-; Build an array that points to the beginning of each argument.
-; Send, to main(), that array and the count of the arguments.
-
-; Command-lines look like these lines:
-;
-; call2051
-; call2051 : rem
-; call2051:rem arg1 " arg 2 is quoted "  arg3 "" arg5
-;
-; "call" and "rem" are entokenned; the args. are not. Leading and trailing
-; spaces outside of quotes are ignored.
-
-; TO-DO:
-; Add a control-character quoting mechanism.
-
-        .constructor    initmainargs, 24
-        .import         __argc, __argv, __dos_type
-
-        .include        "zeropage.inc"
-        .include        "apple2.inc"
-
-; Maximum number of arguments allowed in the argument table.
-; (An argument contains a comma, at least.)
-
-MAXARGS = 10
-
-; ProDOS stores the filename in the second half of BASIC's input buffer, so
-; there are 128 characters left. At least 1 character is necessary for the
-; REM so 127 characters (including the terminating zero) may be used before
-; overwriting the ProDOS filename. As we don't want to further restrict the
-; command-line length we reserve those 127 characters.
-
-BUF_LEN = 127
-
-BASIC_BUF = $200
-FNAM_LEN  = $280
-FNAM      = $281
-REM       = $B2                 ; BASIC token-code
-
-; Get possible command-line arguments. Goes into the special INIT segment,
-; which may be reused after the startup code is run.
-
-        .segment        "INIT"
-
-initmainargs:
-
-; Assume that the program was loaded, a moment ago, by the traditional BLOAD
-; statement of BASIC.SYSTEM. Save the filename as argument #0 if available.
-
-        ldx     __dos_type      ; No ProDOS -> argv[0] = ""
-        beq     :+
-
-; Terminate the filename with a zero to make it a valid C string.
-
-        ldx     FNAM_LEN
-:       lda     #$00
-        sta     FNAM,x
-
-        inc     __argc          ; argc always is equal to, at least, 1
-
-; Find the "rem" token.
-
-        ldx     #$00
-:       lda     BASIC_BUF,x
-        beq     done            ; No "rem" -> no args
-        inx
-        cmp     #REM
-        bne     :-
-
-; If a clock is present it is called by ProDOS on file operations. On machines
-; with a slot-based clock (like the Thunder Clock) the clock firmware places
-; the current date in BASIC's input buffer. Therefore we have to create a copy
-; of the command-line in a different buffer before the original is potentially
-; destroyed.
-
-        ldy     #$00
-:       lda     BASIC_BUF,x
-        sta     buffer,y
-        inx
-        iny
-        cpy     #BUF_LEN - 1    ; Keep the terminating zero intact
-        bcc     :-
-
-; Start processing the arguments.
-
-        ldx     #$00
-        ldy     #$01 * 2        ; Start with argv[1]
-
-; Find the next argument. Stop if the end of the string or a character with the
-; hibit set is reached. The later is true if the string isn't already parsed by
-; BASIC (as expected) but is a still unprocessed input string. In this case the
-; string isn't the expected command-line at all. We found this out the hard way
-; by BRUNing the program with ProDOS on a machine with a slot-based clock (like
-; the Thunder Clock). ProDOS called the clock firmware which places the current
-; date as BASIC input string with hibits set in the input buffer. While looking
-; for the REM token we stumbled across the first '2' character ($32+$80 = $B2)
-; and interpreted the rest of the date as a spurious command-line parameter.
-
-next:   lda     buffer,x
-        beq     done
-        bmi     done
-        inx
-        cmp     #' '            ; Skip leading spaces
-        beq     next
-
-; Found start of next argument. We've incremented the pointer in X already, so
-; it points to the second character of the argument. This is useful since we
-; will check now for a quoted argument, in which case we will have to skip this
-; first character.
-
-        cmp     #'"'            ; Is the argument quoted?
-        beq     :+              ; Jump if so
-        dex                     ; Reset pointer to first argument character
-        lda     #' '            ; A space ends the argument
-:       sta     tmp1            ; Set end of argument marker
-
-; Now store a pointer to the argument into the next slot.
-
-        txa                     ; Get low byte
-        clc
-        adc     #<buffer
-        sta     argv,y          ; argv[y] = &arg
-        iny
-        lda     #$00
-        adc     #>buffer
-        sta     argv,y
-        iny
-        inc     __argc          ; Found another arg
-
-; Search for the end of the argument.
-
-:       lda     buffer,x
-        beq     done
-        inx
-        cmp     tmp1
-        bne     :-
-
-; We've found the end of the argument. X points one character behind it, and
-; A contains the terminating character. To make the argument a valid C string,
-; replace the terminating character by a zero.
-
-        lda     #$00
-        sta     buffer-1,x
-
-; Check if the maximum number of command-line arguments is reached. If not,
-; parse the next one.
-
-        lda     __argc          ; Get low byte of argument count
-        cmp     #MAXARGS        ; Maximum number of arguments reached?
-        bcc     next            ; Parse next one if not
-
-; (The last vector in argv[] already is NULL.)
-
-done:   lda     #<argv
-        ldx     #>argv
-        sta     __argv
-        stx     __argv+1
-        rts
-
-; This array is zeroed before initmainargs is called.
-; char* argv[MAXARGS+1] = {FNAM};
-
-        .data
-
-argv:   .addr   FNAM
-        .res    MAXARGS * 2
-
-        .bss
-
-buffer: .res    BUF_LEN
diff --git a/libsrc/apple2/mcbdefault.s b/libsrc/apple2/mcbdefault.s
deleted file mode 100644 (file)
index cada417..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-;
-; Default mouse callbacks for the Apple II
-;
-; Oliver Schmidt, 22.09.2005
-;
-; All functions in this module should be interrupt safe, because they may
-; be called from an interrupt handler
-;
-
-        .export         _mouse_def_callbacks
-        
-        .include        "apple2.inc"
-
-; ------------------------------------------------------------------------
-
-        .bss
-        
-backup: .res    1
-visible:.res    1
-
-; ------------------------------------------------------------------------
-
-        .rodata
-
-        ; Callback structure
-_mouse_def_callbacks:
-        .addr   hide
-        .addr   show
-        .addr   prep
-        .addr   draw
-        .addr   movex
-        .addr   movey
-
-; ------------------------------------------------------------------------
-
-        .data
-
-        .ifdef  __APPLE2ENH__
-cursor = 'B'                    ; MouseText character
-        .else
-cursor = '+' | $40              ; Flashing crosshair
-        .endif
-
-getcursor:
-        .ifdef  __APPLE2ENH__
-        bit     RD80VID         ; In 80 column mode?
-        bpl     column          ; No, skip bank switching
-switch: bit     LOWSCR          ; Patched at runtime
-        .endif
-column: ldx     #$00            ; Patched at runtime
-getscr: lda     $0400,x         ; Patched at runtime
-        cmp     #cursor
-        rts
-
-setcursor:
-        lda     #cursor
-setscr: sta     $0400,x         ; Patched at runtime
-        .ifdef  __APPLE2ENH__
-        bit     LOWSCR          ; Doesn't hurt in 40 column mode
-        .endif
-        rts
-
-; ------------------------------------------------------------------------
-
-        .code
-
-done:
-        .ifdef  __APPLE2ENH__
-        bit     LOWSCR          ; Doesn't hurt in 40 column mode
-        .endif
-return: rts
-
-; Hide the mouse cursor.
-hide:
-        dec     visible
-        ; Fall through
-
-; Prepare to move the mouse cursor.
-prep:
-        jsr     getcursor       ; Cursor visible at current position?
-        bne     done            ; No, we're done
-        lda     backup          ; Get character at cursor position
-        jmp     setscr          ; Draw character
-
-; Show the mouse cursor.
-show:
-        inc     visible
-        ; Fall through
-
-; Draw the mouse cursor.
-draw:
-        lda     visible
-        beq     return
-        jsr     getcursor       ; Cursor visible at current position?
-        beq     done            ; Yes, we're done
-        sta     backup          ; Save character at cursor position
-        jmp     setcursor       ; Draw cursor
-
-; Move the mouse cursor x position to the value in A/X.
-movex:
-        dex                     ; Is position [256..279]?
-        bmi     :+              ; No, start with column 0
-        clc
-        adc     #$0100 .MOD 7   ; Bias position
-        ldx     #$0100 / 7 - 1  ; Bias column
-:       sec
-:       sbc     #7              ; 280 positions / 40 columns
-        inx
-        bcs     :-
-        stx     column+1
-        .ifdef  __APPLE2ENH__
-        adc     #7 / 2          ; Left or right half of 40-col column?
-        ldx     #<LOWSCR        ; Columns 1,3,5..79
-        bcs     :+
-        .assert LOWSCR + 1 = HISCR, error
-        inx                     ; Columns 0,2,4..78
-:       stx     switch+1
-        .endif
-        rts
-
-; Move the mouse cursor y position to the value in A/X.
-movey:
-        tax                     ; ABCDExxx
-        lsr                     ; 0ABCDExx
-        lsr                     ; 00ABCDEx
-        lsr                     ; 000ABCDE
-        sta     getscr+1
-        lsr                     ; 0000ABCD
-        and     #%00000011      ; 000000CD
-        ora     #>$0400         ; 000001CD
-        sta     getscr+2
-        sta     setscr+2
-        txa                     ; ABCDExxx
-        ror                     ; EABCDExx
-        and     #%11100000      ; EAB00000
-        ora     getscr+1        ; EABABCDE
-        and     #%11111000      ; EABAB000
-        sta     getscr+1
-        sta     setscr+1
-        rts
diff --git a/libsrc/apple2/mli.inc b/libsrc/apple2/mli.inc
deleted file mode 100644 (file)
index 42363d9..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-;
-; Oliver Schmidt, 30.12.2004
-;
-; Apple ProDOS 8 MLI
-;
-
-READ_BLOCK_CALL = $80
-WRITE_BLOCK_CALL= $81
-RW_BLOCK_COUNT  = 3
-
-GET_TIME_CALL   = $82
-GET_TIME_COUNT  = 0
-
-CREATE_CALL     = $C0
-CREATE_COUNT    = 7
-
-DESTROY_CALL    = $C1
-DESTROY_COUNT   = 1
-
-RENAME_CALL     = $C2
-RENAME_COUNT    = 2
-
-GET_INFO_CALL   = $C4
-GET_INFO_COUNT  = $A
-
-ON_LINE_CALL    = $C5
-ON_LINE_COUNT   = 2
-
-SET_PREFIX_CALL = $C6
-GET_PREFIX_CALL = $C7
-PREFIX_COUNT    = 1
-
-OPEN_CALL       = $C8
-OPEN_COUNT      = 3
-
-READ_CALL       = $CA
-WRITE_CALL      = $CB
-RW_COUNT        = 4
-
-CLOSE_CALL      = $CC
-CLOSE_COUNT     = 1
-
-SET_MARK_CALL   = $CE
-GET_MARK_CALL   = $CF
-MARK_COUNT      = 2
-
-SET_EOF_CALL    = $D0
-GET_EOF_CALL    = $D1
-EOF_COUNT       = 2
-
-        .struct MLI
-                .union
-                        .struct RW_BLOCK
-                                PARAM_COUNT     .byte
-                                UNIT_NUM        .byte
-                                DATA_BUFFER     .addr
-                                BLOCK_NUM       .word
-                        .endstruct
-                        .struct CREATE
-                                PARAM_COUNT     .byte
-                                PATHNAME        .addr
-                                ACCESS          .byte
-                                FILE_TYPE       .byte
-                                AUX_TYPE        .word
-                                STORAGE_TYPE    .byte
-                                CREATE_DATE     .word
-                                CREATE_TIME     .word
-                        .endstruct
-                        .struct DESTROY
-                                PARAM_COUNT     .byte
-                                PATHNAME        .addr
-                        .endstruct
-                        .struct RENAME
-                                PARAM_COUNT     .byte
-                                PATHNAME        .addr
-                                NEW_PATHNAME    .addr
-                        .endstruct
-                        .struct INFO
-                                PARAM_COUNT     .byte
-                                PATHNAME        .addr
-                                ACCESS          .byte
-                                FILE_TYPE       .byte
-                                AUX_TYPE        .word
-                                STORAGE_TYPE    .byte
-                                BLOCKS          .word
-                                MODE_DATE       .word
-                                MODE_TIME       .word
-                                CREATE_DATE     .word
-                                CREATE_TIME     .word
-                        .endstruct
-                        .struct ON_LINE
-                                PARAM_COUNT     .byte
-                                UNIT_NUM        .byte
-                                DATA_BUFFER     .addr
-                        .endstruct
-                        .struct PREFIX
-                                PARAM_COUNT     .byte
-                                PATHNAME        .addr
-                        .endstruct
-                        .struct OPEN
-                                PARAM_COUNT     .byte
-                                PATHNAME        .addr
-                                IO_BUFFER       .addr
-                                REF_NUM         .byte
-                        .endstruct
-                        .struct RW
-                                PARAM_COUNT     .byte
-                                REF_NUM         .byte
-                                DATA_BUFFER     .addr
-                                REQUEST_COUNT   .word
-                                TRANS_COUNT     .word
-                        .endstruct
-                        .struct CLOSE
-                                PARAM_COUNT     .byte
-                                REF_NUM         .byte
-                        .endstruct
-                        .struct MARK
-                                PARAM_COUNT     .byte
-                                REF_NUM         .byte
-                                POSITION        .byte 3
-                        .endstruct
-                        .struct EOF
-                                PARAM_COUNT     .byte
-                                REF_NUM         .byte
-                                EOF             .byte 3
-                        .endstruct
-                .endunion
-        .endstruct
-
-        .global         mliparam
-        .global         callmli
-
-DEVNUM  :=      $BF30           ; Most recent accessed device
-DEVCNT  :=      $BF31           ; Number of on-line devices (minus 1)
-DEVLST  :=      $BF32           ; Up to 14 units may be active
-DATELO  :=      $BF90           ; Bits 15-9 = year, 8-5 = month, 4-0 = day
-TIMELO  :=      $BF92           ; Bits 12-8 = hour, 5-0 = minute
-LEVEL   :=      $BF94           ; File level: used in open, flush, close
-MACHID  :=      $BF98           ; Machine identification
-PFIXPTR :=      $BF9A           ; If = 0, no prefix active
-KVERSION:=      $BFFF           ; Kernel version number
diff --git a/libsrc/apple2/mli.s b/libsrc/apple2/mli.s
deleted file mode 100644 (file)
index 3e47714..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-;
-; Oliver Schmidt, 30.12.2004
-;
-; Apple ProDOS 8 MLI
-;
-
-        .import         __dos_type
-
-        .include        "mli.inc"
-
-        .bss
-
-mliparam:.tag   MLI
-
-        .data
-
-callmli:
-        ; Store parameters
-        sta     call
-        stx     mliparam
-
-        ; Check for ProDOS 8
-        lda     __dos_type
-        beq     oserr
-
-        ; Call MLI and return
-        jsr     $BF00           ; MLI call entry point
-call:   .byte   $00
-        .addr   mliparam
-        rts
-
-        ; Load oserror code and return
-oserr:  lda     #$01            ; "Bad system call number"
-        sec
-        rts
diff --git a/libsrc/apple2/mou/a2.stdmou.s b/libsrc/apple2/mou/a2.stdmou.s
deleted file mode 100644 (file)
index c3d10f0..0000000
+++ /dev/null
@@ -1,441 +0,0 @@
-;
-; Driver for the AppleMouse II Card.
-;
-; Oliver Schmidt, 03.09.2005
-;
-
-        .include        "zeropage.inc"
-        .include        "mouse-kernel.inc"
-        .include        "apple2.inc"
-
-        .macpack        module
-
-; ------------------------------------------------------------------------
-
-SETMOUSE        = $12   ; Sets mouse mode
-SERVEMOUSE      = $13   ; Services mouse interrupt
-READMOUSE       = $14   ; Reads mouse position
-CLEARMOUSE      = $15   ; Clears mouse position to 0 (for delta mode)
-POSMOUSE        = $16   ; Sets mouse position to a user-defined pos
-CLAMPMOUSE      = $17   ; Sets mouse bounds in a window
-HOMEMOUSE       = $18   ; Sets mouse to upper-left corner of clamp win
-INITMOUSE       = $19   ; Resets mouse clamps to default values and
-                        ; sets mouse position to 0,0
-
-pos1_lo         := $0478
-pos1_hi         := $0578
-pos2_lo         := $04F8
-pos2_hi         := $05F8
-status          := $0778
-
-; ------------------------------------------------------------------------
-
-        .ifdef  __APPLE2ENH__
-        module_header   _a2e_stdmou_mou
-        .else
-        module_header   _a2_stdmou_mou
-        .endif
-
-        ; Driver signature
-        .byte   $6D, $6F, $75           ; "mou"
-        .byte   MOUSE_API_VERSION       ; Mouse driver API version number
-
-        ; Library reference
-        .addr   $0000
-
-        ; Jump table
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   HIDE
-        .addr   SHOW
-        .addr   SETBOX
-        .addr   GETBOX
-        .addr   MOVE
-        .addr   BUTTONS
-        .addr   POS
-        .addr   INFO
-        .addr   IOCTL
-        .addr   IRQ
-
-        ; Mouse driver flags
-        .byte   MOUSE_FLAG_EARLY_IRQ
-
-        ; Callback table, set by the kernel before INSTALL is called
-CHIDE:  jmp     $0000                   ; Hide the cursor
-CSHOW:  jmp     $0000                   ; Show the cursor
-CPREP:  jmp     $0000                   ; Prepare to move the cursor
-CDRAW:  jmp     $0000                   ; Draw the cursor
-CMOVEX: jmp     $0000                   ; Move the cursor to X coord
-CMOVEY: jmp     $0000                   ; Move the cursor to Y coord
-
-; ------------------------------------------------------------------------
-
-        .bss
-
-box:    .tag    MOUSE_BOX
-info:   .tag    MOUSE_INFO
-slot:   .res    1
-
-; ------------------------------------------------------------------------
-
-        .rodata
-
-offsets:.byte   $05             ; Pascal 1.0 ID byte
-        .byte   $07             ; Pascal 1.0 ID byte
-        .byte   $0B             ; Pascal 1.1 generic signature byte
-        .byte   $0C             ; Device signature byte
-
-values: .byte   $38             ; Fixed
-        .byte   $18             ; Fixed
-        .byte   $01             ; Fixed
-        .byte   $20             ; X-Y pointing device type 0
-
-size    = * - values
-
-inibox: .word     0             ; MinX
-        .word     0             ; MinY
-        .word   279             ; MaxX
-        .word   191             ; MaxY
-
-; ------------------------------------------------------------------------
-
-        .data
-
-firmware:
-        ; Lookup and patch firmware address lobyte
-lookup: ldy     $FF00,x         ; Patched at runtime
-        sty     jump+1          ; Modify code below
-
-        ; Apple II Mouse TechNote #1, Interrupt Environment with the Mouse:
-        ; "Enter all mouse routines (...) with the X register set to $Cn
-        ;  and Y register set to $n0, where n = the slot number."
-xparam: ldx     #$FF            ; Patched at runtime
-yparam: ldy     #$FF            ; Patched at runtime
-
-jump:   jmp     $FFFF           ; Patched at runtime
-
-; ------------------------------------------------------------------------
-
-        .code
-
-; INSTALL: Is called after the driver is loaded into memory. If possible,
-; check if the hardware is present. Must return an MOUSE_ERR_xx code in A/X.
-INSTALL:
-        lda     #<$C000
-        sta     ptr1
-        lda     #>$C000
-        sta     ptr1+1
-
-        ; Search for AppleMouse II firmware in slots 1 - 7
-next:   inc     ptr1+1
-        lda     ptr1+1
-        cmp     #>$C800
-        bcc     :+
-
-        ; Mouse firmware not found
-        lda     #<MOUSE_ERR_NO_DEVICE
-        ldx     #>MOUSE_ERR_NO_DEVICE
-        rts
-
-        ; Check Pascal 1.1 Firmware Protocol ID bytes
-:       ldx     #size - 1
-:       ldy     offsets,x
-        lda     values,x
-        cmp     (ptr1),y
-        bne     next
-        dex
-        bpl     :-
-
-        ; Get and patch firmware address hibyte
-        lda     ptr1+1
-        sta     lookup+2
-        sta     xparam+1
-        sta     jump+2
-
-        ; Disable interrupts now because setting the slot number makes 
-        ; the IRQ handler (maybe called due to some non-mouse IRQ) try
-        ; calling the firmware which isn't correctly set up yet
-        sei
-
-        ; Convert to and save slot number
-        and     #$0F
-        sta     slot
-
-        ; Convert to and patch I/O register index
-        asl
-        asl
-        asl
-        asl
-        sta     yparam+1
-        
-        ; The AppleMouse II Card needs the ROM switched in
-        ; to be able to detect an Apple //e and use RDVBL
-        bit     $C082
-
-        ; Reset mouse hardware
-        ldx     #INITMOUSE
-        jsr     firmware
-        
-        ; Switch in LC bank 2 for R/O
-        bit     $C080
-
-        ; Turn mouse on
-        lda     #%00000001
-        ldx     #SETMOUSE
-        jsr     firmware
-
-        ; Set initial mouse clamps
-        lda     #<inibox
-        ldx     #>inibox
-        jsr     SETBOX
-
-        ; Set initial mouse position
-        ldx     slot
-        lda     #<(279 / 2)
-        sta     pos1_lo,x
-        lda     #>(279 / 2)
-        sta     pos1_hi,x
-        lda     #<(191 / 2)
-        sta     pos2_lo,x
-        lda     #>(191 / 2)
-        sta     pos2_hi,x
-        ldx     #POSMOUSE
-        jsr     firmware
-
-        ; Update cursor
-        jsr     update
-
-        ; Turn VBL interrupt on
-        lda     #%00001001
-        ldx     #SETMOUSE
-common: jsr     firmware
-
-        ; Enable interrupts and return success
-        cli
-        lda     #<MOUSE_ERR_OK
-        ldx     #>MOUSE_ERR_OK
-        rts
-
-; UNINSTALL: Is called before the driver is removed from memory.
-; No return code required (the driver is removed from memory on return).
-UNINSTALL:
-        ; Hide cursor
-        sei
-        jsr     CHIDE
-
-        ; Turn mouse off
-        lda     #%00000000
-        ldx     #SETMOUSE
-        bne     common          ; Branch always
-
-; SETBOX: Set the mouse bounding box. The parameters are passed as they come
-; from the C program, that is, a pointer to a mouse_box struct in A/X.
-; No checks are done if the mouse is currently inside the box, this is the job
-; of the caller. It is not necessary to validate the parameters, trust the
-; caller and save some code here. No return code required.
-SETBOX:
-        sta     ptr1
-        stx     ptr1+1
-        
-        ; Set x clamps
-        ldx     #$00
-        ldy     #MOUSE_BOX::MINX
-        jsr     :+
-        
-        ; Set y clamps
-        ldx     #$01
-        ldy     #MOUSE_BOX::MINY
-
-        ; Apple II Mouse TechNote #1, Interrupt Environment with the Mouse:
-        ; "Disable interrupts before placing position information in the
-        ;  screen holes."
-:       sei
-
-        ; Set low clamp
-        lda     (ptr1),y
-        sta     box,y
-        sta     pos1_lo
-        iny
-        lda     (ptr1),y
-        sta     box,y   
-        sta     pos1_hi
-
-        ; Skip one word
-        iny
-        iny
-
-        ; Set high clamp
-        iny
-        lda     (ptr1),y
-        sta     box,y   
-        sta     pos2_lo
-        iny
-        lda     (ptr1),y
-        sta     box,y   
-        sta     pos2_hi
-
-        txa
-        ldx     #CLAMPMOUSE
-        bne     common          ; Branch always
-
-; GETBOX: Return the mouse bounding box. The parameters are passed as they
-; come from the C program, that is, a pointer to a mouse_box struct in A/X.
-GETBOX:
-        sta     ptr1
-        stx     ptr1+1
-
-        ldy     #.sizeof(MOUSE_BOX)-1
-:       lda     box,y
-        sta     (ptr1),y
-        dey
-        bpl     :-
-        rts
-
-; MOVE: Move the mouse to a new position. The position is passed as it comes
-; from the C program, that is: x on the stack and y in A/X. The C wrapper will
-; remove the parameter from the stack on return.
-; No checks are done if the new position is valid (within the bounding box or
-; the screen). No return code required.
-MOVE:
-        ldy     slot
-        sei
-
-        ; Set y
-        sta     pos2_lo,y
-        txa
-        sta     pos2_hi,y
-
-        tya
-        tax
-        ldy     #$00            ; Start at top of stack
-
-        ; Set x
-        lda     (sp),y
-        iny
-        sta     pos1_lo,x
-        lda     (sp),y
-        sta     pos1_hi,x
-
-        ; Update cursor
-        jsr     update
-
-        ldx     #POSMOUSE
-        bne     common          ; Branch always
-
-; HIDE: Is called to hide the mouse cursor. The mouse kernel manages a
-; counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently visible and should get hidden. For most drivers,
-; no special action is required besides hiding the mouse cursor.
-; No return code required.
-HIDE:
-        sei
-        jsr     CHIDE
-        cli
-        rts
-
-; SHOW: Is called to show the mouse cursor. The mouse kernel manages a
-; counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently hidden and should become visible. For most drivers,
-; no special action is required besides enabling the mouse cursor.
-; No return code required.
-SHOW:
-        sei
-        jsr     CSHOW
-        cli
-        rts
-
-; BUTTONS: Return the button mask in A/X.
-BUTTONS:
-        lda     info + MOUSE_INFO::BUTTONS
-        ldx     #$00
-        rts
-
-; POS: Return the mouse position in the MOUSE_POS struct pointed to by ptr1.
-; No return code required.
-POS:
-        ldy     #.sizeof(MOUSE_POS)-1
-        bne     copy            ; Branch always
-
-; INFO: Returns mouse position and current button mask in the MOUSE_INFO
-; struct pointed to by ptr1. No return code required.
-INFO:
-        ldy     #.sizeof(MOUSE_INFO)-1
-copy:   sei
-:       lda     info,y
-        sta     (ptr1),y
-        dey
-        bpl     :-
-        cli
-        rts
-
-; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
-; specific data in ptr1, and the ioctl code in A.
-; Must return an MOUSE_ERR_xx code in A/X.
-IOCTL:
-        lda     #<MOUSE_ERR_INV_IOCTL
-        ldx     #>MOUSE_ERR_INV_IOCTL
-        rts
-
-; IRQ: Called from the builtin runtime IRQ handler as a subroutine. All
-; registers are already saved, no parameters are passed, but the carry flag
-; is clear on entry. The routine must return with carry set if the interrupt
-; was handled, otherwise with carry clear.
-IRQ:
-        ; Check for installed mouse
-        lda     slot
-        beq     done
-
-        ; Check for mouse interrupt
-        ldx     #SERVEMOUSE
-        jsr     firmware
-        bcc     :+
-        clc                     ; Interrupt not handled
-done:   rts
-
-:       ldx     #READMOUSE
-        jsr     firmware
-
-        ; Get status
-        ldy     slot
-        lda     status,y
-        tax                     ; Save status
-
-        ; Extract button down values
-        asl                     ;  C = Button 0 is currently down
-        and     #%00100000      ; !Z = Button 1 is currently down
-
-        ; Set button mask
-        beq     :+
-        lda     #MOUSE_BTN_RIGHT
-:       bcc     :+
-        ora     #MOUSE_BTN_LEFT
-:       sta     info + MOUSE_INFO::BUTTONS
-
-        ; Check for mouse movement
-        txa                     ; Restore status
-        and     #%00100000      ; X or Y changed since last READMOUSE
-        beq     :+
-
-        ; Remove the cursor at the old position
-update: jsr     CPREP
-
-        ; Get and set the new X position
-        ldy     slot
-        lda     pos1_lo,y
-        ldx     pos1_hi,y
-        sta     info + MOUSE_POS::XCOORD
-        stx     info + MOUSE_POS::XCOORD+1
-        jsr     CMOVEX
-
-        ; Get and set the new Y position
-        ldy     slot
-        lda     pos2_lo,y
-        ldx     pos2_hi,y
-        sta     info + MOUSE_POS::YCOORD
-        stx     info + MOUSE_POS::YCOORD+1
-        jsr     CMOVEY
-
-        ; Draw the cursor at the new position
-:       jsr     CDRAW
-        sec                     ; Interrupt handled
-        rts
diff --git a/libsrc/apple2/mouse_stat_stddrv.s b/libsrc/apple2/mouse_stat_stddrv.s
deleted file mode 100644 (file)
index dcb3be9..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Address of the static standard mouse driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void mouse_static_stddrv[];
-;
-
-        .export _mouse_static_stddrv
-        .ifdef  __APPLE2ENH__
-        .import _a2e_stdmou_mou
-        .else
-        .import _a2_stdmou_mou
-        .endif
-
-.rodata
-
-        .ifdef  __APPLE2ENH__
-_mouse_static_stddrv := _a2e_stdmou_mou
-        .else
-_mouse_static_stddrv := _a2_stdmou_mou
-        .endif
diff --git a/libsrc/apple2/mouse_stddrv.s b/libsrc/apple2/mouse_stddrv.s
deleted file mode 100644 (file)
index 876fbb4..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Name of the standard mouse driver
-;
-; Ullrich von Bassewitz, 2009-09-11
-;
-; const char mouse_stddrv[];
-;
-
-        .export _mouse_stddrv
-
-.rodata
-
-_mouse_stddrv:
-        .ifdef  __APPLE2ENH__
-        .asciiz "A2E.STDMOU.MOU"
-        .else
-        .asciiz "A2.STDMOU.MOU"
-        .endif
diff --git a/libsrc/apple2/open.s b/libsrc/apple2/open.s
deleted file mode 100644 (file)
index b1686df..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-;
-; Oliver Schmidt, 30.12.2004
-;
-; int open (const char* name, int flags, ...);
-;
-
-        .export         _open, closedirect, freebuffer
-        .export         __filetype, __auxtype, __datetime
-        .constructor    raisefilelevel
-        .destructor     closeallfiles, 5
-
-        .import         pushname, popname, __dos_type
-        .import         iobuf_alloc, iobuf_free
-        .import         addysp, incsp4, incaxy, pushax, popax
-
-        .include        "zeropage.inc"
-        .include        "errno.inc"
-        .include        "fcntl.inc"
-        .include        "mli.inc"
-        .include        "filedes.inc"
-
-        .segment        "INIT"
-
-raisefilelevel:
-        ; Raise file level
-        lda     __dos_type
-        beq     :+
-        inc     LEVEL
-:       rts
-
-        .code
-
-_open:
-        ; Throw away all parameters except name
-        ; and flags occupying together 4 bytes
-        dey
-        dey
-        dey
-        dey
-        jsr     addysp
-
-        ; Start with first fdtab slot
-        ldy     #$00
-
-        ; Check for free fdtab slot
-:       lda     fdtab + FD::REF_NUM,y
-        beq     found
-
-        ; Advance to next fdtab slot
-        .assert .sizeof(FD) = 4, error
-        iny
-        iny
-        iny
-        iny
-
-        ; Check for end of fdtab
-        cpy     #MAX_FDS * .sizeof(FD)
-        bcc     :-
-
-        ; Load errno code
-        lda     #EMFILE
-
-        ; Cleanup stack
-errno:  jsr     incsp4          ; Preserves A
-
-        ; Set __errno
-        jmp     __directerrno
-
-        ; Save fdtab slot
-found:  tya
-        pha
-
-        ; Alloc I/O buffer
-        lda     #<(fdtab + FD::BUFFER)
-        ldx     #>(fdtab + FD::BUFFER)
-        jsr     incaxy
-        jsr     pushax
-        lda     #$00
-        ldx     #>$0100
-        jsr     pushax          ; Preserves A
-        ldx     #>$0400
-        jsr     iobuf_alloc
-        tay                     ; Save errno code
-
-        ; Restore fdtab slot
-        pla
-        sta     tmp2            ; Save fdtab slot
-
-        ; Check for error
-        tya                     ; Restore errno code
-        bne     errno
-
-        ; Get and save flags
-        jsr     popax
-        sta     tmp3
-
-        ; Get and push name
-        jsr     popax
-        jsr     pushname
-        bne     oserr1
-
-        ; Set pushed name
-        lda     sp
-        ldx     sp+1
-        sta     mliparam + MLI::OPEN::PATHNAME
-        stx     mliparam + MLI::OPEN::PATHNAME+1
-
-        ; Check for create flag
-        lda     tmp3            ; Restore flags
-        and     #O_CREAT
-        beq     open
-
-        ; PATHNAME already set
-        .assert MLI::CREATE::PATHNAME = MLI::OPEN::PATHNAME, error
-
-        ; Set all other parameters from template
-        ldx     #(MLI::CREATE::CREATE_TIME+1) - (MLI::CREATE::PATHNAME+1) - 1
-:       lda     CREATE,x
-        sta     mliparam + MLI::CREATE::ACCESS,x
-        dex
-        bpl     :-
-
-        ; Create file
-        lda     #CREATE_CALL
-        ldx     #CREATE_COUNT
-        jsr     callmli
-        bcc     open
-
-        ; Check for ordinary errors
-        cmp     #$47            ; "Duplicate filename"
-        bne     oserr2
-
-        ; Check for exclusive flag
-        lda     tmp3            ; Restore flags
-        and     #O_EXCL
-        beq     open
-
-        lda     #$47            ; "Duplicate filename"
-
-        ; Cleanup name
-oserr2: jsr     popname         ; Preserves A
-
-oserr1: ldy     tmp2            ; Restore fdtab slot
-
-        ; Cleanup I/O buffer
-        pha                     ; Save oserror code
-        jsr     freebuffer
-        pla                     ; Restore oserror code
-
-        ; Set __oserror
-        jmp     __mappederrno
-
-open:   ldy     tmp2            ; Restore fdtab slot
-
-        ; Set allocated I/O buffer
-        ldx     fdtab + FD::BUFFER+1,y
-        sta     mliparam + MLI::OPEN::IO_BUFFER         ; A = 0
-        stx     mliparam + MLI::OPEN::IO_BUFFER+1
-
-        ; Open file
-        lda     #OPEN_CALL
-        ldx     #OPEN_COUNT
-        jsr     callmli
-        bcs     oserr2
-
-        ; Get and save fd
-        ldx     mliparam + MLI::OPEN::REF_NUM
-        stx     tmp1            ; Save fd
-
-        ; Set flags and check for truncate flag
-        lda     tmp3            ; Restore flags
-        sta     fdtab + FD::FLAGS,y
-        and     #O_TRUNC
-        beq     done
-
-        ; Set fd and zero size
-        stx     mliparam + MLI::EOF::REF_NUM
-        ldx     #$02
-        lda     #$00
-:       sta     mliparam + MLI::EOF::EOF,x
-        dex
-        bpl     :-
-
-        ; Set file size
-        lda     #SET_EOF_CALL
-        ldx     #EOF_COUNT
-        jsr     callmli
-        bcc     done
-
-        ; Cleanup file
-        pha                     ; Save oserror code
-        lda     tmp1            ; Restore fd
-        jsr     closedirect
-        pla                     ; Restore oserror code
-        bne     oserr2          ; Branch always
-
-        ; Store fd
-done:   lda     tmp1            ; Restore fd
-        sta     fdtab + FD::REF_NUM,y
-
-        ; Convert fdtab slot to handle
-        .assert .sizeof(FD) = 4, error
-        tya
-        lsr
-        lsr
-
-        ; Cleanup name
-        jsr     popname         ; Preserves A
-
-        ; Return success
-        ldx     #$00
-        stx     __oserror
-        rts
-
-freebuffer:
-        ; Free I/O buffer
-        lda     #$00
-        ldx     fdtab + FD::BUFFER+1,y
-        jmp     iobuf_free
-
-closedirect:
-        ; Set fd
-        sta     mliparam + MLI::CLOSE::REF_NUM
-
-        ; Call close
-        lda     #CLOSE_CALL
-        ldx     #CLOSE_COUNT
-        jmp     callmli
-
-closeallfiles:
-        ; All open files with current level (or higher)
-        lda     #$00
-        jsr     closedirect
-
-        ; Restore original file level
-        lda     __dos_type
-        beq     :+
-        dec     LEVEL
-:       rts
-
-        .data
-
-CREATE: .byte   %11000011       ; ACCESS:       Standard full access
-__filetype:
-        .byte   $06             ; FILE_TYPE:    Standard binary file
-__auxtype:
-        .word   $0000           ; AUX_TYPE:     Load address N/A
-        .byte   $01             ; STORAGE_TYPE: Standard seedling file
-__datetime:
-        .word   $0000           ; CREATE_DATE:  Current date
-        .word   $0000           ; CREATE_TIME:  Current time
diff --git a/libsrc/apple2/opendir.c b/libsrc/apple2/opendir.c
deleted file mode 100644 (file)
index 0405931..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                opendir.h                                  */
-/*                                                                           */
-/*                             Open a directory                              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2005  Oliver Schmidt, <ol.sc@web.de>                                  */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <dirent.h>
-#include "dir.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-extern char _cwd[FILENAME_MAX];
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-DIR* __fastcall__ opendir (register const char* name) 
-{
-    register DIR* dir;
-
-    /* Alloc DIR */
-    if ((dir = malloc (sizeof (*dir))) == NULL) {
-
-        /* May not have been done by malloc() */
-        _directerrno (ENOMEM);
-
-        /* Return failure */
-        return NULL;
-    }
-
-    /* Interpret dot as current working directory */
-    if (*name == '.') {
-        name = _cwd;
-    }
-
-    /* Open directory file */
-    if ((dir->fd = open (name, O_RDONLY)) != -1) {
-
-        /* Read directory key block */
-        if (read (dir->fd,
-                  dir->block.bytes,
-                  sizeof (dir->block)) == sizeof (dir->block)) {
-
-            /* Get directory entry infos from directory header */
-            dir->entry_length      = dir->block.bytes[0x23];
-            dir->entries_per_block = dir->block.bytes[0x24];
-
-            /* Skip directory header entry */
-            dir->current_entry = 1;
-
-            /* Return success */
-            return dir;
-        }
-
-        /* EOF: Most probably no directory file at all */
-        if (_oserror == 0) {
-            _directerrno (EINVAL);
-        }
-
-        /* Cleanup directory file */
-        close (dir->fd);
-    }
-
-    /* Cleanup DIR */
-    free (dir);
-
-    /* Return failure */
-    return NULL;
-}
diff --git a/libsrc/apple2/oserrlist.s b/libsrc/apple2/oserrlist.s
deleted file mode 100644 (file)
index 6fd711e..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-;
-; Stefan Haubenthal, 2003-12-24
-; Ullrich von Bassewitz, 18.07.2002
-;
-; Defines the platform specific error list.
-;
-; The table is built as a list of entries
-;
-;       .byte   entrylen
-;       .byte   errorcode
-;       .asciiz errormsg
-;
-; and terminated by an entry with length zero that is returned if the
-; error code could not be found.
-;
-
-        .export         __sys_oserrlist
-
-;----------------------------------------------------------------------------
-; Macros used to generate the list (may get moved to an include file?)
-
-; Regular entry
-.macro  sys_oserr_entry         code, msg
-        .local  Start, End
-Start:  .byte   End - Start
-        .byte   code
-        .asciiz msg
-End:
-.endmacro
-
-; Sentinel entry
-.macro  sys_oserr_sentinel      msg
-        .byte   0                       ; Length is always zero
-        .byte   0                       ; Code is unused
-        .asciiz msg
-.endmacro
-
-;----------------------------------------------------------------------------
-; The error message table
-
-.rodata
-
-__sys_oserrlist:
-        sys_oserr_entry         $01, "Bad system call number"
-        sys_oserr_entry         $04, "Bad system call parameter count"
-        sys_oserr_entry         $25, "Interrupt table full"
-        sys_oserr_entry         $27, "I/O error"
-        sys_oserr_entry         $28, "No device connected"
-        sys_oserr_entry         $2B, "Disk write protected"
-        sys_oserr_entry         $2E, "Disk switched"
-        sys_oserr_entry         $2F, "Device off-line"
-        sys_oserr_entry         $40, "Invalid pathname"
-        sys_oserr_entry         $42, "Maximum number of files open"
-        sys_oserr_entry         $43, "Invalid reference number"
-        sys_oserr_entry         $44, "Directory not found"
-        sys_oserr_entry         $45, "Volume not found"
-        sys_oserr_entry         $46, "File not found"
-        sys_oserr_entry         $47, "Duplicate filename"
-        sys_oserr_entry         $48, "Volume full"
-        sys_oserr_entry         $49, "Volume directory full"
-        sys_oserr_entry         $4A, "Incompatible file format"
-        sys_oserr_entry         $4B, "Unsupported storage_type"
-        sys_oserr_entry         $4C, "End of file encountered"
-        sys_oserr_entry         $4D, "Position out of range"
-        sys_oserr_entry         $4E, "File access error"
-        sys_oserr_entry         $50, "File is open"
-        sys_oserr_entry         $51, "Directory structure damaged"
-        sys_oserr_entry         $52, "Not a ProDOS disk"
-        sys_oserr_entry         $53, "Invalid system call parameter"
-        sys_oserr_entry         $55, "Volume Control Block table full"
-        sys_oserr_entry         $56, "Bad buffer address"
-        sys_oserr_entry         $57, "Duplicate volume"
-        sys_oserr_entry         $5A, "File structure damaged"
-        sys_oserr_sentinel      "Unknown error"
-
-
diff --git a/libsrc/apple2/oserror.s b/libsrc/apple2/oserror.s
deleted file mode 100644 (file)
index f16aa49..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-;
-; Ullrich von Bassewitz, 17.05.2000
-;
-; int __fastcall__ _osmaperrno (unsigned char oserror);
-;
-
-        .export         __osmaperrno
-
-        .include        "errno.inc"
-
-__osmaperrno:
-        ldx     #ErrTabSize
-:       cmp     ErrTab-2,x      ; Search for the error code
-        beq     :+              ; Jump if found
-        dex
-        dex
-        bne     :-              ; Next entry
-
-        ; Code not found, return EUNKNOWN
-        lda     #<EUNKNOWN
-        ldx     #>EUNKNOWN
-        rts
-
-        ; Found the code
-:       lda     ErrTab-1,x
-        ldx     #$00            ; High byte always zero
-        rts
-
-        .rodata
-
-ErrTab: .byte   $01, ENOSYS     ; Bad system call number
-        .byte   $04, EINVAL     ; Bad system call parameter count
-        .byte   $25, ENOMEM     ; Interrupt table full
-        .byte   $27, EIO        ; I/O error
-        .byte   $28, ENODEV     ; No device connected
-        .byte   $2B, EACCES     ; Disk write protected
-;       .byte   $2E, EUNKNOWN   ; Disk switched
-        .byte   $2F, ENODEV     ; Device off-line
-        .byte   $40, EINVAL     ; Invalid pathname
-        .byte   $42, EMFILE     ; Maximum number of files open
-        .byte   $43, EINVAL     ; Invalid reference number
-        .byte   $44, ENOENT     ; Directory not found
-        .byte   $45, ENOENT     ; Volume not found
-        .byte   $46, ENOENT     ; File not found
-        .byte   $47, EEXIST     ; Duplicate filename
-        .byte   $48, ENOSPC     ; Volume full
-        .byte   $49, ENOSPC     ; Volume directory full
-;       .byte   $4A, EUNKNOWN   ; Incompatible file format
-        .byte   $4B, EINVAL     ; Unsupported storage_type
-;       .byte   $4C, EUNKNOWN   ; End of file encountered
-        .byte   $4D, ESPIPE     ; Position out of range
-        .byte   $4E, EACCES     ; File access error
-        .byte   $50, EINVAL     ; File is open
-;       .byte   $51, EUNKNOWN   ; Directory structure damaged
-        .byte   $52, ENODEV     ; Not a ProDOS volume
-        .byte   $53, ERANGE     ; Invalid system call parameter
-        .byte   $55, EMFILE     ; Volume Control Block table full
-        .byte   $56, EINVAL     ; Bad buffer address
-;       .byte   $57, EUNKNOWN   ; Duplicate volume
-;       .byte   $5A, EUNKNOWN   ; File structure damaged
-
-ErrTabSize = (* - ErrTab)
diff --git a/libsrc/apple2/randomize.s b/libsrc/apple2/randomize.s
deleted file mode 100644 (file)
index 1558d85..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.11.2002
-;
-; void _randomize (void);
-; /* Initialize the random number generator */
-;
-
-        .export         __randomize
-        .import         _srand
-
-        .include        "apple2.inc"
-
-__randomize:
-        ldx     RNDH            ; Use random value supplied by ROM
-        lda     RNDL
-        jmp     _srand          ; Initialize generator
-
diff --git a/libsrc/apple2/rdkey.s b/libsrc/apple2/rdkey.s
deleted file mode 100644 (file)
index 15ba4b3..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Oliver Schmidt, 03.03.2007
-;
-; RDKEY routine
-;
-
-        .export         RDKEY
-
-        .include        "apple2.inc"
-
-        .segment        "LOWCODE"
-
-RDKEY:
-        ; Switch in ROM and call RDKEY
-        bit     $C082
-        jsr     $FD0C           ; Display prompt and read key from user input routine
-
-        ; Switch in LC bank 2 for R/O and return
-        bit     $C080
-        rts
diff --git a/libsrc/apple2/read.s b/libsrc/apple2/read.s
deleted file mode 100644 (file)
index ef994d6..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-;
-; Oliver Schmidt, 12.01.2005
-;
-; int __fastcall__ read (int fd, void* buf, unsigned count);
-;
-
-        .constructor    initprompt
-        .export         _read
-        .import         rwprolog, rwcommon
-        .import         RDKEY, COUT
-
-        .include        "zeropage.inc"
-        .include        "errno.inc"
-        .include        "fcntl.inc"
-        .include        "mli.inc"
-        .include        "filedes.inc"
-        .include        "apple2.inc"
-
-        .segment        "INIT"
-
-initprompt:
-        ; Set prompt <> ']' to let DOS 3.3 know that we're
-        ; not in Applesoft immediate mode and thus keep it
-        ; from scanning our device I/O for DOS commands.
-        lda     #$80            ; Same value used at $D52C
-        sta     PROMPT
-        rts
-
-        .code
-
-_read:
-        ; Get parameters
-        jsr     rwprolog
-        bcs     errno
-        tax                     ; Save fd
-
-        ; Check for read access
-        lda     fdtab + FD::FLAGS,y
-        and     #O_RDONLY
-        beq     einval
-
-        ; Check for device
-        txa                     ; Restore fd
-        bmi     device
-
-        ; Do read
-        ldy     #READ_CALL
-        jmp     rwcommon
-
-        ; Device succeeds always
-device: lda     #$00
-        sta     __oserror
-
-        ; Set counter to zero
-        sta     ptr3
-        sta     ptr3+1
-
-        ; Check for zero count
-        lda     ptr2
-        ora     ptr2+1
-        beq     check
-
-        ; Read from device and echo to device
-next:   jsr     RDKEY
-        jsr     COUT
-
-        ; Clear hi bit and check for '\r'
-        and     #$7F
-        cmp     #$0D
-        bne     :+
-
-        ; Replace with '\n' and set count to zero
-        lda     #$0A
-        ldy     #$00
-        sty     ptr2
-        sty     ptr2+1
-
-        ; Put char into buf
-:       ldy     #$00
-        sta     (ptr1),y
-
-        ; Increment pointer
-        inc     ptr1
-        bne     :+
-        inc     ptr1+1
-
-        ; Increment counter
-:       inc     ptr3
-        bne     check
-        inc     ptr3+1
-
-        ; Check for counter less than count
-check:  lda     ptr3
-        cmp     ptr2
-        bcc     next
-        ldx     ptr3+1
-        cpx     ptr2+1
-        bcc     next
-
-        ; Return success, AX already set
-        rts
-
-        ; Load errno code
-einval: lda     #EINVAL
-
-        ; Set __errno
-errno:  jmp     __directerrno
diff --git a/libsrc/apple2/readdir.c b/libsrc/apple2/readdir.c
deleted file mode 100644 (file)
index 8acfbbe..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                readdir.c                                  */
-/*                                                                           */
-/*                           Read directory entry                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2005  Oliver Schmidt, <ol.sc@web.de>                                  */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stddef.h>
-#include <unistd.h>
-#include <dirent.h>
-#include "dir.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-struct dirent* __fastcall__ readdir (register DIR* dir)
-{
-    register unsigned char* entry;
-
-    /* Search for the next active directory entry */
-    do {
-
-        /* Read next directory block if necessary */
-        if (dir->current_entry == dir->entries_per_block) {
-            if (read (dir->fd,
-                      dir->block.bytes,
-                      sizeof (dir->block)) != sizeof (dir->block)) {
-
-                /* Just return failure as read() has */
-                /* set errno if (and only if) no EOF */
-                return NULL;
-            }
-
-            /* Start with first entry in next block */
-            dir->current_entry = 0;
-        }
-
-        /* Compute pointer to current entry */
-        entry = dir->block.content.entries +
-                dir->current_entry * dir->entry_length;
-
-        /* Switch to next entry */
-        ++dir->current_entry;
-    } while (entry[0x00] == 0);
-
-    /* Move creation date/time to allow for next step below */
-    *(unsigned long*)&entry[0x1A] = *(unsigned long*)&entry[0x18];
-
-    /* Feature unsigned long access to EOF by extension from 3 to 4 bytes */
-    entry[0x18] = 0;
-
-    /* Move file type to allow for next step below */
-    entry[0x19] = entry[0x10];
-
-    /* Zero-terminate file name */
-    entry[0x01 + (entry[0x00] & 0x0F)] = 0;
-
-    /* Return success */
-    return (struct dirent*)&entry[0x01];
-}
diff --git a/libsrc/apple2/reboot.s b/libsrc/apple2/reboot.s
deleted file mode 100644 (file)
index 8ee1ba0..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Oliver Schmidt, 14.09.2009
-;
-; void rebootafterexit (void);
-;
-
-        .constructor    initreboot, 11
-        .export         _rebootafterexit
-        .import         done, return
-
-_rebootafterexit := return
-
-        .segment        "INIT"
-
-initreboot:
-        ; Quit to PWRUP
-        lda     #<$FAA6
-        ldx     #>$FAA6
-        sta     done+1
-        stx     done+2
-        rts
diff --git a/libsrc/apple2/revers.s b/libsrc/apple2/revers.s
deleted file mode 100644 (file)
index 83fcb2a..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 2005-03-28
-;
-; unsigned char __fastcall__ revers (unsigned char onoff)
-;
-
-        .export         _revers
-
-        .include        "apple2.inc"
-
-_revers:
-        tax                     ; Test onoff
-        beq     normal          ; If zero, "normal" must be set
-        ldx     #$3F+1          ; Set "inverse"
-normal: dex                     ; $00->$FF, $40->$3F
-        lda     #$00            ; Preload return code for "normal"
-        ldy     INVFLG          ; Load current flag value
-        stx     INVFLG          ; Save new flag value
-        bmi     :+              ; Jump if current value is $FF (normal)
-        lda     #$01            ; Return "inverse"
-:       ldx     #$00
-        rts
diff --git a/libsrc/apple2/rewinddir.c b/libsrc/apple2/rewinddir.c
deleted file mode 100644 (file)
index 3329852..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                               rewinddir.c                                 */
-/*                                                                           */
-/*                          Reset directory stream                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2005  Oliver Schmidt, <ol.sc@web.de>                                  */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <dirent.h>
-#include "dir.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void __fastcall__ rewinddir (register DIR* dir)
-{
-    /* Rewind directory file */
-    if (lseek (dir->fd, 0, SEEK_SET)) {
-
-        /* Read directory key block */
-        if (read (dir->fd,
-                  dir->block.bytes,
-                  sizeof (dir->block)) == sizeof (dir->block)) {
-
-            /* Skip directory header entry */
-            dir->current_entry = 1;
-
-            /* Return success */
-            return;
-        }
-    }
-
-    /* Assert that no subsequent readdir() finds an active entry */
-    memset (dir->block.bytes, 0, sizeof (dir->block));
-
-    /* Return failure */
-}
diff --git a/libsrc/apple2/rwcommon.s b/libsrc/apple2/rwcommon.s
deleted file mode 100644 (file)
index 3180a87..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-;
-; Oliver Schmidt, 12.01.2005
-;
-
-        .export         rwprolog, rwcommon, rwepilog
-        .import         popax
-
-        .include        "zeropage.inc"
-        .include        "errno.inc"
-        .include        "fcntl.inc"
-        .include        "mli.inc"
-        .include        "filedes.inc"
-
-rwprolog:
-        ; Save count
-        sta     ptr2
-        stx     ptr2+1
-
-        ; Get and save buf
-        jsr     popax
-        sta     ptr1
-        stx     ptr1+1
-
-        ; Get and process fd
-        jsr     popax
-        jmp     getfd           ; Returns A, Y and C
-
-rwcommon:
-        ; Set fd
-        sta     mliparam + MLI::RW::REF_NUM
-
-        ; Set buf
-        lda     ptr1
-        ldx     ptr1+1
-        sta     mliparam + MLI::RW::DATA_BUFFER
-        stx     mliparam + MLI::RW::DATA_BUFFER+1
-
-        ; Set count
-        lda     ptr2
-        ldx     ptr2+1
-        sta     mliparam + MLI::RW::REQUEST_COUNT
-        stx     mliparam + MLI::RW::REQUEST_COUNT+1
-
-        ; Call read or write
-        tya
-        ldx     #RW_COUNT
-        jsr     callmli
-        bcc     rwepilog
-        cmp     #$4C            ; "End of file encountered"
-        bne     oserr
-
-rwepilog:
-        ; Return success
-        sta     __oserror       ; A = 0
-        lda     mliparam + MLI::RW::TRANS_COUNT
-        ldx     mliparam + MLI::RW::TRANS_COUNT+1
-        rts
-
-        ; Set __oserror
-oserr:  jmp     __mappederrno
diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s
deleted file mode 100644 (file)
index d5c5671..0000000
+++ /dev/null
@@ -1,444 +0,0 @@
-;
-; Serial driver for the Apple II Super Serial Card.
-;
-; Oliver Schmidt, 21.04.2005
-;
-; The driver is based on the cc65 rs232 module, which in turn is based on
-; Craig Bruce device driver for the Switftlink/Turbo-232.
-;
-; SwiftLink/Turbo-232 v0.90 device driver, by Craig Bruce, 14-Apr-1998.
-;
-; This software is Public Domain.  It is in Buddy assembler format.
-;
-; This device driver uses the SwiftLink RS-232 Serial Cartridge, available from
-; Creative Micro Designs, Inc, and also supports the extensions of the Turbo232
-; Serial Cartridge.  Both devices are based on the 6551 ACIA chip.  It also
-; supports the "hacked" SwiftLink with a 1.8432 MHz crystal.
-;
-; The code assumes that the kernal + I/O are in context.  On the C128, call
-; it from Bank 15.  On the C64, don't flip out the Kernal unless a suitable
-; NMI catcher is put into the RAM under then Kernal.  For the SuperCPU, the
-; interrupt handling assumes that the 65816 is in 6502-emulation mode.
-;
-
-        .include        "zeropage.inc"
-        .include        "ser-kernel.inc"
-        .include        "ser-error.inc"
-
-        .macpack        module
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        .ifdef  __APPLE2ENH__
-        module_header   _a2e_ssc_ser
-        .else
-        module_header   _a2_ssc_ser
-        .endif
-
-        ; Driver signature
-        .byte   $73, $65, $72           ; "ser"
-        .byte   SER_API_VERSION         ; Serial API version number
-
-        ; Library reference
-        .addr   $0000
-
-        ; Jump table
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   OPEN
-        .addr   CLOSE
-        .addr   GET
-        .addr   PUT
-        .addr   STATUS
-        .addr   IOCTL
-        .addr   IRQ
-
-;----------------------------------------------------------------------------
-; I/O definitions
-
-ACIA            = $C088
-ACIA_DATA       = ACIA+0        ; Data register
-ACIA_STATUS     = ACIA+1        ; Status register
-ACIA_CMD        = ACIA+2        ; Command register
-ACIA_CTRL       = ACIA+3        ; Control register
-
-;----------------------------------------------------------------------------
-; Global variables
-
-        .bss
-
-RecvHead:       .res    1       ; Head of receive buffer
-RecvTail:       .res    1       ; Tail of receive buffer
-RecvFreeCnt:    .res    1       ; Number of bytes in receive buffer
-SendHead:       .res    1       ; Head of send buffer
-SendTail:       .res    1       ; Tail of send buffer
-SendFreeCnt:    .res    1       ; Number of bytes in send buffer
-
-Stopped:        .res    1       ; Flow-stopped flag
-RtsOff:         .res    1       ;
-
-RecvBuf:        .res    256     ; Receive buffers: 256 bytes
-SendBuf:        .res    256     ; Send buffers: 256 bytes
-
-Index:          .res    1       ; I/O register index
-
-        .data
-
-Slot:   .byte   $02             ; Default to SSC in slot 2
-
-        .rodata
-
-        ; Tables used to translate RS232 params into register values
-BaudTable:                      ; bit7 = 1 means setting is invalid
-        .byte   $FF             ; SER_BAUD_45_5
-        .byte   $01             ; SER_BAUD_50
-        .byte   $02             ; SER_BAUD_75
-        .byte   $03             ; SER_BAUD_110
-        .byte   $04             ; SER_BAUD_134_5
-        .byte   $05             ; SER_BAUD_150
-        .byte   $06             ; SER_BAUD_300
-        .byte   $07             ; SER_BAUD_600
-        .byte   $08             ; SER_BAUD_1200
-        .byte   $09             ; SER_BAUD_1800
-        .byte   $0A             ; SER_BAUD_2400
-        .byte   $0B             ; SER_BAUD_3600
-        .byte   $0C             ; SER_BAUD_4800
-        .byte   $0D             ; SER_BAUD_7200
-        .byte   $0E             ; SER_BAUD_9600
-        .byte   $0F             ; SER_BAUD_19200
-        .byte   $FF             ; SER_BAUD_38400
-        .byte   $FF             ; SER_BAUD_57600
-        .byte   $FF             ; SER_BAUD_115200
-        .byte   $FF             ; SER_BAUD_230400
-BitTable:
-        .byte   $60             ; SER_BITS_5
-        .byte   $40             ; SER_BITS_6
-        .byte   $20             ; SER_BITS_7
-        .byte   $00             ; SER_BITS_8
-StopTable:
-        .byte   $00             ; SER_STOP_1
-        .byte   $80             ; SER_STOP_2
-ParityTable:
-        .byte   $00             ; SER_PAR_NONE
-        .byte   $20             ; SER_PAR_ODD
-        .byte   $60             ; SER_PAR_EVEN
-        .byte   $A0             ; SER_PAR_MARK
-        .byte   $E0             ; SER_PAR_SPACE
-IdOfsTable:
-        .byte   $05             ; Pascal 1.0 ID byte
-        .byte   $07             ; Pascal 1.0 ID byte
-        .byte   $0B             ; Pascal 1.1 generic signature byte
-        .byte   $0C             ; Device signature byte
-IdValTable:
-        .byte   $38             ; Fixed
-        .byte   $18             ; Fixed
-        .byte   $01             ; Fixed
-        .byte   $31             ; Serial or parallel I/O card type 1
-
-IdTableLen      = * - IdValTable
-
-        .code
-
-;----------------------------------------------------------------------------
-; INSTALL: Is called after the driver is loaded into memory. If possible,
-; check if the hardware is present. Must return an SER_ERR_xx code in a/x.
-;
-; Since we don't have to manage the IRQ vector on the Apple II, this is
-; actually the same as:
-;
-; UNINSTALL: Is called before the driver is removed from memory.
-; No return code required (the driver is removed from memory on return).
-;
-; and:
-;
-; CLOSE: Close the port and disable interrupts. Called without parameters.
-; Must return an SER_ERR_xx code in a/x.
-
-INSTALL:
-UNINSTALL:
-CLOSE:
-        ldx     Index           ; Check for open port
-        beq     :+
-
-        ; Deactivate DTR and disable 6551 interrupts
-        lda     #%00001010
-        sta     ACIA_CMD,x
-
-        ; Done, return an error code
-:       lda     #<SER_ERR_OK
-        tax                     ; A is zero
-        stx     Index           ; Mark port as closed
-        rts
-
-;----------------------------------------------------------------------------
-; OPEN: A pointer to a ser_params structure is passed in ptr1.
-; Must return an SER_ERR_xx code in a/x.
-
-OPEN:   
-        ldx     #<$C000
-        stx     ptr2
-        lda     #>$C000
-        ora     Slot
-        sta     ptr2+1
-        
-        ; Check Pascal 1.1 Firmware Protocol ID bytes
-:       ldy     IdOfsTable,x
-        lda     IdValTable,x
-        cmp     (ptr2),y
-        bne     NoDevice
-        inx
-        cpx     #IdTableLen
-        bcc     :-
-        
-        ; Convert slot to I/O register index
-        lda     Slot
-        asl
-        asl
-        asl
-        asl
-        tax
-
-        ; Check if the handshake setting is valid
-        ldy     #SER_PARAMS::HANDSHAKE  ; Handshake
-        lda     (ptr1),y
-        cmp     #SER_HS_HW              ; This is all we support
-        bne     InvParam
-
-        ; Initialize buffers
-        ldy     #$00
-        sty     Stopped
-        sty     RecvHead
-        sty     RecvTail
-        sty     SendHead
-        sty     SendTail
-        dey                             ; Y = 255
-        sty     RecvFreeCnt
-        sty     SendFreeCnt
-
-        ; Set the value for the control register, which contains stop bits,
-        ; word length and the baud rate.
-        ldy     #SER_PARAMS::BAUDRATE
-        lda     (ptr1),y                ; Baudrate index
-        tay
-        lda     BaudTable,y             ; Get 6551 value
-        bmi     InvBaud                 ; Branch if rate not supported
-        sta     tmp1
-
-        ldy     #SER_PARAMS::DATABITS   ; Databits
-        lda     (ptr1),y
-        tay
-        lda     BitTable,y
-        ora     tmp1
-        sta     tmp1
-
-        ldy     #SER_PARAMS::STOPBITS   ; Stopbits
-        lda     (ptr1),y
-        tay
-        lda     StopTable,y
-        ora     tmp1
-        ora     #%00010000              ; Receiver clock source = baudrate
-        sta     ACIA_CTRL,x
-
-        ; Set the value for the command register. We remember the base value
-        ; in RtsOff, since we will have to manipulate ACIA_CMD often.
-        ldy     #SER_PARAMS::PARITY     ; Parity
-        lda     (ptr1),y
-        tay
-        lda     ParityTable,y
-        ora     #%00000001              ; DTR active
-        sta     RtsOff
-        ora     #%00001000              ; Enable receive interrupts
-        sta     ACIA_CMD,x
-
-        ; Done
-        stx     Index                   ; Mark port as open
-        lda     #<SER_ERR_OK
-        tax                             ; A is zero
-        rts
-
-        ; Device (hardware) not found
-NoDevice:lda    #<SER_ERR_NO_DEVICE
-        ldx     #>SER_ERR_NO_DEVICE
-        rts
-
-        ; Invalid parameter
-InvParam:lda    #<SER_ERR_INIT_FAILED
-        ldx     #>SER_ERR_INIT_FAILED
-        rts
-
-        ; Baud rate not available
-InvBaud:lda     #<SER_ERR_BAUD_UNAVAIL
-        ldx     #>SER_ERR_BAUD_UNAVAIL
-        rts
-
-;----------------------------------------------------------------------------
-; GET: Will fetch a character from the receive buffer and store it into the
-; variable pointed to by ptr1. If no data is available, SER_ERR_NO_DATA is
-; returned.
-
-GET:
-        ldx     Index
-        ldy     SendFreeCnt     ; Send data if necessary
-        iny                     ; Y == $FF?
-        beq     :+
-        lda     #$00            ; TryHard = false
-        jsr     TryToSend
-
-        ; Check for buffer empty
-:       lda     RecvFreeCnt     ; (25)
-        cmp     #$FF
-        bne     :+
-        lda     #<SER_ERR_NO_DATA
-        ldx     #>SER_ERR_NO_DATA
-        rts
-
-        ; Check for flow stopped & enough free: release flow control
-:       ldy     Stopped         ; (34)
-        beq     :+
-        cmp     #63
-        bcc     :+
-        lda     #$00
-        sta     Stopped
-        lda     RtsOff
-        ora     #%00001000
-        sta     ACIA_CMD,x
-
-        ; Get byte from buffer
-:       ldy     RecvHead        ; (41)
-        lda     RecvBuf,y
-        inc     RecvHead
-        inc     RecvFreeCnt
-        ldx     #$00            ; (59)
-        sta     (ptr1,x)
-        txa                     ; Return code = 0
-        rts
-
-;----------------------------------------------------------------------------
-; PUT: Output character in A.
-; Must return an SER_ERR_xx code in a/x.
-
-PUT:
-        ldx     Index
-
-        ; Try to send
-        ldy     SendFreeCnt
-        iny                     ; Y = $FF?
-        beq     :+
-        pha
-        lda     #$00            ; TryHard = false
-        jsr     TryToSend
-        pla
-
-        ; Put byte into send buffer & send
-:       ldy     SendFreeCnt
-        bne     :+
-        lda     #<SER_ERR_OVERFLOW
-        ldx     #>SER_ERR_OVERFLOW
-        rts
-
-:       ldy     SendTail
-        sta     SendBuf,y
-        inc     SendTail
-        dec     SendFreeCnt
-        lda     #$FF            ; TryHard = true
-        jsr     TryToSend
-        lda     #<SER_ERR_OK
-        tax
-        rts
-
-;----------------------------------------------------------------------------
-; STATUS: Return the status in the variable pointed to by ptr1.
-; Must return an SER_ERR_xx code in a/x.
-
-STATUS:
-        ldx     Index
-        lda     ACIA_STATUS,x
-        ldx     #$00
-        sta     (ptr1,x)
-        txa                     ; SER_ERR_OK
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
-; specific data in ptr1, and the ioctl code in A.
-; Must return an SER_ERR_xx code in a/x.
-
-IOCTL:
-        ; Check data msb and code to be 0
-        ora     ptr1+1
-        bne     :+
-
-        ; Check data lsb to be [1..7]
-        ldx     ptr1
-        beq     :+
-        cpx     #7+1
-        bcs     :+
-
-        stx     Slot
-        tax                     ; SER_ERR_OK
-        rts
-
-:       lda     #<SER_ERR_INV_IOCTL
-        ldx     #>SER_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; IRQ: Called from the builtin runtime IRQ handler as a subroutine. All
-; registers are already saved, no parameters are passed, but the carry flag
-; is clear on entry. The routine must return with carry set if the interrupt
-; was handled, otherwise with carry clear.
-
-IRQ:
-        ldx     Index           ; Check for open port
-        beq     Done
-        lda     ACIA_STATUS,x   ; Check ACIA status for receive interrupt
-        and     #$08
-        beq     Done            ; Jump if no ACIA interrupt
-        lda     ACIA_DATA,x     ; Get byte from ACIA
-        ldy     RecvFreeCnt     ; Check if we have free space left
-        beq     Flow            ; Jump if no space in receive buffer
-        ldy     RecvTail        ; Load buffer pointer
-        sta     RecvBuf,y       ; Store received byte in buffer
-        inc     RecvTail        ; Increment buffer pointer
-        dec     RecvFreeCnt     ; Decrement free space counter
-        ldy     RecvFreeCnt     ; Check for buffer space low
-        cpy     #33
-        bcc     Flow            ; Assert flow control if buffer space low
-        rts                     ; Interrupt handled (carry already set)
-
-        ; Assert flow control if buffer space too low
-Flow:   lda     RtsOff
-        sta     ACIA_CMD,x
-        sta     Stopped
-        sec                     ; Interrupt handled
-Done:   rts
-
-;----------------------------------------------------------------------------
-; Try to send a byte. Internal routine. A = TryHard
-
-TryToSend:
-        sta     tmp1            ; Remember tryHard flag
-Again:  lda     SendFreeCnt
-        cmp     #$FF
-        beq     Quit            ; Bail out
-
-        ; Check for flow stopped
-        lda     Stopped
-        bne     Quit            ; Bail out
-
-        ; Check that ACIA is ready to send
-        lda     ACIA_STATUS,x
-        and     #$10
-        bne     Send
-        bit     tmp1            ; Keep trying if must try hard  
-        bmi     Again
-Quit:   rts
-
-        ; Send byte and try again
-Send:   ldy     SendHead
-        lda     SendBuf,y
-        sta     ACIA_DATA,x
-        inc     SendHead
-        inc     SendFreeCnt
-        jmp     Again
diff --git a/libsrc/apple2/syschdir.s b/libsrc/apple2/syschdir.s
deleted file mode 100644 (file)
index 8afc3af..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-;
-; Oliver Schmidt, 17.04.2005
-;
-; unsigned char __fastcall__ _syschdir (const char* name);
-;
-
-        .export         __syschdir
-        .import         pushname, popname
-        .import         initcwd
-
-        .include        "zeropage.inc"
-        .include        "mli.inc"
-
-__syschdir:
-        ; Push name
-        jsr     pushname
-        bne     oserr
-
-        ; Set pushed name
-        lda     sp
-        ldx     sp+1
-        sta     mliparam + MLI::PREFIX::PATHNAME
-        stx     mliparam + MLI::PREFIX::PATHNAME+1
-
-        ; Change directory
-        lda     #SET_PREFIX_CALL
-        ldx     #PREFIX_COUNT
-        jsr     callmli
-        bcs     cleanup
-
-        ; Update current working directory
-        jsr     initcwd         ; Returns with A = 0
-
-        ; Cleanup name
-cleanup:jsr     popname         ; Preserves A
-
-oserr:  rts
diff --git a/libsrc/apple2/sysmkdir.s b/libsrc/apple2/sysmkdir.s
deleted file mode 100644 (file)
index 7759da2..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-;
-; Oliver Schmidt, 15.04.2005
-;
-; unsigned char _sysmkdir (const char* name, ...);
-;
-
-        .export         __sysmkdir
-        .import         pushname, popname
-        .import         addysp, popax
-
-        .include        "zeropage.inc"
-        .include        "mli.inc"
-
-__sysmkdir:
-        ; Throw away all parameters except the name
-        dey
-        dey
-        jsr     addysp
-
-        ; Get and push name
-        jsr     popax
-        jsr     pushname
-        bne     oserr
-
-        ; Set pushed name
-        lda     sp
-        ldx     sp+1
-        sta     mliparam + MLI::CREATE::PATHNAME
-        stx     mliparam + MLI::CREATE::PATHNAME+1
-
-        ; Set all other parameters from template
-        ldx     #(MLI::CREATE::CREATE_TIME+1) - (MLI::CREATE::PATHNAME+1) - 1
-:       lda     CREATE,x
-        sta     mliparam + MLI::CREATE::ACCESS,x
-        dex
-        bpl     :-
-
-        ; Make directory
-        lda     #CREATE_CALL
-        ldx     #CREATE_COUNT
-        jsr     callmli
-
-        ; Cleanup name
-        jsr     popname         ; Preserves A
-
-oserr:  rts
-
-        .rodata
-
-CREATE: .byte   %11000011       ; ACCESS:       Standard full access
-        .byte   $0F             ; FILE_TYPE:    Directory file
-        .word   $0000           ; AUX_TYPE:     N/A
-        .byte   $0D             ; STORAGE_TYPE: Linked directory file
-        .word   $0000           ; CREATE_DATE:  Current date
-        .word   $0000           ; CREATE_TIME:  Current time
diff --git a/libsrc/apple2/sysremove.s b/libsrc/apple2/sysremove.s
deleted file mode 100644 (file)
index 08c4dff..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-;
-; Oliver Schmidt, 15.04.2005
-;
-; unsigned char __fastcall__ _sysremove (const char* name);
-;
-
-        .export         __sysremove
-        .import         pushname, popname
-
-        .include        "zeropage.inc"
-        .include        "mli.inc"
-
-__sysremove:
-        ; Push name
-        jsr     pushname
-        bne     oserr
-
-        ; Set pushed name
-        lda     sp
-        ldx     sp+1
-        sta     mliparam + MLI::DESTROY::PATHNAME
-        stx     mliparam + MLI::DESTROY::PATHNAME+1
-
-        ; Remove file
-        lda     #DESTROY_CALL
-        ldx     #DESTROY_COUNT
-        jsr     callmli
-
-        ; Cleanup name
-        jsr     popname         ; Preserves A
-
-oserr:  rts
diff --git a/libsrc/apple2/sysrename.s b/libsrc/apple2/sysrename.s
deleted file mode 100644 (file)
index 0fe8dd7..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-;
-; Oliver Schmidt, 15.04.2005
-;
-; unsigned char __fastcall__ _sysrename (const char* oldname, const char* newname);
-;
-
-        .export         __sysrename
-        .import         pushname, popname
-        .import         popax
-
-        .include        "zeropage.inc"
-        .include        "mli.inc"
-
-__sysrename:
-        ; Save newname
-        sta     ptr2
-        stx     ptr2+1
-
-        ; Get and push oldname
-        jsr     popax
-        jsr     pushname
-        bne     oserr1
-
-        ; Save pushed oldname
-        lda     sp
-        ldx     sp+1
-        sta     ptr3
-        stx     ptr3+1
-
-        ; Restore and push newname
-        lda     ptr2
-        ldx     ptr2+1
-        jsr     pushname
-        bne     oserr2
-
-        ; Restore and set pushed oldname
-        lda     ptr3
-        ldx     ptr3+1
-        sta     mliparam + MLI::RENAME::PATHNAME
-        stx     mliparam + MLI::RENAME::PATHNAME+1
-
-        ; Set pushed newname
-        lda     sp
-        ldx     sp+1
-        sta     mliparam + MLI::RENAME::NEW_PATHNAME
-        stx     mliparam + MLI::RENAME::NEW_PATHNAME+1
-
-        ; Rename file
-        lda     #RENAME_CALL
-        ldx     #RENAME_COUNT
-        jsr     callmli
-
-        ; Cleanup newname
-        jsr     popname         ; Preserves A
-
-        ; Cleanup oldname
-oserr2: jmp     popname         ; Preserves A
-
-oserr1: rts
diff --git a/libsrc/apple2/sysrmdir.s b/libsrc/apple2/sysrmdir.s
deleted file mode 100644 (file)
index 11ac1f7..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Oliver Schmidt, 15.04.2005
-;
-; unsigned char __fastcall__ _sysrmdir (const char* name);
-;
-
-        .export         __sysrmdir
-        .import         __sysremove
-
-__sysrmdir := __sysremove
diff --git a/libsrc/apple2/systime.s b/libsrc/apple2/systime.s
deleted file mode 100644 (file)
index 9bf4fe9..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-;
-; Oliver Schmidt, 22.08.2006
-;
-; time_t _systime (void);
-; /* Similar to time(), but:
-; **   - Is not ISO C
-; **   - Does not take the additional pointer
-; **   - Does not set errno when returning -1
-; */
-;
-
-        .include        "time.inc"
-        .include        "zeropage.inc"
-        .include        "mli.inc"
-
-__systime:
-        ; Update time
-        lda     #GET_TIME_CALL
-        ldx     #GET_TIME_COUNT
-        jsr     callmli
-        bcs     err
-
-        lda     DATELO+1
-        lsr
-        php                     ; Save month msb
-        cmp     #70             ; Year < 70?
-        bcs     :+              ; No, leave alone
-        adc     #100            ; Move 19xx to 20xx
-:       sta     TM + tm::tm_year
-        lda     DATELO
-        tax                     ; Save day
-        plp                     ; Restore month msb
-        ror
-        lsr
-        lsr
-        lsr
-        lsr
-        beq     err             ; [1..12] allows for validity check
-        tay
-        dey                     ; Move [1..12] to [0..11]
-        sty     TM + tm::tm_mon
-        txa                     ; Restore day
-        and     #%00011111
-        sta     TM + tm::tm_mday
-
-        lda     TIMELO+1
-        sta     TM + tm::tm_hour
-        lda     TIMELO
-        sta     TM + tm::tm_min
-
-        lda     #<TM
-        ldx     #>TM
-        jmp     _mktime
-
-err:    lda     #$FF
-        tax
-        sta     sreg
-        sta     sreg+1
-        rts                     ; Return -1
-
-        .bss
-
-TM:     .tag    tm
diff --git a/libsrc/apple2/sysuname.s b/libsrc/apple2/sysuname.s
deleted file mode 100644 (file)
index cd41eac..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; unsigned char __fastcall__ _sysuname (struct utsname* buf);
-;
-
-        .export         __sysuname, utsdata
-
-        .import         utscopy
-
-        __sysuname = utscopy
-
-;--------------------------------------------------------------------------
-; Data. We define a fixed utsname struct here and just copy it.
-
-.rodata
-
-utsdata:
-        ; sysname
-        .asciiz         "cc65"
-
-        ; nodename
-        .asciiz         ""
-
-        ; release
-        .byte           ((.VERSION >> 8) & $0F) + '0'
-        .byte           '.'
-        .byte           ((.VERSION >> 4) & $0F) + '0'
-        .byte           $00
-
-        ; version
-        .byte           (.VERSION & $0F) + '0'
-        .byte           $00
-
-        ; machine
-        .asciiz         "Apple ]["
-
-
-
diff --git a/libsrc/apple2/targetutil/Makefile.inc b/libsrc/apple2/targetutil/Makefile.inc
deleted file mode 100644 (file)
index 105a532..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-DEPS += ../libwrk/$(TARGET)/loader.d
-
-../libwrk/$(TARGET)/loader.o: $(SRCDIR)/targetutil/loader.s | ../libwrk/$(TARGET)
-       $(ASSEMBLE_recipe)
-
-../targetutil/loader.system: ../libwrk/$(TARGET)/loader.o $(SRCDIR)/targetutil/loader.cfg | ../targetutil
-       $(LD65) -o $@ -C $(filter %.cfg,$^) $(filter-out %.cfg,$^)
-
-$(TARGET): ../targetutil/loader.system
diff --git a/libsrc/apple2/targetutil/loader.cfg b/libsrc/apple2/targetutil/loader.cfg
deleted file mode 100644 (file)
index ead1dca..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#################################################################################
-#                                                                               #
-# LOADER.SYSTEM - an Apple][ ProDOS 8 loader for cc65 programs (Oliver Schmidt) #
-#                                                                               #
-#################################################################################
-
-MEMORY {
-    MEMORY_2000: start = $2000, size = $0200, file = %O;
-    MEMORY_0300: start = $0300, size = $0100;
-}
-
-SEGMENTS {
-    CODE_2000: load = MEMORY_2000,                    type = ro;
-    DATA_2000: load = MEMORY_2000,                    type = rw;
-    CODE_0300: load = MEMORY_2000, run = MEMORY_0300, type = ro, define = yes;
-    DATA_0300: load = MEMORY_2000, run = MEMORY_0300, type = rw, define = yes;
-}
diff --git a/libsrc/apple2/targetutil/loader.s b/libsrc/apple2/targetutil/loader.s
deleted file mode 100644 (file)
index a6cc13c..0000000
+++ /dev/null
@@ -1,232 +0,0 @@
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;                                                                               ;
-; LOADER.SYSTEM - an Apple][ ProDOS 8 loader for cc65 programs (Oliver Schmidt) ;
-;                                                                               ;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-A1L             := $3C
-A1H             := $3D
-STACK           := $0100
-BUF             := $0200
-PATHNAME        := $0280
-MLI             := $BF00
-VERSION         := $FBB3
-RDKEY           := $FD0C
-PRBYTE          := $FDDA
-COUT            := $FDED
-
-QUIT_CALL          = $65
-GET_FILE_INFO_CALL = $C4
-OPEN_CALL          = $C8
-READ_CALL          = $CA
-CLOSE_CALL         = $CC
-FILE_NOT_FOUND_ERR = $46
-
-; ------------------------------------------------------------------------
-
-        .import __CODE_0300_SIZE__, __DATA_0300_SIZE__
-        .import __CODE_0300_LOAD__, __CODE_0300_RUN__
-
-; ------------------------------------------------------------------------
-
-        .segment        "DATA_2000"
-
-GET_FILE_INFO_PARAM:
-                .byte   $0A             ;PARAM_COUNT
-                .addr   PATHNAME        ;PATHNAME
-                .byte   $00             ;ACCESS
-                .byte   $00             ;FILE_TYPE
-FILE_INFO_ADDR: .word   $0000           ;AUX_TYPE
-                .byte   $00             ;STORAGE_TYPE
-                .word   $0000           ;BLOCKS_USED
-                .word   $0000           ;MOD_DATE
-                .word   $0000           ;MOD_TIME
-                .word   $0000           ;CREATE_DATE
-                .word   $0000           ;CREATE_TIME
-
-OPEN_PARAM:
-                .byte   $03             ;PARAM_COUNT
-                .addr   PATHNAME        ;PATHNAME
-                .addr   MLI - 1024      ;IO_BUFFER
-OPEN_REF:       .byte   $00             ;REF_NUM
-
-LOADING:
-                .byte   $0D
-                .asciiz "Loading "
-
-ELLIPSES:
-                .byte   " ...", $0D, $0D, $00
-
-; ------------------------------------------------------------------------
-
-        .segment        "DATA_0300"
-
-READ_PARAM:
-                .byte   $04             ;PARAM_COUNT
-READ_REF:       .byte   $00             ;REF_NUM
-READ_ADDR:      .addr   $0000           ;DATA_BUFFER
-                .word   $FFFF           ;REQUEST_COUNT
-                .word   $0000           ;TRANS_COUNT
-
-CLOSE_PARAM:
-                .byte   $01             ;PARAM_COUNT
-CLOSE_REF:      .byte   $00             ;REF_NUM
-
-QUIT_PARAM:
-                .byte   $04             ;PARAM_COUNT
-                .byte   $00             ;QUIT_TYPE
-                .word   $0000           ;RESERVED
-                .byte   $00             ;RESERVED
-                .word   $0000           ;RESERVED
-
-FILE_NOT_FOUND:
-                .asciiz "... File Not Found"
-
-ERROR_NUMBER:
-                .asciiz "... Error $"
-
-PRESS_ANY_KEY:
-                .asciiz " - Press Any Key "
-
-; ------------------------------------------------------------------------
-
-        .segment        "CODE_2000"
-
-        jmp     :+
-        .byte   $EE
-        .byte   $EE
-        .byte   $7F
-STARTUP:.res    $7F
-
-        ; Reset stack
-:       ldx     #$FF
-        txs
-
-        ; Relocate CODE_0300 and DATA_0300
-        ldx     #<(__CODE_0300_SIZE__ + __DATA_0300_SIZE__)
-:       lda     __CODE_0300_LOAD__-1,x
-        sta     __CODE_0300_RUN__-1,x
-        dex
-        bne     :-
-
-        ; Remove ".SYSTEM" from pathname
-        lda     PATHNAME
-        sec
-        sbc     #.strlen(".SYSTEM")
-        sta     PATHNAME
-
-        ; Add trailing '\0' to pathname
-        tax
-        lda     #$00
-        sta     PATHNAME+1,x
-
-        ; Copy ProDOS startup filename and trailing '\0' to stack
-        ldx     STARTUP
-        lda     #$00
-        beq     :++             ; Branch always
-:       lda     STARTUP+1,x
-:       sta     STACK,x
-        dex
-        bpl     :--
-
-        ; Provide some user feedback
-        lda     #<LOADING
-        ldx     #>LOADING
-        jsr     PRINT
-        lda     #<(PATHNAME+1)
-        ldx     #>(PATHNAME+1)
-        jsr     PRINT
-        lda     #<ELLIPSES
-        ldx     #>ELLIPSES
-        jsr     PRINT
-
-        jsr     MLI
-        .byte   GET_FILE_INFO_CALL
-        .word   GET_FILE_INFO_PARAM
-        bcc     :+
-        jmp     ERROR
-
-:       jsr     MLI
-        .byte   OPEN_CALL
-        .word   OPEN_PARAM
-        bcc     :+
-        jmp     ERROR
-
-        ; Copy file reference number
-:       lda     OPEN_REF
-        sta     READ_REF
-        sta     CLOSE_REF
-
-        ; Get load address from aux-type
-        lda     FILE_INFO_ADDR
-        ldx     FILE_INFO_ADDR+1
-        sta     READ_ADDR
-        stx     READ_ADDR+1
-
-        ; It's high time to leave this place
-        jmp     __CODE_0300_RUN__
-
-; ------------------------------------------------------------------------
-
-        .segment        "CODE_0300"
-
-        jsr     MLI
-        .byte   READ_CALL
-        .word   READ_PARAM
-        bcs     ERROR
-
-        jsr     MLI
-        .byte   CLOSE_CALL
-        .word   CLOSE_PARAM
-        bcs     ERROR
-
-        ; Copy REM and startup filename to BASIC input buffer
-        ldx     #$00
-        lda     #$B2            ; REM token
-        bne     :++             ; Branch always
-:       inx
-        lda     a:STACK-1,x
-:       sta     BUF,x
-        bne     :--
-
-        ; Go for it ...
-        jmp     (READ_ADDR)
-
-PRINT:
-        sta     A1L
-        stx     A1H
-        ldx     VERSION
-        ldy     #$00
-:       lda     (A1L),y
-        beq     :++
-        cpx     #$06            ; //e ?
-        beq     :+
-        cmp     #$60            ; lowercase ?
-        bcc     :+
-        and     #$5F            ; -> uppercase
-:       ora     #$80
-        jsr     COUT
-        iny
-        bne     :--             ; Branch always
-:       rts
-
-ERROR:
-        cmp     #FILE_NOT_FOUND_ERR
-        bne     :+
-        lda     #<FILE_NOT_FOUND
-        ldx     #>FILE_NOT_FOUND
-        jsr     PRINT
-        beq     :++             ; Branch always
-:       pha
-        lda     #<ERROR_NUMBER
-        ldx     #>ERROR_NUMBER
-        jsr     PRINT
-        pla
-        jsr     PRBYTE
-:       lda     #<PRESS_ANY_KEY
-        ldx     #>PRESS_ANY_KEY
-        jsr     PRINT
-        jsr     RDKEY
-        jsr     MLI
-        .byte   QUIT_CALL
-        .word   QUIT_PARAM
diff --git a/libsrc/apple2/textframe.s b/libsrc/apple2/textframe.s
deleted file mode 100644 (file)
index d5e9b80..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-;
-; Oliver Schmidt, 10.03.2004
-;
-; void __fastcall__ textframexy (unsigned char x, unsigned char y,
-;                                unsigned char width, unsigned char height,
-;                                unsigned char style);
-; void __fastcall__ textframe (unsigned char width, unsigned char height,
-;                              unsigned char style);
-;
-        .ifdef  __APPLE2ENH__
-
-        .export         _textframexy, _textframe
-        .import         popa, pusha, _gotoxy
-        .import         chlinedirect, cvlinedirect
-
-        .include        "zeropage.inc"
-        .include        "apple2.inc"
-
-WIDTH   = tmp2
-HEIGHT  = tmp3
-XORIGIN = tmp4
-YORIGIN = ptr1
-
-_textframexy:
-        sec
-        bra     :+
-
-_textframe:
-        clc
-:       ldx     INVFLG
-        phx                     ; Save character display mode
-        ldx     #$FF
-        stx     INVFLG          ; Set normal character display mode
-        pha                     ; Save index
-        jsr     popa            ; Get height
-        sta     HEIGHT
-        jsr     popa            ; Get width
-        sta     WIDTH
-        lda     CH
-        ldx     CV
-        bcc     noxy
-        jsr     popa            ; Get y
-        tax
-        jsr     popa            ; Get x
-noxy:   sta     XORIGIN
-        stx     YORIGIN
-        plx                     ; Restore index
-loop:   lda     XOFFS,x
-        clc
-        bpl     :+              ; Relative to left edge?
-        adc     WIDTH
-:       adc     XORIGIN
-        jsr     pusha
-        lda     YOFFS,x
-        clc
-        bpl     :+              ; Relative to top?
-        adc     HEIGHT
-:       adc     YORIGIN
-        jsr     _gotoxy         ; Call this one, will pop params
-        txa
-        tay
-        lsr                     ; Get bit 0 (vline) into carry
-        lda     LENGTH,x
-        phx                     ; Save index
-        ldx     CHAR,y
-        bcc     hline
-        clc
-        adc     HEIGHT
-        jsr     cvlinedirect
-        bra     next
-hline:  adc     WIDTH
-        jsr     chlinedirect
-next:   plx                     ; Restore index
-        inx
-        txa
-        and     #$03            ; Mask style
-        bne     loop
-        pla
-        sta     INVFLG          ; Restore character display mode
-        rts
-
-        .rodata
-
-; 2 styles with 4 lines each make up 8 entries per table
-; - even entry numbers mean horizontal lines
-; - odd entry numbers mean vertical lines
-
-; x offset for the line starting point
-; - a positive value means relative to the frame left edge
-; - a negative value menas relative to the frame right edge
-XOFFS:  .byte   0, 0, 0, <-2, 1, 0, 1, <-2
-
-; y offset for the line starting point
-; - a positive value means relative to the frame top
-; - a negative value menas relative to the frame bottom
-YOFFS:  .byte   0, 1, <-2, 1, 0, 0, <-2, 0
-
-; length of the line relative to the frame size
-; - a negative value for hlines means shorter than the width
-; - a negative value for vlines menas shorter than the height
-LENGTH: .byte   0, <-2, 0, <-2, <-2, 0, <-2, 0
-
-; character to use for drawing the line
-; - hibit set means normal printable character
-; - hibit clear means MouseText character
-CHAR:   .byte   '_'|$80, '_', 'L', 'Z', 'L', 'Z', '_'|$80, '_'
-
-        .endif                  ; __APPLE2ENH__
diff --git a/libsrc/apple2/tgi/a2.hi.fnt b/libsrc/apple2/tgi/a2.hi.fnt
deleted file mode 100644 (file)
index 5f23de5..0000000
Binary files a/libsrc/apple2/tgi/a2.hi.fnt and /dev/null differ
diff --git a/libsrc/apple2/tgi/a2.hi.s b/libsrc/apple2/tgi/a2.hi.s
deleted file mode 100644 (file)
index 18f5724..0000000
+++ /dev/null
@@ -1,452 +0,0 @@
-;
-; Graphics driver for the 280x192x8 mode on the Apple II
-;
-; Stefan Haubenthal <polluks@sdf.lonestar.org>
-; Oliver Schmidt <ol.sc@web.de>
-;
-
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-        .include        "apple2.inc"
-
-        .macpack        module
-
-; ------------------------------------------------------------------------
-
-; Zero page stuff
-
-HBASL   :=      $26
-HMASK   :=      $30
-PAGE    :=      $E6
-SCALE   :=      $E7
-ROT     :=      $F9
-
-; Graphics entry points, by cbmnut (applenut??) cbmnut@hushmail.com
-
-TEXT    :=      $F399   ; Return to text screen
-HGR2    :=      $F3D8   ; Initialize and clear hi-res page 2.
-HGR     :=      $F3E2   ; Initialize and clear hi-res page 1.
-HCLR    :=      $F3F2   ; Clear the current hi-res screen to black.
-BKGND   :=      $F3F6   ; Clear the current hi-res screen to the
-                        ; last plotted color (from ($1C).
-HPOSN   :=      $F411   ; Positions the hi-res cursor without
-                        ; plotting a point.
-                        ; Enter with (A) = Y-coordinate, and
-                        ; (Y,X) = X-coordinate.
-HPLOT   :=      $F457   ; Calls HPOSN and tries to plot a dot at
-                        ; the cursor's position.  If you are
-                        ; trying to plot a non-white color at
-                        ; a complementary color position, no
-                        ; dot will be plotted.
-HLIN    :=      $F53A   ; Draws a line from the last plotted
-                        ; point or line destination to:
-                        ; (X,A) = X-coordinate, and
-                        ; (Y) = Y-coordinate.
-HFIND   :=      $F5CB   ; Converts the hi-res coursor's position
-                        ; back to X- and Y-coordinates; stores
-                        ; X-coordinate at $E0,E1 and Y-coordinate
-                        ; at $E2.
-DRAW    :=      $F601   ; Draws a shape.  Enter with (Y,X) = the
-                        ; address of the shape table, and (A) =
-                        ; the rotation factor.  Uses the current
-                        ; color.
-XDRAW   :=      $F65D   ; Draws a shape by inverting the existing
-                        ; color of the dots the shape draws over.
-                        ; Same entry parameters as DRAW.
-SETHCOL :=      $F6EC   ; Set the hi-res color to (X), where (X)
-                        ; must be between 0 and 7.
-
-; ------------------------------------------------------------------------
-
-; Variables mapped to the zero page segment variables. Some of these are
-; used for passing parameters to the driver.
-
-X1      :=      ptr1
-Y1      :=      ptr2
-X2      :=      ptr3
-Y2      :=      ptr4
-
-; ------------------------------------------------------------------------
-
-        .ifdef  __APPLE2ENH__
-        module_header   _a2e_hi_tgi
-        .else
-        module_header   _a2_hi_tgi
-        .endif
-
-; Header. Includes jump table and constants.
-
-; First part of the header is a structure that has a magic and defines the
-; capabilities of the driver
-
-        .byte   $74, $67, $69   ; "tgi"
-        .byte   TGI_API_VERSION ; TGI API version number
-        .addr   $0000           ; Library reference
-        .word   280             ; X resolution
-        .word   192             ; Y resolution
-        .byte   8               ; Number of drawing colors
-pages:  .byte   2               ; Number of screens available
-        .byte   7               ; System font X size
-        .byte   8               ; System font Y size
-        .word   $00EA           ; Aspect ratio (based on 4/3 display)
-        .byte   0               ; TGI driver flags
-
-; Next comes the jump table. With the exception of IRQ, all entries must be
-; valid and may point to an RTS for test versions (function not implemented).
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   INIT
-        .addr   DONE
-        .addr   GETERROR
-        .addr   CONTROL
-        .addr   CLEAR
-        .addr   SETVIEWPAGE
-        .addr   SETDRAWPAGE
-        .addr   SETCOLOR
-        .addr   SETPALETTE
-        .addr   GETPALETTE
-        .addr   GETDEFPALETTE
-        .addr   SETPIXEL
-        .addr   GETPIXEL
-        .addr   LINE
-        .addr   BAR
-        .addr   TEXTSTYLE
-        .addr   OUTTEXT
-        .addr   0               ; IRQ entry is unused
-
-; ------------------------------------------------------------------------
-
-        .bss
-
-; Absolute variables used in the code
-
-ERROR:  .res    1               ; Error code
-
-; ------------------------------------------------------------------------
-
-        .rodata
-
-; Constants and tables
-
-DEFPALETTE: .byte $00, $01, $02, $03, $04, $05, $06, $07
-
-FONT:
-        ; Beagle Bros Shape Mechanic font F.ASCII.SMALL
-        ; modified to exactly reproduce the text glyphs
-        .incbin "a2.hi.fnt"
-
-; ------------------------------------------------------------------------
-
-        .code
-
-; INSTALL routine. Is called after the driver is loaded into memory. May
-; initialize anything that has to be done just once. Is probably empty
-; most of the time.
-; Must set an error code: NO
-INSTALL:
-        .ifdef  __APPLE2ENH__
-        ; No page switching if 80 column store is enabled
-        bit     RD80COL
-        bpl     :+
-        lda     #$01
-        sta     pages
-:       .endif
-
-        ; Fall through
-
-; UNINSTALL routine. Is called before the driver is removed from memory. May
-; clean up anything done by INSTALL but is probably empty most of the time.
-; Must set an error code: NO
-UNINSTALL:
-        rts
-
-; INIT: Changes an already installed device from text mode to graphics mode.
-; Note that INIT/DONE may be called multiple times while the driver
-; is loaded, while INSTALL is only called once, so any code that is needed
-; to initializes variables and so on must go here. Setting palette and
-; clearing the screen is not needed because this is called by the graphics
-; kernel later.
-; The graphics kernel will never call INIT when a graphics mode is already
-; active, so there is no need to protect against that.
-; Must set an error code: YES
-INIT:
-        ; Switch into graphics mode
-        bit     MIXCLR
-        bit     HIRES
-        bit     TXTCLR
-
-        ; Beagle Bros Shape Mechanic fonts don't
-        ; scale well so use fixed scaling factor
-        lda     #$01
-        sta     SCALE
-
-        ; Done, reset the error code
-        lda     #TGI_ERR_OK
-        sta     ERROR
-        rts
-
-; DONE: Will be called to switch the graphics device back into text mode.
-; The graphics kernel will never call DONE when no graphics mode is active,
-; so there is no need to protect against that.
-; Must set an error code: NO
-DONE:
-        ; Switch into text mode
-        bit     TXTSET
-        bit     LOWSCR
-
-        .ifdef  __APPLE2ENH__
-        ; Limit SET80COL-HISCR to text
-        bit     LORES
-        .endif
-
-        ; Reset the text window top
-        lda     #$00
-        sta     WNDTOP
-        rts
-
-; GETERROR: Return the error code in A and clear it.
-GETERROR:
-        lda     ERROR
-        ldx     #TGI_ERR_OK
-        stx     ERROR
-        rts
-
-; CONTROL: Platform/driver specific entry point.
-; Must set an error code: YES
-CONTROL:
-        ; Check data msb and code to be 0
-        ora     ptr1+1
-        bne     err
-
-        ; Check data lsb to be [0..1]
-        lda     ptr1
-        cmp     #1+1
-        bcs     err
-
-        ; Set text window top
-        tax
-        beq     :+
-        lda     #20
-:       sta     WNDTOP
-
-        ; Switch 4 lines of text
-        .assert MIXCLR + 1 = MIXSET, error
-        lda     MIXCLR,x        ; No BIT absolute,X available
-
-        ; Done, reset the error code
-        lda     #TGI_ERR_OK
-        beq     :+              ; Branch always
-
-        ; Done, set the error code
-err:    lda     #TGI_ERR_INV_ARG
-:       sta     ERROR
-        rts
-
-; CLEAR: Clears the screen.
-; Must set an error code: NO
-CLEAR:
-        bit     $C082           ; Switch in ROM
-        jsr     HCLR
-        bit     $C080           ; Switch in LC bank 2 for R/O
-        rts
-
-; SETVIEWPAGE: Set the visible page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-; Must set an error code: NO (will only be called if page ok)
-SETVIEWPAGE:
-        tax
-        .assert LOWSCR + 1 = HISCR, error
-        lda     LOWSCR,x        ; No BIT absolute,X available
-        rts
-
-; SETDRAWPAGE: Set the drawable page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-; Must set an error code: NO (will only be called if page ok)
-SETDRAWPAGE:
-        tax
-        beq     :+
-        lda     #>$4000         ; Page 2
-        .byte   $2C             ; BIT absolute
-:       lda     #>$2000         ; Page 1
-        sta     PAGE
-        rts
-
-; SETCOLOR: Set the drawing color (in A). The new color is already checked
-; to be in a valid range (0..maxcolor-1).
-; Must set an error code: NO (will only be called if color ok)
-SETCOLOR:
-        bit     $C082           ; Switch in ROM
-        tax
-        jsr     SETHCOL
-        bit     $C080           ; Switch in LC bank 2 for R/O
-        rts
-
-; SETPALETTE: Set the palette (not available with all drivers/hardware).
-; A pointer to the palette is passed in ptr1. Must set an error if palettes
-; are not supported
-; Must set an error code: YES
-SETPALETTE:
-        lda     #TGI_ERR_INV_FUNC
-        sta     ERROR
-        rts
-
-; GETPALETTE: Return the current palette in A/X. Even drivers that cannot
-; set the palette should return the default palette here, so there's no
-; way for this function to fail.
-; Must set an error code: NO
-GETPALETTE:
-        ; Fall through
-
-; GETDEFPALETTE: Return the default palette for the driver in A/X. All
-; drivers should return something reasonable here, even drivers that don't
-; support palettes, otherwise the caller has no way to determine the colors
-; of the (not changeable) palette.
-; Must set an error code: NO (all drivers must have a default palette)
-GETDEFPALETTE:
-        lda     #<DEFPALETTE
-        ldx     #>DEFPALETTE
-        rts
-
-; SETPIXEL: Draw one pixel at X1/Y1 = ptr1/ptr2 with the current drawing
-; color. The coordinates passed to this function are never outside the
-; visible screen area, so there is no need for clipping inside this function.
-; Must set an error code: NO
-SETPIXEL:
-        bit     $C082           ; Switch in ROM
-        ldx     X1
-        ldy     X1+1
-        lda     Y1
-        jsr     HPLOT
-        bit     $C080           ; Switch in LC bank 2 for R/O
-        rts
-
-; GETPIXEL: Read the color value of a pixel and return it in A/X. The
-; coordinates passed to this function are never outside the visible screen
-; area, so there is no need for clipping inside this function.
-GETPIXEL:
-        bit     $C082           ; Switch in ROM
-        ldx     X1
-        ldy     X1+1
-        lda     Y1
-        jsr     HPOSN
-        lda     (HBASL),y
-        and     HMASK
-        asl
-        beq     :+              ; 0 (black)
-        lda     #$03            ; 3 (white)
-:       bcc     :+
-        adc     #$03            ; += 4 (black -> black2, white -> white2)
-:       ldx     #$00
-        bit     $C080           ; Switch in LC bank 2 for R/O
-        rts
-
-; LINE: Draw a line from X1/Y1 to X2/Y2, where X1/Y1 = ptr1/ptr2 and
-; X2/Y2 = ptr3/ptr4 using the current drawing color.
-; Must set an error code: NO
-LINE:
-        bit     $C082           ; Switch in ROM
-        ldx     X1
-        ldy     X1+1
-        lda     Y1
-        jsr     HPOSN
-        lda     X2
-        ldx     X2+1
-        ldy     Y2
-        jsr     HLIN
-        bit     $C080           ; Switch in LC bank 2 for R/O
-        rts
-
-; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where
-; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4 using the current drawing color.
-; Contrary to most other functions, the graphics kernel will sort and clip
-; the coordinates before calling the driver, so on entry the following
-; conditions are valid:
-;       X1 <= X2
-;       Y1 <= Y2
-;       (X1 >= 0) && (X1 < XRES)
-;       (X2 >= 0) && (X2 < XRES)
-;       (Y1 >= 0) && (Y1 < YRES)
-;       (Y2 >= 0) && (Y2 < YRES)
-; Must set an error code: NO
-BAR:
-        inc     Y2
-:       lda     Y2
-        pha
-        lda     Y1
-        sta     Y2
-        jsr     LINE
-        pla
-        sta     Y2
-        inc     Y1
-        cmp     Y1
-        bne     :-
-        rts
-
-; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scaling in X and Y
-; direction is passend in X/Y, the text direction is passed in A.
-; Must set an error code: NO
-TEXTSTYLE:
-        cmp     #TGI_TEXT_VERTICAL
-        bne     :+
-        lda     #48
-:       sta     ROT
-        rts
-
-; OUTTEXT: Output text at X/Y = ptr1/ptr2 using the current color and the
-; current text style. The text to output is given as a zero terminated
-; string with address in ptr3.
-; Must set an error code: NO
-OUTTEXT:
-        bit     $C082           ; Switch in ROM
-        lda     X1
-        ldy     X1+1
-        ldx     ROT
-        php                     ; Save Z flag
-        beq     :+              ; Not horizontal
-        sec
-        sbc     #$07            ; Adjust X
-        bcs     :+
-        dey
-:       tax
-        lda     Y1
-        plp                     ; Restore Z flag
-        bne     :+              ; Not vertical
-        sec
-        sbc     #$07            ; Adjust Y
-:       jsr     HPOSN
-        clc
-        lda     FONT+2*99       ; "connection char"
-        adc     #<FONT
-        sta     ptr4
-        lda     FONT+2*99+1     ; "connection char"
-        adc     #>FONT
-        sta     ptr4+1
-        ldy     #$00
-:       lda     (ptr3),y
-        beq     :+
-        sty     tmp1            ; Save string index
-        sec
-        sbc     #$1F            ; No control chars
-        asl                     ; Offset * 2
-        tay
-        clc
-        lda     FONT,y
-        adc     #<FONT
-        tax
-        lda     FONT+1,y
-        adc     #>FONT
-        tay
-        lda     ROT
-        jsr     DRAW            ; Draw char from string
-        ldx     ptr4
-        ldy     ptr4+1
-        lda     ROT
-        jsr     DRAW            ; Draw "connection char"
-        ldy     tmp1            ; Restore string index
-        iny
-        bne     :-              ; Branch always
-:       bit     $C080           ; Switch in LC bank 2 for R/O
-        rts
diff --git a/libsrc/apple2/tgi/a2.lo.s b/libsrc/apple2/tgi/a2.lo.s
deleted file mode 100644 (file)
index 045b004..0000000
+++ /dev/null
@@ -1,354 +0,0 @@
-;
-; Graphics driver for the 40x48x16 mode on the Apple II
-;
-; Stefan Haubenthal <polluks@sdf.lonestar.org>
-; Oliver Schmidt <ol.sc@web.de>
-;
-
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-        .include        "apple2.inc"
-
-        .macpack        module
-
-; ------------------------------------------------------------------------
-
-; Zero page stuff
-
-H2      :=      $2C
-COLOR   :=      $30
-
-; ROM entry points
-
-TEXT    :=      $F399
-PLOT    :=      $F800
-HLINE   :=      $F819
-CLRSC2  :=      $F838
-SETCOL  :=      $F864
-SCRN    :=      $F871
-SETGR   :=      $FB40
-HOME    :=      $FC58
-
-; Used for passing parameters to the driver
-
-X1      :=      ptr1
-Y1      :=      ptr2
-X2      :=      ptr3
-Y2      :=      ptr4
-
-; ------------------------------------------------------------------------
-
-        .ifdef  __APPLE2ENH__
-        module_header   _a2e_lo_tgi
-        .else
-        module_header   _a2_lo_tgi
-        .endif
-
-; Header. Includes jump table and constants.
-
-; First part of the header is a structure that has a magic and defines the
-; capabilities of the driver
-
-        .byte   $74, $67, $69   ; "tgi"
-        .byte   TGI_API_VERSION ; TGI API version number
-        .addr   $0000           ; Library reference
-        .word   40              ; X resolution
-        .word   48              ; Y resolution
-        .byte   16              ; Number of drawing colors
-        .byte   1               ; Number of screens available
-        .byte   8               ; System font X size
-        .byte   8               ; System font Y size
-        .word   $0198           ; Aspect ratio (based on 4/3 display)
-        .byte   0               ; TGI driver flags
-
-; Next comes the jump table. With the exception of IRQ, all entries must be
-; valid and may point to an RTS for test versions (function not implemented).
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   INIT
-        .addr   DONE
-        .addr   GETERROR
-        .addr   CONTROL
-        .addr   CLEAR
-        .addr   SETVIEWPAGE
-        .addr   SETDRAWPAGE
-        .addr   SETCOLOR
-        .addr   SETPALETTE
-        .addr   GETPALETTE
-        .addr   GETDEFPALETTE
-        .addr   SETPIXEL
-        .addr   GETPIXEL
-        .addr   LINE
-        .addr   BAR
-        .addr   TEXTSTYLE
-        .addr   OUTTEXT
-        .addr   0               ; IRQ entry is unused
-
-; ------------------------------------------------------------------------
-
-        .bss
-
-ERROR:  .res    1               ; Error code
-MIX:    .res    1               ; 4 lines of text
-
-; ------------------------------------------------------------------------
-
-        .rodata
-
-DEFPALETTE: .byte $00, $01, $02, $03, $04, $05, $06, $07
-            .byte $08, $09, $0A, $0B, $0C, $0D, $0E, $0F
-
-TGI2COL:    .byte $00, $0C, $03, $0F, $01, $09, $06, $02
-            .byte $04, $05, $07, $08, $0A, $0B, $0D, $0E
-
-COL2TGI:    .byte $00, $04, $07, $02, $08, $09, $06, $0A
-            .byte $0B, $05, $0C, $0D, $01, $0E, $0F, $03
-
-MAXY:   .byte 47, 39
-
-; ------------------------------------------------------------------------
-
-        .code
-
-; INIT: Changes an already installed device from text mode to graphics mode.
-; Note that INIT/DONE may be called multiple times while the driver
-; is loaded, while INSTALL is only called once, so any code that is needed
-; to initializes variables and so on must go here. Setting palette and
-; clearing the screen is not needed because this is called by the graphics
-; kernel later.
-; The graphics kernel will never call INIT when a graphics mode is already
-; active, so there is no need to protect against that.
-; Must set an error code: YES
-INIT:
-        ; Switch into graphics mode
-        bit     $C082           ; Switch in ROM
-        jsr     SETGR
-        bit     MIXCLR
-        bit     $C080           ; Switch in LC bank 2 for R/O
-
-        ; Done, reset the error code
-        lda     #TGI_ERR_OK
-        sta     ERROR
-        sta     MIX
-
-        ; Fall through
-
-; INSTALL routine. Is called after the driver is loaded into memory. May
-; initialize anything that has to be done just once. Is probably empty
-; most of the time.
-; Must set an error code: NO
-INSTALL:
-        ; Fall through
-
-; UNINSTALL routine. Is called before the driver is removed from memory. May
-; clean up anything done by INSTALL but is probably empty most of the time.
-; Must set an error code: NO
-UNINSTALL:
-        ; Fall through
-
-; SETVIEWPAGE: Set the visible page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-; Must set an error code: NO (will only be called if page ok)
-SETVIEWPAGE:
-        ; Fall through
-
-; SETDRAWPAGE: Set the drawable page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-; Must set an error code: NO (will only be called if page ok)
-SETDRAWPAGE:
-        ; Fall through
-
-; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scaling in X and Y
-; direction is passend in X/Y, the text direction is passed in A.
-; Must set an error code: NO
-TEXTSTYLE:
-        ; Fall through
-
-; OUTTEXT: Output text at X/Y = ptr1/ptr2 using the current color and the
-; current text style. The text to output is given as a zero terminated
-; string with address in ptr3.
-; Must set an error code: NO
-OUTTEXT:
-        rts
-
-; DONE: Will be called to switch the graphics device back into text mode.
-; The graphics kernel will never call DONE when no graphics mode is active,
-; so there is no need to protect against that.
-; Must set an error code: NO
-DONE:
-        bit     $C082           ; Switch in ROM
-        jsr     TEXT
-        jsr     HOME
-        bit     $C080           ; Switch in LC bank 2 for R/O
-        rts
-
-; GETERROR: Return the error code in A and clear it.
-GETERROR:
-        lda     ERROR
-        ldx     #TGI_ERR_OK
-        stx     ERROR
-        rts
-
-; CLEAR: Clears the screen.
-; Must set an error code: NO
-CLEAR:
-        bit     $C082           ; Switch in ROM
-        lda     COLOR           ; Save current drawing color
-        pha
-        ldx     MIX
-        ldy     MAXY,x          ; Max Y depends on 4 lines of text
-        jsr     CLRSC2
-        pla
-        sta     COLOR           ; Restore current drawing color
-        bit     $C080           ; Switch in LC bank 2 for R/O
-        rts
-
-; SETCOLOR: Set the drawing color (in A). The new color is already checked
-; to be in a valid range (0..maxcolor-1).
-; Must set an error code: NO (will only be called if color ok)
-SETCOLOR:
-        bit     $C082           ; Switch in ROM
-        tax
-        lda     TGI2COL,x
-        jsr     SETCOL
-        bit     $C080           ; Switch in LC bank 2 for R/O
-        rts
-
-; CONTROL: Platform/driver specific entry point.
-; Must set an error code: YES
-CONTROL:
-        ; Check data msb and code to be 0
-        ora     ptr1+1
-        bne     err
-
-        ; Check data lsb to be [0..1]
-        lda     ptr1
-        cmp     #1+1
-        bcs     err
-        bit     $C082           ; Switch in ROM
-
-        ; Switch 4 lines of text
-        tax
-        .assert MIXCLR + 1 = MIXSET, error
-        lda     MIXCLR,x        ; No BIT absolute,X available
-
-        ; Save current switch setting
-        txa
-        sta     MIX
-        bne     text
-
-        ; Clear 8 lines of graphics
-        lda     COLOR           ; Save current drawing color
-        pha
-        lda     #39             ; Rightmost column
-        sta     H2
-        ldx     #40             ; First line
-:       txa
-        ldy     #$00            ; Leftmost column
-        sty     COLOR           ; Black
-        jsr     HLINE           ; Preserves X
-        inx
-        cpx     #47+1           ; Last line
-        bcc     :-
-        pla
-        sta     COLOR           ; Restore current drawing color
-        bcs     :+              ; Branch always
-
-        ; Clear 4 lines of text
-text:   jsr     HOME
-:       bit     $C080           ; Switch in LC bank 2 for R/O
-
-        ; Done, reset the error code
-        lda     #TGI_ERR_OK
-        beq     :+              ; Branch always
-
-        ; Done, set the error code
-err:    lda     #TGI_ERR_INV_ARG
-:       sta     ERROR
-        rts
-
-; SETPALETTE: Set the palette (not available with all drivers/hardware).
-; A pointer to the palette is passed in ptr1. Must set an error if palettes
-; are not supported
-; Must set an error code: YES
-SETPALETTE:
-        lda     #TGI_ERR_INV_FUNC
-        sta     ERROR
-        rts
-
-; GETPALETTE: Return the current palette in A/X. Even drivers that cannot
-; set the palette should return the default palette here, so there's no
-; way for this function to fail.
-; Must set an error code: NO
-GETPALETTE:
-        ; Fall through
-
-; GETDEFPALETTE: Return the default palette for the driver in A/X. All
-; drivers should return something reasonable here, even drivers that don't
-; support palettes, otherwise the caller has no way to determine the colors
-; of the (not changeable) palette.
-; Must set an error code: NO (all drivers must have a default palette)
-GETDEFPALETTE:
-        lda     #<DEFPALETTE
-        ldx     #>DEFPALETTE
-        rts
-
-; SETPIXEL: Draw one pixel at X1/Y1 = ptr1/ptr2 with the current drawing
-; color. The coordinates passed to this function are never outside the
-; visible screen area, so there is no need for clipping inside this function.
-; Must set an error code: NO
-SETPIXEL:
-        bit     $C082           ; Switch in ROM
-        ldy     X1
-        lda     Y1
-        jsr     PLOT
-        bit     $C080           ; Switch in LC bank 2 for R/O
-        rts
-
-; GETPIXEL: Read the color value of a pixel and return it in A/X. The
-; coordinates passed to this function are never outside the visible screen
-; area, so there is no need for clipping inside this function.
-GETPIXEL:
-        bit     $C082           ; Switch in ROM
-        ldy     X1
-        lda     Y1
-        jsr     SCRN
-        tax
-        lda     COL2TGI,x
-        ldx     #$00
-        bit     $C080           ; Switch in LC bank 2 for R/O
-        rts
-
-; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where
-; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4 using the current drawing color.
-; Contrary to most other functions, the graphics kernel will sort and clip
-; the coordinates before calling the driver, so on entry the following
-; conditions are valid:
-;       X1 <= X2
-;       Y1 <= Y2
-;       (X1 >= 0) && (X1 < XRES)
-;       (X2 >= 0) && (X2 < XRES)
-;       (Y1 >= 0) && (Y1 < YRES)
-;       (Y2 >= 0) && (Y2 < YRES)
-; Must set an error code: NO
-BAR:
-        bit     $C082           ; Switch in ROM
-        lda     X2
-        sta     H2
-        inc     Y2
-        ldx     Y1
-:       txa
-        ldy     X1
-        jsr     HLINE           ; Preserves X
-        inx
-        cpx     Y2
-        bcc     :-
-        bit     $C080           ; Switch in LC bank 2 for R/O
-        rts
-
-; ------------------------------------------------------------------------
-
-.include        "../../tgi/tgidrv_line.inc"
diff --git a/libsrc/apple2/tgi_colors.s b/libsrc/apple2/tgi_colors.s
deleted file mode 100644 (file)
index 53505b3..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-;
-; Target-specific black & white values for use by the target-shared TGI kernel
-;
-
-        .include        "tgi-kernel.inc"
-
-        .export         tgi_color_black:zp = $00
-        .export         tgi_color_white:zp = $03
diff --git a/libsrc/apple2/tgi_stat_stddrv.s b/libsrc/apple2/tgi_stat_stddrv.s
deleted file mode 100644 (file)
index 9fc1ca9..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Address of the static standard tgi driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void tgi_static_stddrv[];
-;
-
-        .export _tgi_static_stddrv
-        .ifdef  __APPLE2ENH__
-        .import _a2e_hi_tgi
-        .else
-        .import _a2_hi_tgi
-        .endif
-
-.rodata
-
-        .ifdef  __APPLE2ENH__
-_tgi_static_stddrv := _a2e_hi_tgi
-        .else
-_tgi_static_stddrv := _a2_hi_tgi
-        .endif
diff --git a/libsrc/apple2/tgi_stddrv.s b/libsrc/apple2/tgi_stddrv.s
deleted file mode 100644 (file)
index 451b4c2..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Name of the standard tgi driver
-;
-; Oliver Schmidt, 2011-05-02
-;
-; const char tgi_stddrv[];
-;
-
-        .export _tgi_stddrv
-
-.rodata
-
-_tgi_stddrv:
-        .ifdef  __APPLE2ENH__
-        .asciiz "A2E.HI.TGI"
-        .else
-        .asciiz "A2.HI.TGI"
-        .endif
diff --git a/libsrc/apple2/toascii.s b/libsrc/apple2/toascii.s
deleted file mode 100644 (file)
index a3f946e..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; unsigned char __fastcall__ toascii (unsigned char c);
-; /* Convert a target specific character to ascii */
-;
-
-        .export         _toascii
-
-_toascii:
-        ldx     #$00
-        rts
diff --git a/libsrc/apple2/videomode.s b/libsrc/apple2/videomode.s
deleted file mode 100644 (file)
index 1da9974..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-;
-; Oliver Schmidt, 07.09.2009
-;
-; unsigned __fastcall__ videomode (unsigned mode);
-;
-        .ifdef  __APPLE2ENH__
-
-        .export         _videomode
-        .import         COUT
-
-        .include        "apple2.inc"
-
-        .segment        "LOWCODE"
-
-_videomode:
-        ; Get and save current videomode flag
-        bit     RD80VID
-        php
-        
-        ; If we are in 80 column mode then the 80 column firmware is
-        ; known to be active so we can just print the ctrl-char code
-        ; (even if this only means staying in the current videomode)
-        bpl     :+
-        jsr     COUT
-        bra     done
-
-        ; If we are in 40 column mode and want to set 40 column mode
-        ; then we explicitly do nothing as we neither know about the
-        ; current state of the 80 column firmware nor want to fix it
-:       cmp     #$11            ; Ctrl-char code for 40 cols
-        beq     done
-        
-        ; If we are in 40 column mode and want to set 80 column mode
-        ; then we first presume the 80 column firmware being already
-        ; active and print the ctrl-char code (this causes a garbage
-        ; char to be printed on the screen if isn't already active)
-        jsr     COUT
-        
-        ; If we successfully switched to 80 column mode then the 80
-        ; column firmware was in fact already active and we're done
-        bit     RD80VID
-        bmi     done
-        
-        ; The 80 column firmware isn't already active so we need to
-        ; initialize it - causing the screen to be cleared and thus
-        ; the garbage char printed above to be erased (but for some
-        ; reason the cursor horizontal position not to be zeroed)
-        stz     CH
-
-        ; Initializing the 80 column firmware needs the ROM switched
-        ; in, otherwise it would copy the F8 ROM to the LC (@ $CEF4)
-        bit     $C082
-
-        ; Initialize 80 column firmware
-        jsr     $C300           ; PR#3
-
-        ; Switch in LC bank 2 for R/O
-        bit     $C080
-                
-        ; Return ctrl-char code for setting previous
-        ; videomode using the saved videomode flag
-done:   lda     #$11            ; Ctrl-char code for 40 cols
-        plp
-        bpl     :+
-        lda     #$12            ; Ctrl-char code for 80 cols
-:       rts                     ; X was preserved all the way
-
-        .endif                  ; __APPLE2ENH__
diff --git a/libsrc/apple2/vtabz.s b/libsrc/apple2/vtabz.s
deleted file mode 100644 (file)
index 31de544..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Oliver Schmidt, 03.03.2007
-;
-; VTABZ routine
-;
-
-        .export         VTABZ
-
-        .include        "apple2.inc"
-
-        .segment        "LOWCODE"
-
-VTABZ:
-        ; Switch in ROM and call VTABZ
-        bit     $C082
-        jsr     $FC24           ; Generate text base address
-
-        ; Switch in LC bank 2 and return
-        bit     $C080
-        rts
diff --git a/libsrc/apple2/wherex.s b/libsrc/apple2/wherex.s
deleted file mode 100644 (file)
index bd717a2..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Kevin Ruland
-;
-; unsigned char wherex (void);
-;
-
-        .export         _wherex
-
-        .include        "apple2.inc"
-
-_wherex:
-        lda     CH
-        ldx     #$00
-        rts
diff --git a/libsrc/apple2/wherey.s b/libsrc/apple2/wherey.s
deleted file mode 100644 (file)
index daacaab..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Kevin Ruland
-;
-; unsigned char wherey (void);
-;
-
-        .export         _wherey
-
-        .include        "apple2.inc"
-
-_wherey:
-        lda     CV
-        sec
-        sbc     WNDTOP
-        ldx     #$00
-        rts
diff --git a/libsrc/apple2/write.s b/libsrc/apple2/write.s
deleted file mode 100644 (file)
index 21f4a45..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-;
-; Oliver Schmidt, 12.01.2005
-;
-; int __fastcall__ write (int fd, const void* buf, unsigned count);
-;
-
-        .export         _write
-        .import         rwprolog, rwcommon, rwepilog
-        .import         COUT
-
-        .include        "zeropage.inc"
-        .include        "errno.inc"
-        .include        "fcntl.inc"
-        .include        "mli.inc"
-        .include        "filedes.inc"
-
-_write:
-        ; Get parameters
-        jsr     rwprolog
-        bcs     errno
-        tax                     ; Save fd
-
-        ; Check for write access
-        lda     fdtab + FD::FLAGS,y
-        and     #O_WRONLY
-        beq     einval
-
-        ; Check for device
-        txa                     ; Restore fd
-        bmi     device
-
-        ; Check for append flag
-        lda     fdtab + FD::FLAGS,y
-        and     #O_APPEND
-        beq     write
-
-        ; Set fd
-        stx     mliparam + MLI::EOF::REF_NUM
-
-        ; Get file size
-        lda     #GET_EOF_CALL
-        ldx     #EOF_COUNT
-        jsr     callmli
-        bcs     oserr
-
-        ; REF_NUM already set
-        .assert MLI::MARK::REF_NUM = MLI::EOF::REF_NUM, error
-
-        ; POSITION already set
-        .assert MLI::MARK::POSITION = MLI::EOF::EOF, error
-
-        ; Set file pointer
-        lda     #SET_MARK_CALL
-        ldx     #MARK_COUNT
-        jsr     callmli
-        bcs     oserr
-
-        ; Do write
-write:  lda     fdtab + FD::REF_NUM,y
-        ldy     #WRITE_CALL
-        jmp     rwcommon
-
-        ; Save count for epilog
-device: ldx     ptr2
-        lda     ptr2+1
-        stx     mliparam + MLI::RW::TRANS_COUNT
-        sta     mliparam + MLI::RW::TRANS_COUNT+1
-
-        ; Check for zero count
-        ora     ptr2
-        beq     done
-
-        ; Get char from buf
-        ldy     #$00
-next:   lda     (ptr1),y
-
-        ; Replace '\n' with '\r'
-        cmp     #$0A
-        bne     :+
-        lda     #$0D
-
-        ; Set hi bit and write to device
-:       ora     #$80
-        .ifndef __APPLE2ENH__
-        cmp     #$E0            ; Test for lowercase
-        bcc     output
-        and     #$DF            ; Convert to uppercase
-        .endif
-output: jsr     COUT            ; Preserves X and Y
-
-        ; Increment pointer
-        iny
-        bne     :+
-        inc     ptr1+1
-
-        ; Decrement count
-:       dex
-        bne     next
-        dec     ptr2+1
-        bpl     next
-
-        ; Return success
-done:   lda     #$00
-        jmp     rwepilog
-
-        ; Load errno code
-einval: lda     #EINVAL
-
-        ; Set __errno
-errno:  jmp     __directerrno
-
-        ; Set __oserror
-oserr:  jmp     __mappederrno
-                                                          
diff --git a/libsrc/atari/Makefile.inc b/libsrc/atari/Makefile.inc
deleted file mode 100644 (file)
index 4488ddf..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-# NUMDRVS        - number of supported drives (max. 16)
-#                  4 bytes for each device are statically allocated
-# LINEBUF        - support line buffered reads from E: (the number specifies
-#                  the length of the buffer)
-# UCASE_FILENAME - all filenames get uppercased
-# DEFAULT_DEVICE - if the string passed to the uppercase function doesn't
-#                  include a device (":" at position 2 or 3), provide "Dn:"
-#                  as a default disk device
-#                  n is the value of DEFAULT_DEVICE, unless DYNAMIC_DD is
-#                  also set, in which case it's overridden by a runtime
-#                  check (on SpartaDOS only)
-#                  needs UCASE_FILENAME to be defined, otherwise no effect
-# DYNAMIC_DD     - determine default disk device at runtime (SpartaDOS only)
-#                  needs DEFAULT_DEVICE to be defined, otherwise no effect
-
-CA65FLAGS += -D NUMDRVS=4 -D LINEBUF=80 -D UCASE_FILENAME=1 -D DEFAULT_DEVICE=1 -D DYNAMIC_DD=1
-
-# The following defines are only used by the 'atarixl' target:
-#
-# CHARGEN_RELOC  - If defined, CHBAS and CHBASE are updated when
-#                  enabling or disabling the ROM.
-#                  If the ROM is enabled, $E0 is written to CHBAS
-#                  and CHBASE.
-#                  If the ROM is disabled, the upper byte of
-#                  __CHARGEN_START__ is written to CHBAS and CHBASE.
-# USEWSYNC       - If defined, the code waits for horizontal retrace
-#                  before switching the ROM and updating CHBAS and
-#                  CHBASE. This define only has effect if CHARGEN_RELOC
-#                  is also defined.
-
-# Disabled by default, you should enable it if the linker script relocates the
-# character generator (like atarixl-largehimem.cfg).
-#CA65FLAGS += -D CHARGEN_RELOC -D USEWSYNC
-
-# Disable if you don't want to use page 6 for mouse P/M data.
-# If disabled, top of the RAM is used for P/M data.
-CA65FLAGS += -D USE_PAGE6
diff --git a/libsrc/atari/_scrsize.s b/libsrc/atari/_scrsize.s
deleted file mode 100644 (file)
index c827ba3..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; Screen size variables
-;
-
-        .export         screensize
-        .include        "atari.inc"
-
-.proc   screensize
-
-        ldx     RMARGN
-        inx
-        ldy     #24
-        rts
-
-.endproc
-
-
diff --git a/libsrc/atari/_sys.s b/libsrc/atari/_sys.s
deleted file mode 100644 (file)
index 66e4905..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Christian Groessler, 17-Sep-2013
-;
-; Override _sys() function for Atari targets:
-;   'atari'    gets the regular function
-;   'atarixl'  doesn't support the _sys() function
-;
-
-.ifndef __ATARIXL__
-
-.include "../common/_sys.s"
-
-.endif
diff --git a/libsrc/atari/break.s b/libsrc/atari/break.s
deleted file mode 100644 (file)
index a53ed98..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-;
-; Christian Groessler, 27-Feb-2000
-;
-; void set_brk (unsigned Addr);
-; void reset_brk (void);
-;
-
-        .export         _set_brk, _reset_brk
-        .destructor     _reset_brk
-        .export         _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
-
-        .include        "atari.inc"
-
-
-.bss
-_brk_a:         .res    1
-_brk_x:         .res    1
-_brk_y:         .res    1
-_brk_sr:        .res    1
-_brk_pc:        .res    2
-
-oldvec:         .res    2               ; Old vector
-
-
-.data
-uservec:        jmp     $FFFF           ; Patched at runtime
-
-
-.code
-
-; Set the break vector
-.proc   _set_brk
-
-        sta     uservec+1
-        stx     uservec+2       ; Set the user vector
-
-        lda     oldvec
-        ora     oldvec+1        ; Did we save the vector already?
-        bne     L1              ; Jump if we installed the handler already
-
-        lda     VBREAK
-        sta     oldvec
-        lda     VBREAK+1
-        sta     oldvec+1        ; Save the old vector
-
-L1:     lda     #<brk_handler   ; Set the break vector to our routine
-        sta     VBREAK
-        lda     #>brk_handler
-        sta     VBREAK+1
-        rts
-
-.endproc
-
-
-; Reset the break vector
-.proc   _reset_brk
-
-        lda     oldvec
-        ldx     oldvec+1
-        beq     @L9             ; Jump if vector not installed
-        sta     VBREAK
-        stx     VBREAK+1
-        lda     #$00
-        sta     oldvec          ; Clear the old vector
-        stx     oldvec+1
-@L9:    rts     
-
-.endproc
-
-
-
-; Break handler, called if a break occurs
-
-.proc   brk_handler
-
-        sty     _brk_y
-        stx     _brk_x
-        pla
-        sta     _brk_a
-        pla
-        and     #$EF            ; Clear break bit
-        sta     _brk_sr
-        pla                     ; PC low
-        sec
-        sbc     #2              ; Point to start of brk
-        sta     _brk_pc
-        pla                     ; PC high
-        sbc     #0
-        sta     _brk_pc+1
-
-        jsr     uservec         ; Call the user's routine
-
-        lda     _brk_pc+1
-        pha
-        lda     _brk_pc
-        pha
-        lda     _brk_sr
-        pha
-        ldx     _brk_x
-        ldy     _brk_y
-        lda     _brk_a
-        rti                     ; Jump back...
-
-.endproc
-
-
diff --git a/libsrc/atari/carthdr.s b/libsrc/atari/carthdr.s
deleted file mode 100644 (file)
index fedd36a..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-; Cartridge "header"
-; (In fact, it's at the end of the cartridge, so more a "trailer".)
-;
-; Christian Groessler, 06-Jan-2014
-
-.ifndef __ATARIXL__
-
-.export         __CART_HEADER__: absolute = 1
-
-.import         __CARTSIZE__, __CARTFLAGS__, cartinit, cartstart
-
-.include        "atari.inc"
-
-.segment        "CARTHDR"
-
-                .word   cartstart       ; start routine
-                .byte   0               ; must be zero
-                .byte   <__CARTFLAGS__
-                .word   cartinit        ; init routine
-
-.assert         (__CARTSIZE__ = $2000 || __CARTSIZE__ = $4000), error, "Cartridge size must either be $2000 or $4000"
-
-.endif  ; .ifndef __ATARIXL__
diff --git a/libsrc/atari/cartinit.s b/libsrc/atari/cartinit.s
deleted file mode 100644 (file)
index d3035d6..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-; Cartridge init routine
-;
-; Christian Groessler, 06-Jan-2014
-
-.ifndef __ATARIXL__
-
-.export         cartinit
-
-cartinit:       rts
-
-.endif  ; .ifndef __ATARIXL__
diff --git a/libsrc/atari/cartstart.s b/libsrc/atari/cartstart.s
deleted file mode 100644 (file)
index a30ab79..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-; Cartridge start routine
-;
-; Christian Groessler, 06-Jan-2014
-
-.ifndef __ATARIXL__
-
-.export         cartstart
-
-.import         start, copydata
-
-.include        "atari.inc"
-
-; start routine of cartridge
-; copy data segment to RAM and chain to entry point of crt0.s
-
-cartstart:      jsr     copydata
-                jsr     start                   ; run program
-                jmp     (DOSVEC)                ; return to DOS
-
-.endif  ; .ifndef __ATARIXL__
diff --git a/libsrc/atari/cashdr.s b/libsrc/atari/cashdr.s
deleted file mode 100644 (file)
index 99aefe6..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-;
-; Cassette boot file header
-;
-; Christian Groessler, chris@groessler.org, 2014
-;
-
-;DEBUG   = 1
-
-.ifndef __ATARIXL__
-
-        .include "atari.inc"
-
-        .import __BSS_RUN__, __STARTADDRESS__, _cas_init
-        .export _cas_hdr
-
-.assert ((__BSS_RUN__ - __STARTADDRESS__ + 127) / 128) < $101, error, "File to big to load from cassette"
-
-
-; for a description of the cassette header, see De Re Atari, appendix C
-
-.segment        "CASHDR"
-
-_cas_hdr:
-        .byte   0                       ; ignored
-        .byte   <((__BSS_RUN__ - __STARTADDRESS__ + 127) / 128)         ; # of 128-byte records to read
-        .word   __STARTADDRESS__        ; load address
-        .word   _cas_init               ; init address
-
-.ifdef  DEBUG
-        lda     #33
-        ldy     #80
-        sta     (SAVMSC),y
-.endif
-        clc
-        rts
-
-.endif  ; .ifdef __ATARIXL__
diff --git a/libsrc/atari/casinit.s b/libsrc/atari/casinit.s
deleted file mode 100644 (file)
index c91989a..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-;
-; Cassette boot file init routine
-;
-; Christian Groessler, chris@groessler.org, 2014
-;
-
-;DEBUG   = 1
-
-.ifndef __ATARIXL__
-
-        .include "atari.inc"
-
-        .import start
-        .export _cas_init
-
-.segment        "INIT"
-
-_cas_init:
-.ifdef  DEBUG
-        lda     #34
-        ldy     #81
-        sta     (SAVMSC),y
-.endif
-
-        lda     #<start
-        sta     DOSVEC
-        lda     #>start
-        sta     DOSVEC+1
-        rts
-
-.endif  ; .ifdef __ATARIXL__
diff --git a/libsrc/atari/cclear.s b/libsrc/atari/cclear.s
deleted file mode 100644 (file)
index ceb17ac..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void cclearxy (unsigned char x, unsigned char y, unsigned char length);
-; void cclear (unsigned char length);
-;
-
-        .export         _cclearxy, _cclear
-        .import         popa, _gotoxy, cputdirect
-        .importzp       tmp1
-
-_cclearxy:
-        pha                     ; Save the length
-        jsr     popa            ; Get y
-        jsr     _gotoxy         ; Call this one, will pop params
-        pla                     ; Restore the length and run into _cclear
-
-_cclear:
-        cmp     #0              ; Is the length zero?
-        beq     L9              ; Jump if done
-        sta     tmp1                                 
-L1:     lda     #0              ; Blank - screen code
-        jsr     cputdirect      ; Direct output
-        dec     tmp1
-        bne     L1
-L9:     rts
-
-
-
-
diff --git a/libsrc/atari/cgetc.s b/libsrc/atari/cgetc.s
deleted file mode 100644 (file)
index 2e9ebcb..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-;
-; Christian Groessler, November-2002
-;
-; get a char from the keyboard
-; char cgetc(void)
-;
-
-        .include "atari.inc"
-        .export _cgetc,setcursor
-        .import KEYBDV_handler
-        .import cursor,mul40
-
-_cgetc:
-        jsr     setcursor
-        lda     #12
-        sta     ICAX1Z          ; fix problems with direct call to KEYBDV
-.ifdef __ATARIXL__
-        jsr     KEYBDV_handler
-.else
-        jsr     @1
-.endif
-        ldx     #0
-        rts
-
-.ifndef __ATARIXL__
-@1:     lda     KEYBDV+5
-        pha
-        lda     KEYBDV+4
-        pha
-        rts
-.endif
-
-.proc   setcursor
-
-        ldy     #0
-        lda     OLDCHR
-        sta     (OLDADR),y
-
-        lda     ROWCRS
-        jsr     mul40
-        clc
-        adc     SAVMSC          ; add start of screen memory
-        sta     OLDADR
-        txa
-        adc     SAVMSC+1
-        sta     OLDADR+1
-        lda     COLCRS
-        adc     OLDADR
-        sta     OLDADR
-        bcc     nc
-        inc     OLDADR+1
-nc:     lda     (OLDADR),y
-        sta     OLDCHR
-
-        ldx     cursor          ; current cursor setting as requested by the user
-        beq     off
-        ldx     #0
-        beq     cont
-
-off:    inx
-cont:   stx     CRSINH          ; update system variable
-
-        beq     turnon
-        and     #$7f            ; clear high bit / inverse flag
-finish: sta     (OLDADR),y      ; update on-screen display
-        rts
-
-turnon: ora     #$80            ; set high bit / inverse flag
-        bne     finish
-
-.endproc
diff --git a/libsrc/atari/chline.s b/libsrc/atari/chline.s
deleted file mode 100644 (file)
index a096f35..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void chlinexy (unsigned char x, unsigned char y, unsigned char length);
-; void chline (unsigned char length);
-;
-
-        .export         _chlinexy, _chline
-        .import         popa, _gotoxy, cputdirect, setcursor
-        .importzp       tmp1
-
-.ifdef __ATARI5200__
-CHRCODE =       14
-.else
-CHRCODE =       $12+64
-.endif
-
-_chlinexy:
-        pha                     ; Save the length
-        jsr     popa            ; Get y
-        jsr     _gotoxy         ; Call this one, will pop params
-        pla                     ; Restore the length
-
-_chline:
-        cmp     #0              ; Is the length zero?
-        beq     L9              ; Jump if done
-        sta     tmp1
-L1:     lda     #CHRCODE        ; Horizontal line, screen code
-        jsr     cputdirect      ; Direct output
-        dec     tmp1
-        bne     L1
-L9:     jmp     setcursor
diff --git a/libsrc/atari/clock.s b/libsrc/atari/clock.s
deleted file mode 100644 (file)
index e04416c..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-;
-; Piotr Fusik, 04.11.2001
-; originally by Ullrich von Bassewitz and Sidney Cadot
-;
-; clock_t clock (void);
-; unsigned _clocks_per_sec (void);
-;
-
-        .export         _clock, __clocks_per_sec
-        .importzp       sreg
-
-        .include        "atari.inc"
-
-
-.proc   _clock
-
-        ldx     #5              ; Synchronize with Antic, so the interrupt won't change RTCLOK
-        stx     WSYNC           ; while we're reading it. The synchronization is done same as
-@L1:    dex                     ; in SETVBLV function in Atari OS.
-        bne     @L1
-        stx     sreg+1          ; Byte 3 is always zero
-        lda     RTCLOK+2
-        ldx     RTCLOK+1
-        ldy     RTCLOK
-        sty     sreg
-        rts
-
-.endproc
-
-
-.proc   __clocks_per_sec
-
-        ldx     #$00            ; Clear high byte of return value
-        lda     PAL             ; use hw register, PALNTS is only supported on XL/XE ROM
-        and     #$0e
-        bne     @NTSC
-        lda     #50
-        rts
-@NTSC:  lda     #60
-        rts
-
-.endproc
diff --git a/libsrc/atari/close.s b/libsrc/atari/close.s
deleted file mode 100644 (file)
index d18fbec..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-;
-; Christian Groessler, May-2000
-;
-; int __fastcall__ close(int fd);
-;
-
-        .include "atari.inc"
-        .export _close
-        .import __do_oserror,popax,__oserror
-        .import fdtoiocb_down,__inviocb
-
-.proc   _close
-        jsr     fdtoiocb_down           ; get iocb index into X and decr. usage count
-        bmi     inverr
-        bne     ok                      ; not last one -> don't close yet
-        lda     #CLOSE
-        sta     ICCOM,x
-        jsr     CIOV
-        bmi     closerr
-ok:     ldx     #0
-        stx     __oserror               ; clear system specific error code
-        txa
-        rts
-
-inverr: jmp     __inviocb
-closerr:jmp     __do_oserror
-
-.endproc
-
diff --git a/libsrc/atari/clrscr.s b/libsrc/atari/clrscr.s
deleted file mode 100644 (file)
index 483cd04..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-;
-; Christian Groessler, Apr-2000
-;
-; void clrscr (void);
-;
-
-        .export         _clrscr
-        .include        "atari.inc"
-        .importzp       ptr1
-        .import         setcursor
-
-SCRSIZE =       960             ; 40x24: size of default atari screen
-
-_clrscr:lda     SAVMSC          ; screen memory
-        sta     ptr1
-        lda     SAVMSC+1
-        clc
-        adc     #>(SCRSIZE-1)
-        sta     ptr1+1
-        lda     #0              ; screen code of space char
-        sta     OLDCHR
-        ldy     #<(SCRSIZE-1)
-        ldx     #>(SCRSIZE-1)
-_clr1:  sta     (ptr1),y
-        dey
-        bne     _clr1
-        sta     (ptr1),y
-        dex
-        bmi     done
-        dec     ptr1+1
-        dey
-        jmp     _clr1
-
-done:   sta     COLCRS
-        sta     ROWCRS
-        jmp     setcursor
diff --git a/libsrc/atari/color.s b/libsrc/atari/color.s
deleted file mode 100644 (file)
index 57d0036..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-;
-; Christian Groessler, 27-Dec-2002
-;
-
-        .export         _textcolor, _bgcolor, _bordercolor
-        .import         return1
-
-        .include        "atari.inc"
-
-
-_textcolor      =       return1
-
-_bgcolor:
-        ldx     COLOR2  ; get old value
-        sta     COLOR2  ; set new value
-        and     #$0e
-        cmp     #8
-        bcs     bright
-        lda     #$0e
-        .byte   $2c     ; bit opcode, eats the next 2 bytes
-bright: lda     #0
-        sta     COLOR1
-        txa
-        ldx     #0      ; fix X
-        rts
-
-
-_bordercolor:
-        ldx     COLOR4  ; get old value
-        sta     COLOR4  ; set new value
-        txa
-        ldx     #0      ; fix X
-        rts
-
diff --git a/libsrc/atari/cputc.s b/libsrc/atari/cputc.s
deleted file mode 100644 (file)
index cd2aefe..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-;
-; Mark Keates, Christian Groessler
-;
-; void cputcxy (unsigned char x, unsigned char y, char c);
-; void cputc (char c);
-;
-
-        .export         _cputcxy, _cputc
-        .export         plot, cputdirect, putchar
-        .import         popa, _gotoxy, mul40
-        .importzp       tmp4,ptr4
-        .import         _revflag,setcursor
-
-        .include        "atari.inc"
-
-_cputcxy:
-        pha                     ; Save C
-        jsr     popa            ; Get Y
-        jsr     _gotoxy         ; Set cursor, drop x
-        pla                     ; Restore C
-
-_cputc:
-        cmp     #$0D            ; CR
-        bne     L4
-        lda     #0
-        sta     COLCRS
-        beq     plot            ; return
-
-L4:     cmp     #$0A            ; LF
-        beq     newline
-        cmp     #ATEOL          ; Atari-EOL?
-        beq     newline
-
-        tay
-        rol     a
-        rol     a
-        rol     a
-        rol     a
-        and     #3
-        tax
-        tya
-        and     #$9f
-        ora     ataint,x
-
-cputdirect:                     ; accepts screen code
-        jsr     putchar
-
-; advance cursor
-        inc     COLCRS
-        lda     COLCRS
-        cmp     #40
-        bcc     plot
-        lda     #0
-        sta     COLCRS
-
-        .export newline
-newline:
-        inc     ROWCRS
-        lda     ROWCRS
-        cmp     #24
-        bne     plot
-        lda     #0
-        sta     ROWCRS
-plot:   jsr     setcursor
-        ldy     COLCRS
-        ldx     ROWCRS
-        rts
-
-; turn off cursor, update screen, turn on cursor
-putchar:
-        pha                     ; save char
-
-        ldy     #0
-        lda     OLDCHR
-        sta     (OLDADR),y
-
-        lda     ROWCRS
-        jsr     mul40           ; destroys tmp4
-        clc
-        adc     SAVMSC          ; add start of screen memory
-        sta     ptr4
-        txa
-        adc     SAVMSC+1
-        sta     ptr4+1
-        pla                     ; get char again
-
-        ora     _revflag
-        sta     OLDCHR
-
-        ldy     COLCRS
-        sta     (ptr4),y
-        jmp     setcursor
-
-        .rodata
-ataint: .byte   64,0,32,96
diff --git a/libsrc/atari/crt0.s b/libsrc/atari/crt0.s
deleted file mode 100644 (file)
index 0ea6e39..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-;
-; Startup code for cc65 (ATARI version)
-;
-; Contributing authors:
-;       Mark Keates
-;       Freddy Offenga
-;       Christian Groessler
-;       Stefan Haubenthal
-;
-
-        .export         __STARTUP__ : absolute = 1      ; Mark as startup
-        .export         _exit, start
-
-        .import         initlib, donelib
-        .import         callmain, zerobss
-        .import         __RESERVED_MEMORY__
-        .import         __RAM_START__, __RAM_SIZE__
-.ifdef __ATARIXL__
-        .import         __STACKSIZE__
-        .import         sram_init
-        .import         scrdev
-        .import         findfreeiocb
-        .forceimport    sramprep                        ; force inclusion of the "shadow RAM preparation" load chunk
-        .include        "save_area.inc"
-.endif
-
-        .include        "zeropage.inc"
-        .include        "atari.inc"
-
-; ------------------------------------------------------------------------
-
-.segment        "STARTUP"
-
-        rts     ; fix for SpartaDOS / OS/A+
-                ; They first call the entry point from AUTOSTRT; and
-                ; then, the load address (this rts here).
-                ; We point AUTOSTRT directly after the rts.
-
-; Real entry point:
-
-start:
-
-.ifdef __ATARIXL__
-        jsr     sram_init
-.endif
-
-; Clear the BSS data.
-
-        jsr     zerobss
-
-; Set up the stack.
-
-        tsx
-        stx     SP_save
-
-.ifdef __ATARIXL__
-
-        lda     #<(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
-        sta     sp
-        lda     #>(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
-        sta     sp+1
-
-.else
-
-; Report the memory usage.
-
-        lda     APPMHI
-        sta     APPMHI_save             ; remember old APPMHI value
-        lda     APPMHI+1
-        sta     APPMHI_save+1
-
-        sec
-        lda     MEMTOP
-        sbc     #<__RESERVED_MEMORY__
-        sta     APPMHI                  ; initialize our APPMHI value
-        sta     sp                      ; set up runtime stack part 1
-        lda     MEMTOP+1
-        sbc     #>__RESERVED_MEMORY__
-        sta     APPMHI+1
-        sta     sp+1                    ; set up runtime stack part 2
-
-.endif
-
-; Call the module constructors.
-
-        jsr     initlib
-
-; Set the left margin to 0.
-
-        lda     LMARGN
-        sta     LMARGN_save
-        ldy     #0
-        sty     LMARGN
-
-; Set the keyboard to upper-/lower-case mode.
-
-        ldx     SHFLOK
-        stx     SHFLOK_save
-        sty     SHFLOK
-
-; Initialize the conio stuff.
-
-        dey                     ; Set Y to $FF
-        sty     CH              ; remove keypress which might be in the input buffer
-
-; Push the command-line arguments; and, call main().
-
-        jsr     callmain
-
-; Call the module destructors. This is also the exit() entry.
-
-_exit:  jsr     donelib         ; Run module destructors
-
-; Restore the system stuff.
-
-        ldx     SP_save
-        txs                     ; Restore stack pointer
-
-; Restore the left margin.
-
-        lda     LMARGN_save
-        sta     LMARGN
-
-; Restore the kb mode.
-
-        lda     SHFLOK_save
-        sta     SHFLOK
-
-; Restore APPMHI.
-
-        lda     APPMHI_save
-        sta     APPMHI
-        lda     APPMHI_save+1
-        sta     APPMHI+1
-
-.ifdef __ATARIXL__
-
-; Atari XL target stuff...
-
-        lda     PORTB_save
-        sta     PORTB
-        lda     RAMTOP_save
-        sta     RAMTOP
-        lda     MEMTOP_save
-        sta     MEMTOP
-        lda     MEMTOP_save+1
-        sta     MEMTOP+1
-
-
-; Issue a GRAPHICS 0 call (copied'n'pasted from the TGI drivers), in
-; order to restore screen memory to its default location just
-; before the ROM.
-
-        jsr     findfreeiocb
-
-        ; Reopen it in Graphics 0
-        lda     #OPEN
-        sta     ICCOM,x
-        lda     #OPNIN | OPNOT
-        sta     ICAX1,x
-        lda     #0
-        sta     ICAX2,x
-        lda     #<scrdev
-        sta     ICBAL,x
-        lda     #>scrdev
-        sta     ICBAH,x
-        lda     #3
-        sta     ICBLL,x
-        lda     #0
-        sta     ICBLH,x
-        jsr     CIOV_org
-; No error checking here, shouldn't happen(TM); and, no way to
-; recover anyway.
-
-        lda     #CLOSE
-        sta     ICCOM,x
-        jsr     CIOV_org
-
-.endif
-
-; Turn on the cursor.
-
-        ldx     #0
-        stx     CRSINH
-
-; Back to DOS.
-
-        rts
-
-; *** end of main startup code
-
-; ------------------------------------------------------------------------
-
-.bss
-
-SP_save:        .res    1
-SHFLOK_save:    .res    1
-LMARGN_save:    .res    1
-.ifndef __ATARIXL__
-APPMHI_save:    .res    2
-.endif
diff --git a/libsrc/atari/ctype.s b/libsrc/atari/ctype.s
deleted file mode 100644 (file)
index 73553dc..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-;
-; Ullrich von Bassewitz, 02.06.1998
-;
-; Character specification table.
-;
-; adapted to Atari by Christian Groessler, June 2000
-;
-
-; The tables are readonly, put them into the rodata segment
-
-.rodata
-
-; The following 256 byte wide table specifies attributes for the isxxx type
-; of functions. Doing it by a table means some overhead in space, but it
-; has major advantages:
-;
-;   * It is fast. If it were'nt for the slow parameter passing of cc65, one
-;     could even define macros for the isxxx functions (this is usually
-;     done on other platforms).
-;
-;   * It is highly portable. The only unportable part is the table itself,
-;     all real code goes into the common library.
-;
-;   * We save some code in the isxxx functions.
-;
-;
-; Bit assignments:
-;
-;   0 - Lower case char
-;   1 - Upper case char
-;   2 - Numeric digit
-;   3 - Hex digit (both, lower and upper)
-;   4 - Control character
-;   5 - The space character itself
-;   6 - Other whitespace (that is: '\f', '\n', '\r', '\t' and '\v')
-;   7 - Space or tab character
-
-        .export         __ctype
-
-__ctype:
-        .byte   $00     ;   0/00 ___heart____
-        .byte   $00     ;   1/01 ___l_tee____
-        .byte   $00     ;   2/02 ___ctrl_B___
-        .byte   $00     ;   3/03 ___ctrl_C___
-        .byte   $00     ;   4/04 ___r_tee____
-        .byte   $00     ;   5/05 ___ctrl_E___
-        .byte   $00     ;   6/06 ___ctrl_F___
-        .byte   $00     ;   7/07 ___ctrl_G___
-        .byte   $00     ;   8/08 ___ctrl_H___
-        .byte   $00     ;   9/09 ___ctrl_I___
-        .byte   $00     ;  10/0a ___ctrl_J___
-        .byte   $00     ;  11/0b ___ctrl_K___
-        .byte   $00     ;  12/0c ___ctrl_L___
-        .byte   $00     ;  13/0d ___ctrl_M___
-        .byte   $00     ;  14/0e ___ctrl_N___
-        .byte   $00     ;  15/0f ___ctrl_O___
-        .byte   $00     ;  16/10 ____club____
-        .byte   $00     ;  17/11 ___ctrl_Q___
-        .byte   $00     ;  18/12 ___h_line___
-        .byte   $00     ;  19/13 ___ctrl_S___
-        .byte   $00     ;  20/14 ____ball____
-        .byte   $00     ;  21/15 ___ctrl_U___
-        .byte   $00     ;  22/16 ___ctrl_V___
-        .byte   $00     ;  23/17 ___t_tee____
-        .byte   $00     ;  24/18 ___b_tee____
-        .byte   $00     ;  25/19 ___ctrl_Y___
-        .byte   $00     ;  26/1a ___ctrl_Z___
-        .byte   $10     ;  27/1b ____ESC_____
-        .byte   $10     ;  28/1c ___crsr_up__
-        .byte   $10     ;  29/1d ___crsr_dn__
-        .byte   $10     ;  30/1e ___crsr_lf__
-        .byte   $10     ;  31/1f ___crsr_rg__
-        .byte   $A0     ;  32/20 ___SPACE___
-        .byte   $00     ;  33/21 _____!_____
-        .byte   $00     ;  34/22 _____"_____
-        .byte   $00     ;  35/23 _____#_____
-        .byte   $00     ;  36/24 _____$_____
-        .byte   $00     ;  37/25 _____%_____
-        .byte   $00     ;  38/26 _____&_____
-        .byte   $00     ;  39/27 _____'_____
-        .byte   $00     ;  40/28 _____(_____
-        .byte   $00     ;  41/29 _____)_____
-        .byte   $00     ;  42/2a _____*_____
-        .byte   $00     ;  43/2b _____+_____
-        .byte   $00     ;  44/2c _____,_____
-        .byte   $00     ;  45/2d _____-_____
-        .byte   $00     ;  46/2e _____._____
-        .byte   $00     ;  47/2f _____/_____
-        .byte   $0C     ;  48/30 _____0_____
-        .byte   $0C     ;  49/31 _____1_____
-        .byte   $0C     ;  50/32 _____2_____
-        .byte   $0C     ;  51/33 _____3_____
-        .byte   $0C     ;  52/34 _____4_____
-        .byte   $0C     ;  53/35 _____5_____
-        .byte   $0C     ;  54/36 _____6_____
-        .byte   $0C     ;  55/37 _____7_____
-        .byte   $0C     ;  56/38 _____8_____
-        .byte   $0C     ;  57/39 _____9_____
-        .byte   $00     ;  58/3a _____:_____
-        .byte   $00     ;  59/3b _____;_____
-        .byte   $00     ;  60/3c _____<_____
-        .byte   $00     ;  61/3d _____=_____
-        .byte   $00     ;  62/3e _____>_____
-        .byte   $00     ;  63/3f _____?_____
-
-        .byte   $00     ;  64/40 _____@_____
-        .byte   $0A     ;  65/41 _____A_____
-        .byte   $0A     ;  66/42 _____B_____
-        .byte   $0A     ;  67/43 _____C_____
-        .byte   $0A     ;  68/44 _____D_____
-        .byte   $0A     ;  69/45 _____E_____
-        .byte   $0A     ;  70/46 _____F_____
-        .byte   $02     ;  71/47 _____G_____
-        .byte   $02     ;  72/48 _____H_____
-        .byte   $02     ;  73/49 _____I_____
-        .byte   $02     ;  74/4a _____J_____
-        .byte   $02     ;  75/4b _____K_____
-        .byte   $02     ;  76/4c _____L_____
-        .byte   $02     ;  77/4d _____M_____
-        .byte   $02     ;  78/4e _____N_____
-        .byte   $02     ;  79/4f _____O_____
-        .byte   $02     ;  80/50 _____P_____
-        .byte   $02     ;  81/51 _____Q_____
-        .byte   $02     ;  82/52 _____R_____
-        .byte   $02     ;  83/53 _____S_____
-        .byte   $02     ;  84/54 _____T_____
-        .byte   $02     ;  85/55 _____U_____
-        .byte   $02     ;  86/56 _____V_____
-        .byte   $02     ;  87/57 _____W_____
-        .byte   $02     ;  88/58 _____X_____
-        .byte   $02     ;  89/59 _____Y_____
-        .byte   $02     ;  90/5a _____Z_____
-        .byte   $00     ;  91/5b _____[_____
-        .byte   $00     ;  92/5c _____\_____
-        .byte   $00     ;  93/5d _____]_____
-        .byte   $00     ;  94/5e _____^_____
-        .byte   $00     ;  95/5f _UNDERLINE_
-        .byte   $00     ;  96/60 __diamond__
-        .byte   $09     ;  97/61 _____a_____
-        .byte   $09     ;  98/62 _____b_____
-        .byte   $09     ;  99/63 _____c_____
-        .byte   $09     ; 100/64 _____d_____
-        .byte   $09     ; 101/65 _____e_____
-        .byte   $09     ; 102/66 _____f_____
-        .byte   $01     ; 103/67 _____g_____
-        .byte   $01     ; 104/68 _____h_____
-        .byte   $01     ; 105/69 _____i_____
-        .byte   $01     ; 106/6a _____j_____
-        .byte   $01     ; 107/6b _____k_____
-        .byte   $01     ; 108/6c _____l_____
-        .byte   $01     ; 109/6d _____m_____
-        .byte   $01     ; 110/6e _____n_____
-        .byte   $01     ; 111/6f _____o_____
-        .byte   $01     ; 112/70 _____p_____
-        .byte   $01     ; 113/71 _____q_____
-        .byte   $01     ; 114/72 _____r_____
-        .byte   $01     ; 115/73 _____s_____
-        .byte   $01     ; 116/74 _____t_____
-        .byte   $01     ; 117/75 _____u_____
-        .byte   $01     ; 118/76 _____v_____
-        .byte   $01     ; 119/77 _____w_____
-        .byte   $01     ; 120/78 _____x_____
-        .byte   $01     ; 121/79 _____y_____
-        .byte   $01     ; 122/7a _____z_____
-        .byte   $00     ; 123/7b ___spade___
-        .byte   $00     ; 124/7c __v_line___
-        .byte   $10     ; 125/7d __CLRSCR___
-        .byte   $D0     ; 126/7e __backtab__
-        .byte   $D0     ; 127/7f ____tab____
-
-        .byte   $00     ; 128/80 _inv_heart___
-        .byte   $00     ; 129/81 _inv_l_tee___
-        .byte   $00     ; 130/82 _inv_ctrl_B__
-        .byte   $00     ; 131/83 _inv_ctrl_C__
-        .byte   $00     ; 132/84 _inv_r_tee___
-        .byte   $00     ; 133/85 _inv_ctrl_E__
-        .byte   $00     ; 134/86 _inv_ctrl_F__
-        .byte   $00     ; 135/87 _inv_ctrl_G__
-        .byte   $00     ; 136/88 _inv_ctrl_H__
-        .byte   $00     ; 137/89 _inv_ctrl_I__
-        .byte   $00     ; 138/8a _inv_ctrl_J__
-        .byte   $00     ; 139/8b _inv_ctrl_K__
-        .byte   $00     ; 140/8c _inv_ctrl_L__
-        .byte   $00     ; 141/8d _inv_ctrl_M__
-        .byte   $00     ; 142/8e _inv_ctrl_N__
-        .byte   $00     ; 143/8f _inv_ctrl_O__
-        .byte   $00     ; 144/90 __inv__club__
-        .byte   $00     ; 145/91 _inv_ctrl_Q__
-        .byte   $00     ; 146/92 _inv_h_line__
-        .byte   $00     ; 147/93 _inv_ctrl_S__
-        .byte   $00     ; 148/94 __inv__ball__
-        .byte   $00     ; 149/95 _inv_ctrl_U__
-        .byte   $00     ; 150/96 _inv_ctrl_V__
-        .byte   $00     ; 151/97 __inv_t_tee__
-        .byte   $00     ; 152/98 __inv_b_tee__
-        .byte   $00     ; 153/99 _inv_ctrl_Y__
-        .byte   $00     ; 154/9a _inv_ctrl_Z__
-        .byte   $50     ; 155/9b _____EOL_____
-        .byte   $10     ; 156/9c ___CLRLINE___
-        .byte   $10     ; 157/9d ___INSLINE___
-        .byte   $10     ; 158/9e ____CLRTAB___
-        .byte   $10     ; 159/9f ____INSTAB___
-        .byte   $A0     ; 160/a0 __inv_SPACE__
-        .byte   $00     ; 161/a1 ___inv_!_____
-        .byte   $00     ; 162/a2 ___inv_"_____
-        .byte   $00     ; 163/a3 ___inv_#_____
-        .byte   $00     ; 164/a4 ___inv_$_____
-        .byte   $00     ; 165/a5 ___inv_%_____
-        .byte   $00     ; 166/a6 ___inv_&_____
-        .byte   $00     ; 167/a7 ___inv_'_____
-        .byte   $00     ; 168/a8 ___inv_(_____
-        .byte   $00     ; 169/a9 ___inv_)_____
-        .byte   $00     ; 170/aa ___inv_*_____
-        .byte   $00     ; 171/ab ___inv_+_____
-        .byte   $00     ; 172/ac ___inv_,_____
-        .byte   $00     ; 173/ad ___inv_-_____
-        .byte   $00     ; 174/ae ___inv_._____
-        .byte   $00     ; 175/af ___inv_/_____
-        .byte   $0C     ; 176/b0 ___inv_0_____
-        .byte   $0C     ; 177/b1 ___inv_1_____
-        .byte   $0C     ; 178/b2 ___inv_2_____
-        .byte   $0C     ; 179/b3 ___inv_3_____
-        .byte   $0C     ; 180/b4 ___inv_4_____
-        .byte   $0C     ; 181/b5 ___inv_5_____
-        .byte   $0C     ; 182/b6 ___inv_6_____
-        .byte   $0C     ; 183/b7 ___inv_7_____
-        .byte   $0C     ; 184/b8 ___inv_8_____
-        .byte   $0C     ; 185/b9 ___inv_9_____
-        .byte   $00     ; 186/ba ___inv_:_____
-        .byte   $00     ; 187/bb ___inv_;_____
-        .byte   $00     ; 188/bc ___inv_<_____
-        .byte   $00     ; 189/bd ___inv_=_____
-        .byte   $00     ; 190/be ___inv_>_____
-        .byte   $00     ; 191/bf ___inv_?_____
-
-        .byte   $00     ; 192/c0 ___inv_@_____
-        .byte   $0A     ; 193/c1 ___inv_A_____
-        .byte   $0A     ; 194/c2 ___inv_B_____
-        .byte   $0A     ; 195/c3 ___inv_C_____
-        .byte   $0A     ; 196/c4 ___inv_D_____
-        .byte   $0A     ; 197/c5 ___inv_E_____
-        .byte   $0A     ; 198/c6 ___inv_F_____
-        .byte   $02     ; 199/c7 ___inv_G_____
-        .byte   $02     ; 200/c8 ___inv_H_____
-        .byte   $02     ; 201/c9 ___inv_I_____
-        .byte   $02     ; 202/ca ___inv_J_____
-        .byte   $02     ; 203/cb ___inv_K_____
-        .byte   $02     ; 204/cc ___inv_L_____
-        .byte   $02     ; 205/cd ___inv_M_____
-        .byte   $02     ; 206/ce ___inv_N_____
-        .byte   $02     ; 207/cf ___inv_O_____
-        .byte   $02     ; 208/d0 ___inv_P_____
-        .byte   $02     ; 209/d1 ___inv_Q_____
-        .byte   $02     ; 210/d2 ___inv_R_____
-        .byte   $02     ; 211/d3 ___inv_S_____
-        .byte   $02     ; 212/d4 ___inv_T_____
-        .byte   $02     ; 213/d5 ___inv_U_____
-        .byte   $02     ; 214/d6 ___inv_V_____
-        .byte   $02     ; 215/d7 ___inv_W_____
-        .byte   $02     ; 216/d8 ___inv_X_____
-        .byte   $02     ; 217/d9 ___inv_Y_____
-        .byte   $02     ; 218/da ___inv_Z_____
-        .byte   $00     ; 219/db ___inv_[_____
-        .byte   $00     ; 220/dc ___inv_\_____
-        .byte   $00     ; 221/dd ___inv_]_____
-        .byte   $00     ; 222/de ___inv_^_____
-        .byte   $00     ; 223/df _inv_UNDRLIN_
-        .byte   $00     ; 224/e0 _inv_diamond_
-        .byte   $09     ; 225/e1 ___inv_a_____
-        .byte   $09     ; 226/e2 ___inv_b_____
-        .byte   $09     ; 227/e3 ___inv_c_____
-        .byte   $09     ; 228/e4 ___inv_d_____
-        .byte   $09     ; 229/e5 ___inv_e_____
-        .byte   $09     ; 230/e6 ___inv_f_____
-        .byte   $01     ; 231/e7 ___inv_g_____
-        .byte   $01     ; 232/e8 ___inv_h_____
-        .byte   $01     ; 233/e9 ___inv_i_____
-        .byte   $01     ; 234/ea ___inv_j_____
-        .byte   $01     ; 235/eb ___inv_k_____
-        .byte   $01     ; 236/ec ___inv_l_____
-        .byte   $01     ; 237/ed ___inv_m_____
-        .byte   $01     ; 238/ee ___inv_n_____
-        .byte   $01     ; 239/ef ___inv_o_____
-        .byte   $01     ; 240/f0 ___inv_p_____
-        .byte   $01     ; 241/f1 ___inv_q_____
-        .byte   $01     ; 242/f2 ___inv_r_____
-        .byte   $01     ; 243/f3 ___inv_s_____
-        .byte   $01     ; 244/f4 ___inv_t_____
-        .byte   $01     ; 245/f5 ___inv_u_____
-        .byte   $01     ; 246/f6 ___inv_v_____
-        .byte   $01     ; 247/f7 ___inv_w_____
-        .byte   $01     ; 248/f8 ___inv_x_____
-        .byte   $01     ; 249/f9 ___inv_y_____
-        .byte   $01     ; 250/fa ___inv_z_____
-        .byte   $00     ; 251/fb __inv_spade__
-        .byte   $00     ; 252/fc __inv_v_line_
-        .byte   $10     ; 253/fd ____BEEP_____
-        .byte   $10     ; 254/fe ____DELBS____
-        .byte   $10     ; 255/ff ___INSERT____
-
-
diff --git a/libsrc/atari/cvline.s b/libsrc/atari/cvline.s
deleted file mode 100644 (file)
index da6c8dc..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void cvlinexy (unsigned char x, unsigned char y, unsigned char length);
-; void cvline (unsigned char length);
-;
-        .include "atari.inc"
-        
-        .export         _cvlinexy, _cvline
-        .import         popa, _gotoxy, putchar, setcursor
-        .importzp       tmp1
-
-.ifdef __ATARI5200__
-CHRCODE =       1               ; exclamation mark
-.else
-CHRCODE =       $7C             ; Vertical bar
-.endif
-
-_cvlinexy:
-        pha                     ; Save the length
-        jsr     popa            ; Get y
-        jsr     _gotoxy         ; Call this one, will pop params
-        pla                     ; Restore the length and run into _cvline
-
-_cvline:
-        cmp     #0              ; Is the length zero?
-        beq     L9              ; Jump if done
-        sta     tmp1
-L1:     lda     COLCRS
-        pha
-        lda     #CHRCODE        ; Vertical bar
-        jsr     putchar         ; Write, no cursor advance
-        pla
-        sta     COLCRS
-        inc     ROWCRS
-        dec     tmp1
-        bne     L1
-L9:     jmp     setcursor
diff --git a/libsrc/atari/dio_cts.s b/libsrc/atari/dio_cts.s
deleted file mode 100644 (file)
index 551b9c0..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-;
-; Christian Groessler, October 2000
-;
-; this file provides the _dio_phys_to_log function
-; (previously called _dio_chs_to_snum, so the filename)
-;
-; on the Atari this function is a dummy, it ignores
-; cylinder and head and returns as sector number the
-; sector number it got
-;
-; unsigned char __fastcall__ dio_phys_to_log(dhandle_t handle,
-;                                            dio_phys_pos *physpos,     /* input */
-;                                            unsigned *sectnum);        /* output */
-;
-; dhandle_t - 16bit (ptr)
-;
-
-        .export         _dio_phys_to_log
-        .import         popax,__oserror
-        .importzp       ptr1,ptr2,ptr3
-        .include        "atari.inc"
-
-.proc   _dio_phys_to_log
-
-        sta     ptr1
-        stx     ptr1+1          ; pointer to result
-
-        jsr     popax
-        sta     ptr2
-        stx     ptr2+1          ; pointer to input structure
-
-        jsr     popax
-        sta     ptr3
-        stx     ptr3+1          ; pointer to handle
-
-        ldy     #sst_flag
-        lda     (ptr3),y
-        and     #128
-        beq     _inv_hand       ; handle not open or invalid
-
-; ignore head and track and return the sector value
-
-        ldy     #diopp_sector
-        lda     (ptr2),y
-        tax
-        iny
-        lda     (ptr2),y
-        ldy     #1
-        sta     (ptr1),y
-        dey
-        txa
-        sta     (ptr1),y
-
-        ldx     #0
-        txa
-ret:
-        sta     __oserror
-        rts                     ; return success
-
-; invalid handle
-
-_inv_hand:
-        ldx     #0
-        lda     #BADIOC
-        bne     ret
-
-.endproc
-
diff --git a/libsrc/atari/dio_stc.s b/libsrc/atari/dio_stc.s
deleted file mode 100644 (file)
index 52b3af4..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-;
-; Christian Groessler, October 2000
-;
-; this file provides the _dio_log_to_phys function
-; (previously called _dio_snum_to_chs, so the filename)
-;
-; on the Atari this function is a dummy, it returns
-; cylinder and head 0 and as sector the sectnum it got
-;
-; unsigned char __fastcall__ dio_log_to_phys(dhandle_t handle,
-;                                            unsigned *sectnum,         /* input */
-;                                            dio_phys_pos *physpos);    /* output */
-;
-; dhandle_t - 16bit (ptr)
-;
-
-        .export         _dio_log_to_phys
-        .include        "atari.inc"
-        .importzp       ptr1,ptr2,ptr3
-        .import         popax,__oserror
-
-.proc   _dio_log_to_phys
-
-        sta     ptr2
-        stx     ptr2+1          ; pointer to output structure
-
-        jsr     popax
-        sta     ptr1
-        stx     ptr1+1          ; save pointer to input data
-
-        jsr     popax
-        sta     ptr3
-        stx     ptr3+1          ; pointer to handle
-
-        ldy     #sst_flag
-        lda     (ptr3),y
-        and     #128
-        beq     _inv_hand       ; handle not open or invalid
-
-        lda     #0
-        tay
-        tax
-        sta     (ptr2),y        ; head
-        iny
-        sta     (ptr2),y        ; track (low)
-        iny
-        sta     (ptr2),y        ; track (high)
-        iny
-
-        lda     (ptr1,x)
-        sta     (ptr2),y
-        iny
-        inc     ptr1
-        bne     _l1
-        inc     ptr1+1
-_l1:    lda     (ptr1,x)
-        sta     (ptr2),y
-
-        txa
-ret:
-        sta     __oserror
-        rts                     ; return success
-
-; invalid handle
-
-_inv_hand:
-        ldx     #0
-        lda     #BADIOC
-        bne     ret
-
-.endproc
-
diff --git a/libsrc/atari/diopncls.s b/libsrc/atari/diopncls.s
deleted file mode 100644 (file)
index 2cdeba7..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-;
-; Christian Groessler, February 2005
-;
-; This file provides the _dio_open and _dio_close functions
-; Since on the Atari no real open and close is necessary, they
-; do not open or close something. The _dio_open sets the sector
-; size of the drive which is later used by the _dio_read and
-; _dio_write functions. To query the sector size, the _dio_open
-; accesses the disk drive.
-;
-; dhandle_t     __fastcall__ dio_open  (unsigned char device);
-; unsigned char __fastcall__ dio_close (dhandle_t handle);
-;
-
-        .export         _dio_open, _dio_close
-        .export         sectsizetab
-        .import         __oserror, __sio_call, _dio_read
-        .import         pushax, addysp, subysp
-        .importzp       ptr2, sp
-        .include        "atari.inc"
-
-
-.bss
-
-sectsizetab:
-        .res    NUMDRVS * sst_size
-
-.code
-
-; code for _dio_open
-
-_inv_drive:
-        lda     #NONDEV         ; non-existent device
-        sta     __oserror
-        lda     #0
-        tax
-        rts                     ; return NULL
-
-_dio_open:
-
-        cmp     #NUMDRVS        ; valid drive id?
-        bcs     _inv_drive
-        tay                     ; drive #
-        asl     a               ; make index from drive id
-        asl     a
-        tax
-        lda     #128                            ; preset sectsize
-        sta     sectsizetab+sst_sectsize,x
-        sta     sectsizetab+sst_flag,x          ; set flag that drive is "open"
-        lda     #0
-        sta     sectsizetab+sst_sectsize+1,x
-        sta     __oserror                       ; success
-        tya
-        sta     sectsizetab+sst_driveno,x
-        stx     ptr2
-        lda     #<sectsizetab
-        clc
-        adc     ptr2
-        sta     ptr2
-        lda     #>sectsizetab
-        adc     #0
-        tax
-        stx     ptr2+1          ; ptr2: pointer to sectsizetab entry
-
-; query drive for current sector size
-; procedure:
-;   - read sector #4 (SIO command $54) to update drive status;
-;     read length is 128 bytes, buffer is allocated on the stack,
-;          sector data is ignored;
-;     returned command status is ignored, we will get an error with
-;          a DD disk anyway (read size 128 vs. sector size 256);
-;   - issue SIO command $53 (get status) to retrieve the sector size;
-;     use the DVSTAT system area as return buffer;
-;     if the command returns with an error, set sector size to 128
-;          bytes;
-;
-
-        ldy     #128
-        jsr     subysp          ; allocate buffer on the stack
-
-        lda     sp
-        pha
-        lda     sp+1
-        pha                     ; save sp (buffer address) on processor stack
-
-        lda     ptr2
-        ldx     ptr2+1
-        jsr     pushax          ; handle
-
-        ldx     #0
-        lda     #4
-        jsr     pushax          ; sect_num
-
-        pla
-        tax
-        pla                     ; AX - buffer address
-
-                                ; sst_sectsize currently 128
-        jsr     _dio_read       ; read sector to update status
-
-        ldy     #128
-        jsr     addysp          ; discard stack buffer
-
-        lda     ptr2
-        ldx     ptr2+1
-        jsr     pushax          ; handle
-
-        ldx     #0
-        lda     #4
-        jsr     pushax          ; dummy sector #, ignored by this SIO command,
-                                ; but set to circumvent the special 1-3 sector
-                                ; handling in __sio_call
-
-        ldx     #>DVSTAT
-        lda     #<DVSTAT
-        jsr     pushax          ; buffer address
-
-        ldy     #sst_sectsize
-        lda     #4
-        sta     (ptr2),y        ; 4 bytes transfer
-
-        ldx     #%01000000      ; direction value
-        lda     #SIO_STAT       ; get status
-
-        jsr     __sio_call
-
-        bmi     error
-
-        ldy     #sst_sectsize
-        lda     DVSTAT
-        and     #%100000
-        beq     s128
-
-;s256
-        lda     #0
-        sta     (ptr2),y
-        iny
-        lda     #1
-
-finish: sta     (ptr2),y        ; set default sector size       
-fini2:  lda     ptr2
-        ldx     ptr2+1
-        rts
-
-error:  ldy     #sst_sectsize
-s128:   lda     #128
-        bne     finish
-
-; end of _dio_open
-
-
-.proc   _dio_close
-
-        sta     ptr2
-        stx     ptr2+1
-        lda     #0
-        ldy     #sst_flag
-        sta     (ptr2),y
-        sta     __oserror       ; success
-        tax
-        rts                     ; return no error
-
-.endproc
diff --git a/libsrc/atari/dioqsize.s b/libsrc/atari/dioqsize.s
deleted file mode 100644 (file)
index f26667a..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Christian Groessler, February 2005
-;
-; unsigned __fastcall__ dio_query_sectsize(dhandle_t handle);
-;
-
-        .include        "atari.inc"
-        .export         _dio_query_sectsize
-        .importzp       ptr1,tmp1
-        .import         popax, __oserror
-
-.proc   _dio_query_sectsize
-
-        sta     ptr1            ; handle
-        stx     ptr1+1 
-
-        lda     #0
-        sta     __oserror
-
-        ldy     #sst_sectsize+1
-        lda     (ptr1),y
-        tax
-        dey
-        lda     (ptr1),y
-        rts
-
-.endproc
diff --git a/libsrc/atari/dioread.s b/libsrc/atari/dioread.s
deleted file mode 100644 (file)
index 53fc730..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Christian Groessler, October 2000
-;
-; this file provides the _dio_read function
-;
-; unsigned char __fastcall__ dio_read(dhandle_t handle,unsigned sect_num,void *buffer);
-; dhandle_t - 16bit (ptr)
-;
-
-        .import         __sio_call,pushax
-        .export         _dio_read
-        .include        "atari.inc"
-
-.proc   _dio_read
-
-        jsr     pushax          ; push buffer address
-        ldx     #%01000000      ; direction value
-        lda     #SIO_READ       ; read sector command
-        jmp     __sio_call      ; do the call and return to the user
-
-.endproc
-
diff --git a/libsrc/atari/diowrite.s b/libsrc/atari/diowrite.s
deleted file mode 100644 (file)
index 93c8763..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Christian Groessler, October 2000
-;
-; this file provides the _dio_write function
-;
-; unsigned char __fastcall__ dio_write(dhandle_t handle,unsigned sect_num,const void *buffer);
-; dhandle_t - 16bit (ptr)
-;
-
-        .import         __sio_call,pushax
-        .export         _dio_write
-        .include        "atari.inc"
-
-.proc   _dio_write
-
-        jsr     pushax          ; push buffer address
-        ldx     #%10000000      ; indicate i/o direction (write)
-        lda     #SIO_WRITE      ; write sector command
-        jmp     __sio_call      ; do the call and return to the user
-
-.endproc
-
diff --git a/libsrc/atari/diowritev.s b/libsrc/atari/diowritev.s
deleted file mode 100644 (file)
index 5c91f4f..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Christian Groessler, October 2000
-;
-; this file provides the _dio_write_verify function
-;
-; unsigned char __fastcall__ dio_write_verify(dhandle_t handle,unsigned sect_num,const void *buffer);
-; dhandle_t - 16bit (ptr)
-;
-
-        .import         __sio_call,pushax
-        .export         _dio_write_verify
-        .include        "atari.inc"
-
-.proc   _dio_write_verify
-
-        jsr     pushax          ; push buffer address
-        ldx     #%10000000      ; indicate i/o direction (write)
-        lda     #SIO_WRITEV     ; write sector command
-        jmp     __sio_call      ; do the call and return to the user
-
-.endproc
-
diff --git a/libsrc/atari/do_oserr.s b/libsrc/atari/do_oserr.s
deleted file mode 100644 (file)
index eb19dd9..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; __do_oserror updates __oserror and errno.  Do a JMP here right after
-; calling CIOV. It will return with AX set to -1 ($FFFF).  It expects the CIO
-; status in Y.
-;
-        .include "errno.inc"
-
-        .export __do_oserror
-
-__do_oserror:
-        tya
-        jmp     __mappederrno
diff --git a/libsrc/atari/dosdetect.s b/libsrc/atari/dosdetect.s
deleted file mode 100644 (file)
index c60ac47..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-;
-; Freddy Offenga, Stefan Haubenthal, Christian Groessler, March 2007
-;
-; detect the DOS version we're running on
-;
-
-        .include        "atari.inc"
-        .constructor    detect,26
-        .export         __dos_type
-
-; ------------------------------------------------------------------------
-; DOS type detection
-
-.segment        "INIT"
-
-detect: lda     DOS
-        cmp     #'S'            ; SpartaDOS
-        beq     spdos
-        cmp     #'M'            ; MyDOS
-        beq     mydos
-        cmp     #'X'            ; XDOS
-        beq     xdos
-
-        lda     #$4C            ; probably default
-        ldy     #COMTAB
-        cmp     (DOSVEC),y
-        bne     done
-        ldy     #ZCRNAME
-        cmp     (DOSVEC),y
-        bne     done
-
-        ldy     #6              ; OS/A+ has a jmp here
-        cmp     (DOSVEC),y
-        beq     done
-        lda     #OSADOS
-        .byte   $2C             ; BIT <abs>
-
-spdos:  lda     #SPARTADOS
-        .byte   $2C             ; BIT <abs>
-
-mydos:  lda     #MYDOS
-        .byte   $2C             ; BIT <abs>
-
-xdos:   lda     #XDOS
-        sta     __dos_type
-done:   rts
-
-; ------------------------------------------------------------------------
-; Data
-
-        .bss
-
-__dos_type:     .res    1       ; default to ATARIDOS
diff --git a/libsrc/atari/emd/atr130.s b/libsrc/atari/emd/atr130.s
deleted file mode 100644 (file)
index f2d5777..0000000
+++ /dev/null
@@ -1,492 +0,0 @@
-;
-; Extended memory driver for the Atari 130XE memory standard
-; Shawn Jefferson, 2012-08-11
-;
-; Banking Register $D301:
-; Bit 7: Self-Test on/off
-; Bit 6: Unused
-; Bit 5: Antic sees bank
-; Bit 4: CPU sees bank
-; Bit 3: bank control
-; Bit 2: bank control
-; Bit 1: BASIC on/off
-; Bit 0: OS RAM on/off
-; 
-; Masks: %11100011  $E3     Bank 0
-;        %11100111  $E7     Bank 1
-;        %11101011  $EB     Bank 2
-;        %11101111  $EF     Bank 3
-;        %11111111  $FF     Off
-;
-; Based on the Extended memory driver for the Apple II auxiliary memory
-;  by
-; Stefan Haubenthal, 2003-12-12
-; Ullrich von Bassewitz, 2002-12-02
-;
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-.ifdef __ATARIXL__
-        module_header   _atrx130_emd
-.else
-        module_header   _atr130_emd
-.endif
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-BANK    = $4000                         ; bank window
-STACK   = $0100                         ; stack location 
-PAGES   = 256                           ; 4 x 16k banks
-
-
-; ------------------------------------------------------------------------
-; Data.
-
-.rodata
-banks:          .byte $E3,$E7,$EB,$EF   ; 130XE banks for cpu banking
-
-stacktest:      sei
-                ldy banks
-                sty $D301
-                tax                     ; A is set by caller
-                inx
-                stx $4000               ; change $4000
-                ldy #$FF                ; STACK+13
-                sty $D301
-                cmp $4000               ; changed?
-                beq @1
-                sec                     ; error
-                bcs @2
-@1:             clc
-@2:             sta $4000               ; restore
-                cli
-                rts
-stacktest_end: 
-
-stackcopy:      sei                     ; disable interrupts
-@1:             dex                     ; pre-decrement (full page x=0)
-                ldy #$FF                ; this will be replaced  STACK+3
-                sty $D301               ; set bank 
-                lda $FF00,x             ; address to copy from   STACK+8,+9
-                ldy #$FF                ; this will be replaced  STACK+11
-                sty $D301 
-                sta $FF00,x             ; address to copy to     STACK+16,+17
-                cpx #0 
-                bne @1
-                ldy #$FF                ; portb_save             STACK+23
-                sty $D301
-                cli                     ; enable interrupts
-                rts
-stackcopy_end:
-
-stackcopy_byte: sei
-                ldy #$FF                ; STACK+2
-                sty $D301
-                lda $FFFF               ; STACK+7 +8
-                ldy #$FF                ; STACK+10
-                sty $D301
-                sta $FFFF               ; STACK+15 +16
-                ldy #$FF                ; STACK+18
-                sty $D301
-                cli
-                rts
-stackcopy_byte_end: 
-
-
-.data
-curpage:        .byte   $FF             ; Current page number in bank (invalid)
-curbank:        .byte   $FF             ; Current bank number
-
-.bss
-window:         .res    256             ; Memory "window"
-portb_save:     .res    1               ; portb state
-
-.code
-
-install_transfer:
-                ldx #stackcopy_end - stackcopy - 1
-@1:             lda stackcopy,x
-                sta STACK,x
-                dex
-                bpl @1
-                rts
-
-install_byte_transfer:
-                ldx #stackcopy_byte_end - stackcopy_byte - 1
-@2:             lda stackcopy_byte,x
-                sta STACK,x
-                dex
-                bpl @2
-                rts
-
-install_test:
-                ldx #stacktest_end - stacktest - 1
-@3:             lda stacktest,x
-                sta STACK,x
-                dex
-                bpl @3
-                rts
-
-setpage:
-                tax                             ; save page
-                and     #$C0                    ; mask out bank
-                clc
-                ror
-                ror                             ; divide by 64
-                ror                             ; 64 pages in each bank
-                ror
-                ror
-                ror
-                sta     curbank                 ; Remember the new bank
-                txa                             ; bring back page
-                and     #$3F                    ; mask out page
-                sta     curpage                 ; curpage in bank
-                rts
-
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     $D301                   ; save state of portb
-        sta     portb_save
-        tay 
-
-        jsr     install_test            ; doesn't touch Y
-        sty     STACK+13
-
-        lda     $4000                   ; test for extended memory
-        jsr     STACK
-        bcs     @1 
-        lda     #EM_ERR_OK
-        rts
-@1:     lda     #EM_ERR_NO_DEVICE
-        rts
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     #<PAGES
-        ldx     #>PAGES
-        rts
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:    jsr setpage                     ; extract the bank/page
-        add     #>BANK                  ; $4000 + page  (carry is cleared)
-        sta     ptr1+1
-        ;ldy     #$00
-        ;sty     ptr1
-
-        lda     #<window
-        sta     ptr2
-        lda     #>window
-        sta     ptr2+1
-
-; Transfer one page
-
-        jsr     install_transfer        ; Transfer one page
-
-        ldx     curbank
-        lda     banks,x
-        sta     STACK+3                 ; set bank to copy from
-;        lda     ptr1
-;        sta     STACK+8 
-        lda     ptr1+1
-        sta     STACK+9                 ; set copy from address
-        lda     portb_save
-        sta     STACK+11                ; set portb restore
-        sta     STACK+23                ; set final portb restore
-        lda     ptr2
-        sta     STACK+16
-        lda     ptr2+1
-        sta     STACK+17                ; set copy to address 
-
-        ldx     #0                      ; full page copy
-        jsr     STACK                   ; do the copy! 
-
-; Return the memory window
-
-        lda     #<window
-        ldx     #>window                ; Return the window address
-
-        rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-
-USE:    ;sta     curpage                 ; Remember the page
-        jsr setpage                     ; extract bank/page
-        lda     #<window
-        ldx     #>window                ; Return the window
-        rts
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT: lda     curpage                 ; Get the current page
-        cmp     #$FF
-        beq     commit_done             ; Jump if no page mapped
-
-        clc
-        add     #>BANK
-        sta     ptr2+1
-        ;ldy     #$00
-        ;sty     ptr2
-
-        lda     #<window
-        sta     ptr1
-        lda     #>window
-        sta     ptr1+1
-
-; Transfer one page/all bytes
-
-        jsr     install_transfer        ; Transfer one page
-
-        lda     portb_save
-        sta     STACK+3                 ; set bank to copy from
-        sta     STACK+23                ; set final portb restore
-        lda     ptr1
-        sta     STACK+8 
-        lda     ptr1+1
-        sta     STACK+9                 ; set copy from address
-        ldx     curbank
-        lda     banks,x
-        sta     STACK+11                ; set bank to copy to
-        ;lda     ptr2
-        ;sta     STACK+16
-        lda     ptr2+1
-        sta     STACK+17                ; set copy to address 
-
-        ldx     #0                      ; full page copy
-        jsr     STACK                   ; do the copy! 
-
-commit_done:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-COPYFROM:
-        sta     ptr3
-        stx     ptr3+1                  ; Save the passed em_copy pointer
-
-        jsr     install_byte_transfer   ; install the stack copy routine
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr3),y
-        sta     STACK+7                 ; offset goes into BANK low 
-
-        ldy     #EM_COPY::PAGE
-        lda     (ptr3),y
-        sta     tmp1                    ; save page for later
-        ;add     #>BANK
-        ;sta     STACK+8                 ; BANK + page goes into BANK high
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr3),y
-        sta     STACK+15                ; buffer goes into dest low
-        iny
-        lda     (ptr3),y
-        sta     STACK+16                ; buffer goes into dest high
-
-        ldy     #EM_COPY::COUNT
-        lda     (ptr3),y                ; Get bytes in last page
-        sta     ptr4
-        iny
-        lda     (ptr3),y                ; Get number of pages
-        sta     ptr4+1
-
-        lda     tmp1                    ; extract bank/page
-        jsr     setpage                 ; sets curbank/curpage
-        lda     curpage
-        add     #>BANK                  ; add to BANK address
-        sta     STACK+8                 ; current page in bank
-        ldx     curbank
-        lda     banks,x 
-        sta     STACK+2                 ; set bank in stack 
-        lda     portb_save 
-        sta     STACK+10                ; set bank restore in stack
-        sta     STACK+18                ; set final restore too
-
-copyfrom_copy:
-        lda     ptr4                    ; check if count is zero
-        bne     @4
-        lda     ptr4+1
-        beq     done
-
-@4:     jsr     STACK                   ; copy one byte
-
-        sec
-        lda     ptr4
-        sub     #1
-        sta     ptr4
-        bcs     @1
-        lda     ptr4+1
-        beq     @1
-        sub     #1
-        sta     ptr4+1
-
-@1:     inc     STACK+7                 ; increment address in BANK
-        bne     @2
-        inc     STACK+8
-        lda     STACK+8
-        cmp     #$80                    ; we stepped outside bank
-        bne     @2
-
-        inc     curbank                 ; get next bank
-        ldx     curbank
-        lda     banks,x
-        sta     STACK+2                 ; set new bank
-        lda     #$40                    ; set address back to $4000
-        sta     STACK+8
-
-@2:     inc     STACK+15                ; increment buffer address
-        bne     @3
-        inc     STACK+16
-
-@3:     jmp     copyfrom_copy           ; copy another byte 
-
-done:
-        rts
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO:
-        sta     ptr3
-        stx     ptr3+1                  ; Save the passed em_copy pointer
-
-        jsr     install_byte_transfer   ; install the stack copy routine
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr3),y
-        sta     STACK+15                 ; offset goes into BANK low 
-
-        ldy     #EM_COPY::PAGE
-        lda     (ptr3),y
-        sta     tmp1                    ; save page for later
-        ;add     #>BANK
-        ;sta     STACK+16                ; BANK + page goes into BANK high
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr3),y
-        sta     STACK+7                ; buffer goes into dest low
-        iny
-        lda     (ptr3),y
-        sta     STACK+8                ; buffer goes into dest high
-
-        ldy     #EM_COPY::COUNT
-        lda     (ptr3),y                ; Get bytes in last page
-        sta     ptr4
-        iny
-        lda     (ptr3),y                ; Get number of pages
-        sta     ptr4+1
-
-        lda     tmp1                    ; extract bank/page
-        jsr     setpage                 ; sets curbank/curpage
-        lda     curpage
-        add     #>BANK                  ; add to BANK address
-        sta     STACK+16                ; current page in bank
-        ldx     curbank
-        lda     banks,x 
-        sta     STACK+10                ; set bank in stack 
-        lda     portb_save 
-        sta     STACK+2                 ; set bank restore in stack
-        sta     STACK+18                ; set final restore too
-
-copyto_copy:
-        lda     ptr4                    ; check if count is zero
-        bne     @4
-        lda     ptr4+1
-        beq     done
-
-@4:     jsr     STACK                   ; copy one byte
-
-        sec
-        lda     ptr4
-        sub     #1
-        sta     ptr4
-        bcs     @1
-        lda     ptr4+1
-        beq     @1
-        sub     #1
-        sta     ptr4+1
-
-@1:     inc     STACK+15               ; increment address in BANK
-        bne     @2
-        inc     STACK+16
-        lda     STACK+16
-        cmp     #$80                    ; we stepped outside bank
-        bne     @2
-
-        inc     curbank                 ; get next bank
-        ldx     curbank
-        lda     banks,x
-        sta     STACK+10                ; set new bank
-        lda     #$40                    ; set address back to $4000
-        sta     STACK+16
-
-@2:     inc     STACK+7                ; increment buffer address
-        bne     @3
-        inc     STACK+8
-
-@3:     jmp     copyto_copy           ; copy another byte 
-
diff --git a/libsrc/atari/exehdr.s b/libsrc/atari/exehdr.s
deleted file mode 100644 (file)
index ea9fa95..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-; This file defines the EXE header and main chunk load header for Atari executables
-
-        .export         __EXEHDR__: absolute = 1
-        .import         __RAM_START__, __BSS_LOAD__
-
-.segment        "EXEHDR"
-        .word   $FFFF
-
-.segment        "MAINHDR"
-        .word   __RAM_START__
-        .word   __BSS_LOAD__ - 1
diff --git a/libsrc/atari/exetrailer.s b/libsrc/atari/exetrailer.s
deleted file mode 100644 (file)
index bac9356..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-; This file defines the EXE file "trailer" which sets the entry point
-
-        .export         __AUTOSTART__: absolute = 1
-        .import         start
-
-        .include        "atari.inc"
-
-.segment "AUTOSTRT"
-        .word   RUNAD                   ; defined in atari.inc
-        .word   RUNAD+1
-        .word   start
-
diff --git a/libsrc/atari/fd.inc b/libsrc/atari/fd.inc
deleted file mode 100644 (file)
index aefc802..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Christian Groessler, Oct-2000
-;
-; offsets and defines for fdtable (internal use only)
-;
-
-MAX_FD_INDEX    =       12      ; max. # of open fds
-MAX_FD_VAL      =       8       ; we have 8 IOCBs
-
-ft_entrylen = 4 ; length of table entry (it's not sufficient to change here!
-                ; the code sometimes does two bit shifts to multiply/divide by
-                ; this length)
-
-ft_usa  = 0     ; usage counter
-ft_iocb = 1     ; iocb index (0,$10,$20,etc.), $ff for empty entry
-ft_dev  = 2     ; device of open iocb (0 - device not remembered, eg. filename specified)
-ft_flag = 3     ; flags
-                ; lower 3 bits: device number (for R: and D:)
-                ; bit 3 - seeking supported by DOS/disk combination
-                ; bit 4 - indicates a fd opened by the program as apposed to the
-                ;         inherited ones from program start (fd 0 to fd 2)
diff --git a/libsrc/atari/fdtab.s b/libsrc/atari/fdtab.s
deleted file mode 100644 (file)
index 0c90aef..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Christian Groessler, Oct-2000
-; Daniel Serpell, Dec-2009
-;
-; the fdtable itself is defined here
-;
-
-        .include "fd.inc"
-
-        .export fd_table,fd_index
-        .export ___fd_table,___fd_index ; for test(debug purposes only
-
-        .data
-
-___fd_index:
-fd_index:       ; fd number is index into this table, entry's value specifies the fd_table entry
-        .byte   0,0,0           ; at start, three first files are stdin/stdout/stderr.
-        .res    MAX_FD_INDEX-3,$ff
-
-___fd_table:
-fd_table:       ; each entry represents an open iocb
-        .byte   3,0,'E',0       ; system console, app starts with opened iocb #0 for E:
-        .byte   0,$ff,0,0
-        .byte   0,$ff,0,0
-        .byte   0,$ff,0,0
-        .byte   0,$ff,0,0
-        .byte   0,$ff,0,0
-        .byte   0,$ff,0,0
-        .byte   0,$ff,0,0
-
diff --git a/libsrc/atari/fdtable.s b/libsrc/atari/fdtable.s
deleted file mode 100644 (file)
index fd9f502..0000000
+++ /dev/null
@@ -1,327 +0,0 @@
-;
-; Christian Groessler, May-2000
-;
-; fd indirection table & helper functions
-;
-
-        .include "atari.inc"
-        .include "fd.inc"
-        .importzp tmp1,tmp2,tmp3,ptr4,sp
-        .import fd_table,fd_index
-        .import fdt_to_fdi
-        .export clriocb
-        .export fdtoiocb_down
-        .export fddecusage
-        .export newfd
-
-        .code
-
-; gets fd in ax, decrements usage counter
-; return iocb index in X
-; return N bit set for invalid fd
-; return Z bit set if last user
-; all registers destroyed
-.proc   fdtoiocb_down
-
-        cpx     #0
-        bne     inval
-        cmp     #MAX_FD_INDEX
-        bcs     inval
-        tax
-        lda     fd_index,x              ; get index
-        tay
-        lda     #$ff
-        sta     fd_index,x              ; clear entry
-        tya
-        asl     a                       ; create index into fd table
-        asl     a
-        tax
-        lda     #$ff
-        cmp     fd_table+ft_iocb,x      ; entry in use?
-        beq     inval                   ; no, return error
-        lda     fd_table+ft_usa,x       ; get usage counter
-        beq     ok_notlast              ; 0? (shouldn't happen)
-        sec
-        sbc     #1                      ; decr usage counter
-        sta     fd_table+ft_usa,x
-retiocb:php
-        txa
-        tay
-        lda     fd_table+ft_iocb,x      ; get iocb
-        tax
-        plp
-        bne     cont
-        lda     #$ff
-        sta     fd_table+ft_iocb,y      ; clear table entry
-        lda     fd_table+ft_flag,y
-        and     #16                     ; opened by app?
-        eor     #16                     ; return set Z if yes
-cont:   rts
-
-ok_notlast:
-        lda     #1                      ; clears Z
-        jmp     retiocb
-
-.endproc        ; fdtoiocb_down
-
-inval:  ldx     #$ff                    ; sets N
-        rts
-
-
-; clear iocb except for ICHID field
-; expects X to be index to IOCB (0,$10,$20,etc.)
-; all registers destroyed
-
-.proc   clriocb
-
-        inx                     ; don't clear ICHID
-        ldy     #15
-        lda     #0
-loop:   sta     ICHID,x
-        inx
-        dey
-        bne     loop
-        rts
-
-.endproc
-
-
-; decrements usage counter for fd
-; if 0 reached, it's marked as unused
-; get fd index in tmp2
-; Y register preserved
-.proc   fddecusage
-
-        lda     tmp2                    ; get fd
-        cmp     #MAX_FD_INDEX
-        bcs     ret                     ; invalid index, do nothing
-        tax
-        lda     fd_index,x
-        pha
-        lda     #$ff
-        sta     fd_index,x
-        pla
-        asl     a                       ; create index into fd table
-        asl     a
-        tax
-        lda     #$ff
-        cmp     fd_table+ft_iocb,x      ; entry in use?
-        beq     ret                     ; no, do nothing
-        lda     fd_table+ft_usa,x       ; get usage counter
-        beq     ret                     ; 0? should not happen
-        sec
-        sbc     #1                      ; decrement by one
-        sta     fd_table+ft_usa,x
-        bne     ret                     ; not 0
-        lda     #$ff                    ; 0, table entry unused now
-        sta     fd_table+ft_iocb,x      ; clear table entry
-ret:    rts
-
-.endproc        ; fddecusage
-
-
-; newfd
-;
-; called from open() function
-; finds a fd to use for an open request
-; checks whether it's a device or file (file: characters follow the ':')
-; files always get an exclusive slot
-; for devices it is checked whether the device is already open, and if yes,
-; a link to this open device is returned
-;
-; Calling parameters:
-;       tmp3 - length of filename + 1
-;       AX   - points to filename
-;       Y    - iocb to use (if we need a new open)
-; Return parameters:
-;       tmp2 - fd num ($ff and C=0 in case of error - no free slot)
-;       C    - 0/1 for no open needed/open should be performed
-; all registers preserved!
-
-        .bss
-
-; local variables:
-loc_Y:          .res    1
-loc_ptr4_l:     .res    1
-loc_ptr4_h:     .res    1
-loc_tmp1:       .res    1
-loc_devnum:     .res    1
-loc_size:       .res    1
-
-        .code
-
-.proc   newfd
-
-        pha
-        txa
-        pha
-        tya
-        pha
-
-        ldx     #0
-        stx     loc_devnum
-        lda     tmp1
-        sta     loc_tmp1
-        stx     tmp1            ; init tmp1
-        stx     tmp2            ; init tmp2
-        lda     ptr4+1
-        sta     loc_ptr4_h
-        lda     ptr4
-        sta     loc_ptr4_l
-        pla
-        sta     loc_Y
-        pla
-        sta     ptr4+1
-        pla
-        sta     ptr4
-
-        ; ptr4 points to filename
-
-        ldy     #1
-        lda     #':'
-        cmp     (ptr4),y        ; "X:"
-        beq     colon1
-        iny
-        cmp     (ptr4),y        ; "Xn:"
-        beq     colon2
-
-        ; no colon there!? OK, then we use a fresh iocb....
-        ; return error here? no, the subsequent open call should fail
-
-do_open_nd:     ; do open and don't remember device
-        lda     #2
-        sta     tmp1
-do_open:lda     tmp1
-        ora     #1
-        sta     tmp1            ; set flag to return 'open needed' : C = 1
-        ldx     #ft_iocb
-        ldy     #$ff
-srchfree:
-        tya
-        cmp     fd_table,x      ; check ft_iocb field for $ff
-        beq     freefnd         ; found a free slot
-        txa
-        clc
-        adc     #ft_entrylen
-        tax
-        cmp     #(MAX_FD_VAL*4)+ft_iocb ; end of table reached?
-        bcc     srchfree
-
-; error: no free slot found
-noslot: ldx     #0
-        stx     tmp1            ; return with C = 0
-        dex
-        stx     tmp2            ; iocb: $ff marks error
-        jmp     finish
-
-; found a free slot
-freefnd:txa
-        sec
-        sbc     #ft_iocb        ; normalize
-        tax
-        lsr     a
-        lsr     a
-        sta     tmp2            ; return fd
-        lda     #2
-        bit     tmp1            ; remember device?
-        beq     l1              ; yes
-        lda     #0              ; no, put 0 in field
-        beq     l2
-
-l1:     ldy     #0
-        lda     (sp),y                  ; get device
-l2:     sta     fd_table+ft_dev,x       ; set device
-        lda     #1
-        sta     fd_table+ft_usa,x       ; set usage counter
-        lda     loc_Y
-        sta     fd_table+ft_iocb,x      ; set iocb index
-        lda     loc_devnum
-        and     #7                      ; device number is 3 bits
-        ora     #16                     ; indicated a fd actively opened by the app
-        sta     fd_table+ft_flag,x
-        lda     tmp2
-        jsr     fdt_to_fdi              ; get new index
-noslot1:bcs     noslot                  ; no one available (noslot1: helper label for branch out of range)
-        ;cmp    #$ff                    ; no one available
-        ;beq    noslot  ;@@@ cleanup needed
-        sta     tmp2                    ; return index
-        jmp     finish
-
-; string in "Xn:xxx" format
-colon2: dey
-        lda     (ptr4),y        ; get device number
-        sec
-        sbc     #'0'
-        and     #7
-        sta     loc_devnum
-        sta     tmp2            ; save it for speed later here also
-        lda     #4              ; max. length if only  device + number ("Xn:")
-        cmp     tmp3
-        bcc     do_open_nd      ; string is longer -> contains filename
-        bcs     check_dev       ; handle device only string
-
-; string in "X:xxx" format
-colon1: lda     #3              ; max. length if device only ("X:")
-        cmp     tmp3
-        bcc     do_open_nd      ; string is longer -> contains filename
-
-; get device and search it in fd table
-check_dev:
-        ldy     #0
-        lda     (ptr4),y        ; get device id
-        tay
-        ldx     #(MAX_FD_VAL*4) - ft_entrylen
-srchdev:lda     #$ff
-        cmp     fd_table+ft_iocb,x      ; is entry valid?
-        beq     srch2                   ; no, skip this entry
-        tya
-        cmp     fd_table+ft_dev,x
-        beq     fnddev
-srch2:  txa
-        sec
-        sbc     #ft_entrylen+1
-        tax
-        bpl     srchdev
-
-; not found, open new iocb
-        jmp     do_open
-
-; found device in table, check device number (e.g R0 - R3)
-fnddev: lda     fd_table+ft_flag,x
-        and     #7
-        cmp     tmp2                    ; contains devnum
-        bne     srch2                   ; different device numbers
-
-; found existing open iocb with same device
-        txa
-        lsr     a
-        lsr     a
-        sta     tmp2
-        inc     fd_table+ft_usa,x       ; increment usage counter
-        jsr     fdt_to_fdi              ; get new index
-        bcs     noslot1                 ; no one available
-        sta     tmp2                    ; return index
-
-; clean up and go home
-finish: lda     ptr4
-        pha
-        lda     ptr4+1
-        pha
-        lda     loc_Y
-        pha
-        lda     tmp1
-        pha
-        lda     loc_tmp1
-        sta     tmp1
-        pla
-        lsr     a                       ; set C as needed
-
-        pla
-        tay
-        pla
-        tax
-        pla
-        rts
-
-.endproc        ; newfd
-
diff --git a/libsrc/atari/fdtoiocb.s b/libsrc/atari/fdtoiocb.s
deleted file mode 100644 (file)
index bd8c92d..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-;
-; Christian Groessler, May-2000
-; Moved from fdtable.s to it's own file by Daniel Serpell, 2009.
-;
-; Convert file descriptor to IOCB number
-;
-
-        .include "atari.inc"
-        .include "fd.inc"
-        .import fd_table,fd_index
-        .export fdtoiocb
-
-        .code
-
-; gets fd in ax
-; return iocb index in A, fd_table index in X
-; return N bit set for invalid fd
-; all registers destroyed
-.proc   fdtoiocb
-
-        cpx     #0
-        bne     inval
-        cmp     #MAX_FD_INDEX
-        bcs     inval
-        tax
-        lda     fd_index,x
-        asl     a                       ; create index into fd table
-        asl     a
-        tax
-        lda     #$ff
-        cmp     fd_table+ft_iocb,x      ; entry in use?
-        beq     inval                   ; no, return error
-        lda     fd_table+ft_usa,x       ; get usage counter
-        beq     inval                   ; 0? should not happen
-        lda     fd_table+ft_iocb,x      ; get iocb
-        rts
-
-inval:  ldx     #$ff                    ; sets N
-        rts
-
-.endproc        ; fdtoiocb
diff --git a/libsrc/atari/findfreeiocb.inc b/libsrc/atari/findfreeiocb.inc
deleted file mode 100644 (file)
index 92140ef..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-; find a free iocb
-; no entry parameters
-; return ZF = 0/1 for not found/found
-;        index in X if found
-; all registers destroyed
-
-.proc   findfreeiocb
-
-        ldx     #0
-        ldy     #$FF
-loop:   tya
-        cmp     ICHID,x
-        beq     found
-        txa
-        clc
-        adc     #$10
-        tax
-        cmp     #$80
-        bcc     loop
-        inx                     ; return ZF cleared
-found:  rts
-
-.endproc        ; findfreeiocb
diff --git a/libsrc/atari/findfreeiocb.s b/libsrc/atari/findfreeiocb.s
deleted file mode 100644 (file)
index a500b1f..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-;
-; Christian Groessler, June-2013
-;
-
-        .include "atari.inc"
-        .export findfreeiocb
-        .include "findfreeiocb.inc"
diff --git a/libsrc/atari/get_tv.s b/libsrc/atari/get_tv.s
deleted file mode 100644 (file)
index 76661bf..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; Christian Groessler, July 2004
-;
-; unsigned char get_tv(void)
-;
-; returns the TV system the machine is using
-; 0 - NTSC
-; 1 - PAL
-;
-
-
-        .include        "atari.inc"
-        .include        "get_tv.inc"
-
-.proc   _get_tv
-
-        ldx     #TV::NTSC       ; Assume NTSC
-        lda     PAL             ; use hw register, PALNTS is only supported on XL/XE ROM
-        and     #$0e
-        bne     @NTSC
-        inx                     ; = TV::PAL
-@NTSC:  txa
-        ldx     #0              ; Expand to int
-        rts
-
-.endproc
diff --git a/libsrc/atari/getargs.s b/libsrc/atari/getargs.s
deleted file mode 100644 (file)
index fdae553..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-; get arguments from command line (when DOS supports it)
-
-; Freddy Offenga, 4/21/2000
-
-; initmainargs is forcibly included by the C compiler if it encounters a
-; main() function with arguments. Therefore it isn't referenced by the
-; startup code but is nevertheless included in the compiled program when
-; needed.
-
-MAXARGS = 16            ; max. amount of arguments in arg. table
-CL_SIZE = 64            ; command line buffer size
-SPACE   = 32            ; SPACE char.
-
-        .include        "atari.inc"
-        .import         __argc, __argv
-        .importzp       ptr1
-        .import         __dos_type
-        .constructor    initmainargs,25
-
-; --------------------------------------------------------------------------
-; Get command line
-
-.segment        "INIT"
-
-initmainargs:
-        lda     #0
-        sta     __argc
-        sta     __argc+1
-        sta     __argv
-        sta     __argv+1
-
-        lda     __dos_type      ; which DOS?
-        cmp     #ATARIDOS
-        beq     nargdos         ; DOS does not support arguments
-        cmp     #MYDOS
-        bne     argdos          ; DOS supports arguments
-nargdos:rts
-
-; Initialize ourcl buffer
-
-argdos: lda     #ATEOL
-        sta     ourcl+CL_SIZE
-
-; Move SpartaDOS command line to our own buffer
-
-        lda     DOSVEC
-        clc
-        adc     #<LBUF
-        sta     ptr1
-        lda     DOSVEC+1
-        adc     #>LBUF
-        sta     ptr1+1
-
-        ldy     #0
-cpcl:   lda     (ptr1),y
-        sta     ourcl,y
-        iny
-        cmp     #ATEOL
-        beq     movdon
-        cpy     #CL_SIZE
-        bne     cpcl
-
-movdon: lda     #0
-        sta     ourcl,y         ; null terminate behind ATEOL
-
-; Turn command line into argv table
-
-        ;ldy    #0
-        tay
-eatspc: lda     ourcl,y         ; eat spaces
-        cmp     #ATEOL
-        beq     finargs
-        cmp     #SPACE
-        bne     rpar            ; begin of argument found
-        iny
-        cpy     #CL_SIZE
-        bne     eatspc
-        beq     finargs         ; only spaces is no argument
-
-; Store argument vector
-
-rpar:   lda     __argc          ; low-byte
-        asl
-        tax                     ; table index
-        tya                     ; ourcl index
-        clc
-        adc     #<ourcl
-        sta     argv,x
-        lda     #>ourcl
-        adc     #0
-        sta     argv+1,x
-        ldx     __argc
-        inx
-        stx     __argc
-        cpx     #MAXARGS
-        beq     finargs
-
-; Skip this arg.
-
-skiparg:
-        ldx     ourcl,y
-        cpx     #ATEOL          ; end of line?
-        beq     eopar
-        cpx     #SPACE
-        beq     eopar
-        iny
-        cpy     #CL_SIZE
-        bne     skiparg
-
-; End of arg. -> place 0
-
-eopar:
-        lda     #0
-        sta     ourcl,y
-        iny                     ; y behind arg.
-        cpx     #ATEOL          ; was it the last arg?
-        bne     eatspc
-
-; Finish args
-
-finargs:
-        lda     __argc
-        asl           
-        tax
-        lda     #0
-        sta     argv,x
-        sta     argv+1,x
-        lda     #<argv
-        ldx     #>argv
-        sta     __argv
-        stx     __argv+1
-        rts
-
-; --------------------------------------------------------------------------
-; Data
-
-.bss
-
-argv:   .res    (1 + MAXARGS) * 2
-
-; Buffer for command line / argv strings
-
-ourcl:  .res    CL_SIZE+1
diff --git a/libsrc/atari/getdefdev.s b/libsrc/atari/getdefdev.s
deleted file mode 100644 (file)
index 13aa12e..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-;
-; Freddy Offenga & Christian Groessler, December 2004
-;
-; function to get default device: char *_getdefdev(void);
-;
-; SpartaDOS:
-; the ZCRNAME routine is only used to get the default drive because
-; ZCRNAME has two disadvantages:
-; 1. It will convert D: into D1: instead of Dn: (n = default drive)
-; 2. It will give a 'no arguments' status if it detects something
-;    like Dn: (without filename).
-;
-; OS/A+ DOS:
-; ZCRNAME is slightly different from SpartaDOS. It will convert D:
-; into Dn: where n is the default drive.
-
-        .include        "atari.inc"
-        .import         __dos_type
-        .export         __getdefdev             ; get default device
-        .export         __defdev                ; this is the default device string (e.g. "D1:")
-.ifdef  DYNAMIC_DD
-        .constructor    __getdefdev,24
-.endif
-
-; Get default device (LBUF will be destroyed!!)
-
-__getdefdev:
-
-        lda     __dos_type      ; which DOS?
-        cmp     #ATARIDOS
-        beq     finish
-        cmp     #MYDOS
-        beq     finish
-
-        ldy     #BUFOFF
-        lda     #0
-        sta     (DOSVEC),y      ; reset buffer offset
-
-; Store dummy argument
-
-        ldy     #LBUF
-        lda     #'X'
-        sta     (DOSVEC),y
-        iny
-        lda     #ATEOL
-        sta     (DOSVEC),y
-
-; One extra store to avoid the buggy sequence from OS/A+ DOS:
-; <D><RETURN><:> => drive number = <RETURN>
-
-        iny
-        sta     (DOSVEC),y
-
-; Create crunch vector
-
-        ldy     #ZCRNAME+1
-        lda     (DOSVEC),y
-        sta     crvec+1
-        iny
-        lda     (DOSVEC),y
-        sta     crvec+2
-
-crvec:  jsr     $FFFF           ; will be set to crunch vector
-
-; Get default device
-
-        ldy     #COMFNAM        ;  COMFNAM is always "Dn:"
-        lda     (DOSVEC),y
-        sta     __defdev
-        iny
-        lda     (DOSVEC),y
-        sta     __defdev+1
-
-; Return pointer to default device
-
-finish: lda     #<__defdev
-        ldx     #>__defdev
-        rts
-
-        .data
-
-; Default device
-
-__defdev:
-.ifdef  DEFAULT_DEVICE
-        .byte   'D', '0'+DEFAULT_DEVICE, ':', 0
-.else
-        .byte   "D1:", 0
-.endif
-
diff --git a/libsrc/atari/getfd.s b/libsrc/atari/getfd.s
deleted file mode 100644 (file)
index a4e3483..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-;
-; Christian Groessler, Oct-2000
-;
-; allocates a new fd in the indirection table
-;
-
-        .include "atari.inc"
-        .include "fd.inc"
-        .include "_file.inc"
-        .importzp tmp1
-        .import fd_table, fd_index
-
-        .export fdt_to_fdi,getfd
-
-        .code
-
-; fdt_to_fdi
-; returns a fd_index entry pointing to the given ft_table entry
-; get fd_table entry in A
-; return C = 0/1 for OK/error
-; return fd_index entry in A if OK
-; registers destroyed
-.proc   fdt_to_fdi
-
-        tay
-        lda     #$ff
-        tax
-        inx
-loop:   cmp     fd_index,x
-        beq     found
-        inx
-        cpx     #MAX_FD_INDEX
-        bcc     loop
-        rts
-
-found:  tya
-        sta     fd_index,x
-        txa
-        clc
-        rts
-
-.endproc
-
-; getfd
-; get a new fd pointing to a ft_table entry
-; usage counter of ft_table entry incremented
-; A - fd_table entry
-; return C = 0/1 for OK/error
-; returns fd in A if OK
-; registers destroyed, tmp1 destroyed
-.proc   getfd
-
-        sta     tmp1            ; save fd_table entry
-        jsr     fdt_to_fdi
-        bcs     error
-
-        pha
-        lda     tmp1
-        asl     a
-        asl     a                       ; also clears C
-        tax
-        inc     fd_table+ft_usa,x       ; increment usage counter
-        pla
-error:  rts
-
-.endproc
diff --git a/libsrc/atari/gotox.s b/libsrc/atari/gotox.s
deleted file mode 100644 (file)
index d849bc7..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Christian Groessler, 19-Feb-2000
-;
-; void gotox (unsigned char x);
-;
-
-        .include        "atari.inc"
-        .export         _gotox
-        .import         setcursor
-
-_gotox:
-        sta     COLCRS          ; Set X
-        lda     #0
-        sta     COLCRS+1
-        jmp     setcursor
diff --git a/libsrc/atari/gotoxy.s b/libsrc/atari/gotoxy.s
deleted file mode 100644 (file)
index 1f00c3b..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; void gotoxy (unsigned char x, unsigned char y);
-;
-
-        .include "atari.inc"
-
-        .export         _gotoxy
-        .import         popa
-        .import         setcursor
-
-_gotoxy:                        ; Set the cursor position
-        sta     ROWCRS          ; Set Y
-        jsr     popa            ; Get X
-        sta     COLCRS          ; Set X
-        lda     #0
-        sta     COLCRS+1        ;
-        jmp     setcursor
diff --git a/libsrc/atari/gotoy.s b/libsrc/atari/gotoy.s
deleted file mode 100644 (file)
index 8a17096..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Christian Groessler, 19-Feb-2000
-;
-; void gotoy (unsigned char y);
-;
-
-        .include        "atari.inc"
-        .export         _gotoy
-        .import         setcursor
-
-_gotoy:
-        sta     ROWCRS          ; Set Y
-        jmp     setcursor
diff --git a/libsrc/atari/graphics.s b/libsrc/atari/graphics.s
deleted file mode 100644 (file)
index ab26ed0..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-;
-; Christian Groessler, June 2004
-;
-; this file provides an equivalent to the BASIC GRAPHICS function
-;
-; int __fastcall__ _graphics(unsigned char mode);
-;
-;
-
-        .export __graphics
-
-        .import findfreeiocb
-        .import __oserror
-        .import fddecusage
-        .import clriocb
-        .import fdtoiocb
-        .import newfd
-        .import scrdev
-        .importzp tmp1,tmp2,tmp3
-
-        .include        "atari.inc"
-        .include        "errno.inc"
-
-        .code
-
-; set new grapics mode
-; gets new mode in A
-; returns handle or -1 on error
-; uses tmp1, tmp2, tmp3, tmp4 (in subroutines)
-
-.proc   __graphics
-
-;       tax
-;       and     #15             ; get required graphics mode
-;       cmp     #12
-;       bcs     invmode         ; invalid mode
-;       txa
-;       and     #$c0            ; invalid bits set?
-;       bne     invmode
-
-;       stx     tmp1
-        sta     tmp1            ; remember graphics mode
-
-parmok: jsr     findfreeiocb
-        beq     iocbok          ; we found one
-
-        lda     #<EMFILE        ; "too many open files"
-seterr: jsr     __mappederrno   ; @@@ probably not correct to set errno here @@@
-        rts                     ; return -1
-
-;invmode:ldx    #>EINVAL
-;       lda     #<EINVAL
-;       bne     seterr
-
-iocbok: txa
-        tay                     ; move iocb # into Y
-        lda     #3
-        sta     tmp3            ; name length + 1
-        lda     #<scrdev
-        ldx     #>scrdev
-        jsr     newfd
-        tya
-        tax
-        bcs     doopen          ; C set: open needed
-
-        ldx     #0
-        lda     tmp2            ; get fd used
-        jsr     fdtoiocb
-        tax
-
-doopen: txa
-        ;brk
-        pha
-        jsr     clriocb
-        pla
-        tax
-        lda     #<scrdev
-        sta     ICBAL,x
-        lda     #>scrdev
-        sta     ICBAH,x
-        lda     #OPEN
-        sta     ICCOM,x
-        lda     tmp1            ; get requested graphics mode
-        and     #15
-        sta     ICAX2,x
-        lda     tmp1
-        and     #$30
-        eor     #$10
-        ora     #12
-        sta     ICAX1,x
-
-        jsr     CIOV
-        bmi     cioerr
-
-        lda     tmp2            ; get fd
-        ldx     #0
-        stx     __oserror
-        rts
-
-cioerr: sty     tmp3            ; remember error code
-        lda     #CLOSE
-        sta     ICCOM,x
-        jsr     CIOV            ; close IOCB again since open failed
-        jsr     fddecusage      ; and decrement usage counter of fd
-        lda     tmp3            ; put error code into A
-        jmp     __mappederrno
-
-.endproc        ; __graphics
diff --git a/libsrc/atari/initcwd.s b/libsrc/atari/initcwd.s
deleted file mode 100644 (file)
index d7b5743..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-;
-; Stefan Haubenthal, 2008-04-29
-;
-
-        .export         initcwd
-        .import         findfreeiocb
-        .import         __cwd
-        .include        "atari.inc"
-
-.proc   initcwd
-
-        jsr     findfreeiocb
-        bne     oserr
-        lda     #GETCWD
-        sta     ICCOM,x
-        lda     #<__cwd
-        sta     ICBLL,x
-        lda     #>__cwd
-        sta     ICBLH,x
-        jsr     CIOV
-        bmi     oserr
-        ldx     #0              ; ATEOL -> \0
-:       lda     __cwd,x
-        inx
-        cmp     #ATEOL
-        bne     :-
-        lda     #0
-        sta     __cwd-1,x
-oserr:  rts
-
-.endproc
diff --git a/libsrc/atari/inviocb.s b/libsrc/atari/inviocb.s
deleted file mode 100644 (file)
index c1c27ee..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; set EINVAL error code and returns -1
-;
-        .include "errno.inc"
-
-        .export __inviocb
-
-__inviocb:
-        lda     #<EINVAL
-        jmp     __directerrno
diff --git a/libsrc/atari/irq.s b/libsrc/atari/irq.s
deleted file mode 100644 (file)
index 0a8efe4..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-;
-; IRQ handling (ATARI version)
-;
-
-        .export         initirq, doneirq
-        .import         callirq
-
-        .include        "atari.inc"
-.ifdef __ATARIXL__
-        .import         __CHARGEN_START__
-        .include        "romswitch.inc"
-.endif
-
-; ------------------------------------------------------------------------
-
-.segment        "INIT"
-
-initirq:
-        lda     VVBLKD
-        ldx     VVBLKD+1
-        sta     IRQInd+1
-        stx     IRQInd+2
-        lda     #7
-        ldy     #<IRQStub
-        ldx     #>IRQStub
-        jmp     SETVBV
-
-; ------------------------------------------------------------------------
-
-.code
-
-doneirq:
-        lda     #7
-        ldy     IRQInd+1
-        ldx     IRQInd+2
-        jmp     SETVBV
-
-; ------------------------------------------------------------------------
-
-.segment        "LOWCODE"
-
-IRQStub:
-        cld                             ; Just to be sure
-.ifdef __ATARIXL__
-.ifdef CHARGEN_RELOC
-        lda     CHBAS
-        pha
-.endif
-        lda     PORTB
-        pha
-        and     #$FE
-        sta     PORTB                   ; disable ROM
-        set_chbase >__CHARGEN_START__
-.endif
-        jsr     callirq                 ; Call the functions
-.ifdef __ATARIXL__
-        pla
-        sta     PORTB                   ; restore old ROM setting
-.ifdef CHARGEN_RELOC
-        pla
-        sta     CHBAS
-        sta     CHBASE
-.endif
-.endif
-        jmp     IRQInd                  ; Jump to the saved IRQ vector
-
-; ------------------------------------------------------------------------
-
-.data
-
-IRQInd: jmp     $0000
diff --git a/libsrc/atari/joy/atrmj8.s b/libsrc/atari/joy/atrmj8.s
deleted file mode 100644 (file)
index 4676607..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-;
-; MultiJoy joystick driver for the Atari. May be used multiple times when linked
-; to the statically application.
-;
-; Ullrich von Bassewitz, 2002-12-21
-; Stefan Haubenthal, 2009-04-10
-; Using code from Carsten Strotmann and help from Christian Groessler
-;
-
-        .include        "zeropage.inc"
-
-        .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-        .include        "atari.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-.ifdef __ATARIXL__
-        module_header   _atrxmj8_joy
-.else
-        module_header   _atrmj8_joy
-.endif
-
-; Driver signature
-
-        .byte   $6A, $6F, $79           ; "joy"
-        .byte   JOY_API_VERSION         ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte   $02                     ; JOY_UP
-        .byte   $04                     ; JOY_DOWN
-        .byte   $08                     ; JOY_LEFT
-        .byte   $10                     ; JOY_RIGHT
-        .byte   $01                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 not available
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
-; Jump table.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READJOY
-        .addr   0                       ; IRQ entry not used
-
-; ------------------------------------------------------------------------
-; Constants
-
-JOY_COUNT       = 8             ; Number of joysticks we support
-
-
-; ------------------------------------------------------------------------
-; Data.
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #$30
-        sta     PACTL
-        lda     #$F0
-        sta     PORTA
-        lda     #$34
-        sta     PACTL
-        lda     #JOY_ERR_OK
-        ldx     #0
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:
-        lda     #JOY_COUNT
-        ldx     #0
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
-
-READJOY:
-        asl     a
-        asl     a
-        asl     a
-        asl     a
-        sta     PORTA
-
-; Read joystick
-
-        lda     PORTA           ; get position
-        and     #%00001111
-        asl     a
-        ora     TRIG0           ; add button information
-        eor     #%00011111
-        ldx     #0              ; fix X
-        rts
diff --git a/libsrc/atari/joy/atrstd.s b/libsrc/atari/joy/atrstd.s
deleted file mode 100644 (file)
index fc7aa55..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-;
-; Standard joystick driver for the Atari. May be used multiple times when linked
-; to the statically application.
-;
-; Ullrich von Bassewitz, 2002-12-21
-; Using the readjoy code from Christian Groessler
-;
-
-        .include        "zeropage.inc"
-
-        .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-        .include        "atari.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-.ifdef __ATARIXL__
-        module_header   _atrxstd_joy
-.else
-        module_header   _atrstd_joy
-.endif
-
-; Driver signature
-
-        .byte   $6A, $6F, $79           ; "joy"
-        .byte   JOY_API_VERSION         ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 not available
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
-; Jump table.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READJOY
-        .addr   0                       ; IRQ entry not used
-
-; ------------------------------------------------------------------------
-; Constants
-
-JOY_COUNT       = 4             ; Number of joysticks we support
-
-
-; ------------------------------------------------------------------------
-; Data.
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #JOY_ERR_OK
-        ldx     #0
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:
-        lda     #JOY_COUNT
-        ldx     $fcd8
-        cpx     #$a2
-        beq     _400800
-        lsr     a               ; XL and newer machines only have 2 ports
-_400800:
-        ldx     #0
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
-
-READJOY:
-        and     #3              ; fix joystick number
-        tax                     ; Joystick number (0-3) into X
-
-; Read joystick
-
-        lda     STRIG0,x        ; get button
-        asl     a
-        asl     a
-        asl     a
-        asl     a
-        ora     STICK0,x        ; add position information
-        eor     #$1F
-        ldx     #0              ; fix X
-        rts
diff --git a/libsrc/atari/joy_stat_stddrv.s b/libsrc/atari/joy_stat_stddrv.s
deleted file mode 100644 (file)
index 4528aa2..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Address of the static standard joystick driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void joy_static_stddrv[];
-;
-
-        .export _joy_static_stddrv
-        .ifdef  __ATARIXL__
-        .import _atrxstd_joy
-        .else
-        .import _atrstd_joy
-        .endif
-
-.rodata
-
-        .ifdef  __ATARIXL__
-_joy_static_stddrv := _atrxstd_joy
-        .else
-_joy_static_stddrv := _atrstd_joy
-        .endif
diff --git a/libsrc/atari/joy_stddrv.s b/libsrc/atari/joy_stddrv.s
deleted file mode 100644 (file)
index e82dadb..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Name of the standard joystick driver
-;
-; Ullrich von Bassewitz, 2002-12-21
-;
-; const char joy_stddrv[];
-;
-
-        .export _joy_stddrv
-
-.rodata
-
-_joy_stddrv:
-        .ifdef  __ATARIXL__
-                .asciiz "atrxstd.joy"
-        .else
-                .asciiz "atrstd.joy"
-        .endif
diff --git a/libsrc/atari/kbhit.s b/libsrc/atari/kbhit.s
deleted file mode 100644 (file)
index 09ea8a9..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Christian Groessler, 19-Feb-2000
-;
-; unsigned char kbhit (void);
-;
-
-        .export         _kbhit
-        .import         return1
-
-        .include        "atari.inc"
-
-.proc   _kbhit
-
-        ldx     CH              ; last pressed key
-        inx                     ; 255 means "no key"
-        bne     L1
-        txa                     ; X = A = 0
-        rts
-L1:     jmp     return1
-
-.endproc
-
-
diff --git a/libsrc/atari/libref.s b/libsrc/atari/libref.s
deleted file mode 100644 (file)
index 171bd6d..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Oliver Schmidt, 2013-05-31
-;
-
-        .export         em_libref, joy_libref, tgi_libref
-        .import         _exit
-
-em_libref       := _exit
-joy_libref      := _exit
-.ifdef __ATARIXL__
-        .import CIO_handler
-tgi_libref      := CIO_handler
-.else
-tgi_libref      := _exit
-.endif
diff --git a/libsrc/atari/lseek.s b/libsrc/atari/lseek.s
deleted file mode 100644 (file)
index 889976f..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-;
-; Christian Groessler, May 2002
-;
-; this file provides the lseek() function
-;
-; off_t __fastcall__ lseek(int fd, off_t offset, int whence);
-;
-
-
-        .export         _lseek
-        .import         incsp6,__oserror
-        .import         __inviocb,ldax0sp,ldaxysp,fdtoiocb
-        .import         __dos_type
-        .import         fd_table
-        .importzp       sreg,ptr1,ptr2,ptr3,ptr4
-        .importzp       tmp1,tmp2,tmp3
-        .include        "atari.inc"
-        .include        "errno.inc"
-        .include        "fd.inc"
-
-; seeking not supported, return -1 and ENOSYS errno value
-no_supp:jsr     incsp6
-        lda     #<ENOSYS
-        jsr     __directerrno   ; returns with $FFFF in AX
-        sta     sreg
-        sta     sreg+1
-        rts
-
-parmerr:
-iocberr:jsr     incsp6
-        ldx     #255
-        stx     sreg
-        stx     sreg+1
-        jmp     __inviocb
-
-
-; lseek() entry point
-
-.proc   _lseek
-
-        cpx     #0              ; sanity check whence parameter
-        bne     parmerr
-        cmp     #3              ; valid values are 0..2
-        bcs     parmerr
-        sta     tmp1            ; remember whence
-
-        ldy     #5
-        jsr     ldaxysp         ; get fd
-        jsr     fdtoiocb        ; convert to iocb in A, fd_table index in X
-        bmi     iocberr
-        sta     tmp3            ; remember iocb
-
-        jsr     chk_supp        ; check, whether seeking is supported by DOS/Disk
-        bcc     no_supp
-
-        ldx     tmp1            ; whence
-        beq     cur
-        dex
-        beq     end
-
-; SEEK_SET
-        dex
-        stx     ptr3
-        stx     ptr3+1
-        stx     ptr4
-        stx     ptr4+1
-        beq     cont
-
-; SEEK_CUR
-cur:    ldx     tmp3
-        lda     #NOTE
-        sta     ICCOM,x
-        jsr     CIOV            ; read it
-        bmi     xxerr
-l01:    lda     ICAX3,x         ; low byte of position
-        sta     ptr3
-        lda     ICAX4,x         ; med byte of position
-        sta     ptr3+1
-        lda     ICAX5,x         ; high byte of position
-        sta     ptr4
-        lda     #0
-        sta     ptr4+1
-        beq     cont
-
-; SEEK_END
-end:    ldx     tmp3
-        lda     #GETFL
-        sta     ICCOM,x
-        jsr     CIOV
-        bpl     l01
-
-; error returned from CIO
-xxerr:  tya
-        pha
-        jsr     incsp6
-        pla
-        jsr     __mappederrno   ; returns with $FFFF in AX
-        sta     sreg
-        sta     sreg+1
-        rts
-
-; check for offset 0, SEEK_CUR (get current position)
-cont:   ldy     #3
-        jsr     ldaxysp         ; get upper word
-        sta     ptr1
-        stx     ptr1+1
-        jsr     ldax0sp         ; get lower word
-        stx     tmp2
-        ora     tmp2
-        ora     ptr1
-        ora     ptr1+1
-        bne     seek
-        lda     tmp1            ; whence (0 = SEEK_CUR)
-        bne     seek
-
-; offset 0, SEEK_CUR: return current fp
-ret:    jsr     incsp6
-
-        lda     ptr4+1
-        sta     sreg+1
-        lda     ptr4
-        sta     sreg
-        ldx     ptr3+1
-        lda     ptr3
-
-.if 0
-        ; return exactly the position DOS has
-        ldx     tmp3
-        lda     #NOTE
-        sta     ICCOM,x
-        jsr     CIOV            ; read it
-        bmi     xxerr
-        lda     #0
-        sta     sreg+1
-        lda     ICAX5,x         ; high byte of position
-        sta     sreg
-        lda     ICAX3,x         ; low byte of position
-        pha
-        lda     ICAX4,x         ; med byte of position
-        tax
-        pla
-.endif
-
-        rts
-
-parmerr1: jmp   parmerr
-
-; we have to call POINT
-seek:   jsr     ldax0sp         ; get lower word of new offset
-        clc
-        adc     ptr3
-        sta     ptr3
-        txa
-        adc     ptr3+1
-        sta     ptr3+1
-        lda     ptr1
-        adc     ptr4
-        sta     ptr4
-        lda     ptr1+1
-        adc     ptr4+1
-        sta     ptr4+1
-        bne     parmerr1        ; resulting value too large
-
-        ldx     tmp3            ; IOCB
-        lda     ptr3
-        sta     ICAX3,x
-        lda     ptr3+1
-        sta     ICAX4,x
-        lda     ptr4
-        sta     ICAX5,x
-        lda     #POINT
-        sta     ICCOM,x
-        jsr     CIOV
-        bpl     ret
-        bmi     xxerr
-
-.endproc
-
-; check, whether seeking is supported
-; tmp3:         iocb
-; X:            index into fd_table
-;
-; On non-SpartaDOS, seeking is not supported.
-; We check, whether CIO function 39 (get file size) returns OK.
-; If yes, NOTE and POINT work with real file offset.
-; If not, NOTE and POINT work with the standard ScNum/Offset values.
-; We remember a successful check in fd_table.ft_flag, bit 3.
-
-chk_supp:
-        lda     fd_table+ft_flag,x
-        and     #8
-        bne     supp
-
-; do the test
-        lda     __dos_type
-        cmp     #SPARTADOS
-        bne     ns1
-        txa
-        pha
-        lda     DOS+1           ; get SpartaDOS version
-        cmp     #$40
-        bcs     supp1           ; SD-X (ver 4.xx) supports seeking on all disks
-        ldx     tmp3            ; iocb to use
-        lda     #GETFL
-        sta     ICCOM,x
-        jsr     CIOV
-        bmi     notsupp         ; error code ? should be 168 (invalid command)
-
-; seeking is supported on this DOS/Disk combination
-
-supp1:  pla
-        tax
-        lda     #8
-        ora     fd_table+ft_flag,x
-        sta     fd_table+ft_flag,x
-supp:   sec
-        rts
-
-notsupp:pla
-ns1:    clc
-        rts
-
diff --git a/libsrc/atari/mcbdefault.s b/libsrc/atari/mcbdefault.s
deleted file mode 100644 (file)
index 75a7c74..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-;
-; This file defines the default mouse callback
-;
-
-.import _mouse_pm_callbacks
-.export _mouse_def_callbacks
-
-_mouse_def_callbacks := _mouse_pm_callbacks
diff --git a/libsrc/atari/mcbpm-shape.s b/libsrc/atari/mcbpm-shape.s
deleted file mode 100644 (file)
index abedb15..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-;
-; P/M mouse shape default definition
-;
-; Christian Groessler, 11.04.2014
-;
-; Note that the height of the mouse cursor must not exceed 32
-; lines, otherwise the display routines won't do The Right
-; Thing(tm).
-;
-
-        .export mouse_pm_bits
-        .export mouse_pm_height    : zeropage
-        .export mouse_pm_hotspot_x : zeropage
-        .export mouse_pm_hotspot_y : zeropage
-
-        .rodata
-
-mouse_pm_bits:
-        .byte   %11110000
-        .byte   %11000000
-        .byte   %10100000
-        .byte   %10010000
-        .byte   %10001000
-        .byte   %00000100
-        .byte   %00000010
-
-mouse_pm_height = <(* - mouse_pm_bits)
-
-; hot spot is upper left corner
-mouse_pm_hotspot_x = 0
-mouse_pm_hotspot_y = 0
diff --git a/libsrc/atari/mcbpm.s b/libsrc/atari/mcbpm.s
deleted file mode 100644 (file)
index b546fac..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-;
-; P/M mouse callbacks for the Ataris
-;
-; Christian Groessler, 11.04.2014
-;
-; All functions in this module should be interrupt safe, because they may
-; be called from an interrupt handler
-;
-
-        .include        "atari.inc"
-        .importzp       sp
-        .export         _mouse_pm_callbacks
-        .constructor    pm_init,27
-        .destructor     pm_down,7
-
-; get mouse shape data
-        .import   mouse_pm_bits
-        .importzp mouse_pm_height
-        .importzp mouse_pm_hotspot_x
-        .importzp mouse_pm_hotspot_y
-
-
-; P/M definitions. The MOUSE_PM_NUM value can be changed to adjust the
-; number of the P/M used for the mouse. All others depend on this value.
-; Valid P/M numbers are 0 to 4. When 4 is used, the missiles are used
-; as a player.
-.ifdef USE_PAGE6
-MOUSE_PM_NUM    = 2                             ; P/M used for the mouse
-                                                ; This cannot be changed since only player #2 uses the memory at $600.
-.else
-MOUSE_PM_NUM    = 4                             ; P/M used for the mouse
-                                                ; Using player #4 (missiles) wastes the least amount of memory on the
-                                                ; atari target, since top of memory is typically at $xC20, and the
-                                                ; missiles use the space at $xB00-$xBFF.
-                                                ; On the atarixl target this configuration (not using page 6) is not
-                                                ; really satisfying since the top of memory typically lies beneath
-                                                ; the ROM and there is flickering visible while the ROM is banked in.
-.endif
-MOUSE_PM_BASE   = pm_base                       ; ZP location pointing to the hw area used by the selected P/M
-
-.if MOUSE_PM_NUM = 4
-MOUSE_PM_RAW    = 0                             ; MOUSE_PM_RAW is the hardware P/M number for MOUSE_PM_NUM
-.macro  set_mouse_x
-        ; assume CF = 0
-        sta     HPOSM3
-        adc     #2
-        sta     HPOSM2
-        adc     #2
-        sta     HPOSM1
-        adc     #2
-        sta     HPOSM0
-.endmacro
-.else
-MOUSE_PM_RAW    = MOUSE_PM_NUM + 1
-.macro  set_mouse_x
-        sta     HPOSP0 + MOUSE_PM_NUM
-.endmacro
-.endif
-
-; ------------------------------------------------------------------------
-
-        .rodata
-
-        ; Callback structure
-_mouse_pm_callbacks:
-        .addr   hide
-        .addr   show
-        .addr   prep
-        .addr   draw
-        .addr   movex
-        .addr   movey
-
-; ------------------------------------------------------------------------
-
-        .bss
-
-omy:    .res    1                       ; old Mouse Y position
-colhlp: .res    1                       ; helper variable to set P/M color
-
-; ------------------------------------------------------------------------
-
-        .segment "EXTZP" : zeropage
-
-pm_base:.res    2
-
-; ------------------------------------------------------------------------
-
-        .code
-
-; Hide the mouse cursor.
-hide:   lda     #0
-        sta     GRACTL
-        rts
-
-; Show the mouse cursor.
-show:
-.if MOUSE_PM_NUM < 4
-        lda     #2
-.else
-        lda     #1
-.endif
-        sta     GRACTL
-        jmp     update_colors
-
-prep:
-draw:
-        rts
-
-; Move the mouse cursor x position to the value in A/X.
-movex:  cpx     #1
-        ror     a
-        clc
-        adc     #48
-        sbc     #(mouse_pm_hotspot_x - 1) & $FF
-        set_mouse_x
-        jmp     update_colors
-
-; Move the mouse cursor y position to the value in A/X.
-movey:  clc
-        adc     #32
-        sbc     #(mouse_pm_hotspot_y - 1) & $FF
-        pha
-        lda     omy
-        jsr     clr_pm                  ; remove player at old position
-        jsr     update_colors
-        pla
-        sta     omy
-        ;jmp    set_pm                  ; put player to new position
-        ; fall thru
-
-; Set P/M data from 'mouse_pm_bits'
-set_pm: tay
-        ldx     #0
-set_l:  lda     mouse_pm_bits,x
-        sta     (MOUSE_PM_BASE),y
-        inx
-        iny
-        beq     set_end
-        cpx     #mouse_pm_height
-        bcc     set_l
-set_end:rts
-
-; Clear (zero) P/M data
-clr_pm: ldx     #mouse_pm_height
-        tay
-        lda     #0
-clr_l:  sta     (MOUSE_PM_BASE),y
-        iny
-        beq     clr_end
-        dex
-        bne     clr_l
-clr_end:rts
-
-
-pm_down = hide
-
-
-; this assumes a GRAPHICS 0 screen
-update_colors:
-        lda     COLOR2                  ; get background color
-        and     #$F0
-        sta     colhlp
-        lda     COLOR1
-        and     #$0F
-        ora     colhlp
-
-.if MOUSE_PM_NUM = 4
-        sta     PCOLR0
-        sta     PCOLR1
-        sta     PCOLR2
-        sta     PCOLR3
-        lda     #0
-        sta     SIZEM
-.else
-        sta     PCOLR0 + MOUSE_PM_NUM
-        lda     #0
-        sta     SIZEP0 + MOUSE_PM_NUM
-.endif
-        rts
-
-; ------------------------------------------------------------------------
-
-        .segment "INIT"
-
-pm_init:
-        lda     #0
-
-.ifdef USE_PAGE6
-
-        sta     MOUSE_PM_BASE
-        ldx     #6                      ; page 6
-        stx     MOUSE_PM_BASE+1
-
-.else
-
-; use top of memory and lower sp accordingly
-        sta     sp
-        sta     MOUSE_PM_BASE
-        lda     sp+1
-        and     #7                      ; offset within 2K
-        cmp     #3 + MOUSE_PM_RAW + 1   ; can we use it?
-        bcc     @decr                   ; no
-
-        lda     sp+1
-        and     #$F8
-@set:   adc     #3 + MOUSE_PM_RAW - 1   ; CF is set, so adding MOUSE_PM_RAW + 3
-        sta     MOUSE_PM_BASE+1
-        sta     sp+1
-        bne     @cont                   ; jump always
-
-@decr:  lda     sp+1
-        and     #$F8
-        sbc     #8 - 1                  ; CF is clear, subtracts 8
-        bcs     @set                    ; jump always
-
-@cont:  lda     #0
-
-.endif
-
-        tay
-@iniloo:sta     (MOUSE_PM_BASE),y
-        iny
-        bne     @iniloo
-
-.ifndef USE_PAGE6
-        lda     MOUSE_PM_BASE+1
-        and     #$F8
-.endif
-        sta     PMBASE
-
-        lda     #62
-        sta     SDMCTL
-
-        lda     #1
-        sta     GPRIOR
-
-        jmp     update_colors
diff --git a/libsrc/atari/mcbtxtchar-char.s b/libsrc/atari/mcbtxtchar-char.s
deleted file mode 100644 (file)
index 1f08621..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-;
-; Default text mode mouse cursor character
-;
-; Christian Groessler, 11.04.2014
-;
-
-        .export mouse_txt_char : zp = 96     ; 'diamond' screen code
diff --git a/libsrc/atari/mcbtxtchar.s b/libsrc/atari/mcbtxtchar.s
deleted file mode 100644 (file)
index 90a25f6..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-;
-; Text mode character mouse callbacks for the Ataris
-;
-; Christian Groessler, 03.01.2014
-;
-; derived from Apple2 version by
-; Oliver Schmidt, 22.09.2005
-;
-; All functions in this module should be interrupt safe, because they may
-; be called from an interrupt handler
-;
-
-        .export         _mouse_txt_callbacks
-        .importzp       tmp4
-        .import         mul40,loc_tmp
-        .importzp       mouse_txt_char          ; screen code of mouse cursor
-
-        .include        "atari.inc"
-
-; ------------------------------------------------------------------------
-
-        .bss
-
-backup: .res    1
-visible:.res    1
-
-; ------------------------------------------------------------------------
-
-        .segment        "EXTZP" : zeropage
-scrptr: .res    2
-
-; ------------------------------------------------------------------------
-
-
-        .rodata
-
-        ; Callback structure
-_mouse_txt_callbacks:
-        .addr   hide
-        .addr   show
-        .addr   prep
-        .addr   draw
-        .addr   movex
-        .addr   movey
-
-; ------------------------------------------------------------------------
-
-        .data
-
-; setcursor
-
-getcursor:
-column: ldy     #$00            ; Patched at runtime
-        lda     (scrptr),y
-        rts
-
-setcursor:
-column2:ldy     #$00            ; Patched at runtime
-        sta     (scrptr),y
-        rts
-
-; ------------------------------------------------------------------------
-
-        .code
-
-done:
-        rts
-
-; Hide the mouse cursor.
-hide:
-        dec     visible
-
-prep:
-        jsr     getcursor       ; Get character at cursor position
-        cmp     #mouse_txt_char ; "mouse" character
-        bne     overwr          ; no, probably program has overwritten it
-        lda     backup          ; 
-        jmp     setcursor       ; Draw character
-overwr: sta     backup
-        rts
-
-; Show the mouse cursor.
-show:
-        inc     visible
-
-draw:
-        lda     visible
-        beq     done
-        jsr     getcursor       ; Cursor visible at current position?
-        sta     backup          ; Save character at cursor position
-        lda     #mouse_txt_char
-        jmp     setcursor       ; Draw cursor
-
-
-; Move the mouse cursor x position to the value in A/X.
-movex:
-        cpx     #1
-        ror     a
-        lsr     a               ; convert to character position
-        lsr     a
-        sta     column+1
-        sta     column2+1
-        rts
-
-; Move the mouse cursor y position to the value in A/X.
-movey:
-        tax
-        ldy     tmp4            ; mul40 uses tmp4
-        lda     loc_tmp         ; and this local variable
-        pha
-        txa                     ; get parameter back
-        lsr     a               ; convert y position to character line
-        lsr     a
-        lsr     a
-        jsr     mul40
-        clc
-        adc     SAVMSC
-        sta     scrptr
-        txa
-        adc     SAVMSC+1
-        sta     scrptr+1
-        pla
-        sta     loc_tmp
-        sty     tmp4
-        rts
diff --git a/libsrc/atari/mou/atrami.s b/libsrc/atari/mou/atrami.s
deleted file mode 100644 (file)
index 21e1b4c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-AMIGA_MOUSE = 1
-.include "atrst.s"
diff --git a/libsrc/atari/mou/atrjoy.s b/libsrc/atari/mou/atrjoy.s
deleted file mode 100644 (file)
index 7f1085f..0000000
+++ /dev/null
@@ -1,440 +0,0 @@
-;
-; Driver for a "joystick mouse".
-;
-; C128 version: Ullrich von Bassewitz, 2004-04-05, 2009-09-26
-; Adapted to Atari: Christian Groessler, 2014-01-02
-;
-
-        .include        "zeropage.inc"
-        .include        "mouse-kernel.inc"
-        .include        "atari.inc"
-
-        .macpack        generic
-        .macpack        module
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-.ifdef __ATARIXL__
-        module_header   _atrxjoy_mou
-.else
-        module_header   _atrjoy_mou
-.endif
-
-HEADER:
-
-; Driver signature
-
-        .byte   $6d, $6f, $75           ; "mou"
-        .byte   MOUSE_API_VERSION       ; Mouse driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   HIDE
-        .addr   SHOW
-        .addr   SETBOX
-        .addr   GETBOX
-        .addr   MOVE
-        .addr   BUTTONS
-        .addr   POS
-        .addr   INFO
-        .addr   IOCTL
-        .addr   IRQ
-
-; Mouse driver flags
-
-        .byte   MOUSE_FLAG_LATE_IRQ
-
-; Callback table, set by the kernel before INSTALL is called
-
-CHIDE:  jmp     $0000                   ; Hide the cursor
-CSHOW:  jmp     $0000                   ; Show the cursor
-CPREP:  jmp     $0000                   ; Prepare to move the cursor
-CDRAW:  jmp     $0000                   ; Draw the cursor
-CMOVEX: jmp     $0000                   ; Move the cursor to X coord
-CMOVEY: jmp     $0000                   ; Move the cursor to Y coord
-
-
-;----------------------------------------------------------------------------
-; Constants
-
-SCREEN_HEIGHT   = 191
-SCREEN_WIDTH    = 319
-
-.enum   JOY
-        UP      = $01
-        DOWN    = $02
-        LEFT    = $04
-        RIGHT   = $08
-.endenum
-
-;----------------------------------------------------------------------------
-; Global variables. The bounding box values are sorted so that they can be
-; written with the least effort in the SETBOX and GETBOX routines, so don't
-; reorder them.
-
-.bss
-
-Vars:
-YPos:           .res    2               ; Current mouse position, Y
-XPos:           .res    2               ; Current mouse position, X
-XMin:           .res    2               ; X1 value of bounding box
-YMin:           .res    2               ; Y1 value of bounding box
-XMax:           .res    2               ; X2 value of bounding box
-YMax:           .res    2               ; Y2 value of bounding box
-Buttons:        .res    1               ; Button mask
-
-
-Temp:           .res    1               ; Temporary value used in the int handler
-
-; Default values for above variables
-
-.rodata
-
-; (We use ".proc" because we want to define both a label and a scope.)
-
-.proc   DefVars
-        .word   SCREEN_HEIGHT/2         ; YPos
-        .word   SCREEN_WIDTH/2          ; XPos
-        .word   0                       ; XMin
-        .word   0                       ; YMin
-        .word   SCREEN_WIDTH            ; XMax
-        .word   SCREEN_HEIGHT           ; YMax
-        .byte   0                       ; Buttons
-.endproc
-
-.code
-
-;----------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present.
-; Must return an MOUSE_ERR_xx code in a/x.
-
-INSTALL:
-
-; Initialize variables. Just copy the default stuff over
-
-        ldx     #.sizeof(DefVars)-1
-@L1:    lda     DefVars,x
-        sta     Vars,x
-        dex
-        bpl     @L1
-
-; Make sure the mouse cursor is at the default location.
-
-        lda     XPos
-        ldx     XPos+1
-        jsr     CMOVEX
-        lda     YPos
-        ldx     YPos+1
-        jsr     CMOVEY
-
-; Done, return zero (= MOUSE_ERR_OK)
-
-        ldx     #$00
-        txa
-        rts
-
-;----------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; No return code required (the driver is removed from memory on return).
-
-UNINSTALL       = HIDE                  ; Hide cursor on exit
-
-;----------------------------------------------------------------------------
-; HIDE routine. Is called to hide the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently visible and should get hidden. For most drivers,
-; no special action is required besides hiding the mouse cursor.
-; No return code required.
-
-HIDE:   php
-        sei
-        jsr     CHIDE
-        plp
-        rts
-
-;----------------------------------------------------------------------------
-; SHOW routine. Is called to show the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently hidden and should become visible. For most drivers,
-; no special action is required besides enabling the mouse cursor.
-; No return code required.
-
-SHOW:   php
-        sei
-        jsr     CSHOW
-        plp
-        rts
-
-;----------------------------------------------------------------------------
-; SETBOX: Set the mouse bounding box. The parameters are passed as they come
-; from the C program, that is, a pointer to a mouse_box struct in a/x.
-; No checks are done if the mouse is currently inside the box, this is the job
-; of the caller. It is not necessary to validate the parameters, trust the
-; caller and save some code here. No return code required.
-
-SETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX)-1
-        php
-        sei
-
-@L1:    lda     (ptr1),y
-        sta     XMin,y
-        dey
-        bpl     @L1
-
-        plp
-        rts
-
-;----------------------------------------------------------------------------
-; GETBOX: Return the mouse bounding box. The parameters are passed as they
-; come from the C program, that is, a pointer to a mouse_box struct in a/x.
-
-GETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX)-1
-        php
-        sei
-
-@L1:    lda     XMin,y
-        sta     (ptr1),y
-        dey
-        bpl     @L1
-
-        plp
-        rts
-
-;----------------------------------------------------------------------------
-; MOVE: Move the mouse to a new position. The position is passed as it comes
-; from the C program, that is: X on the stack and Y in a/x. The C wrapper will
-; remove the parameter from the stack on return.
-; No checks are done if the new position is valid (within the bounding box or
-; the screen). No return code required.
-;
-
-MOVE:   php
-        sei                             ; No interrupts
-
-        pha
-        txa
-        pha
-        jsr     CPREP
-        pla
-        tax
-        pla
-
-        sta     YPos
-        stx     YPos+1                  ; New Y position
-        jsr     CMOVEY                  ; Set it
-
-        ldy     #$01
-        lda     (sp),y
-        sta     XPos+1
-        tax
-        dey
-        lda     (sp),y
-        sta     XPos                    ; New X position
-        jsr     CMOVEX                  ; Move the cursor
-
-        jsr     CDRAW
-
-        plp                             ; Restore interrupt flag
-        rts
-
-;----------------------------------------------------------------------------
-; BUTTONS: Return the button mask in a/x.
-
-BUTTONS:
-        lda     Buttons
-        ldx     #$00
-        rts
-
-;----------------------------------------------------------------------------
-; POS: Return the mouse position in the MOUSE_POS struct pointed to by ptr1.
-; No return code required.
-
-POS:    ldy     #MOUSE_POS::XCOORD      ; Structure offset
-
-        php
-        sei                             ; Disable interrupts
-        lda     XPos                    ; Transfer the position
-        sta     (ptr1),y
-        lda     XPos+1
-        iny
-        sta     (ptr1),y
-        lda     YPos
-        iny
-        sta     (ptr1),y
-        lda     YPos+1
-        plp                             ; Restore interrupt flag
-
-        iny
-        sta     (ptr1),y                ; Store last byte
-
-        rts                             ; Done
-
-;----------------------------------------------------------------------------
-; INFO: Returns mouse position and current button mask in the MOUSE_INFO
-; struct pointed to by ptr1. No return code required.
-;
-; We're cheating here to keep the code smaller: The first fields of the
-; mouse_info struct are identical to the mouse_pos struct, so we will just
-; call _mouse_pos to initialize the struct pointer and fill the position
-; fields.
-
-INFO:   jsr     POS
-
-; Fill in the button state
-
-        lda     Buttons
-        ldy     #MOUSE_INFO::BUTTONS
-        sta     (ptr1),y
-
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
-; specific data in ptr1, and the ioctl code in A.
-; Must return an error code in a/x.
-;
-
-IOCTL:  lda     #<MOUSE_ERR_INV_IOCTL     ; We don't support ioclts for now
-        ldx     #>MOUSE_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; IRQ: Irq handler entry point. Called as a subroutine but in IRQ context
-; (so be careful). The routine MUST return carry set if the interrupt has been
-; 'handled' - which means that the interrupt source is gone. Otherwise it
-; MUST return carry clear.
-;
-
-IRQ:
-
-; Check for a pressed button and place the result into Buttons
-
-        ldx     #0
-        lda     TRIG0                   ; joystick #0 trigger
-        bne     @L0                     ; not pressed
-        ldx     #MOUSE_BTN_LEFT
-@L0:    stx     Buttons
-
-        lda     PORTA                   ; get joystick direction bits
-        and     #15                     ; clear joystick #1 bits
-        eor     #15
-        sta     Temp
-
-        jsr     CPREP
-
-; Check left/right
-
-        lda     Temp                    ; Read joystick #0
-        and     #(JOY::LEFT | JOY::RIGHT)
-        beq     @SkipX                  ;
-
-; We will cheat here and rely on the fact that either the left, OR the right
-; bit can be active
-
-        and     #JOY::RIGHT             ; Check RIGHT bit
-        bne     @Right
-        lda     #$FF
-        tax
-        bne     @AddX                   ; Branch always
-@Right: lda     #$01
-        ldx     #$00
-
-; Calculate the new X coordinate (--> a/y)
-
-@AddX:  add     XPos
-        tay                             ; Remember low byte
-        txa
-        adc     XPos+1
-        tax
-
-; Limit the X coordinate to the bounding box
-
-        cpy     XMin
-        sbc     XMin+1
-        bpl     @L1
-        ldy     XMin
-        ldx     XMin+1
-        jmp     @L2
-@L1:    txa
-
-        cpy     XMax
-        sbc     XMax+1
-        bmi     @L2
-        ldy     XMax
-        ldx     XMax+1
-@L2:    sty     XPos
-        stx     XPos+1
-
-; Move the mouse pointer to the new X pos
-
-        tya
-        jsr     CMOVEX
-
-; Calculate the Y movement vector
-
-@SkipX: lda     Temp                    ; Read joystick #0
-        and     #(JOY::UP | JOY::DOWN)  ; Check up/down
-        beq     @SkipY                  ;
-
-; We will cheat here and rely on the fact that either the up, OR the down
-; bit can be active
-
-        lsr     a
-        bcc     @Down
-        lda     #$FF
-        tax
-        bne     @AddY
-@Down:  lda     #$01
-        ldx     #$00
-
-; Calculate the new Y coordinate (--> a/y)
-
-@AddY:  add     YPos
-        tay                             ; Remember low byte
-        txa
-        adc     YPos+1
-        tax
-
-; Limit the Y coordinate to the bounding box
-
-        cpy     YMin
-        sbc     YMin+1
-        bpl     @L3
-        ldy     YMin
-        ldx     YMin+1
-        jmp     @L4
-@L3:    txa
-
-        cpy     YMax
-        sbc     YMax+1
-        bmi     @L4
-        ldy     YMax
-        ldx     YMax+1
-@L4:    sty     YPos
-        stx     YPos+1
-
-; Move the mouse pointer to the new X pos
-
-        tya
-        jsr     CMOVEY
-
-; Done
-
-@SkipY: jsr     CDRAW
-        clc                             ; Interrupt not "handled"
-        rts
-
diff --git a/libsrc/atari/mou/atrst.s b/libsrc/atari/mou/atrst.s
deleted file mode 100644 (file)
index 17d2aff..0000000
+++ /dev/null
@@ -1,823 +0,0 @@
-;
-; Mouse driver for ST & Amiga mouses and Atari trakball.
-;
-; Original access routines: 05/07/2000 Freddy Offenga
-; Converted to driver: Christian Groessler, 2014-01-04
-;
-; Defines:
-;       AMIGA_MOUSE     -       builds Amiga mouse version
-;       TRAK_MOUSE      -       builds trakball version
-; If none of these defines are active, the ST mouse version
-; is being built.
-;
-
-;DEBUG           =       1
-
-DISABLE_TIMEOUT =       30              ; # of vertical blank interrupts after which, if
-                                        ; no mouse motion occurred, the polling IRQ gets
-                                        ; disabled.
-                                        ; VBI frequency is 50Hz for PAL and 60Hz for NTSC
-
-        .include        "zeropage.inc"
-        .include        "mouse-kernel.inc"
-        .include        "atari.inc"
-
-        .macpack        generic
-        .macpack        module
-
-.if .not ( .defined (AMIGA_MOUSE) .or .defined (TRAK_MOUSE))
-        ST_MOUSE = 1
-.endif
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-.if .defined (ST_MOUSE)
-
-.ifdef __ATARIXL__
-        module_header   _atrxst_mou
-.else
-        module_header   _atrst_mou
-.endif
-
-.elseif .defined (AMIGA_MOUSE)
-
-.ifdef __ATARIXL__
-        module_header   _atrxami_mou
-.else
-        module_header   _atrami_mou
-.endif
-
-.elseif .defined (TRAK_MOUSE)
-
-.ifdef __ATARIXL__
-        module_header   _atrxtrk_mou
-.else
-        module_header   _atrtrk_mou
-.endif
-
-.endif
-
-HEADER:
-
-; Driver signature
-
-        .byte   $6d, $6f, $75           ; "mou"
-        .byte   MOUSE_API_VERSION       ; Mouse driver API version number
-
-; Library reference
-
-libref: .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   HIDE
-        .addr   SHOW
-        .addr   SETBOX
-        .addr   GETBOX
-        .addr   MOVE
-        .addr   BUTTONS
-        .addr   POS
-        .addr   INFO
-        .addr   IOCTL
-        .addr   IRQ
-
-; Mouse driver flags
-
-        .byte   MOUSE_FLAG_LATE_IRQ
-
-; Callback table, set by the kernel before INSTALL is called
-
-CHIDE:  jmp     $0000                   ; Hide the cursor
-CSHOW:  jmp     $0000                   ; Show the cursor
-CPREP:  jmp     $0000                   ; Prepare to move the cursor
-CDRAW:  jmp     $0000                   ; Draw the cursor
-CMOVEX: jmp     $0000                   ; Move the cursor to X coord
-CMOVEY: jmp     $0000                   ; Move the cursor to Y coord
-
-
-;----------------------------------------------------------------------------
-; Constants
-
-SCREEN_HEIGHT   = 191
-SCREEN_WIDTH    = 319
-
-.enum   JOY
-        UP      = $01
-        DOWN    = $02
-        LEFT    = $04
-        RIGHT   = $08
-.endenum
-
-;----------------------------------------------------------------------------
-; Global variables. The bounding box values are sorted so that they can be
-; written with the least effort in the SETBOX and GETBOX routines, so don't
-; reorder them.
-
-.bss
-
-Vars:
-YPos:           .res    2               ; Current mouse position, Y
-XPos:           .res    2               ; Current mouse position, X
-XMin:           .res    2               ; X1 value of bounding box
-YMin:           .res    2               ; Y1 value of bounding box
-XMax:           .res    2               ; X2 value of bounding box
-YMax:           .res    2               ; Y2 value of bounding box
-Buttons:        .res    1               ; Button mask
-
-XPosWrk:        .res    2
-YPosWrk:        .res    2
-
-irq_enabled:    .res    1               ; flag indicating that the high frequency polling interrupt is enabled
-old_porta_vbi:  .res    1               ; previous PORTA value of the VBI interrupt (IRQ)
-how_long:       .res    1               ; counter for how many VBI interrupts the mouse hasn't been moved
-
-.if .defined (AMIGA_MOUSE) .or .defined (ST_MOUSE)
-dumx:           .res    1
-dumy:           .res    1
-.endif
-
-.ifdef TRAK_MOUSE
-oldval:         .res    1
-.endif
-
-.ifndef __ATARIXL__
-OldT1:          .res    2
-.else
-
-.data
-set_VTIMR1_handler:
-                .byte   $4C, 0, 0
-.endif
-
-.rodata
-
-; Default values for some of the above variables
-; (We use ".proc" because we want to define both a label and a scope.)
-
-.proc   DefVars
-        .word   (SCREEN_HEIGHT+1)/2     ; YPos
-        .word   (SCREEN_WIDTH+1)/2      ; XPos
-        .word   0                       ; XMin
-        .word   0                       ; YMin
-        .word   SCREEN_WIDTH            ; XMax
-        .word   SCREEN_HEIGHT           ; YMax
-        .byte   0                       ; Buttons
-.endproc
-
-.ifdef ST_MOUSE
-
-; ST mouse lookup table
-
-STTab:  .byte $FF,$01,$00,$01
-        .byte $00,$FF,$00,$01
-        .byte $01,$00,$FF,$00
-        .byte $01,$00,$01,$FF
-
-.endif
-
-.ifdef AMIGA_MOUSE
-
-; Amiga mouse lookup table
-
-AmiTab: .byte $FF,$01,$00,$FF
-        .byte $00,$FF,$FF,$01
-        .byte $01,$FF,$FF,$00
-        .byte $FF,$00,$01,$FF
-
-.endif
-
-.code
-
-;----------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present.
-; Must return an MOUSE_ERR_xx code in a/x.
-
-INSTALL:
-
-; Initialize variables. Just copy the default stuff over
-
-        ldx     #.sizeof(DefVars)-1
-@L1:    lda     DefVars,x
-        sta     Vars,x
-        dex
-        bpl     @L1
-
-; Make sure the mouse cursor is at the default location.
-
-        lda     XPos
-        sta     XPosWrk
-        ldx     XPos+1
-        stx     XPosWrk+1
-        jsr     CMOVEX
-        lda     YPos
-        sta     YPosWrk
-        ldx     YPos+1
-        stx     YPosWrk+1
-        jsr     CMOVEY
-
-; Install timer irq routine to poll mouse.
-
-.ifdef __ATARIXL__
-
-        ; Setup pointer to wrapper install/deinstall function.
-        lda     libref
-        sta     set_VTIMR1_handler+1
-        lda     libref+1
-        sta     set_VTIMR1_handler+2
-
-        ; Install my handler.
-        sec
-        lda     #<T1Han
-        ldx     #>T1Han
-        jsr     set_VTIMR1_handler
-
-.else
-
-        lda     VTIMR1
-        sta     OldT1
-        lda     VTIMR1+1
-        sta     OldT1+1
-
-        php
-        sei
-        lda     #<T1Han
-        sta     VTIMR1
-        lda     #>T1Han
-        sta     VTIMR1+1
-        plp
-
-.endif
-
-        lda     #%00000001
-        sta     AUDCTL
-
-        lda     #0
-        sta     AUDC1
-
-        lda     #15
-        sta     AUDF1
-        sta     STIMER
-
-.if 0   ; the IRQ will now be dynamically enabled when the mouse is moved
-        lda     POKMSK
-        ora     #%00000001              ; timer 1 enable
-        sta     POKMSK
-        sta     IRQEN
-        sta     irq_enabled
-.endif
-
-        lda     PORTA
-        and     #$0f
-        sta     old_porta_vbi
-
-; Done, return zero (= MOUSE_ERR_OK)
-
-        ldx     #$00
-        txa
-        rts
-
-;----------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; No return code required (the driver is removed from memory on return).
-
-UNINSTALL:
-
-; uninstall timer irq routine
-
-        lda     POKMSK
-        and     #%11111110              ; timer 1 disable
-        sta     IRQEN
-        sta     POKMSK
-
-.ifdef __ATARIXL__
-
-        clc
-        jsr     set_VTIMR1_handler
-
-.else
-
-        php
-        sei
-        lda     OldT1
-        sta     VTIMR1
-        lda     OldT1+1
-        sta     VTIMR1+1
-        plp
-
-.endif
-        ; fall thru...
-
-;----------------------------------------------------------------------------
-; HIDE routine. Is called to hide the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently visible and should get hidden. For most drivers,
-; no special action is required besides hiding the mouse cursor.
-; No return code required.
-
-HIDE:   php
-        sei
-        jsr     CHIDE
-        plp
-        rts
-
-;----------------------------------------------------------------------------
-; SHOW routine. Is called to show the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently hidden and should become visible. For most drivers,
-; no special action is required besides enabling the mouse cursor.
-; No return code required.
-
-SHOW:   php
-        sei
-        jsr     CSHOW
-        plp
-        rts
-
-;----------------------------------------------------------------------------
-; SETBOX: Set the mouse bounding box. The parameters are passed as they come
-; from the C program, that is, a pointer to a mouse_box struct in a/x.
-; No checks are done if the mouse is currently inside the box, this is the job
-; of the caller. It is not necessary to validate the parameters, trust the
-; caller and save some code here. No return code required.
-
-SETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX)-1
-        php
-        sei
-
-@L1:    lda     (ptr1),y
-        sta     XMin,y
-        dey
-        bpl     @L1
-
-        plp
-        rts
-
-;----------------------------------------------------------------------------
-; GETBOX: Return the mouse bounding box. The parameters are passed as they
-; come from the C program, that is, a pointer to a mouse_box struct in a/x.
-
-GETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX)-1
-        php
-        sei
-
-@L1:    lda     XMin,y
-        sta     (ptr1),y
-        dey
-        bpl     @L1
-
-        plp
-        rts
-
-;----------------------------------------------------------------------------
-; MOVE: Move the mouse to a new position. The position is passed as it comes
-; from the C program, that is: X on the stack and Y in a/x. The C wrapper will
-; remove the parameter from the stack on return.
-; No checks are done if the new position is valid (within the bounding box or
-; the screen). No return code required.
-;
-
-MOVE:   php
-        sei                             ; No interrupts
-
-        pha
-        txa
-        pha
-        jsr     CPREP
-        pla
-        tax
-        pla
-
-        sta     YPos
-        sta     YPosWrk
-        stx     YPos+1                  ; New Y position
-        stx     YPosWrk+1
-        jsr     CMOVEY                  ; Set it
-
-        ldy     #$01
-        lda     (sp),y
-        sta     XPos+1
-        sta     XPosWrk+1
-        tax
-        dey
-        lda     (sp),y
-        sta     XPos                    ; New X position
-        sta     XPosWrk
-        jsr     CMOVEX                  ; Move the cursor
-
-        jsr     CDRAW
-
-        plp                             ; Restore interrupt flag
-        rts
-
-;----------------------------------------------------------------------------
-; BUTTONS: Return the button mask in a/x.
-
-BUTTONS:
-        lda     Buttons
-        ldx     #$00
-        rts
-
-;----------------------------------------------------------------------------
-; POS: Return the mouse position in the MOUSE_POS struct pointed to by ptr1.
-; No return code required.
-
-POS:    ldy     #MOUSE_POS::XCOORD      ; Structure offset
-
-        php
-        sei                             ; Disable interrupts
-        lda     XPos                    ; Transfer the position
-        sta     (ptr1),y
-        lda     XPos+1
-        iny
-        sta     (ptr1),y
-        lda     YPos
-        iny
-        sta     (ptr1),y
-        lda     YPos+1
-        plp                             ; Restore interrupt flag
-
-        iny
-        sta     (ptr1),y                ; Store last byte
-
-        rts                             ; Done
-
-;----------------------------------------------------------------------------
-; INFO: Returns mouse position and current button mask in the MOUSE_INFO
-; struct pointed to by ptr1. No return code required.
-;
-; We're cheating here to keep the code smaller: The first fields of the
-; mouse_info struct are identical to the mouse_pos struct, so we will just
-; call _mouse_pos to initialize the struct pointer and fill the position
-; fields.
-
-INFO:   jsr     POS
-
-; Fill in the button state
-
-        lda     Buttons
-        ldy     #MOUSE_INFO::BUTTONS
-        sta     (ptr1),y
-
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
-; specific data in ptr1, and the ioctl code in A.
-; Must return an error code in a/x.
-;
-
-IOCTL:  lda     #<MOUSE_ERR_INV_IOCTL     ; We don't support ioclts for now
-        ldx     #>MOUSE_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; IRQ: Irq handler entry point. Called as a subroutine but in IRQ context
-; (so be careful). The routine MUST return carry set if the interrupt has been
-; 'handled' - which means that the interrupt source is gone. Otherwise it
-; MUST return carry clear.
-;
-
-IRQ:    lda     PORTA                   ; mouse port contents
-        and     #$0f                    ; check port 1 only
-        ldx     irq_enabled
-        bne     @L1
-
-; IRQ is disabled, check for mouse motion and enable IRQ if mouse motion detected
-
-        cmp     old_porta_vbi
-        beq     @L3                     ; no motion
-
-; Turn mouse polling IRQ back on
-
-        lda     POKMSK
-        ora     #%00000001              ; timer 1 enable
-        sta     POKMSK
-        sta     IRQEN
-        sta     irq_enabled
-        bne     @L3
-        ; not reached
-
-; IRQ is enabled
-
-@L1:    cmp     old_porta_vbi           ; mouse motion since last VBI?
-        sta     old_porta_vbi
-        beq     @L2                     ; no, increment timeout to disable IRQ
-
-        lda     #0
-        sta     how_long                ; yes, reinitialize wait counter
-        beq     @L3
-        ; not reached
-
-@L2:    inc     how_long                ; no motion, increment wait counter
-        lda     how_long
-        cmp     #DISABLE_TIMEOUT        ; timeout?
-        bcc     @L3                     ; no
-
-        lda     #0                      ; yes, turn off IRQ
-        sta     how_long
-
-; no mouse input -- turn IRQ off
-
-        sta     irq_enabled
-        lda     POKMSK
-        and     #%11111110              ; timer 1 disable
-        sta     IRQEN
-        sta     POKMSK
-
-; Check for a pressed button and place the result into Buttons
-
-@L3:    ldx     #0
-        lda     TRIG0                   ; joystick #0 trigger
-        bne     @L4                     ; not pressed
-        ldx     #MOUSE_BTN_LEFT
-@L4:    stx     Buttons
-
-        jsr     CPREP
-
-; Limit the X coordinate to the bounding box
-
-        lda     XPosWrk+1
-        ldy     XPosWrk
-        tax
-        cpy     XMin
-        sbc     XMin+1
-        bpl     @L5
-        ldy     XMin
-        ldx     XMin+1
-        jmp     @L6
-
-@L5:    txa
-        cpy     XMax
-        sbc     XMax+1
-        bmi     @L6
-        ldy     XMax
-        ldx     XMax+1
-@L6:    sty     XPos
-        stx     XPos+1
-        tya
-        jsr     CMOVEX
-
-; Limit the Y coordinate to the bounding box
-
-        lda     YPosWrk+1
-        ldy     YPosWrk
-        tax
-        cpy     YMin
-        sbc     YMin+1
-        bpl     @L7
-        ldy     YMin
-        ldx     YMin+1
-        jmp     @L8
-
-@L7:    txa
-        cpy     YMax
-        sbc     YMax+1
-        bmi     @L8
-        ldy     YMax
-        ldx     YMax+1
-@L8:    sty     YPos
-        stx     YPos+1
-        tya
-        jsr     CMOVEY
-
-        jsr     CDRAW
-
-.ifdef  DEBUG
-        ; print on upper right corner 'E' or 'D', indicating the IRQ is enabled or disabled
-        ldy     irq_enabled
-        beq     @L9
-        lda     #37                     ; screen code for 'E'
-        .byte   $2c                     ; bit opcode, eats next 2 bytes
-@L9:    lda     #36                     ; screen code for 'D'
-        ldy     #39
-        sta     (SAVMSC),y
-.endif
-
-        clc
-        rts
-
-
-;----------------------------------------------------------------------------
-; T1Han: Local IRQ routine to poll mouse
-;
-
-T1Han:  lda     CRITIC                  ; if CRITIC flag is set, disable the
-        bne     disable_me              ; high frequency polling IRQ, in order
-                                        ; not to interfere with SIO I/O (e.g.
-                                        ; floppy access)
-
-        tya
-        pha
-        txa
-        pha
-
-.ifdef DEBUG
-        lda     RANDOM
-        sta     COLBK
-.endif
-
-        lda     PORTA
-        tay
-
-.ifdef ST_MOUSE
-
-; ST mouse version
-
-        and     #%00000011
-        ora     dumx
-        tax
-        lda     STTab,x
-        bmi     nxst
-
-        beq     xist
-
-        dec     XPosWrk
-        lda     XPosWrk
-        cmp     #255
-        bne     nxst
-        dec     XPosWrk+1
-        jmp     nxst
-
-xist:   inc     XPosWrk
-        bne     nxst
-        inc     XPosWrk+1
-
-nxst:   tya
-        and     #%00001100
-        ora     dumy
-        tax
-        lda     STTab,x
-        bmi     nyst
-
-        bne     yst
-
-        dec     YPosWrk
-        lda     YPosWrk
-        cmp     #255
-        bne     nyst
-        dec     YPosWrk+1
-        jmp     nyst
-
-yst:    inc     YPosWrk
-        bne     nyst
-        inc     YPosWrk+1
-
-; store old readings
-
-nyst:   tya
-        and     #%00000011
-        asl
-        asl
-        sta     dumx
-        tya
-        and     #%00001100
-        lsr
-        lsr
-        sta     dumy
-
-.elseif .defined (AMIGA_MOUSE)
-
-; Amiga mouse version
-
-        lsr
-        and     #%00000101
-        ora     dumx
-        tax
-        lda     AmiTab,x
-        bmi     nxami
-
-        bne     xiami
-
-        dec     XPosWrk
-        lda     XPosWrk
-        cmp     #255
-        bne     nxami
-        dec     XPosWrk+1
-        jmp     nxami
-
-xiami:  inc     XPosWrk
-        bne     nxami
-        inc     XPosWrk+1
-
-nxami:  tya
-
-        and     #%00000101
-        ora     dumy
-        tax
-        lda     AmiTab,x
-        bmi     nyami
-
-        bne     yiami
-
-        dec     YPosWrk
-        lda     YPosWrk
-        cmp     #255
-        bne     nyami
-        dec     YPosWrk+1
-        jmp     nyami
-
-yiami:  inc     YPosWrk
-        bne     nyami
-        inc     YPosWrk+1
-
-; store old readings
-
-nyami:  tya
-        and     #%00001010
-        sta     dumx
-        tya
-        and     #%00000101
-        asl
-        sta     dumy
-
-.elseif .defined (TRAK_MOUSE)
-
-; trakball version
-
-        eor     oldval
-        and     #%00001000
-        beq     horiz
-
-        tya
-        and     #%00000100
-        beq     mmup
-
-        inc     YPosWrk
-        bne     horiz
-        inc     YPosWrk+1
-        bne     horiz
-
-mmup:   dec     YPosWrk
-        lda     YPosWrk
-        cmp     #255
-        bne     horiz
-        dec     YPosWrk+1
-
-horiz:  tya
-        eor     oldval
-        and     #%00000010
-        beq     mmexit
-
-        tya
-        and     #%00000001
-        beq     mmleft
-
-        inc     XPosWrk
-        bne     mmexit
-        inc     XPosWrk+1
-        bne     mmexit
-
-mmleft: dec     XPosWrk
-        lda     XPosWrk
-        cmp     #255
-        bne     mmexit
-        dec     XPosWrk+1
-
-mmexit: sty     oldval
-
-.endif
-
-        pla
-        tax
-        pla
-        tay
-.ifdef  __ATARIXL__
-        rts
-.else
-        pla
-        rti
-.endif
-
-
-; Disable the interrupt source which caused us to be called.
-; The interrupt will be enabled again by the "IRQ" routine.
-; The "IRQ" routine, despite its name, is called from the
-; vertical blank NMI interrupt *only* if the CRITIC flag has
-; been cleared.
-
-disable_me:
-        lda     POKMSK
-        and     #%11111110              ; timer 1 disable
-        sta     IRQEN
-        sta     POKMSK
-        lda     #0
-        sta     irq_enabled
-        lda     PORTA
-        and     #$0f
-        sta     old_porta_vbi
-.ifdef  __ATARIXL__
-        rts
-.else
-        pla
-        rti
-.endif
diff --git a/libsrc/atari/mou/atrtrk.s b/libsrc/atari/mou/atrtrk.s
deleted file mode 100644 (file)
index 699d12a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-TRAK_MOUSE = 1
-.include "atrst.s"
diff --git a/libsrc/atari/mou/atrtt.s b/libsrc/atari/mou/atrtt.s
deleted file mode 100644 (file)
index f1f2cde..0000000
+++ /dev/null
@@ -1,482 +0,0 @@
-;
-; Mouse driver for Atari Touch Tablet
-;
-; Christian Groessler, 2014-01-05
-;
-
-        .include        "zeropage.inc"
-        .include        "mouse-kernel.inc"
-        .include        "atari.inc"
-
-        .macpack        generic
-        .macpack        module
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-.ifdef __ATARIXL__
-        module_header   _atrxtt_mou
-.else
-        module_header   _atrtt_mou
-.endif
-
-HEADER:
-
-; Driver signature
-
-        .byte   $6d, $6f, $75           ; "mou"
-        .byte   MOUSE_API_VERSION       ; Mouse driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   HIDE
-        .addr   SHOW
-        .addr   SETBOX
-        .addr   GETBOX
-        .addr   MOVE
-        .addr   BUTTONS
-        .addr   POS
-        .addr   INFO
-        .addr   IOCTL
-        .addr   IRQ
-
-; Mouse driver flags
-
-        .byte   MOUSE_FLAG_LATE_IRQ
-
-; Callback table, set by the kernel before INSTALL is called
-
-CHIDE:  jmp     $0000                   ; Hide the cursor
-CSHOW:  jmp     $0000                   ; Show the cursor
-CPREP:  jmp     $0000                   ; Prepare to move the cursor
-CDRAW:  jmp     $0000                   ; Draw the cursor
-CMOVEX: jmp     $0000                   ; Move the cursor to X coord
-CMOVEY: jmp     $0000                   ; Move the cursor to Y coord
-
-
-;----------------------------------------------------------------------------
-; Constants
-
-SCREEN_HEIGHT   = 191
-SCREEN_WIDTH    = 319
-
-.enum   JOY
-        UP      = $01
-        DOWN    = $02
-        LEFT    = $04
-        RIGHT   = $08
-.endenum
-
-;----------------------------------------------------------------------------
-; Global variables. The bounding box values are sorted so that they can be
-; written with the least effort in the SETBOX and GETBOX routines, so don't
-; reorder them.
-
-.bss
-
-Vars:
-YPos:           .res    2               ; Current mouse position, Y
-XPos:           .res    2               ; Current mouse position, X
-XMin:           .res    2               ; X1 value of bounding box
-YMin:           .res    2               ; Y1 value of bounding box
-XMax:           .res    2               ; X2 value of bounding box
-YMax:           .res    2               ; Y2 value of bounding box
-Buttons:        .res    1               ; Button mask
-
-; Default values for above variables
-
-.rodata
-
-; (We use ".proc" because we want to define both a label and a scope.)
-
-.proc   DefVars
-        .word   SCREEN_HEIGHT/2         ; YPos
-        .word   SCREEN_WIDTH/2          ; XPos
-        .word   0                       ; XMin
-        .word   0                       ; YMin
-        .word   SCREEN_WIDTH            ; XMax
-        .word   SCREEN_HEIGHT           ; YMax
-        .byte   0                       ; Buttons
-.endproc
-
-.code
-
-;----------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present.
-; Must return an MOUSE_ERR_xx code in a/x.
-
-INSTALL:
-
-; Initialize variables. Just copy the default stuff over
-
-        ldx     #.sizeof(DefVars)-1
-@L1:    lda     DefVars,x
-        sta     Vars,x
-        dex
-        bpl     @L1
-
-; Make sure the mouse cursor is at the default location.
-
-        lda     XPos
-        ldx     XPos+1
-        jsr     CMOVEX
-        lda     YPos
-        ldx     YPos+1
-        jsr     CMOVEY
-
-; Done, return zero (= MOUSE_ERR_OK)
-
-        ldx     #$00
-        txa
-        rts
-
-;----------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; No return code required (the driver is removed from memory on return).
-
-UNINSTALL       = HIDE                  ; Hide cursor on exit
-
-;----------------------------------------------------------------------------
-; HIDE routine. Is called to hide the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently visible and should get hidden. For most drivers,
-; no special action is required besides hiding the mouse cursor.
-; No return code required.
-
-HIDE:   php
-        sei
-        jsr     CHIDE
-        plp
-        rts
-
-;----------------------------------------------------------------------------
-; SHOW routine. Is called to show the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently hidden and should become visible. For most drivers,
-; no special action is required besides enabling the mouse cursor.
-; No return code required.
-
-SHOW:   php
-        sei
-        jsr     CSHOW
-        plp
-        rts
-
-;----------------------------------------------------------------------------
-; SETBOX: Set the mouse bounding box. The parameters are passed as they come
-; from the C program, that is, a pointer to a mouse_box struct in a/x.
-; No checks are done if the mouse is currently inside the box, this is the job
-; of the caller. It is not necessary to validate the parameters, trust the
-; caller and save some code here. No return code required.
-
-SETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX)-1
-        php
-        sei
-
-@L1:    lda     (ptr1),y
-        sta     XMin,y
-        dey
-        bpl     @L1
-
-        plp
-        rts
-
-;----------------------------------------------------------------------------
-; GETBOX: Return the mouse bounding box. The parameters are passed as they
-; come from the C program, that is, a pointer to a mouse_box struct in a/x.
-
-GETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX)-1
-        php
-        sei
-
-@L1:    lda     XMin,y
-        sta     (ptr1),y
-        dey
-        bpl     @L1
-
-        plp
-        rts
-
-;----------------------------------------------------------------------------
-; MOVE: Move the mouse to a new position. The position is passed as it comes
-; from the C program, that is: X on the stack and Y in a/x. The C wrapper will
-; remove the parameter from the stack on return.
-; No checks are done if the new position is valid (within the bounding box or
-; the screen). No return code required.
-;
-
-MOVE:   php
-        sei                             ; No interrupts
-
-        pha
-        txa
-        pha
-        jsr     CPREP
-        pla
-        tax
-        pla
-
-        sta     YPos
-        stx     YPos+1                  ; New Y position
-        jsr     CMOVEY                  ; Set it
-
-        ldy     #$01
-        lda     (sp),y
-        sta     XPos+1
-        tax
-        dey
-        lda     (sp),y
-        sta     XPos                    ; New X position
-        jsr     CMOVEX                  ; Move the cursor
-
-        jsr     CSHOW
-
-        plp                             ; Restore interrupt flag
-        rts
-
-;----------------------------------------------------------------------------
-; BUTTONS: Return the button mask in a/x.
-
-BUTTONS:
-        lda     Buttons
-        ldx     #$00
-        rts
-
-;----------------------------------------------------------------------------
-; POS: Return the mouse position in the MOUSE_POS struct pointed to by ptr1.
-; No return code required.
-
-POS:    ldy     #MOUSE_POS::XCOORD      ; Structure offset
-
-        php
-        sei                             ; Disable interrupts
-        lda     XPos                    ; Transfer the position
-        sta     (ptr1),y
-        lda     XPos+1
-        iny
-        sta     (ptr1),y
-        lda     YPos
-        iny
-        sta     (ptr1),y
-        lda     YPos+1
-        plp                             ; Restore interrupt flag
-
-        iny
-        sta     (ptr1),y                ; Store last byte
-
-        rts                             ; Done
-
-;----------------------------------------------------------------------------
-; INFO: Returns mouse position and current button mask in the MOUSE_INFO
-; struct pointed to by ptr1. No return code required.
-;
-; We're cheating here to keep the code smaller: The first fields of the
-; mouse_info struct are identical to the mouse_pos struct, so we will just
-; call _mouse_pos to initialize the struct pointer and fill the position
-; fields.
-
-INFO:   jsr     POS
-
-; Fill in the button state
-
-        lda     Buttons
-        ldy     #MOUSE_INFO::BUTTONS
-        sta     (ptr1),y
-
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
-; specific data in ptr1, and the ioctl code in A.
-; Must return an error code in a/x.
-;
-
-IOCTL:  lda     #<MOUSE_ERR_INV_IOCTL     ; We don't support ioclts for now
-        ldx     #>MOUSE_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; IRQ: Irq handler entry point. Called as a subroutine but in IRQ context
-; (so be careful). The routine MUST return carry set if the interrupt has been
-; 'handled' - which means that the interrupt source is gone. Otherwise it
-; MUST return carry clear.
-;
-
-IRQ:
-
-; Check for a pressed button and place the result into Buttons
-
-        ldx     #0
-        stx     Buttons
-
-        lda     PORTA                   ; get other buttons
-        eor     #255
-        tax
-        and     #5                      ; pen button and left button are mapped to left mouse button
-        beq     @L01
-        lda     #MOUSE_BTN_LEFT
-        ora     Buttons
-        sta     Buttons
-@L01:   txa
-        and     #8
-        beq     @L02
-        lda     #MOUSE_BTN_RIGHT
-        ora     Buttons
-        sta     Buttons
-
-; If we read 228 for X or Y positions, we assume the user has lifted the pen
-; and don't change the cursor position.
-
-@L02:   lda     PADDL0
-        cmp     #228
-        beq     @Cont                   ; CF set if equal
-        lda     PADDL1
-        cmp     #228                    ; CF set if equal
-
-@Cont:  php                             ; remember CF
-        jsr     CPREP
-        plp                             ; restore CF
-
-        bcc     @L03
-        jmp     @Show
-
-@L03:   ldx     #0
-        stx     XPos+1
-        stx     YPos+1
-
-; Get cursor position
-; -------------------
-; The touch pad is read thru the paddle potentiometers. The possible
-; values are 1..228. Since the maximum value is less than the X
-; dimension we have to "stretch" this value. In order to use only
-; divisions by powers of two, we use the following appoximation:
-; 320/227 = 1.4096
-; 1+1/2-1/8+1/32 = 1.4062
-; For Y we subtract 1/8 of it to get in the YMax ballpark.
-; 228-228/8=199.5
-; A small area in the Y dimension of the touchpad isn't used with
-; this approximation. The Y value is inverted, (0,0) is the bottom
-; left corner of the touchpad.
-
-; X
-
-        ldx     PADDL0                  ; get X postion
-        dex                             ; decrement, since it's 1-based
-        stx     XPos
-        txa
-        lsr     a
-        tax
-        clc
-        adc     XPos
-        sta     XPos
-        bcc     @L04
-        inc     XPos+1
-@L04:   txa
-        lsr     a                       ; port value / 4
-        lsr     a                       ; port value / 8
-        tax
-        sec
-        lda     XPos
-        stx     XPos
-        sbc     XPos
-        sta     XPos
-        bcs     @L05
-        dec     XPos+1
-@L05:   txa
-        lsr     a                       ; port value / 16
-        lsr     a                       ; port value / 32
-        clc
-        adc     XPos
-        sta     XPos
-        bcc     @L06
-        inc     XPos+1
-
-@L06:   tay
-        lda     XPos+1
-        tax
-
-; Limit the X coordinate to the bounding box
-
-        cpy     XMin
-        sbc     XMin+1
-        bpl     @L07
-        ldy     XMin
-        ldx     XMin+1
-        jmp     @L08
-@L07:   txa
-
-        cpy     XMax
-        sbc     XMax+1
-        bmi     @L08
-        ldy     XMax
-        ldx     XMax+1
-@L08:   sty     XPos
-        stx     XPos+1
-
-; Move the mouse pointer to the new X pos
-
-        tya
-        jsr     CMOVEX
-
-; Y
-
-        ldx     PADDL1                  ; get Y postion
-        dex                             ; decrement, since it's 1-based
-        stx     YPos
-        lda     #228
-        sec
-        sbc     YPos                    ; invert value
-        tax
-        lsr     a
-        lsr     a
-        lsr     a
-        sta     YPos
-        txa
-        sec
-        sbc     YPos
-        sta     YPos
-        tay
-        lda     YPos+1
-        tax
-
-; Limit the Y coordinate to the bounding box
-
-        cpy     YMin
-        sbc     YMin+1
-        bpl     @L09
-        ldy     YMin
-        ldx     YMin+1
-        jmp     @L10
-@L09:   txa
-
-        cpy     YMax
-        sbc     YMax+1
-        bmi     @L10
-        ldy     YMax
-        ldx     YMax+1
-@L10:   sty     YPos
-        stx     YPos+1
-
-; Move the mouse pointer to the new X pos
-
-        tya
-        jsr     CMOVEY
-
-@Show:  jsr     CDRAW
-
-        clc                             ; Interrupt not "handled"
-        rts
-
diff --git a/libsrc/atari/mouse_stat_stddrv.s b/libsrc/atari/mouse_stat_stddrv.s
deleted file mode 100644 (file)
index 55e2987..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Address of the static standard mouse driver
-;
-; Christian Groessler, 2014-01-02
-;
-; const void mouse_static_stddrv[];
-;
-
-        .export _mouse_static_stddrv
-        .ifdef  __ATARIXL__
-        .import _atrxst_mou
-        .else
-        .import _atrst_mou
-        .endif
-
-.rodata
-
-        .ifdef  __ATARIXL__
-_mouse_static_stddrv := _atrxst_mou
-        .else
-_mouse_static_stddrv := _atrst_mou
-        .endif
diff --git a/libsrc/atari/mouse_stddrv.s b/libsrc/atari/mouse_stddrv.s
deleted file mode 100644 (file)
index 493c90d..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Name of the standard mouse driver
-;
-; Christian Groessler, 2014-01-02
-;
-; const char mouse_stddrv[];
-;
-
-        .export _mouse_stddrv
-
-.rodata
-
-_mouse_stddrv:
-        .ifdef  __ATARIXL__
-        .asciiz "ATRXST.MOU"
-        .else
-        .asciiz "ATRST.MOU"
-        .endif
diff --git a/libsrc/atari/mouseref.s b/libsrc/atari/mouseref.s
deleted file mode 100644 (file)
index b75df93..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Christian Groessler, 2014-04-22
-;
-
-        .export         mouse_libref
-
-.ifdef __ATARIXL__
-        .import set_VTIMR1_handler
-mouse_libref    := set_VTIMR1_handler
-.else
-        .import _exit
-mouse_libref    := _exit
-.endif
diff --git a/libsrc/atari/mul40.s b/libsrc/atari/mul40.s
deleted file mode 100644 (file)
index 96235bf..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-;
-; Christian Groessler, June 2000
-;
-; mul40
-; multiplies A by 40 and returns result in AX
-; uses tmp4
-
-        .importzp       tmp4
-        .export         mul40,loc_tmp
-
-.proc   mul40
-
-        ldx     #0
-        stx     tmp4
-        sta     loc_tmp
-        asl     a
-        rol     tmp4
-        asl     a
-        rol     tmp4            ; val * 4
-        adc     loc_tmp
-        bcc     L1
-        inc     tmp4            ; val * 5
-L1:     asl     a
-        rol     tmp4            ; val * 10
-        asl     a
-        rol     tmp4
-        asl     a
-        rol     tmp4            ; val * 40
-        ldx     tmp4
-        rts
-
-.endproc
-
-        .bss
-loc_tmp:.res    1
diff --git a/libsrc/atari/open.s b/libsrc/atari/open.s
deleted file mode 100644 (file)
index 2188257..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-;
-; Christian Groessler, Jan-2003
-;
-; int open(const char *name,int flags,...);
-;
-
-        .include "atari.inc"
-        .include "fcntl.inc"
-        .include "errno.inc"
-        .include "fd.inc"
-
-        .export _open
-        .destructor     closeallfiles, 5
-
-        .import _close
-        .import clriocb
-        .import fddecusage,newfd
-        .import findfreeiocb
-        .import incsp4
-        .import ldaxysp,addysp
-        .import __oserror
-        .importzp tmp4,tmp2
-.ifdef  UCASE_FILENAME
-        .importzp tmp3
-        .import ucase_fn
-.endif
-
-.proc   _open
-
-        dey                     ; parm count < 4 shouldn't be needed to be checked
-        dey                     ;       (it generates a c compiler warning)
-        dey
-        dey
-        beq     parmok          ; parameter count ok
-        jsr     addysp          ; fix stack, throw away unused parameters
-
-parmok: jsr     findfreeiocb
-        beq     iocbok          ; we found one
-
-        lda     #<EMFILE        ; "too many open files"
-seterr: jsr     __directerrno
-        jsr     incsp4          ; clean up stack
-        lda     #$FF
-        tax
-        rts                     ; return -1
-
-        ; process the mode argument
-
-iocbok: stx     tmp4
-        jsr     clriocb         ; init with zero
-        ldy     #1
-        jsr     ldaxysp         ; get mode
-        ldx     tmp4
-        pha
-        and     #O_APPEND
-        beq     no_app
-        pla
-        and     #15
-        cmp     #O_RDONLY       ; DOS supports append with write-only only
-        beq     invret
-        cmp     #O_RDWR
-        beq     invret
-        lda     #OPNOT|APPEND
-        bne     set
-
-.ifndef UCASE_FILENAME
-invret: lda     #<EINVAL        ; file name is too long
-        jmp     seterr
-.endif
-
-no_app: pla
-        and     #15
-        cmp     #O_RDONLY
-        bne     l1
-        lda     #OPNIN
-set:    sta     ICAX1,x
-        bne     cont
-
-l1:     cmp     #O_WRONLY
-        bne     l2
-        lda     #OPNOT
-        bne     set
-
-l2:     ; O_RDWR
-        lda     #OPNOT|OPNIN
-        bne     set
-
-        ; process the filename argument
-
-cont:   ldy     #3
-        jsr     ldaxysp
-
-.ifdef  UCASE_FILENAME
-.ifdef  DEFAULT_DEVICE
-        ldy     #$80
-        sty     tmp2            ; set flag for ucase_fn
-.endif
-        jsr     ucase_fn
-        bcc     ucok1
-invret: lda     #<EINVAL        ; file name is too long
-        jmp     seterr
-ucok1:
-
-.endif  ; defined UCASE_FILENAME
-
-        ldy     tmp4
-
-        ;AX - points to filename
-        ;Y  - iocb to use, if open needed
-        jsr     newfd           ; maybe we don't need to open and can reuse an iocb
-                                ; returns fd num to use in tmp2, all regs unchanged
-        bcs     doopen          ; C set: open needed
-        lda     #0              ; clears N flag
-        beq     finish
-
-doopen: sta     ICBAL,y
-        txa
-        sta     ICBAH,y
-        ldx     tmp4
-        lda     #OPEN
-        sta     ICCOM,x
-        jsr     CIOV
-
-        ; clean up the stack
-
-finish: php
-        txa
-        pha
-        tya
-        pha
-
-.ifdef  UCASE_FILENAME
-        ldy     tmp3            ; get size
-        jsr     addysp          ; free used space on the stack
-.endif  ; defined UCASE_FILENAME
-
-        jsr     incsp4          ; clean up stack
-
-        pla
-        tay
-        pla
-        tax
-        plp
-
-        bpl     ok
-        sty     tmp3            ; remember error code
-        lda     #CLOSE
-        sta     ICCOM,x
-        jsr     CIOV            ; close IOCB again since open failed
-        jsr     fddecusage      ; and decrement usage counter of fd
-        lda     tmp3            ; put error code into A
-        jmp     __mappederrno
-
-ok:     lda     tmp2            ; get fd
-        ldx     #0
-        stx     __oserror
-        rts
-
-.endproc
-
-
-; closeallfiles: Close all files opened by the program.
-
-.proc   closeallfiles
-
-        lda     #MAX_FD_INDEX-1
-loop:   ldx     #0
-        pha
-        jsr     _close
-        pla
-        clc
-        sbc     #0
-        bpl     loop
-        rts
-
-.endproc
diff --git a/libsrc/atari/oserrlist.s b/libsrc/atari/oserrlist.s
deleted file mode 100644 (file)
index c97dcdf..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-;
-; Ullrich von Bassewitz, 18.07.2002
-; Christian Groessler, 24.07.2002
-;
-; Defines the platform specific error list.
-;
-; The table is built as a list of entries
-;
-;       .byte   entrylen
-;       .byte   errorcode
-;       .asciiz errormsg
-;
-; and terminated by an entry with length zero that is returned if the
-; error code could not be found.
-;
-
-        .export         __sys_oserrlist
-
-;----------------------------------------------------------------------------
-; Macros used to generate the list (may get moved to an include file?)
-
-; Regular entry
-.macro  sys_oserr_entry         code, msg
-        .local  Start, End
-Start:  .byte   End - Start
-        .byte   code
-        .asciiz msg
-End:
-.endmacro
-
-; Sentinel entry
-.macro  sys_oserr_sentinel      msg
-        .byte   0                       ; Length is always zero
-        .byte   0                       ; Code is unused
-        .asciiz msg
-.endmacro
-
-;----------------------------------------------------------------------------
-; The error message table
-
-.rodata
-
-__sys_oserrlist:
-        sys_oserr_entry          1, "no error"
-        sys_oserr_entry        128, "BREAK key abort"
-        sys_oserr_entry        129, "IOCB already open"
-        sys_oserr_entry        130, "device not found"
-        sys_oserr_entry        131, "IOCB write only"
-        sys_oserr_entry        132, "invalid command"
-        sys_oserr_entry        133, "IOCB not open"
-        sys_oserr_entry        134, "invalid IOCB index"
-        sys_oserr_entry        135, "IOCB read only"
-        sys_oserr_entry        136, "end-of-file"
-        sys_oserr_entry        137, "record truncated"
-        sys_oserr_entry        138, "device timeout"
-        sys_oserr_entry        139, "device nak"
-        sys_oserr_entry        140, "SIO frame error"
-        sys_oserr_entry        141, "cursor out of range"
-        sys_oserr_entry        142, "SIO data overrun"
-        sys_oserr_entry        143, "SIO checksum mismatch"
-        sys_oserr_entry        144, "general device failure"
-        sys_oserr_entry        145, "bad screen mode"
-        sys_oserr_entry        146, "invalid function"
-        sys_oserr_entry        147, "insufficient memory for mode"
-        sys_oserr_entry        148, "invalid disk format"
-        sys_oserr_entry        149, "disk format version mismatch"
-        sys_oserr_entry        150, "R: already open/dir not found"
-        sys_oserr_entry        151, "concurrent mode not enabled/file exists"
-        sys_oserr_entry        152, "concurrent mode invalid buffer address/not binary"
-        sys_oserr_entry        153, "concurrent mode enabled"
-        sys_oserr_entry        154, "concurrent mode not active/loader symbol not defined"
-        sys_oserr_entry        156, "invalid parameter"
-        sys_oserr_entry        158, "insufficient memory"
-        sys_oserr_entry        160, "drive number error"
-        sys_oserr_entry        161, "too many open files"
-        sys_oserr_entry        162, "no space left on device"
-        sys_oserr_entry        163, "unrecoverable system data I/O error"
-        sys_oserr_entry        164, "file number mismatch"
-        sys_oserr_entry        165, "invalid file name"
-        sys_oserr_entry        166, "point data length error"
-        sys_oserr_entry        167, "file read-only"
-        sys_oserr_entry        168, "invalid command for disk"
-        sys_oserr_entry        169, "directory full"
-        sys_oserr_entry        170, "file not found"
-        sys_oserr_entry        171, "invalid point command"
-        sys_oserr_entry        172, "already exists in parent directory"
-        sys_oserr_entry        173, "bad disk"
-        sys_oserr_entry        174, "directory not in parent directory"
-        sys_oserr_entry        175, "directory not empty"
-        sys_oserr_entry        176, "invalid disk format"
-        sys_oserr_entry        180, "not a binary file"
-        sys_oserr_entry        181, "invalid address range"
-        sys_oserr_entry        182, "invalid parameter"
-        sys_oserr_sentinel     "unknown error"
diff --git a/libsrc/atari/oserror.s b/libsrc/atari/oserror.s
deleted file mode 100644 (file)
index a4ba07c..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-;
-; Christian Groessler, May-2000
-;
-; os specific error code mapping
-; int __fastcall__ _osmaperrno (unsigned char oserror);
-;
-
-        .include "errno.inc"
-        .export __osmaperrno
-
-.proc   __osmaperrno
-
-        cmp     #$80            ; error or success
-        bcs     errcode         ; error, jump
-
-        lda     #0              ; no error, return 0
-        tax
-        rts
-
-errcode:and     #$7f            ; create index from error number
-        tax
-        cpx     #MAX_OSERR_VAL  ; valid number?
-        bcs     inverr          ; no
-
-        lda     maptable,x
-        ldx     #0
-        rts
-
-inverr: lda     #<EUNKNOWN
-        ldx     #>EUNKNOWN
-        rts
-
-.endproc
-
-.rodata
-
-maptable:
-        .byte   EINTR   ;BRKABT = 128           ;($80) BREAK key abort
-        .byte   EBUSY   ;PRVOPN = 129           ;($81) IOCB already open error
-        .byte   ENODEV  ;NONDEV = 130           ;($82) nonexistent device error
-        .byte   EACCES  ;WRONLY = 131           ;($83) IOCB opened for write only error
-        .byte   ENOSYS  ;NVALID = 132           ;($84) invalid command error
-        .byte   EINVAL  ;NOTOPN = 133           ;($85) device/file not open error
-        .byte   EINVAL  ;BADIOC = 134           ;($86) invalid IOCB index error
-        .byte   EACCES  ;RDONLY = 135           ;($87) IOCB opened for read only error
-        .byte   EINVAL  ;EOFERR = 136           ;($88) end of file error (should never come,
-                                                ;      specially handled by read.s)
-        .byte   EIO     ;TRNRCD = 137           ;($89) truncated record error
-        .byte   EIO     ;TIMOUT = 138           ;($8A) peripheral device timeout error
-        .byte   EIO     ;DNACK  = 139           ;($8B) device does not acknowledge command
-        .byte   EIO     ;FRMERR = 140           ;($8C) serial bus framing error
-        .byte   EINVAL  ;CRSROR = 141           ;($8D) cursor out of range error
-        .byte   EIO     ;OVRRUN = 142           ;($8E) serial bus data overrun error
-        .byte   EIO     ;CHKERR = 143           ;($8F) serial bus checksum error
-        .byte   EIO     ;DERROR = 144           ;($90) general device failure
-        .byte   EINVAL  ;BADMOD = 145           ;($91) bad screen mode number error
-        .byte   ENOSYS  ;FNCNOT = 146           ;($92) function not implemented in handler
-        .byte   ENOMEM  ;SCRMEM = 147           ;($93) insufficient memory for screen mode
-; codes below taken from "Mein Atari Computer" (german version of "Your Atari Computer")
-; also SpartaDOS codes from http://www.atari-central.com/programming/cio_errors.txt
-; MyDOS and XDOS codes from Stefan Haubenthal
-        .byte   EUNKNOWN        ; 148 - [SpartaDOS] unrecognized disk format
-        .byte   EUNKNOWN        ; 149 - [SpartaDOS] disk created by incompatible version of SD
-        .byte   EBUSY           ; 150 - serial port already open
-                                ;       [SpartaDOS] directory not found
-        .byte   EACCES          ; 151 - concurrent mode I/O not enabled (serial)
-                                ;       [SpartaDOS] file exists
-        .byte   EINVAL          ; 152 - invalid buffer address for concurrent mode
-                                ;       [SpartaDOS] not binary format
-        .byte   EAGAIN          ; 153 - concurrent mode enabled (and another access tried)
-        .byte   EACCES          ; 154 - concurrent mode I/O not active (serial)
-                                ;       [SpartaDOS X] loader symbol not defined
-        .byte   EUNKNOWN        ; 155 - haven't found documentation
-        .byte   EUNKNOWN        ; 156 - [SpartaDOS X] bad parameter
-        .byte   EUNKNOWN        ; 157 - haven't found documentation
-        .byte   EUNKNOWN        ; 158 - [SpartaDOS X] out of memory
-        .byte   EUNKNOWN        ; 159 - haven't found documentation
-        .byte   ENOENT          ; 160 - drive number error (DOS)
-        .byte   EMFILE          ; 161 - too many open files
-        .byte   ENOSPC          ; 162 - disk full
-        .byte   EIO             ; 163 - unrecoverable system data I/O error
-        .byte   ESPIPE          ; 164 - file number mismatch (inv. seek or disk data strucs damaged)
-        .byte   ENOENT          ; 165 - invalid file name (e.g. lowercase)
-        .byte   ESPIPE          ; 166 - point data length error
-        .byte   EACCES          ; 167 - file locked (read-only)
-        .byte   ENOSYS          ; 168 - command invalid for disk
-        .byte   ENOSPC          ; 169 - directory full
-        .byte   ENOENT          ; 170 - file not found
-        .byte   ESPIPE          ; 171 - point command invalid
-        .byte   EEXIST          ; 172 - [MYDOS] already exists in parent directory
-        .byte   EUNKNOWN        ; 173 - bad disk - format couldn't complete
-        .byte   EUNKNOWN        ; 174 - [MYDOS] directory not in parent directory
-        .byte   EUNKNOWN        ; 175 - [MYDOS] directory not empty
-        .byte   EUNKNOWN        ; 176 - [DOS 3] incompatible file system
-        .byte   EUNKNOWN        ; 177 - haven't found documentation
-        .byte   EUNKNOWN        ; 178 - haven't found documentation
-        .byte   EUNKNOWN        ; 179 - haven't found documentation
-        .byte   EUNKNOWN        ; 180 - not a binary file
-        .byte   EUNKNOWN        ; 181 - [MYDOS] invalid address range
-        .byte   EUNKNOWN        ; 182 - [XDOS] invalid parameter
-
-        .byte   EINVAL          ; 183 - dummy (used by cc65 rtl, see sysremove.s)
-
-MAX_OSERR_VAL = (* - maptable)
diff --git a/libsrc/atari/ostype.s b/libsrc/atari/ostype.s
deleted file mode 100644 (file)
index 7248582..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-;
-; Christian Groessler, July 2004
-; from Freddy Offenga's rominfo.c
-;
-; unsigned char get_ostype(void)
-;
-; x x x x x x x x   -   8 bit flag
-; | | | | | | | |
-; | | | | | +-+-+-- main OS rev.
-; | | +-+-+-------- minor OS rev.
-; +-+-------------- unused
-;
-; main OS rev.:
-;       000 - unknown
-;       001 - 400/800 ROM
-;       010 - 1200XL ROM
-;       011 - XL/XE ROM
-;       1xx - unassigned
-; minor OS rev.: (depending on main OS rev.);
-;       400/800:
-;               000 - unknown
-;               001 - Rev. A PAL
-;               010 - Rev. B PAL
-;               011 - Rev. A NTSC
-;               100 - Rev. B NTSC
-;               101 - unassigned (up to 111)
-;       1200XL:
-;               000 - unknown
-;               001 - Rev. 10
-;               010 - Rev. 11
-;               011 - unassigned (up to 111)
-;       XL/XE:
-;               000 - unknown
-;               001 - Rev. 1
-;               010 - Rev. 2
-;               011 - Rev. 3
-;               100 - Rev. 4
-;               101 - unassigned (up to 111)
-;
-
-        .export         _get_ostype
-
-        .include "atari.inc"
-        .include "romswitch.inc"
-
-.ifdef __ATARIXL__
-
-        .import __CHARGEN_START__
-        .segment "LOWCODE"
-
-.macro  disable_rom_save_a
-        pha
-        disable_rom
-        pla
-.endmacro
-
-.else   ; above atarixl, below atari
-
-.macro  disable_rom_save_a
-.endmacro
-
-.endif  ; .ifdef __ATARIXL__
-
-
-; unknown ROM
-
-_unknown:
-        lda     #0
-        tax
-        disable_rom_save_a
-        rts
-
-
-_get_ostype:
-
-        enable_rom
-        lda     $fcd8
-        cmp     #$a2
-        beq     _400800
-        lda     $fff1
-        cmp     #1
-        beq     _1200xl
-        lda     $fff7
-        cmp     #1
-        bcc     _unknown
-        cmp     #5
-        bcs     _unknown
-
-;XL/XE ROM
-
-        sec
-        asl     a
-        asl     a
-        asl     a
-        and     #%00111000
-        ora     #%11
-_fin:   ldx     #0
-        disable_rom_save_a
-        rts
-
-; 1200XL ROM
-
-_1200xl:
-        lda     $fff7           ; revision #
-        cmp     #10
-        beq     _1200_10
-        cmp     #11
-        beq     _1200_11
-        lda     #0              ; for unknown
-        beq     _1200_fin
-
-_1200_10:
-        lda     #%00001000
-        bne     _1200_fin
-
-_1200_11:
-        lda     #%00010000
-
-_1200_fin:
-        ora     #%010
-        bne     _fin
-
-; 400/800 ROM
-
-_400800:
-        lda     $fff8
-        ldx     $fff9
-        cmp     #$dd
-        bne     _400800_1
-        cpx     #$57
-        bne     _400800_unknown
-
-; 400/800 NTSC Rev. A
-
-        lda     #%00011001
-        bne     _fin
-
-; 400/800 unknown
-
-_400800_unknown:
-        lda     #%00000001
-        bne     _fin
-
-_400800_1:
-        cmp     #$d6
-        bne     _400800_2
-        cpx     #$57
-        bne     _400800_unknown
-
-; 400/800 PAL Rev. A
-
-        lda     #%00001001
-        bne     _fin
-
-_400800_2:
-        cmp     #$f3
-        bne     _400800_3
-        cpx     #$e6
-        bne     _400800_unknown
-
-; 400/800 NTSC Rev. B
-
-        lda     #%00100001
-        bne     _fin
-
-_400800_3:
-
-        cmp     #$22
-        bne     _400800_unknown
-        cpx     #$58
-        bne     _400800_unknown
-
-; 400/800 PAL Rev. B
-
-        lda     #%00010001
-        bne     _fin
diff --git a/libsrc/atari/posixdirent.s b/libsrc/atari/posixdirent.s
deleted file mode 100644 (file)
index a722b3b..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-; Native: Shawn Jefferson, December 2005
-; POSIX: Stefan Haubenthal, April 2008
-
-                .include  "atari.inc"
-                .export   _opendir, _readdir, _closedir
-                .import   findfreeiocb, clriocb
-                .import   __oserror, return0, __do_oserror
-                .importzp ptr1, tmp1
-.ifdef  DEFAULT_DEVICE
-                .import __defdev
-.endif
-
-
-.proc   _opendir
-                sta     ptr1
-                stx     ptr1+1
-                jsr     findfreeiocb
-                beq     @iocbok
-                bne     cioerr
-@iocbok:        stx     diriocb
-                jsr     clriocb
-                ldx     diriocb
-                ldy     #0              ; '.' -> "D:*.*"
-                lda     (ptr1),y
-                cmp     #'.'
-                bne     @use_parm
-
-; "." was given as parameter, use default device/dir
-
-.ifdef DEFAULT_DEVICE
-                ; construct a "Dn:*.*" like string from the default drive
-                lda     __defdev+1
-                sta     dddefdev+1      ; copy drive number (overwrite 2nd 'D')
-                lda     #<dddefdev
-                sta     ICBAL,x
-                lda     #>dddefdev
-                sta     ICBAH,x
-                bne     @cont
-.else
-                lda     #<defdev
-                sta     ICBAL,x
-                lda     #>defdev
-                sta     ICBAH,x
-                bne     @cont
-.endif
-
-@use_parm:      lda     ptr1
-                sta     ICBAL,x
-                lda     ptr1+1
-                sta     ICBAH,x
-
-@cont:          lda     #OPEN
-                sta     ICCOM,x
-                lda     #OPNIN|DIRECT
-                sta     ICAX1,x
-                jsr     CIOV
-                bmi     cioerr
-                lda     #0
-                sta     __oserror
-                tax
-                lda     diriocb
-                rts
-.endproc
-
-cioerr:         sty     __oserror
-                lda     #CLOSE
-                sta     ICCOM,x
-                jsr     CIOV            ; close IOCB again since open failed
-                jmp     return0
-
-.proc   _readdir
-                tax
-                lda     #GETREC
-                sta     ICCOM,x
-                lda     #<entry
-                sta     ICBAL,x
-                sta     ptr1
-                lda     #>entry
-                sta     ICBAH,x
-                sta     ptr1+1
-                lda     #DSCTSZ
-                sta     ICBLL,x
-                lda     #0
-                sta     ICBLH,x
-                jsr     CIOV
-                bmi     cioerr
-                ldy     #0              ; FREE SECTORS
-                lda     (ptr1),y
-                cmp     #'0'
-                bcs     cioerr
-                dey
-@next:          iny                     ; remove trailing spaces
-                iny
-                iny
-                lda     (ptr1),y
-                dey
-                dey
-                sta     (ptr1),y
-                cpy     #8
-                bcs     @break
-                cmp     #' '
-                bne     @next
-
-@break:         lda     #'.'            ; extension dot
-                sta     (ptr1),y
-                iny                     ; copy extension
-                sty     tmp1
-                ldy     #10
-                lda     (ptr1),y
-                cmp     #' '
-                bne     @hasext
-
-; no extension present: remove the trailing dot and be done
-                ldy     tmp1
-                dey
-                bne     @done
-
-@hasext:        jsr     copychar
-                ldy     #13             ; d_type
-                sta     (ptr1),y
-                ldy     #11
-                jsr     copychar
-                ldy     #12
-                jsr     copychar
-
-@done:          lda     #0              ; end of string
-                sta     (ptr1),y
-                lda     ptr1
-                ldx     ptr1+1
-                rts
-
-
-copychar:       lda     (ptr1),y        ; src=y dest=tmp1
-                ldy     tmp1
-                cmp     #' '
-                beq     @break
-                sta     (ptr1),y
-                iny
-                sty     tmp1
-@break:         rts
-.endproc
-
-.proc   _closedir
-                tax
-                lda     #CLOSE
-                sta     ICCOM,x
-                jsr     CIOV
-                bmi     @cioerr
-                ldx     #0
-                stx     __oserror               ; clear system specific error code
-                txa
-                rts
-@cioerr:        jmp     __do_oserror
-.endproc
-
-                .data
-.ifdef DEFAULT_DEVICE
-dddefdev:       .byte   "D"
-.endif
-defdev:         .asciiz "D:*.*"
-
-                .bss
-diriocb:        .res    1
-entry:          .res    DSCTSZ
diff --git a/libsrc/atari/randomize.s b/libsrc/atari/randomize.s
deleted file mode 100644 (file)
index ed4400b..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Christian Groessler, 06.11.2002
-;
-; void _randomize (void);
-; /* Initialize the random number generator */
-;
-
-        .export         __randomize
-        .import         _srand
-
-        .include        "atari.inc"
-
-__randomize:              
-        ldx     VCOUNT          ; Use vertical line counter as high byte
-        lda     RTCLOK+2        ; Use clock as low byte
-        jmp     _srand          ; Initialize generator
-
diff --git a/libsrc/atari/read.s b/libsrc/atari/read.s
deleted file mode 100644 (file)
index f8d10fd..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-;
-; Christian Groessler, Jul-2005
-;
-; int __fastcall__ read(int fd,void *buf,int count)
-;
-
-        .include "atari.inc"
-        .import __rwsetup,__do_oserror,__inviocb,__oserror
-        .export _read
-
-_read:  jsr     __rwsetup       ; do common setup for read and write
-        beq     done            ; if size 0, it's a no-op
-        cpx     #$FF            ; invalid iocb?
-        beq     _inviocb
-
-.ifdef  LINEBUF
-        ; E: should be always at IOCB #0
-        ; fixme: what happens when user closes and reopens stdin?
-        cpx     #0              ; E: handler (line oriented keyboard input)?
-        beq     do_line
-.endif
-
-        lda     #GETCHR         ; iocb command code
-        sta     ICCOM,x
-        jsr     CIOV            ; read it
-        bpl     done
-        cpy     #EOFERR         ; eof is treated specially
-        beq     done
-        jmp     __do_oserror    ; update errno
-
-done:   lda     ICBLL,x         ; buf len lo
-        pha                     ; save
-        lda     ICBLH,x         ; get buf len hi
-        tax                     ; to X
-okdone: lda     #0
-        sta     __oserror       ; clear system dependend error code
-        pla                     ; get buf len lo
-        rts
-
-_inviocb:
-        jmp     __inviocb
-
-
-.ifdef  LINEBUF
-
-; line oriented input
-
-        .segment        "EXTZP" : zeropage
-
-index:  .res    1               ; index into line buffer
-cbs:    .res    1               ; current buffer size: buflen - index
-dataptr:.res    2               ; temp pointer to user buffer
-copylen:.res    1               ; temp counter
-
-        .bss
-
-buflen: .res    1               ; length of used part of buffer
-linebuf:.res    LINEBUF         ; the line buffer
-
-        .code
-
-do_line:
-        lda     buflen          ; line buffer active?
-        bne     use_buf         ; yes, get data from there
-
-        ; save user buffer address & length
-        ; update IOCB to point to line buffer
-        lda     ICBLL,x
-        pha
-        lda     #LINEBUF
-        sta     ICBLL,x
-        ;--------
-        lda     ICBLH,x
-        pha
-        lda     #0
-        sta     ICBLH,x
-        ;--------
-        lda     ICBAL,x
-        pha
-        lda     #<linebuf
-        sta     ICBAL,x
-        ;--------
-        lda     ICBAH,x
-        pha
-        lda     #>linebuf
-        sta     ICBAH,x
-
-        lda     #GETREC
-        sta     ICCOM,x
-        jsr     CIOV            ; read input data
-        bpl     newbuf
-        cpy     #EOFERR         ; eof is treated specially
-        beq     newbuf
-        pla                     ; fix stack
-        pla
-        pla
-        pla
-        jmp     __do_oserror    ; update errno
-
-newbuf:
-        lda     ICBLL,x         ; get # of bytes read
-        sta     buflen
-        lda     #0
-        sta     index           ; fresh buffer
-
-        ; restore user buffer address & length
-        pla
-        sta     ICBAH,x
-        ;--------
-        pla
-        sta     ICBAL,x
-        ;--------
-        pla
-        sta     ICBLH,x
-        ;--------
-        pla
-        sta     ICBLL,x
-
-        ; fall into use_buf
-        lda     buflen
-
-; return bytes from line buffer
-; use buflen and index to access buffer
-; update index
-; use dataptr as a temporary pointer
-
-use_buf:
-        sec
-        sbc     index           ; size of unread data in the buffer
-        sta     cbs
-
-        lda     ICBLL,x         ; buf len lo
-        cmp     cbs             ; larger than buffer size?
-        beq     bl1
-        bcs     btsmall         ; yes, adjust length
-
-bl1:    lda     ICBLH,x         ; get buf len hi
-        bne     btsmall         ; buffer too small: buffer contents < read size
-
-; copy ICBLL,x bytes
-
-icbll_copy:
-
-        lda     ICBAL,x         ; buffer address
-        sta     dataptr
-        lda     ICBAH,x         ; buffer address
-        sta     dataptr+1
-        lda     ICBLL,x
-        sta     copylen
-        pha                     ; remember for return value
-        ldy     #0
-        ldx     index
-
-copy:   lda     linebuf,x
-        sta     (dataptr),y
-        iny
-        inx
-        dec     copylen
-        bne     copy
-
-        pla                     ; length
-        pha                     ; save length to return at okdone
-
-        clc
-        adc     index
-        sta     index
-        cmp     buflen          ; buffer used up?
-        bcc     c1              ; not yet
-
-        lda     #0
-        sta     buflen          ; indicate empty line buffer
-
-c1:     ldx     #0
-        jmp     okdone          ; return to caller
-
-btsmall:
-        lda     cbs
-        sta     ICBLL,x
-        bpl     icbll_copy
-
-.endif          ; .ifdef LINEBUF
-
diff --git a/libsrc/atari/revers.s b/libsrc/atari/revers.s
deleted file mode 100644 (file)
index 7195039..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; unsigned char revers (unsigned char onoff);
-;
-        .include "atari.inc"
-        
-        .export         _revers
-        .export         _revflag
-
-_revers:
-        ldx     #$00            ; Assume revers off
-        tay                     ; Test onoff
-        beq     L1              ; Jump if off
-        ldx     #$80            ; Load on value
-L1:     ldy     #$00            ; Assume old value is zero
-        lda     _revflag        ; Load old value
-        stx     _revflag        ; Set new value
-        beq     L2              ; Jump if old value zero
-        iny                     ; Make old value = 1
-L2:     ldx     #$00            ; Load high byte of result
-        tya                     ; Load low byte, set CC
-        rts
-
-        .bss
-
-_revflag:
-        .res    1
diff --git a/libsrc/atari/romswitch.inc b/libsrc/atari/romswitch.inc
deleted file mode 100644 (file)
index ed4cd96..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-;
-; Macros to disable and enable the ROM on Atari XL systems.
-;
-; Christian Groessler, chris@groessler.org, 19-Sep-2013
-;
-;
-; Defines which modify the operation of the macros:
-;
-; CHARGEN_RELOC: If defined, CHBAS and CHBASE are updated when
-;                enabling or disabling the ROM.
-;                If the ROM is enabled, $E0 is written to CHBAS
-;                and CHBASE.
-;                If the ROM is disabled, the upper byte of
-;                __CHARGEN_START__ is written to CHBAS and CHBASE.
-; USEWSYNC:      If defined, the code waits for horizontal retrace
-;                before switching the ROM and updating CHBAS and
-;                CHBASE. This define only has effect if CHARGEN_RELOC
-;                is also defined.
-
-
-.ifdef __ATARIXL__
-
-.ifdef CHARGEN_RELOC
-
-.macro  set_chbase val
-        lda     #val
-        sta     CHBAS
-        sta     CHBASE
-.endmacro
-
-.else   ; above CHARGEN_RELOC, below not
-
-.macro  set_chbase val
-.endmacro
-
-.endif  ; .ifdef CHARGEN_RELOC
-
-
-.if .defined(USEWSYNC) .and .defined(CHARGEN_RELOC)
-
-.macro  wsync
-        sta     WSYNC
-.endmacro
-
-.else   ; above USEWSYNC, below not
-
-.macro  wsync
-.endmacro
-
-.endif
-
-
-; "disable ROM" macros
-
-.macro  disable_rom
-        lda     PORTB
-        and     #$fe
-        wsync
-        sta     PORTB
-        set_chbase >__CHARGEN_START__
-.endmacro
-
-.macro  disable_rom_quick
-        lda     PORTB
-        and     #$fe
-        sta     PORTB
-        set_chbase >__CHARGEN_START__
-.endmacro
-
-.macro  disable_rom_val val
-        lda     val
-        wsync
-        sta     PORTB
-        set_chbase >__CHARGEN_START__
-.endmacro
-
-; "enable ROM" macros
-
-.macro  enable_rom
-        lda     PORTB
-        ora     #1
-        wsync
-        sta     PORTB
-        set_chbase $E0
-.endmacro
-
-.macro  enable_rom_quick
-        lda     PORTB
-        ora     #1
-        sta     PORTB
-        set_chbase $E0
-.endmacro
-
-.else   ; above __ATARIXL__, below not
-
-.macro  disable_rom
-.endmacro
-.macro  enable_rom
-.endmacro
-
-.endif
diff --git a/libsrc/atari/rwcommon.s b/libsrc/atari/rwcommon.s
deleted file mode 100644 (file)
index 5f51cc5..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-;
-; common iocb setup routine for read, write
-; expects __fastcall__ parameters (int fd, void *buf, int count)
-;
-        .include "atari.inc"
-        .include "errno.inc"
-        .import popax
-        .import fdtoiocb
-
-        .export __rwsetup
-
-
-__rwsetup:
-
-        pha                     ; push size in stack
-        txa
-        pha
-        jsr     popax           ; get buffer address
-        pha
-        txa
-        pha
-        jsr     popax           ; get handle
-        jsr     fdtoiocb        ; convert to iocb
-        bmi     iocberr         ; negative (X=$FF or A>$7F) on error.
-        tax
-        pla                     ; store address
-        sta     ICBAH,x
-        pla
-        sta     ICBAL,x
-        pla                     ; store length
-        sta     ICBLH,x
-        pla
-        sta     ICBLL,x
-        ora     ICBLH,x         ; returns Z if length is 0
-        rts
-
-iocberr:pla
-        pla
-        pla
-        pla
-        ldx     #$FF            ; indicate error + clear ZF
-        rts
-
diff --git a/libsrc/atari/save_area.inc b/libsrc/atari/save_area.inc
deleted file mode 100644 (file)
index ac433fd..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Atari XL, shared data between 2nd load chunk and main chunk, header file
-;
-; Contains old values of modified system variables and ports.
-;
-; Christian Groessler, chris@groessler.org, 2013
-;
-
-.import SAVMSC_save
-.import MEMTOP_save
-.import APPMHI_save
-.import RAMTOP_save
-.import PORTB_save
diff --git a/libsrc/atari/save_area.s b/libsrc/atari/save_area.s
deleted file mode 100644 (file)
index 8e6b133..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-;
-; Atari XL, shared data between 2nd load chunk and main chunk, definition file
-;
-; Contains old values of modified system variables and ports.
-;
-; Christian Groessler, chris@groessler.org, 2013
-;
-
-.ifdef __ATARIXL__
-
-.export         SAVMSC_save
-.export         MEMTOP_save
-.export         APPMHI_save
-.export         RAMTOP_save
-.export         PORTB_save
-
-.segment        "LOWBSS"
-
-SAVMSC_save:    .res    2
-MEMTOP_save:    .res    2
-APPMHI_save:    .res    2
-RAMTOP_save:    .res    1
-PORTB_save:     .res    1
-
-.endif
diff --git a/libsrc/atari/savevec.s b/libsrc/atari/savevec.s
deleted file mode 100644 (file)
index dd6dda1..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-;
-; save and restore system vectors
-; originally by Mark Keates
-;
-; void _save_vecs(void);
-; void _rest_vecs(void);
-;
-
-        .export __save_vecs,__rest_vecs
-.include        "atari.inc"
-
-        .bss
-
-old_dli:     .res 2
-old_dlist:   .res 2
-old_vbi:     .res 2
-old_vbd:     .res 2
-old_gra:     .res 1
-old_dma:     .res 1
-old_prior:   .res 1
-old_cols:    .res 8
-old_set:     .res 1
-old_rmargin: .res 1     ; lmargin saved in startup code
-
-        .code
-
-.proc   __save_vecs
-
-        lda     VDSLST
-        sta     old_dli
-        lda     VDSLST+1
-        sta     old_dli+1
-        lda     SDLSTL
-        sta     old_dlist
-        lda     SDLSTL+1
-        sta     old_dlist+1
-        lda     VVBLKI
-        sta     old_vbi
-        lda     VVBLKI+1
-        sta     old_vbi+1
-        lda     VVBLKD
-        sta     old_vbd
-        lda     VVBLKD+1
-        sta     old_vbd+1
-        lda     GRACTL
-        sta     old_gra
-        lda     SDMCTL
-        sta     old_dma
-        lda     GPRIOR
-        sta     old_prior
-        lda     CHBAS
-        sta     old_set
-        lda     RMARGN
-        sta     old_rmargin
-
-        ldy     #7
-SETUP1:
-        lda     PCOLR0,y
-        sta     old_cols,y
-        dey
-        bpl     SETUP1
-        rts
-
-.endproc
-
-.proc   __rest_vecs
-
-        lda     #6
-        ldx     old_vbi+1
-        ldy     old_vbi
-        jsr     SETVBV
-        lda     #7
-        ldx     old_vbd+1
-        ldy     old_vbd
-        jsr     SETVBV
-        lda     old_dli
-        sta     VDSLST
-        lda     old_dli+1
-        sta     VDSLST+1
-        lda     old_dlist
-        sta     SDLSTL
-        lda     old_dlist+1
-        sta     SDLSTL+1
-        lda     old_gra
-        sta     GRACTL
-        lda     old_prior
-        sta     GPRIOR
-        lda     old_dma
-        sta     SDMCTL
-        lda     old_set
-        sta     CHBAS
-        lda     old_rmargin
-        sta     RMARGN
-        lda     #$FF
-        sta     CH
-        ldy     #7
-SETUP2:
-        lda     old_cols,Y
-        sta     PCOLR0,Y
-        dey
-        bpl     SETUP2
-        rts
-
-.endproc
-
diff --git a/libsrc/atari/scrdev.s b/libsrc/atari/scrdev.s
deleted file mode 100644 (file)
index 2d6ff3e..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-; Name of the "screen" device
-
-        .export scrdev
-
-        .rodata
-
-scrdev: .byte   "S:", 0
diff --git a/libsrc/atari/scroll.s b/libsrc/atari/scroll.s
deleted file mode 100644 (file)
index 5e8428c..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-;
-; Christian Groessler, June 2004
-;
-; void __fastcall__ _scroll (signed char numlines);
-; numlines > 0  scrolls up
-; numlines < 0  scrolls down
-;
-
-        .include        "atari.inc"
-        .importzp       tmp1,tmp4,ptr1,ptr2
-        .import         mul40,_clrscr
-        .export         __scroll
-
-.proc   __scroll
-
-        cmp     #0
-        beq     jmpfin
-;       cmp     #$80
-;       bcc     up
-        bpl     up
-
-;scroll down
-        eor     #$ff
-        clc
-        adc     #1              ; make positive
-        sta     tmp1
-
-        cmp     #24             ; scroll >= the whole screen?
-        bcc     down_ok
-        jmp     _clrscr
-
-down_ok:lda     SAVMSC
-        clc
-        adc     #<(40*23)
-        sta     ptr1
-        sta     ptr2
-        lda     SAVMSC+1
-        adc     #>(40*23)
-        sta     ptr1+1          ; point to last line on screen
-        sta     ptr2+1
-
-        lda     tmp1
-        jsr     mul40
-        sta     tmp4
-        lda     ptr2
-        sec
-        sbc     tmp4
-        sta     ptr2
-        stx     tmp4
-        lda     ptr2+1
-        sbc     tmp4
-        sta     ptr2+1
-
-        lda     #24             ; # of lines on screen
-        sec
-        sbc     tmp1            ; # of lines to move
-        tax
-
-        ;very simple, could be improved
-
-scrold: ldy     #39             ; # of chars on a line - 1
-copy_d: lda     (ptr2),y
-        sta     (ptr1),y
-        dey
-        bpl     copy_d
-        lda     ptr1
-        sec
-        sbc     #40
-        sta     ptr1
-        bcs     u1
-        dec     ptr1+1
-u1:     lda     ptr2
-        sec
-        sbc     #40
-        sta     ptr2
-        bcs     u2
-        dec     ptr2+1
-u2:     dex
-        bne     scrold
-
-        ; fill new scrolled in lines with space
-
-        ldx     tmp1            ; # of new lines
-fild:   lda     #0
-        ldy     #39
-fill_d: sta     (ptr1),y
-        dey
-        bpl     fill_d
-        dex
-jmpfin: beq     finish
-        lda     ptr1
-        sec
-        sbc     #40
-        sta     ptr1
-        bcs     u3
-        dec     ptr1+1
-u3:     jmp     fild
-
-;scroll up
-up:     sta     tmp1            ; # of lines to scroll
-        cmp     #24             ; scroll >= the whole screen?
-        bcc     up_ok
-        jmp     _clrscr
-
-        ;multiply by 40 (xsize)
-up_ok:  jsr     mul40
-        clc
-        adc     SAVMSC          ; add start of screen mem
-        sta     ptr2
-        txa
-        adc     SAVMSC+1
-        sta     ptr2+1
-        lda     SAVMSC+1
-        sta     ptr1+1
-        lda     SAVMSC
-        sta     ptr1
-        lda     #24             ; # of lines on screen
-        sec
-        sbc     tmp1            ; # of lines to move
-        tax
-
-        ;very simple, could be improved
-
-scroll: ldy     #39             ; # of chars on a line - 1
-copy_l: lda     (ptr2),y
-        sta     (ptr1),y
-        dey
-        bpl     copy_l
-        lda     #40
-        clc
-        adc     ptr1
-        sta     ptr1
-        bcc     l1
-        inc     ptr1+1
-l1:     lda     #40
-        clc
-        adc     ptr2
-        sta     ptr2
-        bcc     l2
-        inc     ptr2+1
-l2:     dex
-        bne     scroll
-
-        ; fill new scrolled in lines with space
-
-        ldx     tmp1            ; # of new lines
-fill:   lda     #0
-        ldy     #39
-fill_l: sta     (ptr1),y
-        dey
-        bpl     fill_l
-        dex
-        beq     finish
-        lda     #40
-        clc
-        adc     ptr1
-        sta     ptr1
-        bcc     l3
-        inc     ptr1+1
-l3:     jmp     fill
-
-finish: rts
-
-.endproc
diff --git a/libsrc/atari/ser/atrrdev.s b/libsrc/atari/ser/atrrdev.s
deleted file mode 100644 (file)
index 3a7bc21..0000000
+++ /dev/null
@@ -1,585 +0,0 @@
-;
-; Christian Groessler, Dec-2001
-; converted to driver interface Dec-2013
-;
-; RS232 routines using the R: device (currently tested with an 850 only)
-;
-
-        .include        "zeropage.inc"
-        .include        "ser-kernel.inc"
-        .include        "ser-error.inc"
-        .include        "atari.inc"
-
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-.ifdef __ATARIXL__
-        module_header   _atrxrdev_ser
-.else
-        module_header   _atrrdev_ser
-.endif
-
-; Driver signature
-
-        .byte   $73, $65, $72           ; "ser"
-        .byte   SER_API_VERSION         ; Serial API version number
-
-; Library reference
-
-libref: .addr   $0000
-
-; Jump table
-
-        .word   SER_INSTALL
-        .word   SER_UNINSTALL
-        .word   SER_OPEN
-        .word   SER_CLOSE
-        .word   SER_GET
-        .word   SER_PUT
-        .word   SER_STATUS
-        .word   SER_IOCTL
-        .word   SER_IRQ
-
-
-        .rodata
-
-rdev:   .byte   "R:", ATEOL, 0
-bauds:  .byte   1               ; SER_BAUD_45_5
-        .byte   2               ; SER_BAUD_50
-        .byte   4               ; SER_BAUD_75
-        .byte   5               ; SER_BAUD_110
-        .byte   6               ; SER_BAUD_134_5
-        .byte   7               ; SER_BAUD_150
-        .byte   8               ; SER_BAUD_300
-        .byte   9               ; SER_BAUD_600
-        .byte   10              ; SER_BAUD_1200
-        .byte   11              ; SER_BAUD_1800
-        .byte   12              ; SER_BAUD_2400
-        .byte   0               ; SER_BAUD_3600
-        .byte   13              ; SER_BAUD_4800
-        .byte   0               ; SER_BAUD_7200
-        .byte   14              ; SER_BAUD_9600
-        .byte   0               ; SER_BAUD_19200
-        .byte   0               ; SER_BAUD_38400
-        .byte   0               ; SER_BAUD_57600
-        .byte   0               ; SER_BAUD_115200
-        .byte   0               ; SER_BAUD_230400
-        .byte   0               ; SER_BAUD_31250
-        .byte   0               ; SER_BAUD_62500
-        .byte   3               ; SER_BAUD_56_875
-num_bauds       =       * - bauds
-databits:
-        .byte   48              ; SER_BITS_5
-        .byte   32              ; SER_BITS_6
-        .byte   16              ; SER_BITS_7
-        .byte   0               ; SER_BITS_8
-num_databits    =       * - databits
-parities:
-        .byte   0               ; SER_PAR_NONE
-        .byte   4+1             ; SER_PAR_ODD
-        .byte   2+8             ; SER_PAR_EVEN
-        ;.byte  0               ; SER_PAR_MARK
-        ;.byte  0               ; SER_PAR_SPACE
-num_parities    =       * - parities
-
-        .bss
-
-; receive buffer
-RECVBUF_SZ = 256
-recv_buf: .res  RECVBUF_SZ
-
-cm_run: .res    1       ; concurrent mode running?
-
-        .data
-
-rshand: .word   $ffff
-
-; jump table into main program, initialized from libref
-my_newfd:
-        .byte   $4C
-        .word   0
-my__close:
-        .byte   $4C
-        .word   0
-my_pushax:
-        .byte   $4C
-        .word   0
-my_popax:
-        .byte   $4C
-        .word   0
-my_findfreeiocb:
-        .byte   $4C
-        .word   0
-my___do_oserror:
-        .byte   $4C
-        .word   0
-my_fddecusage:
-        .byte   $4C
-        .word   0
-my_fdtoiocb:
-        .byte   $4C
-        .word   0
-my___inviocb:
-        .byte   $4C
-        .word   0
-my_clriocb:
-        .byte   $4C
-        .word   0
-my_CIOV:
-        .byte   $4C
-        .word   0
-
-        .code
-
-invbaud:
-        lda     #<SER_ERR_BAUD_UNAVAIL
-        ldx     #>SER_ERR_BAUD_UNAVAIL
-openerr:
-        rts
-
-
-;----------------------------------------------------------------------------
-; SER_OPEN: A pointer to a ser_params structure is passed in ptr1.
-; Must return an SER_ERR_xx code in a/x.
-
-SER_OPEN:
-        jsr     do_open
-        bne     openerr
-
-; set line parameters
-        lda     rshand
-        ldx     #0
-        jsr     my_fdtoiocb     ; get iocb index into X
-        bmi     openerr         ; shouldn't happen
-        tax
-
-        ; set baud rate, word size, stop bits and ready monitoring
-
-        ; build ICAX1 value
-        ldy     #SER_PARAMS::BAUDRATE
-        lda     (ptr1),y
-        cmp     #num_bauds
-        bcs     invbaud
-
-        tay
-        lda     bauds,y
-        beq     invbaud
-        sta     ICAX1,x
-
-        ldy     #SER_PARAMS::DATABITS
-        lda     (ptr1),y
-        cmp     #num_databits
-        bcs     init_err
-
-        tay
-        lda     databits,y
-        ora     ICAX1,x
-        sta     ICAX1,x
-
-        ldy     #SER_PARAMS::STOPBITS
-        lda     (ptr1),y
-        clc
-        ror     a
-        ror     a
-        ora     ICAX1,x
-        sta     ICAX1,x
-
-        lda     #36             ; xio 36, baud rate
-        sta     ICCOM,x
-        lda     #0
-        ;ICAX2 = 0, monitor nothing
-        sta     ICAX2,x
-        sta     ICBLL,x
-        sta     ICBLH,x
-        sta     ICBAL,x
-        sta     ICBAH,x
-        jsr     my_CIOV
-        bmi     cioerr
-
-        ; check if the handshake setting is valid
-        ldy     #SER_PARAMS::HANDSHAKE
-        lda     (ptr1),y
-        cmp     #SER_HS_HW      ; this is all we support
-        bne     init_err
-
-        ; set handshake lines
-        lda     #34             ; xio 34, set cts, dtr etc
-        sta     ICCOM,x
-        lda     #192+48+3       ; DTR on, RTS on, XMT on
-        sta     ICAX1,x
-        jsr     my_CIOV
-        bmi     cioerr
-
-        ; set translation and parity
-        ldy     #SER_PARAMS::PARITY
-        lda     (ptr1),y
-        cmp     #num_parities
-        bcs     init_err
-
-        tay
-        lda     parities,y
-        ora     #32             ; no translation
-        sta     ICAX1,x
-
-        lda     #38             ; xio 38, translation and parity
-        sta     ICCOM,x
-        jsr     my_CIOV
-        bmi     cioerr
-
-        lda     #<SER_ERR_OK
-        tax                             ; A is zero
-        rts
-
-inverr: jmp     my___inviocb
-
-cioerr:
-        ; @@@ need to close IOCB here
-        jsr     my_fddecusage   ; decrement usage counter of fd as open failed
-
-init_err:
-        ldx     #0
-        lda     #SER_ERR_INIT_FAILED
-        rts
-
-;---- open the device
-
-do_open:
-        jsr     my_findfreeiocb
-        bne     init_err
-        txa
-        tay                     ; move iocb # into Y
-        lda     #3
-        sta     tmp3            ; name length + 1
-        lda     #<rdev
-        ldx     #>rdev
-        jsr     my_newfd
-        tya
-        bcs     @doopen         ; C set: open needed / device not already open
-
-        pha
-        jsr     SER_CLOSE       ;** shut down if started  @@@TODO check this out!!
-        pla
-
-@doopen:tax
-        pha
-        jsr     my_clriocb
-        pla
-        tax
-        lda     #<rdev
-        sta     ICBAL,x
-        lda     #>rdev
-        sta     ICBAH,x
-        lda     #OPEN
-        sta     ICCOM,x
-
-        lda     #$0D            ; mode in+out+concurrent
-        sta     ICAX1,x
-        lda     #0
-        sta     ICAX2,x
-        sta     ICBLL,x         ; zap buf len
-        sta     ICBLH,x
-        jsr     my_CIOV
-        bmi     cioerr
-
-        lda     tmp2            ; get fd (from newfd)
-        sta     rshand
-        ldx     #0
-        stx     rshand+1
-        txa
-        rts
-
-;----------------------------------------------------------------------------
-; CLOSE: Close the port, disable interrupts and flush the buffer. Called
-; without parameters. Must return an error code in a/x.
-;
-;----------------------------------------------------------------------------
-; SER_UNINSTALL routine. Is called before the driver is removed from memory.
-; Must return an SER_ERR_xx code in a/x.
-;
-
-SER_UNINSTALL:
-SER_CLOSE:
-        lda     rshand
-        cmp     #$ff
-        beq     @done
-
-        ldx     rshand+1
-        jsr     my__close
-        ldx     #$ff
-        stx     rshand
-        stx     rshand+1
-        inx
-        stx     cm_run
-@done:  lda     #<SER_ERR_OK
-        ldx     #>SER_ERR_OK
-        rts
-
-;----------------------------------------------------------------------------
-; SER_GET: Will fetch a character from the receive buffer and store it into the
-; variable pointer to by ptr1. If no data is available, SER_ERR_NO_DATA is
-; return.
-;
-
-SER_GET:
-        ldy     rshand
-        cpy     #$ff
-        beq     ni_err           ; work only if initialized
-
-        lda     rshand
-        ldx     #0
-        jsr     my_fdtoiocb
-        tax
-        lda     cm_run          ; concurrent mode already running?
-        bne     @go
-        jsr     ena_cm          ; turn on concurrent mode
-
-@go:    ; check whether there is any input available
-
-        lda     #STATIS         ; status request, returns bytes pending
-        sta     ICCOM,x
-        jsr     my_CIOV
-        bmi     ser_error
-
-        lda     DVSTAT+1        ; get byte count pending
-        ora     DVSTAT+2
-        beq     @nix_da         ; no input waiting...
-
-        ; input is available: get it!
-
-        lda     #GETCHR         ; get raw bytes
-        sta     ICCOM,x         ; in command code
-        lda     #0
-        sta     ICBLL,x
-        sta     ICBLH,x
-        sta     ICBAL,x
-        sta     ICBAH,x
-        jsr     my_CIOV         ; go get it
-        bmi     ser_error
-
-        ldx     #0
-        sta     (ptr1,x)        ; return received byte
-        txa
-        rts
-
-@nix_da:lda     #SER_ERR_NO_DATA
-        ldx     #0
-        rts
-
-ser_error:
-        lda     #SER_ERR_OVERFLOW       ; there is no large selection of serial error codes... :-/
-        ldx     #0
-        rts
-
-ni_err: lda     #SER_ERR_NOT_OPEN
-        ldx     #0
-        rts
-
-;----------------------------------------------------------------------------
-; SER_PUT: Output character in A.
-; Must return an error code in a/x.
-;
-
-SER_PUT:
-        ldy     rshand
-        cpy     #$ff
-        beq     ni_err          ; work only if initialized
-
-        pha                     ; remember char to write
-        lda     rshand
-        ldx     #0
-        jsr     my_fdtoiocb
-        tax
-
-        lda     cm_run          ; concurrent mode already running?
-        bne     @go
-        jsr     ena_cm          ; turn on concurrent mode
-
-        ; @@@TODO:       check output buffer overflow
-@go:    lda     #PUTCHR         ; put raw bytes
-        sta     ICCOM,x         ; in command code
-        lda     #0
-        sta     ICBLL,x
-        sta     ICBLH,x
-        sta     ICBAL,x
-        sta     ICBAH,x
-        pla                     ; get the char back
-        jsr     my_CIOV         ; go do it
-        bmi     ser_error
-        lda     #0
-        tax
-        rts
-
-;----------------------------------------------------------------------------
-; SER_STATUS: Return the status in the variable pointed to by ptr1.
-; Must return an error code in a/x.
-;
-
-SER_STATUS:
-        ; fall through to SER_IOCTL
-
-;----------------------------------------------------------------------------
-; SER_IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
-; specific data in ptr1, and the ioctl code in A.
-; Must return an error code in a/x.
-;
-
-SER_IOCTL:
-        lda     #<SER_ERR_INV_IOCTL     ; We don't support ioclts for now
-        ldx     #>SER_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; SER_IRQ: Not used on the Atari
-;
-
-SER_IRQ     = $0000
-
-;----------------------------------------------------------------------------
-; SER_INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present.
-; Must return an SER_ERR_xx code in a/x.
-
-SER_INSTALL:
-        ; check if R: device is installed
-        ldy     #0
-search: lda     HATABS,y                ; get device name
-        cmp     #'R'
-        beq     found
-        iny
-        iny
-        iny
-        cpy     #MAXDEV
-        bcc     search
-
-; R: device not found, return error
-
-        lda     #<SER_ERR_NO_DEVICE
-        ldx     #0
-        rts
-
-; R: device found, initialize jump table into main program
-
-found:  lda     ptr3
-        pha
-        lda     ptr3+1
-        pha
-        lda     libref
-        sta     ptr3
-        lda     libref+1
-        sta     ptr3+1
-
-        ldy     #0
-        lda     (ptr3),y
-        sta     my_newfd+1
-        iny
-        lda     (ptr3),y
-        sta     my_newfd+2
-        iny
-
-        lda     (ptr3),y
-        sta     my__close+1
-        iny
-        lda     (ptr3),y
-        sta     my__close+2
-        iny
-
-        lda     (ptr3),y
-        sta     my_pushax+1
-        iny
-        lda     (ptr3),y
-        sta     my_pushax+2
-        iny
-
-        lda     (ptr3),y
-        sta     my_popax+1
-        iny
-        lda     (ptr3),y
-        sta     my_popax+2
-        iny
-
-        lda     (ptr3),y
-        sta     my_findfreeiocb+1
-        iny
-        lda     (ptr3),y
-        sta     my_findfreeiocb+2
-        iny
-
-        lda     (ptr3),y
-        sta     my___do_oserror+1
-        iny
-        lda     (ptr3),y
-        sta     my___do_oserror+2
-        iny
-
-        lda     (ptr3),y
-        sta     my_fddecusage+1
-        iny
-        lda     (ptr3),y
-        sta     my_fddecusage+2
-        iny
-
-        lda     (ptr3),y
-        sta     my_fdtoiocb+1
-        iny
-        lda     (ptr3),y
-        sta     my_fdtoiocb+2
-        iny
-
-        lda     (ptr3),y
-        sta     my___inviocb+1
-        iny
-        lda     (ptr3),y
-        sta     my___inviocb+2
-        iny
-
-        lda     (ptr3),y
-        sta     my_clriocb+1
-        iny
-        lda     (ptr3),y
-        sta     my_clriocb+2
-        iny
-
-        lda     (ptr3),y
-        sta     my_CIOV+1
-        iny
-        lda     (ptr3),y
-        sta     my_CIOV+2
-        ;iny
-
-        pla
-        sta     ptr3+1
-        pla
-        sta     ptr3
-
-        lda     #<SER_ERR_OK
-        tax                     ; A is zero
-        rts
-
-
-; enable concurrent rs232 mode
-; gets iocb index in X
-; all registers destroyed
-
-.proc   ena_cm
-
-        lda     #40             ; XIO 40, start concurrent IO
-        sta     ICCOM,x
-        sta     cm_run          ; indicate concurrent mode is running
-        lda     #$0D            ; value from 850 manual, p62.  must be $0D?,
-        sta     ICAX1,x         ;  or any non-zero?
-        lda     #0
-        sta     ICAX2,x
-        lda     #<recv_buf
-        sta     ICBAL,x
-        lda     #>recv_buf
-        sta     ICBAH,x
-        lda     #<RECVBUF_SZ
-        sta     ICBLL,x
-        lda     #>RECVBUF_SZ
-        sta     ICBLH,x
-        jmp     my_CIOV
-
-.endproc        ;ena_cm
diff --git a/libsrc/atari/serref.s b/libsrc/atari/serref.s
deleted file mode 100644 (file)
index 89ef1e5..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-;
-; Christian Groessler, 2014-04-22
-;
-
-        .include        "atari.inc"
-
-        .export         ser_libref
-
-        .import         _close, pushax, popax
-        .import         findfreeiocb
-        .import         __do_oserror
-        .import         fddecusage
-        .import         fdtoiocb
-        .import         __inviocb
-        .import         clriocb
-        .import         newfd
-
-ser_libref      := atari_ser_libref
-
-.rodata
-
-atari_ser_libref:
-        .word   newfd
-        .word   _close
-        .word   pushax
-        .word   popax
-        .word   findfreeiocb
-        .word   __do_oserror
-        .word   fddecusage
-        .word   fdtoiocb
-        .word   __inviocb
-        .word   clriocb
-        .word   CIOV
diff --git a/libsrc/atari/setcolor.s b/libsrc/atari/setcolor.s
deleted file mode 100644 (file)
index bf3b895..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-;
-; Christian Groessler, June 2004
-;
-; this file provides a color functions similar to BASIC
-;
-; void __fastcall__ _setcolor     (unsigned char color_reg, unsigned char hue, unsigned char luminace);
-; void __fastcall__ _setcolor_low (unsigned char color_reg, unsigned char color_value);
-; unsigned char __fastcall__ _getcolor (unsigned char color_reg);
-;
-
-
-        .export         __setcolor, __setcolor_low, __getcolor
-        .import         popa
-        .include        "atari.inc"
-
-.proc   __getcolor
-
-        tax
-        lda     COLOR0,x        ; get current value
-        ldx     #0
-        rts
-
-.endproc
-
-.proc   __setcolor
-
-;       asl     a               ; not -> BASIC compatible
-        sta     lum             ; remember luminance
-        jsr     popa            ; get hue
-        asl     a
-        asl     a
-        asl     a
-        asl     a
-        ora     lum
-;       jmp     __setcolor_low
-
-.endproc
-
-.proc   __setcolor_low
-
-        pha
-        jsr     popa
-        tax
-        pla
-        sta     COLOR0,x
-        rts
-
-.endproc
-
-        .bss
-lum:    .res    1
diff --git a/libsrc/atari/shadow_ram_handlers.s b/libsrc/atari/shadow_ram_handlers.s
deleted file mode 100644 (file)
index 53a71ab..0000000
+++ /dev/null
@@ -1,1101 +0,0 @@
-;
-; Atari XL shadow RAM handlers
-;
-; Christian Groessler, chris@groessler.org, 2013
-;
-
-;DEBUG           =       1
-CHKBUF          =       1       ; check if bounce buffering is needed (bounce buffering is always done if set to 0)
-
-.ifdef __ATARIXL__
-
-SHRAM_HANDLERS  =       1
-        .include        "atari.inc"
-        .include        "save_area.inc"
-        .include        "zeropage.inc"
-        .include        "romswitch.inc"
-
-        .import         __CHARGEN_START__
-
-        .export         sram_init
-        .export         KEYBDV_handler
-        .export         CIO_handler
-        .export         SIO_handler
-        .export         SETVBV_handler
-
-BUFSZ           =       128     ; bounce buffer size
-BUFSZ_SIO       =       256
-
-.segment "INIT"
-
-; Turn off ROMs, install system and interrupt wrappers, set new chargen pointer
-
-sram_init:
-
-; disable all interrupts
-        ldx     #0
-        stx     NMIEN           ; disable NMI
-        sei
-
-; disable ROMs
-        disable_rom
-
-; setup interrupt vectors
-        lda     #<my_IRQ_han
-        sta     $fffe
-        lda     #>my_IRQ_han
-        sta     $ffff
-
-        lda     #<my_RESET_han
-        sta     $fffc
-        lda     #>my_RESET_han
-        sta     $fffd
-
-        lda     #<my_NMI_han
-        sta     $fffa
-        lda     #>my_NMI_han
-        sta     $fffb
-
-; enable interrupts
-        cli
-        lda     #$40
-        sta     NMIEN
-
-        rts
-
-.segment        "EXTZP" : zeropage
-
-zpptr1: .res    2
-
-
-.segment "LOWBSS"
-
-; bounce buffers for CIO and SIO calls
-bounce_buffer:  .res    BUFSZ_SIO
-
-
-.segment "LOWCODE"
-
-
-; Interrupt handlers
-; ------------------
-
-; The interrupt handlers don't look at the current state of PORTB and
-; unconditionally disable the ROMs on exit.
-; Please note that this works, since if the ROMs are enabled we anyway
-; aren't being called here because the vectors are pointing to their
-; original ROM locations.
-
-.macro  int_wrap orgvec
-        .local  ret
-        pha
-        enable_rom_quick
-        lda     #>ret
-        pha
-        lda     #<ret
-        pha
-        php
-        jmp     (orgvec)
-ret:    disable_rom_quick
-        pla
-        rti
-.endmacro
-
-my_IRQ_han:
-.ifdef DEBUG
-        php
-        pha
-        tya
-        pha
-        ldy     #0
-        lda     (SAVMSC),y
-        clc
-        adc     #1
-        sta     (SAVMSC),y
-        pla
-        tay
-        pla
-        plp
-.endif
-        int_wrap $FFFE
-
-my_NMI_han:
-.ifdef DEBUG
-        php
-        pha
-        tya
-        pha
-        ldy     #39
-        lda     (SAVMSC),y
-        clc
-        adc     #1
-        sta     (SAVMSC),y
-        pla
-        tay
-        pla
-        plp
-.endif
-; set I bit to interrupted value
-        pha
-        txa
-        pha
-        tsx
-        lda     $103,x
-        pha
-        plp
-        pla
-        tax
-        pla
-        int_wrap $FFFA
-
-my_RESET_han:
-        enable_rom
-        jmp     ($FFFC)
-
-
-; System request handlers
-; -----------------------
-
-
-; for filenames we assume they will fit into our bounce buffer
-
-; one filename, terminated by "invalid character", located at ICBAL/ICBAH
-
-CIO_filename:
-.if CHKBUF
-        jsr     chk_CIO_buf_fn
-        bcc     CIO_call_a
-.endif
-        jsr     setup_zpptr1_y0
-        jsr     copy_filename
-CIO_fn_cont:
-        jsr     bncbuf_to_iocb
-        ldy     CIO_y
-        jsr     CIO_call_a              ; call CIO (maybe A isn't needed, then we could call CIO_call)
-        php
-        pha
-        jsr     restore_icba            ; restore original ICBAL/ICBAH
-        pla
-        plp
-        rts                             ; back to application
-
-
-; two filenames, terminated and separated by "invalid character", located at ICBAL/ICBAH
-
-CIO_filename2:
-.if CHKBUF
-        jsr     chk_CIO_buf_fn2
-        bcc     CIO_call_a
-.endif
-        jsr     setup_zpptr1_y0
-        jsr     copy_filename
-        iny
-        jsr     copy_filename
-        jmp     CIO_fn_cont
-
-
-
-; CIO handler
-; We have buffer pointer and length entries in the IOCB, but their
-; usage depends on the function.
-; Some functions don't care about any of them (pointer and length),
-; and some only use the pointer (like e.g. OPEN), and some use both.
-; So we need function specific handlers to correctly deal with
-; buffers which are overlapping with the ROM area.
-;
-; FIXME: Currently only the requests used by the runtime lib are handled.
-
-CIO_handler:
-
-; @@@ TODO: check X for valid IOCB index ((X < $80) and ((X & $F) == 0))
-
-        sta     CIO_a
-        sty     CIO_y
-        stx     CIO_x
-
-        lda     ICCOM,x                 ; get function
-        cmp     #OPEN
-        beq     CIO_filename            ; filename as input parameter in buffer, length not used
-        cmp     #PUTREC
-        bcc     CIO_read                ; input (GETREC or GETCHR)
-        cmp     #CLOSE
-        bcc     CIO_write_jmp           ; output (PUTREC or PUTCHR)
-        beq     CIO_call_a              ; pass through, buffer not used
-        cmp     #RENAME                 ; 2 filenames as input parameters in buffer, length not used
-        beq     CIO_filename2
-        cmp     #GETCWD
-        bcc     CIO_filename            ; filename as input parameter in buffer, length not used
-        beq     CIO_invalid             ; GETCWD not supported yet
-        bcs     CIO_call_a              ; other commands: assume no buffer
-; not reached
-
-; enable ROM, call CIO, disable ROM
-
-CIO_call_a:
-        lda     CIO_a
-
-CIOV_call:
-        pha
-        lda     PORTB
-        sta     cur_CIOV_PORTB
-        enable_rom
-        pla
-        jsr     CIOV_org
-        php
-        pha
-        disable_rom_val cur_CIOV_PORTB
-        pla
-        plp
-        rts
-
-
-CIO_write_jmp:
-        jmp     CIO_write
-
-CIO_invalid:
-        lda     CIO_a
-        ldy     #DINVCM
-        rts
-
-; READ handler
-; ------------
-
-CIO_read:
-        lda     ICBLL,x
-        ora     ICBLH,x
-        beq     CIO_call_a              ; special I/O through A register in case buffer length is 0
-
-.if CHKBUF
-        jsr     chk_CIO_buf
-        bcc     CIO_call_a
-.endif
-
-; If the data length is larger than our bounce buffer, we have to split the request into smaller ones.
-; Otherwise we can get away with one call and a copy to the final destination afterwards.
-
-        lda     ICBLH,x                 ; get high byte of length
-        bne     big_read                ; not zero -> data too large for our buffers
-                                        ; CHANGE HERE TO SUPPORT BOUNCE BUFFERS > 255 BYTES
-        lda     #<BUFSZ
-        cmp     ICBLL,x
-        bcc     big_read
-
-; Data size fits into bounce buffer
-
-        jsr     setup_zpptr1
-        jsr     bncbuf_to_iocb
-        jsr     CIO_call_a              ; call CIO
-        php
-        bpl     @no_err
-        cpy     #EOFERR
-        beq     @no_err
-        pha
-        jsr     restore_icba
-        pla
-        plp
-        rts                             ; return with error
-
-@no_err:
-        sta     CIO_a
-        sty     CIO_y
-
-        jsr     copy_to_user            ; copy data into user buffer
-        jsr     restore_icba
-
-        lda     CIO_a
-        ldy     CIO_y
-        plp
-        rts                             ; return with success
-
-; Data size does not fit into bounce buffer
-
-big_read:
-        lda     #0
-        sta     retlen                  ; initialize return length
-        sta     retlen+1
-        jsr     iocblen_to_orig_len
-        jsr     iocbptr_to_orig_ptr
-        jsr     setup_zpptr1
-        jsr     bncbuf_to_iocb          ; let ICBAL/ICBAH point to bounce buffer
-
-br_loop:
-        jsr     cmp_orig_len_bnc_bufsz  ; is transfer length > bounce buffer size?
-        bcs     br_last                 ; no, last transfer, use remaining size
-
-        lda     #>BUFSZ
-        sta     ICBLH,x                 ; set data length
-        lda     #<BUFSZ
-        sta     ICBLL,x
-        bne     br_cont
-
-br_last:
-        lda     orig_len+1
-        sta     ICBLH,x                 ; set data length
-        lda     orig_len
-        sta     ICBLL,x
-
-br_cont:
-        sta     req_len                 ; remember length of this request
-        lda     ICBLH,x
-        sta     req_len+1
-        jsr     CIO_call_a              ; do the request
-        php
-        bpl     br_no_err
-        cpy     #EOFERR
-        beq     br_no_err
-
-        pha
-        jsr     restore_icba
-        pla
-        plp
-        rts                             ; return with error
-
-br_no_err:
-        sta     CIO_a
-        sty     CIO_y
-        pla
-        sta     CIO_p
-        jsr     copy_to_user
-
-; update retlen
-        clc
-        lda     retlen
-        adc     ICBLL,x
-        sta     retlen
-        lda     retlen+1
-        adc     #0
-        sta     retlen+1
-
-; if the request read less bytes than requested, we're done
-        lda     ICBLL,x
-        cmp     req_len
-        bne     br_done
-        lda     ICBLH,x
-        cmp     req_len+1
-        bne     br_done
-
-; update user buffer pointer (zpptr1)
-        clc
-        lda     zpptr1
-        adc     ICBLL,x
-        sta     zpptr1
-        lda     zpptr1+1
-        adc     #0
-        sta     zpptr1+1
-
-; update remaining length
-        sec
-        lda     orig_len
-        sbc     ICBLL,x
-        sta     orig_len
-        lda     orig_len+1
-        sbc     #0
-        sta     orig_len+1
-
-; still something left to do (remaining length != 0)?
-        lda     orig_len
-        ora     orig_len+1
-        beq     br_done
-        jmp     br_loop
-
-; done, write original buffer pointer and total transfer length to IOCB and return to application
-br_done:
-        lda     retlen
-        sta     ICBLL,x
-        lda     retlen+1
-        sta     ICBLH,x
-        jsr     orig_ptr_to_iocbptr
-        lda     CIO_p
-        pha
-        lda     CIO_a
-        ldy     CIO_y
-        plp
-        rts                             ; return with success
-
-
-
-CIO_call_a_jmp:
-        jmp     CIO_call_a
-
-
-
-; WRITE handler
-; -------------
-
-
-CIO_write:
-        lda     ICBLL,x
-        ora     ICBLH,x
-        beq     CIO_call_a_jmp          ; special I/O through A register in case buffer length is 0
-
-.if CHKBUF
-        jsr     chk_CIO_buf
-        bcc     CIO_call_a_jmp
-.endif
-
-; If the data length is larger than our bounce buffer, we have to split the request into smaller ones.
-; Otherwise we can get away with a copy to the bounce buffer and the call.
-
-        lda     ICBLH,x                 ; get high byte of length
-        bne     big_write               ; not zero -> data too large for our buffers
-                                        ; CHANGE HERE TO SUPPORT BOUNCE BUFFERS > 255 BYTES
-        lda     #<BUFSZ
-        cmp     ICBLL,x
-        bcc     big_write
-
-
-; Data size fits into bounce buffer
-
-        jsr     setup_zpptr1
-        jsr     bncbuf_to_iocb
-        jsr     copy_from_user
-        ldy     CIO_y
-        jsr     CIO_call_a
-        php
-        pha
-        jsr     restore_icba
-        pla
-        plp
-        rts                             ; return to application
-
-
-; Data size does not fit into bounce buffer
-
-big_write:
-        lda     #0
-        sta     retlen                  ; initialize return length
-        sta     retlen+1
-        jsr     iocblen_to_orig_len
-        jsr     iocbptr_to_orig_ptr
-        jsr     setup_zpptr1
-        jsr     bncbuf_to_iocb          ; let ICBAL/ICBAH point to bounce buffer
-
-bw_loop:
-        jsr     cmp_orig_len_bnc_bufsz  ; is transfer length > bounce buffer size?
-        bcs     bw_last                 ; no, last transfer, use remaining size
-
-        lda     #>BUFSZ
-        sta     ICBLH,x                 ; set data length
-        lda     #<BUFSZ
-        sta     ICBLL,x
-        bne     bw_cont
-
-bw_last:
-        lda     orig_len+1
-        sta     ICBLH,x                 ; set data length
-        lda     orig_len
-        sta     ICBLL,x
-
-bw_cont:
-        sta     req_len                 ; remember length of this request
-        lda     ICBLH,x
-        sta     req_len+1
-        jsr     copy_from_user
-        jsr     CIO_call_a              ; do the request
-        php
-        bpl     bw_no_err
-
-        plp
-        rts                             ; error return
-
-bw_no_err:
-        sta     CIO_a
-        sty     CIO_y
-        pla
-        sta     CIO_p
-
-; update retlen
-        clc
-        lda     retlen
-        adc     ICBLL,x
-        sta     retlen
-        lda     retlen+1
-        adc     #0
-        sta     retlen+1
-
-; if the request wrote less bytes than requested, we're done
-        lda     ICBLL,x
-        cmp     req_len
-        bne     bw_done
-        lda     ICBLH,x
-        cmp     req_len+1
-        bne     bw_done
-
-; update user buffer pointer (zpptr1)
-        clc
-        lda     zpptr1
-        adc     ICBLL,x
-        sta     zpptr1
-        lda     zpptr1+1
-        adc     #0
-        sta     zpptr1+1
-
-; update remaining length
-        sec
-        lda     orig_len
-        sbc     ICBLL,x
-        sta     orig_len
-        lda     orig_len+1
-        sbc     #0
-        sta     orig_len+1
-
-; still something left to do (remaining length != 0)?
-        lda     orig_len
-        ora     orig_len+1
-        beq     bw_done
-        jmp     bw_loop
-
-bw_done:
-        lda     retlen
-        sta     ICBLL,x
-        lda     retlen+1
-        sta     ICBLH,x
-        jsr     orig_ptr_to_iocbptr
-        lda     CIO_p
-        pha
-        lda     CIO_a
-        ldy     CIO_y
-        plp
-        rts                             ; return with success
-
-
-
-; check if length is larger than bounce buffer size
-; input:   orig_len - length
-; output:         A - destroyed
-;                CF - 0/1 for larger/not larger
-cmp_orig_len_bnc_bufsz:
-        sec
-        lda     #<BUFSZ
-        sbc     orig_len
-        lda     #>BUFSZ
-        sbc     orig_len+1
-        rts
-
-
-; copy data from bounce buffer into user buffer
-; input:   X - IOCB index
-;     zpptr1 - pointer to user buffer
-; output:  A - destroyed
-;          Y - 0
-copy_to_user:
-        ldy     ICBLL,x                 ; get # of bytes read (CHANGE HERE TO SUPPORT BOUNCE BUFFERS > 255 BYTES)
-        beq     @copy_done
-@copy:  dey
-        lda     bounce_buffer,y
-        sta     (zpptr1),y
-        cpy     #0
-        bne     @copy
-@copy_done:
-        rts
-
-
-; copy data from user buffer into bounce buffer
-; input:   X - IOCB index
-;     zpptr1 - pointer to user buffer
-; output:  A - destroyed
-;          Y - 0
-copy_from_user:
-        ldy     ICBLL,x                 ; get # of bytes to write (CHANGE HERE TO SUPPORT BOUNCE BUFFERS > 255 BYTES)
-        beq     @copy_done
-@copy:  dey
-        lda     (zpptr1),y
-        sta     bounce_buffer,y
-        cpy     #0
-        bne     @copy
-@copy_done:
-        rts
-
-
-; copy ICBLL/ICBLH to 'orig_len'
-; input:   X - IOCB index
-; output:  A - destroyed
-iocblen_to_orig_len:
-        lda     ICBLL,x
-        sta     orig_len
-        lda     ICBLH,x
-        sta     orig_len+1
-        rts
-
-
-; copy ICBAL/ICBAH to 'orig_ptr'
-; input:   X - IOCB index
-; output:  A - destroyed
-iocbptr_to_orig_ptr:
-        lda     ICBAL,x
-        sta     orig_ptr
-        lda     ICBAH,x
-        sta     orig_ptr+1
-        rts
-
-
-; copy 'orig_ptr' to ICBAL/ICBAH
-; input:   X - IOCB index
-; output:  A - destroyed
-orig_ptr_to_iocbptr:
-        lda     orig_ptr
-        sta     ICBAL,x
-        lda     orig_ptr+1
-        sta     ICBAH,x
-        rts
-
-
-; restore original contents of ICBAL/ICBAH from 'zpptr1'
-; input:   X - IOCB index
-; output:  A - destroyed
-restore_icba:
-        lda     zpptr1
-        sta     ICBAL,x
-        lda     zpptr1+1
-        sta     ICBAH,x
-        rts
-
-
-; put bounce buffer address into ICBAL/ICBAH
-; input:   X - IOCB index
-; output:  A - destroyed
-bncbuf_to_iocb:
-        lda     #<bounce_buffer
-        sta     ICBAL,x
-        lda     #>bounce_buffer
-        sta     ICBAH,x
-        rts
-
-
-; copy file name pointed to by 'zpptr1' to 'bounce_buffer'
-; input:   Y - index into file name buffer and bounce_buffer
-; output:  Y - points to first invalid byte after file name
-;          A - destroyed
-copy_filename:
-        lda     (zpptr1),y
-        sta     bounce_buffer,y
-        beq     copy_fn_done
-        iny
-        cmp     #ATEOL
-        bne     copy_filename
-        dey
-copy_fn_done:
-        rts
-
-
-; write IOCB buffer address into zpptr1
-; input:   X - IOCB index
-; output:  Y - 0 (for setup_zpptr1_y0, else unchanged)
-;          A - destroyed
-setup_zpptr1_y0:
-        ldy     #0
-setup_zpptr1:
-        lda     ICBAL,x                 ; put buffer address into zp pointer
-        sta     zpptr1
-        lda     ICBAH,x
-        sta     zpptr1+1
-        rts
-
-
-.if CHKBUF
-
-; get length of file name pointed to by 'zpptr1'
-; input:   Y - index into file name
-; output:  Y - length
-;          A - destroyed
-get_fn_len:
-        lda     (zpptr1),y
-        beq     @done
-        iny
-        cmp     #ATEOL
-        bne     get_fn_len
-        dey
-@done:
-        rts
-
-
-chk_CIO_buf_fn2:
-        tya
-        pha
-        lda     ICBLL,x
-        pha
-        lda     ICBLH,x
-        pha
-        jsr     setup_zpptr1_y0
-        jsr     get_fn_len
-        iny                     ; include terminating zero
-        bne     fn_cont
-
-chk_CIO_buf_fn:
-        tya
-        pha
-        lda     ICBLL,x
-        pha
-        lda     ICBLH,x
-        pha
-        jsr     setup_zpptr1_y0
-fn_cont:jsr     get_fn_len
-        iny                     ; include terminating zero
-        tya
-        sta     ICBLL,x
-        lda     #0
-        sta     ICBLH,x
-        jsr     chk_CIO_buf
-        pla     
-        sta     ICBLH,x
-        pla     
-        sta     ICBLL,x
-        pla
-        tay
-        rts
-
-
-; check if a CIO input/output buffer overlaps with ROM area (>= $C000)
-; input:                      X - IOCB index
-;       ICBAL/ICBAH/ICBLL/ICBLH - buffer address and length
-; output:                    CF - 1/0 for overlap/no overlap
-;                             A - destroyed
-
-chk_CIO_buf:
-        lda     ICBAH,x
-        cmp     #$c0
-        bcc     @cont
-@ret:   
-.ifdef DEBUG
-        jsr     CIO_buf_noti
-.endif
-        rts
-
-@cont:  lda     ICBAL,x
-        clc
-        adc     ICBLL,x
-        lda     ICBAH,x
-        adc     ICBLH,x
-        bcs     @ret            ; ??? wraparound
-        cmp     #$c0
-.ifdef DEBUG
-        jsr     CIO_buf_noti
-.endif
-        rts
-
-.ifdef DEBUG
-; write to screen memory on 2nd line:
-; pos 0: # of accesses without buffering
-; pos 1: # of accesses with buffering
-CIO_buf_noti:
-        php
-        pha
-        tya
-        pha
-        bcc     @nobuf
-
-        inc     CIObnval_dobuf
-        jmp     @cont
-
-@nobuf: inc     CIObnval_nobuf
-
-@cont:  ldy     #40
-        lda     CIObnval_nobuf
-        sta     (SAVMSC),y
-        ldy     #41
-        lda     CIObnval_dobuf
-        sta     (SAVMSC),y
-
-        pla
-        tay
-        pla
-        plp
-        rts
-
-CIObnval_dobuf:
-        .byte   0
-CIObnval_nobuf:
-        .byte   0
-.endif
-
-.endif  ; .if CHKBUF
-
-;---------------------------------------------------------
-
-; SIO handler
-; We only handle SIO_STAT, SIO_READ, SIO_WRITE, and SIO_WRITEV.
-; These are the only functions used by the runtime library currently.
-; For other function we return NVALID status code.
-
-SIO_handler:
-        lda     DCOMND                  ; get command
-        cmp     #SIO_STAT
-        beq     SIO_stat
-        cmp     #SIO_READ
-        beq     SIO_read
-        cmp     #SIO_WRITE
-        beq     SIO_write
-        cmp     #SIO_WRITEV
-        beq     SIO_write
-
-        ; unhandled command
-        lda     #NVALID
-SIO_err:sta     DSTATS
-        rts
-
-; SIO_STAT is always called with a low buffer (by the runtime)
-SIO_stat:
-        ; fall thru
-
-SIO_call:
-        lda     PORTB
-        sta     cur_SIOV_PORTB
-        enable_rom
-        jsr     SIOV_org
-        php
-        pha
-        disable_rom_val cur_SIOV_PORTB
-        pla
-        plp
-        rts
-
-
-; SIO read handler
-; ----------------
-
-SIO_read:
-
-.if CHKBUF
-        jsr     chk_SIO_buf
-        bcc     SIO_call
-.endif
-
-; we only support transfers <= bounce buffer size
-        jsr     cmp_sio_len_bnc_bufsz
-        bcs     sio_read_len_ok
-
-        lda     #DERROR         ; don't know a better status code for this
-        bne     SIO_err
-
-sio_read_len_ok:
-        lda     DBUFLO
-        sta     zpptr1          ; remember destination buffer address
-        lda     DBUFHI
-        sta     zpptr1+1
-
-        jsr     bncbuf_to_dbuf  ; put bounce buffer address to DBUFLO/DBUFHI
-
-        jsr     SIO_call        ; do the operation
-        pha
-        lda     DSTATS          ; get status
-        bmi     sio_read_ret    ; error
-
-        ; copy data to user buffer
-sio_read_ok:
-        lda     DBYTHI          ; could be 1 for 256 bytes
-        beq     srok1
-        ldy     #0
-        beq     srok2
-srok1:  ldy     DBYTLO
-srok2:  dey
-sio_read_copy:
-        lda     bounce_buffer,y
-        sta     (zpptr1),y
-        dey
-        cpy     #$ff
-        bne     sio_read_copy
-
-sio_read_ret:
-        jsr     orgbuf_to_dbuf
-
-        pla
-        rts                     ; success return
-
-
-; SIO write handler
-; -----------------
-
-SIO_write:
-
-.if CHKBUF
-        jsr     chk_SIO_buf
-        bcc     SIO_call
-.endif
-
-; we only support transfers <= bounce buffer size
-        jsr     cmp_sio_len_bnc_bufsz
-        bcs     sio_write_len_ok
-
-        lda     #DERROR         ; don't know a better status code for this
-        jmp     SIO_err
-
-sio_write_len_ok:
-        lda     DBUFLO
-        sta     zpptr1          ; get source buffer address
-        lda     DBUFHI
-        sta     zpptr1+1
-
-        ; copy data from user buffer to bounce buffer
-        lda     DBYTHI          ; could be 1 for 256 bytes
-        beq     swok1
-        ldy     #0
-        beq     swok2
-swok1:  ldy     DBYTLO
-swok2:  dey
-sio_write_copy:
-        lda     (zpptr1),y
-        sta     bounce_buffer,y
-        dey
-        cpy     #$ff
-        bne     sio_write_copy
-
-        jsr     bncbuf_to_dbuf  ; put bounce buffer address to DBUFLO/DBUFHI
-
-        jsr     SIO_call        ; do the operation
-        pha
-        jsr     orgbuf_to_dbuf
-        pla
-        rts
-
-
-; check if SIO length is larger than bounce buffer size
-; input:   orig_len - length
-; output:         A - destroyed
-;                CF - 0/1 for larger/not larger
-cmp_sio_len_bnc_bufsz:
-        sec
-        lda     #<BUFSZ_SIO
-        sbc     DBYTLO
-        lda     #>BUFSZ_SIO
-        sbc     DBYTHI
-        rts
-
-; put bounce buffer address into DBUFLO/DBUFHI
-; input:   (--)
-; output:  A - destroyed
-bncbuf_to_dbuf:
-        lda     #<bounce_buffer
-        sta     DBUFLO
-        lda     #>bounce_buffer
-        sta     DBUFHI
-        rts
-
-; put original buffer address into DBUFLO/DBUFHI
-; input:   zpptr1 - original pointer
-; output:  A      - destroyed
-orgbuf_to_dbuf:
-        lda     zpptr1
-        sta     DBUFLO
-        lda     zpptr1+1
-        sta     DBUFHI
-        rts
-
-
-.if CHKBUF
-
-; check if a SIO input/output buffer overlaps with ROM area (>= $C000)
-; input: DBUFLO/DBUFHI/DBYTLO/DBYTHI - buffer address and length
-; output:                         CF - 1/0 for overlap/no overlap
-;                                  A - destroyed
-
-chk_SIO_buf:
-        lda     DBUFHI
-        cmp     #$c0
-        bcc     @cont
-@ret:
-.ifdef DEBUG
-        jsr     SIO_buf_noti
-.endif
-        rts
-
-@cont:  lda     DBUFLO
-        clc
-        adc     DBYTLO
-        lda     DBUFHI
-        adc     DBYTHI
-        bcs     @ret            ; ??? wraparound
-        cmp     #$c0
-.ifdef DEBUG
-        jsr     SIO_buf_noti
-.endif
-        rts
-
-.ifdef DEBUG
-; write to screen memory on 2nd line:
-; pos 38: # of accesses without buffering
-; pos 39: # of accesses with buffering
-SIO_buf_noti:
-        php
-        pha
-        tya
-        pha
-        bcc     @nobuf
-
-        inc     SIObnval_dobuf
-        jmp     @cont
-
-@nobuf: inc     SIObnval_nobuf
-
-@cont:  ldy     #78
-        lda     SIObnval_nobuf
-        sta     (SAVMSC),y
-        ldy     #79
-        lda     SIObnval_dobuf
-        sta     (SAVMSC),y
-
-        pla
-        tay
-        pla
-        plp
-        rts
-
-SIObnval_dobuf:
-        .byte   0
-SIObnval_nobuf:
-        .byte   0
-.endif
-
-.endif  ; .if CHKBUF
-
-;---------------------------------------------------------
-
-KEYBDV_handler:
-
-        lda     #>(kret-1)
-        pha
-        lda     #<(kret-1)
-        pha
-        lda     PORTB
-        sta     cur_KEYBDV_PORTB
-        enable_rom
-        lda     KEYBDV+5
-        pha
-        lda     KEYBDV+4
-        pha
-        rts             ; call keyboard handler
-kret:   pha
-        disable_rom_val cur_KEYBDV_PORTB
-        pla
-        rts
-
-;---------------------------------------------------------
-
-SETVBV_handler:
-
-        pha
-        lda     PORTB
-        sta     cur_SETVBV_PORTB
-        enable_rom
-        pla
-        jsr     SETVBV_org
-        php
-        pha
-        disable_rom_val cur_SETVBV_PORTB
-        pla
-        plp
-        rts
-
-CIO_a:                  .res    1
-CIO_x:                  .res    1
-CIO_y:                  .res    1
-CIO_p:                  .res    1
-cur_CIOV_PORTB:         .res    1
-cur_SIOV_PORTB:         .res    1
-cur_KEYBDV_PORTB:       .res    1
-cur_SETVBV_PORTB:       .res    1
-orig_ptr:               .res    2
-orig_len:               .res    2
-req_len:                .res    2
-retlen:                 .res    2
-
-.endif  ; .ifdef __ATARIXL__
diff --git a/libsrc/atari/shadow_ram_prepare.s b/libsrc/atari/shadow_ram_prepare.s
deleted file mode 100644 (file)
index a1760bd..0000000
+++ /dev/null
@@ -1,408 +0,0 @@
-;
-; Atari XL shadow RAM preparation routines
-;
-; Tasks:
-; - move screen memory below load address
-; - copy ROM chargen to its new place
-; - copy shadow RAM contents to their destination
-;
-; Christian Groessler, chris@groessler.org, 2013
-;
-
-;DEBUG   =       1
-
-.ifdef __ATARIXL__
-
-        .export         sramprep
-
-        .import         __SRPREP_LOAD__, __SRPREPCHNK_LAST__
-        .import         __SHADOW_RAM_LOAD__, __SHADOW_RAM_SIZE__, __SHADOW_RAM_RUN__
-        .import         __SHADOW_RAM2_LOAD__, __SHADOW_RAM2_SIZE__, __SHADOW_RAM2_RUN__
-        .import         __CHARGEN_START__, __CHARGEN_SIZE__
-        .import         __STARTADDRESS__       ; needed by xlmemchk.inc
-
-        .include        "zeropage.inc"
-        .include        "atari.inc"
-        .include        "save_area.inc"
-
-.macro print_string text
-        .local  start, cont
-        jmp     cont
-start:  .byte   text, ATEOL
-cont:   ldx     #0              ; channel 0
-        lda     #<start
-        sta     ICBAL,x         ; address
-        lda     #>start
-        sta     ICBAH,x
-        lda     #<(cont - start)
-        sta     ICBLL,x         ; length
-        lda     #>(cont - start)
-        sta     ICBLH,x
-        lda     #PUTCHR
-        sta     ICCOM,x
-        jsr     CIOV_org
-.endmacro
-
-; ------------------------------------------------------------------------
-; EXE load chunk header
-
-.segment        "SRPREPHDR"
-
-        .word   __SRPREP_LOAD__
-        .word   __SRPREPCHNK_LAST__ - 1
-
-; ------------------------------------------------------------------------
-; Actual code
-
-.segment        "SRPREP"
-
-; ***** entry point *****
-
-sramprep:
-.ifdef DEBUG
-        print_string "entering stage #2"
-.endif
-
-; save values of modified system variables and ports
-
-        lda     RAMTOP
-        sta     RAMTOP_save
-        lda     MEMTOP
-        sta     MEMTOP_save
-        lda     MEMTOP+1
-        sta     MEMTOP_save+1
-        lda     APPMHI
-        sta     APPMHI_save
-        lda     APPMHI+1
-        sta     APPMHI_save+1
-        lda     PORTB
-        sta     PORTB_save
-
-; disable BASIC
-
-        lda     PORTB
-        ora     #2
-        sta     PORTB
-
-        .include "xlmemchk.inc" ; calculate lowest address used and new value for RAMTOP
-
-        ldx     lowadr
-        stx     MEMTOP
-        lda     lowadr+1
-        sta     MEMTOP+1
-        lda     lodadr+1
-        sta     RAMTOP
-
-        ; set APPMHI to MEMLO (+ 1 for sanity)
-        lda     MEMLO
-        clc
-        adc     #1
-        sta     APPMHI
-        lda     MEMLO+1
-        adc     #0
-        sta     APPMHI+1
-
-
-; issue a GRAPHICS 0 call (copied'n'pasted from TGI drivers) to move screen memory down
-
-
-        jsr     findfreeiocb
-.ifdef DEBUG            ; only check in debug version, this shouldn't really happen(tm)
-        beq     iocbok
-        print_string "Internal error, no free IOCB!"
-        jsr     delay
-        jsr     delay
-        jsr     delay
-        jsr     restore                 ; restore stuff we've changed
-        jmp     (DOSVEC)                ; abort loading
-iocbok:
-.endif
-
-        ; reopen it in Graphics 0
-        lda     #OPEN
-        sta     ICCOM,x
-        lda     #OPNIN | OPNOT
-        sta     ICAX1,x
-        lda     #0
-        sta     ICAX2,x
-        lda     #<screen_device
-        sta     ICBAL,x
-        lda     #>screen_device
-        sta     ICBAH,x
-        lda     #<screen_device_length
-        sta     ICBLL,x
-        lda     #>screen_device_length
-        sta     ICBLH,x
-        jsr     CIOV_org
-        bpl     scrok
-
-; shouldn't happen(tm)
-        print_string "Internal error, aborting..."
-        jsr     delay
-        jsr     delay
-        jsr     delay
-        jsr     restore                 ; restore stuff we've changed
-        jmp     (DOSVEC)                ; abort loading
-
-
-scrok:  ; now close it again -- we don't need it anymore
-        lda     #CLOSE
-        sta     ICCOM,x
-        jsr     CIOV_org
-
-
-; copy chargen to low memory, just after the next possible address beyond our loaded chunk data
-
-.ifdef DEBUG
-        print_string "copy chargen to low memory"
-.endif
-
-        lda     #>__SRPREPCHNK_LAST__
-        sta     ptr3+1
-        lda     #<__SRPREPCHNK_LAST__
-        sta     ptr3
-        beq     cg_addr_ok
-
-        ; page align the new chargen address
-        inc     ptr3+1
-        lda     #0
-        sta     ptr3
-
-cg_addr_ok:
-
-        lda     ptr3+1
-        and     #3
-        beq     cg_addr_ok2
-
-        ; align to next 1K boundary
-        lda     ptr3+1
-        and     #$fc
-        clc
-        adc     #4
-        sta     ptr3+1
-
-cg_addr_ok2:
-
-        lda     #<DCSORG
-        sta     ptr1
-        lda     #>DCSORG
-        sta     ptr1+1
-        lda     ptr3
-        sta     ptr2
-        lda     ptr3+1
-        pha                             ; needed later to set CHBAS/CHBASE
-        sta     ptr2+1
-        lda     #>__CHARGEN_SIZE__
-        sta     tmp2
-        lda     #<__CHARGEN_SIZE__
-        sta     tmp1
-        jsr     memcopy
-
-.ifdef DEBUG
-        print_string "now setting up high memory"
-.endif
-
-; disable ROM
-        sei
-        ldx     #0
-        stx     NMIEN                   ; disable NMI
-        lda     PORTB
-        and     #$fe
-        tax
-        pla                             ; get temp. chargen address
-        sta     WSYNC                   ; wait for horiz. retrace
-        stx     PORTB                   ; now ROM is mapped out
-
-; switch to temporary chargen
-
-        sta     CHBASE
-        sta     CHBAS
-
-; copy shadow RAM contents to their destination (segment SHADOW_RAM)
-
-        lda     #<__SHADOW_RAM_SIZE__
-        bne     do_copy
-        lda     #>__SHADOW_RAM_SIZE__
-        beq     no_copy                 ; we have no shadow RAM contents
-
-        ; ptr1 - src; ptr2 - dest; tmp1, tmp2 - len
-do_copy:lda     #<__SHADOW_RAM_LOAD__
-        sta     ptr1
-        lda     #>__SHADOW_RAM_LOAD__
-        sta     ptr1+1
-        lda     #<__SHADOW_RAM_RUN__
-        sta     ptr2
-        lda     #>__SHADOW_RAM_RUN__
-        sta     ptr2+1
-        lda     #<__SHADOW_RAM_SIZE__
-        sta     tmp1
-        lda     #>__SHADOW_RAM_SIZE__
-        sta     tmp2
-
-        jsr     memcopy
-
-no_copy:
-
-; copy shadow RAM #2 contents to their destination (segment SHADOW_RAM2)
-
-        lda     #<__SHADOW_RAM2_SIZE__
-        bne     do_copy2
-        lda     #>__SHADOW_RAM2_SIZE__
-        beq     no_copy2                ; we have no shadow RAM #2 contents
-
-        ; ptr1 - src; ptr2 - dest; tmp1, tmp2 - len
-do_copy2:
-        lda     #<__SHADOW_RAM2_LOAD__
-        sta     ptr1
-        lda     #>__SHADOW_RAM2_LOAD__
-        sta     ptr1+1
-        lda     #<__SHADOW_RAM2_RUN__
-        sta     ptr2
-        lda     #>__SHADOW_RAM2_RUN__
-        sta     ptr2+1
-        lda     #<__SHADOW_RAM2_SIZE__
-        sta     tmp1
-        lda     #>__SHADOW_RAM2_SIZE__
-        sta     tmp2
-
-        jsr     memcopy
-
-no_copy2:
-
-; copy chargen to its new (final) location
-
-        lda     ptr3
-        sta     ptr1
-        lda     ptr3+1
-        sta     ptr1+1
-        lda     #<__CHARGEN_START__
-        sta     ptr2
-        lda     #>__CHARGEN_START__
-        sta     ptr2+1
-        lda     #>__CHARGEN_SIZE__
-        sta     tmp2
-        lda     #<__CHARGEN_SIZE__
-        sta     tmp1
-        jsr     memcopy
-
-; re-enable ROM
-
-        lda     PORTB
-        ora     #1
-        ldx     #>DCSORG
-        sta     WSYNC                   ; wait for horiz. retrace
-        sta     PORTB
-        stx     CHBASE
-        stx     CHBAS
-        lda     #$40
-        sta     NMIEN                   ; enable VB again
-        cli                             ; and enable IRQs
-
-.ifdef DEBUG
-        print_string "Stage #2 OK"
-        print_string "loading main chunk"
-        jsr     delay
-.endif
-        rts
-
-.include "findfreeiocb.inc"
-
-; routine taken from http://www.obelisk.demon.co.uk/6502/algorithms.html
-;
-; copy memory
-; ptr1      - source
-; ptr2      - destination
-; tmp2:tmp1 - len
-
-.proc   memcopy
-
-        ldy     #0
-        ldx     tmp2
-        beq     last
-pagecp: lda     (ptr1),y
-        sta     (ptr2),y
-        iny
-        bne     pagecp
-        inc     ptr1+1
-        inc     ptr2+1
-        dex
-        bne     pagecp
-last:   cpy     tmp1
-        beq     done
-        lda     (ptr1),y
-        sta     (ptr2),y
-        iny
-        bne     last
-done:   rts
-
-.endproc
-
-
-; clean up after a fatal error
-
-restore:lda     RAMTOP_save
-        sta     RAMTOP
-        lda     MEMTOP_save
-        sta     MEMTOP
-        lda     MEMTOP_save+1
-        sta     MEMTOP+1
-        lda     APPMHI_save
-        sta     APPMHI
-        lda     APPMHI_save+1
-        sta     APPMHI+1
-        rts
-
-; short delay
-.proc   delay
-
-        lda     #10
-@loop:  jsr     delay1
-        clc
-        sbc     #0
-        bne     @loop
-        rts
-
-delay1: ldx     #0
-        ldy     #0
-@loop:   dey
-        bne     @loop
-        dex
-        bne     @loop
-        rts
-
-.endproc
-
-.ifdef DEBUG
-
-.byte "HERE ****************** HERE ***************>>>>>>"
-
-sramsize:
-        .word   __SHADOW_RAM_SIZE__
-
-.endif          ; .ifdef DEBUG
-
-screen_device:  .byte "S:",0
-screen_device_length = * - screen_device
-
-.ifdef DEBUG
-        .byte   " ** srprep ** end-->"
-.endif
-
-; ------------------------------------------------------------------------
-; Provide empty SHADOW_RAM and SHADOW_RAM2 segments in order that the
-; linker is happy if the user program doesn't have these segments.
-
-.segment        "SHADOW_RAM"
-.segment        "SHADOW_RAM2"
-
-
-; ------------------------------------------------------------------------
-; EXE load chunk "trailer" - sets INITAD
-
-.segment        "SRPREPTRL"
-
-        .word   INITAD
-        .word   INITAD+1
-        .word   sramprep
-
-.endif  ; .ifdef __ATARIXL__
diff --git a/libsrc/atari/shadow_ram_timerirq1.s b/libsrc/atari/shadow_ram_timerirq1.s
deleted file mode 100644 (file)
index f8a3e9b..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-;
-; Atari XL shadow RAM timer IRQ #1 handler
-;
-; Christian Groessler, chris@groessler.org, 2014
-;
-
-;DEBUG           =       1
-
-.ifdef __ATARIXL__
-
-SHRAM_HANDLERS  =       1
-                .include        "atari.inc"
-                .include        "romswitch.inc"
-                .export         set_VTIMR1_handler
-
-
-.segment "LOWBSS"
-
-VTIMR1_handler: .res    3
-
-
-.segment "BSS"
-
-old_VTIMR1_handler:
-                .res    2
-
-
-.segment "LOWCODE"
-
-; timer interrupt handler:
-; disable ROM, call user handler, enable ROM again
-
-my_VTIMR1_handler:
-                disable_rom_quick
-                jsr     VTIMR1_handler
-                enable_rom_quick
-                pla
-                rti
-
-.segment "CODE"
-
-; install or remove VTIMR1 handler
-; input: CF - 0/1 for remove/install handler
-;        AX - pointer to handler (if CF=1)
-; registers destroyed
-
-set_VTIMR1_handler:
-
-                bcc     @remove
-
-; install vector
-
-                stx     VTIMR1_handler+2
-                sta     VTIMR1_handler+1        ; save passed vector in low memory
-                lda     #$4C                    ; "JMP" opcode
-                sta     VTIMR1_handler
-
-                lda     VTIMR1
-                sta     old_VTIMR1_handler
-                lda     VTIMR1+1
-                sta     old_VTIMR1_handler+1
-
-                lda     #<my_VTIMR1_handler
-                php
-                sei
-                sta     VTIMR1
-                lda     #>my_VTIMR1_handler
-                sta     VTIMR1+1
-                plp
-                rts
-
-@remove:        php
-                sei
-                lda     old_VTIMR1_handler
-                sta     VTIMR1
-                lda     old_VTIMR1_handler+1
-                sta     VTIMR1+1
-                plp
-                rts
-
-.endif  ; .ifdef __ATARIXL__
diff --git a/libsrc/atari/siocall.s b/libsrc/atari/siocall.s
deleted file mode 100644 (file)
index 3db3775..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-;
-; Christian Groessler, October 2000
-;
-; This file provides the __sio_call function
-; The function does a SIO call, it's not completely
-; generic (e.g. transfer size is fixed), it's used
-; to save space with _dio_read and _dio_write functions.
-;
-; unsigned char __fastcall__ _sio_call(dhandle_t handle,
-;                                      unsigned sect_num,
-;                                      void *buffer,
-;                                      unsigned sio_val);
-; dhandle_t - 16bit (ptr)
-; sio_val is (sio_command | sio_direction << 8)
-;
-
-        .export         __sio_call
-        .include        "atari.inc"
-        .import         popa,popax
-        .import         sectsizetab,__oserror
-        .importzp       ptr1
-
-.proc   __sio_call
-
-        sta     DCOMND          ; set command into DCB
-        stx     DSTATS          ; set data flow directon
-        jsr     popax           ; get buffer address
-        sta     DBUFLO          ; set buffer address into DCB
-        stx     DBUFHI
-        jsr     popax
-        sta     DAUX1           ; set sector #
-        stx     DAUX2
-
-        jsr     popax
-        sta     ptr1
-        stx     ptr1+1
-
-        ldy     #sst_flag
-        lda     (ptr1),y
-        and     #128
-        beq     _inv_hand       ; handle not open or invalid
-
-        ldy     #sst_driveno
-        lda     (ptr1),y
-
-        clc
-        adc     #1
-        sta     DUNIT           ; unit number (d1,d2,d3,...)
-
-        lda     DAUX2           ; high byte sector #
-        bne     _realsz
-        lda     DAUX1
-        cmp     #4              ; sectors 1 to 3 are special (always 128 bytes)
-        bcs     _realsz
-
-        lda     #$80
-        sta     DBYTLO
-        asl     a
-        sta     DBYTHI
-        beq     _cont
-
-_realsz:ldy     #sst_sectsize
-        lda     (ptr1),y
-        sta     DBYTLO
-        iny
-        lda     (ptr1),y
-        sta     DBYTHI
-
-_cont:  lda     #DISKID         ; SIO bus ID of diskette drive
-        sta     DDEVIC
-        lda     #15
-        sta     DTIMLO          ; value got from DOS source
-
-        jsr     SIOV            ; execute
-
-        ldx     #0
-        lda     DSTATS
-        bmi     _req_err        ; error occurred
-        txa                     ; no error occurred
-_req_err:
-        sta     __oserror
-        rts
-
-_inv_hand:
-        ldx     #0
-        lda     #BADIOC
-        bne     _req_err
-
-.endproc
diff --git a/libsrc/atari/syschdir.s b/libsrc/atari/syschdir.s
deleted file mode 100644 (file)
index d577083..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-;
-; Stefan Haubenthal, 2005-12-24
-; Based on on code by Christian Groessler
-;
-; unsigned char __fastcall__ _syschdir (const char* name);
-; for SpartaDOS and MyDOS
-;
-
-        .include "atari.inc"
-        .import findfreeiocb
-        .import __dos_type
-        .import initcwd
-        .importzp tmp4
-.ifdef  UCASE_FILENAME
-        .importzp tmp3
-        .import addysp
-        .import ucase_fn
-.ifdef  DEFAULT_DEVICE
-        .importzp tmp2
-.endif
-.endif
-        .export __syschdir
-
-.proc   __syschdir
-
-        pha                     ; save input parameter
-        txa
-        pha
-
-        jsr     findfreeiocb
-        beq     iocbok          ; we found one
-
-        pla
-        pla                     ; fix up stack
-
-        lda     #TMOF           ; too many open files
-        rts
-
-iocbok: stx     tmp4            ; remember IOCB index
-        pla
-        tax
-        pla                     ; get argument again
-
-.ifdef  UCASE_FILENAME
-
-.ifdef  DEFAULT_DEVICE
-        ldy     #$80
-        sty     tmp2            ; set flag for ucase_fn
-.endif
-        jsr     ucase_fn
-        bcc     ucok1
-
-        lda     #183            ; see oserror.s
-        rts
-ucok1:
-
-.endif  ; defined UCASE_FILENAME
-
-        ldy     tmp4            ; IOCB index
-        sta     ICBAL,y         ; store pointer to filename
-        txa
-        sta     ICBAH,y
-        tya
-        tax
-        lda     __dos_type
-        cmp     #SPARTADOS
-        beq     :+
-        lda     #CHDIR_MYDOS
-        .byte   $2C             ; BIT <abs>
-:       lda     #CHDIR_SPDOS
-        sta     ICCOM,x
-        lda     #0
-        sta     ICAX1,x
-        sta     ICAX2,x
-        sta     ICBLL,x
-        sta     ICBLH,x
-        jsr     CIOV
-
-.ifdef  UCASE_FILENAME
-        tya
-        pha
-        ldy     tmp3            ; get size
-        jsr     addysp          ; free used space on the stack
-        pla
-        tay
-.endif  ; defined UCASE_FILENAME
-
-        bmi     cioerr
-        jsr     initcwd
-        lda     #0
-        rts
-cioerr: tya
-        rts
-
-.endproc        ; __syschdir
diff --git a/libsrc/atari/sysmkdir.s b/libsrc/atari/sysmkdir.s
deleted file mode 100644 (file)
index cc1b3e2..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-;
-; Initial version: Stefan Haubenthal, 2005-12-24
-; Some fixes: Christian Groessler, 2009-01-28
-;
-; unsigned char _sysmkdir (const char* name, ...);
-; for SpartaDOS and MYDOS
-;
-
-        .include "atari.inc"
-        .include "errno.inc"
-        .import addysp
-        .import popax
-        .import findfreeiocb
-        .importzp tmp4
-.ifdef  UCASE_FILENAME
-        .importzp tmp3
-        .import ucase_fn
-.ifdef  DEFAULT_DEVICE
-        .importzp tmp2
-.endif
-.endif
-        .export __sysmkdir
-
-.proc   __sysmkdir
-
-        dey                     ; parm count < 2 shouldn't be needed to be...
-        dey                     ; ...checked (it generates a C compiler warning)
-        beq     parmok          ; branch if parameter count ok
-        jsr     addysp          ; fix stack, throw away unused parameters
-
-parmok: jsr     popax           ; get name
-        pha                     ; save input parameter
-        txa
-        pha
-
-        jsr     findfreeiocb
-        beq     iocbok          ; we found one
-
-        pla
-        pla                     ; fix up stack
-
-        lda     #TMOF           ; too many open files
-        rts
-
-iocbok: stx     tmp4            ; remember IOCB index
-        pla
-        tax
-        pla                     ; get argument again
-
-.ifdef  UCASE_FILENAME
-
-.ifdef  DEFAULT_DEVICE
-        ldy     #$80
-        sty     tmp2            ; set flag for ucase_fn
-.endif
-        jsr     ucase_fn
-        bcc     ucok1
-
-        lda     #183            ; see oserror.s
-        rts
-ucok1:
-
-.endif  ; defined UCASE_FILENAME
-
-        ldy     tmp4            ; IOCB index
-        sta     ICBAL,y         ; store pointer to filename
-        txa
-        sta     ICBAH,y
-        tya
-        tax
-        lda     #MKDIR
-        sta     ICCOM,x
-        lda     #8
-        sta     ICAX1,x
-        lda     #0
-        sta     ICAX2,x
-        sta     ICBLL,x
-        sta     ICBLH,x
-        jsr     CIOV
-
-.ifdef  UCASE_FILENAME
-        tya
-        pha
-        ldy     tmp3            ; get size
-        jsr     addysp          ; free used space on the stack
-        pla
-        tay
-.endif  ; defined UCASE_FILENAME
-
-        bmi     cioerr
-        lda     #0
-        rts
-cioerr: tya
-        rts
-
-.endproc        ; __sysmkdir
diff --git a/libsrc/atari/sysremove.s b/libsrc/atari/sysremove.s
deleted file mode 100644 (file)
index 15bc19e..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-;
-; Christian Groessler, Aug-2003
-;
-; int remove (const char* name);
-;
-
-        .include "atari.inc"
-        .include "errno.inc"
-        .import findfreeiocb
-        .importzp tmp4
-.ifdef  UCASE_FILENAME
-        .importzp tmp3
-        .import addysp
-        .import ucase_fn
-.ifdef  DEFAULT_DEVICE
-        .importzp tmp2
-.endif
-.endif
-        .export __sysremove
-
-.proc   __sysremove
-
-        pha                     ; save input parameter
-        txa
-        pha
-
-        jsr     findfreeiocb
-        beq     iocbok          ; we found one
-
-        pla
-        pla                     ; fix up stack
-
-        lda     #TMOF           ; too many open files
-        rts
-
-iocbok: stx     tmp4            ; remember IOCB index
-        pla
-        tax
-        pla                     ; get argument again
-
-.ifdef  UCASE_FILENAME
-
-.ifdef  DEFAULT_DEVICE
-        ldy     #$80
-        sty     tmp2            ; set flag for ucase_fn
-.endif
-        jsr     ucase_fn
-        bcc     ucok1
-
-        lda     #183            ; see oserror.s
-        rts
-ucok1:
-
-.endif  ; defined UCASE_FILENAME
-
-        ldy     tmp4            ; IOCB index
-        sta     ICBAL,y         ; store pointer to filename
-        txa
-        sta     ICBAH,y
-        tya
-        tax
-        lda     #DELETE
-        sta     ICCOM,x
-        lda     #0
-        sta     ICAX1,x
-        sta     ICAX2,x
-        sta     ICBLL,x
-        sta     ICBLH,x
-        jsr     CIOV
-
-.ifdef  UCASE_FILENAME
-        tya
-        pha
-        ldy     tmp3            ; get size
-        jsr     addysp          ; free used space on the stack
-        pla
-        tay
-.endif  ; defined UCASE_FILENAME
-
-        bmi     cioerr
-        lda     #0
-        rts
-cioerr: tya
-        rts
-
-.endproc        ; __sysremove
diff --git a/libsrc/atari/sysrename.s b/libsrc/atari/sysrename.s
deleted file mode 100644 (file)
index e526af5..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-;
-; Christian Groessler, 2013-07-24
-;
-; unsigned char __fastcall__ _sysrename (const char* oldname, const char* newname);
-;
-
-        .include "atari.inc"
-        .import findfreeiocb
-        .importzp tmp4, sp, ptr2, ptr3
-        .import incsp2, subysp, addysp, popax
-.ifdef  UCASE_FILENAME
-        .importzp tmp3
-        .import ucase_fn
-.ifdef  DEFAULT_DEVICE
-        .importzp tmp2
-.endif
-.endif
-        .export __sysrename
-
-.proc   __sysrename
-
-        pha                     ; save input parameter
-        txa
-        pha
-
-        jsr     findfreeiocb
-        beq     iocbok          ; we found one
-
-        pla
-        pla                     ; fix up stack
-        jsr     incsp2
-
-        lda     #TMOF           ; too many open files
-        rts
-
-iocbok: stx     tmp4            ; remember IOCB index
-
-        pla
-        sta     ptr2+1          ; remember newname
-        pla
-        sta     ptr2            ; ditto.
-
-        jsr     popax           ; get oldname
-
-        ldy     #0
-        sty     sspc+1          ; initialize stack space
-
-.ifdef  UCASE_FILENAME
-
-; uppercase first (old) name and prepend device if needed
-
-.ifdef  DEFAULT_DEVICE
-        ldy     #$80
-        sty     tmp2            ; set flag for ucase_fn
-.endif
-        jsr     ucase_fn
-        bcc     ucok1
-
-        lda     #183            ; see oserror.s
-        rts
-
-ucok1:  sta     ptr3
-        stx     ptr3+1          ; remember pointer to uppercased old name
-        lda     tmp3            ; # of bytes reserved on the stack
-        sta     sspc            ; remember...
-
-; uppercase second (new) name and don't prepend device
-
-.ifdef  DEFAULT_DEVICE
-        ldy     #0
-        sty     tmp2            ; set flag for ucase_fn
-.endif
-        lda     ptr2
-        ldx     ptr2+1
-
-        jsr     ucase_fn
-        bcc     ucok2
-
-        ldy     tmp3            ; get size
-        jsr     addysp          ; free used space on the stack
-        lda     #183            ; see oserror.s
-        rts
-
-ucok2:  sta     ptr2            ; remember pointer to uppercased new name
-        stx     ptr2+1
-
-; update sspc -- # of bytes used on the stack
-
-        lda     sspc
-        clc
-        adc     tmp3
-        sta     sspc
-        bcc     ukok4
-        inc     sspc+1
-ukok4:
-
-.else
-
-        sta     ptr3
-        stx     ptr3+1
-        sty     sspc
-
-.endif
-
-; create a string on the stack with the old filename and the new filename separated by an invalid character (space in our case)
-; ptr2 - pointer to new name
-; ptr3 - pointer to old name
-
-        lda     #128
-        tay
-        clc
-        adc     sspc
-        sta     sspc
-        bcc     L1
-        inc     sspc+1
-L1:     jsr     subysp          ; make room on the stack
-
-; copy old name
-        ldy     #0
-con:    lda     (ptr3),y
-        sta     (sp),y
-        beq     copyend
-        iny
-        bne     con
-
-copyend:lda     #$20            ; space
-        sta     (sp),y
-        iny
-        tya                     ; get current offset (beyond old name)
-        clc
-        adc     sp
-        sta     ptr3
-        lda     sp+1
-        adc     #0
-        sta     ptr3+1          ; ptr3 now contains pointer to space for new filename
-
-; copy new name
-        ldy     #0
-cnn:    lda     (ptr2),y
-        sta     (ptr3),y
-        beq     copend2
-        iny
-        bne     cnn
-
-copend2:ldx     tmp4
-        lda     sp
-        sta     ICBAL,x
-        lda     sp+1
-        sta     ICBAH,x
-        lda     #RENAME
-        sta     ICCOM,x
-        lda     #0
-        sta     ICAX1,x
-        sta     ICAX2,x
-        sta     ICBLL,x
-        sta     ICBLH,x
-        jsr     CIOV
-        tya
-        pha
-
-; clean up stack
-
-        lda     sp
-        clc
-        adc     sspc
-        sta     sp
-        lda     sp+1
-        adc     sspc+1
-        sta     sp+1
-
-; handle status
-
-        pla
-        tay
-        bmi     cioerr
-        lda     #0
-        rts
-cioerr: tya
-        rts
-
-.endproc        ; __sysrename
-
-        .bss
-
-sspc:   .res    2               ; stack space used
diff --git a/libsrc/atari/sysrmdir.s b/libsrc/atari/sysrmdir.s
deleted file mode 100644 (file)
index 3f5b9e4..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-;
-; Stefan Haubenthal, 2005-12-24
-; Christian Groessler, 2013-07-16
-;
-; unsigned char __fastcall__ _sysrmdir (const char* name);
-;
-; for SpartaDOS and MyDOS
-;
-
-        .include        "atari.inc"
-        .export         __sysrmdir
-        .import         __sysremove
-        .import         __dos_type
-        .import         findfreeiocb
-        .importzp       tmp4
-.ifdef  UCASE_FILENAME
-        .import         ucase_fn
-        .import         addysp
-        .importzp       tmp3
-.ifdef  DEFAULT_DEVICE
-        .importzp tmp2
-.endif
-.endif
-
-.proc   __sysrmdir
-
-        pha
-        lda     __dos_type
-        beq     not_impl                ; AtariDOS
-        cmp     #OSADOS+1
-        bcc     do_sparta               ; OS/A and SpartaDOS
-        pla
-        jmp     __sysremove             ; MyDOS and others (TODO: check XDOS)
-
-not_impl:
-        pla
-        lda     #NVALID
-        rts
-
-iocberr:
-        pla                             ; cleanup stack
-        pla
-        lda     #TMOF
-        rts
-
-do_sparta:
-        txa
-        pha
-        jsr     findfreeiocb
-        bne     iocberr                 ; no IOCB available
-
-        stx     tmp4                    ; remember IOCB
-        pla
-        tax
-        pla
-
-.ifdef  UCASE_FILENAME
-
-.ifdef  DEFAULT_DEVICE
-        ldy     #$80
-        sty     tmp2            ; set flag for ucase_fn
-.endif
-        jsr     ucase_fn
-        bcc     ucok1
-
-        lda     #183                    ; see oserror.s
-        rts
-ucok1:
-
-.endif  ; defined UCASE_FILENAME
-
-        ldy     tmp4                    ; IOCB index
-        sta     ICBAL,y                 ; store pointer to filename
-        txa
-        sta     ICBAH,y
-        tya
-        tax
-        lda     #RMDIR
-        sta     ICCOM,x
-        lda     #0
-        sta     ICAX1,x
-        lda     #0
-        sta     ICAX2,x
-        sta     ICBLL,x
-        sta     ICBLH,x
-        jsr     CIOV
-
-.ifdef  UCASE_FILENAME
-        tya
-        pha
-        ldy     tmp3                    ; get size
-        jsr     addysp                  ; free used space on the stack
-        pla
-        tay
-.endif  ; defined UCASE_FILENAME
-
-        bmi     cioerr
-        lda     #0
-        rts
-
-cioerr: tya
-        rts
-
-.endproc        ; __sysrmdir
diff --git a/libsrc/atari/system_check.s b/libsrc/atari/system_check.s
deleted file mode 100644 (file)
index 2f1feef..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-;
-; Atari startup system check
-;
-; This routine gets loaded prior to the main part of the executable
-; and checks if the system is compatible to run the program.
-; For the XL target it checks whether the system is an XL type one
-; and that enough memory is installed (which isn't the case for a 600XL).
-; For the non-XL target it checks whether there is enough memory
-; installed to run the program.
-; For both targets it checks that the program won't load below MEMLO.
-; If one of the checks fails, the loading of the main program
-; is aborted by jumping to DOSVEC.
-;
-; Christian Groessler, chris@groessler.org, 2013
-;
-
-;DEBUG   =       1
-
-        .export         __SYSTEM_CHECK__: absolute = 1
-        .import         __SYSCHK_LOAD__
-        .import         __STARTADDRESS__
-
-        ; the following imports are only needed for the 'atari' target version
-        .import         __BSS_SIZE__, __BSS_RUN__
-        .import         __STACKSIZE__
-        .import         __RESERVED_MEMORY__
-
-        .include        "zeropage.inc"
-        .include        "atari.inc"
-
-
-.macro print_string text
-        .local  start, cont
-        jmp     cont
-start:  .byte   text, ATEOL
-cont:   ldx     #0              ; channel 0
-        lda     #<start
-        sta     ICBAL,x         ; address
-        lda     #>start
-        sta     ICBAH,x
-        lda     #<(cont - start)
-        sta     ICBLL,x         ; length
-        lda     #>(cont - start)
-        sta     ICBLH,x
-        lda     #PUTCHR
-        sta     ICCOM,x
-        jsr     CIOV_org
-.endmacro
-
-.macro print_string2 addr, len
-        ldx     #0              ; channel 0
-        lda     #<addr
-        sta     ICBAL,x         ; address
-        lda     #>addr
-        sta     ICBAH,x
-        lda     #<len
-        sta     ICBLL,x         ; length
-        lda     #>len
-        sta     ICBLH,x
-        lda     #PUTCHR
-        sta     ICCOM,x
-        jsr     CIOV_org
-.endmacro
-
-
-; ------------------------------------------------------------------------
-; code
-
-.segment        "SYSCHK"
-
-.ifdef __ATARIXL__
-
-lmemerrxl_txt:
-        .byte   "Not enough memory to move screen", ATEOL
-        .byte   "memory to low memory. Consider using", ATEOL
-        .byte   "a higher load address.", ATEOL
-lmemerrxl_txt_len = * - lmemerrxl_txt
-
-; no XL machine
-no_xl:  print_string "This program needs an XL machine."
-        jmp     fail
-
-
-; ***** entry point (atarixl) *****
-
-syschk: lda     $fcd8           ; from ostype.s
-        cmp     #$a2
-        beq     no_xl
-
-; we have an XL machine, now check memory
-        lda     RAMSIZ
-        cmp     #$80
-        bcs     sys_ok
-
-        jmp     mem_err
-
-sys_ok:
-        .include "xlmemchk.inc"         ; calculate lowest address we will use when we move the screen buffer down
-
-        lda     MEMLO
-        cmp     lowadr
-        lda     MEMLO+1
-        sbc     lowadr+1
-        bcc     memlo_ok
-
-; load address was too low
-        print_string2 lmemerrxl_txt, lmemerrxl_txt_len
-        jsr     delay           ; long text takes longer to read, give user additional time
-        jmp     fail
-
-.else   ; above 'atarixl', below 'atari'
-
-.define CIOV_org CIOV           ; the print_string macros use CIOV_org, map this to CIOV
-
-lmemerr_txt:
-        .byte   "Program would load below MEMLO.", ATEOL
-        .byte   "Consider using a higher load address.", ATEOL
-lmemerr_txt_len = * - lmemerr_txt
-
-
-; ***** entry point (atari) *****
-
-syschk:
-        sec
-        lda     MEMTOP
-        sbc     #<__RESERVED_MEMORY__
-        sta     tmp
-        lda     MEMTOP+1
-        sbc     #>__RESERVED_MEMORY__
-        sta     tmp+1
-        lda     tmp
-        sec
-        sbc     #<__STACKSIZE__
-        sta     tmp
-        lda     tmp+1
-        sbc     #>__STACKSIZE__
-        sta     tmp+1
-
-;tmp contains address which must be above .bss's end
-
-        lda     tmp
-        cmp     #<(__BSS_RUN__ + __BSS_SIZE__)
-        lda     tmp+1
-        sbc     #>(__BSS_RUN__ + __BSS_SIZE__)
-
-        bcc     mem_err         ; program doesn't fit into memory
-
-        lda     MEMLO
-        cmp     #<__STARTADDRESS__
-        lda     MEMLO+1
-        sbc     #>__STARTADDRESS__
-        bcc     memlo_ok
-
-; load address was too low
-        print_string2 lmemerr_txt, lmemerr_txt_len
-        jsr     delay           ; long text takes longer to read, give user additional time
-        jmp     fail
-
-.endif
-
-; all is well(tm), launch the application
-memlo_ok:
-.ifdef DEBUG
-        print_string "Stage #1 OK"
-        jsr     delay
-.endif
-        rts
-
-; not enough memory
-mem_err:print_string "Not enough memory."
-fail:   jsr     delay
-        jmp     (DOSVEC)
-
-; short delay
-.proc   delay
-
-        lda     #10
-@loop:  jsr     delay1
-        clc
-        sbc     #0
-        bne     @loop
-        rts
-
-delay1: ldx     #0
-        ldy     #0
-@loop:  dey
-        bne     @loop
-        dex
-        bne     @loop
-        rts
-
-.endproc
-
-end:
-
-.ifndef __ATARIXL__
-tmp:            ; outside of the load chunk, some kind of poor man's .bss
-.endif
-
-; ------------------------------------------------------------------------
-; Chunk header
-
-.segment        "SYSCHKHDR"
-
-        .word   __SYSCHK_LOAD__
-        .word   end - 1
-
-; ------------------------------------------------------------------------
-; Chunk "trailer" - sets INITAD
-
-.segment        "SYSCHKTRL"
-
-        .word   INITAD
-        .word   INITAD+1
-        .word   syschk
diff --git a/libsrc/atari/systime.s b/libsrc/atari/systime.s
deleted file mode 100644 (file)
index 273e394..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-;
-; Ullrich von Bassewitz, 12.11.2002
-;
-; time_t _systime (void);
-; /* Similar to time(), but:
-; **   - Is not ISO C
-; **   - Does not take the additional pointer
-; **   - Does not set errno when returning -1
-; */
-;
-
-        .export         __systime
-
-        .importzp       sreg
-
-.code
-
-.proc   __systime
-
-        lda     #$FF
-        tax
-        sta     sreg
-        sta     sreg+1
-        rts                     ; Return -1
-
-.endproc
-
-
diff --git a/libsrc/atari/sysuname.s b/libsrc/atari/sysuname.s
deleted file mode 100644 (file)
index 25a891a..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; unsigned char __fastcall__ _sysuname (struct utsname* buf);
-;
-
-        .export         __sysuname, utsdata
-
-        .import         utscopy
-
-        __sysuname = utscopy
-
-;--------------------------------------------------------------------------
-; Data. We define a fixed utsname struct here and just copy it.
-
-.rodata
-
-utsdata:
-        ; sysname
-        .asciiz         "cc65"
-
-        ; nodename
-        .asciiz         ""
-
-        ; release
-        .byte           ((.VERSION >> 8) & $0F) + '0'
-        .byte           '.'
-        .byte           ((.VERSION >> 4) & $0F) + '0'
-        .byte           $00
-
-        ; version
-        .byte           (.VERSION & $0F) + '0'
-        .byte           $00
-
-        ; machine
-        .asciiz         "Atari"
-
-
-
diff --git a/libsrc/atari/targetutil/Makefile.inc b/libsrc/atari/targetutil/Makefile.inc
deleted file mode 100644 (file)
index 05405f2..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-DEPS += ../libwrk/$(TARGET)/w2cas.d
-
-../libwrk/$(TARGET)/w2cas.o: $(SRCDIR)/targetutil/w2cas.c | ../libwrk/$(TARGET)
-       $(COMPILE_recipe)
-
-../targetutil/w2cas.com: ../libwrk/$(TARGET)/w2cas.o ../lib/$(TARGET).lib | ../targetutil
-       $(LD65) -o $@ -t $(TARGET) $^
-
-$(TARGET): ../targetutil/w2cas.com
diff --git a/libsrc/atari/targetutil/w2cas.c b/libsrc/atari/targetutil/w2cas.c
deleted file mode 100644 (file)
index 4d574da..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-/* w2cas.c -- write file to cassette
-**
-** This program writes a boot file (typically linked with
-** 'atari-cassette.cfg') to the cassette.
-** Only files < 32K are supported, since the loading of
-** larger files requires a special loader inside the program.
-**
-** Christian Groessler, chris@groessler.org, 2014
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <6502.h>
-#include <atari.h>
-#include <conio.h>
-
-static int verbose = 1;
-static char C_dev[] = "C:";
-
-static struct __iocb *findfreeiocb(void)
-{
-    struct __iocb *iocb = &IOCB;  /* first IOCB (#0) */
-    int i;
-
-    for (i = 0; i < 8; i++) {
-        if (iocb->handler == 0xff)
-            return iocb;
-        iocb++;
-    }
-    return NULL;
-}
-
-int main(int argc, char **argv)
-{
-    char *filename, *x;
-    char buf[20];
-    FILE *file;
-    unsigned char *buffer;
-    size_t filen, buflen = 32768l + 1;
-    struct regs regs;
-    struct __iocb *iocb = findfreeiocb();
-    int iocb_num;
-
-    if (! iocb) {
-        fprintf(stderr, "couldn't find a free iocb\n");
-        if (_dos_type != 1)
-            cgetc();
-        return 1;
-    }
-    iocb_num = (iocb - &IOCB) * 16;
-    if (verbose)
-        printf("using iocb index $%02X ($%04X)\n", iocb_num, iocb);
-
-    if (argc < 2) {
-        printf("\nfilename: ");
-        x = fgets(buf, 19, stdin);
-        printf("\n");
-        if (! x)
-            return 1;
-        if (*x && *(x + strlen(x) - 1) == '\n')
-            *(x + strlen(x) - 1) = 0;
-        filename = x;
-    }
-    else {
-        filename = *(argv+1);
-    }
-
-    /* allocate buffer */
-    buffer = malloc(buflen);
-    if (! buffer) {
-        buflen = _heapmaxavail(); /* get as much as we can */
-        buffer = malloc(buflen);
-        if (! buffer) {
-            fprintf(stderr, "cannot alloc %ld bytes -- aborting...\n", (long)buflen);
-            if (_dos_type != 1)
-                cgetc();
-            return 1;
-        }
-    }
-    if (verbose)
-        printf("buffer size: %ld bytes\n", (long)buflen);
-
-    /* open file */
-    file = fopen(filename, "rb");
-    if (! file) {
-        free(buffer);
-        fprintf(stderr, "cannot open '%s': %s\n", filename, strerror(errno));
-        if (_dos_type != 1)
-            cgetc();
-        return 1;
-    }
-
-    /* read file -- file length must be < 32K */
-    if (verbose)
-        printf("reading input file...\n");
-    filen = fread(buffer, 1, buflen, file);
-    if (! filen) {
-        fprintf(stderr, "read error\n");
-    file_err:
-        fclose(file);
-        free(buffer);
-        if (_dos_type != 1)
-            cgetc();
-        return 1;
-    }
-    if (filen > 32767l) {
-        fprintf(stderr, "file is too large (must be < 32768)\n");
-        goto file_err;
-    }
-    if (filen == buflen) { /* we have a buffer < 32768 and the file fits into it (and is most probably larger) */
-        fprintf(stderr, "not enough memory\n");
-        goto file_err;
-    }
-    if (verbose)
-      printf("file size: %ld bytes\n", (long)filen);
-
-    /* close input file */
-    fclose(file);
-
-    /* open cassette */
-    if (verbose)
-        printf("opening cassette...\n");
-    iocb->buffer = C_dev;
-    iocb->aux1 = 8;    /* open for output */
-    iocb->aux2 = 128;  /* short breaks and no stop between data blocks */
-    iocb->command = IOCB_OPEN;
-    regs.x = iocb_num;
-    regs.pc = 0xe456;   /* CIOV */
-
-    _sys(&regs);
-    if (regs.y != 1) {
-        fprintf(stderr, "CIO call to open cassette returned %d\n", regs.y);
-        free(buffer);
-        if (_dos_type != 1)
-            cgetc();
-        return 1;
-    }
-
-    /* write file */
-    if (verbose)
-        printf("writing to cassette...\n");
-    iocb->buffer = buffer;
-    iocb->buflen = filen;
-    iocb->command = IOCB_PUTCHR;
-    regs.x = iocb_num;
-    regs.pc = 0xe456;   /* CIOV */
-
-    _sys(&regs);
-    if (regs.y != 1) {
-        fprintf(stderr, "CIO call to write file returned %d\n", regs.y);
-        free(buffer);
-
-        iocb->command = IOCB_CLOSE;
-        regs.x = iocb_num;
-        regs.pc = 0xe456;   /* CIOV */
-        _sys(&regs);
-
-        if (_dos_type != 1)
-            cgetc();
-        return 1;
-    }
-
-    /* free buffer */
-    free(buffer);
-
-    /* close cassette */
-    iocb->command = IOCB_CLOSE;
-    regs.x = iocb_num;
-    regs.pc = 0xe456;   /* CIOV */
-    _sys(&regs);
-
-    if (regs.y != 1) {
-        fprintf(stderr, "CIO call to close cassette returned %d\n", regs.y);
-        if (_dos_type != 1)
-            cgetc();
-        return 1;
-    }
-
-    /* all is fine */
-    printf("success\n");
-    if (_dos_type != 1)
-        cgetc();
-    return 0;
-}
diff --git a/libsrc/atari/tgi/atari_tgi_common.inc b/libsrc/atari/tgi/atari_tgi_common.inc
deleted file mode 100644 (file)
index f4ef681..0000000
+++ /dev/null
@@ -1,1518 +0,0 @@
-;
-; Generic Atari graphics driver
-;
-
-.macpack longbranch
-.macpack module
-
-.ifdef __ATARIXL__
-        CIO_vec := my_CIOV
-.else
-        CIO_vec := CIOV
-.endif
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Header. Includes jump table and constants.
-        ;
-        ; ----------------------------------------------------------------------
-
-.ifdef __ATARIXL__
-        .define LABEL_X "x"
-.else
-        .define LABEL_X ""
-.endif
-
-.if pages = 2
-        .define LABEL_P2 "p2"
-.else
-        .define LABEL_P2 ""
-.endif
-
-        module_header   .ident (.sprintf ("_atr%s%d%s_tgi", LABEL_X, ::grmode, LABEL_P2))
-
-; Header
-
-        .byte   $74, $67, $69           ; "tgi"
-        .byte   TGI_API_VERSION         ; TGI API version number
-libref: .addr   $0000                   ; Library reference
-        .word   x_res                   ; X resolution
-        .word   y_res                   ; Y resolution
-        .byte   colors                  ; Number of drawing colors
-        .byte   pages                   ; Number of screens available
-        .byte   8                       ; System font X size
-        .byte   8                       ; System font Y size
-        .word   aspect                  ; Aspect ratio
-        .byte   0                       ; TGI driver flags
-
-; Function table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   INIT
-        .addr   DONE
-        .addr   GETERROR
-        .addr   CONTROL
-        .addr   CLEAR
-        .addr   SETVIEWPAGE
-        .addr   SETDRAWPAGE
-        .addr   SETCOLOR
-        .addr   SETPALETTE
-        .addr   GETPALETTE
-        .addr   GETDEFPALETTE
-        .addr   SETPIXEL
-        .addr   GETPIXEL
-        .addr   LINE
-        .addr   BAR
-        .addr   TEXTSTYLE
-        .addr   OUTTEXT
-        .addr   0                       ; IRQ entry is unused
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Parameters
-        ;
-        ; ----------------------------------------------------------------------
-
-        x1      := ptr1
-        y1      := ptr2
-        x2      := ptr3
-        y2      := ptr4
-        radius  := tmp1
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Global variables
-        ;
-        ; ----------------------------------------------------------------------
-
-        sptr    := regsave + 2
-
-.bss
-        error:
-                .res    1       ; Error code
-
-.if ::grmode = 9 || ::grmode = 11
-        palette = default_palette
-.else
-        palette:
-                .res    colors  ; The current palette
-.endif
-
-        mask:
-                .res    1       ; Current pixel mask
-        griocb:
-                .res    1       ; IOCB channel number for graphics
-
-.if pages = 2
-        p0scr:
-                .res    1       ; High byte of screen address for screen page 0
-        p0dls:
-                .res    1       ; High byte of display list address for screen page 0
-                                ; Page 1's addresses are 8K higher
-.endif
-
-.data
-        mag_x:
-                .byte   1       ; Horizontal text scaling factor
-        mag_y:
-                .byte   1       ; Vertical text scaling factor
-        mag_x8:
-                .word   8       ; Horizontal text scaling factor * 8
-        mag_y8:
-                .word   8       ; Vertical text scaling factor * 8
-        text_dir:
-                .byte   0       ; Text direction,
-
-.ifdef __ATARIXL__
-        my_CIOV:
-                .byte   $4C, 0, 0
-.endif
-.code
-
-; ******************************************************************************
-
-.macro  put_pixel
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Put a pixel at (sptr),y using x as the bit mask offset
-        ;
-        ; ----------------------------------------------------------------------
-
-        lda     (sptr),y
-        eor     mask
-        and     mask_table,x
-        eor     (sptr),y
-        sta     (sptr),y
-.endmacro
-
-; ******************************************************************************
-
-.rodata
-screen_device:
-        .byte "S:",$9B          ; Device code for screen
-screen_device_length := * - screen_device
-
-.code
-
-.proc INIT
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; INIT: Switch to graphics mode
-        ;
-        ; ----------------------------------------------------------------------
-
-
-.code
-        ; Initialize drawing color
-
-.if ::ppb = 8
-        ldx     #$FF
-.elseif ::ppb = 4
-        ldx     #$55
-.elseif ::ppb = 2
-        ldx     #$11
-.endif
-
-        stx     mask
-
-.ifdef __ATARIXL__
-
-        ; setup pointer to CIO
-
-        lda     libref
-        sta     my_CIOV+1
-        lda     libref+1
-        sta     my_CIOV+2
-.endif
-
-
-        ; Find a free IOCB
-        lda     #$70
-search: tax
-        ldy     ICHID,x
-        cpy     #$FF
-        beq     found
-        sub     #$10
-        bcs     search
-
-        ; Not enough resources available (free IOCB or memory)
-        ; enter with C cleared!
-nores:  lda     #TGI_ERR_NO_RES
-        bcc     exit
-
-found:  ; Check if enough RAM is available
-        lda     #0
-        sub     #<mem_needed
-        tay
-        lda     RAMTOP
-        sbc     #>mem_needed
-        cmp     APPMHI + 1
-        bcc     nores
-        bne     switch
-        cpy     APPMHI
-        bcc     nores                   ; not enough memory
-
-        ; Switch into graphics mode
-switch: lda     #OPEN
-        sta     ICCOM,x
-        lda     #OPNIN | OPNOT
-        sta     ICAX1,x
-        lda     #::grmode
-        sta     ICAX2,x
-        lda     #<screen_device
-        sta     ICBAL,x
-        lda     #>screen_device
-        sta     ICBAH,x
-        lda     #<screen_device_length
-        sta     ICBLL,x
-        lda     #>screen_device_length
-        sta     ICBLH,x
-        jsr     CIO_vec
-
-.if ::pages = 2
-        ; Reserve 8K of high memory
-        lda     RAMTOP
-        sub     #32
-        sta     RAMTOP
-        ; Close and reopen graphics
-        lda     #CLOSE
-        sta     ICCOM,x
-        jsr     CIO_vec
-        ; Reopen graphics
-        lda     #OPEN
-        sta     ICCOM,x
-        lda     #OPNIN | OPNOT
-        sta     ICAX1,x
-        lda     #::grmode
-        sta     ICAX2,x
-        lda     #<screen_device
-        sta     ICBAL,x
-        lda     #>screen_device
-        sta     ICBAH,x
-        lda     #<screen_device_length
-        sta     ICBLL,x
-        lda     #>screen_device_length
-        sta     ICBLH,x
-        jsr     CIO_vec
-        ; Save screen pointers
-        lda     SAVMSC + 1
-        sta     p0scr
-        lda     SDLSTH
-        sta     p0dls
-.endif ; ::pages = 2
-
-        stx     griocb
-
-        ; Reset the error code and return
-        lda     #TGI_ERR_OK
-exit:   sta     error
-        rts
-.endproc
-
-; ******************************************************************************
-
-.proc DONE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; DONE: Switch back to text mode
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-
-.if ::pages = 2
-        ; Free 8K of high memory
-        lda     RAMTOP
-        add     #32
-        sta     RAMTOP
-.endif
-
-        ; Clear griocb
-        lda     #$FF
-        ldx     griocb
-        sta     griocb
-
-        ; Close the S: device
-        lda     #CLOSE
-        sta     ICCOM,x
-        jsr     CIO_vec
-
-        ; Reopen it in Graphics 0
-        lda     #OPEN
-        sta     ICCOM,x
-        lda     #OPNIN | OPNOT
-        sta     ICAX1,x
-        lda     #0
-        sta     ICAX2,x
-        lda     #<screen_device
-        sta     ICBAL,x
-        lda     #>screen_device
-        sta     ICBAH,x
-        lda     #<screen_device_length
-        sta     ICBLL,x
-        lda     #>screen_device_length
-        sta     ICBLH,x
-        jsr     CIO_vec
-
-        ; Now close it again; we don't need it anymore :)
-        lda     #CLOSE
-        sta     ICCOM,x
-        jmp     CIO_vec
-.endproc
-
-; ******************************************************************************
-
-.proc GETERROR
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; GETERROR: Return the error code in A and clear it
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        ldx     #TGI_ERR_OK
-        lda     error
-        stx     error
-        rts
-.endproc
-
-; ******************************************************************************
-
-.proc CLEAR
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; CLEAR: Clear the screen
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        ; Load the screen address in sptr
-        lda     SAVMSC
-        sta     sptr
-        lda     SAVMSC + 1
-        sta     sptr + 1
-
-        ; Fill with zero
-        lda     #0
-        tay
-
-.if >::scrsize > 0
-        ; Clear full pages if any
-        ldx     #>::scrsize
-loop1:  sta     (sptr),y
-        iny
-        bne     loop1
-        inc     sptr + 1
-        dex
-        bne     loop1
-.endif
-
-.if <::scrsize > 0
-        ; Clear the rest, if any
-loop2:  sta     (sptr),y
-        iny
-        cpy     #<::scrsize
-        bne     loop2
-.endif
-
-        rts
-.endproc
-
-; ******************************************************************************
-
-.proc GETPALETTE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; GETPALETTE: Return the current palette in A/X
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        lda     #<palette
-        ldx     #>palette
-        rts
-.endproc
-
-; ******************************************************************************
-
-.proc GETDEFPALETTE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; GETDEFPALETTE: Return the default palette in A/X
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        lda     #<default_palette
-        ldx     #>default_palette
-        rts
-.endproc
-
-; ******************************************************************************
-
-.proc SETCOLOR
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; SETCOLOR: Set the drawing color (in A)
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        tax
-
-.if ::grmode = 9
-        ; Map colors like this: 0 -> 0, 1 -> 15, 2 -> 1, 3 -> 2 etc.
-        beq     cont
-        cpx     #1
-        bne     map
-        ldx     #16
-map:    dex
-cont:
-.endif
-
-        lda     masks,x
-        sta     mask
-        rts
-.endproc
-
-; ******************************************************************************
-
-.proc CALC
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; CALC: Calculate the screen address
-        ;       in
-        ;               x1 (ptr1)       x coordinate
-        ;               y1 (ptr2)       y coordinate
-        ;       out
-        ;               sptr + y        screen address
-        ;               x               bit mask index
-        ;
-        ; ----------------------------------------------------------------------
-
-.bss
-        temp:   .res    1
-.code
-        ; calculate line offset
-        lda     y1 + 1
-        sta     temp
-        lda     y1
-
-.if ::x_res / ::ppb = 40
-        yrep = 3
-.elseif ::x_res / ::ppb = 20
-        yrep = 2
-.elseif ::x_res / ::ppb = 10
-        yrep = 1
-.endif
-
-.repeat yrep
-        asl     a
-        rol     temp
-.endrepeat
-
-        sta     sptr
-        ldx     temp
-        stx     sptr + 1
-
-.repeat 2
-          asl   a
-          rol   temp
-.endrepeat
-
-        add     sptr
-        sta     sptr
-        lda     temp
-        adc     sptr + 1
-        sta     sptr + 1
-
-        ; calculate bit mask offset
-        lda     x1
-        and     #ppb - 1
-        tax
-
-        ; calculate row offset
-        lda     x1 + 1
-        sta     temp
-        lda     x1
-
-.if ::ppb = 8
-        xrep = 3
-.elseif ::ppb = 4
-        xrep = 2
-.elseif ::ppb = 2
-        xrep = 1
-.endif
-
-.repeat xrep
-        lsr     temp
-        ror     a
-.endrepeat
-
-        tay
-
-        ; sptr += SAVMSC
-        lda     SAVMSC
-        add     sptr
-        sta     sptr
-        lda     SAVMSC + 1
-        adc     sptr + 1
-        sta     sptr + 1
-
-        ; We're done!
-        rts
-.endproc
-
-; ******************************************************************************
-
-.proc SETPIXEL
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Draw one pixel at x1, y1
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        jsr     CALC
-        put_pixel
-        rts
-.endproc
-
-; ******************************************************************************
-
-.proc GETPIXEL
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; GETPIXEL: Read the color value of a pixel and return it in A/X
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        jsr     CALC
-        lda     (sptr),y
-        and     mask_table,x
-
-.if ::ppb = 8
-        beq     zero
-        lda     #1
-zero:   ldx     #0
-        rts
-.elseif ::ppb = 4
-loop:   cpx     #3
-        beq     done4
-        lsr     a
-        lsr     a
-        inx
-        bne     loop
-done4:  and     #$03
-        ldx     #0
-        rts
-.elseif ::ppb = 2
-        dex
-        bne     shift
-        and     #$0F
-        jmp     exit
-shift:  lsr     a
-        lsr     a
-        lsr     a
-        lsr     a
-
-exit:
-
-.if ::grmode = 9
-        ; Mode 9 mapping
-        ; Map colors like this: 0 -> 0, 15 -> 1, 2 -> 3, 3 -> 4 etc.
-        beq     done9
-        cmp     #15
-        bne     map9
-        lda     #0
-map9:   add     #1
-done9:
-.endif
-
-.if ::grmode = 10
-        ; Mode 10 mapping
-        ; Map out of range colors like this:
-        ;  9 -> 8
-        ; 10 -> 8
-        ; 11 -> 8
-        ; 12 -> 0
-        ; 13 -> 1
-        ; 14 -> 2
-        ; 15 -> 3
-        cmp     #9
-        bcc     done10
-        sub     #12
-        bcs     done10
-        lda     #8
-done10:
-.endif ; ::grmode = 10
-
-        ; Done!
-        ldx     #0
-        rts
-.endif  ; ::ppb = 2
-
-.endproc
-
-; ******************************************************************************
-
-.proc LINE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; LINE: Draw a line from x1,y1 to x2,y2
-        ;
-        ; ----------------------------------------------------------------------
-
-.ifdef USE_CIO_LINE
-
-        ; position ptr1, ptr2
-        lda     x1
-        sta     OLDCOL
-        lda     x1 + 1
-        sta     OLDCOL + 1
-        lda     y1
-        sta     OLDROW
-        ; plot
-        jsr     SETPIXEL
-        ; position ptr3,ptr4
-        lda     x2
-        sta     COLCRS
-        lda     x2 + 1
-        sta     COLCRS + 1
-        lda     y2
-        sta     ROWCRS
-        ; drawto
-        ldx     griocb
-        lda     #DRAWLN
-        sta     ICCOM,x
-        lda     mask
-
-.if ::grmode = 10
-        and     #$0f
-.else
-        and     #colors - 1
-.endif
-
-        sta     ATACHR
-        jmp     CIO_vec
-
-.else   ; USE_CIO_LINE
-
-; locals
-
-        dx      :=      sreg
-        dy      :=      y1
-        dx2     :=      x2
-        dy2     :=      y2
-        iy      :=      tmp1
-        err     :=      tmp3
-
-.code
-        ; dx = x2 - x1
-        lda     x2
-        sub     x1
-        sta     dx
-        lda     x2 + 1
-        sbc     x1 + 1
-        sta     dx + 1
-        ; if dx is positive, no problem
-        bcs     dx_positive
-
-        ; if dx is negative, swap x1,y1 with x2,y2
-        lda     x1      ; x1 <-> x2, low byte
-        ldx     x2
-        sta     x2
-        stx     x1
-        lda     x1 + 1  ; x1 <-> x2, high byte
-        ldx     x2 + 1
-        sta     x2 + 1
-        stx     x1 + 1
-        lda     y1      ; y1 <-> y2, low byte
-        ldx     y2
-        sta     y2
-        stx     y1
-        lda     y1 + 1  ; y1 <-> y2, high byte
-        ldx     y2 + 1
-        sta     y2 + 1
-        stx     y1 + 1
-        ; Calculate again
-        jmp     LINE
-
-dx_positive:
-        ; Calculate coords
-        jsr     CALC
-
-        ; dy = y2 - y1
-        lda     y2
-        sub     y1
-        sta     dy
-        lda     y2 + 1
-        sbc     y1 + 1
-        sta     dy + 1
-
-        ; if dy is negative
-        bcs     dy_positive
-        ; dy = -dy
-        lda     #0
-        sub     dy
-        sta     dy
-        lda     #0
-        sbc     dy + 1
-        sta     dy + 1
-        ; iy = -row_size
-        lda     #<(65536 - x_res / ppb)
-        sta     iy
-        lda     #>(65536 - x_res / ppb)
-        sta     iy + 1
-        bne     skip_iy_1               ; always
-
-dy_positive:
-        ; iy = row_size
-        lda     #<(x_res / ppb)
-        sta     iy
-        lda     #>(x_res / ppb)
-        sta     iy + 1
-skip_iy_1:
-
-        ; dx2 = dx * 2
-        lda     dx
-        asl     a
-        sta     dx2
-        lda     dx + 1
-        rol     a
-        sta     dx2 + 1
-
-        ; dy2 = dy * 2
-        lda     dy
-        asl     a
-        sta     dy2
-        lda     dy + 1
-        rol     a
-        sta     dy2 + 1
-
-        ; if dx >= dy
-        lda     dx
-        cmp     dy
-        lda     dx + 1
-        sbc     dy + 1
-        bcc     dy_major
-
-        ; dx is the major axis
-
-        ; err = dy2 - dx
-        lda     dy2
-        sub     dx
-        sta     err
-        lda     dy2 + 1
-        sbc     dx + 1
-        sta     err + 1
-
-        .scope
-loop:   ; main loop
-        put_pixel
-        ; if err >= 0
-        lda     err + 1
-        bmi     err_neg
-        ; err -= dx2
-        lda     err
-        sub     dx2
-        sta     err
-        lda     err + 1
-        sbc     dx2 + 1
-        sta     err + 1
-        ; move_vertical (iy)
-        lda     sptr
-        add     iy
-        sta     sptr
-        lda     sptr + 1
-        adc     iy + 1
-        sta     sptr + 1
-err_neg:
-        ; err += dy2
-        lda     err
-        add     dy2
-        sta     err
-        lda     err + 1
-        adc     dy2 + 1
-        sta     err + 1
-        ; move_right
-        inx
-        cpx     #ppb
-        bne     end_move
-        ldx     #0
-        iny
-        bne     end_move
-        inc     sptr + 1
-end_move:
-        ; loop while dx-- >= 0
-        lda     dx
-        ora     dx + 1
-        beq     exit
-        dec     dx
-        lda     dx
-        cmp     #$FF
-        bne     loop
-        dec     dx + 1
-        jmp     loop
-exit:   rts
-        .endscope
-
-dy_major:
-        ; dy is the major axis
-
-        ; err = dx2 - dy;
-        lda     dx2
-        sub     dy
-        sta     err
-        lda     dx2 + 1
-        sbc     dy + 1
-        sta     err + 1
-
-        .scope
-loop:   ; main loop
-        put_pixel
-        ; if err >= 0
-        lda     err + 1
-        bmi     end_move
-        ; err -= dy2
-        lda     err
-        sub     dy2
-        sta     err
-        lda     err + 1
-        sbc     dy2 + 1
-        sta     err + 1
-        ; move_right
-        inx
-        cpx     #ppb
-        bne     end_move
-        ldx     #0
-        iny
-        bne     end_move
-        inc     sptr + 1
-end_move:
-        ; err += dx2
-        lda     err
-        add     dx2
-        sta     err
-        lda     err + 1
-        adc     dx2 + 1
-        sta     err + 1
-        ; move_vertical(iy)
-        lda     sptr
-        add     iy
-        sta     sptr
-        lda     sptr + 1
-        adc     iy + 1
-        sta     sptr + 1
-        ; loop while dy-- >= 0
-        lda     dy
-        ora     dy + 1
-        beq     exit
-        dec     dy
-        lda     dy
-        cmp     #$FF
-        bne     loop
-        dec     dy + 1
-        jmp     loop
-exit:   rts
-        .endscope
-.endif  ; USE_CIO_LINE
-.endproc
-
-; ******************************************************************************
-
-.proc clipped_bar
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Clip and draw bar, this function will disappear when text clipping
-        ; will be done int the TGI kernel
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        lda     y1 + 1
-        bne     off
-        lda     y1
-        cmp     #y_res
-        bcs     off
-
-        lda     x1 + 1
-
-.if >(::x_res - 1) > 0
-        cmp     #>x_res
-        bcc     check2
-.endif
-
-        bne     off
-        lda     x1
-        cmp     #<x_res
-        bcc     check2
-off:    rts
-
-check2: lda     y2 + 1
-        bne     off
-        lda     y2
-        cmp     #y_res
-        bcs     off
-
-        lda     x2 + 1
-
-.if >(::x_res - 1) > 0
-        cmp     #>x_res
-        bcc     BAR
-.endif
-
-        bne     off
-        lda     x2
-        cmp     #<x_res
-        bcs     off
-.endproc
-
-; ******************************************************************************
-
-.proc BAR
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; BAR: Draw a filled rectangle with the corners at x1,y1,x2,y2
-        ;
-        ; ----------------------------------------------------------------------
-
-; locals
-        lmem    := sreg
-.bss
-        lmask:  .res 1
-        rmask:  .res 1
-        dy:     .res 1
-        dx:     .res 1
-        fmask:  .res 1
-.code
-        ; dy = y2 - y1 + 1
-        lda     y2
-        sub     y1
-        sta     dy
-        inc     dy
-        ; Calculate upper left corner
-        jsr     CALC
-        ; Save the values
-        tya
-        add     sptr
-        sta     lmem
-        lda     sptr + 1
-        adc     #0
-        sta     lmem + 1
-        lda     bar_table,x
-        sta     lmask
-        ; Calculate upper right corner
-        lda     x2
-        sta     x1
-
-.if >(::x_res - 1) > 0
-        lda     x2 + 1
-        sta     x1 + 1
-.endif
-
-        jsr     CALC
-        ; Save the values
-        tya
-        add     sptr
-        sta     sptr
-        bcc     skips
-        inc     sptr + 1
-skips:  inx
-        lda     bar_table,x
-        eor     #$FF
-        sta     rmask
-        ; Calculate memory difference between x1 and x2
-        lda     sptr
-        sub     lmem
-        sta     dx
-loop:   ; Main loop
-        ldy     #0
-        ldx     dx
-        beq     same
-        ; Left
-        lda     (lmem),y
-        eor     mask
-        and     lmask
-        eor     (lmem),y
-        sta     (lmem),y
-        iny
-        ; Between
-        lda     mask
-        jmp     next
-btwn:   sta     (lmem),y
-        iny
-next:   dex
-        bne     btwn
-        ; Right
-        lda     (lmem),y
-        eor     mask
-        and     rmask
-        eor     (lmem),y
-        sta     (lmem),y
-        jmp     cont
-same:   ; Same byte
-        lda     lmask
-        and     rmask
-        sta     fmask
-        lda     (lmem),y
-        eor     mask
-        and     fmask
-        eor     (lmem),y
-        sta     (lmem),y
-cont:   ; Go to next row
-        lda     lmem
-        add     #<(x_res / ppb)
-        sta     lmem
-        bcc     skipm
-        inc     lmem + 1
-skipm:  ; Loop while --dy > 0
-        dec     dy
-        bne     loop
-
-        rts
-
-.endproc
-
-; ******************************************************************************
-
-.proc TEXTSTYLE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; TEXTSTYLE: Set text style. Scale factors in X and Y and direction in A
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        stx     mag_x
-        sty     mag_y
-        ; Save text direction in bit 8 so that we can use BIT instruction later
-        lsr     a
-        ror     a
-        sta     text_dir
-        ; Save 8 * scaling factors
-        lda     #0
-        sta     mag_x8 + 1
-        sta     mag_y8 + 1
-        ; Save 8 * mag_x
-        txa
-
-        .repeat 3
-        asl     a
-        rol     mag_x8 + 1
-        .endrepeat
-
-        sta     mag_x8
-        ; Save 8 * mag_y
-        tya
-
-        .repeat 3
-        asl     a
-        rol     mag_y8 + 1
-        .endrepeat
-
-        sta     mag_y8
-        ; Done!
-        rts
-.endproc
-
-; ******************************************************************************
-
-.proc OUTTEXT
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; OUTTEXT: Draw text at x1, y1. String is in ptr3
-        ;
-        ; ----------------------------------------------------------------------
-
-; locals
-        string  := tmp1
-        cols    := tmp3
-        pixels  := tmp4
-        font    := regsave
-.rodata
-        ataint: .byte   64,0,32,96
-.bss
-        rows:   .res    1
-
-.if >(::x_res - 1) > 0
-        oldx1:  .res    2
-        oldx2:  .res    2
-.else
-        oldx1:  .res    1
-        oldx2:  .res    1
-.endif
-
-        oldy1:  .res    1
-        oldy2:  .res    1
-        inv:    .res    1
-
-.code
-        ; Don't draw zero sized characters
-        lda     mag_x
-        ora     mag_y
-        bne     not0
-        rts
-
-not0:   ; Save string address, ptr3 is needed by BAR
-        lda     ptr3
-        sta     string
-        lda     ptr3 + 1
-        sta     string + 1
-
-        bit     text_dir
-        bmi     vert
-
-        ; Calculate x2
-        lda     mag_x
-        sub     #1
-        add     x1
-        sta     x2
-
-.if >(::x_res - 1) > 0
-        lda     x1 + 1
-        adc     #0
-        sta     x2 + 1
-.else
-        lda     #0
-        sta     x2 + 1
-.endif
-
-        ; Calculate y2 and adjust y1
-        dec     y1
-        lda     y1
-        sta     y2
-        sub     mag_y
-        add     #1
-        sta     y1
-        lda     #0
-        sta     y2 + 1
-
-        jmp     while
-
-        ; Calculate for vertical text
-vert:   lda     x1
-        sub     #1
-        sta     x2
-        lda     x1 + 1
-        sbc     #0
-        sta     x2 + 1
-        lda     x1
-        sub     mag_y
-        sta     x1
-        lda     x1 + 1
-        sbc     #0
-        sta     x1 + 1
-
-        lda     mag_x
-        sub     #1
-        add     y1
-        sta     y2
-        lda     #0
-        sta     y2 + 1
-        jmp     while
-
-        ; Main loop
-loop:   inc     string
-        bne     skiph
-        inc     string + 1
-skiph:  ; Save coords
-        bit     text_dir
-        bmi     scvert
-
-        ldx     y1
-        stx     oldy1
-        ldx     y2
-        stx     oldy2
-        jmp     draw
-
-scvert: ldx     x1
-        stx     oldx1
-        ldx     x2
-        stx     oldx2
-
-.if >(::x_res - 1) > 0
-        ldx     x1 + 1
-        stx     oldx1 + 1
-        ldx     x2 + 1
-        stx     oldx2 + 1
-.endif
-
-        ; Draw one character
-        ; Convert to ANTIC code
-draw:   tay
-        rol     a
-        rol     a
-        rol     a
-        rol     a
-        and     #3
-        tax
-        tya
-        and     #$9f
-        ora     ataint,x
-        ; Save and clear inverse video bit
-        sta     inv
-        and     #$7F
-        ; Calculate font data address
-        sta     font
-        lda     #0
-        sta     font + 1
-
-        .repeat 3
-        asl     font
-        rol     a
-        .endrepeat
-
-        adc     CHBAS
-        sta     font + 1
-        ; Save old coords
-        bit     text_dir
-        bpl     hor
-        lda     y1
-        sta     oldy1
-        lda     y2
-        sta     oldy2
-        jmp     cont
-hor:    lda     x1
-        sta     oldx1
-        lda     x2
-        sta     oldx2
-
-.if >(::x_res - 1) > 0
-        lda     x1 + 1
-        sta     oldx1 + 1
-        lda     x2 + 1
-        sta     oldx2 + 1
-.endif
-
-        ; Get glyph pixels
-cont:   ldy     #7
-        ; Put one row of the glyph
-putrow: sty     rows
-        lda     (font),y
-        bit     inv
-        bpl     noinv
-        eor     #$FF
-noinv:  sta     pixels
-        lda     #7
-        sta     cols
-        ; Put one column of the row
-putcol: asl     pixels
-        bcc     next_col
-        lda     x1
-        pha
-        lda     x1 + 1
-        pha
-        jsr     clipped_bar
-        pla
-        sta     x1 + 1
-        pla
-        sta     x1
-next_col:
-        ; Go to next column
-        ; increase x coords
-        bit     text_dir
-        bmi     vertinc
-
-        lda     mag_x
-        add     x1
-        sta     x1
-        bcc     L1
-        inc     x1 + 1
-L1:     lda     mag_x
-        add     x2
-        sta     x2
-        bcc     L2
-        inc     x2 + 1
-        jmp     L2
-
-vertinc:
-        lda     y1
-        sub     mag_x
-        sta     y1
-        lda     y2
-        sub     mag_x
-        sta     y2
-L2:
-        dec     cols
-        bpl     putcol
-next_row:
-        ; Go to next row
-        bit     text_dir
-        bmi     verty
-
-        lda     y1
-        sub     mag_y
-        sta     y1
-        bcs     L3
-        dec     y1 + 1
-L3:     lda     y2
-        sub     mag_y
-        sta     y2
-        bcs     L6
-        dec     y2 + 1
-L4:     jmp     L6
-
-verty:  lda     x1
-        sub     mag_y
-        sta     x1
-        bcs     L5
-        dec     x1 + 1
-L5:     lda     x2
-        sub     mag_y
-        sta     x2
-        bcs     L6
-        dec     x2 + 1
-L6:
-        ; Restore old values
-        bit     text_dir
-        bpl     reshor
-        lda     oldy1
-        sta     y1
-        lda     oldy2
-        sta     y2
-        jmp     nextrow
-reshor: lda     oldx1
-        sta     x1
-        lda     oldx2
-        sta     x2
-
-.if >(::x_res - 1) > 0
-        lda     oldx1 + 1
-        sta     x1 + 1
-        lda     oldx2 + 1
-        sta     x2 + 1
-.endif
-
-        ; Next row
-nextrow:
-        ldy     rows
-        dey
-        jpl     putrow
-
-        ; Restore coords
-        bit     text_dir
-        bmi     resvert
-
-        ldx     oldy1
-        stx     y1
-        ldx     oldy2
-        stx     y2
-        ldx     #0
-        stx     y1 + 1
-        stx     y2 + 1
-
-        lda     mag_x8
-        add     x1
-        sta     x1
-        lda     mag_x8 + 1
-        adc     x1 + 1
-        sta     x1 + 1
-        lda     mag_x8
-        add     x2
-        sta     x2
-        lda     mag_x8 + 1
-        adc     x2 + 1
-        sta     x2 + 1
-
-        jmp     while
-
-resvert:
-        ldx     oldx1
-        stx     x1
-        ldx     oldx2
-        stx     x2
-
-.if >(::x_res - 1) > 0
-        ldx     oldx1 + 1
-        stx     x1 + 1
-        ldx     oldx2 + 1
-        stx     x2 + 1
-.endif
-
-        lda     y1
-        sub     mag_x8
-        sta     y1
-        lda     y1 +1
-        sbc     mag_x8 + 1
-        sta     y1 + 1
-        lda     y2
-        sub     mag_x8
-        sta     y2
-        lda     y2 +1
-        sbc     mag_x8 + 1
-        sta     y2 + 1
-
-        ; End of loop
-while:  ldy     #0
-        lda     (string),y
-        jne     loop            ; Check for null character
-        rts
-
-.endproc
-
-.if pages = 2
-; ******************************************************************************
-
-.proc SETVIEWPAGE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; SETVIEWPAGE, page in A
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        tax
-        beq     cont
-        lda     #32
-
-cont:   add     p0dls
-        cmp     SDLSTH
-        beq     done            ; We're already in the desired page
-
-        ldx     RTCLOK + 2
-        sta     SDLSTH
-
-        ; Wait until next VBLANK
-wait:   cpx     RTCLOK + 2
-        beq     wait
-
-        ; Done
-done:   rts
-.endproc
-
-; ******************************************************************************
-
-.proc SETDRAWPAGE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; SETDRAWPAGE, page in A
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        tax
-        beq     cont
-        lda     #32
-cont:   add     p0scr
-        sta     SAVMSC + 1
-        rts
-.endproc
-.endif
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Unimplemented functions that require an error code
-        ;
-        ; ----------------------------------------------------------------------
-
-CONTROL:
-        lda     #TGI_ERR_INV_FUNC
-        sta     error
-        ; fall through
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Unimplemented functions that don't require an error code
-        ;
-        ; ----------------------------------------------------------------------
-
-INSTALL:
-UNINSTALL:
-
-.if pages = 1
-SETVIEWPAGE:
-SETDRAWPAGE:
-.endif
-
-        rts
diff --git a/libsrc/atari/tgi/atr10.s b/libsrc/atari/tgi/atr10.s
deleted file mode 100644 (file)
index 10271b7..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-;
-; Graphics driver for the 80x192x9 (CIO mode 10, ANTIC mode F, GTIA mode $80) on the Atari.
-;
-; Fatih Aygun (2009)
-;
-
-        .include        "atari.inc"
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .macpack        generic
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Constants and tables
-        ;
-        ; ----------------------------------------------------------------------
-
-; Graphics mode
-        grmode = 10
-; X resolution
-        x_res = 80
-; Y resolution
-        y_res = 192
-; Number of colors
-        colors = 9
-; Pixels per byte
-        ppb = 2
-; Screen memory size in bytes
-        scrsize = x_res * y_res / ppb
-; Pixel aspect ratio
-        aspect = $0330                          ; based on 4/3 display
-; Free memory needed
-        mem_needed = 7147
-; Number of screen pages
-        pages = 1
-
-.rodata
-        mask_table:                             ; Mask table to set pixels
-                .byte   %11110000, %00001111
-        masks:                                  ; Color masks
-                .byte   $00, $11, $22, $33, $44, $55, $66, $77, $88
-        bar_table:                              ; Mask table for BAR
-                .byte   %11111111, %00001111, %00000000
-        default_palette:
-                .byte   $00, $0E, $32, $96, $68, $C4, $74, $EE, $4A
-
-.code
-
-; ******************************************************************************
-
-.proc SETPALETTE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; SETPALETTE: Set the palette (in ptr1)
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        ; Copy the palette
-        ldy     #colors - 1
-loop:   lda     (ptr1),y
-        sta     palette,y
-        sta     PCOLR0,y
-        dey
-        bpl     loop
-
-        ; Done, reset the error code
-        lda     #TGI_ERR_OK
-        sta     error
-        rts
-.endproc
-
-.include "atari_tgi_common.inc"
diff --git a/libsrc/atari/tgi/atr10p2.s b/libsrc/atari/tgi/atr10p2.s
deleted file mode 100644 (file)
index aa3a6fc..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-;
-; Graphics driver for the 80x192x9 (CIO mode 10, ANTIC mode F, GTIA mode $80) on the Atari.
-;
-; Fatih Aygun (2009)
-;
-
-        .include        "atari.inc"
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .macpack        generic
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Constants and tables
-        ;
-        ; ----------------------------------------------------------------------
-
-; Graphics mode
-        grmode = 10
-; X resolution
-        x_res = 80
-; Y resolution
-        y_res = 192
-; Number of colors
-        colors = 9
-; Pixels per byte
-        ppb = 2
-; Screen memory size in bytes
-        scrsize = x_res * y_res / ppb
-; Pixel aspect ratio
-        aspect = $0330                          ; based on 4/3 display
-; Free memory needed
-        mem_needed = 15339
-; Number of screen pages
-        pages = 2
-
-.rodata
-        mask_table:                             ; Mask table to set pixels
-                .byte   %11110000, %00001111
-        masks:                                  ; Color masks
-                .byte   $00, $11, $22, $33, $44, $55, $66, $77, $88
-        bar_table:                              ; Mask table for BAR
-                .byte   %11111111, %00001111, %00000000
-        default_palette:
-                .byte   $00, $0E, $32, $96, $68, $C4, $74, $EE, $4A
-
-.code
-
-; ******************************************************************************
-
-.proc SETPALETTE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; SETPALETTE: Set the palette (in ptr1)
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        ; Copy the palette
-        ldy     #colors - 1
-loop:   lda     (ptr1),y
-        sta     palette,y
-        sta     PCOLR0,y
-        dey
-        bpl     loop
-
-        ; Done, reset the error code
-        lda     #TGI_ERR_OK
-        sta     error
-        rts
-.endproc
-
-.include "atari_tgi_common.inc"
diff --git a/libsrc/atari/tgi/atr11.s b/libsrc/atari/tgi/atr11.s
deleted file mode 100644 (file)
index 74b7db3..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-;
-; Graphics driver for the 80x192x16h (CIO mode 11, ANTIC mode F, GTIA mode $C0) on the Atari.
-;
-; Fatih Aygun (2009)
-;
-
-        .include        "atari.inc"
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .macpack        generic
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Constants and tables
-        ;
-        ; ----------------------------------------------------------------------
-
-; Graphics mode
-        grmode = 11
-; X resolution
-        x_res = 80
-; Y resolution
-        y_res = 192
-; Number of colors
-        colors = 16
-; Pixels per byte
-        ppb = 2
-; Screen memory size in bytes
-        scrsize = x_res * y_res / ppb
-; Pixel aspect ratio
-        aspect = $0330                          ; based on 4/3 display
-; Free memory needed
-        mem_needed = 7147
-; Number of screen pages
-        pages = 1
-
-.rodata
-        mask_table:                             ; Mask table to set pixels
-                .byte   %11110000, %00001111
-        masks:                                  ; Color masks
-                .byte   $00, $11, $22, $33, $44, $55, $66, $77, $88, $99, $aa, $bb, $cc, $dd, $ee, $ff
-        bar_table:                              ; Mask table for BAR
-                .byte   %11111111, %00001111, %00000000
-        default_palette:
-                .byte   $00, $10, $20, $30, $40, $50, $60, $70, $80, $90, $A0, $B0, $C0, $D0, $E0, $F0
-
-.code
-
-; ******************************************************************************
-
-.proc SETPALETTE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; SETPALETTE: Set the palette (in ptr1)
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        ; No palettes
-        lda     #TGI_ERR_INV_FUNC
-        sta     error
-        rts
-.endproc
-
-.include "atari_tgi_common.inc"
diff --git a/libsrc/atari/tgi/atr14.s b/libsrc/atari/tgi/atr14.s
deleted file mode 100644 (file)
index e0ae9b5..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-;
-; Graphics driver for the 160x192x2 (CIO mode 14, ANTIC mode C) on the Atari.
-;
-; Fatih Aygun (2009)
-;
-
-        .include        "atari.inc"
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .macpack        generic
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Constants and tables
-        ;
-        ; ----------------------------------------------------------------------
-
-; Graphics mode
-        grmode = 14
-; X resolution
-        x_res = 160
-; Y resolution
-        y_res = 192
-; Number of colors
-        colors = 2
-; Pixels per byte
-        ppb = 8
-; Screen memory size in bytes
-        scrsize = x_res * y_res / ppb
-; Pixel aspect ratio
-        aspect = $0198                          ; based on 4/3 display
-; Free memory needed
-        mem_needed = 3305
-; Number of screen pages
-        pages = 1
-
-.rodata
-        mask_table:                             ; Mask table to set pixels
-                .byte   %10000000, %01000000, %00100000, %00010000, %00001000, %00000100, %00000010, %00000001
-        masks:                                  ; Color masks
-                .byte   %00000000, %11111111
-        bar_table:                              ; Mask table for BAR
-                .byte   %11111111, %01111111, %00111111, %00011111, %00001111, %00000111, %00000011, %00000001, %00000000
-        default_palette:
-                .byte   $00, $0E
-
-.code
-
-; ******************************************************************************
-
-.proc SETPALETTE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; SETPALETTE: Set the palette (in ptr1)
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        ; Copy the palette
-        ldy     #colors - 1
-loop:   lda     (ptr1),y
-        sta     palette,y
-        dey
-        bpl     loop
-
-        ; Get the color entries from the palette
-        lda     palette
-        sta     COLOR4
-        lda     palette + 1
-        sta     COLOR0
-
-        ; Done, reset the error code
-        lda     #TGI_ERR_OK
-        sta     error
-        rts
-.endproc
-
-.include "atari_tgi_common.inc"
diff --git a/libsrc/atari/tgi/atr15.s b/libsrc/atari/tgi/atr15.s
deleted file mode 100644 (file)
index d1b85f3..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-;
-; Graphics driver for the 160x192x2 (CIO mode 15, ANTIC mode E) on the Atari.
-;
-; Fatih Aygun (2009)
-;
-
-        .include        "atari.inc"
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .macpack        generic
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Constants and tables
-        ;
-        ; ----------------------------------------------------------------------
-
-; Graphics mode
-        grmode = 15
-; X resolution
-        x_res = 160
-; Y resolution
-        y_res = 192
-; Number of colors
-        colors = 4
-; Pixels per byte
-        ppb = 4
-; Screen memory size in bytes
-        scrsize = x_res * y_res / ppb
-; Pixel aspect ratio
-        aspect = $0198                          ; based on 4/3 display
-; Free memory needed
-        mem_needed = 7147
-; Number of screen pages
-        pages = 1
-
-.rodata
-        mask_table:                             ; Mask table to set pixels
-                .byte   %11000000, %00110000, %00001100, %00000011
-        masks:                                  ; Color masks
-                .byte   %00000000, %01010101, %10101010, %11111111
-        bar_table:                              ; Mask table for BAR
-                .byte   %11111111, %00111111, %00001111, %00000011, %00000000
-        default_palette:
-                .byte   $00, $0E, $32, $96
-
-.code
-
-; ******************************************************************************
-
-.proc SETPALETTE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; SETPALETTE: Set the palette (in ptr1)
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        ; Copy the palette
-        ldy     #colors - 1
-loop:   lda     (ptr1),y
-        sta     palette,y
-        dey
-        bpl     loop
-
-        ; Get the color entries from the palette
-        lda     palette
-        sta     COLOR4
-        lda     palette + 1
-        sta     COLOR0
-        lda     palette + 2
-        sta     COLOR1
-        lda     palette + 3
-        sta     COLOR2
-
-        ; Done, reset the error code
-        lda     #TGI_ERR_OK
-        sta     error
-        rts
-.endproc
-
-.include "atari_tgi_common.inc"
diff --git a/libsrc/atari/tgi/atr15p2.s b/libsrc/atari/tgi/atr15p2.s
deleted file mode 100644 (file)
index 7692d06..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-;
-; Graphics driver for the 160x192x2 (CIO mode 15, ANTIC mode E) on the Atari.
-;
-; Fatih Aygun (2009)
-;
-
-        .include        "atari.inc"
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .macpack        generic
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Constants and tables
-        ;
-        ; ----------------------------------------------------------------------
-
-; Graphics mode
-        grmode = 15
-; X resolution
-        x_res = 160
-; Y resolution
-        y_res = 192
-; Number of colors
-        colors = 4
-; Pixels per byte
-        ppb = 4
-; Screen memory size in bytes
-        scrsize = x_res * y_res / ppb
-; Pixel aspect ratio
-        aspect = $0198                          ; based on 4/3 display
-; Free memory needed
-        mem_needed = 15339
-; Number of screen pages
-        pages = 2
-
-.rodata
-        mask_table:                             ; Mask table to set pixels
-                .byte   %11000000, %00110000, %00001100, %00000011
-        masks:                                  ; Color masks
-                .byte   %00000000, %01010101, %10101010, %11111111
-        bar_table:                              ; Mask table for BAR
-                .byte   %11111111, %00111111, %00001111, %00000011, %00000000
-        default_palette:
-                .byte   $00, $0E, $32, $96
-
-.code
-
-; ******************************************************************************
-
-.proc SETPALETTE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; SETPALETTE: Set the palette (in ptr1)
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        ; Copy the palette
-        ldy     #colors - 1
-loop:   lda     (ptr1),y
-        sta     palette,y
-        dey
-        bpl     loop
-
-        ; Get the color entries from the palette
-        lda     palette
-        sta     COLOR4
-        lda     palette + 1
-        sta     COLOR0
-        lda     palette + 2
-        sta     COLOR1
-        lda     palette + 3
-        sta     COLOR2
-
-        ; Done, reset the error code
-        lda     #TGI_ERR_OK
-        sta     error
-        rts
-.endproc
-
-.include "atari_tgi_common.inc"
diff --git a/libsrc/atari/tgi/atr3.s b/libsrc/atari/tgi/atr3.s
deleted file mode 100644 (file)
index 7cacc18..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-;
-; Graphics driver for the 40x24x4 (CIO mode 3, ANTIC mode 8) on the Atari.
-;
-; Fatih Aygun (2009)
-;
-
-        .include        "atari.inc"
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .macpack        generic
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Constants and tables
-        ;
-        ; ----------------------------------------------------------------------
-
-; Graphics mode
-        grmode = 3
-; X resolution
-        x_res = 40
-; Y resolution
-        y_res = 24
-; Number of colors
-        colors = 4
-; Pixels per byte
-        ppb = 4
-; Screen memory size in bytes
-        scrsize = x_res * y_res / ppb
-; Pixel aspect ratio
-        aspect = $00CC                          ; based on 4/3 display
-; Free memory needed
-        mem_needed = 1
-; Number of screen pages
-        pages = 1
-
-.rodata
-        mask_table:                             ; Mask table to set pixels
-                .byte   %11000000, %00110000, %00001100, %00000011
-        masks:                                  ; Color masks
-                .byte   %00000000, %01010101, %10101010, %11111111
-        bar_table:                              ; Mask table for BAR
-                .byte   %11111111, %00111111, %00001111, %00000011, %00000000
-        default_palette:
-                .byte   $00, $0E, $32, $96
-
-.code
-
-; ******************************************************************************
-
-.proc SETPALETTE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; SETPALETTE: Set the palette (in ptr1)
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        ; Copy the palette
-        ldy     #colors - 1
-loop:   lda     (ptr1),y
-        sta     palette,y
-        dey
-        bpl     loop
-
-        ; Get the color entries from the palette
-        lda     palette
-        sta     COLOR4
-        lda     palette + 1
-        sta     COLOR0
-        lda     palette + 2
-        sta     COLOR1
-        lda     palette + 3
-        sta     COLOR2
-
-        ; Done, reset the error code
-        lda     #TGI_ERR_OK
-        sta     error
-        rts
-.endproc
-
-.include "atari_tgi_common.inc"
diff --git a/libsrc/atari/tgi/atr4.s b/libsrc/atari/tgi/atr4.s
deleted file mode 100644 (file)
index a37ec2f..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-;
-; Graphics driver for the 80x48x2 (CIO mode 4, ANTIC mode 9) on the Atari.
-;
-; Fatih Aygun (2009)
-;
-
-        .include        "atari.inc"
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .macpack        generic
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Constants and tables
-        ;
-        ; ----------------------------------------------------------------------
-
-; Graphics mode
-        grmode = 4
-; X resolution
-        x_res = 80
-; Y resolution
-        y_res = 48
-; Number of colors
-        colors = 2
-; Pixels per byte
-        ppb = 8
-; Screen memory size in bytes
-        scrsize = x_res * y_res / ppb
-; Pixel aspect ratio
-        aspect = $00CC                          ; based on 4/3 display
-; Free memory needed
-        mem_needed = 1
-; Number of screen pages
-        pages = 1
-
-.rodata
-        mask_table:                             ; Mask table to set pixels
-                .byte   %10000000, %01000000, %00100000, %00010000, %00001000, %00000100, %00000010, %00000001
-        masks:                                  ; Color masks
-                .byte   %00000000, %11111111
-        bar_table:                              ; Mask table for BAR
-                .byte   %11111111, %01111111, %00111111, %00011111, %00001111, %00000111, %00000011, %00000001, %00000000
-        default_palette:
-                .byte   $00, $0E
-
-.code
-
-; ******************************************************************************
-
-.proc SETPALETTE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; SETPALETTE: Set the palette (in ptr1)
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        ; Copy the palette
-        ldy     #colors - 1
-loop:   lda     (ptr1),y
-        sta     palette,y
-        dey
-        bpl     loop
-
-        ; Get the color entries from the palette
-        lda     palette
-        sta     COLOR4
-        lda     palette + 1
-        sta     COLOR0
-
-        ; Done, reset the error code
-        lda     #TGI_ERR_OK
-        sta     error
-        rts
-.endproc
-
-.include "atari_tgi_common.inc"
diff --git a/libsrc/atari/tgi/atr5.s b/libsrc/atari/tgi/atr5.s
deleted file mode 100644 (file)
index cf917d5..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-;
-; Graphics driver for the 80x48x4 (CIO mode 5, ANTIC mode A) on the Atari.
-;
-; Fatih Aygun (2009)
-;
-
-        .include        "atari.inc"
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .macpack        generic
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Constants and tables
-        ;
-        ; ----------------------------------------------------------------------
-
-; Graphics mode
-        grmode = 5
-; X resolution
-        x_res = 80
-; Y resolution
-        y_res = 48
-; Number of colors
-        colors = 4
-; Pixels per byte
-        ppb = 4
-; Screen memory size in bytes
-        scrsize = x_res * y_res / ppb
-; Pixel aspect ratio
-        aspect = $00CC                          ; based on 4/3 display
-; Free memory needed
-        mem_needed = 185
-; Number of screen pages
-        pages = 1
-
-.rodata
-        mask_table:                             ; Mask table to set pixels
-                .byte   %11000000, %00110000, %00001100, %00000011
-        masks:                                  ; Color masks
-                .byte   %00000000, %01010101, %10101010, %11111111
-        bar_table:                              ; Mask table for BAR
-                .byte   %11111111, %00111111, %00001111, %00000011, %00000000
-        default_palette:
-                .byte   $00, $0E, $32, $96
-
-.code
-
-; ******************************************************************************
-
-.proc SETPALETTE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; SETPALETTE: Set the palette (in ptr1)
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        ; Copy the palette
-        ldy     #colors - 1
-loop:   lda     (ptr1),y
-        sta     palette,y
-        dey
-        bpl     loop
-
-        ; Get the color entries from the palette
-        lda     palette
-        sta     COLOR4
-        lda     palette + 1
-        sta     COLOR0
-        lda     palette + 2
-        sta     COLOR1
-        lda     palette + 3
-        sta     COLOR2
-
-        ; Done, reset the error code
-        lda     #TGI_ERR_OK
-        sta     error
-        rts
-.endproc
-
-.include "atari_tgi_common.inc"
diff --git a/libsrc/atari/tgi/atr6.s b/libsrc/atari/tgi/atr6.s
deleted file mode 100644 (file)
index be9f6b7..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-;
-; Graphics driver for the 160x96x2 (CIO mode 6, ANTIC mode B) on the Atari.
-;
-; Fatih Aygun (2009)
-;
-
-        .include        "atari.inc"
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .macpack        generic
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Constants and tables
-        ;
-        ; ----------------------------------------------------------------------
-
-; Graphics mode
-        grmode = 6
-; X resolution
-        x_res = 160
-; Y resolution
-        y_res = 96
-; Number of colors
-        colors = 2
-; Pixels per byte
-        ppb = 8
-; Screen memory size in bytes
-        scrsize = x_res * y_res / ppb
-; Pixel aspect ratio
-        aspect = $00CC                          ; based on 4/3 display
-; Free memory needed
-        mem_needed = 1193
-; Number of screen pages
-        pages = 1
-
-.rodata
-        mask_table:                             ; Mask table to set pixels
-                .byte   %10000000, %01000000, %00100000, %00010000, %00001000, %00000100, %00000010, %00000001
-        masks:                                  ; Color masks
-                .byte   %00000000, %11111111
-        bar_table:                              ; Mask table for BAR
-                .byte   %11111111, %01111111, %00111111, %00011111, %00001111, %00000111, %00000011, %00000001, %00000000
-        default_palette:
-                .byte   $00, $0E
-
-.code
-
-; ******************************************************************************
-
-.proc SETPALETTE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; SETPALETTE: Set the palette (in ptr1)
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        ; Copy the palette
-        ldy     #colors - 1
-loop:   lda     (ptr1),y
-        sta     palette,y
-        dey
-        bpl     loop
-
-        ; Get the color entries from the palette
-        lda     palette
-        sta     COLOR4
-        lda     palette + 1
-        sta     COLOR0
-
-        ; Done, reset the error code
-        lda     #TGI_ERR_OK
-        sta     error
-        rts
-.endproc
-
-.include "atari_tgi_common.inc"
diff --git a/libsrc/atari/tgi/atr7.s b/libsrc/atari/tgi/atr7.s
deleted file mode 100644 (file)
index 6e9d49a..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-;
-; Graphics driver for the 160x96x4 (CIO mode 7, ANTIC mode D) on the Atari.
-;
-; Fatih Aygun (2009)
-;
-
-        .include        "atari.inc"
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .macpack        generic
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Constants and tables
-        ;
-        ; ----------------------------------------------------------------------
-
-; Graphics mode
-        grmode = 7
-; X resolution
-        x_res = 160
-; Y resolution
-        y_res = 96
-; Number of colors
-        colors = 4
-; Pixels per byte
-        ppb = 4
-; Screen memory size in bytes
-        scrsize = x_res * y_res / ppb
-; Pixel aspect ratio
-        aspect = $00CC                          ; based on 4/3 display
-; Free memory needed
-        mem_needed = 3209
-; Number of screen pages
-        pages = 1
-
-.rodata
-        mask_table:                             ; Mask table to set pixels
-                .byte   %11000000, %00110000, %00001100, %00000011
-        masks:                                  ; Color masks
-                .byte   %00000000, %01010101, %10101010, %11111111
-        bar_table:                              ; Mask table for BAR
-                .byte   %11111111, %00111111, %00001111, %00000011, %00000000
-        default_palette:
-                .byte   $00, $0E, $32, $96
-
-.code
-
-; ******************************************************************************
-
-.proc SETPALETTE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; SETPALETTE: Set the palette (in ptr1)
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        ; Copy the palette
-        ldy     #colors - 1
-loop:   lda     (ptr1),y
-        sta     palette,y
-        dey
-        bpl     loop
-
-        ; Get the color entries from the palette
-        lda     palette
-        sta     COLOR4
-        lda     palette + 1
-        sta     COLOR0
-        lda     palette + 2
-        sta     COLOR1
-        lda     palette + 3
-        sta     COLOR2
-
-        ; Done, reset the error code
-        lda     #TGI_ERR_OK
-        sta     error
-        rts
-.endproc
-
-.include "atari_tgi_common.inc"
diff --git a/libsrc/atari/tgi/atr8.s b/libsrc/atari/tgi/atr8.s
deleted file mode 100644 (file)
index 7d2a638..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-;
-; Graphics driver for the 320x192x2 (CIO mode 8, ANTIC mode F) on the Atari.
-;
-; Fatih Aygun (2009)
-;
-
-        .include        "atari.inc"
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .macpack        generic
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Constants and tables
-        ;
-        ; ----------------------------------------------------------------------
-
-; Graphics mode
-        grmode = 8
-; X resolution
-        x_res = 320
-; Y resolution
-        y_res = 192
-; Number of colors
-        colors = 2
-; Pixels per byte
-        ppb = 8
-; Screen memory size in bytes
-        scrsize = x_res * y_res / ppb
-; Pixel aspect ratio
-        aspect = $00CC                          ; based on 4/3 display
-; Free memory needed
-        mem_needed = 7147
-; Number of screen pages
-        pages = 1
-
-.rodata
-        mask_table:                             ; Mask table to set pixels
-                .byte   %10000000, %01000000, %00100000, %00010000, %00001000, %00000100, %00000010, %00000001
-        masks:                                  ; Color masks
-                .byte   %00000000, %11111111
-        bar_table:                              ; Mask table for BAR
-                .byte   %11111111, %01111111, %00111111, %00011111, %00001111, %00000111, %00000011, %00000001, %00000000
-        default_palette:
-                .byte   $00, $0E
-.code
-
-; ******************************************************************************
-
-.proc SETPALETTE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; SETPALETTE: Set the palette (in ptr1)
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        ; Copy the palette
-        ldy     #colors - 1
-loop:   lda     (ptr1),y
-        sta     palette,y
-        dey
-        bpl     loop
-
-        ; Get the color entries from the palette
-        lda     palette
-        sta     COLOR2
-        lda     palette + 1
-        sta     COLOR1
-
-        ; Done, reset the error code
-        lda     #TGI_ERR_OK
-        sta     error
-        rts
-.endproc
-
-.include "atari_tgi_common.inc"
diff --git a/libsrc/atari/tgi/atr8p2.s b/libsrc/atari/tgi/atr8p2.s
deleted file mode 100644 (file)
index f292f37..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-;
-; Graphics driver for the 320x192x2 (CIO mode 8, ANTIC mode F) on the Atari.
-;
-; Fatih Aygun (2009)
-;
-
-        .include        "atari.inc"
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .macpack        generic
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Constants and tables
-        ;
-        ; ----------------------------------------------------------------------
-
-; Graphics mode
-        grmode = 8
-; X resolution
-        x_res = 320
-; Y resolution
-        y_res = 192
-; Number of colors
-        colors = 2
-; Pixels per byte
-        ppb = 8
-; Screen memory size in bytes
-        scrsize = x_res * y_res / ppb
-; Pixel aspect ratio
-        aspect = $00CC                          ; based on 4/3 display
-; Free memory needed
-        mem_needed = 15339
-; Number of screen pages
-        pages = 2
-
-.rodata
-        mask_table:                             ; Mask table to set pixels
-                .byte   %10000000, %01000000, %00100000, %00010000, %00001000, %00000100, %00000010, %00000001
-        masks:                                  ; Color masks
-                .byte   %00000000, %11111111
-        bar_table:                              ; Mask table for BAR
-                .byte   %11111111, %01111111, %00111111, %00011111, %00001111, %00000111, %00000011, %00000001, %00000000
-        default_palette:
-                .byte   $00, $0E
-.code
-
-; ******************************************************************************
-
-.proc SETPALETTE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; SETPALETTE: Set the palette (in ptr1)
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        ; Copy the palette
-        ldy     #colors - 1
-loop:   lda     (ptr1),y
-        sta     palette,y
-        dey
-        bpl     loop
-
-        ; Get the color entries from the palette
-        lda     palette
-        sta     COLOR2
-        lda     palette + 1
-        sta     COLOR1
-
-        ; Done, reset the error code
-        lda     #TGI_ERR_OK
-        sta     error
-        rts
-.endproc
-
-.include "atari_tgi_common.inc"
diff --git a/libsrc/atari/tgi/atr9.s b/libsrc/atari/tgi/atr9.s
deleted file mode 100644 (file)
index 41c783d..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-;
-; Graphics driver for the 80x192x16b (CIO mode 9, ANTIC mode F, GTIA mode $40) on the Atari.
-;
-; Fatih Aygun (2009)
-;
-
-        .include        "atari.inc"
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .macpack        generic
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Constants and tables
-        ;
-        ; ----------------------------------------------------------------------
-
-; Graphics mode
-        grmode = 9
-; X resolution
-        x_res = 80
-; Y resolution
-        y_res = 192
-; Number of colors
-        colors = 16
-; Pixels per byte
-        ppb = 2
-; Screen memory size in bytes
-        scrsize = x_res * y_res / ppb
-; Pixel aspect ratio
-        aspect = $0330                          ; based on 4/3 display
-; Free memory needed
-        mem_needed = 7147
-; Number of screen pages
-        pages = 1
-
-.rodata
-        mask_table:                             ; Mask table to set pixels
-                .byte   %11110000, %00001111
-        masks:                                  ; Color masks
-                .byte   $00, $11, $22, $33, $44, $55, $66, $77, $88, $99, $aa, $bb, $cc, $dd, $ee, $ff
-        bar_table:                              ; Mask table for BAR
-                .byte   %11111111, %00001111, %00000000
-        default_palette:
-                .byte   $00, $0F, $01, $02, $03, $04, $05, $06, $07, $08, $09, $0A, $0B, $0C, $0D, $0E
-
-.code
-
-; ******************************************************************************
-
-.proc SETPALETTE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; SETPALETTE: Set the palette (in ptr1)
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        ; No palettes
-        lda     #TGI_ERR_INV_FUNC
-        sta     error
-        rts
-.endproc
-
-.include "atari_tgi_common.inc"
diff --git a/libsrc/atari/tgi/atr9p2.s b/libsrc/atari/tgi/atr9p2.s
deleted file mode 100644 (file)
index 750df3a..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-;
-; Graphics driver for the 80x192x16b (CIO mode 9, ANTIC mode F, GTIA mode $40) on the Atari.
-;
-; Fatih Aygun (2009)
-;
-
-        .include        "atari.inc"
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .macpack        generic
-
-; ******************************************************************************
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; Constants and tables
-        ;
-        ; ----------------------------------------------------------------------
-
-; Graphics mode
-        grmode = 9
-; X resolution
-        x_res = 80
-; Y resolution
-        y_res = 192
-; Number of colors
-        colors = 16
-; Pixels per byte
-        ppb = 2
-; Screen memory size in bytes
-        scrsize = x_res * y_res / ppb
-; Pixel aspect ratio
-        aspect = $0330                          ; based on 4/3 display
-; Free memory needed
-        mem_needed = 15339
-; Number of screen pages
-        pages = 2
-
-.rodata
-        mask_table:                             ; Mask table to set pixels
-                .byte   %11110000, %00001111
-        masks:                                  ; Color masks
-                .byte   $00, $11, $22, $33, $44, $55, $66, $77, $88, $99, $aa, $bb, $cc, $dd, $ee, $ff
-        bar_table:                              ; Mask table for BAR
-                .byte   %11111111, %00001111, %00000000
-        default_palette:
-                .byte   $00, $0F, $01, $02, $03, $04, $05, $06, $07, $08, $09, $0A, $0B, $0C, $0D, $0E
-
-.code
-
-; ******************************************************************************
-
-.proc SETPALETTE
-
-        ; ----------------------------------------------------------------------
-        ;
-        ; SETPALETTE: Set the palette (in ptr1)
-        ;
-        ; ----------------------------------------------------------------------
-
-.code
-        ; No palettes
-        lda     #TGI_ERR_INV_FUNC
-        sta     error
-        rts
-.endproc
-
-.include "atari_tgi_common.inc"
diff --git a/libsrc/atari/tgi_colors.s b/libsrc/atari/tgi_colors.s
deleted file mode 100644 (file)
index 6ef3729..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-;
-; Target-specific black & white values for use by the target-shared TGI kernel
-;
-
-        .include        "tgi-kernel.inc"
-
-        .export         tgi_color_black:zp = $00
-        .export         tgi_color_white:zp = $01
diff --git a/libsrc/atari/tgi_stat_stddrv.s b/libsrc/atari/tgi_stat_stddrv.s
deleted file mode 100644 (file)
index dc3b7cc..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Address of the static standard tgi driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void tgi_static_stddrv[];
-;
-
-        .export _tgi_static_stddrv
-        .ifdef  __ATARIXL__
-        .import _atrx8_tgi
-        .else
-        .import _atr8_tgi
-        .endif
-
-.rodata
-
-        .ifdef  __ATARIXL__
-_tgi_static_stddrv := _atrx8_tgi
-        .else
-_tgi_static_stddrv := _atr8_tgi
-        .endif
diff --git a/libsrc/atari/tgi_stddrv.s b/libsrc/atari/tgi_stddrv.s
deleted file mode 100644 (file)
index e2f68a5..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Name of the standard tgi driver
-;
-; Oliver Schmidt, 2011-05-02
-;
-; const char tgi_stddrv[];
-;
-
-        .export _tgi_stddrv
-
-.rodata
-
-_tgi_stddrv:
-        .ifdef  __ATARIXL__
-                .asciiz "atrx8.tgi"
-        .else
-                .asciiz "atr8.tgi"
-        .endif
diff --git a/libsrc/atari/toascii.s b/libsrc/atari/toascii.s
deleted file mode 100644 (file)
index 39de0d7..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; unsigned char __fastcall__ toascii (unsigned char c);
-; /* Convert a target specific character to ascii */
-;
-
-.export _toascii
-
-.proc _toascii
-
-; Clear the inverse video bit
-        and     #$7F
-
-; X must be zero on return
-        ldx     #0
-
-; Done!
-        rts
-
-.endproc
diff --git a/libsrc/atari/ucase_fn.s b/libsrc/atari/ucase_fn.s
deleted file mode 100644 (file)
index e53750e..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-;
-; Christian Groessler, Dec-2001
-;
-; ucase_fn
-; helper routine to convert a string (file name) to uppercase
-; used by open.s and remove.s
-;
-; Calling parameters:
-;       AX   - points to filename
-;       tmp2 - 0/$80 for don't/do prepend default device if no device
-;              is present in the passed string (only .ifdef DEFAULT_DEVICE)
-; Return parameters:
-;       C    - 0/1 for OK/Error (filename too long)
-;       AX   - points to uppercased version of the filename on the stack
-;       tmp3 - amount of bytes used on the stack (needed for cleanup)
-; Uses:
-;       ptr4 - scratch pointer used to remember original AX pointer
-;
-;
-
-        .include        "atari.inc"
-
-.ifdef  DEFAULT_DEVICE
-        .importzp tmp2
-        .import __defdev
-.endif
-        .importzp tmp3,ptr4,sp
-        .import subysp,addysp
-        .export ucase_fn
-
-.proc   ucase_fn
-
-        ; we make sure that the filename doesn't contain lowercase letters
-        ; we copy the filename we got onto the stack, uppercase it and use this
-        ; one to open the iocb
-        ; we're using tmp3, ptr4
-
-        ; save the original pointer
-        sta     ptr4
-        stx     ptr4+1
-
-.ifdef  DEFAULT_DEVICE
-        ; bit #0 of tmp2 is used as a flag whether device name is present in passed string (1 = present, 0 = not present)
-        ldy     #1
-        inc     tmp2            ; initialize flag: device present
-        lda     #':'
-        cmp     (ptr4),y
-        beq     hasdev
-        iny
-        cmp     (ptr4),y
-        beq     hasdev
-        dec     tmp2            ; set flag: no device in passed string
-hasdev:
-.endif
-
-        ldy     #128
-        sty     tmp3            ; save size
-        jsr     subysp          ; make room on the stack
-
-        ; copy filename to the temp. place on the stack, while uppercasing it
-        ldy     #0
-
-loop2:  lda     (ptr4),y
-        sta     (sp),y
-        beq     copy_end
-        bmi     L1              ; Not lowercase (also, invalid, should reject)
-        cmp     #'a'
-        bcc     L1              ; Not lowercase
-        and     #$DF            ; make upper case char, assume ASCII chars
-        sta     (sp),y          ; store back
-L1:
-        iny
-        bpl     loop2           ; bpl: this way we only support a max. length of 127
-
-        ; Filename too long
-        jsr     addysp          ; restore the stack
-        sec                     ; indicate error
-        rts
-
-copy_end:
-
-.ifdef  DEFAULT_DEVICE
-        lda     #1
-        bit     tmp2
-        bne     hasdev2         ; yes, don't prepend something
-        bpl     hasdev2
-
-        ldy     #128+3          ; no, prepend "D:" (or other device)
-        sty     tmp3            ; adjust stack size used
-        ldy     #3
-        jsr     subysp          ; adjust stack pointer
-        dey
-cpdev:  lda     __defdev,y
-        sta     (sp),y          ; insert device name, number and ':'
-        dey
-        bpl     cpdev
-hasdev2:
-.endif
-
-        ; leave A and X pointing to the modified filename
-        lda     sp
-        ldx     sp+1
-        clc                     ; indicate success
-        rts
-
-.endproc
diff --git a/libsrc/atari/wherex.s b/libsrc/atari/wherex.s
deleted file mode 100644 (file)
index 1b72199..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Carsten Strotmann, 30.12.2002
-;
-; unsigned char wherex (void);
-;
-
-        .export  _wherex
-        .include "atari.inc"
-
-_wherex:
-        lda     COLCRS
-        ldx     #0
-        rts
diff --git a/libsrc/atari/wherey.s b/libsrc/atari/wherey.s
deleted file mode 100644 (file)
index f391eec..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Carsten Strotmann, 30.12.2002
-;
-; unsigned char wherey (void);
-;
-
-        .export  _wherey
-        .include "atari.inc"
-
-_wherey:
-        lda     ROWCRS
-        ldx     #0
-        rts
diff --git a/libsrc/atari/write.s b/libsrc/atari/write.s
deleted file mode 100644 (file)
index 1452b2e..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-;
-; int __fastcall__ write (int fd, const void* buf, unsigned count);
-;
-        .include "atari.inc"
-        .import __rwsetup,__do_oserror,__inviocb,__oserror
-        .export _write
-_write:
-        jsr     __rwsetup       ; do common setup
-        beq     write9          ; if size 0, it's a no-op
-        cpx     #$FF            ; invalid iocb?
-        beq     _inviocb
-        lda     #PUTCHR
-        sta     ICCOM,x
-        jsr     CIOV
-        bpl     write9
-        jmp     __do_oserror    ; update errno
-
-write9:
-        lda     ICBLL,x         ; get buf len low
-        pha
-        lda     ICBLH,x         ; buf len high
-        tax
-        lda     #0
-        sta     __oserror       ; clear system dependend error code
-        pla
-        rts
-
-_inviocb:
-        jmp     __inviocb
diff --git a/libsrc/atari/xlmemchk.inc b/libsrc/atari/xlmemchk.inc
deleted file mode 100644 (file)
index f8be1c1..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-;
-; Christian Groessler, Jun-2013
-;
-; This routine is used in preparation to move the screen memory
-; in front of the program.
-;
-; It calculates the value to put into RAMTOP for a subsequent
-; "GRAPHICS 0" call, and the lowest address which will be used
-; by the screen memory afterwards.
-; 
-; inputs:
-;       __STARTADDRESS__        -       load address of the program
-; outputs:
-;       lodadr                  -       (high byte only) value to
-;                                       write into RAMTOP
-;       lowadr                  -       lowest address occupied by
-;                                       screen data
-;
-
-
-; When setting a display mode, the ROM takes the RAMTOP value
-; and subtracts the size of the screen memory from it. This will
-; become the new screen memory address.
-; From this address it subtracts the size of the display list.
-; This will become the new display list address.
-; Screen memory cannot cross 4K boundaries and a display list
-; cannot cross a 1K boundary.
-;
-; Work out a sane value for RAMTOP to prevent boundary crossing.
-; RAMTOP is only one byte, it counts in memory pages.
-;
-; The ROM doesn't do this boundary checking, since it doesn't
-; expect RAMTOP to have (rather) arbitrary values. For a
-; "GRAPHICS 0" call and RAMTOP representing the possible physically
-; available memory, boundary crossing cannot happen.
-
-
-SCRBUFSZ =      (40 * 24)               ; size of mode 0 screen buffer
-DLSZ    =       32                      ; size of mode 0 display list
-
-
-scrmemtst:
-
-; subtract screen memory size from our load address
-
-        lda     lodadr
-        sec
-        sbc     #<SCRBUFSZ
-        sta     tstadr
-        lda     lodadr+1
-        sbc     #>SCRBUFSZ
-        sta     tstadr+1
-
-; check if a 4K boundary is crossed
-
-        lda     lodadr+1
-        and     #$f0
-        sta     tmp
-        lda     tstadr+1
-        and     #$f0
-        cmp     tmp
-        beq     scrmemok
-
-; if lodadr is at an exact 4K boundary, it's still ok
-
-        lda     lodadr+1
-        and     #$0f
-        beq     scrmemok
-
-; 4K boundary will be crossed, use this 4K boundary address as lodadr
-
-al4k:   lda     lodadr+1
-        and     #$f0
-        sta     lodadr+1
-        bne     scrmemtst
-; not reached
-
-.ifdef DEBUG
-.byte "XLMEMCHK:>"
-.endif
-lodadr: .word   __STARTADDRESS__ & $FF00                ; our program's load address, rounded down to page boundary
-tstadr: .res    2
-lowadr: .res    2
-tmp:    .res    1
-
-
-; subtract display list size from calculated screen address
-
-scrmemok:
-        lda     tstadr
-        sec
-        sbc     #<DLSZ
-        sta     lowadr
-        lda     tstadr+1
-        sbc     #>DLSZ
-        sta     lowadr+1
-
-.if 0   ; this cannot happen
-; check if a 1K boundary is crossed
-
-        lda     tstadr+1
-        and     #$fc
-        sta     tmp
-        lda     lowadr+1
-        and     #$fc
-        cmp     tmp
-        bne     al4k            ; 1K boundary will be crossed, decrease lodadr
-.endif
-
-; address of display list is ok
-; decrease lowadr by two
-
-        lda     lowadr
-        sec
-        sbc     #2
-        sta     lowadr
-        bcs     dec_cont
-        dec     lowadr+1
-dec_cont:
diff --git a/libsrc/atari5200/cartentry.s b/libsrc/atari5200/cartentry.s
deleted file mode 100644 (file)
index 431843a..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-; Cartridge entry point
-;
-; Christian Groessler, 01-Mar-2014
-
-.export         __CART_ENTRY__: absolute = 1
-.import         __CARTSIZE__, start
-.forceimport    __CART_YEAR__, __CART_NAME__
-
-.segment        "CARTENTRY"
-
-                .word   start       ; entry point
-
-.assert         (__CARTSIZE__ = $4000 || __CARTSIZE__ = $8000), error, "Cartridge size must either be $4000 or $8000"
diff --git a/libsrc/atari5200/cartname.s b/libsrc/atari5200/cartname.s
deleted file mode 100644 (file)
index c6a7018..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-; default cartridge name
-;
-; Christian Groessler, 01-Mar-2014
-
-.include        "atari.mac"
-
-.export         __CART_NAME__: absolute = 1
-
-.segment        "CARTNAME"
-
-                scrcode "   cc"
-                .byte   '6' + 32, '5' + 32      ; use playfield 1
-                scrcode " compiled"
diff --git a/libsrc/atari5200/cartyear.s b/libsrc/atari5200/cartyear.s
deleted file mode 100644 (file)
index 4efb24f..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-; Cartridge copyright year
-;
-; Christian Groessler, 01-Mar-2014
-
-.export         __CART_YEAR__: absolute = 1
-
-.segment        "CARTYEAR"
-
-                .byte   '9' + 32,'8' + 32       ; "98", but using playfield 1
diff --git a/libsrc/atari5200/cclear.s b/libsrc/atari5200/cclear.s
deleted file mode 100644 (file)
index 4bdc8dd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.include "../atari/cclear.s"
diff --git a/libsrc/atari5200/chline.s b/libsrc/atari5200/chline.s
deleted file mode 100644 (file)
index d5872f1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.include "../atari/chline.s"
diff --git a/libsrc/atari5200/clock.s b/libsrc/atari5200/clock.s
deleted file mode 100644 (file)
index f2ef85b..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; from Atari computer version by Christian Groessler, 2014
-;
-; clock_t clock (void);
-; unsigned _clocks_per_sec (void);
-;
-
-        .export         _clock
-        .importzp       sreg
-
-        .include        "atari5200.inc"
-
-
-.proc   _clock
-
-        ldx     #5              ; Synchronize with Antic, so the interrupt won't change RTCLOK
-        stx     WSYNC           ; while we're reading it. The synchronization is done same as
-@L1:    dex                     ; in SETVBLV function in Atari OS.
-        bne     @L1
-        stx     sreg+1          ; Byte 3 is always zero
-        stx     sreg            ; Byte 2 is always zero, too
-        lda     RTCLOK+1
-        ldx     RTCLOK
-        rts
-
-.endproc
diff --git a/libsrc/atari5200/clrscr.s b/libsrc/atari5200/clrscr.s
deleted file mode 100644 (file)
index 041f34a..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-;
-; Christian Groessler, May-2014
-;
-; void clrscr (void);
-;
-
-        .export         _clrscr
-        .include        "atari5200.inc"
-        .importzp       ptr1
-
-SCRSIZE =       480             ; 20x24: size of default conio atari5200 screen
-
-_clrscr:lda     SAVMSC          ; screen memory
-        sta     ptr1
-        lda     SAVMSC+1
-        clc
-        adc     #>(SCRSIZE-1)
-        sta     ptr1+1
-        lda     #0              ; screen code of space char
-        ldy     #<(SCRSIZE-1)
-        ldx     #>(SCRSIZE-1)
-_clr1:  sta     (ptr1),y
-        dey
-        bne     _clr1
-        sta     (ptr1),y
-        dex
-        bmi     done
-        dec     ptr1+1
-        dey
-        jmp     _clr1
-
-done:   sta     COLCRS_5200
-        sta     ROWCRS_5200
-        rts
diff --git a/libsrc/atari5200/conioscreen.s b/libsrc/atari5200/conioscreen.s
deleted file mode 100644 (file)
index 412dd58..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-; setup default CONIO screen (20x24, Antic mode 6, BASIC mode 1)
-;
-; 28-May-2014, Christian Groessler <chris@groessler.org>
-
-                .include "atari5200.inc"
-
-SCREEN_BUF_SIZE =       20 * 24
-SCREEN_BUF      =       $4000 - SCREEN_BUF_SIZE
-
-                .code
-                .export screen_setup_20x24
-
-screen_setup_20x24:
-
-                ; initialize SAVMSC
-                lda     #<SCREEN_BUF
-                sta     SAVMSC
-                lda     #>SCREEN_BUF
-                sta     SAVMSC+1
-
-                ; initialize cursor position
-                lda     #0
-                sta     COLCRS_5200
-                sta     ROWCRS_5200
-
-                ; clear screen buffer
-                ldy     #<(SCREEN_BUF_SIZE-1)
-                ldx     #>(SCREEN_BUF_SIZE-1)
-clrscr:         sta     (SAVMSC),y
-                dey
-                cpy     #$FF
-                bne     clrscr
-                dex
-                cpx     #$FF
-                bne     clrscr
-
-                ; set default colors
-
-                lda     #40
-                sta     COLOR0
-                lda     #202
-                sta     COLOR1
-                lda     #148
-                sta     COLOR2
-                lda     #70
-                sta     COLOR3
-                lda     #0
-                sta     COLOR4
-
-                ; set display list
-
-                lda     #<dlist
-                sta     SDLSTL
-                lda     #>dlist
-                sta     SDLSTH
-
-                rts
-
-
-                .segment "RODATA"
-
-; display list for 20x24 text mode
-
-dlist:          .repeat 3
-                .byte   DL_BLK8
-                .endrepeat
-                
-                .byte   DL_CHR20x8x2 | DL_LMS
-                .word   SCREEN_BUF
-
-                .repeat 23
-                .byte   DL_CHR20x8x2
-                .endrepeat
-
-                .byte  DL_JVB
-                .word   dlist
-
-; end of display list
-
-.assert ((* >> 10) = (dlist >> 10)), error, "Display list crosses 1K boundary"
-
-
-                .end
diff --git a/libsrc/atari5200/cputc.s b/libsrc/atari5200/cputc.s
deleted file mode 100644 (file)
index 4bee0fb..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-;
-; adapted from Atari version
-; Christian Groessler, 2014
-;
-; void cputcxy (unsigned char x, unsigned char y, char c);
-; void cputc (char c);
-;
-
-        .include        "atari5200.inc"
-
-        .export         _cputcxy, _cputc
-        .export         plot, cputdirect, putchar
-        .import         popa, _gotoxy, mul20
-        .importzp       ptr4
-        .import         setcursor
-
-        .constructor    screen_setup, 26
-        .import         screen_setup_20x24
-screen_setup    = screen_setup_20x24
-
-
-_cputcxy:
-        pha                     ; Save C
-        jsr     popa            ; Get Y
-        jsr     _gotoxy         ; Set cursor, drop x
-        pla                     ; Restore C
-
-_cputc:
-        cmp     #$0D            ; CR
-        bne     L4
-        lda     #0
-        sta     COLCRS_5200
-        beq     plot            ; return
-
-L4:     cmp     #$0A            ; LF
-        beq     newline
-        cmp     #ATEOL          ; Atari-EOL?
-        beq     newline
-
-        tay
-        rol     a
-        rol     a
-        rol     a
-        rol     a
-        and     #3
-        tax
-        tya
-        and     #$9f
-        ora     ataint,x
-
-cputdirect:                     ; accepts screen code
-        jsr     putchar
-
-; advance cursor
-        inc     COLCRS_5200
-        lda     COLCRS_5200
-        cmp     #20
-        bcc     plot
-        lda     #0
-        sta     COLCRS_5200
-
-        .export newline
-newline:
-        inc     ROWCRS_5200
-        lda     ROWCRS_5200
-        cmp     #24
-        bne     plot
-        lda     #0
-        sta     ROWCRS_5200
-plot:   jsr     setcursor
-        ldy     COLCRS_5200
-        ldx     ROWCRS_5200
-        rts
-
-putchar:
-        pha                     ; save char
-
-        lda     ROWCRS_5200
-        jsr     mul20           ; destroys tmp4
-        clc
-        adc     SAVMSC          ; add start of screen memory
-        sta     ptr4
-        txa
-        adc     SAVMSC+1
-        sta     ptr4+1
-        pla                     ; get char again
-
-        ldy     COLCRS_5200
-        sta     (ptr4),y
-        jmp     setcursor
-
-        .rodata
-ataint: .byte   64,0,32,96
-
diff --git a/libsrc/atari5200/crt0.s b/libsrc/atari5200/crt0.s
deleted file mode 100644 (file)
index 7073bb2..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-;
-; Startup code for cc65 (Atari5200 version)
-;
-; Christian Groessler (chris@groessler.org), 2014
-;
-
-        .export         _exit, start
-        .export         __STARTUP__ : absolute = 1      ; Mark as startup
-        .import         __RAM_START__, __RAM_SIZE__
-        .import         __RESERVED_MEMORY__
-
-        .import         initlib, donelib, callmain
-        .import         zerobss, copydata
-
-        .include        "zeropage.inc"
-        .include        "atari5200.inc"
-
-start:
-
-; Clear the BSS data.
-
-        jsr     zerobss
-
-; Initialize the data.
-        jsr     copydata
-
-; Set up the stack.
-
-        lda     #<(__RAM_START__ + __RAM_SIZE__ - __RESERVED_MEMORY__)
-        sta     sp
-        lda     #>(__RAM_START__ + __RAM_SIZE__ - __RESERVED_MEMORY__)
-        sta     sp+1            ; Set argument stack ptr
-
-; Call the module constructors.
-
-        jsr     initlib
-
-; Push the command-line arguments; and, call main().
-
-        jsr     callmain
-
-; Call the module destructors. This is also the exit() entry.
-
-_exit:  jsr     donelib         ; Run module destructors
-
-; A 5200 program isn't supposed to exit.
-
-halt:   jmp halt
diff --git a/libsrc/atari5200/ctype.s b/libsrc/atari5200/ctype.s
deleted file mode 100644 (file)
index 432f462..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-; Character specification table.
-;
-; same as for "atari" target
-
-.include "../atari/ctype.s"
diff --git a/libsrc/atari5200/cvline.s b/libsrc/atari5200/cvline.s
deleted file mode 100644 (file)
index d987bcb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.include "../atari/cvline.s"
diff --git a/libsrc/atari5200/get_tv.s b/libsrc/atari5200/get_tv.s
deleted file mode 100644 (file)
index 99cac3c..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Christian Groessler, 2014
-;
-; unsigned char get_tv (void);
-; /* Return the video mode the machine is using */
-;
-
-        .include        "get_tv.inc"
-
-
-;--------------------------------------------------------------------------
-; _get_tv
-
-.proc   _get_tv
-
-        lda     #<TV::NTSC
-        ldx     #>TV::NTSC
-        rts
-
-.endproc
diff --git a/libsrc/atari5200/gotox.s b/libsrc/atari5200/gotox.s
deleted file mode 100644 (file)
index 99f7cfd..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Christian Groessler, 13-Mar-2014
-;
-; void gotox (unsigned char x);
-;
-
-        .include        "atari5200.inc"
-        .export         _gotox
-        .import         setcursor
-
-_gotox:
-        sta     COLCRS_5200     ; Set X
-        jmp     setcursor
diff --git a/libsrc/atari5200/gotoxy.s b/libsrc/atari5200/gotoxy.s
deleted file mode 100644 (file)
index a4b7c61..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Christian Groessler, 13-Mar-2014
-;
-; void gotoxy (unsigned char x, unsigned char y);
-;
-
-        .include "atari5200.inc"
-
-        .export         _gotoxy
-        .import         popa
-        .import         setcursor
-
-_gotoxy:                        ; Set the cursor position
-        sta     ROWCRS_5200     ; Set Y
-        jsr     popa            ; Get X
-        sta     COLCRS_5200     ; Set X
-        jmp     setcursor
diff --git a/libsrc/atari5200/gotoy.s b/libsrc/atari5200/gotoy.s
deleted file mode 100644 (file)
index fcdd05e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Christian Groessler, 13-Mar-2014
-;
-; void gotoy (unsigned char y);
-;
-
-        .include        "atari5200.inc"
-        .export         _gotoy
-        .import         setcursor
-
-_gotoy:
-        sta     ROWCRS_5200     ; Set Y
-        jmp     setcursor
diff --git a/libsrc/atari5200/irq.s b/libsrc/atari5200/irq.s
deleted file mode 100644 (file)
index 720113f..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-;
-; IRQ handling (ATARI 5200 version)
-;
-
-        .export         initirq, doneirq
-        .import         callirq
-
-        .include        "atari5200.inc"
-
-; ------------------------------------------------------------------------
-
-.segment        "INIT"
-
-initirq:
-        lda     VVBLKD
-        ldx     VVBLKD+1
-        sta     IRQInd+1
-        stx     IRQInd+2
-        ldy     #<IRQStub
-        ldx     #>IRQStub
-        jmp     SETVBV
-
-; ------------------------------------------------------------------------
-
-.code
-
-doneirq:
-        ldy     IRQInd+1
-        ldx     IRQInd+2
-        ;jmp     SETVBV
-        ; fall thru
-
-; ------------------------------------------------------------------------
-; Set deferred vertical blank interrupt
-; logic copied from Atari computer ROM
-
-SETVBV: txa
-        ldx     #5
-        sta     WSYNC                   ; waste 20 CPU cycles
-@1:     dex                             ; to allow VBLANK to happen
-        bne     @1                      ; if this is line "7C"
-        sta     VVBLKD+1
-        sty     VVBLKD
-        rts
-
-; ------------------------------------------------------------------------
-
-.segment        "LOWCODE"
-
-IRQStub:
-        cld                             ; Just to be sure
-        jsr     callirq                 ; Call the functions
-        jmp     IRQInd                  ; Jump to the saved IRQ vector
-
-; ------------------------------------------------------------------------
-
-.data
-
-IRQInd: jmp     $0000
diff --git a/libsrc/atari5200/joy/atr5200std.s b/libsrc/atari5200/joy/atr5200std.s
deleted file mode 100644 (file)
index 3483cc1..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-;
-; Standard joystick driver for the Atari 5200.
-;
-; Christian Groessler, 2014-05-28
-;
-
-        .include        "zeropage.inc"
-
-        .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-        .include        "atari5200.inc"
-
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _atr5200std_joy
-
-; Driver signature
-
-        .byte   $6A, $6F, $79           ; "joy"
-        .byte   JOY_API_VERSION         ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte   $01             ; JOY_UP
-        .byte   $02             ; JOY_DOWN
-        .byte   $04             ; JOY_LEFT
-        .byte   $08             ; JOY_RIGHT
-        .byte   $10             ; JOY_FIRE
-        .byte   $20             ; JOY_FIRE2
-        .byte   $00             ; Future expansion
-        .byte   $00             ; Future expansion
-
-; Jump table.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READJOY
-        .addr   0               ; IRQ entry not used
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #JOY_ERR_OK
-        ldx     #0
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:
-        lda     $FD32           ; check ROM version
-        cmp     #$E8
-        bne     @2port
-        lda     #4
-        .byte   $2C             ; bit opcode, eats the next 2 bytes
-@2port: lda     #2
-        ldx     #0
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
-
-CENTER  =       228 / 2
-SENSIVITY       = 16
-
-READJOY:
-        and     #3              ; put joystick number in range, just in case
-        tay
-        asl     a
-        tax                     ; Joystick number * 2 (0-6) into X, index into ZP shadow registers
-
-        lda     #0              ; Initialize return value
-        cmp     TRIG0,y
-        bne     @notrg
-        lda     #$10            ; JOY_FIRE
-
-; Read joystick
-
-@notrg: ldy     PADDL0,x        ; get horizontal position
-        cpy     #CENTER-SENSIVITY
-        bcs     @chkleft
-
-        ora     #4              ; JOY_LEFT
-        bne     @updown
-
-@chkleft:
-        cpy     #CENTER+SENSIVITY
-        bcc     @updown
-
-        ora     #8              ; JOY_RIGHT
-
-@updown:ldy     PADDL0+1,x      ; get vertical position
-        cpy     #CENTER-SENSIVITY
-        bcs     @chkdown
-
-        ora     #1              ; JOY_UP
-        bne     @done
-
-@chkdown:
-        cpy     #CENTER+SENSIVITY
-        bcc     @done
-
-        ora     #2              ; JOY_DOWN
-
-@done:  rts
diff --git a/libsrc/atari5200/joy_stat_stddrv.s b/libsrc/atari5200/joy_stat_stddrv.s
deleted file mode 100644 (file)
index 9924eab..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Address of the static standard joystick driver
-;
-; Christian Groessler, 2014-05-12
-;
-; const void joy_static_stddrv[];
-;
-
-        .export _joy_static_stddrv
-        .import _atr5200std_joy
-
-_joy_static_stddrv := _atr5200std_joy
diff --git a/libsrc/atari5200/libref.s b/libsrc/atari5200/libref.s
deleted file mode 100644 (file)
index 8a5fbe4..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-;
-; Christian Groessler, 2014-05-12
-;
-
-        .export         joy_libref
-        .import         _exit
-
-joy_libref      := _exit
diff --git a/libsrc/atari5200/mul20.s b/libsrc/atari5200/mul20.s
deleted file mode 100644 (file)
index fc67b34..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-;
-; Christian Groessler, April 2014
-;
-; mul20
-; multiplies A by 20 and returns result in AX
-; uses tmp4
-
-        .importzp       tmp4
-        .export         mul20,loc_tmp
-
-.proc   mul20
-
-        ldx     #0
-        stx     tmp4
-        sta     loc_tmp
-        asl     a
-        rol     tmp4
-        asl     a
-        rol     tmp4            ; val * 4
-        adc     loc_tmp
-        bcc     L1
-        inc     tmp4            ; val * 5
-L1:     asl     a
-        rol     tmp4            ; val * 10
-        asl     a
-        rol     tmp4            ; val * 20
-        ldx     tmp4
-        rts
-
-.endproc
-
-        .bss
-loc_tmp:.res    1
diff --git a/libsrc/atari5200/randomize.s b/libsrc/atari5200/randomize.s
deleted file mode 100644 (file)
index ef46282..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Christian Groessler, 01-Mar-2014
-;
-; void _randomize (void);
-; /* Initialize the random number generator */
-;
-
-        .export         __randomize
-        .import         _srand
-
-        .include        "atari5200.inc"
-
-__randomize:              
-        ldx     VCOUNT          ; Use vertical line counter as high byte
-        lda     RTCLOK+1        ; Use clock as low byte
-        jmp     _srand          ; Initialize generator
-
diff --git a/libsrc/atari5200/setcursor.s b/libsrc/atari5200/setcursor.s
deleted file mode 100644 (file)
index 4cf8eba..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-; Dummy version, there is no visible cursor in the default CONIO screen
-;
-; 28-May-2014, Christian Groessler <chris@groessler.org>
-
-        .export setcursor
-
-.proc   setcursor
-
-        rts
-
-.endproc
diff --git a/libsrc/atari5200/sysuname.s b/libsrc/atari5200/sysuname.s
deleted file mode 100644 (file)
index 7fd9281..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; unsigned char __fastcall__ _sysuname (struct utsname* buf);
-;
-
-        .export         __sysuname, utsdata
-
-        .import         utscopy
-
-        __sysuname = utscopy
-
-;--------------------------------------------------------------------------
-; Data. We define a fixed utsname struct here and just copy it.
-
-.rodata
-
-utsdata:
-        ; sysname
-        .asciiz         "cc65"
-
-        ; nodename
-        .asciiz         ""
-
-        ; release
-        .byte           ((.VERSION >> 8) & $0F) + '0'
-        .byte           '.'
-        .byte           ((.VERSION >> 4) & $0F) + '0'
-        .byte           $00
-
-        ; version
-        .byte           (.VERSION & $0F) + '0'
-        .byte           $00
-
-        ; machine
-        .asciiz         "Atari5200"
-
-
-
diff --git a/libsrc/atari5200/y2k.inc b/libsrc/atari5200/y2k.inc
deleted file mode 100644 (file)
index a44d027..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-;-----------------------------------------------------------
-; Y2K FIX by Alan Davis, Dennis Debro, and Ronen Habot
-;-----------------------------------------------------------
-Y2K     LDY     #$00            ; Copy BIOS opening screen to RAM
-        LDA     #$FD
-        STA     TEMPH
-        LDA     #$58            ; Assume 2 port system
-        LDX     $FD32
-        CPX     #$E8            ; Is this a 4 port?
-        BNE     Y2K0            ; Jump if not
-        LDA     #$42            ; Yes, 4 port system
-Y2K0    STA     TEMPL           
-Y2K1    LDA     (TEMPL),Y       
-        STA     $0600,Y
-        INY     
-        BNE     Y2K1
-        LDY     #$50
-        INC     TEMPH
-Y2K2    LDA     (TEMPL),Y       
-        STA     $0700,Y
-        DEY     
-        BPL     Y2K2
-        LDA     #$D4            ; Point to copyright string
-        STA     $0724
-        LDA     #$BF
-        STA     $0725
-        LDX     #$0B            ; Store NOP's @ end
-        LDA     #$EA
-Y2K3    STA     $0732,X         
-        DEX     
-        BPL     Y2K3
-        LDA     #$60            ; Store RTS opcode @ end
-        STA     $0750
-        JSR     $0600           ; Show title screen
-        LDY     #$00            ; Clear RAM from $0600-$3FFF
-        STY     $80
-        LDA     #$06
-        STA     $81
-        JSR     CLRRAM
-        RTS     
-
diff --git a/libsrc/atmos/_scrsize.s b/libsrc/atmos/_scrsize.s
deleted file mode 100644 (file)
index 7a7af33..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; 2003-04-13, Ullrich von Bassewitz
-; 2013-07-16, Greg King
-;
-; Screen size variables
-;
-
-        .export         screensize
-        .include        "atmos.inc"
-
-.proc   screensize
-
-        ldx     #SCREEN_XSIZE
-        ldy     #SCREEN_YSIZE
-        rts
-
-.endproc
-
-
diff --git a/libsrc/atmos/atmos.s b/libsrc/atmos/atmos.s
deleted file mode 100644 (file)
index 6b5a4a4..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Expose include-file symbol names to C code.
-;
-
-        .export         _atmos_ping, _atmos_shoot, _atmos_explode
-        .export         _atmos_zap, _atmos_tick, _atmos_tock
-
-        .include        "atmos.inc"
-
-_atmos_ping     := PING
-_atmos_shoot    := SHOOT
-_atmos_explode  := EXPLODE
-_atmos_zap      := ZAP
-_atmos_tick     := TICK
-_atmos_tock     := TOCK
diff --git a/libsrc/atmos/atmos_load.s b/libsrc/atmos/atmos_load.s
deleted file mode 100644 (file)
index b5bec32..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-; Based on code by Twilighte.
-; 2012-05-06, Stefan Haubenthal
-; 2013-07-22, Greg King
-;
-; void __fastcall__ atmos_load(const char* name);
-
-        .export         _atmos_load
-        .import         store_filename
-
-        .include        "atmos.inc"
-
-
-.proc   _atmos_load
-
-        sei
-        jsr     store_filename
-        ldx     #$00
-        stx     AUTORUN         ; don't try to run the file
-        stx     LANGFLAG        ; BASIC
-        stx     JOINFLAG        ; don't join it to another BASIC program
-        stx     VERIFYFLAG      ; load the file
-        jsr     cload_bit
-        cli
-        rts
-cload_bit:
-        pha
-        jmp     $e874
-
-.endproc
diff --git a/libsrc/atmos/atmos_save.s b/libsrc/atmos/atmos_save.s
deleted file mode 100644 (file)
index 3d221f6..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-; Based on code by Twilighte.
-; 2012-05-06, Stefan Haubenthal
-; 2013-07-22, Greg King
-;
-; void __fastcall__ atmos_save(const char* name, const void* start, const void* end);
-
-        .export         _atmos_save
-        .import         popax, store_filename
-
-        .include        "atmos.inc"
-
-
-.proc   _atmos_save
-
-        sei
-        sta     FILEEND
-        stx     FILEEND+1
-        jsr     popax
-        sta     FILESTART
-        stx     FILESTART+1
-        jsr     popax
-        jsr     store_filename
-        lda     #00
-        sta     AUTORUN
-        jsr     csave_bit
-        cli
-        rts
-csave_bit:
-        php
-        jmp     $e92c
-
-.endproc
diff --git a/libsrc/atmos/bashdr.s b/libsrc/atmos/bashdr.s
deleted file mode 100644 (file)
index e09bc9f..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; 2010-11-14, Ullrich von Bassewitz
-; 2014-09-06, Greg King
-;
-; This module supplies a small BASIC stub program that uses CALL
-; to jump to the machine-language code that follows it.
-;
-
-        ; The following symbol is used by the linker config. file
-        ; to force this module to be included into the output file.
-        .export __BASHDR__:abs = 1
-
-
-.segment        "BASHDR"
-
-        .addr   Next
-        .word   .version        ; Line number
-        .byte   $BF,'#'         ; CALL token, mark number as hexadecimal
-        .byte   <(Start >> 8      ) + '0' + (Start >> 8       > $09) * $07
-        .byte   <(Start >> 4 & $0F) + '0' + (Start >> 4 & $0F > $09) * $07
-        .byte   <(Start      & $0F) + '0' + (Start      & $0F > $09) * $07
-        .byte   $00             ; End of BASIC line
-Next:   .addr   $0000           ; BASIC program end marker
-Start:
diff --git a/libsrc/atmos/capslock.s b/libsrc/atmos/capslock.s
deleted file mode 100644 (file)
index 0ed6e70..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-;
-; When Oric computers are in BASIC's command mode, the keyboard is in CAPS lock
-; mode (because Oric BASIC keywords must be typed in upper-case).  This
-; constructor disables that mode, so that text will be typed as lower-case
-; (which is the default on other cc65 platforms).
-; This module is linked by the conio and POSIX input functions.
-;
-; 2014-09-04, Greg King
-;
-
-        .constructor    disable_caps
-        .destructor     restore_caps
-
-        .include        "atmos.inc"
-
-
-;--------------------------------------------------------------------------
-; Put this constructor into a segment that can be re-used by programs.
-;
-.segment        "INIT"
-
-; Turn the capitals lock off.
-
-disable_caps:
-        lda     CAPSLOCK
-        sta     capsave
-        lda     #$7F
-        sta     CAPSLOCK
-        rts
-
-
-;--------------------------------------------------------------------------
-
-.code
-
-; Restore the old capitals-lock state.
-
-restore_caps:
-        lda     capsave
-        sta     CAPSLOCK
-        rts
-
-
-;--------------------------------------------------------------------------
-
-.bss
-
-capsave:
-        .res    1
diff --git a/libsrc/atmos/cclear.s b/libsrc/atmos/cclear.s
deleted file mode 100644 (file)
index 9d356a8..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-04-13
-;
-; void cclearxy (unsigned char x, unsigned char y, unsigned char length);
-; void cclear (unsigned char length);
-;
-
-        .export         _cclearxy, _cclear
-        .import         setscrptr  
-        .import         rvs
-        .import         popax
-        .importzp       ptr2
-
-        .include        "atmos.inc"
-
-
-_cclearxy:
-        pha                     ; Save the length
-        jsr     popax           ; Get X and Y
-        sta     CURS_Y          ; Store Y
-        stx     CURS_X          ; Store X
-        pla                     ; Restore the length and run into _cclear
-
-_cclear:
-        tax                     ; Is the length zero?
-        beq     @L9             ; Jump if done
-        jsr     setscrptr       ; Set ptr2 to screen, won't use X
-        lda     #' '       
-        ora     rvs
-@L1:    sta     (ptr2),y        ; Write one char
-        iny                     ; Next char
-        bne     @L2
-        inc     ptr2+1          ; Bump high byte of screen pointer
-@L2:    dex
-        bne     @L1
-@L9:    rts
-
-
diff --git a/libsrc/atmos/cgetc.s b/libsrc/atmos/cgetc.s
deleted file mode 100644 (file)
index e4ea15a..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-;
-; 2003-04-13, Ullrich von Bassewitz
-; 2014-09-04, Greg King
-;
-; char cgetc (void);
-;
-
-        .export         _cgetc
-        .constructor    initcgetc
-
-        .import         cursor
-        .forceimport    disable_caps
-
-        .include        "atmos.inc"
-
-
-; ------------------------------------------------------------------------
-;
-
-.proc   _cgetc
-
-        lda     KEYBUF          ; Do we have a character?
-        bmi     @L2             ; Yes: Get it
-
-; No character, enable cursor and wait
-
-        lda     cursor          ; Should cursor be off?
-        beq     @L1             ; Skip if so
-        lsr     STATUS
-        sec                     ; Cursor ON
-        rol     STATUS
-@L1:    lda     KEYBUF
-        bpl     @L1
-
-; If the cursor was enabled, disable it now
-
-        ldx     cursor
-        beq     @L2
-        dec     STATUS          ; Clear bit zero
-
-; We have the character, clear the "available" flag
-
-@L2:    and     #$7F            ; Mask out avail flag
-        sta     KEYBUF
-        ldx     #>$0000
-        ldy     MODEKEY
-        cpy     #FUNCTKEY
-        bne     @L3
-        ora     #$80            ; FUNCT-key pressed
-
-; Done
-
-@L3:    rts
-
-.endproc
-
-; ------------------------------------------------------------------------
-; Switch the cursor off. Code goes into the INIT segment
-; which may be reused after it is run.
-
-.segment        "INIT"
-
-initcgetc:
-        lsr     STATUS
-        asl     STATUS          ; Clear bit zero
-        rts
diff --git a/libsrc/atmos/chline.s b/libsrc/atmos/chline.s
deleted file mode 100644 (file)
index 61d0f39..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void chlinexy (unsigned char x, unsigned char y, unsigned char length);
-; void chline (unsigned char length);
-;
-
-        .export         _chlinexy, _chline
-        .import         setscrptr
-        .import         rvs
-        .import         popax
-        .importzp       ptr2
-
-        .include        "atmos.inc"
-
-
-_chlinexy:
-        pha                     ; Save the length
-        jsr     popax           ; Get X and Y
-        sta     CURS_Y          ; Store Y
-        stx     CURS_X          ; Store X
-        pla                     ; Restore the length and run into _chline
-
-_chline:
-        tax                     ; Is the length zero?
-        beq     @L9             ; Jump if done
-        jsr     setscrptr       ; Set ptr2 to screen, won't use X
-        txa                     ; Length into A
-        clc
-        adc     CURS_X
-        sta     CURS_X          ; Correct X position by length
-        lda     #'-'            ; Horizontal line screen code
-        ora     rvs
-@L1:    sta     (ptr2),y        ; Write one char
-        iny                     ; Next char
-        bne     @L2
-        inc     ptr2+1          ; Bump high byte of screen pointer
-@L2:    dex
-        bne     @L1
-@L9:    rts
-
diff --git a/libsrc/atmos/clock.s b/libsrc/atmos/clock.s
deleted file mode 100644 (file)
index 4440f55..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-04-13
-;
-; clock_t clock (void);
-;
-
-        .export         _clock
-        .import         negax
-        .importzp       sreg
-
-        .include        "atmos.inc"
-
-
-.proc   _clock
-
-; Clear the timer high 16 bits
-
-        ldy     #$00
-        sty     sreg
-        sty     sreg+1
-
-; Read the timer
-
-        sei                     ; Disable interrupts
-        lda     TIMER3
-        ldx     TIMER3+1
-        cli                     ; Reenable interrupts
-
-
-; Since the timer is counting downwards, return the negated value
-
-        jmp     negax
-
-.endproc
-
-
diff --git a/libsrc/atmos/clrscr.s b/libsrc/atmos/clrscr.s
deleted file mode 100644 (file)
index 2230d6e..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-;
-; 2003-04-13, Ullrich von Bassewitz
-; 2013-07-16, Greg King
-;
-
-        .export         _clrscr
-        .importzp       ptr2
-
-        .include        "atmos.inc"
-
-; ------------------------------------------------------------------------
-; void clrscr (void);
-
-.proc   _clrscr
-
-; Set the cursor to top left cursor position
-
-        ldy     #$00
-        sty     CURS_X
-        sty     CURS_Y
-
-; Set ptr2 to the screen position (left upper border)
-
-        lda     #<SCREEN
-        sta     ptr2
-        lda     #>SCREEN
-        sta     ptr2+1
-
-; Clear full pages. Y is still zero
-
-        ldx     #>(SCREEN_YSIZE * SCREEN_XSIZE)
-        lda     #' '
-@L1:    sta     (ptr2),y
-        iny                     ; Bump low byte of address
-        bne     @L1
-        inc     ptr2+1          ; Bump high byte of address
-        dex
-        bne     @L1
-
-; Clear the remaining page
-
-@L2:    sta     (ptr2),y
-        iny
-        cpy     #<(SCREEN_YSIZE * SCREEN_XSIZE)
-        bne     @L2
-        rts
-
-.endproc
diff --git a/libsrc/atmos/color.s b/libsrc/atmos/color.s
deleted file mode 100644 (file)
index 8c9dfba..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-04-13
-;
-; unsigned char __fastcall__ textcolor (unsigned char color);
-; unsigned char __fastcall__ bgcolor (unsigned char color);
-; unsigned char __fastcall__ bordercolor (unsigned char color);
-;
-
-        .export         _textcolor, _bgcolor, _bordercolor
-        .import         return0, return1
-
-_textcolor      = return1
-
-_bgcolor        = return0
-
-_bordercolor    = return0
-
-
diff --git a/libsrc/atmos/cputc.s b/libsrc/atmos/cputc.s
deleted file mode 100644 (file)
index a0ef14b..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-;
-; 2003-04-13, Ullrich von Bassewitz
-; 2013-07-16, Greg King
-;
-; void cputcxy (unsigned char x, unsigned char y, char c);
-; void cputc (char c);
-;
-
-        .export         _cputcxy, _cputc
-        .export         setscrptr, putchar
-        .import         rvs
-        .import         popax
-        .importzp       ptr2
-
-        .include        "atmos.inc"
-
-
-_cputcxy:
-        pha                     ; Save C
-        jsr     popax           ; Get X and Y
-        sta     CURS_Y          ; Store Y
-        stx     CURS_X          ; Store X
-        pla                     ; Restore C
-
-; Plot a character - also used as internal function
-
-_cputc: cmp     #$0D            ; CR?
-        bne     L1
-        lda     #0
-        sta     CURS_X          ; Carriage return
-        rts
-
-L1:     cmp     #$0A            ; LF?
-        bne     output
-        inc     CURS_Y          ; Newline
-        rts
-
-; Output the character, then advance the cursor position
-
-output:
-        jsr     putchar
-
-advance:
-        iny
-        cpy     #SCREEN_XSIZE
-        bne     L3
-        inc     CURS_Y          ; new line
-        ldy     #0              ; + cr
-L3:     sty     CURS_X
-        rts
-
-; ------------------------------------------------------------------------
-; Set ptr2 to the screen, load the X offset into Y
-
-.code
-.proc   setscrptr
-
-        ldy     CURS_Y          ; Get line number into Y
-        lda     ScrTabLo,y      ; Get low byte of line address
-        sta     ptr2
-        lda     ScrTabHi,y      ; Get high byte of line address
-        sta     ptr2+1
-        ldy     CURS_X          ; Get X offset
-        rts
-
-.endproc
-
-; ------------------------------------------------------------------------
-; Write one character to the screen without doing anything else, return X
-; position in Y
-
-.code
-.proc   putchar
-
-        ora     rvs             ; Set revers bit
-        pha                     ; And save
-        jsr     setscrptr       ; Set ptr2 to the screen
-        pla                     ; Restore the character
-        sta     (ptr2),y        ; Set char
-        rts
-
-.endproc
-
-; ------------------------------------------------------------------------
-; Screen address table
-
-.rodata
-ScrTabLo:
-        .repeat SCREEN_YSIZE, Line
-                .byte   <(SCREEN + Line * SCREEN_XSIZE)
-        .endrep
-
-ScrTabHi:
-        .repeat SCREEN_YSIZE, Line
-                .byte   >(SCREEN + Line * SCREEN_XSIZE)
-        .endrep
-
diff --git a/libsrc/atmos/crt0.s b/libsrc/atmos/crt0.s
deleted file mode 100644 (file)
index e789b28..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-;
-; Startup code for cc65 (Oric version)
-;
-; By Debrune Jérôme <jede@oric.org> and Ullrich von Bassewitz <uz@cc65.org>
-; 2015-01-09, Greg King
-;
-
-        .export         _exit
-        .export         __STARTUP__ : absolute = 1      ; Mark as startup
-        .import         initlib, donelib
-        .import         callmain, zerobss
-        .import         __RAM_START__, __RAM_SIZE__, __STACKSIZE__
-
-        .include        "zeropage.inc"
-        .include        "atmos.inc"
-
-; ------------------------------------------------------------------------
-; Place the startup code in a special segment.
-
-.segment        "STARTUP"
-
-; Save the zero-page area that we're about to use.
-
-        ldx     #zpspace-1
-L1:     lda     sp,x
-        sta     zpsave,x
-        dex
-        bpl     L1
-
-; Clear the BSS data.
-
-        jsr     zerobss
-
-; Currently, color isn't supported on the text screen.
-; Unprotect screen columns 0 and 1 (where each line's color codes would sit).
-
-        lda     STATUS
-        sta     stsave
-        and     #%11011111
-        sta     STATUS
-
-; Save some system stuff; and, set up the stack.
-
-        tsx
-        stx     spsave          ; Save system stk ptr
-
-        lda     #<(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
-        sta     sp
-        lda     #>(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
-        sta     sp+1            ; Set argument stack ptr
-
-; Call the module constructors.
-
-        jsr     initlib
-
-; Push the command-line arguments; and, call main().
-
-        jsr     callmain
-
-; Call the module destructors. This is also the exit() entry.
-
-_exit:  jsr     donelib
-
-; Restore the system stuff.
-
-        ldx     spsave
-        txs
-        lda     stsave
-        sta     STATUS
-
-; Copy back the zero-page stuff.
-
-        ldx     #zpspace-1
-L2:     lda     zpsave,x
-        sta     sp,x
-        dex
-        bpl     L2
-
-; Back to BASIC.
-
-        rts
-
-; ------------------------------------------------------------------------
-
-.segment        "ZPSAVE1"
-
-zpsave:
-
-; This padding is needed by a bug in the ROM.
-; (The CLOAD command starts BASIC's variables table on top of the last byte
-; that was loaded [instead of at the next address].)
-; This is overlaid on a buffer, so that it doesn't use extra space in RAM.
-
-        .byte   0
-
-; The segments "ZPSAVE1" and "ZPSAVE2" always must be together.
-; They create a single object (the zpsave buffer).
-
-.segment        "ZPSAVE2"
-
-        .res    zpspace - 1
-
-; ------------------------------------------------------------------------
-
-.bss
-
-spsave: .res    1
-stsave: .res    1
diff --git a/libsrc/atmos/ctype.s b/libsrc/atmos/ctype.s
deleted file mode 100644 (file)
index 79edafb..0000000
+++ /dev/null
@@ -1,299 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-04-13
-;
-; Character specification table.
-;
-
-; The tables are readonly, put them into the rodata segment
-
-.rodata
-
-; The following 256 byte wide table specifies attributes for the isxxx type
-; of functions. Doing it by a table means some overhead in space, but it
-; has major advantages:
-;
-;   * It is fast. If it were'nt for the slow parameter passing of cc65, one
-;     could even define macros for the isxxx functions (this is usually
-;     done on other platforms).
-;
-;   * It is highly portable. The only unportable part is the table itself,
-;     all real code goes into the common library.
-;
-;   * We save some code in the isxxx functions.
-;
-;
-; Bit assignments:
-;
-;   0 - Lower case char
-;   1 - Upper case char
-;   2 - Numeric digit
-;   3 - Hex digit (both, lower and upper)
-;   4 - Control character
-;   5 - The space character itself
-;   6 - Other whitespace (that is: '\f', '\n', '\r', '\t' and '\v')
-;   7 - Space or tab character
-
-        .export         __ctype
-
-__ctype:
-        .byte   $10     ;   0/00 ___ctrl_@___
-        .byte   $10     ;   1/01 ___ctrl_A___
-        .byte   $10     ;   2/02 ___ctrl_B___
-        .byte   $10     ;   3/03 ___ctrl_C___
-        .byte   $10     ;   4/04 ___ctrl_D___
-        .byte   $10     ;   5/05 ___ctrl_E___
-        .byte   $10     ;   6/06 ___ctrl_F___
-        .byte   $10     ;   7/07 ___ctrl_G___
-        .byte   $10     ;   8/08 ___ctrl_H___
-        .byte   $D0     ;   9/09 ___ctrl_I___
-        .byte   $50     ;  10/0a ___ctrl_J___
-        .byte   $50     ;  11/0b ___ctrl_K___
-        .byte   $50     ;  12/0c ___ctrl_L___
-        .byte   $50     ;  13/0d ___ctrl_M___
-        .byte   $10     ;  14/0e ___ctrl_N___
-        .byte   $10     ;  15/0f ___ctrl_O___
-        .byte   $10     ;  16/10 ___ctrl_P___
-        .byte   $10     ;  17/11 ___ctrl_Q___
-        .byte   $10     ;  18/12 ___ctrl_R___
-        .byte   $10     ;  19/13 ___ctrl_S___
-        .byte   $10     ;  20/14 ___ctrl_T___
-        .byte   $10     ;  21/15 ___ctrl_U___
-        .byte   $10     ;  22/16 ___ctrl_V___
-        .byte   $10     ;  23/17 ___ctrl_W___
-        .byte   $10     ;  24/18 ___ctrl_X___
-        .byte   $10     ;  25/19 ___ctrl_Y___
-        .byte   $10     ;  26/1a ___ctrl_Z___
-        .byte   $10     ;  27/1b ___ctrl_[___
-        .byte   $10     ;  28/1c ___ctrl_\___
-        .byte   $10     ;  29/1d ___ctrl_]___
-        .byte   $10     ;  30/1e ___ctrl_^___
-        .byte   $10     ;  31/1f ___ctrl_____
-        .byte   $A0     ;  32/20 ___SPACE___
-        .byte   $00     ;  33/21 _____!_____
-        .byte   $00     ;  34/22 _____"_____
-        .byte   $00     ;  35/23 _____#_____
-        .byte   $00     ;  36/24 _____$_____
-        .byte   $00     ;  37/25 _____%_____
-        .byte   $00     ;  38/26 _____&_____
-        .byte   $00     ;  39/27 _____'_____
-        .byte   $00     ;  40/28 _____(_____
-        .byte   $00     ;  41/29 _____)_____
-        .byte   $00     ;  42/2a _____*_____
-        .byte   $00     ;  43/2b _____+_____
-        .byte   $00     ;  44/2c _____,_____
-        .byte   $00     ;  45/2d _____-_____
-        .byte   $00     ;  46/2e _____._____
-        .byte   $00     ;  47/2f _____/_____
-        .byte   $0C     ;  48/30 _____0_____
-        .byte   $0C     ;  49/31 _____1_____
-        .byte   $0C     ;  50/32 _____2_____
-        .byte   $0C     ;  51/33 _____3_____
-        .byte   $0C     ;  52/34 _____4_____
-        .byte   $0C     ;  53/35 _____5_____
-        .byte   $0C     ;  54/36 _____6_____
-        .byte   $0C     ;  55/37 _____7_____
-        .byte   $0C     ;  56/38 _____8_____
-        .byte   $0C     ;  57/39 _____9_____
-        .byte   $00     ;  58/3a _____:_____
-        .byte   $00     ;  59/3b _____;_____
-        .byte   $00     ;  60/3c _____<_____
-        .byte   $00     ;  61/3d _____=_____
-        .byte   $00     ;  62/3e _____>_____
-        .byte   $00     ;  63/3f _____?_____
-
-        .byte   $00     ;  64/40 _____@_____
-        .byte   $0A     ;  65/41 _____A_____
-        .byte   $0A     ;  66/42 _____B_____
-        .byte   $0A     ;  67/43 _____C_____
-        .byte   $0A     ;  68/44 _____D_____
-        .byte   $0A     ;  69/45 _____E_____
-        .byte   $0A     ;  70/46 _____F_____
-        .byte   $02     ;  71/47 _____G_____
-        .byte   $02     ;  72/48 _____H_____
-        .byte   $02     ;  73/49 _____I_____
-        .byte   $02     ;  74/4a _____J_____
-        .byte   $02     ;  75/4b _____K_____
-        .byte   $02     ;  76/4c _____L_____
-        .byte   $02     ;  77/4d _____M_____
-        .byte   $02     ;  78/4e _____N_____
-        .byte   $02     ;  79/4f _____O_____
-        .byte   $02     ;  80/50 _____P_____
-        .byte   $02     ;  81/51 _____Q_____
-        .byte   $02     ;  82/52 _____R_____
-        .byte   $02     ;  83/53 _____S_____
-        .byte   $02     ;  84/54 _____T_____
-        .byte   $02     ;  85/55 _____U_____
-        .byte   $02     ;  86/56 _____V_____
-        .byte   $02     ;  87/57 _____W_____
-        .byte   $02     ;  88/58 _____X_____
-        .byte   $02     ;  89/59 _____Y_____
-        .byte   $02     ;  90/5a _____Z_____
-        .byte   $00     ;  91/5b _____[_____
-        .byte   $00     ;  92/5c _____\_____
-        .byte   $00     ;  93/5d _____]_____
-        .byte   $00     ;  94/5e _____^_____
-        .byte   $00     ;  95/5f _UNDERLINE_
-        .byte   $00     ;  96/60 ___grave___
-        .byte   $09     ;  97/61 _____a_____
-        .byte   $09     ;  98/62 _____b_____
-        .byte   $09     ;  99/63 _____c_____
-        .byte   $09     ; 100/64 _____d_____
-        .byte   $09     ; 101/65 _____e_____
-        .byte   $09     ; 102/66 _____f_____
-        .byte   $01     ; 103/67 _____g_____
-        .byte   $01     ; 104/68 _____h_____
-        .byte   $01     ; 105/69 _____i_____
-        .byte   $01     ; 106/6a _____j_____
-        .byte   $01     ; 107/6b _____k_____
-        .byte   $01     ; 108/6c _____l_____
-        .byte   $01     ; 109/6d _____m_____
-        .byte   $01     ; 110/6e _____n_____
-        .byte   $01     ; 111/6f _____o_____
-        .byte   $01     ; 112/70 _____p_____
-        .byte   $01     ; 113/71 _____q_____
-        .byte   $01     ; 114/72 _____r_____
-        .byte   $01     ; 115/73 _____s_____
-        .byte   $01     ; 116/74 _____t_____
-        .byte   $01     ; 117/75 _____u_____
-        .byte   $01     ; 118/76 _____v_____
-        .byte   $01     ; 119/77 _____w_____
-        .byte   $01     ; 120/78 _____x_____
-        .byte   $01     ; 121/79 _____y_____
-        .byte   $01     ; 122/7a _____z_____
-        .byte   $00     ; 123/7b _____{_____
-        .byte   $00     ; 124/7c _____|_____
-        .byte   $00     ; 125/7d _____}_____
-        .byte   $00     ; 126/7e _____~_____
-        .byte   $40     ; 127/7f ____DEL____
-
-        .byte   $00     ; 128/80 ___________
-        .byte   $00     ; 129/81 ___________
-        .byte   $00     ; 130/82 ___________
-        .byte   $00     ; 131/83 ___________
-        .byte   $00     ; 132/84 ___________
-        .byte   $00     ; 133/85 ___________
-        .byte   $00     ; 134/86 ___________
-        .byte   $00     ; 135/87 ___________
-        .byte   $00     ; 136/88 ___________
-        .byte   $00     ; 137/89 ___________
-        .byte   $00     ; 138/8a ___________
-        .byte   $00     ; 139/8b ___________
-        .byte   $00     ; 140/8c ___________
-        .byte   $00     ; 141/8d ___________
-        .byte   $00     ; 142/8e ___________
-        .byte   $00     ; 143/8f ___________
-        .byte   $00     ; 144/90 ___________
-        .byte   $00     ; 145/91 ___________
-        .byte   $00     ; 146/92 ___________
-        .byte   $10     ; 147/93 ___________
-        .byte   $00     ; 148/94 ___________
-        .byte   $00     ; 149/95 ___________
-        .byte   $00     ; 150/96 ___________
-        .byte   $00     ; 151/97 ___________
-        .byte   $00     ; 152/98 ___________
-        .byte   $00     ; 153/99 ___________
-        .byte   $00     ; 154/9a ___________
-        .byte   $00     ; 155/9b ___________
-        .byte   $00     ; 156/9c ___________
-        .byte   $00     ; 157/9d ___________
-        .byte   $00     ; 158/9e ___________
-        .byte   $00     ; 159/9f ___________
-
-        .byte   $00     ; 160/a0 ___________
-        .byte   $00     ; 161/a1 ___________
-        .byte   $00     ; 162/a2 ___________
-        .byte   $00     ; 163/a3 ___________
-        .byte   $00     ; 164/a4 ___________
-        .byte   $00     ; 165/a5 ___________
-        .byte   $00     ; 166/a6 ___________
-        .byte   $00     ; 167/a7 ___________
-        .byte   $00     ; 168/a8 ___________
-        .byte   $00     ; 169/a9 ___________
-        .byte   $00     ; 170/aa ___________
-        .byte   $00     ; 171/ab ___________
-        .byte   $00     ; 172/ac ___________
-        .byte   $00     ; 173/ad ___________
-        .byte   $00     ; 174/ae ___________
-        .byte   $00     ; 175/af ___________
-        .byte   $00     ; 176/b0 ___________
-        .byte   $00     ; 177/b1 ___________
-        .byte   $00     ; 178/b2 ___________
-        .byte   $00     ; 179/b3 ___________
-        .byte   $00     ; 180/b4 ___________
-        .byte   $00     ; 181/b5 ___________
-        .byte   $00     ; 182/b6 ___________
-        .byte   $00     ; 183/b7 ___________
-        .byte   $00     ; 184/b8 ___________
-        .byte   $00     ; 185/b9 ___________
-        .byte   $00     ; 186/ba ___________
-        .byte   $00     ; 187/bb ___________
-        .byte   $00     ; 188/bc ___________
-        .byte   $00     ; 189/bd ___________
-        .byte   $00     ; 190/be ___________
-        .byte   $00     ; 191/bf ___________
-
-        .byte   $02     ; 192/c0 ___________
-        .byte   $02     ; 193/c1 ___________
-        .byte   $02     ; 194/c2 ___________
-        .byte   $02     ; 195/c3 ___________
-        .byte   $02     ; 196/c4 ___________
-        .byte   $02     ; 197/c5 ___________
-        .byte   $02     ; 198/c6 ___________
-        .byte   $02     ; 199/c7 ___________
-        .byte   $02     ; 200/c8 ___________
-        .byte   $02     ; 201/c9 ___________
-        .byte   $02     ; 202/ca ___________
-        .byte   $02     ; 203/cb ___________
-        .byte   $02     ; 204/cc ___________
-        .byte   $02     ; 205/cd ___________
-        .byte   $02     ; 206/ce ___________
-        .byte   $02     ; 207/cf ___________
-        .byte   $02     ; 208/d0 ___________
-        .byte   $02     ; 209/d1 ___________
-        .byte   $02     ; 210/d2 ___________
-        .byte   $02     ; 211/d3 ___________
-        .byte   $02     ; 212/d4 ___________
-        .byte   $02     ; 213/d5 ___________
-        .byte   $02     ; 214/d6 ___________
-        .byte   $02     ; 215/d7 ___________
-        .byte   $02     ; 216/d8 ___________
-        .byte   $02     ; 217/d9 ___________
-        .byte   $02     ; 218/da ___________
-        .byte   $02     ; 219/db ___________
-        .byte   $02     ; 220/dc ___________
-        .byte   $02     ; 221/dd ___________
-        .byte   $02     ; 222/de ___________
-        .byte   $00     ; 223/df ___________
-        .byte   $01     ; 224/e0 ___________
-        .byte   $01     ; 225/e1 ___________
-        .byte   $01     ; 226/e2 ___________
-        .byte   $01     ; 227/e3 ___________
-        .byte   $01     ; 228/e4 ___________
-        .byte   $01     ; 229/e5 ___________
-        .byte   $01     ; 230/e6 ___________
-        .byte   $01     ; 231/e7 ___________
-        .byte   $01     ; 232/e8 ___________
-        .byte   $01     ; 233/e9 ___________
-        .byte   $01     ; 234/ea ___________
-        .byte   $01     ; 235/eb ___________
-        .byte   $01     ; 236/ec ___________
-        .byte   $01     ; 237/ed ___________
-        .byte   $01     ; 238/ee ___________
-        .byte   $01     ; 239/ef ___________
-        .byte   $01     ; 240/f0 ___________
-        .byte   $01     ; 241/f1 ___________
-        .byte   $01     ; 242/f2 ___________
-        .byte   $01     ; 243/f3 ___________
-        .byte   $01     ; 244/f4 ___________
-        .byte   $01     ; 245/f5 ___________
-        .byte   $01     ; 246/f6 ___________
-        .byte   $01     ; 247/f7 ___________
-        .byte   $01     ; 248/f8 ___________
-        .byte   $01     ; 249/f9 ___________
-        .byte   $01     ; 250/fa ___________
-        .byte   $01     ; 251/fb ___________
-        .byte   $01     ; 252/fc ___________
-        .byte   $01     ; 253/fd ___________
-        .byte   $01     ; 254/fe ___________
-        .byte   $00     ; 255/ff ___________
-
diff --git a/libsrc/atmos/cvline.s b/libsrc/atmos/cvline.s
deleted file mode 100644 (file)
index ca41502..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-04-13
-;
-; void cvlinexy (unsigned char x, unsigned char y, unsigned char length);
-; void cvline (unsigned char length);
-;
-
-        .export         _cvlinexy, _cvline
-        .import         setscrptr
-        .import         rvs
-        .import         popax
-        .importzp       ptr2
-
-        .include        "atmos.inc"
-
-
-_cvlinexy:
-        pha                     ; Save the length
-        jsr     popax           ; Get X and Y
-        sta     CURS_Y          ; Store Y
-        stx     CURS_X          ; Store X
-        pla                     ; Restore the length and run into _cvline
-
-_cvline:
-        tax                     ; Is the length zero?
-        beq     @L9             ; Jump if done
-@L1:    jsr     setscrptr       ; Set ptr2 to screen, won't use X
-        lda     #'|'
-        ora     rvs
-        sta     (ptr2),y        ; Write one char
-        inc     CURS_Y
-@L2:    dex
-        bne     @L1
-@L9:    rts
-
-
diff --git a/libsrc/atmos/gotox.s b/libsrc/atmos/gotox.s
deleted file mode 100644 (file)
index 6f86827..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-04-13
-;
-; void gotox (unsigned char x);
-;
-
-        .export         _gotox
-
-        .include        "atmos.inc"
-
-.proc   _gotox
-
-        sta     CURS_X          ; Set X
-        rts
-
-.endproc
-
-
diff --git a/libsrc/atmos/gotoxy.s b/libsrc/atmos/gotoxy.s
deleted file mode 100644 (file)
index 80d4d52..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-04-13
-;
-; void gotoxy (unsigned char x, unsigned char y);
-;
-
-        .export         _gotoxy
-        .import         popa
-
-        .include        "atmos.inc"
-
-.proc   _gotoxy
-
-        sta     CURS_Y          ; Set Y
-        jsr     popa            ; Get X
-        sta     CURS_X          ; Set X
-        rts
-
-.endproc
-
-
diff --git a/libsrc/atmos/gotoy.s b/libsrc/atmos/gotoy.s
deleted file mode 100644 (file)
index 4db5777..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-04-13
-;
-; void gotoy (unsigned char y);
-;
-
-        .export         _gotoy
-
-        .include        "atmos.inc"
-
-.proc   _gotoy
-
-        sta     CURS_Y          ; Set Y
-        rts
-
-.endproc
-
-
diff --git a/libsrc/atmos/irq.s b/libsrc/atmos/irq.s
deleted file mode 100644 (file)
index ed443ca..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-;
-; IRQ handling (Oric version)
-;
-
-        .export         initirq, doneirq
-        .import         callirq
-
-        .include        "atmos.inc"
-
-; ------------------------------------------------------------------------
-
-.segment        "INIT"
-
-initirq:
-        lda     IRQVec
-        ldx     IRQVec+1
-        sta     IRQInd+1
-        stx     IRQInd+2
-        lda     #<IRQStub
-        ldx     #>IRQStub
-        jmp     setvec
-
-; ------------------------------------------------------------------------
-
-.code
-
-doneirq:
-        lda     IRQInd+1
-        ldx     IRQInd+2
-setvec: sei
-        sta     IRQVec
-        stx     IRQVec+1
-        cli
-        rts
-
-; ------------------------------------------------------------------------
-
-.segment        "LOWCODE"
-
-IRQStub:
-        cld                             ; Just to be sure
-        pha
-        txa
-        pha
-        tya
-        pha
-        jsr     callirq                 ; Call the functions
-        pla
-        tay
-        pla
-        tax
-        pla
-        jmp     IRQInd                  ; Jump to the saved IRQ vector
-
-; ------------------------------------------------------------------------
-
-.data
-
-IRQInd: jmp     $0000
diff --git a/libsrc/atmos/joy/atmos-pase.s b/libsrc/atmos/joy/atmos-pase.s
deleted file mode 100644 (file)
index 26d7c74..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-;
-; P.A.S.E. joystick driver for the Atmos
-; Can be used multiple times when statically linked to the application.
-;
-; 2002-12-20, Based on Ullrich von Bassewitz's code.
-; 2009-12-21, Stefan Haubenthal
-; 2013-07-15, Greg King
-;
-
-        .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-        .include        "atmos.inc"
-
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _atmos_pase_joy
-
-; Driver signature
-
-        .byte   $6A, $6F, $79           ; "joy"
-        .byte   JOY_API_VERSION         ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte   $10                     ; JOY_UP
-        .byte   $08                     ; JOY_DOWN
-        .byte   $01                     ; JOY_LEFT
-        .byte   $02                     ; JOY_RIGHT
-        .byte   $20                     ; JOY_FIRE
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
-; Jump table.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READ
-        .addr   0                       ; IRQ entry unused
-
-; ------------------------------------------------------------------------
-; Constants
-
-JOY_COUNT       = 2             ; Number of joysticks we support
-
-; ------------------------------------------------------------------------
-; Data.
-
-.bss
-temp1:  .byte   $00
-temp2:  .byte   $00
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #JOY_ERR_OK
-        ldx     #0
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:
-        lda     #JOY_COUNT
-        ldx     #0
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
-
-READ:
-        tay
-
-        lda     VIA::PRA
-        pha
-        lda     VIA::DDRA
-        pha
-        lda     #%11000000
-        sta     VIA::DDRA
-        lda     #%10000000
-        sta     VIA::PRA2
-        lda     VIA::PRA2
-        sta     temp1
-        lda     #%01000000
-        sta     VIA::PRA2
-        lda     VIA::PRA
-        sta     temp2
-        pla
-        sta     VIA::DDRA
-        pla
-        sta     VIA::PRA2
-
-        ldx     #0
-        tya
-        bne     @L1
-        lda     temp1
-        eor     #$FF
-        rts
-@L1:    lda     temp2
-        eor     #$FF
-        rts
diff --git a/libsrc/atmos/joy_stat_stddrv.s b/libsrc/atmos/joy_stat_stddrv.s
deleted file mode 100644 (file)
index 2ac2259..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Address of the static standard joystick driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void joy_static_stddrv[];
-;
-
-        .export _joy_static_stddrv
-        .import _atmos_pase_joy
-
-.rodata
-
-_joy_static_stddrv := _atmos_pase_joy
diff --git a/libsrc/atmos/joy_stddrv.s b/libsrc/atmos/joy_stddrv.s
deleted file mode 100644 (file)
index 6ed83f4..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Name of the standard joystick driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const char joy_stddrv[];
-;
-
-        .export _joy_stddrv
-
-.rodata
-
-_joy_stddrv:    .asciiz "atmos-pase.joy"
diff --git a/libsrc/atmos/kbhit.s b/libsrc/atmos/kbhit.s
deleted file mode 100644 (file)
index 1b18b6c..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-04-13
-;
-; int kbhit (void);
-;
-
-        .export         _kbhit
-
-        .include        "atmos.inc"
-
-_kbhit:
-        ldx     #$00            ; Load high byte
-        lda     KEYBUF          ; Flag for new char in bit 7
-        asl     a               ; Shift bit 7 into carry
-        txa                     ; A = 0
-        rol     a               ; Move old bit 7 into bit 0
-        rts
-
diff --git a/libsrc/atmos/libref.s b/libsrc/atmos/libref.s
deleted file mode 100644 (file)
index 62c78b8..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Oliver Schmidt, 2013-05-31
-;
-
-        .export         joy_libref, ser_libref, tgi_libref
-        .import         _exit
-
-joy_libref      := _exit
-ser_libref      := _exit
-tgi_libref      := _exit
diff --git a/libsrc/atmos/mainargs.s b/libsrc/atmos/mainargs.s
deleted file mode 100644 (file)
index d6d9ed1..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-;
-; 2003-03-07, Ullrich von Bassewitz
-; 2011-01-28, Stefan Haubenthal
-; 2014-09-10, Greg King
-;
-; Set up arguments for main
-;
-
-        .constructor    initmainargs, 24
-        .import         __argc, __argv
-
-        .include        "atmos.inc"
-        .macpack        generic
-
-MAXARGS  = 10                   ; Maximum number of arguments allowed
-REM      = $9d                  ; BASIC token-code
-
-
-;---------------------------------------------------------------------------
-; Get possible command-line arguments. Goes into the special INIT segment,
-; which may be reused after the startup code is run
-
-.segment        "INIT"
-
-.proc   initmainargs
-
-; Assume that the program was loaded, a moment ago, by the traditional LOAD
-; statement.  Save the "most-recent filename" as argument #0.
-; Because the buffer, that we're copying into, was zeroed out,
-; we don't need to add a NUL character.
-;
-        ldy     #FNAME_LEN - 1  ; limit the length
-L0:     lda     CFOUND_NAME,y
-        sta     name,y
-        dey
-        bpl     L0
-        inc     __argc          ; argc always is equal to, at least, 1
-
-; Find the "rem" token.
-;
-        ldx     #0
-L2:     lda     BASIC_BUF,x
-        beq     done            ; no "rem", no args.
-        inx
-        cmp     #REM
-        bne     L2
-
-; The arguments must be copied to a safe place because BASIC's input buffer
-; might be re-used by the stdin console.
-
-        ldy     #(SCREEN_XSIZE * 2 - 1) - 1
-L3:     lda     BASIC_BUF,y
-        sta     args,y
-        dey
-        bpl     L3
-
-        ldy     #1 * 2          ; Point to second argv slot
-
-; Find the next argument
-
-next:   lda     BASIC_BUF,x
-        beq     done            ; End of line reached
-        inx
-        cmp     #' '            ; Skip leading spaces
-        beq     next            ;
-
-; Found start of next argument. We've incremented the pointer in X already, so
-; it points to the second character of the argument. This is useful since we
-; will check now for a quoted argument, in which case we will have to skip this
-; first character.
-
-found:  cmp     #'"'            ; Is the argument quoted?
-        beq     setterm         ; Jump if so
-        dex                     ; Reset pointer to first argument character
-        lda     #' '            ; A space ends the argument
-setterm:sta     term            ; Set end of argument marker
-
-; Now, store a pointer, to the argument, into the next slot.
-
-        txa                     ; Get low byte
-        add     #<args
-        sta     argv,y          ; argv[y]= &arg
-        lda     #>$0000
-        adc     #>args
-        sta     argv+1,y
-        iny
-        iny
-        inc     __argc          ; Found another arg
-
-; Search for the end of the argument
-
-argloop:lda     BASIC_BUF,x
-        beq     done
-        inx
-        cmp     term
-        bne     argloop
-
-; We've found the end of the argument. X points one character behind it, and
-; A contains the terminating character. To make the argument a valid C string,
-; replace the terminating character by a zero.
-
-        lda     #$00
-        sta     args-1,x
-
-; Check if the maximum number of command line arguments is reached. If not,
-; parse the next one.
-
-        lda     __argc          ; Get low byte of argument count
-        cmp     #MAXARGS        ; Maximum number of arguments reached?
-        bcc     next            ; Parse next one if not
-
-; (The last vector in argv[] already is NULL.)
-
-done:   lda     #<argv
-        ldx     #>argv
-        sta     __argv
-        stx     __argv + 1
-        rts
-
-.endproc
-
-; These arrays are zeroed before initmainargs is called.
-; char  name[16+1];
-; char* argv[MAXARGS+1]={name};
-;
-.bss
-term:   .res    1
-name:   .res    FNAME_LEN + 1
-args:   .res    SCREEN_XSIZE * 2 - 1
-
-.data
-argv:   .addr   name
-        .res    MAXARGS * 2, $00
diff --git a/libsrc/atmos/oserrlist.s b/libsrc/atmos/oserrlist.s
deleted file mode 100644 (file)
index 8ec41de..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-;
-; Stefan Haubenthal, 2004-05-25
-; Ullrich von Bassewitz, 18.07.2002
-;
-; Defines the platform specific error list.
-;
-; The table is built as a list of entries
-;
-;       .byte   entrylen
-;       .byte   errorcode
-;       .asciiz errormsg
-;
-; and terminated by an entry with length zero that is returned if the
-; error code could not be found.
-;
-
-        .export         __sys_oserrlist
-
-;----------------------------------------------------------------------------
-; Macros used to generate the list (may get moved to an include file?)
-
-; Regular entry
-.macro  sys_oserr_entry         code, msg
-        .local  Start, End
-Start:  .byte   End - Start
-        .byte   code
-        .asciiz msg
-End:
-.endmacro
-
-; Sentinel entry
-.macro  sys_oserr_sentinel      msg
-        .byte   0                       ; Length is always zero
-        .byte   0                       ; Code is unused
-        .asciiz msg
-.endmacro
-
-;----------------------------------------------------------------------------
-; The error message table
-
-.rodata
-
-__sys_oserrlist:
-        sys_oserr_entry          1, "File not found"
-        sys_oserr_entry          2, "Invalid command end"
-        sys_oserr_entry          3, "No drive number"
-        sys_oserr_entry          4, "Bad drive number"
-        sys_oserr_entry          5, "Invalid filename"
-        sys_oserr_entry          6, "fderr=(error  number)"
-        sys_oserr_entry          7, "Illegal attribute"
-        sys_oserr_entry          8, "Wildcard(s) not allowed"
-        sys_oserr_entry          9, "File already exists"
-        sys_oserr_entry         10, "Insufficient disc space"
-        sys_oserr_entry         11, "File open"
-        sys_oserr_entry         12, "Illegal quantity"
-        sys_oserr_entry         13, "End address missing"
-        sys_oserr_entry         14, "Start address > end address"
-        sys_oserr_entry         15, "Missing 'to'"
-        sys_oserr_entry         16, "Renamed file not on same disc"
-        sys_oserr_entry         17, "Unknown array"
-        sys_oserr_entry         18, "Target drive not source drive"
-        sys_oserr_entry         19, "Destination not specified"
-        sys_oserr_entry         20, "Cannot merge and overwrite"
-        sys_oserr_entry         21, "Single target file illegal"
-        sys_oserr_entry         22, "Syntax"
-        sys_oserr_entry         23, "Filename missing"
-        sys_oserr_entry         24, "Source file missing"
-        sys_oserr_entry         25, "Type mismatch"
-        sys_oserr_entry         26, "Disc write-protected"
-        sys_oserr_entry         27, "Incompatible drives"
-        sys_oserr_entry         28, "File not open"
-        sys_oserr_entry         29, "File end"
-        sys_oserr_sentinel      "Unknown error"
-
-
diff --git a/libsrc/atmos/oserror.s b/libsrc/atmos/oserror.s
deleted file mode 100644 (file)
index 37c9bd7..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Stefan Haubenthal, 2011-04-18
-;
-; int __fastcall__ _osmaperrno (unsigned char oserror);
-; /* Map a system specific error into a system independent code */
-;
-
-        .include        "errno.inc"
-        .export         __osmaperrno
-
-.proc   __osmaperrno
-
-        lda     #<EUNKNOWN
-        ldx     #>EUNKNOWN
-        rts
-
-.endproc
diff --git a/libsrc/atmos/read.s b/libsrc/atmos/read.s
deleted file mode 100644 (file)
index 324ac78..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-;
-; 2014-08-22, Greg King
-;
-; int read (int fd, void* buf, unsigned count);
-;
-; This function is a hack!  It lets us get text from the stdin console.
-;
-
-        .export         _read
-        .constructor    initstdin
-
-        .import         popax
-        .importzp       ptr1, ptr2, ptr3
-        .forceimport    disable_caps
-
-        .macpack        generic
-        .include        "atmos.inc"
-
-.proc   _read
-
-        sta     ptr3
-        stx     ptr3+1          ; save count as result
-        eor     #$FF
-        sta     ptr2
-        txa
-        eor     #$FF
-        sta     ptr2+1          ; Remember -count-1
-
-        jsr     popax           ; get buf
-        sta     ptr1
-        stx     ptr1+1
-        jsr     popax           ; get fd and discard
-
-L1:     inc     ptr2
-        bnz     L2
-        inc     ptr2+1
-        bze     L9              ; no more room in buf
-
-; If there are no more characters in BASIC's input buffer, then get a line from
-; the console into that buffer.
-
-L2:     ldx     text_count
-        bpl     L3
-        jsr     GETLINE
-        ldx     #<(0 - 1)
-
-L3:     inx
-        lda     BASIC_BUF,x
-        bnz     L4              ; (zero-terminated buffer)
-        ldx     #<-1
-        lda     #$0A            ; return newline char. at end of line
-L4:     stx     text_count
-        ldy     #0
-        sta     (ptr1),y
-        inc     ptr1
-        bnz     L1
-        inc     ptr1+1
-        bnz     L1              ; branch always
-
-; No error, return count.
-
-L9:     lda     ptr3
-        ldx     ptr3+1
-        rts
-
-.endproc
-
-
-;--------------------------------------------------------------------------
-; initstdin:  Reset the stdin console.
-
-.segment        "INIT"
-
-initstdin:
-        ldx     #<-1
-        stx     text_count
-        rts
-
-
-;--------------------------------------------------------------------------
-
-.bss
-
-text_count:
-        .res    1
-
diff --git a/libsrc/atmos/revers.s b/libsrc/atmos/revers.s
deleted file mode 100644 (file)
index ad3e1f9..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; unsigned char revers (unsigned char onoff);
-;
-
-        .export         _revers
-        .export         rvs
-
-; ------------------------------------------------------------------------
-;
-
-.code
-.proc   _revers
-
-        ldx     #$00            ; Assume revers off
-        tay                     ; Test onoff
-        beq     L1              ; Jump if off
-        ldx     #$80            ; Load on value
-        ldy     #$00            ; Assume old value is zero
-L1:     lda     rvs             ; Load old value
-        stx     rvs             ; Set new value
-        beq     L2              ; Jump if old value zero
-        iny                     ; Make old value = 1
-L2:     ldx     #$00            ; Load high byte of result
-        tya                     ; Load low byte, set CC
-        rts
-
-.endproc
-
-; ------------------------------------------------------------------------
-;
-
-.bss
-rvs:    .res    1
-
-
diff --git a/libsrc/atmos/ser/atmos-acia.s b/libsrc/atmos/ser/atmos-acia.s
deleted file mode 100644 (file)
index 79fbc1b..0000000
+++ /dev/null
@@ -1,373 +0,0 @@
-;
-; Serial driver for the Telestrat integrated serial controller and the
-; Atmos with a serial add-on.
-;
-; 2012-03-05, Stefan Haubenthal
-; 2013-07-15, Greg King
-;
-; The driver is based on the cc65 rs232 module, which in turn is based on
-; Craig Bruce device driver for the Switftlink/Turbo-232.
-;
-; SwiftLink/Turbo-232 v0.90 device driver, by Craig Bruce, 14-Apr-1998.
-;
-; This software is Public Domain.  It is in Buddy assembler format.
-;
-; This device driver uses the SwiftLink RS-232 Serial Cartridge, available from
-; Creative Micro Designs, Inc, and also supports the extensions of the Turbo232
-; Serial Cartridge.  Both devices are based on the 6551 ACIA chip.  It also
-; supports the "hacked" SwiftLink with a 1.8432 MHz crystal.
-;
-; The code assumes that the kernal + I/O are in context.  On the C128, call
-; it from Bank 15.  On the C64, don't flip out the Kernal unless a suitable
-; NMI catcher is put into the RAM under then Kernal.  For the SuperCPU, the
-; interrupt handling assumes that the 65816 is in 6502-emulation mode.
-;
-
-        .include        "zeropage.inc"
-        .include        "ser-kernel.inc"
-        .include        "ser-error.inc"
-        .include        "atmos.inc"
-
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _atmos_acia_ser
-
-        ; Driver signature
-        .byte   $73, $65, $72           ; "ser"
-        .byte   SER_API_VERSION         ; Serial API version number
-
-        ; Library reference
-        .addr   $0000
-
-        ; Jump table
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   OPEN
-        .addr   CLOSE
-        .addr   GET
-        .addr   PUT
-        .addr   SER_STATUS
-        .addr   IOCTL
-        .addr   IRQ
-
-;----------------------------------------------------------------------------
-; Global variables
-
-        .bss
-
-RecvHead:       .res    1       ; Head of receive buffer
-RecvTail:       .res    1       ; Tail of receive buffer
-RecvFreeCnt:    .res    1       ; Number of bytes in receive buffer
-SendHead:       .res    1       ; Head of send buffer
-SendTail:       .res    1       ; Tail of send buffer
-SendFreeCnt:    .res    1       ; Number of bytes in send buffer
-
-Stopped:        .res    1       ; Flow-stopped flag
-RtsOff:         .res    1       ;
-
-RecvBuf:        .res    256     ; Receive buffers: 256 bytes
-SendBuf:        .res    256     ; Send buffers: 256 bytes
-
-Index:          .res    1       ; I/O register index
-
-        .rodata
-
-        ; Tables used to translate RS232 params into register values
-BaudTable:                      ; bit7 = 1 means setting is invalid
-        .byte   $FF             ; SER_BAUD_45_5
-        .byte   $01             ; SER_BAUD_50
-        .byte   $02             ; SER_BAUD_75
-        .byte   $03             ; SER_BAUD_110
-        .byte   $04             ; SER_BAUD_134_5
-        .byte   $05             ; SER_BAUD_150
-        .byte   $06             ; SER_BAUD_300
-        .byte   $07             ; SER_BAUD_600
-        .byte   $08             ; SER_BAUD_1200
-        .byte   $09             ; SER_BAUD_1800
-        .byte   $0A             ; SER_BAUD_2400
-        .byte   $0B             ; SER_BAUD_3600
-        .byte   $0C             ; SER_BAUD_4800
-        .byte   $0D             ; SER_BAUD_7200
-        .byte   $0E             ; SER_BAUD_9600
-        .byte   $0F             ; SER_BAUD_19200
-        .byte   $FF             ; SER_BAUD_38400
-        .byte   $FF             ; SER_BAUD_57600
-        .byte   $FF             ; SER_BAUD_115200
-        .byte   $FF             ; SER_BAUD_230400
-BitTable:
-        .byte   $60             ; SER_BITS_5
-        .byte   $40             ; SER_BITS_6
-        .byte   $20             ; SER_BITS_7
-        .byte   $00             ; SER_BITS_8
-StopTable:
-        .byte   $00             ; SER_STOP_1
-        .byte   $80             ; SER_STOP_2
-ParityTable:
-        .byte   $00             ; SER_PAR_NONE
-        .byte   $20             ; SER_PAR_ODD
-        .byte   $60             ; SER_PAR_EVEN
-        .byte   $A0             ; SER_PAR_MARK
-        .byte   $E0             ; SER_PAR_SPACE
-
-        .code
-
-;----------------------------------------------------------------------------
-; INSTALL: Is called after the driver is loaded into memory. If possible,
-; check if the hardware is present. Must return an SER_ERR_xx code in a/x.
-;
-; Since we don't have to manage the IRQ vector on the Telestrat/Atmos, this is
-; actually the same as:
-;
-; UNINSTALL: Is called before the driver is removed from memory.
-; No return code required (the driver is removed from memory on return).
-;
-; and:
-;
-; CLOSE: Close the port and disable interrupts. Called without parameters.
-; Must return an SER_ERR_xx code in a/x.
-
-INSTALL:
-UNINSTALL:
-CLOSE:
-        ldx     Index           ; Check for open port
-        beq     :+
-
-        ; Deactivate DTR and disable 6551 interrupts
-        lda     #%00001010
-        sta     ACIA::CMD,x
-
-        ; Done, return an error code
-:       lda     #<SER_ERR_OK
-        tax                     ; A is zero
-        stx     Index           ; Mark port as closed
-        rts
-
-;----------------------------------------------------------------------------
-; OPEN: A pointer to a ser_params structure is passed in ptr1.
-; Must return an SER_ERR_xx code in a/x.
-
-OPEN:
-        ; Check if the handshake setting is valid
-        ldy     #SER_PARAMS::HANDSHAKE  ; Handshake
-        lda     (ptr1),y
-        cmp     #SER_HS_HW              ; This is all we support
-        bne     InvParam
-
-        ; Initialize buffers
-        ldy     #$00
-        sty     Stopped
-        sty     RecvHead
-        sty     RecvTail
-        sty     SendHead
-        sty     SendTail
-        dey                             ; Y = 255
-        sty     RecvFreeCnt
-        sty     SendFreeCnt
-
-        ; Set the value for the control register, which contains stop bits,
-        ; word length and the baud rate.
-        ldy     #SER_PARAMS::BAUDRATE
-        lda     (ptr1),y                ; Baudrate index
-        tay
-        lda     BaudTable,y             ; Get 6551 value
-        bmi     InvBaud                 ; Branch if rate not supported
-        sta     tmp1
-
-        ldy     #SER_PARAMS::DATABITS   ; Databits
-        lda     (ptr1),y
-        tay
-        lda     BitTable,y
-        ora     tmp1
-        sta     tmp1
-
-        ldy     #SER_PARAMS::STOPBITS   ; Stopbits
-        lda     (ptr1),y
-        tay
-        lda     StopTable,y
-        ora     tmp1
-        ora     #%00010000              ; Receiver clock source = baudrate
-        sta     ACIA::CTRL
-
-        ; Set the value for the command register. We remember the base value
-        ; in RtsOff, since we will have to manipulate ACIA::CMD often.
-        ldy     #SER_PARAMS::PARITY     ; Parity
-        lda     (ptr1),y
-        tay
-        lda     ParityTable,y
-        ora     #%00000001              ; DTR active
-        sta     RtsOff
-        ora     #%00001000              ; Enable receive interrupts
-        sta     ACIA::CMD
-
-        ; Done
-        stx     Index                   ; Mark port as open
-        lda     #<SER_ERR_OK
-        tax                             ; A is zero
-        rts
-
-        ; Invalid parameter
-InvParam:lda    #<SER_ERR_INIT_FAILED
-        ldx     #>SER_ERR_INIT_FAILED
-        rts
-
-        ; Baud rate not available
-InvBaud:lda     #<SER_ERR_BAUD_UNAVAIL
-        ldx     #>SER_ERR_BAUD_UNAVAIL
-        rts
-
-;----------------------------------------------------------------------------
-; GET: Will fetch a character from the receive buffer and store it into the
-; variable pointed to by ptr1. If no data is available, SER_ERR_NO_DATA is
-; returned.
-
-GET:
-        ldy     SendFreeCnt     ; Send data if necessary
-        iny                     ; Y == $FF?
-        beq     :+
-        lda     #$00            ; TryHard = false
-        jsr     TryToSend
-
-        ; Check for buffer empty
-:       lda     RecvFreeCnt     ; (25)
-        cmp     #$FF
-        bne     :+
-        lda     #<SER_ERR_NO_DATA
-        ldx     #>SER_ERR_NO_DATA
-        rts
-
-        ; Check for flow stopped & enough free: release flow control
-:       ldy     Stopped         ; (34)
-        beq     :+
-        cmp     #63
-        bcc     :+
-        lda     #$00
-        sta     Stopped
-        lda     RtsOff
-        ora     #%00001000
-        sta     ACIA::CMD
-
-        ; Get byte from buffer
-:       ldy     RecvHead        ; (41)
-        lda     RecvBuf,y
-        inc     RecvHead
-        inc     RecvFreeCnt
-        ldx     #$00            ; (59)
-        sta     (ptr1,x)
-        txa                     ; Return code = 0
-        rts
-
-;----------------------------------------------------------------------------
-; PUT: Output character in A.
-; Must return an SER_ERR_xx code in a/x.
-
-PUT:
-        ; Try to send
-        ldy     SendFreeCnt
-        iny                     ; Y = $FF?
-        beq     :+
-        pha
-        lda     #$00            ; TryHard = false
-        jsr     TryToSend
-        pla
-
-        ; Put byte into send buffer & send
-:       ldy     SendFreeCnt
-        bne     :+
-        lda     #<SER_ERR_OVERFLOW
-        ldx     #>SER_ERR_OVERFLOW
-        rts
-
-:       ldy     SendTail
-        sta     SendBuf,y
-        inc     SendTail
-        dec     SendFreeCnt
-        lda     #$FF            ; TryHard = true
-        jsr     TryToSend
-        lda     #<SER_ERR_OK
-        tax
-        rts
-
-;----------------------------------------------------------------------------
-; SER_STATUS: Return the status in the variable pointed to by ptr1.
-; Must return an SER_ERR_xx code in a/x.
-
-SER_STATUS:
-        lda     ACIA::STATUS
-        ldx     #$00
-        sta     (ptr1,x)
-        txa                     ; SER_ERR_OK
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
-; specific data in ptr1, and the ioctl code in A.
-; Must return an SER_ERR_xx code in a/x.
-
-IOCTL:
-        lda     #<SER_ERR_INV_IOCTL
-        ldx     #>SER_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; IRQ: Called from the builtin runtime IRQ handler as a subroutine. All
-; registers are already saved, no parameters are passed, but the carry flag
-; is clear on entry. The routine must return with carry set if the interrupt
-; was handled, otherwise with carry clear.
-
-IRQ:
-        ldx     Index           ; Check for open port
-        beq     Done
-        lda     ACIA::STATUS,x  ; Check ACIA status for receive interrupt
-        and     #$08
-        beq     Done            ; Jump if no ACIA interrupt
-        lda     ACIA::DATA,x    ; Get byte from ACIA
-        ldy     RecvFreeCnt     ; Check if we have free space left
-        beq     Flow            ; Jump if no space in receive buffer
-        ldy     RecvTail        ; Load buffer pointer
-        sta     RecvBuf,y       ; Store received byte in buffer
-        inc     RecvTail        ; Increment buffer pointer
-        dec     RecvFreeCnt     ; Decrement free space counter
-        ldy     RecvFreeCnt     ; Check for buffer space low
-        cpy     #33
-        bcc     Flow            ; Assert flow control if buffer space low
-        rts                     ; Interrupt handled (carry already set)
-
-        ; Assert flow control if buffer space too low
-Flow:   lda     RtsOff
-        sta     ACIA::CMD,x
-        sta     Stopped
-        sec                     ; Interrupt handled
-Done:   rts
-
-;----------------------------------------------------------------------------
-; Try to send a byte. Internal routine. A = TryHard
-
-TryToSend:
-        sta     tmp1            ; Remember tryHard flag
-Again:  lda     SendFreeCnt
-        cmp     #$FF
-        beq     Quit            ; Bail out
-
-        ; Check for flow stopped
-        lda     Stopped
-        bne     Quit            ; Bail out
-
-        ; Check that ACIA is ready to send
-        lda     ACIA::STATUS
-        and     #$10
-        bne     Send
-        bit     tmp1            ; Keep trying if must try hard
-        bmi     Again
-Quit:   rts
-
-        ; Send byte and try again
-Send:   ldy     SendHead
-        lda     SendBuf,y
-        sta     ACIA::DATA
-        inc     SendHead
-        inc     SendFreeCnt
-        jmp     Again
diff --git a/libsrc/atmos/store_filename.s b/libsrc/atmos/store_filename.s
deleted file mode 100644 (file)
index 41d1837..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-; Helper function
-
-        .export         store_filename
-        .importzp       ptr1
-
-        .include        "atmos.inc"
-
-store_filename:
-        sta     ptr1
-        stx     ptr1+1
-        ldy     #FNAME_LEN - 1  ; store filename
-:       lda     (ptr1),y
-        sta     CFILE_NAME,y
-        dey
-        bpl     :-
-        rts
diff --git a/libsrc/atmos/systime.s b/libsrc/atmos/systime.s
deleted file mode 100644 (file)
index 273e394..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-;
-; Ullrich von Bassewitz, 12.11.2002
-;
-; time_t _systime (void);
-; /* Similar to time(), but:
-; **   - Is not ISO C
-; **   - Does not take the additional pointer
-; **   - Does not set errno when returning -1
-; */
-;
-
-        .export         __systime
-
-        .importzp       sreg
-
-.code
-
-.proc   __systime
-
-        lda     #$FF
-        tax
-        sta     sreg
-        sta     sreg+1
-        rts                     ; Return -1
-
-.endproc
-
-
diff --git a/libsrc/atmos/sysuname.s b/libsrc/atmos/sysuname.s
deleted file mode 100644 (file)
index 546f942..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; unsigned char __fastcall__ _sysuname (struct utsname* buf);
-;
-
-        .export         __sysuname, utsdata
-
-        .import         utscopy
-
-        __sysuname = utscopy
-
-;--------------------------------------------------------------------------
-; Data. We define a fixed utsname struct here and just copy it.
-
-.rodata
-
-utsdata:
-        ; sysname
-        .asciiz         "cc65"
-
-        ; nodename
-        .asciiz         ""
-
-        ; release
-        .byte           ((.VERSION >> 8) & $0F) + '0'
-        .byte           '.'
-        .if             ((.VERSION >> 4) & $0F) > 9
-        .byte           ((.VERSION >> 4) & $0F) / 10 + '0'
-        .byte           ((.VERSION >> 4) & $0F) .MOD 10 + '0'
-        .else
-        .byte           ((.VERSION >> 4) & $0F) + '0'
-        .endif
-        .byte           $00
-
-        ; version
-        .if             (.VERSION & $0F) > 9
-        .byte           (.VERSION & $0F) / 10 + '0'
-        .byte           (.VERSION & $0F) .MOD 10 + '0'
-        .else
-        .byte           (.VERSION & $0F) + '0'
-        .endif
-        .byte           $00
-
-        ; machine
-        .asciiz         "Oric Atmos"
diff --git a/libsrc/atmos/tapehdr.s b/libsrc/atmos/tapehdr.s
deleted file mode 100644 (file)
index d90c908..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-;
-; Based on code by Debrune Jérôme <jede@oric.org>
-; 2015-01-08, Greg King
-;
-
-        ; The following symbol is used by the linker config. file
-        ; to force this module to be included into the output file.
-        .export __TAPEHDR__:abs = 1
-
-        ; These symbols, also, come from the configuration file.
-        .import __BASHDR_LOAD__, __ZPSAVE1_LOAD__, __AUTORUN__, __PROGFLAG__
-
-
-; ------------------------------------------------------------------------
-; Oric cassette-tape header
-
-.segment        "TAPEHDR"
-
-        .byte   $16, $16, $16   ; Sync bytes
-        .byte   $24             ; Beginning-of-header marker
-
-        .byte   $00             ; $2B0
-        .byte   $00             ; $2AF
-        .byte   <__PROGFLAG__   ; $2AE Language flag ($00=BASIC, $80=machine code)
-        .byte   <__AUTORUN__    ; $2AD Auto-run flag ($C7=run, $00=only load)
-        .dbyt   __ZPSAVE1_LOAD__ ;$2AB Address of end of file
-        .dbyt   __BASHDR_LOAD__ ; $2A9 Address of start of file
-        .byte   $00             ; $2A8
-
-        ; File name (a maximum of 17 characters), zero-terminated
-        .asciiz .sprintf("%u", .time)
diff --git a/libsrc/atmos/tgi/atmos-228-200-3.s b/libsrc/atmos/tgi/atmos-228-200-3.s
deleted file mode 100644 (file)
index ae9b0f7..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-;
-; Graphics driver for the 228x200x3 palette mode on the Atmos
-;
-; Stefan Haubenthal <polluks@sdf.lonestar.org>
-; 2014-09-10, Greg King <gregdk@users.sf.net>
-;
-
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-        .include        "atmos.inc"
-
-        .macpack        generic
-        .macpack        module
-
-XSIZE   =       6               ; System font width
-YSIZE   =       8               ; System font height
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table and constants.
-
-        module_header   _atmos_228_200_3_tgi
-
-; The first part of the header is a structure that has a signature,
-; and defines the capabilities of the driver.
-
-        .byte   "tgi"
-        .byte   TGI_API_VERSION ; TGI API version number
-        .addr   $0000           ; Library reference
-        .word   228             ; x resolution
-        .word   200             ; y resolution
-        .byte   3               ; Number of drawing colors
-        .byte   1               ; Number of screens available
-        .byte   XSIZE           ; System font x size
-        .byte   YSIZE           ; System font y size
-        .word   $011C           ; Aspect ratio (based on 4/3 display)
-        .byte   0               ; TGI driver flags
-
-; Next comes the jump table. Currently, all entries must be valid;
-; and, may point to an RTS, for test versions (function not implemented).
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   INIT
-        .addr   DONE
-        .addr   GETERROR
-        .addr   CONTROL
-        .addr   CLEAR
-        .addr   SETVIEWPAGE
-        .addr   SETDRAWPAGE
-        .addr   SETCOLOR
-        .addr   SETPALETTE
-        .addr   GETPALETTE
-        .addr   GETDEFPALETTE
-        .addr   SETPIXEL
-        .addr   GETPIXEL
-        .addr   LINE
-        .addr   BAR
-        .addr   TEXTSTYLE
-        .addr   OUTTEXT
-        .addr   0               ; IRQ entry is unused
-
-; ------------------------------------------------------------------------
-; Data.
-
-; Variables mapped to the zero-page segment variables. These are
-; used for passing parameters to the driver.
-
-X1      :=      ptr1
-Y1      :=      ptr2
-X2      :=      ptr3
-Y2      :=      ptr4
-
-; Absolute variables used in the code
-
-.bss
-
-ERROR:          .res    1       ; Error code
-MODE:           .res    1       ; Graphics mode
-PALETTE:        .res    2
-
-; Constant table
-
-.rodata
-
-; Default colors: black background, white foreground
-; (The third "color" actually flips a pixel
-; between the foreground and background colors.)
-;
-DEFPALETTE:     .byte   0, 1
-
-.code
-
-; ------------------------------------------------------------------------
-; INIT: Changes an already installed device from text mode to graphics mode.
-; Note that INIT/DONE may be called multiple times while the driver
-; is loaded, while INSTALL is called only once. So, any code that is needed
-; to initialize variables and so on must go here. Setting palette and
-; clearing the screen are not needed because they are called by the graphics
-; kernel later.
-; The graphics kernel never will call INIT when a graphics mode is already
-; active, so there is no need to protect against that.
-;
-; Must set an error code: YES
-;
-
-INIT:
-
-; Switch into graphics mode.
-
-        jsr     HIRES
-
-; Done, reset the error code.
-
-; ------------------------------------------------------------------------
-; GETERROR: Return the error code in A, and clear it.
-
-GETERROR:
-        ldx     #TGI_ERR_OK
-        lda     ERROR
-        stx     ERROR
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. May
-; initialize anything that has to be done just once. Is probably empty
-; most of the time.
-;
-; Must set an error code: NO
-;
-
-INSTALL:
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory. May
-; clean up anything done by INSTALL, but probably is empty most of the time.
-;
-; Must set an error code: NO
-;
-
-UNINSTALL:
-        rts
-
-; ------------------------------------------------------------------------
-; DONE: Will be called to switch the graphics device back into text mode.
-; The graphics kernel never will call DONE when no graphics mode is active,
-; so there is no need to protect against that.
-;
-; Must set an error code: NO
-;
-
-DONE    :=      TEXT
-
-; ------------------------------------------------------------------------
-; CONTROL: Platform-/driver-specific entry point.
-;
-; Must set an error code: YES
-;
-
-CONTROL:
-        sta     PATTERN
-        lda     #TGI_ERR_OK
-        sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; CLEAR: Clears the screen.
-;
-; Must set an error code: NO
-;
-
-CLEAR   :=      HIRES
-
-; ------------------------------------------------------------------------
-; SETVIEWPAGE: Set the visible page. Called with the new page in A (0..n).
-; The page number already is checked to be valid, by the graphics kernel.
-;
-; Must set an error code: NO (will be called only if page OK)
-;
-
-SETVIEWPAGE:
-
-; ------------------------------------------------------------------------
-; SETDRAWPAGE: Set the drawable page. Called with the new page in A (0..n).
-; The page number already is checked to be valid, by the graphics kernel.
-;
-; Must set an error code: NO (will be called only if page OK)
-;
-
-SETDRAWPAGE:
-        rts
-
-; ------------------------------------------------------------------------
-; SETCOLOR: Set the drawing color (in A). The new color already is checked
-; to be in a valid range (0..maxcolor-1).
-;
-; Must set an error code: NO (will be called only if color OK)
-;
-
-SETCOLOR:
-        sta     MODE
-        rts
-
-; ------------------------------------------------------------------------
-; SETPALETTE: Set the palette (not available with all drivers/hardware).
-; A pointer to the palette is passed in ptr1. Must set an error if palettes
-; are not supported.
-;
-; Must set an error code: YES
-;
-
-SETPALETTE:
-        ldy     #0
-        jsr     flipcolor
-        sty     PARAM1+1
-        jsr     PAPER
-        ldy     #1
-        jsr     flipcolor
-        dey                     ; TGI_ERR_OK
-        sty     ERROR
-        sty     PARAM1+1
-        jmp     INK
-
-flipcolor:
-        lda     (ptr1),y
-        sta     PALETTE,y
-        cmp     #1
-        beq     @flip
-        cmp     #7
-        bne     @keep
-@flip:  eor     #1 ^ 7
-@keep:  sta     PARAM1
-        rts
-
-; ------------------------------------------------------------------------
-; GETPALETTE: Return the current palette in A/X. Even drivers that cannot
-; set the palette should return the default palette here, so there's no
-; way for this function to fail.
-;
-; Must set an error code: NO
-;
-
-GETPALETTE:
-        lda     #<PALETTE
-        ldx     #>PALETTE
-        rts
-
-; ------------------------------------------------------------------------
-; GETDEFPALETTE: Return the default palette for the driver in A/X. All
-; drivers should return something reasonable here, even drivers that don't
-; support palettes; otherwise, the caller has no way to determine the colors
-; of the (not changeable) palette.
-;
-; Must set an error code: NO (all drivers must have a default palette)
-;
-
-GETDEFPALETTE:
-        lda     #<DEFPALETTE
-        ldx     #>DEFPALETTE
-        rts
-
-; ------------------------------------------------------------------------
-; SETPIXEL: Draw one pixel at X1/Y1 = ptr1/ptr2 with the current drawing
-; color. The co-ordinates passed to this function are never outside the
-; visible screen area, so there is no need for clipping inside this function.
-;
-; Must set an error code: NO
-;
-
-SETPIXEL:
-        lda     Y1
-        sta     PARAM2
-        lda     MODE
-mymode: sta     PARAM3
-        lda     X1
-        add     #2 * XSIZE      ; Skip screen attribute columns
-        sta     PARAM1
-        lda     #>$0000
-        sta     PARAM1+1
-        sta     PARAM2+1
-        sta     PARAM3+1
-        jmp     CURSET
-
-; ------------------------------------------------------------------------
-; GETPIXEL: Read the color value of a pixel, and return it in A/X. The
-; co-ordinates passed to this function are never outside the visible screen
-; area, so there is no need for clipping inside this function.
-
-GETPIXEL:
-        lda     X1
-        sta     PARAM1
-        lda     Y1
-        sta     PARAM2
-        lda     #>$0000
-        sta     PARAM1+1
-        sta     PARAM2+1
-        jsr     POINT
-        lda     PARAM1
-        and     #%00000001
-        ldx     #>$0000
-        rts
-
-; ------------------------------------------------------------------------
-; LINE: Draw a line from X1/Y1 to X2/Y2, where X1/Y1 = ptr1/ptr2 and
-; X2/Y2 = ptr3/ptr4, using the current drawing color.
-;
-; Must set an error code: NO
-;
-
-LINE:
-        jsr     SETPIXEL
-        lda     X2
-        sub     X1
-        sta     PARAM1
-        lda     X2+1
-        sbc     X1+1
-        sta     PARAM1+1
-        lda     Y2
-        sub     Y1
-        sta     PARAM2
-        lda     Y2+1
-        sbc     Y1+1
-        sta     PARAM2+1
-        lda     MODE
-        sta     PARAM3
-        ldx     #>$0000
-        stx     PARAM3+1
-        jmp     DRAW
-
-; ------------------------------------------------------------------------
-; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where
-; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4, using the current drawing color.
-; Contrary to most other functions, the graphics kernel will sort and clip
-; the co-ordinates before calling the driver; so, on entry, the following
-; conditions are valid:
-;       X1 <= X2
-;       Y1 <= Y2
-;       (X1 >= 0) && (X1 < XRES)
-;       (X2 >= 0) && (X2 < XRES)
-;       (Y1 >= 0) && (Y1 < YRES)
-;       (Y2 >= 0) && (Y2 < YRES)
-;
-; Must set an error code: NO
-;
-
-BAR:
-        inc     Y2
-@L1:    lda     Y2
-        pha
-        lda     Y1
-        sta     Y2
-        jsr     LINE
-        pla
-        sta     Y2
-        inc     Y1
-        cmp     Y1
-        bne     @L1
-        rts
-
-; ------------------------------------------------------------------------
-; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scaling in the x
-; and y directions is passed in X/Y, the text direction is passed in A.
-;
-; Must set an error code: NO
-;
-
-TEXTSTYLE:
-        rts
-
-
-; ------------------------------------------------------------------------
-; OUTTEXT: Output text at x/y = ptr1/ptr2, using the current color and the
-; current text style. The text to output is given as a zero-terminated
-; string with its address in ptr3.
-;
-; Must set an error code: NO
-;
-
-OUTTEXT:
-        lda     Y1
-        sub     #(YSIZE - 1)
-        sta     PARAM2
-        lda     #3              ; (Move graphics cursor; don't draw)
-        jsr     mymode
-
-        ldy     #0
-@next:  lda     (ptr3),y
-        beq     @end
-        sta     PARAM1
-        lda     #0
-        sta     PARAM2
-        sta     PARAM1+1
-        sta     PARAM2+1
-        sta     PARAM3+1
-        lda     MODE
-        sta     PARAM3
-        tya
-        pha
-        jsr     CHAR
-        lda     #XSIZE
-        sta     PARAM1
-        lda     #0
-        sta     PARAM2
-        sta     PARAM1+1
-        sta     PARAM2+1
-        sta     PARAM3+1
-        lda     #3
-        sta     PARAM3
-        jsr     CURMOV
-        pla
-        tay
-        iny
-        bne     @next
-@end:   rts
diff --git a/libsrc/atmos/tgi/atmos-240-200-2.s b/libsrc/atmos/tgi/atmos-240-200-2.s
deleted file mode 100644 (file)
index 943ec53..0000000
+++ /dev/null
@@ -1,393 +0,0 @@
-;
-; Graphics driver for the 240x200x2 monochrome mode on the Atmos
-;
-; Stefan Haubenthal <polluks@sdf.lonestar.org>
-; 2014-09-10, Greg King <gregdk@users.sf.net>
-;
-
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-        .include        "atmos.inc"
-
-        .macpack        generic
-        .macpack        module
-
-XSIZE   =       6                       ; System font width
-YSIZE   =       8                       ; System font height
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table and constants.
-
-        module_header   _atmos_240_200_2_tgi
-
-; First part of the header is a structure that has a magic and defines the
-; capabilities of the driver
-
-        .byte   $74, $67, $69           ; "tgi"
-        .byte   TGI_API_VERSION         ; TGI API version number
-        .addr   $0000                   ; Library reference
-        .word   240                     ; X resolution
-        .word   200                     ; Y resolution
-        .byte   2                       ; Number of drawing colors
-        .byte   1                       ; Number of screens available
-        .byte   XSIZE                   ; System font X size
-        .byte   YSIZE                   ; System font Y size
-        .word   $011C                   ; Aspect ratio (based on 4/3 display)
-        .byte   0                       ; TGI driver flags
-
-; Next comes the jump table. Currently all entries must be valid and may point
-; to an RTS for test versions (function not implemented).
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   INIT
-        .addr   DONE
-        .addr   GETERROR
-        .addr   CONTROL
-        .addr   CLEAR
-        .addr   SETVIEWPAGE
-        .addr   SETDRAWPAGE
-        .addr   SETCOLOR
-        .addr   SETPALETTE
-        .addr   GETPALETTE
-        .addr   GETDEFPALETTE
-        .addr   SETPIXEL
-        .addr   GETPIXEL
-        .addr   LINE
-        .addr   BAR
-        .addr   TEXTSTYLE
-        .addr   OUTTEXT
-        .addr   0                       ; IRQ entry is unused
-
-; ------------------------------------------------------------------------
-; Data.
-
-; Variables mapped to the zero page segment variables. Some of these are
-; used for passing parameters to the driver.
-
-X1              := ptr1
-Y1              := ptr2
-X2              := ptr3
-Y2              := ptr4
-
-; Absolute variables used in the code
-
-.bss
-
-ERROR:          .res    1       ; Error code
-MODE:           .res    1       ; Graphics mode
-
-; Constant table
-
-.rodata
-
-DEFPALETTE:     .byte   0, 1
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. May
-; initialize anything that has to be done just once. Is probably empty
-; most of the time.
-;
-; Must set an error code: NO
-;
-
-INSTALL:
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory. May
-; clean up anything done by INSTALL but is probably empty most of the time.
-;
-; Must set an error code: NO
-;
-
-UNINSTALL:
-        rts
-
-; ------------------------------------------------------------------------
-; INIT: Changes an already installed device from text mode to graphics
-; mode.
-; Note that INIT/DONE may be called multiple times while the driver
-; is loaded, while INSTALL is only called once, so any code that is needed
-; to initializes variables and so on must go here. Setting palette and
-; clearing the screen is not needed because this is called by the graphics
-; kernel later.
-; The graphics kernel will never call INIT when a graphics mode is already
-; active, so there is no need to protect against that.
-;
-; Must set an error code: YES
-;
-
-INIT:
-
-; Switch into graphics mode
-
-        jsr     HIRES
-
-; Done, reset the error code
-
-        lda     #TGI_ERR_OK
-        sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; DONE: Will be called to switch the graphics device back into text mode.
-; The graphics kernel will never call DONE when no graphics mode is active,
-; so there is no need to protect against that.
-;
-; Must set an error code: NO
-;
-
-DONE            := TEXT
-
-; ------------------------------------------------------------------------
-; GETERROR: Return the error code in A and clear it.
-
-GETERROR:
-        ldx     #TGI_ERR_OK
-        lda     ERROR
-        stx     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; CONTROL: Platform/driver specific entry point.
-;
-; Must set an error code: YES
-;
-
-CONTROL:
-        sta     PATTERN
-        lda     #TGI_ERR_OK
-        sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; CLEAR: Clears the screen.
-;
-; Must set an error code: NO
-;
-
-CLEAR           := HIRES
-
-; ------------------------------------------------------------------------
-; SETVIEWPAGE: Set the visible page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-;
-; Must set an error code: NO (will only be called if page ok)
-;
-
-SETVIEWPAGE:
-
-; ------------------------------------------------------------------------
-; SETDRAWPAGE: Set the drawable page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-;
-; Must set an error code: NO (will only be called if page ok)
-;
-
-SETDRAWPAGE:
-        rts
-
-; ------------------------------------------------------------------------
-; SETCOLOR: Set the drawing color (in A). The new color is already checked
-; to be in a valid range (0..maxcolor-1).
-;
-; Must set an error code: NO (will only be called if color ok)
-;
-
-SETCOLOR:
-        sta     MODE
-        rts
-
-; ------------------------------------------------------------------------
-; SETPALETTE: Set the palette (not available with all drivers/hardware).
-; A pointer to the palette is passed in ptr1. Must set an error if palettes
-; are not supported
-;
-; Must set an error code: YES
-;
-
-SETPALETTE:
-        lda     #TGI_ERR_INV_FUNC       ; This resolution has no palette
-        sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; GETPALETTE: Return the current palette in A/X. Even drivers that cannot
-; set the palette should return the default palette here, so there's no
-; way for this function to fail.
-;
-; Must set an error code: NO
-;
-
-GETPALETTE:
-
-; ------------------------------------------------------------------------
-; GETDEFPALETTE: Return the default palette for the driver in A/X. All
-; drivers should return something reasonable here, even drivers that don't
-; support palettes, otherwise the caller has no way to determine the colors
-; of the (not changeable) palette.
-;
-; Must set an error code: NO (all drivers must have a default palette)
-;
-
-GETDEFPALETTE:
-        lda     #<DEFPALETTE
-        ldx     #>DEFPALETTE
-        rts
-
-; ------------------------------------------------------------------------
-; SETPIXEL: Draw one pixel at X1/Y1 = ptr1/ptr2 with the current drawing
-; color. The coordinates passed to this function are never outside the
-; visible screen area, so there is no need for clipping inside this function.
-;
-; Must set an error code: NO
-;
-
-SETPIXEL:
-        lda     Y1
-        sta     PARAM2
-        lda     MODE
-mymode: sta     PARAM3
-        lda     X1
-        sta     PARAM1
-        lda     #>$0000
-        sta     PARAM1+1
-        sta     PARAM2+1
-        sta     PARAM3+1
-        jmp     CURSET
-
-; ------------------------------------------------------------------------
-; GETPIXEL: Read the color value of a pixel and return it in A/X. The
-; coordinates passed to this function are never outside the visible screen
-; area, so there is no need for clipping inside this function.
-
-GETPIXEL:
-        lda     X1
-        sta     PARAM1
-        lda     Y1
-        sta     PARAM2
-        lda     #>$0000
-        sta     PARAM1+1
-        sta     PARAM2+1
-        jsr     POINT
-        lda     PARAM1
-        and     #%00000001
-        ldx     #>$0000
-        rts
-
-; ------------------------------------------------------------------------
-; LINE: Draw a line from X1/Y1 to X2/Y2, where X1/Y1 = ptr1/ptr2 and
-; X2/Y2 = ptr3/ptr4 using the current drawing color.
-;
-; Must set an error code: NO
-;
-
-LINE:
-        jsr     SETPIXEL
-        lda     X2
-        sub     X1
-        sta     PARAM1
-        lda     X2+1
-        sbc     X1+1
-        sta     PARAM1+1
-        lda     Y2
-        sub     Y1
-        sta     PARAM2
-        lda     Y2+1
-        sbc     Y1+1
-        sta     PARAM2+1
-        lda     MODE
-        sta     PARAM3
-        ldx     #>$0000
-        stx     PARAM3+1
-        jmp     DRAW
-
-; ------------------------------------------------------------------------
-; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where
-; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4 using the current drawing color.
-; Contrary to most other functions, the graphics kernel will sort and clip
-; the coordinates before calling the driver, so on entry the following
-; conditions are valid:
-;       X1 <= X2
-;       Y1 <= Y2
-;       (X1 >= 0) && (X1 < XRES)
-;       (X2 >= 0) && (X2 < XRES)
-;       (Y1 >= 0) && (Y1 < YRES)
-;       (Y2 >= 0) && (Y2 < YRES)
-;
-; Must set an error code: NO
-;
-
-BAR:
-        inc     Y2
-@L1:    lda     Y2
-        pha
-        lda     Y1
-        sta     Y2
-        jsr     LINE
-        pla
-        sta     Y2
-        inc     Y1
-        cmp     Y1
-        bne     @L1
-        rts
-
-; ------------------------------------------------------------------------
-; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scaling in X and Y
-; direction is passend in X/Y, the text direction is passed in A.
-;
-; Must set an error code: NO
-;
-
-TEXTSTYLE:
-        rts
-
-
-; ------------------------------------------------------------------------
-; OUTTEXT: Output text at X/Y = ptr1/ptr2 using the current color and the
-; current text style. The text to output is given as a zero terminated
-; string with address in ptr3.
-;
-; Must set an error code: NO
-;
-
-OUTTEXT:
-        lda     Y1
-        sub     #(YSIZE - 1)
-        sta     PARAM2
-        lda     #3              ; (Move graphics cursor; don't draw)
-        jsr     mymode
-
-        ldy     #0
-@next:  lda     (ptr3),y
-        beq     @end
-        sta     PARAM1
-        lda     #0
-        sta     PARAM2
-        sta     PARAM1+1
-        sta     PARAM2+1
-        sta     PARAM3+1
-        lda     MODE
-        sta     PARAM3
-        tya
-        pha
-        jsr     CHAR
-        lda     #XSIZE
-        sta     PARAM1
-        lda     #0
-        sta     PARAM2
-        sta     PARAM1+1
-        sta     PARAM2+1
-        sta     PARAM3+1
-        lda     #3
-        sta     PARAM3
-        jsr     CURMOV
-        pla
-        tay
-        iny
-        bne     @next
-@end:   rts
diff --git a/libsrc/atmos/tgi_colors.s b/libsrc/atmos/tgi_colors.s
deleted file mode 100644 (file)
index 6ef3729..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-;
-; Target-specific black & white values for use by the target-shared TGI kernel
-;
-
-        .include        "tgi-kernel.inc"
-
-        .export         tgi_color_black:zp = $00
-        .export         tgi_color_white:zp = $01
diff --git a/libsrc/atmos/tgi_stat_stddrv.s b/libsrc/atmos/tgi_stat_stddrv.s
deleted file mode 100644 (file)
index 7411f62..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Address of the static standard tgi driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void tgi_static_stddrv[];
-;
-
-        .export _tgi_static_stddrv
-        .import _atmos_240_200_2_tgi
-
-.rodata
-
-_tgi_static_stddrv := _atmos_240_200_2_tgi
diff --git a/libsrc/atmos/tgi_stddrv.s b/libsrc/atmos/tgi_stddrv.s
deleted file mode 100644 (file)
index d5c1a8e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Name of the standard tgi driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const char tgi_stddrv[];
-;
-
-        .export _tgi_stddrv
-
-.rodata
-
-_tgi_stddrv:    .asciiz "atmos-240-200-2.tgi"
diff --git a/libsrc/atmos/toascii.s b/libsrc/atmos/toascii.s
deleted file mode 100644 (file)
index 77f0500..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; char __fastcall__ toascii (char c);
-; /* Convert a target-specific character to ASCII. */
-;
-
-.export _toascii
-
-.proc   _toascii
-
-; .X must be zero, on return.
-        ldx     #>$0000
-        rts
-
-.endproc
diff --git a/libsrc/atmos/wherex.s b/libsrc/atmos/wherex.s
deleted file mode 100644 (file)
index 7a2dbad..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-04-13
-;
-; unsigned char wherex (void);
-;
-
-        .export         _wherex
-
-        .include        "atmos.inc"
-
-.proc   _wherex
-
-        ldx     #$00
-        lda     CURS_X
-        rts
-
-.endproc
-
diff --git a/libsrc/atmos/wherey.s b/libsrc/atmos/wherey.s
deleted file mode 100644 (file)
index 8a2b344..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-04-13
-;
-; unsigned char wherey (void);
-;
-
-        .export         _wherey
-
-        .include        "atmos.inc"
-
-.proc   _wherey
-
-        ldx     #$00
-        lda     CURS_Y
-        rts
-
-.endproc
-
-
diff --git a/libsrc/atmos/write.s b/libsrc/atmos/write.s
deleted file mode 100644 (file)
index c6399f2..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-04-13
-;
-; int write (int fd, const void* buf, int count);
-;
-; This function is a hack!
-;
-
-        .export         _write
-        .import         popax
-        .importzp       ptr1, ptr2, ptr3, tmp1
-
-        .include        "atmos.inc"
-
-.proc   _write
-
-        sta     ptr3
-        stx     ptr3+1          ; save count as result
-
-        eor     #$FF
-        sta     ptr2
-        txa
-        eor     #$FF
-        sta     ptr2+1          ; Remember -count-1
-
-        jsr     popax           ; get buf
-        sta     ptr1
-        stx     ptr1+1
-        jsr     popax           ; get fd and discard
-L1:     inc     ptr2
-        bne     L2
-        inc     ptr2+1
-        beq     L9
-L2:     ldy     #0
-        lda     (ptr1),y
-        tax
-        cpx     #$0A            ; Check for \n
-        bne     L3
-        jsr     PRINT
-        ldx     #$0D
-L3:     jsr     PRINT
-        inc     ptr1
-        bne     L1
-        inc     ptr1+1
-        jmp     L1
-
-; No error, return count
-
-L9:     lda     ptr3
-        ldx     ptr3+1
-        rts
-
-.endproc
-
-
diff --git a/libsrc/c128/_scrsize.s b/libsrc/c128/_scrsize.s
deleted file mode 100644 (file)
index ad01f40..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; Screen size variables
-;
-
-        .export         screensize
-
-        .include        "c128.inc"
-
-.proc   screensize
-
-        ldx     #40             ; Assume 40 column mode
-        bit     MODE
-        bpl     C40             ; Jump if 40 column mode
-        ldx     #80
-C40:    ldy     #25
-        rts
-
-.endproc
-
-
diff --git a/libsrc/c128/break.s b/libsrc/c128/break.s
deleted file mode 100644 (file)
index f2f872b..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-;
-; Ullrich von Bassewitz, 27.09.1998
-;
-; void set_brk (unsigned Addr);
-; void reset_brk (void);
-;
-
-        .export         _set_brk, _reset_brk
-        .destructor     _reset_brk
-        .export         _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
-        .importzp       ptr1
-
-        .include        "c128.inc"
-
-
-.bss
-_brk_a:         .res    1
-_brk_x:         .res    1
-_brk_y:         .res    1
-_brk_sr:        .res    1
-_brk_pc:        .res    2
-
-.data
-uservec:        jmp     $FFFF           ; Patched at runtime
-
-.code
-
-
-; Set the break vector
-.proc   _set_brk
-
-        sta     uservec+1
-        stx     uservec+2       ; Set the user vector
-
-        lda     brk_old+1
-        ora     brk_old+2       ; Did we save the vector already?
-        bne     @L1             ; Jump if we installed the handler already
-
-        lda     BRKVec          ; Save the old vector
-        sta     brk_old+1
-        lda     BRKVec+1
-        sta     brk_old+2
-
-        lda     #<brk_stub      ; Set the break vector to our stub
-        ldx     #>brk_stub
-        sta     BRKVec
-        stx     BRKVec+1
-
-        lda     #<brk_handler   ; Set the indirect vector to our handler
-        ldx     #>brk_handler
-        sta     brk_ind+1
-        stx     brk_ind+2
-
-@L1:    rts
-
-.endproc
-
-
-; Reset the break vector
-.proc   _reset_brk
-
-        lda     brk_old+1
-        ldx     brk_old+2
-        beq     @L9             ; Jump if vector not installed
-        sta     BRKVec
-        stx     BRKVec+1
-        lda     #$00
-        sta     brk_old+1       ; Clear the saved vector
-        sta     brk_old+2
-@L9:    rts
-
-.endproc
-
-
-
-; Break handler, called if a break occurs
-
-.proc   brk_handler
-
-        pla
-        sta     _brk_y
-        pla
-        sta     _brk_x
-        pla
-        sta     _brk_a
-        pla
-        and     #$EF            ; Clear break bit
-        sta     _brk_sr
-        pla                     ; PC low
-        sec
-        sbc     #2              ; Point to start of brk
-        sta     _brk_pc
-        pla                     ; PC high
-        sbc     #0
-        sta     _brk_pc+1
-
-        jsr     uservec         ; Call the user's routine
-
-        lda     _brk_pc+1
-        pha
-        lda     _brk_pc
-        pha
-        lda     _brk_sr
-        pha
-        ldx     _brk_x
-        ldy     _brk_y
-        lda     _brk_a
-        rti                     ; Jump back...
-
-.endproc
-
-
-; Break stub, must go into low (non banked) memory
-
-.segment        "LOWCODE"
-
-.proc   brk_stub
-        pla                             ; Get original MMU_CR value
-        sta     MMU_CR                  ; And set it
-        jmp     brk_ind                 ; Jump indirect to break
-.endproc
-
-; ------------------------------------------------------------------------
-; Data
-
-.data
-
-; Old break vector preceeded by a jump opcode
-brk_old:
-        jmp     $0000
-
-; Indirect vectors preceeded by a jump opcode
-brk_ind:
-        jmp     $0000
-
diff --git a/libsrc/c128/c64mode.s b/libsrc/c128/c64mode.s
deleted file mode 100644 (file)
index 053e67d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-02-13
-;
-; void c64mode (void);
-; /* Switch the C128 into C64 mode. Note: This function will not return! */
-;
-
-        .export         _c64mode
-        .import         C64MODE
-
-        _c64mode        = C64MODE
-
diff --git a/libsrc/c128/cgetc.s b/libsrc/c128/cgetc.s
deleted file mode 100644 (file)
index 46f13d1..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; char cgetc (void);
-;
-
-        .export         _cgetc
-        .constructor    initcgetc
-        .destructor     donecgetc
-
-        .import         cursor
-
-        .include        "c128.inc"
-
-;--------------------------------------------------------------------------
-
-_cgetc: lda     KEY_COUNT       ; Get number of characters
-        bne     L2              ; Jump if there are already chars waiting
-
-; Switch on the cursor if needed. We MUST always switch the cursor on, 
-; before switching it off, because switching it off will restore the 
-; character attribute remembered when it was switched on. So just switching
-; it off will restore the wrong character attribute.
-
-        jsr     CURS_SET        ; Set cursor to current position
-        jsr     CURS_ON
-        lda     cursor
-        bne     L1
-        lda     #$01
-        jsr     CURS_OFF
-L1:     lda     KEY_COUNT       ; Check characters again
-        beq     L1
-        jsr     CURS_OFF        ; Switch cursor off, if characters available
-
-L2:     jsr     KBDREAD         ; Read char and return in A
-        ldx     #0
-        rts
-
-;--------------------------------------------------------------------------
-; Module constructor/destructor
-
-.bss
-keyvec: .res    2
-
-.segment        "INIT"
-initcgetc:
-
-; Save the old vector
-
-        lda     KeyStoreVec
-        sta     keyvec
-        lda     KeyStoreVec+1
-        sta     keyvec+1
-
-; Set the new vector. I can only hope that this works for other C128
-; versions...
-
-        lda     #<$C6B7
-        ldx     #>$C6B7
-        jmp     SetVec
-
-.code
-donecgetc:
-        lda     keyvec
-        ldx     keyvec+1
-SetVec: sei
-        sta     KeyStoreVec
-        stx     KeyStoreVec+1
-        cli
-        rts
-
-
diff --git a/libsrc/c128/clrscr.s b/libsrc/c128/clrscr.s
deleted file mode 100644 (file)
index 2213be0..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; void clrscr (void);
-;
-
-        .export         _clrscr
-
-        .include        "c128.inc"
-
-_clrscr = CLRSCR
-
-
-
diff --git a/libsrc/c128/color.s b/libsrc/c128/color.s
deleted file mode 100644 (file)
index 9e6b853..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; unsigned char __fastcall__ textcolor (unsigned char color);
-; unsigned char __fastcall__ bgcolor (unsigned char color);
-; unsigned char __fastcall__ bordercolor (unsigned char color);
-;
-
-        .export         _textcolor, _bgcolor, _bordercolor
-        .import         return0
-
-        .include        "c128.inc"
-
-
-_textcolor:
-        bit     MODE            ; Check 80/40 column mode
-        bmi     @L1             ; Jump if 80 columns
-
-; 40 column mode
-
-        ldx     CHARCOLOR       ; Get the old color
-        sta     CHARCOLOR       ; Set the new color
-        txa                     ; Old color -> A
-        ldx     #$00            ; Load high byte
-        rts
-
-; 80 column mode
-
-@L1:    tax                     ; Move new color to X
-        lda     CHARCOLOR       ; Get old color + attributes
-        and     #$F0            ; Keep old attributes
-        ora     $CE5C,x         ; Translate VIC color -> VDC color
-        ldx     CHARCOLOR       ; Get the old color
-        sta     CHARCOLOR       ; Set the new color + old attributes
-        txa                     ; Old color -> A
-        and     #$0F            ; Mask out attributes
-        ldx     #$00            ; Load high byte
-
-; translate vdc->vic colour
-
-vdctovic:
-        ldy     #16
-@L2:    cmp     $CE5C-1,y
-        beq     @L3
-        dey
-        bne     @L2
-@L3:    tya
-        rts
-
-
-_bgcolor:
-        bit     MODE
-        bmi     @L1
-
-; 40 column mode
-
-        ldx     VIC_BG_COLOR0   ; get old value
-        sta     VIC_BG_COLOR0   ; set new value
-        txa
-        ldx     #$00
-        rts
-
-; 80 column mode
-
-@L1:    tax                     ; Move new color to X
-        lda     $CE5C,x         ; Translate VIC color -> VDC color
-        pha
-        ldx     #26
-        jsr     $CDDA           ; Read vdc register 26
-        jsr     vdctovic
-        tay
-        pla
-        ldx     #26
-        jsr     $CDCC           ; Write vdc register 26
-        tya
-        ldx     #$00
-        rts
-
-
-_bordercolor:
-        bit     MODE
-        bmi     @L1
-
-; 40 column mode
-
-        ldx     VIC_BORDERCOLOR ; get old value
-        sta     VIC_BORDERCOLOR ; set new value
-        txa
-        ldx     #$00
-        rts
-
-; 80 column mode
-
-@L1:    jmp     return0
-
diff --git a/libsrc/c128/conio.s b/libsrc/c128/conio.s
deleted file mode 100644 (file)
index 5193fb8..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; Low level stuff for screen output/console input
-;
-
-        .exportzp       CURS_X, CURS_Y
-
-        .include        "c128.inc"
-
diff --git a/libsrc/c128/cputc.s b/libsrc/c128/cputc.s
deleted file mode 100644 (file)
index e906c24..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-;
-; Ullrich von Bassewitz, 2000-08-06, 2002-12-21
-; Using lots of code from MagerValp, MagerValp@cling.gu.se
-;
-; void cputcxy (unsigned char x, unsigned char y, char c);
-; void cputc (char c);
-;
-
-        .export         _cputcxy, _cputc, cputdirect, putchar
-        .export         newline, plot
-        .import         popa, _gotoxy
-        .import         PLOT
-
-        .include        "c128.inc"
-
-newline         = NEWLINE
-
-;--------------------------------------------------------------------------
-
-.code
-
-_cputcxy:
-        pha                     ; Save C
-        jsr     popa            ; Get Y
-        jsr     _gotoxy         ; Set cursor, drop x
-        pla                     ; Restore C
-
-; Plot a character - also used as internal function
-
-_cputc: cmp     #$0A            ; CR?
-        beq     cr              ; Output a cr
-
-        cmp     #$0D            ; LF?
-        bne     L2
-        jmp     NEWLINE         ; Update cursor position
-
-; Printable char of some sort
-
-L2:     cmp     #' '
-        bcc     cputdirect      ; Other control char
-        tay
-        bmi     L5
-        cmp     #$60
-        bcc     L3
-        and     #$DF
-        bne     cputdirect      ; Branch always
-L3:     and     #$3F
-
-; Output one character to the screen. We will disable scrolling while doing so
-
-cputdirect:
-        tax                     ; Save output char
-        lda     SCROLL
-        pha                     ; Save scroll flag
-        lda     #$C0
-        sta     SCROLL          ; Disable scrolling
-        txa                     ; Restore output char
-        jsr     PRINT
-        pla
-        sta     SCROLL          ; Restore old scroll flag
-        rts
-
-; Handle character if high bit set
-
-L5:     and     #$7F
-        cmp     #$7E            ; PI?
-        bne     L6
-        lda     #$5E            ; Load screen code for PI
-        bne     cputdirect
-L6:     ora     #$40
-        bne     cputdirect      ; Branch always
-
-; Carriage return
-
-cr:     lda     #0
-        sta     CURS_X
-
-; Set cursor position, calculate RAM pointers
-
-plot:   ldy     CURS_X
-        ldx     CURS_Y
-        clc
-        jmp     PLOT            ; Set the new cursor
-
-; Write one character to the screen without doing anything else, return X
-; position in Y
-
-putchar = $CC2F
-
diff --git a/libsrc/c128/crt0.s b/libsrc/c128/crt0.s
deleted file mode 100644 (file)
index 9bfdca4..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-;
-; Startup code for cc65 (C128 version)
-;
-
-        .export         _exit
-        .export         __STARTUP__ : absolute = 1      ; Mark as startup
-        .import         initlib, donelib
-        .import         zerobss
-        .import         push0, callmain
-        .import         RESTOR, BSOUT, CLRCH
-        .import         __RAM_START__, __RAM_SIZE__, __STACKSIZE__
-        .importzp       ST
-
-        .include        "zeropage.inc"
-        .include        "c128.inc"
-
-
-; ------------------------------------------------------------------------
-; Startup code
-
-.segment        "STARTUP"
-
-Start:
-
-; Switch to the second charset.
-
-        lda     #14
-        jsr     BSOUT
-
-; Before doing anything else, we have to set up our banking configuration.
-; Otherwise, just the lowest 16K are actually RAM. Writing through the ROM
-; to the underlying RAM works; but, it is bad style.
-
-        lda     MMU_CR          ; Get current memory configuration...
-        pha                     ; ...and save it for later
-        lda     #MMU_CFG_CC65   ; Bank0 with Kernal ROM
-        sta     MMU_CR
-
-; Save the zero-page locations that we need.
-
-        ldx     #zpspace-1
-L1:     lda     sp,x
-        sta     zpsave,x
-        dex
-        bpl     L1
-
-; Clear the BSS data.
-
-        jsr     zerobss
-
-; Save some system stuff; and, set up the stack.
-
-        pla                     ; Get MMU setting
-        sta     mmusave
-
-        tsx
-        stx     spsave          ; Save the system stack pointer
-
-        lda     #<(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
-        sta     sp
-        lda     #>(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
-        sta     sp+1            ; Set argument stack ptr
-
-; Call the module constructors.
-
-        jsr     initlib
-
-; Set the bank for the file name to our execution bank. We must do this
-; *after* calling the constructors because some of them might depend on
-; the original value of this register.
-
-        lda     #0
-        sta     FNAM_BANK
-
-; Push the command-line arguments; and, call main().
-
-        jsr     callmain
-
-; Back from main() [this is also the exit() entry]. Run the module destructors.
-
-_exit:  pha                     ; Save the return code on stack
-        jsr     donelib
-
-; Copy back the zero-page stuff.
-
-        ldx     #zpspace-1
-L2:     lda     zpsave,x
-        sta     sp,x
-        dex
-        bpl     L2
-
-; Place the program return code into BASIC's status variable.
-
-        pla
-        sta     ST
-
-; Reset the stack and the memory configuration.
-
-        ldx     spsave
-        txs
-        ldx     mmusave
-        stx     MMU_CR
-
-; Done, return to BASIC.
-
-        rts
-
-; ------------------------------------------------------------------------
-; Data
-
-.segment        "ZPSAVE"
-
-zpsave: .res    zpspace
-
-; ------------------------------------------------------------------------
-
-.bss
-
-spsave: .res    1
-mmusave:.res    1
diff --git a/libsrc/c128/dbgbreak.s_ b/libsrc/c128/dbgbreak.s_
deleted file mode 100644 (file)
index a990717..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 10.08.1998
-;
-; unsigned DbgSetBreakVec (unsigned Addr);
-;
-
-        .export         _DbgSetBreakVec
-        .import         popax, utstax
-        
-        .include        "../cbm/cbm.inc"
-
-_DbgSetBreakVec:
-        jsr     popax           ; Get the new address
-        ldy     BRKVec
-        sta     BRKVec
-        lda     BRKVec+1
-        stx     BRKVec+1
-        tax
-        tya
-        jmp     utstax
-
-
-
-
diff --git a/libsrc/c128/devnum.s b/libsrc/c128/devnum.s
deleted file mode 100644 (file)
index 91d0ccc..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-;
-; Oliver Schmidt, 2010-02-14
-;
-
-        .include        "c128.inc"
-
-        .exportzp       devnum := DEVNUM
diff --git a/libsrc/c128/emd/c128-georam.s b/libsrc/c128/emd/c128-georam.s
deleted file mode 100644 (file)
index 7511c68..0000000
+++ /dev/null
@@ -1,353 +0,0 @@
-;
-; Extended memory driver for the GEORAM cartridge. Driver works without
-; problems when statically linked.
-;
-; Ullrich von Bassewitz, 2002-11-29
-;
-; GEORAM page size checking routine by
-; Marco van den Heuvel, 2010-01-21
-;
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c128_georam_emd
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-GR_WINDOW       = $DE00                 ; Address of GEORAM window
-GR_PAGE_LO      = $DFFE                 ; Page register low
-GR_PAGE_HI      = $DFFF                 ; Page register high
-
-; ------------------------------------------------------------------------
-; Data.
-
-.data
-
-pagecount:      .res    2               ; Number of available pages
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-        ldx     GR_WINDOW
-        cpx     GR_WINDOW
-        bne     @notpresent
-        inc     GR_WINDOW
-        cpx     GR_WINDOW
-        beq     @notpresent
-
-        lda     #4
-        jsr     check
-        cpy     GR_WINDOW
-        beq     @has64k
-        lda     #8
-        jsr     check
-        cpy     GR_WINDOW
-        beq     @has128k
-        lda     #16
-        jsr     check
-        cpy     GR_WINDOW
-        beq     @has256k
-        lda     #32
-        jsr     check
-        cpy     GR_WINDOW
-        beq     @has512k
-        lda     #64
-        jsr     check
-        cpy     GR_WINDOW
-        beq     @has1024k
-        lda     #128
-        jsr     check
-        cpy     GR_WINDOW
-        beq     @has2048k
-        ldx     #>16384
-        bne     @setok
-
-@has64k:
-        ldx     #>256
-        bne     @setok
-@has128k:
-        ldx     #>512
-        bne     @setok
-@has256k:
-        ldx     #>1024
-        bne     @setok
-@has512k:
-        ldx     #>2048
-        bne     @setok
-@has1024k:
-        ldx     #>4096
-        bne     @setok
-@has2048k:
-        ldx     #>8192
-        bne     @setok
-
-@notpresent:
-        lda     #<EM_ERR_NO_DEVICE
-        ldx     #>EM_ERR_NO_DEVICE
-        rts
-
-@setok:
-        lda     #0
-        sta     pagecount
-        stx     pagecount+1
-        lda     #<EM_ERR_OK
-        ldx     #>EM_ERR_OK
-        rts
-
-check:
-        ldx     #0
-        stx     GR_PAGE_LO
-        stx     GR_PAGE_HI
-        ldy     GR_WINDOW
-        iny
-        sta     GR_PAGE_HI
-        sty     GR_WINDOW
-        ldx     #0
-        stx     GR_PAGE_HI
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     pagecount
-        ldx     pagecount+1
-        rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-; The GeoRAM cartridge does not copy but actually map the window, so USE is
-; identical to MAP.
-
-USE     = MAP
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:    sta     tmp1
-        txa
-        asl     tmp1
-        rol     a
-        asl     tmp1
-        rol     a
-
-        sta     GR_PAGE_HI
-        lda     tmp1
-        lsr     a
-        lsr     a
-        sta     GR_PAGE_LO
-
-        lda     #<GR_WINDOW
-        ldx     #>GR_WINDOW
-
-; Use the RTS from COMMIT below to save a precious byte of storage
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT: rts
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYFROM:
-        jsr     setup
-
-; Setup is:
-;
-;   - ptr1 contains the struct pointer
-;   - ptr2 contains the linear memory buffer
-;   - ptr3 contains -(count-1)
-;   - tmp1 contains the low page register value
-;   - tmp2 contains the high page register value
-;   - X contains the page offset
-;   - Y contains zero
-
-        jmp     @L5
-
-@L1:    lda     GR_WINDOW,x
-        sta     (ptr2),y
-        iny
-        bne     @L2
-        inc     ptr2+1
-@L2:    inx
-        beq     @L4
-
-; Bump count and repeat
-
-@L3:    inc     ptr3
-        bne     @L1
-        inc     ptr3+1
-        bne     @L1
-        rts
-
-; Bump page register
-
-@L4:    inc     tmp1            ; Bump low page register
-        bit     tmp1            ; Check for overflow in bit 6
-        bvc     @L6             ; Jump if no overflow
-        inc     tmp2
-@L5:    lda     tmp2
-        sta     GR_PAGE_HI
-@L6:    lda     tmp1
-        sta     GR_PAGE_LO
-        jmp     @L3
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO:
-        jsr     setup
-
-; Setup is:
-;
-;   - ptr1 contains the struct pointer
-;   - ptr2 contains the linear memory buffer
-;   - ptr3 contains -(count-1)
-;   - tmp1 contains the low page register value
-;   - tmp2 contains the high page register value
-;   - X contains the page offset
-;   - Y contains zero
-
-        jmp     @L5
-
-@L1:    lda     (ptr2),y
-        sta     GR_WINDOW,x
-        iny
-        bne     @L2
-        inc     ptr2+1
-@L2:    inx
-        beq     @L4
-
-; Bump count and repeat
-
-@L3:    inc     ptr3
-        bne     @L1
-        inc     ptr3+1
-        bne     @L1
-        rts
-
-; Bump page register
-
-@L4:    inc     tmp1            ; Bump low page register
-        bit     tmp1            ; Check for overflow in bit 6
-        bvc     @L6             ; Jump if no overflow
-        inc     tmp2
-@L5:    lda     tmp2
-        sta     GR_PAGE_HI
-@L6:    lda     tmp1
-        sta     GR_PAGE_LO
-        jmp     @L3
-
-; ------------------------------------------------------------------------
-; Helper function for COPYFROM and COPYTO: Store the pointer to the request
-; structure and prepare data for the copy
-
-setup:  sta     ptr1
-        stx     ptr1+1          ; Save passed pointer
-
-; Get the page number from the struct and adjust it so that it may be used
-; with the hardware. That is: lower 6 bits in tmp1, high bits in tmp2.
-
-        ldy     #EM_COPY::PAGE+1
-        lda     (ptr1),y
-        sta     tmp2
-        dey
-        lda     (ptr1),y
-        asl     a
-        rol     tmp2
-        asl     a
-        rol     tmp2
-        lsr     a
-        lsr     a
-        sta     tmp1
-
-; Get the buffer pointer into ptr2
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr1),y
-        sta     ptr2
-        iny
-        lda     (ptr1),y
-        sta     ptr2+1
-
-; Get the count, calculate -(count-1) and store it into ptr3
-
-        ldy     #EM_COPY::COUNT
-        lda     (ptr1),y
-        eor     #$FF
-        sta     ptr3
-        iny
-        lda     (ptr1),y
-        eor     #$FF
-        sta     ptr3+1
-
-; Get the page offset into X and clear Y
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr1),y
-        tax
-        ldy     #$00
-
-; Done
-
-        rts
-
-
diff --git a/libsrc/c128/emd/c128-ram.s b/libsrc/c128/emd/c128-ram.s
deleted file mode 100644 (file)
index bef0a15..0000000
+++ /dev/null
@@ -1,292 +0,0 @@
-;
-; Extended memory driver for the C128 RAM in bank #1. Driver works without
-; problems when statically linked.
-;
-; Ullrich von Bassewitz, 2002-12-04
-;
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-        .include        "c128.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c128_ram_emd
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-BASE    = $400
-TOPMEM  = $FF00
-PAGES   = (TOPMEM - BASE) / 256
-
-; ------------------------------------------------------------------------
-; Data.
-
-.bss
-curpage:        .res    1               ; Current page number
-
-window:         .res    256             ; Memory "window"
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-        ldx     #$FF
-        stx     curpage
-        stx     curpage+1               ; Invalidate the current page
-        inx
-        txa                             ; A = X = EM_ERR_OK
-        rts
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     #<PAGES
-        ldx     #>PAGES
-        rts
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:    sta     curpage
-        stx     curpage+1               ; Remember the new page
-
-        clc
-        adc     #>BASE
-        sta     ptr1+1
-        ldy     #$00
-        sty     ptr1
-
-        lda     #<ptr1
-        sta     FETVEC
-
-; Transfer one page
-
-@L1:    ldx     #MMU_CFG_RAM1
-        jsr     FETCH
-        sta     window,y
-        iny
-        bne     @L1
-
-; Return the memory window
-
-        lda     #<window
-        ldx     #>window                ; Return the window address
-        rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-
-USE:    sta     curpage
-        stx     curpage+1               ; Remember the page
-        lda     #<window
-        ldx     #>window                ; Return the window
-        rts
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT: lda     curpage                 ; Get the current page
-        ldx     curpage+1
-        bmi     done                    ; Jump if no page mapped
-
-        clc
-        adc     #>BASE
-        sta     ptr1+1
-        ldy     #$00
-        sty     ptr1
-
-        lda     #<ptr1
-        sta     STAVEC
-
-; Transfer one page. Y must be zero on entry
-
-@L1:    lda     window,y
-        ldx     #MMU_CFG_RAM1
-        jsr     STASH
-        iny
-        bne     @L1
-
-; Done
-
-done:   rts
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYFROM:
-        sta     ptr3
-        stx     ptr3+1                  ; Save the passed em_copy pointer
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr3),y
-        sta     ptr1
-        ldy     #EM_COPY::PAGE
-        lda     (ptr3),y
-        clc
-        adc     #>BASE
-        sta     ptr1+1                  ; From
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr3),y
-        sta     ptr2
-        iny
-        lda     (ptr3),y
-        sta     ptr2+1                  ; To
-
-        lda     #<ptr1
-        sta     FETVEC
-
-        ldy     #EM_COPY::COUNT+1
-        lda     (ptr3),y                ; Get number of pages
-        beq     @L2                     ; Skip if no full pages
-        sta     tmp1
-
-; Copy full pages
-
-        ldy     #$00
-@L1:    ldx     #MMU_CFG_RAM1
-        jsr     FETCH
-        sta     (ptr2),y
-        iny
-        bne     @L1
-        inc     ptr1+1
-        inc     ptr2+1
-        dec     tmp1
-        bne     @L1
-
-; Copy the remainder of the page
-
-@L2:    ldy     #EM_COPY::COUNT
-        lda     (ptr3),y                ; Get bytes in last page
-        beq     @L4
-        sta     tmp1
-
-        ldy     #$00
-@L3:    ldx     #MMU_CFG_RAM1
-        jsr     FETCH
-        sta     (ptr2),y
-        iny
-        dec     tmp1
-        bne     @L3
-
-; Done
-
-@L4:    rts
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO: sta     ptr3
-        stx     ptr3+1                  ; Save the passed em_copy pointer
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr3),y
-        sta     ptr1
-        ldy     #EM_COPY::PAGE
-        lda     (ptr3),y
-        clc
-        adc     #>BASE
-        sta     ptr1+1                  ; To
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr3),y
-        sta     ptr2
-        iny
-        lda     (ptr3),y
-        sta     ptr2+1                  ; From
-
-        lda     #<ptr1
-        sta     STAVEC
-
-        ldy     #EM_COPY::COUNT+1
-        lda     (ptr3),y                ; Get number of pages
-        beq     @L2                     ; Skip if no full pages
-        sta     tmp1
-
-; Copy full pages
-
-        ldy     #$00
-@L1:    lda     (ptr2),y
-        ldx     #MMU_CFG_RAM1
-        jsr     STASH
-        iny
-        bne     @L1
-        inc     ptr1+1
-        inc     ptr2+1
-        dec     tmp1
-        bne     @L1
-
-; Copy the remainder of the page
-
-@L2:    ldy     #EM_COPY::COUNT
-        lda     (ptr3),y                ; Get bytes in last page
-        beq     @L4
-        sta     tmp1
-
-        ldy     #$00
-@L3:    lda     (ptr2),y
-        ldx     #MMU_CFG_RAM1
-        jsr     STASH
-        iny
-        dec     tmp1
-        bne     @L3
-
-; Done
-
-@L4:    rts
-
diff --git a/libsrc/c128/emd/c128-ram2.s b/libsrc/c128/emd/c128-ram2.s
deleted file mode 100644 (file)
index 7d2703f..0000000
+++ /dev/null
@@ -1,430 +0,0 @@
-;
-; Extended memory driver for the C128 RAM in banks #1, #2 and #3. Driver works without
-; problems when statically linked.
-;
-; Ullrich von Bassewitz, 2002-12-04
-;
-; Updated to use banks 2 and 3 as well by
-; Marco van den Heuvel, 2010-01-21
-;
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-        .include        "c128.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c128_ram2_emd
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-BASE    = $400
-
-; ------------------------------------------------------------------------
-; Data.
-
-.bss
-curpage:        .res    2               ; Current page number
-curbank:        .res    1               ; Current bank number
-copybank:       .res    2               ; temp bank number
-
-window:         .res    256             ; Memory "window"
-
-pagecount:      .res    2               ; Number of available pages
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-        ldx     #0
-        stx     ptr1
-        ldx     #4
-        stx     ptr1+1
-        ldx     #<ptr1
-        stx     FETVEC
-        stx     STAVEC
-        ldy     #0
-        ldx     #MMU_CFG_RAM1
-        jsr     FETCH
-        sta     tmp1
-        ldx     #MMU_CFG_RAM3
-        jsr     FETCH
-        cmp     tmp1
-        bne     @has_4_banks
-        tax
-        inx
-        txa
-        ldx     #MMU_CFG_RAM1
-        jsr     STASH
-        ldx     #MMU_CFG_RAM3
-        jsr     FETCH
-        cmp     tmp1
-        beq     @has_4_banks
-        ldx     #0
-        lda     #251
-        bne     @setok
-
-@has_4_banks:
-        ldx     #2
-        lda     #241
-@setok:
-        sta     pagecount
-        stx     pagecount+1
-        ldx     #$FF
-        stx     curpage
-        stx     curpage+1       ; Invalidate the current page
-        inx
-        txa                     ; A = X = EM_ERR_OK
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     pagecount
-        ldx     pagecount+1
-        rts
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:    sei
-        sta     curpage
-        stx     curpage+1               ; Remember the new page
-
-        jsr     calculate_bank_and_correct_page
-        stx     curbank
-
-        clc
-        adc     #>BASE
-        sta     ptr1+1
-        ldy     #$00
-        sty     ptr1
-        lda     #<ptr1
-        sta     FETVEC
-
-; Transfer one page
-
-@L1:    ldx     curbank
-        jsr     getcurbankmmu
-        jsr     FETCH
-        sta     window,y
-        iny
-        bne     @L1
-
-; Return the memory window
-
-        lda     #<window
-        ldx     #>window                ; Return the window address
-        cli
-        rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-
-USE:    sta     curpage
-        stx     curpage+1               ; Remember the page
-        lda     #<window
-        ldx     #>window                ; Return the window
-        rts
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT: sei
-        lda     curpage                 ; Get the current page
-        ldx     curpage+1
-        bmi     done                    ; Jump if no page mapped
-
-        jsr     calculate_bank_and_correct_page
-        stx     curbank
-
-        clc
-        adc     #>BASE
-        sta     ptr1+1
-        ldy     #$00
-        sty     ptr1
-
-        lda     #<ptr1
-        sta     STAVEC
-
-; Transfer one page. Y must be zero on entry
-
-@L1:    lda     window,y
-        ldx     curbank
-        jsr     getcurbankmmu
-        jsr     STASH
-        iny
-        bne     @L1
-        cli
-
-; Done
-
-done:   rts
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYFROM:
-        sei
-        jsr     setup
-
-; Setup is:
-;
-;   - ptr1 contains the struct pointer
-;   - ptr2 contains the linear memory buffer
-;   - ptr3 contains -(count-1)
-;   - ptr4 contains the page buffer and offset
-;   - tmp1 contains the bank
-;   - tmp2 contains zero (used for linear memory buffer offset)
-
-        lda     #<ptr4
-        sta     FETVEC
-        jmp     @L3
-
-@L1:    ldx     tmp1
-        jsr     getcurbankmmu
-        ldy     #0
-        jsr     FETCH
-        ldy     tmp2
-        sta     (ptr2),y
-        inc     tmp2
-        bne     @L2
-        inc     ptr2+1
-@L2:    inc     ptr4
-        beq     @L4
-
-; Bump count and repeat
-
-@L3:    inc     ptr3
-        bne     @L1
-        inc     ptr3+1
-        bne     @L1
-        cli
-        rts
-
-; Bump page register
-
-@L4:    inc     ptr4+1
-        lda     ptr4+1
-        cmp     #$ff
-        bne     @L3
-        lda     #4
-        sta     ptr4+1
-        inc     tmp1
-@L5:
-        jmp     @L3
-
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO:
-        sei
-        jsr     setup
-
-; Setup is:
-;
-;   - ptr1 contains the struct pointer
-;   - ptr2 contains the linear memory buffer
-;   - ptr3 contains -(count-1)
-;   - ptr4 contains the page buffer and offset
-;   - tmp1 contains the bank
-;   - tmp2 contains zero (used for linear memory buffer offset)
-
-        lda     #<ptr4
-        sta     STAVEC
-        jmp     @L3
-
-@L1:
-        ldy     tmp2
-        lda     (ptr2),y
-        ldx     tmp1
-        jsr     getcurbankmmu
-        ldy     #0
-        jsr     STASH
-        inc     tmp2
-        bne     @L2
-        inc     ptr2+1
-@L2:    inc     ptr4
-        beq     @L4
-
-; Bump count and repeat
-
-@L3:    inc     ptr3
-        bne     @L1
-        inc     ptr3+1
-        bne     @L1
-        cli
-        rts
-
-; Bump page register
-
-@L4:    inc     ptr4+1
-        lda     ptr4+1
-        cmp     #$ff
-        bne     @L3
-        inc     tmp1
-        lda     #4
-        sta     ptr4+1
-@L5:
-        jmp     @L3
-
-; ------------------------------------------------------------------------
-; Helper function to calculate the correct bank and page
-; when addressing bank 2 or 3
-
-calculate_bank_and_correct_page:
-        cpx     #2
-        beq     @calculate_bank_3_with_2
-        cpx     #1
-        beq     @calculate_bank_2_or_3_with_1
-        sec
-        sbc     #251
-        bcs     @calculate_bank_2_with_0
-        ldx     #1
-        lda     curpage
-        rts
-
-@calculate_bank_3_with_2:
-        lda     curpage
-        clc
-        adc     #10
-@calculate_bank_3_with_1:
-        ldx     #3
-        rts
-
-@calculate_bank_2_or_3_with_1:
-        sec
-        sbc     #246
-        bcs     @calculate_bank_3_with_1
-        lda     curpage
-        clc
-        adc     #5
-@calculate_bank_2_with_0:
-        ldx     #2
-        rts
-
-; ------------------------------------------------------------------------
-; Helper function to get the correct mmu value in x
-
-getcurbankmmu:
-        cpx     #1
-        beq     @bank1
-        cpx     #2
-        beq     @bank2
-        ldx     #MMU_CFG_RAM3
-        rts
-@bank2:
-        ldx     #MMU_CFG_RAM2
-        rts
-@bank1:
-        ldx     #MMU_CFG_RAM1
-        rts
-
-; ------------------------------------------------------------------------
-; Helper function for COPYFROM and COPYTO: Store the pointer to the request
-; structure and prepare data for the copy
-
-setup:  sta     ptr1
-        stx     ptr1+1          ; Save passed pointer
-
-; Get the page number from the struct and adjust it so that it may be used
-; with the hardware. That is: page pointer in ptr4 and bank in tmp1
-
-        ldy     #EM_COPY::PAGE+1
-        lda     (ptr1),y
-        tax
-        dey
-        lda     (ptr1),y
-        sta     curpage
-        jsr     calculate_bank_and_correct_page
-        clc
-        adc     #4
-        sta     ptr4+1
-        stx     tmp1
-
-; Get the buffer pointer into ptr2
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr1),y
-        sta     ptr2
-        iny
-        lda     (ptr1),y
-        sta     ptr2+1
-
-; Get the count, calculate -(count-1) and store it into ptr3
-
-        ldy     #EM_COPY::COUNT
-        lda     (ptr1),y
-        eor     #$FF
-        sta     ptr3
-        iny
-        lda     (ptr1),y
-        eor     #$FF
-        sta     ptr3+1
-
-; Get the page offset into the low byte of ptr4 clear tmp2
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr1),y
-        sta     ptr4
-        lda     #0
-        sta     tmp2
-
-; Done
-
-        rts
diff --git a/libsrc/c128/emd/c128-ramcart.s b/libsrc/c128/emd/c128-ramcart.s
deleted file mode 100644 (file)
index e72d053..0000000
+++ /dev/null
@@ -1,296 +0,0 @@
-;
-; Extended memory driver for the RamCart 64/128KB cartridge. Driver works
-; without problems when statically linked.
-; Code is based on GEORAM code by Ullrich von Bassewitz.
-; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
-; 06,22.12.2002
-;
-
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c128_ramcart_emd
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-RAMC_WINDOW       = $DF00               ; Address of RamCart window
-RAMC_PAGE_LO      = $DE00               ; Page register low
-RAMC_PAGE_HI      = $DE01               ; Page register high (only for RC128)
-
-; ------------------------------------------------------------------------
-; Data.
-
-.bss
-
-pagecount:      .res    2               ; Number of pages available
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-        ldx     RAMC_WINDOW
-        cpx     RAMC_WINDOW
-        bne     @notpresent
-
-        lda     #0
-        sta     RAMC_PAGE_LO
-        sta     RAMC_PAGE_HI
-        ldx     RAMC_WINDOW
-        cpx     RAMC_WINDOW
-        bne     @notpresent
-        lda     #2
-        sta     RAMC_WINDOW
-        cmp     RAMC_WINDOW
-        beq     @cont
-        cpx     RAMC_WINDOW
-        beq     @readonly
-@cont:  ldy     #1
-        sty     RAMC_PAGE_HI
-        sty     RAMC_WINDOW
-        dey
-        sty     RAMC_PAGE_HI
-        iny
-        cpy     RAMC_WINDOW
-        beq     @rc64
-        ; we're on rc128
-        ldx     #>512
-        bne     @setsize
-@rc64:  ldx     #>256
-@setsize:
-        lda     #0
-        sta     pagecount
-        stx     pagecount+1
-        lda     #<EM_ERR_OK
-        ldx     #>EM_ERR_OK
-        rts
-@notpresent:
-@readonly:
-        lda     #<EM_ERR_NO_DEVICE
-        ldx     #>EM_ERR_NO_DEVICE
-;       rts                             ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     pagecount
-        ldx     pagecount+1
-        rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-; The RamCart cartridge does not copy but actually map the window, so USE is
-; identical to MAP.
-
-USE     = MAP
-
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:    sta     RAMC_PAGE_LO
-        stx     RAMC_PAGE_HI
-        lda     #<RAMC_WINDOW
-        ldx     #>RAMC_WINDOW
-
-; Use the RTS from COMMIT below to save a precious byte of storage
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT: rts
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYFROM:
-        jsr     setup
-
-; Setup is:
-;
-;   - ptr1 contains the struct pointer
-;   - ptr2 contains the linear memory buffer
-;   - ptr3 contains -(count-1)
-;   - tmp1 contains the low page register value
-;   - tmp2 contains the high page register value
-;   - X contains the page offset
-;   - Y contains zero
-
-        jmp     @L5
-
-@L1:    lda     RAMC_WINDOW,x
-        sta     (ptr2),y
-        iny
-        bne     @L2
-        inc     ptr2+1
-@L2:    inx
-        beq     @L4
-
-; Bump count and repeat
-
-@L3:    inc     ptr3
-        bne     @L1
-        inc     ptr3+1
-        bne     @L1
-        rts
-
-; Bump page register
-
-@L4:    inc     tmp1
-        bne     @L5
-        inc     tmp2
-@L5:    lda     tmp1
-        sta     RAMC_PAGE_LO
-        lda     tmp2
-        sta     RAMC_PAGE_HI
-        jmp     @L3
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO:
-        jsr     setup
-
-; Setup is:
-;
-;   - ptr1 contains the struct pointer
-;   - ptr2 contains the linear memory buffer
-;   - ptr3 contains -(count-1)
-;   - tmp1 contains the low page register value
-;   - tmp2 contains the high page register value
-;   - X contains the page offset
-;   - Y contains zero
-
-        jmp     @L5
-
-@L1:    lda     (ptr2),y
-        sta     RAMC_WINDOW,x
-        iny
-        bne     @L2
-        inc     ptr2+1
-@L2:    inx
-        beq     @L4
-
-; Bump count and repeat
-
-@L3:    inc     ptr3
-        bne     @L1
-        inc     ptr3+1
-        bne     @L1
-        rts
-
-; Bump page register
-
-@L4:    inc     tmp1
-        bne     @L5
-        inc     tmp2
-@L5:    lda     tmp1
-        sta     RAMC_PAGE_LO
-        lda     tmp2
-        sta     RAMC_PAGE_HI
-        jmp     @L3
-
-; ------------------------------------------------------------------------
-; Helper function for COPYFROM and COPYTO: Store the pointer to the request
-; structure and prepare data for the copy
-
-setup:  sta     ptr1
-        stx     ptr1+1          ; Save passed pointer
-
-; Get the page number from the struct and adjust it so that it may be used
-; with the hardware. That is: lower 6 bits in tmp1, high bits in tmp2.
-
-        ldy     #EM_COPY::PAGE+1
-        lda     (ptr1),y
-        sta     tmp2
-        dey
-        lda     (ptr1),y
-        sta     tmp1
-
-; Get the buffer pointer into ptr2
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr1),y
-        sta     ptr2
-        iny
-        lda     (ptr1),y
-        sta     ptr2+1
-
-; Get the count, calculate -(count-1) and store it into ptr3
-
-        ldy     #EM_COPY::COUNT
-        lda     (ptr1),y
-        eor     #$FF
-        sta     ptr3
-        iny
-        lda     (ptr1),y
-        eor     #$FF
-        sta     ptr3+1
-
-; Get the page offset into X and clear Y
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr1),y
-        tax
-        ldy     #$00
-
-; Done
-
-        rts
-
diff --git a/libsrc/c128/emd/c128-reu.s b/libsrc/c128/emd/c128-reu.s
deleted file mode 100644 (file)
index a858c59..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-;
-; Extended memory driver for the Commodore REU. Driver works without
-; problems when statically linked.
-;
-; Ullrich von Bassewitz, 2002-11-29
-;
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-        .include        "c128.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c128_reu_emd
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-REU_STATUS      = $DF00                 ; Status register
-REU_COMMAND     = $DF01                 ; Command register
-REU_C64ADDR     = $DF02                 ; C64 base address register
-REU_REUADDR     = $DF04                 ; REU base address register
-REU_COUNT       = $DF07                 ; Transfer count register
-REU_IRQMASK     = $DF09                 ; IRQ mask register
-REU_CONTROL     = $DF0A                 ; Control register
-REU_TRIGGER     = $FF00                 ; REU command trigger
-
-OP_COPYFROM     = $ED
-OP_COPYTO       = $EC
-
-
-; ------------------------------------------------------------------------
-; Data.
-
-.bss
-pagecount:      .res    2               ; Number of pages available
-curpage:        .res    2               ; Current page number
-
-window:         .res    256             ; Memory "window"
-
-reu_params:     .word   $0000           ; Host address, lo, hi
-                .word   $0000           ; Exp  address, lo, hi
-                .byte   $00             ; Expansion  bank no.
-                .word   $0000           ; # bytes to move, lo, hi
-                .byte   $00             ; Interrupt mask reg.
-                .byte   $00             ; Adress control reg.
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-        ldx     #$00                    ; High byte of return code
-        lda     #$55
-        sta     REU_REUADDR
-        cmp     REU_REUADDR             ; Check for presence of REU
-        bne     nodevice
-        asl     a                       ; A = $AA
-        sta     REU_REUADDR
-        cmp     REU_REUADDR             ; Check for presence of REU
-        bne     nodevice
-
-        ldy     #>(128*4)               ; Assume 128KB
-        lda     REU_STATUS
-        and     #$10                    ; Check size bit
-        beq     @L1
-        ldy     #>(256*4)               ; 256KB when size bit is set
-@L1:    sty     pagecount+1
-
-        ldy     #$FF
-        sty     curpage
-        sty     curpage+1               ; Invalidate the current page
-        txa                             ; X = A = EM_ERR_OK
-        rts
-
-; No REU found
-
-nodevice:
-        lda     #EM_ERR_NO_DEVICE
-;       rts                             ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     pagecount
-        ldx     pagecount+1
-        rts
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:    sta     curpage
-        stx     curpage+1               ; Remember the new page
-
-        ldy     #OP_COPYFROM
-        jsr     common                  ; Copy the window
-
-        lda     #<window
-        ldx     #>window                ; Return the window address
-done:   rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-
-USE:    sta     curpage
-        stx     curpage+1               ; Remember the page
-        lda     #<window
-        ldx     #>window                ; Return the window
-        rts
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT: lda     curpage
-        ldx     curpage+1               ; Do we have a page mapped?
-        bmi     done                    ; Jump if no page mapped
-
-        ldy     #OP_COPYTO
-common: sty     tmp1
-
-        ldy     #<window
-        sty     REU_C64ADDR
-        ldy     #>window
-        sty     REU_C64ADDR+1
-
-        ldy     #0
-        sty     REU_REUADDR+0
-        sta     REU_REUADDR+1
-        stx     REU_REUADDR+2
-
-        sty     REU_COUNT+0
-        ldy     #1
-        sty     REU_COUNT+1             ; Move 256 bytes
-        bne     transfer1               ; Transfer 256 bytes into REU
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYFROM:
-        ldy     #OP_COPYFROM
-        .byte   $2C
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO:
-        ldy     #OP_COPYTO
-        sty     tmp1
-
-; Remember the passed pointer
-
-        sta     ptr1
-        stx     ptr1+1          ; Save the pointer
-
-; The structure passed to the functions has the same layout as the registers
-; of the Commodore REU, so register programming is easy.
-
-        ldy     #7-1
-@L1:    lda     (ptr1),y
-        sta     REU_C64ADDR,y
-        dey
-        bpl     @L1
-
-; Invalidate the page in the memory window
-
-        sty     curpage+1       ; Y = $FF
-
-; Reload the REU command and start the transfer
-
-transfer1:
-        ldy     tmp1
-
-; Transfer subroutine for the REU. Expects command in Y.
-
-transfer:
-        sty     REU_COMMAND     ; Issue command
-
-        ldy     MMU_CR          ; Save the current MMU settings
-        lda     #MMU_CFG_RAM0   ;
-        sei                     ;
-        sta     MMU_CR          ; Enable RAM in bank #0
-        lda     REU_TRIGGER     ; Don't change $FF00
-        sta     REU_TRIGGER     ; Start the transfer...
-
-        sty     MMU_CR          ; Restore the old configuration
-        cli
-        rts
-
diff --git a/libsrc/c128/emd/c128-vdc.s b/libsrc/c128/emd/c128-vdc.s
deleted file mode 100644 (file)
index d915fdf..0000000
+++ /dev/null
@@ -1,385 +0,0 @@
-;
-; Extended memory driver for the VDC RAM available on all C128 machines
-; (based on code by Ullrich von Bassewitz)
-; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
-; 06,20.12.2002
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c128_vdc_emd
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-VDC_ADDR_REG      = $D600                 ; VDC address
-VDC_DATA_REG      = $D601                 ; VDC data
-
-VDC_DATA_HI       = 18                    ; used registers
-VDC_DATA_LO       = 19
-VDC_CSET          = 28
-VDC_DATA          = 31
-
-; ------------------------------------------------------------------------
-; Data.
-
-.data
-
-pagecount:      .word  64                  ; $0000-$3fff as 16k default
-curpage:        .word  $ffff               ; currently mapped-in page (invalid)
-
-.bss
-
-window:         .res    256                ; memory window
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-        ; do test for VDC presence here???
-
-        ldx     #VDC_CSET       ; determine size of RAM...
-        jsr     vdcgetreg
-        sta     tmp1
-        ora     #%00010000
-        jsr     vdcputreg       ; turn on 64k
-
-        jsr     settestadr1     ; save original value of test byte
-        jsr     vdcgetbyte
-        sta     tmp2
-
-        lda     #$55            ; write $55 here
-        ldy     #ptr1
-        jsr     test64k         ; read it here and there
-        lda     #$aa            ; write $aa here
-        ldy     #ptr2
-        jsr     test64k         ; read it here and there
-
-        jsr     settestadr1
-        lda     tmp2
-        jsr     vdcputbyte      ; restore original value of test byte
-
-        lda     ptr1            ; do bytes match?
-        cmp     ptr1+1
-        bne     @have64k
-        lda     ptr2
-        cmp     ptr2+1
-        bne     @have64k
-
-        ldx     #VDC_CSET
-        lda     tmp1
-        jsr     vdcputreg       ; restore 16/64k flag
-        jmp     @endok          ; and leave default values for 16k
-
-@have64k:
-        lda     #<256
-        ldx     #>256
-        sta     pagecount
-        stx     pagecount+1
-@endok:
-        lda     #<EM_ERR_OK
-        ldx     #>EM_ERR_OK
-        rts
-
-test64k:
-        sta     tmp1
-        sty     ptr3
-        lda     #0
-        sta     ptr3+1
-        jsr     settestadr1
-        lda     tmp1
-        jsr     vdcputbyte              ; write $55
-        jsr     settestadr1
-        jsr     vdcgetbyte              ; read here
-        pha
-        jsr     settestadr2
-        jsr     vdcgetbyte              ; and there
-        ldy     #1
-        sta     (ptr3),y
-        pla
-        dey
-        sta     (ptr3),y
-        rts
-
-settestadr1:
-        ldy     #$02                    ; test page 2 (here)
-        .byte   $2c
-settestadr2:
-        ldy     #$42                    ; or page 64+2 (there)
-        lda     #0
-        jmp     vdcsetsrcaddr
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        ;on C128 restore font and clear the screen?
-        rts
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     pagecount
-        ldx     pagecount+1
-        rts
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:    sta     curpage
-        stx     curpage+1
-        sta     ptr1+1
-        ldy     #0
-        sty     ptr1
-
-        lda     #<window
-        sta     ptr2
-        lda     #>window
-        sta     ptr2+1
-
-        jsr     transferin
-
-        lda     #<window
-        ldx     #>window
-        rts
-
-; copy a single page from (ptr1):VDCRAM to (ptr2):RAM
-
-transferin:
-        lda     ptr1
-        ldy     ptr1+1
-        jsr     vdcsetsrcaddr           ; set source address in VDC
-        ldy     #0
-        ldx     #VDC_DATA
-        stx     VDC_ADDR_REG
-@L0:    bit     VDC_ADDR_REG
-        bpl     @L0
-        lda     VDC_DATA_REG            ; get 2 bytes at a time to speed-up
-        sta     (ptr2),y                ; (in fact up to 8 bytes could be fetched with special VDC config)
-        iny
-        lda     VDC_DATA_REG
-        sta     (ptr2),y
-        iny
-        bne     @L0
-        rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-
-USE:    sta     curpage
-        stx     curpage+1               ; Remember the page
-        lda     #<window
-        ldx     #>window                ; Return the window
-done:   rts
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT:
-        lda     curpage                 ; jump if no page mapped
-        ldx     curpage+1
-        bmi     done
-        sta     ptr1+1
-        ldy     #0
-        sty     ptr1
-
-        lda     #<window
-        sta     ptr2
-        lda     #>window
-        sta     ptr2+1
-
-; fall through to transferout
-
-; copy a single page from (ptr2):RAM to (ptr1):VDCRAM
-
-transferout:
-        lda     ptr1
-        ldy     ptr1+1
-        jsr     vdcsetsrcaddr           ; set source address in VDC
-        ldy     #0
-        ldx     #VDC_DATA
-        stx     VDC_ADDR_REG
-@L0:    bit     VDC_ADDR_REG
-        bpl     @L0
-        lda     (ptr2),y                ; speedup does not work for writing
-        sta     VDC_DATA_REG
-        iny
-        bne     @L0
-        rts
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYFROM:
-        jsr     setup
-        beq     @L2                     ; Skip if no full pages
-
-; Copy full pages
-
-@L1:    jsr     transferin
-        inc     ptr1+1
-        inc     ptr2+1
-        dec     tmp1
-        bne     @L1
-
-; Copy the remainder of the page
-
-@L2:    ldy     #EM_COPY::COUNT
-        lda     (ptr3),y                ; Get bytes in last page
-        beq     @L4
-        sta     tmp1
-
-; Transfer the bytes in the last page
-
-        ldy     #0
-@L3:    jsr     vdcgetbyte
-        sta     (ptr2),y
-        iny
-        dec     tmp1
-        lda     tmp1
-        bne     @L3
-@L4:    rts
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO:
-        jsr     setup
-        beq     @L2                     ; Skip if no full pages
-
-; Copy full pages
-
-@L1:    jsr     transferout
-        inc     ptr1+1
-        inc     ptr2+1
-        dec     tmp1
-        bne     @L1
-
-; Copy the remainder of the page
-
-@L2:    ldy     #EM_COPY::COUNT
-        lda     (ptr3),y                ; Get bytes in last page
-        beq     @L4
-        sta     tmp1
-
-; Transfer the bytes in the last page
-
-        ldy     #0
-@L3:    lda     (ptr2),y
-        jsr     vdcputbyte
-        iny
-        dec     tmp1
-        lda     tmp1
-        bne     @L3
-@L4:    rts
-
-;-------------------------------------------------------------------------
-; Helper functions to handle VDC ram
-;
-
-vdcsetsrcaddr:
-        ldx     #VDC_DATA_LO
-        stx     VDC_ADDR_REG
-@L0:    bit     VDC_ADDR_REG
-        bpl     @L0
-        sta     VDC_DATA_REG
-        dex
-        tya
-        stx     VDC_ADDR_REG
-        sta     VDC_DATA_REG
-        rts
-
-vdcgetbyte:
-        ldx     #VDC_DATA
-vdcgetreg:
-        stx     VDC_ADDR_REG
-@L0:    bit     VDC_ADDR_REG
-        bpl     @L0
-        lda     VDC_DATA_REG
-        rts
-
-vdcputbyte:
-        ldx     #VDC_DATA
-vdcputreg:
-        stx     VDC_ADDR_REG
-@L0:    bit     VDC_ADDR_REG
-        bpl     @L0
-        sta     VDC_DATA_REG
-        rts
-
-; ------------------------------------------------------------------------
-; Helper function for COPYFROM and COPYTO: Store the pointer to the request
-; structure and prepare data for the copy
-;
-
-setup:
-        sta     ptr3
-        stx     ptr3+1                  ; Save the passed em_copy pointer
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr3),y
-        sta     ptr1
-        ldy     #EM_COPY::PAGE
-        lda     (ptr3),y
-        sta     ptr1+1                  ; From
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr3),y
-        sta     ptr2
-        iny
-        lda     (ptr3),y
-        sta     ptr2+1                  ; To
-
-        ldy     #EM_COPY::COUNT+1
-        lda     (ptr3),y                ; Get number of pages
-        sta     tmp1
-        rts
-
diff --git a/libsrc/c128/fast.s b/libsrc/c128/fast.s
deleted file mode 100644 (file)
index 6c4c8c2..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-02-13
-;
-; void fast (void);
-; /* Switch the CPU into 2MHz mode. Note: This will disable video when in
-; ** 40 column mode.
-; */
-;
-
-        .export         _fast
-
-        .include        "c128.inc"
-
-
-.proc   _fast
-
-        lda     #$01
-        sta     VIC_CLK_128
-        rts
-
-.endproc
-
-
diff --git a/libsrc/c128/get_tv.s b/libsrc/c128/get_tv.s
deleted file mode 100644 (file)
index d85c9a6..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-12-03
-;
-; unsigned char get_tv (void);
-; /* Return the video mode the machine is using */
-;
-
-        .include        "get_tv.inc"
-        .include        "c128.inc"
-
-
-;--------------------------------------------------------------------------
-; _get_tv
-
-.proc   _get_tv
-
-        ldx     #TV::PAL        ; Assume PAL
-        lda     PALFLAG
-        bne     pal
-        dex                     ; NTSC
-pal:    txa
-        ldx     #0
-        rts
-
-.endproc
diff --git a/libsrc/c128/irq.s b/libsrc/c128/irq.s
deleted file mode 100644 (file)
index 79aa8fa..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-;
-; IRQ handling (C128 version)
-;
-
-        .export         initirq, doneirq
-        .import         callirq
-
-        .include        "c128.inc"
-
-; ------------------------------------------------------------------------
-
-.segment        "INIT"
-
-initirq:
-        lda     IRQVec
-        ldx     IRQVec+1
-        sta     IRQInd+1
-        stx     IRQInd+2
-        lda     #<IRQStub
-        ldx     #>IRQStub
-        jmp     setvec
-
-; ------------------------------------------------------------------------
-
-.code
-
-doneirq:
-        lda     IRQInd+1
-        ldx     IRQInd+2
-setvec: sei
-        sta     IRQVec
-        stx     IRQVec+1
-        cli
-        rts
-
-; ------------------------------------------------------------------------
-; The C128 has ROM parallel to the RAM starting from $4000. The startup code
-; above will change this setting so that we have RAM from $0000-$BFFF. This
-; works quite well with the exception of interrupts: The interrupt handler
-; is in ROM, and the ROM switches back to the ROM configuration, which means
-; that parts of our program may not be accessible. To solve this, we place
-; the following code into a special segment called "LOWCODE" which will be
-; placed just above the startup code, so it goes into a RAM area that is
-; not banked.
-
-.segment        "LOWCODE"
-
-IRQStub:
-        cld                             ; Just to be sure
-        lda     MMU_CR                  ; Get old register value
-        pha                             ; And save on stack
-        lda     #MMU_CFG_CC65           ; Bank 0 with kernal ROM
-        sta     MMU_CR
-        jsr     callirq                 ; Call the functions
-        pla                             ; Get old register value
-        sta     MMU_CR
-        jmp     IRQInd                  ; Jump to the saved IRQ vector
diff --git a/libsrc/c128/joy/c128-ptvjoy.s b/libsrc/c128/joy/c128-ptvjoy.s
deleted file mode 100644 (file)
index 6f65ce5..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-;
-; PTV-4 Player joystick driver for the C128
-;
-; Ullrich von Bassewitz, 2003-09-28, using the C64 driver from
-; Groepaz/Hitmen, 2002-12-23, which is
-; obviously based on Ullrichs driver :)
-;
-
-        .include "zeropage.inc"
-
-        .include "joy-kernel.inc"
-        .include "joy-error.inc"
-        .include "c128.inc"
-
-        .macpack generic
-        .macpack module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c128_ptvjoy_joy
-
-; Driver signature
-
-        .byte   $6A, $6F, $79           ; "joy"
-        .byte   JOY_API_VERSION         ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
-; Jump table.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READ
-        .addr   0                       ; IRQ entry unused
-
-; ------------------------------------------------------------------------
-; Constants
-
-JOY_COUNT       = 4             ; Number of joysticks we support
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #<JOY_ERR_OK
-        ldx     #>JOY_ERR_OK
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:
-        lda     #<JOY_COUNT
-        ldx     #>JOY_COUNT
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
-
-READ:   tax                     ; Joystick number into X
-        bne     joy2
-
-; Read joystick 1
-
-joy1:   lda     #$7F
-        sei
-        sta     CIA1_PRA
-        lda     CIA1_PRB
-        cli
-        and     #$1F
-        eor     #$1F
-        rts
-
-; Read joystick 2
-
-joy2:   dex
-        bne     joy3
-
-        lda     #$E0
-        ldy     #$FF
-        sei
-        sta     CIA1_DDRA
-        lda     CIA1_PRA
-        sty     CIA1_DDRA
-        cli
-        and     #$1F
-        eor     #$1F
-        rts
-
-; Read joystick 3
-
-joy3:
-        lda     #%10000000      ; cia 2 port B Data-Direction
-        sta     CIA2_DDRB       ; bit 7: out    bit 6-0: in
-
-        dex
-        bne     joy4
-
-        lda     #$80            ; cia 2 port B read/write
-        sta     CIA2_PRB        ; (output one at PB7)
-
-        lda     CIA2_PRB        ; cia 2 port B read/write
-        and     #$1f            ; get bit 4-0 (PB4-PB0)
-        eor     #$1f
-        rts
-
-; Read joystick 4
-
-joy4:
-        lda     #$00            ; cia 2 port B read/write
-        sta     CIA2_PRB        ; (output zero at PB7)
-
-        lda     CIA2_PRB        ; cia 2 port B read/write
-        and     #$0f            ; get bit 3-0 (PB3-PB0)
-        sta     tmp1            ; joy 4 directions
-
-        lda     CIA2_PRB        ; cia 2 port B read/write
-        and     #%00100000      ; get bit 5 (PB5)
-        lsr
-        ora     tmp1
-        eor     #$1f
-
-        ldx #0
-        rts
diff --git a/libsrc/c128/joy/c128-stdjoy.s b/libsrc/c128/joy/c128-stdjoy.s
deleted file mode 100644 (file)
index 119d378..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-;
-; Standard joystick driver for the C128. May be used multiple times when linked
-; to the statically application.
-
-;
-; Ullrich von Bassewitz, 2002-12-21
-;
-
-        .include        "zeropage.inc"
-
-        .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-        .include        "c128.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c128_stdjoy_joy
-
-; Driver signature
-
-        .byte   $6A, $6F, $79           ; "joy"
-        .byte   JOY_API_VERSION         ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
-; Jump table.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READ
-        .addr   0                       ; IRQ entry not used
-
-; ------------------------------------------------------------------------
-; Constants
-
-JOY_COUNT       = 2             ; Number of joysticks we support
-
-
-; ------------------------------------------------------------------------
-; Data.
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #<JOY_ERR_OK
-        ldx     #>JOY_ERR_OK
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:
-        lda     #<JOY_COUNT
-        ldx     #>JOY_COUNT
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
-
-READ:   tax                     ; Joystick number into X
-        bne     joy2
-
-; Read joystick 1
-
-joy1:   lda     #$7F
-        sei
-        sta     CIA1_PRA
-        lda     CIA1_PRB
-        cli
-        and     #$1F
-        eor     #$1F
-        rts
-
-; Read joystick 2
-
-joy2:   ldx     #0
-        lda     #$E0
-        ldy     #$FF
-        sei
-        sta     CIA1_DDRA
-        lda     CIA1_PRA
-        sty     CIA1_DDRA
-        cli
-        and     #$1F
-        eor     #$1F
-        rts
-
-
diff --git a/libsrc/c128/joy_stat_stddrv.s b/libsrc/c128/joy_stat_stddrv.s
deleted file mode 100644 (file)
index d6d6953..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Address of the static standard joystick driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void joy_static_stddrv[];
-;
-
-        .export _joy_static_stddrv
-        .import _c128_stdjoy_joy
-
-.rodata
-
-_joy_static_stddrv := _c128_stdjoy_joy
diff --git a/libsrc/c128/joy_stddrv.s b/libsrc/c128/joy_stddrv.s
deleted file mode 100644 (file)
index acbd0bd..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Name of the standard joystick driver
-;
-; Ullrich von Bassewitz, 2002-12-21
-;
-; const char joy_stddrv[];
-;
-
-        .export _joy_stddrv
-
-.rodata
-
-_joy_stddrv:    .asciiz "c128-stdjoy.joy"
-
diff --git a/libsrc/c128/kbhit.s b/libsrc/c128/kbhit.s
deleted file mode 100644 (file)
index c1bca24..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-;
-; Ullrich von Bassewitz, 18.08.1998
-;
-; unsigned char kbhit (void);
-;
-
-        .export         _kbhit
-
-        .include        "c128.inc"
-
-
-.proc   _kbhit
-
-        ldx     #0              ; High byte of return is always zero
-        lda     KEY_COUNT       ; Get number of characters
-;       ora     FKEY_COUNT      ; Or with number of chars from function keys
-        beq     L9
-        lda     #1
-L9:     rts
-
-.endproc
-
-
-
-                
diff --git a/libsrc/c128/kernal.s b/libsrc/c128/kernal.s
deleted file mode 100644 (file)
index f3b78d0..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-;
-; Ullrich von Bassewitz, 19.11.2002
-;
-; C128 kernal functions
-;
-
-        .export         C64MODE
-        .export         SWAPPER
-        .export         SETBNK
-
-        .export         CINT
-        .export         IOINIT
-        .export         RAMTAS
-        .export         RESTOR
-        .export         VECTOR
-        .export         SETMSG
-        .export         SECOND
-        .export         TKSA
-        .export         MEMTOP
-        .export         MEMBOT
-        .export         SCNKEY
-        .export         SETTMO
-        .export         ACPTR
-        .export         CIOUT
-        .export         UNTLK
-        .export         UNLSN
-        .export         LISTEN
-        .export         TALK
-        .export         READST
-        .export         SETLFS
-        .export         SETNAM
-        .export         OPEN
-        .export         CLOSE
-        .export         CHKIN
-        .export         CKOUT
-        .export         CLRCH
-        .export         BASIN
-        .export         BSOUT
-        .export         LOAD
-        .export         SAVE
-        .export         SETTIM
-        .export         RDTIM
-        .export         STOP
-        .export         GETIN
-        .export         CLALL
-        .export         UDTIM
-        .export         SCREEN
-        .export         PLOT
-        .export         IOBASE
-
-
-;-----------------------------------------------------------------------------
-; All functions are available in the kernal jump table
-; Extended jump table
-C64MODE         = $FF4D
-SWAPPER         = $FF5F
-SETBNK          = $FF68
-
-;
-CINT            = $FF81
-IOINIT          = $FF84
-RAMTAS          = $FF87
-RESTOR          = $FF8A
-VECTOR          = $FF8D
-SETMSG          = $FF90
-SECOND          = $FF93
-TKSA            = $FF96
-MEMTOP          = $FF99
-MEMBOT          = $FF9C
-SCNKEY          = $FF9F
-SETTMO          = $FFA2
-ACPTR           = $FFA5
-CIOUT           = $FFA8
-UNTLK           = $FFAB
-UNLSN           = $FFAE
-LISTEN          = $FFB1
-TALK            = $FFB4
-READST          = $FFB7
-SETLFS          = $FFBA
-SETNAM          = $FFBD
-OPEN            = $FFC0
-CLOSE           = $FFC3
-CHKIN           = $FFC6
-CKOUT           = $FFC9
-CLRCH           = $FFCC
-BASIN           = $FFCF
-BSOUT           = $FFD2
-LOAD            = $FFD5
-SAVE            = $FFD8
-SETTIM          = $FFDB
-RDTIM           = $FFDE
-STOP            = $FFE1
-GETIN           = $FFE4
-CLALL           = $FFE7
-UDTIM           = $FFEA
-SCREEN          = $FFED
-PLOT            = $FFF0
-IOBASE          = $FFF3
-
diff --git a/libsrc/c128/libref.s b/libsrc/c128/libref.s
deleted file mode 100644 (file)
index 7a59236..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; 2013-05-31, Oliver Schmidt
-; 2013-06-11, Greg King
-;
-
-        .export         em_libref
-        .export         joy_libref
-        .export         ser_libref
-        .export         tgi_libref
-
-        .import         _exit
-
-em_libref       := _exit
-joy_libref      := _exit
-ser_libref      := _exit
-tgi_libref      := _exit
diff --git a/libsrc/c128/mainargs.s b/libsrc/c128/mainargs.s
deleted file mode 100644 (file)
index fb5fd15..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-; mainargs.s
-;
-; Ullrich von Bassewitz, 2003-03-07
-; Based on code from Stefan A. Haubenthal, <polluks@web.de>
-; 2003-05-18, Greg King
-; 2004-04-28, 2005-02-26, Ullrich von Bassewitz
-;
-; Scan a group of arguments that are in BASIC's input-buffer.
-; Build an array that points to the beginning of each argument.
-; Send, to main(), that array and the count of the arguments.
-;
-; Command-lines look like these lines:
-;
-; run
-; run : rem
-; run:rem arg1 " arg 2 is quoted "  arg3 "" arg5
-;
-; "run" and "rem" are entokenned; the args. are not.  Leading and trailing
-; spaces outside of quotes are ignored.
-;
-; TO-DO:
-; - The "file-name" might be a path-name; don't copy the directory-components.
-; - Add a control-character quoting mechanism.
-
-        .constructor    initmainargs, 24
-        .import         __argc, __argv
-
-        .include        "c128.inc"
-
-
-MAXARGS  = 10                   ; Maximum number of arguments allowed
-REM      = $8f                  ; BASIC token-code
-NAME_LEN = 16                   ; maximum length of command-name
-
-
-; Get possible command-line arguments. Goes into the special INIT segment,
-; which may be reused after the startup code is run
-
-.segment        "INIT"
-
-initmainargs:
-
-; Assume that the program was loaded, a moment ago, by the traditional LOAD
-; statement.  Save the "most-recent filename" as argument #0.
-; Because the buffer, that we're copying into, was zeroed out,
-; we don't need to add a NUL character.
-;
-        ldy     FNAM_LEN
-        cpy     #NAME_LEN + 1
-        bcc     L1
-        ldy     #NAME_LEN - 1   ; limit the length
-L0:     lda     #FNAM           ; Load vector address for FETCH routine
-        ldx     FNAM_BANK       ; Load bank for FETCH routine
-        jsr     INDFET          ; Load byte from (FETVEC),y
-        sta     name,y          ; Save byte from filename
-L1:     dey
-        bpl     L0
-        inc     __argc          ; argc always is equal to, at least, 1
-
-; Find the "rem" token.
-;
-        ldx     #0
-L2:     lda     BASIC_BUF,x
-        beq     done            ; no "rem," no args.
-        inx
-        cmp     #REM
-        bne     L2
-        ldy     #1 * 2
-
-; Find the next argument
-
-next:   lda     BASIC_BUF,x
-        beq     done            ; End of line reached
-        inx
-        cmp     #' '            ; Skip leading spaces
-        beq     next            ;
-
-; Found start of next argument. We've incremented the pointer in X already, so
-; it points to the second character of the argument. This is useful since we
-; will check now for a quoted argument, in which case we will have to skip this
-; first character.
-
-found:  cmp     #'"'            ; Is the argument quoted?
-        beq     setterm         ; Jump if so
-        dex                     ; Reset pointer to first argument character
-        lda     #' '            ; A space ends the argument
-setterm:sta     term            ; Set end of argument marker
-
-; Now store a pointer to the argument into the next slot. Since the BASIC
-; input buffer is located at the start of a RAM page, no calculations are
-; necessary.
-
-        txa                     ; Get low byte
-        sta     argv,y          ; argv[y]= &arg
-        iny
-        lda     #>BASIC_BUF
-        sta     argv,y
-        iny
-        inc     __argc          ; Found another arg
-
-; Search for the end of the argument
-
-argloop:lda     BASIC_BUF,x
-        beq     done
-        inx
-        cmp     term
-        bne     argloop
-
-; We've found the end of the argument. X points one character behind it, and
-; A contains the terminating character. To make the argument a valid C string,
-; replace the terminating character by a zero.
-
-        lda     #0
-        sta     BASIC_BUF-1,x
-
-; Check if the maximum number of command line arguments is reached. If not,
-; parse the next one.
-
-        lda     __argc          ; Get low byte of argument count
-        cmp     #MAXARGS        ; Maximum number of arguments reached?
-        bcc     next            ; Parse next one if not
-
-; (The last vector in argv[] already is NULL.)
-
-done:   lda     #<argv
-        ldx     #>argv
-        sta     __argv
-        stx     __argv + 1
-        rts
-
-; These arrays are zeroed before initmainargs is called.
-; char  name[16+1];
-; char* argv[MAXARGS+1]={name};
-;
-.bss
-term:   .res    1
-name:   .res    NAME_LEN + 1
-
-.data
-argv:   .addr   name
-        .res    MAXARGS * 2
-
diff --git a/libsrc/c128/mcbdefault.s b/libsrc/c128/mcbdefault.s
deleted file mode 100644 (file)
index 01c54ef..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-;
-; Default mouse callbacks for the C128
-;
-; Ullrich von Bassewitz, 2004-03-20
-;
-; All functions in this module should be interrupt safe, because they may
-; be called from an interrupt handler
-;
-
-        .export         _mouse_def_callbacks
-
-        .include        "mouse-kernel.inc"
-        .include        "c128.inc"
-
-        .macpack        generic
-
-; Sprite definitions. The first value can be changed to adjust the number
-; of the sprite used for the mouse.
-MOUSE_SPR       = 0                             ; Sprite used for the mouse
-MOUSE_SPR_MASK  = $01 .shl MOUSE_SPR            ; Positive mask
-MOUSE_SPR_NMASK = .lobyte(.not MOUSE_SPR_MASK)  ; Negative mask
-VIC_SPR_X       = (VIC_SPR0_X + 2*MOUSE_SPR)    ; Sprite X register
-VIC_SPR_Y       = (VIC_SPR0_Y + 2*MOUSE_SPR)    ; Sprite Y register
-
-; --------------------------------------------------------------------------
-; Hide the mouse pointer. Always called with interrupts disabled.
-
-hide:
-        lda     #MOUSE_SPR_NMASK
-        and     VIC_SPR_ENA
-        sta     VIC_SPR_ENA
-        rts
-
-; --------------------------------------------------------------------------
-; Show the mouse pointer. Always called with interrupts disabled.
-
-show:
-        lda     #MOUSE_SPR_MASK
-        ora     VIC_SPR_ENA
-        sta     VIC_SPR_ENA
-        ; Fall through
-
-; --------------------------------------------------------------------------
-; Prepare to move the mouse pointer. Always called with interrupts disabled.
-
-prep:
-        ; Fall through
-
-; --------------------------------------------------------------------------
-; Draw the mouse pointer. Always called with interrupts disabled.
-
-draw:
-        rts
-
-; --------------------------------------------------------------------------
-; Move the mouse pointer X position to the value in a/x. Always called with
-; interrupts disabled.
-
-movex:
-
-; Add the X correction and set the low byte. This frees A.
-
-        add     #24                     ; X correction
-        sta     VIC_SPR_X
-
-; Set the high byte
-
-        txa
-        adc     #0
-        bne     @L1                     ; Branch if high byte not zero
-        lda     VIC_SPR_HI_X            ; Get high X bits of all sprites
-        and     #MOUSE_SPR_NMASK        ; Clear high bit for sprite
-        sta     VIC_SPR_HI_X
-        rts
-
-@L1:    lda     VIC_SPR_HI_X            ; Get high X bits of all sprites
-        ora     #MOUSE_SPR_MASK         ; Set high bit for sprite
-        sta     VIC_SPR_HI_X
-        rts
-
-; --------------------------------------------------------------------------
-; Move the mouse pointer Y position to the value in a/x. Always called with
-; interrupts disabled.
-
-movey:
-        clc
-        ldx     PALFLAG
-        bne     @L2
-        adc     #50                     ; FIXME: Should be NTSC, is PAL value
-        sta     VIC_SPR_Y               ; Set Y position
-        rts
-
-@L2:    adc     #50                     ; Add PAL correction
-        sta     VIC_SPR_Y               ; Set Y position
-        rts
-
-; --------------------------------------------------------------------------
-; Callback structure
-
-.rodata
-
-_mouse_def_callbacks:
-        .addr   hide
-        .addr   show
-        .addr   prep
-        .addr   draw
-        .addr   movex
-        .addr   movey
diff --git a/libsrc/c128/mou/c128-1351.s b/libsrc/c128/mou/c128-1351.s
deleted file mode 100644 (file)
index d06e942..0000000
+++ /dev/null
@@ -1,518 +0,0 @@
-;
-; Driver for the 1351 proportional mouse. Parts of the code are from
-; the Commodore 1351 mouse users guide.
-;
-; 2009-09-26, Ullrich von Bassewitz
-; 2014-04-26, Christian Groessler
-; 2014-04-30, Greg King
-;
-
-        .include        "zeropage.inc"
-        .include        "mouse-kernel.inc"
-        .include        "c128.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c128_1351_mou
-
-HEADER:
-
-; Driver signature
-
-        .byte   $6d, $6f, $75           ; "mou"
-        .byte   MOUSE_API_VERSION       ; Mouse driver API version number
-
-; Library reference
-
-libref: .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   HIDE
-        .addr   SHOW
-        .addr   SETBOX
-        .addr   GETBOX
-        .addr   MOVE
-        .addr   BUTTONS
-        .addr   POS
-        .addr   INFO
-        .addr   IOCTL
-        .addr   IRQ
-
-; Mouse driver flags
-
-        .byte   MOUSE_FLAG_LATE_IRQ
-
-; Callback table, set by the kernel before INSTALL is called
-
-CHIDE:  jmp     $0000                   ; Hide the cursor
-CSHOW:  jmp     $0000                   ; Show the cursor
-CPREP:  jmp     $0000                   ; Prepare to move the cursor
-CDRAW:  jmp     $0000                   ; Draw the cursor
-CMOVEX: jmp     $0000                   ; Move the cursor to X coord
-CMOVEY: jmp     $0000                   ; Move the cursor to Y coord
-
-
-;----------------------------------------------------------------------------
-; Constants
-
-SCREEN_HEIGHT   = 200
-SCREEN_WIDTH    = 320
-
-;----------------------------------------------------------------------------
-; Global variables. The bounding box values are sorted so that they can be
-; written with the least effort in the SETBOX and GETBOX routines, so don't
-; reorder them.
-
-.bss
-
-Vars:
-OldPotX:        .res    1               ; Old hw counter values
-OldPotY:        .res    1
-
-YPos:           .res    2               ; Current mouse position, Y
-XPos:           .res    2               ; Current mouse position, X
-XMin:           .res    2               ; X1 value of bounding box
-YMin:           .res    2               ; Y1 value of bounding box
-XMax:           .res    2               ; X2 value of bounding box
-YMax:           .res    2               ; Y2 value of bounding box
-
-OldValue:       .res    1               ; Temp for MoveCheck routine
-NewValue:       .res    1               ; Temp for MoveCheck routine
-
-INIT_save:      .res    1
-Buttons:        .res    1               ; Button mask
-
-; Keyboard buffer fill level at start of interrupt
-
-old_key_count:  .res    1
-
-; original IRQ vector
-
-old_irq:        .res    2
-
-.rodata
-
-; Default values for above variables
-; (We use ".proc" because we want to define both a label and a scope.)
-
-.proc   DefVars
-        .byte   0, 0                    ; OldPotX/OldPotY
-        .word   SCREEN_HEIGHT/2         ; YPos
-        .word   SCREEN_WIDTH/2          ; XPos
-        .word   0                       ; XMin
-        .word   0                       ; YMin
-        .word   SCREEN_WIDTH - 1        ; XMax
-        .word   SCREEN_HEIGHT - 1       ; YMax
-.endproc
-
-.code
-
-;----------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present.
-; Must return an MOUSE_ERR_xx code in a/x.
-
-INSTALL:
-
-; Disable the BASIC interpreter's interrupt-driven sprite-motion code.
-; That allows direct access to the VIC-IIe's sprite registers.
-
-        lda     INIT_STATUS
-        sta     INIT_save
-        lda     #%11000000
-        sta     INIT_STATUS
-
-; Initialize variables. Just copy the default stuff over
-
-        ldx     #.sizeof(DefVars)-1
-@L1:    lda     DefVars,x
-        sta     Vars,x
-        dex
-        bpl     @L1
-
-; Be sure the mouse cursor is invisible and at the default location. We
-; need to do that here, because our mouse interrupt handler doesn't set the
-; mouse position if it hasn't changed.
-
-        sei
-        jsr     CHIDE
-        lda     XPos
-        ldx     XPos+1
-        jsr     CMOVEX
-        lda     YPos
-        ldx     YPos+1
-        jsr     CMOVEY
-
-; Initialize our IRQ magic
-
-        ; remember ROM IRQ continuation address
-        lda     IRQInd+2
-        sta     old_irq+1
-        lda     IRQInd+1
-        sta     old_irq
-
-        lda     libref
-        sta     ptr3
-        lda     libref+1
-        sta     ptr3+1
-
-        ; set ROM IRQ continuation address to point to the provided routine
-        ldy     #2
-        lda     (ptr3),y
-        sta     IRQInd+1
-        iny
-        lda     (ptr3),y
-        sta     IRQInd+2
-
-        ; set address of our IRQ callback routine
-        ; since it's called via "rts" we have to use "address-1"
-        iny
-        lda     #<(callback-1)
-        sta     (ptr3),y
-        iny
-        lda     #>(callback-1)
-        sta     (ptr3),y
-        iny
-
-        ; set ROM entry point vector
-        ; since it's called via "rts" we have to decrement it by one
-        lda     old_irq
-        sec
-        sbc     #1
-        sta     (ptr3),y
-        iny
-        lda     old_irq+1
-        sbc     #0
-        sta     (ptr3),y
-        cli
-
-; Done, return zero (= MOUSE_ERR_OK)
-
-        ldx     #$00
-        txa
-        rts
-
-;----------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; No return code required (the driver is removed from memory on return).
-
-UNINSTALL:
-        lda     old_irq
-        sei
-        sta     IRQInd+1
-        lda     old_irq+1
-        sta     IRQInd+2
-        ;cli                            ; This will be done at end of HIDE
-
-        jsr     HIDE                    ; Hide cursor on exit
-        lda     INIT_save
-        sta     INIT_STATUS
-        rts
-
-;----------------------------------------------------------------------------
-; HIDE routine. Is called to hide the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently visible and should get hidden. For most drivers,
-; no special action is required besides hiding the mouse cursor.
-; No return code required.
-
-HIDE:   sei
-        jsr     CHIDE
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SHOW routine. Is called to show the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently hidden and should become visible. For most drivers,
-; no special action is required besides enabling the mouse cursor.
-; No return code required.
-
-SHOW:   sei
-        jsr     CSHOW
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SETBOX: Set the mouse bounding box. The parameters are passed as they come
-; from the C program, that is, a pointer to a mouse_box struct in a/x.
-; No checks are done if the mouse is currently inside the box, this is the job
-; of the caller. It is not necessary to validate the parameters, trust the
-; caller and save some code here. No return code required.
-
-SETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX)-1
-        sei
-
-@L1:    lda     (ptr1),y
-        sta     XMin,y
-        dey
-        bpl     @L1
-
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; GETBOX: Return the mouse bounding box. The parameters are passed as they
-; come from the C program, that is, a pointer to a mouse_box struct in a/x.
-
-GETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX)-1
-        sei
-
-@L1:    lda     XMin,y
-        sta     (ptr1),y
-        dey
-        bpl     @L1
-
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; MOVE: Move the mouse to a new position. The position is passed as it comes
-; from the C program, that is: X on the stack and Y in a/x. The C wrapper will
-; remove the parameter from the stack on return.
-; No checks are done if the new position is valid (within the bounding box or
-; the screen). No return code required.
-;
-
-MOVE:   sei                             ; No interrupts
-
-        sta     YPos
-        stx     YPos+1                  ; New Y position
-        jsr     CMOVEY                  ; Set it
-
-        ldy     #$01
-        lda     (sp),y
-        sta     XPos+1
-        tax
-        dey
-        lda     (sp),y
-        sta     XPos                    ; New X position
-
-        jsr     CMOVEX                  ; Move the cursor
-
-        cli                             ; Allow interrupts
-        rts
-
-;----------------------------------------------------------------------------
-; BUTTONS: Return the button mask in a/x.
-
-BUTTONS:
-        lda     Buttons
-        ldx     #$00
-        rts
-
-;----------------------------------------------------------------------------
-; POS: Return the mouse position in the MOUSE_POS struct pointed to by ptr1.
-; No return code required.
-
-POS:    ldy     #MOUSE_POS::XCOORD      ; Structure offset
-
-        sei                             ; Disable interrupts
-        lda     XPos                    ; Transfer the position
-        sta     (ptr1),y
-        lda     XPos+1
-        iny
-        sta     (ptr1),y
-        lda     YPos
-        iny
-        sta     (ptr1),y
-        lda     YPos+1
-        cli                             ; Enable interrupts
-
-        iny
-        sta     (ptr1),y                ; Store last byte
-
-        rts                             ; Done
-
-;----------------------------------------------------------------------------
-; INFO: Returns mouse position and current button mask in the MOUSE_INFO
-; struct pointed to by ptr1. No return code required.
-;
-; We're cheating here to keep the code smaller: The first fields of the
-; mouse_info struct are identical to the mouse_pos struct, so we will just
-; call _mouse_pos to initialize the struct pointer and fill the position
-; fields.
-
-INFO:   jsr     POS
-
-; Fill in the button state
-
-        lda     Buttons
-        ldy     #MOUSE_INFO::BUTTONS
-        sta     (ptr1),y
-
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
-; specific data in ptr1, and the ioctl code in A.
-; Must return an error code in a/x.
-;
-
-IOCTL:  lda     #<MOUSE_ERR_INV_IOCTL     ; We don't support ioctls, for now
-        ldx     #>MOUSE_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; IRQ: Irq handler entry point. Called as a subroutine but in IRQ context
-; (so be careful). The routine MUST return carry set if the interrupt has been
-; 'handled' - which means that the interrupt source is gone. Otherwise it
-; MUST return carry clear.
-;
-
-IRQ:    jsr     CPREP
-        lda     KEY_COUNT
-        sta     old_key_count
-        lda     #$7F
-        sta     CIA1_PRA
-        lda     CIA1_PRB                ; Read joystick #0
-        and     #$1F
-        eor     #$1F                    ; Make all bits active high
-        sta     Buttons
-
-        lda     SID_ADConv1             ; Get mouse X movement
-        ldy     OldPotX
-        jsr     MoveCheck               ; Calculate movement vector
-        sty     OldPotX
-
-; Skip processing if nothing has changed
-
-        bcc     @SkipX
-
-; Calculate the new X coordinate (--> a/y)
-
-        add     XPos
-        tay                             ; Remember low byte
-        txa
-        adc     XPos+1
-        tax
-
-; Limit the X coordinate to the bounding box
-
-        cpy     XMin
-        sbc     XMin+1
-        bpl     @L1
-        ldy     XMin
-        ldx     XMin+1
-        jmp     @L2
-@L1:    txa
-
-        cpy     XMax
-        sbc     XMax+1
-        bmi     @L2
-        ldy     XMax
-        ldx     XMax+1
-@L2:    sty     XPos
-        stx     XPos+1
-
-; Move the mouse pointer to the new X pos
-
-        tya
-        jsr     CMOVEX
-
-; Calculate the Y movement vector
-
-@SkipX: lda     SID_ADConv2             ; Get mouse Y movement
-        ldy     OldPotY
-        jsr     MoveCheck               ; Calculate movement
-        sty     OldPotY
-
-; Skip processing if nothing has changed
-
-        bcc     @SkipY
-
-; Calculate the new Y coordinate (--> a/y)
-
-        sta     OldValue
-        lda     YPos
-        sub     OldValue
-        tay
-        stx     OldValue
-        lda     YPos+1
-        sbc     OldValue
-        tax
-
-; Limit the Y coordinate to the bounding box
-
-        cpy     YMin
-        sbc     YMin+1
-        bpl     @L3
-        ldy     YMin
-        ldx     YMin+1
-        jmp     @L4
-@L3:    txa
-
-        cpy     YMax
-        sbc     YMax+1
-        bmi     @L4
-        ldy     YMax
-        ldx     YMax+1
-@L4:    sty     YPos
-        stx     YPos+1
-
-; Move the mouse pointer to the new X pos
-
-        tya
-        jsr     CMOVEY
-
-; Done
-
-@SkipY: jsr     CDRAW
-        clc                             ; Interrupt not "handled"
-        rts
-
-; --------------------------------------------------------------------------
-;
-; Move check routine, called for both coordinates.
-;
-; Entry:        y = old value of pot register
-;               a = current value of pot register
-; Exit:         y = value to use for old value
-;               x/a = delta value for position
-;
-
-MoveCheck:
-        sty     OldValue
-        sta     NewValue
-        ldx     #$00
-
-        sub     OldValue                ; a = mod64 (new - old)
-        and     #%01111111
-        cmp     #%01000000              ; if (a > 0)
-        bcs     @L1                     ;
-        lsr     a                       ;   a /= 2;
-        beq     @L2                     ;   if (a != 0)
-        ldy     NewValue                ;     y = NewValue
-        sec
-        rts                             ;   return
-
-@L1:    ora     #%11000000              ; else or in high order bits
-        cmp     #$FF                    ; if (a != -1)
-        beq     @L2
-        sec
-        ror     a                       ;   a /= 2
-        dex                             ;   high byte = -1 (X = $FF)
-        ldy     NewValue
-        sec
-        rts
-
-@L2:    txa                             ; A = $00
-        clc
-        rts
-
-.define  OLD_BUTTONS Buttons            ; tells callback.inc where the old port status is stored
-.include "callback.inc"
diff --git a/libsrc/c128/mou/c128-inkwell.s b/libsrc/c128/mou/c128-inkwell.s
deleted file mode 100644 (file)
index 45d42f2..0000000
+++ /dev/null
@@ -1,522 +0,0 @@
-;
-; Driver for the Inkwell Systems 170-C and 184-C lightpens.
-;
-; 2014-04-26, Christian Groessler
-; 2014-09-10, Greg King
-;
-
-        .include        "zeropage.inc"
-        .include        "mouse-kernel.inc"
-        .include        "c128.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table.
-
-        module_header   _c128_inkwell_mou
-
-HEADER:
-
-; Driver signature
-
-        .byte   $6d, $6f, $75           ; ASCII "mou"
-        .byte   MOUSE_API_VERSION       ; Mouse driver API version number
-
-; Library reference
-
-libref: .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   HIDE
-        .addr   SHOW
-        .addr   SETBOX
-        .addr   GETBOX
-        .addr   MOVE
-        .addr   BUTTONS
-        .addr   POS
-        .addr   INFO
-        .addr   IOCTL
-        .addr   IRQ
-
-; Mouse driver flags
-
-        .byte   MOUSE_FLAG_EARLY_IRQ
-
-; Callback table, set by the kernel before INSTALL is called.
-
-CHIDE:  jmp     $0000                   ; Hide the cursor
-CSHOW:  jmp     $0000                   ; Show the cursor
-CPREP:  jmp     $0000                   ; Prepare to move the cursor
-CDRAW:  jmp     $0000                   ; Draw the cursor
-CMOVEX: jmp     $0000                   ; Move the cursor to X co-ord.
-CMOVEY: jmp     $0000                   ; Move the cursor to Y co-ord.
-
-
-;----------------------------------------------------------------------------
-; Constants
-
-; This driver is for the 40-column screen.
-
-XSIZE   = 40
-YSIZE   = 25
-
-SCREEN_WIDTH    = XSIZE * 8
-SCREEN_HEIGHT   = YSIZE * 8
-
-
-;----------------------------------------------------------------------------
-; Global variables. The bounding box values are sorted so that they can be
-; written with the least effort in the SETBOX and GETBOX routines; so, don't
-; re-order them.
-
-.rodata
-
-; Default values for below variables
-; (We use ".proc" because we want to define both a label and a scope.)
-
-.proc   DefVars
-        .word   0                       ; XMin
-        .word   0                       ; YMin
-        .word   SCREEN_WIDTH - 1        ; XMax
-        .word   SCREEN_HEIGHT - 1       ; YMax
-        .byte   %00000000               ; Buttons
-.endproc
-
-.bss
-
-Vars:
-XMin:           .res    2               ; X1 value of bounding box
-YMin:           .res    2               ; Y1 value of bounding box
-XMax:           .res    2               ; X2 value of bounding box
-YMax:           .res    2               ; Y2 value of bounding box
-Buttons:        .res    1               ; Button status bits
-
-XPos:           .res    2               ; Current lightpen position, X
-YPos:           .res    2               ; Current lightpen position, Y
-
-OldPenX:        .res    1               ; Previous HW-counter values
-OldPenY:        .res    1
-
-INIT_save:      .res    1
-
-; Keyboard buffer fill level at start of interrupt
-
-old_key_count:  .res    1
-
-; Original IRQ vector
-
-old_irq:        .res    2
-
-.data
-
-; Default Inkwell calibration.
-; The first number is the width of the left border;
-; the second number is the actual calibration value.
-; See a comment below (at "Calculate the new X co-ordinate")
-; for the reason for the third number.
-
-XOffset:        .byte   (24 + 24) / 2   ; x-offset
-
-; Jump to a function that puts a new calibration value into XOffset.
-Calibrate:      jmp     $0000
-
-
-.code
-
-;----------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present.
-; Must return a MOUSE_ERR_xx code in .XA.
-
-INSTALL:
-
-; Disable the BASIC interpreter's interrupt-driven sprite-motion code.
-; That allows direct access to the VIC-IIe's sprite registers.
-
-        lda     INIT_STATUS
-        sta     INIT_save
-        lda     #%11000000
-        sta     INIT_STATUS
-
-; Initiate some variables. Just copy the default stuff over.
-
-        ldx     #.sizeof (DefVars) - 1
-@L0:    lda     DefVars,x
-        sta     Vars,x
-        dex
-        bpl     @L0
-
-        ldx     VIC_LPEN_X
-        ldy     VIC_LPEN_Y
-        stx     OldPenX
-        sty     OldPenY
-
-; Initiate our IRQ magic.
-
-        ; Remember the ROM IRQ continuation address.
-        ldx     IRQInd+2
-        lda     IRQInd+1
-        stx     old_irq+1
-        sta     old_irq
-
-        lda     libref
-        ldx     libref+1
-        sta     ptr3                    ; Point to mouse_adjuster
-        stx     ptr3+1
-
-        ; Set the ROM IRQ continuation address to point to the provided routine.
-        ldy     #2
-        lda     (ptr3),y
-        iny
-        sei
-        sta     IRQInd+1
-        lda     (ptr3),y
-        sta     IRQInd+2
-
-        ; Set the address of our IRQ callback routine.
-        ; Because it's called via "rts", we must use "address-1".
-        iny
-        lda     #<(callback-1)
-        sta     (ptr3),y
-        iny
-        lda     #>(callback-1)
-        sta     (ptr3),y
-
-        ; Set the ROM entry-point vector.
-        ; Because it's called via "rts", we must decrement it by one.
-        iny
-        lda     old_irq
-        sub     #<$0001
-        sta     (ptr3),y
-        iny
-        lda     old_irq+1
-        sbc     #>$0001
-        sta     (ptr3),y
-        cli
-
-; Call a calibration function through the library-reference.
-
-        ldy     #1
-        lda     (ptr3),y
-        bze     @L1                     ; Don't call pointer if it's NULL
-        sta     Calibrate+2             ; Point to function
-        dey
-        lda     (ptr3),y
-        sta     Calibrate+1
-        lda     #<XOffset               ; Function will set this variable
-        ldx     #>XOffset
-        jsr     Calibrate
-
-; Be sure that the lightpen cursor is invisible and at the default location.
-; It needs to be done here because the lightpen interrupt handler doesn't
-; set the lightpen position if it hasn't changed.
-
-@L1:    sei
-        jsr     CHIDE
-
-        lda     #<(SCREEN_HEIGHT / 2)
-        ldx     #>(SCREEN_HEIGHT / 2)
-        jsr     MoveY
-        lda     #<(SCREEN_WIDTH / 2)
-        ldx     #>(SCREEN_WIDTH / 2)
-        jsr     MoveX
-        cli
-
-; Done, return zero.
-
-        lda     #MOUSE_ERR_OK
-        tax
-        rts
-
-;----------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; No return code required (the driver is removed from memory on return).
-
-UNINSTALL:
-        lda     old_irq
-        ldx     old_irq+1
-        sei
-        sta     IRQInd+1
-        stx     IRQInd+2
-        ;cli                            ; This will be done at end of HIDE
-
-        jsr     HIDE                    ; Hide cursor on exit
-        lda     INIT_save
-        sta     INIT_STATUS
-        rts
-
-;----------------------------------------------------------------------------
-; HIDE routine. Is called to hide the lightpen pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is called only
-; if the mouse is currently visible, and should get hidden. For most drivers,
-; no special action is required besides hiding the lightpen cursor.
-; No return code required.
-
-HIDE:   sei
-        jsr     CHIDE
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SHOW routine. Is called to show the lightpen pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is called only
-; if the mouse is currently hidden, and should become visible. For most drivers,
-; no special action is required besides enabling the lightpen cursor.
-; No return code required.
-
-SHOW:   sei
-        jsr     CSHOW
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SETBOX: Set the lightpen bounding box. The parameters are passed as they come
-; from the C program, that is, a pointer to a mouse_box struct in .XA.
-; No checks are done if the lightpen is currently inside the box, that is the job
-; of the caller. It is not necessary to validate the parameters; trust the
-; caller; and, save some code here. No return code required.
-
-SETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX) - 1
-        sei
-
-@L1:    lda     (ptr1),y
-        sta     XMin,y
-        dey
-        bpl     @L1
-
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; GETBOX: Return the lightpen bounding box. The parameters are passed as they
-; come from the C program, that is, a pointer to a mouse_box struct in .XA.
-
-GETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX) - 1
-@L1:    lda     XMin,y
-        sta     (ptr1),y
-        dey
-        bpl     @L1
-        rts
-
-;----------------------------------------------------------------------------
-; MOVE: Move the mouse to a new position. The position is passed as it comes
-; from the C program, that is: X on the stack and Y in .XA. The C wrapper will
-; remove the parameter from the stack on return.
-; No checks are done if the new position is valid (within the bounding box or
-; the screen). No return code required.
-;
-
-MOVE:   sei                             ; No interrupts
-        jsr     MoveY
-
-        ldy     #$01
-        lda     (sp),y
-        tax
-        dey
-        lda     (sp),y
-        jsr     MoveX                   ; Move the cursor
-
-        cli                             ; Allow interrupts
-        rts
-
-;----------------------------------------------------------------------------
-; BUTTONS: Return the button mask in .XA.
-
-BUTTONS:
-        lda     Buttons
-        ldx     #>$0000
-
-; Make the lightpen buttons look like a 1351 mouse.
-
-        asl     a
-        asl     SID_ADConv2             ; PotY
-        rol     a
-        eor     #MOUSE_BTN_RIGHT
-        and     #MOUSE_BTN_LEFT | MOUSE_BTN_RIGHT
-        rts
-
-;----------------------------------------------------------------------------
-; POS: Return the lightpen position in the MOUSE_POS struct pointed to by ptr1.
-; No return code required.
-
-POS:    ldy     #MOUSE_POS::XCOORD      ; Structure offset
-
-        sei                             ; Disable interrupts
-        lda     XPos                    ; Transfer the position
-        sta     (ptr1),y
-        lda     XPos+1
-        iny
-        sta     (ptr1),y
-        lda     YPos
-        iny
-        sta     (ptr1),y
-        lda     YPos+1
-        cli                             ; Enable interrupts
-
-        iny
-        sta     (ptr1),y                ; Store last byte
-        rts
-
-;----------------------------------------------------------------------------
-; INFO: Returns lightpen position and current button mask in the MOUSE_INFO
-; struct pointed to by ptr1. No return code required.
-;
-; We're cheating here, to keep the code smaller: The first fields of the
-; mouse_info struct are identical to the mouse_pos struct; so, we'll just
-; call _mouse_pos to initiate the struct pointer, and fill the position
-; fields.
-
-INFO:   jsr     POS
-
-; Fill in the button state
-
-        jsr     BUTTONS                 ; Will not touch ptr1
-        ldy     #MOUSE_INFO::BUTTONS
-        sta     (ptr1),y
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver-defined entry point. The wrapper will pass a pointer to ioctl-
-; specific data in ptr1, and the ioctl code in .A.
-; Must return an error code in .XA.
-;
-
-IOCTL:  lda     #<MOUSE_ERR_INV_IOCTL     ; We don't support ioctls, for now
-        ldx     #>MOUSE_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; IRQ: IRQ handler entry point. Called as a subroutine, but in the IRQ context
-; (so, be careful). The routine MUST return carry set if the interrupt has been
-; 'handled' -- which means that the interrupt source is gone. Otherwise, it
-; MUST return carry clear.
-;
-
-IRQ:    jsr     CPREP
-        lda     KEY_COUNT
-        sta     old_key_count
-
-; Record the state of the buttons.
-; Try to avoid crosstalk between the keyboard and the lightpen.
-
-        ldy     #%00000000              ; Set ports A and B to input
-        sty     CIA1_DDRB
-        sty     CIA1_DDRA               ; Keyboard won't look like buttons
-        ;lda     #%01111111             ; (Keyboard scan leaves this in port A)
-        ;sta     CIA1_PRA
-        lda     CIA1_PRB                ; Read Control Port 1
-        dec     CIA1_DDRA               ; Set port A back to output
-        eor     #%11111111              ; Bit goes up when button goes down
-        sta     Buttons
-
-; Read the VIC-II lightpen registers.
-
-        lda     VIC_LPEN_Y
-        cmp     OldPenY
-
-; Skip processing if nothing has changed.
-
-        beq     @SkipY
-        sta     OldPenY
-
-; Subtract the height of the top border, so that the lightpen co-ordinate
-; will match the TGI co-ordinate.
-
-        sub     #50
-        tay                             ; Remember low byte
-        ldx     #>$0000
-
-; Limit the Y co-ordinate to the bounding box.
-
-        txa
-        cpy     YMin
-        sbc     YMin+1
-        bpl     @L3
-        ldy     YMin
-        ldx     YMin+1
-        jmp     @L4
-
-@L3:    txa
-        cpy     YMax
-        sbc     YMax+1
-        bmi     @L4
-        ldy     YMax
-        ldx     YMax+1
-
-@L4:    tya
-        jsr     MoveY
-
-@SkipY: lda     VIC_LPEN_X
-        cmp     OldPenX
-
-; Skip processing if nothing has changed.
-
-        beq     @SkipX
-        sta     OldPenX
-
-; Adjust the value by the calibration offset.
-
-        sub     XOffset
-
-; Calculate the new X co-ordinate.
-; The VIC-II register is eight bits; but, the screen co-ordinate is nine bits.
-; Therefore, the VIC-II number is doubled. Then, it points to every other pixel;
-; but, it can reach across the screen.
-
-        asl     a
-        tay                             ; Remember low byte
-        lda     #>$0000
-        rol     a
-        tax                             ; Remember high byte
-
-; Limit the X co-ordinate to the bounding box.
-
-        cpy     XMin
-        sbc     XMin+1
-        bpl     @L1
-        ldy     XMin
-        ldx     XMin+1
-        jmp     @L2
-
-@L1:    txa
-        cpy     XMax
-        sbc     XMax+1
-        bmi     @L2
-        ldy     XMax
-        ldx     XMax+1
-
-@L2:    tya
-        jsr     MoveX
-
-; Done
-
-@SkipX: jsr     CDRAW
-        clc                             ; Interrupt not "handled"
-        rts
-
-; Move the lightpen pointer to the new Y pos.
-
-MoveY:  sta     YPos
-        stx     YPos+1
-        jmp     CMOVEY
-
-; Move the lightpen pointer to the new X pos.
-
-MoveX:  sta     XPos
-        stx     XPos+1
-        jmp     CMOVEX
-
-.define OLD_BUTTONS Buttons             ; Tells callback.inc where the old port status is stored
-.include        "callback.inc"
diff --git a/libsrc/c128/mou/c128-joy.s b/libsrc/c128/mou/c128-joy.s
deleted file mode 100644 (file)
index 7718b89..0000000
+++ /dev/null
@@ -1,491 +0,0 @@
-;
-; Driver for a "joystick mouse".
-;
-; 2009-09-26, Ullrich von Bassewitz
-; 2014-04-26, Christian Groessler
-; 2014-05-01, Greg King
-;
-
-        .include        "zeropage.inc"
-        .include        "mouse-kernel.inc"
-        .include        "c128.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c128_joy_mou
-
-HEADER:
-
-; Driver signature
-
-        .byte   $6d, $6f, $75           ; "mou"
-        .byte   MOUSE_API_VERSION       ; Mouse driver API version number
-
-; Library reference
-
-libref: .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   HIDE
-        .addr   SHOW
-        .addr   SETBOX
-        .addr   GETBOX
-        .addr   MOVE
-        .addr   BUTTONS
-        .addr   POS
-        .addr   INFO
-        .addr   IOCTL
-        .addr   IRQ
-
-; Mouse driver flags
-
-        .byte   MOUSE_FLAG_LATE_IRQ
-
-; Callback table, set by the kernel before INSTALL is called
-
-CHIDE:  jmp     $0000                   ; Hide the cursor
-CSHOW:  jmp     $0000                   ; Show the cursor
-CPREP:  jmp     $0000                   ; Prepare to move the cursor
-CDRAW:  jmp     $0000                   ; Draw the cursor
-CMOVEX: jmp     $0000                   ; Move the cursor to X coord
-CMOVEY: jmp     $0000                   ; Move the cursor to Y coord
-
-
-;----------------------------------------------------------------------------
-; Constants
-
-SCREEN_HEIGHT   = 200
-SCREEN_WIDTH    = 320
-
-.enum   JOY
-        UP      = $01
-        DOWN    = $02
-        LEFT    = $04
-        RIGHT   = $08
-        FIRE    = $10
-.endenum
-
-;----------------------------------------------------------------------------
-; Global variables. The bounding box values are sorted so that they can be
-; written with the least effort in the SETBOX and GETBOX routines, so don't
-; reorder them.
-
-.bss
-
-Vars:
-YPos:           .res    2               ; Current mouse position, Y
-XPos:           .res    2               ; Current mouse position, X
-XMin:           .res    2               ; X1 value of bounding box
-YMin:           .res    2               ; Y1 value of bounding box
-XMax:           .res    2               ; X2 value of bounding box
-YMax:           .res    2               ; Y2 value of bounding box
-Buttons:        .res    1               ; Button mask
-
-INIT_save:      .res    1
-
-; Keyboard buffer fill level at start of interrupt
-
-old_key_count:  .res    1
-
-; original IRQ vector
-
-old_irq:        .res    2
-
-.rodata
-
-; Default values for above variables
-; (We use ".proc" because we want to define both a label and a scope.)
-
-.proc   DefVars
-        .word   SCREEN_HEIGHT/2         ; YPos
-        .word   SCREEN_WIDTH/2          ; XPos
-        .word   0                       ; XMin
-        .word   0                       ; YMin
-        .word   SCREEN_WIDTH - 1        ; XMax
-        .word   SCREEN_HEIGHT - 1       ; YMax
-        .byte   0                       ; Buttons
-.endproc
-
-.code
-
-;----------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present.
-; Must return an MOUSE_ERR_xx code in a/x.
-
-INSTALL:
-
-; Disable the BASIC interpreter's interrupt-driven sprite-motion code.
-; That allows direct access to the VIC-IIe's sprite registers.
-
-        lda     INIT_STATUS
-        sta     INIT_save
-        lda     #%11000000
-        sta     INIT_STATUS
-
-; Initialize variables. Just copy the default stuff over
-
-        ldx     #.sizeof(DefVars)-1
-@L1:    lda     DefVars,x
-        sta     Vars,x
-        dex
-        bpl     @L1
-
-; Be sure the mouse cursor is invisible and at the default location. We
-; need to do that here, because our mouse interrupt handler doesn't set the
-; mouse position if it hasn't changed.
-
-        sei
-        jsr     CHIDE
-        lda     XPos
-        ldx     XPos+1
-        jsr     CMOVEX
-        lda     YPos
-        ldx     YPos+1
-        jsr     CMOVEY
-
-; Initialize our IRQ magic
-
-        ; remember ROM IRQ continuation address
-        lda     IRQInd+2
-        sta     old_irq+1
-        lda     IRQInd+1
-        sta     old_irq
-
-        lda     libref
-        sta     ptr3
-        lda     libref+1
-        sta     ptr3+1
-
-        ; set ROM IRQ continuation address to point to the provided routine
-        ldy     #2
-        lda     (ptr3),y
-        sta     IRQInd+1
-        iny
-        lda     (ptr3),y
-        sta     IRQInd+2
-
-        ; set address of our IRQ callback routine
-        ; since it's called via "rts" we have to use "address-1"
-        iny
-        lda     #<(callback-1)
-        sta     (ptr3),y
-        iny
-        lda     #>(callback-1)
-        sta     (ptr3),y
-        iny
-
-        ; set ROM entry point vector
-        ; since it's called via "rts" we have to decrement it by one
-        lda     old_irq
-        sec
-        sbc     #1
-        sta     (ptr3),y
-        iny
-        lda     old_irq+1
-        sbc     #0
-        sta     (ptr3),y
-        cli
-
-; Done, return zero (= MOUSE_ERR_OK)
-
-        ldx     #$00
-        txa
-        rts
-
-;----------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; No return code required (the driver is removed from memory on return).
-
-UNINSTALL:
-        lda     old_irq
-        sei
-        sta     IRQInd+1
-        lda     old_irq+1
-        sta     IRQInd+2
-        ;cli                            ; This will be done at end of HIDE
-
-        jsr     HIDE                    ; Hide cursor on exit
-        lda     INIT_save
-        sta     INIT_STATUS
-        rts
-
-;----------------------------------------------------------------------------
-; HIDE routine. Is called to hide the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently visible and should get hidden. For most drivers,
-; no special action is required besides hiding the mouse cursor.
-; No return code required.
-
-HIDE:   sei
-        jsr     CHIDE
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SHOW routine. Is called to show the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently hidden and should become visible. For most drivers,
-; no special action is required besides enabling the mouse cursor.
-; No return code required.
-
-SHOW:   sei
-        jsr     CSHOW
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SETBOX: Set the mouse bounding box. The parameters are passed as they come
-; from the C program, that is, a pointer to a mouse_box struct in a/x.
-; No checks are done if the mouse is currently inside the box, this is the job
-; of the caller. It is not necessary to validate the parameters, trust the
-; caller and save some code here. No return code required.
-
-SETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX)-1
-        sei
-
-@L1:    lda     (ptr1),y
-        sta     XMin,y
-        dey
-        bpl     @L1
-
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; GETBOX: Return the mouse bounding box. The parameters are passed as they
-; come from the C program, that is, a pointer to a mouse_box struct in a/x.
-
-GETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX)-1
-        sei
-
-@L1:    lda     XMin,y
-        sta     (ptr1),y
-        dey
-        bpl     @L1
-
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; MOVE: Move the mouse to a new position. The position is passed as it comes
-; from the C program, that is: X on the stack and Y in a/x. The C wrapper will
-; remove the parameter from the stack on return.
-; No checks are done if the new position is valid (within the bounding box or
-; the screen). No return code required.
-;
-
-MOVE:   sei                             ; No interrupts
-
-        sta     YPos
-        stx     YPos+1                  ; New Y position
-        jsr     CMOVEY                  ; Set it
-
-        ldy     #$01
-        lda     (sp),y
-        sta     XPos+1
-        tax
-        dey
-        lda     (sp),y
-        sta     XPos                    ; New X position
-
-        jsr     CMOVEX                  ; Move the cursor
-
-        cli                             ; Allow interrupts
-        rts
-
-;----------------------------------------------------------------------------
-; BUTTONS: Return the button mask in a/x.
-
-BUTTONS:
-        lda     Buttons
-        ldx     #$00
-        and     #MOUSE_BTN_LEFT         ; Left button -- same as JOY::FIRE
-        rts
-
-;----------------------------------------------------------------------------
-; POS: Return the mouse position in the MOUSE_POS struct pointed to by ptr1.
-; No return code required.
-
-POS:    ldy     #MOUSE_POS::XCOORD      ; Structure offset
-
-        sei                             ; Disable interrupts
-        lda     XPos                    ; Transfer the position
-        sta     (ptr1),y
-        lda     XPos+1
-        iny
-        sta     (ptr1),y
-        lda     YPos
-        iny
-        sta     (ptr1),y
-        lda     YPos+1
-        cli                             ; Enable interrupts
-
-        iny
-        sta     (ptr1),y                ; Store last byte
-
-        rts                             ; Done
-
-;----------------------------------------------------------------------------
-; INFO: Returns mouse position and current button mask in the MOUSE_INFO
-; struct pointed to by ptr1. No return code required.
-;
-; We're cheating here to keep the code smaller: The first fields of the
-; mouse_info struct are identical to the mouse_pos struct, so we will just
-; call _mouse_pos to initialize the struct pointer and fill the position
-; fields.
-
-INFO:   jsr     POS
-
-; Fill in the button state
-
-        jsr     BUTTONS
-        ldy     #MOUSE_INFO::BUTTONS
-        sta     (ptr1),y
-
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
-; specific data in ptr1, and the ioctl code in A.
-; Must return an error code in a/x.
-;
-
-IOCTL:  lda     #<MOUSE_ERR_INV_IOCTL     ; We don't support ioctls for now
-        ldx     #>MOUSE_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; IRQ: Irq handler entry point. Called as a subroutine but in IRQ context
-; (so be careful). The routine MUST return carry set if the interrupt has been
-; 'handled' - which means that the interrupt source is gone. Otherwise it
-; MUST return carry clear.
-;
-
-IRQ:    jsr     CPREP
-        lda     KEY_COUNT
-        sta     old_key_count
-        lda     #$7F
-        sta     CIA1_PRA
-        lda     CIA1_PRB                ; Read joystick #0
-        and     #$1F
-        eor     #$1F                    ; Make all bits active high
-        sta     Buttons
-
-; Check left/right
-
-        and     #(JOY::LEFT | JOY::RIGHT)
-        beq     @SkipX                  ;
-
-; We will cheat here and rely on the fact that either the left, OR the right
-; bit can be active
-
-        and     #JOY::RIGHT             ; Check RIGHT bit
-        bne     @Right
-        lda     #$FF
-        tax
-        bne     @AddX                   ; Branch always
-@Right: lda     #$01
-        ldx     #$00
-
-; Calculate the new X coordinate (--> a/y)
-
-@AddX:  add     XPos
-        tay                             ; Remember low byte
-        txa
-        adc     XPos+1
-        tax
-
-; Limit the X coordinate to the bounding box
-
-        cpy     XMin
-        sbc     XMin+1
-        bpl     @L1
-        ldy     XMin
-        ldx     XMin+1
-        jmp     @L2
-@L1:    txa
-
-        cpy     XMax
-        sbc     XMax+1
-        bmi     @L2
-        ldy     XMax
-        ldx     XMax+1
-@L2:    sty     XPos
-        stx     XPos+1
-
-; Move the mouse pointer to the new X pos
-
-        tya
-        jsr     CMOVEX
-
-; Calculate the Y movement vector
-
-@SkipX: lda     Buttons                 ; Read joystick #0
-        and     #(JOY::UP | JOY::DOWN)  ; Check up/down
-        beq     @SkipY                  ;
-
-; We will cheat here and rely on the fact that either the up, OR the down
-; bit can be active
-
-        lsr     a                       ; Check UP bit
-        bcc     @Down
-        lda     #$FF
-        tax
-        bne     @AddY
-@Down:  lda     #$01
-        ldx     #$00
-
-; Calculate the new Y coordinate (--> a/y)
-
-@AddY:  add     YPos
-        tay                             ; Remember low byte
-        txa
-        adc     YPos+1
-        tax
-
-; Limit the Y coordinate to the bounding box
-
-        cpy     YMin
-        sbc     YMin+1
-        bpl     @L3
-        ldy     YMin
-        ldx     YMin+1
-        jmp     @L4
-@L3:    txa
-
-        cpy     YMax
-        sbc     YMax+1
-        bmi     @L4
-        ldy     YMax
-        ldx     YMax+1
-@L4:    sty     YPos
-        stx     YPos+1
-
-; Move the mouse pointer to the new X pos
-
-        tya
-        jsr     CMOVEY
-
-; Done
-
-@SkipY: jsr     CDRAW
-        clc                             ; Interrupt not "handled"
-        rts
-
-.define OLD_BUTTONS Buttons             ; tells callback.inc where the old port status is stored
-.include "callback.inc"
diff --git a/libsrc/c128/mou/c128-pot.s b/libsrc/c128/mou/c128-pot.s
deleted file mode 100644 (file)
index f61f88d..0000000
+++ /dev/null
@@ -1,482 +0,0 @@
-;
-; Driver for a potentiometer "mouse", e.g. Koala Pad
-;
-; 2006-08-20, Stefan Haubenthal
-; 2009-09-26, Ullrich von Bassewitz
-; 2014-04-26, Christian Groessler
-; 2014-05-05, Greg King
-;
-
-        .include        "zeropage.inc"
-        .include        "mouse-kernel.inc"
-        .include        "c128.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c128_pot_mou
-
-HEADER:
-
-; Driver signature
-
-        .byte   $6d, $6f, $75           ; "mou"
-        .byte   MOUSE_API_VERSION       ; Mouse driver API version number
-
-; Library reference
-
-libref: .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   HIDE
-        .addr   SHOW
-        .addr   SETBOX
-        .addr   GETBOX
-        .addr   MOVE
-        .addr   BUTTONS
-        .addr   POS
-        .addr   INFO
-        .addr   IOCTL
-        .addr   IRQ
-
-; Mouse driver flags
-
-        .byte   MOUSE_FLAG_LATE_IRQ
-
-; Callback table, set by the kernel before INSTALL is called
-
-CHIDE:  jmp     $0000                   ; Hide the cursor
-CSHOW:  jmp     $0000                   ; Show the cursor
-CPREP:  jmp     $0000                   ; Prepare to move the cursor
-CDRAW:  jmp     $0000                   ; Draw the cursor
-CMOVEX: jmp     $0000                   ; Move the cursor to X coord
-CMOVEY: jmp     $0000                   ; Move the cursor to Y coord
-
-
-;----------------------------------------------------------------------------
-; Constants
-
-SCREEN_HEIGHT   = 200
-SCREEN_WIDTH    = 320
-
-.enum   JOY
-        UP      = $01
-        DOWN    = $02
-        LEFT    = $04
-        RIGHT   = $08
-        FIRE    = $10
-.endenum
-
-;----------------------------------------------------------------------------
-; Global variables. The bounding box values are sorted so that they can be
-; written with the least effort in the SETBOX and GETBOX routines, so don't
-; reorder them.
-
-.bss
-
-Vars:
-YPos:           .res    2               ; Current mouse position, Y
-XPos:           .res    2               ; Current mouse position, X
-XMin:           .res    2               ; X1 value of bounding box
-YMin:           .res    2               ; Y1 value of bounding box
-XMax:           .res    2               ; X2 value of bounding box
-YMax:           .res    2               ; Y2 value of bounding box
-Buttons:        .res    1               ; Button mask
-
-INIT_save:      .res    1
-
-; Keyboard buffer fill level at start of interrupt
-
-old_key_count:  .res    1
-
-; Original IRQ vector
-
-old_irq:        .res    2
-
-.rodata
-
-; Default values for above variables
-; (We use ".proc" because we want to define both a label and a scope.)
-
-.proc   DefVars
-        .word   SCREEN_HEIGHT/2         ; YPos
-        .word   SCREEN_WIDTH/2          ; XPos
-        .word   0                       ; XMin
-        .word   0                       ; YMin
-        .word   SCREEN_WIDTH - 1        ; XMax
-        .word   SCREEN_HEIGHT - 1       ; YMax
-        .byte   0                       ; Buttons
-.endproc
-
-.code
-
-;----------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present.
-; Must return an MOUSE_ERR_xx code in a/x.
-
-INSTALL:
-
-; Disable the BASIC interpreter's interrupt-driven sprite-motion code.
-; That allows direct access to the VIC-IIe's sprite registers.
-
-        lda     INIT_STATUS
-        sta     INIT_save
-        lda     #%11000000
-        sta     INIT_STATUS
-
-; Initialize variables. Just copy the default stuff over
-
-        ldx     #.sizeof(DefVars)-1
-@L1:    lda     DefVars,x
-        sta     Vars,x
-        dex
-        bpl     @L1
-
-; Be sure the mouse cursor is invisible and at the default location. We
-; need to do that here, because our mouse interrupt handler doesn't set the
-; mouse position if it hasn't changed.
-
-        sei
-        jsr     CHIDE
-        lda     XPos
-        ldx     XPos+1
-        jsr     CMOVEX
-        lda     YPos
-        ldx     YPos+1
-        jsr     CMOVEY
-
-; Initiate our IRQ magic.
-
-        ; Remember the ROM IRQ continuation address.
-        ldx     IRQInd+2
-        lda     IRQInd+1
-        stx     old_irq+1
-        sta     old_irq
-
-        lda     libref
-        ldx     libref+1
-        sta     ptr3
-        stx     ptr3+1
-
-        ; Set the ROM IRQ continuation address to point to the provided routine.
-        ldy     #2
-        lda     (ptr3),y
-        sta     IRQInd+1
-        iny
-        lda     (ptr3),y
-        sta     IRQInd+2
-
-        ; Set the address of our IRQ callback routine.
-        ; Because it's called via "rts", we must use "address-1".
-        iny
-        lda     #<(callback-1)
-        sta     (ptr3),y
-        iny
-        lda     #>(callback-1)
-        sta     (ptr3),y
-
-        ; Set the ROM entry-point vector.
-        ; Because it's called via "rts", we must decrement it by one.
-        iny
-        lda     old_irq
-        sub     #<1
-        sta     (ptr3),y
-        iny
-        lda     old_irq+1
-        sbc     #>1
-        sta     (ptr3),y
-        cli
-
-; Done, return zero (= MOUSE_ERR_OK)
-
-        ldx     #$00
-        txa
-        rts
-
-;----------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; No return code required (the driver is removed from memory on return).
-
-UNINSTALL:
-        lda     old_irq
-        ldx     old_irq+1
-        sei
-        sta     IRQInd+1
-        stx     IRQInd+2
-        ;cli                            ; This will be done at end of HIDE
-
-        jsr     HIDE                    ; Hide cursor on exit
-        lda     INIT_save
-        sta     INIT_STATUS
-        rts
-
-;----------------------------------------------------------------------------
-; HIDE routine. Is called to hide the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently visible and should get hidden. For most drivers,
-; no special action is required besides hiding the mouse cursor.
-; No return code required.
-
-HIDE:   sei
-        jsr     CHIDE
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SHOW routine. Is called to show the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently hidden and should become visible. For most drivers,
-; no special action is required besides enabling the mouse cursor.
-; No return code required.
-
-SHOW:   sei
-        jsr     CSHOW
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SETBOX: Set the mouse bounding box. The parameters are passed as they come
-; from the C program, that is, a pointer to a mouse_box struct in a/x.
-; No checks are done if the mouse is currently inside the box, this is the job
-; of the caller. It is not necessary to validate the parameters, trust the
-; caller and save some code here. No return code required.
-
-SETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX)-1
-        sei
-
-@L1:    lda     (ptr1),y
-        sta     XMin,y
-        dey
-        bpl     @L1
-
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; GETBOX: Return the mouse bounding box. The parameters are passed as they
-; come from the C program, that is, a pointer to a mouse_box struct in a/x.
-
-GETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX)-1
-        sei
-
-@L1:    lda     XMin,y
-        sta     (ptr1),y
-        dey
-        bpl     @L1
-
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; MOVE: Move the mouse to a new position. The position is passed as it comes
-; from the C program, that is: X on the stack and Y in a/x. The C wrapper will
-; remove the parameter from the stack on return.
-; No checks are done if the new position is valid (within the bounding box or
-; the screen). No return code required.
-;
-
-MOVE:   sei                             ; No interrupts
-
-        sta     YPos
-        stx     YPos+1                  ; New Y position
-        jsr     CMOVEY                  ; Set it
-
-        ldy     #$01
-        lda     (sp),y
-        sta     XPos+1
-        tax
-        dey
-        lda     (sp),y
-        sta     XPos                    ; New X position
-
-        jsr     CMOVEX                  ; Move the cursor
-
-        cli                             ; Allow interrupts
-        rts
-
-;----------------------------------------------------------------------------
-; BUTTONS: Return the button mask in a/x.
-
-BUTTONS:
-        lda     Buttons
-        ldx     #$00
-
-; Make the buttons look like a 1351 mouse.
-
-        and     #JOY::LEFT | JOY::RIGHT
-        lsr     a
-        lsr     a
-        ;clc                            ; ("lsr" shifted zero into carry flag)
-        adc     #%00001110              ; Shift bit 1 over to bit 4
-        and     #MOUSE_BTN_LEFT | MOUSE_BTN_RIGHT
-        rts
-
-;----------------------------------------------------------------------------
-; POS: Return the mouse position in the MOUSE_POS struct pointed to by ptr1.
-; No return code required.
-
-POS:    ldy     #MOUSE_POS::XCOORD      ; Structure offset
-
-        sei                             ; Disable interrupts
-        lda     XPos                    ; Transfer the position
-        sta     (ptr1),y
-        lda     XPos+1
-        iny
-        sta     (ptr1),y
-        lda     YPos
-        iny
-        sta     (ptr1),y
-        lda     YPos+1
-        cli                             ; Enable interrupts
-
-        iny
-        sta     (ptr1),y                ; Store last byte
-
-        rts                             ; Done
-
-;----------------------------------------------------------------------------
-; INFO: Returns mouse position and current button mask in the MOUSE_INFO
-; struct pointed to by ptr1. No return code required.
-;
-; We're cheating here to keep the code smaller: The first fields of the
-; mouse_info struct are identical to the mouse_pos struct, so we will just
-; call _mouse_pos to initialize the struct pointer and fill the position
-; fields.
-
-INFO:   jsr     POS
-
-; Fill in the button state
-
-        jsr     BUTTONS
-        ldy     #MOUSE_INFO::BUTTONS
-        sta     (ptr1),y
-
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
-; specific data in ptr1, and the ioctl code in A.
-; Must return an error code in a/x.
-;
-
-IOCTL:  lda     #<MOUSE_ERR_INV_IOCTL     ; We don't support ioctls for now
-        ldx     #>MOUSE_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; IRQ: Irq handler entry point. Called as a subroutine but in IRQ context
-; (so be careful).
-;
-
-IRQ:    jsr     CPREP
-        lda     KEY_COUNT
-        sta     old_key_count
-        lda     #$7F
-        sta     CIA1_PRA
-        lda     CIA1_PRB                ; Read port #1
-        eor     #%11111111              ; Make all bits active high
-        sta     Buttons
-
-        ldx     #%01000000              ; Read port 1 paddles
-        stx     CIA1_PRA
-        ldy     #<256
-:       dey
-        bne     :-
-        ldx     SID_ADConv1
-        stx     XPos
-        ldx     SID_ADConv2
-        stx     YPos
-
-        lda     #$FF
-        tax
-        bne     @AddX                   ; Branch always
-        lda     #$01
-        ldx     #$00
-
-; Calculate the new X coordinate (--> a/y)
-
-@AddX:  add     XPos
-        tay                             ; Remember low byte
-        txa
-        adc     XPos+1
-        tax
-
-; Limit the X coordinate to the bounding box
-
-        cpy     XMin
-        sbc     XMin+1
-        bpl     @L1
-        ldy     XMin
-        ldx     XMin+1
-        jmp     @L2
-@L1:    txa
-
-        cpy     XMax
-        sbc     XMax+1
-        bmi     @L2
-        ldy     XMax
-        ldx     XMax+1
-@L2:    sty     XPos
-        stx     XPos+1
-
-; Move the mouse pointer to the new X pos
-
-        tya
-        jsr     CMOVEX
-
-        lda     #$FF
-        tax
-        bne     @AddY
-@Down:  lda     #$01
-        ldx     #$00
-
-; Calculate the new Y coordinate (--> a/y)
-
-@AddY:  add     YPos
-        tay                             ; Remember low byte
-        txa
-        adc     YPos+1
-        tax
-
-; Limit the Y coordinate to the bounding box
-
-        cpy     YMin
-        sbc     YMin+1
-        bpl     @L3
-        ldy     YMin
-        ldx     YMin+1
-        jmp     @L4
-@L3:    txa
-
-        cpy     YMax
-        sbc     YMax+1
-        bmi     @L4
-        ldy     YMax
-        ldx     YMax+1
-@L4:    sty     YPos
-        stx     YPos+1
-
-; Move the mouse pointer to the new X pos
-
-        tya
-        jsr     CMOVEY
-        jsr     CDRAW
-        clc                             ; Interrupt not "handled"
-        rts
-
-.define OLD_BUTTONS Buttons             ; Tells callback.inc where the old port status is stored
-.include        "callback.inc"
diff --git a/libsrc/c128/mou/callback.inc b/libsrc/c128/mou/callback.inc
deleted file mode 100644 (file)
index 9f1d749..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-;
-; Callback routine called from the IRQ handler after the ROM IRQ handler
-; had been run.
-;
-; Christian Groessler, 24.04.2014
-;
-; Check if there was button/joystick activity before and/or after the ROM handler.
-; If there was activity, discard the key presses since they are most
-; probably "phantom" key presses.
-
-callback:
-        ldx     old_key_count
-        cpx     KEY_COUNT
-        beq     @nokey
-
-        lda     OLD_BUTTONS             ; keypress before?
-        bne     @discard_key            ; yes, discard key
-
-        lda     #$7F
-        sta     CIA1_PRA
-        lda     CIA1_PRB                ; Read joystick #0
-        and     #$1F
-        eor     #$1F                    ; keypress after
-        beq     @nokey                  ; no, probably a real key press
-
-@discard_key:
-        stx     KEY_COUNT               ; set old keyboard buffer fill level
-
-@nokey: rts
diff --git a/libsrc/c128/mouse_stat_stddrv.s b/libsrc/c128/mouse_stat_stddrv.s
deleted file mode 100644 (file)
index 29f2c63..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Address of the static standard mouse driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void mouse_static_stddrv[];
-;
-
-        .export _mouse_static_stddrv
-        .import _c128_1351_mou
-
-.rodata
-
-_mouse_static_stddrv := _c128_1351_mou
diff --git a/libsrc/c128/mouse_stddrv.s b/libsrc/c128/mouse_stddrv.s
deleted file mode 100644 (file)
index a9777a0..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Name of the standard mouse driver
-;
-; Ullrich von Bassewitz, 2009-09-11
-;
-; const char mouse_stddrv[];
-;
-
-        .export _mouse_stddrv
-
-.rodata
-
-_mouse_stddrv:  .asciiz "c128-1351.mou"
-
-
diff --git a/libsrc/c128/mouseref.s b/libsrc/c128/mouseref.s
deleted file mode 100644 (file)
index 243eda8..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-;
-; Pointer for library references by device drivers.
-;
-; Helper-routines for the interrupt handler that rejects bogus keypresses
-; that are caused by mouse-like devices.
-;
-; 2013-07-25, Greg King
-; 2014-04-26, Christian Groessler
-;
-
-        .include        "c128.inc"
-
-        .export         mouse_libref, _pen_adjuster
-
-        .data
-
-mouse_libref:                   ; generic label for mouse-kernel
-
-; A program optionally can set this pointer to a function that gives
-; a calibration value to a driver.  If this pointer isn't NULL,
-; then a driver that wants a value can call that function.
-;
-; The function might read a value from a file; or, it might ask the user
-; to help calibrate the driver.
-;
-; void __fastcall__ (*pen_adjuster)(unsigned char *) = NULL;
-;
-_pen_adjuster:
-        .addr   $0000
-
-        .addr   IRQStub2
-callback:                       ; callback into mouse driver after ROM IRQ handler has been run
-        .addr   $0000           ; (filled in by mouse driver)
-jmp_rom_hdlr:                   ; original ROM indirect IRQ handler address
-        .addr   $0000           ; (filled in by mouse driver)
-
-
-.segment        "LOWCODE"
-
-; Called from irq.s when it thinks it chains to the original handler.
-; ROM is banked in again. In order to call the callback we have to
-; bank it out one more time.
-
-IRQStub2:
-
-; Call ROM handler and prepare stack so that it will return to us.
-
-        ; setup fake IRQ stack frame which will return to "IRQCont"
-        lda     #>@IRQCont
-        pha
-        lda     #<@IRQCont
-        pha
-        php
-
-        ; mimic the contents saved on the stack by the ROM IRQ entry handler
-        pha                     ; A
-        pha                     ; X
-        pha                     ; Y
-        lda     #MMU_CFG_CC65   ; MMU configuration which will be active after the ROM handler returns
-        pha
-
-        ; map out ROM
-        ldy     MMU_CR
-        sta     MMU_CR
-
-        ; push address of ROM handler on stack and jump to it
-        lda     jmp_rom_hdlr+1
-        pha
-        lda     jmp_rom_hdlr
-        pha
-
-        sty     MMU_CR          ; map in ROM
-        rts                     ; jump to ROM handler
-
-        ; our MMU configuration byte we pushed on the stack before (MMU_CFG_CC65) is now active
-
-@IRQCont:
-
-        ; call mouse driver callback routine
-        lda     #>(@IRQCont2-1)
-        pha
-        lda     #<(@IRQCont2-1)
-        pha
-        lda     callback+1
-        pha
-        lda     callback
-        pha
-        rts                     ; jump to callback routine
-
-@IRQCont2:
-
-        ; return from interrupt
-        ; We could just jump to $FF33, but since I don't know whether this address is valid in all
-        ; ROM versions, duplicate that code here.
-
-        pla
-        sta     MMU_CR          ; MMU configuration register
-        pla
-        tay
-        pla
-        tax
-        pla
-        rti
diff --git a/libsrc/c128/pencalib.c b/libsrc/c128/pencalib.c
deleted file mode 100644 (file)
index b7bd701..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
-** Calibrate lightpen drivers to the current video hardware.
-**
-** 2013-07-25, Greg King
-**
-*/
-
-
-#include <conio.h>
-#include <mouse.h>
-#include <pen.h>
-
-
-#define COMMAND1 "Adjust by clicking on line."
-#define COMMAND2 "Finish by clicking off bar."
-
-
-/* There is a delay between when the VIC sends its signal, and when the display
-** shows that signal.  There is another delay between the display and when the
-** lightpen says that it saw that signal.  Each display and pen is different.
-** Therefore, the driver must be calibrated to them.  A white bar is painted on
-** the screen; and, a line is drawn down the middle of it.  When the user
-** clicks on that line, the difference between its position and where the VIC
-** thinks that the pen is pointing becomes an offset that is subtracted from
-** what the VIC sees.
-*/
-void __fastcall__ pen_calibrate (unsigned char *XOffset)
-{
-    unsigned char oldBg = bgcolor (COLOR_BLUE);
-    unsigned char oldText = textcolor (COLOR_GRAY3);
-    unsigned char oldRev = revers (1);
-    unsigned char sprite0Color = VIC.spr_color[0];
-    unsigned char width, width2, height, height4, height8;
-    struct mouse_info info;
-
-    screensize (&width, &height);
-    width2 = width / 2;
-    height4 = height / 4;
-    height8 = height4 * 8;
-
-    /* Draw a bar and line. */
-
-    clrscr ();
-    cclearxy (0, height4, height4 * width);
-    cvlinexy (width2, height4 + 1, height4 - 2);
-
-    /* Print instructions. */
-
-    revers (0);
-    cputsxy (width2 - (sizeof COMMAND1) / 2, height / 2 + 1, COMMAND1);
-    cputsxy (width2 - (sizeof COMMAND2) / 2, height / 2 + 3, COMMAND2);
-
-    VIC.spr_color[0] = COLOR_GRAY2;
-    mouse_show ();
-    mouse_move (width2 * 8, height8 / 2);
-
-    for (;;) {
-        /* Wait for the main button to be released. */
-
-        do ; while ((mouse_buttons () & MOUSE_BTN_LEFT));
-
-        /* Wait for the main button to be pressed. */
-
-        do {
-            mouse_info (&info);
-        } while (!(info.buttons & MOUSE_BTN_LEFT));
-
-        /* Find out if the pen is on or off the bar. */
-
-        if (info.pos.y < height8 || info.pos.y >= height8 * 2) {
-            break;
-        }
-
-        /* On the bar; adjust the offset. */
-        /* Characters are eight pixels wide.
-        ** The VIC-II sees every other pixel;
-        ** so, we use half of the difference.
-        */
-
-        *XOffset += (info.pos.x - (width2 * 8 + 8/2)) / 2;
-    }
-
-    /* Off the bar; wait for the main button to be released. */
-
-    do ; while ((mouse_buttons () & MOUSE_BTN_LEFT));
-
-    mouse_hide ();
-    VIC.spr_color[0] = sprite0Color;
-    revers (oldRev);
-    textcolor (oldText);
-    bgcolor (oldBg);
-    clrscr ();
-}
diff --git a/libsrc/c128/randomize.s b/libsrc/c128/randomize.s
deleted file mode 100644 (file)
index ae63184..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; 2002-11-05, Ullrich von Bassewitz
-; 2015-09-11, Greg King
-;
-; void _randomize (void);
-; /* Initialize the random number generator */
-;
-
-        .export         __randomize
-        .import         _srand
-
-        .include        "c128.inc"
-
-__randomize:
-        ldx     VIC_HLINE       ; Use VIC rasterline as high byte
-        lda     TIME+2          ; Use 60HZ clock as low byte
-        jmp     _srand          ; Initialize generator
-
diff --git a/libsrc/c128/revers.s b/libsrc/c128/revers.s
deleted file mode 100644 (file)
index f19400b..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; unsigned char revers (unsigned char onoff);
-;
-
-        .export         _revers
-
-        .include        "c128.inc"
-
-.proc   _revers
-
-        ldx     #$00            ; Assume revers off
-        tay                     ; Test onoff
-        beq     L1              ; Jump if off
-        ldx     #$80            ; Load on value
-        ldy     #$00            ; Assume old value is zero
-L1:     lda     RVS             ; Load old value
-        stx     RVS             ; Set new value
-        beq     L2              ; Jump if old value zero
-        iny                     ; Make old value = 1
-L2:     ldx     #$00            ; Load high byte of result
-        tya                     ; Load low byte, set CC
-        rts
-
-.endproc
-
diff --git a/libsrc/c128/ser/c128-swlink.s b/libsrc/c128/ser/c128-swlink.s
deleted file mode 100644 (file)
index 98411d4..0000000
+++ /dev/null
@@ -1,504 +0,0 @@
-;
-; Serial driver for the C128 using a Swiftlink or Turbo-232 cartridge.
-;
-; Ullrich von Bassewitz, 2003-04-18
-;
-; The driver is based on the cc65 rs232 module, which in turn is based on
-; Craig Bruce device driver for the Switftlink/Turbo-232.
-;
-; SwiftLink/Turbo-232 v0.90 device driver, by Craig Bruce, 14-Apr-1998.
-;
-; This software is Public Domain.  It is in Buddy assembler format.
-;
-; This device driver uses the SwiftLink RS-232 Serial Cartridge, available from
-; Creative Micro Designs, Inc, and also supports the extensions of the Turbo232
-; Serial Cartridge.  Both devices are based on the 6551 ACIA chip.  It also
-; supports the "hacked" SwiftLink with a 1.8432 MHz crystal.
-;
-; The code assumes that the kernal + I/O are in context.  On the C128, call
-; it from Bank 15.  On the C64, don't flip out the Kernal unless a suitable
-; NMI catcher is put into the RAM under then Kernal.  For the SuperCPU, the
-; interrupt handling assumes that the 65816 is in 6502-emulation mode.
-;
-
-        .include        "zeropage.inc"
-        .include        "ser-kernel.inc"
-        .include        "ser-error.inc"
-        .include        "c128.inc"
-
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c128_swlink_ser
-
-; Driver signature
-
-        .byte   $73, $65, $72           ; "ser"
-        .byte   SER_API_VERSION         ; Serial API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .word   INSTALL
-        .word   UNINSTALL
-        .word   OPEN
-        .word   CLOSE
-        .word   GET
-        .word   PUT
-        .word   STATUS
-        .word   IOCTL
-        .word   IRQ
-
-;----------------------------------------------------------------------------
-; I/O definitions
-
-ACIA            = $DE00
-ACIA_DATA       = ACIA+0        ; Data register
-ACIA_STATUS     = ACIA+1        ; Status register
-ACIA_CMD        = ACIA+2        ; Command register
-ACIA_CTRL       = ACIA+3        ; Control register
-
-;----------------------------------------------------------------------------
-;
-; Global variables
-;
-
-; We reuse the RS232 zero page variables for the driver, since the ROM
-; routines cannot be used together with this driver (may also use $A0F
-; and following in case of problems).
-RecvHead        := $A7          ; Head of receive buffer
-RecvTail        := $A8          ; Tail of receive buffer
-RecvFreeCnt     := $A9          ; Number of bytes in receive buffer
-SendHead        := $AA          ; Head of send buffer
-SendTail        := $AB          ; Tail of send buffer
-SendFreeCnt     := $B4          ; Number of bytes free in send buffer
-Stopped         := $B5          ; Flow-stopped flag
-RtsOff          := $B6          ;
-
-; Send and receive buffers: 256 bytes each
-RecvBuf         := $0C00        ; Use the ROM buffers
-SendBuf         := $0D00
-
-.rodata
-
-; Tables used to translate RS232 params into register values
-
-BaudTable:                      ; bit7 = 1 means setting is invalid
-        .byte   $FF             ; SER_BAUD_45_5
-        .byte   $FF             ; SER_BAUD_50
-        .byte   $FF             ; SER_BAUD_75
-        .byte   $FF             ; SER_BAUD_110
-        .byte   $FF             ; SER_BAUD_134_5
-        .byte   $02             ; SER_BAUD_150
-        .byte   $05             ; SER_BAUD_300
-        .byte   $06             ; SER_BAUD_600
-        .byte   $07             ; SER_BAUD_1200
-        .byte   $FF             ; SER_BAUD_1800
-        .byte   $08             ; SER_BAUD_2400
-        .byte   $09             ; SER_BAUD_3600
-        .byte   $0A             ; SER_BAUD_4800
-        .byte   $0B             ; SER_BAUD_7200
-        .byte   $0C             ; SER_BAUD_9600
-        .byte   $0E             ; SER_BAUD_19200
-        .byte   $0F             ; SER_BAUD_38400
-        .byte   $FF             ; SER_BAUD_57600
-        .byte   $FF             ; SER_BAUD_115200
-        .byte   $FF             ; SER_BAUD_230400
-
-BitTable:
-        .byte   $60             ; SER_BITS_5
-        .byte   $40             ; SER_BITS_6
-        .byte   $20             ; SER_BITS_7
-        .byte   $00             ; SER_BITS_8
-
-StopTable:
-        .byte   $00             ; SER_STOP_1
-        .byte   $80             ; SER_STOP_2
-
-ParityTable:
-        .byte   $00             ; SER_PAR_NONE
-        .byte   $20             ; SER_PAR_ODD
-        .byte   $60             ; SER_PAR_EVEN
-        .byte   $A0             ; SER_PAR_MARK
-        .byte   $E0             ; SER_PAR_SPACE
-
-.code
-
-;----------------------------------------------------------------------------
-; Interrupt stub that is copied into low RAM. The startup code uses a special
-; memory configuration with just kernal and I/O enabled (anything else is RAM).
-; The NMI handler in ROM will switch back to a configuration where just the
-; low 16K RAM are accessible. So we have to copy a smal piece of code into
-; low RAM that enables the cc65 configuration and then jumps to the real NMI
-; handler.
-
-NmiStubOrig     := *
-
-.org    $1150                           ; BASIC graphics area
-.proc   NmiStub
-
-        lda     #MMU_CFG_CC65           ; Bank 0 with kernal ROM...
-        sta     MMU_CR                  ; ...enable
-        jsr     NmiHandler              ; Call the actual NMI handler
-        lda     #$00                    ; Get ROM config...
-        sta     MMU_CR                  ; ...and enable it
-Vector  := *+1
-        .byte   $4C                     ; Jump to the saved IRQ vector
-
-.endproc
-.reloc
-
-;----------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present.
-; Must return an SER_ERR_xx code in a/x.
-
-INSTALL:
-
-; Deactivate DTR and disable 6551 interrupts
-
-        lda     #%00001010
-        sta     ACIA_CMD
-
-; Copy the NMI stub into low memory
-
-        ldy     #.sizeof (NmiStub)-1
-@L1:    lda     NmiStubOrig,y
-        sta     NmiStub,y
-        dey
-        bpl     @L1
-
-; Set up the nmi vector
-
-        lda     NMIVec
-        ldy     NMIVec+1
-        sta     NmiStub::Vector+0
-        sty     NmiStub::Vector+1
-        lda     #<NmiStub
-        ldy     #>NmiStub
-SetNMI: sta     NMIVec
-        sty     NMIVec+1
-
-; Done, return an error code
-
-        lda     #<SER_ERR_OK
-        tax                     ; A is zero
-        rts
-
-;----------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Must return an SER_ERR_xx code in a/x.
-
-UNINSTALL:
-
-; Stop interrupts, drop DTR
-
-        lda     #%00001010
-        sta     ACIA_CMD
-
-; Restore NMI vector and return OK
-
-        lda     NmiStub::Vector+0
-        ldy     NmiStub::Vector+1
-        jmp     SetNMI
-
-;----------------------------------------------------------------------------
-; PARAMS routine. A pointer to a ser_params structure is passed in ptr1.
-; Must return an SER_ERR_xx code in a/x.
-
-OPEN:
-
-; Check if the handshake setting is valid
-
-        ldy     #SER_PARAMS::HANDSHAKE  ; Handshake
-        lda     (ptr1),y
-        cmp     #SER_HS_HW              ; This is all we support
-        bne     InvParam
-
-; Initialize buffers
-
-        jsr     InitBuffers
-
-; Set the value for the control register, which contains stop bits, word
-; length and the baud rate.
-
-        ldy     #SER_PARAMS::BAUDRATE
-        lda     (ptr1),y                ; Baudrate index
-        tay
-        lda     BaudTable,y             ; Get 6551 value
-        bmi     InvBaud                 ; Branch if rate not supported
-        sta     tmp1
-
-        ldy     #SER_PARAMS::DATABITS   ; Databits
-        lda     (ptr1),y
-        tay
-        lda     BitTable,y
-        ora     tmp1
-        sta     tmp1
-
-        ldy     #SER_PARAMS::STOPBITS   ; Stopbits
-        lda     (ptr1),y
-        tay
-        lda     StopTable,y
-        ora     tmp1
-        ora     #%00010000              ; Receiver clock source = baudrate
-        sta     ACIA_CTRL
-
-; Set the value for the command register. We remember the base value in
-; RtsOff, since we will have to manipulate ACIA_CMD often.
-
-        ldy     #SER_PARAMS::PARITY     ; Parity
-        lda     (ptr1),y
-        tay
-        lda     ParityTable,y
-        ora     #%00000001              ; DTR active
-        sta     RtsOff
-        ora     #%00001000              ; Enable receive interrupts
-        sta     ACIA_CMD
-
-; Done
-
-        lda     #<SER_ERR_OK
-        tax                             ; A is zero
-        rts
-
-; Invalid parameter
-
-InvParam:
-        lda     #<SER_ERR_INIT_FAILED
-        ldx     #>SER_ERR_INIT_FAILED
-        rts
-
-; Baud rate not available
-
-InvBaud:
-        lda     #<SER_ERR_BAUD_UNAVAIL
-        ldx     #>SER_ERR_BAUD_UNAVAIL
-        rts
-
-;----------------------------------------------------------------------------
-; CLOSE: Close the port, disable interrupts and flush the buffer. Called
-; without parameters. Must return an error code in a/x.
-;
-
-CLOSE:
-
-; Stop interrupts, drop DTR
-
-        lda     #%00001010
-        sta     ACIA_CMD
-
-; Initalize buffers. Returns zero in a
-
-        jsr     InitBuffers
-
-; Return OK
-
-        lda     #<SER_ERR_OK
-        tax                             ; A is zero
-        rts
-
-;----------------------------------------------------------------------------
-; GET: Will fetch a character from the receive buffer and store it into the
-; variable pointer to by ptr1. If no data is available, SER_ERR_NO_DATA is
-; return.
-;
-
-GET:    ldx     SendFreeCnt             ; Send data if necessary
-        inx                             ; X == $FF?
-        beq     @L1
-        lda     #$00
-        jsr     TryToSend
-
-; Check for buffer empty
-
-@L1:    lda     RecvFreeCnt             ; (25)
-        cmp     #$ff
-        bne     @L2
-        lda     #<SER_ERR_NO_DATA
-        ldx     #>SER_ERR_NO_DATA
-        rts
-
-; Check for flow stopped & enough free: release flow control
-
-@L2:    ldx     Stopped                 ; (34)
-        beq     @L3
-        cmp     #63
-        bcc     @L3
-        lda     #$00
-        sta     Stopped
-        lda     RtsOff
-        ora     #%00001000
-        sta     ACIA_CMD
-
-; Get byte from buffer
-
-@L3:    ldx     RecvHead                ; (41)
-        lda     RecvBuf,x
-        inc     RecvHead
-        inc     RecvFreeCnt
-        ldx     #$00                    ; (59)
-        sta     (ptr1,x)
-        txa                             ; Return code = 0
-        rts
-
-;----------------------------------------------------------------------------
-; PUT: Output character in A.
-; Must return an error code in a/x.
-;
-
-PUT:
-
-; Try to send
-
-        ldx     SendFreeCnt
-        inx                             ; X = $ff?
-        beq     @L2
-        pha
-        lda     #$00
-        jsr     TryToSend
-        pla
-
-; Put byte into send buffer & send
-
-@L2:    ldx     SendFreeCnt
-        bne     @L3
-        lda     #<SER_ERR_OVERFLOW      ; X is already zero
-        rts
-
-@L3:    ldx     SendTail
-        sta     SendBuf,x
-        inc     SendTail
-        dec     SendFreeCnt
-        lda     #$ff
-        jsr     TryToSend
-        lda     #<SER_ERR_OK
-        tax
-        rts
-
-;----------------------------------------------------------------------------
-; STATUS: Return the status in the variable pointed to by ptr1.
-; Must return an error code in a/x.
-;
-
-STATUS: lda     ACIA_STATUS
-        ldx     #0
-        sta     (ptr1,x)
-        txa                             ; SER_ERR_OK
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
-; specific data in ptr1, and the ioctl code in A.
-; Must return an error code in a/x.
-;
-
-IOCTL:  lda     #<SER_ERR_INV_IOCTL     ; We don't support ioclts for now
-        ldx     #>SER_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; IRQ: Not used on the C128
-;
-
-IRQ     = $0000
-
-;----------------------------------------------------------------------------
-;
-; NMI handler
-; C128 NMI overhead=76 cycles: int=7, maxLatency=6, ROMenter=33, ROMexit=30
-; C64  NMI overhead=76 cycles: int=7, maxLatency=6, ROMenter=34, ROMexit=29
-;
-; timing: normal=76+43+9=128 cycles, assertFlow=76+52+9=137 cycles
-;
-; C128 @ 115.2k: 177 cycles avail (fast)
-; C64  @  57.6k: 177 cycles avail, worstAvail=177-43? = 134
-; SCPU @ 230.4k: 868 cycles avail: for a joke!
-;
-; Note: Because of the C128 banking, a small stub has to go into low memory,
-; since the ROM NMI entry point switches to a configuration, where only the
-; low 16K of RAM are visible. The entry code switches into the standard cc65
-; configuration (I/O + 16K kernal) and then jumps here. Registers are already
-; saved by the ROM code.
-
-NmiHandler:
-        lda     ACIA_STATUS     ;(4) ;status ;check for byte received
-        and     #$08            ;(2)
-        beq     @L9             ;(2*)
-        cld
-        lda     ACIA_DATA       ;(4)  data  ;get byte and put into receive buffer
-        ldy     RecvTail        ;(4)
-        ldx     RecvFreeCnt     ;(4)
-        beq     @L9             ;(2*) Jump if no space in receive buffer
-        sta     RecvBuf,y       ;(5)
-        inc     RecvTail        ;(6)
-        dec     RecvFreeCnt     ;(6)
-        cpx     #33             ;(2)  check for buffer space low
-        bcc     @L2             ;(2*)
-        rts
-
-; Assert flow control
-
-@L2:    lda     RtsOff          ;(3) assert flow control if buffer space too low
-        sta     ACIA_CMD        ;(4) command
-        sta     Stopped         ;(3)
-@L9:    rts
-
-;----------------------------------------------------------------------------
-; Try to send a byte. Internal routine. A = TryHard
-
-.proc   TryToSend
-
-        sta     tmp1            ; Remember tryHard flag
-@L0:    lda     SendFreeCnt
-        cmp     #$ff
-        beq     @L3             ; Bail out
-
-; Check for flow stopped
-
-@L1:    lda     Stopped
-        bne     @L3             ; Bail out
-
-; Check that swiftlink is ready to send
-
-@L2:    lda     ACIA_STATUS
-        and     #$10
-        bne     @L4
-        bit     tmp1            ;keep trying if must try hard
-        bmi     @L0
-@L3:    rts
-
-; Send byte and try again
-
-@L4:    ldx     SendHead
-        lda     SendBuf,x
-        sta     ACIA_DATA
-        inc     SendHead
-        inc     SendFreeCnt
-        jmp     @L0
-
-.endproc
-
-
-;----------------------------------------------------------------------------
-; Initialize buffers
-
-InitBuffers:
-        ldx     #0
-        stx     Stopped
-        stx     RecvHead
-        stx     RecvTail
-        stx     SendHead
-        stx     SendTail
-        dex                             ; X = 255
-        stx     RecvFreeCnt
-        stx     SendFreeCnt
-        rts
-
-
diff --git a/libsrc/c128/slow.s b/libsrc/c128/slow.s
deleted file mode 100644 (file)
index eda41c8..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-02-13
-;
-; void slow (void);
-; /* Switch the CPU into 1MHz mode. */
-;  */
-;
-
-        .export         _slow
-
-        .include        "c128.inc"
-
-
-.proc   _slow
-
-        lda     #$00
-        sta     VIC_CLK_128
-        rts
-
-.endproc
-
-
diff --git a/libsrc/c128/status.s b/libsrc/c128/status.s
deleted file mode 100644 (file)
index c6f2792..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-;
-; Oliver Schmidt, 2012-09-30
-;
-
-        .exportzp       ST := $90       ; IEC status byte
diff --git a/libsrc/c128/systime.s b/libsrc/c128/systime.s
deleted file mode 100644 (file)
index 0a7f8f3..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-;
-; Stefan Haubenthal, 27.7.2009
-;
-; time_t _systime (void);
-; /* Similar to time(), but:
-; **   - Is not ISO C
-; **   - Does not take the additional pointer
-; **   - Does not set errno when returning -1
-; */
-;
-
-        .include        "time.inc"
-        .include        "c128.inc"
-        .include        "get_tv.inc"
-
-        .constructor    initsystime
-        .importzp       tmp1, tmp2
-        .import         _get_tv
-
-
-;----------------------------------------------------------------------------
-.code
-
-.proc   __systime
-
-        lda     CIA1_TODHR
-        bpl     AM
-        and     #%01111111
-        sed
-        clc
-        adc     #$12
-        cld
-AM:     jsr     BCD2dec
-        sta     TM + tm::tm_hour
-        lda     CIA1_TODMIN
-        jsr     BCD2dec
-        sta     TM + tm::tm_min
-        lda     CIA1_TODSEC
-        jsr     BCD2dec
-        sta     TM + tm::tm_sec
-        lda     CIA1_TOD10              ; Dummy read to unfreeze
-        lda     #<TM
-        ldx     #>TM
-        jmp     _mktime
-
-; dec = (((BCD>>4)*10) + (BCD&0xf))
-BCD2dec:tax
-        and     #%00001111
-        sta     tmp1
-        txa
-        and     #%11110000      ; *16
-        lsr                     ; *8
-        sta     tmp2
-        lsr
-        lsr                     ; *2
-        adc     tmp2            ; = *10
-        adc     tmp1
-        rts
-
-.endproc
-
-;----------------------------------------------------------------------------
-; Constructor that writes to the 1/10 sec register of the TOD to kick it
-; into action. If this is not done, the clock hangs. We will read the register
-; and write it again, ignoring a possible change in between.
-
-.proc   initsystime
-
-        lda     CIA1_TOD10
-        sta     CIA1_TOD10
-        jsr     _get_tv
-        cmp     #TV::PAL
-        bne     @60Hz
-        lda     CIA1_CRA
-        ora     #$80
-        sta     CIA1_CRA
-@60Hz:  rts
-
-.endproc
-
-
-;----------------------------------------------------------------------------
-; TM struct with date set to 1970-01-01
-.data
-
-TM:     .word           0       ; tm_sec
-        .word           0       ; tm_min
-        .word           0       ; tm_hour
-        .word           1       ; tm_mday
-        .word           0       ; tm_mon
-        .word           70      ; tm_year
-        .word           0       ; tm_wday
-        .word           0       ; tm_yday
-        .word           0       ; tm_isdst
-
diff --git a/libsrc/c128/sysuname.s b/libsrc/c128/sysuname.s
deleted file mode 100644 (file)
index 55fe5ba..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; unsigned char __fastcall__ _sysuname (struct utsname* buf);
-;
-
-        .export         __sysuname, utsdata
-
-        .import         utscopy
-
-        __sysuname = utscopy
-
-;--------------------------------------------------------------------------
-; Data. We define a fixed utsname struct here and just copy it.
-
-.rodata
-
-utsdata:
-        ; sysname
-        .asciiz         "cc65"
-
-        ; nodename
-        .asciiz         ""
-
-        ; release
-        .byte           ((.VERSION >> 8) & $0F) + '0'
-        .byte           '.'
-        .byte           ((.VERSION >> 4) & $0F) + '0'
-        .byte           $00
-
-        ; version
-        .byte           (.VERSION & $0F) + '0'
-        .byte           $00
-
-        ; machine
-        .asciiz         "Commodore 128"
-
-
-
diff --git a/libsrc/c128/tgi/c128-vdc.s b/libsrc/c128/tgi/c128-vdc.s
deleted file mode 100644 (file)
index 5100f7f..0000000
+++ /dev/null
@@ -1,780 +0,0 @@
-;
-; Graphics driver for the 640x200x2 mode on the C128 VDC
-; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
-; 23.12.2002
-; 2004-04-04, Greg King
-;
-; NOTES:
-; For any smart monkey that will try to optimize this: PLEASE do tests on
-; real VDC, not only VICE.
-;
-; Only DONE routine contains C128-mode specific stuff, everything else will
-; work in C64-mode of C128 (C64 needs full VDC init then).
-;
-; With special initialization and CALC we can get 320x200 double-pixel mode.
-;
-; Color translation values for BROWN and GRAY3 are obviously wrong, they
-; could be replaced by equiv. of ORANGE and GRAY2 but this would give only
-; 14 of 16 colors available.
-;
-; Register 25 ($19) is said to require different value for VDC v1, but I
-; couldn't find what it should be.
-
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Constants
-
-VDC_ADDR_REG      = $D600                 ; VDC address
-VDC_DATA_REG      = $D601                 ; VDC data
-
-VDC_DSP_HI        = 12                    ; registers used
-VDC_DSP_LO        = 13
-VDC_DATA_HI       = 18
-VDC_DATA_LO       = 19
-VDC_VSCROLL       = 24
-VDC_HSCROLL       = 25
-VDC_COLORS        = 26
-VDC_CSET          = 28
-VDC_COUNT         = 30
-VDC_DATA          = 31
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table and constants.
-
-        module_header   _c128_vdc_tgi
-
-; First part of the header is a structure that has a magic and defines the
-; capabilities of the driver
-
-        .byte   $74, $67, $69           ; "tgi"
-        .byte   TGI_API_VERSION         ; TGI API version number
-        .addr   $0000                   ; Library reference
-xres:   .word   640                     ; X resolution
-yres:   .word   200                     ; Y resolution
-        .byte   2                       ; Number of drawing colors
-pages:  .byte   1                       ; Number of screens available
-        .byte   8                       ; System font X size
-        .byte   8                       ; System font Y size
-        .word   $006A                   ; Aspect ratio (based on 4/3 display)
-        .byte   0                       ; TGI driver flags
-
-; Next comes the jump table. Currently all entries must be valid and may point
-; to an RTS for test versions (function not implemented).
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   INIT
-        .addr   DONE
-        .addr   GETERROR
-        .addr   CONTROL
-        .addr   CLEAR
-        .addr   SETVIEWPAGE
-        .addr   SETDRAWPAGE
-        .addr   SETCOLOR
-        .addr   SETPALETTE
-        .addr   GETPALETTE
-        .addr   GETDEFPALETTE
-        .addr   SETPIXEL
-        .addr   GETPIXEL
-        .addr   LINE
-        .addr   BAR
-        .addr   TEXTSTYLE
-        .addr   OUTTEXT
-        .addr   0                       ; IRQ entry is unused
-
-; ------------------------------------------------------------------------
-; Data.
-
-; Variables mapped to the zero page segment variables. Some of these are
-; used for passing parameters to the driver.
-
-X1              = ptr1
-Y1              = ptr2
-X2              = ptr3
-Y2              = ptr4
-
-ADDR            = tmp1
-TEMP            = tmp3
-TEMP2           = tmp4          ; HORLINE
-TEMP3           = sreg          ; HORLINE
-
-; Absolute variables used in the code
-
-.bss
-
-SCRBASE:        .res    1       ; High byte of screen base
-
-ERROR:          .res    1       ; Error code
-PALETTE:        .res    2       ; The current palette
-
-BITMASK:        .res    1       ; $00 = clear, $FF = set pixels
-
-OLDCOLOR:       .res    1       ; colors before entering gfx mode
-
-; Text output stuff
-TEXTMAGX:       .res    1
-TEXTMAGY:       .res    1
-TEXTDIR:        .res    1
-
-; Constants and tables
-
-.rodata
-
-DEFPALETTE:     .byte   $00, $0f        ; White on black
-PALETTESIZE     = * - DEFPALETTE
-
-BITTAB:         .byte   $80,$40,$20,$10,$08,$04,$02,$01
-
-BITMASKL:       .byte   %11111111, %01111111, %00111111, %00011111
-                .byte   %00001111, %00000111, %00000011, %00000001
-
-BITMASKR:       .byte   %10000000, %11000000, %11100000, %11110000
-                .byte   %11111000, %11111100, %11111110, %11111111
-
-; color translation table (indexed by VIC color)
-COLTRANS:       .byte $00, $0f, $08, $06, $0a, $04, $02, $0c
-                .byte $0d, $0b, $09, $01, $0e, $05, $03, $07
-                ; colors BROWN and GRAY3 are wrong
-
-; VDC initialization table (reg),(val),...,$ff
-InitVDCTab:
-                .byte VDC_DSP_HI, 0             ; viewpage 0 as default
-                .byte VDC_DSP_LO, 0
-                .byte VDC_HSCROLL, $87
-                .byte $ff
-
-SCN80CLR:       .byte 27,88,147,27,88,0
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. May
-; initialize anything that has to be done just once. Is probably empty
-; most of the time.
-;
-; Must set an error code: NO
-;
-
-INSTALL:
-        ; check for VDC version and update register $19 value
-
-        ; check for VDC ram size and update number of available screens
-
-        ldx     #VDC_CSET       ; determine size of RAM...
-        jsr     VDCReadReg
-        sta     tmp1
-        ora     #%00010000
-        jsr     VDCWriteReg     ; turn on 64k
-
-        jsr     settestadr1     ; save original value of test byte
-        jsr     VDCReadByte
-        sta     tmp2
-
-        lda     #$55            ; write $55 here
-        ldy     #ptr1
-        jsr     test64k         ; read it here and there
-        lda     #$aa            ; write $aa here
-        ldy     #ptr2
-        jsr     test64k         ; read it here and there
-
-        jsr     settestadr1
-        lda     tmp2
-        jsr     VDCWriteByte    ; restore original value of test byte
-
-        lda     ptr1            ; do bytes match?
-        cmp     ptr1+1
-        bne     @have64k
-        lda     ptr2
-        cmp     ptr2+1
-        bne     @have64k
-
-        ldx     #VDC_CSET
-        lda     tmp1
-        jsr     VDCWriteReg     ; restore 16/64k flag
-        jmp     @endok          ; and leave default values for 16k
-
-@have64k:
-        lda     #4
-        sta     pages
-@endok:
-        lda     #0
-        sta     SCRBASE         ; draw page 0 as default
-        rts
-
-test64k:
-        sta     tmp1
-        sty     ptr3
-        lda     #0
-        sta     ptr3+1
-        jsr     settestadr1
-        lda     tmp1
-        jsr     VDCWriteByte            ; write $55
-        jsr     settestadr1
-        jsr     VDCReadByte             ; read here
-        pha
-        jsr     settestadr2
-        jsr     VDCReadByte             ; and there
-        ldy     #1
-        sta     (ptr3),y
-        pla
-        dey
-        sta     (ptr3),y
-        rts
-
-settestadr1:
-        ldy     #$02                    ; test page 2 (here)
-        .byte   $2c
-settestadr2:
-        ldy     #$42                    ; or page 64+2 (there)
-        lda     #0
-        jmp     VDCSetSourceAddr
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory. May
-; clean up anything done by INSTALL but is probably empty most of the time.
-;
-; Must set an error code: NO
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; INIT: Changes an already installed device from text mode to graphics
-; mode.
-; Note that INIT/DONE may be called multiple times while the driver
-; is loaded, while INSTALL is only called once, so any code that is needed
-; to initializes variables and so on must go here. Setting palette and
-; clearing the screen is not needed because this is called by the graphics
-; kernel later.
-; The graphics kernel will never call INIT when a graphics mode is already
-; active, so there is no need to protect against that.
-;
-; Must set an error code: YES
-;
-
-INIT:
-
-; Initialize variables
-
-@L1:    ldx     #$FF
-        stx     BITMASK
-
-; Remeber current color value
-        ldx     #VDC_COLORS
-        jsr     VDCReadReg
-        sta     OLDCOLOR
-
-; Switch into graphics mode (set view page 0)
-
-        ldy     #0
-@L2:    ldx     InitVDCTab,y
-        bmi     @L3
-        iny
-        lda     InitVDCTab,y
-        jsr     VDCWriteReg
-        iny
-        bne     @L2
-@L3:
-
-; Done, reset the error code
-
-        lda     #TGI_ERR_OK
-        sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; DONE: Will be called to switch the graphics device back into text mode.
-; The graphics kernel will never call DONE when no graphics mode is active,
-; so there is no need to protect against that.
-;
-; Must set an error code: NO
-;
-
-DONE:
-        ; This part is C128-mode specific
-        jsr $e179               ; reload character set and setup VDC
-        jsr $ff62
-        lda $d7                 ; in 80-columns?
-        bne @L01
-@L0:    lda SCN80CLR,y
-        beq @L1
-        jsr $ffd2               ; print \xe,clr,\xe
-        iny
-        bne @L0
-@L01:   lda #147
-        jsr $ffd2               ; print clr
-@L1:    lda #0                  ; restore view page
-        ldx #VDC_DSP_HI
-        jsr VDCWriteReg
-        lda OLDCOLOR
-        ldx #VDC_COLORS
-        jsr VDCWriteReg         ; restore color (background)
-        lda #$47
-        ldx #VDC_HSCROLL
-        jmp VDCWriteReg         ; switch to text screen
-
-; ------------------------------------------------------------------------
-; GETERROR: Return the error code in A and clear it.
-
-GETERROR:
-        ldx     #TGI_ERR_OK
-        lda     ERROR
-        stx     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; CONTROL: Platform/driver specific entry point.
-;
-; Must set an error code: YES
-;
-
-CONTROL:
-        lda     #TGI_ERR_INV_FUNC
-        sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; CLEAR: Clears the screen.
-;
-; Must set an error code: NO
-;
-
-CLEAR:
-        lda     #0
-        ldy     SCRBASE
-        jsr     VDCSetSourceAddr
-        lda     #0
-        ldx     #VDC_VSCROLL
-        jsr     VDCWriteReg                     ; set fill mode
-        lda     #0
-        jsr     VDCWriteByte                    ; put 1rst byte (fill value)
-        ldy     #62                             ; 62 times
-        lda     #0                              ; 256 bytes
-        ldx     #VDC_COUNT
-@L1:    jsr     VDCWriteReg
-        dey
-        bne     @L1
-        lda     #127
-        jmp     VDCWriteReg                     ; 1+62*256+127=16000=(640*256)/8
-
-; ------------------------------------------------------------------------
-; SETVIEWPAGE: Set the visible page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-;
-; Must set an error code: NO (will only be called if page ok)
-;
-
-SETVIEWPAGE:
-        clc
-        ror
-        ror
-        ror
-        ldx     #VDC_DSP_HI
-        jmp     VDCWriteReg
-
-; ------------------------------------------------------------------------
-; SETDRAWPAGE: Set the drawable page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-;
-; Must set an error code: NO (will only be called if page ok)
-;
-
-SETDRAWPAGE:
-        clc
-        ror
-        ror
-        ror
-        sta     SCRBASE
-        rts
-
-; ------------------------------------------------------------------------
-; SETCOLOR: Set the drawing color (in A). The new color is already checked
-; to be in a valid range (0..maxcolor-1).
-;
-; Must set an error code: NO (will only be called if color ok)
-;
-
-SETCOLOR:
-        tax
-        beq     @L1
-        lda     #$FF
-@L1:    sta     BITMASK
-        rts
-
-; ------------------------------------------------------------------------
-; SETPALETTE: Set the palette (not available with all drivers/hardware).
-; A pointer to the palette is passed in ptr1. Must set an error if palettes
-; are not supported
-;
-; Must set an error code: YES
-;
-
-SETPALETTE:
-        ldy     #PALETTESIZE - 1
-@L1:    lda     (ptr1),y        ; Copy the palette
-        and     #$0F            ; Make a valid color
-        sta     PALETTE,y
-        dey
-        bpl     @L1
-
-; Get the color entries from the palette
-
-        ldy     PALETTE+1       ; Foreground color
-        lda     COLTRANS,y
-        asl     a
-        asl     a
-        asl     a
-        asl     a
-        ldy     PALETTE         ; Background color
-        ora     COLTRANS,y
-
-        ldx     #VDC_COLORS
-        jsr     VDCWriteReg
-        lda     #TGI_ERR_OK     ; Clear error code
-        sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; GETPALETTE: Return the current palette in A/X. Even drivers that cannot
-; set the palette should return the default palette here, so there's no
-; way for this function to fail.
-;
-; Must set an error code: NO
-;
-
-GETPALETTE:
-        lda     #<PALETTE
-        ldx     #>PALETTE
-        rts
-
-; ------------------------------------------------------------------------
-; GETDEFPALETTE: Return the default palette for the driver in A/X. All
-; drivers should return something reasonable here, even drivers that don't
-; support palettes, otherwise the caller has no way to determine the colors
-; of the (not changeable) palette.
-;
-; Must set an error code: NO (all drivers must have a default palette)
-;
-
-GETDEFPALETTE:
-        lda     #<DEFPALETTE
-        ldx     #>DEFPALETTE
-        rts
-
-; ------------------------------------------------------------------------
-; SETPIXEL: Draw one pixel at X1/Y1 = ptr1/ptr2 with the current drawing
-; color. The coordinates passed to this function are never outside the
-; visible screen area, so there is no need for clipping inside this function.
-;
-; Must set an error code: NO
-;
-
-SETPIXEL:
-        jsr     CALC            ; Calculate coordinates
-
-        stx     TEMP
-        lda     ADDR
-        ldy     ADDR+1
-        jsr     VDCSetSourceAddr
-        jsr     VDCReadByte
-        ldx     TEMP
-
-        sta     TEMP
-        eor     BITMASK
-        and     BITTAB,X
-        eor     TEMP
-        pha
-        lda     ADDR
-        ldy     ADDR+1
-        jsr     VDCSetSourceAddr
-        pla
-        jsr     VDCWriteByte
-
-@L9:    rts
-
-; ------------------------------------------------------------------------
-; GETPIXEL: Read the color value of a pixel and return it in A/X. The
-; coordinates passed to this function are never outside the visible screen
-; area, so there is no need for clipping inside this function.
-
-
-GETPIXEL:
-        jsr     CALC            ; Calculate coordinates
-
-        stx     TEMP            ; preserve X
-        lda     ADDR
-        ldy     ADDR+1
-        jsr     VDCSetSourceAddr
-        jsr     VDCReadByte
-        ldx     TEMP
-
-        ldy     #$00
-        and     BITTAB,X
-        beq     @L1
-        iny
-
-@L1:    tya                     ; Get color value into A
-        ldx     #$00            ; Clear high byte
-        rts
-
-; ------------------------------------------------------------------------
-; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where
-; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4 using the current drawing color.
-; Contrary to most other functions, the graphics kernel will sort and clip
-; the coordinates before calling the driver, so on entry the following
-; conditions are valid:
-;       X1 <= X2
-;       Y1 <= Y2
-;       (X1 >= 0) && (X1 < XRES)
-;       (X2 >= 0) && (X2 < XRES)
-;       (Y1 >= 0) && (Y1 < YRES)
-;       (Y2 >= 0) && (Y2 < YRES)
-;
-; Must set an error code: NO
-;
-
-BAR:
-        inc     Y2
-        bne     HORLINE
-        inc     Y2+1
-
-; Original code for a horizontal line
-
-HORLINE:
-        lda X1
-        pha
-        lda X1+1
-        pha
-        jsr CALC                ; get data for LEFT
-        lda BITMASKL,x          ; remember left address and bitmask
-        pha
-        lda ADDR
-        pha
-        lda ADDR+1
-        pha
-
-        lda X2
-        sta X1
-        lda X2+1
-        sta X1+1
-        jsr CALC                ; get data for RIGHT
-        lda BITMASKR,x
-        sta TEMP3
-
-        pla                     ; recall data for LEFT
-        sta X1+1
-        pla
-        sta X1                  ; put left address into X1
-        pla
-
-        cmp #%11111111          ; if left bit <> 0
-        beq @L1
-        sta TEMP2               ; do left byte only...
-        lda X1
-        ldy X1+1
-        jsr VDCSetSourceAddr
-        jsr VDCReadByte
-        sta TEMP
-        eor BITMASK
-        and TEMP2
-        eor TEMP
-        pha
-        lda X1
-        ldy X1+1
-        jsr VDCSetSourceAddr
-        pla
-        jsr VDCWriteByte
-        inc X1                  ; ... and proceed
-        bne @L1
-        inc X1+1
-
-        ; do right byte (if Y2=0 ++ADDR and skip)
-@L1:    lda TEMP3
-        cmp #%11111111          ; if right bit <> 7
-        bne @L11
-        inc ADDR                ; right bit = 7 - the next one is the last
-        bne @L10
-        inc ADDR+1
-@L10:   bne @L2
-
-@L11:   lda ADDR                ; do right byte only...
-        ldy ADDR+1
-        jsr VDCSetSourceAddr
-        jsr VDCReadByte
-        sta TEMP
-        eor BITMASK
-        and TEMP3
-        eor TEMP
-        pha
-        lda ADDR
-        ldy ADDR+1
-        jsr VDCSetSourceAddr
-        pla
-        jsr VDCWriteByte
-
-@L2:                            ; do the fill in the middle
-        lda ADDR                ; calculate offset in full bytes
-        sec
-        sbc X1
-        beq @L3                 ; if equal - there are no more bytes
-        sta ADDR
-
-        lda X1                  ; setup for the left side
-        ldy X1+1
-        jsr VDCSetSourceAddr
-        lda BITMASK             ; get color
-        jsr VDCWriteByte        ; put 1st value
-        ldx ADDR
-        dex
-        beq @L3                 ; 1 byte already written
-
-        stx ADDR                ; if there are more bytes - fill them...
-        ldx #VDC_VSCROLL
-        lda #0
-        jsr VDCWriteReg         ; setup for fill
-        ldx #VDC_COUNT
-        lda ADDR
-        jsr VDCWriteReg         ; ... fill them NOW!
-
-@L3:    pla
-        sta X1+1
-        pla
-        sta X1
-
-; End of horizontal line code
-
-        inc     Y1
-        bne     @L4
-        inc     Y1+1
-@L4:    lda     Y1
-        cmp     Y2
-        bne     @L5
-        lda     Y1+1
-        cmp     Y2+1
-        bne     @L5
-        rts
-
-@L5:    jmp     HORLINE
-
-
-; ------------------------------------------------------------------------
-; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scaling in X and Y
-; direction is passend in X/Y, the text direction is passed in A.
-;
-; Must set an error code: NO
-;
-
-TEXTSTYLE:
-        stx     TEXTMAGX
-        sty     TEXTMAGY
-        sta     TEXTDIR
-        rts
-
-
-; ------------------------------------------------------------------------
-; OUTTEXT: Output text at X/Y = ptr1/ptr2 using the current color and the
-; current text style. The text to output is given as a zero terminated
-; string with address in ptr3.
-;
-; Must set an error code: NO
-;
-
-OUTTEXT:
-        rts
-
-; ------------------------------------------------------------------------
-; Calculate all variables to plot the pixel at X1/Y1.
-;------------------------
-;< X1,Y1 - pixel
-;> ADDR - address of card
-;> X - bit number (X1 & 7)
-CALC:
-        lda     Y1+1
-        sta     ADDR+1
-        lda     Y1
-        asl
-        rol     ADDR+1
-        asl
-        rol     ADDR+1          ; Y*4
-        clc
-        adc     Y1
-        sta     ADDR
-        lda     Y1+1
-        adc     ADDR+1
-        sta     ADDR+1          ; Y*4+Y=Y*5
-        lda     ADDR
-        asl
-        rol     ADDR+1
-        asl
-        rol     ADDR+1
-        asl
-        rol     ADDR+1
-        asl
-        rol     ADDR+1
-        sta     ADDR            ; Y*5*16=Y*80
-        lda     X1+1
-        sta     TEMP
-        lda     X1
-        lsr     TEMP
-        ror
-        lsr     TEMP
-        ror
-        lsr     TEMP
-        ror
-        clc
-        adc     ADDR
-        sta     ADDR
-        lda     ADDR+1          ; ADDR = Y*80+x/8
-        adc     TEMP
-        sta     ADDR+1
-        lda     ADDR+1
-        adc     SCRBASE
-        sta     ADDR+1
-        lda     X1
-        and     #7
-        tax
-        rts
-
-;-------------
-; VDC helpers
-
-VDCSetSourceAddr:
-        pha
-        tya
-        ldx     #VDC_DATA_HI
-        jsr     VDCWriteReg
-        pla
-        ldx     #VDC_DATA_LO
-        bne     VDCWriteReg
-
-VDCReadByte:
-        ldx     #VDC_DATA
-VDCReadReg:
-        stx     VDC_ADDR_REG
-@L0:    bit     VDC_ADDR_REG
-        bpl     @L0
-        lda     VDC_DATA_REG
-        rts
-
-VDCWriteByte:
-        ldx     #VDC_DATA
-VDCWriteReg:
-        stx     VDC_ADDR_REG
-@L0:    bit     VDC_ADDR_REG
-        bpl     @L0
-        sta     VDC_DATA_REG
-        rts
-
-; ------------------------------------------------------------------------
-
-        .include        "../../tgi/tgidrv_line.inc"
diff --git a/libsrc/c128/tgi/c128-vdc2.s b/libsrc/c128/tgi/c128-vdc2.s
deleted file mode 100644 (file)
index a7238e8..0000000
+++ /dev/null
@@ -1,794 +0,0 @@
-;
-; Graphics driver for the 640x480x2 mode on the C128 VDC 64k
-; (values for this mode based on Fred Bowen's document)
-; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
-; 23.12.2002
-; 2004-04-04, Greg King
-;
-; NOTES:
-; For any smart monkey that will try to optimize this: PLEASE do tests on
-; real VDC, not only VICE.
-;
-; Only DONE routine contains C128-mode specific stuff, everything else will
-; work in C64-mode of C128 (C64 needs full VDC init then).
-;
-; With special initialization and CALC we can get 320x200 double-pixel mode.
-;
-; Color translation values for BROWN and GRAY3 are obviously wrong, they
-; could be replaced by equiv. of ORANGE and GRAY2 but this would give only
-; 14 of 16 colors available.
-;
-; Register 25 ($19) is said to require different value for VDC v1, but I
-; couldn't find what it should be.
-
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Constants
-
-VDC_ADDR_REG      = $D600                 ; VDC address
-VDC_DATA_REG      = $D601                 ; VDC data
-
-VDC_DSP_HI        = 12                    ; registers used
-VDC_DSP_LO        = 13
-VDC_DATA_HI       = 18
-VDC_DATA_LO       = 19
-VDC_VSCROLL       = 24
-VDC_HSCROLL       = 25
-VDC_COLORS        = 26
-VDC_CSET          = 28
-VDC_COUNT         = 30
-VDC_DATA          = 31
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table and constants.
-
-        module_header   _c128_vdc2_tgi
-
-; First part of the header is a structure that has a magic and defines the
-; capabilities of the driver
-
-        .byte   $74, $67, $69           ; "tgi"
-        .byte   TGI_API_VERSION         ; TGI API version number
-        .addr   $0000                   ; Library reference
-xres:   .word   640                     ; X resolution
-yres:   .word   480                     ; Y resolution
-        .byte   2                       ; Number of drawing colors
-pages:  .byte   0                       ; Number of screens available
-        .byte   8                       ; System font X size
-        .byte   8                       ; System font Y size
-        .word   $0100                   ; Aspect ratio (based on 4/3 display)
-        .byte   0                       ; TGI driver flags
-
-; Next comes the jump table. Currently all entries must be valid and may point
-; to an RTS for test versions (function not implemented).
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   INIT
-        .addr   DONE
-        .addr   GETERROR
-        .addr   CONTROL
-        .addr   CLEAR
-        .addr   SETVIEWPAGE
-        .addr   SETDRAWPAGE
-        .addr   SETCOLOR
-        .addr   SETPALETTE
-        .addr   GETPALETTE
-        .addr   GETDEFPALETTE
-        .addr   SETPIXEL
-        .addr   GETPIXEL
-        .addr   LINE
-        .addr   BAR
-        .addr   TEXTSTYLE
-        .addr   OUTTEXT
-        .addr   0                       ; IRQ entry is unused
-
-; ------------------------------------------------------------------------
-; Data.
-
-; Variables mapped to the zero page segment variables. Some of these are
-; used for passing parameters to the driver.
-
-X1              = ptr1
-Y1              = ptr2
-X2              = ptr3
-Y2              = ptr4
-
-ADDR            = tmp1
-TEMP            = tmp3
-TEMP2           = tmp4          ; HORLINE
-TEMP3           = sreg          ; HORLINE
-
-; Absolute variables used in the code
-
-.bss
-
-ERROR:          .res    1       ; Error code
-PALETTE:        .res    2       ; The current palette
-
-BITMASK:        .res    1       ; $00 = clear, $FF = set pixels
-
-OLDCOLOR:       .res    1       ; colors before entering gfx mode
-
-; Text output stuff
-TEXTMAGX:       .res    1
-TEXTMAGY:       .res    1
-TEXTDIR:        .res    1
-
-; Constants and tables
-
-.rodata
-
-DEFPALETTE:     .byte   $00, $0f        ; White on black
-PALETTESIZE     = * - DEFPALETTE
-
-BITTAB:         .byte   $80,$40,$20,$10,$08,$04,$02,$01
-
-BITMASKL:       .byte   %11111111, %01111111, %00111111, %00011111
-                .byte   %00001111, %00000111, %00000011, %00000001
-
-BITMASKR:       .byte   %10000000, %11000000, %11100000, %11110000
-                .byte   %11111000, %11111100, %11111110, %11111111
-
-; color translation table (indexed by VIC color)
-COLTRANS:       .byte $00, $0f, $08, $06, $0a, $04, $02, $0c
-                .byte $0d, $0b, $09, $01, $0e, $05, $03, $07
-                ; colors BROWN and GRAY3 are wrong
-
-; VDC initialization table (reg),(val),...,$ff
-InitVDCTab:
-                .byte VDC_DSP_HI, 0             ; viewpage 0 as default
-                .byte VDC_DSP_LO, 0
-                .byte VDC_HSCROLL, $87
-                .byte 2, $66
-                .byte 4, $4c
-                .byte 5, $06
-                .byte 6, $4c
-                .byte 7, $47
-                .byte 8, $03
-                .byte 9, $06
-                .byte 27, $00
-                .byte $ff
-
-SCN80CLR:       .byte 27,88,147,27,88,0
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. May
-; initialize anything that has to be done just once. Is probably empty
-; most of the time.
-;
-; Must set an error code: NO
-;
-
-INSTALL:
-        ; check for VDC version and update register $19 value
-
-        ; check for VDC ram size and update number of available screens
-
-        ldx     #VDC_CSET       ; determine size of RAM...
-        jsr     VDCReadReg
-        sta     tmp1
-        ora     #%00010000
-        jsr     VDCWriteReg     ; turn on 64k
-
-        jsr     settestadr1     ; save original value of test byte
-        jsr     VDCReadByte
-        sta     tmp2
-
-        lda     #$55            ; write $55 here
-        ldy     #ptr1
-        jsr     test64k         ; read it here and there
-        lda     #$aa            ; write $aa here
-        ldy     #ptr2
-        jsr     test64k         ; read it here and there
-
-        jsr     settestadr1
-        lda     tmp2
-        jsr     VDCWriteByte    ; restore original value of test byte
-
-        lda     ptr1            ; do bytes match?
-        cmp     ptr1+1
-        bne     @have64k
-        lda     ptr2
-        cmp     ptr2+1
-        bne     @have64k
-
-        ldx     #VDC_CSET
-        lda     tmp1
-        jsr     VDCWriteReg     ; restore 16/64k flag
-        jmp     @endok          ; and leave default values for 16k
-
-@have64k:
-        lda     #1
-        sta     pages
-@endok:
-        rts
-
-test64k:
-        sta     tmp1
-        sty     ptr3
-        lda     #0
-        sta     ptr3+1
-        jsr     settestadr1
-        lda     tmp1
-        jsr     VDCWriteByte            ; write $55
-        jsr     settestadr1
-        jsr     VDCReadByte             ; read here
-        pha
-        jsr     settestadr2
-        jsr     VDCReadByte             ; and there
-        ldy     #1
-        sta     (ptr3),y
-        pla
-        dey
-        sta     (ptr3),y
-        rts
-
-settestadr1:
-        ldy     #$02                    ; test page 2 (here)
-        .byte   $2c
-settestadr2:
-        ldy     #$42                    ; or page 64+2 (there)
-        lda     #0
-        jmp     VDCSetSourceAddr
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory. May
-; clean up anything done by INSTALL but is probably empty most of the time.
-;
-; Must set an error code: NO
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; INIT: Changes an already installed device from text mode to graphics
-; mode.
-; Note that INIT/DONE may be called multiple times while the driver
-; is loaded, while INSTALL is only called once, so any code that is needed
-; to initializes variables and so on must go here. Setting palette and
-; clearing the screen is not needed because this is called by the graphics
-; kernel later.
-; The graphics kernel will never call INIT when a graphics mode is already
-; active, so there is no need to protect against that.
-;
-; Must set an error code: YES
-;
-
-INIT:
-        lda     pages                   ; is there enough memory?
-        bne     @L1                     ; Jump if there is one screen
-        lda     #TGI_ERR_INV_MODE       ; Error
-        bne     @L9
-
-; Initialize variables
-
-@L1:    ldx     #$FF
-        stx     BITMASK
-
-; Remeber current color value
-        ldx     #VDC_COLORS
-        jsr     VDCReadReg
-        sta     OLDCOLOR
-
-; Switch into graphics mode (set view page 0)
-
-        ldy     #0
-@L2:    ldx     InitVDCTab,y
-        bmi     @L3
-        iny
-        lda     InitVDCTab,y
-        jsr     VDCWriteReg
-        iny
-        bne     @L2
-@L3:
-
-; Done, reset the error code
-
-        lda     #TGI_ERR_OK
-@L9:    sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; DONE: Will be called to switch the graphics device back into text mode.
-; The graphics kernel will never call DONE when no graphics mode is active,
-; so there is no need to protect against that.
-;
-; Must set an error code: NO
-;
-
-DONE:
-        ; This part is C128-mode specific
-        jsr $e179               ; reload character set and setup VDC
-        jsr $ff62
-        lda $d7                 ; in 80-columns?
-        bne @L01
-@L0:    lda SCN80CLR,y
-        beq @L1
-        jsr $ffd2               ; print \xe,clr,\xe
-        iny
-        bne @L0
-@L01:   lda #147
-        jsr $ffd2               ; print clr
-@L1:    lda #0                  ; restore view page
-        ldx #VDC_DSP_HI
-        jsr VDCWriteReg
-        lda OLDCOLOR
-        ldx #VDC_COLORS
-        jsr VDCWriteReg         ; restore color (background)
-        lda #$47
-        ldx #VDC_HSCROLL
-        jmp VDCWriteReg         ; switch to text screen
-
-; ------------------------------------------------------------------------
-; GETERROR: Return the error code in A and clear it.
-
-GETERROR:
-        ldx     #TGI_ERR_OK
-        lda     ERROR
-        stx     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; CONTROL: Platform/driver specific entry point.
-;
-; Must set an error code: YES
-;
-
-CONTROL:
-        lda     #TGI_ERR_INV_FUNC
-        sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; CLEAR: Clears the screen.
-;
-; Must set an error code: NO
-;
-
-CLEAR:
-        lda     #0
-        tay
-        jsr     VDCSetSourceAddr
-        lda     #0
-        ldx     #VDC_VSCROLL
-        jsr     VDCWriteReg                     ; set fill mode
-        lda     #0
-        jsr     VDCWriteByte                    ; put 1rst byte (fill value)
-        ldy     #159                            ; 159 times
-        lda     #0                              ; 256 bytes
-        ldx     #VDC_COUNT
-@L1:    jsr     VDCWriteReg
-        dey
-        bne     @L1
-        rts
-
-; ------------------------------------------------------------------------
-; SETVIEWPAGE: Set the visible page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-;
-; Must set an error code: NO (will only be called if page ok)
-;
-
-SETVIEWPAGE:
-        rts
-
-; ------------------------------------------------------------------------
-; SETDRAWPAGE: Set the drawable page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-;
-; Must set an error code: NO (will only be called if page ok)
-;
-
-SETDRAWPAGE:
-        rts
-
-; ------------------------------------------------------------------------
-; SETCOLOR: Set the drawing color (in A). The new color is already checked
-; to be in a valid range (0..maxcolor-1).
-;
-; Must set an error code: NO (will only be called if color ok)
-;
-
-SETCOLOR:
-        tax
-        beq     @L1
-        lda     #$FF
-@L1:    sta     BITMASK
-        rts
-
-; ------------------------------------------------------------------------
-; SETPALETTE: Set the palette (not available with all drivers/hardware).
-; A pointer to the palette is passed in ptr1. Must set an error if palettes
-; are not supported
-;
-; Must set an error code: YES
-;
-
-SETPALETTE:
-        ldy     #PALETTESIZE - 1
-@L1:    lda     (ptr1),y        ; Copy the palette
-        and     #$0F            ; Make a valid color
-        sta     PALETTE,y
-        dey
-        bpl     @L1
-
-; Get the color entries from the palette
-
-        ldy     PALETTE+1       ; Foreground color
-        lda     COLTRANS,y
-        asl     a
-        asl     a
-        asl     a
-        asl     a
-        ldy     PALETTE         ; Background color
-        ora     COLTRANS,y
-
-        ldx     #VDC_COLORS
-        jsr     VDCWriteReg
-        lda     #TGI_ERR_OK     ; Clear error code
-        sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; GETPALETTE: Return the current palette in A/X. Even drivers that cannot
-; set the palette should return the default palette here, so there's no
-; way for this function to fail.
-;
-; Must set an error code: NO
-;
-
-GETPALETTE:
-        lda     #<PALETTE
-        ldx     #>PALETTE
-        rts
-
-; ------------------------------------------------------------------------
-; GETDEFPALETTE: Return the default palette for the driver in A/X. All
-; drivers should return something reasonable here, even drivers that don't
-; support palettes, otherwise the caller has no way to determine the colors
-; of the (not changeable) palette.
-;
-; Must set an error code: NO (all drivers must have a default palette)
-;
-
-GETDEFPALETTE:
-        lda     #<DEFPALETTE
-        ldx     #>DEFPALETTE
-        rts
-
-; ------------------------------------------------------------------------
-; SETPIXEL: Draw one pixel at X1/Y1 = ptr1/ptr2 with the current drawing
-; color. The coordinates passed to this function are never outside the
-; visible screen area, so there is no need for clipping inside this function.
-;
-; Must set an error code: NO
-;
-
-SETPIXEL:
-        jsr     CALC            ; Calculate coordinates
-
-        stx     TEMP
-        lda     ADDR
-        ldy     ADDR+1
-        jsr     VDCSetSourceAddr
-        jsr     VDCReadByte
-        ldx     TEMP
-
-        sta     TEMP
-        eor     BITMASK
-        and     BITTAB,X
-        eor     TEMP
-        pha
-        lda     ADDR
-        ldy     ADDR+1
-        jsr     VDCSetSourceAddr
-        pla
-        jsr     VDCWriteByte
-
-@L9:    rts
-
-; ------------------------------------------------------------------------
-; GETPIXEL: Read the color value of a pixel and return it in A/X. The
-; coordinates passed to this function are never outside the visible screen
-; area, so there is no need for clipping inside this function.
-
-
-GETPIXEL:
-        jsr     CALC            ; Calculate coordinates
-
-        stx     TEMP            ; preserve X
-        lda     ADDR
-        ldy     ADDR+1
-        jsr     VDCSetSourceAddr
-        jsr     VDCReadByte
-        ldx     TEMP
-
-        ldy     #$00
-        and     BITTAB,X
-        beq     @L1
-        iny
-
-@L1:    tya                     ; Get color value into A
-        ldx     #$00            ; Clear high byte
-        rts
-
-; ------------------------------------------------------------------------
-; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where
-; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4 using the current drawing color.
-; Contrary to most other functions, the graphics kernel will sort and clip
-; the coordinates before calling the driver, so on entry the following
-; conditions are valid:
-;       X1 <= X2
-;       Y1 <= Y2
-;       (X1 >= 0) && (X1 < XRES)
-;       (X2 >= 0) && (X2 < XRES)
-;       (Y1 >= 0) && (Y1 < YRES)
-;       (Y2 >= 0) && (Y2 < YRES)
-;
-; Must set an error code: NO
-;
-
-BAR:
-        inc     Y2
-        bne     HORLINE
-        inc     Y2+1
-
-; Original code for a horizontal line
-
-HORLINE:
-        lda X1
-        pha
-        lda X1+1
-        pha
-        jsr CALC                ; get data for LEFT
-        lda BITMASKL,x          ; remember left address and bitmask
-        pha
-        lda ADDR
-        pha
-        lda ADDR+1
-        pha
-
-        lda X2
-        sta X1
-        lda X2+1
-        sta X1+1
-        jsr CALC                ; get data for RIGHT
-        lda BITMASKR,x
-        sta TEMP3
-
-        pla                     ; recall data for LEFT
-        sta X1+1
-        pla
-        sta X1                  ; put left address into X1
-        pla
-
-        cmp #%11111111          ; if left bit <> 0
-        beq @L1
-        sta TEMP2               ; do left byte only...
-        lda X1
-        ldy X1+1
-        jsr VDCSetSourceAddr
-        jsr VDCReadByte
-        sta TEMP
-        eor BITMASK
-        and TEMP2
-        eor TEMP
-        pha
-        lda X1
-        ldy X1+1
-        jsr VDCSetSourceAddr
-        pla
-        jsr VDCWriteByte
-        inc X1                  ; ... and proceed
-        bne @L1
-        inc X1+1
-
-        ; do right byte (if Y2=0 ++ADDR and skip)
-@L1:    lda TEMP3
-        cmp #%11111111          ; if right bit <> 7
-        bne @L11
-        inc ADDR                ; right bit = 7 - the next one is the last
-        bne @L10
-        inc ADDR+1
-@L10:   bne @L2
-
-@L11:   lda ADDR                ; do right byte only...
-        ldy ADDR+1
-        jsr VDCSetSourceAddr
-        jsr VDCReadByte
-        sta TEMP
-        eor BITMASK
-        and TEMP3
-        eor TEMP
-        pha
-        lda ADDR
-        ldy ADDR+1
-        jsr VDCSetSourceAddr
-        pla
-        jsr VDCWriteByte
-
-@L2:                            ; do the fill in the middle
-        lda ADDR                ; calculate offset in full bytes
-        sec
-        sbc X1
-        beq @L3                 ; if equal - there are no more bytes
-        sta ADDR
-
-        lda X1                  ; setup for the left side
-        ldy X1+1
-        jsr VDCSetSourceAddr
-        lda BITMASK             ; get color
-        jsr VDCWriteByte        ; put 1st value
-        ldx ADDR
-        dex
-        beq @L3                 ; 1 byte already written
-
-        stx ADDR                ; if there are more bytes - fill them...
-        ldx #VDC_VSCROLL
-        lda #0
-        jsr VDCWriteReg         ; setup for fill
-        ldx #VDC_COUNT
-        lda ADDR
-        jsr VDCWriteReg         ; ... fill them NOW!
-
-@L3:    pla
-        sta X1+1
-        pla
-        sta X1
-
-; End of horizontal line code
-
-        inc     Y1
-        bne     @L4
-        inc     Y1+1
-@L4:    lda     Y1
-        cmp     Y2
-        bne     @L5
-        lda     Y1+1
-        cmp     Y2+1
-        bne     @L5
-        rts
-
-@L5:    jmp     HORLINE
-
-
-; ------------------------------------------------------------------------
-; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scaling in X and Y
-; direction is passend in X/Y, the text direction is passed in A.
-;
-; Must set an error code: NO
-;
-
-TEXTSTYLE:
-        stx     TEXTMAGX
-        sty     TEXTMAGY
-        sta     TEXTDIR
-        rts
-
-
-; ------------------------------------------------------------------------
-; OUTTEXT: Output text at X/Y = ptr1/ptr2 using the current color and the
-; current text style. The text to output is given as a zero terminated
-; string with address in ptr3.
-;
-; Must set an error code: NO
-;
-
-OUTTEXT:
-        rts
-
-; ------------------------------------------------------------------------
-; Calculate all variables to plot the pixel at X1/Y1.
-;------------------------
-;< X1,Y1 - pixel
-;> ADDR - address of card
-;> X - bit number (X1 & 7)
-CALC:
-        lda     Y1
-        pha
-        lda     Y1+1
-        pha
-        lsr
-        ror     Y1              ; Y=Y/2
-        sta     Y1+1
-        sta     ADDR+1
-        lda     Y1
-        asl
-        rol     ADDR+1
-        asl
-        rol     ADDR+1          ; Y*4
-        clc
-        adc     Y1
-        sta     ADDR
-        lda     Y1+1
-        adc     ADDR+1
-        sta     ADDR+1          ; Y*4+Y=Y*5
-        lda     ADDR
-        asl
-        rol     ADDR+1
-        asl
-        rol     ADDR+1
-        asl
-        rol     ADDR+1
-        asl
-        rol     ADDR+1
-        sta     ADDR            ; Y*5*16=Y*80
-        lda     X1+1
-        sta     TEMP
-        lda     X1
-        lsr     TEMP
-        ror
-        lsr     TEMP
-        ror
-        lsr     TEMP
-        ror
-        clc
-        adc     ADDR
-        sta     ADDR
-        lda     ADDR+1          ; ADDR = Y*80+x/8
-        adc     TEMP
-        sta     ADDR+1
-        pla
-        sta     Y1+1
-        pla
-        sta     Y1
-        and     #1
-        beq     @even           ; even line - no offset
-        lda     ADDR
-        clc
-        adc     #<21360
-        sta     ADDR
-        lda     ADDR+1
-        adc     #>21360
-        sta     ADDR+1          ; odd lines are 21360 bytes farther
-@even:  lda     X1
-        and     #7
-        tax
-        rts
-
-;-------------
-; VDC helpers
-
-VDCSetSourceAddr:
-        pha
-        tya
-        ldx     #VDC_DATA_HI
-        jsr     VDCWriteReg
-        pla
-        ldx     #VDC_DATA_LO
-        bne     VDCWriteReg
-
-VDCReadByte:
-        ldx     #VDC_DATA
-VDCReadReg:
-        stx     VDC_ADDR_REG
-@L0:    bit     VDC_ADDR_REG
-        bpl     @L0
-        lda     VDC_DATA_REG
-        rts
-
-VDCWriteByte:
-        ldx     #VDC_DATA
-VDCWriteReg:
-        stx     VDC_ADDR_REG
-@L0:    bit     VDC_ADDR_REG
-        bpl     @L0
-        sta     VDC_DATA_REG
-        rts
-
-; ------------------------------------------------------------------------
-
-        .include        "../../tgi/tgidrv_line.inc"
diff --git a/libsrc/c128/tgi_colors.s b/libsrc/c128/tgi_colors.s
deleted file mode 100644 (file)
index 6ef3729..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-;
-; Target-specific black & white values for use by the target-shared TGI kernel
-;
-
-        .include        "tgi-kernel.inc"
-
-        .export         tgi_color_black:zp = $00
-        .export         tgi_color_white:zp = $01
diff --git a/libsrc/c128/tgi_stat_stddrv.s b/libsrc/c128/tgi_stat_stddrv.s
deleted file mode 100644 (file)
index 62f515d..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Address of the static standard tgi driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void tgi_static_stddrv[];
-;
-
-        .export _tgi_static_stddrv
-        .import _c128_vdc_tgi
-
-.rodata
-
-_tgi_static_stddrv := _c128_vdc_tgi
diff --git a/libsrc/c128/tgi_stddrv.s b/libsrc/c128/tgi_stddrv.s
deleted file mode 100644 (file)
index 6efd085..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Name of the standard tgi driver
-;
-; Oliver Schmidt, 2011-05-02
-;
-; const char tgi_stddrv[];
-;
-
-        .export _tgi_stddrv
-
-.rodata
-
-_tgi_stddrv:    .asciiz "c128-vdc.tgi"
diff --git a/libsrc/c128/toggle_videomode.s b/libsrc/c128/toggle_videomode.s
deleted file mode 100644 (file)
index e09a16c..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-02-13
-;
-; void toggle_videomode (void);
-; /* Toggle the video mode between 40 and 80 chars (calls SWAPPER) */
-;
-
-        .export         _toggle_videomode
-        .import         SWAPPER, BSOUT
-
-; This function is deprecated
-.assert         0, ldwarning, "toggle_videomode() is deprecated, please use videomode() instead!"
-
-
-
-.proc   _toggle_videomode
-
-        jsr     SWAPPER                 ; Toggle the mode
-        lda     #14
-        jmp     BSOUT                   ; Switch to lower case chars
-
-.endproc
-
diff --git a/libsrc/c128/videomode.s b/libsrc/c128/videomode.s
deleted file mode 100644 (file)
index dc7df0f..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-09-07
-;
-; unsigned __fastcall__ videomode (unsigned Mode);
-; /* Set the video mode, return the old mode */
-;
-
-        .export         _videomode
-        .import         SWAPPER, BSOUT
-
-        .include        "c128.inc"
-
-
-.proc   _videomode
-
-        cmp     MODE                    ; Do we have this mode already?
-        beq     @L9
-
-        lda     MODE                    ; Get current mode ...
-        pha                             ; ... and save it
-
-        jsr     SWAPPER                 ; Toggle the mode
-        lda     #14
-        jsr     BSOUT                   ; Switch to lower case chars
-
-        pla                             ; Get old mode into A
-
-; Done, old mode is in A
-
-@L9:    ldx     #$00                    ; Clear high byte
-        rts
-
-.endproc
-
diff --git a/libsrc/c16/_scrsize.s b/libsrc/c16/_scrsize.s
deleted file mode 100644 (file)
index 57ad4f3..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; Screen size variables
-;
-
-        .export         screensize
-        .import         SCREEN
-
-screensize      = SCREEN
-
-
diff --git a/libsrc/c16/break.s b/libsrc/c16/break.s
deleted file mode 100644 (file)
index e143ac6..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-;
-; Ullrich von Bassewitz, 27.09.1998
-;
-; void set_brk (unsigned Addr);
-; void reset_brk (void);
-;
-
-        .export         _set_brk, _reset_brk
-        .destructor     _reset_brk
-        .export         _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
-
-        .include        "plus4.inc"
-
-
-.bss
-_brk_a:         .res    1
-_brk_x:         .res    1
-_brk_y:         .res    1
-_brk_sr:        .res    1
-_brk_pc:        .res    2
-
-oldvec:         .res    2               ; Old vector
-
-
-.data
-uservec:        jmp     $FFFF           ; Patched at runtime
-
-
-.code
-
-; Set the break vector
-.proc   _set_brk
-
-        sta     uservec+1
-        stx     uservec+2       ; Set the user vector
-
-        lda     oldvec
-        ora     oldvec+1        ; Did we save the vector already?
-        bne     L1              ; Jump if we installed the handler already
-
-        lda     BRKVec
-        sta     oldvec
-        lda     BRKVec+1
-        sta     oldvec+1        ; Save the old vector
-
-L1:     lda     #<brk_handler   ; Set the break vector to our routine
-        ldx     #>brk_handler
-        sta     BRKVec
-        stx     BRKVec+1
-        rts
-
-.endproc
-
-
-; Reset the break vector
-.proc   _reset_brk
-
-        lda     oldvec
-        ldx     oldvec+1
-        beq     @L9             ; Jump if vector not installed
-        sta     BRKVec
-        stx     BRKVec+1
-        lda     #$00
-        sta     oldvec          ; Clear the old vector
-        stx     oldvec+1
-@L9:    rts
-
-.endproc
-
-
-
-; Break handler, called if a break occurs
-
-.proc   brk_handler
-
-        pla
-        sta     _brk_y
-        pla
-        sta     _brk_x
-        pla
-        sta     _brk_a
-        pla
-        and     #$EF            ; Clear break bit
-        sta     _brk_sr
-        pla                     ; PC low
-        sec
-        sbc     #2              ; Point to start of brk
-        sta     _brk_pc
-        pla                     ; PC high
-        sbc     #0
-        sta     _brk_pc+1
-
-        jsr     uservec         ; Call the user's routine
-
-        lda     _brk_pc+1
-        pha
-        lda     _brk_pc
-        pha
-        lda     _brk_sr
-        pha
-        ldx     _brk_x
-        ldy     _brk_y
-        lda     _brk_a
-        rti                     ; Jump back...
-
-.endproc
-
-
diff --git a/libsrc/c16/cgetc.s b/libsrc/c16/cgetc.s
deleted file mode 100644 (file)
index 8bcb721..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; char cgetc (void);
-;
-
-        .export         _cgetc
-        .import         cursor
-
-        .include        "plus4.inc"
-
-
-; --------------------------------------------------------------------------
-
-_cgetc: lda     KEY_COUNT       ; Get number of characters
-        ora     FKEY_COUNT      ; Or with number of function key chars
-        bne     L2              ; Jump if there are already chars waiting
-
-; Switch on the cursor if needed
-
-        ldy     CURS_X
-        lda     (CRAM_PTR),y    ; Get current char
-        pha                     ; And save it
-        lda     CHARCOLOR
-        sta     (CRAM_PTR),y
-
-        lda     cursor
-        beq     L1              ; Jump if no cursor
-        tya
-        clc
-        adc     SCREEN_PTR
-        sta     TED_CURSLO
-        lda     SCREEN_PTR+1
-        adc     #$00
-        sbc     #$0B            ; + carry = $C00 (screen address)
-        sta     TED_CURSHI
-
-L1:     lda     KEY_COUNT
-        ora     FKEY_COUNT
-        beq     L1
-        pla
-        sta     (CRAM_PTR),y
-        lda     #$ff
-        sta     TED_CURSLO      ; Cursor off
-        sta     TED_CURSHI
-
-L2:     jsr     KBDREAD         ; Read char and return in A
-        ldx     #0
-        rts
-
-; --------------------------------------------------------------------------
-; Make the function keys return function key codes instead of the current
-; strings so the program will see and may handle them.
-; Undo this change when the program ends
-
-        .constructor    initkbd
-        .destructor     donekbd
-
-.segment        "INIT"
-
-.proc   initkbd
-
-        ldy     #15
-@L1:    lda     fnkeys,y
-        sta     FKEY_SPACE,y
-        dey
-        bpl     @L1
-        rts
-
-.endproc
-
-
-.code
-
-.proc   donekbd
-
-        ldx     #$39            ; Copy the original function keys
-@L1:    lda     FKEY_ORIG,x
-        sta     FKEY_SPACE,x
-        dex
-        bpl     @L1
-        rts
-
-.endproc
-
-
-; Function key table, readonly
-
-.rodata
-fnkeys: .byte   $01, $01, $01, $01, $01, $01, $01, $01
-        .byte   133, 137, 134, 138, 135, 139, 136, 140
-
diff --git a/libsrc/c16/clrscr.s b/libsrc/c16/clrscr.s
deleted file mode 100644 (file)
index 56fe0c6..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; void clrscr (void);
-;
-
-        .export         _clrscr
-
-        .include        "plus4.inc"
-
-_clrscr = CLRSCR
-
-
-
-
diff --git a/libsrc/c16/color.s b/libsrc/c16/color.s
deleted file mode 100644 (file)
index 2f3046e..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; unsigned char __fastcall__ textcolor (unsigned char color);
-; unsigned char __fastcall__ bgcolor (unsigned char color);
-; unsigned char __fastcall__ bordercolor (unsigned char color);
-;
-
-        .export         _textcolor, _bgcolor, _bordercolor
-
-        .include        "plus4.inc"
-
-_textcolor:
-        ldx     CHARCOLOR       ; get old value
-        sta     CHARCOLOR       ; set new value
-        txa
-        rts
-
-
-_bgcolor:
-        ldx     TED_BGCOLOR     ; get old value
-        sta     TED_BGCOLOR     ; set new value
-        txa
-        rts
-
-
-_bordercolor:
-        ldx     TED_BORDERCOLOR ; get old value
-        sta     TED_BORDERCOLOR ; set new value
-        txa
-        rts
-
-
diff --git a/libsrc/c16/conio.s b/libsrc/c16/conio.s
deleted file mode 100644 (file)
index feca30c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; Low level stuff for screen output/console input
-;
-
-        .exportzp       CURS_X, CURS_Y
-
-        .include        "plus4.inc"
-
diff --git a/libsrc/c16/cputc.s b/libsrc/c16/cputc.s
deleted file mode 100644 (file)
index a83a9c6..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; void cputcxy (unsigned char x, unsigned char y, char c);
-; void cputc (char c);
-;
-
-        .export         _cputcxy, _cputc, cputdirect, putchar
-        .export         newline, plot
-        .import         popa, _gotoxy
-        .import         PLOT
-
-        .include        "plus4.inc"
-
-
-_cputcxy:
-        pha                     ; Save C
-        jsr     popa            ; Get Y
-        jsr     _gotoxy         ; Set cursor, drop x
-        pla                     ; Restore C
-
-; Plot a character - also used as internal function
-
-_cputc: cmp     #$0A            ; CR?
-        bne     L1
-        lda     #0
-        sta     CURS_X
-        beq     plot            ; Recalculate pointers
-
-L1:     cmp     #$0D            ; LF?
-        beq     newline         ; Recalculate pointers
-
-; Printable char of some sort
-
-        cmp     #' '
-        bcc     cputdirect      ; Other control char
-        tay
-        bmi     L10
-        cmp     #$60
-        bcc     L2
-        and     #$DF
-        bne     cputdirect      ; Branch always
-L2:     and     #$3F
-
-cputdirect:
-        jsr     putchar         ; Write the character to the screen
-
-; Advance cursor position
-
-advance:
-        iny
-        cpy     #XSIZE
-        bne     L3
-        jsr     newline         ; new line
-        ldy     #0              ; + cr
-L3:     sty     CURS_X
-        rts
-
-newline:
-        clc
-        lda     #XSIZE
-        adc     SCREEN_PTR
-        sta     SCREEN_PTR
-        bcc     L4
-        inc     SCREEN_PTR+1
-        clc
-L4:     lda     #XSIZE
-        adc     CRAM_PTR
-        sta     CRAM_PTR
-        bcc     L5
-        inc     CRAM_PTR+1
-L5:     inc     CURS_Y
-        rts
-
-; Handle character if high bit set
-
-L10:    and     #$7F
-        cmp     #$7E            ; PI?
-        bne     L11
-        lda     #$5E            ; Load screen code for PI
-        bne     cputdirect
-L11:    ora     #$40
-        bne     cputdirect
-
-
-
-; Set cursor position, calculate RAM pointers
-
-plot:   ldy     CURS_X
-        ldx     CURS_Y
-        clc
-        jmp     PLOT            ; Set the new cursor
-
-
-
-; Write one character to the screen without doing anything else, return X
-; position in Y
-
-putchar:
-        ora     RVS             ; Set revers bit
-        ldy     CURS_X
-        sta     (SCREEN_PTR),y  ; Set char
-        lda     CHARCOLOR
-        sta     (CRAM_PTR),y    ; Set color
-        rts
diff --git a/libsrc/c16/crt0.s b/libsrc/c16/crt0.s
deleted file mode 100644 (file)
index 0180ad6..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-;
-; Startup code for cc65 (C16 version)
-;
-; Note: The C16 is actually the Plus/4 with just 16KB of memory. So, many
-; things are similar here; and, we even use the plus4.inc include file.
-;
-
-        .export         _exit
-        .export         __STARTUP__ : absolute = 1      ; Mark as startup
-        .import         initlib, donelib
-        .import         callmain, zerobss
-        .import         MEMTOP, RESTOR, BSOUT, CLRCH
-        .importzp       ST
-
-        .include        "zeropage.inc"
-        .include        "plus4.inc"
-
-; ------------------------------------------------------------------------
-; Startup code
-
-.segment        "STARTUP"
-
-Start:
-
-; Save the zero-page locations that we need.
-
-        ldx     #zpspace-1
-L1:     lda     sp,x
-        sta     zpsave,x
-        dex
-        bpl     L1
-
-; Switch to the second charset.
-
-        lda     #14
-        jsr     BSOUT
-
-; Clear the BSS data.
-
-        jsr     zerobss
-
-; Save some system stuff; and, set up the stack.
-
-        tsx
-        stx     spsave          ; save system stk ptr
-
-        sec
-        jsr     MEMTOP          ; Get top memory
-        cpy     #$80            ; We can only use the low 32K :-(
-        bcc     MemOk
-        ldy     #$80
-        ldx     #$00
-MemOk:  stx     sp
-        sty     sp+1            ; set argument stack ptr
-
-; Call the module constructors.
-
-        jsr     initlib
-
-; Push the command-line arguments; and, call main().
-
-        jsr     callmain
-
-; Call the module destructors. This is also the exit() entry.
-
-_exit:  pha                     ; Save the return code on stack
-        jsr     donelib         ; Run module destructors
-
-; Copy back the zero-page stuff.
-
-        ldx     #zpspace-1
-L2:     lda     zpsave,x
-        sta     sp,x
-        dex
-        bpl     L2
-
-; Store the return code into BASIC's status variable.
-
-        pla
-        sta     ST
-
-; Restore the stack pointer.
-
-        ldx     spsave
-        txs
-
-; Back to BASIC.
-
-        rts
-
-; ------------------------------------------------------------------------
-
-.segment        "ZPSAVE"
-
-zpsave: .res    zpspace
-
-; ------------------------------------------------------------------------
-
-.bss
-
-spsave: .res    1
diff --git a/libsrc/c16/devnum.s b/libsrc/c16/devnum.s
deleted file mode 100644 (file)
index e35d45b..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-;
-; Oliver Schmidt, 2010-02-14
-;
-
-        .include        "c16.inc"
-
-        .exportzp       devnum := DEVNUM
diff --git a/libsrc/c16/emd/c16-ram.s b/libsrc/c16/emd/c16-ram.s
deleted file mode 100644 (file)
index a8083ac..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-;
-; Extended memory driver for the C16 hidden RAM. Driver works without
-; problems when statically linked.
-;
-; Ullrich von Bassewitz, 2003-12-15
-;
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-        .include        "plus4.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c16_ram_emd
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-BASE    = $8000
-
-; ------------------------------------------------------------------------
-; Data.
-
-.bss
-pages:          .res    1               ; Number of pages
-curpage:        .res    1               ; Current page number
-window:         .res    256             ; Memory "window"
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-
-; Determine how much memory is available. We will use all memory above
-; $8000 up to MEMTOP
-
-        sec
-        jsr     $FF99                   ; MEMTOP: Get top memory into Y/X
-        tya
-        sub     #>BASE                  ; Low 32 K are used
-        bcc     nomem
-        beq     nomem                   ; Offering zero pages is a bad idea
-        sta     pages
-
-        ldx     #$FF
-        stx     curpage                 ; Invalidate the current page
-        inx                             ; X = 0
-        txa                             ; A = X = EM_ERR_OK
-        rts
-
-nomem:  ldx     #>EM_ERR_NO_DEVICE
-        lda     #<EM_ERR_NO_DEVICE
-;       rts                             ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     pages
-        ldx     #$00                    ; 128 pages max
-        rts
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:    sta     curpage                 ; Remember the new page
-
-        add     #>BASE
-        sta     ptr1+1
-        ldy     #$00
-        sty     ptr1
-
-        lda     #<window
-        sta     ptr2
-        lda     #>window
-        sta     ptr2+1
-
-; Transfer one page
-
-        jsr     transfer                ; Transfer one page
-
-; Return the memory window
-
-        lda     #<window
-        ldx     #>window                ; Return the window address
-        rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-
-USE:    sta     curpage                 ; Remember the page
-        lda     #<window
-        ldx     #>window                ; Return the window
-        rts
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT: lda     curpage                 ; Get the current page
-        bmi     done                    ; Jump if no page mapped
-
-        add     #>BASE
-        sta     ptr2+1
-        ldy     #$00
-        sty     ptr2
-
-        lda     #<window
-        sta     ptr1
-        lda     #>window
-        sta     ptr1+1
-
-; Transfer one page. Y must be zero on entry. Because we bank out the
-; kernal, we will run the routine with interrupts disabled but leave
-; short breath times. Unroll the following loop to make it somewhat faster.
-
-transfer:
-        sei
-        sta     ENABLE_RAM
-
-        .repeat 8
-        lda     (ptr1),y
-        sta     (ptr2),y
-        iny
-        .endrepeat
-
-        sta     ENABLE_ROM
-        cli
-
-        bne     transfer
-
-; Done
-
-done:   rts
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYFROM:
-        sta     ptr3
-        stx     ptr3+1                  ; Save the passed em_copy pointer
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr3),y
-        sta     ptr1
-        ldy     #EM_COPY::PAGE
-        lda     (ptr3),y
-        add     #>BASE
-        sta     ptr1+1                  ; From
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr3),y
-        sta     ptr2
-        iny
-        lda     (ptr3),y
-        sta     ptr2+1                  ; To
-
-common: ldy     #EM_COPY::COUNT+1
-        lda     (ptr3),y                ; Get number of pages
-        beq     @L2                     ; Skip if no full pages
-        sta     tmp1
-
-; Copy full pages allowing interrupts after each page copied
-
-        ldy     #$00
-@L1:    jsr     transfer
-        inc     ptr1+1
-        inc     ptr2+1
-        dec     tmp1
-        bne     @L1
-
-; Copy the remainder of the page
-
-@L2:    ldy     #EM_COPY::COUNT
-        lda     (ptr3),y                ; Get bytes in last page
-        beq     @L4
-        tax
-
-        sei                             ; Disable ints
-        sta     ENABLE_RAM              ; Bank out the ROM
-
-; Transfer the bytes in the last page
-
-        ldy     #$00
-@L3:    lda     (ptr1),y
-        sta     (ptr2),y
-        iny
-        dex
-        bne     @L3
-
-; Restore the old memory configuration, allow interrupts
-
-        sta     ENABLE_ROM
-        cli
-
-; Done
-
-@L4:    rts
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO: sta     ptr3
-        stx     ptr3+1                  ; Save the passed em_copy pointer
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr3),y
-        sta     ptr2
-        ldy     #EM_COPY::PAGE
-        lda     (ptr3),y
-        add     #>BASE
-        sta     ptr2+1                  ; To
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr3),y
-        sta     ptr1
-        iny
-        lda     (ptr3),y
-        sta     ptr1+1                  ; From
-
-        jmp     common
-
-
diff --git a/libsrc/c16/get_tv.s b/libsrc/c16/get_tv.s
deleted file mode 100644 (file)
index f6d82a3..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-12-03
-;
-; unsigned char __fastcall__ get_tv (void);
-; /* Return the video mode the machine is using */
-;
-
-        .include        "plus4.inc"
-        .include        "get_tv.inc"
-
-
-;--------------------------------------------------------------------------
-; _get_tv
-
-.proc   _get_tv
-
-        ldx     #TV::PAL        ; Assume PAL
-        bit     TED_MULTI1      ; Test bit 6
-        bvc     pal
-        dex                     ; NTSC
-pal:    txa
-        ldx     #0
-        rts
-
-.endproc
-
-
diff --git a/libsrc/c16/irq.s b/libsrc/c16/irq.s
deleted file mode 100644 (file)
index 46dd75f..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-;
-; IRQ handling (C16 version)
-;
-
-        .export         initirq, doneirq
-        .import         callirq
-
-        .include        "plus4.inc"
-
-; ------------------------------------------------------------------------
-
-.segment        "INIT"
-
-initirq:
-        lda     IRQVec
-        ldx     IRQVec+1
-        sta     IRQInd+1
-        stx     IRQInd+2
-        lda     #<IRQStub
-        ldx     #>IRQStub
-        jmp     setvec
-
-; ------------------------------------------------------------------------
-
-.code
-
-doneirq:
-        lda     IRQInd+1
-        ldx     IRQInd+2
-setvec: sei
-        sta     IRQVec
-        stx     IRQVec+1
-        cli
-        rts
-
-; ------------------------------------------------------------------------
-
-.segment        "LOWCODE"
-
-IRQStub:
-        cld                             ; Just to be sure
-        jsr     callirq                 ; Call the functions
-        jmp     IRQInd                  ; Jump to the saved IRQ vector
-
-; ------------------------------------------------------------------------
-
-.data
-
-IRQInd: jmp     $0000
diff --git a/libsrc/c16/joy/c16-stdjoy.s b/libsrc/c16/joy/c16-stdjoy.s
deleted file mode 100644 (file)
index 0b99d93..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Standard joystick driver for the C16. May be used multiple times when linked
-; to the statically application.
-;
-; Ullrich von Bassewitz, 2002-12-21
-;
-
-        .define         MODULE_LABEL    _c16_stdjoy_joy
-
-        .include        "../../plus4/joy/plus4-stdjoy.s"
diff --git a/libsrc/c16/joy_stat_stddrv.s b/libsrc/c16/joy_stat_stddrv.s
deleted file mode 100644 (file)
index 2dea36b..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Address of the static standard joystick driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void joy_static_stddrv[];
-;
-
-        .export _joy_static_stddrv
-        .import _c16_stdjoy_joy
-
-.rodata
-
-_joy_static_stddrv := _c16_stdjoy_joy
diff --git a/libsrc/c16/joy_stddrv.s b/libsrc/c16/joy_stddrv.s
deleted file mode 100644 (file)
index 10aa8c6..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Name of the standard joystick driver
-;
-; Ullrich von Bassewitz, 2002-12-21
-;
-; const char joy_stddrv[];
-;
-
-        .export _joy_stddrv
-
-.rodata
-
-_joy_stddrv:    .asciiz "c16-stdjoy.joy"
-
diff --git a/libsrc/c16/kbhit.s b/libsrc/c16/kbhit.s
deleted file mode 100644 (file)
index bb88bee..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; unsigned char kbhit (void);
-;
-
-        .export         _kbhit
-
-        .include        "plus4.inc"
-
-
-.proc   _kbhit
-
-        ldx     #0              ; High byte of return is always zero
-        lda     KEY_COUNT       ; Get number of characters
-        ora     FKEY_COUNT      ; Or with number of chars from function keys
-        beq     L9
-        lda     #1
-L9:     rts
-
-.endproc
-
-
-
-
-
diff --git a/libsrc/c16/kclose.s b/libsrc/c16/kclose.s
deleted file mode 100644 (file)
index ef70047..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-21
-;
-; CLOSE replacement function
-;
-
-        .export         CLOSE
-
-.proc   CLOSE
-        clc                             ; Force C64 compatible behaviour
-        jmp     $FFC3                   ; Call the ROM routine
-.endproc
-
-
diff --git a/libsrc/c16/kernal.s b/libsrc/c16/kernal.s
deleted file mode 100644 (file)
index 7ba27b6..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-;
-; Ullrich von Bassewitz, 19.11.2002
-;
-; C16 kernal functions
-;
-
-        .export         CINT
-        .export         IOINIT
-        .export         RAMTAS
-        .export         RESTOR
-        .export         VECTOR
-        .export         SETMSG
-        .export         SECOND
-        .export         TKSA
-        .export         MEMTOP
-        .export         MEMBOT
-        .export         SCNKEY
-        .export         SETTMO
-        .export         ACPTR
-        .export         CIOUT
-        .export         UNTLK
-        .export         UNLSN
-        .export         LISTEN
-        .export         TALK
-        .export         READST
-        .export         SETLFS
-        .export         SETNAM
-        .export         OPEN
-        .export         CHKIN
-        .export         CKOUT
-        .export         CLRCH
-        .export         BASIN
-        .export         BSOUT
-        .export         LOAD
-        .export         SAVE
-        .export         SETTIM
-        .export         RDTIM
-        .export         STOP
-        .export         GETIN
-        .export         CLALL
-        .export         UDTIM
-        .export         SCREEN
-        .export         PLOT
-        .export         IOBASE
-
-
-;-----------------------------------------------------------------------------
-; All functions are available in the kernal jump table
-
-CINT            = $FF81
-IOINIT          = $FF84
-RAMTAS          = $FF87
-RESTOR          = $FF8A
-VECTOR          = $FF8D
-SETMSG          = $FF90
-SECOND          = $FF93
-TKSA            = $FF96
-MEMTOP          = $FF99
-MEMBOT          = $FF9C
-SCNKEY          = $FF9F
-SETTMO          = $FFA2
-ACPTR           = $FFA5
-CIOUT           = $FFA8
-UNTLK           = $FFAB
-UNLSN           = $FFAE
-LISTEN          = $FFB1
-TALK            = $FFB4
-READST          = $FFB7
-SETLFS          = $FFBA
-SETNAM          = $FFBD
-OPEN            = $FFC0
-;CLOSE          = $FFC3
-CHKIN           = $FFC6
-CKOUT           = $FFC9
-CLRCH           = $FFCC
-BASIN           = $FFCF
-BSOUT           = $FFD2
-LOAD            = $FFD5
-SAVE            = $FFD8
-SETTIM          = $FFDB
-RDTIM           = $FFDE
-STOP            = $FFE1
-GETIN           = $FFE4
-CLALL           = $FFE7
-UDTIM           = $FFEA
-SCREEN          = $FFED
-PLOT            = $FFF0
-IOBASE          = $FFF3
-
diff --git a/libsrc/c16/libref.s b/libsrc/c16/libref.s
deleted file mode 100644 (file)
index 933eb59..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-;
-; Oliver Schmidt, 2013-05-31
-;
-
-        .export         em_libref, joy_libref
-        .import         _exit
-
-em_libref       := _exit
-joy_libref      := _exit
diff --git a/libsrc/c16/mainargs.s b/libsrc/c16/mainargs.s
deleted file mode 100644 (file)
index 0a402d2..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-; mainargs.s
-;
-; Ullrich von Bassewitz, 2003-03-07
-; Based on code from Stefan A. Haubenthal, <polluks@web.de>
-; 2003-05-18, Greg King
-; 2004-04-28, 2005-02-26, Ullrich von Bassewitz
-;
-; Scan a group of arguments that are in BASIC's input-buffer.
-; Build an array that points to the beginning of each argument.
-; Send, to main(), that array and the count of the arguments.
-;
-; Command-lines look like these lines:
-;
-; run
-; run : rem
-; run:rem arg1 " arg 2 is quoted "  arg3 "" arg5
-;
-; "run" and "rem" are entokenned; the args. are not.  Leading and trailing
-; spaces outside of quotes are ignored.
-;
-; TO-DO:
-; - The "file-name" might be a path-name; don't copy the directory-components.
-; - Add a control-character quoting mechanism.
-
-        .constructor    initmainargs, 24
-        .import         __argc, __argv
-
-        .include        "plus4.inc"
-
-
-
-MAXARGS  = 10                   ; Maximum number of arguments allowed
-REM      = $8f                  ; BASIC token-code
-NAME_LEN = 16                   ; maximum length of command-name
-
-; Get possible command-line arguments. Goes into the special INIT segment,
-; which may be reused after the startup code is run
-
-.segment        "INIT"
-
-initmainargs:
-
-; Assume that the program was loaded, a moment ago, by the traditional LOAD
-; statement.  Save the "most-recent filename" as argument #0.
-; Because the buffer, that we're copying into, was zeroed out,
-; we don't need to add a NUL character.
-;
-        ldy     FNAM_LEN
-        cpy     #NAME_LEN + 1
-        bcc     L1
-        ldy     #NAME_LEN - 1   ; limit the length
-L0:     lda     #FNAM           ; Vector address
-        jsr     FETCH           ; Load byte from RAM
-        sta     name,y
-L1:     dey
-        bpl     L0
-        inc     __argc          ; argc always is equal to, at least, 1
-
-; Find the "rem" token.
-;
-        ldx     #0
-L2:     lda     BASIC_BUF,x
-        beq     done            ; no "rem," no args.
-        inx
-        cmp     #REM
-        bne     L2
-        ldy     #1 * 2
-
-; Find the next argument
-
-next:   lda     BASIC_BUF,x
-        beq     done            ; End of line reached
-        inx
-        cmp     #' '            ; Skip leading spaces
-        beq     next            ;
-
-; Found start of next argument. We've incremented the pointer in X already, so
-; it points to the second character of the argument. This is useful since we
-; will check now for a quoted argument, in which case we will have to skip this
-; first character.
-
-found:  cmp     #'"'            ; Is the argument quoted?
-        beq     setterm         ; Jump if so
-        dex                     ; Reset pointer to first argument character
-        lda     #' '            ; A space ends the argument
-setterm:sta     term            ; Set end of argument marker
-
-; Now store a pointer to the argument into the next slot. Since the BASIC
-; input buffer is located at the start of a RAM page, no calculations are
-; necessary.
-
-        txa                     ; Get low byte
-        sta     argv,y          ; argv[y]= &arg
-        iny
-        lda     #>BASIC_BUF
-        sta     argv,y
-        iny
-        inc     __argc          ; Found another arg
-
-; Search for the end of the argument
-
-argloop:lda     BASIC_BUF,x
-        beq     done
-        inx
-        cmp     term
-        bne     argloop
-
-; We've found the end of the argument. X points one character behind it, and
-; A contains the terminating character. To make the argument a valid C string,
-; replace the terminating character by a zero.
-
-        lda     #0
-        sta     BASIC_BUF-1,x
-
-; Check if the maximum number of command line arguments is reached. If not,
-; parse the next one.
-
-        lda     __argc          ; Get low byte of argument count
-        cmp     #MAXARGS        ; Maximum number of arguments reached?
-        bcc     next            ; Parse next one if not
-
-; (The last vector in argv[] already is NULL.)
-
-done:   lda     #<argv
-        ldx     #>argv
-        sta     __argv
-        stx     __argv + 1
-        rts
-
-; These arrays are zeroed before initmainargs is called.
-; char  name[16+1];
-; char* argv[MAXARGS+1]={name};
-;
-.bss
-term:   .res    1
-name:   .res    NAME_LEN + 1
-
-.data
-argv:   .addr   name
-        .res    MAXARGS * 2
-
diff --git a/libsrc/c16/randomize.s b/libsrc/c16/randomize.s
deleted file mode 100644 (file)
index 796ad11..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; 2002-11-05, Ullrich von Bassewitz
-; 2015-09-11, Greg King
-;
-; void _randomize (void);
-; /* Initialize the random number generator */
-;
-
-        .export         __randomize
-        .import         _srand
-
-        .include        "plus4.inc"
-
-__randomize:
-        ldx     TED_VLINELO     ; Use TED rasterline as high byte
-        lda     TIME+2          ; Use 60HZ clock as low byte
-        jmp     _srand          ; Initialize generator
-
diff --git a/libsrc/c16/revers.s b/libsrc/c16/revers.s
deleted file mode 100644 (file)
index f1c0b4d..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; unsigned char revers (unsigned char onoff);
-;
-
-        .export         _revers
-
-        .include        "plus4.inc"
-
-.proc   _revers
-
-        ldx     #$00            ; Assume revers off
-        tay                     ; Test onoff
-        beq     L1              ; Jump if off
-        ldx     #$80            ; Load on value
-        ldy     #$00            ; Assume old value is zero
-L1:     lda     RVS             ; Load old value
-        stx     RVS             ; Set new value
-        beq     L2              ; Jump if old value zero
-        iny                     ; Make old value = 1
-L2:     ldx     #$00            ; Load high byte of result
-        tya                     ; Load low byte, set CC
-        rts
-
-.endproc
-
diff --git a/libsrc/c16/status.s b/libsrc/c16/status.s
deleted file mode 100644 (file)
index c6f2792..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-;
-; Oliver Schmidt, 2012-09-30
-;
-
-        .exportzp       ST := $90       ; IEC status byte
diff --git a/libsrc/c16/systime.s b/libsrc/c16/systime.s
deleted file mode 100644 (file)
index 273e394..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-;
-; Ullrich von Bassewitz, 12.11.2002
-;
-; time_t _systime (void);
-; /* Similar to time(), but:
-; **   - Is not ISO C
-; **   - Does not take the additional pointer
-; **   - Does not set errno when returning -1
-; */
-;
-
-        .export         __systime
-
-        .importzp       sreg
-
-.code
-
-.proc   __systime
-
-        lda     #$FF
-        tax
-        sta     sreg
-        sta     sreg+1
-        rts                     ; Return -1
-
-.endproc
-
-
diff --git a/libsrc/c16/sysuname.s b/libsrc/c16/sysuname.s
deleted file mode 100644 (file)
index c44ab6a..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; unsigned char __fastcall__ _sysuname (struct utsname* buf);
-;
-
-        .export         __sysuname, utsdata
-
-        .import         utscopy
-
-        __sysuname = utscopy
-
-;--------------------------------------------------------------------------
-; Data. We define a fixed utsname struct here and just copy it.
-
-.rodata
-
-utsdata:
-        ; sysname
-        .asciiz         "cc65"
-
-        ; nodename
-        .asciiz         ""
-
-        ; release
-        .byte           ((.VERSION >> 8) & $0F) + '0'
-        .byte           '.'
-        .byte           ((.VERSION >> 4) & $0F) + '0'
-        .byte           $00
-
-        ; version
-        .byte           (.VERSION & $0F) + '0'
-        .byte           $00
-
-        ; machine
-        .asciiz         "Commodore 16"
-
-
-
diff --git a/libsrc/c64/_scrsize.s b/libsrc/c64/_scrsize.s
deleted file mode 100644 (file)
index 57ad4f3..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; Screen size variables
-;
-
-        .export         screensize
-        .import         SCREEN
-
-screensize      = SCREEN
-
-
diff --git a/libsrc/c64/break.s b/libsrc/c64/break.s
deleted file mode 100644 (file)
index 1c44c59..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-;
-; Ullrich von Bassewitz, 27.09.1998
-;
-; void set_brk (unsigned Addr);
-; void reset_brk (void);
-;
-
-        .export         _set_brk, _reset_brk
-        .destructor     _reset_brk
-        .export         _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
-
-        .include        "c64.inc"
-
-
-.bss
-_brk_a:         .res    1
-_brk_x:         .res    1
-_brk_y:         .res    1
-_brk_sr:        .res    1
-_brk_pc:        .res    2
-
-oldvec:         .res    2               ; Old vector
-
-
-.data
-uservec:        jmp     $FFFF           ; Patched at runtime
-
-
-.code
-
-; Set the break vector
-.proc   _set_brk
-
-        sta     uservec+1
-        stx     uservec+2       ; Set the user vector
-
-        lda     oldvec
-        ora     oldvec+1        ; Did we save the vector already?
-        bne     L1              ; Jump if we installed the handler already
-
-        lda     BRKVec
-        sta     oldvec
-        lda     BRKVec+1
-        sta     oldvec+1        ; Save the old vector
-
-L1:     lda     #<brk_handler   ; Set the break vector to our routine
-        ldx     #>brk_handler
-        sta     BRKVec
-        stx     BRKVec+1
-        rts
-
-.endproc
-
-
-; Reset the break vector
-.proc   _reset_brk
-
-        lda     oldvec
-        ldx     oldvec+1
-        beq     @L9             ; Jump if vector not installed
-        sta     BRKVec
-        stx     BRKVec+1
-        lda     #$00
-        sta     oldvec          ; Clear the old vector
-        stx     oldvec+1
-@L9:    rts
-
-.endproc
-
-
-
-; Break handler, called if a break occurs
-
-.proc   brk_handler
-
-        pla
-        sta     _brk_y
-        pla
-        sta     _brk_x
-        pla
-        sta     _brk_a
-        pla
-        and     #$EF            ; Clear break bit
-        sta     _brk_sr
-        pla                     ; PC low
-        sec
-        sbc     #2              ; Point to start of brk
-        sta     _brk_pc
-        pla                     ; PC high
-        sbc     #0
-        sta     _brk_pc+1
-
-        jsr     uservec         ; Call the user's routine
-
-        lda     _brk_pc+1
-        pha
-        lda     _brk_pc
-        pha
-        lda     _brk_sr
-        pha
-        ldx     _brk_x
-        ldy     _brk_y
-        lda     _brk_a
-        rti                     ; Jump back...
-
-.endproc
-
-
diff --git a/libsrc/c64/cgetc.s b/libsrc/c64/cgetc.s
deleted file mode 100644 (file)
index 042f99f..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; char cgetc (void);
-;
-
-        .export         _cgetc
-        .import         cursor
-
-        .include        "c64.inc"
-
-_cgetc: lda     KEY_COUNT       ; Get number of characters
-        bne     L3              ; Jump if there are already chars waiting
-
-; Switch on the cursor if needed
-
-        lda     CURS_FLAG
-        pha
-        lda     cursor
-        jsr     setcursor
-L1:     lda     KEY_COUNT
-        beq     L1
-        ldx     #0
-        pla
-        bne     L2
-        inx
-L2:     txa
-        jsr     setcursor
-
-L3:     jsr     KBDREAD         ; Read char and return in A
-        ldx     #0
-        rts
-
-
-; Switch the cursor on or off
-
-.proc   setcursor
-
-        tax                     ; On or off?
-        bne     seton           ; Go set it on
-        lda     CURS_FLAG       ; Is the cursor currently off?
-        bne     crs9            ; Jump if yes
-        lda     #1
-        sta     CURS_FLAG       ; Mark it as off
-        lda     CURS_STATE      ; Cursor currently displayed?
-        beq     crs8            ; Jump if no
-        ldy     CURS_X          ; Get the character column
-        lda     (SCREEN_PTR),y  ; Get character
-        eor     #$80
-        sta     (SCREEN_PTR),y  ; Store character back
-        lda     CURS_COLOR
-        sta     (CRAM_PTR),y    ; Store color back
-crs8:   lda     #0
-        sta     CURS_STATE      ; Cursor not displayed
-crs9:   rts
-
-seton:  lda     #0
-        sta     CURS_FLAG
-        rts
-
-.endproc
diff --git a/libsrc/c64/clrscr.s b/libsrc/c64/clrscr.s
deleted file mode 100644 (file)
index 3968288..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; void clrscr (void);
-;
-
-        .export         _clrscr
-
-        .include        "c64.inc"
-
-_clrscr = CLRSCR
-
-
-
diff --git a/libsrc/c64/color.s b/libsrc/c64/color.s
deleted file mode 100644 (file)
index bfc3719..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; unsigned char __fastcall__ textcolor (unsigned char color);
-; unsigned char __fastcall__ bgcolor (unsigned char color);
-; unsigned char __fastcall__ bordercolor (unsigned char color);
-;
-
-
-        .export         _textcolor, _bgcolor, _bordercolor
-
-        .include        "c64.inc"
-
-_textcolor:
-        ldx     CHARCOLOR       ; get old value
-        sta     CHARCOLOR       ; set new value
-        txa
-        rts
-
-
-_bgcolor:
-        ldx     VIC_BG_COLOR0   ; get old value
-        sta     VIC_BG_COLOR0   ; set new value
-        txa
-        rts
-
-
-_bordercolor:
-        ldx     VIC_BORDERCOLOR ; get old value
-        sta     VIC_BORDERCOLOR ; set new value
-        txa
-        rts
-
diff --git a/libsrc/c64/conio.s b/libsrc/c64/conio.s
deleted file mode 100644 (file)
index 92313c7..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; Low level stuff for screen output/console input
-;
-
-        .exportzp       CURS_X, CURS_Y
-
-        .include        "c64.inc"
-
diff --git a/libsrc/c64/cputc.s b/libsrc/c64/cputc.s
deleted file mode 100644 (file)
index 606d6f5..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-;
-; Ullrich von Bassewitz, 1998-08-06, 2009-09-26
-;
-; void __fastcall__ cputcxy (unsigned char x, unsigned char y, char c);
-; void __fastcall__ cputc (char c);
-;
-
-        .export         _cputcxy, _cputc, cputdirect, putchar
-        .export         newline, plot
-        .import         popa, _gotoxy
-        .import         PLOT
-
-        .include        "c64.inc"
-
-
-_cputcxy:
-        pha                     ; Save C
-        jsr     popa            ; Get Y
-        jsr     _gotoxy         ; Set cursor, drop x
-        pla                     ; Restore C
-
-; Plot a character - also used as internal function
-
-_cputc: cmp     #$0A            ; CR?
-        bne     L1
-        lda     #0
-        sta     CURS_X
-        beq     plot            ; Recalculate pointers
-
-L1:     cmp     #$0D            ; LF?
-        beq     newline         ; Recalculate pointers
-
-; Printable char of some sort
-
-        cmp     #' '
-        bcc     cputdirect      ; Other control char
-        tay
-        bmi     L10
-        cmp     #$60
-        bcc     L2
-        and     #$DF
-        bne     cputdirect      ; Branch always
-L2:     and     #$3F
-
-cputdirect:
-        jsr     putchar         ; Write the character to the screen
-
-; Advance cursor position
-
-advance:
-        iny
-        cpy     #XSIZE
-        bne     L3
-        jsr     newline         ; new line
-        ldy     #0              ; + cr
-L3:     sty     CURS_X
-        rts
-
-newline:
-        clc
-        lda     #XSIZE
-        adc     SCREEN_PTR
-        sta     SCREEN_PTR
-        bcc     L4
-        inc     SCREEN_PTR+1
-        clc
-L4:     lda     #XSIZE
-        adc     CRAM_PTR
-        sta     CRAM_PTR
-        bcc     L5
-        inc     CRAM_PTR+1
-L5:     inc     CURS_Y
-        rts
-
-; Handle character if high bit set
-
-L10:    and     #$7F
-        cmp     #$7E            ; PI?
-        bne     L11
-        lda     #$5E            ; Load screen code for PI
-        bne     cputdirect
-L11:    ora     #$40
-        bne     cputdirect
-
-
-
-; Set cursor position, calculate RAM pointers.
-
-plot:   ldy     CURS_X
-        ldx     CURS_Y
-        clc
-        jmp     PLOT            ; Set the new cursor
-
-
-
-; Write one character to the screen without doing anything else, return X
-; position in Y
-
-putchar:
-        ora     RVS             ; Set revers bit
-        ldy     CURS_X
-        sta     (SCREEN_PTR),y  ; Set char
-        lda     CHARCOLOR
-        sta     (CRAM_PTR),y    ; Set color
-        rts
diff --git a/libsrc/c64/crt0.s b/libsrc/c64/crt0.s
deleted file mode 100644 (file)
index 24fe437..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-;
-; Startup code for cc65 (C64 version)
-;
-
-        .export         _exit
-        .export         __STARTUP__ : absolute = 1      ; Mark as startup
-        .import         initlib, donelib
-        .import         zerobss
-        .import         callmain
-        .import         RESTOR, BSOUT, CLRCH
-        .import         __RAM_START__, __RAM_SIZE__     ; Linker generated
-        .import         __STACKSIZE__                   ; Linker generated
-        .importzp       ST
-
-        .include        "zeropage.inc"
-        .include        "c64.inc"
-
-
-; ------------------------------------------------------------------------
-; Startup code
-
-.segment        "STARTUP"
-
-Start:
-
-; Save the zero-page locations that we need.
-
-        ldx     #zpspace-1
-L1:     lda     sp,x
-        sta     zpsave,x
-        dex
-        bpl     L1
-
-; Switch to the second charset.
-
-        lda     #14
-        jsr     BSOUT
-
-; Switch off the BASIC ROM.
-
-        lda     $01
-        pha                     ; Remember the value
-        and     #$F8
-        ora     #$06            ; Enable Kernal+I/O, disable BASIC
-        sta     $01
-
-; Clear the BSS data.
-
-        jsr     zerobss
-
-; Save some system settings; and, set up the stack.
-
-        pla
-        sta     mmusave         ; Save the memory configuration
-
-        tsx
-        stx     spsave          ; Save the system stack ptr
-
-        lda     #<(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
-        sta     sp
-        lda     #>(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
-        sta     sp+1            ; Set argument stack ptr
-
-; Call the module constructors.
-
-        jsr     initlib
-
-; Push the command-line arguments; and, call main().
-
-        jsr     callmain
-
-; Back from main() [this is also the exit() entry]. Run the module destructors.
-
-_exit:  pha                     ; Save the return code on stack
-        jsr     donelib
-
-; Copy back the zero-page stuff.
-
-        ldx     #zpspace-1
-L2:     lda     zpsave,x
-        sta     sp,x
-        dex
-        bpl     L2
-
-; Place the program return code into BASIC's status variable.
-
-        pla
-        sta     ST
-
-; Restore the system stuff.
-
-        ldx     spsave
-        txs                     ; Restore stack pointer
-        ldx     mmusave
-        stx     $01             ; Restore memory configuration
-
-; Back to BASIC.
-
-        rts
-
-; ------------------------------------------------------------------------
-; Data
-
-.segment        "ZPSAVE"
-
-zpsave: .res    zpspace
-
-.bss
-
-spsave: .res    1
-mmusave:.res    1
diff --git a/libsrc/c64/devnum.s b/libsrc/c64/devnum.s
deleted file mode 100644 (file)
index 33c0461..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-;
-; Oliver Schmidt, 2010-02-14
-;
-
-        .include        "c64.inc"
-
-        .exportzp       devnum := DEVNUM
diff --git a/libsrc/c64/emd/c64-c256k.s b/libsrc/c64/emd/c64-c256k.s
deleted file mode 100644 (file)
index 79706e8..0000000
+++ /dev/null
@@ -1,507 +0,0 @@
-;
-; Extended memory driver for the C256K memory expansion
-; Marco van den Heuvel, 2010-01-27
-;
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c64_c256k_emd
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-BASE                    = $4000
-PAGES                   = 3 * 256
-TARGETLOC               = $200          ; Target location for copy/check code
-PIA                     = $DFC0
-
-; ------------------------------------------------------------------------
-; Data.
-
-.data
-
-
-; This function is used to copy code from and to the extended memory
-.proc   copy
-template:
-.org    ::TARGETLOC             ; Assemble for target location
-entry:
-        stx     PIA
-stashop         = $91           ; 'sta' opcode
-operation       := *            ; Location and opcode is patched at runtime
-address         := *+1
-        lda     ($00),y
-        ldx     #$dc
-        stx     PIA
-        rts
-.reloc
-.endproc
-
-; This function is used to check for the existence of the extended memory
-.proc   check
-template:
-.org    ::TARGETLOC
-entry:
-        ldy     #$00            ; Assume hardware not present
-
-        lda     #$fc
-        sta     PIA
-        lda     $01
-        tax
-        and     #$f8
-        sta     $01
-        lda     $4000
-        cmp     $c000
-        bne     done            ; Jump if not found
-        inc     $c000
-        cmp     $4000
-        beq     done            ; Jump if not found
-
-        ; Hardware is present
-        iny
-done:   stx     $01
-        ldx     #$dc
-        stx     PIA
-        rts
-.reloc
-.endproc
-
-
-
-.bss
-
-curpage:        .res    2       ; Current page number
-curbank:        .res    1       ; Current bank
-window:         .res    256     ; Memory "window"
-
-; Since the functions above are copied to $200, the current contents of this
-; memory area must be saved into backup storage. Allocate enough space.
-backup:         .res    .max (.sizeof (copy), .sizeof (check))
-
-
-
-.code
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     PIA+1           ; Select Peripheral Registers
-        ora     #4
-        sta     PIA+1
-        tax
-        lda     PIA+3
-        ora     #4
-        sta     PIA+3
-        tay
-
-        lda     #$DC            ; Set the default memory bank data
-        sta     PIA
-        lda     #$FE
-        sta     PIA+2
-
-        txa                     ; Select Data Direction Registers
-        and     #$FB
-        sta     PIA+1
-        tya
-        and     #$FB
-        sta     PIA+3
-
-        lda     #$FF            ; Set the ports to output
-        sta     PIA
-        sta     PIA+2
-
-        txa
-        and     #$C7
-        ora     #$30            ; Set CA1 and
-        sta     PIA+1           ; select Peripheral Registers
-        sty     PIA+3
-
-        jsr     backup_and_setup_check_routine
-        jsr     check::entry
-        cli
-        ldx     #.sizeof (check) - 1
-        jsr     restore_data
-        cpy     #$01
-        beq     @present
-        lda     #<EM_ERR_NO_DEVICE
-        ldx     #>EM_ERR_NO_DEVICE
-        rts
-
-@present:
-        lda     #<EM_ERR_OK
-        ldx     #>EM_ERR_OK
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     #<PAGES
-        ldx     #>PAGES
-        rts
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:
-        sei
-        sta     curpage         ; Remember the new page
-        stx     curpage+1
-        jsr     adjust_page_and_bank
-        stx     curbank
-        clc
-        adc     #>BASE
-        sta     ptr1+1
-        ldy     #0
-        sty     ptr1
-        jsr     backup_and_setup_copy_routine
-        ldx     #<ptr1
-        stx     copy::address
-@L1:
-        ldx     curbank
-        jsr     copy::entry
-        ldx     ptr1
-        sta     window,x
-        inc     ptr1
-        bne     @L1
-
-; Return the memory window
-
-        jsr     restore_copy_routine
-        lda     #<window
-        ldx     #>window                ; Return the window address
-        cli
-        rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-
-USE:    sta     curpage         ; Remember the page
-        stx     curpage+1
-        lda     #<window
-        ldx     #>window                ; Return the window
-        rts
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT:
-        sei
-        lda     curpage         ; Get the current page
-        ldx     curpage+1
-
-        jsr     adjust_page_and_bank
-        stx     curbank
-        clc
-        adc     #>BASE
-        sta     ptr1+1
-        ldy     #0
-        sty     ptr1
-        jsr     backup_and_setup_copy_routine
-        ldx     #<ptr1
-        stx     copy::address
-        ldx     #<copy::stashop
-        stx     copy::operation
-@L1:
-        ldx     ptr1
-        lda     window,x
-        ldx     curbank
-        jsr     copy::entry
-        inc     ptr1
-        bne     @L1
-
-; Return the memory window
-
-        jsr     restore_copy_routine
-done:
-        cli
-        rts
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-
-COPYFROM:
-        sei
-        jsr     setup
-        jsr     backup_and_setup_copy_routine
-
-; Setup is:
-;
-;   - ptr1 contains the struct pointer
-;   - ptr2 contains the linear memory buffer
-;   - ptr3 contains -(count-1)
-;   - ptr4 contains the page memory buffer plus offset
-;   - tmp1 contains zero (to be used for linear memory buffer offset)
-;   - tmp2 contains the bank value
-
-        lda     #<ptr4
-        sta     copy::address
-        jmp     @L3
-
-@L1:
-        ldx     tmp2
-        ldy     #0
-        jsr     copy::entry
-        ldy     tmp1
-        sta     (ptr2),y
-        inc     tmp1
-        bne     @L2
-        inc     ptr2+1
-@L2:
-        inc     ptr4
-        beq     @L4
-
-; Bump count and repeat
-
-@L3:
-        inc     ptr3
-        bne     @L1
-        inc     ptr3+1
-        bne     @L1
-        jsr     restore_copy_routine
-        cli
-        rts
-
-; Bump page register
-
-@L4:
-        inc     ptr4+1
-        lda     ptr4+1
-        cmp     #$80
-        bne     @L3
-        lda     #>BASE
-        sta     ptr4+1
-        lda     tmp2
-        clc
-        adc     #$10
-        sta     tmp2
-        jmp     @L3
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO:
-        sei
-        jsr     setup
-        jsr     backup_and_setup_copy_routine
-
-; Setup is:
-;
-;   - ptr1 contains the struct pointer
-;   - ptr2 contains the linear memory buffer
-;   - ptr3 contains -(count-1)
-;   - ptr4 contains the page memory buffer plus offset
-;   - tmp1 contains zero (to be used for linear memory buffer offset)
-;   - tmp2 contains the bank value
-
-        lda     #<ptr4
-        sta     copy::address
-        lda     #<copy::stashop
-        sta     copy::operation
-        jmp     @L3
-
-@L1:
-        ldy     tmp1
-        lda     (ptr2),y
-        ldx     tmp2
-        ldy     #0
-        jsr     copy::entry
-        inc     tmp1
-        bne     @L2
-        inc     ptr2+1
-@L2:
-        inc     ptr4
-        beq     @L4
-
-; Bump count and repeat
-
-@L3:
-        inc     ptr3
-        bne     @L1
-        inc     ptr3+1
-        bne     @L1
-        jsr     restore_copy_routine
-        cli
-        rts
-
-; Bump page register
-
-@L4:
-        inc     ptr4+1
-        lda     ptr4+1
-        cmp     #$80
-        bne     @L3
-        lda     #>BASE
-        sta     ptr4+1
-        lda     tmp2
-        clc
-        adc     #$10
-        sta     tmp2
-        jmp     @L3
-
-; ------------------------------------------------------------------------
-; Helper function for COPYFROM and COPYTO: Store the pointer to the request
-; structure and prepare data for the copy
-
-setup:
-        sta     ptr1
-        stx     ptr1+1                                  ; Save passed pointer
-
-; Get the page number from the struct and adjust it so that it may be used
-; with the hardware. That is: ptr4 has the page address and page offset
-; tmp2 will hold the bank value
-
-        ldy     #EM_COPY::PAGE+1
-        lda     (ptr1),y
-        tax
-        ldy     #EM_COPY::PAGE
-        lda     (ptr1),y
-        jsr     adjust_page_and_bank
-        clc
-        adc     #>BASE
-        sta     ptr4+1
-        stx     tmp2
-
-; Get the buffer pointer into ptr2
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr1),y
-        sta     ptr2
-        iny
-        lda     (ptr1),y
-        sta     ptr2+1
-
-; Get the count, calculate -(count-1) and store it into ptr3
-
-        ldy     #EM_COPY::COUNT
-        lda     (ptr1),y
-        eor     #$FF
-        sta     ptr3
-        iny
-        lda     (ptr1),y
-        eor     #$FF
-        sta     ptr3+1
-
-; Get the page offset into ptr4 and clear tmp1
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr1),y
-        sta     ptr4
-        lda     #0
-        sta     tmp1
-
-; Done
-
-        rts
-
-; Helper routines for copying to and from the +256k ram
-
-backup_and_setup_copy_routine:
-        ldx     #.sizeof (copy) - 1
-@L1:
-        lda     copy::entry,x
-        sta     backup,x
-        lda     copy::template,x
-        sta     copy::entry,x
-        dex
-        bpl     @L1
-        rts
-
-backup_and_setup_check_routine:
-        ldx     #.sizeof (check) - 1
-@L1:
-        lda     check::entry,x
-        sta     backup,x
-        lda     check::template,x
-        sta     check::entry,x
-        dex
-        bpl     @L1
-        rts
-
-restore_copy_routine:
-        ldx     #.sizeof (copy) - 1
-restore_data:
-        lda     backup,x
-        sta     TARGETLOC,x
-        dex
-        bpl     restore_data
-        rts
-
-; Helper routine to correct for the bank and page
-adjust_page_and_bank:
-        sta     tmp4
-        lda     #$0C
-        sta     tmp3
-        lda     tmp4
-        and     #$c0
-        lsr
-        lsr
-        ora     tmp3
-        sta     tmp3
-        txa
-        asl
-        asl
-        asl
-        asl
-        asl
-        asl
-        ora     tmp3
-        tax
-        lda     tmp4
-        and     #$3f
-        rts
diff --git a/libsrc/c64/emd/c64-dqbb.s b/libsrc/c64/emd/c64-dqbb.s
deleted file mode 100644 (file)
index 986c593..0000000
+++ /dev/null
@@ -1,446 +0,0 @@
-;
-; Extended memory driver for the Double Quick Brown Box cartridge
-; Marco van den Heuvel, 2010-01-27
-;
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c64_dqbb_emd
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-BASE                    = $8000
-PAGES                   = ($C000 - BASE) / 256
-TARGETLOC               = $200          ; Target location for copy/check code
-CONTROL                 = $DE00
-
-; ------------------------------------------------------------------------
-; Data.
-
-.proc   check
-template:
-.org    ::TARGETLOC             ; Assemble for target location
-entry:
-        lda     $01
-        pha
-        lda     #$37
-        sta     $01
-        ldx     #$14
-        ldy     #$90
-        sty     CONTROL
-        lda     $8000
-        stx     CONTROL
-        cmp     $8000
-        bne     present
-        sty     CONTROL
-        inc     $8000
-        stx     CONTROL
-        cmp     $8000
-        beq     present
-        dec     $8000
-        ldy     #$00
-
-done:   pla
-        sta     $01
-        rts
-
-present:
-        sty     CONTROL
-        ldy     #$01
-        bne     done
-.reloc
-.endproc
-
-
-.proc   copy
-template:
-.org    ::TARGETLOC             ; Assemble for target location
-entry:
-.proc   fetch
-        stx     CONTROL
-        ldx     $01
-        lda     #$37
-        sta     $01
-address         := *+1          ; Patched at runtime
-        lda     ($00),y
-        stx     $01
-        ldx     #$90
-        stx     CONTROL
-        rts
-.endproc
-
-.proc   stash
-        stx     CONTROL
-        ldx     $01
-        ldy     #$37
-        sty     $01
-        ldy     #$00
-address         := *+1          ; Patched at runtime
-        sta     ($00),y
-        stx     $01
-        ldx     #$90
-        stx     CONTROL
-        rts
-.endproc
-.reloc
-.endproc
-
-
-.bss
-
-curpage:        .res    1               ; Current page number
-window:         .res    256             ; Memory "window"
-
-; Since the functions above are copied to $200, the current contents of this
-; memory area must be saved into backup storage. Allocate enough space.
-backup:         .res    .max (.sizeof (copy), .sizeof (check))
-
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-        sei
-        jsr     backup_and_setup_check_routine
-        jsr     check::entry
-        cli
-        ldx     #.sizeof (check) - 1
-        jsr     restore_data
-        cpy     #$01
-        beq     @present
-        lda     #<EM_ERR_NO_DEVICE
-        ldx     #>EM_ERR_NO_DEVICE
-        rts
-
-@present:
-        lda     #<EM_ERR_OK
-        ldx     #>EM_ERR_OK
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     #<PAGES
-        ldx     #>PAGES
-        rts
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:
-        sei
-        sta     curpage         ; Remember the new page
-        clc
-        adc     #>BASE
-        sta     ptr1+1
-        ldy     #0
-        sty     ptr1
-        jsr     backup_and_setup_copy_routine
-        ldx     #<ptr1
-        stx     copy::fetch::address
-@L1:
-        ldx     #$14
-        jsr     copy::fetch
-        ldx     ptr1
-        sta     window,x
-        inc     ptr1
-        bne     @L1
-
-; Return the memory window
-
-        jsr     restore_copy_routine
-        lda     #<window
-        ldx     #>window                ; Return the window address
-        cli
-        rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-
-USE:    sta     curpage         ; Remember the page
-        lda     #<window
-        ldx     #>window                ; Return the window
-        rts
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT:
-        sei
-        lda     curpage         ; Get the current page
-        clc
-        adc     #>BASE
-        sta     ptr1+1
-        ldy     #0
-        sty     ptr1
-        jsr     backup_and_setup_copy_routine
-        ldx     #<ptr1
-        stx     copy::stash::address
-@L1:
-        ldx     ptr1
-        lda     window,x
-        ldx     #$14
-        jsr     copy::stash
-        inc     ptr1
-        bne     @L1
-
-; Return the memory window
-
-        jsr     restore_copy_routine
-        cli
-        rts
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-
-COPYFROM:
-        sei
-        pha
-        txa
-        pha
-        jsr     backup_and_setup_copy_routine
-        pla
-        tax
-        pla
-        jsr     setup
-
-; Setup is:
-;
-;   - ptr1 contains the struct pointer
-;   - ptr2 contains the linear memory buffer
-;   - ptr3 contains -(count-1)
-;   - ptr4 contains the page memory buffer plus offset
-;   - tmp1 contains zero (to be used for linear memory buffer offset)
-
-        lda     #<ptr4
-        sta     copy::fetch::address
-        jmp     @L3
-
-@L1:
-        ldx     #$14
-        ldy     #0
-        jsr     copy::fetch
-        ldy     tmp1
-        sta     (ptr2),y
-        inc     tmp1
-        bne     @L2
-        inc     ptr2+1
-@L2:
-        inc     ptr4
-        beq     @L4
-
-; Bump count and repeat
-
-@L3:
-        inc     ptr3
-        bne     @L1
-        inc     ptr3+1
-        bne     @L1
-        jsr     restore_copy_routine
-        cli
-        rts
-
-; Bump page register
-
-@L4:
-        inc     ptr4+1
-        jmp     @L3
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO:
-        sei
-        pha
-        txa
-        pha
-        jsr     backup_and_setup_copy_routine
-        pla
-        tax
-        pla
-        jsr     setup
-
-; Setup is:
-;
-;   - ptr1 contains the struct pointer
-;   - ptr2 contains the linear memory buffer
-;   - ptr3 contains -(count-1)
-;   - ptr4 contains the page memory buffer plus offset
-;   - tmp1 contains zero (to be used for linear memory buffer offset)
-
-        lda     #<ptr4
-        sta     copy::stash::address
-        jmp     @L3
-
-@L1:
-        ldy     tmp1
-        lda     (ptr2),y
-        ldx     #$14
-        ldy     #0
-        jsr     copy::stash
-        inc     tmp1
-        bne     @L2
-        inc     ptr2+1
-@L2:
-        inc     ptr4
-        beq     @L4
-
-; Bump count and repeat
-
-@L3:
-        inc     ptr3
-        bne     @L1
-        inc     ptr3+1
-        bne     @L1
-        jsr     restore_copy_routine
-        cli
-        rts
-
-; Bump page register
-
-@L4:
-        inc     ptr4+1
-        jmp     @L3
-
-; ------------------------------------------------------------------------
-; Helper function for COPYFROM and COPYTO: Store the pointer to the request
-; structure and prepare data for the copy
-
-setup:
-        sta     ptr1
-        stx     ptr1+1          ; Save passed pointer
-
-; Get the page number from the struct and adjust it so that it may be used
-; with the hardware. That is: ptr4 has the page address and page offset
-; tmp2 will hold the bank value
-
-        ldy     #EM_COPY::PAGE
-        lda     (ptr1),y
-        clc
-        adc     #>BASE
-        sta     ptr4+1
-
-; Get the buffer pointer into ptr2
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr1),y
-        sta     ptr2
-        iny
-        lda     (ptr1),y
-        sta     ptr2+1
-
-; Get the count, calculate -(count-1) and store it into ptr3
-
-        ldy     #EM_COPY::COUNT
-        lda     (ptr1),y
-        eor     #$FF
-        sta     ptr3
-        iny
-        lda     (ptr1),y
-        eor     #$FF
-        sta     ptr3+1
-
-; Get the page offset into ptr4 and clear tmp1
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr1),y
-        sta     ptr4
-        lda     #0
-        sta     tmp1
-
-; Done
-
-        rts
-
-; Helper routines for copying to and from the +256k ram
-
-backup_and_setup_copy_routine:
-        ldx     #.sizeof (copy) - 1
-@L1:
-        lda     copy::entry,x
-        sta     backup,x
-        lda     copy::template,x
-        sta     copy::entry,x
-        dex
-        bpl     @L1
-        rts
-
-backup_and_setup_check_routine:
-        ldx     #.sizeof (check) - 1
-@L1:
-        lda     check::entry,x
-        sta     backup,x
-        lda     check::template,x
-        sta     check::entry,x
-        dex
-        bpl     @L1
-        rts
-
-restore_copy_routine:
-        ldx     #.sizeof (copy) - 1
-restore_data:
-        lda     backup,x
-        sta     TARGETLOC,x
-        dex
-        bpl     restore_data
-        rts
diff --git a/libsrc/c64/emd/c64-georam.s b/libsrc/c64/emd/c64-georam.s
deleted file mode 100644 (file)
index 97f1a7c..0000000
+++ /dev/null
@@ -1,354 +0,0 @@
-;
-; Extended memory driver for the GEORAM cartridge. Driver works without
-; problems when statically linked.
-;
-; Ullrich von Bassewitz, 2002-11-29
-;
-; GEORAM page size checking routine by
-; Marco van den Heuvel, 2010-01-21
-;
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c64_georam_emd
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-GR_WINDOW       = $DE00                 ; Address of GEORAM window
-GR_PAGE_LO      = $DFFE                 ; Page register low
-GR_PAGE_HI      = $DFFF                 ; Page register high
-
-; ------------------------------------------------------------------------
-; Data.
-
-.data
-
-pagecount:      .res    2               ; Number of available pages
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-        ldx     GR_WINDOW
-        cpx     GR_WINDOW
-        bne     @notpresent
-        inc     GR_WINDOW
-        cpx     GR_WINDOW
-        beq     @notpresent
-
-        lda     #4
-        jsr     check
-        cpy     GR_WINDOW
-        beq     @has64k
-        lda     #8
-        jsr     check
-        cpy     GR_WINDOW
-        beq     @has128k
-        lda     #16
-        jsr     check
-        cpy     GR_WINDOW
-        beq     @has256k
-        lda     #32
-        jsr     check
-        cpy     GR_WINDOW
-        beq     @has512k
-        lda     #64
-        jsr     check
-        cpy     GR_WINDOW
-        beq     @has1024k
-        lda     #128
-        jsr     check
-        cpy     GR_WINDOW
-        beq     @has2048k
-        ldx     #>16384
-        bne     @setok
-
-@has64k:
-        ldx     #>256
-        bne     @setok
-@has128k:
-        ldx     #>512
-        bne     @setok
-@has256k:
-        ldx     #>1024
-        bne     @setok
-@has512k:
-        ldx     #>2048
-        bne     @setok
-@has1024k:
-        ldx     #>4096
-        bne     @setok
-@has2048k:
-        ldx     #>8192
-        bne     @setok
-
-@notpresent:
-        lda     #<EM_ERR_NO_DEVICE
-        ldx     #>EM_ERR_NO_DEVICE
-        rts
-
-@setok:
-        lda     #0
-        sta     pagecount
-        stx     pagecount+1
-        lda     #<EM_ERR_OK
-        ldx     #>EM_ERR_OK
-        rts
-
-check:
-        ldx     #0
-        stx     GR_PAGE_LO
-        stx     GR_PAGE_HI
-        ldy     GR_WINDOW
-        iny
-        sta     GR_PAGE_HI
-        sty     GR_WINDOW
-        ldx     #0
-        stx     GR_PAGE_HI
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     pagecount
-        ldx     pagecount+1
-        rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-; The GeoRAM cartridge does not copy but actually map the window, so USE is
-; identical to MAP.
-
-USE     = MAP
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:    sta     tmp1
-        txa
-        asl     tmp1
-        rol     a
-        asl     tmp1
-        rol     a
-
-        sta     GR_PAGE_HI
-        lda     tmp1
-        lsr     a
-        lsr     a
-        sta     GR_PAGE_LO
-
-        lda     #<GR_WINDOW
-        ldx     #>GR_WINDOW
-
-; Use the RTS from COMMIT below to save a precious byte of storage
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT: rts
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYFROM:
-        jsr     setup
-
-; Setup is:
-;
-;   - ptr1 contains the struct pointer
-;   - ptr2 contains the linear memory buffer
-;   - ptr3 contains -(count-1)
-;   - tmp1 contains the low page register value
-;   - tmp2 contains the high page register value
-;   - X contains the page offset
-;   - Y contains zero
-
-        jmp     @L5
-
-@L1:    lda     GR_WINDOW,x
-        sta     (ptr2),y
-        iny
-        bne     @L2
-        inc     ptr2+1
-@L2:    inx
-        beq     @L4
-
-; Bump count and repeat
-
-@L3:    inc     ptr3
-        bne     @L1
-        inc     ptr3+1
-        bne     @L1
-        rts
-
-; Bump page register
-
-@L4:    inc     tmp1            ; Bump low page register
-        bit     tmp1            ; Check for overflow in bit 6
-        bvc     @L6             ; Jump if no overflow
-        inc     tmp2
-@L5:    lda     tmp2
-        sta     GR_PAGE_HI
-@L6:    lda     tmp1
-        sta     GR_PAGE_LO
-        jmp     @L3
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO:
-        jsr     setup
-
-; Setup is:
-;
-;   - ptr1 contains the struct pointer
-;   - ptr2 contains the linear memory buffer
-;   - ptr3 contains -(count-1)
-;   - tmp1 contains the low page register value
-;   - tmp2 contains the high page register value
-;   - X contains the page offset
-;   - Y contains zero
-
-        jmp     @L5
-
-@L1:    lda     (ptr2),y
-        sta     GR_WINDOW,x
-        iny
-        bne     @L2
-        inc     ptr2+1
-@L2:    inx
-        beq     @L4
-
-; Bump count and repeat
-
-@L3:    inc     ptr3
-        bne     @L1
-        inc     ptr3+1
-        bne     @L1
-        rts
-
-; Bump page register
-
-@L4:    inc     tmp1            ; Bump low page register
-        bit     tmp1            ; Check for overflow in bit 6
-        bvc     @L6             ; Jump if no overflow
-        inc     tmp2
-@L5:    lda     tmp2
-        sta     GR_PAGE_HI
-@L6:    lda     tmp1
-        sta     GR_PAGE_LO
-        jmp     @L3
-
-; ------------------------------------------------------------------------
-; Helper function for COPYFROM and COPYTO: Store the pointer to the request
-; structure and prepare data for the copy
-
-setup:  sta     ptr1
-        stx     ptr1+1          ; Save passed pointer
-
-; Get the page number from the struct and adjust it so that it may be used
-; with the hardware. That is: lower 6 bits in tmp1, high bits in tmp2.
-
-        ldy     #EM_COPY::PAGE+1
-        lda     (ptr1),y
-        sta     tmp2
-        dey
-        lda     (ptr1),y
-        asl     a
-        rol     tmp2
-        asl     a
-        rol     tmp2
-        lsr     a
-        lsr     a
-        sta     tmp1
-
-; Get the buffer pointer into ptr2
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr1),y
-        sta     ptr2
-        iny
-        lda     (ptr1),y
-        sta     ptr2+1
-
-; Get the count, calculate -(count-1) and store it into ptr3
-
-        ldy     #EM_COPY::COUNT
-        lda     (ptr1),y
-        eor     #$FF
-        sta     ptr3
-        iny
-        lda     (ptr1),y
-        eor     #$FF
-        sta     ptr3+1
-
-; Get the page offset into X and clear Y
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr1),y
-        tax
-        ldy     #$00
-
-; Done
-
-        rts
-
-
diff --git a/libsrc/c64/emd/c64-isepic.s b/libsrc/c64/emd/c64-isepic.s
deleted file mode 100644 (file)
index 3764443..0000000
+++ /dev/null
@@ -1,275 +0,0 @@
-;
-; Extended memory driver for the ISEPIC cartridge.
-; Marco van den Heuvel, 2010-01-24
-;
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c64_isepic_emd
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-IP_WINDOW       = $DF00         ; Address of ISEPIC window
-IP_CTRL_BASE    = $DE00
-PAGES           = 8
-
-; ------------------------------------------------------------------------
-; Code.
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #0
-        sta     IP_CTRL_BASE
-        ldx     IP_WINDOW
-        cpx     IP_WINDOW
-        bne     @notpresent
-        inc     IP_WINDOW
-        cpx     IP_WINDOW
-        beq     @notpresent
-        ldx     IP_WINDOW
-        sta     IP_CTRL_BASE+1
-        inx
-        stx     IP_WINDOW
-        dex
-        sta     IP_CTRL_BASE
-        cpx     IP_WINDOW
-        beq     @setok
-
-@notpresent:
-        lda     #<EM_ERR_NO_DEVICE
-        ldx     #>EM_ERR_NO_DEVICE
-        rts
-
-@setok:
-        lda     #<EM_ERR_OK
-        ldx     #>EM_ERR_OK
-;       rts                             ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     #<PAGES
-        ldx     #>PAGES
-        rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-; The Isepic cartridge does not copy but actually map the window, so USE is
-; identical to MAP.
-
-USE     := MAP
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:
-        tax
-        sta     IP_CTRL_BASE,x
-        lda     #<IP_WINDOW
-        ldx     #>IP_WINDOW
-
-; Use the RTS from COMMIT below to save a precious byte of storage
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT:
-        rts
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYFROM:
-        jsr     setup
-
-; Setup is:
-;
-;   - ptr1 contains the struct pointer
-;   - ptr2 contains the linear memory buffer
-;   - ptr3 contains -(count-1)
-;   - tmp1 contains the low page register value
-;   - X contains the page offset
-;   - Y contains zero
-
-        jmp     @L5
-
-@L1:
-        lda     IP_WINDOW,x
-        sta     (ptr2),y
-        iny
-        bne     @L2
-        inc     ptr2+1
-@L2:
-        inx
-        beq     @L4
-
-; Bump count and repeat
-
-@L3:
-        inc     ptr3
-        bne     @L1
-        inc     ptr3+1
-        bne     @L1
-        rts
-
-; Bump page register
-
-@L4:
-        inc     tmp1            ; Bump low page register
-@L5:
-        stx     tmp2
-        ldx     tmp1
-        sta     IP_CTRL_BASE,x
-        ldx     tmp2
-        jmp     @L3
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO:
-        jsr     setup
-
-; Setup is:
-;
-;   - ptr1 contains the struct pointer
-;   - ptr2 contains the linear memory buffer
-;   - ptr3 contains -(count-1)
-;   - tmp1 contains the low page register value
-;   - X contains the page offset
-;   - Y contains zero
-
-        jmp     @L5
-
-@L1:
-        lda     (ptr2),y
-        sta     IP_WINDOW,x
-        iny
-        bne     @L2
-        inc     ptr2+1
-@L2:
-        inx
-        beq     @L4
-
-; Bump count and repeat
-
-@L3:
-        inc     ptr3
-        bne     @L1
-        inc     ptr3+1
-        bne     @L1
-        rts
-
-; Bump page register
-
-@L4:
-        inc     tmp1            ; Bump page register
-@L5:
-        stx     tmp2
-        ldx     tmp1
-        sta     IP_CTRL_BASE,x
-        ldx     tmp2
-        jmp     @L3
-
-; ------------------------------------------------------------------------
-; Helper function for COPYFROM and COPYTO: Store the pointer to the request
-; structure and prepare data for the copy
-
-setup:
-        sta     ptr1
-        stx     ptr1+1          ; Save passed pointer
-
-; Get the page number from the struct and remember it.
-
-        ldy     #EM_COPY::PAGE
-        lda     (ptr1),y
-        sta     tmp1
-
-; Get the buffer pointer into ptr2
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr1),y
-        sta     ptr2
-        iny
-        lda     (ptr1),y
-        sta     ptr2+1
-
-; Get the count, calculate -(count-1) and store it into ptr3
-
-        ldy     #EM_COPY::COUNT
-        lda     (ptr1),y
-        eor     #$FF
-        sta     ptr3
-        iny
-        lda     (ptr1),y
-        eor     #$FF
-        sta     ptr3+1
-
-; Get the page offset into X and clear Y
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr1),y
-        tax
-        ldy     #0
-
-; Done
-
-        rts
diff --git a/libsrc/c64/emd/c64-ram.s b/libsrc/c64/emd/c64-ram.s
deleted file mode 100644 (file)
index f8a4a18..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-;
-; Extended memory driver for the C64 hidden RAM. Driver works without
-; problems when statically linked.
-;
-; Ullrich von Bassewitz, 2002-12-02
-;
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c64_ram_emd
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-BASE    = $D000
-PAGES   = ($10000 - BASE) / 256
-
-; ------------------------------------------------------------------------
-; Data.
-
-.bss
-curpage:        .res    1               ; Current page number
-window:         .res    256             ; Memory "window"
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-        ldx     #$FF
-        stx     curpage                 ; Invalidate the current page
-        inx                             ; X = 0
-        txa                             ; A = X = EM_ERR_OK
-;       rts                             ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     #<PAGES
-        ldx     #>PAGES
-        rts
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:    sta     curpage                 ; Remember the new page
-
-        clc
-        adc     #>BASE
-        sta     ptr1+1
-        ldy     #$00
-        sty     ptr1
-
-        lda     #<window
-        sta     ptr2
-        lda     #>window
-        sta     ptr2+1
-
-; Transfer one page
-
-        jsr     transfer                ; Transfer one page
-
-; Return the memory window
-
-        lda     #<window
-        ldx     #>window                ; Return the window address
-        rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-
-USE:    sta     curpage                 ; Remember the page
-        lda     #<window
-        ldx     #>window                ; Return the window
-        rts
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT: lda     curpage                 ; Get the current page
-        bmi     done                    ; Jump if no page mapped
-
-        clc
-        adc     #>BASE
-        sta     ptr2+1
-        ldy     #$00
-        sty     ptr2
-
-        lda     #<window
-        sta     ptr1
-        lda     #>window
-        sta     ptr1+1
-
-; Transfer one page. Y must be zero on entry
-
-transfer:
-        ldx     $01                     ; Remember c64 control port
-        txa
-        and     #$F8                    ; Bank out ROMs, I/O
-        sei
-        sta     $01
-
-; Unroll the following loop
-
-loop:   .repeat 8
-        lda     (ptr1),y
-        sta     (ptr2),y
-        iny
-        .endrepeat
-
-        bne     loop
-
-; Restore the old memory configuration, allow interrupts
-
-        stx     $01                     ; Restore the old configuration
-        cli
-
-; Done
-
-done:   rts               
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYFROM:
-        sta     ptr3
-        stx     ptr3+1                  ; Save the passed em_copy pointer
-                       
-        ldy     #EM_COPY::OFFS
-        lda     (ptr3),y
-        sta     ptr1
-        ldy     #EM_COPY::PAGE
-        lda     (ptr3),y
-        clc
-        adc     #>BASE
-        sta     ptr1+1                  ; From
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr3),y
-        sta     ptr2
-        iny
-        lda     (ptr3),y
-        sta     ptr2+1                  ; To
-
-common: ldy     #EM_COPY::COUNT+1
-        lda     (ptr3),y                ; Get number of pages
-        beq     @L2                     ; Skip if no full pages
-        sta     tmp1
-
-; Copy full pages allowing interrupts after each page copied
-
-        ldy     #$00
-@L1:    jsr     transfer
-        inc     ptr1+1
-        inc     ptr2+1
-        dec     tmp1
-        bne     @L1
-
-; Copy the remainder of the page
-
-@L2:    ldy     #EM_COPY::COUNT
-        lda     (ptr3),y                ; Get bytes in last page
-        beq     @L4
-        tax
-
-        lda     $01                     ; Remember c64 control port
-        pha
-        and     #$F8                    ; Bank out ROMs, I/O
-        sei
-        sta     $01
-
-; Transfer the bytes in the last page
-
-        ldy     #$00
-@L3:    lda     (ptr1),y
-        sta     (ptr2),y
-        iny
-        dex
-        bne     @L3
-
-; Restore the old memory configuration, allow interrupts
-
-        pla
-        sta     $01                     ; Restore the old configuration
-        cli
-
-; Done
-
-@L4:    rts
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO: sta     ptr3
-        stx     ptr3+1                  ; Save the passed em_copy pointer
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr3),y
-        sta     ptr2
-        ldy     #EM_COPY::PAGE
-        lda     (ptr3),y
-        clc
-        adc     #>BASE
-        sta     ptr2+1                  ; To
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr3),y
-        sta     ptr1
-        iny
-        lda     (ptr3),y
-        sta     ptr1+1                  ; From
-
-        jmp     common
-
-
diff --git a/libsrc/c64/emd/c64-ramcart.s b/libsrc/c64/emd/c64-ramcart.s
deleted file mode 100644 (file)
index 8998bb6..0000000
+++ /dev/null
@@ -1,297 +0,0 @@
-;
-; Extended memory driver for the RamCart 64/128KB cartridge. Driver works
-; without problems when statically linked.
-; Code is based on GEORAM code by Ullrich von Bassewitz.
-; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
-; 06,22.12.2002
-;
-
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c64_ramcart_emd
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-RAMC_WINDOW       = $DF00                 ; Address of RamCart window
-RAMC_PAGE_LO      = $DE00                 ; Page register low
-RAMC_PAGE_HI      = $DE01                 ; Page register high (only for RC128)
-
-; ------------------------------------------------------------------------
-; Data.
-
-.bss
-
-pagecount:      .res    2               ; Number of available pages
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-        ldx     RAMC_WINDOW
-        cpx     RAMC_WINDOW
-        bne     @notpresent
-
-        lda     #0
-        sta     RAMC_PAGE_LO
-        sta     RAMC_PAGE_HI
-        ldx     RAMC_WINDOW
-        cpx     RAMC_WINDOW
-        bne     @notpresent
-        lda     #2
-        sta     RAMC_WINDOW
-        cmp     RAMC_WINDOW
-        beq     @cont
-        cpx     RAMC_WINDOW
-        beq     @readonly
-@cont:  ldy     #1
-        sty     RAMC_PAGE_HI
-        sty     RAMC_WINDOW
-        dey
-        sty     RAMC_PAGE_HI
-        iny
-        cpy     RAMC_WINDOW
-        beq     @rc64
-        ; we're on rc128
-        ldx     #>512
-        bne     @setsize
-@rc64:  ldx     #>256
-@setsize:
-        lda     #0
-        sta     pagecount
-        stx     pagecount+1
-        lda     #<EM_ERR_OK
-        ldx     #>EM_ERR_OK
-        rts
-@notpresent:
-@readonly:
-        lda     #<EM_ERR_NO_DEVICE
-        ldx     #>EM_ERR_NO_DEVICE
-;       rts                             ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     pagecount
-        ldx     pagecount+1
-        rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-; The RamCart cartridge does not copy but actually map the window, so USE is
-; identical to MAP.
-
-USE     = MAP
-
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:    sta     RAMC_PAGE_LO
-        stx     RAMC_PAGE_HI
-        lda     #<RAMC_WINDOW
-        ldx     #>RAMC_WINDOW
-
-; Use the RTS from COMMIT below to save a precious byte of storage
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT: rts
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYFROM:
-        jsr     setup
-
-; Setup is:
-;
-;   - ptr1 contains the struct pointer
-;   - ptr2 contains the linear memory buffer
-;   - ptr3 contains -(count-1)
-;   - tmp1 contains the low page register value
-;   - tmp2 contains the high page register value
-;   - X contains the page offset
-;   - Y contains zero
-
-        jmp     @L5
-
-@L1:    lda     RAMC_WINDOW,x
-        sta     (ptr2),y
-        iny
-        bne     @L2
-        inc     ptr2+1
-@L2:    inx
-        beq     @L4
-
-; Bump count and repeat
-
-@L3:    inc     ptr3
-        bne     @L1
-        inc     ptr3+1
-        bne     @L1
-        rts
-
-; Bump page register
-
-@L4:    inc     tmp1
-        bne     @L5
-        inc     tmp2
-@L5:    lda     tmp1
-        sta     RAMC_PAGE_LO
-        lda     tmp2
-        sta     RAMC_PAGE_HI
-        jmp     @L3
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO:
-        jsr     setup
-
-; Setup is:
-;
-;   - ptr1 contains the struct pointer
-;   - ptr2 contains the linear memory buffer
-;   - ptr3 contains -(count-1)
-;   - tmp1 contains the low page register value
-;   - tmp2 contains the high page register value
-;   - X contains the page offset
-;   - Y contains zero
-
-        jmp     @L5
-
-@L1:    lda     (ptr2),y
-        sta     RAMC_WINDOW,x
-        iny
-        bne     @L2
-        inc     ptr2+1
-@L2:    inx
-        beq     @L4
-
-; Bump count and repeat
-
-@L3:    inc     ptr3
-        bne     @L1
-        inc     ptr3+1
-        bne     @L1
-        rts
-
-; Bump page register
-
-@L4:    inc     tmp1
-        bne     @L5
-        inc     tmp2
-@L5:    lda     tmp1
-        sta     RAMC_PAGE_LO
-        lda     tmp2
-        sta     RAMC_PAGE_HI
-        jmp     @L3
-
-; ------------------------------------------------------------------------
-; Helper function for COPYFROM and COPYTO: Store the pointer to the request
-; structure and prepare data for the copy
-
-setup:  sta     ptr1
-        stx     ptr1+1          ; Save passed pointer
-
-; Get the page number from the struct and adjust it so that it may be used
-; with the hardware. That is: lower 6 bits in tmp1, high bits in tmp2.
-
-        ldy     #EM_COPY::PAGE+1
-        lda     (ptr1),y
-        sta     tmp2
-        dey
-        lda     (ptr1),y
-        sta     tmp1
-
-; Get the buffer pointer into ptr2
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr1),y
-        sta     ptr2
-        iny
-        lda     (ptr1),y
-        sta     ptr2+1
-
-; Get the count, calculate -(count-1) and store it into ptr3
-
-        ldy     #EM_COPY::COUNT
-        lda     (ptr1),y
-        eor     #$FF
-        sta     ptr3
-        iny
-        lda     (ptr1),y
-        eor     #$FF
-        sta     ptr3+1
-
-; Get the page offset into X and clear Y
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr1),y
-        tax
-        ldy     #$00
-
-; Done
-
-        rts
-
diff --git a/libsrc/c64/emd/c64-reu.s b/libsrc/c64/emd/c64-reu.s
deleted file mode 100644 (file)
index 0779505..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-;
-; Extended memory driver for the Commodore REU. Driver works without
-; problems when statically linked.
-;
-; Ullrich von Bassewitz, 2002-11-29
-;
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c64_reu_emd
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-REU_STATUS      = $DF00                 ; Status register
-REU_COMMAND     = $DF01                 ; Command register
-REU_C64ADDR     = $DF02                 ; C64 base address register
-REU_REUADDR     = $DF04                 ; REU base address register
-REU_COUNT       = $DF07                 ; Transfer count register
-REU_IRQMASK     = $DF09                 ; IRQ mask register
-REU_CONTROL     = $DF0A                 ; Control register
-REU_TRIGGER     = $FF00                 ; REU command trigger
-
-OP_COPYFROM     = $ED
-OP_COPYTO       = $EC
-
-
-; ------------------------------------------------------------------------
-; Data.
-
-.bss
-pagecount:      .res    2               ; Number of pages available
-curpage:        .res    2               ; Current page number
-
-window:         .res    256             ; Memory "window"
-
-reu_params:     .word   $0000           ; Host address, lo, hi
-                .word   $0000           ; Exp  address, lo, hi
-                .byte   $00             ; Expansion  bank no.
-                .word   $0000           ; # bytes to move, lo, hi
-                .byte   $00             ; Interrupt mask reg.
-                .byte   $00             ; Adress control reg.
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-        ldx     #$00                    ; High byte of return code
-        lda     #$55
-        sta     REU_REUADDR
-        cmp     REU_REUADDR             ; Check for presence of REU
-        bne     nodevice
-        asl     a                       ; A = $AA
-        sta     REU_REUADDR
-        cmp     REU_REUADDR             ; Check for presence of REU
-        bne     nodevice
-
-        ldy     #>(128*4)               ; Assume 128KB
-        lda     REU_STATUS
-        and     #$10                    ; Check size bit
-        beq     @L1
-        ldy     #>(256*4)               ; 256KB when size bit is set
-@L1:    sty     pagecount+1
-
-        ldy     #$FF
-        sty     curpage
-        sty     curpage+1               ; Invalidate the current page
-        txa                             ; X = A = EM_ERR_OK
-        rts
-
-; No REU found
-
-nodevice:
-        lda     #EM_ERR_NO_DEVICE
-;       rts                             ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     pagecount
-        ldx     pagecount+1
-        rts
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x.  The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:    sta     curpage
-        stx     curpage+1               ; Remember the new page
-
-        ldy     #OP_COPYFROM
-        jsr     common                  ; Copy the window
-
-        lda     #<window
-        ldx     #>window                ; Return the window address
-done:   rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-                                        
-USE:    sta     curpage
-        stx     curpage+1               ; Remember the page
-        lda     #<window
-        ldx     #>window                ; Return the window
-        rts
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT: lda     curpage
-        ldx     curpage+1               ; Do we have a page mapped?
-        bmi     done                    ; Jump if no page mapped
-
-        ldy     #OP_COPYTO
-common: sty     tmp1
-
-        ldy     #<window
-        sty     REU_C64ADDR
-        ldy     #>window
-        sty     REU_C64ADDR+1
-
-        ldy     #0
-        sty     REU_REUADDR+0
-        sta     REU_REUADDR+1
-        stx     REU_REUADDR+2
-
-        sty     REU_COUNT+0
-        ldy     #1
-        sty     REU_COUNT+1             ; Move 256 bytes
-        bne     transfer1               ; Transfer 256 bytes into REU
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYFROM:
-        ldy     #OP_COPYFROM
-        .byte   $2C
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO:
-        ldy     #OP_COPYTO
-        sty     tmp1
-
-; Remember the passed pointer
-
-        sta     ptr1
-        stx     ptr1+1          ; Save the pointer
-
-; The structure passed to the functions has the same layout as the registers
-; of the Commodore REU, so register programming is easy.
-
-        ldy     #7-1
-@L1:    lda     (ptr1),y
-        sta     REU_C64ADDR,y
-        dey
-        bpl     @L1
-
-; Invalidate the page in the memory window
-
-        sty     curpage+1       ; Y = $FF
-
-; Reload the REU command and start the transfer
-
-transfer1:
-        ldy     tmp1
-
-; Transfer subroutine for the REU. Expects command in Y.
-
-transfer:
-        sty     REU_COMMAND     ; Issue command
-
-        ldy     $01             ; Save the value of the c64 control port...
-        tya                     ;
-        and     #$F8            ; Disable ROMs and I/O.
-        sei                     ;
-        sta     $01
-        lda     REU_TRIGGER     ; Don't change $FF00
-        sta     REU_TRIGGER     ; Start the transfer...
-
-        sty     $01             ; Restore the old configuration
-        cli
-        rts
-
diff --git a/libsrc/c64/emd/c64-vdc.s b/libsrc/c64/emd/c64-vdc.s
deleted file mode 100644 (file)
index 2448f09..0000000
+++ /dev/null
@@ -1,404 +0,0 @@
-;
-; Extended memory driver for the VDC RAM available on all C128 machines
-; (based on code by Ullrich von Bassewitz)
-; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
-; 06,20.12.2002
-;
-; VDC test added by
-; Marco van den Heuvel, 2010-01-22
-;
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c64_vdc_emd
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-VDC_ADDR_REG      = $D600                 ; VDC address
-VDC_DATA_REG      = $D601                 ; VDC data
-
-VDC_DATA_HI       = 18                    ; used registers
-VDC_DATA_LO       = 19
-VDC_CSET          = 28
-VDC_DATA          = 31
-
-; ------------------------------------------------------------------------
-; Data.
-
-.data
-
-pagecount:      .word  64                  ; $0000-$3fff as 16k default
-curpage:        .word  $ffff               ; currently mapped-in page (invalid)
-
-.bss
-
-window:         .res    256                ; memory window
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-        ldx     #0
-        ldy     #0
-        lda     #VDC_CSET       ; determine size of RAM...
-        sta     VDC_ADDR_REG
-
-@L0:    bit     VDC_ADDR_REG
-        bmi     @present
-        inx
-        bne     @L0
-        iny
-        bne     @L0
-        lda     #<EM_ERR_NO_DEVICE
-        ldx     #>EM_ERR_NO_DEVICE
-        rts
-
-@present:
-        ldx     #VDC_CSET       ; determine size of RAM...
-        jsr     vdcgetreg
-        sta     tmp1
-        ora     #%00010000
-        jsr     vdcputreg       ; turn on 64k
-
-        jsr     settestadr1     ; save original value of test byte
-        jsr     vdcgetbyte
-        sta     tmp2
-
-        lda     #$55            ; write $55 here
-        ldy     #ptr1
-        jsr     test64k         ; read it here and there
-        lda     #$aa            ; write $aa here
-        ldy     #ptr2
-        jsr     test64k         ; read it here and there
-
-        jsr     settestadr1
-        lda     tmp2
-        jsr     vdcputbyte      ; restore original value of test byte
-
-        lda     ptr1            ; do bytes match?
-        cmp     ptr1+1
-        bne     @have64k
-        lda     ptr2
-        cmp     ptr2+1
-        bne     @have64k
-
-        ldx     #VDC_CSET
-        lda     tmp1
-        jsr     vdcputreg       ; restore 16/64k flag
-        jmp     @endok          ; and leave default values for 16k
-
-@have64k:
-        lda     #<256
-        ldx     #>256
-        sta     pagecount
-        stx     pagecount+1
-@endok:
-        lda     #<EM_ERR_OK
-        ldx     #>EM_ERR_OK
-        rts
-
-test64k:
-        sta     tmp1
-        sty     ptr3
-        lda     #0
-        sta     ptr3+1
-        jsr     settestadr1
-        lda     tmp1
-        jsr     vdcputbyte              ; write $55
-        jsr     settestadr1
-        jsr     vdcgetbyte              ; read here
-        pha
-        jsr     settestadr2
-        jsr     vdcgetbyte              ; and there
-        ldy     #1
-        sta     (ptr3),y
-        pla
-        dey
-        sta     (ptr3),y
-        rts
-
-settestadr1:
-        ldy     #$02                    ; test page 2 (here)
-        .byte   $2c
-settestadr2:
-        ldy     #$42                    ; or page 64+2 (there)
-        lda     #0
-        jmp     vdcsetsrcaddr
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        ;on C128 restore font and clear the screen?
-        rts
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     pagecount
-        ldx     pagecount+1
-        rts
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:    sta     curpage
-        stx     curpage+1
-        sta     ptr1+1
-        ldy     #0
-        sty     ptr1
-
-        lda     #<window
-        sta     ptr2
-        lda     #>window
-        sta     ptr2+1
-
-        jsr     transferin
-
-        lda     #<window
-        ldx     #>window
-        rts
-
-; copy a single page from (ptr1):VDCRAM to (ptr2):RAM
-
-transferin:
-        lda     ptr1
-        ldy     ptr1+1
-        jsr     vdcsetsrcaddr           ; set source address in VDC
-        ldy     #0
-        ldx     #VDC_DATA
-        stx     VDC_ADDR_REG
-@L0:    bit     VDC_ADDR_REG
-        bpl     @L0
-        lda     VDC_DATA_REG            ; get 2 bytes at a time to speed-up
-        sta     (ptr2),y                ; (in fact up to 8 bytes could be fetched with special VDC config)
-        iny
-        lda     VDC_DATA_REG
-        sta     (ptr2),y
-        iny
-        bne     @L0
-        rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-
-USE:    sta     curpage
-        stx     curpage+1               ; Remember the page
-        lda     #<window
-        ldx     #>window                ; Return the window
-done:   rts
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT:
-        lda     curpage                 ; jump if no page mapped
-        ldx     curpage+1
-        bmi     done
-        sta     ptr1+1
-        ldy     #0
-        sty     ptr1
-
-        lda     #<window
-        sta     ptr2
-        lda     #>window
-        sta     ptr2+1
-
-; fall through to transferout
-
-; copy a single page from (ptr2):RAM to (ptr1):VDCRAM
-
-transferout:
-        lda     ptr1
-        ldy     ptr1+1
-        jsr     vdcsetsrcaddr           ; set source address in VDC
-        ldy     #0
-        ldx     #VDC_DATA
-        stx     VDC_ADDR_REG
-@L0:    bit     VDC_ADDR_REG
-        bpl     @L0
-        lda     (ptr2),y                ; speedup does not work for writing
-        sta     VDC_DATA_REG
-        iny
-        bne     @L0
-        rts
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYFROM:
-        jsr     setup
-        beq     @L2                     ; Skip if no full pages
-
-; Copy full pages
-
-@L1:    jsr     transferin
-        inc     ptr1+1
-        inc     ptr2+1
-        dec     tmp1
-        bne     @L1
-
-; Copy the remainder of the page
-
-@L2:    ldy     #EM_COPY::COUNT
-        lda     (ptr3),y                ; Get bytes in last page
-        beq     @L4
-        sta     tmp1
-
-; Transfer the bytes in the last page
-
-        ldy     #0
-@L3:    jsr     vdcgetbyte
-        sta     (ptr2),y
-        iny
-        dec     tmp1
-        lda     tmp1
-        bne     @L3
-@L4:    rts
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO:
-        jsr     setup
-        beq     @L2                     ; Skip if no full pages
-
-; Copy full pages
-
-@L1:    jsr     transferout
-        inc     ptr1+1
-        inc     ptr2+1
-        dec     tmp1
-        bne     @L1
-
-; Copy the remainder of the page
-
-@L2:    ldy     #EM_COPY::COUNT
-        lda     (ptr3),y                ; Get bytes in last page
-        beq     @L4
-        sta     tmp1
-
-; Transfer the bytes in the last page
-
-        ldy     #0
-@L3:    lda     (ptr2),y
-        jsr     vdcputbyte
-        iny
-        dec     tmp1
-        lda     tmp1
-        bne     @L3
-@L4:    rts
-
-;-------------------------------------------------------------------------
-; Helper functions to handle VDC ram
-;
-
-vdcsetsrcaddr:
-        ldx     #VDC_DATA_LO
-        stx     VDC_ADDR_REG
-@L0:    bit     VDC_ADDR_REG
-        bpl     @L0
-        sta     VDC_DATA_REG
-        dex
-        tya
-        stx     VDC_ADDR_REG
-        sta     VDC_DATA_REG
-        rts
-
-vdcgetbyte:
-        ldx     #VDC_DATA
-vdcgetreg:
-        stx     VDC_ADDR_REG
-@L0:    bit     VDC_ADDR_REG
-        bpl     @L0
-        lda     VDC_DATA_REG
-        rts
-
-vdcputbyte:
-        ldx     #VDC_DATA
-vdcputreg:
-        stx     VDC_ADDR_REG
-@L0:    bit     VDC_ADDR_REG
-        bpl     @L0
-        sta     VDC_DATA_REG
-        rts
-
-; ------------------------------------------------------------------------
-; Helper function for COPYFROM and COPYTO: Store the pointer to the request
-; structure and prepare data for the copy
-;
-
-setup:
-        sta     ptr3
-        stx     ptr3+1                  ; Save the passed em_copy pointer
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr3),y
-        sta     ptr1
-        ldy     #EM_COPY::PAGE
-        lda     (ptr3),y
-        sta     ptr1+1                  ; From
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr3),y
-        sta     ptr2
-        iny
-        lda     (ptr3),y
-        sta     ptr2+1                  ; To
-
-        ldy     #EM_COPY::COUNT+1
-        lda     (ptr3),y                ; Get number of pages
-        sta     tmp1
-        rts
-
diff --git a/libsrc/c64/emd/dtv-himem.s b/libsrc/c64/emd/dtv-himem.s
deleted file mode 100644 (file)
index 6dde874..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-;
-; Extended memory driver for the C64 D2TV (the second or PAL version).
-; Driver works without problems when statically linked.
-;
-; Ullrich von Bassewitz, 2005-11-27
-;
-
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-        .import _get_ostype
-
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _dtv_himem_emd
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-OP_COPYFROM     = %00001101
-OP_COPYTO       = %00001111
-
-START_BANK      = 2                     ; Start at $20000
-PAGES           = (2048 - 128) * 4
-
-
-; ------------------------------------------------------------------------
-; Data.
-
-.bss
-window:         .res    256             ; Memory "window"
-
-.data
-
-; The MAP and COMMIT entries will actually call COPYFROM/COPYTO with
-; a pointer to the following data structure:
-
-dma_params:     .word   window          ; Host address
-                .byte   0               ; Offset in page
-curpage:        .word   $0000           ; Page
-                .word   .sizeof (window); # bytes to move, lo, hi
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-
-; Check for a DTV
-
-        ldx     #1
-        stx     $d03f
-        ldx     $d040
-        cpx     $d000
-        bne     @present
-        inc     $d000
-        cpx     $d040
-        beq     @present
-        dec     $d000
-
-; DTV not found
-
-        lda     #<EM_ERR_NO_DEVICE
-        ldx     #>EM_ERR_NO_DEVICE
-        rts
-
-@present:
-        ldx     #$FF
-        stx     curpage+1               ; Invalidate curpage
-        inx                             ; X = 0
-        txa                             ; A/X = EM_ERR_OK
-
-;       rts                             ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     #<PAGES
-        ldx     #>PAGES
-        rts
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x.  The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:    sta     curpage
-        stx     curpage+1               ; Remember the new page
-
-        lda     #<dma_params
-        ldx     #>dma_params
-        jsr     COPYFROM                ; Copy data into the window
-
-        lda     #<window
-        ldx     #>window                ; Return the window address
-done:   rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-
-USE:    sta     curpage
-        stx     curpage+1               ; Remember the page
-        lda     #<window
-        ldx     #>window                ; Return the window
-        rts
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT: lda     curpage+1               ; Do we have a page mapped?
-        bmi     done                    ; Jump if no page mapped
-
-        lda     #<dma_params
-        ldx     #>dma_params
-
-; Run into COPYTO
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO: sta     ptr1
-        stx     ptr1+1                  ; Save the pointer
-
-        ldx     #OP_COPYTO              ; Load the command
-        bne     transfer
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYFROM:
-        sta     ptr1
-        stx     ptr1+1                  ; Save the pointer
-
-        ldx     #OP_COPYFROM
-
-; DTV DMA transfer routine. Expects the command in X.
-; NOTE: We're using knowledge about field order in the EM_COPY struct here!
-
-transfer:
-        jsr     WAIT                    ; Wait until DMA is finished
-
-; Modulo disable
-
-        ldy     #$00
-        sty     $d31e
-
-; Setup the target address and the source and target steps. Y contains zero,
-; which is EM_COPY::BUF.
-
-        sty     $d307                   ; Source step high = 0
-        sty     $d309                   ; Dest step high = 0
-        lda     (ptr1),y
-        sta     $d303                   ; Dest address low
-        iny                             ; Y = 1
-        sty     $d306                   ; Source step low = 1
-        sty     $d308                   ; Dest step low = 1
-        lda     (ptr1),y
-        sta     $d304
-        lda     #$40                    ; Dest is always RAM, start at $00000
-        sta     $d305
-
-; Setup the source address. Incrementing Y will make it point to EM_COPY::OFFS.
-; We will allow page numbers higher than PAGES and map them to ROM. This will
-; allow reading the ROM by specifying a page starting with PAGES.
-
-        iny                             ; EM_COPY::OFFS
-        lda     (ptr1),y
-        sta     $d300
-        iny                             ; EM_COPY::PAGE
-        lda     (ptr1),y
-        sta     $d301
-        iny
-        lda     (ptr1),y
-        adc     #START_BANK             ; Carry clear here from WAIT
-        and     #$3f
-        cmp     #>PAGES+START_BANK      ; Valid range?
-        bcs     @L1                     ; Jump if no
-        ora     #$40                    ; Address RAM
-@L1:    sta     $d302
-
-; Length
-
-        iny                             ; EM_COPY::COUNT
-        lda     (ptr1),y
-        sta     $d30a
-        iny
-        lda     (ptr1),y
-        sta     $d30b
-
-; Start DMA
-
-        stx     $d31f
-
-; Wait until DMA is done
-
-WAIT:   lda     $d31f
-        lsr     a
-        bcs     WAIT
-        rts
-
diff --git a/libsrc/c64/get_ostype.s b/libsrc/c64/get_ostype.s
deleted file mode 100644 (file)
index cddb584..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-;
-; Stefan Haubenthal, Jul 10 2003
-;
-; C64DTV detection by
-; Marco van den Heuvel, 2010-01-28
-;
-; unsigned char get_ostype(void)
-;
-; $AA US
-; $64 PET-64
-; $43 SX-64
-; $03 EU_NEW
-; $00 EU_OLD
-; $FF C64DTV
-;
-
-        .export         _get_ostype
-
-.proc   _get_ostype
-
-        ldx     #0            ; Clear high byte
-
-        ldy     #1
-        sty     $d03f
-        ldy     $d040
-        cpy     $d000
-        bne     @c64dtv
-        inc     $d000
-        cpy     $d040
-        beq     @c64dtv
-
-; Normal C64
-
-        lda     $ff80
-        rts
-
-; C64 DTV
-
-@c64dtv:
-        stx     $d03f
-        lda     #$ff
-        rts
-.endproc
diff --git a/libsrc/c64/get_tv.s b/libsrc/c64/get_tv.s
deleted file mode 100644 (file)
index 4f46b8d..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-12-03
-;
-; unsigned char get_tv (void);
-; /* Return the video mode the machine is using */
-;
-
-        .include        "c64.inc"
-        .include        "get_tv.inc"
-
-;--------------------------------------------------------------------------
-; _get_tv
-
-.proc   _get_tv
-
-        lda     PALFLAG
-        ldx     #0
-        rts
-
-.endproc
diff --git a/libsrc/c64/irq.s b/libsrc/c64/irq.s
deleted file mode 100644 (file)
index 10d03aa..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-;
-; IRQ handling (C64 version)
-;
-
-        .export         initirq, doneirq
-        .import         callirq
-
-        .include        "c64.inc"
-
-; ------------------------------------------------------------------------
-
-.segment        "INIT"
-
-initirq:
-        lda     IRQVec
-        ldx     IRQVec+1
-        sta     IRQInd+1
-        stx     IRQInd+2
-        lda     #<IRQStub
-        ldx     #>IRQStub
-        jmp     setvec
-
-; ------------------------------------------------------------------------
-
-.code
-
-doneirq:
-        lda     IRQInd+1
-        ldx     IRQInd+2
-setvec: sei
-        sta     IRQVec
-        stx     IRQVec+1
-        cli
-        rts
-
-; ------------------------------------------------------------------------
-
-.segment        "LOWCODE"
-
-IRQStub:
-        cld                             ; Just to be sure
-        jsr     callirq                 ; Call the functions
-        jmp     IRQInd                  ; Jump to the saved IRQ vector
-
-; ------------------------------------------------------------------------
-
-.data
-
-IRQInd: jmp     $0000
diff --git a/libsrc/c64/joy/c64-hitjoy.s b/libsrc/c64/joy/c64-hitjoy.s
deleted file mode 100644 (file)
index a798100..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-;
-; DXS/HIT-4 Player joystick driver for the C64
-;
-; Groepaz/Hitmen, 2002-12-23
-; obviously based on Ullrichs driver :)
-;
-
-        .include "zeropage.inc"
-
-        .include "joy-kernel.inc"
-        .include "joy-error.inc"
-        .include "c64.inc"
-
-        .macpack generic
-        .macpack module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c64_hitjoy_joy
-
-; Driver signature
-
-        .byte   $6A, $6F, $79   ; "joy"
-        .byte   JOY_API_VERSION ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
-; Jump table.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READ
-        .addr   IRQ
-
-; ------------------------------------------------------------------------
-; Constants
-
-JOY_COUNT       = 4             ; Number of joysticks we support
-
-; ------------------------------------------------------------------------
-; Data. Written in the IRQ, read by the READ routine
-
-.bss
-
-temp3:  .byte 0
-temp4:  .byte 0
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #<JOY_ERR_OK
-        ldx     #>JOY_ERR_OK
-
-;       rts             ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-; ------------------------------------------------------------------------
-; IRQ entry point. Is called from the C layer as a subroutine in the
-; interrupt. The routine MUST return carry set if the interrupt has been
-; 'handled' - which means that the interrupt source is gone. Otherwise it
-; MUST return carry clear.
-
-IRQ:    ; cia 2 setup
-
-        ldy     #$00            ; port b direction
-        sty     $dd03           ; => input
-
-        sty     $dd05           ; cia2 timer a highbyte
-        sty     $dc05           ; cia1 timer a highbyte
-        iny
-        sty     $dd04           ; cia2 timer a lowbyte
-        sty     $dc04           ; cia1 timer a lowbyte
-
-        lda     #%00010001
-        sta     $dd0e           ; control register a
-                                ; timer: start
-                                ;        continous
-                                ;        forced load
-                                ; serial port: input
-
-        ; cia 1 setup
-        lda     #%01010001
-        sta     $dc0e           ; control register a
-                                ; timer: start
-                                ;        continous
-                                ;        forced load
-                                ; serial port: output
-
-        ; read directions 3
-        lda     $dd01           ;read cia 2 port b
-        and     #$0f
-        sta     temp3
-
-        ; read button 3
-        lda     $dd02           ;cia 2 port a
-        and     #%11111011      ;data direction
-        sta     $dd02           ;=> bit 2 input
-
-        lda     $dd00           ;read cia 2 p.A
-        and     #%00000100      ;check bit 2
-        asl     a
-        asl     a
-        ora     temp3
-        sta     temp3
-
-        ; read directions 4
-        lda     $dd01           ;read cia 2 port b
-        lsr     a
-        lsr     a
-        lsr     a
-        lsr     a
-        sta     temp4
-
-        ; read button 4
-        ldx     #$ff            ;serial data register
-        stx     $dc0c           ;=> writing $ff causes
-                                ;cia to output some
-                                ;count signals at cnt1
-
-        ldx     $dd0c           ;read cia 2 serial in
-        beq     fire            ;button press if zero
-
-        lda     temp4
-        ora     #%00010000
-        sta     temp4
-
-fire:
-        ; Default Value: $40/64 on PAL
-        ;                    $42/66 on NTSC
-        lda     #$41
-        sta     $dc05
-        ; Default Value: $25/37 on PAL
-        ;                    $95/149 on NTSC
-        lda     #0
-        sta     $dc04
-
-        ; We do never "handle" the interrupt, we use it just as a timer.
-        clc
-        rts
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:  lda     #<JOY_COUNT
-        ldx     #>JOY_COUNT
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
-
-READ:   tax            ; Joystick number into X
-        bne joy2
-
-; Read joystick 1
-
-joy1:   lda #$7F
-        sei
-        sta CIA1_PRA
-        lda CIA1_PRB
-        cli
-        and #$1F
-        eor #$1F
-        rts
-
-; Read joystick 2
-
-joy2:   dex
-        bne joy3
-
-        ; ldx   #0
-        lda     #$E0
-        ldy     #$FF
-        sei
-        sta     CIA1_DDRA
-        lda     CIA1_PRA
-        sty     CIA1_DDRA
-        cli
-        and     #$1F
-        eor     #$1F
-        rts
-
-        ; Read joystick 3
-
-joy3:   dex
-        bne     joy4
-
-        lda     temp3
-        eor     #$1F
-        rts
-
-        ; Read joystick 4
-
-joy4:   lda     temp4
-        eor     #$1F
-        ldx     #0
-        rts
-
diff --git a/libsrc/c64/joy/c64-numpad.s b/libsrc/c64/joy/c64-numpad.s
deleted file mode 100644 (file)
index 5f64642..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-;
-; Joystick driver using C128 number pad in 64 mode.
-; May be used multiple times when linked to the statically application.
-;
-; Stefan Haubenthal, 2004-01-26
-; Based on Ullrich von Bassewitz, 2002-12-20
-;
-
-        .include        "zeropage.inc"
-
-        .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-        .include        "c64.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c64_numpad_joy
-
-; Driver signature
-
-        .byte   $6A, $6F, $79           ; "joy"
-        .byte   JOY_API_VERSION         ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte   $02                     ; JOY_UP        "8"
-        .byte   $10                     ; JOY_DOWN      "2"
-        .byte   $20                     ; JOY_LEFT      "4"
-        .byte   $08                     ; JOY_RIGHT     "6"
-        .byte   $04                     ; JOY_FIRE      "5" ENTER
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
-; Jump table.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READ
-        .addr   0                       ; IRQ entry unused
-
-; ------------------------------------------------------------------------
-; Constants
-
-JOY_COUNT       = 1             ; Number of joysticks we support
-
-
-; ------------------------------------------------------------------------
-; Data.
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #JOY_ERR_OK             ; Assume we have a joystick
-        ldx     VIC_CLK_128             ; Test for a C128
-        cpx     #$FF
-        bne     @C128                   ; Jump if we have one
-        lda     #JOY_ERR_NO_DEVICE      ; No C128 -> no numpad
-@C128:  ldx     #0                      ; Set high byte
-
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:  lda     #JOY_COUNT
-        ldx     #0
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
-
-READ:   tax                     ; Clear high byte
-        lda     #$FD
-        ldy     #$FE
-        sei
-        sta     VIC_KBD_128
-        lda     CIA1_PRB
-        and     #%00110000
-        eor     #%00110000
-        lsr
-        lsr
-        sty     VIC_KBD_128
-        eor     CIA1_PRB
-        iny
-        sty     VIC_KBD_128     ; Reset to $FF
-        cli
-        and     #%11111110
-        eor     #%11111110
-        rts
-
diff --git a/libsrc/c64/joy/c64-ptvjoy.s b/libsrc/c64/joy/c64-ptvjoy.s
deleted file mode 100644 (file)
index 3185048..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-;
-; PTV-4 Player joystick driver for the C64
-;
-; Groepaz/Hitmen, 2002-12-23
-; obviously based on Ullrichs driver :)
-;
-
-        .include "zeropage.inc"
-
-        .include "joy-kernel.inc"
-        .include "joy-error.inc"
-        .include "c64.inc"
-
-        .macpack generic
-        .macpack module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c64_ptvjoy_joy
-
-; Driver signature
-
-        .byte   $6A, $6F, $79   ; "joy"
-        .byte   JOY_API_VERSION ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
-; Jump table.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READ
-        .addr   0                       ; IRQ entry unused
-
-; ------------------------------------------------------------------------
-; Constants
-
-JOY_COUNT       = 4             ; Number of joysticks we support
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #<JOY_ERR_OK
-        ldx     #>JOY_ERR_OK
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:
-        lda     #<JOY_COUNT
-        ldx     #>JOY_COUNT
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
-
-READ:   tax                     ; Joystick number into X
-        bne     joy2
-
-; Read joystick 1
-
-joy1:   lda     #$7F
-        sei
-        sta     CIA1_PRA
-        lda     CIA1_PRB
-        cli
-        and     #$1F
-        eor     #$1F
-        rts
-
-; Read joystick 2
-
-joy2:   dex
-        bne     joy3
-
-        lda     #$E0
-        ldy     #$FF
-        sei
-        sta     CIA1_DDRA
-        lda     CIA1_PRA
-        sty     CIA1_DDRA
-        cli
-        and     #$1F
-        eor     #$1F
-        rts
-
-; Read joystick 3
-
-joy3:
-        lda     #%10000000      ; cia 2 port B Data-Direction
-        sta     CIA2_DDRB       ; bit 7: out    bit 6-0: in
-
-        dex
-        bne     joy4
-
-        lda     #$80            ; cia 2 port B read/write
-        sta     CIA2_PRB        ; (output one at PB7)
-
-        lda     CIA2_PRB        ; cia 2 port B read/write
-        and     #$1f            ; get bit 4-0 (PB4-PB0)
-        eor     #$1f
-        rts
-
-; Read joystick 4
-
-joy4:   lda     #$00            ; cia 2 port B read/write
-        sta     CIA2_PRB        ; (output zero at PB7)
-
-        lda     CIA2_PRB        ; cia 2 port B read/write
-        and     #$0f            ; get bit 3-0 (PB3-PB0)
-        sta     tmp1            ; joy 4 directions
-
-        lda     CIA2_PRB        ; cia 2 port B read/write
-        and     #%00100000      ; get bit 5 (PB5)
-        lsr
-        ora     tmp1
-        eor     #$1f
-
-        ldx #0
-        rts
-
diff --git a/libsrc/c64/joy/c64-stdjoy.s b/libsrc/c64/joy/c64-stdjoy.s
deleted file mode 100644 (file)
index 2932c77..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-;
-; Standard joystick driver for the C64. May be used multiple times when linked
-; to the statically application.
-;
-; Ullrich von Bassewitz, 2002-12-20
-;
-
-        .include        "zeropage.inc"
-
-        .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-        .include        "c64.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c64_stdjoy_joy
-
-; Driver signature
-
-        .byte   $6A, $6F, $79           ; "joy"
-        .byte   JOY_API_VERSION         ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
-; Jump table.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READ
-        .addr   0                       ; IRQ entry unused
-
-; ------------------------------------------------------------------------
-; Constants
-
-JOY_COUNT       = 2             ; Number of joysticks we support
-
-
-; ------------------------------------------------------------------------
-; Data.
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #<JOY_ERR_OK
-        ldx     #>JOY_ERR_OK
-
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:
-        lda     #<JOY_COUNT
-        ldx     #>JOY_COUNT
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
-
-READ:   tax                     ; Joystick number into X
-        bne     joy2
-
-; Read joystick 1
-
-joy1:   lda     #$7F
-        sei
-        sta     CIA1_PRA
-        lda     CIA1_PRB
-        cli
-        and     #$1F
-        eor     #$1F
-        rts
-
-; Read joystick 2
-
-joy2:   ldx     #0
-        lda     #$E0
-        ldy     #$FF
-        sei
-        sta     CIA1_DDRA
-        lda     CIA1_PRA
-        sty     CIA1_DDRA
-        cli
-        and     #$1F
-        eor     #$1F
-        rts
-
-
diff --git a/libsrc/c64/joy_stat_stddrv.s b/libsrc/c64/joy_stat_stddrv.s
deleted file mode 100644 (file)
index 60a0630..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Address of the static standard joystick driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void joy_static_stddrv[];
-;
-
-        .export _joy_static_stddrv
-        .import _c64_stdjoy_joy
-
-.rodata
-
-_joy_static_stddrv := _c64_stdjoy_joy
diff --git a/libsrc/c64/joy_stddrv.s b/libsrc/c64/joy_stddrv.s
deleted file mode 100644 (file)
index 5845437..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Name of the standard joystick driver
-;
-; Ullrich von Bassewitz, 2002-12-21
-;
-; const char joy_stddrv[];
-;
-
-        .export _joy_stddrv
-
-.rodata
-
-_joy_stddrv:    .asciiz "c64-stdjoy.joy"
-
diff --git a/libsrc/c64/kbhit.s b/libsrc/c64/kbhit.s
deleted file mode 100644 (file)
index 17e5c6f..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; unsigned char kbhit (void);
-;
-
-        .export         _kbhit
-
-        .include        "c64.inc"
-
-
-.proc   _kbhit
-
-        ldx     #0              ; High byte of return is always zero
-        lda     KEY_COUNT       ; Get number of characters
-        beq     L9
-        lda     #1
-L9:     rts
-
-.endproc
-
-
-
diff --git a/libsrc/c64/kernal.s b/libsrc/c64/kernal.s
deleted file mode 100644 (file)
index a4eaad0..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-;
-; Ullrich von Bassewitz, 19.11.2002
-;
-; C64 kernal functions
-;
-
-        .export         CINT
-        .export         IOINIT
-        .export         RAMTAS
-        .export         RESTOR
-        .export         VECTOR
-        .export         SETMSG
-        .export         SECOND
-        .export         TKSA
-        .export         MEMTOP
-        .export         MEMBOT
-        .export         SCNKEY
-        .export         SETTMO
-        .export         ACPTR
-        .export         CIOUT
-        .export         UNTLK
-        .export         UNLSN
-        .export         LISTEN
-        .export         TALK
-        .export         READST
-        .export         SETLFS
-        .export         SETNAM
-        .export         OPEN
-        .export         CLOSE
-        .export         CHKIN
-        .export         CKOUT
-        .export         CLRCH
-        .export         BASIN
-        .export         BSOUT
-        .export         LOAD
-        .export         SAVE
-        .export         SETTIM
-        .export         RDTIM
-        .export         STOP
-        .export         GETIN
-        .export         CLALL
-        .export         UDTIM
-        .export         SCREEN
-        .export         IOBASE
-
-
-;-----------------------------------------------------------------------------
-; All functions are available in the kernal jump table
-
-CINT            = $FF81
-IOINIT          = $FF84
-RAMTAS          = $FF87
-RESTOR          = $FF8A
-VECTOR          = $FF8D
-SETMSG          = $FF90
-SECOND          = $FF93
-TKSA            = $FF96
-MEMTOP          = $FF99
-MEMBOT          = $FF9C
-SCNKEY          = $FF9F
-SETTMO          = $FFA2
-ACPTR           = $FFA5
-CIOUT           = $FFA8
-UNTLK           = $FFAB
-UNLSN           = $FFAE
-LISTEN          = $FFB1
-TALK            = $FFB4
-READST          = $FFB7
-SETLFS          = $FFBA
-SETNAM          = $FFBD
-OPEN            = $FFC0
-CLOSE           = $FFC3
-CHKIN           = $FFC6
-CKOUT           = $FFC9
-CLRCH           = $FFCC
-BASIN           = $FFCF
-BSOUT           = $FFD2
-LOAD            = $FFD5
-SAVE            = $FFD8
-SETTIM          = $FFDB
-RDTIM           = $FFDE
-STOP            = $FFE1
-GETIN           = $FFE4
-CLALL           = $FFE7
-UDTIM           = $FFEA
-SCREEN          = $FFED
-IOBASE          = $FFF3
-
diff --git a/libsrc/c64/kplot.s b/libsrc/c64/kplot.s
deleted file mode 100644 (file)
index 2d60fd4..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-12-09, 2009-09-27
-;
-; PLOT replacement function for the C64. The kernal function in the -02 kernals
-; does not set the pointer to the color RAM correctly, so we need to fix that.
-;
-
-        .export         PLOT
-
-
-.proc   PLOT
-
-        bcs     @L1
-        jsr     $FFF0                   ; Set cursor position
-        jmp     $EA24                   ; Set pointer to color RAM
-
-@L1:    jmp     $FFF0                   ; Get cursor position
-
-.endproc
-
-
diff --git a/libsrc/c64/libref.s b/libsrc/c64/libref.s
deleted file mode 100644 (file)
index 7a59236..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; 2013-05-31, Oliver Schmidt
-; 2013-06-11, Greg King
-;
-
-        .export         em_libref
-        .export         joy_libref
-        .export         ser_libref
-        .export         tgi_libref
-
-        .import         _exit
-
-em_libref       := _exit
-joy_libref      := _exit
-ser_libref      := _exit
-tgi_libref      := _exit
diff --git a/libsrc/c64/mainargs.s b/libsrc/c64/mainargs.s
deleted file mode 100644 (file)
index 1c9031e..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-; mainargs.s
-;
-; Ullrich von Bassewitz, 2003-03-07
-; Based on code from Stefan A. Haubenthal, <polluks@web.de>
-; 2003-05-18, Greg King
-; 2004-04-28, 2005-02-26, Ullrich von Bassewitz
-;
-; Scan a group of arguments that are in BASIC's input-buffer.
-; Build an array that points to the beginning of each argument.
-; Send, to main(), that array and the count of the arguments.
-;
-; Command-lines look like these lines:
-;
-; run
-; run : rem
-; run:rem arg1 " arg 2 is quoted "  arg3 "" arg5
-;
-; "run" and "rem" are entokenned; the args. are not.  Leading and trailing
-; spaces outside of quotes are ignored.
-;
-; TO-DO:
-; - The "file-name" might be a path-name; don't copy the directory-components.
-; - Add a control-character quoting mechanism.
-
-        .constructor    initmainargs, 24
-        .import         __argc, __argv
-
-        .include        "c64.inc"
-
-
-
-MAXARGS  = 10                   ; Maximum number of arguments allowed
-REM      = $8f                  ; BASIC token-code
-NAME_LEN = 16                   ; maximum length of command-name
-
-; Get possible command-line arguments. Goes into the special INIT segment,
-; which may be reused after the startup code is run
-
-.segment        "INIT"
-
-initmainargs:
-
-; Assume that the program was loaded, a moment ago, by the traditional LOAD
-; statement.  Save the "most-recent filename" as argument #0.
-; Because the buffer, that we're copying into, was zeroed out,
-; we don't need to add a NUL character.
-;
-        ldy     FNAM_LEN
-        cpy     #NAME_LEN + 1
-        bcc     L1
-        ldy     #NAME_LEN - 1   ; limit the length
-L0:     lda     (FNAM),y
-        sta     name,y
-L1:     dey
-        bpl     L0
-        inc     __argc          ; argc always is equal to, at least, 1
-
-; Find the "rem" token.
-;
-        ldx     #0
-L2:     lda     BASIC_BUF,x
-        beq     done            ; no "rem," no args.
-        inx
-        cmp     #REM
-        bne     L2
-        ldy     #1 * 2
-
-; Find the next argument
-
-next:   lda     BASIC_BUF,x
-        beq     done            ; End of line reached
-        inx
-        cmp     #' '            ; Skip leading spaces
-        beq     next            ;
-
-; Found start of next argument. We've incremented the pointer in X already, so
-; it points to the second character of the argument. This is useful since we
-; will check now for a quoted argument, in which case we will have to skip this
-; first character.
-
-found:  cmp     #'"'            ; Is the argument quoted?
-        beq     setterm         ; Jump if so
-        dex                     ; Reset pointer to first argument character
-        lda     #' '            ; A space ends the argument
-setterm:sta     term            ; Set end of argument marker
-
-; Now store a pointer to the argument into the next slot. Since the BASIC
-; input buffer is located at the start of a RAM page, no calculations are
-; necessary.
-
-        txa                     ; Get low byte
-        sta     argv,y          ; argv[y]= &arg
-        iny
-        lda     #>BASIC_BUF
-        sta     argv,y
-        iny
-        inc     __argc          ; Found another arg
-
-; Search for the end of the argument
-
-argloop:lda     BASIC_BUF,x
-        beq     done
-        inx
-        cmp     term
-        bne     argloop
-
-; We've found the end of the argument. X points one character behind it, and
-; A contains the terminating character. To make the argument a valid C string,
-; replace the terminating character by a zero.
-
-        lda     #0
-        sta     BASIC_BUF-1,x
-
-; Check if the maximum number of command line arguments is reached. If not,
-; parse the next one.
-
-        lda     __argc          ; Get low byte of argument count
-        cmp     #MAXARGS        ; Maximum number of arguments reached?
-        bcc     next            ; Parse next one if not
-
-; (The last vector in argv[] already is NULL.)
-
-done:   lda     #<argv
-        ldx     #>argv
-        sta     __argv
-        stx     __argv + 1
-        rts
-
-; These arrays are zeroed before initmainargs is called.
-; char  name[16+1];
-; char* argv[MAXARGS+1]={name};
-;
-.bss
-term:   .res    1
-name:   .res    NAME_LEN + 1
-
-.data
-argv:   .addr   name
-        .res    MAXARGS * 2
-
diff --git a/libsrc/c64/mcbdefault.s b/libsrc/c64/mcbdefault.s
deleted file mode 100644 (file)
index ffeed45..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-;
-; Default mouse callbacks for the C64
-;
-; Ullrich von Bassewitz, 2004-03-20
-;
-; All functions in this module should be interrupt safe, because they may
-; be called from an interrupt handler
-;
-
-        .export         _mouse_def_callbacks
-
-        .include        "mouse-kernel.inc"
-        .include        "c64.inc"
-
-        .macpack        generic
-
-; Sprite definitions. The first value can be changed to adjust the number
-; of the sprite used for the mouse. All others depend on this value.
-MOUSE_SPR       = 0                             ; Sprite used for the mouse
-MOUSE_SPR_MASK  = $01 .shl MOUSE_SPR            ; Positive mask
-MOUSE_SPR_NMASK = .lobyte(.not MOUSE_SPR_MASK)  ; Negative mask
-VIC_SPR_X       = (VIC_SPR0_X + 2*MOUSE_SPR)    ; Sprite X register
-VIC_SPR_Y       = (VIC_SPR0_Y + 2*MOUSE_SPR)    ; Sprite Y register
-
-; --------------------------------------------------------------------------
-; Hide the mouse pointer. Always called with interrupts disabled.
-
-hide:
-        lda     #MOUSE_SPR_NMASK
-        and     VIC_SPR_ENA
-        sta     VIC_SPR_ENA
-        rts
-
-; --------------------------------------------------------------------------
-; Show the mouse pointer. Always called with interrupts disabled.
-
-show:
-        lda     #MOUSE_SPR_MASK
-        ora     VIC_SPR_ENA
-        sta     VIC_SPR_ENA
-        ; Fall through
-
-; --------------------------------------------------------------------------
-; Prepare to move the mouse pointer. Always called with interrupts disabled.
-
-prep:
-        ; Fall through
-
-; --------------------------------------------------------------------------
-; Draw the mouse pointer. Always called with interrupts disabled.
-
-draw:
-        rts
-
-; --------------------------------------------------------------------------
-; Move the mouse pointer X position to the value in a/x. Always called with
-; interrupts disabled.
-
-movex:
-
-; Add the X correction and set the low byte. This frees A.
-
-        add     #24                     ; X correction
-        sta     VIC_SPR_X
-
-; Set the high byte
-
-        txa
-        adc     #0
-        bne     @L1                     ; Branch if high byte not zero
-        lda     VIC_SPR_HI_X            ; Get high X bits of all sprites
-        and     #MOUSE_SPR_NMASK        ; Clear high bit for sprite
-        sta     VIC_SPR_HI_X
-        rts
-
-@L1:    lda     VIC_SPR_HI_X            ; Get high X bits of all sprites
-        ora     #MOUSE_SPR_MASK         ; Set high bit for sprite
-        sta     VIC_SPR_HI_X
-        rts
-
-; --------------------------------------------------------------------------
-; Move the mouse pointer Y position to the value in a/x. Always called with
-; interrupts disabled.
-
-movey:
-        add     #50                     ; Y correction (first visible line)
-        sta     VIC_SPR_Y               ; Set Y position
-        rts
-
-; --------------------------------------------------------------------------
-; Callback structure
-
-.rodata
-
-_mouse_def_callbacks:
-        .addr   hide
-        .addr   show
-        .addr   prep
-        .addr   draw
-        .addr   movex
-        .addr   movey
diff --git a/libsrc/c64/mou/c64-1351.s b/libsrc/c64/mou/c64-1351.s
deleted file mode 100644 (file)
index a7d042c..0000000
+++ /dev/null
@@ -1,466 +0,0 @@
-;
-; Driver for the 1351 proportional mouse. Parts of the code are from
-; the Commodore 1351 mouse users guide.
-;
-; 2009-09-26, Ullrich von Bassewitz
-; 2010-02-06, Greg King
-;
-; The driver prevents the keyboard from interfering by changing the
-; keyboard's output port into an input port while the driver reads its
-; controller device.  That disables a wire that is left active by the
-; Kernal.  That wire is used by the STOP-key to break out of BASIC
-; programs -- CC65 programs don't use that feature.  The wire is shared
-; by these keys: STOP, "Q", Commodore, Space, "2", CTRL, Left-Arrow, and
-; "1".  I listed them, in order, from bit 7 over to bit 0.  The
-; rightmost five keys can look like joystick switches.
-;
-; The driver prevents the mouse/joystick from interfering by "blinding"
-; the keyboard scanner while any button/switch is active.  It changes
-; the input port into an output port, then stores all zero-bits in that
-; port's latch.  Reading from an output port sees the bitwise-AND of the
-; latch and the input signals.  Therefore, the scanner thinks that eight
-; keys are being pushed at the same time.  It doesn't know what to do
-; about that condition; so, it does nothing.  The driver lets the
-; scanner see normally, again, when no buttons/switches are active.
-;
-
-        .include        "zeropage.inc"
-        .include        "mouse-kernel.inc"
-        .include        "c64.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c64_1351_mou
-
-HEADER:
-
-; Driver signature
-
-        .byte   $6d, $6f, $75           ; "mou"
-        .byte   MOUSE_API_VERSION       ; Mouse driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   HIDE
-        .addr   SHOW
-        .addr   SETBOX
-        .addr   GETBOX
-        .addr   MOVE
-        .addr   BUTTONS
-        .addr   POS
-        .addr   INFO
-        .addr   IOCTL
-        .addr   IRQ
-
-; Mouse driver flags
-
-        .byte   MOUSE_FLAG_LATE_IRQ
-
-; Callback table, set by the kernel before INSTALL is called
-
-CHIDE:  jmp     $0000                   ; Hide the cursor
-CSHOW:  jmp     $0000                   ; Show the cursor
-CPREP:  jmp     $0000                   ; Prepare to move the cursor
-CDRAW:  jmp     $0000                   ; Draw the cursor
-CMOVEX: jmp     $0000                   ; Move the cursor to X coord
-CMOVEY: jmp     $0000                   ; Move the cursor to Y coord
-
-
-;----------------------------------------------------------------------------
-; Constants
-
-SCREEN_HEIGHT   = YSIZE * 8 - 1         ; (origin is zero)
-SCREEN_WIDTH    = XSIZE * 8 - 1
-
-;----------------------------------------------------------------------------
-; Global variables. The bounding box values are sorted so that they can be
-; written with the least effort in the SETBOX and GETBOX routines, so don't
-; reorder them.
-
-.bss
-
-Vars:
-OldPotX:        .res    1               ; Old hw counter values
-OldPotY:        .res    1
-
-XPos:           .res    2               ; Current mouse position, X
-YPos:           .res    2               ; Current mouse position, Y
-XMin:           .res    2               ; X1 value of bounding box
-YMin:           .res    2               ; Y1 value of bounding box
-XMax:           .res    2               ; X2 value of bounding box
-YMax:           .res    2               ; Y2 value of bounding box
-Buttons:        .res    1               ; button status bits
-
-OldValue:       .res    1               ; Temp for MoveCheck routine
-NewValue:       .res    1               ; Temp for MoveCheck routine
-
-.rodata
-
-; Default values for above variables
-; (We use ".proc" because we want to define both a label and a scope.)
-
-.proc   DefVars
-        .byte   0, 0                    ; OldPotX/OldPotY
-        .word   SCREEN_WIDTH/2          ; XPos
-        .word   SCREEN_HEIGHT/2         ; YPos
-        .word   0                       ; XMin
-        .word   0                       ; YMin
-        .word   SCREEN_WIDTH            ; XMax
-        .word   SCREEN_HEIGHT           ; YMax
-        .byte   %00000000               ; Buttons
-.endproc
-
-.code
-
-;----------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present.
-; Must return an MOUSE_ERR_xx code in a/x.
-
-INSTALL:
-
-; Initialize variables. Just copy the default stuff over
-
-        ldx     #.sizeof(DefVars)-1
-@L1:    lda     DefVars,x
-        sta     Vars,x
-        dex
-        bpl     @L1
-
-; Be sure the mouse cursor is invisible and at the default location. We
-; need to do that here, because our mouse interrupt handler doesn't set the
-; mouse position if it hasn't changed.
-
-        sei
-        jsr     CHIDE
-        lda     XPos
-        ldx     XPos+1
-        jsr     CMOVEX
-        lda     YPos
-        ldx     YPos+1
-        jsr     CMOVEY
-        cli
-
-; Done, return zero (= MOUSE_ERR_OK)
-
-        ldx     #$00
-        txa
-        rts
-
-;----------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; No return code required (the driver is removed from memory on return).
-
-UNINSTALL       = HIDE                  ; Hide cursor on exit
-
-;----------------------------------------------------------------------------
-; HIDE routine. Is called to hide the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently visible and should get hidden. For most drivers,
-; no special action is required besides hiding the mouse cursor.
-; No return code required.
-
-HIDE:   sei
-        jsr     CHIDE
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SHOW routine. Is called to show the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently hidden and should become visible. For most drivers,
-; no special action is required besides enabling the mouse cursor.
-; No return code required.
-
-SHOW:   sei
-        jsr     CSHOW
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SETBOX: Set the mouse bounding box. The parameters are passed as they come
-; from the C program, that is, a pointer to a mouse_box struct in a/x.
-; No checks are done if the mouse is currently inside the box, this is the job
-; of the caller. It is not necessary to validate the parameters, trust the
-; caller and save some code here. No return code required.
-
-SETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX)-1
-        sei
-
-@L1:    lda     (ptr1),y
-        sta     XMin,y
-        dey
-        bpl     @L1
-
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; GETBOX: Return the mouse bounding box. The parameters are passed as they
-; come from the C program, that is, a pointer to a mouse_box struct in a/x.
-
-GETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX)-1
-@L1:    lda     XMin,y
-        sta     (ptr1),y
-        dey
-        bpl     @L1
-        rts
-
-;----------------------------------------------------------------------------
-; MOVE: Move the mouse to a new position. The position is passed as it comes
-; from the C program, that is: X on the stack and Y in a/x. The C wrapper will
-; remove the parameter from the stack on return.
-; No checks are done if the new position is valid (within the bounding box or
-; the screen). No return code required.
-;
-
-MOVE:   sei                             ; No interrupts
-
-        sta     YPos
-        stx     YPos+1                  ; New Y position
-        jsr     CMOVEY                  ; Set it
-
-        ldy     #$01
-        lda     (sp),y
-        sta     XPos+1
-        tax
-        dey
-        lda     (sp),y
-        sta     XPos                    ; New X position
-
-        jsr     CMOVEX                  ; Move the cursor
-
-        cli                             ; Allow interrupts
-        rts
-
-;----------------------------------------------------------------------------
-; BUTTONS: Return the button mask in a/x.
-
-BUTTONS:
-        lda     Buttons
-        ldx     #0
-        and     #$1F
-        rts
-
-;----------------------------------------------------------------------------
-; POS: Return the mouse position in the MOUSE_POS struct pointed to by ptr1.
-; No return code required.
-
-POS:    ldy     #MOUSE_POS::XCOORD      ; Structure offset
-
-        sei                             ; Disable interrupts
-        lda     XPos                    ; Transfer the position
-        sta     (ptr1),y
-        lda     XPos+1
-        iny
-        sta     (ptr1),y
-        lda     YPos
-        iny
-        sta     (ptr1),y
-        lda     YPos+1
-        cli                             ; Enable interrupts
-
-        iny
-        sta     (ptr1),y                ; Store last byte
-
-        rts                             ; Done
-
-;----------------------------------------------------------------------------
-; INFO: Returns mouse position and current button mask in the MOUSE_INFO
-; struct pointed to by ptr1. No return code required.
-;
-; We're cheating here to keep the code smaller: The first fields of the
-; mouse_info struct are identical to the mouse_pos struct, so we will just
-; call _mouse_pos to initialize the struct pointer and fill the position
-; fields.
-
-INFO:   jsr     POS
-
-; Fill in the button state
-
-        jsr     BUTTONS                 ; Will not touch ptr1
-        ldy     #MOUSE_INFO::BUTTONS
-        sta     (ptr1),y
-
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
-; specific data in ptr1, and the ioctl code in A.
-; Must return an error code in a/x.
-;
-
-IOCTL:  lda     #<MOUSE_ERR_INV_IOCTL     ; We don't support ioclts for now
-        ldx     #>MOUSE_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; IRQ: Irq handler entry point. Called as a subroutine but in IRQ context
-; (so be careful). The routine MUST return carry set if the interrupt has been
-; 'handled' - which means that the interrupt source is gone. Otherwise it
-; MUST return carry clear.
-;
-
-IRQ:    jsr     CPREP
-
-; Record the state of the buttons.
-; Avoid crosstalk between the keyboard and the mouse.
-
-        ldy     #%00000000              ; Set ports A and B to input
-        sty     CIA1_DDRB
-        sty     CIA1_DDRA               ; Keyboard won't look like mouse
-        lda     CIA1_PRB                ; Read Control-Port 1
-        dec     CIA1_DDRA               ; Set port A back to output
-        eor     #%11111111              ; Bit goes up when button goes down
-        sta     Buttons
-        beq     @L0                     ;(bze)
-        dec     CIA1_DDRB               ; Mouse won't look like keyboard
-        sty     CIA1_PRB                ; Set "all keys pushed"
-
-@L0:    lda     SID_ADConv1             ; Get mouse X movement
-        ldy     OldPotX
-        jsr     MoveCheck               ; Calculate movement vector
-
-; Skip processing if nothing has changed
-
-        bcc     @SkipX
-        sty     OldPotX
-
-; Calculate the new X coordinate (--> a/y)
-
-        add     XPos
-        tay                             ; Remember low byte
-        txa
-        adc     XPos+1
-        tax
-
-; Limit the X coordinate to the bounding box
-
-        cpy     XMin
-        sbc     XMin+1
-        bpl     @L1
-        ldy     XMin
-        ldx     XMin+1
-        jmp     @L2
-@L1:    txa
-
-        cpy     XMax
-        sbc     XMax+1
-        bmi     @L2
-        ldy     XMax
-        ldx     XMax+1
-@L2:    sty     XPos
-        stx     XPos+1
-
-; Move the mouse pointer to the new X pos
-
-        tya
-        jsr     CMOVEX
-
-; Calculate the Y movement vector
-
-@SkipX: lda     SID_ADConv2             ; Get mouse Y movement
-        ldy     OldPotY
-        jsr     MoveCheck               ; Calculate movement
-
-; Skip processing if nothing has changed
-
-        bcc     @SkipY
-        sty     OldPotY
-
-; Calculate the new Y coordinate (--> a/y)
-
-        sta     OldValue
-        lda     YPos
-        sub     OldValue
-        tay
-        stx     OldValue
-        lda     YPos+1
-        sbc     OldValue
-        tax
-
-; Limit the Y coordinate to the bounding box
-
-        cpy     YMin
-        sbc     YMin+1
-        bpl     @L3
-        ldy     YMin
-        ldx     YMin+1
-        jmp     @L4
-@L3:    txa
-
-        cpy     YMax
-        sbc     YMax+1
-        bmi     @L4
-        ldy     YMax
-        ldx     YMax+1
-@L4:    sty     YPos
-        stx     YPos+1
-
-; Move the mouse pointer to the new Y pos
-
-        tya
-        jsr     CMOVEY
-
-; Done
-
-@SkipY: jsr     CDRAW
-        clc                             ; Interrupt not "handled"
-        rts
-
-; --------------------------------------------------------------------------
-;
-; Move check routine, called for both coordinates.
-;
-; Entry:        y = old value of pot register
-;               a = current value of pot register
-; Exit:         y = value to use for old value
-;               x/a = delta value for position
-;
-
-MoveCheck:
-        sty     OldValue
-        sta     NewValue
-        ldx     #$00
-
-        sub     OldValue                ; a = mod64 (new - old)
-        and     #%01111111
-        cmp     #%01000000              ; if (a > 0)
-        bcs     @L1                     ;
-        lsr     a                       ;   a /= 2;
-        beq     @L2                     ;   if (a != 0)
-        ldy     NewValue                ;     y = NewValue
-        sec
-        rts                             ;   return
-
-@L1:    ora     #%11000000              ; else, "or" in high-order bits
-        cmp     #$FF                    ; if (a != -1)
-        beq     @L2
-        sec
-        ror     a                       ;   a /= 2
-        dex                             ;   high byte = -1 (X = $FF)
-        ldy     NewValue
-        sec
-        rts
-
-@L2:    txa                             ; A = $00
-        clc
-        rts
-
diff --git a/libsrc/c64/mou/c64-inkwell.s b/libsrc/c64/mou/c64-inkwell.s
deleted file mode 100644 (file)
index 9c876a7..0000000
+++ /dev/null
@@ -1,445 +0,0 @@
-;
-; Driver for the Inkwell Systems 170-C and 184-C lightpens.
-;
-; 2014-09-10, Greg King
-;
-
-        .include        "zeropage.inc"
-        .include        "mouse-kernel.inc"
-        .include        "c64.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table.
-
-        module_header   _c64_inkwell_mou
-
-HEADER:
-
-; Driver signature
-
-        .byte   $6d, $6f, $75           ; ASCII "mou"
-        .byte   MOUSE_API_VERSION       ; Mouse driver API version number
-
-; Library reference
-
-LIBREF: .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   HIDE
-        .addr   SHOW
-        .addr   SETBOX
-        .addr   GETBOX
-        .addr   MOVE
-        .addr   BUTTONS
-        .addr   POS
-        .addr   INFO
-        .addr   IOCTL
-        .addr   IRQ
-
-; Mouse driver flags
-
-        .byte   MOUSE_FLAG_EARLY_IRQ
-
-; Callback table, set by the kernel before INSTALL is called.
-
-CHIDE:  jmp     $0000                   ; Hide the cursor
-CSHOW:  jmp     $0000                   ; Show the cursor
-CPREP:  jmp     $0000                   ; Prepare to move the cursor
-CDRAW:  jmp     $0000                   ; Draw the cursor
-CMOVEX: jmp     $0000                   ; Move the cursor to X co-ord.
-CMOVEY: jmp     $0000                   ; Move the cursor to Y co-ord.
-
-
-;----------------------------------------------------------------------------
-; Constants
-
-SCREEN_WIDTH    = XSIZE * 8
-SCREEN_HEIGHT   = YSIZE * 8
-
-
-;----------------------------------------------------------------------------
-; Global variables. The bounding box values are sorted so that they can be
-; written with the least effort in the SETBOX and GETBOX routines; so, don't
-; re-order them.
-
-.rodata
-
-; Default values for below variables
-; (We use ".proc" because we want to define both a label and a scope.)
-
-.proc   DefVars
-        .word   0                       ; XMin
-        .word   0                       ; YMin
-        .word   SCREEN_WIDTH - 1        ; XMax
-        .word   SCREEN_HEIGHT - 1       ; YMax
-        .byte   %00000000               ; Buttons
-.endproc
-
-.bss
-
-Vars:
-XMin:           .res    2               ; X1 value of bounding box
-YMin:           .res    2               ; Y1 value of bounding box
-XMax:           .res    2               ; X2 value of bounding box
-YMax:           .res    2               ; Y2 value of bounding box
-Buttons:        .res    1               ; Button status bits
-
-XPos:           .res    2               ; Current lightpen position, X
-YPos:           .res    2               ; Current lightpen position, Y
-
-OldPenX:        .res    1               ; Previous HW-counter values
-OldPenY:        .res    1
-
-.data
-
-; Default Inkwell calibration.
-; The first number is the width of the left border;
-; the second number is the actual calibration value.
-; See a comment below (at "Calculate the new X co-ordinate")
-; for the reason for the third number.
-
-XOffset:        .byte   (24 + 24) / 2   ; x-offset
-
-; Jump to a function that puts a new calibration value into XOffset.
-Calibrate:      jmp     $0000
-
-
-.code
-
-;----------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present.
-; Must return a MOUSE_ERR_xx code in .XA.
-
-INSTALL:
-
-; Initiate variables. Just copy the default stuff over.
-
-        ldx     #.sizeof (DefVars) - 1
-@L0:    lda     DefVars,x
-        sta     Vars,x
-        dex
-        bpl     @L0
-
-        ldx     VIC_LPEN_X
-        ldy     VIC_LPEN_Y
-        stx     OldPenX
-        sty     OldPenY
-
-; Call a calibration function through the library-reference.
-
-        lda     LIBREF
-        ldx     LIBREF+1
-        sta     ptr1                    ; Point to mouse_adjuster
-        stx     ptr1+1
-        ldy     #1
-        lda     (ptr1),y
-        bze     @L1                     ; Don't call pointer if it's NULL
-        sta     Calibrate+2             ; Point to function
-        dey
-        lda     (ptr1),y
-        sta     Calibrate+1
-        lda     #<XOffset               ; Function will set this variable
-        ldx     #>XOffset
-        jsr     Calibrate
-
-; Be sure that the lightpen cursor is invisible and at the default location.
-; It needs to be done here because the lightpen interrupt handler doesn't
-; set the lightpen position if it hasn't changed.
-
-@L1:    sei
-        jsr     CHIDE
-
-        lda     #<(SCREEN_HEIGHT / 2)
-        ldx     #>(SCREEN_HEIGHT / 2)
-        jsr     MoveY
-        lda     #<(SCREEN_WIDTH / 2)
-        ldx     #>(SCREEN_WIDTH / 2)
-        jsr     MoveX
-        cli
-
-; Done, return zero.
-
-        lda     #MOUSE_ERR_OK
-        tax
-        rts
-
-;----------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; No return code required (the driver is removed from memory on return).
-
-UNINSTALL       := HIDE                 ; Hide cursor on exit
-
-;----------------------------------------------------------------------------
-; HIDE routine. Is called to hide the lightpen pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is called only
-; if the mouse is currently visible, and should get hidden. For most drivers,
-; no special action is required besides hiding the lightpen cursor.
-; No return code required.
-
-HIDE:   sei
-        jsr     CHIDE
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SHOW routine. Is called to show the lightpen pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is called only
-; if the mouse is currently hidden, and should become visible. For most drivers,
-; no special action is required besides enabling the lightpen cursor.
-; No return code required.
-
-SHOW:   sei
-        jsr     CSHOW
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SETBOX: Set the lightpen bounding box. The parameters are passed as they come
-; from the C program, that is, a pointer to a mouse_box struct in .XA.
-; No checks are done if the lightpen is currently inside the box, that is the job
-; of the caller. It is not necessary to validate the parameters; trust the
-; caller; and, save some code here. No return code required.
-
-SETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX) - 1
-        sei
-
-@L1:    lda     (ptr1),y
-        sta     XMin,y
-        dey
-        bpl     @L1
-
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; GETBOX: Return the lightpen bounding box. The parameters are passed as they
-; come from the C program, that is, a pointer to a mouse_box struct in .XA.
-
-GETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX) - 1
-@L1:    lda     XMin,y
-        sta     (ptr1),y
-        dey
-        bpl     @L1
-        rts
-
-;----------------------------------------------------------------------------
-; MOVE: Move the mouse to a new position. The position is passed as it comes
-; from the C program, that is: X on the stack and Y in .XA. The C wrapper will
-; remove the parameter from the stack on return.
-; No checks are done if the new position is valid (within the bounding box or
-; the screen). No return code required.
-;
-
-MOVE:   sei                             ; No interrupts
-        jsr     MoveY
-
-        ldy     #$01
-        lda     (sp),y
-        tax
-        dey
-        lda     (sp),y
-        jsr     MoveX                   ; Move the cursor
-
-        cli                             ; Allow interrupts
-        rts
-
-;----------------------------------------------------------------------------
-; BUTTONS: Return the button mask in .XA.
-
-BUTTONS:
-        lda     Buttons
-        ldx     #>$0000
-
-; Make the lightpen buttons look like a 1351 mouse.
-
-        asl     a
-        asl     SID_ADConv2             ; PotY
-        rol     a
-        eor     #MOUSE_BTN_RIGHT
-        and     #MOUSE_BTN_LEFT | MOUSE_BTN_RIGHT
-        rts
-
-;----------------------------------------------------------------------------
-; POS: Return the lightpen position in the MOUSE_POS struct pointed to by ptr1.
-; No return code required.
-
-POS:    ldy     #MOUSE_POS::XCOORD      ; Structure offset
-
-        sei                             ; Disable interrupts
-        lda     XPos                    ; Transfer the position
-        sta     (ptr1),y
-        lda     XPos+1
-        iny
-        sta     (ptr1),y
-        lda     YPos
-        iny
-        sta     (ptr1),y
-        lda     YPos+1
-        cli                             ; Enable interrupts
-
-        iny
-        sta     (ptr1),y                ; Store last byte
-        rts
-
-;----------------------------------------------------------------------------
-; INFO: Returns lightpen position and current button mask in the MOUSE_INFO
-; struct pointed to by ptr1. No return code required.
-;
-; We're cheating here, to keep the code smaller: The first fields of the
-; mouse_info struct are identical to the mouse_pos struct; so, we'll just
-; call _mouse_pos to initiate the struct pointer, and fill the position
-; fields.
-
-INFO:   jsr     POS
-
-; Fill in the button state
-
-        jsr     BUTTONS                 ; Will not touch ptr1
-        ldy     #MOUSE_INFO::BUTTONS
-        sta     (ptr1),y
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver-defined entry point. The wrapper will pass a pointer to ioctl-
-; specific data in ptr1, and the ioctl code in .A.
-; Must return an error code in .XA.
-;
-
-IOCTL:  lda     #<MOUSE_ERR_INV_IOCTL     ; We don't support ioctls, for now
-        ldx     #>MOUSE_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; IRQ: IRQ handler entry point. Called as a subroutine, but in the IRQ context
-; (so, be careful). The routine MUST return carry set if the interrupt has been
-; 'handled' -- which means that the interrupt source is gone. Otherwise, it
-; MUST return carry clear.
-;
-
-IRQ:    jsr     CPREP
-
-; Record the state of the buttons.
-; Try to avoid crosstalk between the keyboard and the lightpen.
-
-        ldy     #%00000000              ; Set ports A and B to input
-        sty     CIA1_DDRB
-        sty     CIA1_DDRA               ; Keyboard won't look like buttons
-        lda     CIA1_PRB                ; Read Control-Port 1
-        dec     CIA1_DDRA               ; Set port A back to output
-        eor     #%11111111              ; Bit goes up when button goes down
-        sta     Buttons
-        bze     @L0
-        lda     #%11101111              ; (Don't change bit that feeds VIC-II)
-        sta     CIA1_DDRB               ; Buttons won't look like keyboard
-        sty     CIA1_PRB                ; Set "all keys pushed"
-
-; Read the VIC-II lightpen registers.
-
-@L0:    lda     VIC_LPEN_Y
-        cmp     OldPenY
-
-; Skip processing if nothing has changed.
-
-        beq     @SkipY
-        sta     OldPenY
-
-; Subtract the height of the top border, so that the lightpen co-ordinate
-; will match the TGI co-ordinate.
-
-        sub     #50
-        tay                             ; Remember low byte
-        ldx     #>$0000
-
-; Limit the Y co-ordinate to the bounding box.
-
-        txa
-        cpy     YMin
-        sbc     YMin+1
-        bpl     @L3
-        ldy     YMin
-        ldx     YMin+1
-        jmp     @L4
-
-@L3:    txa
-        cpy     YMax
-        sbc     YMax+1
-        bmi     @L4
-        ldy     YMax
-        ldx     YMax+1
-
-@L4:    tya
-        jsr     MoveY
-
-@SkipY: lda     VIC_LPEN_X
-        cmp     OldPenX
-
-; Skip processing if nothing has changed.
-
-        beq     @SkipX
-        sta     OldPenX
-
-; Adjust the value by the calibration offset.
-
-        sub     XOffset
-
-; Calculate the new X co-ordinate.
-; The VIC-II register is eight bits; but, the screen co-ordinate is nine bits.
-; Therefore, the VIC-II number is doubled. Then, it points to every other pixel;
-; but, it can reach across the screen.
-
-        asl     a
-        tay                             ; Remember low byte
-        lda     #>$0000
-        rol     a
-        tax                             ; Remember high byte
-
-; Limit the X co-ordinate to the bounding box.
-
-        cpy     XMin
-        sbc     XMin+1
-        bpl     @L1
-        ldy     XMin
-        ldx     XMin+1
-        jmp     @L2
-
-@L1:    txa
-        cpy     XMax
-        sbc     XMax+1
-        bmi     @L2
-        ldy     XMax
-        ldx     XMax+1
-
-@L2:    tya
-        jsr     MoveX
-
-; Done
-
-@SkipX: jsr     CDRAW
-        clc                             ; Interrupt not "handled"
-        rts
-
-; Move the lightpen pointer to the new Y pos.
-
-MoveY:  sta     YPos
-        stx     YPos+1
-        jmp     CMOVEY
-
-; Move the lightpen pointer to the new X pos.
-
-MoveX:  sta     XPos
-        stx     XPos+1
-        jmp     CMOVEX
diff --git a/libsrc/c64/mou/c64-joy.s b/libsrc/c64/mou/c64-joy.s
deleted file mode 100644 (file)
index f2a5010..0000000
+++ /dev/null
@@ -1,450 +0,0 @@
-;
-; Driver for a "joystick mouse".
-;
-; Ullrich von Bassewitz, 2004-03-29, 2009-09-26
-; 2014-03-17, Greg King
-;
-; The driver prevents the keyboard from interfering by changing the
-; keyboard's output port into an input port while the driver reads its
-; controller device.  That disables a wire that is left active by the
-; Kernal.  That wire is used by the STOP-key to break out of BASIC
-; programs -- CC65 programs don't use that feature.  The wire is shared
-; by these keys: STOP, "Q", Commodore, Space, "2", CTRL, Left-Arrow, and
-; "1".  I listed them, in order, from bit 7 over to bit 0.  The
-; rightmost five keys can look like joystick switches.
-;
-; The driver prevents the mouse/joystick from interfering by "blinding"
-; the keyboard scanner while any button/switch is active.  It changes
-; the input port into an output port, then stores all zero-bits in that
-; port's latch.  Reading from an output port sees the bitwise-AND of the
-; latch and the input signals.  Therefore, the scanner thinks that eight
-; keys are being pushed at the same time.  It doesn't know what to do
-; about that condition; so, it does nothing.  The driver lets the
-; scanner see normally, again, when no buttons/switches are active.
-;
-
-        .include        "zeropage.inc"
-        .include        "mouse-kernel.inc"
-        .include        "c64.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c64_joy_mou
-
-HEADER:
-
-; Driver signature
-
-        .byte   $6d, $6f, $75           ; "mou"
-        .byte   MOUSE_API_VERSION       ; Mouse driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   HIDE
-        .addr   SHOW
-        .addr   SETBOX
-        .addr   GETBOX
-        .addr   MOVE
-        .addr   BUTTONS
-        .addr   POS
-        .addr   INFO
-        .addr   IOCTL
-        .addr   IRQ
-
-; Mouse driver flags
-
-        .byte   MOUSE_FLAG_LATE_IRQ
-
-; Callback table, set by the kernel before INSTALL is called
-
-CHIDE:  jmp     $0000                   ; Hide the cursor
-CSHOW:  jmp     $0000                   ; Show the cursor
-CPREP:  jmp     $0000                   ; Prepare to move the cursor
-CDRAW:  jmp     $0000                   ; Draw the cursor
-CMOVEX: jmp     $0000                   ; Move the cursor to X coord
-CMOVEY: jmp     $0000                   ; Move the cursor to Y coord
-
-
-;----------------------------------------------------------------------------
-; Constants
-
-SCREEN_HEIGHT   = 200
-SCREEN_WIDTH    = 320
-
-.enum   JOY
-        UP      = $01
-        DOWN    = $02
-        LEFT    = $04
-        RIGHT   = $08
-        FIRE    = $10
-.endenum
-
-;----------------------------------------------------------------------------
-; Global variables. The bounding box values are sorted so that they can be
-; written with the least effort in the SETBOX and GETBOX routines, so don't
-; reorder them.
-
-.bss
-
-Vars:
-YPos:           .res    2               ; Current mouse position, Y
-XPos:           .res    2               ; Current mouse position, X
-XMin:           .res    2               ; X1 value of bounding box
-YMin:           .res    2               ; Y1 value of bounding box
-XMax:           .res    2               ; X2 value of bounding box
-YMax:           .res    2               ; Y2 value of bounding box
-Buttons:        .res    1               ; Button mask
-
-; Temporary value used in the int handler
-
-Temp:           .res    1
-
-.rodata
-
-; Default values for above variables
-; (We use ".proc" because we want to define both a label and a scope.)
-
-.proc   DefVars
-        .word   SCREEN_HEIGHT/2         ; YPos
-        .word   SCREEN_WIDTH/2          ; XPos
-        .word   0                       ; XMin
-        .word   0                       ; YMin
-        .word   SCREEN_WIDTH - 1        ; XMax
-        .word   SCREEN_HEIGHT - 1       ; YMax
-        .byte   0                       ; Buttons
-.endproc
-
-.code
-
-;----------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present.
-; Must return an MOUSE_ERR_xx code in a/x.
-
-INSTALL:
-
-; Initialize variables. Just copy the default stuff over
-
-        ldx     #.sizeof(DefVars)-1
-@L1:    lda     DefVars,x
-        sta     Vars,x
-        dex
-        bpl     @L1
-
-; Be sure the mouse cursor is invisible and at the default location. We
-; need to do that here, because our mouse interrupt handler doesn't set the
-; mouse position if it hasn't changed.
-
-        sei
-        jsr     CHIDE
-        lda     XPos
-        ldx     XPos+1
-        jsr     CMOVEX
-        lda     YPos
-        ldx     YPos+1
-        jsr     CMOVEY
-        cli
-
-; Done, return zero (= MOUSE_ERR_OK)
-
-        ldx     #$00
-        txa
-        rts
-
-;----------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; No return code required (the driver is removed from memory on return).
-
-UNINSTALL       = HIDE                  ; Hide cursor on exit
-
-;----------------------------------------------------------------------------
-; HIDE routine. Is called to hide the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently visible and should get hidden. For most drivers,
-; no special action is required besides hiding the mouse cursor.
-; No return code required.
-
-HIDE:   sei
-        jsr     CHIDE
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SHOW routine. Is called to show the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently hidden and should become visible. For most drivers,
-; no special action is required besides enabling the mouse cursor.
-; No return code required.
-
-SHOW:   sei
-        jsr     CSHOW
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SETBOX: Set the mouse bounding box. The parameters are passed as they come
-; from the C program, that is, a pointer to a mouse_box struct in a/x.
-; No checks are done if the mouse is currently inside the box, this is the job
-; of the caller. It is not necessary to validate the parameters, trust the
-; caller and save some code here. No return code required.
-
-SETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX)-1
-        sei
-
-@L1:    lda     (ptr1),y
-        sta     XMin,y
-        dey
-        bpl     @L1
-
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; GETBOX: Return the mouse bounding box. The parameters are passed as they
-; come from the C program, that is, a pointer to a mouse_box struct in a/x.
-
-GETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX)-1
-
-@L1:    lda     XMin,y
-        sta     (ptr1),y
-        dey
-        bpl     @L1
-
-        rts
-
-;----------------------------------------------------------------------------
-; MOVE: Move the mouse to a new position. The position is passed as it comes
-; from the C program, that is: X on the stack and Y in a/x. The C wrapper will
-; remove the parameter from the stack on return.
-; No checks are done if the new position is valid (within the bounding box or
-; the screen). No return code required.
-;
-
-MOVE:   sei                             ; No interrupts
-
-        sta     YPos
-        stx     YPos+1                  ; New Y position
-        jsr     CMOVEY                  ; Set it
-
-        ldy     #$01
-        lda     (sp),y
-        sta     XPos+1
-        tax
-        dey
-        lda     (sp),y
-        sta     XPos                    ; New X position
-
-        jsr     CMOVEX                  ; Move the cursor
-
-        cli                             ; Allow interrupts
-        rts
-
-;----------------------------------------------------------------------------
-; BUTTONS: Return the button mask in a/x.
-
-BUTTONS:
-        lda     Buttons
-        ldx     #$00
-        rts
-
-;----------------------------------------------------------------------------
-; POS: Return the mouse position in the MOUSE_POS struct pointed to by ptr1.
-; No return code required.
-
-POS:    ldy     #MOUSE_POS::XCOORD      ; Structure offset
-
-        sei                             ; Disable interrupts
-        lda     XPos                    ; Transfer the position
-        sta     (ptr1),y
-        lda     XPos+1
-        iny
-        sta     (ptr1),y
-        lda     YPos
-        iny
-        sta     (ptr1),y
-        lda     YPos+1
-        cli                             ; Enable interrupts
-
-        iny
-        sta     (ptr1),y                ; Store last byte
-
-        rts                             ; Done
-
-;----------------------------------------------------------------------------
-; INFO: Returns mouse position and current button mask in the MOUSE_INFO
-; struct pointed to by ptr1. No return code required.
-;
-; We're cheating here to keep the code smaller: The first fields of the
-; mouse_info struct are identical to the mouse_pos struct, so we will just
-; call _mouse_pos to initialize the struct pointer and fill the position
-; fields.
-
-INFO:   jsr     POS
-
-; Fill in the button state
-
-        lda     Buttons
-        ldy     #MOUSE_INFO::BUTTONS
-        sta     (ptr1),y
-
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
-; specific data in ptr1, and the ioctl code in A.
-; Must return an error code in a/x.
-;
-
-IOCTL:  lda     #<MOUSE_ERR_INV_IOCTL     ; We don't support ioclts for now
-        ldx     #>MOUSE_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; IRQ: Irq handler entry point. Called as a subroutine but in IRQ context
-; (so be careful). The routine MUST return carry set if the interrupt has been
-; 'handled' - which means that the interrupt source is gone. Otherwise it
-; MUST return carry clear.
-;
-
-IRQ:    jsr     CPREP
-
-; Avoid crosstalk between the keyboard and a joystick.
-
-        ldy     #%00000000              ; Set ports A and B to input
-        sty     CIA1_DDRB
-        sty     CIA1_DDRA               ; Keyboard won't look like joystick
-        lda     CIA1_PRB                ; Read Control-Port 1
-        dec     CIA1_DDRA               ; Set port A back to output
-        eor     #%11111111              ; Bit goes up when switch goes down
-        beq     @Save                   ;(bze)
-        dec     CIA1_DDRB               ; Joystick won't look like keyboard
-        sty     CIA1_PRB                ; Set "all keys pushed"
-@Save:  sta     Temp
-
-; Check for a pressed button and place the result into Buttons
-
-        ldx     #$00                    ; Assume no button pressed
-        and     #JOY::FIRE              ; Check fire button
-        beq     @L0                     ; Jump if not pressed
-        ldx     #MOUSE_BTN_LEFT         ; Left (only) button is pressed
-@L0:    stx     Buttons
-
-; Check left/right
-
-        lda     Temp                    ; Read joystick #0
-        and     #(JOY::LEFT | JOY::RIGHT)
-        beq     @SkipX                  ;
-
-; We will cheat here and rely on the fact that either the left, OR the right
-; bit can be active
-
-        and     #JOY::RIGHT             ; Check RIGHT bit
-        bne     @Right
-        lda     #$FF
-        tax
-        bne     @AddX                   ; Branch always
-@Right: lda     #$01
-        ldx     #$00
-
-; Calculate the new X coordinate (--> a/y)
-
-@AddX:  add     XPos
-        tay                             ; Remember low byte
-        txa
-        adc     XPos+1
-        tax
-
-; Limit the X coordinate to the bounding box
-
-        cpy     XMin
-        sbc     XMin+1
-        bpl     @L1
-        ldy     XMin
-        ldx     XMin+1
-        jmp     @L2
-@L1:    txa
-
-        cpy     XMax
-        sbc     XMax+1
-        bmi     @L2
-        ldy     XMax
-        ldx     XMax+1
-@L2:    sty     XPos
-        stx     XPos+1
-
-; Move the mouse pointer to the new X pos
-
-        tya
-        jsr     CMOVEX
-
-; Calculate the Y movement vector
-
-@SkipX: lda     Temp                    ; Read joystick #0
-        and     #(JOY::UP | JOY::DOWN)  ; Check up/down
-        beq     @SkipY                  ;
-
-; We will cheat here and rely on the fact that either the up, OR the down
-; bit can be active
-
-        lsr     a                       ; Check UP bit
-        bcc     @Down
-        lda     #$FF
-        tax
-        bne     @AddY
-@Down:  lda     #$01
-        ldx     #$00
-
-; Calculate the new Y coordinate (--> a/y)
-
-@AddY:  add     YPos
-        tay                             ; Remember low byte
-        txa
-        adc     YPos+1
-        tax
-
-; Limit the Y coordinate to the bounding box
-
-        cpy     YMin
-        sbc     YMin+1
-        bpl     @L3
-        ldy     YMin
-        ldx     YMin+1
-        jmp     @L4
-@L3:    txa
-
-        cpy     YMax
-        sbc     YMax+1
-        bmi     @L4
-        ldy     YMax
-        ldx     YMax+1
-@L4:    sty     YPos
-        stx     YPos+1
-
-; Move the mouse pointer to the new X pos
-
-        tya
-        jsr     CMOVEY
-
-; Done
-
-@SkipY: jsr     CDRAW
-        clc                             ; Interrupt not "handled"
-        rts
-
diff --git a/libsrc/c64/mou/c64-pot.s b/libsrc/c64/mou/c64-pot.s
deleted file mode 100644 (file)
index 102ca35..0000000
+++ /dev/null
@@ -1,408 +0,0 @@
-;
-; Driver for a potentiometer "mouse", e.g. Koala Pad
-;
-; 2006-08-20, Stefan Haubenthal
-; 2009-09-26, Ullrich von Bassewitz
-; 2014-05-05, Greg King
-;
-
-        .include        "zeropage.inc"
-        .include        "mouse-kernel.inc"
-        .include        "c64.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c64_pot_mou
-
-HEADER:
-
-; Driver signature
-
-        .byte   $6d, $6f, $75           ; "mou"
-        .byte   MOUSE_API_VERSION       ; Mouse driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   HIDE
-        .addr   SHOW
-        .addr   SETBOX
-        .addr   GETBOX
-        .addr   MOVE
-        .addr   BUTTONS
-        .addr   POS
-        .addr   INFO
-        .addr   IOCTL
-        .addr   IRQ
-
-; Mouse driver flags
-
-        .byte   MOUSE_FLAG_LATE_IRQ
-
-; Callback table, set by the kernel before INSTALL is called
-
-CHIDE:  jmp     $0000                   ; Hide the cursor
-CSHOW:  jmp     $0000                   ; Show the cursor
-CPREP:  jmp     $0000                   ; Prepare to move the cursor
-CDRAW:  jmp     $0000                   ; Draw the cursor
-CMOVEX: jmp     $0000                   ; Move the cursor to X coord
-CMOVEY: jmp     $0000                   ; Move the cursor to Y coord
-
-
-;----------------------------------------------------------------------------
-; Constants
-
-SCREEN_HEIGHT   = 200
-SCREEN_WIDTH    = 320
-
-.enum   JOY
-        UP      = $01
-        DOWN    = $02
-        LEFT    = $04
-        RIGHT   = $08
-        FIRE    = $10
-.endenum
-
-;----------------------------------------------------------------------------
-; Global variables. The bounding box values are sorted so that they can be
-; written with the least effort in the SETBOX and GETBOX routines, so don't
-; reorder them.
-
-.bss
-
-Vars:
-YPos:           .res    2               ; Current mouse position, Y
-XPos:           .res    2               ; Current mouse position, X
-XMin:           .res    2               ; X1 value of bounding box
-YMin:           .res    2               ; Y1 value of bounding box
-XMax:           .res    2               ; X2 value of bounding box
-YMax:           .res    2               ; Y2 value of bounding box
-Buttons:        .res    1               ; Button mask
-
-; Temporary value used in the int handler
-
-Temp:           .res    1
-
-.rodata
-
-; Default values for above variables
-; (We use ".proc" because we want to define both a label and a scope.)
-
-.proc   DefVars
-        .word   SCREEN_HEIGHT/2         ; YPos
-        .word   SCREEN_WIDTH/2          ; XPos
-        .word   0                       ; XMin
-        .word   0                       ; YMin
-        .word   SCREEN_WIDTH - 1        ; XMax
-        .word   SCREEN_HEIGHT - 1       ; YMax
-        .byte   0                       ; Buttons
-.endproc
-
-.code
-
-;----------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present.
-; Must return an MOUSE_ERR_xx code in a/x.
-
-INSTALL:
-
-; Initialize variables. Just copy the default stuff over
-
-        ldx     #.sizeof(DefVars)-1
-@L1:    lda     DefVars,x
-        sta     Vars,x
-        dex
-        bpl     @L1
-
-; Be sure the mouse cursor is invisible and at the default location. We
-; need to do that here, because our mouse interrupt handler doesn't set the
-; mouse position if it hasn't changed.
-
-        sei
-        jsr     CHIDE
-        lda     XPos
-        ldx     XPos+1
-        jsr     CMOVEX
-        lda     YPos
-        ldx     YPos+1
-        jsr     CMOVEY
-        cli
-
-; Done, return zero (= MOUSE_ERR_OK)
-
-        ldx     #$00
-        txa
-        rts
-
-;----------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; No return code required (the driver is removed from memory on return).
-
-UNINSTALL       = HIDE                  ; Hide cursor on exit
-
-;----------------------------------------------------------------------------
-; HIDE routine. Is called to hide the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently visible and should get hidden. For most drivers,
-; no special action is required besides hiding the mouse cursor.
-; No return code required.
-
-HIDE:   sei
-        jsr     CHIDE
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SHOW routine. Is called to show the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently hidden and should become visible. For most drivers,
-; no special action is required besides enabling the mouse cursor.
-; No return code required.
-
-SHOW:   sei
-        jsr     CSHOW
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SETBOX: Set the mouse bounding box. The parameters are passed as they come
-; from the C program, that is, a pointer to a mouse_box struct in a/x.
-; No checks are done if the mouse is currently inside the box, this is the job
-; of the caller. It is not necessary to validate the parameters, trust the
-; caller and save some code here. No return code required.
-
-SETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX)-1
-        sei
-
-@L1:    lda     (ptr1),y
-        sta     XMin,y
-        dey
-        bpl     @L1
-
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; GETBOX: Return the mouse bounding box. The parameters are passed as they
-; come from the C program, that is, a pointer to a mouse_box struct in a/x.
-
-GETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX)-1
-        sei
-
-@L1:    lda     XMin,y
-        sta     (ptr1),y
-        dey
-        bpl     @L1
-
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; MOVE: Move the mouse to a new position. The position is passed as it comes
-; from the C program, that is: X on the stack and Y in a/x. The C wrapper will
-; remove the parameter from the stack on return.
-; No checks are done if the new position is valid (within the bounding box or
-; the screen). No return code required.
-;
-
-MOVE:   sei                             ; No interrupts
-
-        sta     YPos
-        stx     YPos+1                  ; New Y position
-        jsr     CMOVEY                  ; Set it
-
-        ldy     #$01
-        lda     (sp),y
-        sta     XPos+1
-        tax
-        dey
-        lda     (sp),y
-        sta     XPos                    ; New X position
-
-        jsr     CMOVEX                  ; Move the cursor
-
-        cli                             ; Allow interrupts
-        rts
-
-;----------------------------------------------------------------------------
-; BUTTONS: Return the button mask in a/x.
-
-BUTTONS:
-        lda     Buttons
-        ldx     #$00
-        rts
-
-;----------------------------------------------------------------------------
-; POS: Return the mouse position in the MOUSE_POS struct pointed to by ptr1.
-; No return code required.
-
-POS:    ldy     #MOUSE_POS::XCOORD      ; Structure offset
-
-        sei                             ; Disable interrupts
-        lda     XPos                    ; Transfer the position
-        sta     (ptr1),y
-        lda     XPos+1
-        iny
-        sta     (ptr1),y
-        lda     YPos
-        iny
-        sta     (ptr1),y
-        lda     YPos+1
-        cli                             ; Enable interrupts
-
-        iny
-        sta     (ptr1),y                ; Store last byte
-
-        rts                             ; Done
-
-;----------------------------------------------------------------------------
-; INFO: Returns mouse position and current button mask in the MOUSE_INFO
-; struct pointed to by ptr1. No return code required.
-;
-; We're cheating here to keep the code smaller: The first fields of the
-; mouse_info struct are identical to the mouse_pos struct, so we will just
-; call _mouse_pos to initialize the struct pointer and fill the position
-; fields.
-
-INFO:   jsr     POS
-
-; Fill in the button state
-
-        lda     Buttons
-        ldy     #MOUSE_INFO::BUTTONS
-        sta     (ptr1),y
-
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
-; specific data in ptr1, and the ioctl code in A.
-; Must return an error code in a/x.
-;
-
-IOCTL:  lda     #<MOUSE_ERR_INV_IOCTL     ; We don't support ioclts for now
-        ldx     #>MOUSE_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; IRQ: Irq handler entry point. Called as a subroutine but in IRQ context
-; (so be careful).
-;
-
-IRQ:    jsr     CPREP
-        lda     #$7F
-        sta     CIA1_PRA
-        lda     CIA1_PRB                ; Read port #1
-        and     #%00001100
-        eor     #%00001100              ; Make all bits active high
-        asl
-        sta     Buttons
-        lsr
-        lsr
-        lsr
-        and     #%00000001
-        ora     Buttons
-        sta     Buttons
-        ldx     #%01000000
-        stx     CIA1_PRA
-        ldy     #0
-:       dey
-        bne     :-
-        ldx     SID_ADConv1
-        stx     XPos
-        ldx     SID_ADConv2
-        stx     YPos
-
-        lda     #$FF
-        tax
-        bne     @AddX                   ; Branch always
-        lda     #$01
-        ldx     #$00
-
-; Calculate the new X coordinate (--> a/y)
-
-@AddX:  add     XPos
-        tay                             ; Remember low byte
-        txa
-        adc     XPos+1
-        tax
-
-; Limit the X coordinate to the bounding box
-
-        cpy     XMin
-        sbc     XMin+1
-        bpl     @L1
-        ldy     XMin
-        ldx     XMin+1
-        jmp     @L2
-@L1:    txa
-
-        cpy     XMax
-        sbc     XMax+1
-        bmi     @L2
-        ldy     XMax
-        ldx     XMax+1
-@L2:    sty     XPos
-        stx     XPos+1
-
-; Move the mouse pointer to the new X pos
-
-        tya
-        jsr     CMOVEX
-
-        lda     #$FF
-        tax
-        bne     @AddY
-@Down:  lda     #$01
-        ldx     #$00
-
-; Calculate the new Y coordinate (--> a/y)
-
-@AddY:  add     YPos
-        tay                             ; Remember low byte
-        txa
-        adc     YPos+1
-        tax
-
-; Limit the Y coordinate to the bounding box
-
-        cpy     YMin
-        sbc     YMin+1
-        bpl     @L3
-        ldy     YMin
-        ldx     YMin+1
-        jmp     @L4
-@L3:    txa
-
-        cpy     YMax
-        sbc     YMax+1
-        bmi     @L4
-        ldy     YMax
-        ldx     YMax+1
-@L4:    sty     YPos
-        stx     YPos+1
-
-; Move the mouse pointer to the new X pos
-
-        tya
-        jsr     CMOVEY
-        jsr     CDRAW
-        clc                             ; Interrupt not "handled"
-        rts
diff --git a/libsrc/c64/mouse_stat_stddrv.s b/libsrc/c64/mouse_stat_stddrv.s
deleted file mode 100644 (file)
index 12db7ed..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Address of the static standard mouse driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void mouse_static_stddrv[];
-;
-
-        .export _mouse_static_stddrv
-        .import _c64_1351_mou
-
-.rodata
-
-_mouse_static_stddrv := _c64_1351_mou
diff --git a/libsrc/c64/mouse_stddrv.s b/libsrc/c64/mouse_stddrv.s
deleted file mode 100644 (file)
index b53440a..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Name of the standard mouse driver
-;
-; Ullrich von Bassewitz, 2009-09-11
-;
-; const char mouse_stddrv[];
-;
-
-        .export _mouse_stddrv
-
-.rodata
-
-_mouse_stddrv:  .asciiz "c64-1351.mou"
-
-      
diff --git a/libsrc/c64/mouseref.s b/libsrc/c64/mouseref.s
deleted file mode 100644 (file)
index 90aeedf..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Pointer for library references by device drivers.
-;
-; 2013-07-25, Greg King
-;
-
-        .export         mouse_libref, _pen_adjuster
-
-        .data
-
-mouse_libref:                   ; generic label for mouse-kernel
-
-; A program optionally can set this pointer to a function that gives
-; a calibration value to a driver.  If this pointer isn't NULL,
-; then a driver that wants a value can call that function.
-;
-; The function might read a value from a file; or, it might ask the user
-; to help calibrate the driver.
-;
-; void __fastcall__ (*pen_adjuster)(unsigned char *) = NULL;
-;
-_pen_adjuster:
-        .addr   $0000
diff --git a/libsrc/c64/pencalib.c b/libsrc/c64/pencalib.c
deleted file mode 100644 (file)
index 00629d5..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
-** Calibrate lightpen drivers to the current video hardware.
-**
-** 2013-07-25, Greg King
-**
-*/
-
-
-#include <conio.h>
-#include <mouse.h>
-#include <pen.h>
-
-
-#define COMMAND1 "Adjust by clicking on line."
-#define COMMAND2 "Finish by clicking off bar."
-
-
-/*
-** There is a delay between when the VIC sends its signal, and when the display
-** shows that signal.  There is another delay between the display and when
-** the lightpen says that it saw that signal. Each display and pen is different.
-** Therefore, the driver must be calibrated to them.  A white bar is painted on
-** the screen; and, a line is drawn down the middle of it.  When the user clicks
-** on that line, the difference between its position and where the VIC thinks
-** that the pen is pointing becomes an offset that is subtracted from what the
-** VIC sees.
-*/
-void __fastcall__ pen_calibrate (unsigned char *XOffset)
-{
-    unsigned char oldBg = bgcolor (COLOR_BLUE);
-    unsigned char oldText = textcolor (COLOR_GRAY3);
-    unsigned char oldRev = revers (1);
-    unsigned char sprite0Color = VIC.spr_color[0];
-    unsigned char width, width2, height, height4, height8;
-    struct mouse_info info;
-
-    screensize (&width, &height);
-    width2 = width / 2;
-    height4 = height / 4;
-    height8 = height4 * 8;
-
-    /* Draw a bar and line. */
-
-    clrscr ();
-    cclearxy (0, height4, height4 * width);
-    cvlinexy (width2, height4 + 1, height4 - 2);
-    revers (0);
-
-    /* Print instructions. */
-
-    cputsxy (width2 - (sizeof COMMAND1) / 2, height / 2 + 1, COMMAND1);
-    cputsxy (width2 - (sizeof COMMAND2) / 2, height / 2 + 3, COMMAND2);
-
-    VIC.spr_color[0] = COLOR_GRAY2;
-    mouse_show ();
-    mouse_move (width2 * 8, height8 / 2);
-
-    for (;;) {
-        /* Wait for the main button to be released. */
-
-        do ; while ((mouse_buttons () & MOUSE_BTN_LEFT));
-
-        /* Wait for the main button to be pressed. */
-
-        do {
-            mouse_info (&info);
-        } while (!(info.buttons & MOUSE_BTN_LEFT));
-
-        /* Find out if the pen is on or off the bar. */
-
-        if (info.pos.y < height8 || info.pos.y >= height8 * 2) {
-            break;
-        }
-
-        /* On the bar; adjust the offset. */
-        /* Characters are eight pixels wide.
-        ** The VIC-II sees every other pixel;
-        ** so, we use half of the difference.
-        */
-
-        *XOffset += (info.pos.x - (width2 * 8 + 8/2)) / 2;
-    }
-
-    /* Off the bar; wait for the main button to be released. */
-
-    do ; while ((mouse_buttons () & MOUSE_BTN_LEFT));
-
-    mouse_hide ();
-    VIC.spr_color[0] = sprite0Color;
-    revers (oldRev);
-    textcolor (oldText);
-    bgcolor (oldBg);
-    clrscr ();
-}
diff --git a/libsrc/c64/randomize.s b/libsrc/c64/randomize.s
deleted file mode 100644 (file)
index d74bae9..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; 2002-11-05, Ullrich von Bassewitz
-; 2015-09-11, Greg King
-;
-; void _randomize (void);
-; /* Initialize the random number generator */
-;
-
-        .export         __randomize
-        .import         _srand
-
-        .include        "c64.inc"
-
-__randomize:              
-        ldx     VIC_HLINE       ; Use VIC rasterline as high byte
-        lda     TIME+2          ; Use 60HZ clock as low byte
-        jmp     _srand          ; Initialize generator
-
diff --git a/libsrc/c64/revers.s b/libsrc/c64/revers.s
deleted file mode 100644 (file)
index da4ecce..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; unsigned char revers (unsigned char onoff);
-;
-
-        .export         _revers
-
-        .include        "c64.inc"
-
-.proc   _revers
-
-        ldx     #$00            ; Assume revers off
-        tay                     ; Test onoff
-        beq     L1              ; Jump if off
-        ldx     #$80            ; Load on value
-        ldy     #$00            ; Assume old value is zero
-L1:     lda     RVS             ; Load old value
-        stx     RVS             ; Set new value
-        beq     L2              ; Jump if old value zero
-        iny                     ; Make old value = 1
-L2:     ldx     #$00            ; Load high byte of result
-        tya                     ; Load low byte, set CC
-        rts
-
-.endproc
-
diff --git a/libsrc/c64/ser/c64-swlink.s b/libsrc/c64/ser/c64-swlink.s
deleted file mode 100644 (file)
index 8130672..0000000
+++ /dev/null
@@ -1,479 +0,0 @@
-;
-; Serial driver for the C64 using a Swiftlink or Turbo-232 cartridge.
-;
-; Ullrich von Bassewitz, 2003-04-18
-;
-; The driver is based on the cc65 rs232 module, which in turn is based on
-; Craig Bruce device driver for the Switftlink/Turbo-232.
-;
-; SwiftLink/Turbo-232 v0.90 device driver, by Craig Bruce, 14-Apr-1998.
-;
-; This software is Public Domain.  It is in Buddy assembler format.
-;
-; This device driver uses the SwiftLink RS-232 Serial Cartridge, available from
-; Creative Micro Designs, Inc, and also supports the extensions of the Turbo232
-; Serial Cartridge.  Both devices are based on the 6551 ACIA chip.  It also
-; supports the "hacked" SwiftLink with a 1.8432 MHz crystal.
-;
-; The code assumes that the kernal + I/O are in context.  On the C128, call
-; it from Bank 15.  On the C64, don't flip out the Kernal unless a suitable
-; NMI catcher is put into the RAM under then Kernal.  For the SuperCPU, the
-; interrupt handling assumes that the 65816 is in 6502-emulation mode.
-;
-
-        .include        "zeropage.inc"
-        .include        "ser-kernel.inc"
-        .include        "ser-error.inc"
-        .include        "c64.inc"
-
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _c64_swlink_ser
-
-; Driver signature
-
-        .byte   $73, $65, $72           ; "ser"
-        .byte   SER_API_VERSION         ; Serial API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .word   INSTALL
-        .word   UNINSTALL
-        .word   OPEN
-        .word   CLOSE
-        .word   GET
-        .word   PUT
-        .word   STATUS
-        .word   IOCTL
-        .word   IRQ
-
-;----------------------------------------------------------------------------
-; I/O definitions
-
-ACIA            = $DE00
-ACIA_DATA       = ACIA+0        ; Data register
-ACIA_STATUS     = ACIA+1        ; Status register
-ACIA_CMD        = ACIA+2        ; Command register
-ACIA_CTRL       = ACIA+3        ; Control register
-
-;----------------------------------------------------------------------------
-;
-; Global variables
-;
-
-; We reuse the RS232 zero page variables for the driver, since the ROM
-; routines cannot be used together with this driver.
-RecvHead        = $B5           ; Head of receive buffer
-RecvTail        = $BD           ; Tail of receive buffer
-RecvFreeCnt     = $F7           ; Number of bytes in receive buffer
-SendHead        = $F8           ; Head of send buffer
-SendTail        = $F9           ; Tail of send buffer
-SendFreeCnt     = $FA           ; Number of bytes free in send buffer
-
-.bss
-Stopped:        .res    1       ; Flow-stopped flag
-RtsOff:         .res    1       ;
-
-; Send and receive buffers: 256 bytes each
-RecvBuf:        .res    256
-SendBuf:        .res    256
-
-.data
-NmiContinue:    .byte   $4c     ; JMP instruction for NMI save -- continue
-NmiSave:        .res    2       ; normal NMI handler
-
-.rodata
-
-; Tables used to translate RS232 params into register values
-
-BaudTable:                      ; bit7 = 1 means setting is invalid
-        .byte   $FF             ; SER_BAUD_45_5
-        .byte   $FF             ; SER_BAUD_50
-        .byte   $FF             ; SER_BAUD_75
-        .byte   $FF             ; SER_BAUD_110
-        .byte   $FF             ; SER_BAUD_134_5
-        .byte   $02             ; SER_BAUD_150
-        .byte   $05             ; SER_BAUD_300
-        .byte   $06             ; SER_BAUD_600
-        .byte   $07             ; SER_BAUD_1200
-        .byte   $FF             ; SER_BAUD_1800
-        .byte   $08             ; SER_BAUD_2400
-        .byte   $09             ; SER_BAUD_3600
-        .byte   $0A             ; SER_BAUD_4800
-        .byte   $0B             ; SER_BAUD_7200
-        .byte   $0C             ; SER_BAUD_9600
-        .byte   $0E             ; SER_BAUD_19200
-        .byte   $0F             ; SER_BAUD_38400
-        .byte   $FF             ; SER_BAUD_57600
-        .byte   $FF             ; SER_BAUD_115200
-        .byte   $FF             ; SER_BAUD_230400
-
-BitTable:
-        .byte   $60             ; SER_BITS_5
-        .byte   $40             ; SER_BITS_6
-        .byte   $20             ; SER_BITS_7
-        .byte   $00             ; SER_BITS_8
-
-StopTable:
-        .byte   $00             ; SER_STOP_1
-        .byte   $80             ; SER_STOP_2
-
-ParityTable:
-        .byte   $00             ; SER_PAR_NONE
-        .byte   $20             ; SER_PAR_ODD
-        .byte   $60             ; SER_PAR_EVEN
-        .byte   $A0             ; SER_PAR_MARK
-        .byte   $E0             ; SER_PAR_SPACE
-
-.code
-
-;----------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present.
-; Must return an SER_ERR_xx code in a/x.
-
-INSTALL:
-
-; Deactivate DTR and disable 6551 interrupts
-
-        lda     #%00001010
-        sta     ACIA_CMD
-
-; Set up the nmi vector
-
-        lda     NMIVec
-        ldy     NMIVec+1
-        sta     NmiSave+0
-        sty     NmiSave+1
-        lda     #<NmiHandler
-        ldy     #>NmiHandler
-SetNMI: sta     NMIVec
-        sty     NMIVec+1
-
-; Done, return an error code
-
-        lda     #<SER_ERR_OK
-        tax                     ; A is zero
-        rts
-
-;----------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Must return an SER_ERR_xx code in a/x.
-
-UNINSTALL:
-
-; Stop interrupts, drop DTR
-
-        lda     #%00001010
-        sta     ACIA_CMD
-
-; Restore NMI vector and return OK
-
-        lda     NmiSave+0
-        ldy     NmiSave+1
-        jmp     SetNMI
-
-;----------------------------------------------------------------------------
-; PARAMS routine. A pointer to a ser_params structure is passed in ptr1.
-; Must return an SER_ERR_xx code in a/x.
-
-OPEN:
-
-; Check if the handshake setting is valid
-
-        ldy     #SER_PARAMS::HANDSHAKE  ; Handshake
-        lda     (ptr1),y
-        cmp     #SER_HS_HW              ; This is all we support
-        bne     InvParam
-
-; Initialize buffers
-
-        jsr     InitBuffers
-
-; Set the value for the control register, which contains stop bits, word
-; length and the baud rate.
-
-        ldy     #SER_PARAMS::BAUDRATE
-        lda     (ptr1),y                ; Baudrate index
-        tay
-        lda     BaudTable,y             ; Get 6551 value
-        bmi     InvBaud                 ; Branch if rate not supported
-        sta     tmp1
-
-        ldy     #SER_PARAMS::DATABITS   ; Databits
-        lda     (ptr1),y
-        tay
-        lda     BitTable,y
-        ora     tmp1
-        sta     tmp1
-
-        ldy     #SER_PARAMS::STOPBITS   ; Stopbits
-        lda     (ptr1),y
-        tay
-        lda     StopTable,y
-        ora     tmp1
-        ora     #%00010000              ; Receiver clock source = baudrate
-        sta     ACIA_CTRL
-
-; Set the value for the command register. We remember the base value in
-; RtsOff, since we will have to manipulate ACIA_CMD often.
-
-        ldy     #SER_PARAMS::PARITY     ; Parity
-        lda     (ptr1),y
-        tay
-        lda     ParityTable,y
-        ora     #%00000001              ; DTR active
-        sta     RtsOff
-        ora     #%00001000              ; Enable receive interrupts
-        sta     ACIA_CMD
-
-; Done
-
-        lda     #<SER_ERR_OK
-        tax                             ; A is zero
-        rts
-
-; Invalid parameter
-
-InvParam:
-        lda     #<SER_ERR_INIT_FAILED
-        ldx     #>SER_ERR_INIT_FAILED
-        rts
-
-; Baud rate not available
-
-InvBaud:
-        lda     #<SER_ERR_BAUD_UNAVAIL
-        ldx     #>SER_ERR_BAUD_UNAVAIL
-        rts
-
-;----------------------------------------------------------------------------
-; CLOSE: Close the port, disable interrupts and flush the buffer. Called
-; without parameters. Must return an error code in a/x.
-;
-
-CLOSE:
-
-; Stop interrupts, drop DTR
-
-        lda     #%00001010
-        sta     ACIA_CMD
-
-; Initalize buffers. Returns zero in a
-
-        jsr     InitBuffers
-
-; Return OK
-
-        lda     #<SER_ERR_OK
-        tax                             ; A is zero
-        rts
-
-;----------------------------------------------------------------------------
-; GET: Will fetch a character from the receive buffer and store it into the
-; variable pointer to by ptr1. If no data is available, SER_ERR_NO_DATA is
-; return.
-;
-
-GET:    ldx     SendFreeCnt             ; Send data if necessary
-        inx                             ; X == $FF?
-        beq     @L1
-        lda     #$00
-        jsr     TryToSend
-
-; Check for buffer empty
-
-@L1:    lda     RecvFreeCnt             ; (25)
-        cmp     #$ff
-        bne     @L2
-        lda     #<SER_ERR_NO_DATA
-        ldx     #>SER_ERR_NO_DATA
-        rts
-
-; Check for flow stopped & enough free: release flow control
-
-@L2:    ldx     Stopped                 ; (34)
-        beq     @L3
-        cmp     #63
-        bcc     @L3
-        lda     #$00
-        sta     Stopped
-        lda     RtsOff
-        ora     #%00001000
-        sta     ACIA_CMD
-
-; Get byte from buffer
-
-@L3:    ldx     RecvHead                ; (41)
-        lda     RecvBuf,x
-        inc     RecvHead
-        inc     RecvFreeCnt
-        ldx     #$00                    ; (59)
-        sta     (ptr1,x)
-        txa                             ; Return code = 0
-        rts
-
-;----------------------------------------------------------------------------
-; PUT: Output character in A.
-; Must return an error code in a/x.
-;
-
-PUT:
-
-; Try to send
-
-        ldx     SendFreeCnt
-        inx                             ; X = $ff?
-        beq     @L2
-        pha
-        lda     #$00
-        jsr     TryToSend
-        pla
-
-; Put byte into send buffer & send
-
-@L2:    ldx     SendFreeCnt
-        bne     @L3
-        lda     #<SER_ERR_OVERFLOW      ; X is already zero
-        rts
-
-@L3:    ldx     SendTail
-        sta     SendBuf,x
-        inc     SendTail
-        dec     SendFreeCnt
-        lda     #$ff
-        jsr     TryToSend
-        lda     #<SER_ERR_OK
-        tax
-        rts
-
-;----------------------------------------------------------------------------
-; STATUS: Return the status in the variable pointed to by ptr1.
-; Must return an error code in a/x.
-;
-
-STATUS: lda     ACIA_STATUS
-        ldx     #0
-        sta     (ptr1,x)
-        txa                             ; SER_ERR_OK
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
-; specific data in ptr1, and the ioctl code in A.
-; Must return an error code in a/x.
-;
-
-IOCTL:  lda     #<SER_ERR_INV_IOCTL     ; We don't support ioclts for now
-        ldx     #>SER_ERR_INV_IOCTL
-       rts
-
-;----------------------------------------------------------------------------
-; IRQ: Not used on the C64
-;
-
-IRQ     = $0000
-
-;----------------------------------------------------------------------------
-;
-; NMI handler
-; C128 NMI overhead=76 cycles: int=7, maxLatency=6, ROMenter=33, ROMexit=30
-; C64  NMI overhead=76 cycles: int=7, maxLatency=6, ROMenter=34, ROMexit=29
-;
-; timing: normal=76+43+9=128 cycles, assertFlow=76+52+9=137 cycles
-;
-; C128 @ 115.2k: 177 cycles avail (fast)
-; C64  @  57.6k: 177 cycles avail, worstAvail=177-43? = 134
-; SCPU @ 230.4k: 868 cycles avail: for a joke!
-;
-
-NmiHandler:
-        pha
-        lda     ACIA_STATUS     ;(4) ;status ;check for byte received
-        and     #$08            ;(2)
-        beq     @L9             ;(2*)
-        cld
-        txa
-        pha
-        tya
-        pha
-@L1:    lda     ACIA_DATA       ;(4)  data  ;get byte and put into receive buffer
-        ldy     RecvTail        ;(4)
-        ldx     RecvFreeCnt     ;(4)
-        beq     @L3             ;(2*) Jump if no space in receive buffer
-        sta     RecvBuf,y       ;(5)
-        inc     RecvTail        ;(6)
-        dec     RecvFreeCnt     ;(6)
-        cpx     #33             ;(2)  check for buffer space low
-        bcc     @L2             ;(2*)
-        jmp     NMIEXIT         ;(3)
-
-; Assert flow control
-
-@L2:    lda     RtsOff          ;(3) assert flow control if buffer space too low
-        sta     ACIA_CMD        ;(4) command
-        sta     Stopped         ;(3)
-@L3:    jmp     NMIEXIT         ;(3)
-
-@L9:    pla
-        jmp     NmiContinue
-
-;----------------------------------------------------------------------------
-; Try to send a byte. Internal routine. A = TryHard
-
-.proc   TryToSend
-
-        sta     tmp1            ; Remember tryHard flag
-@L0:    lda     SendFreeCnt
-        cmp     #$ff
-        beq     @L3             ; Bail out
-
-; Check for flow stopped
-
-@L1:    lda     Stopped
-        bne     @L3             ; Bail out
-
-; Check that swiftlink is ready to send
-
-@L2:    lda     ACIA_STATUS
-        and     #$10
-        bne     @L4
-        bit     tmp1            ;keep trying if must try hard
-        bmi     @L0
-@L3:    rts
-
-; Send byte and try again
-
-@L4:    ldx     SendHead
-        lda     SendBuf,x
-        sta     ACIA_DATA
-        inc     SendHead
-        inc     SendFreeCnt
-        jmp     @L0
-
-.endproc
-
-
-;----------------------------------------------------------------------------
-; Initialize buffers
-
-InitBuffers:
-        ldx     #0
-        stx     Stopped
-        stx     RecvHead
-        stx     RecvTail
-        stx     SendHead
-        stx     SendTail
-        dex                             ; X = 255
-        stx     RecvFreeCnt
-        stx     SendFreeCnt
-        rts
-
diff --git a/libsrc/c64/status.s b/libsrc/c64/status.s
deleted file mode 100644 (file)
index c6f2792..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-;
-; Oliver Schmidt, 2012-09-30
-;
-
-        .exportzp       ST := $90       ; IEC status byte
diff --git a/libsrc/c64/systime.s b/libsrc/c64/systime.s
deleted file mode 100644 (file)
index a00df13..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-;
-; Stefan Haubenthal, 27.7.2009
-;
-; time_t _systime (void);
-; /* Similar to time(), but:
-; **   - Is not ISO C
-; **   - Does not take the additional pointer
-; **   - Does not set errno when returning -1
-; */
-;
-
-        .include        "time.inc"
-        .include        "c64.inc"
-        .include        "get_tv.inc"
-
-        .constructor    initsystime
-        .importzp       tmp1, tmp2
-        .import         _get_tv, _get_ostype
-
-
-;----------------------------------------------------------------------------
-.code
-
-.proc   __systime
-
-        lda     CIA1_TODHR
-        bpl     AM
-        and     #%01111111
-        sed
-        clc
-        adc     #$12
-        cld
-AM:     jsr     BCD2dec
-        sta     TM + tm::tm_hour
-        lda     CIA1_TODMIN
-        jsr     BCD2dec
-        sta     TM + tm::tm_min
-        lda     CIA1_TODSEC
-        jsr     BCD2dec
-        sta     TM + tm::tm_sec
-        lda     CIA1_TOD10              ; Dummy read to unfreeze
-        lda     #<TM
-        ldx     #>TM
-        jmp     _mktime
-
-; dec = (((BCD>>4)*10) + (BCD&0xf))
-BCD2dec:tax
-        and     #%00001111
-        sta     tmp1
-        txa
-        and     #%11110000      ; *16
-        lsr                     ; *8
-        sta     tmp2
-        lsr
-        lsr                     ; *2
-        adc     tmp2            ; = *10
-        adc     tmp1
-        rts
-
-.endproc
-
-;----------------------------------------------------------------------------
-; Constructor that writes to the 1/10 sec register of the TOD to kick it
-; into action. If this is not done, the clock hangs. We will read the register
-; and write it again, ignoring a possible change in between.
-
-.proc   initsystime
-
-        lda     CIA1_TOD10
-        sta     CIA1_TOD10
-        jsr     _get_tv
-        cmp     #TV::PAL
-        bne     @60Hz
-        jsr     _get_ostype
-        cmp     #$43
-        beq     @60Hz
-        lda     CIA1_CRA
-        ora     #$80
-        sta     CIA1_CRA
-@60Hz:  rts
-
-.endproc
-
-
-;----------------------------------------------------------------------------
-; TM struct with date set to 1970-01-01
-.data
-
-TM:     .word           0       ; tm_sec
-        .word           0       ; tm_min
-        .word           0       ; tm_hour
-        .word           1       ; tm_mday
-        .word           0       ; tm_mon
-        .word           70      ; tm_year
-        .word           0       ; tm_wday
-        .word           0       ; tm_yday
-        .word           0       ; tm_isdst
-
diff --git a/libsrc/c64/sysuname.s b/libsrc/c64/sysuname.s
deleted file mode 100644 (file)
index 15546bf..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; unsigned char __fastcall__ _sysuname (struct utsname* buf);
-;
-
-        .export         __sysuname, utsdata
-
-        .import         utscopy
-
-        __sysuname = utscopy
-
-;--------------------------------------------------------------------------
-; Data. We define a fixed utsname struct here and just copy it.
-                                                         
-.rodata
-
-utsdata:
-        ; sysname
-        .asciiz         "cc65"
-
-        ; nodename
-        .asciiz         ""
-
-        ; release
-        .byte           ((.VERSION >> 8) & $0F) + '0'
-        .byte           '.'
-        .byte           ((.VERSION >> 4) & $0F) + '0'
-        .byte           $00
-
-        ; version
-        .byte           (.VERSION & $0F) + '0'
-        .byte           $00
-
-        ; machine
-        .asciiz         "Commodore 64"
-
-
-         
diff --git a/libsrc/c64/tgi/c64-hi.s b/libsrc/c64/tgi/c64-hi.s
deleted file mode 100644 (file)
index 6d33f00..0000000
+++ /dev/null
@@ -1,961 +0,0 @@
-;
-; Graphics driver for the 320x200x2 mode on the C64.
-;
-; Based on Stephen L. Judds GRLIB code
-;
-
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table and constants.
-
-        module_header   _c64_hi_tgi
-
-; First part of the header is a structure that has a magic and defines the
-; capabilities of the driver
-
-        .byte   $74, $67, $69           ; "tgi"
-        .byte   TGI_API_VERSION         ; TGI API version number
-        .addr   $0000                   ; Library reference
-        .word   320                     ; X resolution
-        .word   200                     ; Y resolution
-        .byte   2                       ; Number of drawing colors
-        .byte   1                       ; Number of screens available
-        .byte   8                       ; System font X size
-        .byte   8                       ; System font Y size
-        .word   $00D4                   ; Aspect ratio (based on 4/3 display)
-        .byte   0                       ; TGI driver flags
-
-; Next comes the jump table. With the exception of IRQ, all entries must be
-; valid and may point to an RTS for test versions (function not implemented).
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   INIT
-        .addr   DONE
-        .addr   GETERROR
-        .addr   CONTROL
-        .addr   CLEAR
-        .addr   SETVIEWPAGE
-        .addr   SETDRAWPAGE
-        .addr   SETCOLOR
-        .addr   SETPALETTE
-        .addr   GETPALETTE
-        .addr   GETDEFPALETTE
-        .addr   SETPIXEL
-        .addr   GETPIXEL
-        .addr   LINE
-        .addr   BAR
-        .addr   TEXTSTYLE
-        .addr   OUTTEXT
-        .addr   0                       ; IRQ entry is unused
-
-; ------------------------------------------------------------------------
-; Data.
-
-; Variables mapped to the zero page segment variables. Some of these are
-; used for passing parameters to the driver.
-
-X1              := ptr1
-Y1              := ptr2
-X2              := ptr3
-Y2              := ptr4
-TEXT            := ptr3
-
-ROW             := tmp2         ; Bitmap row...
-COL             := tmp3         ; ...and column, both set by PLOT
-TEMP            := tmp4
-TEMP2           := sreg
-POINT           := regsave
-INRANGE         := regsave+2    ; PLOT variable, $00 = coordinates in range
-
-CHUNK           := X2           ; Used in the line routine
-OLDCHUNK        := X2+1         ; Dito
-
-; Absolute variables used in the code
-
-.bss
-
-ERROR:          .res    1       ; Error code
-PALETTE:        .res    2       ; The current palette
-
-BITMASK:        .res    1       ; $00 = clear, $FF = set pixels
-
-; INIT/DONE
-OLDD018:        .res    1       ; Old register value
-
-; Line routine stuff
-DX:             .res    2
-DY:             .res    2
-
-; BAR variables
-X1SAVE:         .res    2
-Y1SAVE:         .res    2
-X2SAVE:         .res    2
-Y2SAVE:         .res    2
-
-; Text output stuff
-TEXTMAGX:       .res    1
-TEXTMAGY:       .res    1
-TEXTDIR:        .res    1
-
-; Constants and tables
-
-.rodata
-
-DEFPALETTE:     .byte   $00, $01        ; White on black
-PALETTESIZE     = * - DEFPALETTE
-
-BITTAB:         .byte   $80,$40,$20,$10,$08,$04,$02,$01
-BITCHUNK:       .byte   $FF,$7F,$3F,$1F,$0F,$07,$03,$01
-
-CHARROM         := $D000                ; Character rom base address
-CBASE           := $D000                ; Color memory base address
-VBASE           := $E000                ; Video memory base address
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. May
-; initialize anything that has to be done just once. Is probably empty
-; most of the time.
-;
-; Must set an error code: NO
-;
-
-INSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory. May
-; clean up anything done by INSTALL but is probably empty most of the time.
-;
-; Must set an error code: NO
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; INIT: Changes an already installed device from text mode to graphics
-; mode.
-; Note that INIT/DONE may be called multiple times while the driver
-; is loaded, while INSTALL is only called once, so any code that is needed
-; to initializes variables and so on must go here. Setting palette and
-; clearing the screen is not needed because this is called by the graphics
-; kernel later.
-; The graphics kernel will never call INIT when a graphics mode is already
-; active, so there is no need to protect against that.
-;
-; Must set an error code: YES
-;
-
-INIT:
-
-; Initialize variables
-
-        ldx     #$FF
-        stx     BITMASK
-
-; Switch into graphics mode
-
-        lda     $DD02           ; Set the data direction regs
-        ora     #3
-        sta     $DD02
-        lda     $DD00
-        and     #$FC            ; Switch to bank 3
-        sta     $DD00
-
-        lda     $D018
-        sta     OLDD018
-        lda     #$48            ; Set color map to $D000, screen to $E000
-        sta     $D018
-
-        lda     $D011           ; And turn on bitmap
-        ora     #$20
-DONE1:  sta     $D011
-
-; Done, reset the error code
-
-        lda     #TGI_ERR_OK
-        sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; DONE: Will be called to switch the graphics device back into text mode.
-; The graphics kernel will never call DONE when no graphics mode is active,
-; so there is no need to protect against that.
-;
-; Must set an error code: NO
-;
-
-DONE:   lda     $DD02           ; Set the data direction regs
-        ora     #3
-        sta     $DD02
-        lda     $DD00
-        ora     #$03            ; Bank 0
-        sta     $DD00
-
-        lda     OLDD018         ; Screen mem --> $0400
-        sta     $D018
-
-        lda     $D011
-        and     #<~$20
-        sta     $D011
-        rts
-
-; ------------------------------------------------------------------------
-; GETERROR: Return the error code in A and clear it.
-
-GETERROR:
-        ldx     #TGI_ERR_OK
-        lda     ERROR
-        stx     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; CONTROL: Platform/driver specific entry point.
-;
-; Must set an error code: YES
-;
-
-CONTROL:
-        lda     #TGI_ERR_INV_FUNC
-        sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; CLEAR: Clears the screen.
-;
-; Must set an error code: NO
-;
-
-CLEAR:  ldy     #$00
-        tya
-@L1:    sta     VBASE+$0000,y
-        sta     VBASE+$0100,y
-        sta     VBASE+$0200,y
-        sta     VBASE+$0300,y
-        sta     VBASE+$0400,y
-        sta     VBASE+$0500,y
-        sta     VBASE+$0600,y
-        sta     VBASE+$0700,y
-        sta     VBASE+$0800,y
-        sta     VBASE+$0900,y
-        sta     VBASE+$0A00,y
-        sta     VBASE+$0B00,y
-        sta     VBASE+$0C00,y
-        sta     VBASE+$0D00,y
-        sta     VBASE+$0E00,y
-        sta     VBASE+$0F00,y
-        sta     VBASE+$1000,y
-        sta     VBASE+$1100,y
-        sta     VBASE+$1200,y
-        sta     VBASE+$1300,y
-        sta     VBASE+$1400,y
-        sta     VBASE+$1500,y
-        sta     VBASE+$1600,y
-        sta     VBASE+$1700,y
-        sta     VBASE+$1800,y
-        sta     VBASE+$1900,y
-        sta     VBASE+$1A00,y
-        sta     VBASE+$1B00,y
-        sta     VBASE+$1C00,y
-        sta     VBASE+$1D00,y
-        sta     VBASE+$1E00,y
-        sta     VBASE+$1F00,y
-        iny
-        bne     @L1
-        rts
-
-; ------------------------------------------------------------------------
-; SETVIEWPAGE: Set the visible page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-;
-; Must set an error code: NO (will only be called if page ok)
-;
-
-SETVIEWPAGE:
-        rts
-
-; ------------------------------------------------------------------------
-; SETDRAWPAGE: Set the drawable page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-;
-; Must set an error code: NO (will only be called if page ok)
-;
-
-SETDRAWPAGE:
-        rts
-
-; ------------------------------------------------------------------------
-; SETCOLOR: Set the drawing color (in A). The new color is already checked
-; to be in a valid range (0..maxcolor-1).
-;
-; Must set an error code: NO (will only be called if color ok)
-;
-
-SETCOLOR:
-        tax
-        beq     @L1
-        lda     #$FF
-@L1:    sta     BITMASK
-        rts
-
-; ------------------------------------------------------------------------
-; SETPALETTE: Set the palette (not available with all drivers/hardware).
-; A pointer to the palette is passed in ptr1. Must set an error if palettes
-; are not supported
-;
-; Must set an error code: YES
-;
-
-SETPALETTE:
-        ldy     #PALETTESIZE - 1
-@L1:    lda     (ptr1),y        ; Copy the palette
-        and     #$0F            ; Make a valid color
-        sta     PALETTE,y
-        dey
-        bpl     @L1
-
-; Get the color entries from the palette
-
-        lda     PALETTE+1       ; Foreground color
-        asl     a
-        asl     a
-        asl     a
-        asl     a
-        ora     PALETTE         ; Background color
-        tax
-
-; Initialize the color map with the new color settings (it is below the
-; I/O area)
-
-        ldy     #$00
-        sei
-        lda     $01             ; Get ROM config
-        pha                     ; Save it
-        and     #%11111100      ; Clear bit 0 and 1
-        sta     $01
-        txa                     ; Load color code
-@L2:    sta     CBASE+$0000,y
-        sta     CBASE+$0100,y
-        sta     CBASE+$0200,y
-        sta     CBASE+$0300,y
-        iny
-        bne     @L2
-        pla
-        sta     $01
-        cli
-
-; Done, reset the error code
-
-        lda     #TGI_ERR_OK
-        sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; GETPALETTE: Return the current palette in A/X. Even drivers that cannot
-; set the palette should return the default palette here, so there's no
-; way for this function to fail.
-;
-; Must set an error code: NO
-;
-
-GETPALETTE:
-        lda     #<PALETTE
-        ldx     #>PALETTE
-        rts
-
-; ------------------------------------------------------------------------
-; GETDEFPALETTE: Return the default palette for the driver in A/X. All
-; drivers should return something reasonable here, even drivers that don't
-; support palettes, otherwise the caller has no way to determine the colors
-; of the (not changeable) palette.
-;
-; Must set an error code: NO (all drivers must have a default palette)
-;
-
-GETDEFPALETTE:
-        lda     #<DEFPALETTE
-        ldx     #>DEFPALETTE
-        rts
-
-; ------------------------------------------------------------------------
-; SETPIXEL: Draw one pixel at X1/Y1 = ptr1/ptr2 with the current drawing
-; color. The coordinates passed to this function are never outside the
-; visible screen area, so there is no need for clipping inside this function.
-;
-; Must set an error code: NO
-;
-
-SETPIXEL:
-        jsr     CALC            ; Calculate coordinates
-
-        sei                     ; Get underneath ROM
-        lda     $01
-        pha
-        lda     #$34
-        sta     $01
-
-        lda     (POINT),Y
-        eor     BITMASK
-        and     BITTAB,X
-        eor     (POINT),Y
-        sta     (POINT),Y
-
-        pla
-        sta     $01
-        cli
-
-@L9:    rts
-
-; ------------------------------------------------------------------------
-; GETPIXEL: Read the color value of a pixel and return it in A/X. The
-; coordinates passed to this function are never outside the visible screen
-; area, so there is no need for clipping inside this function.
-
-
-GETPIXEL:
-        jsr     CALC            ; Calculate coordinates
-
-        sei                     ; Get underneath ROM
-        lda     $01
-        pha
-        lda     #$34
-        sta     $01
-
-        lda     (POINT),Y
-        ldy     #$00
-        and     BITTAB,X
-        beq     @L1
-        iny
-
-@L1:    pla
-        sta     $01
-        cli
-
-        tya                     ; Get color value into A
-        ldx     #$00            ; Clear high byte
-        rts
-
-; ------------------------------------------------------------------------
-; LINE: Draw a line from X1/Y1 to X2/Y2, where X1/Y1 = ptr1/ptr2 and
-; X2/Y2 = ptr3/ptr4 using the current drawing color.
-;
-; To deal with off-screen coordinates, the current row
-; and column (40x25) is kept track of.  These are set
-; negative when the point is off the screen, and made
-; positive when the point is within the visible screen.
-;
-; X1,X2 etc. are set up above (x2=LINNUM in particular)
-; Format is LINE x2,y2,x1,y1
-;
-; Must set an error code: NO
-;
-
-LINE:
-
-@CHECK: lda     X2           ;Make sure x1<x2
-        sec
-        sbc     X1
-        tax
-        lda     X2+1
-        sbc     X1+1
-        bpl     @CONT
-        lda     Y2           ;If not, swap P1 and P2
-        ldy     Y1
-        sta     Y1
-        sty     Y2
-        lda     Y2+1
-        ldy     Y1+1
-        sta     Y1+1
-        sty     Y2+1
-        lda     X1
-        ldy     X2
-        sty     X1
-        sta     X2
-        lda     X2+1
-        ldy     X1+1
-        sta     X1+1
-        sty     X2+1
-        bcc     @CHECK
-
-@CONT:  sta     DX+1
-        stx     DX
-
-        ldx     #$C8         ;INY
-        lda     Y2           ;Calculate dy
-        sec
-        sbc     Y1
-        tay
-        lda     Y2+1
-        sbc     Y1+1
-        bpl     @DYPOS       ;Is y2>=y1?
-        lda     Y1           ;Otherwise dy=y1-y2
-        sec
-        sbc     Y2
-        tay
-        ldx     #$88         ;DEY
-
-@DYPOS: sty     DY              ; 8-bit DY -- FIX ME?
-        stx     YINCDEC
-        stx     XINCDEC
-
-        jsr     CALC            ; Set up .X,.Y,POINT, and INRANGE
-        lda     BITCHUNK,X
-        sta     OLDCHUNK
-        sta     CHUNK
-
-        sei                     ; Get underneath ROM
-        lda     #$34
-        sta     $01
-
-        ldx     DY
-        cpx     DX           ;Who's bigger: dy or dx?
-        bcc     STEPINX      ;If dx, then...
-        lda     DX+1
-        bne     STEPINX
-
-;
-; Big steps in Y
-;
-;   To simplify my life, just use PLOT to plot points.
-;
-;   No more!
-;   Added special plotting routine -- cool!
-;
-;   X is now counter, Y is y-coordinate
-;
-; On entry, X=DY=number of loop iterations, and Y=
-;   Y1 AND #$07
-STEPINY:
-        lda     #00
-        sta     OLDCHUNK     ;So plotting routine will work right
-        lda     CHUNK
-        lsr                  ;Strip the bit
-        eor     CHUNK
-        sta     CHUNK
-        txa
-        bne     @CONT        ;If dy=0 it's just a point
-        inx
-@CONT:  lsr                  ;Init counter to dy/2
-;
-; Main loop
-;
-YLOOP:  sta     TEMP
-
-        lda     INRANGE      ;Range check
-        bne     @SKIP
-
-        lda     (POINT),y    ;Otherwise plot
-        eor     BITMASK
-        and     CHUNK
-        eor     (POINT),y
-        sta     (POINT),y
-@SKIP:
-YINCDEC:
-        iny                  ;Advance Y coordinate
-        cpy     #8
-        bcc     @CONT        ;No prob if Y=0..7
-        jsr     FIXY
-@CONT:  lda     TEMP         ;Restore A
-        sec
-        sbc     DX
-        bcc     YFIXX
-YCONT:  dex                  ;X is counter
-        bne     YLOOP
-YCONT2: lda     (POINT),y    ;Plot endpoint
-        eor     BITMASK
-        and     CHUNK
-        eor     (POINT),y
-        sta     (POINT),y
-YDONE:  lda     #$36
-        sta     $01
-        cli
-        rts
-
-YFIXX:                    ;x=x+1
-        adc     DY
-        lsr     CHUNK
-        bne     YCONT        ;If we pass a column boundary...
-        ror     CHUNK        ;then reset CHUNK to $80
-        sta     TEMP2
-        lda     COL
-        bmi     @C1          ;Skip if column is negative
-        cmp     #39          ;End if move past end of screen
-        bcs     YDONE
-@C1:    lda     POINT        ;And add 8 to POINT
-        adc     #8
-        sta     POINT
-        bcc     @CONT
-        inc     POINT+1
-@CONT:  inc     COL          ;Increment column
-        bne     @C2
-        lda     ROW          ;Range check
-        cmp     #25
-        bcs     @C2
-        lda     #00          ;Passed into col 0
-        sta     INRANGE
-@C2:    lda     TEMP2
-        dex
-        bne     YLOOP
-        beq     YCONT2
-
-;
-; Big steps in X direction
-;
-; On entry, X=DY=number of loop iterations, and Y=
-;   Y1 AND #$07
-
-.bss
-COUNTHI:
-        .byte   $00       ;Temporary counter
-                          ;only used once
-.code
-STEPINX:
-        ldx     DX
-        lda     DX+1
-        sta     COUNTHI
-        cmp     #$80
-        ror                  ;Need bit for initialization
-        sta     Y1           ;High byte of counter
-        txa
-        bne     @CONT        ;Could be $100
-        dec     COUNTHI
-@CONT:  ror
-;
-; Main loop
-;
-XLOOP:  lsr     CHUNK
-        beq     XFIXC        ;If we pass a column boundary...
-XCONT1: sbc     DY
-        bcc     XFIXY        ;Time to step in Y?
-XCONT2: dex
-        bne     XLOOP
-        dec     COUNTHI      ;High bits set?
-        bpl     XLOOP
-
-XDONE:  lsr     CHUNK        ;Advance to last point
-        jsr     LINEPLOT     ;Plot the last chunk
-EXIT:   lda     #$36
-        sta     $01
-        cli
-        rts
-;
-; CHUNK has passed a column, so plot and increment pointer
-; and fix up CHUNK, OLDCHUNK.
-;
-XFIXC:  sta     TEMP
-        jsr     LINEPLOT
-        lda     #$FF
-        sta     CHUNK
-        sta     OLDCHUNK
-        lda     COL
-        bmi     @C1          ;Skip if column is negative
-        cmp     #39          ;End if move past end of screen
-        bcs     EXIT
-@C1:    lda     POINT
-        adc     #8
-        sta     POINT
-        bcc     @CONT
-        inc     POINT+1
-@CONT:  inc     COL
-        bne     @C2
-        lda     ROW
-        cmp     #25
-        bcs     @C2
-        lda     #00
-        sta     INRANGE
-@C2:    lda     TEMP
-        sec
-        bcs     XCONT1
-;
-; Check to make sure there isn't a high bit, plot chunk,
-; and update Y-coordinate.
-;
-XFIXY:  dec     Y1           ;Maybe high bit set
-        bpl     XCONT2
-        adc     DX
-        sta     TEMP
-        lda     DX+1
-        adc     #$FF         ;Hi byte
-        sta     Y1
-
-        jsr     LINEPLOT     ;Plot chunk
-        lda     CHUNK
-        sta     OLDCHUNK
-
-        lda     TEMP
-XINCDEC:
-        iny                  ;Y-coord
-        cpy     #8           ;0..7 is ok
-        bcc     XCONT2
-        sta     TEMP
-        jsr     FIXY
-        lda     TEMP
-        jmp     XCONT2
-
-;
-; Subroutine to plot chunks/points (to save a little
-; room, gray hair, etc.)
-;
-LINEPLOT:                       ; Plot the line chunk
-        lda     INRANGE
-        bne     @SKIP
-
-        lda     (POINT),Y       ; Otherwise plot
-        eor     BITMASK
-        ora     CHUNK
-        and     OLDCHUNK
-        eor     CHUNK
-        eor     (POINT),Y
-        sta     (POINT),Y
-@SKIP:  rts
-
-;
-; Subroutine to fix up pointer when Y decreases through
-; zero or increases through 7.
-;
-FIXY:   cpy     #255         ;Y=255 or Y=8
-        beq     @DECPTR
-@INCPTR:                     ;Add 320 to pointer
-        ldy     #0           ;Y increased through 7
-        lda     ROW
-        bmi     @C1          ;If negative, then don't update
-        cmp     #24
-        bcs     @TOAST       ;If at bottom of screen then quit
-@C1:    lda     POINT
-        adc     #<320
-        sta     POINT
-        lda     POINT+1
-        adc     #>320
-        sta     POINT+1
-@CONT1: inc     ROW
-        bne     @DONE
-        lda     COL
-        bpl     @CLEAR
-@DONE:  rts
-
-@DECPTR:                     ;Okay, subtract 320 then
-        ldy     #7           ;Y decreased through 0
-        lda     POINT
-        sec
-        sbc     #<320
-        sta     POINT
-        lda     POINT+1
-        sbc     #>320
-        sta     POINT+1
-@CONT2: dec     ROW
-        bmi     @TOAST
-        lda     ROW
-        cmp     #24
-        bne     @DONE
-        lda     COL
-        bmi     @DONE
-@CLEAR: lda     #00
-        sta     INRANGE
-        rts
-
-@TOAST: pla                  ;Remove old return address
-        pla
-        jmp     EXIT         ;Restore interrupts, etc.
-
-; ------------------------------------------------------------------------
-; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where
-; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4 using the current drawing color.
-; Contrary to most other functions, the graphics kernel will sort and clip
-; the coordinates before calling the driver, so on entry the following
-; conditions are valid:
-;       X1 <= X2
-;       Y1 <= Y2
-;       (X1 >= 0) && (X1 < XRES)
-;       (X2 >= 0) && (X2 < XRES)
-;       (Y1 >= 0) && (Y1 < YRES)
-;       (Y2 >= 0) && (Y2 < YRES)
-;
-; Must set an error code: NO
-;
-
-; Note: This function needs optimization. It's just a cheap translation of
-; the original C wrapper and could be written much smaller (besides that,
-; calling LINE is not a good idea either).
-
-BAR:    lda     Y2
-        sta     Y2SAVE
-        lda     Y2+1
-        sta     Y2SAVE+1
-
-        lda     X2
-        sta     X2SAVE
-        lda     X2+1
-        sta     X2SAVE+1
-
-        lda     Y1
-        sta     Y1SAVE
-        lda     Y1+1
-        sta     Y1SAVE+1
-
-        lda     X1
-        sta     X1SAVE
-        lda     X1+1
-        sta     X1SAVE+1
-
-@L1:    lda     Y1
-        sta     Y2
-        lda     Y1+1
-        sta     Y2+1
-        jsr     LINE
-
-        lda     Y1SAVE
-        cmp     Y2SAVE
-        bne     @L2
-        lda     Y1SAVE
-        cmp     Y2SAVE
-        beq     @L4
-
-@L2:    inc     Y1SAVE
-        bne     @L3
-        inc     Y1SAVE+1
-
-@L3:    lda     Y1SAVE
-        sta     Y1
-        lda     Y1SAVE+1
-        sta     Y1+1
-
-        lda     X1SAVE
-        sta     X1
-        lda     X1SAVE+1
-        sta     X1+1
-
-        lda     X2SAVE
-        sta     X2
-        lda     X2SAVE+1
-        sta     X2+1
-        jmp     @L1
-
-@L4:    rts
-
-
-; ------------------------------------------------------------------------
-; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scaling in X and Y
-; direction is passend in X/Y, the text direction is passed in A.
-;
-; Must set an error code: NO
-;
-
-TEXTSTYLE:
-        stx     TEXTMAGX
-        sty     TEXTMAGY
-        sta     TEXTDIR
-        rts
-
-
-; ------------------------------------------------------------------------
-; OUTTEXT: Output text at X/Y = ptr1/ptr2 using the current color and the
-; current text style. The text to output is given as a zero terminated
-; string with address in ptr3.
-;
-; Must set an error code: NO
-;
-
-OUTTEXT:
-
-; Calculate a pointer to the representation of the character in the
-; character ROM 
-
-        ldx     #((>(CHARROM + $0800)) >> 3)
-        ldy     #0
-        lda     (TEXT),y
-        bmi     @L1
-        ldx     #((>(CHARROM + $0000)) >> 3)
-@L1:    stx     ptr4+1
-        asl     a
-        rol     ptr4+1
-        asl     a
-        rol     ptr4+1
-        asl     a
-        rol     ptr4+1
-        sta     ptr4
-
-
-
-
-
-        rts
-
-; ------------------------------------------------------------------------
-; Calculate all variables to plot the pixel at X1/Y1. If the point is out
-; of range, a carry is returned and INRANGE is set to a value !0 zero. If
-; the coordinates are valid, INRANGE is zero and the carry clear.
-
-CALC:   lda     Y1
-        sta     ROW
-        and     #7
-        tay
-        lda     Y1+1
-        lsr                     ; Neg is possible
-        ror     ROW
-        lsr
-        ror     ROW
-        lsr
-        ror     ROW
-
-        lda     #00
-        sta     POINT
-        lda     ROW
-        cmp     #$80
-        ror
-        ror     POINT
-        cmp     #$80
-        ror
-        ror     POINT           ; row*64
-        adc     ROW             ; +row*256
-        clc
-        adc     #>VBASE         ; +bitmap base
-        sta     POINT+1
-
-        lda     X1
-        tax
-        sta     COL
-        lda     X1+1
-        lsr
-        ror     COL
-        lsr
-        ror     COL
-        lsr
-        ror     COL
-
-        txa
-        and     #$F8
-        clc
-        adc     POINT           ; +(X AND #$F8)
-        sta     POINT
-        lda     X1+1
-        adc     POINT+1
-        sta     POINT+1
-        txa
-        and     #7
-        tax
-
-        lda     ROW
-        cmp     #25
-        bcs     @L9
-        lda     COL
-        cmp     #40
-        bcs     @L9
-        lda     #00
-@L9:    sta     INRANGE
-        rts
-
-
diff --git a/libsrc/c64/tgi_colors.s b/libsrc/c64/tgi_colors.s
deleted file mode 100644 (file)
index 6ef3729..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-;
-; Target-specific black & white values for use by the target-shared TGI kernel
-;
-
-        .include        "tgi-kernel.inc"
-
-        .export         tgi_color_black:zp = $00
-        .export         tgi_color_white:zp = $01
diff --git a/libsrc/c64/tgi_stat_stddrv.s b/libsrc/c64/tgi_stat_stddrv.s
deleted file mode 100644 (file)
index 03ef91b..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Address of the static standard tgi driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void tgi_static_stddrv[];
-;
-
-        .export _tgi_static_stddrv
-        .import _c64_hi_tgi
-
-.rodata
-
-_tgi_static_stddrv := _c64_hi_tgi
diff --git a/libsrc/c64/tgi_stddrv.s b/libsrc/c64/tgi_stddrv.s
deleted file mode 100644 (file)
index c87fed3..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Name of the standard tgi driver
-;
-; Oliver Schmidt, 2011-05-02
-;
-; const char tgi_stddrv[];
-;
-
-        .export _tgi_stddrv
-
-.rodata
-
-_tgi_stddrv:    .asciiz "c64-hi.tgi"
diff --git a/libsrc/cbm/c_acptr.s b/libsrc/cbm/c_acptr.s
deleted file mode 100644 (file)
index 87f063a..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1999
-;
-; unsigned char cbm_k_acptr (void);
-;
-
-        .export         _cbm_k_acptr
-        .import         ACPTR
-
-
-_cbm_k_acptr:
-        jsr     ACPTR
-        ldx     #0
-        rts
diff --git a/libsrc/cbm/c_basin.s b/libsrc/cbm/c_basin.s
deleted file mode 100644 (file)
index 15d7e7f..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1999
-;
-; unsigned char cbm_k_basin (void);
-;
-
-        .export         _cbm_k_basin
-        .import         BASIN
-
-
-_cbm_k_basin:
-        jsr     BASIN
-        ldx     #0              ; Clear high byte
-        rts
diff --git a/libsrc/cbm/c_bsout.s b/libsrc/cbm/c_bsout.s
deleted file mode 100644 (file)
index 8b9f440..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1999
-;
-; void __fastcall__ cbm_k_bsout (unsigned char C);
-;
-
-        .export         _cbm_k_bsout
-        .import         BSOUT
-
-_cbm_k_bsout = BSOUT
diff --git a/libsrc/cbm/c_chkin.s b/libsrc/cbm/c_chkin.s
deleted file mode 100644 (file)
index 4ed8c1b..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Marc 'BlackJack' Rintsch, 20.03.2001
-;
-; unsigned char __fastcall__ cbm_k_chkin (unsigned char FN);
-;
-
-        .export         _cbm_k_chkin
-        .import         CHKIN
-
-_cbm_k_chkin:
-        tax
-        jsr     CHKIN
-        ldx     #0              ; Clear high byte
-        bcs     @NotOk
-        txa
-@NotOk: rts
-
diff --git a/libsrc/cbm/c_ciout.s b/libsrc/cbm/c_ciout.s
deleted file mode 100644 (file)
index 9906e06..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1999
-;
-; void __fastcall__ cbm_k_ciout (unsigned char C);
-;
-
-        .import         CIOUT
-        .export         _cbm_k_ciout := CIOUT
-
-
diff --git a/libsrc/cbm/c_ckout.s b/libsrc/cbm/c_ckout.s
deleted file mode 100644 (file)
index 380d717..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1999
-;
-; unsigned char __fastcall__ cbm_k_ckout (unsigned char FN);
-;
-
-        .export         _cbm_k_ckout
-        .import         CKOUT
-
-
-_cbm_k_ckout:
-        tax
-        jsr     CKOUT
-        ldx     #0              ; Clear high byte
-        bcs     @NotOk
-        txa
-@NotOk: rts
diff --git a/libsrc/cbm/c_clall.s b/libsrc/cbm/c_clall.s
deleted file mode 100644 (file)
index cdd7d4d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1999
-;
-; void cbm_k_clall (void);
-;
-
-        .import         CLALL
-        .export         _cbm_k_clall := CLALL
diff --git a/libsrc/cbm/c_close.s b/libsrc/cbm/c_close.s
deleted file mode 100644 (file)
index 9582bac..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1999
-;
-; void __fastcall__ cbm_k_close (unsigned char FN);
-;
-
-        .export         _cbm_k_close
-        .import         CLOSE
-
-_cbm_k_close:
-        clc                  
-        jmp     CLOSE
-
-
diff --git a/libsrc/cbm/c_clrch.s b/libsrc/cbm/c_clrch.s
deleted file mode 100644 (file)
index 7c0506a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1999
-;
-; void cbm_k_clrch (void);
-;
-
-        .export         _cbm_k_clrch
-        .import         CLRCH
-
-_cbm_k_clrch = CLRCH
diff --git a/libsrc/cbm/c_getin.s b/libsrc/cbm/c_getin.s
deleted file mode 100644 (file)
index b4cb34f..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Ullrich von Bassewitz, 2012-07-01
-;
-; unsigned char cbm_k_getin (void);
-;
-
-        .export         _cbm_k_getin
-        .import         GETIN
-
-
-_cbm_k_getin:
-        jsr     GETIN
-        ldx     #0
-        rts
diff --git a/libsrc/cbm/c_iobase.s b/libsrc/cbm/c_iobase.s
deleted file mode 100644 (file)
index 2548790..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1999
-;
-; unsigned cbm_k_iobase (void);
-;
-
-        .export         _cbm_k_iobase
-        .import         IOBASE
-
-_cbm_k_iobase:                   
-        jsr     IOBASE
-        txa
-        pha
-        tya
-        tax
-        pla
-        rts
diff --git a/libsrc/cbm/c_listen.s b/libsrc/cbm/c_listen.s
deleted file mode 100644 (file)
index 85ef8b7..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1999
-;
-; void __fastcall__ cbm_k_listen (unsigned char dev);
-;
-
-        .import         LISTEN
-        .export         _cbm_k_listen := LISTEN
-
-
-
-
-
diff --git a/libsrc/cbm/c_load.s b/libsrc/cbm/c_load.s
deleted file mode 100644 (file)
index f2b5b0c..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1999
-;
-; unsigned int __fastcall__ cbm_k_load (unsigned char flag, unsigned addr);
-;
-
-        .export         _cbm_k_load
-        .import         LOAD
-        .import         __oserror
-        .import         popa
-        .importzp       ptr1
-
-_cbm_k_load:
-        sta     ptr1
-        stx     ptr1+1
-        jsr     popa            ; get flag
-        ldx     ptr1
-        ldy     ptr1+1
-        jsr     LOAD
-        bcc     @Ok
-        sta     __oserror
-        ldx     ptr1
-        ldy     ptr1+1
-@Ok:    txa
-        pha
-        tya
-        tax
-        pla
-        rts
-
diff --git a/libsrc/cbm/c_open.s b/libsrc/cbm/c_open.s
deleted file mode 100644 (file)
index 6461ffe..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1999
-;
-; unsigned char cbm_k_open (void);
-;
-
-        .export         _cbm_k_open
-        .import         OPEN
-
-
-_cbm_k_open:
-        jsr     OPEN
-        ldx     #0              ; Clear high byte
-        bcs     @NotOk
-        txa
-@NotOk: rts
diff --git a/libsrc/cbm/c_readst.s b/libsrc/cbm/c_readst.s
deleted file mode 100644 (file)
index 301cd9b..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1999
-;
-; unsigned char cbm_k_readst (void);
-;
-
-        .export         _cbm_k_readst
-        .import         READST
-
-
-_cbm_k_readst:
-        jsr     READST
-        ldx     #0              ; Clear high byte
-        rts
diff --git a/libsrc/cbm/c_save.s b/libsrc/cbm/c_save.s
deleted file mode 100644 (file)
index dfdb7df..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; Marc 'BlackJack' Rintsch, 11.06.1999
-;
-; unsigned char __fastcall__ cbm_k_save(unsigned int start, unsigned int end);
-;
-
-        .export         _cbm_k_save
-        .import         SAVE
-        .import         popax
-        .importzp       ptr1, tmp1
-
-
-_cbm_k_save:
-        sta     tmp1            ; store end address
-        stx     tmp1+1
-        jsr     popax           ; pop start address
-        sta     ptr1
-        stx     ptr1+1
-        lda     #ptr1
-        ldx     tmp1
-        ldy     tmp1+1
-        jsr     SAVE
-        ldx     #0              ; Clear high byte
-        bcs     @NotOk
-        txa
-@NotOk: rts
diff --git a/libsrc/cbm/c_setlfs.s b/libsrc/cbm/c_setlfs.s
deleted file mode 100644 (file)
index 00ebfae..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1999
-;
-; void __fastcall__ cbm_k_setlfs (unsigned char LFN,
-;                                 unsigned char DEV,
-;                                 unsigned char SA);
-;
-
-        .export         _cbm_k_setlfs
-        .import         SETLFS
-        .import         popa
-        .importzp       tmp1
-                              
-
-_cbm_k_setlfs:
-        sta     tmp1            ; Save SA
-        jsr     popa            ; Get DEV
-        tax
-        jsr     popa            ; Get LFN
-        ldy     tmp1            ; Get SA
-        jmp     SETLFS
-
-
diff --git a/libsrc/cbm/c_setnam.s b/libsrc/cbm/c_setnam.s
deleted file mode 100644 (file)
index 3249d85..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1999
-;
-; void __fastcall__ cbm_k_setnam (const char* Name);
-;
-
-        .export         _cbm_k_setnam
-        .import         SETNAM
-        .importzp       ptr1
-                              
-
-_cbm_k_setnam:
-        sta     ptr1            ; Store pointer to file name
-        stx     ptr1+1
-        ldy     #$FF
-@Loop:  iny                     ; Get length of name
-        lda     (ptr1),y
-        bne     @Loop
-
-        tya                     ; Length
-        ldx     ptr1
-        ldy     ptr1+1
-        jmp     SETNAM
-
diff --git a/libsrc/cbm/c_talk.s b/libsrc/cbm/c_talk.s
deleted file mode 100644 (file)
index ff80b34..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1999
-;
-; void __fastcall__ cbm_k_talk (unsigned char dev);
-;
-
-        .import         TALK
-        .export         _cbm_k_talk := TALK
-
-
-
-
-
-
-
diff --git a/libsrc/cbm/c_unlsn.s b/libsrc/cbm/c_unlsn.s
deleted file mode 100644 (file)
index fd6b1b0..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1999
-;
-; void cbm_k_unlsn (void);
-;
-
-        .import         UNLSN
-        .export         _cbm_k_unlsn := UNLSN
diff --git a/libsrc/cbm/c_untlk.s b/libsrc/cbm/c_untlk.s
deleted file mode 100644 (file)
index 1d71c16..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1999
-;
-; void cbm_untlk (void);
-;
-
-        .export         _cbm_untlk
-        .import         UNTLK
-
-
-_cbm_untlk = UNTLK
diff --git a/libsrc/cbm/cbm.inc b/libsrc/cbm/cbm.inc
deleted file mode 100644 (file)
index 0e513ff..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-;
-; Include file for the Commdore 6502 machines
-;
-
-
-;-----------------------------------------------------------------------------
-; Subroutines available in the CBM jump table
-;
-
-;CINT           = $FF81
-;IOINIT         = $FF84
-;RAMTAS         = $FF87
-;RESTOR         = $FF8A
-;VECTOR         = $FF8D
-;SETMSG         = $FF90
-;SECOND         = $FF93
-;TKSA           = $FF96
-;MEMTOP         = $FF99
-;MEMBOT         = $FF9C
-;SCNKEY         = $FF9F
-;SETTMO         = $FFA2
-;ACPTR          = $FFA5
-;CIOUT          = $FFA8
-;UNTLK          = $FFAB
-;UNLSN          = $FFAE
-;LISTEN         = $FFB1
-;TALK           = $FFB4
-;READST         = $FFB7
-;SETLFS         = $FFBA
-;SETNAM         = $FFBD
-;OPEN           = $FFC0
-;CLOSE          = $FFC3
-;CHKIN          = $FFC6
-;CKOUT          = $FFC9
-;CLRCH          = $FFCC
-;BASIN          = $FFCF
-;BSOUT          = $FFD2
-;LOAD           = $FFD5
-;SAVE           = $FFD8
-;SETTIM         = $FFDB
-;RDTIM          = $FFDE
-;STOP           = $FFE1
-;GETIN          = $FFE4
-;CLALL          = $FFE7
-;UDTIM          = $FFEA
-;SCREEN         = $FFED
-;PLOT           = $FFF0
-;IOBASE         = $FFF3
-
-
-;-----------------------------------------------------------------------------
-; Device numbers
-;
-
-CBMDEV_KBD      = 0
-CBMDEV_DATASETTE= 1
-CBMDEV_RS232    = 2
-CBMDEV_SCREEN   = 3
-
-;-----------------------------------------------------------------------------
-; Disk stuff
-;
-
-MAX_DRIVES      = 23
-FIRST_DRIVE     = 8
-
-
diff --git a/libsrc/cbm/cbm_close.s b/libsrc/cbm/cbm_close.s
deleted file mode 100644 (file)
index b00a5c7..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Marc 'BlackJack' Rintsch, 18.03.2001
-;
-; void __fastcall__ cbm_close (unsigned char lfn);
-;
-
-        .import _cbm_k_close
-        .export _cbm_close
-
-_cbm_close = _cbm_k_close
diff --git a/libsrc/cbm/cbm_dir.c b/libsrc/cbm/cbm_dir.c
deleted file mode 100644 (file)
index 8f31c50..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-/* This is a very simplified version of the POSIX opendir(),  */
-/* readdir(), and closedir() -- for Commodore computers.      */
-/* Created by Josef Soucek, 2003.  E-mail: josef.soucek@ct.cz */
-
-/* 2003-01-21 -- Version 0.1 */
-/* 2009-10-10 -- Version 0.3 */
-/* 2011-04-07 -- Version 0.4, groepaz */
-/* 2011-04-14 -- Version 0.5, Greg King */
-
-/* Tested with floppy-drive and IDE64 devices.        */
-/* Not tested with messed (buggy) directory listings. */
-/* Limits filenames to 16 chars. (VICE supports more  */
-/* in directory listings).                            */
-
-
-#include <stdarg.h>
-#include <cbm.h>
-#include <errno.h>
-
-
-
-/* Opens directory listing. Returns 0 if opening directory was successful;
-** otherwise, an error-code corresponding to cbm_open(). As an optional
-** argument, the name of the directory may be passed to the function. If
-** no explicit name is specified, "$" is used.
-*/
-unsigned char cbm_opendir (unsigned char lfn, unsigned char device, ...)
-{
-    va_list ap;
-    const char* name = "$";
-
-    /* The name used in cbm_open may optionally be passed */
-    if (__argsize__ == 4) {
-        va_start (ap, device);
-        name = va_arg (ap, const char*);
-        va_end (ap);
-    }
-
-    /* Open the directory */
-    if (cbm_open (lfn, device, CBM_READ, name) == 0) {
-        if ((_oserror = cbm_k_chkin (lfn)) == 0) {
-            /* Ignore start address */
-            cbm_k_basin();
-            cbm_k_basin();
-            cbm_k_clrch();
-            if (cbm_k_readst()) {
-                cbm_close(lfn);
-                _oserror = 4;           /* directory cannot be read */
-            }
-        }
-    }
-    return _oserror;
-}
-
-
-
-/* Reads one directory line into cbm_dirent structure.
-** Returns 0 if reading directory-line was successful.
-** Returns non-zero if reading directory failed, or no more file-names to read.
-** Returns 2 on last line.  Then, l_dirent->size = the number of "blocks free."
-*/
-unsigned char __fastcall__ cbm_readdir (unsigned char lfn, register struct cbm_dirent* l_dirent)
-{
-    unsigned char byte, i = 0;
-    unsigned char is_header = 0;
-    unsigned char rv = 1;
-
-    if (!cbm_k_chkin(lfn)) {
-        if (!cbm_k_readst()) {
-            /* skip 2 bytes, next-BASIC-line pointer */
-            cbm_k_basin();
-            cbm_k_basin();
-
-            /* File-size or drive/partition number */
-            l_dirent->size = cbm_k_basin() | (cbm_k_basin() << 8);
-
-            byte = cbm_k_basin();
-            switch (byte) {
-
-                /* "B" BLOCKS FREE. */
-              case 'b':
-                /* Read until end; careless callers might call us again. */
-                while (!cbm_k_readst()) {
-                    cbm_k_basin();
-                }
-                rv = 2; /* EOF */
-                goto ret_val;
-
-                /* Reverse-text shows when this is the directory header. */
-              case 0x12:  /* RVS_ON */
-                is_header = 1;
-            }
-
-            while (byte != '\"') {
-                /* prevent endless loop */
-                if (cbm_k_readst()) {
-                    rv = 3;
-                    goto ret_val;
-                }
-                byte = cbm_k_basin();
-            }
-
-            while ((byte = cbm_k_basin()) != '\"') {
-                /* prevent endless loop */
-                if (cbm_k_readst()) {
-                    rv = 4;
-                    goto ret_val;
-                }
-
-                if (i < sizeof (l_dirent->name) - 1) {
-                    l_dirent->name[i] = byte;
-                    ++i;
-                }
-            }
-            l_dirent->name[i] = '\0';
-
-            if (is_header) {
-                l_dirent->type = CBM_T_HEADER;
-
-                /* Get the disk-format code. */
-                i = 6;
-                do {
-                    l_dirent->access = byte = cbm_k_basin();
-                } while (--i != 0);
-
-            } else {
-                /* Go to the file-type column. */
-                while ((byte = cbm_k_basin()) == ' ') {
-                    /* prevent endless loop */
-                    if (cbm_k_readst()) {
-                        rv = 5;
-                        goto ret_val;
-                    }
-                }
-
-                l_dirent->access = CBM_A_RW;
-
-                /* "Splat" files shouldn't be read. */
-                if (byte == '*') {
-                    l_dirent->access = CBM_A_WO;
-                    byte = cbm_k_basin();
-                }
-
-                /* Determine the file type */
-                l_dirent->type = _cbm_filetype (byte);
-
-                /* Notice whether it's a directory or a deleted file. */
-                if (cbm_k_basin() == 'i' && byte == 'd') {
-                    l_dirent->type = CBM_T_DIR;
-                }
-                cbm_k_basin();
-
-                /* Locked files shouldn't be written. */
-                if ((byte = cbm_k_basin()) == '<') {
-                    l_dirent->access = (l_dirent->access == CBM_A_WO)
-                        ? 0 : CBM_A_RO;
-                }
-            }
-
-            /* Read to the end of the line. */
-            while (byte != 0) {
-                /* prevent endless loop */
-                if (cbm_k_readst()) {
-                    rv = 6;
-                    goto ret_val;
-                }
-                byte = cbm_k_basin();
-            }
-
-            rv = 0;
-            goto ret_val;
-        }
-    }
-
-ret_val:
-    cbm_k_clrch();
-    return rv;
-}
-
-
-
-void __fastcall__ cbm_closedir (unsigned char lfn)
-{
-    cbm_close(lfn);
-}
-
-
diff --git a/libsrc/cbm/cbm_filetype.s b/libsrc/cbm/cbm_filetype.s
deleted file mode 100644 (file)
index 3df5de3..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-;
-; Determine the CBM file type. From cbm_dir.c by Josef Soucek. Moved into an
-; assembler function by Ullrich von Bassewitz 2012-06-03
-;
-; unsigned char __fastcall__ _cbm_filetype (unsigned char c);
-;
-
-        .include "cbm_filetype.inc"
-
-        .macpack generic
-
-
-; --------------------------------------------------------------------------
-; Table with types for a list of start characters
-
-.rodata
-.proc   TypeTable
-        .byte   CBM_T_CBM       ; c
-        .byte   CBM_T_DEL       ; d
-        .byte   CBM_T_OTHER     ; e
-        .byte   CBM_T_OTHER     ; f
-        .byte   CBM_T_OTHER     ; g
-        .byte   CBM_T_OTHER     ; h
-        .byte   CBM_T_OTHER     ; i
-        .byte   CBM_T_OTHER     ; j
-        .byte   CBM_T_OTHER     ; k
-        .byte   CBM_T_LNK       ; l
-        .byte   CBM_T_OTHER     ; m
-        .byte   CBM_T_OTHER     ; n
-        .byte   CBM_T_OTHER     ; o
-        .byte   CBM_T_PRG       ; p
-        .byte   CBM_T_OTHER     ; q
-        .byte   CBM_T_REL       ; r
-        .byte   CBM_T_SEQ       ; s
-        .byte   CBM_T_OTHER     ; t
-        .byte   CBM_T_USR       ; u
-        .byte   CBM_T_VRP       ; v
-.endproc
-
-
-; --------------------------------------------------------------------------
-; Mapper function
-
-.code
-.proc   __cbm_filetype
-
-        ldx     #0              ; Clear high byte
-
-; Check that the given char is in table range
-
-        sec
-        sbc     #'c'
-        bcc     L1
-        cmp     #.sizeof (TypeTable)
-        bge     L1
-
-; Ok, load the type
-
-        tay
-        lda     TypeTable,y
-        rts
-
-; Out of table range, return CBM_T_OTHER
-
-L1:     lda     #CBM_T_OTHER
-        rts
-
-.endproc
-
-
-
diff --git a/libsrc/cbm/cbm_load.c b/libsrc/cbm/cbm_load.c
deleted file mode 100644 (file)
index c1c6f56..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-** Marc 'BlackJack' Rintsch, 06.03.2001
-**
-** unsigned int __fastcall__ cbm_load(const char* name,
-**                                    unsigned char device,
-**                                    const unsigned char* data);
-*/
-
-#include <cbm.h>
-
-/* loads file "name" from given device to given address or to the load address
-** of the file if "data" is 0
-*/
-unsigned int __fastcall__ cbm_load(const char* name, unsigned char device, void* data)
-{
-    /* LFN is set to 0; but, it's not needed for loading
-    ** (BASIC V2 sets it to the value of the SA for LOAD).
-    */
-    cbm_k_setlfs(0, device, data == 0);
-    cbm_k_setnam(name);
-    return (cbm_k_load(0, (unsigned int)data) - (unsigned int)data);
-}
diff --git a/libsrc/cbm/cbm_open.s b/libsrc/cbm/cbm_open.s
deleted file mode 100644 (file)
index 1842fc1..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.06.2002
-;
-; Original C code by Marc 'BlackJack' Rintsch, 18.03.2001
-;
-; unsigned char __fastcall__ cbm_open (unsigned char lfn,
-;                                      unsigned char device,
-;                                      unsigned char sec_addr,
-;                                      const char* name);
-; /* Opens a file. Works just like the BASIC command.
-; ** Returns 0 if opening was successful, otherwise an errorcode (see table
-; ** below).
-; */
-; {
-;     cbm_k_setlfs(lfn, device, sec_addr);
-;     cbm_k_setnam(name);
-;     return _oserror = cbm_k_open();
-; }
-;
-
-        .export         _cbm_open
-        .import         popa
-        .import         _cbm_k_setlfs, _cbm_k_setnam, _cbm_k_open
-        .import         __oserror
-
-_cbm_open:
-        pha
-        txa
-        pha                     ; Save name
-
-        jsr     popa            ; Get sec_addr
-        jsr     _cbm_k_setlfs   ; Call SETLFS, pop all args
-
-        pla
-        tax
-        pla                     ; Get name
-        jsr     _cbm_k_setnam
-
-        jsr     _cbm_k_open
-        sta     __oserror
-
-        rts
-
-
diff --git a/libsrc/cbm/cbm_read.s b/libsrc/cbm/cbm_read.s
deleted file mode 100644 (file)
index c84ff65..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.06.2002
-;
-; Original C code by Marc 'BlackJack' Rintsch, 19.03.2001
-;
-; int __fastcall__ cbm_read (unsigned char lfn, void* buffer, unsigned int size)
-; /* Reads up to "size" bytes from a file to "buffer".
-; ** Returns the number of actually read bytes, 0 if there are no bytes left
-; ** (EOF) or -1 in case of an error. _oserror contains an errorcode then (see
-; ** table below).
-; */
-; {
-;     static unsigned int bytesread;
-;     static unsigned char tmp;
-;
-;     /* if we can't change to the inputchannel #lfn then return an error */
-;     if (_oserror = cbm_k_chkin(lfn)) return -1;
-;
-;     bytesread = 0;
-;
-;     while (bytesread<size && !cbm_k_readst()) {
-;         tmp = cbm_k_basin();
-;
-;         /* the kernal routine BASIN sets ST to EOF if the end of file
-;         ** is reached the first time, then we have store tmp.
-;         ** every subsequent call returns EOF and READ ERROR in ST, then
-;         ** we have to exit the loop here immediatly.
-;         */
-;         if (cbm_k_readst() & 0xBF) break;
-;
-;         ((unsigned char*)buffer)[bytesread++] = tmp;
-;     }
-;
-;     cbm_k_clrch();
-;     return bytesread;
-; }
-;
-
-        .include        "cbm.inc"
-
-        .export         _cbm_read
-        .import         CHKIN, READST, BASIN, CLRCH
-        .importzp       ptr1, ptr2, ptr3, tmp1
-        .import         popax, popa
-        .import         __oserror
-
-
-_cbm_read:
-        eor     #$FF
-        sta     ptr1
-        txa
-        eor     #$FF
-        sta     ptr1+1          ; Save -size-1
-
-        jsr     popax
-        sta     ptr2
-        stx     ptr2+1          ; Save buffer
-
-        jsr     popa
-        tax
-        jsr     CHKIN
-        bcs     @E1             ; Branch on error
-
-; bytesread = 0;
-
-        lda     #$00
-        sta     ptr3
-        sta     ptr3+1
-        beq     @L3             ; Branch always
-
-; Loop
-
-@L1:    jsr     READST
-        cmp     #0              ; Status ok?
-        bne     @L4
-
-        jsr     BASIN           ; Read next char from file
-        sta     tmp1            ; Save it for later
-
-        jsr     READST
-        and     #$BF
-        bne     @L4
-
-        lda     tmp1
-        ldy     #0
-        sta     (ptr2),y        ; Save read byte
-
-        inc     ptr2
-        bne     @L2
-        inc     ptr2+1          ; ++buffer;
-
-@L2:    inc     ptr3
-        bne     @L3
-        inc     ptr3+1          ; ++bytesread;
-
-@L3:    inc     ptr1
-        bne     @L1
-        inc     ptr1+1
-        bne     @L1
-
-@L4:    jsr     CLRCH
-
-        lda     ptr3
-        ldx     ptr3+1          ; return bytesread;
-
-        rts
-
-; CHKIN failed
-
-@E1:    sta     __oserror
-        lda     #$FF
-        tax
-        rts                     ; return -1
-
diff --git a/libsrc/cbm/cbm_save.c b/libsrc/cbm/cbm_save.c
deleted file mode 100644 (file)
index 7f774b1..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-** Marc 'BlackJack' Rintsch, 11.03.2001
-**
-** unsigned char cbm_save(const char* name,
-**                        char device,
-**                        unsigned char* data,
-**                        unsigned int size);
-*/
-
-#include <cbm.h>
-#include <errno.h>
-
-/* saves a memory area from start to end-1 to a file.
-*/
-unsigned char __fastcall__ cbm_save (const char* name, 
-                                     unsigned char device,
-                                     const void* data, 
-                                     unsigned int size)
-{
-    cbm_k_setlfs(0, device, 0);
-    cbm_k_setnam(name);
-    return _oserror =
-            cbm_k_save((unsigned int)data, ((unsigned int)data) + size);
-}
diff --git a/libsrc/cbm/cbm_write.s b/libsrc/cbm/cbm_write.s
deleted file mode 100644 (file)
index 0b709df..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-;
-; Ullrich von Bassewitz, 15.11.2002
-;
-; Original C code by Marc 'BlackJack' Rintsch, 25.03.2001
-;
-; int __fastcall__ cbm_write(unsigned char lfn, void* buffer, unsigned int size)
-; {
-;
-;     static unsigned int byteswritten;
-;
-;     /* if we can't change to the outputchannel #lfn then return an error */
-;     if (_oserror = cbm_k_ckout(lfn)) return -1;
-;
-;     byteswritten = 0;
-;
-;     while (byteswritten<size && !cbm_k_readst()) {
-;         cbm_k_bsout(((unsigned char*)buffer)[byteswritten++]);
-;     }
-;
-;     if (cbm_k_readst()) {
-;         _oserror = 5;       /* device not present */
-;         byteswritten = -1;
-;     }
-;
-;     cbm_k_clrch();
-;
-;     return byteswritten;
-; }
-;
-
-        .include        "cbm.inc"
-
-        .export         _cbm_write
-        .import         CKOUT, READST, BSOUT, CLRCH
-        .importzp       ptr1, ptr2, ptr3
-        .import         popax, popa
-        .import         __oserror
-                                                   
-
-_cbm_write:
-        sta     ptr3
-        stx     ptr3+1          ; Save size
-        eor     #$FF
-        sta     ptr1
-        txa
-        eor     #$FF
-        sta     ptr1+1          ; Save -size-1
-
-        jsr     popax
-        sta     ptr2
-        stx     ptr2+1          ; Save buffer
-
-        jsr     popa
-        tax
-        jsr     CKOUT
-        bcs     @E2             ; Branch on error
-        bcc     @L3             ; Branch always
-
-; Loop
-
-@L1:    jsr     READST
-        cmp     #0              ; Status ok?
-        bne     @E1
-
-        ldy     #0
-        lda     (ptr2),y        ;
-        inc     ptr2
-        bne     @L2
-        inc     ptr2+1          ; A = *buffer++;
-
-@L2:    jsr     BSOUT           ; cbm_k_bsout (A);
-
-@L3:    inc     ptr1            ; --size;
-        bne     @L1
-        inc     ptr1+1
-        bne     @L1
-
-        jsr     CLRCH
-
-        lda     ptr3
-        ldx     ptr3+1          ; return size;
-
-        rts
-
-; Error entry, called when READST fails
-
-@E1:    lda     #5
-
-; Error entry, error code is in A
-
-@E2:    sta     __oserror
-        lda     #$FF
-        tax
-        rts                     ; return -1
-
diff --git a/libsrc/cbm/cclear.s b/libsrc/cbm/cclear.s
deleted file mode 100644 (file)
index 233c112..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void cclearxy (unsigned char x, unsigned char y, unsigned char length);
-; void cclear (unsigned char length);
-;
-
-        .export         _cclearxy, _cclear
-        .import         popa, _gotoxy, cputdirect
-        .importzp       tmp1
-
-_cclearxy:
-        pha                     ; Save the length
-        jsr     popa            ; Get y
-        jsr     _gotoxy         ; Call this one, will pop params
-        pla                     ; Restore the length and run into _cclear
-
-_cclear:
-        cmp     #0              ; Is the length zero?
-        beq     L9              ; Jump if done
-        sta     tmp1                                 
-L1:     lda     #$20            ; Blank - screen code
-        jsr     cputdirect      ; Direct output
-        dec     tmp1
-        bne     L1
-L9:     rts
-
-
-
-
diff --git a/libsrc/cbm/chline.s b/libsrc/cbm/chline.s
deleted file mode 100644 (file)
index 26603b2..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void chlinexy (unsigned char x, unsigned char y, unsigned char length);
-; void chline (unsigned char length);
-;
-
-        .export         _chlinexy, _chline
-        .import         popa, _gotoxy, cputdirect
-        .importzp       tmp1
-
-_chlinexy:
-        pha                     ; Save the length
-        jsr     popa            ; Get y
-        jsr     _gotoxy         ; Call this one, will pop params
-        pla                     ; Restore the length
-
-_chline:
-        cmp     #0              ; Is the length zero?
-        beq     L9              ; Jump if done
-        sta     tmp1
-L1:     lda     #64             ; Horizontal line, screen code
-        jsr     cputdirect      ; Direct output
-        dec     tmp1
-        bne     L1
-L9:     rts
-
-
-
-
diff --git a/libsrc/cbm/clock.s b/libsrc/cbm/clock.s
deleted file mode 100644 (file)
index ce36e3a..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 21.09.1998
-;
-; clock_t clock (void);
-;
-
-        .export         _clock
-        .import         RDTIM
-        .importzp       sreg
-
-
-
-.proc   _clock
-
-        lda     #0              ; Byte 3 is always zero
-        sta     sreg+1
-        jsr     RDTIM
-        sty     sreg
-        rts
-
-.endproc
-
diff --git a/libsrc/cbm/close.s b/libsrc/cbm/close.s
deleted file mode 100644 (file)
index 004b88d..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-;
-; Ullrich von Bassewitz, 16.11.2002
-;
-; int __fastcall__ close (int fd);
-;
-
-        .export         _close
-
-        .import         CLOSE
-        .import         readdiskerror, closecmdchannel
-        .importzp       tmp2
-
-        .include        "errno.inc"
-        .include        "cbm.inc"
-        .include        "filedes.inc"
-
-
-;--------------------------------------------------------------------------
-; _close
-                                                   
-.proc   _close
-
-; Check if we have a valid handle
-
-        cpx     #$00
-        bne     invalidfd
-        cmp     #MAX_FDS        ; Is it valid?
-        bcs     invalidfd       ; Jump if no
-        sta     tmp2            ; Save the handle
-
-; Check if the file is actually open
-
-        tax
-        lda     fdtab,x         ; Get flags for this handle
-        and     #LFN_OPEN
-        beq     invalidfd
-
-; Valid lfn, close it. The close call is always error free, at least as far
-; as the kernal is involved
-
-        lda     #LFN_CLOSED
-        sta     fdtab,x
-        lda     tmp2            ; Get the handle
-        clc
-        adc     #LFN_OFFS       ; Make LFN from handle
-        jsr     CLOSE
-
-; Read the drive error channel, then close it
-
-        ldy     tmp2            ; Get the handle
-        ldx     unittab,y       ; Get the disk for this handle
-        jsr     readdiskerror   ; Read the disk error code
-        pha                     ; Save it on stack
-        ldy     tmp2
-        ldx     unittab,y
-        jsr     closecmdchannel ; Close the disk command channel
-        pla                     ; Get the error code from the disk
-        jmp     __mappederrno   ; Set _oserror and _errno, return 0/-1
-
-; Error entry: The given file descriptor is not valid or not open
-
-invalidfd:
-        lda     #EBADF
-        jmp     __directerrno   ; Set _errno, clear _oserror, return -1
-
-.endproc
-
-
-
-
diff --git a/libsrc/cbm/closedir.s b/libsrc/cbm/closedir.s
deleted file mode 100644 (file)
index 5006612..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-;
-; Ullrich von Bassewitz, 2012-05-30
-;
-; Based on C code by Groepaz
-;
-; int __fastcall__ closedir(DIR *dir);
-;
-
-
-        .include        "dir.inc"
-        .include        "zeropage.inc"
-
-        .import         _close, _free
-
-
-.proc   _closedir
-
-        sta     ptr1
-        stx     ptr1+1
-
-; Load dir->fd
-
-        ldy     #DIR::fd+1
-        lda     (ptr1),y
-        tax
-        dey
-        lda     (ptr1),y
-
-; Close the file
-
-        jsr     _close
-
-; Save the error code
-
-        pha
-        txa
-        pha
-
-; Free the memory block
-
-        lda     ptr1
-        ldx     ptr1+1
-        jsr     _free
-
-; Return the error code from close()
-
-        pla
-        tax
-        pla
-        rts
-
-.endproc
-
diff --git a/libsrc/cbm/ctype.s b/libsrc/cbm/ctype.s
deleted file mode 100644 (file)
index ba096bb..0000000
+++ /dev/null
@@ -1,289 +0,0 @@
-;
-; Character specification table.
-;
-; Ullrich von Bassewitz, 02.06.1998
-; 2003-05-02, Greg King
-;
-
-; The following 256-byte-wide table specifies attributes for the isxxx type
-; of functions.  Doing it by a table means some overhead in space, but it
-; has major advantages:
-;
-;   * It is fast.  If it weren't for the slow parameter-passing of cc65,
-;     one even could define C-language macroes for the isxxx functions
-;     (as it usually is done, on other platforms).
-;
-;   * It is highly portable.  The only unportable part is the table itself;
-;     all real code goes into the common library.
-;
-;   * We save some code in the isxxx functions.
-
-; This table is taken from Craig S. Bruce's technical docs. for the ACE OS.
-
-        .include        "ctype.inc"
-
-; The table is read-only, put it into the RODATA segment.
-
-        .rodata
-
-__ctype:
-        .byte   CT_CTRL                                 ;   0/00 ___rvs_@___
-        .byte   CT_CTRL                                 ;   1/01 ___rvs_a___
-        .byte   CT_CTRL                                 ;   2/02 ___rvs_b___
-        .byte   CT_CTRL                                 ;   3/03 ___rvs_c___
-        .byte   CT_CTRL                                 ;   4/04 ___rvs_d___
-        .byte   CT_CTRL                                 ;   5/05 ___rvs_e___
-        .byte   CT_CTRL                                 ;   6/06 ___rvs_f___
-        .byte   CT_CTRL                                 ;   7/07 _BEL/rvs_g_
-        .byte   CT_CTRL                                 ;   8/08 ___rvs_h___
-        .byte   CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB    ;   9/09 _TAB/rvs_i_
-        .byte   CT_CTRL | CT_OTHER_WS                   ;  10/0a _BOL/rvs_j_
-        .byte   CT_CTRL                                 ;  11/0b ___rvs_k___
-        .byte   CT_CTRL                                 ;  12/0c ___rvs_l___
-        .byte   CT_CTRL | CT_OTHER_WS                   ;  13/0d _CR_/rvs_m_
-        .byte   CT_CTRL                                 ;  14/0e ___rvs_n___
-        .byte   CT_CTRL                                 ;  15/0f ___rvs_o___
-        .byte   CT_CTRL                                 ;  16/10 ___rvs_p___
-        .byte   CT_CTRL | CT_OTHER_WS                   ;  17/11 _VT_/rvs_q_
-        .byte   CT_CTRL                                 ;  18/12 ___rvs_r___
-        .byte   CT_CTRL | CT_OTHER_WS                   ;  19/13 HOME/rvs_s_
-        .byte   CT_CTRL | CT_OTHER_WS                   ;  20/14 _BS_/rvs_t_
-        .byte   CT_CTRL                                 ;  21/15 ___rvs_u___
-        .byte   CT_CTRL                                 ;  22/16 ___rvs_v___
-        .byte   CT_CTRL                                 ;  23/17 ___rvs_w___
-        .byte   CT_CTRL                                 ;  24/18 ___rvs_x___
-        .byte   CT_CTRL                                 ;  25/19 ___rvs_y___
-        .byte   CT_CTRL                                 ;  26/1a ___rvs_z___
-        .byte   CT_CTRL                                 ;  27/1b ___rvs_[___
-        .byte   CT_CTRL                                 ;  28/1c ___rvs_\___
-        .byte   CT_CTRL | CT_OTHER_WS                   ;  29/1d cursr-right
-        .byte   CT_CTRL                                 ;  30/1e ___rvs_^___
-        .byte   CT_CTRL                                 ;  31/1f _rvs_under_
-        .byte   CT_SPACE | CT_SPACE_TAB                 ;  32/20 ___SPACE___
-        .byte   $00                                     ;  33/21 _____!_____
-        .byte   $00                                     ;  34/22 _____"_____
-        .byte   $00                                     ;  35/23 _____#_____
-        .byte   $00                                     ;  36/24 _____$_____
-        .byte   $00                                     ;  37/25 _____%_____
-        .byte   $00                                     ;  38/26 _____&_____
-        .byte   $00                                     ;  39/27 _____'_____
-        .byte   $00                                     ;  40/28 _____(_____
-        .byte   $00                                     ;  41/29 _____)_____
-        .byte   $00                                     ;  42/2a _____*_____
-        .byte   $00                                     ;  43/2b _____+_____
-        .byte   $00                                     ;  44/2c _____,_____
-        .byte   $00                                     ;  45/2d _____-_____
-        .byte   $00                                     ;  46/2e _____._____
-        .byte   $00                                     ;  47/2f _____/_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  48/30 _____0_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  49/31 _____1_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  50/32 _____2_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  51/33 _____3_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  52/34 _____4_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  53/35 _____5_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  54/36 _____6_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  55/37 _____7_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  56/38 _____8_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  57/39 _____9_____
-        .byte   $00                                     ;  58/3a _____:_____
-        .byte   $00                                     ;  59/3b _____;_____
-        .byte   $00                                     ;  60/3c _____<_____
-        .byte   $00                                     ;  61/3d _____=_____
-        .byte   $00                                     ;  62/3e _____>_____
-        .byte   $00                                     ;  63/3f _____?_____
-
-        .byte   $00                                     ;  64/40 _____@_____
-        .byte   CT_LOWER | CT_XDIGIT                    ;  65/41 _____a_____
-        .byte   CT_LOWER | CT_XDIGIT                    ;  66/42 _____b_____
-        .byte   CT_LOWER | CT_XDIGIT                    ;  67/43 _____c_____
-        .byte   CT_LOWER | CT_XDIGIT                    ;  68/44 _____d_____
-        .byte   CT_LOWER | CT_XDIGIT                    ;  69/45 _____e_____
-        .byte   CT_LOWER | CT_XDIGIT                    ;  70/46 _____f_____
-        .byte   CT_LOWER                                ;  71/47 _____g_____
-        .byte   CT_LOWER                                ;  72/48 _____h_____
-        .byte   CT_LOWER                                ;  73/49 _____i_____
-        .byte   CT_LOWER                                ;  74/4a _____j_____
-        .byte   CT_LOWER                                ;  75/4b _____k_____
-        .byte   CT_LOWER                                ;  76/4c _____l_____
-        .byte   CT_LOWER                                ;  77/4d _____m_____
-        .byte   CT_LOWER                                ;  78/4e _____n_____
-        .byte   CT_LOWER                                ;  79/4f _____o_____
-        .byte   CT_LOWER                                ;  80/50 _____p_____
-        .byte   CT_LOWER                                ;  81/51 _____q_____
-        .byte   CT_LOWER                                ;  82/52 _____r_____
-        .byte   CT_LOWER                                ;  83/53 _____s_____
-        .byte   CT_LOWER                                ;  84/54 _____t_____
-        .byte   CT_LOWER                                ;  85/55 _____u_____
-        .byte   CT_LOWER                                ;  86/56 _____v_____
-        .byte   CT_LOWER                                ;  87/57 _____w_____
-        .byte   CT_LOWER                                ;  88/58 _____x_____
-        .byte   CT_LOWER                                ;  89/59 _____y_____
-        .byte   CT_LOWER                                ;  90/5a _____z_____
-        .byte   $00                                     ;  91/5b _____[_____
-        .byte   $00                                     ;  92/5c _____\_____
-        .byte   $00                                     ;  93/5d _____]_____
-        .byte   $00                                     ;  94/5e _____^_____
-        .byte   $00                                     ;  95/5f _UNDERLINE_
-        .byte   $00                                     ;  96/60 _A`_grave__
-        .byte   $00                                     ;  97/61 _A'_acute__
-        .byte   $00                                     ;  98/62 _A^_circum_
-        .byte   $00                                     ;  99/63 _A~_tilde__
-        .byte   $00                                     ; 100/64 _A"_dieres_
-        .byte   $00                                     ; 101/65 _A__ring___
-        .byte   $00                                     ; 102/66 _AE________
-        .byte   $00                                     ; 103/67 _C,cedilla_
-        .byte   $00                                     ; 104/68 _E`_grave__
-        .byte   $00                                     ; 105/69 _E'_acute__
-        .byte   $00                                     ; 106/6a _E^_circum_
-        .byte   $00                                     ; 107/6b _E"_dieres_
-        .byte   $00                                     ; 108/6c _I`_grave__
-        .byte   $00                                     ; 109/6d _I'_acute__
-        .byte   $00                                     ; 110/6e _I^_circum_
-        .byte   $00                                     ; 111/6f _I"_dieres_
-        .byte   $00                                     ; 112/70 _D-_Eth_lr_
-        .byte   $00                                     ; 113/71 _N~_tilde__
-        .byte   $00                                     ; 114/72 _O`_grave__
-        .byte   $00                                     ; 115/73 _O'_acute__
-        .byte   $00                                     ; 116/74 _O^_circum_
-        .byte   $00                                     ; 117/75 _O~_tilde__
-        .byte   $00                                     ; 118/76 _O"_dieres_
-        .byte   $00                                     ; 119/77 __multiply_
-        .byte   $00                                     ; 120/78 _O/_slash__
-        .byte   $00                                     ; 121/79 _U`_grave__
-        .byte   $00                                     ; 122/7a _U'_acute__
-        .byte   $00                                     ; 123/7b _U^_circum_
-        .byte   $00                                     ; 124/7c _U"_dieres_
-        .byte   $00                                     ; 125/7d _Y'_acute__
-        .byte   $00                                     ; 126/7e _cap_thorn_
-        .byte   $00                                     ; 127/7f _Es-sed_B__
-
-        .byte   CT_CTRL                                 ; 128/80 __bullet___
-        .byte   CT_CTRL                                 ; 129/81 __v_line___
-        .byte   CT_CTRL                                 ; 130/82 __h_line___
-        .byte   CT_CTRL                                 ; 131/83 ___cross___
-        .byte   CT_CTRL                                 ; 132/84 _tl_corner_
-        .byte   CT_CTRL                                 ; 133/85 _tr_corner_
-        .byte   CT_CTRL                                 ; 134/86 _bl_corner_
-        .byte   CT_CTRL                                 ; 135/87 _br_corner_
-        .byte   CT_CTRL                                 ; 136/88 ___l_tee___
-        .byte   CT_CTRL                                 ; 137/89 ___r_tee___
-        .byte   CT_CTRL                                 ; 138/8a ___t_tee___
-        .byte   CT_CTRL                                 ; 139/8b ___b_tee___
-        .byte   CT_CTRL                                 ; 140/8c ___heart___
-        .byte   CT_CTRL | CT_OTHER_WS                   ; 141/8d _CR/diamond
-        .byte   CT_CTRL                                 ; 142/8e ___club____
-        .byte   CT_CTRL                                 ; 143/8f ___spade___
-        .byte   CT_CTRL                                 ; 144/90 _s_circle__
-        .byte   CT_CTRL | CT_OTHER_WS                   ; 145/91 _cursor-up_
-        .byte   CT_CTRL                                 ; 146/92 ___pound___
-        .byte   CT_CTRL | CT_OTHER_WS                   ; 147/93 _CLS/check_
-        .byte   CT_CTRL | CT_OTHER_WS                   ; 148/94 __INSert___
-        .byte   CT_CTRL                                 ; 149/95 ____+/-____
-        .byte   CT_CTRL                                 ; 150/96 __divide___
-        .byte   CT_CTRL                                 ; 151/97 __degree___
-        .byte   CT_CTRL                                 ; 152/98 _c_checker_
-        .byte   CT_CTRL                                 ; 153/99 _f_checker_
-        .byte   CT_CTRL                                 ; 154/9a _solid_sq__
-        .byte   CT_CTRL                                 ; 155/9b __cr_char__
-        .byte   CT_CTRL                                 ; 156/9c _up_arrow__
-        .byte   CT_CTRL | CT_OTHER_WS                   ; 157/9d cursor-left
-        .byte   CT_CTRL                                 ; 158/9e _left_arro_
-        .byte   CT_CTRL                                 ; 159/9f _right_arr_
-        .byte   CT_SPACE | CT_SPACE_TAB                 ; 160/a0 _req space_
-        .byte   $00                                     ; 161/a1 _!_invertd_
-        .byte   $00                                     ; 162/a2 ___cent____
-        .byte   $00                                     ; 163/a3 ___pound___
-        .byte   $00                                     ; 164/a4 __currency_
-        .byte   $00                                     ; 165/a5 ____yen____
-        .byte   $00                                     ; 166/a6 _|_broken__
-        .byte   $00                                     ; 167/a7 __section__
-        .byte   $00                                     ; 168/a8 __umulaut__
-        .byte   $00                                     ; 169/a9 _copyright_
-        .byte   $00                                     ; 170/aa __fem_ord__
-        .byte   $00                                     ; 171/ab _l_ang_quo_
-        .byte   $00                                     ; 172/ac ____not____
-        .byte   $00                                     ; 173/ad _syl_hyphn_
-        .byte   $00                                     ; 174/ae _registerd_
-        .byte   $00                                     ; 175/af _overline__
-        .byte   $00                                     ; 176/b0 __degrees__
-        .byte   $00                                     ; 177/b1 ____+/-____
-        .byte   $00                                     ; 178/b2 _2_supersc_
-        .byte   $00                                     ; 179/b3 _3_supersc_
-        .byte   $00                                     ; 180/b4 ___acute___
-        .byte   $00                                     ; 181/b5 ____mu_____
-        .byte   $00                                     ; 182/b6 _paragraph_
-        .byte   $00                                     ; 183/b7 __mid_dot__
-        .byte   $00                                     ; 184/b8 __cedilla__
-        .byte   $00                                     ; 185/b9 _1_supersc_
-        .byte   $00                                     ; 186/ba __mas_ord__
-        .byte   $00                                     ; 187/bb _r_ang_quo_
-        .byte   $00                                     ; 188/bc ____1/4____
-        .byte   $00                                     ; 189/bd ____1/2____
-        .byte   $00                                     ; 190/be ____3/4____
-        .byte   $00                                     ; 191/bf _?_invertd_
-
-        .byte   $00                                     ; 192/c0 _____`_____
-        .byte   CT_UPPER | CT_XDIGIT                    ; 193/c1 _____A_____
-        .byte   CT_UPPER | CT_XDIGIT                    ; 194/c2 _____B_____
-        .byte   CT_UPPER | CT_XDIGIT                    ; 195/c3 _____C_____
-        .byte   CT_UPPER | CT_XDIGIT                    ; 196/c4 _____D_____
-        .byte   CT_UPPER | CT_XDIGIT                    ; 197/c5 _____E_____
-        .byte   CT_UPPER | CT_XDIGIT                    ; 198/c6 _____F_____
-        .byte   CT_UPPER                                ; 199/c7 _____G_____
-        .byte   CT_UPPER                                ; 200/c8 _____H_____
-        .byte   CT_UPPER                                ; 201/c9 _____I_____
-        .byte   CT_UPPER                                ; 202/ca _____J_____
-        .byte   CT_UPPER                                ; 203/cb _____K_____
-        .byte   CT_UPPER                                ; 204/cc _____L_____
-        .byte   CT_UPPER                                ; 205/cd _____M_____
-        .byte   CT_UPPER                                ; 206/ce _____N_____
-        .byte   CT_UPPER                                ; 207/cf _____O_____
-        .byte   CT_UPPER                                ; 208/d0 _____P_____
-        .byte   CT_UPPER                                ; 209/d1 _____Q_____
-        .byte   CT_UPPER                                ; 210/d2 _____R_____
-        .byte   CT_UPPER                                ; 211/d3 _____S_____
-        .byte   CT_UPPER                                ; 212/d4 _____T_____
-        .byte   CT_UPPER                                ; 213/d5 _____U_____
-        .byte   CT_UPPER                                ; 214/d6 _____V_____
-        .byte   CT_UPPER                                ; 215/d7 _____W_____
-        .byte   CT_UPPER                                ; 216/d8 _____X_____
-        .byte   CT_UPPER                                ; 217/d9 _____Y_____
-        .byte   CT_UPPER                                ; 218/da _____Z_____
-        .byte   $00                                     ; 219/db _____{_____
-        .byte   $00                                     ; 220/dc _____|_____
-        .byte   $00                                     ; 221/dd _____}_____
-        .byte   $00                                     ; 222/de _____~_____
-        .byte   $00                                     ; 223/df ___HOUSE___
-        .byte   $00                                     ; 224/e0 _a`_grave__
-        .byte   $00                                     ; 225/e1 _a'_acute__
-        .byte   $00                                     ; 226/e2 _a^_circum_
-        .byte   $00                                     ; 227/e3 _a~_tilde__
-        .byte   $00                                     ; 228/e4 _a"_dieres_
-        .byte   $00                                     ; 229/e5 _a__ring___
-        .byte   $00                                     ; 230/e6 _ae________
-        .byte   $00                                     ; 231/e7 _c,cedilla_
-        .byte   $00                                     ; 232/e8 _e`_grave__
-        .byte   $00                                     ; 233/e9 _e'_acute__
-        .byte   $00                                     ; 234/ea _e^_circum_
-        .byte   $00                                     ; 235/eb _e"_dieres_
-        .byte   $00                                     ; 236/ec _i`_grave__
-        .byte   $00                                     ; 237/ed _i'_acute__
-        .byte   $00                                     ; 238/ee _i^_circum_
-        .byte   $00                                     ; 239/ef _i"_dieres_
-        .byte   $00                                     ; 240/f0 _o^x_Eth_s_
-        .byte   $00                                     ; 241/f1 _n~_tilda__
-        .byte   $00                                     ; 242/f2 _o`_grave__
-        .byte   $00                                     ; 243/f3 _o'_acute__
-        .byte   $00                                     ; 244/f4 _o^_circum_
-        .byte   $00                                     ; 245/f5 _o~_tilde__
-        .byte   $00                                     ; 246/f6 _o"_dieres_
-        .byte   $00                                     ; 247/f7 __divide___
-        .byte   $00                                     ; 248/f8 _o/_slash__
-        .byte   $00                                     ; 249/f9 _u`_grave__
-        .byte   $00                                     ; 250/fa _u'_acute__
-        .byte   $00                                     ; 251/fb _u^_circum_
-        .byte   $00                                     ; 252/fc _u"_dieres_
-        .byte   $00                                     ; 253/fd _y'_acute__
-        .byte   $00                                     ; 254/fe _sm_thorn__
-        .byte   $00                                     ; 255/ff _y"_dieres_
-
diff --git a/libsrc/cbm/curdevice.s b/libsrc/cbm/curdevice.s
deleted file mode 100644 (file)
index 8c2f7a8..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Oliver Schmidt, 2012-10-21
-;
-; unsigned char getcurrentdevice (void);
-;
-
-        .export         _getcurrentdevice
-        .import         curunit
-
-;------------------------------------------------------------------------------
-; _getcurrentdevice
-
-.proc   _getcurrentdevice
-
-        lda     curunit
-        ldx     #$00
-        rts
-
-.endproc
diff --git a/libsrc/cbm/cvline.s b/libsrc/cbm/cvline.s
deleted file mode 100644 (file)
index f310e43..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void cvlinexy (unsigned char x, unsigned char y, unsigned char length);
-; void cvline (unsigned char length);
-;
-
-        .export         _cvlinexy, _cvline
-        .import         popa, _gotoxy, putchar, newline
-        .importzp       tmp1
-
-_cvlinexy:
-        pha                     ; Save the length
-        jsr     popa            ; Get y
-        jsr     _gotoxy         ; Call this one, will pop params
-        pla                     ; Restore the length and run into _cvline
-
-_cvline:
-        cmp     #0              ; Is the length zero?
-        beq     L9              ; Jump if done
-        sta     tmp1
-L1:     lda     #93             ; Vertical bar
-        jsr     putchar         ; Write, no cursor advance
-        jsr     newline         ; Advance cursor to next line
-        dec     tmp1
-        bne     L1
-L9:     rts
-
-
-
diff --git a/libsrc/cbm/devicedir.s b/libsrc/cbm/devicedir.s
deleted file mode 100644 (file)
index 3a4e6d7..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-;
-; Oliver Schmidt, 2012-09-10
-;
-; char* __fastcall__ getdevicedir (unsigned char device, char* buf, size_t size);
-;
-
-        .export         _getdevicedir
-        .import         diskinit, devicestr, fnunit
-        .import         popa, popax
-        .importzp       ptr2, ptr3
-
-        .include        "errno.inc"
-
-;------------------------------------------------------------------------------
-; _getdevicedir
-
-.proc   _getdevicedir
-
-; Save size
-
-        sta     ptr3
-        stx     ptr3+1
-
-; Save buf
-
-        jsr     popax
-        sta     ptr2
-        stx     ptr2+1
-
-; Check device readiness
-
-        jsr     popa
-        jsr     diskinit
-        beq     size
-        jsr     __mappederrno
-        bne     fail            ; Branch always
-
-; Check for sufficient buf size
-
-size:   lda     ptr3+1
-        bne     okay            ; Buf >= 256
-        lda     ptr3
-        cmp     #3
-        bcs     okay            ; Buf >= 3
-        lda     #<ERANGE
-        jsr     __directerrno
-fail:   lda     #0              ; Return NULL
-        tax
-        rts
-
-; Copy device string representation into buf
-
-okay:   lda     fnunit          ; Set by diskinit
-        jsr     devicestr       ; Returns 0 in A
-        sta     __oserror       ; Clear _oserror
-
-; Success, return buf
-
-        lda     ptr2
-        ldx     ptr2+1
-        rts
-
-.endproc
diff --git a/libsrc/cbm/dir.h b/libsrc/cbm/dir.h
deleted file mode 100644 (file)
index 08cb022..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-** Internal include file, do not use directly.
-** Written by Ullrich von Bassewitz. Based on code by Groepaz.
-*/
-
-
-
-#ifndef _DIR_H
-#define _DIR_H
-
-
-
-#include <dirent.h>
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-struct DIR {
-    int         fd;             /* File descriptor for directory */
-    unsigned    off;            /* Current byte offset in directory */
-    char        name[16+1];     /* Name passed to opendir */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned char __fastcall__ _dirread (DIR* dir, void* buf, unsigned char count);
-/* Read characters from the directory into the supplied buffer. Makes sure,
-** errno is set in case of a short read. Return true if the read was
-** successful and false otherwise.
-*/
-
-unsigned char __fastcall__ _dirread1 (DIR* dir, void* buf);
-/* Read one byte from the directory into the supplied buffer. Makes sure,
-** errno is set in case of a short read. Return true if the read was
-** successful and false otherwise.
-*/
-
-
-
-/* End of dir.h */
-#endif
-
-
-
diff --git a/libsrc/cbm/dir.inc b/libsrc/cbm/dir.inc
deleted file mode 100644 (file)
index 5e2dfc6..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Internal include file, do not use directly.
-; Written by Ullrich von Bassewitz. Based on C code by Groepaz.
-;
-
-
-
-;------------------------------------------------------------------------------
-; Data structures
-
-.struct DIR
-    fd          .word
-    off         .word
-    name        .byte   16+1
-.endstruct
-
-
-;------------------------------------------------------------------------------
-; C callable functions
-
-        .global _opendir
-        .global _closedir
-        .global _readdir
-        .global _seekdir
-        .global _telldir
-        .global _rewinddir
-        .global __dirread
-        .global __dirread1
-
-
diff --git a/libsrc/cbm/dir.s b/libsrc/cbm/dir.s
deleted file mode 100644 (file)
index fddd71d..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-;
-; Ullrich von Bassewitz, 2012-06-01
-;
-; Helper functions for open-/read-/closedir
-
-
-        .include        "dir.inc"
-        .include        "errno.inc"
-        .include        "zeropage.inc"
-                             
-        .import         pushax
-        .import         _read
-
-
-;---------------------------------------------------------------------------
-;
-; unsigned char __fastcall__ _dirread1 (DIR* dir, void* buf);
-; /* Read one byte from the directory into the supplied buffer. Makes sure,
-; ** errno is set in case of a short read. Return true if the read was
-; ** successful and false otherwise.
-; */
-
-__dirread1:
-
-        jsr     pushax          ; Push buf
-        lda     #1              ; Load count = 1
-
-; Run directly into __dirread
-
-;---------------------------------------------------------------------------
-;
-; unsigned char __fastcall__ _dirread (DIR* dir, void* buf, unsigned char count);
-; /* Read characters from the directory into the supplied buffer. Makes sure,
-; ** errno is set in case of a short read. Return true if the read was
-; ** successful and false otherwise.
-; */
-
-__dirread:
-
-; Save count
-
-        pha
-
-; Replace dir by dir->fd
-
-        ldy     #2
-        lda     (sp),y
-        sta     ptr1
-        iny
-        lda     (sp),y
-        sta     ptr1+1
-        ldy     #DIR::fd+1
-        lda     (ptr1),y
-        pha
-        dey
-        lda     (ptr1),y
-        ldy     #2
-        sta     (sp),y
-        pla
-        iny
-        sta     (sp),y
-
-; Get count, save it again, clear the high byte and call read(). By the
-; previous actions, the stack frame is as read() needs it, and read() will
-; also drop it.
-
-        pla
-        pha
-        ldx     #0
-        jsr     _read
-
-; Check for errors.
-
-        cpx     #$FF
-        bne     L3
-
-; read() returned an error, so errno is already set
-
-        pla                     ; Drop count
-        inx                     ; X = 0
-L1:     txa                     ; Return zero
-L2:     rts
-
-; read() was successful, check number of bytes read. We assume that read will
-; not return more than count, so X is zero if we come here.
-
-L3:     sta     tmp1            ; Save returned count
-        pla                     ; Our count
-        cmp     tmp1
-        beq     L2              ; Ok, return count
-
-; Didn't read enough bytes. This is an error for us, but errno is not set
-
-        lda     #<EIO
-        sta     __errno
-        stx     __errno+1       ; X is zero
-        bne     L1              ; Branch always
-
-
diff --git a/libsrc/cbm/diskcmd.s b/libsrc/cbm/diskcmd.s
deleted file mode 100644 (file)
index d090afe..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-11-17, 2009-02-22
-;
-; Handle disk command channels
-;
-
-        .export         isdisk
-        .export         opencmdchannel
-        .export         closecmdchannel
-        .export         readdiskerror
-        .export         writediskcmd
-        .export         writefndiskcmd
-
-        .import         SETLFS, SETNAM, OPEN, CLOSE, BSOUT, BASIN
-        .import         CHKIN, CKOUT, CLRCH
-        .import         fncmd, fnlen, fnunit
-        .importzp       tmp1, ptr1
-
-        .include        "cbm.inc"
-        .include        "filedes.inc"
-
-;--------------------------------------------------------------------------
-; isdisk: Return carry clear if the unit number in X is a disk, return
-; carry set if not.
-
-.proc   isdisk
-
-        cpx     #FIRST_DRIVE    ; Disk unit?
-        bcc     @L1             ; Branch if no disk
-        cpx     #FIRST_DRIVE+MAX_DRIVES
-        rts
-
-@L1:    sec
-        rts
-
-.endproc
-
-;--------------------------------------------------------------------------
-; Open the command channel for the disk unit in X. The function returns an
-; error code in A and sets the flags according to the contents of A.
-
-opencmdchannel:
-
-        jsr     isdisk          ; Disk unit?
-        bcs     success
-
-; Is this channel already open?
-
-        ldy     opentab-FIRST_DRIVE,x
-        bne     isopen
-
-; Open the command channel, Carry is still clear
-
-        stx     tmp1            ; Save the unit number
-        txa                     ; Get unit number
-        adc     #(LFN_OFFS+MAX_FDS-FIRST_DRIVE)
-        ldy     #15             ; Secondary address for cmd channel
-        jsr     SETLFS
-
-        lda     #0
-        jsr     SETNAM          ; No name supplied to OPEN
-
-        jsr     OPEN
-        bcs     done            ; Error, code is in A
-
-; Command channel is open now. Increment the count
-
-        ldx     tmp1            ; Unit number
-        ldy     opentab-FIRST_DRIVE,x
-isopen: iny
-        tya
-        sta     opentab-FIRST_DRIVE,x
-
-; Done, return success
-
-success:lda     #$00
-done:   cmp     #$00            ; Set flags for return code
-        rts
-
-
-;--------------------------------------------------------------------------
-; closecmdchannel: Decrement the counter for the disk command channel and
-; close the channel if the counter drops to zero. The function expects the
-; drive number in X and returns an error code in A. The flags for the return
-; code are set when the function returns.
-
-closecmdchannel:
-
-        jsr     isdisk          ; Disk unit?
-        bcs     success
-
-; Is this channel really open?
-
-        ldy     opentab-FIRST_DRIVE,x
-        beq     success         ; OOPS! Channel is not open
-
-; Decrement the count and stor it back
-
-        dey
-        tya
-        sta     opentab-FIRST_DRIVE,x
-
-; If the counter is now zero, close the channel. We still have carry clear
-; when we come here.
-
-        bne     success
-        txa                     ; Make LFN from drive number
-        adc     #(LFN_OFFS+MAX_FDS-FIRST_DRIVE)
-        jsr     CLOSE
-        bcs     done
-        bcc     success
-
-;--------------------------------------------------------------------------
-; readdiskerror: Read a disk error from an already open command channel.
-; Returns an error code in A, which may either be the code read from the
-; command channel, or another error when accessing the command channel failed.
-
-readdiskerror:
-
-        jsr     isdisk
-        bcs     success
-
-; Read the command channel. We won't check the status after the channel is
-; open, because this seems to be unnecessary in most cases.
-
-        txa
-        clc                     ; Make LFN from drive number
-        adc     #(LFN_OFFS+MAX_FDS-FIRST_DRIVE)
-        tax
-        jsr     CHKIN           ; Make the command channel input
-        bcs     done            ; Bail out with error code in A
-
-        jsr     BASIN
-        and     #$0F            ; Make digit value from PETSCII
-        sta     tmp1
-        asl     a               ; * 2
-        asl     a               ; * 4, carry clear
-        adc     tmp1            ; * 5
-        asl     a               ; * 10
-        sta     tmp1
-
-        jsr     BASIN
-        and     #$0F            ; Make digit value from PETSCII
-        clc
-        adc     tmp1
-
-; Errors below 20 are not real errors. Fix that
-
-        cmp     #20+1
-        bcs     @L1
-        lda     #$00
-@L1:    pha
-
-; Read the remainder of the message and throw it away
-
-@L2:    jsr     BASIN
-        cmp     #$0D
-        bne     @L2
-
-; Close the input channel
-
-        jsr     CLRCH
-
-; Restore the error code (will also set the flags) and return
-
-        pla
-        rts
-
-;--------------------------------------------------------------------------
-; writefndiskcmd: Write the contents of fncmd to the command channel of the
-; drive in fnunit. Returns an error code in A, flags are set according to
-; the contents of A.
-
-writefndiskcmd:
-        lda     #<fncmd
-        sta     ptr1
-        lda     #>fncmd
-        sta     ptr1+1
-
-        ldx     fnlen
-        inx                     ; Account for command char in fncmd
-        txa                     ; Length of name into A
-        ldx     fnunit          ; Unit
-
-; Run directly into writediskcmd
-
-;       jmp     writediskcmd
-
-;--------------------------------------------------------------------------
-; writediskcmd: Gets pointer to data in ptr1, length in A. Writes all data
-; to the command channel of the drive in X. Returns an error code in A,
-; flags are set according to the contents of A.
-
-writediskcmd:
-
-        jsr     isdisk
-        bcs     success         ; No disk - already done
-
-; Remember the length
-
-        sta     tmp1
-
-; Write to the command channel.
-
-        txa
-        clc                     ; Make LFN from drive number
-        adc     #(LFN_OFFS+MAX_FDS-FIRST_DRIVE)
-        tax
-        jsr     CKOUT           ; Make the command channel output
-        bcs     done            ; Bail out with error code in A
-
-        ldy     #$00
-@L1:    cpy     tmp1
-        bcs     @L3
-        lda     (ptr1),y
-        iny
-        jsr     BSOUT
-        bcc     @L1
-
-@L2:    pha
-        jsr     CLRCH
-        pla
-        rts
-
-@L3:    jsr     CLRCH
-        lda     #$00
-        rts
-
-
-;--------------------------------------------------------------------------
-; Data
-
-.bss
-
-opentab:        .res    MAX_DRIVES, 0
diff --git a/libsrc/cbm/diskinit.s b/libsrc/cbm/diskinit.s
deleted file mode 100644 (file)
index 8a83a02..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-;
-; Oliver Schmidt, 2012-10-17
-;
-
-        .export         diskinit
-        .import         opencmdchannel, closecmdchannel
-        .import         writefndiskcmd, readdiskerror
-        .import         isdisk, fnunit, fncmd
-
-;------------------------------------------------------------------------------
-; diskinit
-
-.proc   diskinit
-
-; Save device
-
-        sta     fnunit
-
-; Check for disk device
-
-        tax
-        jsr     isdisk
-        bcc     open
-        lda     #9              ; "Illegal device"
-        rts
-
-; Open channel
-
-open:   jsr     opencmdchannel
-        bne     done
-
-; Write command
-
-        lda     #'i'            ; Init command
-        sta     fncmd
-        jsr     writefndiskcmd
-        bne     close
-
-; Read error
-
-        ldx     fnunit
-        jsr     readdiskerror
-
-; Close channel
-
-close:  pha
-        ldx     fnunit
-        jsr     closecmdchannel
-        pla
-
-done:   rts
-
-.endproc
diff --git a/libsrc/cbm/exec.c b/libsrc/cbm/exec.c
deleted file mode 100644 (file)
index 36c3afe..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-** Program-chaining function for Commodore platforms.
-**
-** 2013-09-04, Greg King
-**
-** This function exploits the program-chaining feature in CBM BASIC's ROM.
-**
-** CC65's CBM programs have a BASIC program stub.  We start those programs by
-** RUNning that stub; it SYSes to the Machine Language code.  Normally, after
-** the ML code exits, the BASIC ROM continues running the stub.  But, it has
-** no more statements; so, the program stops.
-**
-** This function puts the desired program's name and device number into a LOAD
-** statement.  Then, it points BASIC to that statement, so that the ROM will run
-** that statement after this program quits.  The ROM will load the next program,
-** and will execute it (because the LOAD will be seen in a running program).
-*/
-
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <device.h>
-#if   defined(__CBM610__)
-#  include <cbm610.h>
-#elif defined(__CBM510__)
-#  include <cbm510.h>
-#endif
-
-
-/* The struct below is a line of BASIC code.  It sits in the LOWCODE segment
-** to make sure that it won't be hidden by a ROM when BASIC is re-enabled.
-** The line is:
-**  0 LOAD""+""                    ,01
-** After this function has written into the line, it might look like this:
-**  0 LOAD""+"program name"        ,08
-**
-** When BASIC's LOAD command asks the Kernal to load a file, it gives the
-** Kernal a pointer to a file-name string.  CC65's CBM programs use that
-** pointer to give a copy of the program's name to main()'s argv[0] parameter.
-** But, when BASIC uses a string literal that's in a program, it points
-** directly to that literal -- in the models that don't use banked RAM
-** (Pet/CBM, VIC-20, and 64).  The literal is overwritten by the next program
-** that's loaded.  So, argv[0] would point to machine code.  String operations
-** create a new result string -- even when that operation changes nothing.  The
-** result is put in the string space at the top of BASIC's memory.  So, the ""+
-** in this BASIC line guarantees that argv[0] will get a name from a safe place.
-*/
-#pragma data-name(push, "LOWCODE")
-static struct line {
-    const char end_of_line;
-    const struct line *const next;
-    const unsigned line_num;
-    const char load_token, quotes[2], add_token, quote;
-    char name[21];
-    const char comma;
-    char unit[3];
-} basic = {
-    '\0', &basic + 1,           /* high byte of link must be non-zero */
-    0, 0x93, "\"\"", 0xaa, '\"',
-    "\"                    ",   /* format: "123:1234567890123456\"" */
-    ',', "01"
-};
-#pragma data-name(pop)
-
-/* These values are platform-specific. */
-extern const struct line *txtptr;
-#pragma zpsym("txtptr")
-extern char basbuf[];           /* BASIC's input buffer */
-extern void basbuf_len[];
-#pragma zpsym("basbuf_len")
-
-
-int __fastcall__ exec (const char* progname, const char* cmdline)
-{
-    static int fd;
-    static unsigned char dv, n = 0;
-
-    /* Exclude devices that can't load files. */
-    dv = getcurrentdevice ();
-    if (dv < 8 && dv != 1 || dv > 30) {
-        return _mappederrno (9);        /* illegal device number */
-    }
-    utoa (dv, basic.unit, 10);
-
-    /* Don't try to run a program that can't be found. */
-    fd = open (progname, O_RDONLY);
-    if (fd < 0) {
-        return fd;
-    }
-    close (fd);
-
-    do {
-        if ((basic.name[n] = progname[n]) == '\0') {
-            break;
-        }
-    } while (++n < 20);         /* truncate long names */
-    basic.name[n] = '\"';
-
-    /* Build the next program's argument list. */
-    basbuf[0] = 0x8f;           /* REM token */
-    basbuf[1] = '\0';
-    if (cmdline != NULL) {
-        strncat (basbuf, cmdline, (size_t)basbuf_len - 2);
-    }
-
-#if defined(__CBM510__) || defined(__CBM610__)
-    pokewsys ((unsigned)&txtptr, (unsigned)&basic);
-#else
-    txtptr = &basic;
-#endif
-
-    /* (The return code, in ST, will be destroyed by LOAD.
-    ** So, don't bother to set it here.)
-    */
-    exit (__AX__);
-}
diff --git a/libsrc/cbm/execvars.s b/libsrc/cbm/execvars.s
deleted file mode 100644 (file)
index 02eabc1..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-;
-; Platform-specific variables for the exec program-chaining function
-;
-
-.if     .defined (__C128__)
-        .include        "c128.inc"
-.elseif .defined (__C16__)
-        .include        "c16.inc"
-.elseif .defined (__C64__)
-        .include        "c64.inc"
-.elseif .defined (__CBM510__)
-        .include        "cbm510.inc"
-.elseif .defined (__CBM610__)
-        .include        "cbm610.inc"
-.elseif .defined (__PET__)
-        .include        "pet.inc"
-.elseif .defined (__PLUS4__)
-        .include        "plus4.inc"
-.else
-        .include        "vic20.inc"
-.endif
-
-        .export         _txtptr:zp, _basbuf, _basbuf_len:zp
-
-_txtptr         :=      TXTPTR
-
-_basbuf         :=      BASIC_BUF
-_basbuf_len     =       BASIC_BUF_LEN
diff --git a/libsrc/cbm/exehdr.s b/libsrc/cbm/exehdr.s
deleted file mode 100644 (file)
index 6d0051d..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-;
-; Ullrich von Bassewitz, 2010-11-14
-;
-; This module supplies a small BASIC stub program that jumps to the machine
-; language code that follows it using SYS.
-;
-
-        ; The following symbol is used by linker config to force the module
-        ; to get included into the output file
-        .export         __EXEHDR__: absolute = 1
-
-.segment        "EXEHDR"
-
-        .addr   Next
-        .word   .version        ; Line number
-        .byte   $9E             ; SYS token
-;       .byte   <(((Start / 10000) .mod 10) + '0')
-        .byte   <(((Start /  1000) .mod 10) + '0')
-        .byte   <(((Start /   100) .mod 10) + '0')
-        .byte   <(((Start /    10) .mod 10) + '0')
-        .byte   <(((Start /     1) .mod 10) + '0')
-        .byte   $00             ; End of BASIC line
-Next:   .word   0               ; BASIC end marker
-Start:
-
-; If the start address is larger than 4 digits, the header generated above
-; will not contain the highest digit. Instead of wasting one more digit that
-; is almost never used, check it at link time and generate an error so the
-; user knows something is wrong.
-
-.assert (Start < 10000), error, "Start address too large for generated BASIC stub"
-
-
diff --git a/libsrc/cbm/filedes.inc b/libsrc/cbm/filedes.inc
deleted file mode 100644 (file)
index cccd067..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 16.11.2002
-;
-; File descriptor management for the POSIX I/O routines
-;
-
-.global         fdtab   ; Handle table
-.global         unittab ; Unit table
-.global         freefd  ; Return a table entry
-
-MAX_FDS         = 8     ; Maximum number of file descriptors
-LFN_OFFS        = 3     ; Start with logical file number 3
-
-LFN_CLOSED      = $00   ; LFN is closed
-LFN_READ        = $01   ; Open for reading
-LFN_WRITE       = $02   ; Open for writing
-LFN_OPEN        = (LFN_READ | LFN_WRITE)
-LFN_EOF         = $80   ; Read to EOF
-
-LFN_STDIN       = LFN_OFFS+0
-LFN_STDOUT      = LFN_OFFS+1
-LFN_STDERR      = LFN_OFFS+2
-
diff --git a/libsrc/cbm/filedes.s b/libsrc/cbm/filedes.s
deleted file mode 100644 (file)
index 384313b..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-;
-; Ullrich von Bassewitz, 16.11.2002
-;
-; File descriptor management for the POSIX I/O routines
-;
-
-
-        .include        "filedes.inc"
-
-.code
-
-;--------------------------------------------------------------------------
-; freefd: Find a free file handle and return it in X. Return carry clear if we
-; found one, return a carry if no free lfns are left.
-
-.proc   freefd
-
-        ldx     #0
-        clc
-loop:   lda     fdtab,x
-        beq     found
-        inx
-        cpx     #MAX_FDS
-        bcc     loop
-found:  rts
-
-.endproc
-
-;--------------------------------------------------------------------------
-; Data
-
-.bss
-fdtab:  .res    MAX_FDS
-unittab:.res    MAX_FDS
-
-
-
diff --git a/libsrc/cbm/filename.s b/libsrc/cbm/filename.s
deleted file mode 100644 (file)
index a2b8aab..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-;
-; Ullrich von Bassewitz, 16.11.2002
-;
-; File name handling for CBM file I/O
-;
-
-        .export         fnparse, fnparsename, fnset
-        .export         fnadd, fnaddmode, fncomplete, fndefunit
-        .export         fnunit, fnlen, fnisfile, fncmd, fnbuf
-
-        .import         SETNAM
-        .import         curunit, __filetype
-        .importzp       ptr1, tmp1
-
-        .include        "ctype.inc"
-
-
-;------------------------------------------------------------------------------
-; fnparsename: Parse a filename (without drive spec) passed in in ptr1 and y.
-
-.proc   fnparsename
-
-        lda     #0
-        sta     tmp1            ; Remember length of name
-
-nameloop:
-        lda     (ptr1),y        ; Get next char from filename
-        beq     namedone        ; Jump if end of name reached
-
-; Check the maximum length, store the character
-
-        ldx     tmp1
-        cpx     #16             ; Maximum length reached?
-        bcs     invalidname
-        lda     (ptr1),y        ; Reload char
-        jsr     fnadd           ; Add character to name
-        iny                     ; Next char from name
-        inc     tmp1            ; Increment length of name
-        bne     nameloop        ; Branch always
-
-; Invalid file name
-
-invalidname:
-        lda     #33             ; Invalid file name
-
-; Done, we've successfully parsed the name.
-
-namedone:
-        rts
-
-.endproc
-
-
-;------------------------------------------------------------------------------
-; fnparse: Parse a full filename passed in in a/x. Will set the following
-; variables:
-;
-;       fnlen   -> length of filename
-;       fnbuf   -> filename including drive spec
-;       fnunit  -> unit from spec or default unit
-;
-; Returns an error code in A or zero if all is ok.
-
-.proc   fnparse
-
-        sta     ptr1
-        stx     ptr1+1          ; Save pointer to name
-
-; For now we will always use the default unit
-
-        jsr     fndefunit
-
-; Check the name for a drive spec
-
-        ldy     #0
-        lda     (ptr1),y
-        cmp     #'0'
-        beq     digit
-        cmp     #'1'
-        bne     nodrive
-
-digit:  sta     fnbuf+0
-        iny
-        lda     (ptr1),y
-        cmp     #':'
-        bne     nodrive
-
-; We found a drive spec, copy it to the buffer
-
-        sta     fnbuf+1
-        iny                     ; Skip colon
-        bne     drivedone       ; Branch always
-
-; We did not find a drive spec, always use drive zero
-
-nodrive:
-        lda     #'0'
-        sta     fnbuf+0
-        lda     #':'
-        sta     fnbuf+1
-        ldy     #$00            ; Reposition to start of name
-
-; Drive spec done. We do now have a drive spec in the buffer.
-
-drivedone:
-        lda     #2              ; Length of drive spec
-        sta     fnlen
-
-; Assume this is a standard file on disk
-
-        sta     fnisfile
-
-; Special treatment for directory. If the file name is "$", things are
-; actually different: $ is directory for unit 0, $0 dito, $1 is directory
-; for unit 1. For simplicity, we won't check anything else if the first
-; character of the file name is '$'.
-
-        lda     (ptr1),y        ; Get first character
-        cmp     #'$'            ;
-        bne     fnparsename
-
-; Juggle stuff
-
-        ldx     fnbuf+0         ; unit
-        stx     fnbuf+1
-        sta     fnbuf+0
-
-; Add the file mask
-
-        lda     #':'
-        sta     fnbuf+2
-        lda     #'*'
-        sta     fnbuf+3
-        lda     #4
-        sta     fnlen
-
-; No need to check the name. Length is already 2
-
-        lda     #0              ; ok flag
-        sta     fnisfile        ; This is not a real file
-        rts
-
-.endproc
-
-;--------------------------------------------------------------------------
-; fndefunit: Use the default unit
-
-.proc   fndefunit
-
-        lda     curunit
-        sta     fnunit
-        rts
-
-.endproc
-
-;--------------------------------------------------------------------------
-; fnset: Tell the kernal about the file name
-
-.proc   fnset
-
-        lda     fnlen
-        ldx     #<fnbuf
-        ldy     #>fnbuf
-        jmp     SETNAM
-
-.endproc
-
-;--------------------------------------------------------------------------
-; fncomplete: Complete a filename by adding ",t,m" where t is the file type
-; and m is the access mode passed in in the A register
-;
-; fnaddmode: Add ",m" to a filename, where "m" is passed in A
-
-fncomplete:
-        pha                     ; Save mode
-        lda     __filetype
-        jsr     fnaddmode       ; Add the type
-        pla
-fnaddmode:
-        pha
-        lda     #','
-        jsr     fnadd
-        pla
-
-fnadd:  ldx     fnlen
-        inc     fnlen
-        sta     fnbuf,x
-        rts
-
-;--------------------------------------------------------------------------
-; Data
-
-.bss
-
-fnunit:         .res    1
-fnlen:          .res    1
-fnisfile:       .res    1       ; Flags standard file (as opposed to "$")
-
-.data
-fncmd:          .byte   's'     ; Use as scratch command
-fnbuf:          .res    35      ; Either 0:0123456789012345,t,m
-                                ; Or     0:0123456789012345=0123456789012345
diff --git a/libsrc/cbm/filetype.s b/libsrc/cbm/filetype.s
deleted file mode 100644 (file)
index 4c5b0dd..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Ullrich von Bassewitz, 2012-07-15
-;
-; Default file type used when creating new files
-;
-
-        .export         __filetype
-
-
-.data
-
-__filetype:
-        .byte   's'             ; Create sequential files by default
-
-
diff --git a/libsrc/cbm/filevars.s b/libsrc/cbm/filevars.s
deleted file mode 100644 (file)
index 316cf27..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-;
-; Ullrich von Bassewitz, 15.11.2002
-;
-; Variables used for CBM file I/O
-;
-
-        .export         curunit
-        .constructor    initcurunit, 30
-        .importzp       devnum
-
-
-.bss
-
-curunit:
-        .res    1
-
-
-.segment "INIT"
-
-.proc   initcurunit
-
-        lda     devnum
-        bne     @L0
-        lda     #8              ; Default is disk
-        sta     devnum
-@L0:    sta     curunit
-        rts
-
-.endproc
diff --git a/libsrc/cbm/getdevice.s b/libsrc/cbm/getdevice.s
deleted file mode 100644 (file)
index 08ba6d5..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-;
-; Oliver Schmidt, 2012-09-04
-;
-; unsigned char getfirstdevice (void);
-; unsigned char __fastcall__ getnextdevice (unsigned char device);
-;
-
-        .export         _getfirstdevice
-        .export         _getnextdevice
-        .import         isdisk
-        .import         opencmdchannel
-        .import         closecmdchannel
-        .importzp       ST
-        .importzp       tmp2
-
-;------------------------------------------------------------------------------
-; _getfirstdevice
-
-_getfirstdevice:
-        lda     #$FF
-        ; Fall through
-
-;------------------------------------------------------------------------------
-; _getnextdevice
-
-_getnextdevice:
-        tax
-next:   inx
-        cpx     #$FF
-        beq     done
-
-; [open|close]cmdchannel already call isdisk internally but they
-; interpret a non-disk as a no-op while we need to interpret it
-; as an error here
-
-        jsr     isdisk
-        bcs     next
-
-; [open|close]cmdchannel don't call into the Kernal at all if they
-; only [in|de]crement the reference count of the shared cmdchannel
-; so we need to explicitly initialize ST here
-
-        lda     #$00
-        sta     ST
-
-        stx     tmp2
-        jsr     opencmdchannel
-        ldx     tmp2
-        jsr     closecmdchannel
-        ldx     tmp2
-
-; As we had to reference ST above anyway we can as well do so
-; here too (instead of calling READST)
-
-        lda     ST
-
-; Either the Kernal calls above were successfull or there was
-; already a cmdchannel to the device open - which is a pretty
-; good indication of its existence ;-)
-
-        bmi     next
-
-done:   txa
-        ldx     #$00
-        rts
diff --git a/libsrc/cbm/gotox.s b/libsrc/cbm/gotox.s
deleted file mode 100644 (file)
index f122a27..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; void gotox (unsigned char x);
-;
-
-        .export         _gotox
-        .import         plot           
-        .importzp       CURS_X
-
-_gotox: sta     CURS_X          ; Set new position
-        jmp     plot            ; And activate it
-
-
-
diff --git a/libsrc/cbm/gotoxy.s b/libsrc/cbm/gotoxy.s
deleted file mode 100644 (file)
index 64c6bd2..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; void gotoxy (unsigned char x, unsigned char y);
-;
-
-        .export         _gotoxy
-        .import         popa, plot
-        .importzp       CURS_X, CURS_Y
-
-_gotoxy:
-        sta     CURS_Y          ; Set Y
-        jsr     popa            ; Get X
-        sta     CURS_X          ; Set X
-        jmp     plot            ; Set the cursor position
-
-
diff --git a/libsrc/cbm/gotoy.s b/libsrc/cbm/gotoy.s
deleted file mode 100644 (file)
index 6a7ee87..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Ullrich von Bassewitz, 0.08.1998
-;
-; void gotoy (unsigned char y);
-;
-
-        .export         _gotoy
-        .import         plot
-        .importzp       CURS_Y
-
-_gotoy: sta     CURS_Y          ; Set the new position
-        jmp     plot            ; And activate it
-
diff --git a/libsrc/cbm/initcwd.s b/libsrc/cbm/initcwd.s
deleted file mode 100644 (file)
index d5e5b92..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-;
-; Stefan Haubenthal, 2005-06-08
-;
-; CBM _curunit to _cwd
-;
-
-        .export         initcwd, devicestr
-        .import         curunit, __cwd
-        .import         pusha0, tosudiva0
-        .importzp       sreg, ptr1, ptr2
-
-        .macpack        generic
-
-initcwd:
-        lda     #<__cwd
-        ldx     #>__cwd
-        sta     ptr2
-        stx     ptr2+1
-        lda     curunit
-        ; Fall through
-
-;------------------------------------------------------------------------------
-; Convert unit number in A into string representation pointed to by ptr2.
-
-devicestr:
-        jsr     pusha0
-        lda     #10
-        jsr     tosudiva0
-        ldy     #0
-        lda     sreg
-        beq     @L0             ; >=10
-        add     #'0'
-        sta     (ptr2),y
-        iny
-@L0:    lda     ptr1            ; rem
-        add     #'0'
-        sta     (ptr2),y
-        iny
-        lda     #0
-        sta     (ptr2),y
-        rts
diff --git a/libsrc/cbm/loadaddr.s b/libsrc/cbm/loadaddr.s
deleted file mode 100644 (file)
index 0675dd6..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 2010-11-13
-;
-; This module supplies the load address that is expected by Commodore
-; machines in the first two bytes of an excutable disk file.
-;
-
-
-        ; The following symbol is used by linker config to force the module
-        ; to get included into the output file
-        .export         __LOADADDR__: absolute = 1
-
-.segment        "LOADADDR"
-
-        .addr   *+2
-
diff --git a/libsrc/cbm/open.s b/libsrc/cbm/open.s
deleted file mode 100644 (file)
index 4e57f5e..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-;
-; Ullrich von Bassewitz, 16.11.2002
-;
-; int open (const char* name, int flags, ...);  /* May take a mode argument */
-;
-; Be sure to keep the value priority of closeallfiles lower than that of
-; closeallstreams (which is the high level C file I/O counterpart and must be
-; called before closeallfiles).
-
-
-        .export         _open
-        .destructor     closeallfiles, 5
-
-        .import         SETLFS, OPEN, CLOSE
-        .import         addysp, popax
-        .import         scratch, fnparse, fnaddmode, fncomplete, fnset
-        .import         opencmdchannel, closecmdchannel, readdiskerror
-        .import         fnunit, fnisfile
-        .import         _close
-        .importzp       sp, tmp2, tmp3
-
-        .include        "errno.inc"
-        .include        "fcntl.inc"
-        .include        "filedes.inc"
-
-
-;--------------------------------------------------------------------------
-; closeallfiles: Close all open files.
-
-.proc   closeallfiles
-
-        ldx     #MAX_FDS-1
-loop:   lda     fdtab,x
-        beq     next            ; Skip unused entries
-
-; Close this file
-
-        txa
-        pha                     ; Save current value of X
-        ldx     #0
-        jsr     _close
-        pla
-        tax
-
-; Next file
-
-next:   dex
-        bpl     loop
-
-        rts
-
-.endproc
-
-;--------------------------------------------------------------------------
-; _open
-
-.proc   _open
-
-; Throw away any additional parameters passed through the ellipsis
-
-        dey                     ; Parm count < 4 shouldn't be needed to be...
-        dey                     ; ...checked (it generates a c compiler warning)
-        dey
-        dey
-        beq     parmok          ; Branch if parameter count ok
-        jsr     addysp          ; Fix stack, throw away unused parameters
-
-; Parameters ok. Pop the flags and save them into tmp3
-
-parmok: jsr     popax           ; Get flags
-        sta     tmp3
-
-; Get the filename from stack and parse it. Bail out if is not ok
-
-        jsr     popax           ; Get name
-        jsr     fnparse         ; Parse it
-        tax
-        bne     oserror         ; Bail out if problem with name
-
-; Get a free file handle and remember it in tmp2
-
-        jsr     freefd
-        lda     #EMFILE         ; Load error code
-        bcs     seterrno        ; Jump in case of errors
-        stx     tmp2
-
-; Check the flags. We cannot have both, read and write flags set, and we cannot
-; open a file for writing without creating it.
-
-        lda     tmp3
-        and     #(O_RDWR | O_CREAT)
-        cmp     #O_RDONLY       ; Open for reading?
-        beq     doread          ; Yes: Branch
-        cmp     #(O_WRONLY | O_CREAT)   ; Open for writing?
-        beq     dowrite
-
-; Invalid open mode
-
-        lda     #EINVAL
-
-; Error entry. Sets _errno, clears _oserror, returns -1
-
-seterrno:
-        jmp     __directerrno
-
-; Error entry: Close the file and exit. OS error code is in A on entry
-
-closeandexit:
-        pha
-        lda     tmp2
-        clc
-        adc     #LFN_OFFS
-        jsr     CLOSE
-        ldx     fnunit
-        jsr     closecmdchannel
-        pla
-
-; Error entry: Set oserror and errno using error code in A and return -1
-
-oserror:jmp     __mappederrno
-
-; Read bit is set. Add an 'r' to the name
-
-doread: lda     #'r'
-        jsr     fnaddmode       ; Add the mode to the name
-        lda     #LFN_READ
-        bne     common          ; Branch always
-
-; If O_TRUNC is set, scratch the file, but ignore any errors
-
-dowrite:
-        lda     tmp3
-        and     #O_TRUNC
-        beq     notrunc
-        jsr     scratch
-
-; Complete the the file name. Check for append mode here.
-
-notrunc:
-        lda     tmp3            ; Get the mode again
-        and     #O_APPEND       ; Append mode?
-        bne     append          ; Branch if yes
-
-; Setup the name for create mode
-
-        lda     #'w'
-        jsr     fncomplete      ; Add type and mode to the name
-        jmp     appendcreate
-
-; Append bit is set. Add an 'a' to the name
-
-append: lda     #'a'
-        jsr     fnaddmode       ; Add open mode to file name
-appendcreate:
-        lda     #LFN_WRITE
-
-; Common read/write code. Flags in A, handle in tmp2
-
-common: sta     tmp3
-        jsr     fnset           ; Set the file name
-
-        lda     tmp2
-        clc
-        adc     #LFN_OFFS
-        ldx     fnunit
-        ldy     fnisfile        ; Is this a standard file on disk?
-        beq     nofile          ; Branch if not
-        tay                     ; Use the LFN also as SA for files
-nofile:                         ; ... else use SA=0 (read)
-        jsr     SETLFS          ; Set the file params
-
-        jsr     OPEN
-        bcs     oserror
-
-; Open the the drive command channel and read it
-
-        ldx     fnunit
-        jsr     opencmdchannel
-        bne     closeandexit
-        ldx     fnunit
-        jsr     readdiskerror
-        bne     closeandexit    ; Branch on error
-
-; File is open. Mark it as open in the table
-
-        ldx     tmp2
-        lda     tmp3
-        sta     fdtab,x
-        lda     fnunit
-        sta     unittab,x       ; Remember
-
-; Done. Return the handle in a/x
-
-        txa                     ; Handle
-        ldx     #0
-        stx     __oserror       ; Clear _oserror
-        rts
-
-.endproc
-
-
-           
diff --git a/libsrc/cbm/opendir.c b/libsrc/cbm/opendir.c
deleted file mode 100644 (file)
index b39e6b7..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-** Ullrich von Bassewitz, 2012-05-30. Based on code by Groepaz.
-*/
-
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include "dir.h"
-
-
-
-DIR* __fastcall__ opendir (register const char* name)
-{
-    unsigned char buf[2];
-    DIR* dir = 0;
-    DIR d;
-
-    /* Setup the actual file name that is sent to the disk. We accept "0:",
-    ** "1:" and "." as directory names.
-    */
-    d.name[0] = '$';
-    if (name == 0 || name[0] == '\0' || (name[0] == '.' && name[1] == '\0')) {
-        d.name[1] = '\0';
-    } else if ((name[0] == '0' || name[0] == '1') && name[1] == ':' && name[2] == '\0') {
-        d.name[1] = name[0];
-        d.name[2] = '\0';
-    } else {
-        errno = EINVAL;
-        goto exitpoint;
-    }
-
-    /* Set the offset of the first entry */
-    d.off = sizeof (buf);
-
-    /* Open the directory on disk for reading */
-    d.fd = open (d.name, O_RDONLY);
-    if (d.fd >= 0) {
-
-        /* Skip the load address */         
-        if (_dirread (&d, buf, sizeof (buf))) {
-
-            /* Allocate memory for the DIR structure returned */
-            dir = malloc (sizeof (*dir));
-
-            /* Copy the contents of d */
-            if (dir) {
-                memcpy (dir, &d, sizeof (d));
-            } else {
-                /* Set an appropriate error code */
-                errno = ENOMEM;
-            }
-        }
-    }
-
-exitpoint:
-    /* Done */
-    return dir;
-}
-
-
-
diff --git a/libsrc/cbm/oserrlist.s b/libsrc/cbm/oserrlist.s
deleted file mode 100644 (file)
index a8e64c7..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-;
-; 2002-07-18, Ullrich von Bassewitz
-; 2014-05-28, Greg King
-;
-; Defines the platform-specific error list.
-;
-; The table is built as a list of entries:
-;
-;       .byte   entrylen
-;       .byte   errorcode
-;       .asciiz errormsg
-;
-; and, terminated by an entry with length zero that is returned if the
-; error code could not be found.
-;
-
-        .export         __sys_oserrlist
-
-;----------------------------------------------------------------------------
-; Macros used to generate the list (may get moved to an include file?)
-
-; Regular entry
-.macro  sys_oserr_entry         code, msg
-        .local  Start, End
-Start:  .byte   End - Start
-        .byte   code
-        .asciiz msg
-End:
-.endmacro
-
-; Sentinel entry
-.macro  sys_oserr_sentinel      msg
-        .byte   0                       ; Length is always zero
-        .byte   0                       ; Code is unused
-        .asciiz msg
-.endmacro
-
-;----------------------------------------------------------------------------
-; The error message table
-
-.rodata
-
-__sys_oserrlist:
-        sys_oserr_entry          1, "Too many open files"
-        sys_oserr_entry          2, "File is open"
-        sys_oserr_entry          3, "File not open"
-        sys_oserr_entry          4, "File not found"
-        sys_oserr_entry          5, "Device not present"
-        sys_oserr_entry          6, "File not input"
-        sys_oserr_entry          7, "File not output"
-        sys_oserr_entry          8, "Filename missing"
-        sys_oserr_entry          9, "Illegal device"
-        sys_oserr_entry         20, "Read error (No sector header)"
-        sys_oserr_entry         21, "Read error (No sync mark)"
-        sys_oserr_entry         22, "Read error (No sector data)"
-        sys_oserr_entry         23, "Read error (Bad data checksum)"
-        sys_oserr_entry         24, "Read error (Decoding problem)"
-        sys_oserr_entry         25, "Write error (Verify failed)"
-        sys_oserr_entry         26, "Write protected"
-        sys_oserr_entry         27, "Read error (Bad header checksum)"
-        sys_oserr_entry         28, "Write error (overrun)"
-        sys_oserr_entry         29, "Disk ID mismatch"
-        sys_oserr_entry         30, "Syntax error (Command not recognized)"
-        sys_oserr_entry         31, "Syntax error (Command not implemented)"
-        sys_oserr_entry         32, "Syntax error (Command too long)"
-        sys_oserr_entry         33, "Syntax error (Invalid write filename)"
-        sys_oserr_entry         34, "Syntax error (No file given)"
-        sys_oserr_entry         39, "System file not found"
-        sys_oserr_entry         49, "Invalid format"
-        sys_oserr_entry         50, "Record not present"
-        sys_oserr_entry         51, "Overflow in record"
-        sys_oserr_entry         52, "File too large"
-        sys_oserr_entry         60, "Write file open"
-        sys_oserr_entry         61, "File not open"
-        sys_oserr_entry         62, "File not found"
-        sys_oserr_entry         63, "File exists"
-        sys_oserr_entry         64, "File type mismatch"
-        sys_oserr_entry         65, "No block"
-        sys_oserr_entry         66, "Illegal track or sector"
-        sys_oserr_entry         67, "Illegal system track or sector"
-        sys_oserr_entry         70, "No channel"
-        sys_oserr_entry         71, "BAM error"
-        sys_oserr_entry         72, "Disk full"
-        sys_oserr_entry         73, "DOS version mismatch"
-        sys_oserr_entry         74, "Drive not ready"
-        sys_oserr_entry         75, "Format error"
-        sys_oserr_entry         77, "Illegal partition"
-        sys_oserr_entry         78, "Bad system area"
-        sys_oserr_sentinel      "Unknown error"
diff --git a/libsrc/cbm/oserror.s b/libsrc/cbm/oserror.s
deleted file mode 100644 (file)
index 872c759..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-;
-; 2000-05-17, Ullrich von Bassewitz
-; 2014-05-28, Greg King
-;
-; int __fastcall__ _osmaperrno (unsigned char oserror);
-; /* Map a system-specific error into a system-independent code. */
-;
-
-        .include        "errno.inc"
-
-.code
-
-__osmaperrno:
-        ldx     #ErrTabSize
-@L1:    cmp     ErrTab-2,x      ; Search for the error code
-        beq     @L2             ; Jump if found
-        dex
-        dex
-        bne     @L1             ; Next entry
-
-; Code not found, return EUNKNOWN
-
-        lda     #<EUNKNOWN
-        ldx     #>EUNKNOWN
-        rts
-
-; Found the code
-
-@L2:    lda     ErrTab-1,x
-        ldx     #$00            ; High byte always zero
-        rts
-
-.rodata
-
-ErrTab:
-        .byte   1, EMFILE       ; Too many open files
-        .byte   2, EINVAL       ; File is open
-        .byte   3, EINVAL       ; File not open
-        .byte   4, ENOENT       ; File not found
-        .byte   5, ENODEV       ; Device not present
-        .byte   6, EINVAL       ; File not input
-        .byte   7, EINVAL       ; File not output
-        .byte   8, EINVAL       ; Filename missing
-        .byte   9, ENODEV       ; Illegal device
-        .byte  20, EBUSY        ; No sector header
-        .byte  21, EBUSY        ; No sync mark
-        .byte  22, EIO          ; No sector data
-        .byte  23, EIO          ; Checksum error
-        .byte  24, EIO          ; Decode error
-        .byte  25, EIO          ; Verify error
-        .byte  26, EACCES       ; Write protected
-        .byte  27, EIO          ; Checksum error
-        .byte  28, EIO          ; Write overrun
-        .byte  29, EBUSY        ; Disk ID mismatch
-        .byte  30, EINVAL       ; Command not recognized
-        .byte  31, ENOSYS       ; Command not implemented
-        .byte  32, EINVAL       ; Command too long
-        .byte  33, EINVAL       ; Invalid write filename
-        .byte  34, EINVAL       ; No file given
-        .byte  39, ENOENT       ; System file not found
-        .byte  49, EACCES       ; Invalid format
-        .byte  50, ESPIPE       ; Record not present
-        .byte  51, ENOSPC       ; Overflow in record
-        .byte  52, ENOSPC       ; File too large
-        .byte  60, EBUSY        ; Write file open
-        .byte  61, EINVAL       ; File not open
-        .byte  62, ENOENT       ; File not found
-        .byte  63, EEXIST       ; File exists
-        .byte  64, EINVAL       ; File type mismatch
-        .byte  65, ESPIPE       ; No block
-        .byte  66, EINVAL       ; Illegal track or sector
-        .byte  67, EIO          ; Illegal system track or sector
-        .byte  70, EBUSY        ; No channel
-        .byte  71, EIO          ; BAM error
-        .byte  72, ENOSPC       ; Disk full
-        .byte  73, EACCES       ; DOS version mismatch
-        .byte  74, ENODEV       ; Drive not ready
-        .byte  75, EIO          ; Format error
-        .byte  77, EINVAL       ; Illegal partition
-        .byte  78, EIO          ; Bad system area
-
-ErrTabSize = (* - ErrTab)
diff --git a/libsrc/cbm/overlayaddr.s b/libsrc/cbm/overlayaddr.s
deleted file mode 100644 (file)
index c0756b3..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-;
-; Oliver Schmidt, 2013-05-28
-;
-; This module supplies the load addresses that are expected by Commodore
-; machines in the first two bytes of overlay disk files.
-;
-
-
-        ; The following symbol is used by linker config to force the module
-        ; to get included into the output file
-        .export         __OVERLAYADDR__: absolute = 1
-
-.segment        "OVL1ADDR"
-
-        .addr   *+2
-
-.segment        "OVL2ADDR"
-
-        .addr   *+2
-
-.segment        "OVL3ADDR"
-
-        .addr   *+2
-
-.segment        "OVL4ADDR"
-
-        .addr   *+2
-
-.segment        "OVL5ADDR"
-
-        .addr   *+2
-
-.segment        "OVL6ADDR"
-
-        .addr   *+2
-
-.segment        "OVL7ADDR"
-
-        .addr   *+2
-
-.segment        "OVL8ADDR"
-
-        .addr   *+2
-
-.segment        "OVL9ADDR"
-
-        .addr   *+2
diff --git a/libsrc/cbm/penadjust.c b/libsrc/cbm/penadjust.c
deleted file mode 100644 (file)
index 8b788dd..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-** Main lightpen driver calibration functions.
-**
-** 2013-07-25, Greg King
-*/
-
-
-#include <stddef.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <pen.h>
-
-
-static const char *name;
-
-
-/* Get a lightpen calibration value from a file if it exists.  Otherwise, call
-** pen_calibrate() to create a value; then, write it into a file, so that it
-** will be available at the next time that the lightpen is used.
-** Might change the screen.
-*/
-static void __fastcall__ adjuster (unsigned char *XOffset)
-{
-    int fd = open (name, O_RDONLY);
-
-    if (fd < 0) {
-        pen_calibrate (XOffset);
-        fd = open (name, O_WRONLY | O_CREAT | O_EXCL);
-        if (fd >= 0) {
-            (void) write (fd, XOffset, 1);
-            close (fd);
-        }
-    } else {
-        (void) read (fd, XOffset, 1);
-        close (fd);
-    }
-}
-
-
-/* pen_adjust() is optional; if you want to use its feature,
-** then it must be called before a driver is installed.
-** Note:  This function merely saves the file-name pointer, and sets
-** the pen_adjuster pointer.  The file will be read only when a driver
-** is installed, and only if that driver wants to be calibrated.
-*/
-void __fastcall__ pen_adjust (const char *filename)
-{
-    if (filename != NULL && filename[0] != '\0') {
-        name = filename;
-        pen_adjuster = adjuster;
-    } else {
-        pen_adjuster = pen_calibrate;
-    }
-}
diff --git a/libsrc/cbm/read.s b/libsrc/cbm/read.s
deleted file mode 100644 (file)
index aa692a3..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-;
-; 2002-11-16, Ullrich von Bassewitz
-; 2013-12-23, Greg King
-;
-; int read (int fd, void* buf, unsigned count);
-;
-
-        .export         _read
-        .constructor    initstdin
-
-        .import         SETLFS, OPEN, CHKIN, BASIN, CLRCH, BSOUT, READST
-        .import         rwcommon
-        .import         popax
-        .importzp       ptr1, ptr2, ptr3, tmp1, tmp2, tmp3
-
-        .include        "cbm.inc"
-        .include        "errno.inc"
-        .include        "fcntl.inc"
-        .include        "filedes.inc"
-
-
-;--------------------------------------------------------------------------
-; initstdin: Open the stdin file descriptors for the keyboard
-
-.segment        "INIT"
-
-.proc   initstdin
-
-        lda     #LFN_READ
-        sta     fdtab+STDIN_FILENO
-        lda     #STDIN_FILENO + LFN_OFFS
-        ldx     #CBMDEV_KBD
-        stx     unittab+STDIN_FILENO
-        ldy     #$FF
-        jsr     SETLFS
-        jmp     OPEN            ; Will always succeed
-
-.endproc
-
-;--------------------------------------------------------------------------
-; _read
-
-.code
-
-.proc   _read
-
-        jsr     rwcommon        ; Pop params, check handle
-        bcs     invalidfd       ; Invalid handle
-
-; Check if the LFN is valid and the file is open for writing
-
-        adc     #LFN_OFFS       ; Carry is already clear
-        tax
-        lda     fdtab-LFN_OFFS,x; Get flags for this handle
-        tay
-        and     #LFN_READ       ; File open for writing?
-        beq     invalidfd
-
-; Check the EOF flag. If it is set, don't read anything
-
-        tya                     ; Get flags again
-        bmi     eof
-
-; Remember the device number.
-
-        ldy     unittab-LFN_OFFS,x
-        sty     unit
-
-; Valid lfn. Make it the input file
-
-        jsr     CHKIN
-        bcc     @L3             ; Branch if ok
-        jmp     __mappederrno   ; Store into __oserror, map to errno, return -1
-
-; Read the next byte
-
-@L0:    jsr     BASIN
-        sta     tmp1            ; Save the input byte
-        ldx     unit
-        bne     @L0_1           ; Not keyboard/screen-editor
-        cmp     #$0D            ; Is it a Carriage Return?
-        bne     @L0_1
-        jsr     BSOUT           ; Yes, echo it (because editor didn't)
-
-@L0_1:  jsr     READST          ; Read the IEEE status
-        sta     tmp3            ; Save it
-        and     #%10111111      ; Check anything but the EOI bit
-        bne     devnotpresent   ; Assume device not present
-
-; Store the byte just read
-
-        ldy     #0
-        lda     tmp1
-        sta     (ptr2),y
-        inc     ptr2
-        bne     @L1
-        inc     ptr2+1          ; *buf++ = A;
-
-; Increment the byte count
-
-@L1:    inc     ptr3
-        bne     @L2
-        inc     ptr3+1
-
-; Get the status again and check the EOI bit
-
-@L2:    lda     tmp3
-        and     #%01000000      ; Check for EOI
-        bne     @L4             ; Jump if end of file reached
-
-; Decrement the count
-
-@L3:    inc     ptr1
-        bne     @L0
-        inc     ptr1+1
-        bne     @L0
-        beq     done            ; Branch always
-
-; Set the EOI flag and bail out
-
-@L4:    ldx     tmp2            ; Get the handle
-        lda     #LFN_EOF
-        ora     fdtab,x
-        sta     fdtab,x
-
-; Read done, close the input channel
-
-done:   jsr     CLRCH
-
-; Clear _oserror and return the number of chars read
-
-eof:    lda     #0
-        sta     __oserror
-        lda     ptr3
-        ldx     ptr3+1
-        rts
-
-; Error entry: Device not present
-
-devnotpresent:
-        lda     #ENODEV
-        jmp     __directerrno   ; Sets _errno, clears _oserror, returns -1
-
-; Error entry: The given file descriptor is not valid or not open
-
-invalidfd:
-        lda     #EBADF
-        jmp     __directerrno   ; Sets _errno, clears _oserror, returns -1
-
-.endproc
-
-
-;--------------------------------------------------------------------------
-
-.bss
-
-unit:   .res    1
-
-
diff --git a/libsrc/cbm/readdir.c b/libsrc/cbm/readdir.c
deleted file mode 100644 (file)
index 8d69689..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
-** Ullrich von Bassewitz, 2012-05-30. Based on code by Groepaz.
-*/
-
-
-
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <cbm.h>
-#include "dir.h"
-
-#include <stdio.h>
-
-
-struct dirent* __fastcall__ readdir (register DIR* dir)
-{
-    register unsigned char* b;
-    register unsigned char i;
-    register unsigned char count;
-    static unsigned char s;
-    static unsigned char j;
-    unsigned char buffer[0x40];
-    static struct dirent entry;
-
-
-    /* Remember the directory offset for this entry */
-    entry.d_off = dir->off;
-
-    /* Skip the basic line-link */
-    if (!_dirread (dir, buffer, 2)) {
-        /* errno already set */
-        goto exitpoint;
-    }
-
-    /* Read the number of blocks */
-    if (!_dirread (dir, &entry.d_blocks, sizeof (entry.d_blocks))) {
-        goto exitpoint;
-    }
-
-    /* Read the next file entry into the buffer */
-    for (count = 0, b = buffer; count < sizeof (buffer); ++b) {
-        if (!_dirread1 (dir, b)) {
-            goto exitpoint;
-        }
-        ++count;
-        if (*b == '\0') {
-            break;
-        }
-    }
-
-    /* Bump the directory offset and include the bytes for line-link and size */
-    dir->off += count + 4;
-
-    /* End of directory is reached if the buffer contains "blocks free". It is
-    ** sufficient here to check for the leading 'b'. buffer will contain at
-    ** least one byte if we come here.
-    */
-    if (buffer[0] == 'b') {
-        goto exitpoint;
-    }
-
-    /* Parse the buffer for the filename and file type */
-    i = 0;
-    j = 0;
-    s = 0;
-    b = buffer;
-    while (i < count) {
-        switch (s) {
-
-            case 0:
-                /* Searching for start of file name */
-                if (*b == '"') {
-                    s = 1;
-                }
-                break;
-
-            case 1:
-                /* Within file name */
-                if (*b == '"') {
-                    /* End of file name found. */
-                    entry.d_name[j] = '\0';
-                    entry.d_namlen = j;
-                    if (entry.d_off > 2) {
-                        /* Proceed with file type */
-                        s = 2;
-                    } else {
-                        /* This is a disk header, so we're done */
-                        entry.d_type = _CBM_T_HEADER;
-                        return &entry;
-                    }
-                } else if (j < sizeof (entry.d_name) - 1) {
-                    entry.d_name[j] = *b;
-                    ++j;
-                }
-                break;
-
-            case 2:
-                /* Searching for file type */
-                if (*b != ' ') {
-                    entry.d_type = _cbm_filetype (*b);
-                    if (*b == 'd') {
-                        /* May be DEL or DIR, check next char */
-                        s = 3;
-                    } else {
-                        /* Done */
-                        return &entry;
-                    }
-                }
-                break;
-
-            case 3:
-                /* Distinguish DEL or DIR file type entries */
-                switch (*b) {
-                    case 'e':                                   break;
-                    case 'i': entry.d_type = _CBM_T_DIR;        break;
-                    default:  entry.d_type = _CBM_T_OTHER;      break;
-                }
-                return &entry;
-        }
-        ++i;
-        ++b;
-    }
-
-    /* Something went wrong when parsing the directory entry */
-    _errno = EIO;
-exitpoint:
-    return 0;
-}
-
-
-
diff --git a/libsrc/cbm/rewinddir.s b/libsrc/cbm/rewinddir.s
deleted file mode 100644 (file)
index d84d08a..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-;
-; Ullrich von Bassewitz, 2012-06-03
-;
-; Based on C code by Groepaz
-;
-; void __fastcall__ rewinddir (DIR *dir);
-;
-
-
-        .include        "dir.inc"
-        .include        "zeropage.inc"
-
-        .import         pushax
-
-.proc   _rewinddir
-
-        jsr     pushax          ; Push dir
-        ldx     #0
-        stx     sreg+1
-        stx     sreg
-        lda     #32             ; Pass 32 as offset ...
-        jmp     _seekdir        ; ... to seekdir
-
-.endproc
-
diff --git a/libsrc/cbm/rwcommon.s b/libsrc/cbm/rwcommon.s
deleted file mode 100644 (file)
index c044b6c..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-;
-; Ullrich von Bassewitz, 17.11.2002
-;
-; Common stuff for the read/write routines
-;
-
-        .export         rwcommon
-
-        .import         popax
-        .importzp       ptr1, ptr2, ptr3, tmp2
-
-        .include        "errno.inc"
-        .include        "filedes.inc"
-
-
-;--------------------------------------------------------------------------
-; rwcommon: Pop the parameters from stack, preprocess them and place them
-; into zero page locations. Return carry set if the handle is invalid,
-; return carry clear if it is ok. If the carry is clear, the handle is
-; returned in A.
-
-.proc   rwcommon
-
-        eor     #$FF
-        sta     ptr1
-        txa
-        eor     #$FF
-        sta     ptr1+1          ; Remember -count-1
-
-        jsr     popax           ; Get buf
-        sta     ptr2
-        stx     ptr2+1
-
-        lda     #$00
-        sta     ptr3
-        sta     ptr3+1          ; Clear ptr3
-
-        jsr     popax           ; Get the handle
-        cpx     #$01
-        bcs     @L9
-        cmp     #MAX_FDS        ; Set carry if fd too large
-        sta     tmp2
-@L9:    rts                     ; Return with result in carry
-
-.endproc
-
-
diff --git a/libsrc/cbm/scratch.s b/libsrc/cbm/scratch.s
deleted file mode 100644 (file)
index e1665e5..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-11-16, 2009-02-22
-;
-; Scratch a file on disk
-;
-
-        .export         scratch
-        .import         opencmdchannel, closecmdchannel, writefndiskcmd
-        .import         fnunit, fncmd
-
-        .include        "cbm.inc"
-
-;--------------------------------------------------------------------------
-; scratch: Scratch a file on disk. Expects the name of the file to be already
-; parsed. Returns an error code in A, which may either be the code read from
-; the command channel, or another error when accessing the command channel
-; failed.
-
-.proc   scratch
-
-        ldx     fnunit
-        jsr     opencmdchannel
-        bne     done
-
-        lda     #'s'            ; Scratch command
-        sta     fncmd
-        jsr     writefndiskcmd
-
-        pha
-        ldx     fnunit
-        jsr     closecmdchannel
-        pla
-
-done:   rts
-
-.endproc
-
-
diff --git a/libsrc/cbm/seekdir.c b/libsrc/cbm/seekdir.c
deleted file mode 100644 (file)
index 8ccfadb..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
-** 2012-06-03, Ullrich von Bassewitz. Based on code by Groepaz.
-** 2014-07-16, Greg King
-*/
-
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include "dir.h"
-
-
-
-void __fastcall__ seekdir (register DIR* dir, long offs)
-{
-    unsigned      o;
-    unsigned char count;
-    unsigned char buf[128];
-
-    /* Make sure that we have a reasonable value for offs.  We reject
-    ** negative numbers by converting them to (very high) unsigned values.
-    */
-    if ((unsigned long)offs > 0x1000uL) {
-        errno = EINVAL;
-        return;
-    }
-
-    /* Close the directory file descriptor */
-    close (dir->fd);
-
-    /* Reopen it using the old name */
-    dir->fd = open (dir->name, O_RDONLY);
-    if (dir->fd < 0) {
-        /* Oops! */
-        return;
-    }
-
-    /* Skip until we've reached the target offset in the directory */
-    o = dir->off = (unsigned)offs;
-    while (o) {
-
-        /* Determine size of next chunk to read */
-        if (o > sizeof (buf)) {
-            count = sizeof (buf);
-            o -= sizeof (buf);
-        } else {
-            count = (unsigned char)o;
-            o = 0;
-        }
-
-        /* Skip */
-        if (!_dirread (dir, buf, count)) {
-            return;
-        }
-    }
-}
-
-
-
diff --git a/libsrc/cbm/syschdir.s b/libsrc/cbm/syschdir.s
deleted file mode 100644 (file)
index a4a83cd..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-;
-; 2012-10-16, Oliver Schmidt
-; 2014-07-16, Greg King
-;
-; unsigned char __fastcall__ _syschdir (const char* name);
-;
-
-        .export         __syschdir
-        .import         diskinit, fnunit, curunit, initcwd
-        .importzp       ptr1, tmp1, tmp2
-
-;--------------------------------------------------------------------------
-; __syschdir
-
-.proc   __syschdir
-
-; Save name
-
-        sta     ptr1
-        stx     ptr1+1
-
-; Process first character
-
-        ldy     #0
-        lda     (ptr1),y
-        beq     err
-        jsr     getdigit
-        bcs     err
-        tax
-
-; Process second character
-
-        iny
-        lda     (ptr1),y
-        beq     init
-        jsr     getdigit
-        bcs     err
-        stx     tmp1            ; First digit
-        sta     tmp2            ; Second digit
-
-; Multiply first digit by 10
-
-        txa
-        asl     a               ; * 2
-        asl     a               ; * 4, carry cleared
-        adc     tmp1            ; * 5
-        asl     a               ; * 10, carry cleared
-
-; Add second digit to product
-
-        adc     tmp2
-        tax
-
-; Process third character
-
-        iny
-        lda     (ptr1),y
-        bne     err
-
-; Check device readiness
-
-init:   txa
-        jsr     diskinit
-        bne     done
-
-; Success, update cwd
-
-        lda     fnunit          ; Set by diskinit
-        sta     curunit
-        jmp     initcwd         ; Returns with A = 0
-
-; Return with error in A
-
-err:    lda     #9              ; "Illegal device"
-done:   rts
-
-.endproc
-
-;--------------------------------------------------------------------------
-; getdigit -- Converts PetSCII to binary.
-; Sets carry if the character is outside of '0'-'9'.
-
-.proc   getdigit
-
-        sec
-        sbc     #'0'
-        bcs     @L0
-        sec
-        rts
-@L0:    cmp     #10
-        rts
-
-.endproc
diff --git a/libsrc/cbm/sysremove.s b/libsrc/cbm/sysremove.s
deleted file mode 100644 (file)
index 51a3d43..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 16.11.2002
-;
-; unsigned char __fastcall__ _sysremove (const char* name);
-;
-
-        .export         __sysremove
-        .import         fnparse, scratch
-
-
-;--------------------------------------------------------------------------
-; __sysremove:
-
-.proc   __sysremove
-
-        jsr     fnparse         ; Parse the given file name
-        bne     err             ; Jump if yes
-        jmp     scratch         ; Scratch the file, return an error code
-err:    rts
-
-.endproc
-
-
diff --git a/libsrc/cbm/sysrename.s b/libsrc/cbm/sysrename.s
deleted file mode 100644 (file)
index 86cb370..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-02-22
-;
-; unsigned char __fastcall__ _sysrename (const char *oldpath, const char *newpath);
-;
-
-        .export         __sysrename
-
-        .import         fnparse, fnadd, fnparsename
-        .import         opencmdchannel, closecmdchannel
-        .import         writefndiskcmd, readdiskerror
-        .import         popax
-
-        .import         fncmd, fnunit
-        .importzp       ptr1
-
-
-;--------------------------------------------------------------------------
-; __sysrename:
-
-.proc   __sysrename
-
-        jsr     fnparse         ; Parse first filename, pops newpath
-        bne     done
-
-        lda     #'='
-        jsr     fnadd
-
-        jsr     popax
-        sta     ptr1
-        stx     ptr1+1
-        ldy     #0
-        jsr     fnparsename     ; Parse second filename
-        bne     done
-
-        ldx     fnunit
-        jsr     opencmdchannel
-        bne     done
-
-        lda     #'r'            ; Rename command
-        sta     fncmd
-        jsr     writefndiskcmd
-
-;       ldx     fnunit
-;       jsr     readdiskerror
-
-        pha
-        ldx     fnunit
-        jsr     closecmdchannel
-        pla
-
-done:   rts
-
-.endproc
-
-
diff --git a/libsrc/cbm/telldir.s b/libsrc/cbm/telldir.s
deleted file mode 100644 (file)
index dc1822d..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-;
-; Ullrich von Bassewitz, 2012-06-03
-;
-; Based on C code by Groepaz
-;
-; long __fastcall__ telldir (DIR *dir);
-;
-
-
-        .include        "dir.inc"
-        .include        "zeropage.inc"
-
-
-.proc   _telldir
-
-        sta     ptr1
-        stx     ptr1+1
-
-; Clear high word of returned value
-
-        lda     #0
-        sta     sreg
-        sta     sreg+1
-
-; Return dir->off
-
-        ldy     #DIR::off+1
-        lda     (ptr1),y
-        tax
-        dey
-        lda     (ptr1),y
-        rts
-
-.endproc
-
diff --git a/libsrc/cbm/toascii.s b/libsrc/cbm/toascii.s
deleted file mode 100644 (file)
index e491263..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-11-02
-;
-; unsigned char __fastcall__ toascii (unsigned char c);
-; /* Convert a target specific character to ascii */
-;
-
-        .export         _toascii
-
-        .macpack        generic
-
-.proc   _toascii
-
-; X must be zero on return
-
-        ldx     #0
-
-; Check for code between 65 and 90
-
-        cmp     #$41
-        blt     @L1
-        cmp     #$5B
-        bge     @L1
-
-; Code between 65 and 90
-
-        ora     #$20
-        rts
-
-; Check for code between 193 and 219
-
-@L1:    cmp     #$C1
-        blt     @L9
-        cmp     #$DC
-        bge     @L9
-
-; Code between 193 and 219
-
-        and     #$7F
-@L9:    rts
-
-.endproc
diff --git a/libsrc/cbm/wherex.s b/libsrc/cbm/wherex.s
deleted file mode 100644 (file)
index 29cf06f..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; unsigned char wherex (void);
-;
-
-        .export         _wherex
-        .import         CURS_X: zp
-
-
-.proc   _wherex
-        lda     CURS_X
-        ldx     #$00
-        rts
-.endproc
-
diff --git a/libsrc/cbm/wherey.s b/libsrc/cbm/wherey.s
deleted file mode 100644 (file)
index 9bc7473..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; unsigned char wherey (void);
-;
-
-        .export         _wherey
-        .import         CURS_Y: zp
-
-
-.proc   _wherey
-        lda     CURS_Y
-        ldx     #$00
-        rts
-.endproc
-
diff --git a/libsrc/cbm/write.s b/libsrc/cbm/write.s
deleted file mode 100644 (file)
index fdf7cfb..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-;
-; Ullrich von Bassewitz, 16.11.2002
-;
-; int write (int fd, const void* buf, unsigned count);
-;
-
-        .export         _write
-        .constructor    initstdout
-
-        .import         SETLFS, OPEN, CKOUT, BSOUT, READST, CLRCH
-        .import         rwcommon
-        .importzp       sp, ptr1, ptr2, ptr3
-
-        .include        "cbm.inc"
-        .include        "errno.inc"
-        .include        "fcntl.inc"
-        .include        "filedes.inc"
-
-
-;--------------------------------------------------------------------------
-; initstdout: Open the stdout and stderr file descriptors for the screen.
-
-.segment        "INIT"
-
-.proc   initstdout
-
-        lda     #LFN_WRITE
-        sta     fdtab+STDOUT_FILENO
-        sta     fdtab+STDERR_FILENO
-        lda     #CBMDEV_SCREEN
-        sta     unittab+STDOUT_FILENO
-        sta     unittab+STDERR_FILENO
-        lda     #STDOUT_FILENO + LFN_OFFS
-        jsr     @L1
-        lda     #STDERR_FILENO + LFN_OFFS
-@L1:    ldx     #CBMDEV_SCREEN
-        ldy     #$FF
-        jsr     SETLFS
-        jmp     OPEN            ; Will always succeed
-
-.endproc
-
-;--------------------------------------------------------------------------
-; _write
-
-.code
-
-.proc   _write
-
-        jsr     rwcommon        ; Pop params, check handle
-        bcs     invalidfd       ; Invalid handle
-
-; Check if the LFN is valid and the file is open for writing
-
-        adc     #LFN_OFFS       ; Carry is already clear
-        tax
-        lda     fdtab-LFN_OFFS,x; Get flags for this handle
-        and     #LFN_WRITE      ; File open for writing?
-        beq     invalidfd
-
-; Valid lfn. Make it the output file
-
-        jsr     CKOUT
-        bcc     @L2
-@error: jmp     __mappederrno   ; Store into __oserror, map to errno, return -1
-
-; Output the next character from the buffer
-
-@L0:    ldy     #0
-        lda     (ptr2),y
-        inc     ptr2
-        bne     @L1
-        inc     ptr2+1          ; A = *buf++;
-@L1:    jsr     BSOUT
-
-; Check the status
-
-        pha
-        jsr     READST
-        lsr     a               ; Bit zero is write timeout
-        bne     devnotpresent2
-        pla
-        bcs     @L3
-
-; Count characters written
-
-        inc     ptr3
-        bne     @L2
-        inc     ptr3+1
-
-; Decrement count
-
-@L2:    inc     ptr1
-        bne     @L0
-        inc     ptr1+1
-        bne     @L0
-
-; Wrote all chars or disk full. Close the output channel
-
-@L3:    jsr     CLRCH
-
-; Clear _oserror and return the number of chars written
-
-        lda     #0
-        sta     __oserror
-        lda     ptr3
-        ldx     ptr3+1
-        rts
-
-; Error entry: Device not present
-
-devnotpresent2:
-        pla
-devnotpresent:
-        lda     #ENODEV
-        jmp     __directerrno   ; Sets _errno, clears _oserror, returns -1
-
-; Error entry: The given file descriptor is not valid or not open
-
-invalidfd:
-        lda     #EBADF
-        jmp     __directerrno   ; Sets _errno, clears _oserror, returns -1
-
-.endproc
-
-
-
-
diff --git a/libsrc/cbm510/_scrsize.s b/libsrc/cbm510/_scrsize.s
deleted file mode 100644 (file)
index 8b68b8c..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; Screen size variables
-;
-
-        .export         screensize
-        .import         SCREEN
-                              
-        screensize      = SCREEN
-
-
diff --git a/libsrc/cbm510/banking.s b/libsrc/cbm510/banking.s
deleted file mode 100644 (file)
index 8ed72d0..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-;
-; Ullrich von Bassewitz, 28.09.1998
-;
-; Banking routines for the 610.
-;
-
-        .export         set_bank, sys_bank, restore_bank
-        .importzp       ptr1, segsave
-
-        .include        "cbm510.inc"
-
-.code
-
-.proc   sys_bank
-        pha
-        lda     IndReg
-        sta     segsave
-        lda     #$0F
-        sta     IndReg
-        pla
-        rts
-.endproc
-
-.proc   set_bank
-        pha
-        lda     IndReg
-        sta     segsave
-        pla
-        sta     IndReg
-        rts
-.endproc
-
-.proc   restore_bank
-        pha
-        lda     segsave
-        sta     IndReg
-        pla
-        rts
-.endproc
-
-
diff --git a/libsrc/cbm510/break.s b/libsrc/cbm510/break.s
deleted file mode 100644 (file)
index b58db06..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-;
-; Ullrich von Bassewitz, 27.09.1998
-;
-; void set_brk (unsigned Addr);
-; void reset_brk (void);
-;
-
-        .export         _set_brk, _reset_brk
-        .export         _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
-        .import         _atexit, BRKVec
-
-        .include        "cbm510.inc"
-
-
-.bss
-_brk_a:         .res    1
-_brk_x:         .res    1
-_brk_y:         .res    1
-_brk_sr:        .res    1
-_brk_pc:        .res    2
-_brk_01:        .res    1
-
-oldvec:         .res    2               ; Old vector
-
-
-.data
-uservec:        jmp     $FFFF           ; Patched at runtime
-
-
-.code
-
-; Set the break vector
-.proc   _set_brk
-
-        sta     uservec+1
-        stx     uservec+2       ; Set the user vector
-
-        lda     oldvec
-        ora     oldvec+1        ; Did we save the vector already?
-        bne     L1              ; Jump if we installed the handler already
-
-        lda     BRKVec
-        sta     oldvec
-        lda     BRKVec+1
-        sta     oldvec+1        ; Save the old vector
-
-L1:     lda     #<brk_handler   ; Set the break vector to our routine
-        ldx     #>brk_handler
-        sta     BRKVec
-        stx     BRKVec+1
-        rts
-
-.endproc
-
-
-; Reset the break vector
-.proc   _reset_brk
-
-        lda     oldvec
-        ldx     oldvec+1
-        beq     @L9             ; Jump if vector not installed
-        sta     BRKVec
-        stx     BRKVec+1
-        lda     #$00
-        sta     oldvec          ; Clear the old vector
-        stx     oldvec+1
-@L9:    rts
-
-.endproc
-
-
-
-; Break handler, called if a break occurs
-
-.proc   brk_handler
-
-        pla
-        sta     _brk_01
-        pla
-        sta     _brk_y
-        pla
-        sta     _brk_x
-        pla
-        sta     _brk_a
-        pla
-        and     #$EF            ; Clear break bit
-        sta     _brk_sr
-        pla                     ; PC low
-        sec
-        sbc     #2              ; Point to start of brk
-        sta     _brk_pc
-        pla                     ; PC high
-        sbc     #0
-        sta     _brk_pc+1
-
-        jsr     uservec         ; Call the user's routine
-
-        lda     _brk_01
-        sta     IndReg
-
-        lda     _brk_pc+1
-        pha
-        lda     _brk_pc
-        pha
-        lda     _brk_sr
-        pha
-        ldx     _brk_x
-        ldy     _brk_y
-        lda     _brk_a
-        rti                     ; Jump back...
-
-.endproc
-
-
diff --git a/libsrc/cbm510/cgetc.s b/libsrc/cbm510/cgetc.s
deleted file mode 100644 (file)
index c58b452..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-;
-; Ullrich von Bassewitz, 16.09.2001
-;
-; char cgetc (void);
-;
-
-        .export         _cgetc
-        .condes         k_blncur, 2
-        .import         cursor
-
-        .include        "cbm510.inc"
-        .include        "extzp.inc"
-
-
-; ------------------------------------------------------------------------
-
-.proc   _cgetc
-
-        lda     keyidx                  ; Characters waiting?
-        bne     L3                      ; Jump if so
-
-; Switch on the cursor if needed
-
-        lda     CURS_FLAG
-        pha
-        lda     cursor
-        jsr     setcursor
-L1:     lda     keyidx
-        beq     L1
-        ldx     #0
-        pla
-        bne     L2
-        inx
-L2:     txa
-        jsr     setcursor
-
-; Read the character from the keyboard buffer
-
-L3:     ldx     #$00            ; Get index
-        ldy     keybuf          ; Get first character in the buffer
-        sei
-L4:     lda     keybuf+1,x      ; Move up the remaining chars
-        sta     keybuf,x
-        inx
-        cpx     keyidx
-        bne     L4
-        dec     keyidx
-        cli
-
-        ldx     #$00            ; High byte
-        tya                     ; First char from buffer
-        rts
-
-.endproc
-
-; ------------------------------------------------------------------------
-;
-
-.proc   setcursor
-
-        ldy     #$00                    ;
-        tax                             ; On or off?
-        bne     @L9                     ; Go set it on
-        lda     CURS_FLAG               ; Is the cursor currently off?
-        bne     @L8                     ; Jump if yes
-        lda     #1
-        sta     CURS_FLAG               ; Mark it as off
-        lda     CURS_STATE              ; Cursor currently displayed?
-        sty     CURS_STATE              ; Cursor will be cleared later
-        beq     @L8                     ; Jump if no
-
-; Switch to the system bank, load Y with the cursor X coordinate
-
-        lda     #$0F
-        sta     IndReg                  ; Access system bank
-        ldy     CURS_X
-
-; Reset the current cursor
-
-        lda     CURS_COLOR
-        sta     (CRAM_PTR),y            ; Store cursor color
-        lda     ExecReg
-        sta     IndReg                  ; Switch to our segment
-        lda     (SCREEN_PTR),y
-        eor     #$80                    ; Toggle reverse flag
-        sta     (SCREEN_PTR),y
-
-; Done
-
-@L8:    rts
-
-@L9:    sty     CURS_FLAG               ; Cursor on (Y = 0)
-        rts
-
-.endproc
-
-
-; ------------------------------------------------------------------------
-; Blink the cursor in the interrupt. A blinking cursor is only available if
-; we use the cgetc() function, so we will export this IRQ handler only in
-; case the module is included into a program.
-
-
-.proc   k_blncur
-
-        lda     CURS_FLAG               ; Is the cursor on?
-        bne     curend                  ; Jump if not
-        dec     CURS_BLINK
-        bne     curend
-
-; Re-initialize the blink counter
-
-        lda     #20                     ; Initial value
-        sta     CURS_BLINK
-
-; Load Y with the cursor X coordinate
-
-        ldy     CURS_X
-
-; Check if the cursor state was on or off before
-
-        lda     CURS_COLOR              ; Load color behind cursor
-        lsr     CURS_STATE              ; Cursor currently displayed?
-        bcs     curset                  ; Jump if yes
-
-; Cursor was off before, switch it on
-
-        inc     CURS_STATE              ; Mark as displayed
-        lda     (CRAM_PTR),y            ; Get color behind cursor...
-        sta     CURS_COLOR              ; ...and remember it
-        lda     CHARCOLOR               ; Use character color
-
-; Set the cursor with color in A
-
-curset: sta     (CRAM_PTR),y            ; Store cursor color
-        lda     ExecReg
-        sta     IndReg                  ; Switch to our segment
-        lda     (SCREEN_PTR),y
-        eor     #$80                    ; Toggle reverse flag
-        sta     (SCREEN_PTR),y
-
-; Switch back to the system bank
-
-        lda     #$0F
-        sta     IndReg
-
-curend: rts
-
-.endproc
-
-
-
diff --git a/libsrc/cbm510/clrscr.s b/libsrc/cbm510/clrscr.s
deleted file mode 100644 (file)
index 2233f60..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-;
-; Ullrich von Bassewitz, 14.09.2001
-;
-
-        .export         _clrscr
-        .import         plot
-
-        .include        "cbm510.inc"
-        .include        "extzp.inc"
-
-; ------------------------------------------------------------------------
-; void clrscr (void);
-
-.proc   _clrscr
-
-        lda     #0
-        sta     CURS_X
-        sta     CURS_Y
-        jsr     plot            ; Set cursor to top left corner
-
-        ldx     #$00            ; Count
-        jsr     clearpage
-        jsr     clearpage
-        jsr     clearpage
-        ldx     #<(40*25)       ; Count
-        jsr     clearpage       ; Clear remainder of last page
-        jmp     plot            ; Set screen pointer again
-
-.endproc
-
-
-.proc   clearpage
-
-        txa
-        pha                     ; Save count
-
-        lda     #$20            ; Screencode for blank
-        ldy     #$00
-@L1:    sta     (SCREEN_PTR),y
-        iny
-        dex
-        bne     @L1
-        inc     SCREEN_PTR+1
-
-        pla
-        tax                     ; Reload count
-        lda     IndReg
-        pha
-        lda     #$0F
-        sta     IndReg          ; Switch to the system bank
-        lda     CHARCOLOR       ; Load color
-        ldy     #$00
-@L2:    sta     (CRAM_PTR),y
-        iny
-        dex
-        bne     @L2
-        inc     CRAM_PTR+1
-        pla
-        sta     IndReg          ; Restore the old indirect bank
-        rts
-
-.endproc
diff --git a/libsrc/cbm510/color.s b/libsrc/cbm510/color.s
deleted file mode 100644 (file)
index 127450b..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-;
-; Ullrich von Bassewitz, 13.09.2001
-;
-
-        .export         _textcolor, _bgcolor, _bordercolor
-        .import         sys_bank, restore_bank
-        .import         vic: zp, CHARCOLOR: zp
-
-        .include        "cbm510.inc"
-
-
-; ------------------------------------------------------------------------
-; unsigned char __fastcall__ textcolor (unsigned char color);
-; /* Set the color for text output. The old color setting is returned. */
-;
-
-.proc   _textcolor
-
-        ldx     CHARCOLOR       ; get old value
-        sta     CHARCOLOR       ; set new value
-        txa
-        rts
-
-.endproc
-
-; ------------------------------------------------------------------------
-; unsigned char __fastcall__ bgcolor (unsigned char color);
-; /* Set the color for the background. The old color setting is returned. */
-;
-
-.proc   _bgcolor
-
-        jsr     sys_bank                ; Switch to the system bank
-        pha                             ; Save new color
-        ldy     #VIC_BG_COLOR0
-        lda     (vic),y                 ; Get current color...
-        tax                             ; ...into X
-        pla                             ; Get new color
-        sta     (vic),y                 ; Set new color
-        txa                             ; Get old color into X
-        jmp     restore_bank            ; Restore the old color
-
-.endproc
-
-; ------------------------------------------------------------------------
-; unsigned char __fastcall__ bordercolor (unsigned char color);
-; /* Set the color for the border. The old color setting is returned. */
-
-.proc   _bordercolor
-
-        jsr     sys_bank                ; Switch to the system bank
-        pha                             ; Save new color
-        ldy     #VIC_BORDERCOLOR
-        lda     (vic),y                 ; Get current color...
-        tax                             ; ...into X
-        pla                             ; Get new color
-        sta     (vic),y                 ; Set new color
-        txa                             ; Get old color into X
-        jmp     restore_bank            ; Restore the old color
-
-.endproc
-
-
-
diff --git a/libsrc/cbm510/cputc.s b/libsrc/cbm510/cputc.s
deleted file mode 100644 (file)
index bd8c364..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-;
-; Ullrich von Bassewitz, 14.09.2001
-;
-; void cputcxy (unsigned char x, unsigned char y, char c);
-; void cputc (char c);
-;
-
-        .export         _cputcxy, _cputc, cputdirect, putchar
-        .export         newline, plot
-
-        .import         popa, _gotoxy
-        .import         __VIDRAM_START__
-        .import         CURS_X: zp, CURS_Y: zp, CHARCOLOR: zp, RVS: zp
-        .import         SCREEN_PTR: zp, CRAM_PTR: zp
-
-        .include        "cbm510.inc"
-
-        .macpack        generic
-
-; ------------------------------------------------------------------------
-;
-
-_cputcxy:
-        pha                     ; Save C
-        jsr     popa            ; Get Y
-        jsr     _gotoxy         ; Set cursor, drop x
-        pla                     ; Restore C
-
-; Plot a character - also used as internal function
-
-_cputc: cmp     #$0A            ; CR?
-        bne     L1
-        lda     #0
-        sta     CURS_X
-        beq     plot            ; Recalculate pointers
-
-L1:     cmp     #$0D            ; LF?
-        beq     newline         ; Recalculate pointers
-
-; Printable char of some sort
-
-        cmp     #' '
-        bcc     cputdirect      ; Other control char
-        tay
-        bmi     L10
-        cmp     #$60
-        bcc     L2
-        and     #$DF
-        bne     cputdirect      ; Branch always
-L2:     and     #$3F
-
-cputdirect:
-        jsr     putchar         ; Write the character to the screen
-
-; Advance cursor position
-
-advance:
-        iny
-        cpy     #XSIZE
-        bne     L3
-        jsr     newline         ; new line
-        ldy     #0              ; + cr
-L3:     sty     CURS_X
-        rts
-
-; Handle character if high bit set
-
-L10:    and     #$7F
-        cmp     #$7E            ; PI?
-        bne     L11
-        lda     #$5E            ; Load screen code for PI
-        bne     cputdirect
-L11:    ora     #$40
-        bne     cputdirect      ; Branch always
-
-; Move the cursor into the next line
-
-newline:
-        inc     CURS_Y
-
-; Set cursor position, calculate RAM pointers
-
-plot:   ldx     CURS_Y
-        lda     LineLSBTab,x
-        sta     SCREEN_PTR
-        sta     CRAM_PTR
-        lda     LineMSBTab,x
-        sta     SCREEN_PTR+1
-        add     #.hibyte(COLOR_RAM - __VIDRAM_START__)
-        sta     CRAM_PTR+1
-        rts
-
-; Write one character to the screen without doing anything else, return X
-; position in Y
-
-putchar:
-        ora     RVS             ; Set revers bit
-        ldy     CURS_X
-        sta     (SCREEN_PTR),y  ; Set char
-        ldx     IndReg
-        lda     #$0F
-        sta     IndReg
-        lda     CHARCOLOR
-        sta     (CRAM_PTR),y    ; Set color
-        stx     IndReg
-        rts
-
-; -------------------------------------------------------------------------
-; Low bytes of the start address of the screen lines
-
-.rodata
-
-LineLSBTab:
-        .repeat 25, I
-        .byte   .lobyte(__VIDRAM_START__ + I * 40)
-        .endrep
-
-; -------------------------------------------------------------------------
-; High bytes of the start address of the screen lines
-
-LineMSBTab:
-        .repeat 25, I
-        .byte   .hibyte(__VIDRAM_START__ + I * 40)
-        .endrep
diff --git a/libsrc/cbm510/crt0.s b/libsrc/cbm510/crt0.s
deleted file mode 100644 (file)
index 86137b1..0000000
+++ /dev/null
@@ -1,587 +0,0 @@
-;
-; Startup code for cc65 (CBM 500 version)
-;
-
-        .export         _exit, BRKVec
-        .export         __STARTUP__ : absolute = 1      ; Mark as startup
-
-        .import         _clrscr, initlib, donelib, callirq_y
-        .import         push0, callmain
-        .import         __CHARRAM_START__, __CHARRAM_SIZE__, __VIDRAM_START__
-        .import         __BSS_RUN__, __BSS_SIZE__, __EXTZP_RUN__
-        .import         __INTERRUPTOR_COUNT__
-        .import         scnkey, UDTIM
-
-        .include        "zeropage.inc"
-        .include        "extzp.inc"
-        .include        "cbm510.inc"
-
-
-; ------------------------------------------------------------------------
-; The BASIC header and a small BASIC program. Since it isn't possible to start
-; programs in other banks using SYS, the BASIC program will write a small
-; machine code program into memory at $100; and, start that machine code
-; program. The machine code program will then start the machine language
-; code in bank 0, which will initialize the system by copying stuff from
-; the system bank, and start the application.
-;
-; Here's the BASIC program that's in the following lines:
-;
-; 10 for i=0 to 4
-; 20 read j
-; 30 poke 256+i,j
-; 40 next i
-; 50 sys 256
-; 60 data 120,169,0,133,0
-;
-; The machine program in the data lines is:
-;
-; sei
-; lda     #$00
-; sta     $00           <-- Switch to bank 0 after this command
-;
-; Initialization is complex not only because of the jumping from one bank
-; into another, but also because we want to save memory; and because of
-; that, we will use the system memory ($00-$3FF) for initialization stuff
-; that is overwritten later.
-;
-
-.segment        "EXEHDR"
-
-        .byte   $03,$00,$11,$00,$0a,$00,$81,$20,$49,$b2,$30,$20,$a4,$20,$34,$00
-        .byte   $19,$00,$14,$00,$87,$20,$4a,$00,$27,$00,$1e,$00,$97,$20,$32,$35
-        .byte   $36,$aa,$49,$2c,$4a,$00,$2f,$00,$28,$00,$82,$20,$49,$00,$39,$00
-        .byte   $32,$00,$9e,$20,$32,$35,$36,$00,$4f,$00,$3c,$00,$83,$20,$31,$32
-        .byte   $30,$2c,$31,$36,$39,$2c,$30,$2c,$31,$33,$33,$2c,$30,$00,$00,$00
-
-;------------------------------------------------------------------------------
-; A table that contains values that must be transferred from the system zero-
-; page into our zero-page. Contains pairs of bytes; first one is the address
-; in the system ZP, second one is our ZP address. The table goes into page 2;
-; but, is declared here because it is needed earlier.
-
-.SEGMENT        "PAGE2"
-
-; (We use .proc because we need both a label and a scope.)
-
-.proc   transfer_table
-
-        .byte   $9F, DEVNUM
-        .byte   $CA, CURS_Y
-        .byte   $CB, CURS_X
-        .byte   $E6, CURS_FLAG
-        .byte   $E7, CURS_BLINK
-        .byte   $EC, CHARCOLOR
-
-.endproc
-
-
-;------------------------------------------------------------------------------
-; Page 3 data. This page contains the break vector and the bankswitch
-; subroutine that is copied into high memory on startup. The space occupied by
-; this routine will later be used for a copy of the bank 15 stack. It must be
-; saved since we're going to destroy it when calling bank 15.
-
-.segment        "PAGE3"
-
-BRKVec: .addr   _exit           ; BRK indirect vector
-
-.proc   callbank15
-
-        excrts  = $FEFE
-
-.org    $FEC3
-
-entry:  php
-        pha
-        lda     #$0F            ; Bank 15
-        sta     IndReg
-        txa
-        pha
-        tya
-        pha
-        sei
-        ldy     #$FF
-        lda     (sysp1),y
-        tay
-        lda     ExecReg
-        sta     (sysp1),y
-        dey
-
-        lda     #.hibyte(excrts-1)
-        sta     (sysp1),y
-        dey
-        lda     #.lobyte(excrts-1)
-        sta     (sysp1),y
-
-        tya
-        sec
-        sbc     #7
-        sta     $1FF            ; Save new sp
-        tay
-
-        tsx
-
-        pla
-        iny
-        sta     (sysp1),y
-        pla
-        iny
-        sta     (sysp1),y
-        pla
-        iny
-        sta     (sysp1),y
-        pla
-        iny
-        sta     (sysp1),y
-
-        lda     $105,x
-        sec
-        sbc     #3
-        iny
-        sta     (sysp1),y
-        lda     $106,x
-        sbc     #0
-        iny
-        sta     (sysp1),y
-
-        ldy     $1FF            ; Restore sp in bank 15
-
-        lda     #.hibyte(expull-1)
-        sta     (sysp1),y
-        dey
-        lda     #.lobyte(expull-1)
-        sta     (sysp1),y
-        dey
-        pla
-        pla
-        tsx
-        stx     $1FF
-        tya
-        tax
-        txs
-        lda     IndReg
-        jmp     $FFF6
-
-expull: pla
-        tay
-        pla
-        tax
-        pla
-        plp
-        rts
-
-.if (expull <> $FF26)
-.error "Symbol expull must be aligned with Kernal in bank 15"
-.endif
-
-.reloc
-
-.endproc
-
-;------------------------------------------------------------------------------
-; The code in the target bank when switching back will be put at the bottom
-; of the stack. We will jump here to switch segments. The range $F2..$FF is
-; not used by any Kernal routine.
-
-.segment        "STARTUP"
-
-Back:   sta     ExecReg
-
-; We are at $100 now. The following snippet is a copy of the code that is poked
-; in the system bank memory by the BASIC header program; it's only for
-; documentation, and not actually used here:
-
-        sei
-        lda     #$00
-        sta     ExecReg
-
-; This is the actual starting point of our code after switching banks for
-; startup. Beware: The following code will get overwritten as soon as we
-; use the stack (since it's in page 1)! We jump to another location since
-; we need some space for subroutines that aren't used later.
-
-        jmp     Origin
-
-; Hardware vectors, copied to $FFF6
-
-.proc   vectors
-        sta     ExecReg
-        rts
-        nop
-        .word   nmi             ; NMI vector
-        .word   0               ; Reset -- not used
-        .word   irq             ; IRQ vector
-.endproc
-
-; Initializers for the extended zero-page. See "extzp.s".
-
-.proc   extzp
-        .word   $0100           ; sysp1
-        .word   $0300           ; sysp3
-        .word   $d800           ; vic
-        .word   $da00           ; sid
-        .word   $db00           ; cia1
-        .word   $dc00           ; cia2
-        .word   $dd00           ; acia
-        .word   $de00           ; tpi1
-        .word   $df00           ; tpi2
-        .word   $eab1           ; ktab1
-        .word   $eb11           ; ktab2
-        .word   $eb71           ; ktab3
-        .word   $ebd1           ; ktab4
-.endproc
-
-; Switch the indirect segment to the system bank.
-
-Origin: lda     #$0F
-        sta     IndReg
-
-; Initialize the extended zero-page.
-
-        ldx     #.sizeof(extzp)-1
-L1:     lda     extzp,x
-        sta     <__EXTZP_RUN__,x
-        dex
-        bpl     L1
-
-; Save the old stack pointer from the system bank; and, set up our hw sp.
-
-        tsx
-        txa
-        ldy     #$FF
-        sta     (sysp1),y       ; Save system stack point into $F:$1FF
-        ldx     #$FE            ; Leave $1FF untouched for cross-bank calls
-        txs                     ; Set up our own stack
-
-; Copy stuff from the system zero-page to ours.
-
-        lda     #.sizeof(transfer_table)
-        sta     ktmp
-L2:     ldx     ktmp
-        ldy     transfer_table-2,x
-        lda     transfer_table-1,x
-        tax
-        lda     (sysp0),y
-        sta     $00,x
-        dec     ktmp
-        dec     ktmp
-        bne     L2
-
-; Set the interrupt, NMI, and other vectors.
-
-        ldx     #.sizeof(vectors)-1
-L3:     lda     vectors,x
-        sta     $10000 - .sizeof(vectors),x
-        dex
-        bpl     L3
-
-; Set up the C stack.
-
-        lda     #.lobyte(callbank15::entry)
-        sta     sp
-        lda     #.hibyte(callbank15::entry)
-        sta     sp+1
-
-; Set up the subroutine and jump vector table that redirects Kernal calls to
-; the system bank.
-
-        ldy     #.sizeof(callbank15)
-@L1:    lda     callbank15-1,y
-        sta     callbank15::entry-1,y
-        dey
-        bne     @L1
-
-; Set up the jump vector table. Y is zero on entry.
-
-        ldx     #45-1           ; Number of vectors
-@L2:    lda     #$20            ; JSR opcode
-        sta     $FF6F,y
-        iny
-        lda     #.lobyte(callbank15::entry)
-        sta     $FF6F,y
-        iny
-        lda     #.hibyte(callbank15::entry)
-        sta     $FF6F,y
-        iny
-        dex
-        bpl     @L2
-
-; Set the indirect segment to the bank that we're executing in.
-
-        lda     ExecReg
-        sta     IndReg
-
-; Zero the BSS segment. We will do that here instead of calling the routine
-; in the common library, since we have the memory anyway; and this way,
-; it's reused later.
-
-        lda     #<__BSS_RUN__
-        sta     ptr1
-        lda     #>__BSS_RUN__
-        sta     ptr1+1
-        lda     #0
-        tay
-
-; Clear full pages.
-
-        ldx     #>__BSS_SIZE__
-        beq     Z2
-Z1:     sta     (ptr1),y
-        iny
-        bne     Z1
-        inc     ptr1+1          ; Next page
-        dex
-        bne     Z1
-
-; Clear the remaining page.
-
-Z2:     ldx     #<__BSS_SIZE__
-        beq     Z4
-Z3:     sta     (ptr1),y
-        iny
-        dex
-        bne     Z3
-Z4:     jmp     Init
-
-; ------------------------------------------------------------------------
-; We are at $200 now. We may now start calling subroutines safely since
-; the code we execute is no longer in the stack page.
-
-.segment        "PAGE2"
-
-; Copy the character ROM from the system bank into the execution bank.
-
-Init:   lda     #<$C000
-        sta     ptr1
-        lda     #>$C000
-        sta     ptr1+1
-        lda     #<__CHARRAM_START__
-        sta     ptr2
-        lda     #>__CHARRAM_START__
-        sta     ptr2+1
-        lda     #>__CHARRAM_SIZE__      ; 16 * 256 bytes to copy
-        sta     tmp1
-        ldy     #$00
-ccopy:  lda     #$0F
-        sta     IndReg          ; Access the system bank
-ccopy1: lda     (ptr1),y
-        sta     __VIDRAM_START__,y
-        iny
-        bne     ccopy1
-        lda     ExecReg
-        sta     IndReg
-ccopy2: lda     __VIDRAM_START__,y
-        sta     (ptr2),y
-        iny
-        bne     ccopy2
-        inc     ptr1+1
-        inc     ptr2+1          ; Bump high pointer bytes
-        dec     tmp1
-        bne     ccopy
-
-; Clear the video memory. We will do this before switching the video to bank 0,
-; to avoid garbage when doing so.
-
-        jsr     _clrscr
-
-; Reprogram the VIC so that the text screen and the character ROM are in the
-; execution bank. This is done in three steps:
-
-        lda     #$0F            ; We need access to the system bank
-        sta     IndReg
-
-; Place the VIC video RAM into bank 0.
-; CA (STATVID)   = 0
-; CB (VICDOTSEL) = 0
-
-        ldy     #TPI::CR
-        lda     (tpi1),y
-        sta     vidsave+0
-        and     #%00001111
-        ora     #%10100000
-        sta     (tpi1),y
-
-; Set bit 14/15 of the VIC address range to the high bits of __VIDRAM_START__.
-; PC6/PC7 (VICBANKSEL 0/1) = 11
-
-        ldy     #TPI::PRC
-        lda     (tpi2),y
-        sta     vidsave+1
-        and     #$3F
-        ora     #<((>__VIDRAM_START__) & $C0)
-        sta     (tpi2),y
-
-; Set the VIC base address register to the addresses of the video and
-; character RAM.
-
-        ldy     #VIC_VIDEO_ADR
-        lda     (vic),y
-        sta     vidsave+2
-        and     #$01
-        ora     #<(((__VIDRAM_START__ >> 6) & $F0) | ((__CHARRAM_START__ >> 10) & $0E) | $02)
-;       and     #$0F
-;       ora     #<(((>__VIDRAM_START__) << 2) & $F0)
-        sta     (vic),y
-
-; Switch back to the execution bank.
-
-        lda     ExecReg
-        sta     IndReg
-
-; Activate the chained interrupt handlers; then, enable interrupts.
-
-        lda     #.lobyte(__INTERRUPTOR_COUNT__*2)
-        sta     irqcount
-        cli
-
-; Call module constructors.
-
-        jsr     initlib
-
-; Push the command-line arguments; and, call main().
-
-        jsr     callmain
-
-; Call the module destructors. This is also the exit() entry and the default entry
-; point for the break vector.
-
-_exit:  pha                     ; Save the return code on stack
-        jsr     donelib         ; Run module destructors
-        lda     #$00
-        sta     irqcount        ; Disable custom irq handlers
-
-; Address the system bank.
-
-        lda     #$0F
-        sta     IndReg
-
-; Switch back the video to the system bank.
-
-        ldy     #TPI::CR
-        lda     vidsave+0
-        sta     (tpi1),y
-
-        ldy     #TPI::PRC
-        lda     vidsave+1
-        sta     (tpi2),y
-
-        ldy     #VIC_VIDEO_ADR
-        lda     vidsave+2
-        sta     (vic),y
-
-; Copy stuff back from our zero-page to the system's.
-
-.if 0
-        lda     #.sizeof(transfer_table)
-        sta     ktmp
-@L0:    ldx     ktmp
-        ldy     transfer_table-2,x
-        lda     transfer_table-1,x
-        tax
-        lda     $00,x
-        sta     (sysp0),y
-        dec     ktmp
-        dec     ktmp
-        bne     @L0
-.endif
-
-; Place the program return code into BASIC's status variable.
-
-        pla
-        ldy     #$9C            ; ST
-        sta     (sysp0),y
-
-; Set up the welcome code at the stack bottom in the system bank.
-
-        ldy     #$FF
-        lda     (sysp1),y       ; Load system bank sp
-        tax
-        iny                     ; Y = 0
-        lda     #$58            ; CLI opcode
-        sta     (sysp1),y
-        iny
-        lda     #$60            ; RTS opcode
-        sta     (sysp1),y
-        lda     IndReg
-        sei
-        txs
-        jmp     Back
-
-; -------------------------------------------------------------------------
-; The IRQ handler goes into PAGE2. For performance reasons, and to allow
-; easier chaining, we do handle the IRQs in the execution bank (instead of
-; passing them to the system bank).
-
-; This is the mapping of the active IRQ register of the 6525 (tpi1):
-;
-; Bit   7       6       5       4       3       2       1       0
-;                               |       |       |       |       ^ 50 Hz.
-;                               |       |       |       ^ SRQ IEEE 488
-;                               |       |       ^ CIA
-;                               |       ^ IRQB ext. Port
-;                               ^ ACIA
-
-irq:    pha
-        txa
-        pha
-        tya
-        pha
-        lda     IndReg
-        pha
-        lda     ExecReg
-        sta     IndReg          ; Be sure to address our segment
-        tsx
-        lda     $105,x          ; Get the flags from the stack
-        and     #$10            ; Test break flag
-        bne     dobrk
-
-; It's an IRQ.
-
-        cld
-
-; Call the chained IRQ handlers.
-
-        ldy     irqcount
-        beq     irqskip
-        jsr     callirq_y       ; Call the functions
-
-; Done with the chained IRQ handlers; check the TPI for IRQs, and handle them.
-
-irqskip:lda     #$0F
-        sta     IndReg
-        ldy     #TPI::AIR
-        lda     (tpi1),y        ; Interrupt Register 6525
-        beq     noirq
-
-; 50/60Hz. interrupt
-
-        cmp     #%00000001      ; ticker IRQ?
-        bne     irqend
-        jsr     scnkey          ; Poll the keyboard
-        jsr     UDTIM           ; Bump the time
-
-; Done.
-
-irqend: ldy     #TPI::AIR
-        sta     (tpi1),y        ; Clear interrupt
-
-noirq:  pla
-        sta     IndReg
-        pla
-        tay
-        pla
-        tax
-        pla
-nmi:    rti
-
-dobrk:  jmp     (BRKVec)
-
-; -------------------------------------------------------------------------
-; Data area
-
-.data
-vidsave:.res    3
-
-.bss
-irqcount:       .byte   0
diff --git a/libsrc/cbm510/devnum.s b/libsrc/cbm510/devnum.s
deleted file mode 100644 (file)
index d678a2a..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-;
-; Oliver Schmidt, 2010-02-14
-;
-
-        .include        "extzp.inc"
-
-        .exportzp       devnum := DEVNUM
diff --git a/libsrc/cbm510/emd/cbm510-ram.s b/libsrc/cbm510/emd/cbm510-ram.s
deleted file mode 100644 (file)
index f724c73..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-;
-; Extended memory driver for the CBM510 additional RAM banks. Driver works
-; without problems when linked statically.
-;
-; Ullrich von Bassewitz, 2002-12-09, 2003-12-27
-;
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-        .include        "cbm510.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _cbm510_ram_emd
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-RAMBANK = 1
-OFFS    = 2
-
-; ------------------------------------------------------------------------
-; Data.
-
-.bss
-curpage:        .res    1               ; Current page number
-
-window:         .res    256             ; Memory "window"
-pagecount:      .res    1               ; Number of available pages
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #$FF
-        sta     curpage                 ; Invalidate the current page
-        sta     pagecount               ; Assume all memory available
-
-        sec
-        jsr     $FF99                   ; MEMTOP
-
-        cmp     #RAMBANK                ; Top of memory in bank 2?
-        bne     @L1                     ; No: We can use all the memory
-        txa
-        sub     #OFFS
-        tya
-        sbc     #$00
-        sta     pagecount
-
-@L1:    lda     #<EM_ERR_OK
-        ldx     #>EM_ERR_OK
-;       rts                             ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     pagecount
-        ldx     #0
-        rts
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:    sta     curpage                 ; Remember the new page
-
-        sta     ptr1+1
-        lda     #OFFS
-        sta     ptr1
-
-; Transfer one page
-
-        ldx     IndReg
-        lda     #RAMBANK
-        sta     IndReg
-
-        ldy     #$00
-@L1:    .repeat 2
-        lda     (ptr1),y
-        sta     window,y
-        iny
-        .endrepeat
-        bne     @L1
-
-        stx     IndReg
-
-; Return the memory window
-
-        lda     #<window
-        ldx     #>window                ; Return the window address
-        rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-
-USE:    sta     curpage                 ; Remember the page
-        lda     #<window
-        ldx     #>window                ; Return the window
-        rts
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT: lda     curpage                 ; Get the current page
-        cmp     #$FF
-        beq     done                    ; Jump if no page mapped
-
-        sta     ptr1+1
-        lda     #OFFS
-        sta     ptr1
-
-; Transfer one page
-
-        ldx     IndReg
-        lda     #RAMBANK
-        sta     IndReg
-
-        ldy     #$00
-@L1:    .repeat 2
-        lda     window,y
-        sta     (ptr1),y
-        iny
-        .endrepeat
-        bne     @L1
-
-        stx     IndReg
-
-; Done
-
-done:   rts
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYFROM:
-        jsr     setup
-
-; Setup the buffer address in this bank.
-
-        sta     copyfrom_buf
-        stx     copyfrom_buf+1
-
-; Check if we must copy full pages
-
-        ldx     ptr2+1
-        beq     @L2
-
-; Copy full pages
-
-        ldx     #$00
-@L1:    jsr     copyfrom
-        inc     ptr1+1
-        inc     copyfrom_buf+1
-@L2:    dec     ptr2+1
-        bne     @L1
-
-; Copy the remaining page
-
-        ldx     ptr2
-        beq     @L3
-
-        jsr     copyfrom
-
-; Restore the indirect segment
-
-@L3:    lda     ExecReg
-        sta     IndReg
-
-; Done
-
-        rts
-
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO: jsr     setup
-
-; Setup the buffer address in this bank.
-
-        sta     copyto_buf
-        stx     copyto_buf+1
-
-; Check if we must copy full pages
-
-        ldx     ptr2+1
-        beq     @L2
-
-; Copy full pages
-
-        ldx     #$00
-@L1:    jsr     copyto
-        inc     ptr1+1
-        inc     copyto_buf+1
-@L2:    dec     ptr2+1
-        bne     @L1
-
-; Copy the remaining page
-
-        ldx     ptr2
-        beq     @L3
-
-        jsr     copyto
-
-; Restore the indirect segment
-
-@L3:    lda     ExecReg
-        sta     IndReg
-
-; Done
-
-        rts
-
-; ------------------------------------------------------------------------
-; setup: Helper function for COPYFROM and COPYTO, will setup parameters.
-;
-
-setup:  sta     ptr3
-        stx     ptr3+1                  ; Save the passed em_copy pointer
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr3),y
-        add     #OFFS
-        sta     ptr1
-        ldy     #EM_COPY::PAGE
-        lda     (ptr3),y
-        adc     #$00
-        sta     ptr1+1
-
-        ldy     #EM_COPY::COUNT
-        lda     (ptr3),y
-        sta     ptr2
-        iny
-        lda     (ptr3),y
-        sta     ptr2+1                  ; Get count into ptr2
-
-        ldy     #EM_COPY::BUF+1
-        lda     (ptr3),y
-        tax
-        dey
-        lda     (ptr3),y                ; Get the buffer pointer into a/x
-
-        ldy     #RAMBANK
-        sty     IndReg
-
-        ldy     #$00
-
-        rts
-
-; ------------------------------------------------------------------------
-; copyfrom
-
-.data
-copyfrom:
-        lda     (ptr1),y
-copyfrom_buf = * + 1
-        sta     $0000,y
-        iny
-        dex
-        bne     copyfrom
-        rts
-
-; ------------------------------------------------------------------------
-; copyto
-
-.data
-copyto:
-copyto_buf = * + 1
-        lda     $0000,y
-        sta     (ptr1),y
-        iny
-        dex
-        bne     copyto
-        rts
-
diff --git a/libsrc/cbm510/extzp.inc b/libsrc/cbm510/extzp.inc
deleted file mode 100644 (file)
index f500c9b..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-27
-;
-; Additional zero page locations for the CBM510.
-;
-
-; ------------------------------------------------------------------------
-
-        .globalzp       sysp1, sysp3, vic, sid, ipccia, cia1, cia2, acia
-        .globalzp       tpi1, tpi2, ktab1, ktab2, ktab3, ktab4
-
-        .globalzp       sysp0, time, segsave, ktmp, CURS_X, CURS_Y, CURS_FLAG
-        .globalzp       CURS_STATE, CURS_BLINK, CURS_COLOR, CHARCOLOR, RVS
-        .globalzp       DEVNUM, SCREEN_PTR, CRAM_PTR
-        .globalzp       keyidx, keybuf, keyscanbuf, keysave, modkey
-        .globalzp       norkey, graphmode, lastidx, rptdelay, rptcount
-
-
-
diff --git a/libsrc/cbm510/extzp.s b/libsrc/cbm510/extzp.s
deleted file mode 100644 (file)
index a1ad6b6..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-02-16
-;
-; Additional zero page locations for the CBM510.
-; NOTE: The zeropage locations contained in this file get initialized
-; in the startup code, so if you change anything here, be sure to check
-; not only the linker config, but also the startup file.
-;
-
-; ------------------------------------------------------------------------
-
-        .include        "extzp.inc"
-
-.segment        "EXTZP" : zeropage
-
-; The following values get initialized from a table in the startup code.
-; While this sounds crazy, it has reasons that have to do with modules (and
-; we have the space anyway). So when changing anything, be sure to adjust the
-; initializer table
-sysp1:          .res    2
-sysp3:          .res    2
-vic:            .res    2
-sid:            .res    2
-cia1:           .res    2
-cia2:           .res    2
-acia:           .res    2
-tpi1:           .res    2
-tpi2:           .res    2
-ktab1:          .res    2
-ktab2:          .res    2
-ktab3:          .res    2
-ktab4:          .res    2
-
-sysp0:          .word   $0000
-time:           .dword  $0000
-segsave:        .byte   0
-ktmp:           .byte   0
-CURS_X:         .byte   0
-CURS_Y:         .byte   0
-CURS_FLAG:      .byte   0
-CURS_STATE:     .byte   0
-CURS_BLINK:     .byte   0
-CURS_COLOR:     .byte   0
-CHARCOLOR:      .byte   0
-RVS:            .byte   0
-DEVNUM:         .byte   0
-SCREEN_PTR:     .word   0
-CRAM_PTR:       .word   0
-; Stuff for our own kbd polling routine
-keyidx:         .byte   0               ; Number of keys in keyboard buffer
-keybuf:         .res    10              ; Keyboard buffer
-keyscanbuf:     .byte   0
-keysave:        .byte   0
-modkey:         .byte   0
-norkey:         .byte   0
-graphmode:      .byte   0
-lastidx:        .byte   0
-rptdelay:       .byte   0
-rptcount:       .byte   0
-
diff --git a/libsrc/cbm510/irq.s b/libsrc/cbm510/irq.s
deleted file mode 100644 (file)
index 1f5a48b..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-;
-; IRQ handling (CBM 500 version)
-;
-
-        .export         initirq, doneirq
-
-initirq:
-doneirq:
-        rts
diff --git a/libsrc/cbm510/joy/cbm510-std.s b/libsrc/cbm510/joy/cbm510-std.s
deleted file mode 100644 (file)
index 7133f93..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-;
-; Standard joystick driver for the Commodore 510 (aka P500). May be used
-; multiple times when linked to the statically application.
-;
-; Ullrich von Bassewitz, 2003-02-16
-;
-
-        .include        "zeropage.inc"
-        .include        "../extzp.inc"
-
-        .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-        .include        "cbm510.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _cbm510_std_joy
-
-; Driver signature
-
-        .byte   $6A, $6F, $79           ; "joy"
-        .byte   JOY_API_VERSION         ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
-; Jump table.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READ
-        .addr   0                       ; IRQ entry unused
-
-; ------------------------------------------------------------------------
-; Constants
-
-JOY_COUNT       = 2             ; Number of joysticks we support
-
-
-; ------------------------------------------------------------------------
-; Data.
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #<JOY_ERR_OK
-        ldx     #>JOY_ERR_OK
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:
-        lda     #<JOY_COUNT
-        ldx     #>JOY_COUNT
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
-
-READ:   ldx     #$0F            ; Switch to the system bank
-        stx     IndReg
-        tax                     ; Save joystick number
-
-; Get the direction bits
-
-        ldy     #CIA::PRB
-        lda     (cia2),y        ; Read joystick inputs
-        sta     tmp1
-
-; Get the fire bits
-
-        ldy     #CIA::PRA
-        lda     (cia2),y
-
-; Make the result value
-
-        cpx     #$00            ; Joystick 0?
-        bne     @L1             ; Jump if no
-
-; Joystick 1, fire is in bit 6, direction in bit 0-3
-
-        asl     a
-        jmp     @L2
-
-; Joystick 2, fire is in bit 7, direction in bit 5-7
-
-@L1:    ldx     #$00            ; High byte of return value
-        lsr     tmp1
-        lsr     tmp1
-        lsr     tmp1
-        lsr     tmp1
-
-; Mask the relavant bits, get the fire bit
-
-@L2:    asl     a               ; Fire bit into carry
-        lda     tmp1
-        and     #$0F
-        bcc     @L3
-        ora     #$10
-@L3:    eor     #$1F            ; All bits are inverted
-
-; Switch back to the execution bank and return the joystick mask in a/x
-
-        ldy     ExecReg
-        sty     IndReg
-        rts
-
diff --git a/libsrc/cbm510/joy_stat_stddrv.s b/libsrc/cbm510/joy_stat_stddrv.s
deleted file mode 100644 (file)
index a38a5bd..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Address of the static standard joystick driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void joy_static_stddrv[];
-;
-
-        .export _joy_static_stddrv
-        .import _cbm510_std_joy
-
-.rodata
-
-_joy_static_stddrv := _cbm510_std_joy
diff --git a/libsrc/cbm510/joy_stddrv.s b/libsrc/cbm510/joy_stddrv.s
deleted file mode 100644 (file)
index e07cb57..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Name of the standard joystick driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const char joy_stddrv[];
-;
-
-        .export _joy_stddrv
-
-.rodata
-
-_joy_stddrv:    .asciiz "cbm510-std.joy"
diff --git a/libsrc/cbm510/kbhit.s b/libsrc/cbm510/kbhit.s
deleted file mode 100644 (file)
index 92c83e7..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; unsigned char kbhit (void);
-;
-
-        .export         _kbhit
-        .import         keyidx: zp
-
-
-.proc   _kbhit
-
-        ldx     #0              ; High byte of return is always zero
-        lda     keyidx          ; Get number of characters
-        beq     L9
-        lda     #1
-L9:     rts
-
-.endproc
-
-
-
-
-
diff --git a/libsrc/cbm510/kclose.s b/libsrc/cbm510/kclose.s
deleted file mode 100644 (file)
index a262313..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-21
-;
-; CLOSE kernal call.
-;
-; NOTE: The CLOSE system call in the CBM610 kernal will only remove the file
-; entry and not close the file on IEC if the carry is clear on entry. To make
-; this somewhat compatible with the C64, set the carry before jumping to the
-; kernal.
-
-        .export         CLOSE
-
-.proc   CLOSE
-
-        sec
-        jmp     $FFC3
-
-.endproc
-
-
-
diff --git a/libsrc/cbm510/kernal.s b/libsrc/cbm510/kernal.s
deleted file mode 100644 (file)
index 9ea4f0e..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-20
-;
-; CBM610 kernal functions
-;
-
-        .export         CINT
-        .export         IOINIT
-        .export         RAMTAS
-        .export         RESTOR
-        .export         VECTOR
-        .export         SETMSG
-        .export         SECOND
-        .export         TKSA
-        .export         MEMTOP
-        .export         MEMBOT
-        .export         SCNKEY
-        .export         SETTMO
-        .export         ACPTR
-        .export         CIOUT
-        .export         UNTLK
-        .export         UNLSN
-        .export         LISTEN
-        .export         TALK
-        .export         SETLFS
-        .export         CHKIN
-        .export         CKOUT
-        .export         CLRCH
-        .export         BASIN
-        .export         BSOUT
-        .export         LOAD
-        .export         SAVE
-        .export         STOP
-        .export         GETIN
-        .export         CLALL
-        .export         PLOT
-
-
-;-----------------------------------------------------------------------------
-; All functions are available in the kernal jump table. Functions having
-; replacements (usually short ones where the overhead of the cross bank call
-; is not worth the trouble) are commented out.
-
-CINT            = $FF81
-IOINIT          = $FF84
-RAMTAS          = $FF87
-RESTOR          = $FF8A
-VECTOR          = $FF8D
-SETMSG          = $FF90
-SECOND          = $FF93
-TKSA            = $FF96
-MEMTOP          = $FF99
-MEMBOT          = $FF9C
-SCNKEY          = $FF9F
-SETTMO          = $FFA2
-ACPTR           = $FFA5
-CIOUT           = $FFA8
-UNTLK           = $FFAB
-UNLSN           = $FFAE
-LISTEN          = $FFB1
-TALK            = $FFB4
-;READST         = $FFB7
-SETLFS          = $FFBA
-;SETNAM         = $FFBD
-;OPEN           = $FFC0
-;CLOSE          = $FFC3
-CHKIN           = $FFC6
-CKOUT           = $FFC9
-CLRCH           = $FFCC
-BASIN           = $FFCF
-BSOUT           = $FFD2
-LOAD            = $FFD5
-SAVE            = $FFD8
-;SETTIM         = $FFDB
-;RDTIM          = $FFDE
-STOP            = $FFE1
-GETIN           = $FFE4
-CLALL           = $FFE7
-;UDTIM          = $FFEA
-;SCREEN         = $FFED
-PLOT            = $FFF0
-;IOBASE         = $FFF3
-
diff --git a/libsrc/cbm510/kiobase.s b/libsrc/cbm510/kiobase.s
deleted file mode 100644 (file)
index 55e5ba5..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-19
-;
-; IOBASE kernal call
-;
-
-        .export         IOBASE
-        .import         cia : zeropage
-
-
-
-.proc   IOBASE
-
-        ldx     cia
-        ldy     cia+1
-        rts
-
-.endproc
-
diff --git a/libsrc/cbm510/kopen.s b/libsrc/cbm510/kopen.s
deleted file mode 100644 (file)
index 0259223..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-20
-;
-; OPEN kernal call.
-;
-; NOTE: The OPEN system call in the CBM610 kernal is different from the 
-; standard. It evaluates the carry flag and does a normal open if carry clear
-; and some strange things (output sa 15 + name on IEC) if carry set. To be
-; compatible with our CBM file stuff, we have to clear the carry before 
-; calling the real OPEN.
-
-        .export         OPEN
-
-.proc   OPEN
-
-        clc
-        jmp     $FFC0
-
-.endproc
-
-
-
diff --git a/libsrc/cbm510/krdtim.s b/libsrc/cbm510/krdtim.s
deleted file mode 100644 (file)
index 241c638..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-19
-;
-; RDTIM kernal call
-;
-
-        .export         RDTIM
-        .import         time : zeropage
-
-
-.proc   RDTIM
-
-        sei
-        lda     time+0
-        ldx     time+1
-        ldy     time+2
-        cli
-        rts
-
-.endproc
-
diff --git a/libsrc/cbm510/kreadst.s b/libsrc/cbm510/kreadst.s
deleted file mode 100644 (file)
index 66c0b88..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-19
-;
-; READST kernal call
-;
-
-        .export         READST
-
-        .import         sys_bank, restore_bank
-        .import         sysp0: zp, ktmp: zp
-
-        .include        "cbm510.inc"
-
-
-.proc   READST
-
-        jsr     sys_bank
-        sty     ktmp                    ; Save Y register
-        ldy     #$9C                    ; STATUS
-        lda     (sysp0),y               ; Load STATUS from system bank
-        ldy     ktmp
-        jmp     restore_bank            ; Will set condition codes on A
-
-.endproc
-
-
diff --git a/libsrc/cbm510/kscnkey.s b/libsrc/cbm510/kscnkey.s
deleted file mode 100644 (file)
index 37af3b1..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-;
-; Ullrich von Bassewitz, 13.09.2001
-;
-; Keyboard polling stuff for the 510.
-;
-
-        .export         scnkey
-        .importzp       tpi2, ktab1, ktab2, ktab3, ktab4
-        .importzp       keyidx, keybuf, keyscanbuf, keysave, modkey, norkey
-        .importzp       graphmode, lastidx, rptdelay, rptcount
-
-        .include        "cbm510.inc"
-
-
-.proc   scnkey
-
-        lda     #$FF
-        sta     modkey
-        sta     norkey
-        lda     #$00
-        sta     keyscanbuf
-        ldy     #TPI::PRB
-        sta     (tpi2),y
-        ldy     #TPI::PRA
-        sta     (tpi2),y
-        jsr     Poll
-        and     #$3F
-        eor     #$3F
-        bne     L1
-        jmp     NoKey
-
-L1:     lda     #$FF
-        ldy     #TPI::PRA
-        sta     (tpi2),y
-        asl     a
-        ldy     #TPI::PRB
-        sta     (tpi2),y
-        jsr     Poll
-        pha
-        sta     modkey
-        ora     #$30
-        bne     L3              ; Branch always
-
-L2:     jsr     Poll
-L3:     ldx     #$05
-        ldy     #$00
-L4:     lsr     a
-        bcc     L5
-        inc     keyscanbuf
-        dex
-        bpl     L4
-        sec
-        ldy     #TPI::PRB
-        lda     (tpi2),y
-        rol     a
-        sta     (tpi2),y
-        ldy     #TPI::PRA
-        lda     (tpi2),y
-        rol     a
-        sta     (tpi2),y
-        bcs     L2
-        pla
-        bcc     NoKey           ; Branch always
-
-L5:     ldy     keyscanbuf
-        sty     norkey
-        pla
-        asl     a
-        asl     a
-        asl     a
-        bcc     L6
-        bmi     L7
-        lda     (ktab2),y               ; Shifted normal key
-        ldx     graphmode
-        beq     L8
-        lda     (ktab3),y               ; Shifted key in graph mode
-        bne     L8
-
-L6:     lda     (ktab4),y               ; Key with ctrl pressed
-        bne     L8
-L7:     lda     (ktab1),y               ; Normal key
-L8:     tax
-        cpx     #$FF                    ; Valid key?
-        beq     Done
-        cpy     lastidx
-        beq     Repeat
-        ldx     #$13
-        stx     rptdelay
-        ldx     keyidx
-        cpx     #$09
-        beq     NoKey
-        cpy     #$59
-        bne     PutKey
-        cpx     #$08
-        beq     NoKey
-        sta     keybuf,x
-        inx
-        bne     PutKey
-
-NoKey:  ldy     #$FF
-Done:   sty     lastidx
-End:    lda     #$7F
-        ldy     #TPI::PRA
-        sta     (tpi2),y
-        ldy     #TPI::PRB
-        lda     #$FF
-        sta     (tpi2),y
-        rts
-
-Repeat: dec     rptdelay
-        bpl     End
-        inc     rptdelay
-        dec     rptcount
-        bpl     End
-        inc     rptcount
-        ldx     keyidx
-        bne     End
-
-PutKey: sta     keybuf,x
-        inx
-        stx     keyidx
-        ldx     #$03
-        stx     rptcount
-        bne     Done
-
-.endproc
-
-
-; Poll the keyboard port until it's stable
-
-.proc   Poll
-        ldy     #TPI::PRC
-L1:     lda     (tpi2),y
-        sta     keysave
-        lda     (tpi2),y
-        cmp     keysave
-        bne     L1
-        rts
-.endproc
-
-
-
-
diff --git a/libsrc/cbm510/kscreen.s b/libsrc/cbm510/kscreen.s
deleted file mode 100644 (file)
index cab5cbd..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-19
-;
-; SCREEN kernal call
-;
-
-        .export         SCREEN
-
-
-.proc   SCREEN
-
-        ldx     #40             ; Columns
-        ldy     #25             ; Lines
-        rts
-
-.endproc
diff --git a/libsrc/cbm510/ksetnam.s b/libsrc/cbm510/ksetnam.s
deleted file mode 100644 (file)
index c338c0d..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-18
-;
-; SETNAM kernal call.
-;
-; NOTE: The routine does not work like that in the CBM610 kernal (which works
-; different than that on all other CBMs). Instead, it works like on all other
-; Commodore machines. No segment has to be passed, the current segment is
-; assumed.
-
-        .export         SETNAM
-
-        .import         sys_bank, restore_bank
-        .import         sysp0: zp, ktmp: zp
-
-        .include        "cbm510.inc"
-
-.proc   SETNAM
-
-        pha
-        jsr     sys_bank
-        sty     ktmp
-
-        txa
-        ldy     #$90                    ; FNAM
-        sta     (sysp0),y
-
-        lda     ktmp
-        iny
-        sta     (sysp0),y
-
-        lda     ExecReg                 ; Assume name is always in this segment
-        ldy     #$92                    ; FNAM_SEG
-        sta     (sysp0),y
-
-        ldy     #$9D                    ; FNAM_LEN
-        pla
-        sta     (sysp0),y
-        ldy     ktmp
-        jmp     restore_bank
-
-.endproc
-
-
-
diff --git a/libsrc/cbm510/ksettim.s b/libsrc/cbm510/ksettim.s
deleted file mode 100644 (file)
index 69f01b4..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-19
-;
-; SETTIM kernal call
-;
-
-        .export         SETTIM
-        .import         time : zeropage
-
-
-.proc   SETTIM
-
-        sei
-        sta     time+0
-        stx     time+1
-        sty     time+2
-        cli
-        rts
-
-.endproc
-
diff --git a/libsrc/cbm510/kudtim.s b/libsrc/cbm510/kudtim.s
deleted file mode 100644 (file)
index 6862787..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-21
-;
-; udtim routine for the 610. We will not check for the stop key here, since
-; C programs will not use it.
-;                                  
-
-        .export         UDTIM
-        .import         time: zp
-
-.proc   UDTIM
-
-        inc     time
-        bne     L9
-        inc     time+1
-        bne     L9
-        inc     time+2
-        bne     L9
-        inc     time+3
-L9:     rts
-
-.endproc
-
diff --git a/libsrc/cbm510/libref.s b/libsrc/cbm510/libref.s
deleted file mode 100644 (file)
index 515c62d..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Oliver Schmidt, 2013-05-31
-;
-
-        .export         em_libref, joy_libref, ser_libref
-        .import         _exit
-
-em_libref       := _exit
-joy_libref      := _exit
-ser_libref      := _exit
diff --git a/libsrc/cbm510/mainargs.s b/libsrc/cbm510/mainargs.s
deleted file mode 100644 (file)
index 7eebccb..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-; mainargs.s
-;
-; 2003-03-07, Ullrich von Bassewitz,
-;   based on code from Stefan A. Haubenthal, <polluks@web.de>
-; 2005-02-26, Ullrich von Bassewitz
-; 2014-09-10, Greg King
-;
-; Scan a group of arguments that are in BASIC's input-buffer.
-; Build an array that points to the beginning of each argument.
-; Send, to main(), that array and the count of the arguments.
-;
-; Command-lines look like these lines:
-;
-; run
-; run : rem
-; run:rem arg1 " arg 2 is quoted "  arg3 "" arg5
-;
-; "run" and "rem" are entokenned; the args. are not.  Leading and trailing
-; spaces outside of quotes are ignored.
-;
-; TO-DO:
-; - The "file-name" might be a path-name; don't copy the directory-components.
-; - Add a control-character quoting mechanism.
-
-        .constructor    initmainargs, 24
-        .import         __argc, __argv
-        .import         sys_bank, restore_bank
-        .import         sysp0:zp, ptr1:zp
-
-        .include        "cbm510.inc"
-        .macpack        generic
-
-
-
-MAXARGS  = 10                   ; Maximum number of arguments allowed
-REM      = $8f                  ; BASIC token-code
-NAME_LEN = 16                   ; maximum length of command-name
-
-; Get possible command-line arguments. Goes into the special INIT segment,
-; which may be reused after the startup code is run.
-;
-.segment        "INIT"
-
-initmainargs:
-
-; Assume that the program was loaded, a moment ago, by the traditional LOAD
-; statement.  Save the "most-recent filename" as argument #0.
-; Because the buffer, that we're copying into, was zeroed out,
-; we don't need to add a NUL character.
-;
-        jsr     sys_bank
-        ldy     #FNAM
-        lda     (sysp0),y       ; Get file-name pointer from system bank
-        sta     ptr1
-        iny
-        lda     (sysp0),y
-        sta     ptr1+1
-        iny                     ; FNAM_BANK
-        lda     (sysp0),y
-        tax
-        ldy     #FNAM_LEN
-        lda     (sysp0),y
-        tay
-        stx     IndReg          ; Look for name in correct bank
-        cpy     #NAME_LEN + 1
-        blt     L1
-        ldy     #NAME_LEN - 1   ; limit the length
-L0:     lda     (ptr1),y
-        sta     name,y
-L1:     dey
-        bpl     L0
-        jsr     restore_bank
-        inc     __argc          ; argc always is equal to at least 1
-
-; Find a "rem" token.
-;
-        ldx     #0
-L2:     lda     BASIC_BUF,x
-        bze     done            ; no "rem," no args.
-        inx
-        cmp     #REM
-        bne     L2
-        ldy     #1 * 2
-
-; Find the next argument.
-;
-next:   lda     BASIC_BUF,x
-        bze     done            ; End of line reached
-        inx
-        cmp     #' '            ; Skip leading spaces
-        beq     next            ;
-
-; Found start of next argument. We've incremented the pointer in X already, so
-; it points to the second character of the argument. That is useful because we
-; will check now for a quoted argument; in which case, we will have to skip that
-; first character.
-;
-found:  cmp     #'"'            ; Is the argument quoted?
-        beq     setterm         ; Jump if so
-        dex                     ; Reset pointer to first argument character
-        lda     #' '            ; A space ends the argument
-setterm:sta     term            ; Set end-of-argument marker
-
-; Now, store a pointer to the argument into the next slot.
-;
-        txa                     ; Get low byte
-        add     #<BASIC_BUF
-        sta     argv,y          ; argv[y]= &arg
-        lda     #>$0000
-        adc     #>BASIC_BUF
-        sta     argv+1,y
-        iny
-        iny
-        inc     __argc          ; Found another arg
-
-; Search for the end of the argument.
-;
-argloop:lda     BASIC_BUF,x
-        bze     done
-        inx
-        cmp     term
-        bne     argloop
-
-; We've found the end of the argument. X points one character behind it, and
-; A contains the terminating character. To make the argument a valid C string,
-; replace the terminating character by a zero.
-;
-        lda     #$00
-        sta     BASIC_BUF-1,x
-
-; Check if the maximum number of command-line arguments is reached. If not,
-; parse the next one.
-;
-        lda     __argc          ; Get low byte of argument count
-        cmp     #MAXARGS        ; Maximum number of arguments reached?
-        blt     next            ; Parse next one if not
-
-; (The last vector in argv[] already is NULL.)
-;
-done:   lda     #<argv
-        ldx     #>argv
-        sta     __argv
-        stx     __argv + 1
-        rts
-
-; These arrays are zeroed before initmainargs is called.
-; char  name[16+1];
-; char* argv[MAXARGS+1]={name};
-;
-.bss
-term:   .res    1
-name:   .res    NAME_LEN + 1
-
-.data
-argv:   .addr   name
-        .res    MAXARGS * 2, $00
diff --git a/libsrc/cbm510/mcbdefault.s b/libsrc/cbm510/mcbdefault.s
deleted file mode 100644 (file)
index 028fb4e..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-;
-; Default mouse callbacks for the CBM510 (P128)
-;
-; 2004-03-20, Ullrich von Bassewitz2
-; 2013-06-25, Greg King
-;
-; All functions in this module should be interrupt-safe because they might
-; be called from an interrupt handler.
-;
-
-        .export         _mouse_def_callbacks
-        .import         vic:zp
-
-        .include        "mouse-kernel.inc"
-        .include        "cbm510.inc"
-
-        .macpack        generic
-
-; Sprite definitions. The first value can be changed to adjust the number
-; of the sprite used for the mouse. All others depend on that value.
-MOUSE_SPR       = 0                             ; Sprite used for the mouse
-MOUSE_SPR_MASK  = $01 .shl MOUSE_SPR            ; Positive mask
-MOUSE_SPR_NMASK = .lobyte(.not MOUSE_SPR_MASK)  ; Negative mask
-VIC_SPR_X       = (VIC_SPR0_X + 2*MOUSE_SPR)    ; Sprite X register
-VIC_SPR_Y       = (VIC_SPR0_Y + 2*MOUSE_SPR)    ; Sprite Y register
-
-; --------------------------------------------------------------------------
-; Hide the mouse pointer. Always called with interrupts disabled.
-
-hide:
-        ldy     #15
-        sty     IndReg
-
-        ldy     #VIC_SPR_ENA
-        lda     (vic),y
-        and     #MOUSE_SPR_NMASK
-        sta     (vic),y
-
-        ldy     ExecReg
-        sty     IndReg
-        rts
-
-; --------------------------------------------------------------------------
-; Show the mouse pointer. Always called with interrupts disabled.
-
-show:
-        ldy     #15
-        sty     IndReg
-
-        ldy     #VIC_SPR_ENA
-        lda     (vic),y
-        ora     #MOUSE_SPR_MASK
-        sta     (vic),y
-
-        ldy     ExecReg
-        sty     IndReg
-        ; Fall through
-
-; --------------------------------------------------------------------------
-; Prepare to move the mouse pointer. Always called with interrupts disabled.
-
-prep:
-        ; Fall through
-
-; --------------------------------------------------------------------------
-; Draw the mouse pointer. Always called with interrupts disabled.
-
-draw:
-        rts
-
-; --------------------------------------------------------------------------
-; Move the mouse pointer x position to the value in .XA. Always called with
-; interrupts disabled.
-
-movex:
-        ldy     #15
-        sty     IndReg
-
-; Add the x correction; and, set the low byte. That frees .A.
-
-        add     #<24                    ; x correction
-        ldy     #VIC_SPR_X
-        sta     (vic),y
-
-; Set the high byte
-
-        ldy     #VIC_SPR_HI_X
-        txa
-        adc     #>24
-        bnz     @L1                     ; Branch if high byte not zero
-        lda     (vic),y                 ; Get high x bits of all sprites
-        and     #MOUSE_SPR_NMASK        ; Clear high bit for sprite
-        sta     (vic),y
-
-@L0:    ldy     ExecReg
-        sty     IndReg
-        rts
-
-@L1:    lda     (vic),y                 ; Get high x bits of all sprites
-        ora     #MOUSE_SPR_MASK         ; Set high bit for sprite
-        sta     (vic),y
-        bnz     @L0                     ; Branch always
-
-; --------------------------------------------------------------------------
-; Move the mouse pointer y position to the value in .XA. Always called with
-; interrupts disabled.
-
-movey:
-        ldy     #15
-        sty     IndReg
-
-        add     #50                     ; y correction (first visible line)
-        ldy     #VIC_SPR_Y
-        sta     (vic),y                 ; Set y position
-
-        ldy     ExecReg
-        sty     IndReg
-        rts
-
-; --------------------------------------------------------------------------
-; Callback structure
-
-.rodata
-
-_mouse_def_callbacks:
-        .addr   hide
-        .addr   show
-        .addr   prep
-        .addr   draw
-        .addr   movex
-        .addr   movey
diff --git a/libsrc/cbm510/mou/cbm510-inkwl.s b/libsrc/cbm510/mou/cbm510-inkwl.s
deleted file mode 100644 (file)
index 91bc52f..0000000
+++ /dev/null
@@ -1,452 +0,0 @@
-;
-; Driver for the Inkwell Systems 170-C and 184-C lightpens.
-;
-; This driver reads only the main button on the 184-C.
-;
-; 2014-09-10, Greg King
-;
-
-        .include        "zeropage.inc"
-        .include        "../extzp.inc"
-
-        .include        "mouse-kernel.inc"
-        .include        "cbm510.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table.
-
-        module_header   _cbm510_inkwl_mou
-
-HEADER:
-
-; Driver signature
-
-        .byte   $6d, $6f, $75           ; ASCII "mou"
-        .byte   MOUSE_API_VERSION       ; Mouse driver API version number
-
-; Library reference
-
-LIBREF: .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   HIDE
-        .addr   SHOW
-        .addr   SETBOX
-        .addr   GETBOX
-        .addr   MOVE
-        .addr   BUTTONS
-        .addr   POS
-        .addr   INFO
-        .addr   IOCTL
-        .addr   IRQ
-
-; Mouse driver flags
-
-        .byte   MOUSE_FLAG_EARLY_IRQ
-
-; Callback table, set by the kernel before INSTALL is called.
-
-CHIDE:  jmp     $0000                   ; Hide the cursor
-CSHOW:  jmp     $0000                   ; Show the cursor
-CPREP:  jmp     $0000                   ; Prepare to move the cursor
-CDRAW:  jmp     $0000                   ; Draw the cursor
-CMOVEX: jmp     $0000                   ; Move the cursor to X co-ord.
-CMOVEY: jmp     $0000                   ; Move the cursor to Y co-ord.
-
-
-;----------------------------------------------------------------------------
-; Constants
-
-SCREEN_WIDTH    = XSIZE * 8
-SCREEN_HEIGHT   = YSIZE * 8
-
-;----------------------------------------------------------------------------
-; Global variables. The bounding box values are sorted so that they can be
-; written with the least effort in the SETBOX and GETBOX routines; so, don't
-; re-order them.
-
-.rodata
-
-; Default values for below variables
-; (We use ".proc" because we want to define both a label and a scope.)
-
-.proc   DefVars
-        .word   0                       ; XMin
-        .word   0                       ; YMin
-        .word   SCREEN_WIDTH - 1        ; XMax
-        .word   SCREEN_HEIGHT - 1       ; YMax
-.endproc
-
-.bss
-
-Vars:
-XMin:           .res    2               ; X1 value of bounding box
-YMin:           .res    2               ; Y1 value of bounding box
-XMax:           .res    2               ; X2 value of bounding box
-YMax:           .res    2               ; Y2 value of bounding box
-
-XPos:           .res    2               ; Current lightpen position, X
-YPos:           .res    2               ; Current lightpen position, Y
-
-OldPenX:        .res    1               ; Previous HW-counter values
-OldPenY:        .res    1
-
-.data
-
-; Default Inkwell calibration.
-; The first number is the width of the left border;
-; the second number is the actual calibration value.
-; See a comment below (at "Calculate the new X co-ordinate")
-; for the reason for the third number.
-
-XOffset:        .byte   (24 + 24) / 2   ; x-offset
-
-; Jump to a function that puts a new calibration value into XOffset.
-Calibrate:      jmp     $0000
-
-
-.code
-
-;----------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present.
-; Must return a MOUSE_ERR_xx code in .XA.
-
-INSTALL:
-
-; Initiate variables. Just copy the default stuff over.
-
-        ldx     #.sizeof (DefVars) - 1
-@L0:    lda     DefVars,x
-        sta     Vars,x
-        dex
-        bpl     @L0
-
-        ldx     #15                    ; Change to system bank
-        stx     IndReg
-        ldy     #VIC_LPEN_X
-        lda     (vic),y
-        sta     OldPenX
-        ldy     #VIC_LPEN_Y
-        lda     (vic),y
-        sta     OldPenY
-        ldx     ExecReg                 ; Change back to execution bank
-        stx     IndReg
-
-; Call a calibration function through the library-reference.
-
-        lda     LIBREF
-        ldx     LIBREF+1
-        sta     ptr1                    ; Point to mouse_adjuster
-        stx     ptr1+1
-        ldy     #1
-        lda     (ptr1),y
-        bze     @L1                     ; Don't call pointer if it's NULL
-        sta     Calibrate+2             ; Point to function
-        dey
-        lda     (ptr1),y
-        sta     Calibrate+1
-        lda     #<XOffset               ; Function will set this variable
-        ldx     #>XOffset
-        jsr     Calibrate
-
-; Be sure that the lightpen cursor is invisible and at the default location.
-; It needs to be done here because the lightpen interrupt handler doesn't
-; set the lightpen position if it hasn't changed.
-
-@L1:    sei
-        jsr     CHIDE
-
-        lda     #<(SCREEN_HEIGHT / 2)
-        ldx     #>(SCREEN_HEIGHT / 2)
-        jsr     MoveY
-        lda     #<(SCREEN_WIDTH / 2)
-        ldx     #>(SCREEN_WIDTH / 2)
-        jsr     MoveX
-        cli
-
-; Done, return zero.
-
-        lda     #MOUSE_ERR_OK
-        tax
-        rts
-
-;----------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; No return code required (the driver is removed from memory on return).
-
-UNINSTALL       := HIDE                 ; Hide cursor on exit
-
-;----------------------------------------------------------------------------
-; HIDE routine. Is called to hide the lightpen pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is called only
-; if the mouse is currently visible, and should get hidden. For most drivers,
-; no special action is required besides hiding the lightpen cursor.
-; No return code required.
-
-HIDE:   sei
-        jsr     CHIDE
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SHOW routine. Is called to show the lightpen pointer. The mouse kernel manages
-; a counter for calls to show/hide, and the driver entry point is called only
-; if the mouse is currently hidden, and should become visible. For most drivers,
-; no special action is required besides enabling the lightpen cursor.
-; No return code required.
-
-SHOW:   sei
-        jsr     CSHOW
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SETBOX: Set the lightpen bounding box. The parameters are passed as they come
-; from the C program, that is, a pointer to a mouse_box struct in .XA.
-; No checks are done if the lightpen is currently inside the box, that is the job
-; of the caller. It is not necessary to validate the parameters; trust the
-; caller; and, save some code here. No return code required.
-
-SETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX) - 1
-        sei
-
-@L1:    lda     (ptr1),y
-        sta     XMin,y
-        dey
-        bpl     @L1
-
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; GETBOX: Return the lightpen bounding box. The parameters are passed as they
-; come from the C program, that is, a pointer to a mouse_box struct in .XA.
-
-GETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX) - 1
-@L1:    lda     XMin,y
-        sta     (ptr1),y
-        dey
-        bpl     @L1
-        rts
-
-;----------------------------------------------------------------------------
-; MOVE: Move the mouse to a new position. The position is passed as it comes
-; from the C program, that is: X on the stack and Y in .XA. The C wrapper will
-; remove the parameter from the stack on return.
-; No checks are done if the new position is valid (within the bounding box or
-; the screen). No return code required.
-;
-
-MOVE:   sei                             ; No interrupts
-        jsr     MoveY
-
-        ldy     #$01
-        lda     (sp),y
-        tax
-        dey
-        lda     (sp),y
-        jsr     MoveX                   ; Move the cursor
-
-        cli                             ; Allow interrupts
-        rts
-
-;----------------------------------------------------------------------------
-; BUTTONS: Return the button mask in .XA.
-
-BUTTONS:
-        ldx     #15                     ; To system bank
-        stx     IndReg
-        ldy     #CIA::PRB
-        lda     (cia2),y                ; Read joystick inputs
-        ldx     ExecReg                 ; Back to execution bank
-        stx     IndReg
-
-; Joystick 1, directions in bits 3-0.
-; Make the lightpen button look like a 1351 mouse.
-
-        asl     a                       ; Move joystick-left bit ...
-        asl     a                       ; ... to fire-button bit
-        eor     #MOUSE_BTN_LEFT
-        and     #MOUSE_BTN_LEFT
-        ldx     #>$0000
-        rts
-
-;----------------------------------------------------------------------------
-; POS: Return the lightpen position in the MOUSE_POS struct pointed to by ptr1.
-; No return code required.
-
-POS:    ldy     #MOUSE_POS::XCOORD      ; Structure offset
-
-        sei                             ; Disable interrupts
-        lda     XPos                    ; Transfer the position
-        sta     (ptr1),y
-        lda     XPos+1
-        iny
-        sta     (ptr1),y
-        lda     YPos
-        iny
-        sta     (ptr1),y
-        lda     YPos+1
-        cli                             ; Enable interrupts
-
-        iny
-        sta     (ptr1),y                ; Store last byte
-        rts
-
-;----------------------------------------------------------------------------
-; INFO: Returns lightpen position and current button mask in the MOUSE_INFO
-; struct pointed to by ptr1. No return code required.
-;
-; We're cheating here, to keep the code smaller: The first fields of the
-; mouse_info struct are identical to the mouse_pos struct; so, we'll just
-; call _mouse_pos to initiate the struct pointer, and fill the position
-; fields.
-
-INFO:   jsr     POS
-
-; Fill in the button state
-
-        jsr     BUTTONS                 ; Will not touch ptr1
-        ldy     #MOUSE_INFO::BUTTONS
-        sta     (ptr1),y
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver-defined entry point. The wrapper will pass a pointer to ioctl-
-; specific data in ptr1, and the ioctl code in .A.
-; Must return an error code in .XA.
-;
-
-IOCTL:  lda     #<MOUSE_ERR_INV_IOCTL     ; We don't support ioctls, for now
-        ldx     #>MOUSE_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; IRQ: Irq.-handler entry point. Called as a subroutine, but in the IRQ context
-; (so, be careful). The routine MUST return carry set if the interrupt has been
-; 'handled' -- which means that the interrupt source is gone. Otherwise, it
-; MUST return carry clear.
-;
-
-IRQ:    jsr     CPREP
-        ldx     #15                     ; To system bank
-        stx     IndReg
-
-; Read the VIC-II lightpen registers.
-
-        ldy     #VIC_LPEN_Y
-        lda     (vic),y
-        cmp     OldPenY
-
-; Skip processing if nothing has changed.
-
-        beq     @SkipY
-        sta     OldPenY
-        ldx     ExecReg                 ; Back to execution bank
-        stx     IndReg
-
-; Subtract the height of the top border, so that the lightpen co-ordinate
-; will match the TGI co-ordinate.
-
-        sub     #50
-        tay                             ; Remember low byte
-        ldx     #>$0000
-
-; Limit the Y co-ordinate to the bounding box.
-
-        txa
-        cpy     YMin
-        sbc     YMin+1
-        bpl     @L3
-        ldy     YMin
-        ldx     YMin+1
-        jmp     @L4
-
-@L3:    txa
-        cpy     YMax
-        sbc     YMax+1
-        bmi     @L4
-        ldy     YMax
-        ldx     YMax+1
-
-@L4:    tya
-        jsr     MoveY
-
-        ldx     #15                     ; To system bank
-        stx     IndReg
-@SkipY: ldy     #VIC_LPEN_X
-        lda     (vic),y
-        ldx     ExecReg                 ; Back to execution bank
-        stx     IndReg
-        cmp     OldPenX
-
-; Skip processing if nothing has changed.
-
-        beq     @SkipX
-        sta     OldPenX
-
-; Adjust the value by the calibration offset.
-
-        sub     XOffset
-
-; Calculate the new X co-ordinate.
-; The VIC-II register is eight bits; but, the screen co-ordinate is nine bits.
-; Therefore, the VIC-II number is doubled. Then, it points to every other pixel;
-; but, it can reach across the screen.
-
-        asl     a
-        tay                             ; Remember low byte
-        lda     #>$0000
-        rol     a
-        tax                             ; Remember high byte
-
-; Limit the X co-ordinate to the bounding box.
-
-        cpy     XMin
-        sbc     XMin+1
-        bpl     @L1
-        ldy     XMin
-        ldx     XMin+1
-        jmp     @L2
-
-@L1:    txa
-        cpy     XMax
-        sbc     XMax+1
-        bmi     @L2
-        ldy     XMax
-        ldx     XMax+1
-
-@L2:    tya
-        jsr     MoveX
-
-; Done
-
-@SkipX: jsr     CDRAW
-        clc                             ; Interrupt not "handled"
-        rts
-
-; Move the lightpen pointer to the new Y pos.
-
-MoveY:  sta     YPos
-        stx     YPos+1
-        jmp     CMOVEY
-
-; Move the lightpen pointer to the new X pos.
-
-MoveX:  sta     XPos
-        stx     XPos+1
-        jmp     CMOVEX
diff --git a/libsrc/cbm510/mou/cbm510-joy.s b/libsrc/cbm510/mou/cbm510-joy.s
deleted file mode 100644 (file)
index 8aa3a77..0000000
+++ /dev/null
@@ -1,452 +0,0 @@
-;
-; Driver for a "joystick mouse".
-;
-; 2009-09-26, Ullrich von Bassewitz
-; 2014-09-10, Greg King
-;
-
-        .include        "zeropage.inc"
-        .include        "../extzp.inc"
-
-        .include        "mouse-kernel.inc"
-        .include        "cbm510.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _cbm510_joy_mou
-
-HEADER:
-
-; Driver signature
-
-        .byte   $6d, $6f, $75           ; ASCII "mou"
-        .byte   MOUSE_API_VERSION       ; Mouse driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   HIDE
-        .addr   SHOW
-        .addr   SETBOX
-        .addr   GETBOX
-        .addr   MOVE
-        .addr   BUTTONS
-        .addr   POS
-        .addr   INFO
-        .addr   IOCTL
-        .addr   IRQ
-
-; Mouse driver flags
-
-        .byte   MOUSE_FLAG_LATE_IRQ
-
-; Callback table, set by the kernel before INSTALL is called.
-
-CHIDE:  jmp     $0000                   ; Hide the cursor
-CSHOW:  jmp     $0000                   ; Show the cursor
-CPREP:  jmp     $0000                   ; Prepare to move the cursor
-CDRAW:  jmp     $0000                   ; Draw the cursor
-CMOVEX: jmp     $0000                   ; Move the cursor to x co-ord.
-CMOVEY: jmp     $0000                   ; Move the cursor to y co-ord.
-
-
-;----------------------------------------------------------------------------
-; Constants
-
-SCREEN_HEIGHT   = YSIZE * 8
-SCREEN_WIDTH    = XSIZE * 8
-
-.scope  JOY
-        UP      = %00000001
-        DOWN    = %00000010
-        LEFT    = %00000100
-        RIGHT   = %00001000
-        FIRE    = %00010000
-.endscope
-
-;----------------------------------------------------------------------------
-; Global variables. The bounding box values are sorted so that they can be
-; written with the least effort in the SETBOX and GETBOX routines; so, don't
-; re-order them.
-
-.bss
-
-Vars:
-YPos:           .res    2               ; Current mouse position, y
-XPos:           .res    2               ; Current mouse position, x
-XMin:           .res    2               ; X1 value of bounding box
-YMin:           .res    2               ; Y1 value of bounding box
-XMax:           .res    2               ; X2 value of bounding box
-YMax:           .res    2               ; Y2 value of bounding box
-
-; Temporary value used in the interrupt handler
-
-Temp:           .res    1
-
-.rodata
-
-; Default values for above variables
-; (We use ".proc" because we want to define both a label and a scope.)
-
-.proc   DefVars
-        .word   SCREEN_HEIGHT / 2       ; YPos
-        .word   SCREEN_WIDTH / 2        ; XPos
-        .word   0                       ; XMin
-        .word   0                       ; YMin
-        .word   SCREEN_WIDTH - 1        ; XMax
-        .word   SCREEN_HEIGHT - 1       ; YMax
-.endproc
-
-.code
-
-;----------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present.
-; Must return a MOUSE_ERR_xx code in .XA.
-
-INSTALL:
-
-; Initiate variables; just copy the default stuff over.
-
-        ldx     #.sizeof(DefVars) - 1
-@L1:    lda     DefVars,x
-        sta     Vars,x
-        dex
-        bpl     @L1
-
-; Be sure the mouse cursor is invisible and at the default location. We
-; need to do that here because our mouse interrupt handler doesn't set the
-; mouse position if it hasn't changed.
-
-        sei
-        jsr     CHIDE
-        lda     XPos
-        ldx     XPos+1
-        jsr     CMOVEX
-        lda     YPos
-        ldx     YPos+1
-        jsr     CMOVEY
-        cli
-
-; Done, return zero.
-
-        ldx     #>MOUSE_ERR_OK
-        txa
-        rts
-
-;----------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; No return code required (the driver is removed from memory, on return).
-
-UNINSTALL       := HIDE                 ; Hide cursor, on exit
-
-;----------------------------------------------------------------------------
-; HIDE routine. Is called to hide the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide; and, the driver entry point is called only
-; if the mouse currently is visible and should get hidden. For most drivers,
-; no special action is required besides hiding the mouse cursor.
-; No return code required.
-
-HIDE:   sei
-        jsr     CHIDE
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SHOW routine. Is called to show the mouse pointer. The mouse kernel manages
-; a counter for calls to show/hide; and, the driver entry point is called only
-; if the mouse currently is hidden and should become visible. For most drivers,
-; no special action is required besides enabling the mouse cursor.
-; No return code required.
-
-SHOW:   sei
-        jsr     CSHOW
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; SETBOX: Set the mouse bounding box. The parameters are passed as they come
-; from the C program, that is, a pointer to a mouse_box struct in .XA.
-; No checks are done if the mouse currently is inside the box; that is the job
-; of the caller. It is not necessary to validate the parameters; trust the
-; caller, and save some code here. No return code required.
-
-SETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX) - 1
-        sei
-
-@L1:    lda     (ptr1),y
-        sta     XMin,y
-        dey
-        bpl     @L1
-
-        cli
-        rts
-
-;----------------------------------------------------------------------------
-; GETBOX: Return the mouse bounding box. The parameters are passed as they
-; come from the C program, that is, a pointer to a mouse_box struct in .XA.
-
-GETBOX: sta     ptr1
-        stx     ptr1+1                  ; Save data pointer
-
-        ldy     #.sizeof (MOUSE_BOX) - 1
-
-@L1:    lda     XMin,y
-        sta     (ptr1),y
-        dey
-        bpl     @L1
-
-        rts
-
-;----------------------------------------------------------------------------
-; MOVE: Move the mouse to a new position. The position is passed as it comes
-; from the C program, that is: x on the stack and y in .XA. The C wrapper will
-; remove the parameter from the stack, on return.
-; No checks are done if the new position is valid (within the bounding box or
-; the screen). No return code required.
-;
-
-MOVE:   sei                             ; No interrupts
-
-        jsr     MoveY                   ; Set new y position
-
-        ldy     #1
-        lda     (sp),y
-        sta     XPos+1
-        tax
-        dey
-        lda     (sp),y
-        jsr     MoveX                   ; Move the pointer
-
-        cli                             ; Allow interrupts
-        rts
-
-;----------------------------------------------------------------------------
-; BUTTONS: Return the button mask in .XA.
-; Joystick 2's fire button is the  left mouse button.
-; Joystick 1's fire button is the right mouse button.
-
-BUTTONS:
-        ldx     #15                    ; Switch to the system bank
-        stx     IndReg
-
-; Get the fire-button bits
-
-        ldy     #CIA::PRA
-        lda     (cia2),y
-
-; Switch back to the execution bank.
-
-        ldy     ExecReg
-        sty     IndReg
-
-; Joystick 2, fire button is in bit 7.
-; Joystick 1, fire button is in bit 6.
-
-        and     #%11000000
-        asl     a                       ; Move bits 7,6 to bits 1,0
-        rol     a
-        rol     a
-        adc     #%00001110              ; Move bit 1 to bit 4
-        and     #MOUSE_BTN_LEFT | MOUSE_BTN_RIGHT
-
-; Bits go up when buttons go down.
-
-        eor     #MOUSE_BTN_LEFT | MOUSE_BTN_RIGHT
-        ldx     #>$0000
-        rts
-
-;----------------------------------------------------------------------------
-; INFO: Returns mouse position and current button mask in the MOUSE_INFO
-; struct pointed to by ptr1. No return code required.
-;
-; We're cheating here to keep the code smaller: The first fields of the
-; mouse_info struct are identical to the mouse_pos struct; so, we just will
-; use _mouse_pos to fill the position fields.
-
-INFO:   jsr     BUTTONS
-
-; Fill in the button state.
-
-        ldy     #MOUSE_INFO::BUTTONS
-        sta     (ptr1),y
-
-;       jmp     POS                     ; Fall through
-
-;----------------------------------------------------------------------------
-; POS: Return the mouse position in the MOUSE_POS struct pointed to by ptr1.
-; No return code required.
-
-POS:    ldy     #MOUSE_POS::XCOORD      ; Structure offset
-
-        sei                             ; Disable interrupts
-        lda     XPos                    ; Transfer the position
-        sta     (ptr1),y
-        lda     XPos+1
-        iny
-        sta     (ptr1),y
-        lda     YPos
-        iny
-        sta     (ptr1),y
-        lda     YPos+1
-        cli                             ; Enable interrupts
-
-        iny
-        sta     (ptr1),y                ; Store last byte
-
-        rts                             ; Done
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver-defined entry point. The wrapper will pass a pointer to ioctl-
-; specific data in ptr1, and the ioctl code in .A.
-; Must return an error code in .XA.
-;
-
-IOCTL:  lda     #<MOUSE_ERR_INV_IOCTL   ; We don't support ioctls, for now
-        ldx     #>MOUSE_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; IRQ: Irq.-handler entry point. Called as a subroutine, but in the IRQ context
-; (so, be careful). The routine MUST return carry set if the interrupt has been
-; 'handled' -- which means that the interrupt source is gone. Otherwise, it
-; MUST return carry clear.
-; Reads joystick 2.
-;
-
-IRQ:    jsr     CPREP
-        ldy     #15                     ; Switch to the system bank
-        sty     IndReg
-
-; Get the direction bits.
-
-        ldy     #CIA::PRB
-        lda     (cia2),y                ; Read joystick inputs
-
-; Switch back to the execution bank.
-
-        ldy     ExecReg
-        sty     IndReg
-
-; Joystick 2, directions in bits 7-4.
-; Mask the relevant bits.
-
-        and     #$F0
-        eor     #$F0                    ; All bits are inverted
-        sta     Temp
-
-; Check left/right.
-
-        and     #(JOY::LEFT | JOY::RIGHT) << 4
-        bze     @SkipX
-
-; We will cheat here, and rely on the fact that either the left OR the right
-; bit can be active.
-
-        and     #JOY::RIGHT << 4        ; Check RIGHT bit
-        bnz     @Right
-        lda     #<-$0001
-        tax
-        bnz     @AddX                   ; Branch always
-@Right: lda     #<$0001
-        ldx     #>$0001
-
-; Calculate the new x co-ordinate (--> .YA).
-
-@AddX:  add     XPos
-        tay                             ; Remember low byte
-        txa
-        adc     XPos+1
-        tax
-
-; Limit the x co-ordinate to the bounding box.
-
-        cpy     XMin
-        sbc     XMin+1
-        bpl     @L1
-        ldy     XMin
-        ldx     XMin+1
-        jmp     @L2
-
-@L1:    txa
-        cpy     XMax
-        sbc     XMax+1
-        bmi     @L2
-        ldy     XMax
-        ldx     XMax+1
-@L2:    tya
-        jsr     MoveX
-
-; Calculate the y movement vector.
-
-@SkipX: lda     Temp                    ; Get joystick again
-        and     #(JOY::UP | JOY::DOWN) << 4  ; Check up/down
-        bze     @SkipY
-
-; We will cheat here, and rely on the fact that either the up OR the down
-; bit can be active.
-
-        and     #JOY::UP << 4           ; Check UP bit
-        bze     @Down
-        lda     #<-$0001
-        tax
-        bnz     @AddY
-@Down:  lda     #<$0001
-        ldx     #>$0001
-
-; Calculate the new y co-ordinate (--> .YA).
-
-@AddY:  add     YPos
-        tay                             ; Remember low byte
-        txa
-        adc     YPos+1
-        tax
-
-; Limit the y co-ordinate to the bounding box.
-
-        cpy     YMin
-        sbc     YMin+1
-        bpl     @L3
-        ldy     YMin
-        ldx     YMin+1
-        jmp     @L4
-
-@L3:    txa
-        cpy     YMax
-        sbc     YMax+1
-        bmi     @L4
-        ldy     YMax
-        ldx     YMax+1
-@L4:    tya
-        jsr     MoveY
-
-; Done
-
-@SkipY: jsr     CDRAW
-        clc                             ; Interrupt not "handled"
-        rts
-
-; Move the mouse pointer to the new x pos.
-
-MoveX:  sta     XPos
-        stx     XPos+1
-        jmp     CMOVEX
-
-; Move the mouse pointer to the new y pos.
-
-MoveY:  sta     YPos
-        stx     YPos+1
-        jmp     CMOVEY
diff --git a/libsrc/cbm510/mouse_stat_stddrv.s b/libsrc/cbm510/mouse_stat_stddrv.s
deleted file mode 100644 (file)
index 71eec00..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Address of the static standard mouse driver
-;
-; 2012-11-01, Oliver Schmidt
-; 2013-08-06, Greg King
-;
-; const void mouse_static_stddrv[];
-;
-
-        .export _mouse_static_stddrv
-        .import _cbm510_joy_mou
-
-_mouse_static_stddrv := _cbm510_joy_mou
diff --git a/libsrc/cbm510/mouse_stddrv.s b/libsrc/cbm510/mouse_stddrv.s
deleted file mode 100644 (file)
index 7f6ec42..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Name of the standard mouse driver
-;
-; 2009-09-11, Ullrich von Bassewitz
-; 2013-06-25, Greg King
-;
-; const char mouse_stddrv[];
-;
-
-        .export _mouse_stddrv
-
-.rodata
-
-_mouse_stddrv:  .asciiz "cbm510-joy.mou"
-
-
diff --git a/libsrc/cbm510/mouseref.s b/libsrc/cbm510/mouseref.s
deleted file mode 100644 (file)
index 90aeedf..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Pointer for library references by device drivers.
-;
-; 2013-07-25, Greg King
-;
-
-        .export         mouse_libref, _pen_adjuster
-
-        .data
-
-mouse_libref:                   ; generic label for mouse-kernel
-
-; A program optionally can set this pointer to a function that gives
-; a calibration value to a driver.  If this pointer isn't NULL,
-; then a driver that wants a value can call that function.
-;
-; The function might read a value from a file; or, it might ask the user
-; to help calibrate the driver.
-;
-; void __fastcall__ (*pen_adjuster)(unsigned char *) = NULL;
-;
-_pen_adjuster:
-        .addr   $0000
diff --git a/libsrc/cbm510/peeksys.s b/libsrc/cbm510/peeksys.s
deleted file mode 100644 (file)
index ea3ed71..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-;
-; Ullrich von Bassewitz, 14.09.2001
-;
-
-        .export         _peekbsys, _peekwsys
-        .importzp       ptr1
-
-        .include        "cbm510.inc"
-
-
-; ------------------------------------------------------------------------
-; unsigned char __fastcall__ peekbsys (unsigned addr);
-
-.proc   _peekbsys
-
-        sta     ptr1            ; Store argument pointer
-        stx     ptr1+1
-        ldx     IndReg
-        lda     #$0F
-        sta     IndReg
-        ldy     #$00
-        lda     (ptr1),y
-        stx     IndReg
-        ldx     #$00            ; Extend to word
-        rts
-
-.endproc
-
-; ------------------------------------------------------------------------
-; unsigned __fastcall__ peekwsys (unsigned addr);
-
-.proc   _peekwsys
-
-        sta     ptr1            ; Store argument pointer
-        stx     ptr1+1
-        ldx     IndReg
-        lda     #$0F
-        sta     IndReg
-        ldy     #$00
-        lda     (ptr1),y        ; Get low byte
-        pha
-        iny
-        lda     (ptr1),y        ; Get high byte
-        stx     IndReg
-        tax                     ; High byte -> X
-        pla                     ; Low byte -> A
-        rts
-
-.endproc
-
diff --git a/libsrc/cbm510/pencalib.c b/libsrc/cbm510/pencalib.c
deleted file mode 100755 (executable)
index 3ff3faf..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
-** Calibrate lightpen drivers to the current video hardware.
-**
-** 2013-09-05, Greg King
-**
-*/
-
-
-#include <conio.h>
-#include <mouse.h>
-#include <pen.h>
-
-
-#define COMMAND1 "Adjust by clicking on line."
-#define COMMAND2 "Finish by clicking off bar."
-
-
-/*
-** There is a delay between when the VIC sends its signal, and when the display
-** shows that signal.  There is another delay between the display and when
-** the lightpen says that it saw that signal. Each display and pen is different.
-** Therefore, the driver must be calibrated to them.  A white bar is painted on
-** the screen; and, a line is drawn down the middle of it.  When the user clicks
-** on that line, the difference between its position and where the VIC thinks
-** that the pen is pointing becomes an offset that is subtracted from what the
-** VIC sees.
-*/
-void __fastcall__ pen_calibrate (unsigned char *XOffset)
-{
-    unsigned char oldBg = bgcolor (COLOR_BLUE);
-    unsigned char oldText = textcolor (COLOR_GRAY3);
-    unsigned char oldRev = revers (1);
-    unsigned char sprite0Color = peekbsys ((unsigned)&VIC.spr_color[0]);
-    unsigned char width, width2, height, height4, height8;
-    struct mouse_info info;
-
-    screensize (&width, &height);
-    width2 = width / 2;
-    height4 = height / 4;
-    height8 = height4 * 8;
-
-    /* Draw a bar and line. */
-
-    clrscr ();
-    cclearxy (0, height4, height4 * width);
-    cvlinexy (width2, height4 + 1, height4 - 2);
-    revers (0);
-
-    /* Print instructions. */
-
-    cputsxy (width2 - (sizeof COMMAND1) / 2, height / 2 + 1, COMMAND1);
-    cputsxy (width2 - (sizeof COMMAND2) / 2, height / 2 + 3, COMMAND2);
-
-    pokebsys ((unsigned)&VIC.spr_color[0], COLOR_GRAY2);
-    mouse_show ();
-    mouse_move (width2 * 8, height8 / 2);
-
-    for (;;) {
-        /* Wait for the main button to be released. */
-
-        do ; while ((mouse_buttons () & MOUSE_BTN_LEFT));
-
-        /* Wait for the main button to be pressed. */
-
-        do {
-            mouse_info (&info);
-        } while (!(info.buttons & MOUSE_BTN_LEFT));
-
-        /* Find out if the pen is on or off the bar. */
-
-        if (info.pos.y < height8 || info.pos.y >= height8 * 2) {
-            break;
-        }
-
-        /* On the bar; adjust the offset. */
-        /* Characters are eight pixels wide.
-        ** The VIC-II sees every other pixel;
-        ** so, we use half of the difference.
-        */
-
-        *XOffset += (info.pos.x - (width2 * 8 + 8/2)) / 2;
-    }
-
-    /* Off the bar; wait for the main button to be released. */
-
-    do ; while ((mouse_buttons () & MOUSE_BTN_LEFT));
-
-    mouse_hide ();
-    pokebsys ((unsigned)&VIC.spr_color[0], sprite0Color);
-    revers (oldRev);
-    textcolor (oldText);
-    bgcolor (oldBg);
-    clrscr ();
-}
diff --git a/libsrc/cbm510/pokesys.s b/libsrc/cbm510/pokesys.s
deleted file mode 100644 (file)
index ea9c5f4..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-;
-; Ullrich von Bassewitz, 13.09.2001
-;
-; void pokebsys (unsigned Addr, unsigned char Val);
-; void pokewsys (unsigned Addr, unsigned Val);
-
-        .export         _pokebsys, _pokewsys
-        .import         popsreg
-        .importzp       sreg, tmp1
-
-        .include        "cbm510.inc"
-
-
-; ------------------------------------------------------------------------
-;
-
-.proc   _pokebsys
-
-        jsr     popsreg         ; Get the address
-        ldx     IndReg
-        ldy     #$0F
-        sty     IndReg          ; Switch to the system bank
-        ldy     #$00
-        sta     (sreg),y
-        stx     IndReg
-        rts
-
-.endproc
-
-; ------------------------------------------------------------------------
-;
-
-.proc   _pokewsys
-
-        stx     tmp1            ; Save high byte
-        jsr     popsreg         ; Get the address
-        ldx     IndReg
-        ldy     #$0F
-        sty     IndReg          ; Switch to the system bank
-        ldy     #$00
-        sta     (sreg),y
-        iny
-        lda     tmp1
-        sta     (sreg),y
-        stx     IndReg
-        rts
-
-.endproc
-
diff --git a/libsrc/cbm510/randomize.s b/libsrc/cbm510/randomize.s
deleted file mode 100644 (file)
index 75c419c..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; 2002-11-05, Ullrich von Bassewitz
-; 2015-09-11, Greg King
-;
-; void _randomize (void);
-; /* Initialize the random number generator */
-;
-
-        .export         __randomize
-        .import         _srand
-        .importzp       time
-
-__randomize:
-        ldx     time+2          ; Use 50/60HZ clock
-        lda     time+1
-        jmp     _srand          ; Initialize generator
-
diff --git a/libsrc/cbm510/revers.s b/libsrc/cbm510/revers.s
deleted file mode 100644 (file)
index 1cef045..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; unsigned char revers (unsigned char onoff);
-;
-
-        .export         _revers
-        .import         RVS: zp
-
-
-.proc   _revers
-
-        ldx     #$00            ; Assume revers off
-        tay                     ; Test onoff
-        beq     L1              ; Jump if off
-        ldx     #$80            ; Load on value
-        ldy     #$00            ; Assume old value is zero
-L1:     lda     RVS             ; Load old value
-        stx     RVS             ; Set new value
-        beq     L2              ; Jump if old value zero
-        iny                     ; Make old value = 1
-L2:     ldx     #$00            ; Load high byte of result
-        tya                     ; Load low byte, set CC
-        rts
-
-.endproc
-
diff --git a/libsrc/cbm510/ser/cbm510-std.s b/libsrc/cbm510/ser/cbm510-std.s
deleted file mode 100644 (file)
index 7629892..0000000
+++ /dev/null
@@ -1,438 +0,0 @@
-;
-; Serial driver for the builtin 6551 ACIA of the Commodore 510.
-;
-; Ullrich von Bassewitz, 2003-12-18
-;
-; The driver is based on the cc65 rs232 module, which in turn is based on
-; Craig Bruce device driver for the Switftlink/Turbo-232.
-;
-; SwiftLink/Turbo-232 v0.90 device driver, by Craig Bruce, 14-Apr-1998.
-;
-; This software is Public Domain.  It is in Buddy assembler format.
-;
-; This device driver uses the SwiftLink RS-232 Serial Cartridge, available from
-; Creative Micro Designs, Inc, and also supports the extensions of the Turbo232
-; Serial Cartridge.  Both devices are based on the 6551 ACIA chip.  It also
-; supports the "hacked" SwiftLink with a 1.8432 MHz crystal.
-;
-; The code assumes that the kernal + I/O are in context.  On the C128, call
-; it from Bank 15.  On the C64, don't flip out the Kernal unless a suitable
-; NMI catcher is put into the RAM under then Kernal.  For the SuperCPU, the
-; interrupt handling assumes that the 65816 is in 6502-emulation mode.
-;
-
-        .include        "zeropage.inc"
-        .include        "../extzp.inc"
-        .include        "ser-kernel.inc"
-        .include        "ser-error.inc"
-        .include        "cbm510.inc"
-
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _cbm510_std_ser
-
-; Driver signature
-
-        .byte   $73, $65, $72           ; "ser"
-        .byte   SER_API_VERSION         ; Serial API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .word   INSTALL
-        .word   UNINSTALL
-        .word   OPEN
-        .word   CLOSE
-        .word   GET
-        .word   PUT
-        .word   STATUS
-        .word   IOCTL
-        .word   IRQ
-
-;----------------------------------------------------------------------------
-;
-; Global variables
-;
-
-.bss
-RecvHead:       .res    1       ; Head of receive buffer
-RecvTail:       .res    1       ; Tail of receive buffer
-RecvFreeCnt:    .res    1       ; Number of bytes in receive buffer
-SendHead:       .res    1       ; Head of send buffer
-SendTail:       .res    1       ; Tail of send buffer
-SendFreeCnt:    .res    1       ; Number of bytes in send buffer
-
-Stopped:        .res    1       ; Flow-stopped flag
-RtsOff:         .res    1       ;
-
-; Send and receive buffers: 256 bytes each
-RecvBuf:        .res    256
-SendBuf:        .res    256
-
-.rodata
-
-; Tables used to translate RS232 params into register values
-
-BaudTable:                      ; bit7 = 1 means setting is invalid
-        .byte   $FF             ; SER_BAUD_45_5
-        .byte   $01             ; SER_BAUD_50
-        .byte   $02             ; SER_BAUD_75
-        .byte   $03             ; SER_BAUD_110
-        .byte   $04             ; SER_BAUD_134_5
-        .byte   $05             ; SER_BAUD_150
-        .byte   $06             ; SER_BAUD_300
-        .byte   $07             ; SER_BAUD_600
-        .byte   $08             ; SER_BAUD_1200
-        .byte   $09             ; SER_BAUD_1800
-        .byte   $0A             ; SER_BAUD_2400
-        .byte   $0B             ; SER_BAUD_3600
-        .byte   $0C             ; SER_BAUD_4800
-        .byte   $0D             ; SER_BAUD_7200
-        .byte   $0E             ; SER_BAUD_9600
-        .byte   $0F             ; SER_BAUD_19200
-        .byte   $FF             ; SER_BAUD_38400
-        .byte   $FF             ; SER_BAUD_57600
-        .byte   $FF             ; SER_BAUD_115200
-        .byte   $FF             ; SER_BAUD_230400
-
-BitTable:
-        .byte   $60             ; SER_BITS_5
-        .byte   $40             ; SER_BITS_6
-        .byte   $20             ; SER_BITS_7
-        .byte   $00             ; SER_BITS_8
-
-StopTable:
-        .byte   $00             ; SER_STOP_1
-        .byte   $80             ; SER_STOP_2
-
-ParityTable:
-        .byte   $00             ; SER_PAR_NONE
-        .byte   $20             ; SER_PAR_ODD
-        .byte   $60             ; SER_PAR_EVEN
-        .byte   $A0             ; SER_PAR_MARK
-        .byte   $E0             ; SER_PAR_SPACE
-
-.code
-
-;----------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present.
-; Must return an SER_ERR_xx code in a/x.
-;
-; Since we don't have to manage the IRQ vector on the Plus/4, this is actually
-; the same as:
-;
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Must return an SER_ERR_xx code in a/x.
-; and:
-;
-; CLOSE: Close the port, disable interrupts and flush the buffer. Called
-; without parameters. Must return an error code in a/x.
-;
-
-INSTALL:
-UNINSTALL:
-CLOSE:
-
-; Deactivate DTR and disable 6551 interrupts
-
-        lda     #%00001010
-        jsr     write_cmd
-
-; Done, return an error code
-
-        lda     #<SER_ERR_OK
-        tax                     ; A is zero
-        rts
-
-;----------------------------------------------------------------------------
-; PARAMS routine. A pointer to a ser_params structure is passed in ptr1.
-; Must return an SER_ERR_xx code in a/x.
-
-OPEN:
-
-; Check if the handshake setting is valid
-
-        ldy     #SER_PARAMS::HANDSHAKE  ; Handshake
-        lda     (ptr1),y
-        cmp     #SER_HS_HW              ; This is all we support
-        bne     InvParam
-
-; Initialize buffers
-
-        ldx     #0
-        stx     Stopped
-        stx     RecvHead
-        stx     RecvTail
-        stx     SendHead
-        stx     SendTail
-        dex                             ; X = 255
-        stx     RecvFreeCnt
-        stx     SendFreeCnt
-
-; Set the value for the control register, which contains stop bits, word
-; length and the baud rate.
-
-        ldy     #SER_PARAMS::BAUDRATE
-        lda     (ptr1),y                ; Baudrate index
-        tay
-        lda     BaudTable,y             ; Get 6551 value
-        bmi     InvBaud                 ; Branch if rate not supported
-        sta     tmp1
-
-        ldy     #SER_PARAMS::DATABITS   ; Databits
-        lda     (ptr1),y
-        tay
-        lda     BitTable,y
-        ora     tmp1
-        sta     tmp1
-
-        ldy     #SER_PARAMS::STOPBITS   ; Stopbits
-        lda     (ptr1),y
-        tay
-        lda     StopTable,y
-        ora     tmp1
-        ora     #%00010000              ; Receiver clock source = baudrate
-        ldy     #ACIA::CTRL
-        jsr     write
-
-; Set the value for the command register. We remember the base value in
-; RtsOff, since we will have to manipulate ACIA_CMD often.
-
-        ldy     #SER_PARAMS::PARITY     ; Parity
-        lda     (ptr1),y
-        tay
-        lda     ParityTable,y
-        ora     #%00000001              ; DTR active
-        sta     RtsOff
-        ora     #%00001000              ; Enable receive interrupts
-        jsr     write_cmd
-
-; Done
-
-        lda     #<SER_ERR_OK
-        tax                             ; A is zero
-        rts
-
-; Invalid parameter
-
-InvParam:
-        lda     #<SER_ERR_INIT_FAILED
-        ldx     #>SER_ERR_INIT_FAILED
-        rts
-
-; Baud rate not available
-
-InvBaud:
-        lda     #<SER_ERR_BAUD_UNAVAIL
-        ldx     #>SER_ERR_BAUD_UNAVAIL
-        rts
-
-;----------------------------------------------------------------------------
-; GET: Will fetch a character from the receive buffer and store it into the
-; variable pointer to by ptr1. If no data is available, SER_ERR_NO_DATA is
-; return.
-;
-
-GET:    ldx     SendFreeCnt             ; Send data if necessary
-        inx                             ; X == $FF?
-        beq     @L1
-        lda     #$00
-        jsr     TryToSend
-
-; Check for buffer empty
-
-@L1:    lda     RecvFreeCnt
-        cmp     #$ff
-        bne     @L2
-        lda     #<SER_ERR_NO_DATA
-        ldx     #>SER_ERR_NO_DATA
-        rts
-
-; Check for flow stopped & enough free: release flow control
-
-@L2:    ldx     Stopped
-        beq     @L3
-        cmp     #63
-        bcc     @L3
-        lda     #$00
-        sta     Stopped
-        lda     RtsOff
-        ora     #%00001000
-        jsr     write_cmd
-
-; Get byte from buffer
-
-@L3:    ldx     RecvHead
-        lda     RecvBuf,x
-        inc     RecvHead
-        inc     RecvFreeCnt
-        ldx     #$00
-        sta     (ptr1,x)
-        txa                             ; Return code = 0
-        rts
-
-;----------------------------------------------------------------------------
-; PUT: Output character in A.
-; Must return an error code in a/x.
-;
-
-PUT:
-
-; Try to send
-
-        ldx     SendFreeCnt
-        inx                             ; X = $ff?
-        beq     @L2
-        pha
-        lda     #$00
-        jsr     TryToSend
-        pla
-
-; Put byte into send buffer & send
-
-@L2:    ldx     SendFreeCnt
-        bne     @L3
-        lda     #<SER_ERR_OVERFLOW      ; X is already zero
-        rts
-
-@L3:    ldx     SendTail
-        sta     SendBuf,x
-        inc     SendTail
-        dec     SendFreeCnt
-        lda     #$ff
-        jsr     TryToSend
-        lda     #<SER_ERR_OK
-        tax
-        rts
-
-;----------------------------------------------------------------------------
-; STATUS: Return the status in the variable pointed to by ptr1.
-; Must return an error code in a/x.
-;
-
-STATUS: lda     #$0F
-        sta     IndReg
-        ldy     #ACIA::STATUS
-        lda     (acia),y
-        ldx     #0
-        sta     (ptr1,x)
-        lda     IndReg
-        sta     ExecReg
-        txa                             ; SER_ERR_OK
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
-; specific data in ptr1, and the ioctl code in A.
-; Must return an error code in a/x.
-;
-
-IOCTL:  lda     #<SER_ERR_INV_IOCTL     ; We don't support ioclts for now
-        ldx     #>SER_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; IRQ: Called from the builtin runtime IRQ handler as a subroutine. All
-; registers are already save, no parameters are passed, but the carry flag
-; is clear on entry. The routine must return with carry set if the interrupt
-; was handled, otherwise with carry clear.
-;
-
-IRQ:    lda     #$0F
-        sta     IndReg          ; Switch to the system bank
-        ldy     #ACIA::STATUS
-        lda     (acia),y        ; Check ACIA status for receive interrupt
-        and     #$08
-        beq     @L9             ; Jump if no ACIA interrupt (carry still clear)
-        ldy     #ACIA::DATA
-        lda     (acia),y        ; Get byte from ACIA
-        ldx     RecvFreeCnt     ; Check if we have free space left
-        beq     @L1             ; Jump if no space in receive buffer
-        ldy     RecvTail        ; Load buffer pointer
-        sta     RecvBuf,y       ; Store received byte in buffer
-        inc     RecvTail        ; Increment buffer pointer
-        dec     RecvFreeCnt     ; Decrement free space counter
-        cpx     #33             ; Check for buffer space low
-        bcs     @L9             ; Assert flow control if buffer space low
-
-; Assert flow control if buffer space too low
-
-@L1:    lda     RtsOff
-        ldy     #ACIA::CMD
-        sta     (acia),y
-        sta     Stopped
-        sec                     ; Interrupt handled
-
-; Done, switch back to the execution segment
-
-@L9:    lda     ExecReg
-        sta     IndReg
-        rts
-
-;----------------------------------------------------------------------------
-; Try to send a byte. Internal routine. A = TryHard
-
-.proc   TryToSend
-
-        sta     tmp1            ; Remember tryHard flag
-        lda     #$0F
-        sta     IndReg          ; Switch to the system bank
-@L0:    lda     SendFreeCnt
-        cmp     #$ff
-        beq     @L3             ; Bail out
-
-; Check for flow stopped
-
-@L1:    lda     Stopped
-        bne     @L3             ; Bail out
-
-; Check that swiftlink is ready to send
-
-@L2:    ldy     #ACIA::STATUS
-        lda     (acia),y
-        and     #$10
-        bne     @L4
-        bit     tmp1            ; Keep trying if must try hard
-        bmi     @L0
-
-; Switch back the bank and return
-
-@L3:    lda     ExecReg
-        sta     IndReg
-        rts
-
-; Send byte and try again
-
-@L4:    ldx     SendHead
-        lda     SendBuf,x
-        ldy     #ACIA::DATA
-        sta     (acia),y
-        inc     SendHead
-        inc     SendFreeCnt
-        jmp     @L0
-
-.endproc
-
-
-;----------------------------------------------------------------------------
-; Write to the ACIA changing the indirect segment. Offset is in Y, value in A.
-
-write_cmd:
-        ldy     #ACIA::CMD
-write:  pha
-        lda     #$0F
-        sta     IndReg
-        pla
-        sta     (acia),y
-        lda     ExecReg
-        sta     IndReg
-        rts
-
diff --git a/libsrc/cbm510/systime.s b/libsrc/cbm510/systime.s
deleted file mode 100644 (file)
index daac36d..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-;
-; Stefan Haubenthal, 2009-07-27
-; Ullrich von Bassewitz, 2009-09-24
-;
-; time_t _systime (void);
-; /* Similar to time(), but:
-; **   - Is not ISO C
-; **   - Does not take the additional pointer
-; **   - Does not set errno when returning -1
-; */
-;
-
-        .include        "time.inc"
-        .include        "cbm510.inc"
-        .include        "extzp.inc"
-
-        .import         sys_bank, restore_bank
-        .importzp       tmp1, tmp2
-
-
-;----------------------------------------------------------------------------
-.code
-
-.proc   __systime
-
-; Switch to the system bank
-
-        jsr     sys_bank
-
-; Read the clock
-
-        ldy     #CIA::TODHR
-        lda     (cia2),y
-        bpl     AM
-        and     #%01111111
-        sed
-        clc
-        adc     #$12
-        cld
-AM:     jsr     BCD2dec
-        sta     TM + tm::tm_hour
-        ldy     #CIA::TODMIN
-        lda     (cia2),y
-        jsr     BCD2dec
-        sta     TM + tm::tm_min
-        ldy     #CIA::TODSEC
-        lda     (cia2),y
-        jsr     BCD2dec
-        sta     TM + tm::tm_sec
-        ldy     #CIA::TOD10
-        lda     (cia2),y                ; Dummy read to unfreeze
-
-; Restore the bank
-
-        jsr     restore_bank
-
-; Convert to a time
-
-        lda     #<TM
-        ldx     #>TM
-        jmp     _mktime
-
-.endproc
-
-;----------------------------------------------------------------------------
-; dec = (((BCD>>4)*10) + (BCD&0xf))
-
-.proc   BCD2dec
-
-        tax
-        and     #%00001111
-        sta     tmp1
-        txa
-        and     #%11110000      ; *16
-        lsr                     ; *8
-        sta     tmp2
-        lsr
-        lsr                     ; *2
-        adc     tmp2            ; = *10
-        adc     tmp1
-        rts
-
-.endproc
-
-;----------------------------------------------------------------------------
-; TM struct with date set to 1970-01-01
-.data
-
-TM:     .word           0       ; tm_sec
-        .word           0       ; tm_min
-        .word           0       ; tm_hour
-        .word           1       ; tm_mday
-        .word           0       ; tm_mon
-        .word           70      ; tm_year
-        .word           0       ; tm_wday
-        .word           0       ; tm_yday
-        .word           0       ; tm_isdst
-
diff --git a/libsrc/cbm510/sysuname.s b/libsrc/cbm510/sysuname.s
deleted file mode 100644 (file)
index 24d4dc0..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; unsigned char __fastcall__ _sysuname (struct utsname* buf);
-;
-
-        .export         __sysuname, utsdata
-
-        .import         utscopy
-
-        __sysuname = utscopy
-
-;--------------------------------------------------------------------------
-; Data. We define a fixed utsname struct here and just copy it.
-
-.rodata
-
-utsdata:
-        ; sysname
-        .asciiz         "cc65"
-
-        ; nodename
-        .asciiz         ""
-
-        ; release
-        .byte           ((.VERSION >> 8) & $0F) + '0'
-        .byte           '.'
-        .byte           ((.VERSION >> 4) & $0F) + '0'
-        .byte           $00
-
-        ; version
-        .byte           (.VERSION & $0F) + '0'
-        .byte           $00
-
-        ; machine
-        .asciiz         "Commodore 510"
-
-
-
diff --git a/libsrc/cbm610/_scrsize.s b/libsrc/cbm610/_scrsize.s
deleted file mode 100644 (file)
index 8b68b8c..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; Screen size variables
-;
-
-        .export         screensize
-        .import         SCREEN
-                              
-        screensize      = SCREEN
-
-
diff --git a/libsrc/cbm610/banking.s b/libsrc/cbm610/banking.s
deleted file mode 100644 (file)
index 51316cf..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-;
-; Ullrich von Bassewitz, 28.09.1998
-;
-; Banking routines for the 610.
-;
-
-        .export         set_bank, sys_bank, restore_bank
-        .importzp       ptr1, segsave
-
-        .include        "cbm610.inc"
-
-.code
-
-.proc   sys_bank
-        pha
-        lda     IndReg
-        sta     segsave
-        lda     #$0F
-        sta     IndReg
-        pla
-        rts
-.endproc
-
-.proc   set_bank
-        pha
-        lda     IndReg
-        sta     segsave
-        pla
-        sta     IndReg
-        rts
-.endproc
-
-.proc   restore_bank
-        pha
-        lda     segsave
-        sta     IndReg
-        pla
-        rts
-.endproc
-
-
diff --git a/libsrc/cbm610/break.s b/libsrc/cbm610/break.s
deleted file mode 100644 (file)
index 03927fa..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-;
-; Ullrich von Bassewitz, 27.09.1998
-;
-; void set_brk (unsigned Addr);
-; void reset_brk (void);
-;
-
-        .export         _set_brk, _reset_brk
-        .export         _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
-        .import         _atexit, BRKVec
-
-        .include        "cbm610.inc"
-
-
-.bss
-_brk_a:         .res    1
-_brk_x:         .res    1
-_brk_y:         .res    1
-_brk_sr:        .res    1
-_brk_pc:        .res    2
-_brk_01:        .res    1
-
-oldvec:         .res    2               ; Old vector
-
-
-.data
-uservec:        jmp     $FFFF           ; Patched at runtime
-
-
-.code
-
-; Set the break vector
-.proc   _set_brk
-
-        sta     uservec+1
-        stx     uservec+2       ; Set the user vector
-
-        lda     oldvec
-        ora     oldvec+1        ; Did we save the vector already?
-        bne     L1              ; Jump if we installed the handler already
-
-        lda     BRKVec
-        sta     oldvec
-        lda     BRKVec+1
-        sta     oldvec+1        ; Save the old vector
-
-L1:     lda     #<brk_handler   ; Set the break vector to our routine
-        ldx     #>brk_handler
-        sta     BRKVec
-        stx     BRKVec+1
-        rts
-
-.endproc
-
-
-; Reset the break vector
-.proc   _reset_brk
-
-        lda     oldvec
-        ldx     oldvec+1
-        beq     @L9             ; Jump if vector not installed
-        sta     BRKVec
-        stx     BRKVec+1
-        lda     #$00
-        sta     oldvec          ; Clear the old vector
-        stx     oldvec+1
-@L9:    rts
-
-.endproc
-
-
-
-; Break handler, called if a break occurs
-
-.proc   brk_handler
-
-        pla
-        sta     _brk_01
-        pla
-        sta     _brk_y
-        pla
-        sta     _brk_x
-        pla
-        sta     _brk_a
-        pla
-        and     #$EF            ; Clear break bit
-        sta     _brk_sr
-        pla                     ; PC low
-        sec
-        sbc     #2              ; Point to start of brk
-        sta     _brk_pc
-        pla                     ; PC high
-        sbc     #0
-        sta     _brk_pc+1
-
-        jsr     uservec         ; Call the user's routine
-
-        lda     _brk_01
-        sta     IndReg
-
-        lda     _brk_pc+1
-        pha
-        lda     _brk_pc
-        pha
-        lda     _brk_sr
-        pha
-        ldx     _brk_x
-        ldy     _brk_y
-        lda     _brk_a
-        rti                     ; Jump back...
-
-.endproc
-
-
diff --git a/libsrc/cbm610/cgetc.s b/libsrc/cbm610/cgetc.s
deleted file mode 100644 (file)
index b565866..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; char cgetc (void);
-;
-
-        .export         _cgetc
-        .import         plot, write_crtc
-        .import         cursor
-
-        .import         keyidx: zp, keybuf: zp, config: zp
-
-
-
-_cgetc: lda     keyidx          ; Get number of characters
-        bne     L2              ; Jump if there are already chars waiting
-
-; Switch on the cursor if needed
-
-        lda     cursor
-        beq     L1              ; Jump if no cursor
-
-        jsr     plot            ; Set the current cursor position
-        ldy     #10
-        lda     config          ; Cursor format
-        jsr     write_crtc      ; Set the cursor formar
-
-L1:     lda     keyidx
-        beq     L1
-
-        ldy     #10
-        lda     #$20            ; Cursor off
-        jsr     write_crtc
-
-L2:     ldx     #$00            ; Get index
-        ldy     keybuf          ; Get first character in the buffer
-        sei
-L3:     lda     keybuf+1,x      ; Move up the remaining chars
-        sta     keybuf,x
-        inx
-        cpx     keyidx
-        bne     L3
-        dec     keyidx
-        cli
-
-        ldx     #$00            ; High byte
-        tya                     ; First char from buffer
-        rts
-
-
diff --git a/libsrc/cbm610/clrscr.s b/libsrc/cbm610/clrscr.s
deleted file mode 100644 (file)
index 8ecc4b0..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.09.1998
-;
-; void clrscr (void);
-;
-
-        .export         _clrscr
-        .import         plot
-        .import         CURS_X: zp, CURS_Y: zp, CharPtr: zp
-
-        .include        "cbm610.inc"
-
-.proc   _clrscr
-
-        lda     #0
-        sta     CURS_X
-        sta     CURS_Y
-        jsr     plot            ; Set cursor to top left corner
-
-        lda     IndReg
-        pha
-        lda     #$0F
-        sta     IndReg          ; Switch to the system bank
-
-        ldx     #8
-        ldy     #$00
-        lda     #$20            ; Screencode for blank
-L1:     sta     (CharPtr),y
-        iny
-        bne     L1
-        inc     CharPtr+1
-        dex
-        bne     L1
-
-        pla
-        sta     IndReg          ; Restore old indirect segment
-
-        jmp     plot            ; Set screen pointer again
-
-.endproc
-
-
-
diff --git a/libsrc/cbm610/color.s b/libsrc/cbm610/color.s
deleted file mode 100644 (file)
index bd7a155..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; unsigned char __fastcall__ textcolor (unsigned char color);
-; unsigned char __fastcall__ bgcolor (unsigned char color);
-; unsigned char __fastcall__ bordercolor (unsigned char color);
-;
-
-        .export         _textcolor, _bgcolor, _bordercolor
-        .import         return0, return1
-
-        .include        "cbm610.inc"
-
-_textcolor      = return1
-
-_bgcolor        = return0
-
-_bordercolor    = return0
-
-
diff --git a/libsrc/cbm610/cputc.s b/libsrc/cbm610/cputc.s
deleted file mode 100644 (file)
index 831ead6..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; void cputcxy (unsigned char x, unsigned char y, char c);
-; void cputc (char c);
-;
-
-        .export         _cputcxy, _cputc, cputdirect, putchar
-        .export         newline, plot
-        .destructor     setsyscursor
-
-        .import         _gotoxy
-        .import         popa
-        .import         PLOT
-
-        .import         ktmp: zp, crtc: zp, CURS_X: zp, CURS_Y: zp, RVS: zp
-        .import         CharPtr: zp
-
-        .include        "cbm610.inc"
-
-
-_cputcxy:
-        pha                     ; Save C
-        jsr     popa            ; Get Y
-        jsr     _gotoxy         ; Set cursor, drop x
-        pla                     ; Restore C
-
-; Plot a character - also used as internal function
-
-_cputc: cmp     #$0A            ; CR?
-        bne     L1
-        lda     #0
-        sta     CURS_X
-        beq     plot            ; Recalculate pointers
-
-L1:     cmp     #$0D            ; LF?
-        beq     newline         ; Recalculate pointers
-
-; Printable char of some sort
-
-        cmp     #' '
-        bcc     cputdirect      ; Other control char
-        tay
-        bmi     L10
-        cmp     #$60
-        bcc     L2
-        and     #$DF
-        bne     cputdirect      ; Branch always
-L2:     and     #$3F
-
-cputdirect:
-        jsr     putchar         ; Write the character to the screen
-
-; Advance cursor position
-
-advance:
-        iny
-        cpy     #XSIZE
-        bne     L3
-        jsr     newline         ; new line
-        ldy     #0              ; + cr
-L3:     sty     CURS_X
-        rts
-
-newline:
-        clc
-        lda     #XSIZE
-        adc     CharPtr
-        sta     CharPtr
-        bcc     L4
-        inc     CharPtr+1
-L4:     inc     CURS_Y
-        rts
-
-; Handle character if high bit set
-
-L10:    and     #$7F
-        cmp     #$7E            ; PI?
-        bne     L11
-        lda     #$5E            ; Load screen code for PI
-        bne     cputdirect
-L11:    ora     #$40
-        bne     cputdirect      ; Branch always
-
-; Write one character to the screen without doing anything else, return X
-; position in Y
-
-putchar:
-        ldx     IndReg
-        ldy     #$0F
-        sty     IndReg
-        ora     RVS             ; Set revers bit
-        ldy     CURS_X
-        sta     (CharPtr),y     ; Set char
-        stx     IndReg
-        rts
-
-; Set cursor position, calculate RAM pointers
-
-plot:   ldx     CURS_Y
-        lda     LineLSBTab,x
-        sta     CharPtr
-        lda     LineMSBTab,x
-        sta     CharPtr+1
-
-        lda     IndReg
-        pha
-        lda     #$0F
-        sta     IndReg
-
-        ldy     #$00
-        clc
-        sei
-        sta     (crtc),y
-        lda     CharPtr
-        adc     CURS_X
-        iny
-        sta     (crtc),y
-        dey
-        lda     #$0E
-        sta     (crtc),y
-        iny
-        lda     (crtc),y
-        and     #$F8
-        sta     ktmp
-        lda     CharPtr+1
-        adc     #$00
-        and     #$07
-        ora     ktmp
-        sta     (crtc),y
-        cli
-
-        pla
-        sta     IndReg
-        rts
-
-; -------------------------------------------------------------------------
-; Cleanup routine that sets the kernal cursor position to ours
-
-.segment        "PAGE2"
-
-setsyscursor:
-        ldy     CURS_X
-        ldx     CURS_Y
-        clc
-        jmp     PLOT            ; Set the new cursor
-
-; -------------------------------------------------------------------------
-; Low bytes of the start address of the screen lines
-
-.rodata
-
-LineLSBTab:
-        .byte   $00,$50,$A0,$F0,$40,$90,$E0,$30
-        .byte   $80,$D0,$20,$70,$C0,$10,$60,$B0
-        .byte   $00,$50,$A0,$F0,$40,$90,$E0,$30
-        .byte   $80
-; -------------------------------------------------------------------------
-; High bytes of the start address of the screen lines
-
-LineMSBTab:
-        .byte   $D0,$D0,$D0,$D0,$D1,$D1,$D1,$D2
-        .byte   $D2,$D2,$D3,$D3,$D3,$D4,$D4,$D4
-        .byte   $D5,$D5,$D5,$D5,$D6,$D6,$D6,$D7
-        .byte   $D7
-
diff --git a/libsrc/cbm610/crt0.s b/libsrc/cbm610/crt0.s
deleted file mode 100644 (file)
index 0ad343d..0000000
+++ /dev/null
@@ -1,489 +0,0 @@
-;
-; Startup code for cc65 (CBM 600/700 version)
-;
-
-        .export         _exit, BRKVec
-        .export         __STARTUP__ : absolute = 1      ; Mark as startup
-
-        .import         callirq_y, initlib, donelib
-        .import         push0, callmain
-        .import         __BSS_RUN__, __BSS_SIZE__, __EXTZP_RUN__
-        .import         __INTERRUPTOR_COUNT__
-        .import         scnkey, UDTIM
-
-        .include        "zeropage.inc"
-        .include        "extzp.inc"
-        .include        "cbm610.inc"
-
-
-; ------------------------------------------------------------------------
-; The BASIC header and a small BASIC program. Since it isn't possible to start
-; programs in other banks using SYS, the BASIC program will write a small
-; machine code program into memory at $100; and, start that machine code
-; program. The machine code program will then start the machine language
-; code in bank 1, which will initialize the system by copying stuff from
-; the system bank, and start the application.
-;
-; Here's the BASIC program that's in the following lines:
-;
-; 10 for i=0 to 4
-; 20 read j
-; 30 poke 256+i,j
-; 40 next i
-; 50 sys 256
-; 60 data 120,169,1,133,0
-;
-; The machine program in the data lines is:
-;
-; sei
-; lda     #$01
-; sta     $00           <-- Switch to bank 1 after this command
-;
-; Initialization is complex not only because of the jumping from one bank
-; into another. but also because we want to save memory; and because of
-; that, we will use the system memory ($00-$3FF) for initialization stuff
-; that is overwritten later.
-;
-
-.segment        "EXEHDR"
-
-        .byte   $03,$00,$11,$00,$0a,$00,$81,$20,$49,$b2,$30,$20,$a4,$20,$34,$00
-        .byte   $19,$00,$14,$00,$87,$20,$4a,$00,$27,$00,$1e,$00,$97,$20,$32,$35
-        .byte   $36,$aa,$49,$2c,$4a,$00,$2f,$00,$28,$00,$82,$20,$49,$00,$39,$00
-        .byte   $32,$00,$9e,$20,$32,$35,$36,$00,$4f,$00,$3c,$00,$83,$20,$31,$32
-        .byte   $30,$2c,$31,$36,$39,$2c,$31,$2c,$31,$33,$33,$2c,$30,$00,$00,$00
-
-;------------------------------------------------------------------------------
-; A table that contains values that must be transferred from the system zero-
-; page into our zero-page. Contains pairs of bytes, first one is the address
-; in the system ZP, second one is our ZP address. The table goes into page 2;
-; but, is declared here because it is needed earlier.
-
-.SEGMENT        "PAGE2"
-
-; (We use .proc because we need both a label and a scope.)
-
-.proc   transfer_table
-
-        .byte   $9F, DEVNUM
-        .byte   $CA, CURS_Y
-        .byte   $CB, CURS_X
-        .byte   $CC, graphmode
-        .byte   $D4, config
-
-.endproc
-
-
-;------------------------------------------------------------------------------
-; Page 3 data. This page contains the break vector and the bankswitch
-; subroutine that is copied into high memory on startup. The space occupied by
-; this routine will later be used for a copy of the bank 15 stack. It must be
-; saved since we're going to destroy it when calling bank 15.
-
-.segment        "PAGE3"
-
-BRKVec: .addr   _exit           ; BRK indirect vector
-
-.proc   callbank15
-
-        excrts  := $FF05        ; In bank 15 ROM
-
-.org    $FECB
-
-entry:  php
-        pha
-        lda     #$0F            ; Bank 15
-        sta     IndReg
-        txa
-        pha
-        tya
-        pha
-        sei
-        ldy     #$FF
-        lda     (sysp1),y
-        tay
-        lda     ExecReg
-        sta     (sysp1),y
-        dey
-
-        lda     #.hibyte(excrts-1)
-        sta     (sysp1),y
-        dey
-        lda     #.lobyte(excrts-1)
-        sta     (sysp1),y
-
-        tya
-        sec
-        sbc     #7
-        sta     $1FF            ; Save new sp
-        tay
-
-        tsx
-
-        pla
-        iny
-        sta     (sysp1),y
-        pla
-        iny
-        sta     (sysp1),y
-        pla
-        iny
-        sta     (sysp1),y
-        pla
-        iny
-        sta     (sysp1),y
-
-        lda     $105,x
-        sec
-        sbc     #3
-        iny
-        sta     (sysp1),y
-        lda     $106,x
-        sbc     #0
-        iny
-        sta     (sysp1),y
-
-        ldy     $1FF            ; Restore sp in bank 15
-
-        lda     #.hibyte(expull-1)
-        sta     (sysp1),y
-        dey
-        lda     #.lobyte(expull-1)
-        sta     (sysp1),y
-        dey
-        pla
-        pla
-        tsx
-        stx     $1FF
-        tya
-        tax
-        txs
-        lda     IndReg
-        jmp     $FFF6
-
-expull: pla
-        tay
-        pla
-        tax
-        pla
-        plp
-        rts
-
-.if (expull <> $FF2E)
-.error "Symbol expull must be aligned with Kernal in bank 15"
-.endif
-
-.reloc
-
-.endproc
-
-;------------------------------------------------------------------------------
-; The code in the target bank when switching back will be put at the bottom
-; of the stack. We will jump here to switch segments. The range $F2..$FF is
-; not used by any Kernal routine.
-
-.segment        "STARTUP"
-
-Back:   sta     ExecReg
-
-; We are at $100 now. The following snippet is a copy of the code that is poked
-; in the system bank memory by the BASIC header program; it's only for
-; documentation, and not actually used here:
-
-        sei
-        lda     #$01
-        sta     ExecReg
-
-; This is the actual starting point of our code after switching banks for
-; startup. Beware: The following code will get overwritten as soon as we
-; use the stack (since it's in page 1)! We jump to another location since
-; we need some space for subroutines that aren't used later.
-
-        jmp     Origin
-
-; Hardware vectors, copied to $FFF6
-
-.proc   vectors
-        sta     ExecReg
-        rts
-        nop
-        .word   nmi             ; NMI vector
-        .word   0               ; Reset -- not used
-        .word   irq             ; IRQ vector
-.endproc
-
-; Initializers for the extended zero-page. See "extzp.s".
-
-.proc   extzp
-        .word   $0100           ; sysp1
-        .word   $0300           ; sysp3
-        .word   $d800           ; crtc
-        .word   $da00           ; sid
-        .word   $db00           ; ipccia
-        .word   $dc00           ; cia
-        .word   $dd00           ; acia
-        .word   $de00           ; tpi1
-        .word   $df00           ; tpi2
-        .word   $ea29           ; ktab1
-        .word   $ea89           ; ktab2
-        .word   $eae9           ; ktab3
-        .word   $eb49           ; ktab4
-.endproc
-
-; Switch the indirect segment to the system bank.
-
-Origin: lda     #$0F
-        sta     IndReg
-
-; Initialize the extended zero-page.
-
-        ldx     #.sizeof(extzp)-1
-L1:     lda     extzp,x
-        sta     <__EXTZP_RUN__,x
-        dex
-        bpl     L1
-
-; Save the old stack pointer from the system bank; and, set up our hw sp.
-
-        tsx
-        txa
-        ldy     #$FF
-        sta     (sysp1),y       ; Save system stack point into $F:$1FF
-        ldx     #$FE            ; Leave $1FF untouched for cross-bank calls
-        txs                     ; Set up our own stack
-
-; Copy stuff from the system zero-page to ours.
-
-        lda     #.sizeof(transfer_table)
-        sta     ktmp
-L2:     ldx     ktmp
-        ldy     transfer_table-2,x
-        lda     transfer_table-1,x
-        tax
-        lda     (sysp0),y
-        sta     $00,x
-        dec     ktmp
-        dec     ktmp
-        bne     L2
-
-; Set the interrupt, NMI, and other vectors.
-
-        ldx     #.sizeof(vectors)-1
-L3:     lda     vectors,x
-        sta     $10000 - .sizeof(vectors),x
-        dex
-        bpl     L3
-
-; Set up the C stack.
-
-        lda     #.lobyte(callbank15::entry)
-        sta     sp
-        lda     #.hibyte(callbank15::entry)
-        sta     sp+1
-
-; Set up the subroutine and jump vector table that redirects Kernal calls to
-; the system bank.
-
-        ldy     #.sizeof(callbank15)
-@L1:    lda     callbank15-1,y
-        sta     callbank15::entry-1,y
-        dey
-        bne     @L1
-
-; Set up the jump vector table. Y is zero on entry.
-
-        ldx     #45-1           ; Number of vectors
-@L2:    lda     #$20            ; JSR opcode
-        sta     $FF6F,y
-        iny
-        lda     #.lobyte(callbank15::entry)
-        sta     $FF6F,y
-        iny
-        lda     #.hibyte(callbank15::entry)
-        sta     $FF6F,y
-        iny
-        dex
-        bpl     @L2
-
-; Set the indirect segment to the bank that we're executing in.
-
-        lda     ExecReg
-        sta     IndReg
-
-; Zero the BSS segment. We will do that here instead of calling the routine
-; in the common library, since we have the memory anyway; and this way,
-; it's reused later.
-
-        lda     #<__BSS_RUN__
-        sta     ptr1
-        lda     #>__BSS_RUN__
-        sta     ptr1+1
-        lda     #0
-        tay
-
-; Clear full pages.
-
-        ldx     #>__BSS_SIZE__
-        beq     Z2
-Z1:     sta     (ptr1),y
-        iny
-        bne     Z1
-        inc     ptr1+1          ; Next page
-        dex
-        bne     Z1
-
-; Clear the remaining page.
-
-Z2:     ldx     #<__BSS_SIZE__
-        beq     Z4
-Z3:     sta     (ptr1),y
-        iny
-        dex
-        bne     Z3
-Z4:     jmp     Init
-
-; ------------------------------------------------------------------------
-; We are at $200 now. We may now start calling subroutines safely since
-; the code we execute is no longer in the stack page.
-
-.segment        "PAGE2"
-
-; Activate the chained interrupt handlers; then, enable interrupts.
-
-Init:   lda     #.lobyte(__INTERRUPTOR_COUNT__*2)
-        sta     irqcount
-        cli
-
-; Call module constructors.
-
-        jsr     initlib
-
-; Push the command-line arguments; and, call main().
-
-        jsr     callmain
-
-; Call the module destructors. This is also the exit() entry and the default entry
-; point for the break vector.
-
-_exit:  pha                     ; Save the return code
-        jsr     donelib         ; Run module destructors
-        lda     #$00
-        sta     irqcount        ; Disable custom irq handlers
-
-; Address the system bank.
-
-        lda     #$0F
-        sta     IndReg
-
-; Copy stuff back from our zero-page to the system's.
-
-.if 0
-        lda     #.sizeof(transfer_table)
-        sta     ktmp
-@L0:    ldx     ktmp
-        ldy     transfer_table-2,x
-        lda     transfer_table-1,x
-        tax
-        lda     $00,x
-        sta     (sysp0),y
-        dec     ktmp
-        dec     ktmp
-        bne     @L0
-.endif
-
-; Place the program return code into BASIC's status variable.
-
-        pla
-        ldy     #$9C            ; ST
-        sta     (sysp0),y
-
-; Set up the welcome code at the stack bottom in the system bank.
-
-        ldy     #$FF
-        lda     (sysp1),y       ; Load system bank sp
-        tax
-        iny                     ; Y = 0
-        lda     #$58            ; CLI opcode
-        sta     (sysp1),y
-        iny
-        lda     #$60            ; RTS opcode
-        sta     (sysp1),y
-        lda     IndReg
-        sei
-        txs
-        jmp     Back
-
-; -------------------------------------------------------------------------
-; The IRQ handler goes into PAGE2. For performance reasons, and to allow
-; easier chaining, we do handle the IRQs in the execution bank (instead of
-; passing them to the system bank).
-
-; This is the mapping of the active IRQ register of the 6525 (tpi1):
-;
-; Bit   7       6       5       4       3       2       1       0
-;                               |       |       |       |       ^ 50 Hz.
-;                               |       |       |       ^ SRQ IEEE 488
-;                               |       |       ^ CIA
-;                               |       ^ IRQB ext. Port
-;                               ^ ACIA
-
-irq:    pha
-        txa
-        pha
-        tya
-        pha
-        lda     IndReg
-        pha
-        lda     ExecReg
-        sta     IndReg          ; Be sure to address our segment
-        tsx
-        lda     $105,x          ; Get the flags from the stack
-        and     #$10            ; Test break flag
-        bne     dobrk
-
-; It's an IRQ.
-
-        cld
-
-; Call the chained IRQ handlers.
-
-        ldy     irqcount
-        beq     irqskip
-        jsr     callirq_y       ; Call the functions
-
-; Done with the chained IRQ handlers; check the TPI for IRQs, and handle them.
-
-irqskip:lda     #$0F
-        sta     IndReg
-        ldy     #TPI::AIR
-        lda     (tpi1),y        ; Interrupt Register 6525
-        beq     noirq
-
-; 50/60Hz. interrupt
-
-        cmp     #%00000001      ; ticker IRQ?
-        bne     irqend
-        jsr     scnkey          ; Poll the keyboard
-        jsr     UDTIM           ; Bump the time
-
-; Done.
-
-irqend: ldy     #TPI::AIR
-        sta     (tpi1),y        ; Clear interrupt
-
-noirq:  pla
-        sta     IndReg
-        pla
-        tay
-        pla
-        tax
-        pla
-nmi:    rti
-
-dobrk:  jmp     (BRKVec)
-
-; -------------------------------------------------------------------------
-; Data area
-
-.bss
-irqcount:       .byte   0
diff --git a/libsrc/cbm610/crtc.s b/libsrc/cbm610/crtc.s
deleted file mode 100644 (file)
index ad9ddef..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-;
-; Ullrich von Bassewitz, 28.09.1998
-;
-; Write to the CRTC.
-;
-
-        .export         write_crtc, read_crtc
-        .importzp       crtc, ktmp
-
-        .include        "cbm610.inc"
-
-
-; Write a value to the CRTC. The index is in Y, the value in A
-
-.proc   write_crtc
-        sta     ktmp
-        lda     IndReg
-        pha
-        lda     #$0F
-        sta     IndReg
-        tya
-        ldy     #$00
-        sei
-        sta     (crtc),y
-        iny
-        lda     ktmp
-        sta     (crtc),y
-        cli
-        pla
-        sta     IndReg
-        lda     ktmp
-        rts
-.endproc
-
-
-.proc   read_crtc
-        sty     ktmp
-        lda     IndReg
-        pha
-        lda     #$0F
-        sta     IndReg
-        lda     ktmp
-        ldy     #$00
-        sei
-        sta     (crtc),y
-        iny
-        lda     (crtc),y
-        cli
-        tay
-        pla
-        sta     IndReg
-        tya
-        ldy     ktmp
-        rts
-.endproc
-
-
diff --git a/libsrc/cbm610/devnum.s b/libsrc/cbm610/devnum.s
deleted file mode 100644 (file)
index d678a2a..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-;
-; Oliver Schmidt, 2010-02-14
-;
-
-        .include        "extzp.inc"
-
-        .exportzp       devnum := DEVNUM
diff --git a/libsrc/cbm610/emd/cbm610-ram.s b/libsrc/cbm610/emd/cbm610-ram.s
deleted file mode 100644 (file)
index 5c67df7..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-;
-; Extended memory driver for the CBM610 additional RAM banks. Driver works
-; without problems when linked statically.
-;
-; Ullrich von Bassewitz, 2002-12-09, 2003-12-20
-;
-
-        .include        "zeropage.inc"
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-        .include        "cbm610.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _cbm610_ram_emd
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION         ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-RAMBANK = 2
-OFFS    = 2
-
-; ------------------------------------------------------------------------
-; Data.
-
-.bss
-curpage:        .res    1               ; Current page number
-
-window:         .res    256             ; Memory "window"
-pagecount:      .res    1               ; Number of available pages
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #$FF
-        sta     curpage                 ; Invalidate the current page
-        sta     pagecount               ; Assume all memory available
-
-        sec
-        jsr     $FF99                   ; MEMTOP
-
-        cmp     #RAMBANK                ; Top of memory in bank 2?
-        bne     @L1                     ; No: We can use all the memory
-        txa
-        sub     #OFFS
-        tya
-        sbc     #$00
-        sta     pagecount
-
-@L1:    lda     #<EM_ERR_OK
-        ldx     #>EM_ERR_OK
-;       rts                             ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     pagecount
-        ldx     #0
-        rts
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:    sta     curpage                 ; Remember the new page
-
-        sta     ptr1+1
-        lda     #OFFS
-        sta     ptr1
-
-; Transfer one page
-
-        ldx     IndReg
-        lda     #RAMBANK
-        sta     IndReg
-
-        ldy     #$00
-@L1:    .repeat 2
-        lda     (ptr1),y
-        sta     window,y
-        iny
-        .endrepeat
-        bne     @L1
-
-        stx     IndReg
-
-; Return the memory window
-
-        lda     #<window
-        ldx     #>window                ; Return the window address
-        rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-
-USE:    sta     curpage                 ; Remember the page
-        lda     #<window
-        ldx     #>window                ; Return the window
-        rts
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT: lda     curpage                 ; Get the current page
-        cmp     #$FF
-        beq     done                    ; Jump if no page mapped
-
-        sta     ptr1+1
-        lda     #OFFS
-        sta     ptr1
-
-; Transfer one page
-
-        ldx     IndReg
-        lda     #RAMBANK
-        sta     IndReg
-
-        ldy     #$00
-@L1:    .repeat 2
-        lda     window,y
-        sta     (ptr1),y
-        iny
-        .endrepeat
-        bne     @L1
-
-        stx     IndReg
-
-; Done
-
-done:   rts
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYFROM:
-        jsr     setup
-
-; Setup the buffer address in this bank.
-
-        sta     copyfrom_buf
-        stx     copyfrom_buf+1
-
-; Check if we must copy full pages
-
-        ldx     ptr2+1
-        beq     @L2
-
-; Copy full pages
-
-        ldx     #$00
-@L1:    jsr     copyfrom
-        inc     ptr1+1
-        inc     copyfrom_buf+1
-@L2:    dec     ptr2+1
-        bne     @L1
-
-; Copy the remaining page
-
-        ldx     ptr2
-        beq     @L3
-
-        jsr     copyfrom
-
-; Restore the indirect segment
-
-@L3:    lda     ExecReg
-        sta     IndReg
-
-; Done
-
-        rts
-
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO: jsr     setup
-
-; Setup the buffer address in this bank.
-
-        sta     copyto_buf
-        stx     copyto_buf+1
-
-; Check if we must copy full pages
-
-        ldx     ptr2+1
-        beq     @L2
-
-; Copy full pages
-
-        ldx     #$00
-@L1:    jsr     copyto
-        inc     ptr1+1
-        inc     copyto_buf+1
-@L2:    dec     ptr2+1
-        bne     @L1
-
-; Copy the remaining page
-
-        ldx     ptr2
-        beq     @L3
-
-        jsr     copyto
-
-; Restore the indirect segment
-
-@L3:    lda     ExecReg
-        sta     IndReg
-
-; Done
-
-        rts
-
-; ------------------------------------------------------------------------
-; setup: Helper function for COPYFROM and COPYTO, will setup parameters.
-;
-
-setup:  sta     ptr3
-        stx     ptr3+1                  ; Save the passed em_copy pointer
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr3),y
-        add     #OFFS
-        sta     ptr1
-        ldy     #EM_COPY::PAGE
-        lda     (ptr3),y
-        adc     #$00
-        sta     ptr1+1
-
-        ldy     #EM_COPY::COUNT
-        lda     (ptr3),y
-        sta     ptr2
-        iny
-        lda     (ptr3),y
-        sta     ptr2+1                  ; Get count into ptr2
-
-        ldy     #EM_COPY::BUF+1
-        lda     (ptr3),y
-        tax
-        dey
-        lda     (ptr3),y                ; Get the buffer pointer into a/x
-
-        ldy     #RAMBANK
-        sty     IndReg
-
-        ldy     #$00
-
-        rts
-
-; ------------------------------------------------------------------------
-; copyfrom
-
-.data
-copyfrom:
-        lda     (ptr1),y
-copyfrom_buf = * + 1
-        sta     $0000,y
-        iny
-        dex
-        bne     copyfrom
-        rts
-
-; ------------------------------------------------------------------------
-; copyto
-
-.data
-copyto:
-copyto_buf = * + 1
-        lda     $0000,y
-        sta     (ptr1),y
-        iny
-        dex
-        bne     copyto
-        rts
-
diff --git a/libsrc/cbm610/extzp.inc b/libsrc/cbm610/extzp.inc
deleted file mode 100644 (file)
index 59eb824..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-20
-;
-; Additional zero page locations for the CBM610.
-;
-
-; ------------------------------------------------------------------------
-
-        .globalzp       sysp1, sysp3, crtc, sid, ipccia, cia, acia, tpi1, tpi2
-        .globalzp       ktab1, ktab2, ktab3, ktab4
-
-        .globalzp       sysp0, time, segsave, ktmp, CURS_X, CURS_Y, RVS, DEVNUM
-        .globalzp       config, CharPtr, keyidx, keybuf, keyscanbuf, keysave
-        .globalzp       modkey, norkey, graphmode, lastidx, rptdelay, rptcount
-
-
diff --git a/libsrc/cbm610/extzp.s b/libsrc/cbm610/extzp.s
deleted file mode 100644 (file)
index 0adda54..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-20
-;
-; Additional zero page locations for the CBM610.
-; NOTE: This file is actually linked to an application with its full contents,
-; so the program comes up with the values given in this file.
-;
-
-; ------------------------------------------------------------------------
-
-        .include        "extzp.inc"
-
-.segment        "EXTZP" : zeropage
-
-; The following values get initialized from a table in the startup code.
-; While this sounds crazy, it has reasons that have to do with modules (and
-; we have the space anyway). So when changing anything, be sure to adjust the
-; initializer table
-sysp1:          .word   $0000
-sysp3:          .word   $0000
-crtc:           .word   $0000
-sid:            .word   $0000
-ipccia:         .word   $0000
-cia:            .word   $0000
-acia:           .word   $0000
-tpi1:           .word   $0000
-tpi2:           .word   $0000
-ktab1:          .word   $0000
-ktab2:          .word   $0000
-ktab3:          .word   $0000
-ktab4:          .word   $0000
-
-sysp0:          .word   $0000
-time:           .dword  $0000
-segsave:        .byte   0
-ktmp:           .byte   0
-CURS_X:         .byte   0
-CURS_Y:         .byte   0
-RVS:            .byte   0
-DEVNUM:         .byte   0
-config:         .byte   0
-CharPtr:        .word   0
-; Stuff for our own kbd polling routine
-keyidx:         .byte   0               ; Number of keys in keyboard buffer
-keybuf:         .res    10              ; Keyboard buffer
-keyscanbuf:     .byte   0
-keysave:        .byte   0
-modkey:         .byte   0
-norkey:         .byte   0
-graphmode:      .byte   0
-lastidx:        .byte   0
-rptdelay:       .byte   0
-rptcount:       .byte   0
-
-
-
diff --git a/libsrc/cbm610/get_tv.s b/libsrc/cbm610/get_tv.s
deleted file mode 100644 (file)
index 50f909a..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Stefan Haubenthal, 2009-08-02
-;
-; unsigned char get_tv (void);
-; /* Return the video mode the machine is using */
-;
-
-        .include        "get_tv.inc"
-
-
-;--------------------------------------------------------------------------
-; _get_tv
-
-.proc   _get_tv
-
-        lda     #<TV::OTHER     ; CRTC
-        ldx     #>TV::OTHER
-        rts
-
-.endproc
diff --git a/libsrc/cbm610/irq.s b/libsrc/cbm610/irq.s
deleted file mode 100644 (file)
index 7003fa5..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-;
-; IRQ handling (CBM 600/700 version)
-;
-
-        .export         initirq, doneirq
-
-initirq:
-doneirq:
-        rts
diff --git a/libsrc/cbm610/kbhit.s b/libsrc/cbm610/kbhit.s
deleted file mode 100644 (file)
index dc66a39..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; unsigned char kbhit (void);
-;
-
-        .export         _kbhit
-        .import         keyidx: zp
-
-
-.proc   _kbhit
-
-        ldx     #0              ; High byte of return is always zero
-        lda     keyidx          ; Get number of characters
-        beq     L9
-        lda     #1
-L9:     rts
-
-.endproc
-
-
-
diff --git a/libsrc/cbm610/kclose.s b/libsrc/cbm610/kclose.s
deleted file mode 100644 (file)
index a262313..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-21
-;
-; CLOSE kernal call.
-;
-; NOTE: The CLOSE system call in the CBM610 kernal will only remove the file
-; entry and not close the file on IEC if the carry is clear on entry. To make
-; this somewhat compatible with the C64, set the carry before jumping to the
-; kernal.
-
-        .export         CLOSE
-
-.proc   CLOSE
-
-        sec
-        jmp     $FFC3
-
-.endproc
-
-
-
diff --git a/libsrc/cbm610/kernal.s b/libsrc/cbm610/kernal.s
deleted file mode 100644 (file)
index 9ea4f0e..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-20
-;
-; CBM610 kernal functions
-;
-
-        .export         CINT
-        .export         IOINIT
-        .export         RAMTAS
-        .export         RESTOR
-        .export         VECTOR
-        .export         SETMSG
-        .export         SECOND
-        .export         TKSA
-        .export         MEMTOP
-        .export         MEMBOT
-        .export         SCNKEY
-        .export         SETTMO
-        .export         ACPTR
-        .export         CIOUT
-        .export         UNTLK
-        .export         UNLSN
-        .export         LISTEN
-        .export         TALK
-        .export         SETLFS
-        .export         CHKIN
-        .export         CKOUT
-        .export         CLRCH
-        .export         BASIN
-        .export         BSOUT
-        .export         LOAD
-        .export         SAVE
-        .export         STOP
-        .export         GETIN
-        .export         CLALL
-        .export         PLOT
-
-
-;-----------------------------------------------------------------------------
-; All functions are available in the kernal jump table. Functions having
-; replacements (usually short ones where the overhead of the cross bank call
-; is not worth the trouble) are commented out.
-
-CINT            = $FF81
-IOINIT          = $FF84
-RAMTAS          = $FF87
-RESTOR          = $FF8A
-VECTOR          = $FF8D
-SETMSG          = $FF90
-SECOND          = $FF93
-TKSA            = $FF96
-MEMTOP          = $FF99
-MEMBOT          = $FF9C
-SCNKEY          = $FF9F
-SETTMO          = $FFA2
-ACPTR           = $FFA5
-CIOUT           = $FFA8
-UNTLK           = $FFAB
-UNLSN           = $FFAE
-LISTEN          = $FFB1
-TALK            = $FFB4
-;READST         = $FFB7
-SETLFS          = $FFBA
-;SETNAM         = $FFBD
-;OPEN           = $FFC0
-;CLOSE          = $FFC3
-CHKIN           = $FFC6
-CKOUT           = $FFC9
-CLRCH           = $FFCC
-BASIN           = $FFCF
-BSOUT           = $FFD2
-LOAD            = $FFD5
-SAVE            = $FFD8
-;SETTIM         = $FFDB
-;RDTIM          = $FFDE
-STOP            = $FFE1
-GETIN           = $FFE4
-CLALL           = $FFE7
-;UDTIM          = $FFEA
-;SCREEN         = $FFED
-PLOT            = $FFF0
-;IOBASE         = $FFF3
-
diff --git a/libsrc/cbm610/kiobase.s b/libsrc/cbm610/kiobase.s
deleted file mode 100644 (file)
index 55e5ba5..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-19
-;
-; IOBASE kernal call
-;
-
-        .export         IOBASE
-        .import         cia : zeropage
-
-
-
-.proc   IOBASE
-
-        ldx     cia
-        ldy     cia+1
-        rts
-
-.endproc
-
diff --git a/libsrc/cbm610/kopen.s b/libsrc/cbm610/kopen.s
deleted file mode 100644 (file)
index 0259223..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-20
-;
-; OPEN kernal call.
-;
-; NOTE: The OPEN system call in the CBM610 kernal is different from the 
-; standard. It evaluates the carry flag and does a normal open if carry clear
-; and some strange things (output sa 15 + name on IEC) if carry set. To be
-; compatible with our CBM file stuff, we have to clear the carry before 
-; calling the real OPEN.
-
-        .export         OPEN
-
-.proc   OPEN
-
-        clc
-        jmp     $FFC0
-
-.endproc
-
-
-
diff --git a/libsrc/cbm610/krdtim.s b/libsrc/cbm610/krdtim.s
deleted file mode 100644 (file)
index 241c638..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-19
-;
-; RDTIM kernal call
-;
-
-        .export         RDTIM
-        .import         time : zeropage
-
-
-.proc   RDTIM
-
-        sei
-        lda     time+0
-        ldx     time+1
-        ldy     time+2
-        cli
-        rts
-
-.endproc
-
diff --git a/libsrc/cbm610/kreadst.s b/libsrc/cbm610/kreadst.s
deleted file mode 100644 (file)
index d9bbf7c..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-19
-;
-; READST kernal call
-;
-
-        .export         READST
-
-        .import         sys_bank, restore_bank
-        .import         sysp0: zp, ktmp: zp
-
-        .include        "cbm610.inc"
-
-
-.proc   READST
-
-        jsr     sys_bank
-        sty     ktmp                    ; Save Y register
-        ldy     #$9C                    ; STATUS
-        lda     (sysp0),y               ; Load STATUS from system bank
-        ldy     ktmp
-        jmp     restore_bank            ; Will set condition codes on A
-
-.endproc
-
-
diff --git a/libsrc/cbm610/kscnkey.s b/libsrc/cbm610/kscnkey.s
deleted file mode 100644 (file)
index 23909b7..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-;
-; Ullrich von Bassewitz, 28.09.1998
-;
-; Keyboard polling stuff for the 610.
-;
-
-        .export         scnkey
-        .importzp       tpi2, ktab1, ktab2, ktab3, ktab4
-        .importzp       keyidx, keybuf, keyscanbuf, keysave, modkey, norkey
-        .importzp       graphmode, lastidx, rptdelay, rptcount
-
-        .include        "cbm610.inc"
-
-.proc   scnkey
-
-        lda     #$FF
-        sta     modkey
-        sta     norkey
-        lda     #$00
-        sta     keyscanbuf
-        ldy     #TPI::PRB
-        sta     (tpi2),y
-        ldy     #TPI::PRA
-        sta     (tpi2),y
-        jsr     Poll
-        and     #$3F
-        eor     #$3F
-        bne     L1
-        jmp     NoKey
-
-L1:     lda     #$FF
-        ldy     #TPI::PRA
-        sta     (tpi2),y
-        asl     a
-        ldy     #TPI::PRB
-        sta     (tpi2),y
-        jsr     Poll
-        pha
-        sta     modkey
-        ora     #$30
-        bne     L3              ; Branch always
-
-L2:     jsr     Poll
-L3:     ldx     #$05
-        ldy     #$00
-L4:     lsr     a
-        bcc     L5
-        inc     keyscanbuf
-        dex
-        bpl     L4
-        sec
-        ldy     #TPI::PRB
-        lda     (tpi2),y
-        rol     a
-        sta     (tpi2),y
-        ldy     #TPI::PRA
-        lda     (tpi2),y
-        rol     a
-        sta     (tpi2),y
-        bcs     L2
-        pla
-        bcc     NoKey           ; Branch always
-
-L5:     ldy     keyscanbuf
-        sty     norkey
-        pla
-        asl     a
-        asl     a
-        asl     a
-        bcc     L6
-        bmi     L7
-        lda     (ktab2),y               ; Shifted normal key
-        ldx     graphmode
-        beq     L8
-        lda     (ktab3),y               ; Shifted key in graph mode
-        bne     L8
-
-L6:     lda     (ktab4),y               ; Key with ctrl pressed
-        bne     L8
-L7:     lda     (ktab1),y               ; Normal key
-L8:     tax
-        cpx     #$FF                    ; Valid key?
-        beq     Done
-        cpy     lastidx
-        beq     Repeat
-        ldx     #$13
-        stx     rptdelay
-        ldx     keyidx
-        cpx     #$09
-        beq     NoKey
-        cpy     #$59
-        bne     PutKey
-        cpx     #$08
-        beq     NoKey
-        sta     keybuf,x
-        inx
-        bne     PutKey
-
-NoKey:  ldy     #$FF
-Done:   sty     lastidx
-End:    lda     #$7F
-        ldy     #TPI::PRA
-        sta     (tpi2),y
-        ldy     #TPI::PRB
-        lda     #$FF
-        sta     (tpi2),y
-        rts
-
-Repeat: dec     rptdelay
-        bpl     End
-        inc     rptdelay
-        dec     rptcount
-        bpl     End
-        inc     rptcount
-        ldx     keyidx
-        bne     End
-
-PutKey: sta     keybuf,x
-        inx
-        stx     keyidx
-        ldx     #$03
-        stx     rptcount
-        bne     Done
-
-.endproc
-
-; Poll the keyboard port until it's stable
-; This code goes into page 2, since it is included in every program and
-; there's space left in p2
-
-.segment        "PAGE2"
-
-.proc   Poll
-        ldy     #TPI::PRC
-L1:     lda     (tpi2),y
-        sta     keysave
-        lda     (tpi2),y
-        cmp     keysave
-        bne     L1
-        rts
-.endproc
-
-
-
-
diff --git a/libsrc/cbm610/kscreen.s b/libsrc/cbm610/kscreen.s
deleted file mode 100644 (file)
index fab55b6..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-19
-;
-; SCREEN kernal call
-;
-
-        .export         SCREEN
-
-
-.proc   SCREEN
-
-        ldx     #80             ; Columns
-        ldy     #25             ; Lines
-        rts
-
-.endproc
diff --git a/libsrc/cbm610/ksetnam.s b/libsrc/cbm610/ksetnam.s
deleted file mode 100644 (file)
index ab5c6d7..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-18
-;
-; SETNAM kernal call.
-;
-; NOTE: The routine does not work like that in the CBM610 kernal (which works
-; different than that on all other CBMs). Instead, it works like on all other
-; Commodore machines. No segment has to be passed, the current segment is
-; assumed.
-
-        .export         SETNAM
-
-        .import         sys_bank, restore_bank
-        .import         sysp0: zp, ktmp: zp
-                                                  
-        .include        "cbm610.inc"
-
-.proc   SETNAM
-
-        pha
-        jsr     sys_bank
-        sty     ktmp
-
-        txa
-        ldy     #$90                    ; FNAM
-        sta     (sysp0),y
-
-        lda     ktmp
-        iny
-        sta     (sysp0),y
-
-        lda     ExecReg                 ; Assume name is always in this segment
-        ldy     #$92                    ; FNAM_SEG
-        sta     (sysp0),y
-
-        ldy     #$9D                    ; FNAM_LEN
-        pla
-        sta     (sysp0),y
-        ldy     ktmp
-        jmp     restore_bank
-
-.endproc
-
-
-
diff --git a/libsrc/cbm610/ksettim.s b/libsrc/cbm610/ksettim.s
deleted file mode 100644 (file)
index 69f01b4..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-19
-;
-; SETTIM kernal call
-;
-
-        .export         SETTIM
-        .import         time : zeropage
-
-
-.proc   SETTIM
-
-        sei
-        sta     time+0
-        stx     time+1
-        sty     time+2
-        cli
-        rts
-
-.endproc
-
diff --git a/libsrc/cbm610/kudtim.s b/libsrc/cbm610/kudtim.s
deleted file mode 100644 (file)
index 6862787..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-21
-;
-; udtim routine for the 610. We will not check for the stop key here, since
-; C programs will not use it.
-;                                  
-
-        .export         UDTIM
-        .import         time: zp
-
-.proc   UDTIM
-
-        inc     time
-        bne     L9
-        inc     time+1
-        bne     L9
-        inc     time+2
-        bne     L9
-        inc     time+3
-L9:     rts
-
-.endproc
-
diff --git a/libsrc/cbm610/libref.s b/libsrc/cbm610/libref.s
deleted file mode 100644 (file)
index 9c6994a..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-;
-; Oliver Schmidt, 2013-05-31
-;
-
-        .export         em_libref, ser_libref
-        .import         _exit
-
-em_libref       := _exit
-ser_libref      := _exit
diff --git a/libsrc/cbm610/mainargs.s b/libsrc/cbm610/mainargs.s
deleted file mode 100644 (file)
index 9388eac..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-; mainargs.s
-;
-; 2003-03-07, Ullrich von Bassewitz,
-;   based on code from Stefan A. Haubenthal, <polluks@web.de>
-; 2005-02-26, Ullrich von Bassewitz
-; 2014-09-10, Greg King
-;
-; Scan a group of arguments that are in BASIC's input-buffer.
-; Build an array that points to the beginning of each argument.
-; Send, to main(), that array and the count of the arguments.
-;
-; Command-lines look like these lines:
-;
-; run
-; run : rem
-; run:rem arg1 " arg 2 is quoted "  arg3 "" arg5
-;
-; "run" and "rem" are entokenned; the args. are not.  Leading and trailing
-; spaces outside of quotes are ignored.
-;
-; TO-DO:
-; - The "file-name" might be a path-name; don't copy the directory-components.
-; - Add a control-character quoting mechanism.
-
-        .constructor    initmainargs, 24
-        .import         __argc, __argv
-        .import         sys_bank, restore_bank
-        .import         sysp0:zp, ptr1:zp
-
-        .include        "cbm610.inc"
-        .macpack        generic
-
-
-
-MAXARGS  = 10                   ; Maximum number of arguments allowed
-REM      = $8f                  ; BASIC token-code
-NAME_LEN = 16                   ; maximum length of command-name
-
-; Get possible command-line arguments. Goes into the special INIT segment,
-; which may be reused after the startup code is run.
-;
-.segment        "INIT"
-
-initmainargs:
-
-; Assume that the program was loaded, a moment ago, by the traditional LOAD
-; statement.  Save the "most-recent filename" as argument #0.
-; Because the buffer, that we're copying into, was zeroed out,
-; we don't need to add a NUL character.
-;
-        jsr     sys_bank
-        ldy     #FNAM
-        lda     (sysp0),y       ; Get file-name pointer from system bank
-        sta     ptr1
-        iny
-        lda     (sysp0),y
-        sta     ptr1+1
-        iny                     ; FNAM_BANK
-        lda     (sysp0),y
-        tax
-        ldy     #FNAM_LEN
-        lda     (sysp0),y
-        tay
-        stx     IndReg          ; Look for name in correct bank
-        cpy     #NAME_LEN + 1
-        blt     L1
-        ldy     #NAME_LEN - 1   ; limit the length
-L0:     lda     (ptr1),y
-        sta     name,y
-L1:     dey
-        bpl     L0
-        jsr     restore_bank
-        inc     __argc          ; argc always is equal to at least 1
-
-; Find a "rem" token.
-;
-        ldx     #0
-L2:     lda     BASIC_BUF,x
-        bze     done            ; no "rem," no args.
-        inx
-        cmp     #REM
-        bne     L2
-        ldy     #1 * 2
-
-; Find the next argument.
-;
-next:   lda     BASIC_BUF,x
-        bze     done            ; End of line reached
-        inx
-        cmp     #' '            ; Skip leading spaces
-        beq     next            ;
-
-; Found start of next argument. We've incremented the pointer in X already, so
-; it points to the second character of the argument. That is useful because we
-; will check now for a quoted argument; in which case, we will have to skip that
-; first character.
-;
-found:  cmp     #'"'            ; Is the argument quoted?
-        beq     setterm         ; Jump if so
-        dex                     ; Reset pointer to first argument character
-        lda     #' '            ; A space ends the argument
-setterm:sta     term            ; Set end-of-argument marker
-
-; Now, store a pointer to the argument into the next slot.
-;
-        txa                     ; Get low byte
-        add     #<BASIC_BUF
-        sta     argv,y          ; argv[y]= &arg
-        lda     #>$0000
-        adc     #>BASIC_BUF
-        sta     argv+1,y
-        iny
-        iny
-        inc     __argc          ; Found another arg
-
-; Search for the end of the argument.
-;
-argloop:lda     BASIC_BUF,x
-        bze     done
-        inx
-        cmp     term
-        bne     argloop
-
-; We've found the end of the argument. X points one character behind it, and
-; A contains the terminating character. To make the argument a valid C string,
-; replace the terminating character by a zero.
-;
-        lda     #$00
-        sta     BASIC_BUF-1,x
-
-; Check if the maximum number of command-line arguments is reached. If not,
-; parse the next one.
-;
-        lda     __argc          ; Get low byte of argument count
-        cmp     #MAXARGS        ; Maximum number of arguments reached?
-        blt     next            ; Parse next one if not
-
-; (The last vector in argv[] already is NULL.)
-;
-done:   lda     #<argv
-        ldx     #>argv
-        sta     __argv
-        stx     __argv + 1
-        rts
-
-; These arrays are zeroed before initmainargs is called.
-; char  name[16+1];
-; char* argv[MAXARGS+1]={name};
-;
-.bss
-term:   .res    1
-name:   .res    NAME_LEN + 1
-
-.data
-argv:   .addr   name
-        .res    MAXARGS * 2, $00
diff --git a/libsrc/cbm610/peeksys.s b/libsrc/cbm610/peeksys.s
deleted file mode 100644 (file)
index face702..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-;
-; Ullrich von Bassewitz, 14.09.2001
-;
-
-        .export         _peekbsys, _peekwsys
-        .importzp       ptr1
-
-        .include        "cbm610.inc"
-
-
-; ------------------------------------------------------------------------
-; unsigned char __fastcall__ peekbsys (unsigned addr);
-
-.proc   _peekbsys
-
-        sta     ptr1            ; Store argument pointer
-        stx     ptr1+1
-        ldx     IndReg
-        lda     #$0F
-        sta     IndReg
-        ldy     #$00
-        lda     (ptr1),y
-        stx     IndReg
-        ldx     #$00            ; Extend to word
-        rts
-
-.endproc
-
-; ------------------------------------------------------------------------
-; unsigned __fastcall__ peekwsys (unsigned addr);
-
-.proc   _peekwsys
-
-        sta     ptr1            ; Store argument pointer
-        stx     ptr1+1
-        ldx     IndReg
-        lda     #$0F
-        sta     IndReg
-        ldy     #$00
-        lda     (ptr1),y        ; Get low byte
-        pha
-        iny
-        lda     (ptr1),y        ; Get high byte
-        stx     IndReg
-        tax                     ; High byte -> X
-        pla                     ; Low byte -> A
-        rts
-
-.endproc
-
diff --git a/libsrc/cbm610/pokesys.s b/libsrc/cbm610/pokesys.s
deleted file mode 100644 (file)
index fa690fb..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-;
-; Ullrich von Bassewitz, 29.09.1998
-;
-; void pokebsys (unsigned Addr, unsigned char Val);
-; void pokewsys (unsigned Addr, unsigned Val);
-
-        .export         _pokebsys, _pokewsys
-        .import         popsreg
-        .importzp       sreg, tmp1
-
-        .include        "cbm610.inc"
-
-
-_pokebsys:
-        jsr     popsreg         ; Get the address
-        ldx     IndReg
-        ldy     #$0F
-        sty     IndReg          ; Switch to the system bank
-        ldy     #$00
-        sta     (sreg),y
-        stx     IndReg
-        rts
-
-_pokewsys:
-        stx     tmp1            ; Save high byte
-        jsr     popsreg         ; Get the address
-        ldx     IndReg
-        ldy     #$0F
-        sty     IndReg          ; Switch to the system bank
-        ldy     #$00
-        sta     (sreg),y
-        iny
-        lda     tmp1
-        sta     (sreg),y
-        stx     IndReg
-        rts
-
-
diff --git a/libsrc/cbm610/randomize.s b/libsrc/cbm610/randomize.s
deleted file mode 100644 (file)
index d313baa..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; 2002-11-05, Ullrich von Bassewitz
-; 2015-09-11, Greg King
-;
-; void _randomize (void);
-; /* Initialize the random number generator */
-;
-
-        .export         __randomize
-        .import         _srand
-        .importzp       time
-
-__randomize:               
-        ldx     time+2          ; Use 50/60HZ clock
-        lda     time+1
-        jmp     _srand          ; Initialize generator
-
diff --git a/libsrc/cbm610/revers.s b/libsrc/cbm610/revers.s
deleted file mode 100644 (file)
index eb44f02..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; unsigned char revers (unsigned char onoff);
-;
-
-        .export         _revers
-
-        .import         RVS: zp
-
-        .include        "cbm610.inc"
-                               
-
-.proc   _revers
-
-        ldx     #$00            ; Assume revers off
-        tay                     ; Test onoff
-        beq     L1              ; Jump if off
-        ldx     #$80            ; Load on value
-        ldy     #$00            ; Assume old value is zero
-L1:     lda     RVS             ; Load old value
-        stx     RVS             ; Set new value
-        beq     L2              ; Jump if old value zero
-        iny                     ; Make old value = 1
-L2:     ldx     #$00            ; Load high byte of result
-        tya                     ; Load low byte, set CC
-        rts
-
-.endproc
-
diff --git a/libsrc/cbm610/ser/cbm610-std.s b/libsrc/cbm610/ser/cbm610-std.s
deleted file mode 100644 (file)
index 1b2d38a..0000000
+++ /dev/null
@@ -1,439 +0,0 @@
-;
-; Serial driver for the builtin 6551 ACIA of the Commodore 610.
-;
-; Ullrich von Bassewitz, 2003-12-18
-;
-; The driver is based on the cc65 rs232 module, which in turn is based on
-; Craig Bruce device driver for the Switftlink/Turbo-232.
-;
-; SwiftLink/Turbo-232 v0.90 device driver, by Craig Bruce, 14-Apr-1998.
-;
-; This software is Public Domain.  It is in Buddy assembler format.
-;
-; This device driver uses the SwiftLink RS-232 Serial Cartridge, available from
-; Creative Micro Designs, Inc, and also supports the extensions of the Turbo232
-; Serial Cartridge.  Both devices are based on the 6551 ACIA chip.  It also
-; supports the "hacked" SwiftLink with a 1.8432 MHz crystal.
-;
-; The code assumes that the kernal + I/O are in context.  On the C128, call
-; it from Bank 15.  On the C64, don't flip out the Kernal unless a suitable
-; NMI catcher is put into the RAM under then Kernal.  For the SuperCPU, the
-; interrupt handling assumes that the 65816 is in 6502-emulation mode.
-;
-
-        .include        "zeropage.inc"
-        .include        "../extzp.inc"
-        .include        "ser-kernel.inc"
-        .include        "ser-error.inc"
-        .include        "cbm610.inc"
-
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _cbm610_std_ser
-
-; Driver signature
-
-        .byte   $73, $65, $72           ; "ser"
-        .byte   SER_API_VERSION         ; Serial API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .word   INSTALL
-        .word   UNINSTALL
-        .word   OPEN
-        .word   CLOSE
-        .word   GET
-        .word   PUT
-        .word   STATUS
-        .word   IOCTL
-        .word   IRQ
-
-;----------------------------------------------------------------------------
-;
-; Global variables
-;
-
-.bss
-RecvHead:       .res    1       ; Head of receive buffer
-RecvTail:       .res    1       ; Tail of receive buffer
-RecvFreeCnt:    .res    1       ; Number of bytes in receive buffer
-SendHead:       .res    1       ; Head of send buffer
-SendTail:       .res    1       ; Tail of send buffer
-SendFreeCnt:    .res    1       ; Number of bytes in send buffer
-
-Stopped:        .res    1       ; Flow-stopped flag
-RtsOff:         .res    1       ;
-
-; Send and receive buffers: 256 bytes each
-RecvBuf:        .res    256
-SendBuf:        .res    256
-
-.rodata
-
-; Tables used to translate RS232 params into register values
-
-BaudTable:                      ; bit7 = 1 means setting is invalid
-        .byte   $FF             ; SER_BAUD_45_5
-        .byte   $01             ; SER_BAUD_50
-        .byte   $02             ; SER_BAUD_75
-        .byte   $03             ; SER_BAUD_110
-        .byte   $04             ; SER_BAUD_134_5
-        .byte   $05             ; SER_BAUD_150
-        .byte   $06             ; SER_BAUD_300
-        .byte   $07             ; SER_BAUD_600
-        .byte   $08             ; SER_BAUD_1200
-        .byte   $09             ; SER_BAUD_1800
-        .byte   $0A             ; SER_BAUD_2400
-        .byte   $0B             ; SER_BAUD_3600
-        .byte   $0C             ; SER_BAUD_4800
-        .byte   $0D             ; SER_BAUD_7200
-        .byte   $0E             ; SER_BAUD_9600
-        .byte   $0F             ; SER_BAUD_19200
-        .byte   $FF             ; SER_BAUD_38400
-        .byte   $FF             ; SER_BAUD_57600
-        .byte   $FF             ; SER_BAUD_115200
-        .byte   $FF             ; SER_BAUD_230400
-
-BitTable:
-        .byte   $60             ; SER_BITS_5
-        .byte   $40             ; SER_BITS_6
-        .byte   $20             ; SER_BITS_7
-        .byte   $00             ; SER_BITS_8
-
-StopTable:
-        .byte   $00             ; SER_STOP_1
-        .byte   $80             ; SER_STOP_2
-
-ParityTable:
-        .byte   $00             ; SER_PAR_NONE
-        .byte   $20             ; SER_PAR_ODD
-        .byte   $60             ; SER_PAR_EVEN
-        .byte   $A0             ; SER_PAR_MARK
-        .byte   $E0             ; SER_PAR_SPACE
-
-.code
-
-;----------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present.
-; Must return an SER_ERR_xx code in a/x.
-;
-; Since we don't have to manage the IRQ vector on the Plus/4, this is actually
-; the same as:
-;
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Must return an SER_ERR_xx code in a/x.
-;
-; and:
-;
-; CLOSE: Close the port, disable interrupts and flush the buffer. Called
-; without parameters. Must return an error code in a/x.
-;
-
-INSTALL:
-UNINSTALL:
-CLOSE:
-
-; Deactivate DTR and disable 6551 interrupts
-
-        lda     #%00001010
-        jsr     write_cmd
-
-; Done, return an error code
-
-        lda     #<SER_ERR_OK
-        tax                     ; A is zero
-        rts
-
-;----------------------------------------------------------------------------
-; PARAMS routine. A pointer to a ser_params structure is passed in ptr1.
-; Must return an SER_ERR_xx code in a/x.
-
-OPEN:
-
-; Check if the handshake setting is valid
-
-        ldy     #SER_PARAMS::HANDSHAKE  ; Handshake
-        lda     (ptr1),y
-        cmp     #SER_HS_HW              ; This is all we support
-        bne     InvParam
-
-; Initialize buffers
-
-        ldx     #0
-        stx     Stopped
-        stx     RecvHead
-        stx     RecvTail
-        stx     SendHead
-        stx     SendTail
-        dex                             ; X = 255
-        stx     RecvFreeCnt
-        stx     SendFreeCnt
-
-; Set the value for the control register, which contains stop bits, word
-; length and the baud rate.
-
-        ldy     #SER_PARAMS::BAUDRATE
-        lda     (ptr1),y                ; Baudrate index
-        tay
-        lda     BaudTable,y             ; Get 6551 value
-        bmi     InvBaud                 ; Branch if rate not supported
-        sta     tmp1
-
-        ldy     #SER_PARAMS::DATABITS   ; Databits
-        lda     (ptr1),y
-        tay
-        lda     BitTable,y
-        ora     tmp1
-        sta     tmp1
-
-        ldy     #SER_PARAMS::STOPBITS   ; Stopbits
-        lda     (ptr1),y
-        tay
-        lda     StopTable,y
-        ora     tmp1
-        ora     #%00010000              ; Receiver clock source = baudrate
-        ldy     #ACIA::CTRL
-        jsr     write
-
-; Set the value for the command register. We remember the base value in
-; RtsOff, since we will have to manipulate ACIA_CMD often.
-
-        ldy     #SER_PARAMS::PARITY     ; Parity
-        lda     (ptr1),y
-        tay
-        lda     ParityTable,y
-        ora     #%00000001              ; DTR active
-        sta     RtsOff
-        ora     #%00001000              ; Enable receive interrupts
-        jsr     write_cmd
-
-; Done
-
-        lda     #<SER_ERR_OK
-        tax                             ; A is zero
-        rts
-
-; Invalid parameter
-
-InvParam:
-        lda     #<SER_ERR_INIT_FAILED
-        ldx     #>SER_ERR_INIT_FAILED
-        rts
-
-; Baud rate not available
-
-InvBaud:
-        lda     #<SER_ERR_BAUD_UNAVAIL
-        ldx     #>SER_ERR_BAUD_UNAVAIL
-        rts
-
-;----------------------------------------------------------------------------
-; GET: Will fetch a character from the receive buffer and store it into the
-; variable pointer to by ptr1. If no data is available, SER_ERR_NO_DATA is
-; return.
-;
-
-GET:    ldx     SendFreeCnt             ; Send data if necessary
-        inx                             ; X == $FF?
-        beq     @L1
-        lda     #$00
-        jsr     TryToSend
-
-; Check for buffer empty
-
-@L1:    lda     RecvFreeCnt
-        cmp     #$ff
-        bne     @L2
-        lda     #<SER_ERR_NO_DATA
-        ldx     #>SER_ERR_NO_DATA
-        rts
-
-; Check for flow stopped & enough free: release flow control
-
-@L2:    ldx     Stopped
-        beq     @L3
-        cmp     #63
-        bcc     @L3
-        lda     #$00
-        sta     Stopped
-        lda     RtsOff
-        ora     #%00001000
-        jsr     write_cmd
-
-; Get byte from buffer
-
-@L3:    ldx     RecvHead
-        lda     RecvBuf,x
-        inc     RecvHead
-        inc     RecvFreeCnt
-        ldx     #$00
-        sta     (ptr1,x)
-        txa                             ; Return code = 0
-        rts
-
-;----------------------------------------------------------------------------
-; PUT: Output character in A.
-; Must return an error code in a/x.
-;
-
-PUT:
-
-; Try to send
-
-        ldx     SendFreeCnt
-        inx                             ; X = $ff?
-        beq     @L2
-        pha
-        lda     #$00
-        jsr     TryToSend
-        pla
-
-; Put byte into send buffer & send
-
-@L2:    ldx     SendFreeCnt
-        bne     @L3
-        lda     #<SER_ERR_OVERFLOW      ; X is already zero
-        rts
-
-@L3:    ldx     SendTail
-        sta     SendBuf,x
-        inc     SendTail
-        dec     SendFreeCnt
-        lda     #$ff
-        jsr     TryToSend
-        lda     #<SER_ERR_OK
-        tax
-        rts
-
-;----------------------------------------------------------------------------
-; STATUS: Return the status in the variable pointed to by ptr1.
-; Must return an error code in a/x.
-;
-
-STATUS: lda     #$0F
-        sta     IndReg
-        ldy     #ACIA::STATUS
-        lda     (acia),y
-        ldx     #0
-        sta     (ptr1,x)
-        lda     IndReg
-        sta     ExecReg
-        txa                             ; SER_ERR_OK
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
-; specific data in ptr1, and the ioctl code in A.
-; Must return an error code in a/x.
-;
-
-IOCTL:  lda     #<SER_ERR_INV_IOCTL     ; We don't support ioclts for now
-        ldx     #>SER_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; IRQ: Called from the builtin runtime IRQ handler as a subroutine. All
-; registers are already save, no parameters are passed, but the carry flag
-; is clear on entry. The routine must return with carry set if the interrupt
-; was handled, otherwise with carry clear.
-;
-
-IRQ:    lda     #$0F
-        sta     IndReg          ; Switch to the system bank
-        ldy     #ACIA::STATUS
-        lda     (acia),y        ; Check ACIA status for receive interrupt
-        and     #$08
-        beq     @L9             ; Jump if no ACIA interrupt (carry still clear)
-        ldy     #ACIA::DATA
-        lda     (acia),y        ; Get byte from ACIA
-        ldx     RecvFreeCnt     ; Check if we have free space left
-        beq     @L1             ; Jump if no space in receive buffer
-        ldy     RecvTail        ; Load buffer pointer
-        sta     RecvBuf,y       ; Store received byte in buffer
-        inc     RecvTail        ; Increment buffer pointer
-        dec     RecvFreeCnt     ; Decrement free space counter
-        cpx     #33             ; Check for buffer space low
-        bcs     @L9             ; Assert flow control if buffer space low
-
-; Assert flow control if buffer space too low
-
-@L1:    lda     RtsOff
-        ldy     #ACIA::CMD
-        sta     (acia),y
-        sta     Stopped
-        sec                     ; Interrupt handled
-
-; Done, switch back to the execution segment
-
-@L9:    lda     ExecReg
-        sta     IndReg
-        rts
-
-;----------------------------------------------------------------------------
-; Try to send a byte. Internal routine. A = TryHard
-
-.proc   TryToSend
-
-        sta     tmp1            ; Remember tryHard flag
-        lda     #$0F
-        sta     IndReg          ; Switch to the system bank
-@L0:    lda     SendFreeCnt
-        cmp     #$ff
-        beq     @L3             ; Bail out
-
-; Check for flow stopped
-
-@L1:    lda     Stopped
-        bne     @L3             ; Bail out
-
-; Check that swiftlink is ready to send
-
-@L2:    ldy     #ACIA::STATUS
-        lda     (acia),y
-        and     #$10
-        bne     @L4
-        bit     tmp1            ; Keep trying if must try hard
-        bmi     @L0
-
-; Switch back the bank and return
-
-@L3:    lda     ExecReg
-        sta     IndReg
-        rts
-
-; Send byte and try again
-
-@L4:    ldx     SendHead
-        lda     SendBuf,x
-        ldy     #ACIA::DATA
-        sta     (acia),y
-        inc     SendHead
-        inc     SendFreeCnt
-        jmp     @L0
-
-.endproc
-
-
-;----------------------------------------------------------------------------
-; Write to the ACIA changing the indirect segment. Offset is in Y, value in A.
-
-write_cmd:
-        ldy     #ACIA::CMD
-write:  pha
-        lda     #$0F
-        sta     IndReg
-        pla
-        sta     (acia),y
-        lda     ExecReg
-        sta     IndReg
-        rts
-
diff --git a/libsrc/cbm610/systime.s b/libsrc/cbm610/systime.s
deleted file mode 100644 (file)
index be2bedf..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-;
-; Stefan Haubenthal, 2009-07-27
-; Ullrich von Bassewitz, 2009-09-24
-;
-; time_t _systime (void);
-; /* Similar to time(), but:
-; **   - Is not ISO C
-; **   - Does not take the additional pointer
-; **   - Does not set errno when returning -1
-; */
-;
-
-        .include        "time.inc"
-        .include        "cbm610.inc"
-        .include        "extzp.inc"
-
-        .import         sys_bank, restore_bank
-        .importzp       tmp1, tmp2
-
-
-;----------------------------------------------------------------------------
-.code
-
-.proc   __systime
-
-; Switch to the system bank
-
-        jsr     sys_bank
-
-; Read the clock
-
-        ldy     #CIA::TODHR
-        lda     (cia),y
-        bpl     AM
-        and     #%01111111
-        sed
-        clc
-        adc     #$12
-        cld
-AM:     jsr     BCD2dec
-        sta     TM + tm::tm_hour
-        ldy     #CIA::TODMIN
-        lda     (cia),y
-        jsr     BCD2dec
-        sta     TM + tm::tm_min
-        ldy     #CIA::TODSEC
-        lda     (cia),y
-        jsr     BCD2dec
-        sta     TM + tm::tm_sec
-        ldy     #CIA::TOD10
-        lda     (cia),y                 ; Dummy read to unfreeze
-
-; Restore the bank
-
-        jsr     restore_bank
-
-; Convert to a time
-
-        lda     #<TM
-        ldx     #>TM
-        jmp     _mktime
-
-.endproc
-
-;----------------------------------------------------------------------------
-; dec = (((BCD>>4)*10) + (BCD&0xf))
-
-.proc   BCD2dec
-
-        tax
-        and     #%00001111
-        sta     tmp1
-        txa
-        and     #%11110000      ; *16
-        lsr                     ; *8
-        sta     tmp2
-        lsr
-        lsr                     ; *2
-        adc     tmp2            ; = *10
-        adc     tmp1
-        rts
-
-.endproc
-
-;----------------------------------------------------------------------------
-; TM struct with date set to 1970-01-01
-.data
-
-TM:     .word           0       ; tm_sec
-        .word           0       ; tm_min
-        .word           0       ; tm_hour
-        .word           1       ; tm_mday
-        .word           0       ; tm_mon
-        .word           70      ; tm_year
-        .word           0       ; tm_wday
-        .word           0       ; tm_yday
-        .word           0       ; tm_isdst
-
diff --git a/libsrc/cbm610/sysuname.s b/libsrc/cbm610/sysuname.s
deleted file mode 100644 (file)
index 984cb93..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; unsigned char __fastcall__ _sysuname (struct utsname* buf);
-;
-
-        .export         __sysuname, utsdata
-
-        .import         utscopy
-
-        __sysuname = utscopy
-
-;--------------------------------------------------------------------------
-; Data. We define a fixed utsname struct here and just copy it.
-
-.rodata
-
-utsdata:
-        ; sysname
-        .asciiz         "cc65"
-
-        ; nodename
-        .asciiz         ""
-
-        ; release
-        .byte           ((.VERSION >> 8) & $0F) + '0'
-        .byte           '.'
-        .byte           ((.VERSION >> 4) & $0F) + '0'
-        .byte           $00
-
-        ; version
-        .byte           (.VERSION & $0F) + '0'
-        .byte           $00
-
-        ; machine
-        .asciiz         "Commodore 610"
-
-
-
diff --git a/libsrc/common/_afailed.c b/libsrc/common/_afailed.c
deleted file mode 100644 (file)
index 7c6df4a..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-** _afailed.c
-**
-** 1998-06-06, Ullrich von Bassewitz
-** 2015-03-13, Greg King
-*/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-
-
-
-void __fastcall__ _afailed (char* file, unsigned line)
-{
-    fprintf (stderr, "ASSERTION FAILED IN %s(%u)\n", file, line);
-    exit (2);
-}
-
-
-
diff --git a/libsrc/common/_cwd.s b/libsrc/common/_cwd.s
deleted file mode 100644 (file)
index eeda10f..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12, 2005-04-16
-;
-; Place to store the current working directory.
-;
-; __cwd is initialized by a platform specific function named "initcwd" called
-; by the constructor defined in this module.
-;
-
-        .export         __cwd
-        .export         __cwd_buf_size
-        .constructor    cwd_init
-
-        .import         initcwd
-
-        .include        "stdio.inc"
-                                      
-        __cwd_buf_size  = FILENAME_MAX
-
-        cwd_init        := initcwd
-
-.bss
-
-__cwd:  .res    __cwd_buf_size
-
-
-; NOTE: Some of the code working with directories is not able to handle
-; strings longer than 255 chars, so don't make __cwd larger than 256 without
-; checking the other sources.
-
-        .assert __cwd_buf_size < 256, error, "__cwd_buf_size must not be > 255"
-
diff --git a/libsrc/common/_directerrno.s b/libsrc/common/_directerrno.s
deleted file mode 100644 (file)
index 7942471..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; 2003-08-12, Ullrich von Bassewitz
-; 2015-09-24, Greg King
-;
-; Helper function for several high-level file functions.
-;
-
-        .include        "errno.inc"
-
-        .macpack        cpu
-
-; ----------------------------------------------------------------------------
-; int __fastcall__ _directerrno (unsigned char code);
-; /* Set errno to a specific error code, clear _oserror, and return -1. Used
-; ** by the library.
-; */
-
-__directerrno:
-        jsr     __seterrno              ; Set errno (returns with .A = 0)
-        sta     __oserror               ; Clear __oserror
-.if (.cpu .bitand CPU_ISET_65SC02)
-        dec     a
-.else
-        lda     #$FF                    ; Return -1
-.endif
-        tax
-        rts
diff --git a/libsrc/common/_environ.s b/libsrc/common/_environ.s
deleted file mode 100644 (file)
index 6a53f80..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Ullrich von Bassewitz, 2005-04-21
-;
-; extern char** _environ;
-;
-;
-; __environ is a pointer to the environment.
-; __envcount is the number of entries in the environment.
-; __envsize is the size of the allocated array.
-;
-; The maximum number of environment entries is 64. putenv() will set errno
-; to ENOMEM when trying to increase the number beyond this limit.
-;
-
-        .export         __environ, __envcount, __envsize
-        .import         initenv
-        .constructor    env_init
-        
-        env_init := initenv
-                           
-.bss
-
-__environ:
-        .addr   0
-__envcount:
-        .byte   0
-__envsize:
-        .byte   0
-
-
diff --git a/libsrc/common/_fdesc.s b/libsrc/common/_fdesc.s
deleted file mode 100644 (file)
index 4905c01..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-;
-; Ullrich von Bassewitz, 17.06.1998
-;
-; int _fdesc (void);
-; /* Find a free descriptor slot */
-
-
-        .export         __fdesc
-        .import         return0
-
-        .include        "stdio.inc"
-        .include        "_file.inc"
-
-.proc   __fdesc
-
-        ldy     #0
-        lda     #_FOPEN
-Loop:   and     __filetab + _FILE::f_flags,y    ; load flags
-        beq     Found                           ; jump if closed
-.repeat .sizeof(_FILE)
-        iny
-.endrepeat
-        cpy     #(FOPEN_MAX * .sizeof(_FILE))   ; Done?
-        bne     Loop
-
-; File table is full
-
-        jmp     return0
-
-; Free slot found, get address
-
-Found:  tya                     ; Offset
-        clc
-        adc     #<__filetab
-        ldx     #>__filetab     ; High byte
-        bcc     @L1             ; Jump if no overflow
-        inx                     ; Bump high byte
-@L1:    rts
-
-.endproc
-
-
-
diff --git a/libsrc/common/_file.h b/libsrc/common/_file.h
deleted file mode 100644 (file)
index 8cd12c1..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
-** _file.h
-**
-** (C) Copyright 1998, 2002 Ullrich von Bassewitz (uz@cc65.org)
-**
-*/
-
-
-
-#ifndef __FILE_H
-#define __FILE_H
-
-
-
-#include <stdio.h>
-
-
-
-/* Definition of struct _FILE */
-struct _FILE {
-    char            f_fd;
-    char            f_flags;
-    unsigned char   f_pushback;
-};
-
-/* File table. Beware: FOPEN_MAX is hardcoded in the ASM files! */
-extern FILE _filetab[FOPEN_MAX];
-
-/* Flags field */
-#define _FCLOSED        0x00
-#define _FOPEN          0x01
-#define _FEOF           0x02
-#define _FERROR         0x04
-#define _FPUSHBACK      0x08
-
-
-
-FILE* __fastcall__ _fopen (const char* name, const char* mode, FILE* f);
-/* Open the specified file and fill the descriptor values into f */
-
-FILE* _fdesc (void);
-/* Find a free FILE descriptor */
-
-
-
-/* End of _file.h */
-#endif
-
-
-
diff --git a/libsrc/common/_file.s b/libsrc/common/_file.s
deleted file mode 100644 (file)
index db46943..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.05.1998
-;
-; Data for the stdio file stream.
-;
-
-        .export         __filetab
-
-        .include        "stdio.inc"
-        .include        "fcntl.inc"
-        .include        "_file.inc"
-
-;----------------------------------------------------------------------------
-; File data
-
-.data
-
-__filetab:
-        .byte   0, _FOPEN, 0    ; stdin
-        .byte   1, _FOPEN, 0    ; stdout
-        .byte   2, _FOPEN, 0    ; stderr
-.repeat FOPEN_MAX - 3
-        .byte   0, _FCLOSED, 0  ; free slot
-.endrepeat
-
-
-; Standard file descriptors
-
-_stdin:
-        .word   __filetab + (STDIN_FILENO * .sizeof(_FILE))
-
-_stdout:
-        .word   __filetab + (STDOUT_FILENO * .sizeof(_FILE))
-
-_stderr:
-        .word   __filetab + (STDERR_FILENO * .sizeof(_FILE))
-
-
diff --git a/libsrc/common/_fopen.s b/libsrc/common/_fopen.s
deleted file mode 100644 (file)
index 29f1c4c..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; FILE* __fastcall__ _fopen (const char* name, const char* mode, FILE* f);
-; /* Open the specified file and fill the descriptor values into f */
-;
-
-        .export         __fopen
-
-        .import         _open
-        .import         pushax, incsp4, return0
-        .importzp       sp, ptr1
-
-
-        .include        "errno.inc"
-        .include        "fcntl.inc"
-        .include        "_file.inc"
-
-
-; ------------------------------------------------------------------------
-; Code
-
-.proc   __fopen
-
-        sta     file
-        stx     file+1          ; Save f
-
-; Get a pointer to the mode string
-
-        ldy     #1
-        lda     (sp),y
-        sta     ptr1+1
-        dey
-        lda     (sp),y
-        sta     ptr1
-
-; Look at the first character in mode
-
-        ldx     #$00            ; Mode will be in X
-        lda     (ptr1),y        ; Get first char from mode
-        cmp     #'w'
-        bne     @L1
-        ldx     #(O_WRONLY | O_CREAT | O_TRUNC)
-        bne     @L3
-@L1:    cmp     #'r'
-        bne     @L2
-        ldx     #O_RDONLY
-        bne     @L3
-@L2:    cmp     #'a'
-        bne     invmode
-        ldx     #(O_WRONLY | O_CREAT | O_APPEND)
-
-; Look at more chars from the mode string
-
-@L3:    iny                     ; Next char
-        beq     invmode
-        lda     (ptr1),y
-        beq     modeok          ; End of mode string reached
-        cmp     #'+'
-        bne     @L4
-        txa
-        ora     #O_RDWR         ; Always do r/w in addition to anything else
-        tax
-        bne     @L3
-@L4:    cmp     #'b'
-        beq     @L3             ; Binary mode is ignored
-
-; Invalid mode
-
-invmode:
-        lda     #EINVAL
-        jsr     __seterrno      ; Set __errno, returns zero in A
-        tax                     ; a/x = 0
-        jmp     incsp4
-
-; Mode string successfully parsed. Store the binary mode onto the stack in
-; the same place where the mode string pointer was before. Then call open()
-
-modeok: ldy     #$00
-        txa                     ; Mode -> A
-        sta     (sp),y
-        tya
-        iny
-        sta     (sp),y
-        ldy     #4              ; Size of arguments in bytes
-        jsr     _open           ; Will cleanup the stack
-
-; Check the result of the open() call
-
-        cpx     #$FF
-        bne     openok
-        cmp     #$FF
-        bne     openok
-        jmp     return0         ; Failure, errno/_oserror already set
-
-; Open call succeeded
-
-openok: ldy     file
-        sty     ptr1
-        ldy     file+1
-        sty     ptr1+1
-        ldy     #_FILE::f_fd
-        sta     (ptr1),y        ; file->f_fd = fd;
-        ldy     #_FILE::f_flags
-        lda     #_FOPEN
-        sta     (ptr1),y        ; file->f_flags = _FOPEN;
-
-; Return the pointer to the file structure
-
-        lda     ptr1
-        ldx     ptr1+1
-        rts
-
-.endproc
-
-; ------------------------------------------------------------------------
-; Data
-
-.bss
-file:   .res    2
-
-
diff --git a/libsrc/common/_heap.s b/libsrc/common/_heap.s
deleted file mode 100644 (file)
index 5af4340..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1998
-;
-; Heap variables and initialization.
-;
-
-        .constructor    initheap, 24
-        .import         __BSS_RUN__, __BSS_SIZE__, __STACKSIZE__
-        .importzp       sp
-
-        .include        "_heap.inc"
-
-
-.data
-
-__heaporg:
-        .word   __BSS_RUN__+__BSS_SIZE__        ; Linker calculates this symbol
-__heapptr:
-        .word   __BSS_RUN__+__BSS_SIZE__        ; Dito
-__heapend:
-        .word   __BSS_RUN__+__BSS_SIZE__
-__heapfirst:
-        .word   0
-__heaplast:
-        .word   0
-
-
-; Initialization. Will be called from startup!
-
-.segment        "INIT"
-
-initheap:
-        sec
-        lda     sp
-        sbc     #<__STACKSIZE__
-        sta     __heapend
-        lda     sp+1
-        sbc     #>__STACKSIZE__
-        sta     __heapend+1
-        rts
-
-                      
diff --git a/libsrc/common/_heapadd.s b/libsrc/common/_heapadd.s
deleted file mode 100644 (file)
index 14080cb..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-;
-; Ullrich von Bassewitz, 21.7.2000
-;
-; Add a block to the heap free list
-;
-; void __fastcall__ _heapadd (void* mem, size_t size);
-;
-;
-
-        .importzp       ptr1, ptr2
-        .import         popax
-        .import         heapadd
-        .export         __heapadd
-
-        .include        "_heap.inc"
-
-        .macpack        generic
-
-;-----------------------------------------------------------------------------
-; Code
-
-__heapadd:
-        sta     ptr1            ; Store size in ptr1
-        stx     ptr1+1
-        jsr     popax           ; Get the block pointer
-        sta     ptr2
-        stx     ptr2+1          ; Store block pointer in ptr2
-
-; Check if size is greater or equal than min_size. Otherwise we don't care
-; about the block (this may only happen for user supplied blocks, blocks
-; from the heap are always large enough to hold a freeblock structure).
-
-        lda     ptr1            ; Load low byte
-        ldx     ptr1+1          ; Load/check high byte
-        bne     @L1
-        cmp     #HEAP_MIN_BLOCKSIZE
-        bcs     @L1
-
-        rts                     ; Block not large enough
-
-; The block is large enough. Set the size field in the block.
-
-@L1:    ldy     #usedblock::size
-        sta     (ptr2),y
-        iny
-        txa
-        sta     (ptr2),y
-
-; Call the internal function since variables are now setup correctly
-
-        jmp     heapadd
-
diff --git a/libsrc/common/_heapblocksize.s b/libsrc/common/_heapblocksize.s
deleted file mode 100644 (file)
index db33f59..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-;
-; Ullrich von Bassewitz, 2004-07-17
-;
-; size_t __fastcall__ _heapblocksize (const void* ptr);
-;
-; Return the size of an allocated block.
-;
-
-        .importzp       ptr1, ptr2
-        .export         __heapblocksize
-
-        .include        "_heap.inc"
-
-        .macpack        generic
-        .macpack        cpu
-
-;-----------------------------------------------------------------------------
-; Code
-
-__heapblocksize:
-
-; Below the user data is a pointer that points to the start of the real
-; (raw) memory block. The first word of this block is the size. To access
-; the raw block pointer, we will decrement the high byte of the pointer,
-; the pointer is then at offset 254/255.
-
-        sta     ptr1
-        dex
-        stx     ptr1+1
-        ldy     #$FE
-        lda     (ptr1),y
-        sta     ptr2            ; Place the raw block pointer into ptr2
-        iny
-        lda     (ptr1),y
-        sta     ptr2+1
-
-; Load the size from the raw block
-
-        ldy     #usedblock::size+1
-        lda     (ptr2),y
-        tax
-.if (.cpu .bitand CPU_ISET_65SC02)
-        lda     (ptr2)
-.else
-        dey
-        lda     (ptr2),y
-.endif
-
-; Correct the raw block size so that is shows the user visible portion. To
-; do that, we must decrease the size by the amount of unused memory, which is
-; the difference between the user space pointer and the raw memory block
-; pointer. Since we have decremented the user space pointer by 256, we will
-; have to correct the result.
-;
-;       return size - (ptr1 + 256 - ptr2)
-;       return size - ptr1 - 256 + ptr2
-
-        dex                     ; - 256
-        add     ptr2
-        pha
-        txa
-        adc     ptr2+1
-        tax
-        pla
-        sub     ptr1
-        pha
-        txa
-        sbc     ptr1+1
-        tax
-        pla
-
-; Done
-
-        rts
-
diff --git a/libsrc/common/_heapmaxavail.s b/libsrc/common/_heapmaxavail.s
deleted file mode 100644 (file)
index 4d44fad..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-02-01
-;
-; Return the size of the largest free block on the heap.
-;
-; size_t _heapmaxavail (void);
-;
-;
-                            
-        .importzp       ptr1, ptr2
-        .export         __heapmaxavail
-
-        .include        "_heap.inc"
-
-        .macpack        generic
-
-;-----------------------------------------------------------------------------
-; Code
-
-__heapmaxavail:
-
-; size_t Size = (_heapend - _heapptr) * sizeof (*_heapend);
-
-        lda     __heapend
-        sub     __heapptr
-        sta     ptr2
-        lda     __heapend+1
-        sbc     __heapptr+1
-        sta     ptr2+1
-
-; struct freeblock* F = _heapfirst;
-
-        lda     __heapfirst
-        sta     ptr1
-        lda     __heapfirst+1
-@L1:    sta     ptr1+1
-
-; while (F) {
-
-        ora     ptr1
-        beq     @L3             ; Jump if end of free list reached
-
-; if (Size < F->size) {
-
-        ldy     #freeblock::size
-        lda     ptr2
-        sub     (ptr1),y
-        iny
-        lda     ptr2+1
-        sbc     (ptr1),y
-        bcs     @L2
-
-; Size = F->size;
-
-        ldy     #freeblock::size
-        lda     (ptr1),y
-        sta     ptr2
-        iny
-        lda     (ptr1),y
-        sta     ptr2+1
-
-; F = F->next;
-
-@L2:    iny                     ; Points to F->next
-        lda     (ptr1),y
-        tax
-        iny
-        lda     (ptr1),y
-        stx     ptr1
-        jmp     @L1
-
-; if (Size < HEAP_ADMIN_SPACE) return 0;
-
-@L3:    lda     ptr2
-        sub     #HEAP_ADMIN_SPACE
-        ldx     ptr2+1
-        bcs     @L5
-        bne     @L4
-        txa
-        rts
-
-; return Size - HEAP_ADMIN_SPACE;
-
-@L4:    dex
-@L5:    rts
diff --git a/libsrc/common/_heapmemavail.s b/libsrc/common/_heapmemavail.s
deleted file mode 100644 (file)
index 69aa75f..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-02-01
-;
-; Return the amount of free memory on the heap.
-;
-; size_t _heapmemavail (void);
-;
-;
-
-        .importzp       ptr1, ptr2
-        .export         __heapmemavail
-
-        .include        "_heap.inc"
-
-        .macpack        generic
-
-;-----------------------------------------------------------------------------
-; Code
-
-__heapmemavail:
-
-; size_t Size = 0;
-
-        lda     #0
-        sta     ptr2
-        sta     ptr2+1
-
-; struct freeblock* F = _heapfirst;
-
-        lda     __heapfirst
-        sta     ptr1
-        lda     __heapfirst+1
-@L1:    sta     ptr1+1
-
-; while (F) {
-
-        ora     ptr1
-        beq     @L2             ; Jump if end of free list reached
-
-; Size += F->size;
-
-        ldy     #freeblock::size
-        lda     (ptr1),y
-        add     ptr2
-        sta     ptr2
-        iny
-        lda     (ptr1),y
-        adc     ptr2+1
-        sta     ptr2+1
-
-; F = F->next;
-
-        iny                             ; Points to F->next
-        lda     (ptr1),y
-        tax
-        iny
-        lda     (ptr1),y
-        stx     ptr1
-        jmp     @L1
-
-; return Size + (_heapend - _heapptr) * sizeof (*_heapend);
-
-@L2:    lda     ptr2
-        add     __heapend
-        sta     ptr2
-        lda     ptr2+1
-        adc     __heapend+1
-        tax
-
-        lda     ptr2
-        sub     __heapptr
-        sta     ptr2
-        txa
-        sbc     __heapptr+1
-        tax
-        lda     ptr2
-
-        rts
diff --git a/libsrc/common/_hextab.c b/libsrc/common/_hextab.c
deleted file mode 100644 (file)
index 4c172ab..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-** Ullrich von Bassewitz, 11.08.1998
-**
-** Hex conversion table. Must be in C since the compiler will convert
-** to the correct character set for the target platform.
-*/
-
-
-
-const unsigned char _hextab [16] = {
-    '0', '1', '2', '3', '4', '5', '6', '7',
-    '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
-};
-
-
diff --git a/libsrc/common/_longminstr.c b/libsrc/common/_longminstr.c
deleted file mode 100644 (file)
index ffc35aa..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-** Ullrich von Bassewitz, 2012-11-26
-**
-** Minimum value of a long. Is used in ascii conversions, since this value 
-** has no positive counterpart than can be represented in 32 bits. In C,
-** since the compiler will convert to the correct character set for the 
-** target platform.
-*/
-
-
-
-const unsigned char _longminstr[] = "-2147483648";
-
-
-
diff --git a/libsrc/common/_mappederrno.s b/libsrc/common/_mappederrno.s
deleted file mode 100644 (file)
index 33f654c..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-;
-; 2003-08-12, Ullrich von Bassewitz
-; 2015-09-24, Greg King
-;
-; Helper function for several high-level file functions.
-;
-
-        .include        "errno.inc"
-
-        .macpack        generic
-        .macpack        cpu
-
-; ----------------------------------------------------------------------------
-; int __fastcall__ _mappederrno (unsigned char code);
-; /* Set _oserror to the given platform-specific error code. If it is a real
-; ** error code (not zero), set errno to the corresponding system error code,
-; ** and return -1. Otherwise, return zero.
-; ** Used by the library.
-; */
-
-__mappederrno:
-        sta     __oserror               ; Store the error code
-        tax                             ; Did we have an error?
-        bze     ok                      ; Branch if no
-        jsr     __osmaperrno            ; Map OS error into errno code
-        jsr     __seterrno              ; Save in errno (returns with .A = 0)
-.if (.cpu .bitand CPU_ISET_65SC02)
-        dec     a
-.else
-        lda     #$FF                    ; Return -1 if error
-.endif
-        tax
-ok:     rts
diff --git a/libsrc/common/_oserror.s b/libsrc/common/_oserror.s
deleted file mode 100644 (file)
index 256d896..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Ullrich von Bassewitz, 16.05.2000
-;
-; extern unsigned char _oserror;
-; /* Operating system specific errors from the low level functions */
-
-
-        .export         __oserror
-
-.bss
-
-__oserror:
-        .res    1
-
diff --git a/libsrc/common/_poserror.c b/libsrc/common/_poserror.c
deleted file mode 100644 (file)
index 95dbfdc..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                _poserror.c                                */
-/*                                                                           */
-/*                   Output a system dependent error code                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-
-
-void __fastcall__ _poserror (const char* msg)
-{
-    /* Fetch the message that corresponds to _oserror */
-    const char* errormsg = _stroserror (_oserror);
-
-    /* Different output depending on msg */
-    if (msg) {
-        fprintf (stderr, "%s: %s\n", msg, errormsg);
-    } else {
-        fprintf (stderr, "%s\n", errormsg);
-    }
-}
-
-
-
diff --git a/libsrc/common/_printf.h b/libsrc/common/_printf.h
deleted file mode 100644 (file)
index 7914fa8..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-** _printf.h
-**
-** (C) Copyright 1998 Ullrich von Bassewitz (uz@cc65.org)
-**
-*/
-
-
-
-#ifndef __PRINTF_H
-#define __PRINTF_H
-
-
-
-/* Forward */
-struct outdesc;
-
-/* Type of the function that is called to output data */
-typedef void __cdecl__ (* outfunc) (struct outdesc* desc, const char* buf, unsigned count);
-
-
-
-/* Control structure passed to the low level worker function.
-** Beware: This function will access the structure on the assembly level,
-** so check this when altering the structure.
-*/
-struct outdesc {
-    int         ccount;         /* Character counter */
-    outfunc     fout;           /* Routine used to output data */
-    void*       ptr;            /* Data internal to print routine */
-    unsigned    uns;            /* Data internal to print routine */
-};
-
-
-
-/* Internal formatting routine */
-void __fastcall__ _printf (struct outdesc* d, const char* format, va_list ap);
-
-
-
-/* End of _printf.h */
-#endif
-
-
-
diff --git a/libsrc/common/_printf.s b/libsrc/common/_printf.s
deleted file mode 100644 (file)
index f5d1784..0000000
+++ /dev/null
@@ -1,784 +0,0 @@
-;
-; _printf: Basic layer for all printf type functions.
-;
-; Ullrich von Bassewitz, 2000-10-21
-;
-                                   
-        .include        "zeropage.inc"
-
-        .export         __printf
-
-        .import         popax, pushax, pusheax, decsp6, push1, axlong, axulong
-        .import         _ltoa, _ultoa
-        .import         _strlower, _strlen
-
-        .macpack        generic
-
-; ----------------------------------------------------------------------------
-; We will store variables into the register bank in the zeropage. Define
-; equates for these variables.
-
-ArgList         = regbank+0             ; Argument list pointer
-Format          = regbank+2             ; Format string
-OutData         = regbank+4             ; Function parameters
-
-; ----------------------------------------------------------------------------
-; Other zero page cells
-
-Base            = ptr1
-FSave           = ptr1
-FCount          = ptr2
-
-.code
-
-; ----------------------------------------------------------------------------
-; Get one character from the format string and increment the pointer. Will
-; return zero in Y.
-
-GetFormatChar:
-        ldy     #0
-        lda     (Format),y
-IncFormatPtr:
-        inc     Format
-        bne     @L1
-        inc     Format+1
-@L1:    rts
-
-; ----------------------------------------------------------------------------
-; Output a pad character: outfunc (d, &padchar, 1)
-
-OutputPadChar:
-        lda     PadChar
-
-; ----------------------------------------------------------------------------
-; Call the output function with one character in A
-
-Output1:
-        sta     CharArg
-        jsr     PushOutData
-        lda     #<CharArg
-        ldx     #>CharArg
-        jsr     pushax
-        jsr     push1
-        jmp     CallOutFunc     ; fout (OutData, &CharArg, 1)
-
-; ----------------------------------------------------------------------------
-; Decrement the argument list pointer by 2
-
-DecArgList2:
-        lda     ArgList
-        sub     #2
-        sta     ArgList
-        bcs     @L1
-        dec     ArgList+1
-@L1:    rts
-
-; ----------------------------------------------------------------------------
-; Get an unsigned int or long argument depending on the IsLong flag.
-
-GetUnsignedArg:
-        lda     IsLong                  ; Check flag
-        bne     GetLongArg              ; Long sets all
-        jsr     GetIntArg               ; Get an integer argument
-        jmp     axulong                 ; Convert to unsigned long
-
-; ----------------------------------------------------------------------------
-; Get an signed int or long argument depending on the IsLong flag.
-
-GetSignedArg:
-        lda     IsLong                  ; Check flag
-        bne     GetLongArg              ; Long sets all
-        jsr     GetIntArg               ; Get an integer argument
-        jmp     axlong                  ; Convert to long
-
-; ----------------------------------------------------------------------------
-; Get a long argument from the argument list. Returns 0 in Y.
-
-GetLongArg:
-        jsr     GetIntArg               ; Get high word
-        sta     sreg
-        stx     sreg+1
-
-; Run into GetIntArg fetching the low word
-
-; ----------------------------------------------------------------------------
-; Get an integer argument from the argument list. Returns 0 in Y.
-
-GetIntArg:
-        jsr     DecArgList2
-        ldy     #1
-        lda     (ArgList),y
-        tax
-        dey
-        lda     (ArgList),y
-        rts
-
-; ----------------------------------------------------------------------------
-; Read an integer from the format string. Will return zero in Y.
-
-ReadInt:
-        ldy     #0
-        sty     ptr1
-        sty     ptr1+1                  ; Start with zero
-@Loop:  lda     (Format),y              ; Get format string character
-        sub     #'0'                    ; Make number from ascii digit
-        bcc     @L9                     ; Jump if done
-        cmp     #9+1
-        bcs     @L9                     ; Jump if done
-
-; Skip the digit character
-
-        jsr     IncFormatPtr
-
-; Add the digit to the value we have in ptr1
-
-        pha                             ; Save digit value
-        lda     ptr1
-        ldx     ptr1+1
-        asl     ptr1
-        rol     ptr1+1                  ; * 2
-        asl     ptr1
-        rol     ptr1+1                  ; * 4, assume carry clear
-        adc     ptr1
-        sta     ptr1
-        txa
-        adc     ptr1+1
-        sta     ptr1+1                  ; * 5
-        asl     ptr1
-        rol     ptr1+1                  ; * 10, assume carry clear
-        pla
-        adc     ptr1                    ; Add digit value
-        sta     ptr1
-        bcc     @Loop
-        inc     ptr1+1
-        bcs     @Loop                   ; Branch always
-
-; We're done converting
-
-@L9:    lda     ptr1
-        ldx     ptr1+1                  ; Load result
-        rts
-
-
-; ----------------------------------------------------------------------------
-; Put a character into the argument buffer and increment the buffer index
-
-PutBuf: ldy     BufIdx
-        inc     BufIdx
-        sta     Buf,y
-        rts
-
-; ----------------------------------------------------------------------------
-; Get a pointer to the current buffer end and push it onto the stack
-
-PushBufPtr:
-        lda     #<Buf
-        ldx     #>Buf
-        add     BufIdx
-        bcc     @L1
-        inx
-@L1:    jmp     pushax
-
-; ----------------------------------------------------------------------------
-; Push OutData onto the software stack
-
-PushOutData:
-        lda     OutData
-        ldx     OutData+1
-        jmp     pushax
-
-; ----------------------------------------------------------------------------
-; Output Width pad characters
-;
-
-PadLoop:
-        jsr     OutputPadChar
-OutputPadding:
-        inc     Width
-        bne     PadLoop
-        inc     Width+1
-        bne     PadLoop
-        rts
-
-; ----------------------------------------------------------------------------
-; Output the argument itself: outfunc (d, str, arglen);
-;
-
-OutputArg:
-        jsr     PushOutData
-        lda     Str
-        ldx     Str+1
-        jsr     pushax
-        lda     ArgLen
-        ldx     ArgLen+1
-        jsr     pushax
-        jmp     CallOutFunc
-
-; ----------------------------------------------------------------------------
-; ltoa: Wrapper for _ltoa that pushes all arguments
-
-ltoa:   sty     Base                    ; Save base
-        jsr     pusheax                 ; Push value
-        jsr     PushBufPtr              ; Push the buffer pointer...
-        lda     Base                    ; Restore base
-        jmp     _ltoa                   ; ultoa (l, s, base);
-
-
-; ----------------------------------------------------------------------------
-; ultoa: Wrapper for _ultoa that pushes all arguments
-
-ultoa:  sty     Base                    ; Save base
-        jsr     pusheax                 ; Push value
-        jsr     PushBufPtr              ; Push the buffer pointer...
-        lda     Base                    ; Restore base
-        jmp     _ultoa                  ; ultoa (l, s, base);
-
-
-; ----------------------------------------------------------------------------
-;
-
-__printf:
-
-; Save the register bank variables into the save area
-
-        pha                             ; Save low byte of ap
-        ldy     #5
-Save:   lda     regbank,y
-        sta     RegSave,y
-        dey
-        bpl     Save
-
-; Get the parameters from the stack
-
-        pla                             ; Restore low byte of ap
-        sta     ArgList                 ; Argument list pointer
-        stx     ArgList+1
-
-        jsr     popax                   ; Format string
-        sta     Format
-        stx     Format+1
-
-        jsr     popax                   ; Output descriptor
-        sta     OutData
-        stx     OutData+1
-
-; Initialize the output counter in the output descriptor to zero
-
-        lda     #0
-        tay
-        sta     (OutData),y
-        iny
-        sta     (OutData),y
-
-; Get the output function from the output descriptor and remember it
-
-        iny
-        lda     (OutData),y
-        sta     CallOutFunc+1
-        iny
-        lda     (OutData),y
-        sta     CallOutFunc+2
-
-; Start parsing the format string
-
-MainLoop:
-        lda     Format                  ; Remember current format pointer
-        sta     FSave
-        lda     Format+1
-        sta     FSave+1
-
-        ldy     #0                      ; Index
-@L1:    lda     (Format),y              ; Get next char
-        beq     @L2                     ; Jump on end of string
-        cmp     #'%'                    ; Format spec?
-        beq     @L2
-        iny                             ; Bump pointer
-        bne     @L1
-        inc     Format+1                ; Bump high byte of pointer
-        bne     @L1                     ; Branch always
-
-; Found a '%' character or end of string. Update the Format pointer so it is
-; current (points to this character).
-
-@L2:    tya                             ; Low byte of offset
-        add     Format
-        sta     Format
-        bcc     @L3
-        inc     Format+1
-
-; Calculate, how many characters must be output. Beware: This number may
-; be zero. A still contains the low byte of the pointer.
-
-@L3:    sub     FSave
-        sta     FCount
-        lda     Format+1
-        sbc     FSave+1
-        sta     FCount+1
-        ora     FCount                  ; Is the result zero?
-        beq     @L4                     ; Jump if yes
-
-; Output the characters that we have until now. To make the call to out
-; faster, build the stack frame by hand (don't use pushax)
-
-        jsr     decsp6                  ; 3 args
-        ldy     #5
-        lda     OutData+1
-        sta     (sp),y
-        dey
-        lda     OutData
-        sta     (sp),y
-        dey
-        lda     FSave+1
-        sta     (sp),y
-        dey
-        lda     FSave
-        sta     (sp),y
-        dey
-        lda     FCount+1
-        sta     (sp),y
-        dey
-        lda     FCount
-        sta     (sp),y
-        jsr     CallOutFunc             ; Call the output function
-
-; We're back from out(), or we didn't call it. Check for end of string.
-
-@L4:    jsr     GetFormatChar           ; Get one char, zero in Y
-        tax                             ; End of format string reached?
-        bne     NotDone                 ; End not reached
-
-; End of format string reached. Restore the zeropage registers and return.
-
-        ldx     #5
-Rest:   lda     RegSave,x
-        sta     regbank,x
-        dex
-        bpl     Rest
-        rts
-
-; Still a valid format character. Check for '%' and a '%%' sequence. Output
-; anything that is not a format specifier. On intro, Y is zero.
-
-NotDone:
-        cmp     #'%'
-        bne     @L1
-        lda     (Format),y              ; Check for "%%"
-        cmp     #'%'
-        bne     FormatSpec              ; Jump if really a format specifier
-        jsr     IncFormatPtr            ; Skip the second '%'
-@L1:    jsr     Output1                 ; Output the character...
-        jmp     MainLoop                ; ...and continue
-
-; We have a real format specifier
-; Format is: %[flags][width][.precision][mod]type
-; Y is zero on entry.
-
-FormatSpec:
-
-; Initialize the flags
-
-        lda     #0
-        ldx     #FormatVarSize-1
-@L1:    sta     FormatVars,x
-        dex
-        bpl     @L1
-
-; Start with reading the flags if there are any. X is $FF which is used
-; for "true"
-
-ReadFlags:
-        lda     (Format),y              ; Get next char...
-        cmp     #'-'
-        bne     @L1
-        stx     LeftJust
-        beq     @L4
-
-@L1:    cmp     #'+'
-        bne     @L2
-        stx     AddSign
-        beq     @L4
-
-@L2:    cmp     #' '
-        bne     @L3
-        stx     AddBlank
-        beq     @L4
-
-@L3:    cmp     #'#'
-        bne     ReadPadding
-        stx     AltForm
-
-@L4:    jsr     IncFormatPtr
-        jmp     ReadFlags               ; ...and start over
-
-; Done with flags, read the pad char. Y is still zero if we come here.
-
-ReadPadding:
-        ldx     #' '                    ; PadChar
-        cmp     #'0'
-        bne     @L1
-        tax                             ; PadChar is '0'
-        jsr     IncFormatPtr
-        lda     (Format),y              ; Read current for later
-@L1:    stx     PadChar
-
-; Read the width. Even here, Y is still zero. A contains the current character
-; from the format string
-
-ReadWidth:
-        cmp     #'*'
-        bne     @L1
-        jsr     IncFormatPtr
-        jsr     GetIntArg               ; Width is an additional argument
-        jmp     @L2
-
-@L1:    jsr     ReadInt                 ; Read integer from format string...
-@L2:    sta     Width
-        stx     Width+1                 ; ...and remember in Width
-
-; Read the precision. Even here, Y is still zero.
-
-        sty     Prec                    ; Assume Precision is zero
-        sty     Prec+1
-        lda     (Format),y              ; Load next format string char
-        cmp     #'.'                    ; Precision given?
-        bne     ReadMod                 ; Branch if no precision given
-
-ReadPrec:
-        jsr     IncFormatPtr            ; Skip the '.'
-        lda     (Format),y
-        cmp     #'*'                    ; Variable precision?
-        bne     @L1
-        jsr     IncFormatPtr            ; Skip the '*'
-        jsr     GetIntArg               ; Get integer argument
-        jmp     @L2
-
-@L1:    jsr     ReadInt                 ; Read integer from format string
-@L2:    sta     Prec
-        stx     Prec+1
-
-; Read the modifiers. Y is still zero.
-
-ReadMod:
-        lda     (Format),y
-        cmp     #'z'                    ; size_t - same as unsigned
-        beq     @L2
-        cmp     #'h'                    ; short - same as int
-        beq     @L2
-        cmp     #'t'                    ; ptrdiff_t - same as int
-        beq     @L2
-        cmp     #'j'                    ; intmax_t/uintmax_t - same as long
-        beq     @L1
-        cmp     #'L'                    ; long double
-        beq     @L1
-        cmp     #'l'                    ; long int
-        bne     DoFormat
-@L1:    lda     #$FF
-        sta     IsLong
-@L2:    jsr     IncFormatPtr
-        jmp     ReadMod
-
-; Initialize the argument buffer pointers. We use a static buffer (ArgBuf) to
-; assemble strings. A zero page index (BufIdx) is used to keep the current
-; write position. A pointer to the buffer (Str) is used to point to the the
-; argument in case we will not use the buffer but a user supplied string.
-; Y is zero when we come here.
-
-DoFormat:
-        sty     BufIdx                  ; Clear BufIdx
-        ldx     #<Buf
-        stx     Str
-        ldx     #>Buf
-        stx     Str+1
-
-; Skip the current format character, then check it (current char in A)
-
-        jsr     IncFormatPtr
-
-; Is it a character?
-
-        cmp     #'c'
-        bne     CheckInt
-
-; It is a character
-
-        jsr     GetIntArg               ; Get the argument (promoted to int)
-        sta     Buf                     ; Place it as zero terminated string...
-        lda     #0
-        sta     Buf+1                   ; ...into the buffer
-        jmp     HaveArg                 ; Done
-
-; Is it an integer?
-
-CheckInt:
-        cmp     #'d'
-        beq     @L1
-        cmp     #'i'
-        bne     CheckCount
-
-; It is an integer
-
-@L1:    ldx     #0
-        lda     AddBlank                ; Add a blank for positives?
-        beq     @L2                     ; Jump if no
-        ldx     #' '
-@L2:    lda     AddSign                 ; Add a plus for positives (precedence)?
-        beq     @L3
-        ldx     #'+'
-@L3:    stx     Leader
-
-; Integer argument
-
-        jsr     GetSignedArg            ; Get argument as a long
-        ldy     sreg+1                  ; Check sign
-        bmi     @Int1
-        ldy     Leader
-        beq     @Int1
-        sty     Buf
-        inc     BufIdx
-
-@Int1:  ldy     #10                     ; Base
-        jsr     ltoa                    ; Push arguments, call _ltoa
-        jmp     HaveArg
-
-; Is it a count pseudo format?
-
-CheckCount:
-        cmp     #'n'
-        bne     CheckOctal
-
-; It is a count pseudo argument
-
-        jsr     GetIntArg
-        sta     ptr1
-        stx     ptr1+1                  ; Get user supplied pointer
-        ldy     #0
-        lda     (OutData),y             ; Low byte of OutData->ccount
-        sta     (ptr1),y
-        iny
-        lda     (OutData),y             ; High byte of OutData->ccount
-        sta     (ptr1),y
-        jmp     MainLoop                ; Done
-
-; Check for an octal digit
-
-CheckOctal:
-        cmp     #'o'
-        bne     CheckPointer
-
-; Integer in octal representation
-
-        jsr     GetSignedArg            ; Get argument as a long
-        ldy     AltForm                 ; Alternative form?
-        beq     @Oct1                   ; Jump if no
-        pha                             ; Save low byte of value
-        stx     tmp1
-        ora     tmp1
-        ora     sreg
-        ora     sreg+1
-        ora     Prec
-        ora     Prec+1                  ; Check if value or Prec != 0
-        beq     @Oct1
-        lda     #'0'
-        jsr     PutBuf
-        pla                             ; Restore low byte
-
-@Oct1:  ldy     #8                      ; Load base
-        jsr     ltoa                    ; Push arguments, call _ltoa
-        jmp     HaveArg
-
-; Check for a pointer specifier (%p)
-
-CheckPointer:
-        cmp     #'p'
-        bne     CheckString
-
-; It's a pointer. Use %#x conversion
-
-        ldx     #0
-        stx     IsLong                  ; IsLong = 0;
-        inx
-        stx     AltForm                 ; AltForm = 1;
-        lda     #'x'
-        bne     IsHex                   ; Branch always
-
-; Check for a string specifier (%s)
-
-CheckString:
-        cmp     #'s'
-        bne     CheckUnsigned
-
-; It's a string
-
-        jsr     GetIntArg               ; Get 16bit argument
-        sta     Str
-        stx     Str+1
-        jmp     HaveArg
-
-; Check for an unsigned integer (%u)
-
-CheckUnsigned:
-        cmp     #'u'
-        bne     CheckHex
-
-; It's an unsigned integer
-
-        jsr     GetUnsignedArg          ; Get argument as unsigned long
-        ldy     #10                     ; Load base
-        jsr     ultoa                   ; Push arguments, call _ultoa
-        jmp     HaveArg
-
-; Check for a hexadecimal integer (%x)
-
-CheckHex:
-        cmp     #'x'
-        beq     IsHex
-        cmp     #'X'
-        bne     UnknownFormat
-
-; Hexadecimal integer
-
-IsHex:  pha                             ; Save the format spec
-        lda     AltForm
-        beq     @L1
-        lda     #'0'
-        jsr     PutBuf
-        lda     #'X'
-        jsr     PutBuf
-
-@L1:    jsr     GetUnsignedArg          ; Get argument as an unsigned long
-        ldy     #16                     ; Load base
-        jsr     ultoa                   ; Push arguments, call _ultoa
-
-        pla                             ; Get the format spec
-        cmp     #'x'                    ; Lower case?
-        bne     @L2
-        lda     Str
-        ldx     Str+1
-        jsr     _strlower               ; Make characters lower case
-@L2:    jmp     HaveArg
-
-; Unknown format character, skip it
-
-UnknownFormat:
-        jmp     MainLoop
-
-; We have the argument, do argument string formatting
-
-HaveArg:
-
-; ArgLen = strlen (Str);
-
-        lda     Str
-        ldx     Str+1
-        jsr     _strlen                 ; Get length of argument
-        sta     ArgLen
-        stx     ArgLen+1
-
-; if (Prec && Prec < ArgLen) ArgLen = Prec;
-
-        lda     Prec
-        ora     Prec+1
-        beq     @L1
-        ldx     Prec
-        cpx     ArgLen
-        lda     Prec+1
-        tay
-        sbc     ArgLen+1
-        bcs     @L1
-        stx     ArgLen
-        sty     ArgLen+1
-
-;  if (Width > ArgLen) {
-;      Width -= ArgLen;                 /* padcount */
-;  } else {
-;      Width = 0;
-;  }
-; Since width is used as a counter below, calculate -(width+1)
-
-@L1:    sec
-        lda     Width
-        sbc     ArgLen
-        tax
-        lda     Width+1
-        sbc     ArgLen+1
-        bcs     @L2
-        lda     #0
-        tax
-@L2:    eor     #$FF
-        sta     Width+1
-        txa
-        eor     #$FF
-        sta     Width
-
-;  /* Do padding on the left side if needed */
-;  if (!leftjust) {
-;      /* argument right justified */
-;      while (width) {
-;         fout (d, &padchar, 1);
-;         --width;
-;      }
-;  }
-
-        lda     LeftJust
-        bne     @L3
-        jsr     OutputPadding
-
-; Output the argument itself
-
-@L3:    jsr     OutputArg
-
-;  /* Output right padding bytes if needed */
-;  if (leftjust) {
-;      /* argument left justified */
-;      while (width) {
-;         fout (d, &padchar, 1);
-;         --width;
-;      }
-;  }
-
-        lda     LeftJust
-        beq     @L4
-        jsr     OutputPadding
-
-; Done, parse next chars from format string
-
-@L4:    jmp     MainLoop
-
-
-; ----------------------------------------------------------------------------
-; Local data (all static)
-
-.bss
-
-; Save area for the zero page registers
-RegSave:        .res    regbanksize
-
-; One character argument for OutFunc
-CharArg:        .byte   0
-
-; Format variables
-FormatVars:
-LeftJust:       .byte   0
-AddSign:        .byte   0
-AddBlank:       .byte   0
-AltForm:        .byte   0
-PadChar:        .byte   0
-Width:          .word   0
-Prec:           .word   0
-IsLong:         .byte   0
-Leader:         .byte   0
-BufIdx:         .byte   0       ; Argument string pointer
-FormatVarSize   = * - FormatVars
-
-; Argument buffer and pointer
-Buf:            .res    20
-Str:            .word   0
-ArgLen:         .res    2
-
-.data
-
-; Stuff from OutData. Is used as a vector and must be aligned
-CallOutFunc:    jmp     $0000
-
-
-
diff --git a/libsrc/common/_scanf.c b/libsrc/common/_scanf.c
deleted file mode 100644 (file)
index c18f1e2..0000000
+++ /dev/null
@@ -1,868 +0,0 @@
-/*
-** _scanf.c
-**
-** (c) Copyright 2001-2005, Ullrich von Bassewitz <uz@cc65.org>
-** 2014-09-10, Greg King <greg.king5@verizon.net>
-**
-** This is the basic layer for all scanf-type functions.  It should be
-** rewritten in assembly, at some time in the future.  So, some of the code
-** is not as elegant as it could be.
-*/
-
-
-
-#include <stddef.h>
-#include <stdarg.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <string.h>
-#include <setjmp.h>
-#include <limits.h>
-#include <errno.h>
-
-#include <ctype.h>
-/* _scanf() can give EOF to these functions.  But, the macroes can't
-** understand it; so, they are removed.
-*/
-#undef isspace
-#undef isxdigit
-
-#include "_scanf.h"
-
-#pragma static-locals(on)
-
-
-
-/*****************************************************************************/
-/*                            SetJmp return codes                            */
-/*****************************************************************************/
-
-
-
-enum {
-    RC_OK,                              /* setjmp() call */
-    RC_NOCONV,                          /* No conversion possible */
-    RC_EOF                              /* EOF reached */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-static const char*    format;           /* Copy of function argument */
-static const struct scanfdata* D_;      /* Copy of function argument */
-static va_list        ap;               /* Copy of function argument */
-static jmp_buf        JumpBuf;          /* "Label" that is used for failures */
-static char           F;                /* Character from format string */
-static unsigned       CharCount;        /* Characters read so far */
-static int            C;                /* Character from input */
-static unsigned       Width;            /* Maximum field width */
-static long           IntVal;           /* Converted int value */
-static int            Assignments;      /* Number of assignments */
-static unsigned char  IntBytes;         /* Number of bytes-1 for int conversions */
-
-/* Flags */
-static bool           Converted;        /* Some object was converted */
-static bool           Positive;         /* Flag for positive value */
-static bool           NoAssign;         /* Suppress assignment */
-static bool           Invert;           /* Do we need to invert the charset? */
-static unsigned char  CharSet[(1+UCHAR_MAX)/CHAR_BIT];
-static const unsigned char Bits[CHAR_BIT] = {
-    0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
-};
-
-/* We need C to be 16 bits since we cannot check for EOF otherwise.
-** Unfortunately, this causes the code to be quite larger, even if for most
-** purposes, checking the low byte would be enough, since if C is EOF, the
-** low byte will not match any useful character anyway (at least for the
-** supported platforms - I know that this is not portable). So the following
-** macro is used to access just the low byte of C.
-*/
-#define CHAR(c)         (*((unsigned char*)&(c)))
-
-
-
-/*****************************************************************************/
-/*                              Character sets                               */
-/*****************************************************************************/
-
-
-
-/* We don't want the optimizer to ruin our "perfect" ;-)
-** assembly code!
-*/
-#pragma optimize (push, off)
-
-static unsigned FindBit (void)
-/* Locate the character's bit in the charset array.
-** < .A - Argument character
-** > .X - Offset of the byte in the character-set mask
-** > .A - Bit-mask
-*/
-{
-    asm ("pha");
-    asm ("lsr a");              /* Divide by CHAR_BIT */
-    asm ("lsr a");
-    asm ("lsr a");
-    asm ("tax");                /* Byte's offset */
-    asm ("pla");
-    asm ("and #%b", CHAR_BIT-1);
-    asm ("tay");                /* Bit's offset */
-    asm ("lda %v,y", Bits);
-    return (unsigned) __AX__;
-}
-
-#pragma optimize (pop)
-
-
-static void __fastcall__ AddCharToSet (unsigned char /* C */)
-/* Set the given bit in the character set */
-{
-    FindBit();
-    asm ("ora %v,x", CharSet);
-    asm ("sta %v,x", CharSet);
-}
-
-
-
-#pragma optimize (push, off)
-
-static unsigned char IsCharInSet (void)
-/* Check if the char. is part of the character set. */
-{
-    /* Get the character from C. */
-    asm ("lda #$00");
-    asm ("ldx %v+1", C);
-    asm ("bne L1");                     /* EOF never is in the set */
-    asm ("lda %v", C);
-    FindBit();
-    asm ("and %v,x", CharSet);
-    asm ("L1:");
-    asm ("ldx #$00");
-    return (unsigned char) __AX__;
-}
-
-#pragma optimize (pop)
-
-
-
-static void InvertCharSet (void)
-/* Invert the character set */
-{
-    asm ("ldy #%b", sizeof (CharSet) - 1);
-    asm ("L1:");
-    asm ("lda %v,y", CharSet);
-    asm ("eor #$FF");
-    asm ("sta %v,y", CharSet);
-    asm ("dey");
-    asm ("bpl L1");
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void PushBack (void)
-/* Push back the last (unused) character, provided it is not EOF. */
-{
-    /* Get the character from C. */
-    /* Only the high-byte needs to be checked for EOF. */
-    asm ("ldx %v+1", C);
-    asm ("bne %g", Done);
-    asm ("lda %v", C);
-
-    /* Put unget()'s first argument on the stack. */
-    asm ("jsr pushax");
-
-    /* Copy D into the zero-page. */
-    (const struct scanfdata*) __AX__ = D_;
-    asm ("sta ptr1");
-    asm ("stx ptr1+1");
-
-    /* Copy the unget vector to jmpvec. */
-    asm ("ldy #%b", offsetof (struct scanfdata, unget));
-    asm ("lda (ptr1),y");
-    asm ("sta jmpvec+1");
-    asm ("iny");
-    asm ("lda (ptr1),y");
-    asm ("sta jmpvec+2");
-
-    /* Load D->data into __AX__. */
-    asm ("ldy #%b", offsetof (struct scanfdata, data) + 1);
-    asm ("lda (ptr1),y");
-    asm ("tax");
-    asm ("dey");
-    asm ("lda (ptr1),y");
-
-    /* Call the unget routine. */
-    asm ("jsr jmpvec");
-
-    /* Take back that character's count. */
-    asm ("lda %v", CharCount);
-    asm ("bne %g", Yank);
-    asm ("dec %v+1", CharCount);
-Yank:
-    asm ("dec %v", CharCount);
-
-Done:
-    ;
-}
-
-
-
-static void ReadChar (void)
-/* Get an input character, count characters */
-{
-    /* Move D to ptr1 */
-    asm ("lda %v", D_);
-    asm ("ldx %v+1", D_);
-    asm ("sta ptr1");
-    asm ("stx ptr1+1");
-
-    /* Copy the get vector to jmpvec */
-    asm ("ldy #%b", offsetof (struct scanfdata, get));
-    asm ("lda (ptr1),y");
-    asm ("sta jmpvec+1");
-    asm ("iny");
-    asm ("lda (ptr1),y");
-    asm ("sta jmpvec+2");
-
-    /* Load D->data into __AX__ */
-    asm ("ldy #%b", offsetof (struct scanfdata, data) + 1);
-    asm ("lda (ptr1),y");
-    asm ("tax");
-    asm ("dey");
-    asm ("lda (ptr1),y");
-
-    /* Call the get routine */
-    asm ("jsr jmpvec");
-
-    /* Assign the result to C */
-    asm ("sta %v", C);
-    asm ("stx %v+1", C);
-
-    /* If C is EOF, don't bump the character counter.
-    ** Only the high-byte needs to be checked.
-    */
-    asm ("inx");
-    asm ("beq %g", Done);
-
-    /* Must bump CharCount. */
-    asm ("inc %v", CharCount);
-    asm ("bne %g", Done);
-    asm ("inc %v+1", CharCount);
-
-Done:
-    ;
-}
-
-
-
-#pragma optimize (push, off)
-
-static void __fastcall__ Error (unsigned char /* Code */)
-/* Does a longjmp using the given code */
-{
-    asm ("pha");
-    (char*) __AX__ = JumpBuf;
-    asm ("jsr pushax");
-    asm ("pla");
-    asm ("ldx #>$0000");
-    asm ("jmp %v", longjmp);
-}
-
-#pragma optimize (pop)
-
-
-
-static void CheckEnd (void)
-/* Stop a scan if it prematurely reaches the end of a string or a file. */
-{
-    /* Only the high-byte needs to be checked for EOF. */
-    asm ("ldx %v+1", C);
-    asm ("beq %g", Done);
-
-        Error (RC_EOF);
-Done:
-    ;
-}
-
-
-
-static void SkipWhite (void)
-/* Skip white space in the input and return the first non white character */
-{
-    while ((bool) isspace (C)) {
-        ReadChar ();
-    }
-}
-
-
-
-#pragma optimize (push, off)
-
-static void ReadSign (void)
-/* Read an optional sign and skip it. Store 1 in Positive if the value is
-** positive, store 0 otherwise.
-*/
-{
-    /* We can ignore the high byte of C here, since if it is EOF, the lower
-    ** byte won't match anyway.
-    */
-    asm ("lda %v", C);
-    asm ("cmp #'-'");
-    asm ("bne %g", NotNeg);
-
-    /* Negative value */
-    asm ("sta %v", Converted);
-    asm ("jsr %v", ReadChar);
-    asm ("lda #$00");           /* Flag as negative */
-    asm ("beq %g", Store);
-
-    /* Positive value */
-NotNeg:
-    asm ("cmp #'+'");
-    asm ("bne %g", Pos);
-    asm ("sta %v", Converted);
-    asm ("jsr %v", ReadChar);   /* Skip the + sign */
-Pos:
-    asm ("lda #$01");           /* Flag as positive */
-Store:
-    asm ("sta %v", Positive);
-}
-
-#pragma optimize (pop)
-
-
-
-static unsigned char __fastcall__ HexVal (char C)
-/* Convert a digit to a value */
-{
-    return (bool) isdigit (C) ?
-        C - '0' :
-        (char) tolower ((int) C) - ('a' - 10);
-}
-
-
-
-static void __fastcall__ ReadInt (unsigned char Base)
-/* Read an integer, and store it into IntVal. */
-{
-    unsigned char Val, CharCount = 0;
-
-    /* Read the integer value */
-    IntVal = 0L;
-    while ((bool) isxdigit (C) && ++Width != 0
-           && (Val = HexVal ((char) C)) < Base) {
-        ++CharCount;
-        IntVal = IntVal * (long) Base + (long) Val;
-        ReadChar ();
-    }
-
-    /* If we didn't convert anything, it's a failure. */
-    if (CharCount == 0) {
-        Error (RC_NOCONV);
-    }
-
-    /* Another conversion */
-    Converted = true;
-}
-
-
-
-static void AssignInt (void)
-/* Assign the integer value in Val to the next argument. The function makes
-** several non-portable assumptions, to reduce code size:
-**   - signed and unsigned types have the same representation.
-**   - short and int have the same representation.
-**   - all pointer types have the same representation.
-*/
-{
-    if (NoAssign == false) {
-
-        /* Get the next argument pointer */
-        (void*) __AX__ = va_arg (ap, void*);
-
-        /* Put the argument pointer into the zero-page. */
-        asm ("sta ptr1");
-        asm ("stx ptr1+1");
-
-        /* Get the number of bytes-1 to copy */
-        asm ("ldy %v", IntBytes);
-
-        /* Assign the integer value */
-Loop:   asm ("lda %v,y", IntVal);
-        asm ("sta (ptr1),y");
-        asm ("dey");
-        asm ("bpl %g", Loop);
-
-        /* Another assignment */
-        asm ("inc %v", Assignments);
-        asm ("bne %g", Done);
-        asm ("inc %v+1", Assignments);
-Done:   ;
-    }
-}
-
-
-
-static void __fastcall__ ScanInt (unsigned char Base)
-/* Scan an integer including white space, sign and optional base spec,
-** and store it into IntVal.
-*/
-{
-    /* Skip whitespace */
-    SkipWhite ();
-
-    /* Read an optional sign */
-    ReadSign ();
-
-    /* If Base is unknown (zero), figure it out */
-    if (Base == 0) {
-        if (CHAR (C) == '0') {
-            ReadChar ();
-            switch (CHAR (C)) {
-                case 'x':
-                case 'X':
-                    Base = 16;
-                    Converted = true;
-                    ReadChar ();
-                    break;
-                default:
-                    Base = 8;
-
-                    /* Restart at the beginning of the number because it might
-                    ** be only a single zero digit (which already was read).
-                    */
-                    PushBack ();
-                    C = '0';
-            }
-        } else {
-            Base = 10;
-        }
-    }
-
-    /* Read the integer value */
-    ReadInt (Base);
-
-    /* Apply the sign */
-    if (Positive == false) {
-        IntVal = -IntVal;
-    }
-
-    /* Assign the value to the next argument unless suppressed */
-    AssignInt ();
-}
-
-
-
-static char GetFormat (void)
-/* Pick up the next character from the format string. */
-{
-/*  return (F = *format++); */
-    (const char*) __AX__ = format;
-    asm ("sta regsave");
-    asm ("stx regsave+1");
-    ++format;
-    asm ("ldy #0");
-    asm ("lda (regsave),y");
-    asm ("ldx #>$0000");
-    return (F = (char) __AX__);
-}
-
-
-
-int __fastcall__ _scanf (const struct scanfdata* D,
-                         const char* format_, va_list ap_)
-/* This is the routine used to do the actual work. It is called from several
-** types of wrappers to implement the actual ISO xxscanf functions.
-*/
-{
-    register char* S;
-             bool  HaveWidth;   /* True if a width was given */
-             bool  Match;       /* True if a character-set has any matches */
-             char  Start;       /* Walks over a range */
-
-    /* Place copies of the arguments into global variables. This is not very
-    ** nice, but on a 6502 platform it gives better code, since the values
-    ** do not have to be passed as parameters.
-    */
-    D_     = D;
-    format = format_;
-    ap     = ap_;
-
-    /* Initialize variables */
-    Converted   = false;
-    Assignments = 0;
-    CharCount   = 0;
-
-    /* Set up the jump "label".  CheckEnd() will use that label when EOF
-    ** is reached.  ReadInt() will use it when number-conversion fails.
-    */
-    if ((unsigned char) setjmp (JumpBuf) == RC_OK) {
-Again:
-
-        /* Get the next input character */
-        ReadChar ();
-
-        /* Walk over the format string */
-        while (GetFormat ()) {
-
-            /* Check for a conversion */
-            if (F != '%') {
-
-                /* Check for a match */
-                if ((bool) isspace ((int) F)) {
-
-                    /* Special white space handling: Any whitespace in the
-                    ** format string matches any amount of whitespace including
-                    ** none(!). So this match will never fail.
-                    */
-                    SkipWhite ();
-                    continue;
-                }
-
-Percent:
-                /* ### Note:  The opposite test (C == F)
-                ** would be optimized into buggy code!
-                */
-                if (C != (int) F) {
-
-                    /* A mismatch -- we will stop scanning the input,
-                    ** and return the number of assigned conversions.
-                    */
-                    goto NoConv;
-                }
-
-                /* A match -- get the next input character, and continue. */
-                goto Again;
-
-            } else {
-
-                /* A conversion. Skip the percent sign. */
-                /* 0. Check for %% */
-                if (GetFormat () == '%') {
-                    goto Percent;
-                }
-
-                /* 1. Assignment suppression */
-                NoAssign = (F == '*');
-                if (NoAssign) {
-                    GetFormat ();
-                }
-
-                /* 2. Maximum field width */
-                Width     = UINT_MAX;
-                HaveWidth = (bool) isdigit (F);
-                if (HaveWidth) {
-                    Width = 0;
-                    do {
-                        /* ### Non portable ### */
-                        Width = Width * 10 + (F & 0x0F);
-                    } while ((bool) isdigit (GetFormat ()));
-                }
-                if (Width == 0) {
-                    /* Invalid specification */
-                    /* Note:  This method of leaving the function might seem
-                    ** to be crude, but it optimizes very well because
-                    ** the four exits can share this code.
-                    */
-                    _seterrno (EINVAL);
-                    Assignments = EOF;
-                    PushBack ();
-                    return Assignments;
-                }
-                /* Increment-and-test makes better code than test-and-decrement
-                ** does.  So, change the width into a form that can be used in
-                ** that way.
-                */
-                Width = ~Width;
-
-                /* 3. Length modifier */
-                IntBytes = sizeof(int) - 1;
-                switch (F) {
-                    case 'h':
-                        if (*format == 'h') {
-                            IntBytes = sizeof(char) - 1;
-                            ++format;
-                        }
-                        GetFormat ();
-                        break;
-
-                    case 'l':
-                        if (*format == 'l') {
-                            /* Treat long long as long */
-                            ++format;
-                        }
-                        /* FALLTHROUGH */
-                    case 'j':   /* intmax_t */
-                        IntBytes = sizeof(long) - 1;
-                        /* FALLTHROUGH */
-
-                    case 'z':   /* size_t */
-                    case 't':   /* ptrdiff_t */
-                        /* Same size as int */
-
-                    case 'L':   /* long double - ignore this one */
-                        GetFormat ();
-                }
-
-                /* 4. Conversion specifier */
-                switch (F) {
-                    /* 'd' and 'u' conversions are actually the same, since the
-                    ** standard says that even the 'u' modifier allows an
-                    ** optionally signed integer.
-                    */
-                    case 'd':   /* Optionally signed decimal integer */
-                    case 'u':
-                        ScanInt (10);
-                        break;
-
-                    case 'i':
-                        /* Optionally signed integer with a base */
-                        ScanInt (0);
-                        break;
-
-                    case 'o':
-                        /* Optionally signed octal integer */
-                        ScanInt (8);
-                        break;
-
-                    case 'x':
-                    case 'X':
-                        /* Optionally signed hexadecimal integer */
-                        ScanInt (16);
-                        break;
-
-                    case 's':
-                        /* Whitespace-terminated string */
-                        SkipWhite ();
-                        CheckEnd ();       /* Is it an input failure? */
-                        Converted = true;  /* No, conversion will succeed */
-                        if (NoAssign == false) {
-                            S = va_arg (ap, char*);
-                        }
-                        while (C != EOF
-                               && (bool) isspace (C) == false
-                               && ++Width) {
-                            if (NoAssign == false) {
-                                *S++ = C;
-                            }
-                            ReadChar ();
-                        }
-                        /* Terminate the string just read */
-                        if (NoAssign == false) {
-                            *S = '\0';
-                            ++Assignments;
-                        }
-                        break;
-
-                    case 'c':
-                        /* Fixed-length string, NOT zero-terminated */
-                        if (HaveWidth == false) {
-                            /* No width given, default is 1 */
-                            Width = ~1u;
-                        }
-                        CheckEnd ();       /* Is it an input failure? */
-                        Converted = true;  /* No, at least 1 char. available */
-                        if (NoAssign == false) {
-                            S = va_arg (ap, char*);
-                            /* ## This loop is convenient for us, but it isn't
-                            ** standard C.  The standard implies that a failure
-                            ** shouldn't put anything into the array argument.
-                            */
-                            while (++Width) {
-                                CheckEnd ();  /* Is it a matching failure? */
-                                *S++ = C;
-                                ReadChar ();
-                            }
-                            ++Assignments;
-                        } else {
-                            /* Just skip as many chars as given */
-                            while (++Width) {
-                                CheckEnd ();  /* Is it a matching failure? */
-                                ReadChar ();
-                            }
-                        }
-                        break;
-
-                    case '[':
-                        /* String using characters from a set */
-                        /* Clear the set */
-                        memset (CharSet, 0, sizeof (CharSet));
-                        /* Skip the left-bracket, and test for inversion. */
-                        Invert = (GetFormat () == '^');
-                        if (Invert) {
-                            GetFormat ();
-                        }
-                        if (F == ']') {
-                            /* Empty sets aren't allowed; so, a right-bracket
-                            ** at the beginning must be a member of the set.
-                            */
-                            AddCharToSet (F);
-                            GetFormat ();
-                        }
-                        /* Read the characters that are part of the set */
-                        while (F != '\0' && F != ']') {
-                            if (*format == '-') {  /* Look ahead at next char. */
-                                /* A range. Get start and end, skip the '-' */
-                                Start = F;
-                                ++format;
-                                switch (GetFormat ()) {
-                                    case '\0':
-                                    case ']':
-                                        /* '-' as last char means:  include '-' */
-                                        AddCharToSet (Start);
-                                        AddCharToSet ('-');
-                                        break;
-                                    default:
-                                        /* Include all characters
-                                        ** that are in the range.
-                                        */
-                                        while (1) {
-                                            AddCharToSet (Start);
-                                            if (Start == F) {
-                                                break;
-                                            }
-                                            ++Start;
-                                        }
-                                        /* Get next char after range */
-                                        GetFormat ();
-                                }
-                            } else {
-                                /* Just a character */
-                                AddCharToSet (F);
-                                /* Get next char */
-                                GetFormat ();
-                            }
-                        }
-                        /* Don't go beyond the end of the format string. */
-                        /* (Maybe, this should mean an invalid specification.) */
-                        if (F == '\0') {
-                            --format;
-                        }
-
-                        /* Invert the set if requested */
-                        if (Invert) {
-                            InvertCharSet ();
-                        }
-
-                        /* We have the set in CharSet. Read characters and
-                        ** store them into a string while they are part of
-                        ** the set.
-                        */
-                        Match = false;
-                        if (NoAssign == false) {
-                            S = va_arg (ap, char*);
-                        }
-                        while (IsCharInSet () && ++Width) {
-                            if (NoAssign == false) {
-                                *S++ = C;
-                            }
-                            Match = Converted = true;
-                            ReadChar ();
-                        }
-                        /* At least one character must match the set. */
-                        if (Match == false) {
-                            goto NoConv;
-                        }
-                        if (NoAssign == false) {
-                            *S = '\0';
-                            ++Assignments;
-                        }
-                        break;
-
-                    case 'p':
-                        /* Pointer, general format is 0xABCD.
-                        ** %hhp --> zero-page pointer
-                        ** %hp --> near pointer
-                        ** %lp --> far pointer
-                        */
-                        SkipWhite ();
-                        if (CHAR (C) != '0') {
-                            goto NoConv;
-                        }
-                        Converted = true;
-                        ReadChar ();
-                        switch (CHAR (C)) {
-                            case 'x':
-                            case 'X':
-                                break;
-                            default:
-                                goto NoConv;
-                        }
-                        ReadChar ();
-                        ReadInt (16);
-                        AssignInt ();
-                        break;
-
-                    case 'n':
-                        /* Store the number of characters consumed so far
-                        ** (the read-ahead character hasn't been consumed).
-                        */
-                        IntVal = (long) (CharCount - (C == EOF ? 0u : 1u));
-                        AssignInt ();
-                        /* Don't count it. */
-                        if (NoAssign == false) {
-                            --Assignments;
-                        }
-                        break;
-
-                    case 'S':
-                    case 'C':
-                        /* Wide characters */
-
-                    case 'a':
-                    case 'A':
-                    case 'e':
-                    case 'E':
-                    case 'f':
-                    case 'F':
-                    case 'g':
-                    case 'G':
-                        /* Optionally signed float */
-
-                        /* Those 2 groups aren't implemented. */
-                        _seterrno (ENOSYS);
-                        Assignments = EOF;
-                        PushBack ();
-                        return Assignments;
-
-                    default:
-                        /* Invalid specification */
-                        _seterrno (EINVAL);
-                        Assignments = EOF;
-                        PushBack ();
-                        return Assignments;
-                }
-            }
-        }
-    } else {
-NoConv:
-
-        /* Coming here means a failure. If that happens at EOF, with no
-        ** conversion attempts, then it is considered an error; otherwise,
-        ** the number of assignments is returned (the default behaviour).
-        */
-        if (C == EOF && Converted == false) {
-            Assignments = EOF;  /* Special case:  error */
-        }
-    }
-
-    /* Put the read-ahead character back into the input stream. */
-    PushBack ();
-
-    /* Return the number of conversion-and-assignments. */
-    return Assignments;
-}
-
-
-
diff --git a/libsrc/common/_scanf.h b/libsrc/common/_scanf.h
deleted file mode 100644 (file)
index 179be5d..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-** _scanf.h
-**
-** (c) Copyright 2004, Ullrich von Bassewitz <uz@cc65.org>
-**
-*/
-
-
-
-#ifndef __SCANF_H
-#define __SCANF_H
-
-
-
-/* Type of the function that is called to input data. The function will
-** return EOF if no more data is available.
-*/
-typedef int __fastcall__ (*getfunc) (void* data);
-
-/* Type of the function that is called to put back unused data */
-typedef int __fastcall__ (*ungetfunc) (int c, void* data);
-
-
-
-/* Control structure passed to the low level worker function.
-** Beware: This structure is mirrored in the _scanf.inc assembler include
-** file, so check this when altering the structure.
-*/
-struct scanfdata {
-    getfunc     get;    /* Pointer to input routine */
-    ungetfunc   unget;  /* Pointer to pushback routine */
-    void*       data;   /* Pointer to struct. used outside of _scanf() */
-};
-
-
-
-/* Internal scanning routine */
-int __fastcall__ _scanf (const struct scanfdata* d, const char* format, va_list ap);
-
-
-
-/* End of _scanf.h */
-#endif
-
-
-
diff --git a/libsrc/common/_scanf.inc b/libsrc/common/_scanf.inc
deleted file mode 100644 (file)
index 91be888..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 2004-11-27
-;
-
-;----------------------------------------------------------------------------
-; Structure passed to _scanf
-
-.struct SCANFDATA
-        GET     .addr
-        UNGET   .addr
-        DATA    .addr
-.endstruct
-
-;----------------------------------------------------------------------------
-; Global data
-
-.global __scanf
-
-
-
-
diff --git a/libsrc/common/_seterrno.s b/libsrc/common/_seterrno.s
deleted file mode 100644 (file)
index e35c0b3..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 2004-05-13
-;
-; __seterrno: Will set __errno to the value in A and return zero in A. Other
-;             registers aren't changed. The function is C callable, but 
-;             currently only called from asm code.
-;
-
-        .include        "errno.inc"
-
-.code
-
-.proc   __seterrno
-
-        sta     __errno
-        lda     #0
-        sta     __errno+1
-        rts
-
-.endproc
-
-
diff --git a/libsrc/common/_swap.s b/libsrc/common/_swap.s
deleted file mode 100644 (file)
index a16aecc..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-;
-; Ullrich von Bassewitz, 1998-12-09, 2004-11-30
-;
-; void __fastcall__ _swap (void* p, void* q, size_t size);
-;
-
-        .export         __swap
-        .import         popax
-        .importzp       ptr1, ptr2, ptr3
-
-
-__swap: eor     #$FF
-        sta     ptr3
-        txa
-        eor     #$FF
-        sta     ptr3+1          ; Save -(size+1) into ptr3
-
-        jsr     popax           ; Get q
-        sta     ptr2
-        stx     ptr2+1
-
-        jsr     popax           ; Get p
-        sta     ptr1
-        stx     ptr1+1
-
-; Prepare for swap
-
-        ldy     #$00
-
-; Swap loop
-
-@L1:    inc     ptr3            ; Bump counter low byte
-        beq     @L3             ; Branch on overflow
-
-@L2:    lda     (ptr1),y
-        tax
-        lda     (ptr2),y
-        sta     (ptr1),y
-        txa
-        sta     (ptr2),y
-        iny
-        bne     @L1
-        inc     ptr1+1
-        inc     ptr2+1
-        bne     @L1             ; Branch always (hopefully)
-
-; Bump the high counter byte
-
-@L3:    inc     ptr3+1
-        bne     @L2
-
-; Done
-
-        rts
-
diff --git a/libsrc/common/_sys.s b/libsrc/common/_sys.s
deleted file mode 100644 (file)
index 492e856..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-;
-; void __fastcall__ _sys (struct regs* r);
-;
-; Ullrich von Bassewitz, 16.12.1998
-;
-
-        .export         __sys
-        .import         jmpvec
-        .importzp       ptr1
-
-
-__sys:  sta     ptr1
-        stx     ptr1+1          ; Save the pointer to r
-
-; Fetch the PC and store it into the jump vector
-
-        ldy     #5
-        lda     (ptr1),y
-        sta     jmpvec+2
-        dey
-        lda     (ptr1),y
-        sta     jmpvec+1
-
-; Remember the flags so we can restore them to a known state after calling the
-; routine
-
-        php
-
-; Get the flags, keep the state of bit 4 and 5 using the other flags from
-; the flags value passed by the caller. Push the new flags and push A.
-
-        dey
-        php
-        pla                     ; Current flags -> A
-        eor     (ptr1),y
-        and     #%00110000
-        eor     (ptr1),y
-        pha                     ; Push new flags value
-        ldy     #0
-        lda     (ptr1),y
-        pha
-
-; Get and assign X and Y
-
-        iny
-        lda     (ptr1),y
-        tax
-        iny
-        lda     (ptr1),y
-        tay
-
-; Set a and the flags, call the machine code routine
-
-        pla
-        plp
-        jsr     jmpvec
-
-; Back from the routine. Save the flags and A.
-
-        php
-        pha
-
-; Put the register values into the regs structure
-
-        tya
-        ldy     #2
-        sta     (ptr1),y
-        dey
-        txa
-        sta     (ptr1),y
-        dey
-        pla
-        sta     (ptr1),y
-        ldy     #3
-        pla
-        sta     (ptr1),y
-
-; Restore the old flags value
-
-        plp
-
-; Done
-
-        rts
-
diff --git a/libsrc/common/abort.c b/libsrc/common/abort.c
deleted file mode 100644 (file)
index 43ad676..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-** abort.c
-**
-** Ullrich von Bassewitz, 02.06.1998
-*/
-
-
-
-#include <stdio.h>
-#include <stdlib.h> 
-#include <signal.h>
-
-
-
-void abort (void)
-{
-    raise (SIGABRT);
-    fputs ("ABNORMAL PROGRAM TERMINATION\n", stderr);
-    exit (3);
-}
-
-
-
diff --git a/libsrc/common/abs.s b/libsrc/common/abs.s
deleted file mode 100644 (file)
index 5daa8a1..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 17.06.1998
-;
-; int abs (int x);
-;
-
-        .export         _abs
-        .import         negax
-
-_abs:   cpx     #$00            ; test hi byte
-        bpl     L1
-        jmp     negax           ; Negate if negative
-L1:     rts
-
-
-
diff --git a/libsrc/common/asctime.c b/libsrc/common/asctime.c
deleted file mode 100644 (file)
index 1545042..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   asctime.c                               */
-/*                                                                           */
-/*                 Convert a broken down time into a string                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <time.h>
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-char* __fastcall__ asctime (const struct tm* timep)
-{
-    static char buf[26];
-
-    /* Format into given buffer and return the result */
-    return strftime (buf, sizeof (buf), "%c\n", timep)? buf : 0;
-}
-
-
-
diff --git a/libsrc/common/atexit.s b/libsrc/common/atexit.s
deleted file mode 100644 (file)
index 6edfd4a..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.06.1998
-;
-; int atexit (void (*f) (void));
-;
-
-        .export         _atexit
-        .destructor     doatexit, 17
-        .import         callax
-
-        .include        "errno.inc"
-
-        .macpack        cpu
-
-; ---------------------------------------------------------------------------
-
-.proc   _atexit
-
-        ldy     exitfunc_index
-        cpy     #exitfunc_max           ; Slot available?
-        beq     @Error                  ; Jump if no
-
-; Enter the function into the table
-
-        sta     exitfunc_table,y
-        iny
-        txa
-        sta     exitfunc_table,y
-        iny
-        sty     exitfunc_index
-
-; Done, return zero
-
-        lda     #0
-        tax
-        rts
-
-; Error, no space left
-
-@Error: lda     #ENOSPC         ; No space left
-        jsr     __seterrno
-        ldx     #$FF            ; Return -1
-        txa
-        rts
-
-.endproc
-
-
-
-; ---------------------------------------------------------------------------
-
-.code
-
-.proc   doatexit
-
-        ldy     exitfunc_index          ; Get index
-        beq     @L9                     ; Jump if done
-        dey
-        lda     exitfunc_table,y
-        tax
-        dey
-        lda     exitfunc_table,y
-        sty     exitfunc_index
-        jsr     callax                  ; Call the function
-.if (.cpu .bitand ::CPU_ISET_65SC02)
-        bra     doatexit
-.else
-        jmp     doatexit                ; Next one
-.endif
-
-@L9:    rts
-
-.endproc
-
-
-
-; ---------------------------------------------------------------------------
-
-.bss
-exitfunc_index: .res    1       ; Index into table, inc'ed by 2
-exitfunc_table: .res    10      ; 5 exit functions
-exitfunc_max    = <(* - exitfunc_table)
-
-
diff --git a/libsrc/common/atoi.s b/libsrc/common/atoi.s
deleted file mode 100644 (file)
index cb598f7..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.06.1998
-;
-; int atoi (const char* s);
-; long atol (const char* s);
-;
-
-        .export         _atoi, _atol
-        .import         negeax, __ctype
-        .importzp       sreg, ptr1, ptr2, tmp1
-
-        .include        "ctype.inc"
-
-;
-; Conversion routine (32 bit)
-;
-
-_atoi:
-_atol:  sta     ptr1            ; Store s
-        stx     ptr1+1
-        ldy     #0
-        sty     ptr2
-        sty     ptr2+1          ; initial value (32 bit)
-        sty     sreg
-        sty     sreg+1
-
-; Skip whitespace
-
-L1:     lda     (ptr1),y
-        tax
-        lda     __ctype,x       ; get character classification
-        and     #CT_SPACE_TAB   ; tab or space?
-        beq     L2              ; jump if no
-        iny
-        bne     L1
-        inc     ptr1+1
-        bne     L1              ; branch always
-
-; Check for a sign. The character is in X
-
-L2:     txa                     ; get char
-        ldx     #0              ; flag: positive
-        cmp     #'+'            ; ### portable?
-        beq     L3
-        cmp     #'-'            ; ### portable?
-        bne     L5
-        dex                     ; flag: negative
-L3:     iny
-        bne     L5
-        inc     ptr1+1
-
-; Store the sign flag and setup for conversion
-
-L5:     stx     tmp1            ; remember sign flag
-
-L6:     lda     (ptr1),y        ; get next char
-        tax
-        lda     __ctype,x       ; get character classification
-        and     #$04            ; digit?
-        beq     L8              ; done
-
-; Multiply ptr2 (the converted value) by 10
-
-        jsr     mul2            ; * 2
-
-        lda     sreg+1
-        pha
-        lda     sreg
-        pha
-        lda     ptr2+1
-        pha
-        lda     ptr2
-        pha                     ; Save value
-
-        jsr     mul2            ; * 4
-        jsr     mul2            ; * 8
-
-        clc
-        pla
-        adc     ptr2
-        sta     ptr2
-        pla
-        adc     ptr2+1
-        sta     ptr2+1
-        pla
-        adc     sreg
-        sta     sreg
-        pla
-        adc     sreg+1
-        sta     sreg+1          ; x*2 + x*8 = x*10
-
-; Get the character back and add it
-
-        txa                     ; get char back
-        sec
-        sbc     #'0'            ; make numeric value
-        clc
-        adc     ptr2
-        sta     ptr2
-        bcc     L7
-        inc     ptr2+1
-        bne     L7
-        inc     sreg
-        bne     L7
-        inc     sreg+1
-
-; Next character
-
-L7:     iny
-        bne     L6
-        inc     ptr1+1
-        bne     L6
-
-; Conversion done. Load the low 16 bit into A/X
-
-L8:     lda     ptr2
-        ldx     ptr2+1
-
-; Negate the value if necessary, otherwise we're done
-
-        ldy     tmp1            ; sign
-        beq     L9              ; Branch if positive
-
-; Negate the 32 bit value in ptr2/sreg
-
-        jmp     negeax
-
-;
-; Helper functions
-;
-
-mul2:   asl     ptr2
-        rol     ptr2+1
-        rol     sreg
-        rol     sreg+1          ; * 2
-L9:     rts
-
-
diff --git a/libsrc/common/bsearch.c b/libsrc/common/bsearch.c
deleted file mode 100644 (file)
index aafd285..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
-** bsearch.c
-**
-** 1998-06-17, Ullrich von Bassewitz
-** 2015-06-21, Greg King
-*/
-
-
-
-#include <stdlib.h>
-
-
-
-void* __fastcall__ bsearch (const void* key, const void* base, size_t n,
-                            size_t size, int __fastcall__ (* cmp) (const void*, const void*))
-{
-    int current;
-    int result;
-    int found = 0;
-    int first = 0;
-    int last = n - 1;
-
-    /* Binary search */
-    while (first <= last) {
-
-        /* Set current to mid of range */
-        current = (last + first) / 2;
-
-        /* Do a compare */
-        result = cmp ((void*) (((int) base) + current*size), key);
-        if (result < 0) {
-            first = current + 1;
-        } else {
-            last = current - 1;
-            if (result == 0) {
-                /* Found one entry that matches the search key. However there may be
-                ** more than one entry with the same key value and ANSI guarantees
-                ** that we return the first of a row of items with the same key.
-                */
-                found = 1;
-            }
-        }
-    }
-
-    /* Did we find the entry? */
-    return (void*) (found? ((int) base) + first*size : 0);
-}
-
-
-
diff --git a/libsrc/common/calloc.s b/libsrc/common/calloc.s
deleted file mode 100644 (file)
index 6e3e1bd..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-;
-; Ullrich von Bassewitz, 15.11.2001
-;
-; Allocate a block and zero it.
-;
-; void* __fastcall__ calloc (size_t count, size_t size);
-;
-
-        .export _calloc
-        .import _malloc, __bzero
-        .import tosumulax, pushax
-
-
-; -------------------------------------------------------------------------
-
-.proc   _calloc
-
-; We have the first argument in a/x and the second on the stack. Calling
-; tosumulax will give the product of both in a/x.
-
-        jsr     tosumulax
-
-; Save size for later
-
-        sta     Size
-        stx     Size+1
-
-; malloc() is a fastcall function, so we do already have the argument in
-; the right place
-
-        jsr     _malloc
-
-; Check for a NULL pointer
-
-        cpx     #0
-        bne     ClearBlock
-        cmp     #0
-        bne     ClearBlock
-
-; We have a NULL pointer, bail out
-
-        rts
-
-; No NULL pointer, clear the block. _bzero will return a pointer to the
-; block which is exactly what we want.
-
-ClearBlock:
-        jsr     pushax                  ; ptr
-        lda     Size
-        ldx     Size+1                  ; Size
-        jmp     __bzero
-
-.endproc
-
-; -------------------------------------------------------------------------
-; Data
-
-.bss
-
-Size:   .res    2
-
-
-
diff --git a/libsrc/common/cc65_idiv32by16r16.s b/libsrc/common/cc65_idiv32by16r16.s
deleted file mode 100644 (file)
index 9c30984..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-11-04
-;
-; CC65 library: 32by16 => 16 signed division
-;
-
-        .export         _cc65_idiv32by16r16
-        .import         idiv32by16r16, incsp4
-
-        .include        "zeropage.inc"
-
-
-;---------------------------------------------------------------------------
-; 32by16 division.
-
-.proc   _cc65_idiv32by16r16
-
-        pha                     ; Save rhs
-
-; Copy from stack to zeropage. This assumes ptr1 and ptr2 are adjacent.
-
-        ldy     #3
-@L1:    lda     (sp),y
-        sta     ptr1,y
-        dey
-        bpl     @L1
-
-        lda     #4
-        clc
-        adc     sp
-        sta     sp
-        bcc     @L2
-        inc     sp+1
-
-@L2:    pla                     ; Old rhs
-        jmp     idiv32by16r16
-
-.endproc
-
diff --git a/libsrc/common/cc65_imul16x16r32.s b/libsrc/common/cc65_imul16x16r32.s
deleted file mode 100644 (file)
index b4e82de..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-;
-; Ullrich von Bassewitz, 2010-11-03
-;
-; CC65 library: 16x16 => 32 signed multiplication
-;
-
-        .export         _cc65_imul16x16r32
-        .import         imul16x16r32, popax
-
-        .include        "zeropage.inc"
-
-
-;---------------------------------------------------------------------------
-; 16x16 => 32 signed multiplication routine.
-
-
-.proc   _cc65_imul16x16r32
-
-        sta     ptr1
-        stx     ptr1+1
-        jsr     popax
-        jmp     imul16x16r32
-
-.endproc
-
diff --git a/libsrc/common/cc65_imul8x8r16.s b/libsrc/common/cc65_imul8x8r16.s
deleted file mode 100644 (file)
index 0e7d547..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; 2014-03-27, Oliver Schmidt
-; 2014-05-08, Greg King
-;
-; CC65 library: 8x8 => 16 signed multiplication
-;
-
-        .export         _cc65_imul8x8r16
-        .import         imul8x8r16, popa, ptr1:zp
-
-
-;---------------------------------------------------------------------------
-; 8x8 => 16 signed multiplication routine.
-
-
-.proc   _cc65_imul8x8r16
-
-        sta     ptr1
-        jsr     popa
-        jmp     imul8x8r16
-
-.endproc
diff --git a/libsrc/common/cc65_sincos.s b/libsrc/common/cc65_sincos.s
deleted file mode 100644 (file)
index 6baba8b..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-;
-; Fixed point cosine/sine functions.
-;
-; int __fastcall__ cc65_sin (unsigned x);
-; int __fastcall__ cc65_cos (unsigned x);
-;
-; Returns the cosine/sine for the given argument as angular degree.
-; Valid argument range is 0..360 for both functions. They will return
-; garbage if the argument is not in a valid range. Result is in 8.8 fixed
-; point format, so $100 is 1.0 and $FF00 is -1.0.
-;
-;
-; Ullrich von Bassewitz, 2009-10-29
-;
-
-        .export         _cc65_cos, _cc65_sin
-
-
-; ---------------------------------------------------------------------------
-; Sinus table covering values from 0..86° as 0.8 fixed point values. Values
-; for 87..90° are actually 1.0 (= $100), will therefore not fit in the table
-; and are covered specially in the code below.
-
-.rodata
-
-_cc65_sintab:
-        .byte   $00, $04, $09, $0D, $12, $16, $1B, $1F, $24, $28
-        .byte   $2C, $31, $35, $3A, $3E, $42, $47, $4B, $4F, $53
-        .byte   $58, $5C, $60, $64, $68, $6C, $70, $74, $78, $7C
-        .byte   $80, $84, $88, $8B, $8F, $93, $96, $9A, $9E, $A1
-        .byte   $A5, $A8, $AB, $AF, $B2, $B5, $B8, $BB, $BE, $C1
-        .byte   $C4, $C7, $CA, $CC, $CF, $D2, $D4, $D7, $D9, $DB
-        .byte   $DE, $E0, $E2, $E4, $E6, $E8, $EA, $EC, $ED, $EF
-        .byte   $F1, $F2, $F3, $F5, $F6, $F7, $F8, $F9, $FA, $FB
-        .byte   $FC, $FD, $FE, $FE, $FF, $FF, $FF
-
-
-
-; ---------------------------------------------------------------------------
-; Cosine function. Is actually implemented as cos(x) = sin(x+90)
-
-.code
-
-_cc65_cos:
-
-; cos(x) = sin(x+90)
-
-        clc
-        adc     #90
-        bcc     @L1
-        inx
-
-; If x is now larger than 360, we need to subtract 360.
-
-@L1:    cpx     #>360
-        bne     @L2
-        cmp     #<360
-@L2:    bcc     _cc65_sin
-
-        sbc     #<360
-        bcs     @L3
-        dex
-@L3:    dex
-
-; ---------------------------------------------------------------------------
-; Sine function. Uses
-;
-;       table lookup            for 0..89°
-;       sin(x) = sin(180-x)     for 90°..179°
-;       sin(x) = -sin(x-180)    for 180..360°
-;
-; Plus special handling for the values missing in the table.
-
-_cc65_sin:
-
-; If the high byte is non zero, argument is > 255
-
-        cpx     #0
-        bne     L3
-        cmp     #180
-        bcs     L4
-
-; 0..179°
-
-        cmp     #90
-        bcc     L1
-
-; 90..179°. Value is identical to sin(180-val). Carry is set on entry.
-;
-;       180-val := -val + 180.
-; With
-;       -val := (val ^ $FF) + 1
-; we get
-;       180-val = (val ^ $FF) + 1 + 180
-; Since carry is set, we can drop the "+ 1".
-;
-
-        eor     #$FF
-        adc     #180            ; 180-val
-
-; 0..89°. Values for 87..90° are actually 1.0. Since this format doesn't fit
-; into the table, we have to check for it manually.
-
-L1:     cmp     #87
-        bcc     L2
-
-; The value is 1.0
-
-        ldx     #>(1 << 8)
-        lda     #<(1 << 8)
-        rts
-
-; 0..86°. Read the value from the table.
-
-L2:     tay
-        ldx     #0
-        lda     _cc65_sintab,y
-        rts
-
-; 180..360°. sin(x) = -sin(x-180). Since the argument is in range 0..180
-; after the subtraction, we don't need to handle the high byte.
-
-L3:     sec
-L4:     sbc     #180
-
-        cmp     #90
-        bcc     L5
-
-; 270..360°. Value is identical to -sin(180-val). Carry is set on entry.
-;
-;       180-val := -val + 180.
-; With
-;       -val := (val ^ $FF) + 1
-; we get
-;       180-val = (val ^ $FF) + 1 + 180
-; Since carry is set, we can drop the "+ 1".
-;
-
-        eor     #$FF
-        adc     #180            ; 180-val
-
-; 180..269°. Values for 267..269° are actually -1.0. Since this format doesn't
-; fit into the table, we have to check for it manually.
-
-L5:     ldx     #$FF
-        cmp     #87
-        bcc     L6
-
-; The value is -1.0
-
-        lda     #<(-1 << 8)
-        rts
-
-; 180..266°. Read the value from the table. Carry is clear on entry.
-
-L6:     tay
-        txa                     ; A = $FF
-        eor     _cc65_sintab,y
-        adc     #1
-        bcc     L7
-        inx
-L7:     rts
-
-
diff --git a/libsrc/common/cc65_udiv32by16r16.s b/libsrc/common/cc65_udiv32by16r16.s
deleted file mode 100644 (file)
index 9cad63b..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-11-04
-;
-; CC65 library: 32by16 => 16 unsigned division
-;
-
-        .export         _cc65_udiv32by16r16
-        .import         udiv32by16r16m, incsp4
-
-        .include        "zeropage.inc"
-
-
-;---------------------------------------------------------------------------
-; 32by16 division.
-
-.proc   _cc65_udiv32by16r16
-
-        sta     ptr3
-        stx     ptr3+1                  ; Store rhs
-
-; Copy from stack to zeropage. This assumes ptr1 and ptr2 are adjacent.
-
-        ldy     #3
-@L1:    lda     (sp),y
-        sta     ptr1,y
-        dey
-        bpl     @L1
-
-        lda     #4
-        clc
-        adc     sp
-        sta     sp
-        bcc     @L2
-        inc     sp+1
-
-@L2:    jmp     udiv32by16r16m
-
-.endproc
-
diff --git a/libsrc/common/cc65_umul16x16r32.s b/libsrc/common/cc65_umul16x16r32.s
deleted file mode 100644 (file)
index 0e7ed76..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-;
-; Ullrich von Bassewitz, 2010-11-03
-;
-; CC65 library: 16x16 => 32 unsigned multiplication
-;
-
-        .export         _cc65_umul16x16r32
-        .import         umul16x16r32, popax
-
-        .include        "zeropage.inc"
-
-
-;---------------------------------------------------------------------------
-; 16x16 => 32 unsigned multiplication routine.
-
-.proc   _cc65_umul16x16r32
-
-        sta     ptr1
-        stx     ptr1+1
-        jsr     popax
-        jmp     umul16x16r32
-
-.endproc
-
-
diff --git a/libsrc/common/cc65_umul16x8r32.s b/libsrc/common/cc65_umul16x8r32.s
deleted file mode 100644 (file)
index 8af3493..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 2011-07-10
-;
-; CC65 library: 16x8 => 32 unsigned multiplication
-;
-
-        .export         _cc65_umul16x8r32
-        .import         umul8x16r24, popax
-
-        .include        "zeropage.inc"
-
-
-;---------------------------------------------------------------------------
-; 16x8 => 32 unsigned multiplication routine. We use 8x16 => 24 and clear
-; the high byte of the result
-
-.proc   _cc65_umul16x8r32
-
-        sta     ptr1
-        lda     #0
-        sta     sreg+1                  ; Clear high byte of result
-        jsr     popax
-        jmp     umul8x16r24
-
-.endproc
-
-
diff --git a/libsrc/common/cc65_umul8x8r16.s b/libsrc/common/cc65_umul8x8r16.s
deleted file mode 100644 (file)
index cf3b26b..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Oliver Schmidt, 2014-03-27
-;
-; CC65 library: 8x8 => 16 unsigned multiplication
-;
-
-        .export         _cc65_umul8x8r16
-        .import         umul8x8r16, popa, ptr1:zp
-
-
-;---------------------------------------------------------------------------
-; 8x8 => 16 unsigned multiplication routine.
-
-
-.proc   _cc65_umul8x8r16
-
-        sta     ptr1
-        jsr     popa
-        jmp     umul8x8r16
-
-.endproc
diff --git a/libsrc/common/chdir.s b/libsrc/common/chdir.s
deleted file mode 100644 (file)
index 3e638cb..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; int __fastcall__ chdir (const char* name);
-;
-
-        .export         _chdir
-
-        .import         __syschdir
-        .import         __mappederrno
-
-
-;--------------------------------------------------------------------------
-; The function calls __syschdir, which must check the directory, set it, and
-; copy it to __cwd if it is valid. The copycwd may be used for the latter.
-
-.proc   _chdir
-
-        jsr     __syschdir      ; Call the machine specific function
-        jmp     __mappederrno   ; Store into _oserror, set errno, return 0/-1
-
-.endproc
-
-
diff --git a/libsrc/common/copydata.s b/libsrc/common/copydata.s
deleted file mode 100644 (file)
index fec0204..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-;
-; Ullrich von Bassewitz, 1998-12-07, 2004-12-01
-;
-; Copy the data segment from the LOAD to the RUN location
-;
-
-        .export         copydata
-        .import         __DATA_LOAD__, __DATA_RUN__, __DATA_SIZE__
-        .importzp       ptr1, ptr2, tmp1
-
-
-copydata:
-        lda     #<__DATA_LOAD__         ; Source pointer
-        sta     ptr1
-        lda     #>__DATA_LOAD__
-        sta     ptr1+1
-
-        lda     #<__DATA_RUN__          ; Target pointer
-        sta     ptr2
-        lda     #>__DATA_RUN__
-        sta     ptr2+1
-
-        ldx     #<~__DATA_SIZE__
-        lda     #>~__DATA_SIZE__        ; Use -(__DATASIZE__+1)
-        sta     tmp1
-        ldy     #$00
-
-; Copy loop
-
-@L1:    inx
-        beq     @L3
-
-@L2:    lda     (ptr1),y
-        sta     (ptr2),y
-        iny
-        bne     @L1
-        inc     ptr1+1
-        inc     ptr2+1                  ; Bump pointers
-        bne     @L1                     ; Branch always (hopefully)
-
-; Bump the high counter byte
-
-@L3:    inc     tmp1
-        bne     @L2
-
-; Done
-
-        rts
-
diff --git a/libsrc/common/creat.s b/libsrc/common/creat.s
deleted file mode 100644 (file)
index a8b81f0..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-06-12
-;
-; int __fastcall__ creat (const char* name, unsigned mode);
-;
-
-        .export         _creat
-        .import         _open
-        .import         pushax
-
-        .include        "fcntl.inc"
-
-
-; The call
-;
-;       creat (name, mode);
-;
-; is equivalent to
-;
-;       open (name, O_CREAT | O_WRONLY | O_TRUNC, mode);
-;
-
-
-.proc   _creat
-
-        pha
-        txa
-        pha                             ; Save mode
-
-        lda     #<(O_CREAT | O_WRONLY | O_TRUNC)
-        ldx     #>(O_CREAT | O_WRONLY | O_TRUNC)
-        jsr     pushax
-
-        pla
-        tax
-        pla
-        jsr     pushax                  ; Push mode on argument stack
-
-        ldy     #6                      ; Number of argument bytes
-        jmp     _open
-
-.endproc
-
-
-
diff --git a/libsrc/common/ctime.s b/libsrc/common/ctime.s
deleted file mode 100644 (file)
index ace1c09..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 12.11.2002
-;
-; char* __fastcall__ ctime (time_t* timep);
-;
-
-        .export         _ctime
-        .import         _localtime, _asctime
-
-
-.proc   _ctime
-
-; return asctime (localtime (timep));
-
-        jsr     _localtime
-        jmp     _asctime
-
-.endproc
-
diff --git a/libsrc/common/divt.s b/libsrc/common/divt.s
deleted file mode 100644 (file)
index b532f6f..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-; divt.s
-;
-; 2002-10-22, Greg King
-;
-; This signed-division function returns both the quotient and the remainder,
-; in this structure:
-;
-; typedef struct {
-;     int rem, quot;
-; } div_t;
-;
-; div_t __fastcall__ div (int numer, int denom);
-;
-
-        .export         _div
-
-        .import         tosdivax, negax
-        .importzp       sreg, ptr1, tmp1
-
-_div:   jsr     tosdivax        ; Division-operator does most of the work
-        sta     sreg            ; Quotient is in sreg
-        stx     sreg+1
-        lda     ptr1            ; Unsigned remainder is in ptr1
-        ldx     ptr1+1
-
-; Adjust the sign of the remainder.
-; It must be the same as the sign of the dividend.
-;
-        bit     tmp1            ; Load high-byte of left argument
-        bpl     Pos             ; Jump if sign-of-result is positive
-        jmp     negax           ; Result is negative, adjust the sign
-
-Pos:    rts
-
diff --git a/libsrc/common/errno.s b/libsrc/common/errno.s
deleted file mode 100644 (file)
index f448c3c..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; 2003-08-12, Ullrich von Bassewitz
-; 2015-09-24, Greg King
-;
-; extern int _errno;
-; /* Library errors go here. */
-;
-
-        .include        "errno.inc"
-
-.bss
-
-__errno:
-        .word   0
diff --git a/libsrc/common/errormsg.c b/libsrc/common/errormsg.c
deleted file mode 100644 (file)
index 162dad0..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-** errormsg.c
-**
-** Ullrich von Bassewitz, 17.05.2000
-*/
-
-
-
-const char* const _sys_errlist[] = {
-    "Unknown error",                /* 0 */
-    "No such file or directory",    /* ENOENT */
-    "Out of memory",                /* ENOMEM */
-    "Permission denied",            /* EACCES */
-    "No such device",               /* ENODEV */
-    "Too many open files",          /* EMFILE */
-    "Device or resource busy",      /* EBUSY */
-    "Invalid argument",             /* EINVAL */
-    "No space left on device",      /* ENOSPC */
-    "File exists",                  /* EEXIST */
-    "Try again",                    /* EAGAIN */
-    "I/O error",                    /* EIO */
-    "Interrupted system call",      /* EINTR */
-    "Function not implemented",     /* ENOSYS */
-    "Illegal seek",                 /* ESPIPE */
-    "Range error",                  /* ERANGE */
-    "Bad file number",              /* EBADF */
-    "Unknown OS error code",        /* EUNKNOWN */
-};
-
-
diff --git a/libsrc/common/fclose.s b/libsrc/common/fclose.s
deleted file mode 100644 (file)
index 5365d70..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; int __fastcall__ fclose (FILE* f);
-; /* Close a file */
-;
-
-        .export         _fclose
-
-        .import         _close
-        .importzp       ptr1
-
-        .include        "errno.inc"
-        .include        "_file.inc"
-
-; ------------------------------------------------------------------------
-; Code
-
-.proc   _fclose
-
-        sta     ptr1
-        stx     ptr1+1          ; Store f
-
-; Check if the file is really open
-
-        ldy     #_FILE::f_flags
-        lda     (ptr1),y
-        and     #_FOPEN
-        bne     @L1
-
-; File is not open
-
-        lda     #EINVAL
-        jsr     __seterrno
-        lda     #$FF            ; Return -1
-        tax
-        rts
-
-; File is open. Reset the flags and close the file.
-
-@L1:    lda     #_FCLOSED
-        sta     (ptr1),y
-
-        ldy     #_FILE::f_fd
-        lda     (ptr1),y
-        ldx     #0
-        jmp     _close          ; Will set errno and return an error flag
-
-.endproc
-
diff --git a/libsrc/common/fdopen.c b/libsrc/common/fdopen.c
deleted file mode 100644 (file)
index a3e482f..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-** fdopen.c
-**
-** Ullrich von Bassewitz, 17.06.1998
-*/
-
-
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <errno.h>
-#include "_file.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-FILE* __fastcall__ fdopen (int handle, const char* /*mode*/)
-{
-    register FILE* f;
-
-    /* Find a free file slot */
-    if ((f = _fdesc ())) {
-        /* Insert the handle, and return the descriptor */
-        f->f_fd    = handle;
-        f->f_flags = _FOPEN;
-    } else {
-        /* No slots */
-        _seterrno (EMFILE);      /* Too many files */
-    }
-
-    /* Return the file descriptor */
-    return f;
-}
-
-
-
-
diff --git a/libsrc/common/fgetc.c b/libsrc/common/fgetc.c
deleted file mode 100644 (file)
index b4ba18d..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
-** fgetc.c
-**
-** (C) Copyright 1998, 2002 Ullrich von Bassewitz (uz@cc65.org)
-**
-*/
-
-
-
-#include <stdio.h>
-#include <unistd.h>
-#include "_file.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int __fastcall__ fgetc (register FILE* f)
-{
-    unsigned char c;
-
-    /* Check if the file is open or if there is an error condition */
-    if ((f->f_flags & _FOPEN) == 0 || (f->f_flags & (_FERROR | _FEOF)) != 0) {
-        return EOF;
-    }
-
-    /* If we have a pushed back character, return it */
-    if (f->f_flags & _FPUSHBACK) {
-        f->f_flags &= ~_FPUSHBACK;
-        return f->f_pushback;
-    }
-
-    /* Read one byte */
-    switch (read (f->f_fd, &c, 1)) {
-
-        case -1:
-            /* Error */
-            f->f_flags |= _FERROR;
-            return EOF;
-
-        case 0:
-            /* EOF */
-            f->f_flags |= _FEOF;
-            return EOF;
-
-        default:
-            /* Char read */
-            return c;
-
-    }
-}
-
-
-
diff --git a/libsrc/common/fgetpos.c b/libsrc/common/fgetpos.c
deleted file mode 100644 (file)
index 67fee59..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-** fgetpos.c
-**
-** Christian Groessler, 07-Aug-2000
-*/
-
-
-
-#include <stdio.h>
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int __fastcall__ fgetpos (FILE* f, fpos_t* pos)
-{
-    *pos = ftell (f);
-
-    if (*pos != -1)
-        return 0;
-    return -1;
-}
-
diff --git a/libsrc/common/fgets.c b/libsrc/common/fgets.c
deleted file mode 100644 (file)
index 21a991f..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-** Ullrich von Bassewitz, 11.08.1998
-**
-** char* fgets (char* s, int size, FILE* f);
-*/
-
-
-
-#include <stdio.h>
-#include <errno.h>
-#include "_file.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-char* __fastcall__ fgets (char* s, unsigned size, register FILE* f)
-{
-    register char* p = s;
-    unsigned i;
-    int c;
-
-    if (size == 0) {
-        /* Invalid size */
-        return (char*) _seterrno (EINVAL);
-    }
-
-    /* Read input */
-    i = 0;
-    while (--size) {
-
-        /* Get next character */
-        if ((c = fgetc (f)) == EOF) {
-            /* Error or EOF */
-            if ((f->f_flags & _FERROR) != 0 || i == 0) {
-                /* ERROR or EOF on first char */
-                *p = '\0';
-                return 0;
-            } else {
-                /* EOF with data already read */
-                break;
-            }
-        }
-
-        /* One char more */
-        *p = c;
-        ++p;
-        ++i;
-
-        /* Stop at end of line */
-        if ((char)c == '\n') {
-            break;
-        }
-    }
-
-    /* Terminate the string */
-    *p = '\0';
-
-    /* Done */
-    return s;
-}
-
-
-
diff --git a/libsrc/common/fmisc.s b/libsrc/common/fmisc.s
deleted file mode 100644 (file)
index 156a80d..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.05.1998
-;
-; Several small file stream functions
-;
-
-        .export         _clearerr, _feof, _ferror, _fileno, _fflush
-        .import         return0
-        .importzp       ptr1
-
-        .include        "_file.inc"
-        .include        "errno.inc"
-
-;
-; Get the FILE* parameter, check if the file is open. Returns zero in A
-; and zero flag set in case of an error.
-
-.proc   getf
-        sta     ptr1
-        stx     ptr1+1
-        ldy     #_FILE::f_flags
-        lda     (ptr1),y        ; get f->f_flags
-        and     #_FOPEN         ; file open?
-        rts
-.endproc
-
-;
-; void clearerr (FILE* f);
-;
-
-.proc   _clearerr
-        jsr     getf
-        beq     err
-        lda     (ptr1),y
-        and     #<~(_FEOF | _FERROR)
-        sta     (ptr1),y
-err:    rts
-.endproc
-
-;
-; int feof (FILE* f);
-;
-
-.proc   _feof
-        jsr     getf
-        beq     @L1             ; Return 0 on error
-        lda     (ptr1),y
-        and     #_FEOF
-@L1:    ldx     #0
-        rts
-.endproc
-
-;
-; int ferror (FILE* f);
-;
-
-.proc   _ferror
-        jsr     getf
-        beq     @L1             ; Return 0 on error
-        lda     (ptr1),y
-        and     #_FERROR
-@L1:    ldx     #0
-        rts
-.endproc
-
-;
-; int fileno (FILE* f);
-;
-
-.proc   _fileno
-        jsr     getf
-        beq     error
-        ldy     #_FILE::f_fd
-        lda     (ptr1),y
-        ldx     #0
-        rts
-
-; If the file is not valid, fileno must set errno and return -1
-
-error:  lda     #<EBADF
-        jsr     __seterrno
-        lda     #$FF
-        tax
-        rts
-.endproc
-
-;
-; int __fastcall__ fflush (FILE* f);
-;
-
-_fflush = return0
-
-
diff --git a/libsrc/common/fopen.s b/libsrc/common/fopen.s
deleted file mode 100644 (file)
index d4d94ac..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; FILE* __fastcall__ fopen (const char* name, const char* mode)
-; /* Open a file */
-;
-
-        .export         _fopen
-
-        .import         __fopen, __fdesc
-        .import         pushax, return0
-
-        .include        "errno.inc"
-
-
-; ------------------------------------------------------------------------
-; Code
-
-.proc   _fopen
-
-; Bring the mode parameter on the stack
-
-        jsr     pushax
-
-; Allocate a new file stream
-
-        jsr     __fdesc
-
-; Check if we have a stream
-
-        cmp     #$00
-        bne     @L1
-        cpx     #$00
-        bne     @L1
-
-; Failed to allocate a file stream
-
-        lda     #EMFILE
-        jsr     __seterrno      ; Set __errno, will return 0 in A
-        tax
-        rts                     ; Return zero
-
-; Open the file and return the file descriptor. All arguments are already
-; in place: name and mode on the stack, and f in a/x
-
-@L1:    jmp     __fopen
-
-.endproc
-
diff --git a/libsrc/common/fprintf.s b/libsrc/common/fprintf.s
deleted file mode 100644 (file)
index 1582e65..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-;
-; int fprintf (FILE* f, const char* Format, ...);
-;
-; Ullrich von Bassewitz, 1.12.2000
-;
-
-        .export         _fprintf
-        .import         addysp, decsp4, _vfprintf
-        .importzp       sp, ptr1
-
-        .macpack        generic
-
-; ----------------------------------------------------------------------------
-; Data
-
-.bss
-
-ParamSize:      .res    1               ; Number of parameter bytes
-
-; ----------------------------------------------------------------------------
-; Code
-
-.code
-
-
-_fprintf:
-        sty     ParamSize               ; Number of param bytes passed in Y
-
-; We have to push f and format, both in the order they already have on stack.
-; To make this somewhat more efficient, we will create space on the stack and
-; then do a copy of the complete block instead of pushing each parameter
-; separately. Since the size of the arguments passed is the same as the size
-; of the fixed arguments, this will allow us to calculate the pointer to the
-; fixed size arguments easier (they're just ParamSize bytes away).
-
-        jsr     decsp4
-
-; Calculate a pointer to the Format argument
-
-        lda     ParamSize
-        add     sp
-        sta     ptr1
-        ldx     sp+1
-        bcc     @L1
-        inx
-@L1:    stx     ptr1+1
-
-; Now copy both, f and format
-
-        ldy     #4-1
-@L2:    lda     (ptr1),y
-        sta     (sp),y
-        dey
-        bpl     @L2
-
-; Load va_list (last and __fastcall__ parameter to vfprintf)
-
-        lda     ptr1
-        ldx     ptr1+1
-
-; Call vfprintf
-
-        jsr     _vfprintf
-
-; Cleanup the stack. We will return what we got from vfprintf
-
-        ldy     ParamSize
-        jmp     addysp
-
diff --git a/libsrc/common/fputc.c b/libsrc/common/fputc.c
deleted file mode 100644 (file)
index b623949..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-** fputc.c
-**
-** Ullrich von Bassewitz, 02.06.1998
-*/
-
-
-
-#include <stdio.h>
-#include <unistd.h>
-#include "_file.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int __fastcall__ fputc (int c, register FILE* f)
-{
-    /* Check if the file is open or if there is an error condition */
-    if ((f->f_flags & _FOPEN) == 0 || (f->f_flags & (_FERROR | _FEOF)) != 0) {
-        goto ReturnEOF;
-    }
-
-    /* Write the byte */
-    if (write (f->f_fd, &c, 1) != 1) {
-        /* Error */
-        f->f_flags |= _FERROR;
-ReturnEOF:
-        return EOF;
-    }
-
-    /* Return the byte written */
-    return c & 0xFF;
-}
-
-
-
diff --git a/libsrc/common/fputs.c b/libsrc/common/fputs.c
deleted file mode 100644 (file)
index be476a3..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-** int fputs (const char* s, FILE* f);
-**
-** Ullrich von Bassewitz, 11.08.1998
-*/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include "_file.h"
-
-
-
-int __fastcall__ fputs (const char* s, register FILE* f)
-{
-    /* Check if the file is open or if there is an error condition */
-    if ((f->f_flags & _FOPEN) == 0 || (f->f_flags & (_FERROR | _FEOF)) != 0) {
-        return EOF;
-    }
-
-    /* Write the string */
-    return write (f->f_fd, s, strlen (s));
-}
-
-
-
diff --git a/libsrc/common/fread.s b/libsrc/common/fread.s
deleted file mode 100644 (file)
index 91d6929..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-11-22, 2004-05-14
-;
-; size_t __fastcall__ fread (void* buf, size_t size, size_t count, FILE* file);
-; /* Read from a file */
-;
-
-        .export         _fread
-
-        .import         _read
-        .import         pusha0, pushax
-        .import         incsp4, incsp6
-        .import         ldaxysp, ldax0sp
-        .import         pushwysp
-        .import         tosumulax, tosudivax
-
-        .importzp       ptr1, sp
-
-        .include        "errno.inc"
-        .include        "_file.inc"
-
-        .macpack        generic
-
-; ------------------------------------------------------------------------
-; Code
-
-.proc   _fread
-
-; We will place a pointer to the file descriptor into the register bank
-
-        .import regbank: zp
-        file    = regbank
-
-; Save two bytes from the register bank
-
-        ldy     file+0
-        sty     save
-        ldy     file+1
-        sty     save+1
-
-; Save the file pointer into the register bank
-
-        sta     file
-        stx     file+1
-
-; Check if the file is open
-
-        ldy     #_FILE::f_flags
-        lda     (file),y
-        and     #_FOPEN                 ; Is the file open?
-        beq     @L1                     ; Branch if no
-
-; Check if the stream is in an error state
-
-        lda     (file),y                ; get file->f_flags again
-        and     #_FERROR
-        beq     @L2
-
-; File not open or in error state
-
-@L1:    lda     #EINVAL
-        jsr     __seterrno              ; Set __errno, return zero in A
-        tax                             ; a/x = 0
-        jmp     @L99                    ; Bail out
-
-; Remember if we have a pushed back character and reset the flag.
-
-@L2:    tax                             ; X = 0
-        lda     (file),y
-        and     #_FPUSHBACK
-        beq     @L3
-        lda     (file),y
-        and     #<~_FPUSHBACK
-        sta     (file),y                ; file->f_flags &= ~_FPUSHBACK;
-        inx                             ; X = 1
-@L3:    stx     pb
-
-; Build the stackframe for read()
-
-        ldy     #_FILE::f_fd
-        lda     (file),y
-        jsr     pusha0                  ; file->f_fd
-
-        ldy     #9
-        jsr     pushwysp                ; buf
-
-; Stack is now: buf/size/count/file->fd/buf
-; Calculate the number of bytes to read: count * size
-
-        ldy     #7
-        jsr     pushwysp                ; count
-        ldy     #9
-        jsr     ldaxysp                 ; Get size
-        jsr     tosumulax               ; count * size -> a/x
-
-; Check if count is zero.
-
-        cmp     #0
-        bne     @L4
-        cpx     #0
-        bne     @L4
-
-; Count is zero, drop the stack frame just built and return count
-
-        jsr     incsp4                  ; Drop file->fd/buf
-        jsr     ldax0sp                 ; Get count
-        jmp     @L99                    ; Bail out
-
-; Check if we have a buffered char from ungetc
-
-@L4:    ldy     pb
-        beq     @L6
-
-; We have a buffered char from ungetc. Save the low byte from count
-
-        pha
-
-; Copy the buffer pointer into ptr1, and increment the pointer value passed
-; to read() by one, so read() starts to store data at buf+1.
-
-        ldy     #0
-        lda     (sp),y
-        sta     ptr1
-        add     #1
-        sta     (sp),y
-        iny
-        lda     (sp),y
-        sta     ptr1+1
-        adc     #0
-        sta     (sp),y                  ; ptr1 = buf++;
-
-; Get the buffered character and place it as first character into the read
-; buffer.
-
-        ldy     #_FILE::f_pushback
-        lda     (file),y
-        ldy     #0
-        sta     (ptr1),y                ; *buf = file->f_pushback;
-
-; Restore the low byte of count and decrement count by one. This may result
-; in count being zero, so check for that.
-
-        pla
-        sub     #1
-        bcs     @L5
-        dex
-@L5:    cmp     #0
-        bne     @L6
-        cpx     #0
-        beq     @L8
-
-; Call read(). This will leave the original 3 params on the stack
-
-@L6:    jsr     _read
-
-; Check for errors in read
-
-        cpx     #$FF
-        bne     @L8
-        cmp     #$FF
-        bne     @L8
-
-; Error in read. Set the stream error flag and bail out. errno has already
-; been set by read(). On entry to label @L7, X must be zero. 
-
-        inx                             ; X = 0
-        lda     #_FERROR
-@L7:    ldy     #_FILE::f_flags         ; X must be zero here!
-        ora     (file),y
-        sta     (file),y
-        txa                             ; a/x = 0
-        beq     @L99                    ; Return zero
-
-; Read was ok, account for the pushed back character (if any).
-
-@L8:    add     pb
-        bcc     @L9
-        inx
-
-; Check for end of file.
-
-@L9:    cmp     #0                      ; Zero bytes read?
-        bne     @L10
-        cpx     #0
-        bne     @L10
-
-; Zero bytes read. Set the EOF flag
-
-        lda     #_FEOF
-        bne     @L7                     ; Set flag and return zero
-
-; Return the number of items successfully read. Since we've checked for
-; bytes == 0 above, size cannot be zero here, so the division is safe.
-
-@L10:   jsr     pushax                  ; Push number of bytes read
-        ldy     #5
-        jsr     ldaxysp                 ; Get size
-        jsr     tosudivax               ; bytes / size -> a/x
-@L99:   ldy     save                    ; Restore zp register
-        sty     file
-        ldy     save+1
-        sty     file+1
-        jmp     incsp6                  ; Drop params, return
-
-.endproc
-
-; ------------------------------------------------------------------------
-; Data
-
-.bss
-save:   .res    2
-pb:     .res    1
-
diff --git a/libsrc/common/free.s b/libsrc/common/free.s
deleted file mode 100644 (file)
index 00b5e63..0000000
+++ /dev/null
@@ -1,544 +0,0 @@
-;
-; Ullrich von Bassewitz, 19.03.2000
-;
-; Free a block on the heap.
-;
-; void __fastcall__ free (void* block);
-;
-;
-; C implementation was:
-;
-; void free (void* block)
-; /* Release an allocated memory block. The function will accept NULL pointers
-; ** (and do nothing in this case).
-; */
-; {
-;     unsigned* b;
-;     unsigned size;
-;     struct freeblock* f;
-;
-;
-;     /* Allow NULL arguments */
-;     if (block == 0) {
-;         return;
-;     }
-;
-;     /* Get a pointer to the real memory block, then get the size */
-;     b = (unsigned*) block;
-;     size = *--b;
-;
-;     /* Check if the block is at the top of the heap */
-;     if (((int) b) + size == (int) _hptr) {
-;
-;         /* Decrease _hptr to release the block */
-;         _hptr = (unsigned*) (((int) _hptr) - size);
-;
-;         /* Check if the last block in the freelist is now at heap top. If so,
-;         ** remove this block from the freelist.
-;         */
-;         if (f = _hlast) {
-;             if (((int) f) + f->size == (int) _hptr) {
-;                 /* Remove the last block */
-;                 _hptr = (unsigned*) (((int) _hptr) - f->size);
-;                 if (_hlast = f->prev) {
-;                   /* Block before is now last block */
-;                     f->prev->next = 0;
-;                 } else {
-;                     /* The freelist is empty now */
-;                     _hfirst = 0;
-;                 }
-;             }
-;         }
-;
-;     } else {
-;
-;               /* Not at heap top, enter the block into the free list */
-;       _hadd (b, size);
-;
-;     }
-; }
-;
-
-        .importzp       ptr1, ptr2, ptr3, ptr4
-        .export         _free, heapadd
-
-        .include        "_heap.inc"
-
-        .macpack        generic
-
-;-----------------------------------------------------------------------------
-; Code
-
-_free:  sta     ptr2
-        stx     ptr2+1                  ; Save block
-
-; Is the argument NULL? If so, bail out.
-
-        ora     ptr2+1                  ; Is the argument NULL?
-        bne     @L1                     ; Jump if no
-        rts                             ; Bail out if yes
-
-; There's a pointer below the user space that points to the real start of the
-; raw block. We will decrement the high pointer byte and use an offset of 254
-; to save some code. The first word of the raw block is the total size of the
-; block. Remember the block size in ptr1.
-
-@L1:    dec     ptr2+1                  ; Decrement high pointer byte
-        ldy     #$FF
-        lda     (ptr2),y                ; High byte of real block address
-        tax
-        dey
-        lda     (ptr2),y
-        stx     ptr2+1
-        sta     ptr2                    ; Set ptr2 to start of real block
-
-        ldy     #usedblock::size+1
-        lda     (ptr2),y                ; High byte of size
-        sta     ptr1+1                  ; Save it
-        dey
-        lda     (ptr2),y
-        sta     ptr1
-
-; Check if the block is on top of the heap
-
-        add     ptr2
-        tay
-        lda     ptr2+1
-        adc     ptr1+1
-        cpy     __heapptr
-        bne     heapadd                 ; Add to free list
-        cmp     __heapptr+1
-        bne     heapadd
-
-; The pointer is located at the heap top. Lower the heap top pointer to
-; release the block.
-
-@L3:    lda     ptr2
-        sta     __heapptr
-        lda     ptr2+1
-        sta     __heapptr+1
-
-; Check if the last block in the freelist is now at heap top. If so, remove
-; this block from the freelist.
-
-        lda     __heaplast
-        sta     ptr1
-        ora     __heaplast+1
-        beq     @L9                     ; Jump if free list empty
-        lda     __heaplast+1
-        sta     ptr1+1                  ; Pointer to last block now in ptr1
-
-        ldy     #freeblock::size
-        lda     (ptr1),y                ; Low byte of block size
-        add     ptr1
-        tax
-        iny                             ; High byte of block size
-        lda     (ptr1),y
-        adc     ptr1+1
-
-        cmp     __heapptr+1
-        bne     @L9                     ; Jump if last block not on top of heap
-        cpx     __heapptr
-        bne     @L9                     ; Jump if last block not on top of heap
-
-; Remove the last block
-
-        lda     ptr1
-        sta     __heapptr
-        lda     ptr1+1
-        sta     __heapptr+1
-
-; Correct the next pointer of the now last block
-
-        ldy     #freeblock::prev+1      ; Offset of ->prev field
-        lda     (ptr1),y
-        sta     ptr2+1                  ; Remember f->prev in ptr2
-        sta     __heaplast+1
-        dey
-        lda     (ptr1),y
-        sta     ptr2                    ; Remember f->prev in ptr2
-        sta     __heaplast
-        ora     __heaplast+1            ; -> prev == 0?
-        bne     @L8                     ; Jump if free list not empty
-
-; Free list is now empty (A = 0)
-
-        sta     __heapfirst
-        sta     __heapfirst+1
-
-; Done
-
-@L9:    rts
-
-; Block before is now last block. ptr2 points to f->prev.
-
-@L8:    lda     #$00
-        dey                             ; Points to high byte of ->next
-        sta     (ptr2),y
-        dey                             ; Low byte of f->prev->next
-        sta     (ptr2),y
-        rts                             ; Done
-
-; The block is not on top of the heap. Add it to the free list. This was
-; formerly a separate function called __hadd that was implemented in C as
-; shown here:
-;
-; void _hadd (void* mem, size_t size)
-; /* Add an arbitrary memory block to the heap. This function is used by
-; ** free(), but it does also allow usage of otherwise unused memory
-; ** blocks as heap space. The given block is entered in the free list
-; ** without any checks, so beware!
-; */
-; {
-;     struct freeblock* f;
-;     struct freeblock* left;
-;     struct freeblock* right;
-;
-;     if (size >= sizeof (struct freeblock)) {
-;
-;       /* Set the admin data */
-;       f = (struct freeblock*) mem;
-;       f->size = size;
-;
-;       /* Check if the freelist is empty */
-;       if (_hfirst == 0) {
-;
-;           /* The freelist is empty until now, insert the block */
-;           f->prev = 0;
-;           f->next = 0;
-;           _hfirst = f;
-;           _hlast  = f;
-;
-;       } else {
-;
-;           /* We have to search the free list. As we are doing so, we check
-;           ** if it is possible to combine this block with another already
-;           ** existing block. Beware: The block may be the "missing link"
-;           ** between *two* other blocks.
-;           */
-;           left = 0;
-;           right = _hfirst;
-;           while (right && f > right) {
-;               left = right;
-;               right = right->next;
-;           }
-;
-;
-;           /* OK, the current block must be inserted between left and right (but
-;           ** beware: one of the two may be zero!). Also check for the condition
-;           ** that we have to merge two or three blocks.
-;           */
-;           if (right) {
-;               /* Check if we must merge the block with the right one */
-;                       if (((unsigned) f) + size == (unsigned) right) {
-;                   /* Merge with the right block */
-;                   f->size += right->size;
-;                   if (f->next = right->next) {
-;                               f->next->prev = f;
-;                   } else {
-;                       /* This is now the last block */
-;                       _hlast = f;
-;                   }
-;               } else {
-;                   /* No merge, just set the link */
-;                   f->next = right;
-;                   right->prev = f;
-;               }
-;           } else {
-;               f->next = 0;
-;               /* Special case: This is the new freelist end */
-;               _hlast = f;
-;           }
-;           if (left) {
-;               /* Check if we must merge the block with the left one */
-;               if ((unsigned) f == ((unsigned) left) + left->size) {
-;                   /* Merge with the left block */
-;                   left->size += f->size;
-;                   if (left->next = f->next) {
-;                       left->next->prev = left;
-;                   } else {
-;                       /* This is now the last block */
-;                       _hlast = left;
-;                   }
-;               } else {
-;                   /* No merge, just set the link */
-;                   left->next = f;
-;                   f->prev = left;
-;               }
-;           } else {
-;               f->prev = 0;
-;               /* Special case: This is the new freelist start */
-;               _hfirst = f;
-;           }
-;       }
-;     }
-; }
-;
-; 
-; On entry, ptr2 must contain a pointer to the block, which must be at least
-; HEAP_MIN_BLOCKSIZE bytes in size, and ptr1 contains the total size of the
-; block.
-;
-
-; Check if the free list is empty, storing _hfirst into ptr3 for later
-
-heapadd:
-        lda     __heapfirst
-        sta     ptr3
-        lda     __heapfirst+1
-        sta     ptr3+1
-        ora     ptr3
-        bne     SearchFreeList
-
-; The free list is empty, so this is the first and only block. A contains
-; zero if we come here.
-
-        ldy     #freeblock::next-1
-@L2:    iny                             ; f->next = f->prev = 0;
-        sta     (ptr2),y
-        cpy     #freeblock::prev+1      ; Done?
-        bne     @L2
-
-        lda     ptr2
-        ldx     ptr2+1
-        sta     __heapfirst
-        stx     __heapfirst+1           ; _heapfirst = f;
-        sta     __heaplast
-        stx     __heaplast+1            ; _heaplast = f;
-
-        rts                             ; Done
-
-; We have to search the free list. As we are doing so, check if it is possible
-; to combine this block with another, already existing block. Beware: The
-; block may be the "missing link" between two blocks.
-; ptr3 contains _hfirst (the start value of the search) when execution reaches
-; this point, Y contains size+1. We do also know that _heapfirst (and therefore
-; ptr3) is not zero on entry.
-
-SearchFreeList:
-        lda     #0
-        sta     ptr4
-        sta     ptr4+1                  ; left = 0;
-        ldy     #freeblock::next+1
-        ldx     ptr3
-
-@Loop:  lda     ptr3+1                  ; High byte of right
-        cmp     ptr2+1
-        bne     @L1
-        cpx     ptr2
-        beq     @L2
-@L1:    bcs     CheckRightMerge
-
-@L2:    stx     ptr4                    ; left = right;
-        sta     ptr4+1
-
-        dey                             ; Points to next
-        lda     (ptr3),y                ; right = right->next;
-        tax
-        iny                             ; Points to next+1
-        lda     (ptr3),y
-        stx     ptr3
-        sta     ptr3+1
-        ora     ptr3
-        bne     @Loop
-
-; If we come here, the right pointer is zero, so we don't need to check for
-; a merge. The new block is the new freelist end.
-; A is zero when we come here, Y points to next+1
-
-        sta     (ptr2),y                ; Clear high byte of f->next
-        dey
-        sta     (ptr2),y                ; Clear low byte of f->next
-
-        lda     ptr2                    ; _heaplast = f;
-        sta     __heaplast
-        lda     ptr2+1
-        sta     __heaplast+1
-
-; Since we have checked the case that the freelist is empty before, if the
-; right pointer is NULL, the left *cannot* be NULL here. So skip the
-; pointer check and jump right to the left block merge
-
-        jmp     CheckLeftMerge2
-
-; The given block must be inserted between left and right, and right is not
-; zero.
-
-CheckRightMerge:
-        lda     ptr2
-        add     ptr1                    ; f + size
-        tax
-        lda     ptr2+1
-        adc     ptr1+1
-
-        cpx     ptr3
-        bne     NoRightMerge
-        cmp     ptr3+1
-        bne     NoRightMerge
-
-; Merge with the right block. Do f->size += right->size;
-
-        ldy     #freeblock::size
-        lda     ptr1
-        add     (ptr3),y
-        sta     (ptr2),y
-        iny                             ; Points to size+1
-        lda     ptr1+1
-        adc     (ptr3),y
-        sta     (ptr2),y
-
-; Set f->next = right->next and remember f->next in ptr1 (we don't need the
-; size stored there any longer)
-
-        iny                             ; Points to next
-        lda     (ptr3),y                ; Low byte of right->next
-        sta     (ptr2),y                ; Store to low byte of f->next
-        sta     ptr1
-        iny                             ; Points to next+1
-        lda     (ptr3),y                ; High byte of right->next
-        sta     (ptr2),y                ; Store to high byte of f->next
-        sta     ptr1+1
-        ora     ptr1
-        beq     @L1                     ; Jump if f->next zero
-
-; f->next->prev = f;
-
-        iny                             ; Points to prev
-        lda     ptr2                    ; Low byte of f
-        sta     (ptr1),y                ; Low byte of f->next->prev
-        iny                             ; Points to prev+1
-        lda     ptr2+1                  ; High byte of f
-        sta     (ptr1),y                ; High byte of f->next->prev
-        jmp     CheckLeftMerge          ; Done
-
-; f->next is zero, this is now the last block
-
-@L1:    lda     ptr2                    ; _heaplast = f;
-        sta     __heaplast
-        lda     ptr2+1
-        sta     __heaplast+1
-        jmp     CheckLeftMerge
-
-; No right merge, just set the link.
-
-NoRightMerge:
-        ldy     #freeblock::next        ; f->next = right;
-        lda     ptr3
-        sta     (ptr2),y
-        iny                             ; Points to next+1
-        lda     ptr3+1
-        sta     (ptr2),y
-
-        iny                             ; Points to prev
-        lda     ptr2                    ; right->prev = f;
-        sta     (ptr3),y
-        iny                             ; Points to prev+1
-        lda     ptr2+1
-        sta     (ptr3),y
-
-; Check if the left pointer is zero
-
-CheckLeftMerge:
-        lda     ptr4                    ; left == NULL?
-        ora     ptr4+1
-        bne     CheckLeftMerge2         ; Jump if there is a left block
-
-; We don't have a left block, so f is actually the new freelist start
-
-        ldy     #freeblock::prev
-        sta     (ptr2),y                ; f->prev = 0;
-        iny
-        sta     (ptr2),y
-
-        lda     ptr2                    ; _heapfirst = f;
-        sta     __heapfirst
-        lda     ptr2+1
-        sta     __heapfirst+1
-
-        rts                             ; Done
-
-; Check if the left block is adjacent to the following one
-
-CheckLeftMerge2:
-        ldy     #freeblock::size        ; Calculate left + left->size
-        lda     (ptr4),y                ; Low byte of left->size
-        add     ptr4
-        tax
-        iny                             ; Points to size+1
-        lda     (ptr4),y                ; High byte of left->size
-        adc     ptr4+1
-
-        cpx     ptr2
-        bne     NoLeftMerge
-        cmp     ptr2+1
-        bne     NoLeftMerge             ; Jump if blocks not adjacent
-
-; Merge with the left block. Do left->size += f->size;
-
-        dey                             ; Points to size
-        lda     (ptr4),y
-        add     (ptr2),y
-        sta     (ptr4),y
-        iny                             ; Points to size+1
-        lda     (ptr4),y
-        adc     (ptr2),y
-        sta     (ptr4),y
-
-; Set left->next = f->next and remember left->next in ptr1.
-
-        iny                             ; Points to next
-        lda     (ptr2),y                ; Low byte of f->next
-        sta     (ptr4),y
-        sta     ptr1
-        iny                             ; Points to next+1
-        lda     (ptr2),y                ; High byte of f->next
-        sta     (ptr4),y
-        sta     ptr1+1
-        ora     ptr1                    ; left->next == NULL?
-        beq     @L1
-
-; Do left->next->prev = left
-
-        iny                             ; Points to prev
-        lda     ptr4                    ; Low byte of left
-        sta     (ptr1),y
-        iny
-        lda     ptr4+1                  ; High byte of left
-        sta     (ptr1),y
-        rts                             ; Done
-
-; This is now the last block, do _heaplast = left
-
-@L1:    lda     ptr4
-        sta     __heaplast
-        lda     ptr4+1
-        sta     __heaplast+1
-        rts                             ; Done
-
-; No merge of the left block, just set the link. Y points to size+1 if
-; we come here. Do left->next = f.
-
-NoLeftMerge:
-        iny                             ; Points to next
-        lda     ptr2                    ; Low byte of left
-        sta     (ptr4),y
-        iny
-        lda     ptr2+1                  ; High byte of left
-        sta     (ptr4),y
-
-; Do f->prev = left
-
-        iny                             ; Points to prev
-        lda     ptr4
-        sta     (ptr2),y
-        iny
-        lda     ptr4+1
-        sta     (ptr2),y
-        rts                             ; Done
-
-
-
-
-
-
-
diff --git a/libsrc/common/freopen.c b/libsrc/common/freopen.c
deleted file mode 100644 (file)
index d79d3cf..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-** freopen.c
-**
-** Ullrich von Bassewitz, 17.06.1998
-*/
-
-
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <errno.h>
-#include "_file.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-FILE* __fastcall__ freopen (const char* name, const char* mode, FILE* f)
-{
-    /* Check if the file is open, if so, close it */
-    if ((f->f_flags & _FOPEN) == 0) {
-        /* File is not open */
-        return (FILE*) _seterrno (EINVAL);      /* File not input */
-    }
-
-    /* Close the file. Don't bother setting the flag, it will get
-    ** overwritten by _fopen.
-    */
-    if (close (f->f_fd) < 0) {
-        /* An error occured, errno is already set */
-        return 0;
-    }
-
-    /* Open the file and return the descriptor */
-    return _fopen (name, mode, f);
-}
-
-
-
diff --git a/libsrc/common/fscanf.s b/libsrc/common/fscanf.s
deleted file mode 100644 (file)
index a3d1ec0..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-;
-; int fscanf (FILE* f, const char* format, ...);
-;
-; Ullrich von Bassewitz, 2004-11-28
-;
-
-        .export         _fscanf
-        .import         addysp, decsp4, _vfscanf
-        .importzp       sp, ptr1
-
-        .macpack        generic
-
-; ----------------------------------------------------------------------------
-; Data
-
-.bss
-
-ParamSize:      .res    1               ; Number of parameter bytes
-
-; ----------------------------------------------------------------------------
-; int fscanf (FILE* f, const char* format, ...)
-; /* Standard C function */
-; {
-;     va_list ap;
-;
-;     /* Setup for variable arguments */
-;     va_start (ap, format);
-;
-;     /* Call vfscanf(). Since we know that va_end won't do anything, we will
-;     ** save the call and return the value directly.
-;     */
-;     return vfscanf (f, format, ap);
-; }
-;
-
-.code
-
-_fscanf:
-        sty     ParamSize               ; Number of param bytes passed in Y
-
-; We have to push f and format, both in the order they already have on stack.
-; To make this somewhat more efficient, we will create space on the stack and
-; then do a copy of the complete block instead of pushing each parameter
-; separately. Since the size of the arguments passed is the same as the size
-; of the fixed arguments, this will allow us to calculate the pointer to the
-; fixed size arguments easier (they're just ParamSize bytes away).
-
-        jsr     decsp4
-
-; Calculate a pointer to the Format argument
-
-        lda     ParamSize
-        add     sp
-        sta     ptr1
-        ldx     sp+1
-        bcc     @L1
-        inx
-@L1:    stx     ptr1+1
-
-; Now copy both, f and format
-
-        ldy     #4-1
-@L2:    lda     (ptr1),y
-        sta     (sp),y
-        dey
-        bpl     @L2
-
-; Load va_list (last and __fastcall__ parameter to vfscanf)
-
-        lda     ptr1
-        ldx     ptr1+1
-
-; Call vfscanf
-
-        jsr     _vfscanf
-
-; Cleanup the stack. We will return what we got from vfscanf
-
-        ldy     ParamSize
-        jmp     addysp
-
diff --git a/libsrc/common/fseek.c b/libsrc/common/fseek.c
deleted file mode 100644 (file)
index 5ad511e..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
-** fseek.c
-**
-** Christian Groessler, 2000-08-07
-** Ullrich von Bassewitz, 2004-05-12
-*/
-
-
-
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include "_file.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int __fastcall__ fseek (register FILE* f, long offset, int whence)
-{
-    long res;
-
-    /* Is the file open? */
-    if ((f->f_flags & _FOPEN) == 0) {
-        _seterrno (EINVAL);             /* File not open */
-        return -1;
-    }
-
-    /* If we have a pushed back character, and whence is relative to the
-    ** current position, correct the offset.
-    */
-    if ((f->f_flags & _FPUSHBACK) && whence == SEEK_CUR) {
-        --offset;
-    }
-
-    /* Do the seek */
-    res = lseek(f->f_fd, offset, whence);
-
-    /* If the seek was successful. Discard any effects of the ungetc function,
-    ** and clear the end-of-file indicator. Otherwise set the error indicator
-    ** on the stream, and return -1. We will check for >= 0 here, because that
-    ** saves some code, and we don't have files with 2 gigabytes in size
-    ** anyway:-)
-    */
-    if (res >= 0) {
-        f->f_flags &= ~(_FEOF | _FPUSHBACK);
-        return 0;
-    } else {
-        f->f_flags |= _FERROR;
-        return -1;
-    }
-}
-
diff --git a/libsrc/common/fsetpos.c b/libsrc/common/fsetpos.c
deleted file mode 100644 (file)
index 14690f5..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-** fsetpos.c
-**
-** Christian Groessler, 07-Aug-2000
-*/
-
-
-
-#include <stdio.h>
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int __fastcall__ fsetpos (FILE* f, const fpos_t *pos)
-{
-    return fseek (f, (fpos_t)*pos, SEEK_SET);
-}
-
-    
diff --git a/libsrc/common/ftell.c b/libsrc/common/ftell.c
deleted file mode 100644 (file)
index 3a4134c..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-** ftell.c
-**
-** Christian Groessler, 2000-08-07
-** Ullrich von Bassewitz, 2004-05-13
-*/
-
-
-
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include "_file.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-long __fastcall__ ftell (register FILE* f)
-{
-    long pos;
-
-    /* Is the file open? */
-    if ((f->f_flags & _FOPEN) == 0) {
-        _seterrno (EINVAL);                /* File not open */
-        return -1L;
-    }
-
-    /* Call the low level function */
-    pos = lseek (f->f_fd, 0L, SEEK_CUR);
-
-    /* If we didn't have an error, correct the return value in case we have
-    ** a pushed back character.
-    */
-    if (pos > 0 && (f->f_flags & _FPUSHBACK)) {
-        --pos;
-    }
-
-    /* -1 for error, comes from lseek() */
-    return pos;
-}
-
diff --git a/libsrc/common/fwrite.s b/libsrc/common/fwrite.s
deleted file mode 100644 (file)
index dc0bad1..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; size_t __fastcall__ fwrite (const void* buf, size_t size, size_t count, FILE* file);
-; /* Write to a file */
-;
-
-        .export         _fwrite
-
-        .import         _write
-        .import         pushax, incsp6, addysp, ldaxysp, pushwysp, return0
-        .import         tosumulax, tosudivax
-
-        .importzp       ptr1
-
-        .include        "errno.inc"
-        .include        "_file.inc"
-
-
-; ------------------------------------------------------------------------
-; Code
-                                                          
-.proc   _fwrite
-
-; Save file and place it into ptr1
-
-        sta     file
-        sta     ptr1
-        stx     file+1
-        stx     ptr1+1
-
-; Check if the file is open
-
-        ldy     #_FILE::f_flags
-        lda     (ptr1),y
-        and     #_FOPEN                 ; Is the file open?
-        bne     @L2                     ; Branch if yes
-
-; File not open
-
-@L1:    lda     #EBADF
-        jsr     __seterrno              ; Returns with A = 0
-        tax                             ; A = X = 0
-        jmp     incsp6
-
-; Check if the stream is in an error state
-
-@L2:    lda     (ptr1),y                ; get file->f_flags again
-        and     #_FERROR
-        bne     @L1
-
-; Build the stackframe for write()
-
-        ldy     #_FILE::f_fd
-        lda     (ptr1),y
-        ldx     #$00
-        jsr     pushax                  ; file->f_fd
-
-        ldy     #9
-        jsr     pushwysp                ; buf
-
-; Stack is now: buf/size/count/file->fd/buf
-; Calculate the number of bytes to write: count * size
-
-        ldy     #7
-        jsr     pushwysp                ; count
-        ldy     #9
-        jsr     ldaxysp                 ; Get size
-        jsr     tosumulax               ; count * size -> a/x
-
-; Check if the number of bytes is zero. Don't call write in this case
-
-        cpx     #0
-        bne     @L3
-        cmp     #0
-        bne     @L3
-
-; The number of bytes to write is zero, just return count
-
-        ldy     #5
-        jsr     ldaxysp                 ; Get count
-        ldy     #10
-        jmp     addysp                  ; Drop params, return
-
-; Call write(). This will leave the original 3 params on the stack
-
-@L3:    jsr     _write
-
-; Check for errors in write
-
-        cpx     #$FF
-        bne     @L4
-        cmp     #$FF
-        bne     @L4
-
-; Error in write. Set the stream error flag and bail out. errno is already
-; set by write().
-
-        lda     file
-        sta     ptr1
-        lda     file+1
-        sta     ptr1+1
-        ldy     #_FILE::f_flags
-        lda     (ptr1),y
-        ora     #_FERROR
-        sta     (ptr1),y
-        bne     @L1                     ; Return zero
-
-; Write was ok. Return the number of items successfully written. Since we've
-; checked for bytes == 0 above, size cannot be zero here, so the division is
-; safe.
-
-@L4:    jsr     pushax                  ; Push number of bytes written
-        ldy     #5
-        jsr     ldaxysp                 ; Get size
-        jsr     tosudivax               ; bytes / size -> a/x
-        jmp     incsp6                  ; Drop params, return
-
-.endproc
-
-; ------------------------------------------------------------------------
-; Data
-
-.bss
-file:   .res    2
-
diff --git a/libsrc/common/getchar.c b/libsrc/common/getchar.c
deleted file mode 100644 (file)
index 913a4f5..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-** getchar.c
-**
-** Ullrich von Bassewitz, 11.12.1998
-*/
-
-
-
-#include <stdio.h>
-#undef getchar          /* This is usually declared as a macro */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int getchar (void)
-{
-    return fgetc (stdin);
-}
-
-
-
diff --git a/libsrc/common/getcpu.s b/libsrc/common/getcpu.s
deleted file mode 100644 (file)
index b7954f5..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-;
-; Ullrich von Bassewitz, 02.04.1999
-;
-; unsigned char getcpu (void);
-;
-
-        .export         _getcpu
-
-; ---------------------------------------------------------------------------
-; Subroutine to detect an 816. Returns
-;
-;   - carry clear and 0 in A for a NMOS 6502 CPU
-;   - carry set and 1 in A for some CMOS 6502 CPU
-;   - carry set and 2 in A for a 65816
-;
-; This function uses a $1A opcode which is a INA on the 816 and ignored
-; (interpreted as a NOP) on a NMOS 6502. There are several CMOS versions
-; of the 6502, but all of them interpret unknown opcodes as NOP so this is
-; just what we want.
-
-.p816                           ; Enable 65816 instructions
-
-_getcpu:
-        lda     #0
-        inc     a               ; .byte $1A
-        cmp     #1
-        bcc     @L9
-
-; This is at least a 65C02, check for a 65816
-
-        xba                     ; .byte $eb, put $01 in B accu
-        dec     a               ; .byte $3a, A=$00 if 65C02
-        xba                     ; .byte $eb, get $01 back if 65816
-        inc     a               ; .byte $1a, make $01/$02
-@L9:    ldx     #0              ; Load high byte of word
-        rts
-
diff --git a/libsrc/common/getcwd.s b/libsrc/common/getcwd.s
deleted file mode 100644 (file)
index b3cfbef..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; char* __fastcall__ getcwd (char* buf, size_t size);
-;
-
-        .export         _getcwd
-
-        .import         popax
-        .import         __cwd
-        .importzp       ptr1, ptr2
-
-        .include        "errno.inc"
-
-
-;--------------------------------------------------------------------------
-
-.proc   _getcwd
-
-; Remember -size-1 because this simplifies the following loop
-
-        eor     #$FF
-        sta     ptr2
-        txa
-        eor     #$FF
-        sta     ptr2+1
-
-        jsr     popax           ; Get buf
-        sta     ptr1
-        stx     ptr1+1          ; Save buf
-
-; Copy __cwd to the given buffer checking the length
-
-        ldy     #$00
-loop:   inc     ptr2
-        bne     @L1
-        inc     ptr2+1
-        beq     overflow
-
-; Copy one character, end the loop if the zero terminator is reached. We
-; don't support directories longer than 255 characters for now.
-
-@L1:    lda     __cwd,y
-        sta     (ptr1),y
-        beq     done
-        iny
-        bne     loop
-
-; For some reason the cwd is longer than 255 characters. This should not
-; happen, we handle it as if the passed buffer was too short.
-;
-; String overflow, return ERANGE
-
-overflow:
-        lda     #<ERANGE
-        jsr     __seterrno      ; Returns 0 in A
-        tax                     ; Return zero
-        rts                        
-
-; Success, return buf
-
-done:   lda     ptr1
-        ldx     ptr1+1
-        rts
-
-.endproc
-
-
diff --git a/libsrc/common/getenv.s b/libsrc/common/getenv.s
deleted file mode 100644 (file)
index 349f5ce..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-;
-; Ullrich von Bassewitz, 2005-04-21
-;
-; char* __fastcall__ getenv (const char* name);
-;
-; Beware: putenv() knows about zero page usage in this module!
-;
-
-        .export _getenv
-        .import __environ, __envcount
-        .import searchenv
-        .import return0
-        .import ptr1:zp, ptr3:zp, tmp1:zp
-
-.code
-
-;----------------------------------------------------------------------------
-; getenv()
-
-.proc   _getenv
-
-        sta     ptr1
-        stx     ptr1+1                  ; Save name
-
-; Search for the string in the environment. searchenv will set the N flag if
-; the string is not found, otherwise X contains the index of the entry, ptr3
-; contains the entry and Y the offset of the '=' in the string.
-
-        jsr     searchenv
-        bpl     found
-        jmp     return0                 ; Not found, return NULL
-
-; Found the entry. Calculate the pointer to the right side of the environment
-; variable. Because we want to skip the '=', we will set the carry.
-
-found:  ldx     ptr3+1                  ; High byte of result
-        tya
-        sec
-        adc     ptr3
-        bcc     @L9
-        inx
-@L9:    rts
-
-.endproc
-
-
diff --git a/libsrc/common/getopt.c b/libsrc/common/getopt.c
deleted file mode 100644 (file)
index 34b13b1..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-** This is part of a changed public domain getopt implementation that
-** had the following text on top:
-**
-**      I got this off net.sources from Henry Spencer.
-**      It is a public domain getopt(3) like in System V.
-**      I have made the following modifications:
-**
-**      A test main program was added, ifdeffed by GETOPT.
-**      This main program is a public domain implementation
-**      of the getopt(1) program like in System V.  The getopt
-**      program can be used to standardize shell option handling.
-**              e.g.  cc -DGETOPT getopt.c -o getopt
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#define ARGCH    ':'
-#define BADCH    '?'
-#define EMSG     ""
-
-int opterr = 1;                 /* useless, never set or used */
-int optind = 1;                 /* index into parent argv vector */
-int optopt;                     /* character checked for validity */
-
-char *optarg;                   /* argument associated with option */
-
-#define tell(s) fputs(*argv,stderr);fputs(s,stderr); \
-                fputc(optopt,stderr);fputc('\n',stderr);return(BADCH);
-
-int __fastcall__ getopt (int argc, char* const* argv, const char* optstring)
-/* Get option letter from argument vector */
-{
-    static char *place = EMSG;  /* option letter processing */
-
-    register char *oli;         /* option letter list index */
-
-    if (!*place) {              /* update scanning pointer */
-        if (optind >= argc || *(place = argv[optind]) != '-' || !*++place) {
-            return (EOF);
-        }
-        if (*place == '-') {
-            /* found "--" */
-            ++optind;
-            return (EOF);
-        }
-    }
-
-    /* option letter okay? */
-    if ((optopt = (int) *place++) == ARGCH ||
-        !(oli = strchr (optstring, optopt))) {
-        if (!*place) {
-            ++optind;
-        }
-        tell (": illegal option -- ");
-    }
-    if (*++oli != ARGCH) {
-        /* don't need argument */
-        optarg = NULL;
-        if (!*place) {
-            ++optind;
-        }
-    } else {
-        /* need an argument */
-        if (*place) {
-            /* no white space */
-            optarg = place;
-        }
-        else if (argc <= ++optind) {   /* no arg */
-            place = EMSG;
-            tell (": option requires an argument -- ");
-        } else {
-            /* white space */
-            optarg = argv[optind];
-        }
-        place = EMSG;
-        ++optind;
-    }
-    return (optopt);            /* dump back option letter */
-}
-
diff --git a/libsrc/common/gets.c b/libsrc/common/gets.c
deleted file mode 100644 (file)
index 2936c70..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-** gets.c
-**
-** Ullrich von Bassewitz, 11.08.1998
-*/
-
-
-
-#include <stdio.h>
-#include "_file.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-char* __fastcall__ gets (char* s)
-{
-    register char* p = s;
-    int c;
-    unsigned i = 0;
-
-    while (1) {
-
-        /* Get next character */
-        if ((c = fgetc (stdin)) == EOF) {
-            /* Error or EOF */
-            *p = '\0';
-            if (stdin->f_flags & _FERROR) {
-                /* ERROR */
-                return 0;
-            } else {
-                /* EOF */
-                if (i) {
-                    return s;
-                } else {
-                    return 0;
-                }
-            }
-        }
-
-        /* One char more. Newline ends the input */
-        if ((char) c == '\n') {
-            *p = '\0';
-            break;
-        } else {
-            *p = c;
-            ++p;
-            ++i;
-        }
-
-    }
-
-    /* Done */
-    return s;
-}
-
-
-
-
diff --git a/libsrc/common/gmtime.c b/libsrc/common/gmtime.c
deleted file mode 100644 (file)
index 1a2536c..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 gmtime.c                                  */
-/*                                                                           */
-/*            Convert calendar time into broken down time in UTC             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <time.h>
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-struct tm* __fastcall__ gmtime (const time_t* timep)
-{
-    time_t t;
-
-    /* Check for a valid time spec */
-    if (timep == 0) {
-        return 0;
-    }
-
-    /* Get the time and correct for the time zone offset */
-    t = *timep + _tz.timezone;
-
-    /* Use localtime for conversion */
-    return localtime (&t);
-}
-
-
-
diff --git a/libsrc/common/interrupt.s b/libsrc/common/interrupt.s
deleted file mode 100644 (file)
index 950d3d7..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-;
-; 2012-01-18, Oliver Schmidt
-; 2015-08-22, Greg King
-;
-; void __fastcall__ set_irq (irq_handler f, void *stack_addr, size_t stack_size);
-; void reset_irq (void);
-;
-
-        .export         _set_irq, _reset_irq
-        .interruptor    clevel_irq, 1           ; Export as low priority IRQ handler
-        .import         popax, __ZP_START__
-
-        .include        "zeropage.inc"
-
-        .macpack        generic
-
-
-; ---------------------------------------------------------------------------
-
-.data
-
-irqvec: jmp     $00FF           ; Patched at runtime
-
-; ---------------------------------------------------------------------------
-
-.bss
-
-irqsp:  .res    2
-
-zpsave: .res    zpsavespace
-
-; ---------------------------------------------------------------------------
-
-.code
-
-.proc   _set_irq
-
-        ; Keep clevel_irq from being called right now
-        sei
-
-        ; Set irq stack pointer to stack_addr + stack_size
-        sta     irqsp
-        stx     irqsp+1
-        jsr     popax
-        add     irqsp
-        sta     irqsp
-        txa
-        adc     irqsp+1
-        sta     irqsp+1
-
-        ; Set irq vector to irq_handler
-        jsr     popax
-        sta     irqvec+1
-        stx     irqvec+2        ; Set the user vector
-
-        ; Restore interrupt requests and return
-        cli
-        rts
-
-.endproc
-
-
-.proc   _reset_irq
-
-        lda     #$00
-        sta     irqvec+2        ; High byte is enough
-        rts
-
-.endproc
-
-
-.proc   clevel_irq
-
-        ; Is C level interrupt request vector set?
-        lda     irqvec+2        ; High byte is enough
-        bne     @L1
-        clc                     ; Interrupt not handled
-        rts
-
-        ; Save our zero page locations
-@L1:    ldx     #.sizeof(::zpsave)-1
-@L2:    lda     <__ZP_START__,x
-        sta     zpsave,x
-        dex
-        bpl     @L2
-
-        ; Set C level interrupt stack
-        lda     irqsp
-        ldx     irqsp+1
-        sta     sp
-        stx     sp+1
-
-        ; Call C level interrupt request handler
-        jsr     irqvec
-
-        ; Copy back our zero page content
-        ldx     #.sizeof(::zpsave)-1
-@L3:    ldy     zpsave,x
-        sty     <__ZP_START__,x
-        dex
-        bpl     @L3
-
-        ; Mark interrupt handled / not handled and return
-        lsr
-        rts
-
-.endproc
diff --git a/libsrc/common/isalnum.s b/libsrc/common/isalnum.s
deleted file mode 100644 (file)
index 33497a3..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 02.06.1998
-;
-; int isalnum (int c);
-;
-
-        .export         _isalnum
-        .include        "ctype.inc"
-
-_isalnum:
-        cpx     #$00            ; Char range ok?
-        bne     @L1             ; Jump if no
-        tay
-        lda     __ctype,y       ; Get character classification
-        and     #CT_ALNUM       ; Mask character/digit bits
-        rts
-
-@L1:    lda     #$00            ; Return false
-        tax
-        rts
-
diff --git a/libsrc/common/isalpha.s b/libsrc/common/isalpha.s
deleted file mode 100644 (file)
index 2ab9bf2..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 02.06.1998
-;
-; int isalpha (int c);
-;
-
-        .export         _isalpha
-        .include        "ctype.inc"
-
-_isalpha:
-        cpx     #$00            ; Char range ok?
-        bne     @L1             ; Jump if no
-        tay
-        lda     __ctype,y       ; Get character classification
-        and     #CT_ALPHA       ; Mask character bits
-        rts
-
-@L1:    lda     #$00            ; Return false
-        tax
-        rts
-
diff --git a/libsrc/common/isblank.s b/libsrc/common/isblank.s
deleted file mode 100644 (file)
index 6babe88..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 02.06.1998
-;
-; int isblank (int c);
-;
-; cc65 (and GNU) extension.
-;
-
-        .export         _isblank
-        .include        "ctype.inc"
-
-_isblank:
-        cpx     #$00            ; Char range ok?
-        bne     @L1             ; Jump if no
-        tay
-        lda     __ctype,y       ; Get character classification
-        and     #CT_SPACE_TAB   ; Mask blank bit
-        rts
-
-@L1:    lda     #$00            ; Return false
-        tax
-        rts
-
diff --git a/libsrc/common/iscntrl.s b/libsrc/common/iscntrl.s
deleted file mode 100644 (file)
index 7287164..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 02.06.1998
-;
-; int iscntrl (int c);
-;
-
-        .export         _iscntrl
-        .include        "ctype.inc"
-
-_iscntrl:
-        cpx     #$00            ; Char range ok?
-        bne     @L1             ; Jump if no
-        tay
-        lda     __ctype,y       ; Get character classification
-        and     #CT_CTRL        ; Mask control character bit
-        rts
-
-@L1:    lda     #$00            ; Return false
-        tax
-        rts
-
diff --git a/libsrc/common/isdigit.s b/libsrc/common/isdigit.s
deleted file mode 100644 (file)
index 2972c89..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 02.06.1998
-;
-; int isdigit (int c);
-;
-
-        .export         _isdigit
-        .include        "ctype.inc"
-
-_isdigit:
-        cpx     #$00            ; Char range ok?
-        bne     @L1             ; Jump if no
-        tay
-        lda     __ctype,y       ; Get character classification
-        and     #CT_DIGIT       ; Mask digit bit
-        rts
-
-@L1:    lda     #$00            ; Return false
-        tax
-        rts
-
diff --git a/libsrc/common/isgraph.s b/libsrc/common/isgraph.s
deleted file mode 100644 (file)
index bf94014..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-;
-; 1998-06-02, Ullrich von Bassewitz
-; 2014-09-10, Greg King
-;
-; int isgraph (int c);
-;
-
-        .export         _isgraph
-        .include        "ctype.inc"
-
-_isgraph:
-        cpx     #>$0000         ; Char range OK?
-        bne     @L1             ; Jump if no
-        tay
-        lda     __ctype,y       ; Get character classification
-        and     #CT_CTRL_SPACE  ; Mask character bits
-        cmp     #1              ; If false, then set "borrow" flag
-        lda     #0
-        sbc     #0              ; Invert logic
-        rts                     ; Return NOT control and NOT space
-
-@L1:    lda     #<0             ; Return false
-        tax
-        rts
-
diff --git a/libsrc/common/islower.s b/libsrc/common/islower.s
deleted file mode 100644 (file)
index 32e00fb..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 02.06.1998
-;
-; int islower (int c);
-;
-
-        .export         _islower
-        .include        "ctype.inc"
-
-_islower:
-        cpx     #$00            ; Char range ok?
-        bne     @L1             ; Jump if no
-        tay
-        lda     __ctype,y       ; Get character classification
-        and     #CT_LOWER       ; Mask lower char bit
-        rts
-
-@L1:    lda     #$00            ; Return false
-        tax
-        rts
-
diff --git a/libsrc/common/isprint.s b/libsrc/common/isprint.s
deleted file mode 100644 (file)
index 1511753..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 02.06.1998
-;
-; int isprint (int c);
-;
-
-        .export         _isprint
-        .include        "ctype.inc"
-
-_isprint:
-        cpx     #$00            ; Char range ok?
-        bne     @L1             ; Jump if no
-        tay
-        lda     __ctype,y       ; Get character classification
-        eor     #CT_CTRL        ; NOT a control char
-        and     #CT_CTRL        ; Mask control char bit
-        rts
-
-@L1:    lda     #$00            ; Return false
-        tax
-        rts
-
diff --git a/libsrc/common/ispunct.s b/libsrc/common/ispunct.s
deleted file mode 100644 (file)
index 0875329..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-;
-; 1998-06-02, Ullrich von Bassewitz
-; 2014-09-10, Greg King
-;
-; int ispunct (int c);
-;
-
-        .export         _ispunct
-        .include        "ctype.inc"
-
-_ispunct:
-        cpx     #>$0000         ; Char range OK?
-        bne     @L1             ; Jump if no
-        tay
-        lda     __ctype,y       ; Get character classification
-        and     #CT_NOT_PUNCT   ; Mask relevant bits
-        cmp     #1              ; If false, then set "borrow" flag
-        lda     #0
-        sbc     #0              ; Invert logic
-        rts                     ; Return NOT (space | control | digit | alpha)
-
-@L1:    lda     #<0             ; Return false
-        tax
-        rts
-
diff --git a/libsrc/common/isspace.s b/libsrc/common/isspace.s
deleted file mode 100644 (file)
index 64849f7..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 02.06.1998
-;
-; int isspace (int c);
-;
-
-        .export         _isspace
-        .include        "ctype.inc"
-
-_isspace:
-        cpx     #$00            ; Char range ok?
-        bne     @L1             ; Jump if no
-        tay
-        lda     __ctype,y       ; Get character classification
-        and     #(CT_SPACE | CT_OTHER_WS)   ; Mask space bits
-        rts
-
-@L1:    lda     #$00            ; Return false
-        tax
-        rts
-
diff --git a/libsrc/common/isupper.s b/libsrc/common/isupper.s
deleted file mode 100644 (file)
index 698983e..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 02.06.1998
-;
-; int isupper (int c);
-;
-
-        .export         _isupper
-        .include        "ctype.inc"
-
-_isupper:
-        cpx     #$00            ; Char range ok?
-        bne     @L1             ; Jump if no
-        tay
-        lda     __ctype,y       ; Get character classification
-        and     #CT_UPPER       ; Mask upper char bit
-        rts
-
-@L1:    lda     #$00            ; Return false
-        tax
-        rts
-
diff --git a/libsrc/common/isxdigit.s b/libsrc/common/isxdigit.s
deleted file mode 100644 (file)
index 36f86ef..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 02.06.1998
-;
-; int isxdigit (int c);
-;
-
-        .export         _isxdigit
-        .include        "ctype.inc"
-
-_isxdigit:
-        cpx     #$00            ; Char range ok?
-        bne     @L1             ; Jump if no
-        tay
-        lda     __ctype,y       ; Get character classification
-        and     #CT_XDIGIT      ; Mask xdigit bit
-        rts
-
-@L1:    lda     #$00            ; Return false
-        tax
-        rts
-
diff --git a/libsrc/common/itoa.s b/libsrc/common/itoa.s
deleted file mode 100644 (file)
index 176bc2d..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.05.1998
-;
-; char* itoa (int value, char* s, int radix);
-; char* utoa (unsigned value, char* s, int radix);
-;
-
-        .export         _itoa, _utoa
-        .import         addysp1
-        .import         __hextab
-        .importzp       sp, sreg, ptr2, ptr3, tmp1
-
-.rodata
-specval:
-        .byte   '-', '3', '2', '7', '6', '8', 0
-.code
-
-;
-; Common subroutine to pop the parameters and put them into core
-;
-
-dopop:  sta     tmp1            ; will loose high byte
-        ldy     #0
-        lda     (sp),y
-        sta     ptr2
-        sta     ptr3
-        iny
-        lda     (sp),y
-        sta     ptr2+1
-        sta     ptr3+1
-        iny
-        lda     (sp),y
-        sta     sreg
-        iny
-        lda     (sp),y
-        sta     sreg+1
-        jmp     addysp1         ; Bump stack pointer
-
-;
-; itoa
-;
-
-_itoa:  jsr     dopop           ; pop the arguments
-
-; We must handle $8000 in a special way, since it is the only negative
-; number that has no positive 16-bit counterpart
-
-        ldy     tmp1            ; get radix
-        cpy     #10
-        bne     utoa
-        cmp     #$00
-        bne     L2
-        cpx     #$80
-        bne     L2
-
-        ldy     #6
-L1:     lda     specval,y       ; copy -32768
-        sta     (ptr2),y
-        dey
-        bpl     L1
-        jmp     L10
-
-; Check if the value is negative. If so, write a - sign and negate the
-; number.
-
-L2:     lda     sreg+1          ; get high byte
-        bpl     utoa
-        lda     #'-'
-        ldy     #0
-        sta     (ptr2),y        ; store sign
-        inc     ptr2
-        bne     L3
-        inc     ptr2+1
-
-L3:     lda     sreg
-        eor     #$FF
-        clc
-        adc     #$01
-        sta     sreg
-        lda     sreg+1
-        eor     #$FF
-        adc     #$00
-        sta     sreg+1
-        jmp     utoa
-
-;
-; utoa
-;
-
-_utoa:  jsr     dopop           ; pop the arguments
-
-; Convert to string by dividing and push the result onto the stack
-
-utoa:   lda     #$00
-        pha                     ; sentinel
-
-; Divide sreg/tmp1 -> sreg, remainder in a
-
-L5:     ldy     #16             ; 16 bit
-        lda     #0              ; remainder
-L6:     asl     sreg
-        rol     sreg+1
-        rol     a
-        cmp     tmp1
-        bcc     L7
-        sbc     tmp1
-        inc     sreg
-L7:     dey
-        bne     L6
-
-        tay                     ; get remainder into y
-        lda     __hextab,y      ; get hex character
-        pha                     ; save char value on stack
-
-        lda     sreg
-        ora     sreg+1
-        bne     L5
-
-; Get the characters from the stack into the string
-
-        ldy     #0
-L9:     pla
-        sta     (ptr2),y
-        beq     L10             ; jump if sentinel
-        iny
-        bne     L9              ; jump always
-
-; Done! Return the target string
-
-L10:    lda     ptr3
-        ldx     ptr3+1
-        rts
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/libsrc/common/labs.s b/libsrc/common/labs.s
deleted file mode 100644 (file)
index 544ce99..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 17.06.1998
-;
-; long __fastcall__ labs (long val);
-; intmax_t __fastcall imaxabs (intmax_t val);
-;
-
-        .export         _labs, _imaxabs
-        .import         negeax
-        .importzp       sreg
-
-
-_labs:
-_imaxabs:
-        ldy     sreg+1          ; test hi byte
-        bpl     L1
-        jmp     negeax          ; Negate if negative
-L1:     rts
-
diff --git a/libsrc/common/locale.c b/libsrc/common/locale.c
deleted file mode 100644 (file)
index 078d541..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-** locale.c
-**
-** Ullrich von Bassewitz, 11.12.1998
-*/
-
-
-
-#include <locale.h>
-#include <limits.h>
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* For memory efficiency use a separate empty string */
-static char EmptyString [] = "";
-
-static struct lconv lc = {
-    EmptyString,        /* currency_symbol */
-    ".",                /* decimal_point */
-    EmptyString,        /* grouping */
-    EmptyString,        /* int_curr_symbol */
-    EmptyString,        /* mon_decimal_point */
-    EmptyString,        /* mon_grouping */
-    EmptyString,        /* mon_thousands_sep */
-    EmptyString,        /* negative_sign */
-    EmptyString,        /* positive_sign */
-    EmptyString,        /* thousands_sep */
-    CHAR_MAX,           /* frac_digits */
-    CHAR_MAX,           /* int_frac_digits */
-    CHAR_MAX,           /* n_cs_precedes */
-    CHAR_MAX,           /* n_sep_by_space */
-    CHAR_MAX,           /* n_sign_posn */
-    CHAR_MAX,           /* p_cs_precedes */
-    CHAR_MAX,           /* p_sep_by_space */
-    CHAR_MAX,           /* p_sign_posn */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-struct lconv* localeconv (void)
-{
-    return &lc;
-}
-
-
-
-char* __fastcall__ setlocale (int, const char* locale)
-{
-    if (locale == 0 || (locale [0] == 'C' && locale [1] == '\0') || locale [0] == '\0') {
-        /* No change, or value already set, our locale is the "C" locale */
-        return "C";
-    } else {
-        /* Cannot set this one */
-        return 0;
-    }
-}
-
-
-
-
diff --git a/libsrc/common/localtime.c b/libsrc/common/localtime.c
deleted file mode 100644 (file)
index cc6298f..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                localtime.c                                */
-/*                                                                           */
-/*            Convert calendar time into broken down local time              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <time.h>
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-struct tm* __fastcall__ localtime (const time_t* timep)
-{
-    static struct tm timebuf;
-    time_t t;
-
-    /* Check the argument */
-    if (timep == 0 || (long) (t = *timep) < 0) {
-        /* Invalid arg */
-        return 0;
-    }
-
-    /* Since our ints are just 16 bits, split the given time into seconds,
-    ** hours and days. Each of the values will fit in a 16 bit variable.
-    ** The mktime routine will then do the rest.
-    */
-    timebuf.tm_sec  = t % 3600;
-    timebuf.tm_min  = 0;
-    timebuf.tm_hour = (t / 3600) % 24;
-    timebuf.tm_mday = (t / (3600UL * 24UL)) + 1;
-    timebuf.tm_mon  = 0;
-    timebuf.tm_year = 70;       /* Base value is 1/1/1970 */
-
-    /* Call mktime to do the final conversion */
-    mktime (&timebuf);
-
-    /* Return the result */
-    return &timebuf;
-}
-
-
diff --git a/libsrc/common/longjmp.s b/libsrc/common/longjmp.s
deleted file mode 100644 (file)
index e9bac42..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-;
-; 1998-06-06, Ullrich von Bassewitz
-; 2015-09-11, Greg King
-;
-; void __fastcall__ longjmp (jmp_buf buf, int retval);
-;
-
-        .export         _longjmp
-        .import         popax
-        .importzp       sp, ptr1, ptr2
-
-_longjmp:
-        sta     ptr2            ; Save retval
-        stx     ptr2+1
-        ora     ptr2+1          ; Check for 0
-        bne     @L1
-        inc     ptr2            ; 0 is illegal, according to the standard ...
-                                ; ... and, must be replaced by 1
-@L1:    jsr     popax           ; get buf
-        sta     ptr1
-        stx     ptr1+1
-        ldy     #0
-
-; Get the old parameter stack
-
-        lda     (ptr1),y
-        iny
-        sta     sp
-        lda     (ptr1),y
-        iny
-        sta     sp+1
-
-; Get the old stack pointer
-
-        lda     (ptr1),y
-        iny
-        tax
-        txs
-
-; Get the return address and push it on the stack
-
-        lda     (ptr1),y
-        iny
-        pha
-        lda     (ptr1),y
-        pha
-
-; Load the return value and return to the caller
-
-        lda     ptr2
-        ldx     ptr2+1
-        rts
diff --git a/libsrc/common/ltoa.s b/libsrc/common/ltoa.s
deleted file mode 100644 (file)
index 5dc215b..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-;
-; Ullrich von Bassewitz, 11.06.1998
-;
-; char* ltoa (long value, char* s, int radix);
-; char* ultoa (unsigned long value, char* s, int radix);
-;
-
-        .export         _ltoa, _ultoa
-        .import         popax
-        .import         __hextab, __longminstr
-        .importzp       sreg, ptr1, ptr2, ptr3, tmp1
-
-
-
-.code
-
-;
-; Common subroutine to pop the parameters and put them into core
-;
-
-dopop:  sta     tmp1            ; will loose high byte
-        jsr     popax           ; get s
-        sta     ptr1
-        stx     ptr1+1
-        sta     sreg            ; save for return
-        stx     sreg+1
-        jsr     popax           ; get low word of value
-        sta     ptr2
-        stx     ptr2+1
-        jsr     popax           ; get high word of value
-        sta     ptr3
-        stx     ptr3+1
-        rts
-
-;
-; ltoa
-;
-
-_ltoa:  jsr     dopop           ; pop the arguments
-
-; We must handle $80000000 in a special way, since it is the only negative
-; number that has no positive 32-bit counterpart
-
-        ldx     ptr3+1          ; get high byte
-        ldy     tmp1            ; get radix
-        cpy     #10
-        bne     ultoa
-        lda     ptr3
-        ora     ptr2+1
-        ora     ptr2
-        bne     L2
-        cpx     #$80
-        bne     L2
-
-        ldy     #11
-L1:     lda     __longminstr,y  ; copy -2147483648
-        sta     (ptr1),y
-        dey
-        bpl     L1
-        jmp     L10
-                  
-; Check if the value is negative. If so, write a - sign and negate the
-; number.
-
-L2:     txa                     ; get high byte
-        bpl     ultoa
-        lda     #'-'
-        ldy     #0
-        sta     (ptr1),y        ; store sign
-        inc     ptr1
-        bne     L3
-        inc     ptr1+1
-
-L3:     lda     ptr2            ; negate val
-        eor     #$FF
-        clc
-        adc     #$01
-        sta     ptr2
-        lda     ptr2+1
-        eor     #$FF
-        adc     #$00
-        sta     ptr2+1
-        lda     ptr3
-        eor     #$FF
-        adc     #$00
-        sta     ptr3
-        lda     ptr3+1
-        eor     #$FF
-        adc     #$00
-        sta     ptr3+1
-        jmp     ultoa
-
-;
-; utoa
-;
-
-_ultoa: jsr     dopop           ; pop the arguments
-
-; Convert to string by dividing and push the result onto the stack
-
-ultoa:  lda     #$00
-        pha                     ; sentinel
-
-; Divide val/tmp1 -> val, remainder in a
-
-L5:     ldy     #32             ; 32 bit
-        lda     #0              ; remainder
-L6:     asl     ptr2
-        rol     ptr2+1
-        rol     ptr3
-        rol     ptr3+1
-        rol     a
-        cmp     tmp1
-        bcc     L7
-        sbc     tmp1
-        inc     ptr2
-L7:     dey
-        bne     L6
-
-        tay                     ; get remainder into y
-        lda     __hextab,y      ; get hex character
-        pha                     ; save char value on stack
-
-        lda     ptr2
-        ora     ptr2+1
-        ora     ptr3
-        ora     ptr3+1
-        bne     L5
-
-; Get the characters from the stack into the string
-
-        ldy     #0
-L9:     pla
-        sta     (ptr1),y
-        beq     L10             ; jump if sentinel
-        iny
-        bne     L9              ; jump always
-
-; Done! Return the target string
-
-L10:    lda     sreg
-        ldx     sreg+1
-        rts
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/libsrc/common/malloc.s b/libsrc/common/malloc.s
deleted file mode 100644 (file)
index 3118e2e..0000000
+++ /dev/null
@@ -1,339 +0,0 @@
-;
-; Ullrich von Bassewitz, 17.7.2000
-;
-; Allocate a block from the heap.
-;
-; void* __fastcall__ malloc (size_t size);
-;
-;
-; C implementation was:
-;
-; void* malloc (size_t size)
-; /* Allocate memory from the given heap. The function returns a pointer to the
-; ** allocated memory block or a NULL pointer if not enough memory is available.
-; ** Allocating a zero size block is not allowed.
-; */
-; {
-;     struct freeblock* f;
-;     unsigned* p;
-;
-;
-;     /* Check for a size of zero, then add the administration space and round
-;     ** up the size if needed.
-;     */
-;     if (size == 0) {
-;       return 0;
-;     }
-;     size += HEAP_ADMIN_SPACE;
-;     if (size < sizeof (struct freeblock)) {
-;         size = sizeof (struct freeblock);
-;     }
-;
-;     /* Search the freelist for a block that is big enough */
-;     f = _hfirst;
-;     while (f && f->size < size) {
-;         f = f->next;
-;     }
-;
-;     /* Did we find one? */
-;     if (f) {
-;
-;         /* We found a block big enough. If the block can hold just the
-;         ** requested size, use the block in full. Beware: When slicing blocks,
-;         ** there must be space enough to create a new one! If this is not the
-;         ** case, then use the complete block.
-;         */
-;         if (f->size - size < sizeof (struct freeblock)) {
-;
-;             /* Use the actual size */
-;             size = f->size;
-;
-;             /* Remove the block from the free list */
-;             if (f->prev) {
-;                 /* We have a previous block */
-;                 f->prev->next = f->next;
-;             } else {
-;                 /* This is the first block, correct the freelist pointer */
-;                 _hfirst = f->next;
-;             }
-;             if (f->next) {
-;                 /* We have a next block */
-;                 f->next->prev = f->prev;
-;             } else {
-;                 /* This is the last block, correct the freelist pointer */
-;                 _hlast = f->prev;
-;             }
-;
-;         } else {
-;
-;           /* We must slice the block found. Cut off space from the upper
-;           ** end, so we can leave the actual free block chain intact.
-;           */
-;
-;           /* Decrement the size of the block */
-;           f->size -= size;
-;
-;           /* Set f to the now unused space above the current block */
-;           f = (struct freeblock*) (((unsigned) f) + f->size);
-;
-;         }
-;
-;         /* Setup the pointer for the block */
-;         p = (unsigned*) f;
-;
-;     } else {
-;
-;         /* We did not find a block big enough. Try to use new space from the
-;         ** heap top.
-;         */
-;       if (((unsigned) _hend) - ((unsigned) _hptr) < size) {
-;             /* Out of heap space */
-;             return 0;
-;       }
-;
-;
-;       /* There is enough space left, take it from the heap top */
-;       p = _hptr;
-;               _hptr = (unsigned*) (((unsigned) _hptr) + size);
-;
-;     }
-;
-;     /* New block is now in p. Fill in the size and return the user pointer */
-;     *p++ = size;
-;     return p;
-; }
-;
-
-
-        .importzp       ptr1, ptr2, ptr3
-        .export         _malloc
-
-        .include        "_heap.inc"
-
-        .macpack        generic
-
-;-----------------------------------------------------------------------------
-; Code
-
-_malloc:
-        sta     ptr1                    ; Store size in ptr1
-        stx     ptr1+1
-
-; Check for a size of zero, if so, return NULL
-
-        ora     ptr1+1
-        beq     Done                    ; a/x already contains zero
-
-; Add the administration space and round up the size if needed
-
-        lda     ptr1
-        add     #HEAP_ADMIN_SPACE
-        sta     ptr1
-        bcc     @L1
-        inc     ptr1+1
-@L1:    ldx     ptr1+1
-        bne     @L2
-        cmp     #HEAP_MIN_BLOCKSIZE+1
-        bcs     @L2
-        lda     #HEAP_MIN_BLOCKSIZE
-        sta     ptr1                    ; High byte is already zero
-
-; Load a pointer to the freelist into ptr2
-
-@L2:    lda     __heapfirst
-        sta     ptr2
-        lda     __heapfirst+1
-        sta     ptr2+1
-
-; Search the freelist for a block that is big enough. We will calculate
-; (f->size - size) here and keep it, since we need the value later.
-
-        jmp     @L4
-
-@L3:    ldy     #freeblock::size
-        lda     (ptr2),y
-        sub     ptr1
-        tax                             ; Remember low byte for later
-        iny                             ; Y points to freeblock::size+1
-        lda     (ptr2),y
-        sbc     ptr1+1
-        bcs     BlockFound              ; Beware: Contents of a/x/y are known!
-
-; Next block in list
-
-        iny                             ; Points to freeblock::next
-        lda     (ptr2),y
-        tax
-        iny                             ; Points to freeblock::next+1
-        lda     (ptr2),y
-        stx     ptr2
-        sta     ptr2+1
-@L4:    ora     ptr2
-        bne     @L3
-
-; We did not find a block big enough. Try to use new space from the heap top.
-
-        lda     __heapptr
-        add     ptr1                    ; _heapptr + size
-        tay
-        lda     __heapptr+1
-        adc     ptr1+1
-        bcs     OutOfHeapSpace          ; On overflow, we're surely out of space
-
-        cmp     __heapend+1
-        bne     @L5
-        cpy     __heapend
-@L5:    bcc     TakeFromTop
-        beq     TakeFromTop
-
-; Out of heap space
-
-OutOfHeapSpace:
-        lda     #0
-        tax
-Done:   rts
-
-; There is enough space left, take it from the heap top
-
-TakeFromTop:
-        ldx     __heapptr               ; p = _heapptr;
-        stx     ptr2
-        ldx     __heapptr+1
-        stx     ptr2+1
-
-        sty     __heapptr               ; _heapptr += size;
-        sta     __heapptr+1
-        jmp     FillSizeAndRet          ; Done
-
-; We found a block big enough. If the block can hold just the
-; requested size, use the block in full. Beware: When slicing blocks,
-; there must be space enough to create a new one! If this is not the
-; case, then use the complete block.
-; On input, x/a do contain the remaining size of the block. The zero
-; flag is set if the high byte of this remaining size is zero.
-
-BlockFound:
-        bne     SliceBlock              ; Block is large enough to slice
-        cpx     #HEAP_MIN_BLOCKSIZE     ; Check low byte
-        bcs     SliceBlock              ; Jump if block is large enough to slice
-
-; The block is too small to slice it. Use the block in full. The block
-; does already contain the correct size word, all we have to do is to
-; remove it from the free list.
-
-        ldy     #freeblock::prev+1      ; Load f->prev
-        lda     (ptr2),y
-        sta     ptr3+1
-        dey
-        lda     (ptr2),y
-        sta     ptr3
-        dey                             ; Points to freeblock::next+1
-        ora     ptr3+1
-        beq     @L1                     ; Jump if f->prev zero
-
-; We have a previous block, ptr3 contains its address.
-; Do f->prev->next = f->next
-
-        lda     (ptr2),y                ; Load high byte of f->next
-        sta     (ptr3),y                ; Store high byte of f->prev->next
-        dey                             ; Points to next
-        lda     (ptr2),y                ; Load low byte of f->next
-        sta     (ptr3),y                ; Store low byte of f->prev->next
-        jmp     @L2
-
-; This is the first block, correct the freelist pointer
-; Do _hfirst = f->next
-
-@L1:    lda     (ptr2),y                ; Load high byte of f->next
-        sta     __heapfirst+1
-        dey                             ; Points to next
-        lda     (ptr2),y                ; Load low byte of f->next
-        sta     __heapfirst
-
-; Check f->next. Y points always to next if we come here
-
-@L2:    lda     (ptr2),y                ; Load low byte of f->next
-        sta     ptr3
-        iny                             ; Points to next+1
-        lda     (ptr2),y                ; Load high byte of f->next
-        sta     ptr3+1
-        iny                             ; Points to prev
-        ora     ptr3
-        beq     @L3                     ; Jump if f->next zero
-
-; We have a next block, ptr3 contains its address.
-; Do f->next->prev = f->prev
-
-        lda     (ptr2),y                ; Load low byte of f->prev
-        sta     (ptr3),y                ; Store low byte of f->next->prev
-        iny                             ; Points to prev+1
-        lda     (ptr2),y                ; Load high byte of f->prev
-        sta     (ptr3),y                ; Store high byte of f->prev->next
-        jmp     RetUserPtr              ; Done
-
-; This is the last block, correct the freelist pointer.
-; Do _hlast = f->prev
-
-@L3:    lda     (ptr2),y                ; Load low byte of f->prev
-        sta     __heaplast
-        iny                             ; Points to prev+1
-        lda     (ptr2),y                ; Load high byte of f->prev
-        sta     __heaplast+1
-        jmp     RetUserPtr              ; Done
-
-; We must slice the block found. Cut off space from the upper end, so we
-; can leave the actual free block chain intact.
-
-SliceBlock:
-
-; Decrement the size of the block. Y points to size+1.
-
-        dey                             ; Points to size
-        lda     (ptr2),y                ; Low byte of f->size
-        sub     ptr1
-        sta     (ptr2),y
-        tax                             ; Save low byte of f->size in X
-        iny                             ; Points to size+1
-        lda     (ptr2),y                ; High byte of f->size
-        sbc     ptr1+1
-        sta     (ptr2),y
-
-; Set f to the space above the current block, which is the new block returned
-; to the caller.
-
-        txa                             ; Get low byte of f->size
-        add     ptr2
-        tax
-        lda     (ptr2),y                ; Get high byte of f->size
-        adc     ptr2+1
-        stx     ptr2
-        sta     ptr2+1
-
-; Fill the size and start address into the admin space of the block
-; (struct usedblock) and return the user pointer
-
-FillSizeAndRet:
-        ldy     #usedblock::size        ; p->size = size;
-        lda     ptr1                    ; Low byte of block size
-        sta     (ptr2),y
-        iny                             ; Points to freeblock::size+1
-        lda     ptr1+1
-        sta     (ptr2),y
-
-RetUserPtr:
-        ldy     #usedblock::start       ; p->start = p
-        lda     ptr2
-        sta     (ptr2),y
-        iny
-        lda     ptr2+1
-        sta     (ptr2),y
-
-; Return the user pointer, which points behind the struct usedblock
-
-        lda     ptr2                    ; return ++p;
-        ldx     ptr2+1
-        add     #HEAP_ADMIN_SPACE
-        bcc     @L9
-        inx
-@L9:    rts
-
diff --git a/libsrc/common/memchr.s b/libsrc/common/memchr.s
deleted file mode 100644 (file)
index 1b60cbf..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-05-05
-;
-; void* __fastcall__ memchr (const void* p, int c, size_t n);
-;
-
-        .export         _memchr
-        .import         popax, return0
-        .importzp       ptr1, ptr2
-
-
-.proc   _memchr
-
-        eor     #$FF
-        sta     ptr2
-        txa
-        eor     #$FF
-        sta     ptr2+1          ; Save ones complement of n
-        jsr     popax           ; get c
-        pha
-        jsr     popax           ; get p
-        sta     ptr1
-        stx     ptr1+1
-
-        ldy     #$00
-        pla                     ; Get c
-        ldx     ptr2            ; Use X as low counter byte
-
-L1:     inx
-        beq     L3
-L2:     cmp     (ptr1),y
-        beq     found
-        iny
-        bne     L1
-        inc     ptr1+1
-        bne     L1              ; Branch always
-
-L3:     inc     ptr2+1          ; Bump counter high byte
-        bne     L2
-
-; Not found, return NULL
-
-notfound:
-        jmp     return0
-
-; Found, return pointer to char
-
-found:  ldx     ptr1+1          ; get high byte of pointer
-        tya                     ; low byte offset
-        clc
-        adc     ptr1
-        bcc     L9
-        inx
-L9:     rts
-
-.endproc
-
diff --git a/libsrc/common/memcmp.s b/libsrc/common/memcmp.s
deleted file mode 100644 (file)
index 2562812..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-;
-; Ullrich von Bassewitz, 15.09.2000
-;
-; int memcmp (const void* p1, const void* p2, size_t count);
-;
-
-        .export         _memcmp
-        .import         popax, return0
-        .importzp       ptr1, ptr2, ptr3
-
-_memcmp:
-
-; Calculate (-count-1) and store it into ptr3. This is some overhead here but
-; saves time in the compare loop
-
-        eor     #$FF
-        sta     ptr3
-        txa
-        eor     #$FF
-        sta     ptr3+1
-
-; Get the pointer parameters
-
-        jsr     popax           ; Get p2
-        sta     ptr2
-        stx     ptr2+1
-        jsr     popax           ; Get p1
-        sta     ptr1
-        stx     ptr1+1
-
-; Loop initialization
-
-        ldx     ptr3            ; Load low counter byte into X
-        ldy     #$00            ; Initialize pointer
-
-; Head of compare loop: Test for the end condition
-
-Loop:   inx                     ; Bump low byte of (-count-1)
-        beq     BumpHiCnt       ; Jump on overflow
-
-; Do the compare
-
-Comp:   lda     (ptr1),y
-        cmp     (ptr2),y
-        bne     NotEqual        ; Jump if bytes not equal
-
-; Bump the pointers
-
-        iny                     ; Increment pointer
-        bne     Loop
-        inc     ptr1+1          ; Increment high bytes
-        inc     ptr2+1
-        bne     Loop            ; Branch always (pointer wrap is illegal)
-
-; Entry on low counter byte overflow
-
-BumpHiCnt:
-        inc     ptr3+1          ; Bump high byte of (-count-1)
-        bne     Comp            ; Jump if not done
-        jmp     return0         ; Count is zero, areas are identical
-
-; Not equal, check which one is greater
-
-NotEqual:
-        bcs     Greater
-        ldx     #$FF            ; Make result negative
-        rts
-
-Greater:
-        ldx     #$01            ; Make result positive
-        rts
-
diff --git a/libsrc/common/memcpy.s b/libsrc/common/memcpy.s
deleted file mode 100644 (file)
index c0c5e56..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-20
-; Performance increase (about 20%) by
-; Christian Krueger, 2009-09-13
-;
-; void* __fastcall__ memcpy (void* dest, const void* src, size_t n);
-;
-; NOTE: This function contains entry points for memmove, which will ressort
-; to memcpy for an upwards copy. Don't change this module without looking
-; at memmove!
-;
-
-        .export         _memcpy, memcpy_upwards, memcpy_getparams
-        .import         popax
-        .importzp       sp, ptr1, ptr2, ptr3
-
-; ----------------------------------------------------------------------
-_memcpy:
-        jsr     memcpy_getparams
-
-memcpy_upwards:                 ; assert Y = 0
-        ldx     ptr3+1          ; Get high byte of n
-        beq     L2              ; Jump if zero
-
-L1:     .repeat 2               ; Unroll this a bit to make it faster...
-        lda     (ptr1),Y        ; copy a byte
-        sta     (ptr2),Y
-        iny
-        .endrepeat
-        bne     L1
-        inc     ptr1+1
-        inc     ptr2+1
-        dex                     ; Next 256 byte block
-        bne     L1              ; Repeat if any
-
-        ; the following section could be 10% faster if we were able to copy
-        ; back to front - unfortunately we are forced to copy strict from
-        ; low to high since this function is also used for
-        ; memmove and blocks could be overlapping!
-        ; {
-L2:                             ; assert Y = 0
-        ldx     ptr3            ; Get the low byte of n
-        beq     done            ; something to copy
-
-L3:     lda     (ptr1),Y        ; copy a byte
-        sta     (ptr2),Y
-        iny
-        dex
-        bne     L3
-
-        ; }
-
-done:   jmp     popax           ; Pop ptr and return as result
-
-; ----------------------------------------------------------------------
-; Get the parameters from stack as follows:
-;
-;       size            --> ptr3
-;       src             --> ptr1
-;       dest            --> ptr2
-;       First argument (dest) will remain on stack and is returned in a/x!
-
-memcpy_getparams:               ; IMPORTANT! Function has to leave with Y=0!
-        sta     ptr3
-        stx     ptr3+1          ; save n to ptr3
-
-        jsr     popax
-        sta     ptr1
-        stx     ptr1+1          ; save src to ptr1
-
-                                ; save dest to ptr2
-        ldy     #1              ; (direct stack access is three cycles faster
-                                ; (total cycle count with return))
-        lda     (sp),y
-        tax
-        stx     ptr2+1          ; save high byte of ptr2
-        dey                     ; Y = 0
-        lda     (sp),y          ; Get ptr2 low
-        sta     ptr2
-        rts
diff --git a/libsrc/common/memmove.s b/libsrc/common/memmove.s
deleted file mode 100644 (file)
index 94ad7d1..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-20
-; Performance increase (about 20%) by
-; Christian Krueger, 2009-09-13
-;
-; void* __fastcall__ memmove (void* dest, const void* src, size_t size);
-;
-; NOTE: This function uses entry points from memcpy!
-;
-
-        .export         _memmove
-        .import         memcpy_getparams, memcpy_upwards, popax
-        .importzp       ptr1, ptr2, ptr3, ptr4, tmp1
-
-        .macpack        generic
-        .macpack        longbranch
-
-; ----------------------------------------------------------------------
-_memmove:
-        jsr     memcpy_getparams
-
-; Check for the copy direction. If dest < src, we must copy upwards (start at
-; low addresses and increase pointers), otherwise we must copy downwards
-; (start at high addresses and decrease pointers).
-
-        sec
-        sbc     ptr1
-        txa
-        sbc     ptr1+1
-        jcc     memcpy_upwards  ; Branch if dest < src (upwards copy)
-
-; Copy downwards. Adjust the pointers to the end of the memory regions.
-
-        lda     ptr1+1
-        add     ptr3+1
-        sta     ptr1+1
-
-        lda     ptr2+1
-        add     ptr3+1
-        sta     ptr2+1
-
-; handle fractions of a page size first
-
-        ldy     ptr3            ; count, low byte
-        bne     @entry          ; something to copy?
-        beq     PageSizeCopy    ; here like bra...
-
-@copyByte:
-        lda     (ptr1),y
-        sta     (ptr2),y
-@entry:
-        dey
-        bne     @copyByte
-        lda     (ptr1),y        ; copy remaining byte
-        sta     (ptr2),y
-
-PageSizeCopy:                   ; assert Y = 0
-        ldx     ptr3+1          ; number of pages
-        beq     done            ; none? -> done
-
-@initBase:
-        dec     ptr1+1          ; adjust base...
-        dec     ptr2+1
-        dey                     ; in entry case: 0 -> FF
-        lda     (ptr1),y        ; need to copy this 'intro byte'
-        sta     (ptr2),y        ; to 'land' later on Y=0! (as a result of the '.repeat'-block!)
-        dey                     ; FF ->FE
-@copyBytes:
-        .repeat 2               ; Unroll this a bit to make it faster...
-        lda     (ptr1),y
-        sta     (ptr2),y
-        dey
-        .endrepeat
-@copyEntry:                     ; in entry case: 0 -> FF
-        bne     @copyBytes
-        lda     (ptr1),y        ; Y = 0, copy last byte
-        sta     (ptr2),y
-        dex                     ; one page to copy less
-        bne     @initBase       ; still a page to copy?
-
-; Done, return dest
-
-done:   jmp     popax           ; Pop ptr and return as result
-                
diff --git a/libsrc/common/memset.s b/libsrc/common/memset.s
deleted file mode 100644 (file)
index 96f5d9e..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-;
-; void* __fastcall__ memset (void* ptr, int c, size_t n);
-; void* __fastcall__ _bzero (void* ptr, size_t n);
-; void __fastcall__ bzero (void* ptr, size_t n);
-;
-; Ullrich von Bassewitz, 29.05.1998
-; Performance increase (about 20%) by
-; Christian Krueger, 12.09.2009, slightly improved 12.01.2011
-;
-; NOTE: bzero will return it's first argument as memset does. It is no problem
-;       to declare the return value as void, since it may be ignored. _bzero
-;       (note the leading underscore) is declared with the proper return type,
-;       because the compiler will replace memset by _bzero if the fill value
-;       is zero, and the optimizer looks at the return type to see if the value
-;       in a/x is of any use.
-;
-
-        .export         _memset, _bzero, __bzero
-        .import         popax
-        .importzp       sp, ptr1, ptr2, ptr3
-
-_bzero:
-__bzero:
-        sta     ptr3
-        stx     ptr3+1          ; Save n
-        ldx     #0              ; Fill with zeros
-        beq     common
-
-_memset:
-        sta     ptr3            ; Save n
-        stx     ptr3+1
-        jsr     popax           ; Get c
-        tax
-
-; Common stuff for memset and bzero from here
-
-common:                         ; Fill value is in X!
-        ldy     #1
-        lda     (sp),y
-        sta     ptr1+1          ; save high byte of ptr
-        dey                     ; Y = 0
-        lda     (sp),y          ; Get ptr
-        sta     ptr1
-
-        lsr     ptr3+1          ; divide number of
-        ror     ptr3            ; bytes by two to increase
-        bcc     evenCount       ; speed (ptr3 = ptr3/2)
-oddCount:
-                                ; y is still 0 here
-        txa                     ; restore fill value
-        sta     (ptr1),y        ; save value and increase
-        inc     ptr1            ; dest. pointer
-        bne     evenCount
-        inc     ptr1+1
-evenCount:
-        lda     ptr1            ; build second pointer section
-        clc
-        adc     ptr3            ; ptr2 = ptr1 + (length/2) <- ptr3
-        sta     ptr2
-        lda     ptr1+1
-        adc     ptr3+1
-        sta     ptr2+1
-
-        txa                     ; restore fill value
-        ldx     ptr3+1          ; Get high byte of n
-        beq     L2              ; Jump if zero
-
-; Set 256/512 byte blocks
-                                ; y is still 0 here
-L1:     .repeat 2               ; Unroll this a bit to make it faster
-        sta     (ptr1),y        ; Set byte in lower section
-        sta     (ptr2),y        ; Set byte in upper section
-        iny
-        .endrepeat
-        bne     L1
-        inc     ptr1+1
-        inc     ptr2+1
-        dex                     ; Next 256 byte block
-        bne     L1              ; Repeat if any
-
-; Set the remaining bytes if any
-
-L2:     ldy     ptr3            ; Get the low byte of n
-        beq     leave           ; something to set? No -> leave
-
-L3:     dey
-        sta     (ptr1),y                ; set bytes in low
-        sta     (ptr2),y                ; and high section
-        bne     L3              ; flags still up to date from dey!
-leave:  
-        jmp     popax           ; Pop ptr and return as result
-
-                
diff --git a/libsrc/common/mkdir.s b/libsrc/common/mkdir.s
deleted file mode 100644 (file)
index 1144983..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Oliver Schmidt, 2005-08-30
-;
-; int mkdir (const char* name, ...);    /* May take a mode argument */
-;
-
-        .export         _mkdir
-
-        .import         __sysmkdir
-        .import         __mappederrno
-
-
-;--------------------------------------------------------------------------
-
-.proc   _mkdir
-
-        jsr     __sysmkdir      ; Call the machine specific function
-        jmp     __mappederrno   ; Store into _oserror, set errno, return 0/-1
-
-.endproc
diff --git a/libsrc/common/mktime.c b/libsrc/common/mktime.c
deleted file mode 100644 (file)
index 4237277..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 mktime.c                                  */
-/*                                                                           */
-/*           Make calendar time from broken down time and cleanup            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <limits.h>
-#include <stdlib.h>
-#include <time.h>
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-#define JANUARY         0
-#define FEBRUARY        1
-#define DECEMBER       11
-#define JAN_1_1970      4               /* 1/1/1970 is a thursday */
-
-
-
-static const unsigned char MonthLength [] = {
-    31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
-};
-static const unsigned MonthDays [] = {
-    0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static unsigned char __fastcall__ IsLeapYear (unsigned Year)
-/* Returns 1 if the given year is a leap year */
-{
-    return (((Year % 4) == 0) && ((Year % 100) != 0 || (Year % 400) == 0));
-}
-
-
-
-time_t __fastcall__ mktime (register struct tm* TM)
-/* Make a time in seconds since 1/1/1970 from the broken down time in TM.
-** A call to mktime does also correct the time in TM to contain correct
-** values.
-*/
-{
-    register div_t D;
-    int Max;
-    unsigned DayCount;
-
-    /* Check if TM is valid */
-    if (TM == 0) {
-        /* Invalid data */
-        goto Error;
-    }
-
-    /* Adjust seconds. */
-    D = div (TM->tm_sec, 60);
-    TM->tm_sec = D.rem;
-
-    /* Adjust minutes */
-    if (TM->tm_min + D.quot < 0) {
-        goto Error;
-    }
-    TM->tm_min += D.quot;
-    D = div (TM->tm_min, 60);
-    TM->tm_min = D.rem;
-
-    /* Adjust hours */
-    if (TM->tm_hour + D.quot < 0) {
-        goto Error;
-    }
-    TM->tm_hour += D.quot;
-    D = div (TM->tm_hour, 24);
-    TM->tm_hour = D.rem;
-
-    /* Adjust days */
-    if (TM->tm_mday + D.quot < 0) {
-        goto Error;
-    }
-    TM->tm_mday += D.quot;
-
-    /* Adjust month and year. This is an iterative process, since changing
-    ** the month will change the allowed days for this month.
-    */
-    while (1) {
-
-        /* Make sure, month is in the range 0..11 */
-        D = div (TM->tm_mon, 12);
-        TM->tm_mon = D.rem;
-        if (TM->tm_year + D.quot < 0) {
-            goto Error;
-        }
-        TM->tm_year += D.quot;
-
-        /* Now check if mday is in the correct range, if not, correct month
-        ** and eventually year and repeat the process.
-        */
-        if (TM->tm_mon == FEBRUARY && IsLeapYear (TM->tm_year + 1900)) {
-            Max = 29;
-        } else {
-            Max = MonthLength[TM->tm_mon];
-        }
-        if (TM->tm_mday > Max) {
-            /* Must correct month and eventually, year */
-            if (TM->tm_mon == DECEMBER) {
-                TM->tm_mon = JANUARY;
-                ++TM->tm_year;
-            } else {
-                ++TM->tm_mon;
-            }
-            TM->tm_mday -= Max;
-        } else {
-            /* Done */
-            break;
-        }
-    }
-
-    /* Ok, all time/date fields are now correct. Calculate the days in this
-    ** year.
-    */
-    TM->tm_yday = MonthDays[TM->tm_mon] + TM->tm_mday - 1;
-    if (TM->tm_mon > FEBRUARY && IsLeapYear (TM->tm_year + 1900)) {
-        ++TM->tm_yday;
-    }
-
-    /* Calculate days since 1/1/1970. In the complete epoch (1/1/1970 to
-    ** somewhere in 2038) all years dividable by 4 are leap years, so
-    ** dividing by 4 gives the days that must be added cause of leap years.
-    ** (and the last leap year before 1970 was 1968)
-    */
-    DayCount = ((unsigned) (TM->tm_year-70)) * 365U +
-               (((unsigned) (TM->tm_year-(68+1))) / 4) +
-               TM->tm_yday;
-
-    /* Calculate the weekday */
-    TM->tm_wday = (JAN_1_1970 + DayCount) % 7;
-
-    /* No (US) daylight saving (for now) */
-    TM->tm_isdst = 0;
-
-    /* Return seconds since 1970 */
-    return DayCount * 86400UL +
-           ((unsigned) TM->tm_hour) * 3600UL +
-           ((unsigned) TM->tm_min) * 60U +
-           ((unsigned) TM->tm_sec);
-
-Error:
-    /* Error exit */
-    return (time_t) -1L;
-}
-
-
-
diff --git a/libsrc/common/modfree.s b/libsrc/common/modfree.s
deleted file mode 100644 (file)
index c3ced33..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-;*****************************************************************************/
-;*                                                                           */
-;*                                   modfree.s                               */
-;*                                                                           */
-;*                          Free loaded o65 modules                          */
-;*                                                                           */
-;*                                                                           */
-;*                                                                           */
-;* (C) 2002      Ullrich von Bassewitz                                       */
-;*               Wacholderweg 14                                             */
-;*               D-70597 Stuttgart                                           */
-;* EMail:        uz@musoftware.de                                            */
-;*                                                                           */
-;*                                                                           */
-;* This software is provided 'as-is', without any expressed or implied       */
-;* warranty.  In no event will the authors be held liable for any damages    */
-;* arising from the use of this software.                                    */
-;*                                                                           */
-;* Permission is granted to anyone to use this software for any purpose,     */
-;* including commercial applications, and to alter it and redistribute it    */
-;* freely, subject to the following restrictions:                            */
-;*                                                                           */
-;* 1. The origin of this software must not be misrepresented; you must not   */
-;*    claim that you wrote the original software. If you use this software   */
-;*    in a product, an acknowledgment in the product documentation would be  */
-;*    appreciated but is not required.                                       */
-;* 2. Altered source versions must be plainly marked as such, and must not   */
-;*    be misrepresented as being the original software.                      */
-;* 3. This notice may not be removed or altered from any source              */
-;*    distribution.                                                          */
-;*                                                                           */
-;*****************************************************************************/
-
-
-        .export         _mod_free
-        .import         _free
-
-_mod_free       = _free                 ; Just free the memory
-
-
diff --git a/libsrc/common/modload.s b/libsrc/common/modload.s
deleted file mode 100644 (file)
index 2a43712..0000000
+++ /dev/null
@@ -1,540 +0,0 @@
-;*****************************************************************************/
-;*                                                                           */
-;*                                   modload.s                               */
-;*                                                                           */
-;*                    o65 module loader for the cc65 library                 */
-;*                                                                           */
-;*                                                                           */
-;*                                                                           */
-;* (C) 2002      Ullrich von Bassewitz                                       */
-;*               Wacholderweg 14                                             */
-;*               D-70597 Stuttgart                                           */
-;* EMail:        uz@musoftware.de                                            */
-;*                                                                           */
-;*                                                                           */
-;* This software is provided 'as-is', without any expressed or implied       */
-;* warranty.  In no event will the authors be held liable for any damages    */
-;* arising from the use of this software.                                    */
-;*                                                                           */
-;* Permission is granted to anyone to use this software for any purpose,     */
-;* including commercial applications, and to alter it and redistribute it    */
-;* freely, subject to the following restrictions:                            */
-;*                                                                           */
-;* 1. The origin of this software must not be misrepresented; you must not   */
-;*    claim that you wrote the original software. If you use this software   */
-;*    in a product, an acknowledgment in the product documentation would be  */
-;*    appreciated but is not required.                                       */
-;* 2. Altered source versions must be plainly marked as such, and must not   */
-;*    be misrepresented as being the original software.                      */
-;* 3. This notice may not be removed or altered from any source              */
-;*    distribution.                                                          */
-;*                                                                           */
-;*****************************************************************************/
-
-
-
-        .include        "o65.inc"
-        .include        "modload.inc"
-        .include        "zeropage.inc"
-
-        .import         pushax, pusha0, push0, push1, decax1
-        .import         _malloc, _free, _bzero
-        .import         __ZP_START__    ; Linker generated
-
-        .macpack        generic
-
-;------------------------------------------------------------------------------
-; Variables stored in the register bank in the zero page. Placing the variables
-; here will protect them when calling other C functions.
-
-Module          = regbank+0             ; Pointer to module memory
-Ctrl            = regbank+2             ; Pointer to mod_ctrl structure
-TPtr            = regbank+4             ; Pointer to module data for relocation
-
-;------------------------------------------------------------------------------
-; Static module data
-
-.bss
-
-; Save areas and error recovery data
-Stack:          .byte   0               ; Old stackpointer
-RegBankSave:    .res    regbanksize     ; Save area for register bank
-
-; The header of the o65 file. Since we don't need the first 8 bytes any
-; longer, once we've checked them, we will overlay them with other data to
-; save a few bytes.
-Header:         .tag    O65_HDR         ; The o65 header
-
-; Input
-InputByte       = Header                ; Byte read from input
-
-; Relocation
-RelocVal        = Header + 1            ; Relocation value
-
-.data
-Read:   jmp     $FFFF                   ; Jump to read routine
-
-.rodata
-ExpectedHdr:
-        .byte   O65_MARKER_0, O65_MARKER_1              ; non C64 marker
-        .byte   O65_MAGIC_0, O65_MAGIC_1, O65_MAGIC_2   ; Magic ("o65")
-        .byte   O65_VERSION                             ; Version
-        .word   O65_MODE_CC65                           ; Mode word
-
-ExpectedHdrSize = * - ExpectedHdr
-
-
-;------------------------------------------------------------------------------
-; PushCallerData: Push the callerdata member from control structure onto the
-; C stack.
-
-.code
-PushCallerData:
-        ldy     #MOD_CTRL::CALLERDATA+1
-        lda     (Ctrl),y
-        tax
-        dey
-        lda     (Ctrl),y
-        jmp     pushax
-
-;------------------------------------------------------------------------------
-; RestoreRegBank: Restore the register bank contents from the save area. Will
-;                 destroy A and X (the latter will be zero on return).
-
-.code
-RestoreRegBank:
-        ldx     #6
-@L1:    lda     RegBankSave-1,x
-        sta     regbank-1,x
-        dex
-        bne     @L1
-        rts
-
-;------------------------------------------------------------------------------
-; GetReloc: Return a relocation value based on the segment in A.
-; The routine uses some knowledge about the values to make the code shorter.
-
-.code
-GetReloc:
-        cmp     #O65_SEGID_TEXT
-        bcc     FormatError
-        cmp     #O65_SEGID_ZP
-        beq     @L1
-        bcs     FormatError
-
-; Text, data and bss segment
-
-        lda     Module
-        ldx     Module+1                ; Return start address of buffer
-        rts
-
-; Zero page relocation
-
-@L1:    lda     #<__ZP_START__
-        ldx     #>__ZP_START__
-        rts
-
-;------------------------------------------------------------------------------
-; ReadByte: Read one byte with error checking into InputByte and A.
-; ReadAndCheckError: Call read with the current C stack and check for errors.
-
-.bss
-ReadSize:       .res    2
-
-.code
-ReadByte:
-
-; C->read (C->callerdata, &B, 1)
-
-        jsr     PushCallerData
-        lda     #<InputByte
-        ldx     #>InputByte
-        jsr     pushax
-        ldx     #0
-        lda     #1
-
-; This is a second entry point used by the other calls to Read
-
-ReadAndCheckError:
-        sta     ReadSize
-        stx     ReadSize+1
-        jsr     Read
-
-; Check the return code and bail out in case of problems
-
-        cmp     ReadSize
-        bne     @L1
-        cpx     ReadSize+1
-        beq     @L2                     ; Jump if ok
-@L1:    lda     #MLOAD_ERR_READ
-        bne     CleanupAndExit
-
-; Done
-
-@L2:    lda     InputByte               ; If called ReadByte, load the byte read
-Done:   rts
-
-;------------------------------------------------------------------------------
-; FormatError: Bail out with an o65 format error
-
-.code
-FormatError:
-        lda     #MLOAD_ERR_FMT
-;       bne     CleanupAndExit          ; Branch always
-
-;------------------------------------------------------------------------------
-; CleanupAndExit: Free any allocated resources, restore the stack and return
-;                 to the caller.
-
-.code
-CleanupAndExit:
-
-; Restore the stack so we may return to the caller from here
-
-        ldx     Stack
-        txs
-
-; Save the error return code
-
-        pha
-
-; Check if we have to free the allocated block
-
-        lda     Module
-        ldx     Module+1
-        bne     @L1
-        tay                             ; Test high byte
-        beq     @L2
-@L1:    jsr     _free                   ; Free the allocated block
-
-; Restore the register bank
-
-@L2:    jsr     RestoreRegBank
-
-; Restore the  error code and return to the caller
-
-        ldx     #$00                    ; Load the high byte
-        pla
-        rts
-
-;------------------------------------------------------------------------------
-; RelocSeg: Relocate the segment pointed to by a/x
-
-.code
-RelocSeg:
-        jsr     decax1                  ; Start value is segment-1
-        sta     TPtr
-        stx     TPtr+1
-
-Loop:   jsr     ReadByte                ; Read byte from relocation table
-        beq     Done                    ; Bail out if end of table reached
-
-        cmp     #255                    ; Special offset?
-        bne     @L1
-
-; Increment offset by 254 and continue
-
-        lda     TPtr
-        add     #254
-        sta     TPtr
-        bcc     Loop
-        inc     TPtr+1
-        jmp     Loop
-
-; Increment offset by A
-
-@L1:    add     TPtr
-        sta     TPtr
-        bcc     @L2
-        inc     TPtr+1
-
-; Read the relocation byte, extract the segment id, fetch the corresponding
-; relocation value and place it into ptr1
-
-@L2:    jsr     ReadByte
-        and     #O65_SEGID_MASK
-        jsr     GetReloc
-        sta     RelocVal
-        stx     RelocVal+1
-
-; Get the relocation byte again, this time extract the relocation type.
-
-        lda     InputByte
-        and     #O65_RTYPE_MASK
-
-; Check for and handle the different relocation types.
-
-        cmp     #O65_RTYPE_WORD
-        beq     RelocWord
-        cmp     #O65_RTYPE_HIGH
-        beq     RelocHigh
-        cmp     #O65_RTYPE_LOW
-        bne     FormatError
-
-; Relocate the low byte
-
-RelocLow:
-        ldy     #0
-        clc
-        lda     RelocVal
-        bcc     AddCommon
-
-; Relocate a high byte
-
-RelocHigh:
-        jsr     ReadByte                ; Read low byte from relocation table
-        ldy     #0
-        clc
-        adc     RelocVal                ; We just need the carry
-AddHigh:
-        lda     RelocVal+1
-AddCommon:
-        adc     (TPtr),y
-        sta     (TPtr),y
-        jmp     Loop                    ; Done, next entry
-
-; Relocate a word
-
-RelocWord:
-        ldy     #0
-        clc
-        lda     RelocVal
-        adc     (TPtr),y
-        sta     (TPtr),y
-        iny
-        bne     AddHigh                 ; Branch always (add high byte)
-
-;------------------------------------------------------------------------------
-; mod_load: Load and relocate an o65 module
-
-.code
-_mod_load:
-
-; Save the register bank and clear the Module pointer
-
-        pha
-        ldy     #6
-@L1:    lda     regbank-1,y
-        sta     RegBankSave-1,y
-        dey
-        bne     @L1
-        sty     Module
-        sty     Module+1
-        pla
-
-; Save the passed parameter
-
-        sta     Ctrl
-        stx     Ctrl+1
-
-; Save the stack pointer so we can bail out even from subroutines
-
-        tsx
-        stx     Stack
-
-; Get the read function pointer from the control structure and place it into
-; our call vector
-
-        ldy     #MOD_CTRL::READ
-        lda     (Ctrl),y
-        sta     Read+1
-        iny
-        lda     (Ctrl),y
-        sta     Read+2
-
-; Read the o65 header: C->read (C->callerdata, &H, sizeof (H))
-
-        jsr     PushCallerData
-        lda     #<Header
-        ldx     #>Header
-        jsr     pushax
-        lda     #.sizeof(O65_HDR)
-        ldx     #0                      ; Always less than 256
-        jsr     ReadAndCheckError       ; Bails out in case of errors
-
-; We read the o65 header successfully. Validate it.
-
-        ldy     #ExpectedHdrSize-1
-ValidateHeader:
-        lda     Header,y
-        cmp     ExpectedHdr,y
-        bne     HeaderError
-        dey
-        bpl     ValidateHeader
-
-; Header is ok as far as we can say now. Read all options, check for the
-; OS option and ignore all others. The OS option contains a version number
-; and the module id as additional data.
-
-        iny                             ; Y = $00
-        sty     TPtr+1                  ; Flag for OS option read
-Opt:    jsr     ReadByte                ; Read the length byte
-        beq     OptDone                 ; Jump if done
-        sta     TPtr                    ; Use TPtr as a counter
-
-; An option has a length of at least 2 bytes
-
-        cmp     #2
-        bcc     HeaderError             ; Must be 2 bytes total at least
-
-; Check for the OS option
-
-        dec     TPtr
-        jsr     ReadByte                ; Get the option type
-        cmp     #O65_OPT_OS             ; OS option?
-        bne     SkipOpt                 ; No: Skip
-
-        lda     TPtr                    ; Get remaining length+1
-        cmp     #5                      ; CC65 has 6 bytes total
-        bne     OSError
-
-        jsr     ReadByte                ; Get the operating system
-        cmp     #O65_OS_CC65
-        bne     OSError                 ; Wrong operating system
-
-        jsr     ReadByte                ; Get the version number, expect zero
-        bne     OSError                 ; Wrong version
-
-        jsr     ReadByte                ; Get low byte of id
-        ldy     #MOD_CTRL::MODULE_ID
-        sta     (Ctrl),y
-        jsr     ReadByte
-        ldy     #MOD_CTRL::MODULE_ID+1
-        sta     (Ctrl),y
-
-        inc     TPtr+1                  ; Remember that we got the OS
-
-        jmp     Opt
-
-; Skip one option
-
-SkipOpt:
-        dec     TPtr
-        beq     Opt                     ; Next option
-        jsr     ReadByte                ; Skip one byte
-        jmp     SkipOpt
-
-; Operating system error
-
-OSError:
-        lda     #MLOAD_ERR_OS
-        jmp     CleanupAndExit
-
-; Options done, check that we got the OS option
-
-OptDone:
-        lda     TPtr+1
-        bne     CalcSizes
-
-; Entry point for header errors
-
-HeaderError:
-        lda     #MLOAD_ERR_HDR
-        jmp     CleanupAndExit
-
-; Skipped all options. Calculate the size of text+data and of text+data+bss
-; (the latter is the size of the memory block we need). We will store the
-; total module size also into the control structure for evaluation by the
-; caller
-
-CalcSizes:
-        lda     Header + O65_HDR::TLEN
-        add     Header + O65_HDR::DLEN
-        sta     TPtr
-        lda     Header + O65_HDR::TLEN + 1
-        adc     Header + O65_HDR::DLEN + 1
-        sta     TPtr+1
-        lda     TPtr
-        add     Header + O65_HDR::BLEN
-        pha                             ; Save low byte of total size
-        ldy     #MOD_CTRL::MODULE_SIZE
-        sta     (Ctrl),y
-        lda     TPtr+1
-        adc     Header + O65_HDR::BLEN + 1
-        iny
-        sta     (Ctrl),y
-        tax
-        pla                             ; Restore low byte of total size
-
-; Total memory size is now in a/x. Allocate memory and remember the result,
-; both, locally and in the control structure so it the caller can access
-; the memory block. After that, check if we got the requested memory.
-
-        jsr     _malloc
-        sta     Module
-        stx     Module+1
-
-        ldy     #MOD_CTRL::MODULE
-        sta     (Ctrl),y
-        txa
-        iny
-        sta     (Ctrl),y
-        ora     Module
-        bne     GotMem
-
-; Could not allocate memory
-
-        lda     #MLOAD_ERR_MEM
-        jmp     CleanupAndExit
-
-; Control structure is complete now. Clear the bss segment.
-; bzero (bss_addr, bss_size)
-
-GotMem: lda     Module
-        add     TPtr
-        pha
-        lda     Module+1
-        adc     TPtr+1                  ; Module + tlen + dlen
-        tax
-        pla
-        jsr     pushax
-        lda     Header + O65_HDR::BLEN
-        ldx     Header + O65_HDR::BLEN+1
-        jsr     _bzero                  ; bzero (bss, bss_size);
-
-; Load code and data segment into memory. The sum of the sizes of
-; code+data segment is still in TPtr.
-; C->read (C->callerdata, C->module, H.tlen + H.dlen)
-
-        jsr     PushCallerData
-        lda     Module
-        ldx     Module+1
-        jsr     pushax
-        lda     TPtr
-        ldx     TPtr+1
-        jsr     ReadAndCheckError       ; Bails out in case of errors
-
-; We've got the code and data segments in memory. Next section contains
-; undefined references which we don't support. So check if the count of
-; undefined references is actually zero.
-
-        jsr     ReadByte
-        bne     Undef
-        jsr     ReadByte
-        beq     Reloc
-Undef:  jmp     FormatError
-
-; Number of undefined references was zero. Next come the relocation tables
-; for code and data segment. Relocate the code segment
-
-Reloc:  lda     Module
-        ldx     Module + 1              ; Code segment address
-        jsr     RelocSeg
-
-; Relocate the data segment
-
-        lda     Module
-        add     Header + O65_HDR::TLEN
-        pha
-        lda     Module + 1
-        adc     Header + O65_HDR::TLEN + 1
-        tax
-        pla                             ; Data segment address in a/x
-        jsr     RelocSeg
-
-; We're done. Restore the register bank and return a success code
-
-        jsr     RestoreRegBank          ; X will be zero on return
-        lda     #MLOAD_OK
-        rts
-
diff --git a/libsrc/common/perror.c b/libsrc/common/perror.c
deleted file mode 100644 (file)
index ddc015c..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 perror.c                                  */
-/*                                                                           */
-/*                       Print a system error message                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2010, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-
-
-void __fastcall__ perror (const char* msg)
-{
-    /* Fetch the message that corresponds to errno */
-    const char* errormsg = strerror (_errno);
-
-    /* Different output depending on msg */
-    if (msg) {
-        fprintf (stderr, "%s: %s\n", msg, errormsg);
-    } else {
-        fprintf (stderr, "%s\n", errormsg);
-    }
-}
-
-
-
diff --git a/libsrc/common/pmemalign.c b/libsrc/common/pmemalign.c
deleted file mode 100644 (file)
index 8f055a3..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                              posix_memalign                               */
-/*                                                                           */
-/*                     Allocate an aligned memory block                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004-2005 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided "as-is," without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software.  If you use this software  */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated, but is not required.                                      */
-/* 2. Alterred source versions must be marked plainly as such, and must not  */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or alterred from any source             */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stddef.h>                     /* define NULL */
-#include <stdlib.h>                     /* declare function's prototype */
-#include <_heap.h>
-
-#include <errno.h>
-#define EOK             0               /* No errors (non-standard name) */
-
-
-
-/* This is a very simple version of an aligned memory allocator.  We will
-** allocate a greater block, so that we can place the aligned block (that is
-** returned) within it.  We use our knowledge about the internal heap
-** structures to free the unused parts of the bigger block (the two chunks
-** below and above the aligned block).
-*/
-
-
-
-int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size)
-/* Allocate a block of memory with the given "size", which is aligned to a
-** memory address that is a multiple of "alignment".  "alignment" MUST NOT be
-** zero, and MUST be a power of two; otherwise, this function will return
-** EINVAL.  The function returns ENOMEM if not enough memory is available
-** to satisfy the request.  "memptr" must point to a variable; that variable
-** will return the address of the allocated memory.  Use free() to release that
-** allocated block.
-*/
-{
-    size_t rawsize;
-    size_t uppersize;
-    size_t lowersize;
-    register struct usedblock* b;       /* points to raw Block */
-    register struct usedblock* u;       /* points to User block */
-    register struct usedblock* p;       /* Points to upper block */
-
-    /* Handle requests for zero-sized blocks */
-    if (size == 0) {
-        *memptr = NULL;
-        return EINVAL;
-    }
-
-    /* Test alignment: is it a power of two? There must be only one bit set. */
-    if (alignment == 0 || (alignment & --alignment) != 0) {
-        *memptr = NULL;
-        return EINVAL;
-    }
-
-    /* Augment the block size up to the alignment, and allocate memory.
-    ** We don't need to account for the additional admin. data that's needed to
-    ** manage the used block, because the block returned by malloc() has that
-    ** overhead added one time; and, the worst thing that might happen is that
-    ** we cannot free the upper and lower blocks.
-    */
-    b = malloc (size + alignment);
-
-    /* Handle out-of-memory */
-    if (b == NULL) {
-        *memptr = NULL;
-        return ENOMEM;
-    }
-
-    /* Create (and return) a new pointer that points to the user-visible
-    ** aligned block.
-    */
-    u = *memptr = (struct usedblock*) (((unsigned)b + alignment) & ~alignment);
-
-    /* Get a pointer to the (raw) upper block */
-    p = (struct usedblock*) ((char*)u + size);
-
-    /* Get the raw-block pointer, which is located just below the visible
-    ** unaligned block.  The first word of this raw block is the total size
-    ** of the block, including the admin. space.
-    */
-    b = (b-1)->start;
-    rawsize = b->size;
-
-    /* Check if we can free the space above the user block.  That is the case
-    ** if the size of the block is at least sizeof (struct freeblock) bytes,
-    ** and the size of the remaining block is at least that size, too.
-    ** If the upper block is smaller, then we just will pass it to the caller,
-    ** together with the requested aligned block.
-    */
-    uppersize = rawsize - (lowersize = (char*)p - (char*)b);
-    if (uppersize >= sizeof (struct freeblock) &&
-        lowersize >= sizeof (struct freeblock)) {
-
-        /* Setup the usedblock structure */
-        p->size  = uppersize;
-        p->start = p;
-
-        /* Generate a pointer to the (upper) user space, and free that block */
-        free (p + 1);
-
-        /* Decrease the raw-block size by the amount of space just freed */
-        rawsize = lowersize;
-    }
-
-    /* Check if we can free the space below the user block.  That is the case
-    ** if the size of the block is at least sizeof (struct freeblock) bytes,
-    ** and the size of the remaining block is at least that size, too.  If the
-    ** lower block is smaller, we just will pass it to the caller, together
-    ** with the requested aligned block.
-    ** Beware:  We need an additional struct usedblock, in the lower block,
-    ** which is part of the block that is passed back to the caller.
-    */
-    lowersize = ((char*)u - (char*)b) - sizeof (struct usedblock);
-    if (           lowersize  >= sizeof (struct freeblock) &&
-        (rawsize - lowersize) >= sizeof (struct freeblock)) {
-
-        /* b already points to the raw lower-block.
-        ** Set up the usedblock structure.
-        */
-        b->size  = lowersize;
-        b->start = b;
-
-        /* Generate a pointer to the (lower) user space, and free that block */
-        free (b + 1);
-
-        /* Decrease the raw-block size by the amount of space just freed */
-        rawsize -= lowersize;
-
-        /* Set b to the raw user-block (that will be returned) */
-        b = u - 1;
-    }
-
-    /* u points to the user-visible block, while b points to the raw block,
-    ** and rawsize contains the length of the raw block.  Set up the usedblock
-    ** structure, but beware:  If we didn't free the lower block, then it is
-    ** split; which means that we must use b to write the size,
-    ** and u to write the start field.
-    */
-    b->size = rawsize;
-    (u-1)->start = b;
-
-    return EOK;
-}
-
-
-
diff --git a/libsrc/common/printf.s b/libsrc/common/printf.s
deleted file mode 100644 (file)
index 8d645df..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-;
-; int printf (const char* Format, ...);
-;
-; Ullrich von Bassewitz, 1.12.2000
-;
-
-        .export         _printf
-        .import         _stdout, pushax, addysp, _vfprintf
-        .importzp       sp, ptr1
-
-        .macpack        generic
-
-; ----------------------------------------------------------------------------
-; Data
-
-.bss
-
-ParamSize:      .res    1               ; Number of parameter bytes
-
-; ----------------------------------------------------------------------------
-; Code
-
-.code
-
-
-_printf:
-        sty     ParamSize               ; Number of param bytes passed in Y
-
-; We are using a (hopefully) clever trick here to reduce code size. On entry,
-; the stack pointer points to the last pushed parameter of the variable
-; parameter list. Adding the number of parameter bytes, would result in a
-; pointer that points *after* the Format parameter.
-; Since we have to push stdout anyway, we will do that here, so
-;
-;   * we will save the subtraction of 2 (__fixargs__) later
-;   * we will have the address of the Format parameter which needs to
-;     be pushed next.
-;
-
-        lda     _stdout
-        ldx     _stdout+1
-        jsr     pushax
-
-; Now calculate the va_list pointer, which does points to Format
-
-        lda     sp
-        ldx     sp+1
-        add     ParamSize
-        bcc     @L1
-        inx
-@L1:    sta     ptr1
-        stx     ptr1+1
-
-; Push Format
-
-        ldy     #1
-        lda     (ptr1),y
-        tax
-        dey
-        lda     (ptr1),y
-        jsr     pushax
-
-; Load va_list (last and __fastcall__ parameter to vfprintf)
-
-        lda     ptr1
-        ldx     ptr1+1
-
-; Call vfprintf
-
-        jsr     _vfprintf
-
-; Cleanup the stack. We will return what we got from vfprintf
-
-        ldy     ParamSize
-        jmp     addysp
-
diff --git a/libsrc/common/putchar.s b/libsrc/common/putchar.s
deleted file mode 100644 (file)
index 1de1a54..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 2004-10-06
-;
-; int __fastcall__ putchar (int c);
-;
-
-        .export         _putchar
-        .import         pushax
-        .import         _stdout
-        .import         _fputc
-
-
-.code
-
-_putchar:
-        jsr     pushax          ; Push c
-        lda     _stdout
-        ldx     _stdout+1
-        jmp     _fputc          ; __fastcall__ function
-
-
-
diff --git a/libsrc/common/putenv.s b/libsrc/common/putenv.s
deleted file mode 100644 (file)
index 7e44a7c..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-;
-; Ullrich von Bassewitz, 2005-04-21
-;
-; int putenv (char* s);
-;
-; Note: The function will place s into the environment, *not* a copy!
-;
-
-        .export _putenv
-        .import _malloc, _free
-        .import searchenv, copyenvptr
-        .import __environ, __envcount, __envsize
-        .import return0
-        .import ptr1:zp, ptr2:zp, ptr3:zp, tmp1:zp
-
-        .include "errno.inc"
-
-.code
-
-;----------------------------------------------------------------------------
-; putenv()
-
-.proc   _putenv
-
-        sta     ptr1
-        sta     name
-        stx     ptr1+1                  ; Save name
-        stx     name+1
-
-; Loop over the name to find the '='. If there is no '=', set errno to EINVAL
-; and return an error.
-
-        ldy     #$FF
-@L0:    iny
-        lda     (ptr1),y
-        bne     @L1
-        lda     #EINVAL
-        jmp     error                   ; End of string without '=' found
-@L1:    cmp     #'='
-        bne     @L0
-
-; Remember the offset of the equal sign and replace it by a zero.
-
-        sty     tmp1
-        lda     #$00
-        sta     (ptr1),y
-
-; Search for the string in the environment. searchenv will set the N flag if
-; the string is not found, otherwise X contains the index of the entry, ptr2
-; contains the entry and Y the offset of the '=' in the string. ptr3 will
-; point to the environment.
-
-        jsr     searchenv
-
-; Before doing anything else, restore the old environment string.
-
-        ldy     tmp1
-        lda     #'='
-        sta     (ptr1),y
-
-; Check the result of searchenv
-
-        txa                             ; Did we find the entry?
-        bpl     addentry                ; Jump if yes
-
-; We didn't find the entry, so we have to add a new one. Before doing so, we
-; must check if the size of the _environ array must be increased.
-; Note: There must be one additional slot for the final NULL entry.
-
-        ldx     __envcount
-        inx
-        cpx     __envsize
-        bcc     addnewentry             ; Jump if space enough
-
-; We need to increase the size of the environ array. Calculate the new size.
-; We will not support a size larger than 64 entries, double the size with
-; each overflow, and the starting size is 8 entries.
-
-        lda     __envsize
-        bne     @L2
-        lda     #4                      ; Start with 4*2 entries
-@L2:    asl     a                       ; Double current size
-        bmi     nomem                   ; Bail out if > 64
-        sta     newsize                 ; Remember the new size
-
-; Call malloc() and store the result in ptr2
-
-        asl     a                       ; Make words
-        ldx     #$00
-        jsr     _malloc
-        sta     ptr2
-        stx     ptr2+1
-
-; Check the result of malloc
-
-        ora     ptr2+1
-        beq     nomem
-
-; Copy the old environment pointer to ptr3, and the new one to __environ.
-
-        ldx     #1
-@L3:    lda     __environ,x
-        sta     ptr3,x
-        lda     ptr2,x
-        sta     __environ,x
-        dex
-        bpl     @L3
-
-; Use the new size.
-
-        lda     newsize
-        sta     __envsize
-
-; Copy the old environment data into the new space.
-
-        lda     __envcount
-        asl     a
-        tay
-        jmp     @L5
-@L4:    lda     (ptr3),y
-        sta     (ptr2),y
-@L5:    dey
-        bpl     @L4
-
-; Free the old environment space
-
-        lda     ptr3
-        ldx     ptr3+1
-        jsr     _free
-
-; Since free() has destroyed ptr2, we need another copy ...
-
-        jsr     copyenvptr              ; Copy __environ to ptr2
-
-; Bump the environment count and remember it in X. Add the final NULL entry.
-
-addnewentry:
-        inc     __envcount
-        ldx     __envcount
-        txa
-        asl     a
-        tay
-        lda     #$00
-        sta     (ptr2),y
-        iny
-        sta     (ptr2),y
-
-; The index of the new entry is the old environment count.
-
-        dex
-        txa
-
-; Add the new entry to the slot with index in X. The pointer to the environment
-; is already in ptr2, either by a call to searchenv, or by above code.
-
-addentry:
-        asl     a
-        tay
-        lda     name
-        sta     (ptr2),y
-        iny
-        lda     name+1
-        sta     (ptr2),y
-
-; Done
-
-        jmp     return0
-
-; Error entries
-
-nomem:  lda     #ENOMEM
-error:  jsr     __seterrno
-        lda     #$FF                    ; Return -1
-        tax
-        rts
-
-.endproc
-
-
-;----------------------------------------------------------------------------
-; data
-
-.bss
-
-name:           .addr   0               ; Pointer to name
-newsize:        .byte   0               ; New environment size
-
-                
diff --git a/libsrc/common/puts.c b/libsrc/common/puts.c
deleted file mode 100644 (file)
index dbca603..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-** puts.c
-**
-** Ullrich von Bassewitz, 11.08.1998
-*/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include "_file.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int __fastcall__ puts (const char* s)
-{
-    static char nl = '\n';
-
-    /* Assume stdout is always open */
-    if (write (stdout->f_fd, s, strlen (s)) < 0 ||
-        write (stdout->f_fd, &nl, 1)        < 0) {
-        stdout->f_flags |= _FERROR;
-        return -1;
-    }
-
-    /* Done */
-    return 0;
-}
-
-
-
diff --git a/libsrc/common/qsort.c b/libsrc/common/qsort.c
deleted file mode 100644 (file)
index 991db3b..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-** qsort.c
-**
-** 1998.12.09, Ullrich von Bassewitz
-** 2015-06-21, Greg King
-*/
-
-
-
-#include <stdlib.h>
-
-
-
-static void QuickSort (register unsigned char* Base, int Lo, int Hi,
-                       register size_t Size,
-                       int __fastcall__ (* Compare) (const void*, const void*))
-/* Internal recursive function. Works with ints, but this shouldn't be
-** a problem.
-*/
-{
-    int I, J;
-
-    /* Quicksort */
-    while (Hi > Lo) {
-        I = Lo + Size;
-        J = Hi;
-        while (I <= J) {
-            while (I <= J && Compare (Base + Lo, Base + I) >= 0) {
-                I += Size;
-            }
-            while (I <= J && Compare (Base + Lo, Base + J) < 0) {
-                J -= Size;
-            }
-            if (I <= J) {
-                _swap (Base + I, Base + J, Size);
-                I += Size;
-                J -= Size;
-            }
-        }
-        if (J != Lo) {
-            _swap (Base + J, Base + Lo, Size);
-        }
-        if (((unsigned) J) * 2 > (Hi + Lo)) {
-            QuickSort (Base, J + Size, Hi, Size, Compare);
-            Hi = J - Size;
-        } else {
-            QuickSort (Base, Lo, J - Size, Size, Compare);
-            Lo = J + Size;
-        }
-    }
-}
-
-
-
-void __fastcall__ qsort (void* base, size_t nmemb, size_t size,
-                         int __fastcall__ (* compare) (const void*, const void*))
-/* Quicksort implementation */
-{
-    if (nmemb > 1) {
-        QuickSort (base, 0, (nmemb-1) * size, size, compare);
-    }
-}
-
-
-
diff --git a/libsrc/common/raise.s b/libsrc/common/raise.s
deleted file mode 100644 (file)
index db96cdc..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-03-14
-;
-; int __fastcall__ raise (int sig);
-;
-
-        .import         jmpvec
-
-        .include        "signal.inc"
-
-
-;----------------------------------------------------------------------------
-; int __fastcall__ raise (int sig);
-
-
-_raise:
-        cpx     #0
-        bne     invalidsig
-        cmp     #SIGCOUNT
-        bcs     invalidsig
-
-; Save the signal number low byte, then setup the function vector
-
-        pha
-        asl     a
-        tax
-        lda     sigtable,x
-        sta     jmpvec+1
-        lda     sigtable+1,x
-        sta     jmpvec+2
-                            
-; Reset the signal handler to SIG_DFL (I don't like this because it may
-; introduce race conditions, but it's the simplest way to satisfy the 
-; standard).
-
-        lda     #<__sig_dfl
-        sta     sigtable,x
-        lda     #>__sig_dfl
-        sta     sigtable+1,x
-
-; Restore the signal number and call the function
-
-        pla                     ; Low byte
-        ldx     #0              ; High byte
-        jsr     jmpvec          ; Call signal function
-
-; raise() returns zero on success and any other value on failure
-
-        lda     #0
-        tax
-invalidsig:
-        rts
-
-            
diff --git a/libsrc/common/rand.s b/libsrc/common/rand.s
deleted file mode 100644 (file)
index 48a88b7..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-;
-; Randum number generator
-;
-; Written and donated by Sidney Cadot - sidney@ch.twi.tudelft.nl
-;
-; May be distributed with the cc65 runtime using the same license.
-;
-;
-; int rand (void);
-; void srand (unsigned seed);
-;
-;  Uses 4-byte state.
-;  Multiplier must be 1 (mod 4)
-;  Added value must be 1 (mod 2)
-;  This guarantees max. period (2**32)
-;  Bits 8-22 are returned (positive 2-byte int)
-;  where 0 is LSB, 31 is MSB.
-;  This is better as lower bits exhibit easily
-;  detectable patterns.
-;
-
-        .export         _rand, _srand
-
-.data
-
-; The seed. When srand() is not called, the C standard says that that rand()
-; should behave as if srand() was called with an argument of 1 before.
-rand:   .dword   1
-
-.code
-
-_rand:  clc
-        lda     rand+0          ; SEED *= $01010101
-        adc     rand+1
-        sta     rand+1
-        adc     rand+2
-        sta     rand+2
-        adc     rand+3
-        sta     rand+3
-        clc
-        lda     rand+0          ; SEED += $31415927
-        adc     #$27
-        sta     rand+0
-        lda     rand+1
-        adc     #$59
-        sta     rand+1
-        pha
-        lda     rand+2
-        adc     #$41
-        sta     rand+2
-        and     #$7f            ; Suppress sign bit (make it positive)
-        tax
-        lda     rand+3
-        adc     #$31
-        sta     rand+3
-        pla                     ; return bit 8-22 in (X,A)
-        rts
-
-_srand: sta     rand+0          ; Store the seed
-        stx     rand+1
-        lda     #0
-        sta     rand+2          ; Set MSW to zero
-        sta     rand+3
-        rts
-
-
diff --git a/libsrc/common/realloc.c b/libsrc/common/realloc.c
deleted file mode 100644 (file)
index c47dbbb..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 realloc.c                                 */
-/*                                                                           */
-/*               Change the size of an allocated memory block                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2004 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-#include <string.h>
-#include <_heap.h>
-
-
-
-void* __fastcall__ realloc (void* block, register size_t size)
-{
-    register struct usedblock* b;
-    struct usedblock* newblock;
-    unsigned oldsize;
-    unsigned newhptr;
-
-    /* Check the block parameter */
-    if (!block) {
-        /* Block is NULL, same as malloc */
-        return malloc (size);
-    }
-
-    /* Check the size parameter */
-    if (size == 0) {
-        /* Block is not NULL, but size is: free the block */
-        free (block);
-        return 0;
-    }
-
-    /* Make the internal used size from the given size */
-    size += HEAP_ADMIN_SPACE;
-    if (size < sizeof (struct freeblock)) {
-        size = sizeof (struct freeblock);
-    }
-
-    /* The word below the user block contains a pointer to the start of the
-    ** raw memory block. The first word of this raw memory block is the full
-    ** size of the block. Get a pointer to the real block, get the old block
-    ** size.
-    */
-    b = (((struct usedblock*) block) - 1)->start;
-    oldsize = b->size;
-
-    /* Is the block at the current heap top? */
-    if (((unsigned) b) + oldsize == ((unsigned) _heapptr)) {
-        /* Check if we've enough memory at the heap top */
-        newhptr = ((unsigned) _heapptr) - oldsize + size;
-        if (newhptr <= ((unsigned) _heapend)) {
-            /* Ok, there's space enough */
-            _heapptr = (unsigned*) newhptr;
-            b->size = size;
-            b->start = b;
-            return block;
-        }
-    }
-
-    /* The given block was not located on top of the heap, or there's no
-    ** room left. Try to allocate a new block and copy the data.
-    */
-    if (newblock = malloc (size)) {
-
-        /* Adjust the old size to the user visible portion */
-        oldsize -= HEAP_ADMIN_SPACE;
-
-        /* If the new block is larger than the old one, copy the old
-        ** data only
-        */
-        if (size > oldsize) {
-            size = oldsize;
-        }
-
-        /* Copy the block data */
-        memcpy (newblock, block, size);
-        free (block);
-    }
-    return newblock;
-}
-
-
-
diff --git a/libsrc/common/remove.s b/libsrc/common/remove.s
deleted file mode 100644 (file)
index e66f047..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; int __fastcall__ remove (const char* name);
-;
-
-        .export         _remove
-
-        .import         __sysremove
-        .import         __mappederrno
-
-
-;--------------------------------------------------------------------------
-
-.proc   _remove
-
-        jsr     __sysremove     ; Call the machine specific function
-        jmp     __mappederrno   ; Store into _oserror, set errno, return 0/-1
-
-.endproc
-
-
-
-
diff --git a/libsrc/common/rename.s b/libsrc/common/rename.s
deleted file mode 100644 (file)
index 0fbffa4..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; int __fastcall__ rename (const char* oldname, const char* newname);
-;
-
-        .export         _rename
-
-        .import         __sysrename
-        .import         __mappederrno
-
-
-;--------------------------------------------------------------------------
-
-.proc   _rename
-
-        jsr     __sysrename     ; Call the machine specific function
-        jmp     __mappederrno   ; Store into _oserror, set errno, return 0/-1
-
-.endproc
-
-
-
-
diff --git a/libsrc/common/rewind.c b/libsrc/common/rewind.c
deleted file mode 100644 (file)
index a4cdfa9..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-** rewind.c
-**
-** Christian Groessler, 07-Aug-2000
-*/
-
-
-
-#include <stdio.h>
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void __fastcall__ rewind (FILE* f)
-{
-    fseek(f, 0L, SEEK_SET);
-    clearerr(f);
-}
-
-                  
diff --git a/libsrc/common/rmdir.s b/libsrc/common/rmdir.s
deleted file mode 100644 (file)
index 84ae9a5..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Oliver Schmidt, 2005-08-30
-;
-; int __fastcall__ rmdir (const char* name);
-;
-
-        .export         _rmdir
-
-        .import         __sysrmdir
-        .import         __mappederrno
-
-
-;--------------------------------------------------------------------------
-
-.proc   _rmdir
-
-        jsr     __sysrmdir      ; Call the machine specific function
-        jmp     __mappederrno   ; Store into _oserror, set errno, return 0/-1
-
-.endproc
diff --git a/libsrc/common/scanf.s b/libsrc/common/scanf.s
deleted file mode 100644 (file)
index dd6c16a..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-;
-; int scanf(const char* Format, ...);
-;
-; 2000-12-01, Ullrich von Bassewitz
-; 2004-12-31, Greg King
-;
-
-        .export         _scanf
-
-        .import         _stdin, pushax, addysp, _vfscanf
-        .import         sp:zp, ptr1:zp
-
-        .macpack        generic
-
-; ----------------------------------------------------------------------------
-; Code
-;
-_scanf:
-        sty     ArgSize         ; Number of argument bytes passed in .Y
-
-; We are using a (hopefully) clever trick here to reduce code size.  On entry,
-; the stack pointer points to the last pushed argument of the variable
-; argument list.  Adding the number of argument bytes, would result in a
-; pointer that points _above_ the Format argument.
-; Because we have to push stdin anyway, we will do that here, so:
-;
-;   * we will save the subtraction of 2 (__fixargs__) later;
-;   * we will have the address of the Format argument which needs to
-;     be pushed next.
-
-        lda     _stdin
-        ldx     _stdin+1
-        jsr     pushax
-
-; Now, calculate the va_list pointer, which does point to Format.
-
-        lda     sp
-        ldx     sp+1
-        add     ArgSize
-        bcc     @L1
-        inx
-@L1:    sta     ptr1
-        stx     ptr1+1
-
-; Push a copy of Format.
-
-        ldy     #1
-        lda     (ptr1),y
-        tax
-        dey
-        lda     (ptr1),y
-        jsr     pushax
-
-; Load va_list [last and __fastcall__ argument to vfscanf()].
-
-        lda     ptr1
-        ldx     ptr1+1
-
-; Call vfscanf().
-
-        jsr     _vfscanf
-
-; Clean up the stack.  We will return what we got from vfscanf().
-
-        ldy     ArgSize
-        jmp     addysp
-
-; ----------------------------------------------------------------------------
-; Data
-;
-        .bss
-ArgSize:
-        .res    1               ; Number of argument bytes
-
diff --git a/libsrc/common/searchenv.s b/libsrc/common/searchenv.s
deleted file mode 100644 (file)
index 7a48a3a..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-;
-; Ullrich von Bassewitz, 2005-04-21
-;
-; Search the environment for a string.
-;
-
-        .export searchenv, copyenvptr
-        .import __environ, __envcount
-        .import ptr1:zp, ptr2:zp, ptr3:zp
-
-.code
-
-;----------------------------------------------------------------------------
-; searchenv:
-;
-; ptr1 must contain the string to search for. On exit, the N flag will tell
-; if the entry was found, and X will contain the index of the environment
-; string in the environment (a negative value if the entry was not found).
-; On success, ptr3 will contain the entry and Y the offset of the '=' within
-; the string.
-
-.proc   searchenv
-
-; Copy the pointer to the environment to the zero page
-
-        jsr     copyenvptr
-
-; Loop over all environment entries trying to find the requested one.
-
-        ldx     __envcount
-@L0:    dex
-        bmi     @L9                     ; Out of entries
-
-; Since the maximum number of entries is 64, the index can only be 63, so
-; the following shift cannot overflow and the carry is clear.
-
-        txa
-        asl     a                       ; Mul by two for word access
-        tay
-        lda     (ptr2),y
-        sta     ptr3
-        iny
-        lda     (ptr2),y
-        sta     ptr3+1
-
-; ptr1 points to name, ptr3 points to the next environment entry. Compare the
-; two. The following loop limits the length of name to 255 bytes.
-
-        ldy     #$00
-@L1:    lda     (ptr1),y
-        beq     @L2                     ; Jump on end of name
-        cmp     (ptr3),y
-        bne     @L0                     ; Next environment entry
-        iny
-        bne     @L1
-
-; End of name reached, check if the environment entry contains a '=' char
-
-@L2:    lda     (ptr3),y
-        cmp     #'='
-        bne     @L0                     ; Next environment entry
-
-; Done. The function result is in X and the N flag is set correctly.
-
-@L9:    rts
-
-.endproc
-
-
-;----------------------------------------------------------------------------
-; copyenvptr: Copy _environ to ptr2
-;
-
-.proc   copyenvptr
-
-        lda     __environ
-        sta     ptr2
-        lda     __environ+1
-        sta     ptr2+1
-        rts
-
-.endproc
-
-
diff --git a/libsrc/common/setjmp.s b/libsrc/common/setjmp.s
deleted file mode 100644 (file)
index a763ac3..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-;
-; 1998-06-06, Ullrich von Bassewitz
-; 2015-09-11, Greg King
-;
-; int __fastcall__ setjmp (jmp_buf buf);
-;
-
-        .export         __setjmp
-
-        .import         return0
-        .importzp       sp, ptr1
-
-__setjmp:
-        sta     ptr1            ; Save buf
-        stx     ptr1+1
-        ldy     #0
-
-; The parameter stack is now empty, put it into buf
-
-        lda     sp
-        sta     (ptr1),y
-        iny
-        lda     sp+1
-        sta     (ptr1),y
-        iny
-
-; Put the return stack pointer next
-
-        tsx
-        inx
-        inx                     ; drop return address
-        txa
-        sta     (ptr1),y
-        iny
-
-; Last thing is the return address.
-
-        pla
-        tax
-        pla
-        sta     (ptr1),y        ; high byte first
-        iny
-        pha
-        txa
-        sta     (ptr1),y
-        pha
-
-; Return zero
-
-        jmp     return0
diff --git a/libsrc/common/signal.s b/libsrc/common/signal.s
deleted file mode 100644 (file)
index 3330728..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-12-16
-;
-; __sigfunc __fastcall__ signal (int sig, __sigfunc func);
-;
-
-        .import         popax
-        .importzp       ptr1
-
-        .include        "signal.inc"
-        .include        "errno.inc"
-
-
-; Default signal functions: The standard specifies explicitly that the values
-; for SIG_IGN and SIG_DFL must be distinct, so we make them so by using both
-; rts exits we have. This works because signal functions are __fastcall__, so
-; we don't have arguments on the stack.
-
-
-;----------------------------------------------------------------------------
-; __sigfunc __fastcall__ signal (int sig, __sigfunc func);
-
-
-_signal:
-        sta     ptr1
-        stx     ptr1+1          ; Remember func
-
-        jsr     popax           ; Get sig
-
-        cpx     #0
-        bne     invalidsig
-        cmp     #SIGCOUNT
-        bcs     invalidsig
-
-; Signal number is valid. Replace the pointer in the table saving the old
-; value temporarily on the stack.
-
-        asl     a               ; Prepare for word access
-        tax
-
-        sei                     ; Disable interrupts in case of async signals
-        lda     sigtable,x
-        pha
-        lda     ptr1
-        sta     sigtable,x
-        lda     sigtable+1,x
-        pha
-        lda     ptr1+1
-        sta     sigtable+1,x
-        cli                     ; Reenable interrupts
-
-; Get the old value from the stack and return it
-
-        pla
-        tax
-        pla
-__sig_ign:
-        rts
-
-; Error entry: We use our knowledge that SIG_ERR is zero here to save a byte
-
-invalidsig:
-        lda     #<EINVAL
-        jsr     __seterrno      ; Returns 0 in A
-        tax                     ; A/X = 0
-__sig_dfl:
-        rts
-
diff --git a/libsrc/common/sigtable.s b/libsrc/common/sigtable.s
deleted file mode 100644 (file)
index 7780ef6..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-12-16
-;
-; Signal vector table
-;
-
-        .export         sigtable
-
-        .include        "signal.inc"
-
-;----------------------------------------------------------------------------
-;
-
-.data
-
-sigtable:
-        .word   __sig_dfl       ; SIGABRT
-        .word   __sig_dfl       ; SIGFPE
-        .word   __sig_dfl       ; SIGILL
-        .word   __sig_dfl       ; SIGINT
-        .word   __sig_dfl       ; SIGSEGV
-        .word   __sig_dfl       ; SIGTERM
-
-
diff --git a/libsrc/common/sleep.c b/libsrc/common/sleep.c
deleted file mode 100644 (file)
index b311747..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-** sleep.c
-**
-** Stefan Haubenthal, 2003-06-11
-** Ullrich von Bassewitz, 2003-06-12
-**
-*/
-
-
-
-#include <time.h>
-#include <unistd.h>
-
-
-
-/* We cannot implement this function without a working clock function */
-#if defined(CLOCKS_PER_SEC)
-unsigned __fastcall__ sleep (unsigned wait)
-{
-    clock_t goal = clock () + ((clock_t) wait) * CLOCKS_PER_SEC;
-    while ((long) (goal - clock ()) > 0) ;
-    return 0;
-}
-#endif
-
-
-
diff --git a/libsrc/common/snprintf.s b/libsrc/common/snprintf.s
deleted file mode 100644 (file)
index 33afb43..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-;
-; int snprintf (char* buf, size_t size, const char* Format, ...);
-;
-; Ullrich von Bassewitz, 2009-09-26
-;
-
-        .export         _snprintf
-        .import         pushax, addysp, decsp6, _vsnprintf
-        .importzp       sp, ptr1
-
-        .macpack        generic
-
-; ----------------------------------------------------------------------------
-; Data
-
-.bss
-
-ParamSize:      .res    1               ; Number of parameter bytes
-
-; ----------------------------------------------------------------------------
-; Code
-
-.code
-
-
-_snprintf:
-        sty     ParamSize               ; Number of param bytes passed in Y
-
-; We have to push buf/size/format, both in the order they already have on stack.
-; To make this somewhat more efficient, we will create space on the stack and
-; then do a copy of the complete block instead of pushing each parameter
-; separately. Since the size of the arguments passed is the same as the size
-; of the fixed arguments, this will allow us to calculate the pointer to the
-; fixed size arguments easier (they're just ParamSize bytes away).
-
-        jsr     decsp6
-
-; Calculate a pointer to the Format argument
-
-        lda     ParamSize
-        add     sp
-        sta     ptr1
-        ldx     sp+1
-        bcc     @L1
-        inx
-@L1:    stx     ptr1+1
-
-; Now copy buf/size/format
-
-        ldy     #6-1
-@L2:    lda     (ptr1),y
-        sta     (sp),y
-        dey
-        bpl     @L2
-
-; Load va_list (last and __fastcall__ parameter to vsprintf)
-
-        lda     ptr1
-        ldx     ptr1+1
-
-; Call vsnprintf
-
-        jsr     _vsnprintf
-
-; Cleanup the stack. We will return what we got from vsprintf
-
-        ldy     ParamSize
-        jmp     addysp
-
diff --git a/libsrc/common/sprintf.s b/libsrc/common/sprintf.s
deleted file mode 100644 (file)
index d502d86..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-;
-; int sprintf (char* buf, const char* Format, ...);
-;
-; Ullrich von Bassewitz, 1.12.2000
-;
-
-        .export         _sprintf
-        .import         pushax, addysp, decsp4, _vsprintf
-        .importzp       sp, ptr1
-
-        .macpack        generic
-
-; ----------------------------------------------------------------------------
-; Data
-
-.bss
-
-ParamSize:      .res    1               ; Number of parameter bytes
-
-; ----------------------------------------------------------------------------
-; Code
-
-.code
-
-
-_sprintf:
-        sty     ParamSize               ; Number of param bytes passed in Y
-
-; We have to push buf and format, both in the order they already have on stack.
-; To make this somewhat more efficient, we will create space on the stack and
-; then do a copy of the complete block instead of pushing each parameter
-; separately. Since the size of the arguments passed is the same as the size
-; of the fixed arguments, this will allow us to calculate the pointer to the
-; fixed size arguments easier (they're just ParamSize bytes away).
-
-        jsr     decsp4
-
-; Calculate a pointer to the Format argument
-
-        lda     ParamSize
-        add     sp
-        sta     ptr1
-        ldx     sp+1
-        bcc     @L1
-        inx
-@L1:    stx     ptr1+1
-
-; Now copy both, buf and format
-
-        ldy     #4-1
-@L2:    lda     (ptr1),y
-        sta     (sp),y
-        dey
-        bpl     @L2
-
-; Load va_list (last and __fastcall__ parameter to vsprintf)
-
-        lda     ptr1
-        ldx     ptr1+1
-
-; Call vsprintf
-
-        jsr     _vsprintf
-
-; Cleanup the stack. We will return what we got from vsprintf
-
-        ldy     ParamSize
-        jmp     addysp
-
diff --git a/libsrc/common/sscanf.s b/libsrc/common/sscanf.s
deleted file mode 100644 (file)
index 941f54e..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-;
-; int sscanf (const char* str, const char* format, ...);
-;
-; Ullrich von Bassewitz, 2004-11-28
-;
-
-        .export         _sscanf
-        .import         addysp, decsp4, _vsscanf
-        .importzp       sp, ptr1
-
-        .macpack        generic
-
-; ----------------------------------------------------------------------------
-; Data
-
-.bss
-
-ParamSize:      .res    1               ; Number of parameter bytes
-
-; ----------------------------------------------------------------------------
-; Code
-; int sscanf (const char* str, const char* format, ...)
-; /* Standard C function */
-; {
-;     va_list ap;
-;
-;     /* Setup for variable arguments */
-;     va_start (ap, format);
-;
-;     /* Call vsscanf(). Since we know that va_end won't do anything, we will
-;     ** save the call and return the value directly.
-;     */
-;     return vsscanf (str, format, ap);
-; }
-;
-
-.code
-
-_sscanf:
-        sty     ParamSize               ; Number of param bytes passed in Y
-
-; We have to push buf and format, both in the order they already have on stack.
-; To make this somewhat more efficient, we will create space on the stack and
-; then do a copy of the complete block instead of pushing each parameter
-; separately. Since the size of the arguments passed is the same as the size
-; of the fixed arguments, this will allow us to calculate the pointer to the
-; fixed size arguments easier (they're just ParamSize bytes away).
-
-        jsr     decsp4
-
-; Calculate a pointer to the fixed parameters
-
-        lda     ParamSize
-        add     sp
-        sta     ptr1
-        ldx     sp+1
-        bcc     @L1
-        inx
-@L1:    stx     ptr1+1
-
-; Now copy both, str and format
-
-        ldy     #4-1
-@L2:    lda     (ptr1),y
-        sta     (sp),y
-        dey
-        bpl     @L2
-
-; Load va_list (last and __fastcall__ parameter to vsscanf)
-
-        lda     ptr1
-        ldx     ptr1+1
-
-; Call vsscanf
-
-        jsr     _vsscanf
-
-; Cleanup the stack. We will return what we got from vsscanf
-
-        ldy     ParamSize
-        jmp     addysp
-
diff --git a/libsrc/common/strcat.s b/libsrc/common/strcat.s
deleted file mode 100644 (file)
index 7784d89..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.05.1998
-;
-; char* strcat (char* dest, const char* src);
-;
-
-        .export         _strcat
-        .import         popax
-        .importzp       ptr1, ptr2, tmp3
-
-_strcat:
-        sta     ptr1            ; Save src
-        stx     ptr1+1
-        jsr     popax           ; Get dest
-        sta     ptr2
-        stx     ptr2+1
-        sta     tmp3            ; Remember for function return
-        ldy     #0
-
-; find end of dest
-
-sc1:    lda     (ptr2),y
-        beq     sc2
-        iny
-        bne     sc1
-        inc     ptr2+1
-        bne     sc1
-
-; end found, get offset in y into pointer
-
-sc2:    tya
-        clc
-        adc     ptr2
-        sta     ptr2
-        bcc     sc3
-        inc     ptr2+1
-
-; copy src
-
-sc3:    ldy     #0
-sc4:    lda     (ptr1),y
-        sta     (ptr2),y
-        beq     sc5
-        iny
-        bne     sc4
-        inc     ptr1+1
-        inc     ptr2+1
-        bne     sc4
-
-; done, return pointer to dest
-
-sc5:    lda     tmp3            ; X does still contain high byte
-        rts
-
-
diff --git a/libsrc/common/strchr.s b/libsrc/common/strchr.s
deleted file mode 100644 (file)
index 308381b..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.05.1998
-;
-; const char* strchr (const char* s, int c);
-;
-
-        .export         _strchr
-        .import         popax
-        .importzp       ptr1, tmp1
-
-_strchr:
-        sta     tmp1            ; Save c
-        jsr     popax           ; get s
-        sta     ptr1
-        stx     ptr1+1
-        ldy     #0
-
-Loop:   lda     (ptr1),y        ; Get next char
-        beq     EOS             ; Jump on end of string
-        cmp     tmp1            ; Found?
-        beq     Found           ; Jump if yes
-        iny
-        bne     Loop
-        inc     ptr1+1
-        bne     Loop            ; Branch always
-
-; End of string. Check if we're searching for the terminating zero
-
-EOS:    lda     tmp1            ; Get the char we're searching for
-        bne     NotFound        ; Jump if not searching for terminator
-
-; Found. Calculate pointer to c.
-
-Found:  ldx     ptr1+1          ; Load high byte of pointer
-        tya                     ; Low byte offset          
-        clc
-        adc     ptr1
-        bcc     Found1
-        inx
-Found1: rts
-
-; Not found, return NULL
-
-NotFound:
-        lda     #0
-        tax
-        rts
-
diff --git a/libsrc/common/strcmp.s b/libsrc/common/strcmp.s
deleted file mode 100644 (file)
index 189ce8f..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.05.1998
-;
-; int strcmp (const char* s1, const char* s2);
-;
-
-        .export         _strcmp
-        .import         popax
-        .importzp       ptr1, ptr2
-
-_strcmp:
-        sta     ptr2            ; Save s2
-        stx     ptr2+1
-        jsr     popax           ; Get s1
-        sta     ptr1
-        stx     ptr1+1
-        ldy     #0
-
-loop:   lda     (ptr1),y
-        cmp     (ptr2),y
-        bne     L1
-        tax                     ; end of strings?
-        beq     L3
-        iny
-        bne     loop
-        inc     ptr1+1
-        inc     ptr2+1
-        bne     loop
-
-L1:     bcs     L2
-        ldx     #$FF
-        rts
-
-L2:     ldx     #$01
-L3:     rts
diff --git a/libsrc/common/strcoll.s b/libsrc/common/strcoll.s
deleted file mode 100644 (file)
index 9b2db28..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Ullrich von Bassewitz, 11.12.1998
-;
-; int strcoll (const char* s1, const char* s2);
-;
-; Since we don't have locales, this function is equivalent to strcmp.
-;
-
-        .export         _strcoll
-        .import         _strcmp
-
-_strcoll        = _strcmp
-
diff --git a/libsrc/common/strcpy.s b/libsrc/common/strcpy.s
deleted file mode 100644 (file)
index 77b39fe..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.05.1998
-;
-; char* strcpy (char* dest, const char* src);
-;
-
-        .export         _strcpy
-        .import         popax
-        .importzp       ptr1, ptr2
-
-_strcpy:
-        sta     ptr1            ; Save src
-        stx     ptr1+1
-        jsr     popax           ; Get dest
-        sta     ptr2
-        stx     ptr2+1
-        ldy     #$00
-
-L1:     lda     (ptr1),y
-        sta     (ptr2),y
-        beq     L9
-        iny
-        bne     L1
-        inc     ptr1+1
-        inc     ptr2+1
-        bne     L1
-
-L9:     lda     ptr2            ; X still contains high byte
-        rts
-
diff --git a/libsrc/common/strcspn.s b/libsrc/common/strcspn.s
deleted file mode 100644 (file)
index 8fd567a..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-;
-; Ullrich von Bassewitz, 11.06.1998
-;
-; size_t strcspn (const char* s1, const char* s2);
-;
-
-        .export         _strcspn
-        .import         popax
-        .importzp       ptr1, ptr2, tmp1, tmp2, tmp3
-
-_strcspn:
-        sta     ptr2            ; Save s2
-        stx     ptr2+1
-        jsr     popax           ; Get s1
-        sta     ptr1
-        stx     ptr1+1
-        ldx     #0              ; low counter byte
-        stx     tmp1            ; high counter byte
-        ldy     #$00
-
-L1:     lda     (ptr1),y        ; get next char from s1
-        beq     L6              ; jump if done
-        sta     tmp2            ; save char
-        iny
-        bne     L2
-        inc     ptr1+1
-L2:     sty     tmp3            ; save index into s1
-
-        ldy     #0              ; get index into s2
-L3:     lda     (ptr2),y        ;
-        beq     L4              ; jump if done
-        cmp     tmp2
-        beq     L6
-        iny
-        bne     L3
-
-; The character was not found in s2. Increment the counter and start over
-
-L4:     ldy     tmp3            ; reload index
-        inx
-        bne     L1
-        inc     tmp1
-        bne     L1
-
-; The character was found, or we reached the end of s1. Return count of
-; characters
-
-L6:     txa                     ; get low counter byte
-        ldx     tmp1            ; get high counter byte
-        rts
-
-
-
-
diff --git a/libsrc/common/strdup.s b/libsrc/common/strdup.s
deleted file mode 100644 (file)
index 3ab07bd..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-;
-; Ullrich von Bassewitz, 18.07.2000
-;
-; char* __fastcall__ strdup (const char* S);
-;
-; Note: The code knowns which zero page locations are used by malloc.
-;
-
-        .importzp       sp, tmp1, ptr4
-        .import         pushax, decsp4, incsp4
-        .import         _strlen, _malloc, _memcpy
-        .export         _strdup
-
-        .macpack        cpu
-        .macpack        generic
-
-_strdup:
-
-; Since we need some place to store the intermediate results, allocate a
-; stack frame. To make this somewhat more efficient, create the stackframe
-; as needed for the final call to the memcpy function.
-
-        pha                     ; decsp will destroy A (but not X)
-        jsr     decsp4          ; Target/source
-
-; Store the pointer into the source slot
-
-        ldy     #1
-        txa
-        sta     (sp),y
-        pla
-.if (.cpu .bitand CPU_ISET_65SC02)
-        sta     (sp)
-.else
-        dey
-        sta     (sp),y
-.endif
-
-; Get length of S (which is still in a/x)
-
-        jsr     _strlen
-
-; Calculate strlen(S)+1 (the space needed)
-
-        add     #1
-        bcc     @L1
-        inx
-
-; Save the space we're about to allocate in ptr4
-
-@L1:    sta     ptr4
-        stx     ptr4+1
-
-; Allocate memory. _malloc will not use ptr4
-
-        jsr     _malloc
-
-; Store the result into the target stack slot
-
-        ldy     #2
-        sta     (sp),y          ; Store low byte
-        sta     tmp1
-        txa                     ; Get high byte
-        iny
-        sta     (sp),y          ; Store high byte
-
-; Check for a NULL pointer
-
-        ora     tmp1
-        beq     OutOfMemory
-
-; Copy the string. memcpy will return the target string which is exactly
-; what we need here. It will also drop the allocated stack frame.
-
-        lda     ptr4
-        ldx     ptr4+1          ; Load size
-        jmp     _memcpy         ; Copy string, drop stackframe
-
-; Out of memory, return NULL (A = 0)
-
-OutOfMemory:
-        tax
-        jmp     incsp4          ; Drop stack frame
-
-
diff --git a/libsrc/common/strerror.s b/libsrc/common/strerror.s
deleted file mode 100644 (file)
index 0f41331..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-;
-; Ullrich von Bassewitz, 17.05.2000
-;
-; char* __fastcall__ strerror (int errcode);
-; /* Map an error number to an error message */
-;
-
-        .export         _strerror
-        .import         __sys_errlist
-
-        .include        "errno.inc"
-
-_strerror:
-        cpx     #$00            ; High byte must be zero
-        bne     @L1             ; Jump if invalid error
-        cmp     #EMAX           ; Valid error code (map EUNKNOWN to 0)?
-        bcc     @L2             ; Jump if ok
-
-; The given error code is invalid
-
-@L1:    lda     #<EINVAL
-        sta     __errno
-        lda     #>EINVAL        ; = 0
-        sta     __errno+1
-;       lda     #$00            ; A contains zero: "Unknown error"
-
-; Load the pointer to the error message and return
-
-@L2:    asl     a               ; * 2
-        tay
-        ldx     __sys_errlist+1,y
-        lda     __sys_errlist,y
-        rts
-
-
diff --git a/libsrc/common/strftime.c b/libsrc/common/strftime.c
deleted file mode 100644 (file)
index 25cfd06..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                strftime.c                                 */
-/*                                                                           */
-/*      Convert broken down time to a string in a user specified format      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-#include <stdio.h>
-#include <time.h>
-
-
-
-/* Use static local variables for speed */
-#pragma static-locals (on);
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-size_t __fastcall__ strftime (char* buf, size_t bufsize, const char* format,
-                              const struct tm* tm)
-{
-    static const char* days[7] = {
-        "Sunday",   "Monday", "Tuesday", "Wednesday",
-        "Thursday", "Friday", "Saturday"
-    };
-    static const char* months[12] = {
-        "January", "February", "March", "April", "May", "June",
-        "July", "August", "September", "October", "November", "December"
-    };
-
-    unsigned    count;
-    unsigned    len;
-    char        c;
-    char        arg[40];
-    const char* argptr;
-
-    /* Copy until we reach the end of the format string or a format specifier */
-    count = 0;
-    while (1) {
-        if (count >= bufsize) {
-            /* Not enough buffer space available */
-            return 0;
-        }
-        if ((c = *format++) == '\0') {
-            /* End of format string reached */
-            *buf = '\0';
-            return count;
-        }
-        if (c == '%') {
-            /* Format specifier */
-            argptr = arg;
-            switch (*format++) {
-
-                case '%':
-                    arg[0] = '%';
-                    arg[1] = '\0';
-                    break;
-
-                case 'A':
-                    argptr = days[tm->tm_wday];
-                    break;
-
-                case 'B':
-                    argptr = months[tm->tm_mon];
-                    break;
-
-                case 'D':
-                    sprintf (arg, "%02d/%02d/%02d", tm->tm_mon + 1,
-                             tm->tm_mday, tm->tm_year % 100);
-                    break;
-
-                case 'F':
-                    /* C99 */
-                    sprintf (arg, "%04d-%02d-%02d", tm->tm_year + 1900,
-                             tm->tm_mon + 1, tm->tm_mday);
-                    break;
-
-                case 'H':
-                    sprintf (arg, "%02d", tm->tm_hour);
-                    break;
-
-                case 'I':
-                    sprintf (arg, "%02d", (tm->tm_hour + 11) % 12 + 1);
-                    break;
-
-                case 'M':
-                    sprintf (arg, "%02d", tm->tm_min);
-                    break;
-
-                case 'P':
-                    /* GNU extension */
-                    argptr = (tm->tm_hour >= 12)? "pm" : "am";
-                    break;
-
-                case 'S':
-                    sprintf (arg, "%02d", tm->tm_sec);
-                    break;
-
-                case 'U':
-                    sprintf (arg, "%02d", (tm->tm_yday + 7 - tm->tm_wday) / 7);
-                    break;
-
-                case 'W':
-                    sprintf (arg, "%02d",
-                             (tm->tm_yday + 7 - (tm->tm_wday? tm->tm_wday - 1 : 6)) / 7);
-                    break;
-
-                case 'X':
-                    sprintf (arg, "%02d:%02d:%02d", tm->tm_hour,
-                             tm->tm_min, tm->tm_sec);
-                    break;
-
-                case 'Y':
-                    sprintf (arg, "%4d", tm->tm_year + 1900);
-                    break;
-
-                case 'Z':
-                    argptr = tm->tm_isdst? _tz.dstname : _tz.tzname;
-                    break;
-
-                case 'a':
-                    sprintf (arg, "%.3s", days[tm->tm_wday]);
-                    break;
-
-                case 'b':
-                    sprintf (arg, "%.3s", months[tm->tm_mon]);
-                    break;
-
-                case 'c':
-                    sprintf (arg, "%.3s %.3s%3d %02d:%02d:%02d %d",
-                             days[tm->tm_wday], months[tm->tm_mon],
-                             tm->tm_mday, tm->tm_hour, tm->tm_min,
-                             tm->tm_sec, tm->tm_year + 1900);
-                    break;
-
-                case 'd':
-                    sprintf (arg, "%02d", tm->tm_mday);
-                    break;
-
-                case 'j':
-                    sprintf (arg, "%03d", tm->tm_yday + 1);
-                    break;
-
-                case 'm':
-                    sprintf (arg, "%02d", tm->tm_mon + 1);
-                    break;
-
-                case 'p':
-                    argptr = (tm->tm_hour >= 12)? "PM" : "AM";
-                    break;
-
-                case 'w':
-                    sprintf (arg, "%d", tm->tm_wday);
-                    break;
-
-                case 'x':
-                    sprintf (arg, "%04d-%02d-%02d", tm->tm_year + 1900,
-                             tm->tm_mon + 1, tm->tm_mday);
-                    break;
-
-                case 'y':
-                    sprintf (arg, "%02d", tm->tm_year % 100);
-                    break;
-
-                default:
-                    /* Unknown format specifier, convert to empty string */
-                    arg[0] = '\0';
-                    break;
-            }
-
-            /* Check if we have enough space to copy the argument string */
-            len = strlen (argptr);
-            count += len;
-            if (count < bufsize) {
-                memcpy (buf, argptr, len);
-                buf += len;
-            }
-
-        } else {
-
-            /* No format character, just copy */
-            *buf++ = c;
-            ++count;
-
-        }
-    }
-}
-
-
-
diff --git a/libsrc/common/stricmp.s b/libsrc/common/stricmp.s
deleted file mode 100644 (file)
index 501d0b6..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-;
-; Ullrich von Bassewitz, 03.06.1998
-;
-; int stricmp (const char* s1, const char* s2);         /* DOS way */
-; int strcasecmp (const char* s1, const char* s2);      /* UNIX way */
-;
-
-        .export         _stricmp, _strcasecmp
-        .import         popax
-        .import         __ctype
-        .importzp       ptr1, ptr2, tmp1
-
-        .include        "ctype.inc"
-
-_stricmp:
-_strcasecmp:
-        sta     ptr2            ; Save s2
-        stx     ptr2+1
-        jsr     popax           ; get s1
-        sta     ptr1
-        stx     ptr1+1
-        ldy     #0
-
-loop:   lda     (ptr2),y        ; get char from second string
-        tax
-        lda     __ctype,x       ; get character classification
-        and     #CT_LOWER       ; lower case char?
-        beq     L1              ; jump if no
-        txa                     ; get character back
-        clc
-        adc     #<('A'-'a')     ; make upper case char
-        tax                     ;
-L1:     stx     tmp1            ; remember upper case equivalent
-
-        lda     (ptr1),y        ; get character from first string
-        tax
-        lda     __ctype,x       ; get character classification
-        and     #CT_LOWER       ; lower case char?
-        beq     L2              ; jump if no
-        txa                     ; get character back
-        clc
-        adc     #<('A'-'a')     ; make upper case char
-        tax
-                                
-L2:     cpx     tmp1            ; compare characters
-        bne     L3
-        txa                     ; end of strings?
-        beq     L5              ; a/x both zero
-        iny
-        bne     loop
-        inc     ptr1+1
-        inc     ptr2+1
-        bne     loop
-
-L3:     bcs     L4
-        ldx     #$FF
-        rts
-
-L4:     ldx     #$01
-L5:     rts
diff --git a/libsrc/common/strlen.s b/libsrc/common/strlen.s
deleted file mode 100644 (file)
index b583eea..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.05.1998
-;
-; int strlen (const char* s);
-;
-
-        .export         _strlen
-        .importzp       ptr1
-
-_strlen:
-        sta     ptr1            ; Save s
-        stx     ptr1+1
-        ldx     #0              ; YX used as counter
-        ldy     #0
-
-L1:     lda     (ptr1),y
-        beq     L9
-        iny
-        bne     L1
-        inc     ptr1+1
-        inx
-        bne     L1
-
-L9:     tya                     ; get low byte of counter, hi's all set
-        rts
-
diff --git a/libsrc/common/strlower.s b/libsrc/common/strlower.s
deleted file mode 100644 (file)
index 848a4fa..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-;
-; 1998-06-02, Ullrich von Bassewitz
-; 2013-08-28, Greg King
-;
-; char* __fastcall__ strlower (char* s);
-; char* __fastcall__ strlwr (char* s);
-;
-; Non-ANSI
-;
-
-        .export         _strlower, _strlwr
-        .import         popax
-        .import         __ctype
-        .importzp       ptr1, ptr2
-
-        .include        "ctype.inc"
-
-_strlower:
-_strlwr:
-        sta     ptr1            ; Save s (working copy)
-        stx     ptr1+1
-        sta     ptr2
-        stx     ptr2+1          ; save function result
-        ldy     #0
-
-loop:   lda     (ptr1),y        ; get character
-        beq     L9              ; jump if done
-        tax
-        lda     __ctype,x       ; get character classification
-        and     #CT_UPPER       ; upper case char?
-        beq     L1              ; jump if no
-        txa                     ; get character back into accu
-        sec
-        sbc     #<('A'-'a')     ; make lower case char
-        sta     (ptr1),y        ; store back
-L1:     iny                     ; next char
-        bne     loop
-        inc     ptr1+1          ; handle offset overflow
-        bne     loop            ; branch always
-
-; Done, return the argument string
-
-L9:     lda     ptr2
-        ldx     ptr2+1
-        rts
-
-
-
diff --git a/libsrc/common/strncat.s b/libsrc/common/strncat.s
deleted file mode 100644 (file)
index b7bb04b..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.05.1998
-;
-; char* strncat (char* dest, const char* src, size_t n);
-;
-
-        .export         _strncat
-        .import         popax
-        .importzp       ptr1, ptr2, ptr3, tmp1, tmp2
-
-_strncat:
-        eor     #$FF            ; one's complement to count upwards
-        sta     tmp1
-        txa
-        eor     #$FF
-        sta     tmp2
-        jsr     popax           ; get src
-        sta     ptr1
-        stx     ptr1+1
-        jsr     popax           ; get dest
-        sta     ptr2
-        stx     ptr2+1
-        sta     ptr3            ; remember for function return
-        stx     ptr3+1
-        ldy     #0
-
-; find end of dest
-
-L1:     lda     (ptr2),y
-        beq     L2
-        iny
-        bne     L1
-        inc     ptr2+1
-        bne     L1
-
-; end found, get offset in y into pointer
-
-L2:     tya
-        clc
-        adc     ptr2
-        sta     ptr2
-        bcc     L3
-        inc     ptr2+1
-
-; copy src. We've put the ones complement of the count into the counter, so
-; we'll increment the counter on top of the loop
-
-L3:     ldy     #0
-        ldx     tmp1            ; low counter byte
-
-L4:     inx
-        bne     L5
-        inc     tmp2
-        beq     L6              ; jump if done
-L5:     lda     (ptr1),y
-        sta     (ptr2),y
-        beq     L7
-        iny
-        bne     L4
-        inc     ptr1+1
-        inc     ptr2+1
-        bne     L4
-
-; done, set the trailing zero and return pointer to dest
-
-L6:     lda     #0
-        sta     (ptr2),y
-L7:     lda     ptr3
-        ldx     ptr3+1
-        rts
-
-
diff --git a/libsrc/common/strncmp.s b/libsrc/common/strncmp.s
deleted file mode 100644 (file)
index 1035e15..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.05.2000
-;
-; int strncmp (const char* s1, const char* s2, unsigned n);
-;
-
-        .export         _strncmp
-        .import         popax
-        .importzp       ptr1, ptr2, ptr3
-
-
-_strncmp:
-
-; Convert the given counter value in a/x from a downward counter into an
-; upward counter, so we can increment the counter in the loop below instead
-; of decrementing it. This adds some overhead now, but is cheaper than
-; executing a more complex test in each iteration of the loop. We do also
-; correct the value by one, so we can do the test on top of the loop.
-
-        eor     #$FF
-        sta     ptr3
-        txa
-        eor     #$FF
-        sta     ptr3+1
-
-; Get the remaining arguments
-
-        jsr     popax           ; get s2
-        sta     ptr2
-        stx     ptr2+1
-        jsr     popax           ; get s1
-        sta     ptr1
-        stx     ptr1+1
-
-; Loop setup
-
-        ldy     #0
-
-; Start of compare loop. Check the counter.
-
-Loop:   inc     ptr3
-        beq     IncHi           ; Increment high byte
-
-; Compare a byte from the strings
-
-Comp:   lda     (ptr1),y
-        cmp     (ptr2),y
-        bne     NotEqual        ; Jump if strings different
-        tax                     ; End of strings?
-        beq     Equal1          ; Jump if EOS reached, a/x == 0
-
-; Increment the pointers
-
-        iny
-        bne     Loop
-        inc     ptr1+1
-        inc     ptr2+1
-        bne     Loop            ; Branch always
-
-; Increment hi byte
-
-IncHi:  inc     ptr3+1
-        bne     Comp            ; Jump if counter not zero
-
-; Exit code if strings are equal. a/x not set
-
-Equal:  lda     #$00
-        tax
-Equal1: rts
-
-; Exit code if strings not equal
-
-NotEqual:
-        bcs     L1
-        ldx     #$FF            ; Make result negative
-        rts
-
-L1:     ldx     #$01            ; Make result positive
-        rts
-
-
diff --git a/libsrc/common/strncpy.s b/libsrc/common/strncpy.s
deleted file mode 100644 (file)
index 042f9e2..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-05-04
-;
-; char* __fastcall__ strncpy (char* dest, const char* src, unsigned size);
-;
-
-        .export         _strncpy
-        .import         popax
-        .importzp       ptr1, ptr2, tmp1, tmp2, tmp3
-
-.proc   _strncpy
-
-        eor     #$FF
-        sta     tmp1
-        txa
-        eor     #$FF
-        sta     tmp2            ; Store -size - 1
-
-        jsr     popax           ; get src
-        sta     ptr1
-        stx     ptr1+1
-        jsr     popax           ; get dest
-        sta     ptr2
-        stx     ptr2+1
-        stx     tmp3            ; remember for function return
-
-; Copy src -> dest up to size bytes
-
-        ldx     tmp1            ; Load low byte of ones complement of size
-        ldy     #$00
-L1:     inx
-        bne     L2
-        inc     tmp2
-        beq     L9
-
-L2:     lda     (ptr1),y        ; Copy one character
-        sta     (ptr2),y
-        beq     L5              ; Bail out if terminator reached (A = 0)
-        iny
-        bne     L1
-        inc     ptr1+1
-        inc     ptr2+1          ; Bump high bytes
-        bne     L1              ; Branch always
-
-; Fill the remaining bytes.
-
-L3:     inx                     ; Counter low byte
-        beq     L6              ; Branch on overflow
-L4:     sta     (ptr2),y        ; Clear one byte
-L5:     iny                     ; Bump pointer
-        bne     L3
-        inc     ptr2+1          ; Bump high byte
-        bne     L3              ; Branch always
-
-; Bump the counter high byte
-
-L6:     inc     tmp2
-        bne     L4
-
-; Done, return dest
-
-L9:     lda     ptr2            ; Get low byte
-        ldx     tmp3            ; Get unchanged high byte
-        rts
-
-.endproc
-
-
-
diff --git a/libsrc/common/strnicmp.s b/libsrc/common/strnicmp.s
deleted file mode 100644 (file)
index b1f973e..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-;
-; Christian Groessler, 10.02.2009
-; derived from strncmp.s and stricmp.s
-;
-; int __fastcall__ strnicmp (const char* s1, const char* s2, size_t count);
-; int __fastcall__ strncasecmp (const char* s1, const char* s2, size_t count);
-;
-
-        .export         _strnicmp, _strncasecmp
-        .import         popax, __ctype
-        .importzp       ptr1, ptr2, ptr3, tmp1
-
-        .include        "ctype.inc"
-
-_strnicmp:
-_strncasecmp:
-
-; Convert the given counter value in a/x from a downward counter into an
-; upward counter, so we can increment the counter in the loop below instead
-; of decrementing it. This adds some overhead now, but is cheaper than
-; executing a more complex test in each iteration of the loop. We do also
-; correct the value by one, so we can do the test on top of the loop.
-
-        eor     #$FF
-        sta     ptr3
-        txa
-        eor     #$FF
-        sta     ptr3+1
-
-; Get the remaining arguments
-
-        jsr     popax           ; get s2
-        sta     ptr2
-        stx     ptr2+1
-        jsr     popax           ; get s1
-        sta     ptr1
-        stx     ptr1+1
-
-; Loop setup
-
-        ldy     #0
-
-; Start of compare loop. Check the counter.
-
-Loop:   inc     ptr3
-        beq     IncHi           ; Increment high byte
-
-; Compare a byte from the strings
-
-Comp:   lda     (ptr2),y
-        tax
-        lda     __ctype,x       ; get character classification
-        and     #CT_LOWER       ; lower case char?
-        beq     L1              ; jump if no
-        txa                     ; get character back
-        sec
-        sbc     #<('a'-'A')     ; make upper case char
-        tax                     ;
-L1:     stx     tmp1            ; remember upper case equivalent
-
-        lda     (ptr1),y        ; get character from first string
-        tax
-        lda     __ctype,x       ; get character classification
-        and     #CT_LOWER       ; lower case char?
-        beq     L2              ; jump if no
-        txa                     ; get character back
-        sec
-        sbc     #<('a'-'A')     ; make upper case char
-        tax
-
-L2:     cpx     tmp1            ; compare characters
-        bne     NotEqual        ; Jump if strings different
-        txa                     ; End of strings?
-        beq     Equal1          ; Jump if EOS reached, a/x == 0
-
-; Increment the pointers
-
-        iny
-        bne     Loop
-        inc     ptr1+1
-        inc     ptr2+1
-        bne     Loop            ; Branch always
-
-; Increment hi byte
-
-IncHi:  inc     ptr3+1
-        bne     Comp            ; Jump if counter not zero
-
-; Exit code if strings are equal. a/x not set
-
-Equal:  lda     #$00
-        tax
-Equal1: rts
-
-; Exit code if strings not equal
-
-NotEqual:
-        bcs     L3
-        ldx     #$FF            ; Make result negative
-        rts
-
-L3:     ldx     #$01            ; Make result positive
-        rts
diff --git a/libsrc/common/stroserr.s b/libsrc/common/stroserr.s
deleted file mode 100644 (file)
index 25ca30d..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-;
-; Ullrich von Bassewitz, 17.07.2002
-;
-; const char* __fastcall__ _stroserror (unsigned char errcode);
-; /* Map an operating system error number to an error message. */
-;
-
-        .export         __stroserror
-        .import         __sys_oserrlist
-        .importzp       ptr1, tmp1
-
-        .macpack        generic
-
-
-; The table is built as a list of entries
-;
-;       .byte   entrylen
-;       .byte   errorcode
-;       .asciiz errormsg
-;
-; and terminated by an entry with length zero that is returned if the
-; error code could not be found.
-
-__stroserror:
-        sta     tmp1                    ; Save the error code
-
-        ldy     #<__sys_oserrlist
-        sty     ptr1
-        ldy     #>__sys_oserrlist
-        sty     ptr1+1                  ; Setup pointer to message table
-
-@L1:    ldy     #0
-        lda     (ptr1),y                ; Get the length
-        beq     Done                    ; Bail out if end of list reached
-
-        iny
-        lda     (ptr1),y                ; Compare the error code
-        cmp     tmp1
-        beq     Done                    ; Jump if found
-
-; Not found, move pointer to next entry
-
-        dey
-        clc
-        lda     ptr1
-        adc     (ptr1),y
-        sta     ptr1
-        bcc     @L1
-        inc     ptr1+1
-        bcs     @L1                     ; Branch always
-
-; We've found the code or reached the end of the list
-
-Done:   ldx     ptr1+1
-        lda     ptr1
-        add     #2                      ; Add a total of #2
-        bcc     @L1
-        inx                             ; Bump high byte
-@L1:    rts
-
-
diff --git a/libsrc/common/strpbrk.s b/libsrc/common/strpbrk.s
deleted file mode 100644 (file)
index 5d14829..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-;                                                   
-; Ullrich von Bassewitz, 11.06.1998
-;
-; char* strpbrk (const char* s1, const char* s2);
-;
-
-        .export         _strpbrk
-        .import         popax, return0
-        .importzp       ptr1, ptr2, tmp1, tmp2, tmp3
-
-_strpbrk:
-        jsr     popax           ; get s2
-        sta     ptr2
-        stx     ptr2+1
-        jsr     popax           ; get s1
-        sta     ptr1
-        stx     ptr1+1
-        ldy     #$00
-
-L1:     lda     (ptr1),y        ; get next char from s1
-        beq     L9              ; jump if done
-        sta     tmp2            ; save char
-        iny
-        bne     L2
-        inc     ptr1+1
-L2:     sty     tmp3            ; save index into s1
-
-        ldy     #0              ; get index into s2
-L3:     lda     (ptr2),y        ;
-        beq     L4              ; jump if done
-        cmp     tmp2
-        beq     L6
-        iny
-        bne     L3
-
-; The character was not found in s2. Increment the counter and start over
-
-L4:     ldy     tmp3            ; reload index
-        inx
-        bne     L1
-        inc     tmp1
-        bne     L1
-
-; A character was found. Calculate a pointer to this char in s1 and return it.
-
-L6:     ldx     ptr1+1
-        lda     tmp3            ; get y offset
-        clc
-        adc     ptr1
-        bcc     L7
-        inx
-L7:     rts
-
-; None of the characters in s2 was found - return NULL
-
-L9:     jmp     return0
-
-
-
-
diff --git a/libsrc/common/strqtok.c b/libsrc/common/strqtok.c
deleted file mode 100644 (file)
index 1eb4fa8..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
-** strqtok() is like strtok():  It finds pieces of text, in a string, that are
-** surrounded by given delimiter characters.  It returns each piece, in turn,
-** as a string, until every piece has been found.  Then, it returns NULL.  But,
-** strqtok() recognizes quotation marks.  A mark makes delimiters look ordinary
-** until another quotation mark is seen.  That allows us to include delimiters
-** in tokens.  (This version doesn't allow escaped quotation marks.)
-**
-** 2014-04-19, Daniel Serpell
-** 2014-04-21, Paul Foerster
-** 2014-04-25, Greg King
-*/
-
-
-#include <string.h>
-
-
-char* __fastcall__ strqtok (register char* s1, const char* s2)
-{
-    static char  c;
-    static char* start;
-    static char* next = "";
-
-    if (s1 == NULL) {
-        s1 = next;
-        if (c == '\"') {
-            goto inQuote;
-        }
-    }
-
-    /* Search for the start of a token. */
-    while (strchr (s2, c = *s1)) {
-        if (c == '\0') {
-            /* No more tokens. */
-            return NULL;
-        }
-        ++s1;
-    }
-    if (c == '\"') {
-        goto skipQuote;
-    }
-
-    /* Save the start of the token. */
-    start = s1;
-
-    /* Search for the end of a non-quoted token. */
-    while ((c = *s1) != '\"' && !strchr (s2, c)) {
-        ++s1;
-    }
-    if (c == '\0') {
-        /* The end of the last token is the end of the token list;
-        ** don't go beyond it.
-        */
-        goto found;
-    }
-
-    /* (A possible begin-quote mark will be rememberred.) */
-    goto terminate;
-
-  skipQuote:
-    ++s1;
-
-  inQuote:
-    /* Don't let a quote mark be rememberred. */
-    c = '\0';
-
-    /* Save the start of the token. */
-    start = s1;
-
-    /* Search for the end of a quoted token. */
-    if ((s1 = strchr (s1, '\"')) == NULL) {
-        /* The quoted token ended with '\0'; therefore, point to a '\0',
-        ** so that the next call will return NULL.
-        */
-        next = "";
-        return start;
-    }
-
-  terminate:
-    *s1 = '\0';
-    ++s1;
-
-  found:
-    next = s1;
-    return start;
-}
diff --git a/libsrc/common/strrchr.s b/libsrc/common/strrchr.s
deleted file mode 100644 (file)
index bd7389e..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.05.1998
-;
-; char* strrchr (const char* s, int c);
-;
-
-        .export         _strrchr
-        .import         popax
-        .importzp       ptr1, ptr2, tmp1
-
-_strrchr:
-        sta     tmp1            ; Save c
-        jsr     popax           ; get s
-        sta     ptr1
-        stx     ptr1+1
-        lda     #0              ; function result = NULL
-        sta     ptr2
-        sta     ptr2+1
-        tay
-
-L1:     lda     (ptr1),y        ; get next char
-        beq     L3              ; jump if end of string
-        cmp     tmp1            ; found?
-        bne     L2              ; jump if no
-
-; Remember a pointer to the character
-
-        tya
-        clc
-        adc     ptr1
-        sta     ptr2
-        lda     ptr1+1
-        adc     #$00
-        sta     ptr2+1
-
-; Next char
-
-L2:     iny
-        bne     L1
-        inc     ptr1+1
-        bne     L1              ; jump always
-
-; Return the pointer to the last occurrence
-
-L3:     lda     ptr2
-        ldx     ptr2+1
-        rts
diff --git a/libsrc/common/strspn.s b/libsrc/common/strspn.s
deleted file mode 100644 (file)
index f8b8fff..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-;
-; Ullrich von Bassewitz, 11.06.1998
-;
-; size_t strspn (const char* s1, const char* s2);
-;
-
-        .export         _strspn
-        .import         popax
-        .importzp       ptr1, ptr2, tmp1, tmp2, tmp3
-
-_strspn:
-        sta     ptr2            ; Save s2
-        stx     ptr2+1
-        jsr     popax           ; get s1
-        sta     ptr1
-        stx     ptr1+1
-        ldx     #0              ; low counter byte
-        stx     tmp1            ; high counter byte
-        ldy     #$00
-
-L1:     lda     (ptr1),y        ; get next char from s1
-        beq     L6              ; jump if done
-        sta     tmp2            ; save char
-        iny
-        bne     L2
-        inc     ptr1+1
-L2:     sty     tmp3            ; save index into s1
-
-        ldy     #0              ; get index into s2
-L3:     lda     (ptr2),y        ;
-        beq     L6              ; jump if done
-        cmp     tmp2
-        beq     L4
-        iny
-        bne     L3
-
-; The character was found in s2. Increment the counter and start over
-
-L4:     ldy     tmp3            ; reload index
-        inx
-        bne     L1
-        inc     tmp1
-        bne     L1
-
-; The character was not found, or we reached the end of s1. Return count of
-; characters
-
-L6:     txa                     ; get low counter byte
-        ldx     tmp1            ; get high counter byte
-        rts
-
-
-
-
-
-
diff --git a/libsrc/common/strstr.s b/libsrc/common/strstr.s
deleted file mode 100644 (file)
index 55e2def..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-;
-; Ullrich von Bassewitz, 11.12.1998
-;
-; char* strstr (const char* haystack, const char* needle);
-;
-
-        .export         _strstr
-        .import         popax
-        .importzp       ptr1, ptr2, ptr3, ptr4, tmp1
-
-_strstr:
-        sta     ptr2            ; Save needle
-        stx     ptr2+1
-        sta     ptr4            ; Setup temp copy for later
-
-        jsr     popax           ; Get haystack
-        sta     ptr1
-        stx     ptr1+1          ; Save haystack
-
-; If needle is empty, return haystack
-
-        ldy     #$00
-        lda     (ptr2),y        ; Get first byte of needle
-        beq     @Found          ; Needle is empty --> we're done
-
-; Search for the beginning of the string (this is not an optimal search
-; strategy [in fact, it's pretty dumb], but it's simple to implement).
-
-        sta     tmp1            ; Save start of needle
-@L1:    lda     (ptr1),y        ; Get next char from haystack
-        beq     @NotFound       ; Jump if end
-        cmp     tmp1            ; Start of needle found?
-        beq     @L2             ; Jump if so
-        iny                     ; Next char
-        bne     @L1
-        inc     ptr1+1          ; Bump high byte
-        bne     @L1             ; Branch always
-
-; We found the start of needle in haystack
-
-@L2:    tya                     ; Get offset
-        clc
-        adc     ptr1
-        sta     ptr1            ; Make ptr1 point to start
-        bcc     @L3
-        inc     ptr1+1
-
-; ptr1 points to the start of needle now. Setup temporary pointers for the
-; search. The low byte of ptr4 is already set.
-
-@L3:    sta     ptr3
-        lda     ptr1+1
-        sta     ptr3+1
-        lda     ptr2+1
-        sta     ptr4+1
-        ldy     #1              ; First char is identical, so start on second
-
-; Do the compare
-
-@L4:    lda     (ptr4),y        ; Get char from needle
-        beq     @Found          ; Jump if end of needle (-> found)
-        cmp     (ptr3),y        ; Compare with haystack
-        bne     @L5             ; Jump if not equal
-        iny                     ; Next char
-        bne     @L4
-        inc     ptr3+1
-        inc     ptr4+1          ; Bump hi byte of pointers
-        bne     @L4             ; Next char (branch always)
-
-; The strings did not compare equal, search next start of needle
-
-@L5:    ldy     #1              ; Start after this char
-        bne     @L1             ; Branch always
-
-; We found the start of needle
-
-@Found: lda     ptr1
-        ldx     ptr1+1
-        rts
-
-; We reached end of haystack without finding needle
-
-@NotFound:
-        lda     #$00            ; return NULL
-        tax
-        rts
-
-
-
-
-
-
-
-
-
-
-
diff --git a/libsrc/common/strtoimax.s b/libsrc/common/strtoimax.s
deleted file mode 100644 (file)
index 122547f..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-09-17
-;
-; intmax_t __fastcall__ strtoimax (const char* nptr, char** endptr, int base);
-;
-
-        .import         _strtol
-        .export         _strtoimax = _strtol
-
diff --git a/libsrc/common/strtok.c b/libsrc/common/strtok.c
deleted file mode 100644 (file)
index 47a2829..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-** strtok.c
-**
-** Ullrich von Bassewitz, 11.12.1998
-*/
-
-
-
-#include <string.h>
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Memory location that holds the last input */
-static char* Last = 0;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-char* __fastcall__ strtok (register char* s1, const char* s2)
-{
-    char c;
-    char* start;
-
-    /* Use the stored location if called with a NULL pointer */
-    if (s1 == 0) {
-        s1 = Last;
-    }
-
-    /* If s1 is empty, there are no more tokens. Return 0 in this case. */
-    if (*s1 == '\0') {
-        return 0;
-    }
-
-    /* Search the address of the first element in s1 that equals none
-    ** of the characters in s2.
-    */
-    while ((c = *s1) && strchr (s2, c) != 0) {
-        ++s1;
-    }
-    if (c == '\0') {
-        /* No more tokens found */
-        Last = s1;
-        return 0;
-    }
-
-    /* Remember the start of the token */
-    start = s1;
-
-    /* Search for the end of the token */
-    while ((c = *s1) && strchr (s2, c) == 0) {
-        ++s1;
-    }
-    if (c == '\0') {
-        /* Last element */
-        Last = s1;
-    } else {
-        *s1 = '\0';
-        Last = s1 + 1;
-    }
-
-    /* Return the start of the token */
-    return start;
-}
-
-
-
diff --git a/libsrc/common/strtol.c b/libsrc/common/strtol.c
deleted file mode 100644 (file)
index bf328ed..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-#include <limits.h>
-#include <ctype.h>
-#include <errno.h>
-#include <stdlib.h>
-
-
-
-long __fastcall__ strtol (const char* nptr, char** endptr, int base)
-/* Convert a string to a long int */
-{
-    register const char* S          = nptr;
-    unsigned long        Val        = 0;
-    unsigned char        Minus      = 0;
-    unsigned char        Ovf        = 0;
-    unsigned             CvtCount   = 0;
-    unsigned char        DigitVal;
-    unsigned long        MaxVal;
-    unsigned char        MaxDigit;
-
-
-    /* Skip white space */
-    while (isspace (*S)) {
-        ++S;
-    }
-
-    /* Check for leading + or - sign */
-    switch (*S) {
-        case '-':
-            Minus = 1;
-            /* FALLTHROUGH */
-        case '+':
-            ++S;
-    }
-
-    /* If base is zero, we may have a 0 or 0x prefix. If base is 16, we may
-    ** have a 0x prefix.
-    */
-    if (base == 0) {
-        if (*S == '0') {
-            ++S;
-            if (*S == 'x' || *S == 'X') {
-                ++S;
-                base = 16;
-            } else {
-                base = 8;
-            }
-        } else {
-            base = 10;
-        }
-    } else if (base == 16 && *S == '0' && (S[1] == 'x' || S[1] == 'X')) {
-        S += 2;
-    }
-
-    /* Determine the maximum valid number and (if the number is equal to this
-    ** value) the maximum valid digit.
-    */
-    if (Minus) {
-        MaxVal = LONG_MIN;
-    } else {
-        MaxVal = LONG_MAX;
-    }
-    MaxDigit = MaxVal % base;
-    MaxVal  /= base;
-
-    /* Convert the number */
-    while (1) {
-
-        /* Convert the digit into a numeric value */
-        if (isdigit (*S)) {
-            DigitVal = *S - '0';
-        } else if (isupper (*S)) {
-            DigitVal = *S - ('A' - 10);
-        } else if (islower (*S)) {
-            DigitVal = *S - ('a' - 10);
-        } else {
-            /* Unknown character */
-            break;
-        }
-
-        /* Don't accept a character that doesn't match base */
-        if (DigitVal >= base) {
-            break;
-        }
-
-        /* Don't accept anything that makes the final value invalid */
-        if (Val > MaxVal || (Val == MaxVal && DigitVal > MaxDigit)) {
-            Ovf = 1;
-        }
-
-        /* Calculate the next value if digit is not invalid */
-        if (Ovf == 0) {
-            Val = (Val * base) + DigitVal;
-            ++CvtCount;
-        }
-
-        /* Next character from input */
-        ++S;
-    }
-
-    /* Store the end pointer. If no conversion was performed, the value of
-    ** nptr is returned in endptr.
-    */
-    if (endptr) {
-        if (CvtCount > 0) {
-            *endptr = (char*) S;
-        } else {
-            *endptr = (char*) nptr;
-        }
-    }
-
-    /* Handle overflow */
-    if (Ovf) {
-        _seterrno (ERANGE);
-        if (Minus) {
-            return LONG_MIN;
-        } else {
-            return LONG_MAX;
-        }
-    }
-
-    /* Return the result */
-    if (Minus) {
-        return -(long)Val;
-    } else {
-        return Val;
-    }
-}
-
diff --git a/libsrc/common/strtoul.c b/libsrc/common/strtoul.c
deleted file mode 100644 (file)
index a186fc6..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-#include <limits.h>
-#include <ctype.h>
-#include <errno.h>
-#include <stdlib.h>
-
-
-
-unsigned long __fastcall__ strtoul (const char* nptr, char** endptr, int base)
-/* Convert a string to a long unsigned int */
-{
-    register const char* S          = nptr;
-    unsigned long        Val        = 0;
-    unsigned char        Minus      = 0;
-    unsigned char        Ovf        = 0;
-    unsigned             CvtCount   = 0;
-    unsigned char        DigitVal;
-    unsigned long        MaxVal;
-    unsigned char        MaxDigit;
-
-
-    /* Skip white space */
-    while (isspace (*S)) {
-        ++S;
-    }
-
-    /* Check for leading + or - sign */
-    switch (*S) {
-        case '-':
-            Minus = 1;
-            /* FALLTHROUGH */
-        case '+':
-            ++S;
-    }
-
-    /* If base is zero, we may have a 0 or 0x prefix. If base is 16, we may
-    ** have a 0x prefix.
-    */
-    if (base == 0) {
-        if (*S == '0') {
-            ++S;
-            if (*S == 'x' || *S == 'X') {
-                ++S;
-                base = 16;
-            } else {
-                base = 8;
-            }
-        } else {
-            base = 10;
-        }
-    } else if (base == 16 && *S == '0' && (S[1] == 'x' || S[1] == 'X')) {
-        S += 2;
-    }
-
-    /* Determine the maximum valid number and (if the number is equal to this
-    ** value) the maximum valid digit.
-    */
-    MaxDigit = ULONG_MAX % base;
-    MaxVal   = ULONG_MAX / base;
-
-    /* Convert the number */
-    while (1) {
-
-        /* Convert the digit into a numeric value */
-        if (isdigit (*S)) {
-            DigitVal = *S - '0';
-        } else if (isupper (*S)) {
-            DigitVal = *S - ('A' - 10);
-        } else if (islower (*S)) {
-            DigitVal = *S - ('a' - 10);
-        } else {
-            /* Unknown character */
-            break;
-        }
-
-        /* Don't accept a character that doesn't match base */
-        if (DigitVal >= base) {
-            break;
-        }
-
-        /* Don't accept anything that makes the final value invalid */
-        if (Val > MaxVal || (Val == MaxVal && DigitVal > MaxDigit)) {
-            Ovf = 1;
-        }
-
-        /* Calculate the next value if digit is not invalid */
-        if (Ovf == 0) {
-            Val = (Val * base) + DigitVal;
-            ++CvtCount;
-        }
-
-        /* Next character from input */
-        ++S;
-    }
-
-    /* Store the end pointer. If no conversion was performed, the value of
-    ** nptr is returned in endptr.
-    */
-    if (endptr) {
-        if (CvtCount > 0) {
-            *endptr = (char*) S;
-        } else {
-            *endptr = (char*) nptr;
-        }
-    }
-
-    /* Handle overflow */
-    if (Ovf) {
-        _seterrno (ERANGE);
-        return ULONG_MAX;
-    }
-
-    /* Return the result */
-    if (Minus) {
-        return (unsigned long) -(long)Val;
-    } else {
-        return Val;
-    }
-}
-
diff --git a/libsrc/common/strtoumax.s b/libsrc/common/strtoumax.s
deleted file mode 100644 (file)
index 89ea18b..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-09-17
-;
-; uintmax_t __fastcall__ strtoumax (const char* nptr, char** endptr, int base);
-;
-
-        .import         _strtoul
-        .export         _strtoumax = _strtoul
-
diff --git a/libsrc/common/strupper.s b/libsrc/common/strupper.s
deleted file mode 100644 (file)
index bf0d3b6..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-;
-; 1998-06-02, Ullrich von Bassewitz
-; 2013-08-28, Greg King
-;
-; char* __fastcall__ strupper (char* s);
-; char* __fastcall__ strupr (char* s);
-;
-; Non-ANSI
-;
-
-        .export         _strupper, _strupr
-        .import         popax
-        .import         __ctype
-        .importzp       ptr1, ptr2
-
-        .include        "ctype.inc"
-
-_strupper:
-_strupr:
-        sta     ptr1            ; Save s (working copy)
-        stx     ptr1+1
-        sta     ptr2
-        stx     ptr2+1          ; save function result
-        ldy     #0
-
-loop:   lda     (ptr1),y        ; get character
-        beq     L9              ; jump if done
-        tax
-        lda     __ctype,x       ; get character classification
-        and     #CT_LOWER       ; lower case char?
-        beq     L1              ; jump if no
-        txa                     ; get character back into accu
-        clc
-        adc     #<('A'-'a')     ; make upper case char
-        sta     (ptr1),y        ; store back
-L1:     iny                     ; next char
-        bne     loop
-        inc     ptr1+1          ; handle offset overflow
-        bne     loop            ; branch always
-
-; Done, return the argument string
-
-L9:     lda     ptr2
-        ldx     ptr2+1
-        rts
-
-
-
diff --git a/libsrc/common/strxfrm.c b/libsrc/common/strxfrm.c
deleted file mode 100644 (file)
index fb08919..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-** strxfrm.c
-**
-** Ullrich von Bassewitz, 11.12.1998
-*/
-
-
-
-#include <string.h>
-
-
-
-size_t __fastcall__ strxfrm (char* dest, const char* src, size_t count)
-{
-    strncpy (dest, src, count);
-    return strlen (src);
-}
-
-
-
diff --git a/libsrc/common/system.c b/libsrc/common/system.c
deleted file mode 100644 (file)
index 01dec1a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-** system.c
-**
-** Stefan Haubenthal, 2003-05-26
-** Ullrich von Bassewitz, 2003-05-27
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-
-int __fastcall__ system (const char* s)
-{
-    if (s == NULL) {
-        return 0;               /* no shell */
-    } else {
-        return -1;              /* always fail */
-    }
-}
-
-
-
diff --git a/libsrc/common/time.s b/libsrc/common/time.s
deleted file mode 100644 (file)
index 140d47e..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-;
-; Ullrich von Bassewitz, 12.11.2002
-;
-; time_t __fastcall__ time (time_t* timep);
-;
-
-        .export         _time
-
-        .import         __systime
-        .importzp       ptr1, sreg, tmp1
-
-        .include        "errno.inc"
-
-
-.code
-
-.proc   _time
-
-        pha
-        txa
-        pha                     ; Save timep
-
-        jsr     __systime       ; Get the time (machine dependent)
-
-        sta     tmp1            ; Save low byte of result
-
-; Restore timep and check if it is NULL
-
-        pla
-        sta     ptr1+1
-        pla
-        sta     ptr1            ; Restore timep
-        ora     ptr1+1          ; timep == 0?
-        beq     @L1
-
-; timep is not NULL, store the result there
-
-        ldy     #3
-        lda     sreg+1
-        sta     (ptr1),y
-        dey
-        lda     sreg
-        sta     (ptr1),y
-        dey
-        txa
-        sta     (ptr1),y
-        dey
-        lda     tmp1
-        sta     (ptr1),y
-
-; If the result is less than zero, set ERRNO
-
-@L1:    ldy     sreg+1
-        bpl     @L2
-                  
-        lda     #ENOSYS         ; Function not implemented
-        jsr     __seterrno      ; Set __errno
-
-; Reload the low byte of the result and return
-
-@L2:    lda     tmp1
-        rts
-
-.endproc
-
-
diff --git a/libsrc/common/timezone.c b/libsrc/common/timezone.c
deleted file mode 100644 (file)
index a51009e..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  timezone.c                               */
-/*                                                                           */
-/*                            Timezone specification                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <time.h>
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-struct _timezone _tz = {
-    0,                  /* True if daylight savings time active */
-    0,                  /* Number of seconds behind UTC */
-    "UTC",              /* Name of timezone, e.g. CET */
-    "UTC"               /* Name when daylight true, e.g. CEST */
-};
-
-
-
diff --git a/libsrc/common/tolower.s b/libsrc/common/tolower.s
deleted file mode 100644 (file)
index 2c624cb..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 02.06.1998
-;
-; int tolower (int c);
-;
-
-        .export         _tolower
-        .import         __ctype
-
-_tolower:
-        cpx     #$00            ; Outside valid range?
-        bne     L9              ; If so, return the argument unchanged
-        tay                     ; Get C into Y
-        lda     __ctype,y       ; Get character classification
-        lsr     a
-        lsr     a               ; Get bit 1 (upper case char) into carry
-        tya                     ; Get char back into A
-        bcc     L9              ; Jump if no upper case char
-        sbc     #<('A'-'a')     ; Make lower case char (carry already set)
-L9:     rts
-
diff --git a/libsrc/common/toupper.s b/libsrc/common/toupper.s
deleted file mode 100644 (file)
index da1ee04..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 02.06.1998
-;
-; int toupper (int c);
-;
-
-        .export         _toupper
-        .import         __ctype
-
-_toupper:
-        cpx     #$00            ; Outside valid range?
-        bne     L9              ; If so, return the argument unchanged
-        tay                     ; Get c into Y
-        lda     __ctype,y       ; Get character classification
-        lsr     a               ; Get bit 0 (lower char) into carry
-        tya                     ; Get C back into A
-        bcc     L9              ; Jump if not lower char
-        clc
-        adc     #<('A'-'a')     ; make upper case char
-L9:     rts                     ; CC are set
-
diff --git a/libsrc/common/uname.s b/libsrc/common/uname.s
deleted file mode 100644 (file)
index 3c1b084..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; int __fastcall__ uname (struct utsname* buf);
-;
-
-        .export         _uname
-
-        .import         __sysuname
-        .import         __mappederrno
-
-
-;--------------------------------------------------------------------------
-
-.proc   _uname
-
-        jsr     __sysuname      ; Call the machine specific function
-        jmp     __mappederrno   ; Store into _oserror, set errno, return 0/-1
-
-.endproc
-
-
diff --git a/libsrc/common/ungetc.s b/libsrc/common/ungetc.s
deleted file mode 100644 (file)
index 386c450..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-;
-; Ullrich von Bassewitz, 2004-05-12
-;
-; int __fastcall__ ungetc (int c, FILE* f);
-; /* Push back a character into a file stream. */
-;
-
-        .export         _ungetc
-
-        .import         popax
-        .import         ptr1: zp, tmp1: zp
-
-        .include        "_file.inc"
-        .include        "errno.inc"
-
-
-; ------------------------------------------------------------------------
-; Code
-
-.proc   _ungetc
-
-; Save the file pointer to ptr1
-
-        sta     ptr1
-        stx     ptr1+1
-
-; Get c from stack and save the lower byte in tmp1
-
-        jsr     popax
-        sta     tmp1
-
-; c must be in char range
-
-        txa
-        bne     error
-
-; Check if the file is open
-
-        ldy     #_FILE::f_flags
-        lda     (ptr1),y
-        and     #_FOPEN                 ; Is the file open?
-        beq     error                   ; Branch if no
-
-; Set the pushback flag and reset the end-of-file indicator
-
-        lda     (ptr1),y
-        ora     #_FPUSHBACK
-        and     #<~_FEOF
-        sta     (ptr1),y
-
-; Store the character into the pushback buffer
-
-        ldy     #_FILE::f_pushback
-        lda     tmp1
-        sta     (ptr1),y
-
-; Done, return c
-
-        ldx     #0
-        rts
-
-; File is not open or the character is invalid
-
-error:  lda     #EINVAL
-        jsr     __seterrno
-        lda     #$FF                    ; Return -1
-        tax
-        rts
-
-.endproc
-           
diff --git a/libsrc/common/unlink.s b/libsrc/common/unlink.s
deleted file mode 100644 (file)
index b210868..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-06-12
-;
-; int __fastcall__ unlink (const char* name);
-;
-
-        .export         _unlink
-        .import         _remove
-
-; unlink is just an alias for remove
-
-        _unlink = _remove
-
diff --git a/libsrc/common/utscopy.s b/libsrc/common/utscopy.s
deleted file mode 100644 (file)
index d89f2d5..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; This module contains a utility function for the machine dependent parts
-; of uname (__sysuname): It copies a packed struct utsname (just the strings
-; without padding) into a struct utsname. The source of the data is an
-; external symbol named "utsdata", the target is passed in a/x.
-; The function is written so that it is a direct replacement for __sysuname
-; for systems where utsdata is fixed. It may also be called via jump or
-; subroutine on systems where utsdata must be changed at runtime.
-;
-
-        .export         utscopy
-
-        .import         utsdata
-        .importzp       ptr1, tmp1
-
-        .include        "utsname.inc"
-
-
-
-;--------------------------------------------------------------------------
-; Data.
-
-.rodata
-
-; Table with offsets into struct utsname
-fieldoffs:
-        .byte   utsname::sysname
-        .byte   utsname::nodename
-        .byte   utsname::release
-        .byte   utsname::version
-        .byte   utsname::machine
-
-fieldcount = * - fieldoffs
-
-;--------------------------------------------------------------------------
-
-.code
-
-.proc   utscopy
-
-        sta     ptr1
-        stx     ptr1+1          ; Save buf
-
-        ldx     #0
-        stx     tmp1            ; Field number
-
-next:   ldy     tmp1
-        cpy     #fieldcount
-        beq     done
-        inc     tmp1            ; Bump field counter
-        lda     fieldoffs,y     ; Get next field offset
-        tay                     ; Field offset -> y
-
-loop:   lda     utsdata,x
-        sta     (ptr1),y
-        inx                     ; Next char in utsdata
-        cmp     #$00            ; Check for end of string
-        beq     next            ; Jump for next field
-        iny                     ; Next char in utsname struct
-        bne     loop            ; Copy string
-
-done:   lda     #$00            ; Always successful
-        rts
-
-.endproc
-
-
diff --git a/libsrc/common/vfprintf.s b/libsrc/common/vfprintf.s
deleted file mode 100644 (file)
index 1225bcc..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-; vfprintf.s
-;
-; int fastcall vfprintf(FILE* f, const char* Format, va_list ap);
-;
-; 2005-02-08, Ullrich von Bassewitz
-; 2005-02-11, Greg King
-
-        .export         _vfprintf
-        .import         push1, pushwysp, incsp6
-        .import         _fwrite, __printf
-        .importzp       sp, ptr1
-
-        .macpack        generic
-
-
-.data
-
-; ----------------------------------------------------------------------------
-; Static data for the _vfprintf routine
-;
-outdesc:                        ; Static outdesc structure
-ccount: .res    2
-        .word   out             ; Output function pointer
-ptr:    .res    2               ; Points to output file
-        .res    2               ; (Not used by this function)
-
-.code
-
-; ----------------------------------------------------------------------------
-; Callback routine used for the actual output.
-;
-; Since we know, that this routine is always called with "our" outdesc, we
-; can ignore the passed pointer d, and access the data directly. While this
-; is not very clean, it gives better and shorter code.
-;
-; static void cdecl out (struct outdesc* d, const char* buf, unsigned count)
-; /* Routine used for writing */
-; {
-;     register size_t cnt;
-;
-;     /* Write to the file */
-;     if ((cnt = fwrite(buf, 1, count, ptr)) == 0) {
-;         ccount = -1;
-;     } else {
-;         ccount += cnt;
-;     }
-; }
-
-; About to call
-;
-;       fwrite (buf, 1, count, ptr);
-;
-out:    ldy     #5
-        jsr     pushwysp        ; Push buf
-        jsr     push1           ; Push #1
-        ldy     #7
-        jsr     pushwysp        ; Push count
-        lda     ptr
-        ldx     ptr+1
-        jsr     _fwrite
-        sta     ptr1            ; Save function result
-        stx     ptr1+1
-
-; Check the return value.
-
-        ora     ptr1+1
-        bne     @Ok
-
-; We had an error. Store -1 into ccount
-
-.ifp02
-        lda     #<-1
-.else
-        dec     a
-.endif
-        sta     ccount
-        bne     @Done           ; Branch always
-
-; Result was ok, count bytes written
-
-@Ok:    lda     ptr1
-        add     ccount
-        sta     ccount
-        txa
-        adc     ccount+1
-@Done:  sta     ccount+1
-        jmp     incsp6          ; Drop stackframe
-
-
-; ----------------------------------------------------------------------------
-; vfprintf - formatted output
-;
-; int fastcall vfprintf(FILE* f, const char* format, va_list ap)
-; {
-;     static struct outdesc d = {
-;         0,
-;         out
-;     };
-;
-;     /* Setup descriptor */
-;     d.ccount = 0;
-;     d.ptr  = f;
-;
-;     /* Do formatting and output */
-;     _printf (&d, format, ap);
-;
-;     /* Return bytes written */
-;     return d.ccount;
-; }
-;
-_vfprintf:
-        pha                     ; Save low byte of ap
-
-; Setup the outdesc structure
-
-        lda     #0
-        sta     ccount
-        sta     ccount+1        ; Clear character-count
-
-; Reorder the stack. Replace f on the stack by &d, so the stack frame is
-; exactly as _printf expects it. Parameters will get dropped by _printf.
-
-        ldy     #2
-        lda     (sp),y          ; Low byte of f
-        sta     ptr
-        lda     #<outdesc
-        sta     (sp),y
-        iny
-        lda     (sp),y          ; High byte of f
-        sta     ptr+1
-        lda     #>outdesc
-        sta     (sp),y
-
-; Restore low byte of ap and call _printf
-
-        pla
-        jsr     __printf
-
-; Return the number of bytes written
-
-        lda     ccount
-        ldx     ccount+1
-        rts
-
-
diff --git a/libsrc/common/vfscanf.s b/libsrc/common/vfscanf.s
deleted file mode 100644 (file)
index c7d6e55..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-;
-; int __fastcall__ vfscanf (FILE* f, const char* format, va_list ap);
-;
-; 2004-11-27, Ullrich von Bassewitz
-; 2004-12-21, Greg King
-;
-
-        .export         _vfscanf
-        .import         _fgetc, _ungetc, _ferror
-
-        .include        "zeropage.inc"
-        .include        "_scanf.inc"
-        .include        "stdio.inc"
-
-
-count   :=      ptr3            ; Result of scan
-
-
-; ----------------------------------------------------------------------------
-; Static scanfdata structure for the _vfscanf routine
-;
-
-.data
-d:      .addr   _fgetc          ; GET
-        .addr   _ungetc         ; UNGET
-        .addr   0               ; data
-
-
-; ----------------------------------------------------------------------------
-; int __fastcall__ vfscanf (FILE* f, const char* format, va_list ap)
-; /* Standard C function */
-; {
-;     /* Initialize the data struct. We do only need the given file as user data,
-;     ** because the (getfunc) and (ungetfunc) functions are crafted so that they
-;     ** match the standard-I/O fgetc() and ungetc().
-;     */
-;     static struct scanfdata d = {
-;         (  getfunc)  fgetc,
-;         (ungetfunc) ungetc
-;     };
-;     static int count;
-;
-;     d.data = (void*) f;
-;
-;     /* Call the internal function */
-;     count = _scanf (&d, format, ap);
-;
-;     /* And, return the result */
-;     return ferror (f) ? EOF : count;
-; }
-;
-; Because _scanf() has the same parameter stack as vfscanf(), with f replaced
-; by &d, we will do exactly that.  _scanf() then will clean up the stack.
-; Beware: Since ap is a fastcall parameter, we must not destroy a/x.
-;
-
-.code
-_vfscanf:
-        pha                     ; Save low byte of ap
-
-; Swap f against &d on the stack, placing f into d.data
-
-        ldy     #2              ; Offset of f on the stack
-        lda     (sp),y
-        sta     d + SCANFDATA::DATA
-        lda     #<d
-        sta     (sp),y
-
-        iny                     ; High byte
-        lda     (sp),y
-        sta     d + SCANFDATA::DATA + 1
-        lda     #>d
-        sta     (sp),y
-
-; Restore the low byte of ap, and call the _scanf function
-
-        pla
-        jsr     __scanf
-        sta     count
-        stx     count+1
-
-; Return -1 if there was a read error during the scan
-
-        lda     d + SCANFDATA::DATA     ; Get f
-        ldx     d + SCANFDATA::DATA+1
-        jsr     _ferror
-        tay
-        beq     L1
-        lda     #<EOF
-        tax
-        rts
-
-; Or, return the result of the scan
-
-L1:     lda     count
-        ldx     count+1
-        rts
-
diff --git a/libsrc/common/vprintf.s b/libsrc/common/vprintf.s
deleted file mode 100644 (file)
index 0958b10..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-06-02
-;
-; int __fastcall__ vprintf (const char* format, va_list ap);
-;
-
-        .export         _vprintf
-        .import         _vfprintf, _stdout
-        .import         decsp2
-        .importzp       sp
-
-
-.proc   _vprintf
-
-; Save A which contains the low part of ap
-
-        pha
-
-; Allocate one more word on the stack
-
-        jsr     decsp2
-
-; Move the format parameter down and store stdout in it's place
-
-        ldy     #2
-        lda     (sp),y
-        ldy     #0
-        sta     (sp),y
-        ldy     #3
-        lda     (sp),y
-        ldy     #1
-        sta     (sp),y
-
-        iny
-        lda     _stdout
-        sta     (sp),y
-        iny
-        lda     _stdout+1
-        sta     (sp),y
-
-; Restore A
-
-        pla
-
-; Call vfprintf (stdout, format, ap) which will cleanup the stack and return
-
-        jmp     _vfprintf
-
-.endproc
-
-
diff --git a/libsrc/common/vscanf.s b/libsrc/common/vscanf.s
deleted file mode 100644 (file)
index 94afe52..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-;
-; int __fastcall__ vscanf (const char* format, va_list ap);
-;
-; Ullrich von Bassewitz, 2004-11-27
-;
-
-        .export         _vscanf
-        .import         _vfscanf
-        .import         _stdin
-        .import         decsp2
-
-        .include        "zeropage.inc"
-
-
-; ----------------------------------------------------------------------------
-; int __fastcall__ vscanf (const char* format, va_list ap)
-; /* Standard C function */
-; {
-;     return vfscanf (stdin, format, ap);
-; }
-;
-
-.code
-_vscanf:
-        pha                     ; Save low byte of ap
-
-; Decrement the stack pointer by two for the additional parameter.
-
-        jsr     decsp2          ; Won't touch X
-
-; Move the format down
-
-        ldy     #2
-        lda     (sp),y          ; Load byte of format
-        ldy     #0
-        sta     (sp),y
-        ldy     #3
-        lda     (sp),y
-        ldy     #1
-        sta     (sp),y
-
-; Store stdin into the stack frame
-
-        iny
-        lda     _stdin
-        sta     (sp),y
-        iny
-        lda     _stdin+1
-        sta     (sp),y
-
-; Restore the low byte of ap and jump to vfscanf, which will cleanup the stack
-
-        pla
-        jmp     _vfscanf
-
diff --git a/libsrc/common/vsnprintf.s b/libsrc/common/vsnprintf.s
deleted file mode 100644 (file)
index 228e531..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-;
-; int __fastcall__ vsnprintf (char* Buf, size_t size, const char* Format, va_list ap);
-;
-; 2009-09-26, Ullrich von Bassewitz
-; 2015-07-17, Greg King
-;
-
-        .export         _vsnprintf, vsnprintf
-        .import         ldaxysp, popax, incsp2, incsp6
-        .import         _memcpy, __printf
-        .importzp       sp, ptr1
-
-        .include        "errno.inc"
-
-        .macpack        generic
-
-.data
-
-; ----------------------------------------------------------------------------
-;
-; Static data for the _vsnprintf routine
-;
-
-outdesc:                        ; Static outdesc structure
-ccount: .word   0               ; ccount
-func:   .word   out             ; Output function pointer
-bufptr: .word   0               ; ptr
-bufsize:.word   0               ; Buffer size
-
-.code
-
-; ----------------------------------------------------------------------------
-; vsprintf - formatted output into a buffer
-;
-; int __fastcall__ vsnprintf (char* buf, size_t size, const char* format, va_list ap);
-;
-
-_vsnprintf:
-        pha                     ; Save ap
-        txa
-        pha
-
-; Setup the outdesc structure. This is also an additional entry point for
-; vsprintf with ap on stack
-
-vsnprintf:
-        lda     #0
-        sta     ccount+0
-        sta     ccount+1        ; Clear ccount
-
-; Get the size parameter and replace it by a pointer to outdesc. This is to
-; build a stack frame for the call to _printf. The size must not be greater
-; than INT_MAX because the return type is int. If the size is zero,
-; then nothing will be written into the buffer; but, the arguments still will
-; be formatted and counted.
-
-        ldy     #2
-        lda     (sp),y
-        sta     ptr1
-
-        lda     #<outdesc
-        sta     (sp),y
-
-        iny
-        lda     (sp),y
-        bmi     L9              ; More than $7FFF
-        sta     ptr1+1
-
-        lda     #>outdesc
-        sta     (sp),y
-
-; Write size-1 to outdesc.uns.  It will be -1 if there is no buffer.
-
-        ldy     ptr1+1
-        ldx     ptr1
-        bne     L1
-        dey
-L1:     dex
-        stx     bufsize+0
-        sty     bufsize+1
-
-; Copy buf to the outdesc.ptr
-
-        ldy     #5
-        jsr     ldaxysp
-        sta     bufptr+0
-        stx     bufptr+1
-
-; There must be a buffer if its size is non-zero.
-
-        bit     bufsize+1
-        bmi     L5
-        ora     bufptr+1
-        bze     L0              ; The pointer shouldn't be NULL
-
-; Restore ap and call _printf
-
-L5:     pla
-        tax
-        pla
-        jsr     __printf
-
-; Terminate the string if there is a buffer.  The last char. is at either
-; bufptr+bufsize or bufptr+ccount, whichever is smaller.
-
-        ldx     bufsize+1
-        bmi     L4              ; -1 -- No buffer
-        lda     bufsize+0
-        cpx     ccount+1
-        bne     L2
-        cmp     ccount+0
-L2:     bcc     L3
-        lda     ccount+0
-        ldx     ccount+1
-        clc
-L3:     adc     bufptr+0
-        sta     ptr1
-        txa
-        adc     bufptr+1
-        sta     ptr1+1
-
-        lda     #0
-        tay
-        sta     (ptr1),y
-
-; Return the number of bytes written and drop buf
-
-L4:     lda     ccount+0
-        ldx     ccount+1
-        jmp     incsp2
-
-; Bail out if size is too high.
-
-L9:     ldy     #ERANGE
-        .byte   $2C             ;(bit $xxxx)
-
-; NULL buffer pointers usually are invalid.
-
-L0:     ldy     #EINVAL
-        pla                     ; Drop ap
-        pla
-        tya
-        jsr     __directerrno   ; Return -1
-        jmp     incsp6          ; Drop parameters
-
-
-; ----------------------------------------------------------------------------
-; Callback routine used for the actual output.
-;
-; static void __cdecl__ out (struct outdesc* d, const char* buf, unsigned count)
-; /* Routine used for writing */
-;
-; Since we know, we're called with a pointer to our static outdesc structure,
-; we don't need the pointer passed on the stack.
-
-out:
-
-; Calculate the space left in the buffer. If no space is left, don't copy
-; any characters
-
-        lda     bufsize+0               ; Low byte of buffer size
-        sec
-        sbc     ccount+0                ; Low byte of bytes already written
-        sta     ptr1
-        lda     bufsize+1
-        bmi     @L9                     ; -1 -- No buffer
-        sbc     ccount+1
-        sta     ptr1+1
-        bcs     @L0                     ; Branch if space left
-@L9:    lda     #$0000
-        sta     ptr1
-        sta     ptr1+1                  ; No space left
-
-; Replace the pointer to d by a pointer to the write position in the buffer
-; for the call to memcpy that follows.
-
-@L0:    lda     bufptr+0
-        clc
-        adc     ccount+0
-        ldy     #4
-        sta     (sp),y
-
-        lda     bufptr+1
-        adc     ccount+1
-        iny
-        sta     (sp),y
-
-; Get Count from stack
-
-        jsr     popax
-
-; outdesc.ccount += Count;
-
-        pha
-        clc
-        adc     ccount+0
-        sta     ccount+0
-        txa
-        adc     ccount+1
-        sta     ccount+1
-        pla
-
-; if (Count > Left) Count = Left;
-
-        cpx     ptr1+1
-        bne     @L1
-        cmp     ptr1
-@L1:    bcc     @L2
-        lda     ptr1
-        ldx     ptr1+1
-
-; Jump to memcpy, which will cleanup the stack and return to the caller
-
-@L2:    jmp     _memcpy
-
-
-
diff --git a/libsrc/common/vsprintf.s b/libsrc/common/vsprintf.s
deleted file mode 100644 (file)
index eb47dae..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-;
-; int __fastcall__ vsprintf (char* Buf, const char* Format, va_list ap);
-;
-; Ullrich von Bassewitz, 2009-09-26
-;
-
-        .export         _vsprintf
-        .import         pushw0sp, staxysp
-        .import         vsnprintf
-
-
-; ----------------------------------------------------------------------------
-; vsprintf - formatted output into a buffer
-;
-; int __fastcall__ vsprintf (char* buf, const char* format, va_list ap);
-;
-
-
-_vsprintf:
-        pha                     ; Save low byte of ap
-        txa
-        pha                     ; Save high byte of op
-
-; Build a stackframe for vsnprintf. To do that, we move format one word down,
-; and store 0x7FFF (INT_MAX) as size.
-
-        jsr     pushw0sp        ; Get format and push it
-        lda     #$FF
-        ldx     #$7F            ; INT_MAX
-        ldy     #2
-        jsr     staxysp
-
-; Contine by jumping to vsnprintf, which expects ap on the CPU stack and will 
-; cleanup the C stack
-
-        jmp     vsnprintf
-
diff --git a/libsrc/common/vsscanf.s b/libsrc/common/vsscanf.s
deleted file mode 100644 (file)
index 335712b..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-;
-; int __fastcall__ vsscanf (const char* str, const char* format, va_list ap);
-; /* Standard C function */
-;
-; 2004-11-28, Ullrich von Bassewitz
-; 2014-09-10, Greg King
-;
-
-        .export         _vsscanf
-
-        .import         popax, __scanf
-        .importzp       sp, ptr1, ptr2
-
-        .macpack        generic
-
-
-; ----------------------------------------------------------------------------
-; Structure used to pass data to the callback functions
-
-.struct SSCANFDATA
-        STR     .addr
-        INDEX   .word
-.endstruct
-
-
-; ----------------------------------------------------------------------------
-; static int __fastcall__ get (struct sscanfdata* d)
-; /* Read a character from the input string and return it */
-; {
-;     char C = d->str[d->index];
-;     if (C == '\0') {
-;         return EOF;
-;     }
-;     /* Increment index only if end not reached */
-;     ++d->index;
-;     return C;
-; }
-;
-
-.code
-.proc   get
-
-        sta     ptr1
-        stx     ptr1+1                  ; Save d
-
-; Get d->str adding the high byte of index to the pointer, so we can access
-; the byte in the string with just the low byte as index
-
-        ldy     #SSCANFDATA::STR
-        lda     (ptr1),y
-        sta     ptr2
-        iny
-        lda     (ptr1),y
-        ldy     #SSCANFDATA::INDEX+1
-        add     (ptr1),y
-        sta     ptr2+1
-
-; Load the low byte of the index and fetch the byte from the string
-
-        dey                             ; = SSCANFDATA::INDEX
-        lda     (ptr1),y
-        tay
-        lda     (ptr2),y
-
-; Return EOF if we are at the end of the string
-
-        bne     L1
-        lda     #<-1
-        tax
-        rts
-
-; Bump the index (beware: A contains the char we must return)
-
-L1:     tax                             ; Save return value
-        tya                             ; Low byte of index
-        ldy     #SSCANFDATA::INDEX
-        add     #<$0001
-        sta     (ptr1),y
-        iny
-        lda     (ptr1),y
-        adc     #>$0001
-        sta     (ptr1),y
-
-; Return the char just read
-
-        txa
-        ldx     #>$0000
-        rts
-
-.endproc
-
-; ----------------------------------------------------------------------------
-; static int __fastcall__ unget (int c, struct sscanfdata* d)
-; /* Push back a character onto the input stream */
-; {
-;     /* We do assume here that the _scanf routine will not push back anything
-;     ** not read, so we can ignore c safely and won't check the index.
-;     */
-;     --d->index;
-;     return c;
-; }
-;
-
-.code
-.proc   unget
-
-        sta     ptr1
-        stx     ptr1+1                  ; Save d
-
-; Decrement the index
-
-        ldy     #SSCANFDATA::INDEX
-        lda     (ptr1),y
-        sub     #<$0001
-        sta     (ptr1),y
-        iny
-        lda     (ptr1),y
-        sbc     #>$0001
-        sta     (ptr1),y
-
-; Return c
-
-        jmp     popax
-
-.endproc
-
-; ----------------------------------------------------------------------------
-; int __fastcall__ vsscanf (const char* str, const char* format, va_list ap)
-; /* Standard C function */
-; {
-;     /* Initialize the data structs. The sscanfdata struct will be passed back
-;     ** to the get and unget functions by _scanf().
-;     */
-;     static       struct sscanfdata sd;
-;     static const struct  scanfdata  d = {
-;         (  getfunc)   get,
-;         (ungetfunc) unget,
-;         (void*) &sd
-;     };
-;
-;     sd.str   = str;
-;     sd.index = 0;
-;
-;     /* Call the internal function and return the result */
-;     return _scanf (&d, format, ap);
-; }
-;
-
-.bss
-sd:     .tag    SSCANFDATA
-
-.rodata
-d:      .addr   get
-        .addr   unget
-        .addr   sd
-
-.code
-.proc   _vsscanf
-
-; Save the low byte of ap (which is passed in a/x)
-
-        pha
-
-; Initialize sd and at the same time replace str on the stack by a pointer
-; to d
-
-        ldy     #2                      ; Stack offset of str
-        lda     (sp),y
-        sta     sd + SSCANFDATA::STR
-        lda     #<d
-        sta     (sp),y
-        iny
-        lda     (sp),y
-        sta     sd + SSCANFDATA::STR+1
-        lda     #>d
-        sta     (sp),y
-
-        lda     #$00
-        sta     sd + SSCANFDATA::INDEX
-        sta     sd + SSCANFDATA::INDEX+1
-
-; Restore the low byte of ap, and jump to _scanf() which will clean up the stack
-
-        pla
-        jmp     __scanf
-
-.endproc
-
diff --git a/libsrc/common/zerobss.s b/libsrc/common/zerobss.s
deleted file mode 100644 (file)
index de160ae..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-;
-; Ullrich von Bassewitz, 1998-09-17, 2005-02-26.
-;
-; Zero the bss segment.
-;
-
-        .export         zerobss
-        .import         __BSS_RUN__, __BSS_SIZE__
-        .importzp       ptr1
-
-
-.segment "INIT"
-
-zerobss:
-        lda     #<__BSS_RUN__
-        sta     ptr1
-        lda     #>__BSS_RUN__
-        sta     ptr1+1
-        lda     #0
-        tay
-
-; Clear full pages
-
-L1:     ldx     #>__BSS_SIZE__
-        beq     L3
-L2:     sta     (ptr1),y
-        iny
-        bne     L2
-        inc     ptr1+1
-        dex
-        bne     L2
-
-; Clear remaining page (y is zero on entry)
-
-L3:     cpy     #<__BSS_SIZE__
-        beq     L4
-        sta     (ptr1),y
-        iny
-        bne     L3
-
-; Done
-
-L4:     rts
-
-
-
diff --git a/libsrc/conio/_cursor.s b/libsrc/conio/_cursor.s
deleted file mode 100644 (file)
index eb1bb70..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; Cursor related variables
-;
-
-        .export         cursor
-
-.bss
-
-cursor: .res    1
-
-
diff --git a/libsrc/conio/cprintf.s b/libsrc/conio/cprintf.s
deleted file mode 100644 (file)
index 01bd0bb..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-;
-; int cprintf (const char* Format, ...);
-;
-; Ullrich von Bassewitz, 1.12.2000
-;
-
-        .export         _cprintf
-        .import         pushax, addysp, _vcprintf
-        .importzp       sp, ptr1
-
-        .macpack        generic
-
-; ----------------------------------------------------------------------------
-; Data
-
-.bss
-
-ParamSize:      .res    1               ; Number of parameter bytes
-
-; ----------------------------------------------------------------------------
-; Code
-
-.code
-
-
-_cprintf:
-        sty     ParamSize               ; Number of param bytes passed in Y
-
-; Calculate a pointer that points to Format
-
-        dey
-        dey                             ; Sub size of Format
-        tya
-        add     sp
-        sta     ptr1
-        ldx     sp+1
-        bcc     @L1
-        inx
-@L1:    stx     ptr1+1
-
-; Push Format
-
-        ldy     #1
-        lda     (ptr1),y
-        tax
-        dey
-        lda     (ptr1),y
-        jsr     pushax
-
-; Load va_list (last and __fastcall__ parameter to vfprintf)
-
-        lda     ptr1
-        ldx     ptr1+1
-
-; Call vcprintf
-
-        jsr     _vcprintf
-
-; Cleanup the stack. We will return what we got from vcprintf
-
-        ldy     ParamSize
-        jmp     addysp
-
-
diff --git a/libsrc/conio/cputhex.s b/libsrc/conio/cputhex.s
deleted file mode 100644 (file)
index 88ef4be..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void cputhex8 (unsigned char val);
-; void cputhex16 (unsigned val);
-;
-
-        .export         _cputhex8, _cputhex16
-        .import         _cputc
-        .import         __hextab
-
-
-_cputhex16:
-        pha                     ; Save low byte
-        txa                     ; Get high byte into A
-        jsr     _cputhex8       ; Output high byte
-        pla                     ; Restore low byte and run into _cputhex8
-
-_cputhex8:
-        pha                     ; Save the value
-        lsr     a
-        lsr     a
-        lsr     a
-        lsr     a
-        tay
-        lda     __hextab,y
-        jsr     _cputc
-        pla
-        and     #$0F
-        tay
-        lda     __hextab,y
-        jmp     _cputc
-
-
-
-
-
-
-
diff --git a/libsrc/conio/cputs.s b/libsrc/conio/cputs.s
deleted file mode 100644 (file)
index 13cf847..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; void cputsxy (unsigned char x, unsigned char y, char* s);
-; void cputs (char* s);
-;
-
-        .export         _cputsxy, _cputs
-        .import         popa, _gotoxy, _cputc
-        .importzp       ptr1, tmp1
-                 
-_cputsxy:
-        sta     ptr1            ; Save s for later
-        stx     ptr1+1
-        jsr     popa            ; Get Y
-        jsr     _gotoxy         ; Set cursor, pop x
-        jmp     L0              ; Same as cputs...
-
-_cputs: sta     ptr1            ; Save s
-        stx     ptr1+1
-L0:     ldy     #0
-L1:     lda     (ptr1),y
-        beq     L9              ; Jump if done
-        iny
-        sty     tmp1            ; Save offset
-        jsr     _cputc          ; Output char, advance cursor
-        ldy     tmp1            ; Get offset
-        bne     L1              ; Next char
-        inc     ptr1+1          ; Bump high byte
-        bne     L1
-
-; Done
-
-L9:     rts
-
-
diff --git a/libsrc/conio/cscanf.s b/libsrc/conio/cscanf.s
deleted file mode 100644 (file)
index 7e54a84..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-;
-; int cscanf(const char* format, ...);
-;
-; 2000-12-01, Ullrich von Bassewitz
-; 2005-01-01, Greg King
-;
-
-        .export         _cscanf
-
-        .import         pushax, addysp, _vcscanf
-
-        .macpack        generic
-        .include        "zeropage.inc"
-
-; ----------------------------------------------------------------------------
-; Code
-;
-_cscanf:
-        sty     ArgSize         ; Number of argument bytes passed in .Y
-        dey                     ; subtract size of format pointer
-        dey
-        tya
-
-; Now, calculate the va_list pointer -- which points to format.
-
-        ldx     sp+1
-        add     sp
-        bcc     @L1
-        inx
-@L1:    sta     ptr1
-        stx     ptr1+1
-
-; Push a copy of the format pointer onto the stack.
-
-        ldy     #1
-        lda     (ptr1),y
-        tax
-        dey
-        lda     (ptr1),y
-        jsr     pushax
-
-; Load va_list [last and __fastcall__ argument for vcscanf()].
-
-        lda     ptr1
-        ldx     ptr1+1
-
-; Call vcscanf().
-
-        jsr     _vcscanf
-
-; Clean up the stack.  We will return what we got from vcscanf().
-
-        ldy     ArgSize
-        jmp     addysp
-
-; ----------------------------------------------------------------------------
-; Data
-;
-        .bss
-ArgSize:
-        .res    1               ; Number of argument bytes
-
diff --git a/libsrc/conio/cursor.s b/libsrc/conio/cursor.s
deleted file mode 100644 (file)
index cb59984..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 17.06.1998
-;
-; unsigned char cursor (unsigned char onoff);
-;
-
-        .export         _cursor
-        .import         cursor
-
-
-.proc   _cursor
-
-        tay                     ; onoff into Y
-        ldx     #0              ; High byte of result
-        lda     cursor          ; Get old value
-        sty     cursor          ; Set new value
-        rts
-
-.endproc
-
diff --git a/libsrc/conio/scrsize.s b/libsrc/conio/scrsize.s
deleted file mode 100644 (file)
index 6582568..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void screensize (unsigned char* x, unsigned char* y);
-;
-
-        .export         _screensize
-
-        .import         popsreg
-        .import         screensize
-        .importzp       ptr1, sreg
-
-.proc   _screensize
-
-        sta     ptr1            ; Store the y pointer
-        stx     ptr1+1
-        jsr     popsreg         ; Get the x pointer into sreg
-        jsr     screensize      ; Get screensize into X/Y
-        tya                     ; Get Y size into A
-
-.IFP02
-        ldy     #0
-        sta     (ptr1),y
-        txa
-        sta     (sreg),y
-.ELSE
-        sta     (ptr1)
-        txa
-        sta     (sreg)
-.ENDIF
-
-        rts
-
-.endproc
-
diff --git a/libsrc/conio/vcprintf.s b/libsrc/conio/vcprintf.s
deleted file mode 100644 (file)
index 06eab44..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-;
-; int __fastcall__ vcprintf (const char* Format, va_list ap);
-;
-; Ullrich von Bassewitz, 2.12.2000
-;
-
-        .export         _vcprintf
-        .import         pushax, popax
-        .import         __printf, _cputc
-        .importzp       sp, ptr1, ptr2, ptr3, tmp1
-
-        .macpack        generic
-
-
-.data
-
-; ----------------------------------------------------------------------------
-;
-; Static data for the _vsprintf routine
-;
-
-outdesc:                        ; Static outdesc structure
-        .word   0               ; ccount
-        .word   out             ; Output function pointer
-        .word   0               ; ptr
-        .word   0               ; uns
-
-.code
-
-; ----------------------------------------------------------------------------
-; Callback routine used for the actual output.
-;
-; static void __cdecl__ out (struct outdesc* d, const char* buf, unsigned count)
-; /* Routine used for writing */
-; {
-;     /* Fast screen output */
-;     d->ccount += count;
-;     while (count) {
-;         cputc (*buf);
-;         ++buf;
-;         --count;
-;     }
-; }
-;
-; We're using ptr1 and tmp1, since we know that the cputc routine will not use
-; them (they're also used in cputs, so they must be safe).
-
-out:    jsr     popax           ; count
-        sta     ptr2
-        eor     #$FF
-        sta     outdesc+6
-        txa
-        sta     ptr2+1
-        eor     #$FF
-        sta     outdesc+7
-
-        jsr     popax           ; buf
-        sta     ptr1
-        stx     ptr1+1
-
-        jsr     popax           ; d
-        sta     ptr3
-        stx     ptr3+1
-
-; Sum up the total count of characters
-
-        ldy     #0              ; ccount in struct outdesc
-        sty     tmp1            ; Initialize tmp1 while we have zero available
-        lda     (ptr3),y
-        add     ptr2
-        sta     (ptr3),y
-        iny
-        lda     (ptr3),y
-        adc     ptr2+1
-        sta     (ptr3),y
-
-; Loop outputting characters
-
-@L1:    inc     outdesc+6
-        beq     @L4
-@L2:    ldy     tmp1
-        lda     (ptr1),y
-        iny
-        bne     @L3
-        inc     ptr1+1
-@L3:    sty     tmp1
-        jsr     _cputc
-        jmp     @L1
-
-@L4:    inc     outdesc+7
-        bne     @L2
-        rts
-
-; ----------------------------------------------------------------------------
-; vcprintf - formatted console i/o
-;
-; int __fastcall__ vcprintf (const char* format, va_list ap)
-; {
-;     struct outdesc d;
-;
-;     /* Setup descriptor */
-;     d.fout = out;
-;
-;     /* Do formatting and output */
-;     _printf (&d, format, ap);
-;
-;     /* Return bytes written */
-;     return d.ccount;
-; }
-
-_vcprintf:
-        sta     ptr1            ; Save ap
-        stx     ptr1+1
-
-; Setup the outdesc structure
-
-        lda     #0
-        sta     outdesc
-        sta     outdesc+1       ; Clear ccount
-
-; Get the format parameter and push it again
-
-        ldy     #1
-        lda     (sp),y
-        tax
-        dey
-        lda     (sp),y
-        jsr     pushax
-
-; Replace the passed format parameter on the stack by &d - this creates
-; exactly the stack frame _printf expects. Parameters will get dropped
-; by _printf.
-
-        ldy     #2              ; Low byte of d
-        lda     #<outdesc
-        sta     (sp),y
-        iny
-        lda     #>outdesc
-        sta     (sp),y
-
-; Restore ap and call _printf
-
-        lda     ptr1
-        ldx     ptr1+1
-        jsr     __printf
-
-; Return the number of bytes written.
-
-        lda     outdesc         ; ccount
-        ldx     outdesc+1
-        rts
diff --git a/libsrc/conio/vcscanf.s b/libsrc/conio/vcscanf.s
deleted file mode 100644 (file)
index 6893da4..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-;
-; int fastcall vcscanf(const char* format, va_list ap);
-;
-; 2014-09-10, Greg King
-;
-
-        .export         _vcscanf
-
-        .import         _cgetc, _cputc
-        .import         popax, pushax, swapstk
-
-        .include        "../common/_scanf.inc"
-
-
-; static bool pushed;
-; static char back;
-;
-        .bss
-pushed: .res    1
-back:   .res    1
-
-        .code
-; /* Call-back functions:
-; ** (Note:  These prototypes must NOT be declared with fastcall!  They don't
-; ** use (getfunc)'s and (ungetfunc)'s last parameter.  Leaving it out of these
-; ** prototypes makes more efficient code.)
-; */
-
-; ----------------------------------------------------------------------------
-; /* Read a character from the console, and return it to an internal function */
-; static int get(void) {
-;     static char C;
-;
-;     if (pushed) {
-;         pushed = false;
-;         return (int)back;
-;         }
-;     cputc(C = cgetc());       /* echo a typed character */
-;     return (int)C;
-;     }
-;
-get:    ldx     pushed
-        beq     L1
-
-; Return the old, pushed-back character (instead of getting a new one).
-;
-        dex                     ; ldx #>$0000
-        stx     pushed
-        lda     back
-        rts
-
-; Directly read the keyboard.
-;
-L1:     jsr     _cgetc
-
-; Echo the character to the screen.
-;
-        pha
-        jsr     _cputc
-        pla
-        ldx     #>$0000
-        rts
-
-
-; ----------------------------------------------------------------------------
-; static int cdecl unget(int c) {
-;     pushed = true;
-;     return back = c;
-;     }
-;
-unget:  ldx     #1
-        stx     pushed
-        jsr     popax           ; get the first argument
-        sta     back
-        rts
-
-
-; ----------------------------------------------------------------------------
-; int fastcall vcscanf(const char* format, va_list ap) {
-;     /* Initiate the data structure.
-;     ** Don't initiate the member that these conio functions don't use.
-;     */
-;     static const struct scanfdata d = {
-;         (  getfunc)  get,
-;         (ungetfunc)unget
-;         };
-;
-;     /* conio is very interactive.  So, don't use any pushed-back character.
-;     ** Start fresh, each time that this function is called.
-;     */
-;     pushed = false;
-;
-;     /* Call the internal function, and return the result. */
-;     return _scanf(&d, format, ap);
-;     }
-;
-; Beware:  Because ap is a fastcall parameter, we must not destroy .XA.
-;
-        .proc   _vcscanf
-
-; ----------------------------------------------------------------------------
-; Static, constant scanfdata structure for the _vcscanf routine.
-;
-        .rodata
-d:      .addr   get             ; SCANFDATA::GET
-        .addr   unget           ; SCANFDATA::UNGET
-;       .addr   0               ; SCANFDATA::DATA (not used)
-
-        .code
-        pha                     ; Save low byte of ap
-        txa
-        pha                     ; Save high byte of ap
-        ldx     #0
-        stx     pushed
-
-; Put &d on the stack in front of the format pointer.
-
-        lda     #<d
-        ldx     #>d
-        jsr     swapstk         ; Swap .XA with top-of-stack
-        jsr     pushax          ; Put format pointer back on stack
-
-; Restore ap, and jump to _scanf which will clean up the stack.
-
-        pla
-        tax
-        pla
-        jmp     __scanf
-        .endproc
diff --git a/libsrc/dbg/asmtab.s b/libsrc/dbg/asmtab.s
deleted file mode 100644 (file)
index 3d27aea..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; Tables needed for the line assembler/disassembler.
-;
-
-        .export         OffsetTab
-        .export         AdrFlagTab
-        .export         SymbolTab1, SymbolTab2
-        .export         MnemoTab1, MnemoTab2
-
-; -------------------------------------------------------------------------
-; Assembler tables
-
-.rodata
-
-
-OffsetTab:
-        .byte   $40,$02,$45,$03,$D0,$08,$40,$09
-        .byte   $30,$22,$45,$33,$D0,$08,$40,$09
-        .byte   $40,$02,$45,$33,$D0,$08,$40,$09
-        .byte   $40,$02,$45,$B3,$D0,$08,$40,$09
-        .byte   $00,$22,$44,$33,$D0,$8C,$44,$00
-        .byte   $11,$22,$44,$33,$D0,$8C,$44,$9A
-        .byte   $10,$22,$44,$33,$D0,$08,$40,$09
-        .byte   $10,$22,$44,$33,$D0,$08,$40,$09
-        .byte   $62,$13,$78,$A9
-
-AdrFlagTab:
-        .byte   $00,$21,$81,$82,$00,$00,$59,$4D
-        .byte   $91,$92,$86,$4A,$85,$9D
-
-SymbolTab1:
-        .byte   $2C,$29,$2C,$23,$28,$24
-
-SymbolTab2:
-        .byte   $59,$00,$58,$24,$24,$00
-
-MnemoTab1:
-        .byte   $1C,$8A,$1C,$23,$5D,$8B,$1B,$A1
-        .byte   $9D,$8A,$1D,$23,$9D,$8B,$1D,$A1
-        .byte   $00,$29,$19,$AE,$69,$A8,$19,$23
-        .byte   $24,$53,$1B,$23,$24,$53,$19,$A1
-        .byte   $00,$1A,$5B,$5B,$A5,$69,$24,$24
-        .byte   $AE,$AE,$A8,$AD,$29,$00,$7C,$00
-        .byte   $15,$9C,$6D,$9C,$A5,$69,$29,$53
-        .byte   $84,$13,$34,$11,$A5,$69,$23,$A0
-
-MnemoTab2:
-        .byte   $D8,$62,$5A,$48,$26,$62,$94,$88
-        .byte   $54,$44,$C8,$54,$68,$44,$E8,$94
-        .byte   $00,$B4,$08,$84,$74,$B4,$28,$6E
-        .byte   $74,$F4,$CC,$4A,$72,$F2,$A4,$8A
-        .byte   $00,$AA,$A2,$A2,$74,$74,$74,$72
-        .byte   $44,$68,$B2,$32,$B2,$00,$22,$00
-        .byte   $1A,$1A,$26,$26,$72,$72,$88,$C8
-        .byte   $C4,$CA,$26,$48,$44,$44,$A2,$C8
-
-
-   
-
diff --git a/libsrc/dbg/dbg.c b/libsrc/dbg/dbg.c
deleted file mode 100644 (file)
index 8b09484..0000000
+++ /dev/null
@@ -1,1590 +0,0 @@
-/*
-** dbg.c
-**
-** Ullrich von Bassewitz, 08.08.1998
-**
-*/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <conio.h>
-#include <ctype.h>
-#include <6502.h>
-#include <dbg.h>
-
-
-
-/*****************************************************************************/
-/*                             Function forwards                             */
-/*****************************************************************************/
-
-
-
-/* Forwards for handler functions */
-static char AsmHandler (void);
-static char RegHandler (void);
-static char StackHandler (void);
-static char CStackHandler (void);
-static char DumpHandler (void);
-static char HelpHandler (void);
-
-/* Forwards for other functions */
-static void DisplayPrompt (char* s);
-static void SingleStep (char StepInto);
-static void RedrawStatic (char  Frame);
-static void Redraw (char Frame);
-static char GetKeyUpdate (void);
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Color definitions */
-#if defined(__C16__)
-#  define COLOR_BORDER          (BCOLOR_DARKBLUE | CATTR_LUMA6)
-#  define COLOR_BACKGROUND      COLOR_WHITE
-#  define COLOR_TEXTHIGH        COLOR_BLACK
-#  define COLOR_TEXTLOW         COLOR_GRAY1
-#  define COLOR_FRAMEHIGH       COLOR_BLACK
-#  define COLOR_FRAMELOW        COLOR_GRAY2
-#else
-#  if defined(COLOR_GRAY3)
-#    define COLOR_BORDER        COLOR_BLACK
-#    define COLOR_BACKGROUND    COLOR_BLACK
-#    define COLOR_TEXTHIGH      COLOR_WHITE
-#    define COLOR_TEXTLOW       COLOR_GRAY3
-#    define COLOR_FRAMEHIGH     COLOR_WHITE
-#    define COLOR_FRAMELOW      COLOR_GRAY3
-#  else
-#    if defined(__APPLE2__)
-#      define COLOR_BORDER      COLOR_BLACK
-#      define COLOR_BACKGROUND  COLOR_BLACK
-#      define COLOR_TEXTHIGH    COLOR_BLACK
-#      define COLOR_TEXTLOW     COLOR_BLACK
-#      define COLOR_FRAMEHIGH   COLOR_BLACK
-#      define COLOR_FRAMELOW    COLOR_BLACK
-#    else
-#      define COLOR_BORDER      COLOR_BLACK
-#      define COLOR_BACKGROUND  COLOR_BLACK
-#      define COLOR_TEXTHIGH    COLOR_WHITE
-#      define COLOR_TEXTLOW     COLOR_WHITE
-#      define COLOR_FRAMEHIGH   COLOR_WHITE
-#      define COLOR_FRAMELOW    COLOR_WHITE
-#    endif
-#  endif
-#endif
-#ifndef COLOR_BLACK
-#  define COLOR_BLACK   0
-#endif
-#ifndef COLOR_WHITE
-#  define COLOR_WHITE   1
-#endif
-
-/* Screen definitions */
-#if defined(__CBM610__)
-#  define BIGSCREEN
-#  define MAX_X         80
-#  define MAX_Y         25
-#  define DUMP_BYTES    16
-#elif defined(__APPLE2__) || defined(__ATARI__)
-#  define MAX_X         40
-#  define MAX_Y         24
-#  define DUMP_BYTES     8
-#else
-#  define MAX_X         40
-#  define MAX_Y         25
-#  define DUMP_BYTES     8
-#endif
-
-/* Replacement key definitions */
-#ifndef CH_DEL
-#  define CH_DEL        ('H' - 'A' + 1)         /* Ctrl+H */
-#endif
-
-/* Replacement char definitions */
-#ifndef CH_ULCORNER
-#  define CH_ULCORNER   '+'
-#endif
-#ifndef CH_URCORNER
-#  define CH_URCORNER   '+'
-#endif
-#ifndef CH_LLCORNER
-#  define CH_LLCORNER   '+'
-#endif
-#ifndef CH_LRCORNER
-#  define CH_LRCORNER   '+'
-#endif
-#ifndef CH_TTEE
-#  define CH_TTEE       '+'
-#endif
-#ifndef CH_LTEE
-#  define CH_LTEE       '+'
-#endif
-#ifndef CH_RTEE
-#  define CH_RTEE       '+'
-#endif
-#ifndef CH_BTEE
-#  define CH_BTEE       '+'
-#endif
-#ifndef CH_CROSS
-#  define CH_CROSS      '+'
-#endif
-
-/* Defines for opcodes */
-#define OPC_BRK         0x00
-#define OPC_BPL         0x10
-#define OPC_JSR         0x20
-#define OPC_BMI         0x30
-#define OPC_RTI         0x40
-#define OPC_JMP         0x4C
-#define OPC_BVC         0x50
-#define OPC_RTS         0x60
-#define OPC_JMPIND      0x6C
-#define OPC_BVS         0x70
-#define OPC_BCC         0x90
-#define OPC_BCS         0xB0
-#define OPC_BNE         0xD0
-#define OPC_BEQ         0xF0
-
-
-
-/* Register values that are used also in the assembler stuff */
-extern unsigned char DbgSP;             /* Stack pointer */
-extern unsigned      DbgCS;             /* C stack pointer */
-extern unsigned      DbgHI;             /* High 16 bit of primary reg */
-
-
-
-/* Descriptor for one text line */
-typedef struct {
-    unsigned char x;
-    unsigned char y;
-    char*         text;
-} TextDesc;
-
-/* Window descriptor */
-typedef struct {
-    unsigned char fd_tl;                /* Top left char */
-    unsigned char fd_tr;                /* Top right char */
-    unsigned char fd_bl;                /* Bottom left char */
-    unsigned char fd_br;                /* Bottom right char */
-    unsigned char fd_x1, fd_y1;         /* Upper left corner */
-    unsigned char fd_x2, fd_y2;         /* Lower right corner */
-    unsigned char fd_width, fd_height;  /* Redundant but faster */
-    unsigned char fd_visible;           /* Is the window currently visible? */
-    char (*fd_func) (void);             /* Handler function */
-    unsigned char fd_textcount;         /* Number of text lines to print */
-    TextDesc*     fd_text;              /* Static text in the window */
-} FrameDesc;
-
-
-
-/* Texts for the windows */
-static TextDesc RegText [] = {
-    { 1,  0, "PC" },
-    { 1,  1, "SR" },
-    { 1,  2, "A"  },
-    { 1,  3, "X"  },
-    { 1,  4, "Y"  },
-    { 1,  5, "SP" },
-    { 1,  6, "CS" },
-    { 1,  7, "HI" }
-};
-static TextDesc HelpText [] = {
-    { 1,  0, "F1, ?     Help"                           },
-    { 1,  1, "F2, t     Toggle breakpoint"              },
-    { 1,  2, "F3, u     Run until subroutine returns"   },
-    { 1,  3, "F4, h     Run to cursor"                  },
-    { 1,  4, "F7, space Step into"                      },
-    { 1,  5, "F8, enter Step over"                      },
-    { 1,  6, "1-5       Select active window"           },
-    { 1,  7, "+         Page down"                      },
-    { 1,  8, "-         Page up"                        },
-    { 1,  9, "Cursor    Move up/down"                   },
-    { 1, 10, "a/z       Move up/down"                   },
-    { 1, 11, "c         Continue"                       },
-    { 1, 12, "f         Follow instruction"             },
-    { 1, 13, "o         Goto origin"                    },
-    { 1, 14, "p         Use as new PC value"            },
-    { 1, 15, "q         Quit"                           },
-    { 1, 16, "r         Redraw screen"                  },
-    { 1, 17, "s         Skip next instruction"          },
-};
-
-
-/* Window data */
-static FrameDesc AsmFrame = {
-    CH_ULCORNER, CH_TTEE, CH_LTEE, CH_CROSS,
-    0, 0, MAX_X - 10, 15,
-    MAX_X - 11, 14,
-    1,
-    AsmHandler,
-    0, 0
-};
-static FrameDesc RegFrame = {
-    CH_TTEE, CH_URCORNER, CH_LTEE, CH_RTEE,
-    MAX_X - 10, 0, MAX_X - 1, 9,
-    8, 8,
-    1,
-    RegHandler,
-    sizeof (RegText) / sizeof (RegText [0]), RegText
-};
-static FrameDesc StackFrame = {
-    CH_LTEE, CH_RTEE, CH_CROSS, CH_RTEE,
-    MAX_X - 10, 9, MAX_X - 1, 15,
-    8, 5,
-    1,
-    StackHandler,
-    0, 0
-};
-static FrameDesc CStackFrame = {
-    CH_CROSS, CH_RTEE, CH_BTEE, CH_LRCORNER,
-    MAX_X - 10, 15, MAX_X - 1, MAX_Y - 1,
-    8, MAX_Y - 17,
-    1,
-    CStackHandler,
-    0, 0
-};
-static FrameDesc DumpFrame = {
-    CH_LTEE, CH_CROSS, CH_LLCORNER, CH_BTEE,
-    0, 15, MAX_X - 10, MAX_Y-1,
-    MAX_X - 11, MAX_Y - 17,
-    1,
-    DumpHandler,
-    0, 0
-};
-static FrameDesc HelpFrame = {
-    CH_ULCORNER, CH_URCORNER, CH_LLCORNER, CH_LRCORNER,
-    0, 0, MAX_X - 1, MAX_Y-1,
-    MAX_X - 2, MAX_Y - 2,
-    0,
-    HelpHandler,
-    sizeof (HelpText) / sizeof (HelpText [0]), HelpText
-};
-static FrameDesc* Frames [] = {
-    &AsmFrame,
-    &RegFrame,
-    &StackFrame,
-    &CStackFrame,
-    &DumpFrame,
-    &HelpFrame
-};
-
-/* Number of active frame, -1 = none */
-static int ActiveFrame = -1;
-
-/* Window names */
-#define WIN_ASM         0
-#define WIN_REG         1
-#define WIN_STACK       2
-#define WIN_CSTACK      3
-#define WIN_DUMP        4
-#define WIN_HELP        5
-
-/* Other window data */
-static unsigned AsmAddr;        /* Start address of output */
-static unsigned DumpAddr;       /* Start address of output */
-static unsigned CStackAddr;     /* Start address of output */
-static unsigned char StackAddr; /* Start address of output */
-
-
-
-/* Prompt line data */
-static char* ActivePrompt = 0;  /* Last prompt line displayed */
-static char PromptColor;        /* Color behind prompt */
-static char PromptLength;       /* Length of current prompt string */
-
-
-
-/* Values for the bk_use field of struct BreakPoint */
-#define BRK_EMPTY       0x00
-#define BRK_USER        0x01
-#define BRK_TMP         0x80
-
-/* Structure describing a breakpoint */
-typedef struct {
-    unsigned      bk_addr;      /* Address, 0 if unused */
-    unsigned char bk_opc;       /* Opcode */
-    unsigned char bk_use;       /* 1 if in use, 0 otherwise */
-} BreakPoint;
-
-
-
-/* Temporary breakpoints - also accessed from the assembler source */
-#define MAX_USERBREAKS  10
-unsigned char DbgBreakCount = 0;
-BreakPoint DbgBreaks [MAX_USERBREAKS+2];
-
-
-
-/*****************************************************************************/
-/*              Forwards for functions in the assembler source               */
-/*****************************************************************************/
-
-
-
-BreakPoint* DbgGetBreakSlot (void);
-/* Search for a free breakpoint slot. Return a pointer to the slot or 0 */
-
-BreakPoint* DbgIsBreak (unsigned Addr);
-/* Check if there is a user breakpoint at the given address, if so, return
-** a pointer to the slot, else return 0.
-*/
-
-
-
-/*****************************************************************************/
-/*                         Frame/window drawing code                         */
-/*****************************************************************************/
-
-
-
-static void DrawFrame (register FrameDesc* F, char Active)
-/* Draw one window frame */
-{
-    TextDesc* T;
-    unsigned char Count;
-    unsigned char tl, tr, bl, br;
-    unsigned char x1, y1, width;
-    unsigned char OldColor;
-
-    /* Determine the characters for the corners, set frame color */
-    if (Active) {
-        OldColor = textcolor (COLOR_FRAMEHIGH);
-        tl = CH_ULCORNER;
-        tr = CH_URCORNER;
-        bl = CH_LLCORNER;
-        br = CH_LRCORNER;
-    } else {
-        OldColor = textcolor (COLOR_FRAMELOW);
-        tl = F->fd_tl;
-        tr = F->fd_tr;
-        bl = F->fd_bl;
-        br = F->fd_br;
-    }
-
-    /* Get the coordinates into locals for faster access */
-    x1 = F->fd_x1;
-    y1 = F->fd_y1;
-    width = F->fd_width;
-
-    /* Top line */
-    cputcxy (x1, y1, tl);
-    chline (width);
-    cputc (tr);
-
-    /* Left line */
-    cvlinexy (x1, ++y1, F->fd_height);
-
-    /* Bottom line */
-    cputc (bl);
-    chline (width);
-    cputc (br);
-
-    /* Right line */
-    cvlinexy (F->fd_x2, y1, F->fd_height);
-
-    /* If the window has static text associated, print the text */
-    (void) textcolor (COLOR_TEXTLOW);
-    Count = F->fd_textcount;
-    T = F->fd_text;
-    while (Count--) {
-        cputsxy (x1 + T->x, y1 + T->y, T->text);
-        ++T;
-    }
-
-    /* Set the old color */
-    (void) textcolor (OldColor);
-}
-
-
-
-static void DrawFrames (void)
-/* Draw all frames */
-{
-    unsigned char I;
-    FrameDesc* F;
-
-    /* Build the frame layout of the screen */
-    for (I = 0; I < sizeof (Frames) / sizeof (Frames [0]); ++I) {
-        F = Frames [I];
-        if (F->fd_visible) {
-            DrawFrame (F, 0);
-        }
-    }
-}
-
-
-
-static void ActivateFrame (int Num, unsigned char Clear)
-/* Activate a new frame, deactivate the old one */
-{
-    unsigned char y;
-    register FrameDesc* F;
-
-    if (ActiveFrame != Num) {
-
-        /* Deactivate the old one */
-        if (ActiveFrame >= 0) {
-            DrawFrame (Frames [ActiveFrame], 0);
-        }
-
-        /* Activate the new one */
-        if ((ActiveFrame = Num) >= 0) {
-            F = Frames [ActiveFrame];
-            /* Clear the frame if requested */
-            if (Clear) {
-                for (y = F->fd_y1+1; y < F->fd_y2; ++y) {
-                    cclearxy (F->fd_x1+1, y, F->fd_width);
-                }
-            }
-            DrawFrame (F, 1);
-        }
-
-        /* Redraw the current prompt line */
-        DisplayPrompt (ActivePrompt);
-
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                Prompt line                                */
-/*****************************************************************************/
-
-
-
-static void DisplayPrompt (char* s)
-/* Display a prompt */
-{
-    unsigned char OldColor;
-
-    /* Remember the current color */
-    OldColor = textcolor (COLOR_TEXTHIGH);
-
-    /* Clear the old prompt if there is one */
-    if (ActivePrompt) {
-        (void) textcolor (PromptColor);
-        chlinexy ((MAX_X - PromptLength) / 2, MAX_Y-1, PromptLength);
-    }
-
-    /* Get the new prompt data */
-    ActivePrompt = s;
-    PromptColor  = OldColor;
-    PromptLength = strlen (ActivePrompt);
-
-    /* Display the new prompt */
-    (void) textcolor (COLOR_TEXTHIGH);
-    cputsxy ((MAX_X - PromptLength) / 2, MAX_Y-1, ActivePrompt);
-
-    /* Restore the old color */
-    (void) textcolor (PromptColor);
-}
-
-
-
-static void HelpPrompt (void)
-/* Display a prompt line mentioning the help key */
-{
-    DisplayPrompt ("Press F1 for help");
-}
-
-
-
-static void AnyKeyPrompt (void)
-{
-    DisplayPrompt ("Press any key to continue");
-}
-
-
-
-static char IsAbortKey (char C)
-/* Return true if C is an abort key */
-{
-#if defined(CH_ESC)
-    if (C == CH_ESC) {
-        return 1;
-    }
-#endif
-#if defined(CH_STOP)
-    if (C == CH_STOP) {
-        return 1;
-    }
-#endif
-#if !defined(CH_ESC) && !defined(CH_STOP)
-    /* Avoid compiler warning about unused parameter */
-    (void) C;
-#endif
-    return 0;
-}
-
-
-
-static char Input (char* Prompt, char* Buf, unsigned char Count)
-/* Read input from the user, return 1 on success, 0 if aborted */
-{
-    int Frame;
-    unsigned char OldColor;
-    unsigned char OldCursor;
-    unsigned char x1;
-    unsigned char i;
-    unsigned char done;
-    char c;
-
-    /* Clear the current prompt line */
-    cclearxy (0, MAX_Y-1, MAX_X);
-
-    /* Display the new prompt */
-    OldColor = textcolor (COLOR_TEXTHIGH);
-    cputsxy (0, MAX_Y-1, Prompt);
-    (void) textcolor (COLOR_TEXTLOW);
-
-    /* Remember where we are, enable the cursor */
-    x1 = wherex ();
-    OldCursor = cursor (1);
-
-    /* Get input and handle it */
-    i = done = 0;
-    do {
-        c = cgetc ();
-        if (isalnum (c) && i < Count) {
-            Buf [i] = c;
-            cputcxy (x1 + i, MAX_Y-1, c);
-            ++i;
-        } else if (i > 0 && c == CH_DEL) {
-            --i;
-            cputcxy (x1 + i, MAX_Y-1, ' ');
-            gotoxy (x1 + i, MAX_Y-1);
-        } else if (c == '\n') {
-            Buf [i] = '\0';
-            done = 1;
-        } else if (IsAbortKey (c)) {
-            /* Abort */
-            done = 2;
-        }
-    } while (!done);
-
-    /* Reset settings, display old prompt line */
-    cursor (OldCursor);
-    (void) textcolor (OldColor);
-    DrawFrames ();
-    Frame = ActiveFrame;
-    ActiveFrame = -1;
-    ActivateFrame (Frame, 0);
-
-    return (done == 1);
-}
-
-
-
-static char InputHex (char* Prompt, unsigned* Val)
-/* Prompt for a hexadecimal value. Return 0 on failure. */
-{
-    char Buf [5];
-    char* P;
-    char C;
-    unsigned V;
-
-    /* Read input from the user (4 digits max), check input */
-    if (Input (Prompt, Buf, sizeof (Buf)-1) && isxdigit (Buf [0])) {
-
-        /* Check the characters and convert to hex */
-        P = Buf;
-        V = 0;
-        while ((C = *P) && isxdigit (C)) {
-            V <<= 4;
-            if (isdigit (C)) {
-                C -= '0';
-            } else {
-                C = toupper (C) - ('A' - 10);
-            }
-            V += C;
-            ++P;
-        }
-
-        /* Assign the value */
-        *Val = V;
-
-        /* Success */
-        return 1;
-
-    } else {
-
-        /* Failure */
-        return 0;
-
-    }
-}
-
-
-
-static void ErrorPrompt (char* Msg)
-/* Display an error message and wait for a key */
-{
-    /* Save the current prompt */
-    char* OldPrompt = ActivePrompt;
-
-    /* Display the new one */
-    DisplayPrompt (Msg);
-
-    /* Wait for a key and discard it */
-    cgetc ();
-
-    /* Restore the old prompt */
-    DisplayPrompt (OldPrompt);
-}
-
-
-
-static char InputGoto (unsigned* Addr)
-/* Prompt "Goto" and read an address. Print an error and return 0 on failure. */
-{
-    char Ok;
-    Ok = InputHex ("Goto: ", Addr);
-    if (!Ok) {
-        ErrorPrompt ("Invalid input - press a key");
-    }
-    return Ok;
-}
-
-
-
-static void BreakInRomError (void)
-/* Print an error message if we cannot set a breakpoint */
-{
-    ErrorPrompt ("Cannot set breakpoint - press a key");
-}
-
-
-
-/*****************************************************************************/
-/*                            Breakpoint handling                            */
-/*****************************************************************************/
-
-
-
-static void DbgSetTmpBreak (unsigned Addr)
-/* Set a breakpoint */
-{
-    BreakPoint* B = DbgGetBreakSlot ();
-    B->bk_addr    = Addr;
-    B->bk_use     = BRK_TMP;
-}
-
-
-
-static void DbgToggleUserBreak (unsigned Addr)
-/* Set a breakpoint */
-{
-    register BreakPoint* B = DbgIsBreak (Addr);
-
-    if (B) {
-        /* We have a breakpoint, remove it */
-        B->bk_use = BRK_EMPTY;
-        --DbgBreakCount;
-    } else {
-        /* We don't have a breakpoint, set one */
-        if (DbgBreakCount >= MAX_USERBREAKS) {
-            ErrorPrompt ("Too many breakpoints - press a key");
-        } else {
-            /* Test if we can set a breakpoint at that address */
-            if (!DbgIsRAM (Addr)) {
-                BreakInRomError ();
-            } else {
-                /* Set the breakpoint */
-                B = DbgGetBreakSlot ();
-                B->bk_addr = Addr;
-                B->bk_use  = BRK_USER;
-                ++DbgBreakCount;
-            }
-        }
-    }
-}
-
-
-
-static void DbgResetTmpBreaks (void)
-/* Reset all temporary breakpoints */
-{
-    unsigned char i;
-    BreakPoint* B = DbgBreaks;
-
-    for (i = 0; i < MAX_USERBREAKS; ++i) {
-        if (B->bk_use == BRK_TMP) {
-            B->bk_use = BRK_EMPTY;
-        }
-        ++B;
-    }
-}
-
-
-
-static unsigned char DbgTmpBreaksOk (void)
-/* Check if the temporary breakpoints can be set, if so, return 1, if not,
-** reset them all and return 0.
-*/
-{
-    unsigned char i;
-    BreakPoint* B = DbgBreaks;
-    for (i = 0; i < MAX_USERBREAKS; ++i) {
-        if (B->bk_use == BRK_TMP && !DbgIsRAM (B->bk_addr)) {
-            BreakInRomError ();
-            DbgResetTmpBreaks ();
-            return 0;
-        }
-        ++B;
-    }
-    return 1;
-}
-
-
-
-/*****************************************************************************/
-/*                          Assembler window stuff                           */
-/*****************************************************************************/
-
-
-
-static unsigned AsmBack (unsigned mem, unsigned char lines)
-/* Go back in the assembler window the given number of lines (calculate
-** new start address).
-*/
-{
-    unsigned cur;
-    unsigned adr [32];
-    unsigned char in;
-
-    unsigned offs = 6;
-    while (1) {
-        in = 0;
-        cur = mem - (lines * 3) - offs;
-        while (1) {
-            cur += DbgDisAsmLen (cur);
-            adr [in] = cur;
-            in = (in + 1) & 0x1F;
-            if (cur >= mem) {
-                if (cur == mem || offs == 12) {
-                    /* Found */
-                    return adr [(in - lines - 1) & 0x1F];
-                } else {
-                    /* The requested address is inside an instruction, go back
-                    ** one more byte and try again.
-                    */
-                    ++offs;
-                    break;
-                }
-            }
-        }
-    }
-}
-
-
-
-static unsigned UpdateAsm (void)
-/* Update the assembler window starting at the given address */
-{
-    char buf [MAX_X];
-    unsigned char len;
-    unsigned char y;
-    unsigned char width = AsmFrame.fd_width;
-    unsigned char x = AsmFrame.fd_x1 + 1;
-    unsigned      m = AsmBack (AsmAddr, 2);
-
-    for (y = AsmFrame.fd_y1+1; y < AsmFrame.fd_y2; ++y) {
-        len = DbgDisAsm (m, buf, width);
-        if (m == brk_pc) {
-            buf [4] = '-';
-            buf [5] = '>';
-        }
-        if (DbgIsBreak (m)) {
-            buf [5] = '*';
-        }
-        if (m == AsmAddr) {
-            revers (1);
-            cputsxy (1, y, buf);
-            revers (0);
-        } else {
-            cputsxy (1, y, buf);
-        }
-        m += len;
-    }
-    return m;
-}
-
-
-
-static unsigned AsmArg16 (void)
-/* Return a 16 bit argument */
-{
-    return *(unsigned*)(AsmAddr+1);
-}
-
-
-
-static void AsmFollow (void)
-/* Follow the current instruction */
-{
-    switch (*(unsigned char*) AsmAddr) {
-
-        case OPC_JMP:
-        case OPC_JSR:
-            AsmAddr = AsmArg16 ();
-            break;
-
-        case OPC_JMPIND:
-            AsmAddr = *(unsigned*)AsmArg16 ();
-            break;
-
-        case OPC_BPL:
-        case OPC_BMI:
-        case OPC_BVC:
-        case OPC_BVS:
-        case OPC_BCC:
-        case OPC_BCS:
-        case OPC_BNE:
-        case OPC_BEQ:
-            AsmAddr = AsmAddr + 2 + *(signed char*)(AsmAddr+1);
-            break;
-
-        case OPC_RTS:
-            AsmAddr = (*(unsigned*) (DbgSP + 0x101) + 1);
-            break;
-
-        case OPC_RTI:
-            AsmAddr = *(unsigned*) (DbgSP + 0x102);
-            break;
-
-    }
-}
-
-
-
-static void AsmHome (void)
-/* Set the cursor to home position */
-{
-    AsmAddr = brk_pc;
-}
-
-
-
-static void InitAsm (void)
-/* Initialize the asm window */
-{
-    AsmHome ();
-    UpdateAsm ();
-}
-
-
-
-static char AsmHandler (void)
-/* Get characters and handle them */
-{
-    char c;
-    unsigned Last;
-
-    while (1) {
-
-        /* Update the window contents */
-        Last = UpdateAsm ();
-
-        /* Read and handle input */
-        switch (c = GetKeyUpdate ()) {
-
-            case  '+':
-                AsmAddr = Last;
-                break;
-
-            case '-':
-                AsmAddr = AsmBack (AsmAddr, AsmFrame.fd_height);
-                break;
-
-            case 't':
-#ifdef CH_F2
-            case CH_F2:
-#endif
-                DbgToggleUserBreak (AsmAddr);
-                break;
-
-            case 'f':
-                AsmFollow ();
-                break;
-
-            case 'g':
-                InputGoto (&AsmAddr);
-                break;
-
-            case 'o':
-                AsmHome ();
-                break;
-
-            case 'p':
-                brk_pc = AsmAddr;
-                break;
-
-            case 'a':
-#ifdef CH_CURS_UP
-            case CH_CURS_UP:
-#endif
-                AsmAddr = AsmBack (AsmAddr, 1);
-                break;
-
-            case 'z':
-#ifdef CH_CURS_DOWN
-            case CH_CURS_DOWN:
-#endif
-                AsmAddr += DbgDisAsmLen (AsmAddr);
-                break;
-
-            default:
-                return c;
-
-        }
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                           Register window stuff                           */
-/*****************************************************************************/
-
-
-
-static unsigned UpdateReg (void)
-/* Update the register window */
-{
-    unsigned char x1 = RegFrame.fd_x1 + 5;
-    unsigned char x2 = x1 + 2;
-    unsigned char y = RegFrame.fd_y1;
-
-    /* Print the register contents */
-    gotoxy (x1, ++y);   cputhex16 (brk_pc);
-    gotoxy (x2, ++y);   cputhex8  (brk_sr);
-    gotoxy (x2, ++y);   cputhex8  (brk_a);
-    gotoxy (x2, ++y);   cputhex8  (brk_x);
-    gotoxy (x2, ++y);   cputhex8  (brk_y);
-    gotoxy (x2, ++y);   cputhex8  (DbgSP);
-    gotoxy (x1, ++y);   cputhex16 (DbgCS);
-    gotoxy (x1, ++y);   cputhex16 (DbgHI);
-
-    /* Not needed */
-    return 0;
-}
-
-
-
-static void InitReg (void)
-/* Initialize the register window */
-{
-    UpdateReg ();
-}
-
-
-
-static char RegHandler (void)
-/* Get characters and handle them */
-{
-    return GetKeyUpdate ();
-}
-
-
-
-/*****************************************************************************/
-/*                             Stack window stuff                            */
-/*****************************************************************************/
-
-
-
-static unsigned UpdateStack (void)
-/* Update the stack window */
-{
-    unsigned char mem = StackAddr;
-    unsigned char x1 = StackFrame.fd_x1 + 1;
-    unsigned char x2 = x1 + 6;
-    unsigned char y;
-
-    for (y = StackFrame.fd_y2-1; y > StackFrame.fd_y1; --y) {
-        gotoxy (x1, y);
-        cputhex8 (mem);
-        gotoxy (x2, y);
-        cputhex8 (* (unsigned char*) (mem + 0x100));
-        ++mem;
-    }
-    return mem;
-}
-
-
-
-static void StackHome (void)
-/* Set the cursor to home position */
-{
-    StackAddr = DbgSP + 1;
-}
-
-
-
-static void InitStack (void)
-/* Initialize the stack window */
-{
-    StackHome ();
-    UpdateStack ();
-}
-
-
-
-static char StackHandler (void)
-/* Get characters and handle them */
-{
-    char c;
-    unsigned char BytesPerPage = StackFrame.fd_height;
-
-    while (1) {
-
-        /* Read and handle input */
-        switch (c = GetKeyUpdate ()) {
-
-            case  '+':
-                StackAddr += BytesPerPage;
-                break;
-
-            case '-':
-                StackAddr -= BytesPerPage;
-                break;
-
-            case 'o':
-                StackHome ();
-                break;
-
-            case 'a':
-#ifdef CH_CURS_UP:
-            case CH_CURS_UP:
-#endif
-                --StackAddr;
-                break;
-
-            case 'z':
-#ifdef CH_CURS_DOWN
-            case CH_CURS_DOWN:
-#endif
-                ++StackAddr;
-                break;
-
-            default:
-                return c;
-
-        }
-
-        /* Update the window contents */
-        UpdateStack ();
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                           C Stack window stuff                            */
-/*****************************************************************************/
-
-
-
-static unsigned UpdateCStack (void)
-/* Update the C stack window */
-{
-    unsigned mem     = CStackAddr;
-    unsigned char x  = CStackFrame.fd_x1 + 5;
-    unsigned char y;
-
-    for (y = CStackFrame.fd_y2-1; y > CStackFrame.fd_y1; --y) {
-        gotoxy (x, y);
-        cputhex16 (* (unsigned*)mem);
-        mem += 2;
-    }
-    cputsxy (CStackFrame.fd_x1+1, CStackFrame.fd_y2-1, "->");
-    return mem;
-}
-
-
-
-static void CStackHome (void)
-/* Set the cursor to home position */
-{
-    CStackAddr = DbgCS;
-}
-
-
-
-static void InitCStack (void)
-/* Initialize the C stack window */
-{
-    CStackHome ();
-    UpdateCStack ();
-}
-
-
-
-static char CStackHandler (void)
-/* Get characters and handle them */
-{
-    char c;
-    unsigned char BytesPerPage = CStackFrame.fd_height * 2;
-
-    while (1) {
-
-        /* Read and handle input */
-        switch (c = GetKeyUpdate ()) {
-
-            case  '+':
-                CStackAddr += BytesPerPage;
-                break;
-
-            case '-':
-                CStackAddr -= BytesPerPage;
-                break;
-
-            case 'o':
-                CStackHome ();
-                break;
-
-            case 'a':
-#ifdef CH_CURS_UP
-            case CH_CURS_UP:
-#endif
-                CStackAddr -= 2;
-                break;
-
-            case 'z':
-#ifdef CH_CURS_DOWN
-            case CH_CURS_DOWN:
-#endif
-                CStackAddr += 2;
-                break;
-
-            default:
-                return c;
-
-        }
-
-        /* Update the window contents */
-        UpdateCStack ();
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                             Dump window stuff                             */
-/*****************************************************************************/
-
-
-
-static unsigned UpdateDump (void)
-/* Update the dump window */
-{
-    char Buf [MAX_X];
-    unsigned char y;
-    unsigned mem = DumpAddr;
-    unsigned char x = DumpFrame.fd_x1 + 1;
-    unsigned char* p = (unsigned char*) mem;
-
-    for (y = DumpFrame.fd_y1+1; y < DumpFrame.fd_y2; ++y) {
-        cputsxy (x, y, DbgMemDump (mem, Buf, DUMP_BYTES));
-        mem += DUMP_BYTES;
-    }
-    return mem;
-}
-
-
-
-static void DumpHome (void)
-/* Set the cursor to home position */
-{
-    DumpAddr = 0;
-}
-
-
-
-static char DumpHandler (void)
-/* Get characters and handle them */
-{
-    char c;
-    unsigned BytesPerPage = DumpFrame.fd_height * 8;
-
-    while (1) {
-
-        /* Read and handle input */
-        switch (c = GetKeyUpdate ()) {
-
-            case  '+':
-                DumpAddr += BytesPerPage;
-                break;
-
-            case '-':
-                DumpAddr -= BytesPerPage;
-                break;
-
-            case 'g':
-                InputGoto (&DumpAddr);
-                break;
-
-            case 'o':
-                DumpHome ();
-                break;
-
-            case 'a':
-#ifdef CH_CURS_UP
-            case CH_CURS_UP:
-#endif
-                DumpAddr -= 8;
-                break;
-
-            case 'z':
-#ifdef CH_CURS_DOWN
-            case CH_CURS_DOWN:
-#endif
-                DumpAddr += 8;
-                break;
-
-            default:
-                return c;
-
-        }
-
-        /* Update the window contents */
-        UpdateDump ();
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                             Help window stuff                             */
-/*****************************************************************************/
-
-
-
-static char HelpHandler (void)
-/* Get characters and handle them */
-{
-    /* Activate the frame */
-    int OldActive = ActiveFrame;
-    ActivateFrame (WIN_HELP, 1);
-
-    /* Say that we're waiting for a key */
-    AnyKeyPrompt ();
-
-    /* Get a character and discard it */
-    cgetc ();
-
-    /* Redraw the old stuff */
-    Redraw (OldActive);
-
-    /* Done, return no char */
-    return 0;
-}
-
-
-
-/*****************************************************************************/
-/*                                Singlestep                                 */
-/*****************************************************************************/
-
-
-
-static unsigned GetArg16 (void)
-/* Read an argument */
-{
-    return *(unsigned*)(brk_pc+1);
-}
-
-
-
-static unsigned GetStack16 (unsigned char Offs)
-/* Fetch a 16 bit value from stack top */
-{
-    return *(unsigned*)(DbgSP+Offs+0x101);
-}
-
-
-
-static void SetRTSBreak (void)
-/* Set a breakpoint at the return target */
-{
-    DbgSetTmpBreak (GetStack16 (0) + 1);
-}
-
-
-
-static void SingleStep (char StepInto)
-{
-    signed char Offs;
-
-    switch (*(unsigned char*) brk_pc) {
-
-        case OPC_JMP:
-            /* Set breakpoint at target */
-            DbgSetTmpBreak (GetArg16 ());
-            return;
-
-        case OPC_JMPIND:
-            /* Indirect jump, ignore CPU error when crossing page */
-            DbgSetTmpBreak (*(unsigned*)GetArg16 ());
-            return;
-
-        case OPC_BPL:
-        case OPC_BMI:
-        case OPC_BVC:
-        case OPC_BVS:
-        case OPC_BCC:
-        case OPC_BCS:
-        case OPC_BNE:
-        case OPC_BEQ:
-            /* Be sure not to set the breakpoint twice if this is a jump to
-            ** the following instruction.
-            */
-            Offs = ((signed char*)brk_pc)[1];
-            if (Offs) {
-                DbgSetTmpBreak (brk_pc + Offs + 2);
-            }
-            break;
-
-        case OPC_RTS:
-            /* Set a breakpoint at the return target */
-            SetRTSBreak ();
-            return;
-
-        case OPC_RTI:
-            /* Set a breakpoint at the return target */
-            DbgSetTmpBreak (GetStack16 (1));
-            return;
-
-        case OPC_JSR:
-            if (StepInto) {
-                /* Set breakpoint at target */
-                DbgSetTmpBreak (GetArg16 ());
-                return;
-            }
-            break;
-    }
-
-    /* Place a breakpoint behind the instruction */
-    DbgSetTmpBreak (brk_pc + DbgDisAsmLen (brk_pc));
-}
-
-
-
-/*****************************************************************************/
-/*                        High level window handling                         */
-/*****************************************************************************/
-
-
-
-static void RedrawStatic (char Frame)
-/* Redraw static display stuff */
-{
-    /* Reset the active frame */
-    ActiveFrame = -1;
-
-    /* Clear the screen hide the cursor */
-    (void) bordercolor (COLOR_BORDER);
-    (void) bgcolor (COLOR_BACKGROUND);
-    clrscr ();
-    cursor (0);
-
-    /* Build the frame layout of the screen */
-    (void) textcolor (COLOR_FRAMELOW);
-    DrawFrames ();
-
-    /* Draw the prompt line */
-    HelpPrompt ();
-
-    /* Activate the active frame */
-    ActivateFrame (Frame, 0);
-}
-
-
-
-static void Redraw (char Frame)
-/* Redraw the display in case it's garbled */
-{
-    /* Redraw the static stuff */
-    RedrawStatic (Frame);
-
-    /* Init the window contents */
-    UpdateAsm ();
-    UpdateReg ();
-    UpdateStack ();
-    UpdateCStack ();
-    UpdateDump ();
-}
-
-
-
-static char GetKeyUpdate (void)
-/* Wait for a key updating the windows in the background */
-{
-    static unsigned char Win;
-
-    /* While there are no keys... */
-    while (!kbhit ()) {
-
-        switch (Win) {
-
-            case 0:
-                UpdateAsm ();
-                break;
-
-            case 1:
-                UpdateStack ();
-                break;
-
-            case 2:
-                UpdateCStack ();
-                break;
-
-            case 3:
-                UpdateDump ();
-                break;
-        }
-
-        Win = (Win + 1) & 0x03;
-
-    }
-
-    /* We have a key - return it */
-    return cgetc ();
-}
-
-
-
-/*****************************************************************************/
-/*                       Externally visible functions                        */
-/*****************************************************************************/
-
-
-
-void DbgEntry (void)
-/* Start up the debugger */
-{
-    static unsigned char FirstTime = 1;
-    char c;
-    char done;
-
-    /* If this is the first call, setup the display */
-    if (FirstTime) {
-        FirstTime = 0;
-
-        /* Draw the window, default active frame is ASM frame */
-        RedrawStatic (WIN_ASM);
-        InitAsm ();
-        InitReg ();
-        InitStack ();
-        InitCStack ();
-        UpdateDump ();
-    }
-
-    /* Only initialize variables here, don't do a display update. The actual
-    ** display update will be done while waiting for user input.
-    */
-    AsmHome ();
-    UpdateReg ();               /* Must update this (static later) */
-    StackHome ();
-    CStackHome ();
-
-    /* Wait for user input */
-    done = 0;
-    while (!done) {
-        c = Frames [ActiveFrame]->fd_func ();
-        switch (c) {
-
-            case '1':
-            case '2':
-            case '3':
-            case '4':
-            case '5':
-                ActivateFrame (c - '1', 0);
-                break;
-
-            case '?':
-#ifdef CH_F1
-            case CH_F1:
-#endif
-                HelpHandler ();
-                break;
-
-            case 'u':
-#ifdef CH_F3
-            case CH_F3:
-#endif
-                /* Go until return */
-                SetRTSBreak ();
-                done = 1;
-                break;
-
-            case 'h':
-#ifdef CH_F4
-            case CH_F4:
-#endif
-                /* Go to cursor, only possible if cursor not at current PC */
-                if (AsmAddr != brk_pc) {
-                    DbgSetTmpBreak (AsmAddr);
-                    done = 1;
-                }
-                break;
-
-            case ' ':
-#ifdef CH_F7
-            case CH_F7:
-#endif
-                SingleStep (1);
-                if (DbgTmpBreaksOk ()) {
-                    /* Could set breakpoints */
-                    done = 1;
-                }
-                break;
-
-            case '\n':
-#ifdef CH_F8
-            case CH_F8:
-#endif
-                SingleStep (0);
-                if (DbgTmpBreaksOk ()) {
-                    /* Could set breakpoints */
-                    done = 1;
-                }
-                break;
-
-            case 'c':
-            case 0:
-                done = 1;
-                break;
-
-            case 's':
-                /* Skip instruction */
-                brk_pc += DbgDisAsmLen (brk_pc);
-                InitAsm ();
-                break;
-
-            case 'r':
-                /* Redraw screen */
-                Redraw (ActiveFrame);
-                break;
-
-            case 'q':
-                /* Quit program */
-                clrscr ();
-                exit (1);
-
-        }
-    }
-}
-
-
-
diff --git a/libsrc/dbg/dbgdasm.s b/libsrc/dbg/dbgdasm.s
deleted file mode 100644 (file)
index 9899c0a..0000000
+++ /dev/null
@@ -1,296 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; unsigned DbgDisAsm (char* buf, unsigned addr);
-; unsigned DbgDisAsm (unsigned addr);
-;
-;
-; Part of this code is taken from the Plus/4 machine language monitor
-; (TEDMon).
-;
-
-        .import         popax
-        .import         __hextab, OffsetTab, AdrFlagTab
-        .import         SymbolTab1, SymbolTab2, MnemoTab1, MnemoTab2
-
-
-
-; -------------------------------------------------------------------------
-; Equates for better readability
-
-        .importzp       sreg, tmp1, tmp2, tmp3, tmp4, ptr1, ptr2, ptr3
-
-BufIndex        = tmp1          ; Index into output buffer
-OperandLen      = tmp2          ; Length of operand
-BufLen          = tmp3          ; Length of output buffer
-AdrFlagBuf      = tmp4          ; Flag for addressing mode
-YSave           = sreg          ; Temp storage
-XSave           = sreg+1        ; Dito
-BufPtr          = ptr1          ; Pointer to output buffer
-MemPtr          = ptr2          ; Pointer to memory to disassemble
-MnemoBuf        = ptr3          ; Buffer for decoding mnemonic
-
-
-; -------------------------------------------------------------------------
-; Main entries
-
-        .export         _DbgDisAsm, _DbgDisAsmLen
-
-.proc   _DbgDisAsm
-        sta     BufLen          ; Save the buffer length
-        jsr     popax           ; Get the buffer pointer
-        sta     BufPtr
-        stx     BufPtr+1
-        jsr     popax           ; Get the address
-        sta     MemPtr
-        stx     MemPtr+1
-        lda     #0
-        sta     BufIndex        ; Initialize index into buffer
-        jsr     DisAssLine      ; Disassemble one line into the buffer
-
-        lda     BufLen          ; Get requested length
-        sec
-        sbc     BufIndex
-        beq     L2
-        tax                     ; Count into X
-        ldy     BufIndex
-        lda     #$20            ; Get a space
-L1:     sta     (BufPtr),y
-        iny
-        dex
-        bne     L1
-L2:     lda     #0              ; Add C string terminator
-        sta     (BufPtr),y
-        beq     disassret
-
-.endproc
-
-
-_DbgDisAsmLen:
-        sta     MemPtr          ; Save address
-        stx     MemPtr+1
-        ldy     #$00
-        lda     (MemPtr),y      ; Get the opcode from memory...
-        jsr     AnalyzeOPCode   ; ...and analyze it
-disassret:
-        ldx     OperandLen      ; Get length of operand
-        inx                     ; Adjust for opcode byte
-        txa
-        ldx     #$00            ; Clear high byte
-        rts     
-
-; -------------------------------------------------------------------------
-; Helper functions
-
-
-Put3Spaces:
-        jsr     PutSpace
-Put2Spaces:
-        jsr     PutSpace
-PutSpace:
-        lda     #$20
-PutChar:
-        sty     YSave           ; Save Y
-        ldy     BufIndex        ; Get current line pointer
-        cpy     BufLen          ; Be sure not to overflow the buffer
-        bcs     PC9
-        sta     (BufPtr),y      ; store character
-        iny                     ; bump index
-        sty     BufIndex
-PC9:    ldy     YSave           ; get old value
-        rts
-
-; Print the 16 bit hex value in X/Y
-
-PutHex16:
-        txa
-        jsr     PutHex8
-        tya
-
-; Print 8 bit value in A, save X and Y
-
-PutHex8:
-        stx     XSave
-        sty     YSave
-        ldy     BufIndex
-        pha
-        lsr     a
-        lsr     a
-        lsr     a
-        lsr     a
-        tax
-        lda     __hextab,x
-        sta     (BufPtr),y
-        iny
-        pla
-        and     #$0F
-        tax
-        lda     __hextab,x
-        sta     (BufPtr),y
-        iny
-        sty     BufIndex
-        ldy     YSave
-        ldx     XSave
-        rts
-
-; -------------------------------------------------------------------------
-; Disassemble one line
-
-DisAssLine:
-        ldy     MemPtr
-        ldx     MemPtr+1
-        jsr     PutHex16                ; Print the address
-        jsr     Put2Spaces              ; Add some space
-        ldy     #$00
-        lda     (MemPtr),y              ; Get the opcode from memory...
-        jsr     AnalyzeOPCode           ; ...and analyze it
-        pha                             ; Save mnemonic
-        ldx     OperandLen              ; Number of bytes
-
-; Print the bytes that make up the instruction
-
-        inx
-L2083:  dex
-        bpl     L208C                   ; Print the instruction bytes
-        jsr     Put3Spaces              ; If none left, print spaces instead
-        jmp     L2094
-L208C:  lda     (MemPtr),y              ; Get a byte from memory
-        jsr     PutHex8                 ; ...and print it
-        jsr     PutSpace                ; Add some space
-
-L2094:  iny                             ; Next one...
-        cpy     #$03                    ; Maximum is three
-        bcc     L2083                   ;
-
-        jsr     Put2Spaces              ; Add some space after bytes
-
-; Print the assembler mnemonic
-
-        pla                             ; Get mnemonic code
-        ldx     #$03
-        jsr     PutMnemo                ; Print the mnemonic
-        ldx     #$06
-
-; Print the operand
-
-L20A4:  cpx     #$03
-        bne     L20BA
-        ldy     OperandLen
-        beq     L20BA
-
-L20AC:  lda     AdrFlagBuf
-        cmp     #$E8                    ; Branch?
-        lda     (MemPtr),y              ; Get branch offset
-        bcs     GetBranchAdr            ; If branch: Calculate address
-        jsr     PutHex8                 ; Otherwise print 8bit value
-        dey
-        bne     L20AC
-
-L20BA:  asl     AdrFlagBuf
-        bcc     L20CC
-        lda     SymbolTab1-1,x
-        jsr     PutChar
-        lda     SymbolTab2-1,x
-        beq     L20CC
-        jsr     PutChar
-
-L20CC:  dex
-        bne     L20A4
-        rts
-
-; If the instruction is a branch, calculate the absolute address of the
-; branch target and print it.
-
-GetBranchAdr:
-        jsr     L20DD
-        clc
-        adc     #$01
-        bne     L20D9
-        inx                             ; Bump high byte
-L20D9:  tay
-        jmp     PutHex16                ; Output address
-
-L20DD:  ldx     MemPtr+1
-        tay
-        bpl     L20E3
-        dex
-L20E3:  adc     MemPtr
-        bcc     L20E8
-        inx                             ; Bump high byte
-L20E8:  rts
-
-; -------------------------------------------------------------------------
-; Subroutine to analyze an opcode byte in A. Will return a byte that
-; encodes the mnemonic, and will set the number of bytes needed for this
-; instruction in OperandLen
-
-AnalyzeOPCode:
-        tay
-        lsr     a
-        bcc     L20F8
-        lsr     a
-        bcs     L2107
-        cmp     #$22
-        beq     L2107
-        and     #$07
-        ora     #$80
-L20F8:  lsr     a
-        tax
-        lda     OffsetTab,x
-        bcs     L2103
-        lsr     a
-        lsr     a
-        lsr     a
-        lsr     a
-L2103:  and     #$0F
-        bne     L210B
-L2107:  ldy     #$80
-        lda     #$00
-L210B:  tax
-        lda     AdrFlagTab,x
-        sta     AdrFlagBuf
-        and     #$03
-        sta     OperandLen
-        tya
-        and     #$8F
-        tax
-        tya
-        ldy     #$03
-        cpx     #$8A
-        beq     L212B
-
-L2120:  lsr     a
-        bcc     L212B
-        lsr     a
-L2124:  lsr     a
-        ora     #$20
-        dey
-        bne     L2124
-        iny
-L212B:  dey
-        bne     L2120
-        rts
-
-; -------------------------------------------------------------------------
-; Print the mnemonic with code in A (that code was returned by
-; AnalyzeOpcode).
-
-PutMnemo:
-        tay
-        lda     MnemoTab1,y
-        sta     MnemoBuf
-        lda     MnemoTab2,y
-        sta     MnemoBuf+1
-L213A:  lda     #$00
-        ldy     #$05            ; 3*5 bits in two bytes
-L213E:  asl     MnemoBuf+1
-        rol     MnemoBuf
-        rol     a
-        dey
-        bne     L213E
-        adc     #$3F
-        jsr     PutChar
-        dex
-        bne     L213A
-        jmp     PutSpace
-
diff --git a/libsrc/dbg/dbgdump.s b/libsrc/dbg/dbgdump.s
deleted file mode 100644 (file)
index 8ab646d..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-;
-; Ullrich von Bassewitz, 11.08.1998
-;
-; char* __cdecl__ DbgMemDump (unsigend Addr, char* Buf, unsigned char Length);
-;
-
-        .export         _DbgMemDump
-        .import         addysp1
-        .import         __hextab
-        .importzp       sp, tmp2, tmp3, tmp4, ptr3, ptr4
-
-_DbgMemDump:
-        ldy     #0
-        lda     (sp),y          ; Get length
-        sta     tmp4
-        iny
-        lda     (sp),y          ; Get the string buffer
-        sta     ptr3
-        iny
-        lda     (sp),y
-        sta     ptr3+1
-        iny
-        lda     (sp),y          ; Get the address
-        sta     ptr4
-        iny
-        lda     (sp),y
-        sta     ptr4+1
-        jsr     addysp1         ; Drop the parameters
-
-        lda     #0
-        sta     tmp2            ; String index
-        sta     tmp3            ; Byte index
-
-; Print the address
-
-        lda     ptr4+1          ; Hi address byte
-        jsr     dump            ; Print address
-        lda     ptr4            ; Lo address byte
-        jsr     dump
-        jsr     putspace        ; Add a space
-
-dump1:  dec     tmp4            ; Bytes left?
-        bmi     dump9           ; Jump if no
-        jsr     putspace        ; Add a space
-        ldy     tmp3
-        inc     tmp3
-        lda     (ptr4),y
-        jsr     dump
-        jmp     dump1
-
-dump9:  lda     #0
-        ldy     tmp2
-        sta     (ptr3),y        ; Add string terminator
-        lda     ptr3
-        ldx     ptr3+1          ; We assume this is not zero
-        rts
-
-; Dump one hex byte
-
-dump:   pha
-        lsr     a
-        lsr     a
-        lsr     a
-        lsr     a
-        tax
-        lda     __hextab,x
-        jsr     putc
-        pla
-        and     #$0F
-        tax
-        lda     __hextab,x
-putc:   ldy     tmp2
-        inc     tmp2
-        sta     (ptr3),y
-        rts
-
-putspace:
-        lda     #$20
-        bne     putc
-
-
diff --git a/libsrc/dbg/dbgisram.s b/libsrc/dbg/dbgisram.s
deleted file mode 100644 (file)
index 87cfa0f..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-;
-; Ullrich von Bassewitz, 10.08.1998
-;
-; int DbgIsRAM (unsigned Addr);
-;
-
-        .export         _DbgIsRAM
-        .import         popax, return0, return1
-        .importzp       ptr1
-
-_DbgIsRAM:
-        sta     ptr1            ; Store the address
-        stx     ptr1+1
-
-        ldy     #0
-        php                     ; Save I flag
-        sei                     ; Disable interrupts
-
-        lda     (ptr1),y        ; Get old value
-        pha                     ; ...and save it
-
-        ldx     #3
-L1:     lda     TestVal,x
-        jsr     CheckCell
-        bne     L2
-        dex
-        bpl     L1
-
-; This seems to be RAM
-
-        pla
-        sta     (ptr1),y        ; Restore old value
-        plp                     ; Restore old I flag
-        jmp     return1
-
-; No RAM at this address
-
-L2:     pla
-        sta     (ptr1),y        ; Restore old value
-        plp                     ; Restore old I flag
-        jmp     return0
-
-; Check one memory cell
-
-CheckCell:
-        sta     (ptr1),y
-        cmp     (ptr1),y        ; Could we write it?
-        rts
-
-
-.rodata
-TestVal:
-        .byte   $55, $AA, $33, $CC
-
-
diff --git a/libsrc/dbg/dbgsupp.s b/libsrc/dbg/dbgsupp.s
deleted file mode 100644 (file)
index 9f044c7..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.08.1998
-;
-; Support routines for the debugger
-;
-
-        .export         _DbgInit
-        .export         _DbgSP, _DbgCS, _DbgHI
-        .import         popax, return0, _DbgEntry, _set_brk, _end_brk
-        .import         _DbgBreaks
-        .import         _brk_pc
-        .import         __ZP_START__            ; Linker generated
-
-        .include        "zeropage.inc"
-
-
-; C callable function, will install the debugger
-
-_DbgInit:
-        lda     #<DbgBreak
-        ldx     #>DbgBreak
-        jmp     _set_brk
-
-
-; Entry for the break vector.
-
-DbgBreak:
-        pla
-        sta     retsav
-        pla
-        sta     retsav+1
-
-        cli
-        tsx                     ; Stack pointer
-        stx     _DbgSP
-
-        jsr     DbgSwapZP       ; Swap stuff
-        lda     #<DbgStack      ; Set new stack
-        sta     sp
-        lda     #>DbgStack
-        sta     sp+1
-        jsr     ResetDbgBreaks  ; Reset temporary breakpoints
-        jsr     _DbgEntry       ; Call C code
-        jsr     SetDbgBreaks    ; Set temporary breakpoints
-        jsr     DbgSwapZP       ; Swap stuff back
-
-        lda     retsav+1
-        pha
-        lda     retsav
-        pha
-        rts
-
-
-
-; Stack used when in debugger mode
-
-.bss
-        .res    256
-DbgStack:
-
-; Swap space for the the C temporaries
-
-CTemp:
-_DbgCS: .res    2               ; sp
-_DbgHI: .res    2               ; sreg
-        .res    (zpsavespace-4) ; Other stuff
-
-_DbgSP: .res    1
-retsav: .res    2               ; Save buffer for return address
-
-.code
-
-; Swap the C temporaries
-
-DbgSwapZP:
-        ldy     #zpsavespace-1
-Swap1:  ldx     CTemp,y
-        lda     <__ZP_START__,y
-        sta     CTemp,y
-        txa
-        sta     sp,y
-        dey
-        bpl     Swap1
-        rts
-
-; ----------------------------------------------------------------------------
-; Utility functions
-
-
-; Set/reset the breakpoints. We must do that here since the breakpoints
-; may be in the runtime stuff, causing the C part to fail before it has
-; reset the breakpoints. See declaration of struct breakpoint in the C
-; source
-
-MaxBreaks       = 48            ; 4*12
-
-ResetDbgBreaks:
-        ldy     #0
-        ldx     #0
-L4:     lda     _DbgBreaks+3,x  ; Get bk_use
-        beq     L6              ; Jump if not set
-        bpl     L5              ; Jump if user breakpoint
-        lda     #0
-        sta     _DbgBreaks+3,x  ; Clear if temp breakpoint
-L5:     lda     _DbgBreaks+1,x  ; PC hi
-        sta     ptr1+1
-        lda     _DbgBreaks,x    ; PC lo
-        sta     ptr1
-        lda     _DbgBreaks+2,x  ; Old OPC
-        sta     (ptr1),y        ; Reset the breakpoint
-L6:     inx
-        inx
-        inx
-        inx
-        cpx     #MaxBreaks      ; Done?
-        bne     L4
-        rts
-
-SetDbgBreaks:
-        ldx     #0
-        ldy     #0
-L7:     lda     _DbgBreaks+3,x  ; Get bk_use
-        beq     L8              ; Jump if not set
-        lda     _DbgBreaks+1,x  ; PC hi
-        sta     ptr1+1
-        lda     _DbgBreaks,x    ; PC lo
-        sta     ptr1
-        lda     (ptr1),y        ; Get the breakpoint OPC...
-        sta     _DbgBreaks+2,x  ; ...and save it
-        lda     #$00            ; Load BRK opcode
-        sta     (ptr1),y
-L8:     inx
-        inx
-        inx
-        inx
-        cpx     #MaxBreaks      ; Done?
-        bne     L7
-        rts
-
-; Get a free breakpoint slot or return 0
-
-        .export         _DbgGetBreakSlot
-
-_DbgGetBreakSlot:
-        ldx     #0
-L10:    lda     _DbgBreaks+3,x  ; Get bk_use
-        beq     L11             ; Jump if not set
-        inx
-        inx
-        inx
-        inx
-        cpx     #MaxBreaks      ; Done?
-        bne     L10
-        jmp     return0         ; No free slot
-
-L11:    stx     tmp1
-        lda     #<_DbgBreaks
-        ldx     #>_DbgBreaks
-        clc
-        adc     tmp1
-        bcc     L12
-        inx
-L12:    ldy     #1              ; Force != 0
-        rts
-
-
-; Check if a given address has a user breakpoint set, if found, return the
-; slot, otherwise return 0.
-
-        .export         _DbgIsBreak
-
-_DbgIsBreak:
-        jsr     popax           ; Get address
-        sta     ptr1
-        stx     ptr1+1
-        ldx     #0
-L20:    lda     _DbgBreaks+3,x  ; Get bk_use
-        beq     L21             ; Jump if not set
-        bmi     L21             ; Jump if temp breakpoint
-        lda     _DbgBreaks,x    ; Low byte of address
-        cmp     ptr1
-        bne     L21
-        lda     _DbgBreaks+1,x  ; High byte of address
-        cmp     ptr1+1
-        beq     L22
-L21:    inx
-        inx
-        inx
-        inx
-        cpx     #MaxBreaks      ; Done?
-        bne     L20
-        jmp     return0         ; Not found
-
-L22:    stx     tmp1
-        lda     #<_DbgBreaks
-        ldx     #>_DbgBreaks
-        clc
-        adc     tmp1
-        bcc     L23
-        inx
-L23:    ldy     #1              ; Force != 0
-        rts
-
-
-
diff --git a/libsrc/em/em-kernel.s b/libsrc/em/em-kernel.s
deleted file mode 100644 (file)
index c982dac..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-11-29
-;
-; Common functions of the extended memory API.
-;
-
-        .import         return0, em_libref
-        .importzp       ptr1
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-
-
-;----------------------------------------------------------------------------
-; Variables
-
-
-.bss
-_em_drv:        .res    2               ; Pointer to driver
-
-; Jump table for the driver functions.
-.data
-emd_vectors:
-emd_install:    jmp     return0
-emd_uninstall:  jmp     return0
-emd_pagecount:  jmp     return0
-emd_map:        jmp     return0
-emd_use:        jmp     return0
-emd_commit:     jmp     return0
-emd_copyfrom:   jmp     return0
-emd_copyto:     jmp     return0
-
-; Driver header signature
-.rodata
-emd_sig:        .byte   $65, $6d, $64, EMD_API_VERSION  ; "emd", version
-
-
-;----------------------------------------------------------------------------
-; unsigned char __fastcall__ em_install (void* driver);
-; /* Install the driver once it is loaded */
-
-
-_em_install:
-        sta     _em_drv
-        sta     ptr1
-        stx     _em_drv+1
-        stx     ptr1+1
-
-; Check the driver signature
-
-        ldy     #.sizeof(emd_sig)-1
-@L0:    lda     (ptr1),y
-        cmp     emd_sig,y
-        bne     inv_drv
-        dey
-        bpl     @L0
-
-; Set the library reference
-
-        ldy     #EMD_HDR::LIBREF
-        lda     #<em_libref
-        sta     (ptr1),y
-        iny
-        lda     #>em_libref
-        sta     (ptr1),y
-
-; Copy the jump vectors
-
-        ldy     #EMD_HDR::JUMPTAB
-        ldx     #0
-@L1:    inx                             ; Skip the JMP opcode
-        jsr     copy                    ; Copy one byte
-        jsr     copy                    ; Copy one byte
-        cpy     #(EMD_HDR::JUMPTAB + .sizeof(EMD_HDR::JUMPTAB))
-        bne     @L1
-
-        jmp     emd_install             ; Call driver install routine
-
-; Driver signature invalid
-
-inv_drv:
-        lda     #EM_ERR_INV_DRIVER
-        ldx     #0
-        rts
-
-; Copy one byte from the jump vectors
-
-copy:   lda     (ptr1),y
-        sta     emd_vectors,x
-        iny
-        inx
-        rts
-
-;----------------------------------------------------------------------------
-; unsigned char em_uninstall (void);
-; /* Uninstall the currently loaded driver and return an error code.
-; ** Note: This call does not free allocated memory.
-; */
-
-_em_uninstall:
-        jsr     emd_uninstall           ; Call driver routine
-
-em_clear_ptr:                           ; External entry point
-        lda     #0
-        sta     _em_drv
-        sta     _em_drv+1               ; Clear the driver pointer
-
-        tax
-        rts                             ; Return zero
diff --git a/libsrc/em/em_commit.s b/libsrc/em/em_commit.s
deleted file mode 100644 (file)
index 8be970b..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-12-01
-;
-; void em_commit (void);
-; /* Commit changes in the memory window to extended storage. If the contents
-; ** of the memory window have been changed, these changes may be lost if
-; ** em_map, em_copyfrom or em_copyto are called without calling em_commit
-; ** first. Note: Not calling em_commit does not mean that the changes are
-; ** discarded, it does just mean that some drivers will discard the changes.
-; */
-
-        .include        "em-kernel.inc"
-
-        _em_commit      = emd_commit            ; Use driver entry
diff --git a/libsrc/em/em_copyfrom.s b/libsrc/em/em_copyfrom.s
deleted file mode 100644 (file)
index edcff79..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-11-29
-;
-; void __fastcall__ em_copyfrom (const struct em_copy* copy_data);
-; /* Copy from extended into linear memory */
-
-
-        .include        "em-kernel.inc"
-
-        _em_copyfrom    = emd_copyfrom          ; Use driver entry
-
diff --git a/libsrc/em/em_copyto.s b/libsrc/em/em_copyto.s
deleted file mode 100644 (file)
index aa89b0e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-11-29
-;
-; void __fastcall__ em_copyto (const struct em_copy* copy_data);
-; /* Copy from linear into extended memory */
-
-
-        .include        "em-kernel.inc"
-
-        _em_copyto      = emd_copyto            ; Use driver entry
-
diff --git a/libsrc/em/em_load.s b/libsrc/em/em_load.s
deleted file mode 100644 (file)
index 1e4a364..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-;
-; Ullrich von Bassewitz, 2012-07-22
-;
-; unsigned char __fastcall__ em_load_driver (const char* name)
-; /* Load an extended memory driver and return an error code */
-
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-        .include        "modload.inc"
-        .include        "fcntl.inc"
-
-        .import         pushax
-        .import         pusha0
-        .import         incsp2
-        .import         _open
-        .import         _read
-        .import         _close
-
-
-
-;----------------------------------------------------------------------------
-; Variables
-
-.data
-
-ctrl:   .addr   _read
-        .res    2                       ; CALLERDATA
-        .res    2                       ; MODULE
-        .res    2                       ; MODULE_SIZE
-        .res    2                       ; MODULE_ID
-                   
-;----------------------------------------------------------------------------
-; Code
-
-.code
-
-.proc   _em_load_driver
-
-; Check if we do already have a driver loaded. This is an error. Do not
-; touch A/X because they contain the file name.
-
-        ldy     _em_drv
-        bne     @L0
-        ldy     _em_drv+1
-        beq     @L1
-@L0:    lda     #EM_ERR_INSTALLED
-        bne     @L4
-
-; Push the name onto the C stack and open the file. The parameter will get
-; removed by open().
-; ctrl.callerdata = open (name, O_RDONLY);
-
-@L1:    jsr     pushax
-        lda     #<O_RDONLY
-        jsr     pusha0
-        ldy     #4                      ; Argument size
-        jsr     _open
-        sta     ctrl + MOD_CTRL::CALLERDATA
-        stx     ctrl + MOD_CTRL::CALLERDATA+1
-
-; if (ctrl.callerdata >= 0) {
-
-        txa
-        bmi     @L3
-
-; /* Load the module */
-; Res = mod_load (&ctrl);
-
-        lda     #<ctrl
-        ldx     #>ctrl
-        jsr     _mod_load
-        pha
-
-; /* Close the input file */
-; close (ctrl.callerdata);
-
-        lda     ctrl + MOD_CTRL::CALLERDATA
-        ldx     ctrl + MOD_CTRL::CALLERDATA+1
-        jsr     _close
-
-; /* Check the return code */
-; if (Res == MLOAD_OK) {
-
-        pla
-        bne     @L3
-
-; Check the driver signature, install the driver.
-; Res = em_install (ctrl.module);
-
-        lda     ctrl + MOD_CTRL::MODULE
-        ldx     ctrl + MOD_CTRL::MODULE+1
-        jsr     _em_install
-
-; If em_install was successful, we're done
-
-        tax
-        beq     @L2
-
-; The driver didn't install correctly. Remove it from memory and return the
-; error code.
-
-        pha                             ; Save the error code
-        lda     _em_drv
-        ldx     _em_drv+1
-        jsr     _mod_free               ; Free the driver memory
-        jsr     em_clear_ptr            ; Clear em_drv
-        pla                             ; Restore the error code
-        ldx     #0                      ; We must return an int
-@L2:    rts                             ; Done
-
-; Open or mod_load failed. Return an error code.
-
-@L3:    lda     #<EM_ERR_CANNOT_LOAD
-@L4:    ldx     #0
-        rts
-
-.endproc
-
-
diff --git a/libsrc/em/em_map.s b/libsrc/em/em_map.s
deleted file mode 100644 (file)
index 825d68e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-11-29
-;
-; void* __fastcall__ em_map (unsigned page);
-; /* Unmap the current page from memory and map a new one. The function returns
-; ** a pointer to the location of the page in memory.
-; */
-
-
-        .include        "em-kernel.inc"
-
-        _em_map         = emd_map               ; Use driver entry
-
diff --git a/libsrc/em/em_pagecount.s b/libsrc/em/em_pagecount.s
deleted file mode 100644 (file)
index 01b82d5..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-11-29
-;
-; unsigned em_pagecount (void);
-; /* Return the total number of 256 byte pages available in extended memory. */
-
-
-        .include        "em-kernel.inc"
-
-        _em_pagecount   = emd_pagecount                 ; Use driver entry
-
diff --git a/libsrc/em/em_unload.s b/libsrc/em/em_unload.s
deleted file mode 100644 (file)
index 99a1784..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-11-29
-;
-; unsigned char em_unload (void);
-; /* Unload the currently loaded driver. */
-
-
-        .import         em_clear_ptr
-
-        .include        "em-kernel.inc"
-        .include        "em-error.inc"
-        .include        "modload.inc"
-
-_em_unload:
-        lda     _em_drv
-        ora     _em_drv+1
-        beq     no_driver               ; No driver
-
-        jsr     emd_uninstall           ; Deinstall the driver
-
-        lda     _em_drv
-        ldx     _em_drv+1
-        jsr     _mod_free               ; Free the driver
-
-        jmp     em_clear_ptr            ; Clear the driver pointer, return zero
-
-no_driver:
-        tax                             ; X = 0
-        lda     #EM_ERR_NO_DRIVER
-        rts
diff --git a/libsrc/em/em_use.s b/libsrc/em/em_use.s
deleted file mode 100644 (file)
index e4fb772..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-11-29
-;
-; void* __fastcall__ em_use (unsigned page);
-; /* Tell the driver that the memory window is associated with a given page.
-; ** This call is very similar to em_map. The difference is that the driver
-; ** does not necessarily transfer the current contents of the extended
-; ** memory into the returned window. If you're going to just write to the
-; ** window and the current contents of the window are invalid or no longer
-; ** use, this call may perform better than em_map.
-; */
-
-
-        .include        "em-kernel.inc"
-
-        _em_use         = emd_use               ; Use driver entry
-
diff --git a/libsrc/geos-apple/Makefile.inc b/libsrc/geos-apple/Makefile.inc
deleted file mode 100644 (file)
index 366d358..0000000
+++ /dev/null
@@ -1 +0,0 @@
-CA65FLAGS += -I geos-apple -I geos-common
diff --git a/libsrc/geos-apple/disk/enterturbo.s b/libsrc/geos-apple/disk/enterturbo.s
deleted file mode 100644 (file)
index 066546c..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-;
-; Oliver Schmidt (ol.sc@web.de)
-;
-; 2012-02-09
-
-; void EnterTurbo (void);
-
-            .export _EnterTurbo
-            .import return0
-
-_EnterTurbo     = return0
diff --git a/libsrc/geos-apple/disk/exitturbo.s b/libsrc/geos-apple/disk/exitturbo.s
deleted file mode 100644 (file)
index 7098a56..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Oliver Schmidt (ol.sc@web.de)
-;
-; 2012-02-09
-
-; void ExitTurbo (void);
-
-            .export _ExitTurbo
-            .import return0
-
-_ExitTurbo      = return0
-        
-        
diff --git a/libsrc/geos-apple/disk/purgeturbo.s b/libsrc/geos-apple/disk/purgeturbo.s
deleted file mode 100644 (file)
index 631e7f1..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-;
-; Oliver Schmidt (ol.sc@web.de)
-;
-; 2012-02-09
-
-; void PurgeTurbo (void);
-
-            .export _PurgeTurbo
-            .import return0
-
-_PurgeTurbo     = return0
diff --git a/libsrc/geos-apple/diskdrv.inc b/libsrc/geos-apple/diskdrv.inc
deleted file mode 100644 (file)
index 632717b..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-;
-;GEOS Disk Driver JumpTab
-;Source: The Hitchhiker's Guide To GEOS
-;http://lyonlabs.org/commodore/onrequest/geos-manuals/The_Hitchhikers_Guide_to_GEOS.pdf
-
-GetBlock                =       $0300
-PutBlock                =       $0303
-GetFile                 =       $030f
-LdFile                  =       $0312
-ReadFile                =       $0315
-SaveFile                =       $0318
-WriteFile               =       $031b
-GetVBM                  =       $031e
-PutVBM                  =       $0321
-CalcBlksFree            =       $0324
-FreeBlock               =       $032a
-SetNextFree             =       $032d
-AppendRecord            =       $0330
-CloseRecordFile         =       $0333
-DeleteRecord            =       $0336
-NextRecord              =       $0336
-InsertRecord            =       $0339
-OpenRecordFile          =       $033f
-PointRecord             =       $0342
-PreviousRecord          =       $0345
-ReadRecord              =       $0348
-UpdateRecordFile        =       $034b
-WriteRecord             =       $034e
-BlkAlloc                =       $0351
-NxtBlkAlloc             =       $0354
-DeleteFile              =       $0357
-FreeFile                =       $035a
-LdDeskAcc               =       $035d
-RstrAppl                =       $0360
-FdFTypesInDir           =       $0363
-FindFTypes              =       $0366
-FindFile                =       $0369
-FndFilinDir             =       $036c
-BldGDirEntry            =       $036f
-GetDirHead              =       $0372
-GetFreeDirBlk           =       $0375
-PutDirHead              =       $037b
-SetGDirEntry            =       $037b
-DeleteDir               =       $037e
-DownDirectory           =       $0381
-GetPathname             =       $0384
-MakeSubDir              =       $0387
-UpDirectory             =       $038a
-LdApplic                =       $038d
-GetFHdrInfo             =       $0390
-RenameFile              =       $0393
-OpenDisk                =       $0399
-Get1stDirEntry          =       $039c
-GetNxtDirEntry          =       $039c
-GoDirectory             =       $039f
-ReOpenDisk              =       $03a2
-SortAlpha               =       $03a5
-SaveFG                  =       $03ab
-RecoverFG               =       $03ae
-JsrToAux                =       $03b4
-UpdateParent            =       $03b7
-FreeDir                 =       $03ba
diff --git a/libsrc/geos-apple/geossym.inc b/libsrc/geos-apple/geossym.inc
deleted file mode 100644 (file)
index 7ca0a5f..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-;
-;GEOS variable memory locations sorted by address
-;Source: The Hitchhiker's Guide To GEOS
-;http://lyonlabs.org/commodore/onrequest/geos-manuals/The_Hitchhikers_Guide_to_GEOS.pdf
-
-r0                      =       $00
-r0L                     =       $00
-r0H                     =       $01
-r1                      =       $02
-r1L                     =       $02
-r1H                     =       $03
-r2                      =       $04
-r2L                     =       $04
-r2H                     =       $05
-r3                      =       $06
-r3L                     =       $06
-r3H                     =       $07
-r4                      =       $08
-r4L                     =       $08
-r4H                     =       $09
-r5                      =       $0a
-r5L                     =       $0a
-r5H                     =       $0b
-r6                      =       $0c
-r6L                     =       $0c
-r6H                     =       $0d
-r7                      =       $0e
-r7L                     =       $0e
-r7H                     =       $0f
-r8                      =       $10
-r8L                     =       $10
-r8H                     =       $11
-r9                      =       $12
-r9L                     =       $12
-r9H                     =       $13
-r10                     =       $14
-r10L                    =       $14
-r10H                    =       $15
-r11                     =       $16
-r11L                    =       $16
-r11H                    =       $17
-r12                     =       $18
-r12L                    =       $18
-r12H                    =       $19
-r13                     =       $1a
-r13L                    =       $1a
-r13H                    =       $1b
-r14                     =       $1c
-r14L                    =       $1c
-r14H                    =       $1d
-r15                     =       $1e
-r15L                    =       $1e
-r15H                    =       $1f
-
-string                  =       $53
-mouseTop                =       $57
-mouseBottom             =       $58
-mouseLeft               =       $59
-mouseRight              =       $5b
-mouseOn                 =       $5d
-curIndexTable           =       $5e
-cardDataPntr            =       $60
-returnAddress           =       $64
-shiftBuf                =       $70
-shiftOutBuf             =       $78
-appMain                 =       $0200
-intTopVector            =       $0202
-intBotVector            =       $0204
-mouseVector             =       $0206
-keyVector               =       $0208
-inputVector             =       $020a
-mouseFaultVec           =       $020c
-otherPressVec           =       $020e
-StringFaultVec          =       $0210
-alarmTmtVector          =       $0212
-BRKVector               =       $0214
-RecoverVector           =       $0216
-baselineOffset          =       $0218
-curSetWidth             =       $0219
-curHeight               =       $021b
-currentMode             =       $021c
-dispBufferOn            =       $021d
-windowTop               =       $021e
-leftMargin              =       $0220
-rightMargin             =       $0222
-selectionFlash          =       $0224
-alphaFlag               =       $0225
-iconSelFlag             =       $0226
-faultData               =       $0227
-MenuNumber              =       $0228
-mouseXOffset            =       $0229
-mouseYOffset            =       $022b
-curPattern              =       $022c
-stringX                 =       $022e
-stringY                 =       $0230
-noEraseSprites          =       $0240
-mouseXPos               =       $0241
-mouseYPos               =       $0243
-keyData                 =       $0245
-inputData               =       $0247
-random                  =       $024c
-saveFontTab             =       $024e
-dblClickCount           =       $0258
-sysDBData               =       $0259
-offFlag                 =       $027c
-maxMouseSpeed           =       $027d
-minMouseSpeed           =       $027e
-mouseAccel              =       $027f
-firstBoot               =       $0281
-dataFileName            =       $02a4
-dataDiskName            =       $02b4
-MachineType             =       $02c4
-intSource               =       $02c6
-reqXpos0                =       $0800
-reqXpos1                =       $0802
-reqXpos2                =       $0804
-reqXpos3                =       $0806
-reqXpos4                =       $0808
-reqXpos5                =       $080a
-reqXpos6                =       $080c
-reqXpos7                =       $080e
-mobenble                =       $0818
-mobx2                   =       $0819
-moby2                   =       $081a
-PrntFileName            =       $08ac
-inputDevName            =       $08cc
-pressFlag               =       $08fe
-curEnable               =       $0951
-sspr1back               =       $56d0
-sspr2back               =       $5820
-sspr3back               =       $5970
-sspr4back               =       $5ac0
-sspr5back               =       $5c10
-sspr6back               =       $5d60
-sspr7back               =       $5eb0
-backBufPtr              =       $9d7c
-softOnes                =       $d000
-softZeros               =       $d0e0
-curnoby2                =       $d952
-curmobx2                =       $d953
-curXpos0                =       $d954
-curYpos0                =       $d964
-backXBufNum             =       $d98c
-backYBufNum             =       $d994
-sizeFlags               =       $db1c
-doRestFlag              =       $db1d
-bootName                =       $e003
-version                 =       $e00c
-nationality             =       $e00d
-mouseSave               =       $ee53
-year                    =       $f200
-month                   =       $f201
-day                     =       $f202
-hour                    =       $f203
-minutes                 =       $f204
-seconds                 =       $f205
-dlgBoxRamBuf            =       $f381
-totNumBlks              =       $f60b
-curDrive                =       $f60d
-numDrives               =       $f60e
-diskOpenFlg             =       $f617
-curRecord               =       $f618
-usedRecords             =       $f619
-fileWritten             =       $f61a
-fileSize                =       $f61b
-dirBlkno                =       $f620
-dirPtr                  =       $f622
-indexBlkno              =       $f624
-diskBlkBuf              =       $f659
-fileHeader              =       $f859
-dirEntryBuf             =       $fa59
-curDirHead              =       $fa80
-DrACurDkNm              =       $faa7
-DrBCurDkNm              =       $fab7
-DrCCurDkNm              =       $fac7
-DrDCurDkNm              =       $fad7
-devTabHi                =       $fae7
-devTabLo                =       $faeb
-devUnitTab              =       $faef
-driveType               =       $faf3
-drSizeLo                =       $faf7
-drSizeHi                =       $fafb
diff --git a/libsrc/geos-apple/jumptab.inc b/libsrc/geos-apple/jumptab.inc
deleted file mode 100644 (file)
index 2590433..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-;
-;Apple GEOS System Jump Table
-;Source: The Hitchhiker's Guide To GEOS
-;http://lyonlabs.org/commodore/onrequest/geos-manuals/The_Hitchhikers_Guide_to_GEOS.pdf
-
-ReadClock               =       $0800
-ClockInt                =       $0803
-SetTimeDate             =       $0806
-SetAlarm                =       $0809
-ResetAlarm              =       $080c
-InitForPrint            =       $6000
-StartPrint              =       $6003
-StartASCII              =       $6006
-PrintBuffer             =       $6009
-PrintASCII              =       $600c
-StopPrint               =       $600f
-GetMode                 =       $6012
-SetMode                 =       $6015
-CancelPrint             =       $6018
-InitCard                =       $6700
-OpenCard                =       $6703
-OutputByte              =       $6706
-InputByte               =       $6709
-CloseCard               =       $670c
-InfoCard                =       $670f
-StatusCard              =       $6712
-ClearCard               =       $6715
-AuxDMain                =       $efa0
-AuxDInt                 =       $efa3
-AuxDKeyFilter           =       $efa6
-AuxDExit                =       $efa9
-InitMouse               =       $f000
-SlowMouse               =       $f003
-UpdateMouse             =       $f006
-KeyFilter               =       $f009
-MainLoop                =       $fe00
-InterruptMain           =       $fe03
-StartAppl               =       $fe06
-DoInlineReturn          =       $fe09
-DoIcons                 =       $fe0c
-DoMenu                  =       $fe0f
-ReDoMenu                =       $fe12
-DoPreviousMenu          =       $fe15
-GotoFirstMenu           =       $fe18
-RecoverMenu             =       $fe1b
-RecoverAllMenus         =       $fe1e
-DrawPoint               =       $fe21
-TestPoint               =       $fe24
-HorizontalLine          =       $fe27
-VerticalLine            =       $fe2a
-InvertLine              =       $fe2d
-RecoverLine             =       $fe30
-DrawLine                =       $fe33
-SetPattern              =       $fe36
-Rectangle               =       $fe39
-i_Rectangle             =       $fe3c
-FrameRectangle          =       $fe3f
-i_FrameRectangle        =       $fe42
-InvertRectangle         =       $fe45
-RecoverRectangle        =       $fe48
-i_RecoverRectangle      =       $fe4b
-ImprintRectangle        =       $fe4e
-i_ImprintRectangle      =       $fe51
-BitmapUp                =       $fe54
-i_BitmapUp              =       $fe57
-BitmapClip              =       $fe5a
-BitOtherClip            =       $fe5d
-GraphicsString          =       $fe60
-i_GraphicsString        =       $fe63
-GetScanLine             =       $fe66
-PutString               =       $fe69
-i_PutString             =       $fe6c
-PutDecimal              =       $fe6f
-GetString               =       $fe72
-GetNextChar             =       $fe75
-InitTextPrompt          =       $fe78
-PromptOn                =       $fe7b
-PromptOff               =       $fe7e
-PutChar                 =       $fe81
-GetRealSize             =       $fe84
-GetCharWidth            =       $fe87
-LoadCharSet             =       $fe8a
-UseSystemFont           =       $fe8d
-SmallPutChar            =       $fe90
-StartMouseMode          =       $fe93
-MouseOff                =       $fe96
-MouseUp                 =       $fe99
-IsMseInRegion           =       $fe9c
-ClearMouseMode          =       $fe9f
-DrawSprite              =       $fea2
-PosSprite               =       $fea5
-EnablSprite             =       $fea8
-DisablSprite            =       $feab
-InitProcesses           =       $feae
-RestartProcess          =       $feb1
-BlockProcess            =       $feb4
-UnblockProcess          =       $feb7
-FreezeProcess           =       $feba
-UnfreezeProcess         =       $febd
-Sleep                   =       $fec0
-EnableProcess           =       $fec3
-DShiftLeft              =       $fec6
-DShiftRight             =       $fec9
-BBMult                  =       $fecc
-BMult                   =       $fecf
-DMult                   =       $fed2
-Ddiv                    =       $fed5
-DSdiv                   =       $fed8
-Dabs                    =       $fedb
-Dnegate                 =       $fede
-Ddec                    =       $fee1
-GetRandom               =       $fee4
-CopyString              =       $fee7
-CopyFString             =       $feea
-CmpString               =       $feed
-CmpFString              =       $fef0
-Panic                   =       $fef3
-MoveData                =       $fef6
-i_MoveData              =       $fef9
-ClearRam                =       $fefc
-FillRam                 =       $feff
-i_FillRam               =       $ff02
-InitRam                 =       $ff05
-CallRoutine             =       $ff08
-NewBitOtherClip         =       $ff0e
-FirstInit               =       $ff11
-CRC                     =       $ff14
-DoDlgBox                =       $ff17
-RstrFrmDialogue         =       $ff1a
-NewBitUp                =       $ff1d
-IrqMiddle               =       $ff20
-TempHideMouse           =       $ff29
-SoftSprHandler          =       $ff2c
-SetMsePic               =       $ff2f
-InitSprite              =       $ff32
-SaveFontData            =       $ff35
-RestoreFontData         =       $ff38
-EraseCharacter          =       $ff3e
-ReadByte                =       $ff41
-GetLdVars               =       $ff44
-SetLdVars               =       $ff47
-InitForDialog           =       $ff4a
-WarmStart               =       $ff4d
-RecoverSysRam           =       $ff53
-GetPtrCurDkNm           =       $ff56
-EnterDeskTop            =       $ff59
-CopyScreenBlock         =       $ff5c
-CopyLine                =       $ff5f
-GetScreenLine           =       $ff62
-PutScreenLine           =       $ff65
-DivideBySeven           =       $ff68
-MoveAuxData             =       $ff6b
-GetSpriteData           =       $ff6e
-SwapMainAndAux          =       $ff71
-ReadBackLine            =       $ff74
-LoadAuxSet              =       $ff77
-HideOnlyMouse           =       $ff7a
-GetPattern              =       $ff7d
-SetUserPattern          =       $ff80
-Bell                    =       $ff86
-ImprintLine             =       $ff8f
-CopyFullScreen          =       $ff92
-NewBitClip              =       $ff95
-ReadScanLine            =       $ff98
-i_NewBitUp              =       $ff9e
diff --git a/libsrc/geos-apple/targetutil/Makefile.inc b/libsrc/geos-apple/targetutil/Makefile.inc
deleted file mode 100644 (file)
index fbe3198..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-DEPS += ../libwrk/$(TARGET)/convert.d
-
-../libwrk/$(TARGET)/convert.o: TARGET = apple2enh
-
-../libwrk/$(TARGET)/convert.o: $(SRCDIR)/targetutil/convert.c | ../libwrk/$(TARGET)
-       $(COMPILE_recipe)
-
-../lib/apple2enh.lib:
-       @$(MAKE) --no-print-directory apple2enh
-
-../targetutil/convert.system: ../libwrk/$(TARGET)/convert.o ../lib/apple2enh.lib | ../targetutil
-       $(LD65) -o $@ -C apple2enh-system.cfg $^
-
-$(TARGET): ../targetutil/convert.system
diff --git a/libsrc/geos-apple/targetutil/convert.c b/libsrc/geos-apple/targetutil/convert.c
deleted file mode 100644 (file)
index ea9273f..0000000
+++ /dev/null
@@ -1,346 +0,0 @@
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <dirent.h>
-#include <device.h>
-#include <dio.h>
-
-unsigned char info_signature[3] = {3, 21, 63 | 0x80};
-
-dhandle_t dhandle;
-
-struct dir_entry_t {
-    struct {
-        unsigned name_length  :4;
-        unsigned storage_type :4;
-    }             storage_length;
-    char          file_name[15];
-    unsigned char file_type;
-    unsigned      key_pointer;
-    unsigned      blocks_used;
-    unsigned char size[3];
-    unsigned long creation;
-    unsigned char version;
-    unsigned char min_version;
-    unsigned char access;
-    unsigned      aux_type;
-    unsigned long last_mod;
-    unsigned      header_pointer;
-}* dir_entry;
-
-union {
-    unsigned char bytes[512];
-    struct {
-        unsigned      prev_block;
-        unsigned      next_block;
-        unsigned char entries[1];
-    } content;
-} dir_block;
-
-union {
-    unsigned char bytes[512];
-    struct {
-        unsigned char addr_lo[254];
-        unsigned char size_lo[2];
-        unsigned char addr_hi[254];
-        unsigned char size_hi[2];
-    } content;
-} index_block, master_block, vlir_block;
-
-union {
-    unsigned char bytes[512];
-    struct {
-        unsigned           reserved;
-        unsigned char      info_block[254];
-        unsigned char      vlir_records[128];
-        struct dir_entry_t dir_entry;
-    } content;
-} header_block;
-
-
-static void err_exit(char *operation, unsigned char oserr)
-{
-    if (oserr) {
-        fprintf(stderr, "%s - err:%02x - %s",
-                operation, (int)_oserror, _stroserror(_oserror));
-    } else {
-        fprintf(stderr, "%s",
-                operation);
-    }
-    getchar();
-    exit(EXIT_FAILURE);
-}
-
-
-static unsigned get_dir_entry(char* p_name)
-{
-    char*          d_name;
-    char*          f_name;
-    size_t         f_namelen;
-    DIR*           dir;
-    struct dirent* dirent;
-    unsigned       cur_addr;
-    unsigned char  entry_length;
-    unsigned char  entries_per_block;
-    unsigned char  cur_entry;
-
-    /* Split path name into directory name and file name */
-    f_name = strrchr(p_name, '/');
-    if (f_name) {
-        d_name = p_name;
-        *f_name++ = '\0';
-    } else {
-        d_name = ".";
-        f_name = p_name;
-    }
-    f_namelen = strlen(f_name);
-
-    /* Start with high level functions to get handling
-       of relative path and current drive for free */
-    dir = opendir(d_name);
-    if (!dir) {
-        err_exit("opendir", 1);
-    }
-    dirent = readdir(dir);
-    if (!dirent) {
-        err_exit("readdir", 1);
-    }
-
-    /* Field header_pointer directly follows field last_mod */
-    cur_addr = *(unsigned*)(&dirent->d_mtime.hour + 1);
-
-    dhandle = dio_open(getcurrentdevice());
-    if (!dhandle) {
-        err_exit("dio_open", 1);
-    }
-
-    if (dio_read(dhandle, cur_addr, &dir_block)) {
-        err_exit("dio_read.1", 1);
-    }
-
-    /* Get directory entry infos from directory header */
-    entry_length      = dir_block.bytes[0x23];
-    entries_per_block = dir_block.bytes[0x24];
-
-    /* Skip directory header entry */
-    cur_entry = 1;
-
-    do {
-
-        /* Search for next active directory entry */
-        do {
-
-            /* Check if next directory block is necessary */
-            if (cur_entry == entries_per_block) {
-
-                /* Check if another directory block is present */
-                cur_addr = dir_block.content.next_block;
-                if (!cur_addr) {
-                    _mappederrno(0x46);
-                    err_exit("dio_read.2", 1);
-                }
-
-                /* Read next directory block */
-                if (dio_read(dhandle, cur_addr, &dir_block)) {
-                    err_exit("dio_read.3", 1);
-                }
-
-                /* Start with first entry in next block */
-                cur_entry = 0;
-            }
-
-            /* Compute pointer to current entry */
-            dir_entry = (struct dir_entry_t*)(dir_block.content.entries +
-                                              cur_entry * entry_length);
-
-            /* Switch to next entry */
-            ++cur_entry;
-        } while (!dir_entry->storage_length.storage_type);
-
-    } while (dir_entry->storage_length.name_length != f_namelen ||
-             strncasecmp(dir_entry->file_name, f_name, f_namelen));
-
-    return cur_addr;
-}
-
-
-int main(int argc, char* argv[])
-{
-    char          input[80];
-    char*         p_name;
-    unsigned      dir_addr;
-    unsigned      header_addr;
-    unsigned char index;
-    unsigned long size;
-
-    if (argc > 1) {
-        p_name = argv[1];
-    } else {
-        printf("\n"
-               "Apple GEOS Convert 1.0\n"
-               "----------------------\n"
-               "\n"
-               "Pathname:");
-        p_name = gets(input);
-    }
-
-    dir_addr = get_dir_entry(p_name);
-
-    /* Read index block */
-    if (dio_read(dhandle, dir_entry->key_pointer, &index_block)) {
-        err_exit("dio_read.4", 1);
-    }
-
-    /* First pointer is header block */
-    header_addr = index_block.content.addr_lo[0] |
-                  index_block.content.addr_hi[0] << 8;
-
-    /* Read header block */
-    if (dio_read(dhandle, header_addr, &header_block)) {
-        err_exit("dio_read.5", 1);
-    }
-
-    /* Do some sanity check */
-    for (index = 0; index < sizeof(info_signature); ++index) {
-        if (header_block.content.info_block[index] != info_signature[index]) {
-            err_exit("file signature mismatch", 0);
-        }
-    }
-
-    /* Check ProDOS storage type in directory entry template */
-    if (header_block.content.dir_entry.storage_length.storage_type == 2)
-    {
-
-        /* ProDOS sapling file means GEOS Sequential file*/
-        printf("\nSequential file\n");
-
-        /* Remove header block pointer from pointer list */
-        memmove(&index_block.content.addr_lo[0],
-                &index_block.content.addr_lo[1], sizeof(index_block.content.addr_lo) - 1);
-        memmove(&index_block.content.addr_hi[0],
-                &index_block.content.addr_hi[1], sizeof(index_block.content.addr_hi) - 1);
-
-        /* Get file size from ProDOS directory entry template */
-        size = (unsigned long)(header_block.content.dir_entry.size[0])       |
-               (unsigned long)(header_block.content.dir_entry.size[1]) <<  8 |
-               (unsigned long)(header_block.content.dir_entry.size[2]) << 16;
-
-    } else {
-
-        /* ProDOS tree file means GEOS VLIR file */
-        unsigned      vlir_addr;
-        unsigned long vlir_size;
-        unsigned char vlir_blocks;
-        unsigned char record = 0;
-
-        printf("\nVLIR file\n");
-
-        /* Skip header block pointer */
-        index = 1;
-        size  = 0;
-
-        while (1) {
-
-            /* Get next VLIR index pointer from index block */
-            vlir_addr = index_block.content.addr_lo[index] |
-                        index_block.content.addr_hi[index] << 8;
-            ++index;
-
-            /* Check for end of pointer list */
-            if (vlir_addr == 0) {
-                break;
-            }
-
-            /* Check for empty VLIRs */
-            while (header_block.content.vlir_records[record] == 0xFF) {
-
-                /* Add empty VLIR index pointer to to master index block */
-                master_block.content.addr_lo[record] = 0xFF;
-                master_block.content.addr_hi[record] = 0xFF;
-                ++record;
-            }
-
-            /* Add VLIR index pointer to master index block */
-            master_block.content.addr_lo[record] = (unsigned char)(vlir_addr     );
-            master_block.content.addr_hi[record] = (unsigned char)(vlir_addr >> 8);
-            ++record;
-
-            /* Read VLIR index block */
-            if (dio_read(dhandle, vlir_addr, &vlir_block)) {
-                err_exit("dio_read.6", 1);
-            }
-
-            /* Get VLIR size from VLIR index block */
-            vlir_size = (unsigned long)(vlir_block.content.size_lo[1])       |
-                        (unsigned long)(vlir_block.content.size_hi[1]) <<  8 |
-                        (unsigned long)(vlir_block.content.size_lo[0]) << 16 |
-                        (unsigned long)(vlir_block.content.size_hi[0]) << 24;
-
-            printf("VLIR %u size %lu bytes\n", record - 1, vlir_size);
-
-            /* Compute VLIR block size */
-            vlir_blocks = (unsigned char)((vlir_size + 511) / 512);
-
-            /* Copy VLIR block pointers from index block to VLIR index block */
-            memcpy(&vlir_block.content.addr_lo[0],
-                   &index_block.content.addr_lo[index], vlir_blocks);
-            memcpy(&vlir_block.content.addr_hi[0],
-                   &index_block.content.addr_hi[index], vlir_blocks);
-            index += vlir_blocks;
-
-            /* Write back VLIR index block */
-            if (dio_write(dhandle, vlir_addr, &vlir_block)) {
-                err_exit("dio_write.1", 1);
-            }
-
-            /* Add VLIR size to file size */
-            size += vlir_size;
-        }
-
-        /* Replace (by now completely read) index block with
-           (by now completely created) master index block */
-        index_block = master_block;
-    }
-
-    printf("File size %lu bytes\n\n", size);
-
-    /* Set file size in index block */
-    index_block.content.size_lo[1] = (unsigned char)(size      );
-    index_block.content.size_hi[1] = (unsigned char)(size >>  8);
-    index_block.content.size_lo[0] = (unsigned char)(size >> 16);
-    index_block.content.size_hi[0] = (unsigned char)(size >> 24);
-
-    /* Write index block */
-    if (dio_write(dhandle, dir_entry->key_pointer, &index_block)) {
-        err_exit("dio_write.2", 1);
-    }
-
-    /* Copy selected fields from directory entry template to directory block */
-    dir_entry->storage_length  = header_block.content.dir_entry.storage_length;
-    memcpy(dir_entry->file_name, header_block.content.dir_entry.file_name, 15);
-    dir_entry->file_type       = header_block.content.dir_entry.file_type;
-    dir_entry->size[0]         = (unsigned char)(size      );
-    dir_entry->size[1]         = (unsigned char)(size >>  8);
-    dir_entry->size[2]         = (unsigned char)(size >> 16);
-    dir_entry->creation        = header_block.content.dir_entry.creation;
-    dir_entry->version         = header_block.content.dir_entry.version;
-    dir_entry->min_version     = header_block.content.dir_entry.min_version;
-    dir_entry->aux_type        = header_addr;
-    dir_entry->last_mod        = header_block.content.dir_entry.last_mod;
-
-    /* Write directory block */
-    if (dio_write(dhandle, dir_addr, &dir_block)) {
-        err_exit("dio_write.3", 1);
-    }
-
-    /* We're done */
-    if (dio_close(dhandle)) {
-        err_exit("dio_close", 1);
-    }
-
-    printf("Convert to '%.*s' successful", dir_entry->storage_length.name_length,
-                                           dir_entry->file_name);
-    getchar();
-    return EXIT_SUCCESS;
-}
diff --git a/libsrc/geos-cbm/Makefile.inc b/libsrc/geos-cbm/Makefile.inc
deleted file mode 100644 (file)
index 423ad8b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-CA65FLAGS += -I geos-cbm -I geos-common
diff --git a/libsrc/geos-cbm/dio.inc b/libsrc/geos-cbm/dio.inc
deleted file mode 100644 (file)
index 2bd96ac..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-; offsets into sectsizetab (DIO functions)
-sst_flag                =       0       ; length 1
-sst_sectsize            =       1       ;        2
-sst_driveno             =       3       ;        1  (drive #)
-sst_size                =       4       ; size of one entry
-                                        ; if changed, adapt diopncls.s
-
-; offsets into dio_phys_pos
-diopp_head              =       0       ; head
-diopp_track             =       1       ; track / cylinder
-diopp_sector            =       3       ; sector
-diopp_size              =       5       ; size of structure
diff --git a/libsrc/geos-cbm/disk/changediskdevice.s b/libsrc/geos-cbm/disk/changediskdevice.s
deleted file mode 100644 (file)
index c3035de..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char ChangeDiskDevice (char newDriveNumber);
-
-            .export _ChangeDiskDevice
-            .import setoserror
-
-            .include "jumptab.inc"
-        
-_ChangeDiskDevice:
-        jsr ChangeDiskDevice
-        jmp setoserror
diff --git a/libsrc/geos-cbm/disk/chkdkgeos.s b/libsrc/geos-cbm/disk/chkdkgeos.s
deleted file mode 100644 (file)
index c2b4821..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char ChkDkGEOS (void);
-
-            .export _ChkDkGEOS
-            .import setoserror
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-        
-_ChkDkGEOS:
-        jsr ChkDkGEOS
-        jsr setoserror
-        lda isGEOS
-        rts
diff --git a/libsrc/geos-cbm/disk/dio_cts.s b/libsrc/geos-cbm/disk/dio_cts.s
deleted file mode 100644 (file)
index 8be3436..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-; 2.7.2001
-;
-;
-; unsigned char __fastcall__ dio_phys_to_log (dhandle_t handle,
-;                                             dio_phys_pos *physpos,    /* input */
-;                                             unsigned *sectnum);       /* output */
-;
-
-            .export _dio_phys_to_log
-            .export sectab_1541_l, sectab_1541_h        ; for log_to_phys
-            .import popax,__oserror
-            .importzp ptr1,ptr2,ptr3,tmp1,tmp2,tmp3,tmp4
-
-            .include "dio.inc"
-            .include "geossym.inc"
-            .include "const.inc"
-
-_dio_phys_to_log:
-        sta ptr1
-        stx ptr1+1              ; pointer to result
-            
-        jsr popax
-        sta ptr2
-        stx ptr2+1              ; pointer to input structure
-            
-        jsr popax
-        sta ptr3
-        stx ptr3+1              ; pointer to handle
-            
-        ldy #sst_flag
-        lda (ptr3),y
-        and #128
-        beq _inv_hand           ; handle not open or invalid
-            
-            
-        ldy #diopp_head
-        lda (ptr2),y
-        bne _inv_data           ; there is only head 0
-        ldy #diopp_track
-        lda (ptr2),y
-        beq _inv_data           ; there is no track 0
-        sta tmp1
-        iny
-        lda (ptr2),y
-        bne _inv_data           ; there are no more than 256 tracks
-        dec tmp1                ; normalize track to start from 0
-        ldy #diopp_sector
-        lda (ptr2),y
-        sta tmp2
-        iny
-        lda (ptr2),y
-        bne _inv_data           ; there are no more than 256 sectors
-
-; tmp1 (int) holds track+sector, translate it using device info
-
-        ldy #sst_driveno
-        lda (ptr3),y
-        tay
-        lda driveType,y
-        and #%00000011          ; this is for RamDrive compatibility
-        cmp #DRV_1541
-        beq dio_cts1541
-        cmp #DRV_1571
-        beq dio_cts1571
-        cmp #DRV_1581
-        beq dio_cts1581
-            
-        lda #DEV_NOT_FOUND      ; unknown device
-        ldx #0
-        beq ret
-
-dio_ctsend:
-        ldy #1
-        lda tmp2
-        sta (ptr1),y
-        dey
-        lda tmp1
-        sta (ptr1),y
-            
-        ldx #0
-        txa
-ret:        
-        sta __oserror
-        rts                     ; return success
-
-; errors
-
-_inv_data:
-        lda #INV_TRACK
-        .byte $2c
-_inv_hand:
-        lda #INCOMPATIBLE
-        ldx #0
-        beq ret
-
-; device-depended stuff, tmp1=track-1, tmp2=sector
-
-dio_cts1541:
-        ldy tmp1
-        cpy #35
-        bcs _inv_data
-        lda sectab_1541_l,y
-        clc
-        adc tmp2
-        sta tmp1
-        lda sectab_1541_h,y
-        adc #0
-        sta tmp2
-        jmp dio_ctsend
-
-dio_cts1571:
-        lda tmp1
-        cmp #70
-        bcs _inv_data
-        cmp #35                 ; last track of one side
-        bcs _sub35
-        jmp dio_cts1541         ; track <=35 - same as 1541
-
-_sub35:
-        sec
-        sbc #35
-        sta tmp1
-        jsr dio_cts1541         ; get offset on second side of disk
-        lda tmp1                ; add second side base
-        clc
-        adc #<683
-        sta tmp1
-        lda tmp2
-        adc #>683
-        sta tmp2
-        jmp dio_ctsend
-
-dio_cts1581:
-; 1581 has 80 tracks, 40 sectors each secnum=track*40+sector
-        ldx #0
-        stx tmp3
-        stx tmp4
-        lda tmp1
-        beq _nomult
-        cmp #80
-        bcs _inv_data
-
-; mul40 by Christian Groessler
-        sta tmp4
-        asl a
-        rol tmp3
-        asl a
-        rol tmp3                ; val * 4
-        adc tmp4
-        bcc L1
-        inc tmp3                ; val * 5
-L1:     asl a
-        rol tmp3                ; val * 10
-        asl a
-        rol tmp3
-        asl a
-        rol tmp3                ; val * 40 = AX
-        ldx tmp3
-        sta tmp3
-        stx tmp4
-
-_nomult:
-        lda tmp2
-        clc
-        adc tmp3
-        sta tmp1
-        lda tmp4
-        adc #0
-        sta tmp2
-        jmp dio_ctsend
-
-.rodata
-
-sectab_1541_l:
-        .byte $00, $15, $2a, $3f, $54, $69, $7e, $93
-        .byte $a8, $bd, $d2, $e7, $fc, $11, $26, $3b
-        .byte $50, $65, $78, $8b, $9e, $b1, $c4, $d7
-        .byte $ea, $fc, $0e, $20, $32, $44, $56, $67
-        .byte $78, $89, $9a, $ab
-sectab_1541_h:
-        .byte $00, $00, $00, $00, $00, $00, $00, $00
-        .byte $00, $00, $00, $00, $00, $01, $01, $01
-        .byte $01, $01, $01, $01, $01, $01, $01, $01
-        .byte $01, $01, $02, $02, $02, $02, $02, $02
-        .byte $02, $02, $02, $02
diff --git a/libsrc/geos-cbm/disk/dio_openclose.s b/libsrc/geos-cbm/disk/dio_openclose.s
deleted file mode 100644 (file)
index ec5aa87..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; based on Atari version by Christian Groessler
-; 2.7.2001
-;
-; dhandle_t     __fastcall__ dio_open  (unsigned char device);
-; unsigned char __fastcall__ dio_close (dhandle_t handle);
-;
-; dio_open sets given device as current and initializes disk
-; dio_close does nothing special
-
-            .export _dio_open, _dio_close
-            .import __oserror, _OpenDisk
-            .importzp ptr1, tmp1
-
-            .include "dio.inc"
-            .include "jumptab.inc"
-            .include "geossym.inc"
-            .include "const.inc"
-
-.bss
-
-sectsizetab:
-        .res 4 * sst_size       ; this is hardcoded
-
-.code
-
-_dio_open:
-        pha
-        tax
-        lda driveType,x         ; check if there's a device
-        beq _inv_drive
-        txa
-        clc
-        adc #8                  ; normalize devnum
-        sta curDevice
-        jsr SetDevice
-        jsr _OpenDisk           ; take care for errors there
-
-        pla
-        tay                     ; drive #
-        asl a                   ; make index from drive id
-        asl a
-        tax
-            
-        lda #0
-        sta sectsizetab+sst_sectsize,x
-        lda #128
-        sta sectsizetab+sst_flag,x ; set flag that drive is "open"
-        lda #1
-        sta sectsizetab+sst_sectsize+1,x
-        tya
-        sta sectsizetab+sst_driveno,x
-            
-        stx tmp1
-        lda #<sectsizetab
-        clc
-        adc tmp1
-        sta tmp1
-        lda #>sectsizetab
-        adc #0
-        tax
-        lda tmp1
-
-        rts
-
-_inv_drive:
-        lda #DEV_NOT_FOUND
-        sta __oserror
-        lda #0
-        tax
-        rts
-
-_dio_close:
-        sta ptr1
-        stx ptr1+1
-        lda #0
-        ldy #sst_flag
-        sta (ptr1),y
-        sta __oserror           ; success
-        tax
-        rts                     ; return no error
diff --git a/libsrc/geos-cbm/disk/dio_params.s b/libsrc/geos-cbm/disk/dio_params.s
deleted file mode 100644 (file)
index e9fbc60..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-; 2.7.2001
-;
-; this function is used by dio_read and dio_write to fix parameters (secnum)
-; this function calls SetDevice so that more than one drive can be used at once
-
-            .export dio_params,dio_secnum
-            .import popax,pushax,_dio_log_to_phys
-            .importzp ptr1
-
-            .include "geossym.inc"
-            .include "jumptab.inc"
-            .include "dio.inc"
-
-.bss
-
-dio_secnum:
-        .res 2
-
-.code
-
-dio_params:
-        sta r4L
-        stx r4H
-
-        jsr popax
-        sta dio_secnum
-        stx dio_secnum+1
-
-        jsr popax               ; get 3rd parameter
-        pha                     ; save it
-        txa
-        pha
-        jsr pushax              ; put it back
-        pla                     ; restore it
-        sta ptr1+1
-        pla
-        sta ptr1
-        ldy #sst_driveno
-        lda (ptr1),y
-        clc
-        adc #8
-        jsr SetDevice           ; setup device, load driver
-
-        lda #<dio_secnum
-        ldx #>dio_secnum
-        jsr pushax
-
-        lda #<r1L
-        ldx #>r1H
-        jmp _dio_log_to_phys
diff --git a/libsrc/geos-cbm/disk/dio_qcount.s b/libsrc/geos-cbm/disk/dio_qcount.s
deleted file mode 100644 (file)
index 5f10ac2..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Oliver Schmidt, 2012-10-23
-;
-; unsigned __fastcall__ dio_query_sectcount (dhandle_t handle);
-;
-
-            .export _dio_query_sectcount
-            .import __oserror
-
-_dio_query_sectcount:
-        lda #0
-        sta __oserror
-        lda #<683
-        ldx #>683
-        rts
diff --git a/libsrc/geos-cbm/disk/dio_qsize.s b/libsrc/geos-cbm/disk/dio_qsize.s
deleted file mode 100644 (file)
index bf91780..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Oliver Schmidt, 2012-10-23
-;
-; unsigned __fastcall__ dio_query_sectsize (dhandle_t handle);
-;
-
-            .export _dio_query_sectsize
-            .import __oserror
-
-_dio_query_sectsize:
-        lda #<256
-        ldx #>256
-        sta __oserror
-        rts
diff --git a/libsrc/geos-cbm/disk/dio_read.s b/libsrc/geos-cbm/disk/dio_read.s
deleted file mode 100644 (file)
index db46c9b..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-; 2.7.2001
-;
-; this file provides the _dio_read function
-;
-; unsigned char __fastcall__ dio_read (dhandle_t handle, unsigned sect_num, void *buffer);
-;
-
-            .export _dio_read
-            .import dio_params, __oserror
-
-            .include "geossym.inc"
-            .include "jumptab.inc"
-
-_dio_read:
-        jsr dio_params
-        jsr ReadBlock
-        stx __oserror
-        txa
-        rts
diff --git a/libsrc/geos-cbm/disk/dio_stc.s b/libsrc/geos-cbm/disk/dio_stc.s
deleted file mode 100644 (file)
index 586e3f3..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-; 2.7.2001
-;
-; unsigned char __fastcall__ dio_log_to_phys (dhandle_t handle,
-;                                             unsigned *sectnum,        /* input */
-;                                             dio_phys_pos *physpos);   /* output */
-;
-
-            .export _dio_log_to_phys
-            .importzp ptr1,ptr2,ptr3,tmp1,tmp2
-            .import popax,__oserror
-            .import sectab_1541_l, sectab_1541_h
-
-            .include "dio.inc"
-            .include "geossym.inc"
-            .include "const.inc"
-
-_dio_log_to_phys:
-; check device type
-        sta ptr1
-        stx ptr1+1              ; pointer to result (struct dio_phys_pos)
-            
-        jsr popax
-        sta ptr2
-        stx ptr2+1              ; pointer to input structure (pointer to int)
-            
-        jsr popax
-        sta ptr3
-        stx ptr3+1              ; pointer to handle
-            
-        ldy #sst_flag
-        lda (ptr3),y
-        and #128
-        beq _inv_hand           ; handle not open or invalid
-
-; fill in all we have
-        ldy #diopp_head
-        lda #0                  ; head 0
-        sta (ptr1),y
-        ldy #diopp_track+1
-        sta (ptr1),y            ; track <256
-        ldy #diopp_sector+1
-        sta (ptr1),y            ; sector <256
-            
-        ldy #0
-        lda (ptr2),y
-        sta tmp1
-        iny 
-        lda (ptr2),y
-        sta tmp2
-
-; get drive info
-        ldy #sst_driveno
-        lda (ptr3),y
-        tay 
-        lda driveType,y
-        and #%00000011          ; this is for RamDrive compatibility
-        cmp #DRV_1541
-        beq dio_stc1541
-        cmp #DRV_1571
-        beq dio_stc1571
-        cmp #DRV_1581
-        beq dio_stc1581
-            
-        lda #DEV_NOT_FOUND      ; unknown device
-        ldx #0
-        beq _ret
-
-dio_stcend:
-        ldy #diopp_track
-        lda tmp1
-        sta (ptr1),y
-        ldy #diopp_sector
-        lda tmp2
-        sta (ptr1),y
-            
-        ldx #0
-        txa 
-_ret:       
-        sta __oserror
-        rts                     ; return success
-
-; errors
-_inv_data:
-        lda #INV_TRACK
-        .byte $2c
-_inv_hand:
-        lda #INCOMPATIBLE
-        ldx #0
-        beq _ret
-
-dio_stc1541:
-; if 1541:
-; - compare with table to find track
-; - subtract and find sector
-
-        ldx #0                  ; index=(track-1)
-_loop41:
-        lda tmp2
-        cmp sectab_1541_h+1,x
-        bne _nxt
-        lda tmp1
-        cmp sectab_1541_l+1,x
-        bcc _found
-_nxt:   inx 
-        cpx #35
-        bne _loop41
-        beq _inv_data
-            
-_found:     
-        lda tmp1
-        sec 
-        sbc sectab_1541_l,x
-        sta tmp2
-_fndend:    
-        inx 
-        stx tmp1
-        jmp dio_stcend
-
-dio_stc1571:
-; if 1571:
-; - check size, if too big - subtract and add 35 to track
-; - fall down to 1541
-        lda tmp2
-        cmp #>683
-        bne _cnt71
-        lda tmp1
-        cmp #<683
-        bcc dio_stc1541
-            
-_cnt71:     
-        lda tmp1
-        sec 
-        sbc #<683
-        sta tmp1
-        lda tmp2
-        sbc #>683
-        sta tmp2
-        jsr dio_stc1541         ; will fall through here
-            
-        ldy #diopp_track
-        lda (ptr1),y
-        clc 
-        adc #35
-        sta (ptr1),y
-        lda #0
-        beq _ret
-
-; if 1581:
-; - subtract 40 in loop (at most 80 times) to find track
-; - the remainder is sector
-dio_stc1581:
-        ldx #0                  ; index=(track-1)
-_loop81:    
-        lda tmp2
-        bne _sub81
-        lda tmp1
-        cmp #40
-        bcc _got81
-_sub81: lda tmp1
-        sec 
-        sbc #40
-        sta tmp1
-        lda tmp2
-        sbc #0
-        sta tmp2
-        inx 
-        cpx #81
-        bne _loop81
-        beq _inv_data
-            
-_got81: lda tmp1
-        sta tmp2
-        inx 
-        stx tmp1
-        jmp dio_stcend
diff --git a/libsrc/geos-cbm/disk/dio_write.s b/libsrc/geos-cbm/disk/dio_write.s
deleted file mode 100644 (file)
index 1426780..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-; 2.7.2001
-;
-; this file provides the _dio_write function
-;
-; unsigned char __fastcall__ dio_write (dhandle_t handle, unsigned sect_num, const void *buffer);
-;
-
-            .export _dio_write
-            .import dio_params, setoserror
-
-            .include "geossym.inc"
-            .include "jumptab.inc"
-
-_dio_write:
-        jsr dio_params
-        jsr WriteBlock
-        jmp setoserror
diff --git a/libsrc/geos-cbm/disk/dio_writev.s b/libsrc/geos-cbm/disk/dio_writev.s
deleted file mode 100644 (file)
index 7cb9b02..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-; 2.7.2001
-;
-; this file provides the _dio_write function
-;
-; unsigned char __fastcall__ dio_write_verify (dhandle_t handle, unsigned sect_num, const void *buffer);
-;
-
-            .export _dio_write_verify
-            .import dio_params, __oserror
-
-            .include "geossym.inc"
-            .include "jumptab.inc"
-
-_dio_write_verify:
-        jsr dio_params
-        jsr VerWriteBlock
-        stx __oserror
-        txa
-        rts
diff --git a/libsrc/geos-cbm/disk/enterturbo.s b/libsrc/geos-cbm/disk/enterturbo.s
deleted file mode 100644 (file)
index 777822b..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void EnterTurbo (void);
-
-            .export _EnterTurbo
-
-            .include "jumptab.inc"
-        
-_EnterTurbo     = EnterTurbo
diff --git a/libsrc/geos-cbm/disk/exitturbo.s b/libsrc/geos-cbm/disk/exitturbo.s
deleted file mode 100644 (file)
index ab894ae..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void ExitTurbo (void);
-
-            .export _ExitTurbo
-
-            .include "jumptab.inc"
-        
-_ExitTurbo      = ExitTurbo
diff --git a/libsrc/geos-cbm/disk/findbambit.s b/libsrc/geos-cbm/disk/findbambit.s
deleted file mode 100644 (file)
index 3bb566f..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char FindBAMBit (struct tr_se *TS);
-; (might be called inUSE (if (!inUSE(block))))
-
-            .export _FindBAMBit
-            .import gettrse
-            .import return0, return1
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-        
-_FindBAMBit:
-        jsr gettrse
-        sta r6L
-        stx r6H
-        jsr FindBAMBit
-        bne inUse
-        jmp return0
-inUse:  jmp return1
diff --git a/libsrc/geos-cbm/disk/newdisk.s b/libsrc/geos-cbm/disk/newdisk.s
deleted file mode 100644 (file)
index 30c7283..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char NewDisk (void);
-
-            .export _NewDisk
-            .import setoserror
-
-            .include "jumptab.inc"
-        
-_NewDisk:
-        jsr NewDisk
-        jmp setoserror
diff --git a/libsrc/geos-cbm/disk/purgeturbo.s b/libsrc/geos-cbm/disk/purgeturbo.s
deleted file mode 100644 (file)
index f0a2934..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void PurgeTurbo (void);
-
-            .export _PurgeTurbo
-
-            .include "jumptab.inc"
-        
-_PurgeTurbo     = PurgeTurbo
diff --git a/libsrc/geos-cbm/disk/readblock.s b/libsrc/geos-cbm/disk/readblock.s
deleted file mode 100644 (file)
index 977860d..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char ReadBlock (struct tr_se myTS, char *buffer);
-
-            .export _ReadBlock
-            .import popax, setoserror
-            .import gettrse
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-        
-_ReadBlock:
-        sta r4L
-        stx r4H
-        jsr popax
-        jsr gettrse
-        sta r1L
-        stx r1H
-        jsr ReadBlock
-        jmp setoserror
diff --git a/libsrc/geos-cbm/disk/readbuff.s b/libsrc/geos-cbm/disk/readbuff.s
deleted file mode 100644 (file)
index 149eae1..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 26.10.1999, 2.1.2003
-
-; char ReadBuff  (struct tr_se);
-
-            .export _ReadBuff
-            .import setoserror
-            .import gettrse
-
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-        
-_ReadBuff:
-        jsr gettrse
-        sta r1L
-        stx r1H
-        jsr ReadBuff
-        jmp setoserror
diff --git a/libsrc/geos-cbm/disk/setgeosdisk.s b/libsrc/geos-cbm/disk/setgeosdisk.s
deleted file mode 100644 (file)
index 5d40ee4..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char SetGEOSDisk (void);
-
-            .export _SetGEOSDisk
-            .import setoserror
-
-            .include "jumptab.inc"
-
-_SetGEOSDisk:
-        jsr SetGEOSDisk
-        jmp setoserror
diff --git a/libsrc/geos-cbm/disk/verwriteblock.s b/libsrc/geos-cbm/disk/verwriteblock.s
deleted file mode 100644 (file)
index 74243f1..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char VerWriteBlock (struct tr_se *myTS, char *buffer);
-
-            .export _VerWriteBlock
-            .import popax, setoserror
-            .import gettrse
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-        
-_VerWriteBlock:
-        sta r4L
-        stx r4H
-        jsr popax
-        jsr gettrse
-        sta r1L
-        stx r1H
-        jsr VerWriteBlock
-        jmp setoserror
diff --git a/libsrc/geos-cbm/disk/writeblock.s b/libsrc/geos-cbm/disk/writeblock.s
deleted file mode 100644 (file)
index c5a3b3f..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char WriteBlock (struct tr_se *myTS, char *buffer);
-
-            .export _WriteBlock
-            .import popax, setoserror
-            .import gettrse
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-        
-_WriteBlock:
-        sta r4L
-        stx r4H
-        jsr popax
-        jsr gettrse
-        sta r1L
-        stx r1H
-        jsr WriteBlock
-        jmp setoserror
diff --git a/libsrc/geos-cbm/disk/writebuff.s b/libsrc/geos-cbm/disk/writebuff.s
deleted file mode 100644 (file)
index 34e7b13..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 26.10.1999, 2.1.2003
-
-; char WriteBuff (struct tr_se*);
-
-            .export _WriteBuff
-            .import setoserror
-            .import gettrse
-
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-        
-_WriteBuff:
-        jsr gettrse
-        sta r1L
-        stx r1H
-        jsr WriteBuff
-        jmp setoserror
diff --git a/libsrc/geos-cbm/diskdrv.inc b/libsrc/geos-cbm/diskdrv.inc
deleted file mode 100644 (file)
index 5dc3654..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-;
-;GEOS Disk Driver JumpTab
-;reassembled by Maciej 'YTM/Alliance' Witkowiak
-;4-2-99
-
-;pointers
-InitForIO_              =       $9000
-DoneWithIO_             =       $9002
-ExitTurbo_              =       $9004
-PurgeTurbo_             =       $9006
-EnterTurbo_             =       $9008
-ChangeDiskDevice_       =       $900a
-NewDisk_                =       $900c
-ReadBlock_              =       $900e
-WriteBlock_             =       $9010
-VerWriteBlock_          =       $9012
-OpenDisk_               =       $9014
-GetBlock_               =       $9016
-PutBlock_               =       $9018
-GetDirHead_             =       $901a
-PutDirHead_             =       $901c
-GetFreeDirBlk_          =       $901e
-CalcBlksFree_           =       $9020
-FreeBlock_              =       $9022
-SetNextFree_            =       $9024
-FindBAMBit_             =       $9026
-NxtBlkAlloc_            =       $9028
-BlkAlloc_               =       $902a
-ChkDkGEOS_              =       $902c
-SetGEOSDisk_            =       $902e
-
-;jump table
-Get1stDirEntry          =       $9030
-GetNxtDirEntry          =       $9033
-GetBorder               =       $9036
-AddDirBlock             =       $9039
-ReadBuff                =       $903c
-WriteBuff               =       $903f
-;??? = $9042
-;??? = $9045
-AllocateBlock           =       $9048
-ReadLink                =       $904b
diff --git a/libsrc/geos-cbm/emd/geos-vdc.s b/libsrc/geos-cbm/emd/geos-vdc.s
deleted file mode 100644 (file)
index 791d2a0..0000000
+++ /dev/null
@@ -1,431 +0,0 @@
-;
-; Extended memory driver for the VDC RAM available on all C128 machines
-; version for GEOS enters safe I/O config on C64 (transparent on C128)
-;
-; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
-; 06,20,25.12.2002
-
-            .include "zeropage.inc"
-            .include "em-kernel.inc"
-            .include "em-error.inc"
-
-            .macpack generic
-            .macpack module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _geos_vdc_emd
-
-; Driver signature
-
-        .byte $65, $6d, $64     ; "emd"
-        .byte EMD_API_VERSION   ; EM API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   PAGECOUNT
-        .addr   MAP
-        .addr   USE
-        .addr   COMMIT
-        .addr   COPYFROM
-        .addr   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-VDC_ADDR_REG    = $D600         ; VDC address
-VDC_DATA_REG    = $D601         ; VDC data
-
-VDC_DATA_HI     = 18            ; used registers
-VDC_DATA_LO     = 19
-VDC_CSET        = 28
-VDC_DATA        = 31
-
-; ------------------------------------------------------------------------
-; Data.
-
-.data
-
-pagecount:
-        .word 64                ; $0000-$3fff as 16k default
-curpage:
-        .word $ffff             ; currently mapped-in page (invalid)
-
-.bss
-
-window:
-        .res 256                ; memory window
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-        ; do test for VDC presence here???
-
-        php
-        sei
-        lda $01
-        pha
-        lda #$35
-        sta $01
-            
-        ldx #VDC_CSET           ; determine size of RAM...
-        jsr vdcgetreg
-        sta tmp1
-        ora #%00010000
-        jsr vdcputreg           ; turn on 64k
-            
-        jsr settestadr1         ; save original value of test byte
-        jsr vdcgetbyte
-        sta tmp2
-            
-        lda #$55                ; write $55 here
-        ldy #ptr1
-        jsr test64k             ; read it here and there
-        lda #$aa                ; write $aa here
-        ldy #ptr2
-        jsr test64k             ; read it here and there
-            
-        jsr settestadr1
-        lda tmp2
-        jsr vdcputbyte          ; restore original value of test byte
-            
-        lda ptr1                ; do bytes match?
-        cmp ptr1+1
-        bne @have64k
-        lda ptr2
-        cmp ptr2+1
-        bne @have64k
-            
-        ldx #VDC_CSET
-        lda tmp1
-        jsr vdcputreg           ; restore 16/64k flag
-        jmp @endok              ; and leave default values for 16k
-            
-@have64k:   
-        lda #<256
-        ldx #>256
-        sta pagecount
-        stx pagecount+1
-@endok:     
-        pla
-        sta $01
-        plp
-        lda #<EM_ERR_OK
-        ldx #>EM_ERR_OK
-        rts 
-            
-test64k:    
-        sta tmp1
-        sty ptr3
-        lda #0
-        sta ptr3+1
-        jsr settestadr1
-        lda tmp1
-        jsr vdcputbyte          ; write $55
-        jsr settestadr1
-        jsr vdcgetbyte          ; read here
-        pha
-        jsr settestadr2
-        jsr vdcgetbyte          ; and there
-        ldy #1
-        sta (ptr3),y
-        pla
-        dey
-        sta (ptr3),y
-        rts
-
-settestadr1:
-        ldy #$02                ; test page 2 (here)
-        .byte $2c
-settestadr2:
-        ldy #$42                ; or page 64+2 (there)
-        lda #0
-        jmp vdcsetsrcaddr
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        ;on C128 restore font and clear the screen?
-        rts
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda pagecount
-        ldx pagecount+1
-        rts
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:    sta curpage
-        stx curpage+1
-        sta ptr1+1
-        ldy #0
-        sty ptr1
-            
-        lda #<window
-        sta ptr2
-        lda #>window
-        sta ptr2+1
-            
-        jsr transferin
-            
-        lda #<window
-        ldx #>window
-        rts
-
-; copy a single page from (ptr1):VDCRAM to (ptr2):RAM
-
-transferin:
-        php
-        sei
-        lda $01
-        pha
-        lda #$35
-        sta $01
-        lda ptr1
-        ldy ptr1+1
-        jsr vdcsetsrcaddr       ; set source address in VDC
-        ldy #0
-        ldx #VDC_DATA
-        stx VDC_ADDR_REG
-@L0:    bit VDC_ADDR_REG
-        bpl @L0
-        lda VDC_DATA_REG        ; get 2 bytes at a time to speed-up
-        sta (ptr2),y            ; (in fact up to 8 bytes could be fetched with special VDC config)
-        iny
-        lda VDC_DATA_REG
-        sta (ptr2),y
-        iny
-        bne @L0
-        pla
-        sta $01
-        plp
-        rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-
-USE:    sta curpage
-        stx curpage+1           ; Remember the page
-        lda #<window
-        ldx #>window            ; Return the window
-done:   rts
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT:
-        lda curpage             ; jump if no page mapped
-        ldx curpage+1
-        bmi done
-        sta ptr1+1
-        ldy #0
-        sty ptr1
-
-        lda #<window
-        sta ptr2
-        lda #>window
-        sta ptr2+1
-
-; fall through to transferout
-
-; copy a single page from (ptr2):RAM to (ptr1):VDCRAM
-
-transferout:
-        php
-        sei
-        lda $01
-        pha
-        lda #$35
-        sta $01
-        lda ptr1
-        ldy ptr1+1
-        jsr vdcsetsrcaddr       ; set source address in VDC
-        ldy #0
-        ldx #VDC_DATA
-        stx VDC_ADDR_REG
-@L0:    bit VDC_ADDR_REG
-        bpl @L0
-        lda (ptr2),y            ; speedup does not work for writing
-        sta VDC_DATA_REG
-        iny
-        bne @L0
-        pla
-        sta $01
-        plp
-        rts
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYFROM:
-        jsr setup
-        beq @L2                 ; Skip if no full pages
-
-; Copy full pages
-
-@L1:    jsr transferin
-        inc ptr1+1
-        inc ptr2+1
-        dec tmp1
-        bne @L1
-
-; Copy the remainder of the page
-                 
-@L2:    ldy #EM_COPY::COUNT
-        lda (ptr3),y            ; Get bytes in last page
-        beq @L4
-        sta tmp1
-
-; Transfer the bytes in the last page
-        php
-        sei
-        lda $01
-        pha
-        lda #$35
-        sta $01
-        ldy #0
-@L3:    jsr vdcgetbyte
-        sta (ptr2),y
-        iny
-        dec tmp1
-        lda tmp1
-        bne @L3
-        pla
-        sta $01
-        plp
-@L4:    rts
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO:
-        jsr setup
-        beq @L2                 ; Skip if no full pages
-
-; Copy full pages
-
-@L1:    jsr transferout
-        inc ptr1+1
-        inc ptr2+1
-        dec tmp1
-        bne @L1
-
-; Copy the remainder of the page
-
-@L2:    ldy #EM_COPY::COUNT
-        lda (ptr3),y            ; Get bytes in last page
-        beq @L4
-        sta tmp1
-
-; Transfer the bytes in the last page
-        php
-        sei
-        lda $01
-        pha
-        lda #$35
-        sta $01
-        ldy #0
-@L3:    lda (ptr2),y
-        jsr vdcputbyte
-        iny
-        dec tmp1
-        lda tmp1
-        bne @L3
-        pla
-        sta $01
-        plp
-@L4:    rts
-
-;-------------------------------------------------------------------------
-; Helper functions to handle VDC ram
-;
-
-vdcsetsrcaddr:
-        ldx #VDC_DATA_LO
-        stx VDC_ADDR_REG
-@L0:    bit VDC_ADDR_REG
-        bpl @L0
-        sta VDC_DATA_REG
-        dex
-        tya
-        stx VDC_ADDR_REG
-        sta VDC_DATA_REG
-        rts
-
-vdcgetbyte:
-        ldx #VDC_DATA
-vdcgetreg:
-        stx VDC_ADDR_REG
-@L0:    bit VDC_ADDR_REG
-        bpl @L0
-        lda VDC_DATA_REG
-        rts 
-
-vdcputbyte: 
-        ldx #VDC_DATA
-vdcputreg:
-        stx VDC_ADDR_REG
-@L0:    bit VDC_ADDR_REG
-        bpl @L0
-        sta VDC_DATA_REG
-        rts
-
-; ------------------------------------------------------------------------
-; Helper function for COPYFROM and COPYTO: Store the pointer to the request
-; structure and prepare data for the copy
-;
-
-setup:
-        sta ptr3
-        stx ptr3+1              ; Save the passed em_copy pointer
-
-        ldy #EM_COPY::OFFS
-        lda (ptr3),y
-        sta ptr1
-        ldy #EM_COPY::PAGE
-        lda (ptr3),y
-        sta ptr1+1              ; From
-
-        ldy #EM_COPY::BUF
-        lda (ptr3),y
-        sta ptr2
-        iny
-        lda (ptr3),y
-        sta ptr2+1              ; To
-
-        ldy #EM_COPY::COUNT+1
-        lda (ptr3),y            ; Get number of pages
-        sta tmp1
-        rts
diff --git a/libsrc/geos-cbm/file/followchain.s b/libsrc/geos-cbm/file/followchain.s
deleted file mode 100644 (file)
index df20bca..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char FollowChain  (struct tr_se *myTrSe, char *buffer);
-
-            .export _FollowChain
-            .import popax, setoserror
-            .import gettrse
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-        
-_FollowChain:
-        sta r3L
-        stx r3H
-        jsr popax
-        jsr gettrse
-        sta r1L
-        stx r1H
-        jsr FollowChain
-        jmp setoserror
diff --git a/libsrc/geos-cbm/geossym.inc b/libsrc/geos-cbm/geossym.inc
deleted file mode 100644 (file)
index 03fd451..0000000
+++ /dev/null
@@ -1,314 +0,0 @@
-;
-;GEOS variable memory locations sorted by address
-;reassembled by Maciej 'YTM/Elysium' Witkowiak
-;4-2-99
-
-zpage                   =       $0000
-;
-
-CPU_DDR                 =       $00
-CPU_DATA                =       $01
-;
-r0                      =       $02
-r0L                     =       $02
-r0H                     =       $03
-r1                      =       $04
-r1L                     =       $04
-r1H                     =       $05
-r2                      =       $06
-r2L                     =       $06
-r2H                     =       $07
-r3                      =       $08
-r3L                     =       $08
-r3H                     =       $09
-r4                      =       $0a
-r4L                     =       $0a
-r4H                     =       $0b
-r5                      =       $0c
-r5L                     =       $0c
-r5H                     =       $0d
-r6                      =       $0e
-r6L                     =       $0e
-r6H                     =       $0f
-r7                      =       $10
-r7L                     =       $10
-r7H                     =       $11
-r8                      =       $12
-r8L                     =       $12
-r8H                     =       $13
-r9                      =       $14
-r9L                     =       $14
-r9H                     =       $15
-r10                     =       $16
-r10L                    =       $16
-r10H                    =       $17
-r11                     =       $18
-r11L                    =       $18
-r11H                    =       $19
-r12                     =       $1a
-r12L                    =       $1a
-r12H                    =       $1b
-r13                     =       $1c
-r13L                    =       $1c
-r13H                    =       $1d
-r14                     =       $1e
-r14L                    =       $1e
-r14H                    =       $1f
-r15                     =       $20
-r15L                    =       $20
-r15H                    =       $21
-;
-a0                      =       $fb
-a0L                     =       $fb
-a0H                     =       $fc
-a1                      =       $fd
-a1L                     =       $fd
-a1H                     =       $fe
-a2                      =       $70
-a2L                     =       $70
-a2H                     =       $71
-a3                      =       $72
-a3L                     =       $72
-a3H                     =       $73
-a4                      =       $74
-a4L                     =       $74
-a4H                     =       $75
-a5                      =       $76
-a5L                     =       $76
-a5H                     =       $77
-a6                      =       $78
-a6L                     =       $78
-a6H                     =       $79
-a7                      =       $7a
-a7L                     =       $7a
-a7H                     =       $7b
-a8                      =       $7c
-a8L                     =       $7c
-a8H                     =       $7d
-a9                      =       $7e
-a9L                     =       $7e
-a9H                     =       $7f
-
-;
-
-curPattern              =       $22
-string                  =       $24
-baselineOffset          =       $26
-curSetWidth             =       $27
-curHeight               =       $29
-curIndexTable           =       $2a
-cardDataPntr            =       $2c
-currentMode             =       $2e
-dispBufferOn            =       $2f
-mouseOn                 =       $30
-msePicPtr               =       $31
-windowTop               =       $33
-windowBottom            =       $34
-leftMargin              =       $35
-rightMargin             =       $37
-pressFlag               =       $39
-mouseXPos               =       $3a
-mouseYPos               =       $3c
-returnAddress           =       $3d
-graphMode               =       $3f
-TURBO_DD00              =       $8e     ; from 1541 turbo
-TURBO_DD00_CPY          =       $8f     ; from 1541 turbo
-STATUS                  =       $90
-curDevice               =       $ba
-;
-irqvec                  =       $0314
-bkvec                   =       $0316
-nmivec                  =       $0318
-;
-APP_RAM                 =       $0400
-BACK_SCR_BASE           =       $6000
-PRINTBASE               =       $7900
-OS_VARS                 =       $8000
-;
-diskBlkBuf              =       $8000
-fileHeader              =       $8100
-curDirHead              =       $8200
-fileTrScTab             =       $8300
-dirEntryBuf             =       $8400
-DrACurDkNm              =       $841e
-DrBCurDkNm              =       $8430
-dataFileName            =       $8442
-dataDiskName            =       $8453
-PrntFilename            =       $8465
-PrntDiskName            =       $8476
-curDrive                =       $8489
-diskOpenFlg             =       $848a
-isGEOS                  =       $848b
-interleave              =       $848c
-NUMDRV                  =       $848d
-driveType               =       $848e
-_driveType              =       driveType-8
-turboFlags              =       $8492
-_turboFlags             =       turboFlags-8
-curRecord               =       $8496
-usedRecords             =       $8497
-fileWritten             =       $8498
-fileSize                =       $8499
-appMain                 =       $849b
-intTopVector            =       $849d
-intBotVector            =       $849f
-mouseVector             =       $84a1
-keyVector               =       $84a3
-inputVector             =       $84a5
-mouseFaultVec           =       $84a7
-otherPressVec           =       $84a9
-StringFaultVec          =       $84ab
-alarmTmtVector          =       $84ad
-BRKVector               =       $84af
-RecoverVector           =       $84b1
-selectionFlash          =       $84b3
-alphaFlag               =       $84b4
-iconSelFlg              =       $84b5
-faultData               =       $84b6
-menuNumber              =       $84b7
-mouseTop                =       $84b8
-mouseBottom             =       $84b9
-mouseLeft               =       $84ba
-mouseRight              =       $84bc
-stringX                 =       $84be
-stringY                 =       $84c0
-mousePicData            =       $84c1
-maxMouseSpeed           =       $8501
-minMouseSpeed           =       $8502
-mouseAccel              =       $8503
-keyData                 =       $8504
-mouseData               =       $8505
-inputData               =       $8506
-mouseSpeed              =       $8507
-random                  =       $850a
-saveFontTab             =       $850c
-dblClickCount           =       $8515
-year                    =       $8516
-month                   =       $8517
-day                     =       $8518
-hour                    =       $8519
-minutes                 =       $851a
-seconds                 =       $851b
-alarmSetFlag            =       $851c
-sysDBData               =       $851d
-screencolors            =       $851e
-dlgBoxRamBuf            =       $851f   ; to $8697
-;
-;$8698 - $8877 - various system data (keyboard queue, VLIR t&s, DBox, Menu, timers)
-;
-savedmoby2              =       $88bb
-scr80polar              =       $88bc
-scr80colors             =       $88bd
-vdcClrMode              =       $88be
-driveData               =       $88bf
-ramExpSize              =       $88c3
-sysRAMFlg               =       $88c4
-firstBoot               =       $88c5
-curType                 =       $88c6
-ramBase                 =       $88c7
-inputDevName            =       $88cb
-memBase                 =       $88cf   ;???
-DrCCurDkNm              =       $88dc
-DrDCurDkNm              =       $88ee
-dir2Head                =       $8900
-;
-SPRITE_PICS             =       $8a00
-spr0pic                 =       $8a00
-spr1pic                 =       $8a40
-spr2pic                 =       $8a80
-spr3pic                 =       $8ac0
-spr4pic                 =       $8b00
-spr5pic                 =       $8b40
-spr6pic                 =       $8b80
-spr7pic                 =       $8bc0
-COLOR_MATRIX            =       $8c00
-;
-obj0Pointer             =       $8ff8
-obj1Pointer             =       $8ff9
-obj2Pointer             =       $8ffa
-obj3Pointer             =       $8ffb
-obj4Pointer             =       $8ffc
-obj5Pointer             =       $8ffd
-obj6Pointer             =       $8ffe
-obj7Pointer             =       $8fff
-;
-DISK_BASE               =       $9000
-SCREEN_BASE             =       $a000
-OS_ROM                  =       $c000
-OS_JUMPTAB              =       $c100
-RAMC_BASE               =       $de00
-RAMC_WINDOW             =       $df00
-EXP_BASE                =       $df00
-MOUSE_BASE_128          =       $fd00
-MOUSE_JMP_128           =       $fd00
-END_MOUSE_128           =       $fe80
-MOUSE_BASE              =       $fe80
-MOUSE_JMP               =       $fe80
-config                  =       $ff00
-END_MOUSE               =       $fffa
-NMI_VECTOR              =       $fffa
-RESET_VECTOR            =       $fffc
-IRQ_VECTOR              =       $fffe
-;
-vicbase                 =       $d000
-sidbase                 =       $d400
-mmu                     =       $d500
-VDC                     =       $d600
-ctab                    =       $d800
-cia1base                =       $dc00
-cia2base                =       $dd00
-;
-mob0xpos                =       $d000
-mob0ypos                =       $d001
-mob1xpos                =       $d002
-mob1ypos                =       $d003
-mob2xpos                =       $d004
-mob2ypos                =       $d005
-mob3xpos                =       $d006
-mob3ypos                =       $d007
-mob4xpos                =       $d008
-mob4ypos                =       $d009
-mob5xpos                =       $d00a
-mob5ypos                =       $d00b
-mob6xpos                =       $d00c
-mob6ypos                =       $d00d
-mob7xpos                =       $d00e
-mob7ypos                =       $d00f
-msbxpos                 =       $d010
-grcntrl1                =       $d011
-rasreg                  =       $d012
-lpxpos                  =       $d013
-lpypos                  =       $d014
-mobenble                =       $d015
-grcntrl2                =       $d016
-grmemptr                =       $d018
-grirq                   =       $d019
-grirqen                 =       $d01a
-moby2                   =       $d017
-mobprior                =       $d01b
-mobmcm                  =       $d01c
-mobx2                   =       $d01d
-mobmobcol               =       $d01e
-mobbakcol               =       $d01f
-extclr                  =       $d020
-bakclr0                 =       $d021
-bakclr1                 =       $d022
-bakclr2                 =       $d023
-bakclr3                 =       $d024
-mcmclr0                 =       $d025
-mcmclr1                 =       $d026
-mob0clr                 =       $d027
-mob1clr                 =       $d028
-mob2clr                 =       $d029
-mob3clr                 =       $d02a
-mob4clr                 =       $d02b
-mob5clr                 =       $d02c
-mob6clr                 =       $d02d
-mob7clr                 =       $d02e
-keyreg                  =       $d02f
-clkreg                  =       $d030
-
-;
-vdcreg                  =       $d600
-vdcdata                 =       $d601
-;
diff --git a/libsrc/geos-cbm/geossym2.inc b/libsrc/geos-cbm/geossym2.inc
deleted file mode 100644 (file)
index cdcbc24..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-;
-;GEOS various variables in OS_ROM area
-;reassembled by Maciej 'YTM/Alliance' Witkowiak
-;4-2-99
-
-bootName                =       $c006
-version                 =       $c00f
-nationality             =       $c010
-sysFlgCopy              =       $c012
-c128Flag                =       $c013
-dateCopy                =       $c018
\ No newline at end of file
diff --git a/libsrc/geos-cbm/inputdrv.inc b/libsrc/geos-cbm/inputdrv.inc
deleted file mode 100644 (file)
index f40a827..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-;GEOS Input Driver Jump Tab
-;reassembled by Maciej 'YTM/Alliance' Witkowiak
-;4-2-99
-
-;for C64
-;MOUSE_JMP              =       $fe80
-SlowMouse               =       $fe83
-UpdateMouse             =       $fe86
-SetMouse                =       $fe89
-
-;for C128
-;MOUSE_JMP_128          =       $fd00
-SlowMouse_128           =       $fd03
-UpdateMouse_128         =       $fd06
-SetMouse_128            =       $fd09
diff --git a/libsrc/geos-cbm/joy/geos-stdjoy.s b/libsrc/geos-cbm/joy/geos-stdjoy.s
deleted file mode 100644 (file)
index 6afe460..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-;
-; Standard joystick driver for the C64. May be used multiple times when linked
-; to the statically application.
-;
-; Ullrich von Bassewitz, 2002-12-20
-;
-
-            .include "zeropage.inc"
-            .include "joy-kernel.inc"
-            .include "joy-error.inc"
-            .include "geossym.inc"
-
-            .macpack generic
-            .macpack module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _geos_stdjoy_joy
-
-; Driver signature
-
-        .byte $6A, $6F, $79     ; "joy"
-        .byte JOY_API_VERSION   ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte $01               ; JOY_UP
-        .byte $02               ; JOY_DOWN
-        .byte $04               ; JOY_LEFT
-        .byte $08               ; JOY_RIGHT
-        .byte $10               ; JOY_FIRE
-        .byte $00               ; Future expansion
-        .byte $00               ; Future expansion
-        .byte $00               ; Future expansion
-
-; Jump table.
-
-        .word INSTALL
-        .word UNINSTALL
-        .word COUNT
-        .word READ
-
-; ------------------------------------------------------------------------
-; Constants
-
-JOY_COUNT       = 2             ; Number of joysticks we support
-
-; ------------------------------------------------------------------------
-; Data.
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda #<JOY_ERR_OK
-        ldx #>JOY_ERR_OK
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:
-        lda #<JOY_COUNT
-        ldx #>JOY_COUNT
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
-
-READ:
-        tax
-        php
-        sei                     ; disable IRQ
-        lda $01
-        pha
-        lda #$35
-        sta $01                 ; enable I/O
-
-        txa                     ; Joystick number into X
-        bne joy2
-
-; Read joystick 1
-
-joy1:
-        lda #$7F
-        sta cia1base
-        lda cia1base+1
-back:   tay
-        pla
-        sta $01
-        plp
-        tya
-        and #$1F
-        eor #$1F
-        rts
-
-; Read joystick 2
-
-joy2:   ldx #0
-        lda #$E0
-        ldy #$FF
-        sta cia1base+2
-        lda cia1base+1
-        sty cia1base+2
-        jmp back
diff --git a/libsrc/geos-cbm/jumptab.inc b/libsrc/geos-cbm/jumptab.inc
deleted file mode 100644 (file)
index 306bffc..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-;
-;GEOS System Jump Table
-;reassembled by Maciej 'YTM/Alliance' Witkowiak
-;4-2-99
-
-;jump table
-InterruptMain           =       $c100
-InitProcesses           =       $c103
-RestartProcess          =       $c106
-EnableProcess           =       $c109
-BlockProcess            =       $c10c
-UnblockProcess          =       $c10f
-FreezeProcess           =       $c112
-UnfreezeProcess         =       $c115
-HorizontalLine          =       $c118
-InvertLine              =       $c11b
-RecoverLine             =       $c11e
-VerticalLine            =       $c121
-Rectangle               =       $c124
-FrameRectangle          =       $c127
-InvertRectangle         =       $c12a
-RecoverRectangle        =       $c12d
-DrawLine                =       $c130
-DrawPoint               =       $c133
-GraphicsString          =       $c136
-SetPattern              =       $c139
-GetScanLine             =       $c13c
-TestPoint               =       $c13f
-BitmapUp                =       $c142
-PutChar                 =       $c145
-PutString               =       $c148
-UseSystemFont           =       $c14b
-StartMouseMode          =       $c14e
-DoMenu                  =       $c151
-RecoverMenu             =       $c154
-RecoverAllMenus         =       $c157
-DoIcons                 =       $c15a
-DShiftLeft              =       $c15d
-BBMult                  =       $c160
-BMult                   =       $c163
-DMult                   =       $c166
-Ddiv                    =       $c169
-DSdiv                   =       $c16c
-Dabs                    =       $c16f
-Dnegate                 =       $c172
-Ddec                    =       $c175
-ClearRam                =       $c178
-FillRam                 =       $c17b
-MoveData                =       $c17e
-InitRam                 =       $c181
-PutDecimal              =       $c184
-GetRandom               =       $c187
-MouseUp                 =       $c18a
-MouseOff                =       $c18d
-DoPreviousMenu          =       $c190
-ReDoMenu                =       $c193
-GetSerialNumber         =       $c196
-Sleep                   =       $c199
-ClearMouseMode          =       $c19c
-i_Rectangle             =       $c19f
-i_FrameRectangle        =       $c1a2
-i_RecoverRectangle      =       $c1a5
-i_GraphicsString        =       $c1a8
-i_BitmapUp              =       $c1ab
-i_PutString             =       $c1ae
-GetRealSize             =       $c1b1
-i_FillRam               =       $c1b4
-i_MoveData              =       $c1b7
-GetString               =       $c1ba
-GotoFirstMenu           =       $c1bd
-InitTextPrompt          =       $c1c0
-MainLoop                =       $c1c3
-DrawSprite              =       $c1c6
-GetCharWidth            =       $c1c9
-LoadCharSet             =       $c1cc
-PosSprite               =       $c1cf
-EnablSprite             =       $c1d2
-DisablSprite            =       $c1d5
-CallRoutine             =       $c1d8
-CalcBlksFree            =       $c1db
-ChkDkGEOS               =       $c1de
-NewDisk                 =       $c1e1
-GetBlock                =       $c1e4
-PutBlock                =       $c1e7
-SetGEOSDisk             =       $c1ea
-SaveFile                =       $c1ed
-SetGDirEntry            =       $c1f0
-BldGDirEntry            =       $c1f3
-GetFreeDirBlk           =       $c1f6
-WriteFile               =       $c1f9
-BlkAlloc                =       $c1fc
-ReadFile                =       $c1ff
-SmallPutChar            =       $c202
-FollowChain             =       $c205
-GetFile                 =       $c208
-FindFile                =       $c20b
-CRC                     =       $c20e
-LdFile                  =       $c211
-EnterTurbo              =       $c214
-LdDeskAcc               =       $c217
-ReadBlock               =       $c21a
-LdApplic                =       $c21d
-WriteBlock              =       $c220
-VerWriteBlock           =       $c223
-FreeFile                =       $c226
-GetFHdrInfo             =       $c229
-EnterDeskTop            =       $c22c
-StartAppl               =       $c22f
-ExitTurbo               =       $c232
-PurgeTurbo              =       $c235
-DeleteFile              =       $c238
-FindFTypes              =       $c23b
-RstrAppl                =       $c23e
-ToBASIC                 =       $c241
-FastDelFile             =       $c244
-GetDirHead              =       $c247
-PutDirHead              =       $c24a
-NxtBlkAlloc             =       $c24d
-ImprintRectangle        =       $c250
-i_ImprintRectangle      =       $c253
-DoDlgBox                =       $c256
-RenameFile              =       $c259
-InitForIO               =       $c25c
-DoneWithIO              =       $c25f
-DShiftRight             =       $c262
-CopyString              =       $c265
-CopyFString             =       $c268
-CmpString               =       $c26b
-CmpFString              =       $c26e
-FirstInit               =       $c271
-OpenRecordFile          =       $c274
-CloseRecordFile         =       $c277
-NextRecord              =       $c27a
-PreviousRecord          =       $c27d
-PointRecord             =       $c280
-DeleteRecord            =       $c283
-InsertRecord            =       $c286
-AppendRecord            =       $c289
-ReadRecord              =       $c28c
-WriteRecord             =       $c28f
-SetNextFree             =       $c292
-UpdateRecordFile        =       $c295
-GetPtrCurDkNm           =       $c298
-PromptOn                =       $c29b
-PromptOff               =       $c29e
-OpenDisk                =       $c2a1
-DoInlineReturn          =       $c2a4
-GetNextChar             =       $c2a7
-BitmapClip              =       $c2aa
-FindBAMBit              =       $c2ad
-SetDevice               =       $c2b0
-IsMseInRegion           =       $c2b3
-ReadByte                =       $c2b6
-FreeBlock               =       $c2b9
-ChangeDiskDevice        =       $c2bc
-RstrFrmDialogue         =       $c2bf
-Panic                   =       $c2c2
-BitOtherClip            =       $c2c5
-StashRAM                =       $c2c8
-FetchRAM                =       $c2cb
-SwapRAM                 =       $c2ce
-VerifyRAM               =       $c2d1
-DoRAMOp                 =       $c2d4
-
-;only in GEOS 128
-TempHideMouse           =       $c2d7
-SetMousePicture         =       $c2da
-SetNewMode              =       $c2dd
-NormalizeX              =       $c2e0
-MoveBData               =       $c2e3
-SwapBData               =       $c2e6
-VerifyBData             =       $c2e9
-DoBOp                   =       $c2ec
-AccessCache             =       $c2ef
-HideOnlyMouse           =       $c2f2
-SetColorMode            =       $c2f5
-ColorCard               =       $c2f8
-ColorRectangle          =       $c2fb
diff --git a/libsrc/geos-cbm/memory/fetchram.s b/libsrc/geos-cbm/memory/fetchram.s
deleted file mode 100644 (file)
index 2a841a0..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void FetchRAM (char REUBank, int length, char *from, char *dest);
-
-            .import REURegs
-            .export _FetchRAM
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_FetchRAM:
-        jsr REURegs
-        jmp FetchRAM
diff --git a/libsrc/geos-cbm/memory/reuregs.s b/libsrc/geos-cbm/memory/reuregs.s
deleted file mode 100644 (file)
index 3b90472..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 31.12.99
-
-            .import popax, popa
-            .import DoublePop
-            .export REURegs
-
-            .include "geossym.inc"
-
-REURegs:
-        jsr DoublePop
-        jsr popax
-        sta r2L
-        stx r2H
-        jsr popa
-        sta r3L
-        rts
-
diff --git a/libsrc/geos-cbm/memory/stashram.s b/libsrc/geos-cbm/memory/stashram.s
deleted file mode 100644 (file)
index 33a8da9..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void StashRAM (char REUBank, int length, char *dest, char *from);
-
-            .import REURegs
-            .export _StashRAM
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_StashRAM:
-        jsr REURegs
-        jmp StashRAM
diff --git a/libsrc/geos-cbm/memory/swapram.s b/libsrc/geos-cbm/memory/swapram.s
deleted file mode 100644 (file)
index 6d92a1e..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void SwapRAM (char REUBank, int length, char *reuaddy, char *cpuaddy);
-;       note that in all REU procs last two pointers are identified like here
-
-            .import REURegs
-            .export _SwapRAM
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_SwapRAM:
-        jsr REURegs
-        jmp SwapRAM
diff --git a/libsrc/geos-cbm/memory/verifyram.s b/libsrc/geos-cbm/memory/verifyram.s
deleted file mode 100644 (file)
index 1b8211d..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char VerifyRAM (char REUBank, int length, char *reuaddy, char *cpuaddy);
-
-            .import REURegs
-            .export _VerifyRAM
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_VerifyRAM:
-        jsr REURegs
-        jsr VerifyRAM
-        txa
-        ldx #0
-        rts
diff --git a/libsrc/geos-cbm/printdrv.inc b/libsrc/geos-cbm/printdrv.inc
deleted file mode 100644 (file)
index 1e8937c..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-
-;GEOS Printer Driver Jump Table
-;reassembled by Maciej 'YTM/Alliance' Witkowiak
-;4-2-99
-
-;jump table
-InitForPrint            =       $7900
-StartPrint              =       $7903
-PrintBuffer             =       $7906
-StopPrint               =       $7909
-GetDimensions           =       $790c
-PrinsASCII              =       $790f
-StartASCII              =       $7912
-SetNLQ                  =       $7915
diff --git a/libsrc/geos-cbm/system/get_ostype.s b/libsrc/geos-cbm/system/get_ostype.s
deleted file mode 100644 (file)
index 492ce13..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 10.09.2001
-;
-; Plus4 and GEOS 1.1 detection by
-; Marco van den Heuvel, 2010-02-02
-;
-
-; unsigned char get_ostype (void);
-; unsigned char get_tv (void);
-
-            .export _get_ostype
-            .export _get_tv
-            .importzp tmp1
-
-            .include "const.inc"
-            .include "geossym.inc"
-            .include "geossym2.inc"
-
-_get_ostype:
-        ldx #0
-        lda version
-        cmp #$a9
-        beq geos11
-        and #%11110000
-        cmp #$10
-        beq geos10
-        lda c128Flag            ; we're on at least 2.0
-        cmp #$18
-        beq geos_on_plus4
-        ora version
-        rts
-geos10:
-        lda version
-        rts
-geos11:
-        lda #$11
-        rts
-geos_on_plus4:
-        lda #$04
-        rts
-
-_get_tv:
-        jsr _get_ostype
-        cmp #$04
-        beq plus4_get_tv
-        bpl only40              ; C64 with 40 columns only
-        lda graphMode
-        bpl only40              ; C128 but currently on 40 columns
-        ldx #1                  ; COLUMNS80
-        bne tvmode
-only40: ldx #0                  ; COLUMNS40
-tvmode:                         ; PAL/NTSC check here, result in A
-        php
-        sei                     ; disable interrupts
-        lda CPU_DATA            ; this is for C64
-        pha
-        lda #IO_IN              ; enable access to I/O
-        sta CPU_DATA
-        bit rasreg
-        bpl tvmode              ; wait for rasterline  127<x<256
-        lda #24                 ; (rasterline now >=256!)
-modelp:
-        cmp rasreg              ; wait for rasterline = 24 (or 280 on PAL)
-        bne modelp
-        lda grcntrl1            ; 24 or 280 ?
-        bpl ntsc
-        lda #0                  ; PAL
-        beq modeend
-ntsc:
-        lda #$80                ; NTSC
-
-modeend:
-        stx tmp1
-        ora tmp1
-        sta tmp1
-        ldx #0
-        pla
-        sta CPU_DATA            ; restore memory config
-        plp                     ; restore interrupt state
-        lda tmp1
-        rts
-plus4_get_tv:
-        ldx #1                  ; Assume PAL
-        bit $FF07               ; Test bit 6
-        bvc plus4pal
-        dex                     ; NTSC
-plus4pal:
-        txa
-        ldx #0
-        rts
diff --git a/libsrc/geos-cbm/system/getserialnumber.s b/libsrc/geos-cbm/system/getserialnumber.s
deleted file mode 100644 (file)
index ec84ac3..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; int GetSerialNumber (void);
-
-            .export _GetSerialNumber
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_GetSerialNumber:
-        jsr GetSerialNumber
-        lda r0L
-        ldx r0H
-        rts
diff --git a/libsrc/geos-cbm/system/initdoneio.s b/libsrc/geos-cbm/system/initdoneio.s
deleted file mode 100644 (file)
index b5e5152..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void InitForIO  (void);
-; void DoneWithIO (void);
-
-            .export _InitForIO, _DoneWithIO
-
-            .include "jumptab.inc"
-
-_InitForIO      = InitForIO
-            
-_DoneWithIO     = DoneWithIO
\ No newline at end of file
diff --git a/libsrc/geos-cbm/system/libref.s b/libsrc/geos-cbm/system/libref.s
deleted file mode 100644 (file)
index 8d9ff3e..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Oliver Schmidt, 2013-05-31
-;
-
-        .export         em_libref, joy_libref, tgi_libref
-        .import         _exit
-
-em_libref       := _exit
-joy_libref      := _exit
-tgi_libref      := _exit
diff --git a/libsrc/geos-cbm/system/setdevice.s b/libsrc/geos-cbm/system/setdevice.s
deleted file mode 100644 (file)
index 37a1623..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void SetDevice (char newDeviceNumber);
-
-            .export _SetDevice
-
-            .include "jumptab.inc"
-        
-_SetDevice      = SetDevice
diff --git a/libsrc/geos-cbm/system/tobasic.s b/libsrc/geos-cbm/system/tobasic.s
deleted file mode 100644 (file)
index cb47da5..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void ToBASIC (void);
-
-            .export _ToBASIC
-
-            .include "jumptab.inc"
-
-_ToBASIC        = ToBASIC
\ No newline at end of file
diff --git a/libsrc/geos-cbm/tgi/geos-tgi.s b/libsrc/geos-cbm/tgi/geos-tgi.s
deleted file mode 100644 (file)
index 5a1af65..0000000
+++ /dev/null
@@ -1,683 +0,0 @@
-;
-; Graphics driver for the 320x200x2 and 640x200x2 modes on GEOS 64/128
-; 2010-08-17, Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
-; 2010-08-18, Greg King
-
-            .include "zeropage.inc"
-            .include "tgi-kernel.inc"
-            .include "tgi-error.inc"
-            .include "const.inc"
-            .include "jumptab.inc"
-            .include "geossym.inc"
-            .include "geossym2.inc"
-
-            .macpack generic
-            .macpack module
-
-
-; ------------------------------------------------------------------------
-; Constants
-
-VDC_ADDR_REG    := $D600        ; VDC address
-VDC_DATA_REG    := $D601        ; VDC data
-
-VDC_DSP_HI      = 12            ; registers used
-VDC_DSP_LO      = 13
-VDC_DATA_HI     = 18
-VDC_DATA_LO     = 19
-VDC_VSCROLL     = 24
-VDC_HSCROLL     = 25
-VDC_COLORS      = 26
-VDC_CSET        = 28
-VDC_COUNT       = 30
-VDC_DATA        = 31
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table and constants.
-
-        module_header   _geos_tgi_tgi
-
-; First part of the header is a structure that has a magic signature,
-; and defines the capabilities of the driver.
-
-        .byte $74, $67, $69     ; "tgi"
-        .byte TGI_API_VERSION   ; TGI API version number
-        .addr $0000             ; Library reference
-xres:   .word 320               ; X resolution
-yres:   .word 200               ; Y resolution
-        .byte 2                 ; Number of drawing colors
-pages:  .byte 1                 ; Number of screens available
-        .byte 8                 ; System font X size
-        .byte 8                 ; System font Y size
-aspect: .word $00D4             ; Aspect ratio (based on 4/3 display)
-        .byte 0                 ; TGI driver flags
-
-; Next comes the jump table. With the exception of IRQ, all entries must be
-; valid, and may point to an RTS for test versions (function not implemented).
-
-        .addr INSTALL
-        .addr UNINSTALL
-        .addr INIT
-        .addr DONE
-        .addr GETERROR
-        .addr CONTROL
-        .addr CLEAR
-        .addr SETVIEWPAGE
-        .addr SETDRAWPAGE
-        .addr SETCOLOR
-        .addr SETPALETTE
-        .addr GETPALETTE
-        .addr GETDEFPALETTE
-        .addr SETPIXEL
-        .addr GETPIXEL
-        .addr LINE
-        .addr BAR
-        .addr TEXTSTYLE
-        .addr OUTTEXT
-        .addr 0                 ; IRQ entry is unused
-
-; ------------------------------------------------------------------------
-; Data.
-
-; Variables mapped to the zero-page segment variables. Some of these are
-; used for passing parameters to the driver.
-
-X1      = ptr1
-Y1      = ptr2
-X2      = ptr3
-Y2      = ptr4
-
-; Absolute variables used in the code
-
-.bss
-
-SCRBASE:
-        .res 1                  ; High byte of screen base (64k VDC only)
-
-ERROR:  
-        .res 1                  ; Error code
-PALETTE:
-        .res 2                  ; The current palette
-
-BITMASK:
-        .res 1                  ; $00 = clear, $01 = set pixels
-
-OLDCOLOR:
-        .res 1                  ; colors before entering gfx mode
-
-; Text output stuff
-TEXTMAGX:
-        .res 1
-TEXTMAGY:
-        .res 1
-TEXTDIR:
-        .res 1
-
-; Constants and tables
-
-.rodata
-
-DEFPALETTE:
-        .byte $00, $0f          ; White on black
-PALETTESIZE     = * - DEFPALETTE
-
-; color translation table (indexed by VIC color)
-COLTRANS:
-        .byte $00, $0f, $08, $06, $0a, $04, $02, $0c
-        .byte $0d, $0b, $09, $01, $0e, $05, $03, $07
-        ; colors BROWN and GRAY3 are wrong
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. May
-; initialize anything that has to be done just once. Is probably empty
-; most of the time.
-;
-; Must set an error code: NO
-;
-
-INSTALL:
-        lda version             ; if GEOS 1.0...
-        and #$f0
-        cmp #$10
-        beq @L40
-        lda c128Flag            ; at least GEOS 2.0, but we're on C128?
-        bpl @L40
-        lda graphMode           ; GEOS 2.0, C128, but is 80 column screen enabled?
-        bmi @L80
-@L40:   rts                     ; leave default values for 40 column screen
-
-        ; check for VDC version and update register $19 value
-
-@L80:
-        ; double the x resolution and halve the aspect ratio
-
-        asl xres
-        rol xres+1
-
-        lsr aspect+1
-        ror aspect
-
-        ; update number of available screens
-
-        ldx #VDC_CSET           ; determine size of RAM...
-        jsr VDCReadReg
-        sta tmp1
-        ora #%00010000
-        jsr VDCWriteReg         ; turn on 64k
-
-        jsr settestadr1         ; save original value of test byte
-        jsr VDCReadByte
-        sta tmp2
-
-        lda #$55                ; write $55 here
-        ldy #ptr1
-        jsr test64k             ; read it here and there
-        lda #$aa                ; write $aa here
-        ldy #ptr2
-        jsr test64k             ; read it here and there
-
-        jsr settestadr1
-        lda tmp2
-        jsr VDCWriteByte        ; restore original value of test byte
-
-        lda ptr1                ; do bytes match?
-        cmp ptr1+1
-        bne @have64k
-        lda ptr2
-        cmp ptr2+1
-        bne @have64k
-
-        ldx #VDC_CSET
-        lda tmp1
-        jsr VDCWriteReg         ; restore 16/64k flag
-        jmp @endok              ; and leave default values for 16k
-
-@have64k:
-        lda #4
-        sta pages
-@endok:
-        lda #0
-        sta SCRBASE             ; draw page 0 as default
-        rts 
-
-test64k:    
-        sta tmp1
-        sty ptr3
-        lda #0
-        sta ptr3+1
-        jsr settestadr1
-        lda tmp1
-        jsr VDCWriteByte        ; write $55
-        jsr settestadr1
-        jsr VDCReadByte         ; read here
-        pha
-        jsr settestadr2
-        jsr VDCReadByte         ; and there
-        ldy #1
-        sta (ptr3),y
-        pla
-        dey
-        sta (ptr3),y
-        rts
-
-settestadr1:
-        ldy #$02                ; test page 2 (here)
-        .byte $2c
-settestadr2:
-        ldy #$42                ; or page 64+2 (there)
-        lda #0
-        jmp VDCSetSourceAddr
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory. May
-; clean up anything done by INSTALL but is probably empty most of the time.
-;
-; Must set an error code: NO
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; INIT: Changes an already installed device from text mode to graphics
-; mode.
-; Note that INIT/DONE may be called multiple times while the driver
-; is loaded, while INSTALL is only called once, so any code that is needed
-; to initializes variables and so on must go here. Setting palette and
-; clearing the screen is not needed because this is called by the graphics
-; kernel later.
-; The graphics kernel will never call INIT when a graphics mode is already
-; active, so there is no need to protect against that.
-;
-; Must set an error code: YES
-;
-
-INIT:
-        ldx #$01
-        stx BITMASK             ; solid black as pattern
-        lda #1
-        jsr SetPattern
-        lda #ST_WR_FORE         ; write only on foreground
-        sta dispBufferOn
-
-        lda graphMode
-        bmi @L80
-
-; Remember current color value (40 columns)
-        lda screencolors
-        sta OLDCOLOR
-        jmp @L99
-
-; Remember current color value (80 columns)
-@L80:   lda scr80colors
-        sta OLDCOLOR
-@L99:   lda #0
-        jsr SETVIEWPAGE         ; switch into viewpage 0
-
-; Done, reset the error code
-
-        lda #TGI_ERR_OK
-        sta ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; DONE: Will be called to switch the graphics device back into text mode.
-; The graphics kernel will never call DONE when no graphics mode is active,
-; so there is no need to protect against that.
-;
-; Must set an error code: NO
-;
-
-DONE:
-        lda #0
-        jsr SETVIEWPAGE         ; switch into viewpage 0
-
-        lda graphMode
-        bmi @L80
-
-        lda OLDCOLOR
-        sta screencolors        ; restore color for 40 columns
-        ldx #0
-@L1:    sta COLOR_MATRIX,x
-        sta COLOR_MATRIX+$0100,x
-        sta COLOR_MATRIX+$0200,x
-        sta COLOR_MATRIX+1000-256,x
-        inx
-        bne @L1
-        rts
-
-@L80:   lda OLDCOLOR            ; restore color for 80 columns
-        ldx #VDC_COLORS
-        jmp VDCWriteReg
-
-; ------------------------------------------------------------------------
-; GETERROR: Return the error code in A and clear it.
-
-GETERROR:
-        ldx #TGI_ERR_OK
-        lda ERROR
-        stx ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; CONTROL: Platform/driver specific entry point.
-;
-; Must set an error code: YES
-;
-
-CONTROL:
-        lda #TGI_ERR_INV_FUNC
-        sta ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; CLEAR: Clears the screen.
-;
-; Must set an error code: NO
-;
-
-CLEAR:
-        lda curPattern
-        pha
-        lda #0
-        jsr SetPattern
-        ldx #0
-        stx r3L
-        stx r3H
-        stx r2L
-        lda #199
-        sta r2H
-        lda graphMode
-        bpl @L40
-        lda #>639               ; 80 columns
-        ldx #<639
-        bne @L99
-@L40:   lda #>319               ; 40 columns
-        ldx #<319
-@L99:   sta r4H
-        stx r4L
-        jsr Rectangle
-        pla
-        sta curPattern
-        rts
-
-; ------------------------------------------------------------------------
-; SETVIEWPAGE: Set the visible page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-;
-; Must set an error code: NO (will only be called if page ok)
-;
-
-SETVIEWPAGE:
-        ldx graphMode
-        bmi @L80
-        rts
-@L80:   clc
-        ror
-        ror
-        ror
-        ldx #VDC_DSP_HI
-        jmp VDCWriteReg
-
-; ------------------------------------------------------------------------
-; SETDRAWPAGE: Set the drawable page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-;
-; Must set an error code: NO (will only be called if page ok)
-;
-
-SETDRAWPAGE:
-        ldx graphMode
-        bmi @L80
-        rts
-@L80:   clc
-        ror
-        ror
-        ror
-        sta SCRBASE
-        rts
-
-; ------------------------------------------------------------------------
-; SETCOLOR: Set the drawing color (in A). The new color is already checked
-; to be in a valid range (0..maxcolor-1).
-;
-; Must set an error code: NO (will only be called if color ok)
-;
-
-SETCOLOR:
-        tax
-        beq @L1
-        lda #1
-@L1:    sta BITMASK
-        jmp SetPattern          ; need to have either 0 or 1
-
-; ------------------------------------------------------------------------
-; SETPALETTE: Set the palette (not available with all drivers/hardware).
-; A pointer to the palette is passed in ptr1. Must set an error if palettes
-; are not supported
-;
-; Must set an error code: YES
-;
-
-SETPALETTE:
-        jsr GETERROR            ; clear error (if any)
-
-        ldy #PALETTESIZE - 1
-@L1:    lda (ptr1),y            ; Copy the palette
-        and #$0F                ; Make a valid color
-        sta PALETTE,y
-        dey
-        bpl @L1
-
-; Put colors from palette into screen
-
-        lda graphMode
-        bmi @L80
-
-        lda PALETTE+1           ; foreground
-        asl a
-        asl a
-        asl a
-        asl a
-        ora PALETTE             ; background
-        ldx #0
-@L2:    sta COLOR_MATRIX,x
-        sta COLOR_MATRIX+$0100,x
-        sta COLOR_MATRIX+$0200,x
-        sta COLOR_MATRIX+1000-256,x
-        inx
-        bne @L2
-        rts
-
-@L80:   ldy PALETTE+1           ; Foreground color
-        lda COLTRANS,y
-        asl a
-        asl a
-        asl a
-        asl a
-        ldy PALETTE             ; Background color
-        ora COLTRANS,y
-
-        ldx #VDC_COLORS
-        jmp VDCWriteReg
-
-; ------------------------------------------------------------------------
-; GETPALETTE: Return the current palette in A/X. Even drivers that cannot
-; set the palette should return the default palette here, so there's no
-; way for this function to fail.
-;
-; Must set an error code: NO
-;
-
-GETPALETTE:
-        lda #<PALETTE
-        ldx #>PALETTE
-        rts
-
-; ------------------------------------------------------------------------
-; GETDEFPALETTE: Return the default palette for the driver in A/X. All
-; drivers should return something reasonable here, even drivers that don't
-; support palettes, otherwise the caller has no way to determine the colors
-; of the (not changeable) palette.
-;
-; Must set an error code: NO (all drivers must have a default palette)
-;
-
-GETDEFPALETTE:
-        lda #<DEFPALETTE
-        ldx #>DEFPALETTE
-        rts
-
-; ------------------------------------------------------------------------
-; SETPIXEL: Draw one pixel at X1/Y1 = ptr1/ptr2 with the current drawing
-; color. The coordinates passed to this function are never outside the
-; visible screen area, so there is no need for clipping inside this function.
-;
-; Must set an error code: NO
-;
-
-SETPIXEL:
-        lda X1
-        ldx X1+1
-        ldy Y1
-        sta r3L
-        stx r3H
-        sty r11L
-        sec
-        lda BITMASK             ; set or clear C flag
-        bne @L1
-        clc
-@L1:    lda #0
-        jmp DrawPoint
-
-; ------------------------------------------------------------------------
-; GETPIXEL: Read the color value of a pixel and return it in A/X. The
-; coordinates passed to this function are never outside the visible screen
-; area, so there is no need for clipping inside this function.
-
-
-GETPIXEL:
-        lda X1
-        ldx X1+1
-        ldy Y1
-        sta r3L
-        stx r3H
-        sty r11L
-        jsr TestPoint
-        ldx #0
-        bcc @L1
-        inx
-@L1:    txa
-        ldx #0
-        rts
-
-; ------------------------------------------------------------------------
-; LINE: Draw a line from X1/Y1 to X2/Y2, where X1/Y1 = ptr1/ptr2 and
-; X2/Y2 = ptr3/ptr4 using the current drawing color.
-;
-; Must set an error code: NO
-;
-
-LINE:
-        lda X1
-        ldx X1+1
-        ldy Y1
-        sta r3L
-        stx r3H
-        sty r11L
-        lda X2
-        ldx X2+1
-        ldy Y2
-        sta r4L
-        stx r4H
-        sty r11H
-        sec
-        lda BITMASK             ; set or clear C flag
-        bne @L1
-        clc
-@L1:    lda #0
-        jmp DrawLine
-
-; ------------------------------------------------------------------------
-; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where
-; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4 using the current drawing color.
-; Contrary to most other functions, the graphics kernel will sort and clip
-; the coordinates before calling the driver, so on entry the following
-; conditions are valid:
-;       X1 <= X2
-;       Y1 <= Y2
-;       (X1 >= 0) && (X1 < XRES)
-;       (X2 >= 0) && (X2 < XRES)
-;       (Y1 >= 0) && (Y1 < YRES)
-;       (Y2 >= 0) && (Y2 < YRES)
-;
-; Must set an error code: NO
-;
-
-BAR:
-        lda X1
-        ldx X1+1
-        ldy Y1
-        sta r3L
-        stx r3H
-        sty r2L
-        lda X2
-        ldx X2+1
-        ldy Y2
-        sta r4L
-        stx r4H
-        sty r2H
-        jmp Rectangle
-
-; ------------------------------------------------------------------------
-; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scaling in X and Y
-; direction is passend in X/Y, the text direction is passed in A.
-;
-; Must set an error code: NO
-;
-
-TEXTSTYLE:
-        stx TEXTMAGX
-        sty TEXTMAGY
-        sta TEXTDIR
-        rts
-
-
-; ------------------------------------------------------------------------
-; OUTTEXT: Output text at X/Y = ptr1/ptr2 using the current color and the
-; current text style. The text to output is given as a zero terminated
-; string with address in ptr3.
-;
-; Must set an error code: NO
-;
-
-OUTTEXT:
-        lda TEXTDIR
-;       cmp #TGI_TEXT_HORIZONTAL ; this is equal 0
-        bne @vertical
-
-        lda X1                  ; horizontal text output
-        ldx X1+1
-        ldy Y1
-        sta r11L
-        stx r11H
-        sty r1H
-        lda ptr3
-        ldx ptr3+1
-        sta r0L
-        stx r0H
-        jmp PutString
-
-@vertical:
-        lda X1                  ; vertical text output
-        ldx X1+1
-        ldy Y1
-        sta r11L
-        stx r11H
-        sty r1H
-        ldy #0
-        lda (ptr3),y
-        beq @end
-        jsr PutChar
-        inc ptr3
-        bne @L1
-        inc ptr3+1
-@L1:    lda Y1
-        clc
-        adc #8
-        sta Y1
-        bne @vertical
-@end:   rts
-
-;-------------
-; VDC helpers
-
-VDCSetSourceAddr:
-        pha
-        tya
-        ldx #VDC_DATA_HI
-        jsr VDCWriteReg
-        pla
-        ldx #VDC_DATA_LO
-        bne VDCWriteReg
-
-VDCReadByte:
-        ldx #VDC_DATA
-VDCReadReg:
-        stx VDC_ADDR_REG
-@L0:    bit VDC_ADDR_REG
-        bpl @L0
-        lda VDC_DATA_REG
-        rts
-
-VDCWriteByte:
-        ldx #VDC_DATA
-VDCWriteReg:
-        stx VDC_ADDR_REG
-@L0:    bit VDC_ADDR_REG
-        bpl @L0
-        sta VDC_DATA_REG
-        rts
diff --git a/libsrc/geos-common/common/_afailed.c b/libsrc/geos-common/common/_afailed.c
deleted file mode 100644 (file)
index 2448534..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-** _afailed.c
-**
-** Maciej 'YTM/Elysium' Witkowiak 28.10.2001
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <geos.h>
-
-void _afailed (char* file, unsigned line)
-{
-    ExitTurbo();
-
-    drawWindow.top = 0;
-    drawWindow.left = 0;
-    drawWindow.bot = 15;
-    drawWindow.right = 150;
-    dispBufferOn = ST_WR_FORE|ST_WR_BACK;
-    SetPattern(0);
-    Rectangle();
-    FrameRectangle(0xff);
-
-    PutString(CBOLDON "file: ", 10, 10);
-    PutString(file, 10, r11);
-    PutString(CBOLDON "  line: ", 10, r11);
-    PutDecimal(0, line, 10, r11);
-
-    DlgBoxOk(CBOLDON "ASSERTION FAILED", "PROGRAM TERMINATED" CPLAINTEXT);
-
-    exit (2);
-}
diff --git a/libsrc/geos-common/common/_poserror.c b/libsrc/geos-common/common/_poserror.c
deleted file mode 100644 (file)
index eeb3f36..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-** _poserror.c
-**
-** Maciej 'YTM/Elysium' Witkowiak, 25.04.2003
-*/
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <geos.h>
-
-void __fastcall__ _poserror (const char* msg)
-{
-    const char *errmsg = _stroserror(_oserror);
-
-    ExitTurbo();
-    if (msg && *msg) {
-        DlgBoxOk(msg, errmsg);
-    } else {
-        DlgBoxOk("", errmsg);
-    }
-}
diff --git a/libsrc/geos-common/common/abort.c b/libsrc/geos-common/common/abort.c
deleted file mode 100644 (file)
index b7cb35e..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-** abort.c
-**
-** Maciej 'YTM/Elysium' Witkowiak 15.7.2001
-*/
-
-#include <stdlib.h>
-#include <geos.h>
-
-void abort (void)
-{
-    ExitTurbo();
-    DlgBoxOk(CBOLDON "ABNORMAL PROGRAM", "TERMINATION." CPLAINTEXT);
-    exit(3);
-}
diff --git a/libsrc/geos-common/common/copydata.s b/libsrc/geos-common/common/copydata.s
deleted file mode 100644 (file)
index ba2cf80..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak 15.07.2001
-;
-; Copy the data segment from the LOAD to the RUN location
-;
-
-            .export copydata
-            .import __DATA_LOAD__, __DATA_RUN__, __DATA_SIZE__
-
-            .include "geossym.inc"
-            .include "jumptab.inc"
-
-copydata:
-        lda #<__DATA_SIZE__     ; no need to check if it is == 0
-        ldx #>__DATA_SIZE__
-        sta r2L
-        stx r2H
-
-        lda #<__DATA_RUN__
-        ldx #>__DATA_RUN__
-        sta r1L
-        stx r1H
-
-        lda #<__DATA_LOAD__
-        ldx #>__DATA_LOAD__
-        sta r0L
-        stx r0H
-        jmp MoveData
diff --git a/libsrc/geos-common/common/memcpy.s b/libsrc/geos-common/common/memcpy.s
deleted file mode 100644 (file)
index 7dcd0d6..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; void* __fastcall__ memcpy (void* dest, const void* src, size_t n);
-;
-; Maciej 'YTM/Elysium' Witkowiak, 15.07.2001
-;
-
-            .export _memcpy
-            .import _MoveData
-
-_memcpy         = _MoveData
diff --git a/libsrc/geos-common/common/memmove.s b/libsrc/geos-common/common/memmove.s
deleted file mode 100644 (file)
index 4fceb5a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; void* __fastcall__ memmove (void* dest, const void* src, size_t n);
-;
-; Maciej 'YTM/Elysium' Witkowiak, 15.07.2001
-;
-
-            .export _memmove
-            .import _MoveData
-
-_memmove        = _MoveData
diff --git a/libsrc/geos-common/common/memset.s b/libsrc/geos-common/common/memset.s
deleted file mode 100644 (file)
index 2cb6732..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; void* memset (void* ptr, int c, size_t n);
-; void* _bzero (void* ptr, size_t n);
-; void bzero (void* ptr, size_t n);
-;
-; Maciej 'YTM/Elysium' Witkowiak, 20.08.2003
-;
-
-            .export _memset, _bzero, __bzero
-            .import _ClearRam, _FillRam
-
-_bzero          = _ClearRam
-__bzero         = _ClearRam
-_memset         = _FillRam
diff --git a/libsrc/geos-common/common/perror.c b/libsrc/geos-common/common/perror.c
deleted file mode 100644 (file)
index 5c6ec21..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-** perror.c
-**
-** Maciej 'YTM/Elysium' Witkowiak, 15.07.2001
-*/
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <geos.h>
-
-void __fastcall__ perror(const char* msg)
-{
-    const char *errmsg = strerror(errno);
-
-    ExitTurbo();
-    if (msg && *msg) {
-        DlgBoxOk(msg, errmsg);
-    } else {
-        DlgBoxOk("", errmsg);
-    }
-}
diff --git a/libsrc/geos-common/common/sleep.c b/libsrc/geos-common/common/sleep.c
deleted file mode 100644 (file)
index ea18f8e..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-** sleep.c
-**
-** Maciej 'YTM/Elysium' Witkowiak, 16.08.2003
-**
-*/
-
-#include <geos.h>
-
-unsigned __fastcall__ sleep (unsigned wait)
-{
-    char typ;
-
-    if ( (get_tv()) & TV_NTSC ) {
-        typ = 60;
-    } else {
-        typ = 50;
-    }
-
-    Sleep(wait*typ);
-
-    return 0;
-}
diff --git a/libsrc/geos-common/common/zerobss.s b/libsrc/geos-common/common/zerobss.s
deleted file mode 100644 (file)
index 48fc5a8..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
-; 23.12.2002
-;
-; Zero the bss segment.
-;
-
-            .export zerobss
-            .import __BSS_RUN__, __BSS_SIZE__
-            
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-zerobss:
-        lda #<__BSS_SIZE__
-        ldx #>__BSS_SIZE__
-        sta r0L
-        stx r0H
-        lda #<__BSS_RUN__
-        ldx #>__BSS_RUN__
-        sta r1L
-        stx r1H
-        jmp ClearRam
diff --git a/libsrc/geos-common/conio/_scrsize.s b/libsrc/geos-common/conio/_scrsize.s
deleted file mode 100644 (file)
index 01aac96..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; Screen size variables
-;
-; 6.3.2001, 17.4.2003
-
-
-        .export xsize, ysize
-        .export screensize
-        .importzp cursor_r, cursor_c
-        .import _cursor
-        .constructor initscrsize
-                      
-        .include "geossym.inc"
-
-.segment        "INIT"
-
-initscrsize:
-.ifdef __GEOS_CBM__
-        lda graphMode
-        bpl L1
-        lda #80                 ; 80 columns (more or less)
-        .byte $2c
-L1:     lda #40                 ; 40 columns (more or less)
-        sta xsize
-        lda #25                 ; something like that for Y size
-.else
-        lda #70                 ; 70 columns (more or less)
-        sta xsize
-        lda #24                 ; something like that for Y size
-.endif
-        sta ysize
-        lda #0
-        sta cursor_c
-        sta cursor_r
-        jmp _cursor             ; home and update cursor
-
-.code
-
-screensize: 
-        ldx xsize
-        ldy ysize
-        rts
-
-.bss
-
-xsize:
-        .res 1
-ysize:
-        .res 1
diff --git a/libsrc/geos-common/conio/cclear.s b/libsrc/geos-common/conio/cclear.s
deleted file mode 100644 (file)
index 9857f70..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 06.03.2002
-
-; void cclearxy (unsigned char x, unsigned char y, unsigned char length);
-; void cclear (unsigned char length);
-
-            .export _cclearxy, _cclear
-            .import popa, _gotoxy, fixcursor
-            .importzp cursor_x, cursor_y, cursor_c
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_cclearxy:
-        pha                     ; Save the length
-        jsr popa                ; Get y
-        jsr _gotoxy             ; Call this one, will pop params
-        pla                     ; Restore the length
-
-_cclear:
-        cmp #0                  ; Is the length zero?
-        beq L9                  ; Jump if done
-        tax
-        lda cursor_x            ; left start
-        sta r3L
-        lda cursor_x+1
-        sta r3L+1
-        lda cursor_y            ; level
-        sta r2L
-        clc
-        adc #7
-        sta r2H
-        txa                     ; right end
-        clc
-        adc cursor_c
-        sta cursor_c
-        sta r4L
-        ldx #r4
-        ldy #3
-        jsr DShiftLeft
-        clc                     ; one pixel less
-        lda r4L
-        sbc #0
-        sta r4L
-        lda r4L+1
-        sbc #0
-        sta r4L+1
-        lda curPattern          ; store current pattern
-        pha
-        lda #0                  ; set pattern to clear
-        jsr SetPattern
-        jsr Rectangle
-        pla
-        jsr SetPattern          ; restore pattern
-        jsr fixcursor
-L9:     rts
diff --git a/libsrc/geos-common/conio/cgetc.s b/libsrc/geos-common/conio/cgetc.s
deleted file mode 100644 (file)
index ad6e8ee..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 27.10.2001
-; 06.03.2002
-
-; unsigned char cgetc (void);
-
-            .export _cgetc
-            .import cursor, _PromptOff
-            .importzp cursor_x, cursor_y
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_cgetc:
-; show cursor if needed
-        lda cursor
-        beq L0
-
-; prepare cursor
-        lda #7
-        jsr InitTextPrompt
-        lda cursor_x
-        ldx cursor_x+1
-        sta stringX
-        stx stringX+1
-        lda cursor_y
-        sta stringY
-        jsr PromptOn
-
-L0:     jsr GetNextChar
-        tax
-        beq L0
-        pha
-        jsr _PromptOff
-        pla
-        ldx #0
-        rts
diff --git a/libsrc/geos-common/conio/chline.s b/libsrc/geos-common/conio/chline.s
deleted file mode 100644 (file)
index 328d01a..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 06.03.2002
-
-; void chlinexy (unsigned char x, unsigned char y, unsigned char length);
-; void chline (unsigned char length);
-
-            .export _chlinexy, _chline
-            .import popa, _gotoxy, fixcursor
-            .importzp cursor_x, cursor_y, cursor_c
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_chlinexy:
-        pha                     ; Save the length
-        jsr popa                ; Get y
-        jsr _gotoxy             ; Call this one, will pop params
-        pla                     ; Restore the length
-
-_chline:
-        cmp #0                  ; Is the length zero?
-        beq L9                  ; Jump if done
-        tax
-        lda cursor_x            ; left start
-        sta r3L
-        lda cursor_x+1
-        sta r3L+1
-        lda cursor_y            ; level
-        clc
-        adc #4                  ; in the middle of a cell
-        sta r11L
-        txa                     ; right end
-        clc
-        adc cursor_c
-        sta cursor_c
-        sta r4L
-        lda #0
-        sta r4L+1
-        ldx #r4
-        ldy #3
-        jsr DShiftLeft
-        clc                     ; one pixel less
-        lda r4L
-        sbc #0
-        sta r4L
-        lda r4L+1
-        sbc #0
-        sta r4L+1
-        lda #%11111111          ; pattern
-        jsr HorizontalLine
-        jsr fixcursor
-L9:     rts
diff --git a/libsrc/geos-common/conio/clrscr.s b/libsrc/geos-common/conio/clrscr.s
deleted file mode 100644 (file)
index 8df390b..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 27.10.2001, 23.12.2002
-
-; void clrscr (void);
-
-            .export _clrscr
-            .import fixcursor
-            .importzp cursor_c, cursor_r
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-            .include "const.inc"
-
-_clrscr:
-        lda curPattern          ; save current pattern
-        pha
-        lda #0                  ; set pattern to clear
-        jsr SetPattern
-        ldx #0
-        stx r3L
-        stx r3H
-        stx r2L
-        stx cursor_c
-        stx cursor_r
-        jsr fixcursor           ; home cursor
-.ifdef __GEOS_CBM__
-        lda #199
-        sta r2H
-        lda graphMode
-        bpl L40
-        lda #>639               ; 80 columns
-        ldx #<639
-        bne L99
-L40:    lda #>319               ; 40 columns
-        ldx #<319
-L99:
-.else
-        lda #191
-        sta r2H
-        lda #>559
-        ldx #<559
-.endif
-        sta r4H
-        stx r4L
-        jsr Rectangle
-        pla
-        jmp SetPattern          ; restore pattern
diff --git a/libsrc/geos-common/conio/cputc.s b/libsrc/geos-common/conio/cputc.s
deleted file mode 100644 (file)
index 55674d5..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 27.10.2001
-; 06.03.2002
-; 25.07.2005
-
-; void cputcxy (unsigned char x, unsigned char y, char c);
-; void cputc (char c);
-
-; TODO:
-; TAB (should be implemented)
-; other special characters directly from keyboard are unsafe, though some might be
-; implemented:
-; HOME, UPLINE, ULINEON, ULINEOFF, REV_ON, REV_OFF, BOLDON, ITALICON, OUTLINEON, PLAINTEXT
-; and cursor movement, maybe stuff like INSERT too
-;
-; these must be ignored:
-; ESC_GRAPHICS, ESC_RULER, GOTOX, GOTOY, GOTOXY, NEWCARDSET, all 1..8
-;
-; note that there are conflicts between control characters and keyboard:
-; HOME = KEY_ENTER, KEY_HOME = REV_ON, 
-; UPLINE = ?, KEY_UPARROW = GOTOY, ...
-
-            .export _cputcxy, _cputc
-            .import _gotoxy, fixcursor
-            .import popa
-            .import xsize,ysize
-            .importzp cursor_x, cursor_y, cursor_c, cursor_r
-
-            .include "const.inc"
-            .include "geossym.inc"
-            .include "jumptab.inc"
-
-_cputcxy:
-        pha                     ; Save C
-        jsr popa                ; Get Y
-        jsr _gotoxy             ; Set cursor, drop x
-        pla                     ; Restore C
-
-; Plot a character - also used as internal function
-
-_cputc:
-        tax                     ; save character
-; some characters 0-31 are not safe for PutChar
-        cmp #$20
-        bcs L1
-        cmp #CR
-        beq do_cr
-        cmp #LF
-        beq do_lf
-        cmp #KEY_DELETE
-        bne L0
-        ldx #BACKSPACE
-        sec
-        bcs L2
-L0:     rts
-
-L1:     clc
-L2:     php
-        lda cursor_x
-        sta r11L
-        lda cursor_x+1
-        sta r11H
-        lda cursor_y
-        clc
-        adc #6                  ; 6 pixels down to the baseline
-        sta r1H
-        txa
-        jsr PutChar
-        plp
-        bcs fix_cursor
-
-        inc cursor_c
-        lda cursor_c
-        cmp xsize               ; hit right margin?
-        bne fix_cursor
-        lda #0                  ; yes - do cr+lf
-        sta cursor_c
-do_lf:  inc cursor_r
-        lda cursor_r
-        cmp ysize               ; hit bottom margin?
-        bne fix_cursor
-        dec cursor_r            ; yes - stay in the last line
-
-fix_cursor:
-        jmp fixcursor
-
-do_cr:  lda #0
-        sta cursor_c
-        beq fix_cursor
diff --git a/libsrc/geos-common/conio/cvline.s b/libsrc/geos-common/conio/cvline.s
deleted file mode 100644 (file)
index ade7f34..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 06.03.2002
-
-; void cvlinexy (unsigned char x, unsigned char y, unsigned char length);
-; void cvline (unsigned char length);
-
-            .export _cvlinexy, _cvline
-            .import popa, _gotoxy, fixcursor
-            .importzp cursor_x, cursor_y, cursor_r
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_cvlinexy:
-        pha                     ; Save the length
-        jsr popa                ; Get y
-        jsr _gotoxy             ; Call this one, will pop params
-        pla                     ; Restore the length
-
-_cvline:    
-        cmp #0                  ; Is the length zero?
-        beq L9                  ; Jump if done
-        tax
-        lda cursor_x            ; x position
-        clc
-        adc #3                  ; in the middle of cell
-        sta r4L
-        lda cursor_x+1
-        adc #0
-        sta r4L+1
-        lda cursor_y            ; top start
-        sta r3L
-        txa                     ; bottom end
-        clc
-        adc cursor_r
-        sta cursor_r
-        asl a
-        asl a
-        asl a
-        clc                     ; one pixel less
-        sbc #0
-        sta r3H
-        lda #%11111111          ; pattern
-        jsr VerticalLine
-        jsr fixcursor
-L9:     rts
diff --git a/libsrc/geos-common/conio/dummies.s b/libsrc/geos-common/conio/dummies.s
deleted file mode 100644 (file)
index e747c64..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 27.10.2001
-
-; unsigned char __fastcall__ textcolor (unsigned char color);
-; unsigned char __fastcall__ bgcolor (unsigned char color);
-; unsigned char __fastcall__ bordercolor (unsigned char color);
-; unsigned char __fastcall__ revers (unsigned char onoff);
-;
-
-            .export _textcolor, _bgcolor, _bordercolor, _revers
-            .import return0
-
-_textcolor      = return0
-_bgcolor        = return0
-_bordercolor    = return0
-_revers         = return0
diff --git a/libsrc/geos-common/conio/gotoxy.s b/libsrc/geos-common/conio/gotoxy.s
deleted file mode 100644 (file)
index 48b413d..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 27.10.2001
-; 06.03.2002
-
-; void gotox (unsigned char x);
-; void gotoy (unsigned char y);
-; void gotoxy (unsigned char x, unsigned char y);
-
-            .export _gotox, _gotoy, _gotoxy, fixcursor
-            .import popa
-            .importzp cursor_x, cursor_y, cursor_c, cursor_r
-
-            .include "jumptab.inc"
-
-_gotox:
-        sta cursor_c
-        jmp fixcursor
-
-_gotoy:
-        sta cursor_r
-        jmp fixcursor
-
-_gotoxy:
-        sta cursor_r
-        jsr popa
-        sta cursor_c
-
-; convert 8x8 x/y coordinates to GEOS hires
-fixcursor:
-        lda cursor_c
-        sta cursor_x
-        lda #0
-        sta cursor_x+1
-        ldx #cursor_x
-        ldy #3
-        jsr DShiftLeft
-        lda cursor_r
-        asl a
-        asl a
-        asl a
-        sta cursor_y
-        rts
diff --git a/libsrc/geos-common/conio/kbhit.s b/libsrc/geos-common/conio/kbhit.s
deleted file mode 100644 (file)
index e93d8cc..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 27.10.2001
-
-; unsigned char kbhit (void);
-
-            .export _kbhit
-
-            .include "geossym.inc"
-
-_kbhit:
-        ldx #0                  ; High byte of result
-        lda pressFlag
-        rol                     ; Bit 7 is new key flag
-        txa                     ; A = 0
-        rol
-        rts
diff --git a/libsrc/geos-common/conio/where.s b/libsrc/geos-common/conio/where.s
deleted file mode 100644 (file)
index f6a06dd..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 27.10.2001
-; 06.03.2002
-; 02.01.2003
-
-; unsigned char wherex (void);
-; unsigned char wherey (void);
-
-            .export _wherex, _wherey
-            .importzp cursor_c, cursor_r
-
-_wherex:
-        lda cursor_c
-        ldx #0
-        rts
-
-_wherey:
-        lda cursor_r
-        ldx #0
-        rts
diff --git a/libsrc/geos-common/const.inc b/libsrc/geos-common/const.inc
deleted file mode 100644 (file)
index c0294e0..0000000
+++ /dev/null
@@ -1,441 +0,0 @@
-;
-;GeosConst - various system constans sorted by function
-;reassembled by Maciej 'YTM/Elysium' Witkowiak
-;4-2-99, 18-3-99
-
-NULL                    =       0
-FALSE                   =       NULL
-TRUE                    =       $ff
-
-MOUSE_SPRNUM            =       0
-
-DISK_DRV_LGH            =       $0d80
-
-;
-;filetypes
-;       GEOS
-NOT_GEOS                =       0
-BASIC                   =       1
-ASSEMBLY                =       2
-DATA                    =       3
-SYSTEM                  =       4
-DESK_ACC                =       5
-APPLICATION             =       6
-APPL_DATA               =       7
-FONT                    =       8
-PRINTER                 =       9
-INPUT_DEVICE            =       10
-DISK_DEVICE             =       11
-SYSTEM_BOOT             =       12
-TEMPORARY               =       13
-AUTO_EXEC               =       14
-INPUT_128               =       15
-NUMFILETYPES            =       16
-;       structure
-SEQUENTIAL              =       0
-VLIR                    =       1
-;       DOS
-DEL                     =       0
-SEQ                     =       1
-PRG                     =       2
-USR                     =       3
-REL                     =       4
-CBM                     =       5
-
-;drivetypes
-DRV_NULL                =       0
-DRV_1541                =       1
-DRV_1571                =       2
-DRV_1581                =       3
-DRV_NETWORK             =       15
-
-;various disk
-REL_FILE_NUM            =       9
-CMND_FILE_NUM           =       15
-MAX_CMND_STR            =       32
-DIR_1581_TRACK          =       40
-DIR_ACC_CHAN            =       13
-DIR_TRACK               =       18
-N_TRACKS                =       35
-DK_NM_ID_LEN            =       18
-TRACK                   =       9
-SECTOR                  =       12
-TOTAL_BLOCKS            =       664
-
-;colours
-BLACK                   =       0
-WHITE                   =       1
-RED                     =       2
-CYAN                    =       3
-PURPLE                  =       4
-GREEN                   =       5
-BLUE                    =       6
-YELLOW                  =       7
-ORANGE                  =       8
-BROWN                   =       9
-LTRED                   =       10
-DKGREY                  =       11
-GREY                    =       12
-MEDGREY                 =       12
-LTGREEN                 =       13
-LTBLUE                  =       14
-LTGREY                  =       15
-
-;vic memory banks
-GRBANK0                 =       %11
-GRBANK1                 =       %10
-GRBANK2                 =       %01
-GRBANK3                 =       %00
-
-;screen
-VIC_X_POS_OFF           =       24
-VIC_Y_POS_OFF           =       50
-SC_BYTE_WIDTH           =       40
-.ifdef __GEOS_CBM__
-SC_PIX_HEIGHT           =       200
-SC_PIX_WIDTH            =       320
-.else
-SC_PIX_HEIGHT           =       192
-SC_PIX_WIDTH            =       560
-.endif
-SC_SIZE                 =       8000
-;128 screen size constants
-SCREENBYTEWIDTH         =       80
-SCREENPIXELWIDTH        =       640
-
-
-;control characters
-EOF                     =       0
-BACKSPACE               =       8
-FORWARDSPACE            =       9
-TAB                     =       9
-LF                      =       10
-HOME                    =       11
-PAGE_BREAK              =       12
-UPLINE                  =       12
-CR                      =       13
-ULINEON                 =       14
-ULINEOFF                =       15
-ESC_GRAPHICS            =       16
-ESC_RULER               =       17
-REV_ON                  =       18
-REV_OFF                 =       19
-GOTOX                   =       20
-GOTOY                   =       21
-GOTOXY                  =       22
-NEWCARDSET              =       23
-BOLDON                  =       24
-ITALICON                =       25
-OUTLINEON               =       26
-PLAINTEXT               =       27
-
-;keyboard
-KEY_F1                  =       1
-KEY_F2                  =       2
-KEY_F3                  =       3
-KEY_F4                  =       4
-KEY_F5                  =       5
-KEY_F6                  =       6
-KEY_NOSCRL              =       7
-KEY_ENTER               =       11
-KEY_F7                  =       14
-KEY_F8                  =       15
-KEY_UP                  =       16
-KEY_DOWN                =       17
-KEY_HOME                =       18
-KEY_CLEAR               =       19
-KEY_LARROW              =       20
-KEY_UPARROR             =       21
-KEY_STOP                =       22
-KEY_RUN                 =       23
-KEY_BPS                 =       24
-KEY_HELP                =       25
-KEY_ALT                 =       26
-KEY_ESC                 =       27
-KEY_INSERT              =       28
-KEY_DELETE              =       29
-KEY_RIGHT               =       30
-KEY_INVALID             =       31
-KEY_LEFT                =       BACKSPACE
-
-;DialogBox
-;       icons
-OK                      =       1
-CANCEL                  =       2
-YES                     =       3
-NO                      =       4
-OPEN                    =       5
-DISK                    =       6
-;       commands
-DBTXTSTR                =       11
-DBVARSTR                =       12
-DBGETSTRING             =       13
-DBSYSOPV                =       14
-DBGRPHSTR               =       15
-DBGETFILES              =       16
-DBOPVEC                 =       17
-DBUSRICON               =       18
-DB_USR_ROUT             =       19
-;       tabulation in standard window
-DBI_X_0                 =       1
-DBI_X_1                 =       9
-DBI_X_2                 =       17
-DBI_Y_0                 =       8
-DBI_Y_1                 =       40
-DBI_Y_2                 =       72
-;       standard window
-SET_DB_POS              =       0
-DEF_DB_POS              =       $80
-DEF_DB_TOP              =       32
-DEF_DB_BOT              =       127
-DEF_DB_LEFT             =       64
-DEF_DB_RIGHT            =       255
-;       text tabulation
-TXT_LN_1_Y              =       16
-TXT_LN_2_Y              =       32
-TXT_LN_3_Y              =       48
-TXT_LN_4_Y              =       64
-TXT_LN_5_Y              =       80
-TXT_LN_X                =       16
-;       ???
-SYSDBI_HEIGHT           =       16
-SYSDBI_WIDTH            =       6
-
-;GraphicsString - commands
-MOVEPENTO               =       1
-LINETO                  =       2
-RECTANGLETO             =       3
-NEWPATTERN              =       5
-ESC_PUTSTRING           =       6
-FRAME_RECTO             =       7
-PEN_X_DELTA             =       8
-PEN_Y_DELTA             =       9
-PEN_XY_DELTA            =       10
-
-
-;DoMenu - menutypes
-MENU_ACTION             =       $00
-DYN_SUB_MENU            =       $40
-SUB_MENU                =       $80
-HORIZONTAL              =       %00000000
-VERTICAL                =       %10000000
-
-;Errors
-ANY_FAULT               =       %11110000
-NO_BLOCKS               =       1
-INV_TRACK               =       2
-INSUFF_SPACE            =       3
-FULL_DIRECTORY          =       4
-FILE_NOT_FOUND          =       5
-BAD_BAM                 =       6
-UNOPENED_VLIR           =       7
-INV_RECORD              =       8
-OUT_OF_RECORDS          =       9
-STRUCT_MISMAT           =       10
-BFR_OVERFLOW            =       11
-CANCEL_ERR              =       12
-DEV_NOT_FOUND           =       13
-INCOMPATIBLE            =       14
-HDR_NOT_THERE           =       $20
-NO_SYNC                 =       $21
-DBLK_NOT_THERE          =       $22
-DAT_CHKSUM_ERR          =       $23
-WR_VER_ERR              =       $25
-WR_PR_ON                =       $26
-HDR_CHKSUM_ERR          =       $27
-DSK_ID_MISMAT           =       $29
-BYTE_DEC_ERR            =       $2e
-DOS_MISMATCH            =       $73
-
-;Offsets
-;       ???
-OFF_INDEX_PTR           =       1
-;       icons
-OFF_NM_ICNS             =       0
-OFF_IC_XMOUSE           =       1
-OFF_IC_YMOUSE           =       3
-OFF_PIC_ICON            =       0
-OFF_X_ICON_POS          =       2
-OFF_Y_ICON_POS          =       3
-OFF_WDTH_ICON           =       4
-OFF_HEIGHT_ICON         =       5
-OFF_SRV_RT_ICON         =       6
-OFF_NX_ICON             =       8
-;       menu
-OFF_MY_TOP              =       0
-OFF_MY_BOT              =       1
-OFF_MX_LEFT             =       2
-OFF_MX_RIGHT            =       4
-OFF_NUM_M_ITEMS         =       6
-OFF_1ST_M_ITEM          =       7
-;       dialog box
-OFF_DB_FORM             =       0
-OFF_DB_TOP              =       1
-OFF_DB_BOT              =       2
-OFF_DB_LEFT             =       3
-OFF_DB_RIGHT            =       5
-OFF_DB_1STCMD           =       7
-;       directory
-;               disk header
-OFF_TO_BAM              =       4
-OFF_DISK_NAME           =       144
-OFF_GS_DTYPE            =       189
-OFF_OP_TR_SC            =       171
-OFF_GS_ID               =       173
-;               dir entry
-.ifdef __GEOS_CBM__
-FRST_FILE_ENTRY         =       2
-OFF_CFILE_TYPE          =       0
-OFF_DE_TR_SC            =       1
-OFF_FNAME               =       3
-OFF_GHDR_PTR            =       19
-OFF_GSTRUC_TYPE         =       21
-OFF_GFILE_TYPE          =       22
-OFF_YEAR                =       23
-OFF_SIZE                =       28
-OFF_NXT_FILE            =       32
-.else
-FRST_FILE_ENTRY         =       43
-OFF_GSTRUC_TYPE         =       0
-OFF_FNAME               =       1
-OFF_GFILE_TYPE          =       16
-OFF_DE_TR_SC            =       17
-OFF_SIZE                =       21
-OFF_YEAR                =       25
-OFF_GHDR_PTR            =       31
-OFF_NXT_FILE            =       39
-.endif
-;               file header
-O_GHIC_WIDTH            =       2
-O_GHIC_HEIGHT           =       3
-O_GHIC_PIC              =       4
-O_GHCMDR_TYPE           =       68
-O_GHGEOS_TYPE           =       69
-O_GHSTR_TYPE            =       70
-O_GHST_ADDR             =       71
-O_GHEND_ADDR            =       73
-O_GHST_VEC              =       75
-O_GHFNAME               =       77
-O_128_FLAGS             =       96
-O_GH_AUTHOR             =       97
-O_GHP_DISK              =       97
-O_GHP_FNAME             =       117
-O_GHINFO_TXT            =       $a0
-
-; values for CPU_DATA - C64 memory config
-RAM_64K                 =       $30     ;64K RAM
-IO_IN                   =       $35     ;60K RAM, 4K I/O space in
-KRNL_IO_IN              =       $36     ;kernal and I/O mapped into memory
-KRNL_BAS_IO_IN          =       $37     ;kernal, I/O and basic mapped into memory
-
-;values for config - C128 mmu
-CIOIN                   =       $7E     ;60K RAM, 4K I/O space in
-CRAM64K                 =       $7F     ;64K RAM
-CKRNLBASIOIN            =       $40     ;kernal, I/O and basic ROM's mapped into memory
-CKRNLIOIN               =       $4E     ;Kernal ROM and I/O space mapped in
-
-;values of faultData - pointer position vs. mouseTop/Bottom/Left/Right
-;       bit numbers
-OFFTOP_BIT              =       7
-OFFBOTTOM_BIT           =       6
-OFFLEFT_BIT             =       5
-OFFRIGHT_BIT            =       4
-OFFMENU_BIT             =       3
-;       masks
-SET_OFFTOP              =       %10000000
-SET_OFFBOTTOM           =       %01000000
-SET_OFFLEFT             =       %00100000
-SET_OFFRIGHT            =       %00010000
-SET_OFFMENU             =       %00001000
-
-;values of currentMode
-;       bit numbers
-UNDERLINE_BIT           =       7
-BOLD_BIT                =       6
-REVERSE_BIT             =       5
-ITALIC_BIT              =       4
-OUTLINE_BIT             =       3
-SUPERSCRIPT_BIT         =       2
-SUBSCRIPT_BIT           =       1
-;       masks
-SET_UNDERLINE           =       %10000000
-SET_BOLD                =       %01000000
-SET_REVERSE             =       %00100000
-SET_ITALIC              =       %00010000
-SET_OUTLINE             =       %00001000
-SET_SUPERSCRIPT         =       %00000100
-SET_SUBSCRIPT           =       %00000010
-SET_PLAINTEXT           =       %00000000
-
-;Process control variable
-;       bit numbers
-RUNABLE_BIT             =       7
-BLOCKED_BIT             =       6
-FROZEN_BIT              =       5
-NOTIMER_BIT             =       4
-;       masks
-SET_RUNABLE             =       %10000000
-SET_BLOCKED             =       %01000000
-SET_FROZEN              =       %00100000
-SET_NOTIMER             =       %00010000
-
-;mouseOn
-;       bit numbers
-MOUSEON_BIT             =       7
-MENUON_BIT              =       6
-ICONSON_BIT             =       5
-;       masks
-SET_MSE_ON              =       %10000000
-SET_MENUON              =       %01000000
-SET_ICONSON             =       %00100000
-
-;pressFlag
-;       bit numbers
-KEYPRESS_BIT            =       7
-INPUT_BIT               =       6
-MOUSE_BIT               =       5
-;       masks
-SET_KEYPRESS            =       %10000000
-SET_INPUTCHG            =       %01000000
-SET_MOUSE               =       %00100000
-
-;dispBufferOn
-ST_WRGS_FORE            =       $20
-ST_WR_BACK              =       $40
-ST_WR_FORE              =       $80
-
-;alarmSetFlag
-ALARMMASK               =       %00000100
-
-;PutDecimal
-    ;leading zeroes
-SET_NOSURPRESS          =       %00000000
-SET_SURPRESS            =       %01000000
-    ;justification
-SET_RIGHTJUST           =       %00000000
-SET_LEFTJUST            =       %10000000
-
-;icons, menus status flags
-ST_FLASH                =       $80
-ST_INVERT               =       $40
-ST_LD_AT_ADDR           =       $01
-ST_LD_DATA              =       $80
-ST_PR_DATA              =       $40
-ST_WR_PR                =       $40
-
-;???
-ADD1_W                  =       $2000
-DOUBLE_B                =       $80
-DOUBLE_W                =       $8000
-
-CLR_SAVE                =       %01000000
-CONSTRAINED             =       %01000000
-UN_CONSTRAINED          =       %00000000
-FG_SAVE                 =       %10000000
-
-FUTURE1                 =       7
-FUTURE2                 =       8
-FUTURE3                 =       9
-FUTURE4                 =       10
-USELAST                 =       127
-SHORTCUT                =       128
diff --git a/libsrc/geos-common/disk/blkalloc.s b/libsrc/geos-common/disk/blkalloc.s
deleted file mode 100644 (file)
index 6bfcb31..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char BlkAlloc (struct tr_se output[], int length);
-
-            .import popax, setoserror
-            .export _BlkAlloc
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-        
-_BlkAlloc:
-        sta r2L
-        stx r2H
-        jsr popax
-        sta r4L
-        stx r4H
-        jsr BlkAlloc
-        jmp setoserror
diff --git a/libsrc/geos-common/disk/calcblksfree.s b/libsrc/geos-common/disk/calcblksfree.s
deleted file mode 100644 (file)
index 520c8ca..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; int CalcBlksFree (void);
-
-            .import __oserror
-            .export _CalcBlksFree
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-        
-_CalcBlksFree:
-        jsr CalcBlksFree
-        stx __oserror
-        lda r4L
-        ldx r4H
-        rts
diff --git a/libsrc/geos-common/disk/freeblock.s b/libsrc/geos-common/disk/freeblock.s
deleted file mode 100644 (file)
index cd8b08d..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char FreeBlock (struct tr_se *TS);
-
-            .import gettrse, setoserror
-            .export _FreeBlock
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-        
-_FreeBlock:
-        jsr gettrse
-        sta r6L
-        stx r6H
-        jsr FreeBlock
-        jmp setoserror
diff --git a/libsrc/geos-common/disk/getblock.s b/libsrc/geos-common/disk/getblock.s
deleted file mode 100644 (file)
index cef7ece..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char GetBlock (struct tr_se *myTS, char *buffer);
-
-            .import popax, setoserror
-            .import gettrse
-            .export _GetBlock
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-        
-_GetBlock:
-        sta r4L
-        stx r4H
-        jsr popax
-        jsr gettrse
-        sta r1L
-        stx r1H
-        jsr GetBlock
-        jmp setoserror
diff --git a/libsrc/geos-common/disk/getdirhead.s b/libsrc/geos-common/disk/getdirhead.s
deleted file mode 100644 (file)
index ccd8b45..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char GetDirHead (void);
-
-            .import setoserror
-            .export _GetDirHead
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-
-_GetDirHead:
-        jsr GetDirHead
-        jmp setoserror
diff --git a/libsrc/geos-common/disk/getptrcurdknm.s b/libsrc/geos-common/disk/getptrcurdknm.s
deleted file mode 100644 (file)
index 7a99225..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void GetPtrCurDkNm (char *curName);
-;  (fills curName[17] with current disk's name)
-
-            .importzp ptr4, ptr3
-            .import __oserror
-            .export _GetPtrCurDkNm
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-        
-_GetPtrCurDkNm: 
-        sta ptr3
-        stx ptr3+1
-        ldx #ptr4
-        jsr GetPtrCurDkNm
-        ldy #0
-        txa
-        bne fin
-namelp: lda (ptr4),y
-.ifdef __GEOS_CBM__
-        cmp #$a0
-.else
-        cmp #0
-.endif
-        beq fin
-        sta (ptr3),y
-        iny
-        cpy #16
-        bne namelp
-fin:    lda #0
-        sta (ptr3),y
-        stx __oserror
-        rts
diff --git a/libsrc/geos-common/disk/gettrse.s b/libsrc/geos-common/disk/gettrse.s
deleted file mode 100644 (file)
index 8167d6e..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.1.00
-
-            .export gettrse
-            .importzp ptr4
-
-gettrse:
-        sta ptr4
-        stx ptr4+1
-        ldy #1
-        lda (ptr4),y
-        tax
-        dey
-        lda (ptr4),y
-        rts
diff --git a/libsrc/geos-common/disk/nxtblkalloc.s b/libsrc/geos-common/disk/nxtblkalloc.s
deleted file mode 100644 (file)
index 7427f3d..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char NxtBlkAlloc (struct tr_se *startTS, struct tr_se output[], int length );
-
-            .import popax, setoserror
-            .import gettrse
-            .importzp ptr4
-            .export _NxtBlkAlloc
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-        
-_NxtBlkAlloc:
-        sta r2L
-        stx r2H
-        jsr popax
-        sta r4L
-        stx r4H
-        jsr popax
-        jsr gettrse
-        sta r3L
-        stx r3H
-        jsr NxtBlkAlloc
-        jmp setoserror
diff --git a/libsrc/geos-common/disk/opendisk.s b/libsrc/geos-common/disk/opendisk.s
deleted file mode 100644 (file)
index 66bd24d..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char OpenDisk (void);
-
-            .import setoserror
-            .export _OpenDisk
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-        
-_OpenDisk:
-        jsr OpenDisk
-        jmp setoserror
diff --git a/libsrc/geos-common/disk/putblock.s b/libsrc/geos-common/disk/putblock.s
deleted file mode 100644 (file)
index df1af9f..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char PutBlock (struct tr_se *myTS, char *buffer);
-
-            .import popax, setoserror
-            .import gettrse
-            .export _PutBlock
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-        
-_PutBlock:
-        sta r4L
-        stx r4H
-        jsr popax
-        jsr gettrse
-        sta r1L
-        stx r1H
-        jsr PutBlock
-        jmp setoserror
diff --git a/libsrc/geos-common/disk/putdirhead.s b/libsrc/geos-common/disk/putdirhead.s
deleted file mode 100644 (file)
index 411b643..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.99, 2.1.2003
-
-; char PutDirHead (void);
-
-            .import setoserror
-            .export _PutDirHead
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-        
-_PutDirHead:
-        jsr PutDirHead
-        jmp setoserror
diff --git a/libsrc/geos-common/disk/setnextfree.s b/libsrc/geos-common/disk/setnextfree.s
deleted file mode 100644 (file)
index 410532c..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; struct tr_se SetNextFree (struct tr_se *startTS);
-
-            .import __oserror
-            .import gettrse
-            .export _SetNextFree
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-        
-_SetNextFree:
-        jsr gettrse
-        sta r3L
-        stx r3H
-        jsr SetNextFree
-        stx __oserror
-        lda r3L
-        ldx r3H
-        rts
diff --git a/libsrc/geos-common/dlgbox/dbget2lines.s b/libsrc/geos-common/dlgbox/dbget2lines.s
deleted file mode 100644 (file)
index dd1ad1f..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.99
-
-            .export DB_get2lines
-            .importzp ptr3,ptr4
-            .import popax
-
-DB_get2lines:
-        sta ptr4                ; fetch line 2
-        stx ptr4+1
-        jsr popax
-        sta ptr3                ; fetch line 1
-        stx ptr3+1
-        ldx #ptr3
-        jsr checknull
-        ldx #ptr4
-        jmp checknull
-
-checknull:
-        lda $0,x
-        ora $1,x
-        bne cn_end
-        lda #<nullstring
-        sta $0,x
-        lda #>nullstring
-        sta $1,x
-cn_end: rts
-
-.rodata
-
-nullstring:
-        .byte 0
diff --git a/libsrc/geos-common/dlgbox/dlgboxfileselect.s b/libsrc/geos-common/dlgbox/dlgboxfileselect.s
deleted file mode 100644 (file)
index e97e445..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.99
-
-; char DlgBoxFileSelect       (char *class, char ftype, char *fname);
-
-            .export _DlgBoxFileSelect
-            .import popa, popax
-            .import _DoDlgBox
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-            .include "geosmac.inc"
-            .include "const.inc"
-
-_DlgBoxFileSelect:
-        sta tmp_r5
-        stx tmp_r5+1
-        jsr popa
-        sta tmp_r7L
-        jsr popax
-        sta tmp_r10
-        stx tmp_r10+1
-
-DB_FS_reload:
-        MoveW tmp_r5, r5
-        MoveW tmp_r10, r10
-        MoveB tmp_r7L, r7L
-
-        lda #<paramStrFileSelect
-        ldx #>paramStrFileSelect
-        jsr _DoDlgBox
-        cmp #DISK
-        bne DB_FS_Fin
-        jsr OpenDisk
-        txa
-        beq DB_FS_reload
-DB_FS_Fin:
-        rts
-
-.rodata
-
-paramStrFileSelect:
-        .byte DEF_DB_POS | 1
-        .byte DBGETFILES, 4, 4
-        .byte OPEN, DBI_X_2, DBI_Y_0+16
-        .byte DISK, DBI_X_2, DBI_Y_0+32+1
-        .byte CANCEL, DBI_X_2, DBI_Y_0+64+3
-        .byte NULL
-
-.bss
-
-tmp_r5:
-        .res 2
-tmp_r7L:
-        .res 1
-tmp_r10:
-        .res 2
diff --git a/libsrc/geos-common/dlgbox/dlgboxgetstring.s b/libsrc/geos-common/dlgbox/dlgboxgetstring.s
deleted file mode 100644 (file)
index 5366b41..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.99
-
-; char DlgBoxGetString       (char *string, char strlen, char *line1,char *line2);
-
-            .export _DlgBoxGetString
-            .import DB_get2lines, _DoDlgBox
-            .importzp ptr2, ptr3, ptr4
-            .import popa, popax
-
-            .include "geossym.inc"
-            .include "const.inc"
-
-_DlgBoxGetString:
-        jsr DB_get2lines
-        jsr popa
-        sta DB_strlen
-        jsr popax
-        sta ptr2
-        stx ptr2+1
-        lda #<paramStrGetString
-        ldx #>paramStrGetString
-        jmp _DoDlgBox
-
-.data
-
-paramStrGetString:
-        .byte DEF_DB_POS | 1
-        .byte DBVARSTR, TXT_LN_X, TXT_LN_1_Y, ptr3
-        .byte DBVARSTR, TXT_LN_X, TXT_LN_2_Y, ptr4
-        .byte DBGETSTRING, TXT_LN_X, TXT_LN_3_Y, ptr2
-DB_strlen:
-        .byte 17
-        .byte CANCEL, DBI_X_2, DBI_Y_2
-        .byte NULL
diff --git a/libsrc/geos-common/dlgbox/dlgboxok.s b/libsrc/geos-common/dlgbox/dlgboxok.s
deleted file mode 100644 (file)
index 124c32c..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.99
-
-; char DlgBoxOk       (char *line1,char *line2);
-
-            .export _DlgBoxOk
-            .import DB_get2lines, _DoDlgBox
-            .importzp ptr3, ptr4
-
-            .include "geossym.inc"
-            .include "const.inc"
-
-_DlgBoxOk:
-        jsr DB_get2lines
-        lda #<paramStrOk
-        ldx #>paramStrOk
-        jmp _DoDlgBox
-
-.rodata
-
-paramStrOk:
-        .byte DEF_DB_POS | 1
-        .byte DBVARSTR, TXT_LN_X, TXT_LN_2_Y, ptr3
-        .byte DBVARSTR, TXT_LN_X, TXT_LN_3_Y, ptr4
-        .byte OK, DBI_X_0, DBI_Y_2
-        .byte NULL
diff --git a/libsrc/geos-common/dlgbox/dlgboxokcancel.s b/libsrc/geos-common/dlgbox/dlgboxokcancel.s
deleted file mode 100644 (file)
index ca03b89..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.99
-
-; char DlgBoxOkCancel       (char *line1,char *line2);
-
-            .export _DlgBoxOkCancel
-            .import DB_get2lines, _DoDlgBox
-            .importzp ptr3, ptr4
-
-            .include "geossym.inc"
-            .include "const.inc"
-
-_DlgBoxOkCancel:
-        jsr DB_get2lines
-        lda #<paramStrOkCancel
-        ldx #>paramStrOkCancel
-        jmp _DoDlgBox
-
-.rodata
-
-paramStrOkCancel:
-        .byte DEF_DB_POS | 1
-        .byte DBVARSTR, TXT_LN_X, TXT_LN_2_Y, ptr3
-        .byte DBVARSTR, TXT_LN_X, TXT_LN_3_Y, ptr4
-        .byte OK, DBI_X_0, DBI_Y_2
-        .byte CANCEL, DBI_X_2, DBI_Y_2
-        .byte NULL
diff --git a/libsrc/geos-common/dlgbox/dlgboxyesno.s b/libsrc/geos-common/dlgbox/dlgboxyesno.s
deleted file mode 100644 (file)
index 624ee60..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.99
-
-; char DlgBoxYesNo       (char *line1,char *line2);
-
-            .export _DlgBoxYesNo
-            .import DB_get2lines, _DoDlgBox
-            .importzp ptr3, ptr4
-
-            .include "geossym.inc"
-            .include "const.inc"
-
-_DlgBoxYesNo:
-        jsr DB_get2lines
-        lda #<paramStrYesNo
-        ldx #>paramStrYesNo
-        jmp _DoDlgBox
-
-.rodata
-
-paramStrYesNo:
-        .byte DEF_DB_POS | 1
-        .byte DBVARSTR, TXT_LN_X, TXT_LN_2_Y, ptr3
-        .byte DBVARSTR, TXT_LN_X, TXT_LN_3_Y, ptr4
-        .byte YES, DBI_X_0, DBI_Y_2
-        .byte NO, DBI_X_2, DBI_Y_2
-        .byte NULL
diff --git a/libsrc/geos-common/dlgbox/dodlgbox.s b/libsrc/geos-common/dlgbox/dodlgbox.s
deleted file mode 100644 (file)
index ca5922f..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char DoDlgBox         (char *myParamString);
-
-            .export _DoDlgBox
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_DoDlgBox:
-        sta r0L
-        stx r0H
-        jsr DoDlgBox
-        ldx #0
-        lda r0L
-        rts
diff --git a/libsrc/geos-common/dlgbox/messagebox.c b/libsrc/geos-common/dlgbox/messagebox.c
deleted file mode 100644 (file)
index 533267b..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-** char MessageBox (char mode, const char *format, ...)
-**
-** Maciej 'YTM/Elysium' Witkowiak, 17.08.2003
-**
-*/
-
-#include <geos.h>
-#include <stdio.h>
-
-void _mbprintout(void);
-
-static dlgBoxStr _mbdlg_EMPTY = {
-        DB_DEFPOS(1),
-        DB_OPVEC(&RstrFrmDialogue),
-        DB_USRROUT(&_mbprintout),
-        DB_END,
-};
-
-static dlgBoxStr _mbdlg_OK = {
-        DB_DEFPOS(1),
-        DB_USRROUT(&_mbprintout),
-        DB_ICON(OK, DBI_X_1, DBI_Y_2),
-        DB_END,
-};
-
-static dlgBoxStr _mbdlg_OKCANCEL = {
-        DB_DEFPOS(1),
-        DB_USRROUT(&_mbprintout),
-        DB_ICON(OK, DBI_X_0, DBI_Y_2),
-        DB_ICON(CANCEL, DBI_X_2, DBI_Y_2),
-        DB_END,
-};
-
-static dlgBoxStr _mbdlg_YESNO = {
-        DB_DEFPOS(1),
-        DB_USRROUT(&_mbprintout),
-        DB_ICON(YES, DBI_X_0, DBI_Y_2),
-        DB_ICON(NO, DBI_X_2, DBI_Y_2),
-        DB_END,
-};
-
-static dlgBoxStr *_mbboxes[] = {
-        &_mbdlg_EMPTY,
-        &_mbdlg_OK,
-        &_mbdlg_OKCANCEL,
-        &_mbdlg_YESNO
-};
-
-static char _mbbuffer[256];
-
-char MessageBox(char mode, const char *format, ...)
-{
-    register char *buf;
-    va_list ap;
-
-    /* first format out things */
-    va_start(ap, format);
-    vsprintf(_mbbuffer, format, ap);
-    va_end(ap);
-
-    /* replace LFs by CRs */
-    buf = &_mbbuffer[0];
-    while (*buf) {
-        if (*buf==LF) *buf=CR;
-        ++buf;
-    }
-
-    /* validate mode */
-    if (mode>=MB_LAST)
-        mode = MB_EMPTY;
-
-    return DoDlgBox(_mbboxes[mode]);
-}
-
-void _mbprintout(void)
-{
-    UseSystemFont();
-    curWindow.top = DEF_DB_TOP;
-    curWindow.left = DEF_DB_LEFT+10;
-    curWindow.right = DEF_DB_RIGHT-10;
-    curWindow.bot = DEF_DB_BOT;
-    PutString(_mbbuffer, DEF_DB_TOP+10+curFontDesc.height, DEF_DB_LEFT+10 );
-}
diff --git a/libsrc/geos-common/dlgbox/rstrfrmdialogue.s b/libsrc/geos-common/dlgbox/rstrfrmdialogue.s
deleted file mode 100644 (file)
index efee174..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 25.12.99
-
-; char RstrFrmDialogue  (void);
-
-            .export _RstrFrmDialogue
-
-            .include "jumptab.inc"
-        
-_RstrFrmDialogue = RstrFrmDialogue
diff --git a/libsrc/geos-common/drivers/fio_module.s b/libsrc/geos-common/drivers/fio_module.s
deleted file mode 100644 (file)
index b757e6b..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-;
-; Low level file I/O routines, ONLY for module loading OR sth similar
-;
-; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
-; 25.12.2002
-;
-; only ONE opened file at a time, only O_RDONLY flag
-
-; int open (const char* name, int flags, ...);  /* May take a mode argument */
-; int __fastcall__ close (int fd);
-; int __fastcall__ read (int fd, void* buf, unsigned count);
-
-FILEDES         = 3             ; first free to use file descriptor
-
-            .importzp ptr1, ptr2, ptr3, tmp1
-            .import addysp, popax
-            .import __oserror
-            .import _FindFile, _ReadByte
-            .export _open, _close, _read
-
-            .include "geossym.inc"
-            .include "const.inc"
-            .include "errno.inc"
-            .include "fcntl.inc"
-
-_open:
-        cpy #4                  ; correct # of arguments (bytes)?
-        beq @parmok             ; parameter count ok
-        tya                     ; parm count < 4 shouldn't be needed to be...
-        sec                     ; ...checked (it generates a c compiler warning)
-        sbc #4
-        tay
-        jsr addysp              ; fix stack, throw away unused parameters
-
-; Parameters ok. Pop the flags and save them into tmp3
-
-@parmok:
-        jsr popax               ; Get flags
-        sta tmp1
-        jsr popax               ; Get name
-        sta ptr1
-        stx ptr1+1
-            
-        lda filedesc            ; is there a file already open?
-        bne @alreadyopen
-            
-        lda tmp1                ; check open mode
-        and #(O_RDWR | O_CREAT)
-        cmp #O_RDONLY           ; only O_RDONLY is valid
-        bne @badmode
-            
-        lda ptr1
-        ldx ptr1+1
-        jsr _FindFile           ; try to find the file
-        tax
-        bne @oserror
-            
-        lda dirEntryBuf + OFF_DE_TR_SC ; tr&se for ReadByte (r1)
-        sta f_track
-        lda dirEntryBuf + OFF_DE_TR_SC + 1
-        sta f_sector
-        lda #<diskBlkBuf        ; buffer for ReadByte (r4)
-        sta f_buffer
-        lda #>diskBlkBuf
-        sta f_buffer+1
-        ldx #0                  ; offset for ReadByte (r5)
-        stx f_offset
-        stx f_offset+1
-        lda #0                  ; clear errors
-        sta __oserror
-        jsr __seterrno
-        lda #FILEDES            ; return fd
-        sta filedesc
-        rts
-@badmode:
-        lda #EINVAL             ; invalid parameters - invalid open mode
-        .byte $2c               ; skip
-@alreadyopen:
-        lda #EMFILE             ; too many opened files (there can be only one)
-        jmp __directerrno       ; set errno, clear oserror, return -1
-@oserror:
-        jmp __mappederrno       ; set platform error code, return -1
-
-_close:
-        lda #0
-        sta __oserror
-        jsr __seterrno          ; clear errors
-        lda #0                  ; clear fd
-        sta filedesc
-        tax
-        rts
-
-_read:
-    ; a/x - number of bytes
-    ; popax - buffer ptr
-    ; popax - fd, must be == to the above one
-    ; return -1+__oserror or number of bytes read
-
-        eor #$ff
-        sta ptr1
-        txa
-        eor #$ff
-        sta ptr1+1              ; -(# of bytes to read)-1
-        jsr popax
-        sta ptr2
-        stx ptr2+1              ; buffer ptr
-        jsr popax
-        cmp #FILEDES            ; lo-byte == FILEDES
-        bne @filenotopen
-        txa                     ; hi-byte == 0
-        beq @fileok             ; fd must be == FILEDES
-
-@filenotopen:
-        lda #EBADF
-        jmp __directerrno       ; Sets _errno, clears _oserror, returns -1
-
-@fileok:
-        lda #0
-        sta ptr3
-        sta ptr3+1              ; put 0 into ptr3 (number of bytes read)
-        sta __oserror           ; clear error flags
-        jsr __seterrno
-
-        lda f_track             ; restore stuff for ReadByte
-        ldx f_sector
-        sta r1L
-        stx r1H
-        lda f_buffer
-        ldx f_buffer+1
-        sta r4L
-        stx r4H
-        lda f_offset
-        ldx f_offset+1
-        sta r5L
-        stx r5H
-
-        clc
-        bcc @L3                 ; branch always
-
-@L0:    jsr _ReadByte
-        ldy #0                  ; store the byte
-        sta (ptr2),y
-        inc ptr2                ; increment target address
-        bne @L1
-        inc ptr2+1
-
-@L1:    inc ptr3                ; increment byte count
-        bne @L2
-        inc ptr3+1
-
-@L2:    lda __oserror           ; was there error ?
-        beq @L3
-        cmp #BFR_OVERFLOW       ; EOF?
-        beq @done               ; yes, we're done
-        jmp __mappederrno       ; no, we're screwed
-
-@L3:    inc ptr1                ; decrement the count
-        bne @L0
-        inc ptr1+1
-        bne @L0
-
-@done:
-        lda r1L                 ; preserve data for ReadByte
-        ldx r1H
-        sta f_track
-        stx f_sector
-        lda r4L
-        ldx r4H
-        sta f_buffer
-        stx f_buffer+1
-        lda r5L
-        ldx r5H
-        sta f_offset
-        stx f_offset+1
-
-        lda ptr3                ; return byte count
-        ldx ptr3+1
-        rts
-
-.bss
-
-filedesc:
-        .res 1                  ; file open flag - 0 (no file opened) or 1
-f_track:
-        .res 1                  ; values preserved for ReadByte
-f_sector:
-        .res 1
-f_offset:
-        .res 2
-f_buffer:
-        .res 2
diff --git a/libsrc/geos-common/drivers/geos-stdmou.s b/libsrc/geos-common/drivers/geos-stdmou.s
deleted file mode 100644 (file)
index 7e544ba..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 2.7.2001
-;
-; Driver for GEOS standard input device interface
-;
-                                         
-            .export _mouse_init, _mouse_done
-            .export _mouse_hide, _mouse_show
-            .export _mouse_box
-            .export _mouse_pos, _mouse_info
-            .export _mouse_move, _mouse_buttons
-
-            .import popsreg, addysp1
-            .importzp sp, sreg, ptr1
-
-            .include "const.inc"
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-; --------------------------------------------------------------------------
-;
-; unsigned char __fastcall__ mouse_init (unsigned char type);
-;
-
-_mouse_init:
-        jsr StartMouseMode
-        jsr MouseOff
-
-        lda #0
-        sta mouseTop
-        sta mouseLeft
-        sta mouseLeft+1
-.ifdef __GEOS_CBM__
-        lda #199
-        sta mouseBottom
-        lda graphMode
-        bpl _mse_screen320
-
-        lda #<639               ; 80 columns on C128
-        ldx #>639
-        bne _mse_storex
-_mse_screen320:
-        lda #<319               ; 40 columns on C64/C128
-        ldx #>319
-_mse_storex:
-.else
-        lda #191
-        sta mouseBottom
-        lda #<559
-        ldx #>559
-.endif
-        sta mouseRight
-        stx mouseRight+1
-_mse_initend:
-        lda #0
-        tax
-; --------------------------------------------------------------------------
-;
-; void mouse_done (void);
-;
-_mouse_done:
-        rts
-
-; --------------------------------------------------------------------------
-;
-; void mouse_hide (void);
-;
-
-_mouse_hide     = MouseOff
-
-; --------------------------------------------------------------------------
-;
-; void mouse_show (void);
-;
-
-_mouse_show     = MouseUp
-
-; --------------------------------------------------------------------------
-;
-; void __fastcall__ mouse_box (int minx, int miny, int maxx, int maxy);
-;
-
-_mouse_box:
-        ldy #0                  ; Stack offset
-
-        sta mouseBottom
-
-        lda (sp),y
-        sta mouseRight
-        iny
-        lda (sp),y
-        sta mouseRight+1        ; maxx
-
-        iny
-        lda (sp),y
-        sta mouseTop
-        iny                     ; Skip high byte
-
-        iny
-        lda (sp),y
-        sta mouseLeft
-        iny
-        lda (sp),y
-        sta mouseLeft+1         ; minx
-
-        jmp addysp1             ; Drop params, return
-
-; --------------------------------------------------------------------------
-;
-; void __fastcall__ mouse_pos (struct mouse_pos* pos);
-; /* Return the current mouse position */
-;
-
-_mouse_pos:
-        sta ptr1
-        stx ptr1+1              ; Remember the argument pointer
-
-        ldy #0                  ; Structure offset
-
-        php
-        sei                     ; Disable interrupts
-
-        lda mouseXPos           ; Transfer the position
-        sta (ptr1),y
-        lda mouseXPos+1
-        iny
-        sta (ptr1),y
-        lda mouseYPos
-        iny
-        sta (ptr1),y
-        lda #$00
-        iny
-        sta (ptr1),y
-
-        plp                     ; Reenable interrupts
-        rts                     ; Done
-
-; --------------------------------------------------------------------------
-;
-; void __fastcall__ mouse_info (struct mouse_info* info);
-; /* Return the state of the mouse buttons and the position of the mouse */
-;
-
-_mouse_info:
-
-; We're cheating here to keep the code smaller: The first fields of the
-; mouse_info struct are identical to the mouse_pos struct, so we will just
-; call _mouse_pos to initialize the struct pointer and fill the position
-; fields.
-
-        jsr _mouse_pos
-
-; Fill in the button state
-
-        jsr _mouse_buttons      ; Will not touch ptr1
-        iny
-        sta (ptr1),y
-
-        rts
-
-; --------------------------------------------------------------------------
-;
-; void __fastcall__ mouse_move (int x, int y);
-;
-
-_mouse_move:
-        jsr popsreg             ; Get X
-        php
-        sei                     ; Disable interrupts
-        sta mouseYPos
-        lda sreg
-        ldx sreg+1
-        sta mouseXPos
-        stx mouseXPos+1
-        plp                     ; Enable interrupts
-        rts
-
-; --------------------------------------------------------------------------
-;
-; unsigned char mouse_buttons (void);
-;
-
-_mouse_buttons:
-        ldx #0
-        lda pressFlag
-        and #SET_MOUSE
-        lsr
-        rts
diff --git a/libsrc/geos-common/drivers/mcbdefault.s b/libsrc/geos-common/drivers/mcbdefault.s
deleted file mode 100644 (file)
index 2576f6a..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-;
-; Mouse callbacks for GEOS.
-;
-; GEOS has a built-in mouse architecture.  Half of this file does nothing
-; -- it exists merely to allow portable programs to link and run.
-;
-; 2.7.2001, Maciej 'YTM/Elysium' Witkowiak
-; 2004-03-20, Ullrich von Bassewitz
-; 2004-09-24, Greg King
-;
-
-;       .constructor    init_pointer
-        .export         _mouse_def_callbacks
-
-;       .include        "mouse-kernel.inc"
-;       .include        "const.inc"
-;       .include        "geossym.inc"
-        .include        "jumptab.inc"
-
-;       .macpack        generic
-
-; The functions below must be interrupt-safe,
-; because they might be called from an interrupt-handler.
-
-; --------------------------------------------------------------------------
-; Hide the mouse pointer. Always called with interrupts disabled.
-
-hide := MouseOff
-
-; --------------------------------------------------------------------------
-; Show the mouse pointer. Always called with interrupts disabled.
-
-show := MouseUp
-
-; --------------------------------------------------------------------------
-; Prepare to move the mouse pointer. Always called with interrupts disabled.
-
-prep:
-        ; Fall through
-
-; --------------------------------------------------------------------------
-; Draw the mouse pointer. Always called with interrupts disabled.
-
-draw:
-        ; Fall through
-
-; --------------------------------------------------------------------------
-; Move the mouse pointer X position to the value in .XA. Always called with
-; interrupts disabled.
-
-movex:
-        ; Fall through
-
-; --------------------------------------------------------------------------
-; Move the mouse pointer Y position to the value in .XA. Always called with
-; interrupts disabled.
-
-movey:
-        rts
-
-; --------------------------------------------------------------------------
-; Callback structure
-
-.rodata
-
-_mouse_def_callbacks:
-        .addr   hide
-        .addr   show
-        .addr   prep
-        .addr   draw
-        .addr   movex
-        .addr   movey
diff --git a/libsrc/geos-common/drivers/mouse_stddrv.s b/libsrc/geos-common/drivers/mouse_stddrv.s
deleted file mode 100644 (file)
index 349fb9c..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Name of the standard mouse driver
-;
-; 2010-01-25, Greg King
-;
-; const char mouse_stddrv[];
-;
-
-            .export _mouse_stddrv
-
-.rodata
-
-_mouse_stddrv:
-        .asciiz "geos-stdmou.mou"
diff --git a/libsrc/geos-common/file/appendrecord.s b/libsrc/geos-common/file/appendrecord.s
deleted file mode 100644 (file)
index 2a7864a..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char AppendRecord  (void);
-
-            .import setoserror
-            .export _AppendRecord
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-        
-_AppendRecord:
-
-        jsr AppendRecord
-        jmp setoserror
diff --git a/libsrc/geos-common/file/closerecordfile.s b/libsrc/geos-common/file/closerecordfile.s
deleted file mode 100644 (file)
index ee0778d..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char CloseRecordFile  (void);
-
-            .import setoserror
-            .export _CloseRecordFile
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-        
-_CloseRecordFile:
-        jsr CloseRecordFile
-        jmp setoserror
diff --git a/libsrc/geos-common/file/deletefile.s b/libsrc/geos-common/file/deletefile.s
deleted file mode 100644 (file)
index 730569e..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char DeleteFile  (char *myName);
-
-            .import setoserror
-            .export _DeleteFile
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-        
-_DeleteFile:
-        sta r0L
-        stx r0H
-        jsr DeleteFile
-        jmp setoserror
diff --git a/libsrc/geos-common/file/deleterecord.s b/libsrc/geos-common/file/deleterecord.s
deleted file mode 100644 (file)
index 7ffe5d7..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char DeleteRecord  (void);
-
-            .import setoserror
-            .export _DeleteRecord
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-        
-_DeleteRecord:
-        jsr DeleteRecord
-        jmp setoserror
diff --git a/libsrc/geos-common/file/findfile.s b/libsrc/geos-common/file/findfile.s
deleted file mode 100644 (file)
index 0f58e99..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char FindFile  (char *myName);
-
-            .import setoserror
-            .export _FindFile
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-        
-_FindFile:
-        sta r6L
-        stx r6H
-        jsr FindFile
-        jmp setoserror
diff --git a/libsrc/geos-common/file/findftypes.s b/libsrc/geos-common/file/findftypes.s
deleted file mode 100644 (file)
index 7b9967a..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char FindFTypes  (char *buffer, char fileType, char fileMax, char *Class);
-
-            .export _FindFTypes
-            .import popax, popa, setoserror
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-
-_FindFTypes:
-        sta r10L
-        stx r10H
-        jsr popa
-        sta r7H
-        sta tmpFileMax
-        jsr popa
-        sta r7L
-        jsr popax
-        sta r6L
-        stx r6H
-        jsr FindFTypes
-        jsr setoserror
-; return (fileMax - r7H)
-        lda tmpFileMax
-        sec
-        sbc r7H
-        rts
-
-.bss
-
-tmpFileMax:
-        .res 1
diff --git a/libsrc/geos-common/file/freefile.s b/libsrc/geos-common/file/freefile.s
deleted file mode 100644 (file)
index 791f3f3..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char FreeFile  (struct trse myTrSe[]);
-
-            .import setoserror
-            .export _FreeFile
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-        
-_FreeFile:
-        sta r9L
-        stx r9H
-        jsr FreeFile
-        jmp setoserror
diff --git a/libsrc/geos-common/file/get1stdirentry.s b/libsrc/geos-common/file/get1stdirentry.s
deleted file mode 100644 (file)
index 3b99554..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 26.10.99
-
-; struct filehandle* Get1stDirEntry (void);
-
-            .import __oserror
-            .export _Get1stDirEntry
-
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-
-_Get1stDirEntry:
-        jsr Get1stDirEntry
-        stx __oserror
-        lda r5L
-        ldx r5H
-        rts
diff --git a/libsrc/geos-common/file/getfhdrinfo.s b/libsrc/geos-common/file/getfhdrinfo.s
deleted file mode 100644 (file)
index a9a843e..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char GetFHdrInfo  (struct filehandle *myFile);
-
-            .import setoserror
-            .export _GetFHdrInfo
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-        
-_GetFHdrInfo:
-        sta r9L
-        stx r9H
-        jsr GetFHdrInfo
-        jmp setoserror
diff --git a/libsrc/geos-common/file/getfile.s b/libsrc/geos-common/file/getfile.s
deleted file mode 100644 (file)
index 9c80115..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 4.4.2003
-
-; char __fastcall__ GetFile(char flag, const char *fname, const char *loadaddr, const char *datadname, char *datafname);
-
-            .export _GetFile
-            .import popa, popax, setoserror
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-        
-_GetFile:
-        sta r3L
-        stx r3H
-        jsr popax
-        sta r2L
-        stx r2H
-        jsr popax
-        sta r7L
-        stx r7H
-        jsr popax
-        sta r6L
-        stx r6H
-        jsr popa
-        sta r0L
-        lda #0
-        sta r10L
-        jsr GetFile
-        jmp setoserror
diff --git a/libsrc/geos-common/file/getnxtdirentry.s b/libsrc/geos-common/file/getnxtdirentry.s
deleted file mode 100644 (file)
index 912f48c..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 26.10.99
-
-; struct filehandle* GetNxtDirEntry (void);
-
-            .import __oserror
-            .export _GetNxtDirEntry
-
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-
-_GetNxtDirEntry:
-        jsr GetNxtDirEntry
-        stx __oserror
-        lda r5L
-        ldx r5H
-        rts
diff --git a/libsrc/geos-common/file/insertrecord.s b/libsrc/geos-common/file/insertrecord.s
deleted file mode 100644 (file)
index 5b5a7c7..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char InsertRecord  (void);
-
-            .import setoserror
-            .export _InsertRecord
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-
-_InsertRecord:
-        jsr InsertRecord
-        jmp setoserror
diff --git a/libsrc/geos-common/file/nextrecord.s b/libsrc/geos-common/file/nextrecord.s
deleted file mode 100644 (file)
index a3f12f9..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char NextRecord  (void);
-
-            .import setoserror
-            .export _NextRecord
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-
-_NextRecord:
-        jsr NextRecord
-        jmp setoserror
diff --git a/libsrc/geos-common/file/openrecordfile.s b/libsrc/geos-common/file/openrecordfile.s
deleted file mode 100644 (file)
index cdab3dd..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char OpenRecordFile  (char *myName);
-
-            .import setoserror
-            .export _OpenRecordFile
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-        
-_OpenRecordFile:
-        sta r0L
-        stx r0H
-        jsr OpenRecordFile
-        jmp setoserror
diff --git a/libsrc/geos-common/file/pointrecord.s b/libsrc/geos-common/file/pointrecord.s
deleted file mode 100644 (file)
index 82b88c4..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char PointRecord  (char recordNum);
-
-            .import setoserror
-            .export _PointRecord
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-        
-_PointRecord:
-        jsr PointRecord
-        jmp setoserror
diff --git a/libsrc/geos-common/file/previousrecord.s b/libsrc/geos-common/file/previousrecord.s
deleted file mode 100644 (file)
index 8fac1a5..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char PreviousRecord  (void);
-
-            .import setoserror
-            .export _PreviousRecord
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-
-_PreviousRecord:
-        jsr PreviousRecord
-        jmp setoserror
diff --git a/libsrc/geos-common/file/readbyte.s b/libsrc/geos-common/file/readbyte.s
deleted file mode 100644 (file)
index 9a24e68..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char ReadByte  (void);
-
-            .import __oserror
-            .export _ReadByte
-
-            .include "jumptab.inc"
-
-_ReadByte:
-        jsr ReadByte
-        stx __oserror
-        ldx #0
-        rts
diff --git a/libsrc/geos-common/file/readfile.s b/libsrc/geos-common/file/readfile.s
deleted file mode 100644 (file)
index 3b43cff..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char ReadFile  (struct tr_se *myTS, char *buffer, int length);
-
-            .export _ReadFile
-            .import popax, setoserror
-            .import gettrse
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-        
-_ReadFile:
-        sta r2L
-        stx r2H
-        jsr popax
-        sta r7L
-        stx r7H
-        jsr popax
-        jsr gettrse
-        sta r1L
-        stx r1H
-        jsr ReadFile
-        jmp setoserror
diff --git a/libsrc/geos-common/file/readrecord.s b/libsrc/geos-common/file/readrecord.s
deleted file mode 100644 (file)
index dd464e0..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char ReadRecord  (char *buffer, int length);
-
-            .export _ReadRecord
-            .import popax, setoserror
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-        
-_ReadRecord:
-        sta r2L
-        stx r2H
-        jsr popax
-        sta r7L
-        stx r7H
-        jsr ReadRecord
-        jmp setoserror
diff --git a/libsrc/geos-common/file/renamefile.s b/libsrc/geos-common/file/renamefile.s
deleted file mode 100644 (file)
index 6689d79..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char RenameFile  (char *old, char *new);
-
-            .export _RenameFile
-            .import popax, setoserror
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-
-_RenameFile:
-        sta r0L
-        stx r0H
-        jsr popax
-        sta r6L
-        stx r6H
-        jsr RenameFile
-        jmp setoserror
diff --git a/libsrc/geos-common/file/savefile.s b/libsrc/geos-common/file/savefile.s
deleted file mode 100644 (file)
index 11a2abf..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char SaveFile  (char skip, struct fileheader *myHeader);
-
-            .import setoserror
-            .import popa
-            .export _SaveFile
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-
-_SaveFile:
-        sta r9L
-        stx r9H
-        jsr popa
-        sta r10L
-        jsr SaveFile
-        jmp setoserror
diff --git a/libsrc/geos-common/file/sysremove.s b/libsrc/geos-common/file/sysremove.s
deleted file mode 100644 (file)
index 0853801..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 19.07.2005
-
-; unsigned char __fastcall__ _sysremove (const char* name);
-
-            .export  __sysremove
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-
-__sysremove:
-        sta r0L
-        stx r0H
-        jsr DeleteFile
-        txa
-        ldx #0
-        rts
diff --git a/libsrc/geos-common/file/sysrename.s b/libsrc/geos-common/file/sysrename.s
deleted file mode 100644 (file)
index 45ed49c..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 19.07.2005
-
-; unsigned char __fastcall__ _sysrename (const char* oldname, const char* newname);
-
-            .export __sysrename
-            .import popax
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-
-__sysrename:
-        sta r0L
-        stx r0H
-        jsr popax
-        sta r6L
-        stx r6H
-        jsr RenameFile
-        txa
-        ldx #0
-        rts
diff --git a/libsrc/geos-common/file/updaterecordfile.s b/libsrc/geos-common/file/updaterecordfile.s
deleted file mode 100644 (file)
index 896a44e..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char UpdateRecordFile  (void);
-
-            .import setoserror
-            .export _UpdateRecordFile
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-
-_UpdateRecordFile:
-        jsr UpdateRecordFile
-        jmp setoserror
diff --git a/libsrc/geos-common/file/writerecord.s b/libsrc/geos-common/file/writerecord.s
deleted file mode 100644 (file)
index e0d4c86..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 25.12.1999, 2.1.2003
-
-; char WriteRecord  (char *buffer, int length);
-
-            .export _WriteRecord
-            .import popax, setoserror
-
-            .include "jumptab.inc"
-            .include "diskdrv.inc"
-            .include "geossym.inc"
-        
-_WriteRecord:
-        sta r2L
-        stx r2H
-        jsr popax
-        sta r7L
-        stx r7H
-        jsr WriteRecord
-        jmp setoserror
diff --git a/libsrc/geos-common/geosmac.inc b/libsrc/geos-common/geosmac.inc
deleted file mode 100644 (file)
index 5ce20ff..0000000
+++ /dev/null
@@ -1,320 +0,0 @@
-;
-;GEOS macros
-;reassembled for 6502TASM/MMS by Maciej 'YTM/Elysium' Witkowiak
-;4-2-99
-
-;28-6-99 - ca65 port
-;macro 'sub' renamed to 'ssub' due to 65816 mnemonics
-
-;-------------------------------------------------------------------------
-
-.macro  LoadB dest, value
-        lda #value
-        sta dest
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  LoadW dest, value
-        LoadB dest+1, >(value)
-        LoadB dest+0, <(value)
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  MoveB source, dest
-        lda source
-        sta dest
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  MoveW source, dest
-        MoveB source+1, dest+1
-        MoveB source+0, dest+0
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  add source
-        clc
-        adc source
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  AddB source, dest
-        lda source
-        add dest
-        sta dest
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  AddW source, dest
-        AddB source+0, dest+0
-        lda source+1
-        adc dest+1
-        sta dest+1
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  AddVB value, dest
-        lda dest
-        clc
-        adc #(value)
-        sta dest
-        .endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  AddVW value, dest
-.local Skip
-        AddVB <(value), dest+0
-        .if (>(value))=0
-            bcc Skip
-            inc dest+1
-        .else
-            lda #>(value)
-            adc dest+1
-            sta dest+1
-        .endif
-Skip:
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  ssub source
-        sec
-        sbc source
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  SubB source, dest
-        lda dest
-        ssub source
-        sta dest
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  SubW source, dest
-        SubB source+0, dest+0
-        lda dest+1
-        sbc source+1
-        sta dest+1
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  SubVW value, dest
-        sec
-        lda dest+0
-        sbc #<(value)
-        sta dest+0
-        lda dest+1
-        sbc #>(value)
-        sta dest+1
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  CmpB source, dest
-        lda source
-        cmp dest
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  CmpBI source, immed
-        lda source
-        cmp #(immed)
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  CmpW source, dest
-.local Skip     
-        CmpB source+1, dest+1
-        bne Skip
-        CmpB source+0, dest+0
-Skip:
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  CmpWI source, immed
-.local Skip
-        CmpBI source+1, >(immed)
-        bne Skip
-        CmpBI source+0, <(immed)
-Skip:
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  PushB source
-        lda source
-        pha
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  PushW source
-        PushB source+1
-        PushB source+0
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  PopB dest
-        pla
-        sta dest
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  PopW dest
-        PopB dest+0
-        PopB dest+1
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  smb bitNumber, dest
-        pha
-        lda #(1 << bitNumber)
-        ora dest
-        sta dest
-        pla
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  smbf bitNumber, dest
-        lda #(1 << bitNumber)
-        ora dest
-        sta dest
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  rmb bitNumber, dest
-        pha
-        lda #(1 << bitNumber) ^ $ff 
-        and dest
-        sta dest
-        pla
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  rmbf bitNumber, dest
-        lda #(1 << bitNumber) ^ $ff
-        and dest
-        sta dest
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  bbs bitNumber, source, addr
-.local Skip
-        php
-        pha
-        lda source
-        and #(1 << bitNumber)
-        beq Skip
-        pla
-        plp
-        bra addr
-Skip:   pla
-        plp
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  bbsf bitNumber, source, addr
-        .if     bitNumber=7
-                bit source
-                bmi addr
-        .else
-                .if bitNumber=6
-                    bit source
-                    bvs addr
-                .else
-                    lda source
-                    and #(1 << bitNumber)
-                    bne addr
-                .endif
-        .endif
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  bbr bitNumber, source, addr
-.local Skip
-        php
-        pha
-        lda source
-        and #(1 << bitNumber)
-        bne Skip
-        pla
-        plp
-        bra addr
-Skip:   pla
-        plp
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  bbrf bitNumber, source, addr
-        .if bitNumber=7
-            bit source
-            bpl addr
-        .else
-                .if bitNumber=6
-                    bit source
-                    bvc addr
-                .else
-                    lda source
-                    and #(1 << bitNumber)
-                    beq addr
-                .endif
-        .endif
-.endmacro
-
-;-------------------------------------------------------------------------
-
-;03.03.99 by Maciej Witkowiak
-
-;-------------------------------------------------------------------------
-
-.macro  addv value
-        clc
-        adc #(value)
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  subv value
-        sec
-        sbc #(value)
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  bnex addr
-        txa
-        bne addr
-.endmacro
-
-;-------------------------------------------------------------------------
-
-.macro  beqx addr
-        txa
-        beq addr
-.endmacro
-
-;-------------------------------------------------------------------------
diff --git a/libsrc/geos-common/graph/bitmapclip.s b/libsrc/geos-common/graph/bitmapclip.s
deleted file mode 100644 (file)
index 993af09..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void BitmapClip       (char skipl, char skipr, int skipy, struct iconpic *myGfx);
-
-            .import popa, popax
-            .import BitmapRegs
-            .export _BitmapClip
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_BitmapClip:
-        jsr BitmapRegs
-        jsr popax
-        sta r12L
-        stx r12H
-        jsr popa
-        sta r11H
-        jsr popa
-        sta r11L
-        jmp BitmapClip
diff --git a/libsrc/geos-common/graph/bitmapregs.s b/libsrc/geos-common/graph/bitmapregs.s
deleted file mode 100644 (file)
index 0751c96..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-            .importzp ptr4
-            .export BitmapRegs
-
-            .include "geossym.inc"
-
-BitmapRegs:                     ; a/x is a struct iconpic*
-        sta ptr4
-        stx ptr4+1
-        ldy #0
-bmpLp:  lda (ptr4),y
-        sta r0L,y
-        iny
-        cpy #6
-        bne bmpLp
-        rts
diff --git a/libsrc/geos-common/graph/bitmapup.s b/libsrc/geos-common/graph/bitmapup.s
deleted file mode 100644 (file)
index 9b37308..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void BitmapUp (struct iconpic *myGfx);
-
-            .import BitmapRegs
-            .export _BitmapUp
-
-            .include "jumptab.inc"
-
-_BitmapUp:
-        jsr BitmapRegs
-        jmp BitmapUp
diff --git a/libsrc/geos-common/graph/bitotherclip.s b/libsrc/geos-common/graph/bitotherclip.s
deleted file mode 100644 (file)
index ef849f6..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void BitOtherClip     (void *proc1, void* proc2, char skipl, char skipr, int skipy, 
-;                               struct iconpic *myGfx);
-
-; both proc1, proc2 should be: char __fastcall something (void);
-;       proc1 is called before reading a byte (.A returns next data)
-;       proc2 is called before reading each byte which is not pattern (code >219)
-
-
-            .import popa, popax
-            .import BitOtherRegs
-            .export _BitOtherClip
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_BitOtherClip:
-        jsr BitOtherRegs
-        jsr popax
-        sta r12L
-        stx r12H
-        jsr popa
-        sta r11H
-        jsr popa
-        sta r11L
-        jsr popax
-        sta r14L
-        stx r14H
-        jsr popax
-        sta r13L
-        stx r13H
-        jmp BitOtherClip
diff --git a/libsrc/geos-common/graph/drawline.s b/libsrc/geos-common/graph/drawline.s
deleted file mode 100644 (file)
index 75952f7..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 29.10.99, 5.03.2003
-
-; void DrawLine         (char mode, struct window *mywindow);
-
-            .import _InitDrawWindow
-            .import popa
-            .importzp tmp1
-            .export _DrawLine
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-            .include "geosmac.inc"
-
-_DrawLine:
-        tay
-        PushW r2
-        tya
-        jsr _InitDrawWindow
-        MoveW r2, r11
-        PopW r2
-        jsr popa
-        sta tmp1
-        clc
-        bit tmp1
-        bvc @1
-        sec
-@1:     jmp DrawLine
diff --git a/libsrc/geos-common/graph/drawpoint.s b/libsrc/geos-common/graph/drawpoint.s
deleted file mode 100644 (file)
index f7c75a4..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 29.10.99, 05.3.2003
-
-; void DrawPoint        (char mode, struct pixel *mypixel);
-
-            .import PointRegs
-            .import popa
-            .importzp tmp1
-            .export _DrawPoint
-
-            .include "jumptab.inc"
-
-_DrawPoint:
-        jsr PointRegs
-        jsr popa
-        sta tmp1
-        clc
-        bit tmp1
-        bvc @1
-        sec
-@1:     jmp DrawPoint
diff --git a/libsrc/geos-common/graph/framerectangle.s b/libsrc/geos-common/graph/framerectangle.s
deleted file mode 100644 (file)
index c5f9de0..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-; void FrameRectangle   (char pattern);
-
-            .export _FrameRectangle
-
-            .include "jumptab.inc"
-            
-_FrameRectangle = FrameRectangle
diff --git a/libsrc/geos-common/graph/getcharwidth.s b/libsrc/geos-common/graph/getcharwidth.s
deleted file mode 100644 (file)
index 9c16ea1..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char GetCharWidth (char character);
-
-            .export _GetCharWidth
-
-            .include "jumptab.inc"
-
-_GetCharWidth:
-        jsr GetCharWidth
-        ldx #0
-        rts
diff --git a/libsrc/geos-common/graph/getintcharint.s b/libsrc/geos-common/graph/getintcharint.s
deleted file mode 100644 (file)
index a04fed0..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 11.03.2000
-
-            .import popa, popax
-            .export getintcharint
-
-            .include "geossym.inc"
-
-getintcharint:
-        sta r11L
-        stx r11H
-        jsr popa
-        sta r1H
-        jsr popax
-        sta r0L
-        stx r0H
-        rts
-
diff --git a/libsrc/geos-common/graph/graphicsstring.s b/libsrc/geos-common/graph/graphicsstring.s
deleted file mode 100644 (file)
index 86c74f1..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 25.12.99
-
-; void GraphicsString         (char *myString);
-
-            .export _GraphicsString
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_GraphicsString:
-        sta r0L
-        stx r0H
-        jmp GraphicsString
diff --git a/libsrc/geos-common/graph/hlineregs.s b/libsrc/geos-common/graph/hlineregs.s
deleted file mode 100644 (file)
index bad7e88..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-
-            .import popax, popa
-            .export HLineRegs
-
-            .include "geossym.inc"
-
-HLineRegs:
-        stx r4H
-        sta r4L
-        jsr popax
-        stx r3H
-        sta r3L
-        jsr popa
-        sta r11L
-        rts
diff --git a/libsrc/geos-common/graph/horizontalline.s b/libsrc/geos-common/graph/horizontalline.s
deleted file mode 100644 (file)
index 95655f5..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-; void HorizontalLine (char pattern, char y, int xstart, int xend);
-
-            .import popa
-            .import HLineRegs
-            .export _HorizontalLine
-
-            .include "jumptab.inc"
-
-_HorizontalLine:
-        jsr HLineRegs
-        jsr popa
-        jmp HorizontalLine
diff --git a/libsrc/geos-common/graph/imprintrectangle.s b/libsrc/geos-common/graph/imprintrectangle.s
deleted file mode 100644 (file)
index fc327e9..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void ImprintRectangle (void);
-            
-            .export _ImprintRectangle
-
-            .include "jumptab.inc"
-            
-_ImprintRectangle = ImprintRectangle
-
diff --git a/libsrc/geos-common/graph/initdrawwindow.s b/libsrc/geos-common/graph/initdrawwindow.s
deleted file mode 100644 (file)
index ec600ea..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-; 11.03.2000
-
-; void InitDrawWindow (struct window *myWindow);
-
-            .importzp ptr4
-            .export _InitDrawWindow
-
-            .include "geossym.inc"
-
-_InitDrawWindow:                ; a/x is a struct window*
-        sta ptr4
-        stx ptr4+1
-        ldy #0
-copyWin:lda (ptr4),y
-        sta r2L,y
-        iny
-        cpy #6
-        bne copyWin
-        rts
diff --git a/libsrc/geos-common/graph/invertline.s b/libsrc/geos-common/graph/invertline.s
deleted file mode 100644 (file)
index baa4a6e..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-; void InvertLine     (char y, int xstart, int xend);
-
-            .import HLineRegs
-            .export _InvertLine
-
-            .include "jumptab.inc"
-            
-_InvertLine:
-        jsr HLineRegs
-        jmp InvertLine
diff --git a/libsrc/geos-common/graph/invertrectangle.s b/libsrc/geos-common/graph/invertrectangle.s
deleted file mode 100644 (file)
index 0841872..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-; void InvertRectangle  (void);
-
-            .export _InvertRectangle
-            
-            .include "jumptab.inc"
-
-_InvertRectangle = InvertRectangle
-
diff --git a/libsrc/geos-common/graph/loadcharset.s b/libsrc/geos-common/graph/loadcharset.s
deleted file mode 100644 (file)
index 5ff4d92..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void LoadCharSet (struct fontdesc *myFont);
-
-            .export _LoadCharSet
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_LoadCharSet:
-        sta r0L
-        stx r0H
-        jmp LoadCharSet
diff --git a/libsrc/geos-common/graph/pointregs.s b/libsrc/geos-common/graph/pointregs.s
deleted file mode 100644 (file)
index aa6939f..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-            .importzp ptr4
-            .export PointRegs
-
-            .include "geossym.inc"
-
-PointRegs:                      ; a/x is a struct pixel*
-        sta ptr4
-        stx ptr4+1
-        ldy #0
-        lda (ptr4),y
-        sta r3L
-        iny
-        lda (ptr4),y
-        sta r3H
-        iny
-        lda (ptr4),y
-        sta r11L
-        rts
diff --git a/libsrc/geos-common/graph/put_char.s b/libsrc/geos-common/graph/put_char.s
deleted file mode 100644 (file)
index f34d7a1..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void PutChar         (char character, char y, int x);
-
-            .import popa
-            .export _PutChar
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_PutChar:
-        sta r11L
-        stx r11H
-        jsr popa
-        sta r1H
-        jsr popa
-        jmp PutChar
diff --git a/libsrc/geos-common/graph/putdecimal.s b/libsrc/geos-common/graph/putdecimal.s
deleted file mode 100644 (file)
index 06221e9..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 30.10.99, 17.8.2003
-
-; void PutDecimal         (char style, unsigned value, char y, int x);
-
-            .import popa, popax
-            .import getintcharint
-            .export _PutDecimal
-
-            .include "jumptab.inc"
-
-_PutDecimal:
-        jsr getintcharint
-        jsr popa
-        jmp PutDecimal
diff --git a/libsrc/geos-common/graph/putstring.s b/libsrc/geos-common/graph/putstring.s
deleted file mode 100644 (file)
index ab027f1..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void PutString        (char *mytxt, char y, int x);
-
-            .import popax, popa
-            .import getintcharint
-            .export _PutString
-
-            .include "jumptab.inc"
-
-_PutString:
-        jsr getintcharint
-        jmp PutString
diff --git a/libsrc/geos-common/graph/recoverline.s b/libsrc/geos-common/graph/recoverline.s
deleted file mode 100644 (file)
index edc3661..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-; void RecoverLine    (char y, int xstart, int xend);
-
-            .import HLineRegs
-            .export _RecoverLine
-            
-            .include "jumptab.inc"
-
-_RecoverLine:
-        jsr HLineRegs
-        jmp RecoverLine
-
diff --git a/libsrc/geos-common/graph/recoverrectangle.s b/libsrc/geos-common/graph/recoverrectangle.s
deleted file mode 100644 (file)
index 009ca81..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-; void RecoverRectangle (void);
-            
-            .export _RecoverRectangle
-
-            .include "jumptab.inc"
-            
-_RecoverRectangle = RecoverRectangle
-
diff --git a/libsrc/geos-common/graph/rectangle.s b/libsrc/geos-common/graph/rectangle.s
deleted file mode 100644 (file)
index a9351c4..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-; void Rectangle        (void);
-
-            .export _Rectangle
-            
-            .include "jumptab.inc"
-
-_Rectangle      = Rectangle
diff --git a/libsrc/geos-common/graph/setpattern.s b/libsrc/geos-common/graph/setpattern.s
deleted file mode 100644 (file)
index 24ea5e7..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-; void SetPattern     (char pattern);
-
-            .export _SetPattern
-
-            .include "jumptab.inc"
-
-_SetPattern     = SetPattern
diff --git a/libsrc/geos-common/graph/testpoint.s b/libsrc/geos-common/graph/testpoint.s
deleted file mode 100644 (file)
index f2dfb7b..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 29.10.1999, 2.1.2003
-
-; char TestPoint        (struct pixel *mypixel);
-
-            .import PointRegs
-            .import return0, return1
-            .export _TestPoint
-
-            .include "jumptab.inc"
-            
-_TestPoint:
-        jsr PointRegs
-        jsr TestPoint
-        bcc goFalse
-        jmp return1
-goFalse:jmp return0
diff --git a/libsrc/geos-common/graph/usesystemfont.s b/libsrc/geos-common/graph/usesystemfont.s
deleted file mode 100644 (file)
index 83960fd..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void UseSystemFont (void);
-
-            .export _UseSystemFont
-
-            .include "jumptab.inc"
-
-_UseSystemFont  = UseSystemFont
diff --git a/libsrc/geos-common/graph/verticalline.s b/libsrc/geos-common/graph/verticalline.s
deleted file mode 100644 (file)
index 01fb0b7..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 29.10.99
-
-; void VerticalLine   (char pattern, char ystart, char yend, int x);
-
-            .import popa 
-            .export _VerticalLine
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-            
-_VerticalLine:
-        stx r4H
-        sta r4L
-        jsr popa
-        sta r3H
-        jsr popa
-        sta r3L
-        jsr popa
-        jmp VerticalLine
diff --git a/libsrc/geos-common/memory/clearram.s b/libsrc/geos-common/memory/clearram.s
deleted file mode 100644 (file)
index a656170..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 30.10.99, 20.08.2003
-
-; void * ClearRam         (char *dest, int length);
-
-            .import DoublePop
-            .export _ClearRam
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_ClearRam:
-        jsr DoublePop
-        pha
-        txa
-        pha
-        jsr ClearRam
-        pla
-        tax
-        pla
-        rts
-
diff --git a/libsrc/geos-common/memory/cmpfstring.s b/libsrc/geos-common/memory/cmpfstring.s
deleted file mode 100644 (file)
index 112d46a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 22.12.99, 29.07.2000
-
-; char CmpFString (char length, char *dest, char* source);
-
-            .import DoubleSPop, SetPtrXY
-            .import popa, return0, return1
-            .export _CmpFString
-
-            .include "jumptab.inc"
-
-_CmpFString:
-        jsr DoubleSPop
-        jsr popa
-        jsr SetPtrXY
-        jsr CmpFString
-        bne L1
-        jmp return0
-L1:     jmp return1
diff --git a/libsrc/geos-common/memory/cmpstring.s b/libsrc/geos-common/memory/cmpstring.s
deleted file mode 100644 (file)
index ab5c66b..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 22.12.1999, 2.1.2003
-
-; char CmpString (char *dest, char* source);
-
-            .import DoubleSPop
-            .import return0, return1
-            .export _CmpString
-
-            .include "jumptab.inc"
-
-_CmpString:
-        jsr DoubleSPop
-        jsr CmpString
-        bne L1
-        jmp return0
-L1:     jmp return1
diff --git a/libsrc/geos-common/memory/copyfstring.s b/libsrc/geos-common/memory/copyfstring.s
deleted file mode 100644 (file)
index 18182fa..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 22.12.99, 29.07.2000
-
-; void CopyFString (char length, char *dest, char* source);
-
-            .import DoubleSPop, SetPtrXY
-            .import popa
-            .export _CopyFString
-
-            .include "jumptab.inc"
-
-_CopyFString:
-        jsr DoubleSPop
-        jsr popa
-        jsr SetPtrXY
-        jmp CopyFString
diff --git a/libsrc/geos-common/memory/copystring.s b/libsrc/geos-common/memory/copystring.s
deleted file mode 100644 (file)
index 941f78f..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 22.12.99
-
-; void CopyString (char *dest, char* source);
-
-            .import DoubleSPop
-            .export _CopyString
-
-            .include "jumptab.inc"
-
-_CopyString:
-        jsr DoubleSPop
-        jmp CopyString
diff --git a/libsrc/geos-common/memory/crc.s b/libsrc/geos-common/memory/crc.s
deleted file mode 100644 (file)
index 9ec2feb..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 22.12.99
-
-; int CRC         (char *memory, int length);
-
-            .import DoublePop
-            .export _CRC
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_CRC:
-        jsr DoublePop
-        jsr CRC
-        lda r2L
-        ldx r2H
-        rts
-            
\ No newline at end of file
diff --git a/libsrc/geos-common/memory/doublepop.s b/libsrc/geos-common/memory/doublepop.s
deleted file mode 100644 (file)
index 7e1f2ec..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 31.12.99
-
-            .import popax
-            .export DoublePop
-
-            .include "geossym.inc"
-
-DoublePop:
-        sta r0L
-        stx r0H
-        jsr popax
-        sta r1L
-        stx r1H
-        rts
diff --git a/libsrc/geos-common/memory/doublespop.s b/libsrc/geos-common/memory/doublespop.s
deleted file mode 100644 (file)
index f58beab..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 22.12.99, 29.07.2000
-
-            .import popax
-            .importzp ptr3, ptr4
-            .export DoubleSPop
-            .export SetPtrXY
-
-            .include "geossym.inc"
-
-DoubleSPop:
-        sta ptr4
-        stx ptr4+1
-        jsr popax
-        sta ptr3
-        stx ptr3+1
-;       rts
-;
-; SetPtrXY can be sometimes executed twice, but even this way it is few cycles
-; faster...
-
-SetPtrXY:
-        ldx #ptr4
-        ldy #ptr3
-        rts
diff --git a/libsrc/geos-common/memory/fillram.s b/libsrc/geos-common/memory/fillram.s
deleted file mode 100644 (file)
index 40d9db7..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 30.10.99, 15.07.2001
-
-; void * FillRam         (char *dest, char what, int length);
-
-            .import popa, popax
-            .export _FillRam
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_FillRam:
-        sta r0L
-        stx r0H
-        jsr popa
-        sta r2L
-        jsr popax
-        sta r1L
-        stx r1H
-        pha
-        txa
-        pha
-        jsr FillRam
-        pla
-        tax
-        pla
-        rts
diff --git a/libsrc/geos-common/memory/initram.s b/libsrc/geos-common/memory/initram.s
deleted file mode 100644 (file)
index 4edcedd..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void InitRam         (struct inittab*);
-
-            .export _InitRam
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_InitRam:
-        sta r0L
-        stx r0H
-        jmp InitRam
diff --git a/libsrc/geos-common/memory/movedata.s b/libsrc/geos-common/memory/movedata.s
deleted file mode 100644 (file)
index 7c8a530..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 30.10.99, 15.07.2001
-
-; void* MoveData         (char* dest, char *source, int length);
-
-            .import popax
-            .export _MoveData
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_MoveData:
-        sta r2L
-        stx r2H
-        jsr popax
-        sta r0L
-        stx r0H
-        jsr popax
-        sta r1L
-        stx r1H
-        jsr MoveData
-        lda r1L                 ; return dest ptr to be compatible with memmove and memcpy
-        ldx r1H
-        rts
diff --git a/libsrc/geos-common/menuicon/doicons.s b/libsrc/geos-common/menuicon/doicons.s
deleted file mode 100644 (file)
index 5ddf06d..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void DoIcons         (struct icontab *myicons);
-
-            .export _DoIcons
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_DoIcons:
-        sta r0L
-        stx r0H
-        jmp DoIcons
\ No newline at end of file
diff --git a/libsrc/geos-common/menuicon/domenu.s b/libsrc/geos-common/menuicon/domenu.s
deleted file mode 100644 (file)
index 1624a38..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void DoMenu         (struct menu *mymenu);
-
-            .export _DoMenu
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_DoMenu:
-        sta r0L
-        stx r0H
-        lda #0
-        jmp DoMenu
\ No newline at end of file
diff --git a/libsrc/geos-common/menuicon/dopreviousmenu.s b/libsrc/geos-common/menuicon/dopreviousmenu.s
deleted file mode 100644 (file)
index 5ac19b5..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void DoPreviousMenu (void);
-
-            .export _DoPreviousMenu
-
-            .include "jumptab.inc"
-
-_DoPreviousMenu = DoPreviousMenu
\ No newline at end of file
diff --git a/libsrc/geos-common/menuicon/gotofirstmenu.s b/libsrc/geos-common/menuicon/gotofirstmenu.s
deleted file mode 100644 (file)
index b5f2306..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void GotoFirstMenu (void);
-
-            .export _GotoFirstMenu
-
-            .include "jumptab.inc"
-
-_GotoFirstMenu  = GotoFirstMenu
\ No newline at end of file
diff --git a/libsrc/geos-common/menuicon/recoverallmenus.s b/libsrc/geos-common/menuicon/recoverallmenus.s
deleted file mode 100644 (file)
index 03a8368..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void RecoverAllMenus (void);
-
-            .export _RecoverAllMenus
-
-            .include "jumptab.inc"
-
-_RecoverAllMenus = RecoverAllMenus
\ No newline at end of file
diff --git a/libsrc/geos-common/menuicon/recovermenu.s b/libsrc/geos-common/menuicon/recovermenu.s
deleted file mode 100644 (file)
index 638d03d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void RecoverMenu (void);
-
-            .export _RecoverMenu
-
-            .include "jumptab.inc"
-
-_RecoverMenu    = RecoverMenu
\ No newline at end of file
diff --git a/libsrc/geos-common/menuicon/redomenu.s b/libsrc/geos-common/menuicon/redomenu.s
deleted file mode 100644 (file)
index 44d62e8..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void ReDoMenu (void);
-
-            .export _ReDoMenu
-
-            .include "jumptab.inc"
-
-_ReDoMenu       = ReDoMenu
\ No newline at end of file
diff --git a/libsrc/geos-common/mousesprite/clearmousemode.s b/libsrc/geos-common/mousesprite/clearmousemode.s
deleted file mode 100644 (file)
index 01e6595..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void ClearMouseMode (void);
-
-            .export _ClearMouseMode
-
-            .include "jumptab.inc"
-
-_ClearMouseMode = ClearMouseMode
\ No newline at end of file
diff --git a/libsrc/geos-common/mousesprite/disablsprite.s b/libsrc/geos-common/mousesprite/disablsprite.s
deleted file mode 100644 (file)
index 95d2980..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void DisablSprite (char spritenum);
-
-            .export _DisablSprite
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_DisablSprite:
-        sta r3L
-        jmp DisablSprite
\ No newline at end of file
diff --git a/libsrc/geos-common/mousesprite/drawsprite.s b/libsrc/geos-common/mousesprite/drawsprite.s
deleted file mode 100644 (file)
index 0f4d611..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void DrawSprite (char spritenum, char *tab63 );
-
-            .import popa
-            .export _DrawSprite
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_DrawSprite:
-        sta r4L
-        stx r4H
-        jsr popa
-        sta r3L
-        jmp DrawSprite
\ No newline at end of file
diff --git a/libsrc/geos-common/mousesprite/enablsprite.s b/libsrc/geos-common/mousesprite/enablsprite.s
deleted file mode 100644 (file)
index a271d2c..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void EnablSprite (char spritenum);
-
-            .export _EnablSprite
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_EnablSprite:
-        sta r3L
-        jmp EnablSprite
\ No newline at end of file
diff --git a/libsrc/geos-common/mousesprite/getnextchar.s b/libsrc/geos-common/mousesprite/getnextchar.s
deleted file mode 100644 (file)
index 6659059..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char GetNextChar (void);
-;       note that if it returns 0 (FALSE) then no characters are available
-
-            .export _GetNextChar
-
-            .include "jumptab.inc"
-
-_GetNextChar:
-        jsr GetNextChar
-        ldx #0
-        tay                     ; preserve Z flag
-        rts
diff --git a/libsrc/geos-common/mousesprite/inittextprompt.s b/libsrc/geos-common/mousesprite/inittextprompt.s
deleted file mode 100644 (file)
index 2fc5e58..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void InitTextPrompt (char height);
-
-            .export _InitTextPrompt
-
-            .include "jumptab.inc"
-
-_InitTextPrompt = InitTextPrompt
\ No newline at end of file
diff --git a/libsrc/geos-common/mousesprite/ismseinregion.s b/libsrc/geos-common/mousesprite/ismseinregion.s
deleted file mode 100644 (file)
index 0617490..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 21.12.1999, 2.1.2003
-
-; char IsMseInRegion (struct window *mywindow);
-
-            .import _InitDrawWindow
-            .export _IsMseInRegion
-            
-            .include "jumptab.inc"
-
-_IsMseInRegion:
-        jsr _InitDrawWindow
-        jsr IsMseInRegion
-        ldx #0
-        rts
diff --git a/libsrc/geos-common/mousesprite/mouseoff.s b/libsrc/geos-common/mousesprite/mouseoff.s
deleted file mode 100644 (file)
index a918bb6..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void MouseOff (void);
-
-            .export _MouseOff
-
-            .include "jumptab.inc"
-
-_MouseOff       = MouseOff
\ No newline at end of file
diff --git a/libsrc/geos-common/mousesprite/mouseup.s b/libsrc/geos-common/mousesprite/mouseup.s
deleted file mode 100644 (file)
index 45b4e83..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void MouseUp (void);
-
-            .export _MouseUp
-
-            .include "jumptab.inc"
-
-_MouseUp        = MouseUp
\ No newline at end of file
diff --git a/libsrc/geos-common/mousesprite/possprite.s b/libsrc/geos-common/mousesprite/possprite.s
deleted file mode 100644 (file)
index 24e8bd1..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void PosSprite (char spritenum, struct pixel *position );
-
-            .importzp ptr4
-            .import popa
-            .export _PosSprite
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_PosSprite:
-        sta ptr4
-        stx ptr4+1
-        ldy #0
-        lda (ptr4),y
-        sta r4L
-        iny
-        lda (ptr4),y
-        sta r4H
-        iny
-        lda (ptr4),y
-        sta r5L
-        jsr popa
-        sta r3L
-        jmp PosSprite
\ No newline at end of file
diff --git a/libsrc/geos-common/mousesprite/promptoff.s b/libsrc/geos-common/mousesprite/promptoff.s
deleted file mode 100644 (file)
index 8b5734f..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void PromptOff (void);
-
-            .export _PromptOff
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_PromptOff:
-; from 'The Hitchhiker's Guide To GEOS'
-        php
-        sei
-        jsr PromptOff
-        lda #0
-        sta alphaFlag
-        plp
-        rts
diff --git a/libsrc/geos-common/mousesprite/prompton.s b/libsrc/geos-common/mousesprite/prompton.s
deleted file mode 100644 (file)
index 82f6e5a..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void PromptOn (struct pixel *);
-
-            .importzp ptr4
-            .export _PromptOn
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_PromptOn:
-        sta ptr4
-        stx ptr4+1
-        ldy #0
-promptLp:
-        lda (ptr4),y
-        sta stringX,y
-        iny
-        cpy #3
-        bne promptLp
-        jmp PromptOn
diff --git a/libsrc/geos-common/mousesprite/startmousemode.s b/libsrc/geos-common/mousesprite/startmousemode.s
deleted file mode 100644 (file)
index 06a5477..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void StartMouseMode (void);
-
-            .export _StartMouseMode
-
-            .include "jumptab.inc"
-
-_StartMouseMode:
-        clc
-        jmp StartMouseMode
\ No newline at end of file
diff --git a/libsrc/geos-common/process/processblock.s b/libsrc/geos-common/process/processblock.s
deleted file mode 100644 (file)
index 84ead59..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 27.10.99
-
-; void  InitProcesses   (char number, struct process* proctab);
-; (rest)
-; void  BlockProcess    (char number);
-; void  UnblockProcess  (char number);
-
-            .export _BlockProcess
-            .export _UnblockProcess
-
-            .include "jumptab.inc"
-            
-_BlockProcess:
-        tax
-        jmp BlockProcess
-            
-_UnblockProcess:
-        tax
-        jmp UnblockProcess
diff --git a/libsrc/geos-common/process/processfreeze.s b/libsrc/geos-common/process/processfreeze.s
deleted file mode 100644 (file)
index bda914b..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 27.10.99
-
-; void  FreezeProcess   (char number);
-; void  UnfreezeProcess (char number);
-
-            .export _FreezeProcess
-            .export _UnfreezeProcess
-
-            .include "jumptab.inc"
-            
-_FreezeProcess:
-        tax
-        jmp FreezeProcess
-            
-_UnfreezeProcess:
-        tax
-        jmp UnfreezeProcess
diff --git a/libsrc/geos-common/process/processinitrestartenable.s b/libsrc/geos-common/process/processinitrestartenable.s
deleted file mode 100644 (file)
index 800c2dc..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 27.10.99
-
-; void  InitProcesses   (char number, struct process* proctab);
-; void  RestartProcess  (char number);
-; void  EnableProcess   (char number);
-
-            .import popa
-            .export _InitProcesses
-            .export _RestartProcess
-            .export _EnableProcess
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_InitProcesses:
-        sta r0L
-        stx r0H
-        jsr popa
-        jmp InitProcesses
-            
-_RestartProcess:
-        tax
-        jmp RestartProcess
-            
-_EnableProcess:
-        tax
-        jmp EnableProcess
diff --git a/libsrc/geos-common/process/processsleep.s b/libsrc/geos-common/process/processsleep.s
deleted file mode 100644 (file)
index 41098f5..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 30.10.99, 15.8.2003
-
-; void Sleep (int jiffies);
-
-            .importzp ptr1
-            .importzp tmp1
-            .export _Sleep
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-
-_SleepExit:
-        jsr Sleep               ; call Sleep
-        ldx tmp1
-        txs                     ; restore stack pointer
-        jmp (ptr1)              ; when timeouts control will reach here
-
-_Sleep:
-        sta r0L                 ; store data
-        stx r0H
-        pla
-        sta ptr1
-        pla
-        sta ptr1+1              ; preserve return address
-        inc ptr1
-        bne @L0
-        inc ptr1+1              ; fix return address
-@L0:    tsx
-        stx tmp1                ; preserve stack pointer
-        jsr _SleepExit          ; call Sleep
-        jmp MainLoop            ; immediate return here - go to idle loop
diff --git a/libsrc/geos-common/runtime/call.s b/libsrc/geos-common/runtime/call.s
deleted file mode 100644 (file)
index dadd13e..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
-; 23.12.2002
-;
-; CC65 runtime: call function via pointer in ax
-;
-
-        .export callax
-
-        .include "jumptab.inc"
-
-callax          = CallRoutine
diff --git a/libsrc/geos-common/symbols.txt b/libsrc/geos-common/symbols.txt
deleted file mode 100644 (file)
index 1be491f..0000000
+++ /dev/null
@@ -1,486 +0,0 @@
-Source: The Hitchhiker's Guide To GEOS
-http://lyonlabs.org/commodore/onrequest/geos-manuals/The_Hitchhikers_Guide_to_GEOS.pdf
-
-
-GEOS Variables
-==============
-
-Name           C64     C128    Apple   Size            Description
--------------------------------------------------------------------
-alarmSetFlag   $851c   $851c   n/a     Byte            TRUE if the alarm is set for GEOS to monitor, else FALSE.
-alarmTmtVector $84ad   $84ad   $0212   Word            Address of a service routine for the alarm clock time-out ...
-alphaFlag      $84b4   $84b4   $0225   Byte            Flag for alphanumeric string input ...
-appMain                $849b   $849b   $0200   Word            Vector that allows applications to include their own main loop ...
-backBufPtr     n/a     $131b   $9d7c   16 Bytes        Screen pointer where the back buffer came from.
-backXBufNum    n/a     $132b   $d98c   8 Bytes         For each sprite, there is one byte here for how many bytes ...
-backYBufNum    n/a     $1333   $d994   8 Bytes         For each sprite, there is one byte here for how many scanlines ...
-bakclr0                $d021   $d021   n/a     Byte            Background color 0.
-bakclr1                $d022   $d022   n/a     Byte            Background color 1.
-bakclr2                $d023   $d023   n/a     Byte            Background color 2.
-bakclr3                $d024   $d024   n/a     Byte            Background color 3.
-baselineOffset $26     $26     $0218   Byte            Offset from top line to baseline in character set.
-bkvec          $0316   $0316   n/a     Word            BRK instruction vector for when ROMs are switched in.
-bootName       $c006   $c006   $e003   9 Bytes         This is the start of the "GEOS BOOT" string.
-BRKVector      $84af   $84af   $0214   Word            Vector to the routine that is called when a BRK instruction is ...
-cardDataPntr   $2c     $2c     $60     Word            This is a pointer to the actual card graphics data for the ...
-CPU_DATA       $01     n/a     n/a     Word            Address of 6510 data register that controls the hardware memory ...
-CPU_DDR                $00     n/a     n/a     Byte            Address of 6510 data direction register.
-curDevice      $ba     $ba     n/a     Byte            This holds the current serial device number.
-curDirHead     $8200   $8200   $fa80   256 | 39 Bytes  For CBM, it is the buffer containing header infomation ...
-curDrive       $8489   $8489   $f60d   Byte            Holds the device number of the currently active disk drive.
-curEnable      n/a     $1300   $0951   Byte            This is an image of the C64 mobenble register.
-curHeight      $29     $29     $021b   Byte            Used to hold the card height in pixels of the current font in ...
-curIndexTable  $2a     $2a     $005e   Word            curIndexTable points to the table of sizes, in bytes, of each ...
-curmobx2       n/a     $1302   $d953   Byte            Image of the C64 mobx2 register.
-curnoby2       n/a     $1301   $d952   Byte            Image of the C64 moby2 register.
-curPattern     $22     $22     $022c   Word            curPattern points to the first byte of the graphics data for the ...
-curRecord      $8496   $8496   $f618   Byte            Holds the current record number for an open VLIR file.
-currentMode    $2e     $2e     $021c   Byte            Holds the current text drawing node.
-curSetWidth    $27     $27     $0219   Word            Holds the card width in pixels for the current font.
-curType                $88c6   $88c6   n/a     Byte            Holds the current disk type.
-curXpos0       n/a     $1303   $d954   16 Bytes        The current X positions of the C128 and Apple soft sprites.
-curYpos0       n/a     $1313   $d964   8 Bytes         The current Y positions for the C128 and Apple soft sprites.
-dataDiskName   $8453   $8453   $02b4   18 | 16 Bytes   Holds the disk name that an application's data file is on.
-dataFileName   $8442   $8442   $02a4   17 | 16 Bytes   This is the name of a data file to open.
-dateCopy       $c018   $c018   n/a     3 Bytes         This is a copy of the system variables for year, month, and day.
-day            $8518   $8518   $f202   Byte            Holds the value for current day.
-dblClickCount  $8515   $8515   $0258   Byte            Used to determine when an icon is double clicked on.
-devTabHi       n/a     n/a     $fae7   4 Bytes         For the Apple, these are the high and low bytes of the four ...
-devTabLo       n/a     n/a     $faeb   4 Bytes         For the Apple, these are the high and low bytes of the four ...
-devUnitTab     n/a     n/a     $faef   4 Bytes         The ProDos unit numbers of the four possible devices are kept ...
-dir2Head       $8900   $8900   n/a     256 Bytes       This is the 2nd directory header block used for larger cpacity ...
-dirBlkno       n/a     n/a     $f620   Word            Block number of the key block of the directory containing ...
-dirEntryBuf    $8400   $8400   $fa59   256 | 39 Bytes  Buffer used to build a file's directory entry.
-dirPtr         n/a     n/a     $f622   Word            Pointer into diskBlkBuf for this file's entry.
-diskBlkBuf     $8000   $8000   $f659   256 | 512 Bytes General disk block buffer. Initialized to all zeros.
-diskOpenFlg    $848a   $848a   $f617   Byte            Set to TRUE or FALSE to indicate whether a disk is currently ...
-dispBufferOn   $2f     $2f     $021d   Byte            Routes graphic and text operations to either the foreground ...
-dlgBoxRamBuf   $851f   $B51f   $f381   417 | 649 Bytes This is the buffer for variables that are saved when desk ...
-doRestFlag     n/a     $1b54   $db1d   Byte            Flag needed because of ouerlapping soft sprite problems on C128 ...
-DrACurDkNm     $841e   $841e   $faa7   18 | 16 Bytes   This is the disk name of the current disk in drive A.
-DrBCurDkNm     $8430   $8430   $fab7   18 | 16 Bytes   This is the disk name of the current disk in drive B.
-DrCCurDkNm     $88dc   $88dc   $fac7   18 | 16 Bytes   This is the disk name of the current disk in drive C.
-DrDCurDkNm     $88ee   $88ee   $fad7   18 | 16 Bytes   This is the disk name of the current disk in drive D.
-driveData      $88bf   $88bf   n/a     4 Bytes         One byte is reserved for each disk drive, to be used by the ...
-driveType      $848e   $848e   $faf3   4 Bytes         There are 4 bytes at location driveType, one for each of four ...
-drSizeHi       n/a     n/a     $fafb   4 Bytes         The high bytes of the sizes of the four possible ...
-drSizeLo       n/a     n/a     $faf7   4 Bytes         The low bytes of the sizes of the four possible ...
-extclr         $20     $20     n/a     Byte            Holds value for exterior (border) color.
-faultData      $84b6   $84b6   $0227   Byte            Holds information about mouse faults.
-fileHeader     $8100   $8100   $f859   256 | 512 Bytes Buffer used to hold the header block for a GEOS file.
-fileSize       $8499   $8499   $f61b   Word            This is the current size (in blocks) of a file.
-fileTrScTab    $8300   $8300   n/a     256 Bytes       For Commodore, it is the buffer used to hold the track and ...
-fileWritten    $8498   $8498   $f61a   Byte            Flag indicating if a if the currently open file has been written ...
-firstBoot      $88c5   $88c5   $0281   Byte            This flag is changed from 0 to $FF when the deskTop comes up ...
-fontData       $850c   $850c   n/a(?)  9 Bytes         Buffer for saving the user active font table when going into ...
-fontTable      $26     $26     n/a(?)  8 Bytes         fontTable is a label for the beginning of variables for the ...
-grcntr12       $d016   $d016   n/a     Byte            Graphics control reqister #2.
-grcntrl1       $d011   $d011   n/a     Byte            Graphics control register #1.
-grirq          $d019   $d019   n/a     Byte            Graphics chip interrupt register.
-grirqen                $d01a   $d01a   n/a     Byte            Graphics chip interrupt enable register.
-grmemptr       $d018   $d018   n/a     Byte            Graphics memory pointer VM3-VttlO|CB13-CBll.
-hour           $8519   $8519   $f203   Byte            Variable for hour.
-iconSelFlag    $84b5   $84b5   $0226   Byte            This RAM variable contains flag bits in b7 and b6 to specify ...
-indexBlkno     n/a     n/a     $f624   Word            Block number of the VLIR index table.
-inputData      $8506   $8506   $0247   4 Bytes         This is where input drivers pass device specific information to ...
-inputDevName   $88cb   $88cb   $08cc   17 | 16 Bytes   String that holds the name of the current input device.
-inputVector    $84a5   $84a5   $020a   Word            Pointer to routine to call on input device change.
-intBotVector   $849f   $849f   $0204   Word            Vector to routine to call after the operating system interrupt ...
-interleave     $848c   $848c   n/a     Byte            Variable used by BlkAlloc routine as the desired interleave when ...
-intSource      n/a     n/a     $02c6   Byte            Byte to indicate where interrupts are coming from on the Apple.
-intTopVector   $849d   $849d   $0202   Word            Vector to routine to call before the operating system interrupt ...
-invertBuffer   n/a     $1ced   n/a     80 Bytes        Buffer area used to speed up the 80 colunn InvertLine routine.
-irqvec         $0314   $0314   n/a     Word            IRQ vector.
-isGEOS         $848b   $848b   n/a     Byte            Flag to indicate whether the current disk is a GEOS disk.
-keyData                $8504   $8504   $0245   Byte            Holds the ASCII value of the current last key that was pressed.
-keyVector      $84a3   $84a3   $0208   Word            Vector to routine to call on keypress.
-leftMargin     $35     $35     $0220   Word            Leftmost point for writing characters.
-MachineType    n/a     n/a     $02c4   Byte            Type of Apple machine.
-maxMouseSpeed  $8501   $8501   $027d   Byte            Maximum speed for mouse cursor.
-mcmclr0                $d025   $d025   n/a     Byte            This is the variable for multi-color mode colors 0.
-mcmclr1                $d026   $d026   n/a     Byte            This is the variable for multi-color mode colors 1.
-MenuNumber     $84b7   $84b7   $0228   Byte            Number of currently working menu.
-minMouseSpeed  $8502   $8502   $027e   Byte            Minimum speed for mouse cursor.
-minutes                $851a   $851a   $f204   Byte            Variable for minutes for time of day clock.
-mob0clr                $d027   $d027   n/a     Byte            This is the color of the 1. object (sprite) on Commodore.
-mob0xpos       $d000   $d000   n/a(!)  Byte            This is the x position of sprite #0
-mob0ypos       $d001   $d001   n/a(!)  Byte            This is the y position of sprite #0
-mob1clr                $d028   $d028   n/a     Byte            This is the color of the 2. object (sprite) on Commodore.
-mob1xpos       $d002   $d002   n/a(!)  Byte            This is the x position of sprite #1
-mob1ypos       $d003   $d003   n/a(!)  Byte            This is the y position of sprite #1
-mob2clr                $d029   $d029   n/a     Byte            This is the color of the 3. object (sprite) on Commodore.
-mob2xpos       $d004   $d004   n/a(!)  Byte            This is the x position of sprite #2
-mob2ypos       $d005   $d005   n/a(!)  Byte            This is the y position of sprite #2
-mob3clr                $d02a   $d02a   n/a     Byte            This is the color of the 4. object (sprite) on Commodore.
-mob3xpos       $d006   $d006   n/a(!)  Byte            This is the x position of sprite #3
-mob3ypos       $d007   $d007   n/a(!)  Byte            This is the y position of sprite #3
-mob4clr                $d02b   $d02b   n/a     Byte            This is the color of the 5. object (sprite) on Commodore.
-mob4xpos       $d008   $d008   n/a(!)  Byte            This is the x position of sprite #4
-mob4ypos       $d009   $d009   n/a(!)  Byte            This is the y position of sprite #4
-mob5clr                $d02c   $d02c   n/a     Byte            This is the color of the 6. object (sprite) on Commodore.
-mob5xpos       $d00a   $d00a   n/a(!)  Byte            This is the x position of sprite #5
-mob5ypos       $d00b   $d00b   n/a(!)  Byte            This is the y position of sprite #5
-mob6clr                $d02d   $d02d   n/a     Byte            This is the color of the 7. object (sprite) on Commodore.
-mob6xpos       $d00c   $d00c   n/a(!)  Byte            This is the x position of sprite #6
-mob6ypos       $d00d   $d00d   n/a(!)  Byte            This is the y position of sprite #6
-mob7clr                $d02e   $d02e   n/a     Byte            This is the color of the 8. object (sprite) on Commodore.
-mob7xpos       $d00e   $d00e   n/a(!)  Byte            This is the x position of sprite #7
-mob7ypos       $d00f   $d00f   n/a(!)  Byte            This is the y position of sprite #7
-mobbakcol      $d01f   $d01f   n/a     Byte            Sprite to background collision register for Commodore.
-mobenble       $d015   $d015   $0818   Byte            Sprite enable bits.
-mobmcm         $d01c   $d01c   n/a     Byte            Sprite multi-color mode select.
-mobmobcol      $d01e   $d01e   n/a     Byte            Object to object collision register.
-mobprior       $d01b   $d01b   n/a     Byte            Object to background priority.
-mobx2          $d01d   $d01d   $0819   Byte            Double object size in x.
-moby2          $d017   $d017   $081a   Byte            Double object size in y.
-month          $8517   $8517   $f201   Byte            Holds month for time of day clock.
-mouseAccel     $8503   $8503   $027f   Byte            Acceleration of mouse cursor.
-mouseBottom    $84b9   $84b9   $58     Byte            Bottom most position for mouse cursor.
-mouseFaultVec  $84a7   $84a7   $020c   Word            Vector to routine to call when mouse goes outside region ...
-mouseLeft      $84ba   $84ba   $59     Word            Left most position for mouse.
-mouseOn                $30     $30     $5d     Byte            Flag indicating that the mouse is mode is on.
-mousePicData   $84c1   $84c1   n/a     64 Bytes        64 byte array for the mouse sprite picture on Commodore.
-mouseRight     $84bc   $84bc   $5b     Word            Right most position for mouse.
-mouseSave      n/a     $1b55   $ee53   24 Bytes        Screen data for what is beneath mouse soft sprite.
-mouseTop       $84b8   $84b8   $57     Byte            Top most position for mouse.
-mouseVector    $84a1   $84a1   $0206   Word            Routine to call on a mouse key press.
-mouseXOffset   n/a     n/a     $0229   Word            Offset from mouseXPos to draw the mouse sprite.
-mouseXPos      $3a     $3a     $0241   Word            Mouse X position.
-mouseYOffset   n/a     n/a     $022b   Byte            Offset from mouseYPos to draw the mouse sprite.
-mouseYPos      $3c     $3c     $0243   Byte            Mouse Y position.
-msbxpos                $d010   $d010   n/a     Byte            Most significant bits for x positions of sprites.
-msePicPtr      $31     $31     n/a     Word            Pointer to the mouse graphics data.
-nationality    $c010   $c010   $e00d   Byte            Byte to hold nationality of Kernal.
-nmivec         $0318   $0318   n/a     Word            NMI vector.
-noEraseSprites n/a     n/a     $0240   Byte            Flag to stop routine TempHideMouse fron erasing sprites #2 ...
-numDrives      $848d   $848d   $f60e   Byte            Set to number of drives on the system.
-obj0Pointer    $8ff8   $8ff8   n/a     Byte            Pointer to the picture data for sprite 0.
-obj1Pointer    $8ff9   $8ff9   n/a     Byte            Pointer to the picture data for sprite 1.
-obj2Pointer    $8ffa   $8ffa   n/a     Byte            Pointer to the picture data for sprite 2.
-obj3Pointer    $8ffb   $8ffb   n/a     Byte            Pointer to the picture data for sprite 3.
-obj4Pointer    $8ffc   $8ffc   n/a     Byte            Pointer to the picture data for sprite 4.
-obj5Pointer    $8ffd   $8ffd   n/a     Byte            Pointer to the picture data for sprite 5.
-obj6Pointer    $8ffe   $8ffe   n/a     Byte            Pointer to the picture data for sprite 6.
-obj7Pointer    $8fff   $8fff   n/a     Byte            Pointer to the picture data for sprite 7.
-offFlag                n/a     n/a     $027c   Byte            Flag telling whether the mouse needs to be redrawn.
-otherPressVec  $84a9   $84a9   $020e   Word            Vector to routine that is called when the mouse button is ...
-pressFlag      $39     $39     $08fe   Byte            Flag to indicate that a new key has been pressed.
-PrntDiskName   $8476   $8476   n/a     18 Bytes        Disk name that current printer driver is on.
-PrntFileName   $8465   $8465   $08ac   17 | 16 Bytes   Name of the current printer driver.
-ramBase                $88c7   $88c7   n/a     4 Bytes         RAM bank for each disk drive to use if the drive type is either ...
-ramExpSize     $88c3   $88c3   n/a     Byte            Byte for number or RAM banks available in RAM expansion unit.
-random         $850a   $850a   $024c   Word            Variable incremented each interrupt to generate a randon nunber.
-rasreg         $d012   $d012   n/a     Byte            Raster register.
-RecoverVector  $84b1   $84b1   $0216   Word            Pointer to routine that is called to recover the background ...
-reqXpos0       n/a     n/a     $0800   Word            This variable corresponds to the Commodore VIC chip register ...
-reqXpos1       n/a     n/a     $0802   Word            This variable corresponds to the Commodore VIC chip register ...
-reqXpos2       n/a     n/a     $0804   Word            This variable corresponds to the Commodore VIC chip register ...
-reqXpos3       n/a     n/a     $0806   Word            This variable corresponds to the Commodore VIC chip register ...
-reqXpos4       n/a     n/a     $0808   Word            This variable corresponds to the Commodore VIC chip register ...
-reqXpos5       n/a     n/a     $080a   Word            This variable corresponds to the Commodore VIC chip register ...
-reqXpos6       n/a     n/a     $080c   Word            This variable corresponds to the Commodore VIC chip register ...
-reqXpos7       n/a     n/a     $080e   Word            This variable corresponds to the Commodore VIC chip register ...
-returnAddress  $3d     $3d     $64     Word            Address to return to from in-line call.
-rightMargin    $37     $37     $0222   Word            The rightmost point for writing characters.
-savedmoby2     $88bb   $88bb   n/a     Byte            Saved value of moby2 for context saving done when dialogue boxes ...
-saveFontTab    $850c   $850c   $024e   9 | 10 Bytes    When a menu is selected, the users active font table is saved ...
-scr80colors    n/a     $88bd   n/a     Byte            Screen colors for 80 column node on the C128.
-scr80polar     n/a     $88bc   n/a     Byte            Copy of reg 24 in the VDC for the C128.
-screencolors   $851e   $851e   n/a     Byte            Default screen colors.
-seconds                $851b   $851b   $f205   Byte            Seconds variable for the time of day clock.
-selectionFlash $84b3   $84b3   $0224   Byte            Variable for the speed at which menu items and icons are ...
-shiftBuf       n/a     $1b45   $70     7 Bytes         Buffer for shifting/doubling sprites. Located in back RAM.
-shiftOutBuf    n/a     $1b4c   $78     7 Bytes         Buffer for shifting/doubling/oring sprites. Located in back ...
-sizeFlags      n/a     $1b53   $db1c   Byte            Height of sprite.
-softOnes       n/a     $1c2d   $d000   192 Bytes       Buffer used for putting sprite bitmaps up on screen without ...
-softZeros      n/a     $1b6d   $d0e0   192 Bytes       Buffer used for putting sprite bitnaps up on screen without ...
-spr0pic                $8a00   $8a00   n/a     64 Bytes        This is where the graphics data for sprite 0 is kept on ...
-spr1pic                $8a40   $8a40   n/a     64 Bytes        This is where the graphics data for sprite 1 is kept on ...
-spr2pic                $8a80   $8a80   n/a     64 Bytes        This is where the graphics data for sprite 2 is kept on ...
-spr3pic                $8ac0   $8ac0   n/a     64 Bytes        This is where the graphics data for sprite 3 is kept on ...
-spr4pic                $8b00   $8b00   n/a     64 Bytes        This is where the graphics data for sprite 4 is kept on ...
-spr5pic                $8b40   $8b40   n/a     64 Bytes        This is where the graphics data for sprite 5 is kept on ...
-spr6pic                $8b80   $8b80   n/a     64 Bytes        This is where the graphics data for sprite 6 is kept on ...
-spr7pic                $8bc0   $8bc0   n/a     64 Bytes        This is where the graphics data for sprite 7 is kept on ...
-sspr1back      n/a     $133b   $56d0   294 | 336 Bytes For the soft sprites #1, there is a buffer in the ...
-sspr2back      n/a     $1461   $5820   294 | 336 Bytes For the soft sprites #2, there is a buffer in the ...
-sspr3back      n/a     $1587   $5970   294 | 336 Bytes For the soft sprites #3, there is a buffer in the ...
-sspr4back      n/a     $16ad   $5ac0   294 | 336 Bytes For the soft sprites #4, there is a buffer in the ...
-sspr5back      n/a     $17d3   $5c10   294 | 336 Bytes For the soft sprites #5, there is a buffer in the ...
-sspr6back      n/a     $18f9   $5d60   294 | 336 Bytes For the soft sprites #6, there is a buffer in the ...
-sspr7back      n/a     $1a1f   $5eb0   294 | 336 Bytes For the soft sprites #7, there is a buffer in the ...
-string         $24     $24     $53     Word            Used by GEOS as a pointer to string destinations for routines ...
-StringFaultVec $84ab   $84ab   $0210   Word            Vector called when an attempt is made to write a character ...
-stringX                $84be   $84be   $022e   Word            The X position for string input.
-stringY                $84c0   $84c0   $0230   Byte            The Y position for string input.
-sysDBData      $851d   $851d   $0259   Byte            Variable that is used internally to indicate which icon caused ...
-sysFlgCopy     $c012   $c012   n/a     Byte            This is a copy of the sysRAMFlg that is saved here when going ...
-sysRAMFlg      $88c4   $88c4   n/a     Byte            If RAM expansion in, Bank 0 is reserved for the Kernal's use.
-totNumBlks     n/a     n/a     $f60b   Word            Total number of blocks in current volume.
-turboFlags     $8492   $8492   n/a     4 Bytes         The turbo state flags for drives 8 through 11 on Commodore.
-usedRecords    $8497   $8497   $f619   Byte            Holds the number of records in an open VLIR file.
-vdcClrMode     n/a     $88be   n/a     Byte            Holds the current color mode for C128 color routines.
-version                $c00f   $c00f   $e00c   Byte            Holds byte indicating what version of GEOS is running.
-windowTop      $33     $33     $021e   Byte            Top line of window for text clipping.
-year           $8516   $8516   $f200   Byte            Holds the year for the time of day clock.
-
-
-GEOS Routines
-=============
-
-Name                   C64     C128    Apple   Description
------------------------------------------------------------
-AllocateBlock          $9048   $9048   $0300   Mark a disk block as in-use.
-AppendRecord           $c289   $c289   $0330   Insert a new VLIR record after the current record.
-AuxDExit               n/a     n/a     $efa9   Aux-driver deinstall and exit routine.
-AuxDInt                        n/a     n/a     $efa3   Aux-driver interrupt level routine.
-AuxDKeyFilter          n/a     n/a     $efa6   Aux-driver keypress filter.
-AuxDMain               n/a     n/a     $efa0   Aux-driver MainLoop level routine.
-BBMult                 $c160   $c160   $fecc   Byte by byte (single-precision) unsigned multiply.
-Bell                   n/a     n/a     $ff86   1000 Hz Bell sound.
-BitmapClip             $c2aa   $c2aa   $fe5a   Display a compacted bitmap, clipping to a sub-window.
-BitmapUp               $c142   $c142   $fe54   Display a compacted bitmap without clipping.
-BitOtherClip           $c2c5   $c2c5   $fe5d   BitmapClip with data coming from elsewhere (e.g., disk).
-BldGDirEntry           $c1f3   $c1f3   $036f   Build a GEOS directory entry in memory.
-BlkAlloc               $c1fc   $c1fc   $0351   Allocate space on disk.
-BlockProcess           $c10c   $c10c   $feb4   Block process from running. Does not freeze timer.
-BMult                  $c163   $c163   $fecf   Byte by word unsigned multiply.
-BootGEOS               $c000   $c000   n/a     Reboot GEOS. Requires only 128 bytes at $c000.
-CalcBlksFree           $c1db   $c1db   $0324   Calculate total number of free disk blocks.
-CallRoutine            $c1d8   $c1d8   $ff08   Pseudo-subroutine call. $0000 aborts call.
-CancelPrint            n/a     n/a     $6018   Cancel printing, clearing printer and I/O card buffers.
-ChangeDiskDevice       $c2bc   $c2bc   n/a     Instruct CBM drive to change its serial device address.
-ChkDkGEOS              $c1de   $c1de   n/a     Check CBM disk for GEOS format.
-ClearCard              n/a     n/a     $6715   Clear any buffered I/O operations.
-ClearMouseMode         $c19c   $c19c   $fe9f   Stop input device monitoring.
-ClearRam               $c178   $c178   $fefc   Clear memory to $00.
-ClockInt               n/a     n/a     $0803   Clock driver interrupt level routine.
-CloseCard              n/a     n/a     $670c   Close access to I/O card.
-CloseRecordFile                $c277   $c277   $0333   Close currently open VLIR file.
-CmpFString             $c26e   $c26e   $fef0   Compare two fixed-length strings.
-CmpString              $c26b   $c26b   $feed   Compare two null-terminated strings.
-CopyFString            $c268   $c268   $feea   Copy a fixed-length string.
-CopyFullScreen         n/a     n/a     $ff92   Fast vertical screen copy.
-CopyLine               n/a     n/a     $ff5f   Bit-boundary horizontal line copy.
-CopyScreenBlock                n/a     n/a     $ff5c   Bit-boundary rectangle copy.
-CopyString             $c256   $c256   $fee7   Copy a null-terminated string.
-CRC                    $c20e   $c20e   $ff14   Cyclic Reduncancy Check calculation.
-Dabs                   $c16f   $c16f   $fedb   Double-precision signed absolute value.
-Ddec                   $c175   $c175   $fee1   Double-precison unsigned decrement.
-Ddiv                   $c169   $c169   $fed5   Double-precision unsigned division.
-DeleteDir              n/a     n/a     $037e   Delete directory.
-DeleteFile             $c238   $c238   $0357   Delete file.
-DeleteRecord           $c283   $c283   $0336   Delete current VLIR record.
-DisablSprite           $c1d5   $c1d5   $feab   Disable sprite.
-DivideBySeven          n/a     n/a     $ff68   Quick division by seven for direct screen access.
-DMult                  $c166   $c166   $fed2   Double-precision unsigned multiply.
-Dnegate                        $c172   $c172   $fede   Double-precision signed negation.
-DoBOp                  n/a     $c2ec   n/a     C128-backram memory primitive.
-DoDlgBox               $c256   $c256   $ff17   Display and begin interaction with dialog box.
-DoIcons                        $c15a   $c15a   $fe0c   Display and begin interaction with icons.
-DoInlineReturn         $c2a4   $c2a4   $fe09   Return from inline subroutine.
-DoMenu                 $c151   $c151   $fe0f   Display and begin interaction with menus.
-DoneWithIO             $c25f   $c25f   n/a     Restore system after I/O across CBM serial bus.
-DoPreviousMenu         $c190   $c190   $fe15   Retract sub-menu and reactivate menus up one level.
-DoRAMOp                        $c2d4   $c2d4   n/a     CBM RAM-expansion unit access primitive.
-DownDirectory          n/a     n/a     $0381   Open subdirectory.
-DrawLine               $c130   $c130   $fe33   Draw, clear, or recover line between two endpoints.
-DrawPoint              $c133   $c133   $fe21   Draw, clear, or recover a single screen point.
-DrawSprite             $c1c6   $c1c6   $fea2   Define sprite image.
-DSdiv                  $c16c   $c16c   $fed8   Double-precision signed division.
-DShiftLeft             $c15d   $c15d   $fec6   Double-precision left shift (zeros shifted in).
-DShiftRight            $c262   $c262   $fec9   Double-precision right shift (zeros shifted in).
-EnableProcess          $c109   $c109   $fec3   Make a process runable immediately.
-EnablSprite            $c1d2   $c1d2   $fea8   Enable sprite.
-EnterDeskTop           $c22c   $c22c   $ff59   Leave application and return to GEOS deskTop.
-EnterTurbo             $c214   $c214   n/a     Activate CBM disk turbo on current drive.
-EraseCharacter         n/a     n/a     $ff3e   Erase text character from screen.
-ExitTurbo              $c232   $c232   n/a     Deactivate CBM disk turbo on current drive.
-FastDelFile            $c244   $c244   n/a     Quick file delete (requires full track/sector list).
-FdFTypesInDir          n/a     n/a     $0363   Find files in directory other than current directory.
-FetchRAM               $c2cb   $c2cb   n/a     Transfer data from CBM RAM-expansion unit.
-FillRam                        $c17b   $c17b   $feff   Fill memory with a particular byte.
-FindBAMBit             $c2ad   $c2ad   n/a     Get allocation status of particular CBM disk block.
-FindFile               $c20b   $c20b   $0369   Search for a particular file.
-FindFTypes             $c23b   $c23b   $0366   Find all files of a particular GEOS type.
-FindVBMBit             n/a     n/a     $036c   Get allocation status of particular ProDOS disk block.
-FirstInit              $c271   $c271   $ff11   GEOS startup entry point.
-FndFilinDir            n/a     n/a     $036c   Find a file in a directory other than current directory.
-FollowChain            $c205   $c205   n/a     Follow chain of CBM sectors, building track/sector table.
-FrameRectangle         $c127   $c127   $fe3f   Draw a rectangular frame (outline).
-FreeBlock              $c2b9   $c2b9   $032a   Mark a disk block as not-in-use.
-FreeDir                        n/a     n/a     $03ba   Free all blocks associated with a subdirectory.
-FreeFile               $c226   $c226   $035a   Free all blocks assocatiated with a file.
-FreezeProcess          $c112   $c112   $feba   Pause a process countdown timer.
-Get1stDirEntry         $9030   $9030   $039c   Get first directory entry.
-GetBlock               $c1e4   $c1e4   $0300   Read single disk block into memory.
-GetCharWidth           $c1c9   $c1c9   $fe87   Calculate width of character without style attributes.
-GetDimensions          $790c   $790c   n/a     Get CBM printer page dimensions.
-GetDirHead             $c247   $c247   $0372   Read directory header into memory.
-GetFHdrInfo            $c229   $c229   $0390   Read a GEOS file header into memory.
-GetFile                        $c208   $c208   $030f   Load GEOS file.
-GetFreeDirBlk          $c1f6   $c1f6   $0375   Find an empty directory slot.
-GetLdVars              n/a     n/a     $ff44   Transfer internal Ld variables to GEOS pseudoregisters.
-GetMode                        n/a     n/a     $6012   Return current printer resolution and setable attributes.
-GetNextChar            $c2a7   $c2a7   $fe75   Get next character from character queue.
-GetNxtDirEntry         $9033   $9033   $039c   Get directory entry other than first.
-GetPathname            n/a     n/a     $0384   Return current path string.
-GetPattern             n/a     n/a     $ff7d   Get eight-byte GEOS pattern definition.
-GetPtrCurDkNm          $c298   $c298   $ff56   Return pointer to current disk name.
-GetRandom              $c187   $c187   $fee4   Calculate new random number.
-GetRealSize            $c1b1   $c1b1   $fe84   Calculate actual character size with attributes.
-GetScanLine            $c13c   $c13c   $fe66   Calculate scanline address.
-GetScreenLine          n/a     n/a     $ff62   Copy Apple screen data to buffer.
-GetSerialNumber                $c196   $c196   $4b38   Return GEOS serial number or pointer to name string.
-GetSpriteData          n/a     n/a     $ff6e   Get sprite image data.
-GetString              $c1ba   $c1ba   $fe72   Get string input from user.
-GetVBM                 n/a     n/a     $031e   Read first VBM block into VBM cache.
-GoDirectory            n/a     n/a     $039f   Go directory to a specific subdirectory.
-GotoFirstMenu          $c1bd   $c1bd   $fe18   Retract all sub-menus and reactivate at main level.
-GraphicsString         $c136   $c136   $fe60   Execute a string of graphics commands.
-HideOnlyMouse          n/a     $c2f2   $ff7a   Temporarily remove soft-sprite mouse pointer.
-HorizontalLine         $c118   $c118   $fe27   Draw a patterned horizontal line.
-i_BitmapUp             $c1ab   $c1ab   $fe57   Inline BitmapUp.
-i_FillRam              $c1b4   $c1b4   $ff02   Inline FillRam.
-i_FrameRectangle       $c1a2   $c1a2   $fe42   Inline FrameRectangle.
-i_GraphicsString       $c1a8   $c1a8   $fe63   Inline GraphicsString.
-i_ImprintRectangle     $c253   $c253   $fe51   Inline ImprintRectangle.
-i_MoveData             $c1b7   $c1b7   $fef9   Inline MoveData.
-i_NewBitUp             n/a     n/a     $ff9e   Inline NewBitUp.
-i_PutString            $c1ae   $c1ae   $fe6c   Inline PutString.
-i_RecoverRectangle     $c1a5   $c1a5   $fe4b   Inline RecoverRectangle.
-i_Rectangle            $c19f   $c19f   $fe3c   Inline Rectangle.
-ImprintLine            n/a     n/a     $ff8f   Imprint horizontal line to background buffer.
-ImprintRectangle       $c250   $c250   $fe4e   Imprint rectangular area to background buffer.
-InfoCard               n/a     n/a     $670f   Get I/O card attributes.
-InitCard               n/a     n/a     $6700   Intialize I/O card.
-InitForDialog          n/a     n/a     $ff4a   Internal pre-dialog box intialization.
-InitForIO              $c25c   $c25c   n/a     Prepare CBM system for I/O across serial bus.
-InitForPrint           $7900   $7900   $6000   Initialize printer (once per document).
-InitMouse              $fe80   $fe80   $f000   Initialize input device.
-InitProcesses          $c103   $c103   $feae   Initialize processes.
-InitRam                        $c181   $c181   $ff05   Initialize memory areas from table.
-InitSprite             n/a     n/a     $ff32   Initialize software sprites.
-InitTextPrompt         $c1c0   $c1c0   $fe78   Initialize text prompt.
-InputByte              n/a     n/a     $6709   Read byte from I/O card.
-InsertRecord           $c286   $c286   $0339   Insert new VLIR record in front of current record.
-InterruptMain          $c100   $c100   $fe03   Main interrupt level processing.
-InvertLine             $c11b   $c11b   $fe2d   Invert the pixels on a horizontal screen line.
-InvertRectangle                $c12a   $c12a   $fe45   Invert the pixels in a rectangular screen area.
-IrqMiddle              n/a     n/a     $ff20   Software interrupts entry point.
-IsMseInRegion          $c2b3   $c2b3   $fe9c   Check if mouse is within a screen region.
-JsrToAux               n/a     n/a     $03b4   Call aux-memory subroutine.
-KeyFilter              n/a     n/a     $f009   Input driver keypress filter.
-LdApplic               $c21d   $c21d   $038d   Load GEOS application.
-LdDeskAcc              $c217   $c217   $035d   Load GEOS desk accessory.
-LdFile                 $c211   $c211   $0312   Load GEOS data file.
-LoadAuxSet             n/a     n/a     $ff77   Use aux-memory character set.
-LoadCharSet            $c1cc   $c1cc   $fe8a   Use main-memory character set.
-MainLoop               $c1c3   $c1c3   $fe00   GEOS MainLoop processing.
-MakeSubDir             n/a     n/a     $0387   Create ProDOS subdirectory.
-MouseOff               $c18d   $c18d   $fe96   Disable mouse pointer and GEOS mouse tracking.
-MouseUp                        $c18a   $c18a   $fe99   Enable mouse pointer and GEOS mouse tracking.
-MoveAuxData            n/a     n/a     $ff6b   Apple aux-memory memory move routine.
-MoveBData              n/a     $c2e3   n/a     C128 backram memory move routine.
-MoveData               $c17c   $c17e   $fef6   Memory move routine.
-NewBitClip             n/a     n/a     $ff95   Bit-boundary BitmapClip.
-NewBitOtherClip                n/a     n/a     $ff0e   Bit-boundary BitOtherClip.
-NewBitUp               n/a     n/a     $ff1d   Bit-boundary BitmapUp.
-NewDisk                        $c1e1   $c1e1   n/a     Tell CBM disk turbo software that a new disk is in drive.
-NextRecord             $c27a   $c27a   $0336   Make next VLIR the current record.
-NormalizeX             n/a     $c2e0   n/a     Normalize C128 X-coordinates for 40/80 modes.
-NxtBlkAlloc            $c24d   $c24d   $0354   Version of BlkAlloc that starts at a specific block.
-OpenCard               n/a     n/a     $6703   Open I/O card for access.
-OpenDisk               $c2a1   $c2a1   $0399   Open disk in current drive.
-OpenRecordFile         $c274   $c274   $033f   Open VLIR file on current disk.
-OutputByte             n/a     n/a     $6706   Write byte to I/O card.
-Panic                  $c2c2   $c2c2   $fef3   System-error dialog box.
-PointRecord            $c280   $c280   $0342   Make specific VLIR record the current record.
-PosSprite              $c1cf   $c1cf   $fea5   Position sprite.
-PreviousRecord         $c27d   $c27d   $0345   Make previous VLIR record the current record.
-PrintASCII             $790f   $790f   $600c   Send ASCII data to printer.
-PrintBuffer            $7906   $7906   $6009   Send graphics data to printer.
-PromptOff              $c29e   $c29e   $fe7e   Turn off text prompt.
-PromptOn               $c29b   $c29b   $fe7b   Turn on text prompt.
-PurgeTurbo             $c235   $c235   n/a     Remove CBM disk turbo software from drive.
-PutBlock               $c1e7   $c1e7   $0303   Write single disk block from memory.
-PutChar                        $c145   $c145   $fe81   Display a single character to screen.
-PutDecimal             $c184   $c184   $fe6f   Format and display an unsigned double-precison number.
-PutDirHead             $c24a   $c24a   $037b   Write directory header to disk.
-PutScreenLine          n/a     n/a     $ff65   Copy buffer data to Apple screen memory.
-PutString              $c148   $c148   $fe69   Print string of characters to screen.
-PutVBM                 n/a     n/a     $0321   Flush VBM cache; write currently cached block to disk.
-ReadBackLine           n/a     n/a     $ff74   Get data from background screen in linear bitmap format.
-ReadBlock              $c21a   $c21a   n/a     CBM get disk block primitive.
-ReadByte               $c2b6   $c2b6   $ff41   Read disk file a byte at a time.
-ReadClock              n/a     n/a     $0800   Update GEOS time/date variables from clock hardware.
-ReadFile               $c1ff   $c1ff   $0315   Read chained list of blocks into memory.
-ReadLink               $904b   $904b   n/a     Read CBM track/sector link.
-ReadRecord             $c28c   $c28c   $0348   Read current VLIR record into memory.
-ReadScanLine           n/a     n/a     $ff98   Get data from foreground screen in linear bitmap format.
-RecoverAllMenus                $c157   $c157   $fe1e   Recover all menus from background buffer.
-RecoverFG              n/a     n/a     $03ae   Restores foreground screen from data created with SaveFG.
-RecoverLine            $c11e   $c11e   $fe30   Recover horizontal screen line from background buffer.
-RecoverMenu            $c154   $c154   $fe1b   Recover single menu from background buffer.
-RecoverRectangle       $c12d   $c12d   $fe48   Recover rectangular screen area from background buffer.
-RecoverSysRam          n/a     n/a     $ff53   Restore system after dialog box or desk accessory.
-Rectangle              $c124   $c124   $fe39   Draw a filled rectangle.
-ReDoMenu               $c193   $c193   $fe12   Reactivate menus at the current level.
-RenameFile             $c259   $c259   $0393   Rename GEOS disk file.
-ReOpenDisk             n/a     n/a     $03a2   Reopen disk to previous directory.
-ResetAlarm             n/a     n/a     $080c   Disable clock driver alarm.
-ResetHandle            $c003   $c003   n/a     Internal bootstrap entry point.
-RestartProcess         $c106   $c106   $feb1   Unblock, unfreeze, and restart process.
-RestoreFontData                n/a     n/a     $ff38   Restore font variables from saveFontTab.
-RstrAppl               $c23e   $c23e   $0360   Leave desk accessory and return to calling application.
-RstrFrmDialog          $c2bf   $c2bf   $ff1a   Exit dialog box.
-SaveFG                 n/a     n/a     $03ab   Save foreground screen data for RestoreFG.
-SaveFile               $c1ed   $c1ed   $0318   Save/create a GEOS file.
-SaveFontData           n/a     n/a     $ff35   Copy font variables to saveFontTab.
-SetAlarm               n/a     n/a     $0809   Set clock driver alarm.
-SetDevice              $c2b0   $c2b0   n/a     Establish communication with a new serial device.
-SetGDirEntry           $c1f0   $c1f0   $037b   Create and save a new GEOS directory entry.
-SetGEOSDisk            $c1ea   $c1ea   n/a     Convert normal CBM disk into GEOS format disk.
-SetLdVars              n/a     n/a     $ff47   Set internal Ld variables from GEOS pseudoregisters.
-SetMode                        n/a     n/a     $6015   Set print mode.
-SetMouse               n/a     $fe89   n/a     Reset input device scanning circutry.
-SetMsePic              n/a     $c2da   $ff2f   Set and preshift new soft-sprite mouse picture.
-SetNewMode             n/a     $c2dd   n/a     Change GEOS 128 graphics mode (40/80 switch).
-SetNextFree            $c292   $c292   $032d   Search for nearby free disk block and allocate it.
-SetNLQ                 $7915   $7915   n/a     Begin near-letter quality printing.
-SetPattern             $c139   $c139   $fe36   Set current fill pattern.
-SetTimeDate            n/a     n/a     $0806   Set clock driver time and date.
-SetUserPattern         n/a     n/a     $ff80   Define new GEOS pattern image.
-Sleep                  $c199   $c199   $fec0   Put current subroutine to sleep for a specified time.
-SlowMouse              $fe83   $fe83   $f003   Reset mouse velocity variables.
-SmallPutChar           $c202   $c202   $fe90   Fast character print routine.
-SoftSprHandler         n/a     n/a     $ff2c   Apple soft-sprite drawing routine.
-SortAlpha              n/a     n/a     $03a5   Insertion sort.
-StartAppl              $c22f   $c22f   $fe06   Warmstart GEOS and start application in memory.
-StartASCII             $7912   $7912   $6006   Begin ASCII mode printing.
-StartMouseMode         $c14e   $c14e   $fe93   Start monitoring input device.
-StartPrint             $7903   $7903   $6003   Begin graphics mode printing.
-StashRAM               $c2c8   $c2c8   n/a     Transfer memory to CBM RAM-expansion unit.
-StatusCard             n/a     n/a     $6712   Get current status of I/O card.
-StopPrint              $7909   $7909   $600f   End page of printer output.
-SwapBData              n/a     $c2e6   n/a     C128 memory swap between front/back ram.
-SwapMainAndAux         n/a     n/a     $ff71   Apple memory swap between main and aux.
-SwapRAM                        $c2ce   $c2ce   n/a     CBM RAM-expansion unit memory swap.
-TempHideMouse          n/a     $c2d7   $ff29   Hide soft-sprites before direct screen access.
-TestPoint              $c13f   $c13f   $fe24   Test status of single screen point (on or off?).
-ToBasic                        $c241   $c241   n/a     Call Commodore BASIC.
-UnblockProcess         $c10f   $c10f   $feb7   Unblock a blocked process, allowing it to run again.
-UnfreezeProcess                $c115   $c115   $febd   Unpause a frozen process timer.
-UpdateMouse            $fe86   $fe86   $f006   Update mouse variables from input device.
-UpdateParent           n/a     n/a     $03b7   Update parent directory to reflect any changes.
-UpdateRecordFile       $c295   $c295   $034b   Update currently open VLIR file without closing it.
-UpDirectory            n/a     n/a     $038a   Close current directory and move up one level.
-UseSystemFont          $c14b   $c14b   $fe8d   Use default system font (BSW 9).
-VerifyBData            n/a     $c2e9   n/a     C128 backram verify.
-VerifyRAM              $c2d1   $c2d1   n/a     CBM RAM-expansion unit verify.
-VerticalLine           $c121   $c121   $fe2a   Draw a patterned vertical line.
-VerWriteBlock          $c223   $c223   n/a     CBM disk block verify primitive.
-WarmStart              n/a     n/a     $ff4d   Bring GEOS to a warmstart state.
-WriteBlock             $c220   $c220   n/a     CBM write disk block primitive.
-WriteFile              $c1f9   $c1f9   $031b   Write chained list of blocks to disk.
-WriteRecord            $c28f   $c28f   $034e   Write current VLIR record to disk.
diff --git a/libsrc/geos-common/system/callroutine.s b/libsrc/geos-common/system/callroutine.s
deleted file mode 100644 (file)
index 54de4ca..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 21.12.99
-
-; void CallRoutine (myRoutine);
-
-            .export _CallRoutine
-
-            .include "jumptab.inc"
-
-_CallRoutine    = CallRoutine
\ No newline at end of file
diff --git a/libsrc/geos-common/system/crt0.s b/libsrc/geos-common/system/crt0.s
deleted file mode 100644 (file)
index 47cec74..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-;
-; Startup code for GEOS
-;
-; Maciej 'YTM/Elysium' Witkowiak
-; 26.10.99, 10.3.2000, 15.8.2001, 23.12.2002
-
-            .export _exit
-            .export __STARTUP__ : absolute = 1          ; Mark as startup
-            .import __STACKADDR__, __STACKSIZE__        ; Linker generated
-            .import __BACKBUFSIZE__                     ; Linker generated
-            .import initlib, donelib
-            .import callmain
-            .import zerobss
-            .importzp sp
-
-            .include "jumptab.inc"
-            .include "geossym.inc"
-            .include "const.inc"
-
-; ------------------------------------------------------------------------
-; Place the startup code in a special segment.
-
-.segment        "STARTUP"
-
-; GEOS 64/128 initializes the screen before starting an application while
-; Apple GEOS does not. In order to provide identical startup conditions,
-; we initialize the screen here, on Apple GEOS. For the same reason, we set
-; the pattern and dispBufferOn, even on GEOS 64/128, although we don't use
-; them here.
-
-        lda #2                  ; Checkerboard pattern
-        jsr SetPattern
-        lda #<(ST_WR_FORE | .MIN (ST_WR_BACK, __BACKBUFSIZE__))
-        sta dispBufferOn
-.ifdef __GEOS_APPLE__
-        jsr i_Rectangle
-        .byte 0
-        .byte SC_PIX_HEIGHT-1
-        .word 0
-        .word SC_PIX_WIDTH-1
-.endif
-
-; Clear the BSS data.
-
-        jsr zerobss
-
-; Set up the stack.
-
-        lda #<(__STACKADDR__ + __STACKSIZE__)
-        ldx #>(__STACKADDR__ + __STACKSIZE__)
-        sta sp
-        stx sp+1
-
-; Call the module constructors.
-
-        jsr initlib
-
-; Push the command-line arguments; and, call main().
-
-        cli
-        jsr callmain
-
-; Call the module destructors.
-
-_exit:  jsr donelib
-
-        jmp EnterDeskTop        ; Return control to the system
diff --git a/libsrc/geos-common/system/ctype.s b/libsrc/geos-common/system/ctype.s
deleted file mode 100644 (file)
index cc0cc98..0000000
+++ /dev/null
@@ -1,281 +0,0 @@
-;
-; Source: The Hitchhiker's Guide To GEOS
-; http://lyonlabs.org/commodore/onrequest/geos-manuals/The_Hitchhikers_Guide_to_GEOS.pdf
-;
-; Character specification table.
-;
-
-        .include "ctype.inc"
-
-.rodata
-
-; The following 256 byte wide table specifies attributes for the isxxx type
-; of functions. Doing it by a table means some overhead in space, but it
-; has major advantages:
-;
-;   * It is fast. If it were'nt for the slow parameter passing of cc65, one
-;     could even define macros for the isxxx functions (this is usually
-;     done on other platforms).
-;
-;   * It is highly portable. The only unportable part is the table itself,
-;     all real code goes into the common library.
-;
-;   * We save some code in the isxxx functions.
-
-__ctype:
-        .byte CT_CTRL           ;                         0/00 ____NULL___
-        .byte CT_CTRL           ;                         1/01 ____N/A____
-        .byte CT_CTRL           ;                         2/02 ____N/A____
-        .byte CT_CTRL           ;                         3/03 ____N/A____
-        .byte CT_CTRL           ;                         4/04 ____N/A____
-        .byte CT_CTRL           ;                         5/05 ____N/A____
-        .byte CT_CTRL           ;                         6/06 ____N/A____
-        .byte CT_CTRL           ;                         7/07 ____N/A____
-        .byte CT_CTRL           ;                         8/08 __BAKSPACE_
-        .byte CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB ;      9/09 __FWDSPACE_
-        .byte CT_CTRL | CT_OTHER_WS ;                    10/0a _____LF____
-        .byte CT_CTRL           ;                        11/0b ____HOME___
-        .byte CT_CTRL           ;                        12/0c ___UPLINE__
-        .byte CT_CTRL | CT_OTHER_WS ;                    13/0d _____CR____
-        .byte CT_CTRL           ;                        14/0e __ULINEON__
-        .byte CT_CTRL           ;                        15/0f __ULINEOFF_
-        .byte CT_CTRL           ;                        16/10 _ESC_GRAPH_
-        .byte CT_CTRL           ;                        17/11 ____N/A____
-        .byte CT_CTRL           ;                        18/12 ___REVON___
-        .byte CT_CTRL           ;                        19/13 ___REVOFF__
-        .byte CT_CTRL           ;                        20/14 ___GOTOX___
-        .byte CT_CTRL           ;                        21/15 ___GOTOY___
-        .byte CT_CTRL           ;                        22/16 ___GOTOXY__
-        .byte CT_CTRL           ;                        23/17 _NEWCRDSET_
-        .byte CT_CTRL           ;                        24/18 ___BOLDON__
-        .byte CT_CTRL           ;                        25/19 __ITALICON_
-        .byte CT_CTRL           ;                        26/1a _OUTLINEON_
-        .byte CT_CTRL           ;                        27/1b _PLAINTEXT_
-        .byte CT_CTRL           ;                        28/1c ____N/A____
-        .byte CT_CTRL           ;                        29/1d ____N/A____
-        .byte CT_CTRL           ;                        30/1e ____N/A____
-        .byte CT_CTRL           ;                        31/1f ____N/A____
-        .byte CT_SPACE_TAB | CT_SPACE ;                  32/20 ___SPACE___
-        .byte CT_NONE           ;                        33/21 _____!_____
-        .byte CT_NONE           ;                        34/22 _____"_____
-        .byte CT_NONE           ;                        35/23 _____#_____
-        .byte CT_NONE           ;                        36/24 _____$_____
-        .byte CT_NONE           ;                        37/25 _____%_____
-        .byte CT_NONE           ;                        38/26 _____&_____
-        .byte CT_NONE           ;                        39/27 _____'_____
-        .byte CT_NONE           ;                        40/28 _____(_____
-        .byte CT_NONE           ;                        41/29 _____)_____
-        .byte CT_NONE           ;                        42/2a _____*_____
-        .byte CT_NONE           ;                        43/2b _____+_____
-        .byte CT_NONE           ;                        44/2c _____,_____
-        .byte CT_NONE           ;                        45/2d _____-_____
-        .byte CT_NONE           ;                        46/2e _____._____
-        .byte CT_NONE           ;                        47/2f _____/_____
-        .byte CT_DIGIT | CT_XDIGIT ;                     48/30 _____0_____
-        .byte CT_DIGIT | CT_XDIGIT ;                     49/31 _____1_____
-        .byte CT_DIGIT | CT_XDIGIT ;                     50/32 _____2_____
-        .byte CT_DIGIT | CT_XDIGIT ;                     51/33 _____3_____
-        .byte CT_DIGIT | CT_XDIGIT ;                     52/34 _____4_____
-        .byte CT_DIGIT | CT_XDIGIT ;                     53/35 _____5_____
-        .byte CT_DIGIT | CT_XDIGIT ;                     54/36 _____6_____
-        .byte CT_DIGIT | CT_XDIGIT ;                     55/37 _____7_____
-        .byte CT_DIGIT | CT_XDIGIT ;                     56/38 _____8_____
-        .byte CT_DIGIT | CT_XDIGIT ;                     57/39 _____9_____
-        .byte CT_NONE           ;                        58/3a _____:_____
-        .byte CT_NONE           ;                        59/3b _____;_____
-        .byte CT_NONE           ;                        60/3c _____<_____
-        .byte CT_NONE           ;                        61/3d _____=_____
-        .byte CT_NONE           ;                        62/3e _____>_____
-        .byte CT_NONE           ;                        63/3f _____?_____
-        .byte CT_NONE           ;                        64/40 _____@_____
-        .byte CT_UPPER | CT_XDIGIT ;                     65/41 _____A_____
-        .byte CT_UPPER | CT_XDIGIT ;                     66/42 _____B_____
-        .byte CT_UPPER | CT_XDIGIT ;                     67/43 _____C_____
-        .byte CT_UPPER | CT_XDIGIT ;                     68/44 _____D_____
-        .byte CT_UPPER | CT_XDIGIT ;                     69/45 _____E_____
-        .byte CT_UPPER | CT_XDIGIT ;                     70/46 _____F_____
-        .byte CT_UPPER          ;                        71/47 _____G_____
-        .byte CT_UPPER          ;                        72/48 _____H_____
-        .byte CT_UPPER          ;                        73/49 _____I_____
-        .byte CT_UPPER          ;                        74/4a _____J_____
-        .byte CT_UPPER          ;                        75/4b _____K_____
-        .byte CT_UPPER          ;                        76/4c _____L_____
-        .byte CT_UPPER          ;                        77/4d _____M_____
-        .byte CT_UPPER          ;                        78/4e _____N_____
-        .byte CT_UPPER          ;                        79/4f _____O_____
-        .byte CT_UPPER          ;                        80/50 _____P_____
-        .byte CT_UPPER          ;                        81/51 _____Q_____
-        .byte CT_UPPER          ;                        82/52 _____R_____
-        .byte CT_UPPER          ;                        83/53 _____S_____
-        .byte CT_UPPER          ;                        84/54 _____T_____
-        .byte CT_UPPER          ;                        85/55 _____U_____
-        .byte CT_UPPER          ;                        86/56 _____V_____
-        .byte CT_UPPER          ;                        87/57 _____W_____
-        .byte CT_UPPER          ;                        88/58 _____X_____
-        .byte CT_UPPER          ;                        89/59 _____Y_____
-        .byte CT_UPPER          ;                        90/5a _____Z_____
-        .byte CT_NONE           ;                        91/5b _____[_____
-        .byte CT_NONE           ;                        92/5c _____\_____
-        .byte CT_NONE           ;                        93/5d _____]_____
-        .byte CT_NONE           ;                        94/5e _____^_____
-        .byte CT_NONE           ;                        95/5f _UNDERLINE_
-        .byte CT_NONE           ;                        96/60 _____`_____
-        .byte CT_LOWER | CT_XDIGIT ;                     97/61 _____a_____
-        .byte CT_LOWER | CT_XDIGIT ;                     98/62 _____b_____
-        .byte CT_LOWER | CT_XDIGIT ;                     99/63 _____c_____
-        .byte CT_LOWER | CT_XDIGIT ;                    100/64 _____d_____
-        .byte CT_LOWER | CT_XDIGIT ;                    101/65 _____e_____
-        .byte CT_LOWER | CT_XDIGIT ;                    102/66 _____f_____
-        .byte CT_LOWER          ;                       103/67 _____g_____
-        .byte CT_LOWER          ;                       104/68 _____h_____
-        .byte CT_LOWER          ;                       105/69 _____i_____
-        .byte CT_LOWER          ;                       106/6a _____j_____
-        .byte CT_LOWER          ;                       107/6b _____k_____
-        .byte CT_LOWER          ;                       108/6c _____l_____
-        .byte CT_LOWER          ;                       109/6d _____m_____
-        .byte CT_LOWER          ;                       110/6e _____n_____
-        .byte CT_LOWER          ;                       111/6f _____o_____
-        .byte CT_LOWER          ;                       112/70 _____p_____
-        .byte CT_LOWER          ;                       113/71 _____q_____
-        .byte CT_LOWER          ;                       114/72 _____r_____
-        .byte CT_LOWER          ;                       115/73 _____s_____
-        .byte CT_LOWER          ;                       116/74 _____t_____
-        .byte CT_LOWER          ;                       117/75 _____u_____
-        .byte CT_LOWER          ;                       118/76 _____v_____
-        .byte CT_LOWER          ;                       119/77 _____w_____
-        .byte CT_LOWER          ;                       120/78 _____x_____
-        .byte CT_LOWER          ;                       121/79 _____y_____
-        .byte CT_LOWER          ;                       122/7a _____z_____
-        .byte CT_NONE           ;                       123/7b _____{_____
-        .byte CT_NONE           ;                       124/7c _____|_____
-        .byte CT_NONE           ;                       125/7d _____}_____
-        .byte CT_NONE           ;                       126/7e _____~_____
-        .byte CT_CTRL           ;                       127/7f __USELAST__
-        .byte CT_NONE           ;                       128/80 __SHORTCUT_
-        .byte CT_NONE           ;                       129/81 ____N/A____
-        .byte CT_NONE           ;                       130/82 ____N/A____
-        .byte CT_NONE           ;                       131/83 ____N/A____
-        .byte CT_NONE           ;                       132/84 ____N/A____
-        .byte CT_NONE           ;                       133/85 ____N/A____
-        .byte CT_NONE           ;                       134/86 ____N/A____
-        .byte CT_NONE           ;                       135/87 ____N/A____
-        .byte CT_NONE           ;                       136/88 ____N/A____
-        .byte CT_NONE           ;                       137/89 ____N/A____
-        .byte CT_NONE           ;                       138/8a ____N/A____
-        .byte CT_NONE           ;                       139/8b ____N/A____
-        .byte CT_NONE           ;                       140/8c ____N/A____
-        .byte CT_NONE           ;                       141/8d ____N/A____
-        .byte CT_NONE           ;                       142/8e ____N/A____
-        .byte CT_NONE           ;                       143/8f ____N/A____
-        .byte CT_NONE           ;                       144/90 ____N/A____
-        .byte CT_NONE           ;                       145/91 ____N/A____
-        .byte CT_NONE           ;                       146/92 ____N/A____
-        .byte CT_NONE           ;                       147/93 ____N/A____
-        .byte CT_NONE           ;                       148/94 ____N/A____
-        .byte CT_NONE           ;                       149/95 ____N/A____
-        .byte CT_NONE           ;                       150/96 ____N/A____
-        .byte CT_NONE           ;                       151/97 ____N/A____
-        .byte CT_NONE           ;                       152/98 ____N/A____
-        .byte CT_NONE           ;                       153/99 ____N/A____
-        .byte CT_NONE           ;                       154/9a ____N/A____
-        .byte CT_NONE           ;                       155/9b ____N/A____
-        .byte CT_NONE           ;                       156/9c ____N/A____
-        .byte CT_NONE           ;                       157/9d ____N/A____
-        .byte CT_NONE           ;                       158/9e ____N/A____
-        .byte CT_NONE           ;                       159/9f ____N/A____
-        .byte CT_NONE           ;                       160/a0 ____N/A____
-        .byte CT_NONE           ;                       161/a1 ____N/A____
-        .byte CT_NONE           ;                       162/a2 ____N/A____
-        .byte CT_NONE           ;                       163/a3 ____N/A____
-        .byte CT_NONE           ;                       164/a4 ____N/A____
-        .byte CT_NONE           ;                       165/a5 ____N/A____
-        .byte CT_NONE           ;                       166/a6 ____N/A____
-        .byte CT_NONE           ;                       167/a7 ____N/A____
-        .byte CT_NONE           ;                       168/a8 ____N/A____
-        .byte CT_NONE           ;                       169/a9 ____N/A____
-        .byte CT_NONE           ;                       170/aa ____N/A____
-        .byte CT_NONE           ;                       171/ab ____N/A____
-        .byte CT_NONE           ;                       172/ac ____N/A____
-        .byte CT_NONE           ;                       173/ad ____N/A____
-        .byte CT_NONE           ;                       174/ae ____N/A____
-        .byte CT_NONE           ;                       175/af ____N/A____
-        .byte CT_NONE           ;                       176/b0 ____N/A____
-        .byte CT_NONE           ;                       177/b1 ____N/A____
-        .byte CT_NONE           ;                       178/b2 ____N/A____
-        .byte CT_NONE           ;                       179/b3 ____N/A____
-        .byte CT_NONE           ;                       180/b4 ____N/A____
-        .byte CT_NONE           ;                       181/b5 ____N/A____
-        .byte CT_NONE           ;                       182/b6 ____N/A____
-        .byte CT_NONE           ;                       183/b7 ____N/A____
-        .byte CT_NONE           ;                       184/b8 ____N/A____
-        .byte CT_NONE           ;                       185/b9 ____N/A____
-        .byte CT_NONE           ;                       186/ba ____N/A____
-        .byte CT_NONE           ;                       187/bb ____N/A____
-        .byte CT_NONE           ;                       188/bc ____N/A____
-        .byte CT_NONE           ;                       189/bd ____N/A____
-        .byte CT_NONE           ;                       190/be ____N/A____
-        .byte CT_NONE           ;                       191/bf ____N/A____
-        .byte CT_NONE           ;                       192/c0 ____N/A____
-        .byte CT_NONE           ;                       193/c1 ____N/A____
-        .byte CT_NONE           ;                       194/c2 ____N/A____
-        .byte CT_NONE           ;                       195/c3 ____N/A____
-        .byte CT_NONE           ;                       196/c4 ____N/A____
-        .byte CT_NONE           ;                       197/c5 ____N/A____
-        .byte CT_NONE           ;                       198/c6 ____N/A____
-        .byte CT_NONE           ;                       199/c7 ____N/A____
-        .byte CT_NONE           ;                       200/c8 ____N/A____
-        .byte CT_NONE           ;                       201/c9 ____N/A____
-        .byte CT_NONE           ;                       202/ca ____N/A____
-        .byte CT_NONE           ;                       203/cb ____N/A____
-        .byte CT_NONE           ;                       204/cc ____N/A____
-        .byte CT_NONE           ;                       205/cd ____N/A____
-        .byte CT_NONE           ;                       206/ce ____N/A____
-        .byte CT_NONE           ;                       207/cf ____N/A____
-        .byte CT_NONE           ;                       208/d0 ____N/A____
-        .byte CT_NONE           ;                       209/d1 ____N/A____
-        .byte CT_NONE           ;                       210/d2 ____N/A____
-        .byte CT_NONE           ;                       211/d3 ____N/A____
-        .byte CT_NONE           ;                       212/d4 ____N/A____
-        .byte CT_NONE           ;                       213/d5 ____N/A____
-        .byte CT_NONE           ;                       214/d6 ____N/A____
-        .byte CT_NONE           ;                       215/d7 ____N/A____
-        .byte CT_NONE           ;                       216/d8 ____N/A____
-        .byte CT_NONE           ;                       217/d9 ____N/A____
-        .byte CT_NONE           ;                       218/da ____N/A____
-        .byte CT_NONE           ;                       219/db ____N/A____
-        .byte CT_NONE           ;                       220/dc ____N/A____
-        .byte CT_NONE           ;                       221/dd ____N/A____
-        .byte CT_NONE           ;                       222/de ____N/A____
-        .byte CT_NONE           ;                       223/df ____N/A____
-        .byte CT_NONE           ;                       224/e0 ____N/A____
-        .byte CT_NONE           ;                       225/e1 ____N/A____
-        .byte CT_NONE           ;                       226/e2 ____N/A____
-        .byte CT_NONE           ;                       227/e3 ____N/A____
-        .byte CT_NONE           ;                       228/e4 ____N/A____
-        .byte CT_NONE           ;                       229/e5 ____N/A____
-        .byte CT_NONE           ;                       230/e6 ____N/A____
-        .byte CT_NONE           ;                       231/e7 ____N/A____
-        .byte CT_NONE           ;                       232/e8 ____N/A____
-        .byte CT_NONE           ;                       233/e9 ____N/A____
-        .byte CT_NONE           ;                       234/ea ____N/A____
-        .byte CT_NONE           ;                       235/eb ____N/A____
-        .byte CT_NONE           ;                       236/ec ____N/A____
-        .byte CT_NONE           ;                       237/ed ____N/A____
-        .byte CT_NONE           ;                       238/ee ____N/A____
-        .byte CT_NONE           ;                       239/ef ____N/A____
-        .byte CT_NONE           ;                       240/f0 ____N/A____
-        .byte CT_NONE           ;                       241/f1 ____N/A____
-        .byte CT_NONE           ;                       242/f2 ____N/A____
-        .byte CT_NONE           ;                       243/f3 ____N/A____
-        .byte CT_NONE           ;                       244/f4 ____N/A____
-        .byte CT_NONE           ;                       245/f5 ____N/A____
-        .byte CT_NONE           ;                       246/f6 ____N/A____
-        .byte CT_NONE           ;                       247/f7 ____N/A____
-        .byte CT_NONE           ;                       248/f8 ____N/A____
-        .byte CT_NONE           ;                       249/f9 ____N/A____
-        .byte CT_NONE           ;                       250/fa ____N/A____
-        .byte CT_NONE           ;                       251/fb ____N/A____
-        .byte CT_NONE           ;                       252/fc ____N/A____
-        .byte CT_NONE           ;                       253/fd ____N/A____
-        .byte CT_NONE           ;                       254/fe ____N/A____
-        .byte CT_NONE           ;                       255/ff ____N/A____
diff --git a/libsrc/geos-common/system/enterdesktop.s b/libsrc/geos-common/system/enterdesktop.s
deleted file mode 100644 (file)
index 774de3c..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 30.10.99, 17.04.2003
-
-; void EnterDeskTop (void);
-
-            .import _exit
-            .export _EnterDeskTop
-
-_EnterDeskTop:
-        lda #0
-        tax
-        jmp _exit
diff --git a/libsrc/geos-common/system/extzp.s b/libsrc/geos-common/system/extzp.s
deleted file mode 100644 (file)
index 0990a5a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
-; 31.12.2002
-;
-; zeropage locations for exclusive use by the library
-;
-
-            .exportzp cursor_x, cursor_y
-            .exportzp cursor_c, cursor_r
-
-.segment        "EXTZP" : zeropage
-
-cursor_x:
-        .res 2                  ; Cursor column (0-319/639)
-cursor_y:
-        .res 1                  ; Cursor row    (0-199)
-
-cursor_c:
-        .res 1                  ; Cursor column (0-39/79)
-cursor_r:
-        .res 1                  ; Cursor row    (0-24)
diff --git a/libsrc/geos-common/system/firstinit.s b/libsrc/geos-common/system/firstinit.s
deleted file mode 100644 (file)
index c0695ee..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void FirstInit (void);
-
-            .export _FirstInit
-
-            .include "jumptab.inc"
-
-_FirstInit      = FirstInit
\ No newline at end of file
diff --git a/libsrc/geos-common/system/getrandom.s b/libsrc/geos-common/system/getrandom.s
deleted file mode 100644 (file)
index 74c329e..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 30.10.1999, 2.1.2003
-
-; char GetRandom (void);
-
-            .export _GetRandom
-
-            .include "jumptab.inc"
-
-_GetRandom:
-        jsr GetRandom
-        ldx #0
-        rts
diff --git a/libsrc/geos-common/system/joy_stddrv.s b/libsrc/geos-common/system/joy_stddrv.s
deleted file mode 100644 (file)
index 1880ef2..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Name of the standard joystick driver
-;
-; Ullrich von Bassewitz, 2002-12-21
-;
-; const char joy_stddrv[];
-;
-
-            .export _joy_stddrv
-
-.rodata
-
-_joy_stddrv:
-        .asciiz "geos-stdjoy.joy"
-
diff --git a/libsrc/geos-common/system/mainargs.s b/libsrc/geos-common/system/mainargs.s
deleted file mode 100644 (file)
index db829cc..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-03-07
-; Maciej Witkowiak, 2003-05-02
-;
-; Setup arguments for main
-;
-; There is always either 1 or 3 arguments:
-; <program name>,0
-; or
-; <program name>, <data file name>, <data disk name>, 0
-; the 2nd case is when using DeskTop user drags an icon of a file and drops it
-; on icon of your application
-;
-
-            .constructor initmainargs, 24
-            .import __argc, __argv
-
-            .include "const.inc"
-            .include "geossym.inc"
-
-.segment        "INIT"
-
-; Setup arguments for main
-
-initmainargs:
-; Setup a pointer to our argv vector
-
-        lda #<argv
-        sta __argv
-        lda #>argv
-        sta __argv+1
-
-; Copy program name
-        ldy #0
-@fn_loop:
-        lda dirEntryBuf+OFF_FNAME,y
-.ifdef __GEOS_CBM__
-        cmp #$a0
-.else
-        cmp #0
-.endif
-        beq @fn_end
-        sta argv0,y
-        iny
-        cpy #16+1
-        bne @fn_loop
-@fn_end:
-        lda #0
-        sta argv0,y
-        sta __argc+1
-
-; Check if there are any more arguments
-        lda dataFileName
-        bne @threeargs
-        ldx #0                  ; no dataFileName - NULL the 2nd argument
-        stx argv+2
-        stx argv+3
-        inx                     ; there is only one argument
-        bne @setargc
-@threeargs:
-        ldx #3                  ; there are three arguments
-@setargc:
-        stx __argc
-        rts
-
-.data
-
-argv:
-        .word argv0             ; Pointer to program name
-        .word dataFileName      ; dataFileName or NULL if last one
-        .word dataDiskName      ; dataDiskName
-        .word $0000             ; last one must be NULL
-
-.bss
-
-argv0:
-        .res 17                 ; Program name
diff --git a/libsrc/geos-common/system/mainloop.s b/libsrc/geos-common/system/mainloop.s
deleted file mode 100644 (file)
index d1f8632..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 30.10.1999, 10.01.2003
-
-; void MainLoop (void);
-
-            .export _MainLoop
-
-            .include "jumptab.inc"
-
-_MainLoop       = MainLoop
diff --git a/libsrc/geos-common/system/oserrlist.s b/libsrc/geos-common/system/oserrlist.s
deleted file mode 100644 (file)
index 4ec3020..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
-; 25.12.2002
-;
-; Defines the platform specific error list.
-;
-; The table is built as a list of entries
-;
-;       .byte   entrylen
-;       .byte   errorcode
-;       .asciiz errormsg
-;
-; and terminated by an entry with length zero that is returned if the
-; error code could not be found.
-;
-
-            .export __sys_oserrlist
-
-            .include "const.inc"
-
-;----------------------------------------------------------------------------
-; Macros used to generate the list (may get moved to an include file?)
-
-; Regular entry
-.macro  sys_oserr_entry code, msg
-        .local Start, End
-Start:  .byte End - Start
-        .byte code
-        .asciiz msg
-End:
-.endmacro
-
-; Sentinel entry
-.macro  sys_oserr_sentinel msg
-        .byte 0                 ; Length is always zero
-        .byte 0                 ; Code is unused
-        .asciiz msg
-.endmacro
-
-;----------------------------------------------------------------------------
-; The error message table
-
-.rodata
-
-__sys_oserrlist:
-        sys_oserr_entry NO_BLOCKS, "No free blocks"
-        sys_oserr_entry INV_TRACK, "Illegal track or sector"
-        sys_oserr_entry INSUFF_SPACE, "Disk full"
-        sys_oserr_entry FULL_DIRECTORY, "Directory full"
-        sys_oserr_entry FILE_NOT_FOUND, "File not found"
-        sys_oserr_entry BAD_BAM, "Inconsistent BAM"
-        sys_oserr_entry UNOPENED_VLIR, "VLIR file not opened"
-        sys_oserr_entry INV_RECORD, "Invalid VLIR record"
-        sys_oserr_entry OUT_OF_RECORDS, "Out of VLIR records"
-        sys_oserr_entry STRUCT_MISMAT, "Structure mismatch"
-        sys_oserr_entry BFR_OVERFLOW, "Buffer overflow"
-        sys_oserr_entry CANCEL_ERR, "Operation cancelled"
-        sys_oserr_entry DEV_NOT_FOUND, "Device not found"
-        sys_oserr_entry INCOMPATIBLE, "Incompatible device"
-        sys_oserr_entry 20, "Read error"
-        sys_oserr_entry 21, "Read error"
-        sys_oserr_entry 22, "Read error"
-        sys_oserr_entry 23, "Read error"
-        sys_oserr_entry 24, "Read error"
-        sys_oserr_entry 25, "Write error"
-        sys_oserr_entry 26, "Write protect on"
-        sys_oserr_entry 27, "Read error"
-        sys_oserr_entry 28, "Write error"
-        sys_oserr_entry 29, "Disk ID mismatch"
-        sys_oserr_entry 30, "Syntax error"
-        sys_oserr_entry 31, "Syntax error"
-        sys_oserr_entry 32, "Syntax error"
-        sys_oserr_entry 33, "Syntax error (invalid file name)"
-        sys_oserr_entry 34, "Syntax error (no file given)"
-        sys_oserr_entry 39, "Syntax error"
-        sys_oserr_entry 50, "Record not present"
-        sys_oserr_entry 51, "Overflow in record"
-        sys_oserr_entry 52, "File too large"
-        sys_oserr_entry 60, "Write file open"
-        sys_oserr_entry 61, "File not open"
-        sys_oserr_entry 62, "File not found"
-        sys_oserr_entry 63, "File exists"
-        sys_oserr_entry 64, "File type mismatch"
-        sys_oserr_entry 65, "No block"
-        sys_oserr_entry 66, "Illegal track or sector"
-        sys_oserr_entry 67, "Illegal system track or sector"
-        sys_oserr_entry 70, "No channel"
-        sys_oserr_entry 71, "Directory error"
-        sys_oserr_entry 72, "Disk full"
-        sys_oserr_entry 73, "DOS version mismatch"
-        sys_oserr_entry 74, "Drive not ready"
-        sys_oserr_sentinel "Unknown error"
diff --git a/libsrc/geos-common/system/oserror.s b/libsrc/geos-common/system/oserror.s
deleted file mode 100644 (file)
index f0915fd..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-;
-; Ullrich von Bassewitz, 17.05.2000
-; GEOS port: Maciej 'YTM/Elysium' Witkowiak
-; 2.7.2001
-;
-; int __fastcall__ _osmaperrno (unsigned char oserror);
-; /* Map a system specific error into a system independent code */
-;
-
-            .export __osmaperrno
-
-            .include "errno.inc"
-            .include "const.inc"
-
-__osmaperrno:
-        ldx #ErrTabSize
-@L1:    cmp ErrTab-2,x          ; Search for the error code
-        beq @L2                 ; Jump if found
-        dex
-        dex
-        bne @L1                 ; Next entry
-
-; Code not found, return EINVAL
-
-        lda #<EINVAL
-        ldx #>EINVAL
-        rts
-
-; Found the code
-
-@L2:    lda ErrTab-1,x
-        ldx #$00                ; High byte always zero
-        rts
-
-.rodata
-
-ErrTab:
-        .byte NO_BLOCKS,        EINVAL  ; ???
-        .byte INV_TRACK,        EINVAL  ; invalid track&sector pair
-        .byte INSUFF_SPACE,     ENOSPC  ; out of space
-        .byte FULL_DIRECTORY,   ENOSPC  ; directory is full
-        .byte FILE_NOT_FOUND,   ENOENT  ; file not found
-        .byte BAD_BAM,          EIO     ; bam inconsistent
-        .byte UNOPENED_VLIR,    EINVAL  ; using VLIR file without opening
-        .byte INV_RECORD,       EINVAL  ; using >128 VLIR record number
-        .byte OUT_OF_RECORDS,   ENOSPC  ; cannot insert/add record
-        .byte STRUCT_MISMAT,    EINVAL  ; ???
-        .byte BFR_OVERFLOW,     ENOMEM  ; file longer than buffer or end of file
-        .byte CANCEL_ERR,       EIO     ; ???
-        .byte DEV_NOT_FOUND,    ENODEV  ; device not found
-        .byte INCOMPATIBLE,     EINVAL  ; ???
-
-;       .byte 20,               ; Read error
-;       .byte 21,               ; Read error
-;       .byte 22,               ; Read error
-;       .byte 23,               ; Read error
-;       .byte 24,               ; Read error
-;       .byte 25,               ; Write error
-        .byte 26, EACCES        ; Write protect on
-;       .byte 27,               ; Read error
-;       .byte 28,               ; Write error
-;       .byte 29,               ; Disk ID mismatch
-;       .byte 30,               ; Syntax error
-;       .byte 31,               ; Syntax error
-;       .byte 32,               ; Syntax error
-        .byte 33, EINVAL        ; Syntax error (invalid file name)
-        .byte 34, EINVAL        ; Syntax error (no file given)
-;       .byte 39,               ; Syntax error
-;       .byte 50,               ; Record not present
-;       .byte 51,               ; Overflow in record
-;       .byte 52,               ; File too large
-        .byte 60, EINVAL        ; Write file open
-        .byte 61, EINVAL        ; File not open
-        .byte 62, ENOENT        ; File not found
-        .byte 63, EEXIST        ; File exists
-        .byte 64, EINVAL        ; File type mismatch
-;       .byte 65,               ; No block
-;       .byte 66,               ; Illegal track or sector
-;       .byte 67,               ; Illegal system track or sector
-        .byte 70, EBUSY         ; No channel
-;       .byte 71,               ; Directory error
-;       .byte 72,               ; Disk full
-;       .byte 73,               ; DOS version mismatch
-
-ErrTabSize      = (* - ErrTab)
diff --git a/libsrc/geos-common/system/panic.s b/libsrc/geos-common/system/panic.s
deleted file mode 100644 (file)
index 9ea9160..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Maciej 'YTM/Alliance' Witkowiak
-;
-; 30.10.99
-
-; void Panic (void);
-
-            .export _Panic
-
-            .include "jumptab.inc"
-
-_Panic          = Panic
\ No newline at end of file
diff --git a/libsrc/geos-common/system/randomize.s b/libsrc/geos-common/system/randomize.s
deleted file mode 100644 (file)
index 67c217d..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.11.2002
-;
-; void _randomize (void);
-; /* Initialize the random number generator */
-;
-
-            .export __randomize
-            .import _srand
-
-            .include "geossym.inc"
-
-__randomize:
-        lda random              ; get random value from internal generator
-        ldx random+1
-        jmp _srand              ; and use it as seed
diff --git a/libsrc/geos-common/system/setoserror.s b/libsrc/geos-common/system/setoserror.s
deleted file mode 100644 (file)
index adc6ad0..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Maciej 'YTM/Elysium' Witkowiak
-;
-; 2.1.2003
-;
-
-            .export setoserror
-            .import __oserror
-
-setoserror:
-        stx __oserror
-        txa
-        ldx #0                  ; X is cleared (high byte for promoting char to int)
-        tay                     ; Y register is used just to save flags state
-        rts
diff --git a/libsrc/geos-common/system/systime.c b/libsrc/geos-common/system/systime.c
deleted file mode 100644 (file)
index 5eb87fe..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-** systime.c
-**
-** Maciej 'YTM/Elysium' Witkowiak, 22.11.2002
-*/
-
-#include <time.h>
-#include <geos.h>
-
-time_t _systime(void)
-{
-    struct tm currentTime;
-
-    currentTime.tm_sec = system_date.s_seconds;
-    currentTime.tm_min = system_date.s_minutes;
-    currentTime.tm_hour = system_date.s_hour;
-    currentTime.tm_mday = system_date.s_day;
-    currentTime.tm_mon = system_date.s_month;
-    currentTime.tm_year = system_date.s_year;
-    if (system_date.s_year < 87) {
-        currentTime.tm_year+=100;
-    }
-    currentTime.tm_isdst = -1;
-
-    return mktime(&currentTime);
-}
-
-clock_t clock(void)
-{
-    return _systime();
-}
diff --git a/libsrc/geos-common/system/sysuname.s b/libsrc/geos-common/system/sysuname.s
deleted file mode 100644 (file)
index 8eac059..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; unsigned char __fastcall__ _sysuname (struct utsname* buf);
-;
-
-            .import utscopy
-            .export __sysuname, utsdata
-
-__sysuname      = utscopy
-
-;--------------------------------------------------------------------------
-; Data. We define a fixed utsname struct here and just copy it.
-
-.rodata
-
-utsdata:
-        ; sysname
-        .asciiz "cc65"
-
-        ; nodename
-        .asciiz ""
-
-        ; release
-        .byte ((.VERSION >> 8) & $0F) + '0'
-        .byte '.'
-        .byte ((.VERSION >> 4) & $0F) + '0'
-        .byte $00
-
-        ; version
-        .byte (.VERSION & $0F) + '0'
-        .byte $00
-
-        ; machine
-        .asciiz "GEOS"
-
-
-
diff --git a/libsrc/geos-common/system/tgi_colors.s b/libsrc/geos-common/system/tgi_colors.s
deleted file mode 100644 (file)
index 0d40429..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-;
-; Target-specific black & white values, for use by the target-shared TGI kernel
-;
-
-            .include "tgi-kernel.inc"
-
-tgi_color_black = $00
-tgi_color_white = $01
diff --git a/libsrc/geos-common/system/tgi_stddrv.s b/libsrc/geos-common/system/tgi_stddrv.s
deleted file mode 100644 (file)
index 8e1930a..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Name of the standard tgi driver
-;
-; Oliver Schmidt, 2011-05-02
-;
-; const char tgi_stddrv[];
-;
-
-            .export _tgi_stddrv
-
-.rodata
-
-_tgi_stddrv:
-        .asciiz "geos-tgi.tgi"
diff --git a/libsrc/joystick/joy-kernel.s b/libsrc/joystick/joy-kernel.s
deleted file mode 100644 (file)
index 2b1dcf8..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-12-20
-;
-; Common functions of the joystick API.
-;
-
-        .import         joy_libref
-        .importzp       ptr1
-        .interruptor    joy_irq         ; Export as IRQ handler
-
-        .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-
-
-;----------------------------------------------------------------------------
-; Variables
-
-
-.bss
-_joy_drv:       .res    2               ; Pointer to driver
-
-_joy_masks:     .res    .sizeof(JOY_HDR::MASKS)
-
-; Jump table for the driver functions.
-.data
-joy_vectors:
-joy_install:    jmp     $0000
-joy_uninstall:  jmp     $0000
-joy_count:      jmp     $0000
-joy_read:       jmp     $0000
-joy_irq:        .byte   $60, $00, $00   ; RTS plus two dummy bytes
-
-; Driver header signature
-.rodata
-joy_sig:        .byte   $6A, $6F, $79, JOY_API_VERSION  ; "joy", version
-
-
-.code
-;----------------------------------------------------------------------------
-; unsigned char __fastcall__ joy_install (void* driver);
-; /* Install the driver once it is loaded */
-
-
-_joy_install:
-        sta     _joy_drv
-        sta     ptr1
-        stx     _joy_drv+1
-        stx     ptr1+1
-
-; Check the driver signature
-
-        ldy     #.sizeof(joy_sig)-1
-@L0:    lda     (ptr1),y
-        cmp     joy_sig,y
-        bne     inv_drv
-        dey
-        bpl     @L0
-
-; Set the library reference
-
-        ldy     #JOY_HDR::LIBREF
-        lda     #<joy_libref
-        sta     (ptr1),y
-        iny
-        lda     #>joy_libref
-        sta     (ptr1),y
-
-; Copy the mask array
-
-        ldy     #JOY_HDR::MASKS + .sizeof(JOY_HDR::MASKS) - 1
-        ldx     #.sizeof(JOY_HDR::MASKS)-1
-@L1:    lda     (ptr1),y
-        sta     _joy_masks,x
-        dey
-        dex
-        bpl     @L1
-
-; Copy the jump vectors
-
-        ldy     #JOY_HDR::JUMPTAB
-        ldx     #0
-@L2:    inx                             ; Skip the JMP opcode
-        jsr     copy                    ; Copy one byte
-        jsr     copy                    ; Copy one byte
-        cpy     #(JOY_HDR::JUMPTAB + .sizeof(JOY_HDR::JUMPTAB))
-        bne     @L2
-
-        jsr     joy_install             ; Call driver install routine
-        tay                             ; Test error code
-        bne     @L3                     ; Bail out if install had errors
-
-; Install the IRQ vector if the driver needs it. A/X contains the error code
-; from joy_install, so don't use it.
-
-        ldy     joy_irq+2               ; Check high byte of IRQ vector
-        beq     @L3                     ; Jump if vector invalid
-        ldy     #$4C                    ; JMP opcode
-        sty     joy_irq                 ; Activate IRQ routine
-@L3:    rts
-
-; Driver signature invalid
-
-inv_drv:
-        lda     #JOY_ERR_INV_DRIVER
-        ldx     #0
-        rts
-
-; Copy one byte from the jump vectors
-
-copy:   lda     (ptr1),y
-        iny
-        sta     joy_vectors,x
-        inx
-        rts
-
-;----------------------------------------------------------------------------
-; unsigned char joy_uninstall (void);
-; /* Uninstall the currently loaded driver. Note: This call does not free
-; ** allocated memory.
-; */
-
-_joy_uninstall:
-        lda     #$60                    ; RTS opcode
-        sta     joy_irq                 ; Disable IRQ entry point
-
-        jsr     joy_uninstall           ; Call the driver routine
-
-_joy_clear_ptr:                         ; External entry point
-        lda     #0
-        sta     _joy_drv
-        sta     _joy_drv+1              ; Clear the driver pointer
-
-        tax                             ; Return zero
-        rts
diff --git a/libsrc/joystick/joy_count.s b/libsrc/joystick/joy_count.s
deleted file mode 100644 (file)
index 96ef45e..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-12-20
-;
-; unsigned char joy_count (void);
-; /* Return the number of joysticks supported by the driver */
-;
-
-        .include        "joy-kernel.inc"
-
-        _joy_count      = joy_count             ; Use driver entry
diff --git a/libsrc/joystick/joy_load.s b/libsrc/joystick/joy_load.s
deleted file mode 100644 (file)
index 7115f5d..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-;
-; Ullrich von Bassewitz, 2006-06-05
-;
-; unsigned char __fastcall__ joy_load_driver (const char* driver);
-; /* Load and install a joystick driver. Return an error code. */
-
-
-        .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-        .include        "modload.inc"
-        .include        "fcntl.inc"
-
-        .import         pushax
-        .import         pusha0
-        .import         incsp2
-        .import         _open
-        .import         _read
-        .import         _close
-
-
-
-;----------------------------------------------------------------------------
-; Variables
-
-.data
-
-ctrl:   .addr   _read
-        .res    2                       ; CALLERDATA
-        .res    2                       ; MODULE
-        .res    2                       ; MODULE_SIZE
-        .res    2                       ; MODULE_ID
-
-;----------------------------------------------------------------------------
-; Code
-
-.code
-
-.proc   _joy_load_driver
-
-; Save name on the C stack. We will need it later as parameter passed to open()
-
-        jsr     pushax
-
-; Check if we do already have a driver loaded. If so, remove it.
-
-        lda     _joy_drv
-        ora     _joy_drv+1
-        beq     @L1
-        jsr     _joy_uninstall
-
-; Open the file. The name parameter is already on stack and will get removed
-; by open().
-; ctrl.callerdata = open (name, O_RDONLY);
-
-@L1:    lda     #<O_RDONLY
-        jsr     pusha0
-        ldy     #4                      ; Argument size
-        jsr     _open
-        sta     ctrl + MOD_CTRL::CALLERDATA
-        stx     ctrl + MOD_CTRL::CALLERDATA+1
-
-; if (ctrl.callerdata >= 0) {
-
-        txa
-        bmi     @L3
-
-; /* Load the module */
-; Res = mod_load (&ctrl);
-
-        lda     #<ctrl
-        ldx     #>ctrl
-        jsr     _mod_load
-        pha
-
-; /* Close the input file */
-; close (ctrl.callerdata);
-
-        lda     ctrl + MOD_CTRL::CALLERDATA
-        ldx     ctrl + MOD_CTRL::CALLERDATA+1
-        jsr     _close
-
-; /* Check the return code */
-; if (Res == MLOAD_OK) {
-
-        pla
-        bne     @L3
-
-; Check the driver signature, install the driver. c is already on stack and
-; will get removed by joy_install().
-; Res = joy_install (ctrl.module);  
-
-        lda     ctrl + MOD_CTRL::MODULE
-        ldx     ctrl + MOD_CTRL::MODULE+1
-        jsr     _joy_install
-
-; If joy_install was successful, we're done
-
-        tax
-        beq     @L2
-
-; The driver didn't install correctly. Remove it from memory and return the
-; error code.
-
-        pha                             ; Save the error code
-        lda     _joy_drv
-        ldx     _joy_drv+1
-        jsr     _mod_free               ; Free the driver memory
-        jsr     _joy_clear_ptr          ; Clear joy_drv
-        pla                             ; Restore the error code
-        ldx     #0                      ; We must return an int
-@L2:    rts                             ; Done
-
-; Open or mod_load failed. Return an error code.
-
-@L3:    lda     #<JOY_ERR_CANNOT_LOAD
-        ldx     #>JOY_ERR_CANNOT_LOAD
-        rts
-
-.endproc
-
-
diff --git a/libsrc/joystick/joy_read.s b/libsrc/joystick/joy_read.s
deleted file mode 100644 (file)
index f76d9df..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-12-20
-;
-; unsigned char __fastcall__ joy_read (unsigned char joystick);
-; /* Read a particular joystick */
-;
-
-        .include        "joy-kernel.inc"
-
-        _joy_read       = joy_read              ; Use driver entry
-
-                                                
diff --git a/libsrc/joystick/joy_unload.s b/libsrc/joystick/joy_unload.s
deleted file mode 100644 (file)
index 25d54ff..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-11-29
-;
-; unsigned char joy_unload (void);
-; /* Unload the currently loaded driver. */
-
-
-        .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-        .include        "modload.inc"
-
-        .import         joy_clear_ptr
-        .import         return0
-
-
-
-_joy_unload:
-        lda     _joy_drv
-        pha                             ; Save pointer to driver
-        ora     _joy_drv+1
-        beq     no_driver               ; No driver
-        lda     _joy_drv+1
-        pha
-
-        jsr     _joy_uninstall          ; Uninstall the driver
-
-        pla
-        tax
-        pla                             ; Get pointer to driver
-        jsr     _mod_free               ; Free the driver
-        jmp     return0                 ; Return JOY_ERR_OK
-
-no_driver:
-        tax                             ; X = 0
-        pla                             ; Remove pushed junk
-        lda     #JOY_ERR_NO_DRIVER
-        rts
diff --git a/libsrc/lynx/bllhdr.s b/libsrc/lynx/bllhdr.s
deleted file mode 100644 (file)
index 60fc877..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Karri Kaksonen, 2011
-;
-; This header is required for BLL builds.
-;
-        .import         __BSS_LOAD__
-        .import         __RAM_START__
-        .export         __BLLHDR__: absolute = 1
-; ------------------------------------------------------------------------
-; BLL header (BLL header)
-
-        .segment "BLLHDR"
-        .word   $0880
-        .dbyt   __RAM_START__
-        .dbyt   __BSS_LOAD__ - __RAM_START__ + 10
-        .byte   $42,$53
-        .byte   $39,$33
-
diff --git a/libsrc/lynx/bootldr.s b/libsrc/lynx/bootldr.s
deleted file mode 100644 (file)
index a62d615..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-;
-; Karri Kaksonen, 2011
-;
-; This bootloader creates a signed binary so that the Lynx will accept it.
-;
-        .include "lynx.inc"
-        .include "extzp.inc"
-        .import         __BLOCKSIZE__
-        .export         __BOOTLDR__: absolute = 1
-
-
-; ------------------------------------------------------------------------
-; Bootloader
-
-        .segment "BOOTLDR"
-;**********************************
-; Here is the bootloader in plaintext
-; The idea is to make the smalles possible encrypted loader as decryption
-; is very slow. The minimum size is 49 bytes plus a zero byte.
-;**********************************
-;       EXE = $fb68
-;
-;       .org $0200
-;
-;       ; 1. force Mikey to be in memory
-;       stz MAPCTL
-;
-;       ; 3. set ComLynx to open collector
-;       lda #4          ; a = 00000100
-;       sta SERCTL      ; set the ComLynx to open collector
-;
-;       ; 4. make sure the ROM is powered on
-;       lda #8          ; a = 00001000
-;       sta IODAT       ; set the ROM power to on
-;
-;       ; 5. read in secondary exe + 8 bytes from the cart and store it in $f000
-;       ldx #0          ; x = 0
-;       ldy #$97        ; y = secondary loader size (151 bytes)
-;rloop1: lda RCART0     ; read a byte from the cart
-;       sta EXE,X       ; EXE[X] = a
-;       inx             ; x++
-;       dey             ; y--
-;       bne rloop1      ; loops until y wraps
-;
-;       ; 6. jump to secondary loader
-;       jmp EXE         ; run the secondary loader
-;
-;       .reloc
-;**********************************
-; After compilation, encryption and obfuscation it turns into this.
-;**********************************
-        .byte $ff, $81, $ca, $33, $be, $80, $a2, $c4 
-        .byte $6d, $98, $fe, $8d, $bc, $66, $c0, $7a 
-        .byte $09, $50, $23, $28, $18, $c8, $06, $70 
-        .byte $58, $4f, $1b, $e1, $c7, $90, $08, $cd 
-        .byte $1a, $6e, $5a, $45, $32, $d7, $6d, $c6 
-        .byte $8a, $e5, $d8, $5c, $a0, $e8, $4f, $7a 
-        .byte $5f, $73, $8d, $22
-
-;**********************************
-; Now we have the secondary loader
-;**********************************
-        .org $fb68
-        ; 1. Read in the 1st File-entry (main exe) in FileEntry
-        ldx #$00
-        ldy #8
-rloop:  lda RCART0      ; read a byte from the cart
-        sta _FileEntry,X ; EXE[X] = a
-        inx
-        dey
-        bne rloop
-
-        ; 2. Set the block hardware to the main exe start
-        lda     _FileStartBlock
-        sta     _FileCurrBlock
-        jsr     seclynxblock
-
-        ; 3. Skip over the block offset
-        lda     _FileBlockOffset+1
-        eor     #$FF
-        tay
-        lda     _FileBlockOffset
-        eor     #$FF
-        tax
-        jsr     seclynxskip0
-
-        ; 4. Read in the main exe to RAM
-        lda     _FileDestAddr
-        ldx     _FileDestAddr+1
-        sta     _FileDestPtr
-        stx     _FileDestPtr+1
-        lda     _FileFileLen+1
-        eor     #$FF
-        tay
-        lda     _FileFileLen
-        eor     #$FF
-        tax
-        jsr     seclynxread0
-
-        ; 5. Jump to start of the main exe code
-        jmp     (_FileDestAddr)
-
-;**********************************
-; Skip bytes on bank 0
-; X:Y count (EOR $FFFF)
-;**********************************
-seclynxskip0:
-        inx
-        bne @0
-        iny
-        beq exit
-@0:     jsr secreadbyte0
-        bra seclynxskip0
-
-;**********************************
-; Read bytes from bank 0
-; X:Y count (EOR $ffff)
-;**********************************
-seclynxread0:
-        inx
-        bne @1
-        iny
-        beq exit
-@1:     jsr secreadbyte0
-        sta (_FileDestPtr)
-        inc _FileDestPtr
-        bne seclynxread0
-        inc _FileDestPtr+1
-        bra seclynxread0
-
-;**********************************
-; Read one byte from cartridge
-;**********************************
-secreadbyte0:
-        lda RCART0
-        inc _FileBlockByte
-        bne exit
-        inc _FileBlockByte+1
-        bne exit
-
-;**********************************
-; Select a block 
-;**********************************
-seclynxblock:
-        pha
-        phx
-        phy
-        lda __iodat
-        and #$fc
-        tay
-        ora #2
-        tax
-        lda _FileCurrBlock
-        inc _FileCurrBlock
-        sec
-        bra @2
-@0:     bcc @1
-        stx IODAT
-        clc
-@1:     inx
-        stx SYSCTL1
-        dex
-@2:     stx SYSCTL1
-        rol
-        sty IODAT
-        bne @0
-        lda __iodat
-        sta IODAT
-        stz _FileBlockByte
-        lda #<($100-(>__BLOCKSIZE__))
-        sta _FileBlockByte+1
-        ply
-        plx
-        pla
-
-exit:   rts
-
-        .reloc
-
diff --git a/libsrc/lynx/cgetc.s b/libsrc/lynx/cgetc.s
deleted file mode 100644 (file)
index b61fb44..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-;
-; Karri Kaksonen, Harry Dodgson 2006-01-07
-;
-; char cgetc (void);
-;
-
-        .export         _cgetc
-        .import         _kbhit
-        .import         KBEDG
-        .import         KBSTL
-
-; --------------------------------------------------------------------------
-; The Atari Lynx has a very small keyboard - only 3 keys
-; Opt1, Opt2 and Pause.
-; But the designers have decided that pressing Pause and Opt1 at the
-; same time means Restart and pressing Pause and Opt2 means Flip screen.
-
-; For "easter egg" use I have also included all three keys pressed '?'
-; and Opt1 + Opt2 pressed '3'.
-; So the keyboard returns '1', '2', '3', 'P', 'R', 'F' or '?'.
-
-_cgetc:
-        lda     KBSTL
-        ora     KBEDG
-        bne     @L1
-        jsr     _kbhit          ; Check for char available
-        tax                             ; Test result
-        bra     _cgetc
-@L1:
-        ldx     #0
-        and     #1
-        beq     @L6
-        lda     KBEDG           ; Pause button is pressed
-        and     #$0c
-        beq     @L3
-        ora     KBSTL
-@L2:
-        bit     #$04
-        beq     @L4                     ; Pause + Opt 1 = Reset
-        bit     #$08
-        beq     @L5                     ; Pause + Opt 2 = Flip
-        lda     #'?'                    ; All buttons pressed
-        rts
-@L3:
-        lda     KBSTL           ; Pause alone was the last placed button
-        and     #$0c
-        bne     @L2
-        lda     #'P'                    ; Pause pressed
-        rts
-@L4:
-        lda     #'R'                    ; Reset pressed
-        rts
-@L5:
-        lda     #'F'                    ; Flip pressed
-        rts
-@L6:
-        lda     KBEDG           ; No Pause pressed
-        ora     KBSTL
-        bit     #$08
-        beq     @L8
-        bit     #$04
-        beq     @L7
-        lda     #'3'                    ; opt 1 + opt 2 pressed
-        rts
-@L7:
-        lda     #'1'                    ; opt 1 pressed
-        rts
-@L8:
-        lda     #'2'                    ; opt 2 pressed
-        rts
diff --git a/libsrc/lynx/clock.s b/libsrc/lynx/clock.s
deleted file mode 100644 (file)
index 881c435..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-;
-; 2003-04-13, Ullrich von Bassewitz
-; 2012-02-06, Greg King
-;
-; #include <time.h>
-;
-; typedef unsigned long int clock_t;
-; clock_t _clk_tck(void);
-; #define CLOCKS_PER_SEC _clk_tck()
-; clock_t clock(void);
-;
-; clk_tck()'s test-values are based on the numbers in "set_tv.s".
-; If you change the numbers there, then change them here, too.
-;
-
-        .export         _clock, __clk_tck, clock_count
-        .interruptor    update_clock, 2 ; (low priority)
-        .constructor    init_clock
-
-        .import         sreg: zp
-        .include        "lynx.inc"
-
-        .macpack        generic
-
-
-        .proc   _clock
-        php
-        sei                     ; Disable interrupts
-
-; Read the clock counter.
-
-        lda     clock_count
-        ldx     clock_count+1
-        ldy     clock_count+2
-
-        plp                     ; Re-enable interrupts
-        sty     sreg
-        stz     sreg+1          ; Promote 24 bits up to 32 bits
-        rts
-        .endproc
-
-;-----------------------------------------------------------------------------
-; Return the number of clock ticks in one second.
-;
-__clk_tck:
-        ldx     #$00            ; >50, >60, >75
-        ldy     PBKUP
-        lda     #<75
-        cpy     #$20 + 1
-        blt     @ok
-        lda     #<60
-        cpy     #$29 + 1
-        blt     @ok
-        lda     #<50
-@ok:    stz     sreg            ; return 32 bits
-        stz     sreg+1
-        rts
-
-;-----------------------------------------------------------------------------
-; This interrupt handler increments a 24-bit counter at every video
-; vertical-blanking time.
-;
-        .segment        "LOWCODE"
-update_clock:
-        lda     INTSET
-        and     #%00000100
-        beq     @NotVBlank      ; Not vertical-blank interrupt
-
-        inc     clock_count
-        bne     @L1
-        inc     clock_count+1
-        bne     @L1
-        inc     clock_count+2
-@L1:    ;clc                    ; General interrupt was not reset
-@NotVBlank:
-        rts
-
-;-----------------------------------------------------------------------------
-; Enable the interrupt that update_clock needs.
-;
-        .segment        "INIT"
-init_clock:
-        lda     #%10000000
-        tsb     VTIMCTLA
-        rts
-
-;-----------------------------------------------------------------------------
-;
-        .bss
-clock_count:
-        .res    3
diff --git a/libsrc/lynx/crt0.s b/libsrc/lynx/crt0.s
deleted file mode 100644 (file)
index 725f74e..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-; ***
-; CC65 Lynx Library
-;
-; Originally by Bastian Schick
-; http://www.geocities.com/SiliconValley/Byte/4242/lynx/
-;
-; Ported to cc65 (http://www.cc65.org) by
-; Shawn Jefferson, June 2004
-;
-; ***
-;
-; Startup code for cc65 (Lynx version).  Based on the Atari 8-bit startup
-; code structure.  The C stack is located at the end of the RAM memory
-; segment, and grows downward.  Bastian Schick's executable header is put
-; on the front of the fully linked binary (see EXEHDR segment.)
-;
-
-        .export         _exit
-        .export         __STARTUP__ : absolute = 1      ; Mark as startup
-
-        .import         initlib, donelib
-        .import         zerobss
-        .import         callmain
-        .import         _main
-        .import         __RAM_START__, __RAM_SIZE__, __STACKSIZE__
-
-        .include        "zeropage.inc"
-        .include        "extzp.inc"
-        .include        "lynx.inc"
-
-; ------------------------------------------------------------------------
-; Mikey and Suzy init data, reg offsets and data
-
-        .rodata
-
-SuzyInitReg:    .byte $28,$2a,$04,$06,$92,$83,$90
-SuzyInitData:   .byte $7f,$7f,$00,$00,$24,$f3,$01
-
-MikeyInitReg:   .byte $00,$01,$08,$09,$20,$28,$30,$38,$44,$50,$8a,$8b,$8c,$92,$93
-MikeyInitData:  .byte $9e,$18,$68,$1f,$00,$00,$00,$00,$00,$ff,$1a,$1b,$04,$0d,$29
-
-; ------------------------------------------------------------------------
-; Actual code
-
-        .segment "STARTUP"
-
-; Set up the system.
-
-        sei
-        cld
-        ldx     #$FF
-        txs
-
-; Init the bank switching.
-
-        lda     #$C
-        sta     MAPCTL          ; $FFF9
-
-; Disable all timer interrupts.
-
-        lda     #$80
-        trb     TIM0CTLA
-        trb     TIM1CTLA
-        trb     TIM2CTLA
-        trb     TIM3CTLA
-        trb     TIM5CTLA
-        trb     TIM6CTLA
-        trb     TIM7CTLA
-
-; Disable the TX/RX IRQ; set to 8E1.
-
-        lda     #%11101
-        sta     SERCTL
-
-; Clear all pending interrupts.
-
-        lda     INTSET
-        sta     INTRST
-
-; Set up the stack.
-
-        lda     #<(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
-        sta     sp
-        lda     #>(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
-        sta     sp+1
-
-; Init Mickey.
-
-        ldx     #.sizeof(MikeyInitReg)-1
-mloop:  ldy     MikeyInitReg,x
-        lda     MikeyInitData,x
-        sta     $fd00,y
-        dex
-        bpl     mloop
-
-; These are RAM-shadows of read-only regs.
-
-        ldx     #$1b
-        stx     __iodat
-        dex                     ; $1A
-        stx     __iodir
-        ldx     #$d
-        stx     __viddma
-
-; Init Suzy.
-
-        ldx     #.sizeof(SuzyInitReg)-1
-sloop:  ldy     SuzyInitReg,x
-        lda     SuzyInitData,x
-        sta     $fc00,y
-        dex
-        bpl     sloop
-
-        lda     #$24
-        sta     __sprsys
-        cli
-
-; Clear the BSS data.
-
-        jsr     zerobss
-
-; Call the module constructors.
-
-        jsr     initlib
-
-; Push the command-line arguments; and, call main().
-
-        jsr     callmain
-
-; Call the module destructors. This is also the exit() entry.
-
-_exit:  jsr     donelib         ; Run module destructors
-
-; Endless loop
-
-noret:  bra     noret
diff --git a/libsrc/lynx/ctype.s b/libsrc/lynx/ctype.s
deleted file mode 100644 (file)
index 6e0ab17..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-;
-; Ullrich von Bassewitz, 02.06.1998
-;
-; Character specification table.
-;
-
-; The tables are readonly, put them into the rodata segment
-
-.rodata
-
-; The following 256 byte wide table specifies attributes for the isxxx type
-; of functions. Doing it by a table means some overhead in space, but it
-; has major advantages:
-;
-;   * It is fast. If it were'nt for the slow parameter passing of cc65, one
-;     could even define macros for the isxxx functions (this is usually
-;     done on other platforms).
-;
-;   * It is highly portable. The only unportable part is the table itself,
-;     all real code goes into the common library.
-;
-;   * We save some code in the isxxx functions.
-;
-;
-; Bit assignments:
-;
-;   0 - Lower case char
-;   1 - Upper case char
-;   2 - Numeric digit
-;   3 - Hex digit (both, lower and upper)
-;   4 - Control character
-;   5 - The space character itself
-;   6 - Other whitespace (that is: '\f', '\n', '\r', '\t' and '\v')
-;   7 - Space or tab character
-
-        .export         __ctype
-
-__ctype:
-
-.repeat 2       ; 2 times for normal and inverted
-
-        .byte   $10     ;   0/00 ___ctrl_@___
-        .byte   $10     ;   1/01 ___ctrl_A___
-        .byte   $10     ;   2/02 ___ctrl_B___
-        .byte   $10     ;   3/03 ___ctrl_C___
-        .byte   $10     ;   4/04 ___ctrl_D___
-        .byte   $10     ;   5/05 ___ctrl_E___
-        .byte   $10     ;   6/06 ___ctrl_F___
-        .byte   $10     ;   7/07 ___ctrl_G___
-        .byte   $10     ;   8/08 ___ctrl_H___
-        .byte   $D0     ;   9/09 ___ctrl_I___
-        .byte   $50     ;  10/0a ___ctrl_J___
-        .byte   $50     ;  11/0b ___ctrl_K___
-        .byte   $50     ;  12/0c ___ctrl_L___
-        .byte   $50     ;  13/0d ___ctrl_M___
-        .byte   $10     ;  14/0e ___ctrl_N___
-        .byte   $10     ;  15/0f ___ctrl_O___
-        .byte   $10     ;  16/10 ___ctrl_P___
-        .byte   $10     ;  17/11 ___ctrl_Q___
-        .byte   $10     ;  18/12 ___ctrl_R___
-        .byte   $10     ;  19/13 ___ctrl_S___
-        .byte   $10     ;  20/14 ___ctrl_T___
-        .byte   $10     ;  21/15 ___ctrl_U___
-        .byte   $10     ;  22/16 ___ctrl_V___
-        .byte   $10     ;  23/17 ___ctrl_W___
-        .byte   $10     ;  24/18 ___ctrl_X___
-        .byte   $10     ;  25/19 ___ctrl_Y___
-        .byte   $10     ;  26/1a ___ctrl_Z___
-        .byte   $10     ;  27/1b ___ctrl_[___
-        .byte   $10     ;  28/1c ___ctrl_\___
-        .byte   $10     ;  29/1d ___ctrl_]___
-        .byte   $10     ;  30/1e ___ctrl_^___
-        .byte   $10     ;  31/1f ___ctrl_____
-        .byte   $A0     ;  32/20 ___SPACE___
-        .byte   $00     ;  33/21 _____!_____
-        .byte   $00     ;  34/22 _____"_____
-        .byte   $00     ;  35/23 _____#_____
-        .byte   $00     ;  36/24 _____$_____
-        .byte   $00     ;  37/25 _____%_____
-        .byte   $00     ;  38/26 _____&_____
-        .byte   $00     ;  39/27 _____'_____
-        .byte   $00     ;  40/28 _____(_____
-        .byte   $00     ;  41/29 _____)_____
-        .byte   $00     ;  42/2a _____*_____
-        .byte   $00     ;  43/2b _____+_____
-        .byte   $00     ;  44/2c _____,_____
-        .byte   $00     ;  45/2d _____-_____
-        .byte   $00     ;  46/2e _____._____
-        .byte   $00     ;  47/2f _____/_____
-        .byte   $0C     ;  48/30 _____0_____
-        .byte   $0C     ;  49/31 _____1_____
-        .byte   $0C     ;  50/32 _____2_____
-        .byte   $0C     ;  51/33 _____3_____
-        .byte   $0C     ;  52/34 _____4_____
-        .byte   $0C     ;  53/35 _____5_____
-        .byte   $0C     ;  54/36 _____6_____
-        .byte   $0C     ;  55/37 _____7_____
-        .byte   $0C     ;  56/38 _____8_____
-        .byte   $0C     ;  57/39 _____9_____
-        .byte   $00     ;  58/3a _____:_____
-        .byte   $00     ;  59/3b _____;_____
-        .byte   $00     ;  60/3c _____<_____
-        .byte   $00     ;  61/3d _____=_____
-        .byte   $00     ;  62/3e _____>_____
-        .byte   $00     ;  63/3f _____?_____
-
-        .byte   $00     ;  64/40 _____@_____
-        .byte   $0A     ;  65/41 _____A_____
-        .byte   $0A     ;  66/42 _____B_____
-        .byte   $0A     ;  67/43 _____C_____
-        .byte   $0A     ;  68/44 _____D_____
-        .byte   $0A     ;  69/45 _____E_____
-        .byte   $0A     ;  70/46 _____F_____
-        .byte   $02     ;  71/47 _____G_____
-        .byte   $02     ;  72/48 _____H_____
-        .byte   $02     ;  73/49 _____I_____
-        .byte   $02     ;  74/4a _____J_____
-        .byte   $02     ;  75/4b _____K_____
-        .byte   $02     ;  76/4c _____L_____
-        .byte   $02     ;  77/4d _____M_____
-        .byte   $02     ;  78/4e _____N_____
-        .byte   $02     ;  79/4f _____O_____
-        .byte   $02     ;  80/50 _____P_____
-        .byte   $02     ;  81/51 _____Q_____
-        .byte   $02     ;  82/52 _____R_____
-        .byte   $02     ;  83/53 _____S_____
-        .byte   $02     ;  84/54 _____T_____
-        .byte   $02     ;  85/55 _____U_____
-        .byte   $02     ;  86/56 _____V_____
-        .byte   $02     ;  87/57 _____W_____
-        .byte   $02     ;  88/58 _____X_____
-        .byte   $02     ;  89/59 _____Y_____
-        .byte   $02     ;  90/5a _____Z_____
-        .byte   $00     ;  91/5b _____[_____
-        .byte   $00     ;  92/5c _____\_____
-        .byte   $00     ;  93/5d _____]_____
-        .byte   $00     ;  94/5e _____^_____
-        .byte   $00     ;  95/5f _UNDERLINE_
-        .byte   $00     ;  96/60 ___grave___
-        .byte   $09     ;  97/61 _____a_____
-        .byte   $09     ;  98/62 _____b_____
-        .byte   $09     ;  99/63 _____c_____
-        .byte   $09     ; 100/64 _____d_____
-        .byte   $09     ; 101/65 _____e_____
-        .byte   $09     ; 102/66 _____f_____
-        .byte   $01     ; 103/67 _____g_____
-        .byte   $01     ; 104/68 _____h_____
-        .byte   $01     ; 105/69 _____i_____
-        .byte   $01     ; 106/6a _____j_____
-        .byte   $01     ; 107/6b _____k_____
-        .byte   $01     ; 108/6c _____l_____
-        .byte   $01     ; 109/6d _____m_____
-        .byte   $01     ; 110/6e _____n_____
-        .byte   $01     ; 111/6f _____o_____
-        .byte   $01     ; 112/70 _____p_____
-        .byte   $01     ; 113/71 _____q_____
-        .byte   $01     ; 114/72 _____r_____
-        .byte   $01     ; 115/73 _____s_____
-        .byte   $01     ; 116/74 _____t_____
-        .byte   $01     ; 117/75 _____u_____
-        .byte   $01     ; 118/76 _____v_____
-        .byte   $01     ; 119/77 _____w_____
-        .byte   $01     ; 120/78 _____x_____
-        .byte   $01     ; 121/79 _____y_____
-        .byte   $01     ; 122/7a _____z_____
-        .byte   $00     ; 123/7b _____{_____
-        .byte   $00     ; 124/7c _____|_____
-        .byte   $00     ; 125/7d _____}_____
-        .byte   $00     ; 126/7e _____~_____
-        .byte   $40     ; 127/7f ____DEL____
-
-.endrepeat
diff --git a/libsrc/lynx/defdir.s b/libsrc/lynx/defdir.s
deleted file mode 100644 (file)
index 0835856..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-;
-; Karri Kaksonen, 2011
-;
-; A default directory with just the main executable.
-;
-        .include "lynx.inc"
-        .import         __STARTOFDIRECTORY__
-        .import         __RAM_START__
-        .import         __CODE_SIZE__,__DATA_SIZE__,__RODATA_SIZE__
-        .import         __STARTUP_SIZE__,__INIT_SIZE__,__LOWCODE_SIZE__
-        .import         __BLOCKSIZE__
-        .export         __DEFDIR__: absolute = 1
-
-
-; ------------------------------------------------------------------------
-; Lynx directory
-        .segment "DIRECTORY"
-
-__DIRECTORY_START__:
-off0=__STARTOFDIRECTORY__+(__DIRECTORY_END__-__DIRECTORY_START__)
-blocka=off0/__BLOCKSIZE__
-; Entry 0 - first executable
-block0=off0/__BLOCKSIZE__
-len0=__STARTUP_SIZE__+__INIT_SIZE__+__CODE_SIZE__+__DATA_SIZE__+__RODATA_SIZE__+__LOWCODE_SIZE__
-        .byte   <block0
-        .word   off0 & (__BLOCKSIZE__ - 1)
-        .byte   $88
-        .word   __RAM_START__
-        .word   len0
-__DIRECTORY_END__:
-
diff --git a/libsrc/lynx/eeprom.s b/libsrc/lynx/eeprom.s
deleted file mode 100644 (file)
index 978220c..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-;****************
-; CC65 Lynx Library
-;
-; Originally by Bastian Schick
-; http://www.geocities.com/SiliconValley/Byte/4242/lynx/
-;
-; Ported to cc65 (http://www.cc65.org) by
-; Shawn Jefferson, June 2004
-;
-; Several changes,
-; Ullrich von Bassewitz, 1004-10-14
-;
-;
-;****************
-;* EEPROM-routs
-;* for 93C46 (1024bit => 64 16-bit words)
-;*
-;* created : 11.05.95
-;* last modified :
-;*
-;* 16.02.96      leaner (thanks to Harry)
-;* 12.03.96      test for busy after write and erase (well, Harry ;)) )
-;* 22.08.97      ported to ra65 for use with cc65
-;* 02.12.97      added xref for the new ra65
-;*
-;*
-;* (c) 1995..97 Bastian Schick
-;* CS    = A7 (18)
-;* CLK   = A1 (11)
-;* DI/DO = AUDIN (32)
-;*
-;* And now how to contact the EEPROM :
-;*
-;* CARD
-;* PORT               ----\/----      93C46(SMD too)
-;* (18)  A7   --------| CS     |- +5V
-;* (11)  A1   --------| CLK    |- NC
-;*                +---| DI     |- NC
-;* (32) AUDIN ----+---| DO     |- GND
-;*                    ----------
-;*
-;****************
-
-
-        .export         _lynx_eeprom_read
-        .export         _lynx_eeprom_write
-        .export         _lynx_eeprom_erase
-        .import         popa
-        .importzp       ptr1
-
-        .include        "lynx.inc"
-
-
-; ------------------------------------------------------------------------
-; EEPROM command list
-
-EE_C_WRITE      =    $40
-EE_C_READ       =    $80
-EE_C_ERASE      =    $C0
-EE_C_EWEN       =    $30
-EE_C_EWDS       =    $00
-
-
-; ------------------------------------------------------------------------
-; unsigned __fastcall__ lynx_eeprom_read (unsigned char cell);
-; /* Read a 16 bit word from the given address */
-;
-
-_lynx_eeprom_read:
-        and     #$3f
-        ora     #EE_C_READ
-        jsr     EE_Send9Bit
-
-        lda     #$a
-        sta     IODIR            ; set AUDIN to Input
-
-        clc
-        stz     ptr1
-        stz     ptr1+1          ; Clear result
-        ldy     #16-1           ; Initialize bit counter
-@L1:
-; CLK = 1
-        stz     RCART0
-        stz     RCART0
-; CLK = 0
-        stz     RCART0
-        stz     RCART0
-
-        lda     IODAT
-        and     #$10             ; mask bit
-        adc     #$f0             ; C=1 if A=$10
-        rol     ptr1
-        rol     ptr1+1           ; shifts 0 to Carry
-        dey
-        bpl     @L1
-
-        ldx     #$1a
-        stx     IODIR            ; set AUDIN for output
-;EE_SET_CS_LOW
-
-        ldx     #3
-        stx     SYSCTL1
-        dex
-        stx     SYSCTL1
-
-        lda     ptr1
-        ldy     ptr1+1          ; Load result
-
-        rts
-
-
-; ------------------------------------------------------------------------
-; unsigned __fastcall__ lynx_eeprom_erase (unsigned char cell);
-; /* Clear the word at the given address */
-;
-
-_lynx_eeprom_erase:
-        pha                     ; Save argument
-        lda     #EE_C_EWEN      ; EWEN
-        jsr     EE_Send9Bit
-        pla                     ; Restore cell
-        and     #$3f
-        ora     #EE_C_ERASE     ; clear cell A
-        jsr     EE_Send9Bit
-        bra     EE_wait
-
-
-; ------------------------------------------------------------------------
-; unsigned __fastcall__ lynx_eeprom_write (unsigned char cell, unsigned val);
-; /* Write the word at the given address */
-;
-
-_lynx_eeprom_write:
-        sta     ptr1
-        stx     ptr1+1          ; Save val into ptr1
-        lda     #EE_C_EWEN      ; EWEN
-        jsr     EE_Send9Bit
-        jsr     popa            ; Get cell
-        and     #$3f            ; Make valid range 0..63
-        ora     #EE_C_WRITE     ; WRITE
-        jsr     EE_Send9Bit
-        jsr     EE_Send16Bit    ; Send value in ptr1
-
-EE_wait:
-; EE_SET_CS_HIGH
-
-        ldx     #63
-EEloop:
-        stz     RCART0
-        stz     RCART0
-        dex
-        bpl     EEloop
-
-        lda     #$0A
-        sta     IODIR           ; AUDIN to input
-        lda     #$10
-EE_wait1:
-        bit     IODAT           ; 'til ready :D0-read is /D0-written
-        beq     EE_wait1
-        lda     #$1a            ; AUDIN to output
-        sta     IODIR
-
-        lda     #EE_C_EWDS      ; EWDS
-
-;       bra     EE_Send9Bit     ; fall into
-
-
-; ------------------------------------------------------------------------
-; Send 8 bit value in A to eeprom
-
-EE_Send9Bit:
-; EE_SET_CS_LOW
-        ldx     #3
-        stx     SYSCTL1
-        dex
-        stx     SYSCTL1
-; EE_SET_CS_HIGH
-
-        ldx     #63
-EEloop2:
-        stz     RCART0
-        stz     RCART0
-        dex
-        bpl     EEloop2
-
-        ldy     #8
-        sec                     ; start bit
-        ror     A
-        ror     A
-        ror     A
-        ror     A               ; bit 8 at pos. 4
-EEloop3:
-        tax
-        and     #$10
-        ora     #$b
-        sta     IODAT
-; CLK = 1
-        stz     RCART0
-        stz     RCART0
-; CLK = 0
-        stz     RCART0
-        stz     RCART0
-        txa
-        rol     A
-        dey
-        bpl     EEloop3
-
-        lda     #$b             ; fnr neue EEPROMs
-        sta     IODAT
-
-        rts
-
-; ------------------------------------------------------------------------
-; Send 16 bit value in ptr1 to eeprom
-
-EE_Send16Bit:
-        lda     ptr1+1
-
-        ror     A
-        ror     ptr1
-        ror     A
-        ror     ptr1
-        ror     A
-        ror     ptr1
-
-        ldy     #15
-EEloop4:
-        tax
-        and     #$10
-        ora     #$b
-        sta     IODAT
-; CLK = 1
-        stz     RCART0
-        stz     RCART0
-; CLK = 0
-        stz     RCART0
-        stz     RCART0
-        txa
-        rol     ptr1
-        rol     A
-        dey
-        bpl     EEloop4
-
-; EE_SET_CS_LOW
-        ldx     #3
-        stx     SYSCTL1
-        dex
-        stx     SYSCTL1
-
-        lda     #$b             ; fnr neue EEPROMs
-        sta     IODAT
-
-        rts
-
-                      
diff --git a/libsrc/lynx/eeprom46.s b/libsrc/lynx/eeprom46.s
deleted file mode 100644 (file)
index 55d9037..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-;***************
-; EEPROM-routines
-; for 93C46 (128 bytes as 64 16-bit words)
-;
-; created : 11.05.95
-; last modified :
-; 
-; 16.02.96      leaner (thanks to Harry)
-; 12.03.96      test for busy after write and erase (well, Harry ;)) )
-; 22.08.97      ported to ra65 for use with cc65
-; 02.12.97      added xref for the new ra65
-;
-;
-; (c) 1995..97 Bastian Schick
-; CS    = A7 (18)
-; CLK   = A1 (11)
-; DI/DO = AUDIN (32)
-;
-;And now how to contact the EEPROM :
-;
-;CARD
-;PORT               ----\/----      93C46(SMD too)
-;(18)  A7   --------| CS     |- +5V
-;(11)  A1   --------| CLK    |- NC
-;               +---| DI     |- NC
-;(32) AUDIN ----+---| DO     |- GND
-;                   ----------
-        .export         _lynx_eeread_93c46
-        .export         _lynx_eewrite_93c46
-        .import         popax
-        .importzp       ptr1
-
-        .include        "lynx.inc"
-
-; -------------------
-; EEPROM command list
-EE_C_WRITE      =    $40
-EE_C_READ       =    $80
-EE_C_ERASE      =    $C0
-EE_C_EWEN       =    $30
-EE_C_EWDS       =    $00
-
-; ------------------------------------------------------------------------
-; unsigned __fastcall__ lynx_eeread_93c46(unsigned char cell);
-; /* Read a 16 bit word from the given address */
-;
-_lynx_eeread_93c46:
-        and #$3f
-        ora #EE_C_READ
-        jsr EE_Send9Bit
-        jsr EE_Read16Bit
-        lda ptr1
-        ldx ptr1+1
-        rts
-
-;***************
-; reads EEPROM-word to ptr1
-; A,Y destroyed
-EE_Read16Bit:
-        lda #$a
-        sta IODIR       ; set AUDIN to Input
-        clc
-        stz ptr1
-        stz ptr1+1
-        ldy #15
-EEloop1:
-; CLK = 1
-        stz RCART0
-        stz RCART0
-; CLK = 0
-        stz RCART0
-        stz RCART0
-
-        lda IODAT
-        and #$10        ; mask bit
-        adc #$f0        ; C=1 if A=$10
-        rol ptr1
-        rol ptr1+1      ; shifts 0 to Carry
-        dey
-        bpl EEloop1
-
-        ldx #$1a
-        stx IODIR       ; set AUDIN for output
-;EE_SET_CS_LOW
-
-        ldx #3
-        stx SYSCTL1
-        dex
-        stx SYSCTL1
-
-        rts
-
-;***************
-; write word to EEPROM
-; void __fastcall__ lynx_eewrite_93c46(unsigned int addr, unsigned int val);
-_lynx_eewrite_93c46:
-        sta ptr1
-        stx ptr1+1
-        lda #EE_C_EWEN
-        jsr EE_Send9Bit
-        jsr popax
-        and #$3f
-        ora #EE_C_WRITE
-        jsr EE_Send9Bit
-        jsr EE_Send16Bit        ; Sends ptr1 that contains val
-
-EE_wait:
-; EE_SET_CS_HIGH
-
-        ldx #63
-EEloop:
-        stz RCART0
-        stz RCART0
-        dex
-        bpl EEloop
-
-        lda #$0A
-        sta IODIR       ; AUDIN to input
-        lda #$10
-EE_wait1:
-        bit IODAT       ; 'til ready :D0-read is /D0-written
-        beq EE_wait1
-        lda #$1a        ; AUDIN to output
-        sta IODIR
-        lda #EE_C_EWDS
-;       bra EE_Send9Bit ; fall into
-;***************
-; send A via I2C
-; A,Y destroyed
-;***************
-EE_Send9Bit:
-; EE_SET_CS_LOW
-        ldy #3
-        sty SYSCTL1
-        dey
-        sty SYSCTL1
-; EE_SET_CS_HIGH
-
-        ldy #63
-EEloop2:
-        stz RCART0
-        stz RCART0
-        dey
-        bpl EEloop2
-
-        ldy #8
-        sec             ; start bit
-        ror A
-        ror A
-        ror A
-        ror A           ; bit 8 at pos. 4
-EEloop3:
-        tax
-        and #$10
-        ora #$b
-        sta IODAT
-; CLK = 1
-        stz RCART0
-        stz RCART0
-; CLK = 0
-        stz RCART0
-        stz RCART0
-        txa
-        rol A
-        dey
-        bpl EEloop3
-        rts
-;***************
-; send ptr1 to EEPROM
-EE_Send16Bit:
-        lda ptr1+1
-
-        ror A
-        ror ptr1
-        ror A
-        ror ptr1
-        ror A
-        ror ptr1
-
-        ldy #15
-EEloop5:
-        tax
-        and #$10
-        ora #$b
-        sta IODAT
-; CLK = 1
-        stz RCART0
-        stz RCART0
-; CLK = 0
-        stz RCART0
-        stz RCART0
-        txa
-        rol ptr1
-        rol A
-        dey
-        bpl EEloop5
-
-; EE_SET_CS_LOW
-        ldx #3
-        stx SYSCTL1
-        dex
-        stx SYSCTL1
-        rts
-
diff --git a/libsrc/lynx/eeprom66.s b/libsrc/lynx/eeprom66.s
deleted file mode 100644 (file)
index 680db81..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-;***************
-; EEPROM-routines
-; for 93C66 (512 bytes as 256 16-bit words)
-;
-; created : 11.05.95
-; last modified :
-; 
-; 16.02.96      leaner (thanks to Harry)
-; 12.03.96      test for busy after write and erase (well, Harry ;)) )
-; 22.08.97      ported to ra65 for use with cc65
-; 02.12.97      added xref for the new ra65
-;     2010      93c66 support B. Spruck
-;     2011      modified to suit cc65 environment Karri Kaksonen
-;
-; (c) 1995..97 Bastian Schick
-; CS    = A7 (18)
-; CLK   = A1 (11)
-; DI/DO = AUDIN (32)
-;
-;And now how to contact the EEPROM :
-;
-;CARD
-;PORT               ----\/----      93C66(SMD too)
-;(18)  A7   --------| CS     |- +5V
-;(11)  A1   --------| CLK    |- NC
-;               +---| DI     |- NC
-;(32) AUDIN ----+---| DO     |- GND
-;                   ----------
-
-        .export         _lynx_eeread_93c66
-        .export         _lynx_eewrite_93c66
-        .import         popax
-        .importzp       ptr1
-
-        .include        "lynx.inc"
-
-; -------------------
-; EEPROM command list
-EE_C_WRITE      =    $14
-EE_C_READ       =    $18
-EE_C_ERASE      =    $1C
-EE_C_EWEN       =    $13
-EE_C_EWEN2      =    $FF   ;; C0 schould be enough
-EE_C_EWDS       =    $10
-EE_C_EWDS2      =    $00
-
-;**************
-; Only lower byte in A is used for address
-; unsigned int __fastcall__ lynx_eeread_93c66(unsigned int addr);
-_lynx_eeread_93c66:
-        ldx #EE_C_READ
-        jsr EE_Send11Bit
-        jsr EE_Read16Bit
-        lda ptr1
-        ldx ptr1+1
-        rts
-
-;***************
-; reads EEPROM-word to ptr1
-; A,Y destroyed
-EE_Read16Bit:
-        lda #$a
-        sta IODIR       ; set AUDIN to Input
-        clc
-        stz ptr1
-        stz ptr1+1
-        ldy #15
-EEloop1:
-; CLK = 1
-        stz RCART0
-        stz RCART0
-; CLK = 0
-        stz RCART0
-        stz RCART0
-
-        lda IODAT
-        and #$10        ; mask bit
-        adc #$f0        ; C=1 if A=$10
-        rol ptr1
-        rol ptr1+1      ; shifts 0 to Carry
-        dey
-        bpl EEloop1
-
-        ldx #$1a
-        stx IODIR       ; set AUDIN for output
-;EE_SET_CS_LOW
-
-        ldx #3
-        stx SYSCTL1
-        dex
-        stx SYSCTL1
-
-        rts
-
-;***************
-; write word to EEPROM
-; void __fastcall__ lynx_eewrite_93c66(unsigned int addr, unsigned int val);
-_lynx_eewrite_93c66:
-        sta ptr1
-        stx ptr1+1
-        ldx #EE_C_EWEN
-        lda #EE_C_EWEN2
-        jsr EE_Send11Bit
-        jsr popax
-        ldx #EE_C_WRITE
-        jsr EE_Send11Bit
-        jsr EE_Send16Bit        ; Sends ptr1 that contains val
-
-EE_wait:
-; EE_SET_CS_HIGH
-
-        ldx #63
-EEloop:
-        stz RCART0
-        stz RCART0
-        dex
-        bpl EEloop
-
-        lda #$0A
-        sta IODIR       ; AUDIN to input
-        lda #$10
-EE_wait1:
-        bit IODAT       ; 'til ready :D0-read is /D0-written
-        beq EE_wait1
-        lda #$1a        ; AUDIN to output
-        sta IODIR
-        ldx #EE_C_EWDS
-        lda #EE_C_EWDS2
-;       bra EE_Send11Bit ; fall into
-;***************
-; send A via I2C
-; A,Y destroyed
-EE_Send11Bit:
-; EE_SET_CS_LOW
-        ldy #3
-        sty SYSCTL1
-        dey
-        sty SYSCTL1
-; EE_SET_CS_HIGH
-
-        ldy #63
-EEloop2:
-        stz RCART0
-        stz RCART0
-        dey
-        bpl EEloop2
-
-        pha
-        txa   ;; Ok erstmal x abarbeiten und A sichern
-        ldy #2 ; 3 times
-EEloop3:
-        tax
-        and #$10
-        ora #$b
-        sta IODAT
-; CLK = 1
-        stz RCART0
-        stz RCART0
-; CLK = 0
-        stz RCART0
-        stz RCART0
-        txa
-        rol A
-        dey
-        bpl EEloop3
-
-        ldy #7 ; 8 times
-        pla  ;; jetzt kommt a an die reihe
-
-        ror A
-        ror A
-        ror A           ; bit 7 at pos. 4
-EEloop4:
-        tax
-        and #$10
-
-        ora #$b
-        sta IODAT
-; CLK = 1
-        stz RCART0
-        stz RCART0
-; CLK = 0
-        stz RCART0
-        stz RCART0
-        txa
-        rol A
-        dey
-        bpl EEloop4
-        rts
-
-;***************
-; send ptr1 to EEPROM
-EE_Send16Bit:
-        lda ptr1+1
-
-        ror A
-        ror ptr1
-        ror A
-        ror ptr1
-        ror A
-        ror ptr1
-
-        ldy #15
-EEloop5:
-        tax
-        and #$10
-        ora #$b
-        sta IODAT
-; CLK = 1
-        stz RCART0
-        stz RCART0
-; CLK = 0
-        stz RCART0
-        stz RCART0
-        txa
-        rol ptr1
-        rol A
-        dey
-        bpl EEloop5
-
-; EE_SET_CS_LOW
-        ldx #3
-        stx SYSCTL1
-        dex
-        stx SYSCTL1
-        rts
-
diff --git a/libsrc/lynx/eeprom86.s b/libsrc/lynx/eeprom86.s
deleted file mode 100644 (file)
index f753b73..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-;***************
-; EEPROM-routs
-; for 93C86 (2048 bytes as 1024 16-bit words)
-;
-; created : 11.05.95
-; last modified :
-; 
-; 16.02.96      leaner (thanks to Harry)
-; 12.03.96      test for busy after write and erase (well, Harry ;)) )
-; 22.08.97      ported to ra65 for use with cc65
-; 02.12.97      added xref for the new ra65
-;     2010 93c66 support B. Spruck
-;     2010 93c86 support B. Spruck
-;     2011      modified to suit cc65 environment Karri Kaksonen
-;
-; (c) 1995..97 Bastian Schick
-; CS    = A7 (18)
-; CLK   = A1 (11)
-; DI/DO = AUDIN (32)
-;
-;And now how to contact the EEPROM :
-;
-;CARD
-;PORT               ----\/----      93C86(SMD too)
-;(18)  A7   --------| CS     |- +5V
-;(11)  A1   --------| CLK    |- NC
-;               +---| DI     |- NC
-;(32) AUDIN ----+---| DO     |- GND
-;                   ----------
-
-        .export         _lynx_eeread_93c86
-        .export         _lynx_eewrite_93c86
-        .import         popax
-        .importzp       ptr1
-
-        .include        "lynx.inc"
-
-; -------------------
-; EEPROM command list
-EE_C_WRITE      =    $14
-EE_C_READ       =    $18
-EE_C_ERASE      =    $1C
-EE_C_EWEN       =    $13
-EE_C_EWEN2      =    $FF   ;; C0 schould be enough
-EE_C_EWDS       =    $10
-EE_C_EWDS2      =    $00
-
-;**************
-; Only lower byte in A is used for address
-; unsigned int __fastcall__ lynx_eeread_93c86(unsigned int addr);
-_lynx_eeread_93c86:
-        pha
-        txa
-        ora #EE_C_READ
-        tax
-        pla
-        jsr EE_Send13Bit
-        jsr EE_Read16Bit
-        lda ptr1
-        ldx ptr1+1
-        rts
-
-;***************
-; reads EEPROM-word to ptr1
-; A,Y destroyed
-EE_Read16Bit:
-        lda #$a
-        sta IODIR       ; set AUDIN to Input
-        clc
-        stz ptr1
-        stz ptr1+1
-        ldy #15
-EEloop1:
-; CLK = 1
-        stz RCART0
-        stz RCART0
-; CLK = 0
-        stz RCART0
-        stz RCART0
-
-        lda IODAT
-        and #$10        ; mask bit
-        adc #$f0        ; C=1 if A=$10
-        rol ptr1
-        rol ptr1+1      ; shifts 0 to Carry
-        dey
-        bpl EEloop1
-
-        ldx #$1a
-        stx IODIR       ; set AUDIN for output
-;EE_SET_CS_LOW
-
-        ldx #3
-        stx SYSCTL1
-        dex
-        stx SYSCTL1
-
-        rts
-
-;***************
-; write word to EEPROM
-; void __fastcall__ lynx_eewrite_93c86(unsigned int addr, unsigned int val);
-_lynx_eewrite_93c86:
-        sta ptr1
-        stx ptr1+1
-        ldx #EE_C_EWEN
-        lda #EE_C_EWEN2
-        jsr EE_Send13Bit
-        jsr popax
-        pha
-        txa
-        ora #EE_C_WRITE
-        tax
-        pla
-        jsr EE_Send13Bit
-        jsr EE_Send16Bit        ; Sends ptr1 that contains val
-
-EE_wait:
-; EE_SET_CS_HIGH
-
-        ldx #63
-EEloop:
-        stz RCART0
-        stz RCART0
-        dex
-        bpl EEloop
-
-        lda #$0A
-        sta IODIR       ; AUDIN to input
-        lda #$10
-EE_wait1:
-        bit IODAT       ; 'til ready :D0-read is /D0-written
-        beq EE_wait1
-        lda #$1a        ; AUDIN to output
-        sta IODIR
-        ldx #EE_C_EWDS
-        lda #EE_C_EWDS2
-;       bra EE_Send13Bit ; fall into
-;***************
-; send A via I2C
-; A,Y destroyed
-EE_Send13Bit:
-; EE_SET_CS_LOW
-        ldy #3
-        sty SYSCTL1
-        dey
-        sty SYSCTL1
-; EE_SET_CS_HIGH
-
-        ldy #63
-EEloop2:
-        stz RCART0
-        stz RCART0
-        dey
-        bpl EEloop2
-
-        pha
-        txa   ;; Ok erstmal x abarbeiten und A sichern
-        ldy #4 ; 5 times
-EEloop3:
-        tax
-        and #$10
-        ora #$b
-        sta IODAT
-; CLK = 1
-        stz RCART0
-        stz RCART0
-; CLK = 0
-        stz RCART0
-        stz RCART0
-        txa
-        rol A
-        dey
-        bpl EEloop3
-
-        ldy #7 ; 8 times
-        pla  ;; jetzt kommt a an die reihe
-
-        ror A
-        ror A
-        ror A           ; bit 7 at pos. 4
-EEloop4:
-        tax
-        and #$10
-
-        ora #$b
-        sta IODAT
-; CLK = 1
-        stz RCART0
-        stz RCART0
-; CLK = 0
-        stz RCART0
-        stz RCART0
-        txa
-        rol A
-        dey
-        bpl EEloop4
-        rts
-
-;***************
-; send ptr1 to EEPROM
-EE_Send16Bit:
-        lda ptr1+1
-
-        ror A
-        ror ptr1
-        ror A
-        ror ptr1
-        ror A
-        ror ptr1
-
-        ldy #15
-EEloop5:
-        tax
-        and #$10
-        ora #$b
-        sta IODAT
-; CLK = 1
-        stz RCART0
-        stz RCART0
-; CLK = 0
-        stz RCART0
-        stz RCART0
-        txa
-        rol ptr1
-        rol A
-        dey
-        bpl EEloop5
-
-; EE_SET_CS_LOW
-        ldx #3
-        stx SYSCTL1
-        dex
-        stx SYSCTL1
-        rts
-
diff --git a/libsrc/lynx/exec.s b/libsrc/lynx/exec.s
deleted file mode 100644 (file)
index c0a630a..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-;
-; Karri Kaksonen, 2010
-;
-; lynx_exec(fileno) loads a file into memory but after the read the CPU
-; does a jump into the loaded start address.
-;
-; lynx_exec is often used in compilation carts when you run small demos
-; created with various (non-cc65) compilers.
-; 
-; void lynx_exec(int fileno)
-;
-        .importzp       _FileDestAddr
-        .import         pushax,ldax0sp,incsp2
-        .import         _lynx_load
-        .export         _lynx_exec
-
-; ---------------------------------------------------------------
-; void __near__ __fastcall__ lynx_exec (int)
-; ---------------------------------------------------------------
-
-.segment        "CODE"
-
-.proc   _lynx_exec: near
-
-.segment        "CODE"
-
-        jsr     pushax
-        jsr     ldax0sp
-        jsr     _lynx_load
-        jsr     incsp2
-        jmp     (_FileDestAddr)
-
-.endproc
-
diff --git a/libsrc/lynx/exehdr.s b/libsrc/lynx/exehdr.s
deleted file mode 100644 (file)
index 4f077fb..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Karri Kaksonen, 2011
-;
-; This header contains data for emulators like Handy and Mednafen
-;
-        .import         __BLOCKSIZE__
-        .export         __EXEHDR__: absolute = 1
-
-
-; ------------------------------------------------------------------------
-; EXE header
-        .segment "EXEHDR"
-        .byte   'L','Y','N','X'                         ; magic
-        .word   __BLOCKSIZE__                           ; bank 0 page size
-        .word   __BLOCKSIZE__                           ; bank 1 page size
-        .word   1                                       ; version number
-        .asciiz "Cart name                      "       ; 32 bytes cart name
-        .asciiz "Manufacturer   "                       ; 16 bytes manufacturer
-        .byte   0                                       ; rotation 1=left
-                                                        ; rotation 2=right
-        .byte   0,0,0,0,0                               ; spare
-
diff --git a/libsrc/lynx/extzp.inc b/libsrc/lynx/extzp.inc
deleted file mode 100644 (file)
index 2b0f687..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; extzp.inc for the Lynx
-;
-; Ullrich von Bassewitz, 2004-11-06
-;
-; Assembler include file that imports the runtime zero page locations used
-; by the Lynx runtime, ready for usage in asm code.
-;
-
-
-        .global         __iodat: zp
-        .global         __iodir: zp
-        .global         __viddma: zp
-        .global         __sprsys: zp
-        .global         _abc_score_ptr0: zp
-        .global         _abc_score_ptr1: zp
-        .global         _abc_score_ptr2: zp
-        .global         _abc_score_ptr3: zp
-        .global         _FileEntry: zp
-        .global         _FileStartBlock: zp
-        .global         _FileBlockOffset: zp
-        .global         _FileExecFlag: zp
-        .global         _FileDestAddr: zp
-        .global         _FileFileLen: zp
-        .global         _FileCurrBlock: zp
-        .global         _FileBlockByte: zp
-        .global         _FileDestPtr: zp
-
-
-
diff --git a/libsrc/lynx/extzp.s b/libsrc/lynx/extzp.s
deleted file mode 100644 (file)
index f22cfae..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-;
-; Ullrich von Bassewitz, 2004-11-06
-;
-; zeropage locations for exclusive use by the library
-;
-
-        .include "extzp.inc"
-
-        .segment "EXTZP" : zeropage
-
-; ------------------------------------------------------------------------
-; mikey and suzy shadow registers
-
-__iodat:    .res    1
-__iodir:    .res    1
-__viddma:   .res    1
-__sprsys:   .res    1
-
-; ------------------------------------------------------------------------
-; sound effect pointers for multitimbral Lynx music hardware
-_abc_score_ptr0: .res 2
-_abc_score_ptr1: .res 2
-_abc_score_ptr2: .res 2
-_abc_score_ptr3: .res 2
-
-; ------------------------------------------------------------------------
-; Filesystem variables needed for reading stuff from the Lynx cart
-_FileEntry:                     ; The file directory entry is 8 bytes
-_FileStartBlock:    .res   1
-_FileBlockOffset:   .res   2
-_FileExecFlag:      .res   1
-_FileDestAddr:      .res   2
-_FileFileLen:       .res   2
-
-_FileCurrBlock:     .res   1
-_FileBlockByte:     .res   2
-_FileDestPtr:       .res   2
-
diff --git a/libsrc/lynx/irq.s b/libsrc/lynx/irq.s
deleted file mode 100644 (file)
index 4a6adfb..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-;
-; IRQ handling (Lynx version)
-;
-
-        .export         initirq, doneirq
-        .import         callirq
-
-        .include        "lynx.inc"
-
-; ------------------------------------------------------------------------
-
-.segment        "INIT"
-
-initirq:
-        lda     #<IRQStub
-        ldx     #>IRQStub
-        sei
-        sta     INTVECTL
-        stx     INTVECTH
-        cli
-        rts
-
-; ------------------------------------------------------------------------
-
-.code
-
-doneirq:
-        ; as Lynx is a console there is not much point in releasing the IRQ
-        rts
-
-; ------------------------------------------------------------------------
-
-.segment        "LOWCODE"
-
-IRQStub:
-        phy
-        phx
-        pha
-        cld
-        jsr     callirq
-        lda     INTSET
-        sta     INTRST
-        pla
-        plx
-        ply
-        rti
diff --git a/libsrc/lynx/joy/lynx-stdjoy.s b/libsrc/lynx/joy/lynx-stdjoy.s
deleted file mode 100644 (file)
index 1146470..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-;
-; Standard joystick driver for the Atari Lynx.
-; The Lynx has two fire buttons. So it is not quite "standard".
-;
-; Modified by Karri Kaksonen, 2004-09-16
-; Ullrich von Bassewitz, 2002-12-20
-; Using code from Steve Schmidtke
-;
-
-        .include        "zeropage.inc"
-
-        .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-        .include        "lynx.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _lynx_stdjoy_joy
-
-; Driver signature
-
-        .byte   $6A, $6F, $79           ; "joy"
-        .byte   JOY_API_VERSION         ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-joy_mask:
-        .byte   $80                     ; JOY_UP
-        .byte   $40                     ; JOY_DOWN
-        .byte   $20                     ; JOY_LEFT
-        .byte   $10                     ; JOY_RIGHT
-        .byte   $01                     ; JOY_FIRE
-        .byte   $02                     ; JOY_FIRE1
-        .byte   $00                     ;
-        .byte   $00                     ;
-
-; Jump table.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READ
-        .addr   0                       ; IRQ entry unused
-
-; ------------------------------------------------------------------------
-; Constants
-
-JOY_COUNT       = 1             ; Number of joysticks we support
-
-
-; ------------------------------------------------------------------------
-; Data.
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda #<JOY_ERR_OK
-        ldx #>JOY_ERR_OK
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:
-        lda     #<JOY_COUNT
-        ldx     #>JOY_COUNT
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-
-READ:
-        ldx     #$00            ; Clear high byte
-        lda     JOYSTICK        ; Read joystick
-        and     #$F3            ; Mask relevant keys
-        rts
-
-
diff --git a/libsrc/lynx/joy_stat_stddrv.s b/libsrc/lynx/joy_stat_stddrv.s
deleted file mode 100644 (file)
index 4605da3..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Address of the static standard joystick driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void joy_static_stddrv[];
-;
-
-        .export _joy_static_stddrv
-        .import _lynx_stdjoy_joy
-
-.rodata
-
-_joy_static_stddrv := _lynx_stdjoy_joy
diff --git a/libsrc/lynx/joy_stddrv.s b/libsrc/lynx/joy_stddrv.s
deleted file mode 100644 (file)
index b0d30e8..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Name of the standard joystick driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const char joy_stddrv[];
-;
-
-        .export _joy_stddrv
-
-.rodata
-
-_joy_stddrv:    .asciiz "lynx-stdjoy.joy"
diff --git a/libsrc/lynx/kbhit.s b/libsrc/lynx/kbhit.s
deleted file mode 100644 (file)
index b606fc4..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-;
-; Karri Kaksonen, Harry Dodgson 2006-01-06
-;
-; unsigned char kbhit (void);
-;
-
-        .export         _kbhit
-        .export         KBEDG
-        .export         KBSTL
-        .import         return1
-
-; --------------------------------------------------------------------------
-; The Atari Lynx has a very small keyboard - only 3 keys
-; Opt1, Opt2 and Pause.
-; But the designers have decided that pressing Pause and Opt1 at the
-; same time means Restart and pressing Pause and Opt2 means Flip screen.
-
-; For "easter egg" use I have also included all three keys pressed '?'
-; and Opt1 + Opt2 pressed '3'.
-; So the keyboard returns '1', '2', '3', 'P', 'R', 'F' or '?'.
-
-        .data
-KBTMP:          .byte   0
-KBPRV:          .byte   0
-KBEDG:          .byte   0
-KBSTL:          .byte   0
-KBDEB:          .byte   0
-KBNPR:          .byte   0
-
-        .code
-_kbhit:
-        lda     $FCB0           ; Read the Opt buttons
-        and     #$0c
-        sta     KBTMP
-        lda     $FCB1           ; Read Pause
-        and     #1
-        ora     KBTMP           ; 0000210P
-        tax
-        and     KBPRV
-        sta     KBSTL           ; for multibutton
-        txa
-        and     KBDEB
-        sta     KBEDG           ; for just depressed
-        txa
-        and     KBNPR
-        sta     KBDEB           ; for debouncing
-        txa
-        eor     #$ff
-        sta     KBNPR           ; inverted previous ones pressed
-        stx     KBPRV
-        lda     KBEDG
-        beq     @L1
-        jmp     return1         ; Key hit
-
-@L1:    tax                     ; No new keys hit
-        rts
diff --git a/libsrc/lynx/libref.s b/libsrc/lynx/libref.s
deleted file mode 100644 (file)
index 62c78b8..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Oliver Schmidt, 2013-05-31
-;
-
-        .export         joy_libref, ser_libref, tgi_libref
-        .import         _exit
-
-joy_libref      := _exit
-ser_libref      := _exit
-tgi_libref      := _exit
diff --git a/libsrc/lynx/load.s b/libsrc/lynx/load.s
deleted file mode 100644 (file)
index c638177..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-;
-; Karri Kaksonen, 2010
-;
-; lynx_load(fileno) is a convenience function that is widely used on the Lynx.
-; Basically this opens directory entry fileno and reads the content of the
-; file this points to into RAM.
-;
-; void lynx_load(int fileno)
-;
-        .importzp       _FileFileLen
-        .importzp       _FileDestAddr
-        .import         pushax,ldax0sp,pusha0,incsp2
-        .import         _openn
-        .import         _read
-        .export         _lynx_load
-
-; ---------------------------------------------------------------
-; void __near__ __fastcall__ lynx_load (int)
-; ---------------------------------------------------------------
-
-.segment        "CODE"
-
-.proc   _lynx_load: near
-
-.segment        "CODE"
-
-        jsr     pushax
-        jsr     ldax0sp
-        jsr     _openn
-        lda     #$01
-        jsr     pusha0
-        lda     _FileDestAddr
-        ldx     _FileDestAddr+1
-        jsr     pushax
-        lda     _FileFileLen
-        ldx     _FileFileLen+1
-        jsr     _read
-        jmp     incsp2
-
-.endproc
-
diff --git a/libsrc/lynx/lseek.s b/libsrc/lynx/lseek.s
deleted file mode 100644 (file)
index 4b4f94d..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-;
-; Karri Kaksonen, 2010
-;
-; This function is used to place the Lynx hardware to point to any byte in
-; the Lynx cart.
-;
-; This function supports all available block sizes (512, 1024 and 2048 bytes).
-; No other block sizes have been used afaik.
-;
-; Only SEEK_SET operation mode is implemented.
-;
-; off_t __fastcall__ lseek(int fd, off_t offset, int whence);
-
-        .importzp       sp, sreg, regsave, regbank, tmp1, ptr1, ptr2
-        .macpack        longbranch
-        .export         _lseek
-        .import         addysp, stax0sp, tosand0ax, pusheax, asreax2
-        .import         ldeaxysp, decsp2, pushax, incsp8
-        .import         tosandeax,decax1,tosdiveax,axlong,ldaxysp
-        .import         lynxskip0, lynxblock,tosasreax
-        .import         __BLOCKSIZE__
-        .importzp       _FileCurrBlock
-
-.segment        "CODE"
-
-.proc   _lseek: near
-
-.segment        "CODE"
-
-        jsr     pushax
-        ldy     #$05
-        jsr     ldeaxysp
-        jsr     pusheax
-        ldx     #$00
-        lda     #<(__BLOCKSIZE__/1024 + 9)
-        jsr     tosasreax
-        sta     _FileCurrBlock
-        jsr     lynxblock
-        ldy     #$05
-        jsr     ldeaxysp
-        jsr     pusheax
-        lda     #<(__BLOCKSIZE__-1)
-        ldx     #>(__BLOCKSIZE__-1)
-        jsr     axlong
-        jsr     tosandeax
-        eor     #$FF
-        pha
-        txa
-        eor     #$FF
-        tay
-        plx
-        jsr     lynxskip0
-        ldy     #$05
-        jsr     ldeaxysp
-        jmp     incsp8
-
-.endproc
-
diff --git a/libsrc/lynx/lynx-cart.s b/libsrc/lynx/lynx-cart.s
deleted file mode 100644 (file)
index 86e9073..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-; ***
-; CC65 Lynx Library
-;
-; Originally by Bastian Schick
-; http://www.geocities.com/SiliconValley/Byte/4242/lynx/
-;
-; Ported to cc65 (http://www.cc65.org) by
-; Shawn Jefferson, June 2004
-; 
-; This version by Karri Kaksonen, December 2010
-;
-; Helper stuff for the cartridge file functions. This version can deal
-; with 1024 bytes/block carts that are using CART0 as a read strobe.
-; Also the default crt0.s supports this most common Lynx cart format.
-
-        .include "lynx.inc"
-        .include "extzp.inc"
-        .export  lynxskip0, lynxread0
-        .export  lynxblock 
-        .import  __BLOCKSIZE__
-
-        .code
-
-;**********************************
-; Skip bytes on bank 0
-; X:Y count (EOR $FFFF)
-;**********************************
-lynxskip0:
-        inx
-        bne @0
-        iny
-        beq exit
-@0:     jsr readbyte0
-        bra lynxskip0
-
-;**********************************
-; Read bytes from bank 0
-; X:Y count (EOR $ffff)
-;**********************************
-lynxread0:
-        inx
-        bne @1
-        iny
-        beq exit
-@1:     jsr readbyte0
-        sta (_FileDestPtr)
-        inc _FileDestPtr
-        bne lynxread0
-        inc _FileDestPtr+1
-        bra lynxread0
-
-;**********************************
-; Read one byte from cartridge
-;**********************************
-readbyte0:
-        lda RCART0
-        inc _FileBlockByte
-        bne exit
-        inc _FileBlockByte+1
-        bne exit
-
-;**********************************
-; Select a block 
-;**********************************
-lynxblock:
-        pha
-        phx
-        phy
-        lda __iodat
-        and #$fc
-        tay
-        ora #2
-        tax
-        lda _FileCurrBlock
-        inc _FileCurrBlock
-        sec
-        bra @2
-@0:     bcc @1
-        stx IODAT
-        clc
-@1:     inx
-        stx SYSCTL1
-        dex
-@2:     stx SYSCTL1
-        rol
-        sty IODAT
-        bne @0
-        lda __iodat
-        sta IODAT
-        stz _FileBlockByte
-        lda #<($100-(>__BLOCKSIZE__))
-        sta _FileBlockByte+1
-        ply
-        plx
-        pla
-
-exit:   rts
-
diff --git a/libsrc/lynx/lynx-snd.s b/libsrc/lynx/lynx-snd.s
deleted file mode 100644 (file)
index 9d0b8b7..0000000
+++ /dev/null
@@ -1,1270 +0,0 @@
-;
-; Sound driver for the Atari Lynx.
-;
-; Karri Kaksonen and Bjoern Spruck, 11.12.2012
-;
-
-        .include        "lynx.inc"
-        .include        "zeropage.inc"
-
-        .export         _lynx_snd_init
-        .export         _lynx_snd_active
-        .export         _lynx_snd_play
-        .export         _lynx_snd_stop
-        .export         _lynx_snd_stop_channel
-        .export         _lynx_snd_pause
-        .export         _lynx_snd_continue
-        .interruptor    lynx_snd_handler
-        .import         popa
-        .importzp       ptr1
-
-;----------------------------------------------------------------------------
-; ZP variables that go into APPZP
-;
-
-        .segment "APPZP" : zeropage
-
-SndSema:                .res    1
-SndPtrTmp:              .res    2
-SndTmp:                 .res    2
-SndEnvPtr:              .res    2
-
-;----------------------------------------------------------------------------
-; Global variables
-;
-
-        .bss
-
-SndRetAFlag2:           .res    1
-SndRetAFlag:            .res    1
-SndPtrLo:               .res    4
-SndPtrHi:               .res    4
-SndDelay:               .res    4
-SndLoopCnt:             .res    4
-SndLoopPtrLo:           .res    4
-SndLoopPtrHi:           .res    4
-SndVolume:              .res    4
-SndMaxVolume:           .res    4
-SndNotePlaying:         .res    4
-SndRetAddr:             .res    8
-SndActive:              .res    4
-SndReqStop:             .res    4
-SndEnvVol:              .res    4
-SndEnvFrq:              .res    4
-SndEnvWave:             .res    4
-SndChannel:             .res    32
-SndEnvVolCnt:           .res    4
-SndEnvVolInc:           .res    4
-SndEnvVolOff:           .res    4
-SndEnvVolLoop:          .res    4
-SndEnvVolParts:         .res    4
-SndEnvVolParts2:        .res    4
-SndEnvFrqCnt:           .res    4
-SndEnvFrqInc:           .res    4
-SndEnvFrqOff:           .res    4
-SndEnvFrqLoop:          .res    4
-SndEnvFrqParts:         .res    4
-SndEnvFrqParts2:        .res    4
-SndEnvWaveCnt:          .res    4
-SndEnvWaveOff:          .res    4
-SndEnvWaveLoop:         .res    4
-SndEnvWaveParts:        .res    4
-SndEnvWaveParts2:       .res    4
-
-MAX_INSTRUMENTS         .set    64
-SndEnvVolPtrLo:         .res    MAX_INSTRUMENTS
-SndEnvVolPtrHi:         .res    MAX_INSTRUMENTS
-SndEnvFrqPtrLo:         .res    MAX_INSTRUMENTS
-SndEnvFrqPtrHi:         .res    MAX_INSTRUMENTS
-SndEnvWavePtrLo:        .res    MAX_INSTRUMENTS
-SndEnvWavePtrHi:        .res    MAX_INSTRUMENTS
-
-        .rodata
-
-SndOffsets:             .byte   $00,$08,$10,$18
-
-;----------------------------------------------------------------------------
-; Macros
-;
-
-if_count        .set    0
-nest_count      .set    0
-
-.macro  _IFNE
-        if_count        .set    if_count +1
-        nest_count      .set    nest_count +1
-        beq             .ident (.sprintf ("else%04d", if_count))
-        .ident (.sprintf ("push%04d", nest_count)) .set if_count
-.endmacro
-
-.macro  _IFEQ
-        if_count        .set    if_count +1
-        nest_count      .set    nest_count +1
-        bne             .ident (.sprintf ("else%04d", if_count))
-        .ident (.sprintf ("push%04d", nest_count)) .set if_count
-.endmacro
-
-.macro  _IFMI
-        if_count        .set    if_count +1
-        nest_count      .set    nest_count +1
-        bpl             .ident (.sprintf ("else%04d", if_count))
-        .ident (.sprintf ("push%04d", nest_count)) .set if_count
-.endmacro
-
-.macro  _IFPL
-        if_count        .set    if_count +1
-        nest_count      .set    nest_count +1
-        bmi             .ident (.sprintf ("else%04d", if_count))
-        .ident (.sprintf ("push%04d", nest_count)) .set if_count
-.endmacro
-
-.macro  _IFGE
-        if_count        .set    if_count +1
-        nest_count      .set    nest_count +1
-        bcc             .ident (.sprintf ("else%04d", if_count))
-        .ident (.sprintf ("push%04d", nest_count)) .set if_count
-.endmacro
-
-.macro  _IFCS
-        if_count        .set    if_count +1
-        nest_count      .set    nest_count +1
-        bcc             .ident (.sprintf ("else%04d", if_count))
-        .ident (.sprintf ("push%04d", nest_count)) .set if_count
-.endmacro
-
-.macro  _IFCC
-        if_count        .set    if_count +1
-        nest_count      .set    nest_count +1
-        bcs             .ident (.sprintf ("else%04d", if_count))
-        .ident (.sprintf ("push%04d", nest_count)) .set if_count
-.endmacro
-
-.macro  _ELSE
-        bra     .ident (.sprintf ("endif%04d", .ident (.sprintf ("push%04d", nest_count))))
-        .ident  (.sprintf ("else%04d", .ident (.sprintf ("push%04d", nest_count)))) := *
-.endmacro
-
-.macro  _ENDIF
-        .if .not .defined( .ident (.sprintf ("else%04d", .ident (.sprintf ("push%04d", nest_count)))))
-                .ident  (.sprintf ("else%04d", .ident (.sprintf ("push%04d", nest_count)))) := *
-        .endif
-        .ident  (.sprintf ("endif%04d", .ident (.sprintf ("push%04d", nest_count)))) := *
-        nest_count      .set    nest_count -1
-.endmacro
-
-        .code
-
-;----------------------------------------------------------------------------
-; void lynx_snd_init() will initialize the sound engine.
-;
-
-_31250Hz        .set    %101
-
-_lynx_snd_init:
-        php
-        sei
-        lda     #%10011000|_31250Hz
-        sta     STIMCTLA
-        lda     #129
-        sta     STIMBKUP        ; set up a 240Hz IRQ
-
-        stz     AUD0VOL
-        stz     AUD1VOL
-        stz     AUD2VOL
-        stz     AUD3VOL
-
-        stz     $fd44           ; all channels full volume / no attenuation
-        lda     #$ff
-        stz     MSTEREO
-
-        lda     #0
-        sta     AUD0CTLA
-        sta     AUD1CTLA
-        sta     AUD2CTLA
-        sta     AUD3CTLA
-
-        ldx     #3
-        lda     #0
-init0:  stz     SndActive,x
-        stz     SndReqStop,x
-        stz     SndEnvVol,x
-        stz     SndEnvFrq,x
-        stz     SndEnvWave,x
-        ldy     SndOffsets,x
-        sta     SndChannel+2,y
-        dex
-        bpl     init0
-        stz     SndRetAFlag
-        stz     SndRetAFlag2
-        stz     SndSema
-        plp
-        rts
-
-;----------------------------------------------------------------------------
-; lynx_snd_handler is run at every sound interrupt
-;
-
-lynx_snd_handler:
-        lda     INTSET
-        and     #SND_INTERRUPT
-        bne     @L0
-        clc
-        rts
-@L0:
-        lda     #$ff
-        tsb     SndSema
-        bne     endirq
-        phy
-        ; *NOW* set all values which were "pre-set" in last interrupt
-        jsr     SndSetValues
-        cli
-
-        lda SndRetAFlag   ; reset the return flag, but save it first
-        _IFNE
-                lda #$0F ; MASK
-                sta SndRetAFlag2
-                stz SndRetAFlag
-        _ENDIF
-
-        ldx #3
-irq0:   phx
-        lda SndActive,x
-        _IFNE
-                lda SndEnvVol,x
-                _IFNE
-                        phx
-                        jsr SndChangeVol
-                        plx
-                _ENDIF
-                lda SndEnvFrq,x
-                _IFNE
-                        phx
-                        jsr SndChangeFrq
-                        plx
-                _ENDIF
-                lda SndEnvWave,x
-                _IFNE
-                        phx
-                        jsr SndChangeWave
-                        plx
-                _ENDIF
-                jsr SndGetCmd
-        _ENDIF
-        plx
-        dex
-        bpl irq0
-        sei
-        ply
-        stz SndSema
-endirq:
-        clc
-        rts
-
-;----------------------------------------------------------------------------
-; A process table with addresses to sound functions
-;
-
-SndCmdsLo:
-        .byte <((SndLoop)-1)
-        .byte <((SndDo)-1)
-        .byte <((SndPause)-1)
-        .byte <((SndNoteOff)-1)
-        .byte <((SndSetInstr)-1)
-        .byte <((SndNewNote2)-1)
-        .byte <((SndCallPattern)-1)
-        .byte <((SndRetToSong)-1)
-        .byte <((SndDefEnvVol)-1)
-        .byte <((SndSetEnvVol)-1)
-        .byte <((SndDefEnvFrq)-1)
-        .byte <((SndSetEnvFrq)-1)
-        .byte <((SndDefEnvWave)-1)
-        .byte <((SndSetEnvWave)-1)
-        .byte <((SndSetStereo)-1)
-        .byte <((SndSetAttenuationOn)-1)
-        .byte <((SndSetChnAttenution)-1)
-        .byte <((SndPlayerFreq)-1)
-        .byte <((SndReturnAll)-1)
-
-SndCmdsHi:
-        .byte >((SndLoop)-1)
-        .byte >((SndDo)-1)
-        .byte >((SndPause)-1)
-        .byte >((SndNoteOff)-1)
-        .byte >((SndSetInstr)-1)
-        .byte >((SndNewNote2)-1)
-        .byte >((SndCallPattern)-1)
-        .byte >((SndRetToSong)-1)
-        .byte >((SndDefEnvVol)-1)
-        .byte >((SndSetEnvVol)-1)
-        .byte >((SndDefEnvFrq)-1)
-        .byte >((SndSetEnvFrq)-1)
-        .byte >((SndDefEnvWave)-1)
-        .byte >((SndSetEnvWave)-1)
-        .byte >((SndSetStereo)-1)
-        .byte >((SndSetAttenuationOn)-1)
-        .byte >((SndSetChnAttenution)-1)
-        .byte >((SndPlayerFreq)-1)
-        .byte >((SndReturnAll)-1)
-
-;----------------------------------------------------------------------------
-; Get next sound command from stream
-;
-
-SndGetCmd:
-        lda SndReqStop,x
-        bne SndStop
-
-        lda SndRetAFlag2
-        and SndMask,x
-        _IFNE
-                eor SndRetAFlag2
-                sta SndRetAFlag2
-                lda SndRetAddr,x
-                sta SndPtrLo,x
-                lda SndRetAddr+4,x
-                sta SndPtrHi,x
-                ;;; force the direct continue return
-        _ELSE
-                dec SndDelay,x
-                bne cmd991 ;; check special case
-        _ENDIF
-
-        lda SndPtrLo,x
-        sta SndPtrTmp
-        lda SndPtrHi,x
-        sta SndPtrTmp+1
-cmd0:   lda (SndPtrTmp)
-        beq SndStop
-        _IFMI
-                and #$7f
-                tay
-                jsr SndCallCmd
-        _ELSE
-                jsr SndNewNote
-        _ENDIF
-        clc
-        tya
-        and #$7f
-        adc SndPtrTmp
-        sta SndPtrLo,x
-        sta SndPtrTmp
-        lda #0
-        adc SndPtrTmp+1
-        sta SndPtrHi,x
-        sta SndPtrTmp+1
-
-        tya
-        bmi cmd0
-cmd991:
-        ;; now check if delay is only 1 AND next one is return all.
-        lda #1
-        cmp SndDelay,x
-        bne cmd99
-
-        ;; NOW read ahead ONE
-        lda SndPtrLo,x
-        sta SndPtrTmp
-        lda SndPtrHi,x
-        sta SndPtrTmp+1
-
-        lda (SndPtrTmp)
-        cmp #$92 ;; Return all
-        _IFEQ
-                sta SndRetAFlag ; just set !=0
-        _ENDIF
-cmd99:  rts
-
-;----------------------------------------------------------------------------
-; Call function pointed to by y
-;
-
-SndCallCmd:
-        lda SndCmdsHi,y
-        pha
-        lda SndCmdsLo,y
-        pha
-        ldy #1
-        rts
-
-;----------------------------------------------------------------------------
-; Stop sound on one channel
-;
-
-SndStop:
-        stz SndReqStop,x
-        stz SndActive,x
-        ldy SndOffsets,x
-        lda #0
-        sta SndChannel,y
-        ina ;lda #1
-        sta SndChannel+2,y
-        tay ;ldy #1
-        rts
-
-
-;----------------------------------------------------------------------------
-; Send a new note, length, volume triplet
-;
-
-SndNewNote:
-        phx
-        sta SndNotePlaying,x
-        pha
-        ldy #1
-        lda (SndPtrTmp),y
-        sta SndDelay,x
-        ldy SndOffsets,x
-        lda SndVolume,x
-        sta SndChannel,y
-        plx
-        lda SndPrescaler,x
-        sta SndChannel+5,y
-        lda SndReload,x
-        sta SndChannel+4,y
-        lda #$FF   ; = -1
-        sta SndChannel+2,y
-        plx
-        lda SndEnvVol,x
-        _IFNE
-                jsr SndSetEnvVol1
-        _ENDIF
-        lda SndEnvFrq,x
-        _IFNE
-                jsr SndSetEnvFrq1
-        _ENDIF
-        lda SndEnvWave,x
-        _IFNE
-                jsr SndSetEnvWave1
-        _ENDIF
-        lda #$2
-        ldy SndDelay,x
-        _IFNE
-                ora #$80
-        _ENDIF
-        tay
-        rts
-
-;----------------------------------------------------------------------------
-; Start a loop with count
-;
-
-SndLoop:
-        lda (SndPtrTmp),y
-        sta SndLoopCnt,x
-        lda SndPtrTmp
-        sta SndLoopPtrLo,x
-        lda SndPtrTmp+1
-        sta SndLoopPtrHi,x
-        ldy #$82
-        rts
-
-SndDo:
-        dec SndLoopCnt,x
-        _IFNE
-                lda SndLoopPtrLo,x
-                sta SndPtrTmp
-                lda SndLoopPtrHi,x
-                sta SndPtrTmp+1
-                ldy #$82
-        _ELSE
-                ldy #$81
-        _ENDIF
-        rts
-
-;----------------------------------------------------------------------------
-; Sound volume envelope
-;
-
-SndDefEnvVol:
-        phx
-        lda (SndPtrTmp),y               ; env #
-        tax
-
-        iny
-        lda (SndPtrTmp),y
-        sta SndEnvVolPtrLo,x
-        iny
-        lda (SndPtrTmp),y
-        sta SndEnvVolPtrHi,x            ; Ptr to [cnt,inc]
-
-        ldy #$84
-        plx
-        rts
-
-SndSetEnvVol:
-        lda (SndPtrTmp),y               ; # env
-
-SndSetEnvVol1:
-        and #$7f
-        sta SndEnvVol,x                 ; save
-        _IFEQ
-                ldy #$82
-                rts
-        _ENDIF
-
-        tay
-
-        lda SndEnvVolPtrLo,y
-        sta SndEnvPtr
-        lda SndEnvVolPtrHi,y
-        sta SndEnvPtr+1
-
-        lda (SndEnvPtr)
-        sta SndTmp
-        asl
-        sta SndEnvVolLoop,x             ; here is the loop-start
-
-        ldy #1
-        lda (SndEnvPtr),y
-        sta SndEnvVolParts,x
-        sec
-        sbc SndTmp
-        sta SndEnvVolParts2,x
-
-        stz SndEnvVolCnt,x
-        lda #2
-        sta SndEnvVolOff,x
-
-        ldy #$82
-        rts
-
-;----------------------------------------------------------------------------
-; Sound frequency envelope
-;
-
-SndDefEnvFrq:
-        phx
-        lda (SndPtrTmp),y               ; env #
-        tax
-
-        iny
-        lda (SndPtrTmp),y
-        sta SndEnvFrqPtrLo,x
-        iny
-        lda (SndPtrTmp),y
-        sta SndEnvFrqPtrHi,x            ; Ptr to [inc,cnt]
-        plx
-        ldy #$84
-        rts
-
-SndSetEnvFrq:
-        lda (SndPtrTmp),y               ; # env
-
-SndSetEnvFrq1:
-        and #$7f
-        sta SndEnvFrq,x                 ; save
-        _IFEQ
-                ldy #$82
-                rts
-        _ENDIF
-
-        tay
-
-        lda SndEnvFrqPtrLo,y
-        sta SndEnvPtr
-        lda SndEnvFrqPtrHi,y
-        sta SndEnvPtr+1
-
-        lda (SndEnvPtr)
-        sta SndTmp
-        asl
-        sta SndEnvFrqLoop,x
-
-        ldy #1
-        lda (SndEnvPtr),y
-        sta SndEnvFrqParts,x
-        sec
-        sbc SndTmp
-        sta SndEnvFrqParts2,x
-
-        stz SndEnvFrqCnt,x
-        lda #2
-        sta SndEnvFrqOff,x
-
-        ldy #$82
-        rts
-
-;----------------------------------------------------------------------------
-; Sound frequency envelope
-;
-
-SndDefEnvWave:
-
-        phx
-        lda (SndPtrTmp),y               ; env #
-        tax
-
-        iny
-        lda (SndPtrTmp),y
-        sta SndEnvWavePtrLo,x
-        iny
-        lda (SndPtrTmp),y
-        sta SndEnvWavePtrHi,x            ; Ptr to [inc,cnt]
-        plx
-        ldy #$84
-        rts
-
-SndSetEnvWave:
-        lda (SndPtrTmp),y               ; # env
-
-SndSetEnvWave1:
-        and #$7f
-        sta SndEnvWave,x                 ; save
-        _IFEQ
-                ldy #$82
-                rts
-        _ENDIF
-
-        tay
-
-        lda SndEnvWavePtrLo,y
-        sta SndEnvPtr
-        lda SndEnvWavePtrHi,y
-        sta SndEnvPtr+1
-
-        lda (SndEnvPtr)
-        sta SndTmp
-        asl ; *4 -2
-        dea
-        asl
-        sta SndEnvWaveLoop,x
-
-        ldy #1
-        lda (SndEnvPtr),y
-        sta SndEnvWaveParts,x
-        sec
-        sbc SndTmp
-        sta SndEnvWaveParts2,x
-
-        stz SndEnvWaveCnt,x
-        lda #2
-        sta SndEnvWaveOff,x
-
-        ldy #$82
-        rts
-
-;----------------------------------------------------------------------------
-; Pause sound
-;
-
-SndPause:
-                lda (SndPtrTmp),y
-                sta SndDelay,x
-                iny
-SndDummy:        rts
-;;;* This set the new Player Freq instantanious!!!
-SndPlayerFreq:
-                lda (SndPtrTmp),y
-                sta STIMCTLA
-                iny
-                lda (SndPtrTmp),y
-                sta STIMBKUP
-                ldy #$83
-                rts
-
-SndNoteOff:
-                ldy SndOffsets,x
-                stz SndNotePlaying,x
-                lda SndEnvVol,x
-                ora #$80
-                sta SndEnvVol,x
-                lda SndEnvFrq,x
-                ora #$80
-                sta SndEnvFrq,x
-                lda SndEnvWave,x
-                ora #$80
-                sta SndEnvWave,x
-                lda #0
-                sta SndChannel,y
-                sta SndChannel+4,y
-                sta SndChannel+5,y
-                dea
-                sta SndChannel+2,y
-                ldy #$81
-                rts
-SndSetInstr:
-                phx
-                lda SndOffsets,x
-                tax
-                lda (SndPtrTmp),y
-                sta SndChannel+3,x
-                iny
-                lda (SndPtrTmp),y
-                sta SndChannel+7,x
-                iny
-                lda (SndPtrTmp),y
-                sta SndChannel+1,x
-                plx
-                iny
-                lda (SndPtrTmp),y
-                sta SndVolume,x
-                iny
-                lda (SndPtrTmp),y
-                sta SndMaxVolume,x
-
-                ldy #$86
-                rts
-SndCallPattern:
-                clc
-                lda SndPtrTmp
-                adc #3
-                sta SndRetAddr,x
-                lda SndPtrTmp+1
-                adc #0
-                sta SndRetAddr+4,x
-                ldy #1
-                lda (SndPtrTmp),y
-                pha
-                iny
-                lda (SndPtrTmp),y
-                sta SndPtrTmp+1
-                pla
-                sta SndPtrTmp
-                ldy #$80
-                rts
-
-SndRetToSong:
-                lda SndRetAddr,x
-                sta SndPtrTmp
-                lda SndRetAddr+4,x
-                sta SndPtrTmp+1
-                ldy #$80
-                rts
-
-SndReturnAll:
-                lda #1
-                sta SndRetAFlag
-                sta SndDelay,x
-                ldy #$0
-                rts
-SndNewNote2:
-;;; Note,length,volume
-
-                phx
-                  sta SndNotePlaying,x
-                  ldy #1
-                  lda (SndPtrTmp),y             ; reload
-                  pha
-                  iny
-                  lda (SndPtrTmp),y             ; prescale
-                  pha
-                  iny
-                  lda (SndPtrTmp),y         ; laenge
-                  sta SndDelay,x
-
-                  ldy SndOffsets,x
-                  lda SndVolume,x
-                  sta SndChannel,y
-                  pla
-                  sta SndChannel+5,y
-                  pla
-                  sta SndChannel+4,y
-                  lda #$FF ; = -1
-                  sta SndChannel+2,y
-                plx
-                lda SndEnvVol,x
-                _IFNE
-                  jsr SndSetEnvVol1
-                _ENDIF
-                lda SndEnvFrq,x
-                _IFNE
-                  jsr SndSetEnvFrq1
-                _ENDIF
-                lda SndEnvWave,x
-                _IFNE
-                  jsr SndSetEnvWave1
-                _ENDIF
-                ldy #4
-                rts
-
-SndSetStereo:
-                ldy #1
-                lda (SndPtrTmp),y
-                sta MSTEREO
-                ldy #$82
-                rts
-
-SndSetAttenuationOn:
-                ldy #1
-                lda (SndPtrTmp),y
-                sta $FD44
-                ldy #$82
-                rts
-
-SndSetChnAttenution:
-                ldy #1
-                lda (SndPtrTmp),y
-                sta $FD40,x
-                ldy #$82
-                rts
-
-SndChangeVol:
-                tay
-                _IFMI
-vol99:               rts
-                _ENDIF
-                lda SndNotePlaying,x
-                beq vol99
-
-                lda SndEnvVolPtrLo,y
-                sta SndEnvPtr
-                lda SndEnvVolPtrHi,y
-                sta SndEnvPtr+1
-
-                dec SndEnvVolCnt,x
-                _IFMI
-                  dec SndEnvVolParts,x
-                  _IFMI
-                    lda SndEnvVolLoop,x
-                    _IFNE
-                      tay
-                      lda SndEnvVolParts2,x
-                      sta SndEnvVolParts,x
-                      bra vol1v
-                    _ELSE
-                      tya
-                      ora #$80
-                      sta SndEnvVol,x
-                    _ENDIF
-                  _ELSE
-                    ldy SndEnvVolOff,x
-vol1v:                 lda (SndEnvPtr),y
-                    sta SndEnvVolCnt,x
-                    iny
-                    lda (SndEnvPtr),y
-                    sta SndEnvVolInc,x
-                    iny
-                    tya
-                    sta SndEnvVolOff,x
-                  _ENDIF
-                  rts
-                _ENDIF
-
-                  ldy SndOffsets,x
-                  clc
-                  lda SndEnvVolInc,x
-                  _IFEQ
-                    rts
-                  _ENDIF
-                  _IFPL
-                    adc SndChannel,y
-                    cmp SndMaxVolume,x
-                    _IFCS
-                      lda SndMaxVolume,x
-                      stz SndEnvVolInc,x
-                    _ENDIF
-                    cmp #$80
-                    _IFGE
-                      lda #$7f
-                      stz SndEnvVolInc,x
-                    _ENDIF
-                 _ELSE
-                   adc SndChannel,y
-                   _IFCC
-                     lda #0
-                     sta SndEnvVolInc,x
-                     ;; NEU: switch Tremolo off
-                     sta SndNotePlaying,x
-                   _ENDIF
-                   cmp #$80
-                   _IFGE
-                     lda #0
-                     sta SndEnvVolInc,x
-                     ;; NEU: switch Tremolo off
-                     sta SndNotePlaying,x
-                   _ENDIF
-                 _ENDIF
-                  sta SndChannel,y
-                  lda SndChannel+2,y
-                  ora #1 ;; if already -1 ... no effect
-                  sta SndChannel+2,y
-                rts
-
-
-SndChangeFrq:
-                tay
-                _IFMI
-frq99:               rts
-                _ENDIF
-                lda SndNotePlaying,x
-                beq frq99
-
-                lda SndEnvFrqPtrLo,y
-                sta SndEnvPtr
-                lda SndEnvFrqPtrHi,y
-                sta SndEnvPtr+1
-
-                dec SndEnvFrqCnt,x
-                _IFMI
-                  dec SndEnvFrqParts,x
-                  _IFMI
-                    lda SndEnvFrqLoop,x
-                    _IFNE
-                      tay
-                      lda SndEnvFrqParts2,x
-                      sta SndEnvFrqParts,x
-                      bra frq1f
-                    _ELSE
-                      tya
-                      ora #$80
-                      sta SndEnvFrq,x
-                    _ENDIF
-                  _ELSE
-                    ldy SndEnvFrqOff,x
-frq1f:                 lda (SndEnvPtr),y
-                    sta SndEnvFrqCnt,x
-                    iny
-                    lda (SndEnvPtr),y
-                    eor #$ff
-                    ina
-                    sta SndEnvFrqInc,x
-                    iny
-                    tya
-                    sta SndEnvFrqOff,x
-                  _ENDIF
-                  rts
-                  _ENDIF
-                  ldy SndOffsets,x
-                  clc
-                  lda SndEnvFrqInc,x
-                  _IFEQ
-                    rts
-                  _ENDIF
-
-                  _IFMI
-                    adc SndChannel+4,y
-                    _IFPL
-                      pha
-                      lda SndChannel+5,y
-                      _IFNE
-                        dea
-                        sta SndChannel+5,y
-                        pla
-                        eor #128
-                      _ELSE
-                        pla
-                        pha
-                        clc
-                        adc SndEnvFrqInc,x
-                        pla
-                      _ENDIF
-                    _ELSE
-                      pha
-                      lda SndChannel+5,y
-                      _IFEQ
-                        pla
-                        sta SndChannel+4,y
-                        rts
-                      _ENDIF
-                      pla
-                    _ENDIF
-                  _ELSE
-                    adc SndChannel+4,y
-                    _IFPL
-                      pha
-                      lda SndChannel+5,y
-                      cmp #6
-                      _IFNE
-                        ina
-                        sta SndChannel+5,y
-                        pla
-                        eor #128
-                      _ELSE
-                        lda SndChannel+4,y
-                        _IFMI
-                          pla
-                          rts
-                        _ENDIF
-                        pla
-                      _ENDIF
-                    _ELSE
-                      pha
-                      lda SndChannel+5,y
-                      cmp #6
-                      _IFEQ
-                        lda SndChannel+4,y
-                        _IFPL
-                          pla
-                          rts
-                        _ENDIF
-                      _ENDIF
-                      pla
-                    _ENDIF
-                  _ENDIF
-                  sta SndChannel+4,y
-
-                  ora #1 ;; if already -1 -> no effect
-                rts
-
-SndChangeWave:
-                tay
-                ;; Ab hier x Kanal 0-3, y Environment
-                _IFMI
-wav99:               rts
-                _ENDIF
-                lda SndNotePlaying,x
-                beq wav99
-
-
-                lda SndEnvWavePtrLo,y
-                sta SndEnvPtr
-                lda SndEnvWavePtrHi,y
-                sta SndEnvPtr+1
-
-                dec SndEnvWaveCnt,x
-                _IFMI
-                  dec SndEnvWaveParts,x
-                  _IFMI
-                    lda SndEnvWaveLoop,x
-                    _IFNE
-                      tay
-                      ;; Ab hier x Kanal 0-3, y Offset im Environment
-                      lda SndEnvWaveParts2,x
-                      sta SndEnvWaveParts,x
-                      bra wav1v
-                    _ELSE
-                      tya
-                      ora #$80 ;; beende Env
-                      sta SndEnvWave,x
-                    _ENDIF
-                  _ELSE
-                    ldy SndEnvWaveOff,x
-                ;; Ab hier x Kanal 0-3, y Offset im  Environment
-wav1v:                 lda (SndEnvPtr),y
-                    sta SndEnvWaveCnt,x
-                  phx
-                  lda SndOffsets,x
-                  tax
-                ;; Ab hier x Kanal (0-3)*8, y Offset im  Environment
-
-                    iny
-                    lda (SndEnvPtr),y
-                    sta SndChannel+3,x  ; Shift LO
-                    iny
-                    lda (SndEnvPtr),y
-                    sta SndChannel+7,x   ; Shift HI
-                    iny
-                    lda (SndEnvPtr),y
-                    sta SndChannel+1,x  ; Feedback
-                    iny
-                    tya
-                    ply
-                ;; Ab hier x Kanal (0-3)*8,  y Kanal 0-3
-                    sta SndEnvWaveOff,y
-                  lda #$FF ; =-1 ;; stop timer to set new values...
-                  sta SndChannel+2,x
-                  _ENDIF
-                _ENDIF
-                rts
-
-
-SndSetValues:
-                ldx #4-1
-set0:                ldy SndOffsets,x
-                  lda SndChannel+2,y
-                  _IFNE                        ; flag == 0 => don`t set
-
-            bit #$80
-                    _IFNE                       ;
-                      lda #0
-                      sta $fd25,y                 ; stop sound timer
-
-                      lda SndChannel+3,y
-                      sta $fd23,y                 ; shifter 1
-                      ;;lda $fd27,y
-                      ;;and #$0F
-                      ;;ora SndChannel+7,y          ; shifter 2
-                      lda SndChannel+7,y          ; shifter 2
-                      sta $fd27,y
-                      lda SndChannel+1,y
-                      sta $fd21,y                 ; feedback
-                    _ENDIF
-
-                    lda SndChannel,y
-                    sta $fd20,y                 ; volume
-                    lda SndChannel+2,y
-            bit #$80
-                    _IFNE                       ;
-                    lda SndChannel+4,y
-                    sta $fd24,y                 ; reload
-                    lda SndChannel+5,y
-                    ora #%00011000 ;;; #%01011000
-            ;; and #%00111111
-                    sta $fd25,y                 ; re-enable timer
-                    _ENDIF
-
-                    lda #0
-                    sta SndChannel+2,y          ; clear flag
-                _ENDIF
-
-                dex
-        _IFPL
-            jmp set0
-        _ENDIF
-        rts
-
-_lynx_snd_play:
-        sta ptr1
-        stx ptr1+1
-        jsr popa
-        tax
-        lda ptr1
-        ldy ptr1+1
-        php
-        pha
-        lda SndActive,x
-        _IFNE
-                dec SndReqStop,x
-                lda #1
-                sta SndDelay,x
-start0:         lda SndActive,x
-                bne start0
-        _ENDIF
-        bra start1
-SndStartSoundx:
-        php
-        pha
-start1:
-        sei
-        pla
-        sta SndPtrLo,x
-        tya
-        sta SndPtrHi,x
-        lda #1
-        sta SndDelay,x
-        stz SndEnvVol,x
-        stz SndEnvFrq,x
-        stz SndEnvWave,x
-        sta SndActive,x
-        stz SndReqStop,x
-        plp
-        rts
-SndStartSound2:
-        pha
-        lda SndActive,x         ; check default
-        beq start20                  ; inactive => ok
-        phx
-        ldx #3                  ; search free channel
-start21:
-        lda SndActive,x
-        beq start22                ; found =>
-        dex
-        bpl start21
-        plx                     ; not found
-        dec SndReqStop,x        ; stop default-channel
-        lda #1
-        sta SndDelay,x
-start23:
-        lda SndActive,x
-        bne start23
-        bra start20
-start22:
-        pla             ; clear stack
-start20:
-        pla
-        phx
-        jsr SndStartSoundx      ; launch new sound
-        plx
-        rts
-
-_lynx_snd_stop:
-        ldx #3
-        lda SndActive,x
-        _IFNE
-stop0:          dec SndReqStop,x
-                lda #1
-                sta SndDelay,x
-stop1:          lda SndActive,x
-                bne stop1
-        _ENDIF
-        dex
-        bpl stop0
-        rts
-
-_lynx_snd_stop_channel:
-        tax
-        lda SndActive,x
-        _IFNE
-                dec SndReqStop,x
-                lda #1
-                sta SndDelay,x
-stopc1:         lda SndActive,x
-                bne stopc1
-        _ENDIF
-        rts
-
-_lynx_snd_active:
-        ldx #3
-        lda #0
-act0:   ldy SndActive,x
-        _IFNE
-                ora SndMask,x
-        _ENDIF
-        dex
-        bpl act0
-        rts
-
-_lynx_snd_pause:
-        php
-        sei
-        lda STIMCTLA
-        sta SndPauseOff1+1
-        stz STIMCTLA
-        lda MSTEREO
-        sta SndPauseOff2+1
-        lda #$ff
-        sta MSTEREO
-        lda #$18
-        trb AUD0CTLA
-        trb AUD1CTLA
-        trb AUD2CTLA
-        trb AUD3CTLA
-        plp
-        rts
-
-_lynx_snd_continue:
-        php
-        sei
-SndPauseOff1:
-        lda #0 ; Selbsmodifizierter Code!!!
-        sta STIMCTLA
-SndPauseOff2:
-        lda #0 ; Selbsmodifizierter Code!!!
-        sta MSTEREO
-
-        lda #$18
-        tsb AUD0CTLA
-        tsb AUD1CTLA
-        tsb AUD2CTLA
-        tsb AUD3CTLA
-
-        plp
-        rts
-
-        .rodata
-
-SndMask:
-        .byte 1,2,4,8
-
-SndPrescaler:
-        .byte $00,$06,$06,$06,$06,$05,$05,$05,$05,$05,$05,$05,$04,$04,$04,$04
-        .byte $04,$04,$04,$04,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$02,$02
-        .byte $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$01,$01,$01,$01,$01
-        .byte $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00
-        .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
-        .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
-        .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
-        .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
-
-SndReload:
-        .byte $00,$9A,$96,$8F,$86,$FA,$E5,$D1,$BE,$AC,$9C,$8D,$00,$E8,$D3,$C0
-        .byte $AF,$A0,$93,$87,$FA,$E7,$D6,$C6,$B8,$AC,$A1,$96,$8D,$84,$FA,$EB
-        .byte $DE,$D2,$C7,$BC,$B3,$AA,$A1,$9A,$93,$8C,$86,$00,$F5,$EB,$E1,$D8
-        .byte $CF,$C7,$C0,$B9,$B2,$AB,$A5,$A0,$9A,$95,$90,$8B,$87,$82,$FD,$F5
-        .byte $EE,$E7,$E0,$D9,$D3,$CD,$C8,$C2,$BD,$B8,$B3,$AE,$AA,$A5,$A1,$9D
-        .byte $99,$96,$92,$8F,$8B,$88,$85,$82,$7F,$7C,$79,$77,$74,$72,$6F,$6D
-        .byte $6B,$69,$67,$64,$63,$61,$5F,$5D,$5B,$59,$58,$56,$55,$53,$51,$50
-        .byte $4F,$4D,$4C,$4B,$49,$48,$47,$46,$44,$43,$42,$41,$40,$3F,$3E,$3D
-
-
-
diff --git a/libsrc/lynx/mainargs.s b/libsrc/lynx/mainargs.s
deleted file mode 100644 (file)
index 8ab1b7c..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 2004-10-08
-;
-; Setup arguments for main
-;
-
-
-        .constructor    initmainargs, 24
-        .import         __argc, __argv
-
-
-;---------------------------------------------------------------------------
-; Get possible command-line arguments. Goes into the special INIT segment,
-; which may be reused after the startup code is run
-
-.segment        "INIT"
-
-.proc   initmainargs
-
-        rts
-
-.endproc
-
-
diff --git a/libsrc/lynx/open.s b/libsrc/lynx/open.s
deleted file mode 100644 (file)
index c48b8eb..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-;
-; Karri Kaksonen, 2010
-;
-; This function reads the directory entry for file "name".
-;
-; The name is actually plain ASCII string starting from
-; "0", "1", up to "4095" which is the largest file number we can handle.
-;
-; open() does not take part in what kind of cart we have. If it is RAM
-; you may also be able to write into it. Therefore we allow both reads
-; and writes in this routine.
-;
-; int open(const char *name, int flags, ...)
-;
-; As helper functions we also provide.
-; void openn(int fileno)
-;
-        .importzp       sreg, tmp3
-        .macpack        longbranch
-        .import         _atoi
-        .import         _read
-        .import         _lseek
-        .import         addysp,popax,pushax,decsp6,pusha0,pusheax,ldaxysp
-        .import         aslax3,axlong,tosaddeax,steaxysp,stax0sp,incsp8
-        .import         ldax0sp
-        .import         lynxskip0, lynxblock
-        .importzp       _FileEntry
-        .importzp       _FileStartBlock
-        .importzp       _FileCurrBlock
-        .importzp       _FileBlockOffset
-        .import         __STARTOFDIRECTORY__
-        .export         _open
-        .export         _openn
-
-        .include        "errno.inc"
-        .include        "fcntl.inc"
-
-.segment        "DATA"
-
-_startofdirectory:
-        .dword  __STARTOFDIRECTORY__
-
-; ---------------------------------------------------------------
-; int __near__ open (__near__ const unsigned char*, int)
-; ---------------------------------------------------------------
-
-.segment        "CODE"
-
-.proc   _open
-
-.segment        "CODE"
-
-        dey
-        dey
-        dey
-        dey
-        beq     parmok
-        jsr     addysp
-
-parmok: jsr     popax
-        sta     tmp3
-        and     #(O_RDWR | O_CREAT)
-        cmp     #O_RDONLY
-        beq     flagsok
-        cmp     #(O_WRONLY | O_CREAT)
-        beq     flagsok
-        jsr     popax
-        lda     #EINVAL
-        jmp     __directerrno
-
-flagsok:
-        jsr     popax
-        jsr     _atoi
-        jsr     _openn
-        ldx     #$00
-        lda     #$01
-        stx     __oserror
-        rts
-
-.endproc
-
-; ---------------------------------------------------------------
-; void __near__ __fastcall__ openn (int)
-; ---------------------------------------------------------------
-
-.segment        "CODE"
-
-.proc   _openn: near
-
-.segment        "CODE"
-
-        jsr     pushax
-        jsr     decsp6
-        lda     #$01
-        jsr     pusha0
-        lda     _startofdirectory+3
-        sta     sreg+1
-        lda     _startofdirectory+2
-        sta     sreg
-        ldx     _startofdirectory+1
-        lda     _startofdirectory
-        jsr     pusheax
-        ldy     #$0D
-        jsr     ldaxysp
-        jsr     aslax3
-        jsr     axlong
-        jsr     tosaddeax
-        jsr     pusheax
-        ldx     #$00
-        txa
-        jsr     _lseek
-        ldy     #$02
-        jsr     steaxysp
-        lda     #$01
-        jsr     pusha0
-        lda     #<_FileEntry
-        ldx     #>_FileEntry
-        jsr     pushax
-        ldx     #$00
-        lda     #$08
-        jsr     _read
-        lda     _FileStartBlock
-        sta     _FileCurrBlock
-        jsr     lynxblock
-        lda     _FileBlockOffset+1
-        eor     #$FF
-        tay
-        lda     _FileBlockOffset
-        eor     #$FF
-        tax
-        jsr     lynxskip0
-        jsr     stax0sp
-        jmp     incsp8
-
-.endproc
-
diff --git a/libsrc/lynx/oserror.s b/libsrc/lynx/oserror.s
deleted file mode 100644 (file)
index 5570a3b..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Karri Kaksonen, 2010
-;
-; int __fastcall__ _osmaperrno (unsigned char oserror);
-; /* Map a system specific error into a system independent code */
-;
-
-        .include        "errno.inc"
-
-.code
-
-__osmaperrno:
-        rts
-
diff --git a/libsrc/lynx/read.s b/libsrc/lynx/read.s
deleted file mode 100644 (file)
index d6341af..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-;
-; Karri Kaksonen, 2010
-;
-; This function reads count bytes from the place where the address counter is.
-; Use lseek to place the address counter where you want to read from.
-;
-; The file descriptor is ignored in this implementation. The read operation
-; reads bytes from a raw cart and does not understand the concept of files.
-; So if you read over the end of file you get data from the next file.
-;
-; The count-parameter is positive (Atari style).
-;
-; int __fastcall__ read(int fd,void *buf,int count)
-;
-        .importzp       _FileDestPtr
-        .import         lynxread0
-        .import         pushax,ldaxysp,ldax0sp,incsp6
-        .export         _read
-
-.segment        "CODE"
-
-.proc   _read: near
-
-.segment        "CODE"
-
-        jsr     pushax
-        ldy     #$03
-        jsr     ldaxysp
-        sta     _FileDestPtr
-        stx     _FileDestPtr+1
-        jsr     ldax0sp
-        pha
-        txa
-        eor     #$FF
-        tay
-        pla
-        eor     #$FF
-        tax
-        jsr     lynxread0
-        jsr     ldax0sp
-        jmp     incsp6
-
-.endproc
-
diff --git a/libsrc/lynx/ser/lynx-comlynx.s b/libsrc/lynx/ser/lynx-comlynx.s
deleted file mode 100644 (file)
index 1fd24ad..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-;
-; Serial driver for the Atari Lynx ComLynx port.
-;
-; Karri Kaksonen, 17.09.2009
-;
-
-        .include        "lynx.inc"
-        .include        "zeropage.inc"
-        .include        "ser-kernel.inc"
-        .include        "ser-error.inc"
-
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _lynx_comlynx_ser
-
-        ; Driver signature
-        .byte   $73, $65, $72           ; "ser"
-        .byte   SER_API_VERSION         ; Serial API version number
-
-        ; Library reference
-        .addr   $0000
-
-        ; Jump table
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   OPEN
-        .addr   CLOSE
-        .addr   GET
-        .addr   PUT
-        .addr   STATUS
-        .addr   IOCTL
-        .addr   IRQ
-
-;----------------------------------------------------------------------------
-; Global variables
-;
-
-        .bss
-
-TxBuffer:       .res    256
-RxBuffer:       .res    256
-RxPtrIn:        .res    1
-RxPtrOut:       .res    1
-TxPtrIn:        .res    1
-TxPtrOut:       .res    1
-contrl:         .res    1
-SerialStat:     .res    1
-TxDone:         .res    1
-
-        .code
-
-;----------------------------------------------------------------------------
-; INSTALL: Is called after the driver is loaded into memory.
-;
-; Must return an SER_ERR_xx code in a/x.
-
-INSTALL:
-        ; Set up IRQ vector ?
-
-;----------------------------------------------------------------------------
-; UNINSTALL: Is called before the driver is removed from memory.
-; No return code required (the driver is removed from memory on return).
-;
-
-UNINSTALL:
-
-;----------------------------------------------------------------------------
-; CLOSE: Close the port and disable interrupts. Called without parameters.
-; Must return an SER_ERR_xx code in a/x.
-
-CLOSE:
-        ; Disable interrupts
-        ; Done, return an error code
-        lda     #<SER_ERR_OK
-        ldx     #>SER_ERR_OK
-        rts
-
-;----------------------------------------------------------------------------
-; OPEN: A pointer to a ser_params structure is passed in ptr1.
-;
-; The Lynx has only two correct serial data formats:
-; 8 bits, parity mark, 1 stop bit
-; 8 bits, parity space, 1 stop bit
-;
-; It also has two wrong formats;
-; 8 bits, even parity, 1 stop bit
-; 8 bits, odd parity, 1 stop bit
-;
-; Unfortunately the parity bit includes itself in the calculation making
-; parity not compatible with the rest of the world.
-;
-; We can only specify a few baud rates.
-; Lynx has two non-standard speeds 31250 and 62500 which are
-; frequently used in games.
-;
-; The receiver will always read the parity and report parity errors.
-;
-; Must return an SER_ERR_xx code in a/x.
-
-OPEN:   
-        stz     RxPtrIn
-        stz     RxPtrOut
-        stz     TxPtrIn
-        stz     TxPtrOut
-
-        ; clock = 8 * 15625
-        lda     #%00011000
-        sta     TIM4CTLA
-        ldy     #SER_PARAMS::BAUDRATE
-        lda     (ptr1),y
-
-        ldx     #1
-        cmp     #SER_BAUD_62500
-        beq     setbaudrate
-
-        ldx     #2
-        cmp     #SER_BAUD_31250
-        beq     setbaudrate
-
-        ldx     #12
-        cmp     #SER_BAUD_9600
-        beq     setbaudrate
-
-        ldx     #25
-        cmp     #SER_BAUD_4800
-        beq     setbaudrate
-
-        ldx     #51
-        cmp     #SER_BAUD_2400
-        beq     setbaudrate
-
-        ldx     #103
-        cmp     #SER_BAUD_1200
-        beq     setbaudrate
-
-        ldx     #207
-        cmp     #SER_BAUD_600
-        beq     setbaudrate
-
-        ; clock = 6 * 15625
-        ldx     #%00011010
-        stx     TIM4CTLA
-
-        ldx     #12
-        cmp     #SER_BAUD_7200
-        beq     setbaudrate
-
-        ldx     #25
-        cmp     #SER_BAUD_3600
-        beq     setbaudrate
-
-        ldx     #207
-        stx     TIM4BKUP
-
-        ; clock = 4 * 15625
-        ldx     #%00011100
-        cmp     #SER_BAUD_300
-        beq     setprescaler
-
-        ; clock = 6 * 15625
-        ldx     #%00011110
-        cmp     #SER_BAUD_150
-        beq     setprescaler
-
-        ; clock = 1 * 15625
-        ldx     #%00011111
-        stx     TIM4CTLA
-        cmp     #SER_BAUD_75
-        beq     baudsuccess
-
-        ldx     #141
-        cmp     #SER_BAUD_110
-        beq     setbaudrate
-
-        ; clock = 2 * 15625
-        ldx     #%00011010
-        stx     TIM4CTLA
-        ldx     #68
-        cmp     #SER_BAUD_1800
-        beq     setbaudrate
-
-        ; clock = 6 * 15625
-        ldx     #%00011110
-        stx     TIM4CTLA
-        ldx     #231
-        cmp     #SER_BAUD_134_5
-        beq     setbaudrate
-
-        lda     #<SER_ERR_BAUD_UNAVAIL
-        ldx     #>SER_ERR_BAUD_UNAVAIL
-        rts
-setprescaler:
-        stx     TIM4CTLA
-        bra     baudsuccess
-setbaudrate:
-        stx     TIM4BKUP
-baudsuccess:
-        ldx     #TxOpenColl|ParEven
-        stx     contrl
-        ldy     #SER_PARAMS::DATABITS   ; Databits
-        lda     (ptr1),y
-        cmp     #SER_BITS_8
-        bne     invparameter
-        ldy     #SER_PARAMS::STOPBITS   ; Stopbits
-        lda     (ptr1),y
-        cmp     #SER_STOP_1
-        bne     invparameter
-        ldy     #SER_PARAMS::PARITY     ; Parity
-        lda     (ptr1),y
-        cmp     #SER_PAR_NONE
-        beq     invparameter
-        cmp     #SER_PAR_MARK
-        beq     checkhs
-        cmp     #SER_PAR_SPACE
-        bne     @L0
-        ldx     #TxOpenColl
-        stx     contrl
-        bra     checkhs
-@L0:
-        ldx     #TxParEnable|TxOpenColl|ParEven
-        stx     contrl
-        cmp     #SER_PAR_EVEN
-        beq     checkhs
-        ldx     #TxParEnable|TxOpenColl
-        stx     contrl
-checkhs:
-        ldx     contrl
-        stx     SERCTL
-        ldy     #SER_PARAMS::HANDSHAKE  ; Handshake
-        lda     (ptr1),y
-        cmp     #SER_HS_NONE
-        bne     invparameter
-        lda     SERDAT
-        lda     contrl
-        ora     #RxIntEnable|ResetErr
-        sta     SERCTL
-        lda     #<SER_ERR_OK
-        ldx     #>SER_ERR_OK
-        rts
-invparameter:
-        lda     #<SER_ERR_INIT_FAILED
-        ldx     #>SER_ERR_INIT_FAILED
-        rts
-
-;----------------------------------------------------------------------------
-; GET: Will fetch a character from the receive buffer and store it into the
-; variable pointed to by ptr1. If no data is available, SER_ERR_NO_DATA is
-; returned.
-
-GET:
-        lda     RxPtrIn
-        cmp     RxPtrOut
-        bne     GetByte
-        lda     #<SER_ERR_NO_DATA
-        ldx     #>SER_ERR_NO_DATA
-        rts
-GetByte:
-        ldy     RxPtrOut
-        lda     RxBuffer,y      
-        inc     RxPtrOut
-        ldx     #$00
-        sta     (ptr1,x)
-        txa                     ; Return code = 0
-        rts
-
-;----------------------------------------------------------------------------
-; PUT: Output character in A.
-; Must return an SER_ERR_xx code in a/x.
-
-PUT:
-        tax
-        lda     TxPtrIn
-        ina
-        cmp     TxPtrOut
-        bne     PutByte
-        lda     #<SER_ERR_OVERFLOW
-        ldx     #>SER_ERR_OVERFLOW
-        rts
-PutByte:
-        ldy     TxPtrIn
-        txa
-        sta     TxBuffer,y
-        inc     TxPtrIn
-
-        bit     TxDone
-        bmi     @L1
-        php
-        sei
-        lda     contrl
-        ora     #TxIntEnable|ResetErr
-        sta     SERCTL       ; Allow TX-IRQ to hang RX-IRQ
-        sta     TxDone
-        plp
-@L1:
-        lda     #<SER_ERR_OK
-        tax
-        rts
-
-;----------------------------------------------------------------------------
-; STATUS: Return the status in the variable pointed to by ptr1.
-; Must return an SER_ERR_xx code in a/x.
-
-STATUS:
-        ldy     SerialStat
-        ldx     #$00
-        sta     (ptr1,x)
-        txa                     ; Return code = 0
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
-; specific data in ptr1, and the ioctl code in A.
-; Must return an SER_ERR_xx code in a/x.
-
-IOCTL:
-        lda     #<SER_ERR_INV_IOCTL
-        ldx     #>SER_ERR_INV_IOCTL
-        rts
-
-;----------------------------------------------------------------------------
-; IRQ: Called from the builtin runtime IRQ handler as a subroutine. All
-; registers are already saved, no parameters are passed, but the carry flag
-; is clear on entry. The routine must return with carry set if the interrupt
-; was handled, otherwise with carry clear.
-;
-; Both the Tx and Rx interrupts are level sensitive instead of edge sensitive.
-; Due to this bug you have to disable the interrupt before clearing it.
-
-IRQ:
-        lda     INTSET          ; Poll all pending interrupts
-        and     #SERIAL_INTERRUPT
-        bne     @L0
-        clc
-        rts
-@L0:
-        bit     TxDone
-        bmi     @tx_irq     ; Transmit in progress
-        ldx     SERDAT
-        lda     SERCTL
-        and     #RxParityErr|RxOverrun|RxFrameErr|RxBreak
-        beq     @rx_irq
-        tsb     SerialStat  ; Save error condition
-        bit     #RxBreak
-        beq     @noBreak
-        stz     TxPtrIn     ; Break received - drop buffers
-        stz     TxPtrOut
-        stz     RxPtrIn
-        stz     RxPtrOut
-@noBreak:
-        lda     contrl
-        ora     #RxIntEnable|ResetErr
-        sta     SERCTL
-        lda     #$10
-        sta     INTRST
-        bra     @IRQexit
-@rx_irq:
-        lda     contrl
-        ora     #RxIntEnable|ResetErr
-        sta     SERCTL
-        txa
-        ldx     RxPtrIn
-        sta     RxBuffer,x
-        txa
-        inx
-
-@cont0:
-        cpx     RxPtrOut
-        beq     @1
-        stx     RxPtrIn
-        lda     #SERIAL_INTERRUPT
-        sta     INTRST
-        bra     @IRQexit
-
-@1:
-        sta     RxPtrIn
-        lda     #$80
-        tsb     SerialStat
-@tx_irq:
-        ldx     TxPtrOut    ; Has all bytes been sent?
-        cpx     TxPtrIn
-        beq     @allSent
-
-        lda     TxBuffer,x  ; Send next byte
-        sta     SERDAT
-        inc     TxPtrOut
-
-@exit1:
-        lda     contrl
-        ora     #TxIntEnable|ResetErr
-        sta     SERCTL
-        lda     #SERIAL_INTERRUPT
-        sta     INTRST
-        bra     @IRQexit
-
-@allSent:
-        lda     SERCTL       ; All bytes sent
-        bit     #TxEmpty
-        beq     @exit1
-        bvs     @exit1
-        stz     TxDone
-        lda     contrl
-        ora     #RxIntEnable|ResetErr
-        sta     SERCTL
-
-        lda     #SERIAL_INTERRUPT
-        sta     INTRST
-@IRQexit:
-        clc
-        rts
-
diff --git a/libsrc/lynx/sysuname.s b/libsrc/lynx/sysuname.s
deleted file mode 100644 (file)
index 879297e..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;
-; Ullrich von Bassewitz, 2004-10-08
-;
-; unsigned char __fastcall__ _sysuname (struct utsname* buf);
-;
-
-        .export         __sysuname, utsdata
-
-        .import         utscopy
-
-        __sysuname = utscopy
-
-;--------------------------------------------------------------------------
-; Data. We define a fixed utsname struct here and just copy it.
-
-.rodata
-
-utsdata:
-        ; sysname
-        .asciiz         "cc65"
-
-        ; nodename
-        .asciiz         ""
-
-        ; release
-        .byte           ((.VERSION >> 8) & $0F) + '0'
-        .byte           '.'
-        .byte           ((.VERSION >> 4) & $0F) + '0'
-        .byte           $00
-
-        ; version
-        .byte           (.VERSION & $0F) + '0'
-        .byte           $00
-
-        ; machine
-        .asciiz         "LYNX"
-
-
-
diff --git a/libsrc/lynx/tgi/lynx-160-102-16.s b/libsrc/lynx/tgi/lynx-160-102-16.s
deleted file mode 100644 (file)
index e665963..0000000
+++ /dev/null
@@ -1,1063 +0,0 @@
-;
-; Graphics driver for the 160x102x16 mode on the Lynx.
-;
-; All the drawing functions are simply done by sprites as the sprite
-; engine is the only way to do fast graphics on a Lynx.
-;
-; This code is written by Karri Kaksonen, 2004 for the cc65 compiler.
-;
-
-        .include        "zeropage.inc"
-        .include        "../extzp.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .include        "lynx.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table and constants.
-
-        module_header   _lynx_160_102_16_tgi
-
-; First part of the header is a structure that has a magic and defines the
-; capabilities of the driver
-
-        .byte   $74, $67, $69           ; "tgi"
-        .byte   TGI_API_VERSION         ; TGI API version number
-        .addr   $0000                   ; Library reference
-        .word   160                     ; X resolution
-        .word   102                     ; Y resolution
-        .byte   16                      ; Number of drawing colors
-        .byte   2                       ; Number of screens available
-        .byte   8                       ; System font X size
-        .byte   8                       ; System font Y size
-        .word   $0100                   ; Aspect ratio (square pixel LCD)
-        .byte   TGI_BM_FONT_FINESCALE   ; TGI driver flags
-
-; Next comes the jump table. Currently all entries must be valid and may point
-; to an RTS for test versions (function not implemented). A future version may
-; allow for emulation: In this case the vector will be zero. Emulation means
-; that the graphics kernel will emulate the function by using lower level
-; primitives - for example ploting a line by using calls to SETPIXEL.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   INIT
-        .addr   DONE
-        .addr   GETERROR
-        .addr   CONTROL
-        .addr   CLEAR
-        .addr   SETVIEWPAGE
-        .addr   SETDRAWPAGE
-        .addr   SETCOLOR
-        .addr   SETPALETTE
-        .addr   GETPALETTE
-        .addr   GETDEFPALETTE
-        .addr   SETPIXEL
-        .addr   GETPIXEL
-        .addr   LINE
-        .addr   BAR
-        .addr   TEXTSTYLE
-        .addr   OUTTEXT
-        .addr   IRQ
-
-
-; ------------------------------------------------------------------------
-; Data.
-
-; Variables mapped to the zero page segment variables. Some of these are
-; used for passing parameters to the driver.
-
-X1              := ptr1
-Y1              := ptr2
-X2              := ptr3
-Y2              := ptr4
-
-STRPTR          := ptr3
-FONTOFF         := ptr4
-STROFF          := tmp3
-STRLEN          := tmp4
-
-; Absolute variables used in the code
-
-.bss
-
-ERROR:          .res    1       ; Error code
-
-DRAWINDEX:      .res    1       ; Pen to use for drawing
-VIEWPAGEL:      .res    1
-VIEWPAGEH:      .res    1
-DRAWPAGEL:      .res    1
-DRAWPAGEH:      .res    1
-
-; Text output stuff
-TEXTMAGX:       .res    1
-TEXTMAGY:       .res    1
-TEXTDIR:        .res    1
-BGINDEX:        .res    1       ; Pen to use for text background
-
-; Double buffer IRQ stuff
-DRAWPAGE:       .res    1
-SWAPREQUEST:    .res    1
-
-text_bitmap:    .res    8*(1+20+1)+1
-; 8 rows with (one offset-byte plus 20 character bytes plus one fill-byte) plus one 0-offset-byte
-
-; Constants and tables
-
-.rodata
-
-DEFPALETTE:     .byte   >$011
-                .byte   >$34d
-                .byte   >$9af
-                .byte   >$9b8
-                .byte   >$777
-                .byte   >$335
-                .byte   >$448
-                .byte   >$75e
-                .byte   >$d5f
-                .byte   >$c53
-                .byte   >$822
-                .byte   >$223
-                .byte   >$484
-                .byte   >$8e5
-                .byte   >$cf5
-                .byte   >$fff
-                .byte   <$011
-                .byte   <$34d
-                .byte   <$9af
-                .byte   <$9b8
-                .byte   <$777
-                .byte   <$335
-                .byte   <$448
-                .byte   <$75e
-                .byte   <$d5f
-                .byte   <$c53
-                .byte   <$822
-                .byte   <$223
-                .byte   <$484
-                .byte   <$8e5
-                .byte   <$cf5
-                .byte   <$fff
-
-PALETTESIZE     = * - DEFPALETTE
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. May
-; initialize anything that has to be done just once. Is probably empty
-; most of the time.
-;
-; Must set an error code: NO
-;
-
-INSTALL:
-        lda     #1
-        sta     TEXTMAGX
-        sta     TEXTMAGY
-        stz     BGINDEX
-        stz     DRAWPAGE
-        stz     SWAPREQUEST
-        rts
-
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory. May
-; clean up anything done by INSTALL but is probably empty most of the time.
-;
-; Must set an error code: NO
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; INIT: Changes an already installed device from text mode to graphics
-; mode.
-; Note that INIT/DONE may be called multiple times while the driver
-; is loaded, while INSTALL is only called once, so any code that is needed
-; to initializes variables and so on must go here. Setting palette and
-; clearing the screen is not needed because this is called by the graphics
-; kernel later.
-; The graphics kernel will never call INIT when a graphics mode is already
-; active, so there is no need to protect against that.
-;
-; Must set an error code: YES
-;
-
-INIT:
-; Enable interrupts for VBL
-        lda     #$80
-        tsb     VTIMCTLA
-; Set up collision buffer to $A058
-        lda     #$58
-        sta     COLLBASL
-        lda     #$A0
-        sta     COLLBASH
-; Put collision index before sprite data
-        lda     #$FF
-        sta     COLLOFFL
-        lda     #$FF
-        sta     COLLOFFH
-; Done, reset the error code
-        lda     #TGI_ERR_OK
-        sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; DONE: Will be called to switch the graphics device back into text mode.
-; The graphics kernel will never call DONE when no graphics mode is active,
-; so there is no need to protect against that.
-;
-; Must set an error code: NO
-;
-
-DONE:
-        rts
-
-; ------------------------------------------------------------------------
-; GETERROR: Return the error code in A and clear it.
-
-GETERROR:
-        ldx     #TGI_ERR_OK
-        lda     ERROR
-        stx     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; CONTROL: Platform/driver specific entry point.
-;
-; Must set an error code: YES
-;
-; The TGI lacks a way to draw sprites. As that functionality is vital to
-; Lynx games we borrow this CONTROL function to implement the still
-; missing tgi_draw_sprite funtion. To use this in your C-program
-; do a #define tgi_draw_sprite(spr) tgi_ioctl(0, spr)
-;
-; To do a flip-screen call tgi_ioctl(1, 0)
-;
-; To set the background index for text outputs call tgi_ioctl(2, bgindex)
-;
-; To set the frame rate for the display hardware call tgi_ioctl(3, rate)
-;
-; To check if the drawing engine is busy with the previous swap you can
-; call tgi_ioctl(4, 0). It returns 0 if idle and 1 if busy
-;
-; To update displays you can call tgi_ioctl(4, 1) it will wait for the
-; next VBL interrupt and swap draw and view buffers.
-;
-; Activate or deactivate collision detection by calling tgi_ioctl(5, 0/1).
-
-CONTROL:
-        pha                     ; Almost all control routines succeed
-        lda     #TGI_ERR_OK
-        sta     ERROR
-        pla
-
-        cmp     #5
-        bne     ControlSwap
-        lda     ptr1            ; Activate/deactivate collision detection
-        bne     @L0
-        lda     #%00000001      ; tgi_clear does not erase collision buffer
-        sta     cls_sprite
-        lda     #%00100000
-        sta     cls_sprite+2
-        lda     __sprsys
-        ora     #$20
-        bra     @L1
-@L0:    lda     #%00000000      ; tgi_clear erases collision buffer
-        sta     cls_sprite
-        sta     cls_sprite+2
-        lda     __sprsys
-        and     #$df
-@L1:    sta     __sprsys
-        sta     SPRSYS
-        rts
-
-ControlSwap:
-        cmp     #4
-        bne     ControlFramerate
-
-        lda     ptr1            ; Swap request
-        bne     @L0
-        lda     SWAPREQUEST
-        rts
-@L0:    sta     SWAPREQUEST
-        rts
-
-ControlFramerate:
-        cmp     #3
-        bne     ControlTextBG
-
-        lda     ptr1
-        cmp     #75             ; Set framerate
-        beq     rate75
-        cmp     #60
-        beq     rate60
-        cmp     #50
-        beq     rate50
-        lda     #TGI_ERR_INV_ARG
-        sta     ERROR
-        rts
-rate50: lda     #$bd            ; 50 Hz
-        ldx     #$31
-        bra     setRate
-rate60: lda     #$9e            ; 60 Hz
-        ldx     #$29
-        bra     setRate
-rate75: lda     #$7e            ; 75 Hz
-        ldx     #$20
-setRate:
-        sta     HTIMBKUP
-        stx     PBKUP
-        rts
-
-ControlTextBG:
-        cmp     #2
-        bne     ControlFlipScreen
-
-        lda     ptr1            ; Set text background color
-        sta     BGINDEX
-        rts
-
-ControlFlipScreen:
-        cmp     #1
-        bne     ControlDrawSprite
-
-        lda     __sprsys        ; Flip screen
-        eor     #8
-        sta     __sprsys
-        sta     SPRSYS
-        lda     __viddma
-        eor     #2
-        sta     __viddma
-        sta     DISPCTL
-        ldy     VIEWPAGEL
-        ldx     VIEWPAGEH
-        and     #2
-        beq     NotFlipped
-        clc
-        tya
-        adc     #<8159
-        tay
-        txa
-        adc     #>8159
-        tax
-NotFlipped:
-        sty     DISPADRL
-        stx     DISPADRH
-        rts
-
-ControlDrawSprite:
-        lda     ptr1            ; Get the sprite address
-        ldx     ptr1+1
-
-draw_sprite:                    ; Draw it in render buffer
-        sta     SCBNEXTL
-        stx     SCBNEXTH
-        lda     DRAWPAGEL
-        ldx     DRAWPAGEH
-        sta     VIDBASL
-        stx     VIDBASH
-        lda     #1
-        sta     SPRGO
-        stz     SDONEACK
-@L0:    stz     CPUSLEEP
-        lda     SPRSYS
-        lsr
-        bcs     @L0
-        stz     SDONEACK
-        lda     #TGI_ERR_OK
-        sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; CLEAR: Clears the screen.
-;
-; Must set an error code: NO
-;
-
-.rodata
-pixel_bitmap:
-        .byte   3,%10000100,%00000000, $0       ; A pixel bitmap
-.data
-cls_coll:
-        .byte   0
-cls_sprite:
-        .byte   %00000001                       ; A pixel sprite
-        .byte   %00010000
-        .byte   %00100000
-        .addr   0,pixel_bitmap
-        .word   0
-        .word   0
-        .word   $a000                           ; 160
-        .word   $6600                           ; 102
-        .byte   $00
-
-.code
-CLEAR:  lda     #<cls_sprite
-        ldx     #>cls_sprite
-        bra     draw_sprite
-
-; ------------------------------------------------------------------------
-; SETVIEWPAGE: Set the visible page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-;
-; Must set an error code: NO (will only be called if page ok)
-;
-; It is a good idea to call this function during the vertical blanking
-; period. If you call it in the middle of the screen update then half of
-; the drawn frame will be from the old buffer and the other half is
-; from the new buffer. This is usually noticed by the user.
-
-SETVIEWPAGE:
-        cmp     #1
-        beq     @L1             ; page == maxpages-1
-        ldy     #<$e018         ; page 0
-        ldx     #>$e018
-        bra     @L2
-@L1:
-        ldy     #<$c038         ; page 1
-        ldx     #>$c038
-@L2:
-        sty     VIEWPAGEL       ; Save viewpage for getpixel
-        stx     VIEWPAGEH
-
-        lda     __viddma        ; Process flipped displays
-        and     #2
-        beq     @L3
-        clc
-        tya
-        adc     #<8159
-        tay
-        txa
-        adc     #>8159
-        tax
-@L3:
-        sty     DISPADRL        ; $FD94
-        stx     DISPADRH        ; $FD95
-        rts
-
-; ------------------------------------------------------------------------
-; SETDRAWPAGE: Set the drawable page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-;
-; Must set an error code: NO (will only be called if page ok)
-;
-
-SETDRAWPAGE:
-        cmp     #1
-        beq     @L1                 ; page == maxpages-1
-        lda     #<$e018             ; page 0
-        ldx     #>$e018
-        bra     @L2
-@L1:
-        lda     #<$c038             ; page 1
-        ldx     #>$c038
-@L2:
-        sta     DRAWPAGEL
-        stx     DRAWPAGEH
-        rts
-
-; ------------------------------------------------------------------------
-; IRQ: VBL interrupt handler
-;
-
-IRQ:
-        lda     INTSET          ; Poll all pending interrupts
-        and     #VBL_INTERRUPT
-        beq     IRQEND          ; Exit if not a VBL interrupt
-
-        lda     SWAPREQUEST
-        beq     @L0
-        lda     DRAWPAGE
-        jsr     SETVIEWPAGE
-        lda     DRAWPAGE
-        eor     #1
-        sta     DRAWPAGE
-        jsr     SETDRAWPAGE
-        stz     SWAPREQUEST
-@L0:
-IRQEND:
-        clc
-        rts
-
-; ------------------------------------------------------------------------
-; SETCOLOR: Set the drawing color (in A). The new color is already checked
-; to be in a valid range (0..maxcolor-1).
-;
-; Must set an error code: NO (will only be called if color ok)
-;
-
-SETCOLOR:
-        sta     DRAWINDEX
-        rts
-
-; ------------------------------------------------------------------------
-; SETPALETTE: Set the palette (not available with all drivers/hardware).
-; A pointer to the palette is passed in ptr1. Must set an error if palettes
-; are not supported
-;
-; Must set an error code: YES
-;
-
-SETPALETTE:
-        ldy     #31
-@L1:    lda     (ptr1),y
-        sta     GCOLMAP,y   ; $FDA0
-        dey
-        bpl     @L1
-
-; Done, reset the error code
-
-        lda     #TGI_ERR_OK
-        sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; GETPALETTE: Return the current palette in A/X. Even drivers that cannot
-; set the palette should return the default palette here, so there's no
-; way for this function to fail.
-;
-; Must set an error code: NO
-;
-
-GETPALETTE:
-        lda     #<GCOLMAP       ; $FDA0
-        ldx     #>GCOLMAP
-        rts
-
-; ------------------------------------------------------------------------
-; GETDEFPALETTE: Return the default palette for the driver in A/X. All
-; drivers should return something reasonable here, even drivers that don't
-; support palettes, otherwise the caller has no way to determine the colors
-; of the (not changeable) palette.
-;
-; Must set an error code: NO (all drivers must have a default palette)
-;
-
-GETDEFPALETTE:
-        lda     #<DEFPALETTE
-        ldx     #>DEFPALETTE
-        rts
-
-; ------------------------------------------------------------------------
-; SETPIXEL: Draw one pixel at X1/Y1 = ptr1/ptr2 with the current drawing
-; color. The coordinates passed to this function are never outside the
-; visible screen area, so there is no need for clipping inside this function.
-;
-; Must set an error code: NO
-;
-
-.data
-pixel_coll:
-        .byte   0
-pixel_sprite:
-        .byte   %00000001                       ; A pixel sprite
-        .byte   %00010000
-        .byte   %00100000
-        .addr   0,pixel_bitmap
-pix_x:  .word   0
-pix_y:  .word   0
-        .word   $100
-        .word   $100
-pix_c:  .byte   $00
-
-.code
-SETPIXEL:
-        lda     X1
-        sta     pix_x
-        lda     Y1
-        sta     pix_y
-        lda     DRAWINDEX
-        sta     pix_c
-        lda     #<pixel_sprite
-        ldx     #>pixel_sprite
-        jmp     draw_sprite
-
-; ------------------------------------------------------------------------
-; GETPIXEL: Read the color value of a pixel and return it in A/X. The
-; coordinates passed to this function are never outside the visible screen
-; area, so there is no need for clipping inside this function.
-
-
-GETPIXEL:
-        lda     Y1
-        sta     MATHD   ; Hardware multiply
-        stz     MATHC
-        lda     #80
-        sta     MATHB
-        stz     MATHA
-        lda     X1
-        lsr     A
-        php
-        tay
-
-        clc
-        lda     VIEWPAGEL
-        adc     MATHH
-        sta     ptr1
-        lda     VIEWPAGEH
-        adc     MATHG
-        sta     ptr1+1
-
-        ldx     #0
-        lda     #15
-        sta     MAPCTL
-        lda     (ptr1),y
-        tay
-        lda     #$0c
-        sta     MAPCTL
-        tya
-        plp
-        bcc     @L1
-        and     #$f
-        rts
-
-@L1:    lsr     A
-        lsr     A
-        lsr     A
-        lsr     A
-        rts
-
-; ------------------------------------------------------------------------
-; LINE: Draw a line from X1/Y1 to X2/Y2, where X1/Y1 = ptr1/ptr2 and
-; X2/Y2 = ptr3/ptr4 using the current drawing color.
-;
-; Must set an error code: NO
-;
-
-.data
-line_coll:
-        .byte   0
-line_sprite:
-        .byte   0               ; Will be replaced by the code
-        .byte   %00110000
-        .byte   %00100000
-        .word   0,pixel_bitmap
-line_x:
-        .word    0
-line_y:
-        .word    0
-line_sx:
-        .word    $100
-line_sy:
-        .word    $100
-        .word    0
-line_tilt:
-        .word    0
-line_c:
-        .byte    $e
-
-.code
-LINE:
-        lda     DRAWINDEX
-        sta     line_c
-        stz     line_sx
-        stz     line_sy
-
-        sec
-        lda     X2
-        sbc     X1
-        lda     X2+1
-        sbc     X1+1
-        bpl     @L1
-        lda     X1
-        ldx     X2
-        sta     X2
-        stx     X1
-        lda     X1+1
-        ldx     X2+1
-        sta     X2+1
-        stx     X1+1
-        lda     Y1
-        ldx     Y2
-        sta     Y2
-        stx     Y1
-        lda     Y1+1
-        ldx     Y2+1
-        sta     Y2+1
-        stx     Y1+1
-@L1:
-        lda     #%00000000      ; Not flipped
-        sta     line_sprite
-
-        sec
-        lda     Y2
-        sbc     Y1
-        sta     Y2
-        lda     Y2+1
-        sbc     Y1+1
-        sta     Y2+1
-        bpl     @L2
-        sec
-        lda     #0
-        sbc     Y2
-        sta     Y2
-        lda     #0
-        sbc     Y2+1
-        sta     Y2+1
-        lda     #%00010000      ; Vertical flip
-        sta     line_sprite
-@L2:
-        lda     X1
-        sta     line_x
-        lda     X1+1
-        sta     line_x+1
-        lda     Y1
-        sta     line_y
-        lda     Y1+1
-        sta     line_y+1
-
-        lda     Y2
-        ina
-        sta     line_sy+1
-        sta     MATHP           ; hardware divide
-        stz     MATHN
-
-        stz     MATHH
-        stz     MATHG
-        sec
-        lda     X2
-        sbc     X1
-        ina
-        sta     MATHF
-        stz     MATHE
-@L3:
-        lda     SPRSYS
-        bmi     @L3             ; wait for math done (bit 7 of sprsys)
-        lda     MATHC
-        sta     line_tilt
-        lda     MATHB
-        sta     line_tilt+1
-        bne     @L4
-        lda     #1
-        sta     line_sx+1
-        bra     @L6
-@L4:
-        bit     line_tilt
-        bpl     @L5
-        ina
-@L5:
-        sta     line_sx+1
-@L6:
-        lda     #<line_sprite
-        ldx     #>line_sprite
-        jmp     draw_sprite
-
-; ------------------------------------------------------------------------
-; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where
-; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4 using the current drawing color.
-; Contrary to most other functions, the graphics kernel will sort and clip
-; the coordinates before calling the driver, so on entry the following
-; conditions are valid:
-;       X1 <= X2
-;       Y1 <= Y2
-;       (X1 >= 0) && (X1 < XRES)
-;       (X2 >= 0) && (X2 < XRES)
-;       (Y1 >= 0) && (Y1 < YRES)
-;       (Y2 >= 0) && (Y2 < YRES)
-;
-; Must set an error code: NO
-;
-
-.data
-bar_coll:
-        .byte   0
-bar_sprite:
-        .byte   %00000001                       ; A pixel sprite
-        .byte   %00010000
-        .byte   %00100000
-        .addr   0,pixel_bitmap
-bar_x:  .word   0
-bar_y:  .word   0
-bar_sx: .word   $0100
-bar_sy: .word   $0100
-bar_c:  .byte   $00
-
-.code
-BAR:    lda     X1
-        sta     bar_x
-        lda     Y1
-        sta     bar_y
-        lda     X2
-        sec
-        sbc     X1
-        ina
-        sta     bar_sx+1
-        lda     Y2
-        sec
-        sbc     Y1
-        ina
-        sta     bar_sy+1
-        lda     DRAWINDEX
-        sta     bar_c
-        lda     #<bar_sprite
-        ldx     #>bar_sprite
-        jmp     draw_sprite
-
-; ------------------------------------------------------------------------
-; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scaling in X and Y
-; direction is passend in X/Y, the text direction is passed in A.
-;
-; Must set an error code: NO
-;
-
-TEXTSTYLE:
-        stx     TEXTMAGX
-        sty     TEXTMAGY
-        sta     TEXTDIR
-        rts
-
-; ------------------------------------------------------------------------
-; OUTTEXT: Output text at X/Y = ptr1/ptr2 using the current color and the
-; current text style. The text to output is given as a zero terminated
-; string with address in ptr3.
-;
-; Must set an error code: NO
-;
-
-OUTTEXT:
-        lda     TEXTMAGX        ; Scale sprite
-        sta     text_sx+1
-        lda     TEXTMAGY
-        sta     text_sy+1
-
-        stz     text_sprite     ; Set normal sprite
-        lda     BGINDEX
-        bne     @L1
-        lda     #4
-        sta     text_sprite     ; Set opaque sprite
-@L1:
-        lda     DRAWINDEX       ; Set color
-        asl
-        asl
-        asl
-        asl
-        ora     BGINDEX
-        sta     text_c
-
-        lda     X1              ; Set start position
-        sta     text_x
-        lda     X1+1
-        sta     text_x+1
-        lda     Y1
-        sta     text_y
-        lda     Y1+1
-        sta     text_y+1
-
-        ldy     #<-1            ; Calculate string length
-@L2:
-        iny
-        lda     (STRPTR),y
-        bne     @L2
-        cpy     #20
-        bmi     @L3
-        ldy     #20
-@L3:
-        sty     STRLEN
-        bne     @L4
-        rts                     ; Zero length string
-@L4:
-        iny                     ; Prepare text_bitmap
-        iny
-        sty     STROFF
-
-        ldy     #8-1            ; 8 pixel lines per character
-        ldx     #0
-        clc
-@L5:
-        lda     STROFF
-        sta     text_bitmap,x
-        txa
-        adc     STROFF
-        tax
-        lda     #$ff
-        sta     text_bitmap-1,x
-        dey
-        bpl     @L5
-        stz     text_bitmap,x
-
-        stz     tmp2
-        iny
-@L6:
-        lda     (STRPTR),y
-        sty     tmp1
-
-        sec                     ; (ch-' ') * 8
-        sbc     #32
-        stz     FONTOFF
-        stz     FONTOFF+1
-        asl
-        asl
-        rol     FONTOFF+1
-        asl
-        rol     FONTOFF+1
-        clc                     ; Choose font
-        adc     #<font
-        sta     FONTOFF
-        lda     FONTOFF+1
-        adc     #>font
-        sta     FONTOFF+1
-
-; and now copy the 8 bytes of that char
-
-        ldx     tmp2
-        inx
-        stx     tmp2
-
-; draw char from top to bottom, reading char-data from offset 8-1 to offset 0
-        ldy     #8-1
-@L7:
-        lda     (FONTOFF),y         ; *chptr
-        sta     text_bitmap,x    ;textbuf[y*(1+len+1)+1+x]
-
-        txa
-        adc     STROFF
-        tax
-
-        dey
-        bpl     @L7
-
-        ; goto next char
-        ldy     tmp1
-        iny
-        dec     STRLEN
-        bne     @L6
-
-        lda     #<text_sprite
-        ldx     #>text_sprite
-        jmp     draw_sprite
-
-.data
-text_coll:
-        .byte   0
-text_sprite:
-        .byte   $00,$90,$20
-        .addr   0, text_bitmap
-text_x:
-        .word   0
-text_y:
-        .word   0
-text_sx:
-        .word   $100
-text_sy:
-        .word   $100
-text_c:
-        .byte   0
-
-.rodata
-; The Font
-; 96 characters from ASCII 32 to 127
-; 8 pixels wide, 8 pixels high
-; bit value 0 = foreground, bit value 1 = background / transparent
-font:
-; VERSAIL
-        .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF  ;32
-        .byte $FF, $E7, $FF, $FF, $E7, $E7, $E7, $E7  ;33
-        .byte $FF, $FF, $FF, $FF, $FF, $99, $99, $99  ;34
-        .byte $FF, $99, $99, $00, $99, $00, $99, $99  ;35
-        .byte $FF, $E7, $83, $F9, $C3, $9F, $C1, $E7  ;36
-        .byte $FF, $B9, $99, $CF, $E7, $F3, $99, $9D  ;37
-        .byte $FF, $C0, $99, $98, $C7, $C3, $99, $C3  ;38
-        .byte $FF, $FF, $FF, $FF, $FF, $E7, $F3, $F9  ;39
-        .byte $FF, $F3, $E7, $CF, $CF, $CF, $E7, $F3  ;40
-        .byte $FF, $CF, $E7, $F3, $F3, $F3, $E7, $CF  ;41
-        .byte $FF, $FF, $99, $C3, $00, $C3, $99, $FF  ;42
-        .byte $FF, $FF, $E7, $E7, $81, $E7, $E7, $FF  ;43
-        .byte $CF, $E7, $E7, $FF, $FF, $FF, $FF, $FF  ;44
-        .byte $FF, $FF, $FF, $FF, $81, $FF, $FF, $FF  ;45
-        .byte $FF, $E7, $E7, $FF, $FF, $FF, $FF, $FF  ;46
-        .byte $FF, $9F, $CF, $E7, $F3, $F9, $FC, $FF  ;47
-        .byte $FF, $C3, $99, $99, $89, $91, $99, $C3  ;48
-        .byte $FF, $81, $E7, $E7, $E7, $C7, $E7, $E7  ;49
-        .byte $FF, $81, $9F, $CF, $F3, $F9, $99, $C3  ;50
-        .byte $FF, $C3, $99, $F9, $E3, $F9, $99, $C3  ;51
-        .byte $FF, $F9, $F9, $80, $99, $E1, $F1, $F9  ;52
-        .byte $FF, $C3, $99, $F9, $F9, $83, $9F, $81  ;53
-        .byte $FF, $C3, $99, $99, $83, $9F, $99, $C3  ;54
-        .byte $FF, $E7, $E7, $E7, $E7, $F3, $99, $81  ;55
-        .byte $FF, $C3, $99, $99, $C3, $99, $99, $C3  ;56
-        .byte $FF, $C3, $99, $F9, $C1, $99, $99, $C3  ;57
-        .byte $FF, $FF, $E7, $FF, $FF, $E7, $FF, $FF  ;58
-        .byte $CF, $E7, $E7, $FF, $FF, $E7, $FF, $FF  ;59
-        .byte $FF, $F1, $E7, $CF, $9F, $CF, $E7, $F1  ;60
-        .byte $FF, $FF, $FF, $81, $FF, $81, $FF, $FF  ;61
-        .byte $FF, $8F, $E7, $F3, $F9, $F3, $E7, $8F  ;62
-        .byte $FF, $E7, $FF, $E7, $F3, $F9, $99, $C3  ;63
-
-
-        .byte $FF, $C3, $9D, $9F, $91, $91, $99, $C3  ;0
-        .byte $FF, $99, $99, $99, $81, $99, $C3, $E7  ;1
-        .byte $FF, $83, $99, $99, $83, $99, $99, $83  ;2
-        .byte $FF, $C3, $99, $9F, $9F, $9F, $99, $C3  ;3
-        .byte $FF, $87, $93, $99, $99, $99, $93, $87  ;4
-        .byte $FF, $81, $9F, $9F, $87, $9F, $9F, $81  ;5
-        .byte $FF, $9F, $9F, $9F, $87, $9F, $9F, $81  ;6
-        .byte $FF, $C3, $99, $99, $91, $9F, $99, $C3  ;7
-        .byte $FF, $99, $99, $99, $81, $99, $99, $99  ;8
-        .byte $FF, $C3, $E7, $E7, $E7, $E7, $E7, $C3  ;9
-        .byte $FF, $C7, $93, $F3, $F3, $F3, $F3, $E1  ;10
-        .byte $FF, $99, $93, $87, $8F, $87, $93, $99  ;11
-        .byte $FF, $81, $9F, $9F, $9F, $9F, $9F, $9F  ;12
-        .byte $FF, $9C, $9C, $9C, $94, $80, $88, $9C  ;13
-        .byte $FF, $99, $99, $91, $81, $81, $89, $99  ;14
-        .byte $FF, $C3, $99, $99, $99, $99, $99, $C3  ;15
-        .byte $FF, $9F, $9F, $9F, $83, $99, $99, $83  ;16
-        .byte $FF, $F1, $C3, $99, $99, $99, $99, $C3  ;17
-        .byte $FF, $99, $93, $87, $83, $99, $99, $83  ;18
-        .byte $FF, $C3, $99, $F9, $C3, $9F, $99, $C3  ;19
-        .byte $FF, $E7, $E7, $E7, $E7, $E7, $E7, $81  ;20
-        .byte $FF, $C3, $99, $99, $99, $99, $99, $99  ;21
-        .byte $FF, $E7, $C3, $99, $99, $99, $99, $99  ;22
-        .byte $FF, $9C, $88, $80, $94, $9C, $9C, $9C  ;23
-        .byte $FF, $99, $99, $C3, $E7, $C3, $99, $99  ;24
-        .byte $FF, $E7, $E7, $E7, $C3, $99, $99, $99  ;25
-        .byte $FF, $81, $9F, $CF, $E7, $F3, $F9, $81  ;26
-        .byte $FF, $C3, $CF, $CF, $CF, $CF, $CF, $C3  ;27
-        .byte $FF, $03, $9D, $CF, $83, $CF, $ED, $F3  ;28
-        .byte $FF, $C3, $F3, $F3, $F3, $F3, $F3, $C3  ;29
-        .byte $E7, $E7, $E7, $E7, $81, $C3, $E7, $FF  ;30
-        .byte $FF, $EF, $CF, $80, $80, $CF, $EF, $FF  ;31
-
-
-; gemena
-        .byte $FF, $C3, $9D, $9F, $91, $91, $99, $C3  ;224
-        .byte $FF, $C1, $99, $C1, $F9, $C3, $FF, $FF  ;225
-        .byte $FF, $83, $99, $99, $83, $9F, $9F, $FF  ;226
-        .byte $FF, $C3, $9F, $9F, $9F, $C3, $FF, $FF  ;227
-        .byte $FF, $C1, $99, $99, $C1, $F9, $F9, $FF  ;228
-        .byte $FF, $C3, $9F, $81, $99, $C3, $FF, $FF  ;229
-        .byte $FF, $E7, $E7, $E7, $C1, $E7, $F1, $FF  ;230
-        .byte $83, $F9, $C1, $99, $99, $C1, $FF, $FF  ;231
-        .byte $FF, $99, $99, $99, $83, $9F, $9F, $FF  ;232
-        .byte $FF, $C3, $E7, $E7, $C7, $FF, $E7, $FF  ;233
-        .byte $C3, $F9, $F9, $F9, $F9, $FF, $F9, $FF  ;234
-        .byte $FF, $99, $93, $87, $93, $9F, $9F, $FF  ;235
-        .byte $FF, $C3, $E7, $E7, $E7, $E7, $C7, $FF  ;236
-        .byte $FF, $9C, $94, $80, $80, $99, $FF, $FF  ;237
-        .byte $FF, $99, $99, $99, $99, $83, $FF, $FF  ;238
-        .byte $FF, $C3, $99, $99, $99, $C3, $FF, $FF  ;239
-        .byte $9F, $9F, $83, $99, $99, $83, $FF, $FF  ;240
-        .byte $F9, $F9, $C1, $99, $99, $C1, $FF, $FF  ;241
-        .byte $FF, $9F, $9F, $9F, $99, $83, $FF, $FF  ;242
-        .byte $FF, $83, $F9, $C3, $9F, $C1, $FF, $FF  ;243
-        .byte $FF, $F1, $E7, $E7, $E7, $81, $E7, $FF  ;244
-        .byte $FF, $C1, $99, $99, $99, $99, $FF, $FF  ;245
-        .byte $FF, $E7, $C3, $99, $99, $99, $FF, $FF  ;246
-        .byte $FF, $C9, $C1, $80, $94, $9C, $FF, $FF  ;247
-        .byte $FF, $99, $C3, $E7, $C3, $99, $FF, $FF  ;248
-        .byte $87, $F3, $C1, $99, $99, $99, $FF, $FF  ;249
-        .byte $FF, $81, $CF, $E7, $F3, $81, $FF, $FF  ;250
-        .byte $FF, $C3, $CF, $CF, $CF, $CF, $CF, $C3  ;251
-        .byte $FF, $03, $9D, $CF, $83, $CF, $ED, $F3  ;252
-        .byte $FF, $C3, $F3, $F3, $F3, $F3, $F3, $C3  ;253
-        .byte $E7, $E7, $E7, $E7, $81, $C3, $E7, $FF  ;254
-        .byte $FF, $EF, $CF, $80, $80, $CF, $EF, $FF  ;255
diff --git a/libsrc/lynx/tgi_colors.s b/libsrc/lynx/tgi_colors.s
deleted file mode 100644 (file)
index c7aefb4..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-;
-; Target-specific black & white values for use by the target-shared TGI kernel
-;
-
-        .include        "tgi-kernel.inc"
-
-        .export         tgi_color_black:zp = $00
-        .export         tgi_color_white:zp = $0F
diff --git a/libsrc/lynx/tgi_stat_stddrv.s b/libsrc/lynx/tgi_stat_stddrv.s
deleted file mode 100644 (file)
index 70ed56e..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Address of the static standard tgi driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void tgi_static_stddrv[];
-;
-
-        .export _tgi_static_stddrv
-        .import _lynx_160_102_16_tgi
-
-.rodata
-
-_tgi_static_stddrv := _lynx_160_102_16_tgi
diff --git a/libsrc/lynx/tgi_stddrv.s b/libsrc/lynx/tgi_stddrv.s
deleted file mode 100644 (file)
index 07f8f36..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Name of the standard tgi driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const char tgi_stddrv[];
-;
-
-        .export _tgi_stddrv
-
-.rodata
-
-_tgi_stddrv:    .asciiz "lynx-160-102-16.tgi"
diff --git a/libsrc/lynx/toascii.s b/libsrc/lynx/toascii.s
deleted file mode 100644 (file)
index 2a20886..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; unsigned char __fastcall__ toascii (unsigned char c);
-; /* Convert a target specific character to ascii */
-;
-
-.export _toascii
-
-.proc _toascii
-
-; X must be zero on return
-        ldx     #0
-
-; Done!
-        rts
-
-.endproc
diff --git a/libsrc/lynx/uploader.s b/libsrc/lynx/uploader.s
deleted file mode 100644 (file)
index f16a172..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-        .include        "lynx.inc"
-        .include        "extzp.inc"
-        .interruptor    _UpLoaderIRQ
-        .export         __UPLOADER__: absolute = 1
-
-load_len=_FileDestAddr
-load_ptr=_FileFileLen
-load_ptr2=_FileCurrBlock
-
-.segment "UPCODE"
-
-ComLynxReadAndExec:
-        ldy     #4
-loop0:
-        jsr     read_byte
-        sta     load_len-1,y
-        dey
-        bne     loop0       ; get destination and length
-        tax                 ; lowbyte of length
-
-        lda     load_ptr
-        sta     load_ptr2
-        lda     load_ptr+1
-        sta     load_ptr2+1
-
-loop1:
-        inx
-        bne     cont1
-        inc     load_len+1
-        bne     cont1
-        jmp     (load_ptr)
-
-cont1:
-        jsr     read_byte
-        sta     (load_ptr2),y
-        sta     PALETTE         ; feedback ;-)
-        iny
-        bne     loop1
-        inc     load_ptr2+1
-        bra     loop1
-
-read_byte:
-        bit     SERCTL
-        bvc     read_byte
-        lda     SERDAT
-        rts
-
-_UpLoaderIRQ:
-        lda     INTSET
-        and     #$10
-        bne     @L0
-        clc
-        rts
-@L0:
-        lda     SERDAT          ; wait for the start sequence
-        bit     flag            ; already seen $81 ?
-        bpl     again           ; >= 0 => no
-        cmp     #$50            ; "P" ?
-        bne     again           ; not correct, so clear flag
-        sei
-        jmp     ComLynxReadAndExec
-
-again:
-        stz     flag
-        cmp     #$81
-        bne     exit
-        sta     flag
-;
-; last action : clear interrupt
-;
-exit:
-        clc
-        rts
-
-.segment "UPDATA"
-
-flag:
-        .byte   0
-
diff --git a/libsrc/mouse/mouse-kernel.s b/libsrc/mouse/mouse-kernel.s
deleted file mode 100644 (file)
index 2fa5b5e..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-28, 2009-09-26
-;
-; Common functions of the mouse driver API.
-;
-
-        .import         return0, popsreg, incsp2, mouse_libref
-        .importzp       sreg, ptr1, tmp1, tmp2
-        .interruptor    mouse_irq               ; Export as IRQ handler
-
-        .include        "mouse-kernel.inc"
-
-
-
-;----------------------------------------------------------------------------
-; Variables
-
-
-.bss
-_mouse_drv:     .res    2               ; Pointer to driver
-
-_mouse_hidden:  .res    1               ; Mouse visibility flag
-
-; Jump table for the driver functions.
-.data
-mouse_vectors:
-mouse_install:  jmp     return0
-mouse_uninstall:jmp     return0
-mouse_hide:     jmp     return0
-mouse_show:     jmp     return0
-mouse_setbox:   jmp     return0
-mouse_getbox:   jmp     return0
-mouse_move:     jmp     return0
-mouse_buttons:  jmp     return0
-mouse_pos:      jmp     return0
-mouse_info:     jmp     return0
-mouse_ioctl:    jmp     return0
-mouse_irq:      .byte   $60, $00, $00   ; RTS plus two dummy bytes
-mouse_flags:    .byte   $00
-
-; Driver header signature
-.rodata
-mouse_sig:      .byte   $6d, $6f, $75, MOUSE_API_VERSION    ; "mou", version
-
-
-.code
-;----------------------------------------------------------------------------
-; unsigned char __fastcall__ mouse_install (const struct mouse_callbacks* c,
-;                                           void* driver);
-; /* Install an already loaded driver. Returns an error code. */
-
-_mouse_install:
-        sta     _mouse_drv
-        sta     ptr1
-        stx     _mouse_drv+1
-        stx     ptr1+1
-
-; Check the driver signature
-
-        ldy     #.sizeof(mouse_sig)-1
-@L0:    lda     (ptr1),y
-        cmp     mouse_sig,y
-        bne     inv_drv
-        dey
-        bpl     @L0
-
-; Set the library reference
-
-        ldy     #MOUSE_HDR::LIBREF
-        lda     #<mouse_libref
-        sta     (ptr1),y
-        iny
-        lda     #>mouse_libref
-        sta     (ptr1),y
-
-; Reset flags
-
-        lda     #1
-        sta     _mouse_hidden
-
-; Copy the jump vectors
-
-        ldy     #MOUSE_HDR::JUMPTAB
-        ldx     #0
-@L1:    inx                             ; Skip the JMP opcode
-        jsr     copyjv                  ; Copy one byte
-        jsr     copyjv                  ; Copy one byte
-        cpy     #(MOUSE_HDR::JUMPTAB + .sizeof(MOUSE_HDR::JUMPTAB))
-        bne     @L1
-
-; Copy the flags byte. It is located directly behind the jump vectors, so Y
-; is already correct when we come here. To save code, we use copyjv - crude
-; but effective.
-
-        jsr     copyjv
-
-; Copy the callback vectors into the driver space
-
-        jsr     popsreg
-        ldy     #(MOUSE_HDR::CALLBACKS + .sizeof(MOUSE_HDR::CALLBACKS) - 1)
-        sty     tmp2
-        ldy     #.sizeof(MOUSE_CALLBACKS)-1
-        sty     tmp1
-
-@L2:    jsr     copycb
-        ldy     tmp1
-        jsr     copycb
-        dec     tmp2                    ; Skip opcode byte
-        ldy     tmp1
-        bpl     @L2
-
-; Install the IRQ vector if the driver needs it
-
-        bit     mouse_flags             ; Test MOUSE_FLAG_EARLY_IRQ
-        bvc     @L3                     ; Jump if no interrupts at this time
-        jsr     install_irq             ; Activate IRQ routine
-
-; Call driver install routine and check for errors
-
-@L3:    jsr     mouse_install
-        tay                             ; Test error code
-        bne     uninstall_irq           ; Jump on error
-
-; No errors on INSTALL. If the driver needs late IRQs, enable them now. Be
-; careful not to use A/X since these registers contain the error code from
-; INSTALL.
-
-        bit     mouse_flags             ; Test MOUSE_FLAG_LATE_IRQ
-        bpl     Exit                    ; Jump if vector not needed
-install_irq:
-        ldy     #$4C                    ; Jump opcode
-        sty     mouse_irq               ; Activate IRQ routine
-Exit:   rts
-
-; Uninstall IRQ vector if install routine had errors. A/X may contain the
-; error code from mouse_install, so don't use it.
-
-uninstall_irq:
-        ldy     #$60                    ; RTS opcode
-        sty     mouse_irq               ; Disable IRQ entry point
-        rts
-
-; Driver signature invalid. One word is still on the stack
-
-inv_drv:
-        lda     #MOUSE_ERR_INV_DRIVER
-        ldx     #0
-        jmp     incsp2
-
-; Copy one byte from the jump vectors
-
-copyjv: lda     (ptr1),y
-        sta     mouse_vectors,x
-        iny
-        inx
-        rts
-
-; Copy one byte from the callback vectors
-
-copycb: lda     (sreg),y
-        dec     tmp1
-        ldy     tmp2
-        sta     (ptr1),y
-        dec     tmp2
-        rts
-
-;----------------------------------------------------------------------------
-; unsigned char mouse_uninstall (void);
-; /* Uninstall the currently loaded driver. Returns an error code. */
-
-_mouse_uninstall:
-
-; Depending on the late/early IRQ flag, we will disable IRQs before or after
-; calling the driver mouse_uninstall routine.
-
-        bit     mouse_flags             ; Test MOUSE_FLAG_LATE_IRQ
-        bpl     @L1                     ; Don't disable interrupts now
-        jsr     uninstall_irq           ; Disable driver interrupts
-@L1:    jsr     mouse_uninstall         ; Call driver routine
-
-; We don't check the flag a second time here, since disabling IRQs twice,
-; or disabling them if they weren't enabled will do no harm, and the missing
-; check will save a few bytes.
-
-        jsr     uninstall_irq           ; Disable driver interrupts
-
-_mouse_clear_ptr:                       ; External entry point
-        lda     #0
-        sta     _mouse_drv
-        sta     _mouse_drv+1            ; Clear the driver pointer
-
-        tax
-        rts                             ; Return zero
diff --git a/libsrc/mouse/mouse_buttons.s b/libsrc/mouse/mouse_buttons.s
deleted file mode 100644 (file)
index afca40c..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-30
-;
-; unsigned char mouse_buttons (void);
-; /* Return a bit mask encoding the states of the mouse buttons. Use the
-; ** MOUSE_BTN_XXX flags to decode a specific button.
-; */
-;
-
-        .include        "mouse-kernel.inc"
-
-        _mouse_buttons  = mouse_buttons ; Call driver directly
diff --git a/libsrc/mouse/mouse_getbox.s b/libsrc/mouse/mouse_getbox.s
deleted file mode 100644 (file)
index 01b5dfb..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-09-26
-;
-; void __fastcall__ mouse_getbox (struct mouse_box* box);
-; /* Get the current bounding box for the mouse pointer movement. */
-;
-;
-
-        .include        "mouse-kernel.inc"
-
-        _mouse_getbox    := mouse_getbox        ; Call driver directly
-
-
diff --git a/libsrc/mouse/mouse_geterrormsg.s b/libsrc/mouse/mouse_geterrormsg.s
deleted file mode 100644 (file)
index f4189af..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-;
-; Ullrich von Bassewitz, 2004-11-07
-;
-; const char* __fastcall__ mouse_geterrormsg (unsigned char code);
-; /* Get an error message describing the error in code. */
-;
-
-        .include        "mouse-kernel.inc"
-
-
-.proc   _mouse_geterrormsg
-
-        cmp     #MOUSE_ERR_COUNT
-        bcc     L1
-        lda     #MOUSE_ERR_COUNT        ; "Unknown error"
-L1:     tay
-        ldx     #>msgtab
-        lda     #<msgtab
-        clc
-        adc     offs,y
-        bcc     L2
-        inx
-L2:     rts
-
-.endproc
-
-
-;----------------------------------------------------------------------------
-; Error messages. The messages are currently limited to 256 bytes total.
-
-.rodata
-
-offs:   .byte   <(msg0-msgtab)
-        .byte   <(msg1-msgtab)
-        .byte   <(msg2-msgtab)
-        .byte   <(msg3-msgtab)
-        .byte   <(msg4-msgtab)
-        .byte   <(msg5-msgtab)
-        .byte   <(msg6-msgtab)
-
-msgtab:
-msg0:   .asciiz         "No error"
-msg1:   .asciiz         "No driver available"
-msg2:   .asciiz         "Cannot load driver"
-msg3:   .asciiz         "Invalid driver"
-msg4:   .asciiz         "Mouse hardware not found"
-msg5:   .asciiz         "Invalid ioctl code"
-msg6:   .asciiz         "Unknown error"
-
diff --git a/libsrc/mouse/mouse_hide.s b/libsrc/mouse/mouse_hide.s
deleted file mode 100644 (file)
index 1f56586..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-30
-;
-; void mouse_hide (void);
-; /* Hide the mouse. The function manages a counter and may be called more than
-; ** once. For each call to mouse_hide there must be a call to mouse_show to make
-; ** the mouse visible again.
-; */
-;
-
-        .include        "mouse-kernel.inc"
-
-.proc   _mouse_hide
-
-        lda     _mouse_hidden           ; Get the flag
-        bne     @L1                     ; Jump if already invisible
-        jsr     mouse_hide              ; Call the driver
-@L1:    inc     _mouse_hidden           ; Set the flag to invisible
-        rts
-
-.endproc
diff --git a/libsrc/mouse/mouse_info.s b/libsrc/mouse/mouse_info.s
deleted file mode 100644 (file)
index fb49c56..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-30
-;
-; void __fastcall__ mouse_info (struct mouse_info* info);
-; /* Return the state of the mouse buttons and the position of the mouse */
-;
-
-        .import         ptr1: zp
-
-        .include        "mouse-kernel.inc"
-
-.proc   _mouse_info
-
-        sta     ptr1
-        stx     ptr1+1                  ; Store info into ptr1
-        jmp     mouse_info              ; Call the driver
-
-.endproc
-
-
-
-
-
diff --git a/libsrc/mouse/mouse_ioctl.s b/libsrc/mouse/mouse_ioctl.s
deleted file mode 100644 (file)
index 52d201c..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-30
-;
-; unsigned char __fastcall__ mouse_ioctl (unsigned char code, void* data);
-; /* Call the driver specific ioctl function. NON PORTABLE! Returns an error
-; ** code.
-; */
-;
-
-        .import         popa
-        .import         ptr1: zp
-
-        .include        "mouse-kernel.inc"
-
-.proc   _mouse_ioctl
-
-        sta     ptr1
-        stx     ptr1+1                  ; Store data into ptr1
-        jsr     popa                    ; Get code from stack
-        jmp     mouse_ioctl             ; Call the driver
-
-.endproc
-
-
-
-
-
diff --git a/libsrc/mouse/mouse_load.s b/libsrc/mouse/mouse_load.s
deleted file mode 100644 (file)
index 3472508..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-;                         
-; Ullrich von Bassewitz, 2006-06-05
-;
-; unsigned char __fastcall__ mouse_load_driver (const struct mouse_callbacks* c,
-;                                               const char* name)
-; /* Load a mouse driver and return an error code */
-
-
-        .include        "mouse-kernel.inc"
-        .include        "modload.inc"
-        .include        "fcntl.inc"
-
-        .import         pushax
-        .import         pusha0
-        .import         incsp2
-        .import         _open
-        .import         _read
-        .import         _close
-
-
-
-;----------------------------------------------------------------------------
-; Variables
-
-.data
-
-ctrl:   .addr   _read
-        .res    2                       ; CALLERDATA
-        .res    2                       ; MODULE
-        .res    2                       ; MODULE_SIZE
-        .res    2                       ; MODULE_ID
-
-;----------------------------------------------------------------------------
-; Code
-
-.code
-
-.proc   _mouse_load_driver
-
-; Save name on the C stack. We will need it later as parameter passed to open()
-
-        jsr     pushax
-
-; Check if we do already have a driver loaded. If so, remove it.
-
-        lda     _mouse_drv
-        ora     _mouse_drv+1
-        beq     @L1
-        jsr     _mouse_uninstall
-
-; Open the file. The name parameter is already on stack and will get removed
-; by open().
-; ctrl.callerdata = open (name, O_RDONLY);
-
-@L1:    lda     #<O_RDONLY
-        jsr     pusha0
-        ldy     #4                      ; Argument size
-        jsr     _open
-        sta     ctrl + MOD_CTRL::CALLERDATA
-        stx     ctrl + MOD_CTRL::CALLERDATA+1
-
-; if (ctrl.callerdata >= 0) {
-
-        txa
-        bmi     @L3
-
-; /* Load the module */
-; Res = mod_load (&ctrl);
-
-        lda     #<ctrl
-        ldx     #>ctrl
-        jsr     _mod_load
-        pha
-
-; /* Close the input file */
-; close (ctrl.callerdata);
-
-        lda     ctrl + MOD_CTRL::CALLERDATA
-        ldx     ctrl + MOD_CTRL::CALLERDATA+1
-        jsr     _close
-
-; /* Check the return code */
-; if (Res == MLOAD_OK) {
-
-        pla
-        bne     @L3
-
-; Check the driver signature, install the driver. c is already on stack and
-; will get removed by mouse_install().
-; Res = mouse_install (c, ctrl.module);
-
-        lda     ctrl + MOD_CTRL::MODULE
-        ldx     ctrl + MOD_CTRL::MODULE+1
-        jsr     _mouse_install
-
-; If mouse_install was successful, we're done
-
-        tax
-        beq     @L2
-
-; The driver didn't install correctly. Remove it from memory and return the
-; error code.
-
-        pha                             ; Save the error code
-        lda     _mouse_drv
-        ldx     _mouse_drv+1
-        jsr     _mod_free               ; Free the driver memory
-        jsr     _mouse_clear_ptr        ; Clear mouse_drv
-        pla                             ; Restore the error code
-        ldx     #0                      ; We must return an int
-@L2:    rts                             ; Done
-
-; Open or mod_load failed. Remove excess arguments from stack and return an
-; error code.
-
-@L3:    jsr     incsp2
-        lda     #<MOUSE_ERR_CANNOT_LOAD
-        ldx     #>MOUSE_ERR_CANNOT_LOAD
-        rts
-
-.endproc
-
-
diff --git a/libsrc/mouse/mouse_move.s b/libsrc/mouse/mouse_move.s
deleted file mode 100644 (file)
index b25716b..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-30
-;
-; void __fastcall__ mouse_move (int x, int y);
-; /* Set the mouse cursor to the given position. If a mouse cursor is defined
-; ** and currently visible, the mouse cursor is also moved.
-; ** NOTE: This function does not check if the given position is valid and
-; ** inside the bounding box.
-; */
-;
-
-        .import         incsp2
-        .import         ptr1: zp                            
-
-        .include        "mouse-kernel.inc"
-
-.proc   _mouse_move
-
-        jsr     mouse_move              ; Call the driver
-        jmp     incsp2                  ; Drop the parameter
-
-.endproc
-
-
-
-
-
diff --git a/libsrc/mouse/mouse_pos.s b/libsrc/mouse/mouse_pos.s
deleted file mode 100644 (file)
index 484dc61..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-30
-;
-; void __fastcall__ mouse_pos (struct mouse_pos* pos);
-; /* Return the current mouse position */
-;
-
-        .import         ptr1: zp
-
-        .include        "mouse-kernel.inc"
-
-.proc   _mouse_pos
-
-        sta     ptr1
-        stx     ptr1+1                  ; Store pos into ptr1
-        jmp     mouse_pos               ; Call the driver
-
-.endproc
-
-
-
-
-
diff --git a/libsrc/mouse/mouse_setbox.s b/libsrc/mouse/mouse_setbox.s
deleted file mode 100644 (file)
index 6dafc83..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-09-26
-;
-; void __fastcall__ mouse_setbox (const struct mouse_box* box);
-; /* Set the bounding box for the mouse pointer movement. The mouse X and Y
-; ** coordinates will never go outside the given box.
-; ** NOTE: The function does *not* check if the mouse is currently inside the
-; ** given margins. The proper way to use this function therefore is:
-; **
-; **    - Hide the mouse
-; **    - Set the bounding box
-; **    - Place the mouse at the desired position
-; **    - Show the mouse again.
-; **
-; ** NOTE2: When setting the box to something that is larger than the actual
-; ** screen, the positioning of the mouse cursor can fail. If such margins
-; ** are really what you want, you have to use your own cursor routines.
-; */
-;
-;
-
-        .include        "mouse-kernel.inc"
-
-        _mouse_setbox   := mouse_setbox         ; Call driver directly
-
-
diff --git a/libsrc/mouse/mouse_show.s b/libsrc/mouse/mouse_show.s
deleted file mode 100644 (file)
index 652d154..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-12-30
-;
-; void mouse_show (void);
-; /* Show the mouse. See mouse_hide for more information. */
-;
-
-        .include        "mouse-kernel.inc"
-
-.proc   _mouse_show
-
-        lda     _mouse_hidden           ; Mouse visible?
-        beq     @L1                     ; Jump if yes
-        dec     _mouse_hidden           ; Set the flag
-        bne     @L1                     ; Jump if still invisible
-        jmp     mouse_show              ; Call the driver
-@L1:    rts
-
-.endproc
diff --git a/libsrc/mouse/mouse_unload.s b/libsrc/mouse/mouse_unload.s
deleted file mode 100644 (file)
index 8c90184..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-;
-; Ullrich von Bassewitz, 2004-03-21
-;
-; unsigned char mouse_unload (void);
-; /* Uninstall, then unload the currently loaded driver. */
-
-
-        .include        "mouse-kernel.inc"
-        .include        "modload.inc"
-
-        .import         return0
-
-
-
-_mouse_unload:
-        lda     _mouse_drv
-        pha                             ; Save pointer to driver
-        ora     _mouse_drv+1
-        beq     no_driver               ; No driver
-        lda     _mouse_drv+1
-        pha
-
-        jsr     _mouse_uninstall        ; Uninstall the driver
-
-        pla
-        tax
-        pla                             ; Get pointer to driver
-        jsr     _mod_free               ; Free the driver
-        jmp     return0                 ; Return MOUSE_ERR_OK
-
-no_driver:
-        tax                             ; X = 0
-        pla                             ; Remove pushed junk
-        lda     #<MOUSE_ERR_NO_DRIVER
-        rts
diff --git a/libsrc/nes/Makefile.inc b/libsrc/nes/Makefile.inc
deleted file mode 100644 (file)
index f1dcbf1..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-../tgi/nes-64-56-2.tgi: ../libwrk/nes/clrscr.o \
-                        ../libwrk/nes/cputc.o  \
-                        ../libwrk/nes/get_tv.o \
-                        ../libwrk/nes/gotoxy.o \
-                        ../libwrk/nes/popa.o   \
-                        ../libwrk/nes/ppu.o    \
-                        ../libwrk/nes/ppubuf.o \
-                        ../libwrk/nes/setcursor.o
diff --git a/libsrc/nes/_scrsize.s b/libsrc/nes/_scrsize.s
deleted file mode 100644 (file)
index 80cc19b..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-04-14
-; Stefan Haubenthal, 2011-05-11
-;
-; Screen size function
-;
-
-        .export         screensize
-
-        .include        "nes.inc"
-        .include        "get_tv.inc"
-
-
-.proc   screensize
-
-        jsr     _get_tv
-        ldx     #charsperline
-        ldy     #screenrows
-        cmp     #TV::PAL
-        beq     pal
-        dey             ; NTSC rows
-pal:    rts
-
-.endproc
diff --git a/libsrc/nes/cclear.s b/libsrc/nes/cclear.s
deleted file mode 100644 (file)
index 233c112..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void cclearxy (unsigned char x, unsigned char y, unsigned char length);
-; void cclear (unsigned char length);
-;
-
-        .export         _cclearxy, _cclear
-        .import         popa, _gotoxy, cputdirect
-        .importzp       tmp1
-
-_cclearxy:
-        pha                     ; Save the length
-        jsr     popa            ; Get y
-        jsr     _gotoxy         ; Call this one, will pop params
-        pla                     ; Restore the length and run into _cclear
-
-_cclear:
-        cmp     #0              ; Is the length zero?
-        beq     L9              ; Jump if done
-        sta     tmp1                                 
-L1:     lda     #$20            ; Blank - screen code
-        jsr     cputdirect      ; Direct output
-        dec     tmp1
-        bne     L1
-L9:     rts
-
-
-
-
diff --git a/libsrc/nes/chline.s b/libsrc/nes/chline.s
deleted file mode 100644 (file)
index 5f6e67c..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void chlinexy (unsigned char x, unsigned char y, unsigned char length);
-; void chline (unsigned char length);
-;
-
-        .export         _chlinexy, _chline
-        .import         popa, _gotoxy, cputdirect
-        .importzp       tmp1
-
-        .include        "nes.inc"
-                                 
-_chlinexy:
-        pha                     ; Save the length
-        jsr     popa            ; Get y
-        jsr     _gotoxy         ; Call this one, will pop params
-        pla                     ; Restore the length
-
-_chline:
-        cmp     #0              ; Is the length zero?
-        beq     L9              ; Jump if done
-        sta     tmp1
-L1:     lda     #CH_HLINE       ; Horizontal line, screen code
-        jsr     cputdirect      ; Direct output
-        dec     tmp1
-        bne     L1
-L9:     rts
-
-
-
-
diff --git a/libsrc/nes/clock.s b/libsrc/nes/clock.s
deleted file mode 100644 (file)
index ab7a362..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-;
-; clock.s
-;
-; Written by Groepaz/Hitmen <groepaz@gmx.net>
-; Cleanup by Ullrich von Bassewitz <uz@cc65.org>
-; 2003-05-02, Greg King <gngking@erols.com>
-;
-; #include <time.h>
-;
-; clock_t clock (void);
-;
-
-        .include "nes.inc"
-
-        .export         _clock
-        .importzp       sreg
-
-
-.proc   _clock
-
-        ldy     #0              ; High word is always zero
-        sty     sreg+1
-        sty     sreg
-L1:     ldx     tickcount+1
-        lda     tickcount
-        cpx     tickcount+1     ; Did tickcount change?
-        bne     L1              ; Yes, re-read it
-        rts
-
-.endproc
-
diff --git a/libsrc/nes/clrscr.s b/libsrc/nes/clrscr.s
deleted file mode 100644 (file)
index 67d29dd..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-;
-; Written by Groepaz/Hitmen <groepaz@gmx.net>
-; Cleanup by Ullrich von Bassewitz <uz@cc65.org>
-;
-; void clrscr (void);
-;
-
-        .export         _clrscr
-        .import         ppubuf_waitempty
-
-        .include        "nes.inc"
-
-
-.proc   _clrscr
-
-; wait until all console data has been written
-
-        jsr     ppubuf_waitempty
-
-; wait for vblank
-
-        lda     #0
-        sta     VBLANK_FLAG
-@w2:    lda     VBLANK_FLAG
-        beq     @w2
-
-; switch screen off
-
-        lda     #%00000000
-        sta     PPU_CTRL2
-
-; Set start address to Name Table #1
-
-        lda     #$20
-        sta     PPU_VRAM_ADDR2
-        lda     #$00
-        sta     PPU_VRAM_ADDR2
-
-; Clear Name Table #1
-
-        lda     #' '
-        ldx     #$f0            ; 4*$f0=$03c0
-
-beg:    sta     PPU_VRAM_IO
-        sta     PPU_VRAM_IO
-        sta     PPU_VRAM_IO
-        sta     PPU_VRAM_IO
-        dex
-        bne     beg
-
-        lda     #$23            ;
-        sta     PPU_VRAM_ADDR2  ; Set start address to PPU address $23C0
-        lda     #$C0            ; (1st attribute table)
-        sta     PPU_VRAM_ADDR2
-
-        ldx     #$00
-
-lll:    lda     #$00            ; Write attribute table value and auto increment
-        sta     PPU_VRAM_IO     ; to next address
-        inx
-        cpx     #$40
-        bne     lll
-
-; switch screen on again
-
-        lda     #%00011110
-        sta     PPU_CTRL2
-        rts
-
-.endproc
-
-
diff --git a/libsrc/nes/color.s b/libsrc/nes/color.s
deleted file mode 100644 (file)
index bb91ff9..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-;
-; Written by Groepaz/Hitmen <groepaz@gmx.net>
-; Cleanup by Ullrich von Bassewitz <uz@cc65.org>
-;
-; unsigned char __fastcall__ textcolor (unsigned char color);
-; unsigned char __fastcall__ bgcolor (unsigned char color);
-; unsigned char __fastcall__ bordercolor (unsigned char color);
-;
-
-
-        .export         _textcolor, _bgcolor, _bordercolor
-        .import         return0, ppubuf_put
-
-        .include        "nes.inc"
-
-_textcolor      = return0
-_bordercolor    = return0
-
-.proc   _bgcolor
-
-        tax
-        lda     BGCOLOR         ; get old value
-        stx     BGCOLOR         ; set new value
-        pha
-
-        lda     colors,x
-        pha
-        ldy     #$3F
-        ldx     #0
-        jsr     ppubuf_put
-        pla
-        pha
-        ldy     #$3F
-        ldx     #4
-        jsr     ppubuf_put
-        pla
-        pha
-        ldy     #$3F
-        ldx     #8
-        jsr     ppubuf_put
-        pla
-        ldy     #$3F
-        ldx     #12
-        jsr     ppubuf_put
-
-        pla
-        rts
-
-.endproc
-
-.rodata
-
-colors: .byte $0f       ; 0 black
-        .byte $3d       ; 1 white
-        .byte $04       ; 2 red
-        .byte $3b       ; 3 cyan
-        .byte $14       ; 4 violett
-        .byte $1a       ; 5 green
-        .byte $01       ; 6 blue
-        .byte $38       ; 7 yellow
-        .byte $18       ; 8 orange
-        .byte $08       ; 9 brown
-        .byte $35       ; a light red
-        .byte $2d       ; b dark grey
-        .byte $10       ; c middle grey
-        .byte $2b       ; d light green
-        .byte $22       ; e light blue
-        .byte $3d       ; f light gray
-
diff --git a/libsrc/nes/cputc.s b/libsrc/nes/cputc.s
deleted file mode 100644 (file)
index 1091502..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-;
-; Written by Groepaz/Hitmen <groepaz@gmx.net>
-; Cleanup by Ullrich von Bassewitz <uz@cc65.org>
-;
-; void cputcxy (unsigned char x, unsigned char y, char c);
-; void cputc (char c);
-;
-
-        .export         _cputcxy, _cputc, cputdirect, putchar
-        .export         newline
-        .constructor    initconio
-        .import         popa, _gotoxy
-        .import         ppuinit, paletteinit, ppubuf_put
-        .import         setcursor
-
-        .importzp       tmp3,tmp4
-
-        .include        "nes.inc"
-
-;-----------------------------------------------------------------------------
-
-.code
-
-_cputcxy:
-        pha                     ; Save C
-        jsr     popa            ; Get Y
-        jsr     _gotoxy         ; Set cursor, drop x
-        pla                     ; Restore C
-
-; Plot a character - also used as internal function
-
-_cputc: cmp     #$0d            ; CR?
-        bne     L1
-        lda     #0
-        sta     CURS_X
-        beq     plot            ; Recalculate pointers
-
-L1:     cmp     #$0a            ; LF?
-        beq     newline         ; Recalculate pointers
-
-; Printable char of some sort
-
-cputdirect:
-        jsr     putchar         ; Write the character to the screen
-
-; Advance cursor position
-
-advance:
-        ldy     CURS_X
-        iny
-        cpy     #xsize
-        bne     L3
-        inc     CURS_Y          ; new line
-        ldy     #0              ; + cr
-L3:     sty     CURS_X
-        jmp     plot
-
-newline:
-        inc     CURS_Y
-
-; Set cursor position, calculate RAM pointers
-
-plot:   ldy     CURS_X
-        ldx     CURS_Y
-        jmp     setcursor       ; Set the new cursor
-
-
-; Write one character to the screen without doing anything else, return X
-; position in Y
-
-putchar:
-        ora     RVS             ; Set revers bit
-        ldy     SCREEN_PTR+1
-        ldx     SCREEN_PTR
-        jmp     ppubuf_put
-
-;-----------------------------------------------------------------------------
-; Initialize the conio subsystem. Code goes into the INIT segment, which may
-; be reused after startup.
-
-.segment        "INIT"
-
-initconio:
-        jsr     ppuinit
-        jsr     paletteinit
-
-        lda     #0
-        sta     RVS
-        sta     CURS_X
-        sta     CURS_Y
-
-        jmp     plot            ; Set the cursor
-
-
diff --git a/libsrc/nes/crt0.s b/libsrc/nes/crt0.s
deleted file mode 100644 (file)
index de874d3..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-;
-; Startup code for cc65 (NES version)
-;
-; by Groepaz/Hitmen <groepaz@gmx.net>
-; based on code by Ullrich von Bassewitz <uz@cc65.org>
-;
-
-        .export         _exit
-        .export         __STARTUP__ : absolute = 1      ; Mark as startup
-        .import         initlib, donelib, callmain
-        .import         push0, _main, zerobss, copydata
-        .import         ppubuf_flush
-
-        ; Linker generated symbols
-        .import         __RAM_START__, __RAM_SIZE__
-        .import         __SRAM_START__, __SRAM_SIZE__
-        .import         __ROM0_START__, __ROM0_SIZE__
-        .import         __STARTUP_LOAD__,__STARTUP_RUN__, __STARTUP_SIZE__
-        .import         __CODE_LOAD__,__CODE_RUN__, __CODE_SIZE__
-        .import         __RODATA_LOAD__,__RODATA_RUN__, __RODATA_SIZE__
-
-        .include        "zeropage.inc"
-        .include        "nes.inc"
-
-
-; ------------------------------------------------------------------------
-; 16 bytes INES header
-
-.segment        "HEADER"
-
-;    +--------+------+------------------------------------------+
-;    | Offset | Size | Content(s)                               |
-;    +--------+------+------------------------------------------+
-;    |   0    |  3   | 'NES'                                    |
-;    |   3    |  1   | $1A                                      |
-;    |   4    |  1   | 16K PRG-ROM page count                   |
-;    |   5    |  1   | 8K CHR-ROM page count                    |
-;    |   6    |  1   | ROM Control Byte #1                      |
-;    |        |      |   %####vTsM                              |
-;    |        |      |    |  ||||+- 0=Horizontal mirroring      |
-;    |        |      |    |  ||||   1=Vertical mirroring        |
-;    |        |      |    |  |||+-- 1=SRAM enabled              |
-;    |        |      |    |  ||+--- 1=512-byte trainer present  |
-;    |        |      |    |  |+---- 1=Four-screen mirroring     |
-;    |        |      |    |  |                                  |
-;    |        |      |    +--+----- Mapper # (lower 4-bits)     |
-;    |   7    |  1   | ROM Control Byte #2                      |
-;    |        |      |   %####0000                              |
-;    |        |      |    |  |                                  |
-;    |        |      |    +--+----- Mapper # (upper 4-bits)     |
-;    |  8-15  |  8   | $00                                      |
-;    | 16-..  |      | Actual 16K PRG-ROM pages (in linear      |
-;    |  ...   |      | order). If a trainer exists, it precedes |
-;    |  ...   |      | the first PRG-ROM page.                  |
-;    | ..-EOF |      | CHR-ROM pages (in ascending order).      |
-;    +--------+------+------------------------------------------+
-
-        .byte   $4e,$45,$53,$1a ; "NES"^Z
-        .byte   2               ; ines prg  - Specifies the number of 16k prg banks.
-        .byte   1               ; ines chr  - Specifies the number of 8k chr banks.
-        .byte   %00000011       ; ines mir  - Specifies VRAM mirroring of the banks.
-        .byte   %00000000       ; ines map  - Specifies the NES mapper used.
-        .byte   0,0,0,0,0,0,0,0 ; 8 zeroes
-
-
-; ------------------------------------------------------------------------
-; Place the startup code in a special segment.
-
-.segment        "STARTUP"
-
-start:
-
-; Set up the CPU and System-IRQ.
-
-        sei
-        cld
-        ldx     #0
-        stx     VBLANK_FLAG
-
-        stx     ringread
-        stx     ringwrite
-        stx     ringcount
-
-        txs
-
-        lda     #$20
-@l:     sta     ringbuff,x
-        sta     ringbuff+$0100,x
-        sta     ringbuff+$0200,x
-        inx
-        bne     @l
-
-; Clear the BSS data.
-
-        jsr     zerobss
-
-; Initialize the data.
-        jsr     copydata
-
-; Set up the stack.
-
-        lda     #<(__SRAM_START__ + __SRAM_SIZE__)
-        sta     sp
-        lda     #>(__SRAM_START__ + __SRAM_SIZE__)
-        sta     sp+1            ; Set argument stack ptr
-
-; Call the module constructors.
-
-        jsr     initlib
-
-; Push the command-line arguments; and, call main().
-
-        jsr     callmain
-
-; Call the module destructors. This is also the exit() entry.
-
-_exit:  jsr     donelib         ; Run module destructors
-
-; Reset the NES.
-
-        jmp start
-
-; ------------------------------------------------------------------------
-; System V-Blank Interrupt
-; Updates PPU Memory (buffered).
-; Updates VBLANK_FLAG and tickcount.
-; ------------------------------------------------------------------------
-
-nmi:    pha
-        tya
-        pha
-        txa
-        pha
-
-        lda     #1
-        sta     VBLANK_FLAG
-
-        inc     tickcount
-        bne     @s
-        inc     tickcount+1
-
-@s:     jsr     ppubuf_flush
-
-        ; Reset the video counter.
-        lda     #$20
-        sta     PPU_VRAM_ADDR2
-        lda     #$00
-        sta     PPU_VRAM_ADDR2
-
-        ; Reset scrolling.
-        sta     PPU_VRAM_ADDR1
-        sta     PPU_VRAM_ADDR1
-
-        pla
-        tax
-        pla
-        tay
-        pla
-
-; Interrupt exit
-
-irq2:
-irq1:
-timerirq:
-irq:
-        rti
-
-; ------------------------------------------------------------------------
-; hardware vectors
-; ------------------------------------------------------------------------
-
-.segment "VECTORS"
-
-        .word   irq2        ; $fff4 ?
-        .word   irq1        ; $fff6 ?
-        .word   timerirq    ; $fff8 ?
-        .word   nmi         ; $fffa vblank nmi
-        .word   start       ; $fffc reset
-        .word   irq         ; $fffe irq / brk
-
-; ------------------------------------------------------------------------
-; character data
-; ------------------------------------------------------------------------
-
-.segment "CHARS"
-
-        .include        "neschar.inc"
-
-
diff --git a/libsrc/nes/ctype.s b/libsrc/nes/ctype.s
deleted file mode 100644 (file)
index 6e0ab17..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-;
-; Ullrich von Bassewitz, 02.06.1998
-;
-; Character specification table.
-;
-
-; The tables are readonly, put them into the rodata segment
-
-.rodata
-
-; The following 256 byte wide table specifies attributes for the isxxx type
-; of functions. Doing it by a table means some overhead in space, but it
-; has major advantages:
-;
-;   * It is fast. If it were'nt for the slow parameter passing of cc65, one
-;     could even define macros for the isxxx functions (this is usually
-;     done on other platforms).
-;
-;   * It is highly portable. The only unportable part is the table itself,
-;     all real code goes into the common library.
-;
-;   * We save some code in the isxxx functions.
-;
-;
-; Bit assignments:
-;
-;   0 - Lower case char
-;   1 - Upper case char
-;   2 - Numeric digit
-;   3 - Hex digit (both, lower and upper)
-;   4 - Control character
-;   5 - The space character itself
-;   6 - Other whitespace (that is: '\f', '\n', '\r', '\t' and '\v')
-;   7 - Space or tab character
-
-        .export         __ctype
-
-__ctype:
-
-.repeat 2       ; 2 times for normal and inverted
-
-        .byte   $10     ;   0/00 ___ctrl_@___
-        .byte   $10     ;   1/01 ___ctrl_A___
-        .byte   $10     ;   2/02 ___ctrl_B___
-        .byte   $10     ;   3/03 ___ctrl_C___
-        .byte   $10     ;   4/04 ___ctrl_D___
-        .byte   $10     ;   5/05 ___ctrl_E___
-        .byte   $10     ;   6/06 ___ctrl_F___
-        .byte   $10     ;   7/07 ___ctrl_G___
-        .byte   $10     ;   8/08 ___ctrl_H___
-        .byte   $D0     ;   9/09 ___ctrl_I___
-        .byte   $50     ;  10/0a ___ctrl_J___
-        .byte   $50     ;  11/0b ___ctrl_K___
-        .byte   $50     ;  12/0c ___ctrl_L___
-        .byte   $50     ;  13/0d ___ctrl_M___
-        .byte   $10     ;  14/0e ___ctrl_N___
-        .byte   $10     ;  15/0f ___ctrl_O___
-        .byte   $10     ;  16/10 ___ctrl_P___
-        .byte   $10     ;  17/11 ___ctrl_Q___
-        .byte   $10     ;  18/12 ___ctrl_R___
-        .byte   $10     ;  19/13 ___ctrl_S___
-        .byte   $10     ;  20/14 ___ctrl_T___
-        .byte   $10     ;  21/15 ___ctrl_U___
-        .byte   $10     ;  22/16 ___ctrl_V___
-        .byte   $10     ;  23/17 ___ctrl_W___
-        .byte   $10     ;  24/18 ___ctrl_X___
-        .byte   $10     ;  25/19 ___ctrl_Y___
-        .byte   $10     ;  26/1a ___ctrl_Z___
-        .byte   $10     ;  27/1b ___ctrl_[___
-        .byte   $10     ;  28/1c ___ctrl_\___
-        .byte   $10     ;  29/1d ___ctrl_]___
-        .byte   $10     ;  30/1e ___ctrl_^___
-        .byte   $10     ;  31/1f ___ctrl_____
-        .byte   $A0     ;  32/20 ___SPACE___
-        .byte   $00     ;  33/21 _____!_____
-        .byte   $00     ;  34/22 _____"_____
-        .byte   $00     ;  35/23 _____#_____
-        .byte   $00     ;  36/24 _____$_____
-        .byte   $00     ;  37/25 _____%_____
-        .byte   $00     ;  38/26 _____&_____
-        .byte   $00     ;  39/27 _____'_____
-        .byte   $00     ;  40/28 _____(_____
-        .byte   $00     ;  41/29 _____)_____
-        .byte   $00     ;  42/2a _____*_____
-        .byte   $00     ;  43/2b _____+_____
-        .byte   $00     ;  44/2c _____,_____
-        .byte   $00     ;  45/2d _____-_____
-        .byte   $00     ;  46/2e _____._____
-        .byte   $00     ;  47/2f _____/_____
-        .byte   $0C     ;  48/30 _____0_____
-        .byte   $0C     ;  49/31 _____1_____
-        .byte   $0C     ;  50/32 _____2_____
-        .byte   $0C     ;  51/33 _____3_____
-        .byte   $0C     ;  52/34 _____4_____
-        .byte   $0C     ;  53/35 _____5_____
-        .byte   $0C     ;  54/36 _____6_____
-        .byte   $0C     ;  55/37 _____7_____
-        .byte   $0C     ;  56/38 _____8_____
-        .byte   $0C     ;  57/39 _____9_____
-        .byte   $00     ;  58/3a _____:_____
-        .byte   $00     ;  59/3b _____;_____
-        .byte   $00     ;  60/3c _____<_____
-        .byte   $00     ;  61/3d _____=_____
-        .byte   $00     ;  62/3e _____>_____
-        .byte   $00     ;  63/3f _____?_____
-
-        .byte   $00     ;  64/40 _____@_____
-        .byte   $0A     ;  65/41 _____A_____
-        .byte   $0A     ;  66/42 _____B_____
-        .byte   $0A     ;  67/43 _____C_____
-        .byte   $0A     ;  68/44 _____D_____
-        .byte   $0A     ;  69/45 _____E_____
-        .byte   $0A     ;  70/46 _____F_____
-        .byte   $02     ;  71/47 _____G_____
-        .byte   $02     ;  72/48 _____H_____
-        .byte   $02     ;  73/49 _____I_____
-        .byte   $02     ;  74/4a _____J_____
-        .byte   $02     ;  75/4b _____K_____
-        .byte   $02     ;  76/4c _____L_____
-        .byte   $02     ;  77/4d _____M_____
-        .byte   $02     ;  78/4e _____N_____
-        .byte   $02     ;  79/4f _____O_____
-        .byte   $02     ;  80/50 _____P_____
-        .byte   $02     ;  81/51 _____Q_____
-        .byte   $02     ;  82/52 _____R_____
-        .byte   $02     ;  83/53 _____S_____
-        .byte   $02     ;  84/54 _____T_____
-        .byte   $02     ;  85/55 _____U_____
-        .byte   $02     ;  86/56 _____V_____
-        .byte   $02     ;  87/57 _____W_____
-        .byte   $02     ;  88/58 _____X_____
-        .byte   $02     ;  89/59 _____Y_____
-        .byte   $02     ;  90/5a _____Z_____
-        .byte   $00     ;  91/5b _____[_____
-        .byte   $00     ;  92/5c _____\_____
-        .byte   $00     ;  93/5d _____]_____
-        .byte   $00     ;  94/5e _____^_____
-        .byte   $00     ;  95/5f _UNDERLINE_
-        .byte   $00     ;  96/60 ___grave___
-        .byte   $09     ;  97/61 _____a_____
-        .byte   $09     ;  98/62 _____b_____
-        .byte   $09     ;  99/63 _____c_____
-        .byte   $09     ; 100/64 _____d_____
-        .byte   $09     ; 101/65 _____e_____
-        .byte   $09     ; 102/66 _____f_____
-        .byte   $01     ; 103/67 _____g_____
-        .byte   $01     ; 104/68 _____h_____
-        .byte   $01     ; 105/69 _____i_____
-        .byte   $01     ; 106/6a _____j_____
-        .byte   $01     ; 107/6b _____k_____
-        .byte   $01     ; 108/6c _____l_____
-        .byte   $01     ; 109/6d _____m_____
-        .byte   $01     ; 110/6e _____n_____
-        .byte   $01     ; 111/6f _____o_____
-        .byte   $01     ; 112/70 _____p_____
-        .byte   $01     ; 113/71 _____q_____
-        .byte   $01     ; 114/72 _____r_____
-        .byte   $01     ; 115/73 _____s_____
-        .byte   $01     ; 116/74 _____t_____
-        .byte   $01     ; 117/75 _____u_____
-        .byte   $01     ; 118/76 _____v_____
-        .byte   $01     ; 119/77 _____w_____
-        .byte   $01     ; 120/78 _____x_____
-        .byte   $01     ; 121/79 _____y_____
-        .byte   $01     ; 122/7a _____z_____
-        .byte   $00     ; 123/7b _____{_____
-        .byte   $00     ; 124/7c _____|_____
-        .byte   $00     ; 125/7d _____}_____
-        .byte   $00     ; 126/7e _____~_____
-        .byte   $40     ; 127/7f ____DEL____
-
-.endrepeat
diff --git a/libsrc/nes/cvline.s b/libsrc/nes/cvline.s
deleted file mode 100644 (file)
index 3ab93f3..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void cvlinexy (unsigned char x, unsigned char y, unsigned char length);
-; void cvline (unsigned char length);
-;
-
-        .export         _cvlinexy, _cvline
-        .import         popa, _gotoxy, putchar, newline
-        .importzp       tmp1
-
-        .include        "nes.inc"
-
-_cvlinexy:
-        pha                     ; Save the length
-        jsr     popa            ; Get y
-        jsr     _gotoxy         ; Call this one, will pop params
-        pla                     ; Restore the length and run into _cvline
-
-_cvline:
-        cmp     #0              ; Is the length zero?
-        beq     L9              ; Jump if done
-        sta     tmp1
-L1:     lda     #CH_VLINE       ; Vertical bar
-        jsr     putchar         ; Write, no cursor advance
-        jsr     newline         ; Advance cursor to next line
-        dec     tmp1
-        bne     L1
-L9:     rts
-
-
-
diff --git a/libsrc/nes/get_tv.s b/libsrc/nes/get_tv.s
deleted file mode 100644 (file)
index 7a52440..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-;
-; Stefan Haubenthal, 2007-01-21
-;
-; unsigned char get_tv (void);
-; /* Return the video mode the machine is using */
-;
-
-        .include        "nes.inc"
-        .include        "get_tv.inc"
-        .importzp       tmp1, tmp2
-
-;--------------------------------------------------------------------------
-; _get_tv
-
-.proc   _get_tv
-
-        lda     #TV::NTSC       ; assume NTSC
-        tax                     ; clear
-        sta     tmp1
-        sta     tmp2
-        ldy     tickcount
-wait:   cpy     tickcount
-        beq     wait
-        iny                     ; next tick
-loop:   cpy     tickcount
-        bne     over
-        inc     tmp1
-        bne     loop
-        inc     tmp2
-        bne     loop
-over:   ldy     tmp2
-        cpy     #9
-        bcc     nopal
-        lda     #TV::PAL        ; choose PAL
-nopal:  rts
-
-.endproc
diff --git a/libsrc/nes/gotox.s b/libsrc/nes/gotox.s
deleted file mode 100644 (file)
index dab7fc2..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-05-02
-;
-; void gotox (unsigned char x);
-;
-
-        .export         _gotox
-        .import         setcursor
-
-        .include        "nes.inc"
-
-.proc   _gotox
-
-        sta     CURS_X          ; Set new position
-        tay
-        ldx     CURS_Y
-        jmp     setcursor       ; Set the cursor to the new position
-
-.endproc
-
-
diff --git a/libsrc/nes/gotoxy.s b/libsrc/nes/gotoxy.s
deleted file mode 100644 (file)
index a670962..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; void gotoxy (unsigned char x, unsigned char y);
-;
-
-        .export         _gotoxy
-        .import         setcursor
-        .import         popa
-
-        .include        "nes.inc"
-
-.proc   _gotoxy
-
-        sta     CURS_Y          ; Set Y
-        jsr     popa            ; Get X
-        sta     CURS_X          ; Set X
-        tay
-        ldx     CURS_Y
-        jmp     setcursor       ; Set the cursor position
-
-.endproc
-
-
diff --git a/libsrc/nes/gotoy.s b/libsrc/nes/gotoy.s
deleted file mode 100644 (file)
index cfd913f..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-05-02
-;
-; void gotoy (unsigned char y);
-;
-
-        .export         _gotoy
-        .import         setcursor
-
-        .include        "nes.inc"
-
-.proc   _gotoy
-
-        sta     CURS_Y          ; Set new position
-        tax
-        ldy     CURS_X
-        jmp     setcursor       ; Set the cursor to the new position
-
-.endproc
-
-
-              
diff --git a/libsrc/nes/irq.s b/libsrc/nes/irq.s
deleted file mode 100644 (file)
index 9c026f0..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; IRQ handling (NES version)
-;
-
-        .export         initirq, doneirq
-
-; ------------------------------------------------------------------------
-
-.segment        "INIT"
-
-initirq:
-        rts
-
-; ------------------------------------------------------------------------
-
-.code
-
-doneirq:
-        rts
diff --git a/libsrc/nes/joy/nes-stdjoy.s b/libsrc/nes/joy/nes-stdjoy.s
deleted file mode 100644 (file)
index b50c212..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-;
-; Standard joypad driver for the NES. May be used multiple times when
-; linked to the statically application.
-;
-; Ullrich von Bassewitz, 2003-05-02
-; Stefan Haubenthal, 2004-10-05
-;
-
-        .include        "zeropage.inc"
-
-        .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-        .include        "nes.inc"
-
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _nes_stdjoy_joy
-
-; Driver signature
-
-        .byte   $6A, $6F, $79           ; "joy"
-        .byte   JOY_API_VERSION         ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte   $10                     ; JOY_UP
-        .byte   $20                     ; JOY_DOWN
-        .byte   $40                     ; JOY_LEFT
-        .byte   $80                     ; JOY_RIGHT
-        .byte   $01                     ; JOY_FIRE      (A)
-        .byte   $02                     ; JOY_FIRE2     (B)
-        .byte   $04                     ;               (Select)
-        .byte   $08                     ;               (Start)
-
-; Jump table.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READJOY
-        .addr   0                       ; IRQ entry unused
-
-; ------------------------------------------------------------------------
-; Constants
-
-JOY_COUNT       = 2             ; Number of joysticks we support
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #JOY_ERR_OK
-        ldx     #0
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:
-        lda     #JOY_COUNT
-        ldx     #0
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
-
-READJOY:
-        and     #$01            ; Fix joystick number
-        tay                     ; Joystick number (0,1) into Y
-
-        lda     #1
-        sta     APU_PAD1,y
-        lda     #0
-        sta     APU_PAD1,y
-
-; Read joystick
-
-        ldx     #8
-@Loop:  lda     APU_PAD1,y
-        ror     a
-        ror     tmp1
-        dex
-        bne     @Loop
-
-        lda     tmp1
-;       ldx     #$00            ; X implicitly fixed
-        rts
diff --git a/libsrc/nes/joy_stat_stddrv.s b/libsrc/nes/joy_stat_stddrv.s
deleted file mode 100644 (file)
index 63b046e..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Address of the static standard joystick driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void joy_static_stddrv[];
-;
-
-        .export _joy_static_stddrv
-        .import _nes_stdjoy_joy
-
-.rodata
-
-_joy_static_stddrv := _nes_stdjoy_joy
diff --git a/libsrc/nes/joy_stddrv.s b/libsrc/nes/joy_stddrv.s
deleted file mode 100644 (file)
index b996597..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Name of the standard joystick driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const char joy_stddrv[];
-;
-
-        .export _joy_stddrv
-
-.rodata
-
-_joy_stddrv:    .asciiz "nes-stdjoy.joy"
diff --git a/libsrc/nes/libref.s b/libsrc/nes/libref.s
deleted file mode 100644 (file)
index d947c1a..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-;
-; Oliver Schmidt, 2013-05-31
-;
-
-        .export         joy_libref, tgi_libref
-        .import         _exit
-
-joy_libref      := _exit
-tgi_libref      := _exit
diff --git a/libsrc/nes/mainargs.s b/libsrc/nes/mainargs.s
deleted file mode 100644 (file)
index 7ed8d46..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-03-07
-;
-; Setup arguments for main
-;
-
-
-        .constructor    initmainargs, 24
-        .import         __argc, __argv
-
-
-;---------------------------------------------------------------------------
-; Get possible command-line arguments. Goes into the special INIT segment,
-; which may be reused after the startup code is run
-
-.segment        "INIT"
-
-.proc   initmainargs
-
-        rts
-
-.endproc
-
-
diff --git a/libsrc/nes/neschar.inc b/libsrc/nes/neschar.inc
deleted file mode 100644 (file)
index 1540186..0000000
+++ /dev/null
@@ -1,4608 +0,0 @@
-        .byte   %00000000       ; 0000 1-00:         
-        .byte   %00000000       ; 0001 1-00:         
-        .byte   %00000000       ; 0002 1-00:         
-        .byte   %00000000       ; 0003 1-00:         
-        .byte   %00000000       ; 0004 1-00:         
-        .byte   %00000000       ; 0005 1-00:         
-        .byte   %00000000       ; 0006 1-00:         
-        .byte   %00000000       ; 0007 1-00:         
-
-        .byte   %00000000       ; 0008 1-01:         
-        .byte   %00000000       ; 0009 1-01:         
-        .byte   %00000000       ; 000A 1-01:         
-        .byte   %00000000       ; 000B 1-01:         
-        .byte   %00000000       ; 000C 1-01:         
-        .byte   %00000000       ; 000D 1-01:         
-        .byte   %00000000       ; 000E 1-01:         
-        .byte   %00000000       ; 000F 1-01:         
-
-        .byte   %11001100       ; 0010 1-02: **  **  
-        .byte   %11001100       ; 0011 1-02: **  **  
-        .byte   %00110011       ; 0012 1-02:   **  **
-        .byte   %00110011       ; 0013 1-02:   **  **
-        .byte   %11001100       ; 0014 1-02: **  **  
-        .byte   %11001100       ; 0015 1-02: **  **  
-        .byte   %00110011       ; 0016 1-02:   **  **
-        .byte   %00110011       ; 0017 1-02:   **  **
-
-        .byte   %11001100       ; 0018 1-03: **  **  
-        .byte   %11001100       ; 0019 1-03: **  **  
-        .byte   %00110011       ; 001A 1-03:   **  **
-        .byte   %00110011       ; 001B 1-03:   **  **
-        .byte   %11001100       ; 001C 1-03: **  **  
-        .byte   %11001100       ; 001D 1-03: **  **  
-        .byte   %00110011       ; 001E 1-03:   **  **
-        .byte   %00110011       ; 001F 1-03:   **  **
-
-        .byte   %00000000       ; 0020 1-04:         
-        .byte   %00011000       ; 0021 1-04:    **   
-        .byte   %00111100       ; 0022 1-04:   ****  
-        .byte   %01111110       ; 0023 1-04:  ****** 
-        .byte   %00011000       ; 0024 1-04:    **   
-        .byte   %00011000       ; 0025 1-04:    **   
-        .byte   %00011000       ; 0026 1-04:    **   
-        .byte   %00011000       ; 0027 1-04:    **   
-
-        .byte   %00000000       ; 0028 1-05:         
-        .byte   %00011000       ; 0029 1-05:    **   
-        .byte   %00111100       ; 002A 1-05:   ****  
-        .byte   %01111110       ; 002B 1-05:  ****** 
-        .byte   %00011000       ; 002C 1-05:    **   
-        .byte   %00011000       ; 002D 1-05:    **   
-        .byte   %00011000       ; 002E 1-05:    **   
-        .byte   %00011000       ; 002F 1-05:    **   
-
-        .byte   %00000000       ; 0030 1-06:         
-        .byte   %00010000       ; 0031 1-06:    *    
-        .byte   %00110000       ; 0032 1-06:   **    
-        .byte   %01111111       ; 0033 1-06:  *******
-        .byte   %01111111       ; 0034 1-06:  *******
-        .byte   %00110000       ; 0035 1-06:   **    
-        .byte   %00010000       ; 0036 1-06:    *    
-        .byte   %00000000       ; 0037 1-06:         
-
-        .byte   %00000000       ; 0038 1-07:         
-        .byte   %00010000       ; 0039 1-07:    *    
-        .byte   %00110000       ; 003A 1-07:   **    
-        .byte   %01111111       ; 003B 1-07:  *******
-        .byte   %01111111       ; 003C 1-07:  *******
-        .byte   %00110000       ; 003D 1-07:   **    
-        .byte   %00010000       ; 003E 1-07:    *    
-        .byte   %00000000       ; 003F 1-07:         
-
-        .byte   %00001100       ; 0040 1-08:     **  
-        .byte   %00010010       ; 0041 1-08:    *  * 
-        .byte   %00110000       ; 0042 1-08:   **    
-        .byte   %01111100       ; 0043 1-08:  *****  
-        .byte   %00110000       ; 0044 1-08:   **    
-        .byte   %01100010       ; 0045 1-08:  **   * 
-        .byte   %11111100       ; 0046 1-08: ******  
-        .byte   %00000000       ; 0047 1-08:         
-
-        .byte   %00001100       ; 0048 1-09:     **  
-        .byte   %00010010       ; 0049 1-09:    *  * 
-        .byte   %00110000       ; 004A 1-09:   **    
-        .byte   %01111100       ; 004B 1-09:  *****  
-        .byte   %00110000       ; 004C 1-09:   **    
-        .byte   %01100010       ; 004D 1-09:  **   * 
-        .byte   %11111100       ; 004E 1-09: ******  
-        .byte   %00000000       ; 004F 1-09:         
-
-        .byte   %00000000       ; 0050 1-0a:         
-        .byte   %00000000       ; 0051 1-0a:         
-        .byte   %00000011       ; 0052 1-0a:       **
-        .byte   %00111110       ; 0053 1-0a:   ***** 
-        .byte   %01110110       ; 0054 1-0a:  *** ** 
-        .byte   %00110110       ; 0055 1-0a:   ** ** 
-        .byte   %00110110       ; 0056 1-0a:   ** ** 
-        .byte   %00000000       ; 0057 1-0a:         
-
-        .byte   %00000000       ; 0058 1-0b:         
-        .byte   %00000000       ; 0059 1-0b:         
-        .byte   %00000011       ; 005A 1-0b:       **
-        .byte   %00111110       ; 005B 1-0b:   ***** 
-        .byte   %01110110       ; 005C 1-0b:  *** ** 
-        .byte   %00110110       ; 005D 1-0b:   ** ** 
-        .byte   %00110110       ; 005E 1-0b:   ** ** 
-        .byte   %00000000       ; 005F 1-0b:         
-
-        .byte   %01111111       ; 0060 1-0c:  *******
-        .byte   %01111111       ; 0061 1-0c:  *******
-        .byte   %00000000       ; 0062 1-0c:         
-        .byte   %00000000       ; 0063 1-0c:         
-        .byte   %00000000       ; 0064 1-0c:         
-        .byte   %00000000       ; 0065 1-0c:         
-        .byte   %00000000       ; 0066 1-0c:         
-        .byte   %00000000       ; 0067 1-0c:         
-
-        .byte   %01111111       ; 0068 1-0d:  *******
-        .byte   %01111111       ; 0069 1-0d:  *******
-        .byte   %00000000       ; 006A 1-0d:         
-        .byte   %00000000       ; 006B 1-0d:         
-        .byte   %00000000       ; 006C 1-0d:         
-        .byte   %00000000       ; 006D 1-0d:         
-        .byte   %00000000       ; 006E 1-0d:         
-        .byte   %00000000       ; 006F 1-0d:         
-
-        .byte   %11100000       ; 0070 1-0e: ***     
-        .byte   %11100000       ; 0071 1-0e: ***     
-        .byte   %01100000       ; 0072 1-0e:  **     
-        .byte   %01100000       ; 0073 1-0e:  **     
-        .byte   %01100000       ; 0074 1-0e:  **     
-        .byte   %01100000       ; 0075 1-0e:  **     
-        .byte   %01100000       ; 0076 1-0e:  **     
-        .byte   %01100000       ; 0077 1-0e:  **     
-
-        .byte   %11100000       ; 0078 1-0f: ***     
-        .byte   %11100000       ; 0079 1-0f: ***     
-        .byte   %01100000       ; 007A 1-0f:  **     
-        .byte   %01100000       ; 007B 1-0f:  **     
-        .byte   %01100000       ; 007C 1-0f:  **     
-        .byte   %01100000       ; 007D 1-0f:  **     
-        .byte   %01100000       ; 007E 1-0f:  **     
-        .byte   %01100000       ; 007F 1-0f:  **     
-
-        .byte   %00011000       ; 0080 1-10:    **   
-        .byte   %00011000       ; 0081 1-10:    **   
-        .byte   %00011000       ; 0082 1-10:    **   
-        .byte   %11111000       ; 0083 1-10: *****   
-        .byte   %11111000       ; 0084 1-10: *****   
-        .byte   %00000000       ; 0085 1-10:         
-        .byte   %00000000       ; 0086 1-10:         
-        .byte   %00000000       ; 0087 1-10:         
-
-        .byte   %00011000       ; 0088 1-11:    **   
-        .byte   %00011000       ; 0089 1-11:    **   
-        .byte   %00011000       ; 008A 1-11:    **   
-        .byte   %11111000       ; 008B 1-11: *****   
-        .byte   %11111000       ; 008C 1-11: *****   
-        .byte   %00000000       ; 008D 1-11:         
-        .byte   %00000000       ; 008E 1-11:         
-        .byte   %00000000       ; 008F 1-11:         
-
-        .byte   %11001100       ; 0090 1-12: **  **  
-        .byte   %10011001       ; 0091 1-12: *  **  *
-        .byte   %00110011       ; 0092 1-12:   **  **
-        .byte   %01100110       ; 0093 1-12:  **  ** 
-        .byte   %11001100       ; 0094 1-12: **  **  
-        .byte   %10011001       ; 0095 1-12: *  **  *
-        .byte   %00110011       ; 0096 1-12:   **  **
-        .byte   %01100110       ; 0097 1-12:  **  ** 
-
-        .byte   %11001100       ; 0098 1-13: **  **  
-        .byte   %10011001       ; 0099 1-13: *  **  *
-        .byte   %00110011       ; 009A 1-13:   **  **
-        .byte   %01100110       ; 009B 1-13:  **  ** 
-        .byte   %11001100       ; 009C 1-13: **  **  
-        .byte   %10011001       ; 009D 1-13: *  **  *
-        .byte   %00110011       ; 009E 1-13:   **  **
-        .byte   %01100110       ; 009F 1-13:  **  ** 
-
-        .byte   %00110011       ; 00A0 1-14:   **  **
-        .byte   %10011001       ; 00A1 1-14: *  **  *
-        .byte   %11001100       ; 00A2 1-14: **  **  
-        .byte   %01100110       ; 00A3 1-14:  **  ** 
-        .byte   %00110011       ; 00A4 1-14:   **  **
-        .byte   %10011001       ; 00A5 1-14: *  **  *
-        .byte   %11001100       ; 00A6 1-14: **  **  
-        .byte   %01100110       ; 00A7 1-14:  **  ** 
-
-        .byte   %00110011       ; 00A8 1-15:   **  **
-        .byte   %10011001       ; 00A9 1-15: *  **  *
-        .byte   %11001100       ; 00AA 1-15: **  **  
-        .byte   %01100110       ; 00AB 1-15:  **  ** 
-        .byte   %00110011       ; 00AC 1-15:   **  **
-        .byte   %10011001       ; 00AD 1-15: *  **  *
-        .byte   %11001100       ; 00AE 1-15: **  **  
-        .byte   %01100110       ; 00AF 1-15:  **  ** 
-
-        .byte   %00000000       ; 00B0 1-16:         
-        .byte   %00000000       ; 00B1 1-16:         
-        .byte   %00000000       ; 00B2 1-16:         
-        .byte   %11111111       ; 00B3 1-16: ********
-        .byte   %11111111       ; 00B4 1-16: ********
-        .byte   %00000000       ; 00B5 1-16:         
-        .byte   %00000000       ; 00B6 1-16:         
-        .byte   %00000000       ; 00B7 1-16:         
-
-        .byte   %00000000       ; 00B8 1-17:         
-        .byte   %00000000       ; 00B9 1-17:         
-        .byte   %00000000       ; 00BA 1-17:         
-        .byte   %11111111       ; 00BB 1-17: ********
-        .byte   %11111111       ; 00BC 1-17: ********
-        .byte   %00000000       ; 00BD 1-17:         
-        .byte   %00000000       ; 00BE 1-17:         
-        .byte   %00000000       ; 00BF 1-17:         
-
-        .byte   %00000011       ; 00C0 1-18:       **
-        .byte   %00000011       ; 00C1 1-18:       **
-        .byte   %00000011       ; 00C2 1-18:       **
-        .byte   %00000011       ; 00C3 1-18:       **
-        .byte   %00000011       ; 00C4 1-18:       **
-        .byte   %00000011       ; 00C5 1-18:       **
-        .byte   %00000011       ; 00C6 1-18:       **
-        .byte   %00000011       ; 00C7 1-18:       **
-
-        .byte   %00000011       ; 00C8 1-19:       **
-        .byte   %00000011       ; 00C9 1-19:       **
-        .byte   %00000011       ; 00CA 1-19:       **
-        .byte   %00000011       ; 00CB 1-19:       **
-        .byte   %00000011       ; 00CC 1-19:       **
-        .byte   %00000011       ; 00CD 1-19:       **
-        .byte   %00000011       ; 00CE 1-19:       **
-        .byte   %00000011       ; 00CF 1-19:       **
-
-        .byte   %00000000       ; 00D0 1-1a:         
-        .byte   %00000000       ; 00D1 1-1a:         
-        .byte   %00000000       ; 00D2 1-1a:         
-        .byte   %00000000       ; 00D3 1-1a:         
-        .byte   %11001100       ; 00D4 1-1a: **  **  
-        .byte   %11001100       ; 00D5 1-1a: **  **  
-        .byte   %00110011       ; 00D6 1-1a:   **  **
-        .byte   %00110011       ; 00D7 1-1a:   **  **
-
-        .byte   %00000000       ; 00D8 1-1b:         
-        .byte   %00000000       ; 00D9 1-1b:         
-        .byte   %00000000       ; 00DA 1-1b:         
-        .byte   %00000000       ; 00DB 1-1b:         
-        .byte   %11001100       ; 00DC 1-1b: **  **  
-        .byte   %11001100       ; 00DD 1-1b: **  **  
-        .byte   %00110011       ; 00DE 1-1b:   **  **
-        .byte   %00110011       ; 00DF 1-1b:   **  **
-
-        .byte   %00011000       ; 00E0 1-1c:    **   
-        .byte   %00011000       ; 00E1 1-1c:    **   
-        .byte   %00011000       ; 00E2 1-1c:    **   
-        .byte   %00011000       ; 00E3 1-1c:    **   
-        .byte   %00011000       ; 00E4 1-1c:    **   
-        .byte   %00011000       ; 00E5 1-1c:    **   
-        .byte   %00011000       ; 00E6 1-1c:    **   
-        .byte   %00011000       ; 00E7 1-1c:    **   
-
-        .byte   %00011000       ; 00E8 1-1d:    **   
-        .byte   %00011000       ; 00E9 1-1d:    **   
-        .byte   %00011000       ; 00EA 1-1d:    **   
-        .byte   %00011000       ; 00EB 1-1d:    **   
-        .byte   %00011000       ; 00EC 1-1d:    **   
-        .byte   %00011000       ; 00ED 1-1d:    **   
-        .byte   %00011000       ; 00EE 1-1d:    **   
-        .byte   %00011000       ; 00EF 1-1d:    **   
-
-        .byte   %00011000       ; 00F0 1-1e:    **   
-        .byte   %00011000       ; 00F1 1-1e:    **   
-        .byte   %00011000       ; 00F2 1-1e:    **   
-        .byte   %00011111       ; 00F3 1-1e:    *****
-        .byte   %00011111       ; 00F4 1-1e:    *****
-        .byte   %00011000       ; 00F5 1-1e:    **   
-        .byte   %00011000       ; 00F6 1-1e:    **   
-        .byte   %00011000       ; 00F7 1-1e:    **   
-
-        .byte   %00011000       ; 00F8 1-1f:    **   
-        .byte   %00011000       ; 00F9 1-1f:    **   
-        .byte   %00011000       ; 00FA 1-1f:    **   
-        .byte   %00011111       ; 00FB 1-1f:    *****
-        .byte   %00011111       ; 00FC 1-1f:    *****
-        .byte   %00011000       ; 00FD 1-1f:    **   
-        .byte   %00011000       ; 00FE 1-1f:    **   
-        .byte   %00011000       ; 00FF 1-1f:    **   
-
-        .byte   %00011000       ; 0100 1-20:    **   
-        .byte   %00011000       ; 0101 1-20:    **   
-        .byte   %00011000       ; 0102 1-20:    **   
-        .byte   %11111111       ; 0103 1-20: ********
-        .byte   %11111111       ; 0104 1-20: ********
-        .byte   %00011000       ; 0105 1-20:    **   
-        .byte   %00011000       ; 0106 1-20:    **   
-        .byte   %00011000       ; 0107 1-20:    **   
-
-        .byte   %00011000       ; 0108 1-21:    **   
-        .byte   %00011000       ; 0109 1-21:    **   
-        .byte   %00011000       ; 010A 1-21:    **   
-        .byte   %11111111       ; 010B 1-21: ********
-        .byte   %11111111       ; 010C 1-21: ********
-        .byte   %00011000       ; 010D 1-21:    **   
-        .byte   %00011000       ; 010E 1-21:    **   
-        .byte   %00011000       ; 010F 1-21:    **   
-
-        .byte   %00011000       ; 0110 1-22:    **   
-        .byte   %00011000       ; 0111 1-22:    **   
-        .byte   %00011000       ; 0112 1-22:    **   
-        .byte   %00011111       ; 0113 1-22:    *****
-        .byte   %00011111       ; 0114 1-22:    *****
-        .byte   %00000000       ; 0115 1-22:         
-        .byte   %00000000       ; 0116 1-22:         
-        .byte   %00000000       ; 0117 1-22:         
-
-        .byte   %00011000       ; 0118 1-23:    **   
-        .byte   %00011000       ; 0119 1-23:    **   
-        .byte   %00011000       ; 011A 1-23:    **   
-        .byte   %00011111       ; 011B 1-23:    *****
-        .byte   %00011111       ; 011C 1-23:    *****
-        .byte   %00000000       ; 011D 1-23:         
-        .byte   %00000000       ; 011E 1-23:         
-        .byte   %00000000       ; 011F 1-23:         
-
-        .byte   %00000000       ; 0120 1-24:         
-        .byte   %00000000       ; 0121 1-24:         
-        .byte   %00000000       ; 0122 1-24:         
-        .byte   %11111000       ; 0123 1-24: *****   
-        .byte   %11111000       ; 0124 1-24: *****   
-        .byte   %00011000       ; 0125 1-24:    **   
-        .byte   %00011000       ; 0126 1-24:    **   
-        .byte   %00011000       ; 0127 1-24:    **   
-
-        .byte   %00000000       ; 0128 1-25:         
-        .byte   %00000000       ; 0129 1-25:         
-        .byte   %00000000       ; 012A 1-25:         
-        .byte   %11111000       ; 012B 1-25: *****   
-        .byte   %11111000       ; 012C 1-25: *****   
-        .byte   %00011000       ; 012D 1-25:    **   
-        .byte   %00011000       ; 012E 1-25:    **   
-        .byte   %00011000       ; 012F 1-25:    **   
-
-        .byte   %00000000       ; 0130 1-26:         
-        .byte   %00000000       ; 0131 1-26:         
-        .byte   %00000000       ; 0132 1-26:         
-        .byte   %00000000       ; 0133 1-26:         
-        .byte   %00000000       ; 0134 1-26:         
-        .byte   %00000000       ; 0135 1-26:         
-        .byte   %11111111       ; 0136 1-26: ********
-        .byte   %11111111       ; 0137 1-26: ********
-
-        .byte   %00000000       ; 0138 1-27:         
-        .byte   %00000000       ; 0139 1-27:         
-        .byte   %00000000       ; 013A 1-27:         
-        .byte   %00000000       ; 013B 1-27:         
-        .byte   %00000000       ; 013C 1-27:         
-        .byte   %00000000       ; 013D 1-27:         
-        .byte   %11111111       ; 013E 1-27: ********
-        .byte   %11111111       ; 013F 1-27: ********
-
-        .byte   %00000000       ; 0140 1-28:         
-        .byte   %00000000       ; 0141 1-28:         
-        .byte   %00000000       ; 0142 1-28:         
-        .byte   %00011111       ; 0143 1-28:    *****
-        .byte   %00011111       ; 0144 1-28:    *****
-        .byte   %00011000       ; 0145 1-28:    **   
-        .byte   %00011000       ; 0146 1-28:    **   
-        .byte   %00011000       ; 0147 1-28:    **   
-
-        .byte   %00000000       ; 0148 1-29:         
-        .byte   %00000000       ; 0149 1-29:         
-        .byte   %00000000       ; 014A 1-29:         
-        .byte   %00011111       ; 014B 1-29:    *****
-        .byte   %00011111       ; 014C 1-29:    *****
-        .byte   %00011000       ; 014D 1-29:    **   
-        .byte   %00011000       ; 014E 1-29:    **   
-        .byte   %00011000       ; 014F 1-29:    **   
-
-        .byte   %00011000       ; 0150 1-2a:    **   
-        .byte   %00011000       ; 0151 1-2a:    **   
-        .byte   %00011000       ; 0152 1-2a:    **   
-        .byte   %11111111       ; 0153 1-2a: ********
-        .byte   %11111111       ; 0154 1-2a: ********
-        .byte   %00000000       ; 0155 1-2a:         
-        .byte   %00000000       ; 0156 1-2a:         
-        .byte   %00000000       ; 0157 1-2a:         
-
-        .byte   %00011000       ; 0158 1-2b:    **   
-        .byte   %00011000       ; 0159 1-2b:    **   
-        .byte   %00011000       ; 015A 1-2b:    **   
-        .byte   %11111111       ; 015B 1-2b: ********
-        .byte   %11111111       ; 015C 1-2b: ********
-        .byte   %00000000       ; 015D 1-2b:         
-        .byte   %00000000       ; 015E 1-2b:         
-        .byte   %00000000       ; 015F 1-2b:         
-
-        .byte   %00000000       ; 0160 1-2c:         
-        .byte   %00000000       ; 0161 1-2c:         
-        .byte   %00000000       ; 0162 1-2c:         
-        .byte   %11111111       ; 0163 1-2c: ********
-        .byte   %11111111       ; 0164 1-2c: ********
-        .byte   %00011000       ; 0165 1-2c:    **   
-        .byte   %00011000       ; 0166 1-2c:    **   
-        .byte   %00011000       ; 0167 1-2c:    **   
-
-        .byte   %00000000       ; 0168 1-2d:         
-        .byte   %00000000       ; 0169 1-2d:         
-        .byte   %00000000       ; 016A 1-2d:         
-        .byte   %11111111       ; 016B 1-2d: ********
-        .byte   %11111111       ; 016C 1-2d: ********
-        .byte   %00011000       ; 016D 1-2d:    **   
-        .byte   %00011000       ; 016E 1-2d:    **   
-        .byte   %00011000       ; 016F 1-2d:    **   
-
-        .byte   %00011000       ; 0170 1-2e:    **   
-        .byte   %00011000       ; 0171 1-2e:    **   
-        .byte   %00011000       ; 0172 1-2e:    **   
-        .byte   %11111000       ; 0173 1-2e: *****   
-        .byte   %11111000       ; 0174 1-2e: *****   
-        .byte   %00011000       ; 0175 1-2e:    **   
-        .byte   %00011000       ; 0176 1-2e:    **   
-        .byte   %00011000       ; 0177 1-2e:    **   
-
-        .byte   %00011000       ; 0178 1-2f:    **   
-        .byte   %00011000       ; 0179 1-2f:    **   
-        .byte   %00011000       ; 017A 1-2f:    **   
-        .byte   %11111000       ; 017B 1-2f: *****   
-        .byte   %11111000       ; 017C 1-2f: *****   
-        .byte   %00011000       ; 017D 1-2f:    **   
-        .byte   %00011000       ; 017E 1-2f:    **   
-        .byte   %00011000       ; 017F 1-2f:    **   
-
-        .byte   %11110000       ; 0180 1-30: ****    
-        .byte   %11110000       ; 0181 1-30: ****    
-        .byte   %11110000       ; 0182 1-30: ****    
-        .byte   %11110000       ; 0183 1-30: ****    
-        .byte   %11110000       ; 0184 1-30: ****    
-        .byte   %11110000       ; 0185 1-30: ****    
-        .byte   %11110000       ; 0186 1-30: ****    
-        .byte   %11110000       ; 0187 1-30: ****    
-
-        .byte   %11110000       ; 0188 1-31: ****    
-        .byte   %11110000       ; 0189 1-31: ****    
-        .byte   %11110000       ; 018A 1-31: ****    
-        .byte   %11110000       ; 018B 1-31: ****    
-        .byte   %11110000       ; 018C 1-31: ****    
-        .byte   %11110000       ; 018D 1-31: ****    
-        .byte   %11110000       ; 018E 1-31: ****    
-        .byte   %11110000       ; 018F 1-31: ****    
-
-        .byte   %00000000       ; 0190 1-32:         
-        .byte   %00000000       ; 0191 1-32:         
-        .byte   %00000000       ; 0192 1-32:         
-        .byte   %00000000       ; 0193 1-32:         
-        .byte   %11111111       ; 0194 1-32: ********
-        .byte   %11111111       ; 0195 1-32: ********
-        .byte   %11111111       ; 0196 1-32: ********
-        .byte   %11111111       ; 0197 1-32: ********
-
-        .byte   %00000000       ; 0198 1-33:         
-        .byte   %00000000       ; 0199 1-33:         
-        .byte   %00000000       ; 019A 1-33:         
-        .byte   %00000000       ; 019B 1-33:         
-        .byte   %11111111       ; 019C 1-33: ********
-        .byte   %11111111       ; 019D 1-33: ********
-        .byte   %11111111       ; 019E 1-33: ********
-        .byte   %11111111       ; 019F 1-33: ********
-
-        .byte   %00000000       ; 01A0 1-34:         
-        .byte   %00000000       ; 01A1 1-34:         
-        .byte   %00000000       ; 01A2 1-34:         
-        .byte   %00000000       ; 01A3 1-34:         
-        .byte   %11110000       ; 01A4 1-34: ****    
-        .byte   %11110000       ; 01A5 1-34: ****    
-        .byte   %11110000       ; 01A6 1-34: ****    
-        .byte   %11110000       ; 01A7 1-34: ****    
-
-        .byte   %00000000       ; 01A8 1-35:         
-        .byte   %00000000       ; 01A9 1-35:         
-        .byte   %00000000       ; 01AA 1-35:         
-        .byte   %00000000       ; 01AB 1-35:         
-        .byte   %11110000       ; 01AC 1-35: ****    
-        .byte   %11110000       ; 01AD 1-35: ****    
-        .byte   %11110000       ; 01AE 1-35: ****    
-        .byte   %11110000       ; 01AF 1-35: ****    
-
-        .byte   %11000000       ; 01B0 1-36: **      
-        .byte   %11000000       ; 01B1 1-36: **      
-        .byte   %00110000       ; 01B2 1-36:   **    
-        .byte   %00110000       ; 01B3 1-36:   **    
-        .byte   %11000000       ; 01B4 1-36: **      
-        .byte   %11000000       ; 01B5 1-36: **      
-        .byte   %00110000       ; 01B6 1-36:   **    
-        .byte   %00110000       ; 01B7 1-36:   **    
-
-        .byte   %11000000       ; 01B8 1-37: **      
-        .byte   %11000000       ; 01B9 1-37: **      
-        .byte   %00110000       ; 01BA 1-37:   **    
-        .byte   %00110000       ; 01BB 1-37:   **    
-        .byte   %11000000       ; 01BC 1-37: **      
-        .byte   %11000000       ; 01BD 1-37: **      
-        .byte   %00110000       ; 01BE 1-37:   **    
-        .byte   %00110000       ; 01BF 1-37:   **    
-
-        .byte   %00001111       ; 01C0 1-38:     ****
-        .byte   %00001111       ; 01C1 1-38:     ****
-        .byte   %00001111       ; 01C2 1-38:     ****
-        .byte   %00001111       ; 01C3 1-38:     ****
-        .byte   %00000000       ; 01C4 1-38:         
-        .byte   %00000000       ; 01C5 1-38:         
-        .byte   %00000000       ; 01C6 1-38:         
-        .byte   %00000000       ; 01C7 1-38:         
-
-        .byte   %00001111       ; 01C8 1-39:     ****
-        .byte   %00001111       ; 01C9 1-39:     ****
-        .byte   %00001111       ; 01CA 1-39:     ****
-        .byte   %00001111       ; 01CB 1-39:     ****
-        .byte   %00000000       ; 01CC 1-39:         
-        .byte   %00000000       ; 01CD 1-39:         
-        .byte   %00000000       ; 01CE 1-39:         
-        .byte   %00000000       ; 01CF 1-39:         
-
-        .byte   %00000000       ; 01D0 1-3a:         
-        .byte   %00000000       ; 01D1 1-3a:         
-        .byte   %00000000       ; 01D2 1-3a:         
-        .byte   %00000000       ; 01D3 1-3a:         
-        .byte   %00001111       ; 01D4 1-3a:     ****
-        .byte   %00001111       ; 01D5 1-3a:     ****
-        .byte   %00001111       ; 01D6 1-3a:     ****
-        .byte   %00001111       ; 01D7 1-3a:     ****
-
-        .byte   %00000000       ; 01D8 1-3b:         
-        .byte   %00000000       ; 01D9 1-3b:         
-        .byte   %00000000       ; 01DA 1-3b:         
-        .byte   %00000000       ; 01DB 1-3b:         
-        .byte   %00001111       ; 01DC 1-3b:     ****
-        .byte   %00001111       ; 01DD 1-3b:     ****
-        .byte   %00001111       ; 01DE 1-3b:     ****
-        .byte   %00001111       ; 01DF 1-3b:     ****
-
-        .byte   %11110000       ; 01E0 1-3c: ****    
-        .byte   %11110000       ; 01E1 1-3c: ****    
-        .byte   %11110000       ; 01E2 1-3c: ****    
-        .byte   %11110000       ; 01E3 1-3c: ****    
-        .byte   %00000000       ; 01E4 1-3c:         
-        .byte   %00000000       ; 01E5 1-3c:         
-        .byte   %00000000       ; 01E6 1-3c:         
-        .byte   %00000000       ; 01E7 1-3c:         
-
-        .byte   %11110000       ; 01E8 1-3d: ****    
-        .byte   %11110000       ; 01E9 1-3d: ****    
-        .byte   %11110000       ; 01EA 1-3d: ****    
-        .byte   %11110000       ; 01EB 1-3d: ****    
-        .byte   %00000000       ; 01EC 1-3d:         
-        .byte   %00000000       ; 01ED 1-3d:         
-        .byte   %00000000       ; 01EE 1-3d:         
-        .byte   %00000000       ; 01EF 1-3d:         
-
-        .byte   %11110000       ; 01F0 1-3e: ****    
-        .byte   %11110000       ; 01F1 1-3e: ****    
-        .byte   %11110000       ; 01F2 1-3e: ****    
-        .byte   %11110000       ; 01F3 1-3e: ****    
-        .byte   %00001111       ; 01F4 1-3e:     ****
-        .byte   %00001111       ; 01F5 1-3e:     ****
-        .byte   %00001111       ; 01F6 1-3e:     ****
-        .byte   %00001111       ; 01F7 1-3e:     ****
-
-        .byte   %11110000       ; 01F8 1-3f: ****    
-        .byte   %11110000       ; 01F9 1-3f: ****    
-        .byte   %11110000       ; 01FA 1-3f: ****    
-        .byte   %11110000       ; 01FB 1-3f: ****    
-        .byte   %00001111       ; 01FC 1-3f:     ****
-        .byte   %00001111       ; 01FD 1-3f:     ****
-        .byte   %00001111       ; 01FE 1-3f:     ****
-        .byte   %00001111       ; 01FF 1-3f:     ****
-
-        .byte   %00000000       ; 0200 1-40:         
-        .byte   %00000000       ; 0201 1-40:         
-        .byte   %00000000       ; 0202 1-40:         
-        .byte   %00000000       ; 0203 1-40:         
-        .byte   %00000000       ; 0204 1-40:         
-        .byte   %00000000       ; 0205 1-40:         
-        .byte   %00000000       ; 0206 1-40:         
-        .byte   %00000000       ; 0207 1-40:         
-
-        .byte   %00000000       ; 0208 1-41:         
-        .byte   %00000000       ; 0209 1-41:         
-        .byte   %00000000       ; 020A 1-41:         
-        .byte   %00000000       ; 020B 1-41:         
-        .byte   %00000000       ; 020C 1-41:         
-        .byte   %00000000       ; 020D 1-41:         
-        .byte   %00000000       ; 020E 1-41:         
-        .byte   %00000000       ; 020F 1-41:         
-
-        .byte   %00011000       ; 0210 1-42:    **   
-        .byte   %00011000       ; 0211 1-42:    **   
-        .byte   %00011000       ; 0212 1-42:    **   
-        .byte   %00011000       ; 0213 1-42:    **   
-        .byte   %00000000       ; 0214 1-42:         
-        .byte   %00000000       ; 0215 1-42:         
-        .byte   %00011000       ; 0216 1-42:    **   
-        .byte   %00000000       ; 0217 1-42:         
-
-        .byte   %00011000       ; 0218 1-43:    **   
-        .byte   %00011000       ; 0219 1-43:    **   
-        .byte   %00011000       ; 021A 1-43:    **   
-        .byte   %00011000       ; 021B 1-43:    **   
-        .byte   %00000000       ; 021C 1-43:         
-        .byte   %00000000       ; 021D 1-43:         
-        .byte   %00011000       ; 021E 1-43:    **   
-        .byte   %00000000       ; 021F 1-43:         
-
-        .byte   %01100110       ; 0220 1-44:  **  ** 
-        .byte   %01100110       ; 0221 1-44:  **  ** 
-        .byte   %01100110       ; 0222 1-44:  **  ** 
-        .byte   %00000000       ; 0223 1-44:         
-        .byte   %00000000       ; 0224 1-44:         
-        .byte   %00000000       ; 0225 1-44:         
-        .byte   %00000000       ; 0226 1-44:         
-        .byte   %00000000       ; 0227 1-44:         
-
-        .byte   %01100110       ; 0228 1-45:  **  ** 
-        .byte   %01100110       ; 0229 1-45:  **  ** 
-        .byte   %01100110       ; 022A 1-45:  **  ** 
-        .byte   %00000000       ; 022B 1-45:         
-        .byte   %00000000       ; 022C 1-45:         
-        .byte   %00000000       ; 022D 1-45:         
-        .byte   %00000000       ; 022E 1-45:         
-        .byte   %00000000       ; 022F 1-45:         
-
-        .byte   %01100110       ; 0230 1-46:  **  ** 
-        .byte   %01100110       ; 0231 1-46:  **  ** 
-        .byte   %11111111       ; 0232 1-46: ********
-        .byte   %01100110       ; 0233 1-46:  **  ** 
-        .byte   %11111111       ; 0234 1-46: ********
-        .byte   %01100110       ; 0235 1-46:  **  ** 
-        .byte   %01100110       ; 0236 1-46:  **  ** 
-        .byte   %00000000       ; 0237 1-46:         
-
-        .byte   %01100110       ; 0238 1-47:  **  ** 
-        .byte   %01100110       ; 0239 1-47:  **  ** 
-        .byte   %11111111       ; 023A 1-47: ********
-        .byte   %01100110       ; 023B 1-47:  **  ** 
-        .byte   %11111111       ; 023C 1-47: ********
-        .byte   %01100110       ; 023D 1-47:  **  ** 
-        .byte   %01100110       ; 023E 1-47:  **  ** 
-        .byte   %00000000       ; 023F 1-47:         
-
-        .byte   %00011000       ; 0240 1-48:    **   
-        .byte   %00111110       ; 0241 1-48:   ***** 
-        .byte   %01100000       ; 0242 1-48:  **     
-        .byte   %00111100       ; 0243 1-48:   ****  
-        .byte   %00000110       ; 0244 1-48:      ** 
-        .byte   %01111100       ; 0245 1-48:  *****  
-        .byte   %00011000       ; 0246 1-48:    **   
-        .byte   %00000000       ; 0247 1-48:         
-
-        .byte   %00011000       ; 0248 1-49:    **   
-        .byte   %00111110       ; 0249 1-49:   ***** 
-        .byte   %01100000       ; 024A 1-49:  **     
-        .byte   %00111100       ; 024B 1-49:   ****  
-        .byte   %00000110       ; 024C 1-49:      ** 
-        .byte   %01111100       ; 024D 1-49:  *****  
-        .byte   %00011000       ; 024E 1-49:    **   
-        .byte   %00000000       ; 024F 1-49:         
-
-        .byte   %00000000       ; 0250 1-4a:         
-        .byte   %01100110       ; 0251 1-4a:  **  ** 
-        .byte   %00001100       ; 0252 1-4a:     **  
-        .byte   %00011000       ; 0253 1-4a:    **   
-        .byte   %00110000       ; 0254 1-4a:   **    
-        .byte   %01100110       ; 0255 1-4a:  **  ** 
-        .byte   %01000110       ; 0256 1-4a:  *   ** 
-        .byte   %00000000       ; 0257 1-4a:         
-
-        .byte   %00000000       ; 0258 1-4b:         
-        .byte   %01100110       ; 0259 1-4b:  **  ** 
-        .byte   %00001100       ; 025A 1-4b:     **  
-        .byte   %00011000       ; 025B 1-4b:    **   
-        .byte   %00110000       ; 025C 1-4b:   **    
-        .byte   %01100110       ; 025D 1-4b:  **  ** 
-        .byte   %01000110       ; 025E 1-4b:  *   ** 
-        .byte   %00000000       ; 025F 1-4b:         
-
-        .byte   %00111100       ; 0260 1-4c:   ****  
-        .byte   %01100110       ; 0261 1-4c:  **  ** 
-        .byte   %00111100       ; 0262 1-4c:   ****  
-        .byte   %00111000       ; 0263 1-4c:   ***   
-        .byte   %01100111       ; 0264 1-4c:  **  ***
-        .byte   %01100110       ; 0265 1-4c:  **  ** 
-        .byte   %00111111       ; 0266 1-4c:   ******
-        .byte   %00000000       ; 0267 1-4c:         
-
-        .byte   %00111100       ; 0268 1-4d:   ****  
-        .byte   %01100110       ; 0269 1-4d:  **  ** 
-        .byte   %00111100       ; 026A 1-4d:   ****  
-        .byte   %00111000       ; 026B 1-4d:   ***   
-        .byte   %01100111       ; 026C 1-4d:  **  ***
-        .byte   %01100110       ; 026D 1-4d:  **  ** 
-        .byte   %00111111       ; 026E 1-4d:   ******
-        .byte   %00000000       ; 026F 1-4d:         
-
-        .byte   %00000110       ; 0270 1-4e:      ** 
-        .byte   %00001100       ; 0271 1-4e:     **  
-        .byte   %00011000       ; 0272 1-4e:    **   
-        .byte   %00000000       ; 0273 1-4e:         
-        .byte   %00000000       ; 0274 1-4e:         
-        .byte   %00000000       ; 0275 1-4e:         
-        .byte   %00000000       ; 0276 1-4e:         
-        .byte   %00000000       ; 0277 1-4e:         
-
-        .byte   %00000110       ; 0278 1-4f:      ** 
-        .byte   %00001100       ; 0279 1-4f:     **  
-        .byte   %00011000       ; 027A 1-4f:    **   
-        .byte   %00000000       ; 027B 1-4f:         
-        .byte   %00000000       ; 027C 1-4f:         
-        .byte   %00000000       ; 027D 1-4f:         
-        .byte   %00000000       ; 027E 1-4f:         
-        .byte   %00000000       ; 027F 1-4f:         
-
-        .byte   %00001100       ; 0280 1-50:     **  
-        .byte   %00011000       ; 0281 1-50:    **   
-        .byte   %00110000       ; 0282 1-50:   **    
-        .byte   %00110000       ; 0283 1-50:   **    
-        .byte   %00110000       ; 0284 1-50:   **    
-        .byte   %00011000       ; 0285 1-50:    **   
-        .byte   %00001100       ; 0286 1-50:     **  
-        .byte   %00000000       ; 0287 1-50:         
-
-        .byte   %00001100       ; 0288 1-51:     **  
-        .byte   %00011000       ; 0289 1-51:    **   
-        .byte   %00110000       ; 028A 1-51:   **    
-        .byte   %00110000       ; 028B 1-51:   **    
-        .byte   %00110000       ; 028C 1-51:   **    
-        .byte   %00011000       ; 028D 1-51:    **   
-        .byte   %00001100       ; 028E 1-51:     **  
-        .byte   %00000000       ; 028F 1-51:         
-
-        .byte   %00110000       ; 0290 1-52:   **    
-        .byte   %00011000       ; 0291 1-52:    **   
-        .byte   %00001100       ; 0292 1-52:     **  
-        .byte   %00001100       ; 0293 1-52:     **  
-        .byte   %00001100       ; 0294 1-52:     **  
-        .byte   %00011000       ; 0295 1-52:    **   
-        .byte   %00110000       ; 0296 1-52:   **    
-        .byte   %00000000       ; 0297 1-52:         
-
-        .byte   %00110000       ; 0298 1-53:   **    
-        .byte   %00011000       ; 0299 1-53:    **   
-        .byte   %00001100       ; 029A 1-53:     **  
-        .byte   %00001100       ; 029B 1-53:     **  
-        .byte   %00001100       ; 029C 1-53:     **  
-        .byte   %00011000       ; 029D 1-53:    **   
-        .byte   %00110000       ; 029E 1-53:   **    
-        .byte   %00000000       ; 029F 1-53:         
-
-        .byte   %00000000       ; 02A0 1-54:         
-        .byte   %01100110       ; 02A1 1-54:  **  ** 
-        .byte   %00111100       ; 02A2 1-54:   ****  
-        .byte   %11111111       ; 02A3 1-54: ********
-        .byte   %00111100       ; 02A4 1-54:   ****  
-        .byte   %01100110       ; 02A5 1-54:  **  ** 
-        .byte   %00000000       ; 02A6 1-54:         
-        .byte   %00000000       ; 02A7 1-54:         
-
-        .byte   %00000000       ; 02A8 1-55:         
-        .byte   %01100110       ; 02A9 1-55:  **  ** 
-        .byte   %00111100       ; 02AA 1-55:   ****  
-        .byte   %11111111       ; 02AB 1-55: ********
-        .byte   %00111100       ; 02AC 1-55:   ****  
-        .byte   %01100110       ; 02AD 1-55:  **  ** 
-        .byte   %00000000       ; 02AE 1-55:         
-        .byte   %00000000       ; 02AF 1-55:         
-
-        .byte   %00000000       ; 02B0 1-56:         
-        .byte   %00011000       ; 02B1 1-56:    **   
-        .byte   %00011000       ; 02B2 1-56:    **   
-        .byte   %01111110       ; 02B3 1-56:  ****** 
-        .byte   %00011000       ; 02B4 1-56:    **   
-        .byte   %00011000       ; 02B5 1-56:    **   
-        .byte   %00000000       ; 02B6 1-56:         
-        .byte   %00000000       ; 02B7 1-56:         
-
-        .byte   %00000000       ; 02B8 1-57:         
-        .byte   %00011000       ; 02B9 1-57:    **   
-        .byte   %00011000       ; 02BA 1-57:    **   
-        .byte   %01111110       ; 02BB 1-57:  ****** 
-        .byte   %00011000       ; 02BC 1-57:    **   
-        .byte   %00011000       ; 02BD 1-57:    **   
-        .byte   %00000000       ; 02BE 1-57:         
-        .byte   %00000000       ; 02BF 1-57:         
-
-        .byte   %00000000       ; 02C0 1-58:         
-        .byte   %00000000       ; 02C1 1-58:         
-        .byte   %00000000       ; 02C2 1-58:         
-        .byte   %00000000       ; 02C3 1-58:         
-        .byte   %00000000       ; 02C4 1-58:         
-        .byte   %00011000       ; 02C5 1-58:    **   
-        .byte   %00011000       ; 02C6 1-58:    **   
-        .byte   %00110000       ; 02C7 1-58:   **    
-
-        .byte   %00000000       ; 02C8 1-59:         
-        .byte   %00000000       ; 02C9 1-59:         
-        .byte   %00000000       ; 02CA 1-59:         
-        .byte   %00000000       ; 02CB 1-59:         
-        .byte   %00000000       ; 02CC 1-59:         
-        .byte   %00011000       ; 02CD 1-59:    **   
-        .byte   %00011000       ; 02CE 1-59:    **   
-        .byte   %00110000       ; 02CF 1-59:   **    
-
-        .byte   %00000000       ; 02D0 1-5a:         
-        .byte   %00000000       ; 02D1 1-5a:         
-        .byte   %00000000       ; 02D2 1-5a:         
-        .byte   %01111110       ; 02D3 1-5a:  ****** 
-        .byte   %00000000       ; 02D4 1-5a:         
-        .byte   %00000000       ; 02D5 1-5a:         
-        .byte   %00000000       ; 02D6 1-5a:         
-        .byte   %00000000       ; 02D7 1-5a:         
-
-        .byte   %00000000       ; 02D8 1-5b:         
-        .byte   %00000000       ; 02D9 1-5b:         
-        .byte   %00000000       ; 02DA 1-5b:         
-        .byte   %01111110       ; 02DB 1-5b:  ****** 
-        .byte   %00000000       ; 02DC 1-5b:         
-        .byte   %00000000       ; 02DD 1-5b:         
-        .byte   %00000000       ; 02DE 1-5b:         
-        .byte   %00000000       ; 02DF 1-5b:         
-
-        .byte   %00000000       ; 02E0 1-5c:         
-        .byte   %00000000       ; 02E1 1-5c:         
-        .byte   %00000000       ; 02E2 1-5c:         
-        .byte   %00000000       ; 02E3 1-5c:         
-        .byte   %00000000       ; 02E4 1-5c:         
-        .byte   %00011000       ; 02E5 1-5c:    **   
-        .byte   %00011000       ; 02E6 1-5c:    **   
-        .byte   %00000000       ; 02E7 1-5c:         
-
-        .byte   %00000000       ; 02E8 1-5d:         
-        .byte   %00000000       ; 02E9 1-5d:         
-        .byte   %00000000       ; 02EA 1-5d:         
-        .byte   %00000000       ; 02EB 1-5d:         
-        .byte   %00000000       ; 02EC 1-5d:         
-        .byte   %00011000       ; 02ED 1-5d:    **   
-        .byte   %00011000       ; 02EE 1-5d:    **   
-        .byte   %00000000       ; 02EF 1-5d:         
-
-        .byte   %00000000       ; 02F0 1-5e:         
-        .byte   %00000011       ; 02F1 1-5e:       **
-        .byte   %00000110       ; 02F2 1-5e:      ** 
-        .byte   %00001100       ; 02F3 1-5e:     **  
-        .byte   %00011000       ; 02F4 1-5e:    **   
-        .byte   %00110000       ; 02F5 1-5e:   **    
-        .byte   %01100000       ; 02F6 1-5e:  **     
-        .byte   %00000000       ; 02F7 1-5e:         
-
-        .byte   %00000000       ; 02F8 1-5f:         
-        .byte   %00000011       ; 02F9 1-5f:       **
-        .byte   %00000110       ; 02FA 1-5f:      ** 
-        .byte   %00001100       ; 02FB 1-5f:     **  
-        .byte   %00011000       ; 02FC 1-5f:    **   
-        .byte   %00110000       ; 02FD 1-5f:   **    
-        .byte   %01100000       ; 02FE 1-5f:  **     
-        .byte   %00000000       ; 02FF 1-5f:         
-
-        .byte   %00111100       ; 0300 1-60:   ****  
-        .byte   %01100110       ; 0301 1-60:  **  ** 
-        .byte   %01101110       ; 0302 1-60:  ** *** 
-        .byte   %01110110       ; 0303 1-60:  *** ** 
-        .byte   %01100110       ; 0304 1-60:  **  ** 
-        .byte   %01100110       ; 0305 1-60:  **  ** 
-        .byte   %00111100       ; 0306 1-60:   ****  
-        .byte   %00000000       ; 0307 1-60:         
-
-        .byte   %00111100       ; 0308 1-61:   ****  
-        .byte   %01100110       ; 0309 1-61:  **  ** 
-        .byte   %01101110       ; 030A 1-61:  ** *** 
-        .byte   %01110110       ; 030B 1-61:  *** ** 
-        .byte   %01100110       ; 030C 1-61:  **  ** 
-        .byte   %01100110       ; 030D 1-61:  **  ** 
-        .byte   %00111100       ; 030E 1-61:   ****  
-        .byte   %00000000       ; 030F 1-61:         
-
-        .byte   %00011000       ; 0310 1-62:    **   
-        .byte   %00011000       ; 0311 1-62:    **   
-        .byte   %00111000       ; 0312 1-62:   ***   
-        .byte   %00011000       ; 0313 1-62:    **   
-        .byte   %00011000       ; 0314 1-62:    **   
-        .byte   %00011000       ; 0315 1-62:    **   
-        .byte   %01111110       ; 0316 1-62:  ****** 
-        .byte   %00000000       ; 0317 1-62:         
-
-        .byte   %00011000       ; 0318 1-63:    **   
-        .byte   %00011000       ; 0319 1-63:    **   
-        .byte   %00111000       ; 031A 1-63:   ***   
-        .byte   %00011000       ; 031B 1-63:    **   
-        .byte   %00011000       ; 031C 1-63:    **   
-        .byte   %00011000       ; 031D 1-63:    **   
-        .byte   %01111110       ; 031E 1-63:  ****** 
-        .byte   %00000000       ; 031F 1-63:         
-
-        .byte   %00111100       ; 0320 1-64:   ****  
-        .byte   %01100110       ; 0321 1-64:  **  ** 
-        .byte   %00000110       ; 0322 1-64:      ** 
-        .byte   %00001100       ; 0323 1-64:     **  
-        .byte   %00110000       ; 0324 1-64:   **    
-        .byte   %01100000       ; 0325 1-64:  **     
-        .byte   %01111110       ; 0326 1-64:  ****** 
-        .byte   %00000000       ; 0327 1-64:         
-
-        .byte   %00111100       ; 0328 1-65:   ****  
-        .byte   %01100110       ; 0329 1-65:  **  ** 
-        .byte   %00000110       ; 032A 1-65:      ** 
-        .byte   %00001100       ; 032B 1-65:     **  
-        .byte   %00110000       ; 032C 1-65:   **    
-        .byte   %01100000       ; 032D 1-65:  **     
-        .byte   %01111110       ; 032E 1-65:  ****** 
-        .byte   %00000000       ; 032F 1-65:         
-
-        .byte   %00111100       ; 0330 1-66:   ****  
-        .byte   %01100110       ; 0331 1-66:  **  ** 
-        .byte   %00000110       ; 0332 1-66:      ** 
-        .byte   %00011100       ; 0333 1-66:    ***  
-        .byte   %00000110       ; 0334 1-66:      ** 
-        .byte   %01100110       ; 0335 1-66:  **  ** 
-        .byte   %00111100       ; 0336 1-66:   ****  
-        .byte   %00000000       ; 0337 1-66:         
-
-        .byte   %00111100       ; 0338 1-67:   ****  
-        .byte   %01100110       ; 0339 1-67:  **  ** 
-        .byte   %00000110       ; 033A 1-67:      ** 
-        .byte   %00011100       ; 033B 1-67:    ***  
-        .byte   %00000110       ; 033C 1-67:      ** 
-        .byte   %01100110       ; 033D 1-67:  **  ** 
-        .byte   %00111100       ; 033E 1-67:   ****  
-        .byte   %00000000       ; 033F 1-67:         
-
-        .byte   %00000110       ; 0340 1-68:      ** 
-        .byte   %00001110       ; 0341 1-68:     *** 
-        .byte   %00011110       ; 0342 1-68:    **** 
-        .byte   %01100110       ; 0343 1-68:  **  ** 
-        .byte   %01111111       ; 0344 1-68:  *******
-        .byte   %00000110       ; 0345 1-68:      ** 
-        .byte   %00000110       ; 0346 1-68:      ** 
-        .byte   %00000000       ; 0347 1-68:         
-
-        .byte   %00000110       ; 0348 1-69:      ** 
-        .byte   %00001110       ; 0349 1-69:     *** 
-        .byte   %00011110       ; 034A 1-69:    **** 
-        .byte   %01100110       ; 034B 1-69:  **  ** 
-        .byte   %01111111       ; 034C 1-69:  *******
-        .byte   %00000110       ; 034D 1-69:      ** 
-        .byte   %00000110       ; 034E 1-69:      ** 
-        .byte   %00000000       ; 034F 1-69:         
-
-        .byte   %01111110       ; 0350 1-6a:  ****** 
-        .byte   %01100000       ; 0351 1-6a:  **     
-        .byte   %01111100       ; 0352 1-6a:  *****  
-        .byte   %00000110       ; 0353 1-6a:      ** 
-        .byte   %00000110       ; 0354 1-6a:      ** 
-        .byte   %01100110       ; 0355 1-6a:  **  ** 
-        .byte   %00111100       ; 0356 1-6a:   ****  
-        .byte   %00000000       ; 0357 1-6a:         
-
-        .byte   %01111110       ; 0358 1-6b:  ****** 
-        .byte   %01100000       ; 0359 1-6b:  **     
-        .byte   %01111100       ; 035A 1-6b:  *****  
-        .byte   %00000110       ; 035B 1-6b:      ** 
-        .byte   %00000110       ; 035C 1-6b:      ** 
-        .byte   %01100110       ; 035D 1-6b:  **  ** 
-        .byte   %00111100       ; 035E 1-6b:   ****  
-        .byte   %00000000       ; 035F 1-6b:         
-
-        .byte   %00111100       ; 0360 1-6c:   ****  
-        .byte   %01100110       ; 0361 1-6c:  **  ** 
-        .byte   %01100000       ; 0362 1-6c:  **     
-        .byte   %01111100       ; 0363 1-6c:  *****  
-        .byte   %01100110       ; 0364 1-6c:  **  ** 
-        .byte   %01100110       ; 0365 1-6c:  **  ** 
-        .byte   %00111100       ; 0366 1-6c:   ****  
-        .byte   %00000000       ; 0367 1-6c:         
-
-        .byte   %00111100       ; 0368 1-6d:   ****  
-        .byte   %01100110       ; 0369 1-6d:  **  ** 
-        .byte   %01100000       ; 036A 1-6d:  **     
-        .byte   %01111100       ; 036B 1-6d:  *****  
-        .byte   %01100110       ; 036C 1-6d:  **  ** 
-        .byte   %01100110       ; 036D 1-6d:  **  ** 
-        .byte   %00111100       ; 036E 1-6d:   ****  
-        .byte   %00000000       ; 036F 1-6d:         
-
-        .byte   %01111110       ; 0370 1-6e:  ****** 
-        .byte   %01100110       ; 0371 1-6e:  **  ** 
-        .byte   %00001100       ; 0372 1-6e:     **  
-        .byte   %00011000       ; 0373 1-6e:    **   
-        .byte   %00011000       ; 0374 1-6e:    **   
-        .byte   %00011000       ; 0375 1-6e:    **   
-        .byte   %00011000       ; 0376 1-6e:    **   
-        .byte   %00000000       ; 0377 1-6e:         
-
-        .byte   %01111110       ; 0378 1-6f:  ****** 
-        .byte   %01100110       ; 0379 1-6f:  **  ** 
-        .byte   %00001100       ; 037A 1-6f:     **  
-        .byte   %00011000       ; 037B 1-6f:    **   
-        .byte   %00011000       ; 037C 1-6f:    **   
-        .byte   %00011000       ; 037D 1-6f:    **   
-        .byte   %00011000       ; 037E 1-6f:    **   
-        .byte   %00000000       ; 037F 1-6f:         
-
-        .byte   %00111100       ; 0380 1-70:   ****  
-        .byte   %01100110       ; 0381 1-70:  **  ** 
-        .byte   %01100110       ; 0382 1-70:  **  ** 
-        .byte   %00111100       ; 0383 1-70:   ****  
-        .byte   %01100110       ; 0384 1-70:  **  ** 
-        .byte   %01100110       ; 0385 1-70:  **  ** 
-        .byte   %00111100       ; 0386 1-70:   ****  
-        .byte   %00000000       ; 0387 1-70:         
-
-        .byte   %00111100       ; 0388 1-71:   ****  
-        .byte   %01100110       ; 0389 1-71:  **  ** 
-        .byte   %01100110       ; 038A 1-71:  **  ** 
-        .byte   %00111100       ; 038B 1-71:   ****  
-        .byte   %01100110       ; 038C 1-71:  **  ** 
-        .byte   %01100110       ; 038D 1-71:  **  ** 
-        .byte   %00111100       ; 038E 1-71:   ****  
-        .byte   %00000000       ; 038F 1-71:         
-
-        .byte   %00111100       ; 0390 1-72:   ****  
-        .byte   %01100110       ; 0391 1-72:  **  ** 
-        .byte   %01100110       ; 0392 1-72:  **  ** 
-        .byte   %00111110       ; 0393 1-72:   ***** 
-        .byte   %00000110       ; 0394 1-72:      ** 
-        .byte   %01100110       ; 0395 1-72:  **  ** 
-        .byte   %00111100       ; 0396 1-72:   ****  
-        .byte   %00000000       ; 0397 1-72:         
-
-        .byte   %00111100       ; 0398 1-73:   ****  
-        .byte   %01100110       ; 0399 1-73:  **  ** 
-        .byte   %01100110       ; 039A 1-73:  **  ** 
-        .byte   %00111110       ; 039B 1-73:   ***** 
-        .byte   %00000110       ; 039C 1-73:      ** 
-        .byte   %01100110       ; 039D 1-73:  **  ** 
-        .byte   %00111100       ; 039E 1-73:   ****  
-        .byte   %00000000       ; 039F 1-73:         
-
-        .byte   %00000000       ; 03A0 1-74:         
-        .byte   %00000000       ; 03A1 1-74:         
-        .byte   %00011000       ; 03A2 1-74:    **   
-        .byte   %00000000       ; 03A3 1-74:         
-        .byte   %00000000       ; 03A4 1-74:         
-        .byte   %00011000       ; 03A5 1-74:    **   
-        .byte   %00000000       ; 03A6 1-74:         
-        .byte   %00000000       ; 03A7 1-74:         
-
-        .byte   %00000000       ; 03A8 1-75:         
-        .byte   %00000000       ; 03A9 1-75:         
-        .byte   %00011000       ; 03AA 1-75:    **   
-        .byte   %00000000       ; 03AB 1-75:         
-        .byte   %00000000       ; 03AC 1-75:         
-        .byte   %00011000       ; 03AD 1-75:    **   
-        .byte   %00000000       ; 03AE 1-75:         
-        .byte   %00000000       ; 03AF 1-75:         
-
-        .byte   %00000000       ; 03B0 1-76:         
-        .byte   %00000000       ; 03B1 1-76:         
-        .byte   %00011000       ; 03B2 1-76:    **   
-        .byte   %00000000       ; 03B3 1-76:         
-        .byte   %00000000       ; 03B4 1-76:         
-        .byte   %00011000       ; 03B5 1-76:    **   
-        .byte   %00011000       ; 03B6 1-76:    **   
-        .byte   %00110000       ; 03B7 1-76:   **    
-
-        .byte   %00000000       ; 03B8 1-77:         
-        .byte   %00000000       ; 03B9 1-77:         
-        .byte   %00011000       ; 03BA 1-77:    **   
-        .byte   %00000000       ; 03BB 1-77:         
-        .byte   %00000000       ; 03BC 1-77:         
-        .byte   %00011000       ; 03BD 1-77:    **   
-        .byte   %00011000       ; 03BE 1-77:    **   
-        .byte   %00110000       ; 03BF 1-77:   **    
-
-        .byte   %00001110       ; 03C0 1-78:     *** 
-        .byte   %00011000       ; 03C1 1-78:    **   
-        .byte   %00110000       ; 03C2 1-78:   **    
-        .byte   %01100000       ; 03C3 1-78:  **     
-        .byte   %00110000       ; 03C4 1-78:   **    
-        .byte   %00011000       ; 03C5 1-78:    **   
-        .byte   %00001110       ; 03C6 1-78:     *** 
-        .byte   %00000000       ; 03C7 1-78:         
-
-        .byte   %00001110       ; 03C8 1-79:     *** 
-        .byte   %00011000       ; 03C9 1-79:    **   
-        .byte   %00110000       ; 03CA 1-79:   **    
-        .byte   %01100000       ; 03CB 1-79:  **     
-        .byte   %00110000       ; 03CC 1-79:   **    
-        .byte   %00011000       ; 03CD 1-79:    **   
-        .byte   %00001110       ; 03CE 1-79:     *** 
-        .byte   %00000000       ; 03CF 1-79:         
-
-        .byte   %00000000       ; 03D0 1-7a:         
-        .byte   %00000000       ; 03D1 1-7a:         
-        .byte   %01111110       ; 03D2 1-7a:  ****** 
-        .byte   %00000000       ; 03D3 1-7a:         
-        .byte   %01111110       ; 03D4 1-7a:  ****** 
-        .byte   %00000000       ; 03D5 1-7a:         
-        .byte   %00000000       ; 03D6 1-7a:         
-        .byte   %00000000       ; 03D7 1-7a:         
-
-        .byte   %00000000       ; 03D8 1-7b:         
-        .byte   %00000000       ; 03D9 1-7b:         
-        .byte   %01111110       ; 03DA 1-7b:  ****** 
-        .byte   %00000000       ; 03DB 1-7b:         
-        .byte   %01111110       ; 03DC 1-7b:  ****** 
-        .byte   %00000000       ; 03DD 1-7b:         
-        .byte   %00000000       ; 03DE 1-7b:         
-        .byte   %00000000       ; 03DF 1-7b:         
-
-        .byte   %01110000       ; 03E0 1-7c:  ***    
-        .byte   %00011000       ; 03E1 1-7c:    **   
-        .byte   %00001100       ; 03E2 1-7c:     **  
-        .byte   %00000110       ; 03E3 1-7c:      ** 
-        .byte   %00001100       ; 03E4 1-7c:     **  
-        .byte   %00011000       ; 03E5 1-7c:    **   
-        .byte   %01110000       ; 03E6 1-7c:  ***    
-        .byte   %00000000       ; 03E7 1-7c:         
-
-        .byte   %01110000       ; 03E8 1-7d:  ***    
-        .byte   %00011000       ; 03E9 1-7d:    **   
-        .byte   %00001100       ; 03EA 1-7d:     **  
-        .byte   %00000110       ; 03EB 1-7d:      ** 
-        .byte   %00001100       ; 03EC 1-7d:     **  
-        .byte   %00011000       ; 03ED 1-7d:    **   
-        .byte   %01110000       ; 03EE 1-7d:  ***    
-        .byte   %00000000       ; 03EF 1-7d:         
-
-        .byte   %00111100       ; 03F0 1-7e:   ****  
-        .byte   %01100110       ; 03F1 1-7e:  **  ** 
-        .byte   %00000110       ; 03F2 1-7e:      ** 
-        .byte   %00001100       ; 03F3 1-7e:     **  
-        .byte   %00011000       ; 03F4 1-7e:    **   
-        .byte   %00000000       ; 03F5 1-7e:         
-        .byte   %00011000       ; 03F6 1-7e:    **   
-        .byte   %00000000       ; 03F7 1-7e:         
-
-        .byte   %00111100       ; 03F8 1-7f:   ****  
-        .byte   %01100110       ; 03F9 1-7f:  **  ** 
-        .byte   %00000110       ; 03FA 1-7f:      ** 
-        .byte   %00001100       ; 03FB 1-7f:     **  
-        .byte   %00011000       ; 03FC 1-7f:    **   
-        .byte   %00000000       ; 03FD 1-7f:         
-        .byte   %00011000       ; 03FE 1-7f:    **   
-        .byte   %00000000       ; 03FF 1-7f:         
-
-        .byte   %00111100       ; 0400 1-80:   ****  
-        .byte   %01100110       ; 0401 1-80:  **  ** 
-        .byte   %01101110       ; 0402 1-80:  ** *** 
-        .byte   %01101110       ; 0403 1-80:  ** *** 
-        .byte   %01100000       ; 0404 1-80:  **     
-        .byte   %01100010       ; 0405 1-80:  **   * 
-        .byte   %00111100       ; 0406 1-80:   ****  
-        .byte   %00000000       ; 0407 1-80:         
-
-        .byte   %00111100       ; 0408 1-81:   ****  
-        .byte   %01100110       ; 0409 1-81:  **  ** 
-        .byte   %01101110       ; 040A 1-81:  ** *** 
-        .byte   %01101110       ; 040B 1-81:  ** *** 
-        .byte   %01100000       ; 040C 1-81:  **     
-        .byte   %01100010       ; 040D 1-81:  **   * 
-        .byte   %00111100       ; 040E 1-81:   ****  
-        .byte   %00000000       ; 040F 1-81:         
-
-        .byte   %00011000       ; 0410 1-82:    **   
-        .byte   %00111100       ; 0411 1-82:   ****  
-        .byte   %01100110       ; 0412 1-82:  **  ** 
-        .byte   %01111110       ; 0413 1-82:  ****** 
-        .byte   %01100110       ; 0414 1-82:  **  ** 
-        .byte   %01100110       ; 0415 1-82:  **  ** 
-        .byte   %01100110       ; 0416 1-82:  **  ** 
-        .byte   %00000000       ; 0417 1-82:         
-
-        .byte   %00011000       ; 0418 1-83:    **   
-        .byte   %00111100       ; 0419 1-83:   ****  
-        .byte   %01100110       ; 041A 1-83:  **  ** 
-        .byte   %01111110       ; 041B 1-83:  ****** 
-        .byte   %01100110       ; 041C 1-83:  **  ** 
-        .byte   %01100110       ; 041D 1-83:  **  ** 
-        .byte   %01100110       ; 041E 1-83:  **  ** 
-        .byte   %00000000       ; 041F 1-83:         
-
-        .byte   %01111100       ; 0420 1-84:  *****  
-        .byte   %01100110       ; 0421 1-84:  **  ** 
-        .byte   %01100110       ; 0422 1-84:  **  ** 
-        .byte   %01111100       ; 0423 1-84:  *****  
-        .byte   %01100110       ; 0424 1-84:  **  ** 
-        .byte   %01100110       ; 0425 1-84:  **  ** 
-        .byte   %01111100       ; 0426 1-84:  *****  
-        .byte   %00000000       ; 0427 1-84:         
-
-        .byte   %01111100       ; 0428 1-85:  *****  
-        .byte   %01100110       ; 0429 1-85:  **  ** 
-        .byte   %01100110       ; 042A 1-85:  **  ** 
-        .byte   %01111100       ; 042B 1-85:  *****  
-        .byte   %01100110       ; 042C 1-85:  **  ** 
-        .byte   %01100110       ; 042D 1-85:  **  ** 
-        .byte   %01111100       ; 042E 1-85:  *****  
-        .byte   %00000000       ; 042F 1-85:         
-
-        .byte   %00111100       ; 0430 1-86:   ****  
-        .byte   %01100110       ; 0431 1-86:  **  ** 
-        .byte   %01100000       ; 0432 1-86:  **     
-        .byte   %01100000       ; 0433 1-86:  **     
-        .byte   %01100000       ; 0434 1-86:  **     
-        .byte   %01100110       ; 0435 1-86:  **  ** 
-        .byte   %00111100       ; 0436 1-86:   ****  
-        .byte   %00000000       ; 0437 1-86:         
-
-        .byte   %00111100       ; 0438 1-87:   ****  
-        .byte   %01100110       ; 0439 1-87:  **  ** 
-        .byte   %01100000       ; 043A 1-87:  **     
-        .byte   %01100000       ; 043B 1-87:  **     
-        .byte   %01100000       ; 043C 1-87:  **     
-        .byte   %01100110       ; 043D 1-87:  **  ** 
-        .byte   %00111100       ; 043E 1-87:   ****  
-        .byte   %00000000       ; 043F 1-87:         
-
-        .byte   %01111000       ; 0440 1-88:  ****   
-        .byte   %01101100       ; 0441 1-88:  ** **  
-        .byte   %01100110       ; 0442 1-88:  **  ** 
-        .byte   %01100110       ; 0443 1-88:  **  ** 
-        .byte   %01100110       ; 0444 1-88:  **  ** 
-        .byte   %01101100       ; 0445 1-88:  ** **  
-        .byte   %01111000       ; 0446 1-88:  ****   
-        .byte   %00000000       ; 0447 1-88:         
-
-        .byte   %01111000       ; 0448 1-89:  ****   
-        .byte   %01101100       ; 0449 1-89:  ** **  
-        .byte   %01100110       ; 044A 1-89:  **  ** 
-        .byte   %01100110       ; 044B 1-89:  **  ** 
-        .byte   %01100110       ; 044C 1-89:  **  ** 
-        .byte   %01101100       ; 044D 1-89:  ** **  
-        .byte   %01111000       ; 044E 1-89:  ****   
-        .byte   %00000000       ; 044F 1-89:         
-
-        .byte   %01111110       ; 0450 1-8a:  ****** 
-        .byte   %01100000       ; 0451 1-8a:  **     
-        .byte   %01100000       ; 0452 1-8a:  **     
-        .byte   %01111000       ; 0453 1-8a:  ****   
-        .byte   %01100000       ; 0454 1-8a:  **     
-        .byte   %01100000       ; 0455 1-8a:  **     
-        .byte   %01111110       ; 0456 1-8a:  ****** 
-        .byte   %00000000       ; 0457 1-8a:         
-
-        .byte   %01111110       ; 0458 1-8b:  ****** 
-        .byte   %01100000       ; 0459 1-8b:  **     
-        .byte   %01100000       ; 045A 1-8b:  **     
-        .byte   %01111000       ; 045B 1-8b:  ****   
-        .byte   %01100000       ; 045C 1-8b:  **     
-        .byte   %01100000       ; 045D 1-8b:  **     
-        .byte   %01111110       ; 045E 1-8b:  ****** 
-        .byte   %00000000       ; 045F 1-8b:         
-
-        .byte   %01111110       ; 0460 1-8c:  ****** 
-        .byte   %01100000       ; 0461 1-8c:  **     
-        .byte   %01100000       ; 0462 1-8c:  **     
-        .byte   %01111000       ; 0463 1-8c:  ****   
-        .byte   %01100000       ; 0464 1-8c:  **     
-        .byte   %01100000       ; 0465 1-8c:  **     
-        .byte   %01100000       ; 0466 1-8c:  **     
-        .byte   %00000000       ; 0467 1-8c:         
-
-        .byte   %01111110       ; 0468 1-8d:  ****** 
-        .byte   %01100000       ; 0469 1-8d:  **     
-        .byte   %01100000       ; 046A 1-8d:  **     
-        .byte   %01111000       ; 046B 1-8d:  ****   
-        .byte   %01100000       ; 046C 1-8d:  **     
-        .byte   %01100000       ; 046D 1-8d:  **     
-        .byte   %01100000       ; 046E 1-8d:  **     
-        .byte   %00000000       ; 046F 1-8d:         
-
-        .byte   %00111100       ; 0470 1-8e:   ****  
-        .byte   %01100110       ; 0471 1-8e:  **  ** 
-        .byte   %01100000       ; 0472 1-8e:  **     
-        .byte   %01101110       ; 0473 1-8e:  ** *** 
-        .byte   %01100110       ; 0474 1-8e:  **  ** 
-        .byte   %01100110       ; 0475 1-8e:  **  ** 
-        .byte   %00111100       ; 0476 1-8e:   ****  
-        .byte   %00000000       ; 0477 1-8e:         
-
-        .byte   %00111100       ; 0478 1-8f:   ****  
-        .byte   %01100110       ; 0479 1-8f:  **  ** 
-        .byte   %01100000       ; 047A 1-8f:  **     
-        .byte   %01101110       ; 047B 1-8f:  ** *** 
-        .byte   %01100110       ; 047C 1-8f:  **  ** 
-        .byte   %01100110       ; 047D 1-8f:  **  ** 
-        .byte   %00111100       ; 047E 1-8f:   ****  
-        .byte   %00000000       ; 047F 1-8f:         
-
-        .byte   %01100110       ; 0480 1-90:  **  ** 
-        .byte   %01100110       ; 0481 1-90:  **  ** 
-        .byte   %01100110       ; 0482 1-90:  **  ** 
-        .byte   %01111110       ; 0483 1-90:  ****** 
-        .byte   %01100110       ; 0484 1-90:  **  ** 
-        .byte   %01100110       ; 0485 1-90:  **  ** 
-        .byte   %01100110       ; 0486 1-90:  **  ** 
-        .byte   %00000000       ; 0487 1-90:         
-
-        .byte   %01100110       ; 0488 1-91:  **  ** 
-        .byte   %01100110       ; 0489 1-91:  **  ** 
-        .byte   %01100110       ; 048A 1-91:  **  ** 
-        .byte   %01111110       ; 048B 1-91:  ****** 
-        .byte   %01100110       ; 048C 1-91:  **  ** 
-        .byte   %01100110       ; 048D 1-91:  **  ** 
-        .byte   %01100110       ; 048E 1-91:  **  ** 
-        .byte   %00000000       ; 048F 1-91:         
-
-        .byte   %00111100       ; 0490 1-92:   ****  
-        .byte   %00011000       ; 0491 1-92:    **   
-        .byte   %00011000       ; 0492 1-92:    **   
-        .byte   %00011000       ; 0493 1-92:    **   
-        .byte   %00011000       ; 0494 1-92:    **   
-        .byte   %00011000       ; 0495 1-92:    **   
-        .byte   %00111100       ; 0496 1-92:   ****  
-        .byte   %00000000       ; 0497 1-92:         
-
-        .byte   %00111100       ; 0498 1-93:   ****  
-        .byte   %00011000       ; 0499 1-93:    **   
-        .byte   %00011000       ; 049A 1-93:    **   
-        .byte   %00011000       ; 049B 1-93:    **   
-        .byte   %00011000       ; 049C 1-93:    **   
-        .byte   %00011000       ; 049D 1-93:    **   
-        .byte   %00111100       ; 049E 1-93:   ****  
-        .byte   %00000000       ; 049F 1-93:         
-
-        .byte   %00011110       ; 04A0 1-94:    **** 
-        .byte   %00001100       ; 04A1 1-94:     **  
-        .byte   %00001100       ; 04A2 1-94:     **  
-        .byte   %00001100       ; 04A3 1-94:     **  
-        .byte   %00001100       ; 04A4 1-94:     **  
-        .byte   %01101100       ; 04A5 1-94:  ** **  
-        .byte   %00111000       ; 04A6 1-94:   ***   
-        .byte   %00000000       ; 04A7 1-94:         
-
-        .byte   %00011110       ; 04A8 1-95:    **** 
-        .byte   %00001100       ; 04A9 1-95:     **  
-        .byte   %00001100       ; 04AA 1-95:     **  
-        .byte   %00001100       ; 04AB 1-95:     **  
-        .byte   %00001100       ; 04AC 1-95:     **  
-        .byte   %01101100       ; 04AD 1-95:  ** **  
-        .byte   %00111000       ; 04AE 1-95:   ***   
-        .byte   %00000000       ; 04AF 1-95:         
-
-        .byte   %01100110       ; 04B0 1-96:  **  ** 
-        .byte   %01101100       ; 04B1 1-96:  ** **  
-        .byte   %01111000       ; 04B2 1-96:  ****   
-        .byte   %01110000       ; 04B3 1-96:  ***    
-        .byte   %01111000       ; 04B4 1-96:  ****   
-        .byte   %01101100       ; 04B5 1-96:  ** **  
-        .byte   %01100110       ; 04B6 1-96:  **  ** 
-        .byte   %00000000       ; 04B7 1-96:         
-
-        .byte   %01100110       ; 04B8 1-97:  **  ** 
-        .byte   %01101100       ; 04B9 1-97:  ** **  
-        .byte   %01111000       ; 04BA 1-97:  ****   
-        .byte   %01110000       ; 04BB 1-97:  ***    
-        .byte   %01111000       ; 04BC 1-97:  ****   
-        .byte   %01101100       ; 04BD 1-97:  ** **  
-        .byte   %01100110       ; 04BE 1-97:  **  ** 
-        .byte   %00000000       ; 04BF 1-97:         
-
-        .byte   %01100000       ; 04C0 1-98:  **     
-        .byte   %01100000       ; 04C1 1-98:  **     
-        .byte   %01100000       ; 04C2 1-98:  **     
-        .byte   %01100000       ; 04C3 1-98:  **     
-        .byte   %01100000       ; 04C4 1-98:  **     
-        .byte   %01100000       ; 04C5 1-98:  **     
-        .byte   %01111110       ; 04C6 1-98:  ****** 
-        .byte   %00000000       ; 04C7 1-98:         
-
-        .byte   %01100000       ; 04C8 1-99:  **     
-        .byte   %01100000       ; 04C9 1-99:  **     
-        .byte   %01100000       ; 04CA 1-99:  **     
-        .byte   %01100000       ; 04CB 1-99:  **     
-        .byte   %01100000       ; 04CC 1-99:  **     
-        .byte   %01100000       ; 04CD 1-99:  **     
-        .byte   %01111110       ; 04CE 1-99:  ****** 
-        .byte   %00000000       ; 04CF 1-99:         
-
-        .byte   %01100011       ; 04D0 1-9a:  **   **
-        .byte   %01110111       ; 04D1 1-9a:  *** ***
-        .byte   %01111111       ; 04D2 1-9a:  *******
-        .byte   %01101011       ; 04D3 1-9a:  ** * **
-        .byte   %01100011       ; 04D4 1-9a:  **   **
-        .byte   %01100011       ; 04D5 1-9a:  **   **
-        .byte   %01100011       ; 04D6 1-9a:  **   **
-        .byte   %00000000       ; 04D7 1-9a:         
-
-        .byte   %01100011       ; 04D8 1-9b:  **   **
-        .byte   %01110111       ; 04D9 1-9b:  *** ***
-        .byte   %01111111       ; 04DA 1-9b:  *******
-        .byte   %01101011       ; 04DB 1-9b:  ** * **
-        .byte   %01100011       ; 04DC 1-9b:  **   **
-        .byte   %01100011       ; 04DD 1-9b:  **   **
-        .byte   %01100011       ; 04DE 1-9b:  **   **
-        .byte   %00000000       ; 04DF 1-9b:         
-
-        .byte   %01100110       ; 04E0 1-9c:  **  ** 
-        .byte   %01110110       ; 04E1 1-9c:  *** ** 
-        .byte   %01111110       ; 04E2 1-9c:  ****** 
-        .byte   %01111110       ; 04E3 1-9c:  ****** 
-        .byte   %01101110       ; 04E4 1-9c:  ** *** 
-        .byte   %01100110       ; 04E5 1-9c:  **  ** 
-        .byte   %01100110       ; 04E6 1-9c:  **  ** 
-        .byte   %00000000       ; 04E7 1-9c:         
-
-        .byte   %01100110       ; 04E8 1-9d:  **  ** 
-        .byte   %01110110       ; 04E9 1-9d:  *** ** 
-        .byte   %01111110       ; 04EA 1-9d:  ****** 
-        .byte   %01111110       ; 04EB 1-9d:  ****** 
-        .byte   %01101110       ; 04EC 1-9d:  ** *** 
-        .byte   %01100110       ; 04ED 1-9d:  **  ** 
-        .byte   %01100110       ; 04EE 1-9d:  **  ** 
-        .byte   %00000000       ; 04EF 1-9d:         
-
-        .byte   %00111100       ; 04F0 1-9e:   ****  
-        .byte   %01100110       ; 04F1 1-9e:  **  ** 
-        .byte   %01100110       ; 04F2 1-9e:  **  ** 
-        .byte   %01100110       ; 04F3 1-9e:  **  ** 
-        .byte   %01100110       ; 04F4 1-9e:  **  ** 
-        .byte   %01100110       ; 04F5 1-9e:  **  ** 
-        .byte   %00111100       ; 04F6 1-9e:   ****  
-        .byte   %00000000       ; 04F7 1-9e:         
-
-        .byte   %00111100       ; 04F8 1-9f:   ****  
-        .byte   %01100110       ; 04F9 1-9f:  **  ** 
-        .byte   %01100110       ; 04FA 1-9f:  **  ** 
-        .byte   %01100110       ; 04FB 1-9f:  **  ** 
-        .byte   %01100110       ; 04FC 1-9f:  **  ** 
-        .byte   %01100110       ; 04FD 1-9f:  **  ** 
-        .byte   %00111100       ; 04FE 1-9f:   ****  
-        .byte   %00000000       ; 04FF 1-9f:         
-
-        .byte   %01111100       ; 0500 1-a0:  *****  
-        .byte   %01100110       ; 0501 1-a0:  **  ** 
-        .byte   %01100110       ; 0502 1-a0:  **  ** 
-        .byte   %01111100       ; 0503 1-a0:  *****  
-        .byte   %01100000       ; 0504 1-a0:  **     
-        .byte   %01100000       ; 0505 1-a0:  **     
-        .byte   %01100000       ; 0506 1-a0:  **     
-        .byte   %00000000       ; 0507 1-a0:         
-
-        .byte   %01111100       ; 0508 1-a1:  *****  
-        .byte   %01100110       ; 0509 1-a1:  **  ** 
-        .byte   %01100110       ; 050A 1-a1:  **  ** 
-        .byte   %01111100       ; 050B 1-a1:  *****  
-        .byte   %01100000       ; 050C 1-a1:  **     
-        .byte   %01100000       ; 050D 1-a1:  **     
-        .byte   %01100000       ; 050E 1-a1:  **     
-        .byte   %00000000       ; 050F 1-a1:         
-
-        .byte   %00111100       ; 0510 1-a2:   ****  
-        .byte   %01100110       ; 0511 1-a2:  **  ** 
-        .byte   %01100110       ; 0512 1-a2:  **  ** 
-        .byte   %01100110       ; 0513 1-a2:  **  ** 
-        .byte   %01100110       ; 0514 1-a2:  **  ** 
-        .byte   %00111100       ; 0515 1-a2:   ****  
-        .byte   %00001110       ; 0516 1-a2:     *** 
-        .byte   %00000000       ; 0517 1-a2:         
-
-        .byte   %00111100       ; 0518 1-a3:   ****  
-        .byte   %01100110       ; 0519 1-a3:  **  ** 
-        .byte   %01100110       ; 051A 1-a3:  **  ** 
-        .byte   %01100110       ; 051B 1-a3:  **  ** 
-        .byte   %01100110       ; 051C 1-a3:  **  ** 
-        .byte   %00111100       ; 051D 1-a3:   ****  
-        .byte   %00001110       ; 051E 1-a3:     *** 
-        .byte   %00000000       ; 051F 1-a3:         
-
-        .byte   %01111100       ; 0520 1-a4:  *****  
-        .byte   %01100110       ; 0521 1-a4:  **  ** 
-        .byte   %01100110       ; 0522 1-a4:  **  ** 
-        .byte   %01111100       ; 0523 1-a4:  *****  
-        .byte   %01111000       ; 0524 1-a4:  ****   
-        .byte   %01101100       ; 0525 1-a4:  ** **  
-        .byte   %01100110       ; 0526 1-a4:  **  ** 
-        .byte   %00000000       ; 0527 1-a4:         
-
-        .byte   %01111100       ; 0528 1-a5:  *****  
-        .byte   %01100110       ; 0529 1-a5:  **  ** 
-        .byte   %01100110       ; 052A 1-a5:  **  ** 
-        .byte   %01111100       ; 052B 1-a5:  *****  
-        .byte   %01111000       ; 052C 1-a5:  ****   
-        .byte   %01101100       ; 052D 1-a5:  ** **  
-        .byte   %01100110       ; 052E 1-a5:  **  ** 
-        .byte   %00000000       ; 052F 1-a5:         
-
-        .byte   %00111100       ; 0530 1-a6:   ****  
-        .byte   %01100110       ; 0531 1-a6:  **  ** 
-        .byte   %01100000       ; 0532 1-a6:  **     
-        .byte   %00111100       ; 0533 1-a6:   ****  
-        .byte   %00000110       ; 0534 1-a6:      ** 
-        .byte   %01100110       ; 0535 1-a6:  **  ** 
-        .byte   %00111100       ; 0536 1-a6:   ****  
-        .byte   %00000000       ; 0537 1-a6:         
-
-        .byte   %00111100       ; 0538 1-a7:   ****  
-        .byte   %01100110       ; 0539 1-a7:  **  ** 
-        .byte   %01100000       ; 053A 1-a7:  **     
-        .byte   %00111100       ; 053B 1-a7:   ****  
-        .byte   %00000110       ; 053C 1-a7:      ** 
-        .byte   %01100110       ; 053D 1-a7:  **  ** 
-        .byte   %00111100       ; 053E 1-a7:   ****  
-        .byte   %00000000       ; 053F 1-a7:         
-
-        .byte   %01111110       ; 0540 1-a8:  ****** 
-        .byte   %00011000       ; 0541 1-a8:    **   
-        .byte   %00011000       ; 0542 1-a8:    **   
-        .byte   %00011000       ; 0543 1-a8:    **   
-        .byte   %00011000       ; 0544 1-a8:    **   
-        .byte   %00011000       ; 0545 1-a8:    **   
-        .byte   %00011000       ; 0546 1-a8:    **   
-        .byte   %00000000       ; 0547 1-a8:         
-
-        .byte   %01111110       ; 0548 1-a9:  ****** 
-        .byte   %00011000       ; 0549 1-a9:    **   
-        .byte   %00011000       ; 054A 1-a9:    **   
-        .byte   %00011000       ; 054B 1-a9:    **   
-        .byte   %00011000       ; 054C 1-a9:    **   
-        .byte   %00011000       ; 054D 1-a9:    **   
-        .byte   %00011000       ; 054E 1-a9:    **   
-        .byte   %00000000       ; 054F 1-a9:         
-
-        .byte   %01100110       ; 0550 1-aa:  **  ** 
-        .byte   %01100110       ; 0551 1-aa:  **  ** 
-        .byte   %01100110       ; 0552 1-aa:  **  ** 
-        .byte   %01100110       ; 0553 1-aa:  **  ** 
-        .byte   %01100110       ; 0554 1-aa:  **  ** 
-        .byte   %01100110       ; 0555 1-aa:  **  ** 
-        .byte   %00111100       ; 0556 1-aa:   ****  
-        .byte   %00000000       ; 0557 1-aa:         
-
-        .byte   %01100110       ; 0558 1-ab:  **  ** 
-        .byte   %01100110       ; 0559 1-ab:  **  ** 
-        .byte   %01100110       ; 055A 1-ab:  **  ** 
-        .byte   %01100110       ; 055B 1-ab:  **  ** 
-        .byte   %01100110       ; 055C 1-ab:  **  ** 
-        .byte   %01100110       ; 055D 1-ab:  **  ** 
-        .byte   %00111100       ; 055E 1-ab:   ****  
-        .byte   %00000000       ; 055F 1-ab:         
-
-        .byte   %01100110       ; 0560 1-ac:  **  ** 
-        .byte   %01100110       ; 0561 1-ac:  **  ** 
-        .byte   %01100110       ; 0562 1-ac:  **  ** 
-        .byte   %01100110       ; 0563 1-ac:  **  ** 
-        .byte   %01100110       ; 0564 1-ac:  **  ** 
-        .byte   %00111100       ; 0565 1-ac:   ****  
-        .byte   %00011000       ; 0566 1-ac:    **   
-        .byte   %00000000       ; 0567 1-ac:         
-
-        .byte   %01100110       ; 0568 1-ad:  **  ** 
-        .byte   %01100110       ; 0569 1-ad:  **  ** 
-        .byte   %01100110       ; 056A 1-ad:  **  ** 
-        .byte   %01100110       ; 056B 1-ad:  **  ** 
-        .byte   %01100110       ; 056C 1-ad:  **  ** 
-        .byte   %00111100       ; 056D 1-ad:   ****  
-        .byte   %00011000       ; 056E 1-ad:    **   
-        .byte   %00000000       ; 056F 1-ad:         
-
-        .byte   %01100011       ; 0570 1-ae:  **   **
-        .byte   %01100011       ; 0571 1-ae:  **   **
-        .byte   %01100011       ; 0572 1-ae:  **   **
-        .byte   %01101011       ; 0573 1-ae:  ** * **
-        .byte   %01111111       ; 0574 1-ae:  *******
-        .byte   %01110111       ; 0575 1-ae:  *** ***
-        .byte   %01100011       ; 0576 1-ae:  **   **
-        .byte   %00000000       ; 0577 1-ae:         
-
-        .byte   %01100011       ; 0578 1-af:  **   **
-        .byte   %01100011       ; 0579 1-af:  **   **
-        .byte   %01100011       ; 057A 1-af:  **   **
-        .byte   %01101011       ; 057B 1-af:  ** * **
-        .byte   %01111111       ; 057C 1-af:  *******
-        .byte   %01110111       ; 057D 1-af:  *** ***
-        .byte   %01100011       ; 057E 1-af:  **   **
-        .byte   %00000000       ; 057F 1-af:         
-
-        .byte   %01100110       ; 0580 1-b0:  **  ** 
-        .byte   %01100110       ; 0581 1-b0:  **  ** 
-        .byte   %00111100       ; 0582 1-b0:   ****  
-        .byte   %00011000       ; 0583 1-b0:    **   
-        .byte   %00111100       ; 0584 1-b0:   ****  
-        .byte   %01100110       ; 0585 1-b0:  **  ** 
-        .byte   %01100110       ; 0586 1-b0:  **  ** 
-        .byte   %00000000       ; 0587 1-b0:         
-
-        .byte   %01100110       ; 0588 1-b1:  **  ** 
-        .byte   %01100110       ; 0589 1-b1:  **  ** 
-        .byte   %00111100       ; 058A 1-b1:   ****  
-        .byte   %00011000       ; 058B 1-b1:    **   
-        .byte   %00111100       ; 058C 1-b1:   ****  
-        .byte   %01100110       ; 058D 1-b1:  **  ** 
-        .byte   %01100110       ; 058E 1-b1:  **  ** 
-        .byte   %00000000       ; 058F 1-b1:         
-
-        .byte   %01100110       ; 0590 1-b2:  **  ** 
-        .byte   %01100110       ; 0591 1-b2:  **  ** 
-        .byte   %01100110       ; 0592 1-b2:  **  ** 
-        .byte   %00111100       ; 0593 1-b2:   ****  
-        .byte   %00011000       ; 0594 1-b2:    **   
-        .byte   %00011000       ; 0595 1-b2:    **   
-        .byte   %00011000       ; 0596 1-b2:    **   
-        .byte   %00000000       ; 0597 1-b2:         
-
-        .byte   %01100110       ; 0598 1-b3:  **  ** 
-        .byte   %01100110       ; 0599 1-b3:  **  ** 
-        .byte   %01100110       ; 059A 1-b3:  **  ** 
-        .byte   %00111100       ; 059B 1-b3:   ****  
-        .byte   %00011000       ; 059C 1-b3:    **   
-        .byte   %00011000       ; 059D 1-b3:    **   
-        .byte   %00011000       ; 059E 1-b3:    **   
-        .byte   %00000000       ; 059F 1-b3:         
-
-        .byte   %01111110       ; 05A0 1-b4:  ****** 
-        .byte   %00000110       ; 05A1 1-b4:      ** 
-        .byte   %00001100       ; 05A2 1-b4:     **  
-        .byte   %00011000       ; 05A3 1-b4:    **   
-        .byte   %00110000       ; 05A4 1-b4:   **    
-        .byte   %01100000       ; 05A5 1-b4:  **     
-        .byte   %01111110       ; 05A6 1-b4:  ****** 
-        .byte   %00000000       ; 05A7 1-b4:         
-
-        .byte   %01111110       ; 05A8 1-b5:  ****** 
-        .byte   %00000110       ; 05A9 1-b5:      ** 
-        .byte   %00001100       ; 05AA 1-b5:     **  
-        .byte   %00011000       ; 05AB 1-b5:    **   
-        .byte   %00110000       ; 05AC 1-b5:   **    
-        .byte   %01100000       ; 05AD 1-b5:  **     
-        .byte   %01111110       ; 05AE 1-b5:  ****** 
-        .byte   %00000000       ; 05AF 1-b5:         
-
-        .byte   %00111100       ; 05B0 1-b6:   ****  
-        .byte   %00110000       ; 05B1 1-b6:   **    
-        .byte   %00110000       ; 05B2 1-b6:   **    
-        .byte   %00110000       ; 05B3 1-b6:   **    
-        .byte   %00110000       ; 05B4 1-b6:   **    
-        .byte   %00110000       ; 05B5 1-b6:   **    
-        .byte   %00111100       ; 05B6 1-b6:   ****  
-        .byte   %00000000       ; 05B7 1-b6:         
-
-        .byte   %00111100       ; 05B8 1-b7:   ****  
-        .byte   %00110000       ; 05B9 1-b7:   **    
-        .byte   %00110000       ; 05BA 1-b7:   **    
-        .byte   %00110000       ; 05BB 1-b7:   **    
-        .byte   %00110000       ; 05BC 1-b7:   **    
-        .byte   %00110000       ; 05BD 1-b7:   **    
-        .byte   %00111100       ; 05BE 1-b7:   ****  
-        .byte   %00000000       ; 05BF 1-b7:         
-
-        .byte   %01100000       ; 05C0 1-b8:  **     
-        .byte   %00110000       ; 05C1 1-b8:   **    
-        .byte   %00011000       ; 05C2 1-b8:    **   
-        .byte   %00001100       ; 05C3 1-b8:     **  
-        .byte   %00000110       ; 05C4 1-b8:      ** 
-        .byte   %00000011       ; 05C5 1-b8:       **
-        .byte   %00000000       ; 05C6 1-b8:         
-        .byte   %00000000       ; 05C7 1-b8:         
-
-        .byte   %01100000       ; 05C8 1-b9:  **     
-        .byte   %00110000       ; 05C9 1-b9:   **    
-        .byte   %00011000       ; 05CA 1-b9:    **   
-        .byte   %00001100       ; 05CB 1-b9:     **  
-        .byte   %00000110       ; 05CC 1-b9:      ** 
-        .byte   %00000011       ; 05CD 1-b9:       **
-        .byte   %00000000       ; 05CE 1-b9:         
-        .byte   %00000000       ; 05CF 1-b9:         
-
-        .byte   %00111100       ; 05D0 1-ba:   ****  
-        .byte   %00001100       ; 05D1 1-ba:     **  
-        .byte   %00001100       ; 05D2 1-ba:     **  
-        .byte   %00001100       ; 05D3 1-ba:     **  
-        .byte   %00001100       ; 05D4 1-ba:     **  
-        .byte   %00001100       ; 05D5 1-ba:     **  
-        .byte   %00111100       ; 05D6 1-ba:   ****  
-        .byte   %00000000       ; 05D7 1-ba:         
-
-        .byte   %00111100       ; 05D8 1-bb:   ****  
-        .byte   %00001100       ; 05D9 1-bb:     **  
-        .byte   %00001100       ; 05DA 1-bb:     **  
-        .byte   %00001100       ; 05DB 1-bb:     **  
-        .byte   %00001100       ; 05DC 1-bb:     **  
-        .byte   %00001100       ; 05DD 1-bb:     **  
-        .byte   %00111100       ; 05DE 1-bb:   ****  
-        .byte   %00000000       ; 05DF 1-bb:         
-
-        .byte   %00000000       ; 05E0 1-bc:         
-        .byte   %00011000       ; 05E1 1-bc:    **   
-        .byte   %00111100       ; 05E2 1-bc:   ****  
-        .byte   %01100110       ; 05E3 1-bc:  **  ** 
-        .byte   %00000000       ; 05E4 1-bc:         
-        .byte   %00000000       ; 05E5 1-bc:         
-        .byte   %00000000       ; 05E6 1-bc:         
-        .byte   %00000000       ; 05E7 1-bc:         
-
-        .byte   %00000000       ; 05E8 1-bd:         
-        .byte   %00011000       ; 05E9 1-bd:    **   
-        .byte   %00111100       ; 05EA 1-bd:   ****  
-        .byte   %01100110       ; 05EB 1-bd:  **  ** 
-        .byte   %00000000       ; 05EC 1-bd:         
-        .byte   %00000000       ; 05ED 1-bd:         
-        .byte   %00000000       ; 05EE 1-bd:         
-        .byte   %00000000       ; 05EF 1-bd:         
-
-        .byte   %00000000       ; 05F0 1-be:         
-        .byte   %00000000       ; 05F1 1-be:         
-        .byte   %00000000       ; 05F2 1-be:         
-        .byte   %00000000       ; 05F3 1-be:         
-        .byte   %00000000       ; 05F4 1-be:         
-        .byte   %00000000       ; 05F5 1-be:         
-        .byte   %01111111       ; 05F6 1-be:  *******
-        .byte   %00000000       ; 05F7 1-be:         
-
-        .byte   %00000000       ; 05F8 1-bf:         
-        .byte   %00000000       ; 05F9 1-bf:         
-        .byte   %00000000       ; 05FA 1-bf:         
-        .byte   %00000000       ; 05FB 1-bf:         
-        .byte   %00000000       ; 05FC 1-bf:         
-        .byte   %00000000       ; 05FD 1-bf:         
-        .byte   %01111111       ; 05FE 1-bf:  *******
-        .byte   %00000000       ; 05FF 1-bf:         
-
-        .byte   %00011000       ; 0600 1-c0:    **   
-        .byte   %00011000       ; 0601 1-c0:    **   
-        .byte   %00011000       ; 0602 1-c0:    **   
-        .byte   %00000000       ; 0603 1-c0:         
-        .byte   %00000000       ; 0604 1-c0:         
-        .byte   %00000000       ; 0605 1-c0:         
-        .byte   %00000000       ; 0606 1-c0:         
-        .byte   %00000000       ; 0607 1-c0:         
-
-        .byte   %00011000       ; 0608 1-c1:    **   
-        .byte   %00011000       ; 0609 1-c1:    **   
-        .byte   %00011000       ; 060A 1-c1:    **   
-        .byte   %00000000       ; 060B 1-c1:         
-        .byte   %00000000       ; 060C 1-c1:         
-        .byte   %00000000       ; 060D 1-c1:         
-        .byte   %00000000       ; 060E 1-c1:         
-        .byte   %00000000       ; 060F 1-c1:         
-
-        .byte   %00000000       ; 0610 1-c2:         
-        .byte   %00000000       ; 0611 1-c2:         
-        .byte   %00111100       ; 0612 1-c2:   ****  
-        .byte   %00000110       ; 0613 1-c2:      ** 
-        .byte   %00111110       ; 0614 1-c2:   ***** 
-        .byte   %01100110       ; 0615 1-c2:  **  ** 
-        .byte   %00111110       ; 0616 1-c2:   ***** 
-        .byte   %00000000       ; 0617 1-c2:         
-
-        .byte   %00000000       ; 0618 1-c3:         
-        .byte   %00000000       ; 0619 1-c3:         
-        .byte   %00111100       ; 061A 1-c3:   ****  
-        .byte   %00000110       ; 061B 1-c3:      ** 
-        .byte   %00111110       ; 061C 1-c3:   ***** 
-        .byte   %01100110       ; 061D 1-c3:  **  ** 
-        .byte   %00111110       ; 061E 1-c3:   ***** 
-        .byte   %00000000       ; 061F 1-c3:         
-
-        .byte   %00000000       ; 0620 1-c4:         
-        .byte   %01100000       ; 0621 1-c4:  **     
-        .byte   %01100000       ; 0622 1-c4:  **     
-        .byte   %01111100       ; 0623 1-c4:  *****  
-        .byte   %01100110       ; 0624 1-c4:  **  ** 
-        .byte   %01100110       ; 0625 1-c4:  **  ** 
-        .byte   %01111100       ; 0626 1-c4:  *****  
-        .byte   %00000000       ; 0627 1-c4:         
-
-        .byte   %00000000       ; 0628 1-c5:         
-        .byte   %01100000       ; 0629 1-c5:  **     
-        .byte   %01100000       ; 062A 1-c5:  **     
-        .byte   %01111100       ; 062B 1-c5:  *****  
-        .byte   %01100110       ; 062C 1-c5:  **  ** 
-        .byte   %01100110       ; 062D 1-c5:  **  ** 
-        .byte   %01111100       ; 062E 1-c5:  *****  
-        .byte   %00000000       ; 062F 1-c5:         
-
-        .byte   %00000000       ; 0630 1-c6:         
-        .byte   %00000000       ; 0631 1-c6:         
-        .byte   %00111100       ; 0632 1-c6:   ****  
-        .byte   %01100000       ; 0633 1-c6:  **     
-        .byte   %01100000       ; 0634 1-c6:  **     
-        .byte   %01100000       ; 0635 1-c6:  **     
-        .byte   %00111100       ; 0636 1-c6:   ****  
-        .byte   %00000000       ; 0637 1-c6:         
-
-        .byte   %00000000       ; 0638 1-c7:         
-        .byte   %00000000       ; 0639 1-c7:         
-        .byte   %00111100       ; 063A 1-c7:   ****  
-        .byte   %01100000       ; 063B 1-c7:  **     
-        .byte   %01100000       ; 063C 1-c7:  **     
-        .byte   %01100000       ; 063D 1-c7:  **     
-        .byte   %00111100       ; 063E 1-c7:   ****  
-        .byte   %00000000       ; 063F 1-c7:         
-
-        .byte   %00000000       ; 0640 1-c8:         
-        .byte   %00000110       ; 0641 1-c8:      ** 
-        .byte   %00000110       ; 0642 1-c8:      ** 
-        .byte   %00111110       ; 0643 1-c8:   ***** 
-        .byte   %01100110       ; 0644 1-c8:  **  ** 
-        .byte   %01100110       ; 0645 1-c8:  **  ** 
-        .byte   %00111110       ; 0646 1-c8:   ***** 
-        .byte   %00000000       ; 0647 1-c8:         
-
-        .byte   %00000000       ; 0648 1-c9:         
-        .byte   %00000110       ; 0649 1-c9:      ** 
-        .byte   %00000110       ; 064A 1-c9:      ** 
-        .byte   %00111110       ; 064B 1-c9:   ***** 
-        .byte   %01100110       ; 064C 1-c9:  **  ** 
-        .byte   %01100110       ; 064D 1-c9:  **  ** 
-        .byte   %00111110       ; 064E 1-c9:   ***** 
-        .byte   %00000000       ; 064F 1-c9:         
-
-        .byte   %00000000       ; 0650 1-ca:         
-        .byte   %00000000       ; 0651 1-ca:         
-        .byte   %00111100       ; 0652 1-ca:   ****  
-        .byte   %01100110       ; 0653 1-ca:  **  ** 
-        .byte   %01111110       ; 0654 1-ca:  ****** 
-        .byte   %01100000       ; 0655 1-ca:  **     
-        .byte   %00111100       ; 0656 1-ca:   ****  
-        .byte   %00000000       ; 0657 1-ca:         
-
-        .byte   %00000000       ; 0658 1-cb:         
-        .byte   %00000000       ; 0659 1-cb:         
-        .byte   %00111100       ; 065A 1-cb:   ****  
-        .byte   %01100110       ; 065B 1-cb:  **  ** 
-        .byte   %01111110       ; 065C 1-cb:  ****** 
-        .byte   %01100000       ; 065D 1-cb:  **     
-        .byte   %00111100       ; 065E 1-cb:   ****  
-        .byte   %00000000       ; 065F 1-cb:         
-
-        .byte   %00000000       ; 0660 1-cc:         
-        .byte   %00001110       ; 0661 1-cc:     *** 
-        .byte   %00011000       ; 0662 1-cc:    **   
-        .byte   %00111110       ; 0663 1-cc:   ***** 
-        .byte   %00011000       ; 0664 1-cc:    **   
-        .byte   %00011000       ; 0665 1-cc:    **   
-        .byte   %00011000       ; 0666 1-cc:    **   
-        .byte   %00000000       ; 0667 1-cc:         
-
-        .byte   %00000000       ; 0668 1-cd:         
-        .byte   %00001110       ; 0669 1-cd:     *** 
-        .byte   %00011000       ; 066A 1-cd:    **   
-        .byte   %00111110       ; 066B 1-cd:   ***** 
-        .byte   %00011000       ; 066C 1-cd:    **   
-        .byte   %00011000       ; 066D 1-cd:    **   
-        .byte   %00011000       ; 066E 1-cd:    **   
-        .byte   %00000000       ; 066F 1-cd:         
-
-        .byte   %00000000       ; 0670 1-ce:         
-        .byte   %00000000       ; 0671 1-ce:         
-        .byte   %00111110       ; 0672 1-ce:   ***** 
-        .byte   %01100110       ; 0673 1-ce:  **  ** 
-        .byte   %01100110       ; 0674 1-ce:  **  ** 
-        .byte   %00111110       ; 0675 1-ce:   ***** 
-        .byte   %00000110       ; 0676 1-ce:      ** 
-        .byte   %01111100       ; 0677 1-ce:  *****  
-
-        .byte   %00000000       ; 0678 1-cf:         
-        .byte   %00000000       ; 0679 1-cf:         
-        .byte   %00111110       ; 067A 1-cf:   ***** 
-        .byte   %01100110       ; 067B 1-cf:  **  ** 
-        .byte   %01100110       ; 067C 1-cf:  **  ** 
-        .byte   %00111110       ; 067D 1-cf:   ***** 
-        .byte   %00000110       ; 067E 1-cf:      ** 
-        .byte   %01111100       ; 067F 1-cf:  *****  
-
-        .byte   %00000000       ; 0680 1-d0:         
-        .byte   %01100000       ; 0681 1-d0:  **     
-        .byte   %01100000       ; 0682 1-d0:  **     
-        .byte   %01111100       ; 0683 1-d0:  *****  
-        .byte   %01100110       ; 0684 1-d0:  **  ** 
-        .byte   %01100110       ; 0685 1-d0:  **  ** 
-        .byte   %01100110       ; 0686 1-d0:  **  ** 
-        .byte   %00000000       ; 0687 1-d0:         
-
-        .byte   %00000000       ; 0688 1-d1:         
-        .byte   %01100000       ; 0689 1-d1:  **     
-        .byte   %01100000       ; 068A 1-d1:  **     
-        .byte   %01111100       ; 068B 1-d1:  *****  
-        .byte   %01100110       ; 068C 1-d1:  **  ** 
-        .byte   %01100110       ; 068D 1-d1:  **  ** 
-        .byte   %01100110       ; 068E 1-d1:  **  ** 
-        .byte   %00000000       ; 068F 1-d1:         
-
-        .byte   %00000000       ; 0690 1-d2:         
-        .byte   %00011000       ; 0691 1-d2:    **   
-        .byte   %00000000       ; 0692 1-d2:         
-        .byte   %00111000       ; 0693 1-d2:   ***   
-        .byte   %00011000       ; 0694 1-d2:    **   
-        .byte   %00011000       ; 0695 1-d2:    **   
-        .byte   %00111100       ; 0696 1-d2:   ****  
-        .byte   %00000000       ; 0697 1-d2:         
-
-        .byte   %00000000       ; 0698 1-d3:         
-        .byte   %00011000       ; 0699 1-d3:    **   
-        .byte   %00000000       ; 069A 1-d3:         
-        .byte   %00111000       ; 069B 1-d3:   ***   
-        .byte   %00011000       ; 069C 1-d3:    **   
-        .byte   %00011000       ; 069D 1-d3:    **   
-        .byte   %00111100       ; 069E 1-d3:   ****  
-        .byte   %00000000       ; 069F 1-d3:         
-
-        .byte   %00000000       ; 06A0 1-d4:         
-        .byte   %00000110       ; 06A1 1-d4:      ** 
-        .byte   %00000000       ; 06A2 1-d4:         
-        .byte   %00000110       ; 06A3 1-d4:      ** 
-        .byte   %00000110       ; 06A4 1-d4:      ** 
-        .byte   %00000110       ; 06A5 1-d4:      ** 
-        .byte   %00000110       ; 06A6 1-d4:      ** 
-        .byte   %00111100       ; 06A7 1-d4:   ****  
-
-        .byte   %00000000       ; 06A8 1-d5:         
-        .byte   %00000110       ; 06A9 1-d5:      ** 
-        .byte   %00000000       ; 06AA 1-d5:         
-        .byte   %00000110       ; 06AB 1-d5:      ** 
-        .byte   %00000110       ; 06AC 1-d5:      ** 
-        .byte   %00000110       ; 06AD 1-d5:      ** 
-        .byte   %00000110       ; 06AE 1-d5:      ** 
-        .byte   %00111100       ; 06AF 1-d5:   ****  
-
-        .byte   %00000000       ; 06B0 1-d6:         
-        .byte   %01100000       ; 06B1 1-d6:  **     
-        .byte   %01100000       ; 06B2 1-d6:  **     
-        .byte   %01101100       ; 06B3 1-d6:  ** **  
-        .byte   %01111000       ; 06B4 1-d6:  ****   
-        .byte   %01101100       ; 06B5 1-d6:  ** **  
-        .byte   %01100110       ; 06B6 1-d6:  **  ** 
-        .byte   %00000000       ; 06B7 1-d6:         
-
-        .byte   %00000000       ; 06B8 1-d7:         
-        .byte   %01100000       ; 06B9 1-d7:  **     
-        .byte   %01100000       ; 06BA 1-d7:  **     
-        .byte   %01101100       ; 06BB 1-d7:  ** **  
-        .byte   %01111000       ; 06BC 1-d7:  ****   
-        .byte   %01101100       ; 06BD 1-d7:  ** **  
-        .byte   %01100110       ; 06BE 1-d7:  **  ** 
-        .byte   %00000000       ; 06BF 1-d7:         
-
-        .byte   %00000000       ; 06C0 1-d8:         
-        .byte   %00111000       ; 06C1 1-d8:   ***   
-        .byte   %00011000       ; 06C2 1-d8:    **   
-        .byte   %00011000       ; 06C3 1-d8:    **   
-        .byte   %00011000       ; 06C4 1-d8:    **   
-        .byte   %00011000       ; 06C5 1-d8:    **   
-        .byte   %00111100       ; 06C6 1-d8:   ****  
-        .byte   %00000000       ; 06C7 1-d8:         
-
-        .byte   %00000000       ; 06C8 1-d9:         
-        .byte   %00111000       ; 06C9 1-d9:   ***   
-        .byte   %00011000       ; 06CA 1-d9:    **   
-        .byte   %00011000       ; 06CB 1-d9:    **   
-        .byte   %00011000       ; 06CC 1-d9:    **   
-        .byte   %00011000       ; 06CD 1-d9:    **   
-        .byte   %00111100       ; 06CE 1-d9:   ****  
-        .byte   %00000000       ; 06CF 1-d9:         
-
-        .byte   %00000000       ; 06D0 1-da:         
-        .byte   %00000000       ; 06D1 1-da:         
-        .byte   %01100110       ; 06D2 1-da:  **  ** 
-        .byte   %01111111       ; 06D3 1-da:  *******
-        .byte   %01111111       ; 06D4 1-da:  *******
-        .byte   %01101011       ; 06D5 1-da:  ** * **
-        .byte   %01100011       ; 06D6 1-da:  **   **
-        .byte   %00000000       ; 06D7 1-da:         
-
-        .byte   %00000000       ; 06D8 1-db:         
-        .byte   %00000000       ; 06D9 1-db:         
-        .byte   %01100110       ; 06DA 1-db:  **  ** 
-        .byte   %01111111       ; 06DB 1-db:  *******
-        .byte   %01111111       ; 06DC 1-db:  *******
-        .byte   %01101011       ; 06DD 1-db:  ** * **
-        .byte   %01100011       ; 06DE 1-db:  **   **
-        .byte   %00000000       ; 06DF 1-db:         
-
-        .byte   %00000000       ; 06E0 1-dc:         
-        .byte   %00000000       ; 06E1 1-dc:         
-        .byte   %01111100       ; 06E2 1-dc:  *****  
-        .byte   %01100110       ; 06E3 1-dc:  **  ** 
-        .byte   %01100110       ; 06E4 1-dc:  **  ** 
-        .byte   %01100110       ; 06E5 1-dc:  **  ** 
-        .byte   %01100110       ; 06E6 1-dc:  **  ** 
-        .byte   %00000000       ; 06E7 1-dc:         
-
-        .byte   %00000000       ; 06E8 1-dd:         
-        .byte   %00000000       ; 06E9 1-dd:         
-        .byte   %01111100       ; 06EA 1-dd:  *****  
-        .byte   %01100110       ; 06EB 1-dd:  **  ** 
-        .byte   %01100110       ; 06EC 1-dd:  **  ** 
-        .byte   %01100110       ; 06ED 1-dd:  **  ** 
-        .byte   %01100110       ; 06EE 1-dd:  **  ** 
-        .byte   %00000000       ; 06EF 1-dd:         
-
-        .byte   %00000000       ; 06F0 1-de:         
-        .byte   %00000000       ; 06F1 1-de:         
-        .byte   %00111100       ; 06F2 1-de:   ****  
-        .byte   %01100110       ; 06F3 1-de:  **  ** 
-        .byte   %01100110       ; 06F4 1-de:  **  ** 
-        .byte   %01100110       ; 06F5 1-de:  **  ** 
-        .byte   %00111100       ; 06F6 1-de:   ****  
-        .byte   %00000000       ; 06F7 1-de:         
-
-        .byte   %00000000       ; 06F8 1-df:         
-        .byte   %00000000       ; 06F9 1-df:         
-        .byte   %00111100       ; 06FA 1-df:   ****  
-        .byte   %01100110       ; 06FB 1-df:  **  ** 
-        .byte   %01100110       ; 06FC 1-df:  **  ** 
-        .byte   %01100110       ; 06FD 1-df:  **  ** 
-        .byte   %00111100       ; 06FE 1-df:   ****  
-        .byte   %00000000       ; 06FF 1-df:         
-
-        .byte   %00000000       ; 0700 1-e0:         
-        .byte   %00000000       ; 0701 1-e0:         
-        .byte   %01111100       ; 0702 1-e0:  *****  
-        .byte   %01100110       ; 0703 1-e0:  **  ** 
-        .byte   %01100110       ; 0704 1-e0:  **  ** 
-        .byte   %01111100       ; 0705 1-e0:  *****  
-        .byte   %01100000       ; 0706 1-e0:  **     
-        .byte   %01100000       ; 0707 1-e0:  **     
-
-        .byte   %00000000       ; 0708 1-e1:         
-        .byte   %00000000       ; 0709 1-e1:         
-        .byte   %01111100       ; 070A 1-e1:  *****  
-        .byte   %01100110       ; 070B 1-e1:  **  ** 
-        .byte   %01100110       ; 070C 1-e1:  **  ** 
-        .byte   %01111100       ; 070D 1-e1:  *****  
-        .byte   %01100000       ; 070E 1-e1:  **     
-        .byte   %01100000       ; 070F 1-e1:  **     
-
-        .byte   %00000000       ; 0710 1-e2:         
-        .byte   %00000000       ; 0711 1-e2:         
-        .byte   %00111110       ; 0712 1-e2:   ***** 
-        .byte   %01100110       ; 0713 1-e2:  **  ** 
-        .byte   %01100110       ; 0714 1-e2:  **  ** 
-        .byte   %00111110       ; 0715 1-e2:   ***** 
-        .byte   %00000110       ; 0716 1-e2:      ** 
-        .byte   %00000110       ; 0717 1-e2:      ** 
-
-        .byte   %00000000       ; 0718 1-e3:         
-        .byte   %00000000       ; 0719 1-e3:         
-        .byte   %00111110       ; 071A 1-e3:   ***** 
-        .byte   %01100110       ; 071B 1-e3:  **  ** 
-        .byte   %01100110       ; 071C 1-e3:  **  ** 
-        .byte   %00111110       ; 071D 1-e3:   ***** 
-        .byte   %00000110       ; 071E 1-e3:      ** 
-        .byte   %00000110       ; 071F 1-e3:      ** 
-
-        .byte   %00000000       ; 0720 1-e4:         
-        .byte   %00000000       ; 0721 1-e4:         
-        .byte   %01111100       ; 0722 1-e4:  *****  
-        .byte   %01100110       ; 0723 1-e4:  **  ** 
-        .byte   %01100000       ; 0724 1-e4:  **     
-        .byte   %01100000       ; 0725 1-e4:  **     
-        .byte   %01100000       ; 0726 1-e4:  **     
-        .byte   %00000000       ; 0727 1-e4:         
-
-        .byte   %00000000       ; 0728 1-e5:         
-        .byte   %00000000       ; 0729 1-e5:         
-        .byte   %01111100       ; 072A 1-e5:  *****  
-        .byte   %01100110       ; 072B 1-e5:  **  ** 
-        .byte   %01100000       ; 072C 1-e5:  **     
-        .byte   %01100000       ; 072D 1-e5:  **     
-        .byte   %01100000       ; 072E 1-e5:  **     
-        .byte   %00000000       ; 072F 1-e5:         
-
-        .byte   %00000000       ; 0730 1-e6:         
-        .byte   %00000000       ; 0731 1-e6:         
-        .byte   %00111110       ; 0732 1-e6:   ***** 
-        .byte   %01100000       ; 0733 1-e6:  **     
-        .byte   %00111100       ; 0734 1-e6:   ****  
-        .byte   %00000110       ; 0735 1-e6:      ** 
-        .byte   %01111100       ; 0736 1-e6:  *****  
-        .byte   %00000000       ; 0737 1-e6:         
-
-        .byte   %00000000       ; 0738 1-e7:         
-        .byte   %00000000       ; 0739 1-e7:         
-        .byte   %00111110       ; 073A 1-e7:   ***** 
-        .byte   %01100000       ; 073B 1-e7:  **     
-        .byte   %00111100       ; 073C 1-e7:   ****  
-        .byte   %00000110       ; 073D 1-e7:      ** 
-        .byte   %01111100       ; 073E 1-e7:  *****  
-        .byte   %00000000       ; 073F 1-e7:         
-
-        .byte   %00000000       ; 0740 1-e8:         
-        .byte   %00011000       ; 0741 1-e8:    **   
-        .byte   %01111110       ; 0742 1-e8:  ****** 
-        .byte   %00011000       ; 0743 1-e8:    **   
-        .byte   %00011000       ; 0744 1-e8:    **   
-        .byte   %00011000       ; 0745 1-e8:    **   
-        .byte   %00001110       ; 0746 1-e8:     *** 
-        .byte   %00000000       ; 0747 1-e8:         
-
-        .byte   %00000000       ; 0748 1-e9:         
-        .byte   %00011000       ; 0749 1-e9:    **   
-        .byte   %01111110       ; 074A 1-e9:  ****** 
-        .byte   %00011000       ; 074B 1-e9:    **   
-        .byte   %00011000       ; 074C 1-e9:    **   
-        .byte   %00011000       ; 074D 1-e9:    **   
-        .byte   %00001110       ; 074E 1-e9:     *** 
-        .byte   %00000000       ; 074F 1-e9:         
-
-        .byte   %00000000       ; 0750 1-ea:         
-        .byte   %00000000       ; 0751 1-ea:         
-        .byte   %01100110       ; 0752 1-ea:  **  ** 
-        .byte   %01100110       ; 0753 1-ea:  **  ** 
-        .byte   %01100110       ; 0754 1-ea:  **  ** 
-        .byte   %01100110       ; 0755 1-ea:  **  ** 
-        .byte   %00111110       ; 0756 1-ea:   ***** 
-        .byte   %00000000       ; 0757 1-ea:         
-
-        .byte   %00000000       ; 0758 1-eb:         
-        .byte   %00000000       ; 0759 1-eb:         
-        .byte   %01100110       ; 075A 1-eb:  **  ** 
-        .byte   %01100110       ; 075B 1-eb:  **  ** 
-        .byte   %01100110       ; 075C 1-eb:  **  ** 
-        .byte   %01100110       ; 075D 1-eb:  **  ** 
-        .byte   %00111110       ; 075E 1-eb:   ***** 
-        .byte   %00000000       ; 075F 1-eb:         
-
-        .byte   %00000000       ; 0760 1-ec:         
-        .byte   %00000000       ; 0761 1-ec:         
-        .byte   %01100110       ; 0762 1-ec:  **  ** 
-        .byte   %01100110       ; 0763 1-ec:  **  ** 
-        .byte   %01100110       ; 0764 1-ec:  **  ** 
-        .byte   %00111100       ; 0765 1-ec:   ****  
-        .byte   %00011000       ; 0766 1-ec:    **   
-        .byte   %00000000       ; 0767 1-ec:         
-
-        .byte   %00000000       ; 0768 1-ed:         
-        .byte   %00000000       ; 0769 1-ed:         
-        .byte   %01100110       ; 076A 1-ed:  **  ** 
-        .byte   %01100110       ; 076B 1-ed:  **  ** 
-        .byte   %01100110       ; 076C 1-ed:  **  ** 
-        .byte   %00111100       ; 076D 1-ed:   ****  
-        .byte   %00011000       ; 076E 1-ed:    **   
-        .byte   %00000000       ; 076F 1-ed:         
-
-        .byte   %00000000       ; 0770 1-ee:         
-        .byte   %00000000       ; 0771 1-ee:         
-        .byte   %01100011       ; 0772 1-ee:  **   **
-        .byte   %01101011       ; 0773 1-ee:  ** * **
-        .byte   %01111111       ; 0774 1-ee:  *******
-        .byte   %00111110       ; 0775 1-ee:   ***** 
-        .byte   %00110110       ; 0776 1-ee:   ** ** 
-        .byte   %00000000       ; 0777 1-ee:         
-
-        .byte   %00000000       ; 0778 1-ef:         
-        .byte   %00000000       ; 0779 1-ef:         
-        .byte   %01100011       ; 077A 1-ef:  **   **
-        .byte   %01101011       ; 077B 1-ef:  ** * **
-        .byte   %01111111       ; 077C 1-ef:  *******
-        .byte   %00111110       ; 077D 1-ef:   ***** 
-        .byte   %00110110       ; 077E 1-ef:   ** ** 
-        .byte   %00000000       ; 077F 1-ef:         
-
-        .byte   %00000000       ; 0780 1-f0:         
-        .byte   %00000000       ; 0781 1-f0:         
-        .byte   %01100110       ; 0782 1-f0:  **  ** 
-        .byte   %00111100       ; 0783 1-f0:   ****  
-        .byte   %00011000       ; 0784 1-f0:    **   
-        .byte   %00111100       ; 0785 1-f0:   ****  
-        .byte   %01100110       ; 0786 1-f0:  **  ** 
-        .byte   %00000000       ; 0787 1-f0:         
-
-        .byte   %00000000       ; 0788 1-f1:         
-        .byte   %00000000       ; 0789 1-f1:         
-        .byte   %01100110       ; 078A 1-f1:  **  ** 
-        .byte   %00111100       ; 078B 1-f1:   ****  
-        .byte   %00011000       ; 078C 1-f1:    **   
-        .byte   %00111100       ; 078D 1-f1:   ****  
-        .byte   %01100110       ; 078E 1-f1:  **  ** 
-        .byte   %00000000       ; 078F 1-f1:         
-
-        .byte   %00000000       ; 0790 1-f2:         
-        .byte   %00000000       ; 0791 1-f2:         
-        .byte   %01100110       ; 0792 1-f2:  **  ** 
-        .byte   %01100110       ; 0793 1-f2:  **  ** 
-        .byte   %01100110       ; 0794 1-f2:  **  ** 
-        .byte   %00111110       ; 0795 1-f2:   ***** 
-        .byte   %00001100       ; 0796 1-f2:     **  
-        .byte   %01111000       ; 0797 1-f2:  ****   
-
-        .byte   %00000000       ; 0798 1-f3:         
-        .byte   %00000000       ; 0799 1-f3:         
-        .byte   %01100110       ; 079A 1-f3:  **  ** 
-        .byte   %01100110       ; 079B 1-f3:  **  ** 
-        .byte   %01100110       ; 079C 1-f3:  **  ** 
-        .byte   %00111110       ; 079D 1-f3:   ***** 
-        .byte   %00001100       ; 079E 1-f3:     **  
-        .byte   %01111000       ; 079F 1-f3:  ****   
-
-        .byte   %00000000       ; 07A0 1-f4:         
-        .byte   %00000000       ; 07A1 1-f4:         
-        .byte   %01111110       ; 07A2 1-f4:  ****** 
-        .byte   %00001100       ; 07A3 1-f4:     **  
-        .byte   %00011000       ; 07A4 1-f4:    **   
-        .byte   %00110000       ; 07A5 1-f4:   **    
-        .byte   %01111110       ; 07A6 1-f4:  ****** 
-        .byte   %00000000       ; 07A7 1-f4:         
-
-        .byte   %00000000       ; 07A8 1-f5:         
-        .byte   %00000000       ; 07A9 1-f5:         
-        .byte   %01111110       ; 07AA 1-f5:  ****** 
-        .byte   %00001100       ; 07AB 1-f5:     **  
-        .byte   %00011000       ; 07AC 1-f5:    **   
-        .byte   %00110000       ; 07AD 1-f5:   **    
-        .byte   %01111110       ; 07AE 1-f5:  ****** 
-        .byte   %00000000       ; 07AF 1-f5:         
-
-        .byte   %00011100       ; 07B0 1-f6:    ***  
-        .byte   %00110000       ; 07B1 1-f6:   **    
-        .byte   %00011000       ; 07B2 1-f6:    **   
-        .byte   %01110000       ; 07B3 1-f6:  ***    
-        .byte   %00011000       ; 07B4 1-f6:    **   
-        .byte   %00110000       ; 07B5 1-f6:   **    
-        .byte   %00011100       ; 07B6 1-f6:    ***  
-        .byte   %00000000       ; 07B7 1-f6:         
-
-        .byte   %00011100       ; 07B8 1-f7:    ***  
-        .byte   %00110000       ; 07B9 1-f7:   **    
-        .byte   %00011000       ; 07BA 1-f7:    **   
-        .byte   %01110000       ; 07BB 1-f7:  ***    
-        .byte   %00011000       ; 07BC 1-f7:    **   
-        .byte   %00110000       ; 07BD 1-f7:   **    
-        .byte   %00011100       ; 07BE 1-f7:    ***  
-        .byte   %00000000       ; 07BF 1-f7:         
-
-        .byte   %00011000       ; 07C0 1-f8:    **   
-        .byte   %00011000       ; 07C1 1-f8:    **   
-        .byte   %00011000       ; 07C2 1-f8:    **   
-        .byte   %00000000       ; 07C3 1-f8:         
-        .byte   %00000000       ; 07C4 1-f8:         
-        .byte   %00011000       ; 07C5 1-f8:    **   
-        .byte   %00011000       ; 07C6 1-f8:    **   
-        .byte   %00011000       ; 07C7 1-f8:    **   
-
-        .byte   %00011000       ; 07C8 1-f9:    **   
-        .byte   %00011000       ; 07C9 1-f9:    **   
-        .byte   %00011000       ; 07CA 1-f9:    **   
-        .byte   %00000000       ; 07CB 1-f9:         
-        .byte   %00000000       ; 07CC 1-f9:         
-        .byte   %00011000       ; 07CD 1-f9:    **   
-        .byte   %00011000       ; 07CE 1-f9:    **   
-        .byte   %00011000       ; 07CF 1-f9:    **   
-
-        .byte   %00111000       ; 07D0 1-fa:   ***   
-        .byte   %00001100       ; 07D1 1-fa:     **  
-        .byte   %00011000       ; 07D2 1-fa:    **   
-        .byte   %00001110       ; 07D3 1-fa:     *** 
-        .byte   %00011000       ; 07D4 1-fa:    **   
-        .byte   %00001100       ; 07D5 1-fa:     **  
-        .byte   %00111000       ; 07D6 1-fa:   ***   
-        .byte   %00000000       ; 07D7 1-fa:         
-
-        .byte   %00111000       ; 07D8 1-fb:   ***   
-        .byte   %00001100       ; 07D9 1-fb:     **  
-        .byte   %00011000       ; 07DA 1-fb:    **   
-        .byte   %00001110       ; 07DB 1-fb:     *** 
-        .byte   %00011000       ; 07DC 1-fb:    **   
-        .byte   %00001100       ; 07DD 1-fb:     **  
-        .byte   %00111000       ; 07DE 1-fb:   ***   
-        .byte   %00000000       ; 07DF 1-fb:         
-
-        .byte   %00110011       ; 07E0 1-fc:   **  **
-        .byte   %11111111       ; 07E1 1-fc: ********
-        .byte   %11001100       ; 07E2 1-fc: **  **  
-        .byte   %00000000       ; 07E3 1-fc:         
-        .byte   %00000000       ; 07E4 1-fc:         
-        .byte   %00000000       ; 07E5 1-fc:         
-        .byte   %00000000       ; 07E6 1-fc:         
-        .byte   %00000000       ; 07E7 1-fc:         
-
-        .byte   %00110011       ; 07E8 1-fd:   **  **
-        .byte   %11111111       ; 07E9 1-fd: ********
-        .byte   %11001100       ; 07EA 1-fd: **  **  
-        .byte   %00000000       ; 07EB 1-fd:         
-        .byte   %00000000       ; 07EC 1-fd:         
-        .byte   %00000000       ; 07ED 1-fd:         
-        .byte   %00000000       ; 07EE 1-fd:         
-        .byte   %00000000       ; 07EF 1-fd:         
-
-        .byte   %00000000       ; 07F0 1-fe:         
-        .byte   %00000000       ; 07F1 1-fe:         
-        .byte   %00000000       ; 07F2 1-fe:         
-        .byte   %00000000       ; 07F3 1-fe:         
-        .byte   %00000000       ; 07F4 1-fe:         
-        .byte   %00000000       ; 07F5 1-fe:         
-        .byte   %00000000       ; 07F6 1-fe:         
-        .byte   %00000000       ; 07F7 1-fe:         
-
-        .byte   %00000000       ; 07F8 1-ff:         
-        .byte   %00000000       ; 07F9 1-ff:         
-        .byte   %00000000       ; 07FA 1-ff:         
-        .byte   %00000000       ; 07FB 1-ff:         
-        .byte   %00000000       ; 07FC 1-ff:         
-        .byte   %00000000       ; 07FD 1-ff:         
-        .byte   %00000000       ; 07FE 1-ff:         
-        .byte   %00000000       ; 07FF 1-ff:         
-
-        .byte   %11111111       ; 0800 2-00: ********
-        .byte   %11111111       ; 0801 2-00: ********
-        .byte   %11111111       ; 0802 2-00: ********
-        .byte   %11111111       ; 0803 2-00: ********
-        .byte   %11111111       ; 0804 2-00: ********
-        .byte   %11111111       ; 0805 2-00: ********
-        .byte   %11111111       ; 0806 2-00: ********
-        .byte   %11111111       ; 0807 2-00: ********
-
-        .byte   %11111111       ; 0808 2-01: ********
-        .byte   %11111111       ; 0809 2-01: ********
-        .byte   %11111111       ; 080A 2-01: ********
-        .byte   %11111111       ; 080B 2-01: ********
-        .byte   %11111111       ; 080C 2-01: ********
-        .byte   %11111111       ; 080D 2-01: ********
-        .byte   %11111111       ; 080E 2-01: ********
-        .byte   %11111111       ; 080F 2-01: ********
-
-        .byte   %00110011       ; 0810 2-02:   **  **
-        .byte   %00110011       ; 0811 2-02:   **  **
-        .byte   %11001100       ; 0812 2-02: **  **  
-        .byte   %11001100       ; 0813 2-02: **  **  
-        .byte   %00110011       ; 0814 2-02:   **  **
-        .byte   %00110011       ; 0815 2-02:   **  **
-        .byte   %11001100       ; 0816 2-02: **  **  
-        .byte   %11001100       ; 0817 2-02: **  **  
-
-        .byte   %00110011       ; 0818 2-03:   **  **
-        .byte   %00110011       ; 0819 2-03:   **  **
-        .byte   %11001100       ; 081A 2-03: **  **  
-        .byte   %11001100       ; 081B 2-03: **  **  
-        .byte   %00110011       ; 081C 2-03:   **  **
-        .byte   %00110011       ; 081D 2-03:   **  **
-        .byte   %11001100       ; 081E 2-03: **  **  
-        .byte   %11001100       ; 081F 2-03: **  **  
-
-        .byte   %11111111       ; 0820 2-04: ********
-        .byte   %11100111       ; 0821 2-04: ***  ***
-        .byte   %11000011       ; 0822 2-04: **    **
-        .byte   %10000001       ; 0823 2-04: *      *
-        .byte   %11100111       ; 0824 2-04: ***  ***
-        .byte   %11100111       ; 0825 2-04: ***  ***
-        .byte   %11100111       ; 0826 2-04: ***  ***
-        .byte   %11100111       ; 0827 2-04: ***  ***
-
-        .byte   %11111111       ; 0828 2-05: ********
-        .byte   %11100111       ; 0829 2-05: ***  ***
-        .byte   %11000011       ; 082A 2-05: **    **
-        .byte   %10000001       ; 082B 2-05: *      *
-        .byte   %11100111       ; 082C 2-05: ***  ***
-        .byte   %11100111       ; 082D 2-05: ***  ***
-        .byte   %11100111       ; 082E 2-05: ***  ***
-        .byte   %11100111       ; 082F 2-05: ***  ***
-
-        .byte   %11111111       ; 0830 2-06: ********
-        .byte   %11101111       ; 0831 2-06: *** ****
-        .byte   %11001111       ; 0832 2-06: **  ****
-        .byte   %10000000       ; 0833 2-06: *       
-        .byte   %10000000       ; 0834 2-06: *       
-        .byte   %11001111       ; 0835 2-06: **  ****
-        .byte   %11101111       ; 0836 2-06: *** ****
-        .byte   %11111111       ; 0837 2-06: ********
-
-        .byte   %11111111       ; 0838 2-07: ********
-        .byte   %11101111       ; 0839 2-07: *** ****
-        .byte   %11001111       ; 083A 2-07: **  ****
-        .byte   %10000000       ; 083B 2-07: *       
-        .byte   %10000000       ; 083C 2-07: *       
-        .byte   %11001111       ; 083D 2-07: **  ****
-        .byte   %11101111       ; 083E 2-07: *** ****
-        .byte   %11111111       ; 083F 2-07: ********
-
-        .byte   %11110011       ; 0840 2-08: ****  **
-        .byte   %11101101       ; 0841 2-08: *** ** *
-        .byte   %11001111       ; 0842 2-08: **  ****
-        .byte   %10000011       ; 0843 2-08: *     **
-        .byte   %11001111       ; 0844 2-08: **  ****
-        .byte   %10011101       ; 0845 2-08: *  *** *
-        .byte   %00000011       ; 0846 2-08:       **
-        .byte   %11111111       ; 0847 2-08: ********
-
-        .byte   %11110011       ; 0848 2-09: ****  **
-        .byte   %11101101       ; 0849 2-09: *** ** *
-        .byte   %11001111       ; 084A 2-09: **  ****
-        .byte   %10000011       ; 084B 2-09: *     **
-        .byte   %11001111       ; 084C 2-09: **  ****
-        .byte   %10011101       ; 084D 2-09: *  *** *
-        .byte   %00000011       ; 084E 2-09:       **
-        .byte   %11111111       ; 084F 2-09: ********
-
-        .byte   %11111111       ; 0850 2-0a: ********
-        .byte   %11111111       ; 0851 2-0a: ********
-        .byte   %11111100       ; 0852 2-0a: ******  
-        .byte   %11000001       ; 0853 2-0a: **     *
-        .byte   %10001001       ; 0854 2-0a: *   *  *
-        .byte   %11001001       ; 0855 2-0a: **  *  *
-        .byte   %11001001       ; 0856 2-0a: **  *  *
-        .byte   %11111111       ; 0857 2-0a: ********
-
-        .byte   %11111111       ; 0858 2-0b: ********
-        .byte   %11111111       ; 0859 2-0b: ********
-        .byte   %11111100       ; 085A 2-0b: ******  
-        .byte   %11000001       ; 085B 2-0b: **     *
-        .byte   %10001001       ; 085C 2-0b: *   *  *
-        .byte   %11001001       ; 085D 2-0b: **  *  *
-        .byte   %11001001       ; 085E 2-0b: **  *  *
-        .byte   %11111111       ; 085F 2-0b: ********
-
-        .byte   %10000000       ; 0860 2-0c: *       
-        .byte   %10000000       ; 0861 2-0c: *       
-        .byte   %11111111       ; 0862 2-0c: ********
-        .byte   %11111111       ; 0863 2-0c: ********
-        .byte   %11111111       ; 0864 2-0c: ********
-        .byte   %11111111       ; 0865 2-0c: ********
-        .byte   %11111111       ; 0866 2-0c: ********
-        .byte   %11111111       ; 0867 2-0c: ********
-
-        .byte   %10000000       ; 0868 2-0d: *       
-        .byte   %10000000       ; 0869 2-0d: *       
-        .byte   %11111111       ; 086A 2-0d: ********
-        .byte   %11111111       ; 086B 2-0d: ********
-        .byte   %11111111       ; 086C 2-0d: ********
-        .byte   %11111111       ; 086D 2-0d: ********
-        .byte   %11111111       ; 086E 2-0d: ********
-        .byte   %11111111       ; 086F 2-0d: ********
-
-        .byte   %00011111       ; 0870 2-0e:    *****
-        .byte   %00011111       ; 0871 2-0e:    *****
-        .byte   %10011111       ; 0872 2-0e: *  *****
-        .byte   %10011111       ; 0873 2-0e: *  *****
-        .byte   %10011111       ; 0874 2-0e: *  *****
-        .byte   %10011111       ; 0875 2-0e: *  *****
-        .byte   %10011111       ; 0876 2-0e: *  *****
-        .byte   %10011111       ; 0877 2-0e: *  *****
-
-        .byte   %00011111       ; 0878 2-0f:    *****
-        .byte   %00011111       ; 0879 2-0f:    *****
-        .byte   %10011111       ; 087A 2-0f: *  *****
-        .byte   %10011111       ; 087B 2-0f: *  *****
-        .byte   %10011111       ; 087C 2-0f: *  *****
-        .byte   %10011111       ; 087D 2-0f: *  *****
-        .byte   %10011111       ; 087E 2-0f: *  *****
-        .byte   %10011111       ; 087F 2-0f: *  *****
-
-        .byte   %11100111       ; 0880 2-10: ***  ***
-        .byte   %11100111       ; 0881 2-10: ***  ***
-        .byte   %11100111       ; 0882 2-10: ***  ***
-        .byte   %00000111       ; 0883 2-10:      ***
-        .byte   %00000111       ; 0884 2-10:      ***
-        .byte   %11111111       ; 0885 2-10: ********
-        .byte   %11111111       ; 0886 2-10: ********
-        .byte   %11111111       ; 0887 2-10: ********
-
-        .byte   %11100111       ; 0888 2-11: ***  ***
-        .byte   %11100111       ; 0889 2-11: ***  ***
-        .byte   %11100111       ; 088A 2-11: ***  ***
-        .byte   %00000111       ; 088B 2-11:      ***
-        .byte   %00000111       ; 088C 2-11:      ***
-        .byte   %11111111       ; 088D 2-11: ********
-        .byte   %11111111       ; 088E 2-11: ********
-        .byte   %11111111       ; 088F 2-11: ********
-
-        .byte   %00110011       ; 0890 2-12:   **  **
-        .byte   %01100110       ; 0891 2-12:  **  ** 
-        .byte   %11001100       ; 0892 2-12: **  **  
-        .byte   %10011001       ; 0893 2-12: *  **  *
-        .byte   %00110011       ; 0894 2-12:   **  **
-        .byte   %01100110       ; 0895 2-12:  **  ** 
-        .byte   %11001100       ; 0896 2-12: **  **  
-        .byte   %10011001       ; 0897 2-12: *  **  *
-
-        .byte   %00110011       ; 0898 2-13:   **  **
-        .byte   %01100110       ; 0899 2-13:  **  ** 
-        .byte   %11001100       ; 089A 2-13: **  **  
-        .byte   %10011001       ; 089B 2-13: *  **  *
-        .byte   %00110011       ; 089C 2-13:   **  **
-        .byte   %01100110       ; 089D 2-13:  **  ** 
-        .byte   %11001100       ; 089E 2-13: **  **  
-        .byte   %10011001       ; 089F 2-13: *  **  *
-
-        .byte   %11001100       ; 08A0 2-14: **  **  
-        .byte   %01100110       ; 08A1 2-14:  **  ** 
-        .byte   %00110011       ; 08A2 2-14:   **  **
-        .byte   %10011001       ; 08A3 2-14: *  **  *
-        .byte   %11001100       ; 08A4 2-14: **  **  
-        .byte   %01100110       ; 08A5 2-14:  **  ** 
-        .byte   %00110011       ; 08A6 2-14:   **  **
-        .byte   %10011001       ; 08A7 2-14: *  **  *
-
-        .byte   %11001100       ; 08A8 2-15: **  **  
-        .byte   %01100110       ; 08A9 2-15:  **  ** 
-        .byte   %00110011       ; 08AA 2-15:   **  **
-        .byte   %10011001       ; 08AB 2-15: *  **  *
-        .byte   %11001100       ; 08AC 2-15: **  **  
-        .byte   %01100110       ; 08AD 2-15:  **  ** 
-        .byte   %00110011       ; 08AE 2-15:   **  **
-        .byte   %10011001       ; 08AF 2-15: *  **  *
-
-        .byte   %11111111       ; 08B0 2-16: ********
-        .byte   %11111111       ; 08B1 2-16: ********
-        .byte   %11111111       ; 08B2 2-16: ********
-        .byte   %00000000       ; 08B3 2-16:         
-        .byte   %00000000       ; 08B4 2-16:         
-        .byte   %11111111       ; 08B5 2-16: ********
-        .byte   %11111111       ; 08B6 2-16: ********
-        .byte   %11111111       ; 08B7 2-16: ********
-
-        .byte   %11111111       ; 08B8 2-17: ********
-        .byte   %11111111       ; 08B9 2-17: ********
-        .byte   %11111111       ; 08BA 2-17: ********
-        .byte   %00000000       ; 08BB 2-17:         
-        .byte   %00000000       ; 08BC 2-17:         
-        .byte   %11111111       ; 08BD 2-17: ********
-        .byte   %11111111       ; 08BE 2-17: ********
-        .byte   %11111111       ; 08BF 2-17: ********
-
-        .byte   %11111100       ; 08C0 2-18: ******  
-        .byte   %11111100       ; 08C1 2-18: ******  
-        .byte   %11111100       ; 08C2 2-18: ******  
-        .byte   %11111100       ; 08C3 2-18: ******  
-        .byte   %11111100       ; 08C4 2-18: ******  
-        .byte   %11111100       ; 08C5 2-18: ******  
-        .byte   %11111100       ; 08C6 2-18: ******  
-        .byte   %11111100       ; 08C7 2-18: ******  
-
-        .byte   %11111100       ; 08C8 2-19: ******  
-        .byte   %11111100       ; 08C9 2-19: ******  
-        .byte   %11111100       ; 08CA 2-19: ******  
-        .byte   %11111100       ; 08CB 2-19: ******  
-        .byte   %11111100       ; 08CC 2-19: ******  
-        .byte   %11111100       ; 08CD 2-19: ******  
-        .byte   %11111100       ; 08CE 2-19: ******  
-        .byte   %11111100       ; 08CF 2-19: ******  
-
-        .byte   %11111111       ; 08D0 2-1a: ********
-        .byte   %11111111       ; 08D1 2-1a: ********
-        .byte   %11111111       ; 08D2 2-1a: ********
-        .byte   %11111111       ; 08D3 2-1a: ********
-        .byte   %00110011       ; 08D4 2-1a:   **  **
-        .byte   %00110011       ; 08D5 2-1a:   **  **
-        .byte   %11001100       ; 08D6 2-1a: **  **  
-        .byte   %11001100       ; 08D7 2-1a: **  **  
-
-        .byte   %11111111       ; 08D8 2-1b: ********
-        .byte   %11111111       ; 08D9 2-1b: ********
-        .byte   %11111111       ; 08DA 2-1b: ********
-        .byte   %11111111       ; 08DB 2-1b: ********
-        .byte   %00110011       ; 08DC 2-1b:   **  **
-        .byte   %00110011       ; 08DD 2-1b:   **  **
-        .byte   %11001100       ; 08DE 2-1b: **  **  
-        .byte   %11001100       ; 08DF 2-1b: **  **  
-
-        .byte   %11100111       ; 08E0 2-1c: ***  ***
-        .byte   %11100111       ; 08E1 2-1c: ***  ***
-        .byte   %11100111       ; 08E2 2-1c: ***  ***
-        .byte   %11100111       ; 08E3 2-1c: ***  ***
-        .byte   %11100111       ; 08E4 2-1c: ***  ***
-        .byte   %11100111       ; 08E5 2-1c: ***  ***
-        .byte   %11100111       ; 08E6 2-1c: ***  ***
-        .byte   %11100111       ; 08E7 2-1c: ***  ***
-
-        .byte   %11100111       ; 08E8 2-1d: ***  ***
-        .byte   %11100111       ; 08E9 2-1d: ***  ***
-        .byte   %11100111       ; 08EA 2-1d: ***  ***
-        .byte   %11100111       ; 08EB 2-1d: ***  ***
-        .byte   %11100111       ; 08EC 2-1d: ***  ***
-        .byte   %11100111       ; 08ED 2-1d: ***  ***
-        .byte   %11100111       ; 08EE 2-1d: ***  ***
-        .byte   %11100111       ; 08EF 2-1d: ***  ***
-
-        .byte   %11100111       ; 08F0 2-1e: ***  ***
-        .byte   %11100111       ; 08F1 2-1e: ***  ***
-        .byte   %11100111       ; 08F2 2-1e: ***  ***
-        .byte   %11100000       ; 08F3 2-1e: ***     
-        .byte   %11100000       ; 08F4 2-1e: ***     
-        .byte   %11100111       ; 08F5 2-1e: ***  ***
-        .byte   %11100111       ; 08F6 2-1e: ***  ***
-        .byte   %11100111       ; 08F7 2-1e: ***  ***
-
-        .byte   %11100111       ; 08F8 2-1f: ***  ***
-        .byte   %11100111       ; 08F9 2-1f: ***  ***
-        .byte   %11100111       ; 08FA 2-1f: ***  ***
-        .byte   %11100000       ; 08FB 2-1f: ***     
-        .byte   %11100000       ; 08FC 2-1f: ***     
-        .byte   %11100111       ; 08FD 2-1f: ***  ***
-        .byte   %11100111       ; 08FE 2-1f: ***  ***
-        .byte   %11100111       ; 08FF 2-1f: ***  ***
-
-        .byte   %11100111       ; 0900 2-20: ***  ***
-        .byte   %11100111       ; 0901 2-20: ***  ***
-        .byte   %11100111       ; 0902 2-20: ***  ***
-        .byte   %00000000       ; 0903 2-20:         
-        .byte   %00000000       ; 0904 2-20:         
-        .byte   %11100111       ; 0905 2-20: ***  ***
-        .byte   %11100111       ; 0906 2-20: ***  ***
-        .byte   %11100111       ; 0907 2-20: ***  ***
-
-        .byte   %11100111       ; 0908 2-21: ***  ***
-        .byte   %11100111       ; 0909 2-21: ***  ***
-        .byte   %11100111       ; 090A 2-21: ***  ***
-        .byte   %00000000       ; 090B 2-21:         
-        .byte   %00000000       ; 090C 2-21:         
-        .byte   %11100111       ; 090D 2-21: ***  ***
-        .byte   %11100111       ; 090E 2-21: ***  ***
-        .byte   %11100111       ; 090F 2-21: ***  ***
-
-        .byte   %11100111       ; 0910 2-22: ***  ***
-        .byte   %11100111       ; 0911 2-22: ***  ***
-        .byte   %11100111       ; 0912 2-22: ***  ***
-        .byte   %11100000       ; 0913 2-22: ***     
-        .byte   %11100000       ; 0914 2-22: ***     
-        .byte   %11111111       ; 0915 2-22: ********
-        .byte   %11111111       ; 0916 2-22: ********
-        .byte   %11111111       ; 0917 2-22: ********
-
-        .byte   %11100111       ; 0918 2-23: ***  ***
-        .byte   %11100111       ; 0919 2-23: ***  ***
-        .byte   %11100111       ; 091A 2-23: ***  ***
-        .byte   %11100000       ; 091B 2-23: ***     
-        .byte   %11100000       ; 091C 2-23: ***     
-        .byte   %11111111       ; 091D 2-23: ********
-        .byte   %11111111       ; 091E 2-23: ********
-        .byte   %11111111       ; 091F 2-23: ********
-
-        .byte   %11111111       ; 0920 2-24: ********
-        .byte   %11111111       ; 0921 2-24: ********
-        .byte   %11111111       ; 0922 2-24: ********
-        .byte   %00000111       ; 0923 2-24:      ***
-        .byte   %00000111       ; 0924 2-24:      ***
-        .byte   %11100111       ; 0925 2-24: ***  ***
-        .byte   %11100111       ; 0926 2-24: ***  ***
-        .byte   %11100111       ; 0927 2-24: ***  ***
-
-        .byte   %11111111       ; 0928 2-25: ********
-        .byte   %11111111       ; 0929 2-25: ********
-        .byte   %11111111       ; 092A 2-25: ********
-        .byte   %00000111       ; 092B 2-25:      ***
-        .byte   %00000111       ; 092C 2-25:      ***
-        .byte   %11100111       ; 092D 2-25: ***  ***
-        .byte   %11100111       ; 092E 2-25: ***  ***
-        .byte   %11100111       ; 092F 2-25: ***  ***
-
-        .byte   %11111111       ; 0930 2-26: ********
-        .byte   %11111111       ; 0931 2-26: ********
-        .byte   %11111111       ; 0932 2-26: ********
-        .byte   %11111111       ; 0933 2-26: ********
-        .byte   %11111111       ; 0934 2-26: ********
-        .byte   %11111111       ; 0935 2-26: ********
-        .byte   %00000000       ; 0936 2-26:         
-        .byte   %00000000       ; 0937 2-26:         
-
-        .byte   %11111111       ; 0938 2-27: ********
-        .byte   %11111111       ; 0939 2-27: ********
-        .byte   %11111111       ; 093A 2-27: ********
-        .byte   %11111111       ; 093B 2-27: ********
-        .byte   %11111111       ; 093C 2-27: ********
-        .byte   %11111111       ; 093D 2-27: ********
-        .byte   %00000000       ; 093E 2-27:         
-        .byte   %00000000       ; 093F 2-27:         
-
-        .byte   %11111111       ; 0940 2-28: ********
-        .byte   %11111111       ; 0941 2-28: ********
-        .byte   %11111111       ; 0942 2-28: ********
-        .byte   %11100000       ; 0943 2-28: ***     
-        .byte   %11100000       ; 0944 2-28: ***     
-        .byte   %11100111       ; 0945 2-28: ***  ***
-        .byte   %11100111       ; 0946 2-28: ***  ***
-        .byte   %11100111       ; 0947 2-28: ***  ***
-
-        .byte   %11111111       ; 0948 2-29: ********
-        .byte   %11111111       ; 0949 2-29: ********
-        .byte   %11111111       ; 094A 2-29: ********
-        .byte   %11100000       ; 094B 2-29: ***     
-        .byte   %11100000       ; 094C 2-29: ***     
-        .byte   %11100111       ; 094D 2-29: ***  ***
-        .byte   %11100111       ; 094E 2-29: ***  ***
-        .byte   %11100111       ; 094F 2-29: ***  ***
-
-        .byte   %11100111       ; 0950 2-2a: ***  ***
-        .byte   %11100111       ; 0951 2-2a: ***  ***
-        .byte   %11100111       ; 0952 2-2a: ***  ***
-        .byte   %00000000       ; 0953 2-2a:         
-        .byte   %00000000       ; 0954 2-2a:         
-        .byte   %11111111       ; 0955 2-2a: ********
-        .byte   %11111111       ; 0956 2-2a: ********
-        .byte   %11111111       ; 0957 2-2a: ********
-
-        .byte   %11100111       ; 0958 2-2b: ***  ***
-        .byte   %11100111       ; 0959 2-2b: ***  ***
-        .byte   %11100111       ; 095A 2-2b: ***  ***
-        .byte   %00000000       ; 095B 2-2b:         
-        .byte   %00000000       ; 095C 2-2b:         
-        .byte   %11111111       ; 095D 2-2b: ********
-        .byte   %11111111       ; 095E 2-2b: ********
-        .byte   %11111111       ; 095F 2-2b: ********
-
-        .byte   %11111111       ; 0960 2-2c: ********
-        .byte   %11111111       ; 0961 2-2c: ********
-        .byte   %11111111       ; 0962 2-2c: ********
-        .byte   %00000000       ; 0963 2-2c:         
-        .byte   %00000000       ; 0964 2-2c:         
-        .byte   %11100111       ; 0965 2-2c: ***  ***
-        .byte   %11100111       ; 0966 2-2c: ***  ***
-        .byte   %11100111       ; 0967 2-2c: ***  ***
-
-        .byte   %11111111       ; 0968 2-2d: ********
-        .byte   %11111111       ; 0969 2-2d: ********
-        .byte   %11111111       ; 096A 2-2d: ********
-        .byte   %00000000       ; 096B 2-2d:         
-        .byte   %00000000       ; 096C 2-2d:         
-        .byte   %11100111       ; 096D 2-2d: ***  ***
-        .byte   %11100111       ; 096E 2-2d: ***  ***
-        .byte   %11100111       ; 096F 2-2d: ***  ***
-
-        .byte   %11100111       ; 0970 2-2e: ***  ***
-        .byte   %11100111       ; 0971 2-2e: ***  ***
-        .byte   %11100111       ; 0972 2-2e: ***  ***
-        .byte   %00000111       ; 0973 2-2e:      ***
-        .byte   %00000111       ; 0974 2-2e:      ***
-        .byte   %11100111       ; 0975 2-2e: ***  ***
-        .byte   %11100111       ; 0976 2-2e: ***  ***
-        .byte   %11100111       ; 0977 2-2e: ***  ***
-
-        .byte   %11100111       ; 0978 2-2f: ***  ***
-        .byte   %11100111       ; 0979 2-2f: ***  ***
-        .byte   %11100111       ; 097A 2-2f: ***  ***
-        .byte   %00000111       ; 097B 2-2f:      ***
-        .byte   %00000111       ; 097C 2-2f:      ***
-        .byte   %11100111       ; 097D 2-2f: ***  ***
-        .byte   %11100111       ; 097E 2-2f: ***  ***
-        .byte   %11100111       ; 097F 2-2f: ***  ***
-
-        .byte   %00001111       ; 0980 2-30:     ****
-        .byte   %00001111       ; 0981 2-30:     ****
-        .byte   %00001111       ; 0982 2-30:     ****
-        .byte   %00001111       ; 0983 2-30:     ****
-        .byte   %00001111       ; 0984 2-30:     ****
-        .byte   %00001111       ; 0985 2-30:     ****
-        .byte   %00001111       ; 0986 2-30:     ****
-        .byte   %00001111       ; 0987 2-30:     ****
-
-        .byte   %00001111       ; 0988 2-31:     ****
-        .byte   %00001111       ; 0989 2-31:     ****
-        .byte   %00001111       ; 098A 2-31:     ****
-        .byte   %00001111       ; 098B 2-31:     ****
-        .byte   %00001111       ; 098C 2-31:     ****
-        .byte   %00001111       ; 098D 2-31:     ****
-        .byte   %00001111       ; 098E 2-31:     ****
-        .byte   %00001111       ; 098F 2-31:     ****
-
-        .byte   %11111111       ; 0990 2-32: ********
-        .byte   %11111111       ; 0991 2-32: ********
-        .byte   %11111111       ; 0992 2-32: ********
-        .byte   %11111111       ; 0993 2-32: ********
-        .byte   %00000000       ; 0994 2-32:         
-        .byte   %00000000       ; 0995 2-32:         
-        .byte   %00000000       ; 0996 2-32:         
-        .byte   %00000000       ; 0997 2-32:         
-
-        .byte   %11111111       ; 0998 2-33: ********
-        .byte   %11111111       ; 0999 2-33: ********
-        .byte   %11111111       ; 099A 2-33: ********
-        .byte   %11111111       ; 099B 2-33: ********
-        .byte   %00000000       ; 099C 2-33:         
-        .byte   %00000000       ; 099D 2-33:         
-        .byte   %00000000       ; 099E 2-33:         
-        .byte   %00000000       ; 099F 2-33:         
-
-        .byte   %11111111       ; 09A0 2-34: ********
-        .byte   %11111111       ; 09A1 2-34: ********
-        .byte   %11111111       ; 09A2 2-34: ********
-        .byte   %11111111       ; 09A3 2-34: ********
-        .byte   %00001111       ; 09A4 2-34:     ****
-        .byte   %00001111       ; 09A5 2-34:     ****
-        .byte   %00001111       ; 09A6 2-34:     ****
-        .byte   %00001111       ; 09A7 2-34:     ****
-
-        .byte   %11111111       ; 09A8 2-35: ********
-        .byte   %11111111       ; 09A9 2-35: ********
-        .byte   %11111111       ; 09AA 2-35: ********
-        .byte   %11111111       ; 09AB 2-35: ********
-        .byte   %00001111       ; 09AC 2-35:     ****
-        .byte   %00001111       ; 09AD 2-35:     ****
-        .byte   %00001111       ; 09AE 2-35:     ****
-        .byte   %00001111       ; 09AF 2-35:     ****
-
-        .byte   %00111111       ; 09B0 2-36:   ******
-        .byte   %00111111       ; 09B1 2-36:   ******
-        .byte   %11001111       ; 09B2 2-36: **  ****
-        .byte   %11001111       ; 09B3 2-36: **  ****
-        .byte   %00111111       ; 09B4 2-36:   ******
-        .byte   %00111111       ; 09B5 2-36:   ******
-        .byte   %11001111       ; 09B6 2-36: **  ****
-        .byte   %11001111       ; 09B7 2-36: **  ****
-
-        .byte   %00111111       ; 09B8 2-37:   ******
-        .byte   %00111111       ; 09B9 2-37:   ******
-        .byte   %11001111       ; 09BA 2-37: **  ****
-        .byte   %11001111       ; 09BB 2-37: **  ****
-        .byte   %00111111       ; 09BC 2-37:   ******
-        .byte   %00111111       ; 09BD 2-37:   ******
-        .byte   %11001111       ; 09BE 2-37: **  ****
-        .byte   %11001111       ; 09BF 2-37: **  ****
-
-        .byte   %11110000       ; 09C0 2-38: ****    
-        .byte   %11110000       ; 09C1 2-38: ****    
-        .byte   %11110000       ; 09C2 2-38: ****    
-        .byte   %11110000       ; 09C3 2-38: ****    
-        .byte   %11111111       ; 09C4 2-38: ********
-        .byte   %11111111       ; 09C5 2-38: ********
-        .byte   %11111111       ; 09C6 2-38: ********
-        .byte   %11111111       ; 09C7 2-38: ********
-
-        .byte   %11110000       ; 09C8 2-39: ****    
-        .byte   %11110000       ; 09C9 2-39: ****    
-        .byte   %11110000       ; 09CA 2-39: ****    
-        .byte   %11110000       ; 09CB 2-39: ****    
-        .byte   %11111111       ; 09CC 2-39: ********
-        .byte   %11111111       ; 09CD 2-39: ********
-        .byte   %11111111       ; 09CE 2-39: ********
-        .byte   %11111111       ; 09CF 2-39: ********
-
-        .byte   %11111111       ; 09D0 2-3a: ********
-        .byte   %11111111       ; 09D1 2-3a: ********
-        .byte   %11111111       ; 09D2 2-3a: ********
-        .byte   %11111111       ; 09D3 2-3a: ********
-        .byte   %11110000       ; 09D4 2-3a: ****    
-        .byte   %11110000       ; 09D5 2-3a: ****    
-        .byte   %11110000       ; 09D6 2-3a: ****    
-        .byte   %11110000       ; 09D7 2-3a: ****    
-
-        .byte   %11111111       ; 09D8 2-3b: ********
-        .byte   %11111111       ; 09D9 2-3b: ********
-        .byte   %11111111       ; 09DA 2-3b: ********
-        .byte   %11111111       ; 09DB 2-3b: ********
-        .byte   %11110000       ; 09DC 2-3b: ****    
-        .byte   %11110000       ; 09DD 2-3b: ****    
-        .byte   %11110000       ; 09DE 2-3b: ****    
-        .byte   %11110000       ; 09DF 2-3b: ****    
-
-        .byte   %00001111       ; 09E0 2-3c:     ****
-        .byte   %00001111       ; 09E1 2-3c:     ****
-        .byte   %00001111       ; 09E2 2-3c:     ****
-        .byte   %00001111       ; 09E3 2-3c:     ****
-        .byte   %11111111       ; 09E4 2-3c: ********
-        .byte   %11111111       ; 09E5 2-3c: ********
-        .byte   %11111111       ; 09E6 2-3c: ********
-        .byte   %11111111       ; 09E7 2-3c: ********
-
-        .byte   %00001111       ; 09E8 2-3d:     ****
-        .byte   %00001111       ; 09E9 2-3d:     ****
-        .byte   %00001111       ; 09EA 2-3d:     ****
-        .byte   %00001111       ; 09EB 2-3d:     ****
-        .byte   %11111111       ; 09EC 2-3d: ********
-        .byte   %11111111       ; 09ED 2-3d: ********
-        .byte   %11111111       ; 09EE 2-3d: ********
-        .byte   %11111111       ; 09EF 2-3d: ********
-
-        .byte   %00001111       ; 09F0 2-3e:     ****
-        .byte   %00001111       ; 09F1 2-3e:     ****
-        .byte   %00001111       ; 09F2 2-3e:     ****
-        .byte   %00001111       ; 09F3 2-3e:     ****
-        .byte   %11110000       ; 09F4 2-3e: ****    
-        .byte   %11110000       ; 09F5 2-3e: ****    
-        .byte   %11110000       ; 09F6 2-3e: ****    
-        .byte   %11110000       ; 09F7 2-3e: ****    
-
-        .byte   %00001111       ; 09F8 2-3f:     ****
-        .byte   %00001111       ; 09F9 2-3f:     ****
-        .byte   %00001111       ; 09FA 2-3f:     ****
-        .byte   %00001111       ; 09FB 2-3f:     ****
-        .byte   %11110000       ; 09FC 2-3f: ****    
-        .byte   %11110000       ; 09FD 2-3f: ****    
-        .byte   %11110000       ; 09FE 2-3f: ****    
-        .byte   %11110000       ; 09FF 2-3f: ****    
-
-        .byte   %11111111       ; 0A00 2-40: ********
-        .byte   %11111111       ; 0A01 2-40: ********
-        .byte   %11111111       ; 0A02 2-40: ********
-        .byte   %11111111       ; 0A03 2-40: ********
-        .byte   %11111111       ; 0A04 2-40: ********
-        .byte   %11111111       ; 0A05 2-40: ********
-        .byte   %11111111       ; 0A06 2-40: ********
-        .byte   %11111111       ; 0A07 2-40: ********
-
-        .byte   %11111111       ; 0A08 2-41: ********
-        .byte   %11111111       ; 0A09 2-41: ********
-        .byte   %11111111       ; 0A0A 2-41: ********
-        .byte   %11111111       ; 0A0B 2-41: ********
-        .byte   %11111111       ; 0A0C 2-41: ********
-        .byte   %11111111       ; 0A0D 2-41: ********
-        .byte   %11111111       ; 0A0E 2-41: ********
-        .byte   %11111111       ; 0A0F 2-41: ********
-
-        .byte   %11100111       ; 0A10 2-42: ***  ***
-        .byte   %11100111       ; 0A11 2-42: ***  ***
-        .byte   %11100111       ; 0A12 2-42: ***  ***
-        .byte   %11100111       ; 0A13 2-42: ***  ***
-        .byte   %11111111       ; 0A14 2-42: ********
-        .byte   %11111111       ; 0A15 2-42: ********
-        .byte   %11100111       ; 0A16 2-42: ***  ***
-        .byte   %11111111       ; 0A17 2-42: ********
-
-        .byte   %11100111       ; 0A18 2-43: ***  ***
-        .byte   %11100111       ; 0A19 2-43: ***  ***
-        .byte   %11100111       ; 0A1A 2-43: ***  ***
-        .byte   %11100111       ; 0A1B 2-43: ***  ***
-        .byte   %11111111       ; 0A1C 2-43: ********
-        .byte   %11111111       ; 0A1D 2-43: ********
-        .byte   %11100111       ; 0A1E 2-43: ***  ***
-        .byte   %11111111       ; 0A1F 2-43: ********
-
-        .byte   %10011001       ; 0A20 2-44: *  **  *
-        .byte   %10011001       ; 0A21 2-44: *  **  *
-        .byte   %10011001       ; 0A22 2-44: *  **  *
-        .byte   %11111111       ; 0A23 2-44: ********
-        .byte   %11111111       ; 0A24 2-44: ********
-        .byte   %11111111       ; 0A25 2-44: ********
-        .byte   %11111111       ; 0A26 2-44: ********
-        .byte   %11111111       ; 0A27 2-44: ********
-
-        .byte   %10011001       ; 0A28 2-45: *  **  *
-        .byte   %10011001       ; 0A29 2-45: *  **  *
-        .byte   %10011001       ; 0A2A 2-45: *  **  *
-        .byte   %11111111       ; 0A2B 2-45: ********
-        .byte   %11111111       ; 0A2C 2-45: ********
-        .byte   %11111111       ; 0A2D 2-45: ********
-        .byte   %11111111       ; 0A2E 2-45: ********
-        .byte   %11111111       ; 0A2F 2-45: ********
-
-        .byte   %10011001       ; 0A30 2-46: *  **  *
-        .byte   %10011001       ; 0A31 2-46: *  **  *
-        .byte   %00000000       ; 0A32 2-46:         
-        .byte   %10011001       ; 0A33 2-46: *  **  *
-        .byte   %00000000       ; 0A34 2-46:         
-        .byte   %10011001       ; 0A35 2-46: *  **  *
-        .byte   %10011001       ; 0A36 2-46: *  **  *
-        .byte   %11111111       ; 0A37 2-46: ********
-
-        .byte   %10011001       ; 0A38 2-47: *  **  *
-        .byte   %10011001       ; 0A39 2-47: *  **  *
-        .byte   %00000000       ; 0A3A 2-47:         
-        .byte   %10011001       ; 0A3B 2-47: *  **  *
-        .byte   %00000000       ; 0A3C 2-47:         
-        .byte   %10011001       ; 0A3D 2-47: *  **  *
-        .byte   %10011001       ; 0A3E 2-47: *  **  *
-        .byte   %11111111       ; 0A3F 2-47: ********
-
-        .byte   %11100111       ; 0A40 2-48: ***  ***
-        .byte   %11000001       ; 0A41 2-48: **     *
-        .byte   %10011111       ; 0A42 2-48: *  *****
-        .byte   %11000011       ; 0A43 2-48: **    **
-        .byte   %11111001       ; 0A44 2-48: *****  *
-        .byte   %10000011       ; 0A45 2-48: *     **
-        .byte   %11100111       ; 0A46 2-48: ***  ***
-        .byte   %11111111       ; 0A47 2-48: ********
-
-        .byte   %11100111       ; 0A48 2-49: ***  ***
-        .byte   %11000001       ; 0A49 2-49: **     *
-        .byte   %10011111       ; 0A4A 2-49: *  *****
-        .byte   %11000011       ; 0A4B 2-49: **    **
-        .byte   %11111001       ; 0A4C 2-49: *****  *
-        .byte   %10000011       ; 0A4D 2-49: *     **
-        .byte   %11100111       ; 0A4E 2-49: ***  ***
-        .byte   %11111111       ; 0A4F 2-49: ********
-
-        .byte   %11111111       ; 0A50 2-4a: ********
-        .byte   %10011001       ; 0A51 2-4a: *  **  *
-        .byte   %11110011       ; 0A52 2-4a: ****  **
-        .byte   %11100111       ; 0A53 2-4a: ***  ***
-        .byte   %11001111       ; 0A54 2-4a: **  ****
-        .byte   %10011001       ; 0A55 2-4a: *  **  *
-        .byte   %10111001       ; 0A56 2-4a: * ***  *
-        .byte   %11111111       ; 0A57 2-4a: ********
-
-        .byte   %11111111       ; 0A58 2-4b: ********
-        .byte   %10011001       ; 0A59 2-4b: *  **  *
-        .byte   %11110011       ; 0A5A 2-4b: ****  **
-        .byte   %11100111       ; 0A5B 2-4b: ***  ***
-        .byte   %11001111       ; 0A5C 2-4b: **  ****
-        .byte   %10011001       ; 0A5D 2-4b: *  **  *
-        .byte   %10111001       ; 0A5E 2-4b: * ***  *
-        .byte   %11111111       ; 0A5F 2-4b: ********
-
-        .byte   %11000011       ; 0A60 2-4c: **    **
-        .byte   %10011001       ; 0A61 2-4c: *  **  *
-        .byte   %11000011       ; 0A62 2-4c: **    **
-        .byte   %11000111       ; 0A63 2-4c: **   ***
-        .byte   %10011000       ; 0A64 2-4c: *  **   
-        .byte   %10011001       ; 0A65 2-4c: *  **  *
-        .byte   %11000000       ; 0A66 2-4c: **      
-        .byte   %11111111       ; 0A67 2-4c: ********
-
-        .byte   %11000011       ; 0A68 2-4d: **    **
-        .byte   %10011001       ; 0A69 2-4d: *  **  *
-        .byte   %11000011       ; 0A6A 2-4d: **    **
-        .byte   %11000111       ; 0A6B 2-4d: **   ***
-        .byte   %10011000       ; 0A6C 2-4d: *  **   
-        .byte   %10011001       ; 0A6D 2-4d: *  **  *
-        .byte   %11000000       ; 0A6E 2-4d: **      
-        .byte   %11111111       ; 0A6F 2-4d: ********
-
-        .byte   %11111001       ; 0A70 2-4e: *****  *
-        .byte   %11110011       ; 0A71 2-4e: ****  **
-        .byte   %11100111       ; 0A72 2-4e: ***  ***
-        .byte   %11111111       ; 0A73 2-4e: ********
-        .byte   %11111111       ; 0A74 2-4e: ********
-        .byte   %11111111       ; 0A75 2-4e: ********
-        .byte   %11111111       ; 0A76 2-4e: ********
-        .byte   %11111111       ; 0A77 2-4e: ********
-
-        .byte   %11111001       ; 0A78 2-4f: *****  *
-        .byte   %11110011       ; 0A79 2-4f: ****  **
-        .byte   %11100111       ; 0A7A 2-4f: ***  ***
-        .byte   %11111111       ; 0A7B 2-4f: ********
-        .byte   %11111111       ; 0A7C 2-4f: ********
-        .byte   %11111111       ; 0A7D 2-4f: ********
-        .byte   %11111111       ; 0A7E 2-4f: ********
-        .byte   %11111111       ; 0A7F 2-4f: ********
-
-        .byte   %11110011       ; 0A80 2-50: ****  **
-        .byte   %11100111       ; 0A81 2-50: ***  ***
-        .byte   %11001111       ; 0A82 2-50: **  ****
-        .byte   %11001111       ; 0A83 2-50: **  ****
-        .byte   %11001111       ; 0A84 2-50: **  ****
-        .byte   %11100111       ; 0A85 2-50: ***  ***
-        .byte   %11110011       ; 0A86 2-50: ****  **
-        .byte   %11111111       ; 0A87 2-50: ********
-
-        .byte   %11110011       ; 0A88 2-51: ****  **
-        .byte   %11100111       ; 0A89 2-51: ***  ***
-        .byte   %11001111       ; 0A8A 2-51: **  ****
-        .byte   %11001111       ; 0A8B 2-51: **  ****
-        .byte   %11001111       ; 0A8C 2-51: **  ****
-        .byte   %11100111       ; 0A8D 2-51: ***  ***
-        .byte   %11110011       ; 0A8E 2-51: ****  **
-        .byte   %11111111       ; 0A8F 2-51: ********
-
-        .byte   %11001111       ; 0A90 2-52: **  ****
-        .byte   %11100111       ; 0A91 2-52: ***  ***
-        .byte   %11110011       ; 0A92 2-52: ****  **
-        .byte   %11110011       ; 0A93 2-52: ****  **
-        .byte   %11110011       ; 0A94 2-52: ****  **
-        .byte   %11100111       ; 0A95 2-52: ***  ***
-        .byte   %11001111       ; 0A96 2-52: **  ****
-        .byte   %11111111       ; 0A97 2-52: ********
-
-        .byte   %11001111       ; 0A98 2-53: **  ****
-        .byte   %11100111       ; 0A99 2-53: ***  ***
-        .byte   %11110011       ; 0A9A 2-53: ****  **
-        .byte   %11110011       ; 0A9B 2-53: ****  **
-        .byte   %11110011       ; 0A9C 2-53: ****  **
-        .byte   %11100111       ; 0A9D 2-53: ***  ***
-        .byte   %11001111       ; 0A9E 2-53: **  ****
-        .byte   %11111111       ; 0A9F 2-53: ********
-
-        .byte   %11111111       ; 0AA0 2-54: ********
-        .byte   %10011001       ; 0AA1 2-54: *  **  *
-        .byte   %11000011       ; 0AA2 2-54: **    **
-        .byte   %00000000       ; 0AA3 2-54:         
-        .byte   %11000011       ; 0AA4 2-54: **    **
-        .byte   %10011001       ; 0AA5 2-54: *  **  *
-        .byte   %11111111       ; 0AA6 2-54: ********
-        .byte   %11111111       ; 0AA7 2-54: ********
-
-        .byte   %11111111       ; 0AA8 2-55: ********
-        .byte   %10011001       ; 0AA9 2-55: *  **  *
-        .byte   %11000011       ; 0AAA 2-55: **    **
-        .byte   %00000000       ; 0AAB 2-55:         
-        .byte   %11000011       ; 0AAC 2-55: **    **
-        .byte   %10011001       ; 0AAD 2-55: *  **  *
-        .byte   %11111111       ; 0AAE 2-55: ********
-        .byte   %11111111       ; 0AAF 2-55: ********
-
-        .byte   %11111111       ; 0AB0 2-56: ********
-        .byte   %11100111       ; 0AB1 2-56: ***  ***
-        .byte   %11100111       ; 0AB2 2-56: ***  ***
-        .byte   %10000001       ; 0AB3 2-56: *      *
-        .byte   %11100111       ; 0AB4 2-56: ***  ***
-        .byte   %11100111       ; 0AB5 2-56: ***  ***
-        .byte   %11111111       ; 0AB6 2-56: ********
-        .byte   %11111111       ; 0AB7 2-56: ********
-
-        .byte   %11111111       ; 0AB8 2-57: ********
-        .byte   %11100111       ; 0AB9 2-57: ***  ***
-        .byte   %11100111       ; 0ABA 2-57: ***  ***
-        .byte   %10000001       ; 0ABB 2-57: *      *
-        .byte   %11100111       ; 0ABC 2-57: ***  ***
-        .byte   %11100111       ; 0ABD 2-57: ***  ***
-        .byte   %11111111       ; 0ABE 2-57: ********
-        .byte   %11111111       ; 0ABF 2-57: ********
-
-        .byte   %11111111       ; 0AC0 2-58: ********
-        .byte   %11111111       ; 0AC1 2-58: ********
-        .byte   %11111111       ; 0AC2 2-58: ********
-        .byte   %11111111       ; 0AC3 2-58: ********
-        .byte   %11111111       ; 0AC4 2-58: ********
-        .byte   %11100111       ; 0AC5 2-58: ***  ***
-        .byte   %11100111       ; 0AC6 2-58: ***  ***
-        .byte   %11001111       ; 0AC7 2-58: **  ****
-
-        .byte   %11111111       ; 0AC8 2-59: ********
-        .byte   %11111111       ; 0AC9 2-59: ********
-        .byte   %11111111       ; 0ACA 2-59: ********
-        .byte   %11111111       ; 0ACB 2-59: ********
-        .byte   %11111111       ; 0ACC 2-59: ********
-        .byte   %11100111       ; 0ACD 2-59: ***  ***
-        .byte   %11100111       ; 0ACE 2-59: ***  ***
-        .byte   %11001111       ; 0ACF 2-59: **  ****
-
-        .byte   %11111111       ; 0AD0 2-5a: ********
-        .byte   %11111111       ; 0AD1 2-5a: ********
-        .byte   %11111111       ; 0AD2 2-5a: ********
-        .byte   %10000001       ; 0AD3 2-5a: *      *
-        .byte   %11111111       ; 0AD4 2-5a: ********
-        .byte   %11111111       ; 0AD5 2-5a: ********
-        .byte   %11111111       ; 0AD6 2-5a: ********
-        .byte   %11111111       ; 0AD7 2-5a: ********
-
-        .byte   %11111111       ; 0AD8 2-5b: ********
-        .byte   %11111111       ; 0AD9 2-5b: ********
-        .byte   %11111111       ; 0ADA 2-5b: ********
-        .byte   %10000001       ; 0ADB 2-5b: *      *
-        .byte   %11111111       ; 0ADC 2-5b: ********
-        .byte   %11111111       ; 0ADD 2-5b: ********
-        .byte   %11111111       ; 0ADE 2-5b: ********
-        .byte   %11111111       ; 0ADF 2-5b: ********
-
-        .byte   %11111111       ; 0AE0 2-5c: ********
-        .byte   %11111111       ; 0AE1 2-5c: ********
-        .byte   %11111111       ; 0AE2 2-5c: ********
-        .byte   %11111111       ; 0AE3 2-5c: ********
-        .byte   %11111111       ; 0AE4 2-5c: ********
-        .byte   %11100111       ; 0AE5 2-5c: ***  ***
-        .byte   %11100111       ; 0AE6 2-5c: ***  ***
-        .byte   %11111111       ; 0AE7 2-5c: ********
-
-        .byte   %11111111       ; 0AE8 2-5d: ********
-        .byte   %11111111       ; 0AE9 2-5d: ********
-        .byte   %11111111       ; 0AEA 2-5d: ********
-        .byte   %11111111       ; 0AEB 2-5d: ********
-        .byte   %11111111       ; 0AEC 2-5d: ********
-        .byte   %11100111       ; 0AED 2-5d: ***  ***
-        .byte   %11100111       ; 0AEE 2-5d: ***  ***
-        .byte   %11111111       ; 0AEF 2-5d: ********
-
-        .byte   %11111111       ; 0AF0 2-5e: ********
-        .byte   %11111100       ; 0AF1 2-5e: ******  
-        .byte   %11111001       ; 0AF2 2-5e: *****  *
-        .byte   %11110011       ; 0AF3 2-5e: ****  **
-        .byte   %11100111       ; 0AF4 2-5e: ***  ***
-        .byte   %11001111       ; 0AF5 2-5e: **  ****
-        .byte   %10011111       ; 0AF6 2-5e: *  *****
-        .byte   %11111111       ; 0AF7 2-5e: ********
-
-        .byte   %11111111       ; 0AF8 2-5f: ********
-        .byte   %11111100       ; 0AF9 2-5f: ******  
-        .byte   %11111001       ; 0AFA 2-5f: *****  *
-        .byte   %11110011       ; 0AFB 2-5f: ****  **
-        .byte   %11100111       ; 0AFC 2-5f: ***  ***
-        .byte   %11001111       ; 0AFD 2-5f: **  ****
-        .byte   %10011111       ; 0AFE 2-5f: *  *****
-        .byte   %11111111       ; 0AFF 2-5f: ********
-
-        .byte   %11000011       ; 0B00 2-60: **    **
-        .byte   %10011001       ; 0B01 2-60: *  **  *
-        .byte   %10010001       ; 0B02 2-60: *  *   *
-        .byte   %10001001       ; 0B03 2-60: *   *  *
-        .byte   %10011001       ; 0B04 2-60: *  **  *
-        .byte   %10011001       ; 0B05 2-60: *  **  *
-        .byte   %11000011       ; 0B06 2-60: **    **
-        .byte   %11111111       ; 0B07 2-60: ********
-
-        .byte   %11000011       ; 0B08 2-61: **    **
-        .byte   %10011001       ; 0B09 2-61: *  **  *
-        .byte   %10010001       ; 0B0A 2-61: *  *   *
-        .byte   %10001001       ; 0B0B 2-61: *   *  *
-        .byte   %10011001       ; 0B0C 2-61: *  **  *
-        .byte   %10011001       ; 0B0D 2-61: *  **  *
-        .byte   %11000011       ; 0B0E 2-61: **    **
-        .byte   %11111111       ; 0B0F 2-61: ********
-
-        .byte   %11100111       ; 0B10 2-62: ***  ***
-        .byte   %11100111       ; 0B11 2-62: ***  ***
-        .byte   %11000111       ; 0B12 2-62: **   ***
-        .byte   %11100111       ; 0B13 2-62: ***  ***
-        .byte   %11100111       ; 0B14 2-62: ***  ***
-        .byte   %11100111       ; 0B15 2-62: ***  ***
-        .byte   %10000001       ; 0B16 2-62: *      *
-        .byte   %11111111       ; 0B17 2-62: ********
-
-        .byte   %11100111       ; 0B18 2-63: ***  ***
-        .byte   %11100111       ; 0B19 2-63: ***  ***
-        .byte   %11000111       ; 0B1A 2-63: **   ***
-        .byte   %11100111       ; 0B1B 2-63: ***  ***
-        .byte   %11100111       ; 0B1C 2-63: ***  ***
-        .byte   %11100111       ; 0B1D 2-63: ***  ***
-        .byte   %10000001       ; 0B1E 2-63: *      *
-        .byte   %11111111       ; 0B1F 2-63: ********
-
-        .byte   %11000011       ; 0B20 2-64: **    **
-        .byte   %10011001       ; 0B21 2-64: *  **  *
-        .byte   %11111001       ; 0B22 2-64: *****  *
-        .byte   %11110011       ; 0B23 2-64: ****  **
-        .byte   %11001111       ; 0B24 2-64: **  ****
-        .byte   %10011111       ; 0B25 2-64: *  *****
-        .byte   %10000001       ; 0B26 2-64: *      *
-        .byte   %11111111       ; 0B27 2-64: ********
-
-        .byte   %11000011       ; 0B28 2-65: **    **
-        .byte   %10011001       ; 0B29 2-65: *  **  *
-        .byte   %11111001       ; 0B2A 2-65: *****  *
-        .byte   %11110011       ; 0B2B 2-65: ****  **
-        .byte   %11001111       ; 0B2C 2-65: **  ****
-        .byte   %10011111       ; 0B2D 2-65: *  *****
-        .byte   %10000001       ; 0B2E 2-65: *      *
-        .byte   %11111111       ; 0B2F 2-65: ********
-
-        .byte   %11000011       ; 0B30 2-66: **    **
-        .byte   %10011001       ; 0B31 2-66: *  **  *
-        .byte   %11111001       ; 0B32 2-66: *****  *
-        .byte   %11100011       ; 0B33 2-66: ***   **
-        .byte   %11111001       ; 0B34 2-66: *****  *
-        .byte   %10011001       ; 0B35 2-66: *  **  *
-        .byte   %11000011       ; 0B36 2-66: **    **
-        .byte   %11111111       ; 0B37 2-66: ********
-
-        .byte   %11000011       ; 0B38 2-67: **    **
-        .byte   %10011001       ; 0B39 2-67: *  **  *
-        .byte   %11111001       ; 0B3A 2-67: *****  *
-        .byte   %11100011       ; 0B3B 2-67: ***   **
-        .byte   %11111001       ; 0B3C 2-67: *****  *
-        .byte   %10011001       ; 0B3D 2-67: *  **  *
-        .byte   %11000011       ; 0B3E 2-67: **    **
-        .byte   %11111111       ; 0B3F 2-67: ********
-
-        .byte   %11111001       ; 0B40 2-68: *****  *
-        .byte   %11110001       ; 0B41 2-68: ****   *
-        .byte   %11100001       ; 0B42 2-68: ***    *
-        .byte   %10011001       ; 0B43 2-68: *  **  *
-        .byte   %10000000       ; 0B44 2-68: *       
-        .byte   %11111001       ; 0B45 2-68: *****  *
-        .byte   %11111001       ; 0B46 2-68: *****  *
-        .byte   %11111111       ; 0B47 2-68: ********
-
-        .byte   %11111001       ; 0B48 2-69: *****  *
-        .byte   %11110001       ; 0B49 2-69: ****   *
-        .byte   %11100001       ; 0B4A 2-69: ***    *
-        .byte   %10011001       ; 0B4B 2-69: *  **  *
-        .byte   %10000000       ; 0B4C 2-69: *       
-        .byte   %11111001       ; 0B4D 2-69: *****  *
-        .byte   %11111001       ; 0B4E 2-69: *****  *
-        .byte   %11111111       ; 0B4F 2-69: ********
-
-        .byte   %10000001       ; 0B50 2-6a: *      *
-        .byte   %10011111       ; 0B51 2-6a: *  *****
-        .byte   %10000011       ; 0B52 2-6a: *     **
-        .byte   %11111001       ; 0B53 2-6a: *****  *
-        .byte   %11111001       ; 0B54 2-6a: *****  *
-        .byte   %10011001       ; 0B55 2-6a: *  **  *
-        .byte   %11000011       ; 0B56 2-6a: **    **
-        .byte   %11111111       ; 0B57 2-6a: ********
-
-        .byte   %10000001       ; 0B58 2-6b: *      *
-        .byte   %10011111       ; 0B59 2-6b: *  *****
-        .byte   %10000011       ; 0B5A 2-6b: *     **
-        .byte   %11111001       ; 0B5B 2-6b: *****  *
-        .byte   %11111001       ; 0B5C 2-6b: *****  *
-        .byte   %10011001       ; 0B5D 2-6b: *  **  *
-        .byte   %11000011       ; 0B5E 2-6b: **    **
-        .byte   %11111111       ; 0B5F 2-6b: ********
-
-        .byte   %11000011       ; 0B60 2-6c: **    **
-        .byte   %10011001       ; 0B61 2-6c: *  **  *
-        .byte   %10011111       ; 0B62 2-6c: *  *****
-        .byte   %10000011       ; 0B63 2-6c: *     **
-        .byte   %10011001       ; 0B64 2-6c: *  **  *
-        .byte   %10011001       ; 0B65 2-6c: *  **  *
-        .byte   %11000011       ; 0B66 2-6c: **    **
-        .byte   %11111111       ; 0B67 2-6c: ********
-
-        .byte   %11000011       ; 0B68 2-6d: **    **
-        .byte   %10011001       ; 0B69 2-6d: *  **  *
-        .byte   %10011111       ; 0B6A 2-6d: *  *****
-        .byte   %10000011       ; 0B6B 2-6d: *     **
-        .byte   %10011001       ; 0B6C 2-6d: *  **  *
-        .byte   %10011001       ; 0B6D 2-6d: *  **  *
-        .byte   %11000011       ; 0B6E 2-6d: **    **
-        .byte   %11111111       ; 0B6F 2-6d: ********
-
-        .byte   %10000001       ; 0B70 2-6e: *      *
-        .byte   %10011001       ; 0B71 2-6e: *  **  *
-        .byte   %11110011       ; 0B72 2-6e: ****  **
-        .byte   %11100111       ; 0B73 2-6e: ***  ***
-        .byte   %11100111       ; 0B74 2-6e: ***  ***
-        .byte   %11100111       ; 0B75 2-6e: ***  ***
-        .byte   %11100111       ; 0B76 2-6e: ***  ***
-        .byte   %11111111       ; 0B77 2-6e: ********
-
-        .byte   %10000001       ; 0B78 2-6f: *      *
-        .byte   %10011001       ; 0B79 2-6f: *  **  *
-        .byte   %11110011       ; 0B7A 2-6f: ****  **
-        .byte   %11100111       ; 0B7B 2-6f: ***  ***
-        .byte   %11100111       ; 0B7C 2-6f: ***  ***
-        .byte   %11100111       ; 0B7D 2-6f: ***  ***
-        .byte   %11100111       ; 0B7E 2-6f: ***  ***
-        .byte   %11111111       ; 0B7F 2-6f: ********
-
-        .byte   %11000011       ; 0B80 2-70: **    **
-        .byte   %10011001       ; 0B81 2-70: *  **  *
-        .byte   %10011001       ; 0B82 2-70: *  **  *
-        .byte   %11000011       ; 0B83 2-70: **    **
-        .byte   %10011001       ; 0B84 2-70: *  **  *
-        .byte   %10011001       ; 0B85 2-70: *  **  *
-        .byte   %11000011       ; 0B86 2-70: **    **
-        .byte   %11111111       ; 0B87 2-70: ********
-
-        .byte   %11000011       ; 0B88 2-71: **    **
-        .byte   %10011001       ; 0B89 2-71: *  **  *
-        .byte   %10011001       ; 0B8A 2-71: *  **  *
-        .byte   %11000011       ; 0B8B 2-71: **    **
-        .byte   %10011001       ; 0B8C 2-71: *  **  *
-        .byte   %10011001       ; 0B8D 2-71: *  **  *
-        .byte   %11000011       ; 0B8E 2-71: **    **
-        .byte   %11111111       ; 0B8F 2-71: ********
-
-        .byte   %11000011       ; 0B90 2-72: **    **
-        .byte   %10011001       ; 0B91 2-72: *  **  *
-        .byte   %10011001       ; 0B92 2-72: *  **  *
-        .byte   %11000001       ; 0B93 2-72: **     *
-        .byte   %11111001       ; 0B94 2-72: *****  *
-        .byte   %10011001       ; 0B95 2-72: *  **  *
-        .byte   %11000011       ; 0B96 2-72: **    **
-        .byte   %11111111       ; 0B97 2-72: ********
-
-        .byte   %11000011       ; 0B98 2-73: **    **
-        .byte   %10011001       ; 0B99 2-73: *  **  *
-        .byte   %10011001       ; 0B9A 2-73: *  **  *
-        .byte   %11000001       ; 0B9B 2-73: **     *
-        .byte   %11111001       ; 0B9C 2-73: *****  *
-        .byte   %10011001       ; 0B9D 2-73: *  **  *
-        .byte   %11000011       ; 0B9E 2-73: **    **
-        .byte   %11111111       ; 0B9F 2-73: ********
-
-        .byte   %11111111       ; 0BA0 2-74: ********
-        .byte   %11111111       ; 0BA1 2-74: ********
-        .byte   %11100111       ; 0BA2 2-74: ***  ***
-        .byte   %11111111       ; 0BA3 2-74: ********
-        .byte   %11111111       ; 0BA4 2-74: ********
-        .byte   %11100111       ; 0BA5 2-74: ***  ***
-        .byte   %11111111       ; 0BA6 2-74: ********
-        .byte   %11111111       ; 0BA7 2-74: ********
-
-        .byte   %11111111       ; 0BA8 2-75: ********
-        .byte   %11111111       ; 0BA9 2-75: ********
-        .byte   %11100111       ; 0BAA 2-75: ***  ***
-        .byte   %11111111       ; 0BAB 2-75: ********
-        .byte   %11111111       ; 0BAC 2-75: ********
-        .byte   %11100111       ; 0BAD 2-75: ***  ***
-        .byte   %11111111       ; 0BAE 2-75: ********
-        .byte   %11111111       ; 0BAF 2-75: ********
-
-        .byte   %11111111       ; 0BB0 2-76: ********
-        .byte   %11111111       ; 0BB1 2-76: ********
-        .byte   %11100111       ; 0BB2 2-76: ***  ***
-        .byte   %11111111       ; 0BB3 2-76: ********
-        .byte   %11111111       ; 0BB4 2-76: ********
-        .byte   %11100111       ; 0BB5 2-76: ***  ***
-        .byte   %11100111       ; 0BB6 2-76: ***  ***
-        .byte   %11001111       ; 0BB7 2-76: **  ****
-
-        .byte   %11111111       ; 0BB8 2-77: ********
-        .byte   %11111111       ; 0BB9 2-77: ********
-        .byte   %11100111       ; 0BBA 2-77: ***  ***
-        .byte   %11111111       ; 0BBB 2-77: ********
-        .byte   %11111111       ; 0BBC 2-77: ********
-        .byte   %11100111       ; 0BBD 2-77: ***  ***
-        .byte   %11100111       ; 0BBE 2-77: ***  ***
-        .byte   %11001111       ; 0BBF 2-77: **  ****
-
-        .byte   %11110001       ; 0BC0 2-78: ****   *
-        .byte   %11100111       ; 0BC1 2-78: ***  ***
-        .byte   %11001111       ; 0BC2 2-78: **  ****
-        .byte   %10011111       ; 0BC3 2-78: *  *****
-        .byte   %11001111       ; 0BC4 2-78: **  ****
-        .byte   %11100111       ; 0BC5 2-78: ***  ***
-        .byte   %11110001       ; 0BC6 2-78: ****   *
-        .byte   %11111111       ; 0BC7 2-78: ********
-
-        .byte   %11110001       ; 0BC8 2-79: ****   *
-        .byte   %11100111       ; 0BC9 2-79: ***  ***
-        .byte   %11001111       ; 0BCA 2-79: **  ****
-        .byte   %10011111       ; 0BCB 2-79: *  *****
-        .byte   %11001111       ; 0BCC 2-79: **  ****
-        .byte   %11100111       ; 0BCD 2-79: ***  ***
-        .byte   %11110001       ; 0BCE 2-79: ****   *
-        .byte   %11111111       ; 0BCF 2-79: ********
-
-        .byte   %11111111       ; 0BD0 2-7a: ********
-        .byte   %11111111       ; 0BD1 2-7a: ********
-        .byte   %10000001       ; 0BD2 2-7a: *      *
-        .byte   %11111111       ; 0BD3 2-7a: ********
-        .byte   %10000001       ; 0BD4 2-7a: *      *
-        .byte   %11111111       ; 0BD5 2-7a: ********
-        .byte   %11111111       ; 0BD6 2-7a: ********
-        .byte   %11111111       ; 0BD7 2-7a: ********
-
-        .byte   %11111111       ; 0BD8 2-7b: ********
-        .byte   %11111111       ; 0BD9 2-7b: ********
-        .byte   %10000001       ; 0BDA 2-7b: *      *
-        .byte   %11111111       ; 0BDB 2-7b: ********
-        .byte   %10000001       ; 0BDC 2-7b: *      *
-        .byte   %11111111       ; 0BDD 2-7b: ********
-        .byte   %11111111       ; 0BDE 2-7b: ********
-        .byte   %11111111       ; 0BDF 2-7b: ********
-
-        .byte   %10001111       ; 0BE0 2-7c: *   ****
-        .byte   %11100111       ; 0BE1 2-7c: ***  ***
-        .byte   %11110011       ; 0BE2 2-7c: ****  **
-        .byte   %11111001       ; 0BE3 2-7c: *****  *
-        .byte   %11110011       ; 0BE4 2-7c: ****  **
-        .byte   %11100111       ; 0BE5 2-7c: ***  ***
-        .byte   %10001111       ; 0BE6 2-7c: *   ****
-        .byte   %11111111       ; 0BE7 2-7c: ********
-
-        .byte   %10001111       ; 0BE8 2-7d: *   ****
-        .byte   %11100111       ; 0BE9 2-7d: ***  ***
-        .byte   %11110011       ; 0BEA 2-7d: ****  **
-        .byte   %11111001       ; 0BEB 2-7d: *****  *
-        .byte   %11110011       ; 0BEC 2-7d: ****  **
-        .byte   %11100111       ; 0BED 2-7d: ***  ***
-        .byte   %10001111       ; 0BEE 2-7d: *   ****
-        .byte   %11111111       ; 0BEF 2-7d: ********
-
-        .byte   %11000011       ; 0BF0 2-7e: **    **
-        .byte   %10011001       ; 0BF1 2-7e: *  **  *
-        .byte   %11111001       ; 0BF2 2-7e: *****  *
-        .byte   %11110011       ; 0BF3 2-7e: ****  **
-        .byte   %11100111       ; 0BF4 2-7e: ***  ***
-        .byte   %11111111       ; 0BF5 2-7e: ********
-        .byte   %11100111       ; 0BF6 2-7e: ***  ***
-        .byte   %11111111       ; 0BF7 2-7e: ********
-
-        .byte   %11000011       ; 0BF8 2-7f: **    **
-        .byte   %10011001       ; 0BF9 2-7f: *  **  *
-        .byte   %11111001       ; 0BFA 2-7f: *****  *
-        .byte   %11110011       ; 0BFB 2-7f: ****  **
-        .byte   %11100111       ; 0BFC 2-7f: ***  ***
-        .byte   %11111111       ; 0BFD 2-7f: ********
-        .byte   %11100111       ; 0BFE 2-7f: ***  ***
-        .byte   %11111111       ; 0BFF 2-7f: ********
-
-        .byte   %11000011       ; 0C00 2-80: **    **
-        .byte   %10011001       ; 0C01 2-80: *  **  *
-        .byte   %10010001       ; 0C02 2-80: *  *   *
-        .byte   %10010001       ; 0C03 2-80: *  *   *
-        .byte   %10011111       ; 0C04 2-80: *  *****
-        .byte   %10011101       ; 0C05 2-80: *  *** *
-        .byte   %11000011       ; 0C06 2-80: **    **
-        .byte   %11111111       ; 0C07 2-80: ********
-
-        .byte   %11000011       ; 0C08 2-81: **    **
-        .byte   %10011001       ; 0C09 2-81: *  **  *
-        .byte   %10010001       ; 0C0A 2-81: *  *   *
-        .byte   %10010001       ; 0C0B 2-81: *  *   *
-        .byte   %10011111       ; 0C0C 2-81: *  *****
-        .byte   %10011101       ; 0C0D 2-81: *  *** *
-        .byte   %11000011       ; 0C0E 2-81: **    **
-        .byte   %11111111       ; 0C0F 2-81: ********
-
-        .byte   %11100111       ; 0C10 2-82: ***  ***
-        .byte   %11000011       ; 0C11 2-82: **    **
-        .byte   %10011001       ; 0C12 2-82: *  **  *
-        .byte   %10000001       ; 0C13 2-82: *      *
-        .byte   %10011001       ; 0C14 2-82: *  **  *
-        .byte   %10011001       ; 0C15 2-82: *  **  *
-        .byte   %10011001       ; 0C16 2-82: *  **  *
-        .byte   %11111111       ; 0C17 2-82: ********
-
-        .byte   %11100111       ; 0C18 2-83: ***  ***
-        .byte   %11000011       ; 0C19 2-83: **    **
-        .byte   %10011001       ; 0C1A 2-83: *  **  *
-        .byte   %10000001       ; 0C1B 2-83: *      *
-        .byte   %10011001       ; 0C1C 2-83: *  **  *
-        .byte   %10011001       ; 0C1D 2-83: *  **  *
-        .byte   %10011001       ; 0C1E 2-83: *  **  *
-        .byte   %11111111       ; 0C1F 2-83: ********
-
-        .byte   %10000011       ; 0C20 2-84: *     **
-        .byte   %10011001       ; 0C21 2-84: *  **  *
-        .byte   %10011001       ; 0C22 2-84: *  **  *
-        .byte   %10000011       ; 0C23 2-84: *     **
-        .byte   %10011001       ; 0C24 2-84: *  **  *
-        .byte   %10011001       ; 0C25 2-84: *  **  *
-        .byte   %10000011       ; 0C26 2-84: *     **
-        .byte   %11111111       ; 0C27 2-84: ********
-
-        .byte   %10000011       ; 0C28 2-85: *     **
-        .byte   %10011001       ; 0C29 2-85: *  **  *
-        .byte   %10011001       ; 0C2A 2-85: *  **  *
-        .byte   %10000011       ; 0C2B 2-85: *     **
-        .byte   %10011001       ; 0C2C 2-85: *  **  *
-        .byte   %10011001       ; 0C2D 2-85: *  **  *
-        .byte   %10000011       ; 0C2E 2-85: *     **
-        .byte   %11111111       ; 0C2F 2-85: ********
-
-        .byte   %11000011       ; 0C30 2-86: **    **
-        .byte   %10011001       ; 0C31 2-86: *  **  *
-        .byte   %10011111       ; 0C32 2-86: *  *****
-        .byte   %10011111       ; 0C33 2-86: *  *****
-        .byte   %10011111       ; 0C34 2-86: *  *****
-        .byte   %10011001       ; 0C35 2-86: *  **  *
-        .byte   %11000011       ; 0C36 2-86: **    **
-        .byte   %11111111       ; 0C37 2-86: ********
-
-        .byte   %11000011       ; 0C38 2-87: **    **
-        .byte   %10011001       ; 0C39 2-87: *  **  *
-        .byte   %10011111       ; 0C3A 2-87: *  *****
-        .byte   %10011111       ; 0C3B 2-87: *  *****
-        .byte   %10011111       ; 0C3C 2-87: *  *****
-        .byte   %10011001       ; 0C3D 2-87: *  **  *
-        .byte   %11000011       ; 0C3E 2-87: **    **
-        .byte   %11111111       ; 0C3F 2-87: ********
-
-        .byte   %10000111       ; 0C40 2-88: *    ***
-        .byte   %10010011       ; 0C41 2-88: *  *  **
-        .byte   %10011001       ; 0C42 2-88: *  **  *
-        .byte   %10011001       ; 0C43 2-88: *  **  *
-        .byte   %10011001       ; 0C44 2-88: *  **  *
-        .byte   %10010011       ; 0C45 2-88: *  *  **
-        .byte   %10000111       ; 0C46 2-88: *    ***
-        .byte   %11111111       ; 0C47 2-88: ********
-
-        .byte   %10000111       ; 0C48 2-89: *    ***
-        .byte   %10010011       ; 0C49 2-89: *  *  **
-        .byte   %10011001       ; 0C4A 2-89: *  **  *
-        .byte   %10011001       ; 0C4B 2-89: *  **  *
-        .byte   %10011001       ; 0C4C 2-89: *  **  *
-        .byte   %10010011       ; 0C4D 2-89: *  *  **
-        .byte   %10000111       ; 0C4E 2-89: *    ***
-        .byte   %11111111       ; 0C4F 2-89: ********
-
-        .byte   %10000001       ; 0C50 2-8a: *      *
-        .byte   %10011111       ; 0C51 2-8a: *  *****
-        .byte   %10011111       ; 0C52 2-8a: *  *****
-        .byte   %10000111       ; 0C53 2-8a: *    ***
-        .byte   %10011111       ; 0C54 2-8a: *  *****
-        .byte   %10011111       ; 0C55 2-8a: *  *****
-        .byte   %10000001       ; 0C56 2-8a: *      *
-        .byte   %11111111       ; 0C57 2-8a: ********
-
-        .byte   %10000001       ; 0C58 2-8b: *      *
-        .byte   %10011111       ; 0C59 2-8b: *  *****
-        .byte   %10011111       ; 0C5A 2-8b: *  *****
-        .byte   %10000111       ; 0C5B 2-8b: *    ***
-        .byte   %10011111       ; 0C5C 2-8b: *  *****
-        .byte   %10011111       ; 0C5D 2-8b: *  *****
-        .byte   %10000001       ; 0C5E 2-8b: *      *
-        .byte   %11111111       ; 0C5F 2-8b: ********
-
-        .byte   %10000001       ; 0C60 2-8c: *      *
-        .byte   %10011111       ; 0C61 2-8c: *  *****
-        .byte   %10011111       ; 0C62 2-8c: *  *****
-        .byte   %10000111       ; 0C63 2-8c: *    ***
-        .byte   %10011111       ; 0C64 2-8c: *  *****
-        .byte   %10011111       ; 0C65 2-8c: *  *****
-        .byte   %10011111       ; 0C66 2-8c: *  *****
-        .byte   %11111111       ; 0C67 2-8c: ********
-
-        .byte   %10000001       ; 0C68 2-8d: *      *
-        .byte   %10011111       ; 0C69 2-8d: *  *****
-        .byte   %10011111       ; 0C6A 2-8d: *  *****
-        .byte   %10000111       ; 0C6B 2-8d: *    ***
-        .byte   %10011111       ; 0C6C 2-8d: *  *****
-        .byte   %10011111       ; 0C6D 2-8d: *  *****
-        .byte   %10011111       ; 0C6E 2-8d: *  *****
-        .byte   %11111111       ; 0C6F 2-8d: ********
-
-        .byte   %11000011       ; 0C70 2-8e: **    **
-        .byte   %10011001       ; 0C71 2-8e: *  **  *
-        .byte   %10011111       ; 0C72 2-8e: *  *****
-        .byte   %10010001       ; 0C73 2-8e: *  *   *
-        .byte   %10011001       ; 0C74 2-8e: *  **  *
-        .byte   %10011001       ; 0C75 2-8e: *  **  *
-        .byte   %11000011       ; 0C76 2-8e: **    **
-        .byte   %11111111       ; 0C77 2-8e: ********
-
-        .byte   %11000011       ; 0C78 2-8f: **    **
-        .byte   %10011001       ; 0C79 2-8f: *  **  *
-        .byte   %10011111       ; 0C7A 2-8f: *  *****
-        .byte   %10010001       ; 0C7B 2-8f: *  *   *
-        .byte   %10011001       ; 0C7C 2-8f: *  **  *
-        .byte   %10011001       ; 0C7D 2-8f: *  **  *
-        .byte   %11000011       ; 0C7E 2-8f: **    **
-        .byte   %11111111       ; 0C7F 2-8f: ********
-
-        .byte   %10011001       ; 0C80 2-90: *  **  *
-        .byte   %10011001       ; 0C81 2-90: *  **  *
-        .byte   %10011001       ; 0C82 2-90: *  **  *
-        .byte   %10000001       ; 0C83 2-90: *      *
-        .byte   %10011001       ; 0C84 2-90: *  **  *
-        .byte   %10011001       ; 0C85 2-90: *  **  *
-        .byte   %10011001       ; 0C86 2-90: *  **  *
-        .byte   %11111111       ; 0C87 2-90: ********
-
-        .byte   %10011001       ; 0C88 2-91: *  **  *
-        .byte   %10011001       ; 0C89 2-91: *  **  *
-        .byte   %10011001       ; 0C8A 2-91: *  **  *
-        .byte   %10000001       ; 0C8B 2-91: *      *
-        .byte   %10011001       ; 0C8C 2-91: *  **  *
-        .byte   %10011001       ; 0C8D 2-91: *  **  *
-        .byte   %10011001       ; 0C8E 2-91: *  **  *
-        .byte   %11111111       ; 0C8F 2-91: ********
-
-        .byte   %11000011       ; 0C90 2-92: **    **
-        .byte   %11100111       ; 0C91 2-92: ***  ***
-        .byte   %11100111       ; 0C92 2-92: ***  ***
-        .byte   %11100111       ; 0C93 2-92: ***  ***
-        .byte   %11100111       ; 0C94 2-92: ***  ***
-        .byte   %11100111       ; 0C95 2-92: ***  ***
-        .byte   %11000011       ; 0C96 2-92: **    **
-        .byte   %11111111       ; 0C97 2-92: ********
-
-        .byte   %11000011       ; 0C98 2-93: **    **
-        .byte   %11100111       ; 0C99 2-93: ***  ***
-        .byte   %11100111       ; 0C9A 2-93: ***  ***
-        .byte   %11100111       ; 0C9B 2-93: ***  ***
-        .byte   %11100111       ; 0C9C 2-93: ***  ***
-        .byte   %11100111       ; 0C9D 2-93: ***  ***
-        .byte   %11000011       ; 0C9E 2-93: **    **
-        .byte   %11111111       ; 0C9F 2-93: ********
-
-        .byte   %11100001       ; 0CA0 2-94: ***    *
-        .byte   %11110011       ; 0CA1 2-94: ****  **
-        .byte   %11110011       ; 0CA2 2-94: ****  **
-        .byte   %11110011       ; 0CA3 2-94: ****  **
-        .byte   %11110011       ; 0CA4 2-94: ****  **
-        .byte   %10010011       ; 0CA5 2-94: *  *  **
-        .byte   %11000111       ; 0CA6 2-94: **   ***
-        .byte   %11111111       ; 0CA7 2-94: ********
-
-        .byte   %11100001       ; 0CA8 2-95: ***    *
-        .byte   %11110011       ; 0CA9 2-95: ****  **
-        .byte   %11110011       ; 0CAA 2-95: ****  **
-        .byte   %11110011       ; 0CAB 2-95: ****  **
-        .byte   %11110011       ; 0CAC 2-95: ****  **
-        .byte   %10010011       ; 0CAD 2-95: *  *  **
-        .byte   %11000111       ; 0CAE 2-95: **   ***
-        .byte   %11111111       ; 0CAF 2-95: ********
-
-        .byte   %10011001       ; 0CB0 2-96: *  **  *
-        .byte   %10010011       ; 0CB1 2-96: *  *  **
-        .byte   %10000111       ; 0CB2 2-96: *    ***
-        .byte   %10001111       ; 0CB3 2-96: *   ****
-        .byte   %10000111       ; 0CB4 2-96: *    ***
-        .byte   %10010011       ; 0CB5 2-96: *  *  **
-        .byte   %10011001       ; 0CB6 2-96: *  **  *
-        .byte   %11111111       ; 0CB7 2-96: ********
-
-        .byte   %10011001       ; 0CB8 2-97: *  **  *
-        .byte   %10010011       ; 0CB9 2-97: *  *  **
-        .byte   %10000111       ; 0CBA 2-97: *    ***
-        .byte   %10001111       ; 0CBB 2-97: *   ****
-        .byte   %10000111       ; 0CBC 2-97: *    ***
-        .byte   %10010011       ; 0CBD 2-97: *  *  **
-        .byte   %10011001       ; 0CBE 2-97: *  **  *
-        .byte   %11111111       ; 0CBF 2-97: ********
-
-        .byte   %10011111       ; 0CC0 2-98: *  *****
-        .byte   %10011111       ; 0CC1 2-98: *  *****
-        .byte   %10011111       ; 0CC2 2-98: *  *****
-        .byte   %10011111       ; 0CC3 2-98: *  *****
-        .byte   %10011111       ; 0CC4 2-98: *  *****
-        .byte   %10011111       ; 0CC5 2-98: *  *****
-        .byte   %10000001       ; 0CC6 2-98: *      *
-        .byte   %11111111       ; 0CC7 2-98: ********
-
-        .byte   %10011111       ; 0CC8 2-99: *  *****
-        .byte   %10011111       ; 0CC9 2-99: *  *****
-        .byte   %10011111       ; 0CCA 2-99: *  *****
-        .byte   %10011111       ; 0CCB 2-99: *  *****
-        .byte   %10011111       ; 0CCC 2-99: *  *****
-        .byte   %10011111       ; 0CCD 2-99: *  *****
-        .byte   %10000001       ; 0CCE 2-99: *      *
-        .byte   %11111111       ; 0CCF 2-99: ********
-
-        .byte   %10011100       ; 0CD0 2-9a: *  ***  
-        .byte   %10001000       ; 0CD1 2-9a: *   *   
-        .byte   %10000000       ; 0CD2 2-9a: *       
-        .byte   %10010100       ; 0CD3 2-9a: *  * *  
-        .byte   %10011100       ; 0CD4 2-9a: *  ***  
-        .byte   %10011100       ; 0CD5 2-9a: *  ***  
-        .byte   %10011100       ; 0CD6 2-9a: *  ***  
-        .byte   %11111111       ; 0CD7 2-9a: ********
-
-        .byte   %10011100       ; 0CD8 2-9b: *  ***  
-        .byte   %10001000       ; 0CD9 2-9b: *   *   
-        .byte   %10000000       ; 0CDA 2-9b: *       
-        .byte   %10010100       ; 0CDB 2-9b: *  * *  
-        .byte   %10011100       ; 0CDC 2-9b: *  ***  
-        .byte   %10011100       ; 0CDD 2-9b: *  ***  
-        .byte   %10011100       ; 0CDE 2-9b: *  ***  
-        .byte   %11111111       ; 0CDF 2-9b: ********
-
-        .byte   %10011001       ; 0CE0 2-9c: *  **  *
-        .byte   %10001001       ; 0CE1 2-9c: *   *  *
-        .byte   %10000001       ; 0CE2 2-9c: *      *
-        .byte   %10000001       ; 0CE3 2-9c: *      *
-        .byte   %10010001       ; 0CE4 2-9c: *  *   *
-        .byte   %10011001       ; 0CE5 2-9c: *  **  *
-        .byte   %10011001       ; 0CE6 2-9c: *  **  *
-        .byte   %11111111       ; 0CE7 2-9c: ********
-
-        .byte   %10011001       ; 0CE8 2-9d: *  **  *
-        .byte   %10001001       ; 0CE9 2-9d: *   *  *
-        .byte   %10000001       ; 0CEA 2-9d: *      *
-        .byte   %10000001       ; 0CEB 2-9d: *      *
-        .byte   %10010001       ; 0CEC 2-9d: *  *   *
-        .byte   %10011001       ; 0CED 2-9d: *  **  *
-        .byte   %10011001       ; 0CEE 2-9d: *  **  *
-        .byte   %11111111       ; 0CEF 2-9d: ********
-
-        .byte   %11000011       ; 0CF0 2-9e: **    **
-        .byte   %10011001       ; 0CF1 2-9e: *  **  *
-        .byte   %10011001       ; 0CF2 2-9e: *  **  *
-        .byte   %10011001       ; 0CF3 2-9e: *  **  *
-        .byte   %10011001       ; 0CF4 2-9e: *  **  *
-        .byte   %10011001       ; 0CF5 2-9e: *  **  *
-        .byte   %11000011       ; 0CF6 2-9e: **    **
-        .byte   %11111111       ; 0CF7 2-9e: ********
-
-        .byte   %11000011       ; 0CF8 2-9f: **    **
-        .byte   %10011001       ; 0CF9 2-9f: *  **  *
-        .byte   %10011001       ; 0CFA 2-9f: *  **  *
-        .byte   %10011001       ; 0CFB 2-9f: *  **  *
-        .byte   %10011001       ; 0CFC 2-9f: *  **  *
-        .byte   %10011001       ; 0CFD 2-9f: *  **  *
-        .byte   %11000011       ; 0CFE 2-9f: **    **
-        .byte   %11111111       ; 0CFF 2-9f: ********
-
-        .byte   %10000011       ; 0D00 2-a0: *     **
-        .byte   %10011001       ; 0D01 2-a0: *  **  *
-        .byte   %10011001       ; 0D02 2-a0: *  **  *
-        .byte   %10000011       ; 0D03 2-a0: *     **
-        .byte   %10011111       ; 0D04 2-a0: *  *****
-        .byte   %10011111       ; 0D05 2-a0: *  *****
-        .byte   %10011111       ; 0D06 2-a0: *  *****
-        .byte   %11111111       ; 0D07 2-a0: ********
-
-        .byte   %10000011       ; 0D08 2-a1: *     **
-        .byte   %10011001       ; 0D09 2-a1: *  **  *
-        .byte   %10011001       ; 0D0A 2-a1: *  **  *
-        .byte   %10000011       ; 0D0B 2-a1: *     **
-        .byte   %10011111       ; 0D0C 2-a1: *  *****
-        .byte   %10011111       ; 0D0D 2-a1: *  *****
-        .byte   %10011111       ; 0D0E 2-a1: *  *****
-        .byte   %11111111       ; 0D0F 2-a1: ********
-
-        .byte   %11000011       ; 0D10 2-a2: **    **
-        .byte   %10011001       ; 0D11 2-a2: *  **  *
-        .byte   %10011001       ; 0D12 2-a2: *  **  *
-        .byte   %10011001       ; 0D13 2-a2: *  **  *
-        .byte   %10011001       ; 0D14 2-a2: *  **  *
-        .byte   %11000011       ; 0D15 2-a2: **    **
-        .byte   %11110001       ; 0D16 2-a2: ****   *
-        .byte   %11111111       ; 0D17 2-a2: ********
-
-        .byte   %11000011       ; 0D18 2-a3: **    **
-        .byte   %10011001       ; 0D19 2-a3: *  **  *
-        .byte   %10011001       ; 0D1A 2-a3: *  **  *
-        .byte   %10011001       ; 0D1B 2-a3: *  **  *
-        .byte   %10011001       ; 0D1C 2-a3: *  **  *
-        .byte   %11000011       ; 0D1D 2-a3: **    **
-        .byte   %11110001       ; 0D1E 2-a3: ****   *
-        .byte   %11111111       ; 0D1F 2-a3: ********
-
-        .byte   %10000011       ; 0D20 2-a4: *     **
-        .byte   %10011001       ; 0D21 2-a4: *  **  *
-        .byte   %10011001       ; 0D22 2-a4: *  **  *
-        .byte   %10000011       ; 0D23 2-a4: *     **
-        .byte   %10000111       ; 0D24 2-a4: *    ***
-        .byte   %10010011       ; 0D25 2-a4: *  *  **
-        .byte   %10011001       ; 0D26 2-a4: *  **  *
-        .byte   %11111111       ; 0D27 2-a4: ********
-
-        .byte   %10000011       ; 0D28 2-a5: *     **
-        .byte   %10011001       ; 0D29 2-a5: *  **  *
-        .byte   %10011001       ; 0D2A 2-a5: *  **  *
-        .byte   %10000011       ; 0D2B 2-a5: *     **
-        .byte   %10000111       ; 0D2C 2-a5: *    ***
-        .byte   %10010011       ; 0D2D 2-a5: *  *  **
-        .byte   %10011001       ; 0D2E 2-a5: *  **  *
-        .byte   %11111111       ; 0D2F 2-a5: ********
-
-        .byte   %11000011       ; 0D30 2-a6: **    **
-        .byte   %10011001       ; 0D31 2-a6: *  **  *
-        .byte   %10011111       ; 0D32 2-a6: *  *****
-        .byte   %11000011       ; 0D33 2-a6: **    **
-        .byte   %11111001       ; 0D34 2-a6: *****  *
-        .byte   %10011001       ; 0D35 2-a6: *  **  *
-        .byte   %11000011       ; 0D36 2-a6: **    **
-        .byte   %11111111       ; 0D37 2-a6: ********
-
-        .byte   %11000011       ; 0D38 2-a7: **    **
-        .byte   %10011001       ; 0D39 2-a7: *  **  *
-        .byte   %10011111       ; 0D3A 2-a7: *  *****
-        .byte   %11000011       ; 0D3B 2-a7: **    **
-        .byte   %11111001       ; 0D3C 2-a7: *****  *
-        .byte   %10011001       ; 0D3D 2-a7: *  **  *
-        .byte   %11000011       ; 0D3E 2-a7: **    **
-        .byte   %11111111       ; 0D3F 2-a7: ********
-
-        .byte   %10000001       ; 0D40 2-a8: *      *
-        .byte   %11100111       ; 0D41 2-a8: ***  ***
-        .byte   %11100111       ; 0D42 2-a8: ***  ***
-        .byte   %11100111       ; 0D43 2-a8: ***  ***
-        .byte   %11100111       ; 0D44 2-a8: ***  ***
-        .byte   %11100111       ; 0D45 2-a8: ***  ***
-        .byte   %11100111       ; 0D46 2-a8: ***  ***
-        .byte   %11111111       ; 0D47 2-a8: ********
-
-        .byte   %10000001       ; 0D48 2-a9: *      *
-        .byte   %11100111       ; 0D49 2-a9: ***  ***
-        .byte   %11100111       ; 0D4A 2-a9: ***  ***
-        .byte   %11100111       ; 0D4B 2-a9: ***  ***
-        .byte   %11100111       ; 0D4C 2-a9: ***  ***
-        .byte   %11100111       ; 0D4D 2-a9: ***  ***
-        .byte   %11100111       ; 0D4E 2-a9: ***  ***
-        .byte   %11111111       ; 0D4F 2-a9: ********
-
-        .byte   %10011001       ; 0D50 2-aa: *  **  *
-        .byte   %10011001       ; 0D51 2-aa: *  **  *
-        .byte   %10011001       ; 0D52 2-aa: *  **  *
-        .byte   %10011001       ; 0D53 2-aa: *  **  *
-        .byte   %10011001       ; 0D54 2-aa: *  **  *
-        .byte   %10011001       ; 0D55 2-aa: *  **  *
-        .byte   %11000011       ; 0D56 2-aa: **    **
-        .byte   %11111111       ; 0D57 2-aa: ********
-
-        .byte   %10011001       ; 0D58 2-ab: *  **  *
-        .byte   %10011001       ; 0D59 2-ab: *  **  *
-        .byte   %10011001       ; 0D5A 2-ab: *  **  *
-        .byte   %10011001       ; 0D5B 2-ab: *  **  *
-        .byte   %10011001       ; 0D5C 2-ab: *  **  *
-        .byte   %10011001       ; 0D5D 2-ab: *  **  *
-        .byte   %11000011       ; 0D5E 2-ab: **    **
-        .byte   %11111111       ; 0D5F 2-ab: ********
-
-        .byte   %10011001       ; 0D60 2-ac: *  **  *
-        .byte   %10011001       ; 0D61 2-ac: *  **  *
-        .byte   %10011001       ; 0D62 2-ac: *  **  *
-        .byte   %10011001       ; 0D63 2-ac: *  **  *
-        .byte   %10011001       ; 0D64 2-ac: *  **  *
-        .byte   %11000011       ; 0D65 2-ac: **    **
-        .byte   %11100111       ; 0D66 2-ac: ***  ***
-        .byte   %11111111       ; 0D67 2-ac: ********
-
-        .byte   %10011001       ; 0D68 2-ad: *  **  *
-        .byte   %10011001       ; 0D69 2-ad: *  **  *
-        .byte   %10011001       ; 0D6A 2-ad: *  **  *
-        .byte   %10011001       ; 0D6B 2-ad: *  **  *
-        .byte   %10011001       ; 0D6C 2-ad: *  **  *
-        .byte   %11000011       ; 0D6D 2-ad: **    **
-        .byte   %11100111       ; 0D6E 2-ad: ***  ***
-        .byte   %11111111       ; 0D6F 2-ad: ********
-
-        .byte   %10011100       ; 0D70 2-ae: *  ***  
-        .byte   %10011100       ; 0D71 2-ae: *  ***  
-        .byte   %10011100       ; 0D72 2-ae: *  ***  
-        .byte   %10010100       ; 0D73 2-ae: *  * *  
-        .byte   %10000000       ; 0D74 2-ae: *       
-        .byte   %10001000       ; 0D75 2-ae: *   *   
-        .byte   %10011100       ; 0D76 2-ae: *  ***  
-        .byte   %11111111       ; 0D77 2-ae: ********
-
-        .byte   %10011100       ; 0D78 2-af: *  ***  
-        .byte   %10011100       ; 0D79 2-af: *  ***  
-        .byte   %10011100       ; 0D7A 2-af: *  ***  
-        .byte   %10010100       ; 0D7B 2-af: *  * *  
-        .byte   %10000000       ; 0D7C 2-af: *       
-        .byte   %10001000       ; 0D7D 2-af: *   *   
-        .byte   %10011100       ; 0D7E 2-af: *  ***  
-        .byte   %11111111       ; 0D7F 2-af: ********
-
-        .byte   %10011001       ; 0D80 2-b0: *  **  *
-        .byte   %10011001       ; 0D81 2-b0: *  **  *
-        .byte   %11000011       ; 0D82 2-b0: **    **
-        .byte   %11100111       ; 0D83 2-b0: ***  ***
-        .byte   %11000011       ; 0D84 2-b0: **    **
-        .byte   %10011001       ; 0D85 2-b0: *  **  *
-        .byte   %10011001       ; 0D86 2-b0: *  **  *
-        .byte   %11111111       ; 0D87 2-b0: ********
-
-        .byte   %10011001       ; 0D88 2-b1: *  **  *
-        .byte   %10011001       ; 0D89 2-b1: *  **  *
-        .byte   %11000011       ; 0D8A 2-b1: **    **
-        .byte   %11100111       ; 0D8B 2-b1: ***  ***
-        .byte   %11000011       ; 0D8C 2-b1: **    **
-        .byte   %10011001       ; 0D8D 2-b1: *  **  *
-        .byte   %10011001       ; 0D8E 2-b1: *  **  *
-        .byte   %11111111       ; 0D8F 2-b1: ********
-
-        .byte   %10011001       ; 0D90 2-b2: *  **  *
-        .byte   %10011001       ; 0D91 2-b2: *  **  *
-        .byte   %10011001       ; 0D92 2-b2: *  **  *
-        .byte   %11000011       ; 0D93 2-b2: **    **
-        .byte   %11100111       ; 0D94 2-b2: ***  ***
-        .byte   %11100111       ; 0D95 2-b2: ***  ***
-        .byte   %11100111       ; 0D96 2-b2: ***  ***
-        .byte   %11111111       ; 0D97 2-b2: ********
-
-        .byte   %10011001       ; 0D98 2-b3: *  **  *
-        .byte   %10011001       ; 0D99 2-b3: *  **  *
-        .byte   %10011001       ; 0D9A 2-b3: *  **  *
-        .byte   %11000011       ; 0D9B 2-b3: **    **
-        .byte   %11100111       ; 0D9C 2-b3: ***  ***
-        .byte   %11100111       ; 0D9D 2-b3: ***  ***
-        .byte   %11100111       ; 0D9E 2-b3: ***  ***
-        .byte   %11111111       ; 0D9F 2-b3: ********
-
-        .byte   %10000001       ; 0DA0 2-b4: *      *
-        .byte   %11111001       ; 0DA1 2-b4: *****  *
-        .byte   %11110011       ; 0DA2 2-b4: ****  **
-        .byte   %11100111       ; 0DA3 2-b4: ***  ***
-        .byte   %11001111       ; 0DA4 2-b4: **  ****
-        .byte   %10011111       ; 0DA5 2-b4: *  *****
-        .byte   %10000001       ; 0DA6 2-b4: *      *
-        .byte   %11111111       ; 0DA7 2-b4: ********
-
-        .byte   %10000001       ; 0DA8 2-b5: *      *
-        .byte   %11111001       ; 0DA9 2-b5: *****  *
-        .byte   %11110011       ; 0DAA 2-b5: ****  **
-        .byte   %11100111       ; 0DAB 2-b5: ***  ***
-        .byte   %11001111       ; 0DAC 2-b5: **  ****
-        .byte   %10011111       ; 0DAD 2-b5: *  *****
-        .byte   %10000001       ; 0DAE 2-b5: *      *
-        .byte   %11111111       ; 0DAF 2-b5: ********
-
-        .byte   %11000011       ; 0DB0 2-b6: **    **
-        .byte   %11001111       ; 0DB1 2-b6: **  ****
-        .byte   %11001111       ; 0DB2 2-b6: **  ****
-        .byte   %11001111       ; 0DB3 2-b6: **  ****
-        .byte   %11001111       ; 0DB4 2-b6: **  ****
-        .byte   %11001111       ; 0DB5 2-b6: **  ****
-        .byte   %11000011       ; 0DB6 2-b6: **    **
-        .byte   %11111111       ; 0DB7 2-b6: ********
-
-        .byte   %11000011       ; 0DB8 2-b7: **    **
-        .byte   %11001111       ; 0DB9 2-b7: **  ****
-        .byte   %11001111       ; 0DBA 2-b7: **  ****
-        .byte   %11001111       ; 0DBB 2-b7: **  ****
-        .byte   %11001111       ; 0DBC 2-b7: **  ****
-        .byte   %11001111       ; 0DBD 2-b7: **  ****
-        .byte   %11000011       ; 0DBE 2-b7: **    **
-        .byte   %11111111       ; 0DBF 2-b7: ********
-
-        .byte   %10011111       ; 0DC0 2-b8: *  *****
-        .byte   %11001111       ; 0DC1 2-b8: **  ****
-        .byte   %11100111       ; 0DC2 2-b8: ***  ***
-        .byte   %11110011       ; 0DC3 2-b8: ****  **
-        .byte   %11111001       ; 0DC4 2-b8: *****  *
-        .byte   %11111100       ; 0DC5 2-b8: ******  
-        .byte   %11111111       ; 0DC6 2-b8: ********
-        .byte   %11111111       ; 0DC7 2-b8: ********
-
-        .byte   %10011111       ; 0DC8 2-b9: *  *****
-        .byte   %11001111       ; 0DC9 2-b9: **  ****
-        .byte   %11100111       ; 0DCA 2-b9: ***  ***
-        .byte   %11110011       ; 0DCB 2-b9: ****  **
-        .byte   %11111001       ; 0DCC 2-b9: *****  *
-        .byte   %11111100       ; 0DCD 2-b9: ******  
-        .byte   %11111111       ; 0DCE 2-b9: ********
-        .byte   %11111111       ; 0DCF 2-b9: ********
-
-        .byte   %11000011       ; 0DD0 2-ba: **    **
-        .byte   %11110011       ; 0DD1 2-ba: ****  **
-        .byte   %11110011       ; 0DD2 2-ba: ****  **
-        .byte   %11110011       ; 0DD3 2-ba: ****  **
-        .byte   %11110011       ; 0DD4 2-ba: ****  **
-        .byte   %11110011       ; 0DD5 2-ba: ****  **
-        .byte   %11000011       ; 0DD6 2-ba: **    **
-        .byte   %11111111       ; 0DD7 2-ba: ********
-
-        .byte   %11000011       ; 0DD8 2-bb: **    **
-        .byte   %11110011       ; 0DD9 2-bb: ****  **
-        .byte   %11110011       ; 0DDA 2-bb: ****  **
-        .byte   %11110011       ; 0DDB 2-bb: ****  **
-        .byte   %11110011       ; 0DDC 2-bb: ****  **
-        .byte   %11110011       ; 0DDD 2-bb: ****  **
-        .byte   %11000011       ; 0DDE 2-bb: **    **
-        .byte   %11111111       ; 0DDF 2-bb: ********
-
-        .byte   %11111111       ; 0DE0 2-bc: ********
-        .byte   %11100111       ; 0DE1 2-bc: ***  ***
-        .byte   %11000011       ; 0DE2 2-bc: **    **
-        .byte   %10011001       ; 0DE3 2-bc: *  **  *
-        .byte   %11111111       ; 0DE4 2-bc: ********
-        .byte   %11111111       ; 0DE5 2-bc: ********
-        .byte   %11111111       ; 0DE6 2-bc: ********
-        .byte   %11111111       ; 0DE7 2-bc: ********
-
-        .byte   %11111111       ; 0DE8 2-bd: ********
-        .byte   %11100111       ; 0DE9 2-bd: ***  ***
-        .byte   %11000011       ; 0DEA 2-bd: **    **
-        .byte   %10011001       ; 0DEB 2-bd: *  **  *
-        .byte   %11111111       ; 0DEC 2-bd: ********
-        .byte   %11111111       ; 0DED 2-bd: ********
-        .byte   %11111111       ; 0DEE 2-bd: ********
-        .byte   %11111111       ; 0DEF 2-bd: ********
-
-        .byte   %11111111       ; 0DF0 2-be: ********
-        .byte   %11111111       ; 0DF1 2-be: ********
-        .byte   %11111111       ; 0DF2 2-be: ********
-        .byte   %11111111       ; 0DF3 2-be: ********
-        .byte   %11111111       ; 0DF4 2-be: ********
-        .byte   %11111111       ; 0DF5 2-be: ********
-        .byte   %10000000       ; 0DF6 2-be: *       
-        .byte   %11111111       ; 0DF7 2-be: ********
-
-        .byte   %11111111       ; 0DF8 2-bf: ********
-        .byte   %11111111       ; 0DF9 2-bf: ********
-        .byte   %11111111       ; 0DFA 2-bf: ********
-        .byte   %11111111       ; 0DFB 2-bf: ********
-        .byte   %11111111       ; 0DFC 2-bf: ********
-        .byte   %11111111       ; 0DFD 2-bf: ********
-        .byte   %10000000       ; 0DFE 2-bf: *       
-        .byte   %11111111       ; 0DFF 2-bf: ********
-
-        .byte   %11100111       ; 0E00 2-c0: ***  ***
-        .byte   %11100111       ; 0E01 2-c0: ***  ***
-        .byte   %11100111       ; 0E02 2-c0: ***  ***
-        .byte   %11111111       ; 0E03 2-c0: ********
-        .byte   %11111111       ; 0E04 2-c0: ********
-        .byte   %11111111       ; 0E05 2-c0: ********
-        .byte   %11111111       ; 0E06 2-c0: ********
-        .byte   %11111111       ; 0E07 2-c0: ********
-
-        .byte   %11100111       ; 0E08 2-c1: ***  ***
-        .byte   %11100111       ; 0E09 2-c1: ***  ***
-        .byte   %11100111       ; 0E0A 2-c1: ***  ***
-        .byte   %11111111       ; 0E0B 2-c1: ********
-        .byte   %11111111       ; 0E0C 2-c1: ********
-        .byte   %11111111       ; 0E0D 2-c1: ********
-        .byte   %11111111       ; 0E0E 2-c1: ********
-        .byte   %11111111       ; 0E0F 2-c1: ********
-
-        .byte   %11111111       ; 0E10 2-c2: ********
-        .byte   %11111111       ; 0E11 2-c2: ********
-        .byte   %11000011       ; 0E12 2-c2: **    **
-        .byte   %11111001       ; 0E13 2-c2: *****  *
-        .byte   %11000001       ; 0E14 2-c2: **     *
-        .byte   %10011001       ; 0E15 2-c2: *  **  *
-        .byte   %11000001       ; 0E16 2-c2: **     *
-        .byte   %11111111       ; 0E17 2-c2: ********
-
-        .byte   %11111111       ; 0E18 2-c3: ********
-        .byte   %11111111       ; 0E19 2-c3: ********
-        .byte   %11000011       ; 0E1A 2-c3: **    **
-        .byte   %11111001       ; 0E1B 2-c3: *****  *
-        .byte   %11000001       ; 0E1C 2-c3: **     *
-        .byte   %10011001       ; 0E1D 2-c3: *  **  *
-        .byte   %11000001       ; 0E1E 2-c3: **     *
-        .byte   %11111111       ; 0E1F 2-c3: ********
-
-        .byte   %11111111       ; 0E20 2-c4: ********
-        .byte   %10011111       ; 0E21 2-c4: *  *****
-        .byte   %10011111       ; 0E22 2-c4: *  *****
-        .byte   %10000011       ; 0E23 2-c4: *     **
-        .byte   %10011001       ; 0E24 2-c4: *  **  *
-        .byte   %10011001       ; 0E25 2-c4: *  **  *
-        .byte   %10000011       ; 0E26 2-c4: *     **
-        .byte   %11111111       ; 0E27 2-c4: ********
-
-        .byte   %11111111       ; 0E28 2-c5: ********
-        .byte   %10011111       ; 0E29 2-c5: *  *****
-        .byte   %10011111       ; 0E2A 2-c5: *  *****
-        .byte   %10000011       ; 0E2B 2-c5: *     **
-        .byte   %10011001       ; 0E2C 2-c5: *  **  *
-        .byte   %10011001       ; 0E2D 2-c5: *  **  *
-        .byte   %10000011       ; 0E2E 2-c5: *     **
-        .byte   %11111111       ; 0E2F 2-c5: ********
-
-        .byte   %11111111       ; 0E30 2-c6: ********
-        .byte   %11111111       ; 0E31 2-c6: ********
-        .byte   %11000011       ; 0E32 2-c6: **    **
-        .byte   %10011111       ; 0E33 2-c6: *  *****
-        .byte   %10011111       ; 0E34 2-c6: *  *****
-        .byte   %10011111       ; 0E35 2-c6: *  *****
-        .byte   %11000011       ; 0E36 2-c6: **    **
-        .byte   %11111111       ; 0E37 2-c6: ********
-
-        .byte   %11111111       ; 0E38 2-c7: ********
-        .byte   %11111111       ; 0E39 2-c7: ********
-        .byte   %11000011       ; 0E3A 2-c7: **    **
-        .byte   %10011111       ; 0E3B 2-c7: *  *****
-        .byte   %10011111       ; 0E3C 2-c7: *  *****
-        .byte   %10011111       ; 0E3D 2-c7: *  *****
-        .byte   %11000011       ; 0E3E 2-c7: **    **
-        .byte   %11111111       ; 0E3F 2-c7: ********
-
-        .byte   %11111111       ; 0E40 2-c8: ********
-        .byte   %11111001       ; 0E41 2-c8: *****  *
-        .byte   %11111001       ; 0E42 2-c8: *****  *
-        .byte   %11000001       ; 0E43 2-c8: **     *
-        .byte   %10011001       ; 0E44 2-c8: *  **  *
-        .byte   %10011001       ; 0E45 2-c8: *  **  *
-        .byte   %11000001       ; 0E46 2-c8: **     *
-        .byte   %11111111       ; 0E47 2-c8: ********
-
-        .byte   %11111111       ; 0E48 2-c9: ********
-        .byte   %11111001       ; 0E49 2-c9: *****  *
-        .byte   %11111001       ; 0E4A 2-c9: *****  *
-        .byte   %11000001       ; 0E4B 2-c9: **     *
-        .byte   %10011001       ; 0E4C 2-c9: *  **  *
-        .byte   %10011001       ; 0E4D 2-c9: *  **  *
-        .byte   %11000001       ; 0E4E 2-c9: **     *
-        .byte   %11111111       ; 0E4F 2-c9: ********
-
-        .byte   %11111111       ; 0E50 2-ca: ********
-        .byte   %11111111       ; 0E51 2-ca: ********
-        .byte   %11000011       ; 0E52 2-ca: **    **
-        .byte   %10011001       ; 0E53 2-ca: *  **  *
-        .byte   %10000001       ; 0E54 2-ca: *      *
-        .byte   %10011111       ; 0E55 2-ca: *  *****
-        .byte   %11000011       ; 0E56 2-ca: **    **
-        .byte   %11111111       ; 0E57 2-ca: ********
-
-        .byte   %11111111       ; 0E58 2-cb: ********
-        .byte   %11111111       ; 0E59 2-cb: ********
-        .byte   %11000011       ; 0E5A 2-cb: **    **
-        .byte   %10011001       ; 0E5B 2-cb: *  **  *
-        .byte   %10000001       ; 0E5C 2-cb: *      *
-        .byte   %10011111       ; 0E5D 2-cb: *  *****
-        .byte   %11000011       ; 0E5E 2-cb: **    **
-        .byte   %11111111       ; 0E5F 2-cb: ********
-
-        .byte   %11111111       ; 0E60 2-cc: ********
-        .byte   %11110001       ; 0E61 2-cc: ****   *
-        .byte   %11100111       ; 0E62 2-cc: ***  ***
-        .byte   %11000001       ; 0E63 2-cc: **     *
-        .byte   %11100111       ; 0E64 2-cc: ***  ***
-        .byte   %11100111       ; 0E65 2-cc: ***  ***
-        .byte   %11100111       ; 0E66 2-cc: ***  ***
-        .byte   %11111111       ; 0E67 2-cc: ********
-
-        .byte   %11111111       ; 0E68 2-cd: ********
-        .byte   %11110001       ; 0E69 2-cd: ****   *
-        .byte   %11100111       ; 0E6A 2-cd: ***  ***
-        .byte   %11000001       ; 0E6B 2-cd: **     *
-        .byte   %11100111       ; 0E6C 2-cd: ***  ***
-        .byte   %11100111       ; 0E6D 2-cd: ***  ***
-        .byte   %11100111       ; 0E6E 2-cd: ***  ***
-        .byte   %11111111       ; 0E6F 2-cd: ********
-
-        .byte   %11111111       ; 0E70 2-ce: ********
-        .byte   %11111111       ; 0E71 2-ce: ********
-        .byte   %11000001       ; 0E72 2-ce: **     *
-        .byte   %10011001       ; 0E73 2-ce: *  **  *
-        .byte   %10011001       ; 0E74 2-ce: *  **  *
-        .byte   %11000001       ; 0E75 2-ce: **     *
-        .byte   %11111001       ; 0E76 2-ce: *****  *
-        .byte   %10000011       ; 0E77 2-ce: *     **
-
-        .byte   %11111111       ; 0E78 2-cf: ********
-        .byte   %11111111       ; 0E79 2-cf: ********
-        .byte   %11000001       ; 0E7A 2-cf: **     *
-        .byte   %10011001       ; 0E7B 2-cf: *  **  *
-        .byte   %10011001       ; 0E7C 2-cf: *  **  *
-        .byte   %11000001       ; 0E7D 2-cf: **     *
-        .byte   %11111001       ; 0E7E 2-cf: *****  *
-        .byte   %10000011       ; 0E7F 2-cf: *     **
-
-        .byte   %11111111       ; 0E80 2-d0: ********
-        .byte   %10011111       ; 0E81 2-d0: *  *****
-        .byte   %10011111       ; 0E82 2-d0: *  *****
-        .byte   %10000011       ; 0E83 2-d0: *     **
-        .byte   %10011001       ; 0E84 2-d0: *  **  *
-        .byte   %10011001       ; 0E85 2-d0: *  **  *
-        .byte   %10011001       ; 0E86 2-d0: *  **  *
-        .byte   %11111111       ; 0E87 2-d0: ********
-
-        .byte   %11111111       ; 0E88 2-d1: ********
-        .byte   %10011111       ; 0E89 2-d1: *  *****
-        .byte   %10011111       ; 0E8A 2-d1: *  *****
-        .byte   %10000011       ; 0E8B 2-d1: *     **
-        .byte   %10011001       ; 0E8C 2-d1: *  **  *
-        .byte   %10011001       ; 0E8D 2-d1: *  **  *
-        .byte   %10011001       ; 0E8E 2-d1: *  **  *
-        .byte   %11111111       ; 0E8F 2-d1: ********
-
-        .byte   %11111111       ; 0E90 2-d2: ********
-        .byte   %11100111       ; 0E91 2-d2: ***  ***
-        .byte   %11111111       ; 0E92 2-d2: ********
-        .byte   %11000111       ; 0E93 2-d2: **   ***
-        .byte   %11100111       ; 0E94 2-d2: ***  ***
-        .byte   %11100111       ; 0E95 2-d2: ***  ***
-        .byte   %11000011       ; 0E96 2-d2: **    **
-        .byte   %11111111       ; 0E97 2-d2: ********
-
-        .byte   %11111111       ; 0E98 2-d3: ********
-        .byte   %11100111       ; 0E99 2-d3: ***  ***
-        .byte   %11111111       ; 0E9A 2-d3: ********
-        .byte   %11000111       ; 0E9B 2-d3: **   ***
-        .byte   %11100111       ; 0E9C 2-d3: ***  ***
-        .byte   %11100111       ; 0E9D 2-d3: ***  ***
-        .byte   %11000011       ; 0E9E 2-d3: **    **
-        .byte   %11111111       ; 0E9F 2-d3: ********
-
-        .byte   %11111111       ; 0EA0 2-d4: ********
-        .byte   %11111001       ; 0EA1 2-d4: *****  *
-        .byte   %11111111       ; 0EA2 2-d4: ********
-        .byte   %11111001       ; 0EA3 2-d4: *****  *
-        .byte   %11111001       ; 0EA4 2-d4: *****  *
-        .byte   %11111001       ; 0EA5 2-d4: *****  *
-        .byte   %11111001       ; 0EA6 2-d4: *****  *
-        .byte   %11000011       ; 0EA7 2-d4: **    **
-
-        .byte   %11111111       ; 0EA8 2-d5: ********
-        .byte   %11111001       ; 0EA9 2-d5: *****  *
-        .byte   %11111111       ; 0EAA 2-d5: ********
-        .byte   %11111001       ; 0EAB 2-d5: *****  *
-        .byte   %11111001       ; 0EAC 2-d5: *****  *
-        .byte   %11111001       ; 0EAD 2-d5: *****  *
-        .byte   %11111001       ; 0EAE 2-d5: *****  *
-        .byte   %11000011       ; 0EAF 2-d5: **    **
-
-        .byte   %11111111       ; 0EB0 2-d6: ********
-        .byte   %10011111       ; 0EB1 2-d6: *  *****
-        .byte   %10011111       ; 0EB2 2-d6: *  *****
-        .byte   %10010011       ; 0EB3 2-d6: *  *  **
-        .byte   %10000111       ; 0EB4 2-d6: *    ***
-        .byte   %10010011       ; 0EB5 2-d6: *  *  **
-        .byte   %10011001       ; 0EB6 2-d6: *  **  *
-        .byte   %11111111       ; 0EB7 2-d6: ********
-
-        .byte   %11111111       ; 0EB8 2-d7: ********
-        .byte   %10011111       ; 0EB9 2-d7: *  *****
-        .byte   %10011111       ; 0EBA 2-d7: *  *****
-        .byte   %10010011       ; 0EBB 2-d7: *  *  **
-        .byte   %10000111       ; 0EBC 2-d7: *    ***
-        .byte   %10010011       ; 0EBD 2-d7: *  *  **
-        .byte   %10011001       ; 0EBE 2-d7: *  **  *
-        .byte   %11111111       ; 0EBF 2-d7: ********
-
-        .byte   %11111111       ; 0EC0 2-d8: ********
-        .byte   %11000111       ; 0EC1 2-d8: **   ***
-        .byte   %11100111       ; 0EC2 2-d8: ***  ***
-        .byte   %11100111       ; 0EC3 2-d8: ***  ***
-        .byte   %11100111       ; 0EC4 2-d8: ***  ***
-        .byte   %11100111       ; 0EC5 2-d8: ***  ***
-        .byte   %11000011       ; 0EC6 2-d8: **    **
-        .byte   %11111111       ; 0EC7 2-d8: ********
-
-        .byte   %11111111       ; 0EC8 2-d9: ********
-        .byte   %11000111       ; 0EC9 2-d9: **   ***
-        .byte   %11100111       ; 0ECA 2-d9: ***  ***
-        .byte   %11100111       ; 0ECB 2-d9: ***  ***
-        .byte   %11100111       ; 0ECC 2-d9: ***  ***
-        .byte   %11100111       ; 0ECD 2-d9: ***  ***
-        .byte   %11000011       ; 0ECE 2-d9: **    **
-        .byte   %11111111       ; 0ECF 2-d9: ********
-
-        .byte   %11111111       ; 0ED0 2-da: ********
-        .byte   %11111111       ; 0ED1 2-da: ********
-        .byte   %10011001       ; 0ED2 2-da: *  **  *
-        .byte   %10000000       ; 0ED3 2-da: *       
-        .byte   %10000000       ; 0ED4 2-da: *       
-        .byte   %10010100       ; 0ED5 2-da: *  * *  
-        .byte   %10011100       ; 0ED6 2-da: *  ***  
-        .byte   %11111111       ; 0ED7 2-da: ********
-
-        .byte   %11111111       ; 0ED8 2-db: ********
-        .byte   %11111111       ; 0ED9 2-db: ********
-        .byte   %10011001       ; 0EDA 2-db: *  **  *
-        .byte   %10000000       ; 0EDB 2-db: *       
-        .byte   %10000000       ; 0EDC 2-db: *       
-        .byte   %10010100       ; 0EDD 2-db: *  * *  
-        .byte   %10011100       ; 0EDE 2-db: *  ***  
-        .byte   %11111111       ; 0EDF 2-db: ********
-
-        .byte   %11111111       ; 0EE0 2-dc: ********
-        .byte   %11111111       ; 0EE1 2-dc: ********
-        .byte   %10000011       ; 0EE2 2-dc: *     **
-        .byte   %10011001       ; 0EE3 2-dc: *  **  *
-        .byte   %10011001       ; 0EE4 2-dc: *  **  *
-        .byte   %10011001       ; 0EE5 2-dc: *  **  *
-        .byte   %10011001       ; 0EE6 2-dc: *  **  *
-        .byte   %11111111       ; 0EE7 2-dc: ********
-
-        .byte   %11111111       ; 0EE8 2-dd: ********
-        .byte   %11111111       ; 0EE9 2-dd: ********
-        .byte   %10000011       ; 0EEA 2-dd: *     **
-        .byte   %10011001       ; 0EEB 2-dd: *  **  *
-        .byte   %10011001       ; 0EEC 2-dd: *  **  *
-        .byte   %10011001       ; 0EED 2-dd: *  **  *
-        .byte   %10011001       ; 0EEE 2-dd: *  **  *
-        .byte   %11111111       ; 0EEF 2-dd: ********
-
-        .byte   %11111111       ; 0EF0 2-de: ********
-        .byte   %11111111       ; 0EF1 2-de: ********
-        .byte   %11000011       ; 0EF2 2-de: **    **
-        .byte   %10011001       ; 0EF3 2-de: *  **  *
-        .byte   %10011001       ; 0EF4 2-de: *  **  *
-        .byte   %10011001       ; 0EF5 2-de: *  **  *
-        .byte   %11000011       ; 0EF6 2-de: **    **
-        .byte   %11111111       ; 0EF7 2-de: ********
-
-        .byte   %11111111       ; 0EF8 2-df: ********
-        .byte   %11111111       ; 0EF9 2-df: ********
-        .byte   %11000011       ; 0EFA 2-df: **    **
-        .byte   %10011001       ; 0EFB 2-df: *  **  *
-        .byte   %10011001       ; 0EFC 2-df: *  **  *
-        .byte   %10011001       ; 0EFD 2-df: *  **  *
-        .byte   %11000011       ; 0EFE 2-df: **    **
-        .byte   %11111111       ; 0EFF 2-df: ********
-
-        .byte   %11111111       ; 0F00 2-e0: ********
-        .byte   %11111111       ; 0F01 2-e0: ********
-        .byte   %10000011       ; 0F02 2-e0: *     **
-        .byte   %10011001       ; 0F03 2-e0: *  **  *
-        .byte   %10011001       ; 0F04 2-e0: *  **  *
-        .byte   %10000011       ; 0F05 2-e0: *     **
-        .byte   %10011111       ; 0F06 2-e0: *  *****
-        .byte   %10011111       ; 0F07 2-e0: *  *****
-
-        .byte   %11111111       ; 0F08 2-e1: ********
-        .byte   %11111111       ; 0F09 2-e1: ********
-        .byte   %10000011       ; 0F0A 2-e1: *     **
-        .byte   %10011001       ; 0F0B 2-e1: *  **  *
-        .byte   %10011001       ; 0F0C 2-e1: *  **  *
-        .byte   %10000011       ; 0F0D 2-e1: *     **
-        .byte   %10011111       ; 0F0E 2-e1: *  *****
-        .byte   %10011111       ; 0F0F 2-e1: *  *****
-
-        .byte   %11111111       ; 0F10 2-e2: ********
-        .byte   %11111111       ; 0F11 2-e2: ********
-        .byte   %11000001       ; 0F12 2-e2: **     *
-        .byte   %10011001       ; 0F13 2-e2: *  **  *
-        .byte   %10011001       ; 0F14 2-e2: *  **  *
-        .byte   %11000001       ; 0F15 2-e2: **     *
-        .byte   %11111001       ; 0F16 2-e2: *****  *
-        .byte   %11111001       ; 0F17 2-e2: *****  *
-
-        .byte   %11111111       ; 0F18 2-e3: ********
-        .byte   %11111111       ; 0F19 2-e3: ********
-        .byte   %11000001       ; 0F1A 2-e3: **     *
-        .byte   %10011001       ; 0F1B 2-e3: *  **  *
-        .byte   %10011001       ; 0F1C 2-e3: *  **  *
-        .byte   %11000001       ; 0F1D 2-e3: **     *
-        .byte   %11111001       ; 0F1E 2-e3: *****  *
-        .byte   %11111001       ; 0F1F 2-e3: *****  *
-
-        .byte   %11111111       ; 0F20 2-e4: ********
-        .byte   %11111111       ; 0F21 2-e4: ********
-        .byte   %10000011       ; 0F22 2-e4: *     **
-        .byte   %10011001       ; 0F23 2-e4: *  **  *
-        .byte   %10011111       ; 0F24 2-e4: *  *****
-        .byte   %10011111       ; 0F25 2-e4: *  *****
-        .byte   %10011111       ; 0F26 2-e4: *  *****
-        .byte   %11111111       ; 0F27 2-e4: ********
-
-        .byte   %11111111       ; 0F28 2-e5: ********
-        .byte   %11111111       ; 0F29 2-e5: ********
-        .byte   %10000011       ; 0F2A 2-e5: *     **
-        .byte   %10011001       ; 0F2B 2-e5: *  **  *
-        .byte   %10011111       ; 0F2C 2-e5: *  *****
-        .byte   %10011111       ; 0F2D 2-e5: *  *****
-        .byte   %10011111       ; 0F2E 2-e5: *  *****
-        .byte   %11111111       ; 0F2F 2-e5: ********
-
-        .byte   %11111111       ; 0F30 2-e6: ********
-        .byte   %11111111       ; 0F31 2-e6: ********
-        .byte   %11000001       ; 0F32 2-e6: **     *
-        .byte   %10011111       ; 0F33 2-e6: *  *****
-        .byte   %11000011       ; 0F34 2-e6: **    **
-        .byte   %11111001       ; 0F35 2-e6: *****  *
-        .byte   %10000011       ; 0F36 2-e6: *     **
-        .byte   %11111111       ; 0F37 2-e6: ********
-
-        .byte   %11111111       ; 0F38 2-e7: ********
-        .byte   %11111111       ; 0F39 2-e7: ********
-        .byte   %11000001       ; 0F3A 2-e7: **     *
-        .byte   %10011111       ; 0F3B 2-e7: *  *****
-        .byte   %11000011       ; 0F3C 2-e7: **    **
-        .byte   %11111001       ; 0F3D 2-e7: *****  *
-        .byte   %10000011       ; 0F3E 2-e7: *     **
-        .byte   %11111111       ; 0F3F 2-e7: ********
-
-        .byte   %11111111       ; 0F40 2-e8: ********
-        .byte   %11100111       ; 0F41 2-e8: ***  ***
-        .byte   %10000001       ; 0F42 2-e8: *      *
-        .byte   %11100111       ; 0F43 2-e8: ***  ***
-        .byte   %11100111       ; 0F44 2-e8: ***  ***
-        .byte   %11100111       ; 0F45 2-e8: ***  ***
-        .byte   %11110001       ; 0F46 2-e8: ****   *
-        .byte   %11111111       ; 0F47 2-e8: ********
-
-        .byte   %11111111       ; 0F48 2-e9: ********
-        .byte   %11100111       ; 0F49 2-e9: ***  ***
-        .byte   %10000001       ; 0F4A 2-e9: *      *
-        .byte   %11100111       ; 0F4B 2-e9: ***  ***
-        .byte   %11100111       ; 0F4C 2-e9: ***  ***
-        .byte   %11100111       ; 0F4D 2-e9: ***  ***
-        .byte   %11110001       ; 0F4E 2-e9: ****   *
-        .byte   %11111111       ; 0F4F 2-e9: ********
-
-        .byte   %11111111       ; 0F50 2-ea: ********
-        .byte   %11111111       ; 0F51 2-ea: ********
-        .byte   %10011001       ; 0F52 2-ea: *  **  *
-        .byte   %10011001       ; 0F53 2-ea: *  **  *
-        .byte   %10011001       ; 0F54 2-ea: *  **  *
-        .byte   %10011001       ; 0F55 2-ea: *  **  *
-        .byte   %11000001       ; 0F56 2-ea: **     *
-        .byte   %11111111       ; 0F57 2-ea: ********
-
-        .byte   %11111111       ; 0F58 2-eb: ********
-        .byte   %11111111       ; 0F59 2-eb: ********
-        .byte   %10011001       ; 0F5A 2-eb: *  **  *
-        .byte   %10011001       ; 0F5B 2-eb: *  **  *
-        .byte   %10011001       ; 0F5C 2-eb: *  **  *
-        .byte   %10011001       ; 0F5D 2-eb: *  **  *
-        .byte   %11000001       ; 0F5E 2-eb: **     *
-        .byte   %11111111       ; 0F5F 2-eb: ********
-
-        .byte   %11111111       ; 0F60 2-ec: ********
-        .byte   %11111111       ; 0F61 2-ec: ********
-        .byte   %10011001       ; 0F62 2-ec: *  **  *
-        .byte   %10011001       ; 0F63 2-ec: *  **  *
-        .byte   %10011001       ; 0F64 2-ec: *  **  *
-        .byte   %11000011       ; 0F65 2-ec: **    **
-        .byte   %11100111       ; 0F66 2-ec: ***  ***
-        .byte   %11111111       ; 0F67 2-ec: ********
-
-        .byte   %11111111       ; 0F68 2-ed: ********
-        .byte   %11111111       ; 0F69 2-ed: ********
-        .byte   %10011001       ; 0F6A 2-ed: *  **  *
-        .byte   %10011001       ; 0F6B 2-ed: *  **  *
-        .byte   %10011001       ; 0F6C 2-ed: *  **  *
-        .byte   %11000011       ; 0F6D 2-ed: **    **
-        .byte   %11100111       ; 0F6E 2-ed: ***  ***
-        .byte   %11111111       ; 0F6F 2-ed: ********
-
-        .byte   %11111111       ; 0F70 2-ee: ********
-        .byte   %11111111       ; 0F71 2-ee: ********
-        .byte   %10011100       ; 0F72 2-ee: *  ***  
-        .byte   %10010100       ; 0F73 2-ee: *  * *  
-        .byte   %10000000       ; 0F74 2-ee: *       
-        .byte   %11000001       ; 0F75 2-ee: **     *
-        .byte   %11001001       ; 0F76 2-ee: **  *  *
-        .byte   %11111111       ; 0F77 2-ee: ********
-
-        .byte   %11111111       ; 0F78 2-ef: ********
-        .byte   %11111111       ; 0F79 2-ef: ********
-        .byte   %10011100       ; 0F7A 2-ef: *  ***  
-        .byte   %10010100       ; 0F7B 2-ef: *  * *  
-        .byte   %10000000       ; 0F7C 2-ef: *       
-        .byte   %11000001       ; 0F7D 2-ef: **     *
-        .byte   %11001001       ; 0F7E 2-ef: **  *  *
-        .byte   %11111111       ; 0F7F 2-ef: ********
-
-        .byte   %11111111       ; 0F80 2-f0: ********
-        .byte   %11111111       ; 0F81 2-f0: ********
-        .byte   %10011001       ; 0F82 2-f0: *  **  *
-        .byte   %11000011       ; 0F83 2-f0: **    **
-        .byte   %11100111       ; 0F84 2-f0: ***  ***
-        .byte   %11000011       ; 0F85 2-f0: **    **
-        .byte   %10011001       ; 0F86 2-f0: *  **  *
-        .byte   %11111111       ; 0F87 2-f0: ********
-
-        .byte   %11111111       ; 0F88 2-f1: ********
-        .byte   %11111111       ; 0F89 2-f1: ********
-        .byte   %10011001       ; 0F8A 2-f1: *  **  *
-        .byte   %11000011       ; 0F8B 2-f1: **    **
-        .byte   %11100111       ; 0F8C 2-f1: ***  ***
-        .byte   %11000011       ; 0F8D 2-f1: **    **
-        .byte   %10011001       ; 0F8E 2-f1: *  **  *
-        .byte   %11111111       ; 0F8F 2-f1: ********
-
-        .byte   %11111111       ; 0F90 2-f2: ********
-        .byte   %11111111       ; 0F91 2-f2: ********
-        .byte   %10011001       ; 0F92 2-f2: *  **  *
-        .byte   %10011001       ; 0F93 2-f2: *  **  *
-        .byte   %10011001       ; 0F94 2-f2: *  **  *
-        .byte   %11000001       ; 0F95 2-f2: **     *
-        .byte   %11110011       ; 0F96 2-f2: ****  **
-        .byte   %10000111       ; 0F97 2-f2: *    ***
-
-        .byte   %11111111       ; 0F98 2-f3: ********
-        .byte   %11111111       ; 0F99 2-f3: ********
-        .byte   %10011001       ; 0F9A 2-f3: *  **  *
-        .byte   %10011001       ; 0F9B 2-f3: *  **  *
-        .byte   %10011001       ; 0F9C 2-f3: *  **  *
-        .byte   %11000001       ; 0F9D 2-f3: **     *
-        .byte   %11110011       ; 0F9E 2-f3: ****  **
-        .byte   %10000111       ; 0F9F 2-f3: *    ***
-
-        .byte   %11111111       ; 0FA0 2-f4: ********
-        .byte   %11111111       ; 0FA1 2-f4: ********
-        .byte   %10000001       ; 0FA2 2-f4: *      *
-        .byte   %11110011       ; 0FA3 2-f4: ****  **
-        .byte   %11100111       ; 0FA4 2-f4: ***  ***
-        .byte   %11001111       ; 0FA5 2-f4: **  ****
-        .byte   %10000001       ; 0FA6 2-f4: *      *
-        .byte   %11111111       ; 0FA7 2-f4: ********
-
-        .byte   %11111111       ; 0FA8 2-f5: ********
-        .byte   %11111111       ; 0FA9 2-f5: ********
-        .byte   %10000001       ; 0FAA 2-f5: *      *
-        .byte   %11110011       ; 0FAB 2-f5: ****  **
-        .byte   %11100111       ; 0FAC 2-f5: ***  ***
-        .byte   %11001111       ; 0FAD 2-f5: **  ****
-        .byte   %10000001       ; 0FAE 2-f5: *      *
-        .byte   %11111111       ; 0FAF 2-f5: ********
-
-        .byte   %11100011       ; 0FB0 2-f6: ***   **
-        .byte   %11001111       ; 0FB1 2-f6: **  ****
-        .byte   %11100111       ; 0FB2 2-f6: ***  ***
-        .byte   %10001111       ; 0FB3 2-f6: *   ****
-        .byte   %11100111       ; 0FB4 2-f6: ***  ***
-        .byte   %11001111       ; 0FB5 2-f6: **  ****
-        .byte   %11100011       ; 0FB6 2-f6: ***   **
-        .byte   %11111111       ; 0FB7 2-f6: ********
-
-        .byte   %11100011       ; 0FB8 2-f7: ***   **
-        .byte   %11001111       ; 0FB9 2-f7: **  ****
-        .byte   %11100111       ; 0FBA 2-f7: ***  ***
-        .byte   %10001111       ; 0FBB 2-f7: *   ****
-        .byte   %11100111       ; 0FBC 2-f7: ***  ***
-        .byte   %11001111       ; 0FBD 2-f7: **  ****
-        .byte   %11100011       ; 0FBE 2-f7: ***   **
-        .byte   %11111111       ; 0FBF 2-f7: ********
-
-        .byte   %11100111       ; 0FC0 2-f8: ***  ***
-        .byte   %11100111       ; 0FC1 2-f8: ***  ***
-        .byte   %11100111       ; 0FC2 2-f8: ***  ***
-        .byte   %11111111       ; 0FC3 2-f8: ********
-        .byte   %11111111       ; 0FC4 2-f8: ********
-        .byte   %11100111       ; 0FC5 2-f8: ***  ***
-        .byte   %11100111       ; 0FC6 2-f8: ***  ***
-        .byte   %11100111       ; 0FC7 2-f8: ***  ***
-
-        .byte   %11100111       ; 0FC8 2-f9: ***  ***
-        .byte   %11100111       ; 0FC9 2-f9: ***  ***
-        .byte   %11100111       ; 0FCA 2-f9: ***  ***
-        .byte   %11111111       ; 0FCB 2-f9: ********
-        .byte   %11111111       ; 0FCC 2-f9: ********
-        .byte   %11100111       ; 0FCD 2-f9: ***  ***
-        .byte   %11100111       ; 0FCE 2-f9: ***  ***
-        .byte   %11100111       ; 0FCF 2-f9: ***  ***
-
-        .byte   %11000111       ; 0FD0 2-fa: **   ***
-        .byte   %11110011       ; 0FD1 2-fa: ****  **
-        .byte   %11100111       ; 0FD2 2-fa: ***  ***
-        .byte   %11110001       ; 0FD3 2-fa: ****   *
-        .byte   %11100111       ; 0FD4 2-fa: ***  ***
-        .byte   %11110011       ; 0FD5 2-fa: ****  **
-        .byte   %11000111       ; 0FD6 2-fa: **   ***
-        .byte   %11111111       ; 0FD7 2-fa: ********
-
-        .byte   %11000111       ; 0FD8 2-fb: **   ***
-        .byte   %11110011       ; 0FD9 2-fb: ****  **
-        .byte   %11100111       ; 0FDA 2-fb: ***  ***
-        .byte   %11110001       ; 0FDB 2-fb: ****   *
-        .byte   %11100111       ; 0FDC 2-fb: ***  ***
-        .byte   %11110011       ; 0FDD 2-fb: ****  **
-        .byte   %11000111       ; 0FDE 2-fb: **   ***
-        .byte   %11111111       ; 0FDF 2-fb: ********
-
-        .byte   %11001100       ; 0FE0 2-fc: **  **  
-        .byte   %00000000       ; 0FE1 2-fc:         
-        .byte   %00110011       ; 0FE2 2-fc:   **  **
-        .byte   %11111111       ; 0FE3 2-fc: ********
-        .byte   %11111111       ; 0FE4 2-fc: ********
-        .byte   %11111111       ; 0FE5 2-fc: ********
-        .byte   %11111111       ; 0FE6 2-fc: ********
-        .byte   %11111111       ; 0FE7 2-fc: ********
-
-        .byte   %11001100       ; 0FE8 2-fd: **  **  
-        .byte   %00000000       ; 0FE9 2-fd:         
-        .byte   %00110011       ; 0FEA 2-fd:   **  **
-        .byte   %11111111       ; 0FEB 2-fd: ********
-        .byte   %11111111       ; 0FEC 2-fd: ********
-        .byte   %11111111       ; 0FED 2-fd: ********
-        .byte   %11111111       ; 0FEE 2-fd: ********
-        .byte   %11111111       ; 0FEF 2-fd: ********
-
-        .byte   %11111111       ; 0FF0 2-fe: ********
-        .byte   %11111111       ; 0FF1 2-fe: ********
-        .byte   %11111111       ; 0FF2 2-fe: ********
-        .byte   %11111111       ; 0FF3 2-fe: ********
-        .byte   %11111111       ; 0FF4 2-fe: ********
-        .byte   %11111111       ; 0FF5 2-fe: ********
-        .byte   %11111111       ; 0FF6 2-fe: ********
-        .byte   %11111111       ; 0FF7 2-fe: ********
-
-        .byte   %11111111       ; 0FF8 2-ff: ********
-        .byte   %11111111       ; 0FF9 2-ff: ********
-        .byte   %11111111       ; 0FFA 2-ff: ********
-        .byte   %11111111       ; 0FFB 2-ff: ********
-        .byte   %11111111       ; 0FFC 2-ff: ********
-        .byte   %11111111       ; 0FFD 2-ff: ********
-        .byte   %11111111       ; 0FFE 2-ff: ********
-        .byte   %11111111       ; 0FFF 2-ff: ********
-
diff --git a/libsrc/nes/ppu.s b/libsrc/nes/ppu.s
deleted file mode 100644 (file)
index 06dc10a..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-;
-; Written by Groepaz/Hitmen <groepaz@gmx.net>
-; Cleanup by Ullrich von Bassewitz <uz@cc65.org>
-;
-
-        .export ppuinit
-        .export paletteinit, paldata
-
-        .include "nes.inc"
-
-;+---------+----------------------------------------------------------+
-;|  $2000  | PPU Control Register #1 (W)                              |
-;|         |                                                          |
-;|         |    D7: Execute NMI on VBlank                             |
-;|         |           0 = Disabled                                   |
-;|         |           1 = Enabled                                    |
-;|         |    D6: PPU Master/Slave Selection --+                    |
-;|         |           0 = Master                +-- UNUSED           |
-;|         |           1 = Slave               --+                    |
-;|         |    D5: Sprite Size                                       |
-;|         |           0 = 8x8                                        |
-;|         |           1 = 8x16                                       |
-;|         |    D4: Background Pattern Table Address                  |
-;|         |           0 = $0000 (VRAM)                               |
-;|         |           1 = $1000 (VRAM)                               |
-;|         |    D3: Sprite Pattern Table Address                      |
-;|         |           0 = $0000 (VRAM)                               |
-;|         |           1 = $1000 (VRAM)                               |
-;|         |    D2: PPU Address Increment                             |
-;|         |           0 = Increment by 1                             |
-;|         |           1 = Increment by 32                            |
-;|         | D1-D0: Name Table Address                                |
-;|         |         00 = $2000 (VRAM)                                |
-;|         |         01 = $2400 (VRAM)                                |
-;|         |         10 = $2800 (VRAM)                                |
-;|         |         11 = $2C00 (VRAM)                                |
-;+---------+----------------------------------------------------------+
-;+---------+----------------------------------------------------------+
-;|  $2001  | PPU Control Register #2 (W)                              |
-;|         |                                                          |
-;|         | D7-D5: Full Background Colour (when D0 == 1)             |
-;|         |         000 = None  +------------+                       |
-;|         |         001 = Green              | NOTE: Do not use more |
-;|         |         010 = Blue               |       than one type   |
-;|         |         100 = Red   +------------+                       |
-;|         | D7-D5: Colour Intensity (when D0 == 0)                   |
-;|         |         000 = None            +--+                       |
-;|         |         001 = Intensify green    | NOTE: Do not use more |
-;|         |         010 = Intensify blue     |       than one type   |
-;|         |         100 = Intensify red   +--+                       |
-;|         |    D4: Sprite Visibility                                 |
-;|         |           0 = Sprites not displayed                      |
-;|         |           1 = Sprites visible                            |
-;|         |    D3: Background Visibility                             |
-;|         |           0 = Background not displayed                   |
-;|         |           1 = Background visible                         |
-;|         |    D2: Sprite Clipping                                   |
-;|         |           0 = Sprites invisible in left 8-pixel column   |
-;|         |           1 = No clipping                                |
-;|         |    D1: Background Clipping                               |
-;|         |           0 = BG invisible in left 8-pixel column        |
-;|         |           1 = No clipping                                |
-;|         |    D0: Display Type                                      |
-;|         |           0 = Colour display                             |
-;|         |           1 = Monochrome display                         |
-;+---------+----------------------------------------------------------+
-
-
-;-----------------------------------------------------------------------------
-
-.proc   ppuinit
-
-        lda     #%10101000
-        sta     PPU_CTRL1
-
-        lda     #%00011110
-        sta     PPU_CTRL2
-
-; Wait for vblank
-
-@wait:  lda     PPU_STATUS
-        bpl     @wait
-
-; reset scrolling
-
-        lda     #0
-        sta     PPU_VRAM_ADDR1
-        sta     PPU_VRAM_ADDR1
-
-; Make all sprites invisible
-
-        lda     #$00
-        ldy     #$f0
-        sta     PPU_SPR_ADDR
-        ldx     #$40
-@loop:  sty     PPU_SPR_IO
-        sta     PPU_SPR_IO
-        sta     PPU_SPR_IO
-        sty     PPU_SPR_IO
-        dex
-        bne     @loop
-
-        rts
-
-.endproc
-
-
-;-----------------------------------------------------------------------------
-
-.proc   paletteinit
-
-; Wait for v-blank
-@wait:  lda     PPU_STATUS
-        bpl     @wait
-
-        lda     #$3F
-        sta     PPU_VRAM_ADDR2
-        lda     #$00
-        sta     PPU_VRAM_ADDR2
-
-        ldx     #0
-@loop:  lda     paldata,x
-        sta     PPU_VRAM_IO
-        inx
-        cpx     #(16*2)
-        bne     @loop
-
-        rts
-                     
-.endproc
-
-;-----------------------------------------------------------------------------
-
-.rodata
-
-paldata:
-        .repeat 2
-        .byte   $0f     ; 0 black
-        .byte   $14     ; 4 violett
-        .byte   $3b     ; 3 cyan
-        .byte   $3d     ; 1 white
-
-        .byte   $38     ; 7 yellow
-        .byte   $2d     ; b dark grey
-        .byte   $22     ; e light blue
-        .byte   $04     ; 2 red
-
-        .byte   $18     ; 8 orange
-        .byte   $08     ; 9 brown
-        .byte   $35     ; a light red
-        .byte   $01     ; 6 blue
-
-        .byte   $10     ; c middle grey
-        .byte   $2b     ; d light green
-        .byte   $3d     ; f light gray
-        .byte   $1a     ; 5 green
-        .endrepeat
diff --git a/libsrc/nes/ppubuf.s b/libsrc/nes/ppubuf.s
deleted file mode 100644 (file)
index 3708b93..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-;
-; Written by Groepaz/Hitmen <groepaz@gmx.net>
-; Cleanup by Ullrich von Bassewitz <uz@cc65.org>
-;
-
-
-        .export         ppubuf_waitempty
-        .export         ppubuf_wait
-        .export         ppubuf_put
-        .export         ppubuf_flush
-        .include        "nes.inc"
-
-.code
-
-; ------------------------------------------------------------------------
-; ppubuf_waitempty
-; Wait until buffer is empty
-
-.proc   ppubuf_waitempty
-
-
-@wait:  lda     ringcount
-        bne     @wait
-        rts
-
-.endproc
-
-
-; ------------------------------------------------------------------------
-; ppubuf_wait
-; Wait until buffer is full
-
-.proc   ppubuf_wait
-
-        lda     #$ff            ; (($0100/3)*1)
-@wait:  cmp     ringcount
-        beq     @wait
-        rts
-
-.endproc
-
-; ------------------------------------------------------------------------
-; Put a PPU-Memory write to buffer
-; called from main program (not necessary when in vblank irq)
-
-.proc   ppubuf_put
-
-        sta     ppuval
-        sty     ppuhi
-        stx     ppulo
-
-        jsr     ppubuf_wait             ; wait if buffer is full
-
-        ldy     ringwrite
-        lda     ppuhi
-        sta     ringbuff,y
-        lda     ppulo
-        sta     ringbuff+$0100,y
-        lda     ppuval
-        sta     ringbuff+$0200,y
-
-        iny
-        sty     ringwrite
-        inc     ringcount
-        rts
-
-.endproc
-
-; ------------------------------------------------------------------------
-; Flush PPU-Memory write buffer
-; called from vblank interupt
-
-.proc   ppubuf_flush
-
-        ldy     ringcount
-        bne     @doloop
-        rts
-
-@doloop:
-        ldx     ringread
-        lda     #$0e
-        sta     temp
-
-@loop:
-.repeat 5
-        lda     ringbuff,x
-        sta     $2006
-        lda     ringbuff+$0100,x
-        sta     $2006
-        lda     ringbuff+$0200,x
-        sta     $2007
-        inx
-
-        dey
-        beq     @end
-.endrepeat
-
-        dec     temp
-        bne     @loop
-
-@end:   stx     ringread
-        sty     ringcount
-
-        rts     
-
-.endproc
-
-; ------------------------------------------------------------------------
-; Data
-
-.bss
-
-temp:   .res    1
-
-
diff --git a/libsrc/nes/randomize.s b/libsrc/nes/randomize.s
deleted file mode 100644 (file)
index 8df4fb8..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-05-02
-;
-; void _randomize (void);
-; /* Initialize the random number generator */
-;
-
-        .export         __randomize
-        .import         _srand
-
-        .include        "nes.inc"
-
-__randomize:
-        ldx     tickcount       ; Use tick clock
-        lda     tickcount+1
-        jmp     _srand          ; Initialize generator
-
-
diff --git a/libsrc/nes/revers.s b/libsrc/nes/revers.s
deleted file mode 100644 (file)
index 3f74db0..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; unsigned char revers (unsigned char onoff);
-;
-
-        .export         _revers
-
-        .include        "nes.inc"
-
-.proc   _revers
-
-        ldx     #$00            ; Assume revers off
-        tay                     ; Test onoff
-        beq     L1              ; Jump if off
-        ldx     #$80            ; Load on value
-        ldy     #$00            ; Assume old value is zero
-L1:     lda     RVS             ; Load old value
-        stx     RVS             ; Set new value
-        beq     L2              ; Jump if old value zero
-        iny                     ; Make old value = 1
-L2:     ldx     #$00            ; Load high byte of result
-        tya                     ; Load low byte, set CC
-        rts
-
-.endproc
-
diff --git a/libsrc/nes/setcursor.s b/libsrc/nes/setcursor.s
deleted file mode 100644 (file)
index c73a344..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-;
-; Written by Groepaz/Hitmen <groepaz@gmx.net>
-; Cleanup by Ullrich von Bassewitz <uz@cc65.org>
-;
-; Set the cursor position
-
-        .export         setcursor
-
-        .include        "nes.inc"
-
-;-----------------------------------------------------------------------------
-
-.proc   setcursor
-
-        tya
-        clc
-        adc     addrlo,x
-        sta     SCREEN_PTR
-
-        lda     addrhi,x
-        adc     #0
-        sta     SCREEN_PTR+1
-        rts
-
-.endproc
-
-;-----------------------------------------------------------------------------
-; Tables with screen addresses
-
-addrlo: .repeat screenrows,line
-        .byte <($2000+((1*32))+(line*charsperline))
-        .endrepeat
-
-addrhi: .repeat screenrows,line
-        .byte >($2000+((1*32))+(line*charsperline))
-        .endrepeat
-
diff --git a/libsrc/nes/sysuname.s b/libsrc/nes/sysuname.s
deleted file mode 100644 (file)
index 2606d1a..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; unsigned char __fastcall__ _sysuname (struct utsname* buf);
-;
-
-        .export         __sysuname, utsdata
-
-        .import         utscopy
-
-        __sysuname = utscopy
-
-;--------------------------------------------------------------------------
-; Data. We define a fixed utsname struct here and just copy it.
-
-.rodata
-
-utsdata:
-        ; sysname
-        .asciiz         "cc65"
-
-        ; nodename
-        .asciiz         ""
-
-        ; release
-        .byte           ((.VERSION >> 8) & $0F) + '0'
-        .byte           '.'
-        .byte           ((.VERSION >> 4) & $0F) + '0'
-        .byte           $00
-
-        ; version
-        .byte           (.VERSION & $0F) + '0'
-        .byte           $00
-
-        ; machine
-        .asciiz         "NES"
-
-                            
-
diff --git a/libsrc/nes/tgi/nes-64-56-2.s b/libsrc/nes/tgi/nes-64-56-2.s
deleted file mode 100644 (file)
index 70e23e1..0000000
+++ /dev/null
@@ -1,497 +0,0 @@
-;
-; Graphics driver for the lores 64x56x2 mode on the NES
-;
-; Stefan Haubenthal, 2009-03-10
-; Based on Maciej Witkowiak's line routine.
-;
-
-        .include        "zeropage.inc"
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-        .include        "nes.inc"
-        .include        "get_tv.inc"
-        .import         _clrscr, setcursor, putchar
-        .import         paldata
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table and constants.
-
-        module_header   _nes_64_56_2_tgi
-
-; First part of the header is a structure that has a magic and defines the
-; capabilities of the driver
-
-        .byte   $74, $67, $69           ; "tgi"
-        .byte   TGI_API_VERSION         ; TGI API version number
-        .addr   $0000                   ; Library reference
-xres:   .word   charsperline*2          ; Max X resolution
-yres:   .word   56                      ; Max Y resolution
-        .byte   2                       ; Number of drawing colors
-        .byte   1                       ; Number of screens available
-        .byte   2                       ; System font X size
-        .byte   2                       ; System font Y size
-        .word   $0100                   ; Aspect ratio
-        .byte   0                       ; TGI driver flags
-
-; Next comes the jump table. Currently all entries must be valid and may point
-; to an RTS for test versions (function not implemented).
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   INIT
-        .addr   DONE
-        .addr   GETERROR
-        .addr   CONTROL
-        .addr   CLEAR
-        .addr   SETVIEWPAGE
-        .addr   SETDRAWPAGE
-        .addr   SETCOLOR
-        .addr   SETPALETTE
-        .addr   GETPALETTE
-        .addr   GETDEFPALETTE
-        .addr   SETPIXEL
-        .addr   GETPIXEL
-        .addr   LINE
-        .addr   BAR
-        .addr   TEXTSTYLE
-        .addr   OUTTEXT
-        .addr   0                       ; IRQ entry is unused
-
-; ------------------------------------------------------------------------
-; Data.
-
-; Variables mapped to the zero page segment variables. Some of these are
-; used for passing parameters to the driver.
-
-X1              = ptr1
-Y1              = ptr2
-X2              = ptr3
-Y2              = ptr4
-RADIUS          = tmp1
-
-ADDR            = tmp1
-TEMP            = tmp3
-TEMP2           = tmp4
-TEMP3           = sreg
-TEMP4           = sreg+1
-
-; Line routine stuff (must be on zpage)
-PB              = ptr3          ; (2)   LINE
-UB              = ptr4          ; (2)   LINE
-ERR             = regsave       ; (2)   LINE
-NX              = regsave+2     ; (2)   LINE
-
-; Absolute variables used in the code
-
-.bss
-
-MEM:            .res    charsperline*2*56/4
-MEMEND:
-ERROR:          .res    1       ; Error code
-COLOR:          .res    1       ; Current color
-PALETTE:        .res    2       ; The current palette
-
-; Line routine stuff
-
-OGora:
-COUNT:          .res    2
-OUkos:
-NY:             .res    2
-Y3:
-DX:             .res    1
-DY:             .res    1
-AY:             .res    1
-
-; Constants and tables
-
-.rodata
-
-DEFPALETTE:     .byte   $0, $1
-OFFSET:         .byte   8, 4, 2, 1
-;                       00  00  00  00  01  01  01  01
-;                       00  01  10  11  00  01  10  11
-CODE:           .byte   32, 29, 26, 25, 28, 24+128, 31+128, 30+128
-;                       10  10  10  10  11  11  11  11
-;                       00  01  10  11  00  01  10  11
-                .byte   30, 31, 24, 28+128, 25+128, 26+128, 29+128, 32+128
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. May
-; initialize anything that has to be done just once. Is probably empty
-; most of the time.
-;
-; Must set an error code: NO
-;
-
-INSTALL:
-        jsr     _get_tv
-        cmp     #TV::NTSC
-        beq     ntsc
-; TODO ROM!
-        inc     yres
-        inc     yres
-ntsc:;  rts
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory. May
-; clean up anything done by INSTALL but is probably empty most of the time.
-;
-; Must set an error code: NO
-;
-
-UNINSTALL:
-        rts
-
-; ------------------------------------------------------------------------
-; INIT: Changes an already installed device from text mode to graphics
-; mode.
-; Note that INIT/DONE may be called multiple times while the driver
-; is loaded, while INSTALL is only called once, so any code that is needed
-; to initializes variables and so on must go here. Setting palette and
-; clearing the screen is not needed because this is called by the graphics
-; kernel later.
-; The graphics kernel will never call INIT when a graphics mode is already
-; active, so there is no need to protect against that.
-;
-; Must set an error code: YES
-;
-
-INIT:
-
-; Done, reset the error code
-
-        lda     #TGI_ERR_OK
-        sta     ERROR
-;       rts
-
-; ------------------------------------------------------------------------
-; DONE: Will be called to switch the graphics device back into text mode.
-; The graphics kernel will never call DONE when no graphics mode is active,
-; so there is no need to protect against that.
-;
-; Must set an error code: NO
-;
-
-DONE:
-        rts
-
-; ------------------------------------------------------------------------
-; GETERROR: Return the error code in A and clear it.
-
-GETERROR:
-        lda     ERROR
-        ldx     #TGI_ERR_OK
-        stx     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; CONTROL: Platform/driver specific entry point.
-;
-; Must set an error code: YES
-;
-
-CONTROL:
-        lda     #TGI_ERR_INV_FUNC
-        sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; CLEAR: Clears the screen.
-;
-; Must set an error code: NO
-;
-
-CLEAR:
-        ldx     #<MEM
-        stx     TEMP
-        ldx     #>MEM
-        stx     TEMP+1
-        lda     #0
-        tay
-@L1:    sta     (TEMP),y
-        iny
-        bne     @L1
-        inc     TEMP+1
-        inx
-        cpx     #>MEMEND
-        bne     @L1
-        jmp     _clrscr
-
-; ------------------------------------------------------------------------
-; SETCOLOR: Set the drawing color (in A). The new color is already checked
-; to be in a valid range (0..maxcolor-1).
-;
-; Must set an error code: NO (will only be called if color ok)
-;
-
-SETCOLOR:
-        sta     COLOR
-;       rts
-
-; ------------------------------------------------------------------------
-; SETVIEWPAGE: Set the visible page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-;
-; Must set an error code: NO (will only be called if page ok)
-;
-
-SETVIEWPAGE:
-
-; ------------------------------------------------------------------------
-; SETDRAWPAGE: Set the drawable page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-;
-; Must set an error code: NO (will only be called if page ok)
-;
-
-SETDRAWPAGE:
-        rts
-
-; ------------------------------------------------------------------------
-; SETPALETTE: Set the palette (not available with all drivers/hardware).
-; A pointer to the palette is passed in ptr1. Must set an error if palettes
-; are not supported
-;
-; Must set an error code: YES
-;
-
-SETPALETTE:
-; Wait for v-blank
-@wait:  lda     PPU_STATUS
-        bpl     @wait
-
-        lda     #$3F
-        sta     PPU_VRAM_ADDR2
-        lda     #$00
-        sta     PPU_VRAM_ADDR2
-
-        ldy     #0
-        lda     (ptr1),y
-        sta     PALETTE
-        tax
-        lda     paldata,x
-;       sta     PPU_VRAM_IO
-
-        iny
-        lda     (ptr1),y
-        sta     PALETTE+1
-        tax
-        lda     paldata,x
-        sta     PPU_VRAM_IO
-
-        lda     #TGI_ERR_OK
-        sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; GETPALETTE: Return the current palette in A/X. Even drivers that cannot
-; set the palette should return the default palette here, so there's no
-; way for this function to fail.
-;
-; Must set an error code: NO
-;
-
-GETPALETTE:
-        lda     #<PALETTE
-        ldx     #>PALETTE
-        rts
-
-; ------------------------------------------------------------------------
-; GETDEFPALETTE: Return the default palette for the driver in A/X. All
-; drivers should return something reasonable here, even drivers that don't
-; support palettes, otherwise the caller has no way to determine the colors
-; of the (not changeable) palette.
-;
-; Must set an error code: NO (all drivers must have a default palette)
-;
-
-GETDEFPALETTE:
-        lda     #<DEFPALETTE
-        ldx     #>DEFPALETTE
-        rts
-
-; ------------------------------------------------------------------------
-; SETPIXEL: Draw one pixel at X1/Y1 = ptr1/ptr2 with the current drawing
-; color. The coordinates passed to this function are never outside the
-; visible screen area, so there is no need for clipping inside this function.
-;
-; Must set an error code: NO
-;
-
-SETPIXEL:
-        ldx     Y1              ; y+2<yres
-        inx
-        inx
-        cpx     yres
-        bcc     @L2
-        ldx     X1              ; x+2<xres
-        inx
-        inx
-        cpx     xres
-        bcc     @L2
-        rts
-@L2:    lda     X1
-        lsr
-        tay
-        lda     Y1
-        lsr
-        tax
-        clc
-        jsr     setcursor
-        jsr     CALC
-        ldx     COLOR
-        bne     @set2
-        eor     #%00001111
-@set2:  sta     TEMP3
-
-        lda     (TEMP),y
-        ldx     COLOR
-        bne     @set
-        and     TEMP3
-        .byte   $2c
-@set:   ora     TEMP3
-        sta     (TEMP),y
-        tax
-        lda     CODE,x
-@normal:jmp     putchar
-
-; ------------------------------------------------------------------------
-; GETPIXEL: Read the color value of a pixel and return it in A/X. The
-; coordinates passed to this function are never outside the visible screen
-; area, so there is no need for clipping inside this function.
-
-
-GETPIXEL:
-        jsr     CALC
-        sta     TEMP3
-        lda     (TEMP),y
-        and     TEMP3
-        beq     @L1
-        lda     #1
-@L1:    ldx     #0
-        rts
-
-; ------------------------------------------------------------------------
-; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where
-; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4 using the current drawing color.
-; Contrary to most other functions, the graphics kernel will sort and clip
-; the coordinates before calling the driver, so on entry the following
-; conditions are valid:
-;       X1 <= X2
-;       Y1 <= Y2
-;       (X1 >= 0) && (X1 < XRES)
-;       (X2 >= 0) && (X2 < XRES)
-;       (Y1 >= 0) && (Y1 < YRES)
-;       (Y2 >= 0) && (Y2 < YRES)
-;
-; Must set an error code: NO
-;
-
-BAR:
-        inc     Y2
-@L1:    lda     X1
-        pha
-@L2:    jsr     SETPIXEL
-        inc     X1
-        lda     X2
-        cmp     X1
-        bne     @L2
-        pla
-        sta     X1
-        inc     Y1
-        lda     Y2
-        cmp     Y1
-        bne     @L1
-        rts
-
-; ------------------------------------------------------------------------
-; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scaling in X and Y
-; direction is passend in X/Y, the text direction is passed in A.
-;
-; Must set an error code: NO
-;
-
-TEXTSTYLE:
-        rts
-
-; ------------------------------------------------------------------------
-; OUTTEXT: Output text at X/Y = ptr1/ptr2 using the current color and the
-; current text style. The text to output is given as a zero terminated
-; string with address in ptr3.
-;
-; Must set an error code: NO
-;
-
-OUTTEXT:
-        lda     ptr1
-        lsr
-        tay
-        lda     ptr2
-        lsr
-        tax
-        clc
-        jsr     setcursor
-        ldy     #0
-@L1:    lda     (ptr3),y
-        jsr     putchar
-        iny
-        cmp     #$0
-        bne     @L1
-        rts
-
-; ------------------------------------------------------------------------
-; Calculate all variables to plot the pixel at X1/Y1. If the point is out
-; of range, a carry is returned and INRANGE is set to a value !0 zero. If
-; the coordinates are valid, INRANGE is zero and the carry clear.
-
-CALC:   lda     xres
-        sta     TEMP
-        lda     #0
-        sta     TEMP+1
-        ldy     Y1
-@L1:    lda     TEMP
-        add     xres
-        lsr
-        sta     TEMP
-        lda     TEMP+1
-        adc     #0
-        lsr
-        sta     TEMP+1
-        dey
-        bne     @L1
-        lda     TEMP
-        add     X1
-        lsr
-        sta     TEMP
-        lda     TEMP+1
-        adc     #0
-        lsr
-        sta     TEMP+1
-        lda     TEMP
-        add     #<MEM
-        sta     TEMP
-        lda     TEMP+1
-        adc     #>MEM
-        sta     TEMP+1
-
-        lda     X1
-        and     #%00000001
-        sta     TEMP3
-        lda     Y1
-        asl
-        and     #%00000010
-        ora     TEMP3
-        tax
-        lda     OFFSET,x
-        rts
-
-; ------------------------------------------------------------------------
-
-.include        "../../tgi/tgidrv_line.inc"
diff --git a/libsrc/nes/tgi_colors.s b/libsrc/nes/tgi_colors.s
deleted file mode 100644 (file)
index 6ef3729..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-;
-; Target-specific black & white values for use by the target-shared TGI kernel
-;
-
-        .include        "tgi-kernel.inc"
-
-        .export         tgi_color_black:zp = $00
-        .export         tgi_color_white:zp = $01
diff --git a/libsrc/nes/tgi_stat_stddrv.s b/libsrc/nes/tgi_stat_stddrv.s
deleted file mode 100644 (file)
index 9b08bc4..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Address of the static standard tgi driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void tgi_static_stddrv[];
-;
-
-        .export _tgi_static_stddrv
-        .import _nes_64_56_2_tgi
-
-.rodata
-
-_tgi_static_stddrv := _nes_64_56_2_tgi
diff --git a/libsrc/nes/tgi_stddrv.s b/libsrc/nes/tgi_stddrv.s
deleted file mode 100644 (file)
index b0239e2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Name of the standard tgi driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const char tgi_stddrv[];
-;
-
-        .export _tgi_stddrv
-
-.rodata
-
-_tgi_stddrv:    .asciiz "nes-64-56-2.tgi"
diff --git a/libsrc/nes/waitvblank.s b/libsrc/nes/waitvblank.s
deleted file mode 100644 (file)
index 4086469..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Written by Groepaz/Hitmen <groepaz@gmx.net>
-; Cleanup by Ullrich von Bassewitz <uz@cc65.org>
-;
-; void waitvblank(void);
-;
-
-        .export _waitvblank
-
-        .include "nes.inc"
-
-.proc   _waitvblank
-
-wait:   lda     PPU_STATUS
-        bpl     wait
-        rts
-
-.endproc
diff --git a/libsrc/nes/wherex.s b/libsrc/nes/wherex.s
deleted file mode 100644 (file)
index 2082c73..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-05-02
-;
-; unsigned char wherex (void);
-;
-
-        .export         _wherex
-
-        .include        "nes.inc"
-
-.proc   _wherex
-
-        lda     CURS_X
-        ldx     #$00
-        rts
-
-.endproc
-
-
diff --git a/libsrc/nes/wherey.s b/libsrc/nes/wherey.s
deleted file mode 100644 (file)
index 46813b9..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-05-02
-;
-; unsigned char wherey (void);
-;
-
-        .export         _wherey
-
-        .include        "nes.inc"
-
-.proc   _wherey
-
-        lda     CURS_Y
-        ldx     #$00
-        rts
-
-.endproc
-
-
diff --git a/libsrc/osic1p/bootstrap.s b/libsrc/osic1p/bootstrap.s
deleted file mode 100644 (file)
index 2a501b9..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-;
-; 2015-03-08, Greg King
-;
-
-; When you want to create a program with the alternate file format,
-; add "-u __BOOT__" to the cl65/ld65 command line.  Then, the linker
-; will import this symbol name; and, link this module at the front
-; of your program file.
-;
-        .export         __BOOT__:abs = 1
-
-        .import         __RAM_START__, __RAM_SIZE__, __BSS_RUN__
-
-; ------------------------------------------------------------------------
-
-load_addr       :=      __RAM_START__
-load_size       =       __BSS_RUN__ - __RAM_START__
-ram_top         :=      __RAM_START__ + __RAM_SIZE__
-
-        .segment        "BOOT"
-
-; If you want to change how this bootstrap loader works, then:
-; 1. edit this assembly source code,
-; 2. define the constant ASM (uncomment the line below),
-; 3. assemble this file (and, make a listing of that assembly),
-; 4. copy the listing's hex codes into the .byte lines below (notice that most
-;    of the strings are followed by CR; it's required by the OS65V monitor)
-;    (be sure to match the listing's lines against the .byte lines),
-; 5. undefine ASM (recomment the line),
-; 6. assemble this file, again,
-; 7. and, add the object file to "osic1p.lib".
-
-;ASM = 1
-
-.ifdef ASM
-
-        .include        "osic1p.inc"
-        .macpack        generic
-
-load            :=      $08             ; private variables
-count           :=      $0A
-
-GETCHAR         :=      $FFBF           ; gets one character from ACIA
-
-FIRSTVISC       =       $85             ; Offset of first visible character in video RAM
-LINEDIST        =       $20             ; Offset in video RAM between two lines
-
-        ldy     #<$0000
-        lda     #<load_addr
-        ldx     #>load_addr
-        sta     load
-        stx     load+1
-        lda     #<load_size
-        eor     #$FF
-        sta     count                   ; store (-size - 1)
-        lda     #>load_size
-        eor     #$FF
-        sta     count+1
-
-L1:     inc     count                   ; pre-count one's-complement upwards
-        bnz     L2
-        inc     count+1
-        bze     L3
-L2:     jsr     GETCHAR                 ; (doesn't change .Y)
-        sta     (load),y
-
-; Show that the file is being loaded by rotating an arrow on the screen.
-;
-        tya
-        lsr     a
-        lsr     a
-        and     #8 - 1
-        ora     #$10                    ; eight arrow characters
-        sta     SCRNBASE + FIRSTVISC + 2 * LINEDIST + 11
-
-        iny
-        bnz     L1
-        inc     load+1
-        bnz     L1                      ; branch always
-
-L3:     jmp     load_addr
-
-.else
-
-.mac    hex1    h
-        .lobytes        ((h) & $0F) + (((h) & $0F) > 9) * 7 + '0'
-.endmac
-
-.mac    hex2    h
-        hex1    (h) >> 4
-        hex1    (h) >> 0
-.endmac
-
-.mac    hex4    h
-        hex2    >(h)
-        hex2    <(h)
-.endmac
-
-CR      =       $0D
-
-        .byte   CR, CR
-        .byte   "."                     ; set an address
-        hex4    ram_top                 ; put loader where stack will sit
-        .byte   "/"                     ; write bytes into RAM
-
-; ASCII-coded hexadecimal translation of the above assembly code.
-; It was copied from the assembler listing.
-
-        .byte   "A0", CR, "00", CR
-        .byte   "A9", CR
-        hex2    <load_addr
-        .byte   CR, "A2", CR
-        hex2    >load_addr
-        .byte   CR, "85", CR, "08", CR
-        .byte   "86", CR, "09", CR
-        .byte   "A9", CR
-        hex2    <load_size
-        .byte   CR, "49", CR, "FF", CR
-        .byte   "85", CR, "0A", CR
-        .byte   "A9", CR
-        hex2    >load_size
-        .byte   CR, "49", CR, "FF", CR
-        .byte   "85", CR, "0B", CR
-
-        .byte   "E6", CR, "0A", CR
-        .byte   "D0", CR, "04", CR
-        .byte   "E6", CR, "0B", CR
-        .byte   "F0", CR, "16", CR
-        .byte   "20", CR, "BF", CR, "FF", CR
-        .byte   "91", CR, "08", CR
-
-        .byte   "98", CR
-        .byte   "4A", CR
-        .byte   "4A", CR
-        .byte   "29", CR, "07", CR
-        .byte   "09", CR, "10", CR
-        .byte   "8D", CR, "D0", CR, "D0", CR
-
-        .byte   "C8", CR
-        .byte   "D0", CR, "E6", CR
-        .byte   "E6", CR, "09", CR
-        .byte   "D0", CR, "E2", CR
-
-        .byte   "4C", CR
-        hex2    <load_addr
-        .byte   CR
-        hex2    >load_addr
-
-        .byte   CR, "."
-        hex4    ram_top
-        .byte   "G"                     ; go to address
-
-.endif
diff --git a/libsrc/osic1p/cclear.s b/libsrc/osic1p/cclear.s
deleted file mode 100644 (file)
index 2036c38..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-;
-; Copied from CBM implementation
-;
-; originally by:
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void cclearxy (unsigned char x, unsigned char y, unsigned char length);
-; void cclear (unsigned char length);
-;
-
-        .export         _cclearxy, _cclear
-        .import         popa, _gotoxy, cputdirect
-        .importzp       tmp1
-
-_cclearxy:
-        pha                     ; Save the length
-        jsr     popa            ; Get y
-        jsr     _gotoxy         ; Call this one, will pop params
-        pla                     ; Restore the length and run into _cclear
-
-_cclear:
-        cmp     #0              ; Is the length zero?
-        beq     L9              ; Jump if done
-        sta     tmp1                                 
-L1:     lda     #' '
-        jsr     cputdirect      ; Direct output
-        dec     tmp1
-        bne     L1
-L9:     rts
diff --git a/libsrc/osic1p/cgetc.s b/libsrc/osic1p/cgetc.s
deleted file mode 100644 (file)
index 0c7c694..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-;\r
-; char cgetc (void);\r
-;\r
-\r
-        .constructor    initcgetc\r
-        .export         _cgetc\r
-        .import         cursor\r
-\r
-        .include        "osic1p.inc"\r
-        .include        "extzp.inc"\r
-        .include        "zeropage.inc"\r
-\r
-; Initialize one-character buffer that is filled by kbhit()\r
-initcgetc:\r
-        lda     #$00\r
-        sta     CHARBUF         ; No character in buffer initially\r
-        rts\r
-\r
-; Input routine from 65V PROM MONITOR, show cursor if enabled\r
-_cgetc:\r
-        lda     CHARBUF         ; character in buffer available?\r
-        beq     nobuffer\r
-        tax                     ; save character in X\r
-        lda     #$00\r
-        sta     CHARBUF         ; empty buffer\r
-        beq     restorex        ; restore X and return\r
-nobuffer:\r
-        lda     cursor          ; show cursor?\r
-        beq     nocursor\r
-        ldy     CURS_X\r
-        lda     (SCREEN_PTR),y  ; fetch current character\r
-        sta     tmp1            ; save it\r
-        lda     #$A1            ; full white square\r
-        sta     (SCREEN_PTR),y  ; store at cursor position\r
-nocursor:\r
-        jsr     INPUTC          ; get input character in A\r
-        ldx     cursor\r
-        beq     done            ; was cursor on?\r
-        tax                     ; save A in X\r
-        lda     tmp1            ; fetch saved character\r
-        ldy     CURS_X\r
-        sta     (SCREEN_PTR),y  ; store at cursor position\r
-\r
-restorex:\r
-        txa                     ; restore saved character from X\r
-done:\r
-        ldx     #$00            ; high byte of int return value\r
-        rts\r
diff --git a/libsrc/osic1p/chline.s b/libsrc/osic1p/chline.s
deleted file mode 100644 (file)
index be40d40..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-;
-; based on CBM implementation
-;
-; originally by:
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void chlinexy (unsigned char x, unsigned char y, unsigned char length);
-; void chline (unsigned char length);
-;
-
-        .export         _chlinexy, _chline
-        .import         popa, _gotoxy, cputdirect
-        .importzp       tmp1
-
-_chlinexy:
-        pha                     ; Save the length
-        jsr     popa            ; Get y
-        jsr     _gotoxy         ; Call this one, will pop params
-        pla                     ; Restore the length
-
-_chline:
-        cmp     #0              ; Is the length zero?
-        beq     L9              ; Jump if done
-        sta     tmp1
-L1:     lda     #$94            ; Horizontal line, screen code
-        jsr     cputdirect      ; Direct output
-        dec     tmp1
-        bne     L1
-L9:     rts
diff --git a/libsrc/osic1p/crt0.s b/libsrc/osic1p/crt0.s
deleted file mode 100644 (file)
index 62342c2..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-; ---------------------------------------------------------------------------
-; crt0.s
-; ---------------------------------------------------------------------------
-;
-; Startup code for Ohio Scientific Challenger 1P
-
-.export   _init, _exit
-.import   _main
-
-.export   __STARTUP__ : absolute = 1    ; Mark as startup
-.import   __RAM_START__, __RAM_SIZE__   ; Linker generated
-.import   __STACKSIZE__
-
-.import    zerobss, initlib, donelib
-
-.include  "zeropage.inc"
-.include  "extzp.inc"
-.include  "osic1p.inc"
-
-; ---------------------------------------------------------------------------
-; Place the startup code in a special segment
-
-.segment  "STARTUP"
-
-; ---------------------------------------------------------------------------
-; A little light 6502 housekeeping
-
-_init:    ldx     #$FF          ; Initialize stack pointer to $01FF
-          txs
-          cld                   ; Clear decimal mode
-
-; ---------------------------------------------------------------------------
-; Set cc65 argument stack pointer
-
-          lda     #<(__RAM_START__ + __RAM_SIZE__  + __STACKSIZE__)
-          sta     sp
-          lda     #>(__RAM_START__ + __RAM_SIZE__  + __STACKSIZE__)
-          sta     sp+1
-
-; ---------------------------------------------------------------------------
-; Initialize memory storage
-
-          jsr     zerobss       ; Clear BSS segment
-          jsr     initlib       ; Run constructors
-
-; ---------------------------------------------------------------------------
-; Call main()
-
-          jsr     _main
-
-; ---------------------------------------------------------------------------
-; Back from main (this is also the _exit entry):
-
-_exit:    jsr     donelib       ; Run destructors
-          jmp     RESET         ; Display boot menu after program exit
diff --git a/libsrc/osic1p/ctype.s b/libsrc/osic1p/ctype.s
deleted file mode 100644 (file)
index fa901c1..0000000
+++ /dev/null
@@ -1,289 +0,0 @@
-;
-; Character specification table.
-;
-; Ullrich von Bassewitz, 02.06.1998
-; 2003-05-02, Greg King
-;
-; Copied from cbm/ctype.s
-
-; The following 256-byte-wide table specifies attributes for the isxxx type
-; of functions.  Doing it by a table means some overhead in space, but it
-; has major advantages:
-;
-;   * It is fast.  If it weren't for the slow parameter-passing of cc65,
-;     one even could define C-language macroes for the isxxx functions
-;     (as it usually is done, on other platforms).
-;
-;   * It is highly portable.  The only unportable part is the table itself;
-;     all real code goes into the common library.
-;
-;   * We save some code in the isxxx functions.
-
-; This table is taken from Craig S. Bruce's technical docs. for the ACE OS.
-
-        .include        "ctype.inc"
-
-; The table is read-only, put it into the RODATA segment.
-
-        .rodata
-
-__ctype:
-        .byte   CT_CTRL                                 ;   0/00 ___rvs_@___
-        .byte   CT_CTRL                                 ;   1/01 ___rvs_a___
-        .byte   CT_CTRL                                 ;   2/02 ___rvs_b___
-        .byte   CT_CTRL                                 ;   3/03 ___rvs_c___
-        .byte   CT_CTRL                                 ;   4/04 ___rvs_d___
-        .byte   CT_CTRL                                 ;   5/05 ___rvs_e___
-        .byte   CT_CTRL                                 ;   6/06 ___rvs_f___
-        .byte   CT_CTRL                                 ;   7/07 _BEL/rvs_g_
-        .byte   CT_CTRL                                 ;   8/08 ___rvs_h___
-        .byte   CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB    ;   9/09 _TAB/rvs_i_
-        .byte   CT_CTRL | CT_OTHER_WS                   ;  10/0a _BOL/rvs_j_
-        .byte   CT_CTRL                                 ;  11/0b ___rvs_k___
-        .byte   CT_CTRL                                 ;  12/0c ___rvs_l___
-        .byte   CT_CTRL | CT_OTHER_WS                   ;  13/0d _CR_/rvs_m_
-        .byte   CT_CTRL                                 ;  14/0e ___rvs_n___
-        .byte   CT_CTRL                                 ;  15/0f ___rvs_o___
-        .byte   CT_CTRL                                 ;  16/10 ___rvs_p___
-        .byte   CT_CTRL | CT_OTHER_WS                   ;  17/11 _VT_/rvs_q_
-        .byte   CT_CTRL                                 ;  18/12 ___rvs_r___
-        .byte   CT_CTRL | CT_OTHER_WS                   ;  19/13 HOME/rvs_s_
-        .byte   CT_CTRL | CT_OTHER_WS                   ;  20/14 _BS_/rvs_t_
-        .byte   CT_CTRL                                 ;  21/15 ___rvs_u___
-        .byte   CT_CTRL                                 ;  22/16 ___rvs_v___
-        .byte   CT_CTRL                                 ;  23/17 ___rvs_w___
-        .byte   CT_CTRL                                 ;  24/18 ___rvs_x___
-        .byte   CT_CTRL                                 ;  25/19 ___rvs_y___
-        .byte   CT_CTRL                                 ;  26/1a ___rvs_z___
-        .byte   CT_CTRL                                 ;  27/1b ___rvs_[___
-        .byte   CT_CTRL                                 ;  28/1c ___rvs_\___
-        .byte   CT_CTRL | CT_OTHER_WS                   ;  29/1d cursr-right
-        .byte   CT_CTRL                                 ;  30/1e ___rvs_^___
-        .byte   CT_CTRL                                 ;  31/1f _rvs_under_
-        .byte   CT_SPACE | CT_SPACE_TAB                 ;  32/20 ___SPACE___
-        .byte   $00                                     ;  33/21 _____!_____
-        .byte   $00                                     ;  34/22 _____"_____
-        .byte   $00                                     ;  35/23 _____#_____
-        .byte   $00                                     ;  36/24 _____$_____
-        .byte   $00                                     ;  37/25 _____%_____
-        .byte   $00                                     ;  38/26 _____&_____
-        .byte   $00                                     ;  39/27 _____'_____
-        .byte   $00                                     ;  40/28 _____(_____
-        .byte   $00                                     ;  41/29 _____)_____
-        .byte   $00                                     ;  42/2a _____*_____
-        .byte   $00                                     ;  43/2b _____+_____
-        .byte   $00                                     ;  44/2c _____,_____
-        .byte   $00                                     ;  45/2d _____-_____
-        .byte   $00                                     ;  46/2e _____._____
-        .byte   $00                                     ;  47/2f _____/_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  48/30 _____0_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  49/31 _____1_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  50/32 _____2_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  51/33 _____3_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  52/34 _____4_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  53/35 _____5_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  54/36 _____6_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  55/37 _____7_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  56/38 _____8_____
-        .byte   CT_DIGIT | CT_XDIGIT                    ;  57/39 _____9_____
-        .byte   $00                                     ;  58/3a _____:_____
-        .byte   $00                                     ;  59/3b _____;_____
-        .byte   $00                                     ;  60/3c _____<_____
-        .byte   $00                                     ;  61/3d _____=_____
-        .byte   $00                                     ;  62/3e _____>_____
-        .byte   $00                                     ;  63/3f _____?_____
-
-        .byte   $00                                     ;  64/40 _____@_____
-        .byte   CT_LOWER | CT_XDIGIT                    ;  65/41 _____a_____
-        .byte   CT_LOWER | CT_XDIGIT                    ;  66/42 _____b_____
-        .byte   CT_LOWER | CT_XDIGIT                    ;  67/43 _____c_____
-        .byte   CT_LOWER | CT_XDIGIT                    ;  68/44 _____d_____
-        .byte   CT_LOWER | CT_XDIGIT                    ;  69/45 _____e_____
-        .byte   CT_LOWER | CT_XDIGIT                    ;  70/46 _____f_____
-        .byte   CT_LOWER                                ;  71/47 _____g_____
-        .byte   CT_LOWER                                ;  72/48 _____h_____
-        .byte   CT_LOWER                                ;  73/49 _____i_____
-        .byte   CT_LOWER                                ;  74/4a _____j_____
-        .byte   CT_LOWER                                ;  75/4b _____k_____
-        .byte   CT_LOWER                                ;  76/4c _____l_____
-        .byte   CT_LOWER                                ;  77/4d _____m_____
-        .byte   CT_LOWER                                ;  78/4e _____n_____
-        .byte   CT_LOWER                                ;  79/4f _____o_____
-        .byte   CT_LOWER                                ;  80/50 _____p_____
-        .byte   CT_LOWER                                ;  81/51 _____q_____
-        .byte   CT_LOWER                                ;  82/52 _____r_____
-        .byte   CT_LOWER                                ;  83/53 _____s_____
-        .byte   CT_LOWER                                ;  84/54 _____t_____
-        .byte   CT_LOWER                                ;  85/55 _____u_____
-        .byte   CT_LOWER                                ;  86/56 _____v_____
-        .byte   CT_LOWER                                ;  87/57 _____w_____
-        .byte   CT_LOWER                                ;  88/58 _____x_____
-        .byte   CT_LOWER                                ;  89/59 _____y_____
-        .byte   CT_LOWER                                ;  90/5a _____z_____
-        .byte   $00                                     ;  91/5b _____[_____
-        .byte   $00                                     ;  92/5c _____\_____
-        .byte   $00                                     ;  93/5d _____]_____
-        .byte   $00                                     ;  94/5e _____^_____
-        .byte   $00                                     ;  95/5f _UNDERLINE_
-        .byte   $00                                     ;  96/60 _A`_grave__
-        .byte   $00                                     ;  97/61 _A'_acute__
-        .byte   $00                                     ;  98/62 _A^_circum_
-        .byte   $00                                     ;  99/63 _A~_tilde__
-        .byte   $00                                     ; 100/64 _A"_dieres_
-        .byte   $00                                     ; 101/65 _A__ring___
-        .byte   $00                                     ; 102/66 _AE________
-        .byte   $00                                     ; 103/67 _C,cedilla_
-        .byte   $00                                     ; 104/68 _E`_grave__
-        .byte   $00                                     ; 105/69 _E'_acute__
-        .byte   $00                                     ; 106/6a _E^_circum_
-        .byte   $00                                     ; 107/6b _E"_dieres_
-        .byte   $00                                     ; 108/6c _I`_grave__
-        .byte   $00                                     ; 109/6d _I'_acute__
-        .byte   $00                                     ; 110/6e _I^_circum_
-        .byte   $00                                     ; 111/6f _I"_dieres_
-        .byte   $00                                     ; 112/70 _D-_Eth_lr_
-        .byte   $00                                     ; 113/71 _N~_tilde__
-        .byte   $00                                     ; 114/72 _O`_grave__
-        .byte   $00                                     ; 115/73 _O'_acute__
-        .byte   $00                                     ; 116/74 _O^_circum_
-        .byte   $00                                     ; 117/75 _O~_tilde__
-        .byte   $00                                     ; 118/76 _O"_dieres_
-        .byte   $00                                     ; 119/77 __multiply_
-        .byte   $00                                     ; 120/78 _O/_slash__
-        .byte   $00                                     ; 121/79 _U`_grave__
-        .byte   $00                                     ; 122/7a _U'_acute__
-        .byte   $00                                     ; 123/7b _U^_circum_
-        .byte   $00                                     ; 124/7c _U"_dieres_
-        .byte   $00                                     ; 125/7d _Y'_acute__
-        .byte   $00                                     ; 126/7e _cap_thorn_
-        .byte   $00                                     ; 127/7f _Es-sed_B__
-
-        .byte   CT_CTRL                                 ; 128/80 __bullet___
-        .byte   CT_CTRL                                 ; 129/81 __v_line___
-        .byte   CT_CTRL                                 ; 130/82 __h_line___
-        .byte   CT_CTRL                                 ; 131/83 ___cross___
-        .byte   CT_CTRL                                 ; 132/84 _tl_corner_
-        .byte   CT_CTRL                                 ; 133/85 _tr_corner_
-        .byte   CT_CTRL                                 ; 134/86 _bl_corner_
-        .byte   CT_CTRL                                 ; 135/87 _br_corner_
-        .byte   CT_CTRL                                 ; 136/88 ___l_tee___
-        .byte   CT_CTRL                                 ; 137/89 ___r_tee___
-        .byte   CT_CTRL                                 ; 138/8a ___t_tee___
-        .byte   CT_CTRL                                 ; 139/8b ___b_tee___
-        .byte   CT_CTRL                                 ; 140/8c ___heart___
-        .byte   CT_CTRL | CT_OTHER_WS                   ; 141/8d _CR/diamond
-        .byte   CT_CTRL                                 ; 142/8e ___club____
-        .byte   CT_CTRL                                 ; 143/8f ___spade___
-        .byte   CT_CTRL                                 ; 144/90 _s_circle__
-        .byte   CT_CTRL | CT_OTHER_WS                   ; 145/91 _cursor-up_
-        .byte   CT_CTRL                                 ; 146/92 ___pound___
-        .byte   CT_CTRL | CT_OTHER_WS                   ; 147/93 _CLS/check_
-        .byte   CT_CTRL | CT_OTHER_WS                   ; 148/94 __INSert___
-        .byte   CT_CTRL                                 ; 149/95 ____+/-____
-        .byte   CT_CTRL                                 ; 150/96 __divide___
-        .byte   CT_CTRL                                 ; 151/97 __degree___
-        .byte   CT_CTRL                                 ; 152/98 _c_checker_
-        .byte   CT_CTRL                                 ; 153/99 _f_checker_
-        .byte   CT_CTRL                                 ; 154/9a _solid_sq__
-        .byte   CT_CTRL                                 ; 155/9b __cr_char__
-        .byte   CT_CTRL                                 ; 156/9c _up_arrow__
-        .byte   CT_CTRL | CT_OTHER_WS                   ; 157/9d cursor-left
-        .byte   CT_CTRL                                 ; 158/9e _left_arro_
-        .byte   CT_CTRL                                 ; 159/9f _right_arr_
-        .byte   CT_SPACE | CT_SPACE_TAB                 ; 160/a0 _req space_
-        .byte   $00                                     ; 161/a1 _!_invertd_
-        .byte   $00                                     ; 162/a2 ___cent____
-        .byte   $00                                     ; 163/a3 ___pound___
-        .byte   $00                                     ; 164/a4 __currency_
-        .byte   $00                                     ; 165/a5 ____yen____
-        .byte   $00                                     ; 166/a6 _|_broken__
-        .byte   $00                                     ; 167/a7 __section__
-        .byte   $00                                     ; 168/a8 __umulaut__
-        .byte   $00                                     ; 169/a9 _copyright_
-        .byte   $00                                     ; 170/aa __fem_ord__
-        .byte   $00                                     ; 171/ab _l_ang_quo_
-        .byte   $00                                     ; 172/ac ____not____
-        .byte   $00                                     ; 173/ad _syl_hyphn_
-        .byte   $00                                     ; 174/ae _registerd_
-        .byte   $00                                     ; 175/af _overline__
-        .byte   $00                                     ; 176/b0 __degrees__
-        .byte   $00                                     ; 177/b1 ____+/-____
-        .byte   $00                                     ; 178/b2 _2_supersc_
-        .byte   $00                                     ; 179/b3 _3_supersc_
-        .byte   $00                                     ; 180/b4 ___acute___
-        .byte   $00                                     ; 181/b5 ____mu_____
-        .byte   $00                                     ; 182/b6 _paragraph_
-        .byte   $00                                     ; 183/b7 __mid_dot__
-        .byte   $00                                     ; 184/b8 __cedilla__
-        .byte   $00                                     ; 185/b9 _1_supersc_
-        .byte   $00                                     ; 186/ba __mas_ord__
-        .byte   $00                                     ; 187/bb _r_ang_quo_
-        .byte   $00                                     ; 188/bc ____1/4____
-        .byte   $00                                     ; 189/bd ____1/2____
-        .byte   $00                                     ; 190/be ____3/4____
-        .byte   $00                                     ; 191/bf _?_invertd_
-
-        .byte   $00                                     ; 192/c0 _____`_____
-        .byte   CT_UPPER | CT_XDIGIT                    ; 193/c1 _____A_____
-        .byte   CT_UPPER | CT_XDIGIT                    ; 194/c2 _____B_____
-        .byte   CT_UPPER | CT_XDIGIT                    ; 195/c3 _____C_____
-        .byte   CT_UPPER | CT_XDIGIT                    ; 196/c4 _____D_____
-        .byte   CT_UPPER | CT_XDIGIT                    ; 197/c5 _____E_____
-        .byte   CT_UPPER | CT_XDIGIT                    ; 198/c6 _____F_____
-        .byte   CT_UPPER                                ; 199/c7 _____G_____
-        .byte   CT_UPPER                                ; 200/c8 _____H_____
-        .byte   CT_UPPER                                ; 201/c9 _____I_____
-        .byte   CT_UPPER                                ; 202/ca _____J_____
-        .byte   CT_UPPER                                ; 203/cb _____K_____
-        .byte   CT_UPPER                                ; 204/cc _____L_____
-        .byte   CT_UPPER                                ; 205/cd _____M_____
-        .byte   CT_UPPER                                ; 206/ce _____N_____
-        .byte   CT_UPPER                                ; 207/cf _____O_____
-        .byte   CT_UPPER                                ; 208/d0 _____P_____
-        .byte   CT_UPPER                                ; 209/d1 _____Q_____
-        .byte   CT_UPPER                                ; 210/d2 _____R_____
-        .byte   CT_UPPER                                ; 211/d3 _____S_____
-        .byte   CT_UPPER                                ; 212/d4 _____T_____
-        .byte   CT_UPPER                                ; 213/d5 _____U_____
-        .byte   CT_UPPER                                ; 214/d6 _____V_____
-        .byte   CT_UPPER                                ; 215/d7 _____W_____
-        .byte   CT_UPPER                                ; 216/d8 _____X_____
-        .byte   CT_UPPER                                ; 217/d9 _____Y_____
-        .byte   CT_UPPER                                ; 218/da _____Z_____
-        .byte   $00                                     ; 219/db _____{_____
-        .byte   $00                                     ; 220/dc _____|_____
-        .byte   $00                                     ; 221/dd _____}_____
-        .byte   $00                                     ; 222/de _____~_____
-        .byte   $00                                     ; 223/df ___HOUSE___
-        .byte   $00                                     ; 224/e0 _a`_grave__
-        .byte   $00                                     ; 225/e1 _a'_acute__
-        .byte   $00                                     ; 226/e2 _a^_circum_
-        .byte   $00                                     ; 227/e3 _a~_tilde__
-        .byte   $00                                     ; 228/e4 _a"_dieres_
-        .byte   $00                                     ; 229/e5 _a__ring___
-        .byte   $00                                     ; 230/e6 _ae________
-        .byte   $00                                     ; 231/e7 _c,cedilla_
-        .byte   $00                                     ; 232/e8 _e`_grave__
-        .byte   $00                                     ; 233/e9 _e'_acute__
-        .byte   $00                                     ; 234/ea _e^_circum_
-        .byte   $00                                     ; 235/eb _e"_dieres_
-        .byte   $00                                     ; 236/ec _i`_grave__
-        .byte   $00                                     ; 237/ed _i'_acute__
-        .byte   $00                                     ; 238/ee _i^_circum_
-        .byte   $00                                     ; 239/ef _i"_dieres_
-        .byte   $00                                     ; 240/f0 _o^x_Eth_s_
-        .byte   $00                                     ; 241/f1 _n~_tilda__
-        .byte   $00                                     ; 242/f2 _o`_grave__
-        .byte   $00                                     ; 243/f3 _o'_acute__
-        .byte   $00                                     ; 244/f4 _o^_circum_
-        .byte   $00                                     ; 245/f5 _o~_tilde__
-        .byte   $00                                     ; 246/f6 _o"_dieres_
-        .byte   $00                                     ; 247/f7 __divide___
-        .byte   $00                                     ; 248/f8 _o/_slash__
-        .byte   $00                                     ; 249/f9 _u`_grave__
-        .byte   $00                                     ; 250/fa _u'_acute__
-        .byte   $00                                     ; 251/fb _u^_circum_
-        .byte   $00                                     ; 252/fc _u"_dieres_
-        .byte   $00                                     ; 253/fd _y'_acute__
-        .byte   $00                                     ; 254/fe _sm_thorn__
-        .byte   $00                                     ; 255/ff _y"_dieres_
diff --git a/libsrc/osic1p/cvline.s b/libsrc/osic1p/cvline.s
deleted file mode 100644 (file)
index 84e5a45..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-;
-; based on CBM version
-; originally by:
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void cvlinexy (unsigned char x, unsigned char y, unsigned char length);
-; void cvline (unsigned char length);
-;
-
-        .export         _cvlinexy, _cvline
-        .import         popa, _gotoxy, putchar, newline
-        .importzp       tmp1
-
-_cvlinexy:
-        pha                     ; Save the length
-        jsr     popa            ; Get y
-        jsr     _gotoxy         ; Call this one, will pop params
-        pla                     ; Restore the length and run into _cvline
-
-_cvline:
-        cmp     #0              ; Is the length zero?
-        beq     L9              ; Jump if done
-        sta     tmp1
-L1:     lda     #$95            ; Vertical bar
-        jsr     putchar         ; Write, no cursor advance
-        jsr     newline         ; Advance cursor to next line
-        dec     tmp1
-        bne     L1
-L9:     rts
diff --git a/libsrc/osic1p/extra/screen-s3-32x28.s b/libsrc/osic1p/extra/screen-s3-32x28.s
deleted file mode 100644 (file)
index 40ed242..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Implementation of screen-layout related functions for Superboard ///
-;
-
-        .include        "../osiscreen.inc"
-
-S3_SCR_BASE     := $D000        ; Base of Superboard /// video RAM
-S3_VRAM_SIZE    = $0400         ; Size of Superboard /// video RAM (1 kB)
-S3_SCR_WIDTH    = $20           ; Screen width
-S3_SCR_HEIGHT   = $1C           ; Screen height
-S3_SCR_FIRSTCHAR = $80          ; Offset of cursor position (0, 0) from base
-                                ; of video RAM
-S3_SCROLL_DIST  = $20           ; Memory distance for scrolling by one line
-
-osi_screen_funcs S3_SCR_BASE, S3_VRAM_SIZE, S3_SCR_FIRSTCHAR, \
-                        S3_SCR_WIDTH, S3_SCR_HEIGHT, S3_SCROLL_DIST
diff --git a/libsrc/osic1p/extzp.inc b/libsrc/osic1p/extzp.inc
deleted file mode 100644 (file)
index 5e85e0b..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-;
-; Additional zero page locations for the Challenger 1P.
-;
-
-; ------------------------------------------------------------------------
-
-        .globalzp       CURS_X, CURS_Y, SCREEN_PTR, CHARBUF
diff --git a/libsrc/osic1p/extzp.s b/libsrc/osic1p/extzp.s
deleted file mode 100644 (file)
index b3bdaa0..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Additional zero page locations for the Challenger 1P.
-; NOTE: The zeropage locations contained in this file get initialized
-; in the startup code, so if you change anything here, be sure to check
-; not only the linker config, but also the startup file.
-;
-
-; ------------------------------------------------------------------------
-
-        .include        "extzp.inc"
-
-.segment        "EXTZP" : zeropage
-
-CURS_X:         .res    1
-CURS_Y:         .res    1
-SCREEN_PTR:     .res    2
-CHARBUF:        .res    1
-
-; size 5
-; Adjust size of the ZP segment in osic1p.cfg if the size changes
diff --git a/libsrc/osic1p/gotox.s b/libsrc/osic1p/gotox.s
deleted file mode 100644 (file)
index 0dea72b..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; copied from CBM implementation
-; originally by:
-; Ullrich von Bassewitz, 07.08.1998
-;
-; void gotox (unsigned char x);
-;
-        .export         _gotox
-        .import         plot
-        .include        "extzp.inc"
-
-_gotox: sta     CURS_X          ; Set new position
-        jmp     plot            ; And activate it
diff --git a/libsrc/osic1p/gotoxy.s b/libsrc/osic1p/gotoxy.s
deleted file mode 100644 (file)
index f765373..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; copied from CBM implementation
-;
-; originally by:
-; Ullrich von Bassewitz, 06.08.1998
-;
-; void gotoxy (unsigned char x, unsigned char y);
-;
-        .export         _gotoxy
-        .import         popa, plot
-        .include        "extzp.inc"
-
-_gotoxy:
-        sta     CURS_Y          ; Set Y
-        jsr     popa            ; Get X
-        sta     CURS_X          ; Set X
-        jmp     plot            ; Set the cursor position
diff --git a/libsrc/osic1p/gotoy.s b/libsrc/osic1p/gotoy.s
deleted file mode 100644 (file)
index 693863d..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; copied from CBM implementation
-; originally by:
-; Ullrich von Bassewitz, 0.08.1998
-;
-; void gotoy (unsigned char y);
-;
-        .export         _gotoy
-        .import         plot
-        .include        "extzp.inc"
-
-_gotoy: sta     CURS_Y          ; Set the new position
-        jmp     plot            ; And activate it
diff --git a/libsrc/osic1p/kbhit.s b/libsrc/osic1p/kbhit.s
deleted file mode 100644 (file)
index b616b4a..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-;
-; unsigned char kbhit (void);
-;
-; The method to detect a pressed key is based on the documentation in
-; "Section 3 Programmed Key Functions" in "The Challenger Character Graphics
-; Reference Manual"
-; We only want to return true for characters that can be returned by cgetc(),
-; but not for keys like <Shift> or <Ctrl>. Therefore a special handling is
-; needed for the first row. This is implemented by a bit mask that is stored
-; in tmp1 and that is set to zero after the first round.
-;
-
-        .export _kbhit
-        .include "osic1p.inc"
-        .include "extzp.inc"
-        .include "zeropage.inc"
-
-_kbhit:
-        lda     #%11011111      ; Mask for only checking the column for the
-        sta     tmp1            ; ESC key in the first keyboard row.
-
-        lda     #%11111110      ; Mask for first keyboard row
-scan:
-        sta     KBD             ; Select keyboard row
-        tax                     ; Save A
-        lda     KBD             ; Read keyboard columns
-        ora     tmp1            ; Mask out uninteresting keys (only relevant in
-                                ; first row)
-        cmp     #$FF            ; No keys pressed?
-        bne     keypressed
-        lda     #$00            ; For remaining rows no keys masked
-        sta     tmp1
-        txa                     ; Restore A
-        sec                     ; Want to shift in ones
-        rol     a               ; Rotate row select to next bit position
-        cmp     #$FF            ; Done?
-        bne     scan            ; If not, continue
-        lda     #$00            ; Return false
-        tax                     ; High byte of return is also zero
-        sta     CHARBUF         ; No character in buffer
-        rts
-keypressed:
-        jsr     INPUTC          ; Get input character in A
-        sta     CHARBUF         ; Save in buffer
-        ldx     #$00            ; High byte of return is always zero
-        lda     #$01            ; Return true
-        rts
diff --git a/libsrc/osic1p/oserror.s b/libsrc/osic1p/oserror.s
deleted file mode 100644 (file)
index 073691a..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; dummy implementation for Challenger 1P based on atmos implementation
-;
-; original by
-; Stefan Haubenthal, 2011-04-18
-;
-; int __fastcall__ _osmaperrno (unsigned char oserror);
-; /* Map a system specific error into a system independent code */
-;
-
-        .include        "errno.inc"
-        .export         __osmaperrno
-
-.proc   __osmaperrno
-
-        lda     #<EUNKNOWN
-        ldx     #>EUNKNOWN
-        rts
-
-.endproc
diff --git a/libsrc/osic1p/osic1p.inc b/libsrc/osic1p/osic1p.inc
deleted file mode 100644 (file)
index eabeaf7..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-; Addresses\r
-INPUTC          := $FD00        ; Input character from keyboard\r
-RESET           := $FF00        ; Reset address, show boot prompt\r
-KBD             := $DF00        ; Polled keyboard register\r
diff --git a/libsrc/osic1p/osiscreen.inc b/libsrc/osic1p/osiscreen.inc
deleted file mode 100644 (file)
index 66c5e9f..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-;\r
-; Macro definitions for screen layout modules\r
-;\r
-\r
-        .include        "extzp.inc"\r
-        \r
-.linecont +\r
-\r
-;\r
-; Internal function for screensize()\r
-;\r
-.macro  osi_screensize ScrWidth, ScrHeight\r
-                                ; Macro implementation of internal screensize\r
-                                ; function for given width and height in\r
-                                ; characters\r
-                                \r
-        .export         screensize\r
-\r
-.proc   screensize\r
-        ldx     #ScrWidth\r
-        ldy     #ScrHeight\r
-        rts\r
-.endproc\r
-.endmacro\r
-\r
-;\r
-; void clrscr (void);\r
-;\r
-.macro  osi_clrscr ScrBase, ScrRamSize\r
-\r
-        .export         _clrscr\r
-\r
-.proc   _clrscr\r
-        lda     #<ScrBase       ; Fill whole video RAM with blanks by calling\r
-        ldx     #>ScrBase       ; memset appropriately\r
-        jsr     pushax\r
-        \r
-        lda     #' '\r
-        ldx     #$00\r
-        jsr     pushax\r
-        \r
-        lda     #<ScrRamSize\r
-        ldx     #>ScrRamSize\r
-        jsr     _memset\r
-\r
-        lda     #$00            ; Cursor in upper left corner\r
-        sta     CURS_X\r
-        sta     CURS_Y\r
-        \r
-        jmp     plot            ; Set the cursor position\r
-.endproc\r
-\r
-.endmacro\r
-\r
-;\r
-; cputc/cputcxy for Challenger 1P\r
-; Based on PET/CBM implementation\r
-;\r
-\r
-.macro  osi_cputfuncs ScrBase, ScrFirstChar, ScrWidth, ScrHeight, \\r
-                         ScrollDist, ScrLo, ScrHi\r
-\r
-                                ; Number of characters to move for scrolling\r
-                                ; by one line\r
-ScrollLength    = (ScrHeight - 1) * ScrollDist\r
-\r
-;\r
-; void cputcxy (unsigned char x, unsigned char y, char c);\r
-; void cputc (char c);\r
-;\r
-        .export         _cputcxy, _cputc, cputdirect, putchar\r
-        .export         newline, plot\r
-\r
-_cputcxy:\r
-        pha                     ; Save C\r
-        jsr     popa            ; Get Y\r
-        jsr     _gotoxy         ; Set cursor, drop x\r
-        pla                     ; Restore C\r
-\r
-; Plot a character - also used as internal function\r
-\r
-_cputc: cmp     #$0A            ; CR?\r
-        bne     L1\r
-        lda     #0\r
-        sta     CURS_X\r
-        beq     plot            ; Recalculate pointers\r
-\r
-L1:     cmp     #$0D            ; LF?\r
-        beq     newline         ; Recalculate pointers\r
-\r
-cputdirect:\r
-        jsr     putchar         ; Write the character to the screen\r
-\r
-; Advance cursor position, register Y contains horizontal position after\r
-; putchar\r
-\r
-        cpy     #(ScrWidth - 1) ; Check whether line is full\r
-        bne     L3\r
-        jsr     newline         ; New line\r
-        ldy     #$FF            ; + cr\r
-L3:     iny\r
-        sty     CURS_X\r
-        rts\r
-\r
-newline:\r
-        inc     CURS_Y\r
-        lda     CURS_Y\r
-        cmp     #ScrHeight      ; Screen height\r
-        bne     plot\r
-        dec     CURS_Y          ; Bottom of screen reached, scroll\r
-\r
-                                ; Scroll destination address\r
-        lda     #<(ScrBase + ScrFirstChar)\r
-        ldx     #>(ScrBase + ScrFirstChar)\r
-        jsr     pushax\r
-        \r
-                                ; Scroll source address\r
-        lda     #<(ScrBase + ScrFirstChar + ScrollDist)\r
-        ldx     #>(ScrBase + ScrFirstChar + ScrollDist)\r
-        jsr     pushax\r
-        \r
-                                ; Number of characters to move\r
-        lda     #<ScrollLength\r
-        ldx     #>ScrollLength\r
-        jsr     _memmove\r
-\r
-                                ; Address of first character in last line\r
-                                ; of screen\r
-        lda     #<(ScrBase + ScrFirstChar + ScrollLength)\r
-        sta     ptr1\r
-        lda     #>(ScrBase + ScrFirstChar + ScrollLength)\r
-        sta     ptr1+1\r
-        \r
-        ldy     #ScrWidth       ; Fill last line with blanks\r
-        lda     #' '\r
-clrln:  sta     (ptr1),y\r
-        dey\r
-        bpl     clrln\r
-\r
-plot:   ldy     CURS_Y\r
-        lda     ScrLo,y\r
-        sta     SCREEN_PTR\r
-        lda     ScrHi,y\r
-        sta     SCREEN_PTR+1\r
-        rts\r
-\r
-; Write one character to the screen without doing anything else, return X\r
-; position in register Y\r
-\r
-putchar:\r
-        ldy     CURS_X\r
-        sta     (SCREEN_PTR),y  ; Set char\r
-        rts\r
-        \r
-.endmacro\r
-\r
-.macro osi_screen_funcs ScrBase, ScrRamSize, ScrFirstChar, \\r
-                        ScrWidth, ScrHeight, ScrollDist\r
-\r
-        .import         popa, _gotoxy\r
-        .import         _memmove, _memset, pushax\r
-        .importzp       ptr1\r
-\r
-.rodata\r
-\r
-; Screen address tables - offset to real screen\r
-ScrTabLo:\r
-        .repeat ScrHeight, I\r
-        .byte <(ScrBase + ScrFirstChar + I * ScrollDist)\r
-        .endrep\r
-        \r
-ScrTabHi:\r
-        .repeat ScrHeight, I\r
-        .byte >(ScrBase + ScrFirstChar + I * ScrollDist)\r
-        .endrep\r
-\r
-.code\r
-\r
-osi_cputfuncs   ScrBase, ScrFirstChar, ScrWidth, ScrHeight, \\r
-                         ScrollDist, ScrTabLo, ScrTabHi\r
-osi_screensize  ScrWidth, ScrHeight\r
-osi_clrscr      ScrBase, ScrRamSize\r
-\r
-.endmacro
\ No newline at end of file
diff --git a/libsrc/osic1p/screen-c1p-24x24.s b/libsrc/osic1p/screen-c1p-24x24.s
deleted file mode 100644 (file)
index e691c2f..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Implementation of screen-layout related functions for Challenger 1P
-;
-
-        .include        "osiscreen.inc"
-
-C1P_SCR_BASE    := $D000        ; Base of C1P video RAM
-C1P_VRAM_SIZE   = $0400         ; Size of C1P video RAM (1 kB)
-C1P_SCR_WIDTH   = $18           ; Screen width
-C1P_SCR_HEIGHT  = $18           ; Screen height
-C1P_SCR_FIRSTCHAR = $85         ; Offset of cursor position (0, 0) from base
-                                ; of video RAM
-C1P_SCROLL_DIST = $20           ; Memory distance for scrolling by one line
-
-osi_screen_funcs C1P_SCR_BASE, C1P_VRAM_SIZE, C1P_SCR_FIRSTCHAR, \
-                        C1P_SCR_WIDTH, C1P_SCR_HEIGHT, C1P_SCROLL_DIST
diff --git a/libsrc/osic1p/wherex.s b/libsrc/osic1p/wherex.s
deleted file mode 100644 (file)
index 1155a8a..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-; Copied from cbm/wherex.s
-
-; unsigned char wherex (void);
-;
-        .export         _wherex
-        .include        "extzp.inc"
-
-.proc   _wherex
-        lda     CURS_X
-        ldx     #$00
-        rts
-.endproc
diff --git a/libsrc/osic1p/wherey.s b/libsrc/osic1p/wherey.s
deleted file mode 100644 (file)
index 632cf4a..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-; Copied from cbm/wherey.s
-;
-; unsigned char wherey (void);
-;
-        .export         _wherey
-        .include        "extzp.inc"
-
-.proc   _wherey
-        lda     CURS_Y
-        ldx     #$00
-        rts
-.endproc
diff --git a/libsrc/pce/_scrsize.s b/libsrc/pce/_scrsize.s
deleted file mode 100644 (file)
index 038622a..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Screen size variables
-;
-        .include        "pce.inc"
-
-        .export screensize
-screensize:
-        ldx     xsize
-        ldy     ysize
-        rts
-
-; FIXME: changing the video mode allows for different screen sizes
-
-.rodata
-        .export xsize, ysize
-
-xsize:  .byte   charsperline
-ysize:  .byte   screenrows
diff --git a/libsrc/pce/chline.s b/libsrc/pce/chline.s
deleted file mode 100644 (file)
index 8bf8f16..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void chlinexy (unsigned char x, unsigned char y, unsigned char length);
-; void chline (unsigned char length);
-;
-
-        .export         _chlinexy, _chline
-        .import         popa, _gotoxy, cputdirect
-        .importzp       tmp1
-
-        .include        "pce.inc"
-
-_chlinexy:
-        pha                     ; Save the length
-        jsr     popa            ; Get y
-        jsr     _gotoxy         ; Call this one, will pop params
-        pla                     ; Restore the length
-
-_chline:
-        cmp     #0              ; Is the length zero?
-        beq     L9              ; Jump if done
-        sta     tmp1
-L1:     lda     #CH_HLINE       ; Horizontal line, screen code
-        jsr     cputdirect      ; Direct output
-        dec     tmp1
-        bne     L1
-L9:     rts
-
-
-
-
diff --git a/libsrc/pce/clock.s b/libsrc/pce/clock.s
deleted file mode 100644 (file)
index c6d6fb7..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-;
-; clock_t clock (void);
-;
-
-        .include        "pce.inc"
-        .include        "extzp.inc"
-
-        .forceimport    ticktock
-        .export         _clock
-        .importzp       sreg
-
-.proc   _clock
-
-        lda     tickcount+3
-        sta     sreg+1
-        lda     tickcount+2
-        sta     sreg
-        ldx     tickcount+1
-        lda     tickcount
-        rts
-
-.endproc
-
-        .constructor initclock, 24
-
-initclock:
-        lda     #0
-        ldx     #3
-@lp:    sta     tickcount,x
-        dex
-        bpl     @lp
-        rts
diff --git a/libsrc/pce/clrscr.s b/libsrc/pce/clrscr.s
deleted file mode 100644 (file)
index e3f40bb..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-
-        .include        "pce.inc"
-        .include        "extzp.inc"
-
-        .import plot
-        .export _clrscr
-_clrscr:
-
-        st0     #VDC_MAWR
-        st1     #<$0000
-        st2     #>$0000
-
-        st0     #VDC_VWR
-        ldy     #$40
-rowloop:
-        ldx     #$80
-colloop:
-        lda     #' '
-        sta     a:VDC_DATA_LO
-        lda     #$02
-        sta     a:VDC_DATA_HI
-
-        dex
-        bne     colloop
-        dey
-        bne     rowloop
-
-; Go to the home position.
-
-        stz     CURS_X
-        stz     CURS_Y
-        jmp     plot
-
-;-------------------------------------------------------------------------------
-; force the init constructor to be imported
-
-                .import initconio
-conio_init      = initconio
diff --git a/libsrc/pce/color.s b/libsrc/pce/color.s
deleted file mode 100644 (file)
index 0ff991a..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-;
-; unsigned char __fastcall__ textcolor (unsigned char color);
-; unsigned char __fastcall__ bgcolor (unsigned char color);
-; unsigned char __fastcall__ bordercolor (unsigned char color);
-;
-
-
-        .export     _textcolor, _bgcolor, _bordercolor
-
-        .include        "pce.inc"
-        .include        "extzp.inc"
-
-_textcolor:
-        ldx     CHARCOLOR       ; get old value
-        sta     CHARCOLOR       ; set new value
-        txa
-        rts
-
-_bgcolor:
-        ldx     BGCOLOR         ; get old value
-        sta     BGCOLOR         ; set new value
-        asl     a
-        tay
-
-        stz     VCE_ADDR_LO
-        stz     VCE_ADDR_HI
-        lda     colors,y
-        sta     VCE_DATA_LO
-        lda     colors+1,y
-        sta     VCE_DATA_HI
-
-        txa
-        rts
-
-_bordercolor:
-        lda     #0
-        tax
-        rts
-
-        .rodata
-        .export colors
-
-colors:
-        ;       G      R      B
-        .word ((0<<6)+(0<<3)+(0))       ; 0 black
-        .word ((7<<6)+(7<<3)+(7))       ; 1 white
-        .word ((0<<6)+(7<<3)+(0))       ; 2 red
-        .word ((7<<6)+(0<<3)+(7))       ; 3 cyan
-        .word ((0<<6)+(5<<3)+(7))       ; 4 violett
-        .word ((7<<6)+(0<<3)+(0))       ; 5 green
-        .word ((0<<6)+(0<<3)+(7))       ; 6 blue
-        .word ((7<<6)+(7<<3)+(0))       ; 7 yellow
-        .word ((5<<6)+(7<<3)+(0))       ; 8 orange
-        .word ((3<<6)+(4<<3)+(3))       ; 9 brown
-        .word ((4<<6)+(7<<3)+(4))       ; a light red
-        .word ((3<<6)+(3<<3)+(3))       ; b dark grey
-        .word ((4<<6)+(4<<3)+(4))       ; c middle grey
-        .word ((7<<6)+(4<<3)+(4))       ; d light green
-        .word ((4<<6)+(4<<3)+(7))       ; e light blue
-        .word ((6<<6)+(6<<3)+(6))       ; f light gray
-
-;-------------------------------------------------------------------------------
-; force the init constructor to be imported
-
-        .import initconio
-conio_init      = initconio
diff --git a/libsrc/pce/conio.s b/libsrc/pce/conio.s
deleted file mode 100644 (file)
index bcfc600..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-        .include        "pce.inc"
-        .include        "extzp.inc"
-
-        .import vce_init
-        .import psg_init
-        .import vdc_init
-
-        .constructor    initconio, 24
-
-        .macpack        longbranch
-
-initconio:
-        jsr     vce_init
-        jsr     psg_init
-        jsr     conio_init
-        jsr     set_palette
-
-        st0     #VDC_CR
-        st1     #<$0088
-        st2     #>$0088
-        rts
-
-        .import colors
-set_palette:
-        stz     VCE_ADDR_LO
-        stz     VCE_ADDR_HI
-
-        ldx     #0
-@lp:
-        ldy     #16
-@lp1:
-        lda     colors,x
-        sta     VCE_DATA_LO
-        lda     colors+1,x
-        sta     VCE_DATA_HI
-        dey
-        bne     @lp1
-
-        inx
-        inx
-        cpx     #16*2
-        jne     @lp
-
-        stz     VCE_ADDR_LO
-        stz     VCE_ADDR_HI
-        stz     VCE_DATA_LO
-        stz     VCE_DATA_HI
-
-        rts
-
-;----------------------------------------------------------------------------
-;
-;----------------------------------------------------------------------------
-
-        .importzp       ptr1, tmp1
-conio_init:
-        ; Load font
-        st0     #VDC_MAWR
-        st1     #<$2000
-        st2     #>$2000
-
-        ; ptr to font data
-        lda     #<font
-        sta     ptr1
-        lda     #>font
-        sta     ptr1+1
-
-        st0     #VDC_VWR        ; VWR
-
-        lda     #0
-        sta     tmp1
-        jsr     copy
-
-        lda     #<font
-        sta     ptr1
-        lda     #>font
-        sta     ptr1+1
-
-        lda     #$ff
-        sta     tmp1
-        jsr     copy
-
-
-        ldx     #0
-        stx     BGCOLOR
-        inx
-        stx     CHARCOLOR
-
-
-        rts
-
-copy:
-        ldy     #$80            ; 128 chars
-charloop:
-        ldx     #$08            ; 8 bytes/char
-lineloop:
-        lda     (ptr1)
-        eor     tmp1
-        sta     a:VDC_DATA_LO   ; bitplane 0
-        stz     a:VDC_DATA_HI   ; bitplane 1
-
-        clc                     ; increment font pointer
-        lda     ptr1
-        adc     #$01
-        sta     ptr1
-        lda     ptr1+1
-        adc     #$00
-        sta     ptr1+1
-        dex
-        bne     lineloop        ; next bitplane 0 byte
-        ldx     #$08            ; fill bitplane 2/3 with 0
-fillloop:
-        st1     #$00
-        st2     #$00
-        dex
-        bne     fillloop        ; next byte
-        dey
-        bne     charloop        ; next character
-
-        rts
-
-        .rodata
-font:
-        .include        "vga.inc"
diff --git a/libsrc/pce/cputc.s b/libsrc/pce/cputc.s
deleted file mode 100644 (file)
index 8d1cec8..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-;
-; void cputcxy (unsigned char x, unsigned char y, char c);
-; void cputc (char c);
-;
-
-        .export         _cputcxy, _cputc, cputdirect, putchar
-        .export         newline, plot
-        .import         popa, _gotoxy
-        .import         PLOT
-        .import         xsize
-
-        .importzp       tmp3,tmp4
-
-        .include        "pce.inc"
-        .include        "extzp.inc"
-
-_cputcxy:
-        pha                     ; Save C
-        jsr     popa            ; Get Y
-        jsr     _gotoxy         ; Set cursor, drop x
-        pla                     ; Restore C
-
-; Plot a character - also used as internal function
-
-_cputc: cmp     #$0d            ; CR?
-        bne     L1
-        lda     #0
-        sta     CURS_X
-        beq     plot            ; Recalculate pointers
-
-L1:     cmp     #$0a            ; LF?
-        beq     newline         ; Recalculate pointers
-
-; Printable char of some sort
-
-cputdirect:
-        jsr     putchar         ; Write the character to the screen
-
-; Advance cursor position
-
-advance:
-        ldy     CURS_X
-        iny
-        cpy     xsize
-        bne     L3
-        jsr     newline         ; new line
-        ldy     #0              ; + cr
-L3:     sty     CURS_X
-        jmp     plot
-
-newline:
-        inc     CURS_Y
-
-; Set cursor position, calculate RAM pointers
-
-plot:   ldy     CURS_X
-        ldx     CURS_Y
-        clc
-        jmp     PLOT            ; Set the new cursor
-
-; Write one character to the screen without doing anything else, return X
-; position in Y
-
-putchar:
-
-        ora     RVS             ; Set revers bit
-
-        tax
-
-        st0     #VDC_MAWR       ; Memory Adress Write
-
-        lda     SCREEN_PTR
-        sta     a:VDC_DATA_LO
-
-        lda     SCREEN_PTR + 1
-        sta     a:VDC_DATA_HI
-
-        st0     #VDC_VWR        ; VWR
-
-        txa
-        sta     a:VDC_DATA_LO   ; character
-
-        lda     CHARCOLOR
-
-        asl     a
-        asl     a
-        asl     a
-        asl     a
-
-        ora     #$02
-        sta     a:VDC_DATA_HI
-
-        rts
-
-;-------------------------------------------------------------------------------
-; force the init constructor to be imported
-
-        .import initconio
-conio_init      = initconio
diff --git a/libsrc/pce/crt0.s b/libsrc/pce/crt0.s
deleted file mode 100644 (file)
index 77872f3..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-;
-; Startup code for cc65 (PCEngine version)
-;
-; by Groepaz/Hitmen <groepaz@gmx.net>
-; based on code by Ullrich von Bassewitz <uz@cc65.org>
-;
-; This must be the *first* file on the linker command line
-;
-
-        .export         _exit
-        .export         __STARTUP__ : absolute = 1      ; Mark as startup
-
-        .import         initlib, donelib
-        .import         push0, _main, zerobss
-        .import         initheap
-        .import         IRQStub
-
-        ; Linker generated
-        .import         __RAM_START__, __RAM_SIZE__
-        .import         __ROM0_START__, __ROM0_SIZE__
-        .import         __ROM_START__, __ROM_SIZE__
-        .import         __STARTUP_LOAD__,__STARTUP_RUN__, __STARTUP_SIZE__
-        .import         __CODE_LOAD__,__CODE_RUN__, __CODE_SIZE__
-        .import         __RODATA_LOAD__,__RODATA_RUN__, __RODATA_SIZE__
-        .import         __DATA_LOAD__,__DATA_RUN__, __DATA_SIZE__
-        .import         __BSS_SIZE__
-
-        .include        "pce.inc"
-        .include        "extzp.inc"
-
-        .importzp       sp
-        .importzp       ptr1,ptr2
-        .importzp       tmp1,tmp2,tmp3
-
-; ------------------------------------------------------------------------
-; Place the startup code in a special segment.
-
-        .segment "STARTUP"
-
-start:
-
-        ; setup the CPU and System-IRQ
-
-        ; Initialize CPU
-
-        sei
-        nop
-        csh                     ; set high speed CPU mode
-        nop
-        cld
-        nop
-
-        ; Setup stack and memory mapping
-        ldx     #$FF            ; Stack top ($21FF)
-        txs
-
-        ; at startup all MPRs are set to 0, so init them
-        lda     #$ff
-        tam     #%00000001      ; 0000-1FFF = Hardware page
-        lda     #$F8
-        tam     #%00000010      ; 2000-3FFF = Work RAM
-
-        ; FIXME: setup a larger block of memory to use with C-code
-        ;lda     #$F7
-        ;tam     #%00000100      ; 4000-5FFF = Save RAM
-        ;lda     #1
-        ;tam     #%00001000      ; 6000-7FFF  Page 2
-        ;lda     #2
-        ;tam     #%00010000      ; 8000-9FFF  Page 3
-        ;lda     #3
-        ;tam     #%00100000      ; A000-BFFF  Page 4
-        ;lda     #4
-        ;tam     #%01000000      ; C000-DFFF  Page 5
-        ;lda     #0
-        ;tam     #%10000000      ; e000-fFFF  hucard/syscard bank 0
-
-        ; Clear work RAM (2000-3FFF)
-        stz     <$00
-        tii     $2000, $2001, $1FFF
-
-        ; Initialize hardware
-        stz     TIMER_CTRL      ; Timer off
-        lda     #$07
-        sta     IRQ_MASK        ; Interrupts off
-        stz     IRQ_STATUS      ; Acknowledge timer
-
-        ; FIXME; i dont know why the heck this one doesnt work when called from a constructor :/
-        .import vdc_init
-        jsr     vdc_init
-
-        ; Turn on background and VD interrupt/IRQ1
-        lda     #$05
-        sta     IRQ_MASK        ; IRQ1=on
-
-        ; Clear the BSS data
-        jsr     zerobss
-
-        ; Copy the .data segment to RAM
-        lda     #<(__DATA_LOAD__)
-        sta     ptr1
-        lda     #>(__DATA_LOAD__)
-        sta     ptr1+1
-        lda     #<(__DATA_RUN__)
-        sta     ptr2
-        lda     #>(__DATA_RUN__)
-        sta     ptr2+1
-
-        ldx     #>(__DATA_SIZE__)
-@l2:
-        beq     @s1             ; no more full pages
-
-        ; copy one page
-        ldy     #0
-@l1:
-        lda     (ptr1),y
-        sta     (ptr2),y
-        iny
-        bne     @l1
-
-        inc     ptr1+1
-        inc     ptr2+1
-
-        dex
-        bne     @l2
-
-        ; copy remaining bytes
-@s1:
-        ; copy one page
-        ldy     #0
-@l3:
-        lda     (ptr1),y
-        sta     (ptr2),y
-        iny
-        cpy     #<(__DATA_SIZE__)
-        bne     @l3
-
-        ; setup the stack
-        lda     #<(__RAM_START__+__RAM_SIZE__)
-        sta     sp
-        lda     #>(__RAM_START__+__RAM_SIZE__)
-        sta     sp + 1
-
-        ; Call module constructors
-        jsr     initlib
-
-        cli     ; allow IRQ only after constructors have run
-
-        ; Pass an empty command line
-        jsr     push0           ; argc
-        jsr     push0           ; argv
-
-        ldy     #4              ; Argument size
-        jsr     _main           ; call the users code
-
-        ; Call module destructors. This is also the _exit entry.
-_exit:
-        jsr     donelib         ; Run module destructors
-
-        ; reset the PCEngine (start over)
-        jmp     start
-
-_nmi:
-        rti
-
-        .export initmainargs
-initmainargs:
-        rts
-
-; ------------------------------------------------------------------------
-; hardware vectors
-; ------------------------------------------------------------------------
-        .segment "VECTORS"
-
-        .word   IRQStub         ; $fff6 IRQ2 (External IRQ, BRK)
-        .word   IRQStub         ; $fff8 IRQ1 (VDC)
-        .word   IRQStub         ; $fffa Timer
-        .word   _nmi            ; $fffc NMI
-        .word   start           ; $fffe reset
diff --git a/libsrc/pce/ctype.s b/libsrc/pce/ctype.s
deleted file mode 100644 (file)
index fa9a65c..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-;
-; Stefan Haubenthal with minor changes from Ullrich von Bassewitz, 2003-05-02
-;
-; Character specification table.
-;
-
-        .include        "ctype.inc"
-
-; The tables are readonly, put them into the rodata segment
-
-.rodata
-
-; The following 256 byte wide table specifies attributes for the isxxx type
-; of functions. Doing it by a table means some overhead in space, but it
-; has major advantages:
-;
-;   * It is fast. If it were'nt for the slow parameter passing of cc65, one
-;     could even define macros for the isxxx functions (this is usually
-;     done on other platforms).
-;
-;   * It is highly portable. The only unportable part is the table itself,
-;     all real code goes into the common library.
-;
-;   * We save some code in the isxxx functions.
-
-
-__ctype:
-        .repeat 2
-        .byte   CT_CTRL                 ;   0/00 ___ctrl_@___
-        .byte   CT_CTRL                 ;   1/01 ___ctrl_A___
-        .byte   CT_CTRL                 ;   2/02 ___ctrl_B___
-        .byte   CT_CTRL                 ;   3/03 ___ctrl_C___
-        .byte   CT_CTRL                 ;   4/04 ___ctrl_D___
-        .byte   CT_CTRL                 ;   5/05 ___ctrl_E___
-        .byte   CT_CTRL                 ;   6/06 ___ctrl_F___
-        .byte   CT_CTRL                 ;   7/07 ___ctrl_G___
-        .byte   CT_CTRL                 ;   8/08 ___ctrl_H___
-        .byte   CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB
-                                        ;   9/09 ___ctrl_I___
-        .byte   CT_CTRL | CT_OTHER_WS   ;  10/0a ___ctrl_J___
-        .byte   CT_CTRL | CT_OTHER_WS   ;  11/0b ___ctrl_K___
-        .byte   CT_CTRL | CT_OTHER_WS   ;  12/0c ___ctrl_L___
-        .byte   CT_CTRL | CT_OTHER_WS   ;  13/0d ___ctrl_M___
-        .byte   CT_CTRL                 ;  14/0e ___ctrl_N___
-        .byte   CT_CTRL                 ;  15/0f ___ctrl_O___
-        .byte   CT_CTRL                 ;  16/10 ___ctrl_P___
-        .byte   CT_CTRL                 ;  17/11 ___ctrl_Q___
-        .byte   CT_CTRL                 ;  18/12 ___ctrl_R___
-        .byte   CT_CTRL                 ;  19/13 ___ctrl_S___
-        .byte   CT_CTRL                 ;  20/14 ___ctrl_T___
-        .byte   CT_CTRL                 ;  21/15 ___ctrl_U___
-        .byte   CT_CTRL                 ;  22/16 ___ctrl_V___
-        .byte   CT_CTRL                 ;  23/17 ___ctrl_W___
-        .byte   CT_CTRL                 ;  24/18 ___ctrl_X___
-        .byte   CT_CTRL                 ;  25/19 ___ctrl_Y___
-        .byte   CT_CTRL                 ;  26/1a ___ctrl_Z___
-        .byte   CT_CTRL                 ;  27/1b ___ctrl_[___
-        .byte   CT_CTRL                 ;  28/1c ___ctrl_\___
-        .byte   CT_CTRL                 ;  29/1d ___ctrl_]___
-        .byte   CT_CTRL                 ;  30/1e ___ctrl_^___
-        .byte   CT_CTRL                 ;  31/1f ___ctrl_____
-        .byte   CT_SPACE | CT_SPACE_TAB ;  32/20 ___SPACE___
-        .byte   CT_NONE                 ;  33/21 _____!_____
-        .byte   CT_NONE                 ;  34/22 _____"_____
-        .byte   CT_NONE                 ;  35/23 _____#_____
-        .byte   CT_NONE                 ;  36/24 _____$_____
-        .byte   CT_NONE                 ;  37/25 _____%_____
-        .byte   CT_NONE                 ;  38/26 _____&_____
-        .byte   CT_NONE                 ;  39/27 _____'_____
-        .byte   CT_NONE                 ;  40/28 _____(_____
-        .byte   CT_NONE                 ;  41/29 _____)_____
-        .byte   CT_NONE                 ;  42/2a _____*_____
-        .byte   CT_NONE                 ;  43/2b _____+_____
-        .byte   CT_NONE                 ;  44/2c _____,_____
-        .byte   CT_NONE                 ;  45/2d _____-_____
-        .byte   CT_NONE                 ;  46/2e _____._____
-        .byte   CT_NONE                 ;  47/2f _____/_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  48/30 _____0_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  49/31 _____1_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  50/32 _____2_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  51/33 _____3_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  52/34 _____4_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  53/35 _____5_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  54/36 _____6_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  55/37 _____7_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  56/38 _____8_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  57/39 _____9_____
-        .byte   CT_NONE                 ;  58/3a _____:_____
-        .byte   CT_NONE                 ;  59/3b _____;_____
-        .byte   CT_NONE                 ;  60/3c _____<_____
-        .byte   CT_NONE                 ;  61/3d _____=_____
-        .byte   CT_NONE                 ;  62/3e _____>_____
-        .byte   CT_NONE                 ;  63/3f _____?_____
-
-        .byte   CT_NONE                 ;  64/40 _____@_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  65/41 _____A_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  66/42 _____B_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  67/43 _____C_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  68/44 _____D_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  69/45 _____E_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  70/46 _____F_____
-        .byte   CT_UPPER                ;  71/47 _____G_____
-        .byte   CT_UPPER                ;  72/48 _____H_____
-        .byte   CT_UPPER                ;  73/49 _____I_____
-        .byte   CT_UPPER                ;  74/4a _____J_____
-        .byte   CT_UPPER                ;  75/4b _____K_____
-        .byte   CT_UPPER                ;  76/4c _____L_____
-        .byte   CT_UPPER                ;  77/4d _____M_____
-        .byte   CT_UPPER                ;  78/4e _____N_____
-        .byte   CT_UPPER                ;  79/4f _____O_____
-        .byte   CT_UPPER                ;  80/50 _____P_____
-        .byte   CT_UPPER                ;  81/51 _____Q_____
-        .byte   CT_UPPER                ;  82/52 _____R_____
-        .byte   CT_UPPER                ;  83/53 _____S_____
-        .byte   CT_UPPER                ;  84/54 _____T_____
-        .byte   CT_UPPER                ;  85/55 _____U_____
-        .byte   CT_UPPER                ;  86/56 _____V_____
-        .byte   CT_UPPER                ;  87/57 _____W_____
-        .byte   CT_UPPER                ;  88/58 _____X_____
-        .byte   CT_UPPER                ;  89/59 _____Y_____
-        .byte   CT_UPPER                ;  90/5a _____Z_____
-        .byte   CT_NONE                 ;  91/5b _____[_____
-        .byte   CT_NONE                 ;  92/5c _____\_____
-        .byte   CT_NONE                 ;  93/5d _____]_____
-        .byte   CT_NONE                 ;  94/5e _____^_____
-        .byte   CT_NONE                 ;  95/5f _UNDERLINE_
-        .byte   CT_NONE                 ;  96/60 ___grave___
-        .byte   CT_LOWER | CT_XDIGIT    ;  97/61 _____a_____
-        .byte   CT_LOWER | CT_XDIGIT    ;  98/62 _____b_____
-        .byte   CT_LOWER | CT_XDIGIT    ;  99/63 _____c_____
-        .byte   CT_LOWER | CT_XDIGIT    ; 100/64 _____d_____
-        .byte   CT_LOWER | CT_XDIGIT    ; 101/65 _____e_____
-        .byte   CT_LOWER | CT_XDIGIT    ; 102/66 _____f_____
-        .byte   CT_LOWER                ; 103/67 _____g_____
-        .byte   CT_LOWER                ; 104/68 _____h_____
-        .byte   CT_LOWER                ; 105/69 _____i_____
-        .byte   CT_LOWER                ; 106/6a _____j_____
-        .byte   CT_LOWER                ; 107/6b _____k_____
-        .byte   CT_LOWER                ; 108/6c _____l_____
-        .byte   CT_LOWER                ; 109/6d _____m_____
-        .byte   CT_LOWER                ; 110/6e _____n_____
-        .byte   CT_LOWER                ; 111/6f _____o_____
-        .byte   CT_LOWER                ; 112/70 _____p_____
-        .byte   CT_LOWER                ; 113/71 _____q_____
-        .byte   CT_LOWER                ; 114/72 _____r_____
-        .byte   CT_LOWER                ; 115/73 _____s_____
-        .byte   CT_LOWER                ; 116/74 _____t_____
-        .byte   CT_LOWER                ; 117/75 _____u_____
-        .byte   CT_LOWER                ; 118/76 _____v_____
-        .byte   CT_LOWER                ; 119/77 _____w_____
-        .byte   CT_LOWER                ; 120/78 _____x_____
-        .byte   CT_LOWER                ; 121/79 _____y_____
-        .byte   CT_LOWER                ; 122/7a _____z_____
-        .byte   CT_NONE                 ; 123/7b _____{_____
-        .byte   CT_NONE                 ; 124/7c _____|_____
-        .byte   CT_NONE                 ; 125/7d _____}_____
-        .byte   CT_NONE                 ; 126/7e _____~_____
-        .byte   CT_OTHER_WS             ; 127/7f ____DEL____
-        .endrepeat
-
-
diff --git a/libsrc/pce/cvline.s b/libsrc/pce/cvline.s
deleted file mode 100644 (file)
index abd74a5..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.08.1998
-;
-; void cvlinexy (unsigned char x, unsigned char y, unsigned char length);
-; void cvline (unsigned char length);
-;
-
-        .export         _cvlinexy, _cvline
-        .import         popa, _gotoxy, putchar, newline
-        .importzp       tmp1
-
-        .include        "pce.inc"
-
-_cvlinexy:
-        pha                     ; Save the length
-        jsr     popa            ; Get y
-        jsr     _gotoxy         ; Call this one, will pop params
-        pla                     ; Restore the length and run into _cvline
-
-_cvline:
-        cmp     #0              ; Is the length zero?
-        beq     L9              ; Jump if done
-        sta     tmp1
-L1:     lda     #CH_VLINE       ; Vertical bar
-        jsr     putchar         ; Write, no cursor advance
-        jsr     newline         ; Advance cursor to next line
-        dec     tmp1
-        bne     L1
-L9:     rts
-
-
-
diff --git a/libsrc/pce/extzp.inc b/libsrc/pce/extzp.inc
deleted file mode 100644 (file)
index dce9155..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; extzp.inc for the PC-Engine
-;
-; Groepaz/Hitmen, 2015-11-19
-;
-; Assembler include file that imports the runtime zero page locations used
-; by the PC-Engine runtime, ready for usage in asm code.
-;
-
-
-        .global         CURS_X: zp
-        .global         CURS_Y: zp
-        .global         SCREEN_PTR: zp
-        .global         CHARCOLOR: zp
-        .global         RVS: zp
-        .global         BGCOLOR: zp
-        .global         tickcount: zp
-        .global         vdc_flags: zp
diff --git a/libsrc/pce/extzp.s b/libsrc/pce/extzp.s
deleted file mode 100644 (file)
index 26dc589..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Groepaz/Hitmen, 2015-11-19
-;
-; zeropage locations for exclusive use by the library
-;
-
-        .include "extzp.inc"
-
-        .segment "EXTZP" : zeropage
-
-CURS_X:         .res 1
-CURS_Y:         .res 1
-SCREEN_PTR:     .res 2
-CHARCOLOR:      .res 1
-RVS:            .res 1
-BGCOLOR:        .res 1
-tickcount:      .res 4
-vdc_flags:      .res 1
diff --git a/libsrc/pce/gotoxy.s b/libsrc/pce/gotoxy.s
deleted file mode 100644 (file)
index fb61646..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; void gotoxy (unsigned char x, unsigned char y);
-;
-
-        .export         _gotoxy
-        .import         popa, plot
-
-        .include        "pce.inc"
-        .include        "extzp.inc"
-
-_gotoxy:
-        sta     CURS_Y          ; Set Y
-        jsr     popa            ; Get X
-        sta     CURS_X          ; Set X
-        jmp     plot            ; Set the cursor position
-
-;-------------------------------------------------------------------------------
-; force the init constructor to be imported
-
-        .import initconio
-conio_init      = initconio
-
diff --git a/libsrc/pce/irq.s b/libsrc/pce/irq.s
deleted file mode 100644 (file)
index f34303d..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-;
-; IRQ handling (PCE version)
-;
-
-        .export         initirq, doneirq, IRQStub
-
-        .import         __INTERRUPTOR_COUNT__, callirq_y
-
-        .include        "pce.inc"
-        .include        "extzp.inc"
-
-; ------------------------------------------------------------------------
-.segment        "INIT"
-
-; a constructor
-;
-initirq:
-        rts
-
-; ------------------------------------------------------------------------
-.code
-
-; a destructor
-;
-doneirq:
-        rts
-
-; ------------------------------------------------------------------------
-
-IRQStub:
-        phy
-
-; Save the display-source flags (and, release the interrupt).
-;
-        ldy     a:VDC_CTRL
-        sty     vdc_flags
-
-        ldy     #<(__INTERRUPTOR_COUNT__ * 2)
-        beq     @L1
-        phx
-        pha
-
-        jsr     callirq_y
-
-        pla
-        plx
-@L1:    ply
-        rti
diff --git a/libsrc/pce/joy/pce-stdjoy.s b/libsrc/pce/joy/pce-stdjoy.s
deleted file mode 100644 (file)
index 746929d..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-
-;
-; Standard joystick driver for the PCEngine
-;
-
-        .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-        .include        "pce.inc"
-
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _pce_stdjoy_joy
-
-; Driver signature
-
-        .byte   $6A, $6F, $79           ; "joy"
-        .byte   JOY_API_VERSION         ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte   $10                     ; JOY_UP
-        .byte   $40                     ; JOY_DOWN
-        .byte   $80                     ; JOY_LEFT
-        .byte   $20                     ; JOY_RIGHT
-        .byte   $01                     ; JOY_FIRE_A
-        .byte   $02                     ; JOY_FIRE_B
-        .byte   $04                     ; JOY_SELECT
-        .byte   $08                     ; JOY_RUN
-
-; Jump table.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READJOY
-        .addr   0                       ; IRQ entry unused
-
-; ------------------------------------------------------------------------
-; Constants
-
-JOY_COUNT       = 4             ; Number of joysticks we support
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #<JOY_ERR_OK
-        ldx     #>JOY_ERR_OK
-
-;        rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; DEINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-;unsigned char __fastcall__ joy_count (void);
-
-COUNT:
-        lda     #<JOY_COUNT
-        ldx     #>JOY_COUNT
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
-;unsigned char __fastcall__ joy_read (unsigned char joystick);
-
-READJOY:
-        pha
-        jsr     read_joy
-        pla
-        tax                     ; Joystick number into X
-
-        ; return value from buffer
-
-joy1:
-        lda     padbuffer,x
-        ldx     #0
-        rts
-
-read_joy:
-        ; reset multitap counter
-        lda     #$01
-        sta     JOY_CTRL
-        pha
-        pla
-        nop
-        nop
-
-        lda     #$03
-        sta     JOY_CTRL
-        pha
-        pla
-        nop
-        nop
-
-        cly
-nextpad:
-        lda     #$01
-        sta     JOY_CTRL           ; sel = 1
-        pha
-        pla
-        nop                     ; some delay is required
-        nop
-
-        lda     JOY_CTRL
-        asl     a
-        asl     a
-        asl     a
-        asl     a
-        sta     padbuffer, y     ; store new value
-
-        stz     JOY_CTRL
-        pha
-        pla
-
-        nop                     ; some delay is required
-        nop
-
-        lda     JOY_CTRL
-        and     #$0F
-        ora     padbuffer, y     ; second half of new value
-
-        eor     #$FF
-        sta     padbuffer, y     ; store new value
-
-        iny
-        cpy     #$05
-        bcc     nextpad
-        rts
-
-.bss
-
-padbuffer:
-        .res    4
-
diff --git a/libsrc/pce/joy_stat_stddrv.s b/libsrc/pce/joy_stat_stddrv.s
deleted file mode 100644 (file)
index 2424c45..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Address of the static standard joystick driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void joy_static_stddrv[];
-;
-
-        .export         _joy_static_stddrv
-        .import         _pce_stdjoy_joy
-
-.rodata
-
-_joy_static_stddrv      := _pce_stdjoy_joy
diff --git a/libsrc/pce/joy_stddrv.s b/libsrc/pce/joy_stddrv.s
deleted file mode 100644 (file)
index ba39740..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Name of the standard joystick driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const char joy_stddrv[];
-;
-
-        .export         _joy_stddrv
-
-.rodata
-
-_joy_stddrv:    .asciiz "pce-stdjoy.joy"
diff --git a/libsrc/pce/kplot.s b/libsrc/pce/kplot.s
deleted file mode 100644 (file)
index e4426d0..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-
-        .export         PLOT
-
-        .include        "pce.inc"
-        .include        "extzp.inc"
-
-PLOT:
-        bcs     @getpos
-
-        tya
-        ;clc                    ; already cleared
-        adc     _plotlo,x
-        sta     SCREEN_PTR
-
-        lda     _plothi,x
-        adc     #0
-        sta     SCREEN_PTR+1
-@getpos:
-        ldx     CURS_Y
-        ldy     CURS_X
-        rts
-
-        .rodata
-
-_plotlo:
-        .repeat screenrows,line
-        .byte   <($0000+(line*$80))
-        .endrepeat
-
-_plothi:
-        .repeat screenrows,line
-        .byte   >($0000+(line*$80))
-        .endrepeat
-
-;-------------------------------------------------------------------------------
-; force the init constructor to be imported
-
-        .import initconio
-conio_init      = initconio
diff --git a/libsrc/pce/libref.s b/libsrc/pce/libref.s
deleted file mode 100644 (file)
index e4afa7e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-;
-; Oliver Schmidt, 2013-05-31
-;
-
-        .export         joy_libref
-        .import         _exit
-
-joy_libref      := _exit
diff --git a/libsrc/pce/psg.s b/libsrc/pce/psg.s
deleted file mode 100644 (file)
index 17d26b9..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-
-        .include        "pce.inc"
-
-        .export         psg_init
-
-psg_init:
-        clx
-        stz     PSG_GLOBAL_PAN          ; Clear global balance
-
-psg_clear_loop:
-        stx     PSG_CHAN_SELECT         ; Select channel
-        stz     PSG_FREQ_LO             ; Clear frequency LSB
-        stz     PSG_FREQ_HI             ; Clear frequency MSB
-        stz     PSG_CHAN_CTRL           ; Clear volume
-        stz     PSG_CHAN_PAN            ; Clear balance
-        stz     PSG_NOISE               ; Clear noise control
-        stz     PSG_LFO_FREQ            ; Clear LFO frequency
-        stz     PSG_LFO_CTRL            ; Clear LFO control
-
-        cly
-psg_clear_waveform:
-        stz     PSG_CHAN_DATA           ; Clear waveform byte
-        iny
-        cpy     #$20
-        bne     psg_clear_waveform
-
-        inx
-        cpx     #$06
-        bne     psg_clear_loop
-        rts
diff --git a/libsrc/pce/revers.s b/libsrc/pce/revers.s
deleted file mode 100644 (file)
index 17a7450..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-
-        .include        "pce.inc"
-        .include        "extzp.inc"
-
-        .export _revers
-
-.proc   _revers
-
-        ldx     #$00            ; Assume revers off
-        tay                     ; Test onoff
-        beq     L1              ; Jump if off
-        ldx     #$80            ; Load on value
-        ldy     #$00            ; Assume old value is zero
-L1:     lda     RVS             ; Load old value
-        stx     RVS             ; Set new value
-        beq     L2              ; Jump if old value zero
-        iny                     ; Make old value = 1
-L2:     ldx     #$00            ; Load high byte of result
-        tya                     ; Load low byte, set CC
-        rts
-
-.endproc
-
-;-------------------------------------------------------------------------------
-; force the init constructor to be imported
-
-        .import         initconio
-conio_init      = initconio
diff --git a/libsrc/pce/ticktock.s b/libsrc/pce/ticktock.s
deleted file mode 100644 (file)
index 4e4d44d..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-        .interruptor    ticktock, 24
-
-        .include        "pce.inc"
-        .include        "extzp.inc"
-
-ticktock:
-        bbr5    vdc_flags,@s1   ; not vertical-blank interrupt
-
-        ; Increment the system tick counter.
-        inc     tickcount
-        bne     @s1
-        inc     tickcount+1
-        bne     @s1
-        inc     tickcount+2
-        bne     @s1
-        inc     tickcount+3
-
-@s1:    rts
diff --git a/libsrc/pce/vce.s b/libsrc/pce/vce.s
deleted file mode 100644 (file)
index 3c19fd5..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-
-        .include        "pce.inc"
-
-        .export         vce_init
-
-vce_init:
-        ; Set CTA to zero
-        stz     VCE_ADDR_LO
-        stz     VCE_ADDR_HI
-        ldy     #$01
-vce_clear_bank:
-        ldx     #$00
-vce_clear_color:
-        stz     VCE_DATA_LO     ; Clear color (LSB)
-        stz     VCE_DATA_HI     ; Clear color (MSB)
-        dex
-        bne     vce_clear_color
-        dey
-        bne     vce_clear_bank
-        rts
diff --git a/libsrc/pce/vdc.s b/libsrc/pce/vdc.s
deleted file mode 100644 (file)
index 878c793..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-
-        .include        "pce.inc"
-
-; FIXME: implement selection of different video modes at runtime
-HIRES   = 1
-
-        .export         vdc_init
-
-vdc_init:
-        lda     a:VDC_CTRL
-
-        VREG    $00, $0000      ; MAWR
-        VREG    $01, $0000      ; MARR
-        VREG    $05, $0000      ; CR
-        VREG    $06, $0000      ; RCR
-        VREG    $07, $0000      ; BXR
-        VREG    $08, $0000      ; BYR
-        VREG    $09, $0070      ; MAWR
-        VREG    $0C, $1702      ; CRTC - VSR
-        VREG    $0D, $00DF      ; CRTC - VDS
-        VREG    $0E, $000C      ; CRTC - VDE
-        VREG    $0F, $0000      ; DCR
-
-.if      HIRES
-
-        VREG    $0A, $0C02      ; CRTC - HSR
-        VREG    $0B, $043C      ; CRTC - HDS
-        lda     #$06
-        sta     VCE_CTRL
-
-.else
-
-        VREG    $0A, $0202      ; CRTC - HSR
-        VREG    $0B, $041F      ; CRTC - HDS
-        lda     #$04
-        sta     VCE_CTRL
-
-.endif
-
-        lda     a:VDC_CTRL
-        rts
diff --git a/libsrc/pce/vga.inc b/libsrc/pce/vga.inc
deleted file mode 100644 (file)
index 9317d6c..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-
-; VGA charset for the PC-Engine conio implementation
-
-        .byte   $00, $00, $00, $00, $00, $00, $00, $00
-
-        .byte   %00000000
-        .byte   %00000000
-        .byte   %00000000
-        .byte   %11111111
-        .byte   %00000000
-        .byte   %00000000
-        .byte   %00000000
-        .byte   %00000000
-
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %11111111
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-
-        .byte   %00000000
-        .byte   %00000000
-        .byte   %00000000
-        .byte   %00011111
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-
-        .byte   %00000000
-        .byte   %00000000
-        .byte   %00000000
-        .byte   %11110000
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00011111
-        .byte   %00000000
-        .byte   %00000000
-        .byte   %00000000
-        .byte   %00000000
-
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %11110000
-        .byte   %00000000
-        .byte   %00000000
-        .byte   %00000000
-        .byte   %00000000
-
-        .byte   %00000000
-        .byte   %00000000
-        .byte   %00000000
-        .byte   %11111111
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %11111111
-        .byte   %00000000
-        .byte   %00000000
-        .byte   %00000000
-        .byte   %00000000
-
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00011111
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %11110000
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-        .byte   %00010000
-
-        .byte   $3C, $66, $66, $66, $3C, $18, $7E, $18
-        .byte   $3F, $33, $3F, $30, $30, $70, $F0, $E0
-        .byte   $7F, $63, $7F, $63, $63, $67, $E6, $C0
-        .byte   $99, $5A, $3C, $E7, $E7, $3C, $5A, $99
-        .byte   $80, $E0, $F8, $FE, $F8, $E0, $80, $00
-        .byte   $02, $0E, $3E, $FE, $3E, $0E, $02, $00
-        .byte   $18, $3C, $7E, $18, $18, $7E, $3C, $18
-        .byte   $66, $66, $66, $66, $66, $00, $66, $00
-        .byte   $7F, $DB, $DB, $7B, $1B, $1B, $1B, $00
-        .byte   $3E, $63, $38, $6C, $6C, $38, $CC, $78
-        .byte   $00, $00, $00, $00, $7E, $7E, $7E, $00
-        .byte   $18, $3C, $7E, $18, $7E, $3C, $18, $FF
-        .byte   $18, $3C, $7E, $18, $18, $18, $18, $00
-        .byte   $18, $18, $18, $18, $7E, $3C, $18, $00
-        .byte   $00, $18, $0C, $FE, $0C, $18, $00, $00
-        .byte   $00, $30, $60, $FE, $60, $30, $00, $00
-        .byte   $00, $00, $C0, $C0, $C0, $FE, $00, $00
-        .byte   $00, $24, $66, $FF, $66, $24, $00, $00
-        .byte   $00, $18, $3C, $7E, $FF, $FF, $00, $00
-        .byte   $00, $FF, $FF, $7E, $3C, $18, $00, $00
-        .byte   $00, $00, $00, $00, $00, $00, $00, $00
-        .byte   $30, $78, $78, $78, $30, $00, $30, $00
-        .byte   $6C, $6C, $6C, $00, $00, $00, $00, $00
-        .byte   $6C, $6C, $FE, $6C, $FE, $6C, $6C, $00
-        .byte   $30, $7C, $C0, $78, $0C, $F8, $30, $00
-        .byte   $00, $C6, $CC, $18, $30, $66, $C6, $00
-        .byte   $38, $6C, $38, $76, $DC, $CC, $76, $00
-        .byte   $60, $60, $C0, $00, $00, $00, $00, $00
-        .byte   $18, $30, $60, $60, $60, $30, $18, $00
-        .byte   $60, $30, $18, $18, $18, $30, $60, $00
-        .byte   $00, $66, $3C, $FF, $3C, $66, $00, $00
-        .byte   $00, $30, $30, $FC, $30, $30, $00, $00
-        .byte   $00, $00, $00, $00, $00, $30, $30, $60
-        .byte   $00, $00, $00, $FC, $00, $00, $00, $00
-        .byte   $00, $00, $00, $00, $00, $30, $30, $00
-        .byte   $06, $0C, $18, $30, $60, $C0, $80, $00
-        .byte   $7C, $C6, $CE, $DE, $F6, $E6, $7C, $00
-        .byte   $30, $70, $30, $30, $30, $30, $FC, $00
-        .byte   $78, $CC, $0C, $38, $60, $CC, $FC, $00
-        .byte   $78, $CC, $0C, $38, $0C, $CC, $78, $00
-        .byte   $1C, $3C, $6C, $CC, $FE, $0C, $1E, $00
-        .byte   $FC, $C0, $F8, $0C, $0C, $CC, $78, $00
-        .byte   $38, $60, $C0, $F8, $CC, $CC, $78, $00
-        .byte   $FC, $CC, $0C, $18, $30, $30, $30, $00
-        .byte   $78, $CC, $CC, $78, $CC, $CC, $78, $00
-        .byte   $78, $CC, $CC, $7C, $0C, $18, $70, $00
-        .byte   $00, $30, $30, $00, $00, $30, $30, $00
-        .byte   $00, $30, $30, $00, $00, $30, $30, $60
-        .byte   $18, $30, $60, $C0, $60, $30, $18, $00
-        .byte   $00, $00, $FC, $00, $00, $FC, $00, $00
-        .byte   $60, $30, $18, $0C, $18, $30, $60, $00
-        .byte   $78, $CC, $0C, $18, $30, $00, $30, $00
-        .byte   $7C, $C6, $DE, $DE, $DE, $C0, $78, $00
-        .byte   $30, $78, $CC, $CC, $FC, $CC, $CC, $00
-        .byte   $FC, $66, $66, $7C, $66, $66, $FC, $00
-        .byte   $3C, $66, $C0, $C0, $C0, $66, $3C, $00
-        .byte   $F8, $6C, $66, $66, $66, $6C, $F8, $00
-        .byte   $7E, $60, $60, $78, $60, $60, $7E, $00
-        .byte   $7E, $60, $60, $78, $60, $60, $60, $00
-        .byte   $3C, $66, $C0, $C0, $CE, $66, $3E, $00
-        .byte   $CC, $CC, $CC, $FC, $CC, $CC, $CC, $00
-        .byte   $78, $30, $30, $30, $30, $30, $78, $00
-        .byte   $1E, $0C, $0C, $0C, $CC, $CC, $78, $00
-        .byte   $E6, $66, $6C, $78, $6C, $66, $E6, $00
-        .byte   $60, $60, $60, $60, $60, $60, $7E, $00
-        .byte   $C6, $EE, $FE, $FE, $D6, $C6, $C6, $00
-        .byte   $C6, $E6, $F6, $DE, $CE, $C6, $C6, $00
-        .byte   $38, $6C, $C6, $C6, $C6, $6C, $38, $00
-        .byte   $FC, $66, $66, $7C, $60, $60, $F0, $00
-        .byte   $78, $CC, $CC, $CC, $DC, $78, $1C, $00
-        .byte   $FC, $66, $66, $7C, $6C, $66, $E6, $00
-        .byte   $78, $CC, $E0, $70, $1C, $CC, $78, $00
-        .byte   $FC, $30, $30, $30, $30, $30, $30, $00
-        .byte   $CC, $CC, $CC, $CC, $CC, $CC, $FC, $00
-        .byte   $CC, $CC, $CC, $CC, $CC, $78, $30, $00
-        .byte   $C6, $C6, $C6, $D6, $FE, $EE, $C6, $00
-        .byte   $C6, $C6, $6C, $38, $38, $6C, $C6, $00
-        .byte   $CC, $CC, $CC, $78, $30, $30, $78, $00
-        .byte   $FE, $06, $0C, $18, $30, $60, $FE, $00
-        .byte   $78, $60, $60, $60, $60, $60, $78, $00
-        .byte   $C0, $60, $30, $18, $0C, $06, $02, $00
-        .byte   $78, $18, $18, $18, $18, $18, $78, $00
-        .byte   $10, $38, $6C, $C6, $00, $00, $00, $00
-        .byte   $00, $00, $00, $00, $00, $00, $00, $FF
-        .byte   $30, $30, $18, $00, $00, $00, $00, $00
-        .byte   $00, $00, $78, $0C, $7C, $CC, $76, $00
-        .byte   $E0, $60, $60, $7C, $66, $66, $DC, $00
-        .byte   $00, $00, $78, $CC, $C0, $CC, $78, $00
-        .byte   $1C, $0C, $0C, $7C, $CC, $CC, $76, $00
-        .byte   $00, $00, $78, $CC, $FC, $C0, $78, $00
-        .byte   $38, $6C, $60, $F0, $60, $60, $F0, $00
-        .byte   $00, $00, $76, $CC, $CC, $7C, $0C, $F8
-        .byte   $E0, $60, $6C, $76, $66, $66, $E6, $00
-        .byte   $30, $00, $70, $30, $30, $30, $78, $00
-        .byte   $0C, $00, $0C, $0C, $0C, $CC, $CC, $78
-        .byte   $E0, $60, $66, $6C, $78, $6C, $E6, $00
-        .byte   $70, $30, $30, $30, $30, $30, $78, $00
-        .byte   $00, $00, $CC, $FE, $FE, $D6, $C6, $00
-        .byte   $00, $00, $F8, $CC, $CC, $CC, $CC, $00
-        .byte   $00, $00, $78, $CC, $CC, $CC, $78, $00
-        .byte   $00, $00, $DC, $66, $66, $7C, $60, $F0
-        .byte   $00, $00, $76, $CC, $CC, $7C, $0C, $1E
-        .byte   $00, $00, $DC, $76, $66, $60, $F0, $00
-        .byte   $00, $00, $7C, $C0, $78, $0C, $F8, $00
-        .byte   $10, $30, $7C, $30, $30, $34, $18, $00
-        .byte   $00, $00, $CC, $CC, $CC, $CC, $76, $00
-        .byte   $00, $00, $CC, $CC, $CC, $78, $30, $00
-        .byte   $00, $00, $C6, $D6, $FE, $FE, $6C, $00
-        .byte   $00, $00, $C6, $6C, $38, $6C, $C6, $00
-        .byte   $00, $00, $CC, $CC, $CC, $7C, $0C, $F8
-        .byte   $00, $00, $FC, $98, $30, $64, $FC, $00
-        .byte   $1C, $30, $30, $E0, $30, $30, $1C, $00
-        .byte   $18, $18, $18, $00, $18, $18, $18, $00
-        .byte   $E0, $30, $30, $1C, $30, $30, $E0, $00
-        .byte   $76, $DC, $00, $00, $00, $00, $00, $00
-        .byte   $00, $10, $38, $6C, $C6, $C6, $FE, $00
diff --git a/libsrc/pce/waitvblank.s b/libsrc/pce/waitvblank.s
deleted file mode 100644 (file)
index b9f0f90..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; void waitvblank (void);
-;
-
-        .include        "pce.inc"
-        .include        "extzp.inc"
-
-        .forceimport    ticktock
-        .export         _waitvblank
-
-.proc   _waitvblank
-
-        lda     tickcount
-@lp:    cmp     tickcount
-        beq     @lp
-        rts
-
-.endproc
diff --git a/libsrc/pet/_scrsize.s b/libsrc/pet/_scrsize.s
deleted file mode 100644 (file)
index b2ba92b..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; Screen size variables
-;
-
-        .export         screensize
-
-        .include        "pet.inc"
-
-.proc   screensize
-
-        ldx     SCR_LINELEN
-        inx                     ; Variable is one less
-        ldy     #25
-        rts
-
-.endproc
-
diff --git a/libsrc/pet/break.s b/libsrc/pet/break.s
deleted file mode 100644 (file)
index 49585ff..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.11.1998
-;
-; void set_brk (unsigned Addr);
-; void reset_brk (void);
-;
-
-        .export         _set_brk, _reset_brk
-        .destructor     _reset_brk
-        .export         _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
-
-        .include        "pet.inc"
-
-
-.bss
-_brk_a:         .res    1
-_brk_x:         .res    1
-_brk_y:         .res    1
-_brk_sr:        .res    1
-_brk_pc:        .res    2
-
-oldvec:         .res    2               ; Old vector
-
-
-.data
-uservec:        jmp     $FFFF           ; Patched at runtime
-
-
-.code
-
-; Set the break vector
-.proc   _set_brk
-
-        sta     uservec+1
-        stx     uservec+2       ; Set the user vector
-
-        lda     oldvec
-        ora     oldvec+1        ; Did we save the vector already?
-        bne     L1              ; Jump if we installed the handler already
-
-        lda     BRKVec
-        sta     oldvec
-        lda     BRKVec+1
-        sta     oldvec+1        ; Save the old vector
-
-L1:     lda     #<brk_handler   ; Set the break vector to our routine
-        ldx     #>brk_handler
-        sta     BRKVec
-        stx     BRKVec+1
-        rts
-
-.endproc
-
-
-; Reset the break vector
-.proc   _reset_brk
-
-        lda     oldvec
-        ldx     oldvec+1
-        beq     @L9             ; Jump if vector not installed
-        sta     BRKVec
-        stx     BRKVec+1
-        lda     #$00
-        sta     oldvec          ; Clear the old vector
-        stx     oldvec+1
-@L9:    rts
-
-.endproc
-
-
-
-; Break handler, called if a break occurs
-
-.proc   brk_handler
-
-        pla
-        sta     _brk_y
-        pla
-        sta     _brk_x
-        pla
-        sta     _brk_a
-        pla
-        and     #$EF            ; Clear break bit
-        sta     _brk_sr
-        pla                     ; PC low
-        sec
-        sbc     #2              ; Point to start of brk
-        sta     _brk_pc
-        pla                     ; PC high
-        sbc     #0
-        sta     _brk_pc+1
-
-        jsr     uservec         ; Call the user's routine
-
-        lda     _brk_pc+1
-        pha
-        lda     _brk_pc
-        pha
-        lda     _brk_sr
-        pha
-        ldx     _brk_x
-        ldy     _brk_y
-        lda     _brk_a
-        rti                     ; Jump back...
-
-.endproc
-
-
-
diff --git a/libsrc/pet/cgetc.s b/libsrc/pet/cgetc.s
deleted file mode 100644 (file)
index 1249bb1..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; char cgetc (void);
-;
-
-        .export         _cgetc
-        .import         cursor
-
-        .include        "pet.inc"
-
-_cgetc: lda     KEY_COUNT       ; Get number of characters
-        bne     L3              ; Jump if there are already chars waiting
-
-; Switch on the cursor if needed
-
-        lda     CURS_FLAG
-        pha
-        lda     cursor
-        jsr     setcursor
-L1:     lda     KEY_COUNT
-        beq     L1
-        ldx     #0
-        pla
-        bne     L2
-        inx
-L2:     txa
-        jsr     setcursor
-
-; Fetch the character from the keyboard buffer
-
-L3:     sei
-        ldy     KEY_BUF
-        ldx     #$00
-L4:     lda     KEY_BUF+1,x
-        sta     KEY_BUF,x
-        inx
-        cpx     KEY_COUNT
-        bne     L4
-        dec     KEY_COUNT
-        cli
-        ldx     #$00            ; Clear high byte
-        tya
-        rts
-
-; Switch the cursor on or off
-
-setcursor:
-        tax                     ; On or off?
-        bne     seton           ; Go set it on
-        lda     CURS_FLAG       ; Is the cursor currently off?
-        bne     crs9            ; Jump if yes
-        lda     #1
-        sta     CURS_FLAG       ; Mark it as off
-        lda     CURS_STATE      ; Cursor currently displayed?
-        beq     crs8            ; Jump if no
-        ldy     CURS_X          ; Get the character column
-        lda     (SCREEN_PTR),y  ; Get character
-        eor     #$80
-        sta     (SCREEN_PTR),y  ; Store character back
-crs8:   lda     #0
-        sta     CURS_STATE      ; Cursor not displayed
-crs9:   rts
-
-seton:  lda     #0
-        sta     CURS_FLAG
-        rts
-
diff --git a/libsrc/pet/checkst.s b/libsrc/pet/checkst.s
deleted file mode 100644 (file)
index 8d9d9a4..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 19.11.2002
-;
-; The kernal open routines do not return a carry on error, so check the IEEE
-; status, set carry flag and return
-;
-
-        .export         checkst
-        .importzp       ST
-
-
-.proc   checkst
-
-        lda     ST
-        beq     @L1
-        lda     #5              ; ### Device not present
-        sec
-        rts
-
-@L1:    clc
-        rts
-
-.endproc
diff --git a/libsrc/pet/clrscr.s b/libsrc/pet/clrscr.s
deleted file mode 100644 (file)
index fe50374..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.11.1998
-;
-; void clrscr (void);
-;
-
-        .export         _clrscr
-        .import         plot
-        .importzp       ptr1
-
-        .include        "pet.inc"
-
-_clrscr:
-
-; Set the screen base address
-
-        lda     #$00
-        sta     ptr1
-        lda     #$80
-        sta     ptr1+1
-
-; Determine, how many pages to fill
-
-        ldx     #4
-        lda     SCR_LINELEN     ; Check length of one line
-        cmp     #40+1
-        bcc     L1
-        ldx     #8
-
-; Clear the screen
-
-L1:     lda     #$20            ; Screen code for blank
-        ldy     #$00
-L2:     sta     (ptr1),y
-        iny
-        bne     L2
-        inc     ptr1+1
-        dex
-        bne     L2
-
-; Set the cursor to 0/0
-
-        lda     #0
-        sta     CURS_X
-        sta     CURS_Y
-        jmp     plot
-
-        rts
-
diff --git a/libsrc/pet/color.s b/libsrc/pet/color.s
deleted file mode 100644 (file)
index 80ffb91..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; unsigned char __fastcall__ textcolor (unsigned char color);
-; unsigned char __fastcall__ bgcolor (unsigned char color);
-; unsigned char __fastcall__ bordercolor (unsigned char color);
-;
-
-        .export         _textcolor, _bgcolor, _bordercolor
-        .import         return0, return1
-
-_textcolor      = return1
-
-_bgcolor        = return0
-
-_bordercolor    = return0
-
-
diff --git a/libsrc/pet/conio.s b/libsrc/pet/conio.s
deleted file mode 100644 (file)
index f46c38c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.11.1998
-;
-; Low level stuff for screen output/console input
-;
-
-        .exportzp       CURS_X, CURS_Y
-
-        .include        "pet.inc"
-
diff --git a/libsrc/pet/cputc.s b/libsrc/pet/cputc.s
deleted file mode 100644 (file)
index f38d275..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; void cputcxy (unsigned char x, unsigned char y, char c);
-; void cputc (char c);
-;
-
-        .export         _cputcxy, _cputc, cputdirect, putchar
-        .export         newline, plot
-        .import         popa, _gotoxy
-
-        .include        "pet.inc"
-
-_cputcxy:
-        pha                     ; Save C
-        jsr     popa            ; Get Y
-        jsr     _gotoxy         ; Set cursor, drop x
-        pla                     ; Restore C
-
-; Plot a character - also used as internal function
-
-_cputc: cmp     #$0A            ; CR?
-        bne     L1
-        lda     #0
-        sta     CURS_X
-        beq     plot            ; Recalculate pointers
-
-L1:     cmp     #$0D            ; LF?
-        beq     newline         ; Recalculate pointers
-
-; Printable char of some sort
-
-        cmp     #' '
-        bcc     cputdirect      ; Other control char
-        tay
-        bmi     L10
-        cmp     #$60
-        bcc     L2
-        and     #$DF
-        bne     cputdirect      ; Branch always
-L2:     and     #$3F
-
-cputdirect:
-        jsr     putchar         ; Write the character to the screen
-
-; Advance cursor position
-
-advance:
-        cpy     SCR_LINELEN     ; xsize-1
-        bne     L3
-        jsr     newline         ; new line
-        ldy     #$FF            ; + cr
-L3:     iny
-        sty     CURS_X
-        rts
-
-newline:
-        lda     SCR_LINELEN     ; xsize-1
-        sec                     ; Account for -1 above
-        adc     SCREEN_PTR
-        sta     SCREEN_PTR
-        bcc     L4
-        inc     SCREEN_PTR+1
-L4:     inc     CURS_Y
-        rts
-
-; Handle character if high bit set
-
-L10:    and     #$7F
-        cmp     #$7E            ; PI?
-        bne     L11
-        lda     #$5E            ; Load screen code for PI
-        bne     cputdirect
-L11:    ora     #$40
-        bne     cputdirect
-
-
-
-; Set cursor position, calculate RAM pointers
-
-plot:   ldy     CURS_Y
-        lda     ScrLo,y
-        sta     SCREEN_PTR
-        lda     ScrHi,y
-        ldy     SCR_LINELEN
-        cpy     #40+1
-        bcc     @L1
-        asl     SCREEN_PTR              ; 80 column mode
-        rol     a
-@L1:    ora     #$80                    ; Screen at $8000
-        sta     SCREEN_PTR+1
-        rts
-
-
-; Write one character to the screen without doing anything else, return X
-; position in Y
-
-putchar:
-        ora     RVS             ; Set revers bit
-        ldy     CURS_X
-        sta     (SCREEN_PTR),y  ; Set char
-        rts
-
-; Screen address tables - offset to real screen
-
-.rodata
-
-ScrLo:  .byte   $00, $28, $50, $78, $A0, $C8, $F0, $18
-        .byte   $40, $68, $90, $B8, $E0, $08, $30, $58
-        .byte   $80, $A8, $D0, $F8, $20, $48, $70, $98
-        .byte   $C0
-
-ScrHi:  .byte   $00, $00, $00, $00, $00, $00, $00, $01
-        .byte   $01, $01, $01, $01, $01, $02, $02, $02
-        .byte   $02, $02, $02, $02, $03, $03, $03, $03
-        .byte   $03
-
-
diff --git a/libsrc/pet/crt0.s b/libsrc/pet/crt0.s
deleted file mode 100644 (file)
index 66aed03..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-;
-; Startup code for cc65 (PET version)
-;
-
-        .export         _exit
-        .export         __STARTUP__ : absolute = 1      ; Mark as startup
-        .import         initlib, donelib
-        .import         zerobss, push0
-        .import         callmain
-        .import         CLRCH, BSOUT
-        .importzp       ST
-
-        .include        "zeropage.inc"
-        .include        "pet.inc"
-        .include        "../cbm/cbm.inc"
-
-; ------------------------------------------------------------------------
-; Startup code
-
-.segment        "STARTUP"
-
-Start:
-
-; Save the zero-page locations that we need.
-
-        ldx     #zpspace-1
-L1:     lda     sp,x
-        sta     zpsave,x
-        dex
-        bpl     L1
-
-; Switch to the second charset. The routine that is called by BSOUT to switch the
-; character set will use FNLEN as temporary storage -- YUCK! Since the
-; initmainargs routine, which parses the command line for arguments, needs that
-; information, we need to save and restore it here.
-; Thanks to Stefan Haubenthal for this information!
-
-        lda     FNLEN
-        pha                     ; Save FNLEN
-        lda     #14
-;       sta     $E84C           ; See PET FAQ
-        jsr     BSOUT
-        pla
-        sta     FNLEN           ; Restore FNLEN
-
-; Clear the BSS data.
-
-        jsr     zerobss
-
-; Save some system stuff; and, set up the stack.
-
-        tsx
-        stx     spsave          ; Save the system stack ptr
-
-        lda     MEMSIZE
-        sta     sp
-        lda     MEMSIZE+1
-        sta     sp+1            ; Set argument stack ptr
-
-; Call the module constructors.
-
-        jsr     initlib
-
-; Push the command-line arguments; and, call main().
-
-        jsr     callmain
-
-; Call the module destructors. This is also the exit() entry.
-
-_exit:  pha                     ; Save the return code on stack
-        jsr     donelib
-
-; Copy back the zero-page stuff.
-
-        ldx     #zpspace-1
-L2:     lda     zpsave,x
-        sta     sp,x
-        dex
-        bpl     L2
-
-; Store the program return code into BASIC's status variable.
-
-        pla
-        sta     ST
-
-; Restore the stack pointer.
-
-        ldx     spsave
-        txs                     ; Restore stack pointer
-
-; Back to BASIC.
-
-        rts
-
-; ------------------------------------------------------------------------
-
-.segment        "ZPSAVE"
-
-zpsave: .res    zpspace
-
-; ------------------------------------------------------------------------
-
-.bss
-
-spsave: .res    1
-mmusave:.res    1
diff --git a/libsrc/pet/devnum.s b/libsrc/pet/devnum.s
deleted file mode 100644 (file)
index cecc5dd..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-;
-; Oliver Schmidt, 2010-02-14
-;
-
-        .include        "pet.inc"
-
-        .exportzp       devnum := DEVNUM
diff --git a/libsrc/pet/get_tv.s b/libsrc/pet/get_tv.s
deleted file mode 100644 (file)
index eee3fe2..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 2004-10-26
-;
-; unsigned char get_tv (void);
-; /* Return the video mode the machine is using */
-;
-
-        .include        "pet.inc"
-        .include        "get_tv.inc"
-
-;--------------------------------------------------------------------------
-; _get_tv
-
-.proc   _get_tv
-
-        lda     #TV::OTHER
-        ldx     #0
-        rts
-
-.endproc
diff --git a/libsrc/pet/irq.s b/libsrc/pet/irq.s
deleted file mode 100644 (file)
index ddaf43c..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-;
-; IRQ handling (PET version)
-;
-
-        .export         initirq, doneirq
-        .import         callirq
-
-        .include        "pet.inc"
-
-; ------------------------------------------------------------------------
-
-.segment        "INIT"
-
-initirq:
-        lda     IRQVec
-        ldx     IRQVec+1
-        sta     IRQInd+1
-        stx     IRQInd+2
-        lda     #<IRQStub
-        ldx     #>IRQStub
-        jmp     setvec
-
-; ------------------------------------------------------------------------
-
-.code
-
-doneirq:
-        lda     IRQInd+1
-        ldx     IRQInd+2
-setvec: sei
-        sta     IRQVec
-        stx     IRQVec+1
-        cli
-        rts
-
-; ------------------------------------------------------------------------
-
-.segment        "LOWCODE"
-
-IRQStub:
-        cld                             ; Just to be sure
-        jsr     callirq                 ; Call the functions
-        jmp     IRQInd                  ; Jump to the saved IRQ vector
-
-; ------------------------------------------------------------------------
-
-.data
-
-IRQInd: jmp     $0000
diff --git a/libsrc/pet/joy/pet-ptvjoy.s b/libsrc/pet/joy/pet-ptvjoy.s
deleted file mode 100644 (file)
index 229055f..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-;
-; PTV-2 Player joystick driver for the PET
-;
-; Stefan Haubenthal, 2005-05-25
-; Groepaz/Hitmen, 2002-12-23
-; obviously based on Ullrichs driver :)
-;
-
-        .include "zeropage.inc"
-
-        .include "joy-kernel.inc"
-        .include "joy-error.inc"
-
-        .macpack module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _pet_ptvjoy_joy
-
-; Driver signature
-
-        .byte   $6A, $6F, $79   ; "joy"
-        .byte   JOY_API_VERSION ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
-; Jump table.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READ
-        .addr   0                       ; IRQ entry unused
-
-; ------------------------------------------------------------------------
-; Constants
-
-JOY_COUNT       = 2                     ; Number of joysticks we support
-
-VIA_PRA         := $E841                ; Port register A
-VIA_DDRA        := $E843                ; Data direction register A
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #<JOY_ERR_OK
-        ldx     #>JOY_ERR_OK
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:
-        lda     #<JOY_COUNT
-        ldx     #>JOY_COUNT
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
-
-READ:   lda     #%10000000      ; via port A Data-Direction
-        sta     VIA_DDRA        ; bit 7: out    bit 6-0: in
-
-        tax                     ; Joystick number into X
-        bne     joy2
-
-; Read joystick 1
-
-joy1:   lda     #$80            ; via port A read/write
-        sta     VIA_PRA         ; (output one at PA7)
-
-        lda     VIA_PRA         ; via port A read/write
-        and     #$1f            ; get bit 4-0 (PA4-PA0)
-        eor     #$1f
-        rts
-
-; Read joystick 2
-
-joy2:   lda     #$00            ; via port A read/write
-        sta     VIA_PRA         ; (output zero at PA7)
-
-        lda     VIA_PRA         ; via port A read/write
-        and     #$0f            ; get bit 3-0 (PA3-PA0)
-        sta     tmp1            ; joy 4 directions
-
-        lda     VIA_PRA         ; via port A read/write
-        and     #%00100000      ; get bit 5 (PA5)
-        lsr
-        ora     tmp1
-        eor     #$1f
-
-        ldx     #0
-        rts
diff --git a/libsrc/pet/joy/pet-stdjoy.s b/libsrc/pet/joy/pet-stdjoy.s
deleted file mode 100644 (file)
index 5847c2b..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-;
-; Standard PET userport joystick driver for the PET
-;
-; Marco van den Heuvel, 2010-01-23
-;
-
-        .include        "zeropage.inc"
-
-        .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-        .include        "pet.inc"
-
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _pet_stdjoy_joy
-
-; Driver signature
-
-        .byte   $6A, $6F, $79           ; "joy"
-        .byte   JOY_API_VERSION         ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte   $01             ; JOY_UP
-        .byte   $02             ; JOY_DOWN
-        .byte   $04             ; JOY_LEFT
-        .byte   $08             ; JOY_RIGHT
-        .byte   $10             ; JOY_FIRE
-        .byte   $00             ; JOY_FIRE2 unavailable
-        .byte   $00             ; Future expansion
-        .byte   $00             ; Future expansion
-
-; Jump table.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READ
-        .addr   0               ; IRQ entry unused
-
-; ------------------------------------------------------------------------
-; Constants
-
-JOY_COUNT       = 2             ; Number of joysticks we support
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #<JOY_ERR_OK
-        ldx     #>JOY_ERR_OK
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:
-        lda     #<JOY_COUNT
-        ldx     #>JOY_COUNT
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
-
-READ:
-        tax                     ; Joystick number into X
-        bne     joy2
-
-; Read joystick 1
-
-joy1:
-        lda     #0
-        sta     VIA_DDRA
-        lda     VIA_PRA
-        and     #$0f
-        cmp     #$0c
-        bne     @notc1
-        lda     #$0f
-        bne     @end1
-@notc1:
-        ora     #$10
-@end1:
-        eor     #$1f
-        rts
-
-; Read joystick 2
-
-joy2:
-        lda     #0
-        sta     VIA_DDRA
-        lda     VIA_PRA
-        lsr
-        lsr
-        lsr
-        lsr
-        cmp     #$0c
-        bne     @notc2
-        lda     #$0f
-        bne     @end2
-@notc2:
-        ora     #$10
-@end2:
-        eor     #$1f
-        ldx     #0
-        rts
diff --git a/libsrc/pet/joy_stat_stddrv.s b/libsrc/pet/joy_stat_stddrv.s
deleted file mode 100644 (file)
index 840c66f..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Address of the static standard joystick driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void joy_static_stddrv[];
-;
-
-        .export _joy_static_stddrv
-        .import _pet_stdjoy_joy
-
-.rodata
-
-_joy_static_stddrv := _pet_stdjoy_joy
diff --git a/libsrc/pet/joy_stddrv.s b/libsrc/pet/joy_stddrv.s
deleted file mode 100644 (file)
index 21fa539..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Name of the standard joystick driver
-;
-; Ullrich von Bassewitz, 2002-12-21
-;
-; const char joy_stddrv[];
-;
-
-        .export _joy_stddrv
-
-.rodata
-
-_joy_stddrv:    .asciiz "pet-stdjoy.joy"
-
diff --git a/libsrc/pet/kbhit.s b/libsrc/pet/kbhit.s
deleted file mode 100644 (file)
index 2a011c6..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.11.1998
-;
-; unsigned char kbhit (void);
-;
-
-        .export         _kbhit
-
-        .include        "pet.inc"
-
-
-.proc   _kbhit
-
-        ldx     #0              ; High byte of return is always zero
-        lda     KEY_COUNT       ; Get number of characters
-        beq     L9
-        lda     #1
-L9:     rts
-
-.endproc
-
-
diff --git a/libsrc/pet/kbsout.s b/libsrc/pet/kbsout.s
deleted file mode 100644 (file)
index 1e89123..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 19.11.2002
-;
-; BSOUT replacement function for the PETs
-;
-
-        .export         BSOUT
-        .import         checkst
-
-
-.proc   BSOUT
-
-        jsr     $FFD2           ; Call kernal function
-        jmp     checkst         ; Check status, return carry on error
-
-.endproc
-
-
-                     
diff --git a/libsrc/pet/kchkin.s b/libsrc/pet/kchkin.s
deleted file mode 100644 (file)
index f8b44cf..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 19.11.2002
-;
-; CHKIN replacement function for the PETs
-;
-
-        .export         CHKIN
-        .import         checkst
-
-
-.proc   CHKIN
-
-        jsr     $FFC6           ; Call kernal function
-        jmp     checkst         ; Check status, return carry on error
-
-.endproc
-
-
diff --git a/libsrc/pet/kckout.s b/libsrc/pet/kckout.s
deleted file mode 100644 (file)
index 8c5f4d4..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 19.11.2002
-;
-; CKOUT replacement function for the PETs
-;
-
-        .export         CKOUT
-        .import         checkst
-
-
-.proc   CKOUT
-
-        jsr     $FFC9           ; Call kernal function
-        jmp     checkst         ; Check status, return carry on error
-
-.endproc
-
-
-                     
diff --git a/libsrc/pet/kclose.s b/libsrc/pet/kclose.s
deleted file mode 100644 (file)
index 1da0340..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 19.11.2002
-;
-; CLOSE replacement function for the PETs
-;
-
-        .export         CLOSE
-
-        .include        "pet.inc"
-
-
-.proc   CLOSE
-                     
-        ldx     PET_DETECT
-        cpx     #PET_4000
-        bne     @L1
-        jmp     $F2E2           ; BASIC 4
-@L1:    jmp     $F2AE           ; BASIC 2&3
-
-.endproc
-
-
diff --git a/libsrc/pet/kernal.s b/libsrc/pet/kernal.s
deleted file mode 100644 (file)
index 1a9dd6f..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-;
-; Ullrich von Bassewitz, 19.11.2002
-;
-; PET kernal functions
-;
-
-        .export         CLRCH
-        .export         BASIN
-        .export         STOP
-        .export         GETIN
-        .export         CLALL
-        .export         UDTIM
-
-
-
-
-
-
-;-----------------------------------------------------------------------------
-; Functions that are available in the kernal jump table
-
-CLRCH           = $FFCC
-BASIN           = $FFCF
-STOP            = $FFE1
-GETIN           = $FFE4
-CLALL           = $FFE7
-UDTIM           = $FFEA
-
diff --git a/libsrc/pet/kopen.s b/libsrc/pet/kopen.s
deleted file mode 100644 (file)
index c6b2e8f..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; Ullrich von Bassewitz, 19.11.2002
-;
-; OPEN replacement function for the PETs
-;
-
-        .export         OPEN
-        .import         checkst
-
-        .include        "pet.inc"
-
-
-.proc   OPEN
-
-        lda     PET_DETECT
-        cmp     #PET_4000
-        bne     @L1
-        jsr     $F563           ; BASIC 4
-        jmp     checkst
-
-@L1:    jsr     $F524           ; BASIC 2&3
-        jmp     checkst
-
-.endproc
-
-
diff --git a/libsrc/pet/kplot.s b/libsrc/pet/kplot.s
deleted file mode 100644 (file)
index 5eb9907..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-12-12
-;
-; PLOT replacement function for the PETs
-;
-
-        .export         PLOT
-        .import         plot            ; from cputc.s
-
-        .include        "pet.inc"
-
-
-.proc   PLOT
-
-        bcs     @L1                     ; Fetch values if carry set
-        sty     CURS_X
-        stx     CURS_Y
-        jsr     plot
-@L1:    ldy     CURS_X
-        ldx     CURS_Y
-        rts
-
-.endproc
-
-
diff --git a/libsrc/pet/krdtim.s b/libsrc/pet/krdtim.s
deleted file mode 100644 (file)
index 355cce3..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 19.11.2002
-;
-; RDTIM replacement function for the PETs
-;
-
-        .export         RDTIM
-        
-        .include        "pet.inc"
-
-
-.proc   RDTIM
-
-        sei
-        lda     TIME+2
-        ldx     TIME+1
-        ldy     TIME
-        cli
-        rts
-
-.endproc
-
-
diff --git a/libsrc/pet/kreadst.s b/libsrc/pet/kreadst.s
deleted file mode 100644 (file)
index 38f6bfb..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 19.11.2002
-;
-; READST replacement function for the PETs
-;
-
-        .export         READST
-        .importzp       ST
-
-
-.proc   READST
-
-        lda     ST
-        rts
-
-.endproc
-
-
diff --git a/libsrc/pet/ksetlfs.s b/libsrc/pet/ksetlfs.s
deleted file mode 100644 (file)
index 6e9065a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 19.11.2002
-;
-; SETLFS replacement function for the PETs
-;
-
-        .export         SETLFS
-
-        .include        "pet.inc"
-
-
-.proc   SETLFS
-
-        sta     LFN             ; LFN
-        stx     DEVNUM          ; Device address
-        sty     SECADR          ; Secondary address
-        rts
-                      
-.endproc
-
-
diff --git a/libsrc/pet/ksetnam.s b/libsrc/pet/ksetnam.s
deleted file mode 100644 (file)
index 0bf6411..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 19.11.2002
-;
-; SETNAM replacement function for the PETs
-;
-
-        .export         SETNAM
-
-        .include        "pet.inc"
-
-
-.proc   SETNAM
-        
-        sta     FNLEN
-        stx     FNADR
-        sty     FNADR+1
-        rts
-
-.endproc
-
-
diff --git a/libsrc/pet/libref.s b/libsrc/pet/libref.s
deleted file mode 100644 (file)
index e4afa7e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-;
-; Oliver Schmidt, 2013-05-31
-;
-
-        .export         joy_libref
-        .import         _exit
-
-joy_libref      := _exit
diff --git a/libsrc/pet/mainargs.s b/libsrc/pet/mainargs.s
deleted file mode 100644 (file)
index 0d5b189..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-03-07
-; Stefan Haubenthal, 2008-08-11
-;
-; Setup arguments for main
-;
-
-        .constructor    initmainargs, 24
-        .import         __argc, __argv
-
-        .include        "pet.inc"
-
-MAXARGS  = 10                   ; Maximum number of arguments allowed
-REM      = $8f                  ; BASIC token-code
-NAME_LEN = 16                   ; maximum length of command-name
-
-
-;---------------------------------------------------------------------------
-; Get possible command-line arguments. Goes into the special INIT segment,
-; which may be reused after the startup code is run
-
-.segment        "INIT"
-
-.proc   initmainargs
-
-; Assume that the program was loaded, a moment ago, by the traditional LOAD
-; statement.  Save the "most-recent filename" as argument #0.
-; Because the buffer, that we're copying into, was zeroed out,
-; we don't need to add a NUL character.
-;
-        ldy     FNLEN
-        cpy     #NAME_LEN + 1
-        bcc     L1
-        ldy     #NAME_LEN - 1   ; limit the length
-L0:     lda     (FNADR),y
-        sta     name,y
-L1:     dey
-        bpl     L0
-        inc     __argc          ; argc always is equal to, at least, 1
-
-; Find the "rem" token.
-;
-        ldx     #0
-L2:     lda     BASIC_BUF,x
-        beq     done            ; no "rem," no args.
-        inx
-        cmp     #REM
-        bne     L2
-        ldy     #1 * 2
-
-; Find the next argument
-
-next:   lda     BASIC_BUF,x
-        beq     done            ; End of line reached
-        inx
-        cmp     #' '            ; Skip leading spaces
-        beq     next            ;
-
-; Found start of next argument. We've incremented the pointer in X already, so
-; it points to the second character of the argument. This is useful since we
-; will check now for a quoted argument, in which case we will have to skip this
-; first character.
-
-found:  cmp     #'"'            ; Is the argument quoted?
-        beq     setterm         ; Jump if so
-        dex                     ; Reset pointer to first argument character
-        lda     #' '            ; A space ends the argument
-setterm:sta     term            ; Set end of argument marker
-
-; Now store a pointer to the argument into the next slot. Since the BASIC
-; input buffer is located at the start of a RAM page, no calculations are
-; necessary.
-
-        txa                     ; Get low byte
-        sta     argv,y          ; argv[y]= &arg
-        iny
-        lda     #>BASIC_BUF
-        sta     argv,y
-        iny
-        inc     __argc          ; Found another arg
-
-; Search for the end of the argument
-
-argloop:lda     BASIC_BUF,x
-        beq     done
-        inx
-        cmp     term
-        bne     argloop
-
-; We've found the end of the argument. X points one character behind it, and
-; A contains the terminating character. To make the argument a valid C string,
-; replace the terminating character by a zero.
-
-        lda     #0
-        sta     BASIC_BUF-1,x
-
-; Check if the maximum number of command line arguments is reached. If not,
-; parse the next one.
-
-        lda     __argc          ; Get low byte of argument count
-        cmp     #MAXARGS        ; Maximum number of arguments reached?
-        bcc     next            ; Parse next one if not
-
-; (The last vector in argv[] already is NULL.)
-
-done:   lda     #<argv
-        ldx     #>argv
-        sta     __argv
-        stx     __argv + 1
-        rts
-
-.endproc
-
-; These arrays are zeroed before initmainargs is called.
-; char  name[16+1];
-; char* argv[MAXARGS+1]={name};
-;
-.bss
-term:   .res    1
-name:   .res    NAME_LEN + 1
-
-.data
-argv:   .addr   name
-        .res    MAXARGS * 2
diff --git a/libsrc/pet/randomize.s b/libsrc/pet/randomize.s
deleted file mode 100644 (file)
index 2c0fe72..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; 2002-11-05, Ullrich von Bassewitz
-; 2015-09-11, Greg King
-;
-; void _randomize (void);
-; /* Initialize the random number generator */
-;
-
-        .export         __randomize
-        .import         _srand
-
-        .include        "pet.inc"
-
-__randomize:              
-        ldx     TIME+2
-        lda     TIME+1          ; Use 60HZ clock
-        jmp     _srand          ; Initialize generator
-
diff --git a/libsrc/pet/revers.s b/libsrc/pet/revers.s
deleted file mode 100644 (file)
index 49982d2..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; unsigned char revers (unsigned char onoff);
-;
-
-        .export         _revers
-
-        .include        "pet.inc"
-
-.proc   _revers
-
-        ldx     #$00            ; Assume revers off
-        tay                     ; Test onoff
-        beq     L1              ; Jump if off
-        ldx     #$80            ; Load on value
-        ldy     #$00            ; Assume old value is zero
-L1:     lda     RVS             ; Load old value
-        stx     RVS             ; Set new value
-        beq     L2              ; Jump if old value zero
-        iny                     ; Make old value = 1
-L2:     ldx     #$00            ; Load high byte of result
-        tya                     ; Load low byte, set CC
-        rts
-
-.endproc
-
diff --git a/libsrc/pet/status.s b/libsrc/pet/status.s
deleted file mode 100644 (file)
index 2e2e858..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-;
-; Oliver Schmidt, 2012-09-30
-;
-
-        .exportzp       ST := $96       ; IEC status byte
diff --git a/libsrc/pet/sysuname.s b/libsrc/pet/sysuname.s
deleted file mode 100644 (file)
index 59174d8..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; unsigned char __fastcall__ _sysuname (struct utsname* buf);
-;
-
-        .export         __sysuname, utsdata
-
-        .import         utscopy
-
-        __sysuname = utscopy
-
-;--------------------------------------------------------------------------
-; Data. We define a fixed utsname struct here and just copy it.
-
-.rodata
-
-utsdata:
-        ; sysname
-        .asciiz         "cc65"
-
-        ; nodename
-        .asciiz         ""
-
-        ; release
-        .byte           ((.VERSION >> 8) & $0F) + '0'
-        .byte           '.'
-        .byte           ((.VERSION >> 4) & $0F) + '0'
-        .byte           $00
-
-        ; version
-        .byte           (.VERSION & $0F) + '0'
-        .byte           $00
-
-        ; machine
-        .asciiz         "Commodore PET"
-
-
-
diff --git a/libsrc/plus4/_scrsize.s b/libsrc/plus4/_scrsize.s
deleted file mode 100644 (file)
index 4d3bae0..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; Screen size variables
-;
-
-        .export         screensize
-
-; We will return the values directly instead of banking in the ROM and calling
-; SCREEN which is a lot more overhead in code size and CPU cycles.
-
-.proc   screensize
-
-        ldx     #40
-        ldy     #25
-        rts
-
-.endproc
-
-
-
diff --git a/libsrc/plus4/break.s b/libsrc/plus4/break.s
deleted file mode 100644 (file)
index 248a558..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-;
-; Ullrich von Bassewitz, 27.09.1998
-;
-; void set_brk (unsigned Addr);
-; void reset_brk (void);
-;
-
-        .export         _set_brk, _reset_brk
-        .export         _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
-        .import         brk_jmp
-
-        .include        "plus4.inc"
-
-
-.bss
-_brk_a:         .res    1
-_brk_x:         .res    1
-_brk_y:         .res    1
-_brk_sr:        .res    1
-_brk_pc:        .res    2
-
-oldvec:         .res    2               ; Old vector
-
-
-.data
-uservec:        jmp     $FFFF           ; Patched at runtime
-
-
-.code
-
-; Set the break vector
-.proc   _set_brk
-
-        sta     uservec+1
-        stx     uservec+2       ; Set the user vector
-
-        lda     #<brk_handler   ; Set the break vector to our routine
-        sta     brk_jmp+1
-        lda     #>brk_handler
-        sta     brk_jmp+2
-        rts
-
-.endproc
-
-
-; Reset the break vector
-.proc   _reset_brk
-
-        lda     #$00
-        sta     brk_jmp+1
-        sta     brk_jmp+2       ; Reset the vector
-        rts
-
-.endproc
-
-
-
-; Break handler, called if a break occurs. 
-
-.proc   brk_handler
-
-        pla
-        sta     _brk_y
-        pla
-        sta     _brk_x
-        pla
-        sta     _brk_a
-        pla
-        and     #$EF            ; Clear break bit
-        sta     _brk_sr
-        pla                     ; PC low
-        sec
-        sbc     #2              ; Point to start of brk
-        sta     _brk_pc
-        pla                     ; PC high
-        sbc     #0
-        sta     _brk_pc+1
-
-        jsr     uservec         ; Call the user's routine
-
-        lda     _brk_pc+1
-        pha
-        lda     _brk_pc
-        pha
-        lda     _brk_sr
-        pha
-        ldx     _brk_x
-        ldy     _brk_y
-        lda     _brk_a
-        rti                     ; Jump back...
-
-.endproc
-
-
diff --git a/libsrc/plus4/cgetc.s b/libsrc/plus4/cgetc.s
deleted file mode 100644 (file)
index 7ff5681..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; char cgetc (void);
-;
-
-        .export         _cgetc
-        .import         cursor
-
-        .include        "plus4.inc"
-
-; --------------------------------------------------------------------------
-
-.segment        "LOWCODE"       ; Accesses the ROM - must go into low mem
-
-_cgetc: lda     KEY_COUNT       ; Get number of characters
-        ora     FKEY_COUNT      ; Or with number of function key chars
-        bne     L2              ; Jump if there are already chars waiting
-
-; Switch on the cursor if needed
-
-        ldy     CURS_X
-        lda     (CRAM_PTR),y    ; Get current char
-        pha                     ; And save it
-        lda     CHARCOLOR
-        sta     (CRAM_PTR),y
-
-        lda     cursor
-        beq     L1              ; Jump if no cursor
-        tya
-        clc
-        adc     SCREEN_PTR
-        sta     TED_CURSLO
-        lda     SCREEN_PTR+1
-        adc     #$00
-        sbc     #$0B            ; + carry = $C00 (screen address)
-        sta     TED_CURSHI
-
-L1:     lda     KEY_COUNT
-        ora     FKEY_COUNT
-        beq     L1
-        pla
-        sta     (CRAM_PTR),y
-        lda     #$ff
-        sta     TED_CURSLO      ; Cursor off
-        sta     TED_CURSHI
-
-L2:     sta     ENABLE_ROM      ; Bank in the ROM
-        jsr     KBDREAD         ; Read char and return in A (ROM routine)
-        sta     ENABLE_RAM      ; Reenable the RAM
-        ldx     #0
-        rts
-
-; --------------------------------------------------------------------------
-; Make the function keys return function key codes instead of the current
-; strings so the program will see and may handle them.
-; Undo this change when the program ends
-
-        .constructor    initkbd
-        .destructor     donekbd
-
-.segment        "INIT"          ; Special init code segment may get overwritten
-
-.proc   initkbd
-
-        ldy     #15
-@L1:    lda     fnkeys,y
-        sta     FKEY_SPACE,y
-        dey
-        bpl     @L1
-        rts
-
-.endproc
-
-
-.segment        "LOWCODE"       ; Accesses the ROM - must go into low mem
-
-.proc   donekbd
-
-        ldx     #$39            ; Copy the original function keys
-        sta     ENABLE_ROM      ; Bank in the ROM
-@L1:    lda     FKEY_ORIG,x
-        sta     FKEY_SPACE,x
-        dex
-        bpl     @L1
-        sta     ENABLE_RAM      ; Bank out the ROM
-        rts
-
-.endproc
-
-
-; Function key table, readonly
-
-.rodata
-fnkeys: .byte   $01, $01, $01, $01, $01, $01, $01, $01
-        .byte   133, 137, 134, 138, 135, 139, 136, 140
-
diff --git a/libsrc/plus4/clrscr.s b/libsrc/plus4/clrscr.s
deleted file mode 100644 (file)
index 720a5e6..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; void clrscr (void);
-;
-
-        .export         _clrscr
-
-        .include        "plus4.inc"
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   _clrscr
-        sta     ENABLE_ROM              ; Enable the ROM
-        jsr     CLRSCR                  ; Call the ROM routine
-        sta     ENABLE_RAM              ; Switch back to RAM
-        rts                             ; Return to caller
-.endproc
-
-
-
-
-
-
diff --git a/libsrc/plus4/color.s b/libsrc/plus4/color.s
deleted file mode 100644 (file)
index 2f3046e..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; unsigned char __fastcall__ textcolor (unsigned char color);
-; unsigned char __fastcall__ bgcolor (unsigned char color);
-; unsigned char __fastcall__ bordercolor (unsigned char color);
-;
-
-        .export         _textcolor, _bgcolor, _bordercolor
-
-        .include        "plus4.inc"
-
-_textcolor:
-        ldx     CHARCOLOR       ; get old value
-        sta     CHARCOLOR       ; set new value
-        txa
-        rts
-
-
-_bgcolor:
-        ldx     TED_BGCOLOR     ; get old value
-        sta     TED_BGCOLOR     ; set new value
-        txa
-        rts
-
-
-_bordercolor:
-        ldx     TED_BORDERCOLOR ; get old value
-        sta     TED_BORDERCOLOR ; set new value
-        txa
-        rts
-
-
diff --git a/libsrc/plus4/conio.s b/libsrc/plus4/conio.s
deleted file mode 100644 (file)
index feca30c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; Low level stuff for screen output/console input
-;
-
-        .exportzp       CURS_X, CURS_Y
-
-        .include        "plus4.inc"
-
diff --git a/libsrc/plus4/cputc.s b/libsrc/plus4/cputc.s
deleted file mode 100644 (file)
index a83a9c6..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; void cputcxy (unsigned char x, unsigned char y, char c);
-; void cputc (char c);
-;
-
-        .export         _cputcxy, _cputc, cputdirect, putchar
-        .export         newline, plot
-        .import         popa, _gotoxy
-        .import         PLOT
-
-        .include        "plus4.inc"
-
-
-_cputcxy:
-        pha                     ; Save C
-        jsr     popa            ; Get Y
-        jsr     _gotoxy         ; Set cursor, drop x
-        pla                     ; Restore C
-
-; Plot a character - also used as internal function
-
-_cputc: cmp     #$0A            ; CR?
-        bne     L1
-        lda     #0
-        sta     CURS_X
-        beq     plot            ; Recalculate pointers
-
-L1:     cmp     #$0D            ; LF?
-        beq     newline         ; Recalculate pointers
-
-; Printable char of some sort
-
-        cmp     #' '
-        bcc     cputdirect      ; Other control char
-        tay
-        bmi     L10
-        cmp     #$60
-        bcc     L2
-        and     #$DF
-        bne     cputdirect      ; Branch always
-L2:     and     #$3F
-
-cputdirect:
-        jsr     putchar         ; Write the character to the screen
-
-; Advance cursor position
-
-advance:
-        iny
-        cpy     #XSIZE
-        bne     L3
-        jsr     newline         ; new line
-        ldy     #0              ; + cr
-L3:     sty     CURS_X
-        rts
-
-newline:
-        clc
-        lda     #XSIZE
-        adc     SCREEN_PTR
-        sta     SCREEN_PTR
-        bcc     L4
-        inc     SCREEN_PTR+1
-        clc
-L4:     lda     #XSIZE
-        adc     CRAM_PTR
-        sta     CRAM_PTR
-        bcc     L5
-        inc     CRAM_PTR+1
-L5:     inc     CURS_Y
-        rts
-
-; Handle character if high bit set
-
-L10:    and     #$7F
-        cmp     #$7E            ; PI?
-        bne     L11
-        lda     #$5E            ; Load screen code for PI
-        bne     cputdirect
-L11:    ora     #$40
-        bne     cputdirect
-
-
-
-; Set cursor position, calculate RAM pointers
-
-plot:   ldy     CURS_X
-        ldx     CURS_Y
-        clc
-        jmp     PLOT            ; Set the new cursor
-
-
-
-; Write one character to the screen without doing anything else, return X
-; position in Y
-
-putchar:
-        ora     RVS             ; Set revers bit
-        ldy     CURS_X
-        sta     (SCREEN_PTR),y  ; Set char
-        lda     CHARCOLOR
-        sta     (CRAM_PTR),y    ; Set color
-        rts
diff --git a/libsrc/plus4/crt0.s b/libsrc/plus4/crt0.s
deleted file mode 100644 (file)
index b732459..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-;
-; Startup code for cc65 (Plus/4 version)
-;
-
-        .export         _exit
-        .export         brk_jmp
-        .export         __STARTUP__ : absolute = 1      ; Mark as startup
-
-        .import         callirq_y, initlib, donelib
-        .import         callmain, zerobss
-        .import         __INTERRUPTOR_COUNT__
-        .import         __RAM_START__, __RAM_SIZE__     ; Linker generated
-        .import         __STACKSIZE__                   ; Linker generated
-        .importzp       ST
-
-        .include        "zeropage.inc"
-        .include        "plus4.inc"
-
-
-; ------------------------------------------------------------------------
-; Constants
-
-IRQInd          = $500  ; JMP $0000 - used as indirect IRQ vector
-
-; ------------------------------------------------------------------------
-; Startup code
-
-.segment        "STARTUP"
-
-Start:
-
-; Save the zero-page locations that we need.
-
-        sei                     ; No interrupts since we're banking out the ROM
-        sta     ENABLE_RAM
-        ldx     #zpspace-1
-L1:     lda     sp,x
-        sta     zpsave,x
-        dex
-        bpl     L1
-        sta     ENABLE_ROM
-        cli
-
-; Switch to the second charset.
-
-        lda     #14
-        jsr     $FFD2           ; BSOUT
-
-; Save some system stuff; and, set up the stack. The stack starts at the top
-; of the usable RAM.
-
-        tsx
-        stx     spsave          ; save system stk ptr
-
-        lda     #<(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
-        sta     sp
-        lda     #>(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
-        sta     sp+1
-
-; Set up the IRQ vector in the banked RAM; and, switch off the ROM.
-
-        ldx     #<IRQ
-        ldy     #>IRQ
-        sei                     ; No ints, handler not yet in place
-        sta     ENABLE_RAM
-        stx     $FFFE           ; Install interrupt handler
-        sty     $FFFF
-        cli                     ; Allow interrupts
-
-; Clear the BSS data.
-
-        jsr     zerobss
-
-; Initialize irqcount, which means that, from now on, custom linked-in IRQ
-; handlers will be called (via condes).
-
-        lda     #.lobyte(__INTERRUPTOR_COUNT__*2)
-        sta     irqcount
-
-; Call the module constructors.
-
-        jsr     initlib
-
-; Push the command-line arguments; and, call main().
-
-        jsr     callmain
-
-; Back from main() [this is also the exit() entry]. Run the module destructors.
-
-_exit:  pha                     ; Save the return code
-        jsr     donelib         ; Run module destructors
-
-; Disable the chained IRQ handlers.
-
-        lda     #0
-        sta     irqcount        ; Disable custom IRQ handlers
-
-; Copy back the zero-page stuff.
-
-        ldx     #zpspace-1
-L2:     lda     zpsave,x
-        sta     sp,x
-        dex
-        bpl     L2
-
-; Place the program return code into BASIC's status variable.
-
-        pla
-        sta     ST
-
-; Restore the stack pointer.
-
-        ldx     spsave
-        txs
-
-; Enable the ROM; and, return to BASIC.
-
-        sta     ENABLE_ROM
-        rts
-
-; ------------------------------------------------------------------------
-; IRQ handler. The handler in the ROM enables the Kernal, and jumps to
-; $CE00, where the ROM code checks for a BRK or IRQ, and branches via the
-; indirect vectors at $314/$316.
-; To make our stub as fast as possible, we skip the whole part of the ROM
-; handler, and jump to the indirect vectors directly. We do also call our
-; own interrupt handlers if we have any; so, they need not use $314.
-
-.segment        "LOWCODE"
-
-IRQ:    cld                     ; Just to be sure
-        pha
-        txa
-        pha
-        tya
-        pha
-        tsx                     ; Get the stack pointer
-        lda     $0104,x         ; Get the saved status register
-        and     #$10            ; Test for BRK bit
-        bne     dobreak
-
-; It's an IRQ; and, RAM is enabled. If we have handlers, call them. We will use
-; a flag here instead of loading __INTERRUPTOR_COUNT__ directly, since the
-; condes function is not reentrant. The irqcount flag will be set/reset from
-; the main code, to avoid races.
-
-        ldy     irqcount
-        beq     @L1
-        jsr     callirq_y       ; Call the IRQ functions
-
-; Since the ROM handler will end with an RTI, we have to fake an IRQ return
-; on the stack, so that we get control of the CPU after the ROM handler,
-; and can switch back to RAM.
-
-@L1:    lda     #>irq_ret       ; Push new return address
-        pha
-        lda     #<irq_ret
-        pha
-        php                     ; Push faked IRQ frame on stack
-        pha                     ; Push faked A register
-        pha                     ; Push faked X register
-        pha                     ; Push faked Y register
-        sta     ENABLE_ROM      ; Switch to ROM
-        jmp     (IRQVec)        ; Jump indirect to Kernal IRQ handler
-
-irq_ret:
-        sta     ENABLE_RAM      ; Switch back to RAM
-        pla
-        tay
-        pla
-        tax
-        pla
-        rti
-
-dobreak:
-        lda     brk_jmp+2       ; Check high byte of address
-        beq     nohandler
-        jmp     brk_jmp         ; Jump to the handler
-
-; No break handler installed, jump to ROM.
-
-nohandler:
-        sta     ENABLE_ROM
-        jmp     (BRKVec)        ; Jump indirect to the break vector
-
-; ------------------------------------------------------------------------
-; Data
-
-.data
-
-; BRK handling
-brk_jmp:        jmp     $0000
-
-spsave:         .res    1
-
-irqcount:       .byte   0
-
-.segment        "ZPSAVE"
-
-zpsave:         .res    zpspace
-
-
diff --git a/libsrc/plus4/devnum.s b/libsrc/plus4/devnum.s
deleted file mode 100644 (file)
index ed141d6..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-;
-; Oliver Schmidt, 2010-02-14
-;
-
-        .include        "plus4.inc"
-
-        .exportzp       devnum := DEVNUM
diff --git a/libsrc/plus4/get_tv.s b/libsrc/plus4/get_tv.s
deleted file mode 100644 (file)
index ca5ebb4..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-12-03
-;
-; unsigned char get_tv (void);
-; /* Return the video mode the machine is using */
-;
-
-        .include        "plus4.inc"
-        .include        "get_tv.inc"
-
-
-;--------------------------------------------------------------------------
-; _get_tv
-
-.proc   _get_tv
-
-        ldx     #TV::PAL        ; Assume PAL
-        bit     TED_MULTI1      ; Test bit 6
-        bvc     pal
-        dex                     ; NTSC
-pal:    txa
-        ldx     #0
-        rts
-
-.endproc
diff --git a/libsrc/plus4/irq.s b/libsrc/plus4/irq.s
deleted file mode 100644 (file)
index 082caf8..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-;
-; IRQ handling (Plus/4 version)
-;
-
-        .export         initirq, doneirq
-
-initirq:
-doneirq:
-        rts
diff --git a/libsrc/plus4/joy/plus4-stdjoy.s b/libsrc/plus4/joy/plus4-stdjoy.s
deleted file mode 100644 (file)
index 29316bf..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-;
-; Standard joystick driver for the Plus/4. May be used multiple times when linked
-; to the statically application.
-;
-; Ullrich von Bassewitz, 2002-12-21
-;
-
-        .include        "zeropage.inc"
-
-        .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-        .include        "plus4.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        .if .xmatch ("MODULE_LABEL", .string(MODULE_LABEL))
-        module_header   _plus4_stdjoy_joy
-        .else
-        module_header   MODULE_LABEL
-        .endif
-
-; Driver signature
-
-        .byte   $6A, $6F, $79           ; "joy"
-        .byte   JOY_API_VERSION         ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
-; Jump table.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READ
-        .addr   0                       ; IRQ entry unused
-
-; ------------------------------------------------------------------------
-; Constants
-
-JOY_COUNT       = 2             ; Number of joysticks we support
-
-
-; ------------------------------------------------------------------------
-; Data.
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #<JOY_ERR_OK
-        ldx     #>JOY_ERR_OK
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:
-        lda     #<JOY_COUNT
-        ldx     #>JOY_COUNT
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
-
-READ:   ldy     #$FA            ; Load index for joystick #1
-        tax                     ; Test joystick number
-        beq     @L1
-        ldy     #$FB            ; Load index for joystick #2
-@L1:    sei
-        sty     TED_KBD
-        lda     TED_KBD
-        cli
-        ldx     #$00            ; Clear high byte
-        and     #$1F
-        eor     #$1F
-        rts
-
diff --git a/libsrc/plus4/joy_stat_stddrv.s b/libsrc/plus4/joy_stat_stddrv.s
deleted file mode 100644 (file)
index 9401d41..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Address of the static standard joystick driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void joy_static_stddrv[];
-;
-
-        .export _joy_static_stddrv
-        .import _plus4_stdjoy_joy
-
-.rodata
-
-_joy_static_stddrv := _plus4_stdjoy_joy
diff --git a/libsrc/plus4/joy_stddrv.s b/libsrc/plus4/joy_stddrv.s
deleted file mode 100644 (file)
index b80a3d8..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Name of the standard joystick driver
-;
-; Ullrich von Bassewitz, 2002-12-21
-;
-; const char joy_stddrv[];
-;
-
-        .export _joy_stddrv
-
-.rodata
-
-_joy_stddrv:    .asciiz "plus4-stdjoy.joy"
-
diff --git a/libsrc/plus4/kacptr.s b/libsrc/plus4/kacptr.s
deleted file mode 100644 (file)
index 75a43c2..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; ACPTR replacement function
-;
-
-        .export         ACPTR
-
-        .include        "plus4.inc"
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   ACPTR
-        sta     ENABLE_ROM              ; Enable the ROM
-        jsr     $FFA5                   ; Call the ROM routine
-        sta     ENABLE_RAM              ; Switch back to RAM
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/kbasin.s b/libsrc/plus4/kbasin.s
deleted file mode 100644 (file)
index 5070438..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; BASIN replacement function
-;
-             
-        .export         BASIN
-
-        .include        "plus4.inc"
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   BASIN
-        sta     ENABLE_ROM              ; Enable the ROM
-        jsr     $FFCF                   ; Call the ROM routine
-        sta     ENABLE_RAM              ; Switch back to RAM
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/kbhit.s b/libsrc/plus4/kbhit.s
deleted file mode 100644 (file)
index 9484d2b..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; unsigned char kbhit (void);
-;
-
-        .export         _kbhit
-
-        .include        "plus4.inc"
-
-
-.proc   _kbhit
-
-        ldx     #0              ; High byte of return is always zero
-        lda     KEY_COUNT       ; Get number of characters
-        ora     FKEY_COUNT      ; Or with number of chars from function keys
-        beq     L9
-        lda     #1
-L9:     rts
-
-.endproc
-
-
-
diff --git a/libsrc/plus4/kbsout.s b/libsrc/plus4/kbsout.s
deleted file mode 100644 (file)
index a86a334..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; BSOUT replacement function
-;
-
-        .export         BSOUT
-
-        .include        "plus4.inc"
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   BSOUT
-        sta     ENABLE_ROM              ; Enable the ROM
-        jsr     $FFD2                   ; Call the ROM routine
-        sta     ENABLE_RAM              ; Switch back to RAM
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/kchkin.s b/libsrc/plus4/kchkin.s
deleted file mode 100644 (file)
index 139e512..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; CHKIN replacement function
-;
-
-        .export         CHKIN
-
-        .include        "plus4.inc"
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   CHKIN
-        sta     ENABLE_ROM              ; Enable the ROM
-        jsr     $FFC6                   ; Call the ROM routine
-        sta     ENABLE_RAM              ; Switch back to RAM
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/kciout.s b/libsrc/plus4/kciout.s
deleted file mode 100644 (file)
index 5f9f08b..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; CIOUT replacement function
-;
-
-        .export         CIOUT
-
-        .include        "plus4.inc"
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   CIOUT
-        sta     ENABLE_ROM              ; Enable the ROM
-        jsr     $FFA8                   ; Call the ROM routine
-        sta     ENABLE_RAM              ; Switch back to RAM
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/kckout.s b/libsrc/plus4/kckout.s
deleted file mode 100644 (file)
index a1d38f3..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; CKOUT replacement function
-;
-
-        .export         CKOUT
-
-        .include        "plus4.inc"
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   CKOUT
-        sta     ENABLE_ROM              ; Enable the ROM
-        jsr     $FFC9                   ; Call the ROM routine
-        sta     ENABLE_RAM              ; Switch back to RAM
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/kclall.s b/libsrc/plus4/kclall.s
deleted file mode 100644 (file)
index eb00661..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; CLALL replacement function
-;
-
-        .export         CLALL
-
-        .include        "plus4.inc"
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   CLALL
-        sta     ENABLE_ROM              ; Enable the ROM
-        jsr     $FFE7                   ; Call the ROM routine
-        sta     ENABLE_RAM              ; Switch back to RAM
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/kclose.s b/libsrc/plus4/kclose.s
deleted file mode 100644 (file)
index 8f8d07f..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; CLOSE replacement function
-;
-
-        .export         CLOSE
-
-        .include        "plus4.inc"
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   CLOSE
-        sta     ENABLE_ROM              ; Enable the ROM
-        clc                             ; Force C64 compatible behaviour
-        jsr     $FFC3                   ; Call the ROM routine
-        sta     ENABLE_RAM              ; Switch back to RAM
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/kclrch.s b/libsrc/plus4/kclrch.s
deleted file mode 100644 (file)
index b36c044..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; CLRCH replacement function
-;
-
-        .export         CLRCH
-
-        .include        "plus4.inc"
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   CLRCH
-        sta     ENABLE_ROM              ; Enable the ROM
-        jsr     $FFCC                   ; Call the ROM routine
-        sta     ENABLE_RAM              ; Switch back to RAM
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/kiobase.s b/libsrc/plus4/kiobase.s
deleted file mode 100644 (file)
index de00517..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; IOBASE replacement function
-;
-
-        .export         IOBASE
-
-        .include        "plus4.inc"
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   IOBASE
-        sta     ENABLE_ROM              ; Enable the ROM
-        jsr     $FFF3                   ; Call the ROM routine
-        sta     ENABLE_RAM              ; Switch back to RAM
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/klisten.s b/libsrc/plus4/klisten.s
deleted file mode 100644 (file)
index 06a4609..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; LISTEN replacement function
-;
-
-        .export         LISTEN
-
-        .include        "plus4.inc"
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   LISTEN
-        sta     ENABLE_ROM              ; Enable the ROM
-        jsr     $FFB1                   ; Call the ROM routine
-        sta     ENABLE_RAM              ; Switch back to RAM
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/kload.s b/libsrc/plus4/kload.s
deleted file mode 100644 (file)
index c2b62dd..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; LOAD replacement function
-;
-
-        .export         LOAD
-
-        .include        "plus4.inc"
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   LOAD
-        sta     ENABLE_ROM              ; Enable the ROM
-        jsr     $FFD5                   ; Call the ROM routine
-        sta     ENABLE_RAM              ; Switch back to RAM
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/kopen.s b/libsrc/plus4/kopen.s
deleted file mode 100644 (file)
index b7e4b1c..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; OPEN replacement function
-;
-
-        .export         OPEN
-
-        .include        "plus4.inc"
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   OPEN
-        sta     ENABLE_ROM              ; Enable the ROM
-        jsr     $FFC0                   ; Call the ROM routine
-        sta     ENABLE_RAM              ; Switch back to RAM
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/kplot.s b/libsrc/plus4/kplot.s
deleted file mode 100644 (file)
index 7035b05..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; PLOT replacement function
-;
-
-        .export         PLOT
-
-        .include        "plus4.inc"
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   PLOT
-        sta     ENABLE_ROM              ; Enable the ROM
-        jsr     $FFF0                   ; Call the ROM routine
-        sta     ENABLE_RAM              ; Switch back to RAM
-        rts                             ; Return to caller
-.endproc
-
-
-                    
diff --git a/libsrc/plus4/krdtim.s b/libsrc/plus4/krdtim.s
deleted file mode 100644 (file)
index 99fb74f..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; RDTIM replacement function
-;
-
-        .export         RDTIM
-
-        .include        "plus4.inc"
-
-; Read the clock from the zero page to avoid banking in the ROM
-
-.proc   RDTIM
-        sei                             ; No interrupts
-        lda     TIME+2
-        ldx     TIME+1
-        ldy     TIME                    ; Read the time
-        cli                             ; Allow interrupts
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/kreadst.s b/libsrc/plus4/kreadst.s
deleted file mode 100644 (file)
index 2571f80..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; READST replacement function
-;
-
-        .export         READST
-
-        .include        "plus4.inc"
-        .importzp       ST
-
-; Read the status byte from the zero page instead of banking in the ROM
-
-.proc   READST
-        lda     ST                      ; Load status
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/ksave.s b/libsrc/plus4/ksave.s
deleted file mode 100644 (file)
index 0e69182..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; SAVE replacement function
-;
-
-        .export         SAVE
-
-        .include        "plus4.inc"
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   SAVE
-        sta     ENABLE_ROM              ; Enable the ROM
-        jsr     $FFD8                   ; Call the ROM routine
-        sta     ENABLE_RAM              ; Switch back to RAM
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/ksetlfs.s b/libsrc/plus4/ksetlfs.s
deleted file mode 100644 (file)
index 6ad7f34..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; SETLFS replacement function
-;
-
-        .export         SETLFS
-
-        .include        "plus4.inc"
-
-; Write directly to the zero page to avoid banking in the ROM
-
-.proc   SETLFS
-        sta     LFN
-        stx     DEVNUM
-        sty     SECADR
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/ksetnam.s b/libsrc/plus4/ksetnam.s
deleted file mode 100644 (file)
index 43fbb0f..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; SETNAM replacement function
-;
-
-        .export         SETNAM
-
-        .include        "plus4.inc"
-
-; This function is special in that the name must reside in low memory,
-; otherwise it is not accessible by the ROM code.
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   SETNAM
-
-; Store the length of the name into the zero page
-
-        sta     FNAM_LEN
-
-; Check if we have to copy the name to low memory
-
-        cmp     #$00                    ; Length zero?
-        beq     @L3                     ; Yes: Copying not needed
-        cpy     #$00                    ; Is the name in low memory?
-        bpl     @L3                     ; Yes: Copying not needed
-
-; Store the length and the pointer to the name
-
-        stx     TMPPTR
-        sty     TMPPTR+1                ; Store pointer to name in TMPPTR
-
-; Copy the given name into FNBUF.
-
-        ldy     #$00
-@L2:    lda     (TMPPTR),y
-        sta     FNBUF,y
-        iny
-        cpy     FNAM_LEN
-        bne     @L2
-
-; Load the new parameters for the low memory buffer
-
-        ldx     #<FNBUF
-        ldy     #>FNBUF
-
-; Instead of banking in the ROM, store the values directly into the zeropage
-
-@L3:    stx     FNAM
-        sty     FNAM+1
-
-; Return to caller
-
-        rts
-
-.endproc
-
-
diff --git a/libsrc/plus4/ksettim.s b/libsrc/plus4/ksettim.s
deleted file mode 100644 (file)
index b3c5983..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; SETTIM replacement function
-;
-
-        .export         SETTIM
-
-        .include        "plus4.inc"
-
-; Set the clock by writing directly to zero page to avoid banking in the ROM
-
-.proc   SETTIM
-        sei                             ; No interrupts
-        sta     TIME+2
-        stx     TIME+1
-        sty     TIME                    ; Set the time
-        cli                             ; Allow interrupts
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/ktalk.s b/libsrc/plus4/ktalk.s
deleted file mode 100644 (file)
index bad693b..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; TALK replacement function
-;
-
-        .export         TALK
-
-        .include        "plus4.inc"
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   TALK
-        sta     ENABLE_ROM              ; Enable the ROM
-        jsr     $FFB4                   ; Call the ROM routine
-        sta     ENABLE_RAM              ; Switch back to RAM
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/kunlsn.s b/libsrc/plus4/kunlsn.s
deleted file mode 100644 (file)
index 486bb96..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; UNLSN replacement function
-;
-
-        .export         UNLSN
-
-        .include        "plus4.inc"
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   UNLSN
-        sta     ENABLE_ROM              ; Enable the ROM
-        jsr     $FFAE                   ; Call the ROM routine
-        sta     ENABLE_RAM              ; Switch back to RAM
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/kuntlk.s b/libsrc/plus4/kuntlk.s
deleted file mode 100644 (file)
index 52a5633..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.11.2002
-;
-; UNTLK replacement function
-;
-
-        .export         UNTLK
-
-        .include        "plus4.inc"
-
-.segment        "LOWCODE"               ; Must go into low memory
-
-.proc   UNTLK
-        sta     ENABLE_ROM              ; Enable the ROM
-        jsr     $FFAB                   ; Call the ROM routine
-        sta     ENABLE_RAM              ; Switch back to RAM
-        rts                             ; Return to caller
-.endproc
-
-
diff --git a/libsrc/plus4/libref.s b/libsrc/plus4/libref.s
deleted file mode 100644 (file)
index 0bda1e7..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-;
-; Oliver Schmidt, 2013-05-31
-;
-
-        .export         joy_libref, ser_libref
-        .import         _exit
-
-joy_libref      := _exit
-ser_libref      := _exit
diff --git a/libsrc/plus4/mainargs.s b/libsrc/plus4/mainargs.s
deleted file mode 100644 (file)
index 7df8402..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-; mainargs.s
-;
-; Ullrich von Bassewitz, 2003-03-07
-; Based on code from Stefan A. Haubenthal, <polluks@web.de>
-; 2003-05-18, Greg King
-; 2004-04-28, 2005-02-26, Ullrich von Bassewitz
-;
-; Scan a group of arguments that are in BASIC's input-buffer.
-; Build an array that points to the beginning of each argument.
-; Send, to main(), that array and the count of the arguments.
-;
-; Command-lines look like these lines:
-;
-; run
-; run : rem
-; run:rem arg1 " arg 2 is quoted "  arg3 "" arg5
-;
-; "run" and "rem" are entokenned; the args. are not.  Leading and trailing
-; spaces outside of quotes are ignored.
-;
-; TO-DO:
-; - The "file-name" might be a path-name; don't copy the directory-components.
-; - Add a control-character quoting mechanism.
-
-        .constructor    initmainargs, 24
-        .import         __argc, __argv
-
-        .include        "plus4.inc"
-                                                                            
-
-
-MAXARGS  = 10                   ; Maximum number of arguments allowed
-REM      = $8f                  ; BASIC token-code
-NAME_LEN = 16                   ; maximum length of command-name
-
-; Get possible command-line arguments. Goes into the special INIT segment,
-; which may be reused after the startup code is run
-
-.segment        "INIT"
-
-initmainargs:
-
-; Assume that the program was loaded, a moment ago, by the traditional LOAD
-; statement.  Save the "most-recent filename" as argument #0.
-; Because the buffer, that we're copying into, was zeroed out,
-; we don't need to add a NUL character.
-;
-        ldy     FNAM_LEN
-        cpy     #NAME_LEN + 1
-        bcc     L1
-        ldy     #NAME_LEN - 1   ; limit the length
-L0:     lda     (FNAM),y
-        sta     name,y
-L1:     dey
-        bpl     L0
-        inc     __argc          ; argc always is equal to, at least, 1
-
-; Find the "rem" token.
-;
-        ldx     #0
-L2:     lda     BASIC_BUF,x
-        beq     done            ; no "rem," no args.
-        inx
-        cmp     #REM
-        bne     L2
-        ldy     #1 * 2
-
-; Find the next argument
-
-next:   lda     BASIC_BUF,x
-        beq     done            ; End of line reached
-        inx
-        cmp     #' '            ; Skip leading spaces
-        beq     next            ;
-
-; Found start of next argument. We've incremented the pointer in X already, so
-; it points to the second character of the argument. This is useful since we
-; will check now for a quoted argument, in which case we will have to skip this
-; first character.
-
-found:  cmp     #'"'            ; Is the argument quoted?
-        beq     setterm         ; Jump if so
-        dex                     ; Reset pointer to first argument character
-        lda     #' '            ; A space ends the argument
-setterm:sta     term            ; Set end of argument marker
-
-; Now store a pointer to the argument into the next slot. Since the BASIC
-; input buffer is located at the start of a RAM page, no calculations are
-; necessary.
-
-        txa                     ; Get low byte
-        sta     argv,y          ; argv[y]= &arg
-        iny
-        lda     #>BASIC_BUF
-        sta     argv,y
-        iny
-        inc     __argc          ; Found another arg
-
-; Search for the end of the argument
-
-argloop:lda     BASIC_BUF,x
-        beq     done
-        inx
-        cmp     term
-        bne     argloop
-
-; We've found the end of the argument. X points one character behind it, and
-; A contains the terminating character. To make the argument a valid C string,
-; replace the terminating character by a zero.
-
-        lda     #0
-        sta     BASIC_BUF-1,x
-
-; Check if the maximum number of command line arguments is reached. If not,
-; parse the next one.
-
-        lda     __argc          ; Get low byte of argument count
-        cmp     #MAXARGS        ; Maximum number of arguments reached?
-        bcc     next            ; Parse next one if not
-
-; (The last vector in argv[] already is NULL.)
-
-done:   lda     #<argv
-        ldx     #>argv
-        sta     __argv
-        stx     __argv + 1
-        rts
-                      
-; --------------------------------------------------------------------------
-; These arrays are zeroed before initmainargs is called.
-; char  name[16+1];
-; char* argv[MAXARGS+1]={name};
-;
-.bss
-term:   .res    1
-name:   .res    NAME_LEN + 1
-
-.data
-argv:   .addr   name
-        .res    MAXARGS * 2
-
diff --git a/libsrc/plus4/randomize.s b/libsrc/plus4/randomize.s
deleted file mode 100644 (file)
index 2a7f6a4..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; 2002-11-05, Ullrich von Bassewitz
-; 2015-09-11, Greg King
-;
-; void _randomize (void);
-; /* Initialize the random number generator */
-;
-
-        .export         __randomize
-        .import         _srand
-
-        .include        "plus4.inc"
-
-__randomize:              
-        ldx     TED_VLINELO     ; Use TED rasterline as high byte
-        lda     TIME+2          ; Use 60HZ clock as low byte
-        jmp     _srand          ; Initialize generator
-
diff --git a/libsrc/plus4/revers.s b/libsrc/plus4/revers.s
deleted file mode 100644 (file)
index f1c0b4d..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; unsigned char revers (unsigned char onoff);
-;
-
-        .export         _revers
-
-        .include        "plus4.inc"
-
-.proc   _revers
-
-        ldx     #$00            ; Assume revers off
-        tay                     ; Test onoff
-        beq     L1              ; Jump if off
-        ldx     #$80            ; Load on value
-        ldy     #$00            ; Assume old value is zero
-L1:     lda     RVS             ; Load old value
-        stx     RVS             ; Set new value
-        beq     L2              ; Jump if old value zero
-        iny                     ; Make old value = 1
-L2:     ldx     #$00            ; Load high byte of result
-        tya                     ; Load low byte, set CC
-        rts
-
-.endproc
-
diff --git a/libsrc/plus4/ser/plus4-stdser.s b/libsrc/plus4/ser/plus4-stdser.s
deleted file mode 100644 (file)
index 47dd960..0000000
+++ /dev/null
@@ -1,409 +0,0 @@
-;
-; Serial driver for the builtin 6551 ACIA of the Plus/4.
-;
-; Ullrich von Bassewitz, 2003-12-13
-;
-; The driver is based on the cc65 rs232 module, which in turn is based on
-; Craig Bruce device driver for the Switftlink/Turbo-232.
-;
-; SwiftLink/Turbo-232 v0.90 device driver, by Craig Bruce, 14-Apr-1998.
-;
-; This software is Public Domain.  It is in Buddy assembler format.
-;
-; This device driver uses the SwiftLink RS-232 Serial Cartridge, available from
-; Creative Micro Designs, Inc, and also supports the extensions of the Turbo232
-; Serial Cartridge.  Both devices are based on the 6551 ACIA chip.  It also
-; supports the "hacked" SwiftLink with a 1.8432 MHz crystal.
-;
-; The code assumes that the kernal + I/O are in context.  On the C128, call
-; it from Bank 15.  On the C64, don't flip out the Kernal unless a suitable
-; NMI catcher is put into the RAM under then Kernal.  For the SuperCPU, the
-; interrupt handling assumes that the 65816 is in 6502-emulation mode.
-;
-
-        .include        "zeropage.inc"
-        .include        "ser-kernel.inc"
-        .include        "ser-error.inc"
-        .include        "plus4.inc"
-
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _plus4_stdser_ser
-
-; Driver signature
-
-        .byte   $73, $65, $72           ; "ser"
-        .byte   SER_API_VERSION         ; Serial API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Jump table
-
-        .word   INSTALL
-        .word   UNINSTALL
-        .word   OPEN
-        .word   CLOSE
-        .word   GET
-        .word   PUT
-        .word   STATUS
-        .word   IOCTL
-        .word   IRQ
-
-;----------------------------------------------------------------------------
-; I/O definitions
-
-ACIA            = $DE00
-ACIA_DATA       = ACIA+0        ; Data register
-ACIA_STATUS     = ACIA+1        ; Status register
-ACIA_CMD        = ACIA+2        ; Command register
-ACIA_CTRL       = ACIA+3        ; Control register
-
-;----------------------------------------------------------------------------
-;
-; Global variables
-;
-
-.bss
-RecvHead:       .res    1       ; Head of receive buffer
-RecvTail:       .res    1       ; Tail of receive buffer
-RecvFreeCnt:    .res    1       ; Number of bytes in receive buffer
-SendHead:       .res    1       ; Head of send buffer
-SendTail:       .res    1       ; Tail of send buffer
-SendFreeCnt:    .res    1       ; Number of bytes in send buffer
-
-Stopped:        .res    1       ; Flow-stopped flag
-RtsOff:         .res    1       ;
-
-; Send and receive buffers: 256 bytes each
-RecvBuf:        .res    256
-SendBuf:        .res    256
-
-.rodata
-
-; Tables used to translate RS232 params into register values
-
-BaudTable:                      ; bit7 = 1 means setting is invalid
-        .byte   $FF             ; SER_BAUD_45_5
-        .byte   $01             ; SER_BAUD_50
-        .byte   $02             ; SER_BAUD_75
-        .byte   $03             ; SER_BAUD_110
-        .byte   $04             ; SER_BAUD_134_5
-        .byte   $05             ; SER_BAUD_150
-        .byte   $06             ; SER_BAUD_300
-        .byte   $07             ; SER_BAUD_600
-        .byte   $08             ; SER_BAUD_1200
-        .byte   $09             ; SER_BAUD_1800
-        .byte   $0A             ; SER_BAUD_2400
-        .byte   $0B             ; SER_BAUD_3600
-        .byte   $0C             ; SER_BAUD_4800
-        .byte   $0D             ; SER_BAUD_7200
-        .byte   $0E             ; SER_BAUD_9600
-        .byte   $0F             ; SER_BAUD_19200
-        .byte   $FF             ; SER_BAUD_38400
-        .byte   $FF             ; SER_BAUD_57600
-        .byte   $FF             ; SER_BAUD_115200
-        .byte   $FF             ; SER_BAUD_230400
-
-BitTable:
-        .byte   $60             ; SER_BITS_5
-        .byte   $40             ; SER_BITS_6
-        .byte   $20             ; SER_BITS_7
-        .byte   $00             ; SER_BITS_8
-
-StopTable:
-        .byte   $00             ; SER_STOP_1
-        .byte   $80             ; SER_STOP_2
-
-ParityTable:
-        .byte   $00             ; SER_PAR_NONE
-        .byte   $20             ; SER_PAR_ODD
-        .byte   $60             ; SER_PAR_EVEN
-        .byte   $A0             ; SER_PAR_MARK
-        .byte   $E0             ; SER_PAR_SPACE
-
-.code
-
-;----------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present.
-; Must return an SER_ERR_xx code in a/x.
-;
-; Since we don't have to manage the IRQ vector on the Plus/4, this is actually
-; the same as:
-;
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Must return an SER_ERR_xx code in a/x.
-;
-; and:
-;
-; CLOSE: Close the port, disable interrupts and flush the buffer. Called
-; without parameters. Must return an error code in a/x.
-;
-
-INSTALL:
-UNINSTALL:
-CLOSE:
-
-; Deactivate DTR and disable 6551 interrupts
-
-        lda     #%00001010
-        sta     ACIA_CMD
-
-; Done, return an error code
-
-        lda     #<SER_ERR_OK
-        tax                     ; A is zero
-        rts
-
-;----------------------------------------------------------------------------
-; PARAMS routine. A pointer to a ser_params structure is passed in ptr1.
-; Must return an SER_ERR_xx code in a/x.
-
-OPEN:
-
-; Check if the handshake setting is valid
-
-        ldy     #SER_PARAMS::HANDSHAKE  ; Handshake
-        lda     (ptr1),y
-        cmp     #SER_HS_HW              ; This is all we support
-        bne     InvParam
-
-; Initialize buffers
-
-        ldx     #0
-        stx     Stopped
-        stx     RecvHead
-        stx     RecvTail
-        stx     SendHead
-        stx     SendTail
-        dex                             ; X = 255
-        stx     RecvFreeCnt
-        stx     SendFreeCnt
-
-; Set the value for the control register, which contains stop bits, word
-; length and the baud rate.
-
-        ldy     #SER_PARAMS::BAUDRATE
-        lda     (ptr1),y                ; Baudrate index
-        tay
-        lda     BaudTable,y             ; Get 6551 value
-        bmi     InvBaud                 ; Branch if rate not supported
-        sta     tmp1
-
-        ldy     #SER_PARAMS::DATABITS   ; Databits
-        lda     (ptr1),y
-        tay
-        lda     BitTable,y
-        ora     tmp1
-        sta     tmp1
-
-        ldy     #SER_PARAMS::STOPBITS   ; Stopbits
-        lda     (ptr1),y
-        tay
-        lda     StopTable,y
-        ora     tmp1
-        ora     #%00010000              ; Receiver clock source = baudrate
-        sta     ACIA_CTRL
-
-; Set the value for the command register. We remember the base value in
-; RtsOff, since we will have to manipulate ACIA_CMD often.
-
-        ldy     #SER_PARAMS::PARITY     ; Parity
-        lda     (ptr1),y
-        tay
-        lda     ParityTable,y
-        ora     #%00000001              ; DTR active
-        sta     RtsOff
-        ora     #%00001000              ; Enable receive interrupts
-        sta     ACIA_CMD
-
-; Done
-
-        lda     #<SER_ERR_OK
-        tax                             ; A is zero
-        rts
-
-; Invalid parameter
-
-InvParam:
-        lda     #<SER_ERR_INIT_FAILED
-        ldx     #>SER_ERR_INIT_FAILED
-        rts
-
-; Baud rate not available
-
-InvBaud:
-        lda     #<SER_ERR_BAUD_UNAVAIL
-        ldx     #>SER_ERR_BAUD_UNAVAIL
-        rts
-
-;----------------------------------------------------------------------------
-; GET: Will fetch a character from the receive buffer and store it into the
-; variable pointer to by ptr1. If no data is available, SER_ERR_NO_DATA is
-; return.
-;
-
-GET:    ldx     SendFreeCnt             ; Send data if necessary
-        inx                             ; X == $FF?
-        beq     @L1
-        lda     #$00
-        jsr     TryToSend
-
-; Check for buffer empty
-
-@L1:    lda     RecvFreeCnt             ; (25)
-        cmp     #$ff
-        bne     @L2
-        lda     #<SER_ERR_NO_DATA
-        ldx     #>SER_ERR_NO_DATA
-        rts
-
-; Check for flow stopped & enough free: release flow control
-
-@L2:    ldx     Stopped                 ; (34)
-        beq     @L3
-        cmp     #63
-        bcc     @L3
-        lda     #$00
-        sta     Stopped
-        lda     RtsOff
-        ora     #%00001000
-        sta     ACIA_CMD
-
-; Get byte from buffer
-
-@L3:    ldx     RecvHead                ; (41)
-        lda     RecvBuf,x
-        inc     RecvHead
-        inc     RecvFreeCnt
-        ldx     #$00                    ; (59)
-        sta     (ptr1,x)
-        txa                             ; Return code = 0
-        rts
-
-;----------------------------------------------------------------------------
-; PUT: Output character in A.
-; Must return an error code in a/x.
-;
-
-PUT:
-
-; Try to send
-
-        ldx     SendFreeCnt
-        inx                             ; X = $ff?
-        beq     @L2
-        pha
-        lda     #$00
-        jsr     TryToSend
-        pla
-
-; Put byte into send buffer & send
-
-@L2:    ldx     SendFreeCnt
-        bne     @L3
-        lda     #<SER_ERR_OVERFLOW      ; X is already zero
-        rts
-
-@L3:    ldx     SendTail
-        sta     SendBuf,x
-        inc     SendTail
-        dec     SendFreeCnt
-        lda     #$ff
-        jsr     TryToSend
-        lda     #<SER_ERR_OK
-        tax
-        rts
-
-;----------------------------------------------------------------------------
-; STATUS: Return the status in the variable pointed to by ptr1.
-; Must return an error code in a/x.
-;
-
-STATUS: lda     ACIA_STATUS
-        ldx     #0
-        sta     (ptr1,x)
-        txa                             ; SER_ERR_OK
-        rts
-
-;----------------------------------------------------------------------------
-; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl
-; specific data in ptr1, and the ioctl code in A.
-; Must return an error code in a/x.
-;
-
-IOCTL:  lda     #<SER_ERR_INV_IOCTL     ; We don't support ioclts for now
-        ldx     #>SER_ERR_INV_IOCTL
-        rts                             ; Run into IRQ instead
-
-;----------------------------------------------------------------------------
-; IRQ: Called from the builtin runtime IRQ handler as a subroutine. All
-; registers are already save, no parameters are passed, but the carry flag
-; is clear on entry. The routine must return with carry set if the interrupt
-; was handled, otherwise with carry clear.
-;
-
-IRQ:    lda     ACIA_STATUS     ; Check ACIA status for receive interrupt
-        and     #$08
-        beq     @L9             ; Jump if no ACIA interrupt (carry still clear)
-        lda     ACIA_DATA       ; Get byte from ACIA
-        ldx     RecvFreeCnt     ; Check if we have free space left
-        beq     @L1             ; Jump if no space in receive buffer
-        ldy     RecvTail        ; Load buffer pointer
-        sta     RecvBuf,y       ; Store received byte in buffer
-        inc     RecvTail        ; Increment buffer pointer
-        dec     RecvFreeCnt     ; Decrement free space counter
-        cpx     #33             ; Check for buffer space low
-        bcc     @L1             ; Assert flow control if buffer space low
-        rts                     ; Return with carry set (interrupt handled)
-
-; Assert flow control if buffer space too low
-
-@L1:    lda     RtsOff
-        sta     ACIA_CMD
-        sta     Stopped
-        sec                     ; Interrupt handled
-@L9:    rts
-
-;----------------------------------------------------------------------------
-; Try to send a byte. Internal routine. A = TryHard
-
-.proc   TryToSend
-
-        sta     tmp1            ; Remember tryHard flag
-@L0:    lda     SendFreeCnt
-        cmp     #$ff
-        beq     @L3             ; Bail out
-
-; Check for flow stopped
-
-@L1:    lda     Stopped
-        bne     @L3             ; Bail out
-
-; Check that swiftlink is ready to send
-
-@L2:    lda     ACIA_STATUS
-        and     #$10
-        bne     @L4
-        bit     tmp1            ;keep trying if must try hard
-        bmi     @L0
-@L3:    rts
-
-; Send byte and try again
-
-@L4:    ldx     SendHead
-        lda     SendBuf,x
-        sta     ACIA_DATA
-        inc     SendHead
-        inc     SendFreeCnt
-        jmp     @L0
-
-.endproc
-
-
diff --git a/libsrc/plus4/status.s b/libsrc/plus4/status.s
deleted file mode 100644 (file)
index c6f2792..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-;
-; Oliver Schmidt, 2012-09-30
-;
-
-        .exportzp       ST := $90       ; IEC status byte
diff --git a/libsrc/plus4/systime.s b/libsrc/plus4/systime.s
deleted file mode 100644 (file)
index 273e394..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-;
-; Ullrich von Bassewitz, 12.11.2002
-;
-; time_t _systime (void);
-; /* Similar to time(), but:
-; **   - Is not ISO C
-; **   - Does not take the additional pointer
-; **   - Does not set errno when returning -1
-; */
-;
-
-        .export         __systime
-
-        .importzp       sreg
-
-.code
-
-.proc   __systime
-
-        lda     #$FF
-        tax
-        sta     sreg
-        sta     sreg+1
-        rts                     ; Return -1
-
-.endproc
-
-
diff --git a/libsrc/plus4/sysuname.s b/libsrc/plus4/sysuname.s
deleted file mode 100644 (file)
index 332daae..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; unsigned char __fastcall__ _sysuname (struct utsname* buf);
-;
-
-        .export         __sysuname, utsdata
-
-        .import         utscopy
-
-        __sysuname = utscopy
-
-;--------------------------------------------------------------------------
-; Data. We define a fixed utsname struct here and just copy it.
-
-.rodata
-
-utsdata:
-        ; sysname
-        .asciiz         "cc65"
-
-        ; nodename
-        .asciiz         ""
-
-        ; release
-        .byte           ((.VERSION >> 8) & $0F) + '0'
-        .byte           '.'
-        .byte           ((.VERSION >> 4) & $0F) + '0'
-        .byte           $00
-
-        ; version
-        .byte           (.VERSION & $0F) + '0'
-        .byte           $00
-
-        ; machine
-        .asciiz         "Commodore Plus/4"
-
-
-
diff --git a/libsrc/runtime/add.s b/libsrc/runtime/add.s
deleted file mode 100644 (file)
index 6fb2dac..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: add ints
-;
-
-; Make this as fast as possible, even if it needs more space since it's
-; called a lot!
-
-        .export         tosadda0, tosaddax
-        .importzp       sp
-
-        .macpack        cpu
-
-tosadda0:
-        ldx     #0
-tosaddax:
-        clc
-.if (.cpu .bitand CPU_ISET_65SC02)
-        adc     (sp)            ; 65SC02 version - saves 2 cycles
-        ldy     #1
-.else
-        ldy     #0
-        adc     (sp),y          ; lo byte
-        iny
-.endif
-        pha                     ; save it
-        txa
-        adc     (sp),y          ; hi byte
-        tax
-        clc
-        lda     sp
-        adc     #2
-        sta     sp
-        bcc     L1
-        inc     sp+1
-L1:     pla                     ; Restore low byte
-        rts
-
diff --git a/libsrc/runtime/addeqsp.s b/libsrc/runtime/addeqsp.s
deleted file mode 100644 (file)
index 5112d27..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.10.1998
-;
-; CC65 runtime: += operator for ints on the stack
-;
-
-        .export         addeq0sp, addeqysp
-        .importzp       sp
-
-addeq0sp:
-        ldy     #0
-addeqysp:
-        clc
-        adc     (sp),y
-        sta     (sp),y
-        pha
-        iny
-        txa
-        adc     (sp),y
-        sta     (sp),y
-        tax
-        pla
-        rts
-
diff --git a/libsrc/runtime/addysp.s b/libsrc/runtime/addysp.s
deleted file mode 100644 (file)
index e0e7db1..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Increment the stackpointer by value in y
-;
-
-        .export         addysp1, addysp
-        .importzp       sp
-
-addysp1:
-        iny
-addysp: pha                     ; Save A
-        clc
-        tya                     ; Get the value
-        adc     sp              ; Add low byte
-        sta     sp              ; Put it back
-        bcc     @L1             ; If no carry, we're done
-        inc     sp+1            ; Inc high byte
-@L1:    pla                     ; Restore A
-        rts
-
diff --git a/libsrc/runtime/along.s b/libsrc/runtime/along.s
deleted file mode 100644 (file)
index 661b312..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 23.11.2002
-;
-; CC65 runtime: Convert char in ax into a long
-;
-
-        .export         aulong, along
-        .importzp       sreg
-
-; Convert A from char to long in EAX
-
-aulong: ldx     #0
-        stx     sreg
-        stx     sreg+1
-        rts
-
-along:  cmp     #$80            ; Positive?
-        bcc     aulong          ; Yes, handle like unsigned type
-        ldx     #$ff
-        stx     sreg
-        stx     sreg+1
-        rts
-
-
diff --git a/libsrc/runtime/and.s b/libsrc/runtime/and.s
deleted file mode 100644 (file)
index 8c180b5..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: and on ints
-;
-
-        .export         tosanda0, tosandax
-        .import         addysp1
-        .importzp       sp, ptr4
-
-        .macpack        cpu
-
-tosanda0:
-        ldx     #$00
-tosandax:
-.if (.cpu .bitand CPU_ISET_65SC02)
-        and     (sp)            ; 65SC02 version, saves 2 cycles and 1 byte
-        ldy     #1
-.else
-        ldy     #0
-        and     (sp),y
-        iny
-.endif
-        pha
-        txa
-        and     (sp),y
-        tax
-        pla
-        jmp     addysp1         ; drop TOS, set condition codes
-
diff --git a/libsrc/runtime/aslax1.s b/libsrc/runtime/aslax1.s
deleted file mode 100644 (file)
index 14f0be3..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Scale the primary register
-;
-
-        .export         aslax1, shlax1
-        .importzp       tmp1
-                            
-aslax1:
-shlax1: stx     tmp1
-        asl     A
-        rol     tmp1
-        ldx     tmp1
-        rts
-
-
diff --git a/libsrc/runtime/aslax2.s b/libsrc/runtime/aslax2.s
deleted file mode 100644 (file)
index 79495e3..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Scale the primary register by 4
-;
-
-        .export         aslax2, shlax2
-        .importzp       tmp1
-
-aslax2:
-shlax2: stx     tmp1
-        asl     a
-        rol     tmp1
-        asl     a
-        rol     tmp1
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/aslax3.s b/libsrc/runtime/aslax3.s
deleted file mode 100644 (file)
index 8cf19d4..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Scale the primary register by 8
-;
-
-        .export         aslax3, shlax3
-        .importzp       tmp1
-
-aslax3:
-shlax3: stx     tmp1
-        asl     a
-        rol     tmp1
-        asl     a
-        rol     tmp1
-        asl     a
-        rol     tmp1
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/aslax4.s b/libsrc/runtime/aslax4.s
deleted file mode 100644 (file)
index df88a5f..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.07.2001
-;
-; CC65 runtime: Scale the primary register by 16
-;
-
-        .export         aslax4, shlax4
-        .importzp       tmp1
-
-aslax4:
-shlax4: stx     tmp1
-        asl     a
-        rol     tmp1
-        asl     a
-        rol     tmp1
-        asl     a
-        rol     tmp1
-        asl     a
-        rol     tmp1
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/asleax1.s b/libsrc/runtime/asleax1.s
deleted file mode 100644 (file)
index d3d2f70..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Scale the 32 bit primary register by 2
-;
-
-        .export         asleax1, shleax1
-        .importzp       sreg, tmp1
-
-asleax1:
-shleax1:
-        stx     tmp1
-        asl     a
-        rol     tmp1
-        rol     sreg
-        rol     sreg+1
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/asleax2.s b/libsrc/runtime/asleax2.s
deleted file mode 100644 (file)
index 356f34d..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Scale the 32 bit primary register by 4
-;
-
-        .export         asleax2, shleax2
-        .importzp       sreg, tmp1
-
-asleax2:
-shleax2:
-        stx     tmp1
-        asl     a
-        rol     tmp1
-        rol     sreg
-        rol     sreg+1
-        asl     a
-        rol     tmp1
-        rol     sreg
-        rol     sreg+1
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/asleax3.s b/libsrc/runtime/asleax3.s
deleted file mode 100644 (file)
index b5a1e38..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Scale the 32 bit primary register by 8
-;
-
-        .export         asleax3, shleax3
-        .importzp       sreg, tmp1
-
-asleax3:
-shleax3:
-        stx     tmp1
-        asl     a
-        rol     tmp1
-        rol     sreg
-        rol     sreg+1
-        asl     a
-        rol     tmp1
-        rol     sreg
-        rol     sreg+1
-        asl     a
-        rol     tmp1
-        rol     sreg
-        rol     sreg+1
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/asleax4.s b/libsrc/runtime/asleax4.s
deleted file mode 100644 (file)
index 4d8017d..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.07.2001
-;
-; CC65 runtime: Scale the 32 bit primary register by 16
-;
-
-        .export         asleax4, shleax4
-        .importzp       sreg, tmp1
-
-asleax4:
-shleax4:
-        stx     tmp1
-        ldx     #4
-@L1:    asl     a
-        rol     tmp1
-        rol     sreg
-        rol     sreg+1
-        dex
-        bne     @L1
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/asr.s b/libsrc/runtime/asr.s
deleted file mode 100644 (file)
index 814a18c..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-;
-; Ullrich von Bassewitz, 2004-06-30
-;
-; CC65 runtime: right shift support for ints
-;
-; Note: The standard declares a shift count that is negative or >= the
-; bitcount of the shifted type for undefined behaviour.
-;
-; Note^2: The compiler knowns about the register/zero page usage of this
-; function, so you need to change the compiler source if you change it!
-;
-
-
-        .export         tosasrax, asraxy
-        .import         popax
-        .importzp       tmp1
-
-tosasrax:
-        sta     tmp1            ; Save shift count
-        jsr     popax           ; Get the left hand operand
-        ldy     tmp1            ; Get shift count
-
-; Run into asraxy
-
-asraxy:
-        pha
-        tya
-        and     #$0F
-        beq     L2              ; Nothing to shift
-        sec
-        sbc     #8              ; Shift count 8 or greater?
-        beq     L3              ; Jump if exactly 8
-        bcc     L6              ; Jump if less than 8
-
-; Shift count is greater than 8.
-
-        tay                     ; Shift count into Y
-        pla                     ; Discard low byte
-        txa                     ; Get high byte
-
-L1:     cmp     #$80            ; Sign bit into carry
-        ror     a               ; Carry into A
-        dey
-        bne     L1
-        beq     L4              ; Sign extend and return
-
-; Shift count is zero
-
-L2:     pla
-        rts
-
-; Shift count is exactly 8
-
-L3:     pla                     ; Drop low byte from stack ...
-        txa                     ; Move high byte to low
-L4:     ldx     #$00            ; Clear high byte
-        cmp     #$80            ; Check sign bit
-        bcc     L5
-        dex
-L5:     rts
-
-; Shift count is less than 8
-
-L6:     adc     #8              ; Correct counter
-        tay                     ; Shift count into Y
-        pla                     ; Restore low byte
-        stx     tmp1            ; Save high byte of lhs
-L7:     cpx     #$80            ; Sign bit into carry
-        ror     tmp1
-        ror     a
-        dey
-        bne     L7
-
-; Done with shift
-
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/asrax1.s b/libsrc/runtime/asrax1.s
deleted file mode 100644 (file)
index 3f0295e..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Scale the primary register
-;
-
-        .export         asrax1
-        .importzp       tmp1
-
-asrax1: stx     tmp1
-        cpx     #$80            ; Put bit 7 into carry
-        ror     tmp1
-        ror     a
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/asrax2.s b/libsrc/runtime/asrax2.s
deleted file mode 100644 (file)
index e1c9065..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Scale the primary register by 4
-;
-
-        .export         asrax2
-        .importzp       tmp1
-
-asrax2: stx     tmp1
-        cpx     #$80            ; Put bit 7 into carry
-        ror     tmp1
-        ror     a
-        cpx     #$80
-        ror     tmp1
-        ror     a
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/asrax3.s b/libsrc/runtime/asrax3.s
deleted file mode 100644 (file)
index 52a2f37..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Piotr Fusik, 24.10.2003
-; originally by Ullrich von Bassewitz
-;
-; CC65 runtime: Scale the primary register by 8
-;
-
-        .export         asrax3
-        .importzp       tmp1
-
-asrax3: stx     tmp1
-        cpx     #$80            ; Put bit 7 into carry
-        ror     tmp1
-        ror     a
-        cpx     #$80
-        ror     tmp1
-        ror     a
-        cpx     #$80
-        ror     tmp1
-        ror     a
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/asrax4.s b/libsrc/runtime/asrax4.s
deleted file mode 100644 (file)
index 0d6aa11..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; Piotr Fusik, 24.10.2003
-; originally by Ullrich von Bassewitz
-;
-; CC65 runtime: Scale the primary register by 16
-;
-
-        .export         asrax4
-        .importzp       tmp1
-
-asrax4: stx     tmp1
-        cpx     #$80            ; Put bit 7 into carry
-        ror     tmp1
-        ror     a
-        cpx     #$80
-        ror     tmp1
-        ror     a
-        cpx     #$80
-        ror     tmp1
-        ror     a
-        cpx     #$80
-        ror     tmp1
-        ror     a
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/asreax1.s b/libsrc/runtime/asreax1.s
deleted file mode 100644 (file)
index d304c63..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Scale the primary register
-;
-
-        .export         asreax1
-        .importzp       sreg, tmp1
-
-asreax1:
-        stx     tmp1
-        ldx     sreg+1
-        cpx     #$80            ; Get bit 7 into carry
-        ror     sreg+1
-        ror     sreg
-        ror     tmp1
-        ror     a
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/asreax2.s b/libsrc/runtime/asreax2.s
deleted file mode 100644 (file)
index 7dfd43e..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Scale the 32 bit primary register by 4
-;
-
-        .export         asreax2
-        .importzp       sreg, tmp1
-
-asreax2:
-        stx     tmp1
-        ldx     sreg+1
-        cpx     #$80            ; Get bit 7 into carry
-        ror     sreg+1
-        ror     sreg
-        ror     tmp1
-        ror     a
-        cpx     #$80            ; Get bit 7 into carry
-        ror     sreg+1
-        ror     sreg
-        ror     tmp1
-        ror     a
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/asreax3.s b/libsrc/runtime/asreax3.s
deleted file mode 100644 (file)
index ef11a2c..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Scale the 32 bit primary register by 8
-;
-
-        .export         asreax3
-        .importzp       sreg, tmp1
-
-asreax3:
-        stx     tmp1
-        ldx     sreg+1
-        cpx     #$80            ; Get bit 7 into carry
-        ror     sreg+1
-        ror     sreg
-        ror     tmp1
-        ror     a
-        cpx     #$80            ; Get bit 7 into carry
-        ror     sreg+1
-        ror     sreg
-        ror     tmp1
-        ror     a
-        cpx     #$80            ; Get bit 7 into carry
-        ror     sreg+1
-        ror     sreg
-        ror     tmp1
-        ror     a
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/asreax4.s b/libsrc/runtime/asreax4.s
deleted file mode 100644 (file)
index 62f9808..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.07.2001
-;
-; CC65 runtime: Scale the 32 bit primary register by 16
-;
-
-        .export         asreax4
-        .importzp       sreg, tmp1
-
-asreax4:
-        stx     tmp1
-        ldx     sreg+1
-        ldy     #4
-@L1:    cpx     #$80            ; Get bit 7 into carry
-        ror     sreg+1
-        ror     sreg
-        ror     tmp1
-        ror     a
-        dey
-        bne     @L1
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/axlong.s b/libsrc/runtime/axlong.s
deleted file mode 100644 (file)
index 6d97b50..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Convert int in ax into a long
-;
-
-        .export         axulong, axlong
-        .importzp       sreg
-
-; Convert AX from int to long in EAX
-
-axulong:
-        ldy     #0
-        sty     sreg
-        sty     sreg+1
-        rts
-
-axlong: cpx     #$80            ; Positive?
-        bcc     axulong         ; Yes, handle like unsigned type
-        ldy     #$ff
-        sty     sreg
-        sty     sreg+1
-        rts
-
-
-
diff --git a/libsrc/runtime/bneg.s b/libsrc/runtime/bneg.s
deleted file mode 100644 (file)
index fa301cd..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: boolean negation
-;
-
-        .export         bnega, bnegax
-        .import         return0, return1
-
-bnegax: cpx     #0
-        bne     L0
-bnega:  tax
-        bne     L0
-L1:     lda     #1              ; Zero already in X
-        rts
-
-L0:     ldx     #0
-        txa
-        rts
-
diff --git a/libsrc/runtime/bpushbsp.s b/libsrc/runtime/bpushbsp.s
deleted file mode 100644 (file)
index 1c6add4..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.08.1998
-;
-; CC65 runtime: Load a from stack slot and push as byte
-;
-
-        .export         bpushbsp, bpushbysp
-        .import         pusha
-        .importzp       sp
-
-bpushbsp:
-        ldy     #0
-bpushbysp:
-        lda     (sp),y
-        jmp     pusha
-
-
-
diff --git a/libsrc/runtime/call.s b/libsrc/runtime/call.s
deleted file mode 100644 (file)
index d95b69a..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: call function via pointer in ax
-;
-
-        .export         callax
-        .importzp       ptr1
-
-callax: sta     ptr1
-        stx     ptr1+1
-        jmp     (ptr1)          ; jump there
-
diff --git a/libsrc/runtime/callirq.s b/libsrc/runtime/callirq.s
deleted file mode 100644 (file)
index 74a12c4..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-;
-; Ullrich von Bassewitz, 2004-04-04
-;
-; CC65 runtime: Support for calling special irq routines declared as condes
-; type 2.
-;
-; There are two reasons, why this is a separate routine, and the generic
-; condes routine in condes.s is not used:
-;
-;   1. Speed. Having several things hardcoded makes it faster. This is
-;      important if it is called in each interrupt.
-;
-;   2. Reentrancy. The condes routines must use self modyfiying code, which
-;      means it is not reentrant. An IRQ using condes, that interrupts
-;      another use of condes will cause unpredicatble behaviour. The current
-;      code avoids this by using locking mechanisms, but it's complex and
-;      has a size and performance penalty.
-;
-;   3. Special semantics: An interruptor called by callirq must tell by
-;      setting or resetting the carry flag if the interrupt has been handled
-;      (which means that the interrupt is no longer active at the interrupt
-;      source). callirq will call no other interruptors if this happens. To
-;      simplify code, all interrupt routines will be called with carry clear
-;      on entry.
-;
-; As the normal condes routine, this one has the limitation of 127 table
-; entries.
-;
-
-        .export         callirq
-        .export         callirq_y       ; Same but with Y preloaded
-        .export         __CALLIRQ__ : absolute = 1
-        .constructor    irq_init, 10
-        .destructor     irq_done, 10
-
-        .import         __INTERRUPTOR_TABLE__, __INTERRUPTOR_COUNT__
-        .import         initirq
-        .import         doneirq
-
-        irq_init :=     initirq
-        irq_done :=     doneirq
-
-; --------------------------------------------------------------------------
-; Call all IRQ routines. The function needs to use self modifying code and
-; is thereforce placed in the data segment. It will return carry set if the
-; interrupt was handled and carry clear if not. The caller may choose to
-; ignore this at will.
-; NOTE: The routine must not be called if the table is empty!
-
-.data
-
-callirq:
-        ldy     #.lobyte(__INTERRUPTOR_COUNT__*2)
-callirq_y:
-        clc                             ; Preset carry flag
-loop:   dey
-        lda     __INTERRUPTOR_TABLE__,y
-        sta     jmpvec+2                ; Modify code below
-        dey
-        lda     __INTERRUPTOR_TABLE__,y
-        sta     jmpvec+1                ; Modify code below
-        sty     index+1                 ; Modify code below
-jmpvec: jsr     $FFFF                   ; Patched at runtime
-        bcs     done                    ; Bail out if interrupt handled
-index:  ldy     #$FF                    ; Patched at runtime
-        bne     loop
-done:   rts
diff --git a/libsrc/runtime/callmain.s b/libsrc/runtime/callmain.s
deleted file mode 100644 (file)
index 83cd744..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-03-07
-;
-; Push arguments and call main()
-;
-
-
-        .export         callmain
-        .export         __argc, __argv
-
-        .import         _main, pushax
-
-;---------------------------------------------------------------------------
-; Setup the stack for main(), then jump to it
-
-.proc   callmain
-
-        lda     __argc
-        ldx     __argc+1
-        jsr     pushax          ; Push argc
-
-        lda     __argv
-        ldx     __argv+1
-        jsr     pushax          ; Push argv
-
-        ldy     #4              ; Argument size
-        jmp     _main
-
-.endproc
-
-;---------------------------------------------------------------------------
-; Data
-
-.bss
-__argc:         .res    2
-__argv:         .res    2
-
-
-
-
diff --git a/libsrc/runtime/compl.s b/libsrc/runtime/compl.s
deleted file mode 100644 (file)
index 254afde..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: integer complement
-;
-
-        .export         complax
-
-complax:
-        eor     #$FF            ; Not A
-        pha
-        txa
-        eor     #$FF            ; Not X
-        tax
-        pla
-        rts
-
diff --git a/libsrc/runtime/condes.s b/libsrc/runtime/condes.s
deleted file mode 100644 (file)
index c04f718..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-;
-; Ullrich von Bassewitz, 20.11.2000
-;
-; CC65 runtime: Support for calling module constructors/destructors
-;
-; The condes routine must be called with the table address in a/x and the
-; size of the table (which must not be zero!) in y. The current implementation
-; limits the table size to 254 bytes (127 vectors) but this shouldn't be
-; problem for now and may be changed later.
-;
-; libinit and libdone call condes with the predefined module constructor and
-; destructor tables, they must be called from the platform specific startup
-; code.
-
-
-        .export initlib, donelib, condes
-
-        .import __CONSTRUCTOR_TABLE__, __CONSTRUCTOR_COUNT__
-        .import __DESTRUCTOR_TABLE__, __DESTRUCTOR_COUNT__
-
-        .macpack        cpu
-
-; --------------------------------------------------------------------------
-; Initialize library modules
-
-.segment        "INIT"
-
-.proc   initlib
-
-        ldy     #<(__CONSTRUCTOR_COUNT__*2)
-        beq     exit
-        lda     #<__CONSTRUCTOR_TABLE__
-        ldx     #>__CONSTRUCTOR_TABLE__
-        jmp     condes
-exit:   rts
-
-.endproc
-
-
-; --------------------------------------------------------------------------
-; Cleanup library modules
-
-.code
-
-.proc   donelib
-
-        ldy     #<(__DESTRUCTOR_COUNT__*2)
-        beq     exit
-        lda     #<__DESTRUCTOR_TABLE__
-        ldx     #>__DESTRUCTOR_TABLE__
-        jmp     condes
-exit:   rts
-
-.endproc
-
-
-; --------------------------------------------------------------------------
-; Generic table call handler. The code uses self modifying code and goes
-; into the data segment for this reason.
-; NOTE: The routine must not be called if the table is empty!
-
-.data
-
-.proc   condes
-
-        sta     fetch1+1
-        stx     fetch1+2
-        sta     fetch2+1
-        stx     fetch2+2
-loop:   dey
-fetch1: lda     $FFFF,y                 ; Patched at runtime
-        sta     jmpvec+2
-        dey
-fetch2: lda     $FFFF,y                 ; Patched at runtime
-        sta     jmpvec+1
-        sty     index+1
-jmpvec: jsr     $FFFF                   ; Patched at runtime
-index:  ldy     #$FF                    ; Patched at runtime
-        bne     loop
-        rts
-
-.endproc
-
-
diff --git a/libsrc/runtime/decax1.s b/libsrc/runtime/decax1.s
deleted file mode 100644 (file)
index ebde0b0..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 29.12.1999
-;
-; CC65 runtime: Decrement ax by 1
-;
-
-        .export         decax1
-
-        .macpack        generic
-
-.proc   decax1
-
-        sub     #1
-        bcs     @L9
-        dex
-@L9:    rts
-
-.endproc
diff --git a/libsrc/runtime/decax2.s b/libsrc/runtime/decax2.s
deleted file mode 100644 (file)
index 7ef01ae..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 29.12.1999
-;
-; CC65 runtime: Decrement ax by 2
-;
-
-        .export         decax2
-
-        .macpack        generic
-
-.proc   decax2
-
-        sub     #2
-        bcs     @L9
-        dex
-@L9:    rts
-
-.endproc
diff --git a/libsrc/runtime/decax3.s b/libsrc/runtime/decax3.s
deleted file mode 100644 (file)
index 9529fd9..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.03.2001
-;
-; CC65 runtime: Decrement ax by 3
-;
-
-        .export         decax3
-
-        .macpack        generic
-
-.proc   decax3
-
-        sub     #3
-        bcs     @L9
-        dex
-@L9:    rts
-
-.endproc
diff --git a/libsrc/runtime/decax4.s b/libsrc/runtime/decax4.s
deleted file mode 100644 (file)
index be5f9aa..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.03.2001
-;
-; CC65 runtime: Decrement ax by 4
-;
-
-        .export         decax4
-
-        .macpack        generic
-
-.proc   decax4
-
-        sub     #4
-        bcs     @L9
-        dex
-@L9:    rts
-
-.endproc
diff --git a/libsrc/runtime/decax5.s b/libsrc/runtime/decax5.s
deleted file mode 100644 (file)
index 1f7f9cd..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.03.2001
-;
-; CC65 runtime: Decrement ax by 5
-;
-
-        .export         decax5
-
-        .macpack        generic
-
-.proc   decax5
-
-        sub     #5
-        bcs     @L9
-        dex
-@L9:    rts
-
-.endproc
diff --git a/libsrc/runtime/decax6.s b/libsrc/runtime/decax6.s
deleted file mode 100644 (file)
index 8d40fb0..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.03.2001
-;
-; CC65 runtime: Decrement ax by 6
-;
-
-        .export         decax6
-
-        .macpack        generic
-
-.proc   decax6
-
-        sub     #6
-        bcs     @L9
-        dex
-@L9:    rts
-
-.endproc
diff --git a/libsrc/runtime/decax7.s b/libsrc/runtime/decax7.s
deleted file mode 100644 (file)
index 7d06ce4..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.03.2001
-;
-; CC65 runtime: Decrement ax by 7
-;
-
-        .export         decax7
-
-        .macpack        generic
-
-.proc   decax7
-
-        sub     #7
-        bcs     @L9
-        dex
-@L9:    rts
-
-.endproc
diff --git a/libsrc/runtime/decax8.s b/libsrc/runtime/decax8.s
deleted file mode 100644 (file)
index 6bab61e..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.03.2001
-;
-; CC65 runtime: Decrement ax by 8
-;
-
-        .export         decax8
-
-        .macpack        generic
-
-.proc   decax8
-
-        sub     #8
-        bcs     @L9
-        dex
-@L9:    rts
-
-.endproc
diff --git a/libsrc/runtime/decaxy.s b/libsrc/runtime/decaxy.s
deleted file mode 100644 (file)
index d01d881..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 29.12.1999
-;
-; CC65 runtime: Decrement ax by value in Y
-;
-
-        .export         decaxy
-        .importzp       tmp1
-
-        .macpack        generic
-
-.proc   decaxy
-
-        sty     tmp1
-        sub     tmp1
-        bcs     @L9
-        dex
-@L9:    rts
-
-.endproc
-
diff --git a/libsrc/runtime/decsp1.s b/libsrc/runtime/decsp1.s
deleted file mode 100644 (file)
index 5aa7fa2..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Decrement the stackpointer by 1
-;
-
-        .export         decsp1
-        .importzp       sp
-
-.proc   decsp1
-
-        ldy     sp
-        bne     @L1
-        dec     sp+1
-@L1:    dec     sp
-        rts
-
-.endproc
-
-
-
-
-        
diff --git a/libsrc/runtime/decsp2.s b/libsrc/runtime/decsp2.s
deleted file mode 100644 (file)
index a3793e7..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Decrement the stackpointer by 2
-;
-
-        .export         decsp2
-        .importzp       sp
-
-.proc   decsp2
-
-        lda     sp
-        sec
-        sbc     #2
-        sta     sp
-        bcc     @L1
-        rts
-
-@L1:    dec     sp+1
-        rts
-
-.endproc
-
-
-
-
-
diff --git a/libsrc/runtime/decsp3.s b/libsrc/runtime/decsp3.s
deleted file mode 100644 (file)
index a3ad777..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Decrement the stackpointer by 3
-;
-
-        .export         decsp3
-        .importzp       sp
-
-.proc   decsp3
-
-        lda     sp
-        sec
-        sbc     #3
-        sta     sp
-        bcc     @L1
-        rts
-
-@L1:    dec     sp+1
-        rts
-
-.endproc
-
-
-
-
-
diff --git a/libsrc/runtime/decsp4.s b/libsrc/runtime/decsp4.s
deleted file mode 100644 (file)
index 5c7e949..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Decrement the stackpointer by 4
-;
-
-        .export         decsp4
-        .importzp       sp
-
-.proc   decsp4
-
-        lda     sp
-        sec
-        sbc     #4
-        sta     sp
-        bcc     @L1
-        rts
-
-@L1:    dec     sp+1
-        rts
-
-.endproc
-
-
-
-
-
diff --git a/libsrc/runtime/decsp5.s b/libsrc/runtime/decsp5.s
deleted file mode 100644 (file)
index 7ff4605..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Decrement the stackpointer by 5
-;
-
-        .export         decsp5
-        .importzp       sp
-
-.proc   decsp5
-
-        lda     sp
-        sec
-        sbc     #5
-        sta     sp
-        bcc     @L1
-        rts
-
-@L1:    dec     sp+1
-        rts
-
-.endproc
-
-
-
-
-
diff --git a/libsrc/runtime/decsp6.s b/libsrc/runtime/decsp6.s
deleted file mode 100644 (file)
index 6e55e66..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Decrement the stackpointer by 6
-;
-
-        .export         decsp6
-        .importzp       sp
-
-.proc   decsp6
-
-        lda     sp
-        sec
-        sbc     #6
-        sta     sp
-        bcc     @L1
-        rts
-
-@L1:    dec     sp+1
-        rts
-
-.endproc
-
-
-
-
-
diff --git a/libsrc/runtime/decsp7.s b/libsrc/runtime/decsp7.s
deleted file mode 100644 (file)
index ee82232..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Decrement the stackpointer by 7
-;
-
-        .export         decsp7
-        .importzp       sp
-
-.proc   decsp7
-
-        lda     sp
-        sec
-        sbc     #7
-        sta     sp
-        bcc     @L1
-        rts
-
-@L1:    dec     sp+1
-        rts
-
-.endproc
-
-
-
diff --git a/libsrc/runtime/decsp8.s b/libsrc/runtime/decsp8.s
deleted file mode 100644 (file)
index 47d4459..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Decrement the stackpointer by 8
-;
-
-        .export         decsp8
-        .importzp       sp
-
-.proc   decsp8
-
-        lda     sp
-        sec
-        sbc     #8
-        sta     sp
-        bcc     @L1
-        rts
-
-@L1:    dec     sp+1
-        rts
-
-.endproc
-
-
-
-
-
diff --git a/libsrc/runtime/div.s b/libsrc/runtime/div.s
deleted file mode 100644 (file)
index cdd3402..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; CC65 runtime: division for signed ints
-;
-
-; When negating values, we will ignore the possibility here, that one of the
-; values if $8000, in which case the negate will fail.
-
-        .export         tosdiva0, tosdivax
-        .import         popsargs, udiv16, negax
-        .importzp       sreg, tmp1, tmp2
-
-tosdiva0:
-        ldx     #0
-tosdivax:
-        jsr     popsargs        ; Get arguments from stack, adjust sign
-        jsr     udiv16          ; Do the division
-        ldx     sreg+1          ; Load high byte of result
-
-; Adjust the sign of the result. tmp1 contains the high byte of the left
-; operand, tmp2 contains the high byte of the right operand.
-
-        lda     tmp1
-        eor     tmp2
-        bpl     Pos             ; Jump if sign of result positive
-
-; Result is negative
-
-        lda     sreg            ; Load low byte of result
-        jmp     negax           ; Adjust the sign
-
-; Result is positive
-
-Pos:    lda     sreg
-        rts
-
diff --git a/libsrc/runtime/enter.s b/libsrc/runtime/enter.s
deleted file mode 100644 (file)
index c51b4f7..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: function prologue
-;
-
-        .export         enter
-        .importzp       sp
-
-enter:  tya                     ; get arg size
-        ldy     sp
-        bne     L1
-        dec     sp+1
-L1:     dec     sp
-        ldy     #0
-        sta     (sp),y          ; Store the arg count
-        rts
-
diff --git a/libsrc/runtime/eq.s b/libsrc/runtime/eq.s
deleted file mode 100644 (file)
index c2a537a..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Compare == for ints
-;
-
-        .export         toseq00, toseqa0, toseqax
-        .import         tosicmp, booleq
-        .importzp       sp, tmp1
-
-toseq00:
-        lda     #$00
-toseqa0:
-        ldx     #$00
-toseqax:
-        jsr     tosicmp         ; Set flags
-        jmp     booleq          ; Convert to boolean
diff --git a/libsrc/runtime/ge.s b/libsrc/runtime/ge.s
deleted file mode 100644 (file)
index 5cfb829..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Compare >= for signed ints
-;
-
-        .export         tosge00, tosgea0, tosgeax
-        .import         tosicmp, boolge
-
-
-tosge00:
-        lda     #$00
-tosgea0:
-        ldx     #$00
-tosgeax:
-        jsr     tosicmp         ; Set flags
-        jmp     boolge          ; Convert to boolean
diff --git a/libsrc/runtime/gt.s b/libsrc/runtime/gt.s
deleted file mode 100644 (file)
index 3c6976d..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Compare > for signed ints
-;
-
-        .export         tosgt00, tosgta0, tosgtax
-        .import         tosicmp, boolgt
-
-
-tosgt00:
-        lda     #$00
-tosgta0:
-        ldx     #$00
-tosgtax:
-        jsr     tosicmp         ; Set the flags
-        jmp     boolgt          ; Convert to boolean
-
diff --git a/libsrc/runtime/icmp.s b/libsrc/runtime/icmp.s
deleted file mode 100644 (file)
index 05c73bd..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-;
-; Piotr Fusik, 15.04.2002
-; originally by Ullrich von Bassewitz
-;
-; Integer compare function - used by the compare operators
-;
-
-        .export         tosicmp, tosicmp0
-        .importzp       sp, sreg
-
-
-tosicmp0:
-        ldx     #$00
-
-tosicmp:
-        sta     sreg
-        stx     sreg+1          ; Save ax
-
-        ldy     #$00
-        lda     (sp),y          ; Get low byte
-        tax
-        inc     sp              ; 5
-        bne     @L1             ; 3
-        inc     sp+1            ; (5)
-@L1:
-        lda     (sp),y          ; Get high byte
-        inc     sp              ; 5
-        bne     @L2             ; 3
-        inc     sp+1            ; (5)
-
-; Do the compare.
-
-@L2:    sec
-        sbc     sreg+1          ; Compare high byte
-        bne     @L4
-        cpx     sreg            ; Compare low byte
-        beq     @L3
-        adc     #$FF            ; If the C flag is set then clear the N flag
-        ora     #$01            ; else set the N flag
-@L3:    rts
-
-@L4:    bvc     @L3
-        eor     #$FF            ; Fix the N flag if overflow
-        ora     #$01            ; Clear the Z flag
-        rts
-
-
diff --git a/libsrc/runtime/idiv32by16r16.s b/libsrc/runtime/idiv32by16r16.s
deleted file mode 100644 (file)
index 12e7feb..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-11-04
-;
-; CC65 runtime: 32by16 => 16 signed division
-;
-
-        .export         idiv32by16r16
-        .import         negax, udiv32by16r16m
-
-        .include        "zeropage.inc"
-
-
-;---------------------------------------------------------------------------
-; 32by16 division. Divide ptr1:ptr2 by ptr3. Result is in ptr1, remainder
-; in sreg.
-;
-;   lhs         rhs           result      result also in    remainder
-; -----------------------------------------------------------------------
-;   ptr1:ptr2   ptr3          ax          ptr1              sreg
-;
-
-
-idiv32by16r16:
-        stx     tmp1
-        cpx     #0
-        bpl     @L1
-        jsr     negax
-@L1:    sta     ptr3
-        stx     ptr3+1
-
-        lda     ptr2+1
-        eor     tmp1
-        sta     tmp1
-        bit     ptr2+1
-        bpl     @L3
-
-; Negate the value in ptr1:ptr2
-
-        ldx     #0
-        ldy     #4
-        sec
-@L2:    lda     ptr1,x
-        eor     #$FF
-        adc     #$00
-        sta     ptr1,x
-        inx
-        dey
-        bne     @L2
-
-; Call the unsigned division routine
-
-@L3:    jsr     udiv32by16r16m
-
-; Check the sign of the result
-
-        bit     tmp1
-        bmi     @L4
-        rts
-
-; Negate the result. We do this here only for the result, not for the
-; remainder!
-
-@L4:    jmp     negax
-
diff --git a/libsrc/runtime/imul16x16r32.s b/libsrc/runtime/imul16x16r32.s
deleted file mode 100644 (file)
index 6fad9ab..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-;
-; Ullrich von Bassewitz, 2010-11-03
-;
-; CC65 runtime: 16x16 => 32 signed multiplication
-;
-
-        .export         imul16x16r32
-        .import         negax, umul16x16r32m, negeax
-
-        .include        "zeropage.inc"
-
-
-;---------------------------------------------------------------------------
-; 16x16 => 32 signed multiplication routine.
-;
-;   LHS         RHS           result          result also in
-; -------------------------------------------------------------
-;   ax          ptr1          ax:sreg
-;
-; There is probably a faster way to do this.
-;
-
-imul16x16r32:
-        stx     tmp1
-        cpx     #0
-        bpl     @L1
-        jsr     negax
-@L1:    sta     ptr3
-        stx     ptr3+1
-
-        lda     ptr1+1
-        eor     tmp1
-        sta     tmp1
-        lda     ptr1
-        ldx     ptr1+1
-        bpl     @L2
-        jsr     negax
-        sta     ptr1
-        stx     ptr1+1
-@L2:    jsr     umul16x16r32m
-        ldy     tmp1
-        bpl     @L3
-        jmp     negeax
-@L3:    rts
-
diff --git a/libsrc/runtime/imul8x8r16.s b/libsrc/runtime/imul8x8r16.s
deleted file mode 100644 (file)
index e1aea30..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-;
-; 2010-11-02, Ullrich von Bassewitz
-; 2014-09-10, Greg King
-;
-; CC65 runtime: 8x8 => 16 signed multiplication
-;
-
-        .export         imul8x8r16, imul8x8r16m
-        .importzp       ptr1, ptr3, tmp1
-
-        .macpack        generic
-
-;---------------------------------------------------------------------------
-; 8x8 => 16 signed multiplication routine.
-;
-;   multiplicand  multiplier   product
-;   LHS             RHS        result
-; -------------------------------------------------------------
-;   .A (ptr3-low)   ptr1-low    .XA
-;
-
-imul8x8r16:
-        sta     ptr3
-
-imul8x8r16m:
-        ldx     #>$0000
-        bit     ptr3
-        bpl     @L7
-        dex
-@L7:    stx     ptr3+1          ; Extend sign of Left-Hand Side
-        ldy     #<$0000         ; Clear .XY accumulator
-        ldx     #>$0000
-        lda     ptr1
-        bmi     NegMult
-        bpl     @L2             ; Branch always
-
-@L0:    tya                     ; Add current multiplicand
-        add     ptr3
-        tay
-        txa
-        adc     ptr3+1
-        tax
-
-@L1:    asl     ptr3
-        rol     ptr3+1
-@L2:    lsr     ptr1            ; Get next bit of Right-Hand Side into carry
-        bcs     @L0
-        bnz     @L1             ; Loop if more one-bits in multiplier
-
-        tya                     ; Put result into cc65's accumulator
-        rts
-
-; The multiplier is negative.
-; Therefore, make it positive; and, subtract when multiplying.
-NegMult:
-        eor     #%11111111
-        sta     ptr1
-        inc     ptr1
-        bnz     @L2             ; Branch always
-
-@L0:    tya                     ; Subtract current multiplicand
-        sub     ptr3
-        tay
-        txa
-        sbc     ptr3+1
-        tax
-
-@L1:    asl     ptr3
-        rol     ptr3+1
-@L2:    lsr     ptr1            ; Get next bit of Right-Hand Side into carry
-        bcs     @L0
-        bnz     @L1             ; Loop if more one-bits in multiplier
-
-        tya                     ; Put result into cc65's accumulator
-        rts
diff --git a/libsrc/runtime/incax1.s b/libsrc/runtime/incax1.s
deleted file mode 100644 (file)
index 19c1d0c..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: Increment ax by 1
-;
-
-        .export         incax1
-
-        .macpack        generic
-        .macpack        cpu
-
-.proc   incax1
-
-.if (.cpu .bitand ::CPU_ISET_65SC02)
-        ina                     ; 65C02 version
-        bne     @L9
-.else
-        add     #1
-        bcc     @L9
-.endif
-        inx
-@L9:    rts
-
-.endproc
diff --git a/libsrc/runtime/incax2.s b/libsrc/runtime/incax2.s
deleted file mode 100644 (file)
index 55c4571..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: Increment ax by 2
-;
-
-        .export         incax2
-
-        .macpack        generic
-
-.proc   incax2
-
-        add     #2
-        bcc     @L9
-        inx
-@L9:    rts
-
-.endproc
diff --git a/libsrc/runtime/incax3.s b/libsrc/runtime/incax3.s
deleted file mode 100644 (file)
index 031c41d..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: Increment ax by 3
-;
-
-        .export         incax3
-        .import         incaxy
-
-.proc   incax3
-
-        ldy     #3
-        jmp     incaxy
-
-.endproc
-
diff --git a/libsrc/runtime/incax5.s b/libsrc/runtime/incax5.s
deleted file mode 100644 (file)
index 2e16a1c..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: Increment ax by 5
-;
-
-        .export         incax5
-        .import         incaxy
-
-.proc   incax5
-
-        ldy     #5
-        jmp     incaxy
-
-.endproc
-
diff --git a/libsrc/runtime/incax6.s b/libsrc/runtime/incax6.s
deleted file mode 100644 (file)
index 3552454..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: Increment ax by 6
-;
-
-        .export         incax6
-        .import         incaxy
-
-.proc   incax6
-
-        ldy     #6
-        jmp     incaxy
-
-.endproc
-
diff --git a/libsrc/runtime/incax7.s b/libsrc/runtime/incax7.s
deleted file mode 100644 (file)
index e8d27ae..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: Increment ax by 7
-;
-
-        .export         incax7
-        .import         incaxy
-
-.proc   incax7
-
-        ldy     #7
-        jmp     incaxy
-
-.endproc
-
diff --git a/libsrc/runtime/incax8.s b/libsrc/runtime/incax8.s
deleted file mode 100644 (file)
index 12b9dfd..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: Increment ax by 8
-;
-
-        .export         incax8
-        .import         incaxy
-
-.proc   incax8
-
-        ldy     #8
-        jmp     incaxy
-
-.endproc
-
diff --git a/libsrc/runtime/incaxy.s b/libsrc/runtime/incaxy.s
deleted file mode 100644 (file)
index 0ee7d87..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: Increment ax by valie in y
-;
-
-        .export         incaxy, incax4
-        .importzp       tmp1
-        .macpack        generic
-
-incax4: ldy     #4
-incaxy: sty     tmp1
-        add     tmp1
-        bcc     @L9
-        inx
-@L9:    rts
-
diff --git a/libsrc/runtime/incsp1.s b/libsrc/runtime/incsp1.s
deleted file mode 100644 (file)
index 43c92dc..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Increment the stackpointer by 1
-;
-
-        .export         incsp1
-        .importzp       sp
-
-.proc   incsp1
-
-        inc     sp
-        bne     @L1
-        inc     sp+1
-@L1:    rts
-
-.endproc
-
-
-
-
-        
diff --git a/libsrc/runtime/incsp2.s b/libsrc/runtime/incsp2.s
deleted file mode 100644 (file)
index 067154b..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Increment the stackpointer by 2. For performance reasons,
-;               this modules does also contain the popax function.
-
-        .export         popax, incsp2
-        .importzp       sp
-
-        .macpack        cpu
-
-; Pop a/x from stack. This function will run directly into incsp2
-
-.proc   popax
-
-        ldy     #1
-        lda     (sp),y          ; get hi byte
-        tax                     ; into x
-.if (.cpu .bitand ::CPU_ISET_65SC02)
-        lda     (sp)            ; get lo byte
-.else
-        dey
-        lda     (sp),y          ; get lo byte
-.endif
-
-.endproc
-
-
-
-.proc   incsp2
-
-        inc     sp              ; 5
-        beq     @L1             ; 2
-        inc     sp              ; 5
-        beq     @L2             ; 2
-        rts
-
-@L1:    inc     sp              ; 5
-@L2:    inc     sp+1            ; 5
-        rts
-
-.endproc
-
-
-
-
-
diff --git a/libsrc/runtime/incsp3.s b/libsrc/runtime/incsp3.s
deleted file mode 100644 (file)
index 29067a5..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Increment the stackpointer by 3
-;
-
-        .export         incsp3
-        .import         addysp
-
-.proc   incsp3
-
-        ldy     #3
-        jmp     addysp
-
-.endproc
-
-
-
-
-        
diff --git a/libsrc/runtime/incsp4.s b/libsrc/runtime/incsp4.s
deleted file mode 100644 (file)
index 51e9229..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Increment the stackpointer by 4
-;
-
-        .export         incsp4
-        .import         addysp
-
-.proc   incsp4
-
-        ldy     #4
-        jmp     addysp
-
-.endproc
-
-
-
-
-        
diff --git a/libsrc/runtime/incsp5.s b/libsrc/runtime/incsp5.s
deleted file mode 100644 (file)
index 164c625..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Increment the stackpointer by 5
-;
-
-        .export         incsp5
-        .import         addysp
-
-.proc   incsp5
-
-        ldy     #5
-        jmp     addysp
-
-.endproc
-
-
-
-
-        
diff --git a/libsrc/runtime/incsp6.s b/libsrc/runtime/incsp6.s
deleted file mode 100644 (file)
index 1a39384..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Increment the stackpointer by 6
-;
-
-        .export         incsp6
-        .import         addysp
-
-.proc   incsp6
-
-        ldy     #6
-        jmp     addysp
-
-.endproc
-
-
-
-
-        
diff --git a/libsrc/runtime/incsp7.s b/libsrc/runtime/incsp7.s
deleted file mode 100644 (file)
index 8a58381..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Increment the stackpointer by 7
-;
-
-        .export         incsp7
-        .import         addysp
-
-.proc   incsp7
-
-        ldy     #7
-        jmp     addysp
-
-.endproc
-
-
-
-
-        
diff --git a/libsrc/runtime/incsp8.s b/libsrc/runtime/incsp8.s
deleted file mode 100644 (file)
index a77dc3d..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Increment the stackpointer by 8
-;
-
-        .export         incsp8
-        .import         addysp
-
-.proc   incsp8
-
-        ldy     #8
-        jmp     addysp
-
-.endproc
-
-
diff --git a/libsrc/runtime/jmpvec.s b/libsrc/runtime/jmpvec.s
deleted file mode 100644 (file)
index ed77a07..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-12-26
-;
-; CC65 runtime: Jump vector that resides in the data segment so it's address 
-; may be patched at runtime.
-;
-
-        .export jmpvec
-
-.data
-
-jmpvec: jmp     $FFFF
-
-
diff --git a/libsrc/runtime/ladd.s b/libsrc/runtime/ladd.s
deleted file mode 100644 (file)
index 23b3436..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: long add
-;
-
-        .export         tosadd0ax, tosaddeax
-        .import         addysp1
-        .importzp       sp, sreg, tmp1
-
-        .macpack        cpu
-
-; EAX = TOS + EAX
-
-tosadd0ax:
-        ldy     #$00
-        sty     sreg
-        sty     sreg+1
-
-tosaddeax:
-        clc
-.if (.cpu .bitand CPU_ISET_65SC02)
-        adc     (sp)            ; 65SC02 version - saves 2 cycles
-        ldy     #1
-.else
-        ldy     #0
-        adc     (sp),y          ; lo byte
-        iny
-.endif
-        sta     tmp1            ; use as temp storage
-        txa
-        adc     (sp),y          ; byte 1
-        tax
-        iny
-        lda     sreg
-        adc     (sp),y          ; byte 2
-        sta     sreg
-        iny
-        lda     sreg+1
-        adc     (sp),y          ; byte 3
-        sta     sreg+1
-        lda     tmp1            ; load byte 0
-        jmp     addysp1         ; drop TOS
-
diff --git a/libsrc/runtime/laddeq.s b/libsrc/runtime/laddeq.s
deleted file mode 100644 (file)
index 2632ec9..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.04.2000
-;
-; CC65 runtime: += operator
-;
-; On entry, the low byte of the address of the variable to increment is
-; in ptr1, the high byte is in Y, and the increment is in eax.
-;
-
-        .export         laddeq1, laddeqa, laddeq
-        .importzp       sreg, ptr1, tmp1
-
-
-laddeq1:
-        lda     #$01
-
-laddeqa:
-        ldx     #$00
-        stx     sreg
-        stx     sreg+1
-
-laddeq: sty     ptr1+1                  ; Store high byte of address
-        ldy     #$00                    ; Address low byte
-        clc
-
-        adc     (ptr1),y
-        sta     (ptr1),y
-        pha                             ; Save byte 0 of result for later
-
-        iny                             ; Address byte 1
-        txa
-        adc     (ptr1),y                ; Load byte 1
-        sta     (ptr1),y
-        tax
-
-        iny                             ; Address byte 2
-        lda     sreg
-        adc     (ptr1),y
-        sta     (ptr1),y
-        sta     sreg
-
-        iny                             ; Address byte 3
-        lda     sreg+1
-        adc     (ptr1),y
-        sta     (ptr1),y
-        sta     sreg+1
-
-        pla                             ; Retrieve byte 0 of result
-
-        rts                             ; Done
-
-
-
diff --git a/libsrc/runtime/laddeqsp.s b/libsrc/runtime/laddeqsp.s
deleted file mode 100644 (file)
index 46c3c1f..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.10.1998
-;
-; CC65 runtime: += operator for longs on the stack
-;
-
-        .export         laddeq0sp, laddeqysp
-        .importzp       sp, sreg
-
-laddeq0sp:
-        ldy     #0
-laddeqysp:
-        clc
-        adc     (sp),y
-        sta     (sp),y
-        pha
-        iny
-        txa
-        adc     (sp),y
-        sta     (sp),y
-        tax
-        iny
-        lda     sreg
-        adc     (sp),y
-        sta     (sp),y
-        sta     sreg
-        iny
-        lda     sreg+1
-        adc     (sp),y
-        sta     (sp),y
-        sta     sreg+1
-        pla
-        rts
-
diff --git a/libsrc/runtime/land.s b/libsrc/runtime/land.s
deleted file mode 100644 (file)
index 506c071..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: and on longs
-;
-
-        .export         tosand0ax, tosandeax
-        .import         addysp1
-        .importzp       sp, sreg, tmp1
-
-                                   
-tosand0ax:
-        ldy     #$00
-        sty     sreg
-        sty     sreg+1
-
-tosandeax:
-        ldy     #0
-        and     (sp),y          ; byte 0
-        sta     tmp1
-        iny
-        txa
-        and     (sp),y          ; byte 1
-        tax
-        iny
-        lda     sreg
-        and     (sp),y          ; byte 2
-        sta     sreg
-        iny
-        lda     sreg+1
-        and     (sp),y          ; byte 3
-        sta     sreg+1
-
-        lda     tmp1
-        jmp     addysp1
-
diff --git a/libsrc/runtime/lasr.s b/libsrc/runtime/lasr.s
deleted file mode 100644 (file)
index cce9a71..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-;
-; Ullrich von Bassewitz, 2004-06-30
-;
-; CC65 runtime: right shift support for longs
-;
-; Note: The standard declares a shift count that is negative or >= the
-; bitcount of the shifted type for undefined behaviour.
-;
-; Note^2: The compiler knowns about the register/zero page usage of this
-; function, so you need to change the compiler source if you change it!
-;
-
-
-        .export         tosasreax
-        .import         popeax
-        .importzp       sreg, tmp1
-
-
-tosasreax:
-        and     #$1F            ; Bring the shift count into a valid range
-        sta     tmp1            ; Save it
-
-        jsr     popeax          ; Get the left hand operand
-
-        ldy     tmp1            ; Get shift count
-        beq     L9              ; Bail out if shift count zero
-        stx     tmp1            ; Save byte 1
-        ldx     sreg+1          ; Load byte 3
-
-; Do the actual shift. Faster solutions are possible but need a lot more code.
-
-L2:     cpx     #$80            ; Copy bit 31 into the carry
-        ror     sreg+1
-        ror     sreg
-        ror     tmp1
-        ror     a
-        dey
-        bne     L2
-
-; Shift done
-
-        ldx     tmp1
-L9:     rts
-
diff --git a/libsrc/runtime/lbneg.s b/libsrc/runtime/lbneg.s
deleted file mode 100644 (file)
index 0b06d1f..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: boolean negation for longs
-;
-
-        .export         bnegeax
-        .importzp       sreg, tmp1
-
-bnegeax:
-        stx     tmp1
-        ldx     #0              ; High byte of result
-        ora     tmp1
-        ora     sreg
-        ora     sreg+1
-        bne     @L0
-        lda     #1
-        rts
-
-@L0:    txa                     ; X is zero
-        rts
-
diff --git a/libsrc/runtime/lcmp.s b/libsrc/runtime/lcmp.s
deleted file mode 100644 (file)
index d0ba4d8..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-;
-; Piotr Fusik, 15.04.2002
-; originally by Ullrich von Bassewitz
-;
-; Long int compare function - used by the compare operators
-;
-
-        .export         toslcmp
-        .import         incsp4
-        .importzp       sp, sreg, ptr1
-
-
-toslcmp:
-        sta     ptr1
-        stx     ptr1+1          ; EAX now in sreg:ptr1
-
-        ldy     #$03
-        lda     (sp),y
-        sec
-        sbc     sreg+1
-        bne     L4
-
-        dey
-        lda     (sp),y
-        cmp     sreg
-        bne     L1
-
-        dey
-        lda     (sp),y
-        cmp     ptr1+1
-        bne     L1
-
-        dey
-        lda     (sp),y
-        cmp     ptr1
-
-L1:     php                     ; Save flags
-        jsr     incsp4          ; Drop TOS
-        plp                     ; Restore the flags
-        beq     L2
-        bcs     L3
-        lda     #$FF            ; Set the N flag
-L2:     rts
-
-L3:     lda     #$01            ; Clear the N flag
-        rts
-
-L4:     bvc     L5
-        eor     #$FF            ; Fix the N flag if overflow
-        ora     #$01            ; Clear the Z flag
-L5:     php                     ; Save flags
-        jsr     incsp4          ; Drop TOS
-        plp                     ; Restore flags
-        rts
-
-
diff --git a/libsrc/runtime/lcompl.s b/libsrc/runtime/lcompl.s
deleted file mode 100644 (file)
index f856aea..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: long complement
-;
-
-        .export         compleax
-        .importzp       sreg
-
-; eax = ~eax
-
-compleax:
-        eor     #$FF
-        pha
-        txa
-        eor     #$FF
-        tax
-        lda     sreg
-        eor     #$FF
-        sta     sreg
-        lda     sreg+1
-        eor     #$FF
-        sta     sreg+1
-        pla
-        rts
-
diff --git a/libsrc/runtime/ldai.s b/libsrc/runtime/ldai.s
deleted file mode 100644 (file)
index 6d90f0b..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.08.1998
-;
-; CC65 runtime: Load a indirect from address in ax
-;
-
-        .export         ldaidx
-        .importzp       ptr1
-
-.proc   ldaidx
-        sta     ptr1
-        stx     ptr1+1
-        ldx     #$00
-        lda     (ptr1),y
-        bpl     @L1
-        dex
-@L1:    rts
-.endproc
-
diff --git a/libsrc/runtime/ldau0sp.s b/libsrc/runtime/ldau0sp.s
deleted file mode 100644 (file)
index a986d52..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 11.04.1999
-;
-; CC65 runtime: Load an unsigned char indirect from pointer somewhere in stack
-;
-
-        .export         ldau00sp, ldau0ysp
-        .importzp       sp, ptr1
-
-        .macpack        cpu
-
-ldau00sp:
-        ldy     #1
-ldau0ysp:
-        lda     (sp),y
-        sta     ptr1+1
-        dey
-        lda     (sp),y
-        sta     ptr1
-        ldx     #0
-.if (.cpu .bitand CPU_ISET_65SC02)
-        lda     (ptr1)          ; Save one cycle for the C02
-.else
-        lda     (ptr1,x)
-.endif
-        rts
-
diff --git a/libsrc/runtime/ldaui.s b/libsrc/runtime/ldaui.s
deleted file mode 100644 (file)
index aa3a41c..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.08.1998
-;
-; CC65 runtime: Load a unsigned indirect from address in ax
-;
-
-        .export         ldauidx
-        .importzp       ptr1
-
-.proc   ldauidx
-        sta     ptr1
-        stx     ptr1+1
-        ldx     #0
-        lda     (ptr1),y
-        rts
-.endproc
diff --git a/libsrc/runtime/ldauisp.s b/libsrc/runtime/ldauisp.s
deleted file mode 100644 (file)
index 1afcf24..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 11.04.1999
-;
-; CC65 runtime: Load an unsigned char indirect from pointer somewhere in stack
-;
-
-        .export         ldaui0sp, ldauiysp
-        .importzp       sp, ptr1
-
-ldaui0sp:
-        ldy     #1
-ldauiysp:
-        lda     (sp),y
-        sta     ptr1+1
-        dey
-        lda     (sp),y
-        sta     ptr1
-        txa
-        tay
-        ldx     #0
-        lda     (ptr1),y
-        rts
-
-                                   
diff --git a/libsrc/runtime/ldaxi.s b/libsrc/runtime/ldaxi.s
deleted file mode 100644 (file)
index f2ac653..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.08.1998
-;
-; CC65 runtime: Load ax indirect from address in ax
-;
-
-        .export         ldaxi, ldaxidx
-        .importzp       ptr1
-
-ldaxi:  ldy     #1
-ldaxidx:
-        sta     ptr1
-        stx     ptr1+1
-        lda     (ptr1),y
-        tax
-        dey
-        lda     (ptr1),y
-        rts
-
diff --git a/libsrc/runtime/ldaxsp.s b/libsrc/runtime/ldaxsp.s
deleted file mode 100644 (file)
index aa94b43..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.08.1998
-;
-; CC65 runtime: Load ax from offset in stack
-;
-
-        .export         ldax0sp, ldaxysp
-        .importzp       sp
-
-; Beware: The optimizer knows about the value in Y after return!
-
-ldax0sp:
-        ldy     #1
-ldaxysp:
-        lda     (sp),y          ; get high byte
-        tax                     ; and save it
-        dey                     ; point to lo byte
-        lda     (sp),y          ; load low byte
-        rts
-
diff --git a/libsrc/runtime/ldeaxi.s b/libsrc/runtime/ldeaxi.s
deleted file mode 100644 (file)
index 26b208f..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.08.1998
-;
-; CC65 runtime: Load eax indirect from address in ax
-;
-
-        .export         ldeaxidx, ldeaxi
-        .importzp       sreg, ptr1
-
-ldeaxi: ldy     #3
-ldeaxidx:
-        sta     ptr1
-        stx     ptr1+1
-        lda     (ptr1),y
-        dey
-        sta     sreg+1
-        lda     (ptr1),y
-        dey
-        sta     sreg
-        lda     (ptr1),y
-        dey
-        tax
-        lda     (ptr1),y
-        rts
-
diff --git a/libsrc/runtime/ldeaxysp.s b/libsrc/runtime/ldeaxysp.s
deleted file mode 100644 (file)
index 1d65e9c..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.06.1998
-;
-; CC65 runtime: Load a long from somewhere in the stack
-;
-; Beware: The optimizer knows about the register contents after calling
-;         this function!
-;
-
-
-        .export         ldeax0sp, ldeaxysp
-        .importzp       sreg, sp
-
-ldeax0sp:
-        ldy     #3
-ldeaxysp:
-        lda     (sp),y
-        sta     sreg+1
-        dey
-        lda     (sp),y
-        sta     sreg
-        dey
-        lda     (sp),y
-        tax
-        dey
-        lda     (sp),y
-        rts
-
diff --git a/libsrc/runtime/ldec.s b/libsrc/runtime/ldec.s
deleted file mode 100644 (file)
index 53b6009..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; Ullrich von Bassewitz, 29.12.1999
-;
-; CC65 runtime: Decrement eax by value in Y
-;
-
-        .export         deceaxy
-        .importzp       sreg, tmp1
-
-deceaxy:
-        sty     tmp1
-        sec
-        sbc     tmp1
-        sta     tmp1
-        txa
-        sbc     #0
-        tax
-        lda     sreg
-        sbc     #0
-        sta     sreg
-        lda     sreg+1
-        sbc     #0
-        sta     sreg+1
-        lda     tmp1
-        rts
-
diff --git a/libsrc/runtime/ldiv.s b/libsrc/runtime/ldiv.s
deleted file mode 100644 (file)
index b9ed897..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-;
-; Ullrich von Bassewitz, 17.08.1998
-;
-; CC65 runtime: division for signed long ints
-;
-
-; When negating values, we will ignore the possibility here, that one of the
-; values if $80000000, in which case the negate will fail.
-
-        .export         tosdiv0ax, tosdiveax
-        .import         poplsargs, udiv32, negeax
-        .importzp       sreg, ptr1, tmp1, tmp2
-
-tosdiv0ax:
-        ldy     #$00
-        sty     sreg
-        sty     sreg+1
-
-tosdiveax:
-        jsr     poplsargs       ; Get arguments from stack, adjust sign
-        jsr     udiv32          ; Do the division, result is in (ptr1:sreg)
-        ldx     ptr1+1          ; Load byte 1 of result
-
-; Adjust the sign of the result
-
-        lda     tmp1            ; Get sign of left operand
-        eor     tmp2            ; Calculate sign of result
-        bpl     Pos             ; Jump if result positive
-
-; Result is negative
-
-        lda     ptr1            ; Load byte 0
-        jmp     negeax          ; Negate value
-
-; Result is positive
-
-Pos:    lda     ptr1
-        rts
-
-
diff --git a/libsrc/runtime/le.s b/libsrc/runtime/le.s
deleted file mode 100644 (file)
index 1a875ec..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Compare <= for signed ints
-;
-
-        .export         tosle00, toslea0, tosleax
-        .import         tosicmp, boolle
-
-tosle00:
-        lda     #$00
-toslea0:
-        ldx     #$00
-tosleax:
-        jsr     tosicmp         ; Set flags
-        jmp     boolle          ; Convert to boolean
-
diff --git a/libsrc/runtime/leaaxsp.s b/libsrc/runtime/leaaxsp.s
deleted file mode 100644 (file)
index 0741170..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-08-31
-;
-; CC65 runtime: Load effective address with offset in A/X relative to SP
-;
-
-        .export         leaaxsp, leaa0sp
-        .importzp       sp
-
-leaa0sp:
-        ldx     #$00
-leaaxsp:
-        clc
-        adc     sp
-        pha
-        txa
-        adc     sp+1
-        tax
-        pla
-        rts
-
-
-
diff --git a/libsrc/runtime/leave.s b/libsrc/runtime/leave.s
deleted file mode 100644 (file)
index 8f4e055..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-;  
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: function epilogue
-;
-
-; exit a function.  pop stack and rts. The function comes in different
-; flavours that provide default values for the return val, or drop a local
-; stack frame with size in y.
-
-        .export         leave00, leave0, leavey00, leavey0, leavey
-        .export         leave
-        .import         addysp
-        .importzp       sp
-
-leave00:
-        lda     #0
-leave0: ldx     #0
-        beq     leave
-
-leavey00:
-        lda     #0              ; "return 0"
-leavey0:
-        ldx     #0              ; return < 256
-leavey:
-        jsr     addysp          ; drop stack frame
-leave:  pha                     ; save A a sec
-        ldy     #0
-        lda     (sp),y          ; that's the pushed arg size
-        sec                     ; Count the byte, the count's stored in
-        adc     sp
-        sta     sp
-        bcc     L1
-        inc     sp+1
-L1:     pla                     ; Get return value back
-        rts
-
diff --git a/libsrc/runtime/leq.s b/libsrc/runtime/leq.s
deleted file mode 100644 (file)
index 44316aa..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: long equal
-;
-
-        .export         toseqeax
-        .import         toslcmp, booleq
-
-toseqeax:                       
-        jsr     toslcmp         ; Set flags
-        jmp     booleq          ; Convert to boolean
-
-
-
diff --git a/libsrc/runtime/lge.s b/libsrc/runtime/lge.s
deleted file mode 100644 (file)
index 768175c..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; CC65 runtime: Compare >= for long ints
-;
-
-        .export         tosgeeax
-        .import         toslcmp, boolge
-
-tosgeeax:
-        jsr     toslcmp         ; Set the flags
-        jmp     boolge          ; Convert to boolean
-
diff --git a/libsrc/runtime/lgt.s b/libsrc/runtime/lgt.s
deleted file mode 100644 (file)
index a7ff055..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; CC65 runtime: Compare > for long ints
-;
-
-        .export         tosgteax
-        .import         toslcmp, boolgt
-
-tosgteax:
-        jsr     toslcmp         ; Set the flags
-        jmp     boolgt          ; Convert to boolean
-
-
diff --git a/libsrc/runtime/linc.s b/libsrc/runtime/linc.s
deleted file mode 100644 (file)
index 1a0de38..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 29.12.1999
-;
-; CC65 runtime: Increment eax by value in Y
-;
-
-        .export         inceaxy
-        .importzp       ptr4, sreg
-
-.proc   inceaxy
-
-        sty     ptr4
-        clc
-        adc     ptr4
-        bcc     @L9
-        inx
-        bne     @L9
-        inc     sreg
-        bne     @L9
-        inc     sreg+1
-@L9:    rts
-
-.endproc
-
diff --git a/libsrc/runtime/lle.s b/libsrc/runtime/lle.s
deleted file mode 100644 (file)
index 6a73e21..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; CC65 runtime: Compare <= for long ints
-;
-
-        .export         tosleeax
-        .import         toslcmp, boolle
-
-tosleeax:
-        jsr     toslcmp         ; Set the flags
-        jmp     boolle          ; Convert to boolean
-
diff --git a/libsrc/runtime/llt.s b/libsrc/runtime/llt.s
deleted file mode 100644 (file)
index 242664d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; CC65 runtime: Compare < for long ints
-;
-
-        .export         toslteax
-        .import         toslcmp, boollt
-
-toslteax:
-        jsr     toslcmp         ; Set the flags
-        jmp     boollt          ; Convert to boolean
diff --git a/libsrc/runtime/lmod.s b/libsrc/runtime/lmod.s
deleted file mode 100644 (file)
index 74deb23..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; CC65 runtime: modulo operation for long signed ints
-;
-
-; When negating values, we will ignore the possibility here, that one of the
-; values if $8000, in which case the negate will fail.
-
-        .export         tosmod0ax, tosmodeax
-        .import         poplsargs, udiv32, negeax
-        .importzp       sreg, ptr1, ptr2, tmp1, tmp3, tmp4
-
-tosmod0ax:
-        ldy     #$00
-        sty     sreg
-        sty     sreg+1
-
-tosmodeax:                         
-        jsr     poplsargs       ; Get arguments from stack, adjust sign
-        jsr     udiv32          ; Do the division, remainder is in (ptr2:tmp3:tmp4)
-
-; Load the result
-
-        lda     ptr2
-        ldx     ptr2+1
-        ldy     tmp3
-        sty     sreg
-        ldy     tmp4
-        sty     sreg+1
-
-; Check the sign of the result. It is the sign of the left operand.
-
-        bit     tmp1            ; Check sign of left operand
-        bpl     Pos             ; Jump if result is positive
-
-; Result is negative
-
-        jmp     negeax          ; Negate result
-
-; Result is positive
-
-Pos:    rts                     ; Done
-
diff --git a/libsrc/runtime/lmul.s b/libsrc/runtime/lmul.s
deleted file mode 100644 (file)
index 7ad2b2a..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-;
-; Ullrich von Bassewitz, 13.08.1998
-;
-; CC65 runtime: multiplication for long (unsigned) ints
-;
-
-        .export         tosumul0ax, tosumuleax, tosmul0ax, tosmuleax
-        .import         addysp1
-        .importzp       sp, sreg, tmp1, tmp2, tmp3, tmp4, ptr1, ptr3, ptr4
-
-tosmul0ax:
-tosumul0ax:
-        ldy     #$00    
-        sty     sreg
-        sty     sreg+1
-
-tosmuleax:
-tosumuleax:
-mul32:  sta     ptr1
-        stx     ptr1+1          ; op2 now in ptr1/sreg
-        ldy     #0
-        lda     (sp),y
-        sta     ptr3
-        iny
-        lda     (sp),y
-        sta     ptr3+1
-        iny
-        lda     (sp),y
-        sta     ptr4
-        iny
-        lda     (sp),y
-        sta     ptr4+1          ; op1 in pre3/ptr4
-        jsr     addysp1         ; Drop TOS
-
-; Do (ptr1:sreg)*(ptr3:ptr4) --> EAX.
-
-        lda     #0
-        sta     tmp4
-        sta     tmp3
-        sta     tmp2
-        ldy     #32
-L0:     lsr     tmp4
-        ror     tmp3
-        ror     tmp2
-        ror     a
-        ror     sreg+1
-        ror     sreg
-        ror     ptr1+1
-        ror     ptr1
-        bcc     L1
-        clc
-        adc     ptr3
-        pha
-        lda     ptr3+1
-        adc     tmp2
-        sta     tmp2
-        lda     ptr4
-        adc     tmp3
-        sta     tmp3
-        lda     ptr4+1
-        adc     tmp4
-        sta     tmp4
-        pla
-L1:     dey
-        bpl     L0
-        lda     ptr1            ; Load the low result word
-        ldx     ptr1+1
-        rts
-
diff --git a/libsrc/runtime/lne.s b/libsrc/runtime/lne.s
deleted file mode 100644 (file)
index 58ae99a..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: long not equal
-;
-
-        .export         tosneeax
-        .import         toslcmp, boolne
-
-tosneeax:
-        jsr     toslcmp         ; Set flags
-        jmp     boolne          ; Convert to boolean
-
-
diff --git a/libsrc/runtime/lneg.s b/libsrc/runtime/lneg.s
deleted file mode 100644 (file)
index a5c11c6..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: negation on longs
-;
-
-;
-; eax = -eax
-;
-        .export         negeax
-        .importzp       sreg
-
-negeax: clc
-        eor     #$FF
-        adc     #1
-        pha
-        txa
-        eor     #$FF
-        adc     #0
-        tax
-        lda     sreg
-        eor     #$FF
-        adc     #0
-        sta     sreg
-        lda     sreg+1
-        eor     #$FF
-        adc     #0
-        sta     sreg+1
-        pla
-        rts
-
diff --git a/libsrc/runtime/lor.s b/libsrc/runtime/lor.s
deleted file mode 100644 (file)
index a74b330..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: or on longs
-;
-
-        .export         tosor0ax, tosoreax
-        .import         addysp1
-        .importzp       sp, sreg, tmp1
-                                  
-
-tosor0ax:
-        ldy     #$00
-        sty     sreg
-        sty     sreg+1 
-
-tosoreax:
-        ldy     #0
-        ora     (sp),y          ; byte 0
-        sta     tmp1
-        iny
-        txa
-        ora     (sp),y          ; byte 1
-        tax
-        iny
-        lda     sreg
-        ora     (sp),y          ; byte 2
-        sta     sreg
-        iny
-        lda     sreg+1
-        ora     (sp),y          ; byte 3
-        sta     sreg+1
-
-        lda     tmp1
-        jmp     addysp1
-
diff --git a/libsrc/runtime/lpop.s b/libsrc/runtime/lpop.s
deleted file mode 100644 (file)
index 7d281db..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-;
-; Ullrich von Bassewitz, 29.12.1999
-;
-; CC65 runtime: long pop
-;
-
-        .export         popeax
-        .import         incsp4
-        .importzp       sp, sreg
-
-
-popeax: ldy     #3
-        lda     (sp),y
-        sta     sreg+1
-        dey
-        lda     (sp),y
-        sta     sreg
-        dey
-        lda     (sp),y
-        tax
-        dey
-        lda     (sp),y
-        jmp     incsp4
-
-
diff --git a/libsrc/runtime/lpush.s b/libsrc/runtime/lpush.s
deleted file mode 100644 (file)
index 074b432..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: long push
-;
-
-;
-; push eax on stack
-;
-        .export         pushl0, push0ax, pusheax
-        .import         decsp4
-        .importzp       sp, sreg
-
-pushl0:
-        lda     #0
-        tax
-push0ax:
-        ldy     #0
-        sty     sreg
-        sty     sreg+1
-pusheax:
-        pha                     ; decsp will destroy A (but not X)
-        jsr     decsp4
-        ldy     #3
-        lda     sreg+1
-        sta     (sp),y
-        dey
-        lda     sreg
-        sta     (sp),y
-        dey
-        txa
-        sta     (sp),y
-        dey
-        pla
-        sta     (sp),y
-        rts
-
diff --git a/libsrc/runtime/lrsub.s b/libsrc/runtime/lrsub.s
deleted file mode 100644 (file)
index fd519ca..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: long sub reversed
-;
-
-;
-; EAX = EAX - TOS
-;
-        .export         tosrsub0ax, tosrsubeax
-        .import         addysp1
-        .importzp       sp, sreg, tmp1
-
-tosrsub0ax:
-        ldy     #$00
-        sty     sreg
-        sty     sreg+1
-
-tosrsubeax:                         
-        ldy     #0
-        sec
-        sbc     (sp),y          ; byte 0
-        sta     tmp1            ; use as temp storage
-        txa
-        iny
-        sbc     (sp),y          ; byte 1
-        tax
-        iny
-        lda     sreg
-        sbc     (sp),y          ; byte 2
-        sta     sreg
-        iny
-        lda     sreg+1
-        sbc     (sp),y          ; byte 3
-        sta     sreg+1
-        lda     tmp1
-        jmp     addysp1         ; drop TOS
-
diff --git a/libsrc/runtime/lsave.s b/libsrc/runtime/lsave.s
deleted file mode 100644 (file)
index fa21e46..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.08.1998
-;
-; CC65 runtime: save ax into temp storage/restore ax from temp storage
-;
-
-        .export         saveeax, resteax
-        .importzp       sreg, regsave
-
-saveeax:
-        sta     regsave
-        stx     regsave+1
-        lda     sreg
-        sta     regsave+2
-        lda     sreg+1
-        sta     regsave+3
-        lda     regsave
-        rts
-
-resteax:
-        lda     regsave+3
-        sta     sreg+1
-        lda     regsave+2
-        sta     sreg
-        ldx     regsave+1
-        lda     regsave
-        rts
-
diff --git a/libsrc/runtime/lshelp.s b/libsrc/runtime/lshelp.s
deleted file mode 100644 (file)
index 8a2fca1..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-;
-; Ullrich von Bassewitz, 13.08.1998
-;
-; CC65 runtime: helper stuff for mod/div/mul with long signed ints
-;
-
-; When negating values, we will ignore the possibility here, that one of the
-; values if $80000000, in which case the negate will fail.
-
-        .export         poplsargs
-        .import         getlop
-        .importzp       sreg, tmp1, tmp2, ptr1, ptr3, ptr4
-
-poplsargs:
-        jsr     getlop          ; Get the operands
-
-; Remember the signs of the operands (that is, the high bytes) in tmp1 and
-; tmp2. Make both operands positive.
-
-        lda     sreg+1          ; Is the left operand negative?
-        sta     tmp1            ; Remember the sign for later
-        bpl     L1              ; Jump if not
-
-        clc                     ; Make it positive
-        lda     ptr1
-        eor     #$FF
-        adc     #$01
-        sta     ptr1
-        lda     ptr1+1
-        eor     #$FF
-        adc     #$00
-        sta     ptr1+1
-        lda     sreg
-        eor     #$FF
-        adc     #$00
-        sta     sreg
-        lda     sreg+1
-        eor     #$FF
-        adc     #$00
-        sta     sreg+1
-
-L1:     lda     ptr4+1          ; Is the right operand nagative?
-        sta     tmp2            ; Remember the sign for later
-        bpl     L2              ; Jump if not
-
-        clc                     ; Make it positive
-        lda     ptr3
-        eor     #$FF
-        adc     #$01
-        sta     ptr3
-        lda     ptr3+1
-        eor     #$FF
-        adc     #$00
-        sta     ptr3+1
-        lda     ptr4
-        eor     #$FF
-        adc     #$00
-        sta     ptr4
-        lda     ptr4+1
-        eor     #$FF
-        adc     #$00
-        sta     ptr4+1
-
-L2:     rts
-
diff --git a/libsrc/runtime/lshl.s b/libsrc/runtime/lshl.s
deleted file mode 100644 (file)
index 78c065e..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-;
-; Ullrich von Bassewitz, 2004-06-30
-;
-; CC65 runtime: left shift support for long and unsigned long
-;
-; Note: The standard declares a shift count that is negative or >= the
-; bitcount of the shifted type for undefined behaviour.
-;
-; Note^2: The compiler knowns about the register/zero page usage of this
-; function, so you need to change the compiler source if you change it!
-;
-
-
-        .export         tosasleax, tosshleax
-        .import         popeax
-        .importzp       sreg, tmp1
-
-
-tosshleax:
-tosasleax:
-        and     #$1F            ; Bring the shift count into a valid range
-        sta     tmp1            ; Save it
-
-        jsr     popeax          ; Get the left hand operand
-
-        ldy     tmp1            ; Get shift count
-        beq     L9              ; Bail out if shift count zero
-        stx     tmp1            ; Save byte 1
-
-; Do the actual shift. Faster solutions are possible but need a lot more code.
-
-L2:     asl     a
-        rol     tmp1
-        rol     sreg
-        rol     sreg+1
-        dey
-        bne     L2
-
-; Shift done
-
-        ldx     tmp1
-L9:     rts
-
-
diff --git a/libsrc/runtime/lshr.s b/libsrc/runtime/lshr.s
deleted file mode 100644 (file)
index 09d585a..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-;
-; Ullrich von Bassewitz, 2004-06-30
-;
-; CC65 runtime: right shift support for unsigned longs
-;
-; Note: The standard declares a shift count that is negative or >= the
-; bitcount of the shifted type for undefined behaviour.
-;
-; Note^2: The compiler knowns about the register/zero page usage of this
-; function, so you need to change the compiler source if you change it!
-;
-
-
-        .export         tosshreax
-        .import         popeax
-        .importzp       sreg, tmp1
-
-
-tosshreax:
-        and     #$1F            ; Bring the shift count into a valid range
-        sta     tmp1            ; Save it
-
-        jsr     popeax          ; Get the left hand operand
-
-        ldy     tmp1            ; Get shift count
-        beq     L9              ; Bail out if shift count zero
-        stx     tmp1            ; Save byte 1
-
-; Do the actual shift. Faster solutions are possible but need a lot more code.
-
-L2:     lsr     sreg+1
-        ror     sreg
-        ror     tmp1
-        ror     a
-        dey
-        bne     L2
-
-; Shift done
-
-        ldx     tmp1
-L9:     rts
-
-
-
-
-
-
-
diff --git a/libsrc/runtime/lsub.s b/libsrc/runtime/lsub.s
deleted file mode 100644 (file)
index 926d52e..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: long sub
-;
-
-;
-; EAX = TOS - EAX
-;
-        .export         tossub0ax, tossubeax
-        .import         addysp1
-        .importzp       sp, sreg
-
-        .macpack        cpu
-
-tossub0ax:
-        ldy     #$00
-        sty     sreg
-        sty     sreg+1
-
-tossubeax:
-        sec
-        eor     #$FF
-.if (.cpu .bitand CPU_ISET_65SC02)
-        adc     (sp)            ; 65SC02 version - saves 2 cycles
-        ldy     #1
-.else
-        ldy     #0
-        adc     (sp),y          ; lo byte
-        iny
-.endif
-        pha                     ; Save low byte
-        txa
-        eor     #$FF
-        adc     (sp),y          ; byte 1
-        tax
-        iny
-        lda     (sp),y
-        sbc     sreg            ; byte 2
-        sta     sreg
-        iny
-        lda     (sp),y
-        sbc     sreg+1          ; byte 3
-        sta     sreg+1
-        pla                     ; Restore byte 0
-        jmp     addysp1         ; Drop TOS
-
diff --git a/libsrc/runtime/lsubeq.s b/libsrc/runtime/lsubeq.s
deleted file mode 100644 (file)
index 9f5853d..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-;                                 
-; Ullrich von Bassewitz, 07.04.2000
-;
-; CC65 runtime: -= operator
-;
-; On entry, the low byte of the address of the variable to decrement is
-; in ptr1, the high byte is in Y, and the decrement is in eax.
-;
-
-        .export         lsubeq1, lsubeqa, lsubeq
-        .importzp       sreg, ptr1
-
-
-lsubeq1:
-        lda     #$01
-
-lsubeqa:
-        ldx     #$00
-        stx     sreg
-        stx     sreg+1
-
-lsubeq: sty     ptr1+1                  ; Store high byte of address
-        ldy     #$00                    ; Address low byte
-        sec
-
-        eor     #$FF
-        adc     (ptr1),y                ; Subtract byte 0
-        sta     (ptr1),y
-        pha                             ; Save byte 0 of result for later
-
-        iny                             ; Address byte 1
-        txa
-        eor     #$FF
-        adc     (ptr1),y                ; Subtract byte 1
-        sta     (ptr1),y
-        tax
-
-        iny                             ; Address byte 2
-        lda     (ptr1),y
-        sbc     sreg
-        sta     (ptr1),y
-        sta     sreg
-
-        iny                             ; Address byte 3
-        lda     (ptr1),y
-        sbc     sreg+1
-        sta     (ptr1),y
-        sta     sreg+1
-
-        pla                             ; Retrieve byte 0 of result
-
-        rts                             ; Done
-
-
-
-
diff --git a/libsrc/runtime/lsubeqsp.s b/libsrc/runtime/lsubeqsp.s
deleted file mode 100644 (file)
index f32930c..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.10.1998
-;
-; CC65 runtime: -= operator for longs on the stack
-;
-
-        .export         lsubeq0sp, lsubeqysp
-        .importzp       sp, sreg
-
-lsubeq0sp:
-        ldy     #0
-lsubeqysp:
-        sec
-        eor     #$FF
-        adc     (sp),y
-        sta     (sp),y
-        pha                     ; Save low byte
-        iny
-        txa
-        eor     #$FF
-        adc     (sp),y
-        sta     (sp),y
-        tax
-        iny
-        lda     (sp),y
-        sbc     sreg
-        sta     (sp),y
-        sta     sreg
-        iny
-        lda     (sp),y
-        sbc     sreg+1
-        sta     (sp),y
-        sta     sreg+1
-        pla
-        rts
-
diff --git a/libsrc/runtime/lt.s b/libsrc/runtime/lt.s
deleted file mode 100644 (file)
index f42a0e7..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Compare < for signed ints
-;
-
-        .export         toslt00, toslta0, tosltax
-        .import         tosicmp, boollt
-
-toslt00:
-        lda     #$00
-toslta0:
-        ldx     #$00
-tosltax:
-        jsr     tosicmp         ; Set flags
-        jmp     boollt          ; Convert to boolean
-
diff --git a/libsrc/runtime/ltest.s b/libsrc/runtime/ltest.s
deleted file mode 100644 (file)
index 6027b8d..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; CC65 runtime: test long in eax
-;
-
-        .export         utsteax, tsteax
-        .importzp       sreg, tmp1
-
-tsteax:
-utsteax:
-        tay                     ; Save value
-        stx     tmp1
-        ora     tmp1
-        ora     sreg
-        ora     sreg+1
-        beq     L9
-        tya
-        ldy     #1              ; Force NE
-L9:     rts                               
-
-
diff --git a/libsrc/runtime/ludiv.s b/libsrc/runtime/ludiv.s
deleted file mode 100644 (file)
index 149c98a..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-;
-; Ullrich von Bassewitz, 17.08.1998
-;
-; CC65 runtime: division for long unsigned ints
-;
-
-        .export         tosudiv0ax, tosudiveax, getlop, udiv32
-        .import         addysp1
-        .importzp       sp, sreg, tmp3, tmp4, ptr1, ptr2, ptr3, ptr4
-
-tosudiv0ax:
-        ldy     #$00
-        sty     sreg
-        sty     sreg+1
-
-tosudiveax:                         
-        jsr     getlop          ; Get the paramameters
-        jsr     udiv32          ; Do the division
-        lda     ptr1            ; Result is in ptr1:sreg
-        ldx     ptr1+1
-        rts
-
-; Pop the parameters for the long division and put it into the relevant
-; memory cells. Called from the signed divisions also.
-
-getlop: sta     ptr3            ; Put right operand in place
-        stx     ptr3+1
-        lda     sreg
-        sta     ptr4
-        lda     sreg+1
-        sta     ptr4+1
-
-        ldy     #0              ; Put left operand in place
-        lda     (sp),y
-        sta     ptr1
-        iny
-        lda     (sp),y
-        sta     ptr1+1
-        iny
-        lda     (sp),y
-        sta     sreg
-        iny
-        lda     (sp),y
-        sta     sreg+1
-        jmp     addysp1         ; Drop parameters
-
-; Do (ptr1:sreg) / (ptr3:ptr4) --> (ptr1:sreg), remainder in (ptr2:tmp3:tmp4)
-; This is also the entry point for the signed division
-
-udiv32: lda     #0
-        sta     ptr2+1
-        sta     tmp3
-        sta     tmp4
-;       sta     ptr1+1
-        ldy     #32
-L0:     asl     ptr1
-        rol     ptr1+1
-        rol     sreg
-        rol     sreg+1
-        rol     a
-        rol     ptr2+1
-        rol     tmp3
-        rol     tmp4
-
-; Do a subtraction. we do not have enough space to store the intermediate
-; result, so we may have to do the subtraction twice.
-
-        pha
-        cmp     ptr3
-        lda     ptr2+1
-        sbc     ptr3+1
-        lda     tmp3
-        sbc     ptr4
-        lda     tmp4
-        sbc     ptr4+1
-        bcc     L1
-
-; Overflow, do the subtraction again, this time store the result
-
-        sta     tmp4            ; We have the high byte already
-        pla
-        sbc     ptr3            ; byte 0
-        pha
-        lda     ptr2+1
-        sbc     ptr3+1
-        sta     ptr2+1          ; byte 1
-        lda     tmp3
-        sbc     ptr4
-        sta     tmp3            ; byte 2
-        inc     ptr1            ; Set result bit
-
-L1:     pla
-        dey
-        bne     L0
-        sta     ptr2
-        rts
-
-
diff --git a/libsrc/runtime/luge.s b/libsrc/runtime/luge.s
deleted file mode 100644 (file)
index 38e06f0..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Ullrich von Bassewitz, 10.12.1998
-;
-; CC65 runtime: Compare >= for long unsigneds
-;
-
-        .export         tosugeeax
-        .import         toslcmp, booluge
-
-tosugeeax:
-        jsr     toslcmp         ; Set the flags
-        jmp     booluge         ; Convert to boolean
-
diff --git a/libsrc/runtime/lugt.s b/libsrc/runtime/lugt.s
deleted file mode 100644 (file)
index 19254e9..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Ullrich von Bassewitz, 10.12.1998
-;
-; CC65 runtime: Compare > for long unsigneds
-;
-
-        .export         tosugteax
-        .import         toslcmp, boolugt
-
-tosugteax:
-        jsr     toslcmp         ; Set the flags
-        jmp     boolugt         ; Convert to boolean
-
-
diff --git a/libsrc/runtime/lule.s b/libsrc/runtime/lule.s
deleted file mode 100644 (file)
index 5a802c9..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Ullrich von Bassewitz, 10.12.1998
-;
-; CC65 runtime: Compare <= for long unsigneds
-;
-
-        .export         tosuleeax
-        .import         toslcmp, boolule
-
-tosuleeax:
-        jsr     toslcmp         ; Set the flags
-        jmp     boolule         ; Convert to boolean
-
diff --git a/libsrc/runtime/lult.s b/libsrc/runtime/lult.s
deleted file mode 100644 (file)
index 905ff1d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Ullrich von Bassewitz, 10.12.1998
-;
-; CC65 runtime: Compare < for long unsigneds
-;
-
-        .export         tosulteax
-        .import         toslcmp, boolult
-
-tosulteax:
-        jsr     toslcmp         ; Set the flags
-        jmp     boolult         ; Convert to boolean
diff --git a/libsrc/runtime/lumod.s b/libsrc/runtime/lumod.s
deleted file mode 100644 (file)
index e290e11..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; Ullrich von Bassewitz, 27.09.1998
-;
-; CC65 runtime: modulo operation for long unsigned ints
-;
-
-        .export         tosumod0ax, tosumodeax
-        .import         getlop, udiv32
-        .importzp       sreg, tmp3, tmp4, ptr2
-
-tosumod0ax:                          
-        ldy     #$00
-        sty     sreg
-        sty     sreg+1
-
-tosumodeax:
-        jsr     getlop          ; Get the paramameters
-        jsr     udiv32          ; Do the division
-        lda     tmp3            ; Remainder is in ptr2:tmp3:tmp4
-        sta     sreg
-        lda     tmp4
-        sta     sreg+1
-        lda     ptr2
-        ldx     ptr2+1
-        rts
-
diff --git a/libsrc/runtime/lxor.s b/libsrc/runtime/lxor.s
deleted file mode 100644 (file)
index ce21ef3..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: xor on longs
-;
-
-        .export         tosxor0ax, tosxoreax
-        .import         addysp1
-        .importzp       sp, sreg, tmp1
-
-tosxor0ax:
-        ldy     #$00
-        sty     sreg
-        sty     sreg+1
-
-tosxoreax:                         
-        ldy     #0
-        eor     (sp),y          ; byte 0
-        sta     tmp1
-        iny
-        txa
-        eor     (sp),y          ; byte 1
-        tax
-        iny
-        lda     sreg
-        eor     (sp),y          ; byte 2
-        sta     sreg
-        iny
-        lda     sreg+1
-        eor     (sp),y          ; byte 3
-        sta     sreg+1
-
-        lda     tmp1
-        jmp     addysp1
-
-
-
diff --git a/libsrc/runtime/makebool.s b/libsrc/runtime/makebool.s
deleted file mode 100644 (file)
index a15b24b..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.10.1998
-;
-; CC65 runtime: Make boolean according to flags
-;
-
-        .export         boolne, booleq, boollt, boolle, boolgt, boolge
-        .export         boolult, boolule, boolugt, booluge
-
-
-boolne: bne     ret1
-        ldx     #$00
-        txa
-        rts
-
-
-booleq: beq     ret1
-        ldx     #$00
-        txa
-        rts
-
-
-boolle: beq     ret1
-boollt: bmi     ret1
-        ldx     #$00
-        txa
-        rts
-
-
-boolgt: beq     L0
-boolge: bpl     ret1
-L0:     ldx     #$00
-        txa
-        rts
-
-
-boolule:
-        beq     ret1
-boolult:
-        bcc     ret1
-        ldx     #$00
-        txa
-        rts
-
-
-boolugt:
-        beq     L1
-booluge:
-        bcs     ret1
-L1:     ldx     #$00
-        txa
-        rts
-
-
-ret1:   ldx     #$00
-        lda     #$01
-        rts
-
-
-
diff --git a/libsrc/runtime/mod.s b/libsrc/runtime/mod.s
deleted file mode 100644 (file)
index c4331ed..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; CC65 runtime: modulo operation for signed ints
-;
-
-; When negating values, we will ignore the possibility here, that one of the
-; values if $8000, in which case the negate will fail.
-
-        .export         tosmoda0, tosmodax
-        .import         popsargs, udiv16, negax
-        .importzp       ptr1, tmp1
-
-tosmoda0:
-        ldx     #0
-tosmodax:
-        jsr     popsargs        ; Get arguments from stack, adjust sign
-        jsr     udiv16          ; Do the division
-        lda     ptr1            ; Load low byte of result
-        ldx     ptr1+1          ; Load high byte of result
-
-; Adjust the sign of the result. tmp1 contains the high byte of the left
-; operand, tmp2 contains the high byte of the right operand. The sign of
-; the result of the modulo operation is the same as that of the left
-; operand
-
-        bit     tmp1
-        bpl     Pos             ; Jump if sign of result positive
-
-; Result is negative
-
-        jmp     negax           ; Adjust the sign
-
-; Result is positive
-
-Pos:    rts
-
diff --git a/libsrc/runtime/mul.s b/libsrc/runtime/mul.s
deleted file mode 100644 (file)
index 6344e3a..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-08-17
-;
-; CC65 runtime: multiplication for ints
-;
-
-        .export         tosumulax, tosmulax
-        .import         mul8x16, mul8x16a       ; in mul8.s
-        .import         popsreg
-        .importzp       sreg, tmp1, ptr4
-
-
-;---------------------------------------------------------------------------
-; 16x16 multiplication routine
-
-tosmulax:
-tosumulax:
-        sta     ptr4
-        txa                     ; High byte zero
-        beq     @L3             ; Do 8x16 multiplication if high byte zero
-        stx     ptr4+1          ; Save right operand
-        jsr     popsreg         ; Get left operand
-
-; Do ptr4:ptr4+1 * sreg:sreg+1 --> AX
-
-        lda     #0
-        ldx     sreg+1          ; Get high byte into register for speed
-        beq     @L4             ; -> we can do 8x16 after swap
-        sta     tmp1
-        ldy     #16             ; Number of bits
-
-        lsr     ptr4+1
-        ror     ptr4            ; Get first bit into carry
-@L0:    bcc     @L1
-
-        clc
-        adc     sreg
-        pha
-        txa                     ; hi byte of left op
-        adc     tmp1
-        sta     tmp1
-        pla
-
-@L1:    ror     tmp1
-        ror     a
-        ror     ptr4+1
-        ror     ptr4
-        dey
-        bne     @L0
-
-        lda     ptr4            ; Load the result
-        ldx     ptr4+1
-        rts                     ; Done
-
-; High byte of rhs is zero, jump to the 8x16 routine instead
-
-@L3:    jmp     mul8x16
-
-; If the high byte of rhs is zero, swap the operands and use the 8x16
-; routine. On entry, A and X are zero
-
-@L4:    ldy     sreg            ; Save right operand (8 bit)
-        ldx     ptr4            ; Copy left 16 bit operand to right
-        stx     sreg
-        ldx     ptr4+1          ; Don't store, this is done later
-        sty     ptr4            ; Copy low 8 bit of right op to left
-        ldy     #8
-        jmp     mul8x16a
-
diff --git a/libsrc/runtime/mul8.s b/libsrc/runtime/mul8.s
deleted file mode 100644 (file)
index 9d4dfcb..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-08-17
-;
-; CC65 runtime: multiplication for ints. Short versions.
-;
-
-        .export         tosumula0, tosmula0
-        .export         mul8x16, mul8x16a
-        .import         popsreg
-        .importzp       sreg, ptr4
-
-
-;---------------------------------------------------------------------------
-; 8x16 routine with external entry points used by the 16x16 routine in mul.s
-
-tosmula0:
-tosumula0:
-        sta     ptr4
-mul8x16:jsr     popsreg         ; Get left operand
-
-        lda     #0              ; Clear byte 1
-        ldy     #8              ; Number of bits
-        ldx     sreg+1          ; Get into register for speed
-        beq     mul8x8          ; Do 8x8 multiplication if high byte zero
-mul8x16a:
-        sta     ptr4+1          ; Clear byte 2
-
-        lsr     ptr4            ; Get first bit into carry
-@L0:    bcc     @L1
-
-        clc
-        adc     sreg
-        pha
-        txa                     ; hi byte of left op
-        adc     ptr4+1
-        sta     ptr4+1
-        pla
-
-@L1:    ror     ptr4+1
-        ror     a
-        ror     ptr4
-        dey
-        bne     @L0
-        tax
-        lda     ptr4            ; Load the result
-        rts
-
-;---------------------------------------------------------------------------
-; 8x8 multiplication routine
-
-mul8x8:
-        lsr     ptr4            ; Get first bit into carry
-@L0:    bcc     @L1
-        clc
-        adc     sreg
-@L1:    ror
-        ror     ptr4
-        dey
-        bne     @L0
-        tax
-        lda     ptr4            ; Load the result
-        rts                     ; Done
-
diff --git a/libsrc/runtime/mulax10.s b/libsrc/runtime/mulax10.s
deleted file mode 100644 (file)
index d3e006d..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-;
-; Piotr Fusik, 24.10.2003
-; originally by Ullrich von Bassewitz
-;
-; CC65 runtime: Multiply the primary register by 10
-;
-
-        .export         mulax10
-        .importzp       ptr1
-
-.proc   mulax10
-
-        sta     ptr1
-        stx     ptr1+1
-        asl     a
-        rol     ptr1+1
-        asl     a
-        rol     ptr1+1
-        clc
-        adc     ptr1
-        sta     ptr1
-        txa
-        adc     ptr1+1
-        asl     ptr1
-        rol     a
-        tax
-        lda     ptr1
-        rts
-
-.endproc
-
-
diff --git a/libsrc/runtime/mulax3.s b/libsrc/runtime/mulax3.s
deleted file mode 100644 (file)
index c35b05d..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 04.10.2001
-;
-; CC65 runtime: Multiply the primary register
-;
-
-        .export         mulax3
-        .importzp       ptr1
-                
-.proc   mulax3
-
-        sta     ptr1
-        stx     ptr1+1
-        asl     a
-        rol     ptr1+1
-        clc
-        adc     ptr1
-        pha
-        txa
-        adc     ptr1+1
-        tax
-        pla
-        rts
-
-.endproc
-
-
diff --git a/libsrc/runtime/mulax5.s b/libsrc/runtime/mulax5.s
deleted file mode 100644 (file)
index 9af5998..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-;
-; Ullrich von Bassewitz, 04.10.2001
-;
-; CC65 runtime: Multiply the primary register
-;
-
-        .export         mulax5
-        .importzp       ptr1
-
-.proc   mulax5
-
-        sta     ptr1
-        stx     ptr1+1
-        asl     a
-        rol     ptr1+1
-        asl     a
-        rol     ptr1+1
-        clc
-        adc     ptr1
-        pha
-        txa
-        adc     ptr1+1
-        tax
-        pla
-        rts
-
-.endproc
-
-
diff --git a/libsrc/runtime/mulax6.s b/libsrc/runtime/mulax6.s
deleted file mode 100644 (file)
index 6967602..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Piotr Fusik, 24.10.2003
-; originally by Ullrich von Bassewitz
-;
-; CC65 runtime: Multiply the primary register by 6
-;
-
-        .export         mulax6
-        .importzp       ptr1
-
-.proc   mulax6
-
-        sta     ptr1
-        stx     ptr1+1
-        asl     a
-        rol     ptr1+1
-        clc
-        adc     ptr1
-        sta     ptr1
-        txa
-        adc     ptr1+1
-        asl     ptr1
-        rol     a
-        tax
-        lda     ptr1
-        rts
-
-.endproc
-
-
diff --git a/libsrc/runtime/mulax7.s b/libsrc/runtime/mulax7.s
deleted file mode 100644 (file)
index 9031318..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-;
-; Piotr Fusik, 24.10.2003
-; originally by Ullrich von Bassewitz
-;
-; CC65 runtime: Multiply the primary register by 7
-;
-
-        .export         mulax7
-        .importzp       ptr1
-
-.proc   mulax7
-
-        sta     ptr1
-        stx     ptr1+1
-        asl     a
-        rol     ptr1+1                  ; * 2
-        asl     a
-        rol     ptr1+1                  ; * 4
-        asl     a
-        rol     ptr1+1                  ; * 8
-        sec
-        sbc     ptr1
-        pha
-        txa
-        eor     #$ff
-        adc     ptr1+1                  ; * (8 - 1)
-        tax
-        pla
-        rts
-
-.endproc
-
-
diff --git a/libsrc/runtime/mulax9.s b/libsrc/runtime/mulax9.s
deleted file mode 100644 (file)
index d2dd895..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-;
-; Piotr Fusik, 24.10.2003
-; originally by Ullrich von Bassewitz
-;
-; CC65 runtime: Multiply the primary register by 9
-;
-
-        .export         mulax9
-        .importzp       ptr1
-
-.proc   mulax9
-
-        sta     ptr1
-        stx     ptr1+1
-        asl     a
-        rol     ptr1+1                  ; * 2
-        asl     a
-        rol     ptr1+1                  ; * 4
-        asl     a
-        rol     ptr1+1                  ; * 8
-        clc
-        adc     ptr1                    ; * (8+1)
-        pha
-        txa
-        adc     ptr1+1
-        tax
-        pla
-        rts
-
-.endproc
-
-
diff --git a/libsrc/runtime/ne.s b/libsrc/runtime/ne.s
deleted file mode 100644 (file)
index f209534..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Compare != for ints
-;
-
-        .export         tosne00, tosnea0, tosneax
-        .import         tosicmp, boolne
-
-tosne00:
-        lda     #$00
-tosnea0:
-        ldx     #$00
-tosneax:
-        jsr     tosicmp         ; Set flags
-        jmp     boolne          ; Convert to boolean
-
-
diff --git a/libsrc/runtime/neg.s b/libsrc/runtime/neg.s
deleted file mode 100644 (file)
index a428fd1..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: negation on ints
-;
-
-        .export         negax
-
-negax:  clc
-        eor     #$FF
-        adc     #1
-        pha
-        txa
-        eor     #$FF
-        adc     #0
-        tax
-        pla
-        rts
-
-
-
diff --git a/libsrc/runtime/or.s b/libsrc/runtime/or.s
deleted file mode 100644 (file)
index 8570c0c..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: or on ints
-;
-
-        .export         tosora0, tosorax
-        .import         addysp1
-        .importzp       sp, tmp1
-
-tosora0:
-        ldx     #$00
-tosorax:
-        ldy     #0
-        ora     (sp),y
-        sta     tmp1
-        iny
-        txa
-        ora     (sp),y
-        tax
-        lda     tmp1
-        jmp     addysp1         ; drop TOS, set condition codes
-
diff --git a/libsrc/runtime/popa.s b/libsrc/runtime/popa.s
deleted file mode 100644 (file)
index bb74df0..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Pop a from stack
-;
-
-        .export         popa
-        .importzp       sp
-
-        .macpack        cpu
-
-.proc   popa
-
-.if (.cpu .bitand ::CPU_ISET_65SC02)
-        lda     (sp)
-.else
-        ldy     #0              ; (2)
-        lda     (sp),y          ; (7) Read byte
-.endif
-        inc     sp              ; (12)
-        beq     @L1             ; (14)
-        rts                     ; (20)
-
-@L1:    inc     sp+1
-        rts
-
-.endproc
-
-
diff --git a/libsrc/runtime/popsreg.s b/libsrc/runtime/popsreg.s
deleted file mode 100644 (file)
index 47d6750..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 1998-08-21, 2009-02-22
-;
-; CC65 runtime: Pop TOS into sreg
-;
-
-        .export         popsreg
-        .import         incsp2
-        .importzp       sp, sreg
-
-        .macpack        cpu
-
-popsreg:
-        pha                     ; save A
-        ldy     #1
-        lda     (sp),y          ; get hi byte
-        sta     sreg+1          ; store it
-.if (.cpu .bitand ::CPU_ISET_65SC02)
-        lda     (sp)            ; get lo byte
-.else
-        dey
-        lda     (sp),y          ; get lo byte
-.endif
-        sta     sreg            ; store it
-        pla                     ; get A back
-        jmp     incsp2          ; bump stack and return
-
diff --git a/libsrc/runtime/push1.s b/libsrc/runtime/push1.s
deleted file mode 100644 (file)
index 0451ecf..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; CC65 runtime: Push (int)1 onto the stack
-;
-
-        .export         push1
-        .import         pusha0
-
-; Beware: The optimizer knows about this function!
-
-.proc   push1
-
-        lda     #1
-        jmp     pusha0
-
-.endproc
-
-
diff --git a/libsrc/runtime/push2.s b/libsrc/runtime/push2.s
deleted file mode 100644 (file)
index 95ce727..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; CC65 runtime: Push (int)2 onto the stack
-;
-
-        .export         push2
-        .import         pusha0
-
-; Beware: The optimizer knows about this function!
-
-.proc   push2
-
-        lda     #2
-        jmp     pusha0
-
-.endproc
-
-
diff --git a/libsrc/runtime/push3.s b/libsrc/runtime/push3.s
deleted file mode 100644 (file)
index a7c933f..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; CC65 runtime: Push (int)3 onto the stack
-;
-
-        .export         push3
-        .import         pusha0
-
-; Beware: The optimizer knows about this function!
-
-.proc   push3
-
-        lda     #3
-        jmp     pusha0
-
-.endproc
-
-
diff --git a/libsrc/runtime/push4.s b/libsrc/runtime/push4.s
deleted file mode 100644 (file)
index 06da2fc..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; CC65 runtime: Push (int)4 onto the stack
-;
-
-        .export         push4
-        .import         pusha0
-
-; Beware: The optimizer knows about this function!
-
-.proc   push4
-
-        lda     #4
-        jmp     pusha0
-
-.endproc
-
-
diff --git a/libsrc/runtime/push5.s b/libsrc/runtime/push5.s
deleted file mode 100644 (file)
index 94b9d92..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; CC65 runtime: Push (int)5 onto the stack
-;
-
-        .export         push5
-        .import         pusha0
-
-; Beware: The optimizer knows about this function!
-
-.proc   push5
-
-        lda     #5
-        jmp     pusha0
-
-.endproc
-
-
diff --git a/libsrc/runtime/push6.s b/libsrc/runtime/push6.s
deleted file mode 100644 (file)
index 0e4e9d3..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; CC65 runtime: Push (int)6 onto the stack
-;
-
-        .export         push6
-        .import         pusha0
-
-; Beware: The optimizer knows about this function!
-
-.proc   push6
-
-        lda     #6
-        jmp     pusha0
-
-.endproc
-
-
diff --git a/libsrc/runtime/push7.s b/libsrc/runtime/push7.s
deleted file mode 100644 (file)
index afae8ad..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; CC65 runtime: Push (int)7 onto the stack
-;
-
-        .export         push7
-        .import         pusha0
-
-; Beware: The optimizer knows about this function!
-
-.proc   push7
-
-        lda     #7
-        jmp     pusha0
-
-.endproc
-
-
diff --git a/libsrc/runtime/pusha.s b/libsrc/runtime/pusha.s
deleted file mode 100644 (file)
index 0423328..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; CC65 runtime: Push value in a onto the stack
-;
-
-        .export         pusha0sp, pushaysp, pusha
-        .importzp       sp
-
-        .macpack        cpu
-
-; Beware: The optimizer knows about this function!
-
-pusha0sp:
-        ldy     #$00
-pushaysp:
-        lda     (sp),y
-pusha:  ldy     sp              ; (3)
-        beq     @L1             ; (6)
-        dec     sp              ; (11)
-        ldy     #0              ; (13)
-        sta     (sp),y          ; (19)
-        rts                     ; (25)
-
-@L1:    dec     sp+1            ; (11)
-        dec     sp              ; (16)
-        sta     (sp),y          ; (22)
-        rts                     ; (28)
-
diff --git a/libsrc/runtime/pushaff.s b/libsrc/runtime/pushaff.s
deleted file mode 100644 (file)
index 08d988b..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; CC65 runtime: Push a extended with FF onto the stack
-;
-
-        .export         pushaFF
-        .import         pushax
-
-; Beware: The optimizer knows about this function!
-
-.proc   pushaFF
-
-        ldx     #$FF
-        jmp     pushax
-
-.endproc
-
-
-                      
diff --git a/libsrc/runtime/pushax.s b/libsrc/runtime/pushax.s
deleted file mode 100644 (file)
index cba313c..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; CC65 runtime: Push value in a/x onto the stack
-;
-
-        .export         push0, pusha0, pushax
-        .importzp       sp
-
-push0:  lda     #0
-pusha0: ldx     #0
-
-; This function is used *a lot*, so don't call any subroutines here.
-; Beware: The value in ax must not be changed by this function!
-; Beware^2: The optimizer knows about the value of Y after the function
-;           returns!
-
-.proc   pushax
-
-        pha                     ; (3)
-        lda     sp              ; (6)
-        sec                     ; (8)
-        sbc     #2              ; (10)
-        sta     sp              ; (13)
-        bcs     @L1             ; (17)
-        dec     sp+1            ; (+5)
-@L1:    ldy     #1              ; (19)
-        txa                     ; (21)
-        sta     (sp),y          ; (27)
-        pla                     ; (31)
-        dey                     ; (33)
-        sta     (sp),y          ; (38)
-        rts                     ; (44)     
-
-.endproc
diff --git a/libsrc/runtime/pushb.s b/libsrc/runtime/pushb.s
deleted file mode 100644 (file)
index 7507ff2..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.08.1998
-;
-; CC65 runtime: Push word from stack
-;
-
-        .export         pushb, pushbidx
-        .import         pushax
-        .importzp       ptr1
-
-        .macpack        cpu
-
-pushbidx:
-        sty     ptr1
-        clc
-        adc     ptr1
-        bcc     pushb
-        inx
-pushb:  sta     ptr1
-        stx     ptr1+1
-        ldx     #0              ; Load index/high byte
-.if (.cpu .bitand CPU_ISET_65SC02)
-        lda     (ptr1)          ; Save one cycle for the C02
-.else
-        lda     (ptr1,x)
-.endif
-        bpl     L1
-        dex                     ; Make high byte FF
-L1:     jmp     pushax
-
diff --git a/libsrc/runtime/pushbsp.s b/libsrc/runtime/pushbsp.s
deleted file mode 100644 (file)
index 0b5cbe8..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.08.1998
-;
-; CC65 runtime: Load a from stack slot and push as word
-;
-
-        .export         pushbsp, pushbysp
-        .import         pusha0
-        .importzp       sp
-
-pushbsp:
-        ldy     #0
-pushbysp:
-        lda     (sp),y          ; get lo byte
-        jmp     pusha0          ; promote to unsigned and push
-
-
diff --git a/libsrc/runtime/pushc0.s b/libsrc/runtime/pushc0.s
deleted file mode 100644 (file)
index 5100cd6..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; CC65 runtime: Push (char)0 onto the stack
-;
-
-        .export         pushc0
-        .import         pusha
-
-; Beware: The optimizer knows about this function!
-
-.proc   pushc0
-
-        lda     #0
-        jmp     pusha
-
-.endproc
-
-
diff --git a/libsrc/runtime/pushc1.s b/libsrc/runtime/pushc1.s
deleted file mode 100644 (file)
index 84365b5..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; CC65 runtime: Push (char)1 onto the stack
-;
-
-        .export         pushc1
-        .import         pusha
-
-; Beware: The optimizer knows about this function!
-
-.proc   pushc1
-
-        lda     #1
-        jmp     pusha
-
-.endproc
-
-
diff --git a/libsrc/runtime/pushc2.s b/libsrc/runtime/pushc2.s
deleted file mode 100644 (file)
index 87a59e3..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; CC65 runtime: Push (char)2 onto the stack
-;
-
-        .export         pushc2
-        .import         pusha
-
-; Beware: The optimizer knows about this function!
-
-.proc   pushc2
-
-        lda     #2
-        jmp     pusha
-
-.endproc
-
-
diff --git a/libsrc/runtime/pushlysp.s b/libsrc/runtime/pushlysp.s
deleted file mode 100644 (file)
index ca18342..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.06.1998
-;
-; CC65 runtime: Push a long from somewhere in the stack
-;
-
-
-        .export         pushlysp
-        .import         pusheax
-        .importzp       sreg, sp
-
-.proc   pushlysp
-
-        iny
-        iny
-        lda     (sp),y
-        iny
-        sta     sreg
-        lda     (sp),y
-        sta     sreg+1
-        dey
-        dey
-        lda     (sp),y
-        dey
-        tax
-        lda     (sp),y
-        jmp     pusheax
-
-.endproc
-
-
diff --git a/libsrc/runtime/pushw.s b/libsrc/runtime/pushw.s
deleted file mode 100644 (file)
index 4b1920c..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.08.1998
-;
-; CC65 runtime: Fetch word indirect and push
-;
-
-        .export         pushw, pushwidx, pushptr1idx
-        .import         pushax
-        .importzp       ptr1
-
-
-pushw:  ldy     #1
-pushwidx:
-        sta     ptr1
-        stx     ptr1+1
-pushptr1idx:
-        lda     (ptr1),y
-        tax
-        dey
-        lda     (ptr1),y
-        jmp     pushax
-
diff --git a/libsrc/runtime/pushwsp.s b/libsrc/runtime/pushwsp.s
deleted file mode 100644 (file)
index f5ebe0d..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-;
-; Ullrich von Bassewitz, 24.10.2001
-;
-; CC65 runtime: Load word from stack slot and push
-;
-
-        .export         pushwysp, pushw0sp
-        .importzp       sp
-
-        .macpack        generic
-
-pushw0sp:
-        ldy     #3
-pushwysp:
-        lda     sp              ; 3
-        sub     #2              ; 4
-        sta     sp              ; 3
-        bcs     @L1             ; 3(+1)
-        dec     sp+1            ; (5)
-@L1:    lda     (sp),y          ; 5 =16
-        tax                     ; 2
-        dey                     ; 2
-        lda     (sp),y          ; 5
-        ldy     #$00            ; 2
-        sta     (sp),y          ; 5
-        iny                     ; 2
-        txa                     ; 2
-        sta     (sp),y          ; 5
-        rts
-
-
diff --git a/libsrc/runtime/regswap.s b/libsrc/runtime/regswap.s
deleted file mode 100644 (file)
index 689d8d1..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.11.2002
-;
-; CC65 runtime: Swap x bytes of register variable space
-;
-
-        .export         regswap
-        .importzp       sp, regbank, tmp1
-
-.proc   regswap
-
-        sta     tmp1                    ; Store count
-@L1:    lda     regbank,x               ; Get old value
-        pha                             ; Save it
-        lda     (sp),y                  ; Get stack loc
-        sta     regbank,x               ; Store new value
-        pla
-        sta     (sp),y                  ; Store old value
-        inx
-        iny
-        dec     tmp1
-        bne     @L1
-
-        rts
-
-.endproc
-
-
diff --git a/libsrc/runtime/regswap1.s b/libsrc/runtime/regswap1.s
deleted file mode 100644 (file)
index 753020a..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.11.2002
-;
-; CC65 runtime: Swap 1 byte of register variable space
-;
-
-        .export         regswap1
-        .importzp       sp, regbank
-
-.proc   regswap1
-
-        lda     regbank,x               ; Get old value
-        pha                             ; Save it
-        lda     (sp),y                  ; Get stack loc
-        sta     regbank,x               ; Store new value
-        pla
-        sta     (sp),y                  ; Store old value
-        rts
-
-.endproc
-
-
diff --git a/libsrc/runtime/regswap2.s b/libsrc/runtime/regswap2.s
deleted file mode 100644 (file)
index df5109d..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.11.2002
-;
-; CC65 runtime: Swap 2 bytes of register variable space
-;
-
-        .export         regswap2
-        .importzp       sp, regbank
-
-.proc   regswap2
-
-; First byte
-
-        lda     regbank,x               ; Get old value
-        pha                             ; Save it
-        lda     (sp),y                  ; Get stack loc
-        sta     regbank,x               ; Store new value
-        pla
-        sta     (sp),y                  ; Store old value
-
-; Second byte
-
-        iny
-        lda     regbank+1,x             ; Get old value
-        pha                             ; Save it
-        lda     (sp),y                  ; Get stack loc
-        sta     regbank+1,x             ; Store new value
-        pla
-        sta     (sp),y                  ; Store old value
-
-        rts
-
-.endproc
-
-
diff --git a/libsrc/runtime/return0.s b/libsrc/runtime/return0.s
deleted file mode 100644 (file)
index c061e01..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Return 0 in a/x
-;
-
-        .export         return0
-
-.proc   return0
-
-        lda     #0
-        tax
-        rts
-
-.endproc
-
-
-
-
-        
diff --git a/libsrc/runtime/return1.s b/libsrc/runtime/return1.s
deleted file mode 100644 (file)
index 76153f3..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Return 1 in a/x
-;
-
-        .export         return1
-
-.proc   return1
-
-        ldx     #0
-        lda     #1
-        rts
-
-.endproc
-
-
-
-
-        
diff --git a/libsrc/runtime/rsub.s b/libsrc/runtime/rsub.s
deleted file mode 100644 (file)
index 475a69e..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: sub ints reversed
-;
-
-        .export         tosrsuba0, tosrsubax
-        .import         addysp1
-        .importzp       sp, tmp1
-
-;
-; AX = AX - TOS
-;
-
-tosrsuba0:
-        ldx     #0
-tosrsubax:
-        ldy     #0
-        sec
-        sbc     (sp),y          ; lo byte
-        sta     tmp1            ; save lo byte
-        txa
-        iny
-        sbc     (sp),y          ; hi byte
-        tax
-        lda     tmp1
-        jmp     addysp1         ; drop TOS, set condition codes
-
-
diff --git a/libsrc/runtime/shelp.s b/libsrc/runtime/shelp.s
deleted file mode 100644 (file)
index b1ebeb7..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; CC65 runtime: helper stuff for mod/div/mul with signed ints
-;
-
-; When negating values, we will ignore the possibility here, that one of the
-; values if $8000, in which case the negate will fail.
-
-        .export         popsargs
-        .import         negax, popax
-        .importzp       sreg, tmp1, tmp2, ptr4
-
-popsargs:
-        stx     tmp2            ; Remember sign
-        cpx     #0
-        bpl     L1
-        jsr     negax           ; Negate accumulator
-L1:     sta     ptr4
-        stx     ptr4+1          ; Save right operand
-
-        jsr     popax
-        stx     tmp1            ; Remember sign
-        cpx     #0
-        bpl     L2
-        jsr     negax
-L2:     sta     sreg
-        stx     sreg+1
-        rts
-
diff --git a/libsrc/runtime/shl.s b/libsrc/runtime/shl.s
deleted file mode 100644 (file)
index c1a4b6e..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-;
-; Ullrich von Bassewitz, 1998-08-05, 2004-06-25
-;
-; CC65 runtime: left shift support for ints and unsigneds
-;
-; Note: The standard declares a shift count that is negative or >= the
-; bitcount of the shifted type for undefined behaviour.
-;
-; Note^2: The compiler knowns about the register/zero page usage of this
-; function, so you need to change the compiler source if you change it!
-;
-
-
-        .export          tosaslax, tosshlax, aslaxy, shlaxy
-        .import          popax
-        .importzp        tmp1
-
-        .macpack        cpu
-
-tosshlax:
-tosaslax:
-        sta     tmp1            ; Save shift count
-        jsr     popax           ; Get the left hand operand
-        ldy     tmp1            ; Get shift count
-
-; Run into shlaxy
-
-shlaxy:
-aslaxy:
-        pha
-        tya
-        and     #$0F
-        beq     L2              ; Nothing to shift
-        sec
-        sbc     #8              ; Shift count 8 or greater?
-        beq     L3              ; Jump if exactly 8
-        bcc     L4              ; Jump if less than 8
-
-; Shift count is greater than 8.
-
-        tay                     ; Shift count into Y
-        pla                     ; Get low byte
-
-L1:     asl     a
-        dey
-        bne     L1
-        tax
-        tya                     ; A = 0
-        rts
-
-; Shift count is zero
-
-L2:     pla
-        rts
-
-; Shift count is exactly 8
-
-.if (.cpu .bitand CPU_ISET_65SC02)
-L3:     plx                     ; Low byte from stack into X
-        rts                     ; A is already zero
-.else
-L3:     pla                     ; Low byte from stack ...
-        tax                     ; ... into X
-        lda     #$00            ; Clear low byte
-        rts
-.endif
-
-; Shift count is less than 8
-
-L4:     adc     #8              ; Correct counter
-        tay                     ; Shift count into Y
-        pla                     ; Restore low byte
-        stx     tmp1            ; Save high byte of lhs
-L5:     asl     a
-        rol     tmp1
-        dey
-        bne     L5
-
-; Done with shift
-
-        ldx     tmp1
-L9:     rts
-
diff --git a/libsrc/runtime/shr.s b/libsrc/runtime/shr.s
deleted file mode 100644 (file)
index 55b15bd..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-;
-; Ullrich von Bassewitz, 2004-06-30
-;
-; CC65 runtime: right shift support for unsigneds
-;
-; Note: The standard declares a shift count that is negative or >= the
-; bitcount of the shifted type for undefined behaviour.
-;
-; Note^2: The compiler knowns about the register/zero page usage of this
-; function, so you need to change the compiler source if you change it!
-;
-
-
-        .export         tosshrax, shraxy
-        .import         popax
-        .importzp       tmp1
-
-tosshrax:
-        sta     tmp1            ; Save shift count
-        jsr     popax           ; Get the left hand operand
-        ldy     tmp1            ; Get shift count
-
-; Run into shraxy
-
-shraxy:
-        pha
-        tya
-        and     #$0F
-        beq     L2              ; Nothing to shift
-        sec
-        sbc     #8              ; Shift count 8 or greater?
-        beq     L3              ; Jump if exactly 8
-        bcc     L4              ; Jump if less than 8
-
-; Shift count is greater than 8.
-
-        tay                     ; Shift count into Y
-        pla                     ; Discard low byte
-        txa                     ; Get high byte
-
-L1:     lsr     a
-        dey
-        bne     L1
-        ldx     #$00            ; High byte is zero
-        rts
-
-; Shift count is zero
-
-L2:     pla
-        rts
-
-; Shift count is exactly 8
-
-L3:     pla                     ; Drop low byte from stack ...
-        txa                     ; Move high byte to low
-        ldx     #$00            ; Clear high byte
-        rts
-
-; Shift count is less than 8
-
-L4:     adc     #8              ; Correct counter
-        tay                     ; Shift count into Y
-        pla                     ; Restore low byte
-        stx     tmp1            ; Save high byte of lhs
-L5:     lsr     tmp1
-        ror     a
-        dey
-        bne     L5
-
-; Done with shift
-
-        ldx     tmp1
-        rts
-
-
diff --git a/libsrc/runtime/shrax1.s b/libsrc/runtime/shrax1.s
deleted file mode 100644 (file)
index 4f4fac0..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Scale the primary register
-;
-
-        .export         shrax1
-        .importzp       tmp1
-
-shrax1: stx     tmp1
-        lsr     tmp1
-        ror     a
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/shrax2.s b/libsrc/runtime/shrax2.s
deleted file mode 100644 (file)
index a96d564..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Scale the primary register by 4
-;
-
-        .export         shrax2
-        .importzp       tmp1
-
-shrax2: stx     tmp1
-        lsr     tmp1
-        ror     a
-        lsr     tmp1
-        ror     a
-        ldx     tmp1
-        rts
-
-
diff --git a/libsrc/runtime/shrax3.s b/libsrc/runtime/shrax3.s
deleted file mode 100644 (file)
index d84236f..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Scale the primary register by 8
-;
-
-        .export         shrax3
-        .importzp       tmp1
-
-shrax3: stx     tmp1
-        lsr     tmp1
-        ror     a
-        lsr     tmp1
-        ror     a
-        lsr     tmp1
-        ror     a
-        ldx     tmp1
-        rts
-
-
diff --git a/libsrc/runtime/shrax4.s b/libsrc/runtime/shrax4.s
deleted file mode 100644 (file)
index 730e337..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.07.2001
-;
-; CC65 runtime: Scale the primary register by 16
-;
-
-        .export         shrax4
-        .importzp       tmp1
-
-shrax4: stx     tmp1
-        lsr     tmp1
-        ror     a
-        lsr     tmp1
-        ror     a
-        lsr     tmp1
-        ror     a
-        lsr     tmp1
-        ror     a
-        ldx     tmp1
-        rts
-
-
diff --git a/libsrc/runtime/shreax1.s b/libsrc/runtime/shreax1.s
deleted file mode 100644 (file)
index 93ee7d8..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Scale the 32 bit primary register by 2
-;
-
-        .export         shreax1
-        .importzp       sreg, tmp1
-
-shreax1:
-        stx     tmp1
-        lsr     sreg+1
-        ror     sreg
-        ror     tmp1
-        ror     a
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/shreax2.s b/libsrc/runtime/shreax2.s
deleted file mode 100644 (file)
index 29ba23c..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Scale the 32 bit primary register by 4
-;
-
-        .export         shreax2
-        .importzp       sreg, tmp1
-
-shreax2:
-        stx     tmp1
-        lsr     sreg+1
-        ror     sreg
-        ror     tmp1
-        ror     a
-        lsr     sreg+1
-        ror     sreg
-        ror     tmp1
-        ror     a
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/shreax3.s b/libsrc/runtime/shreax3.s
deleted file mode 100644 (file)
index e67cfe2..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Scale the 32 bit primary register by 8
-;
-
-        .export         shreax3
-        .importzp       sreg, tmp1
-
-shreax3:
-        stx     tmp1
-        lsr     sreg+1
-        ror     sreg
-        ror     tmp1
-        ror     a
-        lsr     sreg+1
-        ror     sreg
-        ror     tmp1
-        ror     a
-        lsr     sreg+1
-        ror     sreg
-        ror     tmp1
-        ror     a
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/shreax4.s b/libsrc/runtime/shreax4.s
deleted file mode 100644 (file)
index a44e7b8..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.07.2001
-;
-; CC65 runtime: Scale the 32 bit primary register by 16
-;
-
-        .export         shreax4
-        .importzp       sreg, tmp1
-
-shreax4:
-        stx     tmp1
-        ldx     #4
-@L1:    lsr     sreg+1
-        ror     sreg
-        ror     tmp1
-        ror     a
-        dex
-        bne     @L1
-        ldx     tmp1
-        rts
-
diff --git a/libsrc/runtime/staspidx.s b/libsrc/runtime/staspidx.s
deleted file mode 100644 (file)
index c8d42f3..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; CC65 runtime: Store a indirect into address at top of stack with index
-;
-
-        .export         staspidx
-        .import         incsp2
-        .importzp       sp, tmp1, ptr1
-
-.proc   staspidx
-
-        pha
-        sty     tmp1            ; Save Index
-        ldy     #1
-        lda     (sp),y
-        sta     ptr1+1
-        dey
-        lda     (sp),y
-        sta     ptr1            ; Pointer now in ptr1
-        ldy     tmp1            ; Restore offset
-        pla                     ; Restore value
-        sta     (ptr1),y        ; Store
-        jmp     incsp2          ; Drop address
-
-.endproc
-
-
diff --git a/libsrc/runtime/staxsp.s b/libsrc/runtime/staxsp.s
deleted file mode 100644 (file)
index 599e92a..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.08.1998
-;
-; CC65 runtime: Store ax at (sp),y
-;
-
-        .export         staxysp, stax0sp
-        .importzp       sp
-
-stax0sp:
-        ldy     #0
-staxysp:
-        sta     (sp),y
-        iny
-        pha
-        txa
-        sta     (sp),y
-        pla
-        rts
-
diff --git a/libsrc/runtime/staxspi.s b/libsrc/runtime/staxspi.s
deleted file mode 100644 (file)
index 90738e0..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; CC65 runtime: Store a/x indirect into address at top of stack with index
-;
-
-        .export         staxspidx
-        .import         incsp2
-        .importzp       sp, tmp1, ptr1
-
-.proc   staxspidx
-
-        sty     tmp1            ; Save Y
-        pha                     ; Save A
-        ldy     #1
-        lda     (sp),y
-        sta     ptr1+1
-        dey
-        lda     (sp),y
-        sta     ptr1            ; Address now in ptr1
-        ldy     tmp1            ; Restore Y
-        iny                     ; Address high byte
-        txa                     ; Get high byte
-        sta     (ptr1),y        ; Store high byte
-        dey                     ; Address low byte
-        pla                     ; Restore low byte into A
-        sta     (ptr1),y        ; Store low byte
-        jmp     incsp2          ; Drop address
-
-.endproc
-
-
diff --git a/libsrc/runtime/steaxsp.s b/libsrc/runtime/steaxsp.s
deleted file mode 100644 (file)
index 6ac3891..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 31.08.1998
-;
-; CC65 runtime: Store eax at (sp),y
-;
-
-        .export         steaxysp, steax0sp
-        .importzp       sp, sreg
-
-steax0sp:
-        ldy     #0
-steaxysp:
-        sta     (sp),y
-        iny
-        pha
-        txa
-        sta     (sp),y
-        iny
-        lda     sreg
-        sta     (sp),y
-        iny
-        lda     sreg+1
-        sta     (sp),y
-        pla
-        rts
-
-
diff --git a/libsrc/runtime/steaxspi.s b/libsrc/runtime/steaxspi.s
deleted file mode 100644 (file)
index b857250..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.06.1998
-;
-; CC65 runtime: Store eax at the address on top of stack with index
-;
-
-
-        .export         steaxspidx
-        .import         popax
-        .importzp       sreg, ptr1, tmp1, tmp2, tmp3
-
-
-.proc   steaxspidx
-
-        sta     tmp1
-        stx     tmp2
-        sty     tmp3
-        jsr     popax           ; get the pointer
-        sta     ptr1
-        stx     ptr1+1
-        ldy     tmp3
-        lda     tmp1
-        sta     (ptr1),y
-        iny
-        lda     tmp2
-        sta     (ptr1),y
-        iny
-        tax
-        lda     sreg
-        sta     (ptr1),y
-        iny
-        lda     sreg+1
-        sta     (ptr1),y
-        lda     tmp1
-        rts
-
-.endproc
-
-
diff --git a/libsrc/runtime/stkchk.s b/libsrc/runtime/stkchk.s
deleted file mode 100644 (file)
index 73df099..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-;
-; Ullrich von Bassewitz, 19.03.2001
-;
-; Stack checking code. These are actually two routines, one to check the C
-; stack, and the other one to check the 6502 hardware stack.
-; For performance reasons (to avoid having to pass a parameter), the compiler
-; calls the cstkchk routine *after* allocating space on the stack. So the
-; stackpointer may already be invalid if this routine is called. In addition
-; to that, pushs and pops that are needed for expression evaluation are not
-; checked (this would be way too much overhead). As a consequence we will
-; operate using a safety area at the stack bottom. Once the stack reaches this
-; safety area, we consider it an overflow, even if the stack is still inside
-; its' bounds.
-;
-
-        .export         stkchk, cstkchk
-        .constructor    initstkchk, 25
-        .import         __STACKSIZE__                   ; Linker defined
-        .import         pusha0, _exit
-        .importzp       sp
-
-        ; Use macros for better readability
-        .macpack        generic
-        .macpack        cpu
-
-
-; ----------------------------------------------------------------------------
-; Initialization code. This is a constructor, so it is called on startup if
-; the linker has detected references to this module.
-
-.segment        "INIT"
-
-.proc   initstkchk
-
-        lda     sp
-        sta     initialsp
-        sub     #<__STACKSIZE__
-        sta     lowwater
-        lda     sp+1
-        sta     initialsp+1
-        sbc     #>__STACKSIZE__
-.if (.cpu .bitand ::CPU_ISET_65SC02)
-        ina                     ; Add 256 bytes safety area
-.else
-        add     #1              ; Add 256 bytes safety area
-.endif
-        sta     lowwater+1
-        rts
-
-.endproc
-
-; ----------------------------------------------------------------------------
-; 6502 stack checking routine. Does not need to save any registers.
-; Safety zone for the hardware stack is 12 bytes.
-
-.code
-
-stkchk: tsx
-        cpx     #12
-        bcc     Fail            ; Jump on stack overflow
-        rts                     ; Return if ok
-
-; ----------------------------------------------------------------------------
-; C stack checking routine. Does not need to save any registers.
-
-.code
-
-cstkchk:
-
-; Check the high byte of the software stack
-
-@L0:    lda     lowwater+1
-        cmp     sp+1
-        bcs     @L1
-        rts
-
-; Check low byte
-
-@L1:    bne     CStackOverflow
-        lda     lowwater
-        cmp     sp
-        bcs     CStackOverflow
-Done:   rts
-
-; We have a C stack overflow. Set the stack pointer to the initial value, so
-; we can continue without worrying about stack issues.
-
-CStackOverflow:
-        lda     initialsp
-        sta     sp
-        lda     initialsp+1
-        sta     sp+1
-
-; Generic abort entry. We should output a diagnostic here, but this is
-; difficult, since we're operating at a lower level here.
-
-Fail:   lda     #4
-        ldx     #0
-        jmp     _exit
-
-; ----------------------------------------------------------------------------
-; Data
-
-.bss
-
-; Initial stack pointer value. Stack is reset to this in case of overflows to
-; allow program exit processing.
-initialsp:      .word   0
-
-; Stack low water mark.
-lowwater:       .word   0
-
-
-
diff --git a/libsrc/runtime/sub.s b/libsrc/runtime/sub.s
deleted file mode 100644 (file)
index b41df3d..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: sub ints
-;
-
-        .export         tossuba0, tossubax
-        .import         addysp1
-        .importzp       sp
-
-        .macpack        cpu
-
-; AX = TOS - AX
-
-tossuba0:
-        ldx     #0
-tossubax:
-        sec
-        eor     #$FF
-.if (.cpu .bitand CPU_ISET_65SC02)
-        adc     (sp)
-        ldy     #1
-.else
-        ldy     #0
-        adc     (sp),y          ; Subtract low byte
-        iny
-.endif
-        pha                     ; Save high byte
-        txa
-        eor     #$FF
-        adc     (sp),y          ; Subtract high byte
-        tax                     ; High byte into X
-        pla                     ; Restore low byte
-        jmp     addysp1         ; drop TOS
-
diff --git a/libsrc/runtime/subeqsp.s b/libsrc/runtime/subeqsp.s
deleted file mode 100644 (file)
index 24080d9..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; Ullrich von Bassewitz, 08.10.1998
-;
-; CC65 runtime: -= operator for ints on the stack
-;
-
-        .export         subeq0sp, subeqysp
-        .importzp       sp
-
-subeq0sp:
-        ldy     #0
-subeqysp:
-        sec
-        eor     #$FF
-        adc     (sp),y
-        sta     (sp),y
-        pha                     ; Save low byte
-        iny
-        txa
-        eor     #$FF
-        adc     (sp),y
-        sta     (sp),y
-        tax
-        pla                     ; Restore low byte
-        rts
-
diff --git a/libsrc/runtime/subysp.s b/libsrc/runtime/subysp.s
deleted file mode 100644 (file)
index 9fae442..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Piotr Fusik, 24.10.2003
-; originally by Ullrich von Bassewitz
-;
-; CC65 runtime: Decrement the stackpointer by value in y
-;
-
-        .export         subysp
-        .importzp       sp
-
-.proc   subysp
-
-        tya
-        eor     #$ff
-        sec
-        adc     sp
-        sta     sp
-        bcs     @L1
-        dec     sp+1
-@L1:    rts
-
-.endproc
-
-
diff --git a/libsrc/runtime/swap.s b/libsrc/runtime/swap.s
deleted file mode 100644 (file)
index e91eeca..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: swap ax with TOS
-;
-
-        .export         swapstk
-        .importzp       sp, ptr4
-
-swapstk:
-        sta     ptr4
-        stx     ptr4+1
-        ldy     #1              ; index
-        lda     (sp),y
-        tax
-        lda     ptr4+1
-        sta     (sp),y
-        dey
-        lda     (sp),y
-        pha
-        lda     ptr4
-        sta     (sp),y
-        pla
-        rts                     ; whew!
-
diff --git a/libsrc/runtime/tosint.s b/libsrc/runtime/tosint.s
deleted file mode 100644 (file)
index ed32298..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Convert tos from long to int
-;
-
-        .export         tosint
-        .import         incsp2
-        .importzp       sp
-
-        .macpack        cpu
-
-; Convert TOS from long to int by cutting of the high 16bit
-
-.proc   tosint
-
-        pha
-.if (.cpu .bitand ::CPU_ISET_65SC02)
-        lda     (sp)
-.else
-        ldy     #0
-        lda     (sp),y          ; sp+1
-.endif
-        ldy     #2
-        sta     (sp),y
-        dey
-        lda     (sp),y
-        ldy     #3
-        sta     (sp),y
-        pla
-        jmp     incsp2          ; Drop 16 bit
-
-.endproc
diff --git a/libsrc/runtime/toslong.s b/libsrc/runtime/toslong.s
deleted file mode 100644 (file)
index 9065d3e..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-;
-; Ullrich von Bassewitz, 25.10.2000
-;
-; CC65 runtime: Convert tos from int to long
-;
-
-        .export         tosulong, toslong
-        .import         decsp2
-        .importzp       sp
-
-        .macpack        cpu
-
-; Convert TOS from int to long
-
-tosulong:
-        pha
-        jsr     decsp2          ; Make room
-        ldy     #2
-        lda     (sp),y
-.if (.cpu .bitand CPU_ISET_65SC02)
-        sta     (sp)            ; 65C02 version
-        iny                     ; Y = 3
-.else
-        ldy     #0
-        sta     (sp),y
-        ldy     #3
-.endif
-        lda     (sp),y
-toslong1:
-        ldy     #1
-        sta     (sp),y
-        lda     #0              ; Zero extend
-toslong2:
-        iny
-        sta     (sp),y
-        iny
-        sta     (sp),y
-        pla
-        rts
-
-toslong:
-        pha
-        jsr     decsp2          ; Make room
-        ldy     #2
-        lda     (sp),y
-.if (.cpu .bitand CPU_ISET_65SC02)
-        sta     (sp)            ; 65C02 version
-        iny                     ; Y = 3
-.else
-        ldy     #0
-        sta     (sp),y
-        ldy     #3
-.endif
-        lda     (sp),y
-        bpl     toslong1        ; Jump if positive, high word is zero
-        ldy     #1
-        sta     (sp),y
-        lda     #$FF
-        bne     toslong2        ; Branch always
-
diff --git a/libsrc/runtime/udiv.s b/libsrc/runtime/udiv.s
deleted file mode 100644 (file)
index 93548d0..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; CC65 runtime: division for unsigned ints
-;
-
-        .export         tosudiva0, tosudivax, udiv16
-        .import         popsreg
-        .importzp       sreg, ptr1, ptr4
-
-
-tosudiva0:
-        ldx     #$00            ; Clear high byte
-tosudivax:
-        sta     ptr4
-        stx     ptr4+1          ; Save right operand
-        jsr     popsreg         ; Get left operand
-
-; Do the division
-
-        jsr     udiv16
-
-; Result is in sreg, remainder in ptr1
-
-        lda     sreg
-        ldx     sreg+1
-        rts
-
-;---------------------------------------------------------------------------
-; 16by16 division. Divide sreg by ptr4. Result is in sreg, remainder in ptr1
-; (see mult-div.s from "The Fridge").
-; This is also the entry point for the signed division
-
-udiv16: lda     #0
-        sta     ptr1+1
-        ldy     #16
-        ldx     ptr4+1
-        beq     udiv16by8a
-
-L0:     asl     sreg
-        rol     sreg+1
-        rol     a
-        rol     ptr1+1
-
-        pha
-        cmp     ptr4
-        lda     ptr1+1
-        sbc     ptr4+1
-        bcc     L1
-
-        sta     ptr1+1
-        pla
-        sbc     ptr4
-        pha
-        inc     sreg
-
-L1:     pla
-        dey
-        bne     L0
-        sta     ptr1
-        rts
-
-
-;---------------------------------------------------------------------------
-; 16by8 division
-
-udiv16by8a:
-@L0:    asl     sreg
-        rol     sreg+1
-        rol     a
-        bcs     @L1
-
-        cmp     ptr4
-        bcc     @L2
-@L1:    sbc     ptr4
-        inc     sreg
-
-@L2:    dey
-        bne     @L0
-        sta     ptr1
-        rts
-
diff --git a/libsrc/runtime/udiv32by16r16.s b/libsrc/runtime/udiv32by16r16.s
deleted file mode 100644 (file)
index 9897f99..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-11-04
-;
-; CC65 runtime: 32by16 => 16 unsigned division
-;
-
-        .export         udiv32by16r16, udiv32by16r16m
-
-        .include        "zeropage.inc"
-
-
-;---------------------------------------------------------------------------
-; 32by16 division. Divide ptr1:ptr2 by ptr3. Result is in ptr1, remainder
-; in sreg.
-;
-;   lhs         rhs           result      result also in    remainder
-; -----------------------------------------------------------------------
-;   ptr1:ptr2   ptr3          ax          ptr1              sreg
-;
-
-
-udiv32by16r16:
-        sta     ptr3
-        stx     ptr3+1
-udiv32by16r16m:
-        lda     #0
-        sta     sreg+1
-        ldy     #32
-
-L0:     asl     ptr1
-        rol     ptr1+1
-        rol     ptr2
-        rol     ptr2+1
-        rol     a
-        rol     sreg+1
-
-        pha
-        cmp     ptr3
-        lda     sreg+1
-        sbc     ptr3+1
-        bcc     L1
-
-        sta     sreg+1
-        pla
-        sbc     ptr3
-        pha
-        inc     ptr1
-
-L1:     pla
-        dey
-        bne     L0
-        sta     sreg
-        lda     ptr1
-        ldx     ptr1+1
-        rts
-
diff --git a/libsrc/runtime/uge.s b/libsrc/runtime/uge.s
deleted file mode 100644 (file)
index ecbe74e..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Compare >= for unsigned ints
-;
-
-        .export         tosuge00, tosugea0, tosugeax
-        .import         tosicmp, booluge
-
-
-tosuge00:
-        lda     #$00
-tosugea0:
-        ldx     #$00
-tosugeax:
-        jsr     tosicmp         ; Set flags
-        jmp     booluge         ; Convert to boolean
-
-
-
diff --git a/libsrc/runtime/ugt.s b/libsrc/runtime/ugt.s
deleted file mode 100644 (file)
index 3b05f43..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Compare > for unsigned ints
-;
-
-        .export         tosugt00, tosugta0, tosugtax
-        .import         tosicmp, boolugt
-
-
-tosugt00:
-        lda     #$00
-tosugta0:
-        ldx     #$00
-tosugtax:
-        jsr     tosicmp         ; Set flags
-        jmp     boolugt         ; Convert to boolean
-
diff --git a/libsrc/runtime/ule.s b/libsrc/runtime/ule.s
deleted file mode 100644 (file)
index 7a78ff4..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Compare <= for unsigned ints
-;
-
-        .export         tosule00, tosulea0, tosuleax
-        .import         tosicmp, boolule
-
-tosule00:
-        lda     #$00
-tosulea0:
-        ldx     #$00
-tosuleax:
-        jsr     tosicmp         ; Set flags
-        jmp     boolule         ; Convert to boolean
-
-
diff --git a/libsrc/runtime/ult.s b/libsrc/runtime/ult.s
deleted file mode 100644 (file)
index 34df732..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; CC65 runtime: Compare < for unsigned ints
-;
-
-        .export         tosult00, tosulta0, tosultax
-        .import         tosicmp, boolult, return0
-
-
-tosult00        = return0       ; This is always false
-
-tosulta0:
-        ldx     #$00
-tosultax:
-        jsr     tosicmp         ; Set flags
-        jmp     boolult         ; Convert to boolean
-
diff --git a/libsrc/runtime/umod.s b/libsrc/runtime/umod.s
deleted file mode 100644 (file)
index 92ebb5f..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; CC65 runtime: modulo operation for unsigned ints
-;
-
-        .export         tosumoda0, tosumodax
-        .import         popsreg, udiv16
-        .importzp       ptr1, ptr4
-
-tosumoda0:
-        ldx     #0
-tosumodax:
-        sta     ptr4
-        stx     ptr4+1          ; Save right operand
-        jsr     popsreg         ; Get right operand
-
-; Do the division
-
-        jsr     udiv16
-
-; Result is in sreg, remainder in ptr1
-
-        lda     ptr1
-        ldx     ptr1+1
-        rts
-
-           
diff --git a/libsrc/runtime/umul16x16r32.s b/libsrc/runtime/umul16x16r32.s
deleted file mode 100644 (file)
index 9ecd159..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-;
-; Ullrich von Bassewitz, 2010-11-03
-;
-; CC65 runtime: 16x16 => 32 unsigned multiplication
-;
-
-        .export         umul16x16r32, umul16x16r32m
-        .export         umul16x16r16, umul16x16r16m
-
-        .include        "zeropage.inc"
-
-
-;---------------------------------------------------------------------------
-; 16x16 => 32 unsigned multiplication routine. Because the overhead for a
-; 16x16 => 16 unsigned multiplication routine is small, we will tag it with 
-; the matching labels, as well.
-;
-;  routine         LHS         RHS        result          result also in
-; -----------------------------------------------------------------------
-;  umul16x16r32    ax          ptr1       ax:sreg          ptr1:sreg
-;  umul16x16r32m   ptr3        ptr1       ax:sreg          ptr1:sreg
-;  umul16x16r16    ax          ptr1       ax               ptr1
-;  umul16x16r16m   ptr3        ptr1       ax               ptr1
-;
-; ptr3 is left intact by the routine.
-;
-
-umul16x16r32:
-umul16x16r16:
-        sta     ptr3
-        stx     ptr3+1
-
-umul16x16r32m:
-umul16x16r16m:
-        lda     #0
-        sta     sreg+1
-        ldy     #16             ; Number of bits
-
-        lsr     ptr1+1
-        ror     ptr1            ; Get first bit into carry
-@L0:    bcc     @L1
-
-        clc
-        adc     ptr3
-        pha
-        lda     ptr3+1
-        adc     sreg+1
-        sta     sreg+1
-        pla
-
-@L1:    ror     sreg+1
-        ror     a
-        ror     ptr1+1
-        ror     ptr1
-        dey
-        bne     @L0
-
-        sta     sreg            ; Save byte 3
-        lda     ptr1            ; Load the result
-        ldx     ptr1+1
-        rts                     ; Done
-
-
diff --git a/libsrc/runtime/umul8x16r24.s b/libsrc/runtime/umul8x16r24.s
deleted file mode 100644 (file)
index ff7d0ba..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-;
-; Ullrich von Bassewitz, 2011-07-10
-;
-; CC65 runtime: 8x16 => 24 unsigned multiplication
-;
-
-        .export         umul8x16r24, umul8x16r24m
-        .export         umul8x16r16, umul8x16r16m
-
-        .include        "zeropage.inc"
-
-
-;---------------------------------------------------------------------------
-; 8x16 => 24 unsigned multiplication routine. Because the overhead for a
-; 8x16 => 16 unsigned multiplication routine is small, we will tag it with
-; the matching labels, as well.
-;
-;  routine         LHS         RHS        result          result also in
-; -----------------------------------------------------------------------
-;  umul8x16r24     ax          ptr1-low   ax:sreg-low     ptr1:sreg-low
-;  umul8x16r24m    ptr3        ptr1-low   ax:sreg-low     ptr1:sreg-low
-;
-; ptr3 is left intact by the routine.
-;
-
-umul8x16r24:
-umul8x16r16:
-        sta     ptr3
-        stx     ptr3+1
-
-umul8x16r24m:
-umul8x16r16m:
-        ldx     #0
-        stx     ptr1+1
-        stx     sreg
-
-        ldy     #8              ; Number of bits
-        ldx     ptr3            ; Get into register for speed
-        lda     ptr1
-        ror     a               ; Get next bit into carry
-@L0:    bcc     @L1
-
-        clc
-        pha
-        txa
-        adc     ptr1+1
-        sta     ptr1+1
-        lda     ptr3+1
-        adc     sreg
-        sta     sreg
-        pla
-
-@L1:    ror     sreg
-        ror     ptr1+1
-        ror     a
-        dey
-        bne     @L0
-
-        sta     ptr1            ; Save low byte of result
-        ldx     ptr1+1          ; Load high byte of result
-        rts                     ; Done
-
-
diff --git a/libsrc/runtime/umul8x8r16.s b/libsrc/runtime/umul8x8r16.s
deleted file mode 100644 (file)
index aba758e..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-;
-; Ullrich von Bassewitz, 2010-11-02
-;
-; CC65 runtime: 8x8 => 16 unsigned multiplication
-;
-
-        .export         umul8x8r16, umul8x8r16m
-        .importzp       ptr1, ptr3
-
-
-;---------------------------------------------------------------------------
-; 8x8 => 16 unsigned multiplication routine.
-;
-;   LHS            RHS          result      result in also
-; -------------------------------------------------------------
-;   .A (ptr3-low)  ptr1-low     .XA             ptr1
-;
-
-umul8x8r16:
-        sta     ptr3
-umul8x8r16m:
-        lda     #0              ; Clear byte 1
-        ldy     #8              ; Number of bits
-        lsr     ptr1            ; Get first bit of RHS into carry
-@L0:    bcc     @L1
-        clc
-        adc     ptr3
-@L1:    ror
-        ror     ptr1
-        dey
-        bne     @L0
-        tax
-        stx     ptr1+1          ; Result in .XA and ptr1
-        lda     ptr1            ; Load the result
-        rts                     ; Done
diff --git a/libsrc/runtime/xor.s b/libsrc/runtime/xor.s
deleted file mode 100644 (file)
index 825c576..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 05.08.1998
-;
-; CC65 runtime: xor on ints
-;
-
-        .export         tosxora0, tosxorax
-        .import         addysp1
-        .importzp       sp, tmp1
-
-tosxora0:
-        ldx     #$00
-tosxorax:
-        ldy     #0
-        eor     (sp),y
-        sta     tmp1
-        iny
-        txa
-        eor     (sp),y
-        tax
-        lda     tmp1
-        jmp     addysp1         ; drop TOS, set condition codes
-
diff --git a/libsrc/runtime/zeropage.s b/libsrc/runtime/zeropage.s
deleted file mode 100644 (file)
index 2bbe7ce..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.05.2002
-;
-; CC65 runtime: zeropage usage
-;
-
-.include        "zeropage.inc"
-
-; ------------------------------------------------------------------------
-
-.zeropage
-
-sp:             .res    2       ; Stack pointer
-sreg:           .res    2       ; Secondary register/high 16 bit for longs
-regsave:        .res    4       ; Slot to save/restore (E)AX into
-ptr1:           .res    2
-ptr2:           .res    2
-ptr3:           .res    2
-ptr4:           .res    2
-tmp1:           .res    1
-tmp2:           .res    1
-tmp3:           .res    1
-tmp4:           .res    1
-regbank:        .res    regbanksize     ; Register bank
diff --git a/libsrc/serial/ser-kernel.s b/libsrc/serial/ser-kernel.s
deleted file mode 100644 (file)
index 4c5b455..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-04-15
-;
-; Common functions of the serial drivers
-;
-
-        .import         return0, ser_libref
-        .importzp       ptr1
-        .interruptor    ser_irq, 29     ; Export as high priority IRQ handler
-
-        .include        "ser-kernel.inc"
-        .include        "ser-error.inc"
-
-
-;----------------------------------------------------------------------------
-; Variables
-
-
-.bss
-_ser_drv:       .res    2               ; Pointer to driver
-
-; Jump table for the driver functions.
-.data
-ser_vectors:
-ser_install:    jmp     return0
-ser_uninstall:  jmp     return0
-ser_open:       jmp     return0
-ser_close:      jmp     return0
-ser_get:        jmp     return0
-ser_put:        jmp     return0
-ser_status:     jmp     return0
-ser_ioctl:      jmp     return0
-ser_irq:        .byte   $60, $00, $00   ; RTS plus two dummy bytes
-
-; Driver header signature
-.rodata
-ser_sig:        .byte   $73, $65, $72, SER_API_VERSION  ; "ser", version
-
-
-.code
-;----------------------------------------------------------------------------
-; unsigned char __fastcall__ ser_install (void* driver);
-; /* Install the driver once it is loaded */
-
-
-_ser_install:
-        sta     _ser_drv
-        sta     ptr1
-        stx     _ser_drv+1
-        stx     ptr1+1
-
-; Check the driver signature
-
-        ldy     #.sizeof(ser_sig)-1
-@L0:    lda     (ptr1),y
-        cmp     ser_sig,y
-        bne     inv_drv
-        dey
-        bpl     @L0
-
-; Set the library reference
-
-        ldy     #SER_HDR::LIBREF
-        lda     #<ser_libref
-        sta     (ptr1),y
-        iny
-        lda     #>ser_libref
-        sta     (ptr1),y
-
-; Copy the jump vectors
-
-        ldy     #SER_HDR::JUMPTAB
-        ldx     #0
-@L1:    inx                             ; Skip the JMP opcode
-        jsr     copy                    ; Copy one byte
-        jsr     copy                    ; Copy one byte
-        cpy     #(SER_HDR::JUMPTAB + .sizeof(SER_HDR::JUMPTAB))
-        bne     @L1
-
-        jsr     ser_install             ; Call driver install routine
-
-        ldy     ser_irq+2               ; Check high byte of IRQ vector
-        beq     @L2                     ; Jump if vector invalid
-        ldy     #$4C                    ; Jump opcode
-        sty     ser_irq                 ; Activate IRQ routine
-@L2:    rts
-
-; Driver signature invalid
-
-inv_drv:
-        lda     #SER_ERR_INV_DRIVER
-        ldx     #0
-        rts
-
-; Copy one byte from the jump vectors
-
-copy:   lda     (ptr1),y
-        sta     ser_vectors,x
-        iny
-        inx
-        rts
-
-;----------------------------------------------------------------------------
-; unsigned char ser_uninstall (void);
-; /* Uninstall the currently loaded driver and return an error code.
-; ** Note: This call does not free allocated memory.
-; */
-
-_ser_uninstall:
-        jsr     ser_uninstall           ; Call driver routine
-
-        lda     #$60                    ; RTS opcode
-        sta     ser_irq                 ; Disable IRQ entry point
-
-_ser_clear_ptr:                         ; External entry point
-        lda     #0
-        sta     _ser_drv
-        sta     _ser_drv+1              ; Clear the driver pointer
-
-        tax
-        rts                             ; Return zero
diff --git a/libsrc/serial/ser_close.s b/libsrc/serial/ser_close.s
deleted file mode 100644 (file)
index 0fcc24c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-22
-;
-; unsigned char ser_close (void);
-; /* "Close" the port. Clear buffers and and disable interrupts. */
-
-
-        .include        "ser-kernel.inc"
-
-        _ser_close      = ser_close
diff --git a/libsrc/serial/ser_get.s b/libsrc/serial/ser_get.s
deleted file mode 100644 (file)
index 74a079e..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-04-18
-;
-; unsigned char __fastcall__ ser_get (char* b);
-; /* Get a character from the serial port. If no characters are available, the
-; ** function will return SER_ERR_NO_DATA, so this is not a fatal error.
-; */
-
-
-        .importzp       ptr1
-
-        .include        "ser-kernel.inc"
-
-
-.proc   _ser_get
-
-        sta     ptr1
-        stx     ptr1+1                  ; Save pointer to char
-        jmp     ser_get                 ; Call the driver
-
-.endproc
-
-
-
-
diff --git a/libsrc/serial/ser_ioctl.s b/libsrc/serial/ser_ioctl.s
deleted file mode 100644 (file)
index 0982739..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Oliver Schmidt, 2005-09-02
-;
-; unsigned char __fastcall__ ser_ioctl (unsigned char code, void* data);
-; /* Driver specific entry. */
-
-
-        .import         popa
-        .importzp       ptr1
-
-        .include        "ser-kernel.inc"
-
-
-.proc   _ser_ioctl
-
-        sta     ptr1
-        stx     ptr1+1                  ; Save pointer to data
-        jsr     popa                    ; Get code
-        jmp     ser_ioctl               ; Call the driver
-
-.endproc
-
-
diff --git a/libsrc/serial/ser_load.s b/libsrc/serial/ser_load.s
deleted file mode 100644 (file)
index 069327d..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-;
-; Ullrich von Bassewitz, 2006-06-05
-;
-; unsigned char __fastcall__ ser_load_driver (const char* name)
-; /* Load a serial driver and return an error code */
-
-
-        .include        "ser-kernel.inc"
-        .include        "ser-error.inc"
-        .include        "modload.inc"
-        .include        "fcntl.inc"
-
-        .import         pushax
-        .import         pusha0
-        .import         incsp2
-        .import         _open
-        .import         _read
-        .import         _close
-
-
-
-;----------------------------------------------------------------------------
-; Variables
-
-.data
-
-ctrl:   .addr   _read
-        .res    2                       ; CALLERDATA
-        .res    2                       ; MODULE
-        .res    2                       ; MODULE_SIZE
-        .res    2                       ; MODULE_ID
-
-;----------------------------------------------------------------------------
-; Code
-
-.code
-
-.proc   _ser_load_driver
-
-; Check if we do already have a driver loaded. This is an error. Do not
-; touch A/X because they contain the file name.
-
-        ldy     _ser_drv
-        bne     @L0
-        ldy     _ser_drv+1
-        beq     @L1
-@L0:    lda     #SER_ERR_INSTALLED
-        bne     @L4
-
-; Push the name onto the C stack and open the file. The parameter will get
-; removed by open().
-; ctrl.callerdata = open (name, O_RDONLY);
-
-@L1:    jsr     pushax
-        lda     #<O_RDONLY
-        jsr     pusha0
-        ldy     #4                      ; Argument size
-        jsr     _open
-        sta     ctrl + MOD_CTRL::CALLERDATA
-        stx     ctrl + MOD_CTRL::CALLERDATA+1
-
-; if (ctrl.callerdata >= 0) {
-
-        txa
-        bmi     @L3
-
-; /* Load the module */
-; Res = mod_load (&ctrl);
-
-        lda     #<ctrl
-        ldx     #>ctrl
-        jsr     _mod_load
-        pha
-
-; /* Close the input file */
-; close (ctrl.callerdata);
-
-        lda     ctrl + MOD_CTRL::CALLERDATA
-        ldx     ctrl + MOD_CTRL::CALLERDATA+1
-        jsr     _close
-
-; /* Check the return code */
-; if (Res == MLOAD_OK) {
-
-        pla
-        bne     @L3
-
-; Check the driver signature, install the driver. c is already on stack and
-; will get removed by ser_install().
-; Res = ser_install (ctrl.module);
-
-        lda     ctrl + MOD_CTRL::MODULE
-        ldx     ctrl + MOD_CTRL::MODULE+1
-        jsr     _ser_install
-
-; If ser_install was successful, we're done
-
-        tax
-        beq     @L2
-
-; The driver didn't install correctly. Remove it from memory and return the
-; error code.
-
-        pha                             ; Save the error code
-        lda     _ser_drv
-        ldx     _ser_drv+1
-        jsr     _mod_free               ; Free the driver memory
-        jsr     _ser_clear_ptr          ; Clear ser_drv
-        pla                             ; Restore the error code
-        ldx     #0                      ; We must return an int
-@L2:    rts                             ; Done
-
-; Open or mod_load failed. Return an error code.
-
-@L3:    lda     #<SER_ERR_CANNOT_LOAD
-@L4:    ldx     #0
-        rts
-
-.endproc
-
-
diff --git a/libsrc/serial/ser_open.s b/libsrc/serial/ser_open.s
deleted file mode 100644 (file)
index 22ac98d..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-22
-;
-; unsigned char __fastcall__ ser_open (const struct ser_params* params);
-; /* "Open" the port by setting the port parameters and enable interrupts. */
-
-
-
-        .importzp       ptr1
-
-        .include        "ser-kernel.inc"
-
-
-
-.proc   _ser_open
-
-        sta     ptr1
-        stx     ptr1+1                  ; Save pointer to params
-        jmp     ser_open                ; Call the driver
-
-.endproc
-
-
-
diff --git a/libsrc/serial/ser_put.s b/libsrc/serial/ser_put.s
deleted file mode 100644 (file)
index bab6062..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-04-18
-;
-; unsigned char __fastcall__ ser_put (char b);
-; /* Send a character via the serial port. There is a transmit buffer, but
-; ** transmitting is not done via interrupt. The function returns
-; ** SER_ERR_OVERFLOW if there is no space left in the transmit buffer.
-; */
-
-
-        .include        "ser-kernel.inc"
-
-        _ser_put        = ser_put
-
diff --git a/libsrc/serial/ser_status.s b/libsrc/serial/ser_status.s
deleted file mode 100644 (file)
index ac56daa..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-04-18
-;
-; unsigned char __fastcall__ ser_status (unsigned char* status);
-; /* Return the serial port status. */
-
-
-        .importzp       ptr1
-
-        .include        "ser-kernel.inc"
-
-
-.proc   _ser_status
-
-        sta     ptr1
-        stx     ptr1+1                  ; Save pointer to status
-        jmp     ser_status              ; Call the driver
-
-.endproc
-
-
diff --git a/libsrc/serial/ser_unload.s b/libsrc/serial/ser_unload.s
deleted file mode 100644 (file)
index bf72012..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-04-15
-;
-; unsigned char ser_unload (void);
-; /* Unload the currently loaded driver. */
-
-
-        .include        "ser-kernel.inc"
-        .include        "ser-error.inc"
-        .include        "modload.inc"
-
-        .import         ser_clear_ptr
-        .import         return0
-
-
-
-_ser_unload:
-        lda     _ser_drv
-        pha                             ; Save pointer to driver
-        ora     _ser_drv+1
-        beq     no_driver               ; No driver
-        lda     _ser_drv+1
-        pha
-
-        jsr     _ser_uninstall          ; Uninstall the driver
-
-        pla
-        tax
-        pla                             ; Get pointer to driver
-        jsr     _mod_free               ; Free the driver
-        jmp     return0                 ; Return SER_ERR_OK
-
-no_driver:
-        tax                             ; X = 0
-        pla                             ; Remove pushed junk
-        lda     #<SER_ERR_NO_DRIVER
-        rts
diff --git a/libsrc/sim6502/crt0.s b/libsrc/sim6502/crt0.s
deleted file mode 100644 (file)
index d1831ad..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-;
-; Oliver Schmidt, 2013-05-16
-;
-; Startup code for cc65 (sim6502 version)
-;
-
-        .export         _exit
-        .export         __STARTUP__ : absolute = 1      ; Mark as startup
-        .import         zerobss, callmain
-        .import         initlib, donelib
-        .import         exit
-        .import         __RAM_START__, __RAM_SIZE__     ; Linker generated
-        .import         __STACKSIZE__                   ; Linker generated
-
-        .include        "zeropage.inc"
-
-        .segment        "STARTUP"
-
-        cld
-        ldx     #$FF
-        txs
-        lda     #<(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
-        ldx     #>(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
-        sta     sp
-        stx     sp+1
-        jsr     zerobss
-        jsr     initlib
-        jsr     callmain
-_exit:  pha
-        jsr     donelib
-        pla
-        jmp     exit
diff --git a/libsrc/sim6502/ctype.s b/libsrc/sim6502/ctype.s
deleted file mode 100644 (file)
index 35968f9..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-10-10
-;
-; Character specification table.
-;
-
-        .include        "ctype.inc"
-
-; The tables are readonly, put them into the rodata segment
-
-.rodata
-
-; The following 256 byte wide table specifies attributes for the isxxx type
-; of functions. Doing it by a table means some overhead in space, but it
-; has major advantages:
-;
-;   * It is fast. If it weren't for the slow parameter passing of cc65, one
-;     could even define macros for the isxxx functions (this is usually
-;     done on other platforms).
-;
-;   * It is highly portable. The only unportable part is the table itself,
-;     all real code goes into the common library.
-;
-;   * We save some code in the isxxx functions.
-
-
-__ctype:
-        .byte   CT_CTRL                 ;   0/00 ___ctrl_@___
-        .byte   CT_CTRL                 ;   1/01 ___ctrl_A___
-        .byte   CT_CTRL                 ;   2/02 ___ctrl_B___
-        .byte   CT_CTRL                 ;   3/03 ___ctrl_C___
-        .byte   CT_CTRL                 ;   4/04 ___ctrl_D___
-        .byte   CT_CTRL                 ;   5/05 ___ctrl_E___
-        .byte   CT_CTRL                 ;   6/06 ___ctrl_F___
-        .byte   CT_CTRL                 ;   7/07 ___ctrl_G___
-        .byte   CT_CTRL                 ;   8/08 ___ctrl_H___
-        .byte   CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB
-                                        ;   9/09 ___ctrl_I___
-        .byte   CT_CTRL | CT_OTHER_WS   ;  10/0a ___ctrl_J___
-        .byte   CT_CTRL | CT_OTHER_WS   ;  11/0b ___ctrl_K___
-        .byte   CT_CTRL | CT_OTHER_WS   ;  12/0c ___ctrl_L___
-        .byte   CT_CTRL | CT_OTHER_WS   ;  13/0d ___ctrl_M___
-        .byte   CT_CTRL                 ;  14/0e ___ctrl_N___
-        .byte   CT_CTRL                 ;  15/0f ___ctrl_O___
-        .byte   CT_CTRL                 ;  16/10 ___ctrl_P___
-        .byte   CT_CTRL                 ;  17/11 ___ctrl_Q___
-        .byte   CT_CTRL                 ;  18/12 ___ctrl_R___
-        .byte   CT_CTRL                 ;  19/13 ___ctrl_S___
-        .byte   CT_CTRL                 ;  20/14 ___ctrl_T___
-        .byte   CT_CTRL                 ;  21/15 ___ctrl_U___
-        .byte   CT_CTRL                 ;  22/16 ___ctrl_V___
-        .byte   CT_CTRL                 ;  23/17 ___ctrl_W___
-        .byte   CT_CTRL                 ;  24/18 ___ctrl_X___
-        .byte   CT_CTRL                 ;  25/19 ___ctrl_Y___
-        .byte   CT_CTRL                 ;  26/1a ___ctrl_Z___
-        .byte   CT_CTRL                 ;  27/1b ___ctrl_[___
-        .byte   CT_CTRL                 ;  28/1c ___ctrl_\___
-        .byte   CT_CTRL                 ;  29/1d ___ctrl_]___
-        .byte   CT_CTRL                 ;  30/1e ___ctrl_^___
-        .byte   CT_CTRL                 ;  31/1f ___ctrl_____
-        .byte   CT_SPACE | CT_SPACE_TAB ;  32/20 ___SPACE___
-        .byte   CT_NONE                 ;  33/21 _____!_____
-        .byte   CT_NONE                 ;  34/22 _____"_____
-        .byte   CT_NONE                 ;  35/23 _____#_____
-        .byte   CT_NONE                 ;  36/24 _____$_____
-        .byte   CT_NONE                 ;  37/25 _____%_____
-        .byte   CT_NONE                 ;  38/26 _____&_____
-        .byte   CT_NONE                 ;  39/27 _____'_____
-        .byte   CT_NONE                 ;  40/28 _____(_____
-        .byte   CT_NONE                 ;  41/29 _____)_____
-        .byte   CT_NONE                 ;  42/2a _____*_____
-        .byte   CT_NONE                 ;  43/2b _____+_____
-        .byte   CT_NONE                 ;  44/2c _____,_____
-        .byte   CT_NONE                 ;  45/2d _____-_____
-        .byte   CT_NONE                 ;  46/2e _____._____
-        .byte   CT_NONE                 ;  47/2f _____/_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  48/30 _____0_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  49/31 _____1_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  50/32 _____2_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  51/33 _____3_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  52/34 _____4_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  53/35 _____5_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  54/36 _____6_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  55/37 _____7_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  56/38 _____8_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  57/39 _____9_____
-        .byte   CT_NONE                 ;  58/3a _____:_____
-        .byte   CT_NONE                 ;  59/3b _____;_____
-        .byte   CT_NONE                 ;  60/3c _____<_____
-        .byte   CT_NONE                 ;  61/3d _____=_____
-        .byte   CT_NONE                 ;  62/3e _____>_____
-        .byte   CT_NONE                 ;  63/3f _____?_____
-
-        .byte   CT_NONE                 ;  64/40 _____@_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  65/41 _____A_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  66/42 _____B_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  67/43 _____C_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  68/44 _____D_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  69/45 _____E_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  70/46 _____F_____
-        .byte   CT_UPPER                ;  71/47 _____G_____
-        .byte   CT_UPPER                ;  72/48 _____H_____
-        .byte   CT_UPPER                ;  73/49 _____I_____
-        .byte   CT_UPPER                ;  74/4a _____J_____
-        .byte   CT_UPPER                ;  75/4b _____K_____
-        .byte   CT_UPPER                ;  76/4c _____L_____
-        .byte   CT_UPPER                ;  77/4d _____M_____
-        .byte   CT_UPPER                ;  78/4e _____N_____
-        .byte   CT_UPPER                ;  79/4f _____O_____
-        .byte   CT_UPPER                ;  80/50 _____P_____
-        .byte   CT_UPPER                ;  81/51 _____Q_____
-        .byte   CT_UPPER                ;  82/52 _____R_____
-        .byte   CT_UPPER                ;  83/53 _____S_____
-        .byte   CT_UPPER                ;  84/54 _____T_____
-        .byte   CT_UPPER                ;  85/55 _____U_____
-        .byte   CT_UPPER                ;  86/56 _____V_____
-        .byte   CT_UPPER                ;  87/57 _____W_____
-        .byte   CT_UPPER                ;  88/58 _____X_____
-        .byte   CT_UPPER                ;  89/59 _____Y_____
-        .byte   CT_UPPER                ;  90/5a _____Z_____
-        .byte   CT_NONE                 ;  91/5b _____[_____
-        .byte   CT_NONE                 ;  92/5c _____\_____
-        .byte   CT_NONE                 ;  93/5d _____]_____
-        .byte   CT_NONE                 ;  94/5e _____^_____
-        .byte   CT_NONE                 ;  95/5f _UNDERLINE_
-        .byte   CT_NONE                 ;  96/60 ___grave___
-        .byte   CT_LOWER | CT_XDIGIT    ;  97/61 _____a_____
-        .byte   CT_LOWER | CT_XDIGIT    ;  98/62 _____b_____
-        .byte   CT_LOWER | CT_XDIGIT    ;  99/63 _____c_____
-        .byte   CT_LOWER | CT_XDIGIT    ; 100/64 _____d_____
-        .byte   CT_LOWER | CT_XDIGIT    ; 101/65 _____e_____
-        .byte   CT_LOWER | CT_XDIGIT    ; 102/66 _____f_____
-        .byte   CT_LOWER                ; 103/67 _____g_____
-        .byte   CT_LOWER                ; 104/68 _____h_____
-        .byte   CT_LOWER                ; 105/69 _____i_____
-        .byte   CT_LOWER                ; 106/6a _____j_____
-        .byte   CT_LOWER                ; 107/6b _____k_____
-        .byte   CT_LOWER                ; 108/6c _____l_____
-        .byte   CT_LOWER                ; 109/6d _____m_____
-        .byte   CT_LOWER                ; 110/6e _____n_____
-        .byte   CT_LOWER                ; 111/6f _____o_____
-        .byte   CT_LOWER                ; 112/70 _____p_____
-        .byte   CT_LOWER                ; 113/71 _____q_____
-        .byte   CT_LOWER                ; 114/72 _____r_____
-        .byte   CT_LOWER                ; 115/73 _____s_____
-        .byte   CT_LOWER                ; 116/74 _____t_____
-        .byte   CT_LOWER                ; 117/75 _____u_____
-        .byte   CT_LOWER                ; 118/76 _____v_____
-        .byte   CT_LOWER                ; 119/77 _____w_____
-        .byte   CT_LOWER                ; 120/78 _____x_____
-        .byte   CT_LOWER                ; 121/79 _____y_____
-        .byte   CT_LOWER                ; 122/7a _____z_____
-        .byte   CT_NONE                 ; 123/7b _____{_____
-        .byte   CT_NONE                 ; 124/7c _____|_____
-        .byte   CT_NONE                 ; 125/7d _____}_____
-        .byte   CT_NONE                 ; 126/7e _____~_____
-        .byte   CT_OTHER_WS             ; 127/7f ____DEL____
-
-        .res    128, CT_NONE            ; 128-255
diff --git a/libsrc/sim6502/exehdr.s b/libsrc/sim6502/exehdr.s
deleted file mode 100644 (file)
index 865bd65..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-;
-; Oliver Schmidt, 2013-05-16
-;
-; This module supplies a 1 byte header identifying the simulator type
-;
-
-        .export         __EXEHDR__ : absolute = 1       ; Linker referenced
-
-        .segment        "EXEHDR"
-
-        .byte   .defined(__SIM65C02__)
diff --git a/libsrc/sim6502/mainargs.s b/libsrc/sim6502/mainargs.s
deleted file mode 100644 (file)
index 1daa23a..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Oliver Schmidt, 2013-05-16
-;
-
-        .constructor    initmainargs, 24
-        .import         __argc, __argv, args
-
-        .segment        "INIT"
-
-initmainargs:
-        lda     #<__argv
-        ldx     #>__argv
-        jsr     args
-        sta     __argc
-        stx     __argc+1
-        rts
diff --git a/libsrc/sim6502/paravirt.s b/libsrc/sim6502/paravirt.s
deleted file mode 100644 (file)
index 81b655c..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Oliver Schmidt, 2013-05-16
-;
-; int open (const char* name, int flags, ...);
-; int __fastcall__ close (int fd);
-; int __fastcall__ read (int fd, void* buf, unsigned count);
-; int __fastcall__ write (int fd, const void* buf, unsigned count);
-;
-
-        .export         args, exit, _open, _close, _read, _write
-
-args            := $FFF0
-exit            := $FFF1
-_open           := $FFF2
-_close          := $FFF3
-_read           := $FFF4
-_write          := $FFF5
diff --git a/libsrc/supervision/crt0.s b/libsrc/supervision/crt0.s
deleted file mode 100644 (file)
index d78bfea..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-;
-; Startup code for cc65 (supervision version)
-;
-
-        .export         _exit
-        .export         __STARTUP__ : absolute = 1      ; Mark as startup
-
-        .import         _main
-        .import         initlib, donelib, copydata
-        .import         zerobss
-        .import         __RAM_START__, __RAM_SIZE__     ; Linker generated
-        .import         __STACKSIZE__                   ; Linker generated
-
-        .include "zeropage.inc"
-        .include "supervision.inc"
-
-        .export _sv_irq_timer_counter, _sv_irq_dma_counter
-        .export _sv_nmi_counter
-
-.bss
-
-_sv_irq_dma_counter:    .byte 0
-_sv_irq_timer_counter:  .byte 0
-_sv_nmi_counter:        .byte 0
-
-.code
-
-reset:
-        jsr     zerobss
-
-        ; Initialize data.
-        jsr     copydata
-
-        lda     #>(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
-        sta     sp+1            ; Set argument stack ptr
-        stz     sp              ; #<(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
-        jsr     initlib
-        jsr     _main
-_exit:  jsr     donelib
-exit:   jmp     exit
-
-
-.proc   irq
-        pha
-        lda     sv_irq_source
-        and     #SV_IRQ_REQUEST_TIMER
-        beq     not_timer
-        lda     sv_timer_quit
-        inc     _sv_irq_timer_counter
-not_timer:
-        lda     sv_irq_source
-        and     #SV_IRQ_REQUEST_DMA
-        beq     not_dma
-        lda     sv_dma_quit
-        inc     _sv_irq_dma_counter
-not_dma:
-        pla
-        rti
-.endproc
-
-.proc   nmi
-        inc     _sv_nmi_counter
-        rti
-.endproc
-
-; Removing this segment gives only a warning.
-        .segment "FFF0"
-.proc reset32kcode
-        lda     #(6<<5)
-        sta     sv_bank
-; Now, the 32Kbyte image can reside in the top of 64Kbyte and 128Kbyte ROMs.
-        jmp     reset
-.endproc
-
-        .segment "VECTOR"
-
-.word   nmi
-.word   reset32kcode
-.word   irq
-
-
diff --git a/libsrc/supervision/ctype.s b/libsrc/supervision/ctype.s
deleted file mode 100644 (file)
index 1892554..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-10-10
-;
-; Character specification table.
-;
-
-        .include        "ctype.inc"
-
-; The tables are readonly, put them into the rodata segment
-
-.rodata
-
-; The following 256 byte wide table specifies attributes for the isxxx type
-; of functions. Doing it by a table means some overhead in space, but it
-; has major advantages:
-;
-;   * It is fast. If it weren't for the slow parameter passing of cc65, one
-;     could even define macros for the isxxx functions (this is usually
-;     done on other platforms).
-;
-;   * It is highly portable. The only unportable part is the table itself,
-;     all real code goes into the common library.
-;
-;   * We save some code in the isxxx functions.
-
-
-__ctype:
-        .byte   CT_CTRL                 ;   0/00 ___ctrl_@___
-        .byte   CT_CTRL                 ;   1/01 ___ctrl_A___
-        .byte   CT_CTRL                 ;   2/02 ___ctrl_B___
-        .byte   CT_CTRL                 ;   3/03 ___ctrl_C___
-        .byte   CT_CTRL                 ;   4/04 ___ctrl_D___
-        .byte   CT_CTRL                 ;   5/05 ___ctrl_E___
-        .byte   CT_CTRL                 ;   6/06 ___ctrl_F___
-        .byte   CT_CTRL                 ;   7/07 ___ctrl_G___
-        .byte   CT_CTRL                 ;   8/08 ___ctrl_H___
-        .byte   CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB
-                                        ;   9/09 ___ctrl_I___
-        .byte   CT_CTRL | CT_OTHER_WS   ;  10/0a ___ctrl_J___
-        .byte   CT_CTRL | CT_OTHER_WS   ;  11/0b ___ctrl_K___
-        .byte   CT_CTRL | CT_OTHER_WS   ;  12/0c ___ctrl_L___
-        .byte   CT_CTRL | CT_OTHER_WS   ;  13/0d ___ctrl_M___
-        .byte   CT_CTRL                 ;  14/0e ___ctrl_N___
-        .byte   CT_CTRL                 ;  15/0f ___ctrl_O___
-        .byte   CT_CTRL                 ;  16/10 ___ctrl_P___
-        .byte   CT_CTRL                 ;  17/11 ___ctrl_Q___
-        .byte   CT_CTRL                 ;  18/12 ___ctrl_R___
-        .byte   CT_CTRL                 ;  19/13 ___ctrl_S___
-        .byte   CT_CTRL                 ;  20/14 ___ctrl_T___
-        .byte   CT_CTRL                 ;  21/15 ___ctrl_U___
-        .byte   CT_CTRL                 ;  22/16 ___ctrl_V___
-        .byte   CT_CTRL                 ;  23/17 ___ctrl_W___
-        .byte   CT_CTRL                 ;  24/18 ___ctrl_X___
-        .byte   CT_CTRL                 ;  25/19 ___ctrl_Y___
-        .byte   CT_CTRL                 ;  26/1a ___ctrl_Z___
-        .byte   CT_CTRL                 ;  27/1b ___ctrl_[___
-        .byte   CT_CTRL                 ;  28/1c ___ctrl_\___
-        .byte   CT_CTRL                 ;  29/1d ___ctrl_]___
-        .byte   CT_CTRL                 ;  30/1e ___ctrl_^___
-        .byte   CT_CTRL                 ;  31/1f ___ctrl_____
-        .byte   CT_SPACE | CT_SPACE_TAB ;  32/20 ___SPACE___
-        .byte   CT_NONE                 ;  33/21 _____!_____
-        .byte   CT_NONE                 ;  34/22 _____"_____
-        .byte   CT_NONE                 ;  35/23 _____#_____
-        .byte   CT_NONE                 ;  36/24 _____$_____
-        .byte   CT_NONE                 ;  37/25 _____%_____
-        .byte   CT_NONE                 ;  38/26 _____&_____
-        .byte   CT_NONE                 ;  39/27 _____'_____
-        .byte   CT_NONE                 ;  40/28 _____(_____
-        .byte   CT_NONE                 ;  41/29 _____)_____
-        .byte   CT_NONE                 ;  42/2a _____*_____
-        .byte   CT_NONE                 ;  43/2b _____+_____
-        .byte   CT_NONE                 ;  44/2c _____,_____
-        .byte   CT_NONE                 ;  45/2d _____-_____
-        .byte   CT_NONE                 ;  46/2e _____._____
-        .byte   CT_NONE                 ;  47/2f _____/_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  48/30 _____0_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  49/31 _____1_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  50/32 _____2_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  51/33 _____3_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  52/34 _____4_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  53/35 _____5_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  54/36 _____6_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  55/37 _____7_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  56/38 _____8_____
-        .byte   CT_DIGIT | CT_XDIGIT    ;  57/39 _____9_____
-        .byte   CT_NONE                 ;  58/3a _____:_____
-        .byte   CT_NONE                 ;  59/3b _____;_____
-        .byte   CT_NONE                 ;  60/3c _____<_____
-        .byte   CT_NONE                 ;  61/3d _____=_____
-        .byte   CT_NONE                 ;  62/3e _____>_____
-        .byte   CT_NONE                 ;  63/3f _____?_____
-
-        .byte   CT_NONE                 ;  64/40 _____@_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  65/41 _____A_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  66/42 _____B_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  67/43 _____C_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  68/44 _____D_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  69/45 _____E_____
-        .byte   CT_UPPER | CT_XDIGIT    ;  70/46 _____F_____
-        .byte   CT_UPPER                ;  71/47 _____G_____
-        .byte   CT_UPPER                ;  72/48 _____H_____
-        .byte   CT_UPPER                ;  73/49 _____I_____
-        .byte   CT_UPPER                ;  74/4a _____J_____
-        .byte   CT_UPPER                ;  75/4b _____K_____
-        .byte   CT_UPPER                ;  76/4c _____L_____
-        .byte   CT_UPPER                ;  77/4d _____M_____
-        .byte   CT_UPPER                ;  78/4e _____N_____
-        .byte   CT_UPPER                ;  79/4f _____O_____
-        .byte   CT_UPPER                ;  80/50 _____P_____
-        .byte   CT_UPPER                ;  81/51 _____Q_____
-        .byte   CT_UPPER                ;  82/52 _____R_____
-        .byte   CT_UPPER                ;  83/53 _____S_____
-        .byte   CT_UPPER                ;  84/54 _____T_____
-        .byte   CT_UPPER                ;  85/55 _____U_____
-        .byte   CT_UPPER                ;  86/56 _____V_____
-        .byte   CT_UPPER                ;  87/57 _____W_____
-        .byte   CT_UPPER                ;  88/58 _____X_____
-        .byte   CT_UPPER                ;  89/59 _____Y_____
-        .byte   CT_UPPER                ;  90/5a _____Z_____
-        .byte   CT_NONE                 ;  91/5b _____[_____
-        .byte   CT_NONE                 ;  92/5c _____\_____
-        .byte   CT_NONE                 ;  93/5d _____]_____
-        .byte   CT_NONE                 ;  94/5e _____^_____
-        .byte   CT_NONE                 ;  95/5f _UNDERLINE_
-        .byte   CT_NONE                 ;  96/60 ___grave___
-        .byte   CT_LOWER | CT_XDIGIT    ;  97/61 _____a_____
-        .byte   CT_LOWER | CT_XDIGIT    ;  98/62 _____b_____
-        .byte   CT_LOWER | CT_XDIGIT    ;  99/63 _____c_____
-        .byte   CT_LOWER | CT_XDIGIT    ; 100/64 _____d_____
-        .byte   CT_LOWER | CT_XDIGIT    ; 101/65 _____e_____
-        .byte   CT_LOWER | CT_XDIGIT    ; 102/66 _____f_____
-        .byte   CT_LOWER                ; 103/67 _____g_____
-        .byte   CT_LOWER                ; 104/68 _____h_____
-        .byte   CT_LOWER                ; 105/69 _____i_____
-        .byte   CT_LOWER                ; 106/6a _____j_____
-        .byte   CT_LOWER                ; 107/6b _____k_____
-        .byte   CT_LOWER                ; 108/6c _____l_____
-        .byte   CT_LOWER                ; 109/6d _____m_____
-        .byte   CT_LOWER                ; 110/6e _____n_____
-        .byte   CT_LOWER                ; 111/6f _____o_____
-        .byte   CT_LOWER                ; 112/70 _____p_____
-        .byte   CT_LOWER                ; 113/71 _____q_____
-        .byte   CT_LOWER                ; 114/72 _____r_____
-        .byte   CT_LOWER                ; 115/73 _____s_____
-        .byte   CT_LOWER                ; 116/74 _____t_____
-        .byte   CT_LOWER                ; 117/75 _____u_____
-        .byte   CT_LOWER                ; 118/76 _____v_____
-        .byte   CT_LOWER                ; 119/77 _____w_____
-        .byte   CT_LOWER                ; 120/78 _____x_____
-        .byte   CT_LOWER                ; 121/79 _____y_____
-        .byte   CT_LOWER                ; 122/7a _____z_____
-        .byte   CT_NONE                 ; 123/7b _____{_____
-        .byte   CT_NONE                 ; 124/7c _____|_____
-        .byte   CT_NONE                 ; 125/7d _____}_____
-        .byte   CT_NONE                 ; 126/7e _____~_____
-        .byte   CT_OTHER_WS             ; 127/7f ____DEL____
-
-        .res    128, CT_NONE            ; 128-255
-
-
-
diff --git a/libsrc/tgi/tgi-kernel.s b/libsrc/tgi/tgi-kernel.s
deleted file mode 100644 (file)
index ed65760..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-;
-; Ullrich von Bassewitz, 21.06.2002
-;
-; Common functions of the tgi graphics kernel.
-;
-
-        .import         tgi_libref
-        .importzp       ptr1
-        .interruptor    tgi_irq         ; Export as IRQ handler
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-
-;----------------------------------------------------------------------------
-; Variables
-
-.bss
-
-_tgi_drv:           .res    2           ; Pointer to driver
-; From here on, variables get cleared when a new driver is loaded
-cstart:
-_tgi_error:         .res    1           ; Last error code
-_tgi_gmode:         .res    1           ; Flag: Graphics mode active
-_tgi_curx:          .res    2           ; Current drawing cursor X
-_tgi_cury:          .res    2           ; Current drawing cursor Y
-_tgi_color:         .res    1           ; Current drawing color
-_tgi_font:          .res    1           ; Which font to use
-_tgi_textdir:       .res    1           ; Current text direction
-_tgi_vectorfont:    .res    2           ; Pointer to vector font
-; The following are character scale/size variables in 8.8 fixed point
-; format. They are required to be in this order and adjacent.
-_tgi_textscalew:    .res    2           ; Vector font width scale
-                    .res    2           ; Bitmap font width scale
-_tgi_charwidth:     .res    2           ; Full width of one bitmap char
-_tgi_textscaleh:    .res    2           ; Vector font height scale
-                    .res    2           ; Bitmap font height scale
-_tgi_charheight:    .res    2           ; Full height of one bitmap char
-
-; End of section that gets cleared when a new driver is loaded
-csize   = * - cstart
-
-; Maximum X and Y coordinate (that is, xres-1 and yres-1)
-_tgi_xmax:          .res    2
-_tgi_ymax:          .res    2
-
-; The following variables are copied from the driver header for faster access.
-; fontwidth and fontheight are expected to be in order and adjacent.
-tgi_driver_vars:
-_tgi_xres:          .res    2           ; X resolution of the current mode
-_tgi_yres:          .res    2           ; Y resolution of the current mode
-_tgi_colorcount:    .res    1           ; Number of available colors
-_tgi_pagecount:     .res    1           ; Number of available screen pages
-_tgi_fontwidth:     .res    1           ; System font width in pixels
-_tgi_fontheight:    .res    1           ; System font height in pixels
-_tgi_aspectratio:   .res    2           ; Aspect ratio in 8.8 fixed point
-_tgi_flags:         .res    1           ; TGI driver flags
-
-
-.data
-
-; Jump table for the driver functions.
-
-jumpvectors:
-tgi_install:        jmp     $0000
-tgi_uninstall:      jmp     $0000
-tgi_init:           jmp     $0000
-tgi_done:           jmp     $0000
-tgi_geterror:       jmp     $0000
-tgi_control:        jmp     $0000
-tgi_clear:          jmp     $0000
-tgi_setviewpage:    jmp     $0000
-tgi_setdrawpage:    jmp     $0000
-tgi_setcolor:       jmp     $0000
-tgi_setpalette:     jmp     $0000
-tgi_getpalette:     jmp     $0000
-tgi_getdefpalette:  jmp     $0000
-tgi_setpixel:       jmp     $0000
-tgi_getpixel:       jmp     $0000
-tgi_line:           jmp     $0000
-tgi_bar:            jmp     $0000
-tgi_textstyle:      jmp     $0000
-tgi_outtext:        jmp     $0000
-tgi_irq:            .byte   $60, $00, $00       ; RTS plus two dummy bytes
-
-; Driver header signature
-.rodata
-tgi_sig:        .byte   $74, $67, $69, TGI_API_VERSION  ; "tgi", version
-
-
-.code
-;----------------------------------------------------------------------------
-; void __fastcall__ tgi_install (void* driver);
-; /* Install an already loaded driver. */
-
-
-_tgi_install:
-        sta     _tgi_drv
-        sta     ptr1
-        stx     _tgi_drv+1
-        stx     ptr1+1
-
-; Check the driver signature
-
-        ldy     #.sizeof(tgi_sig)-1
-@L0:    lda     (ptr1),y
-        cmp     tgi_sig,y
-        bne     tgi_inv_drv
-        dey
-        bpl     @L0
-
-; Set the library reference
-
-        ldy     #TGI_HDR::LIBREF
-        lda     #<tgi_libref
-        sta     (ptr1),y
-        iny
-        lda     #>tgi_libref
-        sta     (ptr1),y
-
-; Copy the jump vectors
-
-        ldy     #TGI_HDR::JUMPTAB
-        ldx     #0
-@L1:    inx                             ; Skip JMP opcode
-        jsr     copy                    ; Copy one byte
-        jsr     copy                    ; Copy one byte
-        cpy     #(TGI_HDR::JUMPTAB + .sizeof(TGI_HDR::JUMPTAB))
-        bne     @L1
-
-; Call the driver install routine. It may update header variables, so we copy
-; them after this call.
-
-        jsr     tgi_install
-
-; Copy variables from the driver header for faster access.
-
-        jsr     tgi_set_ptr             ; Set ptr1 to tgi_drv
-        ldy     #(TGI_HDR::VARS + .sizeof(TGI_HDR::VARS) - 1)
-        ldx     #.sizeof(TGI_HDR::VARS)-1
-@L3:    lda     (ptr1),y
-        sta     tgi_driver_vars,x
-        dey
-        dex
-        bpl     @L3
-
-; Install the IRQ vector if the driver needs it.
-
-        lda     tgi_irq+2               ; Check high byte of IRQ vector
-        beq     @L4                     ; Jump if vector invalid
-        lda     #$4C                    ; Jump opcode
-        sta     tgi_irq                 ; Activate IRQ routine
-
-; Initialize some other variables
-
-        lda     #$00
-@L4:    ldx     #csize-1
-@L5:    sta     cstart,x                ; Clear error/mode/curx/cury/...
-        dex
-        bpl     @L5
-
-        rts
-
-; Copy one byte to the jump vectors
-
-copy:   lda     (ptr1),y
-        sta     jumpvectors,x
-        iny
-        inx
-        rts
-
-;----------------------------------------------------------------------------
-; Set an invalid argument error
-
-tgi_inv_arg:
-        lda     #TGI_ERR_INV_ARG
-        sta     _tgi_error
-        rts
-
-;----------------------------------------------------------------------------
-; Set an invalid driver error
-
-tgi_inv_drv:
-        lda     #TGI_ERR_INV_DRIVER
-        sta     _tgi_error
-        rts
-
-;----------------------------------------------------------------------------
-; Load the pointer to the tgi driver into ptr1.
-
-tgi_set_ptr:
-        lda     _tgi_drv
-        sta     ptr1
-        lda     _tgi_drv+1
-        sta     ptr1+1
-        rts
-
-;----------------------------------------------------------------------------
-; void tgi_uninstall (void);
-; /* Uninstall the currently loaded driver but do not unload it. Will call
-; ** tgi_done if necessary.
-; */
-
-_tgi_uninstall:
-        jsr     _tgi_done               ; Switch off graphics
-
-        jsr     tgi_uninstall           ; Allow the driver to clean up
-
-        lda     #$60                    ; RTS opcode
-        sta     tgi_irq                 ; Disable IRQ entry point
-
-; Clear driver pointer and error code
-
-tgi_clear_ptr:
-        lda     #$00
-        sta     _tgi_drv
-        sta     _tgi_drv+1
-        sta     _tgi_error
-
-        rts
diff --git a/libsrc/tgi/tgi_arc.c b/libsrc/tgi/tgi_arc.c
deleted file mode 100644 (file)
index e505b7b..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 tgi_arc.c                                 */
-/*                                                                           */
-/*                            Draw an ellipse arc                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <tgi.h>
-#include <tgi/tgi-kernel.h>
-#include <cc65.h>
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void __fastcall__ tgi_arc (int x, int y, unsigned char rx, unsigned char ry,
-                           unsigned sa, unsigned ea)
-/* Draw an ellipse arc with center at x/y and radii rx/ry using the current
-** drawing color. The arc covers the angle between sa and ea (startangle and
-** endangle), which must be in the range 0..360 (otherwise the function may
-** bevave unextectedly).
-*/
-{
-    int x1, y1, x2, y2;
-    unsigned char inc;
-    unsigned char done = 0;
-
-    /* Bail out if there's nothing to do */
-    if (sa > ea) {
-        return;
-    }
-
-    /* Determine the number of segments to use. This may be refined ... */
-    if (rx + ry >= 25) {
-        inc = 12;
-    } else {
-        inc = 24;
-    }
-
-    /* Calculate the start coords */
-    x1 = x + tgi_imulround (rx, cc65_cos (sa));
-    y1 = y - tgi_imulround (ry, cc65_sin (sa));
-    do {
-        sa += inc;
-        if (sa >= ea) {
-            sa = ea;
-            done = 1;
-        }
-        x2 = x + tgi_imulround (rx, cc65_cos (sa));
-        y2 = y - tgi_imulround (ry, cc65_sin (sa));
-        tgi_line (x1, y1, x2, y2);
-        x1 = x2;
-        y1 = y2;
-    } while (!done);
-}
-
-
-
diff --git a/libsrc/tgi/tgi_bar.s b/libsrc/tgi/tgi_bar.s
deleted file mode 100644 (file)
index 476f9d7..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-;
-; Ullrich von Bassewitz, 21.06.2002
-;
-; void __fastcall__ tgi_bar (int x1, int y1, int x2, int y2);
-; /* Draw a bar (a filled rectangle) using the current color */
-
-
-        .include        "tgi-kernel.inc"
-
-        .importzp       ptr1, ptr2, ptr3, ptr4
-        .import         popax
-
-
-.proc   _tgi_bar
-
-        sta     ptr4            ; Y2
-        stx     ptr4+1
-
-        jsr     popax
-        sta     ptr3            ; X2
-        stx     ptr3+1
-
-        jsr     popax
-        sta     ptr2            ; Y1
-        stx     ptr2+1
-
-        jsr     popax
-        sta     ptr1            ; X1
-        stx     ptr1+1
-
-; Make sure X1 is less than X2. Swap both if not.
-
-        lda     ptr3
-        cmp     ptr1
-        lda     ptr3+1
-        sbc     ptr1+1
-        bpl     @L1
-        lda     ptr3
-        ldy     ptr1
-        sta     ptr1
-        sty     ptr3
-        lda     ptr3+1
-        ldy     ptr1+1
-        sta     ptr1+1
-        sty     ptr3+1
-
-; Make sure Y1 is less than Y2. Swap both if not.
-
-@L1:    lda     ptr4
-        cmp     ptr2
-        lda     ptr4+1
-        sbc     ptr2+1
-        bpl     @L2
-        lda     ptr4
-        ldy     ptr2
-        sta     ptr2
-        sty     ptr4
-        lda     ptr4+1
-        ldy     ptr2+1
-        sta     ptr2+1
-        sty     ptr4+1
-
-; Check if X2 or Y2 are negative. If so, the bar is completely out of screen.
-
-@L2:    lda     ptr4+1
-        ora     ptr3+1
-        bmi     @L9             ; Bail out
-
-; Check if X1 is negative. If so, clip it to the left border (zero).
-
-        bit     ptr1+1
-        bpl     @L3
-        lda     #$00
-        sta     ptr1
-        sta     ptr1+1
-        beq     @L4             ; Branch always, skip following test
-
-; Check if X1 is beyond the right border. If so, the bar is invisible.
-
-@L3:    lda     ptr1
-        cmp     _tgi_xres
-        lda     ptr1+1
-        sbc     _tgi_xres
-        bcs     @L9             ; Bail out if invisible
-
-; Check if Y1 is negative. If so, clip it to the top border (zero).
-
-@L4:    bit     ptr2+1
-        bpl     @L5
-        lda     #$00
-        sta     ptr2
-        sta     ptr2+1
-        beq     @L6             ; Branch always, skip following test
-
-; Check if Y1 is beyond the bottom border. If so, the bar is invisible.
-
-@L5:    lda     ptr2
-        cmp     _tgi_yres
-        lda     ptr2+1
-        sbc     _tgi_yres
-        bcs     @L9             ; Bail out if invisible
-
-; Check if X2 is larger than the maximum x coord. If so, clip it.
-
-@L6:    lda     ptr3
-        cmp     _tgi_xres
-        lda     ptr3+1
-        sbc     _tgi_xres+1
-        bcc     @L7
-        jsr     _tgi_getmaxx
-        sta     ptr3
-        stx     ptr3+1
-
-; Check if Y2 is larger than the maximum y coord. If so, clip it.
-
-@L7:    lda     ptr4
-        cmp     _tgi_yres
-        lda     ptr4+1
-        sbc     _tgi_yres+1
-        bcc     @L8
-        jsr     _tgi_getmaxy
-        sta     ptr4
-        stx     ptr4+1
-
-; The coordinates are now valid. Call the driver.
-
-@L8:    jmp     tgi_bar
-
-; Error exit
-
-@L9:    rts
-
-.endproc
diff --git a/libsrc/tgi/tgi_circle.s b/libsrc/tgi/tgi_circle.s
deleted file mode 100644 (file)
index c1d2afa..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-11-05
-;
-; void __fastcall__ tgi_circle (int x, int y, unsigned char radius);
-; /* Draw a circle in the current drawing color */
-
-        .include        "tgi-kernel.inc"
-
-        .import         pusha
-
-
-;----------------------------------------------------------------------------
-;
-
-.code
-.proc   _tgi_circle
-
-        jsr     pusha                   ; Push as rx
-        jmp     _tgi_ellipse            ; Draw an ellipse with rx=ry
-
-.endproc
diff --git a/libsrc/tgi/tgi_clear.s b/libsrc/tgi/tgi_clear.s
deleted file mode 100644 (file)
index 5058f0a..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-;
-; Ullrich von Bassewitz, 21.06.2002
-;
-; void tgi_clear (void);
-; /* Clear the drawpage */
-
-        .include        "tgi-kernel.inc"
-
-_tgi_clear      = tgi_clear               ; Call the driver
diff --git a/libsrc/tgi/tgi_clippedline.s b/libsrc/tgi/tgi_clippedline.s
deleted file mode 100644 (file)
index b32b819..0000000
+++ /dev/null
@@ -1,476 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-10-25
-;
-; Clips line coordinates to the screen coordinates and calls tgi_line
-;
-
-
-        .import umul16x16r32, udiv32by16r16
-        .import negax
-
-        .include "tgi-kernel.inc"
-        .include "zeropage.inc"
-
-        .macpack longbranch
-
-;----------------------------------------------------------------------------
-; Data
-
-.bss
-
-; Outcodes for both ends
-tgi_clip_o1:    .res    1
-tgi_clip_o2:    .res    1
-
-; Line deltas
-tgi_clip_d:     .res    1
-tgi_clip_dx:    .res    2
-tgi_clip_dy:    .res    2
-
-tgi_clip_sign:  .res    1
-
-
-;----------------------------------------------------------------------------
-; Calculate outcodes for both ends of the line
-;
-
-.code
-.proc   outcode1
-
-        ldy     #0
-        jsr     tgi_outcode
-        sta     tgi_clip_o1
-        rts
-
-.endproc
-
-.code
-.proc   outcode2
-
-        ldy     #<(tgi_clip_y2 - tgi_clip_y1)
-        jsr     tgi_outcode
-        sta     tgi_clip_o2
-        rts
-
-.endproc
-
-
-;----------------------------------------------------------------------------
-; Negate tgi_clip_dxy
-;
-
-.code
-.proc   negate
-
-        lda     tgi_clip_dx,y
-        eor     #$FF
-        clc
-        adc     #1
-        sta     tgi_clip_dx,y
-        lda     tgi_clip_dx+1,y
-        eor     #$FF
-        adc     #$00
-        sta     tgi_clip_dx+1,y
-        rts
-
-.endproc
-
-
-;----------------------------------------------------------------------------
-; Calculate the absolute values of dx and dy and store the combined sign in
-; tgi_clip_sign
-;
-
-.code
-.proc   calcdeltas
-
-        lda     tgi_clip_x2
-        sec
-        sbc     tgi_clip_x1
-        sta     tgi_clip_dx
-        lda     tgi_clip_x2+1
-        sbc     tgi_clip_x1+1
-        sta     tgi_clip_dx+1
-        sta     tgi_clip_sign
-        bpl     @L1
-        ldy     #0
-        jsr     negate
-
-@L1:    lda     tgi_clip_y2
-        sec
-        sbc     tgi_clip_y1
-        sta     tgi_clip_dy
-        lda     tgi_clip_y2+1
-        sbc     tgi_clip_y1+1
-        sta     tgi_clip_dy+1
-
-        eor     tgi_clip_sign
-        sta     tgi_clip_sign
-
-        bit     tgi_clip_dy+1
-        bpl     @L9
-
-        ldy     #(tgi_clip_dy - tgi_clip_dx)
-        jmp     negate
-
-@L9:    rts
-
-.endproc
-
-
-;----------------------------------------------------------------------------
-; Helper routine. Generate the absolute value of y/a and calculate the sign
-; of the final result
-;
-
-.code
-.proc   prepare_coord
-
-        tax                             ; Remember high byte
-        eor     tgi_clip_sign
-        sta     tmp1                    ; Sign of result
-        tya
-        cpx     #0                      ; Check sign
-        bpl     @L1
-        jsr     negax
-@L1:    sta     ptr1
-        stx     ptr1+1
-        rts
-
-.endproc
-
-
-;----------------------------------------------------------------------------
-; Helper routine. Move the value in eax to ptr1:ptr2
-;
-
-.code
-.proc   move_intermediate_result
-
-        sta     ptr1
-        stx     ptr1+1
-        ldy     sreg
-        sty     ptr2
-        ldy     sreg+1
-        sty     ptr2+1
-        rts
-
-.endproc
-
-
-;----------------------------------------------------------------------------
-; Multiplicate value in y/a by dy, then divide by dx.
-;
-
-.code
-.proc   muldiv_dydx
-
-; Generate the absolute value of y/a and calculate the sign of the final
-; result
-
-        jsr     prepare_coord
-
-; All values are positive now (dx/dy have been made positive in calcdeltas)
-; and the sign of the final result is on tmp1, so we can use unsigned
-; operations and apply the final result later, after rounding.
-
-        lda     tgi_clip_dy
-        ldx     tgi_clip_dy+1           ; rhs
-        jsr     umul16x16r32            ; Multiplicate
-
-; Move the result of the multiplication into ptr1:ptr2
-
-        jsr     move_intermediate_result
-
-; Load divisor and divide
-
-        lda     tgi_clip_dx
-        ldx     tgi_clip_dx+1
-        jsr     udiv32by16r16
-
-; Check the sign of the final result and negate it if nessary
-
-done:   bit     tmp1
-        jmi     negax
-        rts
-
-.endproc
-
-
-
-;----------------------------------------------------------------------------
-; Multiplicate value in y/a by dx, then divide by dy.
-;
-
-.code
-.proc   muldiv_dxdy
-
-; Generate the absolute value of y/a and calculate the sign of the final
-; result
-
-        jsr     prepare_coord
-
-; All values are positive now (dx/dy have been made positive in calcdeltas)
-; and the sign of the final result is on tmp1, so we can use unsigned
-; operations and apply the final result later, after rounding.
-
-        lda     tgi_clip_dx
-        ldx     tgi_clip_dx+1           ; rhs
-        jsr     umul16x16r32            ; Multiplicate
-
-; Move the result of the multiplication into ptr1:ptr2
-
-        jsr     move_intermediate_result
-
-; Load divisor and divide
-
-        lda     tgi_clip_dy
-        ldx     tgi_clip_dy+1
-        jsr     udiv32by16r16
-
-; Check the sign of the final result and negate it if nessary
-
-        jmp     muldiv_dydx::done
-
-.endproc
-
-
-
-;----------------------------------------------------------------------------
-; Clip a line using Cohen Sutherland
-;
-
-.code
-.proc   tgi_clippedline
-
-; Set a flag that we have no deltas calculated
-
-        lda     #0
-        sta     tgi_clip_d
-
-; Generate outcodes
-
-        jsr     outcode1
-        jsr     outcode2
-
-; if ((tgi_clip_o1 | tgi_clip_o2) == 0) {
-;     tgi_line (x1, y1, x2, y2);
-; }
-
-Loop:   lda     tgi_clip_o1
-        ora     tgi_clip_o2
-        bne     L1
-
-; Copy the coordinates into ptr1-4 and draw the line
-
-        ldx     #7
-L0:     lda     tgi_clip_x1,x
-        sta     ptr1,x
-        dex
-        bpl     L0
-        jmp     tgi_line
-
-; if ((tgi_clip_o1 & tgi_clip_o2) != 0) reject;
-
-L1:     lda     tgi_clip_o1
-        and     tgi_clip_o2
-        beq     L2
-        rts                             ; Nothing to draw
-
-; We must clip. If we haven't already done so, calculate dx/dy.
-
-L2:     lda     tgi_clip_d              ; Deltas alreay calculated?
-        bne     HaveDeltas              ; Jump if yes
-        inc     tgi_clip_d
-        jsr     calcdeltas
-
-; Check if X1/Y1 needs clipping
-
-HaveDeltas:
-        lda     tgi_clip_o1
-        jeq     L10
-
-; Need to clip X1/Y1
-
-        lsr     a                       ; Check for TGI_CLIP_LEFT
-        bcc     L3
-
-; tgi_clip_y1 += (0 - tgi_clip_x1) * tgi_clip_dy / tgi_clip_dx;
-; tgi_clip_x1 = 0;
-
-        lda     #$00
-        tax
-        beq     L4
-
-L3:     lsr     a                       ; Check for TGI_CLIP_RIGHT
-        bcc     L5
-
-; tgi_clip_y1 += (tgi_xmax - tgi_clip_x1) * tgi_clip_dy / tgi_clip_dx;
-; tgi_clip_x1 = tgi_xmax;
-
-        lda     _tgi_xmax
-        ldx     _tgi_xmax+1
-
-L4:     tay
-        sec
-        sbc     tgi_clip_x1
-        sty     tgi_clip_x1
-        tay
-        txa
-        sbc     tgi_clip_x1+1
-        stx     tgi_clip_x1+1
-
-        jsr     muldiv_dydx
-
-        clc
-        adc     tgi_clip_y1
-        sta     tgi_clip_y1
-        txa
-        adc     tgi_clip_y1+1
-        sta     tgi_clip_y1+1
-
-;
-
-        lda     tgi_clip_o1
-        lsr     a
-        lsr     a
-L5:     lsr     a                               ; Check for TGI_CLIP_BOTTOM
-        bcc     L6
-
-; tgi_clip_x1 = (0 - tgi_clip_y1) * tgi_clip_dx / tgi_clip_dy;
-; tgi_clip_y1 = 0;
-
-        lda     #$00
-        tax
-        beq     L7
-
-L6:     lsr     a                               ; Check for TGI_CLIP_TOP
-        bcc     L8
-
-; tgi_clip_x1 += (tgi_ymax - tgi_clip_y1) * tgi_clip_dx / tgi_clip_dy;
-; tgi_clip_y1 = ymax;
-
-        lda     _tgi_ymax
-        ldx     _tgi_ymax+1
-
-L7:     tay
-        sec
-        sbc     tgi_clip_y1
-        sty     tgi_clip_y1
-        tay
-        txa
-        sbc     tgi_clip_y1+1
-        stx     tgi_clip_y1+1
-
-        jsr     muldiv_dxdy
-
-        clc
-        adc     tgi_clip_x1
-        sta     tgi_clip_x1
-        txa
-        adc     tgi_clip_x1+1
-        sta     tgi_clip_x1+1
-
-; We need to recalculate outcode1 in this case
-
-L8:     jsr     outcode1
-
-; Check if X2/Y2 needs clipping
-
-L10:    lda     tgi_clip_o2
-        jeq     Loop
-
-; Need to clip X2/Y2
-
-        lsr     a                       ; Check for TGI_CLIP_LEFT
-        bcc     L11
-
-; tgi_clip_y2 += (0 - tgi_clip_x2) * tgi_clip_dy / tgi_clip_dx;
-; tgi_clip_x2 = 0;
-
-        lda     #$00
-        tax
-        beq     L12
-
-L11:    lsr     a                       ; Check for TGI_CLIP_RIGHT
-        bcc     L13
-
-; tgi_clip_y2 += (tgi_xmax - tgi_clip_x2) * tgi_clip_dy / tgi_clip_dx;
-; tgi_clip_x2 = tgi_xmax;
-
-        lda     _tgi_xmax
-        ldx     _tgi_xmax+1
-
-L12:    tay
-        sec
-        sbc     tgi_clip_x2
-        sty     tgi_clip_x2
-        tay
-        txa
-        sbc     tgi_clip_x2+1
-        stx     tgi_clip_x2+1
-
-        jsr     muldiv_dydx
-
-        clc
-        adc     tgi_clip_y2
-        sta     tgi_clip_y2
-        txa
-        adc     tgi_clip_y2+1
-        sta     tgi_clip_y2+1
-
-;
-
-        lda     tgi_clip_o2
-        lsr     a
-        lsr     a
-L13:    lsr     a                       ; Check for TGI_CLIP_BOTTOM
-        bcc     L14
-
-; tgi_clip_x2 += (0 - tgi_clip_y2) * tgi_clip_dx / tgi_clip_dy;
-; tgi_clip_y2 = 0;
-
-        lda     #$00
-        tax
-        beq     L15
-
-L14:    lsr     a                       ; Check for TGI_CLIP_TOP
-        bcc     L16
-
-; tgi_clip_x2 += (tgi_ymax - tgi_clip_y2) * tgi_clip_dx / tgi_clip_dy;
-; tgi_clip_y2 = tgi_ymax;
-
-        lda     _tgi_ymax
-        ldx     _tgi_ymax+1
-
-L15:    tay
-        sec
-        sbc     tgi_clip_y2
-        sty     tgi_clip_y2
-        tay
-        txa
-        sbc     tgi_clip_y2+1
-        stx     tgi_clip_y2+1
-
-        jsr     muldiv_dxdy
-
-        clc
-        adc     tgi_clip_x2
-        sta     tgi_clip_x2
-        txa
-        adc     tgi_clip_x2+1
-        sta     tgi_clip_x2+1
-
-; We need to recalculate outcode2 in this case
-
-L16:    jsr     outcode2
-
-; Try again
-
-        jmp     Loop
-
-.endproc
-
-
-
-
diff --git a/libsrc/tgi/tgi_curtoxy.s b/libsrc/tgi/tgi_curtoxy.s
deleted file mode 100644 (file)
index 1a4cf9b..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 02.10.2002
-;
-; Helper function for tgi functions. Moves the current X/Y pos to ptr1/ptr2
-;
-
-        .include        "tgi-kernel.inc"
-
-        .importzp       ptr1, ptr2
-
-tgi_curtoxy:
-        ldy     _tgi_curx       ; X1
-        sty     ptr1
-        ldy     _tgi_curx+1
-        sty     ptr1+1
-
-        ldy     _tgi_cury       ; Y1
-        sty     ptr2
-        ldy     _tgi_cury+1
-        sty     ptr2+1
-        rts
-
diff --git a/libsrc/tgi/tgi_done.s b/libsrc/tgi/tgi_done.s
deleted file mode 100644 (file)
index 8c25677..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 21.06.2002
-;
-; void tgi_done (void);
-; /* End graphics mode, switch back to text mode. Will NOT unload the driver! */
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-.proc   _tgi_done
-
-        lda     _tgi_gmode              ; Is a graphics mode active?
-        beq     @L1                     ; Jump if not
-        jsr     tgi_done                ; Call the driver routine
-        lda     #$00
-        sta     _tgi_gmode              ; Reset the graph mode flag
-@L1:    rts
-
-.endproc
diff --git a/libsrc/tgi/tgi_ellipse.s b/libsrc/tgi/tgi_ellipse.s
deleted file mode 100644 (file)
index dc6160a..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-11-05
-;
-; void __fastcall__ tgi_ellipse (int x, int y, unsigned char rx, unsigned char ry);
-; /* Draw a full ellipse with center at x/y and radii rx/ry using the current
-; ** drawing color.
-; */
-;
-
-
-        .include        "tgi-kernel.inc"
-
-        .import         pusha, push0
-
-
-;----------------------------------------------------------------------------
-;
-
-.code
-.proc   _tgi_ellipse
-
-        jsr     pusha                   ; Push ry
-        jsr     push0                   ; Start angle is 0
-        lda     #<360
-        ldx     #>360                   ; End angle is 360
-        jmp     _tgi_arc
-
-.endproc
diff --git a/libsrc/tgi/tgi_free_vectorfont.s b/libsrc/tgi/tgi_free_vectorfont.s
deleted file mode 100644 (file)
index a7181d5..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-11-01
-;
-; void tgi_free_vectorfont (const tgi_vectorfont* font);
-; /* Free a vector font that was previously loaded into memory. */
-;
-; This function is identical to free(void*)
-;
-
-        .import _free
-        .export _tgi_free_vectorfont := _free
-
diff --git a/libsrc/tgi/tgi_getaspectratio.s b/libsrc/tgi/tgi_getaspectratio.s
deleted file mode 100644 (file)
index f4ac481..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 2011-05-01
-;
-; unsigned tgi_getaspectratio (void);
-; /* Returns the aspect ratio for the loaded driver. The aspect ratio is an
-; ** 8.8 fixed point value.
-; */
-;
-
-        .include        "tgi-kernel.inc"
-
-.proc   _tgi_getaspectratio
-
-        lda     _tgi_aspectratio
-        ldx     _tgi_aspectratio+1
-        rts
-
-.endproc
diff --git a/libsrc/tgi/tgi_getcolor.s b/libsrc/tgi/tgi_getcolor.s
deleted file mode 100644 (file)
index c1c0022..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.06.2002
-;
-; unsigned char tgi_getcolor (void);
-; /* Return the current drawing color */
-
-
-        .include        "tgi-kernel.inc"
-
-.proc   _tgi_getcolor
-
-        lda     _tgi_color      ; Get the current drawing color
-        ldx     #0              ; Clear high byte
-        rts
-
-.endproc
diff --git a/libsrc/tgi/tgi_getcolorcount.s b/libsrc/tgi/tgi_getcolorcount.s
deleted file mode 100644 (file)
index b7a3562..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.06.2002
-;
-; unsigned char tgi_getcolorcount (void);
-; /* Get the number of available colors */
-
-        .include        "tgi-kernel.inc"
-
-.proc   _tgi_getcolorcount
-
-        lda     _tgi_colorcount
-        ldx     #0
-        rts
-
-.endproc
diff --git a/libsrc/tgi/tgi_getdefpalette.s b/libsrc/tgi/tgi_getdefpalette.s
deleted file mode 100644 (file)
index 4df4f4b..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Ullrich von Bassewitz, 23.06.2002
-;
-; const unsigned char* tgi_getdefpalette (void);
-; /* Return the default palette. Will return NULL for drivers that do not
-; ** support palettes.
-; */
-;
-
-        .include        "tgi-kernel.inc"
-
-_tgi_getdefpalette      =       tgi_getdefpalette       ; Call the driver
diff --git a/libsrc/tgi/tgi_geterror.s b/libsrc/tgi/tgi_geterror.s
deleted file mode 100644 (file)
index 8d0e4db..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 21.06.2002
-;
-; unsigned char tgi_geterror (void);
-; /* Return the error code for the last operation. This will also clear the
-; ** error.
-; */
-
-        .include        "tgi-kernel.inc"
-
-.proc   _tgi_geterror
-
-        lda     _tgi_drv                ; Check if we have a driver
-        ora     _tgi_drv+1
-        beq     @L1
-        jsr     tgi_geterror            ; First call driver
-@L1:    ldx     #$00                    ; Clear high byte
-        ldy     _tgi_error              ; Test high level error code
-        beq     @L2                     ; Branch if no high level error code
-        tya                             ; Use high level code if we have one
-        stx     _tgi_error              ; Clear high level error code
-@L2:    rts
-
-.endproc
diff --git a/libsrc/tgi/tgi_geterrormsg.s b/libsrc/tgi/tgi_geterrormsg.s
deleted file mode 100644 (file)
index d683a1a..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-;
-; Ullrich von Bassewitz, 2004-06-15
-;
-; const char* __fastcall__ tgi_geterrormsg (unsigned char code);
-; /* Get an error message describing the error in code. */
-;
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-
-.proc   _tgi_geterrormsg
-
-        cmp     #TGI_ERR_COUNT
-        bcc     L1
-        lda     #TGI_ERR_COUNT          ; "Unknown error"
-L1:     tay
-        ldx     #>msgtab
-        lda     #<msgtab
-        clc
-        adc     offs,y
-        bcc     L2
-        inx
-L2:     rts
-
-.endproc
-
-
-;----------------------------------------------------------------------------
-; Error messages. The messages are currently limited to 256 bytes total.
-
-.rodata
-
-offs:   .byte   <(msg0-msgtab)
-        .byte   <(msg1-msgtab)
-        .byte   <(msg2-msgtab)
-        .byte   <(msg3-msgtab)
-        .byte   <(msg4-msgtab)
-        .byte   <(msg5-msgtab)
-        .byte   <(msg6-msgtab)
-        .byte   <(msg7-msgtab)
-        .byte   <(msg8-msgtab)
-        .byte   <(msg9-msgtab)
-        .byte   <(msg10-msgtab)
-
-msgtab:
-msg0:   .asciiz         "No error"
-msg1:   .asciiz         "No driver available"
-msg2:   .asciiz         "Cannot load driver"
-msg3:   .asciiz         "Invalid driver"
-msg4:   .asciiz         "Mode not supported by driver"
-msg5:   .asciiz         "Invalid function argument"
-msg6:   .asciiz         "Function not supported"
-msg7:   .asciiz         "Invalid font file"
-msg8:   .asciiz         "Out of resources"
-msg9:   .asciiz         "Unknown error"
-msg10:  .asciiz         "A driver is already installed"
-
-.assert (*-msgtab) < 256, error, "Message table too large"
diff --git a/libsrc/tgi/tgi_getmaxcolor.s b/libsrc/tgi/tgi_getmaxcolor.s
deleted file mode 100644 (file)
index 4db8078..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.06.2002
-;
-; unsigned char tgi_getmaxcolor (void);
-; /* Return the maximum supported color number (the number of colors would
-; ** then be getmaxcolor()+1).
-; */
-;
-
-        .include        "tgi-kernel.inc"
-
-.proc   _tgi_getmaxcolor
-
-        ldx     _tgi_colorcount
-        dex
-        txa
-        ldx     #0
-        rts
-
-.endproc
diff --git a/libsrc/tgi/tgi_getmaxx.s b/libsrc/tgi/tgi_getmaxx.s
deleted file mode 100644 (file)
index 1a70695..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 21.06.2002
-;
-; unsigned tgi_getmaxx (void);
-; /* Return the maximum x coordinate. The resolution in x direction is
-; ** getmaxx() + 1
-; */
-
-        .include        "tgi-kernel.inc"
-
-
-.proc   _tgi_getmaxx
-
-        lda     _tgi_xmax
-        ldx     _tgi_xmax+1
-        rts
-
-.endproc
diff --git a/libsrc/tgi/tgi_getmaxy.s b/libsrc/tgi/tgi_getmaxy.s
deleted file mode 100644 (file)
index 6f28fc1..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-;
-; Ullrich von Bassewitz, 21.06.2002
-;
-; unsigned tgi_getmaxy (void);
-; /* Return the maximum y coordinate. The resolution in y direction is
-; ** getmaxy() + 1
-; */
-
-        .include        "tgi-kernel.inc"
-
-.proc   _tgi_getmaxy
-
-        lda     _tgi_ymax
-        ldx     _tgi_ymax+1
-        rts
-
-.endproc
diff --git a/libsrc/tgi/tgi_getpagecount.s b/libsrc/tgi/tgi_getpagecount.s
deleted file mode 100644 (file)
index ddca30e..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 23.06.2002
-;
-; unsigned tgi_getpagecount (void);
-; /* Returns the number of screen pages available. */
-;
-
-        .include        "tgi-kernel.inc"
-
-.proc   _tgi_getpagecount
-
-        lda     _tgi_pagecount
-        ldx     #0
-        rts
-
-.endproc
diff --git a/libsrc/tgi/tgi_getpalette.s b/libsrc/tgi/tgi_getpalette.s
deleted file mode 100644 (file)
index f28710c..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Ullrich von Bassewitz, 23.06.2002
-;
-; const unsigned char* tgi_getpalette (void);
-; /* Return the current palette. Will return NULL for drivers that do not
-; ** support palettes.
-; */
-;
-
-        .include        "tgi-kernel.inc"
-
-_tgi_getpalette         =       tgi_getpalette          ; Call the driver
diff --git a/libsrc/tgi/tgi_getpixel.s b/libsrc/tgi/tgi_getpixel.s
deleted file mode 100644 (file)
index 770757a..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-;
-; Ullrich von Bassewitz, 21.06.2002
-;
-; unsigned char __fastcall__ tgi_getpixel (int x, int y);
-; /* Get the color value of a pixel */
-
-
-        .include        "tgi-kernel.inc"
-
-        .import         return0
-
-.proc   _tgi_getpixel
-
-        jsr     tgi_getset      ; Pop args, check range
-        bcs     @L9
-        jmp     tgi_getpixel    ; Call the driver
-@L9:    jmp     return0         ; Assume bg color
-
-.endproc
-
diff --git a/libsrc/tgi/tgi_getset.s b/libsrc/tgi/tgi_getset.s
deleted file mode 100644 (file)
index aded19d..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.06.2002
-;
-; Helper function for getpixel/setpixel. Load X/Y from stack and check if
-; the coordinates are valid. Return carry clear if so.
-;
-
-        .include        "tgi-kernel.inc"
-
-        .import         popax
-        .importzp       ptr1, ptr2
-
-
-.proc   tgi_getset
-
-        jsr     tgi_popxy       ; Pop X/Y into ptr1/ptr2
-
-; Are the coordinates out of range? First check if any coord is negative.
-
-        txa
-        ora     ptr2+1
-        bmi     @L9             ; Bail out if negative
-
-; Check if X is larger than the maximum x coord. If so, bail out
-
-        lda     ptr1
-        cmp     _tgi_xres
-        txa
-        sbc     _tgi_xres+1
-        bcs     @L9
-
-; Check if Y is larger than the maximum y coord.
-
-        lda     ptr2
-        cmp     _tgi_yres
-        lda     ptr2+1
-        sbc     _tgi_yres+1
-@L9:    rts
-
-.endproc
-
diff --git a/libsrc/tgi/tgi_gettextheight.s b/libsrc/tgi/tgi_gettextheight.s
deleted file mode 100644 (file)
index 38df6a6..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-10-30
-;
-
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-vectorfont.inc"
-        .include        "zeropage.inc"
-
-
-;-----------------------------------------------------------------------------
-; unsigned __fastcall__ tgi_gettextheight (const char* s);
-; /* Calculate the height of the text in pixels according to the current text
-; ** style.
-; */
-;
-
-.proc   _tgi_gettextheight        
-
-        ldy     _tgi_font
-        bne     @L2                     ; Jump if vector font
-
-; Return the height for the bitmap font
-
-        lda     _tgi_charheight
-        ldx     #0
-@L1:    rts
-
-; Return the height for the vector font
-
-@L2:    lda     _tgi_vectorfont
-        tax
-        ora     _tgi_vectorfont+1
-        beq     @L1                     ; Return zero if no font
-
-        stx     ptr1
-        lda     _tgi_vectorfont+1
-        sta     ptr1+1
-        ldy     #TGI_VECTORFONT::HEIGHT
-        lda     (ptr1),y                ; Get height of font
-
-        sta     ptr1
-        lda     #0
-        sta     ptr1+1                  ; Save base height in ptr1
-
-        lda     _tgi_textscaleh
-        ldx     _tgi_textscaleh+1       ; Get scale factor ...
-        jmp     tgi_imulround           ; ... and return scaled result
-
-.endproc
-
-
diff --git a/libsrc/tgi/tgi_gettextwidth.s b/libsrc/tgi/tgi_gettextwidth.s
deleted file mode 100644 (file)
index 9a935b6..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-10-30
-;
-
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-vectorfont.inc"
-        .include        "zeropage.inc"
-
-        .import         _strlen, _toascii
-        .import         umul8x16r16
-
-;-----------------------------------------------------------------------------
-; Aliases for zero page locations
-
-Width   := ptr1
-WTab    := ptr2
-Text    := ptr3
-
-
-
-;-----------------------------------------------------------------------------
-; unsigned __fastcall__ tgi_gettextwidth (const char* s);
-; /* Calculate the width of the text in pixels according to the current text
-; ** style.
-; */
-;
-; Result is  strlen (s) * tgi_textmagw * tgi_fontsizex
-;
-
-.code
-.proc   _tgi_gettextwidth
-
-        ldy     _tgi_font
-        bne     @L1                     ; Jump if vector font
-
-; Return the width of the string for the bitmap font
-
-        jsr     _strlen
-        ldy     _tgi_charwidth+1
-        sty     ptr1
-        jmp     umul8x16r16
-
-; Return the width of the string for the vector font. To save some code, we
-; will add up all the character widths and then multiply by the scale factor.
-; Since the output routine will scale each single character, the result may
-; be slightly different.
-
-@L1:    sta     Text
-        stx     Text+1                  ; Save pointer to string
-
-        lda     _tgi_vectorfont+1
-        tax
-        ora     _tgi_vectorfont
-        beq     @L9                     ; Return zero if no font
-
-        lda     _tgi_vectorfont
-        clc
-        adc     #<(TGI_VECTORFONT::WIDTHS - TGI_VF_FIRSTCHAR)
-        sta     WTab
-        txa
-        adc     #>(TGI_VECTORFONT::WIDTHS - TGI_VF_FIRSTCHAR)
-        sta     WTab+1
-
-        ldy     #0
-        sty     Width
-        sty     Width+1                 ; Zero the total width
-
-; Sum up the widths of the single characters
-
-@L2:    ldy     #0
-        lda     (Text),y                ; Get next char
-        beq     @L4                     ; Bail out if end of text reached
-        jsr     _toascii                ; Convert to ascii
-        tay
-        lda     (WTab),y                ; Get width of this char
-        clc
-        adc     Width
-        sta     Width
-        bcc     @L3
-        inc     Width+1
-@L3:    inc     Text
-        bne     @L2
-        inc     Text+1
-        bne     @L2
-
-; We have the total width now, scale and return it
-
-@L4:    lda     _tgi_textscalew
-        ldx     _tgi_textscalew+1
-        jmp     tgi_imulround
-
-; Exit point if no font installed
-
-@L9:    rts
-
-.endproc
-
-
-
diff --git a/libsrc/tgi/tgi_getxres.s b/libsrc/tgi/tgi_getxres.s
deleted file mode 100644 (file)
index 4636b90..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 21.06.2002
-;
-; unsigned tgi_getxres (void);
-; /* Return the resolution in X direction */
-
-
-        .include        "tgi-kernel.inc"
-
-.proc   _tgi_getxres
-
-        lda     _tgi_xres
-        ldx     _tgi_xres+1
-        rts
-
-.endproc
diff --git a/libsrc/tgi/tgi_getyres.s b/libsrc/tgi/tgi_getyres.s
deleted file mode 100644 (file)
index 8bd182c..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-;
-; Ullrich von Bassewitz, 21.06.2002
-;
-; unsigned tgi_getyres (void);
-; /* Return the resolution in Y direction */
-
-
-        .include        "tgi-kernel.inc"
-
-.proc   _tgi_getyres
-
-        lda     _tgi_yres
-        ldx     _tgi_yres+1
-        rts
-
-.endproc
diff --git a/libsrc/tgi/tgi_gotoxy.s b/libsrc/tgi/tgi_gotoxy.s
deleted file mode 100644 (file)
index d02f0ab..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.06.2002
-;
-; void __fastcall__ tgi_gotoxy (int x, int y);
-; /* Set the current drawing pointer to the given position. */
-;
-
-        .include        "tgi-kernel.inc"
-
-        .import         popax
-
-.proc   _tgi_gotoxy
-
-        sta     _tgi_cury               ; Y
-        stx     _tgi_cury+1
-        jsr     popax
-        sta     _tgi_curx               ; X
-        stx     _tgi_curx+1
-        rts
-
-.endproc
-
diff --git a/libsrc/tgi/tgi_imulround.s b/libsrc/tgi/tgi_imulround.s
deleted file mode 100644 (file)
index 238c69f..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-11-05
-;
-; Helper function for graphics functions: Multiply two values, one being 
-; an 8.8 fixed point one, and return the rounded and scaled result.
-;
-; The module has two entry points: One is C callable and expects the
-; parameters in ax and the stack, the second is assembler callable and
-; expects the parameters in ax and ptr1
-;
-
-
-        .export         _tgi_imulround, tgi_imulround
-        .import         popax, imul16x16r32
-
-        .include        "zeropage.inc"
-
-
-;----------------------------------------------------------------------------
-;
-
-.code
-
-; C callable entry point
-_tgi_imulround:
-
-; Get arguments
-
-        sta     ptr1
-        stx     ptr1+1                  ; Save lhs
-        jsr     popax                   ; Get rhs
-
-; ASM callable entry point
-tgi_imulround:
-
-; Multiplicate
-
-        jsr     imul16x16r32
-
-; Round the result
-
-        cmp     #$80                    ; Frac(x) >= 0.5?
-        txa
-        ldy     sreg+1                  ; Check sign
-        bmi     @L1
-
-        adc     #$00
-        tay
-        lda     sreg
-        adc     #$00
-        tax
-        tya
-        rts
-
-@L1:    sbc     #$00
-        tay
-        lda     sreg
-        sbc     #$00
-        tax
-        tya
-        rts
-
-     
diff --git a/libsrc/tgi/tgi_init.s b/libsrc/tgi/tgi_init.s
deleted file mode 100644 (file)
index c8fd355..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-;
-; Ullrich von Bassewitz, 21.06.2002
-;
-; void tgi_init (void);
-; /* Initialize the already loaded graphics driver */
-
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-        .import         pushax, pusha, decax1
-        .importzp       ptr1
-
-
-;----------------------------------------------------------------------------
-
-.code
-.proc   _tgi_init
-
-        jsr     _tgi_done               ; Switch off graphics if needed
-        jsr     tgi_init                ; Go into graphics mode
-        jsr     tgi_geterror            ; Get the error code
-        sta     _tgi_error              ; Save for later reference
-        cmp     #TGI_ERR_OK
-        bne     @L9                     ; Jump on error
-
-        inc     _tgi_gmode              ; Remember that graph mode is active
-
-; Get the maximum X and Y coordinate
-
-        jsr     _tgi_getxres
-        jsr     decax1
-        sta     _tgi_xmax
-        stx     _tgi_xmax+1
-
-        jsr     _tgi_getyres
-        jsr     decax1
-        sta     _tgi_ymax
-        stx     _tgi_ymax+1
-
-; Do driver initialization. Set draw and view pages.
-
-        lda     #0
-        jsr     tgi_setviewpage
-        lda     #0
-        jsr     tgi_setdrawpage
-
-; Set the default palette.
-
-        jsr     tgi_getdefpalette       ; Get the default palette into A/X
-        sta     ptr1
-        stx     ptr1+1                  ; Save it
-        jsr     tgi_setpalette          ; Set the default palette.
-        jsr     tgi_geterror            ; Clear a possible error code
-
-; Set the drawing color to white
-
-@L1:    lda     #tgi_color_white
-        jsr     _tgi_setcolor           ; tgi_setcolor (TGI_COLOR_WHITE);
-
-; Set the text style
-
-        lda     #<$100
-        ldx     #>$100
-        jsr     pushax                  ; Width scale = 1.0
-        jsr     pushax                  ; Heigh scale = 1.0
-        jsr     pusha                   ; Text direction = TGI_TEXT_HORIZONTAL
-        jmp     _tgi_settextstyle       ; A = Font = TGI_FONT_BITMAP
-
-; Error exit
-
-@L9:    rts
-
-.endproc
diff --git a/libsrc/tgi/tgi_install_vectorfont.s b/libsrc/tgi/tgi_install_vectorfont.s
deleted file mode 100644 (file)
index 91df305..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-11-06
-;
-
-        .include        "tgi-kernel.inc"
-
-
-;-----------------------------------------------------------------------------
-; void __fastcall__ tgi_install_vectorfont (const tgi_vectorfont* font);
-; /* Install a vector font for use. More than one vector font can be loaded,
-; ** but only one can be active. This function is used to tell which one. Call
-; ** with a NULL pointer to uninstall the currently installed font.
-; */
-;
-
-.code
-.proc   _tgi_install_vectorfont
-
-        sta     _tgi_vectorfont
-        stx     _tgi_vectorfont+1
-        rts
-
-.endproc
-
diff --git a/libsrc/tgi/tgi_ioctl.s b/libsrc/tgi/tgi_ioctl.s
deleted file mode 100644 (file)
index 434c337..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; Ullrich von Bassewitz, 2004-10-14
-;
-; unsigned __fastcall__ tgi_ioctl (unsigned char code, void* data);
-; /* Call the driver specific control function. What this function does for
-; ** a specific code depends on the driver. The driver will set an error
-; ** for unknown codes or values.
-; */
-;
-
-        .include        "tgi-kernel.inc"
-
-        .import         popa
-        .importzp       ptr1
-
-
-.proc   _tgi_ioctl
-
-        sta     ptr1
-        stx     ptr1+1          ; Save val
-        jsr     popa            ; Retrieve code
-        jmp     tgi_control     ; Call the driver
-
-.endproc
-
-
diff --git a/libsrc/tgi/tgi_line.s b/libsrc/tgi/tgi_line.s
deleted file mode 100644 (file)
index 36f63c8..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-;
-; Ullrich von Bassewitz, 21.06.2002
-;
-; void __fastcall__ tgi_line (int x1, int y1, int x2, int y2);
-; /* Draw a line in the current drawing color */
-
-
-        .include        "tgi-kernel.inc"
-
-        .import         popax
-
-.proc   _tgi_line
-
-        jsr     tgi_linepop             ; Pop/store Y2/X2
-        jsr     popax                   ; Y1
-        sta     tgi_clip_y1
-        stx     tgi_clip_y1+1
-        jsr     popax                   ; X1
-        sta     tgi_clip_x1
-        stx     tgi_clip_x1+1
-        jmp     tgi_clippedline         ; Call the line clipper
-
-.endproc
-
-
diff --git a/libsrc/tgi/tgi_linepop.s b/libsrc/tgi/tgi_linepop.s
deleted file mode 100644 (file)
index bbd147c..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.06.2002
-;
-; Helper function for tgi_line and tgi_lineto. Pops/stores X2/Y2.
-;
-
-        .include        "tgi-kernel.inc"
-
-        .import         popax
-
-.proc   tgi_linepop
-
-        sta     tgi_clip_y2     ; Y2
-        stx     tgi_clip_y2+1
-        sta     _tgi_cury
-        stx     _tgi_cury+1
-
-        jsr     popax
-
-        sta     tgi_clip_x2     ; X2
-        stx     tgi_clip_x2+1
-        sta     _tgi_curx
-        stx     _tgi_curx+1
-        rts
-
-.endproc
-
diff --git a/libsrc/tgi/tgi_lineto.s b/libsrc/tgi/tgi_lineto.s
deleted file mode 100644 (file)
index abe4b3f..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.06.2002
-;
-; void __fastcall__ tgi_lineto (int x2, int y2);
-; /* Draw a line in the current drawing color from the graphics cursor to the
-; ** new end point.
-; */
-
-        .include        "tgi-kernel.inc"
-
-        .import         popax
-
-.proc   _tgi_lineto
-
-        pha
-        ldy     #3              ; Copy curx/cury to tgi_clip_x1/tgi_clip_y1
-@L1:    lda     _tgi_curx,y
-        sta     tgi_clip_x1,y
-        dey
-        bpl     @L1  
-        pla
-        jsr     tgi_linepop     ; Pop x2/y2
-        jmp     tgi_clippedline ; Call the line clipper
-
-.endproc
-
diff --git a/libsrc/tgi/tgi_load.s b/libsrc/tgi/tgi_load.s
deleted file mode 100644 (file)
index b70f867..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-;
-; Ullrich von Bassewitz, 2012-07-22
-;
-; void __fastcall__ tgi_load_driver (const char* name);
-; /* Load and install the given driver. */
-
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-        .include        "modload.inc"
-        .include        "fcntl.inc"
-
-        .import         pushax
-        .import         pusha0
-        .import         incsp2
-        .import         _open
-        .import         _read
-        .import         _close
-
-
-
-;----------------------------------------------------------------------------
-; Variables
-
-.data
-
-ctrl:   .addr   _read
-        .res    2                       ; CALLERDATA
-        .res    2                       ; MODULE
-        .res    2                       ; MODULE_SIZE
-        .res    2                       ; MODULE_ID
-
-;----------------------------------------------------------------------------
-; Code
-
-.code
-
-.proc   _tgi_load_driver
-
-; Check if we do already have a driver loaded. This is an error. Do not
-; touch A/X because they contain the file name.
-
-        ldy     _tgi_drv
-        bne     @L0
-        ldy     _tgi_drv+1
-        beq     @L1
-@L0:    lda     #TGI_ERR_INSTALLED
-        bne     @L3
-
-; Push the name onto the C stack and open the file. The parameter will get
-; removed by open().
-; ctrl.callerdata = open (name, O_RDONLY);
-
-@L1:    jsr     pushax
-        lda     #<O_RDONLY
-        jsr     pusha0
-        ldy     #4                      ; Argument size
-        jsr     _open
-        sta     ctrl + MOD_CTRL::CALLERDATA
-        stx     ctrl + MOD_CTRL::CALLERDATA+1
-
-; if (ctrl.callerdata >= 0) {
-
-        txa
-        bmi     @L2
-
-; /* Load the module */
-; Res = mod_load (&ctrl);
-
-        lda     #<ctrl
-        ldx     #>ctrl
-        jsr     _mod_load
-        pha
-
-; /* Close the input file */
-; close (ctrl.callerdata);
-
-        lda     ctrl + MOD_CTRL::CALLERDATA
-        ldx     ctrl + MOD_CTRL::CALLERDATA+1
-        jsr     _close
-
-; /* Check the return code */
-; if (Res == MLOAD_OK) {
-
-        pla
-        beq     @L5
-@L2:    lda     #TGI_ERR_CANNOT_LOAD
-
-; Set an error and exit
-
-@L3:    sta     _tgi_error
-@L4:    rts
-
-; Check the driver signature, install the driver.
-; tgi_install (ctrl.module);
-
-@L5:    lda     ctrl + MOD_CTRL::MODULE
-        ldx     ctrl + MOD_CTRL::MODULE+1
-        jsr     _tgi_install
-
-; If tgi_install was successful, we're done
-
-        lda     _tgi_error
-        beq     @L4
-
-; The driver didn't install correctly. Remove it from memory. The error code
-; will be retained.
-
-        lda     _tgi_drv
-        ldx     _tgi_drv+1
-        jsr     _mod_free               ; Free the driver memory
-        jmp     tgi_clear_ptr           ; Clear tgi_drv and return
-
-.endproc
-
-
-
diff --git a/libsrc/tgi/tgi_load_vectorfont.c b/libsrc/tgi/tgi_load_vectorfont.c
deleted file mode 100644 (file)
index 55e1bf7..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                           tgi_load_vectorfont.c                           */
-/*                                                                           */
-/*                  Loader module for TGI vector font files                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2009,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-#include <tgi.h>
-#include <tgi/tgi-kernel.h>
-#include <tgi/tgi-vectorfont.h>
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-const tgi_vectorfont* __fastcall__ tgi_load_vectorfont (const char* name)
-/* Load a vector font into memory and return it. In case of errors, NULL is
-** returned and an error is set, which can be retrieved using tgi_geterror.
-** To use the font, it has to be installed using tgi_install_vectorfont.
-*/
-{
-    static const char Magic[4] = {
-        0x54, 0x43, 0x48, TGI_VF_VERSION
-    };
-
-    tgi_vectorfont_header H;
-    int                   F;
-    tgi_vectorfont*       Font = 0;
-    unsigned              V;
-    unsigned char         I;
-
-
-    /* Assume we have an error loading the font */
-    tgi_error = TGI_ERR_CANNOT_LOAD;
-
-    /* Open the file */
-    F = open (name, O_RDONLY);
-    if (F < 0) {
-        /* Cannot open file */
-        goto LoadError;
-    }
-
-    /* Read the header */
-    if (read (F, &H, sizeof (H)) != sizeof (H)) {
-        /* Cannot read header bytes */
-        goto LoadError;
-    }
-
-    /* Check the header */
-    if (memcmp (&H, Magic, sizeof (Magic)) != 0) {
-        /* Header magic not ok */
-        goto LoadError;
-    }
-
-    /* Allocate memory for the data */
-    Font = malloc (H.size);
-    if (Font == 0) {
-        /* Out of memory */
-        tgi_error = TGI_ERR_NO_RES;
-        goto LoadError;
-    }
-
-    /* Read the whole font file into the buffer */
-    if (read (F, Font, H.size) != H.size) {
-        /* Problem reading font data */
-        free (Font);
-        goto LoadError;
-    }
-
-    /* Close the file */
-    close (F);
-
-    /* Fix the offset pointers. When loaded, they contain numeric offsets
-    ** into the VectorOps, with the start of the VectorOps at offset zero.
-    ** We will add a pointer to the VectorOps to make them actual pointers
-    ** that may be used independently from anything else.
-    */
-    V = (unsigned) &Font->vec_ops;
-    for (I = 0; I < TGI_VF_CCOUNT; ++I) {
-        Font->chars[I] += V;
-    }
-
-    /* Clear the error */
-    tgi_error = TGI_ERR_OK;
-
-    /* Return the vector font loaded */
-    return Font;
-
-LoadError:
-    /* Some sort of load problem. If the file is still open, be sure to
-    ** close it
-    */
-    if (F >= 0) {
-        close (F);
-    }
-    return 0;
-}
-
-
-
diff --git a/libsrc/tgi/tgi_outcode.s b/libsrc/tgi/tgi_outcode.s
deleted file mode 100644 (file)
index 5c75ee0..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-10-25
-;
-; Generates clipping outcodes for Cohen Sutherland and others.
-;
-
-        .include "tgi-kernel.inc"
-        .include "zeropage.inc"
-
-;----------------------------------------------------------------------------
-; Data
-
-.bss
-
-; Clipping coordinates. They must be in this order!
-tgi_clip_x1:    .res    2
-tgi_clip_y1:    .res    2
-tgi_clip_x2:    .res    2
-tgi_clip_y2:    .res    2
-
-;----------------------------------------------------------------------------
-; Generate a Cohen Sutherland outcode
-;
-; void outcode ()
-; {
-;     unsigned char o = 0;
-;     if (Y < 0) {
-;         o = TGI_CLIP_BOTTOM;
-;     } else if (Y >= yres) {
-;         o = TGI_CLIP_TOP;
-;     }
-;     if (X < 0) {
-;         o |= TGI_CLIP_LEFT;
-;     } else if (X >= xres) {
-;         o |= TGI_CLIP_RIGHT;
-;     }
-;     return o;
-; }
-;
-; The function return the outcode in A and the flags for the outcode are
-; correctly set.
-;
-
-.code
-.proc   tgi_outcode
-
-        lda     #TGI_CLIP_NONE
-        sta     tmp1
-
-; Check Y coordinate
-
-        lda     tgi_clip_y1+1,y         ; High byte of Y1
-        bmi     L2                      ; Jump if bottom clip
-
-        ldx     tgi_clip_y1,y           ; Low byte of Y1
-        cpx     _tgi_yres
-        sbc     _tgi_yres+1
-        bvs     L1
-        eor     #$80
-L1:     bpl     L4
-        lda     #TGI_CLIP_TOP               ; Top clipping necessary
-        bne     L3
-L2:     lda     #TGI_CLIP_BOTTOM
-L3:     sta     tmp1                    ; Save temp outcode
-
-
-; Check X coordinate
-
-L4:     lda     tgi_clip_x1+1,y         ; High byte of X1
-        bmi     L7                      ; Jump if left clip
-
-        ldx     tgi_clip_x1,y           ; Low byte of X1
-        cpx     _tgi_xres
-        sbc     _tgi_xres+1
-        bvs     L5
-        eor     #$80
-L5:     bmi     L6
-
-; No right or left clipping necessary
-
-        lda     tmp1
-        rts
-
-; Need right clipping
-
-L6:     lda     #TGI_CLIP_RIGHT
-        ora     tmp1
-        rts
-
-; Need left clipping
-
-L7:     lda     #TGI_CLIP_LEFT
-        ora     tmp1
-        rts
-
-.endproc
-
-
diff --git a/libsrc/tgi/tgi_outtext.s b/libsrc/tgi/tgi_outtext.s
deleted file mode 100644 (file)
index 079cea3..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-;
-; Ullrich von Bassewitz, 21.06.2002
-;
-; void __fastcall__ tgi_outtext (const char* s);
-; /* Output text at the current graphics cursor position. */
-
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-vectorfont.inc"
-        .include        "zeropage.inc"
-
-        .import         _toascii
-        .import         popax, negax
-
-
-;----------------------------------------------------------------------------
-; Data
-
-text    := regbank
-font    := regbank              ; Same as text
-widths  := regbank+2
-
-;----------------------------------------------------------------------------
-;
-
-.proc   _tgi_outtext
-
-        ldy     _tgi_font               ; Bit or vectorfont?
-        bne     VectorFont
-
-; Handle bitmapped font output
-
-        sta     ptr3
-        stx     ptr3+1                  ; Pass s in ptr3 to driver
-        pha
-        txa
-        pha                             ; Save s on stack for later
-
-        jsr     tgi_curtoxy             ; Copy curx/cury into ptr1/ptr2
-        jsr     tgi_outtext             ; Call the driver
-
-        pla
-        tax
-        pla                             ; Restore s
-        jsr     _tgi_gettextwidth       ; Get width of text string
-
-; Move the graphics cursor by the amount in a/x
-
-MoveCursor:
-        ldy     _tgi_textdir            ; Horizontal or vertical text?
-        beq     @L1                     ; Jump if horizontal
-
-; Move graphics cursor for vertical text
-
-        jsr     negax
-        ldy     #2                      ; Point to _tgi_cury
-
-; Move graphics cursor for horizontal text
-
-@L1:    clc
-        adc     _tgi_curx,y
-        sta     _tgi_curx,y
-        txa
-        adc     _tgi_curx+1,y
-        sta     _tgi_curx+1,y
-Done:   rts
-
-; Handle vector font output. First, check if we really have a registered
-; vector font. Bail out if this is not the case.
-
-VectorFont:
-        tay
-        lda     _tgi_vectorfont         ; Do we have a vector font?
-        ora     _tgi_vectorfont+1
-        beq     Done                    ; Bail out if not
-
-; Check if the font in the given size is partially out of the screen. We
-; do this in vertical direction here, and in horizontal direction before
-; outputting a character.
-
-        ; (todo)
-
-; Save zero page variable on stack and save
-
-        lda     text
-        pha
-        lda     text+1
-        pha
-        lda     widths
-        pha
-        lda     widths+1
-        pha
-
-        sty     text
-        stx     text+1                  ; Store pointer to string
-
-        lda     _tgi_vectorfont
-        clc
-        adc     #<(TGI_VECTORFONT::WIDTHS - TGI_VF_FIRSTCHAR)
-        sta     widths
-        lda     _tgi_vectorfont+1
-        adc     #>(TGI_VECTORFONT::WIDTHS - TGI_VF_FIRSTCHAR)
-        sta     widths+1
-
-; Output the text string
-
-@L1:    ldy     #0
-        lda     (text),y                ; Get next character from string
-        beq     EndOfText
-        jsr     _toascii                ; Convert to ascii
-        pha                             ; Save char in A
-        jsr     _tgi_vectorchar         ; Output it
-        pla
-
-; Move the graphics cursor by the width of the char
-
-        tay
-        lda     (widths),y              ; Get width of this char
-        sta     ptr1
-        lda     #0
-        sta     ptr1+1
-        lda     _tgi_textscalew
-        ldx     _tgi_textscalew+1       ; Get scale factor
-        jsr     tgi_imulround           ; Multiplcate and round
-        jsr     MoveCursor              ; Move the graphics cursor
-
-; Next char in string
-                                        
-        inc     text
-        bne     @L1
-        inc     text+1
-        bne     @L1
-
-; Done. Restore registers and return
-
-EndOfText:
-        pla
-        sta     widths+1
-        pla
-        sta     widths
-        pla
-        sta     text+1
-        pla
-        sta     text
-        rts
-
-.endproc
-
diff --git a/libsrc/tgi/tgi_outtextxy.s b/libsrc/tgi/tgi_outtextxy.s
deleted file mode 100644 (file)
index 3934df8..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-;
-; Ullrich von Bassewitz, 21.06.2002
-;
-; void __fastcall__ tgi_outtextxy (int x, int y, const char* s);
-; /* Output text at the given position. */
-
-
-        .include        "tgi-kernel.inc"
-
-        .import         addysp1
-        .importzp       sp
-
-.proc   _tgi_outtextxy
-
-; Get the X/Y parameters and store them into curx/cury. This enables us
-; to use tgi_outtext for the actual output
-
-        pha                     ;
-        ldy     #0
-        lda     (sp),y
-        sta     _tgi_cury
-        iny
-        lda     (sp),y
-        sta     _tgi_cury+1
-        iny
-        lda     (sp),y
-        sta     _tgi_curx
-        iny
-        lda     (sp),y
-        sta     _tgi_curx+1
-        pla
-        jsr     addysp1         ; Drop arguments from stack
-
-        jmp     _tgi_outtext
-
-.endproc
-
diff --git a/libsrc/tgi/tgi_pieslice.c b/libsrc/tgi/tgi_pieslice.c
deleted file mode 100644 (file)
index 60d2f1d..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                              tgi_pieslice.c                               */
-/*                                                                           */
-/*                         Draw an ellipic pie slice                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2009,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <tgi.h>
-#include <tgi/tgi-kernel.h>
-#include <cc65.h>
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void __fastcall__ tgi_pieslice (int x, int y, unsigned char rx, unsigned char ry,
-                                unsigned sa, unsigned ea)
-/* Draw an ellipse pie slice with center at x/y and radii rx/ry using the
-** current drawing color. The pie slice covers the angle between sa and ea
-** (startangle and endangle), which must be in the range 0..360 (otherwise the
-** function may behave unexpectedly).
-*/
-{
-    /* Draw an arc ... */
-    tgi_arc (x, y, rx, ry, sa, ea);
-
-    /* ... and close it */
-    tgi_line (x, y, x + tgi_imulround (rx, cc65_cos (sa)), y - tgi_imulround (ry, cc65_sin (sa)));
-    tgi_line (x, y, x + tgi_imulround (rx, cc65_cos (ea)), y - tgi_imulround (ry, cc65_sin (ea)));
-}
-
-
-
diff --git a/libsrc/tgi/tgi_popxy.s b/libsrc/tgi/tgi_popxy.s
deleted file mode 100644 (file)
index 55b259d..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; Ullrich von Bassewitz, 02.10.2002
-;
-; Helper function for tgi functions. Pops X/Y from stack into ptr1/ptr2
-;
-
-        .include        "tgi-kernel.inc"
-
-        .import         popax
-        .importzp       ptr1, ptr2
-
-.proc   tgi_popxy
-
-        sta     ptr2            ; Y
-        stx     ptr2+1
-        jsr     popax
-        sta     ptr1            ; X
-        stx     ptr1+1
-        rts
-
-.endproc
-
diff --git a/libsrc/tgi/tgi_popxy2.s b/libsrc/tgi/tgi_popxy2.s
deleted file mode 100644 (file)
index 8ef17f9..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 02.10.2002
-;
-; Helper function for tgi functions. Pops X/Y from stack into ptr3/ptr4
-;
-
-        .include        "tgi-kernel.inc"
-
-        .import         popax
-        .importzp       ptr3, ptr4
-
-.proc   tgi_popxy2
-
-        sta     ptr4            ; Y
-        stx     ptr4+1
-        jsr     popax
-        sta     ptr3            ; X
-        stx     ptr3+1
-        rts
-
-.endproc
-
-
diff --git a/libsrc/tgi/tgi_setaspectratio.s b/libsrc/tgi/tgi_setaspectratio.s
deleted file mode 100644 (file)
index bb511af..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 2011-05-01
-;
-; void __fastcall__ tgi_setaspectratio (unsigned aspectratio);
-; /* Set a new aspect ratio for the loaded driver. The aspect ratio is an
-; ** 8.8 fixed point value.
-; */
-;
-
-        .include        "tgi-kernel.inc"
-
-.proc   _tgi_setaspectratio
-
-        sta     _tgi_aspectratio
-        stx     _tgi_aspectratio+1
-        rts
-
-.endproc
-
diff --git a/libsrc/tgi/tgi_setcolor.s b/libsrc/tgi/tgi_setcolor.s
deleted file mode 100644 (file)
index 8e6fdc5..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 21.06.2002
-;
-; void __fastcall__ tgi_setcolor (unsigned char color);
-; /* Set the current drawing color */
-
-
-        .include        "tgi-kernel.inc"
-
-.proc   _tgi_setcolor
-
-        cmp     _tgi_colorcount ; Compare to available colors
-        bcs     @L1
-        sta     _tgi_color      ; Remember the drawing color
-        jmp     tgi_setcolor    ; Call the driver
-@L1:    jmp     tgi_inv_arg     ; Invalid argument
-
-.endproc
-
diff --git a/libsrc/tgi/tgi_setdrawpage.s b/libsrc/tgi/tgi_setdrawpage.s
deleted file mode 100644 (file)
index b1568ff..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.06.2002
-;
-; void __fastcall__ tgi_setdrawpage (unsigned char page);
-; /* Set the drawable page */
-
-
-        .include        "tgi-kernel.inc"
-
-.proc   _tgi_setdrawpage
-
-        cmp     _tgi_pagecount  ; Compare to available pages
-        bcs     @L1
-        jmp     tgi_setdrawpage ; Call the driver
-@L1:    jmp     tgi_inv_arg     ; Invalid argument
-
-.endproc
-
diff --git a/libsrc/tgi/tgi_setpalette.s b/libsrc/tgi/tgi_setpalette.s
deleted file mode 100644 (file)
index 86411a5..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 23.06.2002
-;
-; void __fastcall__ tgi_setpalette (const unsigned char* palette);
-; /* Set the palette (not available with all drivers/hardware). palette is
-; ** a pointer to as many entries as there are colors.
-; */
-;
-
-        .include        "tgi-kernel.inc"
-
-        .importzp       ptr1
-
-.proc   _tgi_setpalette
-
-        sta     ptr1
-        stx     ptr1+1
-        jmp     tgi_setpalette          ; Call the driver
-
-.endproc
-
diff --git a/libsrc/tgi/tgi_setpixel.s b/libsrc/tgi/tgi_setpixel.s
deleted file mode 100644 (file)
index cd2df68..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 21.06.2002
-;
-; void __fastcall__ tgi_setpixel (int x, int y);
-; /* Plot a point in the current drawing color */
-
-
-        .include        "tgi-kernel.inc"
-
-.proc   _tgi_setpixel
-
-        jsr     tgi_getset      ; Pop args, check range
-        bcs     @L9
-        jmp     tgi_setpixel    ; Call the driver
-@L9:    rts
-
-.endproc
-
-
diff --git a/libsrc/tgi/tgi_settextdir.s b/libsrc/tgi/tgi_settextdir.s
deleted file mode 100644 (file)
index 897e74e..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 2011-07-17
-;
-
-        .include        "tgi-kernel.inc"
-
-
-;-----------------------------------------------------------------------------
-; void __fastcall__ tgi_settextdir (unsigned char dir);
-; /* Set the direction for text output. dir is one of the TGI_TEXT_XXX
-; ** constants.
-; */
-;
-
-.proc   _tgi_settextdir
-
-        sta     _tgi_textdir            ; Remember the direction
-        rts
-
-.endproc
-
diff --git a/libsrc/tgi/tgi_settextstyle.s b/libsrc/tgi/tgi_settextstyle.s
deleted file mode 100644 (file)
index b62d690..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-10-30
-;
-
-
-        .include        "zeropage.inc"
-        .include        "tgi-kernel.inc"
-
-        .import         umul8x16r24
-        .import         popa, popax
-
-        .macpack        cpu
-
-;-----------------------------------------------------------------------------
-; void __fastcall__ tgi_settextstyle (unsigned width, unsigned height,
-;                                     unsigned char dir, unsigned char font);
-; /* Set the style for text output. The scaling factors for width and height
-; ** are 8.8 fixed point values. This means that $100 = 1 $200 = 2 etc.
-; ** dir is one of the TGI_TEXT_XXX constants. font is one of the TGI_FONT_XXX
-; ** constants.
-; */
-;
-
-.proc   _tgi_settextstyle
-
-        sta     _tgi_font               ; Remember the font to use
-        jsr     popa
-        sta     _tgi_textdir            ; Remember the direction
-
-; Pop the height and run directly into tgi_textscale
-
-        jsr     popax
-
-.endproc
-
-;-----------------------------------------------------------------------------
-; void __fastcall__ tgi_settextscale (unsigned width, unsigned height);
-; /* Set the scaling for text output. The scaling factors for width and height
-; ** are 8.8 fixed point values. This means that $100 = 1 $200 = 2 etc.
-; */
-
-.proc   _tgi_settextscale
-
-; Setup the height
-
-        ldy     _tgi_fontheight         ; Get height of bitmap font in pixels
-        sty     ptr1                    ; Save for later
-        ldy     #6                      ; Address the height
-        jsr     process_onedim          ; Process height
-
-; Setup the width
-
-        jsr     popax                   ; Get width scale into a/x
-        ldy     _tgi_fontwidth          ; Get width of bitmap font in pixels
-        sty     ptr1                    ; Save for later
-        ldy     #0                      ; Address the width
-
-; Process one character dimension. That means:
-;
-;   - Store the vector font dimension in 8.8 format
-;   - If necessary, round up/down to next integer
-;   - Store the bitmap font dimension in 8.8 format
-;   - Multiply by size of bitmap char in pixels
-;   - Store the bitmap font size in 8.8 format
-;
-
-process_onedim:
-
-        jsr     store                   ; Store vector font scale factor
-        bit     _tgi_flags              ; Fine grained scaling support avail?
-        bmi     @L2                     ; Jump if yes
-
-        asl     a                       ; Round to nearest full integer
-        bcc     @L1
-        inx
-@L1:    lda     #0
-
-@L2:    jsr     store                   ; Store bitmap font scale factor
-
-; The size of the font in pixels in the selected dimension is already in ptr1
-; So if we call umul8x16r24 we get the size in pixels in 16.8 fixed point.
-; Disallowing characters larger than 256 pixels, we just drop the high byte
-; and remember the low 16 bit as size in 8.8 format.
-
-.if (.cpu .bitand ::CPU_ISET_65SC02)
-        phy                             ; Save Y
-        jsr     umul8x16r24
-        ply                             ; Restore Y
-.else
-        sty     tmp1                    ; Save Y
-        jsr     umul8x16r24
-        ldy     tmp1                    ; Restore Y
-.endif
-
-store:  sta     _tgi_textscalew,y
-        iny
-        pha
-        txa
-        sta     _tgi_textscalew,y
-        iny
-        pla
-        rts
-
-.endproc
-
-
diff --git a/libsrc/tgi/tgi_setviewpage.s b/libsrc/tgi/tgi_setviewpage.s
deleted file mode 100644 (file)
index a287344..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-;
-; Ullrich von Bassewitz, 22.06.2002
-;
-; void __fastcall__ tgi_setviewpage (unsigned char page);
-; /* Set the visible page. */
-
-
-
-        .include        "tgi-kernel.inc"
-
-.proc   _tgi_setviewpage
-
-        cmp     _tgi_pagecount  ; Compare to available pages
-        bcs     @L1
-        jmp     tgi_setviewpage ; Call the driver
-@L1:    jmp     tgi_inv_arg     ; Invalid argument
-
-.endproc
-
diff --git a/libsrc/tgi/tgi_unload.s b/libsrc/tgi/tgi_unload.s
deleted file mode 100644 (file)
index 1012969..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-;
-; Ullrich von Bassewitz, 21.06.2002
-;
-; void tgi_unload (void);
-; /* Unload the currently loaded driver. */
-
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-        .include        "modload.inc"
-
-
-_tgi_unload:
-
-        lda     _tgi_drv
-        ora     _tgi_drv
-        beq     no_driver               ; No driver
-
-        lda     _tgi_drv
-        pha
-        lda     _tgi_drv+1
-        pha                             ; Save pointer to driver
-
-        jsr     _tgi_uninstall          ; Uninstall the driver
-
-        pla
-        tax
-        pla
-        jmp     _mod_free               ; Free the driver
-
-no_driver:
-        lda     #<TGI_ERR_NO_DRIVER
-        sta     _tgi_error
-        rts
diff --git a/libsrc/tgi/tgi_vectorchar.s b/libsrc/tgi/tgi_vectorchar.s
deleted file mode 100644 (file)
index bd4cc84..0000000
+++ /dev/null
@@ -1,295 +0,0 @@
-;
-; Ullrich von Bassewitz, 2009-11-02
-;
-; void __fastcall__ tgi_vectorchar (const unsigned char* Ops);
-; /* Draw one character of the vector font at the current graphics cursor
-; ** position using the current font magnification.
-; */
-;
-
-        .import         imul16x16r32, umul16x16r32, negax, negeax
-
-        .include        "tgi-kernel.inc"
-        .include        "tgi-vectorfont.inc"
-        .include        "zeropage.inc"
-
-        .macpack        longbranch
-
-;----------------------------------------------------------------------------
-; Data
-
-Ops     = regbank
-Flag    = regbank+2
-
-.bss
-X1:     .res    2
-Y1:     .res    2
-X2:     .res    2
-Y2:     .res    2
-
-;----------------------------------------------------------------------------
-; Get the next operation from the Ops pointer, remove the flag bit and sign
-; extend the 8 bit value to 16 bits.
-
-.code
-.proc   GetOp
-
-; Load delta value
-
-        ldy     #0
-        lda     (Ops),y
-        inc     Ops
-        bne     :+
-        inc     Ops+1
-
-; Move bit 7 into Flag, then sign extend the value in A and extend the sign
-; into X.
-
-:       asl     a                       ; Flag into carry
-        ror     Flag
-        ldx     #0
-        cmp     #$80                    ; Sign bit into carry
-        ror     a                       ; Sign extend the value
-        bpl     :+
-        dex                             ; Value is negative
-
-; Done
-
-:       rts
-
-.endproc
-
-
-;----------------------------------------------------------------------------
-; Get and process one coordinate value. The scale factor is passed in a/x
-
-.code
-GetProcessedYCoord:
-        lda     _tgi_textscaleh+0
-        ldx     _tgi_textscaleh+1
-
-GetProcessedCoord:
-
-; Save scale factor as left operand for multiplication
-
-        sta     ptr1
-        stx     ptr1+1
-
-; Load next operation value.
-
-        jsr     GetOp
-
-; Multiplicate with the scale factor.
-
-        jmp     tgi_imulround           ; Multiplicate, round and scale
-
-;----------------------------------------------------------------------------
-; Add the base coordinate with offset in Y to the value in A/X
-
-.code
-.proc   AddBaseCoord
-
-        clc
-        adc     _tgi_curx+0,y
-        pha
-        txa
-        adc     _tgi_curx+1,y
-        tax
-        pla
-        rts
-
-.endproc
-
-;----------------------------------------------------------------------------
-; Subtract the value in a/x from the base coordinate with offset in Y
-; This is
-;
-;   ax = _tgi_cur[xy] - ax
-;
-; which can be transformed to
-;
-;   ax = _tgi_cur[xy] + (~ax + 1);
-
-
-.code
-.proc   SubBaseCoord
-
-        eor     #$FF
-        sec                             ; + 1
-        adc     _tgi_curx+0,y
-        pha
-        txa
-        eor     #$FF
-        adc     _tgi_curx+1,y
-        tax
-        pla
-        rts
-
-.endproc
-
-;----------------------------------------------------------------------------
-;
-
-.code
-.proc   _tgi_vectorchar
-
-; Multiplicate the char value by two and save into Y
-
-        asl     a
-        tay
-
-; Since we will call tgi_lineto, which uses the zero page, and we do also
-; need the zero page, make room in the register bank.
-
-        lda     Ops
-        pha
-        lda     Ops+1
-        pha
-        lda     Flag
-        pha
-
-; Calculate a pointer to the vector ops for the given char (now in Y). We
-; definitely expect a font here, that has to be checked by the caller.
-
-        lda     _tgi_vectorfont
-        clc
-        adc     #<(TGI_VECTORFONT::CHARS - 2*TGI_VF_FIRSTCHAR)
-        sta     Ops
-        lda     _tgi_vectorfont+1
-        adc     #>(TGI_VECTORFONT::CHARS - 2*TGI_VF_FIRSTCHAR)
-        sta     Ops+1
-
-        iny
-        lda     (Ops),y
-        tax
-        dey
-        lda     (Ops),y
-        sta     Ops
-        stx     Ops+1
-
-; Main loop executing vector operations
-
-Loop:   lda     _tgi_textscalew+0
-        ldx     _tgi_textscalew+1
-        jsr     GetProcessedCoord       ; Get X vector
-
-; Depending on the text direction, the X vector is either applied to X as
-;
-;   X2 = _tgi_curx + XMag * XDelta
-;
-; or applied to Y as
-;
-;   Y2 = _tgi_cury - XMag * XDelta
-;
-; which can be transformed to
-;
-;   Y2 = _tgi_cury + (~(XMag * XDelta) + 1);
-;
-;
-; For the Y component we have
-;
-;   Y2 = _tgi_cury - YMag * YDelta
-;
-; which can be transformed to
-;
-;   Y2 = _tgi_cury + (~(YMag * YDelta) + 1);
-;
-; or applied to X as
-;
-;   X2 = _tgi_curx - YMag * YDelta
-;
-; which can be transformed to
-;
-;   X2 = _tgi_curx + (~(YMag * YDelta) + 1);
-;
-
-        ldy     _tgi_textdir    ; Horizontal or vertical text?
-        bne     @Vertical       ; Jump if vertical
-
-; Process horizontal text
-
-        ldy     #0
-        jsr     AddBaseCoord
-        sta     X2
-        stx     X2+1
-
-; Get Y vector
-
-        jsr     GetProcessedYCoord
-
-; Apply to Y
-
-        ldy     #2
-        jsr     SubBaseCoord
-        sta     Y2
-        stx     Y2+1
-        jmp     @DrawMove
-
-; Process vertical text
-
-@Vertical:
-        ldy     #2
-        jsr     SubBaseCoord
-        sta     Y2
-        stx     Y2+1
-
-; Get Y vector
-
-        jsr     GetProcessedYCoord
-
-; Apply to X
-
-        ldy     #0
-        jsr     SubBaseCoord
-        sta     X2
-        stx     X2+1
-
-; Draw, then move - or just move
-
-@DrawMove:
-        bit     Flag
-        bpl     @Move                   ; Jump if move only
-
-.if     0
-        ldy     #7                      ; Copy start coords into zp
-:       lda     X1,y
-        sta     ptr1,y
-        dey
-        bpl     :-
-
-        jsr     tgi_line                ; Call the driver
-.else
-        ldy     #7                      ; Copy start coords
-:       lda     X1,y
-        sta     tgi_clip_x1,y
-        dey
-        bpl     :-
-
-        jsr     tgi_clippedline         ; Call line clipper
-.endif
-
-; Move the start position
-
-@Move:  ldy     #3
-:       lda     X2,y
-        sta     X1,y
-        dey
-        bpl     :-
-
-; Loop if not done
-
-        bit     Flag
-        bvc     Loop
-
-; Done. Restore zp and return.
-
-        pla
-        sta     Flag
-        pla
-        sta     Ops+1
-        pla
-        sta     Ops
-        rts
-
-.endproc
-
diff --git a/libsrc/tgi/tgidrv_line.inc b/libsrc/tgi/tgidrv_line.inc
deleted file mode 100644 (file)
index e904b51..0000000
+++ /dev/null
@@ -1,310 +0,0 @@
-;
-; Oliver Schmidt <ol.sc@web.de>
-;
-; Generic LINE implementation based on SETPIXEL for TGI driver inclusion
-; Code previously present in a2.lo.tgi, c128-vdc.tgi and c128-vdc2.tgi
-;
-
-; ------------------------------------------------------------------------
-
-; LINE: Draw a line from X1/Y1 to X2/Y2, where X1/Y1 = ptr1/ptr2 and
-; X2/Y2 = ptr3/ptr4 using the current drawing color.
-; Must set an error code: NO
-
-        .proc   LINE
-
-; Used for passing parameters to the driver.
-
-X1      :=      ptr1
-Y1      :=      ptr2
-X2      :=      ptr3
-Y2      :=      ptr4
-
-; These ones must be on zpage.
-
-TEMP1   :=      tmp3
-TEMP2   :=      tmp4
-TEMP3   :=      sreg
-TEMP4   :=      sreg+1
-PB      :=      ptr3
-UB      :=      ptr4
-ERR     :=      regsave
-NX      :=      regsave+2
-
-; ------------------------------------------------------------------------
-
-        .bss
-
-COUNT:  .res    2
-NY:     .res    2
-DX:     .res    1
-DY:     .res    1
-AX:     .res    1
-AY:     .res    1
-
-; ------------------------------------------------------------------------
-
-        .code
-
-        ; nx = abs (x2 - x1)
-        sec
-        lda     X2
-        sbc     X1
-        sta     NX
-        lda     X2+1
-        sbc     X1+1
-        tay
-        lda     NX
-        jsr     abs
-        sta     NX
-        sty     NX+1
-
-        ; ny = abs (y2 - y1)
-        sec
-        lda     Y2
-        sbc     Y1
-        sta     NY
-        lda     Y2+1
-        sbc     Y1+1
-        tay
-        lda     NY
-        jsr     abs
-        sta     NY
-        sty     NY+1
-
-        ; if (x2 >= x1)
-        ldx     #X2
-        lda     X1
-        ldy     X1+1
-        jsr     icmp
-        bcc     :+
-
-        ;    dx = 1
-        lda     #$01
-        bne     :++
-
-        ; else
-        ;    dx = -1
-:       lda     #$FF
-:       sta     DX
-
-        ; if (y2 >= y1)
-        ldx     #Y2
-        lda     Y1
-        ldy     Y1+1
-        jsr     icmp
-        bcc     :+
-
-        ;    dy = 1
-        lda     #$01
-        bne     :++
-
-        ; else
-        ;    dy = -1
-:       lda     #$FF
-:       sta     DY
-
-        ; err = ax = ay = 0
-        lda     #$00
-        sta     ERR
-        sta     ERR+1
-        sta     AX
-        sta     AY
-
-        ; if (nx < ny) {
-        ldx     #NX
-        lda     NY
-        ldy     NY+1
-        jsr     icmp
-        bcs     :+
-
-        ;    nx <-> ny
-        lda     NX
-        ldx     NY
-        sta     NY
-        stx     NX
-        lda     NX+1
-        ldx     NY+1
-        sta     NY+1
-        stx     NX+1
-
-        ;    ax = dx
-        lda     DX
-        sta     AX
-
-        ;    ay = dy
-        lda     DY
-        sta     AY
-
-        ;    dx = dy = 0 }
-        lda     #$00
-        sta     DX
-        sta     DY
-
-        ; ny = - ny
-:       lda     NY
-        ldy     NY+1
-        jsr     neg
-        sta     NY
-        sty     NY+1
-
-        ; for (count = nx; count > 0; --count) {
-        lda     NX
-        ldx     NX+1
-        sta     COUNT
-        stx     COUNT+1
-for:    lda     COUNT           ; count > 0
-        ora     COUNT+1
-        bne     :+
-        rts
-
-        ;    setpixel (X1, Y1)
-:       jsr     SETPIXEL
-
-        ;    pb = err + ny
-        clc
-        lda     ERR
-        adc     NY
-        sta     PB
-        lda     ERR+1
-        adc     NY+1
-        sta     PB+1
-        tax
-
-        ;    ub = pb + nx
-        clc
-        lda     PB
-        adc     NX
-        sta     UB
-        txa
-        adc     NX+1
-        sta     UB+1
-
-        ;    x1 = x1 + dx
-        ldx     #$00
-        lda     DX
-        bpl     :+
-        dex
-:       clc
-        adc     X1
-        sta     X1
-        txa
-        adc     X1+1
-        sta     X1+1
-
-        ;    y1 = y1 + ay
-        ldx     #$00
-        lda     AY
-        bpl     :+
-        dex
-:       clc
-        adc     Y1
-        sta     Y1
-        txa
-        adc     Y1+1
-        sta     Y1+1
-
-        ;    if (abs (pb) < abs (ub)) {
-        lda     PB
-        ldy     PB+1
-        jsr     abs
-        sta     TEMP3
-        sty     TEMP4
-        lda     UB
-        ldy     UB+1
-        jsr     abs
-        ldx     #TEMP3
-        jsr     icmp
-        bpl     :+
-
-        ;       err = pb }
-        lda     PB
-        ldx     PB+1
-        jmp     next
-
-        ;    else { x1 = x1 + ax
-:       ldx     #$00
-        lda     AX
-        bpl     :+
-        dex
-:       clc
-        adc     X1
-        sta     X1
-        txa
-        adc     X1+1
-        sta     X1+1
-
-        ;       y1 = y1 + dy
-        ldx     #$00
-        lda     DY
-        bpl     :+
-        dex
-:       clc
-        adc     Y1
-        sta     Y1
-        txa
-        adc     Y1+1
-        sta     Y1+1
-
-        ;       err = ub }
-        lda     UB
-        ldx     UB+1
-next:   sta     ERR
-        stx     ERR+1
-
-        ; } (--count)
-        lda     COUNT
-        sec
-        sbc     #$01
-        sta     COUNT
-        bcc     :+
-        jmp     for
-:       dec     COUNT+1
-        jmp     for
-
-
-; Copies of some runtime routines
-
-abs:
-        ; A/Y := abs (A/Y)
-        cpy     #$00
-        bpl     :+
-        
-        ; A/Y := neg (A/Y)
-neg:    clc
-        eor     #$FF
-        adc     #$01
-        pha
-        tya
-        eor     #$FF
-        adc     #$00
-        tay
-        pla
-:       rts
-
-icmp:
-        ; Compare A/Y to zp,X
-        sta     TEMP1           ; TEMP1/TEMP2 - arg2
-        sty     TEMP2
-        lda     $00,x
-        pha
-        lda     $01,x
-        tay
-        pla
-        tax
-        tya                     ; X/A - arg1 (a = high)
-
-        sec
-        sbc     TEMP2
-        bne     :++
-        cpx     TEMP1
-        beq     :+
-        adc     #$FF
-        ora     #$01
-:       rts
-:       bvc     :+
-        eor     #$FF
-        ora     #$01
-:       rts
-
-        .endproc
diff --git a/libsrc/vic20/_scrsize.s b/libsrc/vic20/_scrsize.s
deleted file mode 100644 (file)
index 57ad4f3..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-;
-; Ullrich von Bassewitz, 26.10.2000
-;
-; Screen size variables
-;
-
-        .export         screensize
-        .import         SCREEN
-
-screensize      = SCREEN
-
-
diff --git a/libsrc/vic20/break.s b/libsrc/vic20/break.s
deleted file mode 100644 (file)
index 9a5ef02..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-;
-; Ullrich von Bassewitz, 27.09.1998
-;
-; void set_brk (unsigned Addr);
-; void reset_brk (void);
-;
-
-        .export         _set_brk, _reset_brk
-        .destructor     _reset_brk
-        .export         _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
-
-        .include        "vic20.inc"
-
-
-.bss
-_brk_a:         .res    1
-_brk_x:         .res    1
-_brk_y:         .res    1
-_brk_sr:        .res    1
-_brk_pc:        .res    2
-
-oldvec:         .res    2               ; Old vector
-
-
-.data
-uservec:        jmp     $FFFF           ; Patched at runtime
-
-
-.code
-
-; Set the break vector
-.proc   _set_brk
-
-        sta     uservec+1
-        stx     uservec+2       ; Set the user vector
-
-        lda     oldvec
-        ora     oldvec+1        ; Did we save the vector already?
-        bne     L1              ; Jump if we installed the handler already
-
-        lda     BRKVec
-        sta     oldvec
-        lda     BRKVec+1
-        sta     oldvec+1        ; Save the old vector
-
-L1:     lda     #<brk_handler   ; Set the break vector to our routine
-        ldx     #>brk_handler
-        sta     BRKVec
-        stx     BRKVec+1
-        rts
-
-.endproc
-
-
-; Reset the break vector
-.proc   _reset_brk
-
-        lda     oldvec
-        ldx     oldvec+1
-        beq     @L9             ; Jump if vector not installed
-        sta     BRKVec
-        stx     BRKVec+1
-        lda     #$00
-        sta     oldvec          ; Clear the old vector
-        stx     oldvec+1
-@L9:    rts
-
-.endproc
-
-
-
-; Break handler, called if a break occurs
-
-.proc   brk_handler
-
-        pla
-        sta     _brk_y
-        pla
-        sta     _brk_x
-        pla
-        sta     _brk_a
-        pla
-        and     #$EF            ; Clear break bit
-        sta     _brk_sr
-        pla                     ; PC low
-        sec
-        sbc     #2              ; Point to start of brk
-        sta     _brk_pc
-        pla                     ; PC high
-        sbc     #0
-        sta     _brk_pc+1
-
-        jsr     uservec         ; Call the user's routine
-
-        lda     _brk_pc+1
-        pha
-        lda     _brk_pc
-        pha
-        lda     _brk_sr
-        pha
-        ldx     _brk_x
-        ldy     _brk_y
-        lda     _brk_a
-        rti                     ; Jump back...
-
-.endproc
-
-
diff --git a/libsrc/vic20/cgetc.s b/libsrc/vic20/cgetc.s
deleted file mode 100644 (file)
index 4d3a30e..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; char cgetc (void);
-;
-
-        .export         _cgetc
-        .import         cursor
-
-        .include        "vic20.inc"
-
-_cgetc: lda     KEY_COUNT       ; Get number of characters
-        bne     L3              ; Jump if there are already chars waiting
-
-; Switch on the cursor if needed
-
-        lda     CURS_FLAG
-        pha
-        lda     cursor
-        jsr     setcursor
-L1:     lda     KEY_COUNT
-        beq     L1
-        ldx     #0
-        pla
-        bne     L2
-        inx
-L2:     txa
-        jsr     setcursor
-
-L3:     jsr     KBDREAD         ; Read char and return in A
-        ldx     #0
-        rts
-
-
-; Switch the cursor on or off
-
-.proc   setcursor
-
-        tax                     ; On or off?
-        bne     seton           ; Go set it on
-        lda     CURS_FLAG       ; Is the cursor currently off?
-        bne     crs9            ; Jump if yes
-        lda     #1
-        sta     CURS_FLAG       ; Mark it as off
-        lda     CURS_STATE      ; Cursor currently displayed?
-        beq     crs8            ; Jump if no
-        ldy     CURS_X          ; Get the character column
-        lda     (SCREEN_PTR),y  ; Get character
-        eor     #$80
-        sta     (SCREEN_PTR),y  ; Store character back
-        lda     CURS_COLOR
-        sta     (CRAM_PTR),y    ; Store color back
-crs8:   lda     #0
-        sta     CURS_STATE      ; Cursor not displayed
-crs9:   rts
-
-seton:  lda     #0
-        sta     CURS_FLAG
-        rts
-
-.endproc
diff --git a/libsrc/vic20/clrscr.s b/libsrc/vic20/clrscr.s
deleted file mode 100644 (file)
index 8d4994e..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; void clrscr (void);
-;
-
-        .export         _clrscr
-
-        .include        "vic20.inc"
-
-_clrscr = CLRSCR
-
-
-
diff --git a/libsrc/vic20/color.s b/libsrc/vic20/color.s
deleted file mode 100644 (file)
index fb7cf46..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-; Adapted for Vic20 by Steve Schmidtke 05.08.2002
-;
-; unsigned char __fastcall__ textcolor (unsigned char color);
-; unsigned char __fastcall__ bgcolor (unsigned char color);
-; unsigned char __fastcall__ bordercolor (unsigned char color);
-;
-
-
-        .export         _textcolor, _bgcolor, _bordercolor
-        .importzp       tmp1
-
-        .include        "vic20.inc"
-
-
-
-.code
-
-_textcolor:
-        ldx     CHARCOLOR       ; get old value
-        sta     CHARCOLOR       ; set new value
-        txa
-        rts
-
-
-_bgcolor:
-        asl
-        asl
-        asl
-        asl
-        sta     tmp1
-        sei                     ; don't want anything messing around while we update
-        lda     VIC_COLOR       ; get old value
-        and     #$0F
-        tax
-        ora     tmp1
-        sta     VIC_COLOR       ; set new value
-        cli
-        txa
-        lsr
-        lsr
-        lsr
-        lsr
-        rts
-
-
-_bordercolor:
-        and     #$07
-        sta     tmp1
-        sei                     ; don't want anything messing around while we update
-        lda     VIC_COLOR       ; get old value
-        and     #$F8
-        tax
-        ora     tmp1
-        sta     VIC_COLOR       ; set new value
-        cli
-        txa
-        rts
-
diff --git a/libsrc/vic20/conio.s b/libsrc/vic20/conio.s
deleted file mode 100644 (file)
index 043ac90..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; Low level stuff for screen output/console input
-;
-
-        .exportzp       CURS_X, CURS_Y
-
-        .include        "vic20.inc"
-
diff --git a/libsrc/vic20/cputc.s b/libsrc/vic20/cputc.s
deleted file mode 100644 (file)
index 7a1014c..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; void cputcxy (unsigned char x, unsigned char y, char c);
-; void cputc (char c);
-;
-
-        .export         _cputcxy, _cputc, cputdirect, putchar
-        .export         newline, plot
-        .import         popa, _gotoxy
-        .import         PLOT
-
-        .include        "vic20.inc"
-
-
-_cputcxy:
-        pha                     ; Save C
-        jsr     popa            ; Get Y
-        jsr     _gotoxy         ; Set cursor, drop x
-        pla                     ; Restore C
-
-; Plot a character - also used as internal function
-
-_cputc: cmp     #$0A            ; CR?
-        bne     L1
-        lda     #0
-        sta     CURS_X
-        beq     plot            ; Recalculate pointers
-
-L1:     cmp     #$0D            ; LF?
-        beq     newline         ; Recalculate pointers
-
-; Printable char of some sort
-
-        cmp     #' '
-        bcc     cputdirect      ; Other control char
-        tay
-        bmi     L10
-        cmp     #$60
-        bcc     L2
-        and     #$DF
-        bne     cputdirect      ; Branch always
-L2:     and     #$3F
-
-cputdirect:
-        jsr     putchar         ; Write the character to the screen
-
-; Advance cursor position
-
-advance:
-        iny
-        cpy     #XSIZE
-        bne     L3
-        jsr     newline         ; new line
-        ldy     #0              ; + cr
-L3:     sty     CURS_X
-        rts
-
-newline:
-        clc
-        lda     #XSIZE
-        adc     SCREEN_PTR
-        sta     SCREEN_PTR
-        bcc     L4
-        inc     SCREEN_PTR+1
-        clc
-L4:     lda     #XSIZE
-        adc     CRAM_PTR
-        sta     CRAM_PTR
-        bcc     L5
-        inc     CRAM_PTR+1
-L5:     inc     CURS_Y
-        rts
-
-; Handle character if high bit set
-
-L10:    and     #$7F
-        cmp     #$7E            ; PI?
-        bne     L11
-        lda     #$5E            ; Load screen code for PI
-        bne     cputdirect
-L11:    ora     #$40
-        bne     cputdirect
-
-
-
-; Set cursor position, calculate RAM pointers
-
-plot:   ldy     CURS_X
-        ldx     CURS_Y
-        clc
-        jmp     PLOT            ; Set the new cursor
-
-
-
-; Write one character to the screen without doing anything else, return X
-; position in Y
-
-putchar:
-        ora     RVS             ; Set revers bit
-        ldy     CURS_X
-        sta     (SCREEN_PTR),y  ; Set char
-        lda     CHARCOLOR
-        sta     (CRAM_PTR),y    ; Set color
-        rts
diff --git a/libsrc/vic20/crt0.s b/libsrc/vic20/crt0.s
deleted file mode 100644 (file)
index e048819..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-;
-; Startup code for cc65 (Vic20 version)
-;
-
-        .export         _exit
-        .export         __STARTUP__ : absolute = 1      ; Mark as startup
-        .import         initlib, donelib
-        .import         zerobss, push0
-        .import         callmain
-        .import         RESTOR, BSOUT, CLRCH
-        .import         __RAM_START__, __RAM_SIZE__     ; Linker generated
-        .import         __STACKSIZE__                   ; Linker generated
-        .importzp       ST
-
-        .include        "zeropage.inc"
-        .include        "vic20.inc"
-
-; ------------------------------------------------------------------------
-; Startup code
-
-.segment        "STARTUP"
-
-Start:
-
-; Save the zero-page locations that we need.
-
-        ldx     #zpspace-1
-L1:     lda     sp,x
-        sta     zpsave,x
-        dex
-        bpl     L1
-
-; Switch to the second charset.
-
-        lda     #14
-        jsr     BSOUT
-
-; Clear the BSS data.
-
-        jsr     zerobss
-
-; Save some system stuff; and, set up the stack.
-
-        tsx
-        stx     spsave          ; Save the system stack ptr
-
-        lda     #<(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
-        sta     sp
-        lda     #>(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
-        sta     sp+1            ; Set argument stack ptr
-
-; Call the module constructors.
-
-        jsr     initlib
-
-; Push the command-line arguments; and, call main().
-
-        jsr     callmain
-
-; Back from main() [this is also the exit() entry]. Run the module destructors.
-
-_exit:  pha                     ; Save the return code on stack
-        jsr     donelib
-
-; Copy back the zero-page stuff.
-
-        ldx     #zpspace-1
-L2:     lda     zpsave,x
-        sta     sp,x
-        dex
-        bpl     L2
-
-; Place the program return code into BASIC's status variable.
-
-        pla
-        sta     ST
-
-; Restore the stack pointer.
-
-        ldx     spsave
-        txs
-
-; Back to BASIC.
-
-        rts
-
-; ------------------------------------------------------------------------
-
-.segment        "ZPSAVE"
-
-zpsave: .res    zpspace
-
-; ------------------------------------------------------------------------
-
-.bss
-
-spsave: .res    1
diff --git a/libsrc/vic20/devnum.s b/libsrc/vic20/devnum.s
deleted file mode 100644 (file)
index 663db5a..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-;
-; Oliver Schmidt, 2010-02-14
-;
-
-        .include        "vic20.inc"
-
-        .exportzp       devnum := DEVNUM
diff --git a/libsrc/vic20/get_tv.s b/libsrc/vic20/get_tv.s
deleted file mode 100644 (file)
index 7182c0d..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-;
-; Stefan Haubenthal, 2004-10-07
-; Based on code from Pu-239
-;
-; unsigned char get_tv (void);
-; /* Return the video mode the machine is using */
-;
-
-        .include        "vic20.inc"
-        .include        "get_tv.inc"
-
-;--------------------------------------------------------------------------
-; _get_tv
-
-.proc   _get_tv
-
-NTSC_LINES = 261
-        ; detect the system
-        lda     #TV::NTSC
-        tax
-@L0:    ldy     VIC_HLINE
-        cpy     #1
-        bne     @L0             ; wait for line 1
-@L1:    ldy     VIC_HLINE
-        beq     @L2             ; line 0 reached -> NTSC
-        cpy     #NTSC_LINES/2+2
-        bne     @L1
-        lda     #TV::PAL
-@L2:    rts                     ; system detected: 0 for NTSC, 1 for PAL
-
-.endproc
diff --git a/libsrc/vic20/irq.s b/libsrc/vic20/irq.s
deleted file mode 100644 (file)
index ca47347..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-;
-; IRQ handling (Vic20 version)
-;
-
-        .export         initirq, doneirq
-        .import         callirq
-
-        .include        "vic20.inc"
-
-; ------------------------------------------------------------------------
-
-.segment        "INIT"
-
-initirq:
-        lda     IRQVec
-        ldx     IRQVec+1
-        sta     IRQInd+1
-        stx     IRQInd+2
-        lda     #<IRQStub
-        ldx     #>IRQStub
-        jmp     setvec
-
-; ------------------------------------------------------------------------
-
-.code
-
-doneirq:
-        lda     IRQInd+1
-        ldx     IRQInd+2
-setvec: sei
-        sta     IRQVec
-        stx     IRQVec+1
-        cli
-        rts
-
-; ------------------------------------------------------------------------
-
-.segment        "LOWCODE"
-
-IRQStub:
-        cld                             ; Just to be sure
-        jsr     callirq                 ; Call the functions
-        jmp     IRQInd                  ; Jump to the saved IRQ vector
-
-; ------------------------------------------------------------------------
-
-.data
-
-IRQInd: jmp     $0000
diff --git a/libsrc/vic20/joy/vic20-ptvjoy.s b/libsrc/vic20/joy/vic20-ptvjoy.s
deleted file mode 100644 (file)
index cdd4c27..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-;
-; PTV-3 Player joystick driver for the VIC20
-;
-; Stefan Haubenthal, 2005-05-25
-; Groepaz/Hitmen, 2002-12-23
-; obviously based on Ullrichs driver :)
-; Using code from Steve Schmidtke
-;
-
-        .include "zeropage.inc"
-
-        .include "joy-kernel.inc"
-        .include "joy-error.inc"
-        .include "vic20.inc"
-
-        .macpack module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _vic20_ptvjoy_joy
-
-; Driver signature
-
-        .byte   $6A, $6F, $79   ; "joy"
-        .byte   JOY_API_VERSION ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
-; Jump table.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READ
-        .addr   0                       ; IRQ entry unused
-
-; ------------------------------------------------------------------------
-; Constants
-
-VIA1_PRB        := VIA1         ; User port register
-JOY_COUNT       = 3             ; Number of joysticks we support
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #<JOY_ERR_OK
-        ldx     #>JOY_ERR_OK
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:
-        lda     #<JOY_COUNT
-        ldx     #>JOY_COUNT
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
-
-READ:   tax                     ; Joystick number into X
-        bne     joy2
-
-; Read joystick 1
-
-joy1:   lda     #$7F            ; mask for VIA2 JOYBIT: sw3
-        ldx     #$C3            ; mask for VIA1 JOYBITS: sw0,sw1,sw2,sw4
-        sei                     ; necessary?
-
-        ldy     VIA2_DDRB       ; remember the date of DDRB
-        sta     VIA2_DDRB       ; set JOYBITS on this VIA for input
-        lda     VIA2_JOY        ; read JOYBIT: sw3
-        sty     VIA2_DDRB       ; restore the state of DDRB
-        asl                     ; Shift sw3 into carry
-
-        ldy     VIA1_DDRA       ; remember the state of DDRA
-        stx     VIA1_DDRA       ; set JOYBITS on this VIA for input
-        lda     VIA1_JOY        ; read JOYBITS: sw0,sw1,sw2,sw4
-        sty     VIA1_DDRA       ; restore the state of DDRA
-
-        cli                     ; necessary?
-        ror                     ; Shift sw3 into bit 7
-        and     #$9E            ; Mask relevant bits
-        eor     #$9E            ; Active states are inverted
-
-        rts
-
-; Read joystick 2
-
-joy2:   lda     #%10000000      ; via port B Data-Direction
-        sta     VIA1_DDRB       ; bit 7: out    bit 6-0: in
-
-        dex
-        bne     joy3
-
-        lda     #$80            ; via port B read/write
-        sta     VIA1_PRB        ; (output one at PB7)
-
-        lda     VIA1_PRB        ; via port B read/write
-        and     #$1f            ; get bit 4-0 (PB4-PB0)
-        eor     #$1f
-        rts
-
-; Read joystick 3
-
-joy3:   lda     #$00            ; via port B read/write
-        sta     VIA1_PRB        ; (output zero at PB7)
-
-        lda     VIA1_PRB        ; via port B read/write
-        and     #$0f            ; get bit 3-0 (PB3-PB0)
-        sta     tmp1            ; joy 4 directions
-
-        lda     VIA1_PRB        ; via port B read/write
-        and     #%00100000      ; get bit 5 (PB5)
-        lsr
-        ora     tmp1
-        eor     #$1f
-
-        ldx     #0
-        rts
-
diff --git a/libsrc/vic20/joy/vic20-stdjoy.s b/libsrc/vic20/joy/vic20-stdjoy.s
deleted file mode 100644 (file)
index 56fb35a..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-;
-; Standard joystick driver for the VIC20. May be used multiple times when linked
-; to the statically application.
-;
-; Ullrich von Bassewitz, 2002-12-20
-; Using code from Steve Schmidtke
-;
-
-        .include        "zeropage.inc"
-
-        .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-        .include        "vic20.inc"
-
-        .macpack        generic
-        .macpack        module
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-        module_header   _vic20_stdjoy_joy
-
-; Driver signature
-
-        .byte   $6A, $6F, $79           ; "joy"
-        .byte   JOY_API_VERSION         ; Driver API version number
-
-; Library reference
-
-        .addr   $0000
-
-; Button state masks (8 values)
-
-        .byte   $02                     ; JOY_UP
-        .byte   $04                     ; JOY_DOWN
-        .byte   $08                     ; JOY_LEFT
-        .byte   $80                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
-; Jump table.
-
-        .addr   INSTALL
-        .addr   UNINSTALL
-        .addr   COUNT
-        .addr   READ
-        .addr   0                       ; IRQ entry unused
-
-; ------------------------------------------------------------------------
-; Constants
-
-JOY_COUNT       = 1             ; Number of joysticks we support
-
-
-; ------------------------------------------------------------------------
-; Data.
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #<JOY_ERR_OK
-        ldx     #>JOY_ERR_OK
-;       rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:
-        lda     #<JOY_COUNT
-        ldx     #>JOY_COUNT
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-; The current implemenation will ignore the joystick number because we do only
-; have one joystick
-
-READ:   lda     #$7F            ; mask for VIA2 JOYBIT: sw3
-        ldx     #$C3            ; mask for VIA1 JOYBITS: sw0,sw1,sw2,sw4
-        sei                     ; necessary?
-
-        ldy     VIA2_DDRB       ; remember the date of DDRB
-        sta     VIA2_DDRB       ; set JOYBITS on this VIA for input
-        lda     VIA2_JOY        ; read JOYBIT: sw3
-        sty     VIA2_DDRB       ; restore the state of DDRB
-        asl                     ; Shift sw3 into carry
-
-        ldy     VIA1_DDRA       ; remember the state of DDRA
-        stx     VIA1_DDRA       ; set JOYBITS on this VIA for input
-        lda     VIA1_JOY        ; read JOYBITS: sw0,sw1,sw2,sw4
-        sty     VIA1_DDRA       ; restore the state of DDRA
-
-        cli                     ; necessary?
-        ror                     ; Shift sw3 into bit 7
-        and     #$9E            ; Mask relevant bits
-        eor     #$9E            ; Active states are inverted
-
-        rts
-
-
diff --git a/libsrc/vic20/joy_stat_stddrv.s b/libsrc/vic20/joy_stat_stddrv.s
deleted file mode 100644 (file)
index 04f7909..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Address of the static standard joystick driver
-;
-; Oliver Schmidt, 2012-11-01
-;
-; const void joy_static_stddrv[];
-;
-
-        .export _joy_static_stddrv
-        .import _vic20_stdjoy_joy
-
-.rodata
-
-_joy_static_stddrv := _vic20_stdjoy_joy
diff --git a/libsrc/vic20/joy_stddrv.s b/libsrc/vic20/joy_stddrv.s
deleted file mode 100644 (file)
index cd35360..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Name of the standard joystick driver
-;
-; Ullrich von Bassewitz, 2002-12-21
-;
-; const char joy_stddrv[];
-;
-
-        .export _joy_stddrv
-
-.rodata
-
-_joy_stddrv:    .asciiz "vic20-stdjoy.joy"
-
diff --git a/libsrc/vic20/kbhit.s b/libsrc/vic20/kbhit.s
deleted file mode 100644 (file)
index d2e7e81..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Ullrich von Bassewitz, 06.08.1998
-;
-; unsigned char kbhit (void);
-;
-
-        .export         _kbhit
-
-        .include        "vic20.inc"
-
-
-.proc   _kbhit
-
-        ldx     #0              ; High byte of return is always zero
-        lda     KEY_COUNT       ; Get number of characters
-        beq     L9
-        lda     #1
-L9:     rts
-
-.endproc
-
-
-
diff --git a/libsrc/vic20/kernal.s b/libsrc/vic20/kernal.s
deleted file mode 100644 (file)
index 35bedb4..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-;
-; Ullrich von Bassewitz, 19.11.2002
-;
-; VIC20 kernal functions
-;
-
-        .export         CINT
-        .export         IOINIT
-        .export         RAMTAS
-        .export         RESTOR
-        .export         VECTOR
-        .export         SETMSG
-        .export         SECOND
-        .export         TKSA
-        .export         MEMTOP
-        .export         MEMBOT
-        .export         SCNKEY
-        .export         SETTMO
-        .export         ACPTR
-        .export         CIOUT
-        .export         UNTLK
-        .export         UNLSN
-        .export         LISTEN
-        .export         TALK
-        .export         READST
-        .export         SETLFS
-        .export         SETNAM
-        .export         OPEN
-        .export         CLOSE
-        .export         CHKIN
-        .export         CKOUT
-        .export         CLRCH
-        .export         BASIN
-        .export         BSOUT
-        .export         LOAD
-        .export         SAVE
-        .export         SETTIM
-        .export         RDTIM
-        .export         STOP
-        .export         GETIN
-        .export         CLALL
-        .export         UDTIM
-        .export         SCREEN
-        .export         IOBASE
-
-
-;-----------------------------------------------------------------------------
-; All functions are available in the kernal jump table
-
-CINT            = $FF81
-IOINIT          = $FF84
-RAMTAS          = $FF87
-RESTOR          = $FF8A
-VECTOR          = $FF8D
-SETMSG          = $FF90
-SECOND          = $FF93
-TKSA            = $FF96
-MEMTOP          = $FF99
-MEMBOT          = $FF9C
-SCNKEY          = $FF9F
-SETTMO          = $FFA2
-ACPTR           = $FFA5
-CIOUT           = $FFA8
-UNTLK           = $FFAB
-UNLSN           = $FFAE
-LISTEN          = $FFB1
-TALK            = $FFB4
-READST          = $FFB7
-SETLFS          = $FFBA
-SETNAM          = $FFBD
-OPEN            = $FFC0
-CLOSE           = $FFC3
-CHKIN           = $FFC6
-CKOUT           = $FFC9
-CLRCH           = $FFCC
-BASIN           = $FFCF
-BSOUT           = $FFD2
-LOAD            = $FFD5
-SAVE            = $FFD8
-SETTIM          = $FFDB
-RDTIM           = $FFDE
-STOP            = $FFE1
-GETIN           = $FFE4
-CLALL           = $FFE7
-UDTIM           = $FFEA
-SCREEN          = $FFED
-IOBASE          = $FFF3
-
diff --git a/libsrc/vic20/kplot.s b/libsrc/vic20/kplot.s
deleted file mode 100644 (file)
index 2f4de27..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-;
-; Ullrich von Bassewitz, 2002-12-09
-;
-; PLOT replacement function for the VIC20. The kernal function does not set
-; the pointer to the color RAM correctly.
-;
-
-        .export         PLOT
-
-
-.proc   PLOT
-
-        bcs     @L1                     
-        jsr     $FFF0                   ; Set cursor position
-        jmp     $EAB2                   ; Set pointer to color RAM
-
-@L1:    jmp     $FFF0                   ; Get cursor position
-
-.endproc
-
-
diff --git a/libsrc/vic20/libref.s b/libsrc/vic20/libref.s
deleted file mode 100644 (file)
index e4afa7e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-;
-; Oliver Schmidt, 2013-05-31
-;
-
-        .export         joy_libref
-        .import         _exit
-
-joy_libref      := _exit
diff --git a/libsrc/vic20/mainargs.s b/libsrc/vic20/mainargs.s
deleted file mode 100644 (file)
index eda8f4f..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-; mainargs.s
-;
-; Ullrich von Bassewitz, 2003-03-07
-; Based on code from Stefan A. Haubenthal, <polluks@web.de>
-; 2003-05-18, Greg King
-; 2004-04-28, 2005-02-26, Ullrich von Bassewitz
-;
-; Scan a group of arguments that are in BASIC's input-buffer.
-; Build an array that points to the beginning of each argument.
-; Send, to main(), that array and the count of the arguments.
-;
-; Command-lines look like these lines:
-;
-; run
-; run : rem
-; run:rem arg1 " arg 2 is quoted "  arg3 "" arg5
-;
-; "run" and "rem" are entokenned; the args. are not.  Leading and trailing
-; spaces outside of quotes are ignored.
-;
-; TO-DO:
-; - The "file-name" might be a path-name; don't copy the directory-components.
-; - Add a control-character quoting mechanism.
-
-        .constructor    initmainargs, 24
-        .import         __argc, __argv
-
-        .include        "vic20.inc"
-
-
-
-MAXARGS  = 10                   ; Maximum number of arguments allowed
-REM      = $8f                  ; BASIC token-code
-NAME_LEN = 16                   ; maximum length of command-name
-
-; Get possible command-line arguments. Goes into the special INIT segment,
-; which may be reused after the startup code is run
-
-.segment        "INIT"
-
-initmainargs:
-
-; Assume that the program was loaded, a moment ago, by the traditional LOAD
-; statement.  Save the "most-recent filename" as argument #0.
-; Because the buffer, that we're copying into, was zeroed out,
-; we don't need to add a NUL character.
-;
-        ldy     FNAM_LEN
-        cpy     #NAME_LEN + 1
-        bcc     L1
-        ldy     #NAME_LEN - 1   ; limit the length
-L0:     lda     (FNAM),y
-        sta     name,y
-L1:     dey
-        bpl     L0
-        inc     __argc          ; argc always is equal to, at least, 1
-
-; Find the "rem" token.
-;
-        ldx     #0
-L2:     lda     BASIC_BUF,x
-        beq     done            ; no "rem," no args.
-        inx
-        cmp     #REM
-        bne     L2
-        ldy     #1 * 2
-
-; Find the next argument
-
-next:   lda     BASIC_BUF,x
-        beq     done            ; End of line reached
-        inx
-        cmp     #' '            ; Skip leading spaces
-        beq     next            ;
-
-; Found start of next argument. We've incremented the pointer in X already, so
-; it points to the second character of the argument. This is useful since we
-; will check now for a quoted argument, in which case we will have to skip this
-; first character.
-
-found:  cmp     #'"'            ; Is the argument quoted?
-        beq     setterm         ; Jump if so
-        dex                     ; Reset pointer to first argument character
-        lda     #' '            ; A space ends the argument
-setterm:sta     term            ; Set end of argument marker
-
-; Now store a pointer to the argument into the next slot. Since the BASIC
-; input buffer is located at the start of a RAM page, no calculations are
-; necessary.
-
-        txa                     ; Get low byte
-        sta     argv,y          ; argv[y]= &arg
-        iny
-        lda     #>BASIC_BUF
-        sta     argv,y
-        iny
-        inc     __argc          ; Found another arg
-
-; Search for the end of the argument
-
-argloop:lda     BASIC_BUF,x
-        beq     done
-        inx
-        cmp     term
-        bne     argloop
-                          
-; We've found the end of the argument. X points one character behind it, and
-; A contains the terminating character. To make the argument a valid C string,
-; replace the terminating character by a zero.
-
-        lda     #0
-        sta     BASIC_BUF-1,x
-
-; Check if the maximum number of command line arguments is reached. If not,
-; parse the next one.
-
-        lda     __argc          ; Get low byte of argument count
-        cmp     #MAXARGS        ; Maximum number of arguments reached?
-        bcc     next            ; Parse next one if not
-
-; (The last vector in argv[] already is NULL.)
-
-done:   lda     #<argv
-        ldx     #>argv
-        sta     __argv
-        stx     __argv + 1
-        rts
-
-; These arrays are zeroed before initmainargs is called.
-; char  name[16+1];
-; char* argv[MAXARGS+1]={name};
-;
-.bss
-term:   .res    1
-name:   .res    NAME_LEN + 1
-
-.data
-argv:   .addr   name
-        .res    MAXARGS * 2
-
diff --git a/libsrc/vic20/randomize.s b/libsrc/vic20/randomize.s
deleted file mode 100644 (file)
index 69cf07b..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;
-; 2002-11-05, Ullrich von Bassewitz
-; 2015-09-11, Greg King
-;
-; void _randomize (void);
-; /* Initialize the random number generator */
-;
-
-        .export         __randomize
-        .import         _srand
-
-        .include        "vic20.inc"
-
-__randomize:
-        lda     VIC_LINES       ; Get overflow bit
-        asl     a               ; Shift bit 7 into carry
-        lda     VIC_HLINE       ; Get bit 1-8 of rasterline
-        rol     a               ; Use bit 0-7
-        tax                     ; Use VIC rasterline as high byte
-        lda     TIME+2          ; Use 60HZ clock as low byte
-        jmp     _srand          ; Initialize generator
-
diff --git a/libsrc/vic20/revers.s b/libsrc/vic20/revers.s
deleted file mode 100644 (file)
index b2912b8..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-;
-; Ullrich von Bassewitz, 07.08.1998
-;
-; unsigned char revers (unsigned char onoff);
-;
-
-        .export         _revers
-
-        .include        "vic20.inc"
-
-.proc   _revers
-
-        ldx     #$00            ; Assume revers off
-        tay                     ; Test onoff
-        beq     L1              ; Jump if off
-        ldx     #$80            ; Load on value
-        ldy     #$00            ; Assume old value is zero
-L1:     lda     RVS             ; Load old value
-        stx     RVS             ; Set new value
-        beq     L2              ; Jump if old value zero
-        iny                     ; Make old value = 1
-L2:     ldx     #$00            ; Load high byte of result
-        tya                     ; Load low byte, set CC
-        rts
-
-.endproc
-
diff --git a/libsrc/vic20/status.s b/libsrc/vic20/status.s
deleted file mode 100644 (file)
index c6f2792..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-;
-; Oliver Schmidt, 2012-09-30
-;
-
-        .exportzp       ST := $90       ; IEC status byte
diff --git a/libsrc/vic20/sysuname.s b/libsrc/vic20/sysuname.s
deleted file mode 100644 (file)
index 18d5db9..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;
-; Ullrich von Bassewitz, 2003-08-12
-;
-; unsigned char __fastcall__ _sysuname (struct utsname* buf);
-;
-
-        .export         __sysuname, utsdata
-
-        .import         utscopy
-
-        __sysuname = utscopy
-
-;--------------------------------------------------------------------------
-; Data. We define a fixed utsname struct here and just copy it.
-
-.rodata
-
-utsdata:
-        ; sysname
-        .asciiz         "cc65"
-
-        ; nodename
-        .asciiz         ""
-
-        ; release
-        .byte           ((.VERSION >> 8) & $0F) + '0'
-        .byte           '.'
-        .byte           ((.VERSION >> 4) & $0F) + '0'
-        .byte           $00
-
-        ; version
-        .byte           (.VERSION & $0F) + '0'
-        .byte           $00
-
-        ; machine
-        .asciiz         "Commodore VIC20"
-
-
-
diff --git a/libsrc/zlib/adler32.s b/libsrc/zlib/adler32.s
deleted file mode 100644 (file)
index e54e25e..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-;
-; Piotr Fusik, 18.11.2001
-;
-; unsigned long __fastcall__ adler32 (unsigned long adler, unsigned char* buf,
-;                                     unsigned len);
-;
-
-        .export _adler32
-
-        .import         incsp2, incsp4, popax, popeax
-        .importzp       sreg, ptr1, ptr2, tmp1
-
-BASE    =       65521   ; largest prime smaller than 65536
-
-_adler32:
-; ptr2 = (len & 0xff) == 0 ? len : len + 0x100;
-        tay
-        beq     @L1
-        inx
-@L1:    sta     ptr2
-        stx     ptr2+1
-; ptr1 = buf
-        jsr     popax
-        sta     ptr1
-        stx     ptr1+1
-; if (buf == NULL) return 1L;
-        ora     ptr1+1
-        beq     @L0
-; s1 = adler & 0xFFFF; s2 = adler >> 16;
-        jsr     popeax
-; if (len == 0) return adler;
-        ldy     ptr2
-        bne     @L2
-        ldy     ptr2+1
-        beq     @RET
-@L2:    ldy     #0
-; s1 += *ptr++; if (s1 >= BASE) s1 -= BASE;
-@L3:    clc
-        adc     (ptr1),y
-        bcc     @L4
-        inx
-        beq     @L5     ; C flag is set
-@L4:    cpx     #>BASE
-        bcc     @L6
-        cmp     #<BASE
-        bcc     @L6
-        inx             ; ldx #0
-@L5:    sbc     #<BASE  ; C flag is set
-        clc
-@L6:    sta     tmp1
-; s2 += s1; if (s2 >= BASE) s2 -= BASE;
-        adc     sreg    ; C flag is clear
-        sta     sreg
-        txa
-        adc     sreg+1
-        sta     sreg+1
-        bcs     @L7
-        cmp     #>BASE
-        bcc     @L8
-        lda     sreg
-        cmp     #<BASE
-        bcc     @L8
-@L7:    lda     sreg
-        sbc     #<BASE  ; C flag is set
-        sta     sreg
-        lda     sreg+1
-        sbc     #>BASE
-        sta     sreg+1
-@L8:    lda     tmp1
-        iny
-        bne     @L9
-        inc     ptr1+1
-@L9:    dec     ptr2
-        bne     @L3
-        dec     ptr2+1
-        bne     @L3
-; return (s2 << 16) | s1;
-@RET:   rts
-
-; return 1L
-@L0:    sta     sreg
-        sta     sreg+1
-        lda     #1
-; ignore adler
-        jmp     incsp4
diff --git a/libsrc/zlib/crc32.s b/libsrc/zlib/crc32.s
deleted file mode 100644 (file)
index 26955db..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-;
-; Piotr Fusik, 14.11.2001
-;
-; unsigned long __fastcall__ crc32 (unsigned long crc, unsigned char* buf,
-;                                   unsigned len);
-;
-
-        .export _crc32
-
-        .import         compleax, incsp2, incsp4, popax, popeax
-        .importzp       sreg, ptr1, ptr2, tmp1, tmp2
-
-POLYNOMIAL      =       $EDB88320
-
-make_table:
-        ldx     #0
-@L1:    lda     #0
-        sta     tmp2
-        sta     sreg
-        sta     sreg+1
-        ldy     #8
-        txa
-@L2:    sta     tmp1
-        lsr     a
-        bcc     @L3
-        lda     sreg+1
-        lsr     a
-        eor     #(POLYNOMIAL>>24)&$FF
-        sta     sreg+1
-        lda     sreg
-        ror     a
-        eor     #(POLYNOMIAL>>16)&$FF
-        sta     sreg
-        lda     tmp2
-        ror     a
-        eor     #(POLYNOMIAL>>8)&$FF
-        sta     tmp2
-        lda     tmp1
-        ror     a
-        eor     #POLYNOMIAL&$FF
-        bcs     @L4     ; branch always
-@L3:    rol     a
-        lsr     sreg+1
-        ror     sreg
-        ror     tmp2
-        ror     a
-@L4:    dey
-        bne     @L2
-        sta     table_0,x
-        lda     tmp2
-        sta     table_1,x
-        lda     sreg
-        sta     table_2,x
-        lda     sreg+1
-        sta     table_3,x
-        inx
-        bne     @L1
-        inc     table_initialised
-RET:
-        rts
-
-_crc32:
-; ptr2 = (len & 0xff) == 0 ? len : len + 0x100;
-        tay
-        beq     @L1
-        inx
-@L1:    sta     ptr2
-        stx     ptr2+1
-; ptr1 = buf
-        jsr     popax
-        sta     ptr1
-        stx     ptr1+1
-; if (buf == NULL) return 0;
-        ora     ptr1+1
-        beq     @L0
-; if (!tables_initialised) make_tables();
-        lda     table_initialised
-        bne     @dont_make
-        jsr     make_table
-@dont_make:
-; eax = crc
-        jsr     popeax
-; if (len == 0) return crc;
-        ldy     ptr2
-        bne     @L2
-        ldy     ptr2+1
-        beq     RET
-@L2:
-; eax = ~crc
-        jsr     compleax
-        stx     tmp2
-        ldy     #0
-; crc = (crc >> 8) ^ table[(crc & 0xff) ^ *p++];
-@L3:    eor     (ptr1),y
-        tax
-        lda     table_0,x
-        eor     tmp2
-        sta     tmp1
-        lda     table_1,x
-        eor     sreg
-        sta     tmp2
-        lda     table_2,x
-        eor     sreg+1
-        sta     sreg
-        lda     table_3,x
-        sta     sreg+1
-        lda     tmp1
-        iny
-        bne     @L4
-        inc     ptr1+1
-@L4:    dec     ptr2
-        bne     @L3
-        dec     ptr2+1
-        bne     @L3
-        ldx     tmp2
-        jmp     compleax
-
-; return 0L
-@L0:    sta     sreg
-        sta     sreg+1
-; ignore crc
-        jmp     incsp4
-
-                .data
-table_initialised:
-                .byte   0
-
-                .bss
-table_0:        .res    256
-table_1:        .res    256
-table_2:        .res    256
-table_3:        .res    256
-
-
diff --git a/libsrc/zlib/inflatemem.s b/libsrc/zlib/inflatemem.s
deleted file mode 100644 (file)
index bcf473b..0000000
+++ /dev/null
@@ -1,673 +0,0 @@
-;
-; Piotr Fusik, 21.09.2003
-;
-; unsigned __fastcall__ inflatemem (char* dest, const char* source);
-;
-
-        .export         _inflatemem
-
-        .import         incsp2
-        .importzp       sp, sreg, ptr1, ptr2, ptr3, ptr4, tmp1
-
-; --------------------------------------------------------------------------
-;
-; Constants
-;
-
-; Maximum length of a Huffman code.
-MAX_BITS      = 15
-
-; All Huffman trees are stored in the bitsCount, bitsPointer_l
-; and bitsPointer_h arrays.  There may be two trees: the literal/length tree
-; and the distance tree, or just one - the temporary tree.
-
-; Index in the mentioned arrays for the beginning of the literal/length tree
-; or the temporary tree.
-PRIMARY_TREE  = 0
-
-; Index in the mentioned arrays for the beginning of the distance tree.
-DISTANCE_TREE = MAX_BITS
-
-; Size of each array.
-TREES_SIZE    = 2*MAX_BITS
-
-
-; --------------------------------------------------------------------------
-;
-; Page zero
-;
-
-; Pointer to the compressed data.
-inputPointer            =       ptr1    ; 2 bytes
-
-; Pointer to the uncompressed data.
-outputPointer           =       ptr2    ; 2 bytes
-
-; Local variables.
-; As far as there is no conflict, same memory locations are used
-; for different variables.
-
-inflateDynamicBlock_cnt =       ptr3    ; 1 byte
-inflateCodes_src        =       ptr3    ; 2 bytes
-buildHuffmanTree_src    =       ptr3    ; 2 bytes
-getNextLength_last      =       ptr3    ; 1 byte
-getNextLength_index     =       ptr3+1  ; 1 byte
-
-buildHuffmanTree_ptr    =       ptr4    ; 2 bytes
-fetchCode_ptr           =       ptr4    ; 2 bytes
-getBits_tmp             =       ptr4    ; 1 byte
-
-moveBlock_len           =       sreg    ; 2 bytes
-inflateDynamicBlock_np  =       sreg    ; 1 byte
-inflateDynamicBlock_nd  =       sreg+1  ; 1 byte
-
-getBit_hold             =       tmp1    ; 1 byte
-
-
-; --------------------------------------------------------------------------
-;
-; Code
-;
-
-_inflatemem:
-
-; inputPointer = source
-        sta     inputPointer
-        stx     inputPointer+1
-; outputPointer = dest
-.ifpc02
-        lda     (sp)
-        ldy     #1
-.else
-        ldy     #0
-        lda     (sp),y
-        iny
-.endif
-        sta     outputPointer
-        lda     (sp),y
-        sta     outputPointer+1
-
-;       ldy     #1
-        sty     getBit_hold
-inflatemem_1:
-; Get a bit of EOF and two bits of block type
-        ldx     #3
-        lda     #0
-        jsr     getBits
-        lsr     a
-; A and Z contain block type, C contains EOF flag
-; Save EOF flag
-        php
-; Go to the routine decompressing this block
-        jsr     callExtr
-        plp
-        bcc     inflatemem_1
-; C flag is set!
-
-; return outputPointer - dest;
-        lda     outputPointer
-.ifpc02
-        sbc     (sp)            ; C flag is set
-        ldy     #1
-.else
-        ldy     #0
-        sbc     (sp),y          ; C flag is set
-        iny
-.endif
-        pha
-        lda     outputPointer+1
-        sbc     (sp),y
-        tax
-        pla
-; pop dest
-        jmp     incsp2
-
-; --------------------------------------------------------------------------
-; Go to proper block decoding routine.
-
-callExtr:
-        bne     inflateCompressedBlock
-
-; --------------------------------------------------------------------------
-; Decompress a 'stored' data block.
-
-inflateCopyBlock:
-; Ignore bits until byte boundary
-        ldy     #1
-        sty     getBit_hold
-; Get 16-bit length
-        ldx     #inputPointer
-        lda     (0,x)
-        sta     moveBlock_len
-        lda     (inputPointer),y
-        sta     moveBlock_len+1
-; Skip the length and one's complement of it
-        lda     #4
-        clc
-        adc     inputPointer
-        sta     inputPointer
-        bcc     moveBlock
-        inc     inputPointer+1
-;       jmp     moveBlock
-
-; --------------------------------------------------------------------------
-; Copy block of length moveBlock_len from (0,x) to the output.
-
-moveBlock:
-        ldy     moveBlock_len
-        beq     moveBlock_1
-.ifpc02
-.else
-        ldy     #0
-.endif
-        inc     moveBlock_len+1
-moveBlock_1:
-        lda     (0,x)
-.ifpc02
-        sta     (outputPointer)
-.else
-        sta     (outputPointer),y
-.endif
-        inc     0,x
-        bne     moveBlock_2
-        inc     1,x
-moveBlock_2:
-        inc     outputPointer
-        bne     moveBlock_3
-        inc     outputPointer+1
-moveBlock_3:
-.ifpc02
-        dey
-.else
-        dec     moveBlock_len
-.endif
-        bne     moveBlock_1
-        dec     moveBlock_len+1
-        bne     moveBlock_1
-        rts
-
-; --------------------------------------------------------------------------
-; Decompress a Huffman-coded data block
-; (A = 1: fixed, A = 2: dynamic).
-
-inflateCompressedBlock:
-        lsr     a
-        bne     inflateDynamicBlock
-; Note: inflateDynamicBlock may assume that A = 1
-
-; --------------------------------------------------------------------------
-; Decompress a Huffman-coded data block with default Huffman trees
-; (defined by the DEFLATE format):
-; literalCodeLength:  144 times 8, 112 times 9
-; endCodeLength:      7
-; lengthCodeLength:   23 times 7, 6 times 8
-; distanceCodeLength: 30 times 5+DISTANCE_TREE, 2 times 8
-;                     (two 8-bit codes from the primary tree are not used).
-
-inflateFixedBlock:
-        ldx     #159
-        stx     distanceCodeLength+32
-        lda     #8
-inflateFixedBlock_1:
-        sta     literalCodeLength-1,x
-        sta     literalCodeLength+159-1,x
-        dex
-        bne     inflateFixedBlock_1
-        ldx     #112
-;       lda     #9
-inflateFixedBlock_2:
-        inc     literalCodeLength+144-1,x       ; sta
-        dex
-        bne     inflateFixedBlock_2
-        ldx     #24
-;       lda     #7
-inflateFixedBlock_3:
-        dec     endCodeLength-1,x       ; sta
-        dex
-        bne     inflateFixedBlock_3
-        ldx     #30
-        lda     #5+DISTANCE_TREE
-inflateFixedBlock_4:
-        sta     distanceCodeLength-1,x
-        dex
-        bne     inflateFixedBlock_4
-        beq     inflateCodes            ; branch always
-
-; --------------------------------------------------------------------------
-; Decompress a Huffman-coded data block, reading Huffman trees first.
-
-inflateDynamicBlock:
-; numberOfPrimaryCodes = 257 + getBits(5)
-        ldx     #5
-;       lda     #1
-        jsr     getBits
-        sta     inflateDynamicBlock_np
-; numberOfDistanceCodes = 1 + getBits(5)
-        ldx     #5
-        lda     #1+29+1
-        jsr     getBits
-        sta     inflateDynamicBlock_nd
-; numberOfTemporaryCodes = 4 + getBits(4)
-        lda     #4
-        tax
-        jsr     getBits
-        sta     inflateDynamicBlock_cnt
-; Get lengths of temporary codes in the order stored in tempCodeLengthOrder
-        txa                     ; lda #0
-        tay
-inflateDynamicBlock_1:
-        ldx     #3              ; A = 0
-        jsr     getBits         ; does not change Y
-inflateDynamicBlock_2:
-        ldx     tempCodeLengthOrder,y
-        sta     literalCodeLength,x
-        lda     #0
-        iny
-        cpy     inflateDynamicBlock_cnt
-        bcc     inflateDynamicBlock_1
-        cpy     #19
-        bcc     inflateDynamicBlock_2
-        ror     literalCodeLength+19    ; C flag is set, so this will set b7
-; Build the tree for temporary codes
-        jsr     buildHuffmanTree
-
-; Use temporary codes to get lengths of literal/length and distance codes
-        ldx     #0
-        ldy     #1
-        stx     getNextLength_last
-inflateDynamicBlock_3:
-        jsr     getNextLength
-        sta     literalCodeLength,x
-        inx
-        bne     inflateDynamicBlock_3
-inflateDynamicBlock_4:
-        jsr     getNextLength
-inflateDynamicBlock_5:
-        sta     endCodeLength,x
-        inx
-        cpx     inflateDynamicBlock_np
-        bcc     inflateDynamicBlock_4
-        lda     #0
-        cpx     #1+29
-        bcc     inflateDynamicBlock_5
-inflateDynamicBlock_6:
-        jsr     getNextLength
-        cmp     #0
-        beq     inflateDynamicBlock_7
-        adc     #DISTANCE_TREE-1        ; C flag is set
-inflateDynamicBlock_7:
-        sta     endCodeLength,x
-        inx
-        cpx     inflateDynamicBlock_nd
-        bcc     inflateDynamicBlock_6
-        ror     endCodeLength,x         ; C flag is set, so this will set b7
-;       jmp     inflateCodes
-
-; --------------------------------------------------------------------------
-; Decompress a data block basing on given Huffman trees.
-
-inflateCodes:
-        jsr     buildHuffmanTree
-inflateCodes_1:
-        jsr     fetchPrimaryCode
-        bcs     inflateCodes_2
-; Literal code
-.ifpc02
-        sta     (outputPointer)
-.else
-        ldy     #0
-        sta     (outputPointer),y
-.endif
-        inc     outputPointer
-        bne     inflateCodes_1
-        inc     outputPointer+1
-        bcc     inflateCodes_1  ; branch always
-; End of block
-inflateCodes_ret:
-        rts
-inflateCodes_2:
-        beq     inflateCodes_ret
-; Restore a block from the look-behind buffer
-        jsr     getValue
-        sta     moveBlock_len
-        tya
-        jsr     getBits
-        sta     moveBlock_len+1
-        ldx     #DISTANCE_TREE
-        jsr     fetchCode
-        jsr     getValue
-        sec
-        eor     #$ff
-        adc     outputPointer
-        sta     inflateCodes_src
-        php
-        tya
-        jsr     getBits
-        plp
-        eor     #$ff
-        adc     outputPointer+1
-        sta     inflateCodes_src+1
-        ldx     #inflateCodes_src
-        jsr     moveBlock
-        beq     inflateCodes_1  ; branch always
-
-; --------------------------------------------------------------------------
-; Build Huffman trees basing on code lengths (in bits).
-; stored in the *CodeLength arrays.
-; A byte with its highest bit set marks the end.
-
-buildHuffmanTree:
-        lda     #<literalCodeLength
-        sta     buildHuffmanTree_src
-        lda     #>literalCodeLength
-        sta     buildHuffmanTree_src+1
-; Clear bitsCount and bitsPointer_l
-        ldy     #2*TREES_SIZE+1
-        lda     #0
-buildHuffmanTree_1:
-        sta     bitsCount-1,y
-        dey
-        bne     buildHuffmanTree_1
-        beq     buildHuffmanTree_3      ; branch always
-; Count number of codes of each length
-buildHuffmanTree_2:
-        tax
-        inc     bitsPointer_l,x
-        iny
-        bne     buildHuffmanTree_3
-        inc     buildHuffmanTree_src+1
-buildHuffmanTree_3:
-        lda     (buildHuffmanTree_src),y
-        bpl     buildHuffmanTree_2
-; Calculate a pointer for each length
-        ldx     #0
-        lda     #<sortedCodes
-        ldy     #>sortedCodes
-        clc
-buildHuffmanTree_4:
-        sta     bitsPointer_l,x
-        tya
-        sta     bitsPointer_h,x
-        lda     bitsPointer_l+1,x
-        adc     bitsPointer_l,x         ; C flag is zero
-        bcc     buildHuffmanTree_5
-        iny
-buildHuffmanTree_5:
-        inx
-        cpx     #TREES_SIZE
-        bcc     buildHuffmanTree_4
-        lda     #>literalCodeLength
-        sta     buildHuffmanTree_src+1
-        ldy     #0
-        bcs     buildHuffmanTree_9      ; branch always
-; Put codes into their place in sorted table
-buildHuffmanTree_6:
-        beq     buildHuffmanTree_7
-        tax
-        lda     bitsPointer_l-1,x
-        sta     buildHuffmanTree_ptr
-        lda     bitsPointer_h-1,x
-        sta     buildHuffmanTree_ptr+1
-        tya
-        ldy     bitsCount-1,x
-        inc     bitsCount-1,x
-        sta     (buildHuffmanTree_ptr),y
-        tay
-buildHuffmanTree_7:
-        iny
-        bne     buildHuffmanTree_9
-        inc     buildHuffmanTree_src+1
-        ldx     #MAX_BITS-1
-buildHuffmanTree_8:
-        lda     bitsCount,x
-        sta     literalCount,x
-        dex
-        bpl     buildHuffmanTree_8
-buildHuffmanTree_9:
-        lda     (buildHuffmanTree_src),y
-        bpl     buildHuffmanTree_6
-        rts
-
-; --------------------------------------------------------------------------
-; Decode next code length using temporary codes.
-
-getNextLength:
-        stx     getNextLength_index
-        dey
-        bne     getNextLength_1
-; Fetch a temporary code
-        jsr     fetchPrimaryCode
-; Temporary code 0..15: put this length
-        ldy     #1
-        cmp     #16
-        bcc     getNextLength_2
-; Temporary code 16: repeat last length 3 + getBits(2) times
-; Temporary code 17: put zero length 3 + getBits(3) times
-; Temporary code 18: put zero length 11 + getBits(7) times
-        tay
-        ldx     tempExtraBits-16,y
-        lda     tempBaseValue-16,y
-        jsr     getBits
-        cpy     #17
-        tay
-        txa                     ; lda #0
-        bcs     getNextLength_2
-getNextLength_1:
-        lda     getNextLength_last
-getNextLength_2:
-        sta     getNextLength_last
-        ldx     getNextLength_index
-        rts
-
-; --------------------------------------------------------------------------
-; Read a code basing on the primary tree.
-
-fetchPrimaryCode:
-        ldx     #PRIMARY_TREE
-;       jmp     fetchCode
-
-; --------------------------------------------------------------------------
-; Read a code from input basing on the tree specified in X.
-; Return low byte of this code in A.
-; For the literal/length tree, the C flag is set if the code is non-literal.
-
-fetchCode:
-        lda     #0
-fetchCode_1:
-        jsr     getBit
-        rol     a
-        inx
-        sec
-        sbc     bitsCount-1,x
-        bcs     fetchCode_1
-        adc     bitsCount-1,x   ; C flag is zero
-        cmp     literalCount-1,x
-        sta     fetchCode_ptr
-        ldy     bitsPointer_l-1,x
-        lda     bitsPointer_h-1,x
-        sta     fetchCode_ptr+1
-        lda     (fetchCode_ptr),y
-        rts
-
-; --------------------------------------------------------------------------
-; Decode low byte of a value (length or distance), basing on the code in A.
-; The result is the base value for this code plus some bits read from input.
-
-getValue:
-        tay
-        ldx     lengthExtraBits-1,y
-        lda     lengthBaseValue_l-1,y
-        pha
-        lda     lengthBaseValue_h-1,y
-        tay
-        pla
-;       jmp     getBits
-
-; --------------------------------------------------------------------------
-; Read X-bit number from the input and add it to A.
-; Increment Y if overflow.
-; If X > 8, read only 8 bits.
-; On return X holds number of unread bits: X = (X > 8 ? X - 8 : 0);
-
-getBits:
-        cpx     #0
-        beq     getBits_ret
-.ifpc02
-        stz     getBits_tmp
-        dec     getBits_tmp
-.else
-        pha
-        lda     #$ff
-        sta     getBits_tmp
-        pla
-.endif
-getBits_1:
-        jsr     getBit
-        bcc     getBits_2
-        sbc     getBits_tmp     ; C flag is set
-        bcc     getBits_2
-        iny
-getBits_2:
-        dex
-        beq     getBits_ret
-        asl     getBits_tmp
-        bmi     getBits_1
-getBits_ret:
-        rts
-
-; --------------------------------------------------------------------------
-; Read a single bit from input, return it in the C flag.
-
-getBit:
-        lsr     getBit_hold
-        bne     getBit_ret
-        pha
-.ifpc02
-        lda     (inputPointer)
-.else
-        sty     getBit_hold
-        ldy     #0
-        lda     (inputPointer),y
-        ldy     getBit_hold
-.endif
-        inc     inputPointer
-        bne     getBit_1
-        inc     inputPointer+1
-getBit_1:
-        ror     a       ; C flag is set
-        sta     getBit_hold
-        pla
-getBit_ret:
-        rts
-
-
-; --------------------------------------------------------------------------
-;
-; Constant data
-;
-
-        .rodata
-; --------------------------------------------------------------------------
-; Arrays for the temporary codes.
-
-; Order, in which lengths of the temporary codes are stored.
-tempCodeLengthOrder:
-        .byte   16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15
-
-; Base values.
-tempBaseValue:
-        .byte   3,3,11
-
-; Number of extra bits to read.
-tempExtraBits:
-        .byte   2,3,7
-
-; --------------------------------------------------------------------------
-; Arrays for the length and distance codes.
-
-; Base values.
-lengthBaseValue_l:
-        .byte   <3,<4,<5,<6,<7,<8,<9,<10
-        .byte   <11,<13,<15,<17,<19,<23,<27,<31
-        .byte   <35,<43,<51,<59,<67,<83,<99,<115
-        .byte   <131,<163,<195,<227,<258
-distanceBaseValue_l:
-        .byte   <1,<2,<3,<4,<5,<7,<9,<13
-        .byte   <17,<25,<33,<49,<65,<97,<129,<193
-        .byte   <257,<385,<513,<769,<1025,<1537,<2049,<3073
-        .byte   <4097,<6145,<8193,<12289,<16385,<24577
-lengthBaseValue_h:
-        .byte   >3,>4,>5,>6,>7,>8,>9,>10
-        .byte   >11,>13,>15,>17,>19,>23,>27,>31
-        .byte   >35,>43,>51,>59,>67,>83,>99,>115
-        .byte   >131,>163,>195,>227,>258
-distanceBaseValue_h:
-        .byte   >1,>2,>3,>4,>5,>7,>9,>13
-        .byte   >17,>25,>33,>49,>65,>97,>129,>193
-        .byte   >257,>385,>513,>769,>1025,>1537,>2049,>3073
-        .byte   >4097,>6145,>8193,>12289,>16385,>24577
-
-; Number of extra bits to read.
-lengthExtraBits:
-        .byte   0,0,0,0,0,0,0,0
-        .byte   1,1,1,1,2,2,2,2
-        .byte   3,3,3,3,4,4,4,4
-        .byte   5,5,5,5,0
-distanceExtraBits:
-        .byte   0,0,0,0,1,1,2,2
-        .byte   3,3,4,4,5,5,6,6
-        .byte   7,7,8,8,9,9,10,10
-        .byte   11,11,12,12,13,13
-
-
-; --------------------------------------------------------------------------
-;
-; Uninitialised data
-;
-
-        .bss
-
-; Number of literal codes of each length in the primary tree
-; (MAX_BITS bytes, overlap with literalCodeLength).
-literalCount:
-
-; --------------------------------------------------------------------------
-; Data for building the primary tree.
-
-; Lengths of literal codes.
-literalCodeLength:
-        .res    256
-; Length of the end code.
-endCodeLength:
-        .res    1
-; Lengths of length codes.
-lengthCodeLength:
-        .res    29
-
-; --------------------------------------------------------------------------
-; Data for building the distance tree.
-
-; Lengths of distance codes.
-distanceCodeLength:
-        .res    30
-; For two unused codes in the fixed trees and an 'end' mark.
-        .res    3
-
-; --------------------------------------------------------------------------
-; The Huffman trees.
-
-; Number of codes of each length.
-bitsCount:
-        .res    TREES_SIZE
-; Pointers to sorted codes of each length.
-bitsPointer_l:
-        .res    TREES_SIZE+1
-bitsPointer_h:
-        .res    TREES_SIZE
-
-; Sorted codes.
-sortedCodes:
-        .res    256+1+29+30+2
-
-
-
diff --git a/libsrc/zlib/uncompress.c b/libsrc/zlib/uncompress.c
deleted file mode 100644 (file)
index 4e449a3..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-** uncompress.c
-**
-** Piotr Fusik, 18.11.2001
-*/
-
-#include <zlib.h>
-
-int __fastcall__ uncompress (char* dest, unsigned* destLen,
-                             const char* source, unsigned sourceLen)
-{
-        unsigned len;
-        unsigned char* ptr;
-        unsigned long csum;
-        /* source[0]: Compression method and flags
-            bits 0 to 3: Compression method (must be Z_DEFLATED)
-            bits 4 to 7: Compression info (must be <= 7)
-           source[1]: Flags
-            bits 0 to 4: Check bits
-            bit 5:       Preset dictionary (not supported, sorry)
-            bits 6 to 7: Compression level
-        */
-        if ((source[0] & 0x8f) != Z_DEFLATED || source[1] & 0x20)
-                return Z_DATA_ERROR;
-        if ((((unsigned) source[0] << 8) | (unsigned char) source[1]) % 31)
-                return Z_DATA_ERROR;
-        *destLen = len = inflatemem(dest, source + 2);
-        ptr = (unsigned char*) source + sourceLen - 4;
-        csum = adler32(adler32(0L, Z_NULL, 0), dest, len);
-        if ((unsigned char) csum != ptr[3]
-         || (unsigned char) (csum >> 8) != ptr[2]
-         || (unsigned char) (csum >> 16) != ptr[1]
-         || (unsigned char) (csum >> 24) != ptr[0])
-                return Z_DATA_ERROR;
-        return Z_OK;
-}
diff --git a/samples/Makefile b/samples/Makefile
deleted file mode 100644 (file)
index 951706c..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-#
-# Makefile for cc65 samples
-#
-# This Makefile requires GNU make
-#
-
-# Enter the target system here
-SYS    = c64
-
-# Determine the path to the executables and libraries. If the samples
-# directory is part of a complete source tree, use the stuff from that
-# source tree; otherwise, use the "install" directories.
-ifeq "$(wildcard ../src)" ""
-# No source tree
-MOUS = /usr/lib/cc65/mou/$(SYS)*.mou
-TGI  = /usr/lib/cc65/tgi/$(SYS)*.tgi
-ifneq "$(wildcard /usr/local/lib/cc65)" ""
-MOUS = /usr/local/lib/cc65/mou/$(SYS)*.mou
-TGI  = /usr/local/lib/cc65/tgi/$(SYS)*.tgi
-endif
-ifdef CC65_HOME
-MOUS = $(CC65_HOME)/mou/$(SYS)*.mou
-TGI  = $(CC65_HOME)/tgi/$(SYS)*.tgi
-endif
-CLIB = --lib $(SYS).lib
-CL   = cl65
-CC   = cc65
-AS   = ca65
-LD   = ld65
-
-else
-# "samples/" is a part of a complete source tree.
-export CC65_HOME := $(abspath ..)
-MOUS = ../mou/$(SYS)*.mou
-TGI  = ../tgi/$(SYS)*.tgi
-CLIB = ../lib/$(SYS).lib
-CL   = ../bin/cl65
-CC   = ../bin/cc65
-AS   = ../bin/ca65
-LD   = ../bin/ld65
-endif
-
-# This one comes with VICE
-C1541  = c1541
-
-# --------------------------------------------------------------------------
-# System-dependent settings
-
-# The Apple machines need the start address adjusted when using TGI
-LDFLAGS_mandelbrot_apple2 = --start-addr 0x4000
-LDFLAGS_tgidemo_apple2 = --start-addr 0x4000
-LDFLAGS_mandelbrot_apple2enh = --start-addr 0x4000
-LDFLAGS_tgidemo_apple2enh = --start-addr 0x4000
-
-# The Apple ][ needs the start address adjusted for the mousetest
-LDFLAGS_mousetest_apple2 = --start-addr 0x4000
-
-# The atarixl target needs the start address adjusted when using TGI
-LDFLAGS_mandelbrot_atarixl = --start-addr 0x4000
-LDFLAGS_tgidemo_atarixl = --start-addr 0x4000
-
-# The atari target needs to reserve some memory when using TGI
-LDFLAGS_mandelbrot_atari = -D __RESERVED_MEMORY__=0x2000
-LDFLAGS_tgidemo_atari = -D __RESERVED_MEMORY__=0x2000
-
-# --------------------------------------------------------------------------
-# Generic rules
-
-%: %.c
-%: %.s
-
-.c.o:
-       @echo $<
-       @$(CC) $(CFLAGS) -Oirs --codesize 500 -T -g -t $(SYS) $<
-       @$(AS) $(<:.c=.s)
-
-.s.o:
-       @echo $<
-       @$(AS) $(AFLAGS) -t $(SYS) $<
-
-.PRECIOUS: %.o
-
-.o:
-       @$(LD) $(LDFLAGS_$(@F)_$(SYS)) -o $@ -t $(SYS) -m $@.map $^ $(CLIB)
-
-# --------------------------------------------------------------------------
-# List of executables. This list could be made target-dependent by checking
-# $(SYS).
-
-EXELIST        =       ascii           \
-               diodemo         \
-               enumdevdir      \
-               fire            \
-               gunzip65        \
-               hello           \
-               mandelbrot      \
-               mousetest       \
-               multdemo        \
-               nachtm          \
-               ovrldemo        \
-               plasma          \
-               sieve           \
-               tgidemo
-
-# --------------------------------------------------------------------------
-# Rules to make the binaries
-
-.PHONY:        all
-all:   $(EXELIST)
-
-# --------------------------------------------------------------------------
-# Overlay rules. Overlays need special ld65 configuration files.  Also, the
-# overlay file-names are shortenned to fit the Atari's 8.3-character limit.
-
-multdemo:      multidemo.o
-       @$(LD) -o $@ -C $(SYS)-overlay.cfg -m $@.map $^ $(CLIB)
-
-ovrldemo:      overlaydemo.o
-       @$(LD) -o $@ -C $(SYS)-overlay.cfg -m $@.map $^ $(CLIB)
-
-# --------------------------------------------------------------------------
-# Rule to make a CBM disk with all samples. Needs the c1541 program that comes
-# with the VICE emulator.
-
-.PHONY:        disk
-disk:  samples.d64
-
-samples.d64:   all
-       @$(C1541) -format samples,AA  d64 $@ > /dev/null
-       @for exe in $(EXELIST); do\
-           $(C1541) -attach $@ -write $$exe > /dev/null || exit $$?;\
-       done
-       @for mod in $(TGI) $(MOUS); do\
-           $(C1541) -attach $@ -write $$mod > /dev/null || exit $$?;\
-       done
-
-# --------------------------------------------------------------------------
-# Clean-up rules
-
-.PHONY:        clean
-clean:
-       $(RM) *~ *.map *.o *.s *.lbl
-
-.PHONY:        zap
-zap:   clean
-       $(RM) $(EXELIST) samples.d64
-       $(RM) multdemo.? ovrldemo.?
diff --git a/samples/README b/samples/README
deleted file mode 100644 (file)
index edd06ff..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-
-This directory contains sample programs for the cc65 compiler.
-
-Below is a short description for each of the programs together with a list of
-the supported platforms.
-
-Please note:
-
-  * The supplied makefile needs GNU make. It works out of the box on Linux
-    and similar systems. If you're using Windows, you will have to compile
-    the programs manually.
-
-  * The makefile specifies the C64 as the default target platform, because all
-    but one
-    of the programs run on this platform. When compiling for another platform,
-    you will have to change the line that specifies the target system at the
-    top of the makefile.
-
-
-List of supplied sample programs:
-
------------------------------------------------------------------------------
-Name:           ascii
-Description:    Shows the ASCII (or ATASCII, PETSCII) codes of typed
-                characters. Written and contributed by Greg King
-                <gngking@erols.com>.
-Platforms:      All platforms with conio or stdio (compile time configurable).
-
------------------------------------------------------------------------------
-Name:           diodemo
-Description:    A disc copy program written and contributed by Oliver
-                Schmidt, <ol.sc@web.de>. Supports single or dual disc copy.
-Platforms:      The program does depend on conio and dio (direct disk i/o),
-                so it does currently compile for the Atari and Apple ][
-                machines.
-
------------------------------------------------------------------------------
-Name:           enumdevdir
-Description:    Enumerates all devices, directories and files. Written and
-                contributed by Oliver Schmidt, <ol.sc@web.de>.
-Platforms:      All systems with device enumeration and directory access
-                (currently the C64, the C128 and the Apple ][).
-
------------------------------------------------------------------------------
-Name:           fire
-Description:    Another graphics demo written by groepaz/hitmen.
-Platforms:      The program is currently only running on the C64, but should
-                be portable to the C128 and CBM510 (and maybe more machines).
-
------------------------------------------------------------------------------
-Name:           gunzip65
-Description:    A gunzip utility for 6502 based machines written by Piotr
-                Fusik <fox@scene.pl>.
-Platforms:      Runs on all platforms with file I/O (currently the Atari, the
-                Apple ][ and most Commodore machines).
-
------------------------------------------------------------------------------
-Name:           hello
-Description:    A nice "Hello world" type program that uses the conio
-                console I/O library for output.
-Platforms:      Runs on all platforms that support conio, which means:
-                Apple ][, Atari, C16, C64, C128, CBM510, CBM610, PET, Plus/4
-
------------------------------------------------------------------------------
-Name:           mandelbrot
-Description:    A mandelbrot demo using integer arithmetic. The demo was
-                written by groepaz/hitmen and converted to cc65 using TGI
-                graphics by Stephan Haubenthal.
-Platforms:      Runs on all platforms that have TGI support:
-                Apple ][, C64, C128, Oric Atmos, Geos and Lynx.
-
------------------------------------------------------------------------------
-Name:           mousetest
-Description:    Tests and shows how to use the mouse.
-Platforms:      All systems with mouse and conio support:
-                C64, C128, CBM510, Atari, Apple ][
-
------------------------------------------------------------------------------
-Name:           multidemo
-Description:    Shows how to combine multiple cc65 features incl. overlays
-                and extended memory drivers. Written and contributed by
-                Oliver Schmidt, <ol.sc@web.de>.
-Platforms:      All systems with an overlay linker config, disk directory
-                access and EMD support (currently the C64, the C128,
-                the Atari and the Apple ][).
-
------------------------------------------------------------------------------
-Name:           nachtm
-Description:    Plays "Eine kleine Nachtmusik" by Wolfgang Amadeus Mozart
-Platforms:      All systems that have the Commodore SID (Sound Interface
-                Device):
-                C64, C128, CBM510, CBM610
-
------------------------------------------------------------------------------
-Name:           overlaydemo
-Description:    Shows how to load overlay files from disk. Written and
-                contributed by Oliver Schmidt, <ol.sc@web.de>.
-Platforms:      All systems with an overlay linker config (currently the C64,
-                the C128, the Atari and the Apple ][).
-
------------------------------------------------------------------------------
-Name:           plasma
-Description:    A fancy graphics demo written by groepaz/hitmen.
-Platforms:      The program needs a VIC, or a TED, so it runs on the following
-                systems:
-                C64, C128, CBM510, Plus/4
-
------------------------------------------------------------------------------
-Name:           sieve
-Description:    Implements the "Sieve of Eratosthenes" as a way to find all
-                prime numbers in a specific number interval. Often used as
-                a benchmark program.
-Platforms:      All systems with conio and clock support:
-                Atari, C16, C64, C128, CBM510, CBM610, PET, Plus/4,
-                Apple ][ (without timing due to missing clock support)
-
------------------------------------------------------------------------------
-Name:           tgidemo
-Description:    Shows some of the graphics capabilities of the "tiny graphics
-                interface".
-Platforms:      Runs on all platforms that have TGI support:
-                Apple ][, C64, C128, Oric Atmos, Geos and Lynx.
diff --git a/samples/ascii.c b/samples/ascii.c
deleted file mode 100644 (file)
index fd293e2..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/* ascii.c
-**
-** Shows the ASCII (or ATASCII, PETSCII) codes of typed characters.
-**
-** 2003-03-09, Greg King <gngking@erols.com>
-*/
-
-/* Define USE_STDIO, when you want to use the stdio functions.
-** Do not define it, when you want to use the conio functions.
-** NOTE:  stdin on some targets is line-bufferred.  You might need to type
-**        a key, then tap the return(enter)-key, in order to see each code.
-*/
-/*
-#define USE_STDIO
-*/
-
-#include <conio.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-
-#define QUIT    'Q'
-
-/* r -- row.  t -- table-column.
-*/
-static unsigned char height, width, r, t;
-static int c;
-
-#ifndef USE_STDIO
-
-# define PRINT  cprintf
-# define PUT(c) cputc((char)(c))
-
-/* conio doesn't echo typed characters.
-** So, this function does it.
-*/
-static int GET(void) {
-        PUT(c = (int)cgetc());
-        return c;
-        }
-
-#else
-
-# define PRINT  printf
-# define GET    getchar
-
-#endif
-
-int main(void) {
-
-#       ifndef USE_STDIO
-        /* conio doesn't scroll!  Avoid trouble by starting at the top
-        ** of the screen, and never going "below" the bottom of the screen.
-        */
-        clrscr();
-        r = 7;                          /* allow for prompt */
-#       endif
-
-        /* This prompt fits on the VIC-20's narrow screen.
-        */
-        PRINT("Type characters to see\r\ntheir hexadecimal code\r\nnumbers:\r\n\n");
-        screensize(&width, &height);    /* get the screen's dimensions */
-        width /= 6;                     /* get number of codes on a line */
-        cursor(true);
-        t = 0;
-        while ((c = GET()) != EOF) {
-
-#               ifndef USE_STDIO
-                if (r == height) {
-                        clrscr();
-                        t = 0;
-                        PUT(c); /* echo char. again because screen was erased */
-                        r = 1;
-                        }
-                if (c == '\n')
-                        ++r;
-#               endif
-
-                PRINT("=$%02x ", c);
-                if (c == QUIT)
-                        break;
-                if (++t == width) {
-                        PRINT("\r\n");
-                        ++r;
-                        t = 0;
-                        }
-                }
-        PRINT("\r\n");
-        return EXIT_SUCCESS;
-        }
diff --git a/samples/diodemo.c b/samples/diodemo.c
deleted file mode 100644 (file)
index 752c2f7..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 diodemo.c                                 */
-/*                                                                           */
-/*                       Direct Disk I/O Demo Program                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) Copyright 2005, Oliver Schmidt, <ol.sc@web.de>                        */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <limits.h>
-#include <conio.h>
-#include <ctype.h>
-#include <errno.h>
-#include <dio.h>
-
-
-#define MAX_CHUNKS 10 /* Maximum acceptable number of chunks */
-
-
-static unsigned char ScreenX;
-static unsigned char ScreenY;
-
-
-static void ClearLine (void)
-/* Clear the screen line the cursor is on */
-{
-    cputc ('\r');
-    cclear (ScreenX);
-}
-
-
-static unsigned char AskForDrive (const char* Name)
-/* Ask for a drive id and return it */
-{
-    unsigned char Drive = 0;
-    char          Char;
-
-    cprintf ("\r\n%s Drive ID ? ", Name);
-
-    cursor (1);
-    do {
-        Char = cgetc ();
-        if (isdigit (Char)) {
-            cputc (Char);
-            Drive = Drive * 10 + Char - '0';
-        }
-    } while (Char != CH_ENTER);
-    cursor (0);
-
-    return Drive;
-}
-
-
-static void AskForDisk (const char* Name, unsigned char Drive)
-/* Ask the user to insert a specific disk */
-{
-    ClearLine ();
-    cprintf ("\rInsert %s Disk into Drive %d !", Name, Drive);
-
-    cgetc ();
-}
-
-
-static char* AllocBuffer (unsigned int SectSize, unsigned int SectCount, unsigned int* ChunkCount)
-/* Allocate a copy buffer on the heap and return a pointer to it */
-{
-    char*         Buffer = NULL;
-    unsigned long BufferSize;
-    unsigned int  Chunks = 1;
-
-    /* Increase number of chunks resp. decrease size */
-    /* of one chunk until buffer allocation succeeds */
-    do {
-        *ChunkCount = (unsigned int) ((SectCount + Chunks - 1) / Chunks);
-        BufferSize = *ChunkCount * (unsigned long) SectSize;
-        if (BufferSize < UINT_MAX) {
-            Buffer = malloc ((size_t) BufferSize);
-        }
-    } while (Buffer == NULL && ++Chunks <= MAX_CHUNKS);
-
-    return Buffer;
-}
-
-
-int main (int argc, const char* argv[])
-{
-    unsigned char SourceId;
-    unsigned char TargetId;
-    dhandle_t     Source = NULL;
-    dhandle_t     Target = NULL;
-    unsigned int  SectSize;
-    unsigned int  SectCount;
-    char*         Buffer;
-    unsigned int  Sector;
-    unsigned int  ChunkCount;
-    unsigned int  ChunkOffset = 0;
-
-    clrscr ();
-    screensize (&ScreenX, &ScreenY);
-
-    cputs ("Floppy Disk Copy\r\n");
-    chline (16);
-    cputs ("\r\n");
-
-    /* Get source and target drive id (which may very well be identical) */
-    switch (argc) {
-      case 1:
-        SourceId = AskForDrive ("Source");
-        TargetId = AskForDrive ("Target");
-        cputs ("\r\n");
-        break;
-
-      case 2:
-        SourceId = TargetId = atoi (argv[1]);
-        break;
-
-      case 3:
-        SourceId = atoi (argv[1]);
-        TargetId = atoi (argv[2]);
-        break;
-
-      default:
-        cprintf ("\r\nToo many arguments\r\n");
-        return EXIT_FAILURE;
-    }
-
-    cputs ("\r\n");
-
-    do {
-        /* Check for single drive copy or inital iteration */
-        if (SourceId == TargetId || Source == NULL) {
-            AskForDisk ("Source", SourceId);
-        }
-
-        /* Check for initial iteration */
-        if (Source == NULL) {
-
-            /* Open source drive */
-            Source = dio_open (SourceId);
-            if (Source == NULL) {
-                cprintf ("\r\n\nError %d on opening Drive %d\r\n", (int) _oserror, SourceId);
-                return EXIT_FAILURE;
-            }
-
-            SectSize  = dio_query_sectsize (Source);
-            SectCount = dio_query_sectcount (Source);
-
-            /* Allocate buffer */
-            Buffer = AllocBuffer (SectSize, SectCount, &ChunkCount);
-            if (Buffer == NULL) {
-                cputs ("\r\n\nError on allocating Buffer\r\n");
-                return EXIT_FAILURE;
-            }
-        }
-
-        ClearLine ();
-
-        /* Read one chunk of sectors into buffer */
-        for (Sector = ChunkOffset; Sector < SectCount && (Sector - ChunkOffset) < ChunkCount; ++Sector) {
-            cprintf ("\rReading Sector %d of %d", Sector + 1, SectCount);
-
-            /* Read one sector */
-            if (dio_read (Source, Sector, Buffer + (Sector - ChunkOffset) * SectSize) != 0) {
-                cprintf ("\r\n\nError %d on reading from Drive %d\r\n", (int) _oserror, SourceId);
-                return EXIT_FAILURE;
-            }
-        }
-
-        /* Check for single drive copy or inital iteration */
-        if (TargetId == SourceId || Target == NULL) {
-            AskForDisk ("Target", TargetId);
-        }
-
-        /* Open target drive on initial iteration */
-        if (Target == NULL) {
-            Target = dio_open (TargetId);
-            if (Target == NULL) {
-                cprintf ("\r\n\nError %d on opening Drive %d\r\n", (int) _oserror, TargetId);
-                return EXIT_FAILURE;
-            }
-
-            /* Check for compatible drives */
-            if (dio_query_sectsize (Target)  != SectSize ||
-                dio_query_sectcount (Target) != SectCount) {
-                cputs ("\r\n\nFormat mismatch between Drives\r\n");
-                return EXIT_FAILURE;
-            }
-        }
-
-        ClearLine ();
-
-        /* Write one chunk of sectors from buffer */
-        for (Sector = ChunkOffset; Sector < SectCount && (Sector - ChunkOffset) < ChunkCount; ++Sector) {
-            cprintf ("\rWriting Sector %d of %d", Sector + 1, SectCount);
-
-            /* Write one sector */
-            if (dio_write (Target, Sector, Buffer + (Sector - ChunkOffset) * SectSize) != 0) {
-                cprintf ("\r\n\nError %d on writing to Drive %d\r\n", (int) _oserror, TargetId);
-                return EXIT_FAILURE;
-            }
-        }
-
-        /* Advance to next chunk */
-        ChunkOffset += ChunkCount;
-
-    } while (Sector < SectCount);
-
-    ClearLine ();
-    cprintf ("\rSuccessfully copied %d Sectors\r\n", SectCount);
-
-    free (Buffer);
-    dio_close (Source);
-    dio_close (Target);
-
-    return EXIT_SUCCESS;
-}
diff --git a/samples/enumdevdir.c b/samples/enumdevdir.c
deleted file mode 100644 (file)
index f270b43..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-** Enumerate devices, directories and files.
-**
-** 2012-10-15, Oliver Schmidt (ol.sc@web.de)
-**
-*/
-
-
-
-#include <stdio.h>
-#include <conio.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <device.h>
-#include <dirent.h>
-
-
-void printdir (char *newdir)
-{
-    char olddir[FILENAME_MAX];
-    char curdir[FILENAME_MAX];
-    DIR *dir;
-    struct dirent *ent;
-    char *subdirs = NULL;
-    unsigned dirnum = 0;
-    unsigned num;
-
-    getcwd (olddir, sizeof (olddir));
-    if (chdir (newdir)) {
-
-        /* If chdir() fails we just print the
-        ** directory name - as done for files.
-        */
-        printf ("  Dir  %s\n", newdir);
-        return;
-    }
-
-    /* We call getcwd() in order to print the
-    ** absolute pathname for a subdirectory.
-    */
-    getcwd (curdir, sizeof (curdir));
-    printf (" Dir %s:\n", curdir);
-
-    /* Calling opendir() always with "." avoids
-    ** fiddling around with pathname separators.
-    */
-    dir = opendir (".");
-    while (ent = readdir (dir)) {
-
-        if (_DE_ISREG (ent->d_type)) {
-            printf ("  File %s\n", ent->d_name);
-            continue;
-        }
-
-        /* We defer handling of subdirectories until we're done with the
-        ** current one as several targets don't support other disk i/o
-        ** while reading a directory (see cc65 readdir() doc for more).
-        */
-        if (_DE_ISDIR (ent->d_type)) {
-            subdirs = realloc (subdirs, FILENAME_MAX * (dirnum + 1));
-            strcpy (subdirs + FILENAME_MAX * dirnum++, ent->d_name);
-        }
-    }
-    closedir (dir);
-
-    for (num = 0; num < dirnum; ++num) {
-        printdir (subdirs + FILENAME_MAX * num);
-    }
-    free (subdirs);
-
-    chdir (olddir);
-}
-
-
-void main (void)
-{
-    unsigned char device;
-    char devicedir[FILENAME_MAX];
-
-    /* Calling getfirstdevice()/getnextdevice() does _not_ turn on the motor
-    ** of a drive-type device and does _not_ check for a disk in the drive.
-    */
-    device = getfirstdevice ();
-    while (device != INVALID_DEVICE) {
-        printf ("Device %d:\n", device);
-
-        /* Calling getdevicedir() _does_ check for a (formatted) disk in a
-        ** floppy-disk-type device and returns NULL if that check fails.
-        */
-        if (getdevicedir (device, devicedir, sizeof (devicedir))) {
-            printdir (devicedir);
-        } else {
-            printf (" N/A\n");
-        }
-
-        device = getnextdevice (device);
-    }
-
-    cgetc ();
-}
diff --git a/samples/fire.c b/samples/fire.c
deleted file mode 100644 (file)
index 44eb07c..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
-/*****************************************************************************\
-** fire test program for cc65.                                               **
-**                                                                           **
-** (w)2002 by groepaz/hitmen                                                 **
-**                                                                           **
-** Cleanup and porting by Ullrich von Bassewitz.                             **
-** 2004-06-08, Greg King                                                     **
-**                                                                           **
-\*****************************************************************************/
-
-
-
-/* sync page-flipping to vertical blank */
-/* #define DOVSYNC */
-
-#include <stdlib.h>
-#include <string.h> /* for memset */
-#include <time.h>
-#include <conio.h>
-
-
-
-#if defined(__C64__)
-#  define BUFFER                0x0400
-#  define SCREEN1               0xE000
-#  define SCREEN2               0xE400
-#  define CHARSET               0xE800
-#  define COLORRAM              0xD800
-#  define outb(addr,val)        (*(addr) = (val))
-#  define inb(addr)             (*(addr))
-#elif defined(__C128__)
-#  define BUFFER                0x0400
-#  define SCREEN1               0xE000
-#  define SCREEN2               0xE400
-#  define CHARSET               0xE800
-#  define COLORRAM              0xD800
-#  define outb(addr,val)        (*(addr) = (val))
-#  define inb(addr)             (*(addr))
-#elif defined(__CBM510__)
-#  define BUFFER                0xF800
-#  define SCREEN1               0xF000
-#  define SCREEN2               0xF400
-#  define CHARSET               0xE000
-#  define COLORRAM              0xD400
-#  define outb(addr,val)        pokebsys ((unsigned)(addr), val)
-#  define inb(addr)             peekbsys ((unsigned)(addr))
-#endif
-
-
-
-/* Values for the VIC address register to switch between the two pages */
-#define PAGE1                   ((SCREEN1 >> 6) & 0xF0) | ((CHARSET >> 10) & 0x0E)
-#define PAGE2                   ((SCREEN2 >> 6) & 0xF0) | ((CHARSET >> 10) & 0x0E)
-
-
-
-/* Use static local variables for speed */
-#pragma static-locals (1);
-
-
-
-#ifdef DOVSYNC
-#  define waitvsync() while ((signed char)VIC.ctrl1 >= 0)
-#else
-#  define waitvsync()
-#endif
-
-
-
-static void makechar (void)
-{
-    static const unsigned char bittab[8] = {
-        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
-    };
-    register char *font;
-    register unsigned char i, ii, b, bc;
-    unsigned char c;
-
-    gotoxy (0, 1);
-
-    for (font = (char*)CHARSET; font != (char*)(CHARSET+(1*8)); ++font) {
-        *font = 0x00;
-    }
-    for (font = (char*)(CHARSET+(64*8)); font != (char*)(CHARSET+(256*8)); ++font) {
-        *font = 0xff;
-    }
-
-
-    for (c = 0; c < 0x40; ++c) {
-        bc = 0;
-        for (i = 0; i < 8; i++){
-            b = 0;
-            for (ii = 0; ii < 8; ii++) {
-                bc += c;
-                if (bc > 0x3f) {
-                    bc = bc - 0x40;
-                    b += bittab[(ii + (i & 1)) & 0x7];
-                }
-            }
-            ((unsigned char*)CHARSET + (1 * 8)) [(c * 8) + i] = b;
-        }
-        if ((c & 0x07) == 0) {
-            cputc ('.');
-        }
-    }
-}
-
-
-
-static void fire (unsigned screenbase)
-{
-    register char* screen;
-    register char* buffer;
-    register char c;
-
-    screen = (char*) screenbase;
-    buffer = (char*) BUFFER;
-
-    while (buffer != (char*) (BUFFER + (24 * 40))) {
-        c = (buffer[40-1] + buffer[40-1] + buffer[40] + buffer[41]) / 4;
-        if (c > 2) {
-            c -= 3;
-        }
-        *screen = *buffer = c;
-        ++screen;
-        ++buffer;
-    }
-
-    screen = (char*) (screenbase + (23 * 40));
-    buffer = (char*) (BUFFER + (23 * 40));
-
-    for(; buffer != (char*)(BUFFER+(25*40)); ++screen, ++buffer) {
-        *screen = *buffer = 0x30 + (inb (&SID.noise) >> 4);
-    }
-}
-
-
-
-int main (void)
-{
-    unsigned char border;
-    unsigned char background;
-    unsigned char text;
-    unsigned char v;
-    clock_t       t;
-    unsigned long f = 0;
-    unsigned long sec;
-    unsigned      sec10;
-    unsigned long fps;
-    unsigned      fps10;
-    int           i;
-
-#if defined(__C64__)
-    unsigned char block;
-#endif
-#if defined(__C128__)
-    unsigned char block;
-    unsigned char initflag;
-    unsigned char graphflag;
-#endif
-
-    /* Noise on channel 3 for random numbers  */
-    outb (&SID.v3.freq, 0xffff);
-    outb (&SID.v3.ctrl, 0x80);
-
-    clrscr ();
-    cprintf ("Making charset, mompls");
-    makechar ();
-
-    /* Set the border and background colors */
-    border     = bordercolor (COLOR_BLACK);
-    background = bgcolor (COLOR_BLACK);
-    text       = textcolor (COLOR_BLACK);
-    clrscr ();
-
-    for(i = 0; i != 0x400; i++) {
-        *((char *)(i + BUFFER))  = 0;
-        *((char *)(i + SCREEN1)) = 0;
-        *((char *)(i + SCREEN2)) = 0;
-        outb ((char*)(i + COLORRAM), COLOR_YELLOW);
-    }
-
-#if defined(__C64__) || defined(__C128__)
-    /* Move the VIC 16K block */
-    block = inb (&CIA2.pra);
-    outb (&CIA2.pra, (block & 0xFC) | ((SCREEN1 >> 14) ^ 0x03));
-#endif
-#if defined(__C128__)
-    /* Save and change some flags, so that kernal/basic interrupt handler will
-    ** not interfere with our routine.
-    */
-    initflag = *(unsigned char*) 0xA04;
-    *(unsigned char*) 0xA04 &= 0xFE;
-    graphflag = *(unsigned char*) 0xD8;
-    *(unsigned char*) 0xD8 = 0xFF;
-#endif
-
-    /* Remember the VIC address register */
-    v = inb (&VIC.addr);
-
-    /* Run the demo until a key was hit */
-    t = clock ();
-    while (!kbhit()) {
-        /* Build page 1, then make it visible */
-        fire (SCREEN1);
-        waitvsync ();
-        outb (&VIC.addr, PAGE1);
-
-        /* Build page 2, then make it visible */
-        fire (SCREEN2);
-        waitvsync ();
-        outb (&VIC.addr, PAGE2);
-
-        /* Count frames */
-        f += 2;
-    }
-    t = clock() - t;
-
-    /* Switch back the VIC screen */
-    outb (&VIC.addr, v);
-
-#if defined(__C64__) || defined(__C128__)
-    /* Move back the VIC 16K block */
-    outb (&CIA2.pra, block);
-#endif
-#if defined(__C128__)
-    /* Restore the flags */
-    *(unsigned char*) 0xA04 = initflag;
-    *(unsigned char*) 0xD8  = graphflag;
-#endif
-
-    /* Fetch the character from the keyboard buffer and discard it */
-    (void) cgetc();
-
-    /* Reset screen colors */
-    bordercolor (border);
-    bgcolor (background);
-    textcolor (text);
-    clrscr ();
-
-    /* Calculate stats */
-    sec   = (t * 10) / CLK_TCK;
-    sec10 = sec % 10;
-    sec  /= 10;
-    fps   = (f * (CLK_TCK * 10)) / t;
-    fps10 = fps % 10;
-    fps  /= 10;
-
-    /* Output stats */
-    gotoxy (0, 0); cprintf ("time  : %lu.%us", sec, sec10);
-    gotoxy (0, 1); cprintf ("frames: %lu", f);
-    gotoxy (0, 2); cprintf ("fps   : %lu.%u", fps, fps10);
-
-    /* Wait for a key, then end */
-    cputsxy (0, 4, "Press any key when done...");
-    (void) cgetc ();
-
-    /* Done */
-    return EXIT_SUCCESS;
-}
-
-
-
diff --git a/samples/geos/bitmap-demo.c b/samples/geos/bitmap-demo.c
deleted file mode 100644 (file)
index 48daede..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-** Minimalistic GEOSLib bitmap demo program
-**
-** 2012-06-10, Oliver Schmidt (ol.sc@web.de)
-**
-** To create bitmap.c use the sp65 sprite and bitmap utility:
-** sp65 -r logo.pcx -c geos-bitmap -w bitmap.c,ident=bitmap
-**
-*/
-
-
-#include <conio.h>
-#include <geos.h>
-
-
-#include "bitmap.c"
-#if (!(bitmap_COLORS  == 2            && \
-       bitmap_WIDTH%8 == 0            && \
-       bitmap_WIDTH   <= SC_PIX_WIDTH && \
-       bitmap_HEIGHT  <= SC_PIX_HEIGHT))
-#error Incompatible Bitmap
-#endif
-
-
-struct iconpic picture = {(char*)bitmap, 0, 0, bitmap_WIDTH/8, bitmap_HEIGHT};
-
-
-void main(void)
-{
-    BitmapUp(&picture);
-    cgetc();
-}
diff --git a/samples/geos/bitmap-demores.grc b/samples/geos/bitmap-demores.grc
deleted file mode 100644 (file)
index 1ca3c07..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-HEADER APPLICATION "Bitmap Demo" "Bitmap Demo" "V1.0" {
-    author    "Oliver Schmidt"
-    info      "This is a minimalistic cc65 GEOSLib bitmap demo program written in C."
-    date      12 06 10 12 00
-}
diff --git a/samples/geos/dialog.c b/samples/geos/dialog.c
deleted file mode 100644 (file)
index 27199a4..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Note: 
-** This is just a sample piece of code that shows how to use some structs -
-** it may not even run.
-*/
-
-
-#include <geos.h>
-
-void sysopvfunc (void);
-void opvecfunc (void);
-void usrfunc (void);
-
-static const dlgBoxStr myDialog = {
-        DB_SETPOS (1, 0, 150, 0, 319),
-        DB_TXTSTR (10, 20, "test"),
-        DB_VARSTR (10, 20, &r0L),
-        DB_GETSTR (10, 20, &r0L, 9),
-        DB_SYSOPV (sysopvfunc),
-        DB_GRPHSTR (&r0L),
-        DB_GETFILES (10, 10),
-        DB_OPVEC (opvecfunc),
-        DB_USRICON (0, 0, &r0L),
-        DB_USRROUT (usrfunc),
-        DB_ICON (OK, DBI_X_0, DBI_Y_0 ),
-        DB_ICON (CANCEL, DBI_X_1, DBI_Y_1),
-        DB_END
-        };
-
-void main (void)
-{
-    DoDlgBox (&myDialog);   
-}
diff --git a/samples/geos/filesel.c b/samples/geos/filesel.c
deleted file mode 100644 (file)
index c0a591e..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-    GEOSLib example
-    
-    using DlgBoxFileSelect
-    
-    Maciej 'YTM/Elysium' Witkowiak
-    <ytm@elysium.pl>
-    
-    26.12.1999
-*/
-
-
-#include <geos.h>
-
-char fName[17] = "";
-
-void main (void)
-{
-    r0=(int)fName;
-
-    DlgBoxOk(CBOLDON "You now will be presented", "with an apps list" CPLAINTEXT);
-    DlgBoxFileSelect("", APPLICATION, fName);
-    DlgBoxOk("You've chosen:" CBOLDON, fName);
-}
diff --git a/samples/geos/fileselres.grc b/samples/geos/fileselres.grc
deleted file mode 100644 (file)
index 8301d47..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-; this is the resource file for filesel.c, a GEOS application example
-
-HEADER APPLICATION "filesel" "FileSel" "V1.0" {
-dostype USR
-author "Maciej Witkowiak"
-info "This is a C prog compiled with cc65 and GEOSLib."
-}
diff --git a/samples/geos/geosconio.c b/samples/geos/geosconio.c
deleted file mode 100644 (file)
index 963fa06..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-
-#include <geos.h>
-#include <conio.h>
-#include <mouse.h>
-
-void main(void)
-{
-    struct mouse_info info;
-    char ch;
-
-    DlgBoxOk("Now the screen will be", "cleared.");
-    
-    clrscr();
-    
-    DlgBoxOk("Now a character will be", "written at 20,20");
-    
-    gotoxy(20, 20);
-    cputc('A');
-
-    DlgBoxOk("Now a string will be", "written at 0,1");
-    
-    cputsxy(0, 1, CBOLDON "Just" COUTLINEON  "a " CITALICON "string." CPLAINTEXT );
-
-    DlgBoxOk("Write text and finish it", "with a dot.");
-
-    cursor(1);
-    do {
-        ch = cgetc();
-        cputc(ch);
-    } while (ch!='.');
-    cursor(0);
-
-    DlgBoxOk("Seems that it is all for conio.", "Let's test mouse routines.");
-    
-    mouse_init(1);
-    cputsxy(0, 2, CBOLDON "Now you can't see mouse (press any key)" CPLAINTEXT);
-    mouse_hide();
-    while (!kbhit()) { };
-    cputc(cgetc());
-
-    cputsxy(0, 3, CBOLDON "Now you see the mouse (press any key)" CPLAINTEXT);
-    mouse_show();
-    while (!kbhit()) { };
-    cputc(cgetc());
-
-    // Get the current mouse coordinates and button states and print them
-    mouse_info(&info);
-    gotoxy(0, 4);
-    cprintf("X  = %3d", info.pos.x);
-    gotoxy(0, 5);
-    cprintf("Y  = %3d", info.pos.y);
-    gotoxy(0, 6);
-    cprintf("LB = %c", (info.buttons & MOUSE_BTN_LEFT)? '1' : '0');
-    gotoxy(0, 7);
-    cprintf("RB = %c", (info.buttons & MOUSE_BTN_RIGHT)? '1' : '0');
-
-    DlgBoxOk("Bye,", "Bye.");
-}
diff --git a/samples/geos/geosconiores.grc b/samples/geos/geosconiores.grc
deleted file mode 100644 (file)
index 7529c76..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-; this is the resource file for geosconio.c, a GEOS application example
-
-HEADER APPLICATION "conio" "ConIO" "V0.1" {
-dostype USR
-author "Maciej Witkowiak"
-info "This is an example for a conio app."
-}
diff --git a/samples/geos/getid.c b/samples/geos/getid.c
deleted file mode 100644 (file)
index 4331e27..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-    This is an example program for GEOS.
-    It reads GEOS serial number and prints it on the screen.
-
-    Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
-    05.03.2004
-*/
-
-
-#include <stdlib.h>
-#include <geos.h>
-#include <conio.h>
-
-const graphicStr Table = {
-    NEWPATTERN(0), MOVEPENTO(0, 0), RECTANGLETO(320, 199), GSTR_END };
-
-void Exit(void)
-{
-    exit(0);
-}
-
-void Menu = {
-    (char)0, (char)14, (int)0, (int)28, (char)(HORIZONTAL|1),
-    CBOLDON "quit", (char)MENU_ACTION, &Exit };
-
-int main(void)
-{
-    dispBufferOn = ST_WR_FORE;
-
-    GraphicsString(&Table);
-    cputsxy(0, 3, CBOLDON "Your Serial Number is:");
-    cputhex16(GetSerialNumber());
-
-    DoMenu(&Menu);
-    MainLoop();
-
-    // will never reach this point...
-    return 0;
-}
diff --git a/samples/geos/getidres.grc b/samples/geos/getidres.grc
deleted file mode 100644 (file)
index d2d60ad..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-HEADER APPLICATION "getid" "GetId" "V1.0" {
-mode any
-dostype USR
-author "Maciej Witkowiak"
-info "This is an example."
-}
diff --git a/samples/geos/grphstr.c b/samples/geos/grphstr.c
deleted file mode 100644 (file)
index 0e36ec0..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Note:
-** This is just a sample piece of code that shows how to use some structs -
-** it may not even run.
-*/
-
-
-#include <geos.h>
-
-static const graphicStr myString = {
-        MOVEPENTO (0, 0),
-        LINETO(100, 100),
-        RECTANGLETO(50, 50),
-        NEWPATTERN(3),
-        FRAME_RECTO(50, 50),
-        PEN_X_DELTA(10),
-        PEN_Y_DELTA(10),
-        PEN_XY_DELTA(10, 10),
-        GSTR_END
-        };
-
-int main (void)
-{
-    GraphicsString(&myString);
-}
-
diff --git a/samples/geos/hello1.c b/samples/geos/hello1.c
deleted file mode 100644 (file)
index fd46d15..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-    GEOSLib example
-    
-    Hello, world example - with DBox
-    
-    Maciej 'YTM/Elysium' Witkowiak
-    <ytm@elysium.pl>
-    
-    26.12.1999
-*/
-
-
-#include <geos.h>
-
-void main (void)
-{
-    // Let's show what we've got...
-
-    DlgBoxOk(CBOLDON "Hello, world" CPLAINTEXT,
-             "This is written in C!");
-             
-    // Normal apps exit from main into system's mainloop, and app finish
-    // when user selects it from icons or menu, but here we want to exit
-    // immediately.
-    // So instead:
-    //  MainLoop();
-    // we can do:
-    //  (nothing as this is the end of main function)
-    //  exit(0);
-    //  return;
-
-    return;
-}
diff --git a/samples/geos/hello1res.grc b/samples/geos/hello1res.grc
deleted file mode 100644 (file)
index 3f9665a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-; this is the resource file for hello1.c, a GEOS application example
-
-HEADER APPLICATION "hello1" "Hello 1" "V1.0" {
-dostype USR
-author "Maciej Witkowiak"
-info "This is a C prog compiled with cc65 and GEOSLib."
-}
diff --git a/samples/geos/hello2.c b/samples/geos/hello2.c
deleted file mode 100644 (file)
index d41bdb3..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-    GEOSLib example
-    
-    Hello, world example - using graphic functions
-    
-    Maciej 'YTM/Alliance' Witkowiak
-    <ytm@friko.onet.pl>
-    
-    26.12.1999
-*/
-
-
-#include <geos.h>
-
-// Let's define the window we're operating
-struct window wholeScreen = {0, SC_PIX_HEIGHT-1, 0, SC_PIX_WIDTH-1};
-
-
-void main (void)
-{
-    // Let's show what we've got...
-
-    // Let's clear the screen - with different pattern, because apps have cleared screen upon
-    // start
-    SetPattern(0);
-    InitDrawWindow(&wholeScreen);
-    Rectangle();
-   
-    // Now some texts
-    PutString(COUTLINEON "This is compiled using cc65!" CPLAINTEXT, 20, 10);
-    PutString(CBOLDON "This is bold", 30, 10);
-    PutString(CULINEON "and this is bold and underline!", 40, 10);
-    PutString(CPLAINTEXT "This is plain text", 50, 10);
-    
-    // Wait for 5 secs...
-    // Note that this is multitasking sleep, and if there are any icons/menus onscreen,
-    // they would be usable, in this case you have only pointer usable
-    Sleep(5*50);
-             
-    // Normal apps exit from main into system's mainloop, and app finish
-    // when user selects it from icons or menu, but here we want to exit
-    // immediately.
-    // So instead:
-    //  MainLoop();
-    // we can do:
-    //  (nothing as this is the end of main function)
-    //  exit(0);
-    //  return;
-
-    return;
-}
diff --git a/samples/geos/hello2res.grc b/samples/geos/hello2res.grc
deleted file mode 100644 (file)
index d5cac9a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-; this is the resource file for hello2.c, a GEOS application example
-
-HEADER APPLICATION "hello2" "Hello 2" "V1.0" {
-dostype USR
-author "Maciej Witkowiak"
-info "This is a C prog compiled with cc65 and GEOSLib."
-}
diff --git a/samples/geos/inittab.c b/samples/geos/inittab.c
deleted file mode 100644 (file)
index c0d75c2..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Note:
-** This is just a sample piece of code that shows how to use some structs -
-** it may not even run.
-*/
-
-
-#include <geos.h>
-
-
-static const void myTab = {
-        0xd020, (char)2,
-        (char)0, (char)2,
-        0x4000, (char)5,
-        (char)0, (char)1, (char)2, (char)3, (char)4,
-        0x0000
-        };
-
-int main (void)
-{
-    InitRam(&myTab);
-}
-
diff --git a/samples/geos/logo.pcx b/samples/geos/logo.pcx
deleted file mode 100644 (file)
index 848cae7..0000000
Binary files a/samples/geos/logo.pcx and /dev/null differ
diff --git a/samples/geos/menu.c b/samples/geos/menu.c
deleted file mode 100644 (file)
index 54f72c4..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Note:
-** This is just a sample piece of code that shows how to use some structs -
-** it may not even run.
-*/
-
-
-#include <geos.h>
-
-
-/* prototypes are necessary */
-
-void smenu1 (void);
-void smenu2 (void);
-void smenu3 (void);
-
-typedef void menuString;
-
-/* you can declare a menu using cc65 non-ANSI extensions */
-
-static const menuString subMenu1 = {
-        (char)0, (char)(3*15),
-        (unsigned)0, (unsigned)50,
-        (char)(3 | VERTICAL),
-        "subitem1", (char)MENU_ACTION, (unsigned)smenu1,
-        "subitem2", (char)MENU_ACTION, (unsigned)smenu2,
-        "subitem3", (char)MENU_ACTION, (unsigned)smenu3
- };
-
-/* or by using initialized structures */
-
-static struct menu subMenu2 = {
-        { 0, 3*15, 0, 50 },
-        3 | VERTICAL,
-          {
-            { "subitem1", MENU_ACTION, smenu1 },
-            { "subitem2", MENU_ACTION, smenu2 },
-            { "subitem3", MENU_ACTION, smenu3 },
-          }
- };
-
-void main (void)
-{
-    DoMenu(&subMenu1);
-    DoMenu(&subMenu2);
-}
diff --git a/samples/geos/overlay-demo.c b/samples/geos/overlay-demo.c
deleted file mode 100644 (file)
index a37f6bd..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
-** Minimalistic GEOSLib overlay demo program
-**
-** 2012-01-01, Oliver Schmidt (ol.sc@web.de)
-**
-*/
-
-
-#include <stdio.h>
-#include <geos.h>
-#include "overlay-demores.h"
-
-
-/* Functions resident in an overlay can call back functions resident in the
-** main program at any time without any precautions. The function show() is
-** an example for such a function resident in the main program.
-*/
-void show(char *name)
-{
-    char line1[40];
-
-    sprintf(line1, CBOLDON "Overlay Demo - Overlay %s" CPLAINTEXT, name);
-    DlgBoxOk(line1, "Click OK to return to Main.");
-}
-
-/* In a real-world overlay program one would probably not use a #pragma but
-** rather place the all the code of certain source files into the overlay by
-** compiling them with --code-name OVERLAY1.
-*/
-#pragma code-name(push, "OVERLAY1");
-
-void foo(void)
-{
-    /* Functions resident in an overlay can access all program variables and
-    ** constants at any time without any precautions because those are never
-    ** placed in overlays. The string constant "One" is an example for such 
-    ** a constant resident in the main program.
-    */
-    show("One");
-}
-
-#pragma code-name(pop);
-
-
-#pragma code-name(push, "OVERLAY2");
-
-void bar(void)
-{
-    show("Two");
-}
-
-#pragma code-name(pop);
-
-
-#pragma code-name(push, "OVERLAY3");
-
-void foobar (void)
-{
-    show("Three");
-}
-
-#pragma code-name(pop);
-
-
-void main(int /*argc*/, char *argv[])
-{
-    if (OpenRecordFile(argv[0])) {
-        _poserror("OpenRecordFile");
-        return;
-    }
-
-    DlgBoxOk(CBOLDON "Overlay Demo - Main" CPLAINTEXT,
-             "Click OK to call Overlay One.");
-
-    if (PointRecord(1)) {
-        _poserror("PointRecord.1");
-        return;
-    }
-
-    /* The macro definitions OVERLAY_ADDR and OVERLAY_SIZE were generated in
-    ** overlay-demores.h by grc65. They contain the overlay area address and
-    ** size specific to a certain program.
-    */
-    if (ReadRecord(OVERLAY_ADDR, OVERLAY_SIZE)) {
-        _poserror("ReadRecord.1");
-        return;
-    }
-
-    /* The linker makes sure that the call to foo() ends up at the right mem
-    ** addr. However, it's up to user to make sure that the -- right -- overlay
-    ** actually is loaded before making the call.
-    */
-    foo();
-
-    DlgBoxOk(CBOLDON "Overlay Demo - Main" CPLAINTEXT,
-             "Click OK to call Overlay Two.");
-
-    if (PointRecord(2)) {
-        _poserror("PointRecord.2");
-        return;
-    }
-
-    /* Replacing one overlay with another one can only happen from the main
-    ** program. This implies that an overlay can never load another overlay.
-    */
-    if (ReadRecord(OVERLAY_ADDR, OVERLAY_SIZE)) {
-        _poserror("ReadRecord.2");
-        return;
-    }
-
-    bar();
-
-    DlgBoxOk(CBOLDON "Overlay Demo - Main" CPLAINTEXT,
-             "Click OK to call Overlay Three.");
-
-    if (PointRecord(3)) {
-        _poserror("PointRecord.3");
-        return;
-    }
-
-    if (ReadRecord(OVERLAY_ADDR, OVERLAY_SIZE)) {
-        _poserror("ReadRecord.3");
-        return;
-    }
-
-    foobar();
-
-    if (CloseRecordFile()) {
-        _poserror("CloseRecordFile");
-        return;
-    }
-}
diff --git a/samples/geos/overlay-demores.grc b/samples/geos/overlay-demores.grc
deleted file mode 100644 (file)
index 6bb71e2..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-HEADER APPLICATION "Overlay Demo" "Overlay Demo" "V1.0" {
-    author    "Oliver Schmidt"
-    info      "This is a minimalistic cc65 GEOSLib overlay demo program written in C."
-    date      12 01 01 12 00
-    structure VLIR
-}
-
-MEMORY {
-    overlaysize 0x1000
-    overlaynums 0 1 2 3
-}
diff --git a/samples/geos/rmvprot.c b/samples/geos/rmvprot.c
deleted file mode 100644 (file)
index 4f8798f..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
-    GEOSLib example
-    
-    This small application removes GEOS disk write protection tag.
-    e.g. boot disk is always protected after boot-up
-    
-    Maciej 'YTM/Elysium' Witkowiak
-    <ytm@elysium.pl>
-    
-    21.03.2000
-*/
-
-
-#include <geos.h>
-
-char diskName[17] = "";
-
-static const graphicStr clearScreen = {
-        MOVEPENTO(0, 0),
-        NEWPATTERN(2),
-        RECTANGLETO(SC_PIX_WIDTH-1, SC_PIX_HEIGHT-1),
-        GSTR_END
-};
-
-static const dlgBoxStr mainDialog = {
-        DB_DEFPOS(1),
-        DB_TXTSTR(TXT_LN_X, TXT_LN_2_Y,
-                  CBOLDON "Remove protection on:" CPLAINTEXT),
-        DB_TXTSTR(TXT_LN_X, TXT_LN_3_Y, diskName),
-        DB_ICON(OK, DBI_X_0, DBI_Y_2),
-        DB_ICON(DISK, DBI_X_1, DBI_Y_2),
-        DB_ICON(CANCEL, DBI_X_2, DBI_Y_2),
-        DB_END
-};
-
-static const dlgBoxStr changeDiskDlg = {
-        DB_DEFPOS(1),
-        DB_TXTSTR(TXT_LN_X, TXT_LN_2_Y, CBOLDON "Insert new disk"),
-        DB_TXTSTR(TXT_LN_X, TXT_LN_3_Y, "into drive." CPLAINTEXT),
-        DB_ICON(OK, DBI_X_0, DBI_Y_2),
-        DB_ICON(CANCEL, DBI_X_2, DBI_Y_2),
-        DB_END
-};
-
-static const dlgBoxStr errorDialog = {
-        DB_DEFPOS(1),
-        DB_TXTSTR(TXT_LN_X, TXT_LN_2_Y, CBOLDON "Error happened..."),
-        DB_TXTSTR(TXT_LN_X, TXT_LN_3_Y, "exiting..." CPLAINTEXT),
-        DB_ICON(OK, DBI_X_0, DBI_Y_2),
-        DB_END
-};
-
-void Error(void)
-{
-    DoDlgBox(&errorDialog);
-    EnterDeskTop();
-}
-
-void main(void)
-{
-    // Here we clear the screen. Not really needed anyway...
-    GraphicsString(&clearScreen);
-        
-    // Get the name of current disk to show it in dialog box
-    GetPtrCurDkNm(diskName);
-
-    while (1) {
-        switch (DoDlgBox(&mainDialog)) {
-
-        // What's the result of dialog box? which icon was pressed?
-        case OK:
-            if (GetDirHead())
-                Error();
-            curDirHead[OFF_GS_DTYPE] = 0;
-            if (PutDirHead())
-                Error();
-            break;
-        case DISK:
-            DoDlgBox(&changeDiskDlg);
-            GetPtrCurDkNm(diskName);
-            break;
-        default:    // CANCEL is the third option
-            return;
-            break;
-        }
-    }
-}
diff --git a/samples/geos/rmvprotres.grc b/samples/geos/rmvprotres.grc
deleted file mode 100644 (file)
index 72e9e8f..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-; this is the resource file for rmvprot.c, a GEOS application example
-
-HEADER APPLICATION "rmvprot" "RmvProt" "V1.0" {
-dostype USR
-author "Maciej Witkowiak"
-info "This will remove the write protection from your bootdisk."
-}
diff --git a/samples/geos/vector-demo.c b/samples/geos/vector-demo.c
deleted file mode 100644 (file)
index cdf6f5a..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-#include <geos.h>
-#include <conio.h>
-#include <stdlib.h>
-
-unsigned char x,y;
-
-void_func oldMouseVector, oldKeyVector;
-
-void foo1 (void)
-{
-    // do something on mouse press/release
-    gotoxy(x,y);
-    ++x;
-    cputc('A');
-
-    // call previous routine
-    oldMouseVector();
-}
-
-void foo2 (void)
-{
-    // do something on key press/release
-    gotoxy(x,y);
-    ++y;
-    cputc('B');
-
-    // call previous routine
-    oldKeyVector();
-}
-
-void hook_into_system(void)
-{
-    // hook into system vectors - preserve old value
-    oldMouseVector = mouseVector;
-    mouseVector = foo1;
-    oldKeyVector = keyVector;
-    keyVector = foo2;
-}
-
-void remove_hooks(void)
-{
-    mouseVector = oldMouseVector;
-    keyVector = oldKeyVector;
-}
-
-int main(void)
-{
-    x = 0;
-    y = 0;
-
-    // To make cc65 do something for you before exiting you might register
-    // a function to be called using atexit call. #include <stdlib.h> then and
-    // write:
-    atexit(&remove_hooks);
-
-    clrscr();
-    cputsxy(0,1, CBOLDON "Just" COUTLINEON  "a " CITALICON "string." CPLAINTEXT );
-
-    hook_into_system();
-
-    // This program will loop forever though
-    MainLoop();
-
-    // If not using atexit() you have to remember about restoring system vectors
-    // right before exiting your application. Otherwise the system will most
-    // likely crash.
-    // remove_hooks();
-
-    return 0;
-}
diff --git a/samples/geos/vector-demores.grc b/samples/geos/vector-demores.grc
deleted file mode 100644 (file)
index a76b51d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-; this is the resource file for vector-demo.c, a GEOS application example
-
-HEADER APPLICATION "vectordemo" "VectorDemo" "V1.0" {
-dostype USR
-author "Maciej Witkowiak"
-info "This is a C prog compiled with cc65 and GEOSLib."
-}
diff --git a/samples/geos/yesno.c b/samples/geos/yesno.c
deleted file mode 100644 (file)
index ff98d0a..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-   GEOSLib example
-
-   example of using DlgBoxYesNo, DlgBoxOkCancel and DlgBoxOk functions
-
-   Maciej 'YTM/Elysium' Witkowiak
-   <ytm@elysium.pl>
-
-   26.12.1999
- */
-
-
-#include <geos.h>
-
-void main(void)
-{
-    do {
-        if (DlgBoxYesNo("Are you female?", "(don't lie ;-)") == YES) {
-            DlgBoxOk("You claim to be woman!", "You wanna dance?");
-        } else {
-            DlgBoxOk("Ergh, another man...", "Let's go for a beer.");
-        };
-    } while (DlgBoxOkCancel("Do you want to try again?", "") == OK);
-}
diff --git a/samples/geos/yesnores.grc b/samples/geos/yesnores.grc
deleted file mode 100644 (file)
index 767a046..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-; this is the resource file for yesno.c, a GEOS application example
-
-HEADER APPLICATION "yesno" "YesNo" "V1.0" {
-dostype USR
-author "Maciej Witkowiak"
-info "This is a C prog compiled with cc65 and GEOSLib."
-}
diff --git a/samples/gunzip65.c b/samples/gunzip65.c
deleted file mode 100644 (file)
index 2ad0294..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
-** gunzip65 - a gunzip utility for 6502-based machines.
-**
-** Piotr Fusik <fox@scene.pl>
-**
-** This should be considered as a test of my zlib-compatible library
-** rather than a real application.
-** It's not user-friendly, fault-tolerant, whatever.
-** However, it really works for real GZIP files, provided they are small
-** enough to fit in buffer[] (after decompression!).
-*/
-
-#include <stdio.h>
-#include <string.h>
-#include <zlib.h>
-
-#ifndef __CC65__
-/*
-** Emulate inflatemem() if using original zlib.
-** As you can see, this program is quite portable.
-*/
-unsigned inflatemem(char* dest, const char* source)
-{
-        z_stream stream;
-
-        stream.next_in = (Bytef*) source;
-        stream.avail_in = 65535;
-
-        stream.next_out = dest;
-        stream.avail_out = 65535;
-
-        stream.zalloc = (alloc_func) 0;
-        stream.zfree = (free_func) 0;
-
-        inflateInit2(&stream, -MAX_WBITS);
-        inflate(&stream, Z_FINISH);
-        inflateEnd(&stream);
-
-        return stream.total_out;
-}
-#endif /* __CC65__ */
-
-/*
-** Structure of a GZIP file:
-**
-** 1. GZIP header:
-**    Offset 0: Signature (2 bytes: 0x1f, 0x8b)
-**    Offset 2: Compression method (1 byte: 8 == "deflate")
-**    Offset 3: Flags (1 byte: see below)
-**    Offset 4: File date and time (4 bytes)
-**    Offset 8: Extra flags (1 byte)
-**    Offset 9: Target OS (1 byte: DOS, Amiga, Unix, etc.)
-**    if (flags & FEXTRA) { 2 bytes of length, then length bytes }
-**    if (flags & FNAME) { ASCIIZ filename }
-**    if (flags & FCOMMENT) { ASCIIZ comment }
-**    if (flags & FHCRC) { 2 bytes of CRC }
-**
-** 2. Deflate compressed data.
-**
-** 3. GZIP trailer:
-**    Offset 0: CRC-32 (4 bytes)
-**    Offset 4: uncompressed file length (4 bytes)
-*/
-
-/* Flags in the GZIP header. */
-#define FTEXT     1     /* Extra text */
-#define FHCRC     2     /* Header CRC */
-#define FEXTRA    4     /* Extra field */
-#define FNAME     8     /* File name */
-#define FCOMMENT 16     /* File comment */
-
-/*
-** We read whole GZIP file into this buffer.
-** Then we use this buffer for the decompressed data.
-*/
-static unsigned char buffer[26000];
-
-/*
-** Get a 16-bit little-endian unsigned number, using unsigned char* p.
-** On many machines this could be (*(unsigned short*) p),
-** but I really like portability. :-)
-*/
-#define GET_WORD(p) (*(p) + ((unsigned) (p)[1] << 8))
-
-/* Likewise, for a 32-bit number. */
-#define GET_LONG(p) (GET_WORD(p) + ((unsigned long) GET_WORD(p + 2) << 16))
-
-/*
-** Uncompress a GZIP file.
-** On entry, buffer[] should contain the whole GZIP file contents,
-** and the argument complen should be equal to the length of the GZIP file.
-** On return, buffer[] contains the uncompressed data, and the returned
-** value is the length of the uncompressed data.
-*/
-unsigned uncompress_buffer(unsigned complen)
-{
-        unsigned char* ptr;
-        unsigned long crc;
-        unsigned long unclen;
-        void* ptr2;
-        unsigned unclen2;
-
-        /* check GZIP signature */
-        if (buffer[0] != 0x1f || buffer[1] != 0x8b) {
-                puts("Not GZIP format");
-                return 0;
-        }
-
-        /* check compression method (it is always (?) "deflate") */
-        if (buffer[2] != 8) {
-                puts("Unsupported compression method");
-                return 0;
-        }
-
-        /* get CRC from GZIP trailer */
-        crc = GET_LONG(buffer + complen - 8);
-
-        /* get uncompressed length from GZIP trailer */
-        unclen = GET_LONG(buffer + complen - 4);
-        if (unclen > sizeof(buffer)) {
-                puts("Uncompressed size too big");
-                return 0;
-        }
-
-        /* skip extra field, file name, comment and crc */
-        ptr = buffer + 10;
-        if (buffer[3] & FEXTRA)
-                ptr = buffer + 12 + GET_WORD(buffer + 10);
-        if (buffer[3] & FNAME)
-                while (*ptr++ != 0);
-        if (buffer[3] & FCOMMENT)
-                while (*ptr++ != 0);
-        if (buffer[3] & FHCRC)
-                ptr += 2;
-
-        /*
-        ** calculate length of raw "deflate" data
-        ** (without the GZIP header and 8-byte trailer)
-        */
-        complen -= (ptr - buffer) + 8;
-
-        /*
-        ** We will move the compressed data to the end of buffer[].
-        ** Thus the compressed data and the decompressed data (written from
-        ** the beginning of buffer[]) may overlap, as long as the decompressed
-        ** data doesn't go further than unread compressed data.
-        ** ptr2 points to the beginning of compressed data at the end
-        ** of buffer[].
-        */
-        ptr2 = buffer + sizeof(buffer) - complen;
-        /* move the compressed data to end of buffer[] */
-        memmove(ptr2, ptr, complen);
-
-        /* uncompress */
-        puts("Inflating...");
-        unclen2 = inflatemem(buffer, ptr2);
-
-        /* verify uncompressed length */
-        if (unclen2 != (unsigned) unclen) {
-                puts("Uncompressed size does not match");
-                return 0;
-        }
-
-        /* verify CRC */
-        puts("Calculating CRC...");
-        if (crc32(crc32(0L, Z_NULL, 0), buffer, unclen2) != crc) {
-                puts("CRC mismatch");
-                return 0;
-        }
-
-        /* return number of uncompressed bytes */
-        return unclen2;
-}
-
-/*
-** Get a filename from standard input.
-*/
-char* get_fname(void)
-{
-        static char filename[100];
-        unsigned len;
-        fgets(filename, sizeof(filename), stdin);
-        len = strlen(filename);
-        if (len >= 1 && filename[len - 1] == '\n')
-                filename[len - 1] = '\0';
-        return filename;
-}
-
-int main(void)
-{
-        FILE* fp;
-        unsigned length;
-
-        /* read GZIP file */
-        puts("GZIP file name:");
-        fp = fopen(get_fname(), "rb");
-        if (!fp) {
-                puts("Can't open GZIP file");
-                return 1;
-        }
-        length = fread(buffer, 1, sizeof(buffer), fp);
-        fclose(fp);
-        if (length == sizeof(buffer)) {
-                puts("File is too long");
-                return 1;
-        }
-
-        /* decompress */
-        length = uncompress_buffer(length);
-        if (length == 0)
-                return 1;
-
-        /* write uncompressed file */
-        puts("Uncompressed file name:");
-        fp = fopen(get_fname(), "wb");
-        if (!fp) {
-                puts("Can't create output file");
-                return 1;
-        }
-        if (fwrite(buffer, 1, length, fp) != length) {
-                puts("Error while writing output file");
-                return 1;
-        }
-        fclose(fp);
-
-        puts("Ok.");
-        return 0;
-}
diff --git a/samples/hello.c b/samples/hello.c
deleted file mode 100644 (file)
index 78c28af..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-** Fancy hello world program using cc65.
-**
-** Ullrich von Bassewitz (ullrich@von-bassewitz.de)
-**
-*/
-
-
-
-#include <stdlib.h>
-#include <string.h>
-#include <conio.h>
-#include <joystick.h>
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-static const char Text [] = "Hello world!";
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int main (void)
-{
-    unsigned char XSize, YSize;
-
-    /* Set screen colors, hide the cursor */
-    textcolor (COLOR_WHITE);
-    bordercolor (COLOR_BLACK);
-    bgcolor (COLOR_BLACK);
-    cursor (0);
-
-    /* Clear the screen, put cursor in upper left corner */
-    clrscr ();
-
-    /* Ask for the screen size */
-    screensize (&XSize, &YSize);
-
-    /* Draw a border around the screen */
-
-    /* Top line */
-    cputc (CH_ULCORNER);
-    chline (XSize - 2);
-    cputc (CH_URCORNER);
-
-    /* Vertical line, left side */
-    cvlinexy (0, 1, YSize - 2);
-
-    /* Bottom line */
-    cputc (CH_LLCORNER);
-    chline (XSize - 2);
-    cputc (CH_LRCORNER);
-
-    /* Vertical line, right side */
-    cvlinexy (XSize - 1, 1, YSize - 2);
-
-    /* Write the greeting in the mid of the screen */
-    gotoxy ((XSize - strlen (Text)) / 2, YSize / 2);
-    cprintf ("%s", Text);
-
-#if defined(__NES__) || defined(__PCE__)
-
-    /* Wait for the user to press a button */
-    joy_install (joy_static_stddrv);
-    while (!joy_read (JOY_1)) ;
-    joy_uninstall ();
-
-#else
-
-    /* Wait for the user to press a key */
-    (void) cgetc ();
-
-#endif
-
-    /* Clear the screen again */
-    clrscr ();
-
-    /* Done */
-    return EXIT_SUCCESS;
-}
diff --git a/samples/mandelbrot.c b/samples/mandelbrot.c
deleted file mode 100644 (file)
index 5d3d661..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/*****************************************************************************\
-** mandelbrot sample program for cc65.                                       **
-**                                                                           **
-** (w) 2002 by groepaz/hitmen, TGI support by Stefan Haubenthal              **
-\*****************************************************************************/
-
-
-
-#include <stdlib.h>
-#include <time.h>
-#include <conio.h>
-#include <tgi.h>
-
-
-
-/* Graphics definitions */
-#define SCREEN_X        (tgi_getxres())
-#define SCREEN_Y        (tgi_getyres())
-#define MAXCOL          (tgi_getcolorcount())
-
-#define maxiterations   32
-#define fpshift         (10)
-#define tofp(_x)        ((_x)<<fpshift)
-#define fromfp(_x)      ((_x)>>fpshift)
-#define fpabs(_x)       (abs(_x))
-
-#define mulfp(_a,_b)    ((((signed long)_a)*(_b))>>fpshift)
-#define divfp(_a,_b)    ((((signed long)_a)<<fpshift)/(_b))
-
-/* Workaround missing clock stuff */
-#ifdef __APPLE2__
-#  define clock()       0
-#  define CLK_TCK       1
-#endif
-
-/* Use dynamically loaded driver by default */
-#ifndef DYN_DRV
-#  define DYN_DRV       1
-#endif
-
-/* Use static local variables for speed */
-#pragma static-locals (1);
-
-
-
-void mandelbrot (signed short x1, signed short y1, signed short x2,
-                 signed short y2)
-{
-    register unsigned char count;
-    register signed short r, r1, i;
-    register signed short xs, ys, xx, yy;
-    register signed short x, y;
-
-    /* calc stepwidth */
-    xs = ((x2 - x1) / (SCREEN_X));
-    ys = ((y2 - y1) / (SCREEN_Y));
-
-    yy = y1;
-    for (y = 0; y < (SCREEN_Y); y++) {
-        yy += ys;
-        xx = x1;
-        for (x = 0; x < (SCREEN_X); x++) {
-            xx += xs;
-            /* do iterations */
-            r = 0;
-            i = 0;
-            for (count = 0; (count < maxiterations) &&
-                 (fpabs (r) < tofp (2)) && (fpabs (i) < tofp (2));
-                 ++count) {
-                r1 = (mulfp (r, r) - mulfp (i, i)) + xx;
-                /* i = (mulfp(mulfp(r,i),tofp(2)))+yy; */
-                i = (((signed long) r * i) >> (fpshift - 1)) + yy;
-                r = r1;
-            }
-            if (count == maxiterations) {
-                tgi_setcolor (0);
-            } else {
-                if (MAXCOL == 2)
-                    tgi_setcolor (1);
-                else
-                    tgi_setcolor (count % MAXCOL);
-            }
-            /* set pixel */
-            tgi_setpixel (x, y);
-        }
-    }
-}
-
-int main (void)
-{
-    clock_t t;
-    unsigned long sec;
-    unsigned sec10;
-    unsigned char err;
-
-    clrscr ();
-
-#if DYN_DRV
-    /* Load the graphics driver */
-    cprintf ("initializing... mompls\r\n");
-    tgi_load_driver (tgi_stddrv);
-#else
-    /* Install the graphics driver */
-    tgi_install (tgi_static_stddrv);
-#endif
-    err = tgi_geterror ();
-    if (err  != TGI_ERR_OK) {
-        cprintf ("Error #%d initializing graphics.\r\n%s\r\n",
-                 err, tgi_geterrormsg (err));
-        exit (EXIT_FAILURE);
-    };
-    cprintf ("ok.\n\r");
-
-    /* Initialize graphics */
-    tgi_init ();
-    tgi_clear ();
-
-    t = clock ();
-
-    /* calc mandelbrot set */
-    mandelbrot (tofp (-2), tofp (-2), tofp (2), tofp (2));
-
-    t = clock () - t;
-
-    /* Fetch the character from the keyboard buffer and discard it */
-    (void) cgetc ();
-
-    /* shut down gfx mode and return to textmode */
-    tgi_done ();
-
-    /* Calculate stats */
-    sec = (t * 10) / CLK_TCK;
-    sec10 = sec % 10;
-    sec /= 10;
-
-    /* Output stats */
-    cprintf ("time  : %lu.%us\n\r", sec, sec10);
-
-    /* Wait for a key, then end */
-    cputs ("Press any key when done...\n\r");
-    (void) cgetc ();
-
-    /* Done */
-    return EXIT_SUCCESS;
-}
diff --git a/samples/mousetest.c b/samples/mousetest.c
deleted file mode 100644 (file)
index 7d94096..0000000
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
-** Test/demo program for mouse usage.
-** Will work for the C64/C128/CBM510/Atari/Apple2.
-**
-** 2001-09-13, Ullrich von Bassewitz
-** 2013-09-05, Greg King
-**
-*/
-
-
-
-#include <stdbool.h>
-#include <stdlib.h>
-#include <string.h>
-#include <mouse.h>
-#include <pen.h>
-#include <conio.h>
-#include <ctype.h>
-#include <dbg.h>
-
-#define max(a,b)  (((a) > (b)) ? (a) : (b))
-#define min(a,b)  (((a) < (b)) ? (a) : (b))
-
-
-
-#ifdef MOUSE_DRIVER
-
-/* A statically linked driver was named on the compiler's command line.
-** Make sure that it is used instead of a dynamic one.
-*/
-#  undef DYN_DRV
-#  define DYN_DRV       0
-#else
-
-/* Use a dynamically loaded driver, by default. */
-#  ifndef DYN_DRV
-#    define DYN_DRV     1
-#  endif
-#endif
-
-
-
-#if defined(__C64__) || defined(__C128__) || defined(__CBM510__)
-
-/* Addresses of data for sprite 0 */
-#if defined(__C64__)
-#  define SPRITE0_DATA  ((unsigned char[64])0x0340)
-#  define SPRITE0_PTR   ((unsigned char *)0x07F8)
-#elif defined(__C128__)
-#  define SPRITE0_DATA  ((unsigned char[64])0x0E00)
-#  define SPRITE0_PTR   ((unsigned char *)0x07F8)
-#elif defined(__CBM510__)
-#  define SPRITE0_DATA  ((unsigned char[64])0xF400)
-#  define SPRITE0_PTR   ((unsigned char *)0xF3F8)
-#endif
-
-/* The mouse sprite (an arrow) */
-static const unsigned char MouseSprite[64] = {
-    0xFE, 0x00, 0x00,
-    0xFC, 0x00, 0x00,
-    0xF8, 0x00, 0x00,
-    0xFC, 0x00, 0x00,
-    0xDE, 0x00, 0x00,
-    0x8F, 0x00, 0x00,
-    0x07, 0x80, 0x00,
-    0x03, 0xC0, 0x00,
-    0x01, 0xE0, 0x00,
-    0x00, 0xF0, 0x00,
-    0x00, 0x78, 0x00,
-    0x00, 0x38, 0x00,
-    0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00
-};
-#endif
-
-
-
-static void __fastcall__ CheckError (const char* S, unsigned char Error)
-{
-    if (Error != MOUSE_ERR_OK) {
-        cprintf ("\n%s: %s(%u)\r\n", S, mouse_geterrormsg (Error), Error);
-
-        /* Wait for a key-press, so that some platforms can show the error
-        ** message before they remove the current screen.
-        */
-        cgetc();
-        exit (EXIT_FAILURE);
-    }
-}
-
-
-
-#if DYN_DRV
-
-/* Points to the dynamic driver's name. */
-static const char *mouse_name;
-
-
-
-static void DoWarning (void)
-/* Warn the user that a driver is needed for this program. */
-{
-    cprintf ("Warning: This program needs\r\n"
-             "the driver with the name\r\n"
-             "    %s\r\n"
-             "on a disk! Press 'y' if you have it;\r\n"
-             "or, any other key to exit.\r\n", mouse_stddrv);
-    if (tolower (cgetc ()) != 'y') {
-        exit (EXIT_SUCCESS);
-    }
-    cprintf ("OK. Please wait patiently...\r\n");
-}
-#endif
-
-
-
-static void __fastcall__ ShowState (unsigned char Jailed, unsigned char Invisible)
-/* Display jail and cursor states. */
-{
-    cclearxy (0, 7, 32);
-    gotoxy (0, 7);
-    cprintf ("Pointer is %svisible%s.", Invisible? "in" : "", Jailed? " and jailed" : "");
-}
-
-
-
-#if DYN_DRV
-int main (int argc, char *argv[])
-#else
-int main (void)
-#endif
-{
-    struct mouse_info info;
-    struct mouse_box full_box, small_box;
-    unsigned char width, height;
-    char C;
-    bool Invisible = true, Done = false, Jailed = false;
-
-    /* Initialize the debugger */
-    DbgInit (0);
-
-    /* Set dark-on-light colors.  Clear the screen. */
-#ifdef __CBM__
-    (void) bordercolor (COLOR_GRAY2);
-    (void) bgcolor (COLOR_WHITE);
-    (void) textcolor (COLOR_GRAY1);
-#else
-    (void) bordercolor (COLOR_BLUE);
-    (void) bgcolor (COLOR_WHITE);
-    (void) textcolor (COLOR_BLACK);
-#endif
-    cursor (0);
-    clrscr ();
-
-    /* The pointer should be created before the driver is installed,
-    ** in case a lightpen driver needs it during calibration.
-    */
-
-#if defined(__C64__) || defined(__C128__) || defined(__CBM510__)
-    /* Copy the sprite data */
-    memcpy ((void*) SPRITE0_DATA, MouseSprite, sizeof (MouseSprite));
-
-    /* Set the VIC-II sprite pointer. */
-    *SPRITE0_PTR = ((unsigned) SPRITE0_DATA & 0x3FFF) / sizeof SPRITE0_DATA;
-
-    /* Set the color of sprite 0 */
-#  ifdef __CBM510__
-    pokebsys ((unsigned) &VIC.spr0_color, COLOR_BLACK);
-#  else
-    VIC.spr0_color = COLOR_BLACK;
-#  endif
-#endif
-
-    /* If a lightpen driver is installed, then it can get a calibration value
-    ** from this file (if it exists).  Or, the user can adjust the pen; and,
-    ** the value will be put into this file, for the next time.
-    ** (Other drivers will ignore this.)
-    */
-#if defined(__C64__) || defined(__C128__) || defined(__CBM510__)
-    pen_adjust ("pen.dat");
-#endif
-
-#if DYN_DRV
-    /* If a dynamically loadable driver is named on the command line,
-    ** then use that driver instead of the standard one.
-    */
-    if (argc > 1) {
-        mouse_name = argv[1];
-    } else {
-        /* Output a warning about the standard driver that is needed. */
-        DoWarning ();
-        mouse_name = mouse_stddrv;
-    }
-
-    /* Load and install the driver. */
-    CheckError ("mouse_load_driver",
-                mouse_load_driver (&mouse_def_callbacks, mouse_name));
-#else
-    /* Install the driver. */
-    CheckError ("mouse_install",
-                mouse_install (&mouse_def_callbacks,
-#  ifdef MOUSE_DRIVER
-                               MOUSE_DRIVER
-#  else
-                               mouse_static_stddrv
-#  endif
-                               ));
-#endif
-
-    /* Get the initial bounding box. */
-    mouse_getbox (&full_box);
-
-    screensize (&width, &height);
-
-top:
-    clrscr ();
-
-    /* Print a help line */
-    cputs (" d)ebug  h)ide   q)uit   s)how   j)ail");
-
-    /* Put a cross at the center of the screen. */
-    gotoxy (width / 2 - 3, height / 2 - 1);
-#if defined(__CBM__)
-    cprintf ("%3u,%3u\r\n%*s\xDB", width / 2 * 8 + 4, height / 2 * 8 + 4,
-             width / 2, "");
-#else
-    cprintf ("%3u,%3u\r\n%*s+", width / 2 * 8 + 4, height / 2 * 8 + 4,
-             width / 2, "");
-#endif
-
-    /* Test loop */
-    ShowState (Jailed, Invisible);
-    do {
-        /* Get the current co-ordinates and button states; and, print them. */
-        mouse_info (&info);
-        gotoxy (0, 2);
-        cprintf (" X  = %3d\r\n", info.pos.x);
-        cprintf (" Y  = %3d\r\n", info.pos.y);
-        cprintf (" B1 = %c\r\n", (info.buttons & MOUSE_BTN_LEFT) ?
-#ifdef __CBM__
-                 0x5F
-#else
-                 'v'
-#endif
-                 : '^');
-        cprintf (" B2 = %c", (info.buttons & MOUSE_BTN_RIGHT) ?
-#ifdef __CBM__
-                 0x5F
-#else
-                 'v'
-#endif
-                 : '^');
-
-        /* Handle user input */
-        if (kbhit ()) {
-            cclearxy (1, 9, 23);
-            switch (tolower (C = cgetc ())) {
-                case 'd':
-                    BREAK();
-
-                    /* The debugger might have changed the colors.
-                    ** Restore them.
-                    */
-#ifdef __CBM__
-                    (void) bordercolor (COLOR_GRAY2);
-                    (void) bgcolor (COLOR_WHITE);
-                    (void) textcolor (COLOR_GRAY1);
-#else
-                    (void) bordercolor (COLOR_BLUE);
-                    (void) bgcolor (COLOR_WHITE);
-                    (void) textcolor (COLOR_BLACK);
-#endif
-
-                    /* The debugger changed the screen; restore it. */
-                    goto top;
-
-                case 'h':
-                    mouse_hide ();
-                    ShowState (Jailed, ++Invisible);
-                    break;
-
-                case 'j':
-                    if (Jailed) {
-                        mouse_setbox (&full_box);
-                        Jailed = false;
-                    } else {
-                        small_box.minx = max (info.pos.x - 10, full_box.minx);
-                        small_box.miny = max (info.pos.y - 10, full_box.miny);
-                        small_box.maxx = min (info.pos.x + 10, full_box.maxx);
-                        small_box.maxy = min (info.pos.y + 10, full_box.maxy);
-                        mouse_setbox (&small_box);
-                        Jailed = true;
-                    }
-                    ShowState (Jailed, Invisible);
-                    break;
-
-                case 's':
-                    mouse_show ();
-                    if (Invisible) {
-                        ShowState (Jailed, --Invisible);
-                    }
-                    break;
-
-                case 'q':
-                    Done = true;
-                    break;
-
-                default:
-                    gotoxy (1, 9);
-                    cprintf ("Spurious character: $%02X", C);
-            }
-        }
-    } while (!Done);
-
-#if DYN_DRV
-    /* Uninstall and unload the driver. */
-    CheckError ("mouse_unload", mouse_unload ());
-#else
-    /* Uninstall the static driver. */
-    CheckError ("mouse_uninstall", mouse_uninstall ());
-#endif
-
-    /* Say goodbye */
-    cputsxy (0, height / 2 + 3, "Goodbye!");
-    return EXIT_SUCCESS;
-}
diff --git a/samples/multidemo.c b/samples/multidemo.c
deleted file mode 100644 (file)
index 74039cf..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
-** Extended memory overlay demo program.
-**
-** Shows how to combine multiple cc65 features
-** incl. overlays and extended memory drivers.
-**
-** 2012-17-07, Oliver Schmidt (ol.sc@web.de)
-**
-*/
-
-
-
-#include <string.h>
-#include <conio.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <dirent.h>
-#include <em.h>
-#ifndef __CBM__
-#include <fcntl.h>
-#include <unistd.h>
-#else
-#include <device.h>
-#endif
-
-
-/* The symbols _OVERLAY?_LOAD__ and _OVERLAY?_SIZE__ were generated by the
-** linker. They contain the overlay area address and size specific to a
-** certain program.
-*/
-extern void _OVERLAY1_LOAD__[], _OVERLAY1_SIZE__[];
-extern void _OVERLAY2_LOAD__[], _OVERLAY2_SIZE__[];
-extern void _OVERLAY3_LOAD__[], _OVERLAY3_SIZE__[];
-
-struct {
-    char     *name;
-    int      page;
-    void     *addr;
-    unsigned size;
-} overlay[] =
-    {{"multdemo.1", -1, _OVERLAY1_LOAD__, (unsigned)_OVERLAY1_SIZE__},
-     {"multdemo.2", -1, _OVERLAY2_LOAD__, (unsigned)_OVERLAY2_SIZE__},
-     {"multdemo.3", -1, _OVERLAY3_LOAD__, (unsigned)_OVERLAY3_SIZE__}};
-
-
-
-/* Functions resident in an overlay can call back functions resident in the
-** main program at any time without any precautions. The function log() is
-** an example for such a function resident in the main program.
-*/
-void log (char *msg)
-{
-    /* Functions resident in an overlay can access all program variables and
-    ** constants at any time without any precautions because those are never
-    ** placed in overlays. The string constant below is an example for such
-    ** a constant resident in the main program.
-    */
-    printf ("Log: %s\n", msg);
-}
-
-
-/* In a real-world overlay program one would probably not use a #pragma but
-** rather place all the code of certain source files into the overlay by
-** compiling them with --code-name OVERLAY1.
-*/
-#pragma code-name (push, "OVERLAY1");
-
-void foo (void)
-{
-    log ("Calling main from overlay 1");
-}
-
-#pragma code-name (pop);
-
-
-#pragma code-name (push, "OVERLAY2");
-
-void bar (void)
-{
-    log ("Calling main from overlay 2");
-}
-
-#pragma code-name (pop);
-
-
-#pragma code-name (push, "OVERLAY3");
-
-void foobar (void)
-{
-    log ("Calling main from overlay 3");
-}
-
-#pragma code-name(pop);
-
-
-unsigned char loademdriver (void)
-{
-    DIR *dir;
-    struct dirent *ent;
-    char *emd = NULL;
-    unsigned char max = 0;
-    unsigned char num;
-
-    printf ("Dbg: Searching for emdrivers\n");
-    dir = opendir (".");
-    if (!dir) {
-        log ("Opening directory failed");
-        return 0;
-    }
-
-    while (ent = readdir (dir)) {
-        char *ext;
-
-        if (!_DE_ISREG (ent->d_type)) {
-            continue;
-        }
-
-        ext = strrchr (ent->d_name, '.');
-        if (!ext || strcasecmp (ext, ".emd")) {
-            printf ("Dbg: Skipping file %s\n", ent->d_name);
-            continue;
-        }
-
-        printf ("Dbg: Memorizing file %s\n", ent->d_name);
-        emd = realloc (emd, FILENAME_MAX * (max + 1));
-        strcpy (emd + FILENAME_MAX * max++, ent->d_name);
-    }
-    closedir (dir);
-
-    for (num = 0; num < max; ++num) {
-        char *drv;
-
-        drv = emd + FILENAME_MAX * num;
-        printf ("Dbg: Trying emdriver %s\n", drv);
-        if (em_load_driver (drv) == EM_ERR_OK) {
-            printf ("Dbg: Loaded emdriver %s\n", drv);
-            free (emd);
-            return 1;
-        }
-
-        printf ("Dbg: Emdriver %s failed\n", drv);
-    }
-
-    free (emd);
-    return 0;
-}
-
-
-unsigned char loadoverlay (unsigned char num)
-{
-    if (overlay[num - 1].page < 0) {
-#ifndef __CBM__
-
-        int file;
-
-        printf ("Dbg: Loading overlay %u from file\n", num);
-        file = open (overlay[num - 1].name, O_RDONLY);
-        if (file == -1) {
-            log ("Opening overlay file failed");
-            return 0;
-        }
-        read (file, overlay[num - 1].addr,
-                    overlay[num - 1].size);
-        close (file);
-
-#else
-
-        if (cbm_load (overlay[num - 1].name, getcurrentdevice (), NULL) == 0) {
-            log ("Loading overlay file failed");
-            return 0;
-        }
-
-#endif
-        return 1;
-    } else {
-        struct em_copy copyinfo;
-
-        printf ("Dbg: Loading overlay %u from memory\n", num);
-        copyinfo.offs  = 0;
-        copyinfo.page  = overlay[num - 1].page;
-        copyinfo.buf   = overlay[num - 1].addr;
-        copyinfo.count = overlay[num - 1].size;
-        em_copyfrom (&copyinfo);
-        return 1;
-    }
-}
-
-
-void copyoverlays (void)
-{
-    unsigned page = 0;
-    unsigned char num;
-
-    for (num = 0; num < sizeof (overlay) / sizeof (overlay[0]); ++num) {
-        struct em_copy copyinfo;
-        unsigned size = (overlay[num].size + EM_PAGE_SIZE - 1) / EM_PAGE_SIZE;
-
-        if (size > em_pagecount () - page) {
-            printf ("Dbg: Not enough memory for overlay %u\n", num + 1);
-            continue;
-        }
-
-        if (loadoverlay (num + 1) == 0)
-            continue;
-
-        copyinfo.offs  = 0;
-        copyinfo.page  = page;
-        copyinfo.buf   = overlay[num].addr;
-        copyinfo.count = overlay[num].size;
-        em_copyto (&copyinfo);
-
-        overlay[num].page = page;
-        page += size;
-
-        printf ("Dbg: Stored overlay %u in pages %u-%u\n",
-                num + 1, overlay[num].page, page - 1);
-    }
-}
-
-
-void main (void)
-{
-    log ("Loading extended memory driver");
-    if (loademdriver ()) {
-        log ("Copying overlays into ext. memory");
-        copyoverlays ();
-    } else {
-        log ("No extended memory driver found");
-    }
-
-    log ("Press any key...");
-    cgetc ();
-
-    if (loadoverlay (1)) {
-        log ("Calling overlay 1 from main");
-
-        /* The linker makes sure that the call to foo() ends up at the right mem
-        ** addr. However it's up to user to make sure that the - right - overlay
-        ** is actually loaded before making the the call.
-        */
-        foo ();
-    }
-
-    /* Replacing one overlay with another one can only happen from the main
-    ** program. This implies that an overlay can never load another overlay.
-    */
-    if (loadoverlay (2)) {
-        log ("Calling overlay 2 from main");
-        bar ();
-    }
-
-    if (loadoverlay (3)) {
-        log ("Calling overlay 3 from main");
-        foobar ();
-    }
-
-    log ("Press any key...");
-    cgetc ();
-}
diff --git a/samples/nachtm.c b/samples/nachtm.c
deleted file mode 100644 (file)
index 0b962fa..0000000
+++ /dev/null
@@ -1,1180 +0,0 @@
-/*
-** "Eine kleine Nachtmusik" by Wolfgang Amadeus Mozart, KV 525
-**
-** First version in 1987 by
-**   Joachim von Bassewitz (joachim@von-bassewitz.de) and
-**   Ullrich von Bassewitz (ullrich@von-bassewitz.de).
-**
-** C conversion in 1998 by
-**   Ullrich von Bassewitz (ullrich@von-bassewitz.de)
-**
-*/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-#include <conio.h>
-#include <cbm.h>
-#include <dbg.h>
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Tables with voice data.
-**
-**  Bit     Description
-** -------------------------------------------
-**  15      Pause bit.
-**  12-14   Octave
-**  8-11    Tone (index into frequency table)
-**  7       Unused. Was thought as a control bit in the original version to
-**          change SID parameters, but this was never implemented.
-**  0-6     Length of the tone in ticks.
-**
-*/
-
-
-
-static unsigned Voice1 [] = {
-    0x5708,0x8004,0x5204,0x5708,0x8004,0x5204,0x5704,0x5204,0x5704,0x5B04,
-    0x6208,0x8008,0x6008,0x8004,0x5904,0x6008,0x8004,0x5904,0x6004,0x5904,
-    0x5604,0x5904,0x5208,0x8008,0x5704,0x8004,0x570C,0x5B01,0x5B01,0x5B01,
-    0x5B01,0x5904,0x5704,0x5704,0x5604,0x560C,0x5901,0x5901,0x5901,0x5901,
-    0x6004,0x5604,0x5901,0x5901,0x5901,0x5901,0x5704,0x570C,0x5B01,0x5B01,
-    0x5B01,0x5B01,0x5904,0x5704,0x5701,0x5701,0x5701,0x5701,0x5604,0x560C,
-    0x5901,0x5901,0x5901,0x5901,0x6004,0x5604,0x5704,0x5704,0x5601,0x5601,
-    0x5601,0x5601,0x5401,0x5401,0x5602,0x5704,0x5704,0x5901,0x5901,0x5901,
-    0x5901,0x5701,0x5701,0x5902,0x5B04,0x5B04,0x6001,0x6001,0x6001,0x6001,
-    0x5B01,0x5B01,0x6001,0x6001,0x6208,0x8008,0x5201,0x5201,0x5201,0x5201,
-    0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,
-    0x5201,0x5201,0x5410,0x5008,0x5008,0x4B08,0x4B08,0x4908,0x4908,0x4701,
-    0x4701,0x4701,0x4701,0x4604,0x4404,0x4604,0x4704,0x8004,0x4904,0x8004,
-    0x4B04,0x800C,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,
-    0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5410,0x5201,
-    0x5201,0x5201,0x5201,0x5004,0x5004,0x5004,0x5001,0x5001,0x5001,0x5001,
-    0x4B04,0x4B04,0x4B04,0x4B01,0x4B01,0x4B01,0x4B01,0x4904,0x4904,0x4904,
-    0x4701,0x4701,0x4701,0x4701,0x4601,0x4601,0x4601,0x4601,0x4401,0x4401,
-    0x4401,0x4401,0x4604,0x4701,0x4701,0x4701,0x4701,0x4701,0x4701,0x4701,
-    0x4701,0x4701,0x4701,0x4701,0x4701,0x4701,0x4701,0x4701,0x4701,0x4704,
-    0x4701,0x4701,0x4601,0x4701,0x4901,0x4901,0x4901,0x4901,0x4604,0x4B01,
-    0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,
-    0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B04,0x4B01,0x4B01,0x4901,0x4B01,
-    0x5001,0x5001,0x5001,0x5001,0x4904,0x5210,0x5408,0x5608,0x5708,0x5908,
-    0x5B08,0x6108,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,
-    0x6201,0x6201,0x6201,0x6201,0x5904,0x6101,0x6101,0x6101,0x6101,0x6101,
-    0x6101,0x5902,0x6101,0x6101,0x6101,0x6101,0x6101,0x6101,0x5902,0x6201,
-    0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,
-    0x6201,0x5904,0x6101,0x6101,0x6101,0x6101,0x6101,0x6101,0x5902,0x6101,
-    0x6101,0x6101,0x6101,0x6101,0x6101,0x5902,0x6204,0x6208,0x6208,0x6208,
-    0x6201,0x6201,0x6201,0x6201,0x6204,0x6208,0x6208,0x6208,0x6204,0x6104,
-    0x5904,0x6204,0x5904,0x6004,0x5904,0x6204,0x5904,0x6104,0x4904,0x4904,
-    0x4904,0x4908,0x8008,0x590A,0x5702,0x5602,0x5402,0x5204,0x8004,0x5B04,
-    0x8004,0x5704,0x8004,0x5404,0x8004,0x5B04,0x800C,0x5601,0x5601,0x5601,
-    0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5401,0x5401,0x5201,
-    0x5201,0x5101,0x5101,0x4B04,0x8004,0x5704,0x8004,0x5601,0x5601,0x5601,
-    0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,
-    0x5601,0x5601,0x5601,0x5408,0x8008,0x5901,0x5901,0x5901,0x5901,0x5901,
-    0x5901,0x5901,0x5901,0x5901,0x5901,0x5701,0x5701,0x5601,0x5601,0x5401,
-    0x5401,0x5204,0x8004,0x5B04,0x8004,0x5704,0x8004,0x5404,0x8004,0x5908,
-    0x8004,0x5704,0x6104,0x6204,0x8004,0x5B04,0x5B01,0x5B01,0x5B01,0x5B01,
-    0x5904,0x8004,0x5104,0x5208,0x8004,0x5904,0x6201,0x6201,0x6201,0x6201,
-    0x6101,0x6101,0x6101,0x6101,0x5B01,0x5B01,0x5B01,0x5B01,0x5904,0x5B01,
-    0x5B01,0x5B01,0x5B01,0x5904,0x8004,0x5904,0x5904,0x5904,0x5904,0x5904,
-    0x5B01,0x5B01,0x5B01,0x5B01,0x5904,0x8004,0x5904,0x6204,0x6104,0x5B04,
-    0x5904,0x5B01,0x5B01,0x5B01,0x5B01,0x5904,0x8004,0x5904,0x5904,0x5904,
-    0x5904,0x5904,0x5B01,0x5B01,0x5B01,0x5B01,0x5904,0x8008,0x5B0A,0x5901,
-    0x5901,0x5701,0x5701,0x5601,0x5601,0x5708,0x8008,0x590A,0x5701,0x5701,
-    0x5601,0x5601,0x5401,0x5401,0x5608,0x8008,0x5B01,0x5B01,0x5B01,0x5B01,
-    0x6101,0x6101,0x6201,0x6201,0x6104,0x5B04,0x5B01,0x5B01,0x5B01,0x5B01,
-    0x5904,0x5604,0x5904,0x5901,0x5901,0x5901,0x5901,0x5704,0x5604,0x5404,
-    0x5208,0x8004,0x5904,0x6201,0x6201,0x6201,0x6201,0x6101,0x6101,0x6101,
-    0x6101,0x5B01,0x5B01,0x5B01,0x5B01,0x5904,0x5B01,0x5B01,0x5B01,0x5B01,
-    0x5904,0x8004,0x5904,0x5904,0x5904,0x5904,0x5904,0x5B01,0x5B01,0x5B01,
-    0x5B01,0x5904,0x8004,0x5904,0x6201,0x6201,0x6201,0x6201,0x6101,0x6101,
-    0x6101,0x6101,0x5B01,0x5B01,0x5B01,0x5B01,0x5904,0x5B01,0x5B01,0x5B01,
-    0x5B01,0x5904,0x8004,0x5904,0x5904,0x5904,0x5904,0x5904,0x5B01,0x5B01,
-    0x5B01,0x5B01,0x5904,0x8008,0x5B0A,0x5901,0x5901,0x5701,0x5701,0x5601,
-    0x5601,0x5708,0x8008,0x590A,0x5701,0x5701,0x5601,0x5601,0x5401,0x5401,
-    0x5608,0x8008,0x5B01,0x5B01,0x5B01,0x5B01,0x6101,0x6101,0x6201,0x6201,
-    0x6104,0x5B04,0x5B01,0x5B01,0x5B01,0x5B01,0x5904,0x5604,0x5904,0x5901,
-    0x5901,0x5901,0x5901,0x5704,0x5604,0x5404,0x5204,0x4904,0x4B04,0x5104,
-    0x5204,0x5204,0x5401,0x5401,0x5401,0x5401,0x5201,0x5201,0x5401,0x5401,
-    0x5604,0x5104,0x5204,0x5404,0x5604,0x5604,0x5701,0x5701,0x5701,0x5701,
-    0x5601,0x5601,0x5701,0x5701,0x5904,0x5904,0x5A04,0x5802,0x5A02,0x5B08,
-    0x8008,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,
-    0x4B01,0x4B01,0x4B01,0x5404,0x5201,0x5201,0x5201,0x5201,0x5101,0x5101,
-    0x5101,0x5101,0x5B01,0x5B01,0x5B01,0x5B01,0x5901,0x5901,0x5901,0x5901,
-    0x6204,0x8004,0x6604,0x8004,0x6204,0x800C,0x5708,0x8004,0x5204,0x5708,
-    0x8004,0x5204,0x5704,0x5204,0x5704,0x5B04,0x6208,0x8008,0x6008,0x8004,
-    0x5904,0x6008,0x8004,0x5904,0x6004,0x5904,0x5604,0x5904,0x5208,0x8008,
-    0x5704,0x8004,0x570C,0x5B01,0x5B01,0x5B01,0x5B01,0x5904,0x5704,0x5704,
-    0x5604,0x560C,0x5901,0x5901,0x5901,0x5901,0x6004,0x5604,0x5901,0x5901,
-    0x5901,0x5901,0x5704,0x570C,0x5B01,0x5B01,0x5B01,0x5B01,0x5904,0x5704,
-    0x5701,0x5701,0x5701,0x5701,0x5604,0x560C,0x5901,0x5901,0x5901,0x5901,
-    0x6004,0x5604,0x5704,0x5704,0x5601,0x5601,0x5601,0x5601,0x5401,0x5401,
-    0x5602,0x5704,0x5704,0x5901,0x5901,0x5901,0x5901,0x5701,0x5701,0x5902,
-    0x5B04,0x5B04,0x6001,0x6001,0x6001,0x6001,0x5B01,0x5B01,0x6001,0x6001,
-    0x6208,0x8008,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,
-    0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5410,0x5008,
-    0x5008,0x4B08,0x4B08,0x4908,0x4908,0x4701,0x4701,0x4701,0x4701,0x4604,
-    0x4404,0x4604,0x4704,0x8004,0x4904,0x8004,0x4B04,0x800C,0x5201,0x5201,
-    0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,
-    0x5201,0x5201,0x5201,0x5201,0x5410,0x5201,0x5201,0x5201,0x5201,0x5004,
-    0x5004,0x5004,0x5001,0x5001,0x5001,0x5001,0x4B04,0x4B04,0x4B04,0x4B01,
-    0x4B01,0x4B01,0x4B01,0x4904,0x4904,0x4904,0x4701,0x4701,0x4701,0x4701,
-    0x4601,0x4601,0x4601,0x4601,0x4401,0x4401,0x4401,0x4401,0x4604,0x4701,
-    0x4701,0x4701,0x4701,0x4701,0x4701,0x4701,0x4701,0x4701,0x4701,0x4701,
-    0x4701,0x4701,0x4701,0x4701,0x4701,0x4704,0x4701,0x4701,0x4601,0x4701,
-    0x4901,0x4901,0x4901,0x4901,0x4604,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,
-    0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,
-    0x4B01,0x4B04,0x4B01,0x4B01,0x4901,0x4B01,0x5001,0x5001,0x5001,0x5001,
-    0x4904,0x5210,0x5408,0x5608,0x5708,0x5908,0x5B08,0x6108,0x6201,0x6201,
-    0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,
-    0x5904,0x6101,0x6101,0x6101,0x6101,0x6101,0x6101,0x5902,0x6101,0x6101,
-    0x6101,0x6101,0x6101,0x6101,0x5902,0x6201,0x6201,0x6201,0x6201,0x6201,
-    0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x5904,0x6101,0x6101,
-    0x6101,0x6101,0x6101,0x6101,0x5902,0x6101,0x6101,0x6101,0x6101,0x6101,
-    0x6101,0x5902,0x6204,0x6208,0x6208,0x6208,0x6201,0x6201,0x6201,0x6201,
-    0x6204,0x6208,0x6208,0x6208,0x6204,0x6104,0x5904,0x6204,0x5904,0x6004,
-    0x5904,0x6204,0x5904,0x6104,0x4904,0x4904,0x4904,0x4908,0x8008,0x590A,
-    0x5702,0x5602,0x5402,0x5204,0x8004,0x5B04,0x8004,0x5704,0x8004,0x5404,
-    0x8004,0x5B04,0x800C,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,
-    0x5601,0x5601,0x5601,0x5401,0x5401,0x5201,0x5201,0x5101,0x5101,0x4B04,
-    0x8004,0x5704,0x8004,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,
-    0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5408,
-    0x8008,0x5901,0x5901,0x5901,0x5901,0x5901,0x5901,0x5901,0x5901,0x5901,
-    0x5901,0x5701,0x5701,0x5601,0x5601,0x5401,0x5401,0x5204,0x8004,0x5B04,
-    0x8004,0x5704,0x8004,0x5404,0x8004,0x5908,0x8004,0x5704,0x6104,0x6204,
-    0x8004,0x5B04,0x5B01,0x5B01,0x5B01,0x5B01,0x5904,0x8004,0x5104,0x5208,
-    0x8004,0x5904,0x6201,0x6201,0x6201,0x6201,0x6101,0x6101,0x6101,0x6101,
-    0x5B01,0x5B01,0x5B01,0x5B01,0x5904,0x5B01,0x5B01,0x5B01,0x5B01,0x5904,
-    0x8004,0x5904,0x5904,0x5904,0x5904,0x5904,0x5B01,0x5B01,0x5B01,0x5B01,
-    0x5904,0x8004,0x5904,0x6204,0x6104,0x5B04,0x5904,0x5B01,0x5B01,0x5B01,
-    0x5B01,0x5904,0x8004,0x5904,0x5904,0x5904,0x5904,0x5904,0x5B01,0x5B01,
-    0x5B01,0x5B01,0x5904,0x8008,0x5B0A,0x5901,0x5901,0x5701,0x5701,0x5601,
-    0x5601,0x5708,0x8008,0x590A,0x5701,0x5701,0x5601,0x5601,0x5401,0x5401,
-    0x5608,0x8008,0x5B01,0x5B01,0x5B01,0x5B01,0x6101,0x6101,0x6201,0x6201,
-    0x6104,0x5B04,0x5B01,0x5B01,0x5B01,0x5B01,0x5904,0x5604,0x5904,0x5901,
-    0x5901,0x5901,0x5901,0x5704,0x5604,0x5404,0x5208,0x8004,0x5904,0x6201,
-    0x6201,0x6201,0x6201,0x6101,0x6101,0x6101,0x6101,0x5B01,0x5B01,0x5B01,
-    0x5B01,0x5904,0x5B01,0x5B01,0x5B01,0x5B01,0x5904,0x8004,0x5904,0x5904,
-    0x5904,0x5904,0x5904,0x5B01,0x5B01,0x5B01,0x5B01,0x5904,0x8004,0x5904,
-    0x6201,0x6201,0x6201,0x6201,0x6101,0x6101,0x6101,0x6101,0x5B01,0x5B01,
-    0x5B01,0x5B01,0x5904,0x5B01,0x5B01,0x5B01,0x5B01,0x5904,0x8004,0x5904,
-    0x5904,0x5904,0x5904,0x5904,0x5B01,0x5B01,0x5B01,0x5B01,0x5904,0x8008,
-    0x5B0A,0x5901,0x5901,0x5701,0x5701,0x5601,0x5601,0x5708,0x8008,0x590A,
-    0x5701,0x5701,0x5601,0x5601,0x5401,0x5401,0x5608,0x8008,0x5B01,0x5B01,
-    0x5B01,0x5B01,0x6101,0x6101,0x6201,0x6201,0x6104,0x5B04,0x5B01,0x5B01,
-    0x5B01,0x5B01,0x5904,0x5604,0x5904,0x5901,0x5901,0x5901,0x5901,0x5704,
-    0x5604,0x5404,0x5204,0x4904,0x4B04,0x5104,0x5204,0x5204,0x5401,0x5401,
-    0x5401,0x5401,0x5201,0x5201,0x5401,0x5401,0x5604,0x5104,0x5204,0x5404,
-    0x5604,0x5604,0x5701,0x5701,0x5701,0x5701,0x5601,0x5601,0x5701,0x5701,
-    0x5904,0x5904,0x5A04,0x5802,0x5A02,0x5B08,0x8008,0x4B01,0x4B01,0x4B01,
-    0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x5404,
-    0x5201,0x5201,0x5201,0x5201,0x5101,0x5101,0x5101,0x5101,0x5B01,0x5B01,
-    0x5B01,0x5B01,0x5901,0x5901,0x5901,0x5901,0x6204,0x8004,0x6604,0x8004,
-    0x6204,0x800C,0x5208,0x8004,0x4904,0x5208,0x8004,0x4904,0x5204,0x4904,
-    0x5204,0x5604,0x5908,0x8008,0x5908,0x8004,0x5604,0x5908,0x8004,0x5604,
-    0x5904,0x5604,0x5304,0x5604,0x4B08,0x8014,0x5704,0x6001,0x6001,0x6001,
-    0x6001,0x5B01,0x5B01,0x5B01,0x5B01,0x5901,0x5901,0x5901,0x5901,0x5704,
-    0x5901,0x5901,0x5901,0x5901,0x5704,0x8004,0x5704,0x5704,0x5704,0x5704,
-    0x5704,0x5901,0x5901,0x5901,0x5901,0x5704,0x8004,0x5704,0x6001,0x6001,
-    0x6001,0x6001,0x5B01,0x5B01,0x5B01,0x5B01,0x5901,0x5901,0x5901,0x5901,
-    0x5704,0x5901,0x5901,0x5901,0x5901,0x5704,0x8004,0x5704,0x5704,0x5704,
-    0x5704,0x5704,0x5901,0x5901,0x5901,0x5901,0x5704,0x8004,0x5704,0x6001,
-    0x6001,0x6001,0x6001,0x5B01,0x5B01,0x5B01,0x5B01,0x5901,0x5901,0x5901,
-    0x5901,0x5704,0x5901,0x5901,0x5901,0x5901,0x5804,0x8004,0x5804,0x5804,
-    0x5804,0x5804,0x5804,0x5B01,0x5B01,0x5B01,0x5B01,0x5904,0x8004,0x5904,
-    0x6001,0x6001,0x6001,0x6001,0x5A01,0x5A01,0x5A01,0x5A01,0x5901,0x5901,
-    0x5901,0x5901,0x5704,0x5701,0x5701,0x5701,0x5701,0x5604,0x8004,0x5604,
-    0x5604,0x5604,0x5604,0x5604,0x5901,0x5901,0x5901,0x5901,0x5704,0x8004,
-    0x5304,0x5704,0x5504,0x5304,0x5204,0x5201,0x5201,0x5201,0x5201,0x5104,
-    0x8004,0x5104,0x5104,0x5104,0x5104,0x5104,0x5401,0x5401,0x5401,0x5401,
-    0x5204,0x8004,0x4201,0x4201,0x4201,0x4201,0x4401,0x4401,0x4401,0x4401,
-    0x4601,0x4601,0x4601,0x4601,0x4701,0x4701,0x4701,0x4701,0x4901,0x4901,
-    0x4901,0x4901,0x5001,0x5001,0x5001,0x5001,0x4A04,0x8004,0x4601,0x4601,
-    0x4601,0x4601,0x4701,0x4701,0x4701,0x4701,0x4901,0x4901,0x4901,0x4901,
-    0x4A01,0x4A01,0x4A01,0x4A01,0x5101,0x5101,0x5101,0x5101,0x5401,0x5401,
-    0x5401,0x5401,0x5204,0x8004,0x5201,0x5201,0x5201,0x5201,0x5401,0x5401,
-    0x5401,0x5401,0x5601,0x5601,0x5601,0x5601,0x5701,0x5701,0x5701,0x5701,
-    0x5901,0x5901,0x5901,0x5901,0x5A01,0x5A01,0x5A01,0x5A01,0x5A01,0x5A01,
-    0x5A01,0x5A01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,
-    0x6001,0x6001,0x6001,0x6001,0x6001,0x6001,0x6001,0x6001,0x6108,0x6201,
-    0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,
-    0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,
-    0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,
-    0x6201,0x6210,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,
-    0x5601,0x5601,0x5601,0x5601,0x5401,0x5401,0x5602,0x5708,0x8004,0x5204,
-    0x5708,0x8004,0x5204,0x5704,0x5204,0x5704,0x5B04,0x6208,0x8008,0x6008,
-    0x8004,0x5904,0x6008,0x8004,0x5904,0x6004,0x5904,0x5604,0x5904,0x5208,
-    0x8008,0x5704,0x8004,0x570C,0x5B01,0x5B01,0x5B01,0x5B01,0x5904,0x5704,
-    0x5701,0x5701,0x5701,0x5701,0x5604,0x560C,0x5901,0x5901,0x5901,0x5901,
-    0x6004,0x5604,0x5901,0x5901,0x5901,0x5901,0x5704,0x570C,0x5B01,0x5B01,
-    0x5B01,0x5B01,0x5904,0x5704,0x5701,0x5701,0x5701,0x5701,0x5604,0x560C,
-    0x5901,0x5901,0x5901,0x5901,0x6004,0x5604,0x5704,0x5704,0x5601,0x5601,
-    0x5601,0x5601,0x5401,0x5401,0x5602,0x5704,0x5704,0x5901,0x5901,0x5901,
-    0x5901,0x5701,0x5701,0x5902,0x5B04,0x5B04,0x6001,0x6001,0x6001,0x6001,
-    0x5B01,0x5B01,0x6001,0x6001,0x6208,0x8008,0x5201,0x5201,0x5201,0x5201,
-    0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,
-    0x5201,0x5201,0x5410,0x5008,0x5008,0x4B08,0x4B08,0x4908,0x4908,0x4701,
-    0x4701,0x4701,0x4701,0x4604,0x4404,0x4604,0x4704,0x8004,0x4904,0x8004,
-    0x4B04,0x800C,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,
-    0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5410,0x5201,
-    0x5201,0x5201,0x5201,0x5004,0x5004,0x5004,0x5001,0x5001,0x5001,0x5001,
-    0x4B04,0x4B04,0x4B04,0x4B01,0x4B01,0x4B01,0x4B01,0x4904,0x4904,0x4904,
-    0x4701,0x4701,0x4701,0x4701,0x4604,0x4404,0x4604,0x4714,0x4701,0x4701,
-    0x4601,0x4701,0x4901,0x4901,0x4901,0x4901,0x4604,0x4B14,0x4B01,0x4B01,
-    0x4901,0x4B01,0x5001,0x5001,0x5001,0x5001,0x4904,0x5210,0x5408,0x5608,
-    0x5708,0x5908,0x5B08,0x5108,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,
-    0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x5904,0x6101,0x6101,0x6101,
-    0x6101,0x6101,0x6101,0x5902,0x5101,0x5101,0x5101,0x5101,0x5101,0x5101,
-    0x5902,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,
-    0x6201,0x6201,0x6201,0x5904,0x6101,0x6101,0x6101,0x6101,0x6101,0x6101,
-    0x5902,0x5101,0x5101,0x5101,0x5101,0x5101,0x5101,0x5902,0x6204,0x5904,
-    0x6104,0x5904,0x6204,0x5904,0x6104,0x5904,0x6204,0x4204,0x4204,0x4204,
-    0x4208,0x8008,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,
-    0x5201,0x5201,0x5001,0x5001,0x4B01,0x4B01,0x4901,0x4901,0x4704,0x8004,
-    0x5404,0x8004,0x5004,0x8004,0x4904,0x8004,0x5204,0x800C,0x5B01,0x5B01,
-    0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5901,0x5901,
-    0x5701,0x5701,0x5601,0x5601,0x5404,0x8004,0x6004,0x8004,0x5B01,0x5B01,
-    0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,
-    0x5B01,0x5B01,0x5B01,0x5B01,0x5908,0x8008,0x8004,0x6204,0x6204,0x6204,
-    0x6204,0x6204,0x6204,0x6204,0x6204,0x6204,0x6204,0x6204,0x6201,0x6201,
-    0x6201,0x6201,0x6001,0x6001,0x6001,0x6001,0x5901,0x5901,0x5901,0x5901,
-    0x5604,0x5601,0x5601,0x5601,0x5601,0x5704,0x8004,0x5404,0x5401,0x5401,
-    0x5401,0x5401,0x5204,0x8004,0x4604,0x4708,0x8004,0x5204,0x5701,0x5701,
-    0x5701,0x5701,0x5601,0x5601,0x5601,0x5601,0x5401,0x5401,0x5401,0x5401,
-    0x5204,0x5401,0x5401,0x5401,0x5401,0x5204,0x8004,0x5204,0x5204,0x5204,
-    0x5204,0x5204,0x5401,0x5401,0x5401,0x5401,0x5204,0x8004,0x5204,0x5704,
-    0x5604,0x5404,0x5204,0x5401,0x5401,0x5401,0x5401,0x5204,0x8004,0x5204,
-    0x5204,0x5204,0x5204,0x5204,0x5401,0x5401,0x5401,0x5401,0x5204,0x8008,
-    0x540A,0x5201,0x5201,0x5001,0x5001,0x4B01,0x4B01,0x5008,0x8008,0x520A,
-    0x5001,0x5001,0x4B01,0x4B01,0x4901,0x4901,0x4B08,0x8008,0x5401,0x5401,
-    0x5401,0x5401,0x5601,0x5601,0x5701,0x5701,0x5604,0x5404,0x5401,0x5401,
-    0x5401,0x5401,0x5204,0x4B04,0x5204,0x5201,0x5201,0x5201,0x5201,0x5004,
-    0x4B04,0x4904,0x4708,0x8004,0x5204,0x5701,0x5701,0x5701,0x5701,0x5601,
-    0x5601,0x5601,0x5601,0x5401,0x5401,0x5401,0x5401,0x5204,0x5401,0x5401,
-    0x5401,0x5401,0x5204,0x8004,0x5204,0x5204,0x5204,0x5204,0x5204,0x5401,
-    0x5401,0x5401,0x5401,0x5204,0x8004,0x5204,0x5701,0x5701,0x5701,0x5701,
-    0x5601,0x5601,0x5601,0x5601,0x5401,0x5401,0x5401,0x5401,0x5204,0x5401,
-    0x5401,0x5401,0x5401,0x5204,0x8004,0x5204,0x5204,0x5204,0x5204,0x5204,
-    0x5401,0x5401,0x5401,0x5401,0x5204,0x8008,0x640A,0x6201,0x6201,0x6001,
-    0x6001,0x5B01,0x5B01,0x6008,0x8008,0x620A,0x6001,0x6001,0x5B01,0x5B01,
-    0x5901,0x5901,0x5B08,0x8008,0x5401,0x5401,0x5401,0x5401,0x5601,0x5601,
-    0x5701,0x5701,0x5604,0x5404,0x5204,0x5704,0x5B04,0x6204,0x6201,0x6201,
-    0x6201,0x6201,0x6004,0x5B04,0x5904,0x5704,0x4204,0x4404,0x4604,0x4704,
-    0x4704,0x4901,0x4901,0x4901,0x4901,0x4701,0x4701,0x4901,0x4901,0x4B04,
-    0x4604,0x4704,0x4904,0x4B04,0x4B04,0x5001,0x5001,0x5001,0x5001,0x4B01,
-    0x4B01,0x5001,0x5001,0x5204,0x5204,0x5301,0x5301,0x5301,0x5301,0x5101,
-    0x5101,0x5301,0x5301,0x5408,0x8008,0x440C,0x4904,0x4704,0x4604,0x4404,
-    0x4204,0x5201,0x5201,0x5201,0x5201,0x5101,0x5101,0x5101,0x5101,0x5001,
-    0x5001,0x5001,0x5001,0x4B01,0x4B01,0x4B01,0x4B01,0x5201,0x5201,0x5201,
-    0x5201,0x5101,0x5101,0x5101,0x5101,0x5001,0x5001,0x5001,0x5001,0x4B04,
-    0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,
-    0x4401,0x4401,0x4904,0x4701,0x4701,0x4701,0x4701,0x4601,0x4601,0x4601,
-    0x4601,0x4401,0x4401,0x4401,0x4401,0x4204,0x5201,0x5201,0x5201,0x5201,
-    0x5401,0x5401,0x5401,0x5401,0x5601,0x5601,0x5601,0x5601,0x5701,0x5701,
-    0x5701,0x5701,0x5201,0x5201,0x5201,0x5201,0x5401,0x5401,0x5401,0x5401,
-    0x5601,0x5601,0x5601,0x5601,0x5704,0x5908,0x8008,0x6208,0x8008,0x5708,
-    0x8004,0x5204,0x4B04,0x4704,0x4B04,0x5204,0x5704,0x5204,0x5704,0x5B04,
-    0x6208,0x5608,0x5708,0x8004,0x5204,0x4B04,0x4704,0x4B04,0x5204,0x5704,
-    0x5204,0x5704,0x5B04,0x6208,0x5608,0x5708,0x8008,0x5708,0x8008,0x5708,
-    0x4706,0x4702,0x4708,0x8008,0x5208,0x8004,0x4904,0x5208,0x8004,0x4904,
-    0x5204,0x4904,0x5204,0x5604,0x5908,0x8008,0x5908,0x8004,0x5604,0x5908,
-    0x8004,0x5604,0x5904,0x5604,0x5304,0x5604,0x4B08,0x8014,0x5704,0x6001,
-    0x6001,0x6001,0x6001,0x5B01,0x5B01,0x5B01,0x5B01,0x5901,0x5901,0x5901,
-    0x5901,0x5704,0x5901,0x5901,0x5901,0x5901,0x5704,0x8004,0x5704,0x5704,
-    0x5704,0x5704,0x5704,0x5901,0x5901,0x5901,0x5901,0x5704,0x8004,0x5704,
-    0x6001,0x6001,0x6001,0x6001,0x5B01,0x5B01,0x5B01,0x5B01,0x5901,0x5901,
-    0x5901,0x5901,0x5704,0x5901,0x5901,0x5901,0x5901,0x5704,0x8004,0x5704,
-    0x5704,0x5704,0x5704,0x5704,0x5901,0x5901,0x5901,0x5901,0x5704,0x8004,
-    0x5704,0x6001,0x6001,0x6001,0x6001,0x5B01,0x5B01,0x5B01,0x5B01,0x5901,
-    0x5901,0x5901,0x5901,0x5704,0x5901,0x5901,0x5901,0x5901,0x5804,0x8004,
-    0x5804,0x5804,0x5804,0x5804,0x5804,0x5B01,0x5B01,0x5B01,0x5B01,0x5904,
-    0x8004,0x5904,0x6001,0x6001,0x6001,0x6001,0x5A01,0x5A01,0x5A01,0x5A01,
-    0x5901,0x5901,0x5901,0x5901,0x5704,0x5701,0x5701,0x5701,0x5701,0x5604,
-    0x8004,0x5604,0x5604,0x5604,0x5604,0x5604,0x5901,0x5901,0x5901,0x5901,
-    0x5704,0x8004,0x5304,0x5704,0x5504,0x5304,0x5204,0x5201,0x5201,0x5201,
-    0x5201,0x5104,0x8004,0x5104,0x5104,0x5104,0x5104,0x5104,0x5401,0x5401,
-    0x5401,0x5401,0x5204,0x8004,0x4201,0x4201,0x4201,0x4201,0x4401,0x4401,
-    0x4401,0x4401,0x4601,0x4601,0x4601,0x4601,0x4701,0x4701,0x4701,0x4701,
-    0x4901,0x4901,0x4901,0x4901,0x5001,0x5001,0x5001,0x5001,0x4A04,0x8004,
-    0x4601,0x4601,0x4601,0x4601,0x4701,0x4701,0x4701,0x4701,0x4901,0x4901,
-    0x4901,0x4901,0x4A01,0x4A01,0x4A01,0x4A01,0x5101,0x5101,0x5101,0x5101,
-    0x5401,0x5401,0x5401,0x5401,0x5204,0x8004,0x5201,0x5201,0x5201,0x5201,
-    0x5401,0x5401,0x5401,0x5401,0x5601,0x5601,0x5601,0x5601,0x5701,0x5701,
-    0x5701,0x5701,0x5901,0x5901,0x5901,0x5901,0x5A01,0x5A01,0x5A01,0x5A01,
-    0x5A01,0x5A01,0x5A01,0x5A01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,
-    0x5B01,0x5B01,0x6001,0x6001,0x6001,0x6001,0x6001,0x6001,0x6001,0x6001,
-    0x6108,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,
-    0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,
-    0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,
-    0x6201,0x6201,0x6201,0x6210,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,
-    0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5401,0x5401,0x5602,0x5708,
-    0x8004,0x5204,0x5708,0x8004,0x5204,0x5704,0x5204,0x5704,0x5B04,0x6208,
-    0x8008,0x6008,0x8004,0x5904,0x6008,0x8004,0x5904,0x6004,0x5904,0x5604,
-    0x5904,0x5208,0x8008,0x5704,0x8004,0x570C,0x5B01,0x5B01,0x5B01,0x5B01,
-    0x5904,0x5704,0x5701,0x5701,0x5701,0x5701,0x5604,0x560C,0x5901,0x5901,
-    0x5901,0x5901,0x6004,0x5604,0x5901,0x5901,0x5901,0x5901,0x5704,0x570C,
-    0x5B01,0x5B01,0x5B01,0x5B01,0x5904,0x5704,0x5701,0x5701,0x5701,0x5701,
-    0x5604,0x560C,0x5901,0x5901,0x5901,0x5901,0x6004,0x5604,0x5704,0x5704,
-    0x5601,0x5601,0x5601,0x5601,0x5401,0x5401,0x5602,0x5704,0x5704,0x5901,
-    0x5901,0x5901,0x5901,0x5701,0x5701,0x5902,0x5B04,0x5B04,0x6001,0x6001,
-    0x6001,0x6001,0x5B01,0x5B01,0x6001,0x6001,0x6208,0x8008,0x5201,0x5201,
-    0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,
-    0x5201,0x5201,0x5201,0x5201,0x5410,0x5008,0x5008,0x4B08,0x4B08,0x4908,
-    0x4908,0x4701,0x4701,0x4701,0x4701,0x4604,0x4404,0x4604,0x4704,0x8004,
-    0x4904,0x8004,0x4B04,0x800C,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,
-    0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,
-    0x5410,0x5201,0x5201,0x5201,0x5201,0x5004,0x5004,0x5004,0x5001,0x5001,
-    0x5001,0x5001,0x4B04,0x4B04,0x4B04,0x4B01,0x4B01,0x4B01,0x4B01,0x4904,
-    0x4904,0x4904,0x4701,0x4701,0x4701,0x4701,0x4604,0x4404,0x4604,0x4714,
-    0x4701,0x4701,0x4601,0x4701,0x4901,0x4901,0x4901,0x4901,0x4604,0x4B14,
-    0x4B01,0x4B01,0x4901,0x4B01,0x5001,0x5001,0x5001,0x5001,0x4904,0x5210,
-    0x5408,0x5608,0x5708,0x5908,0x5B08,0x5108,0x6201,0x6201,0x6201,0x6201,
-    0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x5904,0x6101,
-    0x6101,0x6101,0x6101,0x6101,0x6101,0x5902,0x5101,0x5101,0x5101,0x5101,
-    0x5101,0x5101,0x5902,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,0x6201,
-    0x6201,0x6201,0x6201,0x6201,0x6201,0x5904,0x6101,0x6101,0x6101,0x6101,
-    0x6101,0x6101,0x5902,0x5101,0x5101,0x5101,0x5101,0x5101,0x5101,0x5902,
-    0x6204,0x5904,0x6104,0x5904,0x6204,0x5904,0x6104,0x5904,0x6204,0x4204,
-    0x4204,0x4204,0x4208,0x8008,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,
-    0x5201,0x5201,0x5201,0x5201,0x5001,0x5001,0x4B01,0x4B01,0x4901,0x4901,
-    0x4704,0x8004,0x5404,0x8004,0x5004,0x8004,0x4904,0x8004,0x5204,0x800C,
-    0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,
-    0x5901,0x5901,0x5701,0x5701,0x5601,0x5601,0x5404,0x8004,0x6004,0x8004,
-    0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,
-    0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5B01,0x5908,0x8008,0x8004,0x6204,
-    0x6204,0x6204,0x6204,0x6204,0x6204,0x6204,0x6204,0x6204,0x6204,0x6204,
-    0x6201,0x6201,0x6201,0x6201,0x6001,0x6001,0x6001,0x6001,0x5901,0x5901,
-    0x5901,0x5901,0x5604,0x5601,0x5601,0x5601,0x5601,0x5704,0x8004,0x5404,
-    0x5401,0x5401,0x5401,0x5401,0x5204,0x8004,0x4604,0x4708,0x8004,0x5204,
-    0x5701,0x5701,0x5701,0x5701,0x5601,0x5601,0x5601,0x5601,0x5401,0x5401,
-    0x5401,0x5401,0x5204,0x5401,0x5401,0x5401,0x5401,0x5204,0x8004,0x5204,
-    0x5204,0x5204,0x5204,0x5204,0x5401,0x5401,0x5401,0x5401,0x5204,0x8004,
-    0x5204,0x5704,0x5604,0x5404,0x5204,0x5401,0x5401,0x5401,0x5401,0x5204,
-    0x8004,0x5204,0x5204,0x5204,0x5204,0x5204,0x5401,0x5401,0x5401,0x5401,
-    0x5204,0x8008,0x540A,0x5201,0x5201,0x5001,0x5001,0x4B01,0x4B01,0x5008,
-    0x8008,0x520A,0x5001,0x5001,0x4B01,0x4B01,0x4901,0x4901,0x4B08,0x8008,
-    0x5401,0x5401,0x5401,0x5401,0x5601,0x5601,0x5701,0x5701,0x5604,0x5404,
-    0x5401,0x5401,0x5401,0x5401,0x5204,0x4B04,0x5204,0x5201,0x5201,0x5201,
-    0x5201,0x5004,0x4B04,0x4904,0x4708,0x8004,0x5204,0x5701,0x5701,0x5701,
-    0x5701,0x5601,0x5601,0x5601,0x5601,0x5401,0x5401,0x5401,0x5401,0x5204,
-    0x5401,0x5401,0x5401,0x5401,0x5204,0x8004,0x5204,0x5204,0x5204,0x5204,
-    0x5204,0x5401,0x5401,0x5401,0x5401,0x5204,0x8004,0x5204,0x5701,0x5701,
-    0x5701,0x5701,0x5601,0x5601,0x5601,0x5601,0x5401,0x5401,0x5401,0x5401,
-    0x5204,0x5401,0x5401,0x5401,0x5401,0x5204,0x8004,0x5204,0x5204,0x5204,
-    0x5204,0x5204,0x5401,0x5401,0x5401,0x5401,0x5204,0x8008,0x640A,0x6201,
-    0x6201,0x6001,0x6001,0x5B01,0x5B01,0x6008,0x8008,0x620A,0x6001,0x6001,
-    0x5B01,0x5B01,0x5901,0x5901,0x5B08,0x8008,0x5401,0x5401,0x5401,0x5401,
-    0x5601,0x5601,0x5701,0x5701,0x5604,0x5404,0x5204,0x5704,0x5B04,0x6204,
-    0x6201,0x6201,0x6201,0x6201,0x6004,0x5B04,0x5904,0x5704,0x4204,0x4404,
-    0x4604,0x4704,0x4704,0x4901,0x4901,0x4901,0x4901,0x4701,0x4701,0x4901,
-    0x4901,0x4B04,0x4604,0x4704,0x4904,0x4B04,0x4B04,0x5001,0x5001,0x5001,
-    0x5001,0x4B01,0x4B01,0x5001,0x5001,0x5204,0x5204,0x5301,0x5301,0x5301,
-    0x5301,0x5101,0x5101,0x5301,0x5301,0x5408,0x8008,0x440C,0x4904,0x4704,
-    0x4604,0x4404,0x4204,0x5201,0x5201,0x5201,0x5201,0x5101,0x5101,0x5101,
-    0x5101,0x5001,0x5001,0x5001,0x5001,0x4B01,0x4B01,0x4B01,0x4B01,0x5201,
-    0x5201,0x5201,0x5201,0x5101,0x5101,0x5101,0x5101,0x5001,0x5001,0x5001,
-    0x5001,0x4B04,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,
-    0x4401,0x4401,0x4401,0x4401,0x4904,0x4701,0x4701,0x4701,0x4701,0x4601,
-    0x4601,0x4601,0x4601,0x4401,0x4401,0x4401,0x4401,0x4204,0x5201,0x5201,
-    0x5201,0x5201,0x5401,0x5401,0x5401,0x5401,0x5601,0x5601,0x5601,0x5601,
-    0x5701,0x5701,0x5701,0x5701,0x5201,0x5201,0x5201,0x5201,0x5401,0x5401,
-    0x5401,0x5401,0x5601,0x5601,0x5601,0x5601,0x5704,0x5908,0x8008,0x6208,
-    0x8008,0x5708,0x8004,0x5204,0x4B04,0x4704,0x4B04,0x5204,0x5704,0x5204,
-    0x5704,0x5B04,0x6208,0x5608,0x5708,0x8004,0x5204,0x4B04,0x4704,0x4B04,
-    0x5204,0x5704,0x5204,0x5704,0x5B04,0x6208,0x5608,0x5708,0x8008,0x5708,
-    0x8008,0x5708,0x4706,0x4702,0x4708,0x8008,
-    0x0000
-};
-
-static unsigned Voice2 [] = {
-    0x4708,0x8004,0x4204,0x4708,0x8004,0x4204,0x4704,0x4204,0x4704,0x4B04,
-    0x5208,0x8008,0x5008,0x8004,0x4904,0x5008,0x8004,0x4904,0x5004,0x4904,
-    0x4604,0x4904,0x4208,0x8008,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,
-    0x4704,0x4704,0x4904,0x4904,0x4904,0x4904,0x4901,0x4901,0x4901,0x4901,
-    0x5004,0x4601,0x4601,0x4601,0x4601,0x4904,0x4704,0x4704,0x4704,0x4704,
-    0x4704,0x4704,0x4704,0x4704,0x4904,0x4904,0x4904,0x4904,0x4901,0x4901,
-    0x4901,0x4901,0x5004,0x4601,0x4601,0x4601,0x4601,0x4904,0x4210,0x4210,
-    0x4210,0x4208,0x8028,0x3610,0x3710,0x4008,0x4008,0x3908,0x3208,0x3204,
-    0x8004,0x4204,0x8004,0x4208,0x8028,0x4601,0x4601,0x4601,0x4601,0x4601,
-    0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,
-    0x4601,0x4710,0x4008,0x4004,0x4004,0x3908,0x3904,0x3904,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x3704,0x4704,0x4704,0x4704,0x4704,0x4704,
-    0x4904,0x4904,0x4704,0x4704,0x4604,0x4604,0x4704,0x4704,0x4404,0x4404,
-    0x4210,0x4410,0x4210,0x4410,0x4604,0x4704,0x4904,0x4704,0x4604,0x4704,
-    0x4904,0x4604,0x4B04,0x4904,0x4704,0x4904,0x4B04,0x4904,0x4804,0x4B04,
-    0x4904,0x4904,0x4904,0x4904,0x4904,0x4904,0x4904,0x4904,0x4904,0x3904,
-    0x3904,0x3904,0x3908,0x8020,0x4604,0x8004,0x3B04,0x8004,0x4704,0x8004,
-    0x4404,0x8004,0x4104,0x800C,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,
-    0x4401,0x4401,0x4204,0x8004,0x4404,0x8004,0x4201,0x4201,0x4201,0x4201,
-    0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,
-    0x4201,0x4201,0x4108,0x8010,0x4101,0x4101,0x4101,0x4101,0x4101,0x4101,
-    0x4101,0x4101,0x4204,0x8004,0x4604,0x8004,0x3B04,0x8004,0x3704,0x8004,
-    0x3408,0x8004,0x4404,0x4704,0x4604,0x8004,0x5704,0x5701,0x5701,0x5701,
-    0x5701,0x5604,0x8004,0x4704,0x4204,0x4204,0x4404,0x4404,0x4604,0x4604,
-    0x4204,0x4204,0x4104,0x4104,0x4204,0x4204,0x4404,0x4404,0x4104,0x4104,
-    0x4204,0x4204,0x4404,0x4404,0x4604,0x4604,0x4204,0x4204,0x4104,0x4104,
-    0x4204,0x4204,0x4404,0x4404,0x4104,0x4104,0x4204,0x4204,0x4604,0x4404,
-    0x4304,0x3B04,0x4104,0x4304,0x4404,0x4704,0x4404,0x4204,0x4104,0x3904,
-    0x3B04,0x4104,0x5204,0x5204,0x5204,0x5204,0x5204,0x5204,0x5204,0x5204,
-    0x5204,0x4904,0x4904,0x4904,0x4904,0x4904,0x4904,0x4704,0x4604,0x4204,
-    0x4404,0x4404,0x4604,0x4604,0x4204,0x4204,0x4104,0x4104,0x4204,0x4204,
-    0x4404,0x4404,0x4104,0x4104,0x4204,0x4204,0x4404,0x4404,0x4604,0x4604,
-    0x4204,0x4204,0x4104,0x4104,0x4204,0x4204,0x4404,0x4404,0x4104,0x4104,
-    0x4204,0x4204,0x4604,0x4404,0x4304,0x3B04,0x4104,0x4304,0x4404,0x4704,
-    0x4404,0x4204,0x4104,0x3904,0x3B04,0x4104,0x4204,0x5204,0x5204,0x5204,
-    0x5204,0x5204,0x5204,0x5204,0x5204,0x4904,0x4904,0x4904,0x4904,0x4904,
-    0x4904,0x4704,0x4604,0x3904,0x3B04,0x4104,0x4204,0x4204,0x4404,0x4404,
-    0x4604,0x4104,0x4204,0x4404,0x4604,0x4604,0x4704,0x4704,0x4904,0x4904,
-    0x4A04,0x4A04,0x4B08,0x8008,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,
-    0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,
-    0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4201,0x4201,
-    0x4201,0x4201,0x4104,0x5204,0x8004,0x5204,0x8004,0x5204,0x800C,0x4708,
-    0x8004,0x4204,0x4708,0x8004,0x4204,0x4704,0x4204,0x4704,0x4B04,0x5208,
-    0x8008,0x5008,0x8004,0x4904,0x5008,0x8004,0x4904,0x5004,0x4904,0x4604,
-    0x4904,0x4208,0x8008,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,
-    0x4704,0x4904,0x4904,0x4904,0x4904,0x4901,0x4901,0x4901,0x4901,0x5004,
-    0x4601,0x4601,0x4601,0x4601,0x4904,0x4704,0x4704,0x4704,0x4704,0x4704,
-    0x4704,0x4704,0x4704,0x4904,0x4904,0x4904,0x4904,0x4901,0x4901,0x4901,
-    0x4901,0x5004,0x4601,0x4601,0x4601,0x4601,0x4904,0x4210,0x4210,0x4210,
-    0x4208,0x8028,0x3610,0x3710,0x4008,0x4008,0x3908,0x3208,0x3204,0x8004,
-    0x4204,0x8004,0x4208,0x8028,0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,
-    0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,
-    0x4710,0x4008,0x4004,0x4004,0x3908,0x3904,0x3904,0x3704,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4904,
-    0x4904,0x4704,0x4704,0x4604,0x4604,0x4704,0x4704,0x4404,0x4404,0x4210,
-    0x4410,0x4210,0x4410,0x4604,0x4704,0x4904,0x4704,0x4604,0x4704,0x4904,
-    0x4604,0x4B04,0x4904,0x4704,0x4904,0x4B04,0x4904,0x4804,0x4B04,0x4904,
-    0x4904,0x4904,0x4904,0x4904,0x4904,0x4904,0x4904,0x4904,0x3904,0x3904,
-    0x3904,0x3908,0x8020,0x4604,0x8004,0x3B04,0x8004,0x4704,0x8004,0x4404,
-    0x8004,0x4104,0x800C,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,
-    0x4401,0x4204,0x8004,0x4404,0x8004,0x4201,0x4201,0x4201,0x4201,0x4201,
-    0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,
-    0x4201,0x4108,0x8010,0x4101,0x4101,0x4101,0x4101,0x4101,0x4101,0x4101,
-    0x4101,0x4204,0x8004,0x4604,0x8004,0x3B04,0x8004,0x3704,0x8004,0x3408,
-    0x8004,0x4404,0x4704,0x4604,0x8004,0x5704,0x5701,0x5701,0x5701,0x5701,
-    0x5604,0x8004,0x4704,0x4204,0x4204,0x4404,0x4404,0x4604,0x4604,0x4204,
-    0x4204,0x4104,0x4104,0x4204,0x4204,0x4404,0x4404,0x4104,0x4104,0x4204,
-    0x4204,0x4404,0x4404,0x4604,0x4604,0x4204,0x4204,0x4104,0x4104,0x4204,
-    0x4204,0x4404,0x4404,0x4104,0x4104,0x4204,0x4204,0x4604,0x4404,0x4304,
-    0x3B04,0x4104,0x4304,0x4404,0x4704,0x4404,0x4204,0x4104,0x3904,0x3B04,
-    0x4104,0x5204,0x5204,0x5204,0x5204,0x5204,0x5204,0x5204,0x5204,0x5204,
-    0x4904,0x4904,0x4904,0x4904,0x4904,0x4904,0x4704,0x4604,0x4204,0x4404,
-    0x4404,0x4604,0x4604,0x4204,0x4204,0x4104,0x4104,0x4204,0x4204,0x4404,
-    0x4404,0x4104,0x4104,0x4204,0x4204,0x4404,0x4404,0x4604,0x4604,0x4204,
-    0x4204,0x4104,0x4104,0x4204,0x4204,0x4404,0x4404,0x4104,0x4104,0x4204,
-    0x4204,0x4604,0x4404,0x4304,0x3B04,0x4104,0x4304,0x4404,0x4704,0x4404,
-    0x4204,0x4104,0x3904,0x3B04,0x4104,0x4204,0x5204,0x5204,0x5204,0x5204,
-    0x5204,0x5204,0x5204,0x5204,0x4904,0x4904,0x4904,0x4904,0x4904,0x4904,
-    0x4704,0x4604,0x3904,0x3B04,0x4104,0x4204,0x4204,0x4404,0x4404,0x4604,
-    0x4104,0x4204,0x4404,0x4604,0x4604,0x4704,0x4704,0x4904,0x4904,0x4A04,
-    0x4A04,0x4B08,0x8008,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,
-    0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,
-    0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4401,0x4201,0x4201,0x4201,
-    0x4201,0x4104,0x5204,0x8004,0x5204,0x8004,0x5204,0x800C,0x4208,0x8004,
-    0x3904,0x4208,0x8004,0x3904,0x4204,0x3904,0x4204,0x4604,0x4908,0x8008,
-    0x4908,0x8004,0x4604,0x4908,0x8004,0x4604,0x4904,0x4604,0x4304,0x4604,
-    0x3B08,0x8008,0x4004,0x4004,0x4204,0x4204,0x4404,0x4404,0x4004,0x4004,
-    0x3B04,0x3B04,0x4004,0x4004,0x4204,0x4204,0x3B04,0x3B04,0x4004,0x4004,
-    0x4204,0x4204,0x4404,0x4404,0x4004,0x4004,0x3B04,0x3B04,0x4004,0x4004,
-    0x4204,0x4204,0x3B04,0x3B04,0x4004,0x4004,0x4204,0x4204,0x4404,0x4404,
-    0x4004,0x4004,0x3B04,0x3B04,0x4004,0x4004,0x4204,0x4204,0x3B04,0x3B04,
-    0x3904,0x3904,0x3B04,0x3B04,0x4004,0x4004,0x3904,0x3904,0x3904,0x3904,
-    0x3A04,0x3A04,0x4004,0x4004,0x3904,0x3904,0x3704,0x3704,0x3604,0x3604,
-    0x3704,0x3704,0x4604,0x4604,0x4704,0x4704,0x4604,0x4604,0x4704,0x3704,
-    0x3604,0x3704,0x3908,0x8004,0x3201,0x3201,0x3201,0x3201,0x3401,0x3401,
-    0x3401,0x3401,0x3601,0x3601,0x3601,0x3601,0x3701,0x3701,0x3701,0x3701,
-    0x3901,0x3901,0x3901,0x3901,0x4001,0x4001,0x4001,0x4001,0x3A04,0x8004,
-    0x3601,0x3601,0x3601,0x3601,0x3701,0x3701,0x3701,0x3701,0x3901,0x3901,
-    0x3901,0x3901,0x3A01,0x3A01,0x3A01,0x3A01,0x4101,0x4101,0x4101,0x4101,
-    0x4401,0x4401,0x4401,0x4401,0x4204,0x8038,0x4B04,0x4B04,0x4B01,0x4B01,
-    0x4B01,0x4B01,0x5004,0x4904,0x4904,0x4901,0x4901,0x4901,0x4901,0x4B04,
-    0x4704,0x4704,0x4701,0x4701,0x4701,0x4701,0x4B04,0x4B01,0x4B01,0x4B01,
-    0x4B01,0x4904,0x4704,0x4204,0x3B08,0x8004,0x4204,0x4708,0x8004,0x4204,
-    0x4704,0x4204,0x4704,0x4B04,0x5208,0x8008,0x5008,0x8004,0x4904,0x5008,
-    0x8004,0x4904,0x5004,0x4904,0x4604,0x4904,0x4208,0x8008,0x4704,0x4704,
-    0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,
-    0x4701,0x4701,0x4701,0x4701,0x4B04,0x4401,0x4401,0x4401,0x4401,0x4704,
-    0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,
-    0x4704,0x4704,0x4701,0x4701,0x4701,0x4701,0x4B04,0x4401,0x4401,0x4401,
-    0x4401,0x4704,0x4210,0x4210,0x4210,0x4208,0x8028,0x3610,0x3710,0x4008,
-    0x4008,0x3908,0x3908,0x3204,0x8004,0x4204,0x8004,0x4208,0x8028,0x4601,
-    0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,
-    0x4601,0x4601,0x4601,0x4601,0x4601,0x4710,0x4008,0x4004,0x4004,0x3908,
-    0x3904,0x3904,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x4704,
-    0x4704,0x4704,0x4704,0x4704,0x4904,0x4904,0x4704,0x4704,0x4604,0x4604,
-    0x4704,0x4704,0x4404,0x4404,0x4210,0x4410,0x4210,0x4410,0x4208,0x4408,
-    0x4208,0x4408,0x4204,0x3204,0x3204,0x3204,0x3208,0x8020,0x3B04,0x8004,
-    0x3404,0x8004,0x4004,0x8004,0x3904,0x8004,0x3604,0x800C,0x4901,0x4901,
-    0x4901,0x4901,0x4901,0x4901,0x4901,0x4901,0x4704,0x8004,0x4904,0x8004,
-    0x4B10,0x4908,0x8008,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,
-    0x5201,0x5201,0x5201,0x5001,0x5001,0x4B01,0x4B01,0x4901,0x4901,0x4704,
-    0x8004,0x5404,0x8004,0x5004,0x8004,0x4904,0x8004,0x5208,0x8004,0x5004,
-    0x5001,0x5001,0x5001,0x5001,0x4B04,0x8004,0x5004,0x5001,0x5001,0x5001,
-    0x5001,0x4B04,0x8004,0x4004,0x3704,0x3704,0x3904,0x3904,0x3B04,0x3B04,
-    0x3704,0x3704,0x3604,0x3604,0x3704,0x3704,0x3904,0x3904,0x3604,0x3604,
-    0x3704,0x3704,0x3904,0x3904,0x3B04,0x3B04,0x3704,0x3704,0x3604,0x3604,
-    0x3704,0x3704,0x3904,0x3904,0x3604,0x3604,0x3704,0x4704,0x4B04,0x4904,
-    0x4804,0x4404,0x4604,0x4804,0x4904,0x5004,0x4904,0x4704,0x4604,0x4204,
-    0x4404,0x4604,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,
-    0x4704,0x4204,0x4204,0x4204,0x4204,0x4204,0x4204,0x4004,0x3B04,0x3704,
-    0x3904,0x3904,0x3B04,0x3B04,0x3704,0x3704,0x3604,0x3604,0x3704,0x3704,
-    0x3904,0x3904,0x3604,0x3604,0x3704,0x4704,0x4904,0x4904,0x4B04,0x4B04,
-    0x4704,0x4704,0x4604,0x4604,0x4704,0x4704,0x4904,0x4904,0x4604,0x4604,
-    0x4704,0x4704,0x4B04,0x4904,0x4804,0x4404,0x4604,0x4804,0x4904,0x5004,
-    0x4904,0x4704,0x4604,0x4204,0x4404,0x4604,0x4704,0x4704,0x4704,0x4704,
-    0x4704,0x4704,0x4704,0x4704,0x4701,0x4701,0x4701,0x4701,0x4904,0x5004,
-    0x5004,0x5004,0x5004,0x5004,0x4B04,0x4904,0x4204,0x4404,0x4604,0x4704,
-    0x4704,0x4904,0x4904,0x4B04,0x3604,0x3704,0x3904,0x3B04,0x3B04,0x4004,
-    0x4004,0x4004,0x4004,0x4104,0x4104,0x4208,0x8008,0x3901,0x3901,0x3901,
-    0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,
-    0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,
-    0x3901,0x3701,0x3701,0x3701,0x3701,0x3604,0x3708,0x8018,0x3901,0x3901,
-    0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,
-    0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,
-    0x3901,0x3901,0x3701,0x3701,0x3701,0x3701,0x3604,0x3708,0x8008,0x4708,
-    0x8008,0x4408,0x8008,0x4708,0x8008,0x3710,0x3710,0x3710,0x3708,0x3908,
-    0x3710,0x3710,0x3710,0x3708,0x3908,0x3704,0x3B04,0x4204,0x4704,0x4B04,
-    0x4704,0x5204,0x4B04,0x4708,0x3706,0x3702,0x3708,0x8008,0x4208,0x8004,
-    0x3904,0x4208,0x8004,0x3904,0x4204,0x3904,0x4204,0x4604,0x4908,0x8008,
-    0x4908,0x8004,0x4604,0x4908,0x8004,0x4604,0x4904,0x4604,0x4304,0x4604,
-    0x3B08,0x8008,0x4004,0x4004,0x4204,0x4204,0x4404,0x4404,0x4004,0x4004,
-    0x3B04,0x3B04,0x4004,0x4004,0x4204,0x4204,0x3B04,0x3B04,0x4004,0x4004,
-    0x4204,0x4204,0x4404,0x4404,0x4004,0x4004,0x3B04,0x3B04,0x4004,0x4004,
-    0x4204,0x4204,0x3B04,0x3B04,0x4004,0x4004,0x4204,0x4204,0x4404,0x4404,
-    0x4004,0x4004,0x3B04,0x3B04,0x4004,0x4004,0x4204,0x4204,0x3B04,0x3B04,
-    0x3904,0x3904,0x3B04,0x3B04,0x4004,0x4004,0x3904,0x3904,0x3904,0x3904,
-    0x3A04,0x3A04,0x4004,0x4004,0x3904,0x3904,0x3704,0x3704,0x3604,0x3604,
-    0x3704,0x3704,0x4604,0x4604,0x4704,0x4704,0x4604,0x4604,0x4704,0x3704,
-    0x3604,0x3704,0x3908,0x8004,0x3201,0x3201,0x3201,0x3201,0x3401,0x3401,
-    0x3401,0x3401,0x3601,0x3601,0x3601,0x3601,0x3701,0x3701,0x3701,0x3701,
-    0x3901,0x3901,0x3901,0x3901,0x4001,0x4001,0x4001,0x4001,0x3A04,0x8004,
-    0x3601,0x3601,0x3601,0x3601,0x3701,0x3701,0x3701,0x3701,0x3901,0x3901,
-    0x3901,0x3901,0x3A01,0x3A01,0x3A01,0x3A01,0x4101,0x4101,0x4101,0x4101,
-    0x4401,0x4401,0x4401,0x4401,0x4204,0x8038,0x4B04,0x4B04,0x4B01,0x4B01,
-    0x4B01,0x4B01,0x5004,0x4904,0x4904,0x4901,0x4901,0x4901,0x4901,0x4B04,
-    0x4704,0x4704,0x4701,0x4701,0x4701,0x4701,0x4B04,0x4B01,0x4B01,0x4B01,
-    0x4B01,0x4904,0x4704,0x4204,0x3B08,0x8004,0x4204,0x4708,0x8004,0x4204,
-    0x4704,0x4204,0x4704,0x4B04,0x5208,0x8008,0x5008,0x8004,0x4904,0x5008,
-    0x8004,0x4904,0x5004,0x4904,0x4604,0x4904,0x4208,0x8008,0x4704,0x4704,
-    0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,
-    0x4701,0x4701,0x4701,0x4701,0x4B04,0x4401,0x4401,0x4401,0x4401,0x4704,
-    0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,
-    0x4704,0x4704,0x4701,0x4701,0x4701,0x4701,0x4B04,0x4401,0x4401,0x4401,
-    0x4401,0x4704,0x4210,0x4210,0x4210,0x4208,0x8028,0x3610,0x3710,0x4008,
-    0x4008,0x3908,0x3908,0x3204,0x8004,0x4204,0x8004,0x4208,0x8028,0x4601,
-    0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,0x4601,
-    0x4601,0x4601,0x4601,0x4601,0x4601,0x4710,0x4008,0x4004,0x4004,0x3908,
-    0x3904,0x3904,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x4704,
-    0x4704,0x4704,0x4704,0x4704,0x4904,0x4904,0x4704,0x4704,0x4604,0x4604,
-    0x4704,0x4704,0x4404,0x4404,0x4210,0x4410,0x4210,0x4410,0x4208,0x4408,
-    0x4208,0x4408,0x4204,0x3204,0x3204,0x3204,0x3208,0x8020,0x3B04,0x8004,
-    0x3404,0x8004,0x4004,0x8004,0x3904,0x8004,0x3604,0x800C,0x4901,0x4901,
-    0x4901,0x4901,0x4901,0x4901,0x4901,0x4901,0x4704,0x8004,0x4904,0x8004,
-    0x4B10,0x4908,0x8008,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,0x5201,
-    0x5201,0x5201,0x5201,0x5001,0x5001,0x4B01,0x4B01,0x4901,0x4901,0x4704,
-    0x8004,0x5404,0x8004,0x5004,0x8004,0x4904,0x8004,0x5208,0x8004,0x5004,
-    0x5001,0x5001,0x5001,0x5001,0x4B04,0x8004,0x5004,0x5001,0x5001,0x5001,
-    0x5001,0x4B04,0x8004,0x4004,0x3704,0x3704,0x3904,0x3904,0x3B04,0x3B04,
-    0x3704,0x3704,0x3604,0x3604,0x3704,0x3704,0x3904,0x3904,0x3604,0x3604,
-    0x3704,0x3704,0x3904,0x3904,0x3B04,0x3B04,0x3704,0x3704,0x3604,0x3604,
-    0x3704,0x3704,0x3904,0x3904,0x3604,0x3604,0x3704,0x4704,0x4B04,0x4904,
-    0x4804,0x4404,0x4604,0x4804,0x4904,0x5004,0x4904,0x4704,0x4604,0x4204,
-    0x4404,0x4604,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,0x4704,
-    0x4704,0x4204,0x4204,0x4204,0x4204,0x4204,0x4204,0x4004,0x3B04,0x3704,
-    0x3904,0x3904,0x3B04,0x3B04,0x3704,0x3704,0x3604,0x3604,0x3704,0x3704,
-    0x3904,0x3904,0x3604,0x3604,0x3704,0x4704,0x4904,0x4904,0x4B04,0x4B04,
-    0x4704,0x4704,0x4604,0x4604,0x4704,0x4704,0x4904,0x4904,0x4604,0x4604,
-    0x4704,0x4704,0x4B04,0x4904,0x4804,0x4404,0x4604,0x4804,0x4904,0x5004,
-    0x4904,0x4704,0x4604,0x4204,0x4404,0x4604,0x4704,0x4704,0x4704,0x4704,
-    0x4704,0x4704,0x4704,0x4704,0x4701,0x4701,0x4701,0x4701,0x4904,0x5004,
-    0x5004,0x5004,0x5004,0x5004,0x4B04,0x4904,0x4204,0x4404,0x4604,0x4704,
-    0x4704,0x4904,0x4904,0x4B04,0x3604,0x3704,0x3904,0x3B04,0x3B04,0x4004,
-    0x4004,0x4004,0x4004,0x4104,0x4104,0x4208,0x8008,0x3901,0x3901,0x3901,
-    0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,
-    0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,
-    0x3901,0x3701,0x3701,0x3701,0x3701,0x3604,0x3708,0x8018,0x3901,0x3901,
-    0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,
-    0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,
-    0x3901,0x3901,0x3701,0x3701,0x3701,0x3701,0x3604,0x3708,0x8008,0x4708,
-    0x8008,0x4408,0x8008,0x4708,0x8008,0x3710,0x3710,0x3710,0x3708,0x3908,
-    0x3710,0x3710,0x3710,0x3708,0x3908,0x3704,0x3B04,0x4204,0x4704,0x4B04,
-    0x4704,0x5204,0x4B04,0x4708,0x3706,0x3702,0x3708,0x8008,
-    0x0000
-};
-
-static unsigned Voice3 [] = {
-    0x3708,0x8004,0x3204,0x3708,0x8004,0x3204,0x3704,0x3204,0x3704,0x3B04,
-    0x3208,0x8008,0x4008,0x8004,0x3904,0x4008,0x8004,0x3904,0x4004,0x3904,
-    0x3604,0x4904,0x4208,0x8008,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3904,0x3904,
-    0x3B04,0x3B04,0x3604,0x3604,0x3704,0x3704,0x3904,0x3904,0x3B08,0x8028,
-    0x3210,0x3410,0x3008,0x3008,0x3208,0x3208,0x2B04,0x8004,0x3204,0x8004,
-    0x3708,0x8008,0x4B10,0x5010,0x3201,0x3201,0x3201,0x3201,0x3201,0x3201,
-    0x3201,0x3201,0x3201,0x3201,0x3201,0x3201,0x3201,0x3201,0x3201,0x3201,
-    0x3410,0x3008,0x3008,0x3208,0x3208,0x3B14,0x3B02,0x3901,0x3B01,0x4004,
-    0x3904,0x4714,0x4702,0x4601,0x4701,0x4904,0x4604,0x3704,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3604,0x3604,0x3704,
-    0x3704,0x3404,0x3404,0x3204,0x3204,0x3204,0x3204,0x3204,0x3204,0x3204,
-    0x3204,0x3204,0x3204,0x3204,0x3204,0x3204,0x3204,0x3204,0x3204,0x3204,
-    0x3404,0x3604,0x3404,0x3204,0x3404,0x3604,0x3204,0x3704,0x3904,0x3B04,
-    0x3904,0x3704,0x3904,0x3B04,0x3804,0x3904,0x3904,0x3904,0x3904,0x3904,
-    0x3904,0x3904,0x3904,0x3904,0x2904,0x2904,0x2904,0x2908,0x8008,0x490A,
-    0x4702,0x4602,0x4402,0x4204,0x8004,0x3304,0x8004,0x3404,0x8004,0x3204,
-    0x8004,0x3104,0x8004,0x2904,0x800C,0x2A01,0x2A01,0x2A01,0x2A01,0x2A01,
-    0x2A01,0x2A01,0x2A01,0x2B04,0x8004,0x2704,0x8004,0x2908,0x3901,0x3901,
-    0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,
-    0x3801,0x3801,0x3801,0x3801,0x3701,0x3701,0x3701,0x3701,0x3401,0x3401,
-    0x3401,0x3401,0x3204,0x8004,0x3404,0x8004,0x3604,0x8004,0x3304,0x8004,
-    0x3404,0x8004,0x3204,0x8004,0x3104,0x8004,0x2904,0x8004,0x2B04,0x8004,
-    0x3704,0x8004,0x3904,0x8004,0x2904,0x8004,0x4604,0x4604,0x4704,0x4704,
-    0x4904,0x4904,0x4604,0x4604,0x4404,0x4404,0x4604,0x4604,0x4704,0x4704,
-    0x4404,0x4404,0x4604,0x4604,0x4704,0x4704,0x4904,0x4904,0x4604,0x4604,
-    0x4404,0x4404,0x4604,0x4604,0x4704,0x4704,0x4404,0x4404,0x4608,0x8008,
-    0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,
-    0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5408,0x8008,0x5401,0x5401,
-    0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,
-    0x5401,0x5401,0x5401,0x5401,0x5204,0x5604,0x5704,0x5904,0x5701,0x5701,
-    0x5701,0x5701,0x5901,0x5901,0x5B01,0x5B01,0x5904,0x5704,0x5701,0x5701,
-    0x5701,0x5701,0x5604,0x5204,0x5604,0x5601,0x5601,0x5601,0x5601,0x5404,
-    0x5204,0x5104,0x5204,0x4604,0x4704,0x4704,0x4904,0x4904,0x4604,0x4604,
-    0x4404,0x4404,0x4604,0x4604,0x4704,0x4704,0x4404,0x4404,0x4604,0x4604,
-    0x4704,0x4704,0x4904,0x4904,0x4604,0x4604,0x4404,0x4404,0x4604,0x4604,
-    0x4704,0x4704,0x4404,0x4404,0x4608,0x8008,0x5601,0x5601,0x5601,0x5601,
-    0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,
-    0x5601,0x5601,0x5408,0x8008,0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,
-    0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,
-    0x5204,0x5504,0x5704,0x5904,0x5701,0x5701,0x5701,0x5701,0x5901,0x5901,
-    0x5B01,0x5B01,0x5904,0x5704,0x5701,0x5701,0x5701,0x5701,0x5604,0x5204,
-    0x5604,0x5601,0x5601,0x5601,0x5601,0x5404,0x5204,0x5104,0x3204,0x2904,
-    0x2B04,0x3104,0x3204,0x3204,0x3404,0x3404,0x3604,0x3104,0x3204,0x3404,
-    0x3604,0x3604,0x3704,0x3704,0x3904,0x3904,0x3A04,0x3A04,0x3B08,0x8008,
-    0x3710,0x3910,0x4204,0x8004,0x4204,0x8004,0x4204,0x800C,0x3708,0x8004,
-    0x3204,0x3708,0x8004,0x3204,0x3704,0x3204,0x3704,0x3B04,0x3208,0x8008,
-    0x4008,0x8004,0x3904,0x4008,0x8004,0x3904,0x4004,0x3904,0x3604,0x4904,
-    0x4208,0x8008,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3904,0x3904,0x3B04,0x3B04,
-    0x3604,0x3604,0x3704,0x3704,0x3904,0x3904,0x3B08,0x8028,0x3210,0x3410,
-    0x3008,0x3008,0x3208,0x3208,0x2B04,0x8004,0x3204,0x8004,0x3708,0x8008,
-    0x4B10,0x5010,0x3201,0x3201,0x3201,0x3201,0x3201,0x3201,0x3201,0x3201,
-    0x3201,0x3201,0x3201,0x3201,0x3201,0x3201,0x3201,0x3201,0x3410,0x3008,
-    0x3008,0x3208,0x3208,0x3B14,0x3B02,0x3901,0x3B01,0x4004,0x3904,0x4714,
-    0x4702,0x4601,0x4701,0x4904,0x4604,0x3704,0x3704,0x3704,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x3704,0x3604,0x3604,0x3704,0x3704,0x3404,
-    0x3404,0x3204,0x3204,0x3204,0x3204,0x3204,0x3204,0x3204,0x3204,0x3204,
-    0x3204,0x3204,0x3204,0x3204,0x3204,0x3204,0x3204,0x3204,0x3404,0x3604,
-    0x3404,0x3204,0x3404,0x3604,0x3204,0x3704,0x3904,0x3B04,0x3904,0x3704,
-    0x3904,0x3B04,0x3804,0x3904,0x3904,0x3904,0x3904,0x3904,0x3904,0x3904,
-    0x3904,0x3904,0x2904,0x2904,0x2904,0x2908,0x8008,0x490A,0x4702,0x4602,
-    0x4402,0x4204,0x8004,0x3304,0x8004,0x3404,0x8004,0x3204,0x8004,0x3104,
-    0x8004,0x2904,0x800C,0x2A01,0x2A01,0x2A01,0x2A01,0x2A01,0x2A01,0x2A01,
-    0x2A01,0x2B04,0x8004,0x2704,0x8004,0x2908,0x3901,0x3901,0x3901,0x3901,
-    0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3901,0x3801,0x3801,
-    0x3801,0x3801,0x3701,0x3701,0x3701,0x3701,0x3401,0x3401,0x3401,0x3401,
-    0x3204,0x8004,0x3404,0x8004,0x3604,0x8004,0x3304,0x8004,0x3404,0x8004,
-    0x3204,0x8004,0x3104,0x8004,0x2904,0x8004,0x2B04,0x8004,0x3704,0x8004,
-    0x3904,0x8004,0x2904,0x8004,0x4604,0x4604,0x4704,0x4704,0x4904,0x4904,
-    0x4604,0x4604,0x4404,0x4404,0x4604,0x4604,0x4704,0x4704,0x4404,0x4404,
-    0x4604,0x4604,0x4704,0x4704,0x4904,0x4904,0x4604,0x4604,0x4404,0x4404,
-    0x4604,0x4604,0x4704,0x4704,0x4404,0x4404,0x4608,0x8008,0x5601,0x5601,
-    0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,
-    0x5601,0x5601,0x5601,0x5601,0x5408,0x8008,0x5401,0x5401,0x5401,0x5401,
-    0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,
-    0x5401,0x5401,0x5204,0x5604,0x5704,0x5904,0x5701,0x5701,0x5701,0x5701,
-    0x5901,0x5901,0x5B01,0x5B01,0x5904,0x5704,0x5701,0x5701,0x5701,0x5701,
-    0x5604,0x5204,0x5604,0x5601,0x5601,0x5601,0x5601,0x5404,0x5204,0x5104,
-    0x5204,0x4604,0x4704,0x4704,0x4904,0x4904,0x4604,0x4604,0x4404,0x4404,
-    0x4604,0x4604,0x4704,0x4704,0x4404,0x4404,0x4604,0x4604,0x4704,0x4704,
-    0x4904,0x4904,0x4604,0x4604,0x4404,0x4404,0x4604,0x4604,0x4704,0x4704,
-    0x4404,0x4404,0x4608,0x8008,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,
-    0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,0x5601,
-    0x5408,0x8008,0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,
-    0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,0x5401,0x5204,0x5504,
-    0x5704,0x5904,0x5701,0x5701,0x5701,0x5701,0x5901,0x5901,0x5B01,0x5B01,
-    0x5904,0x5704,0x5701,0x5701,0x5701,0x5701,0x5604,0x5204,0x5604,0x5601,
-    0x5601,0x5601,0x5601,0x5404,0x5204,0x5104,0x3204,0x2904,0x2B04,0x3104,
-    0x3204,0x3204,0x3404,0x3404,0x3604,0x3104,0x3204,0x3404,0x3604,0x3604,
-    0x3704,0x3704,0x3904,0x3904,0x3A04,0x3A04,0x3B08,0x8008,0x3710,0x3910,
-    0x4204,0x8004,0x4204,0x8004,0x4204,0x800C,0x3208,0x8004,0x2904,0x3208,
-    0x8004,0x2904,0x3204,0x2904,0x3204,0x3604,0x4908,0x8008,0x3908,0x8004,
-    0x3604,0x3908,0x8004,0x3604,0x3904,0x3604,0x3304,0x3604,0x2B08,0x8008,
-    0x4404,0x4404,0x4504,0x4504,0x4704,0x4704,0x4404,0x4404,0x4204,0x4204,
-    0x4404,0x4404,0x4504,0x4504,0x4204,0x4204,0x4404,0x4404,0x4504,0x4504,
-    0x4704,0x4704,0x4404,0x4404,0x4204,0x4204,0x4404,0x4404,0x4504,0x4504,
-    0x4204,0x4204,0x4404,0x4404,0x4504,0x4504,0x4704,0x4704,0x4404,0x4404,
-    0x4204,0x4204,0x4404,0x4404,0x4504,0x4504,0x4204,0x4204,0x4004,0x4004,
-    0x4204,0x4204,0x4404,0x4404,0x4004,0x4004,0x4004,0x4004,0x4204,0x4204,
-    0x4304,0x4304,0x4004,0x4004,0x3A04,0x3A04,0x3904,0x3904,0x3A04,0x3A04,
-    0x4904,0x4904,0x4A04,0x4A04,0x4904,0x4904,0x4A04,0x4A04,0x4904,0x4704,
-    0x4608,0x8004,0x2201,0x2201,0x2201,0x2201,0x2401,0x2401,0x2401,0x2401,
-    0x2601,0x2601,0x2601,0x2601,0x2701,0x2701,0x2701,0x2701,0x2901,0x2901,
-    0x2901,0x2901,0x3001,0x3001,0x3001,0x3001,0x2A04,0x8004,0x2601,0x2601,
-    0x2601,0x2601,0x2701,0x2701,0x2701,0x2701,0x2901,0x2901,0x2901,0x2901,
-    0x2A01,0x2A01,0x2A01,0x2A01,0x2101,0x2101,0x2101,0x2101,0x3401,0x3401,
-    0x3401,0x3401,0x3204,0x8004,0x4204,0x4404,0x4504,0x4704,0x4904,0x4A08,
-    0x4B08,0x5008,0x5108,0x5204,0x5204,0x5201,0x5201,0x5201,0x5201,0x5404,
-    0x5004,0x5004,0x5001,0x5001,0x5001,0x5001,0x5204,0x4B04,0x4B04,0x4B01,
-    0x4B01,0x4B01,0x4B01,0x5204,0x5201,0x5201,0x5201,0x5201,0x5004,0x4B04,
-    0x4904,0x4708,0x8004,0x3204,0x3708,0x8004,0x3204,0x3704,0x3204,0x3704,
-    0x3B04,0x4208,0x8008,0x4008,0x8004,0x3904,0x4008,0x8004,0x3904,0x4004,
-    0x3904,0x3604,0x3904,0x3208,0x8008,0x3704,0x3704,0x3704,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3904,
-    0x3904,0x3B04,0x3B04,0x3704,0x3704,0x3904,0x3904,0x3B04,0x3B04,0x4008,
-    0x8008,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,
-    0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x5010,0x4908,0x4908,
-    0x4708,0x4708,0x4408,0x4408,0x4008,0x3908,0x4204,0x8004,0x4604,0x8004,
-    0x4704,0x800C,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,
-    0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x5010,0x4B01,
-    0x4B01,0x4B01,0x4B01,0x4904,0x4904,0x4904,0x4901,0x4901,0x4901,0x4901,
-    0x4704,0x4704,0x4704,0x4408,0x4404,0x4404,0x4008,0x4004,0x4004,0x3B14,
-    0x3B01,0x3B01,0x3901,0x3B01,0x4001,0x4001,0x4001,0x4001,0x3904,0x4714,
-    0x4701,0x4701,0x4601,0x4701,0x4901,0x4901,0x4901,0x4901,0x4604,0x4B10,
-    0x5010,0x4B08,0x5210,0x5708,0x5610,0x5710,0x5610,0x5710,0x5608,0x5708,
-    0x5608,0x5708,0x5604,0x4204,0x4204,0x4204,0x4208,0x8008,0x4201,0x4201,
-    0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,0x4001,0x4001,
-    0x3B01,0x3B01,0x3901,0x3901,0x3704,0x8004,0x4404,0x8004,0x4004,0x8004,
-    0x3904,0x8004,0x4204,0x800C,0x4B0A,0x4902,0x4702,0x4602,0x5404,0x8004,
-    0x5004,0x8004,0x3208,0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,
-    0x4201,0x4201,0x4201,0x4201,0x4201,0x4101,0x4101,0x4101,0x4101,0x4001,
-    0x4001,0x4001,0x4001,0x3901,0x3901,0x3901,0x3901,0x3704,0x8004,0x3904,
-    0x8004,0x3B04,0x8004,0x3804,0x8004,0x3904,0x8004,0x3704,0x8004,0x3604,
-    0x8004,0x3204,0x8004,0x3404,0x8004,0x3004,0x8004,0x3204,0x8004,0x3204,
-    0x8004,0x2708,0x8018,0x3208,0x8018,0x2708,0x8018,0x3208,0x8018,0x3B08,
-    0x8008,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,
-    0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4908,0x8008,0x4901,
-    0x4901,0x4901,0x4901,0x4901,0x4901,0x4901,0x4901,0x4901,0x4901,0x4901,
-    0x4901,0x4901,0x4901,0x4901,0x4901,0x4704,0x4B04,0x5004,0x5204,0x5001,
-    0x5001,0x5001,0x5001,0x5201,0x5201,0x5401,0x5401,0x5204,0x5004,0x5001,
-    0x5001,0x5001,0x5001,0x4B04,0x4704,0x4B04,0x4B01,0x4B01,0x4B01,0x4B01,
-    0x4904,0x4704,0x4604,0x4704,0x3B04,0x4004,0x4004,0x4204,0x4204,0x3B04,
-    0x3B04,0x3904,0x3904,0x3B04,0x3B04,0x4004,0x4004,0x3904,0x3904,0x3B04,
-    0x4B04,0x5004,0x5004,0x5204,0x5204,0x4B04,0x4B04,0x4904,0x4904,0x4B04,
-    0x4B04,0x5004,0x5004,0x4904,0x4904,0x8004,0x3704,0x3B04,0x3904,0x3804,
-    0x3404,0x3604,0x3804,0x3904,0x4004,0x3904,0x3704,0x3604,0x3204,0x3404,
-    0x3604,0x3704,0x3704,0x3904,0x3B04,0x4004,0x4004,0x4004,0x4004,0x4204,
-    0x4204,0x4204,0x4204,0x3204,0x3204,0x3204,0x3204,0x3704,0x3204,0x3404,
-    0x3604,0x3704,0x3704,0x3904,0x3904,0x3B04,0x3604,0x3704,0x3904,0x3B04,
-    0x3B04,0x4004,0x4004,0x4204,0x4204,0x4304,0x4304,0x4408,0x8008,0x3001,
-    0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,
-    0x3001,0x3001,0x3001,0x3001,0x3001,0x3210,0x2708,0x8018,0x3001,0x3001,
-    0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,
-    0x3001,0x3001,0x3001,0x3001,0x3210,0x2708,0x8018,0x3008,0x8008,0x3208,
-    0x8008,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,
-    0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,
-    0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,
-    0x2704,0x2704,0x2704,0x2704,0x2B04,0x3204,0x3704,0x3B04,0x3704,0x4204,
-    0x3B04,0x3708,0x2706,0x2702,0x2708,0x8008,0x3208,0x8004,0x2904,0x3208,
-    0x8004,0x2904,0x3204,0x2904,0x3204,0x3604,0x4908,0x8008,0x3908,0x8004,
-    0x3604,0x3908,0x8004,0x3604,0x3904,0x3604,0x3304,0x3604,0x2B08,0x8008,
-    0x4404,0x4404,0x4504,0x4504,0x4704,0x4704,0x4404,0x4404,0x4204,0x4204,
-    0x4404,0x4404,0x4504,0x4504,0x4204,0x4204,0x4404,0x4404,0x4504,0x4504,
-    0x4704,0x4704,0x4404,0x4404,0x4204,0x4204,0x4404,0x4404,0x4504,0x4504,
-    0x4204,0x4204,0x4404,0x4404,0x4504,0x4504,0x4704,0x4704,0x4404,0x4404,
-    0x4204,0x4204,0x4404,0x4404,0x4504,0x4504,0x4204,0x4204,0x4004,0x4004,
-    0x4204,0x4204,0x4404,0x4404,0x4004,0x4004,0x4004,0x4004,0x4204,0x4204,
-    0x4304,0x4304,0x4004,0x4004,0x3A04,0x3A04,0x3904,0x3904,0x3A04,0x3A04,
-    0x4904,0x4904,0x4A04,0x4A04,0x4904,0x4904,0x4A04,0x4A04,0x4904,0x4704,
-    0x4608,0x8004,0x2201,0x2201,0x2201,0x2201,0x2401,0x2401,0x2401,0x2401,
-    0x2601,0x2601,0x2601,0x2601,0x2701,0x2701,0x2701,0x2701,0x2901,0x2901,
-    0x2901,0x2901,0x3001,0x3001,0x3001,0x3001,0x2A04,0x8004,0x2601,0x2601,
-    0x2601,0x2601,0x2701,0x2701,0x2701,0x2701,0x2901,0x2901,0x2901,0x2901,
-    0x2A01,0x2A01,0x2A01,0x2A01,0x2101,0x2101,0x2101,0x2101,0x3401,0x3401,
-    0x3401,0x3401,0x3204,0x8004,0x4204,0x4404,0x4504,0x4704,0x4904,0x4A08,
-    0x4B08,0x5008,0x5108,0x5204,0x5204,0x5201,0x5201,0x5201,0x5201,0x5404,
-    0x5004,0x5004,0x5001,0x5001,0x5001,0x5001,0x5204,0x4B04,0x4B04,0x4B01,
-    0x4B01,0x4B01,0x4B01,0x5204,0x5201,0x5201,0x5201,0x5201,0x5004,0x4B04,
-    0x4904,0x4708,0x8004,0x3204,0x3708,0x8004,0x3204,0x3704,0x3204,0x3704,
-    0x3B04,0x4208,0x8008,0x4008,0x8004,0x3904,0x4008,0x8004,0x3904,0x4004,
-    0x3904,0x3604,0x3904,0x3208,0x8008,0x3704,0x3704,0x3704,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,
-    0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3704,0x3904,
-    0x3904,0x3B04,0x3B04,0x3704,0x3704,0x3904,0x3904,0x3B04,0x3B04,0x4008,
-    0x8008,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,
-    0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x5010,0x4908,0x4908,
-    0x4708,0x4708,0x4408,0x4408,0x4008,0x3908,0x4204,0x8004,0x4604,0x8004,
-    0x4704,0x800C,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,
-    0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x5010,0x4B01,
-    0x4B01,0x4B01,0x4B01,0x4904,0x4904,0x4904,0x4901,0x4901,0x4901,0x4901,
-    0x4704,0x4704,0x4704,0x4408,0x4404,0x4404,0x4008,0x4004,0x4004,0x3B14,
-    0x3B01,0x3B01,0x3901,0x3B01,0x4001,0x4001,0x4001,0x4001,0x3904,0x4714,
-    0x4701,0x4701,0x4601,0x4701,0x4901,0x4901,0x4901,0x4901,0x4604,0x4B10,
-    0x5010,0x4B08,0x5210,0x5708,0x5610,0x5710,0x5610,0x5710,0x5608,0x5708,
-    0x5608,0x5708,0x5604,0x4204,0x4204,0x4204,0x4208,0x8008,0x4201,0x4201,
-    0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,0x4001,0x4001,
-    0x3B01,0x3B01,0x3901,0x3901,0x3704,0x8004,0x4404,0x8004,0x4004,0x8004,
-    0x3904,0x8004,0x4204,0x800C,0x4B0A,0x4902,0x4702,0x4602,0x5404,0x8004,
-    0x5004,0x8004,0x3208,0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,0x4201,
-    0x4201,0x4201,0x4201,0x4201,0x4201,0x4101,0x4101,0x4101,0x4101,0x4001,
-    0x4001,0x4001,0x4001,0x3901,0x3901,0x3901,0x3901,0x3704,0x8004,0x3904,
-    0x8004,0x3B04,0x8004,0x3804,0x8004,0x3904,0x8004,0x3704,0x8004,0x3604,
-    0x8004,0x3204,0x8004,0x3404,0x8004,0x3004,0x8004,0x3204,0x8004,0x3204,
-    0x8004,0x2708,0x8018,0x3208,0x8018,0x2708,0x8018,0x3208,0x8018,0x3B08,
-    0x8008,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,
-    0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4B01,0x4908,0x8008,0x4901,
-    0x4901,0x4901,0x4901,0x4901,0x4901,0x4901,0x4901,0x4901,0x4901,0x4901,
-    0x4901,0x4901,0x4901,0x4901,0x4901,0x4704,0x4B04,0x5004,0x5204,0x5001,
-    0x5001,0x5001,0x5001,0x5201,0x5201,0x5401,0x5401,0x5204,0x5004,0x5001,
-    0x5001,0x5001,0x5001,0x4B04,0x4704,0x4B04,0x4B01,0x4B01,0x4B01,0x4B01,
-    0x4904,0x4704,0x4604,0x4704,0x3B04,0x4004,0x4004,0x4204,0x4204,0x3B04,
-    0x3B04,0x3904,0x3904,0x3B04,0x3B04,0x4004,0x4004,0x3904,0x3904,0x3B04,
-    0x4B04,0x5004,0x5004,0x5204,0x5204,0x4B04,0x4B04,0x4904,0x4904,0x4B04,
-    0x4B04,0x5004,0x5004,0x4904,0x4904,0x8004,0x3704,0x3B04,0x3904,0x3804,
-    0x3404,0x3604,0x3804,0x3904,0x4004,0x3904,0x3704,0x3604,0x3204,0x3404,
-    0x3604,0x3704,0x3704,0x3904,0x3B04,0x4004,0x4004,0x4004,0x4004,0x4204,
-    0x4204,0x4204,0x4204,0x3204,0x3204,0x3204,0x3204,0x3704,0x3204,0x3404,
-    0x3604,0x3704,0x3704,0x3904,0x3904,0x3B04,0x3604,0x3704,0x3904,0x3B04,
-    0x3B04,0x4004,0x4004,0x4204,0x4204,0x4304,0x4304,0x4408,0x8008,0x3001,
-    0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,
-    0x3001,0x3001,0x3001,0x3001,0x3001,0x3210,0x2708,0x8018,0x3001,0x3001,
-    0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,0x3001,
-    0x3001,0x3001,0x3001,0x3001,0x3210,0x2708,0x8018,0x3008,0x8008,0x3208,
-    0x8008,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,
-    0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,
-    0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,0x2704,
-    0x2704,0x2704,0x2704,0x2704,0x2B04,0x3204,0x3704,0x3B04,0x3704,0x4204,
-    0x3B04,0x3708,0x2706,0x2702,0x2708,0x8008,
-    0x0000
-};
-
-
-
-#if defined(__C64__) || defined(__CBM510__)
-static unsigned long FreqTab [12] = {
-#ifndef NTSC
-    /* PAL */
-    0x008B38, 0x009381, 0x009C45, 0x00A590, 0x00AF68, 0x00B9D6,
-    0x00C4E4, 0x00D099, 0x00DCFF, 0x00EA24, 0x00F810, 0x0106D1,
-#else
-    /* NTSC */
-    0x00861E, 0x008E19, 0x00968B, 0x009F7F, 0x00A8FA, 0x00B307,
-    0x00BDAD, 0x00C8F4, 0x00D4E6, 0x00E18F, 0x00EEF9, 0x00FD2F,
-#endif
-};
-#elif defined(__C128__)
-static unsigned long FreqTab [12] = {
-    0x00892B, 0x009153, 0x0099F7, 0x00A31E, 0x00ACD2, 0x00B718,
-    0x00C1FD, 0x00CD85, 0x00D9BD, 0x00E6B0, 0x00F467, 0x0102F0,
-};
-#elif defined(__CBM610__)
-static unsigned long FreqTab [12] = {
-    0x004495, 0x0048AA, 0x004CFB, 0x00518F, 0x005669, 0x005B8C,
-    0x0060FE, 0x0066C3, 0x006CDE, 0x007358, 0x007A34, 0x008178,
-};
-#endif
-
-
-
-typedef struct {
-    unsigned char       DoneMask;       /* Set this if we're done */
-    unsigned char       Trigger;        /* Trigger value */
-    unsigned char       Ticks;          /* Ticks for this tone */
-    unsigned            Freq;           /* Actual frequency value */
-    unsigned*           Data;           /* Pointer to data */
-    struct __sid_voice* Voice;          /* Pointer to sid registers */
-} VoiceCtrl;
-
-/* Control structs for all three voices */
-static VoiceCtrl V1 = {
-    0x01, 0x11, 0, 0, Voice1, &SID.v1
-};
-static VoiceCtrl V2 = {
-    0x02, 0x41, 0, 0, Voice2, &SID.v2
-};
-static VoiceCtrl V3 = {
-    0x04, 0x11, 0, 0, Voice3, &SID.v3
-};
-
-/* Pointers to the structs for easy reference */
-static VoiceCtrl* V [3] = {
-    &V1, &V2, &V3
-};
-
-/* Screen dimensions */
-static unsigned char XSize, YSize;
-
-/* Variable that contains the time of the next clock tick to play a note */
-static unsigned char NextClock;
-
-/* Start- and runtime */
-static clock_t StartTime;
-
-/* Number of ticks for each tone */
-#define TICKS_PER_TONE  4
-
-/* Done flag. Contains one bit for each voice. Will contain 0x07 if all
-** voices have finished playing.
-*/
-static unsigned char Done;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void MakeTeeLine (unsigned char Y)
-/* Make a divider line */
-{
-    cputcxy (0, Y, CH_LTEE);
-    chline (XSize - 2);
-    cputc (CH_RTEE);
-}
-
-
-
-static void MakeNiceScreen (void)
-/* Make a nice screen */
-{
-    typedef struct {
-        unsigned char   Y;
-        char*           Msg;
-    } TextDesc;
-    static TextDesc Text [] = {
-        {   2, "Wolfgang Amadeus Mozart"        },
-        {   4, "\"Eine kleine Nachtmusik\""     },
-        {   5, "(KV 525)"                       },
-        {   9, "Ported to the SID in 1987 by" },
-        {  11, "Joachim von Bassewitz"          },
-        {  12, "(joachim@von-bassewitz.de)"     },
-        {  13, "and"                            },
-        {  14, "Ullrich von Bassewitz"          },
-        {  15, "(ullrich@von-bassewitz.de)"     },
-        {  18, "C Implementation by"            },
-        {  19, "Ullrich von Bassewitz"          },
-        {  23, "Press any key to quit..."       },
-    };
-
-    register const TextDesc* T;
-    unsigned char I;
-    unsigned char X;
-
-    /* Clear the screen hide the cursor, set colors */
-#ifdef __CBM610__
-    textcolor (COLOR_WHITE);
-#else
-    textcolor (COLOR_GRAY3);
-#endif
-    bordercolor (COLOR_BLACK);
-    bgcolor (COLOR_BLACK);
-    clrscr ();
-    cursor (0);
-
-    /* Top line */
-    cputcxy (0, 0, CH_ULCORNER);
-    chline (XSize - 2);
-    cputc (CH_URCORNER);
-
-    /* Left line */
-    cvlinexy (0, 1, 23);
-
-    /* Bottom line */
-    cputc (CH_LLCORNER);
-    chline (XSize - 2);
-    cputc (CH_LRCORNER);
-
-    /* Right line */
-    cvlinexy (XSize - 1, 1, 23);
-
-    /* Several divider lines */
-    MakeTeeLine (7);
-    MakeTeeLine (22);
-
-    /* Write something into the frame */
-    for (I = 0, T = Text; I < sizeof (Text) / sizeof (Text [0]); ++I) {
-        X = (XSize - strlen (T->Msg)) / 2;
-        cputsxy (X, T->Y, T->Msg);
-        ++T;
-    }
-}
-
-
-
-static void TimeSync (void)
-/* Sync the time for the next tone */
-{
-    static unsigned char Clock;
-
-    do {
-        Clock = clock ();
-    } while (Clock != NextClock);
-    NextClock = Clock + TICKS_PER_TONE;
-}
-
-
-
-static void DisplayTime (void)
-/* Display the running time */
-{
-    clock_t Time = (clock () - StartTime) / CLOCKS_PER_SEC;
-    unsigned Sec = Time % 60;
-    unsigned Min = Time / 60;
-
-    gotoxy (1, 0);
-    cprintf ("%02d:%02d", Min, Sec);
-}
-
-
-
-/* On the 510/610, the SID is in another bank (the system bank), so we cannot
-** just write to the memory space.
-*/
-#if defined(__CBM510__) || defined(__CBM610__)
-#  define outb(addr,val)        pokebsys ((unsigned)(addr), val)
-#  define outw(addr,val)        pokewsys ((unsigned)(addr), val)
-#else
-#  define outb(addr,val)        (*(addr)) = (val)
-#  define outw(addr,val)        (*(addr)) = (val)
-#endif
-
-
-
-int main (void)
-{
-    unsigned char       I;
-    unsigned char       Tone;
-    unsigned char       Octave;
-    unsigned            Val;
-    struct __sid_voice* Voice;
-    register VoiceCtrl* VC;
-
-    /* Initialize the debugger */
-    DbgInit (0);
-
-    /* Get the screen dimensions */
-    screensize (&XSize, &YSize);
-
-    /* Make a nice screen */
-    MakeNiceScreen ();
-
-    /* Initialize the SID */
-    outw (&SID.v1.pw, 0x0800);
-    outb (&SID.v1.ad, 0x33);
-    outb (&SID.v1.sr, 0xF0);
-    outw (&SID.v2.pw, 0x0800);
-    outb (&SID.v2.ad, 0x77);
-    outb (&SID.v2.sr, 0x74);
-    outw (&SID.v3.pw, 0x0800);
-    outb (&SID.v3.ad, 0x77);
-    outb (&SID.v3.sr, 0xD2);
-    outw (&SID.flt_freq, 0xF0F0);
-    outb (&SID.flt_ctrl, 0xF2);
-    outb (&SID.amp, 0x5F);
-
-    /* Sync the clock */
-    NextClock = StartTime = clock ();
-    NextClock += TICKS_PER_TONE;
-
-    /* Play each voice until all three are done */
-    while (Done != 0x07) {
-
-        /* Display the time in the lower left corner */
-        DisplayTime ();
-
-        /* Wait for the next run */
-        TimeSync ();
-
-        /* Check for a key */
-        if (kbhit ()) {
-            if (cgetc () == 'd') {
-                /* Start the debugger */
-                BREAK ();
-            } else {
-                /* Stop playing music */
-                break;
-            }
-        }
-
-        /* Play all three voices */
-        for (I = 0; I < 3; ++I) {
-
-            /* Get a pointer to this voice */
-            VC = V [I];
-            Voice = VC->Voice;
-
-            /* Is this voice done? */
-            if (Done & VC->DoneMask) {
-                /* Voice already done */
-                continue;
-            }
-
-            /* Do we have any more ticks to play? */
-            if (VC->Ticks == 0) {
-                /* We need new data */
-                if ((Val = *VC->Data) == 0) {
-                    /* End of data. Mark the voice as done */
-                    Done |= VC->DoneMask;
-                    continue;
-                }
-                ++VC->Data;
-
-                /* Get the ticks from the data */
-                VC->Ticks = (Val & 0x7F) - 1;
-
-                /* Check if this is a tone or a pause */
-                if (Val & 0x8000) {
-                    /* This is a pause. Remember it and shut off the SID */
-                    outb (&Voice->ctrl, VC->Trigger & 0xFE);
-                } else {
-                    /* This is a tone. Extract the attributes. */
-                    Tone = (Val >> 8) & 0x0F;
-                    Octave = ((Val >> 12) & 0x07) ^ 0x07;
-                    /* Calculate the frequency */
-                    VC->Freq = FreqTab [Tone] >> Octave;
-                    /* Set the frequency */
-                    outw (&Voice->freq, VC->Freq);
-                    /* Start the tone */
-                    outb (&Voice->ctrl, VC->Trigger);
-                }
-            } else {
-                /* Decrement the ticks. If this is the last tick of a tone,
-                ** reset bit 0 of the trigger value and write it back to the
-                ** SID to start the release phase.
-                */
-                if (--(VC->Ticks) == 0) {
-                    outb (&Voice->ctrl, VC->Trigger & 0xFE);
-                }
-            }
-        }
-    }
-
-    /* Reset the SID */
-    outb (&SID.v1.ctrl, 0x00);
-    outb (&SID.v2.ctrl, 0x00);
-    outb (&SID.v3.ctrl, 0x00);
-
-    /* Clear the screen */
-    clrscr ();
-
-    /* If we have a character, remove it from the buffer */
-    if (kbhit ()) {
-        cgetc ();
-    }
-
-    /* Done */
-    return 0;
-}
-
-
-
diff --git a/samples/overlaydemo.c b/samples/overlaydemo.c
deleted file mode 100644 (file)
index 42e7571..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
-** Minimalistic overlay demo program.
-**
-** Shows how to load overlay files from disk.
-**
-** 2009-10-02, Oliver Schmidt (ol.sc@web.de)
-**
-*/
-
-
-
-#include <stdio.h>
-#include <conio.h>
-#ifndef __CBM__
-#include <fcntl.h>
-#include <unistd.h>
-#else
-#include <device.h>
-#endif
-
-
-extern void _OVERLAY1_LOAD__[], _OVERLAY1_SIZE__[];
-extern void _OVERLAY2_LOAD__[], _OVERLAY2_SIZE__[];
-extern void _OVERLAY3_LOAD__[], _OVERLAY3_SIZE__[];
-
-
-/* Functions resident in an overlay can call back functions resident in the
-** main program at any time without any precautions. The function log() is
-** an example for such a function resident in the main program.
-*/
-void log (char *msg)
-{
-    printf ("Log: %s\n", msg);
-}
-
-
-/* In a real-world overlay program one would probably not use a #pragma but
-** rather place all the code of certain source files into the overlay by
-** compiling them with --code-name OVERLAY1.
-*/
-#pragma code-name (push, "OVERLAY1");
-
-void foo (void)
-{
-    /* Functions resident in an overlay can access all program variables and
-    ** constants at any time without any precautions because those are never
-    ** placed in overlays. The string constant below is an example for such
-    ** a constant resident in the main program.
-    */
-    log ("Calling main from overlay 1");
-}
-
-#pragma code-name (pop);
-
-
-#pragma code-name (push, "OVERLAY2");
-
-void bar (void)
-{
-    log ("Calling main from overlay 2");
-}
-
-#pragma code-name (pop);
-
-
-#pragma code-name (push, "OVERLAY3");
-
-void foobar (void)
-{
-    log ("Calling main from overlay 3");
-}
-
-#pragma code-name(pop);
-
-
-unsigned char loadfile (char *name, void *addr, void *size)
-{
-#ifndef __CBM__
-
-    int file = open (name, O_RDONLY);
-    if (file == -1) {
-        log ("Opening overlay file failed");
-        return 0;
-    }
-    read (file, addr, (unsigned) size);
-    close (file);
-
-#else
-
-    /* Avoid compiler warnings about unused parameters. */
-    (void) addr; (void) size;
-    if (cbm_load (name, getcurrentdevice (), NULL) == 0) {
-        log ("Loading overlay file failed");
-        return 0;
-    }
-
-#endif
-    return 1;
-}
-
-
-void main (void)
-{
-    log ("Calling overlay 1 from main");
-
-    /* The symbols _OVERLAY1_LOAD__ and _OVERLAY1_SIZE__ were generated by the
-    ** linker. They contain the overlay area address and size specific to a
-    ** certain program.
-    */
-    if (loadfile ("ovrldemo.1", _OVERLAY1_LOAD__, _OVERLAY1_SIZE__)) {
-
-        /* The linker makes sure that the call to foo() ends up at the right mem
-        ** addr. However it's up to user to make sure that the - right - overlay
-        ** is actually loaded before making the the call.
-        */
-        foo ();
-    }
-
-    log ("Calling overlay 2 from main");
-
-    /* Replacing one overlay with another one can only happen from the main
-    ** program. This implies that an overlay can never load another overlay.
-    */
-    if (loadfile ("ovrldemo.2", _OVERLAY2_LOAD__, _OVERLAY2_SIZE__)) {
-        bar ();
-    }
-
-    log ("Calling overlay 3 from main");
-    if (loadfile ("ovrldemo.3", _OVERLAY3_LOAD__, _OVERLAY3_SIZE__)) {
-        foobar ();
-    }
-
-    cgetc ();
-}
diff --git a/samples/plasma.c b/samples/plasma.c
deleted file mode 100644 (file)
index 7b092ec..0000000
+++ /dev/null
@@ -1,303 +0,0 @@
-/*****************************************************************************\
-** plasma test program for cc65.                                             **
-**                                                                           **
-** (w)2001 by groepaz/hitmen                                                 **
-**                                                                           **
-** Cleanup and porting by Ullrich von Bassewitz.                             **
-**                                                                           **
-\*****************************************************************************/
-
-
-
-#include <stdlib.h>
-#include <time.h>
-#include <conio.h>
-
-
-
-#if defined(__C64__) || defined(__C128__)
-#  define SCREEN1               0xE000
-#  define SCREEN2               0xE400
-#  define CHARSET               0xE800
-#  define outb(addr,val)        (*(addr)) = (val)
-#  define inb(addr)             (*(addr))
-#elif defined(__CBM510__)
-#  define SCREEN1               0xF000
-#  define SCREEN2               0xF400
-#  define CHARSET               0xE000
-#  define outb(addr,val)        pokebsys ((unsigned)(addr), val)
-#  define inb(addr)             peekbsys ((unsigned)(addr))
-#elif defined(__PLUS4__)
-#  define SCREEN1               0x6400
-#  define SCREEN2               0x6C00
-#  define CHARSET               0x7000
-#  define outb(addr,val)        (*(addr)) = (val)
-#  define inb(addr)             (*(addr))
-#endif
-
-
-
-/* Values for the VIC address register to switch between the two pages */
-#if defined(__PLUS4__)
-#define PAGE1                   ((SCREEN1 >> 8) & 0xF8)
-#define PAGE2                   ((SCREEN2 >> 8) & 0xF8)
-#define CHARADR                 ((CHARSET >> 8) & 0xFC)
-#else
-#define PAGE1                   ((SCREEN1 >> 6) & 0xF0) | ((CHARSET >> 10) & 0x0E)
-#define PAGE2                   ((SCREEN2 >> 6) & 0xF0) | ((CHARSET >> 10) & 0x0E)
-#endif
-
-
-
-/* Use static local variables for speed */
-#pragma static-locals (1);
-
-
-
-static const unsigned char sinustable[0x100] = {
-    0x80, 0x7d, 0x7a, 0x77, 0x74, 0x70, 0x6d, 0x6a,
-    0x67, 0x64, 0x61, 0x5e, 0x5b, 0x58, 0x55, 0x52,
-    0x4f, 0x4d, 0x4a, 0x47, 0x44, 0x41, 0x3f, 0x3c,
-    0x39, 0x37, 0x34, 0x32, 0x2f, 0x2d, 0x2b, 0x28,
-    0x26, 0x24, 0x22, 0x20, 0x1e, 0x1c, 0x1a, 0x18,
-    0x16, 0x15, 0x13, 0x11, 0x10, 0x0f, 0x0d, 0x0c,
-    0x0b, 0x0a, 0x08, 0x07, 0x06, 0x06, 0x05, 0x04,
-    0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
-    0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03,
-    0x03, 0x04, 0x05, 0x06, 0x06, 0x07, 0x08, 0x0a,
-    0x0b, 0x0c, 0x0d, 0x0f, 0x10, 0x11, 0x13, 0x15,
-    0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, 0x24,
-    0x26, 0x28, 0x2b, 0x2d, 0x2f, 0x32, 0x34, 0x37,
-    0x39, 0x3c, 0x3f, 0x41, 0x44, 0x47, 0x4a, 0x4d,
-    0x4f, 0x52, 0x55, 0x58, 0x5b, 0x5e, 0x61, 0x64,
-    0x67, 0x6a, 0x6d, 0x70, 0x74, 0x77, 0x7a, 0x7d,
-    0x80, 0x83, 0x86, 0x89, 0x8c, 0x90, 0x93, 0x96,
-    0x99, 0x9c, 0x9f, 0xa2, 0xa5, 0xa8, 0xab, 0xae,
-    0xb1, 0xb3, 0xb6, 0xb9, 0xbc, 0xbf, 0xc1, 0xc4,
-    0xc7, 0xc9, 0xcc, 0xce, 0xd1, 0xd3, 0xd5, 0xd8,
-    0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, 0xe6, 0xe8,
-    0xea, 0xeb, 0xed, 0xef, 0xf0, 0xf1, 0xf3, 0xf4,
-    0xf5, 0xf6, 0xf8, 0xf9, 0xfa, 0xfa, 0xfb, 0xfc,
-    0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff,
-    0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfd,
-    0xfd, 0xfc, 0xfb, 0xfa, 0xfa, 0xf9, 0xf8, 0xf6,
-    0xf5, 0xf4, 0xf3, 0xf1, 0xf0, 0xef, 0xed, 0xeb,
-    0xea, 0xe8, 0xe6, 0xe4, 0xe2, 0xe0, 0xde, 0xdc,
-    0xda, 0xd8, 0xd5, 0xd3, 0xd1, 0xce, 0xcc, 0xc9,
-    0xc7, 0xc4, 0xc1, 0xbf, 0xbc, 0xb9, 0xb6, 0xb3,
-    0xb1, 0xae, 0xab, 0xa8, 0xa5, 0xa2, 0x9f, 0x9c,
-    0x99, 0x96, 0x93, 0x90, 0x8c, 0x89, 0x86, 0x83
-};
-
-
-
-static void doplasma (register unsigned char* scrn)
-{
-    unsigned char xbuf[40];
-    unsigned char ybuf[25];
-    unsigned char c1a,c1b;
-    unsigned char c2a,c2b;
-    unsigned char c1A,c1B;
-    unsigned char c2A,c2B;
-    register unsigned char i, ii;
-
-    c1a = c1A;
-    c1b = c1B;
-    for (ii = 0; ii < 25; ++ii) {
-        ybuf[ii] = (sinustable[c1a] + sinustable[c1b]);
-        c1a += 4;
-        c1b += 9;
-    }
-    c1A += 3;
-    c1B -= 5;
-    c2a = c2A;
-    c2b = c2B;
-    for (i = 0; i < 40; ++i) {
-        xbuf[i] = (sinustable[c2a] + sinustable[c2b]);
-        c2a += 3;
-        c2b += 7;
-    }
-    c2A += 2;
-    c2B -= 3;
-    for (ii = 0; ii < 25; ++ii) {
-        /* Unrolling the following loop will give a speed increase of
-        ** nearly 100% (~24fps), but it will also increase the code
-        ** size a lot.
-        */
-        for (i = 0; i < 40; ++i, ++scrn) {
-            *scrn = (xbuf[i] + ybuf[ii]);
-        }
-    }
-}
-
-
-
-static void makechar (void)
-{
-    static const unsigned char bittab[8] = {
-        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
-    };
-    unsigned char i, ii, b, s;
-    unsigned c;
-
-    gotoxy (0, 1);
-    for (c = 0; c < 0x100; ++c) {
-        s = sinustable[c];
-        for (i = 0; i < 8; ++i){
-            b = 0;
-            for (ii = 0; ii < 8; ++ii) {
-                if ((rand() & 0xFF) > s) {
-                    b |= bittab[ii];
-                }
-            }
-            ((unsigned char*)CHARSET) [(c*8) + i] = b;
-        }
-        if ((c & 0x07) == 0) {
-            cputc ('.');
-        }
-    }
-}
-
-
-
-int main (void)
-{
-    unsigned char border;
-    unsigned char background;
-    unsigned char text;
-    unsigned char v;
-    clock_t       t;
-    unsigned long f = 0;
-    unsigned long sec;
-    unsigned      sec10;
-    unsigned long fps;
-    unsigned      fps10;
-
-
-#if defined(__C64__)
-    unsigned char block;
-#endif
-#if defined(__C128__)
-    unsigned char block;
-    unsigned char initflag;
-    unsigned char graphflag;
-#endif
-#if defined(__PLUS4__)
-    unsigned int i;
-    unsigned char v2;
-#endif
-
-    clrscr ();
-    cprintf ("Making charset, mompls");
-    makechar();
-
-    /* Set the border and background colors */
-    border     = bordercolor (COLOR_BLUE);
-    background = bgcolor (COLOR_BLUE);
-    text       = textcolor (COLOR_BLACK);
-    clrscr ();
-
-#if defined(__C64__) || defined(__C128__)
-    /* Move the VIC 16K block */
-    block = inb (&CIA2.pra);
-    outb (&CIA2.pra, (block & 0xFC) | ((SCREEN1 >> 14) ^ 0x03));
-#endif
-#if defined(__C128__)
-    /* Save and change some flags, so that kernal/basic interrupt handler will
-    ** not interfere with our routine.
-    */
-    initflag = *(unsigned char*) 0xA04;
-    *(unsigned char*) 0xA04 &= 0xFE;
-    graphflag = *(unsigned char*) 0xD8;
-    *(unsigned char*) 0xD8 = 0xFF;
-#endif
-
-    /* Remember the VIC address register */
-#if defined(__PLUS4__)
-    v = inb (&TED.char_addr);
-    v2 = inb (&TED.video_addr);
-#else
-    v = inb (&VIC.addr);
-#endif
-
-#if defined(__PLUS4__)
-    for (i=0;i<1000;i++) {
-        ((unsigned char *) (SCREEN1-0x0400))[i] = 0;
-        ((unsigned char *) (SCREEN2-0x0400))[i] = 0;
-    }
-    outb (&TED.char_addr, CHARADR);
-#endif
-
-    /* Run the demo until a key was hit */
-    t = clock ();
-    while (!kbhit()) {
-        /* Build page 1, then make it visible */
-        doplasma ((unsigned char*)SCREEN1);
-#if defined(__PLUS4__)
-        outb (&TED.video_addr, PAGE1);
-#else
-        outb (&VIC.addr, PAGE1);
-#endif
-
-        /* Build page 2, then make it visible */
-        doplasma ((unsigned char*)SCREEN2);
-#if defined(__PLUS4__)
-        outb (&TED.video_addr, PAGE2);
-#else
-        outb (&VIC.addr, PAGE2);
-#endif
-
-        /* Count frames */
-        f += 2;
-    }
-    t = clock() - t;
-
-    /* Switch back the VIC screen */
-#if defined(__PLUS4__)
-    outb (&TED.video_addr, v2);
-    outb (&TED.char_addr, v);
-#else
-    outb (&VIC.addr, v);
-#endif
-
-#if defined(__C64__) || defined(__C128__)
-    /* Move back the VIC 16K block */
-    outb (&CIA2.pra, block);
-#endif
-#if defined(__C128__)
-    /* Restore the flags */
-    *(unsigned char*) 0xA04 = initflag;
-    *(unsigned char*) 0xD8  = graphflag;
-#endif
-
-    /* Fetch the character from the keyboard buffer and discard it */
-    (void) cgetc();
-
-    /* Reset screen colors */
-    bordercolor (border);
-    bgcolor (background);
-    textcolor (text);
-    clrscr ();
-
-    /* Calculate stats */
-    sec   = (t * 10) / CLK_TCK;
-    sec10 = sec % 10;
-    sec  /= 10;
-    fps   = (f * (CLK_TCK * 10)) / t;
-    fps10 = fps % 10;
-    fps  /= 10;
-
-    /* Output stats */
-    gotoxy (0, 0); cprintf ("time  : %lu.%us", sec, sec10);
-    gotoxy (0, 1); cprintf ("frames: %lu", f);
-    gotoxy (0, 2); cprintf ("fps   : %lu.%u", fps, fps10);
-
-    /* Wait for a key, then end */
-    cputsxy (0, 4, "Press any key when done...");
-    (void) cgetc ();
-
-    /* Done */
-    return EXIT_SUCCESS;
-}
-
-
diff --git a/samples/sieve.c b/samples/sieve.c
deleted file mode 100644 (file)
index 9f110ec..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
-** Calculate all primes up to a specific number.
-*/
-
-
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <time.h>
-#include <conio.h>
-
-
-/* Workaround missing clock stuff */
-#ifdef __APPLE2__
-#  define clock()               0
-#  define CLOCKS_PER_SEC        1
-#endif
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-#define COUNT           16384           /* Up to what number? */
-#define SQRT_COUNT      128             /* Sqrt of COUNT */
-
-static unsigned char Sieve[COUNT];
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-#pragma static-locals(1);
-
-
-
-static char ReadUpperKey (void)
-/* Read a key from console, convert to upper case and return */
-{
-    return toupper (cgetc ());
-}
-
-
-
-int main (void)
-{
-    /* Clock variable */
-    clock_t Ticks;
-    unsigned Sec;
-    unsigned Milli;
-
-    /* This is an example where register variables make sense */
-    register unsigned char* S;
-    register unsigned       I;
-    register unsigned       J;
-
-    /* Output a header */
-    printf ("Sieve benchmark - calculating primes\n");
-    printf ("between 2 and %u\n", COUNT);
-    printf ("Please wait patiently ...\n");
-
-    /* Read the clock */
-    Ticks = clock();
-
-    /* Execute the sieve */
-    I = 2;
-    while (I < SQRT_COUNT) {
-        if (Sieve[I] == 0) {
-            /* Prime number - mark multiples */
-            J = I*2;
-            S = &Sieve[J];
-            while (J < COUNT) {
-                *S = 1;
-                S += I;
-                J += I;
-            }
-        }
-        ++I;
-    }
-
-    /* Calculate the time used */
-    Ticks = clock() - Ticks;
-    Sec = (unsigned) (Ticks / CLOCKS_PER_SEC);
-    Milli = ((Ticks % CLOCKS_PER_SEC) * 1000) / CLOCKS_PER_SEC;
-
-    /* Print the time used */
-    printf ("Time used: %u.%03u seconds\n", Sec, Milli);
-    printf ("Q to quit, any other key for list\n");
-
-    /* Wait for a key and print the list if not 'Q' */
-    if (ReadUpperKey () != 'Q') {
-        /* Print the result */
-        J = 0;
-        for (I = 2; I < COUNT; ++I) {
-            if (Sieve[I] == 0) {
-                printf ("%4d\n", I);
-                if (++J == 23) {
-                    printf ("Q to quit, any other key continues\n");
-                    if (ReadUpperKey () == 'Q') {
-                        break;
-                    }
-                    J = 0;
-                }
-            }
-            if (kbhit() && ReadUpperKey == 'Q') {
-                break;
-            }
-        }
-    }
-
-    return EXIT_SUCCESS;
-}
-
-
-
diff --git a/samples/tgidemo.c b/samples/tgidemo.c
deleted file mode 100644 (file)
index a080206..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <cc65.h>
-#include <conio.h>
-#include <ctype.h>
-#include <modload.h>
-#include <tgi.h>
-
-
-
-#ifndef DYN_DRV
-#  define DYN_DRV       1
-#endif
-
-#define COLOR_BACK      TGI_COLOR_BLACK
-#define COLOR_FORE      TGI_COLOR_WHITE
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Driver stuff */
-static unsigned MaxX;
-static unsigned MaxY;
-static unsigned AspectRatio;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void CheckError (const char* S)
-{
-    unsigned char Error = tgi_geterror ();
-    if (Error != TGI_ERR_OK) {
-        printf ("%s: %d\n", S, Error);
-        exit (EXIT_FAILURE);
-    }
-}
-
-
-
-static void DoWarning (void)
-/* Warn the user that the TGI driver is needed for this program */
-{
-    printf ("Warning: This program needs the TGI\n"
-            "driver on disk! Press 'y' if you have\n"
-            "it - any other key exits.\n");
-    if (tolower (cgetc ()) != 'y') {
-        exit (EXIT_SUCCESS);
-    }
-    printf ("Ok. Please wait patiently...\n");
-}
-
-
-
-static void DoCircles (void)
-{
-    static const unsigned char Palette[2] = { TGI_COLOR_WHITE, TGI_COLOR_ORANGE };
-    unsigned char I;
-    unsigned char Color = COLOR_FORE;
-    unsigned X = MaxX / 2;
-    unsigned Y = MaxY / 2;
-
-    tgi_setpalette (Palette);
-    while (!kbhit ()) {
-        tgi_setcolor (COLOR_FORE);
-        tgi_line (0, 0, MaxX, MaxY);
-        tgi_line (0, MaxY, MaxX, 0);
-        tgi_setcolor (Color);
-        for (I = 10; I < 240; I += 10) {
-            tgi_ellipse (X, Y, I, tgi_imulround (I, AspectRatio));
-        }
-        Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
-    }
-
-    cgetc ();
-    tgi_clear ();
-}
-
-
-
-static void DoCheckerboard (void)
-{
-    static const unsigned char Palette[2] = { TGI_COLOR_WHITE, TGI_COLOR_BLACK };
-    unsigned X, Y;
-    unsigned char Color;
-
-    tgi_setpalette (Palette);
-    Color = COLOR_BACK;
-    while (1) {
-        for (Y = 0; Y <= MaxY; Y += 10) {
-            for (X = 0; X <= MaxX; X += 10) {
-                tgi_setcolor (Color);
-                tgi_bar (X, Y, X+9, Y+9);
-                Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
-                if (kbhit ()) {
-                    cgetc ();
-                    tgi_clear ();
-                    return;
-                }
-            }
-            Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
-        }
-        Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
-    }
-}
-
-
-
-static void DoDiagram (void)
-{
-    static const unsigned char Palette[2] = { TGI_COLOR_WHITE, TGI_COLOR_BLACK };
-    int XOrigin, YOrigin;
-    int Amp;
-    int X, Y;
-    unsigned I;
-
-    tgi_setpalette (Palette);
-    tgi_setcolor (COLOR_FORE);
-
-    /* Determine zero and aplitude */
-    YOrigin = MaxY / 2;
-    XOrigin = 10;
-    Amp     = (MaxY - 19) / 2;
-
-    /* Y axis */
-    tgi_line (XOrigin, 10, XOrigin, MaxY-10);
-    tgi_line (XOrigin-2, 12, XOrigin, 10);
-    tgi_lineto (XOrigin+2, 12);
-
-    /* X axis */
-    tgi_line (XOrigin, YOrigin, MaxX-10, YOrigin);
-    tgi_line (MaxX-12, YOrigin-2, MaxX-10, YOrigin);
-    tgi_lineto (MaxX-12, YOrigin+2);
-
-    /* Sine */
-    tgi_gotoxy (XOrigin, YOrigin);
-    for (I = 0; I <= 360; I += 5) {
-
-        /* Calculate the next points */
-        X = (int) (((long) (MaxX - 19) * I) / 360);
-        Y = (int) (((long) Amp * -cc65_sin (I)) / 256);
-
-        /* Draw the line */
-        tgi_lineto (XOrigin + X, YOrigin + Y);
-    }
-
-    cgetc ();
-    tgi_clear ();
-}
-
-
-
-static void DoLines (void)
-{
-    static const unsigned char Palette[2] = { TGI_COLOR_WHITE, TGI_COLOR_BLACK };
-    unsigned X;
-
-    tgi_setpalette (Palette);
-    tgi_setcolor (COLOR_FORE);
-
-    for (X = 0; X <= MaxY; X += 10) {
-        tgi_line (0, 0, MaxY, X);
-        tgi_line (0, 0, X, MaxY);
-        tgi_line (MaxY, MaxY, 0, MaxY-X);
-        tgi_line (MaxY, MaxY, MaxY-X, 0);
-    }
-
-    cgetc ();
-    tgi_clear ();
-}
-
-
-
-int main (void)
-{
-    unsigned char Border;
-
-#if DYN_DRV
-    /* Warn the user that the tgi driver is needed */
-    DoWarning ();
-
-    /* Load and initialize the driver */
-    tgi_load_driver (tgi_stddrv);
-    CheckError ("tgi_load_driver");
-#else
-    /* Install the driver */
-    tgi_install (tgi_static_stddrv);
-    CheckError ("tgi_install");
-#endif
-
-    tgi_init ();
-    CheckError ("tgi_init");
-    tgi_clear ();
-
-    /* Get stuff from the driver */
-    MaxX = tgi_getmaxx ();
-    MaxY = tgi_getmaxy ();
-    AspectRatio = tgi_getaspectratio ();
-
-    /* Set the palette, set the border color */
-    Border = bordercolor (COLOR_BLACK);
-
-    /* Do graphics stuff */
-    DoCircles ();
-    DoCheckerboard ();
-    DoDiagram ();
-    DoLines ();
-
-#if DYN_DRV
-    /* Unload the driver */
-    tgi_unload ();
-#else
-    /* Uninstall the driver */
-    tgi_uninstall ();
-#endif
-
-    /* Reset the border */
-    (void) bordercolor (Border);
-
-    /* Done */
-    printf ("Done\n");
-    return EXIT_SUCCESS;
-}
diff --git a/samples/tutorial/hello.c b/samples/tutorial/hello.c
deleted file mode 100644 (file)
index 41be9d6..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-extern const char text[];       /* In text.s */
-
-int main (void)
-{
-    printf ("%s\n", text);
-    return EXIT_SUCCESS;
-}
-
-
diff --git a/samples/tutorial/text.s b/samples/tutorial/text.s
deleted file mode 100644 (file)
index a72be18..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-
-        .export _text
-        _text:  .asciiz "Hello world!"
-
diff --git a/src/.gitignore b/src/.gitignore
deleted file mode 100644 (file)
index d2b9fe7..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-ipch/
-*.suo
-*.sdf
-*.opensdf
-*.vcxproj.filters
-*.vcxproj.user
diff --git a/src/Makefile b/src/Makefile
deleted file mode 100644 (file)
index 5aafc4b..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-ifneq ($(shell echo),)
-  CMD_EXE = 1
-endif
-
-PROGS = ar65  \
-        ca65  \
-        cc65  \
-        cl65  \
-        co65  \
-        da65  \
-        grc65 \
-        ld65  \
-        od65  \
-        sim65 \
-        sp65
-
-.PHONY: all mostlyclean clean install zip avail unavail bin $(PROGS)
-
-.SUFFIXES:
-
-bindir  := $(prefix)/bin
-datadir := $(if $(prefix),$(prefix)/share/cc65,$(abspath ..))
-
-CA65_INC = $(datadir)/asminc
-CC65_INC = $(datadir)/include
-LD65_LIB = $(datadir)/lib
-LD65_OBJ = $(datadir)/lib
-LD65_CFG = $(datadir)/cfg
-
-ifdef CMD_EXE
-  NULLDEV = nul:
-  DIRLIST = $(strip $(foreach dir,$1,$(wildcard $(dir))))
-  MKDIR = mkdir $(subst /,\,$1)
-  RMDIR = $(if $(DIRLIST),rmdir /s /q $(subst /,\,$(DIRLIST)))
-else
-  NULLDEV = /dev/null
-  MKDIR = mkdir -p $1
-  RMDIR = $(RM) -r $1
-endif
-
-CC = $(CROSS_COMPILE)gcc
-AR = $(CROSS_COMPILE)ar
-
-ifdef CROSS_COMPILE
-  $(info CC: $(CC))
-  $(info AR: $(AR))
-endif
-
-ifdef USER_CFLAGS
-  $(info USER_CFLAGS: $(USER_CFLAGS))
-endif
-
-ifdef GIT_SHA
-  $(info GIT_SHA: $(GIT_SHA))
-else
-  GIT_SHA := $(shell git rev-parse --short HEAD 2>$(NULLDEV))
-  ifneq ($(words $(GIT_SHA)),1)
-    GIT_SHA := N/A
-    $(info GIT_SHA: N/A)
-  endif
-endif
-
-CFLAGS += -MMD -MP -O -I common \
-          -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) \
-          -DGIT_SHA=$(GIT_SHA) -DCA65_INC=$(CA65_INC) -DCC65_INC=$(CC65_INC) \
-          -DLD65_LIB=$(LD65_LIB) -DLD65_OBJ=$(LD65_OBJ) -DLD65_CFG=$(LD65_CFG)
-
-LDLIBS += -lm
-
-ifdef CMD_EXE
-  EXE_SUFFIX=.exe
-endif
-
-ifdef CROSS_COMPILE
-  EXE_SUFFIX=.exe
-endif
-
-all bin: $(PROGS)
-
-mostlyclean:
-       $(call RMDIR,../wrk)
-
-clean:
-       $(call RMDIR,../wrk ../bin)
-
-ifdef CMD_EXE
-
-install avail unavail:
-
-else # CMD_EXE
-
-INSTALL = install
-
-define AVAIL_recipe
-
-ln -s $(abspath ../bin/$(prog)) /usr/local/bin/$(prog)
-
-endef # AVAIL_recipe
-
-define UNAVAIL_recipe
-
-$(RM) /usr/local/bin/$(prog)
-
-endef # UNAVAIL_recipe
-
-install:
-       $(if $(prefix),,$(error variable `prefix' must be set))
-       $(INSTALL) -d $(DESTDIR)$(bindir)
-       $(INSTALL) ../bin/* $(DESTDIR)$(bindir)
-
-avail:
-       $(foreach prog,$(PROGS),$(AVAIL_recipe))
-
-unavail:
-       $(foreach prog,$(PROGS),$(UNAVAIL_recipe))
-
-endif # CMD_EXE
-
-zip:
-       @cd .. && zip cc65 bin/*
-
-define OBJS_template
-
-$1_OBJS := $$(patsubst %.c,../wrk/%.o,$$(wildcard $1/*.c))
-
-$$($1_OBJS): | ../wrk/$1
-
-../wrk/$1:
-       @$$(call MKDIR,$$@)
-
-DEPS += $$($1_OBJS:.o=.d)
-
-endef # OBJS_template
-
-define PROG_template
-
-$$(eval $$(call OBJS_template,$1))
-
-../bin/$1$(EXE_SUFFIX): $$($1_OBJS) ../wrk/common/common.a | ../bin
-       $$(CC) $$(LDFLAGS) -o $$@ $$^ $$(LDLIBS)
-
-$1: ../bin/$1$(EXE_SUFFIX)
-
-endef # PROG_template
-
-../wrk/%.o: %.c
-       @echo $<
-       @$(CC) -c $(CFLAGS) -o $@ $<
-
-../bin:
-       @$(call MKDIR,$@)
-
-$(eval $(call OBJS_template,common))
-
-../wrk/common/common.a: $(common_OBJS)
-       $(AR) r $@ $?
-
-$(foreach prog,$(PROGS),$(eval $(call PROG_template,$(prog))))
-
--include $(DEPS)
diff --git a/src/ar65.vcxproj b/src/ar65.vcxproj
deleted file mode 100644 (file)
index b077134..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{5E8C19C6-B167-440C-8BEF-3CBF109CDB49}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>ar65</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>false</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClInclude Include="ar65\add.h" />
-    <ClInclude Include="ar65\del.h" />
-    <ClInclude Include="ar65\error.h" />
-    <ClInclude Include="ar65\exports.h" />
-    <ClInclude Include="ar65\extract.h" />
-    <ClInclude Include="ar65\fileio.h" />
-    <ClInclude Include="ar65\global.h" />
-    <ClInclude Include="ar65\library.h" />
-    <ClInclude Include="ar65\list.h" />
-    <ClInclude Include="ar65\objdata.h" />
-    <ClInclude Include="ar65\objfile.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="ar65\add.c" />
-    <ClCompile Include="ar65\del.c" />
-    <ClCompile Include="ar65\error.c" />
-    <ClCompile Include="ar65\exports.c" />
-    <ClCompile Include="ar65\extract.c" />
-    <ClCompile Include="ar65\fileio.c" />
-    <ClCompile Include="ar65\global.c" />
-    <ClCompile Include="ar65\library.c" />
-    <ClCompile Include="ar65\list.c" />
-    <ClCompile Include="ar65\main.c" />
-    <ClCompile Include="ar65\objdata.c" />
-    <ClCompile Include="ar65\objfile.c" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/src/ar65/add.c b/src/ar65/add.c
deleted file mode 100644 (file)
index a445243..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   add.c                                   */
-/*                                                                           */
-/*                 Object file adding for the ar65 archiver                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-
-#include "error.h"
-#include "objfile.h"
-#include "library.h"
-#include "add.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void AddObjFiles (int argc, char* argv [])
-/* Add object files to a library */
-{
-    int I;
-
-    /* Check the argument count */
-    if (argc <= 0) {
-        Error ("No library name given");
-    }
-    if (argc <= 1) {
-        Error ("No object files to add");
-    }
-
-    /* Open the library, read the index */
-    LibOpen (argv [0], 0, 1);
-
-    /* Add the object files */
-    I = 1;
-    while (I < argc) {
-        ObjAdd (argv [I]);
-        ++I;
-    }
-
-    /* Create a new library file and close the old one */
-    LibClose ();
-
-    /* Successful end */
-    exit (EXIT_SUCCESS);
-}
diff --git a/src/ar65/add.h b/src/ar65/add.h
deleted file mode 100644 (file)
index c3de2bb..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   add.h                                   */
-/*                                                                           */
-/*                 Object file adding for the ar65 archiver                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ADD_H
-#define ADD_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void AddObjFiles (int argc, char* argv []);
-/* Add object files to a library */
-
-
-
-/* End of add.h */
-
-#endif
diff --git a/src/ar65/del.c b/src/ar65/del.c
deleted file mode 100644 (file)
index 0c1343d..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   del.h                                   */
-/*                                                                           */
-/*                Object file deleting for the ar65 archiver                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-
-#include "error.h"
-#include "objdata.h"
-#include "library.h"
-#include "del.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void DelObjFiles (int argc, char* argv [])
-/* Delete modules from a library */
-{
-    int I;
-
-    /* Check the argument count */
-    if (argc <= 0) {
-        Error ("No library name given");
-    }
-    if (argc <= 1) {
-        Error ("No modules to delete");
-    }
-
-    /* Open the library, read the index */
-    LibOpen (argv [0], 1, 1);
-
-    /* Delete the modules */
-    I = 1;
-    while (I < argc) {
-        /* Delete the module from the list */
-        DelObjData (argv [I]);
-        ++I;
-    }
-
-    /* Create a new library file and close the old one */
-    LibClose ();
-
-    /* Successful end */
-    exit (EXIT_SUCCESS);
-}
diff --git a/src/ar65/del.h b/src/ar65/del.h
deleted file mode 100644 (file)
index 6100fe6..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   del.h                                   */
-/*                                                                           */
-/*                Object file deleting for the ar65 archiver                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef DEL_H
-#define DEL_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void DelObjFiles (int argc, char* argv []);
-/* Delete modules from a library */
-
-
-
-/* End of del.h */               
-
-#endif
diff --git a/src/ar65/error.c b/src/ar65/error.c
deleted file mode 100644 (file)
index 47ee90a..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.c                                  */
-/*                                                                           */
-/*                   Error handling for the ar65 archiver                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2003 Ullrich von Bassewitz                                       */
-/*               Römerstraße 52                                              */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-/* common */
-#include "cmdline.h"
-
-/* ar65 */
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Warning (const char* Format, ...)
-/* Print a warning message */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "%s: Warning: ", ProgName);
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-}
-
-
-
-void Error (const char* Format, ...)
-/* Print an error message and die */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "%s: Error: ", ProgName);
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-    exit (EXIT_FAILURE);
-}
-
-
-
-void Internal (const char* Format, ...)
-/* Print an internal error message and die */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "%s: Internal error: ", ProgName);
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-    exit (EXIT_FAILURE);
-}
diff --git a/src/ar65/error.h b/src/ar65/error.h
deleted file mode 100644 (file)
index 4052ee3..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.h                                  */
-/*                                                                           */
-/*                   Error handling for the ar65 archiver                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ERROR_H
-#define ERROR_H
-
-
-
-/* common */
-#include "attrib.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Warning (const char* Format, ...) attribute((format(printf,1,2)));
-/* Print a warning message */
-
-void Error (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print an error message and die */
-
-void Internal (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print an internal error message and die */
-
-
-
-/* End of error.h */
-
-#endif
diff --git a/src/ar65/exports.c b/src/ar65/exports.c
deleted file mode 100644 (file)
index b3bb4ce..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 exports.c                                 */
-/*                                                                           */
-/*              Duplicate export checking for the ar65 archiver              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "hashfunc.h"
-#include "xmalloc.h"
-
-/* ar65 */
-#include "error.h"
-#include "library.h"
-#include "objdata.h"
-#include "exports.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* A hash table entry */
-typedef struct HashEntry HashEntry;
-struct HashEntry {
-    HashEntry*          Next;           /* Next in list */
-    const ObjData*      Module;         /* Pointer to object module */
-    char                Name [1];       /* Name of identifier */
-};
-
-/* Hash table */
-#define HASHTAB_SIZE    4783
-static HashEntry*       HashTab [HASHTAB_SIZE];
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static HashEntry* NewHashEntry (const char* Name, const ObjData* Module)
-/* Create and return a new hash entry */
-{
-    /* Get the length of the name */
-    unsigned Len = strlen (Name);
-
-    /* Get memory for the struct */
-    HashEntry* H = xmalloc (sizeof (HashEntry) + Len);
-
-    /* Initialize the fields and return it */
-    H->Next     = 0;
-    H->Module   = Module;
-    memcpy (H->Name, Name, Len);
-    H->Name [Len] = '\0';
-    return H;
-}
-
-
-
-void ExpInsert (const char* Name, const ObjData* Module)
-/* Insert an exported identifier and check if it's already in the list */
-{
-    HashEntry* L;
-
-    /* Create a hash value for the given name */
-    unsigned HashVal = HashStr (Name) % HASHTAB_SIZE;
-
-    /* Create a new hash entry */
-    HashEntry* H = NewHashEntry (Name, Module);
-
-    /* Search through the list in that slot and print matching duplicates */
-    if (HashTab [HashVal] == 0) {
-        /* The slot is empty */
-        HashTab [HashVal] = H;
-        return;
-    }
-    L = HashTab [HashVal];
-    while (1) {
-        if (strcmp (L->Name, Name) == 0) {
-            /* Duplicate entry */
-            Warning ("External symbol `%s' in module `%s', library `%s', "
-                     "is duplicated in module `%s'",
-                     Name, L->Module->Name, LibName, Module->Name);
-        }
-        if (L->Next == 0) {
-            break;
-        } else {
-            L = L->Next;
-        }
-    }
-    L->Next = H;
-}
-
-
-
-const ObjData* ExpFind (const char* Name)
-/* Check for an identifier in the list. Return NULL if not found, otherwise
-** return a pointer to the module, that exports the identifer.
-*/
-{
-    /* Get a pointer to the list with the symbols hash value */
-    HashEntry* L = HashTab [HashStr (Name) % HASHTAB_SIZE];
-    while (L) {
-        /* Search through the list in that slot */
-        if (strcmp (L->Name, Name) == 0) {
-            /* Entry found */
-            return L->Module;
-        }
-        L = L->Next;
-    }
-
-    /* Not found */
-    return 0;
-}
diff --git a/src/ar65/exports.h b/src/ar65/exports.h
deleted file mode 100644 (file)
index 054b515..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 exports.h                                 */
-/*                                                                           */
-/*              Duplicate export checking for the ar65 archiver              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef EXPORTS_H
-#define EXPORTS_H
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-struct ObjData;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void ExpInsert (const char* Name, const struct ObjData* Module);
-/* Insert an exported identifier and check if it's already in the list */
-
-const struct ObjData* ExpFind (const char* Name);
-/* Check for an identifier in the list. Return NULL if not found, otherwise
-** return a pointer to the module, that exports the identifer.
-*/
-
-
-
-/* End of exports.h */
-
-#endif
diff --git a/src/ar65/extract.c b/src/ar65/extract.c
deleted file mode 100644 (file)
index c1a8fd8..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 extract.c                                 */
-/*                                                                           */
-/*               Object file extraction for the ar65 archiver                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-
-#include "error.h"
-#include "objfile.h"
-#include "library.h"
-#include "extract.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void ExtractObjFiles (int argc, char* argv [])
-/* Extract object files from a library */
-{
-    int I;
-
-    /* Check the argument count */
-    if (argc <= 0) {
-        Error ("No library name given");
-    }
-    if (argc <= 1) {
-        Error ("No object files to extract");
-    }
-
-    /* Open the library, read the index */
-    LibOpen (argv [0], 1, 0);
-
-    /* Extract the object files */
-    I = 1;
-    while (I < argc) {
-        ObjExtract (argv [I]);
-        ++I;
-    }
-
-    /* Create a new library file and close the old one */
-    LibClose ();
-
-    /* Successful end */
-    exit (EXIT_SUCCESS);
-}
diff --git a/src/ar65/extract.h b/src/ar65/extract.h
deleted file mode 100644 (file)
index d09368c..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 extract.h                                 */
-/*                                                                           */
-/*               Object file extraction for the ar65 archiver                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef EXTRACT_H
-#define EXTRACT_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void ExtractObjFiles (int argc, char* argv []);
-/* Extract object files from a library */
-
-
-
-/* End of extract.h */
-
-#endif
diff --git a/src/ar65/fileio.c b/src/ar65/fileio.c
deleted file mode 100644 (file)
index 8e17cbf..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 fileio.c                                  */
-/*                                                                           */
-/*                      File I/O for the ar65 archiver                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2003 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "xmalloc.h"
-
-/* ar65 */
-#include "error.h"
-#include "fileio.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Write8 (FILE* F, unsigned char Val)
-/* Write an 8 bit value to the file */
-{
-    if (putc (Val, F) == EOF) {
-        Error ("Write error (disk full?)");
-    }
-}
-
-
-
-void Write16 (FILE* F, unsigned Val)
-/* Write a 16 bit value to the file */
-{
-    Write8 (F, (unsigned char) Val);
-    Write8 (F, (unsigned char) (Val >> 8));
-}
-
-
-
-void Write32 (FILE* F, unsigned long Val)
-/* Write a 32 bit value to the file */
-{
-    Write8 (F, (unsigned char) Val);
-    Write8 (F, (unsigned char) (Val >> 8));
-    Write8 (F, (unsigned char) (Val >> 16));
-    Write8 (F, (unsigned char) (Val >> 24));
-}
-
-
-
-void WriteVar (FILE* F, unsigned long V)
-/* Write a variable sized value to the file in special encoding */
-{
-    /* We will write the value to the file in 7 bit chunks. If the 8th bit
-    ** is clear, we're done, if it is set, another chunk follows. This will
-    ** allow us to encode smaller values with less bytes, at the expense of
-    ** needing 5 bytes if a 32 bit value is written to file.
-    */
-    do {
-        unsigned char C = (V & 0x7F);
-        V >>= 7;
-        if (V) {
-            C |= 0x80;
-        }
-        Write8 (F, C);
-    } while (V != 0);
-}
-
-
-
-void WriteStr (FILE* F, const char* S)
-/* Write a string to the file */
-{
-    unsigned Len = strlen (S);
-    WriteVar (F, Len);
-    WriteData (F, S, Len);
-}
-
-
-
-void WriteData (FILE* F, const void* Data, unsigned Size)
-/* Write data to the file */
-{
-    if (fwrite (Data, 1, Size, F) != Size) {
-        Error ("Write error (disk full?)");
-    }
-}
-
-
-
-unsigned Read8 (FILE* F)
-/* Read an 8 bit value from the file */
-{
-    int C = getc (F);
-    if (C == EOF) {
-        Error ("Read error (file corrupt?)");
-    }
-    return C;
-}
-
-
-
-unsigned Read16 (FILE* F)
-/* Read a 16 bit value from the file */
-{
-    unsigned Lo = Read8 (F);
-    unsigned Hi = Read8 (F);
-    return (Hi << 8) | Lo;
-}
-
-
-
-unsigned long Read32 (FILE* F)
-/* Read a 32 bit value from the file */
-{
-    unsigned long Lo = Read16 (F);
-    unsigned long Hi = Read16 (F);
-    return (Hi << 16) | Lo;
-}
-
-
-
-unsigned long ReadVar (FILE* F)
-/* Read a variable size value from the file */
-{
-    /* The value was written to the file in 7 bit chunks LSB first. If there
-    ** are more bytes, bit 8 is set, otherwise it is clear.
-    */
-    unsigned char C;
-    unsigned long V = 0;
-    unsigned Shift = 0;
-    do {
-        /* Read one byte */
-        C = Read8 (F);
-        /* Encode it into the target value */
-        V |= ((unsigned long)(C & 0x7F)) << Shift;
-        /* Next value */
-        Shift += 7;
-    } while (C & 0x80);
-
-    /* Return the value read */
-    return V;
-}
-
-
-
-char* ReadStr (FILE* F)
-/* Read a string from the file (the memory will be malloc'ed) */
-{
-    /* Read the length */
-    unsigned Len = ReadVar (F);
-
-    /* Allocate memory and read the string itself */
-    char* S = xmalloc (Len + 1);
-    ReadData (F, S, Len);
-
-    /* Terminate the string and return it */
-    S [Len] = '\0';
-    return S;
-}
-
-
-
-void* ReadData (FILE* F, void* Data, unsigned Size)
-/* Read data from the file */
-{
-    if (fread (Data, 1, Size, F) != Size) {
-        Error ("Read error (file corrupt?)");
-    }
-    return Data;
-}
diff --git a/src/ar65/fileio.h b/src/ar65/fileio.h
deleted file mode 100644 (file)
index 17a3d2d..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 fileio.h                                  */
-/*                                                                           */
-/*                      File I/O for the ar65 archiver                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2000 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef FILEIO_H
-#define FILEIO_H
-
-
-
-#include <stdio.h>
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Write8 (FILE* F, unsigned char Val);
-/* Write an 8 bit value to the file */
-
-void Write16 (FILE* F, unsigned Val);
-/* Write a 16 bit value to the file */
-
-void Write32 (FILE* F, unsigned long Val);
-/* Write a 32 bit value to the file */
-
-void WriteVar (FILE* F, unsigned long V);
-/* Write a variable sized value to the file in special encoding */
-
-void WriteStr (FILE* F, const char* S);
-/* Write a string to the file */
-
-void WriteData (FILE* F, const void* Data, unsigned Size);
-/* Write data to the file */
-
-unsigned Read8 (FILE* F);
-/* Read an 8 bit value from the file */
-
-unsigned Read16 (FILE* F);
-/* Read a 16 bit value from the file */
-
-unsigned long Read32 (FILE* F);
-/* Read a 32 bit value from the file */
-
-unsigned long ReadVar (FILE* F);
-/* Read a variable size value from the file */
-
-char* ReadStr (FILE* F);
-/* Read a string from the file (the memory will be malloc'ed) */
-
-void* ReadData (FILE* F, void* Data, unsigned Size);
-/* Read data from the file */
-
-
-
-/* End of fileio.h */
-
-#endif
diff --git a/src/ar65/global.c b/src/ar65/global.c
deleted file mode 100644 (file)
index 75eadc0..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.c                                  */
-/*                                                                           */
-/*                  Global variables for the ar65 archiver                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include "global.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
diff --git a/src/ar65/global.h b/src/ar65/global.h
deleted file mode 100644 (file)
index 9b8f128..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.h                                  */
-/*                                                                           */
-/*                  Global variables for the ar65 archiver                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef GLOBAL_H
-#define GLOBAL_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* End of global.h */
-
-#endif
diff --git a/src/ar65/library.c b/src/ar65/library.c
deleted file mode 100644 (file)
index c72e6e3..0000000
+++ /dev/null
@@ -1,407 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 library.c                                 */
-/*                                                                           */
-/*         Library data structures and helpers for the ar65 archiver         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "cmdline.h"
-#include "exprdefs.h"
-#include "libdefs.h"
-#include "print.h"
-#include "symdefs.h"
-#include "xmalloc.h"
-
-/* ar65 */
-#include "error.h"
-#include "exports.h"
-#include "fileio.h"
-#include "global.h"
-#include "library.h"
-#include "objdata.h"
-#include "objfile.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Name of the library file */
-const char*             LibName = 0;
-static char*            NewLibName = 0;
-
-/* File descriptor for the library file */
-static FILE*            Lib = 0;
-static FILE*            NewLib = 0;
-
-/* The library header */
-static LibHeader        Header = {
-    LIB_MAGIC,
-    LIB_VERSION,
-    0,
-    0
-};
-
-
-
-/*****************************************************************************/
-/*                       Writing file data structures                        */
-/*****************************************************************************/
-
-
-
-static void ReadHeader (void)
-/* Read the header of a library file */
-{
-    /* Seek to position zero */
-    fseek (Lib, 0, SEEK_SET);
-
-    /* Read the header fields, checking magic and version */
-    Header.Magic   = Read32 (Lib);
-    if (Header.Magic != LIB_MAGIC) {
-        Error ("`%s' is not a valid library file", LibName);
-    }
-    Header.Version = Read16 (Lib);
-    if (Header.Version != LIB_VERSION) {
-        Error ("Wrong data version in `%s'", LibName);
-    }
-    Header.Flags   = Read16 (Lib);
-    Header.IndexOffs = Read32 (Lib);
-}
-
-
-
-static void ReadIndexEntry (void)
-/* Read one entry in the index */
-{
-    /* Create a new entry and insert it into the list */
-    ObjData* O  = NewObjData ();
-
-    /* Module name/flags/MTime/Start/Size */
-    O->Name     = ReadStr (Lib);
-    O->Flags    = Read16 (Lib);
-    O->MTime    = Read32 (Lib);
-    O->Start    = Read32 (Lib);
-    O->Size     = Read32 (Lib);
-}
-
-
-
-static void ReadIndex (void)
-/* Read the index of a library file */
-{
-    unsigned Count, I;
-
-    /* Seek to the start of the index */
-    fseek (Lib, Header.IndexOffs, SEEK_SET);
-
-    /* Read the object file count and calculate the cross ref size */
-    Count = ReadVar (Lib);
-
-    /* Read all entries in the index */
-    while (Count--) {
-        ReadIndexEntry ();
-    }
-
-    /* Read basic object file data from the actual entries */
-    for (I = 0; I < CollCount (&ObjPool); ++I) {
-
-        /* Get the object file entry */
-        ObjData* O = CollAtUnchecked (&ObjPool, I);
-
-        /* Read data */
-        ObjReadData (Lib, O);
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                       Writing file data structures                        */
-/*****************************************************************************/
-
-
-
-static void WriteHeader (void)
-/* Write the header to the library file */
-{
-    /* Seek to position zero */
-    fseek (NewLib, 0, SEEK_SET);
-
-    /* Write the header fields */
-    Write32 (NewLib, Header.Magic);
-    Write16 (NewLib, Header.Version);
-    Write16 (NewLib, Header.Flags);
-    Write32 (NewLib, Header.IndexOffs);
-}
-
-
-
-static void WriteIndexEntry (const ObjData* O)
-/* Write one index entry */
-{
-    /* Module name/flags/MTime/start/size */
-    WriteStr (NewLib, O->Name);
-    Write16  (NewLib, O->Flags & ~OBJ_HAVEDATA);
-    Write32  (NewLib, O->MTime);
-    Write32  (NewLib, O->Start);
-    Write32  (NewLib, O->Size);
-}
-
-
-
-static void WriteIndex (void)
-/* Write the index of a library file */
-{
-    unsigned I;
-
-    /* Sync I/O in case the last operation was a read */
-    fseek (NewLib, 0, SEEK_CUR);
-
-    /* Remember the current offset in the header */
-    Header.IndexOffs = ftell (NewLib);
-
-    /* Write the object file count */
-    WriteVar (NewLib, CollCount (&ObjPool));
-
-    /* Write the object files */
-    for (I = 0; I < CollCount (&ObjPool); ++I) {
-        WriteIndexEntry (CollConstAt (&ObjPool, I));
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                             High level stuff                              */
-/*****************************************************************************/
-
-
-
-void LibOpen (const char* Name, int MustExist, int NeedTemp)
-/* Open an existing library and a temporary copy. If MustExist is true, the
-** old library is expected to exist. If NeedTemp is true, a temporary library
-** is created.
-*/
-{
-    /* Remember the name */
-    LibName = xstrdup (Name);
-
-    /* Open the existing library for reading */
-    Lib = fopen (Name, "rb");
-    if (Lib == 0) {
-
-        /* File does not exist */
-        if (MustExist) {
-            Error ("Library `%s' does not exist", Name);
-        } else {
-            /* Announce the library's creation if ar65 is verbose. */
-            Print (stdout, 1,
-                   "%s: Library `%s' will be created.\n", ProgName, Name);
-        }
-
-    } else {
-
-        /* We have an existing file: Read the header */
-        ReadHeader ();
-
-        /* Now read the existing index */
-        ReadIndex ();
-
-    }
-
-    if (NeedTemp) {
-
-        /* Create the temporary library name */
-        NewLibName = xmalloc (strlen (Name) + strlen (".temp") + 1);
-        strcpy (NewLibName, Name);
-        strcat (NewLibName, ".temp");
-
-        /* Create the temporary library */
-        NewLib = fopen (NewLibName, "w+b");
-        if (NewLib == 0) {
-            Error ("Cannot create temporary library file: %s", strerror (errno));
-        }
-
-        /* Write a dummy header to the temp file */
-        WriteHeader ();
-    }
-}
-
-
-
-unsigned long LibCopyTo (FILE* F, unsigned long Bytes)
-/* Copy data from F to the temp library file, return the start position in
-** the temporary library file.
-*/
-{
-    unsigned char Buf [4096];
-
-    /* Remember the position */
-    unsigned long Pos = ftell (NewLib);
-
-    /* Copy loop */
-    while (Bytes) {
-        unsigned Count = (Bytes > sizeof (Buf))? sizeof (Buf) : Bytes;
-        ReadData (F, Buf, Count);
-        WriteData (NewLib, Buf, Count);
-        Bytes -= Count;
-    }
-
-    /* Return the start position */
-    return Pos;
-}
-
-
-
-void LibCopyFrom (unsigned long Pos, unsigned long Bytes, FILE* F)
-/* Copy data from the library file into another file */
-{
-    unsigned char Buf [4096];
-
-    /* Seek to the correct position */
-    fseek (Lib, Pos, SEEK_SET);
-
-    /* Copy loop */
-    while (Bytes) {
-        unsigned Count = (Bytes > sizeof (Buf))? sizeof (Buf) : Bytes;
-        ReadData (Lib, Buf, Count);
-        WriteData (F, Buf, Count);
-        Bytes -= Count;
-    }
-}
-
-
-
-static void LibCheckExports (ObjData* O)
-/* Insert all exports from the given object file into the global list
-** checking for duplicates.
-*/
-{
-    unsigned I;
-
-    /* Let the user know what we do */
-    Print (stdout, 2, "Module `%s' (%u exports):\n", O->Name, CollCount (&O->Exports));
-
-    /* Insert the exports into the global table */
-    for (I = 0; I < CollCount (&O->Exports); ++I) {
-
-        /* Get the name of the export */
-        const char* Name = CollConstAt (&O->Exports, I);
-
-        /* Insert the name into the hash table */
-        Print (stdout, 2, "  %s\n", Name);
-        ExpInsert (Name, O);
-    }
-}
-
-
-
-void LibClose (void)
-/* Write remaining data, close both files and copy the temp file to the old
-** filename
-*/
-{
-    /* Do we have a temporary library? */
-    if (NewLib) {
-
-        unsigned I;
-        unsigned char Buf [4096];
-        size_t Count;
-
-        /* Walk through the object file list, inserting exports into the
-        ** export list checking for duplicates. Copy any data that is still
-        ** in the old library into the new one.
-        */
-        for (I = 0; I < CollCount (&ObjPool); ++I) {
-
-            /* Get a pointer to the object */
-            ObjData* O = CollAtUnchecked (&ObjPool, I);
-
-            /* Check exports, make global export table */
-            LibCheckExports (O);
-
-            /* Copy data if needed */
-            if ((O->Flags & OBJ_HAVEDATA) == 0) {
-                /* Data is still in the old library */
-                fseek (Lib, O->Start, SEEK_SET);
-                O->Start = ftell (NewLib);
-                LibCopyTo (Lib, O->Size);
-                O->Flags |= OBJ_HAVEDATA;
-            }
-        }
-
-        /* Write the index */
-        WriteIndex ();
-
-        /* Write the updated header */
-        WriteHeader ();
-
-        /* Close the file */
-        if (Lib && fclose (Lib) != 0) {
-            Error ("Error closing library: %s", strerror (errno));
-        }
-
-        /* Reopen the library and truncate it */
-        Lib = fopen (LibName, "wb");
-        if (Lib == 0) {
-            Error ("Cannot open library `%s' for writing: %s",
-                   LibName, strerror (errno));
-        }
-
-        /* Copy the temporary library to the new one */
-        fseek (NewLib, 0, SEEK_SET);
-        while ((Count = fread (Buf, 1, sizeof (Buf), NewLib)) != 0) {
-            if (fwrite (Buf, 1, Count, Lib) != Count) {
-                Error ("Cannot write to `%s': %s", LibName, strerror (errno));
-            }
-        }
-    }
-
-    /* Close both files */
-    if (Lib && fclose (Lib) != 0) {
-        Error ("Problem closing `%s': %s", LibName, strerror (errno));
-    }
-    if (NewLib && fclose (NewLib) != 0) {
-        Error ("Problem closing temporary library file: %s", strerror (errno));
-    }
-    if (NewLibName && remove (NewLibName) != 0) {
-        Error ("Problem deleting temporary library file: %s", strerror (errno));
-    }
-}
diff --git a/src/ar65/library.h b/src/ar65/library.h
deleted file mode 100644 (file)
index 861d56a..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 library.h                                 */
-/*                                                                           */
-/*         Library data structures and helpers for the ar65 archiver         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef LIBRARY_H
-#define LIBRARY_H
-
-
-
-#include <stdio.h>
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Name of the library file */
-extern const char* LibName;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void LibOpen (const char* Name, int MustExist, int NeedTemp);
-/* Open an existing library and a temporary copy. If MustExist is true, the
-** old library is expected to exist. If NeedTemp is true, a temporary library
-** is created.
-*/
-
-unsigned long LibCopyTo (FILE* F, unsigned long Bytes);
-/* Copy data from F to the temp library file, return the start position in
-** the temporary library file.
-*/
-
-void LibCopyFrom (unsigned long Pos, unsigned long Bytes, FILE* F);
-/* Copy data from the library file into another file */
-
-void LibClose (void);
-/* Write remaining data, close both files and copy the temp file to the old
-** filename
-*/
-
-
-
-/* End of library.h */
-
-#endif
diff --git a/src/ar65/list.c b/src/ar65/list.c
deleted file mode 100644 (file)
index 6562998..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  list.c                                   */
-/*                                                                           */
-/*                   Module listing for the ar65 archiver                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-
-/* ar65 */
-#include "error.h"
-#include "library.h"
-#include "list.h"
-#include "objdata.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void ListObjFiles (int argc, char* argv [])
-/* List modules in a library */
-{
-    unsigned I;
-    const ObjData* O;
-
-    /* Check the argument count */
-    if (argc <= 0) {
-        Error ("No library name given");
-    }
-    if (argc > 2) {
-        Error ("Too many arguments");
-    }
-
-    /* Open the library, read the index */
-    LibOpen (argv [0], 1, 0);
-
-    /* List the modules */
-    for (I = 0; I < CollCount (&ObjPool); ++I) {
-
-        /* Get the entry */
-        O = CollConstAt (&ObjPool, I);
-
-        /* Print the name */
-        printf ("%s\n", O->Name);
-
-    }
-
-    /* Create a new library file and close the old one */
-    LibClose ();
-
-    /* Successful end */
-    exit (EXIT_SUCCESS);
-}
diff --git a/src/ar65/list.h b/src/ar65/list.h
deleted file mode 100644 (file)
index f29323b..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  list.h                                   */
-/*                                                                           */
-/*                   Module listing for the ar65 archiver                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef LIST_H
-#define LIST_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void ListObjFiles (int argc, char* argv []);
-/* List modules in a library */
-
-
-
-/* End of list.h */
-
-#endif
diff --git a/src/ar65/main.c b/src/ar65/main.c
deleted file mode 100644 (file)
index 9b9097e..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  main.c                                   */
-/*                                                                           */
-/*                    Main program for the ar65 archiver                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-/* common */
-#include "cmdline.h"
-#include "print.h"
-#include "version.h"
-
-#include "global.h"
-#include "add.h"
-#include "del.h"
-#include "list.h"
-#include "extract.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void Usage (void)
-/* Print usage information and exit */
-{
-    fprintf (stderr, "Usage: %s <operation ...> lib file|module ...\n"
-            "Operations are some of:\n"
-            "\ta\tAdd modules\n"
-            "\td\tDelete modules\n"
-            "\tl\tList library contents\n"
-            "\tv\tIncrease verbosity (put before other operation)\n"
-            "\tx\tExtract modules\n"
-            "\tV\tPrint the archiver version\n",
-            ProgName);
-    exit (EXIT_FAILURE);
-}
-
-
-
-int main (int argc, char* argv [])
-/* Assembler main program */
-{
-    unsigned I;
-
-    /* Initialize the cmdline module */
-    InitCmdLine (&argc, &argv, "ar65");
-
-    /* We must have a file name */
-    if (ArgCount < 2) {
-        Usage ();
-    }
-
-    /* Check the parameters */
-    I = 1;
-    while (I < ArgCount) {
-
-        /* Get the argument */
-        const char* Arg = ArgVec [I];
-
-        /* Check for an option */
-        if (strlen (Arg) != 1) {
-            Usage ();
-        }
-        switch (Arg [0]) {
-
-            case 'a':
-                AddObjFiles (ArgCount - I - 1, &ArgVec[I+1]);
-                break;
-
-            case 'd':
-                DelObjFiles (ArgCount - I - 1, &ArgVec [I+1]);
-                break;
-
-            case 'l':
-                ListObjFiles (ArgCount - I - 1, &ArgVec [I+1]);
-                break;
-
-            case 'v':
-                ++Verbosity;
-                break;
-
-            case 'x':
-                ExtractObjFiles (ArgCount - I - 1, &ArgVec [I+1]);
-                break;
-
-            case 'V':
-                fprintf (stderr, "ar65 V%s\n", GetVersionAsString ());
-                break;
-
-            default:
-                fprintf (stderr, "Unknown option: %s\n", Arg);
-                Usage ();
-
-        }
-
-        /* Next argument */
-        ++I;
-    }
-
-    /* Return an apropriate exit code */
-    return EXIT_SUCCESS;
-}
diff --git a/src/ar65/objdata.c b/src/ar65/objdata.c
deleted file mode 100644 (file)
index 5a8f0c5..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 objdata.c                                 */
-/*                                                                           */
-/*              Handling object file data for the ar65 archiver              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "check.h"
-#include "xmalloc.h"
-
-/* ar65 */
-#include "error.h"
-#include "library.h"
-#include "objdata.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Collection with object files */
-Collection       ObjPool        = STATIC_COLLECTION_INITIALIZER;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-ObjData* NewObjData (void)
-/* Allocate a new structure on the heap, insert it into the list, return it */
-{
-    /* Allocate memory */
-    ObjData* O = xmalloc (sizeof (ObjData));
-
-    /* Initialize the data */
-    O->Name        = 0;
-
-    O->Flags       = 0;
-    O->MTime       = 0;
-    O->Start       = 0;
-    O->Size        = 0;
-
-    O->Strings     = EmptyCollection;
-    O->Exports     = EmptyCollection;
-
-    /* Add it to the list */
-    CollAppend (&ObjPool, O);
-
-    /* Return the new entry */
-    return O;
-}
-
-
-
-void FreeObjData (ObjData* O)
-/* Free a complete struct */
-{
-    unsigned I;
-
-    xfree (O->Name);
-    for (I = 0; I < CollCount (&O->Strings); ++I) {
-        xfree (CollAt (&O->Strings, I));
-    }
-    DoneCollection (&O->Strings);
-    DoneCollection (&O->Exports);
-    xfree (O);
-}
-
-
-
-void ClearObjData (ObjData* O)
-/* Remove any data stored in O */
-{
-    unsigned I;
-    xfree (O->Name);
-    O->Name = 0;
-    for (I = 0; I < CollCount (&O->Strings); ++I) {
-        xfree (CollAt (&O->Strings, I));
-    }
-    CollDeleteAll (&O->Strings);
-    CollDeleteAll (&O->Exports);
-}
-
-
-
-ObjData* FindObjData (const char* Module)
-/* Search for the module with the given name and return it. Return NULL if the
-** module is not in the list.
-*/
-{
-    unsigned I;
-
-    /* Hmm. Maybe we should hash the module names? */
-    for (I = 0; I < CollCount (&ObjPool); ++I) {
-
-        /* Get this object file */
-        ObjData* O = CollAtUnchecked (&ObjPool, I);
-
-        /* Did we find it? */
-        if (strcmp (O->Name, Module) == 0) {
-            return O;
-        }
-    }
-    return 0;
-}
-
-
-
-void DelObjData (const char* Module)
-/* Delete the object module from the list */
-{
-    unsigned I;
-    for (I = 0; I < CollCount (&ObjPool); ++I) {
-
-        /* Get this object file */
-        ObjData* O = CollAtUnchecked (&ObjPool, I);
-
-        /* Did we find it? */
-        if (strcmp (O->Name, Module) == 0) {
-
-            /* Free the entry */
-            CollDelete (&ObjPool, I);
-            FreeObjData (O);
-
-            /* Done */
-            return;
-        }
-    }
-
-    /* Not found! */
-    Warning ("Module `%s' not found in library `%s'", Module, LibName);
-}
diff --git a/src/ar65/objdata.h b/src/ar65/objdata.h
deleted file mode 100644 (file)
index 3ae8e29..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 objdata.h                                 */
-/*                                                                           */
-/*              Handling object file data for the ar65 archiver              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OBJDATA_H
-#define OBJDATA_H
-
-
-
-/* common */
-#include "coll.h"
-#include "objdefs.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Values for the Flags field */
-#define OBJ_HAVEDATA    0x0001          /* The object data is in the tmp file */
-
-
-/* Internal structure holding object file data */
-typedef struct ObjData ObjData;
-struct ObjData {
-    char*               Name;           /* Module name */
-
-    /* Index entry */
-    unsigned            Flags;
-    unsigned long       MTime;          /* Modifiation time of object file */
-    unsigned long       Start;          /* Start offset of data in library */
-    unsigned long       Size;           /* Size of data in library */
-
-    /* Object file header */
-    ObjHeader           Header;
-
-    /* Basic data needed for simple checks */
-    Collection          Strings;        /* Strings from the object file */
-    Collection          Exports;        /* Exports list from object file */
-};
-
-
-
-/* Collection with all object files */
-extern Collection       ObjPool;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-ObjData* NewObjData (void);
-/* Allocate a new structure on the heap, insert it into the list, return it */
-
-void FreeObjData (ObjData* O);
-/* Free a complete struct */
-
-void ClearObjData (ObjData* O);
-/* Remove any data stored in O */
-
-ObjData* FindObjData (const char* Module);
-/* Search for the module with the given name and return it. Return NULL if the
-** module is not in the list.
-*/
-
-void DelObjData (const char* Module);
-/* Delete the object module from the list */
-
-
-
-/* End of objdata.h */
-
-#endif
diff --git a/src/ar65/objfile.c b/src/ar65/objfile.c
deleted file mode 100644 (file)
index 0434f7e..0000000
+++ /dev/null
@@ -1,339 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 objfile.c                                 */
-/*                                                                           */
-/*                Object file handling for the ar65 archiver                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "cddefs.h"
-#include "exprdefs.h"
-#include "filestat.h"
-#include "filetime.h"
-#include "fname.h"
-#include "symdefs.h"
-#include "xmalloc.h"
-
-/* ar65 */
-#include "error.h"
-#include "objdata.h"
-#include "fileio.h"
-#include "library.h"
-#include "objfile.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static const char* GetModule (const char* Name)
-/* Get a module name from the file name */
-{
-    /* Make a module name from the file name */
-    const char* Module = FindName (Name);
-
-    /* Must not end with a path separator */
-    if (*Module == 0) {
-        Error ("Cannot make module name from `%s'", Name);
-    }
-
-    /* Done */
-    return Module;
-}
-
-
-
-static void ObjReadHeader (FILE* Obj, ObjHeader* H, const char* Name)
-/* Read the header of the object file checking the signature */
-{
-    H->Magic      = Read32 (Obj);
-    if (H->Magic != OBJ_MAGIC) {
-        Error ("`%s' is not an object file", Name);
-    }
-    H->Version    = Read16 (Obj);
-    if (H->Version != OBJ_VERSION) {
-        Error ("Object file `%s' has wrong version", Name);
-    }
-    H->Flags        = Read16 (Obj);
-    H->OptionOffs   = Read32 (Obj);
-    H->OptionSize   = Read32 (Obj);
-    H->FileOffs     = Read32 (Obj);
-    H->FileSize     = Read32 (Obj);
-    H->SegOffs      = Read32 (Obj);
-    H->SegSize      = Read32 (Obj);
-    H->ImportOffs   = Read32 (Obj);
-    H->ImportSize   = Read32 (Obj);
-    H->ExportOffs   = Read32 (Obj);
-    H->ExportSize   = Read32 (Obj);
-    H->DbgSymOffs   = Read32 (Obj);
-    H->DbgSymSize   = Read32 (Obj);
-    H->LineInfoOffs = Read32 (Obj);
-    H->LineInfoSize = Read32 (Obj);
-    H->StrPoolOffs  = Read32 (Obj);
-    H->StrPoolSize  = Read32 (Obj);
-    H->AssertOffs   = Read32 (Obj);
-    H->AssertSize   = Read32 (Obj);
-    H->ScopeOffs    = Read32 (Obj);
-    H->ScopeSize    = Read32 (Obj);
-    H->SpanOffs     = Read32 (Obj);
-    H->SpanSize     = Read32 (Obj);
-}
-
-
-
-static void SkipExpr (FILE* F)
-/* Skip an expression in F */
-{
-    /* Get the operation and skip it */
-    unsigned char Op = Read8 (F);
-
-    /* Handle then different expression nodes */
-    switch (Op) {
-
-        case EXPR_NULL:
-            break;
-
-        case EXPR_LITERAL:
-            /* 32 bit literal value */
-            (void) Read32 (F);
-            break;
-
-        case EXPR_SYMBOL:
-            /* Variable seized symbol index */
-            (void) ReadVar (F);
-            break;
-
-        case EXPR_SECTION:
-            /* 8 bit segment number */
-            (void) Read8 (F);
-            break;
-
-        default:
-            /* What's left are unary and binary nodes */
-            SkipExpr (F);   /* Left */
-            SkipExpr (F);   /* right */
-            break;
-    }
-}
-
-
-
-static void SkipLineInfoList (FILE* F)
-/* Skip a list of line infos in F */
-{
-    /* Number of indices preceeds the list */
-    unsigned long Count = ReadVar (F);
-
-    /* Skip indices */
-    while (Count--) {
-        (void) ReadVar (F);
-    }
-}
-
-
-
-void ObjReadData (FILE* F, ObjData* O)
-/* Read object file data from the given file. The function expects the Name
-** and Start fields to be valid. Header and basic data are read.
-*/
-{
-    unsigned long Count;
-
-    /* Seek to the start of the object file data */
-    fseek (F, O->Start, SEEK_SET);
-
-    /* Read the object file header */
-    ObjReadHeader (F, &O->Header, O->Name);
-
-    /* Read the string pool */
-    fseek (F, O->Start + O->Header.StrPoolOffs, SEEK_SET);
-    Count = ReadVar (F);
-    CollGrow (&O->Strings, Count);
-    while (Count--) {
-        CollAppend (&O->Strings, ReadStr (F));
-    }
-
-    /* Read the exports */
-    fseek (F, O->Start + O->Header.ExportOffs, SEEK_SET);
-    Count = ReadVar (F);
-    CollGrow (&O->Exports, Count);
-    while (Count--) {
-
-        unsigned char ConDes[CD_TYPE_COUNT];
-
-        /* Skip data until we get to the name */
-        unsigned Type = ReadVar (F);
-        (void) Read8 (F);       /* AddrSize */
-        ReadData (F, ConDes, SYM_GET_CONDES_COUNT (Type));
-
-        /* Now this is what we actually need: The name of the export */
-        CollAppend (&O->Exports, CollAt (&O->Strings, ReadVar (F)));
-
-        /* Skip the export value */
-        if (SYM_IS_EXPR (Type)) {
-            /* Expression tree */
-            SkipExpr (F);
-        } else {
-            /* Literal value */
-            (void) Read32 (F);
-        }
-
-        /* Skip the size if necessary */
-        if (SYM_HAS_SIZE (Type)) {
-            (void) ReadVar (F);
-        }
-
-        /* Line info indices */
-        SkipLineInfoList (F);
-        SkipLineInfoList (F);
-    }
-}
-
-
-
-void ObjAdd (const char* Name)
-/* Add an object file to the library */
-{
-    struct stat StatBuf;
-    const char* Module;
-    ObjHeader H;
-    ObjData* O;
-
-    /* Open the object file */
-    FILE* Obj = fopen (Name, "rb");
-    if (Obj == 0) {
-        Error ("Could not open `%s': %s", Name, strerror (errno));
-    }
-
-    /* Get the modification time of the object file. There's a race condition
-    ** here, since we cannot use fileno() (non-standard identifier in standard
-    ** header file), and therefore not fstat. When using stat with the
-    ** file name, there's a risk that the file was deleted and recreated
-    ** while it was open. Since mtime and size are only used to check
-    ** if a file has changed in the debugger, we will ignore this problem
-    ** here.
-    */
-    if (FileStat (Name, &StatBuf) != 0) {
-        Error ("Cannot stat object file `%s': %s", Name, strerror (errno));
-    }
-
-    /* Read and check the header */
-    ObjReadHeader (Obj, &H, Name);
-
-    /* Make a module name from the file name */
-    Module = GetModule (Name);
-
-    /* Check if we already have a module with this name */
-    O = FindObjData (Module);
-    if (O == 0) {
-        /* Not found, create a new entry */
-        O = NewObjData ();
-    } else {
-        /* Found - check the file modification times of the internal copy
-        ** and the external one.
-        */
-        if (difftime ((time_t)O->MTime, StatBuf.st_mtime) > 0.0) {
-            Warning ("Replacing module `%s' by older version in library `%s'",
-                     O->Name, LibName);
-        }
-
-        /* Free data */
-        ClearObjData (O);
-    }
-
-    /* Initialize the object module data structure */
-    O->Name     = xstrdup (Module);
-    O->Flags    = OBJ_HAVEDATA;
-    O->MTime    = (unsigned long) StatBuf.st_mtime;
-    O->Start    = 0;
-
-    /* Determine the file size. Note: Race condition here */
-    fseek (Obj, 0, SEEK_END);
-    O->Size     = ftell (Obj);
-
-    /* Read the basic data from the object file */
-    ObjReadData (Obj, O);
-
-    /* Copy the complete object data to the library file and update the
-    ** starting offset
-    */
-    fseek (Obj, 0, SEEK_SET);
-    O->Start    = LibCopyTo (Obj, O->Size);
-
-    /* Done, close the file (we read it only, so no error check) */
-    fclose (Obj);
-}
-
-
-
-void ObjExtract (const char* Name)
-/* Extract a module from the library */
-{
-    FILE* Obj;
-
-    /* Make a module name from the file name */
-    const char* Module = GetModule (Name);
-
-    /* Try to find the module in the library */
-    const ObjData* O = FindObjData (Module);
-
-    /* Bail out if the module does not exist */
-    if (O == 0) {
-        Error ("Module `%s' not found in library `%s'", Module, LibName);
-    }
-
-    /* Open the output file */
-    Obj = fopen (Name, "w+b");
-    if (Obj == 0) {
-        Error ("Cannot open target file `%s': %s", Name, strerror (errno));
-    }
-
-    /* Copy the complete object file data from the library to the new object
-    ** file.
-    */
-    LibCopyFrom (O->Start, O->Size, Obj);
-
-    /* Close the file */
-    if (fclose (Obj) != 0) {
-        Error ("Problem closing object file `%s': %s", Name, strerror (errno));
-    }
-
-    /* Set access and modification time */
-    if (SetFileTimes (Name, O->MTime) != 0) {
-        Error ("Cannot set mod time on `%s': %s", Name, strerror (errno));
-    }
-}
diff --git a/src/ar65/objfile.h b/src/ar65/objfile.h
deleted file mode 100644 (file)
index bc564c4..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 objfile.h                                 */
-/*                                                                           */
-/*                Object file handling for the ar65 archiver                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OBJFILE_H
-#define OBJFILE_H
-
-
-
-#include <stdio.h>
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-struct ObjData;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void ObjReadData (FILE* F, struct ObjData* O);
-/* Read object file data from the given file. The function expects the Name
-** and Start fields to be valid. Header and basic data are read.
-*/
-
-void ObjAdd (const char* Name);
-/* Add an object file to the library */
-
-void ObjExtract (const char* Name);
-/* Extract a module from the library */
-
-
-
-/* End of objfile.h */
-
-#endif
diff --git a/src/ca65.vcxproj b/src/ca65.vcxproj
deleted file mode 100644 (file)
index 4e02fa2..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{D28CB737-E6CA-49C4-8CE9-FF05F86DD4EC}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>ca65</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <LinkIncremental>true</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>false</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClInclude Include="ca65\anonname.h" />
-    <ClInclude Include="ca65\asserts.h" />
-    <ClInclude Include="ca65\condasm.h" />
-    <ClInclude Include="ca65\dbginfo.h" />
-    <ClInclude Include="ca65\ea.h" />
-    <ClInclude Include="ca65\ea65.h" />
-    <ClInclude Include="ca65\easw16.h" />
-    <ClInclude Include="ca65\enum.h" />
-    <ClInclude Include="ca65\error.h" />
-    <ClInclude Include="ca65\expr.h" />
-    <ClInclude Include="ca65\feature.h" />
-    <ClInclude Include="ca65\filetab.h" />
-    <ClInclude Include="ca65\fragment.h" />
-    <ClInclude Include="ca65\global.h" />
-    <ClInclude Include="ca65\incpath.h" />
-    <ClInclude Include="ca65\instr.h" />
-    <ClInclude Include="ca65\istack.h" />
-    <ClInclude Include="ca65\lineinfo.h" />
-    <ClInclude Include="ca65\listing.h" />
-    <ClInclude Include="ca65\macro.h" />
-    <ClInclude Include="ca65\nexttok.h" />
-    <ClInclude Include="ca65\objcode.h" />
-    <ClInclude Include="ca65\objfile.h" />
-    <ClInclude Include="ca65\options.h" />
-    <ClInclude Include="ca65\pseudo.h" />
-    <ClInclude Include="ca65\repeat.h" />
-    <ClInclude Include="ca65\scanner.h" />
-    <ClInclude Include="ca65\segdef.h" />
-    <ClInclude Include="ca65\segment.h" />
-    <ClInclude Include="ca65\sizeof.h" />
-    <ClInclude Include="ca65\span.h" />
-    <ClInclude Include="ca65\spool.h" />
-    <ClInclude Include="ca65\struct.h" />
-    <ClInclude Include="ca65\studyexpr.h" />
-    <ClInclude Include="ca65\symbol.h" />
-    <ClInclude Include="ca65\symentry.h" />
-    <ClInclude Include="ca65\symtab.h" />
-    <ClInclude Include="ca65\token.h" />
-    <ClInclude Include="ca65\toklist.h" />
-    <ClInclude Include="ca65\ulabel.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="ca65\anonname.c" />
-    <ClCompile Include="ca65\asserts.c" />
-    <ClCompile Include="ca65\condasm.c" />
-    <ClCompile Include="ca65\dbginfo.c" />
-    <ClCompile Include="ca65\ea65.c" />
-    <ClCompile Include="ca65\easw16.c" />
-    <ClCompile Include="ca65\enum.c" />
-    <ClCompile Include="ca65\error.c" />
-    <ClCompile Include="ca65\expr.c" />
-    <ClCompile Include="ca65\feature.c" />
-    <ClCompile Include="ca65\filetab.c" />
-    <ClCompile Include="ca65\fragment.c" />
-    <ClCompile Include="ca65\global.c" />
-    <ClCompile Include="ca65\incpath.c" />
-    <ClCompile Include="ca65\instr.c" />
-    <ClCompile Include="ca65\istack.c" />
-    <ClCompile Include="ca65\lineinfo.c" />
-    <ClCompile Include="ca65\listing.c" />
-    <ClCompile Include="ca65\macro.c" />
-    <ClCompile Include="ca65\main.c" />
-    <ClCompile Include="ca65\nexttok.c" />
-    <ClCompile Include="ca65\objcode.c" />
-    <ClCompile Include="ca65\objfile.c" />
-    <ClCompile Include="ca65\options.c" />
-    <ClCompile Include="ca65\pseudo.c" />
-    <ClCompile Include="ca65\repeat.c" />
-    <ClCompile Include="ca65\scanner.c" />
-    <ClCompile Include="ca65\segdef.c" />
-    <ClCompile Include="ca65\segment.c" />
-    <ClCompile Include="ca65\sizeof.c" />
-    <ClCompile Include="ca65\span.c" />
-    <ClCompile Include="ca65\spool.c" />
-    <ClCompile Include="ca65\struct.c" />
-    <ClCompile Include="ca65\studyexpr.c" />
-    <ClCompile Include="ca65\symbol.c" />
-    <ClCompile Include="ca65\symentry.c" />
-    <ClCompile Include="ca65\symtab.c" />
-    <ClCompile Include="ca65\token.c" />
-    <ClCompile Include="ca65\toklist.c" />
-    <ClCompile Include="ca65\ulabel.c" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/src/ca65/anonname.c b/src/ca65/anonname.c
deleted file mode 100644 (file)
index 90b73fc..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                anonname.c                                 */
-/*                                                                           */
-/*             Create names for anonymous scopes/variables/types             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2008 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-
-/* ca65 */
-#include "anonname.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-static const char AnonTag[] = "$anon";
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-StrBuf* AnonName (StrBuf* Buf, const char* Spec)
-/* Get a name for an anonymous scope, variable or type. Size is the size of
-** the buffer passed to the function, Spec will be used as part of the
-** identifier if given. A pointer to the buffer is returned.
-*/
-{
-    static unsigned ACount = 0;
-    SB_Printf (Buf, "%s-%s-%04X", AnonTag, Spec, ++ACount);
-    return Buf;
-}
-
-
-
-int IsAnonName (const StrBuf* Name)
-/* Check if the given symbol name is that of an anonymous symbol */
-{           
-    if (SB_GetLen (Name) < sizeof (AnonTag) - 1) {
-        /* Too short */
-        return 0;
-    }
-    return (strncmp (SB_GetConstBuf (Name), AnonTag, sizeof (AnonTag) - 1) == 0);
-}
diff --git a/src/ca65/anonname.h b/src/ca65/anonname.h
deleted file mode 100644 (file)
index 142cd9f..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                anonname.h                                 */
-/*                                                                           */
-/*             Create names for anonymous scopes/variables/types             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2008 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ANONNAME_H
-#define ANONNAME_H
-
-
-
-/* common */
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-StrBuf* AnonName (StrBuf* Buf, const char* Spec);
-/* Get a name for an anonymous scope, variable or type. Size is the size of
-** the buffer passed to the function, Spec will be used as part of the
-** identifier if given. A pointer to the buffer is returned.
-*/
-
-int IsAnonName (const StrBuf* Name);
-/* Check if the given symbol name is that of an anonymous symbol */
-
-      
-
-/* End of anonname.h */
-
-#endif
diff --git a/src/ca65/asserts.c b/src/ca65/asserts.c
deleted file mode 100644 (file)
index 0d4c856..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 asserts.c                                 */
-/*                                                                           */
-/*               Linker assertions for the ca65 crossassembler               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "coll.h"
-#include "xmalloc.h"
-
-/* ca65 */
-#include "asserts.h"
-#include "error.h"
-#include "expr.h"
-#include "lineinfo.h"
-#include "objfile.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* An assertion entry */
-typedef struct Assertion Assertion;
-struct Assertion {
-    ExprNode*       Expr;       /* Expression to evaluate */
-    AssertAction    Action;     /* Action to take */
-    unsigned        Msg;        /* Message to print (if any) */
-    Collection      LI;         /* Line infos for the assertion */
-};
-
-/* Collection with all assertions for a module */
-static Collection Assertions = STATIC_COLLECTION_INITIALIZER;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static Assertion* NewAssertion (ExprNode* Expr, AssertAction Action, unsigned Msg)
-/* Create a new Assertion struct and return it */
-{
-    /* Allocate memory */
-    Assertion* A = xmalloc (sizeof (Assertion));
-
-    /* Initialize the fields */
-    A->Expr     = Expr;
-    A->Action   = Action;
-    A->Msg      = Msg;
-    A->LI       = EmptyCollection;
-    GetFullLineInfo (&A->LI);
-
-    /* Return the new struct */
-    return A;
-}
-
-
-
-void AddAssertion (ExprNode* Expr, AssertAction Action, unsigned Msg)
-/* Add an assertion to the assertion table */
-{
-    /* Add an assertion object to the table */
-    CollAppend (&Assertions, NewAssertion (Expr, Action, Msg));
-}
-
-
-
-void CheckAssertions (void)
-/* Check all assertions and evaluate the ones we can evaluate here. */
-{
-    unsigned I;
-
-    /* Get the number of assertions */
-    unsigned Count = CollCount (&Assertions);
-
-    /* Check the assertions */
-    for (I = 0; I < Count; ++I) {
-
-        long Val;
-
-        /* Get the next assertion */
-        Assertion* A = CollAtUnchecked (&Assertions, I);
-
-        /* Ignore it, if it should only be evaluated by the linker */
-        if (!AssertAtAsmTime (A->Action)) {
-            continue;
-        }
-
-        /* Can we evaluate the expression? */
-        if (IsConstExpr (A->Expr, &Val) && Val == 0) {
-            /* Apply the action */
-            const char* Msg = GetString (A->Msg);
-            switch (A->Action) {
-
-                case ASSERT_ACT_WARN:
-                    LIWarning (&A->LI, 0, "%s", Msg);
-                    break;
-
-                case ASSERT_ACT_ERROR:
-                    LIError (&A->LI, "%s", Msg);
-                    break;
-
-                default:
-                    Internal ("Illegal assert action specifier");
-                    break;
-            }
-        }
-    }
-}
-
-
-
-void WriteAssertions (void)
-/* Write the assertion table to the object file */
-{
-    unsigned I;
-
-    /* Get the number of assertions */
-    unsigned Count = CollCount (&Assertions);
-
-    /* Tell the object file module that we're about to start the assertions */
-    ObjStartAssertions ();
-
-    /* Write the string count to the list */
-    ObjWriteVar (Count);
-
-    /* Write the assertions */
-    for (I = 0; I < Count; ++I) {
-
-        /* Get the next assertion */
-        Assertion* A = CollAtUnchecked (&Assertions, I);
-
-        /* Write it to the file */
-        WriteExpr (A->Expr);
-        ObjWriteVar ((unsigned) A->Action);
-        ObjWriteVar (A->Msg);
-        WriteLineInfo (&A->LI);
-    }
-
-    /* Done writing the assertions */
-    ObjEndAssertions ();
-}
diff --git a/src/ca65/asserts.h b/src/ca65/asserts.h
deleted file mode 100644 (file)
index c69fe3b..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 asserts.h                                 */
-/*                                                                           */
-/*               Linker assertions for the ca65 crossassembler               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ASSERTS_H
-#define ASSERTS_H
-
-
-
-/* common */
-#include "assertion.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Forwards */
-struct ExprNode;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void AddAssertion (struct ExprNode* Expr, AssertAction Action, unsigned Msg);
-/* Add an assertion to the assertion table */
-
-void CheckAssertions (void);
-/* Check all assertions and evaluate the ones we can evaluate here. */
-
-void WriteAssertions (void);
-/* Write the assertion table to the object file */
-
-
-
-/* End of asserts.h */
-
-#endif
diff --git a/src/ca65/condasm.c b/src/ca65/condasm.c
deleted file mode 100644 (file)
index 24cbae6..0000000
+++ /dev/null
@@ -1,525 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 condasm.c                                 */
-/*                                                                           */
-/*                   Conditional assembly support for ca65                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* ca65 */
-#include "error.h"
-#include "expr.h"
-#include "instr.h"
-#include "lineinfo.h"
-#include "nexttok.h"
-#include "symbol.h"
-#include "symtab.h"
-#include "condasm.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Maximum count of nested .ifs */
-#define MAX_IFS         256
-
-/* Set of bitmapped flags for the if descriptor */
-enum {
-    ifNone      = 0x0000,               /* No flag */
-    ifCond      = 0x0001,               /* IF condition was true */
-    ifParentCond= 0x0002,               /* IF condition of parent */
-    ifElse      = 0x0004,               /* We had a .ELSE branch */
-    ifNeedTerm  = 0x0008,               /* Need .ENDIF termination */
-};
-
-/* The overall .IF condition */
-int IfCond      = 1;
-
-
-
-/*****************************************************************************/
-/*                               struct IfDesc                               */
-/*****************************************************************************/
-
-
-
-/* One .IF descriptor */
-typedef struct IfDesc IfDesc;
-struct IfDesc {
-    unsigned    Flags;          /* Bitmapped flags, see above */
-    Collection  LineInfos;      /* File position of the .IF */
-    const char* Name;           /* Name of the directive */
-};
-
-/* The .IF stack */
-static IfDesc IfStack [MAX_IFS];
-static unsigned IfCount = 0;
-
-
-
-static IfDesc* GetCurrentIf (void)
-/* Return the current .IF descriptor */
-{
-    if (IfCount == 0) {
-        return 0;
-    } else {
-        return &IfStack[IfCount-1];
-    }
-}
-
-
-
-static int GetOverallIfCond (void)
-/* Get the overall condition based on all conditions on the stack. */
-{
-    /* Since the last entry contains the overall condition of the parent, we
-    ** must check it in combination of the current condition. If there is no
-    ** last entry, the overall condition is true.
-    */
-    return (IfCount == 0) ||
-           ((IfStack[IfCount-1].Flags & (ifCond | ifParentCond)) == (ifCond | ifParentCond));
-}
-
-
-
-static void CalcOverallIfCond (void)
-/* Calculate the overall condition, based on all conditions on the stack. */
-{
-    IfCond = GetOverallIfCond ();
-}
-
-
-
-static void SetIfCond (IfDesc* ID, int C)
-/* Set the .IF condition */
-{
-    if (C) {
-        ID->Flags |= ifCond;
-    } else {
-        ID->Flags &= ~ifCond;
-    }
-}
-
-
-
-static void ElseClause (IfDesc* ID, const char* Directive)
-/* Enter an .ELSE clause */
-{
-    /* Check if we have an open .IF - otherwise .ELSE is not allowed */
-    if (ID == 0) {
-        Error ("Unexpected %s", Directive);
-        return;
-    }
-
-    /* Check for a duplicate else, then remember that we had one */
-    if (ID->Flags & ifElse) {
-        /* We already had a .ELSE ! */
-        Error ("Duplicate .ELSE");
-    }
-    ID->Flags |= ifElse;
-
-    /* Condition is inverted now */
-    ID->Flags ^= ifCond;
-}
-
-
-
-static IfDesc* AllocIf (const char* Directive, int NeedTerm)
-/* Alloc a new element from the .IF stack */
-{
-    IfDesc* ID;
-
-    /* Check for stack overflow */
-    if (IfCount >= MAX_IFS) {
-        Fatal ("Too many nested .IFs");
-    }
-
-    /* Get the next element */
-    ID = &IfStack[IfCount];
-
-    /* Initialize elements */
-    ID->Flags = NeedTerm? ifNeedTerm : ifNone;
-    if (GetOverallIfCond ()) {
-        /* The parents .IF condition is true */
-        ID->Flags |= ifParentCond;
-    }
-    ID->LineInfos = EmptyCollection;
-    GetFullLineInfo (&ID->LineInfos);
-    ID->Name = Directive;
-
-    /* One more slot allocated */
-    ++IfCount;
-
-    /* Return the result */
-    return ID;
-}
-
-
-
-static void FreeIf (void)
-/* Free all .IF descriptors until we reach one with the NeedTerm bit set */
-{
-    int Done;
-    do {
-        IfDesc* ID = GetCurrentIf();
-        if (ID == 0) {
-            Error (" Unexpected .ENDIF");
-            Done = 1;
-        } else {
-            Done = (ID->Flags & ifNeedTerm) != 0;
-            ReleaseFullLineInfo (&ID->LineInfos);
-            DoneCollection (&ID->LineInfos);
-            --IfCount;
-        }
-    } while (!Done);
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void DoConditionals (void)
-/* Catch all for conditional directives */
-{
-    IfDesc* D;
-
-    do {
-
-        switch (CurTok.Tok) {
-
-            case TOK_ELSE:
-                D = GetCurrentIf ();
-
-                /* Allow an .ELSE */
-                ElseClause (D, ".ELSE");
-
-                /* Remember the data for the .ELSE */
-                if (D) {
-                    ReleaseFullLineInfo (&D->LineInfos);
-                    GetFullLineInfo (&D->LineInfos);
-                    D->Name = ".ELSE";
-                }
-
-                /* Calculate the new overall condition */
-                CalcOverallIfCond ();
-
-                /* Skip .ELSE */
-                NextTok ();
-                ExpectSep ();
-                break;
-
-            case TOK_ELSEIF:
-                D = GetCurrentIf ();
-                /* Handle as if there was an .ELSE first */
-                ElseClause (D, ".ELSEIF");
-
-                /* Calculate the new overall if condition */
-                CalcOverallIfCond ();
-
-                /* Allocate and prepare a new descriptor */
-                D = AllocIf (".ELSEIF", 0);
-                NextTok ();
-
-                /* Ignore the new condition if we are inside a false .ELSE
-                ** branch. This way we won't get any errors about undefined
-                ** symbols or similar...
-                */
-                if (IfCond) {
-                    SetIfCond (D, ConstExpression ());
-                    ExpectSep ();
-                }
-
-                /* Get the new overall condition */
-                CalcOverallIfCond ();
-                break;
-
-            case TOK_ENDIF:
-                /* We're done with this .IF.. - remove the descriptor(s) */
-                FreeIf ();
-
-                /* Be sure not to read the next token until the .IF stack
-                ** has been cleanup up, since we may be at end of file.
-                */
-                NextTok ();
-                ExpectSep ();
-
-                /* Get the new overall condition */
-                CalcOverallIfCond ();
-                break;
-
-            case TOK_IF:
-                D = AllocIf (".IF", 1);
-                NextTok ();
-                if (IfCond) {
-                    SetIfCond (D, ConstExpression ());
-                    ExpectSep ();
-                }
-                CalcOverallIfCond ();
-                break;
-
-            case TOK_IFBLANK:
-                D = AllocIf (".IFBLANK", 1);
-                NextTok ();
-                if (IfCond) {
-                    if (TokIsSep (CurTok.Tok)) {
-                        SetIfCond (D, 1);
-                    } else {
-                        SetIfCond (D, 0);
-                        SkipUntilSep ();
-                    }
-                }
-                CalcOverallIfCond ();
-                break;
-
-            case TOK_IFCONST:
-                D = AllocIf (".IFCONST", 1);
-                NextTok ();
-                if (IfCond) {
-                    ExprNode* Expr = Expression();
-                    SetIfCond (D, IsConstExpr (Expr, 0));
-                    FreeExpr (Expr);
-                    ExpectSep ();
-                }
-                CalcOverallIfCond ();
-                break;
-
-            case TOK_IFDEF:
-                D = AllocIf (".IFDEF", 1);
-                NextTok ();
-                if (IfCond) {
-                    SymEntry* Sym = ParseAnySymName (SYM_FIND_EXISTING);
-                    SetIfCond (D, Sym != 0 && SymIsDef (Sym));
-                }
-                CalcOverallIfCond ();
-                break;
-
-            case TOK_IFNBLANK:
-                D = AllocIf (".IFNBLANK", 1);
-                NextTok ();
-                if (IfCond) {
-                    if (TokIsSep (CurTok.Tok)) {
-                        SetIfCond (D, 0);
-                    } else {
-                        SetIfCond (D, 1);
-                        SkipUntilSep ();
-                    }
-                }
-                CalcOverallIfCond ();
-                break;
-
-            case TOK_IFNCONST:
-                D = AllocIf (".IFNCONST", 1);
-                NextTok ();
-                if (IfCond) {
-                    ExprNode* Expr = Expression();
-                    SetIfCond (D, !IsConstExpr (Expr, 0));
-                    FreeExpr (Expr);
-                    ExpectSep ();
-                }
-                CalcOverallIfCond ();
-                break;
-
-            case TOK_IFNDEF:
-                D = AllocIf (".IFNDEF", 1);
-                NextTok ();
-                if (IfCond) {
-                    SymEntry* Sym = ParseAnySymName (SYM_FIND_EXISTING);
-                    SetIfCond (D, Sym == 0 || !SymIsDef (Sym));
-                    ExpectSep ();
-                }
-                CalcOverallIfCond ();
-                break;
-
-            case TOK_IFNREF:
-                D = AllocIf (".IFNREF", 1);
-                NextTok ();
-                if (IfCond) {
-                    SymEntry* Sym = ParseAnySymName (SYM_FIND_EXISTING);
-                    SetIfCond (D, Sym == 0 || !SymIsRef (Sym));
-                    ExpectSep ();
-                }
-                CalcOverallIfCond ();
-                break;
-
-            case TOK_IFP02:
-                D = AllocIf (".IFP02", 1);
-                NextTok ();
-                if (IfCond) {
-                    SetIfCond (D, GetCPU() == CPU_6502);
-                }
-                ExpectSep ();
-                CalcOverallIfCond ();
-                break;
-
-            case TOK_IFP816:
-                D = AllocIf (".IFP816", 1);
-                NextTok ();
-                if (IfCond) {
-                    SetIfCond (D, GetCPU() == CPU_65816);
-                }
-                ExpectSep ();
-                CalcOverallIfCond ();
-                break;
-
-            case TOK_IFPC02:
-                D = AllocIf (".IFPC02", 1);
-                NextTok ();
-                if (IfCond) {
-                    SetIfCond (D, GetCPU() == CPU_65C02);
-                }
-                ExpectSep ();
-                CalcOverallIfCond ();
-                break;
-
-            case TOK_IFPSC02:
-                D = AllocIf (".IFPSC02", 1);
-                NextTok ();
-                if (IfCond) {
-                    SetIfCond (D, GetCPU() == CPU_65SC02);
-                }
-                ExpectSep ();
-                CalcOverallIfCond ();
-                break;
-
-            case TOK_IFREF:
-                D = AllocIf (".IFREF", 1);
-                NextTok ();
-                if (IfCond) {
-                    SymEntry* Sym = ParseAnySymName (SYM_FIND_EXISTING);
-                    SetIfCond (D, Sym != 0 && SymIsRef (Sym));
-                    ExpectSep ();
-                }
-                CalcOverallIfCond ();
-                break;
-
-            default:
-                /* Skip tokens */
-                NextTok ();
-
-        }
-
-    } while (IfCond == 0 && CurTok.Tok != TOK_EOF);
-}
-
-
-
-int CheckConditionals (void)
-/* Check if the current token is one that starts a conditional directive, and
-** call DoConditionals if so. Return true if a conditional directive was found,
-** return false otherwise.
-*/
-{
-    switch (CurTok.Tok) {
-        case TOK_ELSE:
-        case TOK_ELSEIF:
-        case TOK_ENDIF:
-        case TOK_IF:
-        case TOK_IFBLANK:
-        case TOK_IFCONST:
-        case TOK_IFDEF:
-        case TOK_IFNBLANK:
-        case TOK_IFNCONST:
-        case TOK_IFNDEF:
-        case TOK_IFNREF:
-        case TOK_IFP02:
-        case TOK_IFP816:
-        case TOK_IFPC02:
-        case TOK_IFPSC02:
-        case TOK_IFREF:
-            DoConditionals ();
-            return 1;
-
-        default:
-            return 0;
-    }
-}
-
-
-
-void CheckOpenIfs (void)
-/* Called from the scanner before closing an input file. Will check for any
-** open .ifs in this file.
-*/
-{
-    const LineInfo* LI;
-
-    while (1) {
-        /* Get the current file number and check if the topmost entry on the
-        ** .IF stack was inserted with this file number
-        */
-        IfDesc* D = GetCurrentIf ();
-        if (D == 0) {
-            /* There are no open .IFs */
-            break;
-        }
-
-        LI = CollConstAt (&D->LineInfos, 0);
-        if (GetSourcePos (LI)->Name != CurTok.Pos.Name) {
-            /* The .if is from another file, bail out */
-            break;
-        }
-
-        /* Start of .if is in the file we're about to leave */
-        LIError (&D->LineInfos, "Conditional assembly branch was never closed");
-        FreeIf ();
-    }
-
-    /* Calculate the new overall .IF condition */
-    CalcOverallIfCond ();
-}
-
-
-
-unsigned GetIfStack (void)
-/* Get the current .IF stack pointer */
-{
-    return IfCount;
-}
-
-
-
-void CleanupIfStack (unsigned SP)
-/* Cleanup the .IF stack, remove anything above the given stack pointer */
-{
-    while (IfCount > SP) {
-        FreeIf ();
-    }
-
-    /* Calculate the new overall .IF condition */
-    CalcOverallIfCond ();
-}
diff --git a/src/ca65/condasm.h b/src/ca65/condasm.h
deleted file mode 100644 (file)
index 334ec86..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 condasm.h                                 */
-/*                                                                           */
-/*                   Conditional assembly support for ca65                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef CONDASM_H
-#define CONDASM_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* The overall .IF condition */
-extern int IfCond;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void DoConditionals (void);
-/* Catch all for conditional directives */
-
-int CheckConditionals (void);
-/* Check if the current token is one that starts a conditional directive, and
-** call DoConditionals if so. Return true if a conditional directive was found,
-** return false otherwise.
-*/
-
-void CheckOpenIfs (void);
-/* Called from the scanner before closing an input file. Will check for any
-** open .ifs in this file.
-*/
-
-unsigned GetIfStack (void);
-/* Get the current .IF stack pointer */
-
-void CleanupIfStack (unsigned SP);
-/* Cleanup the .IF stack, remove anything above the given stack pointer */
-
-
-
-/* End of condasm.h */
-
-#endif
diff --git a/src/ca65/dbginfo.c b/src/ca65/dbginfo.c
deleted file mode 100644 (file)
index 8a55f9d..0000000
+++ /dev/null
@@ -1,529 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 dbginfo.c                                 */
-/*                                                                           */
-/*                         Handle the .dbg commands                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "chartype.h"
-#include "coll.h"
-#include "filepos.h"
-#include "hlldbgsym.h"
-#include "scopedefs.h"
-#include "strbuf.h"
-
-/* ca65 */
-#include "dbginfo.h"
-#include "error.h"
-#include "expr.h"
-#include "filetab.h"
-#include "global.h"
-#include "lineinfo.h"
-#include "objfile.h"
-#include "nexttok.h"
-#include "symentry.h"
-#include "symtab.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Structure used for a high level language function or symbol */
-typedef struct HLLDbgSym HLLDbgSym;
-struct HLLDbgSym {
-    unsigned            Flags;          /* See above */
-    unsigned            Name;           /* String id of name */
-    unsigned            AsmName;        /* String id of asm symbol name */
-    SymEntry*           Sym;            /* The assembler symbol */
-    int                 Offs;           /* Offset if any */
-    unsigned            Type;           /* String id of type */
-    SymTable*           Scope;          /* Parent scope */
-    unsigned            FuncId;         /* Id of hll function if any */
-    FilePos             Pos;            /* Position of statement */
-};
-
-/* The current line info */
-static LineInfo* CurLineInfo = 0;
-
-/* List of high level language debug symbols */
-static Collection HLLDbgSyms = STATIC_COLLECTION_INITIALIZER;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static HLLDbgSym* NewHLLDbgSym (unsigned Flags, unsigned Name, unsigned Type)
-/* Allocate and return a new HLLDbgSym structure */
-{
-    /* Allocate memory */
-    HLLDbgSym* S = xmalloc (sizeof (*S));
-
-    /* Initialize the fields as necessary */
-    S->Flags    = Flags;
-    S->Name     = Name;
-    S->AsmName  = EMPTY_STRING_ID;
-    S->Sym      = 0;
-    S->Offs     = 0;
-    S->Type     = Type;
-    S->Scope    = CurrentScope;
-    S->FuncId   = ~0U;
-    S->Pos      = CurTok.Pos;
-
-    /* Return the result */
-    return S;
-}
-
-
-
-static unsigned HexValue (char C)
-/* Convert the ascii representation of a hex nibble into the hex nibble */
-{
-    if (isdigit (C)) {
-        return C - '0';
-    } else if (islower (C)) {
-        return C - 'a' + 10;
-    } else {
-        return C - 'A' + 10;
-    }
-}
-
-
-
-static int ValidateType (StrBuf* Type)
-/* Check if the given type is valid and if so, return a string id for it. If
-** the type isn't valid, return -1. Type is overwritten when checking.
-*/
-{
-    unsigned        I;
-    const char*     A;
-    char*           B;
-
-
-    /* The length must not be zero and divideable by two */
-    unsigned Length = SB_GetLen (Type);
-    if (Length < 2 || (Length & 0x01) != 0) {
-        ErrorSkip ("Type value has invalid length");
-        return -1;
-    }
-
-    /* The string must consist completely of hex digit chars */
-    A = SB_GetConstBuf (Type);
-    for (I = 0; I < Length; ++I) {
-        if (!IsXDigit (A[I])) {
-            ErrorSkip ("Type value contains invalid characters");
-            return -1;
-        }
-    }
-
-    /* Convert the type to binary */
-    B = SB_GetBuf (Type);
-    while (A < SB_GetConstBuf (Type) + Length) {
-        /* Since we know, there are only hex digits, there can't be any errors */
-        *B++ = (HexValue (A[0]) << 4) | HexValue (A[1]);
-        A += 2;
-    }
-    Type->Len = (Length /= 2);
-
-    /* Allocate the type and return it */
-    return GetStrBufId (Type);
-}
-
-
-
-void DbgInfoFile (void)
-/* Parse and handle FILE subcommand of the .dbg pseudo instruction */
-{
-    StrBuf Name = STATIC_STRBUF_INITIALIZER;
-    unsigned long Size;
-    unsigned long MTime;
-
-    /* Parameters are separated by a comma */
-    ConsumeComma ();
-
-    /* Name */
-    if (CurTok.Tok != TOK_STRCON) {
-        ErrorSkip ("String constant expected");
-        return;
-    }
-    SB_Copy (&Name, &CurTok.SVal);
-    NextTok ();
-
-    /* Comma expected */
-    ConsumeComma ();
-
-    /* Size */
-    Size = ConstExpression ();
-
-    /* Comma expected */
-    ConsumeComma ();
-
-    /* MTime */
-    MTime = ConstExpression ();
-
-    /* Insert the file into the table */
-    AddFile (&Name, FT_DBGINFO, Size, MTime);
-
-    /* Free memory used for Name */
-    SB_Done (&Name);
-}
-
-
-
-void DbgInfoFunc (void)
-/* Parse and handle func subcommand of the .dbg pseudo instruction */
-{
-    static const char* StorageKeys[] = {
-        "EXTERN",
-        "STATIC",
-    };
-
-    unsigned    Name;
-    int         Type;
-    unsigned    AsmName;
-    unsigned    Flags;
-    HLLDbgSym*  S;
-
-
-    /* Parameters are separated by a comma */
-    ConsumeComma ();
-
-    /* Name */
-    if (CurTok.Tok != TOK_STRCON) {
-        ErrorSkip ("String constant expected");
-        return;
-    }
-    Name = GetStrBufId (&CurTok.SVal);
-    NextTok ();
-
-    /* Comma expected */
-    ConsumeComma ();
-
-    /* Type */
-    if (CurTok.Tok != TOK_STRCON) {
-        ErrorSkip ("String constant expected");
-        return;
-    }
-    Type = ValidateType (&CurTok.SVal);
-    if (Type < 0) {
-        return;
-    }
-    NextTok ();
-
-    /* Comma expected */
-    ConsumeComma ();
-
-    /* The storage class follows */
-    if (CurTok.Tok != TOK_IDENT) {
-        ErrorSkip ("Storage class specifier expected");
-        return;
-    }
-    switch (GetSubKey (StorageKeys, sizeof (StorageKeys)/sizeof (StorageKeys[0]))) {
-        case 0:   Flags = HLL_TYPE_FUNC | HLL_SC_EXTERN;            break;
-        case 1:   Flags = HLL_TYPE_FUNC | HLL_SC_STATIC;            break;
-        default:  ErrorSkip ("Storage class specifier expected");   return;
-    }
-    NextTok ();
-
-    /* Comma expected */
-    ConsumeComma ();
-
-    /* Assembler name follows */
-    if (CurTok.Tok != TOK_STRCON) {
-        ErrorSkip ("String constant expected");
-        return;
-    }
-    AsmName = GetStrBufId (&CurTok.SVal);
-    NextTok ();
-
-    /* There may only be one function per scope */
-    if (CurrentScope == RootScope) {
-        ErrorSkip ("Functions may not be used in the root scope");
-        return;
-    } else if (CurrentScope->Type != SCOPE_SCOPE || CurrentScope->Label == 0) {
-        ErrorSkip ("Functions can only be tagged to .PROC scopes");
-        return;
-    } else if (CurrentScope->Label->HLLSym != 0) {
-        ErrorSkip ("Only one HLL symbol per asm symbol is allowed");
-        return;
-    } else if (CurrentScope->Label->Name != AsmName) {
-        ErrorSkip ("Scope label and asm name for function must match");
-        return;
-    }
-
-    /* Add the function */
-    S = NewHLLDbgSym (Flags, Name, Type);
-    S->Sym = CurrentScope->Label;
-    CurrentScope->Label->HLLSym = S;
-    CollAppend (&HLLDbgSyms, S);
-}
-
-
-
-void DbgInfoLine (void)
-/* Parse and handle LINE subcommand of the .dbg pseudo instruction */
-{
-    long Line;
-    FilePos Pos = STATIC_FILEPOS_INITIALIZER;
-
-    /* Any new line info terminates the last one */
-    if (CurLineInfo) {
-        EndLine (CurLineInfo);
-        CurLineInfo = 0;
-    }
-
-    /* If a parameters follow, this is actual line info. If no parameters
-    ** follow, the last line info is terminated.
-    */
-    if (CurTok.Tok == TOK_SEP) {
-        return;
-    }
-
-    /* Parameters are separated by a comma */
-    ConsumeComma ();
-
-    /* The name of the file follows */
-    if (CurTok.Tok != TOK_STRCON) {
-        ErrorSkip ("String constant expected");
-        return;
-    }
-
-    /* Get the index in the file table for the name */
-    Pos.Name = GetFileIndex (&CurTok.SVal);
-
-    /* Skip the name */
-    NextTok ();
-
-    /* Comma expected */
-    ConsumeComma ();
-
-    /* Line number */
-    Line = ConstExpression ();
-    if (Line < 0) {
-        ErrorSkip ("Line number is out of valid range");
-        return;
-    }
-    Pos.Line = Line;
-
-    /* Generate a new external line info */
-    CurLineInfo = StartLine (&Pos, LI_TYPE_EXT, 0);
-}
-
-
-
-void DbgInfoSym (void)
-/* Parse and handle SYM subcommand of the .dbg pseudo instruction */
-{
-    static const char* StorageKeys[] = {
-        "AUTO",
-        "EXTERN",
-        "REGISTER",
-        "STATIC",
-    };
-
-    unsigned    Name;
-    int         Type;
-    unsigned    AsmName = EMPTY_STRING_ID;
-    unsigned    Flags;
-    int         Offs = 0;
-    HLLDbgSym*  S;
-
-
-    /* Parameters are separated by a comma */
-    ConsumeComma ();
-
-    /* Name */
-    if (CurTok.Tok != TOK_STRCON) {
-        ErrorSkip ("String constant expected");
-        return;
-    }
-    Name = GetStrBufId (&CurTok.SVal);
-    NextTok ();
-
-    /* Comma expected */
-    ConsumeComma ();
-
-    /* Type */
-    if (CurTok.Tok != TOK_STRCON) {
-        ErrorSkip ("String constant expected");
-        return;
-    }
-    Type = ValidateType (&CurTok.SVal);
-    if (Type < 0) {
-        return;
-    }
-    NextTok ();
-
-    /* Comma expected */
-    ConsumeComma ();
-
-    /* The storage class follows */
-    if (CurTok.Tok != TOK_IDENT) {
-        ErrorSkip ("Storage class specifier expected");
-        return;
-    }
-    switch (GetSubKey (StorageKeys, sizeof (StorageKeys)/sizeof (StorageKeys[0]))) {
-        case 0:   Flags = HLL_SC_AUTO;                              break;
-        case 1:   Flags = HLL_SC_EXTERN;                            break;
-        case 2:   Flags = HLL_SC_REG;                               break;
-        case 3:   Flags = HLL_SC_STATIC;                            break;
-        default:  ErrorSkip ("Storage class specifier expected");   return;
-    }
-
-    /* Skip the storage class token and the following comma */
-    NextTok ();
-    ConsumeComma ();
-
-    /* The next tokens depend on the storage class */
-    if (Flags == HLL_SC_AUTO) {
-        /* Auto: Stack offset follows */
-        Offs = ConstExpression ();
-    } else {
-        /* Register, extern or static: Assembler name follows */
-        if (CurTok.Tok != TOK_STRCON) {
-            ErrorSkip ("String constant expected");
-            return;
-        }
-        AsmName = GetStrBufId (&CurTok.SVal);
-        NextTok ();
-
-        /* For register, an offset follows */
-        if (Flags == HLL_SC_REG) {
-            ConsumeComma ();
-            Offs = ConstExpression ();
-        }
-    }
-
-    /* Add the function */
-    S = NewHLLDbgSym (Flags | HLL_TYPE_SYM, Name, Type);
-    S->AsmName = AsmName;
-    S->Offs    = Offs;
-    CollAppend (&HLLDbgSyms, S);
-}
-
-
-
-void DbgInfoCheck (void)
-/* Do checks on all hll debug info symbols when assembly is complete */
-{
-    /* When parsing the debug statements for HLL symbols, we have already
-    ** tagged the functions to their asm counterparts. This wasn't done for
-    ** C symbols, since we will allow forward declarations. So we have to
-    ** resolve the normal C symbols now.
-    */
-    unsigned I;
-    for (I = 0; I < CollCount (&HLLDbgSyms); ++I) {
-
-        /* Get the next symbol */
-        HLLDbgSym* S = CollAtUnchecked (&HLLDbgSyms, I);
-
-        /* Ignore functions and auto symbols, because the later live on the
-        ** stack and don't have corresponding asm symbols.
-        */
-        if (HLL_IS_FUNC (S->Flags) || HLL_GET_SC (S->Flags) == HLL_SC_AUTO) {
-            continue;
-        }
-
-        /* Safety */
-        CHECK (S->Sym == 0 && S->Scope != 0);
-
-        /* Search for the symbol name */
-        S->Sym = SymFindAny (S->Scope, GetStrBuf (S->AsmName));
-        if (S->Sym == 0) {
-            PError (&S->Pos, "Assembler symbol `%s' not found",
-                    GetString (S->AsmName));
-        } else {
-            /* Set the backlink */
-            S->Sym->HLLSym = S;
-        }
-
-    }
-}
-
-
-
-void WriteHLLDbgSyms (void)
-/* Write a list of all high level language symbols to the object file. */
-{
-    unsigned I;
-
-    /* Only if debug info is enabled */
-    if (DbgSyms) {
-
-        /* Write the symbol count to the list */
-        ObjWriteVar (CollCount (&HLLDbgSyms));
-
-        /* Walk through list and write all symbols to the file. */
-        for (I = 0; I < CollCount (&HLLDbgSyms); ++I) {
-
-            /* Get the next symbol */
-            HLLDbgSym* S = CollAtUnchecked (&HLLDbgSyms, I);
-
-            /* Get the type of the symbol */
-            unsigned SC = HLL_GET_SC (S->Flags);
-
-            /* Remember if the symbol has debug info attached
-            ** ### This should go into DbgInfoCheck
-            */
-            if (S->Sym && S->Sym->DebugSymId != ~0U) {
-                S->Flags |= HLL_DATA_SYM;
-            }
-
-            /* Write the symbol data */
-            ObjWriteVar (S->Flags);
-            ObjWriteVar (S->Name);
-            if (HLL_HAS_SYM (S->Flags)) {
-                ObjWriteVar (S->Sym->DebugSymId);
-            }
-            if (SC == HLL_SC_AUTO || SC == HLL_SC_REG) {
-                ObjWriteVar (S->Offs);
-            }
-            ObjWriteVar (S->Type);
-            ObjWriteVar (S->Scope->Id);
-        }
-
-    } else {
-
-        /* Write a count of zero */
-        ObjWriteVar (0);
-
-    }
-}
diff --git a/src/ca65/dbginfo.h b/src/ca65/dbginfo.h
deleted file mode 100644 (file)
index 9f8139f..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 dbginfo.h                                 */
-/*                                                                           */
-/*                         Handle the .dbg commands                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef DBGINFO_H
-#define DBGINFO_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void DbgInfoFile (void);
-/* Parse and handle FILE subcommand of the .dbg pseudo instruction */
-
-void DbgInfoFunc (void);
-/* Parse and handle FUNC subcommand of the .dbg pseudo instruction */
-
-void DbgInfoLine (void);
-/* Parse and handle LINE subcommand of the .dbg pseudo instruction */
-
-void DbgInfoSym (void);
-/* Parse and handle SYM subcommand of the .dbg pseudo instruction */
-
-void DbgInfoCheck (void);
-/* Do checks on all hll debug info symbols when assembly is complete */
-
-void WriteHLLDbgSyms (void);
-/* Write a list of all high level language symbols to the object file. */
-
-
-
-/* End of dbginfo.h */
-
-#endif
diff --git a/src/ca65/ea.h b/src/ca65/ea.h
deleted file mode 100644 (file)
index 9a03804..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  ea65.h                                   */
-/*                                                                           */
-/*                  Effective address structure definition                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2004 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef EA_H
-#define EA_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* GetEA result struct */
-typedef struct EffAddr EffAddr;
-struct EffAddr {
-    /* First three fields get filled when calling GetEA */
-    unsigned long       AddrModeSet;    /* Possible addressing modes */
-    struct ExprNode*    Expr;           /* Expression if any (NULL otherwise) */
-    unsigned            Reg;            /* Register number in sweet16 mode */
-
-    /* The following fields are used inside instr.c */
-    unsigned            AddrMode;       /* Actual addressing mode used */
-    unsigned long       AddrModeBit;    /* Addressing mode as bit mask */
-    unsigned char       Opcode;         /* Opcode */
-};
-
-
-
-/* End of ea.h */
-
-#endif
diff --git a/src/ca65/ea65.c b/src/ca65/ea65.c
deleted file mode 100644 (file)
index 5f76f29..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  ea65.c                                   */
-/*                                                                           */
-/*        65XX effective address parsing for the ca65 macroassembler         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* ca65 */
-#include "ea.h"
-#include "ea65.h"
-#include "error.h"
-#include "expr.h"
-#include "instr.h"
-#include "nexttok.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void GetEA (EffAddr* A)
-/* Parse an effective address, return the result in A */
-{
-    unsigned long Restrictions;
-
-    /* Clear the output struct */
-    A->AddrModeSet = 0;
-    A->Expr = 0;
-
-    /* Handle an addressing size override */
-    switch (CurTok.Tok) {
-        case TOK_OVERRIDE_ZP:
-            Restrictions = AM65_DIR | AM65_DIR_X | AM65_DIR_Y;
-            NextTok ();
-            break;
-
-        case TOK_OVERRIDE_ABS:
-            Restrictions = AM65_ABS | AM65_ABS_X | AM65_ABS_Y;
-            NextTok ();
-            break;
-
-        case TOK_OVERRIDE_FAR:
-            Restrictions = AM65_ABS_LONG | AM65_ABS_LONG_X;
-            NextTok ();
-            break;
-
-        default:
-            Restrictions = ~0UL;        /* None */
-            break;
-    }
-
-    /* Parse the effective address */
-    if (TokIsSep (CurTok.Tok)) {
-
-        A->AddrModeSet = AM65_IMPLICIT;
-
-    } else if (CurTok.Tok == TOK_HASH) {
-
-        /* #val */
-        NextTok ();
-        A->Expr  = Expression ();
-        A->AddrModeSet = AM65_ALL_IMM;
-
-    } else if (CurTok.Tok == TOK_A) {
-
-        NextTok ();
-        A->AddrModeSet = AM65_ACCU;
-
-    } else if (CurTok.Tok == TOK_LBRACK) {
-
-        /* [dir] or [dir],y */
-        NextTok ();
-        A->Expr = Expression ();
-        Consume (TOK_RBRACK, "']' expected");
-        if (CurTok.Tok == TOK_COMMA) {
-            /* [dir],y */
-            NextTok ();
-            Consume (TOK_Y, "`Y' expected");
-            A->AddrModeSet = AM65_DIR_IND_LONG_Y;
-        } else {
-            /* [dir] */
-            A->AddrModeSet = AM65_DIR_IND_LONG | AM65_ABS_IND_LONG;
-        }
-
-    } else if (CurTok.Tok == TOK_LPAREN) {
-
-        /* One of the indirect modes */
-        NextTok ();
-        A->Expr = Expression ();
-
-        if (CurTok.Tok == TOK_COMMA) {
-
-            /* (expr,X) or (rel,S),y */
-            NextTok ();
-            if (CurTok.Tok == TOK_X) {
-                /* (adr,x) */
-                NextTok ();
-                A->AddrModeSet = AM65_ABS_X_IND | AM65_DIR_X_IND;
-                ConsumeRParen ();
-            } else if (CurTok.Tok == TOK_S) {
-                /* (rel,s),y */
-                NextTok ();
-                A->AddrModeSet = AM65_STACK_REL_IND_Y;
-                ConsumeRParen ();
-                ConsumeComma ();
-                Consume (TOK_Y, "`Y' expected");
-            } else {
-                Error ("Syntax error");
-            }
-
-        } else {
-
-            /* (adr) or (adr),y */
-            ConsumeRParen ();
-            if (CurTok.Tok == TOK_COMMA) {
-                /* (adr),y */
-                NextTok ();
-                Consume (TOK_Y, "`Y' expected");
-                A->AddrModeSet = AM65_DIR_IND_Y;
-            } else {
-                /* (adr) */
-                A->AddrModeSet = AM65_ABS_IND | AM65_ABS_IND_LONG | AM65_DIR_IND;
-            }
-        }
-
-    } else {
-
-        /* Remaining stuff:
-        **
-        ** adr
-        ** adr,x
-        ** adr,y
-        ** adr,s
-        */
-        A->Expr = Expression ();
-
-        if (CurTok.Tok == TOK_COMMA) {
-
-            NextTok ();
-            switch (CurTok.Tok) {
-
-                case TOK_X:
-                    A->AddrModeSet = AM65_ABS_LONG_X | AM65_ABS_X | AM65_DIR_X;
-                    NextTok ();
-                    break;
-
-                case TOK_Y:
-                    A->AddrModeSet = AM65_ABS_Y | AM65_DIR_Y;
-                    NextTok ();
-                    break;
-
-                case TOK_S:
-                    A->AddrModeSet = AM65_STACK_REL;
-                    NextTok ();
-                    break;
-
-                default:
-                    Error ("Syntax error");
-
-            }
-
-        } else {
-
-            A->AddrModeSet = AM65_ABS_LONG | AM65_ABS | AM65_DIR;
-
-        }
-    }
-
-    /* Apply addressing mode overrides */
-    A->AddrModeSet &= Restrictions;
-}
diff --git a/src/ca65/ea65.h b/src/ca65/ea65.h
deleted file mode 100644 (file)
index 066d9b0..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  ea65.h                                   */
-/*                                                                           */
-/*        65XX effective address parsing for the ca65 macroassembler         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef EA65_H
-#define EA65_H
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-struct EffAddr;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void GetEA (EffAddr* A);
-/* Parse an effective address, return the result in A */
-
-
-
-/* End of ea65.h */
-
-#endif
diff --git a/src/ca65/easw16.c b/src/ca65/easw16.c
deleted file mode 100644 (file)
index 578a257..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 easw16.c                                  */
-/*                                                                           */
-/*       SWEET16 effective address parsing for the ca65 macroassembler       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* ca65 */
-#include "ea.h"
-#include "ea65.h"
-#include "error.h"
-#include "expr.h"
-#include "instr.h"
-#include "nexttok.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static long RegNum ()
-/* Try to read a register number specified not as a register (Rx) but as a
-** numeric value between 0 and 15. Return the register number or -1 on
-** failure.
-*/
-{
-    long Val;
-    ExprNode* Expr = Expression ();
-    if (!IsConstExpr (Expr, &Val) || Val < 0 || Val > 15) {
-        /* Invalid register */
-        Val = -1L;
-    }
-
-    /* Free the expression and return the register number */
-    FreeExpr (Expr);
-    return Val;
-}
-
-
-
-void GetSweet16EA (EffAddr* A)
-/* Parse an effective address, return the result in A */
-{
-    long Reg;
-
-    /* Clear the output struct */
-    A->AddrModeSet = 0;
-    A->Expr = 0;
-    A->Reg  = 0;
-
-    /* Parse the effective address */
-    if (TokIsSep (CurTok.Tok)) {
-
-        A->AddrModeSet = AMSW16_IMP;
-
-    } else if (CurTok.Tok == TOK_AT) {
-
-        /* @reg or @regnumber */
-        A->AddrModeSet = AMSW16_IND;
-        NextTok ();
-        if (CurTok.Tok == TOK_REG) {
-            A->Reg = (unsigned) CurTok.IVal;
-            NextTok ();
-        } else if ((Reg = RegNum ()) >= 0) {
-            /* Register number */
-            A->Reg = (unsigned) Reg;
-        } else {
-            ErrorSkip ("Register or register number expected");
-            A->Reg = 0;
-        }
-
-    } else if (CurTok.Tok == TOK_REG) {
-
-        A->Reg = (unsigned) CurTok.IVal;
-        NextTok ();
-
-        if (CurTok.Tok == TOK_COMMA) {
-
-            /* Rx, constant */
-            NextTok ();
-            A->Expr = Expression ();
-
-            A->AddrModeSet = AMSW16_IMM;
-
-        } else {
-
-            A->AddrModeSet = AMSW16_REG;
-
-        }
-
-    } else {
-
-        /* OPC ea  or: OPC regnum, constant */
-        A->Expr = Expression ();
-        A->AddrModeSet = AMSW16_BRA;
-
-        /* If the value is a constant between 0 and 15, it may also be a
-        ** register number.
-        */
-        if (IsConstExpr (A->Expr, &Reg) && Reg >= 0 && Reg <= 15) {
-            FreeExpr (A->Expr);
-            A->Reg = (unsigned) Reg;
-
-            /* If a comma follows, it is: OPC Rx, constant */
-            if (CurTok.Tok == TOK_COMMA) {
-                NextTok ();
-                A->Expr = Expression ();
-                A->AddrModeSet = AMSW16_IMM;
-            } else {
-                A->Expr = 0;
-                A->AddrModeSet |= AMSW16_REG;
-            }
-        }
-
-    }
-}
-
-
-                                   
diff --git a/src/ca65/easw16.h b/src/ca65/easw16.h
deleted file mode 100644 (file)
index 81dfd0f..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 easw16.h                                  */
-/*                                                                           */
-/*       SWEET16 effective address parsing for the ca65 macroassembler       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef EASW16_H
-#define EASW16_H
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-struct EffAddr;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void GetSweet16EA (EffAddr* A);
-/* Parse an effective address, return the result in A */
-
-
-
-/* End of easw16.h */
-
-#endif
-
-
-
-                
diff --git a/src/ca65/enum.c b/src/ca65/enum.c
deleted file mode 100644 (file)
index f0561b6..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  enum.c                                   */
-/*                                                                           */
-/*                               .ENUM command                               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "addrsize.h"
-#include "scopedefs.h"
-
-/* ca65 */
-#include "condasm.h"
-#include "enum.h"
-#include "error.h"
-#include "expr.h"
-#include "macro.h"
-#include "nexttok.h"
-#include "scanner.h"
-#include "symbol.h"
-#include "symtab.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void DoEnum (void)
-/* Handle the .ENUM command */
-{
-    /* Start at zero */
-    long      Offs     = 0;
-    ExprNode* BaseExpr = GenLiteral0 ();
-
-    /* Check for a name */
-    int Anon = (CurTok.Tok != TOK_IDENT);
-    if (!Anon) {
-        /* Enter a new scope, then skip the name */
-        SymEnterLevel (&CurTok.SVal, SCOPE_ENUM, ADDR_SIZE_ABS, 0);
-        NextTok ();
-    }
-
-    /* Test for end of line */
-    ConsumeSep ();
-
-    /* Read until end of struct */
-    while (CurTok.Tok != TOK_ENDENUM && CurTok.Tok != TOK_EOF) {
-
-        Macro*    M;
-        SymEntry* Sym;
-        ExprNode* EnumExpr;
-
-        /* Skip empty lines */
-        if (CurTok.Tok == TOK_SEP) {
-            NextTok ();
-            continue;
-        }
-
-        /* The format is "identifier [ = value ]" */
-        if (CurTok.Tok != TOK_IDENT) {
-            /* Maybe it's a conditional? */
-            if (!CheckConditionals ()) {
-                ErrorSkip ("Identifier expected");
-            }
-            continue;
-        }
-
-        /* We have an identifier. Is it a macro? */
-        if ((M = FindMacro (&CurTok.SVal)) != 0) {
-            MacExpandStart (M);
-            continue;
-        }
-
-        /* We have an identifier, generate a symbol */
-        Sym = SymFind (CurrentScope, &CurTok.SVal, SYM_ALLOC_NEW);
-
-        /* Skip the member name */
-        NextTok ();
-
-        /* Check for an assignment */
-        if (CurTok.Tok == TOK_EQ) {
-
-            /* Skip the equal sign */
-            NextTok ();
-
-            /* Read the new expression */
-            EnumExpr = Expression ();
-
-            /* Reset the base expression and the offset */
-            FreeExpr (BaseExpr);
-            BaseExpr = CloneExpr (EnumExpr);
-            Offs     = 0;
-
-        } else {
-
-            /* No assignment, use last value + 1 */
-            EnumExpr = GenAddExpr (CloneExpr (BaseExpr), GenLiteralExpr (Offs));
-
-        }
-
-        /* Assign the value to the enum member */
-        SymDef (Sym, EnumExpr, ADDR_SIZE_DEFAULT, SF_NONE);
-
-        /* Increment the offset for the next member */
-        ++Offs;
-
-        /* Expect end of line */
-        ConsumeSep ();
-    }
-
-    /* If this is not an anon enum, leave its scope */
-    if (!Anon) {
-        /* Close the enum scope */
-        SymLeaveLevel ();
-    }
-
-    /* End of enum definition */
-    Consume (TOK_ENDENUM, "`.ENDENUM' expected");
-
-    /* Free the base expression */
-    FreeExpr (BaseExpr);
-}
diff --git a/src/ca65/enum.h b/src/ca65/enum.h
deleted file mode 100644 (file)
index 7d73a97..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  enum.h                                   */
-/*                                                                           */
-/*                               .ENUM command                               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Römerstraße 52                                              */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ENUM_H
-#define ENUM_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void DoEnum (void);
-/* Handle the .ENUM command */
-
-
-
-/* End of enum.h */
-
-#endif
diff --git a/src/ca65/error.c b/src/ca65/error.c
deleted file mode 100644 (file)
index 38195d6..0000000
+++ /dev/null
@@ -1,402 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  error.c                                  */
-/*                                                                           */
-/*                Error handling for the ca65 macroassembler                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-/* common */
-#include "strbuf.h"
-
-/* ca65 */
-#include "error.h"
-#include "filetab.h"
-#include "lineinfo.h"
-#include "nexttok.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Warning level */
-unsigned WarnLevel      = 1;
-
-/* Statistics */
-unsigned ErrorCount     = 0;
-unsigned WarningCount   = 0;
-
-/* Maximum number of additional notifications */
-#define MAX_NOTES       8
-
-
-
-/*****************************************************************************/
-/*                             Helper functions                              */
-/*****************************************************************************/
-
-
-
-static void VPrintMsg (const FilePos* Pos, const char* Desc,
-                       const char* Format, va_list ap)
-/* Format and output an error/warning message. */
-{
-    StrBuf S = STATIC_STRBUF_INITIALIZER;
-
-    /* Format the actual message */
-    StrBuf Msg = STATIC_STRBUF_INITIALIZER;
-    SB_VPrintf (&Msg, Format, ap);
-    SB_Terminate (&Msg);
-
-    /* Format the message header */
-    SB_Printf (&S, "%s(%u): %s: ",
-               SB_GetConstBuf (GetFileName (Pos->Name)),
-               Pos->Line,
-               Desc);
-
-    /* Append the message to the message header */
-    SB_Append (&S, &Msg);
-
-    /* Delete the formatted message */
-    SB_Done (&Msg);
-
-    /* Add a new line and terminate the generated full message */
-    SB_AppendChar (&S, '\n');
-    SB_Terminate (&S);
-
-    /* Output the full message */
-    fputs (SB_GetConstBuf (&S), stderr);
-
-    /* Delete the buffer for the full message */
-    SB_Done (&S);
-}
-
-
-
-static void PrintMsg (const FilePos* Pos, const char* Desc,
-                      const char* Format, ...)
-/* Format and output an error/warning message. */
-{
-    va_list ap;
-    va_start (ap, Format);
-    VPrintMsg (Pos, Desc, Format, ap);
-    va_end (ap);
-}
-
-
-
-static void AddNotifications (const Collection* LineInfos)
-/* Output additional notifications for an error or warning */
-{
-    unsigned I;
-    unsigned Output;
-    unsigned Skipped;
-
-    /* The basic line info is always in slot zero. It has been used to
-    ** output the actual error or warning. The following slots may contain
-    ** more information. Check them and print additional notifications if
-    ** they're present, but limit the number to a reasonable value.
-    */
-    for (I = 1, Output = 0, Skipped = 0; I < CollCount (LineInfos); ++I) {
-        /* Get next line info */
-        const LineInfo* LI = CollConstAt (LineInfos, I);
-        /* Check the type and output an appropriate note */
-        const char* Msg;
-        switch (GetLineInfoType (LI)) {
-
-            case LI_TYPE_ASM:
-                Msg = "Expanded from here";
-                break;
-
-            case LI_TYPE_EXT:
-                Msg = "Assembler code generated from this line";
-                break;
-
-            case LI_TYPE_MACRO:
-                Msg = "Macro was defined here";
-                break;
-
-            case LI_TYPE_MACPARAM:
-                Msg = "Macro parameter came from here";
-                break;
-
-            default:
-                /* No output */
-                Msg = 0;
-                break;
-
-        }
-
-        /* Output until an upper limit of messages is reached */
-        if (Msg) {
-            if (Output < MAX_NOTES) {
-                PrintMsg (GetSourcePos (LI), "Note", "%s", Msg);
-                ++Output;
-            } else {
-                ++Skipped;
-            }
-        }
-    }
-
-    /* Add a note if we have more stuff that we won't output */
-    if (Skipped > 0) {
-        const LineInfo* LI = CollConstAt (LineInfos, 0);
-        PrintMsg (GetSourcePos (LI), "Note",
-                  "Dropping %u additional line infos", Skipped);
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                 Warnings                                  */
-/*****************************************************************************/
-
-
-
-static void WarningMsg (const Collection* LineInfos, const char* Format, va_list ap)
-/* Print warning message. */
-{
-    /* The first entry in the collection is that of the actual source pos */
-    const LineInfo* LI = CollConstAt (LineInfos, 0);
-
-    /* Output a warning for this position */
-    VPrintMsg (GetSourcePos (LI), "Warning", Format, ap);
-
-    /* Add additional notifications if necessary */
-    AddNotifications (LineInfos);
-
-    /* Count warnings */
-    ++WarningCount;
-}
-
-
-
-void Warning (unsigned Level, const char* Format, ...)
-/* Print warning message. */
-{
-    if (Level <= WarnLevel) {
-
-        va_list ap;
-        Collection LineInfos = STATIC_COLLECTION_INITIALIZER;
-
-        /* Get line infos for the current position */
-        GetFullLineInfo (&LineInfos);
-
-        /* Output the message */
-        va_start (ap, Format);
-        WarningMsg (&LineInfos, Format, ap);
-        va_end (ap);
-
-        /* Free the line info list */
-        ReleaseFullLineInfo (&LineInfos);
-        DoneCollection (&LineInfos);
-    }
-}
-
-
-
-void PWarning (const FilePos* Pos, unsigned Level, const char* Format, ...)
-/* Print warning message giving an explicit file and position. */
-{
-    if (Level <= WarnLevel) {
-        va_list ap;
-        va_start (ap, Format);
-        VPrintMsg (Pos, "Warning", Format, ap);
-        va_end (ap);
-
-        /* Count warnings */
-        ++WarningCount;
-    }
-}
-
-
-
-void LIWarning (const Collection* LineInfos, unsigned Level, const char* Format, ...)
-/* Print warning message using the given line infos */
-{
-    if (Level <= WarnLevel) {
-        /* Output the message */
-        va_list ap;
-        va_start (ap, Format);
-        WarningMsg (LineInfos, Format, ap);
-        va_end (ap);
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                  Errors                                   */
-/*****************************************************************************/
-
-
-
-void ErrorMsg (const Collection* LineInfos, const char* Format, va_list ap)
-/* Print an error message */
-{
-    /* The first entry in the collection is that of the actual source pos */
-    const LineInfo* LI = CollConstAt (LineInfos, 0);
-
-    /* Output an error for this position */
-    VPrintMsg (GetSourcePos (LI), "Error", Format, ap);
-
-    /* Add additional notifications if necessary */
-    AddNotifications (LineInfos);
-
-    /* Count errors */
-    ++ErrorCount;
-}
-
-
-
-void Error (const char* Format, ...)
-/* Print an error message */
-{
-    va_list ap;
-    Collection LineInfos = STATIC_COLLECTION_INITIALIZER;
-
-    /* Get line infos for the current position */
-    GetFullLineInfo (&LineInfos);
-
-    /* Output the message */
-    va_start (ap, Format);
-    ErrorMsg (&LineInfos, Format, ap);
-    va_end (ap);
-
-    /* Free the line info list */
-    ReleaseFullLineInfo (&LineInfos);
-    DoneCollection (&LineInfos);
-}
-
-
-
-void PError (const FilePos* Pos, const char* Format, ...)
-/* Print an error message giving an explicit file and position. */
-{
-    va_list ap;
-    va_start (ap, Format);
-    VPrintMsg (Pos, "Error", Format, ap);
-    va_end (ap);
-
-    /* Count errors */
-    ++ErrorCount;
-}
-
-
-
-void LIError (const Collection* LineInfos, const char* Format, ...)
-/* Print an error message using the given line infos. */
-{
-    /* Output an error for this position */
-    va_list ap;
-    va_start (ap, Format);
-    ErrorMsg (LineInfos, Format, ap);
-    va_end (ap);
-}
-
-
-
-void ErrorSkip (const char* Format, ...)
-/* Print an error message and skip the rest of the line */
-{
-    va_list ap;
-    Collection LineInfos = STATIC_COLLECTION_INITIALIZER;
-
-    /* Get line infos for the current position */
-    GetFullLineInfo (&LineInfos);
-
-    /* Output the message */
-    va_start (ap, Format);
-    ErrorMsg (&LineInfos, Format, ap);
-    va_end (ap);
-
-    /* Free the line info list */
-    ReleaseFullLineInfo (&LineInfos);
-    DoneCollection (&LineInfos);
-
-    /* Skip tokens until we reach the end of the line */
-    SkipUntilSep ();
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Fatal (const char* Format, ...)
-/* Print a message about a fatal error and die */
-{
-    va_list ap;
-    StrBuf S = STATIC_STRBUF_INITIALIZER;
-
-    va_start (ap, Format);
-    SB_VPrintf (&S, Format, ap);
-    SB_Terminate (&S);
-    va_end (ap);
-
-    fprintf (stderr, "Fatal error: %s\n", SB_GetConstBuf (&S));
-
-    SB_Done (&S);
-
-    /* And die... */
-    exit (EXIT_FAILURE);
-}
-
-
-
-void Internal (const char* Format, ...)
-/* Print a message about an internal assembler error and die. */
-{
-    va_list ap;
-    StrBuf S = STATIC_STRBUF_INITIALIZER;
-
-    va_start (ap, Format);
-    SB_VPrintf (&S, Format, ap);
-    SB_Terminate (&S);
-    va_end (ap);
-
-    fprintf (stderr, "Internal assembler error: %s\n", SB_GetConstBuf (&S));
-
-    SB_Done (&S);
-
-    exit (EXIT_FAILURE);
-}
diff --git a/src/ca65/error.h b/src/ca65/error.h
deleted file mode 100644 (file)
index c6fb4f4..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  error.h                                  */
-/*                                                                           */
-/*                Error handling for the ca65 macroassembler                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ERROR_H
-#define ERROR_H
-
-
-
-#if defined( __MINGW32__)
-#  pragma GCC diagnostic ignored "-Wformat"
-#endif
-
-
-
-/* common */
-#include "attrib.h"
-#include "coll.h"
-#include "filepos.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Warning levels */
-extern unsigned WarnLevel;
-
-/* Statistics */
-extern unsigned ErrorCount;
-extern unsigned WarningCount;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Warning (unsigned Level, const char* Format, ...) attribute ((format (printf, 2, 3)));
-/* Print warning message. */
-
-void PWarning (const FilePos* Pos, unsigned Level, const char* Format, ...) attribute ((format (printf, 3, 4)));
-/* Print warning message giving an explicit file and position. */
-
-void LIWarning (const Collection* LineInfos, unsigned Level, const char* Format, ...) attribute ((format (printf, 3, 4)));
-/* Print warning message using the given line infos */
-
-void Error (const char* Format, ...) attribute ((format (printf, 1, 2)));
-/* Print an error message */
-
-void PError (const FilePos* Pos, const char* Format, ...) attribute ((format (printf, 2, 3)));
-/* Print an error message giving an explicit file and position. */
-
-void LIError (const Collection* LineInfos, const char* Format, ...) attribute ((format (printf, 2, 3)));
-/* Print an error message using the given line infos. */
-
-void ErrorSkip (const char* Format, ...) attribute ((format (printf, 1, 2)));
-/* Print an error message and skip the rest of the line */
-
-void Fatal (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print a message about a fatal error and die */
-
-void Internal (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print a message about an internal assembler error and die. */
-
-
-
-/* End of error.h */
-
-#endif
diff --git a/src/ca65/expr.c b/src/ca65/expr.c
deleted file mode 100644 (file)
index 0352b3c..0000000
+++ /dev/null
@@ -1,2086 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  expr.c                                   */
-/*                                                                           */
-/*             Expression evaluation for the ca65 macroassembler             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-#include <time.h>
-
-/* common */
-#include "check.h"
-#include "cpu.h"
-#include "exprdefs.h"
-#include "print.h"
-#include "shift.h"
-#include "segdefs.h"
-#include "strbuf.h"
-#include "tgttrans.h"
-#include "version.h"
-#include "xmalloc.h"
-
-/* ca65 */
-#include "error.h"
-#include "expr.h"
-#include "global.h"
-#include "instr.h"
-#include "nexttok.h"
-#include "objfile.h"
-#include "segment.h"
-#include "sizeof.h"
-#include "studyexpr.h"
-#include "symbol.h"
-#include "symtab.h"
-#include "toklist.h"
-#include "ulabel.h"
-#include "macro.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Since all expressions are first packed into expression trees, and each
-** expression tree node is allocated on the heap, we add some type of special
-** purpose memory allocation here: Instead of freeing the nodes, we save some
-** number of freed nodes for later and remember them in a single linked list
-** using the Left link.
-*/
-#define MAX_FREE_NODES  64
-static ExprNode*        FreeExprNodes = 0;
-static unsigned         FreeNodeCount = 0;
-
-
-
-/*****************************************************************************/
-/*                                  Helpers                                  */
-/*****************************************************************************/
-
-
-
-static ExprNode* NewExprNode (unsigned Op)
-/* Create a new expression node */
-{
-    ExprNode* N;
-
-    /* Do we have some nodes in the list already? */
-    if (FreeNodeCount) {
-        /* Use first node from list */
-        N = FreeExprNodes;
-        FreeExprNodes = N->Left;
-        --FreeNodeCount;
-    } else {
-        /* Allocate fresh memory */
-        N = xmalloc (sizeof (ExprNode));
-    }
-    N->Op = Op;
-    N->Left = N->Right = 0;
-    N->Obj = 0;
-
-    return N;
-}
-
-
-
-static void FreeExprNode (ExprNode* E)
-/* Free a node */
-{
-    if (E) {
-        if (E->Op == EXPR_SYMBOL) {
-            /* Remove the symbol reference */
-            SymDelExprRef (E->V.Sym, E);
-        }
-        /* Place the symbol into the free nodes list if possible */
-        if (FreeNodeCount < MAX_FREE_NODES) {
-            /* Remember this node for later */
-            E->Left = FreeExprNodes;
-            FreeExprNodes = E;
-            ++FreeNodeCount;
-        } else {
-            /* Free the memory */
-            xfree (E);
-        }
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static ExprNode* Expr0 (void);
-
-
-
-int IsByteRange (long Val)
-/* Return true if this is a byte value */
-{
-    return (Val & ~0xFFL) == 0;
-}
-
-
-
-int IsWordRange (long Val)
-/* Return true if this is a word value */
-{
-    return (Val & ~0xFFFFL) == 0;
-}
-
-
-
-int IsFarRange (long Val)
-/* Return true if this is a far (24 bit) value */
-{
-    return (Val & ~0xFFFFFFL) == 0;
-}
-
-
-
-int IsEasyConst (const ExprNode* E, long* Val)
-/* Do some light checking if the given node is a constant. Don't care if E is
-** a complex expression. If E is a constant, return true and place its value
-** into Val, provided that Val is not NULL.
-*/
-{
-    /* Resolve symbols, follow symbol chains */
-    while (E->Op == EXPR_SYMBOL) {
-        E = SymResolve (E->V.Sym);
-        if (E == 0) {
-            /* Could not resolve */
-            return 0;
-        }
-    }
-
-    /* Symbols resolved, check for a literal */
-    if (E->Op == EXPR_LITERAL) {
-        if (Val) {
-            *Val = E->V.IVal;
-        }
-        return 1;
-    }
-
-    /* Not found to be a const according to our tests */
-    return 0;
-}
-
-
-
-static ExprNode* LoByte (ExprNode* Operand)
-/* Return the low byte of the given expression */
-{
-    ExprNode* Expr;
-    long      Val;
-
-    /* Special handling for const expressions */
-    if (IsEasyConst (Operand, &Val)) {
-        FreeExpr (Operand);
-        Expr = GenLiteralExpr (Val & 0xFF);
-    } else {
-        /* Extract byte #0 */
-        Expr = NewExprNode (EXPR_BYTE0);
-        Expr->Left = Operand;
-    }
-    return Expr;
-}
-
-
-
-static ExprNode* HiByte (ExprNode* Operand)
-/* Return the high byte of the given expression */
-{
-    ExprNode* Expr;
-    long      Val;
-
-    /* Special handling for const expressions */
-    if (IsEasyConst (Operand, &Val)) {
-        FreeExpr (Operand);
-        Expr = GenLiteralExpr ((Val >> 8) & 0xFF);
-    } else {
-        /* Extract byte #1 */
-        Expr = NewExprNode (EXPR_BYTE1);
-        Expr->Left = Operand;
-    }
-    return Expr;
-}
-
-
-
-static ExprNode* Bank (ExprNode* Operand)
-/* Return the bank of the given segmented expression */
-{
-    /* Generate the bank expression */
-    ExprNode* Expr = NewExprNode (EXPR_BANK);
-    Expr->Left = Operand;
-
-    /* Return the result */
-    return Expr;
-}
-
-
-
-static ExprNode* BankByte (ExprNode* Operand)
-/* Return the bank byte of the given expression */
-{
-    ExprNode* Expr;
-    long      Val;
-
-    /* Special handling for const expressions */
-    if (IsEasyConst (Operand, &Val)) {
-        FreeExpr (Operand);
-        Expr = GenLiteralExpr ((Val >> 16) & 0xFF);
-    } else {
-        /* Extract byte #2 */
-        Expr = NewExprNode (EXPR_BYTE2);
-        Expr->Left = Operand;
-    }
-    return Expr;
-}
-
-
-
-static ExprNode* LoWord (ExprNode* Operand)
-/* Return the low word of the given expression */
-{
-    ExprNode* Expr;
-    long      Val;
-
-    /* Special handling for const expressions */
-    if (IsEasyConst (Operand, &Val)) {
-        FreeExpr (Operand);
-        Expr = GenLiteralExpr (Val & 0xFFFF);
-    } else {
-        /* Extract word #0 */
-        Expr = NewExprNode (EXPR_WORD0);
-        Expr->Left = Operand;
-    }
-    return Expr;
-}
-
-
-
-static ExprNode* HiWord (ExprNode* Operand)
-/* Return the high word of the given expression */
-{
-    ExprNode* Expr;
-    long      Val;
-
-    /* Special handling for const expressions */
-    if (IsEasyConst (Operand, &Val)) {
-        FreeExpr (Operand);
-        Expr = GenLiteralExpr ((Val >> 16) & 0xFFFF);
-    } else {
-        /* Extract word #1 */
-        Expr = NewExprNode (EXPR_WORD1);
-        Expr->Left = Operand;
-    }
-    return Expr;
-}
-
-
-
-static ExprNode* Symbol (SymEntry* S)
-/* Reference a symbol and return an expression for it */
-{
-    if (S == 0) {
-        /* Some weird error happened before */
-        return GenLiteralExpr (0);
-    } else {
-        /* Mark the symbol as referenced */
-        SymRef (S);
-        /* If the symbol is a variable, return just its value, otherwise
-        ** return a reference to the symbol.
-        */
-        if (SymIsVar (S)) {
-            return CloneExpr (GetSymExpr (S));
-        } else {
-            /* Create symbol node */
-            return GenSymExpr (S);
-        }
-    }
-}
-
-
-
-ExprNode* FuncBank (void)
-/* Handle the .BANK builtin function */
-{
-    return Bank (Expression ());
-}
-
-
-
-ExprNode* FuncBankByte (void)
-/* Handle the .BANKBYTE builtin function */
-{
-    return BankByte (Expression ());
-}
-
-
-
-static ExprNode* FuncBlank (void)
-/* Handle the .BLANK builtin function */
-{
-    /* We have a list of tokens that ends with the closing paren. Skip
-    ** the tokens, and count them. Allow optionally curly braces.
-    */
-    token_t Term = GetTokListTerm (TOK_RPAREN);
-    unsigned Count = 0;
-    while (CurTok.Tok != Term) {
-
-        /* Check for end of line or end of input. Since the calling function
-        ** will check for the closing paren, we don't need to print an error
-        ** here, just bail out.
-        */
-        if (TokIsSep (CurTok.Tok)) {
-            break;
-        }
-
-        /* One more token */
-        ++Count;
-
-        /* Skip the token */
-        NextTok ();
-    }
-
-    /* If the list was enclosed in curly braces, skip the closing brace */
-    if (Term == TOK_RCURLY && CurTok.Tok == TOK_RCURLY) {
-        NextTok ();
-    }
-
-    /* Return true if the list was empty */
-    return GenLiteralExpr (Count == 0);
-}
-
-
-
-static ExprNode* FuncConst (void)
-/* Handle the .CONST builtin function */
-{
-    /* Read an expression */
-    ExprNode* Expr = Expression ();
-
-    /* Check the constness of the expression */
-    ExprNode* Result = GenLiteralExpr (IsConstExpr (Expr, 0));
-
-    /* Free the expression */
-    FreeExpr (Expr);
-
-    /* Done */
-    return Result;
-}
-
-
-
-static ExprNode* FuncDefined (void)
-/* Handle the .DEFINED builtin function */
-{
-    /* Parse the symbol name and search for the symbol */
-    SymEntry* Sym = ParseAnySymName (SYM_FIND_EXISTING);
-
-    /* Check if the symbol is defined */
-    return GenLiteralExpr (Sym != 0 && SymIsDef (Sym));
-}
-
-
-
-static ExprNode* FuncDefinedMacro (void)
-/* Handle the .DEFINEDMACRO builtin function */
-{
-    Macro* Mac = 0;
-
-    /* Check if the identifier is a macro */
-
-    if (CurTok.Tok == TOK_IDENT) {
-        Mac = FindMacro (&CurTok.SVal);
-    } else {
-        Error ("Identifier expected.");
-    }
-    /* Skip the name */
-    NextTok ();
-
-    return GenLiteralExpr (Mac != 0);
-}
-
-
-
-ExprNode* FuncHiByte (void)
-/* Handle the .HIBYTE builtin function */
-{
-    return HiByte (Expression ());
-}
-
-
-
-static ExprNode* FuncHiWord (void)
-/* Handle the .HIWORD builtin function */
-{
-    return HiWord (Expression ());
-}
-
-
-
-static ExprNode* FuncIsMnemonic (void)
-/* Handle the .ISMNEMONIC, .ISMNEM builtin function */
-{
-    int Instr = -1;
-
-    /* Check for a macro or an instruction depending on UbiquitousIdents */
-
-    if (CurTok.Tok == TOK_IDENT) {
-        if (UbiquitousIdents) {
-            /* Macros CAN be instructions, so check for them first */
-            if (FindMacro (&CurTok.SVal) == 0) {
-                Instr = FindInstruction (&CurTok.SVal);
-            }
-        }
-        else {
-            /* Macros and symbols may NOT use the names of instructions, so just check for the instruction */
-            Instr = FindInstruction (&CurTok.SVal);
-        }
-    }
-    else {
-        Error ("Identifier expected.");
-    }
-    /* Skip the name */
-    NextTok ();
-
-    return GenLiteralExpr (Instr > 0);
-}
-
-
-
-ExprNode* FuncLoByte (void)
-/* Handle the .LOBYTE builtin function */
-{
-    return LoByte (Expression ());
-}
-
-
-
-static ExprNode* FuncLoWord (void)
-/* Handle the .LOWORD builtin function */
-{
-    return LoWord (Expression ());
-}
-
-
-
-static ExprNode* DoMatch (enum TC EqualityLevel)
-/* Handle the .MATCH and .XMATCH builtin functions */
-{
-    int Result;
-    TokNode* Root = 0;
-    TokNode* Last = 0;
-    TokNode* Node;
-
-    /* A list of tokens follows. Read this list and remember it building a
-    ** single linked list of tokens including attributes. The list is
-    ** either enclosed in curly braces, or terminated by a comma.
-    */
-    token_t Term = GetTokListTerm (TOK_COMMA);
-    while (CurTok.Tok != Term) {
-
-        /* We may not end-of-line of end-of-file here */
-        if (TokIsSep (CurTok.Tok)) {
-            Error ("Unexpected end of line");
-            return GenLiteral0 ();
-        }
-
-        /* Get a node with this token */
-        Node = NewTokNode ();
-
-        /* Insert the node into the list */
-        if (Last == 0) {
-            Root = Node;
-        } else {
-            Last->Next = Node;
-        }
-        Last = Node;
-
-        /* Skip the token */
-        NextTok ();
-    }
-
-    /* Skip the terminator token*/
-    NextTok ();
-
-    /* If the token list was enclosed in curly braces, we expect a comma */
-    if (Term == TOK_RCURLY) {
-        ConsumeComma ();
-    }
-
-    /* Read the second list which is optionally enclosed in curly braces and
-    ** terminated by the right parenthesis. Compare each token against the
-    ** one in the first list.
-    */
-    Term = GetTokListTerm (TOK_RPAREN);
-    Result = 1;
-    Node = Root;
-    while (CurTok.Tok != Term) {
-
-        /* We may not end-of-line of end-of-file here */
-        if (TokIsSep (CurTok.Tok)) {
-            Error ("Unexpected end of line");
-            return GenLiteral0 ();
-        }
-
-        /* Compare the tokens if the result is not already known */
-        if (Result != 0) {
-            if (Node == 0) {
-                /* The second list is larger than the first one */
-                Result = 0;
-            } else if (TokCmp (Node) < EqualityLevel) {
-                /* Tokens do not match */
-                Result = 0;
-            }
-        }
-
-        /* Next token in first list */
-        if (Node) {
-            Node = Node->Next;
-        }
-
-        /* Next token in current list */
-        NextTok ();
-    }
-
-    /* If the token list was enclosed in curly braces, eat the closing brace */
-    if (Term == TOK_RCURLY) {
-        NextTok ();
-    }
-
-    /* Check if there are remaining tokens in the first list */
-    if (Node != 0) {
-        Result = 0;
-    }
-
-    /* Free the token list */
-    while (Root) {
-        Node = Root;
-        Root = Root->Next;
-        FreeTokNode (Node);
-    }
-
-    /* Done, return the result */
-    return GenLiteralExpr (Result);
-}
-
-
-
-static ExprNode* FuncMatch (void)
-/* Handle the .MATCH function */
-{
-    return DoMatch (tcSameToken);
-}
-
-
-
-static ExprNode* FuncMax (void)
-/* Handle the .MAX function */
-{
-    ExprNode* Left;
-    ExprNode* Right;
-    ExprNode* Expr;
-    long LeftVal, RightVal;
-
-    /* Two arguments to the pseudo function */
-    Left = Expression ();
-    ConsumeComma ();
-    Right = Expression ();
-
-    /* Check if we can evaluate the value immediately */
-    if (IsEasyConst (Left, &LeftVal) && IsEasyConst (Right, &RightVal)) {
-        FreeExpr (Left);
-        FreeExpr (Right);
-        Expr = GenLiteralExpr ((LeftVal > RightVal)? LeftVal : RightVal);
-    } else {
-        /* Make an expression node */
-        Expr = NewExprNode (EXPR_MAX);
-        Expr->Left = Left;
-        Expr->Right = Right;
-    }
-    return Expr;
-}
-
-
-
-static ExprNode* FuncMin (void)
-/* Handle the .MIN function */
-{
-    ExprNode* Left;
-    ExprNode* Right;
-    ExprNode* Expr;
-    long LeftVal, RightVal;
-
-    /* Two arguments to the pseudo function */
-    Left = Expression ();
-    ConsumeComma ();
-    Right = Expression ();
-
-    /* Check if we can evaluate the value immediately */
-    if (IsEasyConst (Left, &LeftVal) && IsEasyConst (Right, &RightVal)) {
-        FreeExpr (Left);
-        FreeExpr (Right);
-        Expr = GenLiteralExpr ((LeftVal < RightVal)? LeftVal : RightVal);
-    } else {
-        /* Make an expression node */
-        Expr = NewExprNode (EXPR_MIN);
-        Expr->Left = Left;
-        Expr->Right = Right;
-    }
-    return Expr;
-}
-
-
-
-static ExprNode* FuncReferenced (void)
-/* Handle the .REFERENCED builtin function */
-{
-    /* Parse the symbol name and search for the symbol */
-    SymEntry* Sym = ParseAnySymName (SYM_FIND_EXISTING);
-
-    /* Check if the symbol is referenced */
-    return GenLiteralExpr (Sym != 0 && SymIsRef (Sym));
-}
-
-
-
-static ExprNode* FuncAddrSize (void)
-/* Handle the .ADDRSIZE function */
-{
-    StrBuf    ScopeName = STATIC_STRBUF_INITIALIZER;
-    StrBuf    Name = STATIC_STRBUF_INITIALIZER;
-    SymEntry* Sym;
-    int       AddrSize;
-    int       NoScope;
-
-
-    /* Assume we don't know the size */
-    AddrSize = 0;
-
-    /* Check for a cheap local which needs special handling */
-    if (CurTok.Tok == TOK_LOCAL_IDENT) {
-
-        /* Cheap local symbol */
-        Sym = SymFindLocal (SymLast, &CurTok.SVal, SYM_FIND_EXISTING);
-        if (Sym == 0) {
-            Error ("Unknown symbol or scope: `%m%p'", &CurTok.SVal);
-        } else {
-            AddrSize = Sym->AddrSize;
-        }
-
-        /* Remember and skip SVal, terminate ScopeName so it is empty */
-        SB_Copy (&Name, &CurTok.SVal);
-        NextTok ();
-        SB_Terminate (&ScopeName);
-
-    } else {
-
-        /* Parse the scope and the name */
-        SymTable* ParentScope = ParseScopedIdent (&Name, &ScopeName);
-
-        /* Check if the parent scope is valid */
-        if (ParentScope == 0) {
-            /* No such scope */
-            SB_Done (&ScopeName);
-            SB_Done (&Name);
-            return GenLiteral0 ();
-        }
-
-        /* If ScopeName is empty, no explicit scope was specified. We have to
-        ** search upper scope levels in this case.
-        */
-        NoScope = SB_IsEmpty (&ScopeName);
-
-        /* If we did find a scope with the name, read the symbol defining the
-        ** size, otherwise search for a symbol entry with the name and scope.
-        */
-        if (NoScope) {
-            Sym = SymFindAny (ParentScope, &Name);
-        } else {
-            Sym = SymFind (ParentScope, &Name, SYM_FIND_EXISTING);
-        }
-        /* If we found the symbol retrieve the size, otherwise complain */
-        if (Sym) {
-            AddrSize = Sym->AddrSize;
-        } else {
-            Error ("Unknown symbol or scope: `%m%p%m%p'", &ScopeName, &Name);
-        }
-
-    }
-
-    if (AddrSize == 0) {
-        Warning (1, "Unknown address size: `%m%p%m%p'", &ScopeName, &Name);
-    }
-
-    /* Free the string buffers */
-    SB_Done (&ScopeName);
-    SB_Done (&Name);
-
-    /* Return the size. */
-
-    return GenLiteralExpr (AddrSize);
-}
-
-
-
-static ExprNode* FuncSizeOf (void)
-/* Handle the .SIZEOF function */
-{
-    StrBuf    ScopeName = STATIC_STRBUF_INITIALIZER;
-    StrBuf    Name = STATIC_STRBUF_INITIALIZER;
-    SymTable* Scope;
-    SymEntry* Sym;
-    SymEntry* SizeSym;
-    long      Size;
-    int       NoScope;
-
-
-    /* Assume an error */
-    SizeSym = 0;
-
-    /* Check for a cheap local which needs special handling */
-    if (CurTok.Tok == TOK_LOCAL_IDENT) {
-
-        /* Cheap local symbol */
-        Sym = SymFindLocal (SymLast, &CurTok.SVal, SYM_FIND_EXISTING);
-        if (Sym == 0) {
-            Error ("Unknown symbol or scope: `%m%p'", &CurTok.SVal);
-        } else {
-            SizeSym = GetSizeOfSymbol (Sym);
-        }
-
-        /* Remember and skip SVal, terminate ScopeName so it is empty */
-        SB_Copy (&Name, &CurTok.SVal);
-        NextTok ();
-        SB_Terminate (&ScopeName);
-
-    } else {
-
-        /* Parse the scope and the name */
-        SymTable* ParentScope = ParseScopedIdent (&Name, &ScopeName);
-
-        /* Check if the parent scope is valid */
-        if (ParentScope == 0) {
-            /* No such scope */
-            SB_Done (&ScopeName);
-            SB_Done (&Name);
-            return GenLiteral0 ();
-        }
-
-        /* If ScopeName is empty, no explicit scope was specified. We have to
-        ** search upper scope levels in this case.
-        */
-        NoScope = SB_IsEmpty (&ScopeName);
-
-        /* First search for a scope with the given name */
-        if (NoScope) {
-            Scope = SymFindAnyScope (ParentScope, &Name);
-        } else {
-            Scope = SymFindScope (ParentScope, &Name, SYM_FIND_EXISTING);
-        }
-
-        /* If we did find a scope with the name, read the symbol defining the
-        ** size, otherwise search for a symbol entry with the name and scope.
-        */
-        if (Scope) {
-            /* Yep, it's a scope */
-            SizeSym = GetSizeOfScope (Scope);
-        } else {
-            if (NoScope) {
-                Sym = SymFindAny (ParentScope, &Name);
-            } else {
-                Sym = SymFind (ParentScope, &Name, SYM_FIND_EXISTING);
-            }
-
-            /* If we found the symbol retrieve the size, otherwise complain */
-            if (Sym) {
-                SizeSym = GetSizeOfSymbol (Sym);
-            } else {
-                Error ("Unknown symbol or scope: `%m%p%m%p'",
-                       &ScopeName, &Name);
-            }
-        }
-    }
-
-    /* Check if we have a size */
-    if (SizeSym == 0 || !SymIsConst (SizeSym, &Size)) {
-        Error ("Size of `%m%p%m%p' is unknown", &ScopeName, &Name);
-        Size = 0;
-    }
-
-    /* Free the string buffers */
-    SB_Done (&ScopeName);
-    SB_Done (&Name);
-
-    /* Return the size */
-    return GenLiteralExpr (Size);
-}
-
-
-
-static ExprNode* FuncStrAt (void)
-/* Handle the .STRAT function */
-{
-    StrBuf Str = STATIC_STRBUF_INITIALIZER;
-    long Index;
-    unsigned char C = 0;
-
-    /* String constant expected */
-    if (CurTok.Tok != TOK_STRCON) {
-        Error ("String constant expected");
-        NextTok ();
-        goto ExitPoint;
-    }
-
-    /* Remember the string and skip it */
-    SB_Copy (&Str, &CurTok.SVal);
-    NextTok ();
-
-    /* Comma must follow */
-    ConsumeComma ();
-
-    /* Expression expected */
-    Index = ConstExpression ();
-
-    /* Must be a valid index */
-    if (Index >= (long) SB_GetLen (&Str)) {
-        Error ("Range error");
-        goto ExitPoint;
-    }
-
-    /* Get the char, handle as unsigned. Be sure to translate it into
-    ** the target character set.
-    */
-    C = TgtTranslateChar (SB_At (&Str, (unsigned)Index));
-
-ExitPoint:
-    /* Free string buffer memory */
-    SB_Done (&Str);
-
-    /* Return the char expression */
-    return GenLiteralExpr (C);
-}
-
-
-
-static ExprNode* FuncStrLen (void)
-/* Handle the .STRLEN function */
-{
-    int Len;
-
-    /* String constant expected */
-    if (CurTok.Tok != TOK_STRCON) {
-
-        Error ("String constant expected");
-        /* Smart error recovery */
-        if (CurTok.Tok != TOK_RPAREN) {
-            NextTok ();
-        }
-        Len = 0;
-
-    } else {
-
-        /* Get the length of the string */
-        Len = SB_GetLen (&CurTok.SVal);
-
-        /* Skip the string */
-        NextTok ();
-    }
-
-    /* Return the length */
-    return GenLiteralExpr (Len);
-}
-
-
-
-static ExprNode* FuncTCount (void)
-/* Handle the .TCOUNT function */
-{
-    /* We have a list of tokens that ends with the closing paren. Skip
-    ** the tokens, and count them. Allow optionally curly braces.
-    */
-    token_t Term = GetTokListTerm (TOK_RPAREN);
-    int Count = 0;
-    while (CurTok.Tok != Term) {
-
-        /* Check for end of line or end of input. Since the calling function
-        ** will check for the closing paren, we don't need to print an error
-        ** here, just bail out.
-        */
-        if (TokIsSep (CurTok.Tok)) {
-            break;
-        }
-
-        /* One more token */
-        ++Count;
-
-        /* Skip the token */
-        NextTok ();
-    }
-
-    /* If the list was enclosed in curly braces, skip the closing brace */
-    if (Term == TOK_RCURLY && CurTok.Tok == TOK_RCURLY) {
-        NextTok ();
-    }
-
-    /* Return the number of tokens */
-    return GenLiteralExpr (Count);
-}
-
-
-
-static ExprNode* FuncXMatch (void)
-/* Handle the .XMATCH function */
-{
-    return DoMatch (tcIdentical);
-}
-
-
-
-static ExprNode* Function (ExprNode* (*F) (void))
-/* Handle builtin functions */
-{
-    ExprNode* E;
-
-    /* Skip the keyword */
-    NextTok ();
-
-    /* Expression must be enclosed in braces */
-    if (CurTok.Tok != TOK_LPAREN) {
-        Error ("'(' expected");
-        SkipUntilSep ();
-        return GenLiteral0 ();
-    }
-    NextTok ();
-
-    /* Call the function itself */
-    E = F ();
-
-    /* Closing brace must follow */
-    ConsumeRParen ();
-
-    /* Return the result of the actual function */
-    return E;
-}
-
-
-
-static ExprNode* Factor (void)
-{
-    ExprNode* L;
-    ExprNode* N;
-    long      Val;
-
-    switch (CurTok.Tok) {
-
-        case TOK_INTCON:
-            N = GenLiteralExpr (CurTok.IVal);
-            NextTok ();
-            break;
-
-        case TOK_CHARCON:
-            N = GenLiteralExpr (TgtTranslateChar (CurTok.IVal));
-            NextTok ();
-            break;
-
-        case TOK_NAMESPACE:
-        case TOK_IDENT:
-        case TOK_LOCAL_IDENT:
-            N = Symbol (ParseAnySymName (SYM_ALLOC_NEW));
-            break;
-
-        case TOK_ULABEL:
-            N = ULabRef (CurTok.IVal);
-            NextTok ();
-            break;
-
-        case TOK_PLUS:
-            NextTok ();
-            N = Factor ();
-            break;
-
-        case TOK_MINUS:
-            NextTok ();
-            L = Factor ();
-            if (IsEasyConst (L, &Val)) {
-                FreeExpr (L);
-                N = GenLiteralExpr (-Val);
-            } else {
-                N = NewExprNode (EXPR_UNARY_MINUS);
-                N->Left = L;
-            }
-            break;
-
-        case TOK_NOT:
-            NextTok ();
-            L = Factor ();
-            if (IsEasyConst (L, &Val)) {
-                FreeExpr (L);
-                N = GenLiteralExpr (~Val);
-            } else {
-                N = NewExprNode (EXPR_NOT);
-                N->Left = L;
-            }
-            break;
-
-        case TOK_STAR:
-        case TOK_PC:
-            NextTok ();
-            N = GenCurrentPC ();
-            break;
-
-        case TOK_LT:
-            NextTok ();
-            N = LoByte (Factor ());
-            break;
-
-        case TOK_GT:
-            NextTok ();
-            N = HiByte (Factor ());
-            break;
-
-        case TOK_XOR:
-            /* ^ means the bank byte of an expression */
-            NextTok ();
-            N = BankByte (Factor ());
-            break;
-
-        case TOK_LPAREN:
-            NextTok ();
-            N = Expr0 ();
-            ConsumeRParen ();
-            break;
-
-        case TOK_BANK:
-            N = Function (FuncBank);
-            break;
-
-        case TOK_BANKBYTE:
-            N = Function (FuncBankByte);
-            break;
-
-        case TOK_ADDRSIZE:
-            N = Function (FuncAddrSize);
-            break;
-
-        case TOK_BLANK:
-            N = Function (FuncBlank);
-            break;
-
-        case TOK_CONST:
-            N = Function (FuncConst);
-            break;
-
-        case TOK_CPU:
-            N = GenLiteralExpr (CPUIsets[CPU]);
-            NextTok ();
-            break;
-
-        case TOK_DEFINED:
-            N = Function (FuncDefined);
-            break;
-
-        case TOK_DEFINEDMACRO:
-            N = Function (FuncDefinedMacro);
-            break;
-
-        case TOK_HIBYTE:
-            N = Function (FuncHiByte);
-            break;
-
-        case TOK_HIWORD:
-            N = Function (FuncHiWord);
-            break;
-
-        case TOK_ISMNEMONIC:
-            N = Function (FuncIsMnemonic);
-            break;
-
-        case TOK_LOBYTE:
-            N = Function (FuncLoByte);
-            break;
-
-        case TOK_LOWORD:
-            N = Function (FuncLoWord);
-            break;
-
-        case TOK_MATCH:
-            N = Function (FuncMatch);
-            break;
-
-        case TOK_MAX:
-            N = Function (FuncMax);
-            break;
-
-        case TOK_MIN:
-            N = Function (FuncMin);
-            break;
-
-        case TOK_REFERENCED:
-            N = Function (FuncReferenced);
-            break;
-
-        case TOK_SIZEOF:
-            N = Function (FuncSizeOf);
-            break;
-
-        case TOK_STRAT:
-            N = Function (FuncStrAt);
-            break;
-
-        case TOK_STRLEN:
-            N = Function (FuncStrLen);
-            break;
-
-        case TOK_TCOUNT:
-            N = Function (FuncTCount);
-            break;
-
-        case TOK_TIME:
-            N = GenLiteralExpr ((long) time (0));
-            NextTok ();
-            break;
-
-        case TOK_VERSION:
-            N = GenLiteralExpr (GetVersionAsNumber ());
-            NextTok ();
-            break;
-
-        case TOK_XMATCH:
-            N = Function (FuncXMatch);
-            break;
-
-        default:
-            if (LooseCharTerm && CurTok.Tok == TOK_STRCON &&
-                SB_GetLen (&CurTok.SVal) == 1) {
-                /* A character constant */
-                N = GenLiteralExpr (TgtTranslateChar (SB_At (&CurTok.SVal, 0)));
-            } else {
-                N = GenLiteral0 ();     /* Dummy */
-                Error ("Syntax error");
-            }
-            NextTok ();
-            break;
-    }
-    return N;
-}
-
-
-
-static ExprNode* Term (void)
-{
-    /* Read left hand side */
-    ExprNode* Root = Factor ();
-
-    /* Handle multiplicative operations */
-    while (CurTok.Tok == TOK_MUL || CurTok.Tok == TOK_DIV ||
-           CurTok.Tok == TOK_MOD || CurTok.Tok == TOK_AND ||
-           CurTok.Tok == TOK_XOR || CurTok.Tok == TOK_SHL ||
-           CurTok.Tok == TOK_SHR) {
-
-        long LVal, RVal, Val;
-        ExprNode* Left;
-        ExprNode* Right;
-
-        /* Remember the token and skip it */
-        token_t T = CurTok.Tok;
-        NextTok ();
-
-        /* Move root to left side and read the right side */
-        Left  = Root;
-        Right = Factor ();
-
-        /* If both expressions are constant, we can evaluate the term */
-        if (IsEasyConst (Left, &LVal) && IsEasyConst (Right, &RVal)) {
-
-            switch (T) {
-                case TOK_MUL:
-                    Val = LVal * RVal;
-                    break;
-
-                case TOK_DIV:
-                    if (RVal == 0) {
-                        Error ("Division by zero");
-                        Val = 1;
-                    } else {
-                        Val = LVal / RVal;
-                    }
-                    break;
-
-                case TOK_MOD:
-                    if (RVal == 0) {
-                        Error ("Modulo operation with zero");
-                        Val = 1;
-                    } else {
-                        Val = LVal % RVal;
-                    }
-                    break;
-
-                case TOK_AND:
-                    Val = LVal & RVal;
-                    break;
-
-                case TOK_XOR:
-                    Val = LVal ^ RVal;
-                    break;
-
-                case TOK_SHL:
-                    Val = shl_l (LVal, RVal);
-                    break;
-
-                case TOK_SHR:
-                    Val = shr_l (LVal, RVal);
-                    break;
-
-                default:
-                    Internal ("Invalid token");
-            }
-
-            /* Generate a literal expression and delete the old left and
-            ** right sides.
-            */
-            FreeExpr (Left);
-            FreeExpr (Right);
-            Root = GenLiteralExpr (Val);
-
-        } else {
-
-            /* Generate an expression tree */
-            unsigned char Op;
-            switch (T) {
-                case TOK_MUL:   Op = EXPR_MUL;  break;
-                case TOK_DIV:   Op = EXPR_DIV;  break;
-                case TOK_MOD:   Op = EXPR_MOD;  break;
-                case TOK_AND:   Op = EXPR_AND;  break;
-                case TOK_XOR:   Op = EXPR_XOR;  break;
-                case TOK_SHL:   Op = EXPR_SHL;  break;
-                case TOK_SHR:   Op = EXPR_SHR;  break;
-                default:        Internal ("Invalid token");
-            }
-            Root        = NewExprNode (Op);
-            Root->Left  = Left;
-            Root->Right = Right;
-
-        }
-
-    }
-
-    /* Return the expression tree we've created */
-    return Root;
-}
-
-
-
-static ExprNode* SimpleExpr (void)
-{
-    /* Read left hand side */
-    ExprNode* Root = Term ();
-
-    /* Handle additive operations */
-    while (CurTok.Tok == TOK_PLUS  ||
-           CurTok.Tok == TOK_MINUS ||
-           CurTok.Tok == TOK_OR) {
-
-        long LVal, RVal, Val;
-        ExprNode* Left;
-        ExprNode* Right;
-
-        /* Remember the token and skip it */
-        token_t T = CurTok.Tok;
-        NextTok ();
-
-        /* Move root to left side and read the right side */
-        Left  = Root;
-        Right = Term ();
-
-        /* If both expressions are constant, we can evaluate the term */
-        if (IsEasyConst (Left, &LVal) && IsEasyConst (Right, &RVal)) {
-
-            switch (T) {
-                case TOK_PLUS:  Val = LVal + RVal;      break;
-                case TOK_MINUS: Val = LVal - RVal;      break;
-                case TOK_OR:    Val = LVal | RVal;      break;
-                default:        Internal ("Invalid token");
-            }
-
-            /* Generate a literal expression and delete the old left and
-            ** right sides.
-            */
-            FreeExpr (Left);
-            FreeExpr (Right);
-            Root = GenLiteralExpr (Val);
-
-        } else {
-
-            /* Generate an expression tree */
-            unsigned char Op;
-            switch (T) {
-                case TOK_PLUS:  Op = EXPR_PLUS;  break;
-                case TOK_MINUS: Op = EXPR_MINUS; break;
-                case TOK_OR:    Op = EXPR_OR;    break;
-                default:        Internal ("Invalid token");
-            }
-            Root        = NewExprNode (Op);
-            Root->Left  = Left;
-            Root->Right = Right;
-
-        }
-    }
-
-    /* Return the expression tree we've created */
-    return Root;
-}
-
-
-
-static ExprNode* BoolExpr (void)
-/* Evaluate a boolean expression */
-{
-    /* Read left hand side */
-    ExprNode* Root = SimpleExpr ();
-
-    /* Handle booleans */
-    while (CurTok.Tok == TOK_EQ || CurTok.Tok == TOK_NE ||
-           CurTok.Tok == TOK_LT || CurTok.Tok == TOK_GT ||
-           CurTok.Tok == TOK_LE || CurTok.Tok == TOK_GE) {
-
-        long LVal, RVal, Val;
-        ExprNode* Left;
-        ExprNode* Right;
-
-        /* Remember the token and skip it */
-        token_t T = CurTok.Tok;
-        NextTok ();
-
-        /* Move root to left side and read the right side */
-        Left  = Root;
-        Right = SimpleExpr ();
-
-        /* If both expressions are constant, we can evaluate the term */
-        if (IsEasyConst (Left, &LVal) && IsEasyConst (Right, &RVal)) {
-
-            switch (T) {
-                case TOK_EQ:    Val = (LVal == RVal);   break;
-                case TOK_NE:    Val = (LVal != RVal);   break;
-                case TOK_LT:    Val = (LVal < RVal);    break;
-                case TOK_GT:    Val = (LVal > RVal);    break;
-                case TOK_LE:    Val = (LVal <= RVal);   break;
-                case TOK_GE:    Val = (LVal >= RVal);   break;
-                default:        Internal ("Invalid token");
-            }
-
-            /* Generate a literal expression and delete the old left and
-            ** right sides.
-            */
-            FreeExpr (Left);
-            FreeExpr (Right);
-            Root = GenLiteralExpr (Val);
-
-        } else {
-
-            /* Generate an expression tree */
-            unsigned char Op;
-            switch (T) {
-                case TOK_EQ:    Op = EXPR_EQ;   break;
-                case TOK_NE:    Op = EXPR_NE;   break;
-                case TOK_LT:    Op = EXPR_LT;   break;
-                case TOK_GT:    Op = EXPR_GT;   break;
-                case TOK_LE:    Op = EXPR_LE;   break;
-                case TOK_GE:    Op = EXPR_GE;   break;
-                default:        Internal ("Invalid token");
-            }
-            Root        = NewExprNode (Op);
-            Root->Left  = Left;
-            Root->Right = Right;
-
-        }
-    }
-
-    /* Return the expression tree we've created */
-    return Root;
-}
-
-
-
-static ExprNode* Expr2 (void)
-/* Boolean operators: AND and XOR */
-{
-    /* Read left hand side */
-    ExprNode* Root = BoolExpr ();
-
-    /* Handle booleans */
-    while (CurTok.Tok == TOK_BOOLAND || CurTok.Tok == TOK_BOOLXOR) {
-
-        long LVal, RVal, Val;
-        ExprNode* Left;
-        ExprNode* Right;
-
-        /* Remember the token and skip it */
-        token_t T = CurTok.Tok;
-        NextTok ();
-
-        /* Move root to left side and read the right side */
-        Left  = Root;
-        Right = BoolExpr ();
-
-        /* If both expressions are constant, we can evaluate the term */
-        if (IsEasyConst (Left, &LVal) && IsEasyConst (Right, &RVal)) {
-
-            switch (T) {
-                case TOK_BOOLAND:   Val = ((LVal != 0) && (RVal != 0)); break;
-                case TOK_BOOLXOR:   Val = ((LVal != 0) ^  (RVal != 0)); break;
-                default:        Internal ("Invalid token");
-            }
-
-            /* Generate a literal expression and delete the old left and
-            ** right sides.
-            */
-            FreeExpr (Left);
-            FreeExpr (Right);
-            Root = GenLiteralExpr (Val);
-
-        } else {
-
-            /* Generate an expression tree */
-            unsigned char Op;
-            switch (T) {
-                case TOK_BOOLAND:   Op = EXPR_BOOLAND; break;
-                case TOK_BOOLXOR:   Op = EXPR_BOOLXOR; break;
-                default:            Internal ("Invalid token");
-            }
-            Root        = NewExprNode (Op);
-            Root->Left  = Left;
-            Root->Right = Right;
-
-        }
-    }
-
-    /* Return the expression tree we've created */
-    return Root;
-}
-
-
-
-static ExprNode* Expr1 (void)
-/* Boolean operators: OR */
-{
-    /* Read left hand side */
-    ExprNode* Root = Expr2 ();
-
-    /* Handle booleans */
-    while (CurTok.Tok == TOK_BOOLOR) {
-
-        long LVal, RVal, Val;
-        ExprNode* Left;
-        ExprNode* Right;
-
-        /* Remember the token and skip it */
-        token_t T = CurTok.Tok;
-        NextTok ();
-
-        /* Move root to left side and read the right side */
-        Left  = Root;
-        Right = Expr2 ();
-
-        /* If both expressions are constant, we can evaluate the term */
-        if (IsEasyConst (Left, &LVal) && IsEasyConst (Right, &RVal)) {
-
-            switch (T) {
-                case TOK_BOOLOR:    Val = ((LVal != 0) || (RVal != 0)); break;
-                default:        Internal ("Invalid token");
-            }
-
-            /* Generate a literal expression and delete the old left and
-            ** right sides.
-            */
-            FreeExpr (Left);
-            FreeExpr (Right);
-            Root = GenLiteralExpr (Val);
-
-        } else {
-
-            /* Generate an expression tree */
-            unsigned char Op;
-            switch (T) {
-                case TOK_BOOLOR:    Op = EXPR_BOOLOR;  break;
-                default:            Internal ("Invalid token");
-            }
-            Root        = NewExprNode (Op);
-            Root->Left  = Left;
-            Root->Right = Right;
-
-        }
-    }
-
-    /* Return the expression tree we've created */
-    return Root;
-}
-
-
-
-static ExprNode* Expr0 (void)
-/* Boolean operators: NOT */
-{
-    ExprNode* Root;
-
-    /* Handle booleans */
-    if (CurTok.Tok == TOK_BOOLNOT) {
-
-        long Val;
-        ExprNode* Left;
-
-        /* Skip the operator token */
-        NextTok ();
-
-        /* Read the argument */
-        Left = Expr0 ();
-
-        /* If the argument is const, evaluate it directly */
-        if (IsEasyConst (Left, &Val)) {
-            FreeExpr (Left);
-            Root = GenLiteralExpr (!Val);
-        } else {
-            Root = NewExprNode (EXPR_BOOLNOT);
-            Root->Left = Left;
-        }
-
-    } else {
-
-        /* Read left hand side */
-        Root = Expr1 ();
-
-    }
-
-    /* Return the expression tree we've created */
-    return Root;
-}
-
-
-
-ExprNode* Expression (void)
-/* Evaluate an expression, build the expression tree on the heap and return
-** a pointer to the root of the tree.
-*/
-{
-    return Expr0 ();
-}
-
-
-
-long ConstExpression (void)
-/* Parse an expression. Check if the expression is const, and print an error
-** message if not. Return the value of the expression, or a dummy, if it is
-** not constant.
-*/
-{
-    long Val;
-
-    /* Read the expression */
-    ExprNode* Expr = Expression ();
-
-    /* Study the expression */
-    ExprDesc D;
-    ED_Init (&D);
-    StudyExpr (Expr, &D);
-
-    /* Check if the expression is constant */
-    if (ED_IsConst (&D)) {
-        Val = D.Val;
-    } else {
-        Error ("Constant expression expected");
-        Val = 0;
-    }
-
-    /* Free the expression tree and allocated memory for D */
-    FreeExpr (Expr);
-    ED_Done (&D);
-
-    /* Return the value */
-    return Val;
-}
-
-
-
-void FreeExpr (ExprNode* Root)
-/* Free the expression, Root is pointing to. */
-{
-    if (Root) {
-        FreeExpr (Root->Left);
-        FreeExpr (Root->Right);
-        FreeExprNode (Root);
-    }
-}
-
-
-
-ExprNode* SimplifyExpr (ExprNode* Expr, const ExprDesc* D)
-/* Try to simplify the given expression tree */
-{
-    if (Expr->Op != EXPR_LITERAL && ED_IsConst (D)) {
-        /* No external references */
-        FreeExpr (Expr);
-        Expr = GenLiteralExpr (D->Val);
-    }
-    return Expr;
-}
-
-
-
-ExprNode* GenLiteralExpr (long Val)
-/* Return an expression tree that encodes the given literal value */
-{
-    ExprNode* Expr = NewExprNode (EXPR_LITERAL);
-    Expr->V.IVal = Val;
-    return Expr;
-}
-
-
-
-ExprNode* GenLiteral0 (void)
-/* Return an expression tree that encodes the the number zero */
-{
-    return GenLiteralExpr (0);
-}
-
-
-
-ExprNode* GenSymExpr (SymEntry* Sym)
-/* Return an expression node that encodes the given symbol */
-{
-    ExprNode* Expr = NewExprNode (EXPR_SYMBOL);
-    Expr->V.Sym = Sym;
-    SymAddExprRef (Sym, Expr);
-    return Expr;
-}
-
-
-
-static ExprNode* GenSectionExpr (unsigned SecNum)
-/* Return an expression node for the given section */
-{
-    ExprNode* Expr = NewExprNode (EXPR_SECTION);
-    Expr->V.SecNum = SecNum;
-    return Expr;
-}
-
-
-
-static ExprNode* GenBankExpr (unsigned SecNum)
-/* Return an expression node for the given bank */
-{
-    ExprNode* Expr = NewExprNode (EXPR_BANK);
-    Expr->V.SecNum = SecNum;
-    return Expr;
-}
-
-
-
-ExprNode* GenAddExpr (ExprNode* Left, ExprNode* Right)
-/* Generate an addition from the two operands */
-{
-    long Val;
-    if (IsEasyConst (Left, &Val) && Val == 0) {
-        FreeExpr (Left);
-        return Right;
-    } else if (IsEasyConst (Right, &Val) && Val == 0) {
-        FreeExpr (Right);
-        return Left;
-    } else {
-        ExprNode* Root = NewExprNode (EXPR_PLUS);
-        Root->Left = Left;
-        Root->Right = Right;
-        return Root;
-    }
-}
-
-
-
-ExprNode* GenCurrentPC (void)
-/* Return the current program counter as expression */
-{
-    ExprNode* Root;
-
-    if (GetRelocMode ()) {
-        /* Create SegmentBase + Offset */
-        Root = GenAddExpr (GenSectionExpr (GetCurrentSegNum ()),
-                           GenLiteralExpr (GetPC ()));
-    } else {
-        /* Absolute mode, just return PC value */
-        Root = GenLiteralExpr (GetPC ());
-    }
-
-    return Root;
-}
-
-
-
-ExprNode* GenSwapExpr (ExprNode* Expr)
-/* Return an extended expression with lo and hi bytes swapped */
-{
-    ExprNode* N = NewExprNode (EXPR_SWAP);
-    N->Left = Expr;
-    return N;
-}
-
-
-
-ExprNode* GenBranchExpr (unsigned Offs)
-/* Return an expression that encodes the difference between current PC plus
-** offset and the target expression (that is, Expression() - (*+Offs) ).
-*/
-{
-    ExprNode* N;
-    ExprNode* Root;
-    long      Val;
-
-    /* Read Expression() */
-    N = Expression ();
-
-    /* If the expression is a cheap constant, generate a simpler tree */
-    if (IsEasyConst (N, &Val)) {
-
-        /* Free the constant expression tree */
-        FreeExpr (N);
-
-        /* Generate the final expression:
-        ** Val - (* + Offs)
-        ** Val - ((Seg + PC) + Offs)
-        ** Val - Seg - PC - Offs
-        ** (Val - PC - Offs) - Seg
-        */
-        Root = GenLiteralExpr (Val - GetPC () - Offs);
-        if (GetRelocMode ()) {
-            N = Root;
-            Root = NewExprNode (EXPR_MINUS);
-            Root->Left  = N;
-            Root->Right = GenSectionExpr (GetCurrentSegNum ());
-        }
-
-    } else {
-
-        /* Generate the expression:
-        ** N - (* + Offs)
-        ** N - ((Seg + PC) + Offs)
-        ** N - Seg - PC - Offs
-        ** N - (PC + Offs) - Seg
-        */
-        Root = NewExprNode (EXPR_MINUS);
-        Root->Left  = N;
-        Root->Right = GenLiteralExpr (GetPC () + Offs);
-        if (GetRelocMode ()) {
-            N = Root;
-            Root = NewExprNode (EXPR_MINUS);
-            Root->Left  = N;
-            Root->Right = GenSectionExpr (GetCurrentSegNum ());
-        }
-    }
-
-    /* Return the result */
-    return Root;
-}
-
-
-
-ExprNode* GenULabelExpr (unsigned Num)
-/* Return an expression for an unnamed label with the given index */
-{
-    ExprNode* Node = NewExprNode (EXPR_ULABEL);
-    Node->V.IVal        = Num;
-
-    /* Return the new node */
-    return Node;
-}
-
-
-
-ExprNode* GenByteExpr (ExprNode* Expr)
-/* Force the given expression into a byte and return the result */
-{
-    /* Use the low byte operator to force the expression into byte size */
-    return LoByte (Expr);
-}
-
-
-
-ExprNode* GenWordExpr (ExprNode* Expr)
-/* Force the given expression into a word and return the result. */
-{
-    /* Use the low byte operator to force the expression into word size */
-    return LoWord (Expr);
-}
-
-
-
-ExprNode* GenFarAddrExpr (ExprNode* Expr)
-/* Force the given expression into a far address and return the result. */
-{
-    long      Val;
-
-    /* Special handling for const expressions */
-    if (IsEasyConst (Expr, &Val)) {
-        FreeExpr (Expr);
-        Expr = GenLiteralExpr (Val & 0xFFFFFF);
-    } else {
-        ExprNode* Operand = Expr;
-        Expr = NewExprNode (EXPR_FARADDR);
-        Expr->Left = Operand;
-    }
-    return Expr;
-}
-
-
-
-ExprNode* GenDWordExpr (ExprNode* Expr)
-/* Force the given expression into a dword and return the result. */
-{
-    long      Val;
-
-    /* Special handling for const expressions */
-    if (IsEasyConst (Expr, &Val)) {
-        FreeExpr (Expr);
-        Expr = GenLiteralExpr (Val & 0xFFFFFFFF);
-    } else {
-        ExprNode* Operand = Expr;
-        Expr = NewExprNode (EXPR_DWORD);
-        Expr->Left = Operand;
-    }
-    return Expr;
-}
-
-
-
-ExprNode* GenNE (ExprNode* Expr, long Val)
-/* Generate an expression that compares Expr and Val for inequality */
-{
-    /* Generate a compare node */
-    ExprNode* Root = NewExprNode (EXPR_NE);
-    Root->Left  = Expr;
-    Root->Right = GenLiteralExpr (Val);
-
-    /* Return the result */
-    return Root;
-}
-
-
-
-int IsConstExpr (ExprNode* Expr, long* Val)
-/* Return true if the given expression is a constant expression, that is, one
-** with no references to external symbols. If Val is not NULL and the
-** expression is constant, the constant value is stored here.
-*/
-{
-    int IsConst;
-
-    /* Study the expression */
-    ExprDesc D;
-    ED_Init (&D);
-    StudyExpr (Expr, &D);
-
-    /* Check if the expression is constant */
-    IsConst = ED_IsConst (&D);
-    if (IsConst && Val != 0) {
-        *Val = D.Val;
-    }
-
-    /* Delete allocated memory and return the result */
-    ED_Done (&D);
-    return IsConst;
-}
-
-
-
-ExprNode* CloneExpr (ExprNode* Expr)
-/* Clone the given expression tree. The function will simply clone symbol
-** nodes, it will not resolve them.
-*/
-{
-    ExprNode* Clone;
-
-    /* Accept NULL pointers */
-    if (Expr == 0) {
-        return 0;
-    }
-
-    /* Clone the node */
-    switch (Expr->Op) {
-
-        case EXPR_LITERAL:
-            Clone = GenLiteralExpr (Expr->V.IVal);
-            break;
-
-        case EXPR_ULABEL:
-            Clone = GenULabelExpr (Expr->V.IVal);
-            break;
-
-        case EXPR_SYMBOL:
-            Clone = GenSymExpr (Expr->V.Sym);
-            break;
-
-        case EXPR_SECTION:
-            Clone = GenSectionExpr (Expr->V.SecNum);
-            break;
-
-        case EXPR_BANK:
-            Clone = GenBankExpr (Expr->V.SecNum);
-            break;
-
-        default:
-            /* Generate a new node */
-            Clone = NewExprNode (Expr->Op);
-            /* Clone the tree nodes */
-            Clone->Left = CloneExpr (Expr->Left);
-            Clone->Right = CloneExpr (Expr->Right);
-            break;
-    }
-
-    /* Done */
-    return Clone;
-}
-
-
-
-void WriteExpr (ExprNode* Expr)
-/* Write the given expression to the object file */
-{
-    /* Null expressions are encoded by a type byte of zero */
-    if (Expr == 0) {
-        ObjWrite8 (EXPR_NULL);
-        return;
-    }
-
-    /* If the is a leafnode, write the expression attribute, otherwise
-    ** write the expression operands.
-    */
-    switch (Expr->Op) {
-
-        case EXPR_LITERAL:
-            ObjWrite8 (EXPR_LITERAL);
-            ObjWrite32 (Expr->V.IVal);
-            break;
-
-        case EXPR_SYMBOL:
-            if (SymIsImport (Expr->V.Sym)) {
-                ObjWrite8 (EXPR_SYMBOL);
-                ObjWriteVar (GetSymImportId (Expr->V.Sym));
-            } else {
-                WriteExpr (GetSymExpr (Expr->V.Sym));
-            }
-            break;
-
-        case EXPR_SECTION:
-            ObjWrite8 (EXPR_SECTION);
-            ObjWriteVar (Expr->V.SecNum);
-            break;
-
-        case EXPR_ULABEL:
-            WriteExpr (ULabResolve (Expr->V.IVal));
-            break;
-
-        default:
-            /* Not a leaf node */
-            ObjWrite8 (Expr->Op);
-            WriteExpr (Expr->Left);
-            WriteExpr (Expr->Right);
-            break;
-
-    }
-}
-
-
-
-void ExprGuessedAddrSize (const ExprNode* Expr, unsigned char AddrSize)
-/* Mark the address size of the given expression tree as guessed. The address
-** size passed as argument is the one NOT used, because the actual address
-** size wasn't known. Example: Zero page addressing was not used because symbol
-** is undefined, and absolute addressing was available.
-** This function will actually parse the expression tree for undefined symbols,
-** and mark these symbols accordingly.
-*/
-{
-    /* Accept NULL expressions */
-    if (Expr == 0) {
-        return;
-    }
-
-    /* Check the type code */
-    switch (EXPR_NODETYPE (Expr->Op)) {
-
-        case EXPR_LEAFNODE:
-            if (Expr->Op == EXPR_SYMBOL) {
-                if (!SymIsDef (Expr->V.Sym)) {
-                    /* Symbol is undefined, mark it */
-                    SymGuessedAddrSize (Expr->V.Sym, AddrSize);
-                }
-            }
-            return;
-
-        case EXPR_BINARYNODE:
-            ExprGuessedAddrSize (Expr->Right, AddrSize);
-            /* FALLTHROUGH */
-
-        case EXPR_UNARYNODE:
-            ExprGuessedAddrSize (Expr->Left, AddrSize);
-            break;
-    }
-}
-
-
-
-ExprNode* MakeBoundedExpr (ExprNode* Expr, unsigned Size)
-/* Force the given expression into a specific size of ForceRange is true */
-{
-    if (ForceRange) {
-        switch (Size) {
-            case 1:     Expr = GenByteExpr (Expr);      break;
-            case 2:     Expr = GenWordExpr (Expr);      break;
-            case 3:     Expr = GenFarAddrExpr (Expr);   break;
-            case 4:     Expr = GenDWordExpr (Expr);     break;
-            default:    Internal ("Invalid size in BoundedExpr: %u", Size);
-        }
-    }
-    return Expr;
-}
-
-
-
-ExprNode* BoundedExpr (ExprNode* (*ExprFunc) (void), unsigned Size)
-/* Parse an expression and force it within a given size if ForceRange is true */
-{
-    return MakeBoundedExpr (ExprFunc (), Size);
-}
diff --git a/src/ca65/expr.h b/src/ca65/expr.h
deleted file mode 100644 (file)
index 03c2c26..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  expr.h                                   */
-/*                                                                           */
-/*             Expression evaluation for the ca65 macroassembler             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef EXPR_H
-#define EXPR_H
-
-
-
-/* common */
-#include "coll.h"
-#include "exprdefs.h"
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-struct ExprDesc;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-ExprNode* Expression (void);
-/* Evaluate an expression, build the expression tree on the heap and return
-** a pointer to the root of the tree.
-*/
-
-long ConstExpression (void);
-/* Parse an expression. Check if the expression is const, and print an error
-** message if not. Return the value of the expression, or a dummy, if it is
-** not constant.
-*/
-
-void FreeExpr (ExprNode* Root);
-/* Free the expression tree, Root is pointing to. */
-
-ExprNode* SimplifyExpr (ExprNode* Expr, const struct ExprDesc* D);
-/* Try to simplify the given expression tree */
-
-ExprNode* GenLiteralExpr (long Val);
-/* Return an expression tree that encodes the given literal value */
-
-ExprNode* GenLiteral0 (void);
-/* Return an expression tree that encodes the the number zero */
-
-ExprNode* GenSymExpr (struct SymEntry* Sym);
-/* Return an expression node that encodes the given symbol */
-
-ExprNode* GenAddExpr (ExprNode* Left, ExprNode* Right);
-/* Generate an addition from the two operands */
-
-ExprNode* GenCurrentPC (void);
-/* Return the current program counter as expression */
-
-ExprNode* GenSwapExpr (ExprNode* Expr);
-/* Return an extended expression with lo and hi bytes swapped */
-
-ExprNode* GenBranchExpr (unsigned Offs);
-/* Return an expression that encodes the difference between current PC plus
-** offset and the target expression (that is, Expression() - (*+Offs) ).
-*/
-
-ExprNode* GenULabelExpr (unsigned Num);
-/* Return an expression for an unnamed label with the given index */
-
-ExprNode* GenByteExpr (ExprNode* Expr);
-/* Force the given expression into a byte and return the result */
-
-ExprNode* GenWordExpr (ExprNode* Expr);
-/* Force the given expression into a word and return the result. */
-
-ExprNode* GenFarAddrExpr (ExprNode* Expr);
-/* Force the given expression into a far address and return the result. */
-
-ExprNode* GenDWordExpr (ExprNode* Expr);
-/* Force the given expression into a dword and return the result. */
-
-ExprNode* GenNE (ExprNode* Expr, long Val);
-/* Generate an expression that compares Expr and Val for inequality */
-
-int IsConstExpr (ExprNode* Expr, long* Val);
-/* Return true if the given expression is a constant expression, that is, one
-** with no references to external symbols. If Val is not NULL and the
-** expression is constant, the constant value is stored here.
-*/
-
-int IsByteExpr (ExprNode* Root);
-/* Return true if this is a byte expression */
-
-int IsByteRange (long Val);
-/* Return true if this is a byte value */
-
-int IsWordRange (long Val);
-/* Return true if this is a word value */
-
-int IsFarRange (long Val);
-/* Return true if this is a far (24 bit) value */
-
-int IsEasyConst (const ExprNode* E, long* Val);
-/* Do some light checking if the given node is a constant. Don't care if E is
-** a complex expression. If E is a constant, return true and place its value
-** into Val, provided that Val is not NULL.
-*/
-
-ExprNode* CloneExpr (ExprNode* Expr);
-/* Clone the given expression tree. The function will simply clone symbol
-** nodes, it will not resolve them.
-*/
-
-void WriteExpr (ExprNode* Expr);
-/* Write the given expression to the object file */
-
-void ExprGuessedAddrSize (const ExprNode* Expr, unsigned char AddrSize);
-/* Mark the address size of the given expression tree as guessed. The address
-** size passed as argument is the one NOT used, because the actual address
-** size wasn't known. Example: Zero page addressing was not used because symbol
-** is undefined, and absolute addressing was available.
-** This function will actually parse the expression tree for undefined symbols,
-** and mark these symbols accordingly.
-*/
-
-ExprNode* FuncBankByte (void);
-/* Handle the .BANKBYTE builtin function */
-
-ExprNode* FuncLoByte (void);
-/* Handle the .LOBYTE builtin function */
-
-ExprNode* FuncHiByte (void);
-/* Handle the .HIBYTE builtin function */
-
-ExprNode* MakeBoundedExpr (ExprNode* Expr, unsigned Size);
-/* Force the given expression into a specific size of ForceRange is true */
-
-ExprNode* BoundedExpr (ExprNode* (*ExprFunc) (void), unsigned Size);
-/* Parse an expression and force it within a given size if ForceRange is true */
-
-
-
-/* End of expr.h */
-
-#endif
diff --git a/src/ca65/feature.c b/src/ca65/feature.c
deleted file mode 100644 (file)
index 3462d55..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 feature.c                                 */
-/*                                                                           */
-/*                  Subroutines for the emulation features                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* ca65 */
-#include "global.h"
-#include "feature.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Names of the features */
-static const char* FeatureKeys[FEAT_COUNT] = {
-    "dollar_is_pc",
-    "labels_without_colons",
-    "loose_string_term",
-    "loose_char_term",
-    "at_in_identifiers",
-    "dollar_in_identifiers",
-    "leading_dot_in_identifiers",
-    "org_per_seg",
-    "pc_assignment",
-    "missing_char_term",
-    "ubiquitous_idents",
-    "c_comments",
-    "force_range",
-    "underline_in_numbers",
-    "addrsize",
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-feature_t FindFeature (const StrBuf* Key)
-/* Find the feature in a table and return the corresponding enum value. If the
-** feature is invalid, return FEAT_UNKNOWN.
-*/
-{
-    feature_t F;
-
-    /* This is not time critical, so do a linear search */
-    for (F = (feature_t) 0; F < FEAT_COUNT; ++F) {
-        if (SB_CompareStr (Key, FeatureKeys[F]) == 0) {
-            /* Found, index is enum value */
-            return F;
-        }
-    }
-
-    /* Not found */
-    return FEAT_UNKNOWN;
-}
-
-
-
-feature_t SetFeature (const StrBuf* Key)
-/* Find the feature and set the corresponding flag if the feature is known.
-** In any case, return the feature found. An invalid Key will return
-** FEAT_UNKNOWN.
-*/
-{
-    /* Map the string to an enum value */
-    feature_t Feature = FindFeature (Key);
-
-    /* Set the flags */
-    switch (Feature) {
-        case FEAT_DOLLAR_IS_PC:               DollarIsPC        = 1;    break;
-        case FEAT_LABELS_WITHOUT_COLONS:      NoColonLabels     = 1;    break;
-        case FEAT_LOOSE_STRING_TERM:          LooseStringTerm   = 1;    break;
-        case FEAT_LOOSE_CHAR_TERM:            LooseCharTerm     = 1;    break;
-        case FEAT_AT_IN_IDENTIFIERS:          AtInIdents        = 1;    break;
-        case FEAT_DOLLAR_IN_IDENTIFIERS:      DollarInIdents    = 1;    break;
-        case FEAT_LEADING_DOT_IN_IDENTIFIERS: LeadingDotInIdents= 1;    break;
-        case FEAT_ORG_PER_SEG:                OrgPerSeg         = 1;    break;
-        case FEAT_PC_ASSIGNMENT:              PCAssignment      = 1;    break;
-        case FEAT_MISSING_CHAR_TERM:          MissingCharTerm   = 1;    break;
-        case FEAT_UBIQUITOUS_IDENTS:          UbiquitousIdents  = 1;    break;
-        case FEAT_C_COMMENTS:                 CComments         = 1;    break;
-        case FEAT_FORCE_RANGE:                ForceRange        = 1;    break;
-        case FEAT_UNDERLINE_IN_NUMBERS:       UnderlineInNumbers= 1;    break;
-        case FEAT_ADDRSIZE:                   AddrSize          = 1;    break;
-        default:                         /* Keep gcc silent */          break;
-    }
-
-    /* Return the value found */
-    return Feature;
-}
diff --git a/src/ca65/feature.h b/src/ca65/feature.h
deleted file mode 100644 (file)
index 3a520a5..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 feature.h                                 */
-/*                                                                           */
-/*                  Subroutines for the emulation features                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef FEATURE_H
-#define FEATURE_H
-
-
-
-/* common */
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-typedef enum {
-    FEAT_UNKNOWN                = -1,
-    FEAT_DOLLAR_IS_PC,
-    FEAT_LABELS_WITHOUT_COLONS,
-    FEAT_LOOSE_STRING_TERM,
-    FEAT_LOOSE_CHAR_TERM,
-    FEAT_AT_IN_IDENTIFIERS,
-    FEAT_DOLLAR_IN_IDENTIFIERS,
-    FEAT_LEADING_DOT_IN_IDENTIFIERS,
-    FEAT_ORG_PER_SEG,
-    FEAT_PC_ASSIGNMENT,
-    FEAT_MISSING_CHAR_TERM,
-    FEAT_UBIQUITOUS_IDENTS,
-    FEAT_C_COMMENTS,
-    FEAT_FORCE_RANGE,
-    FEAT_UNDERLINE_IN_NUMBERS,
-    FEAT_ADDRSIZE,
-
-    /* Special value: Number of features available */
-    FEAT_COUNT
-} feature_t;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-feature_t FindFeature (const StrBuf* Key);
-/* Find the feature in a table and return the corresponding enum value. If the
-** feature is invalid, return FEAT_UNKNOWN.
-*/
-
-feature_t SetFeature (const StrBuf* Key);
-/* Find the feature and set the corresponding flag if the feature is known.
-** In any case, return the feature found. An invalid Key will return
-** FEAT_UNKNOWN.
-*/
-
-
-
-/* End of feature.h */
-
-#endif
diff --git a/src/ca65/filetab.c b/src/ca65/filetab.c
deleted file mode 100644 (file)
index fbe163f..0000000
+++ /dev/null
@@ -1,338 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 filetab.h                                 */
-/*                                                                           */
-/*                         Input file table for ca65                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2008 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "check.h"
-#include "coll.h"
-#include "hashtab.h"
-#include "xmalloc.h"
-
-/* ca65 */
-#include "error.h"
-#include "filetab.h"
-#include "global.h"
-#include "objfile.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-static unsigned HT_GenHash (const void* Key);
-/* Generate the hash over a key. */
-
-static const void* HT_GetKey (const void* Entry);
-/* Given a pointer to the user entry data, return a pointer to the key. */
-
-static int HT_Compare (const void* Key1, const void* Key2);
-/* Compare two keys. The function must return a value less than zero if
-** Key1 is smaller than Key2, zero if both are equal, and a value greater
-** than zero if Key1 is greater then Key2.
-*/
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Number of entries in the table and the mask to generate the hash */
-#define HASHTAB_MASK    0x1F
-#define HASHTAB_COUNT   (HASHTAB_MASK + 1)
-
-/* An entry in the file table */
-typedef struct FileEntry FileEntry;
-struct FileEntry {
-    HashNode            Node;
-    unsigned            Name;           /* File name */
-    unsigned            Index;          /* Index of entry */
-    FileType            Type;           /* Type of file */
-    unsigned long       Size;           /* Size of file */
-    unsigned long       MTime;          /* Time of last modification */
-};
-
-/* Array of all entries, listed by index */
-static Collection FileTab = STATIC_COLLECTION_INITIALIZER;
-
-/* Hash table functions */
-static const HashFunctions HashFunc = {
-    HT_GenHash,
-    HT_GetKey,
-    HT_Compare
-};
-
-/* Hash table, hashed by name */
-static HashTable HashTab = STATIC_HASHTABLE_INITIALIZER (HASHTAB_COUNT, &HashFunc);
-
-
-
-/*****************************************************************************/
-/*                           Hash table functions                            */
-/*****************************************************************************/
-
-
-
-static unsigned HT_GenHash (const void* Key)
-/* Generate the hash over a key. */
-{
-    return (*(const unsigned*)Key & HASHTAB_MASK);
-}
-
-
-
-static const void* HT_GetKey (const void* Entry)
-/* Given a pointer to the user entry data, return a pointer to the index */
-{
-    return &((FileEntry*) Entry)->Name;
-}
-
-
-
-static int HT_Compare (const void* Key1, const void* Key2)
-/* Compare two keys. The function must return a value less than zero if
-** Key1 is smaller than Key2, zero if both are equal, and a value greater
-** than zero if Key1 is greater then Key2.
-*/
-{
-    return (int)*(const unsigned*)Key1 - (int)*(const unsigned*)Key2;
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static FileEntry* NewFileEntry (unsigned Name, FileType Type,
-                                unsigned long Size, unsigned long MTime)
-/* Create a new FileEntry, insert it into the tables and return it */
-{
-    /* Allocate memory for the entry */
-    FileEntry* F = xmalloc (sizeof (FileEntry));
-
-    /* Initialize the fields */
-    InitHashNode (&F->Node);
-    F->Name     = Name;
-    F->Index    = CollCount (&FileTab) + 1;     /* First file has index #1 */
-    F->Type     = Type;
-    F->Size     = Size;
-    F->MTime    = MTime;
-
-    /* Insert the file into the file table */
-    CollAppend (&FileTab, F);
-
-    /* Insert the entry into the hash table */
-    HT_Insert (&HashTab, F);
-
-    /* Return the new entry */
-    return F;
-}
-
-
-
-const StrBuf* GetFileName (unsigned Name)
-/* Get the name of a file where the name index is known */
-{
-    static const StrBuf ErrorMsg = LIT_STRBUF_INITIALIZER ("(outside file scope)");
-
-    const FileEntry* F;
-
-    if (Name == 0) {
-        /* Name was defined outside any file scope, use the name of the first
-        ** file instead. Errors are then reported with a file position of
-        ** line zero in the first file.
-        */
-        if (CollCount (&FileTab) == 0) {
-            /* No files defined until now */
-            return &ErrorMsg;
-        } else {
-            F = CollConstAt (&FileTab, 0);
-        }
-    } else {
-        F = CollConstAt (&FileTab, Name-1);
-    }
-    return GetStrBuf (F->Name);
-}
-
-
-
-unsigned GetFileIndex (const StrBuf* Name)
-/* Return the file index for the given file name. */
-{
-    /* Get the string pool index from the name */
-    unsigned NameIdx = GetStrBufId (Name);
-
-    /* Search in the hash table for the name */
-    const FileEntry* F = HT_Find (&HashTab, &NameIdx);
-
-    /* If we don't have this index, print a diagnostic and use the main file */
-    if (F == 0) {
-        Error ("File name `%m%p' not found in file table", Name);
-        return 0;
-    } else {
-        return F->Index;
-    }
-}
-
-
-
-unsigned AddFile (const StrBuf* Name, FileType Type,
-                  unsigned long Size, unsigned long MTime)
-/* Add a new file to the list of input files. Return the index of the file in
-** the table.
-*/
-{
-    /* Create a new file entry and insert it into the tables */
-    FileEntry* F = NewFileEntry (GetStrBufId (Name), Type, Size, MTime);
-
-    /* Return the index */
-    return F->Index;
-}
-
-
-
-void WriteFiles (void)
-/* Write the list of input files to the object file */
-{
-    unsigned I;
-
-    /* Tell the obj file module that we're about to start the file list */
-    ObjStartFiles ();
-
-    /* Write the file count */
-    ObjWriteVar (CollCount (&FileTab));
-
-    /* Write the file data */
-    for (I = 0; I < CollCount (&FileTab); ++I) {
-        /* Get a pointer to the entry */
-        const FileEntry* F = CollConstAt (&FileTab, I);
-        /* Write the fields */
-        ObjWriteVar (F->Name);
-        ObjWrite32 (F->MTime);
-        ObjWriteVar (F->Size);
-    }
-
-    /* Done writing files */
-    ObjEndFiles ();
-}
-
-
-
-static void WriteDep (FILE* F, FileType Types)
-/* Helper function. Writes all file names that match Types to the output */
-{
-    unsigned I;
-
-    /* Loop over all files */
-    for (I = 0; I < CollCount (&FileTab); ++I) {
-
-        const StrBuf* Filename;
-
-        /* Get the next input file */
-        const FileEntry* E = (const FileEntry*) CollAt (&FileTab, I);
-
-        /* Ignore it if it is not of the correct type */
-        if ((E->Type & Types) == 0) {
-            continue;
-        }
-
-        /* If this is not the first file, add a space */
-        if (I > 0) {
-            fputc (' ', F);
-        }
-
-        /* Print the dependency */
-        Filename = GetStrBuf (E->Name);
-        fprintf (F, "%*s", SB_GetLen (Filename), SB_GetConstBuf (Filename));
-    }
-}
-
-
-
-static void CreateDepFile (const char* Name, FileType Types)
-/* Create a dependency file with the given name and place dependencies for
-** all files with the given types there.
-*/
-{
-    /* Open the file */
-    FILE* F = fopen (Name, "w");
-    if (F == 0) {
-        Fatal ("Cannot open dependency file `%s': %s", Name, strerror (errno));
-    }
-
-    /* Print the output file followed by a tab char */
-    fprintf (F, "%s:\t", OutFile);
-
-    /* Write out the dependencies for the output file */
-    WriteDep (F, Types);
-    fputs ("\n\n", F);
-
-    /* Write out a phony dependency for the included files */
-    WriteDep (F, Types);
-    fputs (":\n\n", F);
-
-    /* Close the file, check for errors */
-    if (fclose (F) != 0) {
-        remove (Name);
-        Fatal ("Cannot write to dependeny file (disk full?)");
-    }
-}
-
-
-
-void CreateDependencies (void)
-/* Create dependency files requested by the user */
-{
-    if (SB_NotEmpty (&DepName)) {
-        CreateDepFile (SB_GetConstBuf (&DepName),
-                       FT_MAIN | FT_INCLUDE | FT_BINARY);
-    }
-    if (SB_NotEmpty (&FullDepName)) {
-        CreateDepFile (SB_GetConstBuf (&FullDepName),
-                       FT_MAIN | FT_INCLUDE | FT_BINARY | FT_DBGINFO);
-    }
-}
diff --git a/src/ca65/filetab.h b/src/ca65/filetab.h
deleted file mode 100644 (file)
index 4e8cf56..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 filetab.h                                 */
-/*                                                                           */
-/*                         Input file table for ca65                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2008 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef FILETAB_H
-#define FILETAB_H
-
-
-
-/* common */
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* An enum that describes different types of input files. The members are
-** choosen so that it is possible to combine them to bitsets
-*/
-typedef enum {
-    FT_MAIN     = 0x01,         /* Main input file */
-    FT_INCLUDE  = 0x02,         /* Normal include file */
-    FT_BINARY   = 0x04,         /* Binary include file */
-    FT_DBGINFO  = 0x08,         /* File from debug info */
-} FileType;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-const StrBuf* GetFileName (unsigned Name);
-/* Get the name of a file where the name index is known */
-
-unsigned GetFileIndex (const StrBuf* Name);
-/* Return the file index for the given file name. */
-
-unsigned AddFile (const StrBuf* Name, FileType Type,
-                  unsigned long Size, unsigned long MTime);
-/* Add a new file to the list of input files. Return the index of the file in
-** the table.
-*/
-
-void WriteFiles (void);
-/* Write the list of input files to the object file */
-
-void CreateDependencies (void);
-/* Create dependency files requested by the user */
-
-
-
-/* End of filetab.h */
-
-#endif
diff --git a/src/ca65/fragment.c b/src/ca65/fragment.c
deleted file mode 100644 (file)
index 6a14a4c..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                fragment.c                                 */
-/*                                                                           */
-/*                Data fragments for the ca65 crossassembler                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "xmalloc.h"
-
-/* ca65 */
-#include "fragment.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Fragment* NewFragment (unsigned char Type, unsigned short Len)
-/* Create, initialize and return a new fragment. The fragment will be inserted
-** into the current segment.
-*/
-{
-    /* Create a new fragment */
-    Fragment* F = xmalloc (sizeof (*F));
-
-    /* Initialize it */
-    F->Next     = 0;
-    F->LineList = 0;
-    F->LI       = EmptyCollection;
-    GetFullLineInfo (&F->LI);
-    F->Len      = Len;
-    F->Type     = Type;
-
-    /* And return it */
-    return F;
-}
diff --git a/src/ca65/fragment.h b/src/ca65/fragment.h
deleted file mode 100644 (file)
index f895895..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                fragment.h                                 */
-/*                                                                           */
-/*                Data fragments for the ca65 crossassembler                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef FRAGMENT_H
-#define FRAGMENT_H
-
-
-
-/* common */
-#include "exprdefs.h"
-#include "coll.h"
-
-/* ca65 */
-#include "lineinfo.h"
-
-
-
-/*****************************************************************************/
-/*                              struct Fragment                              */
-/*****************************************************************************/
-
-
-
-typedef struct Fragment Fragment;
-struct Fragment {
-    Fragment*           Next;       /* Pointer to next fragment in segment */
-    Fragment*           LineList;   /* List of fragments for one src line */
-    Collection          LI;         /* Line info for this fragment */
-    unsigned short      Len;        /* Length for this fragment */
-    unsigned char       Type;       /* Fragment type */
-    union {
-        unsigned char   Data[sizeof (ExprNode*)];       /* Literal values */
-        ExprNode*       Expr;                           /* Expression */
-    } V;
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Fragment* NewFragment (unsigned char Type, unsigned short Len);
-/* Create, initialize and return a new fragment. The fragment will be inserted
-** into the current segment.
-*/
-
-
-
-/* End of fragment.h */
-
-#endif
diff --git a/src/ca65/global.c b/src/ca65/global.c
deleted file mode 100644 (file)
index e77b920..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.c                                  */
-/*                                                                           */
-/*               Global variables for the ca65 macroassembler                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "addrsize.h"
-
-/* ca65 */
-#include "global.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* File names */
-const char* InFile               = 0;   /* Name of input file */
-const char* OutFile              = 0;   /* Name of output file */
-StrBuf ListingName = STATIC_STRBUF_INITIALIZER; /* Name of listing file */
-StrBuf DepName     = STATIC_STRBUF_INITIALIZER; /* Dependency file */
-StrBuf FullDepName = STATIC_STRBUF_INITIALIZER; /* Full dependency file */
-
-/* Default extensions */
-const char ObjExt[]              = ".o";/* Default object extension */
-
-char LocalStart                  = '@'; /* This char starts local symbols */
-
-unsigned char IgnoreCase         = 0;   /* Ignore case on identifiers? */
-unsigned char AutoImport         = 0;   /* Mark unresolveds as import */
-unsigned char SmartMode          = 0;   /* Smart mode */
-unsigned char DbgSyms            = 0;   /* Add debug symbols */
-unsigned char LineCont           = 0;   /* Allow line continuation */
-unsigned char LargeAlignment     = 0;   /* Don't warn about large alignments */
-unsigned char RelaxChecks        = 0;   /* Relax a few assembler checks */
-
-/* Emulation features */
-unsigned char DollarIsPC         = 0;   /* Allow the $ symbol as current PC */
-unsigned char NoColonLabels      = 0;   /* Allow labels without a colon */
-unsigned char LooseStringTerm    = 0;   /* Allow ' as string terminator */
-unsigned char LooseCharTerm      = 0;   /* Allow " for char constants */
-unsigned char AtInIdents         = 0;   /* Allow '@' in identifiers */
-unsigned char DollarInIdents     = 0;   /* Allow '$' in identifiers */
-unsigned char LeadingDotInIdents = 0;   /* Allow '.' to start an identifier */
-unsigned char PCAssignment       = 0;   /* Allow "* = $XXX" or "$ = $XXX" */
-unsigned char MissingCharTerm    = 0;   /* Allow lda #'a (no closing term) */
-unsigned char UbiquitousIdents   = 0;   /* Allow ubiquitous identifiers */
-unsigned char OrgPerSeg          = 0;   /* Make .org local to current seg */
-unsigned char CComments          = 0;   /* Allow C like comments */
-unsigned char ForceRange         = 0;   /* Force values into expected range */
-unsigned char UnderlineInNumbers = 0;   /* Allow underlines in numbers */
-unsigned char AddrSize           = 0;   /* Allow .ADDRSIZE function */
-
diff --git a/src/ca65/global.h b/src/ca65/global.h
deleted file mode 100644 (file)
index fb254f8..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.h                                  */
-/*                                                                           */
-/*               Global variables for the ca65 macroassembler                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef GLOBAL_H
-#define GLOBAL_H
-
-
-
-/* common */
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* File names */
-extern const char*      InFile;             /* Name of input file */
-extern const char*      OutFile;            /* Name of output file */
-extern StrBuf           ListingName;        /* Name of listing file */
-extern StrBuf           DepName;            /* Name of dependencies file */
-extern StrBuf           FullDepName;        /* Name of full dependencies file */
-
-/* Default extensions */
-extern const char       ObjExt[];           /* Default object extension */
-
-extern char             LocalStart;         /* This char starts local symbols */
-
-extern unsigned char    IgnoreCase;         /* Ignore case on identifiers? */
-extern unsigned char    AutoImport;         /* Mark unresolveds as import */
-extern unsigned char    SmartMode;          /* Smart mode */
-extern unsigned char    DbgSyms;            /* Add debug symbols */
-extern unsigned char    LineCont;           /* Allow line continuation */
-extern unsigned char    LargeAlignment;     /* Don't warn about large alignments */
-extern unsigned char    RelaxChecks;        /* Relax a few assembler checks */
-
-/* Emulation features */
-extern unsigned char    DollarIsPC;         /* Allow the $ symbol as current PC */
-extern unsigned char    NoColonLabels;      /* Allow labels without a colon */
-extern unsigned char    LooseStringTerm;    /* Allow ' as string terminator */
-extern unsigned char    LooseCharTerm;      /* Allow " for char constants */
-extern unsigned char    AtInIdents;         /* Allow '@' in identifiers */
-extern unsigned char    DollarInIdents;     /* Allow '$' in identifiers */
-extern unsigned char    LeadingDotInIdents; /* Allow '.' to start an identifier */
-extern unsigned char    PCAssignment;       /* Allow "* = $XXX" or "$ = $XXX" */
-extern unsigned char    MissingCharTerm;    /* Allow lda #'a (no closing term) */
-extern unsigned char    UbiquitousIdents;   /* Allow ubiquitous identifiers */
-extern unsigned char    OrgPerSeg;          /* Make .org local to current seg */
-extern unsigned char    CComments;          /* Allow C like comments */
-extern unsigned char    ForceRange;         /* Force values into expected range */
-extern unsigned char    UnderlineInNumbers; /* Allow underlines in numbers */
-extern unsigned char    AddrSize;           /* Allow .ADDRSIZE function */
-
-
-
-
-/* End of global.h */
-
-#endif
diff --git a/src/ca65/incpath.c b/src/ca65/incpath.c
deleted file mode 100644 (file)
index ff21b17..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 incpath.c                                 */
-/*                                                                           */
-/*            Include path handling for the ca65 macro assembler             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* ca65 */
-#include "incpath.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-SearchPaths*    IncSearchPath;          /* Standard include path */
-SearchPaths*    BinSearchPath;          /* Binary include path */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void InitIncludePaths (void)
-/* Initialize the include path search list */
-{
-    /* Create the search path lists */
-    IncSearchPath = NewSearchPath ();
-    BinSearchPath = NewSearchPath ();
-}
-
-
-
-void FinishIncludePaths (void)
-/* Finish creating the include path search list. */
-{
-    /* Add specific paths from the environment */
-    AddSearchPathFromEnv (IncSearchPath, "CA65_INC");
-
-    /* Add paths relative to a main directory defined in an env. var. */
-    AddSubSearchPathFromEnv (IncSearchPath, "CC65_HOME", "asminc");
-
-    /* Add some compiled-in search paths if defined at compile time. */
-#if defined(CA65_INC) && !defined(_WIN32)
-    AddSearchPath (IncSearchPath, STRINGIZE (CA65_INC));
-#endif
-
-    /* Add paths relative to the parent directory of the Windows binary. */
-    AddSubSearchPathFromWinBin (IncSearchPath, "asminc");
-}
diff --git a/src/ca65/incpath.h b/src/ca65/incpath.h
deleted file mode 100644 (file)
index 818e362..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 incpath.h                                 */
-/*                                                                           */
-/*            Include path handling for the ca65 macro assembler             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef INCPATH_H
-#define INCPATH_H
-
-
-
-/* common */
-#include "searchpath.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-extern SearchPaths*     IncSearchPath;          /* Standard include path */
-extern SearchPaths*     BinSearchPath;          /* Binary include path */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void InitIncludePaths (void);
-/* Initialize the include path search list */
-
-void FinishIncludePaths (void);
-/* Finish creating the include path search list. */
-
-
-
-/* End of incpath.h */
-
-#endif
diff --git a/src/ca65/instr.c b/src/ca65/instr.c
deleted file mode 100644 (file)
index 500db19..0000000
+++ /dev/null
@@ -1,1540 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  instr.c                                  */
-/*                                                                           */
-/*             Instruction encoding for the ca65 macroassembler              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-/* common */
-#include "addrsize.h"
-#include "attrib.h"
-#include "bitops.h"
-#include "check.h"
-#include "mmodel.h"
-
-/* ca65 */
-#include "asserts.h"
-#include "ea.h"
-#include "ea65.h"
-#include "easw16.h"
-#include "error.h"
-#include "expr.h"
-#include "global.h"
-#include "instr.h"
-#include "nexttok.h"
-#include "objcode.h"
-#include "spool.h"
-#include "studyexpr.h"
-#include "symtab.h"
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-static void PutPCRel8 (const InsDesc* Ins);
-/* Handle branches with a 8 bit distance */
-
-static void PutPCRel16 (const InsDesc* Ins);
-/* Handle branches with an 16 bit distance and PER */
-
-static void PutBlockMove (const InsDesc* Ins);
-/* Handle the blockmove instructions (65816) */
-
-static void PutBlockTransfer (const InsDesc* Ins);
-/* Handle the block transfer instructions (HuC6280) */
-
-static void PutBitBranch (const InsDesc* Ins);
-/* Handle 65C02 branch on bit condition */
-
-static void PutREP (const InsDesc* Ins);
-/* Emit a REP instruction, track register sizes */
-
-static void PutSEP (const InsDesc* Ins);
-/* Emit a SEP instruction (65816), track register sizes */
-
-static void PutTAMn (const InsDesc* Ins);
-/* Emit a TAMn instruction (HuC6280). Since this is a two byte instruction with
-** implicit addressing mode, the opcode byte in the table is actually the
-** second operand byte. The TAM instruction is the more generic form, it takes
-** an immediate argument.
-*/
-
-static void PutTMA (const InsDesc* Ins);
-/* Emit a TMA instruction (HuC6280) with an immediate argument. Only one bit
-** in the argument byte may be set.
-*/
-
-static void PutTMAn (const InsDesc* Ins);
-/* Emit a TMAn instruction (HuC6280). Since this is a two byte instruction with
-** implicit addressing mode, the opcode byte in the table is actually the
-** second operand byte. The TAM instruction is the more generic form, it takes
-** an immediate argument.
-*/
-
-static void PutTST (const InsDesc* Ins);
-/* Emit a TST instruction (HuC6280). */
-
-static void PutJMP (const InsDesc* Ins);
-/* Handle the jump instruction for the 6502. Problem is that these chips have
-** a bug: If the address crosses a page, the upper byte gets not corrected and
-** the instruction will fail. The PutJmp function will add a linker assertion
-** to check for this case and is otherwise identical to PutAll.
-*/
-
-static void PutRTS (const InsDesc* Ins attribute ((unused)));
-/* Handle the RTS instruction for the 816. In smart mode emit a RTL opcode if
-** the enclosing scope is FAR.
-*/
-
-static void PutAll (const InsDesc* Ins);
-/* Handle all other instructions */
-
-static void PutSweet16 (const InsDesc* Ins);
-/* Handle a generic sweet16 instruction */
-
-static void PutSweet16Branch (const InsDesc* Ins);
-/* Handle a sweet16 branch instruction */
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Empty instruction table */
-static const struct {
-    unsigned Count;
-} InsTabNone = {
-    0
-};
-
-/* Instruction table for the 6502 */
-static const struct {
-    unsigned Count;
-    InsDesc  Ins[56];
-} InsTab6502 = {
-    sizeof (InsTab6502.Ins) / sizeof (InsTab6502.Ins[0]),
-    {
-        { "ADC",  0x080A26C, 0x60, 0, PutAll },
-        { "AND",  0x080A26C, 0x20, 0, PutAll },
-        { "ASL",  0x000006e, 0x02, 1, PutAll },
-        { "BCC",  0x0020000, 0x90, 0, PutPCRel8 },
-        { "BCS",  0x0020000, 0xb0, 0, PutPCRel8 },
-        { "BEQ",  0x0020000, 0xf0, 0, PutPCRel8 },
-        { "BIT",  0x000000C, 0x00, 2, PutAll },
-        { "BMI",  0x0020000, 0x30, 0, PutPCRel8 },
-        { "BNE",  0x0020000, 0xd0, 0, PutPCRel8 },
-        { "BPL",  0x0020000, 0x10, 0, PutPCRel8 },
-        { "BRK",  0x0000001, 0x00, 0, PutAll },
-        { "BVC",  0x0020000, 0x50, 0, PutPCRel8 },
-        { "BVS",  0x0020000, 0x70, 0, PutPCRel8 },
-        { "CLC",  0x0000001, 0x18, 0, PutAll },
-        { "CLD",  0x0000001, 0xd8, 0, PutAll },
-        { "CLI",  0x0000001, 0x58, 0, PutAll },
-        { "CLV",  0x0000001, 0xb8, 0, PutAll },
-        { "CMP",  0x080A26C, 0xc0, 0, PutAll },
-        { "CPX",  0x080000C, 0xe0, 1, PutAll },
-        { "CPY",  0x080000C, 0xc0, 1, PutAll },
-        { "DEC",  0x000006C, 0x00, 3, PutAll },
-        { "DEX",  0x0000001, 0xca, 0, PutAll },
-        { "DEY",  0x0000001, 0x88, 0, PutAll },
-        { "EOR",  0x080A26C, 0x40, 0, PutAll },
-        { "INC",  0x000006c, 0x00, 4, PutAll },
-        { "INX",  0x0000001, 0xe8, 0, PutAll },
-        { "INY",  0x0000001, 0xc8, 0, PutAll },
-        { "JMP",  0x0000808, 0x4c, 6, PutJMP },
-        { "JSR",  0x0000008, 0x20, 7, PutAll },
-        { "LDA",  0x080A26C, 0xa0, 0, PutAll },
-        { "LDX",  0x080030C, 0xa2, 1, PutAll },
-        { "LDY",  0x080006C, 0xa0, 1, PutAll },
-        { "LSR",  0x000006F, 0x42, 1, PutAll },
-        { "NOP",  0x0000001, 0xea, 0, PutAll },
-        { "ORA",  0x080A26C, 0x00, 0, PutAll },
-        { "PHA",  0x0000001, 0x48, 0, PutAll },
-        { "PHP",  0x0000001, 0x08, 0, PutAll },
-        { "PLA",  0x0000001, 0x68, 0, PutAll },
-        { "PLP",  0x0000001, 0x28, 0, PutAll },
-        { "ROL",  0x000006F, 0x22, 1, PutAll },
-        { "ROR",  0x000006F, 0x62, 1, PutAll },
-        { "RTI",  0x0000001, 0x40, 0, PutAll },
-        { "RTS",  0x0000001, 0x60, 0, PutAll },
-        { "SBC",  0x080A26C, 0xe0, 0, PutAll },
-        { "SEC",  0x0000001, 0x38, 0, PutAll },
-        { "SED",  0x0000001, 0xf8, 0, PutAll },
-        { "SEI",  0x0000001, 0x78, 0, PutAll },
-        { "STA",  0x000A26C, 0x80, 0, PutAll },
-        { "STX",  0x000010c, 0x82, 1, PutAll },
-        { "STY",  0x000002c, 0x80, 1, PutAll },
-        { "TAX",  0x0000001, 0xaa, 0, PutAll },
-        { "TAY",  0x0000001, 0xa8, 0, PutAll },
-        { "TSX",  0x0000001, 0xba, 0, PutAll },
-        { "TXA",  0x0000001, 0x8a, 0, PutAll },
-        { "TXS",  0x0000001, 0x9a, 0, PutAll },
-        { "TYA",  0x0000001, 0x98, 0, PutAll }
-    }
-};
-
-/* Instruction table for the 6502 with illegal instructions */
-static const struct {
-    unsigned Count;
-    InsDesc  Ins[75];
-} InsTab6502X = {
-    sizeof (InsTab6502X.Ins) / sizeof (InsTab6502X.Ins[0]),
-    {
-        { "ADC",  0x080A26C, 0x60, 0, PutAll },
-        { "ALR",  0x0800000, 0x4B, 0, PutAll },         /* X */
-        { "ANC",  0x0800000, 0x0B, 0, PutAll },         /* X */
-        { "AND",  0x080A26C, 0x20, 0, PutAll },
-        { "ANE",  0x0800000, 0x8B, 0, PutAll },         /* X */
-        { "ARR",  0x0800000, 0x6B, 0, PutAll },         /* X */
-        { "ASL",  0x000006e, 0x02, 1, PutAll },
-        { "AXS",  0x0800000, 0xCB, 0, PutAll },         /* X */
-        { "BCC",  0x0020000, 0x90, 0, PutPCRel8 },
-        { "BCS",  0x0020000, 0xb0, 0, PutPCRel8 },
-        { "BEQ",  0x0020000, 0xf0, 0, PutPCRel8 },
-        { "BIT",  0x000000C, 0x00, 2, PutAll },
-        { "BMI",  0x0020000, 0x30, 0, PutPCRel8 },
-        { "BNE",  0x0020000, 0xd0, 0, PutPCRel8 },
-        { "BPL",  0x0020000, 0x10, 0, PutPCRel8 },
-        { "BRK",  0x0000001, 0x00, 0, PutAll },
-        { "BVC",  0x0020000, 0x50, 0, PutPCRel8 },
-        { "BVS",  0x0020000, 0x70, 0, PutPCRel8 },
-        { "CLC",  0x0000001, 0x18, 0, PutAll },
-        { "CLD",  0x0000001, 0xd8, 0, PutAll },
-        { "CLI",  0x0000001, 0x58, 0, PutAll },
-        { "CLV",  0x0000001, 0xb8, 0, PutAll },
-        { "CMP",  0x080A26C, 0xc0, 0, PutAll },
-        { "CPX",  0x080000C, 0xe0, 1, PutAll },
-        { "CPY",  0x080000C, 0xc0, 1, PutAll },
-        { "DCP",  0x000A26C, 0xC3, 0, PutAll },         /* X */
-        { "DEC",  0x000006C, 0x00, 3, PutAll },
-        { "DEX",  0x0000001, 0xca, 0, PutAll },
-        { "DEY",  0x0000001, 0x88, 0, PutAll },
-        { "EOR",  0x080A26C, 0x40, 0, PutAll },
-        { "INC",  0x000006c, 0x00, 4, PutAll },
-        { "INX",  0x0000001, 0xe8, 0, PutAll },
-        { "INY",  0x0000001, 0xc8, 0, PutAll },
-        { "ISC",  0x000A26C, 0xE3, 0, PutAll },         /* X */
-        { "JAM",  0x0000001, 0x02, 0, PutAll },         /* X */
-        { "JMP",  0x0000808, 0x4c, 6, PutJMP },
-        { "JSR",  0x0000008, 0x20, 7, PutAll },
-        { "LAS",  0x0000200, 0xBB, 0, PutAll },         /* X */
-        { "LAX",  0x080A30C, 0xA3, 11, PutAll },        /* X */
-        { "LDA",  0x080A26C, 0xa0, 0, PutAll },
-        { "LDX",  0x080030C, 0xa2, 1, PutAll },
-        { "LDY",  0x080006C, 0xa0, 1, PutAll },
-        { "LSR",  0x000006F, 0x42, 1, PutAll },
-        { "NOP",  0x080006D, 0x00, 10, PutAll },        /* X */
-        { "ORA",  0x080A26C, 0x00, 0, PutAll },
-        { "PHA",  0x0000001, 0x48, 0, PutAll },
-        { "PHP",  0x0000001, 0x08, 0, PutAll },
-        { "PLA",  0x0000001, 0x68, 0, PutAll },
-        { "PLP",  0x0000001, 0x28, 0, PutAll },
-        { "RLA",  0x000A26C, 0x23, 0, PutAll },         /* X */
-        { "ROL",  0x000006F, 0x22, 1, PutAll },
-        { "ROR",  0x000006F, 0x62, 1, PutAll },
-        { "RRA",  0x000A26C, 0x63, 0, PutAll },         /* X */
-        { "RTI",  0x0000001, 0x40, 0, PutAll },
-        { "RTS",  0x0000001, 0x60, 0, PutAll },
-        { "SAX",  0x000810C, 0x83, 1, PutAll },         /* X */
-        { "SBC",  0x080A26C, 0xe0, 0, PutAll },
-        { "SEC",  0x0000001, 0x38, 0, PutAll },
-        { "SED",  0x0000001, 0xf8, 0, PutAll },
-        { "SEI",  0x0000001, 0x78, 0, PutAll },
-        { "SHA",  0x0002200, 0x93, 1, PutAll },         /* X */
-        { "SHX",  0x0000200, 0x9e, 1, PutAll },         /* X */
-        { "SHY",  0x0000040, 0x9c, 1, PutAll },         /* X */
-        { "SLO",  0x000A26C, 0x03, 0, PutAll },         /* X */
-        { "SRE",  0x000A26C, 0x43, 0, PutAll },         /* X */
-        { "STA",  0x000A26C, 0x80, 0, PutAll },
-        { "STX",  0x000010c, 0x82, 1, PutAll },
-        { "STY",  0x000002c, 0x80, 1, PutAll },
-        { "TAS",  0x0000200, 0x9b, 0, PutAll },         /* X */
-        { "TAX",  0x0000001, 0xaa, 0, PutAll },
-        { "TAY",  0x0000001, 0xa8, 0, PutAll },
-        { "TSX",  0x0000001, 0xba, 0, PutAll },
-        { "TXA",  0x0000001, 0x8a, 0, PutAll },
-        { "TXS",  0x0000001, 0x9a, 0, PutAll },
-        { "TYA",  0x0000001, 0x98, 0, PutAll }
-    }
-};
-
-/* Instruction table for the 65SC02 */
-static const struct {
-    unsigned Count;
-    InsDesc  Ins[66];
-} InsTab65SC02 = {
-    sizeof (InsTab65SC02.Ins) / sizeof (InsTab65SC02.Ins[0]),
-    {
-        { "ADC",  0x080A66C, 0x60, 0, PutAll },
-        { "AND",  0x080A66C, 0x20, 0, PutAll },
-        { "ASL",  0x000006e, 0x02, 1, PutAll },
-        { "BCC",  0x0020000, 0x90, 0, PutPCRel8 },
-        { "BCS",  0x0020000, 0xb0, 0, PutPCRel8 },
-        { "BEQ",  0x0020000, 0xf0, 0, PutPCRel8 },
-        { "BIT",  0x0A0006C, 0x00, 2, PutAll },
-        { "BMI",  0x0020000, 0x30, 0, PutPCRel8 },
-        { "BNE",  0x0020000, 0xd0, 0, PutPCRel8 },
-        { "BPL",  0x0020000, 0x10, 0, PutPCRel8 },
-        { "BRA",  0x0020000, 0x80, 0, PutPCRel8 },
-        { "BRK",  0x0000001, 0x00, 0, PutAll },
-        { "BVC",  0x0020000, 0x50, 0, PutPCRel8 },
-        { "BVS",  0x0020000, 0x70, 0, PutPCRel8 },
-        { "CLC",  0x0000001, 0x18, 0, PutAll },
-        { "CLD",  0x0000001, 0xd8, 0, PutAll },
-        { "CLI",  0x0000001, 0x58, 0, PutAll },
-        { "CLV",  0x0000001, 0xb8, 0, PutAll },
-        { "CMP",  0x080A66C, 0xc0, 0, PutAll },
-        { "CPX",  0x080000C, 0xe0, 1, PutAll },
-        { "CPY",  0x080000C, 0xc0, 1, PutAll },
-        { "DEA",  0x0000001, 0x00, 3, PutAll },   /* == DEC */
-        { "DEC",  0x000006F, 0x00, 3, PutAll },
-        { "DEX",  0x0000001, 0xca, 0, PutAll },
-        { "DEY",  0x0000001, 0x88, 0, PutAll },
-        { "EOR",  0x080A66C, 0x40, 0, PutAll },
-        { "INA",  0x0000001, 0x00, 4, PutAll },   /* == INC */
-        { "INC",  0x000006f, 0x00, 4, PutAll },
-        { "INX",  0x0000001, 0xe8, 0, PutAll },
-        { "INY",  0x0000001, 0xc8, 0, PutAll },
-        { "JMP",  0x0010808, 0x4c, 6, PutAll },
-        { "JSR",  0x0000008, 0x20, 7, PutAll },
-        { "LDA",  0x080A66C, 0xa0, 0, PutAll },
-        { "LDX",  0x080030C, 0xa2, 1, PutAll },
-        { "LDY",  0x080006C, 0xa0, 1, PutAll },
-        { "LSR",  0x000006F, 0x42, 1, PutAll },
-        { "NOP",  0x0000001, 0xea, 0, PutAll },
-        { "ORA",  0x080A66C, 0x00, 0, PutAll },
-        { "PHA",  0x0000001, 0x48, 0, PutAll },
-        { "PHP",  0x0000001, 0x08, 0, PutAll },
-        { "PHX",  0x0000001, 0xda, 0, PutAll },
-        { "PHY",  0x0000001, 0x5a, 0, PutAll },
-        { "PLA",  0x0000001, 0x68, 0, PutAll },
-        { "PLP",  0x0000001, 0x28, 0, PutAll },
-        { "PLX",  0x0000001, 0xfa, 0, PutAll },
-        { "PLY",  0x0000001, 0x7a, 0, PutAll },
-        { "ROL",  0x000006F, 0x22, 1, PutAll },
-        { "ROR",  0x000006F, 0x62, 1, PutAll },
-        { "RTI",  0x0000001, 0x40, 0, PutAll },
-        { "RTS",  0x0000001, 0x60, 0, PutAll },
-        { "SBC",  0x080A66C, 0xe0, 0, PutAll },
-        { "SEC",  0x0000001, 0x38, 0, PutAll },
-        { "SED",  0x0000001, 0xf8, 0, PutAll },
-        { "SEI",  0x0000001, 0x78, 0, PutAll },
-        { "STA",  0x000A66C, 0x80, 0, PutAll },
-        { "STX",  0x000010c, 0x82, 1, PutAll },
-        { "STY",  0x000002c, 0x80, 1, PutAll },
-        { "STZ",  0x000006c, 0x04, 5, PutAll },
-        { "TAX",  0x0000001, 0xaa, 0, PutAll },
-        { "TAY",  0x0000001, 0xa8, 0, PutAll },
-        { "TRB",  0x000000c, 0x10, 1, PutAll },
-        { "TSB",  0x000000c, 0x00, 1, PutAll },
-        { "TSX",  0x0000001, 0xba, 0, PutAll },
-        { "TXA",  0x0000001, 0x8a, 0, PutAll },
-        { "TXS",  0x0000001, 0x9a, 0, PutAll },
-        { "TYA",  0x0000001, 0x98, 0, PutAll }
-    }
-};
-
-/* Instruction table for the 65C02 */
-static const struct {
-    unsigned Count;
-    InsDesc  Ins[98];
-} InsTab65C02 = {
-    sizeof (InsTab65C02.Ins) / sizeof (InsTab65C02.Ins[0]),
-    {
-        { "ADC",  0x080A66C, 0x60, 0, PutAll },
-        { "AND",  0x080A66C, 0x20, 0, PutAll },
-        { "ASL",  0x000006e, 0x02, 1, PutAll },
-        { "BBR0", 0x0000000, 0x0F, 0, PutBitBranch },
-        { "BBR1", 0x0000000, 0x1F, 0, PutBitBranch },
-        { "BBR2", 0x0000000, 0x2F, 0, PutBitBranch },
-        { "BBR3", 0x0000000, 0x3F, 0, PutBitBranch },
-        { "BBR4", 0x0000000, 0x4F, 0, PutBitBranch },
-        { "BBR5", 0x0000000, 0x5F, 0, PutBitBranch },
-        { "BBR6", 0x0000000, 0x6F, 0, PutBitBranch },
-        { "BBR7", 0x0000000, 0x7F, 0, PutBitBranch },
-        { "BBS0", 0x0000000, 0x8F, 0, PutBitBranch },
-        { "BBS1", 0x0000000, 0x9F, 0, PutBitBranch },
-        { "BBS2", 0x0000000, 0xAF, 0, PutBitBranch },
-        { "BBS3", 0x0000000, 0xBF, 0, PutBitBranch },
-        { "BBS4", 0x0000000, 0xCF, 0, PutBitBranch },
-        { "BBS5", 0x0000000, 0xDF, 0, PutBitBranch },
-        { "BBS6", 0x0000000, 0xEF, 0, PutBitBranch },
-        { "BBS7", 0x0000000, 0xFF, 0, PutBitBranch },
-        { "BCC",  0x0020000, 0x90, 0, PutPCRel8 },
-        { "BCS",  0x0020000, 0xb0, 0, PutPCRel8 },
-        { "BEQ",  0x0020000, 0xf0, 0, PutPCRel8 },
-        { "BIT",  0x0A0006C, 0x00, 2, PutAll },
-        { "BMI",  0x0020000, 0x30, 0, PutPCRel8 },
-        { "BNE",  0x0020000, 0xd0, 0, PutPCRel8 },
-        { "BPL",  0x0020000, 0x10, 0, PutPCRel8 },
-        { "BRA",  0x0020000, 0x80, 0, PutPCRel8 },
-        { "BRK",  0x0000001, 0x00, 0, PutAll },
-        { "BVC",  0x0020000, 0x50, 0, PutPCRel8 },
-        { "BVS",  0x0020000, 0x70, 0, PutPCRel8 },
-        { "CLC",  0x0000001, 0x18, 0, PutAll },
-        { "CLD",  0x0000001, 0xd8, 0, PutAll },
-        { "CLI",  0x0000001, 0x58, 0, PutAll },
-        { "CLV",  0x0000001, 0xb8, 0, PutAll },
-        { "CMP",  0x080A66C, 0xc0, 0, PutAll },
-        { "CPX",  0x080000C, 0xe0, 1, PutAll },
-        { "CPY",  0x080000C, 0xc0, 1, PutAll },
-        { "DEA",  0x0000001, 0x00, 3, PutAll },   /* == DEC */
-        { "DEC",  0x000006F, 0x00, 3, PutAll },
-        { "DEX",  0x0000001, 0xca, 0, PutAll },
-        { "DEY",  0x0000001, 0x88, 0, PutAll },
-        { "EOR",  0x080A66C, 0x40, 0, PutAll },
-        { "INA",  0x0000001, 0x00, 4, PutAll },   /* == INC */
-        { "INC",  0x000006f, 0x00, 4, PutAll },
-        { "INX",  0x0000001, 0xe8, 0, PutAll },
-        { "INY",  0x0000001, 0xc8, 0, PutAll },
-        { "JMP",  0x0010808, 0x4c, 6, PutAll },
-        { "JSR",  0x0000008, 0x20, 7, PutAll },
-        { "LDA",  0x080A66C, 0xa0, 0, PutAll },
-        { "LDX",  0x080030C, 0xa2, 1, PutAll },
-        { "LDY",  0x080006C, 0xa0, 1, PutAll },
-        { "LSR",  0x000006F, 0x42, 1, PutAll },
-        { "NOP",  0x0000001, 0xea, 0, PutAll },
-        { "ORA",  0x080A66C, 0x00, 0, PutAll },
-        { "PHA",  0x0000001, 0x48, 0, PutAll },
-        { "PHP",  0x0000001, 0x08, 0, PutAll },
-        { "PHX",  0x0000001, 0xda, 0, PutAll },
-        { "PHY",  0x0000001, 0x5a, 0, PutAll },
-        { "PLA",  0x0000001, 0x68, 0, PutAll },
-        { "PLP",  0x0000001, 0x28, 0, PutAll },
-        { "PLX",  0x0000001, 0xfa, 0, PutAll },
-        { "PLY",  0x0000001, 0x7a, 0, PutAll },
-        { "RMB0", 0x0000004, 0x07, 1, PutAll },
-        { "RMB1", 0x0000004, 0x17, 1, PutAll },
-        { "RMB2", 0x0000004, 0x27, 1, PutAll },
-        { "RMB3", 0x0000004, 0x37, 1, PutAll },
-        { "RMB4", 0x0000004, 0x47, 1, PutAll },
-        { "RMB5", 0x0000004, 0x57, 1, PutAll },
-        { "RMB6", 0x0000004, 0x67, 1, PutAll },
-        { "RMB7", 0x0000004, 0x77, 1, PutAll },
-        { "ROL",  0x000006F, 0x22, 1, PutAll },
-        { "ROR",  0x000006F, 0x62, 1, PutAll },
-        { "RTI",  0x0000001, 0x40, 0, PutAll },
-        { "RTS",  0x0000001, 0x60, 0, PutAll },
-        { "SBC",  0x080A66C, 0xe0, 0, PutAll },
-        { "SEC",  0x0000001, 0x38, 0, PutAll },
-        { "SED",  0x0000001, 0xf8, 0, PutAll },
-        { "SEI",  0x0000001, 0x78, 0, PutAll },
-        { "SMB0", 0x0000004, 0x87, 1, PutAll },
-        { "SMB1", 0x0000004, 0x97, 1, PutAll },
-        { "SMB2", 0x0000004, 0xA7, 1, PutAll },
-        { "SMB3", 0x0000004, 0xB7, 1, PutAll },
-        { "SMB4", 0x0000004, 0xC7, 1, PutAll },
-        { "SMB5", 0x0000004, 0xD7, 1, PutAll },
-        { "SMB6", 0x0000004, 0xE7, 1, PutAll },
-        { "SMB7", 0x0000004, 0xF7, 1, PutAll },
-        { "STA",  0x000A66C, 0x80, 0, PutAll },
-        { "STX",  0x000010c, 0x82, 1, PutAll },
-        { "STY",  0x000002c, 0x80, 1, PutAll },
-        { "STZ",  0x000006c, 0x04, 5, PutAll },
-        { "TAX",  0x0000001, 0xaa, 0, PutAll },
-        { "TAY",  0x0000001, 0xa8, 0, PutAll },
-        { "TRB",  0x000000c, 0x10, 1, PutAll },
-        { "TSB",  0x000000c, 0x00, 1, PutAll },
-        { "TSX",  0x0000001, 0xba, 0, PutAll },
-        { "TXA",  0x0000001, 0x8a, 0, PutAll },
-        { "TXS",  0x0000001, 0x9a, 0, PutAll },
-        { "TYA",  0x0000001, 0x98, 0, PutAll }
-    }
-};
-
-/* Instruction table for the 65816 */
-static const struct {
-    unsigned Count;
-    InsDesc  Ins[99];
-} InsTab65816 = {
-    sizeof (InsTab65816.Ins) / sizeof (InsTab65816.Ins[0]),
-    {
-        { "ADC",  0x0b8f6fc, 0x60, 0, PutAll },
-        { "AND",  0x0b8f6fc, 0x20, 0, PutAll },
-        { "ASL",  0x000006e, 0x02, 1, PutAll },
-        { "BCC",  0x0020000, 0x90, 0, PutPCRel8 },
-        { "BCS",  0x0020000, 0xb0, 0, PutPCRel8 },
-        { "BEQ",  0x0020000, 0xf0, 0, PutPCRel8 },
-        { "BIT",  0x0a0006c, 0x00, 2, PutAll },
-        { "BMI",  0x0020000, 0x30, 0, PutPCRel8 },
-        { "BNE",  0x0020000, 0xd0, 0, PutPCRel8 },
-        { "BPL",  0x0020000, 0x10, 0, PutPCRel8 },
-        { "BRA",  0x0020000, 0x80, 0, PutPCRel8 },
-        { "BRK",  0x0000001, 0x00, 0, PutAll },
-        { "BRL",  0x0040000, 0x82, 0, PutPCRel16 },
-        { "BVC",  0x0020000, 0x50, 0, PutPCRel8 },
-        { "BVS",  0x0020000, 0x70, 0, PutPCRel8 },
-        { "CLC",  0x0000001, 0x18, 0, PutAll },
-        { "CLD",  0x0000001, 0xd8, 0, PutAll },
-        { "CLI",  0x0000001, 0x58, 0, PutAll },
-        { "CLV",  0x0000001, 0xb8, 0, PutAll },
-        { "CMP",  0x0b8f6fc, 0xc0, 0, PutAll },
-        { "COP",  0x0000004, 0x02, 6, PutAll },
-        { "CPA",  0x0b8f6fc, 0xc0, 0, PutAll },   /* == CMP */
-        { "CPX",  0x0c0000c, 0xe0, 1, PutAll },
-        { "CPY",  0x0c0000c, 0xc0, 1, PutAll },
-        { "DEA",  0x0000001, 0x00, 3, PutAll },   /* == DEC */
-        { "DEC",  0x000006F, 0x00, 3, PutAll },
-        { "DEX",  0x0000001, 0xca, 0, PutAll },
-        { "DEY",  0x0000001, 0x88, 0, PutAll },
-        { "EOR",  0x0b8f6fc, 0x40, 0, PutAll },
-        { "INA",  0x0000001, 0x00, 4, PutAll },   /* == INC */
-        { "INC",  0x000006F, 0x00, 4, PutAll },
-        { "INX",  0x0000001, 0xe8, 0, PutAll },
-        { "INY",  0x0000001, 0xc8, 0, PutAll },
-        { "JML",  0x4000010, 0x5c, 1, PutAll },
-        { "JMP",  0x4010818, 0x4c, 6, PutAll },
-        { "JSL",  0x0000010, 0x20, 7, PutAll },
-        { "JSR",  0x0010018, 0x20, 7, PutAll },
-        { "LDA",  0x0b8f6fc, 0xa0, 0, PutAll },
-        { "LDX",  0x0c0030c, 0xa2, 1, PutAll },
-        { "LDY",  0x0c0006c, 0xa0, 1, PutAll },
-        { "LSR",  0x000006F, 0x42, 1, PutAll },
-        { "MVN",  0x1000000, 0x54, 0, PutBlockMove },
-        { "MVP",  0x1000000, 0x44, 0, PutBlockMove },
-        { "NOP",  0x0000001, 0xea, 0, PutAll },
-        { "ORA",  0x0b8f6fc, 0x00, 0, PutAll },
-        { "PEA",  0x0000008, 0xf4, 6, PutAll },
-        { "PEI",  0x0000400, 0xd4, 1, PutAll },
-        { "PER",  0x0040000, 0x62, 0, PutPCRel16 },
-        { "PHA",  0x0000001, 0x48, 0, PutAll },
-        { "PHB",  0x0000001, 0x8b, 0, PutAll },
-        { "PHD",  0x0000001, 0x0b, 0, PutAll },
-        { "PHK",  0x0000001, 0x4b, 0, PutAll },
-        { "PHP",  0x0000001, 0x08, 0, PutAll },
-        { "PHX",  0x0000001, 0xda, 0, PutAll },
-        { "PHY",  0x0000001, 0x5a, 0, PutAll },
-        { "PLA",  0x0000001, 0x68, 0, PutAll },
-        { "PLB",  0x0000001, 0xab, 0, PutAll },
-        { "PLD",  0x0000001, 0x2b, 0, PutAll },
-        { "PLP",  0x0000001, 0x28, 0, PutAll },
-        { "PLX",  0x0000001, 0xfa, 0, PutAll },
-        { "PLY",  0x0000001, 0x7a, 0, PutAll },
-        { "REP",  0x0800000, 0xc2, 1, PutREP },
-        { "ROL",  0x000006F, 0x22, 1, PutAll },
-        { "ROR",  0x000006F, 0x62, 1, PutAll },
-        { "RTI",  0x0000001, 0x40, 0, PutAll },
-        { "RTL",  0x0000001, 0x6b, 0, PutAll },
-        { "RTS",  0x0000001, 0x60, 0, PutRTS },
-        { "SBC",  0x0b8f6fc, 0xe0, 0, PutAll },
-        { "SEC",  0x0000001, 0x38, 0, PutAll },
-        { "SED",  0x0000001, 0xf8, 0, PutAll },
-        { "SEI",  0x0000001, 0x78, 0, PutAll },
-        { "SEP",  0x0800000, 0xe2, 1, PutSEP },
-        { "STA",  0x018f6fc, 0x80, 0, PutAll },
-        { "STP",  0x0000001, 0xdb, 0, PutAll },
-        { "STX",  0x000010c, 0x82, 1, PutAll },
-        { "STY",  0x000002c, 0x80, 1, PutAll },
-        { "STZ",  0x000006c, 0x04, 5, PutAll },
-        { "SWA",  0x0000001, 0xeb, 0, PutAll },   /* == XBA */
-        { "TAD",  0x0000001, 0x5b, 0, PutAll },   /* == TCD */
-        { "TAS",  0x0000001, 0x1b, 0, PutAll },   /* == TCS */
-        { "TAX",  0x0000001, 0xaa, 0, PutAll },
-        { "TAY",  0x0000001, 0xa8, 0, PutAll },
-        { "TCD",  0x0000001, 0x5b, 0, PutAll },
-        { "TCS",  0x0000001, 0x1b, 0, PutAll },
-        { "TDA",  0x0000001, 0x7b, 0, PutAll },   /* == TDC */
-        { "TDC",  0x0000001, 0x7b, 0, PutAll },
-        { "TRB",  0x000000c, 0x10, 1, PutAll },
-        { "TSA",  0x0000001, 0x3b, 0, PutAll },   /* == TSC */
-        { "TSB",  0x000000c, 0x00, 1, PutAll },
-        { "TSC",  0x0000001, 0x3b, 0, PutAll },
-        { "TSX",  0x0000001, 0xba, 0, PutAll },
-        { "TXA",  0x0000001, 0x8a, 0, PutAll },
-        { "TXS",  0x0000001, 0x9a, 0, PutAll },
-        { "TXY",  0x0000001, 0x9b, 0, PutAll },
-        { "TYA",  0x0000001, 0x98, 0, PutAll },
-        { "TYX",  0x0000001, 0xbb, 0, PutAll },
-        { "WAI",  0x0000001, 0xcb, 0, PutAll },
-        { "XBA",  0x0000001, 0xeb, 0, PutAll },
-        { "XCE",  0x0000001, 0xfb, 0, PutAll }
-    }
-};
-
-/* Instruction table for the SWEET16 pseudo CPU */
-static const struct {
-    unsigned Count;
-    InsDesc  Ins[26];
-} InsTabSweet16 = {
-    sizeof (InsTabSweet16.Ins) / sizeof (InsTabSweet16.Ins[0]),
-    {
-        { "ADD",  AMSW16_REG,              0xA0, 0, PutSweet16 },
-        { "BC",   AMSW16_BRA,              0x03, 0, PutSweet16Branch },
-        { "BK",   AMSW16_IMP,              0x0A, 0, PutSweet16 },
-        { "BM",   AMSW16_BRA,              0x05, 0, PutSweet16Branch },
-        { "BM1",  AMSW16_BRA,              0x08, 0, PutSweet16Branch },
-        { "BNC",  AMSW16_BRA,              0x02, 0, PutSweet16Branch },
-        { "BNM1", AMSW16_BRA,              0x09, 0, PutSweet16Branch },
-        { "BNZ",  AMSW16_BRA,              0x07, 0, PutSweet16Branch },
-        { "BP",   AMSW16_BRA,              0x04, 0, PutSweet16Branch },
-        { "BR",   AMSW16_BRA,              0x01, 0, PutSweet16Branch },
-        { "BS",   AMSW16_BRA,              0x0B, 0, PutSweet16Branch },
-        { "BZ",   AMSW16_BRA,              0x06, 0, PutSweet16Branch },
-        { "CPR",  AMSW16_REG,              0xD0, 0, PutSweet16 },
-        { "DCR",  AMSW16_REG,              0xF0, 0, PutSweet16 },
-        { "INR",  AMSW16_REG,              0xE0, 0, PutSweet16 },
-        { "LD",   AMSW16_REG | AMSW16_IND, 0x00, 1, PutSweet16 },
-        { "LDD",  AMSW16_IND,              0x60, 0, PutSweet16 },
-        { "POP",  AMSW16_IND,              0x80, 0, PutSweet16 },
-        { "POPD", AMSW16_IND,              0xC0, 0, PutSweet16 },
-        { "RS",   AMSW16_IMP,              0x0B, 0, PutSweet16 },
-        { "RTN",  AMSW16_IMP,              0x00, 0, PutSweet16 },
-        { "SET",  AMSW16_IMM,              0x10, 0, PutSweet16 },
-        { "ST",   AMSW16_REG | AMSW16_IND, 0x10, 1, PutSweet16 },
-        { "STD",  AMSW16_IND,              0x70, 0, PutSweet16 },
-        { "STP",  AMSW16_IND,              0x90, 0, PutSweet16 },
-        { "SUB",  AMSW16_REG,              0xB0, 0, PutSweet16 },
-    }
-};
-
-/* Instruction table for the HuC6280 (the CPU used in the PC engine) */
-static const struct {
-    unsigned Count;
-    InsDesc  Ins[135];
-} InsTabHuC6280 = {
-    sizeof (InsTabHuC6280.Ins) / sizeof (InsTabHuC6280.Ins[0]),
-    {
-        { "ADC",  0x080A66C, 0x60, 0, PutAll },
-        { "AND",  0x080A66C, 0x20, 0, PutAll },
-        { "ASL",  0x000006e, 0x02, 1, PutAll },
-        { "BBR0", 0x0000000, 0x0F, 0, PutBitBranch },
-        { "BBR1", 0x0000000, 0x1F, 0, PutBitBranch },
-        { "BBR2", 0x0000000, 0x2F, 0, PutBitBranch },
-        { "BBR3", 0x0000000, 0x3F, 0, PutBitBranch },
-        { "BBR4", 0x0000000, 0x4F, 0, PutBitBranch },
-        { "BBR5", 0x0000000, 0x5F, 0, PutBitBranch },
-        { "BBR6", 0x0000000, 0x6F, 0, PutBitBranch },
-        { "BBR7", 0x0000000, 0x7F, 0, PutBitBranch },
-        { "BBS0", 0x0000000, 0x8F, 0, PutBitBranch },
-        { "BBS1", 0x0000000, 0x9F, 0, PutBitBranch },
-        { "BBS2", 0x0000000, 0xAF, 0, PutBitBranch },
-        { "BBS3", 0x0000000, 0xBF, 0, PutBitBranch },
-        { "BBS4", 0x0000000, 0xCF, 0, PutBitBranch },
-        { "BBS5", 0x0000000, 0xDF, 0, PutBitBranch },
-        { "BBS6", 0x0000000, 0xEF, 0, PutBitBranch },
-        { "BBS7", 0x0000000, 0xFF, 0, PutBitBranch },
-        { "BCC",  0x0020000, 0x90, 0, PutPCRel8 },
-        { "BCS",  0x0020000, 0xb0, 0, PutPCRel8 },
-        { "BEQ",  0x0020000, 0xf0, 0, PutPCRel8 },
-        { "BIT",  0x0A0006C, 0x00, 2, PutAll },
-        { "BMI",  0x0020000, 0x30, 0, PutPCRel8 },
-        { "BNE",  0x0020000, 0xd0, 0, PutPCRel8 },
-        { "BPL",  0x0020000, 0x10, 0, PutPCRel8 },
-        { "BRA",  0x0020000, 0x80, 0, PutPCRel8 },
-        { "BRK",  0x0000001, 0x00, 0, PutAll },
-        { "BSR",  0x0020000, 0x44, 0, PutPCRel8 },
-        { "BVC",  0x0020000, 0x50, 0, PutPCRel8 },
-        { "BVS",  0x0020000, 0x70, 0, PutPCRel8 },
-        { "CLA",  0x0000001, 0x62, 0, PutAll },
-        { "CLC",  0x0000001, 0x18, 0, PutAll },
-        { "CLD",  0x0000001, 0xd8, 0, PutAll },
-        { "CLI",  0x0000001, 0x58, 0, PutAll },
-        { "CLV",  0x0000001, 0xb8, 0, PutAll },
-        { "CLX",  0x0000001, 0x82, 0, PutAll },
-        { "CLY",  0x0000001, 0xc2, 0, PutAll },
-        { "CMP",  0x080A66C, 0xc0, 0, PutAll },
-        { "CPX",  0x080000C, 0xe0, 1, PutAll },
-        { "CPY",  0x080000C, 0xc0, 1, PutAll },
-        { "CSH",  0x0000001, 0xd4, 0, PutAll },
-        { "CSL",  0x0000001, 0x54, 0, PutAll },
-        { "DEA",  0x0000001, 0x00, 3, PutAll },   /* == DEC */
-        { "DEC",  0x000006F, 0x00, 3, PutAll },
-        { "DEX",  0x0000001, 0xca, 0, PutAll },
-        { "DEY",  0x0000001, 0x88, 0, PutAll },
-        { "EOR",  0x080A66C, 0x40, 0, PutAll },
-        { "INA",  0x0000001, 0x00, 4, PutAll },   /* == INC */
-        { "INC",  0x000006f, 0x00, 4, PutAll },
-        { "INX",  0x0000001, 0xe8, 0, PutAll },
-        { "INY",  0x0000001, 0xc8, 0, PutAll },
-        { "JMP",  0x0010808, 0x4c, 6, PutAll },
-        { "JSR",  0x0000008, 0x20, 7, PutAll },
-        { "LDA",  0x080A66C, 0xa0, 0, PutAll },
-        { "LDX",  0x080030C, 0xa2, 1, PutAll },
-        { "LDY",  0x080006C, 0xa0, 1, PutAll },
-        { "LSR",  0x000006F, 0x42, 1, PutAll },
-        { "NOP",  0x0000001, 0xea, 0, PutAll },
-        { "ORA",  0x080A66C, 0x00, 0, PutAll },
-        { "PHA",  0x0000001, 0x48, 0, PutAll },
-        { "PHP",  0x0000001, 0x08, 0, PutAll },
-        { "PHX",  0x0000001, 0xda, 0, PutAll },
-        { "PHY",  0x0000001, 0x5a, 0, PutAll },
-        { "PLA",  0x0000001, 0x68, 0, PutAll },
-        { "PLP",  0x0000001, 0x28, 0, PutAll },
-        { "PLX",  0x0000001, 0xfa, 0, PutAll },
-        { "PLY",  0x0000001, 0x7a, 0, PutAll },
-        { "RMB0", 0x0000004, 0x07, 1, PutAll },
-        { "RMB1", 0x0000004, 0x17, 1, PutAll },
-        { "RMB2", 0x0000004, 0x27, 1, PutAll },
-        { "RMB3", 0x0000004, 0x37, 1, PutAll },
-        { "RMB4", 0x0000004, 0x47, 1, PutAll },
-        { "RMB5", 0x0000004, 0x57, 1, PutAll },
-        { "RMB6", 0x0000004, 0x67, 1, PutAll },
-        { "RMB7", 0x0000004, 0x77, 1, PutAll },
-        { "ROL",  0x000006F, 0x22, 1, PutAll },
-        { "ROR",  0x000006F, 0x62, 1, PutAll },
-        { "RTI",  0x0000001, 0x40, 0, PutAll },
-        { "RTS",  0x0000001, 0x60, 0, PutAll },
-        { "SAX",  0x0000001, 0x22, 0, PutAll },
-        { "SAY",  0x0000001, 0x42, 0, PutAll },
-        { "SBC",  0x080A66C, 0xe0, 0, PutAll },
-        { "SEC",  0x0000001, 0x38, 0, PutAll },
-        { "SED",  0x0000001, 0xf8, 0, PutAll },
-        { "SEI",  0x0000001, 0x78, 0, PutAll },
-        { "SET",  0x0000001, 0xf4, 0, PutAll },
-        { "SMB0", 0x0000004, 0x87, 1, PutAll },
-        { "SMB1", 0x0000004, 0x97, 1, PutAll },
-        { "SMB2", 0x0000004, 0xA7, 1, PutAll },
-        { "SMB3", 0x0000004, 0xB7, 1, PutAll },
-        { "SMB4", 0x0000004, 0xC7, 1, PutAll },
-        { "SMB5", 0x0000004, 0xD7, 1, PutAll },
-        { "SMB6", 0x0000004, 0xE7, 1, PutAll },
-        { "SMB7", 0x0000004, 0xF7, 1, PutAll },
-        { "ST0",  0x0800000, 0x03, 1, PutAll },
-        { "ST1",  0x0800000, 0x13, 1, PutAll },
-        { "ST2",  0x0800000, 0x23, 1, PutAll },
-        { "STA",  0x000A66C, 0x80, 0, PutAll },
-        { "STX",  0x000010c, 0x82, 1, PutAll },
-        { "STY",  0x000002c, 0x80, 1, PutAll },
-        { "STZ",  0x000006c, 0x04, 5, PutAll },
-        { "SXY",  0x0000001, 0x02, 0, PutAll },
-        { "TAI",  0x2000000, 0xf3, 0, PutBlockTransfer },
-        { "TAM",  0x0800000, 0x53, 1, PutAll },
-        { "TAM0", 0x0000001, 0x01, 0, PutTAMn},
-        { "TAM1", 0x0000001, 0x02, 0, PutTAMn},
-        { "TAM2", 0x0000001, 0x04, 0, PutTAMn},
-        { "TAM3", 0x0000001, 0x08, 0, PutTAMn},
-        { "TAM4", 0x0000001, 0x10, 0, PutTAMn},
-        { "TAM5", 0x0000001, 0x20, 0, PutTAMn},
-        { "TAM6", 0x0000001, 0x40, 0, PutTAMn},
-        { "TAM7", 0x0000001, 0x80, 0, PutTAMn},
-        { "TAX",  0x0000001, 0xaa, 0, PutAll },
-        { "TAY",  0x0000001, 0xa8, 0, PutAll },
-        { "TDD",  0x2000000, 0xc3, 0, PutBlockTransfer },
-        { "TIA",  0x2000000, 0xe3, 0, PutBlockTransfer },
-        { "TII",  0x2000000, 0x73, 0, PutBlockTransfer },
-        { "TIN",  0x2000000, 0xD3, 0, PutBlockTransfer },
-        { "TMA",  0x0800000, 0x43, 1, PutTMA },
-        { "TMA0", 0x0000001, 0x01, 0, PutTMAn},
-        { "TMA1", 0x0000001, 0x02, 0, PutTMAn},
-        { "TMA2", 0x0000001, 0x04, 0, PutTMAn},
-        { "TMA3", 0x0000001, 0x08, 0, PutTMAn},
-        { "TMA4", 0x0000001, 0x10, 0, PutTMAn},
-        { "TMA5", 0x0000001, 0x20, 0, PutTMAn},
-        { "TMA6", 0x0000001, 0x40, 0, PutTMAn},
-        { "TMA7", 0x0000001, 0x80, 0, PutTMAn},
-        { "TRB",  0x000000c, 0x10, 1, PutAll },
-        { "TSB",  0x000000c, 0x00, 1, PutAll },
-        { "TST",  0x000006c, 0x83, 9, PutTST },
-        { "TSX",  0x0000001, 0xba, 0, PutAll },
-        { "TXA",  0x0000001, 0x8a, 0, PutAll },
-        { "TXS",  0x0000001, 0x9a, 0, PutAll },
-        { "TYA",  0x0000001, 0x98, 0, PutAll }
-    }
-};
-
-
-
-/* An array with instruction tables */
-static const InsTable* InsTabs[CPU_COUNT] = {
-    (const InsTable*) &InsTabNone,
-    (const InsTable*) &InsTab6502,
-    (const InsTable*) &InsTab6502X,
-    (const InsTable*) &InsTab65SC02,
-    (const InsTable*) &InsTab65C02,
-    (const InsTable*) &InsTab65816,
-    (const InsTable*) &InsTabSweet16,
-    (const InsTable*) &InsTabHuC6280,
-    0,                                  /* Mitsubishi 740 */
-};
-const InsTable* InsTab = (const InsTable*) &InsTab6502;
-
-/* Table to build the effective 65xx opcode from a base opcode and an
-** addressing mode. (The value in the table is ORed with the base opcode)
-*/
-static unsigned char EATab[12][AM65I_COUNT] = {
-    {   /* Table 0 */
-        0x00, 0x00, 0x05, 0x0D, 0x0F, 0x15, 0x1D, 0x1F,
-        0x00, 0x19, 0x12, 0x00, 0x07, 0x11, 0x17, 0x01,
-        0x00, 0x00, 0x00, 0x03, 0x13, 0x09, 0x00, 0x09,
-        0x00, 0x00, 0x00
-    },
-    {   /* Table 1 */
-        0x08, 0x08, 0x04, 0x0C, 0x00, 0x14, 0x1C, 0x00,
-        0x14, 0x1C, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x80
-    },
-    {   /* Table 2 */
-        0x00, 0x00, 0x24, 0x2C, 0x0F, 0x34, 0x3C, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00,
-        0x00, 0x00, 0x00
-    },
-    {   /* Table 3 */
-        0x3A, 0x3A, 0xC6, 0xCE, 0x00, 0xD6, 0xDE, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00
-    },
-    {   /* Table 4 */
-        0x1A, 0x1A, 0xE6, 0xEE, 0x00, 0xF6, 0xFE, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00
-    },
-    {   /* Table 5 */
-        0x00, 0x00, 0x60, 0x98, 0x00, 0x70, 0x9E, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00
-    },
-    {   /* Table 6 */
-        0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
-        0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x90
-    },
-    {   /* Table 7 */
-        0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00
-    },
-    {   /* Table 8 */
-        0x00, 0x40, 0x01, 0x41, 0x00, 0x09, 0x49, 0x00,
-        0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
-        0x00, 0x00, 0x00
-    },
-    {   /* Table 9 */
-        0x00, 0x00, 0x00, 0x10, 0x00, 0x20, 0x30, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00
-    },
-    {   /* Table 10 (NOPs) */
-        0xea, 0x00, 0x04, 0x0c, 0x00, 0x14, 0x1c, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
-        0x00, 0x00, 0x00
-    },
-    {   /* Table 11 (LAX) */
-        0x08, 0x08, 0x04, 0x0C, 0x00, 0x14, 0x1C, 0x00,
-        0x14, 0x1C, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
-        0x00, 0x00, 0x80
-    },
-};
-
-/* Table to build the effective SWEET16 opcode from a base opcode and an
-** addressing mode.
-*/
-static unsigned char Sweet16EATab[2][AMSW16I_COUNT] = {
-    {   /* Table 0 */
-        0x00, 0x00, 0x00, 0x00, 0x00,
-    },
-    {   /* Table 1 */
-        0x00, 0x00, 0x00, 0x40, 0x20,
-    },
-};
-
-/* Table that encodes the additional bytes for each 65xx instruction */
-unsigned char ExtBytes[AM65I_COUNT] = {
-    0,          /* Implicit */
-    0,          /* Accu */
-    1,          /* Direct */
-    2,          /* Absolute */
-    3,          /* Absolute long */
-    1,          /* Direct,X */
-    2,          /* Absolute,X */
-    3,          /* Absolute long,X */
-    1,          /* Direct,Y */
-    2,          /* Absolute,Y */
-    1,          /* (Direct) */
-    2,          /* (Absolute) */
-    1,          /* [Direct] */
-    1,          /* (Direct),Y */
-    1,          /* [Direct],Y */
-    1,          /* (Direct,X) */
-    2,          /* (Absolute,X) */
-    1,          /* Relative short */
-    2,          /* Relative long */
-    1,          /* r,s */
-    1,          /* (r,s),y */
-    1,          /* Immidiate accu */
-    1,          /* Immidiate index */
-    1,          /* Immidiate byte */
-    2,          /* Blockmove (65816) */
-    7,          /* Block transfer (HuC6280) */
-    2,          /* Absolute Indirect long */
-};
-
-/* Table that encodes the additional bytes for each SWEET16 instruction */
-static unsigned char Sweet16ExtBytes[AMSW16I_COUNT] = {
-    0,          /* AMSW16_IMP */
-    1,          /* AMSW16_BRA */
-    2,          /* AMSW16_IMM */
-    0,          /* AMSW16_IND */
-    0,          /* AMSW16_REG */
-};
-
-
-
-/*****************************************************************************/
-/*                   Handler functions for 6502 derivates                    */
-/*****************************************************************************/
-
-
-
-static int EvalEA (const InsDesc* Ins, EffAddr* A)
-/* Evaluate the effective address. All fields in A will be valid after calling
-** this function. The function returns true on success and false on errors.
-*/
-{
-    /* Get the set of possible addressing modes */
-    GetEA (A);
-
-    /* From the possible addressing modes, remove the ones that are invalid
-    ** for this instruction or CPU.
-    */
-    A->AddrModeSet &= Ins->AddrMode;
-
-    /* If we have an expression, check it and remove any addressing modes that
-    ** are too small for the expression size. Since we have to study the
-    ** expression anyway, do also replace it by a simpler one if possible.
-    */
-    if (A->Expr) {
-        ExprDesc ED;
-        ED_Init (&ED);
-
-        /* Study the expression */
-        StudyExpr (A->Expr, &ED);
-
-        /* Simplify it if possible */
-        A->Expr = SimplifyExpr (A->Expr, &ED);
-
-        if (ED.AddrSize == ADDR_SIZE_DEFAULT) {
-            /* We don't know how big the expression is. If the instruction
-            ** allows just one addressing mode, assume this as address size
-            ** for the expression. Otherwise assume the default address size
-            ** for data.
-            */
-            if ((A->AddrModeSet & ~AM65_ALL_ZP) == 0) {
-                ED.AddrSize = ADDR_SIZE_ZP;
-            } else if ((A->AddrModeSet & ~AM65_ALL_ABS) == 0) {
-                ED.AddrSize = ADDR_SIZE_ABS;
-            } else if ((A->AddrModeSet & ~AM65_ALL_FAR) == 0) {
-                ED.AddrSize = ADDR_SIZE_FAR;
-            } else {
-                ED.AddrSize = DataAddrSize;
-                /* If the default address size of the data segment is unequal
-                ** to zero page addressing, but zero page addressing is 
-                ** allowed by the instruction, mark all symbols in the 
-                ** expression tree. This mark will be checked at end of 
-                ** assembly, and a warning is issued, if a zero page symbol
-                ** was guessed wrong here.
-                */
-                if (ED.AddrSize > ADDR_SIZE_ZP && (A->AddrModeSet & AM65_SET_ZP)) {
-                    ExprGuessedAddrSize (A->Expr, ADDR_SIZE_ZP);
-                }
-            }
-        }
-
-        /* Check the size */
-        switch (ED.AddrSize) {
-
-            case ADDR_SIZE_ABS:
-                A->AddrModeSet &= ~AM65_SET_ZP;
-                break;
-
-            case ADDR_SIZE_FAR:
-                A->AddrModeSet &= ~(AM65_SET_ZP | AM65_SET_ABS);
-                break;
-        }
-
-        /* Free any resource associated with the expression desc */
-        ED_Done (&ED);
-    }
-
-    /* Check if we have any adressing modes left */
-    if (A->AddrModeSet == 0) {
-        Error ("Illegal addressing mode");
-        return 0;
-    }
-    A->AddrMode    = BitFind (A->AddrModeSet);
-    A->AddrModeBit = (0x01UL << A->AddrMode);
-
-    /* If the instruction has a one byte operand and immediate addressing is
-    ** allowed but not used, check for an operand expression in the form
-    ** <label or >label, where label is a far or absolute label. If found,
-    ** emit a warning. This warning protects against a typo, where the '#'
-    ** for the immediate operand is omitted.
-    */
-    if (A->Expr && (Ins->AddrMode & AM65_ALL_IMM)                &&
-        (A->AddrModeSet & (AM65_DIR | AM65_ABS | AM65_ABS_LONG)) &&
-        ExtBytes[A->AddrMode] == 1) {
-
-        /* Found, check the expression */
-        ExprNode* Left = A->Expr->Left;
-        if ((A->Expr->Op == EXPR_BYTE0 || A->Expr->Op == EXPR_BYTE1) &&
-            Left->Op == EXPR_SYMBOL                                  &&
-            GetSymAddrSize (Left->V.Sym) != ADDR_SIZE_ZP) {
-
-            /* Output a warning */
-            Warning (1, "Suspicious address expression");
-        }
-    }
-
-    /* Build the opcode */
-    A->Opcode = Ins->BaseCode | EATab[Ins->ExtCode][A->AddrMode];
-
-    /* If feature force_range is active, and we have immediate addressing mode,
-    ** limit the expression to the maximum possible value.
-    */
-    if (A->AddrMode == AM65I_IMM_ACCU || A->AddrMode == AM65I_IMM_INDEX ||
-        A->AddrMode == AM65I_IMM_IMPLICIT) {
-        if (ForceRange && A->Expr) {
-            A->Expr = MakeBoundedExpr (A->Expr, ExtBytes[A->AddrMode]);
-        }
-    }
-
-    /* Success */
-    return 1;
-}
-
-
-
-static void EmitCode (EffAddr* A)
-/* Output code for the data in A */
-{
-    /* Check how many extension bytes are needed and output the instruction */
-    switch (ExtBytes[A->AddrMode]) {
-
-        case 0:
-            Emit0 (A->Opcode);
-            break;
-
-        case 1:
-            Emit1 (A->Opcode, A->Expr);
-            break;
-
-        case 2:
-            if (CPU == CPU_65816 && (A->AddrModeBit & (AM65_ABS | AM65_ABS_X | AM65_ABS_Y))) {
-                /* This is a 16 bit mode that uses an address. If in 65816,
-                ** mode, force this address into 16 bit range to allow
-                ** addressing inside a 64K segment.
-                */
-                Emit2 (A->Opcode, GenWordExpr (A->Expr));
-            } else {
-                Emit2 (A->Opcode, A->Expr);
-            }
-            break;
-
-        case 3:
-            /* Far argument */
-            Emit3 (A->Opcode, A->Expr);
-            break;
-
-        default:
-            Internal ("Invalid operand byte count: %u", ExtBytes[A->AddrMode]);
-
-    }
-}
-
-
-
-static long PutImmed8 (const InsDesc* Ins)
-/* Parse and emit an immediate 8 bit instruction. Return the value of the
-** operand if it's available and const.
-*/
-{
-    EffAddr A;
-    long Val = -1;
-
-    /* Evaluate the addressing mode */
-    if (EvalEA (Ins, &A) == 0) {
-        /* An error occurred */
-        return -1L;
-    }
-
-    /* If we have an expression and it's const, get it's value */
-    if (A.Expr) {
-        (void) IsConstExpr (A.Expr, &Val);
-    }
-
-    /* Check how many extension bytes are needed and output the instruction */
-    switch (ExtBytes[A.AddrMode]) {
-
-        case 1:
-            Emit1 (A.Opcode, A.Expr);
-            break;
-
-        default:
-            Internal ("Invalid operand byte count: %u", ExtBytes[A.AddrMode]);
-    }
-
-    /* Return the expression value */
-    return Val;
-}
-
-
-
-static void PutPCRel8 (const InsDesc* Ins)
-/* Handle branches with a 8 bit distance */
-{
-    EmitPCRel (Ins->BaseCode, GenBranchExpr (2), 1);
-}
-
-
-
-static void PutPCRel16 (const InsDesc* Ins)
-/* Handle branches with an 16 bit distance and PER */
-{
-    EmitPCRel (Ins->BaseCode, GenBranchExpr (3), 2);
-}
-
-
-
-static void PutBlockMove (const InsDesc* Ins)
-/* Handle the blockmove instructions (65816) */
-{
-    Emit0 (Ins->BaseCode);
-    EmitByte (Expression ());
-    ConsumeComma ();
-    EmitByte (Expression ());
-}
-
-
-
-static void PutBlockTransfer (const InsDesc* Ins)
-/* Handle the block transfer instructions (HuC6280) */
-{
-    Emit0 (Ins->BaseCode);
-    EmitWord (Expression ());
-    ConsumeComma ();
-    EmitWord (Expression ());
-    ConsumeComma ();
-    EmitWord (Expression ());
-}
-
-
-
-static void PutBitBranch (const InsDesc* Ins)
-/* Handle 65C02 branch on bit condition */
-{
-    Emit0 (Ins->BaseCode);
-    EmitByte (Expression ());
-    ConsumeComma ();
-    EmitSigned (GenBranchExpr (1), 1);
-}
-
-
-
-static void PutREP (const InsDesc* Ins)
-/* Emit a REP instruction, track register sizes */
-{
-    /* Use the generic handler */
-    long Val = PutImmed8 (Ins);
-
-    /* We track the status only for the 816 CPU and in smart mode */
-    if (CPU == CPU_65816 && SmartMode) {
-
-        /* Check the range for Val. */
-        if (Val < 0) {
-            /* We had an error */
-            Warning (1, "Cannot track processor status byte");
-        } else {
-            if (Val & 0x10) {
-                /* Index registers to 16 bit */
-                ExtBytes[AM65I_IMM_INDEX] = 2;
-            }
-            if (Val & 0x20) {
-                /* Accu to 16 bit */
-                ExtBytes[AM65I_IMM_ACCU] = 2;
-            }
-        }
-    }
-}
-
-
-
-static void PutSEP (const InsDesc* Ins)
-/* Emit a SEP instruction (65816), track register sizes */
-{
-    /* Use the generic handler */
-    long Val = PutImmed8 (Ins);
-
-    /* We track the status only for the 816 CPU and in smart mode */
-    if (CPU == CPU_65816 && SmartMode) {
-
-        /* Check the range for Val. */
-        if (Val < 0) {
-            /* We had an error */
-            Warning (1, "Cannot track processor status byte");
-        } else {
-            if (Val & 0x10) {
-                /* Index registers to 8 bit */
-                ExtBytes[AM65I_IMM_INDEX] = 1;
-            }
-            if (Val & 0x20) {
-                /* Accu to 8 bit */
-                ExtBytes[AM65I_IMM_ACCU] = 1;
-            }
-        }
-    }
-}
-
-
-
-static void PutTAMn (const InsDesc* Ins)
-/* Emit a TAMn instruction (HuC6280). Since this is a two byte instruction with
-** implicit addressing mode, the opcode byte in the table is actually the
-** second operand byte. The TAM instruction is the more generic form, it takes
-** an immediate argument.
-*/
-{
-    /* Emit the TAM opcode itself */
-    Emit0 (0x53);
-
-    /* Emit the argument, which is the opcode from the table */
-    Emit0 (Ins->BaseCode);
-}
-
-
-
-static void PutTMA (const InsDesc* Ins)
-/* Emit a TMA instruction (HuC6280) with an immediate argument. Only one bit
-** in the argument byte may be set.
-*/
-{
-    /* Use the generic handler */
-    long Val = PutImmed8 (Ins);
-
-    /* Check the range for Val. */
-    if (Val < 0) {
-        /* We had an error */
-        Warning (1, "Cannot check argument of TMA instruction");
-    } else {
-        /* Make sure just one bit is set */
-        if ((Val & (Val - 1)) != 0) {
-            Error ("Argument to TAM must be a power of two");
-        }
-    }
-}
-
-
-
-static void PutTMAn (const InsDesc* Ins)
-/* Emit a TMAn instruction (HuC6280). Since this is a two byte instruction with
-** implicit addressing mode, the opcode byte in the table is actually the
-** second operand byte. The TAM instruction is the more generic form, it takes
-** an immediate argument.
-*/
-{
-    /* Emit the TMA opcode itself */
-    Emit0 (0x43);
-
-    /* Emit the argument, which is the opcode from the table */
-    Emit0 (Ins->BaseCode);
-}
-
-
-
-static void PutTST (const InsDesc* Ins)
-/* Emit a TST instruction (HuC6280). */
-{
-    ExprNode* Arg1;
-    EffAddr   A;
-
-    /* The first argument is always an immediate byte */
-    if (CurTok.Tok != TOK_HASH) {
-        ErrorSkip ("Invalid addressing mode");
-        return;
-    }
-    NextTok ();
-    Arg1 = Expression ();
-
-    /* Second argument follows */
-    ConsumeComma ();
-
-    /* For the second argument, we use the standard function */
-    if (EvalEA (Ins, &A)) {
-
-        /* No error, output code */
-        Emit1 (A.Opcode, Arg1);
-
-        /* Check how many extension bytes are needed and output the instruction */
-        switch (ExtBytes[A.AddrMode]) {
-
-            case 1:
-                EmitByte (A.Expr);
-                break;
-
-            case 2:
-                EmitWord (A.Expr);
-                break;
-        }
-    }
-}
-
-
-
-static void PutJMP (const InsDesc* Ins)
-/* Handle the jump instruction for the 6502. Problem is that these chips have
-** a bug: If the address crosses a page, the upper byte gets not corrected and
-** the instruction will fail. The PutJmp function will add a linker assertion
-** to check for this case and is otherwise identical to PutAll.
-*/
-{
-    EffAddr A;
-
-    /* Evaluate the addressing mode used */
-    if (EvalEA (Ins, &A)) {
-
-        /* Check for indirect addressing */
-        if (A.AddrModeBit & AM65_ABS_IND) {
-
-            /* Compare the low byte of the expression to 0xFF to check for
-            ** a page cross. Be sure to use a copy of the expression otherwise
-            ** things will go weird later.
-            */
-            ExprNode* E = GenNE (GenByteExpr (CloneExpr (A.Expr)), 0xFF);
-
-            /* Generate the message */
-            unsigned Msg = GetStringId ("\"jmp (abs)\" across page border");
-
-            /* Generate the assertion */
-            AddAssertion (E, ASSERT_ACT_WARN, Msg);
-        }
-
-        /* No error, output code */
-        EmitCode (&A);
-    }
-}
-
-
-
-static void PutRTS (const InsDesc* Ins attribute ((unused)))
-/* Handle the RTS instruction for the 816. In smart mode emit a RTL opcode if
-** the enclosing scope is FAR.
-*/
-{
-    if (SmartMode && CurrentScope->AddrSize == ADDR_SIZE_FAR) {
-        Emit0 (0x6B);       /* RTL */
-    } else {
-        Emit0 (0x60);       /* RTS */
-    }
-}
-
-
-
-static void PutAll (const InsDesc* Ins)
-/* Handle all other instructions */
-{
-    EffAddr A;
-
-    /* Evaluate the addressing mode used */
-    if (EvalEA (Ins, &A)) {
-        /* No error, output code */
-        EmitCode (&A);
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                       Handler functions for SWEET16                       */
-/*****************************************************************************/
-
-
-
-static void PutSweet16 (const InsDesc* Ins)
-/* Handle a generic sweet16 instruction */
-{
-    EffAddr A;
-
-    /* Evaluate the addressing mode used */
-    GetSweet16EA (&A);
-
-    /* From the possible addressing modes, remove the ones that are invalid
-    ** for this instruction or CPU.
-    */
-    A.AddrModeSet &= Ins->AddrMode;
-
-    /* Check if we have any adressing modes left */
-    if (A.AddrModeSet == 0) {
-        Error ("Illegal addressing mode");
-        return;
-    }
-    A.AddrMode    = BitFind (A.AddrModeSet);
-    A.AddrModeBit = (0x01UL << A.AddrMode);
-
-    /* Build the opcode */
-    A.Opcode = Ins->BaseCode | Sweet16EATab[Ins->ExtCode][A.AddrMode] | A.Reg;
-
-    /* Check how many extension bytes are needed and output the instruction */
-    switch (Sweet16ExtBytes[A.AddrMode]) {
-
-        case 0:
-            Emit0 (A.Opcode);
-            break;
-
-        case 1:
-            Emit1 (A.Opcode, A.Expr);
-            break;
-
-        case 2:
-            Emit2 (A.Opcode, A.Expr);
-            break;
-
-        default:
-            Internal ("Invalid operand byte count: %u", Sweet16ExtBytes[A.AddrMode]);
-
-    }
-}
-
-
-
-static void PutSweet16Branch (const InsDesc* Ins)
-/* Handle a sweet16 branch instruction */
-{
-    EmitPCRel (Ins->BaseCode, GenBranchExpr (2), 1);
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static int CmpName (const void* Key, const void* Instr)
-/* Compare function for bsearch */
-{
-    return strcmp ((const char*)Key, ((const InsDesc*) Instr)->Mnemonic);
-}
-
-
-
-void SetCPU (cpu_t NewCPU)
-/* Set a new CPU */
-{
-    /* Make sure the parameter is correct */
-    CHECK (NewCPU < CPU_COUNT);
-
-    /* Check if we have support for the new CPU, if so, use it */
-    if (NewCPU != CPU_UNKNOWN && InsTabs[NewCPU]) {
-        CPU = NewCPU;
-        InsTab = InsTabs[CPU];
-    } else {
-        Error ("CPU not supported");
-    }
-}
-
-
-
-cpu_t GetCPU (void)
-/* Return the current CPU */
-{
-    return CPU;
-}
-
-
-
-int FindInstruction (const StrBuf* Ident)
-/* Check if Ident is a valid mnemonic. If so, return the index in the
-** instruction table. If not, return -1.
-*/
-{
-    unsigned I;
-    const InsDesc* ID;
-    char Key[sizeof (ID->Mnemonic)];
-
-    /* Shortcut for the "none" CPU: If there are no instructions to search
-    ** for, bail out early.
-    */
-    if (InsTab->Count == 0) {
-        /* Not found */
-        return -1;
-    }
-
-    /* Make a copy, and uppercase that copy */
-    I = 0;
-    while (I < SB_GetLen (Ident)) {
-        /* If the identifier is longer than the longest mnemonic, it cannot
-        ** be one.
-        */
-        if (I >= sizeof (Key) - 1) {
-            /* Not found, no need for further action */
-            return -1;
-        }
-        Key[I] = toupper ((unsigned char)SB_AtUnchecked (Ident, I));
-        ++I;
-    }
-    Key[I] = '\0';
-
-    /* Search for the key */
-    ID = bsearch (Key, InsTab->Ins, InsTab->Count, sizeof (InsDesc), CmpName);
-    if (ID == 0) {
-        /* Not found */
-        return -1;
-    } else {
-        /* Found, return the entry */
-        return ID - InsTab->Ins;
-    }
-}
-
-
-
-void HandleInstruction (unsigned Index)
-/* Handle the mnemonic with the given index */
-{
-    /* Safety check */
-    PRECONDITION (Index < InsTab->Count);
-
-    /* Skip the mnemonic token */
-    NextTok ();
-
-    /* Call the handler */
-    InsTab->Ins[Index].Emit (&InsTab->Ins[Index]);
-}
diff --git a/src/ca65/instr.h b/src/ca65/instr.h
deleted file mode 100644 (file)
index 1f2ce26..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  instr.h                                  */
-/*                                                                           */
-/*             Instruction encoding for the ca65 macroassembler              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef INSTR_H
-#define INSTR_H
-
-
-
-/* common */
-#include "cpu.h"
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                       Data for 6502 and successors                        */
-/*****************************************************************************/
-
-
-
-/* Constants for the addressing mode. If an opcode is available in zero page
-** and absolut adressing mode, both bits are set. When checking for valid
-** modes, the zeropage bit is checked first. Similar, the implicit bit is set
-** on accu adressing modes, so the 'A' for accu adressing is not needed (but
-** may be specified).
-** When assembling for the 6502 or 65C02, all addressing modes that are not
-** available on these CPUs are removed before doing any checks.
-*/
-#define AM65_IMPLICIT           0x00000003UL
-#define AM65_ACCU               0x00000002UL
-#define AM65_DIR                0x00000004UL
-#define AM65_ABS                0x00000008UL
-#define AM65_ABS_LONG           0x00000010UL
-#define AM65_DIR_X              0x00000020UL
-#define AM65_ABS_X              0x00000040UL
-#define AM65_ABS_LONG_X         0x00000080UL
-#define AM65_DIR_Y              0x00000100UL
-#define AM65_ABS_Y              0x00000200UL
-#define AM65_DIR_IND            0x00000400UL
-#define AM65_ABS_IND            0x00000800UL
-#define AM65_DIR_IND_LONG       0x00001000UL
-#define AM65_DIR_IND_Y          0x00002000UL
-#define AM65_DIR_IND_LONG_Y     0x00004000UL
-#define AM65_DIR_X_IND          0x00008000UL
-#define AM65_ABS_X_IND          0x00010000UL
-#define AM65_REL                0x00020000UL
-#define AM65_REL_LONG           0x00040000UL
-#define AM65_STACK_REL          0x00080000UL
-#define AM65_STACK_REL_IND_Y    0x00100000UL
-#define AM65_IMM_ACCU           0x00200000UL
-#define AM65_IMM_INDEX          0x00400000UL
-#define AM65_IMM_IMPLICIT       0x00800000UL
-#define AM65_BLOCKMOVE          0x01000000UL
-#define AM65_BLOCKXFER          0x02000000UL
-#define AM65_ABS_IND_LONG       0x04000000UL
-
-/* Bitmask for all ZP operations that have correspondent ABS ops */
-#define AM65_SET_ZP     (AM65_DIR | AM65_DIR_X | AM65_DIR_Y | AM65_DIR_IND | AM65_DIR_X_IND)
-
-/* Bitmask for all ABS operations that have correspondent FAR ops */
-#define AM65_SET_ABS    (AM65_ABS | AM65_ABS_X)
-
-/* Bitmask for all ZP operations */
-#define AM65_ALL_ZP     (AM65_DIR | AM65_DIR_X | AM65_DIR_Y | AM65_DIR_IND | AM65_DIR_X_IND)
-
-/* Bitmask for all ABS operations */
-#define AM65_ALL_ABS    (AM65_ABS | AM65_ABS_X | AM65_ABS_Y | AM65_ABS_IND | AM65_ABS_X_IND)
-
-/* Bitmask for all FAR operations */
-#define AM65_ALL_FAR    (AM65_ABS_LONG | AM65_ABS_LONG_X)
-                        
-/* Bitmask for all immediate operations */
-#define AM65_ALL_IMM    (AM65_IMM_ACCU | AM65_IMM_INDEX | AM65_IMM_IMPLICIT)
-
-/* Bit numbers and count */
-#define AM65I_IMM_ACCU          21
-#define AM65I_IMM_INDEX         22
-#define AM65I_IMM_IMPLICIT      23
-#define AM65I_COUNT             27
-
-
-
-/* Description for one instruction */
-typedef struct InsDesc InsDesc;
-struct InsDesc {
-    char                Mnemonic[5];
-    unsigned long       AddrMode;               /* Valid adressing modes */
-    unsigned char       BaseCode;               /* Base opcode */
-    unsigned char       ExtCode;                /* Number of ext code table */
-    void                (*Emit) (const InsDesc*);/* Handler function */
-};
-
-/* An instruction table */
-typedef struct InsTable InsTable;
-struct InsTable {
-    unsigned            Count;                  /* Number of intstructions */
-    InsDesc             Ins[1];                 /* Varying length */
-};
-
-/* The instruction table for the currently active CPU */
-extern const InsTable* InsTab;
-
-/* Table that encodes the additional bytes for each instruction */
-extern unsigned char ExtBytes[AM65I_COUNT];
-
-
-
-/*****************************************************************************/
-/*                      Data for the SWEET16 pseudo CPU                      */
-/*****************************************************************************/
-
-
-
-/* SWEET16 addressing modes */
-#define AMSW16_IMP      0x0001          /* Implicit */
-#define AMSW16_BRA      0x0002          /* A branch */
-#define AMSW16_IMM      0x0004          /* Immediate */
-#define AMSW16_IND      0x0008          /* Indirect */
-#define AMSW16_REG      0x0010          /* Register */
-
-#define AMSW16I_COUNT   5               /* Number of addressing modes */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void SetCPU (cpu_t NewCPU);
-/* Set a new CPU */
-
-cpu_t GetCPU (void);
-/* Return the current CPU */
-
-int FindInstruction (const StrBuf* Ident);
-/* Check if Ident is a valid mnemonic. If so, return the index in the
-** instruction table. If not, return -1.
-*/
-
-void HandleInstruction (unsigned Index);
-/* Handle the mnemonic with the given index */
-
-
-
-/* End of instr.h */
-
-#endif
diff --git a/src/ca65/istack.c b/src/ca65/istack.c
deleted file mode 100644 (file)
index 8cda7dd..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 istack.c                                  */
-/*                                                                           */
-/*                        Input stack for the scanner                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2003 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "check.h"
-#include "xmalloc.h"
-
-/* ca65 */
-#include "error.h"
-#include "istack.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Size of the stack (== maximum nested macro or repeat count) */
-#define ISTACK_MAX      256
-
-/* Structure holding a stack element */
-typedef struct IElement IElement;
-struct IElement {
-    IElement*   Next;           /* Next stack element */
-    int         (*Func)(void*); /* Function called for input */
-    void*       Data;           /* User data given as argument */
-    const char* Desc;           /* Description */
-};
-
-/* The stack */
-static IElement* IStack = 0;    /* Input stack pointer */
-static unsigned  ICount = 0;    /* Number of items on the stack */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void PushInput (int (*Func) (void*), void* Data, const char* Desc)
-/* Push an input function onto the input stack */
-{
-    IElement* E;
-
-    /* Check for a stack overflow */
-    if (ICount > ISTACK_MAX) {
-        Fatal ("Maximum input stack nesting exceeded");
-    }                                                
-
-    /* Create a new stack element */
-    E = xmalloc (sizeof (*E));
-
-    /* Initialize it */
-    E->Func = Func;
-    E->Data = Data;
-    E->Desc = Desc;
-
-    /* Push it */
-    E->Next = IStack;
-    IStack  = E;
-}
-
-
-
-void PopInput (void)
-/* Pop the current input function from the input stack */
-{
-    IElement* E;
-
-    /* We cannot pop from an empty stack */
-    PRECONDITION (IStack != 0);
-
-    /* Remember the last element */
-    E = IStack;
-
-    /* Pop it */
-    IStack = IStack->Next;
-
-    /* And delete it */
-    xfree (E);
-}
-
-
-
-int InputFromStack (void)
-/* Try to get input from the input stack. Return true if we had such input,
-** return false otherwise.
-*/
-{
-    /* Repeatedly call the TOS routine until we have a token or if run out of
-    ** routines.
-    */
-    while (IStack) {
-        if (IStack->Func (IStack->Data) != 0) {
-            /* We have a token */
-            return 1;
-        }
-    }
-
-    /* Nothing is on the stack */
-    return 0;
-}
-
-
-
-int HavePushedInput (void)
-/* Return true if we have stacked input available, return false if not */
-{
-    return (IStack != 0);
-}
-
-
-
-void CheckInputStack (void)
-/* Called from the scanner before closing an input file. Will check for any
-** stuff on the input stack.
-*/
-{
-    if (IStack) {
-        Error ("Open %s", IStack->Desc);
-    }
-}
diff --git a/src/ca65/istack.h b/src/ca65/istack.h
deleted file mode 100644 (file)
index aa37bab..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 istack.h                                  */
-/*                                                                           */
-/*                        Input stack for the scanner                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ISTACK_H
-#define ISTACK_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void PushInput (int (*Func) (void*), void* Data, const char* Desc);
-/* Push an input function onto the input stack */
-
-void PopInput (void);
-/* Pop the current input function from the input stack */
-
-int InputFromStack (void);
-/* Try to get input from the input stack. Return true if we had such input,
-** return false otherwise.
-*/
-
-int HavePushedInput (void);
-/* Return true if we have stacked input available, return false if not */
-
-void CheckInputStack (void);
-/* Called from the scanner before closing an input file. Will check for any
-** stuff on the input stack.
-*/
-
-
-
-/* End of istack.h */
-
-#endif
diff --git a/src/ca65/lineinfo.c b/src/ca65/lineinfo.c
deleted file mode 100644 (file)
index 92fecec..0000000
+++ /dev/null
@@ -1,503 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                lineinfo.c                                 */
-/*                                                                           */
-/*                      Source file line info structure                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                70794 Filderstadt                                          */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-
-/* common */
-#include "coll.h"
-#include "hashfunc.h"
-#include "xmalloc.h"
-
-/* ca65 */
-#include "filetab.h"
-#include "global.h"
-#include "lineinfo.h"
-#include "objfile.h"
-#include "scanner.h"
-#include "span.h"
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-static unsigned HT_GenHash (const void* Key);
-/* Generate the hash over a key. */
-
-static const void* HT_GetKey (const void* Entry);
-/* Given a pointer to the user entry data, return a pointer to the key */
-
-static int HT_Compare (const void* Key1, const void* Key2);
-/* Compare two keys. The function must return a value less than zero if
-** Key1 is smaller than Key2, zero if both are equal, and a value greater
-** than zero if Key1 is greater then Key2.
-*/
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Structure that holds the key for a line info */
-typedef struct LineInfoKey LineInfoKey;
-struct LineInfoKey {
-    FilePos         Pos;                /* File position */
-    unsigned        Type;               /* Type/count of line info */
-};
-
-/* Structure that holds line info */
-struct LineInfo {
-    HashNode        Node;               /* Hash table node */
-    unsigned        Id;                 /* Index */
-    LineInfoKey     Key;                /* Key for this line info */
-    unsigned        RefCount;           /* Reference counter */
-    Collection      Spans;              /* Segment spans for this line info */
-    Collection      OpenSpans;          /* List of currently open spans */
-};
-
-
-
-/* Collection containing all line infos */
-static Collection LineInfoList = STATIC_COLLECTION_INITIALIZER;
-
-/* Collection with currently active line infos */
-static Collection CurLineInfo = STATIC_COLLECTION_INITIALIZER;
-
-/* Hash table functions */
-static const HashFunctions HashFunc = {
-    HT_GenHash,
-    HT_GetKey,
-    HT_Compare
-};
-
-/* Line info hash table */
-static HashTable LineInfoTab = STATIC_HASHTABLE_INITIALIZER (1051, &HashFunc);
-
-/* The current assembler input line */
-static LineInfo* AsmLineInfo = 0;
-
-
-
-/*****************************************************************************/
-/*                           Hash table functions                            */
-/*****************************************************************************/
-
-
-
-static unsigned HT_GenHash (const void* Key)
-/* Generate the hash over a key. */
-{
-    /* Key is a LineInfoKey pointer */
-    const LineInfoKey* K = Key;
-
-    /* Hash over a combination of type, file and line */
-    return HashInt ((K->Type << 21) ^ (K->Pos.Name << 14) ^ K->Pos.Line);
-}
-
-
-
-static const void* HT_GetKey (const void* Entry)
-/* Given a pointer to the user entry data, return a pointer to the key */
-{
-    return &((const LineInfo*)Entry)->Key;
-}
-
-
-
-static int HT_Compare (const void* Key1, const void* Key2)
-/* Compare two keys. The function must return a value less than zero if
-** Key1 is smaller than Key2, zero if both are equal, and a value greater
-** than zero if Key1 is greater then Key2.
-*/
-{
-    /* Convert both parameters to FileInfoKey pointers */
-    const LineInfoKey* K1 = Key1;
-    const LineInfoKey* K2 = Key2;
-
-    /* Compare line number, then file and type */
-    int Res = (int)K2->Pos.Line - (int)K1->Pos.Line;
-    if (Res == 0) {
-        Res = (int)K2->Pos.Name - (int)K1->Pos.Name;
-        if (Res == 0) {
-            Res = (int)K2->Type - (int)K1->Type;
-        }
-    }
-
-    /* Done */
-    return Res;
-}
-
-
-
-/*****************************************************************************/
-/*                              struct LineInfo                              */
-/*****************************************************************************/
-
-
-
-static LineInfo* NewLineInfo (const LineInfoKey* Key)
-/* Create and return a new line info. Usage will be zero. */
-{
-    /* Allocate memory */
-    LineInfo* LI = xmalloc (sizeof (LineInfo));
-
-    /* Initialize the fields */
-    InitHashNode (&LI->Node);
-    LI->Id        = ~0U;
-    LI->Key       = *Key;
-    LI->RefCount  = 0;
-    InitCollection (&LI->Spans);
-    InitCollection (&LI->OpenSpans);
-
-    /* Add it to the hash table, so we will find it if necessary */
-    HT_Insert (&LineInfoTab, LI);
-
-    /* Return the new struct */
-    return LI;
-}
-
-
-
-static void FreeLineInfo (LineInfo* LI)
-/* Free a LineInfo structure */
-{
-    /* Free the Spans collection. It is supposed to be empty */
-    CHECK (CollCount (&LI->Spans) == 0);
-    DoneCollection (&LI->Spans);
-    DoneCollection (&LI->OpenSpans);
-
-    /* Free the structure itself */
-    xfree (LI);
-}
-
-
-
-static int CheckLineInfo (void* Entry, void* Data attribute ((unused)))
-/* Called from HT_Walk. Remembers used line infos and assigns them an id */
-{
-    /* Entry is actually a line info */
-    LineInfo* LI = Entry;
-
-    /* The entry is used if there are spans or the ref counter is non zero */
-    if (LI->RefCount > 0 || CollCount (&LI->Spans) > 0) {
-        LI->Id = CollCount (&LineInfoList);
-        CollAppend (&LineInfoList, LI);
-        return 0;       /* Keep the entry */
-    } else {
-        FreeLineInfo (LI);
-        return 1;       /* Remove entry from table */
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-#if 0
-static void DumpLineInfos (const char* Title, const Collection* C)
-/* Dump line infos from the given collection */
-{
-    unsigned I;
-    fprintf (stderr, "%s:\n", Title);
-    for (I = 0; I < CollCount (C); ++I) {
-        const LineInfo* LI = CollConstAt (C, I);
-        const char* Type;
-        switch (GetLineInfoType (LI)) {
-            case LI_TYPE_ASM:           Type = "ASM";           break;
-            case LI_TYPE_EXT:           Type = "EXT";           break;
-            case LI_TYPE_MACRO:         Type = "MACRO";         break;
-            case LI_TYPE_MACPARAM:      Type = "MACPARAM";      break;
-            default:                    Type = "unknown";       break;
-        }
-        fprintf (stderr,
-                 "%2u: %-8s %2u %-16s %u/%u\n",
-                 I, Type, LI->Key.Pos.Name,
-                 SB_GetConstBuf (GetFileName (LI->Key.Pos.Name)),
-                 LI->Key.Pos.Line, LI->Key.Pos.Col);
-    }
-}
-#endif
-
-
-
-void InitLineInfo (void)
-/* Initialize the line infos */
-{
-    static const FilePos DefaultPos = STATIC_FILEPOS_INITIALIZER;
-
-    /* Increase the initial count of the line info collection */
-    CollGrow (&LineInfoList, 200);
-
-    /* Create a LineInfo for the default source. This is necessary to allow
-    ** error message to be generated without any input file open.
-    */
-    AsmLineInfo = StartLine (&DefaultPos, LI_TYPE_ASM, 0);
-}
-
-
-
-void DoneLineInfo (void)
-/* Close down line infos */
-{
-    /* Close all current line infos */
-    unsigned Count = CollCount (&CurLineInfo);
-    while (Count) {
-        EndLine (CollAt (&CurLineInfo, --Count));
-    }
-
-    /* Walk over the entries in the hash table and sort them into used and
-    ** unused ones. Add the used ones to the line info list and assign them
-    ** an id.
-    */
-    HT_Walk (&LineInfoTab, CheckLineInfo, 0);
-}
-
-
-
-void EndLine (LineInfo* LI)
-/* End a line that is tracked by the given LineInfo structure */
-{
-    /* Close the spans for the line */
-    CloseSpanList (&LI->OpenSpans);
-
-    /* Move the spans to the list of all spans for this line, then clear the
-    ** list of open spans.
-    */
-    CollTransfer (&LI->Spans, &LI->OpenSpans);
-    CollDeleteAll (&LI->OpenSpans);
-
-    /* Line info is no longer active - remove it from the list of current
-    ** line infos.
-    */
-    CollDeleteItem (&CurLineInfo, LI);
-}
-
-
-
-LineInfo* StartLine (const FilePos* Pos, unsigned Type, unsigned Count)
-/* Start line info for a new line */
-{
-    LineInfoKey Key;
-    LineInfo* LI;
-
-    /* Prepare the key struct */
-    Key.Pos   = *Pos;
-    Key.Type  = LI_MAKE_TYPE (Type, Count);
-
-    /* Try to find a line info with this position and type in the hash table.
-    ** If so, reuse it. Otherwise create a new one.
-    */
-    LI = HT_Find (&LineInfoTab, &Key);
-    if (LI == 0) {
-        /* Allocate a new LineInfo */
-        LI = NewLineInfo (&Key);
-    }
-
-    /* Open the spans for this line info */
-    OpenSpanList (&LI->OpenSpans);
-
-    /* Add the line info to the list of current line infos */
-    CollAppend (&CurLineInfo, LI);
-
-    /* Return the new info */
-    return LI;
-}
-
-
-
-void NewAsmLine (void)
-/* Start a new assembler input line. Use this function when generating new
-** line of LI_TYPE_ASM. It will check if line and/or file have actually
-** changed, end the old and start the new line as necessary.
-*/
-{
-    /* Check if we can reuse the old line */
-    if (AsmLineInfo) {
-        if (AsmLineInfo->Key.Pos.Line == CurTok.Pos.Line &&
-            AsmLineInfo->Key.Pos.Name == CurTok.Pos.Name) {
-            /* We do already have line info for this line */
-            return;
-        }
-
-        /* Line has changed -> end the old line */
-        EndLine (AsmLineInfo);
-    }
-
-    /* Start a new line using the current line info */
-    AsmLineInfo = StartLine (&CurTok.Pos, LI_TYPE_ASM, 0);
-}
-
-
-
-LineInfo* GetAsmLineInfo (void)
-/* Return the line info for the current assembler file. The function will
-** bump the reference counter before returning the line info.
-*/
-{
-    ++AsmLineInfo->RefCount;
-    return AsmLineInfo;
-}
-
-
-
-void ReleaseLineInfo (LineInfo* LI)
-/* Decrease the reference count for a line info */
-{
-    /* Decrease the reference counter */
-    CHECK (LI->RefCount > 0);
-    ++LI->RefCount;
-}
-
-
-
-void GetFullLineInfo (Collection* LineInfos)
-/* Return full line infos, that is line infos for currently active Slots. The
-** infos will be added to the given collection, existing entries will be left
-** intact. The reference count of all added entries will be increased.
-*/
-{
-    unsigned I;
-
-    /* Bum the reference counter for all active line infos */
-    for (I = 0; I < CollCount (&CurLineInfo); ++I) {
-        ++((LineInfo*)CollAt (&CurLineInfo, I))->RefCount;
-    }
-
-    /* Copy all line infos over */
-    CollTransfer (LineInfos, &CurLineInfo);
-}
-
-
-
-void ReleaseFullLineInfo (Collection* LineInfos)
-/* Decrease the reference count for a collection full of LineInfos, then clear
-** the collection.
-*/
-{
-    unsigned I;
-
-    /* Walk over all entries */
-    for (I = 0; I < CollCount (LineInfos); ++I) {
-        /* Release the the line info */
-        ReleaseLineInfo (CollAt (LineInfos, I));
-    }
-
-    /* Delete all entries */
-    CollDeleteAll (LineInfos);
-}
-
-
-
-const FilePos* GetSourcePos (const LineInfo* LI)
-/* Return the source file position from the given line info */
-{
-    return &LI->Key.Pos;
-}
-
-
-
-unsigned GetLineInfoType (const LineInfo* LI)
-/* Return the type of a line info */
-{
-    return LI_GET_TYPE (LI->Key.Type);
-}
-
-
-
-void WriteLineInfo (const Collection* LineInfos)
-/* Write a list of line infos to the object file. */
-{
-    unsigned I;
-
-    /* Write the count */
-    ObjWriteVar (CollCount (LineInfos));
-
-    /* Write the line info indices */
-    for (I = 0; I < CollCount (LineInfos); ++I) {
-
-        /* Get a pointer to the line info */
-        const LineInfo* LI = CollConstAt (LineInfos, I);
-
-        /* Safety */
-        CHECK (LI->Id != ~0U);
-
-        /* Write the index to the file */
-        ObjWriteVar (LI->Id);
-    }
-}
-
-
-
-void WriteLineInfos (void)
-/* Write a list of all line infos to the object file. */
-{
-    unsigned I;
-
-    /* Tell the object file module that we're about to write line infos */
-    ObjStartLineInfos ();
-
-    /* Write the line info count to the list */
-    ObjWriteVar (CollCount (&LineInfoList));
-
-    /* Walk over the list and write all line infos */
-    for (I = 0; I < CollCount (&LineInfoList); ++I) {
-
-        /* Get a pointer to this line info */
-        LineInfo* LI = CollAt (&LineInfoList, I);
-
-        /* Write the source file position */
-        ObjWritePos (&LI->Key.Pos);
-
-        /* Write the type and count of the line info */
-        ObjWriteVar (LI->Key.Type);
-
-        /* Write the ids of the spans for this line */
-        WriteSpanList (&LI->Spans);
-    }
-
-    /* End of line infos */
-    ObjEndLineInfos ();
-}
diff --git a/src/ca65/lineinfo.h b/src/ca65/lineinfo.h
deleted file mode 100644 (file)
index c5cf495..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                lineinfo.h                                 */
-/*                                                                           */
-/*                     Source file line info management                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                70794 Filderstadt                                          */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef LINEINFO_H
-#define LINEINFO_H
-
-
-
-/* common */
-#include "coll.h"
-#include "filepos.h"
-#include "hashtab.h"
-#include "lidefs.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Opaque structure used to handle line information */
-typedef struct LineInfo LineInfo;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void InitLineInfo (void);
-/* Initialize the line infos */
-
-void DoneLineInfo (void);
-/* Close down line infos */
-
-void EndLine (LineInfo* LI);
-/* End a line that is tracked by the given LineInfo structure */
-
-LineInfo* StartLine (const FilePos* Pos, unsigned Type, unsigned Count);
-/* Start line info for a new line */
-
-void NewAsmLine (void);
-/* Start a new assembler input line. Use this function when generating new
-** line of LI_TYPE_ASM. It will check if line and/or file have actually
-** changed, end the old and start the new line as necessary.
-*/
-
-LineInfo* GetAsmLineInfo (void);
-/* Return the line info for the current assembler file. The function will
-** bump the reference counter before returning the line info.
-*/
-
-void ReleaseLineInfo (LineInfo* LI);
-/* Decrease the reference count for a line info */
-
-void GetFullLineInfo (Collection* LineInfos);
-/* Return full line infos, that is line infos for currently active Slots. The
-** infos will be added to the given collection, existing entries will be left
-** intact. The reference count of all added entries will be increased.
-*/
-
-void ReleaseFullLineInfo (Collection* LineInfos);
-/* Decrease the reference count for a collection full of LineInfos, then clear
-** the collection.
-*/
-
-const FilePos* GetSourcePos (const LineInfo* LI);
-/* Return the source file position from the given line info */
-
-unsigned GetLineInfoType (const LineInfo* LI);
-/* Return the type of a line info */
-
-void WriteLineInfo (const Collection* LineInfos);
-/* Write a list of line infos to the object file. */
-
-void WriteLineInfos (void);
-/* Write a list of all line infos to the object file. */
-
-
-
-/* End of lineinfo.h */
-
-#endif
diff --git a/src/ca65/listing.c b/src/ca65/listing.c
deleted file mode 100644 (file)
index b3f3d92..0000000
+++ /dev/null
@@ -1,454 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 listing.c                                 */
-/*                                                                           */
-/*                Listing support for the ca65 crossassembler                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "check.h"
-#include "fname.h"
-#include "fragdefs.h"
-#include "strbuf.h"
-#include "version.h"
-#include "xmalloc.h"
-
-/* ca65 */
-#include "error.h"
-#include "filetab.h"
-#include "global.h"
-#include "listing.h"
-#include "segment.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Single linked list of lines */
-ListLine*       LineList = 0;           /* List of listing lines */
-ListLine*       LineCur  = 0;           /* Current listing line */
-ListLine*       LineLast = 0;           /* Last (current) listing line */
-
-/* Page and other formatting */
-int             PageLength = -1;        /* Length of a listing page */
-static unsigned PageNumber = 1;         /* Current listing page number */
-static int      PageLines  = 0;         /* Current line on page */
-static unsigned ListBytes  = 12;        /* Number of bytes to list for one line */
-
-/* Switch the listing on/off */
-static int      ListingEnabled = 1;     /* Enabled if > 0 */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void NewListingLine (const StrBuf* Line, unsigned char File, unsigned char Depth)
-/* Create a new ListLine struct and insert it */
-{
-    /* Store only if listing is enabled */
-    if (SB_GetLen (&ListingName) > 0) {
-
-        ListLine* L;
-
-        /* Get the length of the line */
-        unsigned Len = SB_GetLen (Line);
-
-        /* Ignore trailing newlines */
-        while (Len > 0 && SB_AtUnchecked (Line, Len-1) == '\n') {
-            --Len;
-        }
-
-        /* Allocate memory */
-        L = xmalloc (sizeof (ListLine) + Len);
-
-        /* Initialize the fields. */
-        L->Next         = 0;
-        L->FragList     = 0;
-        L->FragLast     = 0;
-        L->PC           = GetPC ();
-        L->Reloc        = GetRelocMode ();
-        L->File         = File;
-        L->Depth        = Depth;
-        L->Output       = (ListingEnabled > 0);
-        L->ListBytes    = (unsigned char) ListBytes;
-        memcpy (L->Line, SB_GetConstBuf (Line), Len);
-        L->Line[Len] = '\0';
-
-        /* Insert the line into the list of lines */
-        if (LineList == 0) {
-            LineList = L;
-        } else {
-            LineLast->Next = L;
-        }
-        LineLast = L;
-    }
-}
-
-
-
-void EnableListing (void)
-/* Enable output of lines to the listing */
-{
-    if (SB_GetLen (&ListingName) > 0) {
-        /* If we're about to enable the listing, do this for the current line
-        ** also, so we will see the source line that did this.
-        */
-        if (ListingEnabled++ == 0) {
-            LineCur->Output = 1;
-        }
-    }
-}
-
-
-
-void DisableListing (void)
-/* Disable output of lines to the listing */
-{
-    if (SB_GetLen (&ListingName) > 0) {
-        if (ListingEnabled == 0) {
-            /* Cannot switch the listing off once more */
-            Error ("Counter underflow");
-        } else {
-            --ListingEnabled;
-        }
-    }
-}
-
-
-
-void SetListBytes (int Bytes)
-/* Set the maximum number of bytes listed for one line */
-{
-    if (Bytes < 0) {
-        Bytes = 0;      /* Encode "unlimited" as zero */
-    }
-    ListBytes = Bytes;
-}
-
-
-
-void InitListingLine (void)
-/* Initialize the current listing line */
-{
-    if (SB_GetLen (&ListingName) > 0) {
-        /* Make the last loaded line the current line */
-        /* ###### This code is a hack! We really need to do it right --
-        ** as soon as we know how. :-(
-        */
-        if (LineCur && LineCur->Next && LineCur->Next != LineLast) {
-            ListLine* L = LineCur;
-            do {
-                L = L->Next;
-                /* Set the values for this line */
-                CHECK (L != 0);
-                L->PC            = GetPC ();
-                L->Reloc         = GetRelocMode ();
-                L->Output        = (ListingEnabled > 0);
-                L->ListBytes = (unsigned char) ListBytes;
-            } while (L->Next != LineLast);
-        }
-        LineCur = LineLast;
-
-        /* Set the values for this line */
-        CHECK (LineCur != 0);
-        LineCur->PC         = GetPC ();
-        LineCur->Reloc      = GetRelocMode ();
-        LineCur->Output     = (ListingEnabled > 0);
-        LineCur->ListBytes  = (unsigned char) ListBytes;
-    }
-}
-
-
-
-static char* AddHex (char* S, unsigned Val)
-/* Add a hex byte in ASCII to the given string and return the new pointer */
-{
-    static const char HexTab [16] = {
-        '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
-    };
-
-    *S++ = HexTab [(Val >> 4) & 0x0F];
-    *S++ = HexTab [Val & 0x0F];
-
-    return S;
-}
-
-
-
-static void PrintPageHeader (FILE* F, const ListLine* L)
-/* Print the header for a new page. It is assumed that the given line is the
-** last line of the previous page.
-*/
-{
-    /* Gte a pointer to the current input file */
-    const StrBuf* CurFile = GetFileName (L->File);
-
-    /* Print the header on the new page */
-    fprintf (F,
-             "ca65 V%s\n"
-             "Main file   : %s\n"
-             "Current file: %.*s\n"
-             "\n",
-             GetVersionAsString (),
-             InFile,
-             (int) SB_GetLen (CurFile), SB_GetConstBuf (CurFile));
-
-    /* Count pages, reset lines */
-    ++PageNumber;
-    PageLines = 4;
-}
-
-
-
-static void PrintLine (FILE* F, const char* Header, const char* Line, const ListLine* L)
-/* Print one line to the listing file, adding a newline and counting lines */
-{
-    /* Print the given line */
-    fprintf (F, "%s%s\n", Header, Line);
-
-    /* Increment the current line */
-    ++PageLines;
-
-    /* Switch to a new page if needed. Do not switch, if the current line is
-    ** the last one, to avoid pages that consist of just the header.
-    */
-    if (PageLength > 0 && PageLines >= PageLength && L->Next != 0) {
-        /* Do a formfeed */
-        putc ('\f', F);
-        /* Print the header on the new page */
-        PrintPageHeader (F, L);
-    }
-}
-
-
-
-static char* AddMult (char* S, char C, unsigned Count)
-/* Add multiple instances of character C to S, return updated S. */
-{
-    memset (S, C, Count);
-    return S + Count;
-}
-
-
-
-static char* MakeLineHeader (char* H, const ListLine* L)
-/* Prepare the line header */
-{
-    char Mode;
-    char Depth;
-
-    /* Setup the PC mode */
-    Mode = (L->Reloc)? 'r' : ' ';
-
-    /* Set up the include depth */
-    Depth = (L->Depth < 10)? L->Depth + '0' : '+';
-
-    /* Format the line */
-    sprintf (H, "%06lX%c %c", L->PC, Mode, Depth);
-    memset (H+9, ' ', LINE_HEADER_LEN-9);
-
-    /* Return the buffer */
-    return H;
-}
-
-
-
-void CreateListing (void)
-/* Create the listing */
-{
-    FILE* F;
-    Fragment* Frag;
-    ListLine* L;
-    char HeaderBuf [LINE_HEADER_LEN+1];
-
-    /* Open the real listing file */
-    F = fopen (SB_GetConstBuf (&ListingName), "w");
-    if (F == 0) {
-        Fatal ("Cannot open listing file `%s': %s",
-               SB_GetConstBuf (&ListingName),
-               strerror (errno));
-    }
-
-    /* Reset variables, print the header for the first page */
-    PageNumber = 0;
-    PrintPageHeader (F, LineList);
-
-    /* Terminate the header buffer. The last byte will never get overwritten */
-    HeaderBuf [LINE_HEADER_LEN] = '\0';
-
-    /* Walk through all listing lines */
-    L = LineList;
-    while (L) {
-
-        char* Buf;
-        char* B;
-        unsigned Count;
-        unsigned I;
-        char* Line;
-
-        /* If we should not output this line, go to the next */
-        if (L->Output == 0) {
-            L = L->Next;
-            continue;
-        }
-
-        /* If we don't have a fragment list for this line, things are easy */
-        if (L->FragList == 0) {
-            PrintLine (F, MakeLineHeader (HeaderBuf, L), L->Line, L);
-            L = L->Next;
-            continue;
-        }
-
-        /* Count the number of bytes in the complete fragment list */
-        Count = 0;
-        Frag = L->FragList;
-        while (Frag) {
-            Count += Frag->Len;
-            Frag = Frag->LineList;
-        }
-
-        /* Allocate memory for the given number of bytes */
-        Buf = xmalloc (Count*2+1);
-
-        /* Copy an ASCII representation of the bytes into the buffer */
-        B = Buf;
-        Frag = L->FragList;
-        while (Frag) {
-
-            /* Write data depending on the type */
-            switch (Frag->Type) {
-
-                case FRAG_LITERAL:
-                    for (I = 0; I < Frag->Len; ++I) {
-                        B = AddHex (B, Frag->V.Data[I]);
-                    }
-                    break;
-
-                case FRAG_EXPR:
-                case FRAG_SEXPR:
-                    B = AddMult (B, 'r', Frag->Len*2);
-                    break;
-
-                case FRAG_FILL:
-                    B = AddMult (B, 'x', Frag->Len*2);
-                    break;
-
-                default:
-                    Internal ("Invalid fragment type: %u", Frag->Type);
-
-            }
-
-            /* Next fragment */
-            Frag = Frag->LineList;
-
-        }
-
-        /* Limit the number of bytes actually printed */
-        if (L->ListBytes != 0) {
-            /* Not unlimited */
-            if (Count > L->ListBytes) {
-                Count = L->ListBytes;
-            }
-        }
-
-        /* Output the data. The format of a listing line is:
-        **
-        **      PPPPPPm I  11 22 33 44
-        **
-        ** where
-        **
-        **      PPPPPP  is the PC
-        **      m       is the mode ('r' or empty)
-        **      I       is the include level
-        **      11 ..   are code or data bytes
-        */
-        Line = L->Line;
-        B    = Buf;
-        while (Count) {
-
-            unsigned    Chunk;
-            char*       P;
-
-            /* Prepare the line header */
-            MakeLineHeader (HeaderBuf, L);
-
-            /* Get the number of bytes for the next line */
-            Chunk = Count;
-            if (Chunk > 4) {
-                Chunk = 4;
-            }
-            Count -= Chunk;
-
-            /* Increment the program counter. Since we don't need the PC stored
-            ** in the LineList object for anything else, just increment this
-            ** variable.
-            */
-            L->PC += Chunk;
-
-            /* Copy the bytes into the line */
-            P = HeaderBuf + 11;
-            for (I = 0; I < Chunk; ++I) {
-                *P++ = *B++;
-                *P++ = *B++;
-                *P++ = ' ';
-            }
-
-            /* Output this line */
-            PrintLine (F, HeaderBuf, Line, L);
-
-            /* Don't output a line twice */
-            Line = "";
-
-        }
-
-        /* Delete the temporary buffer */
-        xfree (Buf);
-
-        /* Next line */
-        L = L->Next;
-
-    }
-
-    /* Close the listing file */
-    (void) fclose (F);
-}
diff --git a/src/ca65/listing.h b/src/ca65/listing.h
deleted file mode 100644 (file)
index b1ae442..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 listing.h                                 */
-/*                                                                           */
-/*                Listing support for the ca65 crossassembler                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef LISTING_H
-#define LISTING_H
-
-
-
-/* ca65 */
-#include "fragment.h"
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-struct StrBuf;
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Length of the header of a listing line */
-#define LINE_HEADER_LEN         24
-
-/* One listing line as it is stored in memory */
-typedef struct ListLine ListLine;
-struct ListLine {
-    ListLine*           Next;           /* Pointer to next line */
-    Fragment*           FragList;       /* List of fragments for this line */
-    Fragment*           FragLast;       /* Last entry in fragment list */
-    unsigned long       PC;             /* Program counter for this line */
-    unsigned char       Reloc;          /* Relocatable mode? */
-    unsigned char       File;           /* From which file is the line? */
-    unsigned char       Depth;          /* Include depth */
-    unsigned char       Output;         /* Should we output this line? */
-    unsigned char       ListBytes;      /* How many bytes at max? */
-    char                Line[1];        /* Line with dynamic length */
-};
-
-/* Single linked list of lines */
-extern ListLine*        LineList;       /* List of listing lines */
-extern ListLine*        LineCur;        /* Current listing line */
-extern ListLine*        LineLast;       /* Last listing line */
-
-/* Page formatting */
-#define MIN_PAGE_LEN    32
-#define MAX_PAGE_LEN    127
-extern int              PageLength;     /* Length of a listing page */
-
-/* Byte for one listing line */
-#define MIN_LIST_BYTES  4
-#define MAX_LIST_BYTES  255
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void NewListingLine (const struct StrBuf* Line, unsigned char File,
-                     unsigned char Depth);
-/* Create a new ListLine struct */
-
-void EnableListing (void);
-/* Enable output of lines to the listing */
-
-void DisableListing (void);
-/* Disable output of lines to the listing */
-
-void SetListBytes (int Bytes);
-/* Set the maximum number of bytes listed for one line */
-
-void InitListingLine (void);
-/* Initialize the current listing line */
-
-void CreateListing (void);
-/* Create the listing */
-
-
-
-/* End of listing.h */
-
-#endif
diff --git a/src/ca65/macro.c b/src/ca65/macro.c
deleted file mode 100644 (file)
index 634f210..0000000
+++ /dev/null
@@ -1,1051 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  macro.c                                  */
-/*                                                                           */
-/*                    Macros for the ca65 macroassembler                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-
-/* common */
-#include "check.h"
-#include "hashfunc.h"
-#include "hashtab.h"
-#include "xmalloc.h"
-
-/* ca65 */
-#include "condasm.h"
-#include "error.h"
-#include "global.h"
-#include "instr.h"
-#include "istack.h"
-#include "lineinfo.h"
-#include "nexttok.h"
-#include "pseudo.h"
-#include "toklist.h"
-#include "macro.h"
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-static unsigned HT_GenHash (const void* Key);
-/* Generate the hash over a key. */
-
-static const void* HT_GetKey (const void* Entry);
-/* Given a pointer to the user entry data, return a pointer to the key */
-
-static int HT_Compare (const void* Key1, const void* Key2);
-/* Compare two keys. The function must return a value less than zero if
-** Key1 is smaller than Key2, zero if both are equal, and a value greater
-** than zero if Key1 is greater then Key2.
-*/
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Struct that describes an identifer (macro param, local list) */
-typedef struct IdDesc IdDesc;
-struct IdDesc {
-    IdDesc*         Next;       /* Linked list */
-    StrBuf          Id;         /* Identifier, dynamically allocated */
-};
-
-
-
-/* Struct that describes a macro definition */
-struct Macro {
-    HashNode        Node;       /* Hash list node */
-    Macro*          List;       /* List of all macros */
-    unsigned        LocalCount; /* Count of local symbols */
-    IdDesc*         Locals;     /* List of local symbols */
-    unsigned        ParamCount; /* Parameter count of macro */
-    IdDesc*         Params;     /* Identifiers of macro parameters */
-    unsigned        TokCount;   /* Number of tokens for this macro */
-    TokNode*        TokRoot;    /* Root of token list */
-    TokNode*        TokLast;    /* Pointer to last token in list */
-    StrBuf          Name;       /* Macro name, dynamically allocated */
-    unsigned        Expansions; /* Number of active macro expansions */
-    unsigned char   Style;      /* Macro style */
-    unsigned char   Incomplete; /* Macro is currently built */
-};
-
-/* Hash table functions */
-static const HashFunctions HashFunc = {
-    HT_GenHash,
-    HT_GetKey,
-    HT_Compare
-};
-
-/* Macro hash table */
-static HashTable MacroTab = STATIC_HASHTABLE_INITIALIZER (117, &HashFunc);
-
-/* Structs that holds data for a macro expansion */
-typedef struct MacExp MacExp;
-struct MacExp {
-    MacExp*     Next;           /* Pointer to next expansion */
-    Macro*      M;              /* Which macro do we expand? */
-    unsigned    IfSP;           /* .IF stack pointer at start of expansion */
-    TokNode*    Exp;            /* Pointer to current token */
-    TokNode*    Final;          /* Pointer to final token */
-    unsigned    MacExpansions;  /* Number of active macro expansions */
-    unsigned    LocalStart;     /* Start of counter for local symbol names */
-    unsigned    ParamCount;     /* Number of actual parameters */
-    TokNode**   Params;         /* List of actual parameters */
-    TokNode*    ParamExp;       /* Node for expanding parameters */
-    LineInfo*   LI;             /* Line info for the expansion */
-    LineInfo*   ParamLI;        /* Line info for parameter expansion */
-};
-
-/* Maximum number of nested macro expansions */
-#define MAX_MACEXPANSIONS       256U
-
-/* Number of active macro expansions */
-static unsigned MacExpansions = 0;
-
-/* Flag if a macro expansion should get aborted */
-static int DoMacAbort = 0;
-
-/* Counter to create local names for symbols */
-static unsigned LocalName = 0;
-
-/* Define style macros disabled if != 0 */
-static unsigned DisableDefines = 0;
-
-
-
-/*****************************************************************************/
-/*                           Hash table functions                            */
-/*****************************************************************************/
-
-
-
-static unsigned HT_GenHash (const void* Key)
-/* Generate the hash over a key. */
-{
-    return HashBuf (Key);
-}
-
-
-
-static const void* HT_GetKey (const void* Entry)
-/* Given a pointer to the user entry data, return a pointer to the index */
-{
-    return &((Macro*) Entry)->Name;
-}
-
-
-
-static int HT_Compare (const void* Key1, const void* Key2)
-/* Compare two keys. The function must return a value less than zero if
-** Key1 is smaller than Key2, zero if both are equal, and a value greater
-** than zero if Key1 is greater then Key2.
-*/
-{
-    return SB_Compare (Key1, Key2);
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static IdDesc* NewIdDesc (const StrBuf* Id)
-/* Create a new IdDesc, initialize and return it */
-{
-    /* Allocate memory */
-    IdDesc* ID = xmalloc (sizeof (IdDesc));
-
-    /* Initialize the struct */
-    ID->Next = 0;
-    SB_Init (&ID->Id);
-    SB_Copy (&ID->Id, Id);
-
-    /* Return the new struct */
-    return ID;
-}
-
-
-
-static void FreeIdDesc (IdDesc* ID)
-/* Free an IdDesc */
-{
-    /* Free the name */
-    SB_Done (&ID->Id);
-
-    /* Free the structure itself */
-    xfree (ID);
-}
-
-
-
-static void FreeIdDescList (IdDesc* ID)
-/* Free a complete list of IdDesc structures */
-{
-    while (ID) {
-        IdDesc* This = ID;
-        ID = ID->Next;
-        FreeIdDesc (This);
-    }
-}
-
-
-
-static Macro* NewMacro (const StrBuf* Name, unsigned char Style)
-/* Generate a new macro entry, initialize and return it */
-{
-    /* Allocate memory */
-    Macro* M = xmalloc (sizeof (Macro));
-
-    /* Initialize the macro struct */
-    InitHashNode (&M->Node);
-    M->LocalCount = 0;
-    M->Locals     = 0;
-    M->ParamCount = 0;
-    M->Params     = 0;
-    M->TokCount   = 0;
-    M->TokRoot    = 0;
-    M->TokLast    = 0;
-    SB_Init (&M->Name);
-    SB_Copy (&M->Name, Name);
-    M->Expansions = 0;
-    M->Style      = Style;
-    M->Incomplete = 1;
-
-    /* Insert the macro into the hash table */
-    HT_Insert (&MacroTab, &M->Node);
-
-    /* Return the new macro struct */
-    return M;
-}
-
-
-
-static void FreeMacro (Macro* M)
-/* Free a macro entry which has already been removed from the macro table. */
-{
-    TokNode* T;
-
-    /* Free locals */
-    FreeIdDescList (M->Locals);
-
-    /* Free identifiers of parameters */
-    FreeIdDescList (M->Params);
-
-    /* Free the token list for the macro */
-    while ((T = M->TokRoot) != 0) {
-        M->TokRoot = T->Next;
-        FreeTokNode (T);
-    }
-
-    /* Free the macro name */
-    SB_Done (&M->Name);
-
-    /* Free the macro structure itself */
-    xfree (M);
-}
-
-
-
-static MacExp* NewMacExp (Macro* M)
-/* Create a new expansion structure for the given macro */
-{
-    unsigned I;
-
-    /* Allocate memory */
-    MacExp* E = xmalloc (sizeof (MacExp));
-
-    /* Initialize the data */
-    E->M                = M;
-    E->IfSP             = GetIfStack ();
-    E->Exp              = M->TokRoot;
-    E->Final            = 0;
-    E->MacExpansions    = ++MacExpansions;      /* One macro expansion more */
-    E->LocalStart       = LocalName;
-    LocalName          += M->LocalCount;
-    E->ParamCount       = 0;
-    E->Params           = xmalloc (M->ParamCount * sizeof (TokNode*));
-    for (I = 0; I < M->ParamCount; ++I) {
-        E->Params[I] = 0;
-    }
-    E->ParamExp         = 0;
-    E->LI               = 0;
-    E->ParamLI          = 0;
-
-    /* Mark the macro as expanding */
-    ++M->Expansions;
-
-    /* Return the new macro expansion */
-    return E;
-}
-
-
-
-static void FreeMacExp (MacExp* E)
-/* Remove and free the current macro expansion */
-{
-    unsigned I;
-
-    /* One macro expansion less */
-    --MacExpansions;
-
-    /* No longer expanding this macro */
-    --E->M->Expansions;
-
-    /* Free the parameter lists */
-    for (I = 0; I < E->ParamCount; ++I) {
-        /* Free one parameter list */
-        TokNode* N = E->Params[I];
-        while (N) {
-            TokNode* P = N->Next;
-            FreeTokNode (N);
-            N = P;
-        }
-    }
-    xfree (E->Params);
-
-    /* Free the additional line info */
-    if (E->ParamLI) {
-        EndLine (E->ParamLI);
-    }
-    if (E->LI) {
-        EndLine (E->LI);
-    }
-
-    /* Free the final token if we have one */
-    if (E->Final) {
-        FreeTokNode (E->Final);
-    }
-
-    /* Free the structure itself */
-    xfree (E);
-}
-
-
-
-static void MacSkipDef (unsigned Style)
-/* Skip a macro definition */
-{
-    if (Style == MAC_STYLE_CLASSIC) {
-        /* Skip tokens until we reach the final .endmacro */
-        while (CurTok.Tok != TOK_ENDMACRO && CurTok.Tok != TOK_EOF) {
-            NextTok ();
-        }
-        if (CurTok.Tok != TOK_EOF) {
-            SkipUntilSep ();
-        } else {
-            Error ("`.ENDMACRO' expected");
-        }
-    } else {
-        /* Skip until end of line */
-        SkipUntilSep ();
-    }
-}
-
-
-
-void MacDef (unsigned Style)
-/* Parse a macro definition */
-{
-    Macro* M;
-    TokNode* N;
-    int HaveParams;
-
-    /* We expect a macro name here */
-    if (CurTok.Tok != TOK_IDENT) {
-        Error ("Identifier expected");
-        MacSkipDef (Style);
-        return;
-    } else if (!UbiquitousIdents && FindInstruction (&CurTok.SVal) >= 0) {
-        /* The identifier is a name of a 6502 instruction, which is not
-        ** allowed if not explicitly enabled.
-        */
-        Error ("Cannot use an instruction as macro name");
-        MacSkipDef (Style);
-        return;
-    }
-
-    /* Did we already define that macro? */
-    if (HT_Find (&MacroTab, &CurTok.SVal) != 0) {
-        /* Macro is already defined */
-        Error ("A macro named `%m%p' is already defined", &CurTok.SVal);
-        /* Skip tokens until we reach the final .endmacro */
-        MacSkipDef (Style);
-        return;
-    }
-
-    /* Define the macro */
-    M = NewMacro (&CurTok.SVal, Style);
-
-    /* Switch to raw token mode and skip the macro name */
-    EnterRawTokenMode ();
-    NextTok ();
-
-    /* If we have a DEFINE style macro, we may have parameters in braces,
-    ** otherwise we may have parameters without braces.
-    */
-    if (Style == MAC_STYLE_CLASSIC) {
-        HaveParams = 1;
-    } else {
-        if (CurTok.Tok == TOK_LPAREN) {
-            HaveParams = 1;
-            NextTok ();
-        } else {
-            HaveParams = 0;
-        }
-    }
-
-    /* Parse the parameter list */
-    if (HaveParams) {
-
-        while (CurTok.Tok == TOK_IDENT) {
-
-            /* Create a struct holding the identifier */
-            IdDesc* I = NewIdDesc (&CurTok.SVal);
-
-            /* Insert the struct into the list, checking for duplicate idents */
-            if (M->ParamCount == 0) {
-                M->Params = I;
-            } else {
-                IdDesc* List = M->Params;
-                while (1) {
-                    if (SB_Compare (&List->Id, &CurTok.SVal) == 0) {
-                        Error ("Duplicate symbol `%m%p'", &CurTok.SVal);
-                    }
-                    if (List->Next == 0) {
-                        break;
-                    } else {
-                        List = List->Next;
-                    }
-                }
-                List->Next = I;
-            }
-            ++M->ParamCount;
-
-            /* Skip the name */
-            NextTok ();
-
-            /* Maybe there are more params... */
-            if (CurTok.Tok == TOK_COMMA) {
-                NextTok ();
-            } else {
-                break;
-            }
-        }
-    }
-
-    /* For class macros, we expect a separator token, for define style macros,
-    ** we expect the closing paren.
-    */
-    if (Style == MAC_STYLE_CLASSIC) {
-        ConsumeSep ();
-    } else if (HaveParams) {
-        ConsumeRParen ();
-    }
-
-    /* Preparse the macro body. We will read the tokens until we reach end of
-    ** file, or a .endmacro (or end of line for DEFINE style macros) and store
-    ** them into an token list internal to the macro. For classic macros, there
-    ** the .LOCAL command is detected and removed at this time.
-    */
-    while (1) {
-
-        /* Check for end of macro */
-        if (Style == MAC_STYLE_CLASSIC) {
-            /* In classic macros, only .endmacro is allowed */
-            if (CurTok.Tok == TOK_ENDMACRO) {
-                /* Done */
-                break;
-            }
-            /* May not have end of file in a macro definition */
-            if (CurTok.Tok == TOK_EOF) {
-                Error ("`.ENDMACRO' expected");
-                goto Done;
-            }
-        } else {
-            /* Accept a newline or end of file for new style macros */
-            if (TokIsSep (CurTok.Tok)) {
-                break;
-            }
-        }
-
-        /* Check for a .LOCAL declaration */
-        if (CurTok.Tok == TOK_LOCAL && Style == MAC_STYLE_CLASSIC) {
-
-            while (1) {
-
-                IdDesc* I;
-
-                /* Skip .local or comma */
-                NextTok ();
-
-                /* Need an identifer */
-                if (CurTok.Tok != TOK_IDENT && CurTok.Tok != TOK_LOCAL_IDENT) {
-                    Error ("Identifier expected");
-                    SkipUntilSep ();
-                    break;
-                }
-
-                /* Put the identifier into the locals list and skip it */
-                I = NewIdDesc (&CurTok.SVal);
-                I->Next = M->Locals;
-                M->Locals = I;
-                ++M->LocalCount;
-                NextTok ();
-
-                /* Check for end of list */
-                if (CurTok.Tok != TOK_COMMA) {
-                    break;
-                }
-
-            }
-
-            /* We need end of line after the locals */
-            ConsumeSep ();
-            continue;
-        }
-
-        /* Create a token node for the current token */
-        N = NewTokNode ();
-
-        /* If the token is an identifier, check if it is a local parameter */
-        if (CurTok.Tok == TOK_IDENT) {
-            unsigned Count = 0;
-            IdDesc* I = M->Params;
-            while (I) {
-                if (SB_Compare (&I->Id, &CurTok.SVal) == 0) {
-                    /* Local param name, replace it */
-                    N->T.Tok  = TOK_MACPARAM;
-                    N->T.IVal = Count;
-                    break;
-                }
-                ++Count;
-                I = I->Next;
-            }
-        }
-
-        /* Insert the new token in the list */
-        if (M->TokCount == 0) {
-            /* First token */
-            M->TokRoot = M->TokLast = N;
-        } else {
-            /* We have already tokens */
-            M->TokLast->Next = N;
-            M->TokLast = N;
-        }
-        ++M->TokCount;
-
-        /* Read the next token */
-        NextTok ();
-    }
-
-    /* Skip the .endmacro for a classic macro */
-    if (Style == MAC_STYLE_CLASSIC) {
-        NextTok ();
-    }
-
-    /* Reset the Incomplete flag now that parsing is done */
-    M->Incomplete = 0;
-
-Done:
-    /* Switch out of raw token mode */
-    LeaveRawTokenMode ();
-}
-
-
-
-void MacUndef (const StrBuf* Name, unsigned char Style)
-/* Undefine the macro with the given name and style. A style mismatch is
-** treated as if the macro didn't exist.
-*/
-{
-    /* Search for the macro */
-    Macro* M = HT_Find (&MacroTab, Name);
-
-    /* Don't let the user kid with us */
-    if (M == 0 || M->Style != Style) {
-        Error ("No such macro: %m%p", Name);
-        return;
-    }
-    if (M->Expansions > 0) {
-        Error ("Cannot delete a macro that is currently expanded");
-        return;
-    }
-
-    /* Remove the macro from the macro table */
-    HT_Remove (&MacroTab, M);
-
-    /* Free the macro structure */
-    FreeMacro (M);
-}
-
-
-
-static int MacExpand (void* Data)
-/* If we're currently expanding a macro, set the the scanner token and
-** attribute to the next value and return true. If we are not expanding
-** a macro, return false.
-*/
-{
-    /* Cast the Data pointer to the actual data structure */
-    MacExp* Mac = (MacExp*) Data;
-
-    /* Check if we should abort this macro */
-    if (DoMacAbort) {
-
-        /* Reset the flag */
-        DoMacAbort = 0;
-
-        /* Abort any open .IF statements in this macro expansion */
-        CleanupIfStack (Mac->IfSP);
-
-        /* Terminate macro expansion */
-        goto MacEnd;
-    }
-
-    /* We're expanding a macro. Check if we are expanding one of the
-    ** macro parameters.
-    */
-ExpandParam:
-    if (Mac->ParamExp) {
-
-        /* Ok, use token from parameter list */
-        TokSet (Mac->ParamExp);
-
-        /* Create new line info for this parameter token */
-        if (Mac->ParamLI) {
-            EndLine (Mac->ParamLI);
-        }
-        Mac->ParamLI = StartLine (&CurTok.Pos, LI_TYPE_MACPARAM, Mac->MacExpansions);
-
-        /* Set pointer to next token */
-        Mac->ParamExp = Mac->ParamExp->Next;
-
-        /* Done */
-        return 1;
-
-    } else if (Mac->ParamLI) {
-
-        /* There's still line info open from the parameter expansion - end it */
-        EndLine (Mac->ParamLI);
-        Mac->ParamLI = 0;
-
-    }
-
-    /* We're not expanding macro parameters. Check if we have tokens left from
-    ** the macro itself.
-    */
-    if (Mac->Exp) {
-
-        /* Use next macro token */
-        TokSet (Mac->Exp);
-
-        /* Create new line info for this token */
-        if (Mac->LI) {
-            EndLine (Mac->LI);
-        }
-        Mac->LI = StartLine (&CurTok.Pos, LI_TYPE_MACRO, Mac->MacExpansions);
-
-        /* Set pointer to next token */
-        Mac->Exp = Mac->Exp->Next;
-
-        /* Is it a request for actual parameter count? */
-        if (CurTok.Tok == TOK_PARAMCOUNT) {
-            CurTok.Tok  = TOK_INTCON;
-            CurTok.IVal = Mac->ParamCount;
-            return 1;
-        }
-
-        /* Is it the name of a macro parameter? */
-        if (CurTok.Tok == TOK_MACPARAM) {
-
-            /* Start to expand the parameter token list */
-            Mac->ParamExp = Mac->Params[CurTok.IVal];
-
-            /* Go back and expand the parameter */
-            goto ExpandParam;
-        }
-
-        /* If it's an identifier, it may in fact be a local symbol */
-        if ((CurTok.Tok == TOK_IDENT || CurTok.Tok == TOK_LOCAL_IDENT) &&
-            Mac->M->LocalCount) {
-            /* Search for the local symbol in the list */
-            unsigned Index = 0;
-            IdDesc* I = Mac->M->Locals;
-            while (I) {
-                if (SB_Compare (&CurTok.SVal, &I->Id) == 0) {
-                    /* This is in fact a local symbol, change the name. Be sure
-                    ** to generate a local label name if the original name was
-                    ** a local label, and also generate a name that cannot be
-                    ** generated by a user.
-                    */
-                    if (SB_At (&I->Id, 0) == LocalStart) {
-                        /* Must generate a local symbol */
-                        SB_Printf (&CurTok.SVal, "%cLOCAL-MACRO_SYMBOL-%04X",
-                                   LocalStart, Mac->LocalStart + Index);
-                    } else {
-                        /* Global symbol */
-                        SB_Printf (&CurTok.SVal, "LOCAL-MACRO_SYMBOL-%04X",
-                                   Mac->LocalStart + Index);
-                    }
-                    break;
-                }
-                /* Next symbol */
-                ++Index;
-                I = I->Next;
-            }
-
-            /* Done */
-            return 1;
-        }
-
-        /* The token was successfully set */
-        return 1;
-    }
-
-    /* No more macro tokens. Do we have a final token? */
-    if (Mac->Final) {
-
-        /* Set the final token and remove it */
-        TokSet (Mac->Final);
-        FreeTokNode (Mac->Final);
-        Mac->Final = 0;
-
-        /* Problem: When a .define style macro is expanded within the call
-        ** of a classic one, the latter may be terminated and removed while
-        ** the expansion of the .define style macro is still active. Because
-        ** line info slots are "stacked", this runs into a CHECK FAILED. For
-        ** now, we will fix that by removing the .define style macro expansion
-        ** immediately, once the final token is placed. The better solution
-        ** would probably be to not require AllocLineInfoSlot/FreeLineInfoSlot
-        ** to be called in FIFO order, but this is a bigger change.
-        */
-        /* End of macro expansion and pop the input function */
-        FreeMacExp (Mac);
-        PopInput ();
-
-        /* The token was successfully set */
-        return 1;
-    }
-
-MacEnd:
-    /* End of macro expansion */
-    FreeMacExp (Mac);
-
-    /* Pop the input function */
-    PopInput ();
-
-    /* No token available */
-    return 0;
-}
-
-
-
-static void StartExpClassic (MacExp* E)
-/* Start expanding a classic macro */
-{
-    token_t     Term;
-
-    /* Skip the macro name */
-    NextTok ();
-
-    /* Read the actual parameters */
-    while (!TokIsSep (CurTok.Tok)) {
-
-        TokNode* Last;
-
-        /* Check for maximum parameter count */
-        if (E->ParamCount >= E->M->ParamCount) {
-            ErrorSkip ("Too many macro parameters");
-            break;
-        }
-
-        /* The macro may optionally be enclosed in curly braces */
-        Term = GetTokListTerm (TOK_COMMA);
-
-        /* Read tokens for one parameter, accept empty params */
-        Last = 0;
-        while (CurTok.Tok != Term && CurTok.Tok != TOK_SEP) {
-
-            TokNode* T;
-
-            /* Check for end of file */
-            if (CurTok.Tok == TOK_EOF) {
-                Error ("Unexpected end of file");
-                FreeMacExp (E);
-                return;
-            }
-
-            /* Get the next token in a node */
-            T = NewTokNode ();
-
-            /* Insert it into the list */
-            if (Last == 0) {
-                E->Params [E->ParamCount] = T;
-            } else {
-                Last->Next = T;
-            }
-            Last = T;
-
-            /* And skip it... */
-            NextTok ();
-        }
-
-        /* One parameter more */
-        ++E->ParamCount;
-
-        /* If the macro argument was enclosed in curly braces, end-of-line
-        ** is an error. Skip the closing curly brace.
-        */
-        if (Term == TOK_RCURLY) {
-            if (CurTok.Tok == TOK_SEP) {
-                Error ("End of line encountered within macro argument");
-                break;
-            }
-            NextTok ();
-        }
-
-        /* Check for a comma */
-        if (CurTok.Tok == TOK_COMMA) {
-            NextTok ();
-        } else {
-            break;
-        }
-    }
-
-    /* We must be at end of line now, otherwise something is wrong */
-    ExpectSep ();
-
-    /* Insert a new token input function */
-    PushInput (MacExpand, E, ".MACRO");
-}
-
-
-
-static void StartExpDefine (MacExp* E)
-/* Start expanding a DEFINE style macro */
-{
-    /* A define style macro must be called with as many actual parameters
-    ** as there are formal ones. Get the parameter count.
-    */
-    unsigned Count = E->M->ParamCount;
-
-    /* Skip the current token */
-    NextTok ();
-
-    /* Read the actual parameters */
-    while (Count--) {
-
-        TokNode*   Last;
-
-        /* The macro may optionally be enclosed in curly braces */
-        token_t Term = GetTokListTerm (TOK_COMMA);
-
-        /* Check if there is really a parameter */
-        if (TokIsSep (CurTok.Tok) || CurTok.Tok == Term) {
-            ErrorSkip ("Macro parameter #%u is empty", E->ParamCount+1);
-            FreeMacExp (E);
-            return;
-        }
-
-        /* Read tokens for one parameter */
-        Last = 0;
-        do {
-
-            TokNode* T;
-
-            /* Get the next token in a node */
-            T = NewTokNode ();
-
-            /* Insert it into the list */
-            if (Last == 0) {
-                E->Params [E->ParamCount] = T;
-            } else {
-                Last->Next = T;
-            }
-            Last = T;
-
-            /* And skip it... */
-            NextTok ();
-
-        } while (CurTok.Tok != Term && !TokIsSep (CurTok.Tok));
-
-        /* One parameter more */
-        ++E->ParamCount;
-
-        /* If the macro argument was enclosed in curly braces, end-of-line
-        ** is an error. Skip the closing curly brace.
-        */
-        if (Term == TOK_RCURLY) {
-            if (TokIsSep (CurTok.Tok)) {
-                Error ("End of line encountered within macro argument");
-                break;
-            }
-            NextTok ();
-        }
-
-        /* Check for a comma */
-        if (Count > 0) {
-            if (CurTok.Tok == TOK_COMMA) {
-                NextTok ();
-            } else {
-                Error ("`,' expected");
-            }
-        }
-    }
-
-    /* Macro expansion will overwrite the current token. This is a problem
-    ** for define style macros since these are called from the scanner level.
-    ** To avoid it, remember the current token and re-insert it, once macro
-    ** expansion is done.
-    */
-    E->Final = NewTokNode ();
-
-    /* Insert a new token input function */
-    PushInput (MacExpand, E, ".DEFINE");
-}
-
-
-
-void MacExpandStart (Macro* M)
-/* Start expanding a macro */
-{
-    MacExp* E;
-
-    /* Check the argument */
-    PRECONDITION (M && (M->Style != MAC_STYLE_DEFINE || DisableDefines == 0));
-
-    /* We cannot expand an incomplete macro */
-    if (M->Incomplete) {
-        Error ("Cannot expand an incomplete macro");
-        return;
-    }
-
-    /* Don't allow too many nested macro expansions - otherwise it is possible
-    ** to force an endless loop and assembler crash.
-    */
-    if (MacExpansions >= MAX_MACEXPANSIONS) {
-        Error ("Too many nested macro expansions");
-        return;
-    }
-
-    /* Create a structure holding expansion data */
-    E = NewMacExp (M);
-
-    /* Call the apropriate subroutine */
-    switch (M->Style) {
-        case MAC_STYLE_CLASSIC: StartExpClassic (E);    break;
-        case MAC_STYLE_DEFINE:  StartExpDefine (E);     break;
-        default:                Internal ("Invalid macro style: %d", M->Style);
-    }
-}
-
-
-
-void MacAbort (void)
-/* Abort the current macro expansion */
-{
-    /* Must have an expansion */
-    CHECK (MacExpansions > 0);
-
-    /* Set a flag so macro expansion will terminate on the next call */
-    DoMacAbort = 1;
-}
-
-
-
-Macro* FindMacro (const StrBuf* Name)
-/* Try to find the macro with the given name and return it. If no macro with
-** this name was found, return NULL.
-*/
-{
-    Macro* M = HT_Find (&MacroTab, Name);
-    return (M != 0 && M->Style == MAC_STYLE_CLASSIC)? M : 0;
-}
-
-
-
-Macro* FindDefine (const StrBuf* Name)
-/* Try to find the define style macro with the given name and return it. If no
-** such macro was found, return NULL.
-*/
-{
-    Macro* M;
-
-    /* Never if disabled */
-    if (DisableDefines) {
-        return 0;
-    }
-
-    /* Check if we have such a macro */
-    M = HT_Find (&MacroTab, Name);
-    return (M != 0 && M->Style == MAC_STYLE_DEFINE)? M : 0;
-}
-
-
-
-int InMacExpansion (void)
-/* Return true if we're currently expanding a macro */
-{
-    return (MacExpansions > 0);
-}
-
-
-
-void DisableDefineStyleMacros (void)
-/* Disable define style macros until EnableDefineStyleMacros is called */
-{
-    ++DisableDefines;
-}
-
-
-
-void EnableDefineStyleMacros (void)
-/* Re-enable define style macros previously disabled with
-** DisableDefineStyleMacros.
-*/
-{
-    PRECONDITION (DisableDefines > 0);
-    --DisableDefines;
-}
diff --git a/src/ca65/macro.h b/src/ca65/macro.h
deleted file mode 100644 (file)
index bb7b817..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  macro.h                                  */
-/*                                                                           */
-/*                    Macros for the ca65 macroassembler                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef MACRO_H
-#define MACRO_H
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-struct StrBuf;
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Macro styles */
-#define MAC_STYLE_CLASSIC       0
-#define MAC_STYLE_DEFINE        1
-
-/* Macro as an opaque data type */
-struct Macro;
-typedef struct Macro Macro;
-
-                                
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void MacDef (unsigned Style);
-/* Parse a macro definition */
-
-void MacUndef (const struct StrBuf* Name, unsigned char Style);
-/* Undefine the macro with the given name and style. A style mismatch is
-** treated as if the macro didn't exist.
-*/
-
-void MacExpandStart (Macro* M);
-/* Start expanding a macro */
-
-void MacAbort (void);
-/* Abort the current macro expansion */
-
-Macro* FindMacro (const struct StrBuf* Name);
-/* Try to find the macro with the given name and return it. If no macro with
-** this name was found, return NULL.
-*/
-
-Macro* FindDefine (const struct StrBuf* Name);
-/* Try to find the define style macro with the given name and return it. If no
-** such macro was found, return NULL.
-*/
-
-int InMacExpansion (void);
-/* Return true if we're currently expanding a macro */
-
-void DisableDefineStyleMacros (void);
-/* Disable define style macros until EnableDefineStyleMacros is called */
-
-void EnableDefineStyleMacros (void);
-/* Re-enable define style macros previously disabled with
-** DisableDefineStyleMacros.
-*/
-
-
-
-/* End of macro.h */
-
-#endif
diff --git a/src/ca65/main.c b/src/ca65/main.c
deleted file mode 100644 (file)
index d81a875..0000000
+++ /dev/null
@@ -1,1130 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  main.c                                   */
-/*                                                                           */
-/*                 Main program for the ca65 macroassembler                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-/* common */
-#include "addrsize.h"
-#include "chartype.h"
-#include "cmdline.h"
-#include "debugflag.h"
-#include "mmodel.h"
-#include "print.h"
-#include "scopedefs.h"
-#include "strbuf.h"
-#include "target.h"
-#include "tgttrans.h"
-#include "version.h"
-
-/* ca65 */
-#include "abend.h"
-#include "asserts.h"
-#include "dbginfo.h"
-#include "error.h"
-#include "expr.h"
-#include "feature.h"
-#include "filetab.h"
-#include "global.h"
-#include "incpath.h"
-#include "instr.h"
-#include "istack.h"
-#include "lineinfo.h"
-#include "listing.h"
-#include "macro.h"
-#include "nexttok.h"
-#include "objfile.h"
-#include "options.h"
-#include "pseudo.h"
-#include "scanner.h"
-#include "segment.h"
-#include "sizeof.h"
-#include "span.h"
-#include "spool.h"
-#include "symbol.h"
-#include "symtab.h"
-#include "ulabel.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void Usage (void)
-/* Print usage information and exit */
-{
-    printf ("Usage: %s [options] file\n"
-            "Short options:\n"
-            "  -D name[=value]\t\tDefine a symbol\n"
-            "  -I dir\t\t\tSet an include directory search path\n"
-            "  -U\t\t\t\tMark unresolved symbols as import\n"
-            "  -V\t\t\t\tPrint the assembler version\n"
-            "  -W n\t\t\t\tSet warning level n\n"
-            "  -d\t\t\t\tDebug mode\n"
-            "  -g\t\t\t\tAdd debug info to object file\n"
-            "  -h\t\t\t\tHelp (this text)\n"
-            "  -i\t\t\t\tIgnore case of symbols\n"
-            "  -l name\t\t\tCreate a listing file if assembly was ok\n"
-            "  -mm model\t\t\tSet the memory model\n"
-            "  -o name\t\t\tName the output file\n"
-            "  -s\t\t\t\tEnable smart mode\n"
-            "  -t sys\t\t\tSet the target system\n"
-            "  -v\t\t\t\tIncrease verbosity\n"
-            "\n"
-            "Long options:\n"
-            "  --auto-import\t\t\tMark unresolved symbols as import\n"
-            "  --bin-include-dir dir\t\tSet a search path for binary includes\n"
-            "  --cpu type\t\t\tSet cpu type\n"
-            "  --create-dep name\t\tCreate a make dependency file\n"
-            "  --create-full-dep name\tCreate a full make dependency file\n"
-            "  --debug\t\t\tDebug mode\n"
-            "  --debug-info\t\t\tAdd debug info to object file\n"
-            "  --feature name\t\tSet an emulation feature\n"
-            "  --help\t\t\tHelp (this text)\n"
-            "  --ignore-case\t\t\tIgnore case of symbols\n"
-            "  --include-dir dir\t\tSet an include directory search path\n"
-            "  --large-alignment\t\tDon't warn about large alignments\n"
-            "  --listing name\t\tCreate a listing file if assembly was ok\n"
-            "  --list-bytes n\t\tMaximum number of bytes per listing line\n"
-            "  --macpack-dir dir\t\tSet a macro package directory\n"
-            "  --memory-model model\t\tSet the memory model\n"
-            "  --pagelength n\t\tSet the page length for the listing\n"
-            "  --relax-checks\t\tRelax some checks (see docs)\n"
-            "  --smart\t\t\tEnable smart mode\n"
-            "  --target sys\t\t\tSet the target system\n"
-            "  --verbose\t\t\tIncrease verbosity\n"
-            "  --version\t\t\tPrint the assembler version\n",
-            ProgName);
-}
-
-
-
-static void SetOptions (void)
-/* Set the option for the translator */
-{
-    StrBuf Buf = STATIC_STRBUF_INITIALIZER;
-
-    /* Set the translator */
-    SB_Printf (&Buf, "ca65 V%s", GetVersionAsString ());
-    OptTranslator (&Buf);
-
-    /* Set date and time */
-    OptDateTime ((unsigned long) time(0));
-
-    /* Release memory for the string */
-    SB_Done (&Buf);
-}
-
-
-
-static void NewSymbol (const char* SymName, long Val)
-/* Define a symbol with a fixed numeric value in the current scope */
-{
-    ExprNode* Expr;
-    SymEntry* Sym;
-
-    /* Convert the name to a string buffer */
-    StrBuf SymBuf = STATIC_STRBUF_INITIALIZER;
-    SB_CopyStr (&SymBuf, SymName);
-
-    /* Search for the symbol, allocate a new one if it doesn't exist */
-    Sym = SymFind (CurrentScope, &SymBuf, SYM_ALLOC_NEW);
-
-    /* Check if have already a symbol with this name */
-    if (SymIsDef (Sym)) {
-        AbEnd ("`%s' is already defined", SymName);
-    }
-
-    /* Generate an expression for the symbol */
-    Expr = GenLiteralExpr (Val);
-
-    /* Mark the symbol as defined */
-    SymDef (Sym, Expr, ADDR_SIZE_DEFAULT, SF_NONE);
-
-    /* Free string buffer memory */
-    SB_Done (&SymBuf);
-}
-
-
-
-static void CBMSystem (const char* Sys)
-/* Define a CBM system */
-{
-    NewSymbol ("__CBM__", 1);
-    NewSymbol (Sys, 1);
-}
-
-
-
-static void SetSys (const char* Sys)
-/* Define a target system */
-{
-    switch (Target = FindTarget (Sys)) {
-
-        case TGT_NONE:
-            break;
-
-        case TGT_MODULE:
-            AbEnd ("Cannot use `module' as a target for the assembler");
-            break;
-
-        case TGT_ATARI5200:
-            NewSymbol ("__ATARI5200__", 1);
-            break;
-
-        case TGT_ATARI:
-            NewSymbol ("__ATARI__", 1);
-            break;
-
-        case TGT_ATARIXL:
-            NewSymbol ("__ATARI__", 1);
-            NewSymbol ("__ATARIXL__", 1);
-            break;
-
-        case TGT_C16:
-            CBMSystem ("__C16__");
-            break;
-
-        case TGT_C64:
-            CBMSystem ("__C64__");
-            break;
-
-        case TGT_VIC20:
-            CBMSystem ("__VIC20__");
-            break;
-
-        case TGT_C128:
-            CBMSystem ("__C128__");
-            break;
-
-        case TGT_PLUS4:
-            CBMSystem ("__C16__");
-            NewSymbol ("__PLUS4__", 1);
-            break;
-
-        case TGT_CBM510:
-            CBMSystem ("__CBM510__");
-            break;
-
-        case TGT_CBM610:
-            CBMSystem ("__CBM610__");
-            break;
-
-        case TGT_PET:
-            CBMSystem ("__PET__");
-            break;
-
-        case TGT_BBC:
-            NewSymbol ("__BBC__", 1);
-            break;
-
-        case TGT_APPLE2:
-            NewSymbol ("__APPLE2__", 1);
-            break;
-
-        case TGT_APPLE2ENH:
-            NewSymbol ("__APPLE2__", 1);
-            NewSymbol ("__APPLE2ENH__", 1);
-            break;
-
-        case TGT_GEOS_CBM:
-            /* Do not handle as a CBM system */
-            NewSymbol ("__GEOS__", 1);
-            NewSymbol ("__GEOS_CBM__", 1);
-            break;
-
-        case TGT_GEOS_APPLE:
-            NewSymbol ("__GEOS__", 1);
-            NewSymbol ("__GEOS_APPLE__", 1);
-            break;
-
-        case TGT_LUNIX:
-            NewSymbol ("__LUNIX__", 1);
-            break;
-
-        case TGT_ATMOS:
-            NewSymbol ("__ATMOS__", 1);
-            break;
-
-        case TGT_NES:
-            NewSymbol ("__NES__", 1);
-            break;
-
-        case TGT_SUPERVISION:
-            NewSymbol ("__SUPERVISION__", 1);
-            break;
-
-        case TGT_LYNX:
-            NewSymbol ("__LYNX__", 1);
-            break;
-
-        case TGT_SIM6502:
-            NewSymbol ("__SIM6502__", 1);
-            break;
-
-        case TGT_SIM65C02:
-            NewSymbol ("__SIM65C02__", 1);
-            break;
-
-        case TGT_OSIC1P:
-            NewSymbol ("__OSIC1P__", 1);
-            break;
-
-        case TGT_PCENGINE:
-            NewSymbol ("__PCE__", 1);
-            break;
-
-        default:
-            AbEnd ("Invalid target name: `%s'", Sys);
-
-    }
-
-    /* Initialize the translation tables for the target system */
-    TgtTranslateInit ();
-}
-
-
-
-static void FileNameOption (const char* Opt, const char* Arg, StrBuf* Name)
-/* Handle an option that remembers a file name for later */
-{
-    /* Cannot have the option twice */
-    if (SB_NotEmpty (Name)) {
-        AbEnd ("Cannot use option `%s' twice", Opt);
-    }
-    /* Remember the file name for later */
-    SB_CopyStr (Name, Arg);
-    SB_Terminate (Name);
-}
-
-
-
-static void DefineSymbol (const char* Def)
-/* Define a symbol from the command line */
-{
-    const char* P;
-    long Val;
-    StrBuf SymName = AUTO_STRBUF_INITIALIZER;
-
-
-    /* The symbol must start with a character or underline */
-    if (!IsIdStart (Def [0])) {
-        InvDef (Def);
-    }
-    P = Def;
-
-    /* Copy the symbol, checking the rest */
-    while (IsIdChar (*P)) {
-        SB_AppendChar (&SymName, *P++);
-    }
-    SB_Terminate (&SymName);
-
-    /* Do we have a value given? */
-    if (*P != '=') {
-        if (*P != '\0') {
-            InvDef (Def);
-        }
-        Val = 0;
-    } else {
-        /* We have a value */
-        ++P;
-        if (*P == '$') {
-            ++P;
-            if (sscanf (P, "%lx", &Val) != 1) {
-                InvDef (Def);
-            }
-        } else {
-            if (sscanf (P, "%li", &Val) != 1) {
-                InvDef (Def);
-            }
-        }
-    }
-
-    /* Define the new symbol */
-    NewSymbol (SB_GetConstBuf (&SymName), Val);
-
-    /* Release string memory */
-    SB_Done (&SymName);
-}
-
-
-
-static void OptAutoImport (const char* Opt attribute ((unused)),
-                           const char* Arg attribute ((unused)))
-/* Mark unresolved symbols as imported */
-{
-    AutoImport = 1;
-}
-
-
-
-static void OptBinIncludeDir (const char* Opt attribute ((unused)), const char* Arg)
-/* Add an include search path for binaries */
-{
-    AddSearchPath (BinSearchPath, Arg);
-}
-
-
-
-static void OptCPU (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --cpu option */
-{
-    cpu_t CPU = FindCPU (Arg);
-    if (CPU == CPU_UNKNOWN) {
-        AbEnd ("Invalid CPU: `%s'", Arg);
-    } else {
-        SetCPU (CPU);
-    }
-}
-
-
-
-static void OptCreateDep (const char* Opt, const char* Arg)
-/* Handle the --create-dep option */
-{
-    FileNameOption (Opt, Arg, &DepName);
-}
-
-
-
-static void OptCreateFullDep (const char* Opt attribute ((unused)),
-                              const char* Arg)
-/* Handle the --create-full-dep option */
-{
-    FileNameOption (Opt, Arg, &FullDepName);
-}
-
-
-
-static void OptDebug (const char* Opt attribute ((unused)),
-                      const char* Arg attribute ((unused)))
-/* Compiler debug mode */
-{
-    ++Debug;
-}
-
-
-
-static void OptDebugInfo (const char* Opt attribute ((unused)),
-                          const char* Arg attribute ((unused)))
-/* Add debug info to the object file */
-{
-    DbgSyms = 1;
-}
-
-
-
-static void OptFeature (const char* Opt attribute ((unused)), const char* Arg)
-/* Set an emulation feature */
-{
-    /* Make a string buffer from Arg */
-    StrBuf Feature;
-
-    /* Set the feature, check for errors */
-    if (SetFeature (SB_InitFromString (&Feature, Arg)) == FEAT_UNKNOWN) {
-        AbEnd ("Illegal emulation feature: `%s'", Arg);
-    }
-}
-
-
-
-static void OptHelp (const char* Opt attribute ((unused)),
-                     const char* Arg attribute ((unused)))
-/* Print usage information and exit */
-{
-    Usage ();
-    exit (EXIT_SUCCESS);
-}
-
-
-
-static void OptIgnoreCase (const char* Opt attribute ((unused)),
-                           const char* Arg attribute ((unused)))
-/* Ignore case on symbols */
-{
-    IgnoreCase = 1;
-}
-
-
-
-static void OptIncludeDir (const char* Opt attribute ((unused)), const char* Arg)
-/* Add an include search path */
-{
-    AddSearchPath (IncSearchPath, Arg);
-}
-
-
-
-static void OptLargeAlignment (const char* Opt attribute ((unused)),
-                               const char* Arg attribute ((unused)))
-/* Don't warn about large alignments */
-{
-    LargeAlignment = 1;
-}
-
-
-
-static void OptListBytes (const char* Opt, const char* Arg)
-/* Set the maximum number of bytes per listing line */
-{
-    unsigned Num;
-    char     Check;
-
-    /* Convert the argument to a number */
-    if (sscanf (Arg, "%u%c", &Num, &Check) != 1) {
-        InvArg (Opt, Arg);
-    }
-
-    /* Check the bounds */
-    if (Num != 0 && (Num < MIN_LIST_BYTES || Num > MAX_LIST_BYTES)) {
-        AbEnd ("Argument for option `%s' is out of range", Opt);
-    }
-
-    /* Use the value */
-    SetListBytes (Num);
-}
-
-
-
-static void OptListing (const char* Opt, const char* Arg)
-/* Create a listing file */
-{
-    /* Since the meaning of -l and --listing has changed, print an error if
-    ** the filename is empty or begins with the option char.
-    */
-    if (Arg == 0 || *Arg == '\0' || *Arg == '-') {
-        Fatal ("The meaning of `%s' has changed. It does now "
-               "expect a file name as argument.", Opt);
-    }
-
-    /* Get the file name */
-    FileNameOption (Opt, Arg, &ListingName);
-}
-
-
-
-static void OptMemoryModel (const char* Opt, const char* Arg)
-/* Set the memory model */
-{
-    mmodel_t M;
-
-    /* Check the current memory model */
-    if (MemoryModel != MMODEL_UNKNOWN) {
-        AbEnd ("Cannot use option `%s' twice", Opt);
-    }
-
-    /* Translate the memory model name and check it */
-    M = FindMemoryModel (Arg);
-    if (M == MMODEL_UNKNOWN) {
-        AbEnd ("Unknown memory model: %s", Arg);
-    } else if (M == MMODEL_HUGE) {
-        AbEnd ("Unsupported memory model: %s", Arg);
-    }
-
-    /* Set the memory model */
-    SetMemoryModel (M);
-}
-
-
-
-static void OptPageLength (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --pagelength option */
-{
-    int Len = atoi (Arg);
-    if (Len != -1 && (Len < MIN_PAGE_LEN || Len > MAX_PAGE_LEN)) {
-        AbEnd ("Invalid page length: %d", Len);
-    }
-    PageLength = Len;
-}
-
-
-
-static void OptRelaxChecks (const char* Opt attribute ((unused)),
-                            const char* Arg attribute ((unused)))
-/* Handle the --relax-checks options */
-{
-    RelaxChecks = 1;
-}
-
-
-
-static void OptSmart (const char* Opt attribute ((unused)),
-                      const char* Arg attribute ((unused)))
-/* Handle the -s/--smart options */
-{
-    SmartMode = 1;
-}
-
-
-
-static void OptTarget (const char* Opt attribute ((unused)), const char* Arg)
-/* Set the target system */
-{
-    SetSys (Arg);
-}
-
-
-
-static void OptVerbose (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Increase verbosity */
-{
-    ++Verbosity;
-}
-
-
-
-static void OptVersion (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Print the assembler version */
-{
-    fprintf (stderr, "ca65 V%s\n", GetVersionAsString ());
-}
-
-
-
-static void DoPCAssign (void)
-/* Start absolute code */
-{
-    long PC = ConstExpression ();
-    if (PC < 0 || PC > 0xFFFFFF) {
-        Error ("Range error");
-    } else {
-        EnterAbsoluteMode (PC);
-    }
-}
-
-
-
-static void OneLine (void)
-/* Assemble one line */
-{
-    Segment*      Seg   = 0;
-    unsigned long PC    = 0;
-    SymEntry*     Sym   = 0;
-    Macro*        Mac   = 0;
-    int           Instr = -1;
-
-    /* Initialize the new listing line if we are actually reading from file
-    ** and not from internally pushed input.
-    */
-    if (!HavePushedInput ()) {
-        InitListingLine ();
-    }
-
-    /* Single colon means unnamed label */
-    if (CurTok.Tok == TOK_COLON) {
-        ULabDef ();
-        NextTok ();
-    }
-
-    /* If the first token on the line is an identifier, check for a macro or
-    ** an instruction.
-    */
-    if (CurTok.Tok == TOK_IDENT) {
-        if (UbiquitousIdents) {
-            /* Macros CAN be instructions, so check for them first */
-            Mac = FindMacro (&CurTok.SVal);
-            if (Mac == 0) {
-                Instr = FindInstruction (&CurTok.SVal);
-            }
-        } else {
-            /* Macros and symbols may NOT use the names of instructions */
-            Instr = FindInstruction (&CurTok.SVal);
-            if (Instr < 0) {
-                Mac = FindMacro (&CurTok.SVal);
-            }
-        }
-    }
-
-    /* Handle an identifier. This may be a cheap local symbol, or a fully
-    ** scoped identifier which may start with a namespace token (for global
-    ** namespace)
-    */
-    if (CurTok.Tok == TOK_LOCAL_IDENT ||
-        CurTok.Tok == TOK_NAMESPACE   ||
-        (CurTok.Tok == TOK_IDENT && Instr < 0 && Mac == 0)) {
-
-        /* Did we have whitespace before the ident? */
-        int HadWS = CurTok.WS;
-
-        /* Generate the symbol table entry, then skip the name */
-        Sym = ParseAnySymName (SYM_ALLOC_NEW);
-
-        /* If a colon follows, this is a label definition. If there
-        ** is no colon, it's an assignment.
-        */
-        if (CurTok.Tok == TOK_EQ || CurTok.Tok == TOK_ASSIGN) {
-
-            /* Determine the symbol flags from the assignment token */
-            unsigned Flags = (CurTok.Tok == TOK_ASSIGN)? SF_LABEL : SF_NONE;
-
-            /* Skip the '=' */
-            NextTok ();
-
-            /* Define the symbol with the expression following the '=' */
-            SymDef (Sym, Expression(), ADDR_SIZE_DEFAULT, Flags);
-
-            /* Don't allow anything after a symbol definition */
-            ConsumeSep ();
-            return;
-
-        } else if (CurTok.Tok == TOK_SET) {
-
-            ExprNode* Expr;
-
-            /* .SET defines variables (= redefinable symbols) */
-            NextTok ();
-
-            /* Read the assignment expression, which must be constant */
-            Expr = GenLiteralExpr (ConstExpression ());
-
-            /* Define the symbol with the constant expression following
-            ** the '='
-            */
-            SymDef (Sym, Expr, ADDR_SIZE_DEFAULT, SF_VAR);
-
-            /* Don't allow anything after a symbol definition */
-            ConsumeSep ();
-            return;
-
-        } else {
-
-            /* A label. Remember the current segment, so we can later
-            ** determine the size of the data stored under the label.
-            */
-            Seg = ActiveSeg;
-            PC  = GetPC ();
-
-            /* Define the label */
-            SymDef (Sym, GenCurrentPC (), ADDR_SIZE_DEFAULT, SF_LABEL);
-
-            /* Skip the colon. If NoColonLabels is enabled, allow labels
-            ** without a colon if there is no whitespace before the
-            ** identifier.
-            */
-            if (CurTok.Tok != TOK_COLON) {
-                if (HadWS || !NoColonLabels) {
-                    Error ("`:' expected");
-                    /* Try some smart error recovery */
-                    if (CurTok.Tok == TOK_NAMESPACE) {
-                        NextTok ();
-                    }
-                }
-            } else {
-                /* Skip the colon */
-                NextTok ();
-            }
-
-            /* If we come here, a new identifier may be waiting, which may
-            ** be a macro or instruction.
-            */
-            if (CurTok.Tok == TOK_IDENT) {
-                if (UbiquitousIdents) {
-                    /* Macros CAN be instructions, so check for them first */
-                    Mac = FindMacro (&CurTok.SVal);
-                    if (Mac == 0) {
-                        Instr = FindInstruction (&CurTok.SVal);
-                    }
-                } else {
-                    /* Macros and symbols may NOT use the names of instructions */
-                    Instr = FindInstruction (&CurTok.SVal);
-                    if (Instr < 0) {
-                        Mac = FindMacro (&CurTok.SVal);
-                    }
-                }
-            }
-        }
-    }
-
-    /* We've handled a possible label, now handle the remainder of the line */
-    if (CurTok.Tok >= TOK_FIRSTPSEUDO && CurTok.Tok <= TOK_LASTPSEUDO) {
-        /* A control command */
-        HandlePseudo ();
-    } else if (Mac != 0) {
-        /* A macro expansion */
-        MacExpandStart (Mac);
-    } else if (Instr >= 0) {
-        /* A mnemonic - assemble one instruction */
-        HandleInstruction (Instr);
-    } else if (PCAssignment && (CurTok.Tok == TOK_STAR || CurTok.Tok == TOK_PC)) {
-        NextTok ();
-        if (CurTok.Tok != TOK_EQ) {
-            Error ("`=' expected");
-            SkipUntilSep ();
-        } else {
-            /* Skip the equal sign */
-            NextTok ();
-            /* Enter absolute mode */
-            DoPCAssign ();
-        }
-    }
-
-    /* If we have defined a label, remember its size. Sym is also set by
-    ** a symbol assignment, but in this case Done is false, so we don't
-    ** come here.
-    */
-    if (Sym) {
-        unsigned long Size;
-        if (Seg == ActiveSeg) {
-            /* Same segment */
-            Size = GetPC () - PC;
-        } else {
-            /* The line has switched the segment */
-            Size = 0;
-        }
-        DefSizeOfSymbol (Sym, Size);
-    }
-
-    /* Line separator must come here */
-    ConsumeSep ();
-}
-
-
-
-static void Assemble (void)
-/* Start the ball rolling ... */
-{
-    /* Prime the pump */
-    NextTok ();
-
-    /* Assemble lines until end of file */
-    while (CurTok.Tok != TOK_EOF) {
-        OneLine ();
-    }
-}
-
-
-
-static void CreateObjFile (void)
-/* Create the object file */
-{
-    /* Open the object, write the header */
-    ObjOpen ();
-
-    /* Write the object file options */
-    WriteOptions ();
-
-    /* Write the list of input files */
-    WriteFiles ();
-
-    /* Write the segment data to the file */
-    WriteSegments ();
-
-    /* Write the import list */
-    WriteImports ();
-
-    /* Write the export list */
-    WriteExports ();
-
-    /* Write debug symbols if requested */
-    WriteDbgSyms ();
-
-    /* Write the scopes if requested */
-    WriteScopes ();
-
-    /* Write line infos if requested */
-    WriteLineInfos ();
-
-    /* Write the string pool */
-    WriteStrPool ();
-
-    /* Write the assertions */
-    WriteAssertions ();
-
-    /* Write the spans */
-    WriteSpans ();
-
-    /* Write an updated header and close the file */
-    ObjClose ();
-}
-
-
-
-int main (int argc, char* argv [])
-/* Assembler main program */
-{
-    /* Program long options */
-    static const LongOpt OptTab[] = {
-        { "--auto-import",      0,      OptAutoImport           },
-        { "--bin-include-dir",  1,      OptBinIncludeDir        },
-        { "--cpu",              1,      OptCPU                  },
-        { "--create-dep",       1,      OptCreateDep            },
-        { "--create-full-dep",  1,      OptCreateFullDep        },
-        { "--debug",            0,      OptDebug                },
-        { "--debug-info",       0,      OptDebugInfo            },
-        { "--feature",          1,      OptFeature              },
-        { "--help",             0,      OptHelp                 },
-        { "--ignore-case",      0,      OptIgnoreCase           },
-        { "--include-dir",      1,      OptIncludeDir           },
-        { "--large-alignment",  0,      OptLargeAlignment       },
-        { "--list-bytes",       1,      OptListBytes            },
-        { "--listing",          1,      OptListing              },
-        { "--memory-model",     1,      OptMemoryModel          },
-        { "--pagelength",       1,      OptPageLength           },
-        { "--relax-checks",     0,      OptRelaxChecks          },
-        { "--smart",            0,      OptSmart                },
-        { "--target",           1,      OptTarget               },
-        { "--verbose",          0,      OptVerbose              },
-        { "--version",          0,      OptVersion              },
-    };
-
-    /* Name of the global name space */
-    static const StrBuf GlobalNameSpace = STATIC_STRBUF_INITIALIZER;
-
-    unsigned I;
-
-    /* Initialize the cmdline module */
-    InitCmdLine (&argc, &argv, "ca65");
-
-    /* Initialize the string pool */
-    InitStrPool ();
-
-    /* Initialize the include search paths */
-    InitIncludePaths ();
-
-    /* Create the predefined segments */
-    SegInit ();
-
-    /* Enter the base lexical level. We must do that here, since we may
-    ** define symbols using -D.
-    */
-    SymEnterLevel (&GlobalNameSpace, SCOPE_FILE, ADDR_SIZE_DEFAULT, 0);
-
-    /* Initialize the line infos. Must be done here, since we need line infos
-    ** for symbol definitions.
-    */
-    InitLineInfo ();
-
-    /* Check the parameters */
-    I = 1;
-    while (I < ArgCount) {
-
-        /* Get the argument */
-        const char* Arg = ArgVec [I];
-
-        /* Check for an option */
-        if (Arg[0] == '-') {
-            switch (Arg[1]) {
-
-                case '-':
-                    LongOption (&I, OptTab, sizeof(OptTab)/sizeof(OptTab[0]));
-                    break;
-
-                case 'd':
-                    OptDebug (Arg, 0);
-                    break;
-
-                case 'g':
-                    OptDebugInfo (Arg, 0);
-                    break;
-
-                case 'h':
-                    OptHelp (Arg, 0);
-                    break;
-
-                case 'i':
-                    OptIgnoreCase (Arg, 0);
-                    break;
-
-                case 'l':
-                    OptListing (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'm':
-                    if (Arg[2] == 'm') {
-                        OptMemoryModel (Arg, GetArg (&I, 3));
-                    } else {
-                        UnknownOption (Arg);
-                    }
-                    break;
-
-                case 'o':
-                    OutFile = GetArg (&I, 2);
-                    break;
-
-                case 's':
-                    OptSmart (Arg, 0);
-                    break;
-
-                case 't':
-                    OptTarget (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'v':
-                    OptVerbose (Arg, 0);
-                    break;
-
-                case 'D':
-                    DefineSymbol (GetArg (&I, 2));
-                    break;
-
-                case 'I':
-                    OptIncludeDir (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'U':
-                    OptAutoImport (Arg, 0);
-                    break;
-
-                case 'V':
-                    OptVersion (Arg, 0);
-                    break;
-
-                case 'W':
-                    WarnLevel = atoi (GetArg (&I, 2));
-                    break;
-
-                default:
-                    UnknownOption (Arg);
-                    break;
-
-            }
-        } else {
-            /* Filename. Check if we already had one */
-            if (InFile) {
-                fprintf (stderr, "%s: Don't know what to do with `%s'\n",
-                         ProgName, Arg);
-                exit (EXIT_FAILURE);
-            } else {
-                InFile = Arg;
-            }
-        }
-
-        /* Next argument */
-        ++I;
-    }
-
-    /* Do we have an input file? */
-    if (InFile == 0) {
-        fprintf (stderr, "%s: No input files\n", ProgName);
-        exit (EXIT_FAILURE);
-    }
-
-    /* Add the default include search paths. */
-    FinishIncludePaths ();
-
-    /* If no CPU given, use the default CPU for the target */
-    if (GetCPU () == CPU_UNKNOWN) {
-        if (Target != TGT_UNKNOWN) {
-            SetCPU (GetTargetProperties (Target)->DefaultCPU);
-        } else {
-            SetCPU (CPU_6502);
-        }
-    }
-
-    /* If no memory model was given, use the default */
-    if (MemoryModel == MMODEL_UNKNOWN) {
-        SetMemoryModel (MMODEL_NEAR);
-    }
-
-    /* Set the default segment sizes according to the memory model */
-    SetSegmentSizes ();
-
-    /* Initialize the scanner, open the input file */
-    InitScanner (InFile);
-
-    /* Define the default options */
-    SetOptions ();
-
-    /* Assemble the input */
-    Assemble ();
-
-    /* If we didn't have any errors, check the pseudo insn stacks */
-    if (ErrorCount == 0) {
-        CheckPseudo ();
-    }
-
-    /* If we didn't have any errors, check and cleanup the unnamed labels */
-    if (ErrorCount == 0) {
-        ULabDone ();
-    }
-
-    /* If we didn't have any errors, check the symbol table */
-    if (ErrorCount == 0) {
-        SymCheck ();
-    }
-
-    /* If we didn't have any errors, check the hll debug symbols */
-    if (ErrorCount == 0) {
-        DbgInfoCheck ();
-    }
-
-    /* If we didn't have any errors, close the file scope lexical level */
-    if (ErrorCount == 0) {
-        SymLeaveLevel ();
-    }
-
-    /* If we didn't have any errors, check and resolve the segment data */
-    if (ErrorCount == 0) {
-        SegDone ();
-    }
-
-    /* If we didn't have any errors, check the assertions */
-    if (ErrorCount == 0) {
-        CheckAssertions ();
-    }
-
-    /* Dump the data */
-    if (Verbosity >= 2) {
-        SymDump (stdout);
-        SegDump ();
-    }
-
-    /* If we didn't have an errors, finish off the line infos */
-    DoneLineInfo ();
-
-    /* If we didn't have any errors, create the object, listing and
-    ** dependency files
-    */
-    if (ErrorCount == 0) {
-        CreateObjFile ();
-        if (SB_GetLen (&ListingName) > 0) {
-            CreateListing ();
-        }
-       CreateDependencies ();
-    }
-
-    /* Close the input file */
-    DoneScanner ();
-
-    /* Return an apropriate exit code */
-    return (ErrorCount == 0)? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/src/ca65/nexttok.c b/src/ca65/nexttok.c
deleted file mode 100644 (file)
index 1521ed0..0000000
+++ /dev/null
@@ -1,818 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 nexttok.c                                 */
-/*                                                                           */
-/*              Get next token and handle token level functions              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-
-/* common */
-#include "chartype.h"
-#include "check.h"
-#include "strbuf.h"
-
-/* ca65 */
-#include "condasm.h"
-#include "error.h"
-#include "expr.h"
-#include "global.h"
-#include "scanner.h"
-#include "toklist.h"
-#include "nexttok.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-static unsigned RawMode = 0;            /* Raw token mode flag/counter */
-
-
-
-/*****************************************************************************/
-/*                              Error handling                               */
-/*****************************************************************************/
-
-
-
-static int LookAtStrCon (void)
-/* Make sure the next token is a string constant. If not, print an error
-** messages skip the remainder of the line and return false. Otherwise return
-** true.
-*/
-{
-    if (CurTok.Tok != TOK_STRCON) {
-        Error ("String constant expected");
-        SkipUntilSep ();
-        return 0;
-    } else {
-        return 1;
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static TokList* CollectTokens (unsigned Start, unsigned Count)
-/* Read a list of tokens that is optionally enclosed in curly braces and
-** terminated by a right paren. For all tokens starting at the one with index
-** Start, and ending at (Start+Count-1), place them into a token list, and
-** return this token list.
-*/
-{
-
-    /* Create the token list */
-    TokList* List = NewTokList ();
-
-    /* Determine if the list is enclosed in curly braces. */
-    token_t Term = GetTokListTerm (TOK_RPAREN);
-
-    /* Read the token list */
-    unsigned Current = 0;
-    while (CurTok.Tok != Term) {
-
-        /* Check for end of line or end of input */
-        if (TokIsSep (CurTok.Tok)) {
-            Error ("Unexpected end of line");
-            return List;
-        }
-
-        /* Collect tokens in the given range */
-        if (Current >= Start && Current < Start+Count) {
-            /* Add the current token to the list */
-            AddCurTok (List);
-        }
-
-        /* Get the next token */
-        ++Current;
-        NextTok ();
-    }
-
-    /* Eat the terminator token */
-    NextTok ();
-
-    /* If the list was enclosed in curly braces, we do expect now a right paren */
-    if (Term == TOK_RCURLY) {
-        ConsumeRParen ();
-    }
-
-    /* Return the list of collected tokens */
-    return List;
-}
-
-
-
-static void FuncConcat (void)
-/* Handle the .CONCAT function */
-{
-    StrBuf      Buf = STATIC_STRBUF_INITIALIZER;
-
-    /* Skip it */
-    NextTok ();
-
-    /* Left paren expected */
-    ConsumeLParen ();
-
-    /* Concatenate any number of strings */
-    while (1) {
-
-        /* Next token must be a string */
-        if (!LookAtStrCon ()) {
-            SB_Done (&Buf);
-            return;
-        }
-
-        /* Append the string */
-        SB_Append (&Buf, &CurTok.SVal);
-
-        /* Skip the string token */
-        NextTok ();
-
-        /* Comma means another argument */
-        if (CurTok.Tok == TOK_COMMA) {
-            NextTok ();
-        } else {
-            /* Done */
-            break;
-        }
-    }
-
-    /* We expect a closing parenthesis, but will not skip it but replace it
-    ** by the string token just created.
-    */
-    if (CurTok.Tok != TOK_RPAREN) {
-        Error ("`)' expected");
-    } else {
-        CurTok.Tok = TOK_STRCON;
-        SB_Copy (&CurTok.SVal, &Buf);
-        SB_Terminate (&CurTok.SVal);
-    }
-
-    /* Free the string buffer */
-    SB_Done (&Buf);
-}
-
-
-
-static void NoIdent (void)
-/* Print an error message and skip the remainder of the line */
-{
-    Error ("Argument of .IDENT is not a valid identifier");
-    SkipUntilSep ();
-}
-
-
-
-static void FuncIdent (void)
-/* Handle the .IDENT function */
-{
-    StrBuf    Buf = STATIC_STRBUF_INITIALIZER;
-    token_t   Id;
-    unsigned  I;
-
-    /* Skip it */
-    NextTok ();
-
-    /* Left paren expected */
-    ConsumeLParen ();
-
-    /* The function expects a string argument */
-    if (!LookAtStrCon ()) {
-        return;
-    }
-
-    /* Check that the string contains a valid identifier. While doing so,
-    ** determine if it is a cheap local, or global one.
-    */
-    SB_Reset (&CurTok.SVal);
-
-    /* Check for a cheap local symbol */
-    if (SB_Peek (&CurTok.SVal) == LocalStart) {
-        SB_Skip (&CurTok.SVal);
-        Id = TOK_LOCAL_IDENT;
-    } else {
-        Id = TOK_IDENT;
-    }
-
-    /* Next character must be a valid identifier start */
-    if (!IsIdStart (SB_Get (&CurTok.SVal))) {
-        NoIdent ();
-        return;
-    }
-    for (I = SB_GetIndex (&CurTok.SVal); I < SB_GetLen (&CurTok.SVal); ++I) {
-        if (!IsIdChar (SB_AtUnchecked (&CurTok.SVal, I))) {
-            NoIdent ();
-            return;
-        }
-    }
-    if (IgnoreCase) {
-        UpcaseSVal ();
-    }
-
-    /* If anything is ok, save and skip the string. Check that the next token
-    ** is a right paren, then replace the token by an identifier token.
-    */
-    SB_Copy (&Buf, &CurTok.SVal);
-    NextTok ();
-    if (CurTok.Tok != TOK_RPAREN) {
-        Error ("`)' expected");
-    } else {
-        CurTok.Tok = Id;
-        SB_Copy (&CurTok.SVal, &Buf);
-        SB_Terminate (&CurTok.SVal);
-    }
-
-    /* Free buffer memory */
-    SB_Done (&Buf);
-}
-
-
-
-static void FuncLeft (void)
-/* Handle the .LEFT function */
-{
-    long        Count;
-    TokList*    List;
-
-    /* Skip it */
-    NextTok ();
-
-    /* Left paren expected */
-    ConsumeLParen ();
-
-    /* Count argument. Correct negative counts to zero. */
-    Count = ConstExpression ();
-    if (Count < 0) {
-        Count = 0;
-    }
-    ConsumeComma ();
-
-    /* Read the token list */
-    List = CollectTokens (0, (unsigned) Count);
-
-    /* Since we want to insert the list before the now current token, we have
-    ** to save the current token in some way and then skip it. To do this, we
-    ** will add the current token at the end of the token list (so the list
-    ** will never be empty), push the token list, and then skip the current
-    ** token. This will replace the current token by the first token from the
-    ** list (which will be the old current token in case the list was empty).
-    */
-    AddCurTok (List);
-
-    /* Insert it into the scanner feed */
-    PushTokList (List, ".LEFT");
-
-    /* Skip the current token */
-    NextTok ();
-}
-
-
-
-static void FuncMid (void)
-/* Handle the .MID function */
-{
-    long        Start;
-    long        Count;
-    TokList*    List;
-
-    /* Skip it */
-    NextTok ();
-
-    /* Left paren expected */
-    ConsumeLParen ();
-
-    /* Start argument. Since the start argument can get negative with
-    ** expressions like ".tcount(arg)-2", we correct it to zero silently.
-    */
-    Start = ConstExpression ();
-    if (Start < 0 || Start > 100) {
-        Start = 0;
-    }
-    ConsumeComma ();
-
-    /* Count argument. Similar as above, we will accept negative counts and
-    ** correct them to zero silently.
-    */
-    Count = ConstExpression ();
-    if (Count < 0) {
-        Count = 0;
-    }
-    ConsumeComma ();
-
-    /* Read the token list */
-    List = CollectTokens ((unsigned) Start, (unsigned) Count);
-
-    /* Since we want to insert the list before the now current token, we have
-    ** to save the current token in some way and then skip it. To do this, we
-    ** will add the current token at the end of the token list (so the list
-    ** will never be empty), push the token list, and then skip the current
-    ** token. This will replace the current token by the first token from the
-    ** list (which will be the old current token in case the list was empty).
-    */
-    AddCurTok (List);
-
-    /* Insert it into the scanner feed */
-    PushTokList (List, ".MID");
-
-    /* Skip the current token */
-    NextTok ();
-}
-
-
-
-static void FuncRight (void)
-/* Handle the .RIGHT function */
-{
-    long        Count;
-    TokList*    List;
-
-    /* Skip it */
-    NextTok ();
-
-    /* Left paren expected */
-    ConsumeLParen ();
-
-    /* Count argument. Correct negative counts to zero. */
-    Count = ConstExpression ();
-    if (Count < 0) {
-        Count = 0;
-    }
-    ConsumeComma ();
-
-    /* Read the complete token list */
-    List = CollectTokens (0, 9999);
-
-    /* Delete tokens from the list until Count tokens are remaining */
-    while (List->Count > (unsigned) Count) {
-        /* Get the first node */
-        TokNode* T = List->Root;
-
-        /* Remove it from the list */
-        List->Root = List->Root->Next;
-
-        /* Free the node */
-        FreeTokNode (T);
-
-        /* Corrent the token counter */
-        List->Count--;
-    }
-
-    /* Since we want to insert the list before the now current token, we have
-    ** to save the current token in some way and then skip it. To do this, we
-    ** will add the current token at the end of the token list (so the list
-    ** will never be empty), push the token list, and then skip the current
-    ** token. This will replace the current token by the first token from the
-    ** list (which will be the old current token in case the list was empty).
-    */
-    AddCurTok (List);
-
-    /* Insert it into the scanner feed */
-    PushTokList (List, ".RIGHT");
-
-    /* Skip the current token */
-    NextTok ();
-}
-
-
-
-static void InvalidFormatString (void)
-/* Print an error message and skip the remainder of the line */
-{
-    Error ("Invalid format string");
-    SkipUntilSep ();
-}
-
-
-
-static void FuncSPrintF (void)
-/* Handle the .SPRINTF function */
-{
-    StrBuf      Format = STATIC_STRBUF_INITIALIZER; /* User supplied format */
-    StrBuf      R = STATIC_STRBUF_INITIALIZER;      /* Result string */
-    StrBuf      F1 = STATIC_STRBUF_INITIALIZER;     /* One format spec from F */
-    StrBuf      R1 = STATIC_STRBUF_INITIALIZER;     /* One result */
-    char        C;
-    int         Done;
-    long        IVal;                               /* Integer value */
-
-
-
-    /* Skip the .SPRINTF token */
-    NextTok ();
-
-    /* Left paren expected */
-    ConsumeLParen ();
-
-    /* First argument is a format string. Remember and skip it */
-    if (!LookAtStrCon ()) {
-        return;
-    }
-    SB_Copy (&Format, &CurTok.SVal);
-    NextTok ();
-
-    /* Walk over the format string, generating the function result in R */
-    while (1) {
-
-        /* Get the next char from the format string and check for EOS */
-        if (SB_Peek (&Format) == '\0') {
-            break;
-        }
-
-        /* Check for a format specifier */
-        if (SB_Peek (&Format) != '%') {
-            /* No format specifier, just copy */
-            SB_AppendChar (&R, SB_Get (&Format));
-            continue;
-        }
-        SB_Skip (&Format);
-        if (SB_Peek (&Format) == '%') {
-            /* %% */
-            SB_AppendChar (&R, '%');
-            SB_Skip (&Format);
-            continue;
-        }
-        if (SB_Peek (&Format) == '\0') {
-            InvalidFormatString ();
-            break;
-        }
-
-        /* Since a format specifier follows, we do expect another argument for
-        ** the .sprintf function.
-        */
-        ConsumeComma ();
-
-        /* We will copy the format spec into F1 checking for the things we
-        ** support, and later use xsprintf to do the actual formatting. This
-        ** is easier than adding another printf implementation...
-        */
-        SB_Clear (&F1);
-        SB_AppendChar (&F1, '%');
-
-        /* Check for flags */
-        Done = 0;
-        while ((C = SB_Peek (&Format)) != '\0' && !Done) {
-            switch (C) {
-                case '-': /* FALLTHROUGH */
-                case '+': /* FALLTHROUGH */
-                case ' ': /* FALLTHROUGH */
-                case '#': /* FALLTHROUGH */
-                case '0': SB_AppendChar (&F1, SB_Get (&Format));  break;
-                default:  Done = 1;                               break;
-            }
-        }
-
-        /* We do only support a numerical width field */
-        while (IsDigit (SB_Peek (&Format))) {
-            SB_AppendChar (&F1, SB_Get (&Format));
-        }
-
-        /* Precision - only positive numerical fields supported */
-        if (SB_Peek (&Format) == '.') {
-            SB_AppendChar (&F1, SB_Get (&Format));
-            while (IsDigit (SB_Peek (&Format))) {
-                SB_AppendChar (&F1, SB_Get (&Format));
-            }
-        }
-
-        /* Length modifiers aren't supported, so read the conversion specs */
-        switch (SB_Peek (&Format)) {
-
-            case 'd':
-            case 'i':
-            case 'o':
-            case 'u':
-            case 'X':
-            case 'x':
-                /* Our ints are actually longs, so we use the 'l' modifier when
-                ** calling xsprintf later. Terminate the format string.
-                */
-                SB_AppendChar (&F1, 'l');
-                SB_AppendChar (&F1, SB_Get (&Format));
-                SB_Terminate (&F1);
-
-                /* The argument must be a constant expression */
-                IVal = ConstExpression ();
-
-                /* Format this argument according to the spec */
-                SB_Printf (&R1, SB_GetConstBuf (&F1), IVal);
-
-                /* Append the formatted argument to the result */
-                SB_Append (&R, &R1);
-
-                break;
-
-            case 's':
-                /* Add the format spec and terminate the format */
-                SB_AppendChar (&F1, SB_Get (&Format));
-                SB_Terminate (&F1);
-
-                /* The argument must be a string constant */
-                if (!LookAtStrCon ()) {
-                    /* Make it one */
-                    SB_CopyStr (&CurTok.SVal, "**undefined**");
-                }
-
-                /* Format this argument according to the spec */
-                SB_Printf (&R1, SB_GetConstBuf (&F1), SB_GetConstBuf (&CurTok.SVal));
-
-                /* Skip the string constant */
-                NextTok ();
-
-                /* Append the formatted argument to the result */
-                SB_Append (&R, &R1);
-
-                break;
-
-            case 'c':
-                /* Add the format spec and terminate the format */
-                SB_AppendChar (&F1, SB_Get (&Format));
-                SB_Terminate (&F1);
-
-                /* The argument must be a constant expression */
-                IVal = ConstExpression ();
-
-                /* Check for a valid character range */
-                if (IVal <= 0 || IVal > 255) {
-                    Error ("Char argument out of range");
-                    IVal = ' ';
-                }
-
-                /* Format this argument according to the spec. Be sure to pass
-                ** an int as the char value.
-                */
-                SB_Printf (&R1, SB_GetConstBuf (&F1), (int) IVal);
-
-                /* Append the formatted argument to the result */
-                SB_Append (&R, &R1);
-
-                break;
-
-            default:
-                Error ("Invalid format string");
-                SB_Skip (&Format);
-                break;
-        }
-
-    }
-
-    /* Terminate the result string */
-    SB_Terminate (&R);
-
-    /* We expect a closing parenthesis, but will not skip it but replace it
-    ** by the string token just created.
-    */
-    if (CurTok.Tok != TOK_RPAREN) {
-        Error ("`)' expected");
-    } else {
-        CurTok.Tok = TOK_STRCON;
-        SB_Copy (&CurTok.SVal, &R);
-        SB_Terminate (&CurTok.SVal);
-    }
-
-
-    /* Delete the string buffers */
-    SB_Done (&Format);
-    SB_Done (&R);
-    SB_Done (&F1);
-    SB_Done (&R1);
-}
-
-
-
-static void FuncString (void)
-/* Handle the .STRING function */
-{
-    StrBuf Buf = STATIC_STRBUF_INITIALIZER;
-
-    /* Skip it */
-    NextTok ();
-
-    /* Left paren expected */
-    ConsumeLParen ();
-
-    /* Accept identifiers or numeric expressions */
-    if (CurTok.Tok == TOK_LOCAL_IDENT) {
-        /* Save the identifier, then skip it */
-        SB_Copy (&Buf, &CurTok.SVal);
-        NextTok ();
-    } else if (CurTok.Tok == TOK_NAMESPACE || CurTok.Tok == TOK_IDENT) {
-
-        /* Parse a fully qualified symbol name. We cannot use
-        ** ParseScopedSymName here since the name may be invalid.
-        */
-        int NameSpace;
-        do {
-            NameSpace = (CurTok.Tok == TOK_NAMESPACE);
-            if (NameSpace) {
-                SB_AppendStr (&Buf, "::");
-            } else {
-                SB_Append (&Buf, &CurTok.SVal);
-            }
-            NextTok ();
-        } while ((NameSpace != 0 && CurTok.Tok == TOK_IDENT) ||
-                 (NameSpace == 0 && CurTok.Tok == TOK_NAMESPACE));
-
-    } else {
-        /* Numeric expression */
-        long Val = ConstExpression ();
-        SB_Printf (&Buf, "%ld", Val);
-    }
-
-    /* We expect a closing parenthesis, but will not skip it but replace it
-    ** by the string token just created.
-    */
-    if (CurTok.Tok != TOK_RPAREN) {
-        Error ("`)' expected");
-    } else {
-        CurTok.Tok = TOK_STRCON;
-        SB_Copy (&CurTok.SVal, &Buf);
-        SB_Terminate (&CurTok.SVal);
-    }
-
-    /* Free string memory */
-    SB_Done (&Buf);
-}
-
-
-
-void NextTok (void)
-/* Get next token and handle token level functions */
-{
-    /* Get the next raw token */
-    NextRawTok ();
-
-    /* In raw mode, or when output is suppressed via conditional assembly,
-    ** pass the token unchanged.
-    */
-    if (RawMode == 0 && IfCond) {
-
-        /* Execute token handling functions */
-        switch (CurTok.Tok) {
-
-            case TOK_CONCAT:
-                FuncConcat ();
-                break;
-
-            case TOK_LEFT:
-                FuncLeft ();
-                break;
-
-            case TOK_MAKEIDENT:
-                FuncIdent ();
-                break;
-
-            case TOK_MID:
-                FuncMid ();
-                break;
-
-            case TOK_RIGHT:
-                FuncRight ();
-                break;
-
-            case TOK_SPRINTF:
-                FuncSPrintF ();
-                break;
-
-            case TOK_STRING:
-                FuncString ();
-                break;
-
-            default:
-                /* Quiet down gcc */
-                break;
-
-        }
-    }
-}
-
-
-
-void Consume (token_t Expected, const char* ErrMsg)
-/* Consume Expected, print an error if we don't find it */
-{
-    if (CurTok.Tok == Expected) {
-        NextTok ();
-    } else {
-        Error ("%s", ErrMsg);
-    }
-}
-
-
-
-void ConsumeSep (void)
-/* Consume a separator token */
-{
-    /* We expect a separator token */
-    ExpectSep ();
-
-    /* If we are at end of line, skip it */
-    if (CurTok.Tok == TOK_SEP) {
-        NextTok ();
-    }
-}
-
-
-
-void ConsumeLParen (void)
-/* Consume a left paren */
-{
-    Consume (TOK_LPAREN, "`(' expected");
-}
-
-
-
-void ConsumeRParen (void)
-/* Consume a right paren */
-{
-    Consume (TOK_RPAREN, "`)' expected");
-}
-
-
-
-void ConsumeComma (void)
-/* Consume a comma */
-{
-    Consume (TOK_COMMA, "`,' expected");
-}
-
-
-
-void SkipUntilSep (void)
-/* Skip tokens until we reach a line separator or end of file */
-{
-    while (!TokIsSep (CurTok.Tok)) {
-        NextTok ();
-    }
-}
-
-
-
-void ExpectSep (void)
-/* Check if we've reached a line separator, and output an error if not. Do
-** not skip the line separator.
-*/
-{
-    if (!TokIsSep (CurTok.Tok)) {
-        ErrorSkip ("Unexpected trailing garbage characters");
-    }
-}
-
-
-
-void EnterRawTokenMode (void)
-/* Enter raw token mode. In raw mode, token handling functions are not
-** executed, but the function tokens are passed untouched to the upper
-** layer. Raw token mode is used when storing macro tokens for later
-** use.
-** Calls to EnterRawTokenMode and LeaveRawTokenMode may be nested.
-*/
-{
-    ++RawMode;
-}
-
-
-
-void LeaveRawTokenMode (void)
-/* Leave raw token mode. */
-{
-    PRECONDITION (RawMode > 0);
-    --RawMode;
-}
diff --git a/src/ca65/nexttok.h b/src/ca65/nexttok.h
deleted file mode 100644 (file)
index 68a371a..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 nexttok.h                                 */
-/*                                                                           */
-/*              Get next token and handle token level functions              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef NEXTTOK_H
-#define NEXTTOK_H
-
-
-
-#include "scanner.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void NextTok (void);
-/* Get next token and handle token level functions */
-
-void Consume (token_t Expected, const char* ErrMsg);
-/* Consume Token, print an error if we don't find it */
-
-void ConsumeSep (void);
-/* Consume a separator token */
-
-void ConsumeLParen (void);
-/* Consume a left paren */
-
-void ConsumeRParen (void);
-/* Consume a right paren */
-
-void ConsumeComma (void);
-/* Consume a comma */
-
-void SkipUntilSep (void);
-/* Skip tokens until we reach a line separator or end of file */
-
-void ExpectSep (void);
-/* Check if we've reached a line separator, and output an error if not. Do
-** not skip the line separator.
-*/
-
-void EnterRawTokenMode (void);
-/* Enter raw token mode. In raw mode, token handling functions are not
-** executed, but the function tokens are passed untouched to the upper
-** layer. Raw token mode is used when storing macro tokens for later
-** use.
-** Calls to EnterRawTokenMode and LeaveRawTokenMode may be nested.
-*/
-
-void LeaveRawTokenMode (void);
-/* Leave raw token mode. */
-
-
-
-/* End of nexttok.h */
-
-#endif
diff --git a/src/ca65/objcode.c b/src/ca65/objcode.c
deleted file mode 100644 (file)
index d1ab4f6..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 objcode.c                                 */
-/*                                                                           */
-/*             Objectcode management for the ca65 macroassembler             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-#include <errno.h>
-
-/* cc65 */
-#include "error.h"
-#include "fragment.h"
-#include "objcode.h"
-#include "segment.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Emit0 (unsigned char OPC)
-/* Emit an instruction with a zero sized operand */
-{
-    Fragment* F = GenFragment (FRAG_LITERAL, 1);
-    F->V.Data[0] = OPC;
-}
-
-
-
-void Emit1 (unsigned char OPC, ExprNode* Value)
-/* Emit an instruction with an one byte argument */
-{
-    long V;
-    Fragment* F;
-
-    if (IsEasyConst (Value, &V)) {
-
-        /* Must be in byte range */
-        if (!IsByteRange (V)) {
-            Error ("Range error (%ld not in [0..255])", V);
-        }
-
-        /* Create a literal fragment */
-        F = GenFragment (FRAG_LITERAL, 2);
-        F->V.Data[0] = OPC;
-        F->V.Data[1] = (unsigned char) V;
-        FreeExpr (Value);
-
-    } else {
-
-        /* Emit the opcode */
-        Emit0 (OPC);
-
-        /* Emit the argument as an expression */
-        F = GenFragment (FRAG_EXPR, 1);
-        F->V.Expr = Value;
-    }
-}
-
-
-
-void Emit2 (unsigned char OPC, ExprNode* Value)
-/* Emit an instruction with a two byte argument */
-{
-    long V;
-    Fragment* F;
-
-    if (IsEasyConst (Value, &V)) {
-
-        /* Must be in byte range */
-        if (!IsWordRange (V)) {
-            Error ("Range error (%ld not in [0..65535])", V);
-        }
-
-        /* Create a literal fragment */
-        F = GenFragment (FRAG_LITERAL, 3);
-        F->V.Data[0] = OPC;
-        F->V.Data[1] = (unsigned char) V;
-        F->V.Data[2] = (unsigned char) (V >> 8);
-        FreeExpr (Value);
-
-    } else {
-
-        /* Emit the opcode */
-        Emit0 (OPC);
-
-        /* Emit the argument as an expression */
-        F = GenFragment (FRAG_EXPR, 2);
-        F->V.Expr = Value;
-    }
-}
-
-
-
-void Emit3 (unsigned char OPC, ExprNode* Expr)
-/* Emit an instruction with a three byte argument */
-{
-    Emit0 (OPC);
-    EmitFarAddr (Expr);
-}
-
-
-
-void EmitSigned (ExprNode* Expr, unsigned Size)
-/* Emit a signed expression with the given size */
-{
-    Fragment* F = GenFragment (FRAG_SEXPR, Size);
-    F->V.Expr = Expr;
-}
-
-
-
-void EmitPCRel (unsigned char OPC, ExprNode* Expr, unsigned Size)
-/* Emit an opcode with a PC relative argument of one or two bytes */
-{
-    Emit0 (OPC);
-    EmitSigned (Expr, Size);
-}
-
-
-
-void EmitData (const void* D, unsigned Size)
-/* Emit data into the current segment */
-{
-    /* Make a useful pointer from Data */
-    const unsigned char* Data = D;
-
-    /* Create lots of fragments for the data */
-    while (Size) {
-        Fragment* F;
-
-        /* Determine the length of the next fragment */
-        unsigned Len = Size;
-        if (Len > sizeof (F->V.Data)) {
-            Len = sizeof (F->V.Data);
-        }
-
-        /* Create a new fragment */
-        F = GenFragment (FRAG_LITERAL, Len);
-
-        /* Copy the data */
-        memcpy (F->V.Data, Data, Len);
-
-        /* Next chunk */
-        Data += Len;
-        Size -= Len;
-
-    }
-}
-
-
-
-void EmitStrBuf (const StrBuf* Data)
-/* Emit a string into the current segment */
-{
-    /* Use EmitData to output the data */
-    EmitData (SB_GetConstBuf (Data), SB_GetLen (Data));
-}
-
-
-
-void EmitByte (ExprNode* Expr)
-/* Emit one byte */
-{
-    long V;
-    Fragment* F;
-
-    if (IsEasyConst (Expr, &V)) {
-        /* Must be in byte range */
-        if (!IsByteRange (V)) {
-            Error ("Range error (%ld not in [0..255])", V);
-        }
-
-        /* Create a literal fragment */
-        F = GenFragment (FRAG_LITERAL, 1);
-        F->V.Data[0] = (unsigned char) V;
-        FreeExpr (Expr);
-    } else {
-        /* Emit the argument as an expression */
-        F = GenFragment (FRAG_EXPR, 1);
-        F->V.Expr = Expr;
-    }
-}
-
-
-
-void EmitWord (ExprNode* Expr)
-/* Emit one word */
-{
-    long V;
-    Fragment* F;
-
-    if (IsEasyConst (Expr, &V)) {
-        /* Must be in byte range */
-        if (!IsWordRange (V)) {
-            Error ("Range error (%ld not in [0..65535])", V);
-        }
-
-        /* Create a literal fragment */
-        F = GenFragment (FRAG_LITERAL, 2);
-        F->V.Data[0] = (unsigned char) V;
-        F->V.Data[1] = (unsigned char) (V >> 8);
-        FreeExpr (Expr);
-    } else {
-        /* Emit the argument as an expression */
-        Fragment* F = GenFragment (FRAG_EXPR, 2);
-        F->V.Expr = Expr;
-    }
-}
-
-
-
-void EmitFarAddr (ExprNode* Expr)
-/* Emit a 24 bit expression */
-{
-    /* Create a new fragment */
-    Fragment* F = GenFragment (FRAG_EXPR, 3);
-
-    /* Set the data */
-    F->V.Expr = Expr;
-}
-
-
-
-void EmitDWord (ExprNode* Expr)
-/* Emit one dword */
-{
-    /* Create a new fragment */
-    Fragment* F = GenFragment (FRAG_EXPR, 4);
-
-    /* Set the data */
-    F->V.Expr = Expr;
-}
-
-
-
-void EmitFill (unsigned long Count)
-/* Emit Count fill bytes */
-{
-    while (Count) {
-        /* Calculate the size of the next chunk */
-        unsigned Chunk = (Count > 0xFFFF)? 0xFFFF : (unsigned) Count;
-        Count -= Chunk;
-
-        /* Emit one chunk */
-        GenFragment (FRAG_FILL, Chunk);
-    }
-}
diff --git a/src/ca65/objcode.h b/src/ca65/objcode.h
deleted file mode 100644 (file)
index 70a0311..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 objcode.h                                 */
-/*                                                                           */
-/*             Objectcode management for the ca65 macroassembler             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2008 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OBJCODE_H
-#define OBJCODE_H
-
-
-
-/* ca65 */
-#include "expr.h"
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Emit0 (unsigned char OPC);
-/* Emit an instruction with a zero sized operand */
-
-void Emit1 (unsigned char OPC, ExprNode* Value);
-/* Emit an instruction with an one byte argument */
-
-void Emit2 (unsigned char OPC, ExprNode* Value);
-/* Emit an instruction with a two byte argument */
-
-void Emit3 (unsigned char OPC, ExprNode* Expr);
-/* Emit an instruction with a three byte argument */
-
-void EmitSigned (ExprNode* Expr, unsigned Size);
-/* Emit a signed expression with the given size */
-
-void EmitPCRel (unsigned char OPC, ExprNode* Expr, unsigned Size);
-/* Emit an opcode with a PC relative argument of one or two bytes */
-
-void EmitData (const void* Data, unsigned Size);
-/* Emit data into the current segment */
-
-void EmitStrBuf (const StrBuf* Data);
-/* Emit a string into the current segment */
-
-void EmitByte (ExprNode* Expr);
-/* Emit one byte */
-
-void EmitWord (ExprNode* Expr);
-/* Emit one word */
-
-void EmitFarAddr (ExprNode* Expr);
-/* Emit a 24 bit expression */
-
-void EmitDWord (ExprNode* Expr);
-/* Emit one dword */
-
-void EmitFill (unsigned long Count);
-/* Emit Count fill bytes */
-
-
-
-/* End of objcode.h */
-
-#endif
diff --git a/src/ca65/objfile.c b/src/ca65/objfile.c
deleted file mode 100644 (file)
index dfa0d14..0000000
+++ /dev/null
@@ -1,514 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 objfile.c                                 */
-/*                                                                           */
-/*         Object file writing routines for the ca65 macroassembler          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "fname.h"
-#include "objdefs.h"
-
-/* ca65 */
-#include "global.h"
-#include "error.h"
-#include "objfile.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* File descriptor */
-static FILE* F = 0;
-
-/* Default extension */
-#define OBJ_EXT ".o"
-
-/* Header structure */
-static ObjHeader Header = {
-    OBJ_MAGIC,          /* 32: Magic number */
-    OBJ_VERSION,        /* 16: Version number */
-    0,                  /* 16: flags */
-    0,                  /* 32: Offset to option table */
-    0,                  /* 32: Size of options */
-    0,                  /* 32: Offset to file table */
-    0,                  /* 32: Size of files */
-    0,                  /* 32: Offset to segment table */
-    0,                  /* 32: Size of segment table */
-    0,                  /* 32: Offset to import list */
-    0,                  /* 32: Size of import list */
-    0,                  /* 32: Offset to export list */
-    0,                  /* 32: Size of export list */
-    0,                  /* 32: Offset to list of debug symbols */
-    0,                  /* 32: Size of debug symbols */
-    0,                  /* 32: Offset to list of line infos */
-    0,                  /* 32: Size of line infos */
-    0,                  /* 32: Offset to string pool */
-    0,                  /* 32: Size of string pool */
-    0,                  /* 32: Offset to assertion table */
-    0,                  /* 32: Size of assertion table */
-    0,                  /* 32: Offset into scope table */
-    0,                  /* 32: Size of scope table */
-    0,                  /* 32: Offset into span table */
-    0,                  /* 32: Size of span table */
-};
-
-
-
-/*****************************************************************************/
-/*                         Internally used functions                         */
-/*****************************************************************************/
-
-
-
-static void ObjWriteError (void)
-/* Called on a write error. Will try to close and remove the file, then
-** print a fatal error.
-*/
-{
-    /* Remember the error */
-    int Error = errno;
-
-    /* Force a close of the file, ignoring errors */
-    fclose (F);
-
-    /* Try to remove the file, also ignoring errors */
-    remove (OutFile);
-
-    /* Now abort with a fatal error */
-    Fatal ("Cannot write to output file `%s': %s", OutFile, strerror (Error));
-}
-
-
-
-static void ObjWriteHeader (void)
-/* Write the object file header to the current file position */
-{
-    ObjWrite32 (Header.Magic);
-    ObjWrite16 (Header.Version);
-    ObjWrite16 (Header.Flags);
-    ObjWrite32 (Header.OptionOffs);
-    ObjWrite32 (Header.OptionSize);
-    ObjWrite32 (Header.FileOffs);
-    ObjWrite32 (Header.FileSize);
-    ObjWrite32 (Header.SegOffs);
-    ObjWrite32 (Header.SegSize);
-    ObjWrite32 (Header.ImportOffs);
-    ObjWrite32 (Header.ImportSize);
-    ObjWrite32 (Header.ExportOffs);
-    ObjWrite32 (Header.ExportSize);
-    ObjWrite32 (Header.DbgSymOffs);
-    ObjWrite32 (Header.DbgSymSize);
-    ObjWrite32 (Header.LineInfoOffs);
-    ObjWrite32 (Header.LineInfoSize);
-    ObjWrite32 (Header.StrPoolOffs);
-    ObjWrite32 (Header.StrPoolSize);
-    ObjWrite32 (Header.AssertOffs);
-    ObjWrite32 (Header.AssertSize);
-    ObjWrite32 (Header.ScopeOffs);
-    ObjWrite32 (Header.ScopeSize);
-    ObjWrite32 (Header.SpanOffs);
-    ObjWrite32 (Header.SpanSize);
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void ObjOpen (void)
-/* Open the object file for writing, write a dummy header */
-{
-    /* Do we have a name for the output file? */
-    if (OutFile == 0) {
-        /* We don't have an output name explicitly given, construct one from
-        ** the name of the input file.
-        */
-        OutFile = MakeFilename (InFile, OBJ_EXT);
-    }
-
-    /* Create the output file */
-    F = fopen (OutFile, "w+b");
-    if (F == 0) {
-        Fatal ("Cannot open output file `%s': %s", OutFile, strerror (errno));
-    }
-
-    /* Write a dummy header */
-    ObjWriteHeader ();
-}
-
-
-
-void ObjClose (void)
-/* Write an update header and close the object file. */
-{
-    /* Go back to the beginning */
-    if (fseek (F, 0, SEEK_SET) != 0) {
-        ObjWriteError ();
-    }
-
-    /* If we have debug infos, set the flag in the header */
-    if (DbgSyms) {
-        Header.Flags |= OBJ_FLAGS_DBGINFO;
-    }
-
-    /* Write the updated header */
-    ObjWriteHeader ();
-
-    /* Close the file */
-    if (fclose (F) != 0) {
-        ObjWriteError ();
-    }
-}
-
-
-
-unsigned long ObjGetFilePos (void)
-/* Get the current file position */
-{
-    long Pos = ftell (F);
-    if (Pos < 0) {
-        ObjWriteError ();
-    }
-    return Pos;
-}
-
-
-
-void ObjSetFilePos (unsigned long Pos)
-/* Set the file position */
-{
-    if (fseek (F, Pos, SEEK_SET) != 0) {
-        ObjWriteError ();
-    }
-}
-
-
-
-void ObjWrite8 (unsigned V)
-/* Write an 8 bit value to the file */
-{
-    if (putc (V, F) == EOF) {
-        ObjWriteError ();
-    }
-}
-
-
-
-void ObjWrite16 (unsigned V)
-/* Write a 16 bit value to the file */
-{
-    ObjWrite8 (V);
-    ObjWrite8 (V >> 8);
-}
-
-
-
-void ObjWrite24 (unsigned long V)
-/* Write a 24 bit value to the file */
-{
-    ObjWrite8 (V);
-    ObjWrite8 (V >> 8);
-    ObjWrite8 (V >> 16);
-}
-
-
-
-void ObjWrite32 (unsigned long V)
-/* Write a 32 bit value to the file */
-{
-    ObjWrite8 (V);
-    ObjWrite8 (V >> 8);
-    ObjWrite8 (V >> 16);
-    ObjWrite8 (V >> 24);
-}
-
-
-
-void ObjWriteVar (unsigned long V)
-/* Write a variable sized value to the file in special encoding */
-{
-    /* We will write the value to the file in 7 bit chunks. If the 8th bit
-    ** is clear, we're done, if it is set, another chunk follows. This will
-    ** allow us to encode smaller values with less bytes, at the expense of
-    ** needing 5 bytes if a 32 bit value is written to file.
-    */
-    do {
-        unsigned char C = (V & 0x7F);
-        V >>= 7;
-        if (V) {
-            C |= 0x80;
-        }
-        ObjWrite8 (C);
-    } while (V != 0);
-}
-
-
-
-void ObjWriteStr (const char* S)
-/* Write a string to the object file */
-{
-    unsigned Len = strlen (S);
-
-    /* Write the string with the length preceeded (this is easier for
-    ** the reading routine than the C format since the length is known in
-    ** advance).
-    */
-    ObjWriteVar (Len);
-    ObjWriteData (S, Len);
-}
-
-
-
-void ObjWriteBuf (const StrBuf* S)
-/* Write a string to the object file */
-{
-    /* Write the string with the length preceeded (this is easier for
-    ** the reading routine than the C format since the length is known in
-    ** advance).
-    */
-    ObjWriteVar (SB_GetLen (S));
-    ObjWriteData (SB_GetConstBuf (S), SB_GetLen (S));
-}
-
-
-
-void ObjWriteData (const void* Data, unsigned Size)
-/* Write literal data to the file */
-{
-    if (fwrite (Data, 1, Size, F) != Size) {
-        ObjWriteError ();
-    }
-}
-
-
-
-void ObjWritePos (const FilePos* Pos)
-/* Write a file position to the object file */
-{
-    /* Write the data entries */
-    ObjWriteVar (Pos->Line);
-    ObjWriteVar (Pos->Col);
-    if (Pos->Name == 0) {
-        /* Position is outside file scope, use the main file instead */
-        ObjWriteVar (0);
-    } else {
-        ObjWriteVar (Pos->Name - 1);
-    }
-}
-
-
-
-void ObjStartOptions (void)
-/* Mark the start of the option section */
-{
-    Header.OptionOffs = ftell (F);
-}
-
-
-
-void ObjEndOptions (void)
-/* Mark the end of the option section */
-{
-    Header.OptionSize = ftell (F) - Header.OptionOffs;
-}
-
-
-
-void ObjStartFiles (void)
-/* Mark the start of the files section */
-{
-    Header.FileOffs = ftell (F);
-}
-
-
-
-void ObjEndFiles (void)
-/* Mark the end of the files section */
-{
-    Header.FileSize = ftell (F) - Header.FileOffs;
-}
-
-
-
-void ObjStartSegments (void)
-/* Mark the start of the segment section */
-{
-    Header.SegOffs = ftell (F);
-}
-
-
-
-void ObjEndSegments (void)
-/* Mark the end of the segment section */
-{
-    Header.SegSize = ftell (F) - Header.SegOffs;
-}
-
-
-
-void ObjStartImports (void)
-/* Mark the start of the import section */
-{
-    Header.ImportOffs = ftell (F);
-}
-
-
-
-void ObjEndImports (void)
-/* Mark the end of the import section */
-{
-    Header.ImportSize = ftell (F) - Header.ImportOffs;
-}
-
-
-
-void ObjStartExports (void)
-/* Mark the start of the export section */
-{
-    Header.ExportOffs = ftell (F);
-}
-
-
-
-void ObjEndExports (void)
-/* Mark the end of the export section */
-{
-    Header.ExportSize = ftell (F) - Header.ExportOffs;
-}
-
-
-
-void ObjStartDbgSyms (void)
-/* Mark the start of the debug symbol section */
-{
-    Header.DbgSymOffs = ftell (F);
-}
-
-
-
-void ObjEndDbgSyms (void)
-/* Mark the end of the debug symbol section */
-{
-    Header.DbgSymSize = ftell (F) - Header.DbgSymOffs;
-}
-
-
-
-void ObjStartLineInfos (void)
-/* Mark the start of the line info section */
-{
-    Header.LineInfoOffs = ftell (F);
-}
-
-
-
-void ObjEndLineInfos (void)
-/* Mark the end of the line info section */
-{
-    Header.LineInfoSize = ftell (F) - Header.LineInfoOffs;
-}
-
-
-
-void ObjStartStrPool (void)
-/* Mark the start of the string pool section */
-{
-    Header.StrPoolOffs = ftell (F);
-}
-
-
-
-void ObjEndStrPool (void)
-/* Mark the end of the string pool section */
-{
-    Header.StrPoolSize = ftell (F) - Header.StrPoolOffs;
-}
-
-
-
-void ObjStartAssertions (void)
-/* Mark the start of the assertion table */
-{
-    Header.AssertOffs = ftell (F);
-}
-
-
-
-void ObjEndAssertions (void)
-/* Mark the end of the assertion table */
-{
-    Header.AssertSize = ftell (F) - Header.AssertOffs;
-}
-
-
-
-void ObjStartScopes (void)
-/* Mark the start of the scope table */
-{
-    Header.ScopeOffs = ftell (F);
-}
-
-
-
-void ObjEndScopes (void)
-/* Mark the end of the scope table */
-{
-    Header.ScopeSize = ftell (F) - Header.ScopeOffs;
-}
-
-
-
-void ObjStartSpans (void)
-/* Mark the start of the span table */
-{
-    Header.SpanOffs = ftell (F);
-}
-
-
-
-void ObjEndSpans (void)
-/* Mark the end of the span table */
-{
-    Header.SpanSize = ftell (F) - Header.SpanOffs;
-}
diff --git a/src/ca65/objfile.h b/src/ca65/objfile.h
deleted file mode 100644 (file)
index c1d1487..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 objfile.h                                 */
-/*                                                                           */
-/*         Object file writing routines for the ca65 macroassembler          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OBJFILE_H
-#define OBJFILE_H
-
-
-
-/* common */
-#include "filepos.h"
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void ObjOpen (void);
-/* Open the object file for writing, write a dummy header */
-
-void ObjClose (void);
-/* Write an update header and close the object file. */
-
-unsigned long ObjGetFilePos (void);
-/* Get the current file position */
-
-void ObjSetFilePos (unsigned long Pos);
-/* Set the file position */
-
-void ObjWrite8 (unsigned V);
-/* Write an 8 bit value to the file */
-
-void ObjWrite16 (unsigned V);
-/* Write a 16 bit value to the file */
-
-void ObjWrite24 (unsigned long V);
-/* Write a 24 bit value to the file */
-
-void ObjWrite32 (unsigned long V);
-/* Write a 32 bit value to the file */
-
-void ObjWriteVar (unsigned long V);
-/* Write a variable sized value to the file in special encoding */
-
-void ObjWriteStr (const char* S);
-/* Write a string to the object file */
-
-void ObjWriteBuf (const StrBuf* S);
-/* Write a string to the object file */
-
-void ObjWriteData (const void* Data, unsigned Size);
-/* Write literal data to the file */
-
-void ObjWritePos (const FilePos* Pos);
-/* Write a file position to the object file */
-
-void ObjStartOptions (void);
-/* Mark the start of the option section */
-
-void ObjEndOptions (void);
-/* Mark the end of the option section */
-
-void ObjStartFiles (void);
-/* Mark the start of the files section */
-
-void ObjEndFiles (void);
-/* Mark the end of the files section */
-
-void ObjStartSegments (void);
-/* Mark the start of the segment section */
-
-void ObjEndSegments (void);
-/* Mark the end of the segment section */
-
-void ObjStartImports (void);
-/* Mark the start of the import section */
-
-void ObjEndImports (void);
-/* Mark the end of the import section */
-
-void ObjStartExports (void);
-/* Mark the start of the export section */
-
-void ObjEndExports (void);
-/* Mark the end of the export section */
-
-void ObjStartDbgSyms (void);
-/* Mark the start of the debug symbol section */
-
-void ObjEndDbgSyms (void);
-/* Mark the end of the debug symbol section */
-
-void ObjStartLineInfos (void);
-/* Mark the start of the line info section */
-
-void ObjEndLineInfos (void);
-/* Mark the end of the line info section */
-
-void ObjStartStrPool (void);
-/* Mark the start of the string pool section */
-
-void ObjEndStrPool (void);
-/* Mark the end of the string pool section */
-
-void ObjStartAssertions (void);
-/* Mark the start of the assertion table */
-
-void ObjEndAssertions (void);
-/* Mark the end of the assertion table */
-
-void ObjStartScopes (void);
-/* Mark the start of the scope table */
-
-void ObjEndScopes (void);
-/* Mark the end of the scope table */
-
-void ObjStartSpans (void);
-/* Mark the start of the span table */
-
-void ObjEndSpans (void);
-/* Mark the end of the span table */
-
-
-
-/* End of objfile.h */
-
-#endif
diff --git a/src/ca65/options.c b/src/ca65/options.c
deleted file mode 100644 (file)
index c71296a..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 options.c                                 */
-/*                                                                           */
-/*              Object file options for the ca65 macroassembler              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2008, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "optdefs.h"
-#include "xmalloc.h"
-
-/* ca65 */
-#include "error.h"
-#include "objfile.h"
-#include "options.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Option list */
-static Option*          OptRoot = 0;
-static Option*          OptLast = 0;
-static unsigned         OptCount = 0;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static Option* NewOption (unsigned char Type, unsigned long Val)
-/* Create a new option, insert it into the list and return it */
-{
-    Option* Opt;
-
-    /* Allocate memory */
-    Opt = xmalloc (sizeof (*Opt));
-
-    /* Initialize fields */
-    Opt->Next  = 0;
-    Opt->Type  = Type;
-    Opt->Val   = Val;
-
-    /* Insert it into the list */
-    if (OptRoot == 0) {
-        OptRoot = Opt;
-    } else {
-        OptLast->Next = Opt;
-    }
-    OptLast = Opt;
-
-    /* One more option now */
-    ++OptCount;
-
-    /* Return the new struct */
-    return Opt;
-}
-
-
-
-void OptStr (unsigned char Type, const StrBuf* Text)
-/* Add a string option */
-{
-    NewOption (Type, GetStrBufId (Text));
-}
-
-
-
-void OptComment (const StrBuf* Comment)
-/* Add a comment */
-{
-    NewOption (OPT_COMMENT, GetStrBufId (Comment));
-}
-
-
-
-void OptAuthor (const StrBuf* Author)
-/* Add an author statement */
-{
-    NewOption (OPT_AUTHOR, GetStrBufId (Author));
-}
-
-
-
-void OptTranslator (const StrBuf* Translator)
-/* Add a translator option */
-{
-    NewOption (OPT_TRANSLATOR, GetStrBufId (Translator));
-}
-
-
-
-void OptCompiler (const StrBuf* Compiler)
-/* Add a compiler option */
-{
-    NewOption (OPT_COMPILER, GetStrBufId (Compiler));
-}
-
-
-
-void OptOS (const StrBuf* OS)
-/* Add an operating system option */
-{
-    NewOption (OPT_OS, GetStrBufId (OS));
-}
-
-
-
-void OptDateTime (unsigned long DateTime)
-/* Add a date/time option */
-{
-    NewOption (OPT_DATETIME, DateTime);
-}
-
-
-
-void WriteOptions (void)
-/* Write the options to the object file */
-{
-    Option* O;
-
-    /* Tell the object file module that we're about to start the options */
-    ObjStartOptions ();
-
-    /* Write the option count */
-    ObjWriteVar (OptCount);
-
-    /* Walk through the list and write the options */
-    O = OptRoot;
-    while (O) {
-
-        /* Write the type of the option, then the value */
-        ObjWrite8 (O->Type);
-        ObjWriteVar (O->Val);
-
-        /* Next option */
-        O = O->Next;
-
-    }
-
-    /* Done writing options */
-    ObjEndOptions ();
-}
-
-
-
-                        
diff --git a/src/ca65/options.h b/src/ca65/options.h
deleted file mode 100644 (file)
index 96eb90b..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 options.h                                 */
-/*                                                                           */
-/*              Object file options for the ca65 macroassembler              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2008, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OPTIONS_H
-#define OPTIONS_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void OptStr (unsigned char Type, const StrBuf* Text);
-/* Add a string option */
-
-void OptComment (const StrBuf* Comment);
-/* Add a comment */
-
-void OptAuthor (const StrBuf* Author);
-/* Add an author statement */
-
-void OptTranslator (const StrBuf* Translator);
-/* Add a translator option */
-
-void OptCompiler (const StrBuf* Compiler);
-/* Add a compiler option */
-
-void OptOS (const StrBuf* OS);
-/* Add an operating system option */
-
-void OptDateTime (unsigned long DateTime);
-/* Add a date/time option */
-
-void WriteOptions (void);
-/* Write the options to the object file */
-
-
-
-/* End of options.h */
-
-#endif
diff --git a/src/ca65/pseudo.c b/src/ca65/pseudo.c
deleted file mode 100644 (file)
index 4484e3c..0000000
+++ /dev/null
@@ -1,2150 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 pseudo.c                                  */
-/*                                                                           */
-/*              Pseudo instructions for the ca65 macroassembler              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-
-/* common */
-#include "alignment.h"
-#include "assertion.h"
-#include "bitops.h"
-#include "cddefs.h"
-#include "coll.h"
-#include "filestat.h"
-#include "gentype.h"
-#include "intstack.h"
-#include "scopedefs.h"
-#include "symdefs.h"
-#include "tgttrans.h"
-#include "xmalloc.h"
-
-/* ca65 */
-#include "anonname.h"
-#include "asserts.h"
-#include "condasm.h"
-#include "dbginfo.h"
-#include "enum.h"
-#include "error.h"
-#include "expr.h"
-#include "feature.h"
-#include "filetab.h"
-#include "global.h"
-#include "incpath.h"
-#include "instr.h"
-#include "listing.h"
-#include "macro.h"
-#include "nexttok.h"
-#include "objcode.h"
-#include "options.h"
-#include "pseudo.h"
-#include "repeat.h"
-#include "segment.h"
-#include "sizeof.h"
-#include "span.h"
-#include "spool.h"
-#include "struct.h"
-#include "symbol.h"
-#include "symtab.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Keyword we're about to handle */
-static StrBuf Keyword = STATIC_STRBUF_INITIALIZER;
-
-/* CPU stack */
-static IntStack CPUStack = STATIC_INTSTACK_INITIALIZER;
-
-/* Segment stack */
-#define MAX_PUSHED_SEGMENTS     16
-static Collection SegStack = STATIC_COLLECTION_INITIALIZER;
-
-
-
-/*****************************************************************************/
-/*                               Forwards                                    */
-/*****************************************************************************/
-
-
-
-static void DoUnexpected (void);
-/* Got an unexpected keyword */
-
-static void DoInvalid (void);
-/* Handle a token that is invalid here, since it should have been handled on
-** a much lower level of the expression hierarchy. Getting this sort of token
-** means that the lower level code has bugs.
-** This function differs to DoUnexpected in that the latter may be triggered
-** by the user by using keywords in the wrong location. DoUnexpected is not
-** an error in the assembler itself, while DoInvalid is.
-*/
-
-
-
-/*****************************************************************************/
-/*                              Helper functions                             */
-/*****************************************************************************/
-
-
-
-static unsigned char OptionalAddrSize (void)
-/* If a colon follows, parse an optional address size spec and return it.
-** Otherwise return ADDR_SIZE_DEFAULT.
-*/
-{
-    unsigned AddrSize = ADDR_SIZE_DEFAULT;
-    if (CurTok.Tok == TOK_COLON) {
-        NextTok ();
-        AddrSize = ParseAddrSize ();
-        if (!ValidAddrSizeForCPU (AddrSize)) {
-            /* Print an error and reset to default */
-            Error ("Invalid address size specification for current CPU");
-            AddrSize = ADDR_SIZE_DEFAULT;
-        }
-        NextTok ();
-    }
-    return AddrSize;
-}
-
-
-
-static void SetBoolOption (unsigned char* Flag)
-/* Read a on/off/+/- option and set flag accordingly */
-{
-    static const char* Keys[] = {
-        "OFF",
-        "ON",
-    };
-
-    if (CurTok.Tok == TOK_PLUS) {
-        *Flag = 1;
-        NextTok ();
-    } else if (CurTok.Tok == TOK_MINUS) {
-        *Flag = 0;
-        NextTok ();
-    } else if (CurTok.Tok == TOK_IDENT) {
-        /* Map the keyword to a number */
-        switch (GetSubKey (Keys, sizeof (Keys) / sizeof (Keys [0]))) {
-            case 0:     *Flag = 0; NextTok ();                  break;
-            case 1:     *Flag = 1; NextTok ();                  break;
-            default:    ErrorSkip ("`on' or `off' expected");   break;
-        }
-    } else if (TokIsSep (CurTok.Tok)) {
-        /* Without anything assume switch on */
-        *Flag = 1;
-    } else {
-        ErrorSkip ("`on' or `off' expected");
-    }
-}
-
-
-
-static void ExportWithAssign (SymEntry* Sym, unsigned char AddrSize, unsigned Flags)
-/* Allow to assign the value of an export in an .export statement */
-{
-    /* The name and optional address size spec may be followed by an assignment
-    ** or equal token.
-    */
-    if (CurTok.Tok == TOK_ASSIGN || CurTok.Tok == TOK_EQ) {
-
-        /* Assignment means the symbol is a label */
-        if (CurTok.Tok == TOK_ASSIGN) {
-            Flags |= SF_LABEL;
-        }
-
-        /* Skip the assignment token */
-        NextTok ();
-
-        /* Define the symbol with the expression following the '=' */
-        SymDef (Sym, Expression(), ADDR_SIZE_DEFAULT, Flags);
-
-    }
-
-    /* Now export the symbol */
-    SymExport (Sym, AddrSize, Flags);
-}
-
-
-
-static void ExportImport (void (*Func) (SymEntry*, unsigned char, unsigned),
-                          unsigned char DefAddrSize, unsigned Flags)
-/* Export or import symbols */
-{
-    SymEntry* Sym;
-    unsigned char AddrSize;
-
-    while (1) {
-
-        /* We need an identifier here */
-        if (CurTok.Tok != TOK_IDENT) {
-            ErrorSkip ("Identifier expected");
-            return;
-        }
-
-        /* Find the symbol table entry, allocate a new one if necessary */
-        Sym = SymFind (CurrentScope, &CurTok.SVal, SYM_ALLOC_NEW);
-
-        /* Skip the name */
-        NextTok ();
-
-        /* Get an optional address size */
-        AddrSize = OptionalAddrSize ();
-        if (AddrSize == ADDR_SIZE_DEFAULT) {
-            AddrSize = DefAddrSize;
-        }
-
-        /* Call the actual import/export function */
-        Func (Sym, AddrSize, Flags);
-
-        /* More symbols? */
-        if (CurTok.Tok == TOK_COMMA) {
-            NextTok ();
-        } else {
-            break;
-        }
-    }
-}
-
-
-
-static long IntArg (long Min, long Max)
-/* Read an integer argument and check a range. Accept the token "unlimited"
-** and return -1 in this case.
-*/
-{
-    if (CurTok.Tok == TOK_IDENT && SB_CompareStr (&CurTok.SVal, "unlimited") == 0) {
-        NextTok ();
-        return -1;
-    } else {
-        long Val = ConstExpression ();
-        if (Val < Min || Val > Max) {
-            Error ("Range error");
-            Val = Min;
-        }
-        return Val;
-    }
-}
-
-
-
-static void ConDes (const StrBuf* Name, unsigned Type)
-/* Parse remaining line for constructor/destructor of the remaining type */
-{
-    long Prio;
-
-
-    /* Find the symbol table entry, allocate a new one if necessary */
-    SymEntry* Sym = SymFind (CurrentScope, Name, SYM_ALLOC_NEW);
-
-    /* Optional constructor priority */
-    if (CurTok.Tok == TOK_COMMA) {
-        /* Priority value follows */
-        NextTok ();
-        Prio = ConstExpression ();
-        if (Prio < CD_PRIO_MIN || Prio > CD_PRIO_MAX) {
-            /* Value out of range */
-            Error ("Range error");
-            return;
-        }
-    } else {
-        /* Use the default priority value */
-        Prio = CD_PRIO_DEF;
-    }
-
-    /* Define the symbol */
-    SymConDes (Sym, ADDR_SIZE_DEFAULT, Type, (unsigned) Prio);
-}
-
-
-
-static StrBuf* GenArrayType (StrBuf* Type, unsigned SpanSize,
-                             const char* ElementType,
-                             unsigned ElementTypeLen)
-/* Create an array (or single data) of the given type. SpanSize is the size
-** of the span, ElementType is a string that encodes the element data type.
-** The function returns Type.
-*/
-{
-    /* Get the size of the element type */
-    unsigned ElementSize = GT_GET_SIZE (ElementType[0]);
-
-    /* Get the number of array elements */
-    unsigned ElementCount = SpanSize / ElementSize;
-
-    /* The span size must be divideable by the element size */
-    CHECK ((SpanSize % ElementSize) == 0);
-
-    /* Encode the array */
-    GT_AddArray (Type, ElementCount);
-    SB_AppendBuf (Type, ElementType, ElementTypeLen);
-
-    /* Return the pointer to the created array type */
-    return Type;
-}
-
-
-
-/*****************************************************************************/
-/*                             Handler functions                             */
-/*****************************************************************************/
-
-
-
-static void DoA16 (void)
-/* Switch the accu to 16 bit mode (assembler only) */
-{
-    if (GetCPU() != CPU_65816) {
-        Error ("Command is only valid in 65816 mode");
-    } else {
-        /* Immidiate mode has two extension bytes */
-        ExtBytes [AM65I_IMM_ACCU] = 2;
-    }
-}
-
-
-
-static void DoA8 (void)
-/* Switch the accu to 8 bit mode (assembler only) */
-{
-    if (GetCPU() != CPU_65816) {
-        Error ("Command is only valid in 65816 mode");
-    } else {
-        /* Immidiate mode has one extension byte */
-        ExtBytes [AM65I_IMM_ACCU] = 1;
-    }
-}
-
-
-
-static void DoAddr (void)
-/* Define addresses */
-{
-    /* Element type for the generated array */
-    static const char EType[2] = { GT_PTR, GT_VOID };
-
-    /* Record type information */
-    Span* S = OpenSpan ();
-    StrBuf Type = STATIC_STRBUF_INITIALIZER;
-
-    /* Parse arguments */
-    while (1) {
-        ExprNode* Expr = Expression ();
-        if (GetCPU () == CPU_65816 || ForceRange) {
-            /* Do a range check */
-            Expr = GenWordExpr (Expr);
-        }
-        EmitWord (Expr);
-        if (CurTok.Tok != TOK_COMMA) {
-            break;
-        } else {
-            NextTok ();
-        }
-    }
-
-    /* Close the span, then add type information to it */
-    S = CloseSpan (S);
-    SetSpanType (S, GenArrayType (&Type, GetSpanSize (S), EType, sizeof (EType)));
-
-    /* Free the strings */
-    SB_Done (&Type);
-}
-
-
-
-static void DoAlign (void)
-/* Align the PC to some boundary */
-{
-    long FillVal;
-    long Alignment;
-
-    /* Read the alignment value */
-    Alignment = ConstExpression ();
-    if (Alignment <= 0 || (unsigned long) Alignment > MAX_ALIGNMENT) {
-        ErrorSkip ("Range error");
-        return;
-    }
-
-    /* Optional value follows */
-    if (CurTok.Tok == TOK_COMMA) {
-        NextTok ();
-        FillVal = ConstExpression ();
-        /* We need a byte value here */
-        if (!IsByteRange (FillVal)) {
-            ErrorSkip ("Range error");
-            return;
-        }
-    } else {
-        FillVal = -1;
-    }
-
-    /* Generate the alignment */
-    SegAlign (Alignment, (int) FillVal);
-}
-
-
-
-static void DoASCIIZ (void)
-/* Define text with a zero terminator */
-{
-    while (1) {
-        /* Must have a string constant */
-        if (CurTok.Tok != TOK_STRCON) {
-            ErrorSkip ("String constant expected");
-            return;
-        }
-
-        /* Translate into target charset and emit */
-        TgtTranslateStrBuf (&CurTok.SVal);
-        EmitStrBuf (&CurTok.SVal);
-        NextTok ();
-        if (CurTok.Tok == TOK_COMMA) {
-            NextTok ();
-        } else {
-            break;
-        }
-    }
-    Emit0 (0);
-}
-
-
-
-static void DoAssert (void)
-/* Add an assertion */
-{
-    static const char* ActionTab [] = {
-        "WARN", "WARNING",
-        "ERROR",
-        "LDWARN", "LDWARNING",
-        "LDERROR",
-    };
-
-    AssertAction Action;
-    unsigned     Msg;
-
-    /* First we have the expression that has to evaluated */
-    ExprNode* Expr = Expression ();
-    ConsumeComma ();
-
-    /* Action follows */
-    if (CurTok.Tok != TOK_IDENT) {
-        ErrorSkip ("Identifier expected");
-        return;
-    }
-    switch (GetSubKey (ActionTab, sizeof (ActionTab) / sizeof (ActionTab[0]))) {
-
-        case 0:
-        case 1:
-            /* Warning */
-            Action = ASSERT_ACT_WARN;
-            break;
-
-        case 2:
-            /* Error */
-            Action = ASSERT_ACT_ERROR;
-            break;
-
-        case 3:
-        case 4:
-            /* Linker warning */
-            Action = ASSERT_ACT_LDWARN;
-            break;
-
-        case 5:
-            /* Linker error */
-            Action = ASSERT_ACT_LDERROR;
-            break;
-
-        default:
-            Error ("Illegal assert action specifier");
-            /* Use lderror - there won't be an .o file anyway */
-            Action = ASSERT_ACT_LDERROR;
-            break;
-
-    }
-    NextTok ();
-
-    /* We can have an optional message. If no message is present, use
-    ** "Assertion failed".
-    */
-    if (CurTok.Tok == TOK_COMMA) {
-
-        /* Skip the comma */
-        NextTok ();
-
-        /* Read the message */
-        if (CurTok.Tok != TOK_STRCON) {
-            ErrorSkip ("String constant expected");
-            return;
-        }
-
-        /* Translate the message into a string id. We can then skip the input
-        ** string.
-        */
-        Msg = GetStrBufId (&CurTok.SVal);
-        NextTok ();
-
-    } else {
-
-        /* Use "Assertion failed" */
-        Msg = GetStringId ("Assertion failed");
-
-    }
-
-    /* Remember the assertion */
-    AddAssertion (Expr, (AssertAction) Action, Msg);
-}
-
-
-
-static void DoAutoImport (void)
-/* Mark unresolved symbols as imported */
-{
-    SetBoolOption (&AutoImport);
-}
-
-
-static void DoBankBytes (void)
-/* Define bytes, extracting the bank byte from each expression in the list */
-{
-    while (1) {
-        EmitByte (FuncBankByte ());
-        if (CurTok.Tok != TOK_COMMA) {
-            break;
-        } else {
-            NextTok ();
-        }
-    }
-}
-
-
-
-static void DoBss (void)
-/* Switch to the BSS segment */
-{
-    UseSeg (&BssSegDef);
-}
-
-
-
-static void DoByte (void)
-/* Define bytes */
-{
-    /* Element type for the generated array */
-    static const char EType[1] = { GT_BYTE };
-
-    /* Record type information */
-    Span* S = OpenSpan ();
-    StrBuf Type = STATIC_STRBUF_INITIALIZER;
-
-    /* Parse arguments */
-    while (1) {
-        if (CurTok.Tok == TOK_STRCON) {
-            /* A string, translate into target charset and emit */
-            TgtTranslateStrBuf (&CurTok.SVal);
-            EmitStrBuf (&CurTok.SVal);
-            NextTok ();
-        } else {
-            EmitByte (BoundedExpr (Expression, 1));
-        }
-        if (CurTok.Tok != TOK_COMMA) {
-            break;
-        } else {
-            NextTok ();
-            /* Do smart handling of dangling comma */
-            if (CurTok.Tok == TOK_SEP) {
-                Error ("Unexpected end of line");
-                break;
-            }
-        }
-    }
-
-    /* Close the span, then add type information to it */
-    S = CloseSpan (S);
-    SetSpanType (S, GenArrayType (&Type, GetSpanSize (S), EType, sizeof (EType)));
-
-    /* Free the type string */
-    SB_Done (&Type);
-}
-
-
-
-static void DoCase (void)
-/* Switch the IgnoreCase option */
-{
-    SetBoolOption (&IgnoreCase);
-    IgnoreCase = !IgnoreCase;
-}
-
-
-
-static void DoCharMap (void)
-/* Allow custome character mappings */
-{
-    long Index;
-    long Code;
-
-    /* Read the index as numerical value */
-    Index = ConstExpression ();
-    if (Index <= 0 || Index > 255) {
-        /* Value out of range */
-        ErrorSkip ("Range error");
-        return;
-    }
-
-    /* Comma follows */
-    ConsumeComma ();
-
-    /* Read the character code */
-    Code = ConstExpression ();
-    if (Code < 0 || Code > 255) {
-        /* Value out of range */
-        ErrorSkip ("Range error");
-        return;
-    }
-
-    /* Set the character translation */
-    TgtTranslateSet ((unsigned) Index, (unsigned char) Code);
-}
-
-
-
-static void DoCode (void)
-/* Switch to the code segment */
-{
-    UseSeg (&CodeSegDef);
-}
-
-
-
-static void DoConDes (void)
-/* Export a symbol as constructor/destructor */
-{
-    static const char* Keys[] = {
-        "CONSTRUCTOR",
-        "DESTRUCTOR",
-        "INTERRUPTOR",
-    };
-    StrBuf Name = STATIC_STRBUF_INITIALIZER;
-    long Type;
-
-    /* Symbol name follows */
-    if (CurTok.Tok != TOK_IDENT) {
-        ErrorSkip ("Identifier expected");
-        return;
-    }
-    SB_Copy (&Name, &CurTok.SVal);
-    NextTok ();
-
-    /* Type follows. May be encoded as identifier or numerical */
-    ConsumeComma ();
-    if (CurTok.Tok == TOK_IDENT) {
-
-        /* Map the following keyword to a number, then skip it */
-        Type = GetSubKey (Keys, sizeof (Keys) / sizeof (Keys [0]));
-        NextTok ();
-
-        /* Check if we got a valid keyword */
-        if (Type < 0) {
-            ErrorSkip ("Syntax error");
-            goto ExitPoint;
-        }
-
-    } else {
-
-        /* Read the type as numerical value */
-        Type = ConstExpression ();
-        if (Type < CD_TYPE_MIN || Type > CD_TYPE_MAX) {
-            /* Value out of range */
-            ErrorSkip ("Range error");
-            goto ExitPoint;
-        }
-
-    }
-
-    /* Parse the remainder of the line and export the symbol */
-    ConDes (&Name, (unsigned) Type);
-
-ExitPoint:
-    /* Free string memory */
-    SB_Done (&Name);
-}
-
-
-
-static void DoConstructor (void)
-/* Export a symbol as constructor */
-{
-    StrBuf Name = STATIC_STRBUF_INITIALIZER;
-
-    /* Symbol name follows */
-    if (CurTok.Tok != TOK_IDENT) {
-        ErrorSkip ("Identifier expected");
-        return;
-    }
-    SB_Copy (&Name, &CurTok.SVal);
-    NextTok ();
-
-    /* Parse the remainder of the line and export the symbol */
-    ConDes (&Name, CD_TYPE_CON);
-
-    /* Free string memory */
-    SB_Done (&Name);
-}
-
-
-
-static void DoData (void)
-/* Switch to the data segment */
-{
-    UseSeg (&DataSegDef);
-}
-
-
-
-static void DoDbg (void)
-/* Add debug information from high level code */
-{
-    static const char* Keys[] = {
-        "FILE",
-        "FUNC",
-        "LINE",
-        "SYM",
-    };
-    int Key;
-
-
-    /* We expect a subkey */
-    if (CurTok.Tok != TOK_IDENT) {
-        ErrorSkip ("Identifier expected");
-        return;
-    }
-
-    /* Map the following keyword to a number */
-    Key = GetSubKey (Keys, sizeof (Keys) / sizeof (Keys [0]));
-
-    /* Skip the subkey */
-    NextTok ();
-
-    /* Check the key and dispatch to a handler */
-    switch (Key) {
-        case 0:     DbgInfoFile ();             break;
-        case 1:     DbgInfoFunc ();             break;
-        case 2:     DbgInfoLine ();             break;
-        case 3:     DbgInfoSym ();              break;
-        default:    ErrorSkip ("Syntax error"); break;
-    }
-}
-
-
-
-static void DoDByt (void)
-/* Output double bytes */
-{
-    /* Element type for the generated array */
-    static const char EType[1] = { GT_DBYTE };
-
-    /* Record type information */
-    Span* S = OpenSpan ();
-    StrBuf Type = STATIC_STRBUF_INITIALIZER;
-
-    /* Parse arguments */
-    while (1) {
-        EmitWord (GenSwapExpr (BoundedExpr (Expression, 2)));
-        if (CurTok.Tok != TOK_COMMA) {
-            break;
-        } else {
-            NextTok ();
-        }
-    }
-
-    /* Close the span, then add type information to it */
-    S = CloseSpan (S);
-    SetSpanType (S, GenArrayType (&Type, GetSpanSize (S), EType, sizeof (EType)));
-
-    /* Free the type string */
-    SB_Done (&Type);
-}
-
-
-
-static void DoDebugInfo (void)
-/* Switch debug info on or off */
-{
-    SetBoolOption (&DbgSyms);
-}
-
-
-
-static void DoDefine (void)
-/* Define a one line macro */
-{
-    MacDef (MAC_STYLE_DEFINE);
-}
-
-
-
-static void DoDelMac (void)
-/* Delete a classic macro */
-{
-    /* We expect an identifier */
-    if (CurTok.Tok != TOK_IDENT) {
-        ErrorSkip ("Identifier expected");
-    } else {
-        MacUndef (&CurTok.SVal, MAC_STYLE_CLASSIC);
-        NextTok ();
-    }
-}
-
-
-
-static void DoDestructor (void)
-/* Export a symbol as destructor */
-{
-    StrBuf Name = STATIC_STRBUF_INITIALIZER;
-
-    /* Symbol name follows */
-    if (CurTok.Tok != TOK_IDENT) {
-        ErrorSkip ("Identifier expected");
-        return;
-    }
-    SB_Copy (&Name, &CurTok.SVal);
-    NextTok ();
-
-    /* Parse the remainder of the line and export the symbol */
-    ConDes (&Name, CD_TYPE_DES);
-
-    /* Free string memory */
-    SB_Done (&Name);
-}
-
-
-
-static void DoDWord (void)
-/* Define dwords */
-{
-    while (1) {
-        EmitDWord (BoundedExpr (Expression, 4));
-        if (CurTok.Tok != TOK_COMMA) {
-            break;
-        } else {
-            NextTok ();
-        }
-    }
-}
-
-
-
-static void DoEnd (void)
-/* End of assembly */
-{
-    ForcedEnd = 1;
-    NextTok ();
-}
-
-
-
-static void DoEndProc (void)
-/* Leave a lexical level */
-{
-    if (CurrentScope->Type != SCOPE_SCOPE || CurrentScope->Label == 0) {
-        /* No local scope */
-        ErrorSkip ("No open .PROC");
-    } else {
-        SymLeaveLevel ();
-    }
-}
-
-
-
-static void DoEndScope (void)
-/* Leave a lexical level */
-{
-    if (CurrentScope->Type != SCOPE_SCOPE || CurrentScope->Label != 0) {
-        /* No local scope */
-        ErrorSkip ("No open .SCOPE");
-    } else {
-        SymLeaveLevel ();
-    }
-}
-
-
-
-static void DoError (void)
-/* User error */
-{
-    if (CurTok.Tok != TOK_STRCON) {
-        ErrorSkip ("String constant expected");
-    } else {
-        Error ("User error: %m%p", &CurTok.SVal);
-        SkipUntilSep ();
-    }
-}
-
-
-
-static void DoExitMacro (void)
-/* Exit a macro expansion */
-{
-    if (!InMacExpansion ()) {
-        /* We aren't expanding a macro currently */
-        DoUnexpected ();
-    } else {
-        MacAbort ();
-    }
-}
-
-
-
-static void DoExport (void)
-/* Export a symbol */
-{
-    ExportImport (ExportWithAssign, ADDR_SIZE_DEFAULT, SF_NONE);
-}
-
-
-
-static void DoExportZP (void)
-/* Export a zeropage symbol */
-{
-    ExportImport (ExportWithAssign, ADDR_SIZE_ZP, SF_NONE);
-}
-
-
-
-static void DoFarAddr (void)
-/* Define far addresses (24 bit) */
-{
-    /* Element type for the generated array */
-    static const char EType[2] = { GT_FAR_PTR, GT_VOID };
-
-    /* Record type information */
-    Span* S = OpenSpan ();
-    StrBuf Type = STATIC_STRBUF_INITIALIZER;
-
-    /* Parse arguments */
-    while (1) {
-        EmitFarAddr (BoundedExpr (Expression, 3));
-        if (CurTok.Tok != TOK_COMMA) {
-            break;
-        } else {
-            NextTok ();
-        }
-    }
-
-    /* Close the span, then add type information to it */
-    S = CloseSpan (S);
-    SetSpanType (S, GenArrayType (&Type, GetSpanSize (S), EType, sizeof (EType)));
-
-    /* Free the type string */
-    SB_Done (&Type);
-}
-
-
-
-static void DoFatal (void)
-/* Fatal user error */
-{
-    if (CurTok.Tok != TOK_STRCON) {
-        ErrorSkip ("String constant expected");
-    } else {
-        Fatal ("User error: %m%p", &CurTok.SVal);
-        SkipUntilSep ();
-    }
-}
-
-
-
-static void DoFeature (void)
-/* Switch the Feature option */
-{
-    /* Allow a list of comma separated keywords */
-    while (1) {
-
-        /* We expect an identifier */
-        if (CurTok.Tok != TOK_IDENT) {
-            ErrorSkip ("Identifier expected");
-            return;
-        }
-
-        /* Make the string attribute lower case */
-        LocaseSVal ();
-
-        /* Set the feature and check for errors */
-        if (SetFeature (&CurTok.SVal) == FEAT_UNKNOWN) {
-            /* Not found */
-            ErrorSkip ("Invalid feature: `%m%p'", &CurTok.SVal);
-            return;
-        } else {
-            /* Skip the keyword */
-            NextTok ();
-        }
-
-        /* Allow more than one keyword */
-        if (CurTok.Tok == TOK_COMMA) {
-            NextTok ();
-        } else {
-            break;
-        }
-    }
-}
-
-
-
-static void DoFileOpt (void)
-/* Insert a file option */
-{
-    long OptNum;
-
-    /* The option type may be given as a keyword or as a number. */
-    if (CurTok.Tok == TOK_IDENT) {
-
-        /* Option given as keyword */
-        static const char* Keys [] = {
-            "AUTHOR", "COMMENT", "COMPILER"
-        };
-
-        /* Map the option to a number */
-        OptNum = GetSubKey (Keys, sizeof (Keys) / sizeof (Keys [0]));
-        if (OptNum < 0) {
-            /* Not found */
-            ErrorSkip ("File option keyword expected");
-            return;
-        }
-
-        /* Skip the keyword */
-        NextTok ();
-
-        /* Must be followed by a comma */
-        ConsumeComma ();
-
-        /* We accept only string options for now */
-        if (CurTok.Tok != TOK_STRCON) {
-            ErrorSkip ("String constant expected");
-            return;
-        }
-
-        /* Insert the option */
-        switch (OptNum) {
-
-            case 0:
-                /* Author */
-                OptAuthor (&CurTok.SVal);
-                break;
-
-            case 1:
-                /* Comment */
-                OptComment (&CurTok.SVal);
-                break;
-
-            case 2:
-                /* Compiler */
-                OptCompiler (&CurTok.SVal);
-                break;
-
-            default:
-                Internal ("Invalid OptNum: %ld", OptNum);
-
-        }
-
-        /* Done */
-        NextTok ();
-
-    } else {
-
-        /* Option given as number */
-        OptNum = ConstExpression ();
-        if (!IsByteRange (OptNum)) {
-            ErrorSkip ("Range error");
-            return;
-        }
-
-        /* Must be followed by a comma */
-        ConsumeComma ();
-
-        /* We accept only string options for now */
-        if (CurTok.Tok != TOK_STRCON) {
-            ErrorSkip ("String constant expected");
-            return;
-        }
-
-        /* Insert the option */
-        OptStr ((unsigned char) OptNum, &CurTok.SVal);
-
-        /* Done */
-        NextTok ();
-    }
-}
-
-
-
-static void DoForceImport (void)
-/* Do a forced import on a symbol */
-{
-    ExportImport (SymImport, ADDR_SIZE_DEFAULT, SF_FORCED);
-}
-
-
-
-static void DoGlobal (void)
-/* Declare a global symbol */
-{
-    ExportImport (SymGlobal, ADDR_SIZE_DEFAULT, SF_NONE);
-}
-
-
-
-static void DoGlobalZP (void)
-/* Declare a global zeropage symbol */
-{
-    ExportImport (SymGlobal, ADDR_SIZE_ZP, SF_NONE);
-}
-
-
-static void DoHiBytes (void)
-/* Define bytes, extracting the hi byte from each expression in the list */
-{
-    while (1) {
-        EmitByte (FuncHiByte ());
-        if (CurTok.Tok != TOK_COMMA) {
-            break;
-        } else {
-            NextTok ();
-        }
-    }
-}
-
-
-
-static void DoI16 (void)
-/* Switch the index registers to 16 bit mode (assembler only) */
-{
-    if (GetCPU() != CPU_65816) {
-        Error ("Command is only valid in 65816 mode");
-    } else {
-        /* Immidiate mode has two extension bytes */
-        ExtBytes [AM65I_IMM_INDEX] = 2;
-    }
-}
-
-
-
-static void DoI8 (void)
-/* Switch the index registers to 16 bit mode (assembler only) */
-{
-    if (GetCPU() != CPU_65816) {
-        Error ("Command is only valid in 65816 mode");
-    } else {
-        /* Immidiate mode has one extension byte */
-        ExtBytes [AM65I_IMM_INDEX] = 1;
-    }
-}
-
-
-
-static void DoImport (void)
-/* Import a symbol */
-{
-    ExportImport (SymImport, ADDR_SIZE_DEFAULT, SF_NONE);
-}
-
-
-
-static void DoImportZP (void)
-/* Import a zero page symbol */
-{
-    ExportImport (SymImport, ADDR_SIZE_ZP, SF_NONE);
-}
-
-
-
-static void DoIncBin (void)
-/* Include a binary file */
-{
-    StrBuf Name = STATIC_STRBUF_INITIALIZER;
-    struct stat StatBuf;
-    long Start = 0L;
-    long Count = -1L;
-    long Size;
-    FILE* F;
-
-    /* Name must follow */
-    if (CurTok.Tok != TOK_STRCON) {
-        ErrorSkip ("String constant expected");
-        return;
-    }
-    SB_Copy (&Name, &CurTok.SVal);
-    SB_Terminate (&Name);
-    NextTok ();
-
-    /* A starting offset may follow */
-    if (CurTok.Tok == TOK_COMMA) {
-        NextTok ();
-        Start = ConstExpression ();
-
-        /* And a length may follow */
-        if (CurTok.Tok == TOK_COMMA) {
-            NextTok ();
-            Count = ConstExpression ();
-        }
-
-    }
-
-    /* Try to open the file */
-    F = fopen (SB_GetConstBuf (&Name), "rb");
-    if (F == 0) {
-
-        /* Search for the file in the binary include directory */
-        char* PathName = SearchFile (BinSearchPath, SB_GetConstBuf (&Name));
-        if (PathName == 0 || (F = fopen (PathName, "rb")) == 0) {
-            /* Not found or cannot open, print an error and bail out */
-            ErrorSkip ("Cannot open include file `%m%p': %s", &Name, strerror (errno));
-            xfree (PathName);
-            goto ExitPoint;
-        }
-
-        /* Remember the new file name */
-        SB_CopyStr (&Name, PathName);
-
-        /* Free the allocated memory */
-        xfree (PathName);
-    }
-
-    /* Get the size of the file */
-    fseek (F, 0, SEEK_END);
-    Size = ftell (F);
-
-    /* Stat the file and remember the values. There's a race condition here,
-    ** since we cannot use fileno() (non-standard identifier in standard
-    ** header file), and therefore not fstat. When using stat with the
-    ** file name, there's a risk that the file was deleted and recreated
-    ** while it was open. Since mtime and size are only used to check
-    ** if a file has changed in the debugger, we will ignore this problem
-    ** here.
-    */
-    SB_Terminate (&Name);
-    if (FileStat (SB_GetConstBuf (&Name), &StatBuf) != 0) {
-        Fatal ("Cannot stat input file `%m%p': %s", &Name, strerror (errno));
-    }
-
-    /* Add the file to the input file table */
-    AddFile (&Name, FT_BINARY, Size, (unsigned long) StatBuf.st_mtime);
-
-    /* If a count was not given, calculate it now */
-    if (Count < 0) {
-        Count = Size - Start;
-        if (Count < 0) {
-            /* Nothing to read - flag this as a range error */
-            ErrorSkip ("Range error");
-            goto Done;
-        }
-    } else {
-        /* Count was given, check if it is valid */
-        if (Start + Count > Size) {
-            ErrorSkip ("Range error");
-            goto Done;
-        }
-    }
-
-    /* Seek to the start position */
-    fseek (F, Start, SEEK_SET);
-
-    /* Read chunks and insert them into the output */
-    while (Count > 0) {
-
-        unsigned char Buf [1024];
-
-        /* Calculate the number of bytes to read */
-        size_t BytesToRead = (Count > (long)sizeof(Buf))? sizeof(Buf) : (size_t) Count;
-
-        /* Read chunk */
-        size_t BytesRead = fread (Buf, 1, BytesToRead, F);
-        if (BytesToRead != BytesRead) {
-            /* Some sort of error */
-            ErrorSkip ("Cannot read from include file `%m%p': %s",
-                       &Name, strerror (errno));
-            break;
-        }
-
-        /* Insert it into the output */
-        EmitData (Buf, BytesRead);
-
-        /* Keep the counters current */
-        Count -= BytesRead;
-    }
-
-Done:
-    /* Close the file, ignore errors since it's r/o */
-    (void) fclose (F);
-
-ExitPoint:
-    /* Free string memory */
-    SB_Done (&Name);
-}
-
-
-
-static void DoInclude (void)
-/* Include another file */
-{
-    /* Name must follow */
-    if (CurTok.Tok != TOK_STRCON) {
-        ErrorSkip ("String constant expected");
-    } else {
-        SB_Terminate (&CurTok.SVal);
-        if (NewInputFile (SB_GetConstBuf (&CurTok.SVal)) == 0) {
-            /* Error opening the file, skip remainder of line */
-            SkipUntilSep ();
-        }
-    }
-}
-
-
-
-static void DoInterruptor (void)
-/* Export a symbol as interruptor */
-{
-    StrBuf Name = STATIC_STRBUF_INITIALIZER;
-
-    /* Symbol name follows */
-    if (CurTok.Tok != TOK_IDENT) {
-        ErrorSkip ("Identifier expected");
-        return;
-    }
-    SB_Copy (&Name, &CurTok.SVal);
-    NextTok ();
-
-    /* Parse the remainder of the line and export the symbol */
-    ConDes (&Name, CD_TYPE_INT);
-
-    /* Free string memory */
-    SB_Done (&Name);
-}
-
-
-
-static void DoInvalid (void)
-/* Handle a token that is invalid here, since it should have been handled on
-** a much lower level of the expression hierarchy. Getting this sort of token
-** means that the lower level code has bugs.
-** This function differs to DoUnexpected in that the latter may be triggered
-** by the user by using keywords in the wrong location. DoUnexpected is not
-** an error in the assembler itself, while DoInvalid is.
-*/
-{
-    Internal ("Unexpected token: %m%p", &Keyword);
-}
-
-
-
-static void DoLineCont (void)
-/* Switch the use of line continuations */
-{
-    SetBoolOption (&LineCont);
-}
-
-
-
-static void DoList (void)
-/* Enable/disable the listing */
-{
-    /* Get the setting */
-    unsigned char List;
-    SetBoolOption (&List);
-
-    /* Manage the counter */
-    if (List) {
-        EnableListing ();
-    } else {
-        DisableListing ();
-    }
-}
-
-
-
-static void DoLoBytes (void)
-/* Define bytes, extracting the lo byte from each expression in the list */
-{
-    while (1) {
-        EmitByte (FuncLoByte ());
-        if (CurTok.Tok != TOK_COMMA) {
-            break;
-        } else {
-            NextTok ();
-        }
-    }
-}
-
-
-static void DoListBytes (void)
-/* Set maximum number of bytes to list for one line */
-{
-    SetListBytes (IntArg (MIN_LIST_BYTES, MAX_LIST_BYTES));
-}
-
-
-
-static void DoLocalChar (void)
-/* Define the character that starts local labels */
-{
-    if (CurTok.Tok != TOK_CHARCON) {
-        ErrorSkip ("Character constant expected");
-    } else {
-        if (CurTok.IVal != '@' && CurTok.IVal != '?') {
-            Error ("Invalid start character for locals");
-        } else {
-            LocalStart = (char) CurTok.IVal;
-        }
-        NextTok ();
-    }
-}
-
-
-
-static void DoMacPack (void)
-/* Insert a macro package */
-{
-    /* We expect an identifier */
-    if (CurTok.Tok != TOK_IDENT) {
-        ErrorSkip ("Identifier expected");
-    } else {
-        SB_AppendStr (&CurTok.SVal, ".mac");
-        SB_Terminate (&CurTok.SVal);
-        if (NewInputFile (SB_GetConstBuf (&CurTok.SVal)) == 0) {
-            /* Error opening the file, skip remainder of line */
-            SkipUntilSep ();
-        }
-    }
-}
-
-
-
-static void DoMacro (void)
-/* Start a macro definition */
-{
-    MacDef (MAC_STYLE_CLASSIC);
-}
-
-
-
-static void DoNull (void)
-/* Switch to the NULL segment */
-{
-    UseSeg (&NullSegDef);
-}
-
-
-
-static void DoOrg (void)
-/* Start absolute code */
-{
-    long PC = ConstExpression ();
-    if (PC < 0 || PC > 0xFFFFFF) {
-        Error ("Range error");
-        return;
-    }
-    EnterAbsoluteMode (PC);
-}
-
-
-
-static void DoOut (void)
-/* Output a string */
-{
-    if (CurTok.Tok != TOK_STRCON) {
-        ErrorSkip ("String constant expected");
-    } else {
-        /* Output the string and be sure to flush the output to keep it in
-        ** sync with any error messages if the output is redirected to a file.
-        */
-        printf ("%.*s\n",
-                (int) SB_GetLen (&CurTok.SVal),
-                SB_GetConstBuf (&CurTok.SVal));
-        fflush (stdout);
-        NextTok ();
-    }
-}
-
-
-
-static void DoP02 (void)
-/* Switch to 6502 CPU */
-{
-    SetCPU (CPU_6502);
-}
-
-
-
-static void DoPC02 (void)
-/* Switch to 65C02 CPU */
-{
-    SetCPU (CPU_65C02);
-}
-
-
-
-static void DoP816 (void)
-/* Switch to 65816 CPU */
-{
-    SetCPU (CPU_65816);
-}
-
-
-
-static void DoPageLength (void)
-/* Set the page length for the listing */
-{
-    PageLength = IntArg (MIN_PAGE_LEN, MAX_PAGE_LEN);
-}
-
-
-
-static void DoPopCPU (void)
-/* Pop an old CPU setting from the CPU stack */
-{
-    /* Must have a CPU on the stack */
-    if (IS_IsEmpty (&CPUStack)) {
-        ErrorSkip ("CPU stack is empty");
-        return;
-    }
-
-    /* Set the CPU to the value popped from stack */
-    SetCPU (IS_Pop (&CPUStack));
-}
-
-
-
-static void DoPopSeg (void)
-/* Pop an old segment from the segment stack */
-{
-    SegDef* Def;
-
-    /* Must have a segment on the stack */
-    if (CollCount (&SegStack) == 0) {
-        ErrorSkip ("Segment stack is empty");
-        return;
-    }
-
-    /* Pop the last element */
-    Def = CollPop (&SegStack);
-
-    /* Restore this segment */
-    UseSeg (Def);
-
-    /* Delete the segment definition */
-    FreeSegDef (Def);
-}
-
-
-
-static void DoProc (void)
-/* Start a new lexical scope */
-{
-    StrBuf Name = STATIC_STRBUF_INITIALIZER;
-    unsigned char AddrSize;
-    SymEntry* Sym = 0;
-
-
-    if (CurTok.Tok == TOK_IDENT) {
-
-        /* The new scope has a name. Remember it. */
-        SB_Copy (&Name, &CurTok.SVal);
-
-        /* Search for the symbol, generate a new one if needed */
-        Sym = SymFind (CurrentScope, &Name, SYM_ALLOC_NEW);
-
-        /* Skip the scope name */
-        NextTok ();
-
-        /* Read an optional address size specifier */
-        AddrSize = OptionalAddrSize ();
-
-        /* Mark the symbol as defined */
-        SymDef (Sym, GenCurrentPC (), AddrSize, SF_LABEL);
-
-    } else {
-
-        /* A .PROC statement without a name */
-        Warning (1, "Unnamed .PROCs are deprecated, please use .SCOPE");
-        AnonName (&Name, "PROC");
-        AddrSize = ADDR_SIZE_DEFAULT;
-
-    }
-
-    /* Enter a new scope */
-    SymEnterLevel (&Name, SCOPE_SCOPE, AddrSize, Sym);
-
-    /* Free memory for Name */
-    SB_Done (&Name);
-}
-
-
-
-static void DoPSC02 (void)
-/* Switch to 65SC02 CPU */
-{
-    SetCPU (CPU_65SC02);
-}
-
-
-
-static void DoPushCPU (void)
-/* Push the current CPU setting onto the CPU stack */
-{
-    /* Can only push a limited size of segments */
-    if (IS_IsFull (&CPUStack)) {
-        ErrorSkip ("CPU stack overflow");
-        return;
-    }
-
-    /* Get the current segment and push it */
-    IS_Push (&CPUStack, GetCPU ());
-}
-
-
-
-static void DoPushSeg (void)
-/* Push the current segment onto the segment stack */
-{
-    /* Can only push a limited size of segments */
-    if (CollCount (&SegStack) >= MAX_PUSHED_SEGMENTS) {
-        ErrorSkip ("Segment stack overflow");
-        return;
-    }
-
-    /* Get the current segment and push it */
-    CollAppend (&SegStack, DupSegDef (GetCurrentSegDef ()));
-}
-
-
-
-static void DoReloc (void)
-/* Enter relocatable mode */
-{
-    EnterRelocMode ();
-}
-
-
-
-static void DoRepeat (void)
-/* Repeat some instruction block */
-{
-    ParseRepeat ();
-}
-
-
-
-static void DoRes (void)
-/* Reserve some number of storage bytes */
-{
-    long Count;
-    long Val;
-
-    Count = ConstExpression ();
-    if (Count > 0xFFFF || Count < 0) {
-        ErrorSkip ("Range error");
-        return;
-    }
-    if (CurTok.Tok == TOK_COMMA) {
-        NextTok ();
-        Val = ConstExpression ();
-        /* We need a byte value here */
-        if (!IsByteRange (Val)) {
-            ErrorSkip ("Range error");
-            return;
-        }
-
-        /* Emit constant values */
-        while (Count--) {
-            Emit0 ((unsigned char) Val);
-        }
-
-    } else {
-        /* Emit fill fragments */
-        EmitFill (Count);
-    }
-}
-
-
-
-static void DoROData (void)
-/* Switch to the r/o data segment */
-{
-    UseSeg (&RODataSegDef);
-}
-
-
-
-static void DoScope (void)
-/* Start a local scope */
-{
-    StrBuf Name = STATIC_STRBUF_INITIALIZER;
-    unsigned char AddrSize;
-
-
-    if (CurTok.Tok == TOK_IDENT) {
-
-        /* The new scope has a name. Remember and skip it. */
-        SB_Copy (&Name, &CurTok.SVal);
-        NextTok ();
-
-    } else {
-
-        /* An unnamed scope */
-        AnonName (&Name, "SCOPE");
-
-    }
-
-    /* Read an optional address size specifier */
-    AddrSize = OptionalAddrSize ();
-
-    /* Enter the new scope */
-    SymEnterLevel (&Name, SCOPE_SCOPE, AddrSize, 0);
-
-    /* Free memory for Name */
-    SB_Done (&Name);
-}
-
-
-
-static void DoSegment (void)
-/* Switch to another segment */
-{
-    StrBuf Name = STATIC_STRBUF_INITIALIZER;
-    SegDef Def;
-
-    if (CurTok.Tok != TOK_STRCON) {
-        ErrorSkip ("String constant expected");
-    } else {
-
-        /* Save the name of the segment and skip it */
-        SB_Copy (&Name, &CurTok.SVal);
-        NextTok ();
-
-        /* Use the name for the segment definition */
-        SB_Terminate (&Name);
-        Def.Name = SB_GetBuf (&Name);
-
-        /* Check for an optional address size modifier */
-        Def.AddrSize = OptionalAddrSize ();
-
-        /* Set the segment */
-        UseSeg (&Def);
-    }
-
-    /* Free memory for Name */
-    SB_Done (&Name);
-}
-
-
-
-static void DoSetCPU (void)
-/* Switch the CPU instruction set */
-{
-    /* We expect an identifier */
-    if (CurTok.Tok != TOK_STRCON) {
-        ErrorSkip ("String constant expected");
-    } else {
-        cpu_t CPU;
-
-        /* Try to find the CPU */
-        SB_Terminate (&CurTok.SVal);
-        CPU = FindCPU (SB_GetConstBuf (&CurTok.SVal));
-
-        /* Switch to the new CPU */
-        SetCPU (CPU);
-
-        /* Skip the identifier. If the CPU switch was successful, the scanner
-        ** will treat the input now correctly for the new CPU.
-        */
-        NextTok ();
-    }
-}
-
-
-
-static void DoSmart (void)
-/* Smart mode on/off */
-{
-    SetBoolOption (&SmartMode);
-}
-
-
-
-static void DoTag (void)
-/* Allocate space for a struct */
-{
-    SymEntry* SizeSym;
-    long Size;
-
-    /* Read the struct name */
-    SymTable* Struct = ParseScopedSymTable ();
-
-    /* Check the supposed struct */
-    if (Struct == 0) {
-        ErrorSkip ("Unknown struct");
-        return;
-    }
-    if (GetSymTabType (Struct) != SCOPE_STRUCT) {
-        ErrorSkip ("Not a struct");
-        return;
-    }
-
-    /* Get the symbol that defines the size of the struct */
-    SizeSym = GetSizeOfScope (Struct);
-
-    /* Check if it does exist and if its value is known */
-    if (SizeSym == 0 || !SymIsConst (SizeSym, &Size)) {
-        ErrorSkip ("Size of struct/union is unknown");
-        return;
-    }
-
-    /* Optional multiplicator may follow */
-    if (CurTok.Tok == TOK_COMMA) {
-        long Multiplicator;
-        NextTok ();
-        Multiplicator = ConstExpression ();
-        /* Multiplicator must make sense */
-        if (Multiplicator <= 0) {
-            ErrorSkip ("Range error");
-            return;
-        }
-        Size *= Multiplicator;
-    }
-
-    /* Emit fill fragments */
-    EmitFill (Size);
-}
-
-
-
-static void DoUnDef (void)
-/* Undefine a define style macro */
-{
-    /* The function is called with the .UNDEF token in place, because we need
-    ** to disable .define macro expansions before reading the next token.
-    ** Otherwise the name of the macro would be expanded, so we would never
-    ** see it.
-    */
-    DisableDefineStyleMacros ();
-    NextTok ();
-    EnableDefineStyleMacros ();
-
-    /* We expect an identifier */
-    if (CurTok.Tok != TOK_IDENT) {
-        ErrorSkip ("Identifier expected");
-    } else {
-        MacUndef (&CurTok.SVal, MAC_STYLE_DEFINE);
-        NextTok ();
-    }
-}
-
-
-
-static void DoUnexpected (void)
-/* Got an unexpected keyword */
-{
-    Error ("Unexpected `%m%p'", &Keyword);
-    SkipUntilSep ();
-}
-
-
-
-static void DoWarning (void)
-/* User warning */
-{
-    if (CurTok.Tok != TOK_STRCON) {
-        ErrorSkip ("String constant expected");
-    } else {
-        Warning (0, "User warning: %m%p", &CurTok.SVal);
-        SkipUntilSep ();
-    }
-}
-
-
-
-static void DoWord (void)
-/* Define words */
-{
-    /* Element type for the generated array */
-    static const char EType[1] = { GT_WORD };
-
-    /* Record type information */
-    Span* S = OpenSpan ();
-    StrBuf Type = STATIC_STRBUF_INITIALIZER;
-
-    /* Parse arguments */
-    while (1) {
-        EmitWord (BoundedExpr (Expression, 2));
-        if (CurTok.Tok != TOK_COMMA) {
-            break;
-        } else {
-            NextTok ();
-        }
-    }
-
-    /* Close the span, then add type information to it */
-    S = CloseSpan (S);
-    SetSpanType (S, GenArrayType (&Type, GetSpanSize (S), EType, sizeof (EType)));
-
-    /* Free the type string */
-    SB_Done (&Type);
-}
-
-
-
-static void DoZeropage (void)
-/* Switch to the zeropage segment */
-{
-    UseSeg (&ZeropageSegDef);
-}
-
-
-
-/*****************************************************************************/
-/*                                Table data                                 */
-/*****************************************************************************/
-
-
-
-/* Control commands flags */
-enum {
-    ccNone      = 0x0000,               /* No special flags */
-    ccKeepToken = 0x0001                /* Do not skip the current token */
-};
-
-/* Control command table */
-typedef struct CtrlDesc CtrlDesc;
-struct CtrlDesc {
-    unsigned    Flags;                  /* Flags for this directive */
-    void        (*Handler) (void);      /* Command handler */
-};
-
-#define PSEUDO_COUNT    (sizeof (CtrlCmdTab) / sizeof (CtrlCmdTab [0]))
-static CtrlDesc CtrlCmdTab [] = {
-    { ccNone,           DoA16           },
-    { ccNone,           DoA8            },
-    { ccNone,           DoAddr          },      /* .ADDR */
-    { ccNone,           DoUnexpected    },      /* .ADDRSIZE */
-    { ccNone,           DoAlign         },
-    { ccNone,           DoASCIIZ        },
-    { ccNone,           DoAssert        },
-    { ccNone,           DoAutoImport    },
-    { ccNone,           DoUnexpected    },      /* .BANK */
-    { ccNone,           DoUnexpected    },      /* .BANKBYTE */
-    { ccNone,           DoBankBytes     },
-    { ccNone,           DoUnexpected    },      /* .BLANK */
-    { ccNone,           DoBss           },
-    { ccNone,           DoByte          },
-    { ccNone,           DoCase          },
-    { ccNone,           DoCharMap       },
-    { ccNone,           DoCode          },
-    { ccNone,           DoUnexpected,   },      /* .CONCAT */
-    { ccNone,           DoConDes        },
-    { ccNone,           DoUnexpected    },      /* .CONST */
-    { ccNone,           DoConstructor   },
-    { ccNone,           DoUnexpected    },      /* .CPU */
-    { ccNone,           DoData          },
-    { ccNone,           DoDbg,          },
-    { ccNone,           DoDByt          },
-    { ccNone,           DoDebugInfo     },
-    { ccNone,           DoDefine        },
-    { ccNone,           DoUnexpected    },      /* .DEFINED */
-    { ccNone,           DoUnexpected    },      /* .DEFINEDMACRO */
-    { ccNone,           DoDelMac        },
-    { ccNone,           DoDestructor    },
-    { ccNone,           DoDWord         },
-    { ccKeepToken,      DoConditionals  },      /* .ELSE */
-    { ccKeepToken,      DoConditionals  },      /* .ELSEIF */
-    { ccKeepToken,      DoEnd           },
-    { ccNone,           DoUnexpected    },      /* .ENDENUM */
-    { ccKeepToken,      DoConditionals  },      /* .ENDIF */
-    { ccNone,           DoUnexpected    },      /* .ENDMACRO */
-    { ccNone,           DoEndProc       },
-    { ccNone,           DoUnexpected    },      /* .ENDREPEAT */
-    { ccNone,           DoEndScope      },
-    { ccNone,           DoUnexpected    },      /* .ENDSTRUCT */
-    { ccNone,           DoUnexpected    },      /* .ENDUNION */
-    { ccNone,           DoEnum          },
-    { ccNone,           DoError         },
-    { ccNone,           DoExitMacro     },
-    { ccNone,           DoExport        },
-    { ccNone,           DoExportZP      },
-    { ccNone,           DoFarAddr       },
-    { ccNone,           DoFatal         },
-    { ccNone,           DoFeature       },
-    { ccNone,           DoFileOpt       },
-    { ccNone,           DoForceImport   },
-    { ccNone,           DoUnexpected    },      /* .FORCEWORD */
-    { ccNone,           DoGlobal        },
-    { ccNone,           DoGlobalZP      },
-    { ccNone,           DoUnexpected    },      /* .HIBYTE */
-    { ccNone,           DoHiBytes       },
-    { ccNone,           DoUnexpected    },      /* .HIWORD */
-    { ccNone,           DoI16           },
-    { ccNone,           DoI8            },
-    { ccNone,           DoUnexpected    },      /* .IDENT */
-    { ccKeepToken,      DoConditionals  },      /* .IF */
-    { ccKeepToken,      DoConditionals  },      /* .IFBLANK */
-    { ccKeepToken,      DoConditionals  },      /* .IFCONST */
-    { ccKeepToken,      DoConditionals  },      /* .IFDEF */
-    { ccKeepToken,      DoConditionals  },      /* .IFNBLANK */
-    { ccKeepToken,      DoConditionals  },      /* .IFNCONST */
-    { ccKeepToken,      DoConditionals  },      /* .IFNDEF */
-    { ccKeepToken,      DoConditionals  },      /* .IFNREF */
-    { ccKeepToken,      DoConditionals  },      /* .IFP02 */
-    { ccKeepToken,      DoConditionals  },      /* .IFP816 */
-    { ccKeepToken,      DoConditionals  },      /* .IFPC02 */
-    { ccKeepToken,      DoConditionals  },      /* .IFPSC02 */
-    { ccKeepToken,      DoConditionals  },      /* .IFREF */
-    { ccNone,           DoImport        },
-    { ccNone,           DoImportZP      },
-    { ccNone,           DoIncBin        },
-    { ccNone,           DoInclude       },
-    { ccNone,           DoInterruptor   },
-    { ccNone,           DoUnexpected    },      /* .ISMNEMONIC */
-    { ccNone,           DoInvalid       },      /* .LEFT */
-    { ccNone,           DoLineCont      },
-    { ccNone,           DoList          },
-    { ccNone,           DoListBytes     },
-    { ccNone,           DoUnexpected    },      /* .LOBYTE */
-    { ccNone,           DoLoBytes       },
-    { ccNone,           DoUnexpected    },      /* .LOCAL */
-    { ccNone,           DoLocalChar     },
-    { ccNone,           DoUnexpected    },      /* .LOWORD */
-    { ccNone,           DoMacPack       },
-    { ccNone,           DoMacro         },
-    { ccNone,           DoUnexpected    },      /* .MATCH */
-    { ccNone,           DoUnexpected    },      /* .MAX */
-    { ccNone,           DoInvalid       },      /* .MID */
-    { ccNone,           DoUnexpected    },      /* .MIN */
-    { ccNone,           DoNull          },
-    { ccNone,           DoOrg           },
-    { ccNone,           DoOut           },
-    { ccNone,           DoP02           },
-    { ccNone,           DoP816          },
-    { ccNone,           DoPageLength    },
-    { ccNone,           DoUnexpected    },      /* .PARAMCOUNT */
-    { ccNone,           DoPC02          },
-    { ccNone,           DoPopCPU        },
-    { ccNone,           DoPopSeg        },
-    { ccNone,           DoProc          },
-    { ccNone,           DoPSC02         },
-    { ccNone,           DoPushCPU       },
-    { ccNone,           DoPushSeg       },
-    { ccNone,           DoUnexpected    },      /* .REFERENCED */
-    { ccNone,           DoReloc         },
-    { ccNone,           DoRepeat        },
-    { ccNone,           DoRes           },
-    { ccNone,           DoInvalid       },      /* .RIGHT */
-    { ccNone,           DoROData        },
-    { ccNone,           DoScope         },
-    { ccNone,           DoSegment       },
-    { ccNone,           DoUnexpected    },      /* .SET */
-    { ccNone,           DoSetCPU        },
-    { ccNone,           DoUnexpected    },      /* .SIZEOF */
-    { ccNone,           DoSmart         },
-    { ccNone,           DoUnexpected    },      /* .SPRINTF */
-    { ccNone,           DoUnexpected    },      /* .STRAT */
-    { ccNone,           DoUnexpected    },      /* .STRING */
-    { ccNone,           DoUnexpected    },      /* .STRLEN */
-    { ccNone,           DoStruct        },
-    { ccNone,           DoTag           },
-    { ccNone,           DoUnexpected    },      /* .TCOUNT */
-    { ccNone,           DoUnexpected    },      /* .TIME */
-    { ccKeepToken,      DoUnDef         },
-    { ccNone,           DoUnion         },
-    { ccNone,           DoUnexpected    },      /* .VERSION */
-    { ccNone,           DoWarning       },
-    { ccNone,           DoWord          },
-    { ccNone,           DoUnexpected    },      /* .XMATCH */
-    { ccNone,           DoZeropage      },
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void HandlePseudo (void)
-/* Handle a pseudo instruction */
-{
-    CtrlDesc* D;
-
-    /* Calculate the index into the table */
-    unsigned Index = CurTok.Tok - TOK_FIRSTPSEUDO;
-
-    /* Safety check */
-    if (PSEUDO_COUNT != (TOK_LASTPSEUDO - TOK_FIRSTPSEUDO + 1)) {
-        Internal ("Pseudo mismatch: PSEUDO_COUNT = %u, actual count = %u\n",
-                  (unsigned) PSEUDO_COUNT, TOK_LASTPSEUDO - TOK_FIRSTPSEUDO + 1);
-    }
-    CHECK (Index < PSEUDO_COUNT);
-
-    /* Get the pseudo intruction descriptor */
-    D = &CtrlCmdTab [Index];
-
-    /* Remember the instruction, then skip it if needed */
-    if ((D->Flags & ccKeepToken) == 0) {
-        SB_Copy (&Keyword, &CurTok.SVal);
-        NextTok ();
-    }
-
-    /* Call the handler */
-    D->Handler ();
-}
-
-
-
-void CheckPseudo (void)
-/* Check if the stacks are empty at end of assembly */
-{
-    if (CollCount (&SegStack) != 0) {
-        Warning (1, "Segment stack is not empty");
-    }
-    if (!IS_IsEmpty (&CPUStack)) {
-        Warning (1, "CPU stack is not empty");
-    }
-}
diff --git a/src/ca65/pseudo.h b/src/ca65/pseudo.h
deleted file mode 100644 (file)
index 6199f66..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 pseudo.h                                  */
-/*                                                                           */
-/*              Pseudo instructions for the ca65 macroassembler              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef PSEUDO_H
-#define PSEUDO_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void HandlePseudo (void);
-/* Handle a pseudo instruction */
-
-void CheckPseudo (void);
-/* Check if the stacks are empty at end of assembly */
-
-
-
-/* End of pseudo.h */
-
-#endif
diff --git a/src/ca65/repeat.c b/src/ca65/repeat.c
deleted file mode 100644 (file)
index 90aa894..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 repeat.c                                  */
-/*                                                                           */
-/*                   Handle the .REPEAT pseudo instruction                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "xmalloc.h"
-
-/* ca65 */
-#include "error.h"
-#include "expr.h"
-#include "nexttok.h"
-#include "toklist.h"
-#include "repeat.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static TokList* CollectRepeatTokens (void)
-/* Collect all tokens inside the .REPEAT body in a token list and return
-** this list. In case of errors, NULL is returned.
-*/
-{
-    /* Create the token list */
-    TokList* List = NewTokList ();
-
-    /* Read the token list */
-    unsigned Repeats = 0;
-    while (Repeats != 0 || CurTok.Tok != TOK_ENDREP) {
-
-        /* Check for end of input */
-        if (CurTok.Tok == TOK_EOF) {
-            Error ("Unexpected end of file");
-            FreeTokList (List);
-            return 0;
-        }
-
-        /* Collect all tokens in the list */
-        AddCurTok (List);
-
-        /* Check for and count nested .REPEATs */
-        if (CurTok.Tok == TOK_REPEAT) {
-            ++Repeats;
-        } else if (CurTok.Tok == TOK_ENDREP) {
-            --Repeats;
-        }
-
-        /* Get the next token */
-        NextTok ();
-    }
-
-    /* Eat the closing .ENDREP */
-    NextTok ();
-
-    /* Return the list of collected tokens */
-    return List;
-}
-
-
-
-static void RepeatTokenCheck (TokList* L)
-/* Called each time a token from a repeat token list is set. Is used to check
-** for and replace identifiers that are the repeat counter.
-*/
-{
-    if (CurTok.Tok == TOK_IDENT &&
-        L->Data != 0            &&
-        SB_CompareStr (&CurTok.SVal, L->Data) == 0) {
-        /* Must replace by the repeat counter */
-        CurTok.Tok  = TOK_INTCON;
-        CurTok.IVal = L->RepCount;
-    }
-}
-
-
-
-void ParseRepeat (void)
-/* Parse and handle the .REPEAT statement */
-{
-    char* Name;
-    TokList* List;
-
-    /* Repeat count follows */
-    long RepCount = ConstExpression ();
-    if (RepCount < 0) {
-        Error ("Range error");
-        RepCount = 0;
-    }
-
-    /* Optional there is a comma and a counter variable */
-    Name = 0;
-    if (CurTok.Tok == TOK_COMMA) {
-
-        /* Skip the comma */
-        NextTok ();
-
-        /* Check for an identifier */
-        if (CurTok.Tok != TOK_IDENT) {
-            ErrorSkip ("Identifier expected");
-        } else {
-            /* Remember the name and skip it */
-            SB_Terminate (&CurTok.SVal);
-            Name = xstrdup (SB_GetConstBuf (&CurTok.SVal));
-            NextTok ();
-        }
-    }
-
-    /* Switch to raw token mode, then skip the separator */
-    EnterRawTokenMode ();
-    ConsumeSep ();
-
-    /* Read the token list */
-    List = CollectRepeatTokens ();
-
-    /* If we had an error, bail out */
-    if (List == 0) {
-        xfree (Name);
-        goto Done;
-    }
-
-    /* Update the token list for replay */
-    List->RepMax = (unsigned) RepCount;
-    List->Data   = Name;
-    List->Check  = RepeatTokenCheck;
-
-    /* If the list is empty, or repeat count zero, there is nothing
-    ** to repeat.
-    */
-    if (List->Count == 0 || RepCount == 0) {
-        FreeTokList (List);
-        goto Done;
-    }
-
-    /* Read input from the repeat descriptor */
-    PushTokList (List, ".REPEAT");
-
-Done:
-    /* Switch out of raw token mode */
-    LeaveRawTokenMode ();
-}
diff --git a/src/ca65/repeat.h b/src/ca65/repeat.h
deleted file mode 100644 (file)
index 3230fb6..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 repeat.h                                  */
-/*                                                                           */
-/*                   Handle the .REPEAT pseudo instruction                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef REPEAT_H
-#define REPEAT_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void ParseRepeat (void);
-/* Parse and handle the .REPEAT statement */
-
-
-
-/* End of repeat.h */
-
-#endif
diff --git a/src/ca65/scanner.c b/src/ca65/scanner.c
deleted file mode 100644 (file)
index aaba567..0000000
+++ /dev/null
@@ -1,1531 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 scanner.c                                 */
-/*                                                                           */
-/*                  The scanner for the ca65 macroassembler                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-
-/* common */
-#include "addrsize.h"
-#include "attrib.h"
-#include "chartype.h"
-#include "check.h"
-#include "filestat.h"
-#include "fname.h"
-#include "xmalloc.h"
-
-/* ca65 */
-#include "condasm.h"
-#include "error.h"
-#include "filetab.h"
-#include "global.h"
-#include "incpath.h"
-#include "instr.h"
-#include "istack.h"
-#include "listing.h"
-#include "macro.h"
-#include "toklist.h"
-#include "scanner.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Current input token incl. attributes */
-Token CurTok = STATIC_TOKEN_INITIALIZER;
-
-/* Struct to handle include files. */
-typedef struct InputFile InputFile;
-struct InputFile {
-    FILE*           F;                  /* Input file descriptor */
-    FilePos         Pos;                /* Position in file */
-    token_t         Tok;                /* Last token */
-    int             C;                  /* Last character */
-    StrBuf          Line;               /* The current input line */
-    int             IncSearchPath;      /* True if we've added a search path */
-    int             BinSearchPath;      /* True if we've added a search path */
-    InputFile*      Next;               /* Linked list of input files */
-};
-
-/* Struct to handle textual input data */
-typedef struct InputData InputData;
-struct InputData {
-    char*           Text;               /* Pointer to the text data */
-    const char*     Pos;                /* Pointer to current position */
-    int             Malloced;           /* Memory was malloced */
-    token_t         Tok;                /* Last token */
-    int             C;                  /* Last character */
-    InputData*      Next;               /* Linked list of input data */
-};
-
-/* Input source: Either file or data */
-typedef struct CharSource CharSource;
-
-/* Set of input functions */
-typedef struct CharSourceFunctions CharSourceFunctions;
-struct CharSourceFunctions {
-    void (*MarkStart) (CharSource*);    /* Mark the start pos of a token */
-    void (*NextChar) (CharSource*);     /* Read next char from input */
-    void (*Done) (CharSource*);         /* Close input source */
-};
-
-/* Input source: Either file or data */
-struct CharSource {
-    CharSource*                 Next;   /* Linked list of char sources */
-    token_t                     Tok;    /* Last token */
-    int                         C;      /* Last character */
-    const CharSourceFunctions*  Func;   /* Pointer to function table */
-    union {
-        InputFile               File;   /* File data */
-        InputData               Data;   /* Textual data */
-    }                           V;
-};
-
-/* Current input variables */
-static CharSource* Source       = 0;    /* Current char source */
-static unsigned    FCount       = 0;    /* Count of input files */
-static int         C            = 0;    /* Current input character */
-
-/* Force end of assembly */
-int               ForcedEnd     = 0;
-
-/* List of dot keywords with the corresponding tokens */
-struct DotKeyword {
-    const char* Key;                    /* MUST be first field */
-    token_t     Tok;
-} DotKeywords [] = {
-    { ".A16",           TOK_A16                 },
-    { ".A8",            TOK_A8                  },
-    { ".ADDR",          TOK_ADDR                },
-    { ".ADDRSIZE",      TOK_ADDRSIZE            },
-    { ".ALIGN",         TOK_ALIGN               },
-    { ".AND",           TOK_BOOLAND             },
-    { ".ASCIIZ",        TOK_ASCIIZ              },
-    { ".ASSERT",        TOK_ASSERT              },
-    { ".AUTOIMPORT",    TOK_AUTOIMPORT          },
-    { ".BANK",          TOK_BANK                },
-    { ".BANKBYTE",      TOK_BANKBYTE            },
-    { ".BANKBYTES",     TOK_BANKBYTES           },
-    { ".BITAND",        TOK_AND                 },
-    { ".BITNOT",        TOK_NOT                 },
-    { ".BITOR",         TOK_OR                  },
-    { ".BITXOR",        TOK_XOR                 },
-    { ".BLANK",         TOK_BLANK               },
-    { ".BSS",           TOK_BSS                 },
-    { ".BYT",           TOK_BYTE                },
-    { ".BYTE",          TOK_BYTE                },
-    { ".CASE",          TOK_CASE                },
-    { ".CHARMAP",       TOK_CHARMAP             },
-    { ".CODE",          TOK_CODE                },
-    { ".CONCAT",        TOK_CONCAT              },
-    { ".CONDES",        TOK_CONDES              },
-    { ".CONST",         TOK_CONST               },
-    { ".CONSTRUCTOR",   TOK_CONSTRUCTOR         },
-    { ".CPU",           TOK_CPU                 },
-    { ".DATA",          TOK_DATA                },
-    { ".DBG",           TOK_DBG                 },
-    { ".DBYT",          TOK_DBYT                },
-    { ".DEBUGINFO",     TOK_DEBUGINFO           },
-    { ".DEF",           TOK_DEFINED             },
-    { ".DEFINE",        TOK_DEFINE              },
-    { ".DEFINED",       TOK_DEFINED             },
-    { ".DEFINEDMACRO",  TOK_DEFINEDMACRO        },
-    { ".DELMAC",        TOK_DELMAC              },
-    { ".DELMACRO",      TOK_DELMAC              },
-    { ".DESTRUCTOR",    TOK_DESTRUCTOR          },
-    { ".DWORD",         TOK_DWORD               },
-    { ".ELSE",          TOK_ELSE                },
-    { ".ELSEIF",        TOK_ELSEIF              },
-    { ".END",           TOK_END                 },
-    { ".ENDENUM",       TOK_ENDENUM             },
-    { ".ENDIF",         TOK_ENDIF               },
-    { ".ENDMAC",        TOK_ENDMACRO            },
-    { ".ENDMACRO",      TOK_ENDMACRO            },
-    { ".ENDPROC",       TOK_ENDPROC             },
-    { ".ENDREP",        TOK_ENDREP              },
-    { ".ENDREPEAT",     TOK_ENDREP              },
-    { ".ENDSCOPE",      TOK_ENDSCOPE            },
-    { ".ENDSTRUCT",     TOK_ENDSTRUCT           },
-    { ".ENDUNION",      TOK_ENDUNION            },
-    { ".ENUM",          TOK_ENUM                },
-    { ".ERROR",         TOK_ERROR               },
-    { ".EXITMAC",       TOK_EXITMACRO           },
-    { ".EXITMACRO",     TOK_EXITMACRO           },
-    { ".EXPORT",        TOK_EXPORT              },
-    { ".EXPORTZP",      TOK_EXPORTZP            },
-    { ".FARADDR",       TOK_FARADDR             },
-    { ".FATAL",         TOK_FATAL               },
-    { ".FEATURE",       TOK_FEATURE             },
-    { ".FILEOPT",       TOK_FILEOPT             },
-    { ".FOPT",          TOK_FILEOPT             },
-    { ".FORCEIMPORT",   TOK_FORCEIMPORT         },
-    { ".FORCEWORD",     TOK_FORCEWORD           },
-    { ".GLOBAL",        TOK_GLOBAL              },
-    { ".GLOBALZP",      TOK_GLOBALZP            },
-    { ".HIBYTE",        TOK_HIBYTE              },
-    { ".HIBYTES",       TOK_HIBYTES             },
-    { ".HIWORD",        TOK_HIWORD              },
-    { ".I16",           TOK_I16                 },
-    { ".I8",            TOK_I8                  },
-    { ".IDENT",         TOK_MAKEIDENT           },
-    { ".IF",            TOK_IF                  },
-    { ".IFBLANK",       TOK_IFBLANK             },
-    { ".IFCONST",       TOK_IFCONST             },
-    { ".IFDEF",         TOK_IFDEF               },
-    { ".IFNBLANK",      TOK_IFNBLANK            },
-    { ".IFNCONST",      TOK_IFNCONST            },
-    { ".IFNDEF",        TOK_IFNDEF              },
-    { ".IFNREF",        TOK_IFNREF              },
-    { ".IFP02",         TOK_IFP02               },
-    { ".IFP816",        TOK_IFP816              },
-    { ".IFPC02",        TOK_IFPC02              },
-    { ".IFPSC02",       TOK_IFPSC02             },
-    { ".IFREF",         TOK_IFREF               },
-    { ".IMPORT",        TOK_IMPORT              },
-    { ".IMPORTZP",      TOK_IMPORTZP            },
-    { ".INCBIN",        TOK_INCBIN              },
-    { ".INCLUDE",       TOK_INCLUDE             },
-    { ".INTERRUPTOR",   TOK_INTERRUPTOR         },
-    { ".ISMNEM",        TOK_ISMNEMONIC          },
-    { ".ISMNEMONIC",    TOK_ISMNEMONIC          },
-    { ".LEFT",          TOK_LEFT                },
-    { ".LINECONT",      TOK_LINECONT            },
-    { ".LIST",          TOK_LIST                },
-    { ".LISTBYTES",     TOK_LISTBYTES           },
-    { ".LOBYTE",        TOK_LOBYTE              },
-    { ".LOBYTES",       TOK_LOBYTES             },
-    { ".LOCAL",         TOK_LOCAL               },
-    { ".LOCALCHAR",     TOK_LOCALCHAR           },
-    { ".LOWORD",        TOK_LOWORD              },
-    { ".MAC",           TOK_MACRO               },
-    { ".MACPACK",       TOK_MACPACK             },
-    { ".MACRO",         TOK_MACRO               },
-    { ".MATCH",         TOK_MATCH               },
-    { ".MAX",           TOK_MAX                 },
-    { ".MID",           TOK_MID                 },
-    { ".MIN",           TOK_MIN                 },
-    { ".MOD",           TOK_MOD                 },
-    { ".NOT",           TOK_BOOLNOT             },
-    { ".NULL",          TOK_NULL                },
-    { ".OR",            TOK_BOOLOR              },
-    { ".ORG",           TOK_ORG                 },
-    { ".OUT",           TOK_OUT                 },
-    { ".P02",           TOK_P02                 },
-    { ".P816",          TOK_P816                },
-    { ".PAGELEN",       TOK_PAGELENGTH          },
-    { ".PAGELENGTH",    TOK_PAGELENGTH          },
-    { ".PARAMCOUNT",    TOK_PARAMCOUNT          },
-    { ".PC02",          TOK_PC02                },
-    { ".POPCPU",        TOK_POPCPU              },
-    { ".POPSEG",        TOK_POPSEG              },
-    { ".PROC",          TOK_PROC                },
-    { ".PSC02",         TOK_PSC02               },
-    { ".PUSHCPU",       TOK_PUSHCPU             },
-    { ".PUSHSEG",       TOK_PUSHSEG             },
-    { ".REF",           TOK_REFERENCED          },
-    { ".REFERENCED",    TOK_REFERENCED          },
-    { ".RELOC",         TOK_RELOC               },
-    { ".REPEAT",        TOK_REPEAT              },
-    { ".RES",           TOK_RES                 },
-    { ".RIGHT",         TOK_RIGHT               },
-    { ".RODATA",        TOK_RODATA              },
-    { ".SCOPE",         TOK_SCOPE               },
-    { ".SEGMENT",       TOK_SEGMENT             },
-    { ".SET",           TOK_SET                 },
-    { ".SETCPU",        TOK_SETCPU              },
-    { ".SHL",           TOK_SHL                 },
-    { ".SHR",           TOK_SHR                 },
-    { ".SIZEOF",        TOK_SIZEOF              },
-    { ".SMART",         TOK_SMART               },
-    { ".SPRINTF",       TOK_SPRINTF             },
-    { ".STRAT",         TOK_STRAT               },
-    { ".STRING",        TOK_STRING              },
-    { ".STRLEN",        TOK_STRLEN              },
-    { ".STRUCT",        TOK_STRUCT              },
-    { ".TAG",           TOK_TAG                 },
-    { ".TCOUNT",        TOK_TCOUNT              },
-    { ".TIME",          TOK_TIME                },
-    { ".UNDEF",         TOK_UNDEF               },
-    { ".UNDEFINE",      TOK_UNDEF               },
-    { ".UNION",         TOK_UNION               },
-    { ".VERSION",       TOK_VERSION             },
-    { ".WARNING",       TOK_WARNING             },
-    { ".WORD",          TOK_WORD                },
-    { ".XMATCH",        TOK_XMATCH              },
-    { ".XOR",           TOK_BOOLXOR             },
-    { ".ZEROPAGE",      TOK_ZEROPAGE            },
-};
-
-
-
-/*****************************************************************************/
-/*                            CharSource functions                           */
-/*****************************************************************************/
-
-
-
-static void UseCharSource (CharSource* S)
-/* Initialize a new input source and start to use it. */
-{
-    /* Remember the current input char and token */
-    S->Tok      = CurTok.Tok;
-    S->C        = C;
-
-    /* Use the new input source */
-    S->Next     = Source;
-    Source      = S;
-
-    /* Read the first character from the new file */
-    S->Func->NextChar (S);
-
-    /* Setup the next token so it will be skipped on the next call to
-    ** NextRawTok().
-    */
-    CurTok.Tok = TOK_SEP;
-}
-
-
-
-static void DoneCharSource (void)
-/* Close the top level character source */
-{
-    CharSource* S;
-
-    /* First, call the type specific function */
-    Source->Func->Done (Source);
-
-    /* Restore the old token */
-    CurTok.Tok = Source->Tok;
-    C   = Source->C;
-
-    /* Remember the last stacked input source */
-    S = Source->Next;
-
-    /* Delete the top level one ... */
-    xfree (Source);
-
-    /* ... and use the one before */
-    Source = S;
-}
-
-
-
-/*****************************************************************************/
-/*                            InputFile functions                            */
-/*****************************************************************************/
-
-
-
-static void IFMarkStart (CharSource* S)
-/* Mark the start of the next token */
-{
-    CurTok.Pos = S->V.File.Pos;
-}
-
-
-
-static void IFNextChar (CharSource* S)
-/* Read the next character from the input file */
-{
-    /* Check for end of line, read the next line if needed */
-    while (SB_GetIndex (&S->V.File.Line) >= SB_GetLen (&S->V.File.Line)) {
-
-        unsigned Len;
-
-        /* End of current line reached, read next line */
-        SB_Clear (&S->V.File.Line);
-        while (1) {
-
-            int N = fgetc (S->V.File.F);
-            if (N == EOF) {
-                /* End of file. Accept files without a newline at the end */
-                if (SB_NotEmpty (&S->V.File.Line)) {
-                    break;
-                }
-
-                /* No more data - add an empty line to the listing. This
-                ** is a small hack needed to keep the PC output in sync.
-                */
-                NewListingLine (&EmptyStrBuf, S->V.File.Pos.Name, FCount);
-                C = EOF;
-                return;
-
-            /* Check for end of line */
-            } else if (N == '\n') {
-
-                /* End of line */
-                break;
-
-            /* Collect other stuff */
-            } else {
-
-                /* Append data to line */
-                SB_AppendChar (&S->V.File.Line, N);
-
-            }
-        }
-
-
-        /* If we come here, we have a new input line. To avoid problems
-        ** with strange line terminators, remove all whitespace from the
-        ** end of the line, the add a single newline.
-        */
-        Len = SB_GetLen (&S->V.File.Line);
-        while (Len > 0 && IsSpace (SB_AtUnchecked (&S->V.File.Line, Len-1))) {
-            --Len;
-        }
-        SB_Drop (&S->V.File.Line, SB_GetLen (&S->V.File.Line) - Len);
-        SB_AppendChar (&S->V.File.Line, '\n');
-
-        /* Terminate the string buffer */
-        SB_Terminate (&S->V.File.Line);
-
-        /* One more line */
-        S->V.File.Pos.Line++;
-
-        /* Remember the new line for the listing */
-        NewListingLine (&S->V.File.Line, S->V.File.Pos.Name, FCount);
-
-    }
-
-    /* Set the column pointer */
-    S->V.File.Pos.Col = SB_GetIndex (&S->V.File.Line);
-
-    /* Return the next character from the buffer */
-    C = SB_Get (&S->V.File.Line);
-}
-
-
-
-void IFDone (CharSource* S)
-/* Close the current input file */
-{
-    /* We're at the end of an include file. Check if we have any
-    ** open .IFs, or any open token lists in this file. This
-    ** enforcement is artificial, using conditionals that start
-    ** in one file and end in another are uncommon, and don't
-    ** allowing these things will help finding errors.
-    */
-    CheckOpenIfs ();
-
-    /* If we've added search paths for this file, remove them */
-    if (S->V.File.IncSearchPath) {
-        PopSearchPath (IncSearchPath);
-    }
-    if (S->V.File.BinSearchPath) {
-        PopSearchPath (BinSearchPath);
-    }
-
-    /* Free the line buffer */
-    SB_Done (&S->V.File.Line);
-
-    /* Close the input file and decrement the file count. We will ignore
-    ** errors here, since we were just reading from the file.
-    */
-    (void) fclose (S->V.File.F);
-    --FCount;
-}
-
-
-
-/* Set of input file handling functions */
-static const CharSourceFunctions IFFunc = {
-    IFMarkStart,
-    IFNextChar,
-    IFDone
-};
-
-
-
-int NewInputFile (const char* Name)
-/* Open a new input file. Returns true if the file could be successfully opened
-** and false otherwise.
-*/
-{
-    int         RetCode = 0;            /* Return code. Assume an error. */
-    char*       PathName = 0;
-    FILE*       F;
-    struct stat Buf;
-    StrBuf      NameBuf;                /* No need to initialize */
-    StrBuf      Path = AUTO_STRBUF_INITIALIZER;
-    unsigned    FileIdx;
-    CharSource* S;
-
-
-    /* If this is the main file, just try to open it. If it's an include file,
-    ** search for it using the include path list.
-    */
-    if (FCount == 0) {
-        /* Main file */
-        F = fopen (Name, "r");
-        if (F == 0) {
-            Fatal ("Cannot open input file `%s': %s", Name, strerror (errno));
-        }
-    } else {
-        /* We are on include level. Search for the file in the include
-        ** directories.
-        */
-        PathName = SearchFile (IncSearchPath, Name);
-        if (PathName == 0 || (F = fopen (PathName, "r")) == 0) {
-            /* Not found or cannot open, print an error and bail out */
-            Error ("Cannot open include file `%s': %s", Name, strerror (errno));
-            goto ExitPoint;
-        }
-
-        /* Use the path name from now on */
-        Name = PathName;
-    }
-
-    /* Stat the file and remember the values. There's a race condition here,
-    ** since we cannot use fileno() (non-standard identifier in standard
-    ** header file), and therefore not fstat. When using stat with the
-    ** file name, there's a risk that the file was deleted and recreated
-    ** while it was open. Since mtime and size are only used to check
-    ** if a file has changed in the debugger, we will ignore this problem
-    ** here.
-    */
-    if (FileStat (Name, &Buf) != 0) {
-        Fatal ("Cannot stat input file `%s': %s", Name, strerror (errno));
-    }
-
-    /* Add the file to the input file table and remember the index */
-    FileIdx = AddFile (SB_InitFromString (&NameBuf, Name),
-                       (FCount == 0)? FT_MAIN : FT_INCLUDE,
-                       Buf.st_size, (unsigned long) Buf.st_mtime);
-
-    /* Create a new input source variable and initialize it */
-    S                   = xmalloc (sizeof (*S));
-    S->Func             = &IFFunc;
-    S->V.File.F         = F;
-    S->V.File.Pos.Line  = 0;
-    S->V.File.Pos.Col   = 0;
-    S->V.File.Pos.Name  = FileIdx;
-    SB_Init (&S->V.File.Line);
-
-    /* Push the path for this file onto the include search lists */
-    SB_CopyBuf (&Path, Name, FindName (Name) - Name);
-    SB_Terminate (&Path);
-    S->V.File.IncSearchPath = PushSearchPath (IncSearchPath, SB_GetConstBuf (&Path));
-    S->V.File.BinSearchPath = PushSearchPath (BinSearchPath, SB_GetConstBuf (&Path));
-    SB_Done (&Path);
-
-    /* Count active input files */
-    ++FCount;
-
-    /* Use this input source */
-    UseCharSource (S);
-
-    /* File successfully opened */
-    RetCode = 1;
-
-ExitPoint:
-    /* Free an allocated name buffer */
-    xfree (PathName);
-
-    /* Return the success code */
-    return RetCode;
-}
-
-
-
-/*****************************************************************************/
-/*                            InputData functions                            */
-/*****************************************************************************/
-
-
-
-static void IDMarkStart (CharSource* S attribute ((unused)))
-/* Mark the start of the next token */
-{
-    /* Nothing to do here */
-}
-
-
-
-static void IDNextChar (CharSource* S)
-/* Read the next character from the input text */
-{
-    C = *S->V.Data.Pos++;
-    if (C == '\0') {
-        /* End of input data */
-        --S->V.Data.Pos;
-        C = EOF;
-    }
-}
-
-
-
-void IDDone (CharSource* S)
-/* Close the current input data */
-{
-    /* Cleanup the current stuff */
-    if (S->V.Data.Malloced) {
-        xfree (S->V.Data.Text);
-    }
-}
-
-
-
-/* Set of input data handling functions */
-static const CharSourceFunctions IDFunc = {
-    IDMarkStart,
-    IDNextChar,
-    IDDone
-};
-
-
-
-void NewInputData (char* Text, int Malloced)
-/* Add a chunk of input data to the input stream */
-{
-    CharSource* S;
-
-    /* Create a new input source variable and initialize it */
-    S                   = xmalloc (sizeof (*S));
-    S->Func             = &IDFunc;
-    S->V.Data.Text      = Text;
-    S->V.Data.Pos       = Text;
-    S->V.Data.Malloced  = Malloced;
-
-    /* Use this input source */
-    UseCharSource (S);
-}
-
-
-
-/*****************************************************************************/
-/*                    Character classification functions                     */
-/*****************************************************************************/
-
-
-
-int IsIdChar (int C)
-/* Return true if the character is a valid character for an identifier */
-{
-    return IsAlNum (C)                  ||
-           (C == '_')                   ||
-           (C == '@' && AtInIdents)     ||
-           (C == '$' && DollarInIdents);
-}
-
-
-
-int IsIdStart (int C)
-/* Return true if the character may start an identifier */
-{
-    return IsAlpha (C) || C == '_';
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static unsigned DigitVal (unsigned char C)
-/* Convert a digit into it's numerical representation */
-{
-    if (IsDigit (C)) {
-        return C - '0';
-    } else {
-        return toupper (C) - 'A' + 10;
-    }
-}
-
-
-
-static void NextChar (void)
-/* Read the next character from the input file */
-{
-    Source->Func->NextChar (Source);
-}
-
-
-
-void LocaseSVal (void)
-/* Make SVal lower case */
-{
-    SB_ToLower (&CurTok.SVal);
-}
-
-
-
-void UpcaseSVal (void)
-/* Make SVal upper case */
-{
-    SB_ToUpper (&CurTok.SVal);
-}
-
-
-
-static int CmpDotKeyword (const void* K1, const void* K2)
-/* Compare function for the dot keyword search */
-{
-    return strcmp (((struct DotKeyword*)K1)->Key, ((struct DotKeyword*)K2)->Key);
-}
-
-
-
-static token_t FindDotKeyword (void)
-/* Find the dot keyword in SVal. Return the corresponding token if found,
-** return TOK_NONE if not found.
-*/
-{
-    struct DotKeyword K;
-    struct DotKeyword* R;
-
-    /* Initialize K */
-    K.Key = SB_GetConstBuf (&CurTok.SVal);
-    K.Tok = 0;
-
-    /* If we aren't in ignore case mode, we have to uppercase the keyword */
-    if (!IgnoreCase) {
-        UpcaseSVal ();
-    }
-
-    /* Search for the keyword */
-    R = bsearch (&K, DotKeywords, sizeof (DotKeywords) / sizeof (DotKeywords [0]),
-                 sizeof (DotKeywords [0]), CmpDotKeyword);
-    if (R != 0) {
-
-        /* By default, disable any somewhat experiemental DotKeyword. */
-
-        switch (R->Tok) {
-
-            case TOK_ADDRSIZE:
-                /* Disallow .ADDRSIZE function by default */
-                if (AddrSize == 0) {
-                    return TOK_NONE;
-                }
-                break;
-
-            default:
-                break;
-        }
-
-        return R->Tok;
-
-    } else {
-        return TOK_NONE;
-    }
-}
-
-
-
-static void ReadIdent (void)
-/* Read an identifier from the current input position into Ident. Filling SVal
-** starts at the current position with the next character in C. It is assumed
-** that any characters already filled in are ok, and the character in C is
-** checked.
-*/
-{
-    /* Read the identifier */
-    do {
-        SB_AppendChar (&CurTok.SVal, C);
-        NextChar ();
-    } while (IsIdChar (C));
-    SB_Terminate (&CurTok.SVal);
-
-    /* If we should ignore case, convert the identifier to upper case */
-    if (IgnoreCase) {
-        UpcaseSVal ();
-    }
-}
-
-
-
-static void ReadStringConst (int StringTerm)
-/* Read a string constant into SVal. */
-{
-    /* Skip the leading string terminator */
-    NextChar ();
-
-    /* Read the string */
-    while (1) {
-        if (C == StringTerm) {
-            break;
-        }
-        if (C == '\n' || C == EOF) {
-            Error ("Newline in string constant");
-            break;
-        }
-
-        /* Append the char to the string */
-        SB_AppendChar (&CurTok.SVal, C);
-
-        /* Skip the character */
-        NextChar ();
-    }
-
-    /* Skip the trailing terminator */
-    NextChar ();
-
-    /* Terminate the string */
-    SB_Terminate (&CurTok.SVal);
-}
-
-
-
-static int Sweet16Reg (const StrBuf* Id)
-/* Check if the given identifier is a sweet16 register. Return -1 if this is
-** not the case, return the register number otherwise.
-*/
-{
-    unsigned RegNum;
-    char Check;
-
-    if (SB_GetLen (Id) < 2) {
-        return -1;
-    }
-    if (toupper (SB_AtUnchecked (Id, 0)) != 'R') {
-        return -1;
-    }
-    if (!IsDigit (SB_AtUnchecked (Id, 1))) {
-        return -1;
-    }
-
-    if (sscanf (SB_GetConstBuf (Id)+1, "%u%c", &RegNum, &Check) != 1 || RegNum > 15) {
-        /* Invalid register */
-        return -1;
-    }
-
-    /* The register number is valid */
-    return (int) RegNum;
-}
-
-
-
-void NextRawTok (void)
-/* Read the next raw token from the input stream */
-{
-    Macro* M;
-
-    /* If we've a forced end of assembly, don't read further */
-    if (ForcedEnd) {
-        CurTok.Tok = TOK_EOF;
-        return;
-    }
-
-Restart:
-    /* Check if we have tokens from another input source */
-    if (InputFromStack ()) {
-        if (CurTok.Tok == TOK_IDENT && (M = FindDefine (&CurTok.SVal)) != 0) {
-            /* This is a define style macro - expand it */
-            MacExpandStart (M);
-            goto Restart;
-        }
-        return;
-    }
-
-Again:
-    /* Skip whitespace, remember if we had some */
-    if ((CurTok.WS = IsBlank (C)) != 0) {
-        do {
-            NextChar ();
-        } while (IsBlank (C));
-    }
-
-    /* Mark the file position of the next token */
-    Source->Func->MarkStart (Source);
-
-    /* Clear the string attribute */
-    SB_Clear (&CurTok.SVal);
-
-    /* Generate line info for the current token */
-    NewAsmLine ();
-
-    /* Hex number or PC symbol? */
-    if (C == '$') {
-        NextChar ();
-
-        /* Hex digit must follow or DollarIsPC must be enabled */
-        if (!IsXDigit (C)) {
-            if (DollarIsPC) {
-                CurTok.Tok = TOK_PC;
-                return;
-            } else {
-                Error ("Hexadecimal digit expected");
-            }
-        }
-
-        /* Read the number */
-        CurTok.IVal = 0;
-        while (1) {
-            if (UnderlineInNumbers && C == '_') {
-                while (C == '_') {
-                    NextChar ();
-                }
-                if (!IsXDigit (C)) {
-                    Error ("Number may not end with underline");
-                }
-            }
-            if (IsXDigit (C)) {
-                if (CurTok.IVal & 0xF0000000) {
-                    Error ("Overflow in hexadecimal number");
-                    CurTok.IVal = 0;
-                }
-                CurTok.IVal = (CurTok.IVal << 4) + DigitVal (C);
-                NextChar ();
-            } else {
-                break;
-            }
-        }
-
-        /* This is an integer constant */
-        CurTok.Tok = TOK_INTCON;
-        return;
-    }
-
-    /* Binary number? */
-    if (C == '%') {
-        NextChar ();
-
-        /* 0 or 1 must follow */
-        if (!IsBDigit (C)) {
-            Error ("Binary digit expected");
-        }
-
-        /* Read the number */
-        CurTok.IVal = 0;
-        while (1) {
-            if (UnderlineInNumbers && C == '_') {
-                while (C == '_') {
-                    NextChar ();
-                }
-                if (!IsBDigit (C)) {
-                    Error ("Number may not end with underline");
-                }
-            }
-            if (IsBDigit (C)) {
-                if (CurTok.IVal & 0x80000000) {
-                    Error ("Overflow in binary number");
-                    CurTok.IVal = 0;
-                }
-                CurTok.IVal = (CurTok.IVal << 1) + DigitVal (C);
-                NextChar ();
-            } else {
-                break;
-            }
-        }
-
-        /* This is an integer constant */
-        CurTok.Tok = TOK_INTCON;
-        return;
-    }
-
-    /* Number? */
-    if (IsDigit (C)) {
-
-        char Buf[16];
-        unsigned Digits;
-        unsigned Base;
-        unsigned I;
-        long     Max;
-        unsigned DVal;
-
-        /* Ignore leading zeros */
-        while (C == '0') {
-            NextChar ();
-        }
-
-        /* Read the number into Buf counting the digits */
-        Digits = 0;
-        while (1) {
-            if (UnderlineInNumbers && C == '_') {
-                while (C == '_') {
-                    NextChar ();
-                }
-                if (!IsXDigit (C)) {
-                    Error ("Number may not end with underline");
-                }
-            }
-            if (IsXDigit (C)) {
-                /* Buf is big enough to allow any decimal and hex number to
-                ** overflow, so ignore excess digits here, they will be detected
-                ** when we convert the value.
-                */
-                if (Digits < sizeof (Buf)) {
-                    Buf[Digits++] = C;
-                }
-                NextChar ();
-            } else {
-                break;
-            }
-        }
-
-        /* Allow zilog/intel style hex numbers with a 'h' suffix */
-        if (C == 'h' || C == 'H') {
-            NextChar ();
-            Base = 16;
-            Max  = 0xFFFFFFFFUL / 16;
-        } else {
-            Base = 10;
-            Max  = 0xFFFFFFFFUL / 10;
-        }
-
-        /* Convert the number using the given base */
-        CurTok.IVal = 0;
-        for (I = 0; I < Digits; ++I) {
-            if (CurTok.IVal > Max) {
-                Error ("Number out of range");
-                CurTok.IVal = 0;
-                break;
-            }
-            DVal = DigitVal (Buf[I]);
-            if (DVal >= Base) {
-                Error ("Invalid digits in number");
-                CurTok.IVal = 0;
-                break;
-            }
-            CurTok.IVal = (CurTok.IVal * Base) + DVal;
-        }
-
-        /* This is an integer constant */
-        CurTok.Tok = TOK_INTCON;
-        return;
-    }
-
-    /* Control command? */
-    if (C == '.') {
-
-        /* Remember and skip the dot */
-        NextChar ();
-
-        /* Check if it's just a dot */
-        if (!IsIdStart (C)) {
-
-            /* Just a dot */
-            CurTok.Tok = TOK_DOT;
-
-        } else {
-
-            /* Read the remainder of the identifier */
-            SB_AppendChar (&CurTok.SVal, '.');
-            ReadIdent ();
-
-            /* Dot keyword, search for it */
-            CurTok.Tok = FindDotKeyword ();
-            if (CurTok.Tok == TOK_NONE) {
-
-                /* Not found */
-                if (!LeadingDotInIdents) {
-                    /* Invalid pseudo instruction */
-                    Error ("`%m%p' is not a recognized control command", &CurTok.SVal);
-                    goto Again;
-                }
-
-                /* An identifier with a dot. Check if it's a define style
-                ** macro.
-                */
-                if ((M = FindDefine (&CurTok.SVal)) != 0) {
-                    /* This is a define style macro - expand it */
-                    MacExpandStart (M);
-                    goto Restart;
-                }
-
-                /* Just an identifier with a dot */
-                CurTok.Tok = TOK_IDENT;
-            }
-
-        }
-        return;
-    }
-
-    /* Indirect op for sweet16 cpu. Must check this before checking for local
-    ** symbols, because these may also use the '@' symbol.
-    */
-    if (CPU == CPU_SWEET16 && C == '@') {
-        NextChar ();
-        CurTok.Tok = TOK_AT;
-        return;
-    }
-
-    /* Local symbol? */
-    if (C == LocalStart) {
-
-        /* Read the identifier. */
-        ReadIdent ();
-
-        /* Start character alone is not enough */
-        if (SB_GetLen (&CurTok.SVal) == 1) {
-            Error ("Invalid cheap local symbol");
-            goto Again;
-        }
-
-        /* A local identifier */
-        CurTok.Tok = TOK_LOCAL_IDENT;
-        return;
-    }
-
-
-    /* Identifier or keyword? */
-    if (IsIdStart (C)) {
-
-        /* Read the identifier */
-        ReadIdent ();
-
-        /* Check for special names. Bail out if we have identified the type of
-        ** the token. Go on if the token is an identifier.
-        */
-        if (SB_GetLen (&CurTok.SVal) == 1) {
-            switch (toupper (SB_AtUnchecked (&CurTok.SVal, 0))) {
-
-                case 'A':
-                    if (C == ':') {
-                        NextChar ();
-                        CurTok.Tok = TOK_OVERRIDE_ABS;
-                    } else {
-                        CurTok.Tok = TOK_A;
-                    }
-                    return;
-
-                case 'F':
-                    if (C == ':') {
-                        NextChar ();
-                        CurTok.Tok = TOK_OVERRIDE_FAR;
-                        return;
-                    }
-                    break;
-
-                case 'S':
-                    if (CPU == CPU_65816) {
-                        CurTok.Tok = TOK_S;
-                        return;
-                    }
-                    break;
-
-                case 'X':
-                    CurTok.Tok = TOK_X;
-                    return;
-
-                case 'Y':
-                    CurTok.Tok = TOK_Y;
-                    return;
-
-                case 'Z':
-                    if (C == ':') {
-                        NextChar ();
-                        CurTok.Tok = TOK_OVERRIDE_ZP;
-                        return;
-                    }
-                    break;
-
-                default:
-                    break;
-            }
-
-        } else if (CPU == CPU_SWEET16 &&
-                  (CurTok.IVal = Sweet16Reg (&CurTok.SVal)) >= 0) {
-
-            /* A sweet16 register number in sweet16 mode */
-            CurTok.Tok = TOK_REG;
-            return;
-
-        }
-
-        /* Check for define style macro */
-        if ((M = FindDefine (&CurTok.SVal)) != 0) {
-            /* Macro - expand it */
-            MacExpandStart (M);
-            goto Restart;
-        } else {
-            /* An identifier */
-            CurTok.Tok = TOK_IDENT;
-        }
-        return;
-    }
-
-    /* Ok, let's do the switch */
-CharAgain:
-    switch (C) {
-
-        case '+':
-            NextChar ();
-            CurTok.Tok = TOK_PLUS;
-            return;
-
-        case '-':
-            NextChar ();
-            CurTok.Tok = TOK_MINUS;
-            return;
-
-        case '/':
-            NextChar ();
-            if (C != '*') {
-                CurTok.Tok = TOK_DIV;
-            } else if (CComments) {
-                /* Remember the position, then skip the '*' */
-                Collection LineInfos = STATIC_COLLECTION_INITIALIZER;
-                GetFullLineInfo (&LineInfos);
-                NextChar ();
-                do {
-                    while (C !=  '*') {
-                        if (C == EOF) {
-                            LIError (&LineInfos, "Unterminated comment");
-                            ReleaseFullLineInfo (&LineInfos);
-                            DoneCollection (&LineInfos);
-                            goto CharAgain;
-                        }
-                        NextChar ();
-                    }
-                    NextChar ();
-                } while (C != '/');
-                NextChar ();
-                ReleaseFullLineInfo (&LineInfos);
-                DoneCollection (&LineInfos);
-                goto Again;
-            }
-            return;
-
-        case '*':
-            NextChar ();
-            CurTok.Tok = TOK_MUL;
-            return;
-
-        case '^':
-            NextChar ();
-            CurTok.Tok = TOK_XOR;
-            return;
-
-        case '&':
-            NextChar ();
-            if (C == '&') {
-                NextChar ();
-                CurTok.Tok = TOK_BOOLAND;
-            } else {
-                CurTok.Tok = TOK_AND;
-            }
-            return;
-
-        case '|':
-            NextChar ();
-            if (C == '|') {
-                NextChar ();
-                CurTok.Tok = TOK_BOOLOR;
-            } else {
-                CurTok.Tok = TOK_OR;
-            }
-            return;
-
-        case ':':
-            NextChar ();
-            switch (C) {
-
-                case ':':
-                    NextChar ();
-                    CurTok.Tok = TOK_NAMESPACE;
-                    break;
-
-                case '-':
-                    CurTok.IVal = 0;
-                    do {
-                        --CurTok.IVal;
-                        NextChar ();
-                    } while (C == '-');
-                    CurTok.Tok = TOK_ULABEL;
-                    break;
-
-                case '+':
-                    CurTok.IVal = 0;
-                    do {
-                        ++CurTok.IVal;
-                        NextChar ();
-                    } while (C == '+');
-                    CurTok.Tok = TOK_ULABEL;
-                    break;
-
-                case '=':
-                    NextChar ();
-                    CurTok.Tok = TOK_ASSIGN;
-                    break;
-
-                default:
-                    CurTok.Tok = TOK_COLON;
-                    break;
-            }
-            return;
-
-        case ',':
-            NextChar ();
-            CurTok.Tok = TOK_COMMA;
-            return;
-
-        case ';':
-            NextChar ();
-            while (C != '\n' && C != EOF) {
-                NextChar ();
-            }
-            goto CharAgain;
-
-        case '#':
-            NextChar ();
-            CurTok.Tok = TOK_HASH;
-            return;
-
-        case '(':
-            NextChar ();
-            CurTok.Tok = TOK_LPAREN;
-            return;
-
-        case ')':
-            NextChar ();
-            CurTok.Tok = TOK_RPAREN;
-            return;
-
-        case '[':
-            NextChar ();
-            CurTok.Tok = TOK_LBRACK;
-            return;
-
-        case ']':
-            NextChar ();
-            CurTok.Tok = TOK_RBRACK;
-            return;
-
-        case '{':
-            NextChar ();
-            CurTok.Tok = TOK_LCURLY;
-            return;
-
-        case '}':
-            NextChar ();
-            CurTok.Tok = TOK_RCURLY;
-            return;
-
-        case '<':
-            NextChar ();
-            if (C == '=') {
-                NextChar ();
-                CurTok.Tok = TOK_LE;
-            } else if (C == '<') {
-                NextChar ();
-                CurTok.Tok = TOK_SHL;
-            } else if (C == '>') {
-                NextChar ();
-                CurTok.Tok = TOK_NE;
-            } else {
-                CurTok.Tok = TOK_LT;
-            }
-            return;
-
-        case '=':
-            NextChar ();
-            CurTok.Tok = TOK_EQ;
-            return;
-
-        case '!':
-            NextChar ();
-            CurTok.Tok = TOK_BOOLNOT;
-            return;
-
-        case '>':
-            NextChar ();
-            if (C == '=') {
-                NextChar ();
-                CurTok.Tok = TOK_GE;
-            } else if (C == '>') {
-                NextChar ();
-                CurTok.Tok = TOK_SHR;
-            } else {
-                CurTok.Tok = TOK_GT;
-            }
-            return;
-
-        case '~':
-            NextChar ();
-            CurTok.Tok = TOK_NOT;
-            return;
-
-        case '\'':
-            /* Hack: If we allow ' as terminating character for strings, read
-            ** the following stuff as a string, and check for a one character
-            ** string later.
-            */
-            if (LooseStringTerm) {
-                ReadStringConst ('\'');
-                if (SB_GetLen (&CurTok.SVal) == 1) {
-                    CurTok.IVal = SB_AtUnchecked (&CurTok.SVal, 0);
-                    CurTok.Tok = TOK_CHARCON;
-                } else {
-                    CurTok.Tok = TOK_STRCON;
-                }
-            } else {
-                /* Always a character constant */
-                NextChar ();
-                if (C == EOF || IsControl (C)) {
-                    Error ("Illegal character constant");
-                    goto CharAgain;
-                }
-                CurTok.IVal = C;
-                CurTok.Tok = TOK_CHARCON;
-                NextChar ();
-                if (C != '\'') {
-                    if (!MissingCharTerm) {
-                        Error ("Illegal character constant");
-                    }
-                } else {
-                    NextChar ();
-                }
-            }
-            return;
-
-        case '\"':
-            ReadStringConst ('\"');
-            CurTok.Tok = TOK_STRCON;
-            return;
-
-        case '\\':
-            /* Line continuation? */
-            if (LineCont) {
-                NextChar ();
-                /* Next char should be a LF, if not, will result in an error later */
-                if (C == '\n') {
-                    /* Ignore the '\n' */
-                    NextChar ();
-                    goto Again;
-                } else {
-                    /* Make it clear what the problem is: */
-                    Error ("EOL expected.");
-                }
-            }
-            break;
-
-        case '\n':
-            NextChar ();
-            CurTok.Tok = TOK_SEP;
-            return;
-
-        case EOF:
-            CheckInputStack ();
-            /* In case of the main file, do not close it, but return EOF. */
-            if (Source && Source->Next) {
-                DoneCharSource ();
-                goto Again;
-            } else {
-                CurTok.Tok = TOK_EOF;
-            }
-            return;
-    }
-
-    /* If we go here, we could not identify the current character. Skip it
-    ** and try again.
-    */
-    Error ("Invalid input character: 0x%02X", C & 0xFF);
-    NextChar ();
-    goto Again;
-}
-
-
-
-int GetSubKey (const char** Keys, unsigned Count)
-/* Search for a subkey in a table of keywords. The current token must be an
-** identifier and all keys must be in upper case. The identifier will be
-** uppercased in the process. The function returns the index of the keyword,
-** or -1 if the keyword was not found.
-*/
-{
-    unsigned I;
-
-    /* Must have an identifier */
-    PRECONDITION (CurTok.Tok == TOK_IDENT);
-
-    /* If we aren't in ignore case mode, we have to uppercase the identifier */
-    if (!IgnoreCase) {
-        UpcaseSVal ();
-    }
-
-    /* Do a linear search (a binary search is not worth the effort) */
-    for (I = 0; I < Count; ++I) {
-        if (SB_CompareStr (&CurTok.SVal, Keys [I]) == 0) {
-            /* Found it */
-            return I;
-        }
-    }
-
-    /* Not found */
-    return -1;
-}
-
-
-
-unsigned char ParseAddrSize (void)
-/* Check if the next token is a keyword that denotes an address size specifier.
-** If so, return the corresponding address size constant, otherwise output an
-** error message and return ADDR_SIZE_DEFAULT.
-*/
-{
-    unsigned char AddrSize;
-
-    /* Check for an identifier */
-    if (CurTok.Tok != TOK_IDENT) {
-        Error ("Address size specifier expected");
-        return ADDR_SIZE_DEFAULT;
-    }
-
-    /* Convert the attribute */
-    AddrSize = AddrSizeFromStr (SB_GetConstBuf (&CurTok.SVal));
-    if (AddrSize == ADDR_SIZE_INVALID) {
-        Error ("Address size specifier expected");
-        AddrSize = ADDR_SIZE_DEFAULT;
-    }
-
-    /* Done */
-    return AddrSize;
-}
-
-
-
-void InitScanner (const char* InFile)
-/* Initialize the scanner, open the given input file */
-{
-    /* Open the input file */
-    NewInputFile (InFile);
-}
-
-
-
-void DoneScanner (void)
-/* Release scanner resources */
-{
-    DoneCharSource ();
-}
diff --git a/src/ca65/scanner.h b/src/ca65/scanner.h
deleted file mode 100644 (file)
index c445aef..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 scanner.h                                 */
-/*                                                                           */
-/*                  The scanner for the ca65 macroassembler                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SCANNER_H
-#define SCANNER_H
-
-
-
-/* ca65 */
-#include "token.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Scanner variables */
-extern Token CurTok;            /* Current input token incl. attributes */
-extern int   ForcedEnd;         /* Force end of assembly */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int IsIdChar (int C);
-/* Return true if the character is a valid character for an identifier */
-
-int IsIdStart (int C);
-/* Return true if the character may start an identifier */
-
-int NewInputFile (const char* Name);
-/* Open a new input file. Returns true if the file could be successfully opened
-** and false otherwise.
-*/
-
-void NewInputData (char* Text, int Malloced);
-/* Add a chunk of input data to the input stream */
-
-void LocaseSVal (void);
-/* Make SVal lower case */
-
-void UpcaseSVal (void);
-/* Make SVal upper case */
-
-void NextRawTok (void);
-/* Read the next raw token from the input stream */
-
-int GetSubKey (const char** Keys, unsigned Count);
-/* Search for a subkey in a table of keywords. The current token must be an
-** identifier and all keys must be in upper case. The identifier will be
-** uppercased in the process. The function returns the index of the keyword,
-** or -1 if the keyword was not found.
-*/
-
-unsigned char ParseAddrSize (void);
-/* Check if the next token is a keyword that denotes an address size specifier.
-** If so, return the corresponding address size constant, otherwise output an
-** error message and return ADDR_SIZE_DEFAULT.
-*/
-
-void InitScanner (const char* InFile);
-/* Initialize the scanner, open the given input file */
-
-void DoneScanner (void);
-/* Release scanner resources */
-
-
-
-/* End of scanner.h */
-
-#endif
diff --git a/src/ca65/segdef.c b/src/ca65/segdef.c
deleted file mode 100644 (file)
index bf735ef..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 segdef.c                                  */
-/*                                                                           */
-/*              Segment definitions for the ca65 assembler                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "xmalloc.h"
-
-/* ca65 */
-#include "segdef.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-SegDef* NewSegDef (const char* Name, unsigned char AddrSize)
-/* Create a new segment definition and return it */
-{
-    /* Allocate memory */
-    SegDef* D = xmalloc (sizeof (SegDef));
-
-    /* Initialize it */
-    D->Name     = xstrdup (Name);
-    D->AddrSize = AddrSize;
-
-    /* Return the result */
-    return D;
-}
-
-
-
-void FreeSegDef (SegDef* D)
-/* Free a segment definition */
-{
-    xfree (D->Name);
-    xfree (D);
-}
-
-
-
-SegDef* DupSegDef (const SegDef* Def)
-/* Duplicate a segment definition and return it */
-{
-    return NewSegDef (Def->Name, Def->AddrSize);
-}
diff --git a/src/ca65/segdef.h b/src/ca65/segdef.h
deleted file mode 100644 (file)
index 824a59b..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 segdef.h                                  */
-/*                                                                           */
-/*              Segment definitions for the ca65 assembler                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SEGDEF_H
-#define SEGDEF_H
-
-
-
-/* common */
-#include "addrsize.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Segment definition */
-typedef struct SegDef SegDef;
-struct SegDef {
-    char*         Name;         /* Segment name */
-    unsigned char AddrSize;     /* Default address size */
-};
-
-/* Initializer for static SegDefs */
-#define STATIC_SEGDEF_INITIALIZER(name, addrsize) { name, addrsize }
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-SegDef* NewSegDef (const char* Name, unsigned char AddrSize);
-/* Create a new segment definition and return it */
-
-void FreeSegDef (SegDef* D);
-/* Free a segment definition */
-
-SegDef* DupSegDef (const SegDef* D);
-/* Duplicate a segment definition and return it */
-
-
-
-/* End of segdef.h */
-
-#endif
diff --git a/src/ca65/segment.c b/src/ca65/segment.c
deleted file mode 100644 (file)
index 35a41ff..0000000
+++ /dev/null
@@ -1,629 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 segment.c                                 */
-/*                                                                           */
-/*                   Segments for the ca65 macroassembler                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "addrsize.h"
-#include "alignment.h"
-#include "coll.h"
-#include "mmodel.h"
-#include "segdefs.h"
-#include "segnames.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "error.h"
-#include "fragment.h"
-#include "global.h"
-#include "lineinfo.h"
-#include "listing.h"
-#include "objcode.h"
-#include "objfile.h"
-#include "segment.h"
-#include "span.h"
-#include "spool.h"
-#include "studyexpr.h"
-#include "symtab.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* If OrgPerSeg is false, all segments share the RelocMode flag and a PC
-** used when in absolute mode. OrgPerSeg may be set by .feature org_per_seg
-*/
-static int              RelocMode = 1;
-static unsigned long    AbsPC     = 0;          /* PC if in absolute mode */
-
-/* Definitions for predefined segments */
-SegDef NullSegDef     = STATIC_SEGDEF_INITIALIZER (SEGNAME_NULL,     ADDR_SIZE_ABS);
-SegDef ZeropageSegDef = STATIC_SEGDEF_INITIALIZER (SEGNAME_ZEROPAGE, ADDR_SIZE_ZP);
-SegDef DataSegDef     = STATIC_SEGDEF_INITIALIZER (SEGNAME_DATA,     ADDR_SIZE_ABS);
-SegDef BssSegDef      = STATIC_SEGDEF_INITIALIZER (SEGNAME_BSS,      ADDR_SIZE_ABS);
-SegDef RODataSegDef   = STATIC_SEGDEF_INITIALIZER (SEGNAME_RODATA,   ADDR_SIZE_ABS);
-SegDef CodeSegDef     = STATIC_SEGDEF_INITIALIZER (SEGNAME_CODE,     ADDR_SIZE_ABS);
-
-/* Collection containing all segments */
-Collection SegmentList = STATIC_COLLECTION_INITIALIZER;
-
-/* Currently active segment */
-Segment* ActiveSeg;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static Segment* NewSegFromDef (SegDef* Def)
-/* Create a new segment from a segment definition. Used only internally, no
-** checks.
-*/
-{
-    /* Create a new segment */
-    Segment* S = xmalloc (sizeof (*S));
-
-    /* Initialize it */
-    S->Root      = 0;
-    S->Last      = 0;
-    S->FragCount = 0;
-    S->Num       = CollCount (&SegmentList);
-    S->Flags     = SEG_FLAG_NONE;
-    S->Align     = 1;
-    S->RelocMode = 1;
-    S->PC        = 0;
-    S->AbsPC     = 0;
-    S->Def       = Def;
-
-    /* Insert it into the segment list */
-    CollAppend (&SegmentList, S);
-
-    /* And return it... */
-    return S;
-}
-
-
-
-static Segment* NewSegment (const char* Name, unsigned char AddrSize)
-/* Create a new segment, insert it into the global list and return it */
-{
-    /* Check for too many segments */
-    if (CollCount (&SegmentList) >= 256) {
-        Fatal ("Too many segments");
-    }
-
-    /* Check the segment name for invalid names */
-    if (!ValidSegName (Name)) {
-        Error ("Illegal segment name: `%s'", Name);
-    }
-
-    /* Create a new segment and return it */
-    return NewSegFromDef (NewSegDef (Name, AddrSize));
-}
-
-
-
-Fragment* GenFragment (unsigned char Type, unsigned short Len)
-/* Generate a new fragment, add it to the current segment and return it. */
-{
-    /* Create the new fragment */
-    Fragment* F = NewFragment (Type, Len);
-
-    /* Insert the fragment into the current segment */
-    if (ActiveSeg->Root) {
-        ActiveSeg->Last->Next = F;
-        ActiveSeg->Last = F;
-    } else {
-        ActiveSeg->Root = ActiveSeg->Last = F;
-    }
-    ++ActiveSeg->FragCount;
-
-    /* Add this fragment to the current listing line */
-    if (LineCur) {
-        if (LineCur->FragList == 0) {
-            LineCur->FragList = F;
-        } else {
-            LineCur->FragLast->LineList = F;
-        }
-        LineCur->FragLast = F;
-    }
-
-    /* Increment the program counter */
-    ActiveSeg->PC += F->Len;
-    if (OrgPerSeg) {
-        /* Relocatable mode is switched per segment */
-        if (!ActiveSeg->RelocMode) {
-            ActiveSeg->AbsPC += F->Len;
-        }
-    } else {
-        /* Relocatable mode is switched globally */
-        if (!RelocMode) {
-            AbsPC += F->Len;
-        }
-    }
-
-    /* Return the fragment */
-    return F;
-}
-
-
-
-void UseSeg (const SegDef* D)
-/* Use the segment with the given name */
-{
-    unsigned I;
-    for (I = 0; I < CollCount (&SegmentList); ++I) {
-        Segment* Seg = CollAtUnchecked (&SegmentList, I);
-        if (strcmp (Seg->Def->Name, D->Name) == 0) {
-            /* We found this segment. Check if the type is identical */
-            if (D->AddrSize != ADDR_SIZE_DEFAULT &&
-                Seg->Def->AddrSize != D->AddrSize) {
-                Error ("Segment attribute mismatch");
-                /* Use the new attribute to avoid errors */
-                Seg->Def->AddrSize = D->AddrSize;
-            }
-            ActiveSeg = Seg;
-            return;
-        }
-    }
-
-    /* Segment is not in list, create a new one */
-    if (D->AddrSize == ADDR_SIZE_DEFAULT) {
-        ActiveSeg = NewSegment (D->Name, ADDR_SIZE_ABS);
-    } else {
-        ActiveSeg = NewSegment (D->Name, D->AddrSize);
-    }
-}
-
-
-
-unsigned long GetPC (void)
-/* Get the program counter of the current segment */
-{
-    if (OrgPerSeg) {
-        /* Relocatable mode is switched per segment */
-        return ActiveSeg->RelocMode? ActiveSeg->PC : ActiveSeg->AbsPC;
-    } else {
-        /* Relocatable mode is switched globally */
-        return RelocMode? ActiveSeg->PC : AbsPC;
-    }
-}
-
-
-
-void EnterAbsoluteMode (unsigned long PC)
-/* Enter absolute (non relocatable mode). Depending on the OrgPerSeg flag,
-** this will either switch the mode globally or for the current segment.
-*/
-{
-    if (OrgPerSeg) {
-        /* Relocatable mode is switched per segment */
-        ActiveSeg->RelocMode = 0;
-        ActiveSeg->AbsPC = PC;
-    } else {
-        /* Relocatable mode is switched globally */
-        RelocMode = 0;
-        AbsPC = PC;
-    }
-}
-
-
-
-int GetRelocMode (void)
-/* Return true if we're currently in relocatable mode */
-{
-    if (OrgPerSeg) {
-        /* Relocatable mode is switched per segment */
-        return ActiveSeg->RelocMode;
-    } else {
-        /* Relocatable mode is switched globally */
-        return RelocMode;
-    }
-}
-
-
-
-void EnterRelocMode (void)
-/* Enter relocatable mode. Depending on the OrgPerSeg flag, this will either
-** switch the mode globally or for the current segment.
-*/
-{
-    if (OrgPerSeg) {
-        /* Relocatable mode is switched per segment */
-        ActiveSeg->RelocMode = 1;
-    } else {
-        /* Relocatable mode is switched globally */
-        RelocMode = 1;
-    }
-}
-
-
-
-void SegAlign (unsigned long Alignment, int FillVal)
-/* Align the PC segment to Alignment. If FillVal is -1, emit fill fragments
-** (the actual fill value will be determined by the linker), otherwise use
-** the given value.
-*/
-{
-    unsigned char Data [4];
-    unsigned long CombinedAlignment;
-    unsigned long Count;
-
-    /* The segment must have the combined alignment of all separate alignments
-    ** in the source. Calculate this alignment and check it for sanity.
-    */
-    CombinedAlignment = LeastCommonMultiple (ActiveSeg->Align, Alignment);
-    if (CombinedAlignment > MAX_ALIGNMENT) {
-        Error ("Combined alignment for active segment is %lu which exceeds %lu",
-               CombinedAlignment, MAX_ALIGNMENT);
-
-        /* Avoid creating large fills for an object file that is thrown away
-        ** later.
-        */
-        Count = 1;
-
-    } else {
-        ActiveSeg->Align = CombinedAlignment;
-
-        /* Output a warning for larger alignments if not suppressed */
-        if (CombinedAlignment > LARGE_ALIGNMENT && !LargeAlignment) {
-            Warning (0, "Combined alignment is suspiciously large (%lu)",
-                     CombinedAlignment);
-        }
-
-        /* Calculate the number of fill bytes */
-        Count = AlignCount (ActiveSeg->PC, Alignment);
-
-    }
-
-
-    /* Emit the data or a fill fragment */
-    if (FillVal != -1) {
-        /* User defined fill value */
-        memset (Data, FillVal, sizeof (Data));
-        while (Count) {
-            if (Count > sizeof (Data)) {
-                EmitData (Data, sizeof (Data));
-                Count -= sizeof (Data);
-            } else {
-                EmitData (Data, Count);
-                Count = 0;
-            }
-        }
-    } else {
-        /* Linker defined fill value */
-        EmitFill (Count);
-    }
-}
-
-
-
-unsigned char GetSegAddrSize (unsigned SegNum)
-/* Return the address size of the segment with the given number */
-{
-    /* Is there such a segment? */
-    if (SegNum >= CollCount (&SegmentList)) {
-        FAIL ("Invalid segment number");
-    }
-
-    /* Return the address size */
-    return ((Segment*) CollAtUnchecked (&SegmentList, SegNum))->Def->AddrSize;
-}
-
-
-
-void SegDone (void)
-/* Check the segments for range and other errors. Do cleanup. */
-{
-    static const unsigned long U_Hi[4] = {
-        0x000000FFUL, 0x0000FFFFUL, 0x00FFFFFFUL, 0xFFFFFFFFUL
-    };
-    static const long S_Hi[4] = {
-        0x0000007FL, 0x00007FFFL, 0x007FFFFFL, 0x7FFFFFFFL
-    };
-
-    unsigned I;
-    for (I = 0; I < CollCount (&SegmentList); ++I) {
-        Segment* S = CollAtUnchecked (&SegmentList, I);
-        Fragment* F = S->Root;
-        while (F) {
-            if (F->Type == FRAG_EXPR || F->Type == FRAG_SEXPR) {
-
-                /* We have an expression, study it */
-                ExprDesc ED;
-                ED_Init (&ED);
-                StudyExpr (F->V.Expr, &ED);
-
-                /* Check if the expression is constant */
-                if (ED_IsConst (&ED)) {
-
-                    unsigned J;
-
-                    /* The expression is constant. Check for range errors. */
-                    CHECK (F->Len <= 4);
-                    if (F->Type == FRAG_SEXPR) {
-                        long Hi = S_Hi[F->Len-1];
-                        long Lo = ~Hi;
-                        if (ED.Val > Hi || ED.Val < Lo) {
-                            LIError (&F->LI,
-                                     "Range error (%ld not in [%ld..%ld])",
-                                     ED.Val, Lo, Hi);
-                        }
-                    } else {
-                        if (((unsigned long)ED.Val) > U_Hi[F->Len-1]) {
-                            LIError (&F->LI,
-                                     "Range error (%lu not in [0..%lu])",
-                                     (unsigned long)ED.Val, U_Hi[F->Len-1]);
-                        }
-                    }
-
-                    /* We don't need the expression tree any longer */
-                    FreeExpr (F->V.Expr);
-
-                    /* Convert the fragment into a literal fragment */
-                    for (J = 0; J < F->Len; ++J) {
-                        F->V.Data[J] = ED.Val & 0xFF;
-                        ED.Val >>= 8;
-                    }
-                    F->Type = FRAG_LITERAL;
-
-                } else if (RelaxChecks == 0) {
-
-                    /* We cannot evaluate the expression now, leave the job for
-                    ** the linker. However, we can check if the address size
-                    ** matches the fragment size. Mismatches are errors in 
-                    ** most situations.
-                    */
-                    if ((F->Len == 1 && ED.AddrSize > ADDR_SIZE_ZP)  ||
-                        (F->Len == 2 && ED.AddrSize > ADDR_SIZE_ABS) ||
-                        (F->Len == 3 && ED.AddrSize > ADDR_SIZE_FAR)) {
-                        LIError (&F->LI, "Range error");
-                    }
-                }
-
-                /* Release memory allocated for the expression decriptor */
-                ED_Done (&ED);
-            }
-            F = F->Next;
-        }
-    }
-}
-
-
-
-void SegDump (void)
-/* Dump the contents of all segments */
-{
-    unsigned I;
-    unsigned X = 0;
-
-    printf ("\n");
-    for (I = 0; I < CollCount (&SegmentList); ++I) {
-        Segment* S = CollAtUnchecked (&SegmentList, I);
-        unsigned I;
-        Fragment* F;
-        int State = -1;
-        printf ("New segment: %s", S->Def->Name);
-        F = S->Root;
-        while (F) {
-            if (F->Type == FRAG_LITERAL) {
-                if (State != 0) {
-                    printf ("\n  Literal:");
-                    X = 15;
-                    State = 0;
-                }
-                for (I = 0; I < F->Len; ++I) {
-                    printf (" %02X", F->V.Data [I]);
-                    X += 3;
-                }
-            } else if (F->Type == FRAG_EXPR || F->Type == FRAG_SEXPR) {
-                State = 1;
-                printf ("\n  Expression (%u): ", F->Len);
-                DumpExpr (F->V.Expr, SymResolve);
-            } else if (F->Type == FRAG_FILL) {
-                State = 1;
-                printf ("\n  Fill bytes (%u)", F->Len);
-            } else {
-                Internal ("Unknown fragment type: %u", F->Type);
-            }
-            if (X > 65) {
-                State = -1;
-            }
-            F = F->Next;
-        }
-        printf ("\n  End PC = $%04X\n", (unsigned)(S->PC & 0xFFFF));
-    }
-    printf ("\n");
-}
-
-
-
-void SegInit (void)
-/* Initialize segments */
-{
-    /* Create the predefined segments. Code segment is active */
-    ActiveSeg = NewSegFromDef (&CodeSegDef);
-    NewSegFromDef (&RODataSegDef);
-    NewSegFromDef (&BssSegDef);
-    NewSegFromDef (&DataSegDef);
-    NewSegFromDef (&ZeropageSegDef);
-    NewSegFromDef (&NullSegDef);
-}
-
-
-
-void SetSegmentSizes (void)
-/* Set the default segment sizes according to the memory model */
-{
-    /* Initialize segment sizes. The segment definitions do already contain
-    ** the correct values for the default case (near), so we must only change
-    ** things that should be different.
-    */
-    switch (MemoryModel) {
-
-        case MMODEL_NEAR:
-            break;
-
-        case MMODEL_FAR:
-            CodeSegDef.AddrSize = ADDR_SIZE_FAR;
-            break;
-
-        case MMODEL_HUGE:
-            CodeSegDef.AddrSize   = ADDR_SIZE_FAR;
-            DataSegDef.AddrSize   = ADDR_SIZE_FAR;
-            BssSegDef.AddrSize    = ADDR_SIZE_FAR;
-            RODataSegDef.AddrSize = ADDR_SIZE_FAR;
-            break;
-
-        default:
-            Internal ("Invalid memory model: %d", MemoryModel);
-    }
-}
-
-
-
-static void WriteOneSeg (Segment* Seg)
-/* Write one segment to the object file */
-{
-    Fragment* Frag;
-    unsigned long DataSize;
-    unsigned long EndPos;
-
-    /* Remember the file position, then write a dummy for the size of the
-    ** following data
-    */
-    unsigned long SizePos = ObjGetFilePos ();
-    ObjWrite32 (0);
-
-    /* Write the segment data */
-    ObjWriteVar (GetStringId (Seg->Def->Name)); /* Name of the segment */
-    ObjWriteVar (Seg->Flags);                   /* Segment flags */
-    ObjWriteVar (Seg->PC);                      /* Size */
-    ObjWriteVar (Seg->Align);                   /* Segment alignment */
-    ObjWrite8 (Seg->Def->AddrSize);             /* Address size of the segment */
-    ObjWriteVar (Seg->FragCount);               /* Number of fragments */
-
-    /* Now walk through the fragment list for this segment and write the
-    ** fragments.
-    */
-    Frag = Seg->Root;
-    while (Frag) {
-
-        /* Write data depending on the type */
-        switch (Frag->Type) {
-
-            case FRAG_LITERAL:
-                ObjWrite8 (FRAG_LITERAL);
-                ObjWriteVar (Frag->Len);
-                ObjWriteData (Frag->V.Data, Frag->Len);
-                break;
-
-            case FRAG_EXPR:
-                switch (Frag->Len) {
-                    case 1:   ObjWrite8 (FRAG_EXPR8);   break;
-                    case 2:   ObjWrite8 (FRAG_EXPR16);  break;
-                    case 3:   ObjWrite8 (FRAG_EXPR24);  break;
-                    case 4:   ObjWrite8 (FRAG_EXPR32);  break;
-                    default:  Internal ("Invalid fragment size: %u", Frag->Len);
-                }
-                WriteExpr (Frag->V.Expr);
-                break;
-
-            case FRAG_SEXPR:
-                switch (Frag->Len) {
-                    case 1:   ObjWrite8 (FRAG_SEXPR8);  break;
-                    case 2:   ObjWrite8 (FRAG_SEXPR16); break;
-                    case 3:   ObjWrite8 (FRAG_SEXPR24); break;
-                    case 4:   ObjWrite8 (FRAG_SEXPR32); break;
-                    default:  Internal ("Invalid fragment size: %u", Frag->Len);
-                }
-                WriteExpr (Frag->V.Expr);
-                break;
-
-            case FRAG_FILL:
-                ObjWrite8 (FRAG_FILL);
-                ObjWriteVar (Frag->Len);
-                break;
-
-            default:
-                Internal ("Invalid fragment type: %u", Frag->Type);
-
-        }
-
-        /* Write the line infos for this fragment */
-        WriteLineInfo (&Frag->LI);
-
-        /* Next fragment */
-        Frag = Frag->Next;
-    }
-
-    /* Calculate the size of the data, seek back and write it */
-    EndPos = ObjGetFilePos ();          /* Remember where we are */
-    DataSize = EndPos - SizePos - 4;    /* Don't count size itself */
-    ObjSetFilePos (SizePos);            /* Seek back to the size */
-    ObjWrite32 (DataSize);              /* Write the size */
-    ObjSetFilePos (EndPos);             /* Seek back to the end */
-}
-
-
-
-void WriteSegments (void)
-/* Write the segment data to the object file */
-{
-    unsigned I;
-
-    /* Tell the object file module that we're about to start the seg list */
-    ObjStartSegments ();
-
-    /* First thing is segment count */
-    ObjWriteVar (CollCount (&SegmentList));
-
-    /* Now walk through all segments and write them to the object file */
-    for (I = 0; I < CollCount (&SegmentList); ++I) {
-        /* Write one segment */
-        WriteOneSeg (CollAtUnchecked (&SegmentList, I));
-    }
-
-    /* Done writing segments */
-    ObjEndSegments ();
-}
diff --git a/src/ca65/segment.h b/src/ca65/segment.h
deleted file mode 100644 (file)
index 231e43f..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 segment.h                                 */
-/*                                                                           */
-/*                   Segments for the ca65 macroassembler                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SEGMENT_H
-#define SEGMENT_H
-
-
-
-/* common */
-#include "coll.h"
-#include "fragdefs.h"
-#include "inline.h"
-
-/* ca65 */
-#include "fragment.h"
-#include "segdef.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Segment definition */
-typedef struct Segment Segment;
-struct Segment {
-    Fragment*       Root;               /* Root of fragment list */
-    Fragment*       Last;               /* Pointer to last fragment */
-    unsigned long   FragCount;          /* Number of fragments */
-    unsigned        Num;                /* Segment number */
-    unsigned        Flags;              /* Segment flags */
-    unsigned long   Align;              /* Segment alignment */
-    int             RelocMode;          /* Relocatable mode if OrgPerSeg */
-    unsigned long   PC;                 /* PC if in relocatable mode */
-    unsigned long   AbsPC;              /* PC if in local absolute mode */
-                                        /* (OrgPerSeg is true) */
-    SegDef*         Def;                /* Segment definition (name and type) */
-};
-
-/* Definitions for predefined segments */
-extern SegDef NullSegDef;
-extern SegDef ZeropageSegDef;
-extern SegDef DataSegDef;
-extern SegDef BssSegDef;
-extern SegDef RODataSegDef;
-extern SegDef CodeSegDef;
-
-/* Collection containing all segments */
-extern Collection SegmentList;
-
-/* Currently active segment */
-extern Segment* ActiveSeg;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Fragment* GenFragment (unsigned char Type, unsigned short Len);
-/* Generate a new fragment, add it to the current segment and return it. */
-
-void UseSeg (const SegDef* D);
-/* Use the given segment */
-
-#if defined(HAVE_INLINE)
-INLINE const SegDef* GetCurrentSegDef (void)
-/* Get a pointer to the segment defininition of the current segment */
-{
-    return ActiveSeg->Def;
-}
-#else
-#  define GetCurrentSegDef()    (ActiveSeg->Def)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned GetCurrentSegNum (void)
-/* Get the number of the current segment */
-{
-    return ActiveSeg->Num;
-}
-#else
-#  define GetCurrentSegNum()    (ActiveSeg->Num)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned char GetCurrentSegAddrSize (void)
-/* Get the address size of the current segment */
-{
-    return ActiveSeg->Def->AddrSize;
-}
-#else
-#  define GetCurrentSegAddrSize()    (ActiveSeg->Def->AddrSize)
-#endif
-
-void SegAlign (unsigned long Alignment, int FillVal);
-/* Align the PC segment to Alignment. If FillVal is -1, emit fill fragments
-** (the actual fill value will be determined by the linker), otherwise use
-** the given value.
-*/
-
-unsigned char GetSegAddrSize (unsigned SegNum);
-/* Return the address size of the segment with the given number */
-
-unsigned long GetPC (void);
-/* Get the program counter of the current segment */
-
-int GetRelocMode (void);
-/* Return true if we're currently in relocatable mode */
-
-void EnterAbsoluteMode (unsigned long AbsPC);
-/* Enter absolute (non relocatable mode). Depending on the OrgPerSeg flag,
-** this will either switch the mode globally or for the current segment.
-*/
-
-void EnterRelocMode (void);
-/* Enter relocatable mode. Depending on the OrgPerSeg flag, this will either
-** switch the mode globally or for the current segment.
-*/
-
-void SegDone (void);
-/* Check the segments for range and other errors. Do cleanup. */
-
-void SegDump (void);
-/* Dump the contents of all segments */
-
-void SegInit (void);
-/* Initialize segments */
-
-void SetSegmentSizes (void);
-/* Set the default segment sizes according to the memory model */
-
-void WriteSegments (void);
-/* Write the segment data to the object file */
-
-
-
-/* End of segment.h */
-
-#endif
diff --git a/src/ca65/sizeof.c b/src/ca65/sizeof.c
deleted file mode 100644 (file)
index 9a7d402..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 sizeof.c                                  */
-/*                                                                           */
-/*                      Handle sizes of types and data                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewit                                       */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "addrsize.h"
-
-/* ca65 */
-#include "expr.h"
-#include "sizeof.h"
-#include "symtab.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* The name of the symbol used to encode the size. The name of this entry is
-** choosen so that it cannot be accessed by the user.
-*/
-static const StrBuf SizeEntryName = LIT_STRBUF_INITIALIZER (".size");
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int IsSizeOfSymbol (const SymEntry* Sym)
-/* Return true if the given symbol is the one that encodes the size of some
-** entity. Sym may also be a NULL pointer in which case false is returned.
-*/
-{
-    return (Sym != 0 && SB_Compare (GetSymName (Sym), &SizeEntryName) == 0);
-}
-
-
-
-SymEntry* FindSizeOfScope (SymTable* Scope)
-/* Get the size of a scope. The function returns the symbol table entry that
-** encodes the size or NULL if there is no such entry.
-*/
-{
-    return SymFind (Scope, &SizeEntryName, SYM_FIND_EXISTING);
-}
-
-
-
-SymEntry* FindSizeOfSymbol (SymEntry* Sym)
-/* Get the size of a symbol table entry. The function returns the symbol table
-** entry that encodes the size of the symbol or NULL if there is no such entry.
-*/
-{
-    return SymFindLocal (Sym, &SizeEntryName, SYM_FIND_EXISTING);
-}
-
-
-
-SymEntry* GetSizeOfScope (SymTable* Scope)
-/* Get the size of a scope. The function returns the symbol table entry that
-** encodes the size, and will create a new entry if it does not exist.
-*/
-{
-    return SymFind (Scope, &SizeEntryName, SYM_ALLOC_NEW);
-}
-
-
-
-SymEntry* GetSizeOfSymbol (SymEntry* Sym)
-/* Get the size of a symbol table entry. The function returns the symbol table
-** entry that encodes the size of the symbol and will create a new one if it
-** does not exist.
-*/
-{
-    return SymFindLocal (Sym, &SizeEntryName, SYM_ALLOC_NEW);
-}
-
-
-
-SymEntry* DefSizeOfScope (SymTable* Scope, long Size)
-/* Define the size of a scope and return the size symbol */
-{
-    SymEntry* SizeSym = GetSizeOfScope (Scope);
-    SymDef (SizeSym, GenLiteralExpr (Size), ADDR_SIZE_DEFAULT, SF_NONE);
-    return SizeSym;
-}
-
-
-
-SymEntry* DefSizeOfSymbol (SymEntry* Sym, long Size)
-/* Define the size of a symbol and return the size symbol */
-{
-    SymEntry* SizeSym = GetSizeOfSymbol (Sym);
-    SymDef (SizeSym, GenLiteralExpr (Size), ADDR_SIZE_DEFAULT, SF_NONE);
-    return SizeSym;
-}
diff --git a/src/ca65/sizeof.h b/src/ca65/sizeof.h
deleted file mode 100644 (file)
index 02eb31f..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 sizeof.h                                  */
-/*                                                                           */
-/*                      Handle sizes of types and data                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SIZEOF_H
-#define SIZEOF_H
-
-
-
-/* common */
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-struct SymEntry;
-struct SymTable;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int IsSizeOfSymbol (const struct SymEntry* Sym);
-/* Return true if the given symbol is the one that encodes the size of some
-** entity. Sym may also be a NULL pointer in which case false is returned.
-*/
-
-struct SymEntry* FindSizeOfScope (struct SymTable* Scope);
-/* Get the size of a scope. The function returns the symbol table entry that
-** encodes the size or NULL if there is no such entry.
-*/
-
-struct SymEntry* FindSizeOfSymbol (struct SymEntry* Sym);
-/* Get the size of a symbol table entry. The function returns the symbol table
-** entry that encodes the size of the symbol or NULL if there is no such entry.
-*/
-
-struct SymEntry* GetSizeOfScope (struct SymTable* Scope);
-/* Get the size of a scope. The function returns the symbol table entry that
-** encodes the size, and will create a new entry if it does not exist.
-*/
-
-struct SymEntry* GetSizeOfSymbol (struct SymEntry* Sym);
-/* Get the size of a symbol table entry. The function returns the symbol table
-** entry that encodes the size of the symbol and will create a new one if it
-** does not exist.
-*/
-
-struct SymEntry* DefSizeOfScope (struct SymTable* Scope, long Size);
-/* Define the size of a scope and return the size symbol */
-
-struct SymEntry* DefSizeOfSymbol (struct SymEntry* Sym, long Size);
-/* Define the size of a symbol and return the size symbol */
-
-
-
-/* End of sizeof.h */
-
-#endif
diff --git a/src/ca65/span.c b/src/ca65/span.c
deleted file mode 100644 (file)
index a4faea1..0000000
+++ /dev/null
@@ -1,409 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  span.c                                   */
-/*                                                                           */
-/*                      A span of data within a segment                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "hashfunc.h"
-#include "hashtab.h"
-#include "xmalloc.h"
-
-/* ca65 */
-#include "global.h"
-#include "objfile.h"
-#include "segment.h"
-#include "span.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-static unsigned HT_GenHash (const void* Key);
-/* Generate the hash over a key. */
-
-static const void* HT_GetKey (const void* Entry);
-/* Given a pointer to the user entry data, return a pointer to the key */
-
-static int HT_Compare (const void* Key1, const void* Key2);
-/* Compare two keys. The function must return a value less than zero if
-** Key1 is smaller than Key2, zero if both are equal, and a value greater
-** than zero if Key1 is greater then Key2.
-*/
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Hash table functions */
-static const HashFunctions HashFunc = {
-    HT_GenHash,
-    HT_GetKey,
-    HT_Compare
-};
-
-/* Span hash table */
-static HashTable SpanTab = STATIC_HASHTABLE_INITIALIZER (1051, &HashFunc);
-
-
-
-/*****************************************************************************/
-/*                           Hash table functions                            */
-/*****************************************************************************/
-
-
-
-static unsigned HT_GenHash (const void* Key)
-/* Generate the hash over a key. */
-{
-    /* Key is a Span pointer */
-    const Span* S = Key;
-
-    /* Hash over a combination of segment number, start and end */
-    return HashInt ((S->Seg->Num << 28) ^ (S->Start << 14) ^ S->End);
-}
-
-
-
-static const void* HT_GetKey (const void* Entry)
-/* Given a pointer to the user entry data, return a pointer to the key */
-{
-    return Entry;
-}
-
-
-
-static int HT_Compare (const void* Key1, const void* Key2)
-/* Compare two keys. The function must return a value less than zero if
-** Key1 is smaller than Key2, zero if both are equal, and a value greater
-** than zero if Key1 is greater then Key2.
-*/
-{
-    /* Convert both parameters to Span pointers */
-    const Span* S1 = Key1;
-    const Span* S2 = Key2;
-
-    /* Compare segment number, then start and end */
-    int Res = (int)S2->Seg->Num - (int)S1->Seg->Num;
-    if (Res == 0) {
-        Res = (int)S2->Start - (int)S1->Start;
-        if (Res == 0) {
-            Res = (int)S2->End - (int)S1->End;
-        }
-    }
-
-    /* Done */
-    return Res;
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static Span* NewSpan (Segment* Seg, unsigned long Start, unsigned long End)
-/* Create a new span. The segment is set to Seg, Start and End are set to the
-** current PC of the segment.
-*/
-{
-    /* Allocate memory */
-    Span* S = xmalloc (sizeof (Span));
-
-    /* Initialize the struct */
-    InitHashNode (&S->Node);
-    S->Id       = ~0U;
-    S->Seg      = Seg;
-    S->Start    = Start;
-    S->End      = End;
-    S->Type     = EMPTY_STRING_ID;
-
-    /* Return the new struct */
-    return S;
-}
-
-
-
-static void FreeSpan (Span* S)
-/* Free a span */
-{
-    xfree (S);
-}
-
-
-
-static Span* MergeSpan (Span* S)
-/* Check if we have a span with the same data as S already. If so, free S and
-** return the already existing one. If not, remember S and return it.
-*/
-{
-    /* Check if we have such a span already. If so use the existing
-    ** one and free the one from the collection. If not, add the one to
-    ** the hash table and return it.
-    */
-    Span* E = HT_Find (&SpanTab, S);
-    if (E) {
-        /* If S has a type and E not, move the type */
-        if (S->Type != EMPTY_STRING_ID) {
-            CHECK (E->Type == EMPTY_STRING_ID);
-            E->Type = S->Type;
-        }
-
-        /* Free S and return E */
-        FreeSpan (S);
-        return E;
-    } else {
-        /* Assign the id, insert S, then return it */
-        S->Id = HT_GetCount (&SpanTab);
-        HT_Insert (&SpanTab, S);
-        return S;
-    }
-}
-
-
-
-void SetSpanType (Span* S, const StrBuf* Type)
-/* Set the generic type of the span to Type */
-{                                 
-    /* Ignore the call if we won't generate debug infos */
-    if (DbgSyms) {
-        S->Type = GetStrBufId (Type);
-    }
-}
-
-
-
-Span* OpenSpan (void)
-/* Open a span for the active segment and return it. */
-{
-    return NewSpan (ActiveSeg, ActiveSeg->PC, ActiveSeg->PC);
-}
-
-
-
-Span* CloseSpan (Span* S)
-/* Close the given span. Be sure to replace the passed span by the one
-** returned, since the span will get deleted if it is empty or may be
-** replaced if a duplicate exists.
-*/
-{
-    /* Set the end offset */
-    if (S->Start == S->Seg->PC) {
-        /* Span is empty */
-        FreeSpan (S);
-        return 0;
-    } else {
-        /* Span is not empty */
-        S->End = S->Seg->PC;
-
-        /* Check if we have such a span already. If so use the existing
-        ** one and free the one from the collection. If not, add the one to
-        ** the hash table and return it.
-        */
-        return MergeSpan (S);
-    }
-}
-
-
-
-void OpenSpanList (Collection* Spans)
-/* Open a list of spans for all existing segments to the given collection of
-** spans. The currently active segment will be inserted first with all others
-** following.
-*/
-{
-    unsigned I;
-
-    /* Grow the Spans collection as necessary */
-    CollGrow (Spans, CollCount (&SegmentList));
-
-    /* Add the currently active segment */
-    CollAppend (Spans, NewSpan (ActiveSeg, ActiveSeg->PC, ActiveSeg->PC));
-
-    /* Walk through the segment list and add all other segments */
-    for (I = 0; I < CollCount (&SegmentList); ++I) {
-        Segment* Seg = CollAtUnchecked (&SegmentList, I);
-
-        /* Be sure to skip the active segment, since it was already added */
-        if (Seg != ActiveSeg) {
-            CollAppend (Spans, NewSpan (Seg, Seg->PC, Seg->PC));
-        }
-    }
-}
-
-
-
-void CloseSpanList (Collection* Spans)
-/* Close a list of spans. This will add new segments to the list, mark the end
-** of existing ones, and remove empty spans from the list.
-*/
-{
-    unsigned I, J;
-
-    /* Have new segments been added while the span list was open? */
-    for (I = CollCount (Spans); I < CollCount (&SegmentList); ++I) {
-
-        /* Add new spans if not empty */
-        Segment* S = CollAtUnchecked (&SegmentList, I);
-        if (S->PC == 0) {
-            /* Segment is empty */
-            continue;
-        }
-        CollAppend (Spans, NewSpan (S, 0, S->PC));
-    }
-
-    /* Walk over the spans, close open, remove empty ones */
-    for (I = 0, J = 0; I < CollCount (Spans); ++I) {
-
-        /* Get the next span */
-        Span* S = CollAtUnchecked (Spans, I);
-
-        /* Set the end offset */
-        if (S->Start == S->Seg->PC) {
-            /* Span is empty */
-            FreeSpan (S);
-        } else {
-            /* Span is not empty */
-            S->End = S->Seg->PC;
-
-            /* Merge duplicate spans, then insert it at the new position */
-            CollReplace (Spans, MergeSpan (S), J++);
-        }
-    }
-
-    /* New Count is now in J */
-    Spans->Count = J;
-}
-
-
-
-void WriteSpanList (const Collection* Spans)
-/* Write a list of spans to the output file */
-{
-    unsigned I;
-
-    /* We only write spans if debug info is enabled */
-    if (DbgSyms == 0) {
-        /* Number of spans is zero */
-        ObjWriteVar (0);
-    } else {
-        /* Write the number of spans */
-        ObjWriteVar (CollCount (Spans));
-
-        /* Write the spans */
-        for (I = 0; I < CollCount (Spans); ++I) {
-            /* Write the id of the next span */
-            ObjWriteVar (((const Span*)CollConstAt (Spans, I))->Id);
-        }
-    }
-}
-
-
-
-static int CollectSpans (void* Entry, void* Data)
-/* Collect all spans in a collection sorted by id */
-{
-    /* Cast the pointers to real objects */
-    Span* S       = Entry;
-    Collection* C = Data;
-
-    /* Place the entry into the collection */
-    CollReplaceExpand (C, S, S->Id);
-
-    /* Keep the span */
-    return 0;
-}
-
-                
-
-void WriteSpans (void)
-/* Write all spans to the object file */
-{
-    /* Tell the object file module that we're about to start the spans */
-    ObjStartSpans ();
-
-    /* We will write scopes only if debug symbols are requested */
-    if (DbgSyms) {
-
-        unsigned I;
-
-        /* We must first collect all items in a collection sorted by id */
-        Collection SpanList = STATIC_COLLECTION_INITIALIZER;
-        CollGrow (&SpanList, HT_GetCount (&SpanTab));
-
-        /* Walk over the hash table and fill the span list */
-        HT_Walk (&SpanTab, CollectSpans, &SpanList);
-
-        /* Write the span count to the file */
-        ObjWriteVar (CollCount (&SpanList));
-
-        /* Write all spans */
-        for (I = 0; I < CollCount (&SpanList); ++I) {
-
-            /* Get the span and check it */
-            const Span* S = CollAtUnchecked (&SpanList, I);
-            CHECK (S->End > S->Start);
-
-            /* Write data for the span We will write the size instead of the
-            ** end offset to save some bytes, since most spans are expected
-            ** to be rather small.
-            */
-            ObjWriteVar (S->Seg->Num);
-            ObjWriteVar (S->Start);
-            ObjWriteVar (S->End - S->Start);
-            ObjWriteVar (S->Type);
-        }
-
-        /* Free the collection with the spans */
-        DoneCollection (&SpanList);
-
-    } else {
-
-        /* No debug info requested */
-        ObjWriteVar (0);
-
-    }
-
-    /* Done writing the spans */
-    ObjEndSpans ();
-}
diff --git a/src/ca65/span.h b/src/ca65/span.h
deleted file mode 100644 (file)
index 6335920..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  span.h                                   */
-/*                                                                           */
-/*                      A span of data within a segment                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SPAN_H
-#define SPAN_H
-
-
-
-/* common */
-#include "coll.h"
-#include "gentype.h"
-#include "hashtab.h"
-#include "inline.h"
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Forwards */
-struct Segment;
-
-/* Span definition */
-typedef struct Span Span;
-struct Span{
-    HashNode        Node;               /* Node for hash table */
-    unsigned        Id;                 /* Id of span */
-    struct Segment* Seg;                /* Pointer to segment */
-    unsigned        Start;              /* Start of range */
-    unsigned        End;                /* End of range */
-    unsigned        Type;               /* Type of data in span */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-#if defined(HAVE_INLINE)
-INLINE unsigned long GetSpanSize (const Span* R)
-/* Return the span size in bytes */
-{
-    return (R->End - R->Start);
-}
-#else
-#  define GetSpanSize(R)   ((R)->End - (R)->Start)
-#endif
-
-void SetSpanType (Span* S, const StrBuf* Type);
-/* Set the generic type of the span to Type */
-
-Span* OpenSpan (void);
-/* Open a span for the active segment and return it. */
-
-Span* CloseSpan (Span* S);
-/* Close the given span. Be sure to replace the passed span by the one
-** returned, since the span will get deleted if it is empty or may be
-** replaced if a duplicate exists.
-*/
-
-void OpenSpanList (Collection* Spans);
-/* Open a list of spans for all existing segments to the given collection of
-** spans. The currently active segment will be inserted first with all others
-** following.
-*/
-
-void CloseSpanList (Collection* Spans);
-/* Close all open spans by setting PC to the current PC for the segment. */
-
-void WriteSpanList (const Collection* Spans);
-/* Write a list of spans to the output file */
-
-void WriteSpans (void);
-/* Write all spans to the object file */
-
-
-
-/* End of span.h */
-
-#endif
diff --git a/src/ca65/spool.c b/src/ca65/spool.c
deleted file mode 100644 (file)
index a25702f..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  spool.c                                  */
-/*                                                                           */
-/*              Id and message pool for the ca65 macroassembler              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* ca65 */
-#include "objfile.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-StringPool* StrPool = 0;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void WriteStrPool (void)
-/* Write the string pool to the object file */
-{
-    unsigned I;
-
-    /* Get the number of strings in the string pool */
-    unsigned Count = SP_GetCount (StrPool);
-
-    /* Tell the object file module that we're about to start the string pool */
-    ObjStartStrPool ();
-
-    /* Write the string count to the list */
-    ObjWriteVar (Count);
-
-    /* Write the strings in id order */
-    for (I = 0; I < Count; ++I) {
-        ObjWriteBuf (SP_Get (StrPool, I));
-    }
-
-    /* Done writing the string pool */
-    ObjEndStrPool ();
-}
-
-
-
-void InitStrPool (void)
-/* Initialize the string pool */
-{
-    /* Create a string pool */
-    StrPool = NewStringPool (1103);
-
-    /* Insert an empty string. It will have string id 0 */
-    SP_AddStr (StrPool, "");
-}
diff --git a/src/ca65/spool.h b/src/ca65/spool.h
deleted file mode 100644 (file)
index e8d1152..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  spool.h                                  */
-/*                                                                           */
-/*              Id and message pool for the ca65 macroassembler              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SPOOL_H
-#define SPOOL_H
-
-
-
-/* common */
-#include "strpool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* The index for an empty string */
-#define EMPTY_STRING_ID         0U
-
-/* The string pool */
-extern StringPool* StrPool;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-#if defined(HAVE_INLINE)
-INLINE unsigned GetStrBufId (const StrBuf* S)
-/* Return the id of the given string buffer */
-{
-    return SP_Add (StrPool, S);
-}
-#else
-#  define GetStrBufId(S)        SP_Add (StrPool, (S))
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned GetStringId (const char* S)
-/* Return the id of the given string */
-{
-    return SP_AddStr (StrPool, S);
-}
-#else
-#  define GetStringId(S)        SP_AddStr (StrPool, (S))
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE const StrBuf* GetStrBuf (unsigned Index)
-/* Convert a string index into a string */
-{
-    return SP_Get (StrPool, Index);
-}
-#else
-#  define GetStrBuf(Index)      SP_Get (StrPool, (Index))
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE const char* GetString (unsigned Index)
-/* Convert a string index into a string */
-{
-    return SB_GetConstBuf (SP_Get (StrPool, Index));
-}
-#else
-#  define GetString(Index)      SB_GetConstBuf (SP_Get (StrPool, (Index)))
-#endif
-
-void WriteStrPool (void);
-/* Write the string pool to the object file */
-
-void InitStrPool (void);
-/* Initialize the string pool */
-
-
-
-/* End of spool.h */
-
-#endif
diff --git a/src/ca65/struct.c b/src/ca65/struct.c
deleted file mode 100644 (file)
index 195f29b..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 struct.c                                  */
-/*                                                                           */
-/*                          .STRUCT/.UNION commands                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "addrsize.h"
-#include "scopedefs.h"
-
-/* ca65 */
-#include "condasm.h"
-#include "error.h"
-#include "expr.h"
-#include "macro.h"
-#include "nexttok.h"
-#include "scanner.h"
-#include "sizeof.h"
-#include "symbol.h"
-#include "symtab.h"
-#include "struct.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-enum {
-    STRUCT,
-    UNION
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static long Member (long AllocSize)
-/* Read one struct member and return its size */
-{
-    long Multiplicator;
-
-    /* A multiplicator may follow */
-    if (CurTok.Tok != TOK_SEP) {
-        Multiplicator = ConstExpression ();
-        if (Multiplicator <= 0) {
-            ErrorSkip ("Range error");
-            Multiplicator = 1;
-        }
-        AllocSize *= Multiplicator;
-    }
-
-    /* Check the size for a reasonable value */
-    if (AllocSize >= 0x10000) {
-        ErrorSkip ("Range error");
-    }
-
-    /* Return the size */
-    return AllocSize;
-}
-
-
-
-static long DoStructInternal (long Offs, unsigned Type)
-/* Handle the .STRUCT command */
-{
-    long Size = 0;
-
-    /* Outside of other structs, we need a name. Inside another struct or
-    ** union, the struct may be anonymous, in which case no new lexical level
-    ** is started.
-    */
-    int Anon = (CurTok.Tok != TOK_IDENT);
-    if (!Anon) {
-        /* Enter a new scope, then skip the name */
-        SymEnterLevel (&CurTok.SVal, SCOPE_STRUCT, ADDR_SIZE_ABS, 0);
-        NextTok ();
-        /* Start at zero offset in the new scope */
-        Offs = 0;
-    }
-
-    /* Test for end of line */
-    ConsumeSep ();
-
-    /* Read until end of struct */
-    while (CurTok.Tok != TOK_ENDSTRUCT &&
-           CurTok.Tok != TOK_ENDUNION  &&
-           CurTok.Tok != TOK_EOF) {
-
-        long      MemberSize;
-        SymTable* Struct;
-        SymEntry* Sym;
-
-        /* Allow empty and comment lines */
-        if (CurTok.Tok == TOK_SEP) {
-            NextTok ();
-            continue;
-        }
-
-        /* The format is "[identifier] storage-allocator [, multiplicator]" */
-        Sym = 0;
-        if (CurTok.Tok == TOK_IDENT) {
-
-            /* Beware: An identifier may also be a macro, in which case we have
-            ** to start over.
-            */
-            Macro* M = FindMacro (&CurTok.SVal);
-            if (M) {
-                MacExpandStart (M);
-                continue;
-            }
-
-            /* We have an identifier, generate a symbol */
-            Sym = SymFind (CurrentScope, &CurTok.SVal, SYM_ALLOC_NEW);
-
-            /* Assign the symbol the offset of the current member */
-            SymDef (Sym, GenLiteralExpr (Offs), ADDR_SIZE_DEFAULT, SF_NONE);
-
-            /* Skip the member name */
-            NextTok ();
-        }
-
-        /* Read storage allocators */
-        MemberSize = 0;                 /* In case of errors, use zero */
-        switch (CurTok.Tok) {
-
-            case TOK_BYTE:
-                NextTok ();
-                MemberSize = Member (1);
-                break;
-
-            case TOK_DBYT:
-            case TOK_WORD:
-            case TOK_ADDR:
-                NextTok ();
-                MemberSize = Member (2);
-                break;
-
-            case TOK_FARADDR:
-                NextTok ();
-                MemberSize = Member (3);
-                break;
-
-            case TOK_DWORD:
-                NextTok ();
-                MemberSize = Member (4);
-                break;
-
-            case TOK_RES:
-                NextTok ();
-                if (CurTok.Tok == TOK_SEP) {
-                    ErrorSkip ("Size is missing");
-                } else {
-                    MemberSize = Member (1);
-                }
-                break;
-
-            case TOK_TAG:
-                NextTok ();
-                Struct = ParseScopedSymTable ();
-                if (Struct == 0) {
-                    ErrorSkip ("Unknown struct/union");
-                } else if (GetSymTabType (Struct) != SCOPE_STRUCT) {
-                    ErrorSkip ("Not a struct/union");
-                } else {
-                    SymEntry* SizeSym = GetSizeOfScope (Struct);
-                    if (!SymIsDef (SizeSym) || !SymIsConst (SizeSym, &MemberSize)) {
-                        ErrorSkip ("Size of struct/union is unknown");
-                    }
-                }
-                MemberSize = Member (MemberSize);
-                break;
-
-            case TOK_STRUCT:
-                NextTok ();
-                MemberSize = DoStructInternal (Offs, STRUCT);
-                break;
-
-            case TOK_UNION:
-                NextTok ();
-                MemberSize = DoStructInternal (Offs, UNION);
-                break;
-
-            default:
-                if (!CheckConditionals ()) {
-                    /* Not a conditional directive */
-                    ErrorSkip ("Invalid storage allocator in struct/union");
-                }
-        }
-
-        /* Assign the size to the member if it has a name */
-        if (Sym) {
-            DefSizeOfSymbol (Sym, MemberSize);
-        }
-
-        /* Next member */
-        if (Type == STRUCT) {
-            /* Struct */
-            Offs += MemberSize;
-            Size += MemberSize;
-        } else {
-            /* Union */
-            if (MemberSize > Size) {
-                Size = MemberSize;
-            }
-        }
-
-        /* Expect end of line */
-        ConsumeSep ();
-    }
-
-    /* If this is not a anon struct, enter a special symbol named ".size"
-    ** into the symbol table of the struct that holds the size of the
-    ** struct. Since the symbol starts with a dot, it cannot be accessed
-    ** by user code.
-    ** Leave the struct scope level.
-    */
-    if (!Anon) {
-        /* Add a symbol */
-        SymEntry* SizeSym = GetSizeOfScope (CurrentScope);
-        SymDef (SizeSym, GenLiteralExpr (Size), ADDR_SIZE_DEFAULT, SF_NONE);
-
-        /* Close the struct scope */
-        SymLeaveLevel ();
-    }
-
-    /* End of struct/union definition */
-    if (Type == STRUCT) {
-        Consume (TOK_ENDSTRUCT, "`.ENDSTRUCT' expected");
-    } else {
-        Consume (TOK_ENDUNION, "`.ENDUNION' expected");
-    }
-
-    /* Return the size of the struct */
-    return Size;
-}
-
-
-
-long GetStructSize (SymTable* Struct)
-/* Get the size of a struct or union */
-{
-    SymEntry* SizeSym = FindSizeOfScope (Struct);
-    if (SizeSym == 0) {
-        Error ("Size of struct/union is unknown");
-        return 0;
-    } else {
-        return GetSymVal (SizeSym);
-    }
-}
-
-
-
-void DoStruct (void)
-/* Handle the .STRUCT command */
-{
-    DoStructInternal (0, STRUCT);
-}
-
-
-
-void DoUnion (void)
-/* Handle the .UNION command */
-{
-    DoStructInternal (0, UNION);
-}
diff --git a/src/ca65/struct.h b/src/ca65/struct.h
deleted file mode 100644 (file)
index 1fdaf9d..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 struct.h                                  */
-/*                                                                           */
-/*                          .STRUCT/.UNION commands                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Römerstraße 52                                              */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef STRUCT_H
-#define STRUCT_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-struct SymTable;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-long GetStructSize (struct SymTable* Struct);
-/* Get the size of a struct */
-
-void DoStruct (void);
-/* Handle the .STRUCT command */
-
-void DoUnion (void);
-/* Handle the .UNION command */
-
-
-
-/* End of struct.h */
-
-#endif
diff --git a/src/ca65/studyexpr.c b/src/ca65/studyexpr.c
deleted file mode 100644 (file)
index 366b50f..0000000
+++ /dev/null
@@ -1,1541 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                studyexpr.c                                */
-/*                                                                           */
-/*                         Study an expression tree                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "check.h"
-#include "debugflag.h"
-#include "shift.h"
-#include "xmalloc.h"
-
-/* ca65 */
-#include "error.h"
-#include "segment.h"
-#include "studyexpr.h"
-#include "symtab.h"
-#include "ulabel.h"
-
-
-
-/*****************************************************************************/
-/*                              struct ExprDesc                              */
-/*****************************************************************************/
-
-
-
-ExprDesc* ED_Init (ExprDesc* ED)
-/* Initialize an ExprDesc structure for use with StudyExpr */
-{
-    ED->Flags     = ED_OK;
-    ED->AddrSize  = ADDR_SIZE_DEFAULT;
-    ED->Val       = 0;
-    ED->SymCount  = 0;
-    ED->SymLimit  = 0;
-    ED->SymRef    = 0;
-    ED->SecCount  = 0;
-    ED->SecLimit  = 0;
-    ED->SecRef    = 0;
-    return ED;
-}
-
-
-
-void ED_Done (ExprDesc* ED)
-/* Delete allocated memory for an ExprDesc. */
-{
-    xfree (ED->SymRef);
-    xfree (ED->SecRef);
-}
-
-
-
-int ED_IsConst (const ExprDesc* D)
-/* Return true if the expression is constant */
-{
-    unsigned I;
-
-    if (D->Flags & ED_TOO_COMPLEX) {
-        return 0;
-    }
-    for (I = 0; I < D->SymCount; ++I) {
-        if (D->SymRef[I].Count != 0) {
-            return 0;
-        }
-    }
-    for (I = 0; I < D->SecCount; ++I) {
-        if (D->SecRef[I].Count != 0) {
-            return 0;
-        }
-    }
-    return 1;
-}
-
-
-
-static int ED_IsValid (const ExprDesc* D)
-/* Return true if the expression is valid, that is, neither the ERROR nor the
-** TOO_COMPLEX flags are set.
-*/
-{
-    return ((D->Flags & (ED_ERROR | ED_TOO_COMPLEX)) == 0);
-}
-
-
-
-static int ED_HasError (const ExprDesc* D)
-/* Return true if the expression has an error. */
-{
-    return ((D->Flags & ED_ERROR) != 0);
-}
-
-
-
-static void ED_Invalidate (ExprDesc* D)
-/* Set the TOO_COMPLEX flag for D */
-{
-    D->Flags |= ED_TOO_COMPLEX;
-}
-
-
-
-static void ED_SetError (ExprDesc* D)
-/* Set the TOO_COMPLEX and ERROR flags for D */
-{
-    D->Flags |= (ED_ERROR | ED_TOO_COMPLEX);
-}
-
-
-
-static void ED_UpdateAddrSize (ExprDesc* ED, unsigned char AddrSize)
-/* Update the address size of the expression */
-{
-    if (ED_IsValid (ED)) {
-        /* ADDR_SIZE_DEFAULT may get overridden */
-        if (ED->AddrSize == ADDR_SIZE_DEFAULT || AddrSize > ED->AddrSize) {
-            ED->AddrSize = AddrSize;
-        }
-    } else {
-        /* ADDR_SIZE_DEFAULT takes precedence */
-        if (ED->AddrSize != ADDR_SIZE_DEFAULT) {
-            if (AddrSize == ADDR_SIZE_DEFAULT || AddrSize > ED->AddrSize) {
-                ED->AddrSize = AddrSize;
-            }
-        }
-    }
-}
-
-
-
-static void ED_MergeAddrSize (ExprDesc* ED, const ExprDesc* Right)
-/* Merge the address sizes of two expressions into ED */
-{
-    if (ED->AddrSize == ADDR_SIZE_DEFAULT) {
-        /* If ED is valid, ADDR_SIZE_DEFAULT gets always overridden, otherwise
-        ** it takes precedence over anything else.
-        */
-        if (ED_IsValid (ED)) {
-            ED->AddrSize = Right->AddrSize;
-        }
-    } else if (Right->AddrSize == ADDR_SIZE_DEFAULT) {
-        /* If Right is valid, ADDR_SIZE_DEFAULT gets always overridden,
-        ** otherwise it takes precedence over anything else.
-        */
-        if (!ED_IsValid (Right)) {
-            ED->AddrSize = Right->AddrSize;
-        }
-    } else {
-        /* Neither ED nor Right has a default address size, use the larger of
-        ** the two.
-        */
-        if (Right->AddrSize > ED->AddrSize) {
-            ED->AddrSize = Right->AddrSize;
-        }
-    }
-}
-
-
-
-static ED_SymRef* ED_FindSymRef (ExprDesc* ED, SymEntry* Sym)
-/* Find a symbol reference and return it. Return NULL if the reference does
-** not exist.
-*/
-{
-    unsigned I;
-    ED_SymRef* SymRef;
-    for (I = 0, SymRef = ED->SymRef; I < ED->SymCount; ++I, ++SymRef) {
-        if (SymRef->Ref == Sym) {
-            return SymRef;
-        }
-    }
-    return 0;
-}
-
-
-
-static ED_SecRef* ED_FindSecRef (ExprDesc* ED, unsigned Sec)
-/* Find a section reference and return it. Return NULL if the reference does
-** not exist.
-*/
-{
-    unsigned I;
-    ED_SecRef* SecRef;
-    for (I = 0, SecRef = ED->SecRef; I < ED->SecCount; ++I, ++SecRef) {
-        if (SecRef->Ref == Sec) {
-            return SecRef;
-        }
-    }
-    return 0;
-}
-
-
-
-static ED_SymRef* ED_AllocSymRef (ExprDesc* ED, SymEntry* Sym)
-/* Allocate a new symbol reference and return it. The count of the new
-** reference will be set to zero, and the reference itself to Sym.
-*/
-{
-    ED_SymRef* SymRef;
-
-    /* Make sure we have enough SymRef slots */
-    if (ED->SymCount >= ED->SymLimit) {
-        ED->SymLimit *= 2;
-        if (ED->SymLimit == 0) {
-            ED->SymLimit = 2;
-        }
-        ED->SymRef = xrealloc (ED->SymRef, ED->SymLimit * sizeof (ED->SymRef[0]));
-    }
-
-    /* Allocate a new slot */
-    SymRef = ED->SymRef + ED->SymCount++;
-
-    /* Initialize the new struct and return it */
-    SymRef->Count = 0;
-    SymRef->Ref   = Sym;
-    return SymRef;
-}
-
-
-
-static ED_SecRef* ED_AllocSecRef (ExprDesc* ED, unsigned Sec)
-/* Allocate a new section reference and return it. The count of the new
-** reference will be set to zero, and the reference itself to Sec.
-*/
-{
-    ED_SecRef* SecRef;
-
-    /* Make sure we have enough SecRef slots */
-    if (ED->SecCount >= ED->SecLimit) {
-        ED->SecLimit *= 2;
-        if (ED->SecLimit == 0) {
-            ED->SecLimit = 2;
-        }
-        ED->SecRef = xrealloc (ED->SecRef, ED->SecLimit * sizeof (ED->SecRef[0]));
-    }
-
-    /* Allocate a new slot */
-    SecRef = ED->SecRef + ED->SecCount++;
-
-    /* Initialize the new struct and return it */
-    SecRef->Count = 0;
-    SecRef->Ref   = Sec;
-    return SecRef;
-}
-
-
-
-static ED_SymRef* ED_GetSymRef (ExprDesc* ED, SymEntry* Sym)
-/* Get a symbol reference and return it. If the symbol reference does not
-** exist, a new one is created and returned.
-*/
-{
-    ED_SymRef* SymRef = ED_FindSymRef (ED, Sym);
-    if (SymRef == 0) {
-        SymRef = ED_AllocSymRef (ED, Sym);
-    }
-    return SymRef;
-}
-
-
-
-static ED_SecRef* ED_GetSecRef (ExprDesc* ED, unsigned Sec)
-/* Get a section reference and return it. If the section reference does not
-** exist, a new one is created and returned.
-*/
-{
-    ED_SecRef* SecRef = ED_FindSecRef (ED, Sec);
-    if (SecRef == 0) {
-        SecRef = ED_AllocSecRef (ED, Sec);
-    }
-    return SecRef;
-}
-
-
-
-static void ED_MergeSymRefs (ExprDesc* ED, const ExprDesc* New)
-/* Merge the symbol references from New into ED */
-{
-    unsigned I;
-    for (I = 0; I < New->SymCount; ++I) {
-
-        /* Get a pointer to the SymRef entry */
-        const ED_SymRef* NewRef = New->SymRef + I;
-
-        /* Get the corresponding entry in ED */
-        ED_SymRef* SymRef = ED_GetSymRef (ED, NewRef->Ref);
-
-        /* Sum up the references */
-        SymRef->Count += NewRef->Count;
-    }
-}
-
-
-
-static void ED_MergeSecRefs (ExprDesc* ED, const ExprDesc* New)
-/* Merge the section references from New into ED */
-{
-    unsigned I;
-    for (I = 0; I < New->SecCount; ++I) {
-
-        /* Get a pointer to the SymRef entry */
-        const ED_SecRef* NewRef = New->SecRef + I;
-
-        /* Get the corresponding entry in ED */
-        ED_SecRef* SecRef = ED_GetSecRef (ED, NewRef->Ref);
-
-        /* Sum up the references */
-        SecRef->Count += NewRef->Count;
-    }
-}
-
-
-
-static void ED_MergeRefs (ExprDesc* ED, const ExprDesc* New)
-/* Merge all references from New into ED */
-{
-    ED_MergeSymRefs (ED, New);
-    ED_MergeSecRefs (ED, New);
-}
-
-
-
-static void ED_NegRefs (ExprDesc* D)
-/* Negate the references in ED */
-{
-    unsigned I;
-    for (I = 0; I < D->SymCount; ++I) {
-        D->SymRef[I].Count = -D->SymRef[I].Count;
-    }
-    for (I = 0; I < D->SecCount; ++I) {
-        D->SecRef[I].Count = -D->SecRef[I].Count;
-    }
-}
-
-
-
-static void ED_Add (ExprDesc* ED, const ExprDesc* Right)
-/* Calculate ED = ED + Right, update address size in ED */
-{
-    ED->Val += Right->Val;
-    ED_MergeRefs (ED, Right);
-    ED_MergeAddrSize (ED, Right);
-}
-
-
-
-static void ED_Sub (ExprDesc* ED, const ExprDesc* Right)
-/* Calculate ED = ED - Right, update address size in ED */
-{
-    ExprDesc D = *Right;        /* Temporary */
-    ED_NegRefs (&D);
-
-    ED->Val -= Right->Val;
-    ED_MergeRefs (ED, &D);      /* Merge negatives */
-    ED_MergeAddrSize (ED, Right);
-}
-
-
-
-static void ED_Mul (ExprDesc* ED, const ExprDesc* Right)
-/* Calculate ED = ED * Right, update address size in ED */
-{
-    unsigned I;
-
-    ED->Val *= Right->Val;
-    for (I = 0; I < ED->SymCount; ++I) {
-        ED->SymRef[I].Count *= Right->Val;
-    }
-    for (I = 0; I < ED->SecCount; ++I) {
-        ED->SecRef[I].Count *= Right->Val;
-    }
-    ED_MergeAddrSize (ED, Right);
-}
-
-
-
-static void ED_Neg (ExprDesc* D)
-/* Negate an expression */
-{
-    D->Val = -D->Val;
-    ED_NegRefs (D);
-}
-
-
-
-static void ED_Move (ExprDesc* From, ExprDesc* To)
-/* Move the data from one ExprDesc to another. Old data is freed, and From
-** is prepared to that ED_Done may be called safely.
-*/
-{
-    /* Delete old data */
-    ED_Done (To);
-
-    /* Move the data */
-    *To = *From;
-
-    /* Cleanup From */
-    ED_Init (From);
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void StudyExprInternal (ExprNode* Expr, ExprDesc* D);
-/* Study an expression tree and place the contents into D */
-
-
-
-static unsigned char GetConstAddrSize (long Val)
-/* Get the address size of a constant */
-{
-    if ((Val & ~0xFFL) == 0) {
-        return ADDR_SIZE_ZP;
-    } else if ((Val & ~0xFFFFL) == 0) {
-        return ADDR_SIZE_ABS;
-    } else if ((Val & ~0xFFFFFFL) == 0) {
-        return ADDR_SIZE_FAR;
-    } else {
-        return ADDR_SIZE_LONG;
-    }
-}
-
-
-
-static void StudyBinaryExpr (ExprNode* Expr, ExprDesc* D)
-/* Study a binary expression subtree. This is a helper function for StudyExpr
-** used for operations that succeed when both operands are known and constant.
-** It evaluates the two subtrees and checks if they are constant. If they
-** aren't constant, it will set the TOO_COMPLEX flag, and merge references.
-** Otherwise the first value is returned in D->Val, the second one in D->Right,
-** so the actual operation can be done by the caller.
-*/
-{
-    ExprDesc Right;
-
-    /* Study the left side of the expression */
-    StudyExprInternal (Expr->Left, D);
-
-    /* Study the right side of the expression */
-    ED_Init (&Right);
-    StudyExprInternal (Expr->Right, &Right);
-
-    /* Check if we can handle the operation */
-    if (ED_IsConst (D) && ED_IsConst (&Right)) {
-
-        /* Remember the constant value from Right */
-        D->Right = Right.Val;
-
-    } else {
-
-        /* Cannot evaluate */
-        ED_Invalidate (D);
-
-        /* Merge references and update address size */
-        ED_MergeRefs (D, &Right);
-        ED_MergeAddrSize (D, &Right);
-
-    }
-
-    /* Cleanup Right */
-    ED_Done (&Right);
-}
-
-
-
-static void StudyLiteral (ExprNode* Expr, ExprDesc* D)
-/* Study a literal expression node */
-{
-    /* This one is easy */
-    D->Val      = Expr->V.IVal;
-    D->AddrSize = GetConstAddrSize (D->Val);
-}
-
-
-
-static void StudySymbol (ExprNode* Expr, ExprDesc* D)
-/* Study a symbol expression node */
-{
-    /* Get the symbol from the expression */
-    SymEntry* Sym = Expr->V.Sym;
-
-    /* If the symbol is defined somewhere, it has an expression associated.
-    ** In this case, just study the expression associated with the symbol,
-    ** but mark the symbol so if we encounter it twice, we know that we have
-    ** a circular reference.
-    */
-    if (SymHasExpr (Sym)) {
-
-        if (SymHasUserMark (Sym)) {
-            LIError (&Sym->DefLines,
-                     "Circular reference in definition of symbol `%m%p'",
-                     GetSymName (Sym));
-            ED_SetError (D);
-        } else {
-
-            unsigned char AddrSize;
-
-            /* Mark the symbol and study its associated expression */
-            SymMarkUser (Sym);
-            StudyExprInternal (GetSymExpr (Sym), D);
-            SymUnmarkUser (Sym);
-
-            /* If requested and if the expression is valid, dump it */
-            if (Debug > 0 && !ED_HasError (D)) {
-                DumpExpr (Expr, SymResolve);
-            }
-
-            /* If the symbol has an explicit address size, use it. This may
-            ** lead to range errors later (maybe even in the linker stage), if
-            ** the user lied about the address size, but for now we trust him.
-            */
-            AddrSize = GetSymAddrSize (Sym);
-            if (AddrSize != ADDR_SIZE_DEFAULT) {
-                D->AddrSize = AddrSize;
-            }
-        }
-
-    } else if (SymIsImport (Sym)) {
-
-        /* The symbol is an import. Track the symbols used and update the
-        ** address size.
-        */
-        ED_SymRef* SymRef = ED_GetSymRef (D, Sym);
-        ++SymRef->Count;
-        ED_UpdateAddrSize (D, GetSymAddrSize (Sym));
-
-    } else {
-
-        unsigned char AddrSize;
-        SymTable* Parent;
-
-        /* The symbol is undefined. Track symbol usage but set the "too
-        ** complex" flag, since we cannot evaluate the final result.
-        */
-        ED_SymRef* SymRef = ED_GetSymRef (D, Sym);
-        ++SymRef->Count;
-        ED_Invalidate (D);
-
-        /* Since the symbol may be a forward, and we may need a statement
-        ** about the address size, check higher lexical levels for a symbol
-        ** with the same name and use its address size if we find such a
-        ** symbol which is defined.
-        */
-        AddrSize = GetSymAddrSize (Sym);
-        Parent = GetSymParentScope (Sym);
-        if (AddrSize == ADDR_SIZE_DEFAULT && Parent != 0) {
-            SymEntry* H = SymFindAny (Parent, GetSymName (Sym));
-            if (H) {
-                AddrSize = GetSymAddrSize (H);
-                if (AddrSize != ADDR_SIZE_DEFAULT) {
-                    D->AddrSize = AddrSize;
-                }
-            }
-        } else {
-            D->AddrSize = AddrSize;
-        }
-    }
-}
-
-
-
-static void StudySection (ExprNode* Expr, ExprDesc* D)
-/* Study a section expression node */
-{
-    /* Get the section reference */
-    ED_SecRef* SecRef = ED_GetSecRef (D, Expr->V.SecNum);
-
-    /* Update the data and the address size */
-    ++SecRef->Count;
-    ED_UpdateAddrSize (D, GetSegAddrSize (SecRef->Ref));
-}
-
-
-
-static void StudyULabel (ExprNode* Expr, ExprDesc* D)
-/* Study an unnamed label expression node */
-{
-    /* If we can resolve the label, study the expression associated with it,
-    ** otherwise mark the expression as too complex to evaluate.
-    */
-    if (ULabCanResolve ()) {
-        /* We can resolve the label */
-        StudyExprInternal (ULabResolve (Expr->V.IVal), D);
-    } else {
-        ED_Invalidate (D);
-    }
-}
-
-
-
-static void StudyPlus (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_PLUS binary expression node */
-{
-    ExprDesc Right;
-
-    /* Study the left side of the expression */
-    StudyExprInternal (Expr->Left, D);
-
-    /* Study the right side of the expression */
-    ED_Init (&Right);
-    StudyExprInternal (Expr->Right, &Right);
-
-    /* Check if we can handle the operation */
-    if (ED_IsValid (D) && ED_IsValid (&Right)) {
-
-        /* Add both */
-        ED_Add (D, &Right);
-
-    } else {
-
-        /* Cannot evaluate */
-        ED_Invalidate (D);
-
-        /* Merge references and update address size */
-        ED_MergeRefs (D, &Right);
-        ED_MergeAddrSize (D, &Right);
-
-    }
-
-    /* Done */
-    ED_Done (&Right);
-}
-
-
-
-static void StudyMinus (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_MINUS binary expression node */
-{
-    ExprDesc Right;
-
-    /* Study the left side of the expression */
-    StudyExprInternal (Expr->Left, D);
-
-    /* Study the right side of the expression */
-    ED_Init (&Right);
-    StudyExprInternal (Expr->Right, &Right);
-
-    /* Check if we can handle the operation */
-    if (ED_IsValid (D) && ED_IsValid (&Right)) {
-
-        /* Subtract both */
-        ED_Sub (D, &Right);
-
-    } else {
-
-        /* Cannot evaluate */
-        ED_Invalidate (D);
-
-        /* Merge references and update address size */
-        ED_MergeRefs (D, &Right);
-        ED_MergeAddrSize (D, &Right);
-
-    }
-
-    /* Done */
-    ED_Done (&Right);
-}
-
-
-
-static void StudyMul (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_MUL binary expression node */
-{
-    ExprDesc Right;
-
-    /* Study the left side of the expression */
-    StudyExprInternal (Expr->Left, D);
-
-    /* Study the right side of the expression */
-    ED_Init (&Right);
-    StudyExprInternal (Expr->Right, &Right);
-
-    /* We can handle the operation if at least one of both operands is const
-    ** and the other one is valid.
-    */
-    if (ED_IsConst (D) && ED_IsValid (&Right)) {
-
-        /* Multiplicate both, result goes into Right */
-        ED_Mul (&Right, D);
-
-        /* Move result into D */
-        ED_Move (&Right, D);
-
-    } else if (ED_IsConst (&Right) && ED_IsValid (D)) {
-
-        /* Multiplicate both */
-        ED_Mul (D, &Right);
-
-    } else {
-
-        /* Cannot handle this operation */
-        ED_Invalidate (D);
-
-    }
-
-    /* If we could not handle the op, merge references and update address size */
-    if (!ED_IsValid (D)) {
-        ED_MergeRefs (D, &Right);
-        ED_MergeAddrSize (D, &Right);
-    }
-
-    /* Done */
-    ED_Done (&Right);
-}
-
-
-
-static void StudyDiv (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_DIV binary expression node */
-{
-    /* Use helper function */
-    StudyBinaryExpr (Expr, D);
-
-    /* If the result is valid, apply the operation */
-    if (ED_IsValid (D)) {
-        if (D->Right == 0) {
-            Error ("Division by zero");
-            ED_SetError (D);
-        } else {
-            D->Val /= D->Right;
-        }
-    }
-}
-
-
-
-static void StudyMod (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_MOD binary expression node */
-{
-    /* Use helper function */
-    StudyBinaryExpr (Expr, D);
-
-    /* If the result is valid, apply the operation */
-    if (ED_IsValid (D)) {
-        if (D->Right == 0) {
-            Error ("Modulo operation with zero");
-            ED_SetError (D);
-        } else {
-            D->Val %= D->Right;
-        }
-    }
-}
-
-
-
-static void StudyOr (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_OR binary expression node */
-{
-    /* Use helper function */
-    StudyBinaryExpr (Expr, D);
-
-    /* If the result is valid, apply the operation */
-    if (ED_IsValid (D)) {
-        D->Val |= D->Right;
-    }
-}
-
-
-
-static void StudyXor (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_XOR binary expression node */
-{
-    /* Use helper function */
-    StudyBinaryExpr (Expr, D);
-
-    /* If the result is valid, apply the operation */
-    if (ED_IsValid (D)) {
-        D->Val ^= D->Right;
-    }
-}
-
-
-
-static void StudyAnd (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_AND binary expression node */
-{
-    /* Use helper function */
-    StudyBinaryExpr (Expr, D);
-
-    /* If the result is valid, apply the operation */
-    if (ED_IsValid (D)) {
-        D->Val &= D->Right;
-    }
-}
-
-
-
-static void StudyShl (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_SHL binary expression node */
-{
-    /* Use helper function */
-    StudyBinaryExpr (Expr, D);
-
-    /* If the result is valid, apply the operation */
-    if (ED_IsValid (D)) {
-        D->Val = shl_l (D->Val, D->Right);
-    }
-}
-
-
-
-static void StudyShr (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_SHR binary expression node */
-{
-    /* Use helper function */
-    StudyBinaryExpr (Expr, D);
-
-    /* If the result is valid, apply the operation */
-    if (ED_IsValid (D)) {
-        D->Val = shr_l (D->Val, D->Right);
-    }
-}
-
-
-
-static void StudyEQ (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_EQ binary expression node */
-{
-    /* Use helper function */
-    StudyBinaryExpr (Expr, D);
-
-    /* If the result is valid, apply the operation */
-    if (ED_IsValid (D)) {
-        D->Val = (D->Val == D->Right);
-    }
-
-    /* In any case, the result is 0 or 1 */
-    D->AddrSize = ADDR_SIZE_ZP;
-}
-
-
-
-static void StudyNE (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_NE binary expression node */
-{
-    /* Use helper function */
-    StudyBinaryExpr (Expr, D);
-
-    /* If the result is valid, apply the operation */
-    if (ED_IsValid (D)) {
-        D->Val = (D->Val != D->Right);
-    }
-
-    /* In any case, the result is 0 or 1 */
-    D->AddrSize = ADDR_SIZE_ZP;
-}
-
-
-
-static void StudyLT (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_LT binary expression node */
-{
-    /* Use helper function */
-    StudyBinaryExpr (Expr, D);
-
-    /* If the result is valid, apply the operation */
-    if (ED_IsValid (D)) {
-        D->Val = (D->Val < D->Right);
-    }
-
-    /* In any case, the result is 0 or 1 */
-    D->AddrSize = ADDR_SIZE_ZP;
-}
-
-
-
-static void StudyGT (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_GT binary expression node */
-{
-    /* Use helper function */
-    StudyBinaryExpr (Expr, D);
-
-    /* If the result is valid, apply the operation */
-    if (ED_IsValid (D)) {
-        D->Val = (D->Val > D->Right);
-    }
-
-    /* In any case, the result is 0 or 1 */
-    D->AddrSize = ADDR_SIZE_ZP;
-}
-
-
-
-static void StudyLE (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_LE binary expression node */
-{
-    /* Use helper function */
-    StudyBinaryExpr (Expr, D);
-
-    /* If the result is valid, apply the operation */
-    if (ED_IsValid (D)) {
-        D->Val = (D->Val <= D->Right);
-    }
-
-    /* In any case, the result is 0 or 1 */
-    D->AddrSize = ADDR_SIZE_ZP;
-}
-
-
-
-static void StudyGE (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_GE binary expression node */
-{
-    /* Use helper function */
-    StudyBinaryExpr (Expr, D);
-
-    /* If the result is valid, apply the operation */
-    if (ED_IsValid (D)) {
-        D->Val = (D->Val >= D->Right);
-    }
-
-    /* In any case, the result is 0 or 1 */
-    D->AddrSize = ADDR_SIZE_ZP;
-}
-
-
-
-static void StudyBoolAnd (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_BOOLAND binary expression node */
-{
-    StudyExprInternal (Expr->Left, D);
-    if (ED_IsConst (D)) {
-        if (D->Val != 0) {   /* Shortcut op */
-            ED_Done (D);
-            ED_Init (D);
-            StudyExprInternal (Expr->Right, D);
-            if (ED_IsConst (D)) {
-                D->Val = (D->Val != 0);
-            } else {
-                ED_Invalidate (D);
-            }
-        }
-    } else {
-        ED_Invalidate (D);
-    }
-
-    /* In any case, the result is 0 or 1 */
-    D->AddrSize = ADDR_SIZE_ZP;
-}
-
-
-
-static void StudyBoolOr (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_BOOLOR binary expression node */
-{
-    StudyExprInternal (Expr->Left, D);
-    if (ED_IsConst (D)) {
-        if (D->Val == 0) {   /* Shortcut op */
-            ED_Done (D);
-            ED_Init (D);
-            StudyExprInternal (Expr->Right, D);
-            if (ED_IsConst (D)) {
-                D->Val = (D->Val != 0);
-            } else {
-                ED_Invalidate (D);
-            }
-        } else {
-            D->Val = 1;
-        }
-    } else {
-        ED_Invalidate (D);
-    }
-
-    /* In any case, the result is 0 or 1 */
-    D->AddrSize = ADDR_SIZE_ZP;
-}
-
-
-
-static void StudyBoolXor (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_BOOLXOR binary expression node */
-{
-    /* Use helper function */
-    StudyBinaryExpr (Expr, D);
-
-    /* If the result is valid, apply the operation */
-    if (ED_IsValid (D)) {
-        D->Val = (D->Val != 0) ^ (D->Right != 0);
-    }
-
-    /* In any case, the result is 0 or 1 */
-    D->AddrSize = ADDR_SIZE_ZP;
-}
-
-
-
-static void StudyMax (ExprNode* Expr, ExprDesc* D)
-/* Study an MAX binary expression node */
-{
-    /* Use helper function */
-    StudyBinaryExpr (Expr, D);
-
-    /* If the result is valid, apply the operation */
-    if (ED_IsValid (D)) {
-        D->Val = (D->Val > D->Right)? D->Val : D->Right;
-    }
-}
-
-
-
-static void StudyMin (ExprNode* Expr, ExprDesc* D)
-/* Study an MIN binary expression node */
-{
-    /* Use helper function */
-    StudyBinaryExpr (Expr, D);
-
-    /* If the result is valid, apply the operation */
-    if (ED_IsValid (D)) {
-        D->Val = (D->Val < D->Right)? D->Val : D->Right;
-    }
-}
-
-
-
-static void StudyUnaryMinus (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_UNARY_MINUS expression node */
-{
-    /* Study the expression */
-    StudyExprInternal (Expr->Left, D);
-
-    /* If it is valid, negate it */
-    if (ED_IsValid (D)) {
-        ED_Neg (D);
-    }
-}
-
-
-
-static void StudyNot (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_NOT expression node */
-{
-    /* Study the expression */
-    StudyExprInternal (Expr->Left, D);
-
-    /* We can handle only const expressions */
-    if (ED_IsConst (D)) {
-        D->Val = ~D->Val;
-    } else {
-        ED_Invalidate (D);
-    }
-}
-
-
-
-static void StudySwap (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_SWAP expression node */
-{
-    /* Study the expression */
-    StudyExprInternal (Expr->Left, D);
-
-    /* We can handle only const expressions */
-    if (ED_IsConst (D)) {
-        D->Val = (D->Val & ~0xFFFFUL) | ((D->Val >> 8) & 0xFF) | ((D->Val << 8) & 0xFF00);
-    } else {
-        ED_Invalidate (D);
-    }
-}
-
-
-
-static void StudyBoolNot (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_BOOLNOT expression node */
-{
-    /* Study the expression */
-    StudyExprInternal (Expr->Left, D);
-
-    /* We can handle only const expressions */
-    if (ED_IsConst (D)) {
-        D->Val = (D->Val == 0);
-    } else {
-        ED_Invalidate (D);
-    }
-
-    /* In any case, the result is 0 or 1 */
-    D->AddrSize = ADDR_SIZE_ZP;
-}
-
-
-
-static void StudyBank (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_BANK expression node */
-{
-    /* Study the expression extracting section references */
-    StudyExprInternal (Expr->Left, D);
-
-    /* The expression is always linker evaluated, so invalidate it */
-    ED_Invalidate (D);
-}
-
-
-
-static void StudyByte0 (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_BYTE0 expression node */
-{
-    /* Study the expression */
-    StudyExprInternal (Expr->Left, D);
-
-    /* We can handle only const expressions */
-    if (ED_IsConst (D)) {
-        D->Val = (D->Val & 0xFF);
-    } else {
-        ED_Invalidate (D);
-    }
-
-    /* In any case, the result is a zero page expression */
-    D->AddrSize = ADDR_SIZE_ZP;
-}
-
-
-
-static void StudyByte1 (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_BYTE1 expression node */
-{
-    /* Study the expression */
-    StudyExprInternal (Expr->Left, D);
-
-    /* We can handle only const expressions */
-    if (ED_IsConst (D)) {
-        D->Val = (D->Val >> 8) & 0xFF;
-    } else {
-        ED_Invalidate (D);
-    }
-
-    /* In any case, the result is a zero page expression */
-    D->AddrSize = ADDR_SIZE_ZP;
-}
-
-
-
-static void StudyByte2 (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_BYTE2 expression node */
-{
-    /* Study the expression */
-    StudyExprInternal (Expr->Left, D);
-
-    /* We can handle only const expressions */
-    if (ED_IsConst (D)) {
-        D->Val = (D->Val >> 16) & 0xFF;
-    } else {
-        ED_Invalidate (D);
-    }
-
-    /* In any case, the result is a zero page expression */
-    D->AddrSize = ADDR_SIZE_ZP;
-}
-
-
-
-static void StudyByte3 (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_BYTE3 expression node */
-{
-    /* Study the expression */
-    StudyExprInternal (Expr->Left, D);
-
-    /* We can handle only const expressions */
-    if (ED_IsConst (D)) {
-        D->Val = (D->Val >> 24) & 0xFF;
-    } else {
-        ED_Invalidate (D);
-    }
-
-    /* In any case, the result is a zero page expression */
-    D->AddrSize = ADDR_SIZE_ZP;
-}
-
-
-
-static void StudyWord0 (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_WORD0 expression node */
-{
-    /* Study the expression */
-    StudyExprInternal (Expr->Left, D);
-
-    /* We can handle only const expressions */
-    if (ED_IsConst (D)) {
-        D->Val &= 0xFFFFL;
-    } else {
-        ED_Invalidate (D);
-    }
-
-    /* In any case, the result is an absolute expression */
-    D->AddrSize = ADDR_SIZE_ABS;
-}
-
-
-
-static void StudyWord1 (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_WORD1 expression node */
-{
-    /* Study the expression */
-    StudyExprInternal (Expr->Left, D);
-
-    /* We can handle only const expressions */
-    if (ED_IsConst (D)) {
-        D->Val = (D->Val >> 16) & 0xFFFFL;
-    } else {
-        ED_Invalidate (D);
-    }
-
-    /* In any case, the result is an absolute expression */
-    D->AddrSize = ADDR_SIZE_ABS;
-}
-
-
-
-static void StudyFarAddr (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_FARADDR expression node */
-{
-    /* Study the expression */
-    StudyExprInternal (Expr->Left, D);
-
-    /* We can handle only const expressions */
-    if (ED_IsConst (D)) {
-        D->Val &= 0xFFFFFFL;
-    } else {
-        ED_Invalidate (D);
-    }
-
-    /* In any case, the result is a far address */
-    D->AddrSize = ADDR_SIZE_FAR;
-}
-
-
-
-static void StudyDWord (ExprNode* Expr, ExprDesc* D)
-/* Study an EXPR_DWORD expression node */
-{
-    /* Study the expression */
-    StudyExprInternal (Expr->Left, D);
-
-    /* We can handle only const expressions */
-    if (ED_IsConst (D)) {
-        D->Val &= 0xFFFFFFFFL;
-    } else {
-        ED_Invalidate (D);
-    }
-
-    /* In any case, the result is a long expression */
-    D->AddrSize = ADDR_SIZE_LONG;
-}
-
-
-
-static void StudyExprInternal (ExprNode* Expr, ExprDesc* D)
-/* Study an expression tree and place the contents into D */
-{
-    /* Study this expression node */
-    switch (Expr->Op) {
-
-        case EXPR_LITERAL:
-            StudyLiteral (Expr, D);
-            break;
-
-        case EXPR_SYMBOL:
-            StudySymbol (Expr, D);
-            break;
-
-        case EXPR_SECTION:
-            StudySection (Expr, D);
-            break;
-
-        case EXPR_ULABEL:
-            StudyULabel (Expr, D);
-            break;
-
-        case EXPR_PLUS:
-            StudyPlus (Expr, D);
-            break;
-
-        case EXPR_MINUS:
-            StudyMinus (Expr, D);
-            break;
-
-        case EXPR_MUL:
-            StudyMul (Expr, D);
-            break;
-
-        case EXPR_DIV:
-            StudyDiv (Expr, D);
-            break;
-
-        case EXPR_MOD:
-            StudyMod (Expr, D);
-            break;
-
-        case EXPR_OR:
-            StudyOr (Expr, D);
-            break;
-
-        case EXPR_XOR:
-            StudyXor (Expr, D);
-            break;
-
-        case EXPR_AND:
-            StudyAnd (Expr, D);
-            break;
-
-        case EXPR_SHL:
-            StudyShl (Expr, D);
-            break;
-
-        case EXPR_SHR:
-            StudyShr (Expr, D);
-            break;
-
-        case EXPR_EQ:
-            StudyEQ (Expr, D);
-            break;
-
-        case EXPR_NE:
-            StudyNE (Expr, D);
-            break;
-
-        case EXPR_LT:
-            StudyLT (Expr, D);
-            break;
-
-        case EXPR_GT:
-            StudyGT (Expr, D);
-            break;
-
-        case EXPR_LE:
-            StudyLE (Expr, D);
-            break;
-
-        case EXPR_GE:
-            StudyGE (Expr, D);
-            break;
-
-        case EXPR_BOOLAND:
-            StudyBoolAnd (Expr, D);
-            break;
-
-        case EXPR_BOOLOR:
-            StudyBoolOr (Expr, D);
-            break;
-
-        case EXPR_BOOLXOR:
-            StudyBoolXor (Expr, D);
-            break;
-
-        case EXPR_MAX:
-            StudyMax (Expr, D);
-            break;
-
-        case EXPR_MIN:
-            StudyMin (Expr, D);
-            break;
-
-        case EXPR_UNARY_MINUS:
-            StudyUnaryMinus (Expr, D);
-            break;
-
-        case EXPR_NOT:
-            StudyNot (Expr, D);
-            break;
-
-        case EXPR_SWAP:
-            StudySwap (Expr, D);
-            break;
-
-        case EXPR_BOOLNOT:
-            StudyBoolNot (Expr, D);
-            break;
-
-        case EXPR_BANK:
-            StudyBank (Expr, D);
-            break;
-
-        case EXPR_BYTE0:
-            StudyByte0 (Expr, D);
-            break;
-
-        case EXPR_BYTE1:
-            StudyByte1 (Expr, D);
-            break;
-
-        case EXPR_BYTE2:
-            StudyByte2 (Expr, D);
-            break;
-
-        case EXPR_BYTE3:
-            StudyByte3 (Expr, D);
-            break;
-
-        case EXPR_WORD0:
-            StudyWord0 (Expr, D);
-            break;
-
-        case EXPR_WORD1:
-            StudyWord1 (Expr, D);
-            break;
-
-        case EXPR_FARADDR:
-            StudyFarAddr (Expr, D);
-            break;
-
-        case EXPR_DWORD:
-            StudyDWord (Expr, D);
-            break;
-
-        default:
-            Internal ("Unknown Op type: %u", Expr->Op);
-            break;
-    }
-}
-
-
-
-void StudyExpr (ExprNode* Expr, ExprDesc* D)
-/* Study an expression tree and place the contents into D */
-{
-    unsigned I, J;
-
-    /* Call the internal function */
-    StudyExprInternal (Expr, D);
-
-    /* Remove symbol references with count zero */
-    I = J = 0;
-    while (I < D->SymCount) {
-        if (D->SymRef[I].Count == 0) {
-            /* Delete the entry */
-            --D->SymCount;
-            memmove (D->SymRef + I, D->SymRef + I + 1,
-                     (D->SymCount - I) * sizeof (D->SymRef[0]));
-        } else {
-            /* Next entry */
-            ++I;
-        }
-    }
-
-    /* Remove section references with count zero */
-    I = 0;
-    while (I < D->SecCount) {
-        if (D->SecRef[I].Count == 0) {
-            /* Delete the entry */
-            --D->SecCount;
-            memmove (D->SecRef + I, D->SecRef + I + 1,
-                     (D->SecCount - I) * sizeof (D->SecRef[0]));
-        } else {
-            /* Next entry */
-            ++I;
-        }
-    }
-
-    /* If we don't have an address size, assign one if the expression is a
-    ** constant.
-    */
-    if (D->AddrSize == ADDR_SIZE_DEFAULT && ED_IsConst (D)) {
-        D->AddrSize = GetConstAddrSize (D->Val);
-    }
-
-    /* If the expression is valid, throw away the address size and recalculate
-    ** it using the data we have. This is more exact than the on-the-fly
-    ** calculation done when evaluating the tree, because symbols may have
-    ** been removed from the expression, and the final numeric value is now
-    ** known.
-    */
-    if (ED_IsValid (D)) {
-        unsigned char AddrSize;
-
-        /* If there are symbols or sections, use the largest one. If the
-        ** expression resolves to a const, use the address size of the value.
-        */
-        if (D->SymCount > 0 || D->SecCount > 0) {
-
-            D->AddrSize = ADDR_SIZE_DEFAULT;
-
-            for (I = 0; I < D->SymCount; ++I) {
-                const SymEntry* Sym = D->SymRef[I].Ref;
-                AddrSize = GetSymAddrSize (Sym);
-                if (AddrSize > D->AddrSize) {
-                    D->AddrSize = AddrSize;
-                }
-            }
-
-            for (I = 0; I < D->SecCount; ++I) {
-                unsigned SegNum = D->SecRef[0].Ref;
-                AddrSize = GetSegAddrSize (SegNum);
-                if (AddrSize > D->AddrSize) {
-                    D->AddrSize = AddrSize;
-                }
-            }
-
-        } else {
-            AddrSize = GetConstAddrSize (D->Val);
-            if (AddrSize > D->AddrSize) {
-                D->AddrSize = AddrSize;
-            }
-        }
-    }
-
-#if 0
-    /* Debug code */
-    printf ("StudyExpr: "); DumpExpr (Expr, SymResolve);
-    printf ("Value: %08lX\n", D->Val);
-    if (!ED_IsValid (D)) {
-        printf ("Invalid: %s\n", AddrSizeToStr (D->AddrSize));
-    } else {
-        printf ("Valid:   %s\n", AddrSizeToStr (D->AddrSize));
-    }
-    printf ("%u symbols:\n", D->SymCount);
-    printf ("%u sections:\n", D->SecCount);
-#endif
-}
diff --git a/src/ca65/studyexpr.h b/src/ca65/studyexpr.h
deleted file mode 100644 (file)
index 389bce5..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                studyexpr.h                                */
-/*                                                                           */
-/*                         Study an expression tree                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2012,  Ullrich von Bassewitz                                     */
-/*                 Roemerstrasse 52                                          */
-/*                 D-70794 Filderstadt                                       */
-/* EMail:          uz@cc65.org                                               */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef STUDYEXPR_H
-#define STUDYEXPR_H
-
-                                            
-
-/* common */
-#include "exprdefs.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Flags */
-#define ED_OK           0x00            /* Nothing special */
-#define ED_TOO_COMPLEX  0x01            /* Expression is too complex */
-#define ED_ERROR        0x02            /* Error evaluating the expression */
-
-/* Symbol reference */
-typedef struct ED_SymRef ED_SymRef;
-struct ED_SymRef {
-    long                Count;          /* Number of references */
-    struct SymEntry*    Ref;            /* Actual reference */
-};
-
-/* Section reference */
-typedef struct ED_SecRef ED_SecRef;
-struct ED_SecRef {
-    long                Count;          /* Number of references */
-    unsigned            Ref;            /* Actual reference */
-};
-
-/* Structure for parsing expression trees */
-typedef struct ExprDesc ExprDesc;
-struct ExprDesc {
-    unsigned short      Flags;          /* See ED_xxx */
-    unsigned char       AddrSize;       /* Address size of the expression */
-    long                Val;            /* The offset value */
-    long                Right;          /* Right value for StudyBinaryExpr */
-
-    /* Symbol reference management */
-    unsigned            SymCount;       /* Number of symbols referenced */
-    unsigned            SymLimit;       /* Memory allocated */
-    ED_SymRef*          SymRef;         /* Symbol references */
-
-    /* Section reference management */
-    unsigned            SecCount;       /* Number of sections referenced */
-    unsigned            SecLimit;       /* Memory allocated */
-    ED_SecRef*          SecRef;         /* Section references */
-};
-
-
-
-/*****************************************************************************/
-/*                              struct ExprDesc                              */
-/*****************************************************************************/
-
-
-
-ExprDesc* ED_Init (ExprDesc* ED);
-/* Initialize an ExprDesc structure for use with StudyExpr */
-
-void ED_Done (ExprDesc* ED);
-/* Delete allocated memory for an ExprDesc. */
-
-int ED_IsConst (const ExprDesc* ED);
-/* Return true if the expression is constant */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void StudyExpr (ExprNode* Expr, ExprDesc* D);
-/* Study an expression tree and place the contents into D */
-
-
-
-/* End of studyexpr.h */
-
-#endif
diff --git a/src/ca65/symbol.c b/src/ca65/symbol.c
deleted file mode 100644 (file)
index 0b02aab..0000000
+++ /dev/null
@@ -1,264 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 symbol.c                                  */
-/*                                                                           */
-/*                   Parse a symbol name and search for it                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "strbuf.h"
-
-/* ca65 */
-#include "error.h"
-#include "nexttok.h"
-#include "scanner.h"
-#include "symbol.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-SymTable* ParseScopedIdent (StrBuf* Name, StrBuf* FullName)
-/* Parse a (possibly scoped) identifer. The scope of the name must exist and
-** is returned as function result, while the last part (the identifier) which
-** may be either a symbol or a scope depending on the context is returned in
-** Name. FullName is a string buffer that is used to store the full name of
-** the identifier including the scope. It is used internally and may be used
-** by the caller for error messages or similar.
-*/
-{
-    SymTable* Scope;
-
-    /* Clear both passed string buffers */
-    SB_Clear (Name);
-    SB_Clear (FullName);
-
-    /* Get the starting table */
-    if (CurTok.Tok == TOK_NAMESPACE) {
-
-        /* Start from the root scope */
-        Scope = RootScope;
-
-    } else if (CurTok.Tok == TOK_IDENT) {
-
-        /* Remember the name and skip it */
-        SB_Copy (Name, &CurTok.SVal);
-        NextTok ();
-
-        /* If no namespace symbol follows, we're already done */
-        if (CurTok.Tok != TOK_NAMESPACE) {
-            SB_Terminate (FullName);
-            return CurrentScope;
-        }
-
-        /* Pass the scope back to the caller */
-        SB_Append (FullName, Name);
-
-        /* The scope must exist, so search for it starting with the current
-        ** scope.
-        */
-        Scope = SymFindAnyScope (CurrentScope, Name);
-        if (Scope == 0) {
-            /* Scope not found */
-            SB_Terminate (FullName);
-            Error ("No such scope: `%m%p'", FullName);
-            return 0;
-        }
-
-    } else {
-
-        /* Invalid token */
-        Error ("Identifier expected");
-        return 0;
-
-    }
-
-    /* Skip the namespace token that follows */
-    SB_AppendStr (FullName, "::");
-    NextTok ();
-
-    /* Resolve scopes. */
-    while (1) {
-
-        /* Next token must be an identifier. */
-        if (CurTok.Tok != TOK_IDENT) {
-            Error ("Identifier expected");
-            return 0;
-        }
-
-        /* Remember and skip the identifier */
-        SB_Copy (Name, &CurTok.SVal);
-        NextTok ();
-
-        /* If a namespace token follows, we search for another scope, otherwise
-        ** the name is a symbol and we're done.
-        */
-        if (CurTok.Tok != TOK_NAMESPACE) {
-            /* Symbol */
-            return Scope;
-        }
-
-        /* Pass the scope back to the caller */
-        SB_Append (FullName, Name);
-
-        /* Search for the child scope */
-        Scope = SymFindScope (Scope, Name, SYM_FIND_EXISTING);
-        if (Scope == 0) {
-            /* Scope not found */
-            Error ("No such scope: `%m%p'", FullName);
-            return 0;
-        }
-
-        /* Skip the namespace token that follows */
-        SB_AppendStr (FullName, "::");
-        NextTok ();
-    }
-}
-
-
-
-SymEntry* ParseScopedSymName (SymFindAction Action)
-/* Parse a (possibly scoped) symbol name, search for it in the symbol table
-** and return the symbol table entry.
-*/
-{
-    StrBuf    ScopeName = STATIC_STRBUF_INITIALIZER;
-    StrBuf    Ident = STATIC_STRBUF_INITIALIZER;
-    int       NoScope;
-    SymEntry* Sym;
-
-    /* Parse the scoped symbol name */
-    SymTable* Scope = ParseScopedIdent (&Ident, &ScopeName);
-
-    /* If ScopeName is empty, no scope was specified */
-    NoScope = SB_IsEmpty (&ScopeName);
-
-    /* We don't need ScopeName any longer */
-    SB_Done (&ScopeName);
-
-    /* Check if the scope is valid. Errors have already been diagnosed by
-    ** the routine, so just exit.
-    */
-    if (Scope) {
-        /* Search for the symbol and return it. If no scope was specified,
-        ** search also in the upper levels.
-        */
-        if (NoScope && (Action & SYM_ALLOC_NEW) == 0) {
-            Sym = SymFindAny (Scope, &Ident);
-        } else {
-            Sym = SymFind (Scope, &Ident, Action);
-        }
-    } else {
-        /* No scope ==> no symbol. To avoid errors in the calling routine that
-        ** may not expect NULL to be returned if Action contains SYM_ALLOC_NEW,
-        ** create a new symbol.
-        */
-        if (Action & SYM_ALLOC_NEW) { 
-            Sym = NewSymEntry (&Ident, SF_NONE);
-        } else {
-            Sym = 0;
-        }
-    }
-
-    /* Deallocate memory for ident */
-    SB_Done (&Ident);
-
-    /* Return the symbol found */
-    return Sym;
-}
-
-
-
-SymTable* ParseScopedSymTable (void)
-/* Parse a (possibly scoped) symbol table (scope) name, search for it in the
-** symbol space and return the symbol table struct.
-*/
-{
-    StrBuf    ScopeName = STATIC_STRBUF_INITIALIZER;
-    StrBuf    Name = STATIC_STRBUF_INITIALIZER;
-    int       NoScope;
-
-
-    /* Parse the scoped symbol name */
-    SymTable* Scope = ParseScopedIdent (&Name, &ScopeName);
-
-    /* If ScopeName is empty, no scope was specified */
-    NoScope = SB_IsEmpty (&ScopeName);
-
-    /* We don't need FullName any longer */
-    SB_Done (&ScopeName);
-
-    /* If we got no error, search for the child scope withint the enclosing one.
-    ** Beware: If no explicit parent scope was specified, search in all upper
-    ** levels.
-    */
-    if (Scope) {
-        /* Search for the last scope */
-        if (NoScope) {
-            Scope = SymFindAnyScope (Scope, &Name);
-        } else {
-            Scope = SymFindScope (Scope, &Name, SYM_FIND_EXISTING);
-        }
-    }
-
-    /* Free memory for name */
-    SB_Done (&Name);
-
-    /* Return the scope found */
-    return Scope;
-}
-
-
-
-SymEntry* ParseAnySymName (SymFindAction Action)
-/* Parse a cheap local symbol or a a (possibly scoped) symbol name, search
-** for it in the symbol table and return the symbol table entry.
-*/
-{
-    SymEntry* Sym;
-
-    /* Distinguish cheap locals and other symbols */
-    if (CurTok.Tok == TOK_LOCAL_IDENT) {
-        Sym = SymFindLocal (SymLast, &CurTok.SVal, Action);
-        NextTok ();
-    } else {
-        Sym = ParseScopedSymName (Action);
-    }
-
-    /* Return the symbol found */
-    return Sym;
-}
diff --git a/src/ca65/symbol.h b/src/ca65/symbol.h
deleted file mode 100644 (file)
index 2bbe87c..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 symbol.h                                  */
-/*                                                                           */
-/*                   Parse a symbol name and search for it                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SYMBOL_H
-#define SYMBOL_H
-
-
-
-/* cc65 */
-#include "symtab.h"
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-struct StrBuf;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-struct SymTable* ParseScopedIdent (struct StrBuf* Name, struct StrBuf* FullName);
-/* Parse a (possibly scoped) identifer. The scope of the name must exist and
-** is returned as function result, while the last part (the identifier) which
-** may be either a symbol or a scope depending on the context is returned in
-** Name. FullName is a string buffer that is used to store the full name of
-** the identifier including the scope. It is used internally and may be used
-** by the caller for error messages or similar.
-*/
-
-struct SymEntry* ParseScopedSymName (SymFindAction Action);
-/* Parse a (possibly scoped) symbol name, search for it in the symbol table
-** and return the symbol table entry.
-*/
-
-struct SymTable* ParseScopedSymTable (void);
-/* Parse a (possibly scoped) symbol table (scope) name, search for it in the
-** symbol space and return the symbol table struct.
-*/
-
-struct SymEntry* ParseAnySymName (SymFindAction Action);
-/* Parse a cheap local symbol or a a (possibly scoped) symbol name, search
-** for it in the symbol table and return the symbol table entry.
-*/
-
-
-
-/* End of symbol.h */
-
-#endif
diff --git a/src/ca65/symentry.c b/src/ca65/symentry.c
deleted file mode 100644 (file)
index f1459dc..0000000
+++ /dev/null
@@ -1,746 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                symentry.c                                 */
-/*                                                                           */
-/*              Symbol table entry for the ca65 macroassembler               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "addrsize.h"
-#include "symdefs.h"
-#include "xmalloc.h"
-
-/* ca65 */
-#include "error.h"
-#include "expr.h"
-#include "global.h"
-#include "scanner.h"
-#include "segment.h"
-#include "spool.h"
-#include "studyexpr.h"          /* ### */
-#include "symentry.h"
-#include "symtab.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* List of all symbol table entries */
-SymEntry* SymList = 0;
-
-/* Pointer to last defined symbol */
-SymEntry* SymLast = 0;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-SymEntry* NewSymEntry (const StrBuf* Name, unsigned Flags)
-/* Allocate a symbol table entry, initialize and return it */
-{
-    unsigned I;
-
-    /* Allocate memory */
-    SymEntry* S = xmalloc (sizeof (SymEntry));
-
-    /* Initialize the entry */
-    S->Left       = 0;
-    S->Right      = 0;
-    S->Locals     = 0;
-    S->Sym.Tab    = 0;
-    S->DefLines   = EmptyCollection;
-    S->RefLines   = EmptyCollection;
-    for (I = 0; I < sizeof (S->GuessedUse) / sizeof (S->GuessedUse[0]); ++I) {
-        S->GuessedUse[I] = 0;
-    }
-    S->HLLSym     = 0;
-    S->Flags      = Flags;
-    S->DebugSymId = ~0U;
-    S->ImportId   = ~0U;
-    S->ExportId   = ~0U;
-    S->Expr       = 0;
-    S->ExprRefs   = AUTO_COLLECTION_INITIALIZER;
-    S->ExportSize = ADDR_SIZE_DEFAULT;
-    S->AddrSize   = ADDR_SIZE_DEFAULT;
-    memset (S->ConDesPrio, 0, sizeof (S->ConDesPrio));
-    S->Name       = GetStrBufId (Name);
-
-    /* Insert it into the list of all entries */
-    S->List = SymList;
-    SymList = S;
-
-    /* Return the initialized entry */
-    return S;
-}
-
-
-
-int SymSearchTree (SymEntry* T, const StrBuf* Name, SymEntry** E)
-/* Search in the given tree for a name. If we find the symbol, the function
-** will return 0 and put the entry pointer into E. If we did not find the
-** symbol, and the tree is empty, E is set to NULL. If the tree is not empty,
-** E will be set to the last entry, and the result of the function is <0 if
-** the entry should be inserted on the left side, and >0 if it should get
-** inserted on the right side.
-*/
-{
-    /* Is there a tree? */
-    if (T == 0) {
-        *E = 0;
-        return 1;
-    }
-
-    /* We have a table, search it */
-    while (1) {
-
-        /* Get the symbol name */
-        const StrBuf* SymName = GetStrBuf (T->Name);
-
-        /* Choose next entry */
-        int Cmp = SB_Compare (Name, SymName);
-        if (Cmp < 0 && T->Left) {
-            T = T->Left;
-        } else if (Cmp > 0 && T->Right) {
-            T = T->Right;
-        } else {
-            /* Found or end of search, return the result */
-            *E = T;
-            return Cmp;
-        }
-    }
-}
-
-
-
-void SymTransferExprRefs (SymEntry* From, SymEntry* To)
-/* Transfer all expression references from one symbol to another. */
-{
-    unsigned I;
-
-    for (I = 0; I < CollCount (&From->ExprRefs); ++I) {
-
-        /* Get the expression node */
-        ExprNode* E = CollAtUnchecked (&From->ExprRefs, I);
-
-        /* Safety */
-        CHECK (E->Op == EXPR_SYMBOL && E->V.Sym == From);
-
-        /* Replace the symbol reference */
-        E->V.Sym = To;
-
-        /* Add the expression reference */
-        SymAddExprRef (To, E);
-    }
-
-    /* Remove all symbol references from the old symbol */
-    CollDeleteAll (&From->ExprRefs);
-}
-
-
-
-static void SymReplaceExprRefs (SymEntry* S)
-/* Replace the references to this symbol by a copy of the symbol expression */
-{
-    unsigned I;
-    long     Val;
-
-    /* Check if the expression is const and get its value */
-    int IsConst = IsConstExpr (S->Expr, &Val);
-    CHECK (IsConst);
-
-    /* Loop over all references */
-    for (I = 0; I < CollCount (&S->ExprRefs); ++I) {
-
-        /* Get the expression node */
-        ExprNode* E = CollAtUnchecked (&S->ExprRefs, I);
-
-        /* Safety */
-        CHECK (E->Op == EXPR_SYMBOL && E->V.Sym == S);
-
-        /* We cannot touch the root node, since there are pointers to it.
-        ** Replace it by a literal node.
-        */
-        E->Op = EXPR_LITERAL;
-        E->V.IVal = Val;
-    }
-
-    /* Remove all symbol references from the symbol */
-    CollDeleteAll (&S->ExprRefs);
-}
-
-
-
-void SymDef (SymEntry* S, ExprNode* Expr, unsigned char AddrSize, unsigned Flags)
-/* Define a new symbol */
-{
-    if (S->Flags & SF_IMPORT) {
-        /* Defined symbol is marked as imported external symbol */
-        Error ("Symbol `%m%p' is already an import", GetSymName (S));
-        return;
-    }
-    if ((Flags & SF_VAR) != 0 && (S->Flags & (SF_EXPORT | SF_GLOBAL))) {
-        /* Variable symbols cannot be exports or globals */
-        Error ("Var symbol `%m%p' cannot be an export or global symbol", GetSymName (S));
-        return;
-    }
-    if (S->Flags & SF_DEFINED) {
-        /* Multiple definition. In case of a variable, this is legal. */
-        if ((S->Flags & SF_VAR) == 0) {
-            Error ("Symbol `%m%p' is already defined", GetSymName (S));
-            S->Flags |= SF_MULTDEF;
-            return;
-        } else {
-            /* Redefinition must also be a variable symbol */
-            if ((Flags & SF_VAR) == 0) {
-                Error ("Symbol `%m%p' is already different kind", GetSymName (S));
-                return;
-            }
-            /* Delete the current symbol expression, since it will get
-            ** replaced
-            */
-            FreeExpr (S->Expr);
-            S->Expr = 0;
-        }
-    }
-
-    /* Map a default address size to a real value */
-    if (AddrSize == ADDR_SIZE_DEFAULT) {
-        /* ### Must go! Delay address size calculation until end of assembly! */
-        ExprDesc ED;
-        ED_Init (&ED);
-        StudyExpr (Expr, &ED);
-        AddrSize = ED.AddrSize;
-        ED_Done (&ED);
-    }
-
-    /* Set the symbol value */
-    S->Expr = Expr;
-
-    /* In case of a variable symbol, walk over all expressions containing
-    ** this symbol and replace the (sub-)expression by the literal value of
-    ** the tree. Be sure to replace the expression node in place, since there
-    ** may be pointers to it.
-    */
-    if (Flags & SF_VAR) {
-        SymReplaceExprRefs (S);
-    }
-
-    /* If the symbol is marked as global, export it. Address size is checked
-    ** below.
-    */
-    if (S->Flags & SF_GLOBAL) {
-        S->Flags = (S->Flags & ~SF_GLOBAL) | SF_EXPORT;
-        ReleaseFullLineInfo (&S->DefLines);
-    }
-
-    /* Mark the symbol as defined and use the given address size */
-    S->Flags |= (SF_DEFINED | Flags);
-    S->AddrSize = AddrSize;
-
-    /* Remember the line info of the symbol definition */
-    GetFullLineInfo (&S->DefLines);
-
-    /* If the symbol is exported, check the address sizes */
-    if (S->Flags & SF_EXPORT) {
-        if (S->ExportSize == ADDR_SIZE_DEFAULT) {
-            /* Use the real size of the symbol */
-            S->ExportSize = S->AddrSize;
-        } else if (S->AddrSize > S->ExportSize) {
-            /* We're exporting a symbol smaller than it actually is */
-            Warning (1, "Symbol `%m%p' is %s but exported %s",
-                     GetSymName (S), AddrSizeToStr (S->AddrSize),
-                     AddrSizeToStr (S->ExportSize));
-        }
-    }
-
-    /* If this is not a local symbol, remember it as the last global one */
-    if ((S->Flags & SF_LOCAL) == 0) {
-        SymLast = S;
-    }
-}
-
-
-
-void SymRef (SymEntry* S)
-/* Mark the given symbol as referenced */
-{
-    /* Mark the symbol as referenced */
-    S->Flags |= SF_REFERENCED;
-
-    /* Remember the current location */
-    CollAppend (&S->RefLines, GetAsmLineInfo ());
-}
-
-
-
-void SymImport (SymEntry* S, unsigned char AddrSize, unsigned Flags)
-/* Mark the given symbol as an imported symbol */
-{
-    if (S->Flags & SF_DEFINED) {
-        Error ("Symbol `%m%p' is already defined", GetSymName (S));
-        S->Flags |= SF_MULTDEF;
-        return;
-    }
-    if (S->Flags & SF_EXPORT) {
-        /* The symbol is already marked as exported symbol */
-        Error ("Cannot import exported symbol `%m%p'", GetSymName (S));
-        return;
-    }
-
-    /* If no address size is given, use the address size of the enclosing
-    ** segment.
-    */
-    if (AddrSize == ADDR_SIZE_DEFAULT) {
-        AddrSize = GetCurrentSegAddrSize ();
-    }
-
-    /* If the symbol is marked as import or global, check the address size,
-    ** then do silently remove the global flag.
-    */
-    if (S->Flags & SF_IMPORT) {
-        if ((Flags & SF_FORCED) != (S->Flags & SF_FORCED)) {
-            Error ("Redeclaration mismatch for symbol `%m%p'", GetSymName (S));
-        }
-        if (AddrSize != S->AddrSize) {
-            Error ("Address size mismatch for symbol `%m%p'", GetSymName (S));
-        }
-    }
-    if (S->Flags & SF_GLOBAL) {
-        S->Flags &= ~SF_GLOBAL;
-        if (AddrSize != S->AddrSize) {
-            Error ("Address size mismatch for symbol `%m%p'", GetSymName (S));
-        }
-    }
-
-    /* Set the symbol data */
-    S->Flags |= (SF_IMPORT | Flags);
-    S->AddrSize = AddrSize;
-
-    /* Mark the position of the import as the position of the definition.
-    ** Please note: In case of multiple .global or .import statements, the line
-    ** infos add up.
-    */
-    GetFullLineInfo (&S->DefLines);
-}
-
-
-
-void SymExport (SymEntry* S, unsigned char AddrSize, unsigned Flags)
-/* Mark the given symbol as an exported symbol */
-{
-    /* Check if it's ok to export the symbol */
-    if (S->Flags & SF_IMPORT) {
-        /* The symbol is already marked as imported external symbol */
-        Error ("Symbol `%m%p' is already an import", GetSymName (S));
-        return;
-    }
-    if (S->Flags & SF_VAR) {
-        /* Variable symbols cannot be exported */
-        Error ("Var symbol `%m%p' cannot be exported", GetSymName (S));
-        return;
-    }
-
-    /* If the symbol was marked as global before, remove the global flag and
-    ** proceed, but check the address size.
-    */
-    if (S->Flags & SF_GLOBAL) {
-        if (AddrSize != S->ExportSize) {
-            Error ("Address size mismatch for symbol `%m%p'", GetSymName (S));
-        }
-        S->Flags &= ~SF_GLOBAL;
-
-        /* .GLOBAL remembers line infos in case an .IMPORT follows. We have
-        ** to remove these here.
-        */
-        ReleaseFullLineInfo (&S->DefLines);
-    }
-
-    /* If the symbol was already marked as an export, but wasn't defined
-    ** before, the address sizes in both definitions must match.
-    */
-    if ((S->Flags & (SF_EXPORT|SF_DEFINED)) == SF_EXPORT) {
-        if (S->ExportSize != AddrSize) {
-            Error ("Address size mismatch for symbol `%m%p'", GetSymName (S));
-        }
-    }
-    S->ExportSize = AddrSize;
-
-    /* If the symbol is already defined, check symbol size against the
-    ** exported size.
-    */
-    if (S->Flags & SF_DEFINED) {
-        if (S->ExportSize == ADDR_SIZE_DEFAULT) {
-            /* No export size given, use the real size of the symbol */
-            S->ExportSize = S->AddrSize;
-        } else if (S->AddrSize > S->ExportSize) {
-            /* We're exporting a symbol smaller than it actually is */
-            Warning (1, "Symbol `%m%p' is %s but exported %s",
-                     GetSymName (S), AddrSizeToStr (S->AddrSize),
-                     AddrSizeToStr (S->ExportSize));
-        }
-    }
-
-    /* Set the symbol data */
-    S->Flags |= (SF_EXPORT | SF_REFERENCED | Flags);
-
-    /* Remember line info for this reference */
-    CollAppend (&S->RefLines, GetAsmLineInfo ());
-}
-
-
-
-void SymGlobal (SymEntry* S, unsigned char AddrSize, unsigned Flags)
-/* Mark the given symbol as a global symbol, that is, as a symbol that is
-** either imported or exported.
-*/
-{
-    if (S->Flags & SF_VAR) {
-        /* Variable symbols cannot be exported or imported */
-        Error ("Var symbol `%m%p' cannot be made global", GetSymName (S));
-        return;
-    }
-
-    /* If the symbol is already marked as import, the address size must match.
-    ** Apart from that, ignore the global declaration.
-    */
-    if (S->Flags & SF_IMPORT) {
-        if (AddrSize == ADDR_SIZE_DEFAULT) {
-            /* Use the size of the current segment */
-            AddrSize = GetCurrentSegAddrSize ();
-        }
-        if (AddrSize != S->AddrSize) {
-            Error ("Address size mismatch for symbol `%m%p'", GetSymName (S));
-        }
-        return;
-    }
-
-    /* If the symbol is already an export: If it is not defined, the address
-    ** sizes must match.
-    */
-    if (S->Flags & SF_EXPORT) {
-        if ((S->Flags & SF_DEFINED) == 0) {
-            /* Symbol is undefined */
-            if (AddrSize != S->ExportSize) {
-                Error ("Address size mismatch for symbol `%m%p'", GetSymName (S));
-            }
-        } else if (AddrSize != ADDR_SIZE_DEFAULT) {
-            /* Symbol is defined and address size given */
-            if (AddrSize != S->ExportSize) {
-                Error ("Address size mismatch for symbol `%m%p'", GetSymName (S));
-            }
-        }
-        return;
-    }
-
-    /* If the symbol is already marked as global, the address size must match.
-    ** Use the ExportSize here, since it contains the actual address size
-    ** passed to this function.
-    */
-    if (S->Flags & SF_GLOBAL) {
-        if (AddrSize != S->ExportSize) {
-            Error ("Address size mismatch for symbol `%m%p'", GetSymName (S));
-        }
-        return;
-    }
-
-    /* If we come here, the symbol was neither declared as export, import or
-    ** global before. Check if it is already defined, in which case it will
-    ** become an export. If it is not defined, mark it as global and remember
-    ** the given address sizes.
-    */
-    if (S->Flags & SF_DEFINED) {
-        /* The symbol is defined, export it */
-        S->ExportSize = AddrSize;
-        if (S->ExportSize == ADDR_SIZE_DEFAULT) {
-            /* No export size given, use the real size of the symbol */
-            S->ExportSize = S->AddrSize;
-        } else if (S->AddrSize > S->ExportSize) {
-            /* We're exporting a symbol smaller than it actually is */
-            Warning (1, "Symbol `%m%p' is %s but exported %s",
-                     GetSymName (S), AddrSizeToStr (S->AddrSize),
-                     AddrSizeToStr (S->ExportSize));
-        }
-        S->Flags |= (SF_EXPORT | Flags);
-    } else {
-        /* Since we don't know if the symbol will get exported or imported,
-        ** remember two different address sizes: One for an import in AddrSize,
-        ** and the other one for an export in ExportSize.
-        */
-        S->AddrSize = AddrSize;
-        if (S->AddrSize == ADDR_SIZE_DEFAULT) {
-            /* Use the size of the current segment */
-            S->AddrSize = GetCurrentSegAddrSize ();
-        }
-        S->ExportSize = AddrSize;
-        S->Flags |= (SF_GLOBAL | Flags);
-
-        /* Remember the current location as location of definition in case
-        ** an .IMPORT follows later.
-        */
-        GetFullLineInfo (&S->DefLines);
-    }
-}
-
-
-
-void SymConDes (SymEntry* S, unsigned char AddrSize, unsigned Type, unsigned Prio)
-/* Mark the given symbol as a module constructor/destructor. This will also
-** mark the symbol as an export. Initializers may never be zero page symbols.
-*/
-{
-    /* Check the parameters */
-#if (CD_TYPE_MIN != 0)
-    CHECK (Type >= CD_TYPE_MIN && Type <= CD_TYPE_MAX);
-#else
-    CHECK (Type <= CD_TYPE_MAX);
-#endif
-    CHECK (Prio >= CD_PRIO_MIN && Prio <= CD_PRIO_MAX);
-
-    /* Check for errors */
-    if (S->Flags & SF_IMPORT) {
-        /* The symbol is already marked as imported external symbol */
-        Error ("Symbol `%m%p' is already an import", GetSymName (S));
-        return;
-    }
-    if (S->Flags & SF_VAR) {
-        /* Variable symbols cannot be exported or imported */
-        Error ("Var symbol `%m%p' cannot be exported", GetSymName (S));
-        return;
-    }
-
-    /* If the symbol was already marked as an export or global, check if
-    ** this was done specifiying the same address size. In case of a global
-    ** declaration, silently remove the global flag.
-    */
-    if (S->Flags & (SF_EXPORT | SF_GLOBAL)) {
-        if (S->ExportSize != AddrSize) {
-            Error ("Address size mismatch for symbol `%m%p'", GetSymName (S));
-        }
-        S->Flags &= ~SF_GLOBAL;
-    }
-    S->ExportSize = AddrSize;
-
-    /* If the symbol is already defined, check symbol size against the
-    ** exported size.
-    */
-    if (S->Flags & SF_DEFINED) {
-        if (S->ExportSize == ADDR_SIZE_DEFAULT) {
-            /* Use the real size of the symbol */
-            S->ExportSize = S->AddrSize;
-        } else if (S->AddrSize != S->ExportSize) {
-            Error ("Address size mismatch for symbol `%m%p'", GetSymName (S));
-        }
-    }
-
-    /* If the symbol was already declared as a condes, check if the new
-    ** priority value is the same as the old one.
-    */
-    if (S->ConDesPrio[Type] != CD_PRIO_NONE) {
-        if (S->ConDesPrio[Type] != Prio) {
-            Error ("Redeclaration mismatch for symbol `%m%p'", GetSymName (S));
-        }
-    }
-    S->ConDesPrio[Type] = Prio;
-
-    /* Set the symbol data */
-    S->Flags |= (SF_EXPORT | SF_REFERENCED);
-
-    /* In case we have no line info for the definition, record it now */
-    if (CollCount (&S->DefLines) == 0) {
-        GetFullLineInfo (&S->DefLines);
-    }
-}
-
-
-
-void SymGuessedAddrSize (SymEntry* Sym, unsigned char AddrSize)
-/* Mark the address size of the given symbol as guessed. The address size
-** passed as argument is the one NOT used, because the actual address size
-** wasn't known. Example: Zero page addressing was not used because symbol
-** is undefined, and absolute addressing was available.
-*/
-{
-    /* We must have a valid address size passed */
-    PRECONDITION (AddrSize != ADDR_SIZE_DEFAULT);
-
-    /* We do not support all address sizes currently */
-    if (AddrSize > sizeof (Sym->GuessedUse) / sizeof (Sym->GuessedUse[0])) {
-        return;
-    }
-
-    /* We can only remember one such occurance */
-    if (Sym->GuessedUse[AddrSize-1]) {
-        return;
-    }
-
-    /* Ok, remember the file position */
-    Sym->GuessedUse[AddrSize-1] = xdup (&CurTok.Pos, sizeof (CurTok.Pos));
-}
-
-
-
-void SymExportFromGlobal (SymEntry* S)
-/* Called at the end of assembly. Converts a global symbol that is defined
-** into an export.
-*/
-{
-    /* Remove the global flag and make the symbol an export */
-    S->Flags &= ~SF_GLOBAL;
-    S->Flags |= SF_EXPORT;
-}
-
-
-
-void SymImportFromGlobal (SymEntry* S)
-/* Called at the end of assembly. Converts a global symbol that is undefined
-** into an import.
-*/
-{
-    /* Remove the global flag and make it an import */
-    S->Flags &= ~SF_GLOBAL;
-    S->Flags |= SF_IMPORT;
-}
-
-
-
-int SymIsConst (const SymEntry* S, long* Val)
-/* Return true if the given symbol has a constant value. If Val is not NULL
-** and the symbol has a constant value, store it's value there.
-*/
-{
-    /* Check for constness */
-    return (SymHasExpr (S) && IsConstExpr (S->Expr, Val));
-}
-
-
-
-SymTable* GetSymParentScope (SymEntry* S)
-/* Get the parent scope of the symbol (not the one it is defined in). Return
-** NULL if the symbol is a cheap local, or defined on global level.
-*/
-{
-    if ((S->Flags & SF_LOCAL) != 0) {
-        /* This is a cheap local symbol */
-        return 0;
-    } else if (S->Sym.Tab == 0) {
-        /* Symbol not in a table. This may happen if there have been errors
-        ** before. Return NULL in this case to avoid further errors.
-        */
-        return 0;
-    } else {
-        /* This is a global symbol */
-        return S->Sym.Tab->Parent;
-    }
-}
-
-
-
-struct ExprNode* GetSymExpr (SymEntry* S)
-/* Get the expression for a non-const symbol */
-{
-    PRECONDITION (S != 0 && SymHasExpr (S));
-    return S->Expr;
-}
-
-
-
-const struct ExprNode* SymResolve (const SymEntry* S)
-/* Helper function for DumpExpr. Resolves a symbol into an expression or return
-** NULL. Do not call in other contexts!
-*/
-{
-    return SymHasExpr (S)? S->Expr : 0;
-}
-
-
-
-long GetSymVal (SymEntry* S)
-/* Return the value of a symbol assuming it's constant. FAIL will be called
-** in case the symbol is undefined or not constant.
-*/
-{
-    long Val;
-    CHECK (S != 0 && SymHasExpr (S) && IsConstExpr (GetSymExpr (S), &Val));
-    return Val;
-}
-
-
-
-unsigned GetSymImportId (const SymEntry* S)
-/* Return the import id for the given symbol */
-{
-    PRECONDITION (S != 0 && (S->Flags & SF_IMPORT) && S->ImportId != ~0U);
-    return S->ImportId;
-}
-
-
-
-unsigned GetSymExportId (const SymEntry* S)
-/* Return the export id for the given symbol */
-{
-    PRECONDITION (S != 0 && (S->Flags & SF_EXPORT) && S->ExportId != ~0U);
-    return S->ExportId;
-}
-
-
-
-unsigned GetSymInfoFlags (const SymEntry* S, long* ConstVal)
-/* Return a set of flags used when writing symbol information into a file.
-** If the SYM_CONST bit is set, ConstVal will contain the constant value
-** of the symbol. The result does not include the condes count.
-** See common/symdefs.h for more information.
-*/
-{
-    /* Setup info flags */
-    unsigned Flags = 0;
-    Flags |= SymIsConst (S, ConstVal)? SYM_CONST : SYM_EXPR;
-    Flags |= (S->Flags & SF_LABEL)? SYM_LABEL : SYM_EQUATE;
-    Flags |= (S->Flags & SF_LOCAL)? SYM_CHEAP_LOCAL : SYM_STD;
-    if (S->Flags & SF_EXPORT) {
-        Flags |= SYM_EXPORT;
-    }
-    if (S->Flags & SF_IMPORT) {
-        Flags |= SYM_IMPORT;
-    }
-
-    /* Return the result */
-    return Flags;
-}
diff --git a/src/ca65/symentry.h b/src/ca65/symentry.h
deleted file mode 100644 (file)
index 5ac8f9c..0000000
+++ /dev/null
@@ -1,361 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                symentry.h                                 */
-/*                                                                           */
-/*          Symbol table entry forward for the ca65 macroassembler           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SYMENTRY_H
-#define SYMENTRY_H
-
-
-
-/* common */
-#include "cddefs.h"
-#include "coll.h"
-#include "filepos.h"
-#include "inline.h"
-#include "strbuf.h"
-
-/* ca65 */
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Forwards */
-struct HLLDbgSym;
-
-/* Bits for the Flags value in SymEntry */
-#define SF_NONE         0x0000          /* Empty flag set */
-#define SF_USER         0x0001          /* User bit */
-#define SF_UNUSED       0x0002          /* Unused entry */
-#define SF_EXPORT       0x0004          /* Export this symbol */
-#define SF_IMPORT       0x0008          /* Import this symbol */
-#define SF_GLOBAL       0x0010          /* Global symbol */
-#define SF_LOCAL        0x0020          /* Cheap local symbol */
-#define SF_LABEL        0x0040          /* Used as a label */
-#define SF_VAR          0x0080          /* Variable symbol */
-#define SF_FORCED       0x0100          /* Forced import, SF_IMPORT also set */
-#define SF_FIXED        0x0200          /* May not be trampoline */
-#define SF_MULTDEF      0x1000          /* Multiply defined symbol */
-#define SF_DEFINED      0x2000          /* Defined */
-#define SF_REFERENCED   0x4000          /* Referenced */
-
-/* Combined values */
-#define SF_REFIMP       (SF_REFERENCED|SF_IMPORT)       /* A ref'd import */
-
-/* Structure of a symbol table entry */
-typedef struct SymEntry SymEntry;
-struct SymEntry {
-    SymEntry*           Left;           /* Lexically smaller entry */
-    SymEntry*           Right;          /* Lexically larger entry */
-    SymEntry*           List;           /* List of all entries */
-    SymEntry*           Locals;         /* Root of subtree for local symbols */
-    union {
-        struct SymTable*    Tab;        /* Table this symbol is in */
-        struct SymEntry*    Entry;      /* Parent for cheap locals */
-    } Sym;
-    Collection          DefLines;       /* Line infos for definition */
-    Collection          RefLines;       /* Line infos for references */
-    FilePos*            GuessedUse[1];  /* File position where symbol
-                                        ** address size was guessed, and the
-                                        ** smallest possible addressing was NOT
-                                        ** used. Currently only for zero page
-                                        ** addressing
-                                        */
-    struct HLLDbgSym*   HLLSym;         /* Symbol from high level language */
-    unsigned            Flags;          /* Symbol flags */
-    unsigned            DebugSymId;     /* Debug symbol id */
-    unsigned            ImportId;       /* Id of import if this is one */
-    unsigned            ExportId;       /* Id of export if this is one */
-    struct ExprNode*    Expr;           /* Symbol expression */
-    Collection          ExprRefs;       /* Expressions using this symbol */
-    unsigned char       ExportSize;     /* Export address size */
-    unsigned char       AddrSize;       /* Address size of label */
-    unsigned char       ConDesPrio[CD_TYPE_COUNT];      /* ConDes priorities... */
-                                        /* ...actually value+1 (used as flag) */
-    unsigned            Name;           /* Name index in global string pool */
-};
-
-/* List of all symbol table entries */
-extern SymEntry* SymList;
-
-/* Pointer to last defined symbol */
-extern SymEntry* SymLast;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-SymEntry* NewSymEntry (const StrBuf* Name, unsigned Flags);
-/* Allocate a symbol table entry, initialize and return it */
-
-int SymSearchTree (SymEntry* T, const StrBuf* Name, SymEntry** E);
-/* Search in the given tree for a name. If we find the symbol, the function
-** will return 0 and put the entry pointer into E. If we did not find the
-** symbol, and the tree is empty, E is set to NULL. If the tree is not empty,
-** E will be set to the last entry, and the result of the function is <0 if
-** the entry should be inserted on the left side, and >0 if it should get
-** inserted on the right side.
-*/
-
-#if defined(HAVE_INLINE)
-INLINE void SymAddExprRef (SymEntry* Sym, struct ExprNode* Expr)
-/* Add an expression reference to this symbol */
-{
-    CollAppend (&Sym->ExprRefs, Expr);
-}
-#else
-#define SymAddExprRef(Sym,Expr)     CollAppend (&(Sym)->ExprRefs, Expr)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void SymDelExprRef (SymEntry* Sym, struct ExprNode* Expr)
-/* Delete an expression reference to this symbol */
-{
-    CollDeleteItem (&Sym->ExprRefs, Expr);
-}
-#else
-#define SymDelExprRef(Sym,Expr)     CollDeleteItem (&(Sym)->ExprRefs, Expr)
-#endif
-
-void SymTransferExprRefs (SymEntry* From, SymEntry* To);
-/* Transfer all expression references from one symbol to another. */
-
-void SymDef (SymEntry* Sym, ExprNode* Expr, unsigned char AddrSize, unsigned Flags);
-/* Mark a symbol as defined */
-
-void SymRef (SymEntry* Sym);
-/* Mark the given symbol as referenced */
-
-void SymImport (SymEntry* Sym, unsigned char AddrSize, unsigned Flags);
-/* Mark the given symbol as an imported symbol */
-
-void SymExport (SymEntry* Sym, unsigned char AddrSize, unsigned Flags);
-/* Mark the given symbol as an exported symbol */
-
-void SymGlobal (SymEntry* Sym, unsigned char AddrSize, unsigned Flags);
-/* Mark the given symbol as a global symbol, that is, as a symbol that is
-** either imported or exported.
-*/
-
-void SymConDes (SymEntry* Sym, unsigned char AddrSize, unsigned Type, unsigned Prio);
-/* Mark the given symbol as a module constructor/destructor. This will also
-** mark the symbol as an export. Initializers may never be zero page symbols.
-*/
-
-void SymGuessedAddrSize (SymEntry* Sym, unsigned char AddrSize);
-/* Mark the address size of the given symbol as guessed. The address size
-** passed as argument is the one NOT used, because the actual address size
-** wasn't known. Example: Zero page addressing was not used because symbol
-** is undefined, and absolute addressing was available.
-*/
-
-void SymExportFromGlobal (SymEntry* S);
-/* Called at the end of assembly. Converts a global symbol that is defined
-** into an export.
-*/
-
-void SymImportFromGlobal (SymEntry* S);
-/* Called at the end of assembly. Converts a global symbol that is undefined
-** into an import.
-*/
-
-#if defined(HAVE_INLINE)
-INLINE int SymIsDef (const SymEntry* S)
-/* Return true if the given symbol is already defined */
-{
-    return (S->Flags & SF_DEFINED) != 0;
-}
-#else
-#  define SymIsDef(S)   (((S)->Flags & SF_DEFINED) != 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int SymIsRef (const SymEntry* S)
-/* Return true if the given symbol has been referenced */
-{
-    return (S->Flags & SF_REFERENCED) != 0;
-}
-#else
-#  define SymIsRef(S)   (((S)->Flags & SF_REFERENCED) != 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int SymIsImport (const SymEntry* S)
-/* Return true if the given symbol is marked as import */
-{
-    /* Check the import flag */
-    return (S->Flags & SF_IMPORT) != 0;
-}
-#else
-#  define SymIsImport(S)  (((S)->Flags & SF_IMPORT) != 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int SymIsExport (const SymEntry* S)
-/* Return true if the given symbol is marked as export */
-{
-    /* Check the export flag */
-    return (S->Flags & SF_EXPORT) != 0;
-}
-#else
-#  define SymIsExport(S)  (((S)->Flags & SF_EXPORT) != 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int SymIsVar (const SymEntry* S)
-/* Return true if the given symbol is marked as variable */
-{
-    /* Check the variable flag */
-    return (S->Flags & SF_VAR) != 0;
-}
-#else
-#  define SymIsVar(S)   (((S)->Flags & SF_VAR) != 0)
-#endif
-
-int SymIsConst (const SymEntry* Sym, long* Val);
-/* Return true if the given symbol has a constant value. If Val is not NULL
-** and the symbol has a constant value, store it's value there.
-*/
-
-#if defined(HAVE_INLINE)
-INLINE int SymHasExpr (const SymEntry* S)
-/* Return true if the given symbol has an associated expression */
-{
-    /* Check the expression */
-    return ((S->Flags & (SF_DEFINED|SF_IMPORT)) == SF_DEFINED);
-}
-#else
-#  define SymHasExpr(S)   (((S)->Flags & (SF_DEFINED|SF_IMPORT)) == SF_DEFINED)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void SymMarkUser (SymEntry* S)
-/* Set a user mark on the specified symbol */
-{
-    /* Set the bit */
-    S->Flags |= SF_USER;
-}
-#else
-#  define SymMarkUser(S)   ((S)->Flags |= SF_USER)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void SymUnmarkUser (SymEntry* S)
-/* Remove a user mark from the specified symbol */
-{
-    /* Reset the bit */
-    S->Flags &= ~SF_USER;
-}
-#else
-#  define SymUnmarkUser(S)   ((S)->Flags &= ~SF_USER)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int SymHasUserMark (SymEntry* S)
-/* Return the state of the user mark for the specified symbol */
-{
-    /* Check the bit */
-    return (S->Flags & SF_USER) != 0;
-}
-#else
-#  define SymHasUserMark(S) (((S)->Flags & SF_USER) != 0)
-#endif
-
-struct SymTable* GetSymParentScope (SymEntry* S);
-/* Get the parent scope of the symbol (not the one it is defined in). Return
-** NULL if the symbol is a cheap local, or defined on global level.
-*/
-
-struct ExprNode* GetSymExpr (SymEntry* Sym);
-/* Get the expression for a non-const symbol */
-
-const struct ExprNode* SymResolve (const SymEntry* Sym);
-/* Helper function for DumpExpr. Resolves a symbol into an expression or return
-** NULL. Do not call in other contexts!
-*/
-
-#if defined(HAVE_INLINE)
-INLINE const StrBuf* GetSymName (const SymEntry* S)
-/* Return the name of the symbol */
-{
-    return GetStrBuf (S->Name);
-}
-#else
-#  define GetSymName(S)   GetStrBuf ((S)->Name)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned char GetSymAddrSize (const SymEntry* S)
-/* Return the address size of the symbol. Beware: This function will just
-** return the AddrSize member, it will not look at the expression!
-*/
-{
-    return S->AddrSize;
-}
-#else
-#  define GetSymAddrSize(S)   ((S)->AddrSize)
-#endif
-
-long GetSymVal (SymEntry* Sym);
-/* Return the value of a symbol assuming it's constant. FAIL will be called
-** in case the symbol is undefined or not constant.
-*/
-
-unsigned GetSymImportId (const SymEntry* Sym);
-/* Return the import id for the given symbol */
-
-unsigned GetSymExportId (const SymEntry* Sym);
-/* Return the export id for the given symbol */
-
-unsigned GetSymInfoFlags (const SymEntry* Sym, long* ConstVal);
-/* Return a set of flags used when writing symbol information into a file.
-** If the SYM_CONST bit is set, ConstVal will contain the constant value
-** of the symbol. The result does not include the condes count.
-** See common/symdefs.h for more information.
-*/
-
-
-
-/* End of symentry.h */
-
-#endif
diff --git a/src/ca65/symtab.c b/src/ca65/symtab.c
deleted file mode 100644 (file)
index 35d5a80..0000000
+++ /dev/null
@@ -1,1023 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 symtab.c                                  */
-/*                                                                           */
-/*                 Symbol table for the ca65 macroassembler                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2014, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "addrsize.h"
-#include "check.h"
-#include "hashfunc.h"
-#include "mmodel.h"
-#include "scopedefs.h"
-#include "symdefs.h"
-#include "xmalloc.h"
-
-/* ca65 */
-#include "dbginfo.h"
-#include "error.h"
-#include "expr.h"
-#include "global.h"
-#include "objfile.h"
-#include "scanner.h"
-#include "segment.h"
-#include "sizeof.h"
-#include "span.h"
-#include "spool.h"
-#include "studyexpr.h"
-#include "symtab.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Combined symbol entry flags used within this module */
-#define SF_UNDEFMASK    (SF_REFERENCED | SF_DEFINED | SF_IMPORT)
-#define SF_UNDEFVAL     (SF_REFERENCED)
-
-/* Symbol tables */
-SymTable*           CurrentScope = 0;   /* Pointer to current symbol table */
-SymTable*           RootScope    = 0;   /* Root symbol table */
-static SymTable*    LastScope    = 0;   /* Pointer to last scope in list */
-static unsigned     ScopeCount   = 0;   /* Number of scopes */
-
-/* Symbol table variables */
-static unsigned     ImportCount = 0;    /* Counter for import symbols */
-static unsigned     ExportCount = 0;    /* Counter for export symbols */
-
-
-
-/*****************************************************************************/
-/*                         Internally used functions                         */
-/*****************************************************************************/
-
-
-
-static int IsDbgSym (const SymEntry* S)
-/* Return true if this is a debug symbol */
-{
-    if ((S->Flags & (SF_DEFINED | SF_UNUSED)) == SF_DEFINED) {
-        /* Defined symbols are debug symbols if they aren't sizes */
-        return !IsSizeOfSymbol (S);
-    } else {
-        /* Others are debug symbols if they're referenced imports */
-        return ((S->Flags & SF_REFIMP) == SF_REFIMP);
-    }
-}
-
-
-
-static unsigned ScopeTableSize (unsigned Level)
-/* Get the size of a table for the given lexical level */
-{
-    switch (Level) {
-        case 0:         return 213;
-        case 1:         return  53;
-        default:        return  29;
-    }
-}
-
-
-
-static SymTable* NewSymTable (SymTable* Parent, const StrBuf* Name)
-/* Allocate a symbol table on the heap and return it */
-{
-    /* Determine the lexical level and the number of table slots */
-    unsigned Level = Parent? Parent->Level + 1 : 0;
-    unsigned Slots = ScopeTableSize (Level);
-
-    /* Allocate memory */
-    SymTable* S = xmalloc (sizeof (SymTable) + (Slots-1) * sizeof (SymEntry*));
-
-    /* Set variables and clear hash table entries */
-    S->Next         = 0;
-    S->Left         = 0;
-    S->Right        = 0;
-    S->Childs       = 0;
-    S->Label        = 0;
-    S->Spans        = AUTO_COLLECTION_INITIALIZER;
-    S->Id           = ScopeCount++;
-    S->Flags        = ST_NONE;
-    S->AddrSize     = ADDR_SIZE_DEFAULT;
-    S->Type         = SCOPE_UNDEF;
-    S->Level        = Level;
-    S->TableSlots   = Slots;
-    S->TableEntries = 0;
-    S->Parent       = Parent;
-    S->Name         = GetStrBufId (Name);
-    while (Slots--) {
-        S->Table[Slots] = 0;
-    }
-
-    /* Insert the symbol table into the list of all symbol tables */
-    if (RootScope == 0) {
-        RootScope = S;
-    } else {
-        LastScope->Next = S;
-    }
-    LastScope = S;
-
-    /* Insert the symbol table into the child tree of the parent */
-    if (Parent) {
-        SymTable* T = Parent->Childs;
-        if (T == 0) {
-            /* First entry */
-            Parent->Childs = S;
-        } else {
-            while (1) {
-                /* Choose next entry */
-                int Cmp = SB_Compare (Name, GetStrBuf (T->Name));
-                if (Cmp < 0) {
-                    if (T->Left) {
-                        T = T->Left;
-                    } else {
-                        T->Left = S;
-                        break;
-                    }
-                } else if (Cmp > 0) {
-                    if (T->Right) {
-                        T = T->Right;
-                    } else {
-                        T->Right = S;
-                        break;
-                    }
-                } else {
-                    /* Duplicate scope name */
-                    Internal ("Duplicate scope name: `%m%p'", Name);
-                }
-            }
-        }
-    }
-
-    /* Return the prepared struct */
-    return S;
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void SymEnterLevel (const StrBuf* ScopeName, unsigned char Type,
-                    unsigned char AddrSize, SymEntry* ScopeLabel)
-/* Enter a new lexical level */
-{
-    /* Map a default address size to something real */
-    if (AddrSize == ADDR_SIZE_DEFAULT) {
-        /* Use the segment address size */
-        AddrSize = GetCurrentSegAddrSize ();
-    }
-
-    /* If we have a current scope, search for the given name and create a
-    ** new one if it doesn't exist. If this is the root scope, just create it.
-    */
-    if (CurrentScope) {
-
-        /* Search for the scope, create a new one */
-        CurrentScope = SymFindScope (CurrentScope, ScopeName, SYM_ALLOC_NEW);
-
-        /* Check if the scope has been defined before */
-        if (CurrentScope->Flags & ST_DEFINED) {
-            Error ("Duplicate scope `%m%p'", ScopeName);
-        }
-
-    } else {
-        CurrentScope = RootScope = NewSymTable (0, ScopeName);
-    }
-
-    /* Mark the scope as defined and set type, address size and owner symbol */
-    CurrentScope->Flags    |= ST_DEFINED;
-    CurrentScope->AddrSize = AddrSize;
-    CurrentScope->Type     = Type;
-    CurrentScope->Label    = ScopeLabel;
-
-    /* If this is a scope that allows to emit data into segments, add spans
-    ** for all currently existing segments. Doing this for just a few scope
-    ** types is not really necessary but an optimization, because it does not
-    ** allocate memory for useless data (unhandled types here don't occupy
-    ** space in any segment).
-    */
-    if (CurrentScope->Type <= SCOPE_HAS_DATA) {
-        OpenSpanList (&CurrentScope->Spans);
-    }
-}
-
-
-
-void SymLeaveLevel (void)
-/* Leave the current lexical level */
-{
-    /* If this is a scope that allows to emit data into segments, close the
-    ** open the spans.
-    */
-    if (CurrentScope->Type <= SCOPE_HAS_DATA) {
-        CloseSpanList (&CurrentScope->Spans);
-    }
-
-    /* If we have spans, the first one is the segment that was active, when the
-    ** scope was opened. Set the size of the scope to the number of data bytes
-    ** emitted into this segment. If we have an owner symbol set the size of
-    ** this symbol, too.
-    */
-    if (CollCount (&CurrentScope->Spans) > 0) {
-        const Span* S = CollAtUnchecked (&CurrentScope->Spans, 0);
-        unsigned long Size = GetSpanSize (S);
-        DefSizeOfScope (CurrentScope, Size);
-        if (CurrentScope->Label) {
-            DefSizeOfSymbol (CurrentScope->Label, Size);
-        }
-    }
-
-    /* Mark the scope as closed */
-    CurrentScope->Flags |= ST_CLOSED;
-
-    /* Leave the scope */
-    CurrentScope = CurrentScope->Parent;
-}
-
-
-
-SymTable* SymFindScope (SymTable* Parent, const StrBuf* Name, SymFindAction Action)
-/* Find a scope in the given enclosing scope */
-{
-    SymTable** T = &Parent->Childs;
-    while (*T) {
-        int Cmp = SB_Compare (Name, GetStrBuf ((*T)->Name));
-        if (Cmp < 0) {
-            T = &(*T)->Left;
-        } else if (Cmp > 0) {
-            T = &(*T)->Right;
-        } else {
-            /* Found the scope */
-            return *T;
-        }
-    }
-
-    /* Create a new scope if requested and we didn't find one */
-    if (*T == 0 && (Action & SYM_ALLOC_NEW) != 0) {
-        *T = NewSymTable (Parent, Name);
-    }
-
-    /* Return the scope */
-    return *T;
-}
-
-
-
-SymTable* SymFindAnyScope (SymTable* Parent, const StrBuf* Name)
-/* Find a scope in the given or any of its parent scopes. The function will
-** never create a new symbol, since this can only be done in one specific
-** scope.
-*/
-{
-    SymTable* Scope;
-    do {
-        /* Search in the current table */
-        Scope = SymFindScope (Parent, Name, SYM_FIND_EXISTING);
-        if (Scope == 0) {
-            /* Not found, search in the parent scope, if we have one */
-            Parent = Parent->Parent;
-        }
-    } while (Scope == 0 && Parent != 0);
-
-    return Scope;
-}
-
-
-
-SymEntry* SymFindLocal (SymEntry* Parent, const StrBuf* Name, SymFindAction Action)
-/* Find a cheap local symbol. If Action contains SYM_ALLOC_NEW and the entry is
-** not found, create a new one. Return the entry found, or the new entry
-** created, or - in case Action is SYM_FIND_EXISTING - return 0.
-*/
-
-{
-    SymEntry* S;
-    int Cmp;
-
-    /* Local symbol, get the table */
-    if (!Parent) {
-        /* No last global, so there's no local table */
-        Error ("No preceeding global symbol");
-        if (Action & SYM_ALLOC_NEW) {
-            return NewSymEntry (Name, SF_LOCAL);
-        } else {
-            return 0;
-        }
-    }
-
-    /* Search for the symbol if we have a table */
-    Cmp = SymSearchTree (Parent->Locals, Name, &S);
-
-    /* If we found an entry, return it */
-    if (Cmp == 0) {
-        return S;
-    }
-
-    if (Action & SYM_ALLOC_NEW) {
-
-        /* Otherwise create a new entry, insert and return it */
-        SymEntry* N = NewSymEntry (Name, SF_LOCAL);
-        N->Sym.Entry = Parent;
-        if (S == 0) {
-            Parent->Locals = N;
-        } else if (Cmp < 0) {
-            S->Left = N;
-        } else {
-            S->Right = N;
-        }
-        return N;
-    }
-
-    /* We did not find the entry and AllocNew is false. */
-    return 0;
-}
-
-
-
-SymEntry* SymFind (SymTable* Scope, const StrBuf* Name, SymFindAction Action)
-/* Find a new symbol table entry in the given table. If Action contains
-** SYM_ALLOC_NEW and the entry is not found, create a new one. Return the
-** entry found, or the new entry created, or - in case Action is
-** SYM_FIND_EXISTING - return 0.
-*/
-{
-    SymEntry* S;
-
-    /* Global symbol: Get the hash value for the name */
-    unsigned Hash = HashBuf (Name) % Scope->TableSlots;
-
-    /* Search for the entry */
-    int Cmp = SymSearchTree (Scope->Table[Hash], Name, &S);
-
-    /* If we found an entry, return it */
-    if (Cmp == 0) {
-        if ((Action & SYM_CHECK_ONLY) == 0 && SymTabIsClosed (Scope)) {
-            S->Flags |= SF_FIXED;
-        }
-        return S;
-    }
-
-    if (Action & SYM_ALLOC_NEW) {
-
-        /* Otherwise create a new entry, insert and return it. If the scope is
-        ** already closed, mark the symbol as fixed so it won't be resolved
-        ** by a symbol in the enclosing scopes later.
-        */
-        SymEntry* N = NewSymEntry (Name, SF_NONE);
-        if (SymTabIsClosed (Scope)) {
-            N->Flags |= SF_FIXED;
-        }
-        N->Sym.Tab = Scope;
-        if (S == 0) {
-            Scope->Table[Hash] = N;
-        } else if (Cmp < 0) {
-            S->Left = N;
-        } else {
-            S->Right = N;
-        }
-        ++Scope->TableEntries;
-        return N;
-
-    }
-
-    /* We did not find the entry and AllocNew is false. */
-    return 0;
-}
-
-
-
-SymEntry* SymFindAny (SymTable* Scope, const StrBuf* Name)
-/* Find a symbol in the given or any of its parent scopes. The function will
-** never create a new symbol, since this can only be done in one specific
-** scope.
-*/
-{
-    /* Generate the name hash */
-    unsigned Hash = HashBuf (Name);
-
-    /* Search for the symbol */
-    SymEntry* Sym;
-    do {
-        /* Search in the current table. Ignore entries flagged with SF_UNUSED,
-        ** because for such symbols there is a real entry in one of the parent
-        ** scopes.
-        */
-        if (SymSearchTree (Scope->Table[Hash % Scope->TableSlots], Name, &Sym) == 0) {
-            if (Sym->Flags & SF_UNUSED) {
-                Sym = 0;
-            } else {
-                /* Found, return it */
-                break;
-            }
-        } else {
-            Sym = 0;
-        }
-
-        /* Not found, search in the parent scope, if we have one */
-        Scope = Scope->Parent;
-
-    } while (Sym == 0 && Scope != 0);
-
-    /* Return the result */
-    return Sym;
-}
-
-
-
-static void SymCheckUndefined (SymEntry* S)
-/* Handle an undefined symbol */
-{
-    /* Undefined symbol. It may be...
-    **
-    **   - An undefined symbol in a nested lexical level. If the symbol is not
-    **     fixed to this level, search for the symbol in the higher levels and
-    **     make the entry a trampoline entry if we find one.
-    **
-    **   - If the symbol is not found, it is a real undefined symbol. If the
-    **     AutoImport flag is set, make it an import. If the AutoImport flag is
-    **     not set, it's an error.
-    */
-    SymEntry* Sym = 0;
-    if ((S->Flags & SF_FIXED) == 0) {
-        SymTable* Tab = GetSymParentScope (S);
-        while (Tab) {
-            Sym = SymFind (Tab, GetStrBuf (S->Name), SYM_FIND_EXISTING | SYM_CHECK_ONLY);
-            if (Sym && (Sym->Flags & (SF_DEFINED | SF_IMPORT)) != 0) {
-                /* We've found a symbol in a higher level that is
-                ** either defined in the source, or an import.
-                */
-                 break;
-            }
-            /* No matching symbol found in this level. Look further */
-            Tab = Tab->Parent;
-        }
-    }
-
-    if (Sym) {
-
-        /* We found the symbol in a higher level. Transfer the flags and
-        ** address size from the local symbol to that in the higher level
-        ** and check for problems.
-        */
-        if (S->Flags & SF_EXPORT) {
-            if (Sym->Flags & SF_IMPORT) {
-                /* The symbol is already marked as import */
-                LIError (&S->RefLines,
-                         "Symbol `%s' is already an import",
-                         GetString (Sym->Name));
-            }
-            if ((Sym->Flags & SF_EXPORT) == 0) {
-                /* Mark the symbol as an export */
-                Sym->Flags |= SF_EXPORT;
-                Sym->ExportSize = S->ExportSize;
-                if (Sym->ExportSize == ADDR_SIZE_DEFAULT) {
-                    /* Use the actual size of the symbol */
-                    Sym->ExportSize = Sym->AddrSize;
-                }
-                if (Sym->AddrSize > Sym->ExportSize) {
-                    /* We're exporting a symbol smaller than it actually is */
-                    LIWarning (&Sym->DefLines, 1,
-                               "Symbol `%m%p' is %s but exported %s",
-                               GetSymName (Sym),
-                               AddrSizeToStr (Sym->AddrSize),
-                               AddrSizeToStr (Sym->ExportSize));
-                }
-            }
-        }
-        if (S->Flags & SF_REFERENCED) {
-            /* Mark as referenced and move the line info */
-            Sym->Flags |= SF_REFERENCED;
-            CollTransfer (&Sym->RefLines, &S->RefLines);
-            CollDeleteAll (&S->RefLines);
-        }
-
-        /* Transfer all expression references */
-        SymTransferExprRefs (S, Sym);
-
-        /* Mark the symbol as unused removing all other flags */
-        S->Flags = SF_UNUSED;
-
-    } else {
-        /* The symbol is definitely undefined */
-        if (S->Flags & SF_EXPORT) {
-            /* We will not auto-import an export */
-            LIError (&S->RefLines,
-                     "Exported symbol `%m%p' was never defined",
-                     GetSymName (S));
-        } else {
-            if (AutoImport) {
-                /* Mark as import, will be indexed later */
-                S->Flags |= SF_IMPORT;
-                /* Use the address size for code */
-                S->AddrSize = CodeAddrSize;
-                /* Mark point of import */
-                GetFullLineInfo (&S->DefLines);
-            } else {
-                /* Error */
-                LIError (&S->RefLines,
-                         "Symbol `%m%p' is undefined",
-                         GetSymName (S));
-            }
-        }
-    }
-}
-
-
-
-void SymCheck (void)
-/* Run through all symbols and check for anomalies and errors */
-{
-    SymEntry* S;
-
-    /* Check for open scopes */
-    if (CurrentScope->Parent != 0) {
-        Error ("Local scope was not closed");
-    }
-
-    /* First pass: Walk through all symbols, checking for undefined's and
-    ** changing them to trampoline symbols or make them imports.
-    */
-    S = SymList;
-    while (S) {
-        /* If the symbol is marked as global, mark it as export, if it is
-        ** already defined, otherwise mark it as import.
-        */
-        if (S->Flags & SF_GLOBAL) {
-            if (S->Flags & SF_DEFINED) {
-                SymExportFromGlobal (S);
-            } else {
-                SymImportFromGlobal (S);
-            }
-        }
-
-        /* Handle undefined symbols */
-        if ((S->Flags & SF_UNDEFMASK) == SF_UNDEFVAL) {
-            /* This is an undefined symbol. Handle it. */
-            SymCheckUndefined (S);
-        }
-
-        /* Next symbol */
-        S = S->List;
-    }
-
-    /* Second pass: Walk again through the symbols. Count exports and imports
-    ** and set address sizes where this has not happened before. Ignore
-    ** undefined's, since we handled them in the last pass, and ignore unused
-    ** symbols, since we handled them in the last pass, too.
-    */
-    S = SymList;
-    while (S) {
-        if ((S->Flags & SF_UNUSED) == 0 &&
-            (S->Flags & SF_UNDEFMASK) != SF_UNDEFVAL) {
-
-            /* Check for defined symbols that were never referenced */
-            if (IsSizeOfSymbol (S)) {
-                /* Remove line infos, we don't need them any longer */
-                ReleaseFullLineInfo (&S->DefLines);
-                ReleaseFullLineInfo (&S->RefLines);
-            } else if ((S->Flags & SF_DEFINED) != 0 && (S->Flags & SF_REFERENCED) == 0) {
-                LIWarning (&S->DefLines, 2,
-                           "Symbol `%m%p' is defined but never used",
-                           GetSymName (S));
-            }
-
-            /* Assign an index to all imports */
-            if (S->Flags & SF_IMPORT) {
-                if ((S->Flags & (SF_REFERENCED | SF_FORCED)) == SF_NONE) {
-                    /* Imported symbol is not referenced */
-                    LIWarning (&S->DefLines, 2,
-                               "Symbol `%m%p' is imported but never used",
-                               GetSymName (S));
-                } else {
-                    /* Give the import an id, count imports */
-                    S->ImportId = ImportCount++;
-                }
-            }
-
-            /* Count exports, assign the export ID */
-            if (S->Flags & SF_EXPORT) {
-                S->ExportId = ExportCount++;
-            }
-
-            /* If the symbol is defined but has an unknown address size,
-            ** recalculate it.
-            */
-            if (SymHasExpr (S) && S->AddrSize == ADDR_SIZE_DEFAULT) {
-                ExprDesc ED;
-                ED_Init (&ED);
-                StudyExpr (S->Expr, &ED);
-                S->AddrSize = ED.AddrSize;
-                if (SymIsExport (S)) {
-                    if (S->ExportSize == ADDR_SIZE_DEFAULT) {
-                        /* Use the real export size */
-                        S->ExportSize = S->AddrSize;
-                    } else if (S->AddrSize > S->ExportSize) {
-                        /* We're exporting a symbol smaller than it actually is */
-                        LIWarning (&S->DefLines, 1,
-                                   "Symbol `%m%p' is %s but exported %s",
-                                   GetSymName (S),
-                                   AddrSizeToStr (S->AddrSize),
-                                   AddrSizeToStr (S->ExportSize));
-                    }
-                }
-                ED_Done (&ED);
-            }
-
-            /* If the address size of the symbol was guessed, check the guess
-            ** against the actual address size and print a warning if the two
-            ** differ.
-            */
-            if (S->AddrSize != ADDR_SIZE_DEFAULT) {
-                /* Do we have data for this address size? */
-                if (S->AddrSize <= sizeof (S->GuessedUse) / sizeof (S->GuessedUse[0])) {
-                    /* Get the file position where the symbol was used */
-                    const FilePos* P = S->GuessedUse[S->AddrSize - 1];
-                    if (P) {
-                        PWarning (P, 0,
-                                  "Didn't use %s addressing for `%m%p'",
-                                  AddrSizeToStr (S->AddrSize),
-                                  GetSymName (S));
-                    }
-                }
-            }
-
-        }
-
-        /* Next symbol */
-        S = S->List;
-    }
-}
-
-
-
-void SymDump (FILE* F)
-/* Dump the symbol table */
-{
-    SymEntry* S = SymList;
-
-    while (S) {
-        /* Ignore unused symbols */
-        if ((S->Flags & SF_UNUSED) == 0) {
-            fprintf (F,
-                     "%-24s %s %s %s %s %s\n",
-                     SB_GetConstBuf (GetSymName (S)),
-                     (S->Flags & SF_DEFINED)? "DEF" : "---",
-                     (S->Flags & SF_REFERENCED)? "REF" : "---",
-                     (S->Flags & SF_IMPORT)? "IMP" : "---",
-                     (S->Flags & SF_EXPORT)? "EXP" : "---",
-                     AddrSizeToStr (S->AddrSize));
-        }
-        /* Next symbol */
-        S = S->List;
-    }
-}
-
-
-
-void WriteImports (void)
-/* Write the imports list to the object file */
-{
-    SymEntry* S;
-
-    /* Tell the object file module that we're about to start the imports */
-    ObjStartImports ();
-
-    /* Write the import count to the list */
-    ObjWriteVar (ImportCount);
-
-    /* Walk throught list and write all valid imports to the file. An import
-    ** is considered valid, if it is either referenced, or the forced bit is
-    ** set. Otherwise, the import is ignored (no need to link in something
-    ** that isn't used).
-    */
-    S = SymList;
-    while (S) {
-        if ((S->Flags & (SF_UNUSED | SF_IMPORT)) == SF_IMPORT &&
-            (S->Flags & (SF_REFERENCED | SF_FORCED)) != 0) {
-
-            ObjWrite8 (S->AddrSize);
-            ObjWriteVar (S->Name);
-            WriteLineInfo (&S->DefLines);
-            WriteLineInfo (&S->RefLines);
-        }
-        S = S->List;
-    }
-
-    /* Done writing imports */
-    ObjEndImports ();
-}
-
-
-
-void WriteExports (void)
-/* Write the exports list to the object file */
-{
-    SymEntry* S;
-    unsigned Type;
-
-    /* Tell the object file module that we're about to start the exports */
-    ObjStartExports ();
-
-    /* Write the export count to the list */
-    ObjWriteVar (ExportCount);
-
-    /* Walk throught list and write all exports to the file */
-    S = SymList;
-    while (S) {
-        if ((S->Flags & (SF_UNUSED | SF_EXPORT)) == SF_EXPORT) {
-
-            /* Get the expression bits and the value */
-            long ConstVal;
-            unsigned SymFlags = GetSymInfoFlags (S, &ConstVal);
-
-            /* Check if this symbol has a size. If so, remember it in the
-            ** flags.
-            */
-            long Size;
-            SymEntry* SizeSym = FindSizeOfSymbol (S);
-            if (SizeSym != 0 && SymIsConst (SizeSym, &Size)) {
-                SymFlags |= SYM_SIZE;
-            }
-
-            /* Count the number of ConDes types */
-            for (Type = 0; Type < CD_TYPE_COUNT; ++Type) {
-                if (S->ConDesPrio[Type] != CD_PRIO_NONE) {
-                    SYM_INC_CONDES_COUNT (SymFlags);
-                }
-            }
-
-            /* Write the type and the export size */
-            ObjWriteVar (SymFlags);
-            ObjWrite8 (S->ExportSize);
-
-            /* Write any ConDes declarations */
-            if (SYM_GET_CONDES_COUNT (SymFlags) > 0) {
-                for (Type = 0; Type < CD_TYPE_COUNT; ++Type) {
-                    unsigned char Prio = S->ConDesPrio[Type];
-                    if (Prio != CD_PRIO_NONE) {
-                        ObjWrite8 (CD_BUILD (Type, Prio));
-                    }
-                }
-            }
-
-            /* Write the name */
-            ObjWriteVar (S->Name);
-
-            /* Write the value */
-            if (SYM_IS_CONST (SymFlags)) {
-                /* Constant value */
-                ObjWrite32 (ConstVal);
-            } else {
-                /* Expression involved */
-                WriteExpr (S->Expr);
-            }
-
-            /* If the symbol has a size, write it to the file */
-            if (SYM_HAS_SIZE (SymFlags)) {
-                ObjWriteVar (Size);
-            }
-
-            /* Write the line infos */
-            WriteLineInfo (&S->DefLines);
-            WriteLineInfo (&S->RefLines);
-        }
-        S = S->List;
-    }
-
-    /* Done writing exports */
-    ObjEndExports ();
-}
-
-
-
-void WriteDbgSyms (void)
-/* Write a list of all symbols to the object file */
-{
-    unsigned Count;
-    SymEntry* S;
-
-    /* Tell the object file module that we're about to start the debug info */
-    ObjStartDbgSyms ();
-
-    /* Check if debug info is requested */
-    if (DbgSyms) {
-
-        /* Walk through the list, give each symbol an id and count them */
-        Count = 0;
-        S = SymList;
-        while (S) {
-            if (IsDbgSym (S)) {
-                S->DebugSymId = Count++;
-            }
-            S = S->List;
-        }
-
-        /* Write the symbol count to the list */
-        ObjWriteVar (Count);
-
-        /* Walk through list and write all symbols to the file. Ignore size
-        ** symbols.
-        */
-        S = SymList;
-        while (S) {
-            if (IsDbgSym (S)) {
-
-                /* Get the expression bits and the value */
-                long ConstVal;
-                unsigned SymFlags = GetSymInfoFlags (S, &ConstVal);
-
-                /* Check if this symbol has a size. If so, remember it in the
-                ** flags.
-                */
-                long Size;
-                SymEntry* SizeSym = FindSizeOfSymbol (S);
-                if (SizeSym != 0 && SymIsConst (SizeSym, &Size)) {
-                    SymFlags |= SYM_SIZE;
-                }
-
-                /* Write the type */
-                ObjWriteVar (SymFlags);
-
-                /* Write the address size */
-                ObjWrite8 (S->AddrSize);
-
-                /* Write the id of the parent. For normal symbols, this is a
-                ** scope (symbol table), for cheap locals, it's a symbol.
-                */
-                if (SYM_IS_STD (SymFlags)) {
-                    ObjWriteVar (S->Sym.Tab->Id);
-                } else {
-                    ObjWriteVar (S->Sym.Entry->DebugSymId);
-                }
-
-                /* Write the name */
-                ObjWriteVar (S->Name);
-
-                /* Write the value */
-                if (SYM_IS_CONST (SymFlags)) {
-                    /* Constant value */
-                    ObjWrite32 (ConstVal);
-                } else {
-                    /* Expression involved */
-                    WriteExpr (S->Expr);
-                }
-
-                /* If the symbol has a size, write it to the file */
-                if (SYM_HAS_SIZE (SymFlags)) {
-                    ObjWriteVar (Size);
-                }
-
-                /* If the symbol is an im- or export, write out the ids */
-                if (SYM_IS_IMPORT (SymFlags)) {
-                    ObjWriteVar (GetSymImportId (S));
-                }
-                if (SYM_IS_EXPORT (SymFlags)) {
-                    ObjWriteVar (GetSymExportId (S));
-                }
-
-                /* Write the line infos */
-                WriteLineInfo (&S->DefLines);
-                WriteLineInfo (&S->RefLines);
-            }
-            S = S->List;
-        }
-
-    } else {
-
-        /* No debug symbols */
-        ObjWriteVar (0);
-
-    }
-
-    /* Write the high level symbols */
-    WriteHLLDbgSyms ();
-
-    /* Done writing debug symbols */
-    ObjEndDbgSyms ();
-}
-
-
-
-void WriteScopes (void)
-/* Write the scope table to the object file */
-{
-    /* Tell the object file module that we're about to start the scopes */
-    ObjStartScopes ();
-
-    /* We will write scopes only if debug symbols are requested */
-    if (DbgSyms) {
-
-        /* Get head of list */
-        SymTable* S = RootScope;
-
-        /* Write the scope count to the file */
-        ObjWriteVar (ScopeCount);
-
-        /* Walk through all scopes and write them to the file */
-        while (S) {
-
-            /* Flags for this scope */
-            unsigned Flags = 0;
-
-            /* Check if this scope has a size. If so, remember it in the
-            ** flags.
-            */
-            long Size;
-            SymEntry* SizeSym = FindSizeOfScope (S);
-            if (SizeSym != 0 && SymIsConst (SizeSym, &Size)) {
-                Flags |= SCOPE_SIZE;
-            }
-
-            /* Check if the scope has a label */
-            if (S->Label) {
-                Flags |= SCOPE_LABELED;
-            }
-
-            /* Scope must be defined */
-            CHECK (S->Type != SCOPE_UNDEF);
-
-            /* Id of parent scope */
-            if (S->Parent) {
-                ObjWriteVar (S->Parent->Id);
-            } else {
-                ObjWriteVar (0);
-            }
-
-            /* Lexical level */
-            ObjWriteVar (S->Level);
-
-            /* Scope flags */
-            ObjWriteVar (Flags);
-
-            /* Type of scope */
-            ObjWriteVar (S->Type);
-
-            /* Name of the scope */
-            ObjWriteVar (S->Name);
-
-            /* If the scope has a size, write it to the file */
-            if (SCOPE_HAS_SIZE (Flags)) {
-                ObjWriteVar (Size);
-            }
-
-            /* If the scope has a label, write its id to the file */
-            if (SCOPE_HAS_LABEL (Flags)) {
-                ObjWriteVar (S->Label->DebugSymId);
-            }
-
-            /* Spans for this scope */
-            WriteSpanList (&S->Spans);
-
-            /* Next scope */
-            S = S->Next;
-        }
-
-    } else {
-
-        /* No debug info requested */
-        ObjWriteVar (0);
-
-    }
-
-    /* Done writing the scopes */
-    ObjEndScopes ();
-}
diff --git a/src/ca65/symtab.h b/src/ca65/symtab.h
deleted file mode 100644 (file)
index 7e7a900..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 symtab.h                                  */
-/*                                                                           */
-/*                 Symbol table for the ca65 macroassembler                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SYMTAB_H
-#define SYMTAB_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "exprdefs.h"
-#include "inline.h"
-
-/* ca65 */
-#include "symentry.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Arguments for SymFind... */
-typedef enum {
-    SYM_FIND_EXISTING   = 0x00,
-    SYM_ALLOC_NEW       = 0x01,
-    SYM_CHECK_ONLY      = 0x02,
-} SymFindAction;
-
-/* Symbol table flags */
-#define ST_NONE         0x00            /* No flags */
-#define ST_DEFINED      0x01            /* Scope has been defined */
-#define ST_CLOSED       0x02            /* Scope is closed */
-
-/* A symbol table */
-typedef struct SymTable SymTable;
-struct SymTable {
-    SymTable*           Next;           /* Pointer to next table in list */
-    SymTable*           Left;           /* Pointer to smaller entry */
-    SymTable*           Right;          /* Pointer to greater entry */
-    SymTable*           Parent;         /* Link to enclosing scope if any */
-    SymTable*           Childs;         /* Pointer to child scopes */
-    SymEntry*           Label;          /* Scope label */
-    Collection          Spans;          /* Spans for this scope */
-    unsigned            Id;             /* Scope id */
-    unsigned short      Flags;          /* Symbol table flags */
-    unsigned char       AddrSize;       /* Address size */
-    unsigned char       Type;           /* Type of the scope */
-    unsigned            Level;          /* Lexical level */
-    unsigned            TableSlots;     /* Number of hash table slots */
-    unsigned            TableEntries;   /* Number of entries in the table */
-    unsigned            Name;           /* Name of the scope */
-    SymEntry*           Table[1];       /* Dynamic allocation */
-};
-
-/* Symbol tables */
-extern SymTable*        CurrentScope;   /* Pointer to current symbol table */
-extern SymTable*        RootScope;      /* Root symbol table */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void SymEnterLevel (const StrBuf* ScopeName, unsigned char Type,
-                    unsigned char AddrSize, SymEntry* OwnerSym);
-/* Enter a new lexical level */
-
-void SymLeaveLevel (void);
-/* Leave the current lexical level */
-
-SymTable* SymFindScope (SymTable* Parent, const StrBuf* Name, SymFindAction Action);
-/* Find a scope in the given enclosing scope */
-
-SymTable* SymFindAnyScope (SymTable* Parent, const StrBuf* Name);
-/* Find a scope in the given or any of its parent scopes. The function will
-** never create a new symbol, since this can only be done in one specific
-** scope.
-*/
-
-SymEntry* SymFindLocal (SymEntry* Parent, const StrBuf* Name, SymFindAction Action);
-/* Find a cheap local symbol. If Action contains SYM_ALLOC_NEW and the entry is
-** not found, create a new one. Return the entry found, or the new entry
-** created, or - in case Action is SYM_FIND_EXISTING - return 0.
-*/
-
-SymEntry* SymFind (SymTable* Scope, const StrBuf* Name, SymFindAction Action);
-/* Find a new symbol table entry in the given table. If Action contains
-** SYM_ALLOC_NEW and the entry is not found, create a new one. Return the
-** entry found, or the new entry created, or - in case Action is
-** SYM_FIND_EXISTING - return 0.
-*/
-
-SymEntry* SymFindAny (SymTable* Scope, const StrBuf* Name);
-/* Find a symbol in the given or any of its parent scopes. The function will
-** never create a new symbol, since this can only be done in one specific
-** scope.
-*/
-
-#if defined(HAVE_INLINE)
-INLINE unsigned char GetSymTabType (const SymTable* S)
-/* Return the type of the given symbol table */
-{
-    return S->Type;
-}
-#else
-#  define GetSymTabType(S)      ((S)->Type)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int SymTabIsClosed (const SymTable* S)
-/* Return true if the symbol table has been closed */
-{
-    return (S->Flags & ST_CLOSED) != 0;
-}
-#else
-#  define SymTabIsClosed(S)      (((S)->Flags & ST_CLOSED) != 0)
-#endif
-
-void SymCheck (void);
-/* Run through all symbols and check for anomalies and errors */
-
-void SymDump (FILE* F);
-/* Dump the symbol table */
-
-void WriteImports (void);
-/* Write the imports list to the object file */
-
-void WriteExports (void);
-/* Write the exports list to the object file */
-
-void WriteDbgSyms (void);
-/* Write a list of all symbols to the object file */
-
-void WriteScopes (void);
-/* Write the scope table to the object file */
-
-
-
-/* End of symtab.h */
-
-#endif
diff --git a/src/ca65/token.c b/src/ca65/token.c
deleted file mode 100644 (file)
index db2a63f..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  token.c                                  */
-/*                                                                           */
-/*                  Token list for the ca65 macro assembler                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2007-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* ca65 */
-#include "token.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int TokHasSVal (token_t Tok)
-/* Return true if the given token has an attached SVal */
-{
-    return (Tok == TOK_IDENT || Tok == TOK_LOCAL_IDENT || Tok == TOK_STRCON);
-}
-
-
-
-int TokHasIVal (token_t Tok)
-/* Return true if the given token has an attached IVal */
-{
-    return (Tok == TOK_INTCON || Tok == TOK_CHARCON || Tok == TOK_REG);
-}
-
-
-
-void CopyToken (Token* Dst, const Token* Src)
-/* Copy a token from Src to Dst. The current value of Dst.SVal is free'd,
-** so Dst must be initialized.
-*/
-{
-    /* Copy the fields */
-    Dst->Tok  = Src->Tok;
-    Dst->WS   = Src->WS;
-    Dst->IVal = Src->IVal;
-    SB_Copy (&Dst->SVal, &Src->SVal);
-    Dst->Pos  = Src->Pos;
-}
diff --git a/src/ca65/token.h b/src/ca65/token.h
deleted file mode 100644 (file)
index b0264f1..0000000
+++ /dev/null
@@ -1,319 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  token.h                                  */
-/*                                                                           */
-/*                  Token list for the ca65 macro assembler                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2007-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef TOKEN_H
-#define TOKEN_H
-
-
-
-/* common */
-#include "filepos.h"
-#include "inline.h"
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Tokens */
-typedef enum token_t {
-    TOK_NONE,           /* Start value, invalid */
-    TOK_EOF,            /* End of input file */
-    TOK_SEP,            /* Separator (usually newline) */
-    TOK_IDENT,          /* An identifier */
-    TOK_LOCAL_IDENT,    /* A cheap local identifier */
-
-    TOK_INTCON,         /* Integer constant */
-    TOK_CHARCON,        /* Character constant */
-    TOK_STRCON,         /* String constant */
-
-    TOK_A,              /* A)ccumulator */
-    TOK_X,              /* X register */
-    TOK_Y,              /* Y register */
-    TOK_S,              /* S register */
-    TOK_REG,            /* Sweet16 R.. register (in sweet16 mode) */
-
-    TOK_ASSIGN,         /* := */
-    TOK_ULABEL,         /* :++ or :-- */
-
-    TOK_EQ,             /* = */
-    TOK_NE,             /* <> */
-    TOK_LT,             /* < */
-    TOK_GT,             /* > */
-    TOK_LE,             /* <= */
-    TOK_GE,             /* >= */
-
-    TOK_BOOLAND,        /* .and */
-    TOK_BOOLOR,         /* .or */
-    TOK_BOOLXOR,        /* .xor */
-    TOK_BOOLNOT,        /* .not */
-
-    TOK_PLUS,           /* + */
-    TOK_MINUS,          /* - */
-    TOK_MUL,            /* * */
-    TOK_STAR = TOK_MUL, /* Alias */
-    TOK_DIV,            /* / */
-    TOK_MOD,            /* ! */
-    TOK_OR,             /* | */
-    TOK_XOR,            /* ^ */
-    TOK_AND,            /* & */
-    TOK_SHL,            /* << */
-    TOK_SHR,            /* >> */
-    TOK_NOT,            /* ~ */
-
-    TOK_PC,             /* $ if enabled */
-    TOK_NAMESPACE,      /* :: */
-    TOK_DOT,            /* . */
-    TOK_COMMA,          /* , */
-    TOK_HASH,           /* # */
-    TOK_COLON,          /* : */
-    TOK_LPAREN,         /* ( */
-    TOK_RPAREN,         /* ) */
-    TOK_LBRACK,         /* [ */
-    TOK_RBRACK,         /* ] */
-    TOK_LCURLY,         /* { */
-    TOK_RCURLY,         /* } */
-    TOK_AT,             /* @ - in Sweet16 mode */
-
-    TOK_OVERRIDE_ZP,    /* z: */
-    TOK_OVERRIDE_ABS,   /* a: */
-    TOK_OVERRIDE_FAR,   /* f: */
-
-    TOK_MACPARAM,       /* Macro parameter, not generated by scanner */
-    TOK_REPCOUNTER,     /* Repeat counter, not generated by scanner */
-
-    /* The next ones are tokens for the pseudo instructions. Keep together! */
-    TOK_FIRSTPSEUDO,
-    TOK_A16             = TOK_FIRSTPSEUDO,
-    TOK_A8,
-    TOK_ADDR,
-    TOK_ADDRSIZE,
-    TOK_ALIGN,
-    TOK_ASCIIZ,
-    TOK_ASSERT,
-    TOK_AUTOIMPORT,
-    TOK_BANK,
-    TOK_BANKBYTE,
-    TOK_BANKBYTES,
-    TOK_BLANK,
-    TOK_BSS,
-    TOK_BYTE,
-    TOK_CASE,
-    TOK_CHARMAP,
-    TOK_CODE,
-    TOK_CONCAT,
-    TOK_CONDES,
-    TOK_CONST,
-    TOK_CONSTRUCTOR,
-    TOK_CPU,
-    TOK_DATA,
-    TOK_DBG,
-    TOK_DBYT,
-    TOK_DEBUGINFO,
-    TOK_DEFINE,
-    TOK_DEFINED,
-    TOK_DEFINEDMACRO,
-    TOK_DELMAC,
-    TOK_DESTRUCTOR,
-    TOK_DWORD,
-    TOK_ELSE,
-    TOK_ELSEIF,
-    TOK_END,
-    TOK_ENDENUM,
-    TOK_ENDIF,
-    TOK_ENDMACRO,
-    TOK_ENDPROC,
-    TOK_ENDREP,
-    TOK_ENDSCOPE,
-    TOK_ENDSTRUCT,
-    TOK_ENDUNION,
-    TOK_ENUM,
-    TOK_ERROR,
-    TOK_EXITMACRO,
-    TOK_EXPORT,
-    TOK_EXPORTZP,
-    TOK_FARADDR,
-    TOK_FATAL,
-    TOK_FEATURE,
-    TOK_FILEOPT,
-    TOK_FORCEIMPORT,
-    TOK_FORCEWORD,
-    TOK_GLOBAL,
-    TOK_GLOBALZP,
-    TOK_HIBYTE,
-    TOK_HIBYTES,
-    TOK_HIWORD,
-    TOK_I16,
-    TOK_I8,
-    TOK_MAKEIDENT,
-    TOK_IF,
-    TOK_IFBLANK,
-    TOK_IFCONST,
-    TOK_IFDEF,
-    TOK_IFNBLANK,
-    TOK_IFNCONST,
-    TOK_IFNDEF,
-    TOK_IFNREF,
-    TOK_IFP02,
-    TOK_IFP816,
-    TOK_IFPC02,
-    TOK_IFPSC02,
-    TOK_IFREF,
-    TOK_IMPORT,
-    TOK_IMPORTZP,
-    TOK_INCBIN,
-    TOK_INCLUDE,
-    TOK_INTERRUPTOR,
-    TOK_ISMNEMONIC,
-    TOK_LEFT,
-    TOK_LINECONT,
-    TOK_LIST,
-    TOK_LISTBYTES,
-    TOK_LOBYTE,
-    TOK_LOBYTES,
-    TOK_LOCAL,
-    TOK_LOCALCHAR,
-    TOK_LOWORD,
-    TOK_MACPACK,
-    TOK_MACRO,
-    TOK_MATCH,
-    TOK_MAX,
-    TOK_MID,
-    TOK_MIN,
-    TOK_NULL,
-    TOK_ORG,
-    TOK_OUT,
-    TOK_P02,
-    TOK_P816,
-    TOK_PAGELENGTH,
-    TOK_PARAMCOUNT,
-    TOK_PC02,
-    TOK_POPCPU,
-    TOK_POPSEG,
-    TOK_PROC,
-    TOK_PSC02,
-    TOK_PUSHCPU,
-    TOK_PUSHSEG,
-    TOK_REFERENCED,
-    TOK_RELOC,
-    TOK_REPEAT,
-    TOK_RES,
-    TOK_RIGHT,
-    TOK_RODATA,
-    TOK_SCOPE,
-    TOK_SEGMENT,
-    TOK_SET,
-    TOK_SETCPU,
-    TOK_SIZEOF,
-    TOK_SMART,
-    TOK_SPRINTF,
-    TOK_STRAT,
-    TOK_STRING,
-    TOK_STRLEN,
-    TOK_STRUCT,
-    TOK_TAG,
-    TOK_TCOUNT,
-    TOK_TIME,
-    TOK_UNDEF,
-    TOK_UNION,
-    TOK_VERSION,
-    TOK_WARNING,
-    TOK_WORD,
-    TOK_XMATCH,
-    TOK_ZEROPAGE,
-    TOK_LASTPSEUDO      = TOK_ZEROPAGE,
-
-    TOK_COUNT           /* Count of tokens */
-} token_t;
-
-
-
-/* Complete token including attributes and flags */
-typedef struct Token Token;
-struct Token {
-    token_t     Tok;            /* The actual token value */
-    int         WS;             /* Flag for "whitespace before token" */
-    long        IVal;           /* Integer attribute value */
-    StrBuf      SVal;           /* String attribute value */
-    FilePos     Pos;            /* Position from which token was read */
-};
-
-/* Initializer value for a token */
-#define STATIC_TOKEN_INITIALIZER {      \
-    TOK_NONE,                           \
-    0,                                  \
-    0,                                  \
-    STATIC_STRBUF_INITIALIZER,          \
-    STATIC_FILEPOS_INITIALIZER          \
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int TokHasSVal (token_t Tok);
-/* Return true if the given token has an attached SVal */
-
-int TokHasIVal (token_t Tok);
-/* Return true if the given token has an attached IVal */
-
-#if defined(HAVE_INLINE)
-INLINE int TokIsSep (enum token_t T)
-/* Return true if this is a separator token */
-{
-    return (T == TOK_SEP || T == TOK_EOF);
-}
-#else
-#  define TokIsSep(T)   ((T) == TOK_SEP || (T) == TOK_EOF)
-#endif
-
-void CopyToken (Token* Dst, const Token* Src);
-/* Copy a token. The current value of Dst.SVal is free'd, so Dst must be
-** initialized.
-*/
-
-
-
-/* End of token.h */
-
-#endif
diff --git a/src/ca65/toklist.c b/src/ca65/toklist.c
deleted file mode 100644 (file)
index 16efd24..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 toklist.c                                 */
-/*                                                                           */
-/*                  Token list for the ca65 macroassembler                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "check.h"
-#include "xmalloc.h"
-
-/* ca65 */
-#include "error.h"
-#include "istack.h"
-#include "lineinfo.h"
-#include "nexttok.h"
-#include "scanner.h"
-#include "toklist.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Number of currently pushed token lists */
-static unsigned PushCounter = 0;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-TokNode* NewTokNode (void)
-/* Create and return a token node with the current token value */
-{
-
-    /* Allocate memory */
-    TokNode* N = xmalloc (sizeof (TokNode));
-
-    /* Initialize the token contents */
-    N->Next     = 0;
-    SB_Init (&N->T.SVal);
-    CopyToken (&N->T, &CurTok);
-
-    /* Return the node */
-    return N;
-}
-
-
-
-void FreeTokNode (TokNode* N)
-/* Free the given token node */
-{
-    SB_Done (&N->T.SVal);
-    xfree (N);
-}
-
-
-
-void TokSet (TokNode* N)
-/* Set the scanner token from the given token node. */
-{
-    /* Set the values */
-    CopyToken (&CurTok, &N->T);
-    SB_Terminate (&CurTok.SVal);
-}
-
-
-
-enum TC TokCmp (const TokNode* N)
-/* Compare the token given as parameter against the current token */
-{
-    if (N->T.Tok != CurTok.Tok) {
-        /* Different token */
-        return tcDifferent;
-    }
-
-    /* If the token has string attribute, check it */
-    if (TokHasSVal (N->T.Tok)) {
-        if (SB_Compare (&CurTok.SVal, &N->T.SVal) != 0) {
-            return tcSameToken;
-        }
-    } else if (TokHasIVal (N->T.Tok)) {
-        if (N->T.IVal != CurTok.IVal) {
-            return tcSameToken;
-        }
-    }
-
-    /* Tokens are identical */
-    return tcIdentical;
-}
-
-
-
-TokList* NewTokList (void)
-/* Create a new, empty token list */
-{
-    /* Allocate memory for the list structure */
-    TokList* T = xmalloc (sizeof (TokList));
-
-    /* Initialize the fields */
-    T->Next     = 0;
-    T->Root     = 0;
-    T->Last     = 0;
-    T->RepCount = 0;
-    T->RepMax   = 1;
-    T->Count    = 0;
-    T->Check    = 0;
-    T->Data     = 0;
-    T->LI       = 0;
-
-    /* Return the new list */
-    return T;
-}
-
-
-
-void FreeTokList (TokList* List)
-/* Delete the token list including all token nodes */
-{
-    /* Free the token list */
-    TokNode* T = List->Root;
-    while (T) {
-        TokNode* Tmp = T;
-        T = T->Next;
-        FreeTokNode (Tmp);
-    }
-
-    /* Free associated line info */
-    if (List->LI) {
-        EndLine (List->LI);
-    }
-
-    /* If we have associated data, free it */
-    if (List->Data) {
-        xfree (List->Data);
-    }
-
-    /* Free the list structure itself */
-    xfree (List);
-}
-
-
-
-enum token_t GetTokListTerm (enum token_t Term)
-/* Determine if the following token list is enclosed in curly braces. This is
-** the case if the next token is the opening brace. If so, skip it and return
-** a closing brace, otherwise return Term.
-*/
-{
-    if (CurTok.Tok == TOK_LCURLY) {
-        NextTok ();
-        return TOK_RCURLY;
-    } else {
-        return Term;
-    }
-}
-
-
-
-void AddCurTok (TokList* List)
-/* Add the current token to the token list */
-{
-    /* Create a token node with the current token value */
-    TokNode* T = NewTokNode ();
-
-    /* Insert the node into the list */
-    if (List->Root == 0) {
-        List->Root = T;
-    } else {
-        List->Last->Next = T;
-    }
-    List->Last = T;
-
-    /* Count nodes */
-    List->Count++;
-}
-
-
-
-static int ReplayTokList (void* List)
-/* Function that gets the next token from a token list and sets it. This
-** function may be used together with the PushInput function from the istack
-** module.
-*/
-{
-    /* Cast the generic pointer to an actual list */
-    TokList* L = List;
-
-    /* If there are no more tokens, decrement the repeat counter. If it goes
-    ** zero, delete the list and remove the function from the stack.
-    */
-    if (L->Last == 0) {
-        if (++L->RepCount >= L->RepMax) {
-            /* Done with this list */
-            FreeTokList (L);
-            --PushCounter;
-            PopInput ();
-            return 0;
-        } else {
-            /* Replay one more time */
-            L->Last = L->Root;
-        }
-    }
-
-    /* Set the next token from the list */
-    TokSet (L->Last);
-
-    /* Set the line info for the new token */
-    if (L->LI) {
-        EndLine (L->LI);
-    }
-    L->LI = StartLine (&CurTok.Pos, LI_TYPE_ASM, PushCounter);
-
-    /* If a check function is defined, call it, so it may look at the token
-    ** just set and changed it as apropriate.
-    */
-    if (L->Check) {
-        L->Check (L);
-    }
-
-    /* Set the pointer to the next token */
-    L->Last = L->Last->Next;
-
-    /* We have a token */
-    return 1;
-}
-
-
-
-void PushTokList (TokList* List, const char* Desc)
-/* Push a token list to be used as input for InputFromStack. This includes
-** several initializations needed in the token list structure, so don't use
-** PushInput directly.
-*/
-{
-    /* If the list is empty, just delete it and bail out */
-    if (List->Count == 0) {
-        FreeTokList (List);
-        return;
-    }
-
-    /* Reset the last pointer to the first element */
-    List->Last = List->Root;
-
-    /* Insert the list specifying our input function */
-    ++PushCounter;
-    PushInput (ReplayTokList, List, Desc);
-}
diff --git a/src/ca65/toklist.h b/src/ca65/toklist.h
deleted file mode 100644 (file)
index 6ee8b5f..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 toklist.h                                 */
-/*                                                                           */
-/*                  Token list for the ca65 macroassembler                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef TOKLIST_H
-#define TOKLIST_H
-
-
-
-/* common */
-#include "strbuf.h"
-
-/* ca65 */
-#include "lineinfo.h"
-#include "scanner.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Struct holding a token */
-typedef struct TokNode TokNode;
-struct TokNode {
-    TokNode*    Next;                   /* For single linked list */
-    Token       T;                      /* Token value */
-};
-
-/* Struct holding a token list */
-typedef struct TokList TokList;
-struct TokList {
-    TokList*    Next;                   /* Single linked list (for replay) */
-    TokNode*    Root;                   /* First node in list */
-    TokNode*    Last;                   /* Last node in list or replay */
-    unsigned    RepCount;               /* Repeat counter (used for replay) */
-    unsigned    RepMax;                 /* Maximum repeat count for replay */
-    unsigned    Count;                  /* Token count */
-    void        (*Check)(TokList*);     /* Token check function */
-    void*       Data;                   /* Additional data for check */
-    LineInfo*   LI;                     /* Line info for replay */
-};
-
-
-
-/* Return codes for TokCmp - higher numeric code means better match */
-enum TC {
-    tcDifferent,                        /* Different tokents */
-    tcSameToken,                        /* Same token, different attribute */
-    tcIdentical                         /* Identical (token + attribute) */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-TokNode* NewTokNode (void);
-/* Create and return a token node with the current token value */
-
-void FreeTokNode (TokNode* N);
-/* Free the given token node */
-
-void TokSet (TokNode* N);
-/* Set the scanner token from the given token node. */
-
-enum TC TokCmp (const TokNode* N);
-/* Compare the token given as parameter against the current token */
-
-TokList* NewTokList (void);
-/* Create a new, empty token list */
-
-void FreeTokList (TokList* T);
-/* Delete the token list including all token nodes */
-
-token_t GetTokListTerm (token_t Term);
-/* Determine if the following token list is enclosed in curly braces. This is
-** the case if the next token is the opening brace. If so, skip it and return
-** a closing brace, otherwise return Term.
-*/
-
-void AddCurTok (TokList* T);
-/* Add the current token to the token list */
-
-void PushTokList (TokList* List, const char* Desc);
-/* Push a token list to be used as input for InputFromStack. This includes
-** several initializations needed in the token list structure, so don't use
-** PushInput directly.
-*/
-
-
-
-/* End of toklist.h */
-
-#endif
diff --git a/src/ca65/ulabel.c b/src/ca65/ulabel.c
deleted file mode 100644 (file)
index 9712f49..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 ulabel.c                                  */
-/*                                                                           */
-/*                Unnamed labels for the ca65 macroassembler                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "check.h"
-#include "coll.h"
-#include "xmalloc.h"
-
-/* ca65 */
-#include "error.h"
-#include "expr.h"
-#include "lineinfo.h"
-#include "scanner.h"
-#include "ulabel.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Struct that describes an unnamed label */
-typedef struct ULabel ULabel;
-struct ULabel {
-    Collection  LineInfos;      /* Position of the label in the source */
-    ExprNode*   Val;            /* The label value - may be NULL */
-    unsigned    Ref;            /* Number of references */
-};
-
-/* List management */
-static Collection ULabList      = STATIC_COLLECTION_INITIALIZER;
-static unsigned ULabDefCount    = 0;    /* Number of defined labels */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static ULabel* NewULabel (ExprNode* Val)
-/* Create a new ULabel and insert it into the collection. The created label
-** structure is returned.
-*/
-{
-    /* Allocate memory for the ULabel structure */
-    ULabel* L = xmalloc (sizeof (ULabel));
-
-    /* Initialize the fields */
-    L->LineInfos = EmptyCollection;
-    GetFullLineInfo (&L->LineInfos);
-    L->Val       = Val;
-    L->Ref       = 0;
-
-    /* Insert the label into the collection */
-    CollAppend (&ULabList, L);
-
-    /* Return the created label */
-    return L;
-}
-
-
-
-ExprNode* ULabRef (int Which)
-/* Get an unnamed label. If Which is negative, it is a backreference (a
-** reference to an already defined label), and the function will return a
-** segment relative expression. If Which is positive, it is a forward ref,
-** and the function will return a expression node for an unnamed label that
-** must be resolved later.
-*/
-{
-    int     Index;
-    ULabel* L;
-
-    /* Which can never be 0 */
-    PRECONDITION (Which != 0);
-
-    /* Get the index of the referenced label */
-    if (Which > 0) {
-        --Which;
-    }
-    Index = (int) ULabDefCount + Which;
-
-    /* We cannot have negative label indices */
-    if (Index < 0) {
-        /* Label does not exist */
-        Error ("Undefined label");
-        /* We must return something valid */
-        return GenCurrentPC();
-    }
-
-    /* Check if the label exists. If not, generate enough forward labels. */
-    if (Index < (int) CollCount (&ULabList)) {
-        /* The label exists, get it. */
-        L = CollAtUnchecked (&ULabList, Index);
-    } else {
-        /* Generate new, undefined labels */
-        while (Index >= (int) CollCount (&ULabList)) {
-            L = NewULabel (0);
-        }
-    }
-
-    /* Mark the label as referenced */
-    ++L->Ref;
-
-    /* If the label is already defined, return its value, otherwise return
-    ** just a reference.
-    */
-    if (L->Val) {
-        return CloneExpr (L->Val);
-    } else {
-        return GenULabelExpr (Index);
-    }
-}
-
-
-
-void ULabDef (void)
-/* Define an unnamed label at the current PC */
-{
-    if (ULabDefCount < CollCount (&ULabList)) {
-        /* We did already have a forward reference to this label, so has
-        ** already been generated, but doesn't have a value. Use the current
-        ** PC for the label value.
-        */
-        ULabel* L = CollAtUnchecked (&ULabList, ULabDefCount);
-        CHECK (L->Val == 0);
-        L->Val = GenCurrentPC ();     
-        ReleaseFullLineInfo (&L->LineInfos);
-        GetFullLineInfo (&L->LineInfos);
-    } else {
-        /* There is no such label, create it */
-        NewULabel (GenCurrentPC ());
-    }
-
-    /* We have one more defined label */
-    ++ULabDefCount;
-}
-
-
-
-int ULabCanResolve (void)
-/* Return true if we can resolve arbitrary ULabels. */
-{
-    /* We can resolve labels if we don't have any undefineds */
-    return (ULabDefCount == CollCount (&ULabList));
-}
-
-
-
-ExprNode* ULabResolve (unsigned Index)
-/* Return a valid expression for the unnamed label with the given index. This
-** is used to resolve unnamed labels when assembly is done, so it is an error
-** if a label is still undefined in this phase.
-*/
-{
-    /* Get the label and check that it is defined */
-    ULabel* L = CollAt (&ULabList, Index);
-    CHECK (L->Val != 0);
-
-    /* Return the label value */
-    return CloneExpr (L->Val);
-}
-
-
-
-void ULabDone (void)
-/* Run through all unnamed labels, check for anomalies and errors and do 
-** necessary cleanups.
-*/
-{
-    /* Check if there are undefined labels */
-    unsigned I = ULabDefCount;
-    while (I < CollCount (&ULabList)) {
-        ULabel* L = CollAtUnchecked (&ULabList, I);
-        LIError (&L->LineInfos, "Undefined label");
-        ++I;
-    }
-
-    /* Walk over all labels and emit a warning if any unreferenced ones
-    ** are found. Remove line infos because they're no longer needed.
-    */
-    for (I = 0; I < CollCount (&ULabList); ++I) {
-        ULabel* L = CollAtUnchecked (&ULabList, I);
-        if (L->Ref == 0) {
-            LIWarning (&L->LineInfos, 1, "No reference to unnamed label");
-        }
-        ReleaseFullLineInfo (&L->LineInfos);
-    }
-}
diff --git a/src/ca65/ulabel.h b/src/ca65/ulabel.h
deleted file mode 100644 (file)
index 67ea308..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 ulabel.h                                  */
-/*                                                                           */
-/*                Unnamed labels for the ca65 macroassembler                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ULABEL_H
-#define ULABEL_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-ExprNode* ULabRef (int Which);
-/* Get an unnamed label. If Which is negative, it is a backreference (a
-** reference to an already defined label), and the function will return a
-** segment relative expression. If Which is positive, it is a forward ref,
-** and the function will return a expression node for an unnamed label that
-** must be resolved later.
-*/
-
-void ULabDef (void);
-/* Define an unnamed label at the current PC */
-
-int ULabCanResolve (void);
-/* Return true if we can resolve arbitrary ULabels. */
-
-ExprNode* ULabResolve (unsigned Index);
-/* Return a valid expression for the unnamed label with the given index. This
-** is used to resolve unnamed labels when assembly is done, so it is an error
-** if a label is still undefined in this phase.
-*/
-
-void ULabDone (void);
-/* Run through all unnamed labels, check for anomalies and errors and do
-** necessary cleanups.
-*/
-
-
-
-/* End of ulabel.h */
-
-#endif
diff --git a/src/cc65.sln b/src/cc65.sln
deleted file mode 100644 (file)
index 9d0f2cc..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual C++ Express 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common", "common.vcxproj", "{71DC1F68-BFC4-478C-8655-C8E9C9654D2B}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cc65", "cc65.vcxproj", "{B17EDBD5-DC04-4970-9CBD-56A98B6A3FCA}"
-       ProjectSection(ProjectDependencies) = postProject
-               {71DC1F68-BFC4-478C-8655-C8E9C9654D2B} = {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}
-       EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ca65", "ca65.vcxproj", "{D28CB737-E6CA-49C4-8CE9-FF05F86DD4EC}"
-       ProjectSection(ProjectDependencies) = postProject
-               {71DC1F68-BFC4-478C-8655-C8E9C9654D2B} = {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}
-       EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ar65", "ar65.vcxproj", "{5E8C19C6-B167-440C-8BEF-3CBF109CDB49}"
-       ProjectSection(ProjectDependencies) = postProject
-               {71DC1F68-BFC4-478C-8655-C8E9C9654D2B} = {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}
-       EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ld65", "ld65.vcxproj", "{26C749A0-814C-47A2-9D36-AE92AE932FE4}"
-       ProjectSection(ProjectDependencies) = postProject
-               {71DC1F68-BFC4-478C-8655-C8E9C9654D2B} = {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}
-       EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cl65", "cl65.vcxproj", "{F657912F-050A-488B-B203-50ED5715CDD7}"
-       ProjectSection(ProjectDependencies) = postProject
-               {71DC1F68-BFC4-478C-8655-C8E9C9654D2B} = {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}
-       EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "da65", "da65.vcxproj", "{0BCFB793-2B25-40E2-B265-75848824AC4C}"
-       ProjectSection(ProjectDependencies) = postProject
-               {71DC1F68-BFC4-478C-8655-C8E9C9654D2B} = {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}
-       EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "co65", "co65.vcxproj", "{F5DB5D1A-05BC-48FE-B346-4E96DD522AA2}"
-       ProjectSection(ProjectDependencies) = postProject
-               {71DC1F68-BFC4-478C-8655-C8E9C9654D2B} = {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}
-       EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grc65", "grc65.vcxproj", "{E0FD0AB3-3BEE-496F-8108-A8E0F8933F39}"
-       ProjectSection(ProjectDependencies) = postProject
-               {71DC1F68-BFC4-478C-8655-C8E9C9654D2B} = {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}
-       EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "od65", "od65.vcxproj", "{FF8576C2-1253-44FE-A51B-D9AE35F3CEAD}"
-       ProjectSection(ProjectDependencies) = postProject
-               {71DC1F68-BFC4-478C-8655-C8E9C9654D2B} = {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}
-       EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sp65", "sp65.vcxproj", "{4388D1AF-C7EA-4AD4-8E80-CA1FB7BF76BF}"
-       ProjectSection(ProjectDependencies) = postProject
-               {71DC1F68-BFC4-478C-8655-C8E9C9654D2B} = {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}
-       EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sim65", "sim65.vcxproj", "{002A366E-2863-46A8-BDDE-DDF534AAEC73}"
-       ProjectSection(ProjectDependencies) = postProject
-               {71DC1F68-BFC4-478C-8655-C8E9C9654D2B} = {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}
-       EndProjectSection
-EndProject
-Global
-       GlobalSection(SolutionConfigurationPlatforms) = preSolution
-               Debug|Win32 = Debug|Win32
-               Release|Win32 = Release|Win32
-       EndGlobalSection
-       GlobalSection(ProjectConfigurationPlatforms) = postSolution
-               {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}.Debug|Win32.ActiveCfg = Debug|Win32
-               {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}.Debug|Win32.Build.0 = Debug|Win32
-               {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}.Release|Win32.ActiveCfg = Release|Win32
-               {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}.Release|Win32.Build.0 = Release|Win32
-               {B17EDBD5-DC04-4970-9CBD-56A98B6A3FCA}.Debug|Win32.ActiveCfg = Debug|Win32
-               {B17EDBD5-DC04-4970-9CBD-56A98B6A3FCA}.Debug|Win32.Build.0 = Debug|Win32
-               {B17EDBD5-DC04-4970-9CBD-56A98B6A3FCA}.Release|Win32.ActiveCfg = Release|Win32
-               {B17EDBD5-DC04-4970-9CBD-56A98B6A3FCA}.Release|Win32.Build.0 = Release|Win32
-               {D28CB737-E6CA-49C4-8CE9-FF05F86DD4EC}.Debug|Win32.ActiveCfg = Debug|Win32
-               {D28CB737-E6CA-49C4-8CE9-FF05F86DD4EC}.Debug|Win32.Build.0 = Debug|Win32
-               {D28CB737-E6CA-49C4-8CE9-FF05F86DD4EC}.Release|Win32.ActiveCfg = Release|Win32
-               {D28CB737-E6CA-49C4-8CE9-FF05F86DD4EC}.Release|Win32.Build.0 = Release|Win32
-               {5E8C19C6-B167-440C-8BEF-3CBF109CDB49}.Debug|Win32.ActiveCfg = Debug|Win32
-               {5E8C19C6-B167-440C-8BEF-3CBF109CDB49}.Debug|Win32.Build.0 = Debug|Win32
-               {5E8C19C6-B167-440C-8BEF-3CBF109CDB49}.Release|Win32.ActiveCfg = Release|Win32
-               {5E8C19C6-B167-440C-8BEF-3CBF109CDB49}.Release|Win32.Build.0 = Release|Win32
-               {26C749A0-814C-47A2-9D36-AE92AE932FE4}.Debug|Win32.ActiveCfg = Debug|Win32
-               {26C749A0-814C-47A2-9D36-AE92AE932FE4}.Debug|Win32.Build.0 = Debug|Win32
-               {26C749A0-814C-47A2-9D36-AE92AE932FE4}.Release|Win32.ActiveCfg = Release|Win32
-               {26C749A0-814C-47A2-9D36-AE92AE932FE4}.Release|Win32.Build.0 = Release|Win32
-               {F657912F-050A-488B-B203-50ED5715CDD7}.Debug|Win32.ActiveCfg = Debug|Win32
-               {F657912F-050A-488B-B203-50ED5715CDD7}.Debug|Win32.Build.0 = Debug|Win32
-               {F657912F-050A-488B-B203-50ED5715CDD7}.Release|Win32.ActiveCfg = Release|Win32
-               {F657912F-050A-488B-B203-50ED5715CDD7}.Release|Win32.Build.0 = Release|Win32
-               {0BCFB793-2B25-40E2-B265-75848824AC4C}.Debug|Win32.ActiveCfg = Debug|Win32
-               {0BCFB793-2B25-40E2-B265-75848824AC4C}.Debug|Win32.Build.0 = Debug|Win32
-               {0BCFB793-2B25-40E2-B265-75848824AC4C}.Release|Win32.ActiveCfg = Release|Win32
-               {0BCFB793-2B25-40E2-B265-75848824AC4C}.Release|Win32.Build.0 = Release|Win32
-               {F5DB5D1A-05BC-48FE-B346-4E96DD522AA2}.Debug|Win32.ActiveCfg = Debug|Win32
-               {F5DB5D1A-05BC-48FE-B346-4E96DD522AA2}.Debug|Win32.Build.0 = Debug|Win32
-               {F5DB5D1A-05BC-48FE-B346-4E96DD522AA2}.Release|Win32.ActiveCfg = Release|Win32
-               {F5DB5D1A-05BC-48FE-B346-4E96DD522AA2}.Release|Win32.Build.0 = Release|Win32
-               {E0FD0AB3-3BEE-496F-8108-A8E0F8933F39}.Debug|Win32.ActiveCfg = Debug|Win32
-               {E0FD0AB3-3BEE-496F-8108-A8E0F8933F39}.Debug|Win32.Build.0 = Debug|Win32
-               {E0FD0AB3-3BEE-496F-8108-A8E0F8933F39}.Release|Win32.ActiveCfg = Release|Win32
-               {E0FD0AB3-3BEE-496F-8108-A8E0F8933F39}.Release|Win32.Build.0 = Release|Win32
-               {FF8576C2-1253-44FE-A51B-D9AE35F3CEAD}.Debug|Win32.ActiveCfg = Debug|Win32
-               {FF8576C2-1253-44FE-A51B-D9AE35F3CEAD}.Debug|Win32.Build.0 = Debug|Win32
-               {FF8576C2-1253-44FE-A51B-D9AE35F3CEAD}.Release|Win32.ActiveCfg = Release|Win32
-               {FF8576C2-1253-44FE-A51B-D9AE35F3CEAD}.Release|Win32.Build.0 = Release|Win32
-               {4388D1AF-C7EA-4AD4-8E80-CA1FB7BF76BF}.Debug|Win32.ActiveCfg = Debug|Win32
-               {4388D1AF-C7EA-4AD4-8E80-CA1FB7BF76BF}.Debug|Win32.Build.0 = Debug|Win32
-               {4388D1AF-C7EA-4AD4-8E80-CA1FB7BF76BF}.Release|Win32.ActiveCfg = Release|Win32
-               {4388D1AF-C7EA-4AD4-8E80-CA1FB7BF76BF}.Release|Win32.Build.0 = Release|Win32
-               {002A366E-2863-46A8-BDDE-DDF534AAEC73}.Debug|Win32.ActiveCfg = Debug|Win32
-               {002A366E-2863-46A8-BDDE-DDF534AAEC73}.Debug|Win32.Build.0 = Debug|Win32
-               {002A366E-2863-46A8-BDDE-DDF534AAEC73}.Release|Win32.ActiveCfg = Release|Win32
-               {002A366E-2863-46A8-BDDE-DDF534AAEC73}.Release|Win32.Build.0 = Release|Win32
-       EndGlobalSection
-       GlobalSection(SolutionProperties) = preSolution
-               HideSolutionNode = FALSE
-       EndGlobalSection
-EndGlobal
diff --git a/src/cc65.vcxproj b/src/cc65.vcxproj
deleted file mode 100644 (file)
index 1c1f993..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{B17EDBD5-DC04-4970-9CBD-56A98B6A3FCA}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>cc65</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <LinkIncremental>true</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <WarningLevel>Level3</WarningLevel>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>false</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClInclude Include="cc65\anonname.h" />
-    <ClInclude Include="cc65\asmcode.h" />
-    <ClInclude Include="cc65\asmlabel.h" />
-    <ClInclude Include="cc65\asmstmt.h" />
-    <ClInclude Include="cc65\assignment.h" />
-    <ClInclude Include="cc65\casenode.h" />
-    <ClInclude Include="cc65\codeent.h" />
-    <ClInclude Include="cc65\codegen.h" />
-    <ClInclude Include="cc65\codeinfo.h" />
-    <ClInclude Include="cc65\codelab.h" />
-    <ClInclude Include="cc65\codeopt.h" />
-    <ClInclude Include="cc65\codeseg.h" />
-    <ClInclude Include="cc65\compile.h" />
-    <ClInclude Include="cc65\coptadd.h" />
-    <ClInclude Include="cc65\coptc02.h" />
-    <ClInclude Include="cc65\coptcmp.h" />
-    <ClInclude Include="cc65\coptind.h" />
-    <ClInclude Include="cc65\coptneg.h" />
-    <ClInclude Include="cc65\coptptrload.h" />
-    <ClInclude Include="cc65\coptptrstore.h" />
-    <ClInclude Include="cc65\coptpush.h" />
-    <ClInclude Include="cc65\coptshift.h" />
-    <ClInclude Include="cc65\coptsize.h" />
-    <ClInclude Include="cc65\coptstop.h" />
-    <ClInclude Include="cc65\coptstore.h" />
-    <ClInclude Include="cc65\coptsub.h" />
-    <ClInclude Include="cc65\copttest.h" />
-    <ClInclude Include="cc65\dataseg.h" />
-    <ClInclude Include="cc65\datatype.h" />
-    <ClInclude Include="cc65\declare.h" />
-    <ClInclude Include="cc65\declattr.h" />
-    <ClInclude Include="cc65\error.h" />
-    <ClInclude Include="cc65\expr.h" />
-    <ClInclude Include="cc65\exprdesc.h" />
-    <ClInclude Include="cc65\funcdesc.h" />
-    <ClInclude Include="cc65\function.h" />
-    <ClInclude Include="cc65\global.h" />
-    <ClInclude Include="cc65\goto.h" />
-    <ClInclude Include="cc65\hexval.h" />
-    <ClInclude Include="cc65\ident.h" />
-    <ClInclude Include="cc65\incpath.h" />
-    <ClInclude Include="cc65\input.h" />
-    <ClInclude Include="cc65\lineinfo.h" />
-    <ClInclude Include="cc65\litpool.h" />
-    <ClInclude Include="cc65\loadexpr.h" />
-    <ClInclude Include="cc65\locals.h" />
-    <ClInclude Include="cc65\loop.h" />
-    <ClInclude Include="cc65\macrotab.h" />
-    <ClInclude Include="cc65\opcodes.h" />
-    <ClInclude Include="cc65\output.h" />
-    <ClInclude Include="cc65\pragma.h" />
-    <ClInclude Include="cc65\preproc.h" />
-    <ClInclude Include="cc65\reginfo.h" />
-    <ClInclude Include="cc65\scanner.h" />
-    <ClInclude Include="cc65\scanstrbuf.h" />
-    <ClInclude Include="cc65\segments.h" />
-    <ClInclude Include="cc65\shiftexpr.h" />
-    <ClInclude Include="cc65\stackptr.h" />
-    <ClInclude Include="cc65\standard.h" />
-    <ClInclude Include="cc65\stdfunc.h" />
-    <ClInclude Include="cc65\stdnames.h" />
-    <ClInclude Include="cc65\stmt.h" />
-    <ClInclude Include="cc65\swstmt.h" />
-    <ClInclude Include="cc65\symentry.h" />
-    <ClInclude Include="cc65\symtab.h" />
-    <ClInclude Include="cc65\testexpr.h" />
-    <ClInclude Include="cc65\textseg.h" />
-    <ClInclude Include="cc65\typecmp.h" />
-    <ClInclude Include="cc65\typeconv.h" />
-    <ClInclude Include="cc65\util.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="cc65\anonname.c" />
-    <ClCompile Include="cc65\asmcode.c" />
-    <ClCompile Include="cc65\asmlabel.c" />
-    <ClCompile Include="cc65\asmstmt.c" />
-    <ClCompile Include="cc65\assignment.c" />
-    <ClCompile Include="cc65\casenode.c" />
-    <ClCompile Include="cc65\codeent.c" />
-    <ClCompile Include="cc65\codegen.c" />
-    <ClCompile Include="cc65\codeinfo.c" />
-    <ClCompile Include="cc65\codelab.c" />
-    <ClCompile Include="cc65\codeopt.c" />
-    <ClCompile Include="cc65\codeseg.c" />
-    <ClCompile Include="cc65\compile.c" />
-    <ClCompile Include="cc65\coptadd.c" />
-    <ClCompile Include="cc65\coptc02.c" />
-    <ClCompile Include="cc65\coptcmp.c" />
-    <ClCompile Include="cc65\coptind.c" />
-    <ClCompile Include="cc65\coptneg.c" />
-    <ClCompile Include="cc65\coptptrload.c" />
-    <ClCompile Include="cc65\coptptrstore.c" />
-    <ClCompile Include="cc65\coptpush.c" />
-    <ClCompile Include="cc65\coptshift.c" />
-    <ClCompile Include="cc65\coptsize.c" />
-    <ClCompile Include="cc65\coptstop.c" />
-    <ClCompile Include="cc65\coptstore.c" />
-    <ClCompile Include="cc65\coptsub.c" />
-    <ClCompile Include="cc65\copttest.c" />
-    <ClCompile Include="cc65\dataseg.c" />
-    <ClCompile Include="cc65\datatype.c" />
-    <ClCompile Include="cc65\declare.c" />
-    <ClCompile Include="cc65\declattr.c" />
-    <ClCompile Include="cc65\error.c" />
-    <ClCompile Include="cc65\expr.c" />
-    <ClCompile Include="cc65\exprdesc.c" />
-    <ClCompile Include="cc65\funcdesc.c" />
-    <ClCompile Include="cc65\function.c" />
-    <ClCompile Include="cc65\global.c" />
-    <ClCompile Include="cc65\goto.c" />
-    <ClCompile Include="cc65\hexval.c" />
-    <ClCompile Include="cc65\ident.c" />
-    <ClCompile Include="cc65\incpath.c" />
-    <ClCompile Include="cc65\input.c" />
-    <ClCompile Include="cc65\lineinfo.c" />
-    <ClCompile Include="cc65\litpool.c" />
-    <ClCompile Include="cc65\loadexpr.c" />
-    <ClCompile Include="cc65\locals.c" />
-    <ClCompile Include="cc65\loop.c" />
-    <ClCompile Include="cc65\macrotab.c" />
-    <ClCompile Include="cc65\main.c" />
-    <ClCompile Include="cc65\opcodes.c" />
-    <ClCompile Include="cc65\output.c" />
-    <ClCompile Include="cc65\pragma.c" />
-    <ClCompile Include="cc65\preproc.c" />
-    <ClCompile Include="cc65\reginfo.c" />
-    <ClCompile Include="cc65\scanner.c" />
-    <ClCompile Include="cc65\scanstrbuf.c" />
-    <ClCompile Include="cc65\segments.c" />
-    <ClCompile Include="cc65\shiftexpr.c" />
-    <ClCompile Include="cc65\stackptr.c" />
-    <ClCompile Include="cc65\standard.c" />
-    <ClCompile Include="cc65\stdfunc.c" />
-    <ClCompile Include="cc65\stdnames.c" />
-    <ClCompile Include="cc65\stmt.c" />
-    <ClCompile Include="cc65\swstmt.c" />
-    <ClCompile Include="cc65\symentry.c" />
-    <ClCompile Include="cc65\symtab.c" />
-    <ClCompile Include="cc65\testexpr.c" />
-    <ClCompile Include="cc65\textseg.c" />
-    <ClCompile Include="cc65\typecmp.c" />
-    <ClCompile Include="cc65\typeconv.c" />
-    <ClCompile Include="cc65\util.c" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/src/cc65/.lclintrc b/src/cc65/.lclintrc
deleted file mode 100644 (file)
index 51fe9f0..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-+boolint
--boolops
--retvalint
--retvalother
--I../common
diff --git a/src/cc65/anonname.c b/src/cc65/anonname.c
deleted file mode 100644 (file)
index d02253d..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                anonname.c                                 */
-/*                                                                           */
-/*                Create names for anonymous variables/types                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-
-/* common */
-#include "xsprintf.h"
-
-/* cc65 */
-#include "anonname.h"
-#include "ident.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-static const char AnonTag[] = "$anon";
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-char* AnonName (char* Buf, const char* Spec)
-/* Get a name for an anonymous variable or type. The given buffer is expected
-** to be IDENTSIZE characters long. A pointer to the buffer is returned.
-*/
-{
-    static unsigned ACount = 0;
-    xsprintf (Buf, IDENTSIZE, "%s-%s-%04X", AnonTag, Spec, ++ACount);
-    return Buf;
-}
-
-
-
-int IsAnonName (const char* Name)
-/* Check if the given symbol name is that of an anonymous symbol */
-{
-    return (strncmp (Name, AnonTag, sizeof (AnonTag) - 1) == 0);
-}
diff --git a/src/cc65/anonname.h b/src/cc65/anonname.h
deleted file mode 100644 (file)
index dfaa1bd..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                anonname.h                                 */
-/*                                                                           */
-/*                Create names for anonymous variables/types                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ANONNAME_H
-#define ANONNAME_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-char* AnonName (char* Buf, const char* Spec);
-/* Get a name for an anonymous variable or type. The given buffer is expected
-** to be IDENTSIZE characters long. A pointer to the buffer is returned.
-*/
-
-int IsAnonName (const char* Name);
-/* Check if the given symbol name is that of an anonymous symbol */
-
-
-
-/* End of anonname.h */
-
-#endif
diff --git a/src/cc65/asmcode.c b/src/cc65/asmcode.c
deleted file mode 100644 (file)
index ee50d6f..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 asmcode.c                                 */
-/*                                                                           */
-/*          Assembler output code handling for the cc65 C compiler           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "check.h"
-
-/* cc65 */
-#include "asmcode.h"
-#include "codeseg.h"
-#include "dataseg.h"
-#include "segments.h"
-#include "stackptr.h"
-#include "symtab.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void GetCodePos (CodeMark* M)
-/* Get a marker pointing to the current output position */
-{
-    M->Pos = CS_GetEntryCount (CS->Code);
-    M->SP  = StackPtr;
-}
-
-
-
-void RemoveCodeRange (const CodeMark* Start, const CodeMark* End)
-/* Remove all code between two code markers */
-{
-    /* Nothing to do if the range is empty */
-    if (Start->Pos == End->Pos) {
-        return;
-    }
-
-    /* Delete the range */
-    CS_DelCodeRange (CS->Code, Start->Pos, End->Pos-1);
-}
-
-
-
-void RemoveCode (const CodeMark* M)
-/* Remove all code after the given code marker */
-{
-    CS_DelCodeAfter (CS->Code, M->Pos);
-    StackPtr = M->SP;
-}
-
-
-
-void MoveCode (const CodeMark* Start, const CodeMark* End, const CodeMark* Target)
-/* Move the code between Start (inclusive) and End (exclusive) to
-** (before) Target. The code marks aren't updated.
-*/
-{
-    CS_MoveEntries (CS->Code, Start->Pos, End->Pos - Start->Pos, Target->Pos);
-}
-
-
-
-int CodeRangeIsEmpty (const CodeMark* Start, const CodeMark* End)
-/* Return true if the given code range is empty (no code between Start and End) */
-{
-    int Empty;
-    PRECONDITION (Start->Pos <= End->Pos);
-    Empty = (Start->Pos == End->Pos);
-    if (Empty) {
-        /* Safety */
-        CHECK (Start->SP == End->SP);
-    }
-    return Empty;
-}
-
-
-
-void WriteAsmOutput (void)
-/* Write the final assembler output to the output file */
-{
-    SymTable* SymTab;
-    SymEntry* Entry;
-
-    /* Output the global data segment */
-    CHECK (!HaveGlobalCode ());
-    OutputSegments (CS);
-
-    /* Output all global or referenced functions */
-    SymTab = GetGlobalSymTab ();
-    Entry  = SymTab->SymHead;
-    while (Entry) {
-        if (SymIsOutputFunc (Entry)) {
-            /* Function which is defined and referenced or extern */
-            OutputSegments (Entry->V.F.Seg);
-        }
-        Entry = Entry->NextSym;
-    }
-}
diff --git a/src/cc65/asmcode.h b/src/cc65/asmcode.h
deleted file mode 100644 (file)
index ad079d0..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 asmcode.h                                 */
-/*                                                                           */
-/*          Assembler output code handling for the cc65 C compiler           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ASMCODE_H
-#define ASMCODE_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "attrib.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Marker for an assembler code position */
-typedef struct {
-    unsigned    Pos;            /* Code position */
-    int         SP;             /* Stack pointer at this position */
-} CodeMark;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void GetCodePos (CodeMark* M);
-/* Get a marker pointing to the current output position */
-
-void RemoveCodeRange (const CodeMark* Start, const CodeMark* End);
-/* Remove all code between two code markers */
-
-void RemoveCode (const CodeMark* M);
-/* Remove all code after the given code marker */
-
-void MoveCode (const CodeMark* Start, const CodeMark* End, const CodeMark* Target);
-/* Move the code between Start (inclusive) and End (exclusive) to
-** (before) Target. The code marks aren't updated.
-*/
-
-int CodeRangeIsEmpty (const CodeMark* Start, const CodeMark* End);
-/* Return true if the given code range is empty (no code between Start and End) */
-
-void WriteAsmOutput (void);
-/* Write the final assembler output to the output file */
-
-
-
-/* End of asmcode.h */
-
-#endif
diff --git a/src/cc65/asmlabel.c b/src/cc65/asmlabel.c
deleted file mode 100644 (file)
index 09aee3b..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                asmlabel.c                                 */
-/*                                                                           */
-/*                      Generate assembler code labels                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2009 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-
-/* common */
-#include "chartype.h"
-
-/* cc65 */
-#include "asmlabel.h"
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned GetLocalLabel (void)
-/* Get an unused label. Will never return zero. */
-{
-    /* Number to generate unique labels */
-    static unsigned NextLabel = 0;
-
-    /* Check for an overflow */
-    if (NextLabel >= 0xFFFF) {
-        Internal ("Local label overflow");
-    }
-
-    /* Return the next label */
-    return ++NextLabel;
-}
-
-
-
-const char* LocalLabelName (unsigned L)
-/* Make a label name from the given label number. The label name will be
-** created in static storage and overwritten when calling the function
-** again.
-*/
-{
-    static char Buf[64];
-    sprintf (Buf, "L%04X", L);
-    return Buf;
-}
-
-
-
-int IsLocalLabelName (const char* Name)
-/* Return true if Name is the name of a local label */
-{
-    unsigned I;
-
-    if (Name[0] != 'L' || strlen (Name) != 5) {
-        return 0;
-    }
-    for (I = 1; I <= 4; ++I) {
-        if (!IsXDigit (Name[I])) {
-            return 0;
-        }
-    }
-
-    /* Local label name */
-    return 1;
-}
diff --git a/src/cc65/asmlabel.h b/src/cc65/asmlabel.h
deleted file mode 100644 (file)
index 4a76643..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                asmlabel.h                                 */
-/*                                                                           */
-/*                      Generate assembler code labels                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2009 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ASMLABEL_H
-#define ASMLABEL_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned GetLocalLabel (void);
-/* Get an unused assembler label. Will never return zero. */
-
-const char* LocalLabelName (unsigned L);
-/* Make a label name from the given label number. The label name will be
-** created in static storage and overwritten when calling the function
-** again.
-*/
-
-int IsLocalLabelName (const char* Name);
-/* Return true if Name is the name of a local label */
-
-
-
-/* End of asmlabel.h */
-
-#endif
diff --git a/src/cc65/asmstmt.c b/src/cc65/asmstmt.c
deleted file mode 100644 (file)
index 59c1332..0000000
+++ /dev/null
@@ -1,449 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 asmstmt.c                                 */
-/*                                                                           */
-/*            Inline assembler statements for the cc65 C compiler            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2008 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "xsprintf.h"
-
-/* cc65 */
-#include "asmlabel.h"
-#include "codegen.h"
-#include "datatype.h"
-#include "error.h"
-#include "expr.h"
-#include "function.h"
-#include "litpool.h"
-#include "scanner.h"
-#include "stackptr.h"
-#include "symtab.h"
-#include "asmstmt.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void AsmRangeError (unsigned Arg)
-/* Print a diagnostic about a range error in the argument with the given number */
-{
-    Error ("Range error in argument %u", Arg);
-}
-
-
-
-static void AsmErrorSkip (void)
-/* Called in case of an error, skips tokens until the closing paren or a
-** semicolon is reached.
-*/
-{
-    static const token_t TokenList[] = { TOK_RPAREN, TOK_SEMI };
-    SkipTokens (TokenList, sizeof(TokenList) / sizeof(TokenList[0]));
-}
-
-
-
-static SymEntry* AsmGetSym (unsigned Arg, unsigned Type)
-/* Find the symbol with the name currently in NextTok. The symbol must be of
-** the given type. On errors, NULL is returned.
-*/
-{
-    SymEntry* Sym;
-
-    /* We expect an argument separated by a comma */
-    ConsumeComma ();
-
-    /* Argument must be an identifier */
-    if (CurTok.Tok != TOK_IDENT) {
-        Error ("Identifier expected for argument %u", Arg);
-        AsmErrorSkip ();
-        return 0;
-    }
-
-    /* Get a pointer to the symbol table entry */
-    Sym = FindSym (CurTok.Ident);
-
-    /* Did we find a symbol with this name? */
-    if (Sym == 0) {
-        Error ("Undefined symbol `%s' for argument %u", CurTok.Ident, Arg);
-        AsmErrorSkip ();
-        return 0;
-    }
-
-    /* We found the symbol - skip the name token */
-    NextToken ();
-
-    /* Check if we have a global symbol */
-    if ((Sym->Flags & Type) != Type) {
-        Error ("Type of argument %u differs from format specifier", Arg);
-        AsmErrorSkip ();
-        return 0;
-    }
-
-    /* Mark the symbol as referenced */
-    Sym->Flags |= SC_REF;
-
-    /* Return it */
-    return Sym;
-}
-
-
-
-static void ParseByteArg (StrBuf* T, unsigned Arg)
-/* Parse the %b format specifier */
-{
-    ExprDesc Expr;
-    char     Buf [16];
-
-    /* We expect an argument separated by a comma */
-    ConsumeComma ();
-
-    /* Evaluate the expression */
-    ConstAbsIntExpr (hie1, &Expr);
-
-    /* Check the range but allow negative values if the type is signed */
-    if (IsSignUnsigned (Expr.Type)) {
-        if (Expr.IVal < 0 || Expr.IVal > 0xFF) {
-            AsmRangeError (Arg);
-            Expr.IVal = 0;
-        }
-    } else {
-        if (Expr.IVal < -128 || Expr.IVal > 127) {
-            AsmRangeError (Arg);
-            Expr.IVal = 0;
-        }
-    }
-
-    /* Convert into a hex number */
-    xsprintf (Buf, sizeof (Buf), "$%02lX", Expr.IVal & 0xFF);
-
-    /* Add the number to the target buffer */
-    SB_AppendStr (T, Buf);
-}
-
-
-
-static void ParseWordArg (StrBuf* T, unsigned Arg)
-/* Parse the %w format specifier */
-{
-    ExprDesc Expr;
-    char     Buf [16];
-
-    /* We expect an argument separated by a comma */
-    ConsumeComma ();
-
-    /* Evaluate the expression */
-    ConstAbsIntExpr (hie1, &Expr);
-
-    /* Check the range but allow negative values if the type is signed */
-    if (IsSignUnsigned (Expr.Type)) {
-        if (Expr.IVal < 0 || Expr.IVal > 0xFFFF) {
-            AsmRangeError (Arg);
-            Expr.IVal = 0;
-        }
-    } else {
-        if (Expr.IVal < -32768 || Expr.IVal > 32767) {
-            AsmRangeError (Arg);
-            Expr.IVal = 0;
-        }
-    }
-
-    /* Convert into a hex number */
-    xsprintf (Buf, sizeof (Buf), "$%04lX", Expr.IVal & 0xFFFF);
-
-    /* Add the number to the target buffer */
-    SB_AppendStr (T, Buf);
-}
-
-
-
-static void ParseLongArg (StrBuf* T, unsigned Arg attribute ((unused)))
-/* Parse the %l format specifier */
-{
-    ExprDesc Expr;
-    char     Buf [16];
-
-    /* We expect an argument separated by a comma */
-    ConsumeComma ();
-
-    /* Evaluate the expression */
-    ConstAbsIntExpr (hie1, &Expr);
-
-    /* Convert into a hex number */
-    xsprintf (Buf, sizeof (Buf), "$%08lX", Expr.IVal & 0xFFFFFFFF);
-
-    /* Add the number to the target buffer */
-    SB_AppendStr (T, Buf);
-}
-
-
-
-static void ParseGVarArg (StrBuf* T, unsigned Arg)
-/* Parse the %v format specifier */
-{
-    /* Parse the symbol name parameter and check the type */
-    SymEntry* Sym = AsmGetSym (Arg, SC_STATIC);
-    if (Sym == 0) {
-        /* Some sort of error */
-        return;
-    }
-
-    /* Check for external linkage */
-    if (Sym->Flags & (SC_EXTERN | SC_STORAGE | SC_FUNC)) {
-        /* External linkage or a function */
-        /* ### FIXME: Asm name should be generated by codegen */
-        SB_AppendChar (T, '_');
-        SB_AppendStr (T, Sym->Name);
-    } else if (Sym->Flags & SC_REGISTER) {
-        char Buf[32];
-        xsprintf (Buf, sizeof (Buf), "regbank+%d", Sym->V.R.RegOffs);
-        SB_AppendStr (T, Buf);
-    } else {
-        /* Static variable */
-        char Buf [16];
-        xsprintf (Buf, sizeof (Buf), "L%04X", Sym->V.Label);
-        SB_AppendStr (T, Buf);
-    }
-}
-
-
-
-static void ParseLVarArg (StrBuf* T, unsigned Arg)
-/* Parse the %o format specifier */
-{
-    unsigned Offs;
-    char Buf [16];
-
-    /* Parse the symbol name parameter and check the type */
-    SymEntry* Sym = AsmGetSym (Arg, SC_AUTO);
-    if (Sym == 0) {
-        /* Some sort of error */
-        return;
-    }
-
-    /* The symbol may be a parameter to a variadic function. In this case, we
-    ** don't have a fixed stack offset, so check it and bail out with an error
-    ** if this is the case.
-    */
-    if ((Sym->Flags & SC_PARAM) == SC_PARAM && F_IsVariadic (CurrentFunc)) {
-        Error ("Argument %u has no fixed stack offset", Arg);
-        AsmErrorSkip ();
-        return;
-    }
-
-    /* Calculate the current offset from SP */
-    Offs = Sym->V.Offs - StackPtr;
-
-    /* Output the offset */
-    xsprintf (Buf, sizeof (Buf), (Offs > 0xFF)? "$%04X" : "$%02X", Offs);
-    SB_AppendStr (T, Buf);
-}
-
-
-
-static void ParseLabelArg (StrBuf* T, unsigned Arg attribute ((unused)))
-/* Parse the %g format specifier */
-{
-    /* We expect an identifier separated by a comma */
-    ConsumeComma ();
-    if (CurTok.Tok != TOK_IDENT) {
-
-        Error ("Label name expected");
-
-    } else {
-
-        /* Add a new label symbol if we don't have one until now */
-        SymEntry* Entry = AddLabelSym (CurTok.Ident, SC_REF);
-
-        /* Append the label name to the buffer */
-        SB_AppendStr (T, LocalLabelName (Entry->V.Label));
-
-        /* Eat the label name */
-        NextToken ();
-
-    }
-}
-
-
-
-static void ParseStrArg (StrBuf* T, unsigned Arg attribute ((unused)))
-/* Parse the %s format specifier */
-{
-    ExprDesc Expr;
-    char Buf [64];
-
-    /* We expect an argument separated by a comma */
-    ConsumeComma ();
-
-    /* Check what comes */
-    switch (CurTok.Tok) {
-
-        case TOK_IDENT:
-            /* Identifier */
-            SB_AppendStr (T, CurTok.Ident);
-            NextToken ();
-            break;
-
-        case TOK_SCONST:
-            /* String constant */
-            SB_Append (T, GetLiteralStrBuf (CurTok.SVal));
-            NextToken ();
-            break;
-
-        default:
-            ConstAbsIntExpr (hie1, &Expr);
-            xsprintf (Buf, sizeof (Buf), "%ld", Expr.IVal);
-            SB_AppendStr (T, Buf);
-            break;
-    }
-}
-
-
-
-static void ParseAsm (void)
-/* Parse the contents of the ASM statement */
-{
-    unsigned Arg;
-    char     C;
-
-    /* Create a target string buffer */
-    StrBuf T = AUTO_STRBUF_INITIALIZER;
-
-    /* Create a string buffer from the string literal */
-    StrBuf S = AUTO_STRBUF_INITIALIZER;
-    SB_Append (&S, GetLiteralStrBuf (CurTok.SVal));
-
-    /* Skip the string token */
-    NextToken ();
-
-    /* Parse the statement. It may contain several lines and one or more
-    ** of the following place holders:
-    **   %b     - Numerical 8 bit value
-    **   %w     - Numerical 16 bit value
-    **   %l     - Numerical 32 bit value
-    **   %v     - Assembler name of a (global) variable
-    **   %o     - Stack offset of a (local) variable
-    **   %g     - Assembler name of a C label
-    **   %s     - Any argument converted to a string (almost)
-    **   %%     - The % sign
-    */
-    Arg = 0;
-    while ((C = SB_Get (&S)) != '\0') {
-
-        /* If it is a newline, the current line is ready to go */
-        if (C == '\n') {
-
-            /* Pass it to the backend and start over */
-            g_asmcode (&T);
-            SB_Clear (&T);
-
-        } else if (C == '%') {
-
-            /* Format specifier */
-            ++Arg;
-            C = SB_Get (&S);
-            switch (C) {
-                case '%':   SB_AppendChar (&T, '%');    break;
-                case 'b':   ParseByteArg (&T, Arg);     break;
-                case 'g':   ParseLabelArg (&T, Arg);    break;
-                case 'l':   ParseLongArg (&T, Arg);     break;
-                case 'o':   ParseLVarArg (&T, Arg);     break;
-                case 's':   ParseStrArg (&T, Arg);      break;
-                case 'v':   ParseGVarArg (&T, Arg);     break;
-                case 'w':   ParseWordArg (&T, Arg);     break;
-                default:
-                    Error ("Error in __asm__ format specifier %u", Arg);
-                    AsmErrorSkip ();
-                    goto Done;
-            }
-
-        } else {
-
-            /* A normal character, just copy it */
-            SB_AppendChar (&T, C);
-
-        }
-    }
-
-    /* If the target buffer is not empty, we have a last line in there */
-    if (!SB_IsEmpty (&T)) {
-        g_asmcode (&T);
-    }
-
-Done:
-    /* Call the string buf destructors */
-    SB_Done (&S);
-    SB_Done (&T);
-}
-
-
-
-void AsmStatement (void)
-/* This function parses ASM statements. The syntax of the ASM directive
-** looks like the one defined for C++ (C has no ASM directive), that is,
-** a string literal in parenthesis.
-*/
-{
-    /* Skip the ASM */
-    NextToken ();
-
-    /* Need left parenthesis */
-    if (!ConsumeLParen ()) {
-        return;
-    }
-
-    /* String literal */
-    if (CurTok.Tok != TOK_SCONST) {
-
-        /* Print a diagnostic */
-        Error ("String literal expected");
-
-        /* Try some smart error recovery: Skip tokens until we reach the
-        ** enclosing paren, or a semicolon.
-        */
-        AsmErrorSkip ();
-
-    } else {
-
-        /* Parse the ASM statement */
-        ParseAsm ();
-    }
-
-    /* Closing paren needed */
-    ConsumeRParen ();
-}
diff --git a/src/cc65/asmstmt.h b/src/cc65/asmstmt.h
deleted file mode 100644 (file)
index 2884a38..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 asmstmt.h                                 */
-/*                                                                           */
-/*            Inline assembler statements for the cc65 C compiler            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ASMSTMT_H
-#define ASMSTMT_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void AsmStatement (void);
-/* This function parses ASM statements. The syntax of the ASM directive
-** looks like the one defined for C++ (C has no ASM directive), that is,
-** a string literal in parenthesis.
-*/
-
-
-
-/* End of asmstmt.h */
-
-#endif
diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c
deleted file mode 100644 (file)
index f0607ac..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                               assignment.c                                */
-/*                                                                           */
-/*                             Parse assignments                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* cc65 */
-#include "asmcode.h"
-#include "assignment.h"
-#include "codegen.h"
-#include "datatype.h"
-#include "error.h"
-#include "expr.h"
-#include "loadexpr.h"
-#include "scanner.h"
-#include "stdnames.h"
-#include "typecmp.h"
-#include "typeconv.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Assignment (ExprDesc* Expr)
-/* Parse an assignment */
-{
-    ExprDesc Expr2;
-    Type* ltype = Expr->Type;
-
-
-    /* We must have an lvalue for an assignment */
-    if (ED_IsRVal (Expr)) {
-        Error ("Invalid lvalue in assignment");
-    }
-
-    /* Check for assignment to const */
-    if (IsQualConst (ltype)) {
-        Error ("Assignment to const");
-    }
-
-    /* Skip the '=' token */
-    NextToken ();
-
-    /* cc65 does not have full support for handling structs by value. Since
-    ** assigning structs is one of the more useful operations from this
-    ** family, allow it here.
-    */
-    if (IsClassStruct (ltype)) {
-
-        /* Get the size of the left hand side. */
-        unsigned Size = SizeOf (ltype);
-
-        /* If the size is that of a basic type (char, int, long), we will copy
-        ** the struct using the primary register, otherwise we use memcpy. In
-        ** the former case, push the address only if really needed.
-        */
-        int UseReg = 1;
-        Type* stype;
-        switch (Size) {
-            case SIZEOF_CHAR:   stype = type_uchar;             break;
-            case SIZEOF_INT:    stype = type_uint;              break;
-            case SIZEOF_LONG:   stype = type_ulong;             break;
-            default:            stype = ltype; UseReg = 0;      break;
-        }
-        if (UseReg) {
-            PushAddr (Expr);
-        } else {
-            ED_MakeRVal (Expr);
-            LoadExpr (CF_NONE, Expr);
-            g_push (CF_PTR | CF_UNSIGNED, 0);
-        }
-
-        /* Get the expression on the right of the '=' into the primary */
-        hie1 (&Expr2);
-
-        /* Check for equality of the structs */
-        if (TypeCmp (ltype, Expr2.Type) < TC_STRICT_COMPATIBLE) {
-            Error ("Incompatible types");
-        }
-
-        /* Check if the right hand side is an lvalue */
-        if (ED_IsLVal (&Expr2)) {
-            /* We have an lvalue. Do we copy using the primary? */
-            if (UseReg) {
-                /* Just use the replacement type */
-                Expr2.Type = stype;
-
-                /* Load the value into the primary */
-                LoadExpr (CF_FORCECHAR, &Expr2);
-
-                /* Store it into the new location */
-                Store (Expr, stype);
-
-            } else {
-
-                /* We will use memcpy. Push the address of the rhs */
-                ED_MakeRVal (&Expr2);
-                LoadExpr (CF_NONE, &Expr2);
-
-                /* Push the address (or whatever is in ax in case of errors) */
-                g_push (CF_PTR | CF_UNSIGNED, 0);
-
-                /* Load the size of the struct into the primary */
-                g_getimmed (CF_INT | CF_UNSIGNED | CF_CONST, CheckedSizeOf (ltype), 0);
-
-                /* Call the memcpy function */
-                g_call (CF_FIXARGC, Func_memcpy, 4);
-            }
-
-        } else {
-
-            /* We have an rvalue. This can only happen if a function returns
-            ** a struct, since there is no other way to generate an expression
-            ** that has a struct as an rvalue result. We allow only 1, 2, and 4
-            ** byte sized structs, and do direct assignment.
-            */
-            if (UseReg) {
-                /* Do the store */
-                Store (Expr, stype);
-            } else {
-                /* Print a diagnostic */
-                Error ("Structs of this size are not supported");
-                /* Adjust the stack so we won't run in an internal error later */
-                pop (CF_PTR);
-            }
-
-        }
-
-    } else if (ED_IsBitField (Expr)) {
-
-        CodeMark AndPos;
-        CodeMark PushPos;
-
-        unsigned Mask;
-        unsigned Flags;
-
-        /* If the bit-field fits within one byte, do the following operations
-        ** with bytes.
-        */
-        if (Expr->BitOffs / CHAR_BITS == (Expr->BitOffs + Expr->BitWidth - 1) / CHAR_BITS) {
-            Expr->Type = type_uchar;
-        }
-
-        /* Determine code generator flags */
-        Flags = TypeOf (Expr->Type);
-
-        /* Assignment to a bit field. Get the address on stack for the store. */
-        PushAddr (Expr);
-
-        /* Load the value from the location */
-        Expr->Flags &= ~E_BITFIELD;
-        LoadExpr (CF_NONE, Expr);
-
-        /* Mask unwanted bits */
-        Mask = (0x0001U << Expr->BitWidth) - 1U;
-        GetCodePos (&AndPos);
-        g_and (Flags | CF_CONST, ~(Mask << Expr->BitOffs));
-
-        /* Push it on stack */
-        GetCodePos (&PushPos);
-        g_push (Flags, 0);
-
-        /* Read the expression on the right side of the '=' */
-        MarkedExprWithCheck (hie1, &Expr2);
-
-        /* Do type conversion if necessary. Beware: Do not use char type
-        ** here!
-        */
-        TypeConversion (&Expr2, ltype);
-
-        /* Special treatment if the value is constant. */
-        /* Beware: Expr2 may contain side effects, so there must not be
-        ** code generated for Expr2.
-        */
-        if (ED_IsConstAbsInt (&Expr2) && ED_CodeRangeIsEmpty (&Expr2)) {
-
-            /* Get the value and apply the mask */
-            unsigned Val = (unsigned) (Expr2.IVal & Mask);
-
-            /* Since we will do the OR with a constant, we can remove the push */
-            RemoveCode (&PushPos);
-
-            /* If the value is equal to the mask now, all bits are one, and we
-            ** can remove the mask operation from above.
-            */
-            if (Val == Mask) {
-                RemoveCode (&AndPos);
-            }
-
-            /* Generate the or operation */
-            g_or (Flags | CF_CONST, Val << Expr->BitOffs);
-
-        } else {
-
-            /* If necessary, load the value into the primary register */
-            LoadExpr (CF_NONE, &Expr2);
-
-            /* Apply the mask */
-            g_and (Flags | CF_CONST, Mask);
-
-            /* Shift it into the right position */
-            g_asl (Flags | CF_CONST, Expr->BitOffs);
-
-            /* Or both values */
-            g_or (Flags, 0);
-        }
-
-        /* Generate a store instruction */
-        Store (Expr, 0);
-
-        /* Restore the expression type */
-        Expr->Type = ltype;
-
-    } else {
-
-        /* Get the address on stack if needed */
-        PushAddr (Expr);
-
-        /* Read the expression on the right side of the '=' */
-        hie1 (&Expr2);
-
-        /* Do type conversion if necessary */
-        TypeConversion (&Expr2, ltype);
-
-        /* If necessary, load the value into the primary register */
-        LoadExpr (CF_NONE, &Expr2);
-
-        /* Generate a store instruction */
-        Store (Expr, 0);
-
-    }
-
-    /* Value is still in primary and not an lvalue */
-    ED_MakeRValExpr (Expr);
-}
diff --git a/src/cc65/assignment.h b/src/cc65/assignment.h
deleted file mode 100644 (file)
index 278c5ef..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                               assignment.h                                */
-/*                                                                           */
-/*                             Parse assignments                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2004 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ASSIGNMENT_H
-#define ASSIGNMENT_H
-
-
-
-/* cc65 */
-#include "exprdesc.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Assignment (ExprDesc* lval);
-/* Parse an assignment */
-
-
-
-/* End of assignment.h */
-
-#endif
diff --git a/src/cc65/casenode.c b/src/cc65/casenode.c
deleted file mode 100644 (file)
index f5e751f..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                casenode.c                                 */
-/*                                                                           */
-/*        Node for the tree that is generated for a switch statement         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <limits.h>
-
-/* common */
-#include "coll.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "asmlabel.h"
-#include "error.h"
-#include "casenode.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-CaseNode* NewCaseNode (unsigned char Value)
-/* Create and initialize a new CaseNode */
-{
-    /* Allocate memory */
-    CaseNode* N = xmalloc (sizeof (CaseNode));
-
-    /* Initialize the fields */
-    N->Value = Value;
-    N->Label = 0;
-    N->Nodes = 0;
-
-    /* Return the new node */
-    return N;
-}
-
-
-
-void FreeCaseNode (CaseNode* N)
-/* Delete a case node plus all sub nodes */
-{
-    if (N->Nodes) {
-        FreeCaseNodeColl (N->Nodes);
-    }
-    xfree (N);
-}
-
-
-
-void FreeCaseNodeColl (Collection* Nodes)
-/* Free a collection of case nodes */
-{
-    unsigned I;
-    for (I = 0; I < CollCount (Nodes); ++I) {
-        FreeCaseNode (CollAtUnchecked (Nodes, I));
-    }
-    FreeCollection (Nodes);
-}
-
-
-
-int SearchCaseNode (const Collection* Nodes, unsigned char Key, int* Index)
-/* Search for a node in the given collection. If the node has been found,
-** set Index to the index of the node and return true. If the node was not
-** found, set Index the the insertion position of the node and return
-** false.
-*/
-{
-    /* Do a binary search */
-    int First = 0;
-    int Last = CollCount (Nodes) - 1;
-    int S = 0;
-
-    while (First <= Last) {
-
-        /* Set current to mid of range */
-        int Current = (Last + First) / 2;
-
-        /* Get the entry from this position */
-        const CaseNode* N = CollConstAt (Nodes, Current);
-
-        /* Compare the values */
-        if (N->Value < Key) {
-            First = Current + 1;
-        } else {
-            Last = Current - 1;
-            if (N->Value == Key) {
-                /* Found. We cannot have duplicates, so end the search here. */
-                S = 1;
-                First = Current;
-            }
-        }
-
-    }
-
-    *Index = First;
-    return S;
-}
-
-
-
-unsigned InsertCaseValue (Collection* Nodes, unsigned long Val, unsigned Depth)
-/* Insert a new case value into a CaseNode tree with the given depth. Return
-** the code label for the value.
-*/
-{
-    CaseNode* N = 0;
-    unsigned CaseLabel = GetLocalLabel ();  /* Code label */
-
-    while (Depth--) {
-
-        int Index;
-
-        /* Get the key */
-        unsigned char Key = (Val >> (Depth * CHAR_BIT)) & 0xFF;
-
-        /* Search for the node in the collection */
-        if (SearchCaseNode (Nodes, Key, &Index) == 0) {
-
-            /* Node not found - insert one */
-            N = NewCaseNode (Key);
-            CollInsert (Nodes, N, Index);
-
-            /* If this is not the last round, create the collection for
-            ** the subnodes, otherwise get a label for the code.
-            */
-            if (Depth > 0) {
-                N->Nodes = NewCollection ();
-            } else {
-                N->Label = CaseLabel;
-            }
-
-        } else {
-            /* Node found, get it */
-            N = CollAt (Nodes, Index);
-
-            /* If this is the last round and we found a node, we have a
-            ** duplicate case label in a switch.
-            */
-            if (Depth == 0) {
-                Error ("Duplicate case label");
-            }
-        }
-
-        /* Get the collection from the node for the next round. */
-        Nodes = N->Nodes;
-    }
-
-    /* Return the label of the node we found/created */
-    return CaseLabel;
-}
diff --git a/src/cc65/casenode.h b/src/cc65/casenode.h
deleted file mode 100644 (file)
index aef546f..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                casenode.h                                 */
-/*                                                                           */
-/*        Node for the tree that is generated for a switch statement         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef CASENODE_H
-#define CASENODE_H
-
-
-
-/* common */
-#include "coll.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-typedef struct CaseNode CaseNode;
-struct CaseNode {
-    unsigned char Value;
-    unsigned      Label;
-    Collection*   Nodes;
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-CaseNode* NewCaseNode (unsigned char Value);
-/* Create and initialize a new CaseNode */
-
-void FreeCaseNode (CaseNode* N);
-/* Delete a case node plus all sub nodes */
-
-#if defined(HAVE_INLINE)
-INLINE CaseNode* CN_GetSubNode (CaseNode* N, unsigned Index)
-/* Get a sub node of the given node */
-{
-    return CollAt (N->Nodes, Index);
-}
-#else
-#  define CN_GetSubNode(N, Index) CollAt (&(N)->Nodes, Index)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned char CN_GetValue (const CaseNode* N)
-/* Return the value for a case node */
-{
-    return N->Value;
-}
-#else
-#  define CN_GetValue(N)  ((N)->Value)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned CN_GetLabel (const CaseNode* N)
-/* Return the label for a case node */
-{
-    return N->Label;
-}
-#else
-#  define CN_GetLabel(N)  ((N)->Label)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int CN_IsLeafNode (const CaseNode* N)
-/* Return true if this is a leaf node */
-{
-    return (N->Nodes == 0);
-}
-#else
-#  define CN_IsLeafNode(N)  ((N)->Nodes == 0)
-#endif
-
-void FreeCaseNodeColl (Collection* Nodes);
-/* Free a collection of case nodes */
-
-int SearchCaseNode (const Collection* Nodes, unsigned char Key, int* Index);
-/* Search for a node in the given collection. If the node has been found,
-** set Index to the index of the node and return true. If the node was not
-** found, set Index the the insertion position of the node and return
-** false.
-*/
-
-unsigned InsertCaseValue (Collection* Nodes, unsigned long Val, unsigned Depth);
-/* Insert a new case value into a CaseNode tree with the given depth. Return
-** the code label for the value.
-*/
-
-
-
-/* End of casenode.h */
-
-#endif
diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c
deleted file mode 100644 (file)
index 729248e..0000000
+++ /dev/null
@@ -1,1492 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 codeent.c                                 */
-/*                                                                           */
-/*                            Code segment entry                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-
-/* common */
-#include "chartype.h"
-#include "check.h"
-#include "debugflag.h"
-#include "xmalloc.h"
-#include "xsprintf.h"
-
-/* cc65 */
-#include "codeent.h"
-#include "codeinfo.h"
-#include "error.h"
-#include "global.h"
-#include "codelab.h"
-#include "opcodes.h"
-#include "output.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Empty argument */
-static char EmptyArg[] = "";
-
-
-
-/*****************************************************************************/
-/*                             Helper functions                              */
-/*****************************************************************************/
-
-
-
-static void FreeArg (char* Arg)
-/* Free a code entry argument */
-{
-    if (Arg != EmptyArg) {
-        xfree (Arg);
-    }
-}
-
-
-
-static char* GetArgCopy (const char* Arg)
-/* Create an argument copy for assignment */
-{
-    if (Arg && Arg[0] != '\0') {
-        /* Create a copy */
-        return xstrdup (Arg);
-    } else {
-        /* Use the empty argument string */
-        return EmptyArg;
-    }
-}
-
-
-
-static int NumArg (const char* Arg, unsigned long* Num)
-/* If the given argument is numerical, convert it and return true. Otherwise
-** set Num to zero and return false.
-*/
-{
-    char* End;
-    unsigned long Val;
-
-    /* Determine the base */
-    int Base = 10;
-    if (*Arg == '$') {
-        ++Arg;
-        Base = 16;
-    } else if (*Arg == '%') {
-        ++Arg;
-        Base = 2;
-    }
-
-    /* Convert the value. strtol is not exactly what we want here, but it's
-    ** cheap and may be replaced by something fancier later.
-    */
-    Val = strtoul (Arg, &End, Base);
-
-    /* Check if the conversion was successful */
-    if (*End != '\0') {
-
-        /* Could not convert */
-        *Num = 0;
-        return 0;
-
-    } else {
-
-        /* Conversion ok */
-        *Num = Val;
-        return 1;
-
-    }
-}
-
-
-
-static void SetUseChgInfo (CodeEntry* E, const OPCDesc* D)
-/* Set the Use and Chg in E */
-{
-    const ZPInfo* Info;
-
-    /* If this is a subroutine call, or a jump to an external function,
-    ** lookup the information about this function and use it. The jump itself
-    ** does not change any registers, so we don't need to use the data from D.
-    */
-    if ((E->Info & (OF_UBRA | OF_CALL)) != 0 && E->JumpTo == 0) {
-        /* A subroutine call or jump to external symbol (function exit) */
-        GetFuncInfo (E->Arg, &E->Use, &E->Chg);
-    } else {
-        /* Some other instruction. Use the values from the opcode description
-        ** plus addressing mode info.
-        */
-        E->Use = D->Use | GetAMUseInfo (E->AM);
-        E->Chg = D->Chg;
-
-        /* Check for special zero page registers used */
-        switch (E->AM) {
-
-            case AM65_ACC:
-                if (E->OPC == OP65_ASL || E->OPC == OP65_DEC ||
-                    E->OPC == OP65_INC || E->OPC == OP65_LSR ||
-                    E->OPC == OP65_ROL || E->OPC == OP65_ROR) {
-                    /* A is changed by these insns */
-                    E->Chg |= REG_A;
-                }
-                break;
-
-            case AM65_ZP:
-            case AM65_ABS:
-            /* Be conservative: */
-            case AM65_ZPX:
-            case AM65_ABSX:
-            case AM65_ABSY:
-                Info = GetZPInfo (E->Arg);
-                if (Info && Info->ByteUse != REG_NONE) {
-                    if (E->OPC == OP65_ASL || E->OPC == OP65_DEC ||
-                        E->OPC == OP65_INC || E->OPC == OP65_LSR ||
-                        E->OPC == OP65_ROL || E->OPC == OP65_ROR ||
-                        E->OPC == OP65_TRB || E->OPC == OP65_TSB) {
-                        /* The zp loc is both, input and output */
-                        E->Chg |= Info->ByteUse;
-                        E->Use |= Info->ByteUse;
-                    } else if ((E->Info & OF_STORE) != 0) {
-                        /* Just output */
-                        E->Chg |= Info->ByteUse;
-                    } else {
-                        /* Input only */
-                        E->Use |= Info->ByteUse;
-                    }
-                }
-                break;
-
-            case AM65_ZPX_IND:
-            case AM65_ZP_INDY:
-            case AM65_ZP_IND:
-                Info = GetZPInfo (E->Arg);
-                if (Info && Info->ByteUse != REG_NONE) {
-                    /* These addressing modes will never change the zp loc */
-                    E->Use |= Info->WordUse;
-                }
-                break;
-
-            default:
-                /* Keep gcc silent */
-                break;
-        }
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-const char* MakeHexArg (unsigned Num)
-/* Convert Num into a string in the form $XY, suitable for passing it as an
-** argument to NewCodeEntry, and return a pointer to the string.
-** BEWARE: The function returns a pointer to a static buffer, so the value is
-** gone if you call it twice (and apart from that it's not thread and signal
-** safe).
-*/
-{
-    static char Buf[16];
-    xsprintf (Buf, sizeof (Buf), "$%02X", (unsigned char) Num);
-    return Buf;
-}
-
-
-
-CodeEntry* NewCodeEntry (opc_t OPC, am_t AM, const char* Arg,
-                         CodeLabel* JumpTo, LineInfo* LI)
-/* Create a new code entry, initialize and return it */
-{
-    /* Get the opcode description */
-    const OPCDesc* D = GetOPCDesc (OPC);
-
-    /* Allocate memory */
-    CodeEntry* E = xmalloc (sizeof (CodeEntry));
-
-    /* Initialize the fields */
-    E->OPC    = D->OPC;
-    E->AM     = AM;
-    E->Size   = GetInsnSize (E->OPC, E->AM);
-    E->Arg    = GetArgCopy (Arg);
-    E->Flags  = NumArg (E->Arg, &E->Num)? CEF_NUMARG : 0;   /* Needs E->Arg */
-    E->Info   = D->Info;
-    E->JumpTo = JumpTo;
-    E->LI     = UseLineInfo (LI);
-    E->RI     = 0;
-    SetUseChgInfo (E, D);
-    InitCollection (&E->Labels);
-
-    /* If we have a label given, add this entry to the label */
-    if (JumpTo) {
-        CollAppend (&JumpTo->JumpFrom, E);
-    }
-
-    /* Return the initialized struct */
-    return E;
-}
-
-
-
-void FreeCodeEntry (CodeEntry* E)
-/* Free the given code entry */
-{
-    /* Free the string argument if we have one */
-    FreeArg (E->Arg);
-
-    /* Cleanup the collection */
-    DoneCollection (&E->Labels);
-
-    /* Release the line info */
-    ReleaseLineInfo (E->LI);
-
-    /* Delete the register info */
-    CE_FreeRegInfo (E);
-
-    /* Free the entry */
-    xfree (E);
-}
-
-
-
-void CE_ReplaceOPC (CodeEntry* E, opc_t OPC)
-/* Replace the opcode of the instruction. This will also replace related info,
-** Size, Use and Chg, but it will NOT update any arguments or labels.
-*/
-{
-    /* Get the opcode descriptor */
-    const OPCDesc* D = GetOPCDesc (OPC);
-
-    /* Replace the opcode */
-    E->OPC  = OPC;
-    E->Info = D->Info;
-    E->Size = GetInsnSize (E->OPC, E->AM);
-    SetUseChgInfo (E, D);
-}
-
-
-
-int CodeEntriesAreEqual (const CodeEntry* E1, const CodeEntry* E2)
-/* Check if both code entries are equal */
-{
-    return (E1->OPC == E2->OPC && E1->AM == E2->AM && strcmp (E1->Arg, E2->Arg) == 0);
-}
-
-
-
-void CE_AttachLabel (CodeEntry* E, CodeLabel* L)
-/* Attach the label to the entry */
-{
-    /* Add it to the entries label list */
-    CollAppend (&E->Labels, L);
-
-    /* Tell the label about it's owner */
-    L->Owner = E;
-}
-
-
-
-void CE_ClearJumpTo (CodeEntry* E)
-/* Clear the JumpTo entry and the argument (which contained the name of the
-** label). Note: The function will not clear the backpointer from the label,
-** so use it with care.
-*/
-{
-    /* Clear the JumpTo entry */
-    E->JumpTo = 0;
-
-    /* Clear the argument and assign the empty one */
-    FreeArg (E->Arg);
-    E->Arg = EmptyArg;
-}
-
-
-
-void CE_MoveLabel (CodeLabel* L, CodeEntry* E)
-/* Move the code label L from it's former owner to the code entry E. */
-{
-    /* Delete the label from the owner */
-    CollDeleteItem (&L->Owner->Labels, L);
-
-    /* Set the new owner */
-    CollAppend (&E->Labels, L);
-    L->Owner = E;
-}
-
-
-
-void CE_SetArg (CodeEntry* E, const char* Arg)
-/* Replace the argument by the new one. */
-{
-    /* Free the old argument */
-    FreeArg (E->Arg);
-
-    /* Assign the new one */
-    E->Arg = GetArgCopy (Arg);
-}
-
-
-
-void CE_SetNumArg (CodeEntry* E, long Num)
-/* Set a new numeric argument for the given code entry that must already
-** have a numeric argument.
-*/
-{
-    char Buf[16];
-
-    /* Check that the entry has a numerical argument */
-    CHECK (E->Flags & CEF_NUMARG);
-
-    /* Make the new argument string */
-    if (E->Size == 2) {
-        Num &= 0xFF;
-        xsprintf (Buf, sizeof (Buf), "$%02X", (unsigned) Num);
-    } else if (E->Size == 3) {
-        Num &= 0xFFFF;
-        xsprintf (Buf, sizeof (Buf), "$%04X", (unsigned) Num);
-    } else {
-        Internal ("Invalid instruction size in CE_SetNumArg");
-    }
-
-    /* Replace the argument by the new one */
-    CE_SetArg (E, Buf);
-
-    /* Use the new numerical value */
-    E->Num = Num;
-}
-
-
-
-int CE_IsConstImm (const CodeEntry* E)
-/* Return true if the argument of E is a constant immediate value */
-{
-    return (E->AM == AM65_IMM && CE_HasNumArg (E));
-}
-
-
-
-int CE_IsKnownImm (const CodeEntry* E, unsigned long Num)
-/* Return true if the argument of E is a constant immediate value that is
-** equal to Num.
-*/
-{
-    return (E->AM == AM65_IMM && CE_HasNumArg (E) && E->Num == Num);
-}
-
-
-
-int CE_UseLoadFlags (CodeEntry* E)
-/* Return true if the instruction uses any flags that are set by a load of
-** a register (N and Z).
-*/
-{
-    /* Follow unconditional branches, but beware of endless loops. After this,
-    ** E will point to the first entry that is not a branch.
-    */
-    if (E->Info & OF_UBRA) {
-        Collection C = AUTO_COLLECTION_INITIALIZER;
-
-        /* Follow the chain */
-        while (E->Info & OF_UBRA) {
-
-            /* Remember the entry so we can detect loops */
-            CollAppend (&C, E);
-
-            /* Check the target */
-            if (E->JumpTo == 0 || CollIndex (&C, E->JumpTo->Owner) >= 0) {
-                /* Unconditional jump to external symbol, or endless loop. */
-                DoneCollection (&C);
-                return 0;       /* Flags not used */
-            }
-
-            /* Follow the chain */
-            E = E->JumpTo->Owner;
-        }
-
-        /* Delete the collection */
-        DoneCollection (&C);
-    }
-
-    /* A branch will use the flags */
-    if (E->Info & OF_FBRA) {
-        return 1;
-    }
-
-    /* Call of a boolean transformer routine will also use the flags */
-    if (E->OPC == OP65_JSR) {
-        /* Get the condition that is evaluated and check it */
-        switch (FindBoolCmpCond (E->Arg)) {
-            case CMP_EQ:
-            case CMP_NE:
-            case CMP_GT:
-            case CMP_GE:
-            case CMP_LT:
-            case CMP_LE:
-            case CMP_UGT:
-            case CMP_ULE:
-                /* Will use the N or Z flags */
-                return 1;
-
-
-            case CMP_UGE:       /* Uses only carry */
-            case CMP_ULT:       /* Dito */
-            default:            /* No bool transformer subroutine */
-                return 0;
-        }
-    }
-
-    /* Anything else */
-    return 0;
-}
-
-
-
-void CE_FreeRegInfo (CodeEntry* E)
-/* Free an existing register info struct */
-{
-    if (E->RI) {
-        FreeRegInfo (E->RI);
-        E->RI = 0;
-    }
-}
-
-
-
-void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs)
-/* Generate register info for this instruction. If an old info exists, it is
-** overwritten.
-*/
-{
-    /* Pointers to the register contents */
-    RegContents* In;
-    RegContents* Out;
-
-    /* Function register usage */
-    unsigned short Use, Chg;
-
-    /* If we don't have a register info struct, allocate one. */
-    if (E->RI == 0) {
-        E->RI = NewRegInfo (InputRegs);
-    } else {
-        if (InputRegs) {
-            E->RI->In  = *InputRegs;
-        } else {
-            RC_Invalidate (&E->RI->In);
-        }
-        E->RI->Out2 = E->RI->Out = E->RI->In;
-    }
-
-    /* Get pointers to the register contents */
-    In  = &E->RI->In;
-    Out = &E->RI->Out;
-
-    /* Handle the different instructions */
-    switch (E->OPC) {
-
-        case OP65_ADC:
-            /* We don't know the value of the carry, so the result is
-            ** always unknown.
-            */
-            Out->RegA = UNKNOWN_REGVAL;
-            break;
-
-        case OP65_AND:
-            if (RegValIsKnown (In->RegA)) {
-                if (CE_IsConstImm (E)) {
-                    Out->RegA = In->RegA & (short) E->Num;
-                } else if (E->AM == AM65_ZP) {
-                    switch (GetKnownReg (E->Use & REG_ZP, In)) {
-                        case REG_TMP1:
-                            Out->RegA = In->RegA & In->Tmp1;
-                            break;
-                        case REG_PTR1_LO:
-                            Out->RegA = In->RegA & In->Ptr1Lo;
-                            break;
-                        case REG_PTR1_HI:
-                            Out->RegA = In->RegA & In->Ptr1Hi;
-                            break;
-                        case REG_SREG_LO:
-                            Out->RegA = In->RegA & In->SRegLo;
-                            break;
-                        case REG_SREG_HI:
-                            Out->RegA = In->RegA & In->SRegHi;
-                            break;
-                        default:
-                            Out->RegA = UNKNOWN_REGVAL;
-                            break;
-                    }
-                } else {
-                    Out->RegA = UNKNOWN_REGVAL;
-                }
-            } else if (CE_IsKnownImm (E, 0)) {
-                /* A and $00 does always give zero */
-                Out->RegA = 0;
-            }
-            break;
-
-        case OP65_ASL:
-            if (E->AM == AM65_ACC && RegValIsKnown (In->RegA)) {
-                Out->RegA = (In->RegA << 1) & 0xFF;
-            } else if (E->AM == AM65_ZP) {
-                switch (GetKnownReg (E->Chg & REG_ZP, In)) {
-                    case REG_TMP1:
-                        Out->Tmp1 = (In->Tmp1 << 1) & 0xFF;
-                        break;
-                    case REG_PTR1_LO:
-                        Out->Ptr1Lo = (In->Ptr1Lo << 1) & 0xFF;
-                        break;
-                    case REG_PTR1_HI:
-                        Out->Ptr1Hi = (In->Ptr1Hi << 1) & 0xFF;
-                        break;
-                    case REG_SREG_LO:
-                        Out->SRegLo = (In->SRegLo << 1) & 0xFF;
-                        break;
-                    case REG_SREG_HI:
-                        Out->SRegHi = (In->SRegHi << 1) & 0xFF;
-                        break;
-                }
-            } else if (E->AM == AM65_ZPX) {
-                /* Invalidates all ZP registers */
-                RC_InvalidateZP (Out);
-            }
-            break;
-
-        case OP65_BCC:
-            break;
-
-        case OP65_BCS:
-            break;
-
-        case OP65_BEQ:
-            break;
-
-        case OP65_BIT:
-            break;
-
-        case OP65_BMI:
-            break;
-
-        case OP65_BNE:
-            break;
-
-        case OP65_BPL:
-            break;
-
-        case OP65_BRA:
-            break;
-
-        case OP65_BRK:
-            break;
-
-        case OP65_BVC:
-            break;
-
-        case OP65_BVS:
-            break;
-
-        case OP65_CLC:
-            break;
-
-        case OP65_CLD:
-            break;
-
-        case OP65_CLI:
-            break;
-
-        case OP65_CLV:
-            break;
-
-        case OP65_CMP:
-            break;
-
-        case OP65_CPX:
-            break;
-
-        case OP65_CPY:
-            break;
-
-        case OP65_DEA:
-            if (RegValIsKnown (In->RegA)) {
-                Out->RegA = (In->RegA - 1) & 0xFF;
-            }
-            break;
-
-        case OP65_DEC:
-            if (E->AM == AM65_ACC && RegValIsKnown (In->RegA)) {
-                Out->RegA = (In->RegA - 1) & 0xFF;
-            } else if (E->AM == AM65_ZP) {
-                switch (GetKnownReg (E->Chg & REG_ZP, In)) {
-                    case REG_TMP1:
-                        Out->Tmp1 = (In->Tmp1 - 1) & 0xFF;
-                        break;
-                    case REG_PTR1_LO:
-                        Out->Ptr1Lo = (In->Ptr1Lo - 1) & 0xFF;
-                        break;
-                    case REG_PTR1_HI:
-                        Out->Ptr1Hi = (In->Ptr1Hi - 1) & 0xFF;
-                        break;
-                    case REG_SREG_LO:
-                        Out->SRegLo = (In->SRegLo - 1) & 0xFF;
-                        break;
-                    case REG_SREG_HI:
-                        Out->SRegHi = (In->SRegHi - 1) & 0xFF;
-                        break;
-                }
-            } else if (E->AM == AM65_ZPX) {
-                /* Invalidates all ZP registers */
-                RC_InvalidateZP (Out);
-            }
-            break;
-
-        case OP65_DEX:
-            if (RegValIsKnown (In->RegX)) {
-                Out->RegX = (In->RegX - 1) & 0xFF;
-            }
-            break;
-
-        case OP65_DEY:
-            if (RegValIsKnown (In->RegY)) {
-                Out->RegY = (In->RegY - 1) & 0xFF;
-            }
-            break;
-
-        case OP65_EOR:
-            if (RegValIsKnown (In->RegA)) {
-                if (CE_IsConstImm (E)) {
-                    Out->RegA = In->RegA ^ (short) E->Num;
-                } else if (E->AM == AM65_ZP) {
-                    switch (GetKnownReg (E->Use & REG_ZP, In)) {
-                        case REG_TMP1:
-                            Out->RegA = In->RegA ^ In->Tmp1;
-                            break;
-                        case REG_PTR1_LO:
-                            Out->RegA = In->RegA ^ In->Ptr1Lo;
-                            break;
-                        case REG_PTR1_HI:
-                            Out->RegA = In->RegA ^ In->Ptr1Hi;
-                            break;
-                        case REG_SREG_LO:
-                            Out->RegA = In->RegA ^ In->SRegLo;
-                            break;
-                        case REG_SREG_HI:
-                            Out->RegA = In->RegA ^ In->SRegHi;
-                            break;
-                        default:
-                            Out->RegA = UNKNOWN_REGVAL;
-                            break;
-                    }
-                } else {
-                    Out->RegA = UNKNOWN_REGVAL;
-                }
-            }
-            break;
-
-        case OP65_INA:
-            if (RegValIsKnown (In->RegA)) {
-                Out->RegA = (In->RegA + 1) & 0xFF;
-            }
-            break;
-
-        case OP65_INC:
-            if (E->AM == AM65_ACC && RegValIsKnown (In->RegA)) {
-                Out->RegA = (In->RegA + 1) & 0xFF;
-            } else if (E->AM == AM65_ZP) {
-                switch (GetKnownReg (E->Chg & REG_ZP, In)) {
-                    case REG_TMP1:
-                        Out->Tmp1 = (In->Tmp1 + 1) & 0xFF;
-                        break;
-                    case REG_PTR1_LO:
-                        Out->Ptr1Lo = (In->Ptr1Lo + 1) & 0xFF;
-                        break;
-                    case REG_PTR1_HI:
-                        Out->Ptr1Hi = (In->Ptr1Hi + 1) & 0xFF;
-                        break;
-                    case REG_SREG_LO:
-                        Out->SRegLo = (In->SRegLo + 1) & 0xFF;
-                        break;
-                    case REG_SREG_HI:
-                        Out->SRegHi = (In->SRegHi + 1) & 0xFF;
-                        break;
-                }
-            } else if (E->AM == AM65_ZPX) {
-                /* Invalidates all ZP registers */
-                RC_InvalidateZP (Out);
-            }
-            break;
-
-        case OP65_INX:
-            if (RegValIsKnown (In->RegX)) {
-                Out->RegX = (In->RegX + 1) & 0xFF;
-            }
-            break;
-
-        case OP65_INY:
-            if (RegValIsKnown (In->RegY)) {
-                Out->RegY = (In->RegY + 1) & 0xFF;
-            }
-            break;
-
-        case OP65_JCC:
-            break;
-
-        case OP65_JCS:
-            break;
-
-        case OP65_JEQ:
-            break;
-
-        case OP65_JMI:
-            break;
-
-        case OP65_JMP:
-            break;
-
-        case OP65_JNE:
-            break;
-
-        case OP65_JPL:
-            break;
-
-        case OP65_JSR:
-            /* Get the code info for the function */
-            GetFuncInfo (E->Arg, &Use, &Chg);
-            if (Chg & REG_A) {
-                Out->RegA = UNKNOWN_REGVAL;
-            }
-            if (Chg & REG_X) {
-                Out->RegX = UNKNOWN_REGVAL;
-            }
-            if (Chg & REG_Y) {
-                Out->RegY = UNKNOWN_REGVAL;
-            }
-            if (Chg & REG_TMP1) {
-                Out->Tmp1 = UNKNOWN_REGVAL;
-            }
-            if (Chg & REG_PTR1_LO) {
-                Out->Ptr1Lo = UNKNOWN_REGVAL;
-            }
-            if (Chg & REG_PTR1_HI) {
-                Out->Ptr1Hi = UNKNOWN_REGVAL;
-            }
-            if (Chg & REG_SREG_LO) {
-                Out->SRegLo = UNKNOWN_REGVAL;
-            }
-            if (Chg & REG_SREG_HI) {
-                Out->SRegHi = UNKNOWN_REGVAL;
-            }
-            /* ## FIXME: Quick hack for some known functions: */
-            if (strcmp (E->Arg, "complax") == 0) {
-                if (RegValIsKnown (In->RegA)) {
-                    Out->RegA = (In->RegA ^ 0xFF);
-                }
-                if (RegValIsKnown (In->RegX)) {
-                    Out->RegX = (In->RegX ^ 0xFF);
-                }
-            } else if (strcmp (E->Arg, "tosandax") == 0) {
-                if (In->RegA == 0) {
-                    Out->RegA = 0;
-                }
-                if (In->RegX == 0) {
-                    Out->RegX = 0;
-                }
-            } else if (strcmp (E->Arg, "tosaslax") == 0) {
-                if (RegValIsKnown (In->RegA) && (In->RegA & 0x0F) >= 8) {
-                    printf ("Hey!\n");
-                    Out->RegA = 0;
-                }
-            } else if (strcmp (E->Arg, "tosorax") == 0) {
-                if (In->RegA == 0xFF) {
-                    Out->RegA = 0xFF;
-                }
-                if (In->RegX == 0xFF) {
-                    Out->RegX = 0xFF;
-                }
-            } else if (strcmp (E->Arg, "tosshlax") == 0) {
-                if ((In->RegA & 0x0F) >= 8) {
-                    Out->RegA = 0;
-                }
-            } else if (FindBoolCmpCond (E->Arg) != CMP_INV ||
-                       FindTosCmpCond (E->Arg) != CMP_INV) {
-                /* Result is boolean value, so X is zero on output */
-                Out->RegX = 0;
-            }
-            break;
-
-        case OP65_JVC:
-            break;
-
-        case OP65_JVS:
-            break;
-
-        case OP65_LDA:
-            if (CE_IsConstImm (E)) {
-                Out->RegA = (unsigned char) E->Num;
-            } else if (E->AM == AM65_ZP) {
-                switch (GetKnownReg (E->Use & REG_ZP, In)) {
-                    case REG_TMP1:
-                        Out->RegA = In->Tmp1;
-                        break;
-                    case REG_PTR1_LO:
-                        Out->RegA = In->Ptr1Lo;
-                        break;
-                    case REG_PTR1_HI:
-                        Out->RegA = In->Ptr1Hi;
-                        break;
-                    case REG_SREG_LO:
-                        Out->RegA = In->SRegLo;
-                        break;
-                    case REG_SREG_HI:
-                        Out->RegA = In->SRegHi;
-                        break;
-                    default:
-                        Out->RegA = UNKNOWN_REGVAL;
-                        break;
-                }
-            } else {
-                /* A is now unknown */
-                Out->RegA = UNKNOWN_REGVAL;
-            }
-            break;
-
-        case OP65_LDX:
-            if (CE_IsConstImm (E)) {
-                Out->RegX = (unsigned char) E->Num;
-            } else if (E->AM == AM65_ZP) {
-                switch (GetKnownReg (E->Use & REG_ZP, In)) {
-                    case REG_TMP1:
-                        Out->RegX = In->Tmp1;
-                        break;
-                    case REG_PTR1_LO:
-                        Out->RegX = In->Ptr1Lo;
-                        break;
-                    case REG_PTR1_HI:
-                        Out->RegX = In->Ptr1Hi;
-                        break;
-                    case REG_SREG_LO:
-                        Out->RegX = In->SRegLo;
-                        break;
-                    case REG_SREG_HI:
-                        Out->RegX = In->SRegHi;
-                        break;
-                    default:
-                        Out->RegX = UNKNOWN_REGVAL;
-                        break;
-                }
-            } else {
-                /* X is now unknown */
-                Out->RegX = UNKNOWN_REGVAL;
-            }
-            break;
-
-        case OP65_LDY:
-            if (CE_IsConstImm (E)) {
-                Out->RegY = (unsigned char) E->Num;
-            } else if (E->AM == AM65_ZP) {
-                switch (GetKnownReg (E->Use & REG_ZP, In)) {
-                    case REG_TMP1:
-                        Out->RegY = In->Tmp1;
-                        break;
-                    case REG_PTR1_LO:
-                        Out->RegY = In->Ptr1Lo;
-                        break;
-                    case REG_PTR1_HI:
-                        Out->RegY = In->Ptr1Hi;
-                        break;
-                    case REG_SREG_LO:
-                        Out->RegY = In->SRegLo;
-                        break;
-                    case REG_SREG_HI:
-                        Out->RegY = In->SRegHi;
-                        break;
-                    default:
-                        Out->RegY = UNKNOWN_REGVAL;
-                        break;
-                }
-            } else {
-                /* Y is now unknown */
-                Out->RegY = UNKNOWN_REGVAL;
-            }
-            break;
-
-        case OP65_LSR:
-            if (E->AM == AM65_ACC && RegValIsKnown (In->RegA)) {
-                Out->RegA = (In->RegA >> 1) & 0xFF;
-            } else if (E->AM == AM65_ZP) {
-                switch (GetKnownReg (E->Chg & REG_ZP, In)) {
-                    case REG_TMP1:
-                        Out->Tmp1 = (In->Tmp1 >> 1) & 0xFF;
-                        break;
-                    case REG_PTR1_LO:
-                        Out->Ptr1Lo = (In->Ptr1Lo >> 1) & 0xFF;
-                        break;
-                    case REG_PTR1_HI:
-                        Out->Ptr1Hi = (In->Ptr1Hi >> 1) & 0xFF;
-                        break;
-                    case REG_SREG_LO:
-                        Out->SRegLo = (In->SRegLo >> 1) & 0xFF;
-                        break;
-                    case REG_SREG_HI:
-                        Out->SRegHi = (In->SRegHi >> 1) & 0xFF;
-                        break;
-                }
-            } else if (E->AM == AM65_ZPX) {
-                /* Invalidates all ZP registers */
-                RC_InvalidateZP (Out);
-            }
-            break;
-
-        case OP65_NOP:
-            break;
-
-        case OP65_ORA:
-            if (RegValIsKnown (In->RegA)) {
-                if (CE_IsConstImm (E)) {
-                    Out->RegA = In->RegA | (short) E->Num;
-                } else if (E->AM == AM65_ZP) {
-                    switch (GetKnownReg (E->Use & REG_ZP, In)) {
-                        case REG_TMP1:
-                            Out->RegA = In->RegA | In->Tmp1;
-                            break;
-                        case REG_PTR1_LO:
-                            Out->RegA = In->RegA | In->Ptr1Lo;
-                            break;
-                        case REG_PTR1_HI:
-                            Out->RegA = In->RegA | In->Ptr1Hi;
-                            break;
-                        case REG_SREG_LO:
-                            Out->RegA = In->RegA | In->SRegLo;
-                            break;
-                        case REG_SREG_HI:
-                            Out->RegA = In->RegA | In->SRegHi;
-                            break;
-                        default:
-                            Out->RegA = UNKNOWN_REGVAL;
-                            break;
-                    }
-                } else {
-                    /* A is now unknown */
-                    Out->RegA = UNKNOWN_REGVAL;
-                }
-            } else if (CE_IsKnownImm (E, 0xFF)) {
-                /* ORA with 0xFF does always give 0xFF */
-                Out->RegA = 0xFF;
-            }
-            break;
-
-        case OP65_PHA:
-            break;
-
-        case OP65_PHP:
-            break;
-
-        case OP65_PHX:
-            break;
-
-        case OP65_PHY:
-            break;
-
-        case OP65_PLA:
-            Out->RegA = UNKNOWN_REGVAL;
-            break;
-
-        case OP65_PLP:
-            break;
-
-        case OP65_PLX:
-            Out->RegX = UNKNOWN_REGVAL;
-            break;
-
-        case OP65_PLY:
-            Out->RegY = UNKNOWN_REGVAL;
-            break;
-
-        case OP65_ROL:
-            /* We don't know the value of the carry bit */
-            if (E->AM == AM65_ACC) {
-                Out->RegA = UNKNOWN_REGVAL;
-            } else if (E->AM == AM65_ZP) {
-                switch (GetKnownReg (E->Chg & REG_ZP, In)) {
-                    case REG_TMP1:
-                        Out->Tmp1 = UNKNOWN_REGVAL;
-                        break;
-                    case REG_PTR1_LO:
-                        Out->Ptr1Lo = UNKNOWN_REGVAL;
-                        break;
-                    case REG_PTR1_HI:
-                        Out->Ptr1Hi = UNKNOWN_REGVAL;
-                        break;
-                    case REG_SREG_LO:
-                        Out->SRegLo = UNKNOWN_REGVAL;
-                        break;
-                    case REG_SREG_HI:
-                        Out->SRegHi = UNKNOWN_REGVAL;
-                        break;
-                }
-            } else if (E->AM == AM65_ZPX) {
-                /* Invalidates all ZP registers */
-                RC_InvalidateZP (Out);
-            }
-            break;
-
-        case OP65_ROR:
-            /* We don't know the value of the carry bit */
-            if (E->AM == AM65_ACC) {
-                Out->RegA = UNKNOWN_REGVAL;
-            } else if (E->AM == AM65_ZP) {
-                switch (GetKnownReg (E->Chg & REG_ZP, In)) {
-                    case REG_TMP1:
-                        Out->Tmp1 = UNKNOWN_REGVAL;
-                        break;
-                    case REG_PTR1_LO:
-                        Out->Ptr1Lo = UNKNOWN_REGVAL;
-                        break;
-                    case REG_PTR1_HI:
-                        Out->Ptr1Hi = UNKNOWN_REGVAL;
-                        break;
-                    case REG_SREG_LO:
-                        Out->SRegLo = UNKNOWN_REGVAL;
-                        break;
-                    case REG_SREG_HI:
-                        Out->SRegHi = UNKNOWN_REGVAL;
-                        break;
-                }
-            } else if (E->AM == AM65_ZPX) {
-                /* Invalidates all ZP registers */
-                RC_InvalidateZP (Out);
-            }
-            break;
-
-        case OP65_RTI:
-            break;
-
-        case OP65_RTS:
-            break;
-
-        case OP65_SBC:
-            /* We don't know the value of the carry bit */
-            Out->RegA = UNKNOWN_REGVAL;
-            break;
-
-        case OP65_SEC:
-            break;
-
-        case OP65_SED:
-            break;
-
-        case OP65_SEI:
-            break;
-
-        case OP65_STA:
-            if (E->AM == AM65_ZP) {
-                switch (GetKnownReg (E->Chg & REG_ZP, 0)) {
-                    case REG_TMP1:
-                        Out->Tmp1 = In->RegA;
-                        break;
-                    case REG_PTR1_LO:
-                        Out->Ptr1Lo = In->RegA;
-                        break;
-                    case REG_PTR1_HI:
-                        Out->Ptr1Hi = In->RegA;
-                        break;
-                    case REG_SREG_LO:
-                        Out->SRegLo = In->RegA;
-                        break;
-                    case REG_SREG_HI:
-                        Out->SRegHi = In->RegA;
-                        break;
-                }
-            } else if (E->AM == AM65_ZPX) {
-                /* Invalidates all ZP registers */
-                RC_InvalidateZP (Out);
-            }
-            break;
-
-        case OP65_STX:
-            if (E->AM == AM65_ZP) {
-                switch (GetKnownReg (E->Chg & REG_ZP, 0)) {
-                    case REG_TMP1:
-                        Out->Tmp1 = In->RegX;
-                        break;
-                    case REG_PTR1_LO:
-                        Out->Ptr1Lo = In->RegX;
-                        break;
-                    case REG_PTR1_HI:
-                        Out->Ptr1Hi = In->RegX;
-                        break;
-                    case REG_SREG_LO:
-                        Out->SRegLo = In->RegX;
-                        break;
-                    case REG_SREG_HI:
-                        Out->SRegHi = In->RegX;
-                        break;
-                }
-            } else if (E->AM == AM65_ZPX) {
-                /* Invalidates all ZP registers */
-                RC_InvalidateZP (Out);
-            }
-            break;
-
-        case OP65_STY:
-            if (E->AM == AM65_ZP) {
-                switch (GetKnownReg (E->Chg & REG_ZP, 0)) {
-                    case REG_TMP1:
-                        Out->Tmp1 = In->RegY;
-                        break;
-                    case REG_PTR1_LO:
-                        Out->Ptr1Lo = In->RegY;
-                        break;
-                    case REG_PTR1_HI:
-                        Out->Ptr1Hi = In->RegY;
-                        break;
-                    case REG_SREG_LO:
-                        Out->SRegLo = In->RegY;
-                        break;
-                    case REG_SREG_HI:
-                        Out->SRegHi = In->RegY;
-                        break;
-                }
-            } else if (E->AM == AM65_ZPX) {
-                /* Invalidates all ZP registers */
-                RC_InvalidateZP (Out);
-            }
-            break;
-
-        case OP65_STZ:
-            if (E->AM == AM65_ZP) {
-                switch (GetKnownReg (E->Chg & REG_ZP, 0)) {
-                    case REG_TMP1:
-                        Out->Tmp1 = 0;
-                        break;
-                    case REG_PTR1_LO:
-                        Out->Ptr1Lo = 0;
-                        break;
-                    case REG_PTR1_HI:
-                        Out->Ptr1Hi = 0;
-                        break;
-                    case REG_SREG_LO:
-                        Out->SRegLo = 0;
-                        break;
-                    case REG_SREG_HI:
-                        Out->SRegHi = 0;
-                        break;
-                }
-            } else if (E->AM == AM65_ZPX) {
-                /* Invalidates all ZP registers */
-                RC_InvalidateZP (Out);
-            }
-            break;
-
-        case OP65_TAX:
-            Out->RegX = In->RegA;
-            break;
-
-        case OP65_TAY:
-            Out->RegY = In->RegA;
-            break;
-
-        case OP65_TRB:
-            if (E->AM == AM65_ZPX) {
-                /* Invalidates all ZP registers */
-                RC_InvalidateZP (Out);
-            } else if (E->AM == AM65_ZP) {
-                if (RegValIsKnown (In->RegA)) {
-                    switch (GetKnownReg (E->Chg & REG_ZP, In)) {
-                        case REG_TMP1:
-                            Out->Tmp1 &= ~In->RegA;
-                            break;
-                        case REG_PTR1_LO:
-                            Out->Ptr1Lo &= ~In->RegA;
-                            break;
-                        case REG_PTR1_HI:
-                            Out->Ptr1Hi &= ~In->RegA;
-                            break;
-                        case REG_SREG_LO:
-                            Out->SRegLo &= ~In->RegA;
-                            break;
-                        case REG_SREG_HI:
-                            Out->SRegHi &= ~In->RegA;
-                            break;
-                    }
-                } else {
-                    switch (GetKnownReg (E->Chg & REG_ZP, In)) {
-                        case REG_TMP1:
-                            Out->Tmp1 = UNKNOWN_REGVAL;
-                            break;
-                        case REG_PTR1_LO:
-                            Out->Ptr1Lo = UNKNOWN_REGVAL;
-                            break;
-                        case REG_PTR1_HI:
-                            Out->Ptr1Hi = UNKNOWN_REGVAL;
-                            break;
-                        case REG_SREG_LO:
-                            Out->SRegLo = UNKNOWN_REGVAL;
-                            break;
-                        case REG_SREG_HI:
-                            Out->SRegHi = UNKNOWN_REGVAL;
-                            break;
-                    }
-                }
-            }
-            break;
-
-        case OP65_TSB:
-            if (E->AM == AM65_ZPX) {
-                /* Invalidates all ZP registers */
-                RC_InvalidateZP (Out);
-            } else if (E->AM == AM65_ZP) {
-                if (RegValIsKnown (In->RegA)) {
-                    switch (GetKnownReg (E->Chg & REG_ZP, In)) {
-                        case REG_TMP1:
-                            Out->Tmp1 |= In->RegA;
-                            break;
-                        case REG_PTR1_LO:
-                            Out->Ptr1Lo |= In->RegA;
-                            break;
-                        case REG_PTR1_HI:
-                            Out->Ptr1Hi |= In->RegA;
-                            break;
-                        case REG_SREG_LO:
-                            Out->SRegLo |= In->RegA;
-                            break;
-                        case REG_SREG_HI:
-                            Out->SRegHi |= In->RegA;
-                            break;
-                    }
-                } else {
-                    switch (GetKnownReg (E->Chg & REG_ZP, In)) {
-                        case REG_TMP1:
-                            Out->Tmp1 = UNKNOWN_REGVAL;
-                            break;
-                        case REG_PTR1_LO:
-                            Out->Ptr1Lo = UNKNOWN_REGVAL;
-                            break;
-                        case REG_PTR1_HI:
-                            Out->Ptr1Hi = UNKNOWN_REGVAL;
-                            break;
-                        case REG_SREG_LO:
-                            Out->SRegLo = UNKNOWN_REGVAL;
-                            break;
-                        case REG_SREG_HI:
-                            Out->SRegHi = UNKNOWN_REGVAL;
-                            break;
-                    }
-                }
-            }
-            break;
-
-        case OP65_TSX:
-            Out->RegX = UNKNOWN_REGVAL;
-            break;
-
-        case OP65_TXA:
-            Out->RegA = In->RegX;
-            break;
-
-        case OP65_TXS:
-            break;
-
-        case OP65_TYA:
-            Out->RegA = In->RegY;
-            break;
-
-        default:
-            break;
-
-    }
-}
-
-
-
-static char* RegInfoDesc (unsigned U, char* Buf)
-/* Return a string containing register info */
-{
-    Buf[0] = '\0';
-
-    strcat (Buf, U & REG_SREG_HI? "H" : "_");
-    strcat (Buf, U & REG_SREG_LO? "L" : "_");
-    strcat (Buf, U & REG_A?       "A" : "_");
-    strcat (Buf, U & REG_X?       "X" : "_");
-    strcat (Buf, U & REG_Y?       "Y" : "_");
-    strcat (Buf, U & REG_TMP1?    "T1" : "__");
-    strcat (Buf, U & REG_PTR1?    "1" : "_");
-    strcat (Buf, U & REG_PTR2?    "2" : "_");
-    strcat (Buf, U & REG_SAVE?    "V"  : "_");
-    strcat (Buf, U & REG_SP?      "S" : "_");
-
-    return Buf;
-}
-
-
-
-static char* RegContentDesc (const RegContents* RC, char* Buf)
-/* Return a string containing register contents */
-{
-    char* B = Buf;
-
-    if (RegValIsUnknown (RC->RegA)) {
-        strcpy (B, "A:XX ");
-    } else {
-        sprintf (B, "A:%02X ", RC->RegA);
-    }
-    B += 5;
-    if (RegValIsUnknown (RC->RegX)) {
-        strcpy (B, "X:XX ");
-    } else {
-        sprintf (B, "X:%02X ", RC->RegX);
-    }
-    B += 5;
-    if (RegValIsUnknown (RC->RegY)) {
-        strcpy (B, "Y:XX");
-    } else {
-        sprintf (B, "Y:%02X", RC->RegY);
-    }
-    B += 4;
-
-    return Buf;
-}
-
-
-
-void CE_Output (const CodeEntry* E)
-/* Output the code entry to the output file */
-{
-    const OPCDesc* D;
-    unsigned Chars;
-    int Space;
-    const char* Target;
-
-    /* If we have a label, print that */
-    unsigned LabelCount = CollCount (&E->Labels);
-    unsigned I;
-    for (I = 0; I < LabelCount; ++I) {
-        CL_Output (CollConstAt (&E->Labels, I));
-    }
-
-    /* Get the opcode description */
-    D = GetOPCDesc (E->OPC);
-
-    /* Print the mnemonic */
-    Chars = WriteOutput ("\t%s", D->Mnemo);
-
-    /* Space to leave before the operand */
-    Space = 9 - Chars;
-
-    /* Print the operand */
-    switch (E->AM) {
-
-        case AM65_IMP:
-            /* implicit */
-            break;
-
-        case AM65_ACC:
-            /* accumulator */
-            Chars += WriteOutput ("%*sa", Space, "");
-            break;
-
-        case AM65_IMM:
-            /* immidiate */
-            Chars += WriteOutput ("%*s#%s", Space, "", E->Arg);
-            break;
-
-        case AM65_ZP:
-        case AM65_ABS:
-            /* zeropage and absolute */
-            Chars += WriteOutput ("%*s%s", Space, "", E->Arg);
-            break;
-
-        case AM65_ZPX:
-        case AM65_ABSX:
-            /* zeropage,X and absolute,X */
-            Chars += WriteOutput ("%*s%s,x", Space, "", E->Arg);
-            break;
-
-        case AM65_ABSY:
-            /* absolute,Y */
-            Chars += WriteOutput ("%*s%s,y", Space, "", E->Arg);
-            break;
-
-        case AM65_ZPX_IND:
-            /* (zeropage,x) */
-            Chars += WriteOutput ("%*s(%s,x)", Space, "", E->Arg);
-            break;
-
-        case AM65_ZP_INDY:
-            /* (zeropage),y */
-            Chars += WriteOutput ("%*s(%s),y", Space, "", E->Arg);
-            break;
-
-        case AM65_ZP_IND:
-            /* (zeropage) */
-            Chars += WriteOutput ("%*s(%s)", Space, "", E->Arg);
-            break;
-
-        case AM65_BRA:
-            /* branch */
-            Target = E->JumpTo? E->JumpTo->Name : E->Arg;
-            Chars += WriteOutput ("%*s%s", Space, "", Target);
-            break;
-
-        default:
-            Internal ("Invalid addressing mode");
-
-    }
-
-    /* Print usage info if requested by the debugging flag */
-    if (Debug) {
-        char Use [128];
-        char Chg [128];
-        WriteOutput ("%*s; USE: %-12s CHG: %-12s SIZE: %u",
-                     (int)(30-Chars), "",
-                     RegInfoDesc (E->Use, Use),
-                     RegInfoDesc (E->Chg, Chg),
-                     E->Size);
-
-        if (E->RI) {
-            char RegIn[32];
-            char RegOut[32];
-            WriteOutput ("    In %s  Out %s",
-                         RegContentDesc (&E->RI->In, RegIn),
-                         RegContentDesc (&E->RI->Out, RegOut));
-        }
-    }
-
-    /* Terminate the line */
-    WriteOutput ("\n");
-}
diff --git a/src/cc65/codeent.h b/src/cc65/codeent.h
deleted file mode 100644 (file)
index 4d02890..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 codeent.h                                 */
-/*                                                                           */
-/*                            Code segment entry                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef CODEENT_H
-#define CODEENT_H
-
-
-
-#include <string.h>
-
-/* common */
-#include "coll.h"
-#include "inline.h"
-
-/* cc65 */
-#include "codelab.h"
-#include "lineinfo.h"
-#include "opcodes.h"
-#include "reginfo.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Flags used */
-#define CEF_USERMARK    0x0001U         /* Generic mark by user functions */
-#define CEF_NUMARG      0x0002U         /* Insn has numerical argument */
-
-/* Code entry structure */
-typedef struct CodeEntry CodeEntry;
-struct CodeEntry {
-    unsigned char       OPC;            /* Opcode */
-    unsigned char       AM;             /* Adressing mode */
-    unsigned char       Size;           /* Estimated size */
-    unsigned char       Flags;          /* Flags */
-    char*               Arg;            /* Argument as string */
-    unsigned long       Num;            /* Numeric argument */
-    unsigned short      Info;           /* Additional code info */
-    unsigned short      Use;            /* Registers used */
-    unsigned short      Chg;            /* Registers changed/destroyed */
-    CodeLabel*          JumpTo;         /* Jump label */
-    Collection          Labels;         /* Labels for this instruction */
-    LineInfo*           LI;             /* Source line info for this insn */
-    RegInfo*            RI;             /* Register info for this insn */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-const char* MakeHexArg (unsigned Num);
-/* Convert Num into a string in the form $XY, suitable for passing it as an
-** argument to NewCodeEntry, and return a pointer to the string.
-** BEWARE: The function returns a pointer to a static buffer, so the value is
-** gone if you call it twice (and apart from that it's not thread and signal
-** safe).
-*/
-
-CodeEntry* NewCodeEntry (opc_t OPC, am_t AM, const char* Arg,
-                         CodeLabel* JumpTo, LineInfo* LI);
-/* Create a new code entry, initialize and return it */
-
-void FreeCodeEntry (CodeEntry* E);
-/* Free the given code entry */
-
-void CE_ReplaceOPC (CodeEntry* E, opc_t OPC);
-/* Replace the opcode of the instruction. This will also replace related info,
-** Size, Use and Chg, but it will NOT update any arguments or labels.
-*/
-
-int CodeEntriesAreEqual (const CodeEntry* E1, const CodeEntry* E2);
-/* Check if both code entries are equal */
-
-void CE_AttachLabel (CodeEntry* E, CodeLabel* L);
-/* Attach the label to the entry */
-
-void CE_ClearJumpTo (CodeEntry* E);
-/* Clear the JumpTo entry and the argument (which contained the name of the
-** label). Note: The function will not clear the backpointer from the label,
-** so use it with care.
-*/
-
-#if defined(HAVE_INLINE)
-INLINE int CE_HasLabel (const CodeEntry* E)
-/* Check if the given code entry has labels attached */
-{
-    return (CollCount (&E->Labels) > 0);
-}
-#else
-#  define CE_HasLabel(E)        (CollCount (&(E)->Labels) > 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned CE_GetLabelCount (const CodeEntry* E)
-/* Get the number of labels attached to this entry */
-{
-    return CollCount (&E->Labels);
-}
-#else
-#  define CE_GetLabelCount(E)   CollCount (&(E)->Labels)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE CodeLabel* CE_GetLabel (CodeEntry* E, unsigned Index)
-/* Get a label from this code entry */
-{
-    return CollAt (&E->Labels, Index);
-}
-#else
-#  define CE_GetLabel(E, Index) CollAt (&(E)->Labels, (Index))
-#endif
-
-void CE_MoveLabel (CodeLabel* L, CodeEntry* E);
-/* Move the code label L from it's former owner to the code entry E. */
-
-#if defined(HAVE_INLINE)
-INLINE int CE_HasMark (const CodeEntry* E)
-/* Return true if the given code entry has the CEF_USERMARK flag set */
-{
-    return (E->Flags & CEF_USERMARK) != 0;
-}
-#else
-#  define CE_HasMark(E) (((E)->Flags & CEF_USERMARK) != 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void CE_SetMark (CodeEntry* E)
-/* Set the CEF_USERMARK flag for the given entry */
-{
-    E->Flags |= CEF_USERMARK;
-}
-#else
-#  define CE_SetMark(E) ((E)->Flags |= CEF_USERMARK)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void CE_ResetMark (CodeEntry* E)
-/* Reset the CEF_USERMARK flag for the given entry */
-{
-    E->Flags &= ~CEF_USERMARK;
-}
-#else
-#  define CE_ResetMark(E)       ((E)->Flags &= ~CEF_USERMARK)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int CE_HasNumArg (const CodeEntry* E)
-/* Return true if the instruction has a numeric argument */
-{
-    return (E->Flags & CEF_NUMARG) != 0;
-}
-#else
-#  define CE_HasNumArg(E)       (((E)->Flags & CEF_NUMARG) != 0)
-#endif
-
-void CE_SetArg (CodeEntry* E, const char* Arg);
-/* Replace the argument by the new one. */
-
-void CE_SetNumArg (CodeEntry* E, long Num);
-/* Set a new numeric argument for the given code entry that must already
-** have a numeric argument.
-*/
-
-int CE_IsConstImm (const CodeEntry* E);
-/* Return true if the argument of E is a constant immediate value */
-
-int CE_IsKnownImm (const CodeEntry* E, unsigned long Num);
-/* Return true if the argument of E is a constant immediate value that is
-** equal to Num.
-*/
-
-#if defined(HAVE_INLINE)
-INLINE int CE_IsCallTo (const CodeEntry* E, const char* Name)
-/* Check if this is a call to the given function */
-{
-    return (E->OPC == OP65_JSR && strcmp (E->Arg, Name) == 0);
-}
-#else
-#  define CE_IsCallTo(E, Name) ((E)->OPC == OP65_JSR && strcmp ((E)->Arg, (Name)) == 0)
-#endif
-
-int CE_UseLoadFlags (CodeEntry* E);
-/* Return true if the instruction uses any flags that are set by a load of
-** a register (N and Z).
-*/
-
-void CE_FreeRegInfo (CodeEntry* E);
-/* Free an existing register info struct */
-
-void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs);
-/* Generate register info for this instruction. If an old info exists, it is
-** overwritten.
-*/
-
-void CE_Output (const CodeEntry* E);
-/* Output the code entry to the output file */
-
-
-
-/* End of codeent.h */
-
-#endif
diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c
deleted file mode 100644 (file)
index f6ec2f5..0000000
+++ /dev/null
@@ -1,4372 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 codegen.c                                 */
-/*                                                                           */
-/*                            6502 code generator                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-
-/* common */
-#include "check.h"
-#include "cpu.h"
-#include "strbuf.h"
-#include "xmalloc.h"
-#include "xsprintf.h"
-#include "version.h"
-
-/* cc65 */
-#include "asmcode.h"
-#include "asmlabel.h"
-#include "casenode.h"
-#include "codeseg.h"
-#include "dataseg.h"
-#include "error.h"
-#include "global.h"
-#include "segments.h"
-#include "stackptr.h"
-#include "textseg.h"
-#include "util.h"
-#include "codegen.h"
-
-
-
-/*****************************************************************************/
-/*                                  Helpers                                  */
-/*****************************************************************************/
-
-
-
-static void typeerror (unsigned type)
-/* Print an error message about an invalid operand type */
-{
-    /* Special handling for floats here: */
-    if ((type & CF_TYPEMASK) == CF_FLOAT) {
-        Fatal ("Floating point type is currently unsupported");
-    } else {
-        Internal ("Invalid type in CF flags: %04X, type = %u", type, type & CF_TYPEMASK);
-    }
-}
-
-
-
-static void CheckLocalOffs (unsigned Offs)
-/* Check the offset into the stack for 8bit range */
-{
-    if (Offs >= 256) {
-        /* Too many local vars */
-        Error ("Too many local variables");
-    }
-}
-
-
-
-static const char* GetLabelName (unsigned Flags, unsigned long Label, long Offs)
-{
-    static char Buf [256];              /* Label name */
-
-    /* Create the correct label name */
-    switch (Flags & CF_ADDRMASK) {
-
-        case CF_STATIC:
-            /* Static memory cell */
-            if (Offs) {
-                xsprintf (Buf, sizeof (Buf), "%s%+ld", LocalLabelName (Label), Offs);
-            } else {
-                xsprintf (Buf, sizeof (Buf), "%s", LocalLabelName (Label));
-            }
-            break;
-
-        case CF_EXTERNAL:
-            /* External label */
-            if (Offs) {
-                xsprintf (Buf, sizeof (Buf), "_%s%+ld", (char*) Label, Offs);
-            } else {
-                xsprintf (Buf, sizeof (Buf), "_%s", (char*) Label);
-            }
-            break;
-
-        case CF_ABSOLUTE:
-            /* Absolute address */
-            xsprintf (Buf, sizeof (Buf), "$%04X", (int)((Label+Offs) & 0xFFFF));
-            break;
-
-        case CF_REGVAR:
-            /* Variable in register bank */
-            xsprintf (Buf, sizeof (Buf), "regbank+%u", (unsigned)((Label+Offs) & 0xFFFF));
-            break;
-
-        default:
-            Internal ("Invalid address flags: %04X", Flags);
-    }
-
-    /* Return a pointer to the static buffer */
-    return Buf;
-}
-
-
-
-/*****************************************************************************/
-/*                            Pre- and postamble                             */
-/*****************************************************************************/
-
-
-
-void g_preamble (void)
-/* Generate the assembler code preamble */
-{
-    /* Identify the compiler version */
-    AddTextLine (";");
-    AddTextLine ("; File generated by cc65 v %s", GetVersionAsString ());
-    AddTextLine (";");
-
-    /* Insert some object file options */
-    AddTextLine ("\t.fopt\t\tcompiler,\"cc65 v %s\"",
-                 GetVersionAsString ());
-
-    /* If we're producing code for some other CPU, switch the command set */
-    switch (CPU) {
-        case CPU_6502:      AddTextLine ("\t.setcpu\t\t\"6502\"");      break;
-        case CPU_6502X:     AddTextLine ("\t.setcpu\t\t\"6502X\"");     break;
-        case CPU_65SC02:    AddTextLine ("\t.setcpu\t\t\"65SC02\"");    break;
-        case CPU_65C02:     AddTextLine ("\t.setcpu\t\t\"65C02\"");     break;
-        case CPU_65816:     AddTextLine ("\t.setcpu\t\t\"65816\"");     break;
-        case CPU_HUC6280:   AddTextLine ("\t.setcpu\t\t\"HUC6280\"");   break;
-        default:            Internal ("Unknown CPU: %d", CPU);
-    }
-
-    /* Use smart mode */
-    AddTextLine ("\t.smart\t\ton");
-
-    /* Allow auto import for runtime library routines */
-    AddTextLine ("\t.autoimport\ton");
-
-    /* Switch the assembler into case sensitive mode */
-    AddTextLine ("\t.case\t\ton");
-
-    /* Tell the assembler if we want to generate debug info */
-    AddTextLine ("\t.debuginfo\t%s", (DebugInfo != 0)? "on" : "off");
-
-    /* Import zero page variables */
-    AddTextLine ("\t.importzp\tsp, sreg, regsave, regbank");
-    AddTextLine ("\t.importzp\ttmp1, tmp2, tmp3, tmp4, ptr1, ptr2, ptr3, ptr4");
-
-    /* Define long branch macros */
-    AddTextLine ("\t.macpack\tlongbranch");
-}
-
-
-
-void g_fileinfo (const char* Name, unsigned long Size, unsigned long MTime)
-/* If debug info is enabled, place a file info into the source */
-{
-    if (DebugInfo) {
-        /* We have to place this into the global text segment, so it will
-        ** appear before all .dbg line statements.
-        */
-        TS_AddLine (GS->Text, "\t.dbg\t\tfile, \"%s\", %lu, %lu", Name, Size, MTime);
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                              Segment support                              */
-/*****************************************************************************/
-
-
-
-void g_userodata (void)
-/* Switch to the read only data segment */
-{
-    UseDataSeg (SEG_RODATA);
-}
-
-
-
-void g_usedata (void)
-/* Switch to the data segment */
-{
-    UseDataSeg (SEG_DATA);
-}
-
-
-
-void g_usebss (void)
-/* Switch to the bss segment */
-{
-    UseDataSeg (SEG_BSS);
-}
-
-
-
-void g_segname (segment_t Seg)
-/* Emit the name of a segment if necessary */
-{
-    /* Emit a segment directive for the data style segments */
-    DataSeg* S;
-    switch (Seg) {
-        case SEG_RODATA: S = CS->ROData; break;
-        case SEG_DATA:   S = CS->Data;   break;
-        case SEG_BSS:    S = CS->BSS;    break;
-        default:         S = 0;          break;
-    }
-    if (S) {
-        DS_AddLine (S, ".segment\t\"%s\"", GetSegName (Seg));
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned sizeofarg (unsigned flags)
-/* Return the size of a function argument type that is encoded in flags */
-{
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            return (flags & CF_FORCECHAR)? 1 : 2;
-
-        case CF_INT:
-            return 2;
-
-        case CF_LONG:
-            return 4;
-
-        case CF_FLOAT:
-            return 4;
-
-        default:
-            typeerror (flags);
-            /* NOTREACHED */
-            return 2;
-    }
-}
-
-
-
-int pop (unsigned flags)
-/* Pop an argument of the given size */
-{
-    return StackPtr += sizeofarg (flags);
-}
-
-
-
-int push (unsigned flags)
-/* Push an argument of the given size */
-{
-    return StackPtr -= sizeofarg (flags);
-}
-
-
-
-static unsigned MakeByteOffs (unsigned Flags, unsigned Offs)
-/* The value in Offs is an offset to an address in a/x. Make sure, an object
-** of the type given in Flags can be loaded or stored into this address by
-** adding part of the offset to the address in ax, so that the remaining
-** offset fits into an index register. Return the remaining offset.
-*/
-{
-    /* If the offset is too large for a byte register, add the high byte
-    ** of the offset to the primary. Beware: We need a special correction
-    ** if the offset in the low byte will overflow in the operation.
-    */
-    unsigned O = Offs & ~0xFFU;
-    if ((Offs & 0xFF) > 256 - sizeofarg (Flags)) {
-        /* We need to add the low byte also */
-        O += Offs & 0xFF;
-    }
-
-    /* Do the correction if we need one */
-    if (O != 0) {
-        g_inc (CF_INT | CF_CONST, O);
-        Offs -= O;
-    }
-
-    /* Return the new offset */
-    return Offs;
-}
-
-
-
-/*****************************************************************************/
-/*                      Functions handling local labels                      */
-/*****************************************************************************/
-
-
-
-void g_defcodelabel (unsigned label)
-/* Define a local code label */
-{
-    CS_AddLabel (CS->Code, LocalLabelName (label));
-}
-
-
-
-void g_defdatalabel (unsigned label)
-/* Define a local data label */
-{
-    AddDataLine ("%s:", LocalLabelName (label));
-}
-
-
-
-void g_aliasdatalabel (unsigned label, unsigned baselabel, long offs)
-/* Define label as a local alias for baselabel+offs */
-{
-    /* We need an intermediate buffer here since LocalLabelName uses a
-    ** static buffer which changes with each call.
-    */
-    StrBuf L = AUTO_STRBUF_INITIALIZER;
-    SB_AppendStr (&L, LocalLabelName (label));
-    SB_Terminate (&L);
-    AddDataLine ("%s\t:=\t%s+%ld",
-                 SB_GetConstBuf (&L),
-                 LocalLabelName (baselabel),
-                 offs);
-    SB_Done (&L);
-}
-
-
-
-/*****************************************************************************/
-/*                     Functions handling global labels                      */
-/*****************************************************************************/
-
-
-
-void g_defgloblabel (const char* Name)
-/* Define a global label with the given name */
-{
-    /* Global labels are always data labels */
-    AddDataLine ("_%s:", Name);
-}
-
-
-
-void g_defexport (const char* Name, int ZP)
-/* Export the given label */
-{
-    if (ZP) {
-        AddTextLine ("\t.exportzp\t_%s", Name);
-    } else {
-        AddTextLine ("\t.export\t\t_%s", Name);
-    }
-}
-
-
-
-void g_defimport (const char* Name, int ZP)
-/* Import the given label */
-{
-    if (ZP) {
-        AddTextLine ("\t.importzp\t_%s", Name);
-    } else {
-        AddTextLine ("\t.import\t\t_%s", Name);
-    }
-}
-
-
-
-void g_importstartup (void)
-/* Forced import of the startup module */
-{
-    AddTextLine ("\t.forceimport\t__STARTUP__");
-}
-
-
-
-void g_importmainargs (void)
-/* Forced import of a special symbol that handles arguments to main */
-{
-    AddTextLine ("\t.forceimport\tinitmainargs");
-}
-
-
-
-/*****************************************************************************/
-/*                          Function entry and exit                          */
-/*****************************************************************************/
-
-
-
-/* Remember the argument size of a function. The variable is set by g_enter
-** and used by g_leave. If the function gets its argument size by the caller
-** (variable param list or function without prototype), g_enter will set the
-** value to -1.
-*/
-static int funcargs;
-
-
-void g_enter (unsigned flags, unsigned argsize)
-/* Function prologue */
-{
-    if ((flags & CF_FIXARGC) != 0) {
-        /* Just remember the argument size for the leave */
-        funcargs = argsize;
-    } else {
-        funcargs = -1;
-        AddCodeLine ("jsr enter");
-    }
-}
-
-
-
-void g_leave (void)
-/* Function epilogue */
-{
-    /* How many bytes of locals do we have to drop? */
-    unsigned ToDrop = (unsigned) -StackPtr;
-
-    /* If we didn't have a variable argument list, don't call leave */
-    if (funcargs >= 0) {
-
-        /* Drop stackframe if needed */
-        g_drop (ToDrop + funcargs);
-
-    } else if (StackPtr != 0) {
-
-        /* We've a stack frame to drop */
-        if (ToDrop > 255) {
-            g_drop (ToDrop);            /* Inlines the code */
-            AddCodeLine ("jsr leave");
-        } else {
-            AddCodeLine ("ldy #$%02X", ToDrop);
-            AddCodeLine ("jsr leavey");
-        }
-
-    } else {
-
-        /* Nothing to drop */
-        AddCodeLine ("jsr leave");
-
-    }
-
-    /* Add the final rts */
-    AddCodeLine ("rts");
-}
-
-
-
-/*****************************************************************************/
-/*                            Register variables                             */
-/*****************************************************************************/
-
-
-
-void g_swap_regvars (int StackOffs, int RegOffs, unsigned Bytes)
-/* Swap a register variable with a location on the stack */
-{
-    /* Calculate the actual stack offset and check it */
-    StackOffs -= StackPtr;
-    CheckLocalOffs (StackOffs);
-
-    /* Generate code */
-    AddCodeLine ("ldy #$%02X", StackOffs & 0xFF);
-    if (Bytes == 1) {
-
-        if (IS_Get (&CodeSizeFactor) < 165) {
-            AddCodeLine ("ldx #$%02X", RegOffs & 0xFF);
-            AddCodeLine ("jsr regswap1");
-        } else {
-            AddCodeLine ("lda (sp),y");
-            AddCodeLine ("ldx regbank%+d", RegOffs);
-            AddCodeLine ("sta regbank%+d", RegOffs);
-            AddCodeLine ("txa");
-            AddCodeLine ("sta (sp),y");
-        }
-
-    } else if (Bytes == 2) {
-
-        AddCodeLine ("ldx #$%02X", RegOffs & 0xFF);
-        AddCodeLine ("jsr regswap2");
-
-    } else {
-
-        AddCodeLine ("ldx #$%02X", RegOffs & 0xFF);
-        AddCodeLine ("lda #$%02X", Bytes & 0xFF);
-        AddCodeLine ("jsr regswap");
-    }
-}
-
-
-
-void g_save_regvars (int RegOffs, unsigned Bytes)
-/* Save register variables */
-{
-    /* Don't loop for up to two bytes */
-    if (Bytes == 1) {
-
-        AddCodeLine ("lda regbank%+d", RegOffs);
-        AddCodeLine ("jsr pusha");
-
-    } else if (Bytes == 2) {
-
-        AddCodeLine ("lda regbank%+d", RegOffs);
-        AddCodeLine ("ldx regbank%+d", RegOffs+1);
-        AddCodeLine ("jsr pushax");
-
-    } else {
-
-        /* More than two bytes - loop */
-        unsigned Label = GetLocalLabel ();
-        g_space (Bytes);
-        AddCodeLine ("ldy #$%02X", (unsigned char) (Bytes - 1));
-        AddCodeLine ("ldx #$%02X", (unsigned char) Bytes);
-        g_defcodelabel (Label);
-        AddCodeLine ("lda regbank%+d,x", RegOffs-1);
-        AddCodeLine ("sta (sp),y");
-        AddCodeLine ("dey");
-        AddCodeLine ("dex");
-        AddCodeLine ("bne %s", LocalLabelName (Label));
-
-    }
-
-    /* We pushed stuff, correct the stack pointer */
-    StackPtr -= Bytes;
-}
-
-
-
-void g_restore_regvars (int StackOffs, int RegOffs, unsigned Bytes)
-/* Restore register variables */
-{
-    /* Calculate the actual stack offset and check it */
-    StackOffs -= StackPtr;
-    CheckLocalOffs (StackOffs);
-
-    /* Don't loop for up to two bytes */
-    if (Bytes == 1) {
-
-        AddCodeLine ("ldy #$%02X", StackOffs);
-        AddCodeLine ("lda (sp),y");
-        AddCodeLine ("sta regbank%+d", RegOffs);
-
-    } else if (Bytes == 2) {
-
-        AddCodeLine ("ldy #$%02X", StackOffs);
-        AddCodeLine ("lda (sp),y");
-        AddCodeLine ("sta regbank%+d", RegOffs);
-        AddCodeLine ("iny");
-        AddCodeLine ("lda (sp),y");
-        AddCodeLine ("sta regbank%+d", RegOffs+1);
-
-    } else if (Bytes == 3 && IS_Get (&CodeSizeFactor) >= 133) {
-
-        AddCodeLine ("ldy #$%02X", StackOffs);
-        AddCodeLine ("lda (sp),y");
-        AddCodeLine ("sta regbank%+d", RegOffs);
-        AddCodeLine ("iny");
-        AddCodeLine ("lda (sp),y");
-        AddCodeLine ("sta regbank%+d", RegOffs+1);
-        AddCodeLine ("iny");
-        AddCodeLine ("lda (sp),y");
-        AddCodeLine ("sta regbank%+d", RegOffs+2);
-
-    } else if (StackOffs <= RegOffs) {
-
-        /* More bytes, but the relation between the register offset in the
-        ** register bank and the stack offset allows us to generate short
-        ** code that uses just one index register.
-        */
-        unsigned Label = GetLocalLabel ();
-        AddCodeLine ("ldy #$%02X", StackOffs);
-        g_defcodelabel (Label);
-        AddCodeLine ("lda (sp),y");
-        AddCodeLine ("sta regbank%+d,y", RegOffs - StackOffs);
-        AddCodeLine ("iny");
-        AddCodeLine ("cpy #$%02X", StackOffs + Bytes);
-        AddCodeLine ("bne %s", LocalLabelName (Label));
-
-    } else {
-
-        /* OK, this is the generic code. We need to save X because the
-        ** caller will only save A.
-        */
-        unsigned Label = GetLocalLabel ();
-        AddCodeLine ("stx tmp1");
-        AddCodeLine ("ldy #$%02X", (unsigned char) (StackOffs + Bytes - 1));
-        AddCodeLine ("ldx #$%02X", (unsigned char) (Bytes - 1));
-        g_defcodelabel (Label);
-        AddCodeLine ("lda (sp),y");
-        AddCodeLine ("sta regbank%+d,x", RegOffs);
-        AddCodeLine ("dey");
-        AddCodeLine ("dex");
-        AddCodeLine ("bpl %s", LocalLabelName (Label));
-        AddCodeLine ("ldx tmp1");
-
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                           Fetching memory cells                           */
-/*****************************************************************************/
-
-
-
-void g_getimmed (unsigned Flags, unsigned long Val, long Offs)
-/* Load a constant into the primary register */
-{
-    unsigned char B1, B2, B3, B4;
-    unsigned      Done;
-
-
-    if ((Flags & CF_CONST) != 0) {
-
-        /* Numeric constant */
-        switch (Flags & CF_TYPEMASK) {
-
-            case CF_CHAR:
-                if ((Flags & CF_FORCECHAR) != 0) {
-                    AddCodeLine ("lda #$%02X", (unsigned char) Val);
-                    break;
-                }
-                /* FALL THROUGH */
-            case CF_INT:
-                AddCodeLine ("ldx #$%02X", (unsigned char) (Val >> 8));
-                AddCodeLine ("lda #$%02X", (unsigned char) Val);
-                break;
-
-            case CF_LONG:
-                /* Split the value into 4 bytes */
-                B1 = (unsigned char) (Val >>  0);
-                B2 = (unsigned char) (Val >>  8);
-                B3 = (unsigned char) (Val >> 16);
-                B4 = (unsigned char) (Val >> 24);
-
-                /* Remember which bytes are done */
-                Done = 0;
-
-                /* Load the value */
-                AddCodeLine ("ldx #$%02X", B2);
-                Done |= 0x02;
-                if (B2 == B3) {
-                    AddCodeLine ("stx sreg");
-                    Done |= 0x04;
-                }
-                if (B2 == B4) {
-                    AddCodeLine ("stx sreg+1");
-                    Done |= 0x08;
-                }
-                if ((Done & 0x04) == 0 && B1 != B3) {
-                    AddCodeLine ("lda #$%02X", B3);
-                    AddCodeLine ("sta sreg");
-                    Done |= 0x04;
-                }
-                if ((Done & 0x08) == 0 && B1 != B4) {
-                    AddCodeLine ("lda #$%02X", B4);
-                    AddCodeLine ("sta sreg+1");
-                    Done |= 0x08;
-                }
-                AddCodeLine ("lda #$%02X", B1);
-                Done |= 0x01;
-                if ((Done & 0x04) == 0) {
-                    CHECK (B1 == B3);
-                    AddCodeLine ("sta sreg");
-                }
-                if ((Done & 0x08) == 0) {
-                    CHECK (B1 == B4);
-                    AddCodeLine ("sta sreg+1");
-                }
-                break;
-
-            default:
-                typeerror (Flags);
-                break;
-
-        }
-
-    } else {
-
-        /* Some sort of label */
-        const char* Label = GetLabelName (Flags, Val, Offs);
-
-        /* Load the address into the primary */
-        AddCodeLine ("lda #<(%s)", Label);
-        AddCodeLine ("ldx #>(%s)", Label);
-
-    }
-}
-
-
-
-void g_getstatic (unsigned flags, unsigned long label, long offs)
-/* Fetch an static memory cell into the primary register */
-{
-    /* Create the correct label name */
-    const char* lbuf = GetLabelName (flags, label, offs);
-
-    /* Check the size and generate the correct load operation */
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            if ((flags & CF_FORCECHAR) || (flags & CF_TEST)) {
-                AddCodeLine ("lda %s", lbuf);   /* load A from the label */
-            } else {
-                AddCodeLine ("ldx #$00");
-                AddCodeLine ("lda %s", lbuf);   /* load A from the label */
-                if (!(flags & CF_UNSIGNED)) {
-                    /* Must sign extend */
-                    unsigned L = GetLocalLabel ();
-                    AddCodeLine ("bpl %s", LocalLabelName (L));
-                    AddCodeLine ("dex");
-                    g_defcodelabel (L);
-                }
-            }
-            break;
-
-        case CF_INT:
-            AddCodeLine ("lda %s", lbuf);
-            if (flags & CF_TEST) {
-                AddCodeLine ("ora %s+1", lbuf);
-            } else {
-                AddCodeLine ("ldx %s+1", lbuf);
-            }
-            break;
-
-        case CF_LONG:
-            if (flags & CF_TEST) {
-                AddCodeLine ("lda %s+3", lbuf);
-                AddCodeLine ("ora %s+2", lbuf);
-                AddCodeLine ("ora %s+1", lbuf);
-                AddCodeLine ("ora %s+0", lbuf);
-            } else {
-                AddCodeLine ("lda %s+3", lbuf);
-                AddCodeLine ("sta sreg+1");
-                AddCodeLine ("lda %s+2", lbuf);
-                AddCodeLine ("sta sreg");
-                AddCodeLine ("ldx %s+1", lbuf);
-                AddCodeLine ("lda %s", lbuf);
-            }
-            break;
-
-        default:
-            typeerror (flags);
-
-    }
-}
-
-
-
-void g_getlocal (unsigned Flags, int Offs)
-/* Fetch specified local object (local var). */
-{
-    Offs -= StackPtr;
-    switch (Flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            CheckLocalOffs (Offs);
-            if ((Flags & CF_FORCECHAR) || (Flags & CF_TEST)) {
-                AddCodeLine ("ldy #$%02X", Offs);
-                AddCodeLine ("lda (sp),y");
-            } else {
-                AddCodeLine ("ldy #$%02X", Offs);
-                AddCodeLine ("ldx #$00");
-                AddCodeLine ("lda (sp),y");
-                if ((Flags & CF_UNSIGNED) == 0) {
-                    unsigned L = GetLocalLabel();
-                    AddCodeLine ("bpl %s", LocalLabelName (L));
-                    AddCodeLine ("dex");
-                    g_defcodelabel (L);
-                }
-            }
-            break;
-
-        case CF_INT:
-            CheckLocalOffs (Offs + 1);
-            AddCodeLine ("ldy #$%02X", (unsigned char) (Offs+1));
-            if (Flags & CF_TEST) {
-                AddCodeLine ("lda (sp),y");
-                AddCodeLine ("dey");
-                AddCodeLine ("ora (sp),y");
-            } else {
-                AddCodeLine ("jsr ldaxysp");
-            }
-            break;
-
-        case CF_LONG:
-            CheckLocalOffs (Offs + 3);
-            AddCodeLine ("ldy #$%02X", (unsigned char) (Offs+3));
-            AddCodeLine ("jsr ldeaxysp");
-            if (Flags & CF_TEST) {
-                g_test (Flags);
-            }
-            break;
-
-        default:
-            typeerror (Flags);
-    }
-}
-
-
-
-void g_getind (unsigned Flags, unsigned Offs)
-/* Fetch the specified object type indirect through the primary register
-** into the primary register
-*/
-{
-    /* If the offset is greater than 255, add the part that is > 255 to
-    ** the primary. This way we get an easy addition and use the low byte
-    ** as the offset
-    */
-    Offs = MakeByteOffs (Flags, Offs);
-
-    /* Handle the indirect fetch */
-    switch (Flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            /* Character sized */
-            AddCodeLine ("ldy #$%02X", Offs);
-            if (Flags & CF_UNSIGNED) {
-                AddCodeLine ("jsr ldauidx");
-            } else {
-                AddCodeLine ("jsr ldaidx");
-            }
-            break;
-
-        case CF_INT:
-            if (Flags & CF_TEST) {
-                AddCodeLine ("ldy #$%02X", Offs);
-                AddCodeLine ("sta ptr1");
-                AddCodeLine ("stx ptr1+1");
-                AddCodeLine ("lda (ptr1),y");
-                AddCodeLine ("iny");
-                AddCodeLine ("ora (ptr1),y");
-            } else {
-                AddCodeLine ("ldy #$%02X", Offs+1);
-                AddCodeLine ("jsr ldaxidx");
-            }
-            break;
-
-        case CF_LONG:
-            AddCodeLine ("ldy #$%02X", Offs+3);
-            AddCodeLine ("jsr ldeaxidx");
-            if (Flags & CF_TEST) {
-                g_test (Flags);
-            }
-            break;
-
-        default:
-            typeerror (Flags);
-
-    }
-}
-
-
-
-void g_leasp (int Offs)
-/* Fetch the address of the specified symbol into the primary register */
-{
-    unsigned char Lo, Hi;
-
-    /* Calculate the offset relative to sp */
-    Offs -= StackPtr;
-
-    /* Get low and high byte */
-    Lo = (unsigned char) Offs;
-    Hi = (unsigned char) (Offs >> 8);
-
-    /* Generate code */
-    if (Lo == 0) {
-        if (Hi <= 3) {
-            AddCodeLine ("lda sp");
-            AddCodeLine ("ldx sp+1");
-            while (Hi--) {
-                AddCodeLine ("inx");
-            }
-        } else {
-            AddCodeLine ("lda sp+1");
-            AddCodeLine ("clc");
-            AddCodeLine ("adc #$%02X", Hi);
-            AddCodeLine ("tax");
-            AddCodeLine ("lda sp");
-        }
-    } else if (Hi == 0) {
-        /* 8 bit offset */
-        if (IS_Get (&CodeSizeFactor) < 200) {
-            /* 8 bit offset with subroutine call */
-            AddCodeLine ("lda #$%02X", Lo);
-            AddCodeLine ("jsr leaa0sp");
-        } else {
-            /* 8 bit offset inlined */
-            unsigned L = GetLocalLabel ();
-            AddCodeLine ("lda sp");
-            AddCodeLine ("ldx sp+1");
-            AddCodeLine ("clc");
-            AddCodeLine ("adc #$%02X", Lo);
-            AddCodeLine ("bcc %s", LocalLabelName (L));
-            AddCodeLine ("inx");
-            g_defcodelabel (L);
-        }
-    } else if (IS_Get (&CodeSizeFactor) < 170) {
-        /* Full 16 bit offset with subroutine call */
-        AddCodeLine ("lda #$%02X", Lo);
-        AddCodeLine ("ldx #$%02X", Hi);
-        AddCodeLine ("jsr leaaxsp");
-    } else {
-        /* Full 16 bit offset inlined */
-        AddCodeLine ("lda sp");
-        AddCodeLine ("clc");
-        AddCodeLine ("adc #$%02X", Lo);
-        AddCodeLine ("pha");
-        AddCodeLine ("lda sp+1");
-        AddCodeLine ("adc #$%02X", Hi);
-        AddCodeLine ("tax");
-        AddCodeLine ("pla");
-    }
-}
-
-
-
-void g_leavariadic (int Offs)
-/* Fetch the address of a parameter in a variadic function into the primary
-** register
-*/
-{
-    unsigned ArgSizeOffs;
-
-    /* Calculate the offset relative to sp */
-    Offs -= StackPtr;
-
-    /* Get the offset of the parameter which is stored at sp+0 on function
-    ** entry and check if this offset is reachable with a byte offset.
-    */
-    CHECK (StackPtr <= 0);
-    ArgSizeOffs = -StackPtr;
-    CheckLocalOffs (ArgSizeOffs);
-
-    /* Get the size of all parameters. */
-    AddCodeLine ("ldy #$%02X", ArgSizeOffs);
-    AddCodeLine ("lda (sp),y");
-
-    /* Add the value of the stackpointer */
-    if (IS_Get (&CodeSizeFactor) > 250) {
-        unsigned L = GetLocalLabel();
-        AddCodeLine ("ldx sp+1");
-        AddCodeLine ("clc");
-        AddCodeLine ("adc sp");
-        AddCodeLine ("bcc %s", LocalLabelName (L));
-        AddCodeLine ("inx");
-        g_defcodelabel (L);
-    } else {
-        AddCodeLine ("ldx #$00");
-        AddCodeLine ("jsr leaaxsp");
-    }
-
-    /* Add the offset to the primary */
-    if (Offs > 0) {
-        g_inc (CF_INT | CF_CONST, Offs);
-    } else if (Offs < 0) {
-        g_dec (CF_INT | CF_CONST, -Offs);
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                             Store into memory                             */
-/*****************************************************************************/
-
-
-
-void g_putstatic (unsigned flags, unsigned long label, long offs)
-/* Store the primary register into the specified static memory cell */
-{
-    /* Create the correct label name */
-    const char* lbuf = GetLabelName (flags, label, offs);
-
-    /* Check the size and generate the correct store operation */
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            AddCodeLine ("sta %s", lbuf);
-            break;
-
-        case CF_INT:
-            AddCodeLine ("sta %s", lbuf);
-            AddCodeLine ("stx %s+1", lbuf);
-            break;
-
-        case CF_LONG:
-            AddCodeLine ("sta %s", lbuf);
-            AddCodeLine ("stx %s+1", lbuf);
-            AddCodeLine ("ldy sreg");
-            AddCodeLine ("sty %s+2", lbuf);
-            AddCodeLine ("ldy sreg+1");
-            AddCodeLine ("sty %s+3", lbuf);
-            break;
-
-        default:
-            typeerror (flags);
-
-    }
-}
-
-
-
-void g_putlocal (unsigned Flags, int Offs, long Val)
-/* Put data into local object. */
-{
-    Offs -= StackPtr;
-    CheckLocalOffs (Offs);
-    switch (Flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            if (Flags & CF_CONST) {
-                AddCodeLine ("lda #$%02X", (unsigned char) Val);
-            }
-            AddCodeLine ("ldy #$%02X", Offs);
-            AddCodeLine ("sta (sp),y");
-            break;
-
-        case CF_INT:
-            if (Flags & CF_CONST) {
-                AddCodeLine ("ldy #$%02X", Offs+1);
-                AddCodeLine ("lda #$%02X", (unsigned char) (Val >> 8));
-                AddCodeLine ("sta (sp),y");
-                if ((Flags & CF_NOKEEP) == 0) {
-                    /* Place high byte into X */
-                    AddCodeLine ("tax");
-                }
-                if ((Val & 0xFF) == Offs+1) {
-                    /* The value we need is already in Y */
-                    AddCodeLine ("tya");
-                    AddCodeLine ("dey");
-                } else {
-                    AddCodeLine ("dey");
-                    AddCodeLine ("lda #$%02X", (unsigned char) Val);
-                }
-                AddCodeLine ("sta (sp),y");
-            } else {
-                AddCodeLine ("ldy #$%02X", Offs);
-                if ((Flags & CF_NOKEEP) == 0 || IS_Get (&CodeSizeFactor) < 160) {
-                    AddCodeLine ("jsr staxysp");
-                } else {
-                    AddCodeLine ("sta (sp),y");
-                    AddCodeLine ("iny");
-                    AddCodeLine ("txa");
-                    AddCodeLine ("sta (sp),y");
-                }
-            }
-            break;
-
-        case CF_LONG:
-            if (Flags & CF_CONST) {
-                g_getimmed (Flags, Val, 0);
-            }
-            AddCodeLine ("ldy #$%02X", Offs);
-            AddCodeLine ("jsr steaxysp");
-            break;
-
-        default:
-            typeerror (Flags);
-
-    }
-}
-
-
-
-void g_putind (unsigned Flags, unsigned Offs)
-/* Store the specified object type in the primary register at the address
-** on the top of the stack
-*/
-{
-    /* We can handle offsets below $100 directly, larger offsets must be added
-    ** to the address. Since a/x is in use, best code is achieved by adding
-    ** just the high byte. Be sure to check if the low byte will overflow while
-    ** while storing.
-    */
-    if ((Offs & 0xFF) > 256 - sizeofarg (Flags | CF_FORCECHAR)) {
-
-        /* Overflow - we need to add the low byte also */
-        AddCodeLine ("ldy #$00");
-        AddCodeLine ("clc");
-        AddCodeLine ("pha");
-        AddCodeLine ("lda #$%02X", Offs & 0xFF);
-        AddCodeLine ("adc (sp),y");
-        AddCodeLine ("sta (sp),y");
-        AddCodeLine ("iny");
-        AddCodeLine ("lda #$%02X", (Offs >> 8) & 0xFF);
-        AddCodeLine ("adc (sp),y");
-        AddCodeLine ("sta (sp),y");
-        AddCodeLine ("pla");
-
-        /* Complete address is on stack, new offset is zero */
-        Offs = 0;
-
-    } else if ((Offs & 0xFF00) != 0) {
-
-        /* We can just add the high byte */
-        AddCodeLine ("ldy #$01");
-        AddCodeLine ("clc");
-        AddCodeLine ("pha");
-        AddCodeLine ("lda #$%02X", (Offs >> 8) & 0xFF);
-        AddCodeLine ("adc (sp),y");
-        AddCodeLine ("sta (sp),y");
-        AddCodeLine ("pla");
-
-        /* Offset is now just the low byte */
-        Offs &= 0x00FF;
-    }
-
-    /* Check the size and determine operation */
-    AddCodeLine ("ldy #$%02X", Offs);
-    switch (Flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            AddCodeLine ("jsr staspidx");
-            break;
-
-        case CF_INT:
-            AddCodeLine ("jsr staxspidx");
-            break;
-
-        case CF_LONG:
-            AddCodeLine ("jsr steaxspidx");
-            break;
-
-        default:
-            typeerror (Flags);
-
-    }
-
-    /* Pop the argument which is always a pointer */
-    pop (CF_PTR);
-}
-
-
-
-/*****************************************************************************/
-/*                    type conversion and similiar stuff                     */
-/*****************************************************************************/
-
-
-
-void g_toslong (unsigned flags)
-/* Make sure, the value on TOS is a long. Convert if necessary */
-{
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-        case CF_INT:
-            if (flags & CF_UNSIGNED) {
-                AddCodeLine ("jsr tosulong");
-            } else {
-                AddCodeLine ("jsr toslong");
-            }
-            push (CF_INT);
-            break;
-
-        case CF_LONG:
-            break;
-
-        default:
-            typeerror (flags);
-    }
-}
-
-
-
-void g_tosint (unsigned flags)
-/* Make sure, the value on TOS is an int. Convert if necessary */
-{
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-        case CF_INT:
-            break;
-
-        case CF_LONG:
-            AddCodeLine ("jsr tosint");
-            pop (CF_INT);
-            break;
-
-        default:
-            typeerror (flags);
-    }
-}
-
-
-
-static void g_regchar (unsigned Flags)
-/* Make sure, the value in the primary register is in the range of char. Truncate if necessary */
-{
-    unsigned L;
-
-    AddCodeLine ("ldx #$00");
-
-    if ((Flags & CF_UNSIGNED) == 0) {
-        /* Sign extend */
-        L = GetLocalLabel();
-        AddCodeLine ("cmp #$80");
-        AddCodeLine ("bcc %s", LocalLabelName (L));
-        AddCodeLine ("dex");
-        g_defcodelabel (L);
-    }
-}
-
-
-
-void g_regint (unsigned Flags)
-/* Make sure, the value in the primary register an int. Convert if necessary */
-{
-    switch (Flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            if (Flags & CF_FORCECHAR) {
-                /* Conversion is from char */
-                g_regchar (Flags);
-            }
-            /* FALLTHROUGH */
-
-        case CF_INT:
-        case CF_LONG:
-            break;
-
-        default:
-            typeerror (Flags);
-    }
-}
-
-
-
-void g_reglong (unsigned Flags)
-/* Make sure, the value in the primary register a long. Convert if necessary */
-{
-    switch (Flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            if (Flags & CF_FORCECHAR) {
-                /* Conversion is from char */
-                if (Flags & CF_UNSIGNED) {
-                    if (IS_Get (&CodeSizeFactor) >= 200) {
-                        AddCodeLine ("ldx #$00");
-                        AddCodeLine ("stx sreg");
-                        AddCodeLine ("stx sreg+1");
-                    } else {
-                        AddCodeLine ("jsr aulong");
-                    }
-                } else {
-                    if (IS_Get (&CodeSizeFactor) >= 366) {
-                        g_regchar (Flags);
-                        AddCodeLine ("stx sreg");
-                        AddCodeLine ("stx sreg+1");
-                    } else {
-                        AddCodeLine ("jsr along");
-                    }
-                }
-            }
-            /* FALLTHROUGH */
-
-        case CF_INT:
-            if (Flags & CF_UNSIGNED) {
-                if (IS_Get (&CodeSizeFactor) >= 200) {
-                    AddCodeLine ("ldy #$00");
-                    AddCodeLine ("sty sreg");
-                    AddCodeLine ("sty sreg+1");
-                } else {
-                    AddCodeLine ("jsr axulong");
-                }
-            } else {
-                AddCodeLine ("jsr axlong");
-            }
-            break;
-
-        case CF_LONG:
-            break;
-
-        default:
-            typeerror (Flags);
-    }
-}
-
-
-
-unsigned g_typeadjust (unsigned lhs, unsigned rhs)
-/* Adjust the integer operands before doing a binary operation. lhs is a flags
-** value, that corresponds to the value on TOS, rhs corresponds to the value
-** in (e)ax. The return value is the the flags value for the resulting type.
-*/
-{
-    unsigned ltype, rtype;
-    unsigned result;
-
-    /* Get the type spec from the flags */
-    ltype = lhs & CF_TYPEMASK;
-    rtype = rhs & CF_TYPEMASK;
-
-    /* Check if a conversion is needed */
-    if (ltype == CF_LONG && rtype != CF_LONG && (rhs & CF_CONST) == 0) {
-        /* We must promote the primary register to long */
-        g_reglong (rhs);
-        /* Get the new rhs type */
-        rhs = (rhs & ~CF_TYPEMASK) | CF_LONG;
-        rtype = CF_LONG;
-    } else if (ltype != CF_LONG && (lhs & CF_CONST) == 0 && rtype == CF_LONG) {
-        /* We must promote the lhs to long */
-        if (lhs & CF_REG) {
-            g_reglong (lhs);
-        } else {
-            g_toslong (lhs);
-        }
-        /* Get the new rhs type */
-        lhs = (lhs & ~CF_TYPEMASK) | CF_LONG;
-        ltype = CF_LONG;
-    }
-
-    /* Determine the result type for the operation:
-    **  - The result is const if both operands are const.
-    **  - The result is unsigned if one of the operands is unsigned.
-    **  - The result is long if one of the operands is long.
-    **  - Otherwise the result is int sized.
-    */
-    result = (lhs & CF_CONST) & (rhs & CF_CONST);
-    result |= (lhs & CF_UNSIGNED) | (rhs & CF_UNSIGNED);
-    if (rtype == CF_LONG || ltype == CF_LONG) {
-        result |= CF_LONG;
-    } else {
-        result |= CF_INT;
-    }
-    return result;
-}
-
-
-
-unsigned g_typecast (unsigned lhs, unsigned rhs)
-/* Cast the value in the primary register to the operand size that is flagged
-** by the lhs value. Return the result value.
-*/
-{
-    /* Check if a conversion is needed */
-    if ((rhs & CF_CONST) == 0) {
-        switch (lhs & CF_TYPEMASK) {
-
-            case CF_LONG:
-                /* We must promote the primary register to long */
-                g_reglong (rhs);
-                break;
-
-            case CF_INT:
-                /* We must promote the primary register to int */
-                g_regint (rhs);
-                break;
-
-            case CF_CHAR:
-                /* We must truncate the primary register to char */
-                g_regchar (lhs);
-                break;
-
-            default:
-                typeerror (lhs);
-        }
-    }
-
-    /* Do not need any other action. If the left type is int, and the primary
-    ** register is long, it will be automagically truncated. If the right hand
-    ** side is const, it is not located in the primary register and handled by
-    ** the expression parser code.
-    */
-
-    /* Result is const if the right hand side was const */
-    lhs |= (rhs & CF_CONST);
-
-    /* The resulting type is that of the left hand side (that's why you called
-    ** this function :-)
-    */
-    return lhs;
-}
-
-
-
-void g_scale (unsigned flags, long val)
-/* Scale the value in the primary register by the given value. If val is positive,
-** scale up, is val is negative, scale down. This function is used to scale
-** the operands or results of pointer arithmetic by the size of the type, the
-** pointer points to.
-*/
-{
-    int p2;
-
-    /* Value may not be zero */
-    if (val == 0) {
-        Internal ("Data type has no size");
-    } else if (val > 0) {
-
-        /* Scale up */
-        if ((p2 = PowerOf2 (val)) > 0 && p2 <= 4) {
-
-            /* Factor is 2, 4, 8 and 16, use special function */
-            switch (flags & CF_TYPEMASK) {
-
-                case CF_CHAR:
-                    if (flags & CF_FORCECHAR) {
-                        while (p2--) {
-                            AddCodeLine ("asl a");
-                        }
-                        break;
-                    }
-                    /* FALLTHROUGH */
-
-                case CF_INT:
-                    if (flags & CF_UNSIGNED) {
-                        AddCodeLine ("jsr shlax%d", p2);
-                    } else {
-                        AddCodeLine ("jsr aslax%d", p2);
-                    }
-                    break;
-
-                case CF_LONG:
-                    if (flags & CF_UNSIGNED) {
-                        AddCodeLine ("jsr shleax%d", p2);
-                    } else {
-                        AddCodeLine ("jsr asleax%d", p2);
-                    }
-                    break;
-
-                default:
-                    typeerror (flags);
-
-            }
-
-        } else if (val != 1) {
-
-            /* Use a multiplication instead */
-            g_mul (flags | CF_CONST, val);
-
-        }
-
-    } else {
-
-        /* Scale down */
-        val = -val;
-        if ((p2 = PowerOf2 (val)) > 0 && p2 <= 4) {
-
-            /* Factor is 2, 4, 8 and 16 use special function */
-            switch (flags & CF_TYPEMASK) {
-
-                case CF_CHAR:
-                    if (flags & CF_FORCECHAR) {
-                        if (flags & CF_UNSIGNED) {
-                            while (p2--) {
-                                AddCodeLine ("lsr a");
-                            }
-                            break;
-                        } else if (p2 <= 2) {
-                            AddCodeLine ("cmp #$80");
-                            AddCodeLine ("ror a");
-                            break;
-                        }
-                    }
-                    /* FALLTHROUGH */
-
-                case CF_INT:
-                    if (flags & CF_UNSIGNED) {
-                        AddCodeLine ("jsr lsrax%d", p2);
-                    } else {
-                        AddCodeLine ("jsr asrax%d", p2);
-                    }
-                    break;
-
-                case CF_LONG:
-                    if (flags & CF_UNSIGNED) {
-                        AddCodeLine ("jsr lsreax%d", p2);
-                    } else {
-                        AddCodeLine ("jsr asreax%d", p2);
-                    }
-                    break;
-
-                default:
-                    typeerror (flags);
-
-            }
-
-        } else if (val != 1) {
-
-            /* Use a division instead */
-            g_div (flags | CF_CONST, val);
-
-        }
-    }
-}
-
-
-
-/*****************************************************************************/
-/*              Adds and subs of variables fix a fixed address               */
-/*****************************************************************************/
-
-
-
-void g_addlocal (unsigned flags, int offs)
-/* Add a local variable to ax */
-{
-    unsigned L;
-
-    /* Correct the offset and check it */
-    offs -= StackPtr;
-    CheckLocalOffs (offs);
-
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            L = GetLocalLabel();
-            AddCodeLine ("ldy #$%02X", offs & 0xFF);
-            AddCodeLine ("clc");
-            AddCodeLine ("adc (sp),y");
-            AddCodeLine ("bcc %s", LocalLabelName (L));
-            AddCodeLine ("inx");
-            g_defcodelabel (L);
-            break;
-
-        case CF_INT:
-            AddCodeLine ("ldy #$%02X", offs & 0xFF);
-            AddCodeLine ("clc");
-            AddCodeLine ("adc (sp),y");
-            AddCodeLine ("pha");
-            AddCodeLine ("txa");
-            AddCodeLine ("iny");
-            AddCodeLine ("adc (sp),y");
-            AddCodeLine ("tax");
-            AddCodeLine ("pla");
-            break;
-
-        case CF_LONG:
-            /* Do it the old way */
-            g_push (flags, 0);
-            g_getlocal (flags, offs);
-            g_add (flags, 0);
-            break;
-
-        default:
-            typeerror (flags);
-
-    }
-}
-
-
-
-void g_addstatic (unsigned flags, unsigned long label, long offs)
-/* Add a static variable to ax */
-{
-    unsigned L;
-
-    /* Create the correct label name */
-    const char* lbuf = GetLabelName (flags, label, offs);
-
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            L = GetLocalLabel();
-            AddCodeLine ("clc");
-            AddCodeLine ("adc %s", lbuf);
-            AddCodeLine ("bcc %s", LocalLabelName (L));
-            AddCodeLine ("inx");
-            g_defcodelabel (L);
-            break;
-
-        case CF_INT:
-            AddCodeLine ("clc");
-            AddCodeLine ("adc %s", lbuf);
-            AddCodeLine ("tay");
-            AddCodeLine ("txa");
-            AddCodeLine ("adc %s+1", lbuf);
-            AddCodeLine ("tax");
-            AddCodeLine ("tya");
-            break;
-
-        case CF_LONG:
-            /* Do it the old way */
-            g_push (flags, 0);
-            g_getstatic (flags, label, offs);
-            g_add (flags, 0);
-            break;
-
-        default:
-            typeerror (flags);
-
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                           Special op= functions                           */
-/*****************************************************************************/
-
-
-
-void g_addeqstatic (unsigned flags, unsigned long label, long offs,
-                    unsigned long val)
-/* Emit += for a static variable */
-{
-    /* Create the correct label name */
-    const char* lbuf = GetLabelName (flags, label, offs);
-
-    /* Check the size and determine operation */
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            if (flags & CF_FORCECHAR) {
-                AddCodeLine ("ldx #$00");
-                if (flags & CF_CONST) {
-                    if (val == 1) {
-                        AddCodeLine ("inc %s", lbuf);
-                        AddCodeLine ("lda %s", lbuf);
-                    } else {
-                        AddCodeLine ("lda #$%02X", (int)(val & 0xFF));
-                        AddCodeLine ("clc");
-                        AddCodeLine ("adc %s", lbuf);
-                        AddCodeLine ("sta %s", lbuf);
-                    }
-                } else {
-                    AddCodeLine ("clc");
-                    AddCodeLine ("adc %s", lbuf);
-                    AddCodeLine ("sta %s", lbuf);
-                }
-                if ((flags & CF_UNSIGNED) == 0) {
-                    unsigned L = GetLocalLabel();
-                    AddCodeLine ("bpl %s", LocalLabelName (L));
-                    AddCodeLine ("dex");
-                    g_defcodelabel (L);
-                }
-                break;
-            }
-            /* FALLTHROUGH */
-
-        case CF_INT:
-            if (flags & CF_CONST) {
-                if (val == 1) {
-                    unsigned L = GetLocalLabel ();
-                    AddCodeLine ("inc %s", lbuf);
-                    AddCodeLine ("bne %s", LocalLabelName (L));
-                    AddCodeLine ("inc %s+1", lbuf);
-                    g_defcodelabel (L);
-                    AddCodeLine ("lda %s", lbuf);               /* Hmmm... */
-                    AddCodeLine ("ldx %s+1", lbuf);
-                } else {
-                    AddCodeLine ("lda #$%02X", (int)(val & 0xFF));
-                    AddCodeLine ("clc");
-                    AddCodeLine ("adc %s", lbuf);
-                    AddCodeLine ("sta %s", lbuf);
-                    if (val < 0x100) {
-                        unsigned L = GetLocalLabel ();
-                        AddCodeLine ("bcc %s", LocalLabelName (L));
-                        AddCodeLine ("inc %s+1", lbuf);
-                        g_defcodelabel (L);
-                        AddCodeLine ("ldx %s+1", lbuf);
-                    } else {
-                        AddCodeLine ("lda #$%02X", (unsigned char)(val >> 8));
-                        AddCodeLine ("adc %s+1", lbuf);
-                        AddCodeLine ("sta %s+1", lbuf);
-                        AddCodeLine ("tax");
-                        AddCodeLine ("lda %s", lbuf);
-                    }
-                }
-            } else {
-                AddCodeLine ("clc");
-                AddCodeLine ("adc %s", lbuf);
-                AddCodeLine ("sta %s", lbuf);
-                AddCodeLine ("txa");
-                AddCodeLine ("adc %s+1", lbuf);
-                AddCodeLine ("sta %s+1", lbuf);
-                AddCodeLine ("tax");
-                AddCodeLine ("lda %s", lbuf);
-            }
-            break;
-
-        case CF_LONG:
-            if (flags & CF_CONST) {
-                if (val < 0x100) {
-                    AddCodeLine ("ldy #<(%s)", lbuf);
-                    AddCodeLine ("sty ptr1");
-                    AddCodeLine ("ldy #>(%s)", lbuf);
-                    if (val == 1) {
-                        AddCodeLine ("jsr laddeq1");
-                    } else {
-                        AddCodeLine ("lda #$%02X", (int)(val & 0xFF));
-                        AddCodeLine ("jsr laddeqa");
-                    }
-                } else {
-                    g_getstatic (flags, label, offs);
-                    g_inc (flags, val);
-                    g_putstatic (flags, label, offs);
-                }
-            } else {
-                AddCodeLine ("ldy #<(%s)", lbuf);
-                AddCodeLine ("sty ptr1");
-                AddCodeLine ("ldy #>(%s)", lbuf);
-                AddCodeLine ("jsr laddeq");
-            }
-            break;
-
-        default:
-            typeerror (flags);
-    }
-}
-
-
-
-void g_addeqlocal (unsigned flags, int Offs, unsigned long val)
-/* Emit += for a local variable */
-{
-    /* Calculate the true offset, check it, load it into Y */
-    Offs -= StackPtr;
-    CheckLocalOffs (Offs);
-
-    /* Check the size and determine operation */
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            if (flags & CF_FORCECHAR) {
-                AddCodeLine ("ldy #$%02X", Offs);
-                AddCodeLine ("ldx #$00");
-                if (flags & CF_CONST) {
-                    AddCodeLine ("clc");
-                    AddCodeLine ("lda #$%02X", (int)(val & 0xFF));
-                    AddCodeLine ("adc (sp),y");
-                    AddCodeLine ("sta (sp),y");
-                } else {
-                    AddCodeLine ("clc");
-                    AddCodeLine ("adc (sp),y");
-                    AddCodeLine ("sta (sp),y");
-                }
-                if ((flags & CF_UNSIGNED) == 0) {
-                    unsigned L = GetLocalLabel();
-                    AddCodeLine ("bpl %s", LocalLabelName (L));
-                    AddCodeLine ("dex");
-                    g_defcodelabel (L);
-                }
-                break;
-            }
-            /* FALLTHROUGH */
-
-        case CF_INT:
-            AddCodeLine ("ldy #$%02X", Offs);
-            if (flags & CF_CONST) {
-                if (IS_Get (&CodeSizeFactor) >= 400) {
-                    AddCodeLine ("clc");
-                    AddCodeLine ("lda #$%02X", (int)(val & 0xFF));
-                    AddCodeLine ("adc (sp),y");
-                    AddCodeLine ("sta (sp),y");
-                    AddCodeLine ("iny");
-                    AddCodeLine ("lda #$%02X", (int) ((val >> 8) & 0xFF));
-                    AddCodeLine ("adc (sp),y");
-                    AddCodeLine ("sta (sp),y");
-                    AddCodeLine ("tax");
-                    AddCodeLine ("dey");
-                    AddCodeLine ("lda (sp),y");
-                } else {
-                    g_getimmed (flags, val, 0);
-                    AddCodeLine ("jsr addeqysp");
-                }
-            } else {
-                AddCodeLine ("jsr addeqysp");
-            }
-            break;
-
-        case CF_LONG:
-            if (flags & CF_CONST) {
-                g_getimmed (flags, val, 0);
-            }
-            AddCodeLine ("ldy #$%02X", Offs);
-            AddCodeLine ("jsr laddeqysp");
-            break;
-
-        default:
-            typeerror (flags);
-    }
-}
-
-
-
-void g_addeqind (unsigned flags, unsigned offs, unsigned long val)
-/* Emit += for the location with address in ax */
-{
-    /* If the offset is too large for a byte register, add the high byte
-    ** of the offset to the primary. Beware: We need a special correction
-    ** if the offset in the low byte will overflow in the operation.
-    */
-    offs = MakeByteOffs (flags, offs);
-
-    /* Check the size and determine operation */
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            AddCodeLine ("sta ptr1");
-            AddCodeLine ("stx ptr1+1");
-            AddCodeLine ("ldy #$%02X", offs);
-            AddCodeLine ("ldx #$00");
-            AddCodeLine ("lda #$%02X", (int)(val & 0xFF));
-            AddCodeLine ("clc");
-            AddCodeLine ("adc (ptr1),y");
-            AddCodeLine ("sta (ptr1),y");
-            break;
-
-        case CF_INT:
-        case CF_LONG:
-            AddCodeLine ("jsr pushax");         /* Push the address */
-            push (CF_PTR);                      /* Correct the internal sp */
-            g_getind (flags, offs);             /* Fetch the value */
-            g_inc (flags, val);                 /* Increment value in primary */
-            g_putind (flags, offs);             /* Store the value back */
-            break;
-
-        default:
-            typeerror (flags);
-    }
-}
-
-
-
-void g_subeqstatic (unsigned flags, unsigned long label, long offs,
-                    unsigned long val)
-/* Emit -= for a static variable */
-{
-    /* Create the correct label name */
-    const char* lbuf = GetLabelName (flags, label, offs);
-
-    /* Check the size and determine operation */
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            if (flags & CF_FORCECHAR) {
-                AddCodeLine ("ldx #$00");
-                if (flags & CF_CONST) {
-                    if (val == 1) {
-                        AddCodeLine ("dec %s", lbuf);
-                        AddCodeLine ("lda %s", lbuf);
-                    } else {
-                        AddCodeLine ("lda %s", lbuf);
-                        AddCodeLine ("sec");
-                        AddCodeLine ("sbc #$%02X", (int)(val & 0xFF));
-                        AddCodeLine ("sta %s", lbuf);
-                    }
-                } else {
-                    AddCodeLine ("eor #$FF");
-                    AddCodeLine ("sec");
-                    AddCodeLine ("adc %s", lbuf);
-                    AddCodeLine ("sta %s", lbuf);
-                }
-                if ((flags & CF_UNSIGNED) == 0) {
-                    unsigned L = GetLocalLabel();
-                    AddCodeLine ("bpl %s", LocalLabelName (L));
-                    AddCodeLine ("dex");
-                    g_defcodelabel (L);
-                }
-                break;
-            }
-            /* FALLTHROUGH */
-
-        case CF_INT:
-            if (flags & CF_CONST) {
-                AddCodeLine ("lda %s", lbuf);
-                AddCodeLine ("sec");
-                AddCodeLine ("sbc #$%02X", (unsigned char)val);
-                AddCodeLine ("sta %s", lbuf);
-                if (val < 0x100) {
-                    unsigned L = GetLocalLabel ();
-                    AddCodeLine ("bcs %s", LocalLabelName (L));
-                    AddCodeLine ("dec %s+1", lbuf);
-                    g_defcodelabel (L);
-                    AddCodeLine ("ldx %s+1", lbuf);
-                } else {
-                    AddCodeLine ("lda %s+1", lbuf);
-                    AddCodeLine ("sbc #$%02X", (unsigned char)(val >> 8));
-                    AddCodeLine ("sta %s+1", lbuf);
-                    AddCodeLine ("tax");
-                    AddCodeLine ("lda %s", lbuf);
-                }
-            } else {
-                AddCodeLine ("eor #$FF");
-                AddCodeLine ("sec");
-                AddCodeLine ("adc %s", lbuf);
-                AddCodeLine ("sta %s", lbuf);
-                AddCodeLine ("txa");
-                AddCodeLine ("eor #$FF");
-                AddCodeLine ("adc %s+1", lbuf);
-                AddCodeLine ("sta %s+1", lbuf);
-                AddCodeLine ("tax");
-                AddCodeLine ("lda %s", lbuf);
-            }
-            break;
-
-        case CF_LONG:
-            if (flags & CF_CONST) {
-                if (val < 0x100) {
-                    AddCodeLine ("ldy #<(%s)", lbuf);
-                    AddCodeLine ("sty ptr1");
-                    AddCodeLine ("ldy #>(%s)", lbuf);
-                    AddCodeLine ("lda #$%02X", (unsigned char)val);
-                    AddCodeLine ("jsr lsubeqa");
-                } else {
-                    g_getstatic (flags, label, offs);
-                    g_dec (flags, val);
-                    g_putstatic (flags, label, offs);
-                }
-            } else {
-                AddCodeLine ("ldy #<(%s)", lbuf);
-                AddCodeLine ("sty ptr1");
-                AddCodeLine ("ldy #>(%s)", lbuf);
-                AddCodeLine ("jsr lsubeq");
-            }
-            break;
-
-        default:
-            typeerror (flags);
-    }
-}
-
-
-
-void g_subeqlocal (unsigned flags, int Offs, unsigned long val)
-/* Emit -= for a local variable */
-{
-    /* Calculate the true offset, check it, load it into Y */
-    Offs -= StackPtr;
-    CheckLocalOffs (Offs);
-
-    /* Check the size and determine operation */
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            if (flags & CF_FORCECHAR) {
-                AddCodeLine ("ldy #$%02X", Offs);
-                AddCodeLine ("ldx #$00");
-                if (flags & CF_CONST) {
-                    AddCodeLine ("lda (sp),y");
-                    AddCodeLine ("sec");
-                    AddCodeLine ("sbc #$%02X", (unsigned char)val);
-                } else {
-                    AddCodeLine ("eor #$FF");
-                    AddCodeLine ("sec");
-                    AddCodeLine ("adc (sp),y");
-                }
-                AddCodeLine ("sta (sp),y");
-                if ((flags & CF_UNSIGNED) == 0) {
-                    unsigned L = GetLocalLabel();
-                    AddCodeLine ("bpl %s", LocalLabelName (L));
-                    AddCodeLine ("dex");
-                    g_defcodelabel (L);
-                }
-                break;
-            }
-            /* FALLTHROUGH */
-
-        case CF_INT:
-            if (flags & CF_CONST) {
-                g_getimmed (flags, val, 0);
-            }
-            AddCodeLine ("ldy #$%02X", Offs);
-            AddCodeLine ("jsr subeqysp");
-            break;
-
-        case CF_LONG:
-            if (flags & CF_CONST) {
-                g_getimmed (flags, val, 0);
-            }
-            AddCodeLine ("ldy #$%02X", Offs);
-            AddCodeLine ("jsr lsubeqysp");
-            break;
-
-        default:
-            typeerror (flags);
-    }
-}
-
-
-
-void g_subeqind (unsigned flags, unsigned offs, unsigned long val)
-/* Emit -= for the location with address in ax */
-{
-    /* If the offset is too large for a byte register, add the high byte
-    ** of the offset to the primary. Beware: We need a special correction
-    ** if the offset in the low byte will overflow in the operation.
-    */
-    offs = MakeByteOffs (flags, offs);
-
-    /* Check the size and determine operation */
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            AddCodeLine ("sta ptr1");
-            AddCodeLine ("stx ptr1+1");
-            AddCodeLine ("ldy #$%02X", offs);
-            AddCodeLine ("ldx #$00");
-            AddCodeLine ("lda (ptr1),y");
-            AddCodeLine ("sec");
-            AddCodeLine ("sbc #$%02X", (unsigned char)val);
-            AddCodeLine ("sta (ptr1),y");
-            break;
-
-        case CF_INT:
-        case CF_LONG:
-            AddCodeLine ("jsr pushax");         /* Push the address */
-            push (CF_PTR);                      /* Correct the internal sp */
-            g_getind (flags, offs);             /* Fetch the value */
-            g_dec (flags, val);                 /* Increment value in primary */
-            g_putind (flags, offs);             /* Store the value back */
-            break;
-
-        default:
-            typeerror (flags);
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                 Add a variable address to the value in ax                 */
-/*****************************************************************************/
-
-
-
-void g_addaddr_local (unsigned flags attribute ((unused)), int offs)
-/* Add the address of a local variable to ax */
-{
-    unsigned L = 0;
-
-    /* Add the offset */
-    offs -= StackPtr;
-    if (offs != 0) {
-        /* We cannot address more then 256 bytes of locals anyway */
-        L = GetLocalLabel();
-        CheckLocalOffs (offs);
-        AddCodeLine ("clc");
-        AddCodeLine ("adc #$%02X", offs & 0xFF);
-        /* Do also skip the CLC insn below */
-        AddCodeLine ("bcc %s", LocalLabelName (L));
-        AddCodeLine ("inx");
-    }
-
-    /* Add the current stackpointer value */
-    AddCodeLine ("clc");
-    if (L != 0) {
-        /* Label was used above */
-        g_defcodelabel (L);
-    }
-    AddCodeLine ("adc sp");
-    AddCodeLine ("tay");
-    AddCodeLine ("txa");
-    AddCodeLine ("adc sp+1");
-    AddCodeLine ("tax");
-    AddCodeLine ("tya");
-}
-
-
-
-void g_addaddr_static (unsigned flags, unsigned long label, long offs)
-/* Add the address of a static variable to ax */
-{
-    /* Create the correct label name */
-    const char* lbuf = GetLabelName (flags, label, offs);
-
-    /* Add the address to the current ax value */
-    AddCodeLine ("clc");
-    AddCodeLine ("adc #<(%s)", lbuf);
-    AddCodeLine ("tay");
-    AddCodeLine ("txa");
-    AddCodeLine ("adc #>(%s)", lbuf);
-    AddCodeLine ("tax");
-    AddCodeLine ("tya");
-}
-
-
-
-/*****************************************************************************/
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-void g_save (unsigned flags)
-/* Copy primary register to hold register. */
-{
-    /* Check the size and determine operation */
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            if (flags & CF_FORCECHAR) {
-                AddCodeLine ("pha");
-                break;
-            }
-            /* FALLTHROUGH */
-
-        case CF_INT:
-            AddCodeLine ("sta regsave");
-            AddCodeLine ("stx regsave+1");
-            break;
-
-        case CF_LONG:
-            AddCodeLine ("jsr saveeax");
-            break;
-
-        default:
-            typeerror (flags);
-    }
-}
-
-
-
-void g_restore (unsigned flags)
-/* Copy hold register to primary. */
-{
-    /* Check the size and determine operation */
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            if (flags & CF_FORCECHAR) {
-                AddCodeLine ("pla");
-                break;
-            }
-            /* FALLTHROUGH */
-
-        case CF_INT:
-            AddCodeLine ("lda regsave");
-            AddCodeLine ("ldx regsave+1");
-            break;
-
-        case CF_LONG:
-            AddCodeLine ("jsr resteax");
-            break;
-
-        default:
-            typeerror (flags);
-    }
-}
-
-
-
-void g_cmp (unsigned flags, unsigned long val)
-/* Immidiate compare. The primary register will not be changed, Z flag
-** will be set.
-*/
-{
-    unsigned L;
-
-    /* Check the size and determine operation */
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            if (flags & CF_FORCECHAR) {
-                AddCodeLine ("cmp #$%02X", (unsigned char)val);
-                break;
-            }
-            /* FALLTHROUGH */
-
-        case CF_INT:
-            L = GetLocalLabel();
-            AddCodeLine ("cmp #$%02X", (unsigned char)val);
-            AddCodeLine ("bne %s", LocalLabelName (L));
-            AddCodeLine ("cpx #$%02X", (unsigned char)(val >> 8));
-            g_defcodelabel (L);
-            break;
-
-        case CF_LONG:
-            Internal ("g_cmp: Long compares not implemented");
-            break;
-
-        default:
-            typeerror (flags);
-    }
-}
-
-
-
-static void oper (unsigned Flags, unsigned long Val, const char** Subs)
-/* Encode a binary operation. subs is a pointer to four strings:
-**      0       --> Operate on ints
-**      1       --> Operate on unsigneds
-**      2       --> Operate on longs
-**      3       --> Operate on unsigned longs
-*/
-{
-    /* Determine the offset into the array */
-    if (Flags & CF_UNSIGNED) {
-        ++Subs;
-    }
-    if ((Flags & CF_TYPEMASK) == CF_LONG) {
-        Subs += 2;
-    }
-
-    /* Load the value if it is not already in the primary */
-    if (Flags & CF_CONST) {
-        /* Load value */
-        g_getimmed (Flags, Val, 0);
-    }
-
-    /* Output the operation */
-    AddCodeLine ("jsr %s", *Subs);
-
-    /* The operation will pop it's argument */
-    pop (Flags);
-}
-
-
-
-void g_test (unsigned flags)
-/* Test the value in the primary and set the condition codes */
-{
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            if (flags & CF_FORCECHAR) {
-                AddCodeLine ("tax");
-                break;
-            }
-            /* FALLTHROUGH */
-
-        case CF_INT:
-            AddCodeLine ("stx tmp1");
-            AddCodeLine ("ora tmp1");
-            break;
-
-        case CF_LONG:
-            if (flags & CF_UNSIGNED) {
-                AddCodeLine ("jsr utsteax");
-            } else {
-                AddCodeLine ("jsr tsteax");
-            }
-            break;
-
-        default:
-            typeerror (flags);
-
-    }
-}
-
-
-
-void g_push (unsigned flags, unsigned long val)
-/* Push the primary register or a constant value onto the stack */
-{
-    if (flags & CF_CONST && (flags & CF_TYPEMASK) != CF_LONG) {
-
-        /* We have a constant 8 or 16 bit value */
-        if ((flags & CF_TYPEMASK) == CF_CHAR && (flags & CF_FORCECHAR)) {
-
-            /* Handle as 8 bit value */
-            AddCodeLine ("lda #$%02X", (unsigned char) val);
-            AddCodeLine ("jsr pusha");
-
-        } else {
-
-            /* Handle as 16 bit value */
-            g_getimmed (flags, val, 0);
-            AddCodeLine ("jsr pushax");
-        }
-
-    } else {
-
-        /* Value is not 16 bit or not constant */
-        if (flags & CF_CONST) {
-            /* Constant 32 bit value, load into eax */
-            g_getimmed (flags, val, 0);
-        }
-
-        /* Push the primary register */
-        switch (flags & CF_TYPEMASK) {
-
-            case CF_CHAR:
-                if (flags & CF_FORCECHAR) {
-                    /* Handle as char */
-                    AddCodeLine ("jsr pusha");
-                    break;
-                }
-                /* FALL THROUGH */
-            case CF_INT:
-                AddCodeLine ("jsr pushax");
-                break;
-
-            case CF_LONG:
-                AddCodeLine ("jsr pusheax");
-                break;
-
-            default:
-                typeerror (flags);
-
-        }
-
-    }
-
-    /* Adjust the stack offset */
-    push (flags);
-}
-
-
-
-void g_swap (unsigned flags)
-/* Swap the primary register and the top of the stack. flags give the type
-** of *both* values (must have same size).
-*/
-{
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-        case CF_INT:
-            AddCodeLine ("jsr swapstk");
-            break;
-
-        case CF_LONG:
-            AddCodeLine ("jsr swapestk");
-            break;
-
-        default:
-            typeerror (flags);
-
-    }
-}
-
-
-
-void g_call (unsigned Flags, const char* Label, unsigned ArgSize)
-/* Call the specified subroutine name */
-{
-    if ((Flags & CF_FIXARGC) == 0) {
-        /* Pass the argument count */
-        AddCodeLine ("ldy #$%02X", ArgSize);
-    }
-    AddCodeLine ("jsr _%s", Label);
-    StackPtr += ArgSize;                /* callee pops args */
-}
-
-
-
-void g_callind (unsigned Flags, unsigned ArgSize, int Offs)
-/* Call subroutine indirect */
-{
-    if ((Flags & CF_LOCAL) == 0) {
-        /* Address is in a/x */
-        if ((Flags & CF_FIXARGC) == 0) {
-            /* Pass arg count */
-            AddCodeLine ("ldy #$%02X", ArgSize);
-        }
-        AddCodeLine ("jsr callax");
-    } else {
-        /* The address is on stack, offset is on Val */
-        Offs -= StackPtr;
-        CheckLocalOffs (Offs);
-        AddCodeLine ("pha");
-        AddCodeLine ("ldy #$%02X", Offs);
-        AddCodeLine ("lda (sp),y");
-        AddCodeLine ("sta jmpvec+1");
-        AddCodeLine ("iny");
-        AddCodeLine ("lda (sp),y");
-        AddCodeLine ("sta jmpvec+2");
-        AddCodeLine ("pla");
-        AddCodeLine ("jsr jmpvec");
-    }
-
-    /* Callee pops args */
-    StackPtr += ArgSize;
-}
-
-
-
-void g_jump (unsigned Label)
-/* Jump to specified internal label number */
-{
-    AddCodeLine ("jmp %s", LocalLabelName (Label));
-}
-
-
-
-void g_truejump (unsigned flags attribute ((unused)), unsigned label)
-/* Jump to label if zero flag clear */
-{
-    AddCodeLine ("jne %s", LocalLabelName (label));
-}
-
-
-
-void g_falsejump (unsigned flags attribute ((unused)), unsigned label)
-/* Jump to label if zero flag set */
-{
-    AddCodeLine ("jeq %s", LocalLabelName (label));
-}
-
-
-
-void g_drop (unsigned Space)
-/* Drop space allocated on the stack */
-{
-    if (Space > 255) {
-        /* Inline the code since calling addysp repeatedly is quite some
-        ** overhead.
-        */
-        AddCodeLine ("pha");
-        AddCodeLine ("lda #$%02X", (unsigned char) Space);
-        AddCodeLine ("clc");
-        AddCodeLine ("adc sp");
-        AddCodeLine ("sta sp");
-        AddCodeLine ("lda #$%02X", (unsigned char) (Space >> 8));
-        AddCodeLine ("adc sp+1");
-        AddCodeLine ("sta sp+1");
-        AddCodeLine ("pla");
-    } else if (Space > 8) {
-        AddCodeLine ("ldy #$%02X", Space);
-        AddCodeLine ("jsr addysp");
-    } else if (Space != 0) {
-        AddCodeLine ("jsr incsp%u", Space);
-    }
-}
-
-
-
-void g_space (int Space)
-/* Create or drop space on the stack */
-{
-    if (Space < 0) {
-        /* This is actually a drop operation */
-        g_drop (-Space);
-    } else if (Space > 255) {
-        /* Inline the code since calling subysp repeatedly is quite some
-        ** overhead.
-        */
-        AddCodeLine ("pha");
-        AddCodeLine ("lda sp");
-        AddCodeLine ("sec");
-        AddCodeLine ("sbc #$%02X", (unsigned char) Space);
-        AddCodeLine ("sta sp");
-        AddCodeLine ("lda sp+1");
-        AddCodeLine ("sbc #$%02X", (unsigned char) (Space >> 8));
-        AddCodeLine ("sta sp+1");
-        AddCodeLine ("pla");
-    } else if (Space > 8) {
-        AddCodeLine ("ldy #$%02X", Space);
-        AddCodeLine ("jsr subysp");
-    } else if (Space != 0) {
-        AddCodeLine ("jsr decsp%u", Space);
-    }
-}
-
-
-
-void g_cstackcheck (void)
-/* Check for a C stack overflow */
-{
-    AddCodeLine ("jsr cstkchk");
-}
-
-
-
-void g_stackcheck (void)
-/* Check for a stack overflow */
-{
-    AddCodeLine ("jsr stkchk");
-}
-
-
-
-void g_add (unsigned flags, unsigned long val)
-/* Primary = TOS + Primary */
-{
-    static const char* ops[12] = {
-        "tosaddax", "tosaddax", "tosaddeax", "tosaddeax"
-    };
-
-    if (flags & CF_CONST) {
-        flags &= ~CF_FORCECHAR; /* Handle chars as ints */
-        g_push (flags & ~CF_CONST, 0);
-    }
-    oper (flags, val, ops);
-}
-
-
-
-void g_sub (unsigned flags, unsigned long val)
-/* Primary = TOS - Primary */
-{
-    static const char* ops[12] = {
-        "tossubax", "tossubax", "tossubeax", "tossubeax",
-    };
-
-    if (flags & CF_CONST) {
-        flags &= ~CF_FORCECHAR; /* Handle chars as ints */
-        g_push (flags & ~CF_CONST, 0);
-    }
-    oper (flags, val, ops);
-}
-
-
-
-void g_rsub (unsigned flags, unsigned long val)
-/* Primary = Primary - TOS */
-{
-    static const char* ops[12] = {
-        "tosrsubax", "tosrsubax", "tosrsubeax", "tosrsubeax",
-    };
-    oper (flags, val, ops);
-}
-
-
-
-void g_mul (unsigned flags, unsigned long val)
-/* Primary = TOS * Primary */
-{
-    static const char* ops[12] = {
-        "tosmulax", "tosumulax", "tosmuleax", "tosumuleax",
-    };
-
-    int p2;
-
-    /* Do strength reduction if the value is constant and a power of two */
-    if (flags & CF_CONST && (p2 = PowerOf2 (val)) >= 0) {
-        /* Generate a shift instead */
-        g_asl (flags, p2);
-        return;
-    }
-
-    /* If the right hand side is const, the lhs is not on stack but still
-    ** in the primary register.
-    */
-    if (flags & CF_CONST) {
-
-        switch (flags & CF_TYPEMASK) {
-
-            case CF_CHAR:
-                if (flags & CF_FORCECHAR) {
-                    /* Handle some special cases */
-                    switch (val) {
-
-                        case 3:
-                            AddCodeLine ("sta tmp1");
-                            AddCodeLine ("asl a");
-                            AddCodeLine ("clc");
-                            AddCodeLine ("adc tmp1");
-                            return;
-
-                        case 5:
-                            AddCodeLine ("sta tmp1");
-                            AddCodeLine ("asl a");
-                            AddCodeLine ("asl a");
-                            AddCodeLine ("clc");
-                            AddCodeLine ("adc tmp1");
-                            return;
-
-                        case 6:
-                            AddCodeLine ("sta tmp1");
-                            AddCodeLine ("asl a");
-                            AddCodeLine ("clc");
-                            AddCodeLine ("adc tmp1");
-                            AddCodeLine ("asl a");
-                            return;
-
-                        case 10:
-                            AddCodeLine ("sta tmp1");
-                            AddCodeLine ("asl a");
-                            AddCodeLine ("asl a");
-                            AddCodeLine ("clc");
-                            AddCodeLine ("adc tmp1");
-                            AddCodeLine ("asl a");
-                            return;
-                    }
-                }
-                /* FALLTHROUGH */
-
-            case CF_INT:
-                switch (val) {
-                    case 3:
-                        AddCodeLine ("jsr mulax3");
-                        return;
-                    case 5:
-                        AddCodeLine ("jsr mulax5");
-                        return;
-                    case 6:
-                        AddCodeLine ("jsr mulax6");
-                        return;
-                    case 7:
-                        AddCodeLine ("jsr mulax7");
-                        return;
-                    case 9:
-                        AddCodeLine ("jsr mulax9");
-                        return;
-                    case 10:
-                        AddCodeLine ("jsr mulax10");
-                        return;
-                }
-                break;
-
-            case CF_LONG:
-                break;
-
-            default:
-                typeerror (flags);
-        }
-
-        /* If we go here, we didn't emit code. Push the lhs on stack and fall
-        ** into the normal, non-optimized stuff.
-        */
-        flags &= ~CF_FORCECHAR; /* Handle chars as ints */
-        g_push (flags & ~CF_CONST, 0);
-
-    }
-
-    /* Use long way over the stack */
-    oper (flags, val, ops);
-}
-
-
-
-void g_div (unsigned flags, unsigned long val)
-/* Primary = TOS / Primary */
-{
-    static const char* ops[12] = {
-        "tosdivax", "tosudivax", "tosdiveax", "tosudiveax",
-    };
-
-    /* Do strength reduction if the value is constant and a power of two */
-    int p2;
-    if ((flags & CF_CONST) && (p2 = PowerOf2 (val)) >= 0) {
-        /* Generate a shift instead */
-        g_asr (flags, p2);
-    } else {
-        /* Generate a division */
-        if (flags & CF_CONST) {
-            /* lhs is not on stack */
-            flags &= ~CF_FORCECHAR;     /* Handle chars as ints */
-            g_push (flags & ~CF_CONST, 0);
-        }
-        oper (flags, val, ops);
-    }
-}
-
-
-
-void g_mod (unsigned flags, unsigned long val)
-/* Primary = TOS % Primary */
-{
-    static const char* ops[12] = {
-        "tosmodax", "tosumodax", "tosmodeax", "tosumodeax",
-    };
-    int p2;
-
-    /* Check if we can do some cost reduction */
-    if ((flags & CF_CONST) && (flags & CF_UNSIGNED) && val != 0xFFFFFFFF && (p2 = PowerOf2 (val)) >= 0) {
-        /* We can do that with an AND operation */
-        g_and (flags, val - 1);
-    } else {
-        /* Do it the hard way... */
-        if (flags & CF_CONST) {
-            /* lhs is not on stack */
-            flags &= ~CF_FORCECHAR;     /* Handle chars as ints */
-            g_push (flags & ~CF_CONST, 0);
-        }
-        oper (flags, val, ops);
-    }
-}
-
-
-
-void g_or (unsigned flags, unsigned long val)
-/* Primary = TOS | Primary */
-{
-    static const char* ops[12] = {
-        "tosorax", "tosorax", "tosoreax", "tosoreax",
-    };
-
-    /* If the right hand side is const, the lhs is not on stack but still
-    ** in the primary register.
-    */
-    if (flags & CF_CONST) {
-
-        switch (flags & CF_TYPEMASK) {
-
-            case CF_CHAR:
-                if (flags & CF_FORCECHAR) {
-                    if ((val & 0xFF) != 0) {
-                        AddCodeLine ("ora #$%02X", (unsigned char)val);
-                    }
-                    return;
-                }
-                /* FALLTHROUGH */
-
-            case CF_INT:
-                if (val <= 0xFF) {
-                    if ((val & 0xFF) != 0) {
-                        AddCodeLine ("ora #$%02X", (unsigned char)val);
-                    }
-                } else if ((val & 0xFF00) == 0xFF00) {
-                    if ((val & 0xFF) != 0) {
-                        AddCodeLine ("ora #$%02X", (unsigned char)val);
-                    }
-                    AddCodeLine ("ldx #$FF");
-                } else if (val != 0) {
-                    AddCodeLine ("ora #$%02X", (unsigned char)val);
-                    AddCodeLine ("pha");
-                    AddCodeLine ("txa");
-                    AddCodeLine ("ora #$%02X", (unsigned char)(val >> 8));
-                    AddCodeLine ("tax");
-                    AddCodeLine ("pla");
-                }
-                return;
-
-            case CF_LONG:
-                if (val <= 0xFF) {
-                    if ((val & 0xFF) != 0) {
-                        AddCodeLine ("ora #$%02X", (unsigned char)val);
-                    }
-                    return;
-                }
-                break;
-
-            default:
-                typeerror (flags);
-        }
-
-        /* If we go here, we didn't emit code. Push the lhs on stack and fall
-        ** into the normal, non-optimized stuff. Note: The standard stuff will
-        ** always work with ints.
-        */
-        flags &= ~CF_FORCECHAR;
-        g_push (flags & ~CF_CONST, 0);
-    }
-
-    /* Use long way over the stack */
-    oper (flags, val, ops);
-}
-
-
-
-void g_xor (unsigned flags, unsigned long val)
-/* Primary = TOS ^ Primary */
-{
-    static const char* ops[12] = {
-        "tosxorax", "tosxorax", "tosxoreax", "tosxoreax",
-    };
-
-
-    /* If the right hand side is const, the lhs is not on stack but still
-    ** in the primary register.
-    */
-    if (flags & CF_CONST) {
-
-        switch (flags & CF_TYPEMASK) {
-
-            case CF_CHAR:
-                if (flags & CF_FORCECHAR) {
-                    if ((val & 0xFF) != 0) {
-                        AddCodeLine ("eor #$%02X", (unsigned char)val);
-                    }
-                    return;
-                }
-                /* FALLTHROUGH */
-
-            case CF_INT:
-                if (val <= 0xFF) {
-                    if (val != 0) {
-                        AddCodeLine ("eor #$%02X", (unsigned char)val);
-                    }
-                } else if (val != 0) {
-                    if ((val & 0xFF) != 0) {
-                        AddCodeLine ("eor #$%02X", (unsigned char)val);
-                    }
-                    AddCodeLine ("pha");
-                    AddCodeLine ("txa");
-                    AddCodeLine ("eor #$%02X", (unsigned char)(val >> 8));
-                    AddCodeLine ("tax");
-                    AddCodeLine ("pla");
-                }
-                return;
-
-            case CF_LONG:
-                if (val <= 0xFF) {
-                    if (val != 0) {
-                        AddCodeLine ("eor #$%02X", (unsigned char)val);
-                    }
-                    return;
-                }
-                break;
-
-            default:
-                typeerror (flags);
-        }
-
-        /* If we go here, we didn't emit code. Push the lhs on stack and fall
-        ** into the normal, non-optimized stuff. Note: The standard stuff will
-        ** always work with ints.
-        */
-        flags &= ~CF_FORCECHAR;
-        g_push (flags & ~CF_CONST, 0);
-    }
-
-    /* Use long way over the stack */
-    oper (flags, val, ops);
-}
-
-
-
-void g_and (unsigned Flags, unsigned long Val)
-/* Primary = TOS & Primary */
-{
-    static const char* ops[12] = {
-        "tosandax", "tosandax", "tosandeax", "tosandeax",
-    };
-
-    /* If the right hand side is const, the lhs is not on stack but still
-    ** in the primary register.
-    */
-    if (Flags & CF_CONST) {
-
-        switch (Flags & CF_TYPEMASK) {
-
-            case CF_CHAR:
-                if (Flags & CF_FORCECHAR) {
-                    if ((Val & 0xFF) == 0x00) {
-                        AddCodeLine ("lda #$00");
-                    } else if ((Val & 0xFF) != 0xFF) {
-                        AddCodeLine ("and #$%02X", (unsigned char)Val);
-                    }
-                    return;
-                }
-                /* FALLTHROUGH */
-            case CF_INT:
-                if ((Val & 0xFFFF) != 0xFFFF) {
-                    if (Val <= 0xFF) {
-                        AddCodeLine ("ldx #$00");
-                        if (Val == 0) {
-                            AddCodeLine ("lda #$00");
-                        } else if (Val != 0xFF) {
-                            AddCodeLine ("and #$%02X", (unsigned char)Val);
-                        }
-                    } else if ((Val & 0xFFFF) == 0xFF00) {
-                        AddCodeLine ("lda #$00");
-                    } else if ((Val & 0xFF00) == 0xFF00) {
-                        AddCodeLine ("and #$%02X", (unsigned char)Val);
-                    } else if ((Val & 0x00FF) == 0x0000) {
-                        AddCodeLine ("txa");
-                        AddCodeLine ("and #$%02X", (unsigned char)(Val >> 8));
-                        AddCodeLine ("tax");
-                        AddCodeLine ("lda #$00");
-                    } else {
-                        AddCodeLine ("tay");
-                        AddCodeLine ("txa");
-                        AddCodeLine ("and #$%02X", (unsigned char)(Val >> 8));
-                        AddCodeLine ("tax");
-                        AddCodeLine ("tya");
-                        if ((Val & 0x00FF) == 0x0000) {
-                            AddCodeLine ("lda #$00");
-                        } else if ((Val & 0x00FF) != 0x00FF) {
-                            AddCodeLine ("and #$%02X", (unsigned char)Val);
-                        }
-                    }
-                }
-                return;
-
-            case CF_LONG:
-                if (Val <= 0xFF) {
-                    AddCodeLine ("ldx #$00");
-                    AddCodeLine ("stx sreg+1");
-                    AddCodeLine ("stx sreg");
-                    if ((Val & 0xFF) != 0xFF) {
-                         AddCodeLine ("and #$%02X", (unsigned char)Val);
-                    }
-                    return;
-                } else if (Val == 0xFF00) {
-                    AddCodeLine ("lda #$00");
-                    AddCodeLine ("sta sreg+1");
-                    AddCodeLine ("sta sreg");
-                    return;
-                }
-                break;
-
-            default:
-                typeerror (Flags);
-        }
-
-        /* If we go here, we didn't emit code. Push the lhs on stack and fall
-        ** into the normal, non-optimized stuff. Note: The standard stuff will
-        ** always work with ints.
-        */
-        Flags &= ~CF_FORCECHAR;
-        g_push (Flags & ~CF_CONST, 0);
-    }
-
-    /* Use long way over the stack */
-    oper (Flags, Val, ops);
-}
-
-
-
-void g_asr (unsigned flags, unsigned long val)
-/* Primary = TOS >> Primary */
-{
-    static const char* ops[12] = {
-        "tosasrax", "tosshrax", "tosasreax", "tosshreax",
-    };
-
-    /* If the right hand side is const, the lhs is not on stack but still
-    ** in the primary register.
-    */
-    if (flags & CF_CONST) {
-
-        switch (flags & CF_TYPEMASK) {
-
-            case CF_CHAR:
-            case CF_INT:
-                val &= 0x0F;
-                if (val >= 8) {
-                    if (flags & CF_UNSIGNED) {
-                        AddCodeLine ("txa");
-                        AddCodeLine ("ldx #$00");
-                    } else {
-                        unsigned L = GetLocalLabel();
-                        AddCodeLine ("cpx #$80");   /* Sign bit into carry */
-                        AddCodeLine ("txa");
-                        AddCodeLine ("ldx #$00");
-                        AddCodeLine ("bcc %s", LocalLabelName (L));
-                        AddCodeLine ("dex");        /* Make $FF */
-                        g_defcodelabel (L);
-                    }
-                    val -= 8;
-                }
-                if (val >= 4) {
-                    if (flags & CF_UNSIGNED) {
-                        AddCodeLine ("jsr shrax4");
-                    } else {
-                        AddCodeLine ("jsr asrax4");
-                    }
-                    val -= 4;
-                }
-                if (val > 0) {
-                    if (flags & CF_UNSIGNED) {
-                        AddCodeLine ("jsr shrax%ld", val);
-                    } else {
-                        AddCodeLine ("jsr asrax%ld", val);
-                    }
-                }
-                return;
-
-            case CF_LONG:
-                val &= 0x1F;
-                if (val >= 24) {
-                    AddCodeLine ("ldx #$00");
-                    AddCodeLine ("lda sreg+1");
-                    if ((flags & CF_UNSIGNED) == 0) {
-                        unsigned L = GetLocalLabel();
-                        AddCodeLine ("bpl %s", LocalLabelName (L));
-                        AddCodeLine ("dex");
-                        g_defcodelabel (L);
-                    }
-                    AddCodeLine ("stx sreg");
-                    AddCodeLine ("stx sreg+1");
-                    val -= 24;
-                }
-                if (val >= 16) {
-                    AddCodeLine ("ldy #$00");
-                    AddCodeLine ("ldx sreg+1");
-                    if ((flags & CF_UNSIGNED) == 0) {
-                        unsigned L = GetLocalLabel();
-                        AddCodeLine ("bpl %s", LocalLabelName (L));
-                        AddCodeLine ("dey");
-                        g_defcodelabel (L);
-                    }
-                    AddCodeLine ("lda sreg");
-                    AddCodeLine ("sty sreg+1");
-                    AddCodeLine ("sty sreg");
-                    val -= 16;
-                }
-                if (val >= 8) {
-                    AddCodeLine ("txa");
-                    AddCodeLine ("ldx sreg");
-                    AddCodeLine ("ldy sreg+1");
-                    AddCodeLine ("sty sreg");
-                    if ((flags & CF_UNSIGNED) == 0) {
-                        unsigned L = GetLocalLabel();
-                        AddCodeLine ("cpy #$80");
-                        AddCodeLine ("ldy #$00");
-                        AddCodeLine ("bcc %s", LocalLabelName (L));
-                        AddCodeLine ("dey");
-                        g_defcodelabel (L);
-                    } else {
-                        AddCodeLine ("ldy #$00");
-                    }
-                    AddCodeLine ("sty sreg+1");
-                    val -= 8;
-                }
-                if (val >= 4) {
-                    if (flags & CF_UNSIGNED) {
-                        AddCodeLine ("jsr shreax4");
-                    } else {
-                        AddCodeLine ("jsr asreax4");
-                    }
-                    val -= 4;
-                }
-                if (val > 0) {
-                    if (flags & CF_UNSIGNED) {
-                        AddCodeLine ("jsr shreax%ld", val);
-                    } else {
-                        AddCodeLine ("jsr asreax%ld", val);
-                    }
-                }
-                return;
-
-            default:
-                typeerror (flags);
-        }
-
-        /* If we go here, we didn't emit code. Push the lhs on stack and fall
-        ** into the normal, non-optimized stuff. Note: The standard stuff will
-        ** always work with ints.
-        */
-        flags &= ~CF_FORCECHAR;
-        g_push (flags & ~CF_CONST, 0);
-    }
-
-    /* Use long way over the stack */
-    oper (flags, val, ops);
-}
-
-
-
-void g_asl (unsigned flags, unsigned long val)
-/* Primary = TOS << Primary */
-{
-    static const char* ops[12] = {
-        "tosaslax", "tosshlax", "tosasleax", "tosshleax",
-    };
-
-
-    /* If the right hand side is const, the lhs is not on stack but still
-    ** in the primary register.
-    */
-    if (flags & CF_CONST) {
-
-        switch (flags & CF_TYPEMASK) {
-
-            case CF_CHAR:
-            case CF_INT:
-                val &= 0x0F;
-                if (val >= 8) {
-                    AddCodeLine ("tax");
-                    AddCodeLine ("lda #$00");
-                    val -= 8;
-                }
-                if (val >= 4) {
-                    if (flags & CF_UNSIGNED) {
-                        AddCodeLine ("jsr shlax4");
-                    } else {
-                        AddCodeLine ("jsr aslax4");
-                    }
-                    val -= 4;
-                }
-                if (val > 0) {
-                    if (flags & CF_UNSIGNED) {
-                        AddCodeLine ("jsr shlax%ld", val);
-                    } else {
-                        AddCodeLine ("jsr aslax%ld", val);
-                    }
-                }
-                return;
-
-            case CF_LONG:
-                val &= 0x1F;
-                if (val >= 24) {
-                    AddCodeLine ("sta sreg+1");
-                    AddCodeLine ("lda #$00");
-                    AddCodeLine ("tax");
-                    AddCodeLine ("sta sreg");
-                    val -= 24;
-                }
-                if (val >= 16) {
-                    AddCodeLine ("stx sreg+1");
-                    AddCodeLine ("sta sreg");
-                    AddCodeLine ("lda #$00");
-                    AddCodeLine ("tax");
-                    val -= 16;
-                }
-                if (val >= 8) {
-                    AddCodeLine ("ldy sreg");
-                    AddCodeLine ("sty sreg+1");
-                    AddCodeLine ("stx sreg");
-                    AddCodeLine ("tax");
-                    AddCodeLine ("lda #$00");
-                    val -= 8;
-                }
-                if (val > 4) {
-                    if (flags & CF_UNSIGNED) {
-                        AddCodeLine ("jsr shleax4");
-                    } else {
-                        AddCodeLine ("jsr asleax4");
-                    }
-                    val -= 4;
-                }
-                if (val > 0) {
-                    if (flags & CF_UNSIGNED) {
-                        AddCodeLine ("jsr shleax%ld", val);
-                    } else {
-                        AddCodeLine ("jsr asleax%ld", val);
-                    }
-                }
-                return;
-
-            default:
-                typeerror (flags);
-        }
-
-        /* If we go here, we didn't emit code. Push the lhs on stack and fall
-        ** into the normal, non-optimized stuff. Note: The standard stuff will
-        ** always work with ints.
-        */
-        flags &= ~CF_FORCECHAR;
-        g_push (flags & ~CF_CONST, 0);
-    }
-
-    /* Use long way over the stack */
-    oper (flags, val, ops);
-}
-
-
-
-void g_neg (unsigned Flags)
-/* Primary = -Primary */
-{
-    switch (Flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            if (Flags & CF_FORCECHAR) {
-                AddCodeLine ("eor #$FF");
-                AddCodeLine ("clc");
-                AddCodeLine ("adc #$01");
-                return;
-            }
-            /* FALLTHROUGH */
-
-        case CF_INT:
-            AddCodeLine ("jsr negax");
-            break;
-
-        case CF_LONG:
-            AddCodeLine ("jsr negeax");
-            break;
-
-        default:
-            typeerror (Flags);
-    }
-}
-
-
-
-void g_bneg (unsigned flags)
-/* Primary = !Primary */
-{
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            AddCodeLine ("jsr bnega");
-            break;
-
-        case CF_INT:
-            AddCodeLine ("jsr bnegax");
-            break;
-
-        case CF_LONG:
-            AddCodeLine ("jsr bnegeax");
-            break;
-
-        default:
-            typeerror (flags);
-    }
-}
-
-
-
-void g_com (unsigned Flags)
-/* Primary = ~Primary */
-{
-    switch (Flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            if (Flags & CF_FORCECHAR) {
-                AddCodeLine ("eor #$FF");
-                return;
-            }
-            /* FALLTHROUGH */
-
-        case CF_INT:
-            AddCodeLine ("jsr complax");
-            break;
-
-        case CF_LONG:
-            AddCodeLine ("jsr compleax");
-            break;
-
-        default:
-            typeerror (Flags);
-    }
-}
-
-
-
-void g_inc (unsigned flags, unsigned long val)
-/* Increment the primary register by a given number */
-{
-    /* Don't inc by zero */
-    if (val == 0) {
-        return;
-    }
-
-    /* Generate code for the supported types */
-    flags &= ~CF_CONST;
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            if (flags & CF_FORCECHAR) {
-                if ((CPUIsets[CPU] & CPU_ISET_65SC02) != 0 && val <= 2) {
-                    while (val--) {
-                        AddCodeLine ("ina");
-                    }
-                } else {
-                    AddCodeLine ("clc");
-                    AddCodeLine ("adc #$%02X", (unsigned char)val);
-                }
-                break;
-            }
-            /* FALLTHROUGH */
-
-        case CF_INT:
-            if ((CPUIsets[CPU] & CPU_ISET_65SC02) != 0 && val == 1) {
-                unsigned L = GetLocalLabel();
-                AddCodeLine ("ina");
-                AddCodeLine ("bne %s", LocalLabelName (L));
-                AddCodeLine ("inx");
-                g_defcodelabel (L);
-            } else if (IS_Get (&CodeSizeFactor) < 200) {
-                /* Use jsr calls */
-                if (val <= 8) {
-                    AddCodeLine ("jsr incax%lu", val);
-                } else if (val <= 255) {
-                    AddCodeLine ("ldy #$%02X", (unsigned char) val);
-                    AddCodeLine ("jsr incaxy");
-                } else {
-                    g_add (flags | CF_CONST, val);
-                }
-            } else {
-                /* Inline the code */
-                if (val <= 0x300) {
-                    if ((val & 0xFF) != 0) {
-                        unsigned L = GetLocalLabel();
-                        AddCodeLine ("clc");
-                        AddCodeLine ("adc #$%02X", (unsigned char) val);
-                        AddCodeLine ("bcc %s", LocalLabelName (L));
-                        AddCodeLine ("inx");
-                        g_defcodelabel (L);
-                    }
-                    if (val >= 0x100) {
-                        AddCodeLine ("inx");
-                    }
-                    if (val >= 0x200) {
-                        AddCodeLine ("inx");
-                    }
-                    if (val >= 0x300) {
-                        AddCodeLine ("inx");
-                    }
-                } else if ((val & 0xFF) != 0) {
-                    AddCodeLine ("clc");
-                    AddCodeLine ("adc #$%02X", (unsigned char) val);
-                    AddCodeLine ("pha");
-                    AddCodeLine ("txa");
-                    AddCodeLine ("adc #$%02X", (unsigned char) (val >> 8));
-                    AddCodeLine ("tax");
-                    AddCodeLine ("pla");
-                } else {
-                    AddCodeLine ("pha");
-                    AddCodeLine ("txa");
-                    AddCodeLine ("clc");
-                    AddCodeLine ("adc #$%02X", (unsigned char) (val >> 8));
-                    AddCodeLine ("tax");
-                    AddCodeLine ("pla");
-                }
-            }
-            break;
-
-        case CF_LONG:
-            if (val <= 255) {
-                AddCodeLine ("ldy #$%02X", (unsigned char) val);
-                AddCodeLine ("jsr inceaxy");
-            } else {
-                g_add (flags | CF_CONST, val);
-            }
-            break;
-
-        default:
-            typeerror (flags);
-
-    }
-}
-
-
-
-void g_dec (unsigned flags, unsigned long val)
-/* Decrement the primary register by a given number */
-{
-    /* Don't dec by zero */
-    if (val == 0) {
-        return;
-    }
-
-    /* Generate code for the supported types */
-    flags &= ~CF_CONST;
-    switch (flags & CF_TYPEMASK) {
-
-        case CF_CHAR:
-            if (flags & CF_FORCECHAR) {
-                if ((CPUIsets[CPU] & CPU_ISET_65SC02) != 0 && val <= 2) {
-                    while (val--) {
-                        AddCodeLine ("dea");
-                    }
-                } else {
-                    AddCodeLine ("sec");
-                    AddCodeLine ("sbc #$%02X", (unsigned char)val);
-                }
-                break;
-            }
-            /* FALLTHROUGH */
-
-        case CF_INT:
-            if (IS_Get (&CodeSizeFactor) < 200) {
-                /* Use subroutines */
-                if (val <= 8) {
-                    AddCodeLine ("jsr decax%d", (int) val);
-                } else if (val <= 255) {
-                    AddCodeLine ("ldy #$%02X", (unsigned char) val);
-                    AddCodeLine ("jsr decaxy");
-                } else {
-                    g_sub (flags | CF_CONST, val);
-                }
-            } else {
-                /* Inline the code */
-                if (val < 0x300) {
-                    if ((val & 0xFF) != 0) {
-                        unsigned L = GetLocalLabel();
-                        AddCodeLine ("sec");
-                        AddCodeLine ("sbc #$%02X", (unsigned char) val);
-                        AddCodeLine ("bcs %s", LocalLabelName (L));
-                        AddCodeLine ("dex");
-                        g_defcodelabel (L);
-                    }
-                    if (val >= 0x100) {
-                        AddCodeLine ("dex");
-                    }
-                    if (val >= 0x200) {
-                        AddCodeLine ("dex");
-                    }
-                } else {
-                    if ((val & 0xFF) != 0) {
-                        AddCodeLine ("sec");
-                        AddCodeLine ("sbc #$%02X", (unsigned char) val);
-                        AddCodeLine ("pha");
-                        AddCodeLine ("txa");
-                        AddCodeLine ("sbc #$%02X", (unsigned char) (val >> 8));
-                        AddCodeLine ("tax");
-                        AddCodeLine ("pla");
-                    } else {
-                        AddCodeLine ("pha");
-                        AddCodeLine ("txa");
-                        AddCodeLine ("sec");
-                        AddCodeLine ("sbc #$%02X", (unsigned char) (val >> 8));
-                        AddCodeLine ("tax");
-                        AddCodeLine ("pla");
-                    }
-                }
-            }
-            break;
-
-        case CF_LONG:
-            if (val <= 255) {
-                AddCodeLine ("ldy #$%02X", (unsigned char) val);
-                AddCodeLine ("jsr deceaxy");
-            } else {
-                g_sub (flags | CF_CONST, val);
-            }
-            break;
-
-        default:
-            typeerror (flags);
-
-    }
-}
-
-
-
-/*
-** Following are the conditional operators. They compare the TOS against
-** the primary and put a literal 1 in the primary if the condition is
-** true, otherwise they clear the primary register
-*/
-
-
-
-void g_eq (unsigned flags, unsigned long val)
-/* Test for equal */
-{
-    static const char* ops[12] = {
-        "toseqax", "toseqax", "toseqeax", "toseqeax",
-    };
-
-    unsigned L;
-
-    /* If the right hand side is const, the lhs is not on stack but still
-    ** in the primary register.
-    */
-    if (flags & CF_CONST) {
-
-        switch (flags & CF_TYPEMASK) {
-
-            case CF_CHAR:
-                if (flags & CF_FORCECHAR) {
-                    AddCodeLine ("cmp #$%02X", (unsigned char)val);
-                    AddCodeLine ("jsr booleq");
-                    return;
-                }
-                /* FALLTHROUGH */
-
-            case CF_INT:
-                L = GetLocalLabel();
-                AddCodeLine ("cpx #$%02X", (unsigned char)(val >> 8));
-                AddCodeLine ("bne %s", LocalLabelName (L));
-                AddCodeLine ("cmp #$%02X", (unsigned char)val);
-                g_defcodelabel (L);
-                AddCodeLine ("jsr booleq");
-                return;
-
-            case CF_LONG:
-                break;
-
-            default:
-                typeerror (flags);
-        }
-
-        /* If we go here, we didn't emit code. Push the lhs on stack and fall
-        ** into the normal, non-optimized stuff. Note: The standard stuff will
-        ** always work with ints.
-        */
-        flags &= ~CF_FORCECHAR;
-        g_push (flags & ~CF_CONST, 0);
-    }
-
-    /* Use long way over the stack */
-    oper (flags, val, ops);
-}
-
-
-
-void g_ne (unsigned flags, unsigned long val)
-/* Test for not equal */
-{
-    static const char* ops[12] = {
-        "tosneax", "tosneax", "tosneeax", "tosneeax",
-    };
-
-    unsigned L;
-
-    /* If the right hand side is const, the lhs is not on stack but still
-    ** in the primary register.
-    */
-    if (flags & CF_CONST) {
-
-        switch (flags & CF_TYPEMASK) {
-
-            case CF_CHAR:
-                if (flags & CF_FORCECHAR) {
-                    AddCodeLine ("cmp #$%02X", (unsigned char)val);
-                    AddCodeLine ("jsr boolne");
-                    return;
-                }
-                /* FALLTHROUGH */
-
-            case CF_INT:
-                L = GetLocalLabel();
-                AddCodeLine ("cpx #$%02X", (unsigned char)(val >> 8));
-                AddCodeLine ("bne %s", LocalLabelName (L));
-                AddCodeLine ("cmp #$%02X", (unsigned char)val);
-                g_defcodelabel (L);
-                AddCodeLine ("jsr boolne");
-                return;
-
-            case CF_LONG:
-                break;
-
-            default:
-                typeerror (flags);
-        }
-
-        /* If we go here, we didn't emit code. Push the lhs on stack and fall
-        ** into the normal, non-optimized stuff. Note: The standard stuff will
-        ** always work with ints.
-        */
-        flags &= ~CF_FORCECHAR;
-        g_push (flags & ~CF_CONST, 0);
-    }
-
-    /* Use long way over the stack */
-    oper (flags, val, ops);
-}
-
-
-
-void g_lt (unsigned flags, unsigned long val)
-/* Test for less than */
-{
-    static const char* ops[12] = {
-        "tosltax", "tosultax", "toslteax", "tosulteax",
-    };
-
-    unsigned Label;
-
-    /* If the right hand side is const, the lhs is not on stack but still
-    ** in the primary register.
-    */
-    if (flags & CF_CONST) {
-
-        /* Because the handling of the overflow flag is too complex for
-        ** inlining, we can handle only unsigned compares, and signed
-        ** compares against zero here.
-        */
-        if (flags & CF_UNSIGNED) {
-
-            /* Give a warning in some special cases */
-            if (val == 0) {
-                Warning ("Condition is never true");
-                AddCodeLine ("jsr return0");
-                return;
-            }
-
-            /* Look at the type */
-            switch (flags & CF_TYPEMASK) {
-
-                case CF_CHAR:
-                    if (flags & CF_FORCECHAR) {
-                        AddCodeLine ("cmp #$%02X", (unsigned char)val);
-                        AddCodeLine ("jsr boolult");
-                        return;
-                    }
-                    /* FALLTHROUGH */
-
-                case CF_INT:
-                    /* If the low byte is zero, we must only test the high byte */
-                    AddCodeLine ("cpx #$%02X", (unsigned char)(val >> 8));
-                    if ((val & 0xFF) != 0) {
-                        unsigned L = GetLocalLabel();
-                        AddCodeLine ("bne %s", LocalLabelName (L));
-                        AddCodeLine ("cmp #$%02X", (unsigned char)val);
-                        g_defcodelabel (L);
-                    }
-                    AddCodeLine ("jsr boolult");
-                    return;
-
-                case CF_LONG:
-                    /* Do a subtraction */
-                    AddCodeLine ("cmp #$%02X", (unsigned char)val);
-                    AddCodeLine ("txa");
-                    AddCodeLine ("sbc #$%02X", (unsigned char)(val >> 8));
-                    AddCodeLine ("lda sreg");
-                    AddCodeLine ("sbc #$%02X", (unsigned char)(val >> 16));
-                    AddCodeLine ("lda sreg+1");
-                    AddCodeLine ("sbc #$%02X", (unsigned char)(val >> 24));
-                    AddCodeLine ("jsr boolult");
-                    return;
-
-                default:
-                    typeerror (flags);
-            }
-
-        } else if (val == 0) {
-
-            /* A signed compare against zero must only look at the sign bit */
-            switch (flags & CF_TYPEMASK) {
-
-                case CF_CHAR:
-                    if (flags & CF_FORCECHAR) {
-                        AddCodeLine ("asl a");          /* Bit 7 -> carry */
-                        AddCodeLine ("lda #$00");
-                        AddCodeLine ("ldx #$00");
-                        AddCodeLine ("rol a");
-                        return;
-                    }
-                    /* FALLTHROUGH */
-
-                case CF_INT:
-                    /* Just check the high byte */
-                    AddCodeLine ("cpx #$80");           /* Bit 7 -> carry */
-                    AddCodeLine ("lda #$00");
-                    AddCodeLine ("ldx #$00");
-                    AddCodeLine ("rol a");
-                    return;
-
-                case CF_LONG:
-                    /* Just check the high byte */
-                    AddCodeLine ("lda sreg+1");
-                    AddCodeLine ("asl a");              /* Bit 7 -> carry */
-                    AddCodeLine ("lda #$00");
-                    AddCodeLine ("ldx #$00");
-                    AddCodeLine ("rol a");
-                    return;
-
-                default:
-                    typeerror (flags);
-            }
-
-        } else {
-
-            /* Signed compare against a constant != zero */
-            switch (flags & CF_TYPEMASK) {
-
-                case CF_CHAR:
-                    if (flags & CF_FORCECHAR) {
-                        Label = GetLocalLabel ();
-                        AddCodeLine ("sec");
-                        AddCodeLine ("sbc #$%02X", (unsigned char)val);
-                        AddCodeLine ("bvc %s", LocalLabelName (Label));
-                        AddCodeLine ("eor #$80");
-                        g_defcodelabel (Label);
-                        AddCodeLine ("asl a");          /* Bit 7 -> carry */
-                        AddCodeLine ("lda #$00");
-                        AddCodeLine ("ldx #$00");
-                        AddCodeLine ("rol a");
-                        return;
-                    }
-                    /* FALLTHROUGH */
-
-                case CF_INT:
-                    /* Do a subtraction */
-                    Label = GetLocalLabel ();
-                    AddCodeLine ("cmp #$%02X", (unsigned char)val);
-                    AddCodeLine ("txa");
-                    AddCodeLine ("sbc #$%02X", (unsigned char)(val >> 8));
-                    AddCodeLine ("bvc %s", LocalLabelName (Label));
-                    AddCodeLine ("eor #$80");
-                    g_defcodelabel (Label);
-                    AddCodeLine ("asl a");          /* Bit 7 -> carry */
-                    AddCodeLine ("lda #$00");
-                    AddCodeLine ("ldx #$00");
-                    AddCodeLine ("rol a");
-                    return;
-
-                case CF_LONG:
-                    /* This one is too costly */
-                    break;
-
-                default:
-                    typeerror (flags);
-            }
-
-        }
-
-        /* If we go here, we didn't emit code. Push the lhs on stack and fall
-        ** into the normal, non-optimized stuff. Note: The standard stuff will
-        ** always work with ints.
-        */
-        flags &= ~CF_FORCECHAR;
-        g_push (flags & ~CF_CONST, 0);
-    }
-
-    /* Use long way over the stack */
-    oper (flags, val, ops);
-}
-
-
-
-void g_le (unsigned flags, unsigned long val)
-/* Test for less than or equal to */
-{
-    static const char* ops[12] = {
-        "tosleax", "tosuleax", "tosleeax", "tosuleeax",
-    };
-
-
-    /* If the right hand side is const, the lhs is not on stack but still
-    ** in the primary register.
-    */
-    if (flags & CF_CONST) {
-
-        /* Look at the type */
-        switch (flags & CF_TYPEMASK) {
-
-            case CF_CHAR:
-                if (flags & CF_FORCECHAR) {
-                    if (flags & CF_UNSIGNED) {
-                        /* Unsigned compare */
-                        if (val < 0xFF) {
-                            /* Use < instead of <= because the former gives
-                            ** better code on the 6502 than the latter.
-                            */
-                            g_lt (flags, val+1);
-                        } else {
-                            /* Always true */
-                            Warning ("Condition is always true");
-                            AddCodeLine ("jsr return1");
-                        }
-                    } else {
-                        /* Signed compare */
-                        if ((long) val < 0x7F) {
-                            /* Use < instead of <= because the former gives
-                            ** better code on the 6502 than the latter.
-                            */
-                            g_lt (flags, val+1);
-                        } else {
-                            /* Always true */
-                            Warning ("Condition is always true");
-                            AddCodeLine ("jsr return1");
-                        }
-                    }
-                    return;
-                }
-                /* FALLTHROUGH */
-
-            case CF_INT:
-                if (flags & CF_UNSIGNED) {
-                    /* Unsigned compare */
-                    if (val < 0xFFFF) {
-                        /* Use < instead of <= because the former gives
-                        ** better code on the 6502 than the latter.
-                        */
-                        g_lt (flags, val+1);
-                    } else {
-                        /* Always true */
-                        Warning ("Condition is always true");
-                        AddCodeLine ("jsr return1");
-                    }
-                } else {
-                    /* Signed compare */
-                    if ((long) val < 0x7FFF) {
-                        g_lt (flags, val+1);
-                    } else {
-                        /* Always true */
-                        Warning ("Condition is always true");
-                        AddCodeLine ("jsr return1");
-                    }
-                }
-                return;
-
-            case CF_LONG:
-                if (flags & CF_UNSIGNED) {
-                    /* Unsigned compare */
-                    if (val < 0xFFFFFFFF) {
-                        /* Use < instead of <= because the former gives
-                        ** better code on the 6502 than the latter.
-                        */
-                        g_lt (flags, val+1);
-                    } else {
-                        /* Always true */
-                        Warning ("Condition is always true");
-                        AddCodeLine ("jsr return1");
-                    }
-                } else {
-                    /* Signed compare */
-                    if ((long) val < 0x7FFFFFFF) {
-                        g_lt (flags, val+1);
-                    } else {
-                        /* Always true */
-                        Warning ("Condition is always true");
-                        AddCodeLine ("jsr return1");
-                    }
-                }
-                return;
-
-            default:
-                typeerror (flags);
-        }
-
-        /* If we go here, we didn't emit code. Push the lhs on stack and fall
-        ** into the normal, non-optimized stuff. Note: The standard stuff will
-        ** always work with ints.
-        */
-        flags &= ~CF_FORCECHAR;
-        g_push (flags & ~CF_CONST, 0);
-    }
-
-    /* Use long way over the stack */
-    oper (flags, val, ops);
-}
-
-
-
-void g_gt (unsigned flags, unsigned long val)
-/* Test for greater than */
-{
-    static const char* ops[12] = {
-        "tosgtax", "tosugtax", "tosgteax", "tosugteax",
-    };
-
-
-    /* If the right hand side is const, the lhs is not on stack but still
-    ** in the primary register.
-    */
-    if (flags & CF_CONST) {
-
-        /* Look at the type */
-        switch (flags & CF_TYPEMASK) {
-
-            case CF_CHAR:
-                if (flags & CF_FORCECHAR) {
-                    if (flags & CF_UNSIGNED) {
-                        if (val == 0) {
-                            /* If we have a compare > 0, we will replace it by
-                            ** != 0 here, since both are identical but the
-                            ** latter is easier to optimize.
-                            */
-                            g_ne (flags, val);
-                        } else if (val < 0xFF) {
-                            /* Use >= instead of > because the former gives
-                            ** better code on the 6502 than the latter.
-                            */
-                            g_ge (flags, val+1);
-                        } else {
-                            /* Never true */
-                            Warning ("Condition is never true");
-                            AddCodeLine ("jsr return0");
-                        }
-                    } else {
-                        if ((long) val < 0x7F) {
-                            /* Use >= instead of > because the former gives
-                            ** better code on the 6502 than the latter.
-                            */
-                            g_ge (flags, val+1);
-                        } else {
-                            /* Never true */
-                            Warning ("Condition is never true");
-                            AddCodeLine ("jsr return0");
-                        }
-                    }
-                    return;
-                }
-                /* FALLTHROUGH */
-
-            case CF_INT:
-                if (flags & CF_UNSIGNED) {
-                    /* Unsigned compare */
-                    if (val == 0) {
-                        /* If we have a compare > 0, we will replace it by
-                        ** != 0 here, since both are identical but the latter
-                        ** is easier to optimize.
-                        */
-                        g_ne (flags, val);
-                    } else if (val < 0xFFFF) {
-                        /* Use >= instead of > because the former gives better
-                        ** code on the 6502 than the latter.
-                        */
-                        g_ge (flags, val+1);
-                    } else {
-                        /* Never true */
-                        Warning ("Condition is never true");
-                        AddCodeLine ("jsr return0");
-                    }
-                } else {
-                    /* Signed compare */
-                    if ((long) val < 0x7FFF) {
-                        g_ge (flags, val+1);
-                    } else {
-                        /* Never true */
-                        Warning ("Condition is never true");
-                        AddCodeLine ("jsr return0");
-                    }
-                }
-                return;
-
-            case CF_LONG:
-                if (flags & CF_UNSIGNED) {
-                    /* Unsigned compare */
-                    if (val == 0) {
-                        /* If we have a compare > 0, we will replace it by
-                        ** != 0 here, since both are identical but the latter
-                        ** is easier to optimize.
-                        */
-                        g_ne (flags, val);
-                    } else if (val < 0xFFFFFFFF) {
-                        /* Use >= instead of > because the former gives better
-                        ** code on the 6502 than the latter.
-                        */
-                        g_ge (flags, val+1);
-                    } else {
-                        /* Never true */
-                        Warning ("Condition is never true");
-                        AddCodeLine ("jsr return0");
-                    }
-                } else {
-                    /* Signed compare */
-                    if ((long) val < 0x7FFFFFFF) {
-                        g_ge (flags, val+1);
-                    } else {
-                        /* Never true */
-                        Warning ("Condition is never true");
-                        AddCodeLine ("jsr return0");
-                    }
-                }
-                return;
-
-            default:
-                typeerror (flags);
-        }
-
-        /* If we go here, we didn't emit code. Push the lhs on stack and fall
-        ** into the normal, non-optimized stuff. Note: The standard stuff will
-        ** always work with ints.
-        */
-        flags &= ~CF_FORCECHAR;
-        g_push (flags & ~CF_CONST, 0);
-    }
-
-    /* Use long way over the stack */
-    oper (flags, val, ops);
-}
-
-
-
-void g_ge (unsigned flags, unsigned long val)
-/* Test for greater than or equal to */
-{
-    static const char* ops[12] = {
-        "tosgeax", "tosugeax", "tosgeeax", "tosugeeax",
-    };
-
-    unsigned Label;
-
-
-    /* If the right hand side is const, the lhs is not on stack but still
-    ** in the primary register.
-    */
-    if (flags & CF_CONST) {
-
-        /* Because the handling of the overflow flag is too complex for
-        ** inlining, we can handle only unsigned compares, and signed
-        ** compares against zero here.
-        */
-        if (flags & CF_UNSIGNED) {
-
-            /* Give a warning in some special cases */
-            if (val == 0) {
-                Warning ("Condition is always true");
-                AddCodeLine ("jsr return1");
-                return;
-            }
-
-            /* Look at the type */
-            switch (flags & CF_TYPEMASK) {
-
-                case CF_CHAR:
-                    if (flags & CF_FORCECHAR) {
-                        /* Do a subtraction. Condition is true if carry set */
-                        AddCodeLine ("cmp #$%02X", (unsigned char)val);
-                        AddCodeLine ("lda #$00");
-                        AddCodeLine ("ldx #$00");
-                        AddCodeLine ("rol a");
-                        return;
-                    }
-                    /* FALLTHROUGH */
-
-                case CF_INT:
-                    /* Do a subtraction. Condition is true if carry set */
-                    AddCodeLine ("cmp #$%02X", (unsigned char)val);
-                    AddCodeLine ("txa");
-                    AddCodeLine ("sbc #$%02X", (unsigned char)(val >> 8));
-                    AddCodeLine ("lda #$00");
-                    AddCodeLine ("ldx #$00");
-                    AddCodeLine ("rol a");
-                    return;
-
-                case CF_LONG:
-                    /* Do a subtraction. Condition is true if carry set */
-                    AddCodeLine ("cmp #$%02X", (unsigned char)val);
-                    AddCodeLine ("txa");
-                    AddCodeLine ("sbc #$%02X", (unsigned char)(val >> 8));
-                    AddCodeLine ("lda sreg");
-                    AddCodeLine ("sbc #$%02X", (unsigned char)(val >> 16));
-                    AddCodeLine ("lda sreg+1");
-                    AddCodeLine ("sbc #$%02X", (unsigned char)(val >> 24));
-                    AddCodeLine ("lda #$00");
-                    AddCodeLine ("ldx #$00");
-                    AddCodeLine ("rol a");
-                    return;
-
-                default:
-                    typeerror (flags);
-            }
-
-        } else if (val == 0) {
-
-            /* A signed compare against zero must only look at the sign bit */
-            switch (flags & CF_TYPEMASK) {
-
-                case CF_CHAR:
-                    if (flags & CF_FORCECHAR) {
-                        AddCodeLine ("tax");
-                        AddCodeLine ("jsr boolge");
-                        return;
-                    }
-                    /* FALLTHROUGH */
-
-                case CF_INT:
-                    /* Just test the high byte */
-                    AddCodeLine ("txa");
-                    AddCodeLine ("jsr boolge");
-                    return;
-
-                case CF_LONG:
-                    /* Just test the high byte */
-                    AddCodeLine ("lda sreg+1");
-                    AddCodeLine ("jsr boolge");
-                    return;
-
-                default:
-                    typeerror (flags);
-            }
-
-        } else {
-
-            /* Signed compare against a constant != zero */
-            switch (flags & CF_TYPEMASK) {
-
-                case CF_CHAR:
-                    if (flags & CF_FORCECHAR) {
-                        Label = GetLocalLabel ();
-                        AddCodeLine ("sec");
-                        AddCodeLine ("sbc #$%02X", (unsigned char)val);
-                        AddCodeLine ("bvs %s", LocalLabelName (Label));
-                        AddCodeLine ("eor #$80");
-                        g_defcodelabel (Label);
-                        AddCodeLine ("asl a");          /* Bit 7 -> carry */
-                        AddCodeLine ("lda #$00");
-                        AddCodeLine ("ldx #$00");
-                        AddCodeLine ("rol a");
-                        return;
-                    }
-                    /* FALLTHROUGH */
-
-                case CF_INT:
-                    /* Do a subtraction */
-                    Label = GetLocalLabel ();
-                    AddCodeLine ("cmp #$%02X", (unsigned char)val);
-                    AddCodeLine ("txa");
-                    AddCodeLine ("sbc #$%02X", (unsigned char)(val >> 8));
-                    AddCodeLine ("bvs %s", LocalLabelName (Label));
-                    AddCodeLine ("eor #$80");
-                    g_defcodelabel (Label);
-                    AddCodeLine ("asl a");          /* Bit 7 -> carry */
-                    AddCodeLine ("lda #$00");
-                    AddCodeLine ("ldx #$00");
-                    AddCodeLine ("rol a");
-                    return;
-
-                case CF_LONG:
-                    /* This one is too costly */
-                    break;
-
-                default:
-                    typeerror (flags);
-            }
-        }
-
-        /* If we go here, we didn't emit code. Push the lhs on stack and fall
-        ** into the normal, non-optimized stuff. Note: The standard stuff will
-        ** always work with ints.
-        */
-        flags &= ~CF_FORCECHAR;
-        g_push (flags & ~CF_CONST, 0);
-    }
-
-    /* Use long way over the stack */
-    oper (flags, val, ops);
-}
-
-
-
-/*****************************************************************************/
-/*                         Allocating static storage                         */
-/*****************************************************************************/
-
-
-
-void g_res (unsigned n)
-/* Reserve static storage, n bytes */
-{
-    AddDataLine ("\t.res\t%u,$00", n);
-}
-
-
-
-void g_defdata (unsigned flags, unsigned long val, long offs)
-/* Define data with the size given in flags */
-{
-    if (flags & CF_CONST) {
-
-        /* Numeric constant */
-        switch (flags & CF_TYPEMASK) {
-
-            case CF_CHAR:
-                AddDataLine ("\t.byte\t$%02lX", val & 0xFF);
-                break;
-
-            case CF_INT:
-                AddDataLine ("\t.word\t$%04lX", val & 0xFFFF);
-                break;
-
-            case CF_LONG:
-                AddDataLine ("\t.dword\t$%08lX", val & 0xFFFFFFFF);
-                break;
-
-            default:
-                typeerror (flags);
-                break;
-
-        }
-
-    } else {
-
-        /* Create the correct label name */
-        const char* Label = GetLabelName (flags, val, offs);
-
-        /* Labels are always 16 bit */
-        AddDataLine ("\t.addr\t%s", Label);
-
-    }
-}
-
-
-
-void g_defbytes (const void* Bytes, unsigned Count)
-/* Output a row of bytes as a constant */
-{
-    unsigned Chunk;
-    char Buf [128];
-    char* B;
-
-    /* Cast the buffer pointer */
-    const unsigned char* Data = (const unsigned char*) Bytes;
-
-    /* Output the stuff */
-    while (Count) {
-
-        /* How many go into this line? */
-        if ((Chunk = Count) > 16) {
-            Chunk = 16;
-        }
-        Count -= Chunk;
-
-        /* Output one line */
-        strcpy (Buf, "\t.byte\t");
-        B = Buf + 7;
-        do {
-            B += sprintf (B, "$%02X", *Data++);
-            if (--Chunk) {
-                *B++ = ',';
-            }
-        } while (Chunk);
-
-        /* Output the line */
-        AddDataLine ("%s", Buf);
-    }
-}
-
-
-
-void g_zerobytes (unsigned Count)
-/* Output Count bytes of data initialized with zero */
-{
-    if (Count > 0) {
-        AddDataLine ("\t.res\t%u,$00", Count);
-    }
-}
-
-
-
-void g_initregister (unsigned Label, unsigned Reg, unsigned Size)
-/* Initialize a register variable from static initialization data */
-{
-    /* Register variables do always have less than 128 bytes */
-    unsigned CodeLabel = GetLocalLabel ();
-    AddCodeLine ("ldx #$%02X", (unsigned char) (Size - 1));
-    g_defcodelabel (CodeLabel);
-    AddCodeLine ("lda %s,x", GetLabelName (CF_STATIC, Label, 0));
-    AddCodeLine ("sta %s,x", GetLabelName (CF_REGVAR, Reg, 0));
-    AddCodeLine ("dex");
-    AddCodeLine ("bpl %s", LocalLabelName (CodeLabel));
-}
-
-
-
-void g_initauto (unsigned Label, unsigned Size)
-/* Initialize a local variable at stack offset zero from static data */
-{
-    unsigned CodeLabel = GetLocalLabel ();
-
-    CheckLocalOffs (Size);
-    if (Size <= 128) {
-        AddCodeLine ("ldy #$%02X", Size-1);
-        g_defcodelabel (CodeLabel);
-        AddCodeLine ("lda %s,y", GetLabelName (CF_STATIC, Label, 0));
-        AddCodeLine ("sta (sp),y");
-        AddCodeLine ("dey");
-        AddCodeLine ("bpl %s", LocalLabelName (CodeLabel));
-    } else if (Size <= 256) {
-        AddCodeLine ("ldy #$00");
-        g_defcodelabel (CodeLabel);
-        AddCodeLine ("lda %s,y", GetLabelName (CF_STATIC, Label, 0));
-        AddCodeLine ("sta (sp),y");
-        AddCodeLine ("iny");
-        AddCodeLine ("cpy #$%02X", (unsigned char) Size);
-        AddCodeLine ("bne %s", LocalLabelName (CodeLabel));
-    }
-}
-
-
-
-void g_initstatic (unsigned InitLabel, unsigned VarLabel, unsigned Size)
-/* Initialize a static local variable from static initialization data */
-{
-    if (Size <= 128) {
-        unsigned CodeLabel = GetLocalLabel ();
-        AddCodeLine ("ldy #$%02X", Size-1);
-        g_defcodelabel (CodeLabel);
-        AddCodeLine ("lda %s,y", GetLabelName (CF_STATIC, InitLabel, 0));
-        AddCodeLine ("sta %s,y", GetLabelName (CF_STATIC, VarLabel, 0));
-        AddCodeLine ("dey");
-        AddCodeLine ("bpl %s", LocalLabelName (CodeLabel));
-    } else if (Size <= 256) {
-        unsigned CodeLabel = GetLocalLabel ();
-        AddCodeLine ("ldy #$00");
-        g_defcodelabel (CodeLabel);
-        AddCodeLine ("lda %s,y", GetLabelName (CF_STATIC, InitLabel, 0));
-        AddCodeLine ("sta %s,y", GetLabelName (CF_STATIC, VarLabel, 0));
-        AddCodeLine ("iny");
-        AddCodeLine ("cpy #$%02X", (unsigned char) Size);
-        AddCodeLine ("bne %s", LocalLabelName (CodeLabel));
-    } else {
-        /* Use the easy way here: memcpy */
-        g_getimmed (CF_STATIC, VarLabel, 0);
-        AddCodeLine ("jsr pushax");
-        g_getimmed (CF_STATIC, InitLabel, 0);
-        AddCodeLine ("jsr pushax");
-        g_getimmed (CF_INT | CF_UNSIGNED | CF_CONST, Size, 0);
-        AddCodeLine ("jsr %s", GetLabelName (CF_EXTERNAL, (unsigned long) "memcpy", 0));
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                             Switch statement                              */
-/*****************************************************************************/
-
-
-
-void g_switch (Collection* Nodes, unsigned DefaultLabel, unsigned Depth)
-/* Generate code for a switch statement */
-{
-    unsigned NextLabel = 0;
-    unsigned I;
-
-    /* Setup registers and determine which compare insn to use */
-    const char* Compare;
-    switch (Depth) {
-        case 1:
-            Compare = "cmp #$%02X";
-            break;
-        case 2:
-            Compare = "cpx #$%02X";
-            break;
-        case 3:
-            AddCodeLine ("ldy sreg");
-            Compare = "cpy #$%02X";
-            break;
-        case 4:
-            AddCodeLine ("ldy sreg+1");
-            Compare = "cpy #$%02X";
-            break;
-        default:
-            Internal ("Invalid depth in g_switch: %u", Depth);
-    }
-
-    /* Walk over all nodes */
-    for (I = 0; I < CollCount (Nodes); ++I) {
-
-        /* Get the next case node */
-        CaseNode* N = CollAtUnchecked (Nodes, I);
-
-        /* If we have a next label, define it */
-        if (NextLabel) {
-            g_defcodelabel (NextLabel);
-            NextLabel = 0;
-        }
-
-        /* Do the compare */
-        AddCodeLine (Compare, CN_GetValue (N));
-
-        /* If this is the last level, jump directly to the case code if found */
-        if (Depth == 1) {
-
-            /* Branch if equal */
-            g_falsejump (0, CN_GetLabel (N));
-
-        } else {
-
-            /* Determine the next label */
-            if (I == CollCount (Nodes) - 1) {
-                /* Last node means not found */
-                g_truejump (0, DefaultLabel);
-            } else {
-                /* Jump to the next check */
-                NextLabel = GetLocalLabel ();
-                g_truejump (0, NextLabel);
-            }
-
-            /* Check the next level */
-            g_switch (N->Nodes, DefaultLabel, Depth-1);
-
-        }
-    }
-
-    /* If we go here, we haven't found the label */
-    g_jump (DefaultLabel);
-}
-
-
-
-/*****************************************************************************/
-/*                       User supplied assembler code                        */
-/*****************************************************************************/
-
-
-
-void g_asmcode (struct StrBuf* B)
-/* Output one line of assembler code. */
-{
-    AddCodeLine ("%.*s", (int) SB_GetLen (B), SB_GetConstBuf (B));
-}
diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h
deleted file mode 100644 (file)
index 4ad3756..0000000
+++ /dev/null
@@ -1,490 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 codegen.h                                 */
-/*                                                                           */
-/*                            6502 code generator                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef CODEGEN_H
-#define CODEGEN_H
-
-
-
-/* common */
-#include "coll.h"
-
-/* cc65 */
-#include "segments.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Code generator flags.
-** Note: The type flags are designed so that a smaller type may override a
-** larger one by or'ing it into the existing one.
-** Note^2: The actual type including the sign flag is in the lower bits, so
-** we can mask the information and use them as a table index.
-*/
-#define CF_NONE         0x0000  /* No special flags */
-
-/* Values for the actual type */
-#define CF_CHAR         0x0003  /* Operation on characters */
-#define CF_INT          0x0001  /* Operation on ints */
-#define CF_PTR          CF_INT  /* Alias for readability */
-#define CF_LONG         0x0000  /* Operation on longs */
-#define CF_FLOAT        0x0004  /* Operation on a float */
-
-/* Signedness */
-#define CF_UNSIGNED     0x0008  /* Value is unsigned */
-
-/* Masks for retrieving type information */
-#define CF_TYPEMASK     0x0007  /* Type information */
-#define CF_STYPEMASK    0x000F  /* Includes signedness */
-
-#define CF_NOKEEP       0x0010  /* Value may get destroyed when storing */
-#define CF_CONST        0x0020  /* Constant value available */
-#define CF_CONSTADDR    0x0040  /* Constant address value available */
-#define CF_TEST         0x0080  /* Test value */
-#define CF_FIXARGC      0x0100  /* Function has fixed arg count */
-#define CF_FORCECHAR    0x0200  /* Handle chars as chars, not ints */
-#define CF_REG          0x0800  /* Value is in primary register */
-
-/* Type of static address */
-#define CF_ADDRMASK     0xF000  /* Type of address */
-#define CF_STATIC       0x0000  /* Static local */
-#define CF_EXTERNAL     0x1000  /* Static external */
-#define CF_ABSOLUTE     0x2000  /* Numeric absolute address */
-#define CF_LOCAL        0x4000  /* Auto variable */
-#define CF_REGVAR       0x8000  /* Register variable */
-
-
-
-/* Forward */
-struct StrBuf;
-
-
-
-/*****************************************************************************/
-/*                         Files, pre- and postamble                         */
-/*****************************************************************************/
-
-
-
-void g_preamble (void);
-/* Generate the assembler code preamble */
-
-void g_fileinfo (const char* Name, unsigned long Size, unsigned long MTime);
-/* If debug info is enabled, place a file info into the source */
-
-
-
-/*****************************************************************************/
-/*                              Segment support                              */
-/*****************************************************************************/
-
-
-
-void g_userodata (void);
-/* Switch to the read only data segment */
-
-void g_usedata (void);
-/* Switch to the data segment */
-
-void g_usebss (void);
-/* Switch to the bss segment */
-
-void g_segname (segment_t Seg);
-/* Emit the name of a segment if necessary */
-
-
-
-/*****************************************************************************/
-/*                      Functions handling local labels                      */
-/*****************************************************************************/
-
-
-
-void g_defcodelabel (unsigned label);
-/* Define a local code label */
-
-void g_defdatalabel (unsigned label);
-/* Define a local data label */
-
-void g_aliasdatalabel (unsigned label, unsigned baselabel, long offs);
-/* Define label as a local alias for baselabel+offs */
-
-
-
-/*****************************************************************************/
-/*                     Functions handling global labels                      */
-/*****************************************************************************/
-
-
-
-void g_defgloblabel (const char* Name);
-/* Define a global label with the given name */
-
-void g_defexport (const char* Name, int ZP);
-/* Export the given label */
-
-void g_defimport (const char* Name, int ZP);
-/* Import the given label */
-
-void g_importstartup (void);
-/* Forced import of the startup segment */
-
-void g_importmainargs (void);
-/* Forced import of a special symbol that handles arguments to main */
-
-
-
-/*****************************************************************************/
-/*                                   stack                                   */
-/*****************************************************************************/
-
-
-
-int pop (unsigned flags);
-/* Pop an argument of the given size */
-
-int push (unsigned flags);
-/* Push an argument of the given size */
-
-unsigned sizeofarg (unsigned flags);
-/* Return the size of a function argument type that is encoded in flags */
-
-
-
-/*****************************************************************************/
-/*                    type conversion and similiar stuff                     */
-/*****************************************************************************/
-
-
-
-void g_toslong (unsigned flags);
-/* Make sure, the value on TOS is a long. Convert if necessary */
-
-void g_tosint (unsigned flags);
-/* Make sure, the value on TOS is an int. Convert if necessary */
-
-void g_regint (unsigned Flags);
-/* Make sure, the value in the primary register an int. Convert if necessary */
-
-void g_reglong (unsigned Flags);
-/* Make sure, the value in the primary register a long. Convert if necessary */
-
-unsigned g_typeadjust (unsigned lhs, unsigned rhs);
-/* Adjust the integer operands before doing a binary operation. lhs is a flags
-** value, that corresponds to the value on TOS, rhs corresponds to the value
-**  in (e)ax. The return value is the the flags value for the resulting type.
-*/
-
-unsigned g_typecast (unsigned lhs, unsigned rhs);
-/* Cast the value in the primary register to the operand size that is flagged
-** by the lhs value. Return the result value.
-*/
-
-void g_scale (unsigned flags, long val);
-/* Scale the value in the primary register by the given value. If val is positive,
-** scale up, is val is negative, scale down. This function is used to scale
-** the operands or results of pointer arithmetic by the size of the type, the
-** pointer points to.
-*/
-
-
-
-/*****************************************************************************/
-/*                          Function entry and exit                          */
-/*****************************************************************************/
-
-
-
-void g_enter (unsigned flags, unsigned argsize);
-/* Function prologue */
-
-void g_leave (void);
-/* Function epilogue */
-
-
-
-/*****************************************************************************/
-/*                            Register variables                             */
-/*****************************************************************************/
-
-
-
-void g_swap_regvars (int StackOffs, int RegOffs, unsigned Bytes);
-/* Swap a register variable with a location on the stack */
-
-void g_save_regvars (int RegOffs, unsigned Bytes);
-/* Save register variables */
-
-void g_restore_regvars (int StackOffs, int RegOffs, unsigned Bytes);
-/* Restore register variables */
-
-
-
-/*****************************************************************************/
-/*                           Fetching memory cells                           */
-/*****************************************************************************/
-
-
-
-void g_getimmed (unsigned Flags, unsigned long Val, long Offs);
-/* Load a constant into the primary register */
-
-void g_getstatic (unsigned Flags, unsigned long Label, long Offs);
-/* Fetch an static memory cell into the primary register */
-
-void g_getlocal (unsigned Flags, int Offs);
-/* Fetch specified local object (local var). */
-
-void g_getind (unsigned Flags, unsigned Offs);
-/* Fetch the specified object type indirect through the primary register
-** into the primary register
-*/
-
-void g_leasp (int Offs);
-/* Fetch the address of the specified symbol into the primary register */
-
-void g_leavariadic (int Offs);
-/* Fetch the address of a parameter in a variadic function into the primary
-** register
-*/
-
-
-
-/*****************************************************************************/
-/*                             Store into memory                             */
-/*****************************************************************************/
-
-
-
-void g_putstatic (unsigned flags, unsigned long label, long offs);
-/* Store the primary register into the specified static memory cell */
-
-void g_putlocal (unsigned Flags, int Offs, long Val);
-/* Put data into local object. */
-
-void g_putind (unsigned flags, unsigned offs);
-/* Store the specified object type in the primary register at the address
-** on the top of the stack
-*/
-
-
-
-/*****************************************************************************/
-/*              Adds and subs of variables fix a fixed address               */
-/*****************************************************************************/
-
-
-
-void g_addlocal (unsigned flags, int offs);
-/* Add a local variable to ax */
-
-void g_addstatic (unsigned flags, unsigned long label, long offs);
-/* Add a static variable to ax */
-
-
-
-/*****************************************************************************/
-/*                           Special op= functions                           */
-/*****************************************************************************/
-
-
-
-void g_addeqstatic (unsigned flags, unsigned long label, long offs,
-                    unsigned long val);
-/* Emit += for a static variable */
-
-void g_addeqlocal (unsigned flags, int offs, unsigned long val);
-/* Emit += for a local variable */
-
-void g_addeqind (unsigned flags, unsigned offs, unsigned long val);
-/* Emit += for the location with address in ax */
-
-void g_subeqstatic (unsigned flags, unsigned long label, long offs,
-                    unsigned long val);
-/* Emit -= for a static variable */
-
-void g_subeqlocal (unsigned flags, int offs, unsigned long val);
-/* Emit -= for a local variable */
-
-void g_subeqind (unsigned flags, unsigned offs, unsigned long val);
-/* Emit -= for the location with address in ax */
-
-
-
-/*****************************************************************************/
-/*                 Add a variable address to the value in ax                 */
-/*****************************************************************************/
-
-
-
-void g_addaddr_local (unsigned flags, int offs);
-/* Add the address of a local variable to ax */
-
-void g_addaddr_static (unsigned flags, unsigned long label, long offs);
-/* Add the address of a static variable to ax */
-
-
-
-/*****************************************************************************/
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-void g_save (unsigned flags);
-/* Copy primary register to hold register. */
-
-void g_restore (unsigned flags);
-/* Copy hold register to primary. */
-
-void g_cmp (unsigned flags, unsigned long val);
-/* Immidiate compare. The primary register will not be changed, Z flag
-** will be set.
-*/
-
-void g_test (unsigned flags);
-/* Test the value in the primary and set the condition codes */
-
-void g_push (unsigned flags, unsigned long val);
-/* Push the primary register or a constant value onto the stack */
-
-void g_swap (unsigned flags);
-/* Swap the primary register and the top of the stack. flags give the type
-** of *both* values (must have same size).
-*/
-
-void g_call (unsigned Flags, const char* Label, unsigned ArgSize);
-/* Call the specified subroutine name */
-
-void g_callind (unsigned Flags, unsigned ArgSize, int Offs);
-/* Call subroutine indirect */
-
-void g_jump (unsigned Label);
-/* Jump to specified internal label number */
-
-void g_truejump (unsigned flags, unsigned label);
-/* Jump to label if zero flag clear */
-
-void g_falsejump (unsigned flags, unsigned label);
-/* Jump to label if zero flag set */
-
-void g_drop (unsigned Space);
-/* Drop space allocated on the stack */
-
-void g_space (int space);
-/* Create or drop space on the stack */
-
-void g_cstackcheck (void);
-/* Check for a C stack overflow */
-
-void g_stackcheck (void);
-/* Check for a stack overflow */
-
-void g_add (unsigned flags, unsigned long val);
-void g_sub (unsigned flags, unsigned long val);
-void g_rsub (unsigned flags, unsigned long val);
-void g_mul (unsigned flags, unsigned long val);
-void g_div (unsigned flags, unsigned long val);
-void g_mod (unsigned flags, unsigned long val);
-void g_or (unsigned flags, unsigned long val);
-void g_xor (unsigned flags, unsigned long val);
-void g_and (unsigned flags, unsigned long val);
-void g_asr (unsigned flags, unsigned long val);
-void g_asl (unsigned flags, unsigned long val);
-void g_neg (unsigned flags);
-void g_bneg (unsigned flags);
-void g_com (unsigned flags);
-void g_inc (unsigned flags, unsigned long n);
-void g_dec (unsigned flags, unsigned long n);
-void g_eq (unsigned flags, unsigned long val);
-void g_ne (unsigned flags, unsigned long val);
-void g_lt (unsigned flags, unsigned long val);
-void g_le (unsigned flags, unsigned long val);
-void g_gt (unsigned flags, unsigned long val);
-void g_ge (unsigned flags, unsigned long val);
-
-void g_res (unsigned n);
-/* Reserve static storage, n bytes */
-
-void g_defdata (unsigned flags, unsigned long val, long offs);
-/* Define data with the size given in flags */
-
-void g_defbytes (const void* bytes, unsigned count);
-/* Output a row of bytes as a constant */
-
-void g_zerobytes (unsigned Count);
-/* Output Count bytes of data initialized with zero */
-
-void g_initregister (unsigned Label, unsigned Reg, unsigned Size);
-/* Initialize a register variable from static initialization data */
-
-void g_initauto (unsigned Label, unsigned Size);
-/* Initialize a local variable at stack offset zero from static data */
-
-void g_initstatic (unsigned InitLabel, unsigned VarLabel, unsigned Size);
-/* Initialize a static local variable from static initialization data */
-
-
-
-/*****************************************************************************/
-/*                             Switch statement                              */
-/*****************************************************************************/
-
-
-
-void g_switch (Collection* Nodes, unsigned DefaultLabel, unsigned Depth);
-/* Generate code for a switch statement */
-
-
-
-/*****************************************************************************/
-/*                       User supplied assembler code                        */
-/*****************************************************************************/
-
-
-
-void g_asmcode (struct StrBuf* B);
-/* Output one line of assembler code. */
-
-
-
-/* End of codegen.h */
-
-#endif
diff --git a/src/cc65/codeinfo.c b/src/cc65/codeinfo.c
deleted file mode 100644 (file)
index de51781..0000000
+++ /dev/null
@@ -1,833 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                codeinfo.c                                 */
-/*                                                                           */
-/*                  Additional information about 6502 code                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2015, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-#include <string.h>
-
-/* common */
-#include "chartype.h"
-#include "coll.h"
-#include "debugflag.h"
-
-/* cc65 */
-#include "codeent.h"
-#include "codeseg.h"
-#include "datatype.h"
-#include "error.h"
-#include "global.h"
-#include "reginfo.h"
-#include "symtab.h"
-#include "codeinfo.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Table with the compare suffixes */
-static const char CmpSuffixTab [][4] = {
-    "eq", "ne", "gt", "ge", "lt", "le", "ugt", "uge", "ult", "ule"
-};
-
-/* Table listing the function names and code info values for known internally
-** used functions. This table should get auto-generated in the future.
-*/
-typedef struct FuncInfo FuncInfo;
-struct FuncInfo {
-    const char*     Name;       /* Function name */
-    unsigned short  Use;        /* Register usage */
-    unsigned short  Chg;        /* Changed/destroyed registers */
-};
-
-/* Note for the shift functions: Shifts are done modulo 32, so all shift
-** routines are marked to use only the A register. The remainder is ignored
-** anyway.
-*/
-static const FuncInfo FuncInfoTable[] = {
-    { "addeq0sp",       REG_AX,               REG_AXY                        },
-    { "addeqysp",       REG_AXY,              REG_AXY                        },
-    { "addysp",         REG_Y,                REG_NONE                       },
-    { "aslax1",         REG_AX,               REG_AX | REG_TMP1              },
-    { "aslax2",         REG_AX,               REG_AX | REG_TMP1              },
-    { "aslax3",         REG_AX,               REG_AX | REG_TMP1              },
-    { "aslax4",         REG_AX,               REG_AX | REG_TMP1              },
-    { "aslaxy",         REG_AXY,              REG_AXY | REG_TMP1             },
-    { "asleax1",        REG_EAX,              REG_EAX | REG_TMP1             },
-    { "asleax2",        REG_EAX,              REG_EAX | REG_TMP1             },
-    { "asleax3",        REG_EAX,              REG_EAX | REG_TMP1             },
-    { "asleax4",        REG_EAX,              REG_EAXY | REG_TMP1            },
-    { "asrax1",         REG_AX,               REG_AX | REG_TMP1              },
-    { "asrax2",         REG_AX,               REG_AX | REG_TMP1              },
-    { "asrax3",         REG_AX,               REG_AX | REG_TMP1              },
-    { "asrax4",         REG_AX,               REG_AX | REG_TMP1              },
-    { "asraxy",         REG_AXY,              REG_AXY | REG_TMP1             },
-    { "asreax1",        REG_EAX,              REG_EAX | REG_TMP1             },
-    { "asreax2",        REG_EAX,              REG_EAX | REG_TMP1             },
-    { "asreax3",        REG_EAX,              REG_EAX | REG_TMP1             },
-    { "asreax4",        REG_EAX,              REG_EAXY | REG_TMP1            },
-    { "bnega",          REG_A,                REG_AX                         },
-    { "bnegax",         REG_AX,               REG_AX                         },
-    { "bnegeax",        REG_EAX,              REG_EAX                        },
-    { "booleq",         REG_NONE,             REG_AX                         },
-    { "boolge",         REG_NONE,             REG_AX                         },
-    { "boolgt",         REG_NONE,             REG_AX                         },
-    { "boolle",         REG_NONE,             REG_AX                         },
-    { "boollt",         REG_NONE,             REG_AX                         },
-    { "boolne",         REG_NONE,             REG_AX                         },
-    { "booluge",        REG_NONE,             REG_AX                         },
-    { "boolugt",        REG_NONE,             REG_AX                         },
-    { "boolule",        REG_NONE,             REG_AX                         },
-    { "boolult",        REG_NONE,             REG_AX                         },
-    { "callax",         REG_AX,               REG_ALL                        },
-    { "complax",        REG_AX,               REG_AX                         },
-    { "decax1",         REG_AX,               REG_AX                         },
-    { "decax2",         REG_AX,               REG_AX                         },
-    { "decax3",         REG_AX,               REG_AX                         },
-    { "decax4",         REG_AX,               REG_AX                         },
-    { "decax5",         REG_AX,               REG_AX                         },
-    { "decax6",         REG_AX,               REG_AX                         },
-    { "decax7",         REG_AX,               REG_AX                         },
-    { "decax8",         REG_AX,               REG_AX                         },
-    { "decaxy",         REG_AXY,              REG_AX | REG_TMP1              },
-    { "deceaxy",        REG_EAXY,             REG_EAX                        },
-    { "decsp1",         REG_NONE,             REG_Y                          },
-    { "decsp2",         REG_NONE,             REG_A                          },
-    { "decsp3",         REG_NONE,             REG_A                          },
-    { "decsp4",         REG_NONE,             REG_A                          },
-    { "decsp5",         REG_NONE,             REG_A                          },
-    { "decsp6",         REG_NONE,             REG_A                          },
-    { "decsp7",         REG_NONE,             REG_A                          },
-    { "decsp8",         REG_NONE,             REG_A                          },
-    { "incax1",         REG_AX,               REG_AX                         },
-    { "incax2",         REG_AX,               REG_AX                         },
-    { "incax3",         REG_AX,               REG_AXY | REG_TMP1             },
-    { "incax4",         REG_AX,               REG_AXY | REG_TMP1             },
-    { "incax5",         REG_AX,               REG_AXY | REG_TMP1             },
-    { "incax6",         REG_AX,               REG_AXY | REG_TMP1             },
-    { "incax7",         REG_AX,               REG_AXY | REG_TMP1             },
-    { "incax8",         REG_AX,               REG_AXY | REG_TMP1             },
-    { "incaxy",         REG_AXY,              REG_AXY | REG_TMP1             },
-    { "incsp1",         REG_NONE,             REG_NONE                       },
-    { "incsp2",         REG_NONE,             REG_Y                          },
-    { "incsp3",         REG_NONE,             REG_Y                          },
-    { "incsp4",         REG_NONE,             REG_Y                          },
-    { "incsp5",         REG_NONE,             REG_Y                          },
-    { "incsp6",         REG_NONE,             REG_Y                          },
-    { "incsp7",         REG_NONE,             REG_Y                          },
-    { "incsp8",         REG_NONE,             REG_Y                          },
-    { "laddeq",         REG_EAXY|REG_PTR1_LO, REG_EAXY | REG_PTR1_HI         },
-    { "laddeq0sp",      REG_EAX,              REG_EAXY                       },
-    { "laddeq1",        REG_Y | REG_PTR1_LO,  REG_EAXY | REG_PTR1_HI         },
-    { "laddeqa",        REG_AY | REG_PTR1_LO, REG_EAXY | REG_PTR1_HI         },
-    { "laddeqysp",      REG_EAXY,             REG_EAXY                       },
-    { "ldaidx",         REG_AXY,              REG_AX | REG_PTR1              },
-    { "ldauidx",        REG_AXY,              REG_AX | REG_PTR1              },
-    { "ldax0sp",        REG_NONE,             REG_AXY                        },
-    { "ldaxi",          REG_AX,               REG_AXY | REG_PTR1             },
-    { "ldaxidx",        REG_AXY,              REG_AXY | REG_PTR1             },
-    { "ldaxysp",        REG_Y,                REG_AXY                        },
-    { "ldeax0sp",       REG_NONE,             REG_EAXY                       },
-    { "ldeaxi",         REG_AX,               REG_EAXY | REG_PTR1            },
-    { "ldeaxidx",       REG_AXY,              REG_EAXY | REG_PTR1            },
-    { "ldeaxysp",       REG_Y,                REG_EAXY                       },
-    { "leaa0sp",        REG_A,                REG_AX                         },
-    { "leaaxsp",        REG_AX,               REG_AX                         },
-    { "lsubeq",         REG_EAXY|REG_PTR1_LO, REG_EAXY | REG_PTR1_HI         },
-    { "lsubeq0sp",      REG_EAX,              REG_EAXY                       },
-    { "lsubeq1",        REG_Y | REG_PTR1_LO,  REG_EAXY | REG_PTR1_HI         },
-    { "lsubeqa",        REG_AY | REG_PTR1_LO, REG_EAXY | REG_PTR1_HI         },
-    { "lsubeqysp",      REG_EAXY,             REG_EAXY                       },
-    { "mulax10",        REG_AX,               REG_AX | REG_PTR1              },
-    { "mulax3",         REG_AX,               REG_AX | REG_PTR1              },
-    { "mulax5",         REG_AX,               REG_AX | REG_PTR1              },
-    { "mulax6",         REG_AX,               REG_AX | REG_PTR1              },
-    { "mulax7",         REG_AX,               REG_AX | REG_PTR1              },
-    { "mulax9",         REG_AX,               REG_AX | REG_PTR1              },
-    { "negax",          REG_AX,               REG_AX                         },
-    { "push0",          REG_NONE,             REG_AXY                        },
-    { "push0ax",        REG_AX,               REG_Y | REG_SREG               },
-    { "push1",          REG_NONE,             REG_AXY                        },
-    { "push2",          REG_NONE,             REG_AXY                        },
-    { "push3",          REG_NONE,             REG_AXY                        },
-    { "push4",          REG_NONE,             REG_AXY                        },
-    { "push5",          REG_NONE,             REG_AXY                        },
-    { "push6",          REG_NONE,             REG_AXY                        },
-    { "push7",          REG_NONE,             REG_AXY                        },
-    { "pusha",          REG_A,                REG_Y                          },
-    { "pusha0",         REG_A,                REG_XY                         },
-    { "pusha0sp",       REG_NONE,             REG_AY                         },
-    { "pushaFF",        REG_A,                REG_Y                          },
-    { "pushax",         REG_AX,               REG_Y                          },
-    { "pushaysp",       REG_Y,                REG_AY                         },
-    { "pushc0",         REG_NONE,             REG_A | REG_Y                  },
-    { "pushc1",         REG_NONE,             REG_A | REG_Y                  },
-    { "pushc2",         REG_NONE,             REG_A | REG_Y                  },
-    { "pusheax",        REG_EAX,              REG_Y                          },
-    { "pushl0",         REG_NONE,             REG_AXY                        },
-    { "pushw",          REG_AX,               REG_AXY | REG_PTR1             },
-    { "pushw0sp",       REG_NONE,             REG_AXY                        },
-    { "pushwidx",       REG_AXY,              REG_AXY | REG_PTR1             },
-    { "pushwysp",       REG_Y,                REG_AXY                        },
-    { "regswap",        REG_AXY,              REG_AXY | REG_TMP1             },
-    { "regswap1",       REG_XY,               REG_A                          },
-    { "regswap2",       REG_XY,               REG_A | REG_Y                  },
-    { "return0",        REG_NONE,             REG_AX                         },
-    { "return1",        REG_NONE,             REG_AX                         },
-    { "shlax1",         REG_AX,               REG_AX | REG_TMP1              },
-    { "shlax2",         REG_AX,               REG_AX | REG_TMP1              },
-    { "shlax3",         REG_AX,               REG_AX | REG_TMP1              },
-    { "shlax4",         REG_AX,               REG_AX | REG_TMP1              },
-    { "shlaxy",         REG_AXY,              REG_AXY | REG_TMP1             },
-    { "shleax1",        REG_EAX,              REG_EAX | REG_TMP1             },
-    { "shleax2",        REG_EAX,              REG_EAX | REG_TMP1             },
-    { "shleax3",        REG_EAX,              REG_EAX | REG_TMP1             },
-    { "shleax4",        REG_EAX,              REG_EAXY | REG_TMP1            },
-    { "shrax1",         REG_AX,               REG_AX | REG_TMP1              },
-    { "shrax2",         REG_AX,               REG_AX | REG_TMP1              },
-    { "shrax3",         REG_AX,               REG_AX | REG_TMP1              },
-    { "shrax4",         REG_AX,               REG_AX | REG_TMP1              },
-    { "shraxy",         REG_AXY,              REG_AXY | REG_TMP1             },
-    { "shreax1",        REG_EAX,              REG_EAX | REG_TMP1             },
-    { "shreax2",        REG_EAX,              REG_EAX | REG_TMP1             },
-    { "shreax3",        REG_EAX,              REG_EAX | REG_TMP1             },
-    { "shreax4",        REG_EAX,              REG_EAXY | REG_TMP1            },
-    { "staspidx",       REG_A | REG_Y,        REG_Y | REG_TMP1 | REG_PTR1    },
-    { "stax0sp",        REG_AX,               REG_Y                          },
-    { "staxspidx",      REG_AXY,              REG_TMP1 | REG_PTR1            },
-    { "staxysp",        REG_AXY,              REG_Y                          },
-    { "steax0sp",       REG_EAX,              REG_Y                          },
-    { "steaxysp",       REG_EAXY,             REG_Y                          },
-    { "subeq0sp",       REG_AX,               REG_AXY                        },
-    { "subeqysp",       REG_AXY,              REG_AXY                        },
-    { "subysp",         REG_Y,                REG_AY                         },
-    { "tosadd0ax",      REG_AX,               REG_EAXY | REG_TMP1            },
-    { "tosadda0",       REG_A,                REG_AXY                        },
-    { "tosaddax",       REG_AX,               REG_AXY                        },
-    { "tosaddeax",      REG_EAX,              REG_EAXY | REG_TMP1            },
-    { "tosand0ax",      REG_AX,               REG_EAXY | REG_TMP1            },
-    { "tosanda0",       REG_A,                REG_AXY                        },
-    { "tosandax",       REG_AX,               REG_AXY                        },
-    { "tosandeax",      REG_EAX,              REG_EAXY | REG_TMP1            },
-    { "tosaslax",       REG_A,                REG_AXY | REG_TMP1             },
-    { "tosasleax",      REG_A,                REG_EAXY | REG_TMP1            },
-    { "tosasrax",       REG_A,                REG_AXY | REG_TMP1             },
-    { "tosasreax",      REG_A,                REG_EAXY | REG_TMP1            },
-    { "tosdiv0ax",      REG_AX,               REG_ALL                        },
-    { "tosdiva0",       REG_A,                REG_ALL                        },
-    { "tosdivax",       REG_AX,               REG_ALL                        },
-    { "tosdiveax",      REG_EAX,              REG_ALL                        },
-    { "toseq00",        REG_NONE,             REG_AXY | REG_SREG             },
-    { "toseqa0",        REG_A,                REG_AXY | REG_SREG             },
-    { "toseqax",        REG_AX,               REG_AXY | REG_SREG             },
-    { "toseqeax",       REG_EAX,              REG_AXY | REG_PTR1             },
-    { "tosge00",        REG_NONE,             REG_AXY | REG_SREG             },
-    { "tosgea0",        REG_A,                REG_AXY | REG_SREG             },
-    { "tosgeax",        REG_AX,               REG_AXY | REG_SREG             },
-    { "tosgeeax",       REG_EAX,              REG_AXY | REG_PTR1             },
-    { "tosgt00",        REG_NONE,             REG_AXY | REG_SREG             },
-    { "tosgta0",        REG_A,                REG_AXY | REG_SREG             },
-    { "tosgtax",        REG_AX,               REG_AXY | REG_SREG             },
-    { "tosgteax",       REG_EAX,              REG_AXY | REG_PTR1             },
-    { "tosicmp",        REG_AX,               REG_AXY | REG_SREG             },
-    { "tosicmp0",       REG_A,                REG_AXY | REG_SREG             },
-    { "toslcmp",        REG_EAX,              REG_A | REG_Y | REG_PTR1       },
-    { "tosle00",        REG_NONE,             REG_AXY | REG_SREG             },
-    { "toslea0",        REG_A,                REG_AXY | REG_SREG             },
-    { "tosleax",        REG_AX,               REG_AXY | REG_SREG             },
-    { "tosleeax",       REG_EAX,              REG_AXY | REG_PTR1             },
-    { "toslt00",        REG_NONE,             REG_AXY | REG_SREG             },
-    { "toslta0",        REG_A,                REG_AXY | REG_SREG             },
-    { "tosltax",        REG_AX,               REG_AXY | REG_SREG             },
-    { "toslteax",       REG_EAX,              REG_AXY | REG_PTR1             },
-    { "tosmod0ax",      REG_AX,               REG_ALL                        },
-    { "tosmodeax",      REG_EAX,              REG_ALL                        },
-    { "tosmul0ax",      REG_AX,               REG_ALL                        },
-    { "tosmula0",       REG_A,                REG_ALL                        },
-    { "tosmulax",       REG_AX,               REG_ALL                        },
-    { "tosmuleax",      REG_EAX,              REG_ALL                        },
-    { "tosne00",        REG_NONE,             REG_AXY | REG_SREG             },
-    { "tosnea0",        REG_A,                REG_AXY | REG_SREG             },
-    { "tosneax",        REG_AX,               REG_AXY | REG_SREG             },
-    { "tosneeax",       REG_EAX,              REG_AXY | REG_PTR1             },
-    { "tosor0ax",       REG_AX,               REG_EAXY | REG_TMP1            },
-    { "tosora0",        REG_A,                REG_AXY | REG_TMP1             },
-    { "tosorax",        REG_AX,               REG_AXY | REG_TMP1             },
-    { "tosoreax",       REG_EAX,              REG_EAXY | REG_TMP1            },
-    { "tosrsub0ax",     REG_AX,               REG_EAXY | REG_TMP1            },
-    { "tosrsuba0",      REG_A,                REG_AXY | REG_TMP1             },
-    { "tosrsubax",      REG_AX,               REG_AXY | REG_TMP1             },
-    { "tosrsubeax",     REG_EAX,              REG_EAXY | REG_TMP1            },
-    { "tosshlax",       REG_A,                REG_AXY | REG_TMP1             },
-    { "tosshleax",      REG_A,                REG_EAXY | REG_TMP1            },
-    { "tosshrax",       REG_A,                REG_AXY | REG_TMP1             },
-    { "tosshreax",      REG_A,                REG_EAXY | REG_TMP1            },
-    { "tossub0ax",      REG_AX,               REG_EAXY                       },
-    { "tossuba0",       REG_A,                REG_AXY                        },
-    { "tossubax",       REG_AX,               REG_AXY                        },
-    { "tossubeax",      REG_EAX,              REG_EAXY                       },
-    { "tosudiv0ax",     REG_AX,               REG_ALL & ~REG_SAVE            },
-    { "tosudiva0",      REG_A,                REG_EAXY | REG_PTR1            }, /* also ptr4 */
-    { "tosudivax",      REG_AX,               REG_EAXY | REG_PTR1            }, /* also ptr4 */
-    { "tosudiveax",     REG_EAX,              REG_ALL & ~REG_SAVE            },
-    { "tosuge00",       REG_NONE,             REG_AXY | REG_SREG             },
-    { "tosugea0",       REG_A,                REG_AXY | REG_SREG             },
-    { "tosugeax",       REG_AX,               REG_AXY | REG_SREG             },
-    { "tosugeeax",      REG_EAX,              REG_AXY | REG_PTR1             },
-    { "tosugt00",       REG_NONE,             REG_AXY | REG_SREG             },
-    { "tosugta0",       REG_A,                REG_AXY | REG_SREG             },
-    { "tosugtax",       REG_AX,               REG_AXY | REG_SREG             },
-    { "tosugteax",      REG_EAX,              REG_AXY | REG_PTR1             },
-    { "tosule00",       REG_NONE,             REG_AXY | REG_SREG             },
-    { "tosulea0",       REG_A,                REG_AXY | REG_SREG             },
-    { "tosuleax",       REG_AX,               REG_AXY | REG_SREG             },
-    { "tosuleeax",      REG_EAX,              REG_AXY | REG_PTR1             },
-    { "tosult00",       REG_NONE,             REG_AXY | REG_SREG             },
-    { "tosulta0",       REG_A,                REG_AXY | REG_SREG             },
-    { "tosultax",       REG_AX,               REG_AXY | REG_SREG             },
-    { "tosulteax",      REG_EAX,              REG_AXY | REG_PTR1             },
-    { "tosumod0ax",     REG_AX,               REG_ALL & ~REG_SAVE            },
-    { "tosumoda0",      REG_A,                REG_EAXY | REG_PTR1            }, /* also ptr4 */
-    { "tosumodax",      REG_AX,               REG_EAXY | REG_PTR1            }, /* also ptr4 */
-    { "tosumodeax",     REG_EAX,              REG_ALL & ~REG_SAVE            },
-    { "tosumul0ax",     REG_AX,               REG_ALL                        },
-    { "tosumula0",      REG_A,                REG_ALL                        },
-    { "tosumulax",      REG_AX,               REG_ALL                        },
-    { "tosumuleax",     REG_EAX,              REG_ALL                        },
-    { "tosxor0ax",      REG_AX,               REG_EAXY | REG_TMP1            },
-    { "tosxora0",       REG_A,                REG_AXY | REG_TMP1             },
-    { "tosxorax",       REG_AX,               REG_AXY | REG_TMP1             },
-    { "tosxoreax",      REG_EAX,              REG_EAXY | REG_TMP1            },
-    { "tsteax",         REG_EAX,              REG_Y                          },
-    { "utsteax",        REG_EAX,              REG_Y                          },
-};
-#define FuncInfoCount   (sizeof(FuncInfoTable) / sizeof(FuncInfoTable[0]))
-
-/* Table with names of zero page locations used by the compiler */
-static const ZPInfo ZPInfoTable[] = {
-    {   0, "ptr1",      REG_PTR1_LO,    REG_PTR1        },
-    {   0, "ptr1+1",    REG_PTR1_HI,    REG_PTR1        },
-    {   0, "ptr2",      REG_PTR2_LO,    REG_PTR2        },
-    {   0, "ptr2+1",    REG_PTR2_HI,    REG_PTR2        },
-    {   4, "ptr3",      REG_NONE,       REG_NONE        },
-    {   4, "ptr4",      REG_NONE,       REG_NONE        },
-    {   7, "regbank",   REG_NONE,       REG_NONE        },
-    {   0, "regsave",   REG_SAVE_LO,    REG_SAVE        },
-    {   0, "regsave+1", REG_SAVE_HI,    REG_SAVE        },
-    {   0, "sp",        REG_SP_LO,      REG_SP          },
-    {   0, "sp+1",      REG_SP_HI,      REG_SP          },
-    {   0, "sreg",      REG_SREG_LO,    REG_SREG        },
-    {   0, "sreg+1",    REG_SREG_HI,    REG_SREG        },
-    {   0, "tmp1",      REG_TMP1,       REG_TMP1        },
-    {   0, "tmp2",      REG_NONE,       REG_NONE        },
-    {   0, "tmp3",      REG_NONE,       REG_NONE        },
-    {   0, "tmp4",      REG_NONE,       REG_NONE        },
-};
-#define ZPInfoCount     (sizeof(ZPInfoTable) / sizeof(ZPInfoTable[0]))
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static int CompareFuncInfo (const void* Key, const void* Info)
-/* Compare function for bsearch */
-{
-    return strcmp (Key, ((const FuncInfo*) Info)->Name);
-}
-
-
-
-void GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg)
-/* For the given function, lookup register information and store it into
-** the given variables. If the function is unknown, assume it will use and
-** load all registers.
-*/
-{
-    /* If the function name starts with an underline, it is an external
-    ** function. Search for it in the symbol table. If the function does
-    ** not start with an underline, it may be a runtime support function.
-    ** Search for it in the list of builtin functions.
-    */
-    if (Name[0] == '_') {
-        /* Search in the symbol table, skip the leading underscore */
-        SymEntry* E = FindGlobalSym (Name+1);
-
-        /* Did we find it in the top-level table? */
-        if (E && IsTypeFunc (E->Type)) {
-            FuncDesc* D = E->V.F.Func;
-
-            /* A variadic function will use the Y register (the parameter list
-            ** size is passed there). A fastcall function will use the A or A/X
-            ** registers. In all other cases, no registers are used. However,
-            ** we assume that any function will destroy all registers.
-            */
-            if ((D->Flags & FD_VARIADIC) != 0) {
-                *Use = REG_Y;
-            } else if (D->ParamCount > 0 &&
-                       (AutoCDecl ?
-                        IsQualFastcall (E->Type) :
-                        !IsQualCDecl (E->Type))) {
-                /* Will use registers depending on the last param. */
-                switch (CheckedSizeOf (D->LastParam->Type)) {
-                    case 1u:
-                        *Use = REG_A;
-                        break;
-                    case 2u:
-                        *Use = REG_AX;
-                        break;
-                    default:
-                        *Use = REG_EAX;
-                }
-            } else {
-                /* Will not use any registers */
-                *Use = REG_NONE;
-            }
-
-            /* Will destroy all registers */
-            *Chg = REG_ALL;
-
-            /* Done */
-            return;
-        }
-
-    } else if (IsDigit (Name[0]) || Name[0] == '$') {
-
-        /* A call to a numeric address. Assume that anything gets used and
-        ** destroyed. This is not a real problem, since numeric addresses
-        ** are used mostly in inline assembly anyway.
-        */
-        *Use = REG_ALL;
-        *Chg = REG_ALL;
-        return;
-
-    } else {
-
-        /* Search for the function in the list of builtin functions */
-        const FuncInfo* Info = bsearch (Name, FuncInfoTable, FuncInfoCount,
-                                        sizeof(FuncInfo), CompareFuncInfo);
-
-        /* Do we know the function? */
-        if (Info) {
-            /* Use the information we have */
-            *Use = Info->Use;
-            *Chg = Info->Chg;
-        } else {
-            /* It's an internal function we have no information for. If in
-            ** debug mode, output an additional warning, so we have a chance
-            ** to fix it. Otherwise assume that the internal function will
-            ** use and change all registers.
-            */
-            if (Debug) {
-                fprintf (stderr, "No info about internal function `%s'\n", Name);
-            }
-            *Use = REG_ALL;
-            *Chg = REG_ALL;
-        }
-        return;
-    }
-
-    /* Function not found - assume that the primary register is input, and all
-    ** registers are changed
-    */
-    *Use = REG_EAXY;
-    *Chg = REG_ALL;
-}
-
-
-
-static int CompareZPInfo (const void* Name, const void* Info)
-/* Compare function for bsearch */
-{
-    /* Cast the pointers to the correct data type */
-    const char* N   = (const char*) Name;
-    const ZPInfo* E = (const ZPInfo*) Info;
-
-    /* Do the compare. Be careful because of the length (Info may contain
-    ** more than just the zeropage name).
-    */
-    if (E->Len == 0) {
-        /* Do a full compare */
-        return strcmp (N, E->Name);
-    } else {
-        /* Only compare the first part */
-        int Res = strncmp (N, E->Name, E->Len);
-        if (Res == 0 && (N[E->Len] != '\0' && N[E->Len] != '+')) {
-            /* Name is actually longer than Info->Name */
-            Res = -1;
-        }
-        return Res;
-    }
-}
-
-
-
-const ZPInfo* GetZPInfo (const char* Name)
-/* If the given name is a zero page symbol, return a pointer to the info
-** struct for this symbol, otherwise return NULL.
-*/
-{
-    /* Search for the zp location in the list */
-    return bsearch (Name, ZPInfoTable, ZPInfoCount,
-                    sizeof(ZPInfo), CompareZPInfo);
-}
-
-
-
-static unsigned GetRegInfo2 (CodeSeg* S,
-                             CodeEntry* E,
-                             int Index,
-                             Collection* Visited,
-                             unsigned Used,
-                             unsigned Unused,
-                             unsigned Wanted)
-/* Recursively called subfunction for GetRegInfo. */
-{
-    /* Follow the instruction flow recording register usage. */
-    while (1) {
-
-        unsigned R;
-
-        /* Check if we have already visited the current code entry. If so,
-        ** bail out.
-        */
-        if (CE_HasMark (E)) {
-            break;
-        }
-
-        /* Mark this entry as already visited */
-        CE_SetMark (E);
-        CollAppend (Visited, E);
-
-        /* Evaluate the used registers */
-        R = E->Use;
-        if (E->OPC == OP65_RTS ||
-            ((E->Info & OF_UBRA) != 0 && E->JumpTo == 0)) {
-            /* This instruction will leave the function */
-            R |= S->ExitRegs;
-        }
-        if (R != REG_NONE) {
-            /* We are not interested in the use of any register that has been
-            ** used before.
-            */
-            R &= ~Unused;
-            /* Remember the remaining registers */
-            Used |= R;
-        }
-
-        /* Evaluate the changed registers */
-        if ((R = E->Chg) != REG_NONE) {
-            /* We are not interested in the use of any register that has been
-            ** used before.
-            */
-            R &= ~Used;
-            /* Remember the remaining registers */
-            Unused |= R;
-        }
-
-        /* If we know about all registers now, bail out */
-        if (((Used | Unused) & Wanted) == Wanted) {
-            break;
-        }
-
-        /* If the instruction is an RTS or RTI, we're done */
-        if ((E->Info & OF_RET) != 0) {
-            break;
-        }
-
-        /* If we have an unconditional branch, follow this branch if possible,
-        ** otherwise we're done.
-        */
-        if ((E->Info & OF_UBRA) != 0) {
-
-            /* Does this jump have a valid target? */
-            if (E->JumpTo) {
-
-                /* Unconditional jump */
-                E     = E->JumpTo->Owner;
-                Index = -1;             /* Invalidate */
-
-            } else {
-                /* Jump outside means we're done */
-                break;
-            }
-
-        /* In case of conditional branches, follow the branch if possible and
-        ** follow the normal flow (branch not taken) afterwards. If we cannot
-        ** follow the branch, we're done.
-        */
-        } else if ((E->Info & OF_CBRA) != 0) {
-
-            /* Recursively determine register usage at the branch target */
-            unsigned U1;
-            unsigned U2;
-
-            if (E->JumpTo) {
-
-                /* Jump to internal label */
-                U1 = GetRegInfo2 (S, E->JumpTo->Owner, -1, Visited, Used, Unused, Wanted);
-
-            } else {
-
-                /* Jump to external label. This will effectively exit the
-                ** function, so we use the exitregs information here.
-                */
-                U1 = S->ExitRegs;
-
-            }
-
-            /* Get the next entry */
-            if (Index < 0) {
-                Index = CS_GetEntryIndex (S, E);
-            }
-            if ((E = CS_GetEntry (S, ++Index)) == 0) {
-                Internal ("GetRegInfo2: No next entry!");
-            }
-
-            /* Follow flow if branch not taken */
-            U2 = GetRegInfo2 (S, E, Index, Visited, Used, Unused, Wanted);
-
-            /* Registers are used if they're use in any of the branches */
-            return U1 | U2;
-
-        } else {
-
-            /* Just go to the next instruction */
-            if (Index < 0) {
-                Index = CS_GetEntryIndex (S, E);
-            }
-            E = CS_GetEntry (S, ++Index);
-            if (E == 0) {
-                /* No next entry */
-                Internal ("GetRegInfo2: No next entry!");
-            }
-
-        }
-
-    }
-
-    /* Return to the caller the complement of all unused registers */
-    return Used;
-}
-
-
-
-static unsigned GetRegInfo1 (CodeSeg* S,
-                             CodeEntry* E,
-                             int Index,
-                             Collection* Visited,
-                             unsigned Used,
-                             unsigned Unused,
-                             unsigned Wanted)
-/* Recursively called subfunction for GetRegInfo. */
-{
-    /* Remember the current count of the line collection */
-    unsigned Count = CollCount (Visited);
-
-    /* Call the worker routine */
-    unsigned R = GetRegInfo2 (S, E, Index, Visited, Used, Unused, Wanted);
-
-    /* Restore the old count, unmarking all new entries */
-    unsigned NewCount = CollCount (Visited);
-    while (NewCount-- > Count) {
-        CodeEntry* E = CollAt (Visited, NewCount);
-        CE_ResetMark (E);
-        CollDelete (Visited, NewCount);
-    }
-
-    /* Return the registers used */
-    return R;
-}
-
-
-
-unsigned GetRegInfo (struct CodeSeg* S, unsigned Index, unsigned Wanted)
-/* Determine register usage information for the instructions starting at the
-** given index.
-*/
-{
-    CodeEntry*      E;
-    Collection      Visited;    /* Visited entries */
-    unsigned        R;
-
-    /* Get the code entry for the given index */
-    if (Index >= CS_GetEntryCount (S)) {
-        /* There is no such code entry */
-        return REG_NONE;
-    }
-    E = CS_GetEntry (S, Index);
-
-    /* Initialize the data structure used to collection information */
-    InitCollection (&Visited);
-
-    /* Call the recursive subfunction */
-    R = GetRegInfo1 (S, E, Index, &Visited, REG_NONE, REG_NONE, Wanted);
-
-    /* Delete the line collection */
-    DoneCollection (&Visited);
-
-    /* Return the registers used */
-    return R;
-}
-
-
-
-int RegAUsed (struct CodeSeg* S, unsigned Index)
-/* Check if the value in A is used. */
-{
-    return (GetRegInfo (S, Index, REG_A) & REG_A) != 0;
-}
-
-
-
-int RegXUsed (struct CodeSeg* S, unsigned Index)
-/* Check if the value in X is used. */
-{
-    return (GetRegInfo (S, Index, REG_X) & REG_X) != 0;
-}
-
-
-
-int RegYUsed (struct CodeSeg* S, unsigned Index)
-/* Check if the value in Y is used. */
-{
-    return (GetRegInfo (S, Index, REG_Y) & REG_Y) != 0;
-}
-
-
-
-int RegAXUsed (struct CodeSeg* S, unsigned Index)
-/* Check if the value in A or(!) the value in X are used. */
-{
-    return (GetRegInfo (S, Index, REG_AX) & REG_AX) != 0;
-}
-
-
-
-int RegEAXUsed (struct CodeSeg* S, unsigned Index)
-/* Check if any of the four bytes in EAX are used. */
-{
-    return (GetRegInfo (S, Index, REG_EAX) & REG_EAX) != 0;
-}
-
-
-
-unsigned GetKnownReg (unsigned Use, const RegContents* RC)
-/* Return the register or zero page location from the set in Use, thats
-** contents are known. If Use does not contain any register, or if the
-** register in question does not have a known value, return REG_NONE.
-*/
-{
-    if ((Use & REG_A) != 0) {
-        return (RC == 0 || RC->RegA >= 0)? REG_A : REG_NONE;
-    } else if ((Use & REG_X) != 0) {
-        return (RC == 0 || RC->RegX >= 0)? REG_X : REG_NONE;
-    } else if ((Use & REG_Y) != 0) {
-        return (RC == 0 || RC->RegY >= 0)? REG_Y : REG_NONE;
-    } else if ((Use & REG_TMP1) != 0) {
-        return (RC == 0 || RC->Tmp1 >= 0)? REG_TMP1 : REG_NONE;
-    } else if ((Use & REG_PTR1_LO) != 0) {
-        return (RC == 0 || RC->Ptr1Lo >= 0)? REG_PTR1_LO : REG_NONE;
-    } else if ((Use & REG_PTR1_HI) != 0) {
-        return (RC == 0 || RC->Ptr1Hi >= 0)? REG_PTR1_HI : REG_NONE;
-    } else if ((Use & REG_SREG_LO) != 0) {
-        return (RC == 0 || RC->SRegLo >= 0)? REG_SREG_LO : REG_NONE;
-    } else if ((Use & REG_SREG_HI) != 0) {
-        return (RC == 0 || RC->SRegHi >= 0)? REG_SREG_HI : REG_NONE;
-    } else {
-        return REG_NONE;
-    }
-}
-
-
-
-static cmp_t FindCmpCond (const char* Code, unsigned CodeLen)
-/* Search for a compare condition by the given code using the given length */
-{
-    unsigned I;
-
-    /* Linear search */
-    for (I = 0; I < sizeof (CmpSuffixTab) / sizeof (CmpSuffixTab [0]); ++I) {
-        if (strncmp (Code, CmpSuffixTab [I], CodeLen) == 0) {
-            /* Found */
-            return I;
-        }
-    }
-
-    /* Not found */
-    return CMP_INV;
-}
-
-
-
-cmp_t FindBoolCmpCond (const char* Name)
-/* Check if the given string is the name of one of the boolean transformer
-** subroutine, and if so, return the condition that is evaluated by this
-** routine. Return CMP_INV if the condition is not recognised.
-*/
-{
-    /* Check for the correct subroutine name */
-    if (strncmp (Name, "bool", 4) == 0) {
-        /* Name is ok, search for the code in the table */
-        return FindCmpCond (Name+4, strlen(Name)-4);
-    } else {
-        /* Not found */
-        return CMP_INV;
-    }
-}
-
-
-
-cmp_t FindTosCmpCond (const char* Name)
-/* Check if this is a call to one of the TOS compare functions (tosgtax).
-** Return the condition code or CMP_INV on failure.
-*/
-{
-    unsigned Len = strlen (Name);
-
-    /* Check for the correct subroutine name */
-    if (strncmp (Name, "tos", 3) == 0 && strcmp (Name+Len-2, "ax") == 0) {
-        /* Name is ok, search for the code in the table */
-        return FindCmpCond (Name+3, Len-3-2);
-    } else {
-        /* Not found */
-        return CMP_INV;
-    }
-}
diff --git a/src/cc65/codeinfo.h b/src/cc65/codeinfo.h
deleted file mode 100644 (file)
index be0bfbf..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                codeinfo.h                                 */
-/*                                                                           */
-/*                  Additional information about 6502 code                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2002 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef CODEINFO_H
-#define CODEINFO_H
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-struct CodeSeg;
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Forward to struct RegContents */
-struct RegContents;
-
-/* Defines for registers. */
-#define REG_NONE        0x0000U
-#define REG_A           0x0001U
-#define REG_X           0x0002U
-#define REG_Y           0x0004U
-#define REG_TMP1        0x0008U
-#define REG_PTR1_LO     0x0010U
-#define REG_PTR1_HI     0x0020U
-#define REG_PTR2_LO     0x0040U
-#define REG_PTR2_HI     0x0080U
-#define REG_SREG_LO     0x0100U
-#define REG_SREG_HI     0x0200U
-#define REG_SAVE_LO     0x0400U
-#define REG_SAVE_HI     0x0800U
-#define REG_SP_LO       0x1000U
-#define REG_SP_HI       0x2000U
-
-
-/* Combined register defines */
-#define REG_PTR1        (REG_PTR1_LO | REG_PTR1_HI)
-#define REG_PTR2        (REG_PTR2_LO | REG_PTR2_HI)
-#define REG_SREG        (REG_SREG_LO | REG_SREG_HI)
-#define REG_SAVE        (REG_SAVE_LO | REG_SAVE_HI)
-#define REG_SP          (REG_SP_LO | REG_SP_HI)
-#define REG_AX          (REG_A | REG_X)
-#define REG_AY          (REG_A | REG_Y)
-#define REG_XY          (REG_X | REG_Y)
-#define REG_AXY         (REG_AX | REG_Y)
-#define REG_EAX         (REG_AX | REG_SREG)
-#define REG_EAXY        (REG_EAX | REG_Y)
-#define REG_ZP          0xFFF8U
-#define REG_ALL         0xFFFFU
-
-
-
-/* Zero page register info */
-typedef struct ZPInfo ZPInfo;
-struct ZPInfo {
-    unsigned char  Len;         /* Length of the following string */
-    char           Name[11];    /* Name of zero page symbol */
-    unsigned short ByteUse;     /* Register info for this symbol */
-    unsigned short WordUse;     /* Register info for 16 bit access */
-};
-
-
-
-/* Defines for the conditions in a compare */
-typedef enum {
-    CMP_INV = -1,
-    CMP_EQ,
-    CMP_NE,
-    CMP_GT,
-    CMP_GE,
-    CMP_LT,
-    CMP_LE,
-    CMP_UGT,
-    CMP_UGE,
-    CMP_ULT,
-    CMP_ULE
-} cmp_t;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg);
-/* For the given function, lookup register information and store it into
-** the given variables. If the function is unknown, assume it will use and
-** load all registers.
-*/
-
-const ZPInfo* GetZPInfo (const char* Name);
-/* If the given name is a zero page symbol, return a pointer to the info
-** struct for this symbol, otherwise return NULL.
-*/
-
-unsigned GetRegInfo (struct CodeSeg* S, unsigned Index, unsigned Wanted);
-/* Determine register usage information for the instructions starting at the
-** given index.
-*/
-
-int RegAUsed (struct CodeSeg* S, unsigned Index);
-/* Check if the value in A is used. */
-
-int RegXUsed (struct CodeSeg* S, unsigned Index);
-/* Check if the value in X is used. */
-
-int RegYUsed (struct CodeSeg* S, unsigned Index);
-/* Check if the value in Y is used. */
-
-int RegAXUsed (struct CodeSeg* S, unsigned Index);
-/* Check if the value in A or(!) the value in X are used. */
-
-int RegEAXUsed (struct CodeSeg* S, unsigned Index);
-/* Check if any of the four bytes in EAX are used. */
-
-unsigned GetKnownReg (unsigned Use, const struct RegContents* RC);
-/* Return the register or zero page location from the set in Use, thats
-** contents are known. If Use does not contain any register, or if the
-** register in question does not have a known value, return REG_NONE.
-*/
-
-cmp_t FindBoolCmpCond (const char* Name);
-/* Check if the given string is the name of one of the boolean transformer
-** subroutine, and if so, return the condition that is evaluated by this
-** routine. Return CMP_INV if the condition is not recognised.
-*/
-
-cmp_t FindTosCmpCond (const char* Name);
-/* Check if this is a call to one of the TOS compare functions (tosgtax).
-** Return the condition code or CMP_INV on failure.
-*/
-
-
-
-/* End of codeinfo.h */
-
-#endif
diff --git a/src/cc65/codelab.c b/src/cc65/codelab.c
deleted file mode 100644 (file)
index f365208..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 codelab.c                                 */
-/*                                                                           */
-/*                           Code label structure                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "check.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "codeent.h"
-#include "codelab.h"
-#include "output.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-CodeLabel* NewCodeLabel (const char* Name, unsigned Hash)
-/* Create a new code label, initialize and return it */
-{
-    /* Allocate memory */
-    CodeLabel* L = xmalloc (sizeof (CodeLabel));
-
-    /* Initialize the fields */
-    L->Next  = 0;
-    L->Name  = xstrdup (Name);
-    L->Hash  = Hash;
-    L->Owner = 0;
-    InitCollection (&L->JumpFrom);
-
-    /* Return the new label */
-    return L;
-}
-
-
-
-void FreeCodeLabel (CodeLabel* L)
-/* Free the given code label */
-{
-    /* Free the name */
-    xfree (L->Name);
-
-    /* Free the collection */
-    DoneCollection (&L->JumpFrom);
-
-    /* Delete the struct */
-    xfree (L);
-}
-
-
-
-void CL_AddRef (CodeLabel* L, struct CodeEntry* E)
-/* Let the CodeEntry E reference the label L */
-{
-    /* The insn at E jumps to this label */
-    E->JumpTo = L;
-
-    /* Replace the code entry argument with the name of the new label */
-    CE_SetArg (E, L->Name);
-
-    /* Remember that in the label */
-    CollAppend (&L->JumpFrom, E);
-}
-
-
-
-void CL_MoveRefs (CodeLabel* OldLabel, CodeLabel* NewLabel)
-/* Move all references to OldLabel to point to NewLabel. OldLabel will have no
-** more references on return.
-*/
-{
-    /* Walk through all instructions referencing the old label */
-    unsigned Count = CL_GetRefCount (OldLabel);
-    while (Count--) {
-
-        /* Get the instruction that references the old label */
-        CodeEntry* E = CL_GetRef (OldLabel, Count);
-
-        /* Change the reference to the new label */
-        CHECK (E->JumpTo == OldLabel);
-        CL_AddRef (NewLabel, E);
-
-    }
-
-    /* There are no more references to the old label */
-    CollDeleteAll (&OldLabel->JumpFrom);
-}
-
-
-
-void CL_Output (const CodeLabel* L)
-/* Output the code label to the output file */
-{
-    WriteOutput ("%s:", L->Name);
-    if (strlen (L->Name) > 6) {
-        /* Label is too long, add a linefeed */
-        WriteOutput ("\n");
-    }
-}
diff --git a/src/cc65/codelab.h b/src/cc65/codelab.h
deleted file mode 100644 (file)
index 103049b..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 codelab.h                                 */
-/*                                                                           */
-/*                           Code label structure                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef CODELAB_H
-#define CODELAB_H
-
-
-
-/* common */
-#include "coll.h"
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-struct CodeEntry;
-
-
-
-/*****************************************************************************/
-/*                             struct CodeLabel                              */
-/*****************************************************************************/
-
-
-
-/* Label structure */
-typedef struct CodeLabel CodeLabel;
-struct CodeLabel {
-    CodeLabel*          Next;           /* Next in hash list */
-    char*               Name;           /* Label name */
-    unsigned            Hash;           /* Hash over the name */
-    struct CodeEntry*   Owner;          /* Owner entry */
-    Collection          JumpFrom;       /* Entries that jump here */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-CodeLabel* NewCodeLabel (const char* Name, unsigned Hash);
-/* Create a new code label, initialize and return it */
-
-void FreeCodeLabel (CodeLabel* L);
-/* Free the given code label */
-
-#if defined(HAVE_INLINE)
-INLINE unsigned CL_GetRefCount (const CodeLabel* L)
-/* Get the number of references for this label */
-{
-    return CollCount (&L->JumpFrom);
-}
-#else
-#  define CL_GetRefCount(L)     CollCount (&(L)->JumpFrom)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE struct CodeEntry* CL_GetRef (CodeLabel* L, unsigned Index)
-/* Get a code entry referencing this label */
-{
-    return CollAt (&L->JumpFrom, Index);
-}
-#else
-#  define CL_GetRef(L, Index)   CollAt (&(L)->JumpFrom, (Index))
-#endif
-
-void CL_AddRef (CodeLabel* L, struct CodeEntry* E);
-/* Let the CodeEntry E reference the label L */
-
-void CL_MoveRefs (CodeLabel* OldLabel, CodeLabel* NewLabel);
-/* Move all references to OldLabel to point to NewLabel. OldLabel will have no
-** more references on return.
-*/
-
-void CL_Output (const CodeLabel* L);
-/* Output the code label to the output file */
-
-
-
-/* End of codelab.h */
-
-#endif
diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c
deleted file mode 100644 (file)
index 9eb1751..0000000
+++ /dev/null
@@ -1,1434 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 codeopt.c                                 */
-/*                                                                           */
-/*                           Optimizer subroutines                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-
-/* common */
-#include "abend.h"
-#include "chartype.h"
-#include "cpu.h"
-#include "debugflag.h"
-#include "print.h"
-#include "strbuf.h"
-#include "xmalloc.h"
-#include "xsprintf.h"
-
-/* cc65 */
-#include "asmlabel.h"
-#include "codeent.h"
-#include "codeinfo.h"
-#include "codeopt.h"
-#include "coptadd.h"
-#include "coptc02.h"
-#include "coptcmp.h"
-#include "coptind.h"
-#include "coptneg.h"
-#include "coptptrload.h"
-#include "coptptrstore.h"
-#include "coptpush.h"
-#include "coptshift.h"
-#include "coptsize.h"
-#include "coptstop.h"
-#include "coptstore.h"
-#include "coptsub.h"
-#include "copttest.h"
-#include "error.h"
-#include "global.h"
-#include "output.h"
-
-
-
-/*****************************************************************************/
-/*                              Optimize loads                               */
-/*****************************************************************************/
-
-
-
-static unsigned OptLoad1 (CodeSeg* S)
-/* Search for a call to ldaxysp where X is not used later and replace it by
-** a load of just the A register.
-*/
-{
-    unsigned I;
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* E;
-
-        /* Get next entry */
-        E = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (CE_IsCallTo (E, "ldaxysp")          &&
-            RegValIsKnown (E->RI->In.RegY)      &&
-            !RegXUsed (S, I+1)) {
-
-            CodeEntry* X;
-
-            /* Reload the Y register */
-            const char* Arg = MakeHexArg (E->RI->In.RegY - 1);
-            X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
-            CS_InsertEntry (S, X, I+1);
-
-            /* Load from stack */
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, E->LI);
-            CS_InsertEntry (S, X, I+2);
-
-            /* Now remove the call to the subroutine */
-            CS_DelEntry (S, I);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-static unsigned OptLoad2 (CodeSeg* S)
-/* Replace calls to ldaxysp by inline code */
-{
-    unsigned I;
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[3];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (CE_IsCallTo (L[0], "ldaxysp")) {
-
-            CodeEntry* X;
-
-            /* Followed by sta abs/stx abs? */
-            if (CS_GetEntries (S, L+1, I+1, 2)                  &&
-                L[1]->OPC == OP65_STA                           &&
-                L[2]->OPC == OP65_STX                           &&
-                (L[1]->Arg == 0                         ||
-                 L[2]->Arg == 0                         ||
-                 strcmp (L[1]->Arg, L[2]->Arg) != 0)            &&
-                !CS_RangeHasLabel (S, I+1, 2)                   &&
-                !RegXUsed (S, I+3)) {
-
-                /* A/X are stored into memory somewhere and X is not used
-                ** later
-                */
-
-                /* lda (sp),y */
-                X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[0]->LI);
-                CS_InsertEntry (S, X, I+3);
-
-                /* sta abs */
-                X = NewCodeEntry (OP65_STA, L[2]->AM, L[2]->Arg, 0, L[2]->LI);
-                CS_InsertEntry (S, X, I+4);
-
-                /* dey */
-                X = NewCodeEntry (OP65_DEY, AM65_IMP, 0, 0, L[0]->LI);
-                CS_InsertEntry (S, X, I+5);
-
-                /* lda (sp),y */
-                X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[0]->LI);
-                CS_InsertEntry (S, X, I+6);
-
-                /* sta abs */
-                X = NewCodeEntry (OP65_STA, L[1]->AM, L[1]->Arg, 0, L[1]->LI);
-                CS_InsertEntry (S, X, I+7);
-
-                /* Now remove the call to the subroutine and the sta/stx */
-                CS_DelEntries (S, I, 3);
-
-            } else {
-
-                /* Standard replacement */
-
-                /* lda (sp),y */
-                X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[0]->LI);
-                CS_InsertEntry (S, X, I+1);
-
-                /* tax */
-                X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, L[0]->LI);
-                CS_InsertEntry (S, X, I+2);
-
-                /* dey */
-                X = NewCodeEntry (OP65_DEY, AM65_IMP, 0, 0, L[0]->LI);
-                CS_InsertEntry (S, X, I+3);
-
-                /* lda (sp),y */
-                X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[0]->LI);
-                CS_InsertEntry (S, X, I+4);
-
-                /* Now remove the call to the subroutine */
-                CS_DelEntry (S, I);
-
-            }
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-static unsigned OptLoad3 (CodeSeg* S)
-/* Remove repeated loads from one and the same memory location */
-{
-    unsigned Changes = 0;
-    CodeEntry* Load = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Forget a preceeding load if we have a label */
-        if (Load && CE_HasLabel (E)) {
-            Load = 0;
-        }
-
-        /* Check if this insn is a load */
-        if (E->Info & OF_LOAD) {
-
-            CodeEntry* N;
-
-            /* If we had a preceeding load that is identical, remove this one.
-            ** If it is not identical, or we didn't have one, remember it.
-            */
-            if (Load != 0                               &&
-                E->OPC == Load->OPC                     &&
-                E->AM == Load->AM                       &&
-                ((E->Arg == 0 && Load->Arg == 0) ||
-                 strcmp (E->Arg, Load->Arg) == 0)       &&
-                (N = CS_GetNextEntry (S, I)) != 0       &&
-                (N->Info & OF_CBRA) == 0) {
-
-                /* Now remove the call to the subroutine */
-                CS_DelEntry (S, I);
-
-                /* Remember, we had changes */
-                ++Changes;
-
-                /* Next insn */
-                continue;
-
-            } else {
-
-                Load = E;
-
-            }
-
-        } else if ((E->Info & OF_CMP) == 0 && (E->Info & OF_CBRA) == 0) {
-            /* Forget the first load on occurance of any insn we don't like */
-            Load = 0;
-        }
-
-        /* Next entry */
-        ++I;
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-/*****************************************************************************/
-/*                            Decouple operations                            */
-/*****************************************************************************/
-
-
-
-static unsigned OptDecouple (CodeSeg* S)
-/* Decouple operations, that is, do the following replacements:
-**
-**   dex        -> ldx #imm
-**   inx        -> ldx #imm
-**   dey        -> ldy #imm
-**   iny        -> ldy #imm
-**   tax        -> ldx #imm
-**   txa        -> lda #imm
-**   tay        -> ldy #imm
-**   tya        -> lda #imm
-**   lda zp     -> lda #imm
-**   ldx zp     -> ldx #imm
-**   ldy zp     -> ldy #imm
-**
-** Provided that the register values are known of course.
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        const char* Arg;
-
-        /* Get next entry and it's input register values */
-        CodeEntry* E = CS_GetEntry (S, I);
-        const RegContents* In = &E->RI->In;
-
-        /* Assume we have no replacement */
-        CodeEntry* X = 0;
-
-        /* Check the instruction */
-        switch (E->OPC) {
-
-            case OP65_DEA:
-                if (RegValIsKnown (In->RegA)) {
-                    Arg = MakeHexArg ((In->RegA - 1) & 0xFF);
-                    X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
-                }
-                break;
-
-            case OP65_DEX:
-                if (RegValIsKnown (In->RegX)) {
-                    Arg = MakeHexArg ((In->RegX - 1) & 0xFF);
-                    X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
-                }
-                break;
-
-            case OP65_DEY:
-                if (RegValIsKnown (In->RegY)) {
-                    Arg = MakeHexArg ((In->RegY - 1) & 0xFF);
-                    X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
-                }
-                break;
-
-            case OP65_INA:
-                if (RegValIsKnown (In->RegA)) {
-                    Arg = MakeHexArg ((In->RegA + 1) & 0xFF);
-                    X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
-                }
-                break;
-
-            case OP65_INX:
-                if (RegValIsKnown (In->RegX)) {
-                    Arg = MakeHexArg ((In->RegX + 1) & 0xFF);
-                    X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
-                }
-                break;
-
-            case OP65_INY:
-                if (RegValIsKnown (In->RegY)) {
-                    Arg = MakeHexArg ((In->RegY + 1) & 0xFF);
-                    X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
-                }
-                break;
-
-            case OP65_LDA:
-                if (E->AM == AM65_ZP) {
-                    switch (GetKnownReg (E->Use & REG_ZP, In)) {
-                        case REG_TMP1:
-                            Arg = MakeHexArg (In->Tmp1);
-                            X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
-                            break;
-
-                        case REG_PTR1_LO:
-                            Arg = MakeHexArg (In->Ptr1Lo);
-                            X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
-                            break;
-
-                        case REG_PTR1_HI:
-                            Arg = MakeHexArg (In->Ptr1Hi);
-                            X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
-                            break;
-
-                        case REG_SREG_LO:
-                            Arg = MakeHexArg (In->SRegLo);
-                            X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
-                            break;
-
-                        case REG_SREG_HI:
-                            Arg = MakeHexArg (In->SRegHi);
-                            X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
-                            break;
-                    }
-                }
-                break;
-
-            case OP65_LDX:
-                if (E->AM == AM65_ZP) {
-                    switch (GetKnownReg (E->Use & REG_ZP, In)) {
-                        case REG_TMP1:
-                            Arg = MakeHexArg (In->Tmp1);
-                            X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
-                            break;
-
-                        case REG_PTR1_LO:
-                            Arg = MakeHexArg (In->Ptr1Lo);
-                            X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
-                            break;
-
-                        case REG_PTR1_HI:
-                            Arg = MakeHexArg (In->Ptr1Hi);
-                            X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
-                            break;
-
-                        case REG_SREG_LO:
-                            Arg = MakeHexArg (In->SRegLo);
-                            X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
-                            break;
-
-                        case REG_SREG_HI:
-                            Arg = MakeHexArg (In->SRegHi);
-                            X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
-                            break;
-                    }
-                }
-                break;
-
-            case OP65_LDY:
-                if (E->AM == AM65_ZP) {
-                    switch (GetKnownReg (E->Use, In)) {
-                        case REG_TMP1:
-                            Arg = MakeHexArg (In->Tmp1);
-                            X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
-                            break;
-
-                        case REG_PTR1_LO:
-                            Arg = MakeHexArg (In->Ptr1Lo);
-                            X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
-                            break;
-
-                        case REG_PTR1_HI:
-                            Arg = MakeHexArg (In->Ptr1Hi);
-                            X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
-                            break;
-
-                        case REG_SREG_LO:
-                            Arg = MakeHexArg (In->SRegLo);
-                            X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
-                            break;
-
-                        case REG_SREG_HI:
-                            Arg = MakeHexArg (In->SRegHi);
-                            X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
-                            break;
-                    }
-                }
-                break;
-
-            case OP65_TAX:
-                if (E->RI->In.RegA >= 0) {
-                    Arg = MakeHexArg (In->RegA);
-                    X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
-                }
-                break;
-
-            case OP65_TAY:
-                if (E->RI->In.RegA >= 0) {
-                    Arg = MakeHexArg (In->RegA);
-                    X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
-                }
-                break;
-
-            case OP65_TXA:
-                if (E->RI->In.RegX >= 0) {
-                    Arg = MakeHexArg (In->RegX);
-                    X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
-                }
-                break;
-
-            case OP65_TYA:
-                if (E->RI->In.RegY >= 0) {
-                    Arg = MakeHexArg (In->RegY);
-                    X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
-                }
-                break;
-
-            default:
-                /* Avoid gcc warnings */
-                break;
-
-        }
-
-        /* Insert the replacement if we have one */
-        if (X) {
-            CS_InsertEntry (S, X, I+1);
-            CS_DelEntry (S, I);
-            ++Changes;
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-/*****************************************************************************/
-/*                        Optimize stack pointer ops                         */
-/*****************************************************************************/
-
-
-
-static unsigned IsDecSP (const CodeEntry* E)
-/* Check if this is an insn that decrements the stack pointer. If so, return
-** the decrement. If not, return zero.
-** The function expects E to be a subroutine call.
-*/
-{
-    if (strncmp (E->Arg, "decsp", 5) == 0) {
-        if (E->Arg[5] >= '1' && E->Arg[5] <= '8') {
-            return (E->Arg[5] - '0');
-        }
-    } else if (strcmp (E->Arg, "subysp") == 0 && RegValIsKnown (E->RI->In.RegY)) {
-        return E->RI->In.RegY;
-    }
-
-    /* If we come here, it's not a decsp op */
-    return 0;
-}
-
-
-
-static unsigned OptStackPtrOps (CodeSeg* S)
-/* Merge adjacent calls to decsp into one. NOTE: This function won't merge all
-** known cases!
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        unsigned Dec1;
-        unsigned Dec2;
-        const CodeEntry* N;
-
-        /* Get the next entry */
-        const CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for decspn or subysp */
-        if (E->OPC == OP65_JSR                          &&
-            (Dec1 = IsDecSP (E)) > 0                    &&
-            (N = CS_GetNextEntry (S, I)) != 0           &&
-            (Dec2 = IsDecSP (N)) > 0                    &&
-            (Dec1 += Dec2) <= 255                       &&
-            !CE_HasLabel (N)) {
-
-            CodeEntry* X;
-            char Buf[20];
-
-            /* We can combine the two */
-            if (Dec1 <= 8) {
-                /* Insert a call to decsp */
-                xsprintf (Buf, sizeof (Buf), "decsp%u", Dec1);
-                X = NewCodeEntry (OP65_JSR, AM65_ABS, Buf, 0, N->LI);
-                CS_InsertEntry (S, X, I+2);
-            } else {
-                /* Insert a call to subysp */
-                const char* Arg = MakeHexArg (Dec1);
-                X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, N->LI);
-                CS_InsertEntry (S, X, I+2);
-                X = NewCodeEntry (OP65_JSR, AM65_ABS, "subysp", 0, N->LI);
-                CS_InsertEntry (S, X, I+3);
-            }
-
-            /* Delete the old code */
-            CS_DelEntries (S, I, 2);
-
-            /* Regenerate register info */
-            CS_GenRegInfo (S);
-
-            /* Remember we had changes */
-            ++Changes;
-
-        } else {
-
-            /* Next entry */
-            ++I;
-        }
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-/*****************************************************************************/
-/*                              struct OptFunc                               */
-/*****************************************************************************/
-
-
-
-typedef struct OptFunc OptFunc;
-struct OptFunc {
-    unsigned       (*Func) (CodeSeg*);  /* Optimizer function */
-    const char*    Name;                /* Name of the function/group */
-    unsigned       CodeSizeFactor;      /* Code size factor for this opt func */
-    unsigned long  TotalRuns;           /* Total number of runs */
-    unsigned long  LastRuns;            /* Last number of runs */
-    unsigned long  TotalChanges;        /* Total number of changes */
-    unsigned long  LastChanges;         /* Last number of changes */
-    char           Disabled;            /* True if function disabled */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-/* A list of all the function descriptions */
-static OptFunc DOpt65C02BitOps  = { Opt65C02BitOps,  "Opt65C02BitOps",   66, 0, 0, 0, 0, 0 };
-static OptFunc DOpt65C02Ind     = { Opt65C02Ind,     "Opt65C02Ind",     100, 0, 0, 0, 0, 0 };
-static OptFunc DOpt65C02Stores  = { Opt65C02Stores,  "Opt65C02Stores",  100, 0, 0, 0, 0, 0 };
-static OptFunc DOptAdd1         = { OptAdd1,         "OptAdd1",         125, 0, 0, 0, 0, 0 };
-static OptFunc DOptAdd2         = { OptAdd2,         "OptAdd2",         200, 0, 0, 0, 0, 0 };
-static OptFunc DOptAdd3         = { OptAdd3,         "OptAdd3",          65, 0, 0, 0, 0, 0 };
-static OptFunc DOptAdd4         = { OptAdd4,         "OptAdd4",          90, 0, 0, 0, 0, 0 };
-static OptFunc DOptAdd5         = { OptAdd5,         "OptAdd5",         100, 0, 0, 0, 0, 0 };
-static OptFunc DOptAdd6         = { OptAdd6,         "OptAdd6",          40, 0, 0, 0, 0, 0 };
-static OptFunc DOptBNegA1       = { OptBNegA1,       "OptBNegA1",       100, 0, 0, 0, 0, 0 };
-static OptFunc DOptBNegA2       = { OptBNegA2,       "OptBNegA2",       100, 0, 0, 0, 0, 0 };
-static OptFunc DOptBNegAX1      = { OptBNegAX1,      "OptBNegAX1",      100, 0, 0, 0, 0, 0 };
-static OptFunc DOptBNegAX2      = { OptBNegAX2,      "OptBNegAX2",      100, 0, 0, 0, 0, 0 };
-static OptFunc DOptBNegAX3      = { OptBNegAX3,      "OptBNegAX3",      100, 0, 0, 0, 0, 0 };
-static OptFunc DOptBNegAX4      = { OptBNegAX4,      "OptBNegAX4",      100, 0, 0, 0, 0, 0 };
-static OptFunc DOptBoolTrans    = { OptBoolTrans,    "OptBoolTrans",    100, 0, 0, 0, 0, 0 };
-static OptFunc DOptBranchDist   = { OptBranchDist,   "OptBranchDist",     0, 0, 0, 0, 0, 0 };
-static OptFunc DOptCmp1         = { OptCmp1,         "OptCmp1",          42, 0, 0, 0, 0, 0 };
-static OptFunc DOptCmp2         = { OptCmp2,         "OptCmp2",          85, 0, 0, 0, 0, 0 };
-static OptFunc DOptCmp3         = { OptCmp3,         "OptCmp3",          75, 0, 0, 0, 0, 0 };
-static OptFunc DOptCmp4         = { OptCmp4,         "OptCmp4",          75, 0, 0, 0, 0, 0 };
-static OptFunc DOptCmp5         = { OptCmp5,         "OptCmp5",         100, 0, 0, 0, 0, 0 };
-static OptFunc DOptCmp6         = { OptCmp6,         "OptCmp6",         100, 0, 0, 0, 0, 0 };
-static OptFunc DOptCmp7         = { OptCmp7,         "OptCmp7",          85, 0, 0, 0, 0, 0 };
-static OptFunc DOptCmp8         = { OptCmp8,         "OptCmp8",          50, 0, 0, 0, 0, 0 };
-static OptFunc DOptCmp9         = { OptCmp9,         "OptCmp9",          85, 0, 0, 0, 0, 0 };
-static OptFunc DOptComplAX1     = { OptComplAX1,     "OptComplAX1",      65, 0, 0, 0, 0, 0 };
-static OptFunc DOptCondBranches1= { OptCondBranches1,"OptCondBranches1", 80, 0, 0, 0, 0, 0 };
-static OptFunc DOptCondBranches2= { OptCondBranches2,"OptCondBranches2",  0, 0, 0, 0, 0, 0 };
-static OptFunc DOptDeadCode     = { OptDeadCode,     "OptDeadCode",     100, 0, 0, 0, 0, 0 };
-static OptFunc DOptDeadJumps    = { OptDeadJumps,    "OptDeadJumps",    100, 0, 0, 0, 0, 0 };
-static OptFunc DOptDecouple     = { OptDecouple,     "OptDecouple",     100, 0, 0, 0, 0, 0 };
-static OptFunc DOptDupLoads     = { OptDupLoads,     "OptDupLoads",       0, 0, 0, 0, 0, 0 };
-static OptFunc DOptIndLoads1    = { OptIndLoads1,    "OptIndLoads1",      0, 0, 0, 0, 0, 0 };
-static OptFunc DOptIndLoads2    = { OptIndLoads2,    "OptIndLoads2",      0, 0, 0, 0, 0, 0 };
-static OptFunc DOptJumpCascades = { OptJumpCascades, "OptJumpCascades", 100, 0, 0, 0, 0, 0 };
-static OptFunc DOptJumpTarget1  = { OptJumpTarget1,  "OptJumpTarget1",  100, 0, 0, 0, 0, 0 };
-static OptFunc DOptJumpTarget2  = { OptJumpTarget2,  "OptJumpTarget2",  100, 0, 0, 0, 0, 0 };
-static OptFunc DOptJumpTarget3  = { OptJumpTarget3,  "OptJumpTarget3",  100, 0, 0, 0, 0, 0 };
-static OptFunc DOptLoad1        = { OptLoad1,        "OptLoad1",        100, 0, 0, 0, 0, 0 };
-static OptFunc DOptLoad2        = { OptLoad2,        "OptLoad2",        200, 0, 0, 0, 0, 0 };
-static OptFunc DOptLoad3        = { OptLoad3,        "OptLoad3",          0, 0, 0, 0, 0, 0 };
-static OptFunc DOptNegAX1       = { OptNegAX1,       "OptNegAX1",       165, 0, 0, 0, 0, 0 };
-static OptFunc DOptNegAX2       = { OptNegAX2,       "OptNegAX2",       200, 0, 0, 0, 0, 0 };
-static OptFunc DOptRTS          = { OptRTS,          "OptRTS",          100, 0, 0, 0, 0, 0 };
-static OptFunc DOptRTSJumps1    = { OptRTSJumps1,    "OptRTSJumps1",    100, 0, 0, 0, 0, 0 };
-static OptFunc DOptRTSJumps2    = { OptRTSJumps2,    "OptRTSJumps2",    100, 0, 0, 0, 0, 0 };
-static OptFunc DOptPrecalc      = { OptPrecalc,      "OptPrecalc",      100, 0, 0, 0, 0, 0 };
-static OptFunc DOptPtrLoad1     = { OptPtrLoad1,     "OptPtrLoad1",     100, 0, 0, 0, 0, 0 };
-static OptFunc DOptPtrLoad2     = { OptPtrLoad2,     "OptPtrLoad2",     100, 0, 0, 0, 0, 0 };
-static OptFunc DOptPtrLoad3     = { OptPtrLoad3,     "OptPtrLoad3",     100, 0, 0, 0, 0, 0 };
-static OptFunc DOptPtrLoad4     = { OptPtrLoad4,     "OptPtrLoad4",     100, 0, 0, 0, 0, 0 };
-static OptFunc DOptPtrLoad5     = { OptPtrLoad5,     "OptPtrLoad5",      50, 0, 0, 0, 0, 0 };
-static OptFunc DOptPtrLoad6     = { OptPtrLoad6,     "OptPtrLoad6",      60, 0, 0, 0, 0, 0 };
-static OptFunc DOptPtrLoad7     = { OptPtrLoad7,     "OptPtrLoad7",     140, 0, 0, 0, 0, 0 };
-static OptFunc DOptPtrLoad11    = { OptPtrLoad11,    "OptPtrLoad11",     92, 0, 0, 0, 0, 0 };
-static OptFunc DOptPtrLoad12    = { OptPtrLoad12,    "OptPtrLoad12",     50, 0, 0, 0, 0, 0 };
-static OptFunc DOptPtrLoad13    = { OptPtrLoad13,    "OptPtrLoad13",     65, 0, 0, 0, 0, 0 };
-static OptFunc DOptPtrLoad14    = { OptPtrLoad14,    "OptPtrLoad14",    108, 0, 0, 0, 0, 0 };
-static OptFunc DOptPtrLoad15    = { OptPtrLoad15,    "OptPtrLoad15",     86, 0, 0, 0, 0, 0 };
-static OptFunc DOptPtrLoad16    = { OptPtrLoad16,    "OptPtrLoad16",    100, 0, 0, 0, 0, 0 };
-static OptFunc DOptPtrLoad17    = { OptPtrLoad17,    "OptPtrLoad17",    190, 0, 0, 0, 0, 0 };
-static OptFunc DOptPtrStore1    = { OptPtrStore1,    "OptPtrStore1",     65, 0, 0, 0, 0, 0 };
-static OptFunc DOptPtrStore2    = { OptPtrStore2,    "OptPtrStore2",     65, 0, 0, 0, 0, 0 };
-static OptFunc DOptPtrStore3    = { OptPtrStore3,    "OptPtrStore3",    100, 0, 0, 0, 0, 0 };
-static OptFunc DOptPush1        = { OptPush1,        "OptPush1",         65, 0, 0, 0, 0, 0 };
-static OptFunc DOptPush2        = { OptPush2,        "OptPush2",         50, 0, 0, 0, 0, 0 };
-static OptFunc DOptPushPop      = { OptPushPop,      "OptPushPop",        0, 0, 0, 0, 0, 0 };
-static OptFunc DOptShift1       = { OptShift1,       "OptShift1",       100, 0, 0, 0, 0, 0 };
-static OptFunc DOptShift2       = { OptShift2,       "OptShift2",       100, 0, 0, 0, 0, 0 };
-static OptFunc DOptShift3       = { OptShift3,       "OptShift3",        17, 0, 0, 0, 0, 0 };
-static OptFunc DOptShift4       = { OptShift4,       "OptShift4",       100, 0, 0, 0, 0, 0 };
-static OptFunc DOptShift5       = { OptShift5,       "OptShift5",       110, 0, 0, 0, 0, 0 };
-static OptFunc DOptShift6       = { OptShift6,       "OptShift6",       200, 0, 0, 0, 0, 0 };
-static OptFunc DOptSize1        = { OptSize1,        "OptSize1",        100, 0, 0, 0, 0, 0 };
-static OptFunc DOptSize2        = { OptSize2,        "OptSize2",        100, 0, 0, 0, 0, 0 };
-static OptFunc DOptStackOps     = { OptStackOps,     "OptStackOps",     100, 0, 0, 0, 0, 0 };
-static OptFunc DOptStackPtrOps  = { OptStackPtrOps,  "OptStackPtrOps",   50, 0, 0, 0, 0, 0 };
-static OptFunc DOptStore1       = { OptStore1,       "OptStore1",        70, 0, 0, 0, 0, 0 };
-static OptFunc DOptStore2       = { OptStore2,       "OptStore2",       115, 0, 0, 0, 0, 0 };
-static OptFunc DOptStore3       = { OptStore3,       "OptStore3",       120, 0, 0, 0, 0, 0 };
-static OptFunc DOptStore4       = { OptStore4,       "OptStore4",        50, 0, 0, 0, 0, 0 };
-static OptFunc DOptStore5       = { OptStore5,       "OptStore5",       100, 0, 0, 0, 0, 0 };
-static OptFunc DOptStoreLoad    = { OptStoreLoad,    "OptStoreLoad",      0, 0, 0, 0, 0, 0 };
-static OptFunc DOptSub1         = { OptSub1,         "OptSub1",         100, 0, 0, 0, 0, 0 };
-static OptFunc DOptSub2         = { OptSub2,         "OptSub2",         100, 0, 0, 0, 0, 0 };
-static OptFunc DOptSub3         = { OptSub3,         "OptSub3",         100, 0, 0, 0, 0, 0 };
-static OptFunc DOptTest1        = { OptTest1,        "OptTest1",         65, 0, 0, 0, 0, 0 };
-static OptFunc DOptTest2        = { OptTest2,        "OptTest2",         50, 0, 0, 0, 0, 0 };
-static OptFunc DOptTransfers1   = { OptTransfers1,   "OptTransfers1",     0, 0, 0, 0, 0, 0 };
-static OptFunc DOptTransfers2   = { OptTransfers2,   "OptTransfers2",    60, 0, 0, 0, 0, 0 };
-static OptFunc DOptTransfers3   = { OptTransfers3,   "OptTransfers3",    65, 0, 0, 0, 0, 0 };
-static OptFunc DOptTransfers4   = { OptTransfers4,   "OptTransfers4",    65, 0, 0, 0, 0, 0 };
-static OptFunc DOptUnusedLoads  = { OptUnusedLoads,  "OptUnusedLoads",    0, 0, 0, 0, 0, 0 };
-static OptFunc DOptUnusedStores = { OptUnusedStores, "OptUnusedStores",   0, 0, 0, 0, 0, 0 };
-
-
-/* Table containing all the steps in alphabetical order */
-static OptFunc* OptFuncs[] = {
-    &DOpt65C02BitOps,
-    &DOpt65C02Ind,
-    &DOpt65C02Stores,
-    &DOptAdd1,
-    &DOptAdd2,
-    &DOptAdd3,
-    &DOptAdd4,
-    &DOptAdd5,
-    &DOptAdd6,
-    &DOptBNegA1,
-    &DOptBNegA2,
-    &DOptBNegAX1,
-    &DOptBNegAX2,
-    &DOptBNegAX3,
-    &DOptBNegAX4,
-    &DOptBoolTrans,
-    &DOptBranchDist,
-    &DOptCmp1,
-    &DOptCmp2,
-    &DOptCmp3,
-    &DOptCmp4,
-    &DOptCmp5,
-    &DOptCmp6,
-    &DOptCmp7,
-    &DOptCmp8,
-    &DOptCmp9,
-    &DOptComplAX1,
-    &DOptCondBranches1,
-    &DOptCondBranches2,
-    &DOptDeadCode,
-    &DOptDeadJumps,
-    &DOptDecouple,
-    &DOptDupLoads,
-    &DOptIndLoads1,
-    &DOptIndLoads2,
-    &DOptJumpCascades,
-    &DOptJumpTarget1,
-    &DOptJumpTarget2,
-    &DOptJumpTarget3,
-    &DOptLoad1,
-    &DOptLoad2,
-    &DOptLoad3,
-    &DOptNegAX1,
-    &DOptNegAX2,
-    &DOptPrecalc,
-    &DOptPtrLoad1,
-    &DOptPtrLoad11,
-    &DOptPtrLoad12,
-    &DOptPtrLoad13,
-    &DOptPtrLoad14,
-    &DOptPtrLoad15,
-    &DOptPtrLoad16,
-    &DOptPtrLoad17,
-    &DOptPtrLoad2,
-    &DOptPtrLoad3,
-    &DOptPtrLoad4,
-    &DOptPtrLoad5,
-    &DOptPtrLoad6,
-    &DOptPtrLoad7,
-    &DOptPtrStore1,
-    &DOptPtrStore2,
-    &DOptPtrStore3,
-    &DOptPush1,
-    &DOptPush2,
-    &DOptPushPop,
-    &DOptRTS,
-    &DOptRTSJumps1,
-    &DOptRTSJumps2,
-    &DOptShift1,
-    &DOptShift2,
-    &DOptShift3,
-    &DOptShift4,
-    &DOptShift5,
-    &DOptShift6,
-    &DOptSize1,
-    &DOptSize2,
-    &DOptStackOps,
-    &DOptStackPtrOps,
-    &DOptStore1,
-    &DOptStore2,
-    &DOptStore3,
-    &DOptStore4,
-    &DOptStore5,
-    &DOptStoreLoad,
-    &DOptSub1,
-    &DOptSub2,
-    &DOptSub3,
-    &DOptTest1,
-    &DOptTest2,
-    &DOptTransfers1,
-    &DOptTransfers2,
-    &DOptTransfers3,
-    &DOptTransfers4,
-    &DOptUnusedLoads,
-    &DOptUnusedStores,
-};
-#define OPTFUNC_COUNT  (sizeof(OptFuncs) / sizeof(OptFuncs[0]))
-
-
-
-static int CmpOptStep (const void* Key, const void* Func)
-/* Compare function for bsearch */
-{
-    return strcmp (Key, (*(const OptFunc**)Func)->Name);
-}
-
-
-
-static OptFunc* FindOptFunc (const char* Name)
-/* Find an optimizer step by name in the table and return a pointer. Return
-** NULL if no such step is found.
-*/
-{
-    /* Search for the function in the list */
-    OptFunc** O = bsearch (Name, OptFuncs, OPTFUNC_COUNT, sizeof (OptFuncs[0]), CmpOptStep);
-    return O? *O : 0;
-}
-
-
-
-static OptFunc* GetOptFunc (const char* Name)
-/* Find an optimizer step by name in the table and return a pointer. Print an
-** error and call AbEnd if not found.
-*/
-{
-    /* Search for the function in the list */
-    OptFunc* F = FindOptFunc (Name);
-    if (F == 0) {
-        /* Not found */
-        AbEnd ("Optimization step `%s' not found", Name);
-    }
-    return F;
-}
-
-
-
-void DisableOpt (const char* Name)
-/* Disable the optimization with the given name */
-{
-    if (strcmp (Name, "any") == 0) {
-        unsigned I;
-        for (I = 0; I < OPTFUNC_COUNT; ++I) {
-            OptFuncs[I]->Disabled = 1;
-        }
-    } else {
-        GetOptFunc(Name)->Disabled = 1;
-    }
-}
-
-
-
-void EnableOpt (const char* Name)
-/* Enable the optimization with the given name */
-{
-    if (strcmp (Name, "any") == 0) {
-        unsigned I;
-        for (I = 0; I < OPTFUNC_COUNT; ++I) {
-            OptFuncs[I]->Disabled = 0;
-        }
-    } else {
-        GetOptFunc(Name)->Disabled = 0;
-    }
-}
-
-
-
-void ListOptSteps (FILE* F)
-/* List all optimization steps */
-{
-    unsigned I;
-    for (I = 0; I < OPTFUNC_COUNT; ++I) {
-        fprintf (F, "%s\n", OptFuncs[I]->Name);
-    }
-}
-
-
-
-static void ReadOptStats (const char* Name)
-/* Read the optimizer statistics file */
-{
-    char Buf [256];
-    unsigned Lines;
-
-    /* Try to open the file */
-    FILE* F = fopen (Name, "r");
-    if (F == 0) {
-        /* Ignore the error */
-        return;
-    }
-
-    /* Read and parse the lines */
-    Lines = 0;
-    while (fgets (Buf, sizeof (Buf), F) != 0) {
-
-        char* B;
-        unsigned Len;
-        OptFunc* Func;
-
-        /* Fields */
-        char Name[32];
-        unsigned long  TotalRuns;
-        unsigned long  TotalChanges;
-
-        /* Count lines */
-        ++Lines;
-
-        /* Remove trailing white space including the line terminator */
-        B = Buf;
-        Len = strlen (B);
-        while (Len > 0 && IsSpace (B[Len-1])) {
-            --Len;
-        }
-        B[Len] = '\0';
-
-        /* Remove leading whitespace */
-        while (IsSpace (*B)) {
-            ++B;
-        }
-
-        /* Check for empty and comment lines */
-        if (*B == '\0' || *B == ';' || *B == '#') {
-            continue;
-        }
-
-        /* Parse the line */
-        if (sscanf (B, "%31s %lu %*u %lu %*u", Name, &TotalRuns, &TotalChanges) != 3) {
-            /* Syntax error */
-            continue;
-        }
-
-        /* Search for the optimizer step. */
-        Func = FindOptFunc (Name);
-        if (Func == 0) {
-            /* Not found */
-            continue;
-        }
-
-        /* Found the step, set the fields */
-        Func->TotalRuns    = TotalRuns;
-        Func->TotalChanges = TotalChanges;
-
-    }
-
-    /* Close the file, ignore errors here. */
-    fclose (F);
-}
-
-
-
-static void WriteOptStats (const char* Name)
-/* Write the optimizer statistics file */
-{
-    unsigned I;
-
-    /* Try to open the file */
-    FILE* F = fopen (Name, "w");
-    if (F == 0) {
-        /* Ignore the error */
-        return;
-    }
-
-    /* Write a header */
-    fprintf (F,
-             "; Optimizer               Total      Last       Total      Last\n"
-             ";   Step                  Runs       Runs        Chg       Chg\n");
-
-
-    /* Write the data */
-    for (I = 0; I < OPTFUNC_COUNT; ++I) {
-        const OptFunc* O = OptFuncs[I];
-        fprintf (F,
-                 "%-20s %10lu %10lu %10lu %10lu\n",
-                 O->Name,
-                 O->TotalRuns,
-                 O->LastRuns,
-                 O->TotalChanges,
-                 O->LastChanges);
-    }
-
-    /* Close the file, ignore errors here. */
-    fclose (F);
-}
-
-
-
-static void OpenDebugFile (const CodeSeg* S)
-/* Open the debug file for the given segment if the flag is on */
-{
-    if (DebugOptOutput) {
-        StrBuf Name = AUTO_STRBUF_INITIALIZER;
-        if (S->Func) {
-            SB_CopyStr (&Name, S->Func->Name);
-        } else {
-            SB_CopyStr (&Name, "global");
-        }
-        SB_AppendStr (&Name, ".opt");
-        SB_Terminate (&Name);
-        OpenDebugOutputFile (SB_GetConstBuf (&Name));
-        SB_Done (&Name);
-    }
-}
-
-
-
-static void WriteDebugOutput (CodeSeg* S, const char* Step)
-/* Write a separator line into the debug file if the flag is on */
-{
-    if (DebugOptOutput) {
-        /* Output a separator */
-        WriteOutput ("=========================================================================\n");
-
-        /* Output a header line */
-        if (Step == 0) {
-            /* Initial output */
-            WriteOutput ("Initial code for function `%s':\n",
-                         S->Func? S->Func->Name : "<global>");
-        } else {
-            WriteOutput ("Code after applying `%s':\n", Step);
-        }
-
-        /* Output the code segment */
-        CS_Output (S);
-    }
-}
-
-
-
-static unsigned RunOptFunc (CodeSeg* S, OptFunc* F, unsigned Max)
-/* Run one optimizer function Max times or until there are no more changes */
-{
-    unsigned Changes, C;
-
-    /* Don't run the function if it is disabled or if it is prohibited by the
-    ** code size factor
-    */
-    if (F->Disabled || F->CodeSizeFactor > S->CodeSizeFactor) {
-        return 0;
-    }
-
-    /* Run this until there are no more changes */
-    Changes = 0;
-    do {
-
-        /* Run the function */
-        C = F->Func (S);
-        Changes += C;
-
-        /* Do statistics */
-        ++F->TotalRuns;
-        ++F->LastRuns;
-        F->TotalChanges += C;
-        F->LastChanges  += C;
-
-        /* If we had changes, output stuff and regenerate register info */
-        if (C) {
-            if (Debug) {
-                printf ("Applied %s: %u changes\n", F->Name, C);
-            }
-            WriteDebugOutput (S, F->Name);
-            CS_GenRegInfo (S);
-        }
-
-    } while (--Max && C > 0);
-
-    /* Return the number of changes */
-    return Changes;
-}
-
-
-
-static unsigned RunOptGroup1 (CodeSeg* S)
-/* Run the first group of optimization steps. These steps translate known
-** patterns emitted by the code generator into more optimal patterns. Order
-** of the steps is important, because some of the steps done earlier cover
-** the same patterns as later steps as subpatterns.
-*/
-{
-    unsigned Changes = 0;
-
-    Changes += RunOptFunc (S, &DOptStackPtrOps, 5);
-    Changes += RunOptFunc (S, &DOptPtrStore1, 1);
-    Changes += RunOptFunc (S, &DOptPtrStore2, 1);
-    Changes += RunOptFunc (S, &DOptPtrStore3, 1);
-    Changes += RunOptFunc (S, &DOptAdd3, 1);    /* Before OptPtrLoad5! */
-    Changes += RunOptFunc (S, &DOptPtrLoad1, 1);
-    Changes += RunOptFunc (S, &DOptPtrLoad2, 1);
-    Changes += RunOptFunc (S, &DOptPtrLoad3, 1);
-    Changes += RunOptFunc (S, &DOptPtrLoad4, 1);
-    Changes += RunOptFunc (S, &DOptPtrLoad5, 1);
-    Changes += RunOptFunc (S, &DOptPtrLoad6, 1);
-    Changes += RunOptFunc (S, &DOptPtrLoad7, 1);
-    Changes += RunOptFunc (S, &DOptPtrLoad11, 1);
-    Changes += RunOptFunc (S, &DOptPtrLoad12, 1);
-    Changes += RunOptFunc (S, &DOptPtrLoad13, 1);
-    Changes += RunOptFunc (S, &DOptPtrLoad14, 1);
-    Changes += RunOptFunc (S, &DOptPtrLoad15, 1);
-    Changes += RunOptFunc (S, &DOptPtrLoad16, 1);
-    Changes += RunOptFunc (S, &DOptPtrLoad17, 1);
-    Changes += RunOptFunc (S, &DOptBNegAX1, 1);
-    Changes += RunOptFunc (S, &DOptBNegAX2, 1);
-    Changes += RunOptFunc (S, &DOptBNegAX3, 1);
-    Changes += RunOptFunc (S, &DOptBNegAX4, 1);
-    Changes += RunOptFunc (S, &DOptAdd1, 1);
-    Changes += RunOptFunc (S, &DOptAdd2, 1);
-    Changes += RunOptFunc (S, &DOptAdd4, 1);
-    Changes += RunOptFunc (S, &DOptAdd5, 1);
-    Changes += RunOptFunc (S, &DOptAdd6, 1);
-    Changes += RunOptFunc (S, &DOptSub1, 1);
-    Changes += RunOptFunc (S, &DOptSub3, 1);
-    Changes += RunOptFunc (S, &DOptStore4, 1);
-    Changes += RunOptFunc (S, &DOptStore5, 1);
-    Changes += RunOptFunc (S, &DOptShift1, 1);
-    Changes += RunOptFunc (S, &DOptShift2, 1);
-    Changes += RunOptFunc (S, &DOptShift5, 1);
-    Changes += RunOptFunc (S, &DOptShift6, 1);
-    Changes += RunOptFunc (S, &DOptStore1, 1);
-    Changes += RunOptFunc (S, &DOptStore2, 5);
-    Changes += RunOptFunc (S, &DOptStore3, 5);
-
-    /* Return the number of changes */
-    return Changes;
-}
-
-
-
-static unsigned RunOptGroup2 (CodeSeg* S)
-/* Run one group of optimization steps. This step involves just decoupling
-** instructions by replacing them by instructions that do not depend on
-** previous instructions. This makes it easier to find instructions that
-** aren't used.
-*/
-{
-    unsigned Changes = 0;
-
-    Changes += RunOptFunc (S, &DOptDecouple, 1);
-
-    /* Return the number of changes */
-    return Changes;
-}
-
-
-
-static unsigned RunOptGroup3 (CodeSeg* S)
-/* Run one group of optimization steps. These steps depend on each other,
-** that means that one step may allow another step to do additional work,
-** so we will repeat the steps as long as we see any changes.
-*/
-{
-    unsigned Changes, C;
-
-    Changes = 0;
-    do {
-        C = 0;
-
-        C += RunOptFunc (S, &DOptBNegA1, 1);
-        C += RunOptFunc (S, &DOptBNegA2, 1);
-        C += RunOptFunc (S, &DOptNegAX1, 1);
-        C += RunOptFunc (S, &DOptNegAX2, 1);
-        C += RunOptFunc (S, &DOptStackOps, 3);
-        C += RunOptFunc (S, &DOptShift1, 1);
-        C += RunOptFunc (S, &DOptShift4, 1);
-        C += RunOptFunc (S, &DOptComplAX1, 1);
-        C += RunOptFunc (S, &DOptSub1, 1);
-        C += RunOptFunc (S, &DOptSub2, 1);
-        C += RunOptFunc (S, &DOptSub3, 1);
-        C += RunOptFunc (S, &DOptAdd5, 1);
-        C += RunOptFunc (S, &DOptAdd6, 1);
-        C += RunOptFunc (S, &DOptJumpCascades, 1);
-        C += RunOptFunc (S, &DOptDeadJumps, 1);
-        C += RunOptFunc (S, &DOptRTS, 1);
-        C += RunOptFunc (S, &DOptDeadCode, 1);
-        C += RunOptFunc (S, &DOptBoolTrans, 1);
-        C += RunOptFunc (S, &DOptJumpTarget1, 1);
-        C += RunOptFunc (S, &DOptJumpTarget2, 1);
-        C += RunOptFunc (S, &DOptCondBranches1, 1);
-        C += RunOptFunc (S, &DOptCondBranches2, 1);
-        C += RunOptFunc (S, &DOptRTSJumps1, 1);
-        C += RunOptFunc (S, &DOptCmp1, 1);
-        C += RunOptFunc (S, &DOptCmp2, 1);
-        C += RunOptFunc (S, &DOptCmp8, 1);      /* Must run before OptCmp3 */
-        C += RunOptFunc (S, &DOptCmp3, 1);
-        C += RunOptFunc (S, &DOptCmp4, 1);
-        C += RunOptFunc (S, &DOptCmp5, 1);
-        C += RunOptFunc (S, &DOptCmp6, 1);
-        C += RunOptFunc (S, &DOptCmp7, 1);
-        C += RunOptFunc (S, &DOptCmp9, 1);
-        C += RunOptFunc (S, &DOptTest1, 1);
-        C += RunOptFunc (S, &DOptLoad1, 1);
-        C += RunOptFunc (S, &DOptJumpTarget3, 1);       /* After OptCondBranches2 */
-        C += RunOptFunc (S, &DOptUnusedLoads, 1);
-        C += RunOptFunc (S, &DOptUnusedStores, 1);
-        C += RunOptFunc (S, &DOptDupLoads, 1);
-        C += RunOptFunc (S, &DOptStoreLoad, 1);
-        C += RunOptFunc (S, &DOptTransfers1, 1);
-        C += RunOptFunc (S, &DOptTransfers3, 1);
-        C += RunOptFunc (S, &DOptTransfers4, 1);
-        C += RunOptFunc (S, &DOptStore1, 1);
-        C += RunOptFunc (S, &DOptStore5, 1);
-        C += RunOptFunc (S, &DOptPushPop, 1);
-        C += RunOptFunc (S, &DOptPrecalc, 1);
-
-        Changes += C;
-
-    } while (C);
-
-    /* Return the number of changes */
-    return Changes;
-}
-
-
-
-static unsigned RunOptGroup4 (CodeSeg* S)
-/* Run another round of pattern replacements. These are done late, since there
-** may be better replacements before.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Repeat some of the steps here */
-    Changes += RunOptFunc (S, &DOptShift3, 1);
-    Changes += RunOptFunc (S, &DOptPush1, 1);
-    Changes += RunOptFunc (S, &DOptPush2, 1);
-    Changes += RunOptFunc (S, &DOptUnusedLoads, 1);
-    Changes += RunOptFunc (S, &DOptTest2, 1);
-    Changes += RunOptFunc (S, &DOptTransfers2, 1);
-    Changes += RunOptFunc (S, &DOptLoad2, 1);
-    Changes += RunOptFunc (S, &DOptLoad3, 1);
-    Changes += RunOptFunc (S, &DOptDupLoads, 1);
-
-    /* Return the number of changes */
-    return Changes;
-}
-
-
-
-static unsigned RunOptGroup5 (CodeSeg* S)
-/* 65C02 specific optimizations. */
-{
-    unsigned Changes = 0;
-
-    if (CPUIsets[CPU] & CPU_ISET_65SC02) {
-        Changes += RunOptFunc (S, &DOpt65C02BitOps, 1);
-        Changes += RunOptFunc (S, &DOpt65C02Ind, 1);
-        Changes += RunOptFunc (S, &DOpt65C02Stores, 1);
-        if (Changes) {
-            /* The 65C02 replacement codes do often make the use of a register
-            ** value unnecessary, so if we have changes, run another load
-            ** removal pass.
-            */
-            Changes += RunOptFunc (S, &DOptUnusedLoads, 1);
-        }
-    }
-
-    /* Return the number of changes */
-    return Changes;
-}
-
-
-
-static unsigned RunOptGroup6 (CodeSeg* S)
-/* This one is quite special. It tries to replace "lda (sp),y" by "lda (sp,x)".
-** The latter is ony cycle slower, but if we're able to remove the necessary
-** load of the Y register, because X is zero anyway, we gain 1 cycle and
-** shorten the code by one (transfer) or two bytes (load). So what we do is
-** to replace the insns, remove unused loads, and then change back all insns
-** where Y is still zero (meaning that the load has not been removed).
-*/
-{
-    unsigned Changes = 0;
-
-    /* This group will only run for a standard 6502, because the 65C02 has a
-    ** better addressing mode that covers this case.
-    */
-    if ((CPUIsets[CPU] & CPU_ISET_65SC02) == 0) {
-        Changes += RunOptFunc (S, &DOptIndLoads1, 1);
-        Changes += RunOptFunc (S, &DOptUnusedLoads, 1);
-        Changes += RunOptFunc (S, &DOptIndLoads2, 1);
-    }
-
-    /* Return the number of changes */
-    return Changes;
-}
-
-
-
-static unsigned RunOptGroup7 (CodeSeg* S)
-/* The last group of optimization steps. Adjust branches, do size optimizations.
-*/
-{
-    unsigned Changes = 0;
-    unsigned C;
-
-    /* Optimize for size, that is replace operations by shorter ones, even
-    ** if this does hinder further optimizations (no problem since we're
-    ** done soon).
-    */
-    C = RunOptFunc (S, &DOptSize1, 1);
-    if (C) {
-        Changes += C;
-        /* Run some optimization passes again, since the size optimizations
-        ** may have opened new oportunities.
-        */
-        Changes += RunOptFunc (S, &DOptUnusedLoads, 1);
-        Changes += RunOptFunc (S, &DOptUnusedStores, 1);
-        Changes += RunOptFunc (S, &DOptJumpTarget1, 5);
-        Changes += RunOptFunc (S, &DOptStore5, 1);
-    }
-
-    C = RunOptFunc (S, &DOptSize2, 1);
-    if (C) {
-        Changes += C;
-        /* Run some optimization passes again, since the size optimizations
-        ** may have opened new oportunities.
-        */
-        Changes += RunOptFunc (S, &DOptUnusedLoads, 1);
-        Changes += RunOptFunc (S, &DOptJumpTarget1, 5);
-        Changes += RunOptFunc (S, &DOptStore5, 1);
-        Changes += RunOptFunc (S, &DOptTransfers1, 1);
-        Changes += RunOptFunc (S, &DOptTransfers3, 1);
-    }
-
-    /* Adjust branch distances */
-    Changes += RunOptFunc (S, &DOptBranchDist, 3);
-
-    /* Replace conditional branches to RTS. If we had changes, we must run dead
-    ** code elimination again, since the change may have introduced dead code.
-    */
-    C = RunOptFunc (S, &DOptRTSJumps2, 1);
-    Changes += C;
-    if (C) {
-        Changes += RunOptFunc (S, &DOptDeadCode, 1);
-    }
-
-    /* Return the number of changes */
-    return Changes;
-}
-
-
-
-void RunOpt (CodeSeg* S)
-/* Run the optimizer */
-{
-    const char* StatFileName;
-
-    /* If we shouldn't run the optimizer, bail out */
-    if (!S->Optimize) {
-        return;
-    }
-
-    /* Check if we are requested to write optimizer statistics */
-    StatFileName = getenv ("CC65_OPTSTATS");
-    if (StatFileName) {
-        ReadOptStats (StatFileName);
-    }
-
-    /* Print the name of the function we are working on */
-    if (S->Func) {
-        Print (stdout, 1, "Running optimizer for function `%s'\n", S->Func->Name);
-    } else {
-        Print (stdout, 1, "Running optimizer for global code segment\n");
-    }
-
-    /* If requested, open an output file */
-    OpenDebugFile (S);
-    WriteDebugOutput (S, 0);
-
-    /* Generate register info for all instructions */
-    CS_GenRegInfo (S);
-
-    /* Run groups of optimizations */
-    RunOptGroup1 (S);
-    RunOptGroup2 (S);
-    RunOptGroup3 (S);
-    RunOptGroup4 (S);
-    RunOptGroup5 (S);
-    RunOptGroup6 (S);
-    RunOptGroup7 (S);
-
-    /* Free register info */
-    CS_FreeRegInfo (S);
-
-    /* Close output file if necessary */
-    if (DebugOptOutput) {
-        CloseOutputFile ();
-    }
-
-    /* Write statistics */
-    if (StatFileName) {
-        WriteOptStats (StatFileName);
-    }
-}
diff --git a/src/cc65/codeopt.h b/src/cc65/codeopt.h
deleted file mode 100644 (file)
index e0bc837..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 codeopt.h                                 */
-/*                                                                           */
-/*                           Optimizer subroutines                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef CODEOPT_H
-#define CODEOPT_H
-
-
-
-/* cc65 */
-#include "codeseg.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void DisableOpt (const char* Name);
-/* Disable the optimization with the given name */
-
-void EnableOpt (const char* Name);
-/* Enable the optimization with the given name */
-
-void ListOptSteps (FILE* F);
-/* List all optimization steps */
-
-void RunOpt (CodeSeg* S);
-/* Run the optimizer */
-
-
-
-/* End of codeopt.h */
-
-#endif
diff --git a/src/cc65/codeseg.c b/src/cc65/codeseg.c
deleted file mode 100644 (file)
index a808a26..0000000
+++ /dev/null
@@ -1,1682 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 codeseg.c                                 */
-/*                                                                           */
-/*                          Code segment structure                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-#include <ctype.h>
-
-/* common */
-#include "chartype.h"
-#include "check.h"
-#include "debugflag.h"
-#include "global.h"
-#include "hashfunc.h"
-#include "strbuf.h"
-#include "strutil.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "asmlabel.h"
-#include "codeent.h"
-#include "codeinfo.h"
-#include "codeseg.h"
-#include "datatype.h"
-#include "error.h"
-#include "global.h"
-#include "ident.h"
-#include "output.h"
-#include "symentry.h"
-
-
-
-/*****************************************************************************/
-/*                             Helper functions                              */
-/*****************************************************************************/
-
-
-
-static void CS_PrintFunctionHeader (const CodeSeg* S)
-/* Print a comment with the function signature to the output file */
-{
-    /* Get the associated function */
-    const SymEntry* Func = S->Func;
-
-    /* If this is a global code segment, do nothing */
-    if (Func) {
-        WriteOutput ("; ---------------------------------------------------------------\n"
-                     "; ");
-        PrintFuncSig (OutputFile, Func->Name, Func->Type);
-        WriteOutput ("\n"
-                     "; ---------------------------------------------------------------\n"
-                     "\n");
-    }
-}
-
-
-
-static void CS_MoveLabelsToEntry (CodeSeg* S, CodeEntry* E)
-/* Move all labels from the label pool to the given entry and remove them
-** from the pool.
-*/
-{
-    /* Transfer the labels if we have any */
-    unsigned I;
-    unsigned LabelCount = CollCount (&S->Labels);
-    for (I = 0; I < LabelCount; ++I) {
-
-        /* Get the label */
-        CodeLabel* L = CollAt (&S->Labels, I);
-
-        /* Attach it to the entry */
-        CE_AttachLabel (E, L);
-    }
-
-    /* Delete the transfered labels */
-    CollDeleteAll (&S->Labels);
-}
-
-
-
-static void CS_MoveLabelsToPool (CodeSeg* S, CodeEntry* E)
-/* Move the labels of the code entry E to the label pool of the code segment */
-{
-    unsigned LabelCount = CE_GetLabelCount (E);
-    while (LabelCount--) {
-        CodeLabel* L = CE_GetLabel (E, LabelCount);
-        L->Owner = 0;
-        CollAppend (&S->Labels, L);
-    }
-    CollDeleteAll (&E->Labels);
-}
-
-
-
-static CodeLabel* CS_FindLabel (CodeSeg* S, const char* Name, unsigned Hash)
-/* Find the label with the given name. Return the label or NULL if not found */
-{
-    /* Get the first hash chain entry */
-    CodeLabel* L = S->LabelHash[Hash];
-
-    /* Search the list */
-    while (L) {
-        if (strcmp (Name, L->Name) == 0) {
-            /* Found */
-            break;
-        }
-        L = L->Next;
-    }
-    return L;
-}
-
-
-
-static CodeLabel* CS_NewCodeLabel (CodeSeg* S, const char* Name, unsigned Hash)
-/* Create a new label and insert it into the label hash table */
-{
-    /* Create a new label */
-    CodeLabel* L = NewCodeLabel (Name, Hash);
-
-    /* Enter the label into the hash table */
-    L->Next = S->LabelHash[L->Hash];
-    S->LabelHash[L->Hash] = L;
-
-    /* Return the new label */
-    return L;
-}
-
-
-
-static void CS_RemoveLabelFromHash (CodeSeg* S, CodeLabel* L)
-/* Remove the given code label from the hash list */
-{
-    /* Get the first entry in the hash chain */
-    CodeLabel* List = S->LabelHash[L->Hash];
-    CHECK (List != 0);
-
-    /* First, remove the label from the hash chain */
-    if (List == L) {
-        /* First entry in hash chain */
-        S->LabelHash[L->Hash] = L->Next;
-    } else {
-        /* Must search through the chain */
-        while (List->Next != L) {
-            /* If we've reached the end of the chain, something is *really* wrong */
-            CHECK (List->Next != 0);
-            /* Next entry */
-            List = List->Next;
-        }
-        /* The next entry is the one, we have been searching for */
-        List->Next = L->Next;
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                    Functions for parsing instructions                     */
-/*****************************************************************************/
-
-
-
-static const char* SkipSpace (const char* S)
-/* Skip white space and return an updated pointer */
-{
-    while (IsSpace (*S)) {
-        ++S;
-    }
-    return S;
-}
-
-
-
-static const char* ReadToken (const char* L, const char* Term,
-                              char* Buf, unsigned BufSize)
-/* Read the next token into Buf, return the updated line pointer. The
-** token is terminated by one of the characters given in term.
-*/
-{
-    /* Read/copy the token */
-    unsigned I = 0;
-    unsigned ParenCount = 0;
-    while (*L && (ParenCount > 0 || strchr (Term, *L) == 0)) {
-        if (I < BufSize-1) {
-            Buf[I] = *L;
-        } else if (I == BufSize-1) {
-            /* Cannot store this character, this is an input error (maybe
-            ** identifier too long or similar).
-            */
-            Error ("ASM code error: syntax error");
-        }
-        ++I;
-        if (*L == ')') {
-            --ParenCount;
-        } else if (*L == '(') {
-            ++ParenCount;
-        }
-        ++L;
-    }
-
-    /* Terminate the buffer contents */
-    Buf[I] = '\0';
-
-    /* Return the updated line pointer */
-    return L;
-}
-
-
-
-static CodeEntry* ParseInsn (CodeSeg* S, LineInfo* LI, const char* L)
-/* Parse an instruction nnd generate a code entry from it. If the line contains
-** errors, output an error message and return NULL.
-** For simplicity, we don't accept the broad range of input a "real" assembler
-** does. The instruction and the argument are expected to be separated by
-** white space, for example.
-*/
-{
-    char                Mnemo[IDENTSIZE+10];
-    const OPCDesc*      OPC;
-    am_t                AM = 0;         /* Initialize to keep gcc silent */
-    char                Arg[IDENTSIZE+10];
-    char                Reg;
-    CodeEntry*          E;
-    CodeLabel*          Label;
-
-    /* Read the first token and skip white space after it */
-    L = SkipSpace (ReadToken (L, " \t:", Mnemo, sizeof (Mnemo)));
-
-    /* Check if we have a label */
-    if (*L == ':') {
-
-        /* Skip the colon and following white space */
-        L = SkipSpace (L+1);
-
-        /* Add the label */
-        CS_AddLabel (S, Mnemo);
-
-        /* If we have reached end of line, bail out, otherwise a mnemonic
-        ** may follow.
-        */
-        if (*L == '\0') {
-            return 0;
-        }
-
-        L = SkipSpace (ReadToken (L, " \t", Mnemo, sizeof (Mnemo)));
-    }
-
-    /* Try to find the opcode description for the mnemonic */
-    OPC = FindOP65 (Mnemo);
-
-    /* If we didn't find the opcode, print an error and bail out */
-    if (OPC == 0) {
-        Error ("ASM code error: %s is not a valid mnemonic", Mnemo);
-        return 0;
-    }
-
-    /* Get the addressing mode */
-    Arg[0] = '\0';
-    switch (*L) {
-
-        case '\0':
-            /* Implicit or accu */
-            if (OPC->Info & OF_NOIMP) {
-                AM = AM65_ACC;
-            } else {
-                AM = AM65_IMP;
-            }
-            break;
-
-        case '#':
-            /* Immidiate */
-            StrCopy (Arg, sizeof (Arg), L+1);
-            AM = AM65_IMM;
-            break;
-
-        case '(':
-            /* Indirect */
-            L = ReadToken (L+1, ",)", Arg, sizeof (Arg));
-
-            /* Check for errors */
-            if (*L == '\0') {
-                Error ("ASM code error: syntax error");
-                return 0;
-            }
-
-            /* Check the different indirect modes */
-            if (*L == ',') {
-                /* Expect zp x indirect */
-                L = SkipSpace (L+1);
-                if (toupper (*L) != 'X') {
-                    Error ("ASM code error: `X' expected");
-                    return 0;
-                }
-                L = SkipSpace (L+1);
-                if (*L != ')') {
-                    Error ("ASM code error: `)' expected");
-                    return 0;
-                }
-                L = SkipSpace (L+1);
-                if (*L != '\0') {
-                    Error ("ASM code error: syntax error");
-                    return 0;
-                }
-                AM = AM65_ZPX_IND;
-            } else if (*L == ')') {
-                /* zp indirect or zp indirect, y */
-                L = SkipSpace (L+1);
-                if (*L == ',') {
-                    L = SkipSpace (L+1);
-                    if (toupper (*L) != 'Y') {
-                        Error ("ASM code error: `Y' expected");
-                        return 0;
-                    }
-                    L = SkipSpace (L+1);
-                    if (*L != '\0') {
-                        Error ("ASM code error: syntax error");
-                        return 0;
-                    }
-                    AM = AM65_ZP_INDY;
-                } else if (*L == '\0') {
-                    AM = AM65_ZP_IND;
-                } else {
-                    Error ("ASM code error: syntax error");
-                    return 0;
-                }
-            }
-            break;
-
-        case 'a':
-        case 'A':
-            /* Accumulator? */
-            if (L[1] == '\0') {
-                AM = AM65_ACC;
-                break;
-            }
-            /* FALLTHROUGH */
-
-        default:
-            /* Absolute, maybe indexed */
-            L = ReadToken (L, ",", Arg, sizeof (Arg));
-            if (*L == '\0') {
-                /* Absolute, zeropage or branch */
-                if ((OPC->Info & OF_BRA) != 0) {
-                    /* Branch */
-                    AM = AM65_BRA;
-                } else if (GetZPInfo(Arg) != 0) {
-                    AM = AM65_ZP;
-                } else {
-                    /* Check for subroutine call to local label */
-                    if ((OPC->Info & OF_CALL) && IsLocalLabelName (Arg)) {
-                        Error ("ASM code error: "
-                               "Cannot use local label `%s' in subroutine call",
-                               Arg);
-                    }
-                    AM = AM65_ABS;
-                }
-            } else if (*L == ',') {
-                /* Indexed */
-                L = SkipSpace (L+1);
-                if (*L == '\0') {
-                    Error ("ASM code error: syntax error");
-                    return 0;
-                } else {
-                    Reg = toupper (*L);
-                    L = SkipSpace (L+1);
-                    if (Reg == 'X') {
-                        if (GetZPInfo(Arg) != 0) {
-                            AM = AM65_ZPX;
-                        } else {
-                            AM = AM65_ABSX;
-                        }
-                    } else if (Reg == 'Y') {
-                        AM = AM65_ABSY;
-                    } else {
-                        Error ("ASM code error: syntax error");
-                        return 0;
-                    }
-                    if (*L != '\0') {
-                        Error ("ASM code error: syntax error");
-                        return 0;
-                    }
-                }
-            }
-            break;
-
-    }
-
-    /* If the instruction is a branch, check for the label and generate it
-    ** if it does not exist. This may lead to unused labels (if the label
-    ** is actually an external one) which are removed by the CS_MergeLabels
-    ** function later.
-    */
-    Label = 0;
-    if (AM == AM65_BRA) {
-
-        /* Generate the hash over the label, then search for the label */
-        unsigned Hash = HashStr (Arg) % CS_LABEL_HASH_SIZE;
-        Label = CS_FindLabel (S, Arg, Hash);
-
-        /* If we don't have the label, it's a forward ref - create it */
-        if (Label == 0) {
-            /* Generate a new label */
-            Label = CS_NewCodeLabel (S, Arg, Hash);
-        }
-    }
-
-    /* We do now have the addressing mode in AM. Allocate a new CodeEntry
-    ** structure and initialize it.
-    */
-    E = NewCodeEntry (OPC->OPC, AM, Arg, Label, LI);
-
-    /* Return the new code entry */
-    return E;
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-CodeSeg* NewCodeSeg (const char* SegName, SymEntry* Func)
-/* Create a new code segment, initialize and return it */
-{
-    unsigned I;
-    const Type* RetType;
-
-    /* Allocate memory */
-    CodeSeg* S = xmalloc (sizeof (CodeSeg));
-
-    /* Initialize the fields */
-    S->SegName  = xstrdup (SegName);
-    S->Func     = Func;
-    InitCollection (&S->Entries);
-    InitCollection (&S->Labels);
-    for (I = 0; I < sizeof(S->LabelHash) / sizeof(S->LabelHash[0]); ++I) {
-        S->LabelHash[I] = 0;
-    }
-
-    /* If we have a function given, get the return type of the function.
-    ** Assume ANY return type besides void will use the A and X registers.
-    */
-    if (S->Func && !IsTypeVoid ((RetType = GetFuncReturn (Func->Type)))) {
-        if (SizeOf (RetType) == SizeOf (type_long)) {
-            S->ExitRegs = REG_EAX;
-        } else {
-            S->ExitRegs = REG_AX;
-        }
-    } else {
-        S->ExitRegs = REG_NONE;
-    }
-
-    /* Copy the global optimization settings */
-    S->Optimize       = (unsigned char) IS_Get (&Optimize);
-    S->CodeSizeFactor = (unsigned) IS_Get (&CodeSizeFactor);
-
-    /* Return the new struct */
-    return S;
-}
-
-
-
-void CS_AddEntry (CodeSeg* S, struct CodeEntry* E)
-/* Add an entry to the given code segment */
-{
-    /* Transfer the labels if we have any */
-    CS_MoveLabelsToEntry (S, E);
-
-    /* Add the entry to the list of code entries in this segment */
-    CollAppend (&S->Entries, E);
-}
-
-
-
-void CS_AddVLine (CodeSeg* S, LineInfo* LI, const char* Format, va_list ap)
-/* Add a line to the given code segment */
-{
-    const char* L;
-    CodeEntry*  E;
-    char        Token[IDENTSIZE+10];
-
-    /* Format the line */
-    StrBuf Buf = STATIC_STRBUF_INITIALIZER;
-    SB_VPrintf (&Buf, Format, ap);
-
-    /* Skip whitespace */
-    L = SkipSpace (SB_GetConstBuf (&Buf));
-
-    /* Check which type of instruction we have */
-    E = 0;      /* Assume no insn created */
-    switch (*L) {
-
-        case '\0':
-            /* Empty line, just ignore it */
-            break;
-
-        case ';':
-            /* Comment or hint, ignore it for now */
-            break;
-
-        case '.':
-            /* Control instruction */
-            ReadToken (L, " \t", Token, sizeof (Token));
-            Error ("ASM code error: Pseudo instruction `%s' not supported", Token);
-            break;
-
-        default:
-            E = ParseInsn (S, LI, L);
-            break;
-    }
-
-    /* If we have a code entry, transfer the labels and insert it */
-    if (E) {
-        CS_AddEntry (S, E);
-    }
-
-    /* Cleanup the string buffer */
-    SB_Done (&Buf);
-}
-
-
-
-void CS_AddLine (CodeSeg* S, LineInfo* LI, const char* Format, ...)
-/* Add a line to the given code segment */
-{
-    va_list ap;
-    va_start (ap, Format);
-    CS_AddVLine (S, LI, Format, ap);
-    va_end (ap);
-}
-
-
-
-void CS_InsertEntry (CodeSeg* S, struct CodeEntry* E, unsigned Index)
-/* Insert the code entry at the index given. Following code entries will be
-** moved to slots with higher indices.
-*/
-{
-    /* Insert the entry into the collection */
-    CollInsert (&S->Entries, E, Index);
-}
-
-
-
-void CS_DelEntry (CodeSeg* S, unsigned Index)
-/* Delete an entry from the code segment. This includes moving any associated
-** labels, removing references to labels and even removing the referenced labels
-** if the reference count drops to zero.
-** Note: Labels are moved forward if possible, that is, they are moved to the
-** next insn (not the preceeding one).
-*/
-{
-    /* Get the code entry for the given index */
-    CodeEntry* E = CS_GetEntry (S, Index);
-
-    /* If the entry has a labels, we have to move this label to the next insn.
-    ** If there is no next insn, move the label into the code segement label
-    ** pool. The operation is further complicated by the fact that the next
-    ** insn may already have a label. In that case change all reference to
-    ** this label and delete the label instead of moving it.
-    */
-    unsigned Count = CE_GetLabelCount (E);
-    if (Count > 0) {
-
-        /* The instruction has labels attached. Check if there is a next
-        ** instruction.
-        */
-        if (Index == CS_GetEntryCount (S)-1) {
-
-            /* No next instruction, move to the codeseg label pool */
-            CS_MoveLabelsToPool (S, E);
-
-        } else {
-
-            /* There is a next insn, get it */
-            CodeEntry* N = CS_GetEntry (S, Index+1);
-
-            /* Move labels to the next entry */
-            CS_MoveLabels (S, E, N);
-
-        }
-    }
-
-    /* If this insn references a label, remove the reference. And, if the
-    ** the reference count for this label drops to zero, remove this label.
-    */
-    if (E->JumpTo) {
-        /* Remove the reference */
-        CS_RemoveLabelRef (S, E);
-    }
-
-    /* Delete the pointer to the insn */
-    CollDelete (&S->Entries, Index);
-
-    /* Delete the instruction itself */
-    FreeCodeEntry (E);
-}
-
-
-
-void CS_DelEntries (CodeSeg* S, unsigned Start, unsigned Count)
-/* Delete a range of code entries. This includes removing references to labels,
-** labels attached to the entries and so on.
-*/
-{
-    /* Start deleting the entries from the rear, because this involves less
-    ** memory moving.
-    */
-    while (Count--) {
-        CS_DelEntry (S, Start + Count);
-    }
-}
-
-
-
-void CS_MoveEntries (CodeSeg* S, unsigned Start, unsigned Count, unsigned NewPos)
-/* Move a range of entries from one position to another. Start is the index
-** of the first entry to move, Count is the number of entries and NewPos is
-** the index of the target entry. The entry with the index Start will later
-** have the index NewPos. All entries with indices NewPos and above are
-** moved to higher indices. If the code block is moved to the end of the
-** current code, and if pending labels exist, these labels will get attached
-** to the first instruction of the moved block (the first one after the
-** current code end)
-*/
-{
-    /* Transparently handle an empty range */
-    if (Count == 0) {
-        return;
-    }
-
-    /* If NewPos is at the end of the code segment, move any labels from the
-    ** label pool to the first instruction of the moved range.
-    */
-    if (NewPos == CS_GetEntryCount (S)) {
-        CS_MoveLabelsToEntry (S, CS_GetEntry (S, Start));
-    }
-
-    /* Move the code block to the destination */
-    CollMoveMultiple (&S->Entries, Start, Count, NewPos);
-}
-
-
-
-struct CodeEntry* CS_GetPrevEntry (CodeSeg* S, unsigned Index)
-/* Get the code entry preceeding the one with the index Index. If there is no
-** preceeding code entry, return NULL.
-*/
-{
-    if (Index == 0) {
-        /* This is the first entry */
-        return 0;
-    } else {
-        /* Previous entry available */
-        return CollAtUnchecked (&S->Entries, Index-1);
-    }
-}
-
-
-
-struct CodeEntry* CS_GetNextEntry (CodeSeg* S, unsigned Index)
-/* Get the code entry following the one with the index Index. If there is no
-** following code entry, return NULL.
-*/
-{
-    if (Index >= CollCount (&S->Entries)-1) {
-        /* This is the last entry */
-        return 0;
-    } else {
-        /* Code entries left */
-        return CollAtUnchecked (&S->Entries, Index+1);
-    }
-}
-
-
-
-int CS_GetEntries (CodeSeg* S, struct CodeEntry** List,
-                   unsigned Start, unsigned Count)
-/* Get Count code entries into List starting at index start. Return true if
-** we got the lines, return false if not enough lines were available.
-*/
-{
-    /* Check if enough entries are available */
-    if (Start + Count > CollCount (&S->Entries)) {
-        return 0;
-    }
-
-    /* Copy the entries */
-    while (Count--) {
-        *List++ = CollAtUnchecked (&S->Entries, Start++);
-    }
-
-    /* We have the entries */
-    return 1;
-}
-
-
-
-unsigned CS_GetEntryIndex (CodeSeg* S, struct CodeEntry* E)
-/* Return the index of a code entry */
-{
-    int Index = CollIndex (&S->Entries, E);
-    CHECK (Index >= 0);
-    return Index;
-}
-
-
-
-int CS_RangeHasLabel (CodeSeg* S, unsigned Start, unsigned Count)
-/* Return true if any of the code entries in the given range has a label
-** attached. If the code segment does not span the given range, check the
-** possible span instead.
-*/
-{
-    unsigned EntryCount = CS_GetEntryCount(S);
-
-    /* Adjust count. We expect at least Start to be valid. */
-    CHECK (Start < EntryCount);
-    if (Start + Count > EntryCount) {
-        Count = EntryCount - Start;
-    }
-
-    /* Check each entry. Since we have validated the index above, we may
-    ** use the unchecked access function in the loop which is faster.
-    */
-    while (Count--) {
-        const CodeEntry* E = CollAtUnchecked (&S->Entries, Start++);
-        if (CE_HasLabel (E)) {
-            return 1;
-        }
-    }
-
-    /* No label in the complete range */
-    return 0;
-}
-
-
-
-CodeLabel* CS_AddLabel (CodeSeg* S, const char* Name)
-/* Add a code label for the next instruction to follow */
-{
-    /* Calculate the hash from the name */
-    unsigned Hash = HashStr (Name) % CS_LABEL_HASH_SIZE;
-
-    /* Try to find the code label if it does already exist */
-    CodeLabel* L = CS_FindLabel (S, Name, Hash);
-
-    /* Did we find it? */
-    if (L) {
-        /* We found it - be sure it does not already have an owner */
-        if (L->Owner) {
-            Error ("ASM label `%s' is already defined", Name);
-            return L;
-        }
-    } else {
-        /* Not found - create a new one */
-        L = CS_NewCodeLabel (S, Name, Hash);
-    }
-
-    /* Safety. This call is quite costly, but safety is better */
-    if (CollIndex (&S->Labels, L) >= 0) {
-        Error ("ASM label `%s' is already defined", Name);
-        return L;
-    }
-
-    /* We do now have a valid label. Remember it for later */
-    CollAppend (&S->Labels, L);
-
-    /* Return the label */
-    return L;
-}
-
-
-
-CodeLabel* CS_GenLabel (CodeSeg* S, struct CodeEntry* E)
-/* If the code entry E does already have a label, return it. Otherwise
-** create a new label, attach it to E and return it.
-*/
-{
-    CodeLabel* L;
-
-    if (CE_HasLabel (E)) {
-
-        /* Get the label from this entry */
-        L = CE_GetLabel (E, 0);
-
-    } else {
-
-        /* Get a new name */
-        const char* Name = LocalLabelName (GetLocalLabel ());
-
-        /* Generate the hash over the name */
-        unsigned Hash = HashStr (Name) % CS_LABEL_HASH_SIZE;
-
-        /* Create a new label */
-        L = CS_NewCodeLabel (S, Name, Hash);
-
-        /* Attach this label to the code entry */
-        CE_AttachLabel (E, L);
-
-    }
-
-    /* Return the label */
-    return L;
-}
-
-
-
-void CS_DelLabel (CodeSeg* S, CodeLabel* L)
-/* Remove references from this label and delete it. */
-{
-    unsigned Count, I;
-
-    /* First, remove the label from the hash chain */
-    CS_RemoveLabelFromHash (S, L);
-
-    /* Remove references from insns jumping to this label */
-    Count = CollCount (&L->JumpFrom);
-    for (I = 0; I < Count; ++I) {
-        /* Get the insn referencing this label */
-        CodeEntry* E = CollAt (&L->JumpFrom, I);
-        /* Remove the reference */
-        CE_ClearJumpTo (E);
-    }
-    CollDeleteAll (&L->JumpFrom);
-
-    /* Remove the reference to the owning instruction if it has one. The
-    ** function may be called for a label without an owner when deleting
-    ** unfinished parts of the code. This is unfortunate since it allows
-    ** errors to slip through.
-    */
-    if (L->Owner) {
-        CollDeleteItem (&L->Owner->Labels, L);
-    }
-
-    /* All references removed, delete the label itself */
-    FreeCodeLabel (L);
-}
-
-
-
-void CS_MergeLabels (CodeSeg* S)
-/* Merge code labels. That means: For each instruction, remove all labels but
-** one and adjust references accordingly.
-*/
-{
-    unsigned I;
-    unsigned J;
-
-    /* First, remove all labels from the label symbol table that don't have an
-    ** owner (this means that they are actually external labels but we didn't
-    ** know that previously since they may have also been forward references).
-    */
-    for (I = 0; I < CS_LABEL_HASH_SIZE; ++I) {
-
-        /* Get the first label in this hash chain */
-        CodeLabel** L = &S->LabelHash[I];
-        while (*L) {
-            if ((*L)->Owner == 0) {
-
-                /* The label does not have an owner, remove it from the chain */
-                CodeLabel* X = *L;
-                *L = X->Next;
-
-                /* Cleanup any entries jumping to this label */
-                for (J = 0; J < CL_GetRefCount (X); ++J) {
-                    /* Get the entry referencing this label */
-                    CodeEntry* E = CL_GetRef (X, J);
-                    /* And remove the reference. Do NOT call CE_ClearJumpTo
-                    ** here, because this will also clear the label name,
-                    ** which is not what we want.
-                    */
-                    E->JumpTo = 0;
-                }
-
-                /* Print some debugging output */
-                if (Debug) {
-                    printf ("Removing unused global label `%s'", X->Name);
-                }
-
-                /* And free the label */
-                FreeCodeLabel (X);
-            } else {
-                /* Label is owned, point to next code label pointer */
-                L = &((*L)->Next);
-            }
-        }
-    }
-
-    /* Walk over all code entries */
-    for (I = 0; I < CS_GetEntryCount (S); ++I) {
-
-        CodeLabel* RefLab;
-        unsigned   J;
-
-        /* Get a pointer to the next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* If this entry has zero labels, continue with the next one */
-        unsigned LabelCount = CE_GetLabelCount (E);
-        if (LabelCount == 0) {
-            continue;
-        }
-
-        /* We have at least one label. Use the first one as reference label. */
-        RefLab = CE_GetLabel (E, 0);
-
-        /* Walk through the remaining labels and change references to these
-        ** labels to a reference to the one and only label. Delete the labels
-        ** that are no longer used. To increase performance, walk backwards
-        ** through the list.
-        */
-        for (J = LabelCount-1; J >= 1; --J) {
-
-            /* Get the next label */
-            CodeLabel* L = CE_GetLabel (E, J);
-
-            /* Move all references from this label to the reference label */
-            CL_MoveRefs (L, RefLab);
-
-            /* Remove the label completely. */
-            CS_DelLabel (S, L);
-        }
-
-        /* The reference label is the only remaining label. Check if there
-        ** are any references to this label, and delete it if this is not
-        ** the case.
-        */
-        if (CollCount (&RefLab->JumpFrom) == 0) {
-            /* Delete the label */
-            CS_DelLabel (S, RefLab);
-        }
-    }
-}
-
-
-
-void CS_MoveLabels (CodeSeg* S, struct CodeEntry* Old, struct CodeEntry* New)
-/* Move all labels from Old to New. The routine will move the labels itself
-** if New does not have any labels, and move references if there is at least
-** a label for new. If references are moved, the old label is deleted
-** afterwards.
-*/
-{
-    /* Get the number of labels to move */
-    unsigned OldLabelCount = CE_GetLabelCount (Old);
-
-    /* Does the new entry have itself a label? */
-    if (CE_HasLabel (New)) {
-
-        /* The new entry does already have a label - move references */
-        CodeLabel* NewLabel = CE_GetLabel (New, 0);
-        while (OldLabelCount--) {
-
-            /* Get the next label */
-            CodeLabel* OldLabel = CE_GetLabel (Old, OldLabelCount);
-
-            /* Move references */
-            CL_MoveRefs (OldLabel, NewLabel);
-
-            /* Delete the label */
-            CS_DelLabel (S, OldLabel);
-
-        }
-
-    } else {
-
-        /* The new entry does not have a label, just move them */
-        while (OldLabelCount--) {
-
-            /* Move the label to the new entry */
-            CE_MoveLabel (CE_GetLabel (Old, OldLabelCount), New);
-
-        }
-
-    }
-}
-
-
-
-void CS_RemoveLabelRef (CodeSeg* S, struct CodeEntry* E)
-/* Remove the reference between E and the label it jumps to. The reference
-** will be removed on both sides and E->JumpTo will be 0 after that. If
-** the reference was the only one for the label, the label will get
-** deleted.
-*/
-{
-    /* Get a pointer to the label and make sure it exists */
-    CodeLabel* L = E->JumpTo;
-    CHECK (L != 0);
-
-    /* Delete the entry from the label */
-    CollDeleteItem (&L->JumpFrom, E);
-
-    /* The entry jumps no longer to L */
-    CE_ClearJumpTo (E);
-
-    /* If there are no more references, delete the label */
-    if (CollCount (&L->JumpFrom) == 0) {
-        CS_DelLabel (S, L);
-    }
-}
-
-
-
-void CS_MoveLabelRef (CodeSeg* S, struct CodeEntry* E, CodeLabel* L)
-/* Change the reference of E to L instead of the current one. If this
-** was the only reference to the old label, the old label will get
-** deleted.
-*/
-{
-    /* Get the old label */
-    CodeLabel* OldLabel = E->JumpTo;
-
-    /* Be sure that code entry references a label */
-    PRECONDITION (OldLabel != 0);
-
-    /* Remove the reference to our label */
-    CS_RemoveLabelRef (S, E);
-
-    /* Use the new label */
-    CL_AddRef (L, E);
-}
-
-
-
-void CS_DelCodeRange (CodeSeg* S, unsigned First, unsigned Last)
-/* Delete all entries between first and last, both inclusive. The function
-** can only handle basic blocks (First is the only entry, Last the only exit)
-** and no open labels. It will call FAIL if any of these preconditions are
-** violated.
-*/
-{
-    unsigned   I;
-    CodeEntry* FirstEntry;
-
-    /* Do some sanity checks */
-    CHECK (First <= Last && Last < CS_GetEntryCount (S));
-
-    /* If Last is actually the last insn, call CS_DelCodeAfter instead, which
-    ** is more flexible in this case.
-    */
-    if (Last == CS_GetEntryCount (S) - 1) {
-        CS_DelCodeAfter (S, First);
-        return;
-    }
-
-    /* Get the first entry and check if it has any labels. If it has, move
-    ** them to the insn following Last. If Last is the last insn of the code
-    ** segment, make them ownerless and move them to the label pool.
-    */
-    FirstEntry = CS_GetEntry (S, First);
-    if (CE_HasLabel (FirstEntry)) {
-        /* Get the entry following last */
-        CodeEntry* FollowingEntry = CS_GetNextEntry (S, Last);
-        if (FollowingEntry) {
-            /* There is an entry after Last - move the labels */
-            CS_MoveLabels (S, FirstEntry, FollowingEntry);
-        } else {
-            /* Move the labels to the pool and clear the owner pointer */
-            CS_MoveLabelsToPool (S, FirstEntry);
-        }
-    }
-
-    /* First pass: Delete all references to labels. If the reference count
-    ** for a label drops to zero, delete it.
-    */
-    for (I = Last; I >= First; --I) {
-
-        /* Get the next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if this entry has a label reference */
-        if (E->JumpTo) {
-
-            /* If the label is a label in the label pool, this is an error */
-            CodeLabel* L = E->JumpTo;
-            CHECK (CollIndex (&S->Labels, L) < 0);
-
-            /* Remove the reference to the label */
-            CS_RemoveLabelRef (S, E);
-        }
-    }
-
-    /* Second pass: Delete the instructions. If a label attached to an
-    ** instruction still has references, it must be references from outside
-    ** the deleted area, which is an error.
-    */
-    for (I = Last; I >= First; --I) {
-
-        /* Get the next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if this entry has a label attached */
-        CHECK (!CE_HasLabel (E));
-
-        /* Delete the pointer to the entry */
-        CollDelete (&S->Entries, I);
-
-        /* Delete the entry itself */
-        FreeCodeEntry (E);
-    }
-}
-
-
-
-void CS_DelCodeAfter (CodeSeg* S, unsigned Last)
-/* Delete all entries including the given one */
-{
-    /* Get the number of entries in this segment */
-    unsigned Count = CS_GetEntryCount (S);
-
-    /* First pass: Delete all references to labels. If the reference count
-    ** for a label drops to zero, delete it.
-    */
-    unsigned C = Count;
-    while (Last < C--) {
-
-        /* Get the next entry */
-        CodeEntry* E = CS_GetEntry (S, C);
-
-        /* Check if this entry has a label reference */
-        if (E->JumpTo) {
-            /* If the label is a label in the label pool and this is the last
-            ** reference to the label, remove the label from the pool.
-            */
-            CodeLabel* L = E->JumpTo;
-            int Index = CollIndex (&S->Labels, L);
-            if (Index >= 0 && CollCount (&L->JumpFrom) == 1) {
-                /* Delete it from the pool */
-                CollDelete (&S->Labels, Index);
-            }
-
-            /* Remove the reference to the label */
-            CS_RemoveLabelRef (S, E);
-        }
-
-    }
-
-    /* Second pass: Delete the instructions. If a label attached to an
-    ** instruction still has references, it must be references from outside
-    ** the deleted area. Don't delete the label in this case, just make it
-    ** ownerless and move it to the label pool.
-    */
-    C = Count;
-    while (Last < C--) {
-
-        /* Get the next entry */
-        CodeEntry* E = CS_GetEntry (S, C);
-
-        /* Check if this entry has a label attached */
-        if (CE_HasLabel (E)) {
-            /* Move the labels to the pool and clear the owner pointer */
-            CS_MoveLabelsToPool (S, E);
-        }
-
-        /* Delete the pointer to the entry */
-        CollDelete (&S->Entries, C);
-
-        /* Delete the entry itself */
-        FreeCodeEntry (E);
-    }
-}
-
-
-
-void CS_ResetMarks (CodeSeg* S, unsigned First, unsigned Last)
-/* Remove all user marks from the entries in the given range */
-{
-    while (First <= Last) {
-        CE_ResetMark (CS_GetEntry (S, First++));
-    }
-}
-
-
-
-int CS_IsBasicBlock (CodeSeg* S, unsigned First, unsigned Last)
-/* Check if the given code segment range is a basic block. That is, check if
-** First is the only entrance and Last is the only exit. This means that no
-** jump/branch inside the block may jump to an insn below First or after(!)
-** Last, and that no insn may jump into this block from the outside.
-*/
-{
-    unsigned I;
-
-    /* Don't accept invalid ranges */
-    CHECK (First <= Last);
-
-    /* First pass: Walk over the range and remove all marks from the entries */
-    CS_ResetMarks (S, First, Last);
-
-    /* Second pass: Walk over the range checking all labels. Note: There may be
-    ** label on the first insn which is ok.
-    */
-    I = First + 1;
-    while (I <= Last) {
-
-        /* Get the next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if this entry has one or more labels, if so, check which
-        ** entries jump to this label.
-        */
-        unsigned LabelCount = CE_GetLabelCount (E);
-        unsigned LabelIndex;
-        for (LabelIndex = 0; LabelIndex < LabelCount; ++LabelIndex) {
-
-            /* Get this label */
-            CodeLabel* L = CE_GetLabel (E, LabelIndex);
-
-            /* Walk over all entries that jump to this label. Check for each
-            ** of the entries if it is out of the range.
-            */
-            unsigned RefCount = CL_GetRefCount (L);
-            unsigned RefIndex;
-            for (RefIndex = 0; RefIndex < RefCount; ++RefIndex) {
-
-                /* Get the code entry that jumps here */
-                CodeEntry* Ref = CL_GetRef (L, RefIndex);
-
-                /* Walk over out complete range and check if we find the
-                ** refering entry. This is cheaper than using CS_GetEntryIndex,
-                ** because CS_GetEntryIndex will search the complete code
-                ** segment and not just our range.
-                */
-                unsigned J;
-                for (J = First; J <= Last; ++J) {
-                    if (Ref == CS_GetEntry (S, J)) {
-                        break;
-                    }
-                }
-                if (J > Last) {
-                    /* We did not find the entry. This means that the jump to
-                    ** out code segment entry E came from outside the range,
-                    ** which in turn means that the given range is not a basic
-                    ** block.
-                    */
-                    CS_ResetMarks (S, First, Last);
-                    return 0;
-                }
-
-                /* If we come here, we found the entry. Mark it, so we know
-                ** that the branch to the label is in range.
-                */
-                CE_SetMark (Ref);
-            }
-        }
-
-        /* Next entry */
-        ++I;
-    }
-
-    /* Third pass: Walk again over the range and check all branches. If we
-    ** find a branch that is not marked, its target is not inside the range
-    ** (since we checked all the labels in the range before).
-    */
-    I = First;
-    while (I <= Last) {
-
-        /* Get the next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if this is a branch and if so, if it has a mark */
-        if (E->Info & (OF_UBRA | OF_CBRA)) {
-            if (!CE_HasMark (E)) {
-                /* No mark means not a basic block. Before bailing out, be sure
-                ** to remove the marks from the remaining entries.
-                */
-                CS_ResetMarks (S, I+1, Last);
-                return 0;
-            }
-
-            /* Remove the mark */
-            CE_ResetMark (E);
-        }
-
-        /* Next entry */
-        ++I;
-    }
-
-    /* Done - this is a basic block */
-    return 1;
-}
-
-
-
-void CS_OutputPrologue (const CodeSeg* S)
-/* If the given code segment is a code segment for a function, output the
-** assembler prologue into the file. That is: Output a comment header, switch
-** to the correct segment and enter the local function scope. If the code
-** segment is global, do nothing.
-*/
-{
-    /* Get the function associated with the code segment */
-    SymEntry* Func = S->Func;
-
-    /* If the code segment is associated with a function, print a function
-    ** header and enter a local scope. Be sure to switch to the correct
-    ** segment before outputing the function label.
-    */
-    if (Func) {
-        /* Get the function descriptor */
-        CS_PrintFunctionHeader (S);
-        WriteOutput (".segment\t\"%s\"\n\n.proc\t_%s", S->SegName, Func->Name);
-        if (IsQualNear (Func->Type)) {
-            WriteOutput (": near");
-        } else if (IsQualFar (Func->Type)) {
-            WriteOutput (": far");
-        }
-        WriteOutput ("\n\n");
-    }
-
-}
-
-
-
-void CS_OutputEpilogue (const CodeSeg* S)
-/* If the given code segment is a code segment for a function, output the
-** assembler epilogue into the file. That is: Close the local function scope.
-*/
-{
-    if (S->Func) {
-        WriteOutput ("\n.endproc\n\n");
-    }
-}
-
-
-
-void CS_Output (CodeSeg* S)
-/* Output the code segment data to the output file */
-{
-    unsigned I;
-    const LineInfo* LI;
-
-    /* Get the number of entries in this segment */
-    unsigned Count = CS_GetEntryCount (S);
-
-    /* If the code segment is empty, bail out here */
-    if (Count == 0) {
-        return;
-    }
-
-    /* Generate register info */
-    CS_GenRegInfo (S);
-
-    /* Output the segment directive */
-    WriteOutput (".segment\t\"%s\"\n\n", S->SegName);
-
-    /* Output all entries, prepended by the line information if it has changed */
-    LI = 0;
-    for (I = 0; I < Count; ++I) {
-        /* Get the next entry */
-        const CodeEntry* E = CollConstAt (&S->Entries, I);
-        /* Check if the line info has changed. If so, output the source line
-        ** if the option is enabled and output debug line info if the debug
-        ** option is enabled.
-        */
-        if (E->LI != LI) {
-            /* Line info has changed, remember the new line info */
-            LI = E->LI;
-
-            /* Add the source line as a comment. Beware: When line continuation
-            ** was used, the line may contain newlines.
-            */
-            if (AddSource) {
-                const char* L = LI->Line;
-                WriteOutput (";\n; ");
-                while (*L) {
-                    const char* N = strchr (L, '\n');
-                    if (N) {
-                        /* We have a newline, just write the first part */
-                        WriteOutput ("%.*s\n; ", (int) (N - L), L);
-                        L = N+1;
-                    } else {
-                        /* No Newline, write as is */
-                        WriteOutput ("%s\n", L);
-                        break;
-                    }
-                }
-                WriteOutput (";\n");
-            }
-
-            /* Add line debug info */
-            if (DebugInfo) {
-                WriteOutput ("\t.dbg\tline, \"%s\", %u\n",
-                             GetInputName (LI), GetInputLine (LI));
-            }
-        }
-        /* Output the code */
-        CE_Output (E);
-    }
-
-    /* If debug info is enabled, terminate the last line number information */
-    if (DebugInfo) {
-        WriteOutput ("\t.dbg\tline\n");
-    }
-
-    /* Free register info */
-    CS_FreeRegInfo (S);
-}
-
-
-
-void CS_FreeRegInfo (CodeSeg* S)
-/* Free register infos for all instructions */
-{
-    unsigned I;
-    for (I = 0; I < CS_GetEntryCount (S); ++I) {
-        CE_FreeRegInfo (CS_GetEntry(S, I));
-    }
-}
-
-
-
-void CS_GenRegInfo (CodeSeg* S)
-/* Generate register infos for all instructions */
-{
-    unsigned I;
-    RegContents Regs;           /* Initial register contents */
-    RegContents* CurrentRegs;   /* Current register contents */
-    int WasJump;                /* True if last insn was a jump */
-    int Done;                   /* All runs done flag */
-
-    /* Be sure to delete all register infos */
-    CS_FreeRegInfo (S);
-
-    /* We may need two runs to get back references right */
-    do {
-
-        /* Assume we're done after this run */
-        Done = 1;
-
-        /* On entry, the register contents are unknown */
-        RC_Invalidate (&Regs);
-        CurrentRegs = &Regs;
-
-        /* Walk over all insns and note just the changes from one insn to the
-        ** next one.
-        */
-        WasJump = 0;
-        for (I = 0; I < CS_GetEntryCount (S); ++I) {
-
-            CodeEntry* P;
-
-            /* Get the next instruction */
-            CodeEntry* E = CollAtUnchecked (&S->Entries, I);
-
-            /* If the instruction has a label, we need some special handling */
-            unsigned LabelCount = CE_GetLabelCount (E);
-            if (LabelCount > 0) {
-
-                /* Loop over all entry points that jump here. If these entry
-                ** points already have register info, check if all values are
-                ** known and identical. If all values are identical, and the
-                ** preceeding instruction was not an unconditional branch, check
-                ** if the register value on exit of the preceeding instruction
-                ** is also identical. If all these values are identical, the
-                ** value of a register is known, otherwise it is unknown.
-                */
-                CodeLabel* Label = CE_GetLabel (E, 0);
-                unsigned Entry;
-                if (WasJump) {
-                    /* Preceeding insn was an unconditional branch */
-                    CodeEntry* J = CL_GetRef(Label, 0);
-                    if (J->RI) {
-                        Regs = J->RI->Out2;
-                    } else {
-                        RC_Invalidate (&Regs);
-                    }
-                    Entry = 1;
-                } else {
-                    Regs = *CurrentRegs;
-                    Entry = 0;
-                }
-
-                while (Entry < CL_GetRefCount (Label)) {
-                    /* Get this entry */
-                    CodeEntry* J = CL_GetRef (Label, Entry);
-                    if (J->RI == 0) {
-                        /* No register info for this entry. This means that the
-                        ** instruction that jumps here is at higher addresses and
-                        ** the jump is a backward jump. We need a second run to
-                        ** get the register info right in this case. Until then,
-                        ** assume unknown register contents.
-                        */
-                        Done = 0;
-                        RC_Invalidate (&Regs);
-                        break;
-                    }
-                    if (J->RI->Out2.RegA != Regs.RegA) {
-                        Regs.RegA = UNKNOWN_REGVAL;
-                    }
-                    if (J->RI->Out2.RegX != Regs.RegX) {
-                        Regs.RegX = UNKNOWN_REGVAL;
-                    }
-                    if (J->RI->Out2.RegY != Regs.RegY) {
-                        Regs.RegY = UNKNOWN_REGVAL;
-                    }
-                    if (J->RI->Out2.SRegLo != Regs.SRegLo) {
-                        Regs.SRegLo = UNKNOWN_REGVAL;
-                    }
-                    if (J->RI->Out2.SRegHi != Regs.SRegHi) {
-                        Regs.SRegHi = UNKNOWN_REGVAL;
-                    }
-                    if (J->RI->Out2.Tmp1 != Regs.Tmp1) {
-                        Regs.Tmp1 = UNKNOWN_REGVAL;
-                    }
-                    ++Entry;
-                }
-
-                /* Use this register info */
-                CurrentRegs = &Regs;
-
-            }
-
-            /* Generate register info for this instruction */
-            CE_GenRegInfo (E, CurrentRegs);
-
-            /* Remember for the next insn if this insn was an uncondition branch */
-            WasJump = (E->Info & OF_UBRA) != 0;
-
-            /* Output registers for this insn are input for the next */
-            CurrentRegs = &E->RI->Out;
-
-            /* If this insn is a branch on zero flag, we may have more info on
-            ** register contents for one of both flow directions, but only if
-            ** there is a previous instruction.
-            */
-            if ((E->Info & OF_ZBRA) != 0 && (P = CS_GetPrevEntry (S, I)) != 0) {
-
-                /* Get the branch condition */
-                bc_t BC = GetBranchCond (E->OPC);
-
-                /* Check the previous instruction */
-                switch (P->OPC) {
-
-                    case OP65_ADC:
-                    case OP65_AND:
-                    case OP65_DEA:
-                    case OP65_EOR:
-                    case OP65_INA:
-                    case OP65_LDA:
-                    case OP65_ORA:
-                    case OP65_PLA:
-                    case OP65_SBC:
-                        /* A is zero in one execution flow direction */
-                        if (BC == BC_EQ) {
-                            E->RI->Out2.RegA = 0;
-                        } else {
-                            E->RI->Out.RegA = 0;
-                        }
-                        break;
-
-                    case OP65_CMP:
-                        /* If this is an immidiate compare, the A register has
-                        ** the value of the compare later.
-                        */
-                        if (CE_IsConstImm (P)) {
-                            if (BC == BC_EQ) {
-                                E->RI->Out2.RegA = (unsigned char)P->Num;
-                            } else {
-                                E->RI->Out.RegA = (unsigned char)P->Num;
-                            }
-                        }
-                        break;
-
-                    case OP65_CPX:
-                        /* If this is an immidiate compare, the X register has
-                        ** the value of the compare later.
-                        */
-                        if (CE_IsConstImm (P)) {
-                            if (BC == BC_EQ) {
-                                E->RI->Out2.RegX = (unsigned char)P->Num;
-                            } else {
-                                E->RI->Out.RegX = (unsigned char)P->Num;
-                            }
-                        }
-                        break;
-
-                    case OP65_CPY:
-                        /* If this is an immidiate compare, the Y register has
-                        ** the value of the compare later.
-                        */
-                        if (CE_IsConstImm (P)) {
-                            if (BC == BC_EQ) {
-                                E->RI->Out2.RegY = (unsigned char)P->Num;
-                            } else {
-                                E->RI->Out.RegY = (unsigned char)P->Num;
-                            }
-                        }
-                        break;
-
-                    case OP65_DEX:
-                    case OP65_INX:
-                    case OP65_LDX:
-                    case OP65_PLX:
-                        /* X is zero in one execution flow direction */
-                        if (BC == BC_EQ) {
-                            E->RI->Out2.RegX = 0;
-                        } else {
-                            E->RI->Out.RegX = 0;
-                        }
-                        break;
-
-                    case OP65_DEY:
-                    case OP65_INY:
-                    case OP65_LDY:
-                    case OP65_PLY:
-                        /* X is zero in one execution flow direction */
-                        if (BC == BC_EQ) {
-                            E->RI->Out2.RegY = 0;
-                        } else {
-                            E->RI->Out.RegY = 0;
-                        }
-                        break;
-
-                    case OP65_TAX:
-                    case OP65_TXA:
-                        /* If the branch is a beq, both A and X are zero at the
-                        ** branch target, otherwise they are zero at the next
-                        ** insn.
-                        */
-                        if (BC == BC_EQ) {
-                            E->RI->Out2.RegA = E->RI->Out2.RegX = 0;
-                        } else {
-                            E->RI->Out.RegA = E->RI->Out.RegX = 0;
-                        }
-                        break;
-
-                    case OP65_TAY:
-                    case OP65_TYA:
-                        /* If the branch is a beq, both A and Y are zero at the
-                        ** branch target, otherwise they are zero at the next
-                        ** insn.
-                        */
-                        if (BC == BC_EQ) {
-                            E->RI->Out2.RegA = E->RI->Out2.RegY = 0;
-                        } else {
-                            E->RI->Out.RegA = E->RI->Out.RegY = 0;
-                        }
-                        break;
-
-                    default:
-                        break;
-
-                }
-            }
-        }
-    } while (!Done);
-
-}
diff --git a/src/cc65/codeseg.h b/src/cc65/codeseg.h
deleted file mode 100644 (file)
index 0d73673..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 codeseg.h                                 */
-/*                                                                           */
-/*                          Code segment structure                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef CODESEG_H
-#define CODESEG_H
-
-
-
-#include <stdarg.h>
-
-/* common */
-#include "attrib.h"
-#include "coll.h"
-#include "inline.h"
-
-/* cc65 */
-#include "codelab.h"
-#include "lineinfo.h"
-#include "symentry.h"
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-struct CodeEntry;
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Size of the label hash table */
-#define CS_LABEL_HASH_SIZE      29
-
-/* Code segment structure */
-typedef struct CodeSeg CodeSeg;
-struct CodeSeg {
-    char*           SegName;                    /* Segment name */
-    SymEntry*       Func;                       /* Owner function */
-    Collection      Entries;                    /* List of code entries */
-    Collection      Labels;                     /* Labels for next insn */
-    CodeLabel*      LabelHash[CS_LABEL_HASH_SIZE]; /* Label hash table */
-    unsigned short  ExitRegs;                   /* Register use on exit */
-
-    /* Optimization settings for this segment */
-    unsigned char   Optimize;                   /* On/off switch */
-    unsigned        CodeSizeFactor;
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-CodeSeg* NewCodeSeg (const char* SegName, SymEntry* Func);
-/* Create a new code segment, initialize and return it */
-
-void CS_AddEntry (CodeSeg* S, struct CodeEntry* E);
-/* Add an entry to the given code segment */
-
-void CS_AddVLine (CodeSeg* S, LineInfo* LI, const char* Format, va_list ap) attribute ((format(printf,3,0)));
-/* Add a line to the given code segment */
-
-void CS_AddLine (CodeSeg* S, LineInfo* LI, const char* Format, ...) attribute ((format(printf,3,4)));
-/* Add a line to the given code segment */
-
-#if defined(HAVE_INLINE)
-INLINE unsigned CS_GetEntryCount (const CodeSeg* S)
-/* Return the number of entries for the given code segment */
-{
-    return CollCount (&S->Entries);
-}
-#else
-#  define CS_GetEntryCount(S)   CollCount (&(S)->Entries)
-#endif
-
-void CS_InsertEntry (CodeSeg* S, struct CodeEntry* E, unsigned Index);
-/* Insert the code entry at the index given. Following code entries will be
-** moved to slots with higher indices.
-*/
-
-void CS_DelEntry (CodeSeg* S, unsigned Index);
-/* Delete an entry from the code segment. This includes moving any associated
-** labels, removing references to labels and even removing the referenced labels
-** if the reference count drops to zero.
-** Note: Labels are moved forward if possible, that is, they are moved to the
-** next insn (not the preceeding one).
-*/
-
-void CS_DelEntries (CodeSeg* S, unsigned Start, unsigned Count);
-/* Delete a range of code entries. This includes removing references to labels,
-** labels attached to the entries and so on.
-*/
-
-void CS_MoveEntries (CodeSeg* S, unsigned Start, unsigned Count, unsigned NewPos);
-/* Move a range of entries from one position to another. Start is the index
-** of the first entry to move, Count is the number of entries and NewPos is
-** the index of the target entry. The entry with the index Start will later
-** have the index NewPos. All entries with indices NewPos and above are
-** moved to higher indices. If the code block is moved to the end of the
-** current code, and if pending labels exist, these labels will get attached
-** to the first instruction of the moved block (the first one after the
-** current code end)
-*/
-
-#if defined(HAVE_INLINE)
-INLINE void CS_MoveEntry (CodeSeg* S, unsigned OldPos, unsigned NewPos)
-/* Move an entry from one position to another. OldPos is the current position
-** of the entry, NewPos is the new position of the entry.
-*/
-{
-    CollMove (&S->Entries, OldPos, NewPos);
-}
-#else
-#  define CS_MoveEntry(S, OldPos, NewPos)       CollMove (&(S)->Entries, OldPos, NewPos)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE struct CodeEntry* CS_GetEntry (CodeSeg* S, unsigned Index)
-/* Get an entry from the given code segment */
-{
-    return CollAt (&S->Entries, Index);
-}
-#else
-#  define CS_GetEntry(S, Index) ((struct CodeEntry*) CollAt(&(S)->Entries, (Index)))
-#endif
-
-struct CodeEntry* CS_GetPrevEntry (CodeSeg* S, unsigned Index);
-/* Get the code entry preceeding the one with the index Index. If there is no
-** preceeding code entry, return NULL.
-*/
-
-struct CodeEntry* CS_GetNextEntry (CodeSeg* S, unsigned Index);
-/* Get the code entry following the one with the index Index. If there is no
-** following code entry, return NULL.
-*/
-
-int CS_GetEntries (CodeSeg* S, struct CodeEntry** List,
-                   unsigned Start, unsigned Count);
-/* Get Count code entries into List starting at index start. Return true if
-** we got the lines, return false if not enough lines were available.
-*/
-
-unsigned CS_GetEntryIndex (CodeSeg* S, struct CodeEntry* E);
-/* Return the index of a code entry */
-
-int CS_RangeHasLabel (CodeSeg* S, unsigned Start, unsigned Count);
-/* Return true if any of the code entries in the given range has a label
-** attached. If the code segment does not span the given range, check the
-** possible span instead.
-*/
-
-#if defined(HAVE_INLINE)
-INLINE int CS_HavePendingLabel (const CodeSeg* S)
-/* Return true if there are open labels that will get attached to the next
-** instruction that is added.
-*/
-{
-    return (CollCount (&S->Labels) > 0);
-}
-#else
-#  define CS_HavePendingLabel(S)        (CollCount (&(S)->Labels) > 0)
-#endif
-
-CodeLabel* CS_AddLabel (CodeSeg* S, const char* Name);
-/* Add a code label for the next instruction to follow */
-
-CodeLabel* CS_GenLabel (CodeSeg* S, struct CodeEntry* E);
-/* If the code entry E does already have a label, return it. Otherwise
-** create a new label, attach it to E and return it.
-*/
-
-void CS_DelLabel (CodeSeg* S, CodeLabel* L);
-/* Remove references from this label and delete it. */
-
-void CS_MergeLabels (CodeSeg* S);
-/* Merge code labels. That means: For each instruction, remove all labels but
-** one and adjust references accordingly.
-*/
-
-void CS_MoveLabels (CodeSeg* S, struct CodeEntry* Old, struct CodeEntry* New);
-/* Move all labels from Old to New. The routine will move the labels itself
-** if New does not have any labels, and move references if there is at least
-** a label for new. If references are moved, the old label is deleted
-** afterwards.
-*/
-
-void CS_RemoveLabelRef (CodeSeg* S, struct CodeEntry* E);
-/* Remove the reference between E and the label it jumps to. The reference
-** will be removed on both sides and E->JumpTo will be 0 after that. If
-** the reference was the only one for the label, the label will get
-** deleted.
-*/
-
-void CS_MoveLabelRef (CodeSeg* S, struct CodeEntry* E, CodeLabel* L);
-/* Change the reference of E to L instead of the current one. If this
-** was the only reference to the old label, the old label will get
-** deleted.
-*/
-
-void CS_DelCodeRange (CodeSeg* S, unsigned First, unsigned Last);
-/* Delete all entries between first and last, both inclusive. The function
-** can only handle basic blocks (First is the only entry, Last the only exit)
-** and no open labels. It will call FAIL if any of these preconditions are
-** violated.
-*/
-
-void CS_DelCodeAfter (CodeSeg* S, unsigned Last);
-/* Delete all entries including the given one */
-
-void CS_ResetMarks (CodeSeg* S, unsigned First, unsigned Last);
-/* Remove all user marks from the entries in the given range */
-
-#if defined(HAVE_INLINE)
-INLINE void CS_ResetAllMarks (CodeSeg* S)
-/* Remove all user marks from the code segment */
-{
-    if (CS_GetEntryCount (S) > 0) {
-        CS_ResetMarks (S, 0, CS_GetEntryCount (S));
-    }
-}
-#else
-#  define CS_ResetAllMarks(S) \
-        ((CS_GetEntryCount (S) > 0)? CS_ResetMarks (S, 0, CS_GetEntryCount (S)) : (void) 0)
-#endif
-
-int CS_IsBasicBlock (CodeSeg* S, unsigned First, unsigned Last);
-/* Check if the given code segment range is a basic block. That is, check if
-** First is the only entrance and Last is the only exit. This means that no
-** jump/branch inside the block may jump to an insn below First or after(!)
-** Last, and that no insn may jump into this block from the outside.
-*/
-
-void CS_OutputPrologue (const CodeSeg* S);
-/* If the given code segment is a code segment for a function, output the
-** assembler prologue into the file. That is: Output a comment header, switch
-** to the correct segment and enter the local function scope. If the code
-** segment is global, do nothing.
-*/
-
-void CS_OutputEpilogue (const CodeSeg* S);
-/* If the given code segment is a code segment for a function, output the
-** assembler epilogue into the file. That is: Close the local function scope.
-*/
-
-void CS_Output (CodeSeg* S);
-/* Output the code segment data to a file */
-
-void CS_FreeRegInfo (CodeSeg* S);
-/* Free register infos for all instructions */
-
-void CS_GenRegInfo (CodeSeg* S);
-/* Generate register infos for all instructions */
-
-
-
-/* End of codeseg.h */
-
-#endif
diff --git a/src/cc65/compile.c b/src/cc65/compile.c
deleted file mode 100644 (file)
index 9f1ab29..0000000
+++ /dev/null
@@ -1,430 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 compile.c                                 */
-/*                                                                           */
-/*                       Top level compiler subroutine                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-#include <time.h>
-
-/* common */
-#include "debugflag.h"
-#include "version.h"
-#include "xmalloc.h"
-#include "xsprintf.h"
-
-/* cc65 */
-#include "asmlabel.h"
-#include "asmstmt.h"
-#include "codegen.h"
-#include "codeopt.h"
-#include "compile.h"
-#include "declare.h"
-#include "error.h"
-#include "expr.h"
-#include "function.h"
-#include "global.h"
-#include "input.h"
-#include "litpool.h"
-#include "macrotab.h"
-#include "output.h"
-#include "pragma.h"
-#include "preproc.h"
-#include "standard.h"
-#include "symtab.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void Parse (void)
-/* Top level parser routine. */
-{
-    int comma;
-    SymEntry* Entry;
-
-    /* Go... */
-    NextToken ();
-    NextToken ();
-
-    /* Parse until end of input */
-    while (CurTok.Tok != TOK_CEOF) {
-
-        DeclSpec        Spec;
-
-        /* Check for empty statements */
-        if (CurTok.Tok == TOK_SEMI) {
-            NextToken ();
-            continue;
-        }
-
-        /* Disallow ASM statements on global level */
-        if (CurTok.Tok == TOK_ASM) {
-            Error ("__asm__ is not allowed here");
-            /* Parse and remove the statement for error recovery */
-            AsmStatement ();
-            ConsumeSemi ();
-            RemoveGlobalCode ();
-            continue;
-        }
-
-        /* Check for a #pragma */
-        if (CurTok.Tok == TOK_PRAGMA) {
-            DoPragma ();
-            continue;
-        }
-
-        /* Read variable defs and functions */
-        ParseDeclSpec (&Spec, SC_EXTERN | SC_STATIC, T_INT);
-
-        /* Don't accept illegal storage classes */
-        if ((Spec.StorageClass & SC_TYPE) == 0) {
-            if ((Spec.StorageClass & SC_AUTO) != 0 ||
-                (Spec.StorageClass & SC_REGISTER) != 0) {
-                Error ("Illegal storage class");
-                Spec.StorageClass = SC_EXTERN | SC_STATIC;
-            }
-        }
-
-        /* Check if this is only a type declaration */
-        if (CurTok.Tok == TOK_SEMI) {
-            CheckEmptyDecl (&Spec);
-            NextToken ();
-            continue;
-        }
-
-        /* Read declarations for this type */
-        Entry = 0;
-        comma = 0;
-        while (1) {
-
-            Declaration         Decl;
-
-            /* Read the next declaration */
-            ParseDecl (&Spec, &Decl, DM_NEED_IDENT);
-            if (Decl.Ident[0] == '\0') {
-                NextToken ();
-                break;
-            }
-
-            /* Check if we must reserve storage for the variable. We do this,
-            **
-            **   - if it is not a typedef or function,
-            **   - if we don't had a storage class given ("int i")
-            **   - if the storage class is explicitly specified as static,
-            **   - or if there is an initialization.
-            **
-            ** This means that "extern int i;" will not get storage allocated.
-            */
-            if ((Decl.StorageClass & SC_FUNC) != SC_FUNC          &&
-                (Decl.StorageClass & SC_TYPEMASK) != SC_TYPEDEF    &&
-                ((Spec.Flags & DS_DEF_STORAGE) != 0         ||
-                 (Decl.StorageClass & (SC_EXTERN|SC_STATIC)) == SC_STATIC ||
-                 ((Decl.StorageClass & SC_EXTERN) != 0 &&
-                  CurTok.Tok == TOK_ASSIGN))) {
-
-                /* We will allocate storage */
-                Decl.StorageClass |= SC_STORAGE | SC_DEF;
-            }
-
-            /* If this is a function declarator that is not followed by a comma
-            ** or semicolon, it must be followed by a function body. If this is
-            ** the case, convert an empty parameter list into one accepting no
-            ** parameters (same as void) as required by the standard.
-            */
-            if ((Decl.StorageClass & SC_FUNC) != 0 &&
-                (CurTok.Tok != TOK_COMMA)          &&
-                (CurTok.Tok != TOK_SEMI)) {
-
-                FuncDesc* D = GetFuncDesc (Decl.Type);
-                if (D->Flags & FD_EMPTY) {
-                    D->Flags = (D->Flags & ~(FD_EMPTY | FD_VARIADIC)) | FD_VOID_PARAM;
-                }
-            }
-
-            /* Add an entry to the symbol table */
-            Entry = AddGlobalSym (Decl.Ident, Decl.Type, Decl.StorageClass);
-
-            /* Add declaration attributes */
-            SymUseAttr (Entry, &Decl);
-
-            /* Reserve storage for the variable if we need to */
-            if (Decl.StorageClass & SC_STORAGE) {
-
-                /* Get the size of the variable */
-                unsigned Size = SizeOf (Decl.Type);
-
-                /* Allow initialization */
-                if (CurTok.Tok == TOK_ASSIGN) {
-
-                    /* We cannot initialize types of unknown size, or
-                    ** void types in ISO modes.
-                    */
-                    if (Size == 0) {
-                        if (!IsTypeVoid (Decl.Type)) {
-                            if (!IsTypeArray (Decl.Type)) {
-                                /* Size is unknown and not an array */
-                                Error ("Variable `%s' has unknown size", Decl.Ident);
-                            }
-                        } else if (IS_Get (&Standard) != STD_CC65) {
-                            /* We cannot declare variables of type void */
-                            Error ("Illegal type for variable `%s'", Decl.Ident);
-                        }
-                    }
-
-                    /* Switch to the data or rodata segment. For arrays, check
-                     ** the element qualifiers, since not the array but its
-                     ** elements are const.
-                     */
-                    if (IsQualConst (GetBaseElementType (Decl.Type))) {
-                        g_userodata ();
-                    } else {
-                        g_usedata ();
-                    }
-
-                    /* Define a label */
-                    g_defgloblabel (Entry->Name);
-
-                    /* Skip the '=' */
-                    NextToken ();
-
-                    /* Parse the initialization */
-                    ParseInit (Entry->Type);
-                } else {
-
-                    if (IsTypeVoid (Decl.Type)) {
-                        /* We cannot declare variables of type void */
-                        Error ("Illegal type for variable `%s'", Decl.Ident);
-                        Entry->Flags &= ~(SC_STORAGE | SC_DEF);
-                    } else if (Size == 0) {
-                        /* Size is unknown. Is it an array? */
-                        if (!IsTypeArray (Decl.Type)) {
-                            Error ("Variable `%s' has unknown size", Decl.Ident);
-                        }
-                        Entry->Flags &= ~(SC_STORAGE | SC_DEF);
-                    }
-
-                    /* Allocate storage if it is still needed */
-                    if (Entry->Flags & SC_STORAGE) {
-
-                        /* Switch to the BSS segment */
-                        g_usebss ();
-
-                        /* Define a label */
-                        g_defgloblabel (Entry->Name);
-
-                        /* Allocate space for uninitialized variable */
-                        g_res (Size);
-                    }
-                }
-
-            }
-
-            /* Check for end of declaration list */
-            if (CurTok.Tok == TOK_COMMA) {
-                NextToken ();
-                comma = 1;
-            } else {
-                break;
-            }
-        }
-
-        /* Function declaration? */
-        if (Entry && IsTypeFunc (Entry->Type)) {
-
-            /* Function */
-            if (!comma) {
-                if (CurTok.Tok == TOK_SEMI) {
-                    /* Prototype only */
-                    NextToken ();
-                } else {
-
-                    /* Function body. Check for duplicate function definitions */
-                    if (SymIsDef (Entry)) {
-                        Error ("Body for function `%s' has already been defined",
-                               Entry->Name);
-                    }
-
-                    /* Parse the function body */
-                    NewFunc (Entry);
-                }
-            }
-
-        } else {
-
-            /* Must be followed by a semicolon */
-            ConsumeSemi ();
-
-        }
-    }
-}
-
-
-
-void Compile (const char* FileName)
-/* Top level compile routine. Will setup things and call the parser. */
-{
-    char        DateStr[32];
-    char        TimeStr[32];
-    time_t      Time;
-    struct tm*  TM;
-
-    /* Since strftime is locale dependent, we need the abbreviated month names
-    ** in english.
-    */
-    static const char MonthNames[12][4] = {
-        "Jan", "Feb", "Mar", "Apr", "May", "Jun",
-        "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
-    };
-
-    /* Add macros that are always defined */
-    DefineNumericMacro ("__CC65__", GetVersionAsNumber ());
-
-    /* Language standard that is supported */
-    DefineNumericMacro ("__CC65_STD_C89__", STD_C89);
-    DefineNumericMacro ("__CC65_STD_C99__", STD_C99);
-    DefineNumericMacro ("__CC65_STD_CC65__", STD_CC65);
-    DefineNumericMacro ("__CC65_STD__", IS_Get (&Standard));
-
-    /* Optimization macros. Since no source code has been parsed for now, the
-    ** IS_Get functions access the values in effect now, regardless of any
-    ** changes using #pragma later.
-    */
-    if (IS_Get (&Optimize)) {
-        long CodeSize = IS_Get (&CodeSizeFactor);
-        DefineNumericMacro ("__OPT__", 1);
-        if (CodeSize > 100) {
-            DefineNumericMacro ("__OPT_i__", CodeSize);
-        }
-        if (IS_Get (&EnableRegVars)) {
-            DefineNumericMacro ("__OPT_r__", 1);
-        }
-        if (IS_Get (&InlineStdFuncs)) {
-            DefineNumericMacro ("__OPT_s__", 1);
-        }
-    }
-
-    /* __TIME__ and __DATE__ macros */
-    Time = time (0);
-    TM   = localtime (&Time);
-    xsprintf (DateStr, sizeof (DateStr), "\"%s %2d %d\"",
-              MonthNames[TM->tm_mon], TM->tm_mday, TM->tm_year + 1900);
-    strftime (TimeStr, sizeof (TimeStr), "\"%H:%M:%S\"", TM);
-    DefineTextMacro ("__DATE__", DateStr);
-    DefineTextMacro ("__TIME__", TimeStr);
-
-    /* Other standard macros */
-    /* DefineNumericMacro ("__STDC__", 1);      <- not now */
-    DefineNumericMacro ("__STDC_HOSTED__", 1);
-
-    /* Create the base lexical level */
-    EnterGlobalLevel ();
-
-    /* Create the global code and data segments */
-    CreateGlobalSegments ();
-
-    /* Initialize the literal pool */
-    InitLiteralPool ();
-
-    /* Generate the code generator preamble */
-    g_preamble ();
-
-    /* Open the input file */
-    OpenMainFile (FileName);
-
-    /* Are we supposed to compile or just preprocess the input? */
-    if (PreprocessOnly) {
-
-        /* Open the file */
-        OpenOutputFile ();
-
-        /* Preprocess each line and write it to the output file */
-        while (NextLine ()) {
-            Preprocess ();
-            WriteOutput ("%.*s\n", (int) SB_GetLen (Line), SB_GetConstBuf (Line));
-        }
-
-        /* Close the output file */
-        CloseOutputFile ();
-
-    } else {
-
-        /* Ok, start the ball rolling... */
-        Parse ();
-
-    }
-
-    if (Debug) {
-        PrintMacroStats (stdout);
-    }
-
-    /* Print an error report */
-    ErrorReport ();
-}
-
-
-
-void FinishCompile (void)
-/* Emit literals, externals, debug info, do cleanup and optimizations */
-{
-    SymTable* SymTab;
-    SymEntry* Func;
-
-    /* Walk over all functions, doing cleanup, optimizations ... */
-    SymTab = GetGlobalSymTab ();
-    Func   = SymTab->SymHead;
-    while (Func) {
-        if (SymIsOutputFunc (Func)) {
-            /* Function which is defined and referenced or extern */
-            MoveLiteralPool (Func->V.F.LitPool);
-            CS_MergeLabels (Func->V.F.Seg->Code);
-            RunOpt (Func->V.F.Seg->Code);
-        }
-        Func = Func->NextSym;
-    }
-
-    /* Output the literal pool */
-    OutputLiteralPool ();
-
-    /* Emit debug infos if enabled */
-    EmitDebugInfo ();
-
-    /* Write imported/exported symbols */
-    EmitExternals ();
-
-    /* Leave the main lexical level */
-    LeaveGlobalLevel ();
-}
diff --git a/src/cc65/compile.h b/src/cc65/compile.h
deleted file mode 100644 (file)
index 2d15c82..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 compile.h                                 */
-/*                                                                           */
-/*                       Top level compiler subroutine                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef COMPILE_H
-#define COMPILE_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Compile (const char* FileName);
-/* Top level compile routine. Will setup things and call the parser. */
-
-void FinishCompile (void);
-/* Emit literals, externals, do cleanup and optimizations */
-
-
-
-/* End of compile.h */
-
-#endif
diff --git a/src/cc65/coptadd.c b/src/cc65/coptadd.c
deleted file mode 100644 (file)
index 07bd2bf..0000000
+++ /dev/null
@@ -1,555 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 coptadd.c                                 */
-/*                                                                           */
-/*                        Optimize addition sequences                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2005, Ullrich von Bassewitz                                      */
-/*                Römerstrasse 52                                            */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "chartype.h"
-
-/* cc65 */
-#include "codeent.h"
-#include "codeinfo.h"
-#include "coptadd.h"
-
-
-
-/*****************************************************************************/
-/*                            Optimize additions                             */
-/*****************************************************************************/
-
-
-
-unsigned OptAdd1 (CodeSeg* S)
-/* Search for the sequence
-**
-**      ldy     #xx
-**      jsr     ldaxysp
-**      jsr     pushax
-**      ldy     #yy
-**      jsr     ldaxysp
-**      jsr     tosaddax
-**
-** and replace it by:
-**
-**      ldy     #xx-1
-**      lda     (sp),y
-**      ldy     #yy-3
-**      clc
-**      adc     (sp),y
-**      pha
-**      ldy     #xx
-**      lda     (sp),y
-**      ldy     #yy-2
-**      adc     (sp),y
-**      tax
-**      pla
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[6];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_LDY            &&
-            CE_IsConstImm (L[0])             &&
-            !CS_RangeHasLabel (S, I+1, 5)    &&
-            CS_GetEntries (S, L+1, I+1, 5)   &&
-            CE_IsCallTo (L[1], "ldaxysp")    &&
-            CE_IsCallTo (L[2], "pushax")     &&
-            L[3]->OPC == OP65_LDY            &&
-            CE_IsConstImm (L[3])             &&
-            CE_IsCallTo (L[4], "ldaxysp")    &&
-            CE_IsCallTo (L[5], "tosaddax")) {
-
-            CodeEntry* X;
-            const char* Arg;
-
-            /* Correct the stack of the first Y register load */
-            CE_SetNumArg (L[0], L[0]->Num - 1);
-
-            /* lda (sp),y */
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+1);
-
-            /* ldy #yy-3 */
-            Arg = MakeHexArg (L[3]->Num - 3);
-            X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[4]->LI);
-            CS_InsertEntry (S, X, I+2);
-
-            /* clc */
-            X = NewCodeEntry (OP65_CLC, AM65_IMP, 0, 0, L[5]->LI);
-            CS_InsertEntry (S, X, I+3);
-
-            /* adc (sp),y */
-            X = NewCodeEntry (OP65_ADC, AM65_ZP_INDY, "sp", 0, L[5]->LI);
-            CS_InsertEntry (S, X, I+4);
-
-            /* pha */
-            X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, L[5]->LI);
-            CS_InsertEntry (S, X, I+5);
-
-            /* ldy #xx (beware: L[0] has changed) */
-            Arg = MakeHexArg (L[0]->Num + 1);
-            X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+6);
-
-            /* lda (sp),y */
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+7);
-
-            /* ldy #yy-2 */
-            Arg = MakeHexArg (L[3]->Num - 2);
-            X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[4]->LI);
-            CS_InsertEntry (S, X, I+8);
-
-            /* adc (sp),y */
-            X = NewCodeEntry (OP65_ADC, AM65_ZP_INDY, "sp", 0, L[5]->LI);
-            CS_InsertEntry (S, X, I+9);
-
-            /* tax */
-            X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, L[5]->LI);
-            CS_InsertEntry (S, X, I+10);
-
-            /* pla */
-            X = NewCodeEntry (OP65_PLA, AM65_IMP, 0, 0, L[5]->LI);
-            CS_InsertEntry (S, X, I+11);
-
-            /* Delete the old code */
-            CS_DelEntries (S, I+12, 5);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptAdd2 (CodeSeg* S)
-/* Search for the sequence
-**
-**      ldy     #xx
-**      jsr     ldaxysp
-**      ldy     #yy
-**      jsr     addeqysp
-**
-** and replace it by:
-**
-**      ldy     #xx-1
-**      lda     (sp),y
-**      ldy     #yy
-**      clc
-**      adc     (sp),y
-**      sta     (sp),y
-**      ldy     #xx
-**      lda     (sp),y
-**      ldy     #yy+1
-**      adc     (sp),y
-**      sta     (sp),y
-**
-** provided that a/x is not used later.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[4];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_LDY               &&
-            CE_IsConstImm (L[0])                &&
-            !CS_RangeHasLabel (S, I+1, 3)       &&
-            CS_GetEntries (S, L+1, I+1, 3)      &&
-            CE_IsCallTo (L[1], "ldaxysp")       &&
-            L[2]->OPC == OP65_LDY               &&
-            CE_IsConstImm (L[2])                &&
-            CE_IsCallTo (L[3], "addeqysp")      &&
-            (GetRegInfo (S, I+4, REG_AX) & REG_AX) == 0) {
-
-            /* Insert new code behind the addeqysp */
-            const char* Arg;
-            CodeEntry* X;
-
-            /* ldy     #xx-1 */
-            Arg = MakeHexArg (L[0]->Num-1);
-            X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+4);
-
-            /* lda     (sp),y */
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+5);
-
-            /* ldy     #yy */
-            X = NewCodeEntry (OP65_LDY, AM65_IMM, L[2]->Arg, 0, L[2]->LI);
-            CS_InsertEntry (S, X, I+6);
-
-            /* clc */
-            X = NewCodeEntry (OP65_CLC, AM65_IMP, 0, 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+7);
-
-            /* adc     (sp),y */
-            X = NewCodeEntry (OP65_ADC, AM65_ZP_INDY, "sp", 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+8);
-
-            /* sta     (sp),y */
-            X = NewCodeEntry (OP65_STA, AM65_ZP_INDY, "sp", 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+9);
-
-            /* ldy     #xx */
-            X = NewCodeEntry (OP65_LDY, AM65_IMM, L[0]->Arg, 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+10);
-
-            /* lda     (sp),y */
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+11);
-
-            /* ldy     #yy+1 */
-            Arg = MakeHexArg (L[2]->Num+1);
-            X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[2]->LI);
-            CS_InsertEntry (S, X, I+12);
-
-            /* adc     (sp),y */
-            X = NewCodeEntry (OP65_ADC, AM65_ZP_INDY, "sp", 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+13);
-
-            /* sta     (sp),y */
-            X = NewCodeEntry (OP65_STA, AM65_ZP_INDY, "sp", 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+14);
-
-            /* Delete the old code */
-            CS_DelEntries (S, I, 4);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptAdd3 (CodeSeg* S)
-/* Search for the sequence
-**
-**      jsr     pushax
-**      ldx     #$00
-**      lda     xxx
-**      jsr     tosaddax
-**
-** and replace it by
-**
-**      clc
-**      adc     xxx
-**      bcc     L1
-**      inx
-** L1:
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[5];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (CE_IsCallTo (L[0], "pushax")                        &&
-            CS_GetEntries (S, L+1, I+1, 4)                      &&
-            !CS_RangeHasLabel (S, I+1, 3)                       &&
-            L[1]->OPC == OP65_LDX                               &&
-            CE_IsKnownImm (L[1], 0)                             &&
-            L[2]->OPC == OP65_LDA                               &&
-            CE_IsCallTo (L[3], "tosaddax")) {
-
-            CodeEntry* X;
-            CodeLabel* Label;
-
-            /* Insert new code behind the sequence */
-            X = NewCodeEntry (OP65_CLC, AM65_IMP, 0, 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+4);
-
-            /* adc xxx */
-            X = NewCodeEntry (OP65_ADC, L[2]->AM, L[2]->Arg, 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+5);
-
-            /* bcc L1 */
-            Label = CS_GenLabel (S, L[4]);
-            X = NewCodeEntry (OP65_BCC, AM65_BRA, Label->Name, Label, L[3]->LI);
-            CS_InsertEntry (S, X, I+6);
-
-            /* inx */
-            X = NewCodeEntry (OP65_INX, AM65_IMP, 0, 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+7);
-
-            /* Delete the old code */
-            CS_DelEntries (S, I, 4);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptAdd4 (CodeSeg* S)
-/* Search for the sequence
-**
-**      jsr     pushax
-**      lda     xxx
-**      ldx     yyy
-**      jsr     tosaddax
-**
-** and replace it by
-**
-**      clc
-**      adc     xxx
-**      pha
-**      txa
-**      adc     yyy
-**      tax
-**      pla
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[4];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (CE_IsCallTo (L[0], "pushax")                        &&
-            CS_GetEntries (S, L+1, I+1, 3)                      &&
-            !CS_RangeHasLabel (S, I+1, 3)                       &&
-            L[1]->OPC == OP65_LDA                               &&
-            (L[1]->AM == AM65_ABS || L[1]->AM == AM65_ZP)       &&
-            L[2]->OPC == OP65_LDX                               &&
-            (L[2]->AM == AM65_ABS || L[2]->AM == AM65_ZP)       &&
-            CE_IsCallTo (L[3], "tosaddax")) {
-
-            CodeEntry* X;
-
-            /* Insert new code behind the sequence */
-            X = NewCodeEntry (OP65_CLC, AM65_IMP, 0, 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+4);
-
-            /* adc xxx */
-            X = NewCodeEntry (OP65_ADC, L[1]->AM, L[1]->Arg, 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+5);
-
-            /* pha */
-            X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+6);
-
-            /* txa */
-            X = NewCodeEntry (OP65_TXA, AM65_IMP, 0, 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+7);
-
-            /* adc yyy */
-            X = NewCodeEntry (OP65_ADC, L[2]->AM, L[2]->Arg, 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+8);
-
-            /* tax */
-            X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+9);
-
-            /* pla */
-            X = NewCodeEntry (OP65_PLA, AM65_IMP, 0, 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+10);
-
-            /* Delete the old code */
-            CS_DelEntries (S, I, 4);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptAdd5 (CodeSeg* S)
-/* Search for a call to incaxn and replace it by an 8 bit add if the X register
-** is not used later.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* E;
-
-        /* Get next entry */
-        E = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (E->OPC == OP65_JSR                          &&
-            strncmp (E->Arg, "incax", 5) == 0           &&
-            IsDigit (E->Arg[5])                         &&
-            E->Arg[6] == '\0'                           &&
-            !RegXUsed (S, I+1)) {
-
-            CodeEntry* X;
-            const char* Arg;
-
-            /* Insert new code behind the sequence */
-            X = NewCodeEntry (OP65_CLC, AM65_IMP, 0, 0, E->LI);
-            CS_InsertEntry (S, X, I+1);
-
-            Arg = MakeHexArg (E->Arg[5] - '0');
-            X = NewCodeEntry (OP65_ADC, AM65_IMM, Arg, 0, E->LI);
-            CS_InsertEntry (S, X, I+2);
-
-            /* Delete the old code */
-            CS_DelEntry (S, I);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptAdd6 (CodeSeg* S)
-/* Search for the sequence
-**
-**      adc     ...
-**      bcc     L
-**      inx
-** L:
-**
-** and remove the handling of the high byte if X is not used later.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[3];
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (E->OPC == OP65_ADC                               &&
-            CS_GetEntries (S, L, I+1, 3)                     &&
-            (L[0]->OPC == OP65_BCC || L[0]->OPC == OP65_JCC) &&
-            L[0]->JumpTo != 0                                &&
-            !CE_HasLabel (L[0])                              &&
-            L[1]->OPC == OP65_INX                            &&
-            !CE_HasLabel (L[1])                              &&
-            L[0]->JumpTo->Owner == L[2]                      &&
-            !RegXUsed (S, I+3)) {
-
-            /* Remove the bcs/dex */
-            CS_DelEntries (S, I+1, 2);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
diff --git a/src/cc65/coptadd.h b/src/cc65/coptadd.h
deleted file mode 100644 (file)
index e4df3b3..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 coptadd.h                                 */
-/*                                                                           */
-/*                        Optimize addition sequences                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2005, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef COPTADD_H
-#define COPTADD_H
-
-
-
-/* cc65 */
-#include "codeseg.h"
-
-
-
-/*****************************************************************************/
-/*                            Optimize additions                             */
-/*****************************************************************************/
-
-
-
-unsigned OptAdd1 (CodeSeg* S);
-/* Search for the sequence
-**
-**      jsr     pushax
-**      ldy     xxx
-**      ldx     #$00
-**      lda     (sp),y
-**      jsr     tosaddax
-**
-** and replace it by:
-**
-**      ldy     xxx-2
-**      clc
-**      adc     (sp),y
-**      bcc     L
-**      inx
-** L:
-*/
-
-unsigned OptAdd2 (CodeSeg* S);
-/* Search for the sequence
-**
-**      ldy     #xx
-**      lda     (sp),y
-**      tax
-**      dey
-**      lda     (sp),y
-**      ldy     #$yy
-**      jsr     addeqysp
-**
-** and replace it by:
-**
-**      ldy     #xx-1
-**      lda     (sp),y
-**      ldy     #yy
-**      clc
-**      adc     (sp),y
-**      sta     (sp),y
-**      ldy     #xx
-**      lda     (sp),y
-**      ldy     #yy+1
-**      adc     (sp),y
-**      sta     (sp),y
-**
-** provided that a/x is not used later.
-*/
-
-unsigned OptAdd3 (CodeSeg* S);
-/* Search for the sequence
-**
-**      jsr     pushax
-**      ldx     #$00
-**      lda     xxx
-**      jsr     tosaddax
-**
-** and replace it by
-**
-**      clc
-**      adc     xxx
-**      bcc     L1
-**      inx
-** L1:
-*/
-
-unsigned OptAdd4 (CodeSeg* S);
-/* Search for the sequence
-**
-**      jsr     pushax
-**      lda     xxx
-**      ldx     yyy
-**      jsr     tosaddax
-**
-** and replace it by
-**
-**      clc
-**      adc     xxx
-**      pha
-**      txa
-**      adc     yyy
-**      tax
-**      pla
-*/
-
-unsigned OptAdd5 (CodeSeg* S);
-/* Search for a call to incaxn and replace it by an 8 bit add if the X register
-** is not used later.
-*/
-
-unsigned OptAdd6 (CodeSeg* S);
-/* Search for the sequence
-**
-**      adc     ...
-**      bcc     L
-**      inx
-** L:
-**
-** and remove the handling of the high byte if X is not used later.
-*/
-
-
-
-/* End of coptadd.h */
-
-#endif
diff --git a/src/cc65/coptc02.c b/src/cc65/coptc02.c
deleted file mode 100644 (file)
index 71da5ef..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 coptc02.h                                 */
-/*                                                                           */
-/*                       65C02 specific optimizations                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2012, Ullrich von Bassewitz                                      */
-/*                Roeerstrasse 52                                            */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* cc65 */
-#include "codeent.h"
-#include "codeinfo.h"
-#include "error.h"
-#include "coptc02.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/*****************************************************************************/
-/*                             Helper functions                              */
-/*****************************************************************************/
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned Opt65C02Ind (CodeSeg* S)
-/* Try to use the indirect addressing mode where possible */
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for addressing mode indirect indexed Y where Y is zero.
-        ** Note: All opcodes that are available as (zp),y are also available
-        ** as (zp), so we can ignore the actual opcode here.
-        */
-        if (E->AM == AM65_ZP_INDY && E->RI->In.RegY == 0) {
-
-            /* Replace it by indirect addressing mode */
-            CodeEntry* X = NewCodeEntry (E->OPC, AM65_ZP_IND, E->Arg, 0, E->LI);
-            CS_InsertEntry (S, X, I+1);
-            CS_DelEntry (S, I);
-
-            /* We had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned Opt65C02BitOps (CodeSeg* S)
-/* Use special bit op instructions of the C02 */
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[3];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_LDA                               &&
-            (L[0]->AM == AM65_ZP || L[0]->AM == AM65_ABS)       &&
-            !CS_RangeHasLabel (S, I+1, 2)                       &&
-            CS_GetEntries (S, L+1, I+1, 2)                      &&
-            (L[1]->OPC == OP65_AND || L[1]->OPC == OP65_ORA)    &&
-            CE_IsConstImm (L[1])                                &&
-            L[2]->OPC == OP65_STA                               &&
-            L[2]->AM == L[0]->AM                                &&
-            strcmp (L[2]->Arg, L[0]->Arg) == 0                  &&
-            !RegAUsed (S, I+3)) {
-
-            char Buf[32];
-            CodeEntry* X;
-
-            /* Use TRB for AND and TSB for ORA */
-            if (L[1]->OPC == OP65_AND) {
-
-                /* LDA #XX */
-                sprintf (Buf, "$%02X", (int) ((~L[1]->Num) & 0xFF));
-                X = NewCodeEntry (OP65_LDA, AM65_IMM, Buf, 0, L[1]->LI);
-                CS_InsertEntry (S, X, I+3);
-
-                /* TRB */
-                X = NewCodeEntry (OP65_TRB, L[0]->AM, L[0]->Arg, 0, L[0]->LI);
-                CS_InsertEntry (S, X, I+4);
-
-            } else {
-
-                /* LDA #XX */
-                sprintf (Buf, "$%02X", (int) L[1]->Num);
-                X = NewCodeEntry (OP65_LDA, AM65_IMM, Buf, 0, L[1]->LI);
-                CS_InsertEntry (S, X, I+3);
-
-                /* TSB */
-                X = NewCodeEntry (OP65_TSB, L[0]->AM, L[0]->Arg, 0, L[0]->LI);
-                CS_InsertEntry (S, X, I+4);
-            }
-
-            /* Delete the old stuff */
-            CS_DelEntries (S, I, 3);
-
-            /* We had changes */
-            ++Changes;
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned Opt65C02Stores (CodeSeg* S)
-/* Use STZ where possible */
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for a store with a register value of zero and an addressing
-        ** mode available with STZ.
-        */
-        if (((E->OPC == OP65_STA && E->RI->In.RegA == 0) ||
-             (E->OPC == OP65_STX && E->RI->In.RegX == 0) ||
-             (E->OPC == OP65_STY && E->RI->In.RegY == 0))       &&
-            (E->AM == AM65_ZP  || E->AM == AM65_ABS ||
-             E->AM == AM65_ZPX || E->AM == AM65_ABSX)) {
-
-            /* Replace by STZ */
-            CodeEntry* X = NewCodeEntry (OP65_STZ, E->AM, E->Arg, 0, E->LI);
-            CS_InsertEntry (S, X, I+1);
-
-            /* Delete the old stuff */
-            CS_DelEntry (S, I);
-
-            /* We had changes */
-            ++Changes;
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
diff --git a/src/cc65/coptc02.h b/src/cc65/coptc02.h
deleted file mode 100644 (file)
index 2056693..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 coptc02.h                                 */
-/*                                                                           */
-/*                       65C02 specific optimizations                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2002 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef COPTC02_H
-#define COPTC02_H
-
-
-
-/* cc65 */
-#include "codeseg.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned Opt65C02Ind (CodeSeg* S);
-/* Try to use the indirect addressing mode where possible */
-
-unsigned Opt65C02BitOps (CodeSeg* S);
-/* Use special bit op instructions of the C02 */
-
-unsigned Opt65C02Stores (CodeSeg* S);
-/* Use STZ where possible */
-
-
-
-/* End of coptc02.h */
-
-#endif
diff --git a/src/cc65/coptcmp.c b/src/cc65/coptcmp.c
deleted file mode 100644 (file)
index 9e9c205..0000000
+++ /dev/null
@@ -1,973 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 coptcmp.c                                 */
-/*                                                                           */
-/*                             Optimize compares                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* cc65 */
-#include "codeent.h"
-#include "codeinfo.h"
-#include "error.h"
-#include "coptcmp.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Table used to invert a condition, indexed by condition */
-static const unsigned char CmpInvertTab [] = {
-    CMP_NE, CMP_EQ,
-    CMP_LE, CMP_LT, CMP_GE, CMP_GT,
-    CMP_ULE, CMP_ULT, CMP_UGE, CMP_UGT
-};
-
-
-
-/*****************************************************************************/
-/*                             Helper functions                              */
-/*****************************************************************************/
-
-
-
-static void ReplaceCmp (CodeSeg* S, unsigned I, cmp_t Cond)
-/* Helper function for the replacement of routines that return a boolean
-** followed by a conditional jump. Instead of the boolean value, the condition
-** codes are evaluated directly.
-** I is the index of the conditional branch, the sequence is already checked
-** to be correct.
-*/
-{
-    CodeEntry* N;
-    CodeLabel* L;
-
-    /* Get the entry */
-    CodeEntry* E = CS_GetEntry (S, I);
-
-    /* Replace the conditional branch */
-    switch (Cond) {
-
-        case CMP_EQ:
-            CE_ReplaceOPC (E, OP65_JEQ);
-            break;
-
-        case CMP_NE:
-            CE_ReplaceOPC (E, OP65_JNE);
-            break;
-
-        case CMP_GT:
-            /* Replace by
-            **     beq @L
-            **     jpl Target
-            ** @L: ...
-            */
-            if ((N = CS_GetNextEntry (S, I)) == 0) {
-                /* No such entry */
-                Internal ("Invalid program flow");
-            }
-            L = CS_GenLabel (S, N);
-            N = NewCodeEntry (OP65_BEQ, AM65_BRA, L->Name, L, E->LI);
-            CS_InsertEntry (S, N, I);
-            CE_ReplaceOPC (E, OP65_JPL);
-            break;
-
-        case CMP_GE:
-            CE_ReplaceOPC (E, OP65_JPL);
-            break;
-
-        case CMP_LT:
-            CE_ReplaceOPC (E, OP65_JMI);
-            break;
-
-        case CMP_LE:
-            /* Replace by
-            **     jmi Target
-            **     jeq Target
-            */
-            CE_ReplaceOPC (E, OP65_JMI);
-            L = E->JumpTo;
-            N = NewCodeEntry (OP65_JEQ, AM65_BRA, L->Name, L, E->LI);
-            CS_InsertEntry (S, N, I+1);
-            break;
-
-        case CMP_UGT:
-            /* Replace by
-            **     beq @L
-            **     jcs Target
-            ** @L: ...
-            */
-            if ((N = CS_GetNextEntry (S, I)) == 0) {
-                /* No such entry */
-                Internal ("Invalid program flow");
-            }
-            L = CS_GenLabel (S, N);
-            N = NewCodeEntry (OP65_BEQ, AM65_BRA, L->Name, L, E->LI);
-            CS_InsertEntry (S, N, I);
-            CE_ReplaceOPC (E, OP65_JCS);
-            break;
-
-        case CMP_UGE:
-            CE_ReplaceOPC (E, OP65_JCS);
-            break;
-
-        case CMP_ULT:
-            CE_ReplaceOPC (E, OP65_JCC);
-            break;
-
-        case CMP_ULE:
-            /* Replace by
-            **     jcc Target
-            **     jeq Target
-            */
-            CE_ReplaceOPC (E, OP65_JCC);
-            L = E->JumpTo;
-            N = NewCodeEntry (OP65_JEQ, AM65_BRA, L->Name, L, E->LI);
-            CS_InsertEntry (S, N, I+1);
-            break;
-
-        default:
-            Internal ("Unknown jump condition: %d", Cond);
-
-    }
-
-}
-
-
-
-static int IsImmCmp16 (CodeEntry** L)
-/* Check if the instructions at L are an immediate compare of a/x:
-**
-**
-*/
-{
-    return (L[0]->OPC == OP65_CPX                              &&
-            L[0]->AM == AM65_IMM                               &&
-            (L[0]->Flags & CEF_NUMARG) != 0                    &&
-            !CE_HasLabel (L[0])                                &&
-            (L[1]->OPC == OP65_JNE || L[1]->OPC == OP65_BNE)   &&
-            L[1]->JumpTo != 0                                  &&
-            !CE_HasLabel (L[1])                                &&
-            L[2]->OPC == OP65_CMP                              &&
-            L[2]->AM == AM65_IMM                               &&
-            (L[2]->Flags & CEF_NUMARG) != 0                    &&
-            (L[3]->Info & OF_CBRA) != 0                        &&
-            L[3]->JumpTo != 0                                  &&
-            (L[1]->JumpTo->Owner == L[3] || L[1]->JumpTo == L[3]->JumpTo));
-}
-
-
-
-static int GetCmpRegVal (const CodeEntry* E)
-/* Return the register value for an immediate compare */
-{
-    switch (E->OPC) {
-        case OP65_CMP: return E->RI->In.RegA;
-        case OP65_CPX: return E->RI->In.RegX;
-        case OP65_CPY: return E->RI->In.RegY;
-        default:       Internal ("Invalid opcode in GetCmpRegVal");
-                       return 0;  /* Not reached */
-    }
-}
-
-
-
-/*****************************************************************************/
-/*             Remove calls to the bool transformer subroutines              */
-/*****************************************************************************/
-
-
-
-unsigned OptBoolTrans (CodeSeg* S)
-/* Try to remove the call to boolean transformer routines where the call is
-** not really needed.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* N;
-        cmp_t Cond;
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for a boolean transformer */
-        if (E->OPC == OP65_JSR                           &&
-            (Cond = FindBoolCmpCond (E->Arg)) != CMP_INV &&
-            (N = CS_GetNextEntry (S, I)) != 0            &&
-            (N->Info & OF_ZBRA) != 0) {
-
-            /* Make the boolean transformer unnecessary by changing the
-            ** the conditional jump to evaluate the condition flags that
-            ** are set after the compare directly. Note: jeq jumps if
-            ** the condition is not met, jne jumps if the condition is met.
-            ** Invert the code if we jump on condition not met.
-            */
-            if (GetBranchCond (N->OPC) == BC_EQ) {
-                /* Jumps if condition false, invert condition */
-                Cond = CmpInvertTab [Cond];
-            }
-
-            /* Check if we can replace the code by something better */
-            ReplaceCmp (S, I+1, Cond);
-
-            /* Remove the call to the bool transformer */
-            CS_DelEntry (S, I);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-/*****************************************************************************/
-/*                        Optimizations for compares                         */
-/*****************************************************************************/
-
-
-
-unsigned OptCmp1 (CodeSeg* S)
-/* Search for the sequence
-**
-**      ldx     xx
-**      stx     tmp1
-**      ora     tmp1
-**
-** and replace it by
-**
-**      ora     xx
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[3];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_LDX               &&
-            !CS_RangeHasLabel (S, I+1, 2)       &&
-            CS_GetEntries (S, L+1, I+1, 2)      &&
-            L[1]->OPC == OP65_STX               &&
-            strcmp (L[1]->Arg, "tmp1") == 0     &&
-            L[2]->OPC == OP65_ORA               &&
-            strcmp (L[2]->Arg, "tmp1") == 0) {
-
-            CodeEntry* X;
-
-            /* Insert the ora instead */
-            X = NewCodeEntry (OP65_ORA, L[0]->AM, L[0]->Arg, 0, L[0]->LI);
-            CS_InsertEntry (S, X, I);
-
-            /* Remove all other instructions */
-            CS_DelEntries (S, I+1, 3);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptCmp2 (CodeSeg* S)
-/* Search for the sequence
-**
-**      stx     xx
-**      stx     tmp1
-**      ora     tmp1
-**
-** and replace it by
-**
-**      stx     xx
-**      ora     xx
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[2];
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (E->OPC == OP65_STX                  &&
-            !CS_RangeHasLabel (S, I+1, 2)       &&
-            CS_GetEntries (S, L, I+1, 2)        &&
-            L[0]->OPC == OP65_STX               &&
-            strcmp (L[0]->Arg, "tmp1") == 0     &&
-            L[1]->OPC == OP65_ORA               &&
-            strcmp (L[1]->Arg, "tmp1") == 0) {
-
-            /* Remove the remaining instructions */
-            CS_DelEntries (S, I+1, 2);
-
-            /* Insert the ora instead */
-            CS_InsertEntry (S, NewCodeEntry (OP65_ORA, E->AM, E->Arg, 0, E->LI), I+1);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptCmp3 (CodeSeg* S)
-/* Search for
-**
-**      lda/and/ora/eor ...
-**      cmp #$00
-**      jeq/jne
-** or
-**      lda/and/ora/eor ...
-**      cmp #$00
-**      jsr boolxx
-**
-** and remove the cmp.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[3];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if ((L[0]->OPC == OP65_ADC ||
-             L[0]->OPC == OP65_AND ||
-             L[0]->OPC == OP65_ASL ||
-             L[0]->OPC == OP65_DEA ||
-             L[0]->OPC == OP65_EOR ||
-             L[0]->OPC == OP65_INA ||
-             L[0]->OPC == OP65_LDA ||
-             L[0]->OPC == OP65_LSR ||
-             L[0]->OPC == OP65_ORA ||
-             L[0]->OPC == OP65_PLA ||
-             L[0]->OPC == OP65_SBC ||
-             L[0]->OPC == OP65_TXA ||
-             L[0]->OPC == OP65_TYA)         &&
-            !CS_RangeHasLabel (S, I+1, 2)   &&
-            CS_GetEntries (S, L+1, I+1, 2)  &&
-            L[1]->OPC == OP65_CMP           &&
-            CE_IsKnownImm (L[1], 0)) {
-
-            int Delete = 0;
-
-            /* Check for the call to boolxx. We only remove the compare if
-            ** the carry flag is not evaluated later, because the load will
-            ** not set the carry flag.
-            */
-            if (L[2]->OPC == OP65_JSR) {
-                switch (FindBoolCmpCond (L[2]->Arg)) {
-
-                    case CMP_EQ:
-                    case CMP_NE:
-                    case CMP_GT:
-                    case CMP_GE:
-                    case CMP_LT:
-                    case CMP_LE:
-                        /* Remove the compare */
-                        Delete = 1;
-                        break;
-
-                    case CMP_UGT:
-                    case CMP_UGE:
-                    case CMP_ULT:
-                    case CMP_ULE:
-                    case CMP_INV:
-                        /* Leave it alone */
-                        break;
-                }
-
-            } else if ((L[2]->Info & OF_FBRA) != 0) {
-                /* The following insn branches on the condition of the load,
-                ** so the compare instruction might be removed. For safety,
-                ** do some more checks if the carry isn't used later, since
-                ** the compare does set the carry, but the load does not.
-                */
-                CodeEntry* E;
-                CodeEntry* N;
-                if ((E = CS_GetNextEntry (S, I+2)) != 0         &&
-                    L[2]->JumpTo != 0                           &&
-                    (N = L[2]->JumpTo->Owner) != 0              &&
-                    N->OPC != OP65_BCC                          &&
-                    N->OPC != OP65_BCS                          &&
-                    N->OPC != OP65_JCC                          &&
-                    N->OPC != OP65_JCS                          &&
-                    (N->OPC != OP65_JSR                 ||
-                    FindBoolCmpCond (N->Arg) == CMP_INV)) {
-
-                    /* The following insn branches on the condition of a load,
-                    ** and there's no use of the carry flag in sight, so the
-                    ** compare instruction can be removed.
-                    */
-                    Delete = 1;
-                }
-            }
-
-            /* Delete the compare if we can */
-            if (Delete) {
-                CS_DelEntry (S, I+1);
-                ++Changes;
-            }
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptCmp4 (CodeSeg* S)
-/* Search for
-**
-**      lda     x
-**      ldx     y
-**      cpx     #a
-**      bne     L1
-**      cmp     #b
-** L1:  jne/jeq L2
-**
-** If a is zero, we may remove the compare. If a and b are both zero, we may
-** replace it by the sequence
-**
-**      lda     x
-**      ora     x+1
-**      jne/jeq ...
-**
-** L1 may be either the label at the branch instruction, or the target label
-** of this instruction.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[5];
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (E->OPC == OP65_LDA               &&
-            CS_GetEntries (S, L, I+1, 5)     &&
-            L[0]->OPC == OP65_LDX            &&
-            !CE_HasLabel (L[0])              &&
-            IsImmCmp16 (L+1)                 &&
-            !RegAXUsed (S, I+6)) {
-
-            if ((L[4]->Info & OF_FBRA) != 0 && L[1]->Num == 0 && L[3]->Num == 0) {
-                /* The value is zero, we may use the simple code version. */
-                CE_ReplaceOPC (L[0], OP65_ORA);
-                CS_DelEntries (S, I+2, 3);
-            } else {
-                /* Move the lda instruction after the first branch. This will
-                ** improve speed, since the load is delayed after the first
-                ** test.
-                */
-                CS_MoveEntry (S, I, I+4);
-
-                /* We will replace the ldx/cpx by lda/cmp */
-                CE_ReplaceOPC (L[0], OP65_LDA);
-                CE_ReplaceOPC (L[1], OP65_CMP);
-
-                /* Beware: If the first LDA instruction had a label, we have
-                ** to move this label to the top of the sequence again.
-                */
-                if (CE_HasLabel (E)) {
-                    CS_MoveLabels (S, E, L[0]);
-                }
-
-            }
-
-            ++Changes;
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptCmp5 (CodeSeg* S)
-/* Optimize compares of local variables:
-**
-**      ldy     #o
-**      jsr     ldaxysp
-**      cpx     #a
-**      bne     L1
-**      cmp     #b
-**      jne/jeq L2
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[6];
-
-        /* Get the next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_LDY           &&
-            CE_IsConstImm (L[0])            &&
-            CS_GetEntries (S, L+1, I+1, 5)  &&
-            !CE_HasLabel (L[1])             &&
-            CE_IsCallTo (L[1], "ldaxysp")   &&
-            IsImmCmp16 (L+2)) {
-
-            if ((L[5]->Info & OF_FBRA) != 0 && L[2]->Num == 0 && L[4]->Num == 0) {
-
-                CodeEntry* X;
-                char Buf[20];
-
-                /* The value is zero, we may use the simple code version:
-                **      ldy     #o-1
-                **      lda     (sp),y
-                **      ldy     #o
-                **      ora     (sp),y
-                **      jne/jeq ...
-                */
-                sprintf (Buf, "$%02X", (int)(L[0]->Num-1));
-                X = NewCodeEntry (OP65_LDY, AM65_IMM, Buf, 0, L[0]->LI);
-                CS_InsertEntry (S, X, I+1);
-
-                X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
-                CS_InsertEntry (S, X, I+2);
-
-                X = NewCodeEntry (OP65_LDY, AM65_IMM, L[0]->Arg, 0, L[0]->LI);
-                CS_InsertEntry (S, X, I+3);
-
-                X = NewCodeEntry (OP65_ORA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
-                CS_InsertEntry (S, X, I+4);
-
-                CS_DelEntries (S, I+5, 3);   /* cpx/bne/cmp */
-                CS_DelEntry (S, I);          /* ldy */
-
-            } else {
-
-                CodeEntry* X;
-                char Buf[20];
-
-                /* Change the code to just use the A register. Move the load
-                ** of the low byte after the first branch if possible:
-                **
-                **      ldy     #o
-                **      lda     (sp),y
-                **      cmp     #a
-                **      bne     L1
-                **      ldy     #o-1
-                **      lda     (sp),y
-                **      cmp     #b
-                **      jne/jeq ...
-                */
-                X = NewCodeEntry (OP65_LDY, AM65_IMM, L[0]->Arg, 0, L[0]->LI);
-                CS_InsertEntry (S, X, I+3);
-
-                X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
-                CS_InsertEntry (S, X, I+4);
-
-                X = NewCodeEntry (OP65_CMP, L[2]->AM, L[2]->Arg, 0, L[2]->LI);
-                CS_InsertEntry (S, X, I+5);
-
-                sprintf (Buf, "$%02X", (int)(L[0]->Num-1));
-                X = NewCodeEntry (OP65_LDY, AM65_IMM, Buf, 0, L[0]->LI);
-                CS_InsertEntry (S, X, I+7);
-
-                X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
-                CS_InsertEntry (S, X, I+8);
-
-                CS_DelEntries (S, I, 3);          /* ldy/jsr/cpx */
-
-            }
-
-            ++Changes;
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptCmp6 (CodeSeg* S)
-/* Search for calls to compare subroutines followed by a conditional branch
-** and replace them by cheaper versions, since the branch means that the
-** boolean value returned by these routines is not needed (we may also check
-** that explicitly, but for the current code generator it is always true).
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* N;
-        cmp_t Cond;
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (E->OPC == OP65_JSR                          &&
-            (Cond = FindTosCmpCond (E->Arg)) != CMP_INV &&
-            (N = CS_GetNextEntry (S, I)) != 0           &&
-            (N->Info & OF_ZBRA) != 0                    &&
-            !CE_HasLabel (N)) {
-
-            /* The tos... functions will return a boolean value in a/x and
-            ** the Z flag says if this value is zero or not. We will call
-            ** a cheaper subroutine instead, one that does not return a
-            ** boolean value but only valid flags. Note: jeq jumps if
-            ** the condition is not met, jne jumps if the condition is met.
-            ** Invert the code if we jump on condition not met.
-            */
-            if (GetBranchCond (N->OPC) == BC_EQ) {
-                /* Jumps if condition false, invert condition */
-                Cond = CmpInvertTab [Cond];
-            }
-
-            /* Replace the subroutine call. */
-            E = NewCodeEntry (OP65_JSR, AM65_ABS, "tosicmp", 0, E->LI);
-            CS_InsertEntry (S, E, I+1);
-            CS_DelEntry (S, I);
-
-            /* Replace the conditional branch */
-            ReplaceCmp (S, I+1, Cond);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptCmp7 (CodeSeg* S)
-/* Search for a sequence ldx/txa/branch and remove the txa if A is not
-** used later.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[2];
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if ((E->OPC == OP65_LDX)                        &&
-            CS_GetEntries (S, L, I+1, 2)                &&
-            L[0]->OPC == OP65_TXA                       &&
-            !CE_HasLabel (L[0])                         &&
-            (L[1]->Info & OF_FBRA) != 0                 &&
-            !CE_HasLabel (L[1])                         &&
-            !RegAUsed (S, I+3)) {
-
-            /* Remove the txa */
-            CS_DelEntry (S, I+1);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptCmp8 (CodeSeg* S)
-/* Check for register compares where the contents of the register and therefore
-** the result of the compare is known.
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        int RegVal;
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for a compare against an immediate value */
-        if ((E->Info & OF_CMP) != 0           &&
-            (RegVal = GetCmpRegVal (E)) >= 0  &&
-            CE_IsConstImm (E)) {
-
-            /* We are able to evaluate the compare at compile time. Check if
-            ** one or more branches are ahead.
-            */
-            unsigned JumpsChanged = 0;
-            CodeEntry* N;
-            while ((N = CS_GetNextEntry (S, I)) != 0 &&   /* Followed by something.. */
-                   (N->Info & OF_CBRA) != 0          &&   /* ..that is a cond branch.. */
-                   !CE_HasLabel (N)) {                    /* ..and has no label */
-
-                /* Evaluate the branch condition */
-                int Cond;
-                switch (GetBranchCond (N->OPC)) {
-                    case BC_CC:
-                        Cond = ((unsigned char)RegVal) < ((unsigned char)E->Num);
-                        break;
-
-                    case BC_CS:
-                        Cond = ((unsigned char)RegVal) >= ((unsigned char)E->Num);
-                        break;
-
-                    case BC_EQ:
-                        Cond = ((unsigned char)RegVal) == ((unsigned char)E->Num);
-                        break;
-
-                    case BC_MI:
-                        Cond = ((signed char)RegVal) < ((signed char)E->Num);
-                        break;
-
-                    case BC_NE:
-                        Cond = ((unsigned char)RegVal) != ((unsigned char)E->Num);
-                        break;
-
-                    case BC_PL:
-                        Cond = ((signed char)RegVal) >= ((signed char)E->Num);
-                        break;
-
-                    case BC_VC:
-                    case BC_VS:
-                        /* Not set by the compare operation, bail out (Note:
-                        ** Just skipping anything here is rather stupid, but
-                        ** the sequence is never generated by the compiler,
-                        ** so it's quite safe to skip).
-                        */
-                        goto NextEntry;
-
-                    default:
-                        Internal ("Unknown branch condition");
-
-                }
-
-                /* If the condition is false, we may remove the jump. Otherwise
-                ** the branch will always be taken, so we may replace it by a
-                ** jump (and bail out).
-                */
-                if (!Cond) {
-                    CS_DelEntry (S, I+1);
-                } else {
-                    CodeLabel* L = N->JumpTo;
-                    const char* LabelName = L? L->Name : N->Arg;
-                    CodeEntry* X = NewCodeEntry (OP65_JMP, AM65_BRA, LabelName, L, N->LI);
-                    CS_InsertEntry (S, X, I+2);
-                    CS_DelEntry (S, I+1);
-                }
-
-                /* Remember, we had changes */
-                ++JumpsChanged;
-                ++Changes;
-            }
-
-            /* If we have made changes above, we may also remove the compare */
-            if (JumpsChanged) {
-                CS_DelEntry (S, I);
-            }
-
-        }
-
-NextEntry:
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptCmp9 (CodeSeg* S)
-/* Search for the sequence
-**
-**    sbc       xx
-**    bvs/bvc   L
-**    eor       #$80
-** L: asl       a
-**    bcc/bcs   somewhere
-**
-** If A is not used later (which should be the case), we can branch on the N
-** flag instead of the carry flag and remove the asl.
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[5];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_SBC                       &&
-            CS_GetEntries (S, L+1, I+1, 4)              &&
-            (L[1]->OPC == OP65_BVC              ||
-             L[1]->OPC == OP65_BVS)                     &&
-            L[1]->JumpTo != 0                           &&
-            L[1]->JumpTo->Owner == L[3]                 &&
-            L[2]->OPC == OP65_EOR                       &&
-            CE_IsKnownImm (L[2], 0x80)                  &&
-            L[3]->OPC == OP65_ASL                       &&
-            L[3]->AM == AM65_ACC                        &&
-            (L[4]->OPC == OP65_BCC              ||
-             L[4]->OPC == OP65_BCS              ||
-             L[4]->OPC == OP65_JCC              ||
-             L[4]->OPC == OP65_JCS)                     &&
-            !CE_HasLabel (L[4])                         &&
-            !RegAUsed (S, I+4)) {
-
-            /* Replace the branch condition */
-            switch (GetBranchCond (L[4]->OPC)) {
-                case BC_CC:     CE_ReplaceOPC (L[4], OP65_JPL); break;
-                case BC_CS:     CE_ReplaceOPC (L[4], OP65_JMI); break;
-                default:        Internal ("Unknown branch condition in OptCmp9");
-            }
-
-            /* Delete the asl insn */
-            CS_DelEntry (S, I+3);
-
-            /* Next sequence is somewhat ahead (if any) */
-            I += 3;
-
-            /* Remember, we had changes */
-            ++Changes;
-        }
-
-        /* Next entry */
-        ++I;
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
diff --git a/src/cc65/coptcmp.h b/src/cc65/coptcmp.h
deleted file mode 100644 (file)
index 0cdcf2d..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 coptcmp.h                                 */
-/*                                                                           */
-/*                             Optimize compares                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef COPTCMP_H
-#define COPTCMP_H
-
-
-
-/* cc65 */
-#include "codeseg.h"
-
-
-
-/*****************************************************************************/
-/*             Remove calls to the bool transformer subroutines              */
-/*****************************************************************************/
-
-
-
-unsigned OptBoolTrans (CodeSeg* S);
-/* Try to remove the call to boolean transformer routines where the call is
-** not really needed.
-*/
-
-
-
-/*****************************************************************************/
-/*                        Optimizations for compares                         */
-/*****************************************************************************/
-
-
-
-unsigned OptCmp1 (CodeSeg* S);
-/* Search for the sequence
-**
-**      ldx     xx
-**      stx     tmp1
-**      ora     tmp1
-**
-** and replace it by
-**
-**      ora     xx
-*/
-
-unsigned OptCmp2 (CodeSeg* S);
-/* Search for the sequence
-**
-**      stx     xx
-**      stx     tmp1
-**      ora     tmp1
-**
-** and replace it by
-**
-**      stx     xx
-**      ora     xx
-*/
-
-unsigned OptCmp3 (CodeSeg* S);
-/* Search for
-**
-**      lda/and/ora/eor ...
-**      cmp #$00
-**      jeq/jne
-** or
-**      lda/and/ora/eor ...
-**      cmp #$00
-**      jsr boolxx
-**
-** and remove the cmp.
-*/
-
-unsigned OptCmp4 (CodeSeg* S);
-/* Search for
-**
-**      lda     x
-**      ldx     y
-**      cpx     #a
-**      bne     L1
-**      cmp     #b
-**      jne/jeq L2
-**
-** If a is zero, we may remove the compare. If a and b are both zero, we may
-** replace it by the sequence
-**
-**      lda     x
-**      ora     x+1
-**      jne/jeq ...
-**
-** L1 may be either the label at the branch instruction, or the target label
-** of this instruction.
-*/
-
-unsigned OptCmp5 (CodeSeg* S);
-/* Optimize compares of local variables:
-**
-**      ldy     #o
-**      lda     (sp),y
-**      tax
-**      dey
-**      lda     (sp),y
-**      cpx     #a
-**      bne     L1
-**      cmp     #b
-**      jne/jeq L2
-*/
-
-unsigned OptCmp6 (CodeSeg* S);
-/* Search for calls to compare subroutines followed by a conditional branch
-** and replace them by cheaper versions, since the branch means that the
-** boolean value returned by these routines is not needed (we may also check
-** that explicitly, but for the current code generator it is always true).
-*/
-
-unsigned OptCmp7 (CodeSeg* S);
-/* Search for a sequence ldx/txa/branch and remove the txa if A is not
-** used later.
-*/
-
-unsigned OptCmp8 (CodeSeg* S);
-/* Check for register compares where the contents of the register and therefore
-** the result of the compare is known.
-*/
-
-unsigned OptCmp9 (CodeSeg* S);
-/* Search for the sequence
-**
-**    sbc       xx
-**    bvs/bvc   L
-**    eor       #$80
-** L: asl       a
-**    bcc/bcs   somewhere
-**
-** If A is not used later (which should be the case), we can branch on the N
-** flag instead of the carry flag and remove the asl.
-*/
-
-
-
-/* End of coptcmp.h */
-
-#endif
diff --git a/src/cc65/coptind.c b/src/cc65/coptind.c
deleted file mode 100644 (file)
index ca9d5ef..0000000
+++ /dev/null
@@ -1,2291 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 coptind.c                                 */
-/*                                                                           */
-/*              Environment independent low level optimizations              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "cpu.h"
-
-/* cc65 */
-#include "codeent.h"
-#include "coptind.h"
-#include "codeinfo.h"
-#include "codeopt.h"
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                             Helper functions                              */
-/*****************************************************************************/
-
-
-
-static int MemAccess (CodeSeg* S, unsigned From, unsigned To, const CodeEntry* N)
-/* Checks a range of code entries if there are any memory accesses to N->Arg */
-{
-    /* Get the length of the argument */
-    unsigned NLen = strlen (N->Arg);
-
-    /* What to check for? */
-    enum {
-        None    = 0x00,
-        Base    = 0x01,         /* Check for location without "+1" */
-        Word    = 0x02,         /* Check for location with "+1" added */
-    } What = None;
-
-
-    /* If the argument of N is a zero page location that ends with "+1", we
-    ** must also check for word accesses to the location without +1.
-    */
-    if (N->AM == AM65_ZP && NLen > 2 && strcmp (N->Arg + NLen - 2, "+1") == 0) {
-        What |= Base;
-    }
-
-    /* If the argument is zero page indirect, we must also check for accesses
-    ** to "arg+1"
-    */
-    if (N->AM == AM65_ZP_INDY || N->AM == AM65_ZPX_IND || N->AM == AM65_ZP_IND) {
-        What |= Word;
-    }
-
-    /* Walk over all code entries */
-    while (From <= To) {
-
-        /* Get the next entry */
-        CodeEntry* E = CS_GetEntry (S, From);
-
-        /* Check if there is an argument and if this argument equals Arg in
-        ** some variants.
-        */
-        if (E->Arg[0] != '\0') {
-
-            unsigned ELen;
-
-            if (strcmp (E->Arg, N->Arg) == 0) {
-                /* Found an access */
-                return 1;
-            }
-
-            ELen = strlen (E->Arg);
-            if ((What & Base) != 0) {
-                if (ELen == NLen - 2 && strncmp (E->Arg, N->Arg, NLen-2) == 0) {
-                    /* Found an access */
-                    return 1;
-                }
-            }
-
-            if ((What & Word) != 0) {
-                if (ELen == NLen + 2 && strncmp (E->Arg, N->Arg, NLen) == 0 &&
-                    E->Arg[NLen] == '+' && E->Arg[NLen+1] == '1') {
-                    /* Found an access */
-                    return 1;
-                }
-            }
-        }
-
-        /* Next entry */
-        ++From;
-    }
-
-    /* Nothing found */
-    return 0;
-}
-
-
-
-static int GetBranchDist (CodeSeg* S, unsigned From, CodeEntry* To)
-/* Get the branch distance between the two entries and return it. The distance
-** will be negative for backward jumps and positive for forward jumps.
-*/
-{
-    /* Get the index of the branch target */
-    unsigned TI = CS_GetEntryIndex (S, To);
-
-    /* Determine the branch distance */
-    int Distance = 0;
-    if (TI >= From) {
-        /* Forward branch, do not count the current insn */
-        unsigned J = From+1;
-        while (J < TI) {
-            CodeEntry* N = CS_GetEntry (S, J++);
-            Distance += N->Size;
-        }
-    } else {
-        /* Backward branch */
-        unsigned J = TI;
-        while (J < From) {
-            CodeEntry* N = CS_GetEntry (S, J++);
-            Distance -= N->Size;
-        }
-    }
-
-    /* Return the calculated distance */
-    return Distance;
-}
-
-
-
-static int IsShortDist (int Distance)
-/* Return true if the given distance is a short branch distance */
-{
-    return (Distance >= -125 && Distance <= 125);
-}
-
-
-
-static short ZPRegVal (unsigned short Use, const RegContents* RC)
-/* Return the contents of the given zeropage register */
-{
-    if ((Use & REG_TMP1) != 0) {
-        return RC->Tmp1;
-    } else if ((Use & REG_PTR1_LO) != 0) {
-        return RC->Ptr1Lo;
-    } else if ((Use & REG_PTR1_HI) != 0) {
-        return RC->Ptr1Hi;
-    } else if ((Use & REG_SREG_LO) != 0) {
-        return RC->SRegLo;
-    } else if ((Use & REG_SREG_HI) != 0) {
-        return RC->SRegHi;
-    } else {
-        return UNKNOWN_REGVAL;
-    }
-}
-
-
-
-static short RegVal (unsigned short Use, const RegContents* RC)
-/* Return the contents of the given register */
-{
-    if ((Use & REG_A) != 0) {
-        return RC->RegA;
-    } else if ((Use & REG_X) != 0) {
-        return RC->RegX;
-    } else if ((Use & REG_Y) != 0) {
-        return RC->RegY;
-    } else {
-        return ZPRegVal (Use, RC);
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                        Replace jumps to RTS by RTS                        */
-/*****************************************************************************/
-
-
-
-unsigned OptRTSJumps1 (CodeSeg* S)
-/* Replace jumps to RTS by RTS */
-{
-    unsigned Changes = 0;
-
-    /* Walk over all entries minus the last one */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* Get the next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if it's an unconditional branch to a local target */
-        if ((E->Info & OF_UBRA) != 0            &&
-            E->JumpTo != 0                      &&
-            E->JumpTo->Owner->OPC == OP65_RTS) {
-
-            /* Insert an RTS instruction */
-            CodeEntry* X = NewCodeEntry (OP65_RTS, AM65_IMP, 0, 0, E->LI);
-            CS_InsertEntry (S, X, I+1);
-
-            /* Delete the jump */
-            CS_DelEntry (S, I);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptRTSJumps2 (CodeSeg* S)
-/* Replace long conditional jumps to RTS or to a final target */
-{
-    unsigned Changes = 0;
-
-    /* Walk over all entries minus the last one */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S) - 1) {
-
-        /* Get the next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if it's an conditional branch to a local target */
-        if ((E->Info & OF_CBRA) != 0            &&   /* Conditional branch */
-            (E->Info & OF_LBRA) != 0            &&   /* Long branch */
-            E->JumpTo != 0) {                        /* Local label */
-
-
-            /* Get the jump target and the next entry. There's always a next
-            ** entry, because we don't cover the last entry in the loop.
-            */
-            CodeEntry* X = 0;
-            CodeEntry* T = E->JumpTo->Owner;
-            CodeEntry* N = CS_GetNextEntry (S, I);
-
-            /* Check if it's a jump to an RTS insn */
-            if (T->OPC == OP65_RTS) {
-
-                /* It's a jump to RTS. Create a conditional branch around an
-                ** RTS insn.
-                */
-                X = NewCodeEntry (OP65_RTS, AM65_IMP, 0, 0, T->LI);
-
-            } else if (T->OPC == OP65_JMP && T->JumpTo == 0) {
-
-                /* It's a jump to a label outside the function. Create a
-                ** conditional branch around a jump to the external label.
-                */
-                X = NewCodeEntry (OP65_JMP, AM65_ABS, T->Arg, T->JumpTo, T->LI);
-
-            }
-
-            /* If we have a replacement insn, insert it */
-            if (X) {
-
-                CodeLabel* LN;
-                opc_t      NewBranch;
-
-                /* Insert the new insn */
-                CS_InsertEntry (S, X, I+1);
-
-                /* Create a conditional branch with the inverse condition
-                ** around the replacement insn
-                */
-
-                /* Get the new branch opcode */
-                NewBranch = MakeShortBranch (GetInverseBranch (E->OPC));
-
-                /* Get the label attached to N, create a new one if needed */
-                LN = CS_GenLabel (S, N);
-
-                /* Generate the branch */
-                X = NewCodeEntry (NewBranch, AM65_BRA, LN->Name, LN, E->LI);
-                CS_InsertEntry (S, X, I+1);
-
-                /* Delete the long branch */
-                CS_DelEntry (S, I);
-
-                /* Remember, we had changes */
-                ++Changes;
-
-            }
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-/*****************************************************************************/
-/*                             Remove dead jumps                             */
-/*****************************************************************************/
-
-
-
-unsigned OptDeadJumps (CodeSeg* S)
-/* Remove dead jumps (jumps to the next instruction) */
-{
-    unsigned Changes = 0;
-
-    /* Walk over all entries minus the last one */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* Get the next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if it's a branch, if it has a local target, and if the target
-        ** is the next instruction.
-        */
-        if (E->AM == AM65_BRA                               &&
-            E->JumpTo                                       &&
-            E->JumpTo->Owner == CS_GetNextEntry (S, I)) {
-
-            /* Delete the dead jump */
-            CS_DelEntry (S, I);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        } else {
-
-            /* Next entry */
-            ++I;
-
-        }
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-/*****************************************************************************/
-/*                             Remove dead code                              */
-/*****************************************************************************/
-
-
-
-unsigned OptDeadCode (CodeSeg* S)
-/* Remove dead code (code that follows an unconditional jump or an rts/rti
-** and has no label)
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over all entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* N;
-        CodeLabel* LN;
-
-        /* Get this entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if it's an unconditional branch, and if the next entry has
-        ** no labels attached, or if the label is just used so that the insn
-        ** can jump to itself.
-        */
-        if ((E->Info & OF_DEAD) != 0                     &&     /* Dead code follows */
-            (N = CS_GetNextEntry (S, I)) != 0            &&     /* Has next entry */
-            (!CE_HasLabel (N)                        ||         /* Don't has a label */
-             ((N->Info & OF_UBRA) != 0          &&              /* Uncond branch */
-              (LN = N->JumpTo) != 0             &&              /* Jumps to known label */
-              LN->Owner == N                    &&              /* Attached to insn */
-              CL_GetRefCount (LN) == 1))) {                     /* Only reference */
-
-            /* Delete the next entry */
-            CS_DelEntry (S, I+1);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        } else {
-
-            /* Next entry */
-            ++I;
-
-        }
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-/*****************************************************************************/
-/*                          Optimize jump cascades                           */
-/*****************************************************************************/
-
-
-
-unsigned OptJumpCascades (CodeSeg* S)
-/* Optimize jump cascades (jumps to jumps). In such a case, the jump is
-** replaced by a jump to the final location. This will in some cases produce
-** worse code, because some jump targets are no longer reachable by short
-** branches, but this is quite rare, so there are more advantages than
-** disadvantages.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over all entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* N;
-        CodeLabel* OldLabel;
-
-        /* Get this entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check:
-        **   - if it's a branch,
-        **   - if it has a jump label,
-        **   - if this jump label is not attached to the instruction itself,
-        **   - if the target instruction is itself a branch,
-        **   - if either the first branch is unconditional or the target of
-        **     the second branch is internal to the function.
-        ** The latter condition will avoid conditional branches to targets
-        ** outside of the function (usually incspx), which won't simplify the
-        ** code, since conditional far branches are emulated by a short branch
-        ** around a jump.
-        */
-        if ((E->Info & OF_BRA) != 0             &&
-            (OldLabel = E->JumpTo) != 0         &&
-            (N = OldLabel->Owner) != E          &&
-            (N->Info & OF_BRA) != 0             &&
-            ((E->Info & OF_CBRA) == 0   ||
-             N->JumpTo != 0)) {
-
-            /* Check if we can use the final target label. That is the case,
-            ** if the target branch is an absolute branch; or, if it is a
-            ** conditional branch checking the same condition as the first one.
-            */
-            if ((N->Info & OF_UBRA) != 0 ||
-                ((E->Info & OF_CBRA) != 0 &&
-                 GetBranchCond (E->OPC)  == GetBranchCond (N->OPC))) {
-
-                /* This is a jump cascade and we may jump to the final target,
-                ** provided that the other insn does not jump to itself. If
-                ** this is the case, we can also jump to ourselves, otherwise
-                ** insert a jump to the new instruction and remove the old one.
-                */
-                CodeEntry* X;
-                CodeLabel* LN = N->JumpTo;
-
-                if (LN != 0 && LN->Owner == N) {
-
-                    /* We found a jump to a jump to itself. Replace our jump
-                    ** by a jump to itself.
-                    */
-                    CodeLabel* LE = CS_GenLabel (S, E);
-                    X = NewCodeEntry (E->OPC, E->AM, LE->Name, LE, E->LI);
-
-                } else {
-
-                    /* Jump to the final jump target */
-                    X = NewCodeEntry (E->OPC, E->AM, N->Arg, N->JumpTo, E->LI);
-
-                }
-
-                /* Insert it behind E */
-                CS_InsertEntry (S, X, I+1);
-
-                /* Remove E */
-                CS_DelEntry (S, I);
-
-                /* Remember, we had changes */
-                ++Changes;
-
-            /* Check if both are conditional branches, and the condition of
-            ** the second is the inverse of that of the first. In this case,
-            ** the second branch will never be taken, and we may jump directly
-            ** to the instruction behind this one.
-            */
-            } else if ((E->Info & OF_CBRA) != 0 && (N->Info & OF_CBRA) != 0) {
-
-                CodeEntry* X;   /* Instruction behind N */
-                CodeLabel* LX;  /* Label attached to X */
-
-                /* Get the branch conditions of both branches */
-                bc_t BC1 = GetBranchCond (E->OPC);
-                bc_t BC2 = GetBranchCond (N->OPC);
-
-                /* Check the branch conditions */
-                if (BC1 != GetInverseCond (BC2)) {
-                    /* Condition not met */
-                    goto NextEntry;
-                }
-
-                /* We may jump behind this conditional branch. Get the
-                ** pointer to the next instruction
-                */
-                if ((X = CS_GetNextEntry (S, CS_GetEntryIndex (S, N))) == 0) {
-                    /* N is the last entry, bail out */
-                    goto NextEntry;
-                }
-
-                /* Get the label attached to X, create a new one if needed */
-                LX = CS_GenLabel (S, X);
-
-                /* Move the reference from E to the new label */
-                CS_MoveLabelRef (S, E, LX);
-
-                /* Remember, we had changes */
-                ++Changes;
-            }
-        }
-
-NextEntry:
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-/*****************************************************************************/
-/*                             Optimize jsr/rts                              */
-/*****************************************************************************/
-
-
-
-unsigned OptRTS (CodeSeg* S)
-/* Optimize subroutine calls followed by an RTS. The subroutine call will get
-** replaced by a jump. Don't bother to delete the RTS if it does not have a
-** label, the dead code elimination should take care of it.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over all entries minus the last one */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* N;
-
-        /* Get this entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if it's a subroutine call and if the following insn is RTS */
-        if (E->OPC == OP65_JSR                    &&
-            (N = CS_GetNextEntry (S, I)) != 0 &&
-            N->OPC == OP65_RTS) {
-
-            /* Change the jsr to a jmp and use the additional info for a jump */
-            E->AM = AM65_BRA;
-            CE_ReplaceOPC (E, OP65_JMP);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-/*****************************************************************************/
-/*                           Optimize jump targets                           */
-/*****************************************************************************/
-
-
-
-unsigned OptJumpTarget1 (CodeSeg* S)
-/* If the instruction preceeding an unconditional branch is the same as the
-** instruction preceeding the jump target, the jump target may be moved
-** one entry back. This is a size optimization, since the instruction before
-** the branch gets removed.
-*/
-{
-    unsigned Changes = 0;
-    CodeEntry* E1;              /* Entry 1 */
-    CodeEntry* E2;              /* Entry 2 */
-    CodeEntry* T1;              /* Jump target entry 1 */
-    CodeLabel* TL1;             /* Target label 1 */
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* Get next entry */
-        E2 = CS_GetNextEntry (S, I);
-
-        /* Check if we have a jump or branch without a label attached, and
-        ** a jump target, which is not attached to the jump itself
-        */
-        if (E2 != 0                     &&
-            (E2->Info & OF_UBRA) != 0   &&
-            !CE_HasLabel (E2)           &&
-            E2->JumpTo                  &&
-            E2->JumpTo->Owner != E2) {
-
-            /* Get the entry preceeding the branch target */
-            T1 = CS_GetPrevEntry (S, CS_GetEntryIndex (S, E2->JumpTo->Owner));
-            if (T1 == 0) {
-                /* There is no such entry */
-                goto NextEntry;
-            }
-
-            /* The entry preceeding the branch target may not be the branch
-            ** insn.
-            */
-            if (T1 == E2) {
-                goto NextEntry;
-            }
-
-            /* Get the entry preceeding the jump */
-            E1 = CS_GetEntry (S, I);
-
-            /* Check if both preceeding instructions are identical */
-            if (!CodeEntriesAreEqual (E1, T1)) {
-                /* Not equal, try next */
-                goto NextEntry;
-            }
-
-            /* Get the label for the instruction preceeding the jump target.
-            ** This routine will create a new label if the instruction does
-            ** not already have one.
-            */
-            TL1 = CS_GenLabel (S, T1);
-
-            /* Change the jump target to point to this new label */
-            CS_MoveLabelRef (S, E2, TL1);
-
-            /* If the instruction preceeding the jump has labels attached,
-            ** move references to this label to the new label.
-            */
-            if (CE_HasLabel (E1)) {
-                CS_MoveLabels (S, E1, T1);
-            }
-
-            /* Remove the entry preceeding the jump */
-            CS_DelEntry (S, I);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        } else {
-NextEntry:
-            /* Next entry */
-            ++I;
-        }
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptJumpTarget2 (CodeSeg* S)
-/* If a bcs jumps to a sec insn or a bcc jumps to clc, skip this insn, since
-** it's job is already done.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* OP that may be skipped */
-        opc_t OPC;
-
-        /* Jump target insn, old and new */
-        CodeEntry* T;
-        CodeEntry* N;
-
-        /* New jump label */
-        CodeLabel* L;
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if this is a bcc insn */
-        if (E->OPC == OP65_BCC || E->OPC == OP65_JCC) {
-            OPC = OP65_CLC;
-        } else if (E->OPC == OP65_BCS || E->OPC == OP65_JCS) {
-            OPC = OP65_SEC;
-        } else {
-            /* Not what we're looking for */
-            goto NextEntry;
-        }
-
-        /* Must have a jump target */
-        if (E->JumpTo == 0) {
-            goto NextEntry;
-        }
-
-        /* Get the owner insn of the jump target and check if it's the one, we
-        ** will skip if present.
-        */
-        T = E->JumpTo->Owner;
-        if (T->OPC != OPC) {
-            goto NextEntry;
-        }
-
-        /* Get the entry following the branch target */
-        N = CS_GetNextEntry (S, CS_GetEntryIndex (S, T));
-        if (N == 0) {
-            /* There is no such entry */
-            goto NextEntry;
-        }
-
-        /* Get the label for the instruction following the jump target.
-        ** This routine will create a new label if the instruction does
-        ** not already have one.
-        */
-        L = CS_GenLabel (S, N);
-
-        /* Change the jump target to point to this new label */
-        CS_MoveLabelRef (S, E, L);
-
-        /* Remember that we had changes */
-        ++Changes;
-
-NextEntry:
-        /* Next entry */
-        ++I;
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptJumpTarget3 (CodeSeg* S)
-/* Jumps to load instructions of a register, that do already have the matching
-** register contents may skip the load instruction, since it's job is already
-** done.
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* N;
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if this is a load insn with a label and the next insn is not
-        ** a conditional branch that needs the flags from the load.
-        */
-        if ((E->Info & OF_LOAD) != 0            &&
-            CE_IsConstImm (E)                   &&
-            CE_HasLabel (E)                     &&
-            (N = CS_GetNextEntry (S, I)) != 0   &&
-            !CE_UseLoadFlags (N)) {
-
-            unsigned J;
-            int      K;
-
-            /* New jump label */
-            CodeLabel* LN = 0;
-
-            /* Walk over all insn that jump here */
-            for (J = 0; J < CE_GetLabelCount (E); ++J) {
-
-                /* Get the label */
-                CodeLabel* L = CE_GetLabel (E, J);
-
-                /* Loop over all insn that reference this label. Since we may
-                ** eventually remove a reference in the loop, we must loop
-                ** from end down to start.
-                */
-                for (K = CL_GetRefCount (L) - 1; K >= 0; --K) {
-
-                    /* Get the entry that jumps here */
-                    CodeEntry* Jump = CL_GetRef (L, K);
-
-                    /* Get the register info from this insn */
-                    short Val = RegVal (E->Chg, &Jump->RI->Out2);
-
-                    /* Check if the outgoing value is the one thats's loaded */
-                    if (Val == (unsigned char) E->Num) {
-
-                        /* OK, skip the insn. First, generate a label for the
-                        ** next insn after E.
-                        */
-                        if (LN == 0) {
-                            LN = CS_GenLabel (S, N);
-                        }
-
-                        /* Change the jump target to point to this new label */
-                        CS_MoveLabelRef (S, Jump, LN);
-
-                        /* Remember that we had changes */
-                        ++Changes;
-                    }
-                }
-            }
-
-        }
-
-        /* Next entry */
-        ++I;
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-/*****************************************************************************/
-/*                       Optimize conditional branches                       */
-/*****************************************************************************/
-
-
-
-unsigned OptCondBranches1 (CodeSeg* S)
-/* Performs several optimization steps:
-**
-**  - If an immediate load of a register is followed by a conditional jump that
-**    is never taken because the load of the register sets the flags in such a
-**    manner, remove the conditional branch.
-**  - If the conditional branch is always taken because of the register load,
-**    replace it by a jmp.
-**  - If a conditional branch jumps around an unconditional branch, remove the
-**    conditional branch and make the jump a conditional branch with the
-**    inverse condition of the first one.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* N;
-        CodeLabel* L;
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if it's a register load */
-        if ((E->Info & OF_LOAD) != 0              &&  /* It's a load instruction */
-            E->AM == AM65_IMM                     &&  /* ..with immidiate addressing */
-            (E->Flags & CEF_NUMARG) != 0          &&  /* ..and a numeric argument. */
-            (N = CS_GetNextEntry (S, I)) != 0     &&  /* There is a following entry */
-            (N->Info & OF_CBRA) != 0              &&  /* ..which is a conditional branch */
-            !CE_HasLabel (N)) {               /* ..and does not have a label */
-
-            /* Get the branch condition */
-            bc_t BC = GetBranchCond (N->OPC);
-
-            /* Check the argument against the branch condition */
-            if ((BC == BC_EQ && E->Num != 0)            ||
-                (BC == BC_NE && E->Num == 0)            ||
-                (BC == BC_PL && (E->Num & 0x80) != 0)   ||
-                (BC == BC_MI && (E->Num & 0x80) == 0)) {
-
-                /* Remove the conditional branch */
-                CS_DelEntry (S, I+1);
-
-                /* Remember, we had changes */
-                ++Changes;
-
-            } else if ((BC == BC_EQ && E->Num == 0)             ||
-                       (BC == BC_NE && E->Num != 0)             ||
-                       (BC == BC_PL && (E->Num & 0x80) == 0)    ||
-                       (BC == BC_MI && (E->Num & 0x80) != 0)) {
-
-                /* The branch is always taken, replace it by a jump */
-                CE_ReplaceOPC (N, OP65_JMP);
-
-                /* Remember, we had changes */
-                ++Changes;
-            }
-
-        }
-
-        if ((E->Info & OF_CBRA) != 0              &&  /* It's a conditional branch */
-            (L = E->JumpTo) != 0                  &&  /* ..referencing a local label */
-            (N = CS_GetNextEntry (S, I)) != 0     &&  /* There is a following entry */
-            (N->Info & OF_UBRA) != 0              &&  /* ..which is an uncond branch, */
-            !CE_HasLabel (N)                      &&  /* ..has no label attached */
-            L->Owner == CS_GetNextEntry (S, I+1)) {   /* ..and jump target follows */
-
-            /* Replace the jump by a conditional branch with the inverse branch
-            ** condition than the branch around it.
-            */
-            CE_ReplaceOPC (N, GetInverseBranch (E->OPC));
-
-            /* Remove the conditional branch */
-            CS_DelEntry (S, I);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptCondBranches2 (CodeSeg* S)
-/* If on entry to a "rol a" instruction the accu is zero, and a beq/bne follows,
-** we can remove the rol and branch on the state of the carry flag.
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* N;
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if it's a rol insn with A in accu and a branch follows */
-        if (E->OPC == OP65_ROL                  &&
-            E->AM == AM65_ACC                   &&
-            E->RI->In.RegA == 0                 &&
-            !CE_HasLabel (E)                    &&
-            (N = CS_GetNextEntry (S, I)) != 0   &&
-            (N->Info & OF_ZBRA) != 0            &&
-            !RegAUsed (S, I+1)) {
-
-            /* Replace the branch condition */
-            switch (GetBranchCond (N->OPC)) {
-                case BC_EQ:     CE_ReplaceOPC (N, OP65_JCC); break;
-                case BC_NE:     CE_ReplaceOPC (N, OP65_JCS); break;
-                default:        Internal ("Unknown branch condition in OptCondBranches2");
-            }
-
-            /* Delete the rol insn */
-            CS_DelEntry (S, I);
-
-            /* Remember, we had changes */
-            ++Changes;
-        }
-
-        /* Next entry */
-        ++I;
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-/*****************************************************************************/
-/*                      Remove unused loads and stores                       */
-/*****************************************************************************/
-
-
-
-unsigned OptUnusedLoads (CodeSeg* S)
-/* Remove loads of registers where the value loaded is not used later. */
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* N;
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if it's a register load or transfer insn */
-        if ((E->Info & (OF_LOAD | OF_XFR | OF_REG_INCDEC)) != 0         &&
-            (N = CS_GetNextEntry (S, I)) != 0                           &&
-            !CE_UseLoadFlags (N)) {
-
-            /* Check which sort of load or transfer it is */
-            unsigned R;
-            switch (E->OPC) {
-                case OP65_DEA:
-                case OP65_INA:
-                case OP65_LDA:
-                case OP65_TXA:
-                case OP65_TYA:  R = REG_A;      break;
-                case OP65_DEX:
-                case OP65_INX:
-                case OP65_LDX:
-                case OP65_TAX:  R = REG_X;      break;
-                case OP65_DEY:
-                case OP65_INY:
-                case OP65_LDY:
-                case OP65_TAY:  R = REG_Y;      break;
-                default:        goto NextEntry;         /* OOPS */
-            }
-
-            /* Get register usage and check if the register value is used later */
-            if ((GetRegInfo (S, I+1, R) & R) == 0) {
-
-                /* Register value is not used, remove the load */
-                CS_DelEntry (S, I);
-
-                /* Remember, we had changes. Account the deleted entry in I. */
-                ++Changes;
-                --I;
-
-            }
-        }
-
-NextEntry:
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptUnusedStores (CodeSeg* S)
-/* Remove stores into zero page registers that aren't used later */
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if it's a register load or transfer insn */
-        if ((E->Info & OF_STORE) != 0    &&
-            E->AM == AM65_ZP             &&
-            (E->Chg & REG_ZP) != 0) {
-
-            /* Check for the zero page location. We know that there cannot be
-            ** more than one zero page location involved in the store.
-            */
-            unsigned R = E->Chg & REG_ZP;
-
-            /* Get register usage and check if the register value is used later */
-            if ((GetRegInfo (S, I+1, R) & R) == 0) {
-
-                /* Register value is not used, remove the load */
-                CS_DelEntry (S, I);
-
-                /* Remember, we had changes */
-                ++Changes;
-
-                /* Continue with next insn */
-                continue;
-            }
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptDupLoads (CodeSeg* S)
-/* Remove loads of registers where the value loaded is already in the register. */
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* N;
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Assume we won't delete the entry */
-        int Delete = 0;
-
-        /* Get a pointer to the input registers of the insn */
-        const RegContents* In  = &E->RI->In;
-
-        /* Handle the different instructions */
-        switch (E->OPC) {
-
-            case OP65_LDA:
-                if (RegValIsKnown (In->RegA)          && /* Value of A is known */
-                    CE_IsKnownImm (E, In->RegA)       && /* Value to be loaded is known */
-                    (N = CS_GetNextEntry (S, I)) != 0 && /* There is a next entry */
-                    !CE_UseLoadFlags (N)) {              /* Which does not use the flags */
-                    Delete = 1;
-                }
-                break;
-
-            case OP65_LDX:
-                if (RegValIsKnown (In->RegX)          && /* Value of X is known */
-                    CE_IsKnownImm (E, In->RegX)       && /* Value to be loaded is known */
-                    (N = CS_GetNextEntry (S, I)) != 0 && /* There is a next entry */
-                    !CE_UseLoadFlags (N)) {              /* Which does not use the flags */
-                    Delete = 1;
-                }
-                break;
-
-            case OP65_LDY:
-                if (RegValIsKnown (In->RegY)          && /* Value of Y is known */
-                    CE_IsKnownImm (E, In->RegY)       && /* Value to be loaded is known */
-                    (N = CS_GetNextEntry (S, I)) != 0 && /* There is a next entry */
-                    !CE_UseLoadFlags (N)) {              /* Which does not use the flags */
-                    Delete = 1;
-                }
-                break;
-
-            case OP65_STA:
-                /* If we store into a known zero page location, and this
-                ** location does already contain the value to be stored,
-                ** remove the store.
-                */
-                if (RegValIsKnown (In->RegA)          && /* Value of A is known */
-                    E->AM == AM65_ZP                  && /* Store into zp */
-                    In->RegA == ZPRegVal (E->Chg, In)) { /* Value identical */
-
-                    Delete = 1;
-                }
-                break;
-
-            case OP65_STX:
-                /* If we store into a known zero page location, and this
-                ** location does already contain the value to be stored,
-                ** remove the store.
-                */
-                if (RegValIsKnown (In->RegX)          && /* Value of A is known */
-                    E->AM == AM65_ZP                  && /* Store into zp */
-                    In->RegX == ZPRegVal (E->Chg, In)) { /* Value identical */
-
-                    Delete = 1;
-
-                /* If the value in the X register is known and the same as
-                ** that in the A register, replace the store by a STA. The
-                ** optimizer will then remove the load instruction for X
-                ** later. STX does support the zeropage,y addressing mode,
-                ** so be sure to check for that.
-                */
-                } else if (RegValIsKnown (In->RegX)   &&
-                           In->RegX == In->RegA       &&
-                           E->AM != AM65_ABSY         &&
-                           E->AM != AM65_ZPY) {
-                    /* Use the A register instead */
-                    CE_ReplaceOPC (E, OP65_STA);
-                }
-                break;
-
-            case OP65_STY:
-                /* If we store into a known zero page location, and this
-                ** location does already contain the value to be stored,
-                ** remove the store.
-                */
-                if (RegValIsKnown (In->RegY)          && /* Value of Y is known */
-                    E->AM == AM65_ZP                  && /* Store into zp */
-                    In->RegY == ZPRegVal (E->Chg, In)) { /* Value identical */
-
-                    Delete = 1;
-
-                /* If the value in the Y register is known and the same as
-                ** that in the A register, replace the store by a STA. The
-                ** optimizer will then remove the load instruction for Y
-                ** later. If replacement by A is not possible try a
-                ** replacement by X, but check for invalid addressing modes
-                ** in this case.
-                */
-                } else if (RegValIsKnown (In->RegY)) {
-                    if (In->RegY == In->RegA) {
-                        CE_ReplaceOPC (E, OP65_STA);
-                    } else if (In->RegY == In->RegX   &&
-                               E->AM != AM65_ABSX     &&
-                               E->AM != AM65_ZPX) {
-                        CE_ReplaceOPC (E, OP65_STX);
-                    }
-                }
-                break;
-
-            case OP65_STZ:
-                /* If we store into a known zero page location, and this
-                ** location does already contain the value to be stored,
-                ** remove the store.
-                */
-                if ((CPUIsets[CPU] & CPU_ISET_65SC02) != 0 && E->AM == AM65_ZP) {
-                    if (ZPRegVal (E->Chg, In) == 0) {
-                        Delete = 1;
-                    }
-                }
-                break;
-
-            case OP65_TAX:
-                if (RegValIsKnown (In->RegA)          &&
-                    In->RegA == In->RegX              &&
-                    (N = CS_GetNextEntry (S, I)) != 0 &&
-                    !CE_UseLoadFlags (N)) {
-                    /* Value is identical and not followed by a branch */
-                    Delete = 1;
-                }
-                break;
-
-            case OP65_TAY:
-                if (RegValIsKnown (In->RegA)            &&
-                    In->RegA == In->RegY                &&
-                    (N = CS_GetNextEntry (S, I)) != 0   &&
-                    !CE_UseLoadFlags (N)) {
-                    /* Value is identical and not followed by a branch */
-                    Delete = 1;
-                }
-                break;
-
-            case OP65_TXA:
-                if (RegValIsKnown (In->RegX)            &&
-                    In->RegX == In->RegA                &&
-                    (N = CS_GetNextEntry (S, I)) != 0   &&
-                    !CE_UseLoadFlags (N)) {
-                    /* Value is identical and not followed by a branch */
-                    Delete = 1;
-                }
-                break;
-
-            case OP65_TYA:
-                if (RegValIsKnown (In->RegY)            &&
-                    In->RegY == In->RegA                &&
-                    (N = CS_GetNextEntry (S, I)) != 0   &&
-                    !CE_UseLoadFlags (N)) {
-                    /* Value is identical and not followed by a branch */
-                    Delete = 1;
-                }
-                break;
-
-            default:
-                break;
-
-        }
-
-        /* Delete the entry if requested */
-        if (Delete) {
-
-            /* Register value is not used, remove the load */
-            CS_DelEntry (S, I);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        } else {
-
-            /* Next entry */
-            ++I;
-
-        }
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptStoreLoad (CodeSeg* S)
-/* Remove a store followed by a load from the same location. */
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* N;
-        CodeEntry* X;
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if it is a store instruction followed by a load from the
-        ** same address which is itself not followed by a conditional branch.
-        */
-        if ((E->Info & OF_STORE) != 0                       &&
-            (N = CS_GetNextEntry (S, I)) != 0               &&
-            !CE_HasLabel (N)                                &&
-            E->AM == N->AM                                  &&
-            ((E->OPC == OP65_STA && N->OPC == OP65_LDA) ||
-             (E->OPC == OP65_STX && N->OPC == OP65_LDX) ||
-             (E->OPC == OP65_STY && N->OPC == OP65_LDY))    &&
-            strcmp (E->Arg, N->Arg) == 0                    &&
-            (X = CS_GetNextEntry (S, I+1)) != 0             &&
-            !CE_UseLoadFlags (X)) {
-
-            /* Register has already the correct value, remove the load */
-            CS_DelEntry (S, I+1);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptTransfers1 (CodeSeg* S)
-/* Remove transfers from one register to another and back */
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* N;
-        CodeEntry* X;
-        CodeEntry* P;
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if we have two transfer instructions */
-        if ((E->Info & OF_XFR) != 0                 &&
-            (N = CS_GetNextEntry (S, I)) != 0       &&
-            !CE_HasLabel (N)                        &&
-            (N->Info & OF_XFR) != 0) {
-
-            /* Check if it's a transfer and back */
-            if ((E->OPC == OP65_TAX && N->OPC == OP65_TXA && !RegXUsed (S, I+2)) ||
-                (E->OPC == OP65_TAY && N->OPC == OP65_TYA && !RegYUsed (S, I+2)) ||
-                (E->OPC == OP65_TXA && N->OPC == OP65_TAX && !RegAUsed (S, I+2)) ||
-                (E->OPC == OP65_TYA && N->OPC == OP65_TAY && !RegAUsed (S, I+2))) {
-
-                /* If the next insn is a conditional branch, check if the insn
-                ** preceeding the first xfr will set the flags right, otherwise we
-                ** may not remove the sequence.
-                */
-                if ((X = CS_GetNextEntry (S, I+1)) == 0) {
-                    goto NextEntry;
-                }
-                if (CE_UseLoadFlags (X)) {
-                    if (I == 0) {
-                        /* No preceeding entry */
-                        goto NextEntry;
-                    }
-                    P = CS_GetEntry (S, I-1);
-                    if ((P->Info & OF_SETF) == 0) {
-                        /* Does not set the flags */
-                        goto NextEntry;
-                    }
-                }
-
-                /* Remove both transfers */
-                CS_DelEntry (S, I+1);
-                CS_DelEntry (S, I);
-
-                /* Remember, we had changes */
-                ++Changes;
-            }
-        }
-
-NextEntry:
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptTransfers2 (CodeSeg* S)
-/* Replace loads followed by a register transfer by a load with the second
-** register if possible.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* N;
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if we have a load followed by a transfer where the loaded
-        ** register is not used later.
-        */
-        if ((E->Info & OF_LOAD) != 0                &&
-            (N = CS_GetNextEntry (S, I)) != 0       &&
-            !CE_HasLabel (N)                        &&
-            (N->Info & OF_XFR) != 0                 &&
-            GetRegInfo (S, I+2, E->Chg) != E->Chg) {
-
-            CodeEntry* X = 0;
-
-            if (E->OPC == OP65_LDA && N->OPC == OP65_TAX) {
-                /* LDA/TAX - check for the right addressing modes */
-                if (E->AM == AM65_IMM ||
-                    E->AM == AM65_ZP  ||
-                    E->AM == AM65_ABS ||
-                    E->AM == AM65_ABSY) {
-                    /* Replace */
-                    X = NewCodeEntry (OP65_LDX, E->AM, E->Arg, 0, N->LI);
-                }
-            } else if (E->OPC == OP65_LDA && N->OPC == OP65_TAY) {
-                /* LDA/TAY - check for the right addressing modes */
-                if (E->AM == AM65_IMM ||
-                    E->AM == AM65_ZP  ||
-                    E->AM == AM65_ZPX ||
-                    E->AM == AM65_ABS ||
-                    E->AM == AM65_ABSX) {
-                    /* Replace */
-                    X = NewCodeEntry (OP65_LDY, E->AM, E->Arg, 0, N->LI);
-                }
-            } else if (E->OPC == OP65_LDY && N->OPC == OP65_TYA) {
-                /* LDY/TYA. LDA supports all addressing modes LDY does */
-                X = NewCodeEntry (OP65_LDA, E->AM, E->Arg, 0, N->LI);
-            } else if (E->OPC == OP65_LDX && N->OPC == OP65_TXA) {
-                /* LDX/TXA. LDA doesn't support zp,y, so we must map it to
-                ** abs,y instead.
-                */
-                am_t AM = (E->AM == AM65_ZPY)? AM65_ABSY : E->AM;
-                X = NewCodeEntry (OP65_LDA, AM, E->Arg, 0, N->LI);
-            }
-
-            /* If we have a load entry, add it and remove the old stuff */
-            if (X) {
-                CS_InsertEntry (S, X, I+2);
-                CS_DelEntries (S, I, 2);
-                ++Changes;
-                --I;    /* Correct for one entry less */
-            }
-        }
-
-        /* Next entry */
-        ++I;
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptTransfers3 (CodeSeg* S)
-/* Replace a register transfer followed by a store of the second register by a
-** store of the first register if this is possible.
-*/
-{
-    unsigned Changes      = 0;
-    unsigned UsedRegs     = REG_NONE;   /* Track used registers */
-    unsigned Xfer         = 0;          /* Index of transfer insn */
-    unsigned Store        = 0;          /* Index of store insn */
-    CodeEntry* XferEntry  = 0;          /* Pointer to xfer insn */
-    CodeEntry* StoreEntry = 0;          /* Pointer to store insn */
-
-    enum {
-        Initialize,
-        Search,
-        FoundXfer,
-        FoundStore
-    } State = Initialize;
-
-    /* Walk over the entries. Look for a xfer instruction that is followed by
-    ** a store later, where the value of the register is not used later.
-    */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        switch (State) {
-
-            case Initialize:
-                /* Clear the list of used registers */
-                UsedRegs = REG_NONE;
-                /* FALLTHROUGH */
-
-            case Search:
-                if (E->Info & OF_XFR) {
-                    /* Found start of sequence */
-                    Xfer = I;
-                    XferEntry = E;
-                    State = FoundXfer;
-                }
-                break;
-
-            case FoundXfer:
-                /* If we find a conditional jump, abort the sequence, since
-                ** handling them makes things really complicated.
-                */
-                if (E->Info & OF_CBRA) {
-
-                    /* Switch back to searching */
-                    I = Xfer;
-                    State = Initialize;
-
-                /* Does this insn use the target register of the transfer? */
-                } else if ((E->Use & XferEntry->Chg) != 0) {
-
-                    /* It it's a store instruction, and the block is a basic
-                    ** block, proceed. Otherwise restart
-                    */
-                    if ((E->Info & OF_STORE) != 0       &&
-                        CS_IsBasicBlock (S, Xfer, I)) {
-                        Store = I;
-                        StoreEntry = E;
-                        State = FoundStore;
-                    } else {
-                        I = Xfer;
-                        State = Initialize;
-                    }
-
-                /* Does this insn change the target register of the transfer? */
-                } else if (E->Chg & XferEntry->Chg) {
-
-                    /* We *may* add code here to remove the transfer, but I'm
-                    ** currently not sure about the consequences, so I won't
-                    ** do that and bail out instead.
-                    */
-                    I = Xfer;
-                    State = Initialize;
-
-                /* Does this insn have a label? */
-                } else if (CE_HasLabel (E)) {
-
-                    /* Too complex to handle - bail out */
-                    I = Xfer;
-                    State = Initialize;
-
-                } else {
-                    /* Track used registers */
-                    UsedRegs |= E->Use;
-                }
-                break;
-
-            case FoundStore:
-                /* We are at the instruction behind the store. If the register
-                ** isn't used later, and we have an address mode match, we can
-                ** replace the transfer by a store and remove the store here.
-                */
-                if ((GetRegInfo (S, I, XferEntry->Chg) & XferEntry->Chg) == 0   &&
-                    (StoreEntry->AM == AM65_ABS         ||
-                     StoreEntry->AM == AM65_ZP)                                 &&
-                    (StoreEntry->AM != AM65_ZP ||
-                     (StoreEntry->Chg & UsedRegs) == 0)                         &&
-                    !MemAccess (S, Xfer+1, Store-1, StoreEntry)) {
-
-                    /* Generate the replacement store insn */
-                    CodeEntry* X = 0;
-                    switch (XferEntry->OPC) {
-
-                        case OP65_TXA:
-                            X = NewCodeEntry (OP65_STX,
-                                              StoreEntry->AM,
-                                              StoreEntry->Arg,
-                                              0,
-                                              StoreEntry->LI);
-                            break;
-
-                        case OP65_TAX:
-                            X = NewCodeEntry (OP65_STA,
-                                              StoreEntry->AM,
-                                              StoreEntry->Arg,
-                                              0,
-                                              StoreEntry->LI);
-                            break;
-
-                        case OP65_TYA:
-                            X = NewCodeEntry (OP65_STY,
-                                              StoreEntry->AM,
-                                              StoreEntry->Arg,
-                                              0,
-                                              StoreEntry->LI);
-                            break;
-
-                        case OP65_TAY:
-                            X = NewCodeEntry (OP65_STA,
-                                              StoreEntry->AM,
-                                              StoreEntry->Arg,
-                                              0,
-                                              StoreEntry->LI);
-                            break;
-
-                        default:
-                            break;
-                    }
-
-                    /* If we have a replacement store, change the code */
-                    if (X) {
-                        /* Insert after the xfer insn */
-                        CS_InsertEntry (S, X, Xfer+1);
-
-                        /* Remove the xfer instead */
-                        CS_DelEntry (S, Xfer);
-
-                        /* Remove the final store */
-                        CS_DelEntry (S, Store);
-
-                        /* Correct I so we continue with the next insn */
-                        I -= 2;
-
-                        /* Remember we had changes */
-                        ++Changes;
-                    } else {
-                        /* Restart after last xfer insn */
-                        I = Xfer;
-                    }
-                } else {
-                    /* Restart after last xfer insn */
-                    I = Xfer;
-                }
-                State = Initialize;
-                break;
-
-        }
-
-        /* Next entry */
-        ++I;
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptTransfers4 (CodeSeg* S)
-/* Replace a load of a register followed by a transfer insn of the same register
-** by a load of the second register if possible.
-*/
-{
-    unsigned Changes      = 0;
-    unsigned Load         = 0;  /* Index of load insn */
-    unsigned Xfer         = 0;  /* Index of transfer insn */
-    CodeEntry* LoadEntry  = 0;  /* Pointer to load insn */
-    CodeEntry* XferEntry  = 0;  /* Pointer to xfer insn */
-
-    enum {
-        Search,
-        FoundLoad,
-        FoundXfer
-    } State = Search;
-
-    /* Walk over the entries. Look for a load instruction that is followed by
-    ** a load later.
-    */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        switch (State) {
-
-            case Search:
-                if (E->Info & OF_LOAD) {
-                    /* Found start of sequence */
-                    Load = I;
-                    LoadEntry = E;
-                    State = FoundLoad;
-                }
-                break;
-
-            case FoundLoad:
-                /* If we find a conditional jump, abort the sequence, since
-                ** handling them makes things really complicated.
-                */
-                if (E->Info & OF_CBRA) {
-
-                    /* Switch back to searching */
-                    I = Load;
-                    State = Search;
-
-                /* Does this insn use the target register of the load? */
-                } else if ((E->Use & LoadEntry->Chg) != 0) {
-
-                    /* It it's a xfer instruction, and the block is a basic
-                    ** block, proceed. Otherwise restart
-                    */
-                    if ((E->Info & OF_XFR) != 0       &&
-                        CS_IsBasicBlock (S, Load, I)) {
-                        Xfer = I;
-                        XferEntry = E;
-                        State = FoundXfer;
-                    } else {
-                        I = Load;
-                        State = Search;
-                    }
-
-                /* Does this insn change the target register of the load? */
-                } else if (E->Chg & LoadEntry->Chg) {
-
-                    /* We *may* add code here to remove the load, but I'm
-                    ** currently not sure about the consequences, so I won't
-                    ** do that and bail out instead.
-                    */
-                    I = Load;
-                    State = Search;
-                }
-                break;
-
-            case FoundXfer:
-                /* We are at the instruction behind the xfer. If the register
-                ** isn't used later, and we have an address mode match, we can
-                ** replace the transfer by a load and remove the initial load.
-                */
-                if ((GetRegInfo (S, I, LoadEntry->Chg) & LoadEntry->Chg) == 0   &&
-                    (LoadEntry->AM == AM65_ABS          ||
-                     LoadEntry->AM == AM65_ZP           ||
-                     LoadEntry->AM == AM65_IMM)                                 &&
-                    !MemAccess (S, Load+1, Xfer-1, LoadEntry)) {
-
-                    /* Generate the replacement load insn */
-                    CodeEntry* X = 0;
-                    switch (XferEntry->OPC) {
-
-                        case OP65_TXA:
-                        case OP65_TYA:
-                            X = NewCodeEntry (OP65_LDA,
-                                              LoadEntry->AM,
-                                              LoadEntry->Arg,
-                                              0,
-                                              LoadEntry->LI);
-                            break;
-
-                        case OP65_TAX:
-                            X = NewCodeEntry (OP65_LDX,
-                                              LoadEntry->AM,
-                                              LoadEntry->Arg,
-                                              0,
-                                              LoadEntry->LI);
-                            break;
-
-                        case OP65_TAY:
-                            X = NewCodeEntry (OP65_LDY,
-                                              LoadEntry->AM,
-                                              LoadEntry->Arg,
-                                              0,
-                                              LoadEntry->LI);
-                            break;
-
-                        default:
-                            break;
-                    }
-
-                    /* If we have a replacement load, change the code */
-                    if (X) {
-                        /* Insert after the xfer insn */
-                        CS_InsertEntry (S, X, Xfer+1);
-
-                        /* Remove the xfer instead */
-                        CS_DelEntry (S, Xfer);
-
-                        /* Remove the initial load */
-                        CS_DelEntry (S, Load);
-
-                        /* Correct I so we continue with the next insn */
-                        I -= 2;
-
-                        /* Remember we had changes */
-                        ++Changes;
-                    } else {
-                        /* Restart after last xfer insn */
-                        I = Xfer;
-                    }
-                } else {
-                    /* Restart after last xfer insn */
-                    I = Xfer;
-                }
-                State = Search;
-                break;
-
-        }
-
-        /* Next entry */
-        ++I;
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptPushPop (CodeSeg* S)
-/* Remove a PHA/PLA sequence were A is not used later */
-{
-    unsigned Changes = 0;
-    unsigned Push    = 0;       /* Index of push insn */
-    unsigned Pop     = 0;       /* Index of pop insn */
-    unsigned ChgA    = 0;       /* Flag for A changed */
-    enum {
-        Searching,
-        FoundPush,
-        FoundPop
-    } State = Searching;
-
-    /* Walk over the entries. Look for a push instruction that is followed by
-    ** a pop later, where the pop is not followed by an conditional branch,
-    ** and where the value of the A register is not used later on.
-    ** Look out for the following problems:
-    **
-    **  - There may be another PHA/PLA inside the sequence: Restart it.
-    **  - If the PLA has a label, all jumps to this label must be inside
-    **    the sequence, otherwise we cannot remove the PHA/PLA.
-    */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* X;
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        switch (State) {
-
-            case Searching:
-                if (E->OPC == OP65_PHA) {
-                    /* Found start of sequence */
-                    Push  = I;
-                    ChgA  = 0;
-                    State = FoundPush;
-                }
-                break;
-
-            case FoundPush:
-                if (E->OPC == OP65_PHA) {
-                    /* Inner push/pop, restart */
-                    Push = I;
-                    ChgA = 0;
-                } else if (E->OPC == OP65_PLA) {
-                    /* Found a matching pop */
-                    Pop = I;
-                    /* Check that the block between Push and Pop is a basic
-                    ** block (one entry, one exit). Otherwise ignore it.
-                    */
-                    if (CS_IsBasicBlock (S, Push, Pop)) {
-                        State = FoundPop;
-                    } else {
-                        /* Go into searching mode again */
-                        State = Searching;
-                    }
-                } else if (E->Chg & REG_A) {
-                    ChgA = 1;
-                }
-                break;
-
-            case FoundPop:
-                /* We're at the instruction after the PLA.
-                ** Check for the following conditions:
-                **   - If this instruction is a store of A that doesn't use
-                **     another register, if the instruction does not have a
-                **     label, and A is not used later, we may replace the PHA
-                **     by the store and remove pla if several other conditions
-                **     are met.
-                **   - If this instruction is not a conditional branch, and A
-                **     is either unused later, or not changed by the code
-                **     between push and pop, we may remove PHA and PLA.
-                */
-                if (E->OPC == OP65_STA                          &&
-                    (E->AM == AM65_ABS || E->AM == AM65_ZP)     &&
-                    !CE_HasLabel (E)                            &&
-                    !RegAUsed (S, I+1)                          &&
-                    !MemAccess (S, Push+1, Pop-1, E)) {
-
-                    /* Insert a STA after the PHA */
-                    X = NewCodeEntry (E->OPC, E->AM, E->Arg, E->JumpTo, E->LI);
-                    CS_InsertEntry (S, X, Push+1);
-
-                    /* Remove the PHA instead */
-                    CS_DelEntry (S, Push);
-
-                    /* Remove the PLA/STA sequence */
-                    CS_DelEntries (S, Pop, 2);
-
-                    /* Correct I so we continue with the next insn */
-                    I -= 2;
-
-                    /* Remember we had changes */
-                    ++Changes;
-
-                } else if ((E->Info & OF_CBRA) == 0     &&
-                           (!RegAUsed (S, I) || !ChgA)) {
-
-                    /* We can remove the PHA and PLA instructions */
-                    CS_DelEntry (S, Pop);
-                    CS_DelEntry (S, Push);
-
-                    /* Correct I so we continue with the next insn */
-                    I -= 2;
-
-                    /* Remember we had changes */
-                    ++Changes;
-
-                }
-                /* Go into search mode again */
-                State = Searching;
-                break;
-
-        }
-
-        /* Next entry */
-        ++I;
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptPrecalc (CodeSeg* S)
-/* Replace immediate operations with the accu where the current contents are
-** known by a load of the final value.
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Get pointers to the input and output registers of the insn */
-        const RegContents* Out = &E->RI->Out;
-        const RegContents* In  = &E->RI->In;
-
-        /* Argument for LDn and flag */
-        const char* Arg = 0;
-        opc_t OPC = OP65_LDA;
-
-        /* Handle the different instructions */
-        switch (E->OPC) {
-
-            case OP65_LDA:
-                if (E->AM != AM65_IMM && RegValIsKnown (Out->RegA)) {
-                    /* Result of load is known */
-                    Arg = MakeHexArg (Out->RegA);
-                }
-                break;
-
-            case OP65_LDX:
-                if (E->AM != AM65_IMM && RegValIsKnown (Out->RegX)) {
-                    /* Result of load is known but register is X */
-                    Arg = MakeHexArg (Out->RegX);
-                    OPC = OP65_LDX;
-                }
-                break;
-
-            case OP65_LDY:
-                if (E->AM != AM65_IMM && RegValIsKnown (Out->RegY)) {
-                    /* Result of load is known but register is Y */
-                    Arg = MakeHexArg (Out->RegY);
-                    OPC = OP65_LDY;
-                }
-                break;
-
-            case OP65_EOR:
-                if (RegValIsKnown (Out->RegA)) {
-                    /* Accu op zp with known contents */
-                    Arg = MakeHexArg (Out->RegA);
-                }
-                break;
-
-            case OP65_ADC:
-            case OP65_SBC:
-                /* If this is an operation with an immediate operand of zero,
-                ** and the register is zero, the operation won't give us any
-                ** results we don't already have (including the flags), so
-                ** remove it. Something like this is generated as a result of
-                ** a compare where parts of the values are known to be zero.
-                */
-                if (In->RegA == 0 && CE_IsKnownImm (E, 0x00)) {
-                    /* 0-0 or 0+0 -> remove */
-                    CS_DelEntry (S, I);
-                    ++Changes;
-                }
-                break;
-
-            case OP65_AND:
-                if (CE_IsKnownImm (E, 0xFF)) {
-                    /* AND with 0xFF, remove */
-                    CS_DelEntry (S, I);
-                    ++Changes;
-                } else if (CE_IsKnownImm (E, 0x00)) {
-                    /* AND with 0x00, replace by lda #$00 */
-                    Arg = MakeHexArg (0x00);
-                } else if (RegValIsKnown (Out->RegA)) {
-                    /* Accu AND zp with known contents */
-                    Arg = MakeHexArg (Out->RegA);
-                } else if (In->RegA == 0xFF) {
-                    /* AND but A contains 0xFF - replace by lda */
-                    CE_ReplaceOPC (E, OP65_LDA);
-                    ++Changes;
-                }
-                break;
-
-            case OP65_ORA:
-                if (CE_IsKnownImm (E, 0x00)) {
-                    /* ORA with zero, remove */
-                    CS_DelEntry (S, I);
-                    ++Changes;
-                } else if (CE_IsKnownImm (E, 0xFF)) {
-                    /* ORA with 0xFF, replace by lda #$ff */
-                    Arg = MakeHexArg (0xFF);
-                } else if (RegValIsKnown (Out->RegA)) {
-                    /* Accu AND zp with known contents */
-                    Arg = MakeHexArg (Out->RegA);
-                } else if (In->RegA == 0) {
-                    /* ORA but A contains 0x00 - replace by lda */
-                    CE_ReplaceOPC (E, OP65_LDA);
-                    ++Changes;
-                }
-                break;
-
-            default:
-                break;
-
-        }
-
-        /* Check if we have to replace the insn by LDA */
-        if (Arg) {
-            CodeEntry* X = NewCodeEntry (OPC, AM65_IMM, Arg, 0, E->LI);
-            CS_InsertEntry (S, X, I+1);
-            CS_DelEntry (S, I);
-            ++Changes;
-        }
-
-        /* Next entry */
-        ++I;
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-/*****************************************************************************/
-/*                           Optimize branch types                           */
-/*****************************************************************************/
-
-
-
-unsigned OptBranchDist (CodeSeg* S)
-/* Change branches for the distance needed. */
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if it's a conditional branch to a local label. */
-        if (E->Info & OF_CBRA) {
-
-            /* Is this a branch to a local symbol? */
-            if (E->JumpTo != 0) {
-
-                /* Check if the branch distance is short */
-                int IsShort = IsShortDist (GetBranchDist (S, I, E->JumpTo->Owner));
-
-                /* Make the branch short/long according to distance */
-                if ((E->Info & OF_LBRA) == 0 && !IsShort) {
-                    /* Short branch but long distance */
-                    CE_ReplaceOPC (E, MakeLongBranch (E->OPC));
-                    ++Changes;
-                } else if ((E->Info & OF_LBRA) != 0 && IsShort) {
-                    /* Long branch but short distance */
-                    CE_ReplaceOPC (E, MakeShortBranch (E->OPC));
-                    ++Changes;
-                }
-
-            } else if ((E->Info & OF_LBRA) == 0) {
-
-                /* Short branch to external symbol - make it long */
-                CE_ReplaceOPC (E, MakeLongBranch (E->OPC));
-                ++Changes;
-
-            }
-
-        } else if ((CPUIsets[CPU] & CPU_ISET_65SC02) != 0 &&
-                   (E->Info & OF_UBRA) != 0               &&
-                   E->JumpTo != 0                         &&
-                   IsShortDist (GetBranchDist (S, I, E->JumpTo->Owner))) {
-
-            /* The jump is short and may be replaced by a BRA on the 65C02 CPU */
-            CE_ReplaceOPC (E, OP65_BRA);
-            ++Changes;
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-/*****************************************************************************/
-/*                          Optimize indirect loads                          */
-/*****************************************************************************/
-
-
-
-unsigned OptIndLoads1 (CodeSeg* S)
-/* Change
-**
-**     lda      (zp),y
-**
-** into
-**
-**     lda      (zp,x)
-**
-** provided that x and y are both zero.
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if it's what we're looking for */
-        if (E->OPC == OP65_LDA          &&
-            E->AM == AM65_ZP_INDY       &&
-            E->RI->In.RegY == 0         &&
-            E->RI->In.RegX == 0) {
-
-            /* Replace by the same insn with other addressing mode */
-            CodeEntry* X = NewCodeEntry (E->OPC, AM65_ZPX_IND, E->Arg, 0, E->LI);
-            CS_InsertEntry (S, X, I+1);
-
-            /* Remove the old insn */
-            CS_DelEntry (S, I);
-            ++Changes;
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptIndLoads2 (CodeSeg* S)
-/* Change
-**
-**     lda      (zp,x)
-**
-** into
-**
-**     lda      (zp),y
-**
-** provided that x and y are both zero.
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if it's what we're looking for */
-        if (E->OPC == OP65_LDA          &&
-            E->AM == AM65_ZPX_IND       &&
-            E->RI->In.RegY == 0         &&
-            E->RI->In.RegX == 0) {
-
-            /* Replace by the same insn with other addressing mode */
-            CodeEntry* X = NewCodeEntry (E->OPC, AM65_ZP_INDY, E->Arg, 0, E->LI);
-            CS_InsertEntry (S, X, I+1);
-
-            /* Remove the old insn */
-            CS_DelEntry (S, I);
-            ++Changes;
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
diff --git a/src/cc65/coptind.h b/src/cc65/coptind.h
deleted file mode 100644 (file)
index 90e27d5..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 coptind.h                                 */
-/*                                                                           */
-/*              Environment independent low level optimizations              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef COPTIND_H
-#define COPTIND_H
-
-
-
-/* cc65 */
-#include "codeseg.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned OptRTSJumps1 (CodeSeg* S);
-/* Replace jumps to RTS by RTS */
-
-unsigned OptRTSJumps2 (CodeSeg* S);
-/* Replace long conditional jumps to RTS */
-
-unsigned OptDeadJumps (CodeSeg* S);
-/* Remove dead jumps (jumps to the next instruction) */
-
-unsigned OptDeadCode (CodeSeg* S);
-/* Remove dead code (code that follows an unconditional jump or an rts/rti
-** and has no label)
-*/
-
-unsigned OptJumpCascades (CodeSeg* S);
-/* Optimize jump cascades (jumps to jumps). In such a case, the jump is
-** replaced by a jump to the final location. This will in some cases produce
-** worse code, because some jump targets are no longer reachable by short
-** branches, but this is quite rare, so there are more advantages than
-** disadvantages.
-*/
-
-unsigned OptRTS (CodeSeg* S);
-/* Optimize subroutine calls followed by an RTS. The subroutine call will get
-** replaced by a jump. Don't bother to delete the RTS if it does not have a
-** label, the dead code elimination should take care of it.
-*/
-
-unsigned OptJumpTarget1 (CodeSeg* S);
-/* If the instruction preceeding an unconditional branch is the same as the
-** instruction preceeding the jump target, the jump target may be moved
-** one entry back. This is a size optimization, since the instruction before
-** the branch gets removed.
-*/
-
-unsigned OptJumpTarget2 (CodeSeg* S);
-/* If a bcs jumps to a sec insn or a bcc jumps to clc, skip this insn, since
-** it's job is already done.
-*/
-
-unsigned OptJumpTarget3 (CodeSeg* S);
-/* Jumps to load instructions of a register, that do already have the matching
-** register contents may skip the load instruction, since it's job is already
-** done.
-*/
-
-unsigned OptCondBranches1 (CodeSeg* S);
-/* If an immidiate load of a register is followed by a conditional jump that
-** is never taken because the load of the register sets the flags in such a
-** manner, remove the conditional branch.
-*/
-
-unsigned OptCondBranches2 (CodeSeg* S);
-/* If on entry to a "rol a" instruction the accu is zero, and a beq/bne follows,
-** we can remove the rol and branch on the state of the carry.
-*/
-
-unsigned OptUnusedLoads (CodeSeg* S);
-/* Remove loads of registers where the value loaded is not used later. */
-
-unsigned OptUnusedStores (CodeSeg* S);
-/* Remove stores into zero page registers that aren't used later */
-
-unsigned OptDupLoads (CodeSeg* S);
-/* Remove loads of registers where the value loaded is already in the register. */
-
-unsigned OptStoreLoad (CodeSeg* S);
-/* Remove a store followed by a load from the same location. */
-
-unsigned OptTransfers1 (CodeSeg* S);
-/* Remove transfers from one register to another and back */
-
-unsigned OptTransfers2 (CodeSeg* S);
-/* Replace loads followed by a register transfer by a load with the second
-** register if possible.
-*/
-
-unsigned OptTransfers3 (CodeSeg* S);
-/* Replace a register transfer followed by a store of the second register by a
-** store of the first register if this is possible.
-*/
-
-unsigned OptTransfers4 (CodeSeg* S);
-/* Replace a load of a register followed by a transfer insn of the same register
-** by a load of the second register if possible.
-*/
-
-unsigned OptPushPop (CodeSeg* S);
-/* Remove a PHA/PLA sequence were A is not used later */
-
-unsigned OptPrecalc (CodeSeg* S);
-/* Replace immediate operations with the accu where the current contents are
-** known by a load of the final value.
-*/
-
-unsigned OptBranchDist (CodeSeg* S);
-/* Change branches for the distance needed. */
-
-unsigned OptIndLoads1 (CodeSeg* S);
-/* Change
-**
-**     lda      (zp),y
-**
-** into
-**
-**     lda      (zp,x)
-**
-** provided that x and y are both zero.
-*/
-
-unsigned OptIndLoads2 (CodeSeg* S);
-/* Change
-**
-**     lda      (zp,x)
-**
-** into
-**
-**     lda      (zp),y
-**
-** provided that x and y are both zero.
-*/
-
-
-
-/* End of coptind.h */
-
-#endif
diff --git a/src/cc65/coptneg.c b/src/cc65/coptneg.c
deleted file mode 100644 (file)
index 03b39eb..0000000
+++ /dev/null
@@ -1,607 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 coptneg.c                                 */
-/*                                                                           */
-/*                        Optimize negation sequences                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* cc65 */
-#include "codeent.h"
-#include "codeinfo.h"
-#include "coptneg.h"
-
-
-
-/*****************************************************************************/
-/*                            bnega optimizations                            */
-/*****************************************************************************/
-
-
-
-unsigned OptBNegA1 (CodeSeg* S)
-/* Check for
-**
-**      ldx     #$00
-**      lda     ..
-**      jsr     bnega
-**
-** Remove the ldx if the lda does not use it.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[2];
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for a ldx */
-        if (E->OPC == OP65_LDX                  &&
-            E->AM == AM65_IMM                   &&
-            (E->Flags & CEF_NUMARG) != 0        &&
-            E->Num == 0                         &&
-            CS_GetEntries (S, L, I+1, 2)        &&
-            L[0]->OPC == OP65_LDA               &&
-            (L[0]->Use & REG_X) == 0            &&
-            !CE_HasLabel (L[0])                 &&
-            CE_IsCallTo (L[1], "bnega")         &&
-            !CE_HasLabel (L[1])) {
-
-            /* Remove the ldx instruction */
-            CS_DelEntry (S, I);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptBNegA2 (CodeSeg* S)
-/* Check for
-**
-**      lda     ..
-**      jsr     bnega
-**      jeq/jne ..
-**
-** Adjust the conditional branch and remove the call to the subroutine.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[2];
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if ((E->OPC == OP65_ADC ||
-             E->OPC == OP65_AND ||
-             E->OPC == OP65_DEA ||
-             E->OPC == OP65_EOR ||
-             E->OPC == OP65_INA ||
-             E->OPC == OP65_LDA ||
-             E->OPC == OP65_ORA ||
-             E->OPC == OP65_PLA ||
-             E->OPC == OP65_SBC ||
-             E->OPC == OP65_TXA ||
-             E->OPC == OP65_TYA)                &&
-            CS_GetEntries (S, L, I+1, 2)        &&
-            CE_IsCallTo (L[0], "bnega")         &&
-            !CE_HasLabel (L[0])                 &&
-            (L[1]->Info & OF_ZBRA) != 0         &&
-            !CE_HasLabel (L[1])) {
-
-            /* Invert the branch */
-            CE_ReplaceOPC (L[1], GetInverseBranch (L[1]->OPC));
-
-            /* Delete the subroutine call */
-            CS_DelEntry (S, I+1);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-/*****************************************************************************/
-/*                            bnegax optimizations                           */
-/*****************************************************************************/
-
-
-
-unsigned OptBNegAX1 (CodeSeg* S)
-/* On a call to bnegax, if X is zero, the result depends only on the value in
-** A, so change the call to a call to bnega. This will get further optimized
-** later if possible.
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if this is a call to bnegax, and if X is known and zero */
-        if (E->RI->In.RegX == 0 && CE_IsCallTo (E, "bnegax")) {
-
-            CodeEntry* X = NewCodeEntry (OP65_JSR, AM65_ABS, "bnega", 0, E->LI);
-            CS_InsertEntry (S, X, I+1);
-            CS_DelEntry (S, I);
-
-            /* We had changes */
-            ++Changes;
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptBNegAX2 (CodeSeg* S)
-/* Search for the sequence:
-**
-**      ldy     #xx
-**      jsr     ldaxysp
-**      jsr     bnegax
-**      jne/jeq ...
-**
-** and replace it by
-**
-**      ldy     #xx
-**      lda     (sp),y
-**      dey
-**      ora     (sp),y
-**      jeq/jne ...
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[4];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_LDY               &&
-            CE_IsConstImm (L[0])                &&
-            !CS_RangeHasLabel (S, I+1, 3)       &&
-            CS_GetEntries (S, L+1, I+1, 3)      &&
-            CE_IsCallTo (L[1], "ldaxysp")       &&
-            CE_IsCallTo (L[2], "bnegax")        &&
-            (L[3]->Info & OF_ZBRA) != 0) {
-
-            CodeEntry* X;
-
-            /* lda (sp),y */
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+1);
-
-            /* dey */
-            X = NewCodeEntry (OP65_DEY, AM65_IMP, 0, 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+2);
-
-            /* ora (sp),y */
-            X = NewCodeEntry (OP65_ORA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+3);
-
-            /* Invert the branch */
-            CE_ReplaceOPC (L[3], GetInverseBranch (L[3]->OPC));
-
-            /* Delete the entries no longer needed. */
-            CS_DelEntries (S, I+4, 2);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptBNegAX3 (CodeSeg* S)
-/* Search for the sequence:
-**
-**      lda     xx
-**      ldx     yy
-**      jsr     bnegax
-**      jne/jeq ...
-**
-** and replace it by
-**
-**      lda     xx
-**      ora     xx+1
-**      jeq/jne ...
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[3];
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (E->OPC == OP65_LDA                  &&
-            CS_GetEntries (S, L, I+1, 3)        &&
-            L[0]->OPC == OP65_LDX               &&
-            !CE_HasLabel (L[0])                 &&
-            CE_IsCallTo (L[1], "bnegax")        &&
-            !CE_HasLabel (L[1])                 &&
-            (L[2]->Info & OF_ZBRA) != 0         &&
-            !CE_HasLabel (L[2])) {
-
-            /* ldx --> ora */
-            CE_ReplaceOPC (L[0], OP65_ORA);
-
-            /* Invert the branch */
-            CE_ReplaceOPC (L[2], GetInverseBranch (L[2]->OPC));
-
-            /* Delete the subroutine call */
-            CS_DelEntry (S, I+2);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptBNegAX4 (CodeSeg* S)
-/* Search for the sequence:
-**
-**      jsr     xxx
-**      jsr     bnega(x)
-**      jeq/jne ...
-**
-** and replace it by:
-**
-**      jsr     xxx
-**      <boolean test>
-**      jne/jeq ...
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[2];
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (E->OPC == OP65_JSR                  &&
-            CS_GetEntries (S, L, I+1, 2)        &&
-            L[0]->OPC == OP65_JSR               &&
-            strncmp (L[0]->Arg,"bnega",5) == 0  &&
-            !CE_HasLabel (L[0])                 &&
-            (L[1]->Info & OF_ZBRA) != 0         &&
-            !CE_HasLabel (L[1])) {
-
-            CodeEntry* X;
-
-            /* Check if we're calling bnega or bnegax */
-            int ByteSized = (strcmp (L[0]->Arg, "bnega") == 0);
-
-            /* Insert apropriate test code */
-            if (ByteSized) {
-                /* Test bytes */
-                X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, L[0]->LI);
-                CS_InsertEntry (S, X, I+2);
-            } else {
-                /* Test words */
-                X = NewCodeEntry (OP65_STX, AM65_ZP, "tmp1", 0, L[0]->LI);
-                CS_InsertEntry (S, X, I+2);
-                X = NewCodeEntry (OP65_ORA, AM65_ZP, "tmp1", 0, L[0]->LI);
-                CS_InsertEntry (S, X, I+3);
-            }
-
-            /* Delete the subroutine call */
-            CS_DelEntry (S, I+1);
-
-            /* Invert the branch */
-            CE_ReplaceOPC (L[1], GetInverseBranch (L[1]->OPC));
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-/*****************************************************************************/
-/*                            negax optimizations                            */
-/*****************************************************************************/
-
-
-
-unsigned OptNegAX1 (CodeSeg* S)
-/* Search for a call to negax and replace it by
-**
-**      eor     #$FF
-**      clc
-**      adc     #$01
-**
-** if X isn't used later.
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if this is a call to negax, and if X isn't used later */
-        if (CE_IsCallTo (E, "negax") && !RegXUsed (S, I+1)) {
-
-            CodeEntry* X;
-
-            /* Add replacement code behind */
-            X = NewCodeEntry (OP65_EOR, AM65_IMM, "$FF", 0, E->LI);
-            CS_InsertEntry (S, X, I+1);
-
-            X = NewCodeEntry (OP65_CLC, AM65_IMP, 0, 0, E->LI);
-            CS_InsertEntry (S, X, I+2);
-
-            X = NewCodeEntry (OP65_ADC, AM65_IMM, "$01", 0, E->LI);
-            CS_InsertEntry (S, X, I+3);
-
-            /* Delete the call to negax */
-            CS_DelEntry (S, I);
-
-            /* Skip the generated code */
-            I += 2;
-
-            /* We had changes */
-            ++Changes;
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptNegAX2 (CodeSeg* S)
-/* Search for a call to negax and replace it by
-**
-**      ldx     #$FF
-**      eor     #$FF
-**      clc
-**      adc     #$01
-**      bne     L1
-**      inx
-** L1:
-**
-** if X is known and zero on entry.
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* P;
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if this is a call to negax, and if X is known and zero */
-        if (E->RI->In.RegX == 0                 &&
-            CE_IsCallTo (E, "negax")            &&
-            (P = CS_GetNextEntry (S, I)) != 0) {
-
-            CodeEntry* X;
-            CodeLabel* L;
-
-            /* Add replacement code behind */
-
-            /* ldx #$FF */
-            X = NewCodeEntry (OP65_LDX, AM65_IMM, "$FF", 0, E->LI);
-            CS_InsertEntry (S, X, I+1);
-
-            /* eor #$FF */
-            X = NewCodeEntry (OP65_EOR, AM65_IMM, "$FF", 0, E->LI);
-            CS_InsertEntry (S, X, I+2);
-
-            /* clc */
-            X = NewCodeEntry (OP65_CLC, AM65_IMP, 0, 0, E->LI);
-            CS_InsertEntry (S, X, I+3);
-
-            /* adc #$01 */
-            X = NewCodeEntry (OP65_ADC, AM65_IMM, "$01", 0, E->LI);
-            CS_InsertEntry (S, X, I+4);
-
-            /* Get the label attached to the insn following the call */
-            L = CS_GenLabel (S, P);
-
-            /* bne L */
-            X = NewCodeEntry (OP65_BNE, AM65_BRA, L->Name, L, E->LI);
-            CS_InsertEntry (S, X, I+5);
-
-            /* inx */
-            X = NewCodeEntry (OP65_INX, AM65_IMP, 0, 0, E->LI);
-            CS_InsertEntry (S, X, I+6);
-
-            /* Delete the call to negax */
-            CS_DelEntry (S, I);
-
-            /* Skip the generated code */
-            I += 5;
-
-            /* We had changes */
-            ++Changes;
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-/*****************************************************************************/
-/*                           complax optimizations                           */
-/*****************************************************************************/
-
-
-
-unsigned OptComplAX1 (CodeSeg* S)
-/* Search for a call to complax and replace it by
-**
-**      eor     #$FF
-**
-** if X isn't used later.
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check if this is a call to negax, and if X isn't used later */
-        if (CE_IsCallTo (E, "complax") && !RegXUsed (S, I+1)) {
-
-            CodeEntry* X;
-
-            /* Add replacement code behind */
-            X = NewCodeEntry (OP65_EOR, AM65_IMM, "$FF", 0, E->LI);
-            CS_InsertEntry (S, X, I+1);
-
-            /* Delete the call to negax */
-            CS_DelEntry (S, I);
-
-            /* We had changes */
-            ++Changes;
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
diff --git a/src/cc65/coptneg.h b/src/cc65/coptneg.h
deleted file mode 100644 (file)
index f549fc5..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 coptneg.h                                 */
-/*                                                                           */
-/*                        Optimize negation sequences                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef COPTNEG_H
-#define COPTNEG_H
-
-
-
-/* cc65 */
-#include "codeseg.h"
-
-
-
-/*****************************************************************************/
-/*                            bnega optimizations                            */
-/*****************************************************************************/
-
-
-
-unsigned OptBNegA1 (CodeSeg* S);
-/* Check for
-**
-**      ldx     #$00
-**      lda     ..
-**      jsr     bnega
-**
-** Remove the ldx if the lda does not use it.
-*/
-
-unsigned OptBNegA2 (CodeSeg* S);
-/* Check for
-**
-**      lda     ..
-**      jsr     bnega
-**      jeq/jne ..
-**
-** Adjust the conditional branch and remove the call to the subroutine.
-*/
-
-
-
-/*****************************************************************************/
-/*                            bnegax optimizations                           */
-/*****************************************************************************/
-
-
-
-unsigned OptBNegAX1 (CodeSeg* S);
-/* On a call to bnegax, if X is zero, the result depends only on the value in
-** A, so change the call to a call to bnega. This will get further optimized
-** later if possible.
-*/
-
-unsigned OptBNegAX2 (CodeSeg* S);
-/* Search for the sequence:
-**
-**      lda     (xx),y
-**      tax
-**      dey
-**      lda     (xx),y
-**      jsr     bnegax
-**      jne/jeq ...
-**
-** and replace it by
-**
-**      lda     (xx),y
-**      dey
-**      ora     (xx),y
-**      jeq/jne ...
-*/
-
-unsigned OptBNegAX3 (CodeSeg* S);
-/* Search for the sequence:
-**
-**      lda     xx
-**      ldx     yy
-**      jsr     bnegax
-**      jne/jeq ...
-**
-** and replace it by
-**
-**      lda     xx
-**      ora     xx+1
-**      jeq/jne ...
-*/
-
-unsigned OptBNegAX4 (CodeSeg* S);
-/* Search for the sequence:
-**
-**      jsr     xxx
-**      jsr     bnega(x)
-**      jeq/jne ...
-**
-** and replace it by:
-**
-**      jsr     xxx
-**      <boolean test>
-**      jne/jeq ...
-*/
-
-
-
-/*****************************************************************************/
-/*                            negax optimizations                            */
-/*****************************************************************************/
-
-
-
-unsigned OptNegAX1 (CodeSeg* S);
-/* Search for a call to negax and replace it by
-**
-**      eor     #$FF
-**      clc
-**      adc     #$01
-**
-** if X isn't used later.
-*/
-
-unsigned OptNegAX2 (CodeSeg* S);
-/* Search for a call to negax and replace it by
-**
-**      ldx     #$FF
-**      eor     #$FF
-**      clc
-**      adc     #$01
-**      bne     L1
-**      inx
-** L1:
-**
-** if X is known and zero on entry.
-*/
-
-
-
-/*****************************************************************************/
-/*                           complax optimizations                           */
-/*****************************************************************************/
-
-
-
-unsigned OptComplAX1 (CodeSeg* S);
-/* Search for a call to complax and replace it by
-**
-**      eor     #$FF
-**
-** if X isn't used later.
-*/
-
-
-
-/* End of coptneg.h */
-
-#endif
diff --git a/src/cc65/coptptrload.c b/src/cc65/coptptrload.c
deleted file mode 100644 (file)
index ee783c9..0000000
+++ /dev/null
@@ -1,1459 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                               coptptrload.c                               */
-/*                                                                           */
-/*                      Optimize loads through pointers                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2009 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "xmalloc.h"
-
-/* cc65 */
-#include "codeent.h"
-#include "codeinfo.h"
-#include "coptptrload.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned OptPtrLoad1 (CodeSeg* S)
-/* Search for the sequence:
-**
-**      clc
-**      adc     xxx
-**      tay
-**      txa
-**      adc     yyy
-**      tax
-**      tya
-**      ldy     #$00
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      sta     ptr1
-**      txa
-**      clc
-**      adc     yyy
-**      sta     ptr1+1
-**      ldy     xxx
-**      ldx     #$00
-**      lda     (ptr1),y
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[9];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_CLC               &&
-            CS_GetEntries (S, L+1, I+1, 8)      &&
-            L[1]->OPC == OP65_ADC               &&
-            (L[1]->AM == AM65_ABS          ||
-             L[1]->AM == AM65_ZP           ||
-             L[1]->AM == AM65_IMM)              &&
-            L[2]->OPC == OP65_TAY               &&
-            L[3]->OPC == OP65_TXA               &&
-            L[4]->OPC == OP65_ADC               &&
-            L[5]->OPC == OP65_TAX               &&
-            L[6]->OPC == OP65_TYA               &&
-            L[7]->OPC == OP65_LDY               &&
-            CE_IsKnownImm (L[7], 0)             &&
-            CE_IsCallTo (L[8], "ldauidx")       &&
-            !CS_RangeHasLabel (S, I+1, 8)) {
-
-            CodeEntry* X;
-            CodeEntry* P;
-
-            /* Track the insertion point */
-            unsigned IP = I+9;
-
-            /* sta ptr1 */
-            X = NewCodeEntry (OP65_STA, AM65_ZP, "ptr1", 0, L[2]->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            /* If the instruction before the clc is a ldx, replace the
-            ** txa by an lda with the same location of the ldx. Otherwise
-            ** transfer the value in X to A.
-            */
-            if ((P = CS_GetPrevEntry (S, I)) != 0 &&
-                P->OPC == OP65_LDX                &&
-                !CE_HasLabel (P)) {
-                X = NewCodeEntry (OP65_LDA, P->AM, P->Arg, 0, P->LI);
-            } else {
-                X = NewCodeEntry (OP65_TXA, AM65_IMP, 0, 0, L[3]->LI);
-            }
-            CS_InsertEntry (S, X, IP++);
-
-            /* clc */
-            X = NewCodeEntry (OP65_CLC, AM65_IMP, 0, 0, L[0]->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            /* adc yyy */
-            X = NewCodeEntry (OP65_ADC, L[4]->AM, L[4]->Arg, 0, L[4]->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            /* sta ptr1+1 */
-            X = NewCodeEntry (OP65_STA, AM65_ZP, "ptr1+1", 0, L[5]->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            /* ldy xxx */
-            X = NewCodeEntry (OP65_LDY, L[1]->AM, L[1]->Arg, 0, L[1]->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            /* ldx #$00 */
-            X = NewCodeEntry (OP65_LDX, AM65_IMM, "$00", 0, L[8]->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            /* lda (ptr1),y */
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "ptr1", 0, L[8]->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            /* Remove the old instructions */
-            CS_DelEntries (S, I, 9);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptPtrLoad2 (CodeSeg* S)
-/* Search for the sequence:
-**
-**      adc     xxx
-**      pha
-**      txa
-**      iny
-**      adc     yyy
-**      tax
-**      pla
-**      ldy
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      adc     xxx
-**      sta     ptr1
-**      txa
-**      iny
-**      adc     yyy
-**      sta     ptr1+1
-**      ldy
-**      ldx     #$00
-**      lda     (ptr1),y
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[9];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_ADC               &&
-            CS_GetEntries (S, L+1, I+1, 8)      &&
-            L[1]->OPC == OP65_PHA               &&
-            L[2]->OPC == OP65_TXA               &&
-            L[3]->OPC == OP65_INY               &&
-            L[4]->OPC == OP65_ADC               &&
-            L[5]->OPC == OP65_TAX               &&
-            L[6]->OPC == OP65_PLA               &&
-            L[7]->OPC == OP65_LDY               &&
-            CE_IsCallTo (L[8], "ldauidx")       &&
-            !CS_RangeHasLabel (S, I+1, 8)) {
-
-            CodeEntry* X;
-
-            /* Store the low byte and remove the PHA instead */
-            X = NewCodeEntry (OP65_STA, AM65_ZP, "ptr1", 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+1);
-
-            /* Store the high byte */
-            X = NewCodeEntry (OP65_STA, AM65_ZP, "ptr1+1", 0, L[4]->LI);
-            CS_InsertEntry (S, X, I+6);
-
-            /* Load high and low byte */
-            X = NewCodeEntry (OP65_LDX, AM65_IMM, "$00", 0, L[6]->LI);
-            CS_InsertEntry (S, X, I+10);
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "ptr1", 0, L[6]->LI);
-            CS_InsertEntry (S, X, I+11);
-
-            /* Delete the old code */
-            CS_DelEntry (S, I+12);      /* jsr ldauidx */
-            CS_DelEntry (S, I+8);       /* pla */
-            CS_DelEntry (S, I+7);       /* tax */
-            CS_DelEntry (S, I+2);       /* pha */
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptPtrLoad3 (CodeSeg* S)
-/* Search for the sequence:
-**
-**      lda     #<(label+0)
-**      ldx     #>(label+0)
-**      clc
-**      adc     xxx
-**      bcc     L
-**      inx
-** L:   ldy     #$00
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      ldy     xxx
-**      ldx     #$00
-**      lda     label,y
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[8];
-        unsigned Len;
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_LDA                            &&
-            L[0]->AM == AM65_IMM                             &&
-            CS_GetEntries (S, L+1, I+1, 7)                   &&
-            L[1]->OPC == OP65_LDX                            &&
-            L[1]->AM == AM65_IMM                             &&
-            L[2]->OPC == OP65_CLC                            &&
-            L[3]->OPC == OP65_ADC                            &&
-            (L[3]->AM == AM65_ABS || L[3]->AM == AM65_ZP)    &&
-            (L[4]->OPC == OP65_BCC || L[4]->OPC == OP65_JCC) &&
-            L[4]->JumpTo != 0                                &&
-            L[4]->JumpTo->Owner == L[6]                      &&
-            L[5]->OPC == OP65_INX                            &&
-            L[6]->OPC == OP65_LDY                            &&
-            CE_IsKnownImm (L[6], 0)                          &&
-            CE_IsCallTo (L[7], "ldauidx")                    &&
-            !CS_RangeHasLabel (S, I+1, 5)                    &&
-            !CE_HasLabel (L[7])                              &&
-            /* Check the label last because this is quite costly */
-            (Len = strlen (L[0]->Arg)) > 3                   &&
-            L[0]->Arg[0] == '<'                              &&
-            L[0]->Arg[1] == '('                              &&
-            strlen (L[1]->Arg) == Len                        &&
-            L[1]->Arg[0] == '>'                              &&
-            memcmp (L[0]->Arg+1, L[1]->Arg+1, Len-1) == 0) {
-
-            CodeEntry* X;
-            char* Label;
-
-            /* We will create all the new stuff behind the current one so
-            ** we keep the line references.
-            */
-            X = NewCodeEntry (OP65_LDY, L[3]->AM, L[3]->Arg, 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+8);
-
-            X = NewCodeEntry (OP65_LDX, AM65_IMM, "$00", 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+9);
-
-            Label = memcpy (xmalloc (Len-2), L[0]->Arg+2, Len-3);
-            Label[Len-3] = '\0';
-            X = NewCodeEntry (OP65_LDA, AM65_ABSY, Label, 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+10);
-            xfree (Label);
-
-            /* Remove the old code */
-            CS_DelEntries (S, I, 8);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptPtrLoad4 (CodeSeg* S)
-/* Search for the sequence:
-**
-**      lda     #<(label+0)
-**      ldx     #>(label+0)
-**      ldy     #$xx
-**      clc
-**      adc     (sp),y
-**      bcc     L
-**      inx
-** L:   ldy     #$00
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      ldy     #$xx
-**      lda     (sp),y
-**      tay
-**      ldx     #$00
-**      lda     label,y
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[9];
-        unsigned Len;
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_LDA                            &&
-            L[0]->AM == AM65_IMM                             &&
-            CS_GetEntries (S, L+1, I+1, 8)                   &&
-            L[1]->OPC == OP65_LDX                            &&
-            L[1]->AM == AM65_IMM                             &&
-            !CE_HasLabel (L[1])                              &&
-            L[2]->OPC == OP65_LDY                            &&
-            CE_IsConstImm (L[2])                             &&
-            !CE_HasLabel (L[2])                              &&
-            L[3]->OPC == OP65_CLC                            &&
-            !CE_HasLabel (L[3])                              &&
-            L[4]->OPC == OP65_ADC                            &&
-            L[4]->AM == AM65_ZP_INDY                         &&
-            !CE_HasLabel (L[4])                              &&
-            (L[5]->OPC == OP65_BCC || L[5]->OPC == OP65_JCC) &&
-            L[5]->JumpTo != 0                                &&
-            L[5]->JumpTo->Owner == L[7]                      &&
-            !CE_HasLabel (L[5])                              &&
-            L[6]->OPC == OP65_INX                            &&
-            !CE_HasLabel (L[6])                              &&
-            L[7]->OPC == OP65_LDY                            &&
-            CE_IsKnownImm (L[7], 0)                          &&
-            CE_IsCallTo (L[8], "ldauidx")                    &&
-            !CE_HasLabel (L[8])                              &&
-            /* Check the label last because this is quite costly */
-            (Len = strlen (L[0]->Arg)) > 3                   &&
-            L[0]->Arg[0] == '<'                              &&
-            L[0]->Arg[1] == '('                              &&
-            strlen (L[1]->Arg) == Len                        &&
-            L[1]->Arg[0] == '>'                              &&
-            memcmp (L[0]->Arg+1, L[1]->Arg+1, Len-1) == 0) {
-
-            CodeEntry* X;
-            char* Label;
-
-            /* Add the lda */
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, L[4]->Arg, 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+3);
-
-            /* Add the tay */
-            X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+4);
-
-            /* Add the ldx */
-            X = NewCodeEntry (OP65_LDX, AM65_IMM, "$00", 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+5);
-
-            /* Add the lda */
-            Label = memcpy (xmalloc (Len-2), L[0]->Arg+2, Len-3);
-            Label[Len-3] = '\0';
-            X = NewCodeEntry (OP65_LDA, AM65_ABSY, Label, 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+6);
-            xfree (Label);
-
-            /* Remove the old code */
-            CS_DelEntries (S, I, 2);
-            CS_DelEntries (S, I+5, 6);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptPtrLoad5 (CodeSeg* S)
-/* Search for the sequence:
-**
-**      jsr     pushax
-**      ldx     #$00
-**      lda     yyy
-**      jsr     tosaddax
-**      ldy     #$00
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      sta     ptr1
-**      stx     ptr1+1
-**      ldy     yyy
-**      ldx     #$00
-**      lda     (ptr1),y
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[6];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (CE_IsCallTo (L[0], "pushax")                &&
-            CS_GetEntries (S, L+1, I+1, 5)              &&
-            L[1]->OPC == OP65_LDX                       &&
-            CE_IsKnownImm (L[1], 0)                     &&
-            L[2]->OPC == OP65_LDA                       &&
-            (L[2]->AM == AM65_ABS       ||
-             L[2]->AM == AM65_ZP        ||
-             L[2]->AM == AM65_IMM)                      &&
-            CE_IsCallTo (L[3], "tosaddax")              &&
-            L[4]->OPC == OP65_LDY                       &&
-            CE_IsKnownImm (L[4], 0)                     &&
-            CE_IsCallTo (L[5], "ldauidx")               &&
-            !CS_RangeHasLabel (S, I+1, 5)) {
-
-            CodeEntry* X;
-
-            /* sta ptr1 */
-            X = NewCodeEntry (OP65_STA, AM65_ZP, "ptr1", 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+6);
-
-            /* stx ptr1+1 */
-            X = NewCodeEntry (OP65_STX, AM65_ZP, "ptr1+1", 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+7);
-
-            /* ldy yyy */
-            X = NewCodeEntry (OP65_LDY, L[2]->AM, L[2]->Arg, 0, L[2]->LI);
-            CS_InsertEntry (S, X, I+8);
-
-            /* ldx #$00 */
-            X = NewCodeEntry (OP65_LDX, AM65_IMM, "$00", 0, L[5]->LI);
-            CS_InsertEntry (S, X, I+9);
-
-            /* lda (ptr1),y */
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "ptr1", 0, L[5]->LI);
-            CS_InsertEntry (S, X, I+10);
-
-            /* Remove the old code */
-            CS_DelEntries (S, I, 6);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptPtrLoad6 (CodeSeg* S)
-/* Search for the sequence:
-**
-**      jsr     pushax
-**      ldy     #xxx
-**      ldx     #$00
-**      lda     (sp),y
-**      jsr     tosaddax
-**      ldy     #$00
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      sta     ptr1
-**      stx     ptr1+1
-**      ldy     #xxx-2
-**      lda     (sp),y
-**      tay
-**      ldx     #$00
-**      lda     (ptr1),y
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[7];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (CE_IsCallTo (L[0], "pushax")                &&
-            CS_GetEntries (S, L+1, I+1, 6)              &&
-            L[1]->OPC == OP65_LDY                       &&
-            CE_IsConstImm (L[1])                        &&
-            L[1]->Num >= 2                              &&
-            L[2]->OPC == OP65_LDX                       &&
-            CE_IsKnownImm (L[2], 0)                     &&
-            L[3]->OPC == OP65_LDA                       &&
-            L[3]->AM == AM65_ZP_INDY                    &&
-            CE_IsCallTo (L[4], "tosaddax")              &&
-            L[5]->OPC == OP65_LDY                       &&
-            CE_IsKnownImm (L[5], 0)                     &&
-            CE_IsCallTo (L[6], "ldauidx")               &&
-            !CS_RangeHasLabel (S, I+1, 6)               &&
-            !RegYUsed (S, I+7)) {
-
-            CodeEntry*  X;
-            const char* Arg;
-
-            /* sta ptr1 */
-            X = NewCodeEntry (OP65_STA, AM65_ZP, "ptr1", 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+7);
-
-            /* stx ptr1+1 */
-            X = NewCodeEntry (OP65_STX, AM65_ZP, "ptr1+1", 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+8);
-
-            /* ldy #xxx-2 */
-            Arg = MakeHexArg (L[1]->Num - 2);
-            X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+9);
-
-            /* lda (sp),y */
-            X = NewCodeEntry (OP65_LDA, L[3]->AM, L[3]->Arg, 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+10);
-
-            /* tay */
-            X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+11);
-
-            /* ldx #$00 */
-            X = NewCodeEntry (OP65_LDX, AM65_IMM, "$00", 0, L[5]->LI);
-            CS_InsertEntry (S, X, I+12);
-
-            /* lda (ptr1),y */
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "ptr1", 0, L[6]->LI);
-            CS_InsertEntry (S, X, I+13);
-
-            /* Remove the old code */
-            CS_DelEntries (S, I, 7);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptPtrLoad7 (CodeSeg* S)
-/* Search for the sequence:
-**
-**      jsr     aslax1/shlax1
-**      clc
-**      adc     xxx
-**      tay
-**      txa
-**      adc     yyy
-**      tax
-**      tya
-**      ldy     zzz
-**      jsr     ldaxidx
-**
-** and replace it by:
-**
-**      stx     tmp1
-**      asl     a
-**      rol     tmp1
-**      clc
-**      adc     xxx
-**      sta     ptr1
-**      lda     tmp1
-**      adc     yyy
-**      sta     ptr1+1
-**      ldy     zzz
-**      lda     (ptr1),y
-**      tax
-**      dey
-**      lda     (ptr1),y
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[10];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_JSR                               &&
-            (strcmp (L[0]->Arg, "aslax1") == 0          ||
-             strcmp (L[0]->Arg, "shlax1") == 0)                 &&
-            CS_GetEntries (S, L+1, I+1, 9)                      &&
-            L[1]->OPC == OP65_CLC                               &&
-            L[2]->OPC == OP65_ADC                               &&
-            L[3]->OPC == OP65_TAY                               &&
-            L[4]->OPC == OP65_TXA                               &&
-            L[5]->OPC == OP65_ADC                               &&
-            L[6]->OPC == OP65_TAX                               &&
-            L[7]->OPC == OP65_TYA                               &&
-            L[8]->OPC == OP65_LDY                               &&
-            CE_IsCallTo (L[9], "ldaxidx")                       &&
-            !CS_RangeHasLabel (S, I+1, 9)) {
-
-            CodeEntry* X;
-
-            /* Track the insertion point */
-            unsigned IP = I + 10;
-
-
-            /* If X is zero on entry to aslax1, we can generate:
-            **
-            **      asl     a
-            **      bcc     L1
-            **      inx
-            ** L1:  clc
-            **
-            ** instead of the code above. "lda tmp1" needs to be changed
-            ** to "txa" in this case.
-            */
-            int ShortCode = (L[0]->RI->In.RegX == 0);
-
-            if (ShortCode) {
-
-                CodeLabel* Lab;
-
-                /* asl a */
-                X = NewCodeEntry (OP65_ASL, AM65_ACC, "a", 0, L[0]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                /* Generate clc first, since we need the label */
-                X = NewCodeEntry (OP65_CLC, AM65_IMP, 0, 0, L[1]->LI);
-                CS_InsertEntry (S, X, IP);
-
-                /* Get the label */
-                Lab = CS_GenLabel (S, X);
-
-                /* bcc Lab */
-                X = NewCodeEntry (OP65_BCC, AM65_BRA, Lab->Name, Lab, L[0]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                /* inx */
-                X = NewCodeEntry (OP65_INX, AM65_IMP, 0, 0, L[0]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                /* Skip the clc insn */
-                ++IP;
-
-            } else {
-
-                /* stx tmp1 */
-                X = NewCodeEntry (OP65_STX, AM65_ZP, "tmp1", 0, L[0]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                /* asl a */
-                X = NewCodeEntry (OP65_ASL, AM65_ACC, "a", 0, L[0]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                /* rol tmp1 */
-                X = NewCodeEntry (OP65_ROL, AM65_ZP, "tmp1", 0, L[0]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                /* clc */
-                X = NewCodeEntry (OP65_CLC, AM65_IMP, 0, 0, L[1]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-            }
-
-            /* adc xxx */
-            X = NewCodeEntry (L[2]->OPC, L[2]->AM, L[2]->Arg, 0, L[2]->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            /* sta ptr1 */
-            X = NewCodeEntry (OP65_STA, AM65_ZP, "ptr1", 0, L[9]->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            if (ShortCode) {
-                /* txa */
-                X = NewCodeEntry (OP65_TXA, AM65_IMP, 0, 0, L[4]->LI);
-            } else {
-                /* lda tmp1 */
-                X = NewCodeEntry (OP65_LDA, AM65_ZP, "tmp1", 0, L[4]->LI);
-            }
-            CS_InsertEntry (S, X, IP++);
-
-            /* adc xxx */
-            X = NewCodeEntry (L[5]->OPC, L[5]->AM, L[5]->Arg, 0, L[5]->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            /* sta ptr1+1 */
-            X = NewCodeEntry (OP65_STA, AM65_ZP, "ptr1+1", 0, L[9]->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            /* ldy zzz */
-            X = NewCodeEntry (L[8]->OPC, L[8]->AM, L[8]->Arg, 0, L[8]->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            /* lda (ptr1),y */
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "ptr1", 0, L[9]->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            /* tax */
-            X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, L[9]->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            /* dey */
-            X = NewCodeEntry (OP65_DEY, AM65_IMP, 0, 0, L[9]->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            /* lda (ptr1),y */
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "ptr1", 0, L[9]->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            /* Remove the old code */
-            CS_DelEntries (S, I, 10);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptPtrLoad11 (CodeSeg* S)
-/* Search for the sequence:
-**
-**      clc
-**      adc     xxx
-**      bcc     L
-**      inx
-** L:   ldy     #$00
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      ldy     xxx
-**      sta     ptr1
-**      stx     ptr1+1
-**      ldx     #$00
-**      lda     (ptr1),y
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[6];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_CLC                            &&
-            CS_GetEntries (S, L+1, I+1, 5)                   &&
-            L[1]->OPC == OP65_ADC                            &&
-            (L[1]->AM == AM65_ABS || L[1]->AM == AM65_ZP || L[1]->AM == AM65_IMM)    &&
-            (L[2]->OPC == OP65_BCC || L[2]->OPC == OP65_JCC) &&
-            L[2]->JumpTo != 0                                &&
-            L[2]->JumpTo->Owner == L[4]                      &&
-            L[3]->OPC == OP65_INX                            &&
-            L[4]->OPC == OP65_LDY                            &&
-            CE_IsKnownImm (L[4], 0)                          &&
-            CE_IsCallTo (L[5], "ldauidx")                    &&
-            !CS_RangeHasLabel (S, I+1, 3)                    &&
-            !CE_HasLabel (L[5])) {
-
-            CodeEntry* X;
-
-            /* We will create all the new stuff behind the current one so
-            ** we keep the line references.
-            */
-            X = NewCodeEntry (OP65_LDY, L[1]->AM, L[1]->Arg, 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+6);
-
-            /* sta ptr1 */
-            X = NewCodeEntry (OP65_STA, AM65_ZP, "ptr1", 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+7);
-
-            /* stx ptr1+1 */
-            X = NewCodeEntry (OP65_STX, AM65_ZP, "ptr1+1", 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+8);
-
-            /* ldx #$00 */
-            X = NewCodeEntry (OP65_LDX, AM65_IMM, "$00", 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+9);
-
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "ptr1", 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+10);
-
-            /* Remove the old code */
-            CS_DelEntries (S, I, 6);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptPtrLoad12 (CodeSeg* S)
-/* Search for the sequence:
-**
-**      lda     regbank+n
-**      ldx     regbank+n+1
-**      sta     regsave
-**      stx     regsave+1
-**      clc
-**      adc     #$01
-**      bcc     L0005
-**      inx
-** L:   sta     regbank+n
-**      stx     regbank+n+1
-**      lda     regsave
-**      ldx     regsave+1
-**      ldy     #$00
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      ldy     #$00
-**      ldx     #$00
-**      lda     (regbank+n),y
-**      inc     regbank+n
-**      bne     L1
-**      inc     regbank+n+1
-** L1:  tay                     <- only if flags are used
-**
-** This function must execute before OptPtrLoad7!
-**
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[15];
-        unsigned Len;
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_LDA                               &&
-            L[0]->AM == AM65_ZP                                 &&
-            strncmp (L[0]->Arg, "regbank+", 8) == 0             &&
-            (Len = strlen (L[0]->Arg)) > 0                      &&
-            CS_GetEntries (S, L+1, I+1, 14)                     &&
-            !CS_RangeHasLabel (S, I+1, 7)                       &&
-            !CS_RangeHasLabel (S, I+9, 5)                       &&
-            L[1]->OPC == OP65_LDX                               &&
-            L[1]->AM == AM65_ZP                                 &&
-            strncmp (L[1]->Arg, L[0]->Arg, Len) == 0            &&
-            strcmp (L[1]->Arg+Len, "+1") == 0                   &&
-            L[2]->OPC == OP65_STA                               &&
-            L[2]->AM == AM65_ZP                                 &&
-            strcmp (L[2]->Arg, "regsave") == 0                  &&
-            L[3]->OPC == OP65_STX                               &&
-            L[3]->AM == AM65_ZP                                 &&
-            strcmp (L[3]->Arg, "regsave+1") == 0                &&
-            L[4]->OPC == OP65_CLC                               &&
-            L[5]->OPC == OP65_ADC                               &&
-            CE_IsKnownImm (L[5], 1)                             &&
-            L[6]->OPC == OP65_BCC                               &&
-            L[6]->JumpTo != 0                                   &&
-            L[6]->JumpTo->Owner == L[8]                         &&
-            L[7]->OPC == OP65_INX                               &&
-            L[8]->OPC == OP65_STA                               &&
-            L[8]->AM == AM65_ZP                                 &&
-            strcmp (L[8]->Arg, L[0]->Arg) == 0                  &&
-            L[9]->OPC == OP65_STX                               &&
-            L[9]->AM == AM65_ZP                                 &&
-            strcmp (L[9]->Arg, L[1]->Arg) == 0                  &&
-            L[10]->OPC == OP65_LDA                              &&
-            L[10]->AM == AM65_ZP                                &&
-            strcmp (L[10]->Arg, "regsave") == 0                 &&
-            L[11]->OPC == OP65_LDX                              &&
-            L[11]->AM == AM65_ZP                                &&
-            strcmp (L[11]->Arg, "regsave+1") == 0               &&
-            L[12]->OPC == OP65_LDY                              &&
-            CE_IsConstImm (L[12])                               &&
-            CE_IsCallTo (L[13], "ldauidx")) {
-
-            CodeEntry* X;
-            CodeLabel* Label;
-
-            /* Check if the instruction following the sequence uses the flags
-            ** set by the load. If so, insert a test of the value in the
-            ** accumulator.
-            */
-            if (CE_UseLoadFlags (L[14])) {
-                X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, L[13]->LI);
-                CS_InsertEntry (S, X, I+14);
-            }
-
-            /* Attach a label to L[14]. This may be either the just inserted
-            ** instruction, or the one following the sequence.
-            */
-            Label = CS_GenLabel (S, L[14]);
-
-            /* ldy #$xx */
-            X = NewCodeEntry (OP65_LDY, AM65_IMM, L[12]->Arg, 0, L[12]->LI);
-            CS_InsertEntry (S, X, I+14);
-
-            /* ldx #$xx */
-            X = NewCodeEntry (OP65_LDX, AM65_IMM, "$00", 0, L[13]->LI);
-            CS_InsertEntry (S, X, I+15);
-
-            /* lda (regbank+n),y */
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, L[0]->Arg, 0, L[13]->LI);
-            CS_InsertEntry (S, X, I+16);
-
-            /* inc regbank+n */
-            X = NewCodeEntry (OP65_INC, AM65_ZP, L[0]->Arg, 0, L[5]->LI);
-            CS_InsertEntry (S, X, I+17);
-
-            /* bne ... */
-            X = NewCodeEntry (OP65_BNE, AM65_BRA, Label->Name, Label, L[6]->LI);
-            CS_InsertEntry (S, X, I+18);
-
-            /* inc regbank+n+1 */
-            X = NewCodeEntry (OP65_INC, AM65_ZP, L[1]->Arg, 0, L[7]->LI);
-            CS_InsertEntry (S, X, I+19);
-
-            /* Delete the old code */
-            CS_DelEntries (S, I, 14);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptPtrLoad13 (CodeSeg* S)
-/* Search for the sequence:
-**
-**      lda     zp
-**      ldx     zp+1
-**      ldy     xx
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      ldy     xx
-**      ldx     #$00
-**      lda     (zp),y
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[4];
-        unsigned Len;
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_LDA && L[0]->AM == AM65_ZP        &&
-            CS_GetEntries (S, L+1, I+1, 3)                      &&
-            !CS_RangeHasLabel (S, I+1, 3)                       &&
-            L[1]->OPC == OP65_LDX && L[1]->AM == AM65_ZP        &&
-            (Len = strlen (L[0]->Arg)) > 0                      &&
-            strncmp (L[0]->Arg, L[1]->Arg, Len) == 0            &&
-            strcmp (L[1]->Arg + Len, "+1") == 0                 &&
-            L[2]->OPC == OP65_LDY                               &&
-            CE_IsCallTo (L[3], "ldauidx")) {
-
-            CodeEntry* X;
-
-            /* ldx #$00 */
-            X = NewCodeEntry (OP65_LDX, AM65_IMM, "$00", 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+3);
-
-            /* lda (zp),y */
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, L[0]->Arg, 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+4);
-
-            /* Remove the old code */
-            CS_DelEntry (S, I+5);
-            CS_DelEntries (S, I, 2);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptPtrLoad14 (CodeSeg* S)
-/* Search for the sequence:
-**
-**      lda     zp
-**      ldx     zp+1
-**      (anything that doesn't change a/x)
-**      ldy     xx
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      lda     zp
-**      ldx     zp+1
-**      (anything that doesn't change a/x)
-**      ldy     xx
-**      ldx     #$00
-**      lda     (zp),y
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[5];
-        unsigned Len;
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_LDA && L[0]->AM == AM65_ZP        &&
-            CS_GetEntries (S, L+1, I+1, 4)                      &&
-            !CS_RangeHasLabel (S, I+1, 4)                       &&
-            L[1]->OPC == OP65_LDX && L[1]->AM == AM65_ZP        &&
-            (Len = strlen (L[0]->Arg)) > 0                      &&
-            strncmp (L[0]->Arg, L[1]->Arg, Len) == 0            &&
-            strcmp (L[1]->Arg + Len, "+1") == 0                 &&
-            (L[2]->Chg & REG_AX) == 0                           &&
-            L[3]->OPC == OP65_LDY                               &&
-            CE_IsCallTo (L[4], "ldauidx")) {
-
-            CodeEntry* X;
-
-            /* ldx #$00 */
-            X = NewCodeEntry (OP65_LDX, AM65_IMM, "$00", 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+5);
-
-            /* lda (zp),y */
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, L[0]->Arg, 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+6);
-
-            /* Remove the old code */
-            CS_DelEntry (S, I+4);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptPtrLoad15 (CodeSeg* S)
-/* Search for the sequence:
-**
-**      lda     zp
-**      ldx     zp+1
-**      jsr     pushax          <- optional
-**      ldy     xx
-**      jsr     ldaxidx
-**
-** and replace it by:
-**
-**      lda     zp              <- only if
-**      ldx     zp+1            <- call to
-**      jsr     pushax          <- pushax present
-**      ldy     xx
-**      lda     (zp),y
-**      tax
-**      dey
-**      lda     (zp),y
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[5];
-        unsigned Len;
-
-        /* Check for the start of the sequence */
-        if (CS_GetEntries (S, L, I, 3)                          &&
-            L[0]->OPC == OP65_LDA && L[0]->AM == AM65_ZP        &&
-            L[1]->OPC == OP65_LDX && L[1]->AM == AM65_ZP        &&
-            !CS_RangeHasLabel (S, I+1, 2)                       &&
-            (Len = strlen (L[0]->Arg)) > 0                      &&
-            strncmp (L[0]->Arg, L[1]->Arg, Len) == 0            &&
-            strcmp (L[1]->Arg + Len, "+1") == 0) {
-
-            unsigned PushAX = CE_IsCallTo (L[2], "pushax");
-
-            /* Check for the remainder of the sequence */
-            if (CS_GetEntries (S, L+3, I+3, 1 + PushAX)         &&
-                !CS_RangeHasLabel (S, I+3, 1 + PushAX)          &&
-                L[2+PushAX]->OPC == OP65_LDY                    &&
-                CE_IsCallTo (L[3+PushAX], "ldaxidx")) {
-
-                CodeEntry* X;
-
-                /* lda (zp),y */
-                X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, L[0]->Arg, 0, L[3]->LI);
-                CS_InsertEntry (S, X, I+PushAX+4);
-
-                /* tax */
-                X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, L[3]->LI);
-                CS_InsertEntry (S, X, I+PushAX+5);
-
-                /* dey */
-                X = NewCodeEntry (OP65_DEY, AM65_IMP, 0, 0, L[3]->LI);
-                CS_InsertEntry (S, X, I+PushAX+6);
-
-                /* lda (zp),y */
-                X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, L[0]->Arg, 0, L[3]->LI);
-                CS_InsertEntry (S, X, I+PushAX+7);
-
-                /* Remove the old code */
-                CS_DelEntry (S, I+PushAX+3);
-                if (!PushAX) {
-                    CS_DelEntries (S, I, 2);
-                }
-
-                /* Remember, we had changes */
-                ++Changes;
-
-            }
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptPtrLoad16 (CodeSeg* S)
-/* Search for the sequence
-**
-**      ldy     ...
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      stx     ptr1+1
-**      sta     ptr1
-**      ldy     ...
-**      ldx     #$00
-**      lda     (ptr1),y
-**
-** This step must be executed *after* OptPtrLoad1!
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[2];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_LDY               &&
-            CS_GetEntries (S, L+1, I+1, 1)      &&
-            CE_IsCallTo (L[1], "ldauidx")       &&
-            !CE_HasLabel (L[1])) {
-
-            CodeEntry* X;
-
-            /* stx ptr1+1 */
-            X = NewCodeEntry (OP65_STA, AM65_ZP, "ptr1", 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+2);
-
-            /* sta ptr1 */
-            X = NewCodeEntry (OP65_STX, AM65_ZP, "ptr1+1", 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+3);
-
-            /* ldy ... */
-            X = NewCodeEntry (L[0]->OPC, L[0]->AM, L[0]->Arg, 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+4);
-
-            /* ldx #$00 */
-            X = NewCodeEntry (OP65_LDX, AM65_IMM, "$00", 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+5);
-
-            /* lda (ptr1),y */
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "ptr1", 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+6);
-
-            /* Delete the old code */
-            CS_DelEntries (S, I, 2);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptPtrLoad17 (CodeSeg* S)
-/* Search for the sequence
-**
-**      ldy     ...
-**      jsr     ldaxidx
-**
-** and replace it by:
-**
-**      sta     ptr1
-**      stx     ptr1+1
-**      ldy     ...
-**      lda     (ptr1),y
-**      tax
-**      dey
-**      lda     (ptr1),y
-**
-** This step must be executed *after* OptPtrLoad9! While code size increases
-** by more than 200%, inlining will greatly improve visibility for the
-** optimizer, so often part of the code gets improved later. So we will mark
-** the step with less than 200% so it gets executed when -Oi is in effect.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[2];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_LDY               &&
-            CS_GetEntries (S, L+1, I+1, 1)      &&
-            CE_IsCallTo (L[1], "ldaxidx")       &&
-            !CE_HasLabel (L[1])) {
-
-            CodeEntry* X;
-
-            /* Store the high byte */
-            X = NewCodeEntry (OP65_STA, AM65_ZP, "ptr1", 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+2);
-
-            /* Store the low byte */
-            X = NewCodeEntry (OP65_STX, AM65_ZP, "ptr1+1", 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+3);
-
-            /* ldy ... */
-            X = NewCodeEntry (L[0]->OPC, L[0]->AM, L[0]->Arg, 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+4);
-
-            /* lda (ptr1),y */
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "ptr1", 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+5);
-
-            /* tax */
-            X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+6);
-
-            /* dey */
-            X = NewCodeEntry (OP65_DEY, AM65_IMP, 0, 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+7);
-
-            /* lda (ptr1),y */
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "ptr1", 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+8);
-
-            /* Delete original sequence */
-            CS_DelEntries (S, I, 2);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
diff --git a/src/cc65/coptptrload.h b/src/cc65/coptptrload.h
deleted file mode 100644 (file)
index fd93bf5..0000000
+++ /dev/null
@@ -1,363 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                               coptptrload.h                               */
-/*                                                                           */
-/*                      Optimize loads through pointers                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2009 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef COPTPTRLOAD_H
-#define COPTPTRLOAD_H
-
-
-
-/* cc65 */
-#include "codeseg.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned OptPtrLoad1 (CodeSeg* S);
-/* Search for the sequence:
-**
-**      clc
-**      adc     xxx
-**      tay
-**      txa
-**      adc     yyy
-**      tax
-**      tya
-**      ldy
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      clc
-**      adc     xxx
-**      sta     ptr1
-**      txa
-**      adc     yyy
-**      sta     ptr1+1
-**      ldy
-**      ldx     #$00
-**      lda     (ptr1),y
-*/
-
-unsigned OptPtrLoad2 (CodeSeg* S);
-/* Search for the sequence:
-**
-**      adc     xxx
-**      pha
-**      txa
-**      iny
-**      adc     yyy
-**      tax
-**      pla
-**      ldy
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      adc     xxx
-**      sta     ptr1
-**      txa
-**      iny
-**      adc     yyy
-**      sta     ptr1+1
-**      ldy
-**      ldx     #$00
-**      lda     (ptr1),y
-*/
-
-unsigned OptPtrLoad3 (CodeSeg* S);
-/* Search for the sequence:
-**
-**      lda     #<(label+0)
-**      ldx     #>(label+0)
-**      clc
-**      adc     xxx
-**      bcc     L
-**      inx
-** L:   ldy     #$00
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      ldy     xxx
-**      ldx     #$00
-**      lda     label,y
-*/
-
-unsigned OptPtrLoad4 (CodeSeg* S);
-/* Search for the sequence:
-**
-**      lda     #<(label+0)
-**      ldx     #>(label+0)
-**      ldy     #$xx
-**      clc
-**      adc     (sp),y
-**      bcc     L
-**      inx
-** L:   ldy     #$00
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      ldy     #$xx
-**      lda     (sp),y
-**      tay
-**      ldx     #$00
-**      lda     label,y
-*/
-
-unsigned OptPtrLoad5 (CodeSeg* S);
-/* Search for the sequence:
-**
-**      jsr     pushax
-**      ldx     #$00
-**      lda     yyy
-**      jsr     tosaddax
-**      ldy     #$00
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      sta     ptr1
-**      stx     ptr1+1
-**      ldy     yyy
-**      lda     (ptr1),y
-*/
-
-unsigned OptPtrLoad6 (CodeSeg* S);
-/* Search for the sequence:
-**
-**      jsr     pushax
-**      ldy     xxx
-**      ldx     #$00
-**      lda     (sp),y
-**      jsr     tosaddax
-**      ldy     #$00
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      sta     ptr1
-**      stx     ptr1+1
-**      ldy     xxx
-**      lda     (sp),y
-**      tay
-**      lda     (ptr1),y
-*/
-
-unsigned OptPtrLoad7 (CodeSeg* S);
-/* Search for the sequence:
-**
-**      jsr     aslax1/shlax1
-**      clc
-**      adc     xxx
-**      tay
-**      txa
-**      adc     yyy
-**      tax
-**      tya
-**      ldy     zzz
-**      jsr     ldaxidx
-**
-** and replace it by:
-**
-**      stx     tmp1
-**      asl     a
-**      rol     tmp1
-**      clc
-**      adc     xxx
-**      sta     ptr1
-**      lda     tmp1
-**      adc     yyy
-**      sta     ptr1+1
-**      ldy     zzz
-**      lda     (ptr1),y
-**      tax
-**      dey
-**      lda     (ptr1),y
-*/
-
-unsigned OptPtrLoad11 (CodeSeg* S);
-/* Search for the sequence:
-**
-**      clc
-**      adc     xxx
-**      bcc     L
-**      inx
-** L:   ldy     #$00
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      ldy     xxx
-**      sta     ptr1
-**      stx     ptr1+1
-**      ldx     #$00
-**      lda     (ptr1),y
-*/
-
-unsigned OptPtrLoad12 (CodeSeg* S);
-/* Search for the sequence:       
-**
-**      lda     regbank+n
-**      ldx     regbank+n+1
-**      sta     regsave
-**      stx     regsave+1
-**      clc
-**      adc     #$01
-**      bcc     L0005
-**      inx
-** L:   sta     regbank+n
-**      stx     regbank+n+1
-**      lda     regsave
-**      ldx     regsave+1
-**      ldy     #$00
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      ldy     #$00
-**      ldx     #$00
-**      lda     (regbank+n),y
-**      inc     regbank+n
-**      bne     L1
-**      inc     regbank+n+1
-** L1:  tay                     <- only if flags are used
-**
-** This function must execute before OptPtrLoad7!
-**
-*/
-
-unsigned OptPtrLoad13 (CodeSeg* S);
-/* Search for the sequence:
-**
-**      lda     zp
-**      ldx     zp+1
-**      ldy     xx
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      ldy     xx
-**      ldx     #$00
-**      lda     (zp),y
-*/
-
-unsigned OptPtrLoad14 (CodeSeg* S);
-/* Search for the sequence:
-**
-**      lda     zp
-**      ldx     zp+1
-**      (anything that doesn't change a/x)
-**      ldy     xx
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      lda     zp
-**      ldx     zp+1
-**      (anything that doesn't change a/x)
-**      ldy     xx
-**      ldx     #$00
-**      lda     (zp),y
-**
-** Must execute before OptPtrLoad10!
-*/
-
-unsigned OptPtrLoad15 (CodeSeg* S);
-/* Search for the sequence:
-**
-**      lda     zp
-**      ldx     zp+1
-**      ldy     xx
-**      jsr     ldaxidx
-**
-** and replace it by:
-**
-**      ldy     xx
-**      lda     (zp),y
-**      tax
-**      dey
-**      lda     (zp),y
-*/
-
-unsigned OptPtrLoad16 (CodeSeg* S);
-/* Search for the sequence
-**
-**      ldy     ...
-**      jsr     ldauidx
-**
-** and replace it by:
-**
-**      ldy     ...
-**      stx     ptr1+1
-**      sta     ptr1
-**      ldx     #$00
-**      lda     (ptr1),y
-**
-** This step must be executed *after* OptPtrLoad1!
-*/
-
-unsigned OptPtrLoad17 (CodeSeg* S);
-/* Search for the sequence
-**
-**      ldy     ...
-**      jsr     ldaxidx
-**
-** and replace it by:
-**
-**      ldy     ...
-**      sta     ptr1
-**      stx     ptr1+1
-**      lda     (ptr1),y
-**      tax
-**      dey
-**      lda     (ptr1),y
-**
-** This step must be executed *after* OptPtrLoad9! While code size increases
-** by more than 200%, inlining will greatly improve visibility for the
-** optimizer, so often part of the code gets improved later. So we will mark
-** the step with less than 200% so it gets executed when -Oi is in effect.
-*/
-
-
-
-/* End of coptptrload.h */
-
-#endif
diff --git a/src/cc65/coptptrstore.c b/src/cc65/coptptrstore.c
deleted file mode 100644 (file)
index 1183291..0000000
+++ /dev/null
@@ -1,758 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                               coptptrstore.c                              */
-/*                                                                           */
-/*                      Optimize stores through pointers                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "chartype.h"
-#include "strbuf.h"
-#include "xmalloc.h"
-#include "xsprintf.h"
-
-/* cc65 */
-#include "codeent.h"
-#include "codeinfo.h"
-#include "coptptrstore.h"
-
-
-
-/*****************************************************************************/
-/*                             Helper functions                              */
-/*****************************************************************************/
-
-
-
-static unsigned OptPtrStore1Sub (CodeSeg* S, unsigned I, CodeEntry** const L)
-/* Check if this is one of the allowed suboperation for OptPtrStore1 */
-{
-    /* Check for a label attached to the entry */
-    if (CE_HasLabel (L[0])) {
-        return 0;
-    }
-
-    /* Check for single insn sub ops */
-    if (L[0]->OPC == OP65_AND                                           ||
-        L[0]->OPC == OP65_EOR                                           ||
-        L[0]->OPC == OP65_ORA                                           ||
-        (L[0]->OPC == OP65_JSR                          &&
-         (strncmp (L[0]->Arg, "shlax", 5) == 0  ||
-          strncmp (L[0]->Arg, "shrax", 5) == 0)         &&
-         strlen (L[0]->Arg) == 6                        &&
-         IsDigit (L[0]->Arg[5]))) {
-
-        /* One insn */
-        return 1;
-
-    } else if (L[0]->OPC == OP65_CLC                      &&
-               (L[1] = CS_GetNextEntry (S, I)) != 0       &&
-               L[1]->OPC == OP65_ADC                      &&
-               !CE_HasLabel (L[1])) {
-        return 2;
-    } else if (L[0]->OPC == OP65_SEC                      &&
-               (L[1] = CS_GetNextEntry (S, I)) != 0       &&
-               L[1]->OPC == OP65_SBC                      &&
-               !CE_HasLabel (L[1])) {
-        return 2;
-    }
-
-
-
-    /* Not found */
-    return 0;
-}
-
-
-
-static const char* LoadAXZP (CodeSeg* S, unsigned I)
-/* If the two instructions preceeding S/I are a load of A/X from a two byte
-** zero byte location, return the name of the zero page location. Otherwise
-** return NULL.
-*/
-{
-    CodeEntry* L[2];
-    unsigned Len;
-
-    if (I >= 2                                                  &&
-        CS_GetEntries (S, L, I-2, 2)                            &&
-        L[0]->OPC == OP65_LDA                                   &&
-        L[0]->AM == AM65_ZP                                     &&
-        L[1]->OPC == OP65_LDX                                   &&
-        L[1]->AM == AM65_ZP                                     &&
-        !CE_HasLabel (L[1])                                     &&
-        (Len = strlen (L[0]->Arg)) == strlen (L[1]->Arg) - 2    &&
-        memcmp (L[0]->Arg, L[1]->Arg, Len) == 0                 &&
-        L[1]->Arg[Len] == '+'                                   &&
-        L[1]->Arg[Len+1] == '1') {
-
-        /* Return the label */
-        return L[0]->Arg;
-
-    } else {
-
-        /* Not found */
-        return 0;
-
-    }
-}
-
-
-
-static const char* LoadAXImm (CodeSeg* S, unsigned I)
-/* If the instructions preceeding S/I are a load of A/X of a constant value
-** or a word sized address label, return the address of the location as a
-** string.
-** Beware: In case of a numeric value, the result is returned in static
-** storage which is overwritten with each call.
-*/
-{
-    static StrBuf Buf = STATIC_STRBUF_INITIALIZER;
-    CodeEntry* L[2];
-    CodeEntry* ALoad;
-    CodeEntry* XLoad;
-    unsigned Len;
-
-    /* Fetch entry at I and check if A/X is known */
-    L[0] = CS_GetEntry (S, I);
-    if (L[0] != 0                                               &&
-        RegValIsKnown (L[0]->RI->In.RegA)                       &&
-        RegValIsKnown (L[0]->RI->In.RegX)) {
-
-        /* Numeric argument - get low and high byte */
-        unsigned Lo = (L[0]->RI->In.RegA & 0xFF);
-        unsigned Hi = (L[0]->RI->In.RegX & 0xFF);
-
-        /* Format into buffer */
-        SB_Printf (&Buf, "$%04X", Lo | (Hi << 8));
-
-        /* Return the address as a string */
-        return SB_GetConstBuf (&Buf);
-
-    }
-
-    /* Search back for the two instructions loading A and X. Abort
-    ** the search if the registers are changed in any other way or
-    ** if a label is reached while we don't have both loads.
-    */
-    ALoad = 0;
-    XLoad = 0;
-    while (I-- > 0) {
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for the loads of A and X */
-        if (ALoad == 0 && E->OPC == OP65_LDA && E->AM == AM65_IMM) {
-            ALoad = E;
-        } else if (E->Chg & REG_A) {
-            /* A is changed before we get the load */
-            return 0;
-        } else if (XLoad == 0 && E->OPC == OP65_LDX && E->AM == AM65_IMM) {
-            XLoad = E;
-        } else if (E->Chg & REG_X) {
-            /* X is changed before we get the load */
-            return 0;
-        }
-
-        if (ALoad != 0 && XLoad != 0) {
-            /* We have both */
-            break;
-        }
-
-        /* If we have a label, before both are found, bail out */
-        if (CE_HasLabel (E)) {
-            return 0;
-        }
-    }
-
-    /* Check for a load of a label address */
-    if ((Len = strlen (ALoad->Arg)) > 3                         &&
-        ALoad->Arg[0] == '<'                                    &&
-        ALoad->Arg[1] == '('                                    &&
-        strlen (XLoad->Arg) == Len                              &&
-        XLoad->Arg[0] == '>'                                    &&
-        memcmp (ALoad->Arg+1, XLoad->Arg+1, Len-1) == 0) {
-
-        /* Load of an address label */
-        SB_CopyBuf (&Buf, ALoad->Arg + 2, Len - 3);
-        SB_Terminate (&Buf);
-        return SB_GetConstBuf (&Buf);
-    }
-
-    /* Not found */
-    return 0;
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned OptPtrStore1 (CodeSeg* S)
-/* Search for the sequence:
-**
-**      clc
-**      adc     xxx
-**      bcc     L
-**      inx
-** L:   jsr     pushax
-**      ldx     #$00
-**      lda     yyy
-**      ldy     #$00
-**      jsr     staspidx
-**
-** and replace it by:
-**
-**      sta     ptr1
-**      stx     ptr1+1
-**      ldy     xxx
-**      ldx     #$00
-**      lda     yyy
-**      sta     (ptr1),y
-**
-** or by
-**
-**      ldy     xxx
-**      ldx     #$00
-**      lda     yyy
-**      sta     (zp),y
-**
-** or by
-**
-**      ldy     xxx
-**      ldx     #$00
-**      lda     yyy
-**      sta     label,y
-**
-** or by
-**
-**      ldy     xxx
-**      ldx     #$00
-**      lda     yyy
-**      sta     $xxxx,y
-**
-** depending on the code preceeding the sequence above.
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[9];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_CLC                               &&
-            CS_GetEntries (S, L+1, I+1, 8)                      &&
-            L[1]->OPC == OP65_ADC                               &&
-            (L[1]->AM == AM65_ABS                       ||
-             L[1]->AM == AM65_ZP                        ||
-             L[1]->AM == AM65_IMM                       ||
-             (L[1]->AM == AM65_ZP_INDY          &&
-              RegValIsKnown (L[1]->RI->In.RegY)))               &&
-            (L[2]->OPC == OP65_BCC || L[2]->OPC == OP65_JCC)    &&
-            L[2]->JumpTo != 0                                   &&
-            L[2]->JumpTo->Owner == L[4]                         &&
-            L[3]->OPC == OP65_INX                               &&
-            CE_IsCallTo (L[4], "pushax")                        &&
-            L[5]->OPC == OP65_LDX                               &&
-            L[6]->OPC == OP65_LDA                               &&
-            L[7]->OPC == OP65_LDY                               &&
-            CE_IsKnownImm (L[7], 0)                             &&
-            CE_IsCallTo (L[8], "staspidx")                      &&
-            !CS_RangeHasLabel (S, I+1, 3)                       &&
-            !CS_RangeHasLabel (S, I+5, 4)) {
-
-            CodeEntry* X;
-            const char* Loc;
-            am_t AM;
-
-            /* Track the insertion point */
-            unsigned IP = I + 9;
-            if ((Loc = LoadAXZP (S, I)) != 0) {
-                /* If the sequence is preceeded by a load of a ZP value,
-                ** we can use this ZP value as a pointer using ZP
-                ** indirect Y addressing.
-                */
-                AM = AM65_ZP_INDY;
-            } else if ((Loc = LoadAXImm (S, I)) != 0) {
-                /* If the sequence is preceeded by a load of an immediate
-                ** value, we can use this absolute value as an address
-                ** using absolute indexed Y addressing.
-                */
-                AM = AM65_ABSY;
-            }
-
-            /* If we don't have a store location, we use ptr1 with zp
-            ** indirect Y addressing. We must store the value in A/X into
-            ** ptr1 in this case.
-            */
-            if (Loc == 0) {
-
-                /* Must use ptr1 */
-                Loc = "ptr1";
-                AM  = AM65_ZP_INDY;
-
-                X = NewCodeEntry (OP65_STA, AM65_ZP, "ptr1", 0, L[8]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                X = NewCodeEntry (OP65_STX, AM65_ZP, "ptr1+1", 0, L[8]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-            }
-
-            /* If the index is loaded from (zp),y, we cannot do that directly.
-            ** Note: In this case, the Y register will contain the correct
-            ** value after removing the old code, so we don't need to load
-            ** it here.
-            */
-            if (L[1]->AM == AM65_ZP_INDY) {
-                X = NewCodeEntry (OP65_LDA, L[1]->AM, L[1]->Arg, 0, L[1]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, L[1]->LI);
-                CS_InsertEntry (S, X, IP++);
-            } else {
-                X = NewCodeEntry (OP65_LDY, L[1]->AM, L[1]->Arg, 0, L[1]->LI);
-                CS_InsertEntry (S, X, IP++);
-            }
-
-            X = NewCodeEntry (OP65_LDX, L[5]->AM, L[5]->Arg, 0, L[5]->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            X = NewCodeEntry (OP65_LDA, L[6]->AM, L[6]->Arg, 0, L[6]->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            X = NewCodeEntry (OP65_STA, AM, Loc, 0, L[8]->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            /* Remove the old code */
-            CS_DelEntries (S, I, 9);
-
-            /* Skip most of the generated replacement code */
-            I += 3;
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptPtrStore2 (CodeSeg* S)
-/* Search for the sequence:
-**
-**      clc
-**      adc     xxx
-**      bcc     L
-**      inx
-** L:   jsr     pushax
-**      ldy     yyy
-**      ldx     #$00
-**      lda     (sp),y
-**      ldy     #$00
-**      jsr     staspidx
-**
-** and replace it by:
-**
-**      sta     ptr1
-**      stx     ptr1+1
-**      ldy     yyy-2
-**      ldx     #$00
-**      lda     (sp),y
-**      ldy     xxx
-**      sta     (ptr1),y
-**
-** or by
-**
-**      ldy     yyy-2
-**      ldx     #$00
-**      lda     (sp),y
-**      ldy     xxx
-**      sta     (zp),y
-**
-** or by
-**
-**      ldy     yyy-2
-**      ldx     #$00
-**      lda     (sp),y
-**      ldy     xxx
-**      sta     label,y
-**
-** or by
-**
-**      ldy     yyy-2
-**      ldx     #$00
-**      lda     (sp),y
-**      ldy     xxx
-**      sta     $xxxx,y
-**
-** depending on the code preceeding the sequence above.
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[10];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_CLC                               &&
-            CS_GetEntries (S, L+1, I+1, 9)                      &&
-            L[1]->OPC == OP65_ADC                               &&
-            (L[1]->AM == AM65_ABS                       ||
-             L[1]->AM == AM65_ZP                        ||
-             L[1]->AM == AM65_IMM                       ||
-             (L[1]->AM == AM65_ZP_INDY          &&
-              RegValIsKnown (L[1]->RI->In.RegY)))               &&
-            (L[2]->OPC == OP65_BCC || L[2]->OPC == OP65_JCC)    &&
-            L[2]->JumpTo != 0                                   &&
-            L[2]->JumpTo->Owner == L[4]                         &&
-            L[3]->OPC == OP65_INX                               &&
-            CE_IsCallTo (L[4], "pushax")                        &&
-            L[5]->OPC == OP65_LDY                               &&
-            CE_IsConstImm (L[5])                                &&
-            L[6]->OPC == OP65_LDX                               &&
-            L[7]->OPC == OP65_LDA                               &&
-            L[7]->AM == AM65_ZP_INDY                            &&
-            strcmp (L[7]->Arg, "sp") == 0                       &&
-            L[8]->OPC == OP65_LDY                               &&
-            (L[8]->AM == AM65_ABS                       ||
-             L[8]->AM == AM65_ZP                        ||
-             L[8]->AM == AM65_IMM)                              &&
-            CE_IsCallTo (L[9], "staspidx")                      &&
-            !CS_RangeHasLabel (S, I+1, 3)                       &&
-            !CS_RangeHasLabel (S, I+5, 5)) {
-
-            CodeEntry* X;
-            const char* Arg;
-            const char* Loc;
-            am_t AM;
-
-            /* Track the insertion point */
-            unsigned IP = I + 10;
-            if ((Loc = LoadAXZP (S, I)) != 0) {
-                /* If the sequence is preceeded by a load of a ZP value,
-                ** we can use this ZP value as a pointer using ZP
-                ** indirect Y addressing.
-                */
-                AM = AM65_ZP_INDY;
-            } else if ((Loc = LoadAXImm (S, I)) != 0) {
-                /* If the sequence is preceeded by a load of an immediate
-                ** value, we can use this absolute value as an address
-                ** using absolute indexed Y addressing.
-                */
-                AM = AM65_ABSY;
-            }
-
-            /* If we don't have a store location, we use ptr1 with zp
-            ** indirect Y addressing. We must store the value in A/X into
-            ** ptr1 in this case.
-            */
-            if (Loc == 0) {
-
-                /* Must use ptr1 */
-                Loc = "ptr1";
-                AM  = AM65_ZP_INDY;
-
-                X = NewCodeEntry (OP65_STA, AM65_ZP, "ptr1", 0, L[8]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                X = NewCodeEntry (OP65_STX, AM65_ZP, "ptr1+1", 0, L[8]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-            }
-
-            /* Generate four different replacements depending on the addressing
-            ** mode of the store and from where the index is loaded:
-            **
-            ** 1. If the index is not loaded ZP indirect Y, we can use Y for
-            **    the store index.
-            **
-            ** 2. If the index is loaded ZP indirect Y and we store absolute
-            **    indexed, we need Y to load the index and will therefore
-            **    use X as index for the store. The disadvantage is that we
-            **    need to reload X later.
-            **
-            ** 3. If the index is loaded ZP indirect Y and we store ZP indirect
-            **    Y, we must use Y for load and store and must therefore save
-            **    the A register when loading Y the second time.
-            */
-            if (L[1]->AM != AM65_ZP_INDY) {
-
-                /* Case 1 */
-                Arg = MakeHexArg (L[5]->Num - 2);
-                X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[5]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                X = NewCodeEntry (OP65_LDX, L[6]->AM, L[6]->Arg, 0, L[6]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                X = NewCodeEntry (OP65_LDA, L[7]->AM, L[7]->Arg, 0, L[7]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                X = NewCodeEntry (OP65_LDY, L[1]->AM, L[1]->Arg, 0, L[1]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                X = NewCodeEntry (OP65_STA, AM, Loc, 0, L[9]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-            } else if (AM == AM65_ABSY) {
-
-                /* Case 2 */
-                X = NewCodeEntry (OP65_LDA, L[1]->AM, L[1]->Arg, 0, L[1]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, L[1]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                Arg = MakeHexArg (L[5]->Num - 2);
-                X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[5]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                X = NewCodeEntry (OP65_LDA, L[7]->AM, L[7]->Arg, 0, L[7]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                X = NewCodeEntry (OP65_STA, AM65_ABSX, Loc, 0, L[9]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                X = NewCodeEntry (OP65_LDX, L[6]->AM, L[6]->Arg, 0, L[6]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-            } else {
-
-                /* Case 3 */
-                Arg = MakeHexArg (L[5]->Num - 2);
-                X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[5]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                X = NewCodeEntry (OP65_LDX, L[6]->AM, L[6]->Arg, 0, L[6]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                X = NewCodeEntry (OP65_LDA, L[7]->AM, L[7]->Arg, 0, L[7]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, L[6]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                Arg = MakeHexArg (L[1]->RI->In.RegY);
-                X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[1]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                X = NewCodeEntry (OP65_LDA, L[1]->AM, L[1]->Arg, 0, L[1]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, L[1]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                X = NewCodeEntry (OP65_PLA, AM65_IMP, 0, 0, L[6]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                X = NewCodeEntry (OP65_STA, AM, Loc, 0, L[9]->LI);
-                CS_InsertEntry (S, X, IP++);
-
-            }
-
-            /* Remove the old code */
-            CS_DelEntries (S, I, 10);
-
-            /* Skip most of the generated replacement code */
-            I += 4;
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptPtrStore3 (CodeSeg* S)
-/* Search for the sequence:
-**
-**      jsr     pushax
-**      ldy     xxx
-**      jsr     ldauidx
-**      subop
-**      ldy     yyy
-**      jsr     staspidx
-**
-** and replace it by:
-**
-**      sta     ptr1
-**      stx     ptr1+1
-**      ldy     xxx
-**      ldx     #$00
-**      lda     (ptr1),y
-**      subop
-**      ldy     yyy
-**      sta     (ptr1),y
-**
-** In case a/x is loaded from the register bank before the pushax, we can even
-** use the register bank instead of ptr1.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        unsigned K;
-        CodeEntry* L[10];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (CE_IsCallTo (L[0], "pushax")            &&
-            CS_GetEntries (S, L+1, I+1, 3)          &&
-            L[1]->OPC == OP65_LDY                   &&
-            CE_IsConstImm (L[1])                    &&
-            !CE_HasLabel (L[1])                     &&
-            CE_IsCallTo (L[2], "ldauidx")           &&
-            !CE_HasLabel (L[2])                     &&
-            (K = OptPtrStore1Sub (S, I+3, L+3)) > 0 &&
-            CS_GetEntries (S, L+3+K, I+3+K, 2)      &&
-            L[3+K]->OPC == OP65_LDY                 &&
-            CE_IsConstImm (L[3+K])                  &&
-            !CE_HasLabel (L[3+K])                   &&
-            CE_IsCallTo (L[4+K], "staspidx")        &&
-            !CE_HasLabel (L[4+K])) {
-
-
-            const char* RegBank = 0;
-            const char* ZPLoc   = "ptr1";
-            CodeEntry* X;
-
-
-            /* Get the preceeding two instructions and check them. We check
-            ** for:
-            **          lda     regbank+n
-            **          ldx     regbank+n+1
-            */
-            if (I > 1) {
-                CodeEntry* P[2];
-                P[0] = CS_GetEntry (S, I-2);
-                P[1] = CS_GetEntry (S, I-1);
-                if (P[0]->OPC == OP65_LDA &&
-                    P[0]->AM  == AM65_ZP  &&
-                    P[1]->OPC == OP65_LDX &&
-                    P[1]->AM  == AM65_ZP  &&
-                    !CE_HasLabel (P[1])   &&
-                    strncmp (P[0]->Arg, "regbank+", 8) == 0) {
-
-                    unsigned Len = strlen (P[0]->Arg);
-
-                    if (strncmp (P[0]->Arg, P[1]->Arg, Len) == 0 &&
-                        P[1]->Arg[Len+0] == '+'                  &&
-                        P[1]->Arg[Len+1] == '1'                  &&
-                        P[1]->Arg[Len+2] == '\0') {
-
-                        /* Ok, found. Use the name of the register bank */
-                        RegBank = ZPLoc = P[0]->Arg;
-                    }
-                }
-            }
-
-            /* Insert the load via the zp pointer */
-            X = NewCodeEntry (OP65_LDX, AM65_IMM, "$00", 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+3);
-            X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, ZPLoc, 0, L[2]->LI);
-            CS_InsertEntry (S, X, I+4);
-
-            /* Insert the store through the zp pointer */
-            X = NewCodeEntry (OP65_STA, AM65_ZP_INDY, ZPLoc, 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+6+K);
-
-            /* Delete the old code */
-            CS_DelEntry (S, I+7+K);     /* jsr spaspidx */
-            CS_DelEntry (S, I+2);       /* jsr ldauidx */
-
-            /* Create and insert the stores into the zp pointer if needed */
-            if (RegBank == 0) {
-                X = NewCodeEntry (OP65_STA, AM65_ZP, "ptr1", 0, L[0]->LI);
-                CS_InsertEntry (S, X, I+1);
-                X = NewCodeEntry (OP65_STX, AM65_ZP, "ptr1+1", 0, L[0]->LI);
-                CS_InsertEntry (S, X, I+2);
-            }
-
-            /* Delete more old code. Do it here to keep a label attached to
-            ** entry I in place.
-            */
-            CS_DelEntry (S, I);         /* jsr pushax */
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
diff --git a/src/cc65/coptptrstore.h b/src/cc65/coptptrstore.h
deleted file mode 100644 (file)
index 3f8fc91..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                               coptptrstore.h                              */
-/*                                                                           */
-/*                      Optimize stores through pointers                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef COPTPTRSTORE_H
-#define COPTPTRSTORE_H
-
-
-
-/* cc65 */
-#include "codeseg.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned OptPtrStore1 (CodeSeg* S);
-/* Search for the sequence:
-**
-**      clc
-**      adc     xxx
-**      bcc     L
-**      inx
-** L:   jsr     pushax
-**      ldx     #$00
-**      lda     yyy
-**      ldy     #$00
-**      jsr     staspidx
-**
-** and replace it by:
-**
-**      sta     ptr1
-**      stx     ptr1+1
-**      ldy     xxx
-**      ldx     #$00
-**      lda     yyy
-**      sta     (ptr1),y
-**
-** or by
-**
-**      ldy     xxx
-**      ldx     #$00
-**      lda     yyy
-**      sta     (zp),y
-**
-** or by
-**
-**      ldy     xxx
-**      ldx     #$00
-**      lda     yyy
-**      sta     label,y
-**
-** or by
-**
-**      ldy     xxx
-**      ldx     #$00
-**      lda     yyy
-**      sta     $xxxx,y
-**
-** depending on the two instructions preceeding the sequence above.
-*/
-
-unsigned OptPtrStore2 (CodeSeg* S);
-/* Search for the sequence:
-**
-**      clc
-**      adc     xxx
-**      bcc     L
-**      inx
-** L:   jsr     pushax
-**      ldy     yyy
-**      ldx     #$00
-**      lda     (sp),y
-**      ldy     #$00
-**      jsr     staspidx
-**
-** and replace it by:
-**
-**      sta     ptr1
-**      stx     ptr1+1
-**      ldy     yyy-2
-**      ldx     #$00
-**      lda     (sp),y
-**      ldy     xxx
-**      sta     (ptr1),y
-**
-** or by
-**
-**      ldy     yyy-2
-**      ldx     #$00
-**      lda     (sp),y
-**      ldy     xxx
-**      sta     (zp),y
-**
-** or by
-**
-**      ldy     yyy-2
-**      ldx     #$00
-**      lda     (sp),y
-**      ldy     xxx
-**      sta     label,y
-**
-** or by
-**
-**      ldy     yyy-2
-**      ldx     #$00
-**      lda     (sp),y
-**      ldy     xxx
-**      sta     $xxxx,y
-**
-** depending on the code preceeding the sequence above.
-*/
-
-unsigned OptPtrStore3 (CodeSeg* S);
-/* Search for the sequence:
-**
-**      jsr     pushax
-**      ldy     xxx
-**      jsr     ldauidx
-**      subop
-**      ldy     yyy
-**      jsr     staspidx
-**
-** and replace it by:
-**
-**      sta     ptr1
-**      stx     ptr1+1
-**      ldy     xxx
-**      ldx     #$00
-**      lda     (ptr1),y
-**      subop
-**      ldy     yyy
-**      sta     (ptr1),y
-**
-** In case a/x is loaded from the register bank before the pushax, we can even
-** use the register bank instead of ptr1.
-*/
-
-
-
-/* End of coptptrstore.h */
-
-#endif
diff --git a/src/cc65/coptpush.c b/src/cc65/coptpush.c
deleted file mode 100644 (file)
index 5c3daff..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                coptpush.c                                 */
-/*                                                                           */
-/*                          Optimize push sequences                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* cc65 */
-#include "codeent.h"
-#include "codeinfo.h"
-#include "coptpush.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned OptPush1 (CodeSeg* S)
-/* Given a sequence
-**
-**     jsr     ldaxysp
-**     jsr     pushax
-**
-** If a/x are not used later, and Y is known, replace that by
-**
-**     ldy     #xx+2
-**     jsr     pushwysp
-**
-** saving 3 bytes and several cycles.
-*/
-{
-    unsigned I;
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[2];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (CE_IsCallTo (L[0], "ldaxysp")               &&
-            RegValIsKnown (L[0]->RI->In.RegY)           &&
-            L[0]->RI->In.RegY < 0xFE                    &&
-            (L[1] = CS_GetNextEntry (S, I)) != 0        &&
-            !CE_HasLabel (L[1])                         &&
-            CE_IsCallTo (L[1], "pushax")                &&
-            !RegAXUsed (S, I+2)) {
-
-            /* Insert new code behind the pushax */
-            const char* Arg;
-            CodeEntry* X;
-
-            /* ldy     #xx+1 */
-            Arg = MakeHexArg (L[0]->RI->In.RegY+2);
-            X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[0]->LI);
-            CS_InsertEntry (S, X, I+2);
-
-            /* jsr pushwysp */
-            X = NewCodeEntry (OP65_JSR, AM65_ABS, "pushwysp", 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+3);
-
-            /* Delete the old code */
-            CS_DelEntries (S, I, 2);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptPush2 (CodeSeg* S)
-/* A sequence
-**
-**     jsr     ldaxidx
-**     jsr     pushax
-**
-** may get replaced by
-**
-**     jsr     pushwidx
-*/
-{
-    unsigned I;
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[2];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (CE_IsCallTo (L[0], "ldaxidx")               &&
-            (L[1] = CS_GetNextEntry (S, I)) != 0        &&
-            !CE_HasLabel (L[1])                         &&
-            CE_IsCallTo (L[1], "pushax")) {
-
-            /* Insert new code behind the pushax */
-            CodeEntry* X;
-
-            /* jsr pushwidx */
-            X = NewCodeEntry (OP65_JSR, AM65_ABS, "pushwidx", 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+2);
-
-            /* Delete the old code */
-            CS_DelEntries (S, I, 2);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
diff --git a/src/cc65/coptpush.h b/src/cc65/coptpush.h
deleted file mode 100644 (file)
index 0d637e8..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                coptpush.h                                 */
-/*                                                                           */
-/*                          Optimize push sequences                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2002 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef COPTPUSH_H
-#define COPTPUSH_H
-
-
-
-/* cc65 */
-#include "codeseg.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned OptPush1 (CodeSeg* S);
-/* Given a sequence
-**
-**     ldy     #xx
-**     jsr     ldaxysp
-**     jsr     pushax
-**
-** If a/x are not used later, replace that by
-**
-**     ldy     #xx+2
-**     jsr     pushwysp
-**
-** saving 3 bytes and several cycles.
-*/
-
-unsigned OptPush2 (CodeSeg* S);
-/* A sequence
-**
-**     jsr     ldaxidx
-**     jsr     pushax
-**
-** may get replaced by
-**
-**     jsr     pushwidx
-*/
-
-
-
-/* End of coptpush.h */
-
-#endif
diff --git a/src/cc65/coptshift.c b/src/cc65/coptshift.c
deleted file mode 100644 (file)
index a4b9930..0000000
+++ /dev/null
@@ -1,742 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                coptshift.c                                */
-/*                                                                           */
-/*                              Optimize shifts                              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "chartype.h"
-
-/* cc65 */
-#include "codeent.h"
-#include "codeinfo.h"
-#include "coptshift.h"
-
-
-
-/*****************************************************************************/
-/*                                     Data                                  */
-/*****************************************************************************/
-
-
-
-/* Shift types. Shift type is in the first byte, shift count in the second */
-enum {
-    SHIFT_NONE          = 0x0000,
-
-    /* Masks */
-    SHIFT_MASK_COUNT    = 0x00FF,
-    SHIFT_MASK_DIR      = 0x0F00,
-    SHIFT_MASK_MODE     = 0xF000,       /* Arithmetic or logical */
-    SHIFT_MASK_TYPE     = SHIFT_MASK_DIR | SHIFT_MASK_MODE,
-
-    /* Shift counts */
-    SHIFT_COUNT_Y       = 0x0000,       /* Count is in Y register */
-    SHIFT_COUNT_1       = 0x0001,
-    SHIFT_COUNT_2       = 0x0002,
-    SHIFT_COUNT_3       = 0x0003,
-    SHIFT_COUNT_4       = 0x0004,
-    SHIFT_COUNT_5       = 0x0005,
-    SHIFT_COUNT_6       = 0x0006,
-    SHIFT_COUNT_7       = 0x0007,
-
-    /* Shift directions */
-    SHIFT_DIR_LEFT      = 0x0100,
-    SHIFT_DIR_RIGHT     = 0x0200,
-
-    /* Shift modes */
-    SHIFT_MODE_ARITH    = 0x1000,
-    SHIFT_MODE_LOGICAL  = 0x2000,
-
-    /* Shift types */
-    SHIFT_TYPE_ASL      = SHIFT_DIR_LEFT  | SHIFT_MODE_ARITH,
-    SHIFT_TYPE_ASR      = SHIFT_DIR_RIGHT | SHIFT_MODE_ARITH,
-    SHIFT_TYPE_LSL      = SHIFT_DIR_LEFT  | SHIFT_MODE_LOGICAL,
-    SHIFT_TYPE_LSR      = SHIFT_DIR_RIGHT | SHIFT_MODE_LOGICAL,
-
-    /* Complete specs */
-    SHIFT_ASL_Y         = SHIFT_TYPE_ASL | SHIFT_COUNT_Y,
-    SHIFT_ASR_Y         = SHIFT_TYPE_ASR | SHIFT_COUNT_Y,
-    SHIFT_LSL_Y         = SHIFT_TYPE_LSL | SHIFT_COUNT_Y,
-    SHIFT_LSR_Y         = SHIFT_TYPE_LSR | SHIFT_COUNT_Y,
-
-    SHIFT_ASL_1         = SHIFT_TYPE_ASL | SHIFT_COUNT_1,
-    SHIFT_ASR_1         = SHIFT_TYPE_ASR | SHIFT_COUNT_1,
-    SHIFT_LSL_1         = SHIFT_TYPE_LSL | SHIFT_COUNT_1,
-    SHIFT_LSR_1         = SHIFT_TYPE_LSR | SHIFT_COUNT_1,
-
-    SHIFT_ASL_2         = SHIFT_TYPE_ASL | SHIFT_COUNT_2,
-    SHIFT_ASR_2         = SHIFT_TYPE_ASR | SHIFT_COUNT_2,
-    SHIFT_LSL_2         = SHIFT_TYPE_LSL | SHIFT_COUNT_2,
-    SHIFT_LSR_2         = SHIFT_TYPE_LSR | SHIFT_COUNT_2,
-
-    SHIFT_ASL_3         = SHIFT_TYPE_ASL | SHIFT_COUNT_3,
-    SHIFT_ASR_3         = SHIFT_TYPE_ASR | SHIFT_COUNT_3,
-    SHIFT_LSL_3         = SHIFT_TYPE_LSL | SHIFT_COUNT_3,
-    SHIFT_LSR_3         = SHIFT_TYPE_LSR | SHIFT_COUNT_3,
-
-    SHIFT_ASL_4         = SHIFT_TYPE_ASL | SHIFT_COUNT_4,
-    SHIFT_ASR_4         = SHIFT_TYPE_ASR | SHIFT_COUNT_4,
-    SHIFT_LSL_4         = SHIFT_TYPE_LSL | SHIFT_COUNT_4,
-    SHIFT_LSR_4         = SHIFT_TYPE_LSR | SHIFT_COUNT_4,
-
-    SHIFT_ASL_5         = SHIFT_TYPE_ASL | SHIFT_COUNT_5,
-    SHIFT_ASR_5         = SHIFT_TYPE_ASR | SHIFT_COUNT_5,
-    SHIFT_LSL_5         = SHIFT_TYPE_LSL | SHIFT_COUNT_5,
-    SHIFT_LSR_5         = SHIFT_TYPE_LSR | SHIFT_COUNT_5,
-
-    SHIFT_ASL_6         = SHIFT_TYPE_ASL | SHIFT_COUNT_6,
-    SHIFT_ASR_6         = SHIFT_TYPE_ASR | SHIFT_COUNT_6,
-    SHIFT_LSL_6         = SHIFT_TYPE_LSL | SHIFT_COUNT_6,
-    SHIFT_LSR_6         = SHIFT_TYPE_LSR | SHIFT_COUNT_6,
-
-    SHIFT_ASL_7         = SHIFT_TYPE_ASL | SHIFT_COUNT_7,
-    SHIFT_ASR_7         = SHIFT_TYPE_ASR | SHIFT_COUNT_7,
-    SHIFT_LSL_7         = SHIFT_TYPE_LSL | SHIFT_COUNT_7,
-    SHIFT_LSR_7         = SHIFT_TYPE_LSR | SHIFT_COUNT_7,
-};
-
-
-
-/* Macros to extract values from a shift type */
-#define SHIFT_COUNT(S)          ((S) & SHIFT_MASK_COUNT)
-#define SHIFT_DIR(S)            ((S) & SHIFT_MASK_DIR)
-#define SHIFT_MODE(S)           ((S) & SHIFT_MASK_MODE)
-#define SHIFT_TYPE(S)           ((S) & SHIFT_MASK_TYPE)
-
-
-
-/*****************************************************************************/
-/*                              Helper routines                              */
-/*****************************************************************************/
-
-
-
-static unsigned GetShift (const char* Name)
-/* Determine the shift from the name of the subroutine */
-{
-    unsigned Type;
-
-    if (strncmp (Name, "aslax", 5) == 0) {
-        Type = SHIFT_TYPE_ASL;
-    } else if (strncmp (Name, "asrax", 5) == 0) {
-        Type = SHIFT_TYPE_ASR;
-    } else if (strncmp (Name, "shlax", 5) == 0) {
-        Type = SHIFT_TYPE_LSL;
-    } else if (strncmp (Name, "shrax", 5) == 0) {
-        Type = SHIFT_TYPE_LSR;
-    } else {
-        /* Nothing we know */
-        return SHIFT_NONE;
-    }
-
-    /* Get the count */
-    switch (Name[5]) {
-        case 'y':       Type |= SHIFT_COUNT_Y;  break;
-        case '1':       Type |= SHIFT_COUNT_1;  break;
-        case '2':       Type |= SHIFT_COUNT_2;  break;
-        case '3':       Type |= SHIFT_COUNT_3;  break;
-        case '4':       Type |= SHIFT_COUNT_4;  break;
-        case '5':       Type |= SHIFT_COUNT_5;  break;
-        case '6':       Type |= SHIFT_COUNT_6;  break;
-        case '7':       Type |= SHIFT_COUNT_7;  break;
-        default:        return SHIFT_NONE;
-    }
-
-    /* Make sure nothing follows */
-    if (Name[6] == '\0') {
-        return Type;
-    } else {
-        return SHIFT_NONE;
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                              Optimize shifts                              */
-/*****************************************************************************/
-
-
-
-unsigned OptShift1 (CodeSeg* S)
-/* A call to the shlaxN routine may get replaced by one or more asl insns
-** if the value of X is not used later. If X is used later, but it is zero
-** on entry and it's a shift by one, it may get replaced by:
-**
-**      asl     a
-**      bcc     L1
-**      inx
-**  L1:
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        unsigned   Shift;
-        CodeEntry* N;
-        CodeEntry* X;
-        CodeLabel* L;
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (E->OPC == OP65_JSR                          &&
-            (Shift = GetShift (E->Arg)) != SHIFT_NONE   &&
-            SHIFT_DIR (Shift) == SHIFT_DIR_LEFT) {
-
-
-            unsigned Count = SHIFT_COUNT (Shift);
-            if (!RegXUsed (S, I+1)) {
-
-                if (Count == SHIFT_COUNT_Y) {
-
-                    CodeLabel* L;
-
-                    if (S->CodeSizeFactor < 200) {
-                        goto NextEntry;
-                    }
-
-                    /* Change into
-                    **
-                    ** L1:  asl     a
-                    **      dey
-                    **      bpl     L1
-                    **      ror     a
-                    */
-
-                    /* asl a */
-                    X = NewCodeEntry (OP65_ASL, AM65_ACC, "a", 0, E->LI);
-                    CS_InsertEntry (S, X, I+1);
-                    L = CS_GenLabel (S, X);
-
-                    /* dey */
-                    X = NewCodeEntry (OP65_DEY, AM65_IMP, 0, 0, E->LI);
-                    CS_InsertEntry (S, X, I+2);
-
-                    /* bpl L1 */
-                    X = NewCodeEntry (OP65_BPL, AM65_BRA, L->Name, L, E->LI);
-                    CS_InsertEntry (S, X, I+3);
-
-                    /* ror a */
-                    X = NewCodeEntry (OP65_ROR, AM65_ACC, "a", 0, E->LI);
-                    CS_InsertEntry (S, X, I+4);
-
-                } else {
-                    /* Insert shift insns */
-                    while (Count--) {
-                        X = NewCodeEntry (OP65_ASL, AM65_ACC, "a", 0, E->LI);
-                        CS_InsertEntry (S, X, I+1);
-                    }
-                }
-
-            } else if (E->RI->In.RegX == 0              &&
-                       Count == 1                       &&
-                       (N = CS_GetNextEntry (S, I)) != 0) {
-
-                /* asl a */
-                X = NewCodeEntry (OP65_ASL, AM65_ACC, "a", 0, E->LI);
-                CS_InsertEntry (S, X, I+1);
-
-                /* bcc L1 */
-                L = CS_GenLabel (S, N);
-                X = NewCodeEntry (OP65_BCC, AM65_BRA, L->Name, L, E->LI);
-                CS_InsertEntry (S, X, I+2);
-
-                /* inx */
-                X = NewCodeEntry (OP65_INX, AM65_IMP, 0, 0, E->LI);
-                CS_InsertEntry (S, X, I+3);
-
-            } else {
-
-                /* We won't handle this one */
-                goto NextEntry;
-
-            }
-
-            /* Delete the call to shlax */
-            CS_DelEntry (S, I);
-
-            /* Remember, we had changes */
-            ++Changes;
-        }
-
-NextEntry:
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptShift2(CodeSeg* S)
-/* A call to the asrax1 routines may get replaced by something simpler, if
-** X is not used later:
-**
-**      cmp     #$80
-**      ror     a
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        unsigned Shift;
-        unsigned Count;
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (E->OPC == OP65_JSR                          &&
-            (Shift = GetShift (E->Arg)) != SHIFT_NONE   &&
-            SHIFT_TYPE (Shift) == SHIFT_TYPE_ASR        &&
-            (Count = SHIFT_COUNT (Shift)) > 0           &&
-            Count * 100 <= S->CodeSizeFactor    &&
-            !RegXUsed (S, I+1)) {
-
-            CodeEntry* X;
-            unsigned J = I+1;
-
-            /* Generate the replacement sequence */
-            while (Count--) {
-                /* cmp #$80 */
-                X = NewCodeEntry (OP65_CMP, AM65_IMM, "$80", 0, E->LI);
-                CS_InsertEntry (S, X, J++);
-
-                /* ror a */
-                X = NewCodeEntry (OP65_ROR, AM65_ACC, "a", 0, E->LI);
-                CS_InsertEntry (S, X, J++);
-            }
-
-            /* Delete the call to asrax */
-            CS_DelEntry (S, I);
-
-            /* Remember, we had changes */
-            ++Changes;
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptShift3 (CodeSeg* S)
-/* The sequence
-**
-**      bcc     L
-**      inx
-** L:   jsr     shrax1
-**
-** may get replaced by
-**
-**      ror     a
-**
-** if X is zero on entry. For shift counts > 1, more
-**
-**      shr     a
-**
-** must be added.
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        unsigned   Shift;
-        unsigned   Count;
-        CodeEntry* L[3];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if ((L[0]->OPC == OP65_BCC || L[0]->OPC == OP65_JCC)    &&
-            L[0]->JumpTo != 0                                   &&
-            L[0]->RI->In.RegX == 0                              &&
-            CS_GetEntries (S, L+1, I+1, 2)                      &&
-            L[1]->OPC == OP65_INX                               &&
-            L[0]->JumpTo->Owner == L[2]                         &&
-            !CS_RangeHasLabel (S, I, 2)                         &&
-            L[2]->OPC == OP65_JSR                               &&
-            (Shift = GetShift (L[2]->Arg)) != SHIFT_NONE        &&
-            SHIFT_DIR (Shift) == SHIFT_DIR_RIGHT                &&
-            (Count = SHIFT_COUNT (Shift)) > 0) {
-                                                
-            /* Add the replacement insn instead */
-            CodeEntry* X = NewCodeEntry (OP65_ROR, AM65_ACC, "a", 0, L[2]->LI);
-            CS_InsertEntry (S, X, I+3);
-            while (--Count) {
-                X = NewCodeEntry (OP65_LSR, AM65_ACC, "a", 0, L[2]->LI);
-                CS_InsertEntry (S, X, I+4);
-            }
-
-            /* Remove the bcs/dex/jsr */
-            CS_DelEntries (S, I, 3);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptShift4 (CodeSeg* S)
-/* Calls to the asraxN or shraxN routines may get replaced by one or more lsr
-** insns if the value of X is zero.
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        unsigned Shift;
-        unsigned Count;
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (E->OPC == OP65_JSR                          &&
-            (Shift = GetShift (E->Arg)) != SHIFT_NONE   &&
-            SHIFT_DIR (Shift) == SHIFT_DIR_RIGHT        &&
-            E->RI->In.RegX == 0) {
-
-            CodeEntry* X;
-
-            /* Shift count may be in Y */
-            Count = SHIFT_COUNT (Shift);
-            if (Count == SHIFT_COUNT_Y) {
-
-                CodeLabel* L;
-
-                if (S->CodeSizeFactor < 200) {
-                    /* Not acceptable */
-                    goto NextEntry;
-                }
-
-                /* Generate:
-                **
-                ** L1: lsr     a
-                **     dey
-                **     bpl     L1
-                **     rol     a
-                **
-                ** A negative shift count or one that is greater or equal than
-                ** the bit width of the left operand (which is promoted to
-                ** integer before the operation) causes undefined behaviour, so
-                ** above transformation is safe.
-                */
-
-                /* lsr a */
-                X = NewCodeEntry (OP65_LSR, AM65_ACC, "a", 0, E->LI);
-                CS_InsertEntry (S, X, I+1);
-                L = CS_GenLabel (S, X);
-
-                /* dey */
-                X = NewCodeEntry (OP65_DEY, AM65_IMP, 0, 0, E->LI);
-                CS_InsertEntry (S, X, I+2);
-
-                /* bpl L1 */
-                X = NewCodeEntry (OP65_BPL, AM65_BRA, L->Name, L, E->LI);
-                CS_InsertEntry (S, X, I+3);
-
-                /* rol a */
-                X = NewCodeEntry (OP65_ROL, AM65_ACC, "a", 0, E->LI);
-                CS_InsertEntry (S, X, I+4);
-
-            } else {
-                /* Insert shift insns */
-                while (Count--) {
-                    X = NewCodeEntry (OP65_LSR, AM65_ACC, "a", 0, E->LI);
-                    CS_InsertEntry (S, X, I+1);
-                }
-
-            }
-
-            /* Delete the call to shrax */
-            CS_DelEntry (S, I);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-NextEntry:
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptShift5 (CodeSeg* S)
-/* Search for the sequence
-**
-**      lda     xxx
-**      ldx     yyy
-**      jsr     aslax1/asrax1/shlax1/shrax1
-**      sta     aaa
-**      stx     bbb
-**
-** and replace it by
-**
-**      lda     xxx
-**      asl     a
-**      sta     aaa
-**      lda     yyy
-**      rol     a
-**      sta     bbb
-**
-** or similar, provided that a/x is not used later
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        unsigned ShiftType;
-        CodeEntry* L[5];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_LDA                               &&
-            (L[0]->AM == AM65_ABS || L[0]->AM == AM65_ZP)       &&
-            CS_GetEntries (S, L+1, I+1, 4)                      &&
-            !CS_RangeHasLabel (S, I+1, 4)                       &&
-            L[1]->OPC == OP65_LDX                               &&
-            (L[1]->AM == AM65_ABS || L[1]->AM == AM65_ZP)       &&
-            L[2]->OPC == OP65_JSR                               &&
-            (ShiftType = GetShift (L[2]->Arg)) != SHIFT_NONE    &&
-            SHIFT_COUNT(ShiftType) == 1                         &&
-            L[3]->OPC == OP65_STA                               &&
-            (L[3]->AM == AM65_ABS || L[3]->AM == AM65_ZP)       &&
-            L[4]->OPC == OP65_STX                               &&
-            (L[4]->AM == AM65_ABS || L[4]->AM == AM65_ZP)       &&
-            !RegAXUsed (S, I+5)) {
-
-            CodeEntry* X;
-
-            /* Handle the four shift types differently */
-            switch (ShiftType) {
-
-                case SHIFT_ASR_1:
-                    X = NewCodeEntry (OP65_LDA, L[1]->AM, L[1]->Arg, 0, L[1]->LI);
-                    CS_InsertEntry (S, X, I+5);
-                    X = NewCodeEntry (OP65_CMP, AM65_IMM, "$80", 0, L[2]->LI);
-                    CS_InsertEntry (S, X, I+6);
-                    X = NewCodeEntry (OP65_ROR, AM65_ACC, "a", 0, L[2]->LI);
-                    CS_InsertEntry (S, X, I+7);
-                    X = NewCodeEntry (OP65_STA, L[4]->AM, L[4]->Arg, 0, L[4]->LI);
-                    CS_InsertEntry (S, X, I+8);
-                    X = NewCodeEntry (OP65_LDA, L[0]->AM, L[0]->Arg, 0, L[0]->LI);
-                    CS_InsertEntry (S, X, I+9);
-                    X = NewCodeEntry (OP65_ROR, AM65_ACC, "a", 0, L[2]->LI);
-                    CS_InsertEntry (S, X, I+10);
-                    X = NewCodeEntry (OP65_STA, L[3]->AM, L[3]->Arg, 0, L[3]->LI);
-                    CS_InsertEntry (S, X, I+11);
-                    CS_DelEntries (S, I, 5);
-                    break;
-
-                case SHIFT_LSR_1:
-                    X = NewCodeEntry (OP65_LDA, L[1]->AM, L[1]->Arg, 0, L[1]->LI);
-                    CS_InsertEntry (S, X, I+5);
-                    X = NewCodeEntry (OP65_LSR, AM65_ACC, "a", 0, L[2]->LI);
-                    CS_InsertEntry (S, X, I+6);
-                    X = NewCodeEntry (OP65_STA, L[4]->AM, L[4]->Arg, 0, L[4]->LI);
-                    CS_InsertEntry (S, X, I+7);
-                    X = NewCodeEntry (OP65_LDA, L[0]->AM, L[0]->Arg, 0, L[0]->LI);
-                    CS_InsertEntry (S, X, I+8);
-                    X = NewCodeEntry (OP65_ROR, AM65_ACC, "a", 0, L[2]->LI);
-                    CS_InsertEntry (S, X, I+9);
-                    X = NewCodeEntry (OP65_STA, L[3]->AM, L[3]->Arg, 0, L[3]->LI);
-                    CS_InsertEntry (S, X, I+10);
-                    CS_DelEntries (S, I, 5);
-                    break;
-
-                case SHIFT_LSL_1:
-                case SHIFT_ASL_1:
-                    /* These two are identical */
-                    X = NewCodeEntry (OP65_ASL, AM65_ACC, "a", 0, L[2]->LI);
-                    CS_InsertEntry (S, X, I+1);
-                    X = NewCodeEntry (OP65_STA, L[3]->AM, L[3]->Arg, 0, L[3]->LI);
-                    CS_InsertEntry (S, X, I+2);
-                    X = NewCodeEntry (OP65_LDA, L[1]->AM, L[1]->Arg, 0, L[1]->LI);
-                    CS_InsertEntry (S, X, I+3);
-                    X = NewCodeEntry (OP65_ROL, AM65_ACC, "a", 0, L[2]->LI);
-                    CS_InsertEntry (S, X, I+4);
-                    X = NewCodeEntry (OP65_STA, L[4]->AM, L[4]->Arg, 0, L[4]->LI);
-                    CS_InsertEntry (S, X, I+5);
-                    CS_DelEntries (S, I+6, 4);
-                    break;
-
-            }
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptShift6 (CodeSeg* S)
-/* Inline the shift subroutines. */
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        unsigned   Shift;
-        unsigned   Count;
-        CodeEntry* X;
-        unsigned   IP;
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for a call to one of the shift routine */
-        if (E->OPC == OP65_JSR                          &&
-            (Shift = GetShift (E->Arg)) != SHIFT_NONE   &&
-            SHIFT_DIR (Shift) == SHIFT_DIR_LEFT         &&
-            (Count = SHIFT_COUNT (Shift)) > 0) {
-
-            /* Code is:
-            **
-            **      stx     tmp1
-            **      asl     a
-            **      rol     tmp1
-            **      (repeat ShiftCount-1 times)
-            **      ldx     tmp1
-            **
-            ** which makes 4 + 3 * ShiftCount bytes, compared to the original
-            ** 3 bytes for the subroutine call. However, in most cases, the
-            ** final load of the X register gets merged with some other insn
-            ** and replaces a txa, so for a shift count of 1, we get a factor
-            ** of 200, which matches nicely the CodeSizeFactor enabled with -Oi
-            */
-            if (Count > 1 || S->CodeSizeFactor > 200) {
-                unsigned Size = 4 + 3 * Count;
-                if ((Size * 100 / 3) > S->CodeSizeFactor) {
-                    /* Not acceptable */
-                    goto NextEntry;
-                }
-            }
-
-            /* Inline the code. Insertion point is behind the subroutine call */
-            IP = (I + 1);
-
-            /* stx tmp1 */
-            X = NewCodeEntry (OP65_STX, AM65_ZP, "tmp1", 0, E->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            while (Count--) {
-                /* asl a */
-                X = NewCodeEntry (OP65_ASL, AM65_ACC, "a", 0, E->LI);
-                CS_InsertEntry (S, X, IP++);
-
-                /* rol tmp1 */
-                X = NewCodeEntry (OP65_ROL, AM65_ZP, "tmp1", 0, E->LI);
-                CS_InsertEntry (S, X, IP++);
-            }
-
-            /* ldx tmp1 */
-            X = NewCodeEntry (OP65_LDX, AM65_ZP, "tmp1", 0, E->LI);
-            CS_InsertEntry (S, X, IP++);
-
-            /* Remove the subroutine call */
-            CS_DelEntry (S, I);
-
-            /* Remember, we had changes */
-            ++Changes;
-        }
-
-NextEntry:
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
diff --git a/src/cc65/coptshift.h b/src/cc65/coptshift.h
deleted file mode 100644 (file)
index 0410652..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                coptshift.h                                */
-/*                                                                           */
-/*                              Optimize shifts                              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef COPTSHIFT_H
-#define COPTSHIFT_H
-
-
-
-/* cc65 */
-#include "codeseg.h"
-
-
-
-/*****************************************************************************/
-/*                              Optimize shifts                              */
-/*****************************************************************************/
-
-
-
-unsigned OptShift1 (CodeSeg* S);
-/* A call to the shlaxN routine may get replaced by one or more asl insns
-** if the value of X is not used later. If X is used later, but it is zero
-** on entry and it's a shift by one, it may get replaced by:
-**
-**      asl     a
-**      bcc     L1
-**      inx
-**  L1:
-*/
-
-unsigned OptShift2(CodeSeg* S);
-/* A call to the asrax1 routines may get replaced by something simpler, if
-** X is not used later:
-**
-**      cmp     #$80
-**      ror     a
-*/
-
-unsigned OptShift3 (CodeSeg* S);
-/* The sequence
-**
-**      bcc     L
-**      inx
-** L:   jsr     shrax1
-**
-** may get replaced by
-**
-**      ror     a
-**
-** if X is zero on entry and unused later. For shift counts > 1, more
-**
-**      shr     a
-**
-** must be added.
-*/
-
-unsigned OptShift4 (CodeSeg* S);
-/* Calls to the asraxN or shraxN routines may get replaced by one or more lsr
-** insns if the value of X is zero.
-*/
-
-unsigned OptShift5 (CodeSeg* S);
-/* Search for the sequence
-**
-**      lda     xxx
-**      ldx     yyy
-**      jsr     aslax1/asrax1/shlax1/shrax1
-**      sta     aaa
-**      stx     bbb
-**
-** and replace it by
-**
-**      lda     xxx
-**      asl     a
-**      sta     aaa
-**      lda     yyy
-**      rol     a
-**      sta     bbb
-**
-** or similar, provided that a/x is not used later
-*/
-
-unsigned OptShift6 (CodeSeg* S);
-/* Inline the shift subroutines. */
-
-
-
-/* End of coptshift.h */
-
-#endif
diff --git a/src/cc65/coptsize.c b/src/cc65/coptsize.c
deleted file mode 100644 (file)
index 5c23e63..0000000
+++ /dev/null
@@ -1,1036 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 coptsize.c                                */
-/*                                                                           */
-/*                              Size optimizations                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-
-/* common */
-#include "cpu.h"
-
-/* cc65 */
-#include "codeent.h"
-#include "codeinfo.h"
-#include "coptsize.h"
-#include "reginfo.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Flags for CallDesc */
-#define F_NONE          0x0000U /* No extra flags */
-#define F_SLOWER        0x0001U /* Function call is slower */
-
-typedef struct CallDesc CallDesc;
-struct CallDesc {
-    const char* LongFunc;       /* Long function name */
-    RegContents Regs;           /* Register contents */
-    unsigned    Flags;          /* Flags from above */
-    const char* ShortFunc;      /* Short function name */
-};
-
-/* Note: The table is sorted. If there is more than one entry with the same
-** name, entries are sorted best match first, so when searching linear for
-** a match, the first one can be used because it is also the best one (or
-** at least none of the following ones are better).
-** Note^2: Ptr1 and Tmp1 aren't evaluated, because runtime routines don't
-** expect parameters here.
-*/
-static const CallDesc CallTable [] = {
-    /* Name          A register      X register     Y register     flags     replacement */
-    {
-        "addeqysp",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "addeq0sp"
-    },{
-        "laddeq",
-        {
-            /*     A               X               Y             SRegLo   */
-                         1,              0, UNKNOWN_REGVAL,              0,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-                         0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "laddeq1"
-    },{
-        "laddeq",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL,              0,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-                         0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "laddeqa"
-    },{
-        "laddeqysp",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "laddeq0sp"
-    },{
-        "ldaxidx",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL,              1, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "ldaxi"
-    },{
-        "ldaxysp",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL,              1, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "ldax0sp"
-    },{
-        "ldeaxidx",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL,              3, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "ldeaxi"
-    },{
-        "ldeaxysp",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL,              3, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "ldeax0sp"
-    },{
-        "leaaxsp",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "leaa0sp"
-    },{
-        "lsubeq",
-        {
-            /*     A               X               Y             SRegLo   */
-                         1,              0, UNKNOWN_REGVAL,              0,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-                         0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "lsubeq1"
-    },{
-        "lsubeq",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL,              0,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-                         0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "lsubeqa"
-    },{
-        "lsubeqysp",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "lsubeq0sp"
-    },{
-        "pusha",
-        {
-            /*     A               X               Y             SRegLo   */
-                         0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_SLOWER,
-        "pushc0"
-    },{
-        "pusha",
-        {
-            /*     A               X               Y             SRegLo   */
-                         1, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_SLOWER,
-        "pushc1"
-    },{
-        "pusha",
-        {
-            /*     A               X               Y             SRegLo   */
-                         2, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_SLOWER,
-        "pushc2"
-    },{
-        "pushax",
-        {
-            /*     A               X               Y             SRegLo   */
-                         0,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "push0"
-    },{
-        "pushax",
-        {
-            /*     A               X               Y             SRegLo   */
-                         1,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_SLOWER,
-        "push1"
-    },{
-        "pushax",
-        {
-            /*     A               X               Y             SRegLo   */
-                         2,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_SLOWER,
-        "push2"
-    },{
-        "pushax",
-        {
-            /*     A               X               Y             SRegLo   */
-                         3,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_SLOWER,
-        "push3"
-    },{
-        "pushax",
-        {
-            /*     A               X               Y             SRegLo   */
-                         4,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_SLOWER,
-        "push4"
-    },{
-        "pushax",
-        {
-            /*     A               X               Y             SRegLo   */
-                         5,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_SLOWER,
-        "push5"
-    },{
-        "pushax",
-        {
-            /*     A               X               Y             SRegLo   */
-                         6,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_SLOWER,
-        "push6"
-    },{
-        "pushax",
-        {
-            /*     A               X               Y             SRegLo   */
-                         7,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_SLOWER,
-        "push7"
-    },{
-        "pushax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "pusha0"
-    },{
-        "pushax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,           0xFF, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_SLOWER,
-        "pushaFF"
-    },{
-        "pushaysp",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "pusha0sp"
-    },{
-        "pusheax",
-        {
-            /*     A               X               Y             SRegLo   */
-                         0,              0, UNKNOWN_REGVAL,              0,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-                         0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "pushl0"
-    },{
-        "pusheax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-                         0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "push0ax"
-    },{
-        "pushwidx",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL,              1, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "pushw"
-    },{
-        "pushwysp",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL,              3, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "pushw0sp"
-    },{
-        "staxysp",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "stax0sp"
-    },{
-        "steaxysp",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "steax0sp"
-    },{
-        "subeqysp",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "subeq0sp"
-    },{
-        "tosaddax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosadda0"
-    },{
-        "tosaddeax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-                         0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosadd0ax"
-    },{
-        "tosandax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosanda0"
-    },{
-        "tosandeax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-                         0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosand0ax"
-    },{
-        "tosdivax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosdiva0"
-    },{
-        "tosdiveax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-                         0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosdiv0ax"
-    },{
-        "toseqax",
-        {
-            /*     A               X               Y             SRegLo   */
-                         0,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "toseq00"
-    },{
-        "toseqax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "toseqa0"
-    },{
-        "tosgeax",
-        {
-            /*     A               X               Y             SRegLo   */
-                         0,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosge00"
-    },{
-        "tosgeax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosgea0"
-    },{
-        "tosgtax",
-        {
-            /*     A               X               Y             SRegLo   */
-                         0,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosgt00"
-    },{
-        "tosgtax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosgta0"
-    },{
-        "tosicmp",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosicmp0"
-    },{
-        "tosleax",
-        {
-            /*     A               X               Y             SRegLo   */
-                         0,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosle00"
-    },{
-        "tosleax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "toslea0"
-    },{
-        "tosltax",
-        {
-            /*     A               X               Y             SRegLo   */
-                         0,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "toslt00"
-    },{
-        "tosltax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "toslta0"
-    },{
-        "tosmodax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosmoda0"
-    },{
-        "tosmodeax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-                         0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosmod0ax"
-    },{
-        "tosmulax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosmula0"
-    },{
-        "tosmuleax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-                         0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosmul0ax"
-    },{
-        "tosneax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosnea0"
-    },{
-        "tosorax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosora0"
-    },{
-        "tosoreax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-                         0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosor0ax"
-    },{
-        "tosrsubax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosrsuba0"
-    },{
-        "tosrsubeax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-                         0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosrsub0ax"
-    },{
-        "tossubax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tossuba0"
-    },{
-        "tossubeax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-                         0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tossub0ax"
-    },{
-        "tosudivax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosudiva0"
-    },{
-        "tosudiveax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-                         0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosudiv0ax"
-    },{
-        "tosugeax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosugea0"
-    },{
-        "tosugtax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosugta0"
-    },{
-        "tosuleax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosulea0"
-    },{
-        "tosultax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosulta0"
-    },{
-        "tosumodax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosumoda0"
-    },{
-        "tosumodeax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-                         0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosumod0ax"
-    },{
-        "tosumulax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosumula0"
-    },{
-        "tosumuleax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-                         0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosumul0ax"
-    },{
-        "tosxorax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL,              0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosxora0"
-    },{
-        "tosxoreax",
-        {
-            /*     A               X               Y             SRegLo   */
-            UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL,              0,
-            /*   SRegHi          Ptr1Lo          Ptr1Hi           Tmp1    */
-                         0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
-        },
-        F_NONE,
-        "tosxor0ax"
-    },
-
-};
-#define CALL_COUNT (sizeof(CallTable) / sizeof(CallTable[0]))
-
-
-
-/*****************************************************************************/
-/*                                  Helpers                                  */
-/*****************************************************************************/
-
-
-
-static const CallDesc* FindCall (const char* Name)
-/* Find the function with the given name. Return a pointer to the table entry
-** or NULL if the function was not found.
-*/
-{
-    /* Do a binary search */
-    int First = 0;
-    int Last = CALL_COUNT - 1;
-    int Found = 0;
-
-    while (First <= Last) {
-
-        /* Set current to mid of range */
-        int Current = (Last + First) / 2;
-
-        /* Do a compare */
-        int Result = strcmp (CallTable[Current].LongFunc, Name);
-        if (Result < 0) {
-            First = Current + 1;
-        } else {
-            Last = Current - 1;
-            if (Result == 0) {
-                /* Found. Repeat the procedure until the first of all entries
-                ** with the same name is found.
-                */
-                Found = 1;
-            }
-        }
-    }
-
-    /* Return the first entry if found, or NULL otherwise */
-    return Found? &CallTable[First] : 0;
-}
-
-
-
-static int RegMatch (short Expected, short Actual)
-/* Check for a register match. If Expected has a value, it must be identical
-** to Actual.
-*/
-{
-    return RegValIsUnknown (Expected) || (Expected == Actual);
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned OptSize1 (CodeSeg* S)
-/* Do size optimization by calling special subroutines that preload registers.
-** This routine does not work standalone, it needs a following register load
-** removal pass.
-*/
-{
-    CodeEntry* E;
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Are we optimizing for size */
-    int OptForSize = (S->CodeSizeFactor < 100);
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        const CallDesc* D;
-
-        /* Get next entry */
-        E = CS_GetEntry (S, I);
-
-        /* Check if it's a subroutine call */
-        if (E->OPC == OP65_JSR && (D = FindCall (E->Arg)) != 0) {
-
-            /* Get input register info for this insn */
-            const RegContents* In = &E->RI->In;
-
-            /* FindCall finds the first entry that matches our function name.
-            ** The names are listed in "best match" order, so search for the
-            ** first one, that fulfills our conditions.
-            */
-            while (1) {
-
-                /* Check the registers and allow slower code only if
-                ** optimizing for size.
-                */
-                if ((OptForSize || (D->Flags & F_SLOWER) == 0)          &&
-                    RegMatch (D->Regs.RegA,    In->RegA)                &&
-                    RegMatch (D->Regs.RegX,    In->RegX)                &&
-                    RegMatch (D->Regs.RegY,    In->RegY)                &&
-                    RegMatch (D->Regs.SRegLo,  In->SRegLo)              &&
-                    RegMatch (D->Regs.SRegHi,  In->SRegHi)) {
-
-                    /* Ok, match for all conditions */
-                    CodeEntry* X;
-                    X = NewCodeEntry (E->OPC, E->AM, D->ShortFunc, 0, E->LI);
-                    CS_InsertEntry (S, X, I+1);
-                    CS_DelEntry (S, I);
-
-                    /* Remember that we had changes */
-                    ++Changes;
-
-                    /* Done */
-                    break;
-                }
-
-                /* Next table entry, bail out if next entry not valid */
-                if (++D >= CallTable + CALL_COUNT ||
-                    strcmp (D->LongFunc, E->Arg) != 0) {
-                    /* End of table or entries reached */
-                    break;
-                }
-            }
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptSize2 (CodeSeg* S)
-/* Do size optimization by using shorter code sequences, even if this
-** introduces relations between instructions. This step must be one of the
-** last steps, because it makes further work much more difficult.
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Get the input registers */
-        const RegContents* In = &E->RI->In;
-
-        /* Assume we have no replacement */
-        CodeEntry* X = 0;
-
-        /* Check the instruction */
-        switch (E->OPC) {
-
-            case OP65_LDA:
-                if (CE_IsConstImm (E)) {
-                    short Val = (short) E->Num;
-                    if (Val == In->RegX) {
-                        X = NewCodeEntry (OP65_TXA, AM65_IMP, 0, 0, E->LI);
-                    } else if (Val == In->RegY) {
-                        X = NewCodeEntry (OP65_TYA, AM65_IMP, 0, 0, E->LI);
-                    } else if (RegValIsKnown (In->RegA) && (CPUIsets[CPU] & CPU_ISET_65SC02) != 0) {
-                        if (Val == ((In->RegA - 1) & 0xFF)) {
-                            X = NewCodeEntry (OP65_DEA, AM65_IMP, 0, 0, E->LI);
-                        } else if (Val == ((In->RegA + 1) & 0xFF)) {
-                            X = NewCodeEntry (OP65_INA, AM65_IMP, 0, 0, E->LI);
-                        }
-                    }
-                }
-                break;
-
-            case OP65_LDX:
-                if (CE_IsConstImm (E)) {
-                    short Val = (short) E->Num;
-                    if (RegValIsKnown (In->RegX) && Val == ((In->RegX - 1) & 0xFF)) {
-                        X = NewCodeEntry (OP65_DEX, AM65_IMP, 0, 0, E->LI);
-                    } else if (RegValIsKnown (In->RegX) && Val == ((In->RegX + 1) & 0xFF)) {
-                        X = NewCodeEntry (OP65_INX, AM65_IMP, 0, 0, E->LI);
-                    } else if (Val == In->RegA) {
-                        X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, E->LI);
-                    }
-                }
-                break;
-
-            case OP65_LDY:
-                if (CE_IsConstImm (E)) {
-                    short Val = (short) E->Num;
-                    if (RegValIsKnown (In->RegY) && Val == ((In->RegY - 1) & 0xFF)) {
-                        X = NewCodeEntry (OP65_DEY, AM65_IMP, 0, 0, E->LI);
-                    } else if (RegValIsKnown (In->RegY) && Val == ((In->RegY + 1) & 0xFF)) {
-                        X = NewCodeEntry (OP65_INY, AM65_IMP, 0, 0, E->LI);
-                    } else if (Val == In->RegA) {
-                        X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, E->LI);
-                    }
-                }
-                break;
-
-            default:
-                /* Avoid gcc warnings */
-                break;
-
-        }
-
-        /* Insert the replacement if we have one */
-        if (X) {
-            CS_InsertEntry (S, X, I+1);
-            CS_DelEntry (S, I);
-            ++Changes;
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
diff --git a/src/cc65/coptsize.h b/src/cc65/coptsize.h
deleted file mode 100644 (file)
index 7df8668..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 coptsize.c                                */
-/*                                                                           */
-/*                              Size optimizations                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef COPTSIZE_H
-#define COPTSIZE_H
-
-
-
-/* cc65 */
-#include "codeseg.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned OptSize1 (CodeSeg* S);
-/* Do size optimization by calling special subroutines that preload registers.
-** This routine does not work standalone, it needs a following register load
-** removal pass.
-*/
-
-unsigned OptSize2 (CodeSeg* S);
-/* Do size optimization by using shorter code sequences, even if this
-** introduces relations between instructions. This step must be one of the
-** last steps, because it makes further work much more difficult.
-*/
-
-
-
-/* End of coptsize.h */
-
-#endif
diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c
deleted file mode 100644 (file)
index cf6392b..0000000
+++ /dev/null
@@ -1,2081 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 coptstop.c                                */
-/*                                                                           */
-/*           Optimize operations that take operands via the stack            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-
-/* common */
-#include "chartype.h"
-
-/* cc65 */
-#include "codeent.h"
-#include "codeinfo.h"
-#include "coptstop.h"
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                            Load tracking data                             */
-/*****************************************************************************/
-
-
-
-/* LoadRegInfo flags set by DirectOp */
-typedef enum {
-  LI_NONE               = 0x00,
-  LI_DIRECT             = 0x01,         /* Direct op may be used */
-  LI_RELOAD_Y           = 0x02,         /* Reload index register Y */
-  LI_REMOVE             = 0x04,         /* Load may be removed */
-  LI_DONT_REMOVE        = 0x08,         /* Load may not be removed */
-  LI_DUP_LOAD           = 0x10,         /* Duplicate load */
-} LI_FLAGS;
-
-/* Structure that tells us how to load the lhs values */
-typedef struct LoadRegInfo LoadRegInfo;
-struct LoadRegInfo {
-    LI_FLAGS            Flags;          /* Tells us how to load */
-    int                 LoadIndex;      /* Index of load insn, -1 if invalid */
-    CodeEntry*          LoadEntry;      /* The actual entry, 0 if invalid */
-    int                 XferIndex;      /* Index of transfer insn  */
-    CodeEntry*          XferEntry;      /* The actual transfer entry */
-    int                 Offs;           /* Stack offset if data is on stack */
-};
-
-/* Now combined for both registers */
-typedef struct LoadInfo LoadInfo;
-struct LoadInfo {
-    LoadRegInfo         A;              /* Info for A register */
-    LoadRegInfo         X;              /* Info for X register */
-    LoadRegInfo         Y;              /* Info for Y register */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Flags for the functions */
-typedef enum {
-    OP_NONE             = 0x00,         /* Nothing special */
-    OP_A_KNOWN          = 0x01,         /* Value of A must be known */
-    OP_X_ZERO           = 0x02,         /* X must be zero */
-    OP_LHS_LOAD         = 0x04,         /* Must have load insns for LHS */
-    OP_LHS_LOAD_DIRECT  = 0x0C,         /* Must have direct load insn for LHS */
-    OP_RHS_LOAD         = 0x10,         /* Must have load insns for RHS */
-    OP_RHS_LOAD_DIRECT  = 0x30,         /* Must have direct load insn for RHS */
-} OP_FLAGS;
-
-/* Structure forward decl */
-typedef struct StackOpData StackOpData;
-
-/* Structure that describes an optimizer subfunction for a specific op */
-typedef unsigned (*OptFunc) (StackOpData* D);
-typedef struct OptFuncDesc OptFuncDesc;
-struct OptFuncDesc {
-    const char*         Name;           /* Name of the replaced runtime function */
-    OptFunc             Func;           /* Function pointer */
-    unsigned            UnusedRegs;     /* Regs that must not be used later */
-    OP_FLAGS            Flags;          /* Flags */
-};
-
-/* Structure that holds the needed data */
-struct StackOpData {
-    CodeSeg*            Code;           /* Pointer to code segment */
-    unsigned            Flags;          /* Flags to remember things */
-
-    /* Pointer to optimizer subfunction description */
-    const OptFuncDesc*  OptFunc;
-
-    /* ZP register usage inside the sequence */
-    unsigned            UsedRegs;
-
-    /* Register load information for lhs and rhs */
-    LoadInfo            Lhs;
-    LoadInfo            Rhs;
-
-    /* Several indices of insns in the code segment */
-    int                 PushIndex;      /* Index of call to pushax in codeseg */
-    int                 OpIndex;        /* Index of actual operation */
-
-    /* Pointers to insns in the code segment */
-    CodeEntry*          PrevEntry;      /* Entry before the call to pushax */
-    CodeEntry*          PushEntry;      /* Pointer to entry with call to pushax */
-    CodeEntry*          OpEntry;        /* Pointer to entry with op */
-    CodeEntry*          NextEntry;      /* Entry after the op */
-
-    const char*         ZPLo;           /* Lo byte of zero page loc to use */
-    const char*         ZPHi;           /* Hi byte of zero page loc to use */
-    unsigned            IP;             /* Insertion point used by some routines */
-};
-
-
-
-/*****************************************************************************/
-/*                            Load tracking code                             */
-/*****************************************************************************/
-
-
-
-static void ClearLoadRegInfo (LoadRegInfo* RI)
-/* Clear a LoadRegInfo struct */
-{
-    RI->Flags     = LI_NONE;
-    RI->LoadIndex = -1;
-    RI->XferIndex = -1;
-    RI->Offs      = 0;
-}
-
-
-
-static void FinalizeLoadRegInfo (LoadRegInfo* RI, CodeSeg* S)
-/* Prepare a LoadRegInfo struct for use */
-{
-    /* Get the entries */
-    if (RI->LoadIndex >= 0) {
-        RI->LoadEntry = CS_GetEntry (S, RI->LoadIndex);
-    } else {
-        RI->LoadEntry = 0;
-    }
-    if (RI->XferIndex >= 0) {
-        RI->XferEntry = CS_GetEntry (S, RI->XferIndex);
-    } else {
-        RI->XferEntry = 0;
-    }
-}
-
-
-
-static void ClearLoadInfo (LoadInfo* LI)
-/* Clear a LoadInfo struct */
-{
-    ClearLoadRegInfo (&LI->A);
-    ClearLoadRegInfo (&LI->X);
-    ClearLoadRegInfo (&LI->Y);
-}
-
-
-
-static void AdjustLoadRegInfo (LoadRegInfo* RI, int Index, int Change)
-/* Adjust a load register info struct after deleting or inserting an entry
-** with a given index
-*/
-{
-    CHECK (abs (Change) == 1);
-    if (Change < 0) {
-        /* Deletion */
-        if (Index < RI->LoadIndex) {
-            --RI->LoadIndex;
-        } else if (Index == RI->LoadIndex) {
-            /* Has been removed */
-            RI->LoadIndex = -1;
-            RI->LoadEntry = 0;
-        }
-        if (Index < RI->XferIndex) {
-            --RI->XferIndex;
-        } else if (Index == RI->XferIndex) {
-            /* Has been removed */
-            RI->XferIndex = -1;
-            RI->XferEntry = 0;
-        }
-    } else {
-        /* Insertion */
-        if (Index <= RI->LoadIndex) {
-            ++RI->LoadIndex;
-        }
-        if (Index <= RI->XferIndex) {
-            ++RI->XferIndex;
-        }
-    }
-}
-
-
-
-static void FinalizeLoadInfo (LoadInfo* LI, CodeSeg* S)
-/* Prepare a LoadInfo struct for use */
-{
-    /* Get the entries */
-    FinalizeLoadRegInfo (&LI->A, S);
-    FinalizeLoadRegInfo (&LI->X, S);
-    FinalizeLoadRegInfo (&LI->Y, S);
-}
-
-
-
-static void AdjustLoadInfo (LoadInfo* LI, int Index, int Change)
-/* Adjust a load info struct after deleting entry with a given index */
-{
-    AdjustLoadRegInfo (&LI->A, Index, Change);
-    AdjustLoadRegInfo (&LI->X, Index, Change);
-    AdjustLoadRegInfo (&LI->Y, Index, Change);
-}
-
-
-
-static void HonourUseAndChg (LoadRegInfo* RI, unsigned Reg, const CodeEntry* E)
-/* Honour use and change flags for an instruction */
-{
-    if (E->Chg & Reg) {
-        ClearLoadRegInfo (RI);
-    } else if ((E->Use & Reg) && RI->LoadIndex >= 0) {
-        RI->Flags |= LI_DONT_REMOVE;
-    }
-}
-
-
-
-static void TrackLoads (LoadInfo* LI, CodeEntry* E, int I)
-/* Track loads for a code entry */
-{
-    if (E->Info & OF_LOAD) {
-
-        LoadRegInfo* RI = 0;
-
-        /* Determine, which register was loaded */
-        if (E->Chg & REG_A) {
-            RI = &LI->A;
-        } else if (E->Chg & REG_X) {
-            RI = &LI->X;
-        } else if (E->Chg & REG_Y) {
-            RI = &LI->Y;
-        }
-        CHECK (RI != 0);
-
-        /* If we had a load or xfer op before, this is a duplicate load which
-        ** can cause problems if it encountered between the pushax and the op,
-        ** so remember it.
-        */
-        if (RI->LoadIndex >= 0 || RI->XferIndex >= 0) {
-            RI->Flags |= LI_DUP_LOAD;
-        }
-
-        /* Remember the load */
-        RI->LoadIndex = I;
-        RI->XferIndex = -1;
-
-        /* Set load flags */
-        RI->Flags    &= ~(LI_DIRECT | LI_RELOAD_Y);
-        if (E->AM == AM65_IMM || E->AM == AM65_ZP || E->AM == AM65_ABS) {
-            /* These insns are all ok and replaceable */
-            RI->Flags |= LI_DIRECT;
-        } else if (E->AM == AM65_ZP_INDY &&
-                   RegValIsKnown (E->RI->In.RegY) &&
-                   strcmp (E->Arg, "sp") == 0) {
-            /* A load from the stack with known offset is also ok, but in this
-            ** case we must reload the index register later. Please note that
-            ** a load indirect via other zero page locations is not ok, since
-            ** these locations may change between the push and the actual
-            ** operation.
-            */
-            RI->Offs  = (unsigned char) E->RI->In.RegY;
-            RI->Flags |= (LI_DIRECT | LI_RELOAD_Y);
-        }
-
-
-    } else if (E->Info & OF_XFR) {
-
-        /* Determine source and target of the transfer and handle the TSX insn */
-        LoadRegInfo* Src;
-        LoadRegInfo* Tgt;
-        switch (E->OPC) {
-            case OP65_TAX:      Src = &LI->A; Tgt = &LI->X; break;
-            case OP65_TAY:      Src = &LI->A; Tgt = &LI->Y; break;
-            case OP65_TXA:      Src = &LI->X; Tgt = &LI->A; break;
-            case OP65_TYA:      Src = &LI->Y; Tgt = &LI->A; break;
-            case OP65_TSX:      ClearLoadRegInfo (&LI->X);  return;
-            case OP65_TXS:                                  return;
-            default:            Internal ("Unknown XFR insn in TrackLoads");
-        }
-
-        /* If we had a load or xfer op before, this is a duplicate load which
-        ** can cause problems if it encountered between the pushax and the op,
-        ** so remember it.
-        */
-        if (Tgt->LoadIndex >= 0 || Tgt->XferIndex >= 0) {
-            Tgt->Flags |= LI_DUP_LOAD;
-        }
-
-        /* Transfer the data */
-        Tgt->LoadIndex  = Src->LoadIndex;
-        Tgt->XferIndex  = I;
-        Tgt->Offs       = Src->Offs;
-        Tgt->Flags     &= ~(LI_DIRECT | LI_RELOAD_Y);
-        Tgt->Flags     |= Src->Flags & (LI_DIRECT | LI_RELOAD_Y);
-
-    } else if (CE_IsCallTo (E, "ldaxysp") && RegValIsKnown (E->RI->In.RegY)) {
-
-        /* If we had a load or xfer op before, this is a duplicate load which
-        ** can cause problems if it encountered between the pushax and the op,
-        ** so remember it for both registers involved.
-        */
-        if (LI->A.LoadIndex >= 0 || LI->A.XferIndex >= 0) {
-            LI->A.Flags |= LI_DUP_LOAD;
-        }
-        if (LI->X.LoadIndex >= 0 || LI->X.XferIndex >= 0) {
-            LI->X.Flags |= LI_DUP_LOAD;
-        }
-
-        /* Both registers set, Y changed */
-        LI->A.LoadIndex = I;
-        LI->A.XferIndex = -1;
-        LI->A.Flags    |= (LI_DIRECT | LI_RELOAD_Y);
-        LI->A.Offs      = (unsigned char) E->RI->In.RegY - 1;
-
-        LI->X.LoadIndex = I;
-        LI->X.XferIndex = -1;
-        LI->X.Flags    |= (LI_DIRECT | LI_RELOAD_Y);
-        LI->X.Offs      = (unsigned char) E->RI->In.RegY;
-
-        ClearLoadRegInfo (&LI->Y);
-    } else {
-        HonourUseAndChg (&LI->A, REG_A, E);
-        HonourUseAndChg (&LI->X, REG_X, E);
-        HonourUseAndChg (&LI->Y, REG_Y, E);
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                  Helpers                                  */
-/*****************************************************************************/
-
-
-
-static void InsertEntry (StackOpData* D, CodeEntry* E, int Index)
-/* Insert a new entry. Depending on Index, D->PushIndex and D->OpIndex will
-** be adjusted by this function.
-*/
-{
-    /* Insert the entry into the code segment */
-    CS_InsertEntry (D->Code, E, Index);
-
-    /* Adjust register loads if necessary */
-    AdjustLoadInfo (&D->Lhs, Index, 1);
-    AdjustLoadInfo (&D->Rhs, Index, 1);
-
-    /* Adjust the indices if necessary */
-    if (D->PushEntry && Index <= D->PushIndex) {
-        ++D->PushIndex;
-    }
-    if (D->OpEntry && Index <= D->OpIndex) {
-        ++D->OpIndex;
-    }
-}
-
-
-
-static void DelEntry (StackOpData* D, int Index)
-/* Delete an entry. Depending on Index, D->PushIndex and D->OpIndex will be
-** adjusted by this function, and PushEntry/OpEntry may get invalidated.
-*/
-{
-    /* Delete the entry from the code segment */
-    CS_DelEntry (D->Code, Index);
-
-    /* Adjust register loads if necessary */
-    AdjustLoadInfo (&D->Lhs, Index, -1);
-    AdjustLoadInfo (&D->Rhs, Index, -1);
-
-    /* Adjust the other indices if necessary */
-    if (Index < D->PushIndex) {
-        --D->PushIndex;
-    } else if (Index == D->PushIndex) {
-        D->PushEntry = 0;
-    }
-    if (Index < D->OpIndex) {
-        --D->OpIndex;
-    } else if (Index == D->OpIndex) {
-        D->OpEntry = 0;
-    }
-}
-
-
-
-static void AdjustStackOffset (StackOpData* D, unsigned Offs)
-/* Adjust the offset for all stack accesses in the range PushIndex to OpIndex.
-** OpIndex is adjusted according to the insertions.
-*/
-{
-    /* Walk over all entries */
-    int I = D->PushIndex + 1;
-    while (I < D->OpIndex) {
-
-        CodeEntry* E = CS_GetEntry (D->Code, I);
-
-        int NeedCorrection = 0;
-        if ((E->Use & REG_SP) != 0) {
-
-            /* Check for some things that should not happen */
-            CHECK (E->AM == AM65_ZP_INDY || E->RI->In.RegY >= (short) Offs);
-            CHECK (strcmp (E->Arg, "sp") == 0);
-
-            /* We need to correct this one */
-            NeedCorrection = 1;
-
-        } else if (CE_IsCallTo (E, "ldaxysp")) {
-
-            /* We need to correct this one */
-            NeedCorrection = 1;
-
-        }
-
-        if (NeedCorrection) {
-
-            /* Get the code entry before this one. If it's a LDY, adjust the
-            ** value.
-            */
-            CodeEntry* P = CS_GetPrevEntry (D->Code, I);
-            if (P && P->OPC == OP65_LDY && CE_IsConstImm (P)) {
-
-                /* The Y load is just before the stack access, adjust it */
-                CE_SetNumArg (P, P->Num - Offs);
-
-            } else {
-
-                /* Insert a new load instruction before the stack access */
-                const char* Arg = MakeHexArg (E->RI->In.RegY - Offs);
-                CodeEntry* X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
-                InsertEntry (D, X, I++);
-
-            }
-
-            /* If we need the value of Y later, be sure to reload it */
-            if (RegYUsed (D->Code, I+1)) {
-                const char* Arg = MakeHexArg (E->RI->In.RegY);
-                CodeEntry* X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
-                InsertEntry (D, X, I+1);
-
-                /* Skip this instruction in the next round */
-                ++I;
-            }
-        }
-
-        /* Next entry */
-        ++I;
-    }
-
-    /* If we have rhs load insns that load from stack, we'll have to adjust
-    ** the offsets for these also.
-    */
-    if (D->Rhs.A.Flags & LI_RELOAD_Y) {
-        D->Rhs.A.Offs -= Offs;
-    }
-    if (D->Rhs.X.Flags & LI_RELOAD_Y) {
-        D->Rhs.X.Offs -= Offs;
-    }
-}
-
-
-
-static void AddStoreA (StackOpData* D)
-/* Add a store to zero page after the push insn */
-{
-    CodeEntry* X = NewCodeEntry (OP65_STA, AM65_ZP, D->ZPLo, 0, D->PushEntry->LI);
-    InsertEntry (D, X, D->PushIndex+1);
-}
-
-
-
-static void AddStoreX (StackOpData* D)
-/* Add a store to zero page after the push insn */
-{
-    CodeEntry* X = NewCodeEntry (OP65_STX, AM65_ZP, D->ZPHi, 0, D->PushEntry->LI);
-    InsertEntry (D, X, D->PushIndex+1);
-}
-
-
-
-static void ReplacePushByStore (StackOpData* D)
-/* Replace the call to the push subroutine by a store into the zero page
-** location (actually, the push is not replaced, because we need it for
-** later, but the name is still ok since the push will get removed at the
-** end of each routine).
-*/
-{
-    /* Store the value into the zeropage instead of pushing it. Check high
-    ** byte first so that the store is later in A/X order.
-    */
-    if ((D->Lhs.X.Flags & LI_DIRECT) == 0) {
-        AddStoreX (D);
-    }
-    if ((D->Lhs.A.Flags & LI_DIRECT) == 0) {
-        AddStoreA (D);
-    }
-}
-
-
-
-static void AddOpLow (StackOpData* D, opc_t OPC, LoadInfo* LI)
-/* Add an op for the low byte of an operator. This function honours the
-** OP_DIRECT and OP_RELOAD_Y flags and generates the necessary instructions.
-** All code is inserted at the current insertion point.
-*/
-{
-    CodeEntry* X;
-
-    if ((LI->A.Flags & LI_DIRECT) != 0) {
-        /* Op with a variable location. If the location is on the stack, we
-        ** need to reload the Y register.
-        */
-        if ((LI->A.Flags & LI_RELOAD_Y) == 0) {
-
-            /* opc ... */
-            CodeEntry* LoadA = LI->A.LoadEntry;
-            X = NewCodeEntry (OPC, LoadA->AM, LoadA->Arg, 0, D->OpEntry->LI);
-            InsertEntry (D, X, D->IP++);
-
-        } else {
-
-            /* ldy #offs */
-            const char* Arg = MakeHexArg (LI->A.Offs);
-            X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, D->OpEntry->LI);
-            InsertEntry (D, X, D->IP++);
-
-            /* opc (sp),y */
-            X = NewCodeEntry (OPC, AM65_ZP_INDY, "sp", 0, D->OpEntry->LI);
-            InsertEntry (D, X, D->IP++);
-
-        }
-
-        /* In both cases, we can remove the load */
-        LI->A.Flags |= LI_REMOVE;
-
-    } else {
-
-        /* Op with temp storage */
-        X = NewCodeEntry (OPC, AM65_ZP, D->ZPLo, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-
-    }
-}
-
-
-
-static void AddOpHigh (StackOpData* D, opc_t OPC, LoadInfo* LI, int KeepResult)
-/* Add an op for the high byte of an operator. Special cases (constant values
-** or similar) have to be checked separately, the function covers only the
-** generic case. Code is inserted at the insertion point.
-*/
-{
-    CodeEntry* X;
-
-    if (KeepResult) {
-        /* pha */
-        X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-    }
-
-    /* txa */
-    X = NewCodeEntry (OP65_TXA, AM65_IMP, 0, 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    if ((LI->X.Flags & LI_DIRECT) != 0) {
-
-        if ((LI->X.Flags & LI_RELOAD_Y) == 0) {
-
-            /* opc xxx */
-            CodeEntry* LoadX = LI->X.LoadEntry;
-            X = NewCodeEntry (OPC, LoadX->AM, LoadX->Arg, 0, D->OpEntry->LI);
-            InsertEntry (D, X, D->IP++);
-
-        } else {
-
-            /* ldy #const */
-            const char* Arg = MakeHexArg (LI->X.Offs);
-            X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, D->OpEntry->LI);
-            InsertEntry (D, X, D->IP++);
-
-            /* opc (sp),y */
-            X = NewCodeEntry (OPC, AM65_ZP_INDY, "sp", 0, D->OpEntry->LI);
-            InsertEntry (D, X, D->IP++);
-        }
-
-        /* In both cases, we can remove the load */
-        LI->X.Flags |= LI_REMOVE;
-
-    } else {
-        /* opc zphi */
-        X = NewCodeEntry (OPC, AM65_ZP, D->ZPHi, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-    }
-
-    if (KeepResult) {
-        /* tax */
-        X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-
-        /* pla */
-        X = NewCodeEntry (OP65_PLA, AM65_IMP, 0, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-    }
-}
-
-
-
-static void RemoveRegLoads (StackOpData* D, LoadInfo* LI)
-/* Remove register load insns */
-{
-    /* Both registers may be loaded with one insn, but DelEntry will in this
-    ** case clear the other one.
-    */
-    if ((LI->A.Flags & (LI_REMOVE | LI_DONT_REMOVE)) == LI_REMOVE) {
-        if (LI->A.LoadIndex >= 0) {
-            DelEntry (D, LI->A.LoadIndex);
-        }
-        if (LI->A.XferIndex >= 0) {
-            DelEntry (D, LI->A.XferIndex);
-        }
-    }
-    if ((LI->X.Flags & (LI_REMOVE | LI_DONT_REMOVE)) == LI_REMOVE) {
-        if (LI->X.LoadIndex >= 0) {
-            DelEntry (D, LI->X.LoadIndex);
-        }
-        if (LI->X.XferIndex >= 0) {
-            DelEntry (D, LI->X.XferIndex);
-        }
-    }
-}
-
-
-
-static void RemoveRemainders (StackOpData* D)
-/* Remove the code that is unnecessary after translation of the sequence */
-{
-    /* Remove the register loads for lhs and rhs */
-    RemoveRegLoads (D, &D->Lhs);
-    RemoveRegLoads (D, &D->Rhs);
-
-    /* Remove the push and the operator routine */
-    DelEntry (D, D->OpIndex);
-    DelEntry (D, D->PushIndex);
-}
-
-
-
-static int IsRegVar (StackOpData* D)
-/* If the value pushed is that of a zeropage variable, replace ZPLo and ZPHi
-** in the given StackOpData struct by the variable and return true. Otherwise
-** leave D untouched and return false.
-*/
-{
-    CodeEntry*  LoadA = D->Lhs.A.LoadEntry;
-    CodeEntry*  LoadX = D->Lhs.X.LoadEntry;
-    unsigned    Len;
-
-    /* Must have both load insns */
-    if (LoadA == 0 || LoadX == 0) {
-        return 0;
-    }
-
-    /* Must be loads from zp */
-    if (LoadA->AM != AM65_ZP || LoadX->AM != AM65_ZP) {
-        return 0;
-    }
-
-    /* Must be the same zp loc with high byte in X */
-    Len = strlen (LoadA->Arg);
-    if (strncmp (LoadA->Arg, LoadX->Arg, Len) != 0      ||
-        strcmp (LoadX->Arg + Len, "+1") != 0) {
-        return 0;
-    }
-
-    /* Use the zero page location directly */
-    D->ZPLo = LoadA->Arg;
-    D->ZPHi = LoadX->Arg;
-    return 1;
-}
-
-
-
-/*****************************************************************************/
-/*                       Actual optimization functions                       */
-/*****************************************************************************/
-
-
-
-static unsigned Opt_toseqax_tosneax (StackOpData* D, const char* BoolTransformer)
-/* Optimize the toseqax and tosneax sequences. */
-{
-    CodeEntry*  X;
-    CodeLabel* L;
-
-    /* Create a call to the boolean transformer function and a label for this
-    ** insn. This is needed for all variants. Other insns are inserted *before*
-    ** the call.
-    */
-    X = NewCodeEntry (OP65_JSR, AM65_ABS, BoolTransformer, 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->OpIndex + 1);
-    L = CS_GenLabel (D->Code, X);
-
-    /* If the lhs is direct (but not stack relative), encode compares with lhs
-    ** effectively reverting the order (which doesn't matter for ==).
-    */
-    if ((D->Lhs.A.Flags & (LI_DIRECT | LI_RELOAD_Y)) == LI_DIRECT &&
-        (D->Lhs.X.Flags & (LI_DIRECT | LI_RELOAD_Y)) == LI_DIRECT) {
-
-        CodeEntry* LoadX = D->Lhs.X.LoadEntry;
-        CodeEntry* LoadA = D->Lhs.A.LoadEntry;
-
-        D->IP = D->OpIndex+1;
-
-        /* cpx */
-        X = NewCodeEntry (OP65_CPX, LoadX->AM, LoadX->Arg, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-
-        /* bne L */
-        X = NewCodeEntry (OP65_BNE, AM65_BRA, L->Name, L, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-
-        /* cmp */
-        X = NewCodeEntry (OP65_CMP, LoadA->AM, LoadA->Arg, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-
-        /* Lhs load entries can be removed */
-        D->Lhs.X.Flags |= LI_REMOVE;
-        D->Lhs.A.Flags |= LI_REMOVE;
-
-    } else if ((D->Rhs.A.Flags & (LI_DIRECT | LI_RELOAD_Y)) == LI_DIRECT &&
-               (D->Rhs.X.Flags & (LI_DIRECT | LI_RELOAD_Y)) == LI_DIRECT) {
-
-        CodeEntry* LoadX = D->Rhs.X.LoadEntry;
-        CodeEntry* LoadA = D->Rhs.A.LoadEntry;
-
-        D->IP = D->OpIndex+1;
-
-        /* cpx */
-        X = NewCodeEntry (OP65_CPX, LoadX->AM, LoadX->Arg, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-
-        /* bne L */
-        X = NewCodeEntry (OP65_BNE, AM65_BRA, L->Name, L, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-
-        /* cmp */
-        X = NewCodeEntry (OP65_CMP, LoadA->AM, LoadA->Arg, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-
-        /* Rhs load entries can be removed */
-        D->Rhs.X.Flags |= LI_REMOVE;
-        D->Rhs.A.Flags |= LI_REMOVE;
-
-    } else if ((D->Rhs.A.Flags & LI_DIRECT) != 0 &&
-               (D->Rhs.X.Flags & LI_DIRECT) != 0) {
-
-        D->IP = D->OpIndex+1;
-
-        /* Add operand for low byte */
-        AddOpLow (D, OP65_CMP, &D->Rhs);
-
-        /* bne L */
-        X = NewCodeEntry (OP65_BNE, AM65_BRA, L->Name, L, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-
-        /* Add operand for high byte */
-        AddOpHigh (D, OP65_CMP, &D->Rhs, 0);
-
-    } else {
-
-        /* Save lhs into zeropage, then compare */
-        AddStoreX (D);
-        AddStoreA (D);
-
-        D->IP = D->OpIndex+1;
-
-        /* cpx */
-        X = NewCodeEntry (OP65_CPX, AM65_ZP, D->ZPHi, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-
-        /* bne L */
-        X = NewCodeEntry (OP65_BNE, AM65_BRA, L->Name, L, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-
-        /* cmp */
-        X = NewCodeEntry (OP65_CMP, AM65_ZP, D->ZPLo, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-
-    }
-
-    /* Remove the push and the call to the tosgeax function */
-    RemoveRemainders (D);
-
-    /* We changed the sequence */
-    return 1;
-}
-
-
-
-static unsigned Opt_tosshift (StackOpData* D, const char* Name)
-/* Optimize shift sequences. */
-{
-    CodeEntry*  X;
-
-    /* Store the value into the zeropage instead of pushing it */
-    ReplacePushByStore (D);
-
-    /* If the lhs is direct (but not stack relative), we can just reload the
-    ** data later.
-    */
-    if ((D->Lhs.A.Flags & (LI_DIRECT | LI_RELOAD_Y)) == LI_DIRECT &&
-        (D->Lhs.X.Flags & (LI_DIRECT | LI_RELOAD_Y)) == LI_DIRECT) {
-
-        CodeEntry* LoadX = D->Lhs.X.LoadEntry;
-        CodeEntry* LoadA = D->Lhs.A.LoadEntry;
-
-        /* Inline the shift */
-        D->IP = D->OpIndex+1;
-
-        /* tay */
-        X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-
-        /* lda */
-        X = NewCodeEntry (OP65_LDA, LoadA->AM, LoadA->Arg, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-
-        /* ldx */
-        X = NewCodeEntry (OP65_LDX, LoadX->AM, LoadX->Arg, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-
-        /* Lhs load entries can be removed */
-        D->Lhs.X.Flags |= LI_REMOVE;
-        D->Lhs.A.Flags |= LI_REMOVE;
-
-    } else {
-
-        /* Save lhs into zeropage and reload later */
-        AddStoreX (D);
-        AddStoreA (D);
-
-        /* Be sure to setup IP after adding the stores, otherwise it will get
-        ** messed up.
-        */
-        D->IP = D->OpIndex+1;
-
-        /* tay */
-        X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-
-        /* lda zp */
-        X = NewCodeEntry (OP65_LDA, AM65_ZP, D->ZPLo, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-
-        /* ldx zp+1 */
-        X = NewCodeEntry (OP65_LDX, AM65_ZP, D->ZPHi, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-
-    }
-
-    /* jsr shlaxy/aslaxy/whatever */
-    X = NewCodeEntry (OP65_JSR, AM65_ABS, Name, 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* Remove the push and the call to the shift function */
-    RemoveRemainders (D);
-
-    /* We changed the sequence */
-    return 1;
-}
-
-
-
-static unsigned Opt___bzero (StackOpData* D)
-/* Optimize the __bzero sequence */
-{
-    CodeEntry*  X;
-    const char* Arg;
-    CodeLabel*  L;
-
-    /* Check if we're using a register variable */
-    if (!IsRegVar (D)) {
-        /* Store the value into the zeropage instead of pushing it */
-        AddStoreX (D);
-        AddStoreA (D);
-    }
-
-    /* If the return value of __bzero is used, we have to add code to reload
-    ** a/x from the pointer variable.
-    */
-    if (RegAXUsed (D->Code, D->OpIndex+1)) {
-        X = NewCodeEntry (OP65_LDA, AM65_ZP, D->ZPLo, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->OpIndex+1);
-        X = NewCodeEntry (OP65_LDX, AM65_ZP, D->ZPHi, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->OpIndex+2);
-    }
-
-    /* X is always zero, A contains the size of the data area to zero.
-    ** Note: A may be zero, in which case the operation is null op.
-    */
-    if (D->OpEntry->RI->In.RegA != 0) {
-
-        /* lda #$00 */
-        X = NewCodeEntry (OP65_LDA, AM65_IMM, "$00", 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->OpIndex+1);
-
-        /* The value of A is known */
-        if (D->OpEntry->RI->In.RegA <= 0x81) {
-
-            /* Loop using the sign bit */
-
-            /* ldy #count-1 */
-            Arg = MakeHexArg (D->OpEntry->RI->In.RegA - 1);
-            X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, D->OpEntry->LI);
-            InsertEntry (D, X, D->OpIndex+2);
-
-            /* L: sta (zp),y */
-            X = NewCodeEntry (OP65_STA, AM65_ZP_INDY, D->ZPLo, 0, D->OpEntry->LI);
-            InsertEntry (D, X, D->OpIndex+3);
-            L = CS_GenLabel (D->Code, X);
-
-            /* dey */
-            X = NewCodeEntry (OP65_DEY, AM65_IMP, 0, 0, D->OpEntry->LI);
-            InsertEntry (D, X, D->OpIndex+4);
-
-            /* bpl L */
-            X = NewCodeEntry (OP65_BPL, AM65_BRA, L->Name, L, D->OpEntry->LI);
-            InsertEntry (D, X, D->OpIndex+5);
-
-        } else {
-
-            /* Loop using an explicit compare */
-
-            /* ldy #$00 */
-            X = NewCodeEntry (OP65_LDY, AM65_IMM, "$00", 0, D->OpEntry->LI);
-            InsertEntry (D, X, D->OpIndex+2);
-
-            /* L: sta (zp),y */
-            X = NewCodeEntry (OP65_STA, AM65_ZP_INDY, D->ZPLo, 0, D->OpEntry->LI);
-            InsertEntry (D, X, D->OpIndex+3);
-            L = CS_GenLabel (D->Code, X);
-
-            /* iny */
-            X = NewCodeEntry (OP65_INY, AM65_IMP, 0, 0, D->OpEntry->LI);
-            InsertEntry (D, X, D->OpIndex+4);
-
-            /* cpy #count */
-            Arg = MakeHexArg (D->OpEntry->RI->In.RegA);
-            X = NewCodeEntry (OP65_CPY, AM65_IMM, Arg, 0, D->OpEntry->LI);
-            InsertEntry (D, X, D->OpIndex+5);
-
-            /* bne L */
-            X = NewCodeEntry (OP65_BNE, AM65_BRA, L->Name, L, D->OpEntry->LI);
-            InsertEntry (D, X, D->OpIndex+6);
-        }
-
-    }
-
-    /* Remove the push and the call to the __bzero function */
-    RemoveRemainders (D);
-
-    /* We changed the sequence */
-    return 1;
-}
-
-
-
-static unsigned Opt_staspidx (StackOpData* D)
-/* Optimize the staspidx sequence */
-{
-    CodeEntry* X;
-
-    /* Check if we're using a register variable */
-    if (!IsRegVar (D)) {
-        /* Store the value into the zeropage instead of pushing it */
-        AddStoreX (D);
-        AddStoreA (D);
-    }
-
-    /* Replace the store subroutine call by a direct op */
-    X = NewCodeEntry (OP65_STA, AM65_ZP_INDY, D->ZPLo, 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->OpIndex+1);
-
-    /* Remove the push and the call to the staspidx function */
-    RemoveRemainders (D);
-
-    /* We changed the sequence */
-    return 1;
-}
-
-
-
-static unsigned Opt_staxspidx (StackOpData* D)
-/* Optimize the staxspidx sequence */
-{
-    CodeEntry* X;
-
-    /* Check if we're using a register variable */
-    if (!IsRegVar (D)) {
-        /* Store the value into the zeropage instead of pushing it */
-        AddStoreX (D);
-        AddStoreA (D);
-    }
-
-    /* Inline the store */
-
-    /* sta (zp),y */
-    X = NewCodeEntry (OP65_STA, AM65_ZP_INDY, D->ZPLo, 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->OpIndex+1);
-
-    if (RegValIsKnown (D->OpEntry->RI->In.RegY)) {
-        /* Value of Y is known */
-        const char* Arg = MakeHexArg (D->OpEntry->RI->In.RegY + 1);
-        X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, D->OpEntry->LI);
-    } else {
-        X = NewCodeEntry (OP65_INY, AM65_IMP, 0, 0, D->OpEntry->LI);
-    }
-    InsertEntry (D, X, D->OpIndex+2);
-
-    if (RegValIsKnown (D->OpEntry->RI->In.RegX)) {
-        /* Value of X is known */
-        const char* Arg = MakeHexArg (D->OpEntry->RI->In.RegX);
-        X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, D->OpEntry->LI);
-    } else {
-        /* Value unknown */
-        X = NewCodeEntry (OP65_TXA, AM65_IMP, 0, 0, D->OpEntry->LI);
-    }
-    InsertEntry (D, X, D->OpIndex+3);
-
-    /* sta (zp),y */
-    X = NewCodeEntry (OP65_STA, AM65_ZP_INDY, D->ZPLo, 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->OpIndex+4);
-
-    /* If we remove staxspidx, we must restore the Y register to what the
-    ** function would return.
-    */
-    X = NewCodeEntry (OP65_LDY, AM65_IMM, "$00", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->OpIndex+5);
-
-    /* Remove the push and the call to the staxspidx function */
-    RemoveRemainders (D);
-
-    /* We changed the sequence */
-    return 1;
-}
-
-
-
-static unsigned Opt_tosaddax (StackOpData* D)
-/* Optimize the tosaddax sequence */
-{
-    CodeEntry*  X;
-    CodeEntry*  N;
-
-    /* We need the entry behind the add */
-    CHECK (D->NextEntry != 0);
-
-    /* Check if the X register is known and zero when the add is done, and
-    ** if the add is followed by
-    **
-    **  ldy     #$00
-    **  jsr     ldauidx         ; or ldaidx
-    **
-    ** If this is true, the addition does actually add an offset to a pointer
-    ** before it is dereferenced. Since both subroutines take an offset in Y,
-    ** we can pass the offset (instead of #$00) and remove the addition
-    ** alltogether.
-    */
-    if (D->OpEntry->RI->In.RegX == 0                            &&
-        D->NextEntry->OPC == OP65_LDY                           &&
-        CE_IsKnownImm (D->NextEntry, 0)                         &&
-        !CE_HasLabel (D->NextEntry)                             &&
-        (N = CS_GetNextEntry (D->Code, D->OpIndex + 1)) != 0    &&
-        (CE_IsCallTo (N, "ldauidx")                     ||
-         CE_IsCallTo (N, "ldaidx"))) {
-
-        int Signed = (strcmp (N->Arg, "ldaidx") == 0);
-
-        /* Store the value into the zeropage instead of pushing it */
-        AddStoreX (D);
-        AddStoreA (D);
-
-        /* Replace the ldy by a tay. Be sure to create the new entry before
-        ** deleting the ldy, since we will reference the line info from this
-        ** insn.
-        */
-        X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, D->NextEntry->LI);
-        DelEntry (D, D->OpIndex + 1);
-        InsertEntry (D, X, D->OpIndex + 1);
-
-        /* Replace the call to ldaidx/ldauidx. Since X is already zero, and
-        ** the ptr is in the zero page location, we just need to load from
-        ** the pointer, and fix X in case of ldaidx.
-        */
-        X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, D->ZPLo, 0, N->LI);
-        DelEntry (D, D->OpIndex + 2);
-        InsertEntry (D, X, D->OpIndex + 2);
-        if (Signed) {
-
-            CodeLabel* L;
-
-            /* Add sign extension - N is unused now */
-            N = CS_GetNextEntry (D->Code, D->OpIndex + 2);
-            CHECK (N != 0);
-            L = CS_GenLabel (D->Code, N);
-
-            X = NewCodeEntry (OP65_BPL, AM65_BRA, L->Name, L, X->LI);
-            InsertEntry (D, X, D->OpIndex + 3);
-
-            X = NewCodeEntry (OP65_DEX, AM65_IMP, 0, 0, X->LI);
-            InsertEntry (D, X, D->OpIndex + 4);
-        }
-
-    } else {
-
-        /* Store the value into the zeropage instead of pushing it */
-        ReplacePushByStore (D);
-
-        /* Inline the add */
-        D->IP = D->OpIndex+1;
-
-        /* clc */
-        X = NewCodeEntry (OP65_CLC, AM65_IMP, 0, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-
-        /* Low byte */
-        AddOpLow (D, OP65_ADC, &D->Lhs);
-
-        /* High byte */
-        if (D->PushEntry->RI->In.RegX == 0) {
-
-            /* The high byte is the value in X plus the carry */
-            CodeLabel* L = CS_GenLabel (D->Code, D->NextEntry);
-
-            /* bcc L */
-            X = NewCodeEntry (OP65_BCC, AM65_BRA, L->Name, L, D->OpEntry->LI);
-            InsertEntry (D, X, D->IP++);
-
-            /* inx */
-            X = NewCodeEntry (OP65_INX, AM65_IMP, 0, 0, D->OpEntry->LI);
-            InsertEntry (D, X, D->IP++);
-
-        } else if (D->OpEntry->RI->In.RegX == 0                         &&
-                   (RegValIsKnown (D->PushEntry->RI->In.RegX)   ||
-                    (D->Lhs.X.Flags & LI_RELOAD_Y) == 0)) {
-
-            /* The high byte is that of the first operand plus carry */
-            CodeLabel* L;
-            if (RegValIsKnown (D->PushEntry->RI->In.RegX)) {
-                /* Value of first op high byte is known */
-                const char* Arg = MakeHexArg (D->PushEntry->RI->In.RegX);
-                X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, D->OpEntry->LI);
-            } else {
-                /* Value of first op high byte is unknown. Load from ZP or
-                ** original storage.
-                */
-                if (D->Lhs.X.Flags & LI_DIRECT) {
-                    CodeEntry* LoadX = D->Lhs.X.LoadEntry;
-                    X = NewCodeEntry (OP65_LDX, LoadX->AM, LoadX->Arg, 0, D->OpEntry->LI);
-                } else {
-                    X = NewCodeEntry (OP65_LDX, AM65_ZP, D->ZPHi, 0, D->OpEntry->LI);
-                }
-            }
-            InsertEntry (D, X, D->IP++);
-
-            /* bcc label */
-            L = CS_GenLabel (D->Code, D->NextEntry);
-            X = NewCodeEntry (OP65_BCC, AM65_BRA, L->Name, L, D->OpEntry->LI);
-            InsertEntry (D, X, D->IP++);
-
-            /* inx */
-            X = NewCodeEntry (OP65_INX, AM65_IMP, 0, 0, D->OpEntry->LI);
-            InsertEntry (D, X, D->IP++);
-        } else {
-            /* High byte is unknown */
-            AddOpHigh (D, OP65_ADC, &D->Lhs, 1);
-        }
-    }
-
-    /* Remove the push and the call to the tosaddax function */
-    RemoveRemainders (D);
-
-    /* We changed the sequence */
-    return 1;
-}
-
-
-
-static unsigned Opt_tosandax (StackOpData* D)
-/* Optimize the tosandax sequence */
-{
-    /* Store the value into the zeropage instead of pushing it */
-    ReplacePushByStore (D);
-
-    /* Inline the and, low byte */
-    D->IP = D->OpIndex + 1;
-    AddOpLow (D, OP65_AND, &D->Lhs);
-
-    /* High byte */
-    AddOpHigh (D, OP65_AND, &D->Lhs, 1);
-
-    /* Remove the push and the call to the tosandax function */
-    RemoveRemainders (D);
-
-    /* We changed the sequence */
-    return 1;
-}
-
-
-
-static unsigned Opt_tosaslax (StackOpData* D)
-/* Optimize the tosaslax sequence */
-{
-    return Opt_tosshift (D, "aslaxy");
-}
-
-
-
-static unsigned Opt_tosasrax (StackOpData* D)
-/* Optimize the tosasrax sequence */
-{
-    return Opt_tosshift (D, "asraxy");
-}
-
-
-
-static unsigned Opt_toseqax (StackOpData* D)
-/* Optimize the toseqax sequence */
-{
-    return Opt_toseqax_tosneax (D, "booleq");
-}
-
-
-
-static unsigned Opt_tosgeax (StackOpData* D)
-/* Optimize the tosgeax sequence */
-{
-    CodeEntry*  X;
-    CodeLabel* L;
-
-    /* Inline the sbc */
-    D->IP = D->OpIndex+1;
-
-    /* Must be true because of OP_RHS_LOAD */
-    CHECK ((D->Rhs.A.Flags & D->Rhs.X.Flags & LI_DIRECT) != 0);
-
-    /* Add code for low operand */
-    AddOpLow (D, OP65_CMP, &D->Rhs);
-
-    /* Add code for high operand */
-    AddOpHigh (D, OP65_SBC, &D->Rhs, 0);
-
-    /* eor #$80 */
-    X = NewCodeEntry (OP65_EOR, AM65_IMM, "$80", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* asl a */
-    X = NewCodeEntry (OP65_ASL, AM65_ACC, "a", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-    L = CS_GenLabel (D->Code, X);
-
-    /* Insert a bvs L before the eor insn */
-    X = NewCodeEntry (OP65_BVS, AM65_BRA, L->Name, L, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP - 2);
-    ++D->IP;
-
-    /* lda #$00 */
-    X = NewCodeEntry (OP65_LDA, AM65_IMM, "$00", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* ldx #$00 */
-    X = NewCodeEntry (OP65_LDX, AM65_IMM, "$00", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* rol a */
-    X = NewCodeEntry (OP65_ROL, AM65_ACC, "a", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* Remove the push and the call to the tosgeax function */
-    RemoveRemainders (D);
-
-    /* We changed the sequence */
-    return 1;
-}
-
-
-
-static unsigned Opt_tosltax (StackOpData* D)
-/* Optimize the tosltax sequence */
-{
-    CodeEntry*  X;
-    CodeLabel* L;
-
-
-    /* Inline the compare */
-    D->IP = D->OpIndex+1;
-
-    /* Must be true because of OP_RHS_LOAD */
-    CHECK ((D->Rhs.A.Flags & D->Rhs.X.Flags & LI_DIRECT) != 0);
-
-    /* Add code for low operand */
-    AddOpLow (D, OP65_CMP, &D->Rhs);
-
-    /* Add code for high operand */
-    AddOpHigh (D, OP65_SBC, &D->Rhs, 0);
-
-    /* eor #$80 */
-    X = NewCodeEntry (OP65_EOR, AM65_IMM, "$80", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* asl a */
-    X = NewCodeEntry (OP65_ASL, AM65_ACC, "a", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-    L = CS_GenLabel (D->Code, X);
-
-    /* Insert a bvc L before the eor insn */
-    X = NewCodeEntry (OP65_BVC, AM65_BRA, L->Name, L, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP - 2);
-    ++D->IP;
-
-    /* lda #$00 */
-    X = NewCodeEntry (OP65_LDA, AM65_IMM, "$00", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* ldx #$00 */
-    X = NewCodeEntry (OP65_LDX, AM65_IMM, "$00", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* rol a */
-    X = NewCodeEntry (OP65_ROL, AM65_ACC, "a", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* Remove the push and the call to the tosltax function */
-    RemoveRemainders (D);
-
-    /* We changed the sequence */
-    return 1;
-}
-
-
-
-static unsigned Opt_tosneax (StackOpData* D)
-/* Optimize the tosneax sequence */
-{
-    return Opt_toseqax_tosneax (D, "boolne");
-}
-
-
-
-static unsigned Opt_tosorax (StackOpData* D)
-/* Optimize the tosorax sequence */
-{
-    /* Store the value into the zeropage instead of pushing it */
-    ReplacePushByStore (D);
-
-    /* Inline the or, low byte */
-    D->IP = D->OpIndex + 1;
-    AddOpLow (D, OP65_ORA, &D->Lhs);
-
-    /* High byte */
-    AddOpHigh (D, OP65_ORA, &D->Lhs, 1);
-
-    /* Remove the push and the call to the tosorax function */
-    RemoveRemainders (D);
-
-    /* We changed the sequence */
-    return 1;
-}
-
-
-
-static unsigned Opt_tosshlax (StackOpData* D)
-/* Optimize the tosshlax sequence */
-{
-    return Opt_tosshift (D, "shlaxy");
-}
-
-
-
-static unsigned Opt_tosshrax (StackOpData* D)
-/* Optimize the tosshrax sequence */
-{
-    return Opt_tosshift (D, "shraxy");
-}
-
-
-
-static unsigned Opt_tossubax (StackOpData* D)
-/* Optimize the tossubax sequence. Note: subtraction is not commutative! */
-{
-    CodeEntry*  X;
-
-
-    /* Inline the sbc */
-    D->IP = D->OpIndex+1;
-
-    /* sec */
-    X = NewCodeEntry (OP65_SEC, AM65_IMP, 0, 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* Must be true because of OP_RHS_LOAD */
-    CHECK ((D->Rhs.A.Flags & D->Rhs.X.Flags & LI_DIRECT) != 0);
-
-    /* Add code for low operand */
-    AddOpLow (D, OP65_SBC, &D->Rhs);
-
-    /* Add code for high operand */
-    AddOpHigh (D, OP65_SBC, &D->Rhs, 1);
-
-    /* Remove the push and the call to the tossubax function */
-    RemoveRemainders (D);
-
-    /* We changed the sequence */
-    return 1;
-}
-
-
-
-static unsigned Opt_tosugeax (StackOpData* D)
-/* Optimize the tosugeax sequence */
-{
-    CodeEntry*  X;
-
-
-    /* Inline the sbc */
-    D->IP = D->OpIndex+1;
-
-    /* Must be true because of OP_RHS_LOAD */
-    CHECK ((D->Rhs.A.Flags & D->Rhs.X.Flags & LI_DIRECT) != 0);
-
-    /* Add code for low operand */
-    AddOpLow (D, OP65_CMP, &D->Rhs);
-
-    /* Add code for high operand */
-    AddOpHigh (D, OP65_SBC, &D->Rhs, 0);
-
-    /* lda #$00 */
-    X = NewCodeEntry (OP65_LDA, AM65_IMM, "$00", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* ldx #$00 */
-    X = NewCodeEntry (OP65_LDX, AM65_IMM, "$00", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* rol a */
-    X = NewCodeEntry (OP65_ROL, AM65_ACC, "a", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* Remove the push and the call to the tosugeax function */
-    RemoveRemainders (D);
-
-    /* We changed the sequence */
-    return 1;
-}
-
-
-
-static unsigned Opt_tosugtax (StackOpData* D)
-/* Optimize the tosugtax sequence */
-{
-    CodeEntry*  X;
-
-
-    /* Inline the sbc */
-    D->IP = D->OpIndex+1;
-
-    /* Must be true because of OP_RHS_LOAD */
-    CHECK ((D->Rhs.A.Flags & D->Rhs.X.Flags & LI_DIRECT) != 0);
-
-    /* sec */
-    X = NewCodeEntry (OP65_SEC, AM65_IMP, 0, 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* Add code for low operand */
-    AddOpLow (D, OP65_SBC, &D->Rhs);
-
-    /* We need the zero flag, so remember the immediate result */
-    X = NewCodeEntry (OP65_STA, AM65_ZP, "tmp1", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* Add code for high operand */
-    AddOpHigh (D, OP65_SBC, &D->Rhs, 0);
-
-    /* Set Z flag */
-    X = NewCodeEntry (OP65_ORA, AM65_ZP, "tmp1", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* Transform to boolean */
-    X = NewCodeEntry (OP65_JSR, AM65_ABS, "boolugt", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* Remove the push and the call to the operator function */
-    RemoveRemainders (D);
-
-    /* We changed the sequence */
-    return 1;
-}
-
-
-
-static unsigned Opt_tosuleax (StackOpData* D)
-/* Optimize the tosuleax sequence */
-{
-    CodeEntry*  X;
-
-
-    /* Inline the sbc */
-    D->IP = D->OpIndex+1;
-
-    /* Must be true because of OP_RHS_LOAD */
-    CHECK ((D->Rhs.A.Flags & D->Rhs.X.Flags & LI_DIRECT) != 0);
-
-    /* sec */
-    X = NewCodeEntry (OP65_SEC, AM65_IMP, 0, 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* Add code for low operand */
-    AddOpLow (D, OP65_SBC, &D->Rhs);
-
-    /* We need the zero flag, so remember the immediate result */
-    X = NewCodeEntry (OP65_STA, AM65_ZP, "tmp1", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* Add code for high operand */
-    AddOpHigh (D, OP65_SBC, &D->Rhs, 0);
-
-    /* Set Z flag */
-    X = NewCodeEntry (OP65_ORA, AM65_ZP, "tmp1", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* Transform to boolean */
-    X = NewCodeEntry (OP65_JSR, AM65_ABS, "boolule", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* Remove the push and the call to the operator function */
-    RemoveRemainders (D);
-
-    /* We changed the sequence */
-    return 1;
-}
-
-
-
-static unsigned Opt_tosultax (StackOpData* D)
-/* Optimize the tosultax sequence */
-{
-    CodeEntry*  X;
-
-
-    /* Inline the sbc */
-    D->IP = D->OpIndex+1;
-
-    /* Must be true because of OP_RHS_LOAD */
-    CHECK ((D->Rhs.A.Flags & D->Rhs.X.Flags & LI_DIRECT) != 0);
-
-    /* Add code for low operand */
-    AddOpLow (D, OP65_CMP, &D->Rhs);
-
-    /* Add code for high operand */
-    AddOpHigh (D, OP65_SBC, &D->Rhs, 0);
-
-    /* Transform to boolean */
-    X = NewCodeEntry (OP65_JSR, AM65_ABS, "boolult", 0, D->OpEntry->LI);
-    InsertEntry (D, X, D->IP++);
-
-    /* Remove the push and the call to the operator function */
-    RemoveRemainders (D);
-
-    /* We changed the sequence */
-    return 1;
-}
-
-
-
-static unsigned Opt_tosxorax (StackOpData* D)
-/* Optimize the tosxorax sequence */
-{
-    CodeEntry*  X;
-
-
-    /* Store the value into the zeropage instead of pushing it */
-    ReplacePushByStore (D);
-
-    /* Inline the xor, low byte */
-    D->IP = D->OpIndex + 1;
-    AddOpLow (D, OP65_EOR, &D->Lhs);
-
-    /* High byte */
-    if (RegValIsKnown (D->PushEntry->RI->In.RegX) &&
-        RegValIsKnown (D->OpEntry->RI->In.RegX)) {
-        /* Both values known, precalculate the result */
-        const char* Arg = MakeHexArg (D->PushEntry->RI->In.RegX ^ D->OpEntry->RI->In.RegX);
-        X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, D->OpEntry->LI);
-        InsertEntry (D, X, D->IP++);
-    } else if (D->PushEntry->RI->In.RegX != 0) {
-        /* High byte is unknown */
-        AddOpHigh (D, OP65_EOR, &D->Lhs, 1);
-    }
-
-    /* Remove the push and the call to the tosandax function */
-    RemoveRemainders (D);
-
-    /* We changed the sequence */
-    return 1;
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static const OptFuncDesc FuncTable[] = {
-    { "__bzero",    Opt___bzero,   REG_NONE, OP_X_ZERO | OP_A_KNOWN     },
-    { "staspidx",   Opt_staspidx,  REG_NONE, OP_NONE                    },
-    { "staxspidx",  Opt_staxspidx, REG_AX,   OP_NONE                    },
-    { "tosaddax",   Opt_tosaddax,  REG_NONE, OP_NONE                    },
-    { "tosandax",   Opt_tosandax,  REG_NONE, OP_NONE                    },
-    { "tosaslax",   Opt_tosaslax,  REG_NONE, OP_NONE                    },
-    { "tosasrax",   Opt_tosasrax,  REG_NONE, OP_NONE                    },
-    { "toseqax",    Opt_toseqax,   REG_NONE, OP_NONE                    },
-    { "tosgeax",    Opt_tosgeax,   REG_NONE, OP_RHS_LOAD_DIRECT         },
-    { "tosltax",    Opt_tosltax,   REG_NONE, OP_RHS_LOAD_DIRECT         },
-    { "tosneax",    Opt_tosneax,   REG_NONE, OP_NONE                    },
-    { "tosorax",    Opt_tosorax,   REG_NONE, OP_NONE                    },
-    { "tosshlax",   Opt_tosshlax,  REG_NONE, OP_NONE                    },
-    { "tosshrax",   Opt_tosshrax,  REG_NONE, OP_NONE                    },
-    { "tossubax",   Opt_tossubax,  REG_NONE, OP_RHS_LOAD_DIRECT         },
-    { "tosugeax",   Opt_tosugeax,  REG_NONE, OP_RHS_LOAD_DIRECT         },
-    { "tosugtax",   Opt_tosugtax,  REG_NONE, OP_RHS_LOAD_DIRECT         },
-    { "tosuleax",   Opt_tosuleax,  REG_NONE, OP_RHS_LOAD_DIRECT         },
-    { "tosultax",   Opt_tosultax,  REG_NONE, OP_RHS_LOAD_DIRECT         },
-    { "tosxorax",   Opt_tosxorax,  REG_NONE, OP_NONE                    },
-};
-#define FUNC_COUNT (sizeof(FuncTable) / sizeof(FuncTable[0]))
-
-
-
-static int CmpFunc (const void* Key, const void* Func)
-/* Compare function for bsearch */
-{
-    return strcmp (Key, ((const OptFuncDesc*) Func)->Name);
-}
-
-
-
-static const OptFuncDesc* FindFunc (const char* Name)
-/* Find the function with the given name. Return a pointer to the table entry
-** or NULL if the function was not found.
-*/
-{
-    return bsearch (Name, FuncTable, FUNC_COUNT, sizeof(OptFuncDesc), CmpFunc);
-}
-
-
-
-static int CmpHarmless (const void* Key, const void* Entry)
-/* Compare function for bsearch */
-{
-    return strcmp (Key, *(const char**)Entry);
-}
-
-
-
-static int HarmlessCall (const char* Name)
-/* Check if this is a call to a harmless subroutine that will not interrupt
-** the pushax/op sequence when encountered.
-*/
-{
-    static const char* Tab[] = {
-        "aslax1",
-        "aslax2",
-        "aslax3",
-        "aslax4",
-        "aslaxy",
-        "asrax1",
-        "asrax2",
-        "asrax3",
-        "asrax4",
-        "asraxy",
-        "bnegax",
-        "complax",
-        "decax1",
-        "decax2",
-        "decax3",
-        "decax4",
-        "decax5",
-        "decax6",
-        "decax7",
-        "decax8",
-        "decaxy",
-        "incax1",
-        "incax2",
-        "incax3",
-        "incax4",
-        "incax5",
-        "incax6",
-        "incax7",
-        "incax8",
-        "incaxy",
-        "ldaxidx",
-        "ldaxysp",
-        "negax",
-        "shlax1",
-        "shlax2",
-        "shlax3",
-        "shlax4",
-        "shlaxy",
-        "shrax1",
-        "shrax2",
-        "shrax3",
-        "shrax4",
-        "shraxy",
-    };
-
-    void* R = bsearch (Name,
-                       Tab,
-                       sizeof (Tab) / sizeof (Tab[0]),
-                       sizeof (Tab[0]),
-                       CmpHarmless);
-    return (R != 0);
-}
-
-
-
-static void ResetStackOpData (StackOpData* Data)
-/* Reset the given data structure */
-{
-    Data->OptFunc       = 0;
-    Data->UsedRegs      = REG_NONE;
-
-    ClearLoadInfo (&Data->Lhs);
-    ClearLoadInfo (&Data->Rhs);
-
-    Data->PushIndex     = -1;
-    Data->OpIndex       = -1;
-}
-
-
-
-static int PreCondOk (StackOpData* D)
-/* Check if the preconditions for a call to the optimizer subfunction are
-** satisfied. As a side effect, this function will also choose the zero page
-** register to use.
-*/
-{
-    /* Check the flags */
-    unsigned UnusedRegs = D->OptFunc->UnusedRegs;
-    if (UnusedRegs != REG_NONE &&
-        (GetRegInfo (D->Code, D->OpIndex+1, UnusedRegs) & UnusedRegs) != 0) {
-        /* Cannot optimize */
-        return 0;
-    }
-    if ((D->OptFunc->Flags & OP_A_KNOWN) != 0 &&
-        RegValIsUnknown (D->OpEntry->RI->In.RegA)) {
-        /* Cannot optimize */
-        return 0;
-    }
-    if ((D->OptFunc->Flags & OP_X_ZERO) != 0 &&
-        D->OpEntry->RI->In.RegX != 0) {
-        /* Cannot optimize */
-        return 0;
-    }
-    if ((D->OptFunc->Flags & OP_LHS_LOAD) != 0) {
-        if (D->Lhs.A.LoadIndex < 0 || D->Lhs.X.LoadIndex < 0) {
-            /* Cannot optimize */
-            return 0;
-        } else if ((D->OptFunc->Flags & OP_LHS_LOAD_DIRECT) != 0) {
-            if ((D->Lhs.A.Flags & D->Lhs.X.Flags & LI_DIRECT) == 0) {
-                /* Cannot optimize */
-                return 0;
-            }
-        }
-    }
-    if ((D->OptFunc->Flags & OP_RHS_LOAD) != 0) {
-        if (D->Rhs.A.LoadIndex < 0 || D->Rhs.X.LoadIndex < 0) {
-            /* Cannot optimize */
-            return 0;
-        } else if ((D->OptFunc->Flags & OP_RHS_LOAD_DIRECT) != 0) {
-            if ((D->Rhs.A.Flags & D->Rhs.X.Flags & LI_DIRECT) == 0) {
-                /* Cannot optimize */
-                return 0;
-            }
-        }
-    }
-    if ((D->Rhs.A.Flags | D->Rhs.X.Flags) & LI_DUP_LOAD) {
-        /* Cannot optimize */
-        return 0;
-    }
-
-    /* Determine the zero page locations to use */
-    if ((D->UsedRegs & REG_PTR1) == REG_NONE) {
-        D->ZPLo = "ptr1";
-        D->ZPHi = "ptr1+1";
-    } else if ((D->UsedRegs & REG_SREG) == REG_NONE) {
-        D->ZPLo = "sreg";
-        D->ZPHi = "sreg+1";
-    } else if ((D->UsedRegs & REG_PTR2) == REG_NONE) {
-        D->ZPLo = "ptr2";
-        D->ZPHi = "ptr2+1";
-    } else {
-        /* No registers available */
-        return 0;
-    }
-
-    /* Determine if we have a basic block */
-    return CS_IsBasicBlock (D->Code, D->PushIndex, D->OpIndex);
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned OptStackOps (CodeSeg* S)
-/* Optimize operations that take operands via the stack */
-{
-    unsigned            Changes = 0;    /* Number of changes in one run */
-    StackOpData         Data;
-    int                 I;
-    int                 OldEntryCount;  /* Old number of entries */
-    unsigned            UsedRegs = 0;   /* Registers used */
-    unsigned            ChangedRegs = 0;/* Registers changed */
-
-
-    enum {
-        Initialize,
-        Search,
-        FoundPush,
-        FoundOp
-    } State = Initialize;
-
-
-    /* Remember the code segment in the info struct */
-    Data.Code = S;
-
-    /* Look for a call to pushax followed by a call to some other function
-    ** that takes it's first argument on the stack, and the second argument
-    ** in the primary register.
-    ** It depends on the code between the two if we can handle/transform the
-    ** sequence, so check this code for the following list of things:
-    **
-    **  - the range must be a basic block (one entry, one exit)
-    **  - there may not be accesses to local variables with unknown
-    **    offsets (because we have to adjust these offsets).
-    **  - no subroutine calls
-    **  - no jump labels
-    **
-    ** Since we need a zero page register later, do also check the
-    ** intermediate code for zero page use.
-    */
-    I = 0;
-    while (I < (int)CS_GetEntryCount (S)) {
-
-        /* Get the next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Actions depend on state */
-        switch (State) {
-
-            case Initialize:
-                ResetStackOpData (&Data);
-                UsedRegs = ChangedRegs = REG_NONE;
-                State = Search;
-                /* FALLTHROUGH */
-
-            case Search:
-                /* While searching, track register load insns, so we can tell
-                ** what is in a register once pushax is encountered.
-                */
-                if (CE_HasLabel (E)) {
-                    /* Currently we don't track across branches */
-                    ClearLoadInfo (&Data.Lhs);
-                }
-                if (CE_IsCallTo (E, "pushax")) {
-                    Data.PushIndex = I;
-                    State = FoundPush;
-                } else {
-                    /* Track load insns */
-                    TrackLoads (&Data.Lhs, E, I);
-                }
-                break;
-
-            case FoundPush:
-                /* We' found a pushax before. Search for a stack op that may
-                ** follow and in the meantime, track zeropage usage and check
-                ** for code that will disable us from translating the sequence.
-                */
-                if (CE_HasLabel (E)) {
-                    /* Currently we don't track across branches */
-                    ClearLoadInfo (&Data.Rhs);
-                }
-                if (E->OPC == OP65_JSR) {
-
-                    /* Subroutine call: Check if this is one of the functions,
-                    ** we're going to replace.
-                    */
-                    Data.OptFunc = FindFunc (E->Arg);
-                    if (Data.OptFunc) {
-                        /* Remember the op index and go on */
-                        Data.OpIndex = I;
-                        Data.OpEntry = E;
-                        State = FoundOp;
-                        break;
-                    } else if (!HarmlessCall (E->Arg)) {
-                        /* A call to an unkown subroutine: We need to start
-                        ** over after the last pushax. Note: This will also
-                        ** happen if we encounter a call to pushax!
-                        */
-                        I = Data.PushIndex;
-                        State = Initialize;
-                        break;
-                    } else {
-                        /* Track register usage */
-                        Data.UsedRegs |= (E->Use | E->Chg);
-                        TrackLoads (&Data.Rhs, E, I);
-                    }
-
-                } else if (E->Info & OF_STORE && (E->Chg & REG_ZP) == 0) {
-
-                    /* Too dangerous - there may be a change of a variable
-                    ** within the sequence.
-                    */
-                    I = Data.PushIndex;
-                    State = Initialize;
-                    break;
-
-                } else if ((E->Use & REG_SP) != 0                       &&
-                           (E->AM != AM65_ZP_INDY               ||
-                            RegValIsUnknown (E->RI->In.RegY)    ||
-                            E->RI->In.RegY < 2)) {
-
-                    /* If we are using the stack, and we don't have "indirect Y"
-                    ** addressing mode, or the value of Y is unknown, or less
-                    ** than two, we cannot cope with this piece of code. Having
-                    ** an unknown value of Y means that we cannot correct the
-                    ** stack offset, while having an offset less than two means
-                    ** that the code works with the value on stack which is to
-                    ** be removed.
-                    */
-                    I = Data.PushIndex;
-                    State = Initialize;
-                    break;
-
-                } else {
-                    /* Other stuff: Track register usage */
-                    Data.UsedRegs |= (E->Use | E->Chg);
-                    TrackLoads (&Data.Rhs, E, I);
-                }
-                /* If the registers from the push (A/X) are used before they're
-                ** changed, we cannot change the sequence, because this would
-                ** with a high probability change the register contents.
-                */
-                UsedRegs |= E->Use;
-                if ((UsedRegs & ~ChangedRegs) & REG_AX) {
-                    I = Data.PushIndex;
-                    State = Initialize;
-                    break;
-                }
-                ChangedRegs |= E->Chg;
-                break;
-
-            case FoundOp:
-                /* Track zero page location usage beyond this point */
-                Data.UsedRegs |= GetRegInfo (S, I, REG_SREG | REG_PTR1 | REG_PTR2);
-
-                /* Finalize the load info */
-                FinalizeLoadInfo (&Data.Lhs, S);
-                FinalizeLoadInfo (&Data.Rhs, S);
-
-                /* If the Lhs loads do load from zeropage, we have to include
-                ** them into UsedRegs registers used. The Rhs loads have already
-                ** been tracked.
-                */
-                if (Data.Lhs.A.LoadEntry && Data.Lhs.A.LoadEntry->AM == AM65_ZP) {
-                    Data.UsedRegs |= Data.Lhs.A.LoadEntry->Use;
-                }
-                if (Data.Lhs.X.LoadEntry && Data.Lhs.X.LoadEntry->AM == AM65_ZP) {
-                    Data.UsedRegs |= Data.Lhs.X.LoadEntry->Use;
-                }
-
-                /* Check the preconditions. If they aren't ok, reset the insn
-                ** pointer to the pushax and start over. We will loose part of
-                ** load tracking but at least a/x has probably lost between
-                ** pushax and here and will be tracked again when restarting.
-                */
-                if (!PreCondOk (&Data)) {
-                    I = Data.PushIndex;
-                    State = Initialize;
-                    break;
-                }
-
-                /* Prepare the remainder of the data structure. */
-                Data.PrevEntry = CS_GetPrevEntry (S, Data.PushIndex);
-                Data.PushEntry = CS_GetEntry (S, Data.PushIndex);
-                Data.OpEntry   = CS_GetEntry (S, Data.OpIndex);
-                Data.NextEntry = CS_GetNextEntry (S, Data.OpIndex);
-
-                /* Remember the current number of code lines */
-                OldEntryCount = CS_GetEntryCount (S);
-
-                /* Adjust stack offsets to account for the upcoming removal */
-                AdjustStackOffset (&Data, 2);
-
-                /* Regenerate register info, since AdjustStackOffset changed
-                ** the code
-                */
-                CS_GenRegInfo (S);
-
-                /* Call the optimizer function */
-                Changes += Data.OptFunc->Func (&Data);
-
-                /* Since the function may have added or deleted entries,
-                ** correct the index.
-                */
-                I += CS_GetEntryCount (S) - OldEntryCount;
-
-                /* Regenerate register info */
-                CS_GenRegInfo (S);
-
-                /* Done */
-                State = Initialize;
-                continue;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
diff --git a/src/cc65/coptstop.h b/src/cc65/coptstop.h
deleted file mode 100644 (file)
index 4edf284..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 coptstop.h                                */
-/*                                                                           */
-/*           Optimize operations that take operands via the stack            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef COPTSTOP_H
-#define COPTSTOP_H
-
-
-
-/* cc65 */
-#include "codeseg.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned OptStackOps (CodeSeg* S);
-/* Optimize operations that take operands via the stack */
-
-
-
-/* End of coptstop.h */
-
-#endif
diff --git a/src/cc65/coptstore.c b/src/cc65/coptstore.c
deleted file mode 100644 (file)
index 56343c9..0000000
+++ /dev/null
@@ -1,437 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  coptstore.c                              */
-/*                                                                           */
-/*                                Optimize stores                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* cc65 */
-#include "codeent.h"
-#include "codeinfo.h"
-#include "coptstore.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void InsertStore (CodeSeg* S, unsigned* IP, LineInfo* LI)
-{
-    CodeEntry* X = NewCodeEntry (OP65_STA, AM65_ZP_INDY, "sp", 0, LI);
-    CS_InsertEntry (S, X, (*IP)++);
-}
-
-
-
-unsigned OptStore1 (CodeSeg* S)
-/* Search for the sequence
-**
-**      ldy     #n
-**      jsr     staxysp
-**      ldy     #n+1
-**      jsr     ldaxysp
-**
-** and remove the useless load.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[4];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_LDY                           &&
-            CE_IsConstImm (L[0])                            &&
-            L[0]->Num < 0xFF                                &&
-            !CS_RangeHasLabel (S, I+1, 3)                   &&
-            CS_GetEntries (S, L+1, I+1, 3)                  &&
-            CE_IsCallTo (L[1], "staxysp")                   &&
-            L[2]->OPC == OP65_LDY                           &&
-            CE_IsKnownImm (L[2], L[0]->Num + 1)             &&
-            CE_IsCallTo (L[3], "ldaxysp")) {
-
-            /* Register has already the correct value, remove the loads */
-            CS_DelEntries (S, I+2, 2);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptStore2 (CodeSeg* S)
-/* Search for a call to staxysp. If the ax register is not used later, and
-** the value is constant, just use the A register and store directly into the
-** stack.
-*/
-{
-    unsigned I;
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Get the input registers */
-        const RegInfo* RI = E->RI;
-
-        /* Check for the call */
-        if (CE_IsCallTo (E, "staxysp")          &&
-            RegValIsKnown (RI->In.RegA)         &&
-            RegValIsKnown (RI->In.RegX)         &&
-            RegValIsKnown (RI->In.RegY)         &&
-            !RegAXUsed (S, I+1)) {
-
-            /* Get the register values */
-            unsigned char A = (unsigned char) RI->In.RegA;
-            unsigned char X = (unsigned char) RI->In.RegX;
-            unsigned char Y = (unsigned char) RI->In.RegY;
-
-            /* Setup other variables */
-            CodeEntry*  N;
-            unsigned    IP = I + 1;     /* Insertion point */
-
-            /* Replace the store. We will not remove the loads, since this is
-            ** too complex and will be done by other optimizer steps.
-            */
-            N = NewCodeEntry (OP65_LDA, AM65_IMM, MakeHexArg (A), 0, E->LI);
-            CS_InsertEntry (S, N, IP++);
-            InsertStore (S, &IP, E->LI);
-
-            /* Check if we can store one of the other bytes */
-            if (A != X) {
-                N = NewCodeEntry (OP65_LDA, AM65_IMM, MakeHexArg (X), 0, E->LI);
-                CS_InsertEntry (S, N, IP++);
-            }
-            N = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (Y+1), 0, E->LI);
-            CS_InsertEntry (S, N, IP++);
-            InsertStore (S, &IP, E->LI);
-
-            /* Remove the call */
-            CS_DelEntry (S, I);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptStore3 (CodeSeg* S)
-/* Search for a call to steaxysp. If the eax register is not used later, and
-** the value is constant, just use the A register and store directly into the
-** stack.
-*/
-{
-    unsigned I;
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Get the input registers */
-        const RegInfo* RI = E->RI;
-
-        /* Check for the call */
-        if (CE_IsCallTo (E, "steaxysp")         &&
-            RegValIsKnown (RI->In.RegA)         &&
-            RegValIsKnown (RI->In.RegX)         &&
-            RegValIsKnown (RI->In.RegY)         &&
-            RegValIsKnown (RI->In.SRegLo)       &&
-            RegValIsKnown (RI->In.SRegHi)       &&
-            !RegEAXUsed (S, I+1)) {
-
-            /* Get the register values */
-            unsigned char A = (unsigned char) RI->In.RegA;
-            unsigned char X = (unsigned char) RI->In.RegX;
-            unsigned char Y = (unsigned char) RI->In.RegY;
-            unsigned char L = (unsigned char) RI->In.SRegLo;
-            unsigned char H = (unsigned char) RI->In.SRegHi;
-
-            /* Setup other variables */
-            unsigned    Done = 0;
-            CodeEntry*  N;
-            unsigned    IP = I + 1;     /* Insertion point */
-
-            /* Replace the store. We will not remove the loads, since this is
-            ** too complex and will be done by other optimizer steps.
-            */
-            N = NewCodeEntry (OP65_LDA, AM65_IMM, MakeHexArg (A), 0, E->LI);
-            CS_InsertEntry (S, N, IP++);
-            InsertStore (S, &IP, E->LI);
-            Done |= 0x01;
-
-            /* Check if we can store one of the other bytes */
-            if (A == X && (Done & 0x02) == 0) {
-                N = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (Y+1), 0, E->LI);
-                CS_InsertEntry (S, N, IP++);
-                InsertStore (S, &IP, E->LI);
-                Done |= 0x02;
-            }
-            if (A == L && (Done & 0x04) == 0) {
-                N = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (Y+2), 0, E->LI);
-                CS_InsertEntry (S, N, IP++);
-                InsertStore (S, &IP, E->LI);
-                Done |= 0x04;
-            }
-            if (A == H && (Done & 0x08) == 0) {
-                N = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (Y+3), 0, E->LI);
-                CS_InsertEntry (S, N, IP++);
-                InsertStore (S, &IP, E->LI);
-                Done |= 0x08;
-            }
-
-            /* Store the second byte */
-            if ((Done & 0x02) == 0) {
-                N = NewCodeEntry (OP65_LDA, AM65_IMM, MakeHexArg (X), 0, E->LI);
-                CS_InsertEntry (S, N, IP++);
-                N = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (Y+1), 0, E->LI);
-                CS_InsertEntry (S, N, IP++);
-                InsertStore (S, &IP, E->LI);
-                Done |= 0x02;
-            }
-
-            /* Check if we can store one of the other bytes */
-            if (X == L && (Done & 0x04) == 0) {
-                N = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (Y+2), 0, E->LI);
-                CS_InsertEntry (S, N, IP++);
-                InsertStore (S, &IP, E->LI);
-                Done |= 0x04;
-            }
-            if (X == H && (Done & 0x08) == 0) {
-                N = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (Y+3), 0, E->LI);
-                CS_InsertEntry (S, N, IP++);
-                InsertStore (S, &IP, E->LI);
-                Done |= 0x08;
-            }
-
-            /* Store the third byte */
-            if ((Done & 0x04) == 0) {
-                N = NewCodeEntry (OP65_LDA, AM65_IMM, MakeHexArg (L), 0, E->LI);
-                CS_InsertEntry (S, N, IP++);
-                N = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (Y+2), 0, E->LI);
-                CS_InsertEntry (S, N, IP++);
-                InsertStore (S, &IP, E->LI);
-                Done |= 0x04;
-            }
-
-            /* Check if we can store one of the other bytes */
-            if (L == H && (Done & 0x08) == 0) {
-                N = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (Y+3), 0, E->LI);
-                CS_InsertEntry (S, N, IP++);
-                InsertStore (S, &IP, E->LI);
-                Done |= 0x08;
-            }
-
-            /* Store the fourth byte */
-            if ((Done & 0x08) == 0) {
-                N = NewCodeEntry (OP65_LDA, AM65_IMM, MakeHexArg (H), 0, E->LI);
-                CS_InsertEntry (S, N, IP++);
-                N = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (Y+3), 0, E->LI);
-                CS_InsertEntry (S, N, IP++);
-                InsertStore (S, &IP, E->LI);
-                Done |= 0x08;
-            }
-
-            /* Remove the call */
-            CS_DelEntry (S, I);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptStore4 (CodeSeg* S)
-/* Search for the sequence
-**
-**      sta     xx
-**      stx     yy
-**      lda     xx
-**      ldx     yy
-**
-** and remove the useless load, provided that the next insn doesn't use flags
-** from the load.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[5];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_STA                           &&
-            (L[0]->AM == AM65_ABS || L[0]->AM == AM65_ZP)   &&
-            !CS_RangeHasLabel (S, I+1, 3)                   &&
-            CS_GetEntries (S, L+1, I+1, 4)                  &&
-            L[1]->OPC == OP65_STX                           &&
-            L[1]->AM == L[0]->AM                            &&
-            L[2]->OPC == OP65_LDA                           &&
-            L[2]->AM == L[0]->AM                            &&
-            L[3]->OPC == OP65_LDX                           &&
-            L[3]->AM == L[1]->AM                            &&
-            strcmp (L[0]->Arg, L[2]->Arg) == 0              &&
-            strcmp (L[1]->Arg, L[3]->Arg) == 0              &&
-            !CE_UseLoadFlags (L[4])) {
-
-            /* Register has already the correct value, remove the loads */
-            CS_DelEntries (S, I+2, 2);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptStore5 (CodeSeg* S)
-/* Search for the sequence
-**
-**      lda     foo
-**      ldx     bar
-**      sta     something
-**      stx     something-else
-**
-** and replace it by
-**
-**      lda     foo
-**      sta     something
-**      lda     bar
-**      sta     something-else
-**
-** if X is not used later. This replacement doesn't save any cycles or bytes,
-** but it keeps the value of X, which may be reused later.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[4];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (L[0]->OPC == OP65_LDA                           &&
-            !CS_RangeHasLabel (S, I+1, 3)                   &&
-            CS_GetEntries (S, L+1, I+1, 3)                  &&
-            L[1]->OPC == OP65_LDX                           &&
-            L[2]->OPC == OP65_STA                           &&
-            L[3]->OPC == OP65_STX                           &&
-            !RegXUsed (S, I+4)) {
-
-            CodeEntry* X;
-
-            /* Insert the code after the sequence */
-            X = NewCodeEntry (OP65_LDA, L[1]->AM, L[1]->Arg, 0, L[1]->LI);
-            CS_InsertEntry (S, X, I+4);
-            X = NewCodeEntry (OP65_STA, L[3]->AM, L[3]->Arg, 0, L[3]->LI);
-            CS_InsertEntry (S, X, I+5);
-
-            /* Delete the old code */
-            CS_DelEntry (S, I+3);
-            CS_DelEntry (S, I+1);
-
-            /* Remember, we had changes */
-            ++Changes;
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
diff --git a/src/cc65/coptstore.h b/src/cc65/coptstore.h
deleted file mode 100644 (file)
index fc93b40..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  coptstore.h                              */
-/*                                                                           */
-/*                                Optimize stores                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2006, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef COPTSTORE_H
-#define COPTSTORE_H
-
-
-
-/* cc65 */
-#include "codeseg.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned OptStore1 (CodeSeg* S);
-/* Search for the sequence
-**
-**      ldy     #n
-**      jsr     staxysp
-**      ldy     #n+1
-**      jsr     ldaxysp
-**
-** and remove the useless load, provided that the next insn doesn't use flags
-** from the load.
-*/
-
-unsigned OptStore2 (CodeSeg* S);
-/* Search for a call to staxysp. If the ax register is not used later, and
-** the value is constant, just use the A register and store directly into the
-** stack.
-*/
-
-unsigned OptStore3 (CodeSeg* S);
-/* Search for a call to steaxysp. If the eax register is not used later, and
-** the value is constant, just use the A register and store directly into the
-** stack.
-*/
-
-unsigned OptStore4 (CodeSeg* S);
-/* Search for the sequence
-**
-**      sta     xx
-**      stx     yy
-**      lda     xx
-**      ldx     yy
-**
-** and remove the useless load, provided that the next insn doesn't use flags
-** from the load.
-*/
-
-unsigned OptStore5 (CodeSeg* S);
-/* Search for the sequence
-**
-**      lda     foo
-**      ldx     bar
-**      sta     something
-**      stx     something-else
-**
-** and replace it by
-**
-**      lda     foo
-**      sta     something
-**      lda     bar
-**      sta     something-else
-**
-** if X is not used later. This replacement doesn't save any cycles or bytes,
-** but it keeps the value of X, which may be reused later.
-*/
-
-
-
-/* End of coptstore.h */
-
-#endif
diff --git a/src/cc65/coptsub.c b/src/cc65/coptsub.c
deleted file mode 100644 (file)
index 3d75c1f..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 coptsub.c                                 */
-/*                                                                           */
-/*                      Optimize subtraction sequences                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2006, Ullrich von Bassewitz                                      */
-/*                Römerstrasse 52                                            */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "chartype.h"
-
-/* cc65 */
-#include "codeent.h"
-#include "codeinfo.h"
-#include "coptsub.h"
-
-
-
-/*****************************************************************************/
-/*                           Optimize subtractions                           */
-/*****************************************************************************/
-
-
-
-unsigned OptSub1 (CodeSeg* S)
-/* Search for the sequence
-**
-**      sbc     ...
-**      bcs     L
-**      dex
-** L:
-**
-** and remove the handling of the high byte if X is not used later.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[3];
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (E->OPC == OP65_SBC                               &&
-            CS_GetEntries (S, L, I+1, 3)                     &&
-            (L[0]->OPC == OP65_BCS || L[0]->OPC == OP65_JCS) &&
-            L[0]->JumpTo != 0                                &&
-            !CE_HasLabel (L[0])                              &&
-            L[1]->OPC == OP65_DEX                            &&
-            !CE_HasLabel (L[1])                              &&
-            L[0]->JumpTo->Owner == L[2]                      &&
-            !RegXUsed (S, I+3)) {
-
-            /* Remove the bcs/dex */
-            CS_DelEntries (S, I+1, 2);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptSub2 (CodeSeg* S)
-/* Search for the sequence
-**
-**      lda     xx
-**      sec
-**      sta     tmp1
-**      lda     yy
-**      sbc     tmp1
-**      sta     yy
-**
-** and replace it by
-**
-**      sec
-**      lda     yy
-**      sbc     xx
-**      sta     yy
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[5];
-
-        /* Get next entry */
-        CodeEntry* E = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (E->OPC == OP65_LDA                             &&
-            !CS_RangeHasLabel (S, I+1, 5)                  &&
-            CS_GetEntries (S, L, I+1, 5)                   &&
-            L[0]->OPC == OP65_SEC                          &&
-            L[1]->OPC == OP65_STA                          &&
-            strcmp (L[1]->Arg, "tmp1") == 0                &&
-            L[2]->OPC == OP65_LDA                          &&
-            L[3]->OPC == OP65_SBC                          &&
-            strcmp (L[3]->Arg, "tmp1") == 0                &&
-            L[4]->OPC == OP65_STA                          &&
-            strcmp (L[4]->Arg, L[2]->Arg) == 0) {
-
-            /* Remove the store to tmp1 */
-            CS_DelEntry (S, I+2);
-
-            /* Remove the subtraction */
-            CS_DelEntry (S, I+3);
-
-            /* Move the lda to the position of the subtraction and change the
-            ** op to SBC.
-            */
-            CS_MoveEntry (S, I, I+3);
-            CE_ReplaceOPC (E, OP65_SBC);
-
-            /* If the sequence head had a label, move this label back to the
-            ** head.
-            */
-            if (CE_HasLabel (E)) {
-                CS_MoveLabels (S, E, L[0]);
-            }
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptSub3 (CodeSeg* S)
-/* Search for a call to decaxn and replace it by an 8 bit sub if the X register
-** is not used later.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* E;
-
-        /* Get next entry */
-        E = CS_GetEntry (S, I);
-
-        /* Check for the sequence */
-        if (E->OPC == OP65_JSR                          &&
-            strncmp (E->Arg, "decax", 5) == 0           &&
-            IsDigit (E->Arg[5])                         &&
-            E->Arg[6] == '\0'                           &&
-            !RegXUsed (S, I+1)) {
-
-            CodeEntry* X;
-            const char* Arg;
-
-            /* Insert new code behind the sequence */
-            X = NewCodeEntry (OP65_SEC, AM65_IMP, 0, 0, E->LI);
-            CS_InsertEntry (S, X, I+1);
-
-            Arg = MakeHexArg (E->Arg[5] - '0');
-            X = NewCodeEntry (OP65_SBC, AM65_IMM, Arg, 0, E->LI);
-            CS_InsertEntry (S, X, I+2);
-
-            /* Delete the old code */
-            CS_DelEntry (S, I);
-
-            /* Remember, we had changes */
-            ++Changes;
-
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
diff --git a/src/cc65/coptsub.h b/src/cc65/coptsub.h
deleted file mode 100644 (file)
index 5929612..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 coptsub.h                                 */
-/*                                                                           */
-/*                      Optimize subtraction sequences                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2006, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef COPTSUB_H
-#define COPTSUB_H
-
-
-
-/* cc65 */
-#include "codeseg.h"
-
-
-
-/*****************************************************************************/
-/*                           Optimize subtractions                           */
-/*****************************************************************************/
-
-
-
-unsigned OptSub1 (CodeSeg* S);
-/* Search for the sequence
-**
-**      sbc     ...
-**      bcs     L
-**      dex
-** L:
-**
-** and remove the handling of the high byte if X is not used later.
-*/
-
-unsigned OptSub2 (CodeSeg* S);
-/* Search for the sequence
-**
-**      lda     xx
-**      sec
-**      sta     tmp1
-**      lda     yy
-**      sbc     tmp1
-**      sta     yy
-**
-** and replace it by
-**
-**      sec
-**      lda     yy
-**      sbc     xx
-**      sta     yy
-*/
-
-unsigned OptSub3 (CodeSeg* S);
-/* Search for a call to decaxn and replace it by an 8 bit sub if the X register
-** is not used later.
-*/
-
-
-
-/* End of coptsub.h */
-
-#endif
diff --git a/src/cc65/copttest.c b/src/cc65/copttest.c
deleted file mode 100644 (file)
index 5628a42..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                copttest.c                                 */
-/*                                                                           */
-/*                          Optimize test sequences                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* cc65 */
-#include "codeent.h"
-#include "codeinfo.h"
-#include "copttest.h"
-
-
-
-/*****************************************************************************/
-/*                              Optimize tests                               */
-/*****************************************************************************/
-
-
-
-unsigned OptTest1 (CodeSeg* S)
-/* Given a sequence
-**
-**     stx     xxx
-**     ora     xxx
-**     beq/bne ...
-**
-** If X is zero, the sequence may be changed to
-**
-**     cmp     #$00
-**     beq/bne ...
-**
-** which may be optimized further by another step.
-**
-** If A is zero, the sequence may be changed to
-**
-**     txa
-**     beq/bne ...
-*/
-{
-    unsigned Changes = 0;
-    unsigned I;
-
-    /* Walk over the entries */
-    I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[3];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check if it's the sequence we're searching for */
-        if (L[0]->OPC == OP65_STX              &&
-            CS_GetEntries (S, L+1, I+1, 2)     &&
-            !CE_HasLabel (L[1])                &&
-            L[1]->OPC == OP65_ORA              &&
-            strcmp (L[0]->Arg, L[1]->Arg) == 0 &&
-            !CE_HasLabel (L[2])                &&
-            (L[2]->Info & OF_ZBRA) != 0) {
-
-            /* Check if X is zero */
-            if (L[0]->RI->In.RegX == 0) {
-
-                /* Insert the compare */
-                CodeEntry* N = NewCodeEntry (OP65_CMP, AM65_IMM, "$00", 0, L[0]->LI);
-                CS_InsertEntry (S, N, I+2);
-
-                /* Remove the two other insns */
-                CS_DelEntry (S, I+1);
-                CS_DelEntry (S, I);
-
-                /* We had changes */
-                ++Changes;
-
-            /* Check if A is zero */
-            } else if (L[1]->RI->In.RegA == 0) {
-
-                /* Insert the txa */
-                CodeEntry* N = NewCodeEntry (OP65_TXA, AM65_IMP, 0, 0, L[1]->LI);
-                CS_InsertEntry (S, N, I+2);
-
-                /* Remove the two other insns */
-                CS_DelEntry (S, I+1);
-                CS_DelEntry (S, I);
-
-                /* We had changes */
-                ++Changes;
-            }
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
-
-
-
-unsigned OptTest2 (CodeSeg* S)
-/* Search for an inc/dec operation followed by a load and a conditional
-** branch based on the flags from the load. Remove the load if the insn
-** isn't used later.
-*/
-{
-    unsigned Changes = 0;
-
-    /* Walk over the entries */
-    unsigned I = 0;
-    while (I < CS_GetEntryCount (S)) {
-
-        CodeEntry* L[3];
-
-        /* Get next entry */
-        L[0] = CS_GetEntry (S, I);
-
-        /* Check if it's the sequence we're searching for */
-        if ((L[0]->OPC == OP65_INC || L[0]->OPC == OP65_DEC)    &&
-            CS_GetEntries (S, L+1, I+1, 2)                      &&
-            !CE_HasLabel (L[1])                                 &&
-            (L[1]->Info & OF_LOAD) != 0                         &&
-            (L[2]->Info & OF_FBRA) != 0                         &&
-            L[1]->AM == L[0]->AM                                &&
-            strcmp (L[0]->Arg, L[1]->Arg) == 0                  &&
-            (GetRegInfo (S, I+2, L[1]->Chg) & L[1]->Chg) == 0) {
-
-            /* Remove the load */
-            CS_DelEntry (S, I+1);
-             ++Changes;
-        }
-
-        /* Next entry */
-        ++I;
-
-    }
-
-    /* Return the number of changes made */
-    return Changes;
-}
diff --git a/src/cc65/copttest.h b/src/cc65/copttest.h
deleted file mode 100644 (file)
index 6f58108..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                copttest.h                                 */
-/*                                                                           */
-/*                          Optimize test sequences                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef COPTTEST_H
-#define COPTTEST_H
-
-
-
-/* cc65 */
-#include "codeseg.h"
-
-
-
-/*****************************************************************************/
-/*                              Optimize tests                               */
-/*****************************************************************************/
-
-
-
-unsigned OptTest1 (CodeSeg* S);
-/* Given a sequence
-**
-**     stx     xxx
-**     ora     xxx
-**     beq/bne ...
-**
-** If X is zero, the sequence may be changed to
-**
-**     cmp     #$00
-**     beq/bne ...
-**
-** which may be optimized further by another step.
-**
-** If A is zero, the sequence may be changed to
-**
-**     txa
-**     beq/bne ...
-*/
-
-unsigned OptTest2 (CodeSeg* S);
-/* Search for an inc/dec operation followed by a load and a conditional
-** branch based on the flags from the load. Remove the load if the insn
-** isn't used later.
-*/
-
-
-
-/* End of copttest.h */
-
-#endif
diff --git a/src/cc65/copyleft.jrd b/src/cc65/copyleft.jrd
deleted file mode 100644 (file)
index f6d33c4..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
--*- Mode: Text -*-
-
-   This is the copyright notice for RA65, LINK65, LIBR65, and other
-Atari 8-bit programs.  Said programs are Copyright 1989, by John R.
-Dunning.  All rights reserved, with the following exceptions:
-
-    Anyone may copy or redistribute these programs, provided that:
-
-1:  You don't charge anything for the copy.  It is permissable to 
-    charge a nominal fee for media, etc.
-
-2:  All source code and documentation for the programs is made
-    available as part of the distribution.
-
-3:  This copyright notice is preserved verbatim, and included in 
-    the distribution.
-
-    You are allowed to modify these programs, and redistribute the 
-modified versions, provided that the modifications are clearly noted.
-
-    There is NO WARRANTY with this software, it comes as is, and is
-distributed in the hope that it may be useful.
-
-    This copyright notice applies to any program which contains
-this text, or the refers to this file.
-
-    This copyright notice is based on the one published by the Free
-Software Foundation, sometimes known as the GNU project.  The idea
-is the same as theirs, ie the software is free, and is intended to
-stay that way.  Everybody has the right to copy, modify, and re-
-distribute this software.  Nobody has the right to prevent anyone
-else from copying, modifying or redistributing it.
diff --git a/src/cc65/dataseg.c b/src/cc65/dataseg.c
deleted file mode 100644 (file)
index 40ec6f7..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 dataseg.c                                 */
-/*                                                                           */
-/*                          Data segment structure                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "check.h"
-#include "xmalloc.h"
-#include "xsprintf.h"
-
-/* cc65 */
-#include "dataseg.h"
-#include "error.h"
-#include "output.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-DataSeg* NewDataSeg (const char* Name, SymEntry* Func)
-/* Create a new data segment, initialize and return it */
-{
-    /* Allocate memory */
-    DataSeg* S  = xmalloc (sizeof (DataSeg));
-
-    /* Initialize the fields */
-    S->SegName  = xstrdup (Name);
-    S->Func     = Func;
-    InitCollection (&S->Lines);
-
-    /* Return the new struct */
-    return S;
-}
-
-
-
-void DS_Append (DataSeg* Target, const DataSeg* Source)
-/* Append the data from Source to Target */
-{
-    unsigned I;
-
-    /* Append all lines from Source to Target */
-    unsigned Count = CollCount (&Source->Lines);
-    for (I = 0; I < Count; ++I) {
-        CollAppend (&Target->Lines, xstrdup (CollConstAt (&Source->Lines, I)));
-    }
-}
-
-
-
-void DS_AddVLine (DataSeg* S, const char* Format, va_list ap)
-/* Add a line to the given data segment */
-{
-    /* Format the line */
-    char Buf [256];
-    xvsprintf (Buf, sizeof (Buf), Format, ap);
-
-    /* Add a copy to the data segment */
-    CollAppend (&S->Lines, xstrdup (Buf));
-}
-
-
-
-void DS_AddLine (DataSeg* S, const char* Format, ...)
-/* Add a line to the given data segment */
-{
-    va_list ap;
-    va_start (ap, Format);
-    DS_AddVLine (S, Format, ap);
-    va_end (ap);
-}
-
-
-
-void DS_Output (const DataSeg* S)
-/* Output the data segment data to the output file */
-{
-    unsigned I;
-
-    /* Get the number of entries in this segment */
-    unsigned Count = CollCount (&S->Lines);
-
-    /* If the segment is actually empty, bail out */
-    if (Count == 0) {
-        return;
-    }
-
-    /* Output the segment directive */
-    WriteOutput (".segment\t\"%s\"\n\n", S->SegName);
-
-    /* Output all entries */
-    for (I = 0; I < Count; ++I) {
-        WriteOutput ("%s\n", (const char*) CollConstAt (&S->Lines, I));
-    }
-
-    /* Add an additional newline after the segment output */
-    WriteOutput ("\n");
-}
diff --git a/src/cc65/dataseg.h b/src/cc65/dataseg.h
deleted file mode 100644 (file)
index dd99d47..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 dataseg.h                                 */
-/*                                                                           */
-/*                          Data segment structure                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef DATASEG_H
-#define DATASEG_H
-
-
-
-#include <stdarg.h>
-
-/* common */
-#include "attrib.h"
-#include "coll.h"
-
-/* cc65 */
-#include "symentry.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-typedef struct DataSeg DataSeg;
-struct DataSeg {
-    char*               SegName;        /* Segment name */
-    SymEntry*           Func;           /* Owner function */
-    Collection          Lines;          /* List of code lines */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-DataSeg* NewDataSeg (const char* SegName, SymEntry* Func);
-/* Create a new data segment, initialize and return it */
-
-void DS_Append (DataSeg* Target, const DataSeg* Source);
-/* Append the data from Source to Target. */
-
-void DS_AddVLine (DataSeg* S, const char* Format, va_list ap) attribute ((format(printf,2,0)));
-/* Add a line to the given data segment */
-
-void DS_AddLine (DataSeg* S, const char* Format, ...) attribute ((format(printf,2,3)));
-/* Add a line to the given data segment */
-
-void DS_Output (const DataSeg* S);
-/* Output the data segment data to the output file */
-
-
-
-/* End of dataseg.h */
-
-#endif
diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c
deleted file mode 100644 (file)
index 8c9d6dc..0000000
+++ /dev/null
@@ -1,753 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                datatype.c                                 */
-/*                                                                           */
-/*               Type string handling for the cc65 C compiler                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2015, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "addrsize.h"
-#include "check.h"
-#include "mmodel.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "codegen.h"
-#include "datatype.h"
-#include "error.h"
-#include "fp.h"
-#include "funcdesc.h"
-#include "global.h"
-#include "symtab.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Predefined type strings */
-Type type_schar[]       = { TYPE(T_SCHAR),  TYPE(T_END) };
-Type type_uchar[]       = { TYPE(T_UCHAR),  TYPE(T_END) };
-Type type_int[]         = { TYPE(T_INT),    TYPE(T_END) };
-Type type_uint[]        = { TYPE(T_UINT),   TYPE(T_END) };
-Type type_long[]        = { TYPE(T_LONG),   TYPE(T_END) };
-Type type_ulong[]       = { TYPE(T_ULONG),  TYPE(T_END) };
-Type type_void[]        = { TYPE(T_VOID),   TYPE(T_END) };
-Type type_size_t[]      = { TYPE(T_SIZE_T), TYPE(T_END) };
-Type type_float[]       = { TYPE(T_FLOAT),  TYPE(T_END) };
-Type type_double[]      = { TYPE(T_DOUBLE), TYPE(T_END) };
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned TypeLen (const Type* T)
-/* Return the length of the type string */
-{
-    const Type* Start = T;
-    while (T->C != T_END) {
-        ++T;
-    }
-    return T - Start;
-}
-
-
-
-Type* TypeCopy (Type* Dest, const Type* Src)
-/* Copy a type string */
-{
-    Type* Orig = Dest;
-    while (1) {
-        *Dest = *Src;
-        if (Src->C == T_END) {
-            break;
-        }
-        Src++;
-        Dest++;
-    }
-    return Orig;
-}
-
-
-
-Type* TypeDup (const Type* T)
-/* Create a copy of the given type on the heap */
-{
-    unsigned Len = (TypeLen (T) + 1) * sizeof (Type);
-    return memcpy (xmalloc (Len), T, Len);
-}
-
-
-
-Type* TypeAlloc (unsigned Len)
-/* Allocate memory for a type string of length Len. Len *must* include the
-** trailing T_END.
-*/
-{
-    return xmalloc (Len * sizeof (Type));
-}
-
-
-
-void TypeFree (Type* T)
-/* Free a type string */
-{
-    xfree (T);
-}
-
-
-
-int SignExtendChar (int C)
-/* Do correct sign extension of a character */
-{
-    if (IS_Get (&SignedChars) && (C & 0x80) != 0) {
-        return C | ~0xFF;
-    } else {
-        return C & 0xFF;
-    }
-}
-
-
-
-TypeCode GetDefaultChar (void)
-/* Return the default char type (signed/unsigned) depending on the settings */
-{
-    return IS_Get (&SignedChars)? T_SCHAR : T_UCHAR;
-}
-
-
-
-Type* GetCharArrayType (unsigned Len)
-/* Return the type for a char array of the given length */
-{
-    /* Allocate memory for the type string */
-    Type* T = TypeAlloc (3);    /* array/char/terminator */
-
-    /* Fill the type string */
-    T[0].C   = T_ARRAY;
-    T[0].A.L = Len;             /* Array length is in the L attribute */
-    T[1].C   = GetDefaultChar ();
-    T[2].C   = T_END;
-
-    /* Return the new type */
-    return T;
-}
-
-
-
-Type* GetImplicitFuncType (void)
-/* Return a type string for an inplicitly declared function */
-{
-    /* Get a new function descriptor */
-    FuncDesc* F = NewFuncDesc ();
-
-    /* Allocate memory for the type string */
-    Type* T = TypeAlloc (3);    /* func/returns int/terminator */
-
-    /* Prepare the function descriptor */
-    F->Flags  = FD_EMPTY | FD_VARIADIC;
-    F->SymTab = &EmptySymTab;
-    F->TagTab = &EmptySymTab;
-
-    /* Fill the type string */
-    T[0].C   = T_FUNC | CodeAddrSizeQualifier ();
-    T[0].A.P = F;
-    T[1].C   = T_INT;
-    T[2].C   = T_END;
-
-    /* Return the new type */
-    return T;
-}
-
-
-
-Type* PointerTo (const Type* T)
-/* Return a type string that is "pointer to T". The type string is allocated
-** on the heap and may be freed after use.
-*/
-{
-    /* Get the size of the type string including the terminator */
-    unsigned Size = TypeLen (T) + 1;
-
-    /* Allocate the new type string */
-    Type* P = TypeAlloc (Size + 1);
-
-    /* Create the return type... */
-    P[0].C = T_PTR | (T[0].C & T_QUAL_ADDRSIZE);
-    memcpy (P+1, T, Size * sizeof (Type));
-
-    /* ...and return it */
-    return P;
-}
-
-
-
-static TypeCode PrintTypeComp (FILE* F, TypeCode C, TypeCode Mask, const char* Name)
-/* Check for a specific component of the type. If it is there, print the
-** name and remove it. Return the type with the component removed.
-*/
-{
-    if ((C & Mask) == Mask) {
-        fprintf (F, "%s ", Name);
-        C &= ~Mask;
-    }
-    return C;
-}
-
-
-
-void PrintType (FILE* F, const Type* T)
-/* Output translation of type array. */
-{
-    /* Walk over the type string */
-    while (T->C != T_END) {
-
-        /* Get the type code */
-        TypeCode C = T->C;
-
-        /* Print any qualifiers */
-        C = PrintTypeComp (F, C, T_QUAL_CONST, "const");
-        C = PrintTypeComp (F, C, T_QUAL_VOLATILE, "volatile");
-        C = PrintTypeComp (F, C, T_QUAL_RESTRICT, "restrict");
-        C = PrintTypeComp (F, C, T_QUAL_NEAR, "__near__");
-        C = PrintTypeComp (F, C, T_QUAL_FAR, "__far__");
-        C = PrintTypeComp (F, C, T_QUAL_FASTCALL, "__fastcall__");
-        C = PrintTypeComp (F, C, T_QUAL_CDECL, "__cdecl__");
-
-        /* Signedness. Omit the signedness specifier for long and int */
-        if ((C & T_MASK_TYPE) != T_TYPE_INT && (C & T_MASK_TYPE) != T_TYPE_LONG) {
-            C = PrintTypeComp (F, C, T_SIGN_SIGNED, "signed");
-        }
-        C = PrintTypeComp (F, C, T_SIGN_UNSIGNED, "unsigned");
-
-        /* Now check the real type */
-        switch (C & T_MASK_TYPE) {
-            case T_TYPE_CHAR:
-                fprintf (F, "char");
-                break;
-            case T_TYPE_SHORT:
-                fprintf (F, "short");
-                break;
-            case T_TYPE_INT:
-                fprintf (F, "int");
-                break;
-            case T_TYPE_LONG:
-                fprintf (F, "long");
-                break;
-            case T_TYPE_LONGLONG:
-                fprintf (F, "long long");
-                break;
-            case T_TYPE_FLOAT:
-                fprintf (F, "float");
-                break;
-            case T_TYPE_DOUBLE:
-                fprintf (F, "double");
-                break;
-            case T_TYPE_VOID:
-                fprintf (F, "void");
-                break;
-            case T_TYPE_STRUCT:
-                fprintf (F, "struct %s", ((SymEntry*) T->A.P)->Name);
-                break;
-            case T_TYPE_UNION:
-                fprintf (F, "union %s", ((SymEntry*) T->A.P)->Name);
-                break;
-            case T_TYPE_ARRAY:
-                /* Recursive call */
-                PrintType (F, T + 1);
-                if (T->A.L == UNSPECIFIED) {
-                    fprintf (F, " []");
-                } else {
-                    fprintf (F, " [%ld]", T->A.L);
-                }
-                return;
-            case T_TYPE_PTR:
-                /* Recursive call */
-                PrintType (F, T + 1);
-                fprintf (F, " *");
-                return;
-            case T_TYPE_FUNC:
-                fprintf (F, "function returning ");
-                break;
-            default:
-                fprintf (F, "unknown type: %04lX", T->C);
-        }
-
-        /* Next element */
-        ++T;
-    }
-}
-
-
-
-void PrintFuncSig (FILE* F, const char* Name, Type* T)
-/* Print a function signature. */
-{
-    /* Get the function descriptor */
-    const FuncDesc* D = GetFuncDesc (T);
-
-    /* Print a comment with the function signature */
-    PrintType (F, GetFuncReturn (T));
-    if (IsQualNear (T)) {
-        fprintf (F, " __near__");
-    }
-    if (IsQualFar (T)) {
-        fprintf (F, " __far__");
-    }
-    if (IsQualFastcall (T)) {
-        fprintf (F, " __fastcall__");
-    }
-    if (IsQualCDecl (T)) {
-        fprintf (F, " __cdecl__");
-    }
-    fprintf (F, " %s (", Name);
-
-    /* Parameters */
-    if (D->Flags & FD_VOID_PARAM) {
-        fprintf (F, "void");
-    } else {
-        unsigned I;
-        SymEntry* E = D->SymTab->SymHead;
-        for (I = 0; I < D->ParamCount; ++I) {
-            if (I > 0) {
-                fprintf (F, ", ");
-            }
-            if (SymIsRegVar (E)) {
-                fprintf (F, "register ");
-            }
-            PrintType (F, E->Type);
-            E = E->NextSym;
-        }
-    }
-
-    /* End of parameter list */
-    fprintf (F, ")");
-}
-
-
-
-void PrintRawType (FILE* F, const Type* T)
-/* Print a type string in raw format (for debugging) */
-{
-    while (T->C != T_END) {
-        fprintf (F, "%04lX ", T->C);
-        ++T;
-    }
-    fprintf (F, "\n");
-}
-
-
-
-int TypeHasAttr (const Type* T)
-/* Return true if the given type has attribute data */
-{
-    return IsClassStruct (T) || IsTypeArray (T) || IsClassFunc (T);
-}
-
-
-
-unsigned SizeOf (const Type* T)
-/* Compute size of object represented by type array. */
-{
-    switch (UnqualifiedType (T->C)) {
-
-        case T_VOID:
-            return 0;   /* Assume voids have size zero */
-
-        /* Beware: There's a chance that this triggers problems in other parts
-           of the compiler. The solution is to fix the callers, because calling
-           SizeOf() with a function type as argument is bad. */
-        case T_FUNC:
-            return 0;   /* Size of function is unknown */
-
-        case T_SCHAR:
-        case T_UCHAR:
-            return SIZEOF_CHAR;
-
-        case T_SHORT:
-        case T_USHORT:
-            return SIZEOF_SHORT;
-
-        case T_INT:
-        case T_UINT:
-            return SIZEOF_INT;
-
-        case T_PTR:
-            return SIZEOF_PTR;
-
-        case T_LONG:
-        case T_ULONG:
-            return SIZEOF_LONG;
-
-        case T_LONGLONG:
-        case T_ULONGLONG:
-            return SIZEOF_LONGLONG;
-
-        case T_ENUM:
-            return SIZEOF_INT;
-
-        case T_FLOAT:
-            return SIZEOF_FLOAT;
-
-        case T_DOUBLE:
-            return SIZEOF_DOUBLE;
-
-        case T_STRUCT:
-        case T_UNION:
-            return ((SymEntry*) T->A.P)->V.S.Size;
-
-        case T_ARRAY:
-            if (T->A.L == UNSPECIFIED) {
-                /* Array with unspecified size */
-                return 0;
-            } else {
-                return T->A.L * SizeOf (T + 1);
-            }
-
-        default:
-            Internal ("Unknown type in SizeOf: %04lX", T->C);
-            return 0;
-
-    }
-}
-
-
-
-unsigned PSizeOf (const Type* T)
-/* Compute size of pointer object. */
-{
-    /* We are expecting a pointer expression */
-    CHECK (IsClassPtr (T));
-
-    /* Skip the pointer or array token itself */
-    return SizeOf (T + 1);
-}
-
-
-
-unsigned CheckedSizeOf (const Type* T)
-/* Return the size of a data type. If the size is zero, emit an error and
-** return some valid size instead (so the rest of the compiler doesn't have
-** to work with invalid sizes).
-*/
-{
-    unsigned Size = SizeOf (T);
-    if (Size == 0) {
-        Error ("Size of data type is unknown");
-        Size = SIZEOF_CHAR;     /* Don't return zero */
-    }
-    return Size;
-}
-
-
-
-unsigned CheckedPSizeOf (const Type* T)
-/* Return the size of a data type that is pointed to by a pointer. If the
-** size is zero, emit an error and return some valid size instead (so the
-** rest of the compiler doesn't have to work with invalid sizes).
-*/
-{
-    unsigned Size = PSizeOf (T);
-    if (Size == 0) {
-        Error ("Size of data type is unknown");
-        Size = SIZEOF_CHAR;     /* Don't return zero */
-    }
-    return Size;
-}
-
-
-
-unsigned TypeOf (const Type* T)
-/* Get the code generator base type of the object */
-{
-    switch (UnqualifiedType (T->C)) {
-
-        case T_SCHAR:
-            return CF_CHAR;
-
-        case T_UCHAR:
-            return CF_CHAR | CF_UNSIGNED;
-
-        case T_SHORT:
-        case T_INT:
-        case T_ENUM:
-            return CF_INT;
-
-        case T_USHORT:
-        case T_UINT:
-        case T_PTR:
-        case T_ARRAY:
-            return CF_INT | CF_UNSIGNED;
-
-        case T_LONG:
-            return CF_LONG;
-
-        case T_ULONG:
-            return CF_LONG | CF_UNSIGNED;
-
-        case T_FLOAT:
-        case T_DOUBLE:
-            /* These two are identical in the backend */
-            return CF_FLOAT;
-
-        case T_FUNC:
-            return (((FuncDesc*) T->A.P)->Flags & FD_VARIADIC)? 0 : CF_FIXARGC;
-
-        case T_STRUCT:
-        case T_UNION:
-            /* Address of ... */
-            return CF_INT | CF_UNSIGNED;
-
-        default:
-            Error ("Illegal type %04lX", T->C);
-            return CF_INT;
-    }
-}
-
-
-
-Type* Indirect (Type* T)
-/* Do one indirection for the given type, that is, return the type where the
-** given type points to.
-*/
-{
-    /* We are expecting a pointer expression */
-    CHECK (IsClassPtr (T));
-
-    /* Skip the pointer or array token itself */
-    return T + 1;
-}
-
-
-
-Type* ArrayToPtr (Type* T)
-/* Convert an array to a pointer to it's first element */
-{
-    /* Return pointer to first element */
-    return PointerTo (GetElementType (T));
-}
-
-
-
-int IsVariadicFunc (const Type* T)
-/* Return true if this is a function type or pointer to function type with
-** variable parameter list
-*/
-{
-    FuncDesc* F = GetFuncDesc (T);
-    return (F->Flags & FD_VARIADIC) != 0;
-}
-
-
-
-FuncDesc* GetFuncDesc (const Type* T)
-/* Get the FuncDesc pointer from a function or pointer-to-function type */
-{
-    if (UnqualifiedType (T->C) == T_PTR) {
-        /* Pointer to function */
-        ++T;
-    }
-
-    /* Be sure it's a function type */
-    CHECK (IsClassFunc (T));
-
-    /* Get the function descriptor from the type attributes */
-    return T->A.P;
-}
-
-
-
-void SetFuncDesc (Type* T, FuncDesc* F)
-/* Set the FuncDesc pointer in a function or pointer-to-function type */
-{
-    if (UnqualifiedType (T->C) == T_PTR) {
-        /* Pointer to function */
-        ++T;
-    }
-
-    /* Be sure it's a function type */
-    CHECK (IsClassFunc (T));
-
-    /* Set the function descriptor */
-    T->A.P = F;
-}
-
-
-
-Type* GetFuncReturn (Type* T)
-/* Return a pointer to the return type of a function or pointer-to-function type */
-{
-    if (UnqualifiedType (T->C) == T_PTR) {
-        /* Pointer to function */
-        ++T;
-    }
-
-    /* Be sure it's a function type */
-    CHECK (IsClassFunc (T));
-
-    /* Return a pointer to the return type */
-    return T + 1;
-}
-
-
-
-long GetElementCount (const Type* T)
-/* Get the element count of the array specified in T (which must be of
-** array type).
-*/
-{
-    CHECK (IsTypeArray (T));
-    return T->A.L;
-}
-
-
-
-void SetElementCount (Type* T, long Count)
-/* Set the element count of the array specified in T (which must be of
-** array type).
-*/
-{
-    CHECK (IsTypeArray (T));
-    T->A.L = Count;
-}
-
-
-
-Type* GetElementType (Type* T)
-/* Return the element type of the given array type. */
-{
-    CHECK (IsTypeArray (T));
-    return T + 1;
-}
-
-
-
-Type* GetBaseElementType (Type* T)
-/* Return the base element type of a given type. If T is not an array, this
-** will return. Otherwise it will return the base element type, which means
-** the element type that is not an array.
-*/
-{
-    while (IsTypeArray (T)) {
-        ++T;
-    }
-    return T;
-}
-
-
-
-SymEntry* GetSymEntry (const Type* T)
-/* Return a SymEntry pointer from a type */
-{
-    /* Only structs or unions have a SymEntry attribute */
-    CHECK (IsClassStruct (T));
-
-    /* Return the attribute */
-    return T->A.P;
-}
-
-
-
-void SetSymEntry (Type* T, SymEntry* S)
-/* Set the SymEntry pointer for a type */
-{
-    /* Only structs or unions have a SymEntry attribute */
-    CHECK (IsClassStruct (T));
-
-    /* Set the attribute */
-    T->A.P = S;
-}
-
-
-
-Type* IntPromotion (Type* T)
-/* Apply the integer promotions to T and return the result. The returned type
-** string may be T if there is no need to change it.
-*/
-{
-    /* We must have an int to apply int promotions */
-    PRECONDITION (IsClassInt (T));
-
-    /* An integer can represent all values from either signed or unsigned char,
-    ** so convert chars to int and leave all other types alone.
-    */
-    if (IsTypeChar (T)) {
-        return type_int;
-    } else {
-        return T;
-    }
-}
-
-
-
-Type* PtrConversion (Type* T)
-/* If the type is a function, convert it to pointer to function. If the
-** expression is an array, convert it to pointer to first element. Otherwise
-** return T.
-*/
-{
-    if (IsTypeFunc (T)) {
-        return PointerTo (T);
-    } else if (IsTypeArray (T)) {
-        return ArrayToPtr (T);
-    } else {
-        return T;
-    }
-}
-
-
-
-TypeCode AddrSizeQualifier (unsigned AddrSize)
-/* Return T_QUAL_NEAR or T_QUAL_FAR depending on the address size */
-{
-    switch (AddrSize) {
-
-        case ADDR_SIZE_ABS:
-            return T_QUAL_NEAR;
-
-        case ADDR_SIZE_FAR:
-            return T_QUAL_FAR;
-
-        default:
-            Error ("Invalid address size");
-            return T_QUAL_NEAR;
-
-    }
-}
diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h
deleted file mode 100644 (file)
index 92b3d01..0000000
+++ /dev/null
@@ -1,703 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                datatype.h                                 */
-/*                                                                           */
-/*               Type string handling for the cc65 C compiler                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2015, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef DATATYPE_H
-#define DATATYPE_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "attrib.h"
-#include "inline.h"
-#include "mmodel.h"
-
-/* cc65 */
-#include "funcdesc.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-
-/* Basic data types */
-enum {
-    T_END           = 0x000000,
-
-    /* Basic types */
-    T_TYPE_NONE     = 0x000000,
-    T_TYPE_CHAR     = 0x000001,
-    T_TYPE_SHORT    = 0x000002,
-    T_TYPE_INT      = 0x000003,
-    T_TYPE_LONG     = 0x000004,
-    T_TYPE_LONGLONG = 0x000005,
-    T_TYPE_ENUM     = 0x000006,
-    T_TYPE_FLOAT    = 0x000007,
-    T_TYPE_DOUBLE   = 0x000008,
-    T_TYPE_VOID     = 0x000009,
-    T_TYPE_STRUCT   = 0x00000A,
-    T_TYPE_UNION    = 0x00000B,
-    T_TYPE_ARRAY    = 0x00000C,
-    T_TYPE_PTR      = 0x00000D,
-    T_TYPE_FUNC     = 0x00000E,
-    T_MASK_TYPE     = 0x00000F,
-
-    /* Type classes */
-    T_CLASS_NONE    = 0x000000,
-    T_CLASS_INT     = 0x000010,
-    T_CLASS_FLOAT   = 0x000020,
-    T_CLASS_PTR     = 0x000030,
-    T_CLASS_STRUCT  = 0x000040,
-    T_CLASS_FUNC    = 0x000050,
-    T_MASK_CLASS    = 0x000070,
-
-    /* Type signedness */
-    T_SIGN_NONE     = 0x000000,
-    T_SIGN_UNSIGNED = 0x000080,
-    T_SIGN_SIGNED   = 0x000100,
-    T_MASK_SIGN     = 0x000180,
-
-    /* Type size modifiers */
-    T_SIZE_NONE     = 0x000000,
-    T_SIZE_SHORT    = 0x000200,
-    T_SIZE_LONG     = 0x000400,
-    T_SIZE_LONGLONG = 0x000600,
-    T_MASK_SIZE     = 0x000600,
-
-    /* Type qualifiers */
-    T_QUAL_NONE     = 0x000000,
-    T_QUAL_CONST    = 0x000800,
-    T_QUAL_VOLATILE = 0x001000,
-    T_QUAL_RESTRICT = 0x002000,
-    T_QUAL_NEAR     = 0x004000,
-    T_QUAL_FAR      = 0x008000,
-    T_QUAL_ADDRSIZE = T_QUAL_NEAR | T_QUAL_FAR,
-    T_QUAL_FASTCALL = 0x010000,
-    T_QUAL_CDECL    = 0x020000,
-    T_QUAL_CCONV    = T_QUAL_FASTCALL | T_QUAL_CDECL,
-    T_MASK_QUAL     = 0x03F800,
-
-    /* Types */
-    T_CHAR      = T_TYPE_CHAR     | T_CLASS_INT    | T_SIGN_UNSIGNED | T_SIZE_NONE,
-    T_SCHAR     = T_TYPE_CHAR     | T_CLASS_INT    | T_SIGN_SIGNED   | T_SIZE_NONE,
-    T_UCHAR     = T_TYPE_CHAR     | T_CLASS_INT    | T_SIGN_UNSIGNED | T_SIZE_NONE,
-    T_SHORT     = T_TYPE_SHORT    | T_CLASS_INT    | T_SIGN_SIGNED   | T_SIZE_SHORT,
-    T_USHORT    = T_TYPE_SHORT    | T_CLASS_INT    | T_SIGN_UNSIGNED | T_SIZE_SHORT,
-    T_INT       = T_TYPE_INT      | T_CLASS_INT    | T_SIGN_SIGNED   | T_SIZE_NONE,
-    T_UINT      = T_TYPE_INT      | T_CLASS_INT    | T_SIGN_UNSIGNED | T_SIZE_NONE,
-    T_LONG      = T_TYPE_LONG     | T_CLASS_INT    | T_SIGN_SIGNED   | T_SIZE_LONG,
-    T_ULONG     = T_TYPE_LONG     | T_CLASS_INT    | T_SIGN_UNSIGNED | T_SIZE_LONG,
-    T_LONGLONG  = T_TYPE_LONGLONG | T_CLASS_INT    | T_SIGN_SIGNED   | T_SIZE_LONGLONG,
-    T_ULONGLONG = T_TYPE_LONGLONG | T_CLASS_INT    | T_SIGN_UNSIGNED | T_SIZE_LONGLONG,
-    T_ENUM      = T_TYPE_ENUM     | T_CLASS_INT    | T_SIGN_SIGNED   | T_SIZE_NONE,
-    T_FLOAT     = T_TYPE_FLOAT    | T_CLASS_FLOAT  | T_SIGN_NONE     | T_SIZE_NONE,
-    T_DOUBLE    = T_TYPE_DOUBLE   | T_CLASS_FLOAT  | T_SIGN_NONE     | T_SIZE_NONE,
-    T_VOID      = T_TYPE_VOID     | T_CLASS_NONE   | T_SIGN_NONE     | T_SIZE_NONE,
-    T_STRUCT    = T_TYPE_STRUCT   | T_CLASS_STRUCT | T_SIGN_NONE     | T_SIZE_NONE,
-    T_UNION     = T_TYPE_UNION    | T_CLASS_STRUCT | T_SIGN_NONE     | T_SIZE_NONE,
-    T_ARRAY     = T_TYPE_ARRAY    | T_CLASS_PTR    | T_SIGN_NONE     | T_SIZE_NONE,
-    T_PTR       = T_TYPE_PTR      | T_CLASS_PTR    | T_SIGN_NONE     | T_SIZE_NONE,
-    T_FUNC      = T_TYPE_FUNC     | T_CLASS_FUNC   | T_SIGN_NONE     | T_SIZE_NONE,
-
-    /* Aliases */
-    T_SIZE_T    = T_UINT,
-};
-
-
-
-/* Type code entry */
-typedef unsigned long TypeCode;
-
-/* Type entry */
-typedef struct Type Type;
-struct Type {
-    TypeCode            C;      /* Code for this entry */
-    union {
-        void*           P;      /* Arbitrary attribute pointer */
-        long            L;      /* Numeric attribute value */
-        unsigned long   U;      /* Dito, unsigned */
-    } A;                        /* Type attribute if necessary */
-};
-
-/* A macro that expands to a full initializer for struct Type */
-#define TYPE(T)         { (T), { 0 } }
-
-/* Maximum length of a type string */
-#define MAXTYPELEN      30
-
-/* Special encodings for element counts of an array */
-#define UNSPECIFIED     -1L     /* Element count was not specified */
-#define FLEXIBLE        0L      /* Flexible array struct member */
-
-/* Sizes. Floating point sizes come from fp.h */
-#define SIZEOF_CHAR     1U
-#define SIZEOF_SHORT    2U
-#define SIZEOF_INT      2U
-#define SIZEOF_LONG     4U
-#define SIZEOF_LONGLONG 8U
-#define SIZEOF_FLOAT    (FP_F_Size())
-#define SIZEOF_DOUBLE   (FP_D_Size())
-#define SIZEOF_PTR      SIZEOF_INT
-
-/* Bit sizes */
-#define CHAR_BITS       (8 * SIZEOF_CHAR)
-#define SHORT_BITS      (8 * SIZEOF_SHORT)
-#define INT_BITS        (8 * SIZEOF_INT)
-#define LONG_BITS       (8 * SIZEOF_LONG)
-#define LONGLONG_BITS   (8 * SIZEOF_LONGLONG)
-#define FLOAT_BITS      (8 * SIZEOF_FLOAT)
-#define DOUBLE_BITS     (8 * SIZEOF_DOUBLE)
-#define PTR_BITS        (8 * SIZEOF_PTR)
-
-/* Predefined type strings */
-extern Type type_schar[];
-extern Type type_uchar[];
-extern Type type_int[];
-extern Type type_uint[];
-extern Type type_long[];
-extern Type type_ulong[];
-extern Type type_void[];
-extern Type type_size_t[];
-extern Type type_float[];
-extern Type type_double[];
-
-/* Forward for the SymEntry struct */
-struct SymEntry;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned TypeLen (const Type* T);
-/* Return the length of the type string */
-
-Type* TypeCopy (Type* Dest, const Type* Src);
-/* Copy a type string */
-
-Type* TypeDup (const Type* T);
-/* Create a copy of the given type on the heap */
-
-Type* TypeAlloc (unsigned Len);
-/* Allocate memory for a type string of length Len. Len *must* include the
-** trailing T_END.
-*/
-
-void TypeFree (Type* T);
-/* Free a type string */
-
-int SignExtendChar (int C);
-/* Do correct sign extension of a character */
-
-TypeCode GetDefaultChar (void);
-/* Return the default char type (signed/unsigned) depending on the settings */
-
-Type* GetCharArrayType (unsigned Len);
-/* Return the type for a char array of the given length */
-
-Type* GetImplicitFuncType (void);
-/* Return a type string for an inplicitly declared function */
-
-Type* PointerTo (const Type* T);
-/* Return a type string that is "pointer to T". The type string is allocated
-** on the heap and may be freed after use.
-*/
-
-void PrintType (FILE* F, const Type* T);
-/* Output translation of type array. */
-
-void PrintRawType (FILE* F, const Type* T);
-/* Print a type string in raw format (for debugging) */
-
-void PrintFuncSig (FILE* F, const char* Name, Type* T);
-/* Print a function signature. */
-
-int TypeHasAttr (const Type* T);
-/* Return true if the given type has attribute data */
-
-#if defined(HAVE_INLINE)
-INLINE void CopyTypeAttr (const Type* Src, Type* Dest)
-/* Copy attribute data from Src to Dest */
-{
-    Dest->A = Src->A;
-}
-#else
-#  define CopyTypeAttr(Src, Dest)       ((Dest)->A = (Src)->A)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE TypeCode UnqualifiedType (TypeCode T)
-/* Return the unqalified type code */
-{
-    return (T & ~T_MASK_QUAL);
-}
-#else
-#  define UnqualifiedType(T)    ((T) & ~T_MASK_QUAL)
-#endif
-
-unsigned SizeOf (const Type* T);
-/* Compute size of object represented by type array. */
-
-unsigned PSizeOf (const Type* T);
-/* Compute size of pointer object. */
-
-unsigned CheckedSizeOf (const Type* T);
-/* Return the size of a data type. If the size is zero, emit an error and
-** return some valid size instead (so the rest of the compiler doesn't have
-** to work with invalid sizes).
-*/
-unsigned CheckedPSizeOf (const Type* T);
-/* Return the size of a data type that is pointed to by a pointer. If the
-** size is zero, emit an error and return some valid size instead (so the
-** rest of the compiler doesn't have to work with invalid sizes).
-*/
-
-unsigned TypeOf (const Type* T);
-/* Get the code generator base type of the object */
-
-Type* Indirect (Type* T);
-/* Do one indirection for the given type, that is, return the type where the
-** given type points to.
-*/
-
-Type* ArrayToPtr (Type* T);
-/* Convert an array to a pointer to it's first element */
-
-#if defined(HAVE_INLINE)
-INLINE TypeCode GetType (const Type* T)
-/* Get the raw type */
-{
-    return (T->C & T_MASK_TYPE);
-}
-#else
-#  define GetType(T)    ((T)->C & T_MASK_TYPE)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsTypeChar (const Type* T)
-/* Return true if this is a character type */
-{
-    return (GetType (T) == T_TYPE_CHAR);
-}
-#else
-#  define IsTypeChar(T)         (GetType (T) == T_TYPE_CHAR)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsTypeInt (const Type* T)
-/* Return true if this is an int type (signed or unsigned) */
-{
-    return (GetType (T) == T_TYPE_INT);
-}
-#else
-#  define IsTypeInt(T)          (GetType (T) == T_TYPE_INT)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsTypeLong (const Type* T)
-/* Return true if this is a long type (signed or unsigned) */
-{
-    return (GetType (T) == T_TYPE_LONG);
-}
-#else
-#  define IsTypeLong(T)         (GetType (T) == T_TYPE_LONG)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsTypeFloat (const Type* T)
-/* Return true if this is a float type */
-{
-    return (GetType (T) == T_TYPE_FLOAT);
-}
-#else
-#  define IsTypeFloat(T)        (GetType (T) == T_TYPE_FLOAT)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsTypeDouble (const Type* T)
-/* Return true if this is a double type */
-{
-    return (GetType (T) == T_TYPE_DOUBLE);
-}
-#else
-#  define IsTypeDouble(T)       (GetType (T) == T_TYPE_DOUBLE)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsTypePtr (const Type* T)
-/* Return true if this is a pointer type */
-{
-    return (GetType (T) == T_TYPE_PTR);
-}
-#else
-#  define IsTypePtr(T)          (GetType (T) == T_TYPE_PTR)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsTypeStruct (const Type* T)
-/* Return true if this is a struct type */
-{
-    return (GetType (T) == T_TYPE_STRUCT);
-}
-#else
-#  define IsTypeStruct(T)       (GetType (T) == T_TYPE_STRUCT)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsTypeUnion (const Type* T)
-/* Return true if this is a union type */
-{
-    return (GetType (T) == T_TYPE_UNION);
-}
-#else
-#  define IsTypeUnion(T)       (GetType (T) == T_TYPE_UNION)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsTypeArray (const Type* T)
-/* Return true if this is an array type */
-{
-    return (GetType (T) == T_TYPE_ARRAY);
-}
-#else
-#  define IsTypeArray(T)        (GetType (T) == T_TYPE_ARRAY)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsTypeVoid (const Type* T)
-/* Return true if this is a void type */
-{
-    return (GetType (T) == T_TYPE_VOID);
-}
-#else
-#  define IsTypeVoid(T)         (GetType (T) == T_TYPE_VOID)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsTypeFunc (const Type* T)
-/* Return true if this is a function class */
-{
-    return (GetType (T) == T_TYPE_FUNC);
-}
-#else
-#  define IsTypeFunc(T)         (GetType (T) == T_TYPE_FUNC)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsTypeFuncPtr (const Type* T)
-/* Return true if this is a function pointer */
-{
-    return (IsTypePtr (T) && IsTypeFunc (T+1));
-}
-#else
-#  define IsTypeFuncPtr(T)      (IsTypePtr (T) && IsTypeFunc (T+1))
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE TypeCode GetClass (const Type* T)
-/* Get the class of a type string */
-{
-    return (T->C & T_MASK_CLASS);
-}
-#else
-#  define GetClass(T)    ((T)->C & T_MASK_CLASS)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsClassInt (const Type* T)
-/* Return true if this is an integer type */
-{
-    return (GetClass (T) == T_CLASS_INT);
-}
-#else
-#  define IsClassInt(T)         (GetClass (T) == T_CLASS_INT)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsClassFloat (const Type* T)
-/* Return true if this is a float type */
-{
-    return (GetClass (T) == T_CLASS_FLOAT);
-}
-#else
-#  define IsClassFloat(T)       (GetClass (T) == T_CLASS_FLOAT)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsClassPtr (const Type* T)
-/* Return true if this is a pointer type */
-{
-    return (GetClass (T) == T_CLASS_PTR);
-}
-#else
-#  define IsClassPtr(T)         (GetClass (T) == T_CLASS_PTR)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsClassStruct (const Type* T)
-/* Return true if this is a struct type */
-{
-    return (GetClass (T) == T_CLASS_STRUCT);
-}
-#else
-#  define IsClassStruct(T)      (GetClass (T) == T_CLASS_STRUCT)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsClassFunc (const Type* T)
-/* Return true if this is a function type */
-{
-    return (GetClass (T) == T_CLASS_FUNC);
-}
-#else
-#  define IsClassFunc(T)        (GetClass (T) == T_CLASS_FUNC)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE TypeCode GetSignedness (const Type* T)
-/* Get the sign of a type */
-{
-    return (T->C & T_MASK_SIGN);
-}
-#else
-#  define GetSignedness(T)      ((T)->C & T_MASK_SIGN)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsSignUnsigned (const Type* T)
-/* Return true if this is an unsigned type */
-{
-    return (GetSignedness (T) == T_SIGN_UNSIGNED);
-}
-#else
-#  define IsSignUnsigned(T)     (GetSignedness (T) == T_SIGN_UNSIGNED)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsSignSigned (const Type* T)
-/* Return true if this is a signed type */
-{
-    return (GetSignedness (T) == T_SIGN_SIGNED);
-}
-#else
-#  define IsSignSigned(T)       (GetSignedness (T) == T_SIGN_SIGNED)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE TypeCode GetQualifier (const Type* T)
-/* Get the qualifier from the given type string */
-{
-    return (T->C & T_MASK_QUAL);
-}
-#else
-#  define GetQualifier(T)      ((T)->C & T_MASK_QUAL)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsQualConst (const Type* T)
-/* Return true if the given type has a const memory image */
-{
-    return (T->C & T_QUAL_CONST) != 0;
-}
-#else
-#  define IsQualConst(T)        (((T)->C & T_QUAL_CONST) != 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsQualVolatile (const Type* T)
-/* Return true if the given type has a volatile type qualifier */
-{
-    return (T->C & T_QUAL_VOLATILE) != 0;
-}
-#else
-#  define IsQualVolatile(T)     (((T)->C & T_QUAL_VOLATILE) != 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsQualRestrict (const Type* T)
-/* Return true if the given type has a restrict qualifier */
-{
-    return (T->C & T_QUAL_RESTRICT) != 0;
-}
-#else
-#  define IsQualRestrict(T)     (((T)->C & T_QUAL_RESTRICT) != 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsQualNear (const Type* T)
-/* Return true if the given type has a near qualifier */
-{
-    return (T->C & T_QUAL_NEAR) != 0;
-}
-#else
-#  define IsQualNear(T)         (((T)->C & T_QUAL_NEAR) != 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsQualFar (const Type* T)
-/* Return true if the given type has a far qualifier */
-{
-    return (T->C & T_QUAL_FAR) != 0;
-}
-#else
-#  define IsQualFar(T)          (((T)->C & T_QUAL_FAR) != 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsQualFastcall (const Type* T)
-/* Return true if the given type has a fastcall qualifier */
-{
-    return (T->C & T_QUAL_FASTCALL) != 0;
-}
-#else
-#  define IsQualFastcall(T)     (((T)->C & T_QUAL_FASTCALL) != 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsQualCDecl (const Type* T)
-/* Return true if the given type has a cdecl qualifier */
-{
-    return (T->C & T_QUAL_CDECL) != 0;
-}
-#else
-#  define IsQualCDecl(T)        (((T)->C & T_QUAL_CDECL) != 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IsQualCConv (const Type* T)
-/* Return true if the given type has a calling convention qualifier */
-{
-    return (T->C & T_QUAL_CCONV) != 0;
-}
-#else
-#  define IsQualCConv(T)        (((T)->C & T_QUAL_CCONV) != 0)
-#endif
-
-int IsVariadicFunc (const Type* T) attribute ((const));
-/* Return true if this is a function type or pointer to function type with
-** variable parameter list
-*/
-
-#if defined(HAVE_INLINE)
-INLINE TypeCode GetSizeModifier (const Type* T)
-/* Get the size modifier of a type */
-{
-    return (T->C & T_MASK_SIZE);
-}
-#else
-#  define GetSizeModifier(T)      ((T)->C & T_MASK_SIZE)
-#endif
-
-FuncDesc* GetFuncDesc (const Type* T) attribute ((const));
-/* Get the FuncDesc pointer from a function or pointer-to-function type */
-
-void SetFuncDesc (Type* T, FuncDesc* F);
-/* Set the FuncDesc pointer in a function or pointer-to-function type */
-
-Type* GetFuncReturn (Type* T) attribute ((const));
-/* Return a pointer to the return type of a function or pointer-to-function type */
-
-long GetElementCount (const Type* T);
-/* Get the element count of the array specified in T (which must be of
-** array type).
-*/
-
-void SetElementCount (Type* T, long Count);
-/* Set the element count of the array specified in T (which must be of
-** array type).
-*/
-
-Type* GetElementType (Type* T);
-/* Return the element type of the given array type. */
-
-Type* GetBaseElementType (Type* T);
-/* Return the base element type of a given type. If T is not an array, this
-** will return. Otherwise it will return the base element type, which means
-** the element type that is not an array.
-*/
-
-struct SymEntry* GetSymEntry (const Type* T) attribute ((const));
-/* Return a SymEntry pointer from a type */
-
-void SetSymEntry (Type* T, struct SymEntry* S);
-/* Set the SymEntry pointer for a type */
-
-Type* IntPromotion (Type* T);
-/* Apply the integer promotions to T and return the result. The returned type
-** string may be T if there is no need to change it.
-*/
-
-Type* PtrConversion (Type* T);
-/* If the type is a function, convert it to pointer to function. If the
-** expression is an array, convert it to pointer to first element. Otherwise
-** return T.
-*/
-
-TypeCode AddrSizeQualifier (unsigned AddrSize);
-/* Return T_QUAL_NEAR or T_QUAL_FAR depending on the address size */
-
-#if defined(HAVE_INLINE)
-INLINE TypeCode CodeAddrSizeQualifier (void)
-/* Return T_QUAL_NEAR or T_QUAL_FAR depending on the code address size */
-{
-    return AddrSizeQualifier (CodeAddrSize);
-}
-#else
-#  define CodeAddrSizeQualifier()      (AddrSizeQualifier (CodeAddrSize))
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE TypeCode DataAddrSizeQualifier (void)
-/* Return T_QUAL_NEAR or T_QUAL_FAR depending on the data address size */
-{
-    return AddrSizeQualifier (DataAddrSize);
-}
-#else
-#  define DataAddrSizeQualifier()      (AddrSizeQualifier (DataAddrSize))
-#endif
-
-
-
-/* End of datatype.h */
-
-#endif
diff --git a/src/cc65/declare.c b/src/cc65/declare.c
deleted file mode 100644 (file)
index 1630848..0000000
+++ /dev/null
@@ -1,2251 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 declare.c                                 */
-/*                                                                           */
-/*                 Parse variable and function declarations                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2015, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "addrsize.h"
-#include "mmodel.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "anonname.h"
-#include "codegen.h"
-#include "datatype.h"
-#include "declare.h"
-#include "declattr.h"
-#include "error.h"
-#include "expr.h"
-#include "funcdesc.h"
-#include "function.h"
-#include "global.h"
-#include "litpool.h"
-#include "pragma.h"
-#include "scanner.h"
-#include "standard.h"
-#include "symtab.h"
-#include "typeconv.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-typedef struct StructInitData StructInitData;
-struct StructInitData {
-    unsigned    Size;                   /* Size of struct */
-    unsigned    Offs;                   /* Current offset in struct */
-    unsigned    BitVal;                 /* Summed up bit-field value */
-    unsigned    ValBits;                /* Valid bits in Val */
-};
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers);
-/* Parse a type specifier */
-
-static unsigned ParseInitInternal (Type* T, int AllowFlexibleMembers);
-/* Parse initialization of variables. Return the number of data bytes. */
-
-
-
-/*****************************************************************************/
-/*                            Internal functions                             */
-/*****************************************************************************/
-
-
-
-static void DuplicateQualifier (const char* Name)
-/* Print an error message */
-{
-    Warning ("Duplicate qualifier: `%s'", Name);
-}
-
-
-
-static TypeCode OptionalQualifiers (TypeCode Allowed)
-/* Read type qualifiers if we have any. Allowed specifies the allowed
-** qualifiers.
-*/
-{
-    /* We start without any qualifiers */
-    TypeCode Q = T_QUAL_NONE;
-
-    /* Check for more qualifiers */
-    while (1) {
-
-        switch (CurTok.Tok) {
-
-            case TOK_CONST:
-                if (Allowed & T_QUAL_CONST) {
-                    if (Q & T_QUAL_CONST) {
-                        DuplicateQualifier ("const");
-                    }
-                    Q |= T_QUAL_CONST;
-                } else {
-                    goto Done;
-                }
-                break;
-
-            case TOK_VOLATILE:
-                if (Allowed & T_QUAL_VOLATILE) {
-                    if (Q & T_QUAL_VOLATILE) {
-                        DuplicateQualifier ("volatile");
-                    }
-                    Q |= T_QUAL_VOLATILE;
-                } else {
-                    goto Done;
-                }
-                break;
-
-            case TOK_RESTRICT:
-                if (Allowed & T_QUAL_RESTRICT) {
-                    if (Q & T_QUAL_RESTRICT) {
-                        DuplicateQualifier ("restrict");
-                    }
-                    Q |= T_QUAL_RESTRICT;
-                } else {
-                    goto Done;
-                }
-                break;
-
-            case TOK_NEAR:
-                if (Allowed & T_QUAL_NEAR) {
-                    if (Q & T_QUAL_NEAR) {
-                        DuplicateQualifier ("near");
-                    }
-                    Q |= T_QUAL_NEAR;
-                } else {
-                    goto Done;
-                }
-                break;
-
-            case TOK_FAR:
-                if (Allowed & T_QUAL_FAR) {
-                    if (Q & T_QUAL_FAR) {
-                        DuplicateQualifier ("far");
-                    }
-                    Q |= T_QUAL_FAR;
-                } else {
-                    goto Done;
-                }
-                break;
-
-            case TOK_FASTCALL:
-                if (Allowed & T_QUAL_FASTCALL) {
-                    if (Q & T_QUAL_FASTCALL) {
-                        DuplicateQualifier ("fastcall");
-                    }
-                    Q |= T_QUAL_FASTCALL;
-                } else {
-                    goto Done;
-                }
-                break;
-
-            case TOK_CDECL:
-                if (Allowed & T_QUAL_CDECL) {
-                    if (Q & T_QUAL_CDECL) {
-                        DuplicateQualifier ("cdecl");
-                    }
-                    Q |= T_QUAL_CDECL;
-                } else {
-                    goto Done;
-                }
-                break;
-
-            default:
-                goto Done;
-
-        }
-
-        /* Skip the token */
-        NextToken ();
-    }
-
-Done:
-    /* We cannot have more than one address size far qualifier */
-    switch (Q & T_QUAL_ADDRSIZE) {
-
-        case T_QUAL_NONE:
-        case T_QUAL_NEAR:
-        case T_QUAL_FAR:
-            break;
-
-        default:
-            Error ("Cannot specify more than one address size qualifier");
-            Q &= ~T_QUAL_ADDRSIZE;
-    }
-
-    /* We cannot have more than one calling convention specifier */
-    switch (Q & T_QUAL_CCONV) {
-
-        case T_QUAL_NONE:
-        case T_QUAL_FASTCALL:
-        case T_QUAL_CDECL:
-            break;
-
-        default:
-            Error ("Cannot specify more than one calling convention qualifier");
-            Q &= ~T_QUAL_CCONV;
-    }
-
-    /* Return the qualifiers read */
-    return Q;
-}
-
-
-
-static void OptionalInt (void)
-/* Eat an optional "int" token */
-{
-    if (CurTok.Tok == TOK_INT) {
-        /* Skip it */
-        NextToken ();
-    }
-}
-
-
-
-static void OptionalSigned (void)
-/* Eat an optional "signed" token */
-{
-    if (CurTok.Tok == TOK_SIGNED) {
-        /* Skip it */
-        NextToken ();
-    }
-}
-
-
-
-static void InitDeclSpec (DeclSpec* D)
-/* Initialize the DeclSpec struct for use */
-{
-    D->StorageClass     = 0;
-    D->Type[0].C        = T_END;
-    D->Flags            = 0;
-}
-
-
-
-static void InitDeclaration (Declaration* D)
-/* Initialize the Declaration struct for use */
-{
-    D->Ident[0]   = '\0';
-    D->Type[0].C  = T_END;
-    D->Index      = 0;
-    D->Attributes = 0;
-}
-
-
-
-static void NeedTypeSpace (Declaration* D, unsigned Count)
-/* Check if there is enough space for Count type specifiers within D */
-{
-    if (D->Index + Count >= MAXTYPELEN) {
-        /* We must call Fatal() here, since calling Error() will try to
-        ** continue, and the declaration type is not correctly terminated
-        ** in case we come here.
-        */
-        Fatal ("Too many type specifiers");
-    }
-}
-
-
-
-static void AddTypeToDeclaration (Declaration* D, TypeCode T)
-/* Add a type specifier to the type of a declaration */
-{
-    NeedTypeSpace (D, 1);
-    D->Type[D->Index++].C = T;
-}
-
-
-
-static void FixQualifiers (Type* DataType)
-/* Apply several fixes to qualifiers */
-{
-    Type*    T;
-    TypeCode Q;
-
-    /* Using typedefs, it is possible to generate declarations that have
-    ** type qualifiers attached to an array, not the element type. Go and
-    ** fix these here.
-    */
-    T = DataType;
-    Q = T_QUAL_NONE;
-    while (T->C != T_END) {
-        if (IsTypeArray (T)) {
-            /* Extract any type qualifiers */
-            Q |= GetQualifier (T);
-            T->C = UnqualifiedType (T->C);
-        } else {
-            /* Add extracted type qualifiers here */
-            T->C |= Q;
-            Q = T_QUAL_NONE;
-        }
-        ++T;
-    }
-    /* Q must be empty now */
-    CHECK (Q == T_QUAL_NONE);
-
-    /* Do some fixes on pointers and functions. */
-    T = DataType;
-    while (T->C != T_END) {
-        if (IsTypePtr (T)) {
-            /* Calling convention qualifier on the pointer? */
-            if (IsQualCConv (T)) {
-                /* Pull the convention off of the pointer */
-                Q = T[0].C & T_QUAL_CCONV;
-                T[0].C &= ~T_QUAL_CCONV;
-
-                /* Pointer to a function which doesn't have an explicit convention? */
-                if (IsTypeFunc (T + 1)) {
-                    if (IsQualCConv (T + 1)) {
-                        if ((T[1].C & T_QUAL_CCONV) == Q) {
-                            Warning ("Pointer duplicates function's calling convention");
-                        } else {
-                            Error ("Function's and pointer's calling conventions are different");
-                        }
-                    } else {
-                        if (Q == T_QUAL_FASTCALL && IsVariadicFunc (T + 1)) {
-                            Error ("Variadic-function pointers cannot be __fastcall__");
-                        } else {
-                            /* Move the qualifier from the pointer to the function. */
-                            T[1].C |= Q;
-                        }
-                    }
-                } else {
-                    Error ("Not pointer to a function; can't use a calling convention");
-                }
-            }
-
-            /* Apply the default far and near qualifiers if none are given */
-            Q = (T[0].C & T_QUAL_ADDRSIZE);
-            if (Q == T_QUAL_NONE) {
-                /* No address size qualifiers specified */
-                if (IsTypeFunc (T+1)) {
-                    /* Pointer to function. Use the qualifier from the function,
-                    ** or the default if the function doesn't have one.
-                    */
-                    Q = (T[1].C & T_QUAL_ADDRSIZE);
-                    if (Q == T_QUAL_NONE) {
-                        Q = CodeAddrSizeQualifier ();
-                    }
-                } else {
-                    Q = DataAddrSizeQualifier ();
-                }
-                T[0].C |= Q;
-            } else {
-                /* We have address size qualifiers. If followed by a function,
-                ** apply them to the function also.
-                */
-                if (IsTypeFunc (T+1)) {
-                    TypeCode FQ = (T[1].C & T_QUAL_ADDRSIZE);
-                    if (FQ == T_QUAL_NONE) {
-                        T[1].C |= Q;
-                    } else if (FQ != Q) {
-                        Error ("Address size qualifier mismatch");
-                        T[1].C = (T[1].C & ~T_QUAL_ADDRSIZE) | Q;
-                    }
-                }
-            }
-
-        } else if (IsTypeFunc (T)) {
-
-            /* Apply the default far and near qualifiers if none are given */
-            if ((T[0].C & T_QUAL_ADDRSIZE) == 0) {
-                T[0].C |= CodeAddrSizeQualifier ();
-            }
-
-        }
-        ++T;
-    }
-}
-
-
-
-static void ParseStorageClass (DeclSpec* D, unsigned DefStorage)
-/* Parse a storage class */
-{
-    /* Assume we're using an explicit storage class */
-    D->Flags &= ~DS_DEF_STORAGE;
-
-    /* Check the storage class given */
-    switch (CurTok.Tok) {
-
-        case TOK_EXTERN:
-            D->StorageClass = SC_EXTERN | SC_STATIC;
-            NextToken ();
-            break;
-
-        case TOK_STATIC:
-            D->StorageClass = SC_STATIC;
-            NextToken ();
-            break;
-
-        case TOK_REGISTER:
-            D->StorageClass = SC_REGISTER | SC_STATIC;
-            NextToken ();
-            break;
-
-        case TOK_AUTO:
-            D->StorageClass = SC_AUTO;
-            NextToken ();
-            break;
-
-        case TOK_TYPEDEF:
-            D->StorageClass = SC_TYPEDEF;
-            NextToken ();
-            break;
-
-        default:
-            /* No storage class given, use default */
-            D->Flags |= DS_DEF_STORAGE;
-            D->StorageClass = DefStorage;
-            break;
-    }
-}
-
-
-
-static void ParseEnumDecl (void)
-/* Process an enum declaration . */
-{
-    int EnumVal;
-    ident Ident;
-
-    /* Accept forward definitions */
-    if (CurTok.Tok != TOK_LCURLY) {
-        return;
-    }
-
-    /* Skip the opening curly brace */
-    NextToken ();
-
-    /* Read the enum tags */
-    EnumVal = 0;
-    while (CurTok.Tok != TOK_RCURLY) {
-
-        /* We expect an identifier */
-        if (CurTok.Tok != TOK_IDENT) {
-            Error ("Identifier expected");
-            continue;
-        }
-
-        /* Remember the identifier and skip it */
-        strcpy (Ident, CurTok.Ident);
-        NextToken ();
-
-        /* Check for an assigned value */
-        if (CurTok.Tok == TOK_ASSIGN) {
-            ExprDesc Expr;
-            NextToken ();
-            ConstAbsIntExpr (hie1, &Expr);
-            EnumVal = Expr.IVal;
-        }
-
-        /* Add an entry to the symbol table */
-        AddConstSym (Ident, type_int, SC_ENUM, EnumVal++);
-
-        /* Check for end of definition */
-        if (CurTok.Tok != TOK_COMMA)
-            break;
-        NextToken ();
-    }
-    ConsumeRCurly ();
-}
-
-
-
-static int ParseFieldWidth (Declaration* Decl)
-/* Parse an optional field width. Returns -1 if no field width is specified,
-** otherwise the width of the field.
-*/
-{
-    ExprDesc Expr;
-
-    if (CurTok.Tok != TOK_COLON) {
-        /* No bit-field declaration */
-        return -1;
-    }
-
-    /* Read the width */
-    NextToken ();
-    ConstAbsIntExpr (hie1, &Expr);
-    if (Expr.IVal < 0) {
-        Error ("Negative width in bit-field");
-        return -1;
-    }
-    if (Expr.IVal > (int) INT_BITS) {
-        Error ("Width of bit-field exceeds its type");
-        return -1;
-    }
-    if (Expr.IVal == 0 && Decl->Ident[0] != '\0') {
-        Error ("Zero width for named bit-field");
-        return -1;
-    }
-    if (!IsTypeInt (Decl->Type)) {
-        /* Only integer types may be used for bit-fields */
-        Error ("Bit-field has invalid type");
-        return -1;
-    }
-
-    /* Return the field width */
-    return (int) Expr.IVal;
-}
-
-
-
-static SymEntry* StructOrUnionForwardDecl (const char* Name, unsigned Type)
-/* Handle a struct or union forward decl */
-{
-    /* Try to find a struct/union with the given name. If there is none,
-    ** insert a forward declaration into the current lexical level.
-    */
-    SymEntry* Entry = FindTagSym (Name);
-    if (Entry == 0) {
-        Entry = AddStructSym (Name, Type, 0, 0);
-    } else if ((Entry->Flags & SC_TYPEMASK) != Type) {
-        /* Already defined, but no struct */
-        Error ("Symbol `%s' is already different kind", Name);
-    }
-    return Entry;
-}
-
-
-
-static unsigned CopyAnonStructFields (const Declaration* Decl, int Offs)
-/* Copy fields from an anon union/struct into the current lexical level. The
-** function returns the size of the embedded struct/union.
-*/
-{
-    /* Get the pointer to the symbol table entry of the anon struct */
-    SymEntry* Entry = GetSymEntry (Decl->Type);
-
-    /* Get the size of the anon struct */
-    unsigned Size = Entry->V.S.Size;
-
-    /* Get the symbol table containing the fields. If it is empty, there has
-    ** been an error before, so bail out.
-    */
-    SymTable* Tab = Entry->V.S.SymTab;
-    if (Tab == 0) {
-        /* Incomplete definition - has been flagged before */
-        return Size;
-    }
-
-    /* Get a pointer to the list of symbols. Then walk the list adding copies
-    ** of the embedded struct to the current level.
-    */
-    Entry = Tab->SymHead;
-    while (Entry) {
-
-        /* Enter a copy of this symbol adjusting the offset. We will just
-        ** reuse the type string here.
-        */
-        AddLocalSym (Entry->Name, Entry->Type, SC_STRUCTFIELD, Offs + Entry->V.Offs);
-
-        /* Currently, there can not be any attributes, but if there will be
-        ** some in the future, we want to know this.
-        */
-        CHECK (Entry->Attr == 0);
-
-        /* Next entry */
-        Entry = Entry->NextSym;
-    }
-
-    /* Return the size of the embedded struct */
-    return Size;
-}
-
-
-
-static SymEntry* ParseUnionDecl (const char* Name)
-/* Parse a union declaration. */
-{
-
-    unsigned  UnionSize;
-    unsigned  FieldSize;
-    int       FieldWidth;       /* Width in bits, -1 if not a bit-field */
-    SymTable* FieldTab;
-
-
-    if (CurTok.Tok != TOK_LCURLY) {
-        /* Just a forward declaration. */
-        return StructOrUnionForwardDecl (Name, SC_UNION);
-    }
-
-    /* Add a forward declaration for the struct in the current lexical level */
-    AddStructSym (Name, SC_UNION, 0, 0);
-
-    /* Skip the curly brace */
-    NextToken ();
-
-    /* Enter a new lexical level for the struct */
-    EnterStructLevel ();
-
-    /* Parse union fields */
-    UnionSize      = 0;
-    while (CurTok.Tok != TOK_RCURLY) {
-
-        /* Get the type of the entry */
-        DeclSpec Spec;
-        InitDeclSpec (&Spec);
-        ParseTypeSpec (&Spec, -1, T_QUAL_NONE);
-
-        /* Read fields with this type */
-        while (1) {
-
-            Declaration Decl;
-
-            /* Get type and name of the struct field */
-            ParseDecl (&Spec, &Decl, DM_ACCEPT_IDENT);
-
-            /* Check for a bit-field declaration */
-            FieldWidth = ParseFieldWidth (&Decl);
-
-            /* Ignore zero sized bit fields in a union */
-            if (FieldWidth == 0) {
-                goto NextMember;
-            }
-
-            /* Check for fields without a name */
-            if (Decl.Ident[0] == '\0') {
-                /* In cc65 mode, we allow anonymous structs/unions within
-                ** a struct.
-                */
-                if (IS_Get (&Standard) >= STD_CC65 && IsClassStruct (Decl.Type)) {
-                    /* This is an anonymous struct or union. Copy the fields
-                    ** into the current level.
-                    */
-                    CopyAnonStructFields (&Decl, 0);
-
-                } else {
-                    /* A non bit-field without a name is legal but useless */
-                    Warning ("Declaration does not declare anything");
-                }
-                goto NextMember;
-            }
-
-            /* Handle sizes */
-            FieldSize = CheckedSizeOf (Decl.Type);
-            if (FieldSize > UnionSize) {
-                UnionSize = FieldSize;
-            }
-
-            /* Add a field entry to the table. */
-            if (FieldWidth > 0) {
-                AddBitField (Decl.Ident, 0, 0, FieldWidth);
-            } else {
-                AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, 0);
-            }
-
-NextMember: if (CurTok.Tok != TOK_COMMA) {
-                break;
-            }
-            NextToken ();
-        }
-        ConsumeSemi ();
-    }
-
-    /* Skip the closing brace */
-    NextToken ();
-
-    /* Remember the symbol table and leave the struct level */
-    FieldTab = GetSymTab ();
-    LeaveStructLevel ();
-
-    /* Make a real entry from the forward decl and return it */
-    return AddStructSym (Name, SC_UNION, UnionSize, FieldTab);
-}
-
-
-
-static SymEntry* ParseStructDecl (const char* Name)
-/* Parse a struct declaration. */
-{
-
-    unsigned  StructSize;
-    int       FlexibleMember;
-    int       BitOffs;          /* Bit offset for bit-fields */
-    int       FieldWidth;       /* Width in bits, -1 if not a bit-field */
-    SymTable* FieldTab;
-
-
-    if (CurTok.Tok != TOK_LCURLY) {
-        /* Just a forward declaration. */
-        return StructOrUnionForwardDecl (Name, SC_STRUCT);
-    }
-
-    /* Add a forward declaration for the struct in the current lexical level */
-    AddStructSym (Name, SC_STRUCT, 0, 0);
-
-    /* Skip the curly brace */
-    NextToken ();
-
-    /* Enter a new lexical level for the struct */
-    EnterStructLevel ();
-
-    /* Parse struct fields */
-    FlexibleMember = 0;
-    StructSize     = 0;
-    BitOffs        = 0;
-    while (CurTok.Tok != TOK_RCURLY) {
-
-        /* Get the type of the entry */
-        DeclSpec Spec;
-        InitDeclSpec (&Spec);
-        ParseTypeSpec (&Spec, -1, T_QUAL_NONE);
-
-        /* Read fields with this type */
-        while (1) {
-
-            Declaration Decl;
-            ident       Ident;
-
-            /* If we had a flexible array member before, no other fields can
-            ** follow.
-            */
-            if (FlexibleMember) {
-                Error ("Flexible array member must be last field");
-                FlexibleMember = 0;     /* Avoid further errors */
-            }
-
-            /* Get type and name of the struct field */
-            ParseDecl (&Spec, &Decl, DM_ACCEPT_IDENT);
-
-            /* Check for a bit-field declaration */
-            FieldWidth = ParseFieldWidth (&Decl);
-
-            /* If this is not a bit field, or the bit field is too large for
-            ** the remainder of the current member, or we have a bit field
-            ** with width zero, align the struct to the next member by adding
-            ** a member with an anonymous name.
-            */
-            if (BitOffs > 0) {
-                if (FieldWidth <= 0 || (BitOffs + FieldWidth) > (int) INT_BITS) {
-
-                    /* We need an anonymous name */
-                    AnonName (Ident, "bit-field");
-
-                    /* Add an anonymous bit-field that aligns to the next
-                    ** storage unit.
-                    */
-                    AddBitField (Ident, StructSize, BitOffs, INT_BITS - BitOffs);
-
-                    /* No bits left */
-                    StructSize += SIZEOF_INT;
-                    BitOffs = 0;
-                }
-            }
-
-            /* Apart from the above, a bit field with width 0 is not processed
-            ** further.
-            */
-            if (FieldWidth == 0) {
-                goto NextMember;
-            }
-
-            /* Check if this field is a flexible array member, and
-            ** calculate the size of the field.
-            */
-            if (IsTypeArray (Decl.Type) && GetElementCount (Decl.Type) == UNSPECIFIED) {
-                /* Array with unspecified size */
-                if (StructSize == 0) {
-                    Error ("Flexible array member cannot be first struct field");
-                }
-                FlexibleMember = 1;
-                /* Assume zero for size calculations */
-                SetElementCount (Decl.Type, FLEXIBLE);
-            }
-
-            /* Check for fields without names */
-            if (Decl.Ident[0] == '\0') {
-                if (FieldWidth < 0) {
-                    /* In cc65 mode, we allow anonymous structs/unions within
-                    ** a struct.
-                    */
-                    if (IS_Get (&Standard) >= STD_CC65 && IsClassStruct (Decl.Type)) {
-
-                        /* This is an anonymous struct or union. Copy the
-                        ** fields into the current level.
-                        */
-                        StructSize += CopyAnonStructFields (&Decl, StructSize);
-
-                    } else {
-                        /* A non bit-field without a name is legal but useless */
-                        Warning ("Declaration does not declare anything");
-                    }
-                    goto NextMember;
-                } else {
-                    /* A bit-field without a name will get an anonymous one */
-                    AnonName (Decl.Ident, "bit-field");
-                }
-            }
-
-            /* Add a field entry to the table */
-            if (FieldWidth > 0) {
-                /* Add full byte from the bit offset to the variable offset.
-                ** This simplifies handling he bit-field as a char type
-                ** in expressions.
-                */
-                unsigned Offs = StructSize + (BitOffs / CHAR_BITS);
-                AddBitField (Decl.Ident, Offs, BitOffs % CHAR_BITS, FieldWidth);
-                BitOffs += FieldWidth;
-                CHECK (BitOffs <= (int) INT_BITS);
-                if (BitOffs == INT_BITS) {
-                    StructSize += SIZEOF_INT;
-                    BitOffs = 0;
-                }
-            } else {
-                AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, StructSize);
-                if (!FlexibleMember) {
-                    StructSize += CheckedSizeOf (Decl.Type);
-                }
-            }
-
-NextMember: if (CurTok.Tok != TOK_COMMA) {
-                break;
-            }
-            NextToken ();
-        }
-        ConsumeSemi ();
-    }
-
-    /* If we have bits from bit-fields left, add them to the size. */
-    if (BitOffs > 0) {
-        StructSize += ((BitOffs + CHAR_BITS - 1) / CHAR_BITS);
-    }
-
-    /* Skip the closing brace */
-    NextToken ();
-
-    /* Remember the symbol table and leave the struct level */
-    FieldTab = GetSymTab ();
-    LeaveStructLevel ();
-
-    /* Make a real entry from the forward decl and return it */
-    return AddStructSym (Name, SC_STRUCT, StructSize, FieldTab);
-}
-
-
-
-static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers)
-/* Parse a type specifier */
-{
-    ident       Ident;
-    SymEntry*   Entry;
-
-    /* Assume we have an explicit type */
-    D->Flags &= ~DS_DEF_TYPE;
-
-    /* Read type qualifiers if we have any */
-    Qualifiers |= OptionalQualifiers (T_QUAL_CONST | T_QUAL_VOLATILE);
-
-    /* Look at the data type */
-    switch (CurTok.Tok) {
-
-        case TOK_VOID:
-            NextToken ();
-            D->Type[0].C = T_VOID;
-            D->Type[1].C = T_END;
-            break;
-
-        case TOK_CHAR:
-            NextToken ();
-            D->Type[0].C = GetDefaultChar();
-            D->Type[1].C = T_END;
-            break;
-
-        case TOK_LONG:
-            NextToken ();
-            if (CurTok.Tok == TOK_UNSIGNED) {
-                NextToken ();
-                OptionalInt ();
-                D->Type[0].C = T_ULONG;
-                D->Type[1].C = T_END;
-            } else {
-                OptionalSigned ();
-                OptionalInt ();
-                D->Type[0].C = T_LONG;
-                D->Type[1].C = T_END;
-            }
-            break;
-
-        case TOK_SHORT:
-            NextToken ();
-            if (CurTok.Tok == TOK_UNSIGNED) {
-                NextToken ();
-                OptionalInt ();
-                D->Type[0].C = T_USHORT;
-                D->Type[1].C = T_END;
-            } else {
-                OptionalSigned ();
-                OptionalInt ();
-                D->Type[0].C = T_SHORT;
-                D->Type[1].C = T_END;
-            }
-            break;
-
-        case TOK_INT:
-            NextToken ();
-            D->Type[0].C = T_INT;
-            D->Type[1].C = T_END;
-            break;
-
-       case TOK_SIGNED:
-            NextToken ();
-            switch (CurTok.Tok) {
-
-                case TOK_CHAR:
-                    NextToken ();
-                    D->Type[0].C = T_SCHAR;
-                    D->Type[1].C = T_END;
-                    break;
-
-                case TOK_SHORT:
-                    NextToken ();
-                    OptionalInt ();
-                    D->Type[0].C = T_SHORT;
-                    D->Type[1].C = T_END;
-                    break;
-
-                case TOK_LONG:
-                    NextToken ();
-                    OptionalInt ();
-                    D->Type[0].C = T_LONG;
-                    D->Type[1].C = T_END;
-                    break;
-
-                case TOK_INT:
-                    NextToken ();
-                    /* FALL THROUGH */
-
-                default:
-                    D->Type[0].C = T_INT;
-                    D->Type[1].C = T_END;
-                    break;
-            }
-            break;
-
-        case TOK_UNSIGNED:
-            NextToken ();
-            switch (CurTok.Tok) {
-
-                case TOK_CHAR:
-                    NextToken ();
-                    D->Type[0].C = T_UCHAR;
-                    D->Type[1].C = T_END;
-                    break;
-
-                case TOK_SHORT:
-                    NextToken ();
-                    OptionalInt ();
-                    D->Type[0].C = T_USHORT;
-                    D->Type[1].C = T_END;
-                    break;
-
-                case TOK_LONG:
-                    NextToken ();
-                    OptionalInt ();
-                    D->Type[0].C = T_ULONG;
-                    D->Type[1].C = T_END;
-                    break;
-
-                case TOK_INT:
-                    NextToken ();
-                    /* FALL THROUGH */
-
-                default:
-                    D->Type[0].C = T_UINT;
-                    D->Type[1].C = T_END;
-                    break;
-            }
-            break;
-
-        case TOK_FLOAT:
-            NextToken ();
-            D->Type[0].C = T_FLOAT;
-            D->Type[1].C = T_END;
-            break;
-
-        case TOK_DOUBLE:
-            NextToken ();
-            D->Type[0].C = T_DOUBLE;
-            D->Type[1].C = T_END;
-            break;
-
-        case TOK_UNION:
-            NextToken ();
-            /* */
-            if (CurTok.Tok == TOK_IDENT) {
-                strcpy (Ident, CurTok.Ident);
-                NextToken ();
-            } else {
-                AnonName (Ident, "union");
-            }
-            /* Remember we have an extra type decl */
-            D->Flags |= DS_EXTRA_TYPE;
-            /* Declare the union in the current scope */
-            Entry = ParseUnionDecl (Ident);
-            /* Encode the union entry into the type */
-            D->Type[0].C = T_UNION;
-            SetSymEntry (D->Type, Entry);
-            D->Type[1].C = T_END;
-            break;
-
-        case TOK_STRUCT:
-            NextToken ();
-            /* */
-            if (CurTok.Tok == TOK_IDENT) {
-                strcpy (Ident, CurTok.Ident);
-                NextToken ();
-            } else {
-                AnonName (Ident, "struct");
-            }
-            /* Remember we have an extra type decl */
-            D->Flags |= DS_EXTRA_TYPE;
-            /* Declare the struct in the current scope */
-            Entry = ParseStructDecl (Ident);
-            /* Encode the struct entry into the type */
-            D->Type[0].C = T_STRUCT;
-            SetSymEntry (D->Type, Entry);
-            D->Type[1].C = T_END;
-            break;
-
-        case TOK_ENUM:
-            NextToken ();
-            if (CurTok.Tok != TOK_LCURLY) {
-                /* Named enum */
-                if (CurTok.Tok == TOK_IDENT) {
-                    /* Find an entry with this name */
-                    Entry = FindTagSym (CurTok.Ident);
-                    if (Entry) {
-                        if (SymIsLocal (Entry) && (Entry->Flags & SC_ENUM) == 0) {
-                            Error ("Symbol `%s' is already different kind", Entry->Name);
-                        }
-                    } else {
-                        /* Insert entry into table ### */
-                    }
-                    /* Skip the identifier */
-                    NextToken ();
-                } else {
-                    Error ("Identifier expected");
-                }
-            }
-            /* Remember we have an extra type decl */
-            D->Flags |= DS_EXTRA_TYPE;
-            /* Parse the enum decl */
-            ParseEnumDecl ();
-            D->Type[0].C = T_INT;
-            D->Type[1].C = T_END;
-            break;
-
-        case TOK_IDENT:
-            Entry = FindSym (CurTok.Ident);
-            if (Entry && SymIsTypeDef (Entry)) {
-                /* It's a typedef */
-                NextToken ();
-                TypeCopy (D->Type, Entry->Type);
-                break;
-            }
-            /* FALL THROUGH */
-
-        default:
-            if (Default < 0) {
-                Error ("Type expected");
-                D->Type[0].C = T_INT;
-                D->Type[1].C = T_END;
-            } else {
-                D->Flags |= DS_DEF_TYPE;
-                D->Type[0].C = (TypeCode) Default;
-                D->Type[1].C = T_END;
-            }
-            break;
-    }
-
-    /* There may also be qualifiers *after* the initial type */
-    D->Type[0].C |= (Qualifiers | OptionalQualifiers (T_QUAL_CONST | T_QUAL_VOLATILE));
-}
-
-
-
-static Type* ParamTypeCvt (Type* T)
-/* If T is an array, convert it to a pointer else do nothing. Return the
-** resulting type.
-*/
-{
-    if (IsTypeArray (T)) {
-        T->C = T_PTR;
-    }
-    return T;
-}
-
-
-
-static void ParseOldStyleParamList (FuncDesc* F)
-/* Parse an old style (K&R) parameter list */
-{
-    /* Some fix point tokens that are used for error recovery */
-    static const token_t TokenList[] = { TOK_COMMA, TOK_RPAREN, TOK_SEMI };
-
-    /* Parse params */
-    while (CurTok.Tok != TOK_RPAREN) {
-
-        /* List of identifiers expected */
-        if (CurTok.Tok == TOK_IDENT) {
-
-            /* Create a symbol table entry with type int */
-            AddLocalSym (CurTok.Ident, type_int, SC_AUTO | SC_PARAM | SC_DEF | SC_DEFTYPE, 0);
-
-            /* Count arguments */
-            ++F->ParamCount;
-
-            /* Skip the identifier */
-            NextToken ();
-
-        } else {
-            /* Not a parameter name */
-            Error ("Identifier expected");
-
-            /* Try some smart error recovery */
-            SkipTokens (TokenList, sizeof(TokenList) / sizeof(TokenList[0]));
-        }
-
-        /* Check for more parameters */
-        if (CurTok.Tok == TOK_COMMA) {
-            NextToken ();
-        } else {
-            break;
-        }
-    }
-
-    /* Skip right paren. We must explicitly check for one here, since some of
-    ** the breaks above bail out without checking.
-    */
-    ConsumeRParen ();
-
-    /* An optional list of type specifications follows */
-    while (CurTok.Tok != TOK_LCURLY) {
-
-        DeclSpec        Spec;
-
-        /* Read the declaration specifier */
-        ParseDeclSpec (&Spec, SC_AUTO, T_INT);
-
-        /* We accept only auto and register as storage class specifiers, but
-        ** we ignore all this, since we use auto anyway.
-        */
-        if ((Spec.StorageClass & SC_AUTO) == 0 &&
-            (Spec.StorageClass & SC_REGISTER) == 0) {
-            Error ("Illegal storage class");
-        }
-
-        /* Parse a comma separated variable list */
-        while (1) {
-
-            Declaration         Decl;
-
-            /* Read the parameter */
-            ParseDecl (&Spec, &Decl, DM_NEED_IDENT);
-            if (Decl.Ident[0] != '\0') {
-
-                /* We have a name given. Search for the symbol */
-                SymEntry* Sym = FindLocalSym (Decl.Ident);
-                if (Sym) {
-                    /* Check if we already changed the type for this
-                    ** parameter
-                    */
-                    if (Sym->Flags & SC_DEFTYPE) {
-                        /* Found it, change the default type to the one given */
-                        ChangeSymType (Sym, ParamTypeCvt (Decl.Type));
-                        /* Reset the "default type" flag */
-                        Sym->Flags &= ~SC_DEFTYPE;
-                    } else {
-                        /* Type has already been changed */
-                        Error ("Redefinition for parameter `%s'", Sym->Name);
-                    }
-                } else {
-                    Error ("Unknown identifier: `%s'", Decl.Ident);
-                }
-            }
-
-            if (CurTok.Tok == TOK_COMMA) {
-                NextToken ();
-            } else {
-                break;
-            }
-
-        }
-
-        /* Variable list must be semicolon terminated */
-        ConsumeSemi ();
-    }
-}
-
-
-
-static void ParseAnsiParamList (FuncDesc* F)
-/* Parse a new style (ANSI) parameter list */
-{
-    /* Parse params */
-    while (CurTok.Tok != TOK_RPAREN) {
-
-        DeclSpec        Spec;
-        Declaration     Decl;
-        SymEntry*       Sym;
-
-        /* Allow an ellipsis as last parameter */
-        if (CurTok.Tok == TOK_ELLIPSIS) {
-            NextToken ();
-            F->Flags |= FD_VARIADIC;
-            break;
-        }
-
-        /* Read the declaration specifier */
-        ParseDeclSpec (&Spec, SC_AUTO, T_INT);
-
-        /* We accept only auto and register as storage class specifiers */
-        if ((Spec.StorageClass & SC_AUTO) == SC_AUTO) {
-            Spec.StorageClass = SC_AUTO | SC_PARAM | SC_DEF;
-        } else if ((Spec.StorageClass & SC_REGISTER) == SC_REGISTER) {
-            Spec.StorageClass = SC_REGISTER | SC_STATIC | SC_PARAM | SC_DEF;
-        } else {
-            Error ("Illegal storage class");
-            Spec.StorageClass = SC_AUTO | SC_PARAM | SC_DEF;
-        }
-
-        /* Allow parameters without a name, but remember if we had some to
-        ** eventually print an error message later.
-        */
-        ParseDecl (&Spec, &Decl, DM_ACCEPT_IDENT);
-        if (Decl.Ident[0] == '\0') {
-
-            /* Unnamed symbol. Generate a name that is not user accessible,
-            ** then handle the symbol normal.
-            */
-            AnonName (Decl.Ident, "param");
-            F->Flags |= FD_UNNAMED_PARAMS;
-
-            /* Clear defined bit on nonames */
-            Decl.StorageClass &= ~SC_DEF;
-        }
-
-        /* Parse attributes for this parameter */
-        ParseAttribute (&Decl);
-
-        /* Create a symbol table entry */
-        Sym = AddLocalSym (Decl.Ident, ParamTypeCvt (Decl.Type), Decl.StorageClass, 0);
-
-        /* Add attributes if we have any */
-        SymUseAttr (Sym, &Decl);
-
-        /* If the parameter is a struct or union, emit a warning */
-        if (IsClassStruct (Decl.Type)) {
-            if (IS_Get (&WarnStructParam)) {
-                Warning ("Passing struct by value for parameter `%s'", Decl.Ident);
-            }
-        }
-
-        /* Count arguments */
-        ++F->ParamCount;
-
-        /* Check for more parameters */
-        if (CurTok.Tok == TOK_COMMA) {
-            NextToken ();
-        } else {
-            break;
-        }
-    }
-
-    /* Skip right paren. We must explicitly check for one here, since some of
-    ** the breaks above bail out without checking.
-    */
-    ConsumeRParen ();
-}
-
-
-
-static FuncDesc* ParseFuncDecl (void)
-/* Parse the argument list of a function. */
-{
-    unsigned Offs;
-    SymEntry* Sym;
-
-    /* Create a new function descriptor */
-    FuncDesc* F = NewFuncDesc ();
-
-    /* Enter a new lexical level */
-    EnterFunctionLevel ();
-
-    /* Check for several special parameter lists */
-    if (CurTok.Tok == TOK_RPAREN) {
-        /* Parameter list is empty */
-        F->Flags |= (FD_EMPTY | FD_VARIADIC);
-    } else if (CurTok.Tok == TOK_VOID && NextTok.Tok == TOK_RPAREN) {
-        /* Parameter list declared as void */
-        NextToken ();
-        F->Flags |= FD_VOID_PARAM;
-    } else if (CurTok.Tok == TOK_IDENT &&
-               (NextTok.Tok == TOK_COMMA || NextTok.Tok == TOK_RPAREN)) {
-        /* If the identifier is a typedef, we have a new style parameter list,
-        ** if it's some other identifier, it's an old style parameter list.
-        */
-        Sym = FindSym (CurTok.Ident);
-        if (Sym == 0 || !SymIsTypeDef (Sym)) {
-            /* Old style (K&R) function. */
-            F->Flags |= FD_OLDSTYLE;
-        }
-    }
-
-    /* Parse params */
-    if ((F->Flags & FD_OLDSTYLE) == 0) {
-
-        /* New style function */
-        ParseAnsiParamList (F);
-
-    } else {
-        /* Old style function */
-        ParseOldStyleParamList (F);
-    }
-
-    /* Remember the last function parameter. We need it later for several
-    ** purposes, for example when passing stuff to fastcall functions. Since
-    ** more symbols are added to the table, it is easier if we remember it
-    ** now, since it is currently the last entry in the symbol table.
-    */
-    F->LastParam = GetSymTab()->SymTail;
-
-    /* Assign offsets. If the function has a variable parameter list,
-    ** there's one additional byte (the arg size).
-    */
-    Offs = (F->Flags & FD_VARIADIC)? 1 : 0;
-    Sym = F->LastParam;
-    while (Sym) {
-        unsigned Size = CheckedSizeOf (Sym->Type);
-        if (SymIsRegVar (Sym)) {
-            Sym->V.R.SaveOffs = Offs;
-        } else {
-            Sym->V.Offs = Offs;
-        }
-        Offs += Size;
-        F->ParamSize += Size;
-        Sym = Sym->PrevSym;
-    }
-
-    /* Leave the lexical level remembering the symbol tables */
-    RememberFunctionLevel (F);
-
-    /* Return the function descriptor */
-    return F;
-}
-
-
-
-static void Declarator (const DeclSpec* Spec, Declaration* D, declmode_t Mode)
-/* Recursively process declarators. Build a type array in reverse order. */
-{
-    /* Read optional function or pointer qualifiers. They modify the
-    ** identifier or token to the right. For convenience, we allow a calling
-    ** convention also for pointers here. If it's a pointer-to-function, the
-    ** qualifier later will be transfered to the function itself. If it's a
-    ** pointer to something else, it will be flagged as an error.
-    */
-    TypeCode Qualifiers = OptionalQualifiers (T_QUAL_ADDRSIZE | T_QUAL_CCONV);
-
-    /* Pointer to something */
-    if (CurTok.Tok == TOK_STAR) {
-
-        /* Skip the star */
-        NextToken ();
-
-        /* Allow const, restrict, and volatile qualifiers */
-        Qualifiers |= OptionalQualifiers (T_QUAL_CONST | T_QUAL_VOLATILE | T_QUAL_RESTRICT);
-
-        /* Parse the type that the pointer points to */
-        Declarator (Spec, D, Mode);
-
-        /* Add the type */
-        AddTypeToDeclaration (D, T_PTR | Qualifiers);
-        return;
-    }
-
-    if (CurTok.Tok == TOK_LPAREN) {
-        NextToken ();
-        Declarator (Spec, D, Mode);
-        ConsumeRParen ();
-    } else {
-        /* Things depend on Mode now:
-        **  - Mode == DM_NEED_IDENT means:
-        **      we *must* have a type and a variable identifer.
-        **  - Mode == DM_NO_IDENT means:
-        **      we must have a type but no variable identifer
-        **      (if there is one, it's not read).
-        **  - Mode == DM_ACCEPT_IDENT means:
-        **      we *may* have an identifier. If there is an identifier,
-        **      it is read, but it is no error, if there is none.
-        */
-        if (Mode == DM_NO_IDENT) {
-            D->Ident[0] = '\0';
-        } else if (CurTok.Tok == TOK_IDENT) {
-            strcpy (D->Ident, CurTok.Ident);
-            NextToken ();
-        } else {
-            if (Mode == DM_NEED_IDENT) {
-                Error ("Identifier expected");
-            }
-            D->Ident[0] = '\0';
-        }
-    }
-
-    while (CurTok.Tok == TOK_LBRACK || CurTok.Tok == TOK_LPAREN) {
-        if (CurTok.Tok == TOK_LPAREN) {
-
-            /* Function declaration */
-            FuncDesc* F;
-
-            /* Skip the opening paren */
-            NextToken ();
-
-            /* Parse the function declaration */
-            F = ParseFuncDecl ();
-
-            /* We cannot specify fastcall for variadic functions */
-            if ((F->Flags & FD_VARIADIC) && (Qualifiers & T_QUAL_FASTCALL)) {
-                Error ("Variadic functions cannot be __fastcall__");
-                Qualifiers &= ~T_QUAL_FASTCALL;
-            }
-
-            /* Add the function type. Be sure to bounds check the type buffer */
-            NeedTypeSpace (D, 1);
-            D->Type[D->Index].C = T_FUNC | Qualifiers;
-            D->Type[D->Index].A.P = F;
-            ++D->Index;
-
-            /* Qualifiers now used */
-            Qualifiers = T_QUAL_NONE;
-
-        } else {
-            /* Array declaration. */
-            long Size = UNSPECIFIED;
-
-            /* We cannot have any qualifiers for an array */
-            if (Qualifiers != T_QUAL_NONE) {
-                Error ("Invalid qualifiers for array");
-                Qualifiers = T_QUAL_NONE;
-            }
-
-            /* Skip the left bracket */
-            NextToken ();
-
-            /* Read the size if it is given */
-            if (CurTok.Tok != TOK_RBRACK) {
-                ExprDesc Expr;
-                ConstAbsIntExpr (hie1, &Expr);
-                if (Expr.IVal <= 0) {
-                    if (D->Ident[0] != '\0') {
-                        Error ("Size of array `%s' is invalid", D->Ident);
-                    } else {
-                        Error ("Size of array is invalid");
-                    }
-                    Expr.IVal = 1;
-                }
-                Size = Expr.IVal;
-            }
-
-            /* Skip the right bracket */
-            ConsumeRBrack ();
-
-            /* Add the array type with the size to the type */
-            NeedTypeSpace (D, 1);
-            D->Type[D->Index].C = T_ARRAY;
-            D->Type[D->Index].A.L = Size;
-            ++D->Index;
-        }
-    }
-
-    /* If we have remaining qualifiers, flag them as invalid */
-    if (Qualifiers & T_QUAL_NEAR) {
-        Error ("Invalid `__near__' qualifier");
-    }
-    if (Qualifiers & T_QUAL_FAR) {
-        Error ("Invalid `__far__' qualifier");
-    }
-    if (Qualifiers & T_QUAL_FASTCALL) {
-        Error ("Invalid `__fastcall__' qualifier");
-    }
-    if (Qualifiers & T_QUAL_CDECL) {
-        Error ("Invalid `__cdecl__' qualifier");
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                   code                                    */
-/*****************************************************************************/
-
-
-
-Type* ParseType (Type* T)
-/* Parse a complete type specification */
-{
-    DeclSpec Spec;
-    Declaration Decl;
-
-    /* Get a type without a default */
-    InitDeclSpec (&Spec);
-    ParseTypeSpec (&Spec, -1, T_QUAL_NONE);
-
-    /* Parse additional declarators */
-    ParseDecl (&Spec, &Decl, DM_NO_IDENT);
-
-    /* Copy the type to the target buffer */
-    TypeCopy (T, Decl.Type);
-
-    /* Return a pointer to the target buffer */
-    return T;
-}
-
-
-
-void ParseDecl (const DeclSpec* Spec, Declaration* D, declmode_t Mode)
-/* Parse a variable, type or function declaration */
-{
-    /* Initialize the Declaration struct */
-    InitDeclaration (D);
-
-    /* Get additional declarators and the identifier */
-    Declarator (Spec, D, Mode);
-
-    /* Add the base type. */
-    NeedTypeSpace (D, TypeLen (Spec->Type) + 1);        /* Bounds check */
-    TypeCopy (D->Type + D->Index, Spec->Type);
-
-    /* Use the storage class from the declspec */
-    D->StorageClass = Spec->StorageClass;
-
-    /* Do several fixes on qualifiers */
-    FixQualifiers (D->Type);
-
-    /* If we have a function, add a special storage class */
-    if (IsTypeFunc (D->Type)) {
-        D->StorageClass |= SC_FUNC;
-    }
-
-    /* Parse attributes for this declaration */
-    ParseAttribute (D);
-
-    /* Check several things for function or function pointer types */
-    if (IsTypeFunc (D->Type) || IsTypeFuncPtr (D->Type)) {
-
-        /* A function. Check the return type */
-        Type* RetType = GetFuncReturn (D->Type);
-
-        /* Functions may not return functions or arrays */
-        if (IsTypeFunc (RetType)) {
-            Error ("Functions are not allowed to return functions");
-        } else if (IsTypeArray (RetType)) {
-            Error ("Functions are not allowed to return arrays");
-        }
-
-        /* The return type must not be qualified */
-        if (GetQualifier (RetType) != T_QUAL_NONE && RetType[1].C == T_END) {
-
-            if (GetType (RetType) == T_TYPE_VOID) {
-                /* A qualified void type is always an error */
-                Error ("function definition has qualified void return type");
-            } else {
-                /* For others, qualifiers are ignored */
-                Warning ("type qualifiers ignored on function return type");
-                RetType[0].C = UnqualifiedType (RetType[0].C);
-            }
-        }
-
-        /* Warn about an implicit int return in the function */
-        if ((Spec->Flags & DS_DEF_TYPE) != 0 &&
-            RetType[0].C == T_INT && RetType[1].C == T_END) {
-            /* Function has an implicit int return. Output a warning if we don't
-            ** have the C89 standard enabled explicitly.
-            */
-            if (IS_Get (&Standard) >= STD_C99) {
-                Warning ("Implicit `int' return type is an obsolete feature");
-            }
-            GetFuncDesc (D->Type)->Flags |= FD_OLDSTYLE_INTRET;
-        }
-
-    }
-
-    /* For anthing that is not a function or typedef, check for an implicit
-    ** int declaration.
-    */
-    if ((D->StorageClass & SC_FUNC) != SC_FUNC &&
-        (D->StorageClass & SC_TYPEMASK) != SC_TYPEDEF) {
-        /* If the standard was not set explicitly to C89, print a warning
-        ** for variables with implicit int type.
-        */
-        if ((Spec->Flags & DS_DEF_TYPE) != 0 && IS_Get (&Standard) >= STD_C99) {
-            Warning ("Implicit `int' is an obsolete feature");
-        }
-    }
-
-    /* Check the size of the generated type */
-    if (!IsTypeFunc (D->Type) && !IsTypeVoid (D->Type)) {
-        unsigned Size = SizeOf (D->Type);
-        if (Size >= 0x10000) {
-            if (D->Ident[0] != '\0') {
-                Error ("Size of `%s' is invalid (0x%06X)", D->Ident, Size);
-            } else {
-                Error ("Invalid size in declaration (0x%06X)", Size);
-            }
-        }
-    }
-
-}
-
-
-
-void ParseDeclSpec (DeclSpec* D, unsigned DefStorage, long DefType)
-/* Parse a declaration specification */
-{
-    TypeCode Qualifiers;
-
-    /* Initialize the DeclSpec struct */
-    InitDeclSpec (D);
-
-    /* There may be qualifiers *before* the storage class specifier */
-    Qualifiers = OptionalQualifiers (T_QUAL_CONST | T_QUAL_VOLATILE);
-
-    /* Now get the storage class specifier for this declaration */
-    ParseStorageClass (D, DefStorage);
-
-    /* Parse the type specifiers passing any initial type qualifiers */
-    ParseTypeSpec (D, DefType, Qualifiers);
-}
-
-
-
-void CheckEmptyDecl (const DeclSpec* D)
-/* Called after an empty type declaration (that is, a type declaration without
-** a variable). Checks if the declaration does really make sense and issues a
-** warning if not.
-*/
-{
-    if ((D->Flags & DS_EXTRA_TYPE) == 0) {
-        Warning ("Useless declaration");
-    }
-}
-
-
-
-static void SkipInitializer (unsigned BracesExpected)
-/* Skip the remainder of an initializer in case of errors. Try to be somewhat
-** smart so we don't have too many following errors.
-*/
-{
-    while (CurTok.Tok != TOK_CEOF && CurTok.Tok != TOK_SEMI && BracesExpected > 0) {
-        switch (CurTok.Tok) {
-            case TOK_RCURLY:    --BracesExpected;   break;
-            case TOK_LCURLY:    ++BracesExpected;   break;
-            default:                                break;
-        }
-        NextToken ();
-    }
-}
-
-
-
-static unsigned OpeningCurlyBraces (unsigned BracesNeeded)
-/* Accept any number of opening curly braces around an initialization, skip
-** them and return the number. If the number of curly braces is less than
-** BracesNeeded, issue a warning.
-*/
-{
-    unsigned BraceCount = 0;
-    while (CurTok.Tok == TOK_LCURLY) {
-        ++BraceCount;
-        NextToken ();
-    }
-    if (BraceCount < BracesNeeded) {
-        Error ("`{' expected");
-    }
-    return BraceCount;
-}
-
-
-
-static void ClosingCurlyBraces (unsigned BracesExpected)
-/* Accept and skip the given number of closing curly braces together with
-** an optional comma. Output an error messages, if the input does not contain
-** the expected number of braces.
-*/
-{
-    while (BracesExpected) {
-        if (CurTok.Tok == TOK_RCURLY) {
-            NextToken ();
-        } else if (CurTok.Tok == TOK_COMMA && NextTok.Tok == TOK_RCURLY) {
-            NextToken ();
-            NextToken ();
-        } else {
-            Error ("`}' expected");
-            return;
-        }
-        --BracesExpected;
-    }
-}
-
-
-
-static void DefineData (ExprDesc* Expr)
-/* Output a data definition for the given expression */
-{
-    switch (ED_GetLoc (Expr)) {
-
-        case E_LOC_ABS:
-            /* Absolute: numeric address or const */
-            g_defdata (TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0);
-            break;
-
-        case E_LOC_GLOBAL:
-            /* Global variable */
-            g_defdata (CF_EXTERNAL, Expr->Name, Expr->IVal);
-            break;
-
-        case E_LOC_STATIC:
-        case E_LOC_LITERAL:
-            /* Static variable or literal in the literal pool */
-            g_defdata (CF_STATIC, Expr->Name, Expr->IVal);
-            break;
-
-        case E_LOC_REGISTER:
-            /* Register variable. Taking the address is usually not
-            ** allowed.
-            */
-            if (IS_Get (&AllowRegVarAddr) == 0) {
-                Error ("Cannot take the address of a register variable");
-            }
-            g_defdata (CF_REGVAR, Expr->Name, Expr->IVal);
-            break;
-
-        case E_LOC_STACK:
-        case E_LOC_PRIMARY:
-        case E_LOC_EXPR:
-            Error ("Non constant initializer");
-            break;
-
-        default:
-            Internal ("Unknown constant type: 0x%04X", ED_GetLoc (Expr));
-    }
-}
-
-
-
-static void OutputBitFieldData (StructInitData* SI)
-/* Output bit field data */
-{
-    /* Ignore if we have no data */
-    if (SI->ValBits > 0) {
-
-        /* Output the data */
-        g_defdata (CF_INT | CF_UNSIGNED | CF_CONST, SI->BitVal, 0);
-
-        /* Clear the data from SI and account for the size */
-        SI->BitVal  = 0;
-        SI->ValBits = 0;
-        SI->Offs   += SIZEOF_INT;
-    }
-}
-
-
-
-static void ParseScalarInitInternal (Type* T, ExprDesc* ED)
-/* Parse initializaton for scalar data types. This function will not output the
-** data but return it in ED.
-*/
-{
-    /* Optional opening brace */
-    unsigned BraceCount = OpeningCurlyBraces (0);
-
-    /* We warn if an initializer for a scalar contains braces, because this is
-    ** quite unusual and often a sign for some problem in the input.
-    */
-    if (BraceCount > 0) {
-        Warning ("Braces around scalar initializer");
-    }
-
-    /* Get the expression and convert it to the target type */
-    ConstExpr (hie1, ED);
-    TypeConversion (ED, T);
-
-    /* Close eventually opening braces */
-    ClosingCurlyBraces (BraceCount);
-}
-
-
-
-static unsigned ParseScalarInit (Type* T)
-/* Parse initializaton for scalar data types. Return the number of data bytes. */
-{
-    ExprDesc ED;
-
-    /* Parse initialization */
-    ParseScalarInitInternal (T, &ED);
-
-    /* Output the data */
-    DefineData (&ED);
-
-    /* Done */
-    return SizeOf (T);
-}
-
-
-
-static unsigned ParsePointerInit (Type* T)
-/* Parse initializaton for pointer data types. Return the number of data bytes. */
-{
-    /* Optional opening brace */
-    unsigned BraceCount = OpeningCurlyBraces (0);
-
-    /* Expression */
-    ExprDesc ED;
-    ConstExpr (hie1, &ED);
-    TypeConversion (&ED, T);
-
-    /* Output the data */
-    DefineData (&ED);
-
-    /* Close eventually opening braces */
-    ClosingCurlyBraces (BraceCount);
-
-    /* Done */
-    return SIZEOF_PTR;
-}
-
-
-
-static unsigned ParseArrayInit (Type* T, int AllowFlexibleMembers)
-/* Parse initializaton for arrays. Return the number of data bytes. */
-{
-    int Count;
-
-    /* Get the array data */
-    Type* ElementType    = GetElementType (T);
-    unsigned ElementSize = CheckedSizeOf (ElementType);
-    long ElementCount    = GetElementCount (T);
-
-    /* Special handling for a character array initialized by a literal */
-    if (IsTypeChar (ElementType) &&
-        (CurTok.Tok == TOK_SCONST || CurTok.Tok == TOK_WCSCONST ||
-        (CurTok.Tok == TOK_LCURLY &&
-         (NextTok.Tok == TOK_SCONST || NextTok.Tok == TOK_WCSCONST)))) {
-
-        /* Char array initialized by string constant */
-        int NeedParen;
-
-        /* If we initializer is enclosed in brackets, remember this fact and
-        ** skip the opening bracket.
-        */
-        NeedParen = (CurTok.Tok == TOK_LCURLY);
-        if (NeedParen) {
-            NextToken ();
-        }
-
-        /* Translate into target charset */
-        TranslateLiteral (CurTok.SVal);
-
-        /* If the array is one too small for the string literal, omit the
-        ** trailing zero.
-        */
-        Count = GetLiteralSize (CurTok.SVal);
-        if (ElementCount != UNSPECIFIED &&
-            ElementCount != FLEXIBLE    &&
-            Count        == ElementCount + 1) {
-            /* Omit the trailing zero */
-            --Count;
-        }
-
-        /* Output the data */
-        g_defbytes (GetLiteralStr (CurTok.SVal), Count);
-
-        /* Skip the string */
-        NextToken ();
-
-        /* If the initializer was enclosed in curly braces, we need a closing
-        ** one.
-        */
-        if (NeedParen) {
-            ConsumeRCurly ();
-        }
-
-    } else {
-
-        /* Curly brace */
-        ConsumeLCurly ();
-
-        /* Initialize the array members */
-        Count = 0;
-        while (CurTok.Tok != TOK_RCURLY) {
-            /* Flexible array members may not be initialized within
-            ** an array (because the size of each element may differ
-            ** otherwise).
-            */
-            ParseInitInternal (ElementType, 0);
-            ++Count;
-            if (CurTok.Tok != TOK_COMMA)
-                break;
-            NextToken ();
-        }
-
-        /* Closing curly braces */
-        ConsumeRCurly ();
-    }
-
-    if (ElementCount == UNSPECIFIED) {
-        /* Number of elements determined by initializer */
-        SetElementCount (T, Count);
-        ElementCount = Count;
-    } else if (ElementCount == FLEXIBLE && AllowFlexibleMembers) {
-        /* In non ANSI mode, allow initialization of flexible array
-        ** members.
-        */
-        ElementCount = Count;
-    } else if (Count < ElementCount) {
-        g_zerobytes ((ElementCount - Count) * ElementSize);
-    } else if (Count > ElementCount) {
-        Error ("Too many initializers");
-    }
-    return ElementCount * ElementSize;
-}
-
-
-
-static unsigned ParseStructInit (Type* T, int AllowFlexibleMembers)
-/* Parse initialization of a struct or union. Return the number of data bytes. */
-{
-    SymEntry*       Entry;
-    SymTable*       Tab;
-    StructInitData  SI;
-
-
-    /* Consume the opening curly brace */
-    ConsumeLCurly ();
-
-    /* Get a pointer to the struct entry from the type */
-    Entry = GetSymEntry (T);
-
-    /* Get the size of the struct from the symbol table entry */
-    SI.Size = Entry->V.S.Size;
-
-    /* Check if this struct definition has a field table. If it doesn't, it
-    ** is an incomplete definition.
-    */
-    Tab = Entry->V.S.SymTab;
-    if (Tab == 0) {
-        Error ("Cannot initialize variables with incomplete type");
-        /* Try error recovery */
-        SkipInitializer (1);
-        /* Nothing initialized */
-        return 0;
-    }
-
-    /* Get a pointer to the list of symbols */
-    Entry = Tab->SymHead;
-
-    /* Initialize fields */
-    SI.Offs    = 0;
-    SI.BitVal  = 0;
-    SI.ValBits = 0;
-    while (CurTok.Tok != TOK_RCURLY) {
-
-        /* */
-        if (Entry == 0) {
-            Error ("Too many initializers");
-            SkipInitializer (1);
-            return SI.Offs;
-        }
-
-        /* Parse initialization of one field. Bit-fields need a special
-        ** handling.
-        */
-        if (SymIsBitField (Entry)) {
-
-            ExprDesc ED;
-            unsigned Val;
-            unsigned Shift;
-
-            /* Calculate the bitmask from the bit-field data */
-            unsigned Mask = (1U << Entry->V.B.BitWidth) - 1U;
-
-            /* Safety ... */
-            CHECK (Entry->V.B.Offs * CHAR_BITS + Entry->V.B.BitOffs ==
-                   SI.Offs         * CHAR_BITS + SI.ValBits);
-
-            /* This may be an anonymous bit-field, in which case it doesn't
-            ** have an initializer.
-            */
-            if (IsAnonName (Entry->Name)) {
-                /* Account for the data and output it if we have a full word */
-                SI.ValBits += Entry->V.B.BitWidth;
-                CHECK (SI.ValBits <= INT_BITS);
-                if (SI.ValBits == INT_BITS) {
-                    OutputBitFieldData (&SI);
-                }
-                goto NextMember;
-            } else {
-                /* Read the data, check for a constant integer, do a range
-                ** check.
-                */
-                ParseScalarInitInternal (type_uint, &ED);
-                if (!ED_IsConstAbsInt (&ED)) {
-                    Error ("Constant initializer expected");
-                    ED_MakeConstAbsInt (&ED, 1);
-                }
-                if (ED.IVal > (long) Mask) {
-                    Warning ("Truncating value in bit-field initializer");
-                    ED.IVal &= (long) Mask;
-                }
-                Val = (unsigned) ED.IVal;
-            }
-
-            /* Add the value to the currently stored bit-field value */
-            Shift = (Entry->V.B.Offs - SI.Offs) * CHAR_BITS + Entry->V.B.BitOffs;
-            SI.BitVal |= (Val << Shift);
-
-            /* Account for the data and output it if we have a full word */
-            SI.ValBits += Entry->V.B.BitWidth;
-            CHECK (SI.ValBits <= INT_BITS);
-            if (SI.ValBits == INT_BITS) {
-                OutputBitFieldData (&SI);
-            }
-
-        } else {
-
-            /* Standard member. We should never have stuff from a
-            ** bit-field left
-            */
-            CHECK (SI.ValBits == 0);
-
-            /* Flexible array members may only be initialized if they are
-            ** the last field (or part of the last struct field).
-            */
-            SI.Offs += ParseInitInternal (Entry->Type, AllowFlexibleMembers && Entry->NextSym == 0);
-        }
-
-        /* More initializers? */
-        if (CurTok.Tok != TOK_COMMA) {
-            break;
-        }
-
-        /* Skip the comma */
-        NextToken ();
-
-NextMember:
-        /* Next member. For unions, only the first one can be initialized */
-        if (IsTypeUnion (T)) {
-            /* Union */
-            Entry = 0;
-        } else {
-            /* Struct */
-            Entry = Entry->NextSym;
-        }
-    }
-
-    /* Consume the closing curly brace */
-    ConsumeRCurly ();
-
-    /* If we have data from a bit-field left, output it now */
-    OutputBitFieldData (&SI);
-
-    /* If there are struct fields left, reserve additional storage */
-    if (SI.Offs < SI.Size) {
-        g_zerobytes (SI.Size - SI.Offs);
-        SI.Offs = SI.Size;
-    }
-
-    /* Return the actual number of bytes initialized. This number may be
-    ** larger than sizeof (Struct) if flexible array members are present and
-    ** were initialized (possible in non ANSI mode).
-    */
-    return SI.Offs;
-}
-
-
-
-static unsigned ParseVoidInit (void)
-/* Parse an initialization of a void variable (special cc65 extension).
-** Return the number of bytes initialized.
-*/
-{
-    ExprDesc Expr;
-    unsigned Size;
-
-    /* Opening brace */
-    ConsumeLCurly ();
-
-    /* Allow an arbitrary list of values */
-    Size = 0;
-    do {
-        ConstExpr (hie1, &Expr);
-        switch (UnqualifiedType (Expr.Type[0].C)) {
-
-            case T_SCHAR:
-            case T_UCHAR:
-                if (ED_IsConstAbsInt (&Expr)) {
-                    /* Make it byte sized */
-                    Expr.IVal &= 0xFF;
-                }
-                DefineData (&Expr);
-                Size += SIZEOF_CHAR;
-                break;
-
-            case T_SHORT:
-            case T_USHORT:
-            case T_INT:
-            case T_UINT:
-            case T_PTR:
-            case T_ARRAY:
-                if (ED_IsConstAbsInt (&Expr)) {
-                    /* Make it word sized */
-                    Expr.IVal &= 0xFFFF;
-                }
-                DefineData (&Expr);
-                Size += SIZEOF_INT;
-                break;
-
-            case T_LONG:
-            case T_ULONG:
-                if (ED_IsConstAbsInt (&Expr)) {
-                    /* Make it dword sized */
-                    Expr.IVal &= 0xFFFFFFFF;
-                }
-                DefineData (&Expr);
-                Size += SIZEOF_LONG;
-                break;
-
-            default:
-                Error ("Illegal type in initialization");
-                break;
-
-        }
-
-        if (CurTok.Tok != TOK_COMMA) {
-            break;
-        }
-        NextToken ();
-
-    } while (CurTok.Tok != TOK_RCURLY);
-
-    /* Closing brace */
-    ConsumeRCurly ();
-
-    /* Return the number of bytes initialized */
-    return Size;
-}
-
-
-
-static unsigned ParseInitInternal (Type* T, int AllowFlexibleMembers)
-/* Parse initialization of variables. Return the number of data bytes. */
-{
-    switch (UnqualifiedType (T->C)) {
-
-        case T_SCHAR:
-        case T_UCHAR:
-        case T_SHORT:
-        case T_USHORT:
-        case T_INT:
-        case T_UINT:
-        case T_LONG:
-        case T_ULONG:
-        case T_FLOAT:
-        case T_DOUBLE:
-            return ParseScalarInit (T);
-
-        case T_PTR:
-            return ParsePointerInit (T);
-
-        case T_ARRAY:
-            return ParseArrayInit (T, AllowFlexibleMembers);
-
-        case T_STRUCT:
-        case T_UNION:
-            return ParseStructInit (T, AllowFlexibleMembers);
-
-        case T_VOID:
-            if (IS_Get (&Standard) == STD_CC65) {
-                /* Special cc65 extension in non ANSI mode */
-                return ParseVoidInit ();
-            }
-            /* FALLTHROUGH */
-
-        default:
-            Error ("Illegal type");
-            return SIZEOF_CHAR;
-
-    }
-}
-
-
-
-unsigned ParseInit (Type* T)
-/* Parse initialization of variables. Return the number of data bytes. */
-{
-    /* Parse the initialization. Flexible array members can only be initialized
-    ** in cc65 mode.
-    */
-    unsigned Size = ParseInitInternal (T, IS_Get (&Standard) == STD_CC65);
-
-    /* The initialization may not generate code on global level, because code
-    ** outside function scope will never get executed.
-    */
-    if (HaveGlobalCode ()) {
-        Error ("Non constant initializers");
-        RemoveGlobalCode ();
-    }
-
-    /* Return the size needed for the initialization */
-    return Size;
-}
diff --git a/src/cc65/declare.h b/src/cc65/declare.h
deleted file mode 100644 (file)
index 117ac14..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 declare.h                                 */
-/*                                                                           */
-/*                 Parse variable and function declarations                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef DECLARE_H
-#define DECLARE_H
-
-
-
-/* common */
-#include "coll.h"
-
-/* cc65 */
-#include "scanner.h"
-#include "symtab.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Masks for the Flags field in DeclSpec */
-#define DS_DEF_STORAGE          0x0001U /* Default storage class used   */
-#define DS_DEF_TYPE             0x0002U /* Default type used            */
-#define DS_EXTRA_TYPE           0x0004U /* Extra type declared          */
-
-/* Result of ParseDeclSpec */
-typedef struct DeclSpec DeclSpec;
-struct DeclSpec {
-    unsigned    StorageClass;           /* One of the SC_xxx flags      */
-    Type        Type[MAXTYPELEN];       /* Type of the declaration spec */
-    unsigned    Flags;                  /* Bitmapped flags              */
-};
-
-/* Result of ParseDecl */
-typedef struct Declaration Declaration;
-struct Declaration {
-    unsigned    StorageClass;           /* A set of SC_xxx flags */
-    Type        Type[MAXTYPELEN];       /* The type */
-    ident       Ident;                  /* The identifier, if any*/
-    Collection* Attributes;             /* Attributes if any */
-
-    /* Working variables */
-    unsigned    Index;              /* Used to build Type */
-};
-
-/* Modes for ParseDecl */
-typedef enum {
-    DM_NEED_IDENT,                      /* We must have an identifier */
-    DM_NO_IDENT,                        /* We won't read an identifier */
-    DM_ACCEPT_IDENT,                    /* We will accept an id if there is one */
-} declmode_t;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Type* ParseType (Type* Type);
-/* Parse a complete type specification */
-
-void ParseDecl (const DeclSpec* Spec, Declaration* D, declmode_t Mode);
-/* Parse a variable, type or function declaration */
-
-void ParseDeclSpec (DeclSpec* D, unsigned DefStorage, long DefType);
-/* Parse a declaration specification */
-
-void CheckEmptyDecl (const DeclSpec* D);
-/* Called after an empty type declaration (that is, a type declaration without
-** a variable). Checks if the declaration does really make sense and issues a
-** warning if not.
-*/
-
-unsigned ParseInit (Type* T);
-/* Parse initialization of variables. Return the number of initialized data
-** bytes.
-*/
-
-
-
-/* End of declare.h */
-
-#endif
diff --git a/src/cc65/declattr.c b/src/cc65/declattr.c
deleted file mode 100644 (file)
index bdaea20..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                declattr.c                                 */
-/*                                                                           */
-/*                          Declaration attributes                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "xmalloc.h"
-
-/* cc65 */
-#include "declare.h"
-#include "declattr.h"
-#include "error.h"
-#include "scanner.h"
-#include "symtab.h"
-#include "typecmp.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Forwards for attribute handlers */
-static void NoReturnAttr (Declaration* D);
-static void UnusedAttr (Declaration* D);
-
-
-
-/* Attribute table */
-typedef struct AttrDesc AttrDesc;
-struct AttrDesc {
-    const char  Name[15];
-    void        (*Handler) (Declaration*);
-};
-static const AttrDesc AttrTable [] = {
-    { "__noreturn__",   NoReturnAttr    },
-    { "__unused__",     UnusedAttr      },
-    { "noreturn",       NoReturnAttr    },
-    { "unused",         UnusedAttr      },
-};
-
-
-
-/*****************************************************************************/
-/*                              Struct DeclAttr                              */
-/*****************************************************************************/
-
-
-
-static DeclAttr* NewDeclAttr (DeclAttrType AttrType)
-/* Create a new DeclAttr struct and return it */
-{
-    /* Allocate memory */
-    DeclAttr* A = xmalloc (sizeof (DeclAttr));
-
-    /* Initialize the fields */
-    A->AttrType = AttrType;
-
-    /* Return the new struct */
-    return A;
-}
-
-
-
-/*****************************************************************************/
-/*                             Helper functions                              */
-/*****************************************************************************/
-
-
-
-static const AttrDesc* FindAttribute (const char* Attr)
-/* Search the attribute and return the corresponding attribute descriptor.
-** Return NULL if the attribute name is not known.
-*/
-{
-    unsigned A;
-
-    /* For now do a linear search */
-    for (A = 0; A < sizeof (AttrTable) / sizeof (AttrTable[0]); ++A) {
-        if (strcmp (Attr, AttrTable[A].Name) == 0) {
-            /* Found */
-            return AttrTable + A;
-        }
-    }
-
-    /* Not found */
-    return 0;
-}
-
-
-
-static void ErrorSkip (void)
-{
-    /* List of tokens to skip */
-    static const token_t SkipList[] = { TOK_RPAREN, TOK_SEMI };
-
-    /* Skip until closing brace or semicolon */
-    SkipTokens (SkipList, sizeof (SkipList) / sizeof (SkipList[0]));
-
-    /* If we have a closing brace, read it, otherwise bail out */
-    if (CurTok.Tok == TOK_RPAREN) {
-        /* Read the two closing braces */
-        ConsumeRParen ();
-        ConsumeRParen ();
-    }
-}
-
-
-
-static void AddAttr (Declaration* D, DeclAttr* A)
-/* Add an attribute to a declaration */
-{
-    /* Allocate the list if necessary, the add the attribute */
-    if (D->Attributes == 0) {
-        D->Attributes = NewCollection ();
-    }
-    CollAppend (D->Attributes, A);
-}
-
-
-
-/*****************************************************************************/
-/*                          Attribute handling code                          */
-/*****************************************************************************/
-
-
-
-static void NoReturnAttr (Declaration* D)
-/* Parse the "noreturn" attribute */
-{
-    /* Add the noreturn attribute */
-    AddAttr (D, NewDeclAttr (atNoReturn));
-}
-
-
-
-static void UnusedAttr (Declaration* D)
-/* Parse the "unused" attribute */
-{
-    /* Add the noreturn attribute */
-    AddAttr (D, NewDeclAttr (atUnused));
-}
-
-
-
-void ParseAttribute (Declaration* D)
-/* Parse an additional __attribute__ modifier */
-{
-    /* Do we have an attribute? */
-    if (CurTok.Tok != TOK_ATTRIBUTE) {
-        /* No attribute, bail out */
-        return;
-    }
-
-    /* Skip the attribute token */
-    NextToken ();
-
-    /* Expect two(!) open braces */
-    ConsumeLParen ();
-    ConsumeLParen ();
-
-    /* Read a list of attributes */
-    while (1) {
-
-        ident           AttrName;
-        const AttrDesc* Attr = 0;
-
-        /* Identifier follows */
-        if (CurTok.Tok != TOK_IDENT) {
-
-            /* No attribute name */
-            Error ("Attribute name expected");
-
-            /* Skip until end of attribute */
-            ErrorSkip ();
-
-            /* Bail out */
-            return;
-        }
-
-        /* Map the attribute name to its id, then skip the identifier */
-        strcpy (AttrName, CurTok.Ident);
-        Attr = FindAttribute (AttrName);
-        NextToken ();
-
-        /* Did we find a valid attribute? */
-        if (Attr) {
-
-            /* Call the handler */
-            Attr->Handler (D);
-
-        } else {
-            /* Attribute not known, maybe typo */
-            Error ("Illegal attribute: `%s'", AttrName);
-
-            /* Skip until end of attribute */
-            ErrorSkip ();
-
-            /* Bail out */
-            return;
-        }
-
-        /* If a comma follows, there's a next attribute. Otherwise this is the
-        ** end of the attribute list.
-        */
-        if (CurTok.Tok != TOK_COMMA) {
-            break;
-        }
-        NextToken ();
-    }
-
-    /* The declaration is terminated with two closing braces */
-    ConsumeRParen ();
-    ConsumeRParen ();
-}
diff --git a/src/cc65/declattr.h b/src/cc65/declattr.h
deleted file mode 100644 (file)
index 63669ce..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                declattr.h                                 */
-/*                                                                           */
-/*                          Declaration attributes                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef DECLATTR_H
-#define DECLATTR_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Forward */
-struct Declaration;
-
-/* Supported attribute types */
-typedef enum {
-    atNoReturn,                 /* Function does not return */
-    atUnused,                   /* Symbol is unused - don't warn */
-} DeclAttrType;
-
-/* An actual attribute description */
-typedef struct DeclAttr DeclAttr;
-struct DeclAttr {
-    DeclAttrType                AttrType;       /* Type of attribute */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void ParseAttribute (struct Declaration* D);
-/* Parse an additional __attribute__ modifier */
-
-
-
-/* End of declattr.h */
-
-#endif
diff --git a/src/cc65/error.c b/src/cc65/error.c
deleted file mode 100644 (file)
index 5218d19..0000000
+++ /dev/null
@@ -1,323 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  error.c                                  */
-/*                                                                           */
-/*                  Error handling for the cc65 C compiler                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-/* common */
-#include "print.h"
-
-/* cc65 */
-#include "global.h"
-#include "input.h"
-#include "lineinfo.h"
-#include "scanner.h"
-#include "stmt.h"
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Count of errors/warnings */
-unsigned ErrorCount     = 0;
-unsigned WarningCount   = 0;
-
-/* Warning and error options */
-IntStack WarnEnable         = INTSTACK(1);  /* Enable warnings */
-IntStack WarningsAreErrors  = INTSTACK(0);  /* Treat warnings as errors */
-                                            /* Warn about: */
-IntStack WarnConstComparison= INTSTACK(1);  /* - constant comparison results */
-IntStack WarnNoEffect       = INTSTACK(1);  /* - statements without an effect */
-IntStack WarnStructParam    = INTSTACK(1);  /* - structs passed by val */
-IntStack WarnUnusedLabel    = INTSTACK(1);  /* - unused labels */
-IntStack WarnUnusedParam    = INTSTACK(1);  /* - unused parameters */
-IntStack WarnUnusedVar      = INTSTACK(1);  /* - unused variables */
-IntStack WarnUnknownPragma  = INTSTACK(1);  /* - unknown #pragmas */
-
-/* Map the name of a warning to the intstack that holds its state */
-typedef struct WarnMapEntry WarnMapEntry;
-struct WarnMapEntry {
-    IntStack*   Stack;
-    const char* Name;
-};
-static WarnMapEntry WarnMap[] = {
-    /* Keep sorted, even if this isn't used for now */
-    { &WarningsAreErrors,       "error"                 },
-    { &WarnConstComparison,     "const-comparison"      },
-    { &WarnNoEffect,            "no-effect"             },
-    { &WarnStructParam,         "struct-param"          },
-    { &WarnUnknownPragma,       "unknown-pragma"        },
-    { &WarnUnusedLabel,         "unused-label"          },
-    { &WarnUnusedParam,         "unused-param"          },
-    { &WarnUnusedVar,           "unused-var"            },
-};
-
-
-
-/*****************************************************************************/
-/*                         Handling of fatal errors                          */
-/*****************************************************************************/
-
-
-
-void Fatal (const char* Format, ...)
-/* Print a message about a fatal error and die */
-{
-    va_list ap;
-
-    const char* FileName;
-    unsigned    LineNum;
-    if (CurTok.LI) {
-        FileName = GetInputName (CurTok.LI);
-        LineNum  = GetInputLine (CurTok.LI);
-    } else {
-        FileName = GetCurrentFile ();
-        LineNum  = GetCurrentLine ();
-    }
-
-    fprintf (stderr, "%s(%u): Fatal: ", FileName, LineNum);
-
-    va_start (ap, Format);
-    vfprintf (stderr, Format, ap);
-    va_end (ap);
-    fprintf (stderr, "\n");
-
-    if (Line) {
-        Print (stderr, 1, "Input: %.*s\n", (int) SB_GetLen (Line), SB_GetConstBuf (Line));
-    }
-    exit (EXIT_FAILURE);
-}
-
-
-
-void Internal (const char* Format, ...)
-/* Print a message about an internal compiler error and die. */
-{
-    va_list ap;
-
-    const char* FileName;
-    unsigned    LineNum;
-    if (CurTok.LI) {
-        FileName = GetInputName (CurTok.LI);
-        LineNum  = GetInputLine (CurTok.LI);
-    } else {
-        FileName = GetCurrentFile ();
-        LineNum  = GetCurrentLine ();
-    }
-
-    fprintf (stderr, "%s(%u): Internal compiler error:\n",
-             FileName, LineNum);
-
-    va_start (ap, Format);
-    vfprintf (stderr, Format, ap);
-    va_end (ap);
-    fprintf (stderr, "\n");
-
-    if (Line) {
-        fprintf (stderr, "\nInput: %.*s\n", (int) SB_GetLen (Line), SB_GetConstBuf (Line));
-    }
-
-    /* Use abort to create a core dump */
-    abort ();
-}
-
-
-
-/*****************************************************************************/
-/*                            Handling of errors                             */
-/*****************************************************************************/
-
-
-
-static void IntError (const char* Filename, unsigned LineNo, const char* Msg, va_list ap)
-/* Print an error message - internal function*/
-{
-    fprintf (stderr, "%s(%u): Error: ", Filename, LineNo);
-    vfprintf (stderr, Msg, ap);
-    fprintf (stderr, "\n");
-
-    if (Line) {
-        Print (stderr, 1, "Input: %.*s\n", (int) SB_GetLen (Line), SB_GetConstBuf (Line));
-    }
-    ++ErrorCount;
-    if (ErrorCount > 10) {
-        Fatal ("Too many errors");
-    }
-}
-
-
-
-void Error (const char* Format, ...)
-/* Print an error message */
-{
-    va_list ap;
-    va_start (ap, Format);
-    IntError (GetInputName (CurTok.LI), GetInputLine (CurTok.LI), Format, ap);
-    va_end (ap);
-}
-
-
-
-void LIError (const LineInfo* LI, const char* Format, ...)
-/* Print an error message with the line info given explicitly */
-{
-    va_list ap;
-    va_start (ap, Format);
-    IntError (GetInputName (LI), GetInputLine (LI), Format, ap);
-    va_end (ap);
-}
-
-
-
-void PPError (const char* Format, ...)
-/* Print an error message. For use within the preprocessor.  */
-{
-    va_list ap;
-    va_start (ap, Format);
-    IntError (GetCurrentFile(), GetCurrentLine(), Format, ap);
-    va_end (ap);
-}
-
-
-
-/*****************************************************************************/
-/*                           Handling of warnings                            */
-/*****************************************************************************/
-
-
-
-static void IntWarning (const char* Filename, unsigned LineNo, const char* Msg, va_list ap)
-/* Print warning message - internal function. */
-{
-    if (IS_Get (&WarningsAreErrors)) {
-
-        /* Treat the warning as an error */
-        IntError (Filename, LineNo, Msg, ap);
-
-    } else if (IS_Get (&WarnEnable)) {
-
-        fprintf (stderr, "%s(%u): Warning: ", Filename, LineNo);
-        vfprintf (stderr, Msg, ap);
-        fprintf (stderr, "\n");
-
-        if (Line) {
-            Print (stderr, 1, "Input: %.*s\n", (int) SB_GetLen (Line), SB_GetConstBuf (Line));
-        }
-        ++WarningCount;
-
-    }
-}
-
-
-
-void Warning (const char* Format, ...)
-/* Print warning message. */
-{
-    va_list ap;
-    va_start (ap, Format);
-    IntWarning (GetInputName (CurTok.LI), GetInputLine (CurTok.LI), Format, ap);
-    va_end (ap);
-}
-
-
-
-void LIWarning (const LineInfo* LI, const char* Format, ...)
-/* Print a warning message with the line info given explicitly */
-{
-    va_list ap;
-    va_start (ap, Format);
-    IntWarning (GetInputName (LI), GetInputLine (LI), Format, ap);
-    va_end (ap);
-}
-
-
-
-void PPWarning (const char* Format, ...)
-/* Print warning message. For use within the preprocessor. */
-{
-    va_list ap;
-    va_start (ap, Format);
-    IntWarning (GetCurrentFile(), GetCurrentLine(), Format, ap);
-    va_end (ap);
-}
-
-
-
-IntStack* FindWarning (const char* Name)
-/* Search for a warning in the WarnMap table and return a pointer to the
-** intstack that holds its state. Return NULL if there is no such warning.
-*/
-{
-    unsigned I;
-
-    /* For now, do a linear search */
-    for (I = 0; I < sizeof(WarnMap) / sizeof (WarnMap[0]); ++I) {
-        if (strcmp (WarnMap[I].Name, Name) == 0) {
-            return WarnMap[I].Stack;
-        }
-    }
-    return 0;
-}
-
-
-
-void ListWarnings (FILE* F)
-/* Print a list of warning types/names to the given file */
-{
-    unsigned I;
-    for (I = 0; I < sizeof(WarnMap) / sizeof (WarnMap[0]); ++I) {
-        fprintf (F, "%s\n", WarnMap[I].Name);
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void ErrorReport (void)
-/* Report errors (called at end of compile) */
-{
-    Print (stdout, 1, "%u errors, %u warnings\n", ErrorCount, WarningCount);
-}
diff --git a/src/cc65/error.h b/src/cc65/error.h
deleted file mode 100644 (file)
index 9aec10c..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  error.h                                  */
-/*                                                                           */
-/*                  Error handling for the cc65 C compiler                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ERROR_H
-#define ERROR_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "attrib.h"
-#include "intstack.h"
-
-/* cc65 */
-#include "lineinfo.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Count of errors/warnings */
-extern unsigned ErrorCount;
-extern unsigned WarningCount;
-
-/* Warning and error options */
-extern IntStack WarnEnable;             /* Enable warnings */
-extern IntStack WarningsAreErrors;      /* Treat warnings as errors */
-                                        /* Warn about: */
-extern IntStack WarnConstComparison;    /* - constant comparison results */
-extern IntStack WarnNoEffect;           /* - statements without an effect */
-extern IntStack WarnStructParam;        /* - structs passed by val */
-extern IntStack WarnUnusedLabel;        /* - unused labels */
-extern IntStack WarnUnusedParam;        /* - unused parameters */
-extern IntStack WarnUnusedVar;          /* - unused variables */
-extern IntStack WarnUnknownPragma;      /* - unknown #pragmas */
-
-
-
-/*****************************************************************************/
-/*                                   code                                    */
-/*****************************************************************************/
-
-
-
-void Fatal (const char* Format, ...) attribute ((noreturn, format (printf, 1, 2)));
-/* Print a message about a fatal error and die */
-
-void Internal (const char* Format, ...) attribute ((noreturn, format (printf, 1, 2)));
-/* Print a message about an internal compiler error and die. */
-
-void Error (const char* Format, ...) attribute ((format (printf, 1, 2)));
-/* Print an error message */
-
-void LIError (const LineInfo* LI, const char* Format, ...) attribute ((format (printf, 2, 3)));
-/* Print an error message with the line info given explicitly */
-
-void PPError (const char* Format, ...) attribute ((format (printf, 1, 2)));
-/* Print an error message. For use within the preprocessor.  */
-
-void Warning (const char* Format, ...) attribute ((format (printf, 1, 2)));
-/* Print warning message. */
-
-void LIWarning (const LineInfo* LI, const char* Format, ...) attribute ((format (printf, 2, 3)));
-/* Print a warning message with the line info given explicitly */
-
-void PPWarning (const char* Format, ...) attribute ((format (printf, 1, 2)));
-/* Print warning message. For use within the preprocessor. */
-
-IntStack* FindWarning (const char* Name);
-/* Search for a warning in the WarnMap table and return a pointer to the
-** intstack that holds its state. Return NULL if there is no such warning.
-*/
-
-void ListWarnings (FILE* F);
-/* Print a list of warning types/names to the given file */
-
-void ErrorReport (void);
-/* Report errors (called at end of compile) */
-
-
-
-/* End of error.h */
-
-#endif
diff --git a/src/cc65/expr.c b/src/cc65/expr.c
deleted file mode 100644 (file)
index 64fc17e..0000000
+++ /dev/null
@@ -1,3599 +0,0 @@
-/* expr.c
-**
-** 1998-06-21, Ullrich von Bassewitz
-** 2015-06-26, Greg King
-*/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-
-/* common */
-#include "check.h"
-#include "debugflag.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "asmcode.h"
-#include "asmlabel.h"
-#include "asmstmt.h"
-#include "assignment.h"
-#include "codegen.h"
-#include "declare.h"
-#include "error.h"
-#include "funcdesc.h"
-#include "function.h"
-#include "global.h"
-#include "litpool.h"
-#include "loadexpr.h"
-#include "macrotab.h"
-#include "preproc.h"
-#include "scanner.h"
-#include "shiftexpr.h"
-#include "stackptr.h"
-#include "standard.h"
-#include "stdfunc.h"
-#include "symtab.h"
-#include "typecmp.h"
-#include "typeconv.h"
-#include "expr.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Generator attributes */
-#define GEN_NOPUSH      0x01            /* Don't push lhs */
-#define GEN_COMM        0x02            /* Operator is commutative */
-#define GEN_NOFUNC      0x04            /* Not allowed for function pointers */
-
-/* Map a generator function and its attributes to a token */
-typedef struct {
-    token_t       Tok;                  /* Token to map to */
-    unsigned      Flags;                /* Flags for generator function */
-    void          (*Func) (unsigned, unsigned long);    /* Generator func */
-} GenDesc;
-
-/* Descriptors for the operations */
-static GenDesc GenPASGN  = { TOK_PLUS_ASSIGN,   GEN_NOPUSH,     g_add };
-static GenDesc GenSASGN  = { TOK_MINUS_ASSIGN,  GEN_NOPUSH,     g_sub };
-static GenDesc GenMASGN  = { TOK_MUL_ASSIGN,    GEN_NOPUSH,     g_mul };
-static GenDesc GenDASGN  = { TOK_DIV_ASSIGN,    GEN_NOPUSH,     g_div };
-static GenDesc GenMOASGN = { TOK_MOD_ASSIGN,    GEN_NOPUSH,     g_mod };
-static GenDesc GenSLASGN = { TOK_SHL_ASSIGN,    GEN_NOPUSH,     g_asl };
-static GenDesc GenSRASGN = { TOK_SHR_ASSIGN,    GEN_NOPUSH,     g_asr };
-static GenDesc GenAASGN  = { TOK_AND_ASSIGN,    GEN_NOPUSH,     g_and };
-static GenDesc GenXOASGN = { TOK_XOR_ASSIGN,    GEN_NOPUSH,     g_xor };
-static GenDesc GenOASGN  = { TOK_OR_ASSIGN,     GEN_NOPUSH,     g_or  };
-
-
-
-/*****************************************************************************/
-/*                             Helper functions                              */
-/*****************************************************************************/
-
-
-
-static unsigned GlobalModeFlags (const ExprDesc* Expr)
-/* Return the addressing mode flags for the given expression */
-{
-    switch (ED_GetLoc (Expr)) {
-        case E_LOC_ABS:         return CF_ABSOLUTE;
-        case E_LOC_GLOBAL:      return CF_EXTERNAL;
-        case E_LOC_STATIC:      return CF_STATIC;
-        case E_LOC_REGISTER:    return CF_REGVAR;
-        case E_LOC_STACK:       return CF_NONE;
-        case E_LOC_PRIMARY:     return CF_NONE;
-        case E_LOC_EXPR:        return CF_NONE;
-        case E_LOC_LITERAL:     return CF_STATIC;       /* Same as static */
-        default:
-            Internal ("GlobalModeFlags: Invalid location flags value: 0x%04X", Expr->Flags);
-            /* NOTREACHED */
-            return 0;
-    }
-}
-
-
-
-void ExprWithCheck (void (*Func) (ExprDesc*), ExprDesc* Expr)
-/* Call an expression function with checks. */
-{
-    /* Remember the stack pointer */
-    int OldSP = StackPtr;
-
-    /* Call the expression function */
-    (*Func) (Expr);
-
-    /* Do some checks to see if code generation is still consistent */
-    if (StackPtr != OldSP) {
-        if (Debug) {
-            Error ("Code generation messed up: "
-                   "StackPtr is %d, should be %d",
-                   StackPtr, OldSP);
-        } else {
-            Internal ("Code generation messed up: "
-                      "StackPtr is %d, should be %d",
-                      StackPtr, OldSP);
-        }
-    }
-}
-
-
-
-void MarkedExprWithCheck (void (*Func) (ExprDesc*), ExprDesc* Expr)
-/* Call an expression function with checks and record start and end of the
-** generated code.
-*/
-{
-    CodeMark Start, End;
-    GetCodePos (&Start);
-    ExprWithCheck (Func, Expr);
-    GetCodePos (&End);
-    ED_SetCodeRange (Expr, &Start, &End);
-}
-
-
-
-static Type* promoteint (Type* lhst, Type* rhst)
-/* In an expression with two ints, return the type of the result */
-{
-    /* Rules for integer types:
-    **   - If one of the values is a long, the result is long.
-    **   - If one of the values is unsigned, the result is also unsigned.
-    **   - Otherwise the result is an int.
-    */
-    if (IsTypeLong (lhst) || IsTypeLong (rhst)) {
-        if (IsSignUnsigned (lhst) || IsSignUnsigned (rhst)) {
-            return type_ulong;
-        } else {
-            return type_long;
-        }
-    } else {
-        if (IsSignUnsigned (lhst) || IsSignUnsigned (rhst)) {
-            return type_uint;
-        } else {
-            return type_int;
-        }
-    }
-}
-
-
-
-static unsigned typeadjust (ExprDesc* lhs, ExprDesc* rhs, int NoPush)
-/* Adjust the two values for a binary operation. lhs is expected on stack or
-** to be constant, rhs is expected to be in the primary register or constant.
-** The function will put the type of the result into lhs and return the
-** code generator flags for the operation.
-** If NoPush is given, it is assumed that the operation does not expect the lhs
-** to be on stack, and that lhs is in a register instead.
-** Beware: The function does only accept int types.
-*/
-{
-    unsigned ltype, rtype;
-    unsigned flags;
-
-    /* Get the type strings */
-    Type* lhst = lhs->Type;
-    Type* rhst = rhs->Type;
-
-    /* Generate type adjustment code if needed */
-    ltype = TypeOf (lhst);
-    if (ED_IsLocAbs (lhs)) {
-        ltype |= CF_CONST;
-    }
-    if (NoPush) {
-        /* Value is in primary register*/
-        ltype |= CF_REG;
-    }
-    rtype = TypeOf (rhst);
-    if (ED_IsLocAbs (rhs)) {
-        rtype |= CF_CONST;
-    }
-    flags = g_typeadjust (ltype, rtype);
-
-    /* Set the type of the result */
-    lhs->Type = promoteint (lhst, rhst);
-
-    /* Return the code generator flags */
-    return flags;
-}
-
-
-
-static const GenDesc* FindGen (token_t Tok, const GenDesc* Table)
-/* Find a token in a generator table */
-{
-    while (Table->Tok != TOK_INVALID) {
-        if (Table->Tok == Tok) {
-            return Table;
-        }
-        ++Table;
-    }
-    return 0;
-}
-
-
-
-static int TypeSpecAhead (void)
-/* Return true if some sort of type is waiting (helper for cast and sizeof()
-** in hie10).
-*/
-{
-    SymEntry* Entry;
-
-    /* There's a type waiting if:
-    **
-    ** We have an opening paren, and
-    **   a.  the next token is a type, or
-    **   b.  the next token is a type qualifier, or
-    **   c.  the next token is a typedef'd type
-    */
-    return CurTok.Tok == TOK_LPAREN && (
-           TokIsType (&NextTok)                         ||
-           TokIsTypeQual (&NextTok)                     ||
-           (NextTok.Tok  == TOK_IDENT                   &&
-           (Entry = FindSym (NextTok.Ident)) != 0       &&
-           SymIsTypeDef (Entry)));
-}
-
-
-
-void PushAddr (const ExprDesc* Expr)
-/* If the expression contains an address that was somehow evaluated,
-** push this address on the stack. This is a helper function for all
-** sorts of implicit or explicit assignment functions where the lvalue
-** must be saved if it's not constant, before evaluating the rhs.
-*/
-{
-    /* Get the address on stack if needed */
-    if (ED_IsLocExpr (Expr)) {
-        /* Push the address (always a pointer) */
-        g_push (CF_PTR, 0);
-    }
-}
-
-
-
-static void WarnConstCompareResult (void)
-/* If the result of a comparison is constant, this is suspicious when not in
-** preprocessor mode.
-*/
-{
-    if (!Preprocessing && IS_Get (&WarnConstComparison) != 0) {
-        Warning ("Result of comparison is constant");
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                   code                                    */
-/*****************************************************************************/
-
-
-
-static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall)
-/* Parse a function parameter list and pass the parameters to the called
-** function. Depending on several criteria this may be done by just pushing
-** each parameter separately, or creating the parameter frame once and then
-** storing into this frame.
-** The function returns the size of the parameters pushed.
-*/
-{
-    ExprDesc Expr;
-
-    /* Initialize variables */
-    SymEntry* Param       = 0;  /* Keep gcc silent */
-    unsigned  ParamSize   = 0;  /* Size of parameters pushed */
-    unsigned  ParamCount  = 0;  /* Number of parameters pushed */
-    unsigned  FrameSize   = 0;  /* Size of parameter frame */
-    unsigned  FrameParams = 0;  /* Number of params in frame */
-    int       FrameOffs   = 0;  /* Offset into parameter frame */
-    int       Ellipsis    = 0;  /* Function is variadic */
-
-    /* As an optimization, we may allocate the complete parameter frame at
-    ** once instead of pushing each parameter as it comes. We may do that,
-    ** if...
-    **
-    **  - optimizations that increase code size are enabled (allocating the
-    **    stack frame at once gives usually larger code).
-    **  - we have more than one parameter to push (don't count the last param
-    **    for __fastcall__ functions).
-    **
-    ** The FrameSize variable will contain a value > 0 if storing into a frame
-    ** (instead of pushing) is enabled.
-    **
-    */
-    if (IS_Get (&CodeSizeFactor) >= 200) {
-
-        /* Calculate the number and size of the parameters */
-        FrameParams = Func->ParamCount;
-        FrameSize   = Func->ParamSize;
-        if (FrameParams > 0 && IsFastcall) {
-            /* Last parameter is not pushed */
-            FrameSize -= CheckedSizeOf (Func->LastParam->Type);
-            --FrameParams;
-        }
-
-        /* Do we have more than one parameter in the frame? */
-        if (FrameParams > 1) {
-            /* Okeydokey, setup the frame */
-            FrameOffs = StackPtr;
-            g_space (FrameSize);
-            StackPtr -= FrameSize;
-        } else {
-            /* Don't use a preallocated frame */
-            FrameSize = 0;
-        }
-    }
-
-    /* Parse the actual parameter list */
-    while (CurTok.Tok != TOK_RPAREN) {
-
-        unsigned Flags;
-
-        /* Count arguments */
-        ++ParamCount;
-
-        /* Fetch the pointer to the next argument, check for too many args */
-        if (ParamCount <= Func->ParamCount) {
-            /* Beware: If there are parameters with identical names, they
-            ** cannot go into the same symbol table, which means that in this
-            ** case of errorneous input, the number of nodes in the symbol
-            ** table and ParamCount are NOT equal. We have to handle this case
-            ** below to avoid segmentation violations. Since we know that this
-            ** problem can only occur if there is more than one parameter,
-            ** we will just use the last one.
-            */
-            if (ParamCount == 1) {
-                /* First argument */
-                Param = Func->SymTab->SymHead;
-            } else if (Param->NextSym != 0) {
-                /* Next argument */
-                Param = Param->NextSym;
-                CHECK ((Param->Flags & SC_PARAM) != 0);
-            }
-        } else if (!Ellipsis) {
-            /* Too many arguments. Do we have an open param list? */
-            if ((Func->Flags & FD_VARIADIC) == 0) {
-                /* End of param list reached, no ellipsis */
-                Error ("Too many arguments in function call");
-            }
-            /* Assume an ellipsis even in case of errors to avoid an error
-            ** message for each other argument.
-            */
-            Ellipsis = 1;
-        }
-
-        /* Evaluate the parameter expression */
-        hie1 (&Expr);
-
-        /* If we don't have an argument spec, accept anything, otherwise
-        ** convert the actual argument to the type needed.
-        */
-        Flags = CF_NONE;
-        if (!Ellipsis) {
-
-            /* Convert the argument to the parameter type if needed */
-            TypeConversion (&Expr, Param->Type);
-
-            /* If we have a prototype, chars may be pushed as chars */
-            Flags |= CF_FORCECHAR;
-
-        } else {
-
-            /* No prototype available. Convert array to "pointer to first
-            ** element", and function to "pointer to function".
-            */
-            Expr.Type = PtrConversion (Expr.Type);
-
-        }
-
-        /* Load the value into the primary if it is not already there */
-        LoadExpr (Flags, &Expr);
-
-        /* Use the type of the argument for the push */
-        Flags |= TypeOf (Expr.Type);
-
-        /* If this is a fastcall function, don't push the last argument */
-        if (ParamCount != Func->ParamCount || !IsFastcall) {
-            unsigned ArgSize = sizeofarg (Flags);
-            if (FrameSize > 0) {
-                /* We have the space already allocated, store in the frame.
-                ** Because of invalid type conversions (that have produced an
-                ** error before), we can end up here with a non-aligned stack
-                ** frame. Since no output will be generated anyway, handle
-                ** these cases gracefully instead of doing a CHECK.
-                */
-                if (FrameSize >= ArgSize) {
-                    FrameSize -= ArgSize;
-                } else {
-                    FrameSize = 0;
-                }
-                FrameOffs -= ArgSize;
-                /* Store */
-                g_putlocal (Flags | CF_NOKEEP, FrameOffs, Expr.IVal);
-            } else {
-                /* Push the argument */
-                g_push (Flags, Expr.IVal);
-            }
-
-            /* Calculate total parameter size */
-            ParamSize += ArgSize;
-        }
-
-        /* Check for end of argument list */
-        if (CurTok.Tok != TOK_COMMA) {
-            break;
-        }
-        NextToken ();
-    }
-
-    /* Check if we had enough parameters */
-    if (ParamCount < Func->ParamCount) {
-        Error ("Too few arguments in function call");
-    }
-
-    /* The function returns the size of all parameters pushed onto the stack.
-    ** However, if there are parameters missing (which is an error and was
-    ** flagged by the compiler) AND a stack frame was preallocated above,
-    ** we would loose track of the stackpointer and generate an internal error
-    ** later. So we correct the value by the parameters that should have been
-    ** pushed to avoid an internal compiler error. Since an error was
-    ** generated before, no code will be output anyway.
-    */
-    return ParamSize + FrameSize;
-}
-
-
-
-static void FunctionCall (ExprDesc* Expr)
-/* Perform a function call. */
-{
-    FuncDesc*     Func;           /* Function descriptor */
-    int           IsFuncPtr;      /* Flag */
-    unsigned      ParamSize;      /* Number of parameter bytes */
-    CodeMark      Mark;
-    int           PtrOffs = 0;    /* Offset of function pointer on stack */
-    int           IsFastcall = 0; /* True if it's a fast-call function */
-    int           PtrOnStack = 0; /* True if a pointer copy is on stack */
-
-    /* Skip the left paren */
-    NextToken ();
-
-    /* Get a pointer to the function descriptor from the type string */
-    Func = GetFuncDesc (Expr->Type);
-
-    /* Handle function pointers transparently */
-    IsFuncPtr = IsTypeFuncPtr (Expr->Type);
-    if (IsFuncPtr) {
-        /* Check whether it's a fastcall function that has parameters */
-        IsFastcall = (Func->Flags & FD_VARIADIC) == 0 && Func->ParamCount > 0 &&
-            (AutoCDecl ?
-             IsQualFastcall (Expr->Type + 1) :
-             !IsQualCDecl (Expr->Type + 1));
-
-        /* Things may be difficult, depending on where the function pointer
-        ** resides. If the function pointer is an expression of some sort
-        ** (not a local or global variable), we have to evaluate this
-        ** expression now and save the result for later. Since calls to
-        ** function pointers may be nested, we must save it onto the stack.
-        ** For fastcall functions we do also need to place a copy of the
-        ** pointer on stack, since we cannot use a/x.
-        */
-        PtrOnStack = IsFastcall || !ED_IsConst (Expr);
-        if (PtrOnStack) {
-
-            /* Not a global or local variable, or a fastcall function. Load
-            ** the pointer into the primary and mark it as an expression.
-            */
-            LoadExpr (CF_NONE, Expr);
-            ED_MakeRValExpr (Expr);
-
-            /* Remember the code position */
-            GetCodePos (&Mark);
-
-            /* Push the pointer onto the stack and remember the offset */
-            g_push (CF_PTR, 0);
-            PtrOffs = StackPtr;
-        }
-
-    } else {
-        /* Check function attributes */
-        if (Expr->Sym && SymHasAttr (Expr->Sym, atNoReturn)) {
-            /* For now, handle as if a return statement was encountered */
-            F_ReturnFound (CurrentFunc);
-        }
-
-        /* Check for known standard functions and inline them */
-        if (Expr->Name != 0) {
-            int StdFunc = FindStdFunc ((const char*) Expr->Name);
-            if (StdFunc >= 0) {
-                /* Inline this function */
-                HandleStdFunc (StdFunc, Func, Expr);
-                return;
-            }
-        }
-
-        /* If we didn't inline the function, get fastcall info */
-        IsFastcall = (Func->Flags & FD_VARIADIC) == 0 &&
-            (AutoCDecl ?
-             IsQualFastcall (Expr->Type) :
-             !IsQualCDecl (Expr->Type));
-    }
-
-    /* Parse the parameter list */
-    ParamSize = FunctionParamList (Func, IsFastcall);
-
-    /* We need the closing paren here */
-    ConsumeRParen ();
-
-    /* Special handling for function pointers */
-    if (IsFuncPtr) {
-
-        /* If the function is not a fastcall function, load the pointer to
-        ** the function into the primary.
-        */
-        if (!IsFastcall) {
-
-            /* Not a fastcall function - we may use the primary */
-            if (PtrOnStack) {
-                /* If we have no parameters, the pointer is still in the
-                ** primary. Remove the code to push it and correct the
-                ** stack pointer.
-                */
-                if (ParamSize == 0) {
-                    RemoveCode (&Mark);
-                    PtrOnStack = 0;
-                } else {
-                    /* Load from the saved copy */
-                    g_getlocal (CF_PTR, PtrOffs);
-                }
-            } else {
-                /* Load from original location */
-                LoadExpr (CF_NONE, Expr);
-            }
-
-            /* Call the function */
-            g_callind (TypeOf (Expr->Type+1), ParamSize, PtrOffs);
-
-        } else {
-
-            /* Fastcall function. We cannot use the primary for the function
-            ** pointer and must therefore use an offset to the stack location.
-            ** Since fastcall functions may never be variadic, we can use the
-            ** index register for this purpose.
-            */
-            g_callind (CF_LOCAL, ParamSize, PtrOffs);
-        }
-
-        /* If we have a pointer on stack, remove it */
-        if (PtrOnStack) {
-            g_drop (SIZEOF_PTR);
-            pop (CF_PTR);
-        }
-
-        /* Skip T_PTR */
-        ++Expr->Type;
-
-    } else {
-
-        /* Normal function */
-        g_call (TypeOf (Expr->Type), (const char*) Expr->Name, ParamSize);
-
-    }
-
-    /* The function result is an rvalue in the primary register */
-    ED_MakeRValExpr (Expr);
-    Expr->Type = GetFuncReturn (Expr->Type);
-}
-
-
-
-static void Primary (ExprDesc* E)
-/* This is the lowest level of the expression parser. */
-{
-    SymEntry* Sym;
-
-    /* Initialize fields in the expression stucture */
-    ED_Init (E);
-
-    /* Character and integer constants. */
-    if (CurTok.Tok == TOK_ICONST || CurTok.Tok == TOK_CCONST) {
-        E->IVal  = CurTok.IVal;
-        E->Flags = E_LOC_ABS | E_RTYPE_RVAL;
-        E->Type  = CurTok.Type;
-        NextToken ();
-        return;
-    }
-
-    /* Floating point constant */
-    if (CurTok.Tok == TOK_FCONST) {
-        E->FVal  = CurTok.FVal;
-        E->Flags = E_LOC_ABS | E_RTYPE_RVAL;
-        E->Type  = CurTok.Type;
-        NextToken ();
-        return;
-    }
-
-    /* Process parenthesized subexpression by calling the whole parser
-    ** recursively.
-    */
-    if (CurTok.Tok == TOK_LPAREN) {
-        NextToken ();
-        hie0 (E);
-        ConsumeRParen ();
-        return;
-    }
-
-    /* If we run into an identifier in preprocessing mode, we assume that this
-    ** is an undefined macro and replace it by a constant value of zero.
-    */
-    if (Preprocessing && CurTok.Tok == TOK_IDENT) {
-        NextToken ();
-        ED_MakeConstAbsInt (E, 0);
-        return;
-    }
-
-    /* All others may only be used if the expression evaluation is not called
-    ** recursively by the preprocessor.
-    */
-    if (Preprocessing) {
-        /* Illegal expression in PP mode */
-        Error ("Preprocessor expression expected");
-        ED_MakeConstAbsInt (E, 1);
-        return;
-    }
-
-    switch (CurTok.Tok) {
-
-        case TOK_IDENT:
-            /* Identifier. Get a pointer to the symbol table entry */
-            Sym = E->Sym = FindSym (CurTok.Ident);
-
-            /* Is the symbol known? */
-            if (Sym) {
-
-                /* We found the symbol - skip the name token */
-                NextToken ();
-
-                /* Check for illegal symbol types */
-                CHECK ((Sym->Flags & SC_LABEL) != SC_LABEL);
-                if (Sym->Flags & SC_TYPE) {
-                    /* Cannot use type symbols */
-                    Error ("Variable identifier expected");
-                    /* Assume an int type to make E valid */
-                    E->Flags = E_LOC_STACK | E_RTYPE_LVAL;
-                    E->Type  = type_int;
-                    return;
-                }
-
-                /* Mark the symbol as referenced */
-                Sym->Flags |= SC_REF;
-
-                /* The expression type is the symbol type */
-                E->Type = Sym->Type;
-
-                /* Check for legal symbol types */
-                if ((Sym->Flags & SC_CONST) == SC_CONST) {
-                    /* Enum or some other numeric constant */
-                    E->Flags = E_LOC_ABS | E_RTYPE_RVAL;
-                    E->IVal = Sym->V.ConstVal;
-                } else if ((Sym->Flags & SC_FUNC) == SC_FUNC) {
-                    /* Function */
-                    E->Flags = E_LOC_GLOBAL | E_RTYPE_LVAL;
-                    E->Name = (unsigned long) Sym->Name;
-                } else if ((Sym->Flags & SC_AUTO) == SC_AUTO) {
-                    /* Local variable. If this is a parameter for a variadic
-                    ** function, we have to add some address calculations, and the
-                    ** address is not const.
-                    */
-                    if ((Sym->Flags & SC_PARAM) == SC_PARAM && F_IsVariadic (CurrentFunc)) {
-                        /* Variadic parameter */
-                        g_leavariadic (Sym->V.Offs - F_GetParamSize (CurrentFunc));
-                        E->Flags = E_LOC_EXPR | E_RTYPE_LVAL;
-                    } else {
-                        /* Normal parameter */
-                        E->Flags = E_LOC_STACK | E_RTYPE_LVAL;
-                        E->IVal  = Sym->V.Offs;
-                    }
-                } else if ((Sym->Flags & SC_REGISTER) == SC_REGISTER) {
-                    /* Register variable, zero page based */
-                    E->Flags = E_LOC_REGISTER | E_RTYPE_LVAL;
-                    E->Name  = Sym->V.R.RegOffs;
-                } else if ((Sym->Flags & SC_STATIC) == SC_STATIC) {
-                    /* Static variable */
-                    if (Sym->Flags & (SC_EXTERN | SC_STORAGE)) {
-                        E->Flags = E_LOC_GLOBAL | E_RTYPE_LVAL;
-                        E->Name = (unsigned long) Sym->Name;
-                    } else {
-                        E->Flags = E_LOC_STATIC | E_RTYPE_LVAL;
-                        E->Name = Sym->V.Label;
-                    }
-                } else {
-                    /* Local static variable */
-                    E->Flags = E_LOC_STATIC | E_RTYPE_LVAL;
-                    E->Name  = Sym->V.Offs;
-                }
-
-                /* We've made all variables lvalues above. However, this is
-                ** not always correct: An array is actually the address of its
-                ** first element, which is a rvalue, and a function is a
-                ** rvalue, too, because we cannot store anything in a function.
-                ** So fix the flags depending on the type.
-                */
-                if (IsTypeArray (E->Type) || IsTypeFunc (E->Type)) {
-                    ED_MakeRVal (E);
-                }
-
-            } else {
-
-                /* We did not find the symbol. Remember the name, then skip it */
-                ident Ident;
-                strcpy (Ident, CurTok.Ident);
-                NextToken ();
-
-                /* IDENT is either an auto-declared function or an undefined variable. */
-                if (CurTok.Tok == TOK_LPAREN) {
-                    /* C99 doesn't allow calls to undefined functions, so
-                    ** generate an error and otherwise a warning. Declare a
-                    ** function returning int. For that purpose, prepare a
-                    ** function signature for a function having an empty param
-                    ** list and returning int.
-                    */
-                    if (IS_Get (&Standard) >= STD_C99) {
-                        Error ("Call to undefined function `%s'", Ident);
-                    } else {
-                        Warning ("Call to undefined function `%s'", Ident);
-                    }
-                    Sym = AddGlobalSym (Ident, GetImplicitFuncType(), SC_EXTERN | SC_REF | SC_FUNC);
-                    E->Type  = Sym->Type;
-                    E->Flags = E_LOC_GLOBAL | E_RTYPE_RVAL;
-                    E->Name  = (unsigned long) Sym->Name;
-                } else {
-                    /* Undeclared Variable */
-                    Sym = AddLocalSym (Ident, type_int, SC_AUTO | SC_REF, 0);
-                    E->Flags = E_LOC_STACK | E_RTYPE_LVAL;
-                    E->Type = type_int;
-                    Error ("Undefined symbol: `%s'", Ident);
-                }
-
-            }
-            break;
-
-        case TOK_SCONST:
-        case TOK_WCSCONST:
-            /* String literal */
-            E->LVal  = UseLiteral (CurTok.SVal);
-            E->Type  = GetCharArrayType (GetLiteralSize (CurTok.SVal));
-            E->Flags = E_LOC_LITERAL | E_RTYPE_RVAL;
-            E->IVal  = 0;
-            E->Name  = GetLiteralLabel (CurTok.SVal);
-            NextToken ();
-            break;
-
-        case TOK_ASM:
-            /* ASM statement */
-            AsmStatement ();
-            E->Flags = E_LOC_EXPR | E_RTYPE_RVAL;
-            E->Type  = type_void;
-            break;
-
-        case TOK_A:
-            /* Register pseudo variable */
-            E->Type  = type_uchar;
-            E->Flags = E_LOC_PRIMARY | E_RTYPE_LVAL;
-            NextToken ();
-            break;
-
-        case TOK_AX:
-            /* Register pseudo variable */
-            E->Type  = type_uint;
-            E->Flags = E_LOC_PRIMARY | E_RTYPE_LVAL;
-            NextToken ();
-            break;
-
-        case TOK_EAX:
-            /* Register pseudo variable */
-            E->Type  = type_ulong;
-            E->Flags = E_LOC_PRIMARY | E_RTYPE_LVAL;
-            NextToken ();
-            break;
-
-        default:
-            /* Illegal primary. Be sure to skip the token to avoid endless
-            ** error loops.
-            */
-            Error ("Expression expected");
-            NextToken ();
-            ED_MakeConstAbsInt (E, 1);
-            break;
-    }
-}
-
-
-
-static void ArrayRef (ExprDesc* Expr)
-/* Handle an array reference. This function needs a rewrite. */
-{
-    int         ConstBaseAddr;
-    ExprDesc    Subscript;
-    CodeMark    Mark1;
-    CodeMark    Mark2;
-    TypeCode    Qualifiers;
-    Type*       ElementType;
-    Type*       tptr1;
-
-
-    /* Skip the bracket */
-    NextToken ();
-
-    /* Get the type of left side */
-    tptr1 = Expr->Type;
-
-    /* We can apply a special treatment for arrays that have a const base
-    ** address. This is true for most arrays and will produce a lot better
-    ** code. Check if this is a const base address.
-    */
-    ConstBaseAddr = ED_IsRVal (Expr) &&
-                    (ED_IsLocConst (Expr) || ED_IsLocStack (Expr));
-
-    /* If we have a constant base, we delay the address fetch */
-    GetCodePos (&Mark1);
-    if (!ConstBaseAddr) {
-        /* Get a pointer to the array into the primary */
-        LoadExpr (CF_NONE, Expr);
-
-        /* Get the array pointer on stack. Do not push more than 16
-        ** bit, even if this value is greater, since we cannot handle
-        ** other than 16bit stuff when doing indexing.
-        */
-        GetCodePos (&Mark2);
-        g_push (CF_PTR, 0);
-    }
-
-    /* TOS now contains ptr to array elements. Get the subscript. */
-    MarkedExprWithCheck (hie0, &Subscript);
-
-    /* Check the types of array and subscript. We can either have a
-    ** pointer/array to the left, in which case the subscript must be of an
-    ** integer type, or we have an integer to the left, in which case the
-    ** subscript must be a pointer/array.
-    ** Since we do the necessary checking here, we can rely later on the
-    ** correct types.
-    */
-    Qualifiers = T_QUAL_NONE;
-    if (IsClassPtr (Expr->Type)) {
-        if (!IsClassInt (Subscript.Type))  {
-            Error ("Array subscript is not an integer");
-            /* To avoid any compiler errors, make the expression a valid int */
-            ED_MakeConstAbsInt (&Subscript, 0);
-        }
-        if (IsTypeArray (Expr->Type)) {
-            Qualifiers = GetQualifier (Expr->Type);
-        }
-        ElementType = Indirect (Expr->Type);
-    } else if (IsClassInt (Expr->Type)) {
-        if (!IsClassPtr (Subscript.Type)) {
-            Error ("Subscripted value is neither array nor pointer");
-            /* To avoid compiler errors, make the subscript a char[] at
-            ** address 0.
-            */
-            ED_MakeConstAbs (&Subscript, 0, GetCharArrayType (1));
-        } else if (IsTypeArray (Subscript.Type)) {
-            Qualifiers = GetQualifier (Subscript.Type);
-        }
-        ElementType = Indirect (Subscript.Type);
-    } else {
-        Error ("Cannot subscript");
-        /* To avoid compiler errors, fake both the array and the subscript, so
-        ** we can just proceed.
-        */
-        ED_MakeConstAbs (Expr, 0, GetCharArrayType (1));
-        ED_MakeConstAbsInt (&Subscript, 0);
-        ElementType = Indirect (Expr->Type);
-    }
-
-    /* The element type has the combined qualifiers from itself and the array,
-    ** it is a member of (if any).
-    */
-    if (GetQualifier (ElementType) != (GetQualifier (ElementType) | Qualifiers)) {
-        ElementType = TypeDup (ElementType);
-        ElementType->C |= Qualifiers;
-    }
-
-    /* If the subscript is a bit-field, load it and make it an rvalue */
-    if (ED_IsBitField (&Subscript)) {
-        LoadExpr (CF_NONE, &Subscript);
-        ED_MakeRValExpr (&Subscript);
-    }
-
-    /* Check if the subscript is constant absolute value */
-    if (ED_IsConstAbs (&Subscript) && ED_CodeRangeIsEmpty (&Subscript)) {
-
-        /* The array subscript is a numeric constant. If we had pushed the
-        ** array base address onto the stack before, we can remove this value,
-        ** since we can generate expression+offset.
-        */
-        if (!ConstBaseAddr) {
-            RemoveCode (&Mark2);
-        } else {
-            /* Get an array pointer into the primary */
-            LoadExpr (CF_NONE, Expr);
-        }
-
-        if (IsClassPtr (Expr->Type)) {
-
-            /* Lhs is pointer/array. Scale the subscript value according to
-            ** the element size.
-            */
-            Subscript.IVal *= CheckedSizeOf (ElementType);
-
-            /* Remove the address load code */
-            RemoveCode (&Mark1);
-
-            /* In case of an array, we can adjust the offset of the expression
-            ** already in Expr. If the base address was a constant, we can even
-            ** remove the code that loaded the address into the primary.
-            */
-            if (IsTypeArray (Expr->Type)) {
-
-                /* Adjust the offset */
-                Expr->IVal += Subscript.IVal;
-
-            } else {
-
-                /* It's a pointer, so we do have to load it into the primary
-                ** first (if it's not already there).
-                */
-                if (ConstBaseAddr || ED_IsLVal (Expr)) {
-                    LoadExpr (CF_NONE, Expr);
-                    ED_MakeRValExpr (Expr);
-                }
-
-                /* Use the offset */
-                Expr->IVal = Subscript.IVal;
-            }
-
-        } else {
-
-            /* Scale the rhs value according to the element type */
-            g_scale (TypeOf (tptr1), CheckedSizeOf (ElementType));
-
-            /* Add the subscript. Since arrays are indexed by integers,
-            ** we will ignore the true type of the subscript here and
-            ** use always an int. #### Use offset but beware of LoadExpr!
-            */
-            g_inc (CF_INT | CF_CONST, Subscript.IVal);
-
-        }
-
-    } else {
-
-        /* Array subscript is not constant. Load it into the primary */
-        GetCodePos (&Mark2);
-        LoadExpr (CF_NONE, &Subscript);
-
-        /* Do scaling */
-        if (IsClassPtr (Expr->Type)) {
-
-            /* Indexing is based on unsigneds, so we will just use the integer
-            ** portion of the index (which is in (e)ax, so there's no further
-            ** action required).
-            */
-            g_scale (CF_INT, CheckedSizeOf (ElementType));
-
-        } else {
-
-            /* Get the int value on top. If we come here, we're sure, both
-            ** values are 16 bit (the first one was truncated if necessary
-            ** and the second one is a pointer). Note: If ConstBaseAddr is
-            ** true, we don't have a value on stack, so to "swap" both, just
-            ** push the subscript.
-            */
-            if (ConstBaseAddr) {
-                g_push (CF_INT, 0);
-                LoadExpr (CF_NONE, Expr);
-                ConstBaseAddr = 0;
-            } else {
-                g_swap (CF_INT);
-            }
-
-            /* Scale it */
-            g_scale (TypeOf (tptr1), CheckedSizeOf (ElementType));
-
-        }
-
-        /* The offset is now in the primary register. It we didn't have a
-        ** constant base address for the lhs, the lhs address is already
-        ** on stack, and we must add the offset. If the base address was
-        ** constant, we call special functions to add the address to the
-        ** offset value.
-        */
-        if (!ConstBaseAddr) {
-
-            /* The array base address is on stack and the subscript is in the
-            ** primary. Add both.
-            */
-            g_add (CF_INT, 0);
-
-        } else {
-
-            /* The subscript is in the primary, and the array base address is
-            ** in Expr. If the subscript has itself a constant address, it is
-            ** often a better idea to reverse again the order of the
-            ** evaluation. This will generate better code if the subscript is
-            ** a byte sized variable. But beware: This is only possible if the
-            ** subscript was not scaled, that is, if this was a byte array
-            ** or pointer.
-            */
-            if ((ED_IsLocConst (&Subscript) || ED_IsLocStack (&Subscript)) &&
-                CheckedSizeOf (ElementType) == SIZEOF_CHAR) {
-
-                unsigned Flags;
-
-                /* Reverse the order of evaluation */
-                if (CheckedSizeOf (Subscript.Type) == SIZEOF_CHAR) {
-                    Flags = CF_CHAR;
-                } else {
-                    Flags = CF_INT;
-                }
-                RemoveCode (&Mark2);
-
-                /* Get a pointer to the array into the primary. */
-                LoadExpr (CF_NONE, Expr);
-
-                /* Add the variable */
-                if (ED_IsLocStack (&Subscript)) {
-                    g_addlocal (Flags, Subscript.IVal);
-                } else {
-                    Flags |= GlobalModeFlags (&Subscript);
-                    g_addstatic (Flags, Subscript.Name, Subscript.IVal);
-                }
-            } else {
-
-                if (ED_IsLocAbs (Expr)) {
-                    /* Constant numeric address. Just add it */
-                    g_inc (CF_INT, Expr->IVal);
-                } else if (ED_IsLocStack (Expr)) {
-                    /* Base address is a local variable address */
-                    if (IsTypeArray (Expr->Type)) {
-                        g_addaddr_local (CF_INT, Expr->IVal);
-                    } else {
-                        g_addlocal (CF_PTR, Expr->IVal);
-                    }
-                } else {
-                    /* Base address is a static variable address */
-                    unsigned Flags = CF_INT | GlobalModeFlags (Expr);
-                    if (ED_IsRVal (Expr)) {
-                        /* Add the address of the location */
-                        g_addaddr_static (Flags, Expr->Name, Expr->IVal);
-                    } else {
-                        /* Add the contents of the location */
-                        g_addstatic (Flags, Expr->Name, Expr->IVal);
-                    }
-                }
-            }
-
-
-        }
-
-        /* The result is an expression in the primary */
-        ED_MakeRValExpr (Expr);
-
-    }
-
-    /* Result is of element type */
-    Expr->Type = ElementType;
-
-    /* An array element is actually a variable. So the rules for variables
-    ** with respect to the reference type apply: If it's an array, it is
-    ** a rvalue, otherwise it's an lvalue. (A function would also be a rvalue,
-    ** but an array cannot contain functions).
-    */
-    if (IsTypeArray (Expr->Type)) {
-        ED_MakeRVal (Expr);
-    } else {
-        ED_MakeLVal (Expr);
-    }
-
-    /* Consume the closing bracket */
-    ConsumeRBrack ();
-}
-
-
-
-static void StructRef (ExprDesc* Expr)
-/* Process struct field after . or ->. */
-{
-    ident Ident;
-    SymEntry* Field;
-    Type* FinalType;
-    TypeCode Q;
-
-    /* Skip the token and check for an identifier */
-    NextToken ();
-    if (CurTok.Tok != TOK_IDENT) {
-        Error ("Identifier expected");
-        /* Make the expression an integer at address zero */
-        ED_MakeConstAbs (Expr, 0, type_int);
-        return;
-    }
-
-    /* Get the symbol table entry and check for a struct field */
-    strcpy (Ident, CurTok.Ident);
-    NextToken ();
-    Field = FindStructField (Expr->Type, Ident);
-    if (Field == 0) {
-        Error ("Struct/union has no field named `%s'", Ident);
-        /* Make the expression an integer at address zero */
-        ED_MakeConstAbs (Expr, 0, type_int);
-        return;
-    }
-
-    /* If we have a struct pointer that is an lvalue and not already in the
-    ** primary, load it now.
-    */
-    if (ED_IsLVal (Expr) && IsTypePtr (Expr->Type)) {
-
-        /* Load into the primary */
-        LoadExpr (CF_NONE, Expr);
-
-        /* Make it an lvalue expression */
-        ED_MakeLValExpr (Expr);
-    }
-
-    /* The type is the type of the field plus any qualifiers from the struct */
-    if (IsClassStruct (Expr->Type)) {
-        Q = GetQualifier (Expr->Type);
-    } else {
-        Q = GetQualifier (Indirect (Expr->Type));
-    }
-    if (GetQualifier (Field->Type) == (GetQualifier (Field->Type) | Q)) {
-        FinalType = Field->Type;
-    } else {
-        FinalType = TypeDup (Field->Type);
-        FinalType->C |= Q;
-    }
-
-    /* A struct is usually an lvalue. If not, it is a struct in the primary
-    ** register.
-    */
-    if (ED_IsRVal (Expr) && ED_IsLocExpr (Expr) && !IsTypePtr (Expr->Type)) {
-
-        unsigned Flags = 0;
-        unsigned BitOffs;
-
-        /* Get the size of the type */
-        unsigned Size = SizeOf (Expr->Type);
-
-        /* Safety check */
-        CHECK (Field->V.Offs + Size <= SIZEOF_LONG);
-
-        /* The type of the operation depends on the type of the struct */
-        switch (Size) {
-            case 1:     Flags = CF_CHAR | CF_UNSIGNED | CF_CONST;       break;
-            case 2:     Flags = CF_INT  | CF_UNSIGNED | CF_CONST;       break;
-            case 3:     /* FALLTHROUGH */
-            case 4:     Flags = CF_LONG | CF_UNSIGNED | CF_CONST;       break;
-            default:    Internal ("Invalid struct size: %u", Size);     break;
-        }
-
-        /* Generate a shift to get the field in the proper position in the
-        ** primary. For bit fields, mask the value.
-        */
-        BitOffs = Field->V.Offs * CHAR_BITS;
-        if (SymIsBitField (Field)) {
-            BitOffs += Field->V.B.BitOffs;
-            g_asr (Flags, BitOffs);
-            /* Mask the value. This is unnecessary if the shift executed above
-            ** moved only zeroes into the value.
-            */
-            if (BitOffs + Field->V.B.BitWidth != Size * CHAR_BITS) {
-                g_and (CF_INT | CF_UNSIGNED | CF_CONST,
-                       (0x0001U << Field->V.B.BitWidth) - 1U);
-            }
-        } else {
-            g_asr (Flags, BitOffs);
-        }
-
-        /* Use the new type */
-        Expr->Type = FinalType;
-
-    } else {
-
-        /* Set the struct field offset */
-        Expr->IVal += Field->V.Offs;
-
-        /* Use the new type */
-        Expr->Type = FinalType;
-
-        /* An struct member is actually a variable. So the rules for variables
-        ** with respect to the reference type apply: If it's an array, it is
-        ** a rvalue, otherwise it's an lvalue. (A function would also be a rvalue,
-        ** but a struct field cannot be a function).
-        */
-        if (IsTypeArray (Expr->Type)) {
-            ED_MakeRVal (Expr);
-        } else {
-            ED_MakeLVal (Expr);
-        }
-
-        /* Make the expression a bit field if necessary */
-        if (SymIsBitField (Field)) {
-            ED_MakeBitField (Expr, Field->V.B.BitOffs, Field->V.B.BitWidth);
-        }
-    }
-
-}
-
-
-
-static void hie11 (ExprDesc *Expr)
-/* Handle compound types (structs and arrays) */
-{
-    /* Name value used in invalid function calls */
-    static const char IllegalFunc[] = "illegal_function_call";
-
-    /* Evaluate the lhs */
-    Primary (Expr);
-
-    /* Check for a rhs */
-    while (CurTok.Tok == TOK_LBRACK || CurTok.Tok == TOK_LPAREN ||
-           CurTok.Tok == TOK_DOT    || CurTok.Tok == TOK_PTR_REF) {
-
-        switch (CurTok.Tok) {
-
-            case TOK_LBRACK:
-                /* Array reference */
-                ArrayRef (Expr);
-                break;
-
-            case TOK_LPAREN:
-                /* Function call. */
-                if (!IsTypeFunc (Expr->Type) && !IsTypeFuncPtr (Expr->Type)) {
-                    /* Not a function */
-                    Error ("Illegal function call");
-                    /* Force the type to be a implicitly defined function, one
-                    ** returning an int and taking any number of arguments.
-                    ** Since we don't have a name, invent one.
-                    */
-                    ED_MakeConstAbs (Expr, 0, GetImplicitFuncType ());
-                    Expr->Name = (long) IllegalFunc;
-                }
-                /* Call the function */
-                FunctionCall (Expr);
-                break;
-
-            case TOK_DOT:
-                if (!IsClassStruct (Expr->Type)) {
-                    Error ("Struct expected");
-                }
-                StructRef (Expr);
-                break;
-
-            case TOK_PTR_REF:
-                /* If we have an array, convert it to pointer to first element */
-                if (IsTypeArray (Expr->Type)) {
-                    Expr->Type = ArrayToPtr (Expr->Type);
-                }
-                if (!IsClassPtr (Expr->Type) || !IsClassStruct (Indirect (Expr->Type))) {
-                    Error ("Struct pointer expected");
-                }
-                StructRef (Expr);
-                break;
-
-            default:
-                Internal ("Invalid token in hie11: %d", CurTok.Tok);
-
-        }
-    }
-}
-
-
-
-void Store (ExprDesc* Expr, const Type* StoreType)
-/* Store the primary register into the location denoted by Expr. If StoreType
-** is given, use this type when storing instead of Expr->Type. If StoreType
-** is NULL, use Expr->Type instead.
-*/
-{
-    unsigned Flags;
-
-    /* If StoreType was not given, use Expr->Type instead */
-    if (StoreType == 0) {
-        StoreType = Expr->Type;
-    }
-
-    /* Prepare the code generator flags */
-    Flags = TypeOf (StoreType) | GlobalModeFlags (Expr);
-
-    /* Do the store depending on the location */
-    switch (ED_GetLoc (Expr)) {
-
-        case E_LOC_ABS:
-            /* Absolute: numeric address or const */
-            g_putstatic (Flags, Expr->IVal, 0);
-            break;
-
-        case E_LOC_GLOBAL:
-            /* Global variable */
-            g_putstatic (Flags, Expr->Name, Expr->IVal);
-            break;
-
-        case E_LOC_STATIC:
-        case E_LOC_LITERAL:
-            /* Static variable or literal in the literal pool */
-            g_putstatic (Flags, Expr->Name, Expr->IVal);
-            break;
-
-        case E_LOC_REGISTER:
-            /* Register variable */
-            g_putstatic (Flags, Expr->Name, Expr->IVal);
-            break;
-
-        case E_LOC_STACK:
-            /* Value on the stack */
-            g_putlocal (Flags, Expr->IVal, 0);
-            break;
-
-        case E_LOC_PRIMARY:
-            /* The primary register (value is already there) */
-            break;
-
-        case E_LOC_EXPR:
-            /* An expression in the primary register */
-            g_putind (Flags, Expr->IVal);
-            break;
-
-        default:
-            Internal ("Invalid location in Store(): 0x%04X", ED_GetLoc (Expr));
-    }
-
-    /* Assume that each one of the stores will invalidate CC */
-    ED_MarkAsUntested (Expr);
-}
-
-
-
-static void PreInc (ExprDesc* Expr)
-/* Handle the preincrement operators */
-{
-    unsigned Flags;
-    unsigned long Val;
-
-    /* Skip the operator token */
-    NextToken ();
-
-    /* Evaluate the expression and check that it is an lvalue */
-    hie10 (Expr);
-    if (!ED_IsLVal (Expr)) {
-        Error ("Invalid lvalue");
-        return;
-    }
-
-    /* We cannot modify const values */
-    if (IsQualConst (Expr->Type)) {
-        Error ("Increment of read-only variable");
-    }
-
-    /* Get the data type */
-    Flags = TypeOf (Expr->Type) | GlobalModeFlags (Expr) | CF_FORCECHAR | CF_CONST;
-
-    /* Get the increment value in bytes */
-    Val = IsTypePtr (Expr->Type)? CheckedPSizeOf (Expr->Type) : 1;
-
-    /* Check the location of the data */
-    switch (ED_GetLoc (Expr)) {
-
-        case E_LOC_ABS:
-            /* Absolute: numeric address or const */
-            g_addeqstatic (Flags, Expr->IVal, 0, Val);
-            break;
-
-        case E_LOC_GLOBAL:
-            /* Global variable */
-            g_addeqstatic (Flags, Expr->Name, Expr->IVal, Val);
-            break;
-
-        case E_LOC_STATIC:
-        case E_LOC_LITERAL:
-            /* Static variable or literal in the literal pool */
-            g_addeqstatic (Flags, Expr->Name, Expr->IVal, Val);
-            break;
-
-        case E_LOC_REGISTER:
-            /* Register variable */
-            g_addeqstatic (Flags, Expr->Name, Expr->IVal, Val);
-            break;
-
-        case E_LOC_STACK:
-            /* Value on the stack */
-            g_addeqlocal (Flags, Expr->IVal, Val);
-            break;
-
-        case E_LOC_PRIMARY:
-            /* The primary register */
-            g_inc (Flags, Val);
-            break;
-
-        case E_LOC_EXPR:
-            /* An expression in the primary register */
-            g_addeqind (Flags, Expr->IVal, Val);
-            break;
-
-        default:
-            Internal ("Invalid location in PreInc(): 0x%04X", ED_GetLoc (Expr));
-    }
-
-    /* Result is an expression, no reference */
-    ED_MakeRValExpr (Expr);
-}
-
-
-
-static void PreDec (ExprDesc* Expr)
-/* Handle the predecrement operators */
-{
-    unsigned Flags;
-    unsigned long Val;
-
-    /* Skip the operator token */
-    NextToken ();
-
-    /* Evaluate the expression and check that it is an lvalue */
-    hie10 (Expr);
-    if (!ED_IsLVal (Expr)) {
-        Error ("Invalid lvalue");
-        return;
-    }
-
-    /* We cannot modify const values */
-    if (IsQualConst (Expr->Type)) {
-        Error ("Decrement of read-only variable");
-    }
-
-    /* Get the data type */
-    Flags = TypeOf (Expr->Type) | GlobalModeFlags (Expr) | CF_FORCECHAR | CF_CONST;
-
-    /* Get the increment value in bytes */
-    Val = IsTypePtr (Expr->Type)? CheckedPSizeOf (Expr->Type) : 1;
-
-    /* Check the location of the data */
-    switch (ED_GetLoc (Expr)) {
-
-        case E_LOC_ABS:
-            /* Absolute: numeric address or const */
-            g_subeqstatic (Flags, Expr->IVal, 0, Val);
-            break;
-
-        case E_LOC_GLOBAL:
-            /* Global variable */
-            g_subeqstatic (Flags, Expr->Name, Expr->IVal, Val);
-            break;
-
-        case E_LOC_STATIC:
-        case E_LOC_LITERAL:
-            /* Static variable or literal in the literal pool */
-            g_subeqstatic (Flags, Expr->Name, Expr->IVal, Val);
-            break;
-
-        case E_LOC_REGISTER:
-            /* Register variable */
-            g_subeqstatic (Flags, Expr->Name, Expr->IVal, Val);
-            break;
-
-        case E_LOC_STACK:
-            /* Value on the stack */
-            g_subeqlocal (Flags, Expr->IVal, Val);
-            break;
-
-        case E_LOC_PRIMARY:
-            /* The primary register */
-            g_inc (Flags, Val);
-            break;
-
-        case E_LOC_EXPR:
-            /* An expression in the primary register */
-            g_subeqind (Flags, Expr->IVal, Val);
-            break;
-
-        default:
-            Internal ("Invalid location in PreDec(): 0x%04X", ED_GetLoc (Expr));
-    }
-
-    /* Result is an expression, no reference */
-    ED_MakeRValExpr (Expr);
-}
-
-
-
-static void PostInc (ExprDesc* Expr)
-/* Handle the postincrement operator */
-{
-    unsigned Flags;
-
-    NextToken ();
-
-    /* The expression to increment must be an lvalue */
-    if (!ED_IsLVal (Expr)) {
-        Error ("Invalid lvalue");
-        return;
-    }
-
-    /* We cannot modify const values */
-    if (IsQualConst (Expr->Type)) {
-        Error ("Increment of read-only variable");
-    }
-
-    /* Get the data type */
-    Flags = TypeOf (Expr->Type);
-
-    /* Push the address if needed */
-    PushAddr (Expr);
-
-    /* Fetch the value and save it (since it's the result of the expression) */
-    LoadExpr (CF_NONE, Expr);
-    g_save (Flags | CF_FORCECHAR);
-
-    /* If we have a pointer expression, increment by the size of the type */
-    if (IsTypePtr (Expr->Type)) {
-        g_inc (Flags | CF_CONST | CF_FORCECHAR, CheckedSizeOf (Expr->Type + 1));
-    } else {
-        g_inc (Flags | CF_CONST | CF_FORCECHAR, 1);
-    }
-
-    /* Store the result back */
-    Store (Expr, 0);
-
-    /* Restore the original value in the primary register */
-    g_restore (Flags | CF_FORCECHAR);
-
-    /* The result is always an expression, no reference */
-    ED_MakeRValExpr (Expr);
-}
-
-
-
-static void PostDec (ExprDesc* Expr)
-/* Handle the postdecrement operator */
-{
-    unsigned Flags;
-
-    NextToken ();
-
-    /* The expression to increment must be an lvalue */
-    if (!ED_IsLVal (Expr)) {
-        Error ("Invalid lvalue");
-        return;
-    }
-
-    /* We cannot modify const values */
-    if (IsQualConst (Expr->Type)) {
-        Error ("Decrement of read-only variable");
-    }
-
-    /* Get the data type */
-    Flags = TypeOf (Expr->Type);
-
-    /* Push the address if needed */
-    PushAddr (Expr);
-
-    /* Fetch the value and save it (since it's the result of the expression) */
-    LoadExpr (CF_NONE, Expr);
-    g_save (Flags | CF_FORCECHAR);
-
-    /* If we have a pointer expression, increment by the size of the type */
-    if (IsTypePtr (Expr->Type)) {
-        g_dec (Flags | CF_CONST | CF_FORCECHAR, CheckedSizeOf (Expr->Type + 1));
-    } else {
-        g_dec (Flags | CF_CONST | CF_FORCECHAR, 1);
-    }
-
-    /* Store the result back */
-    Store (Expr, 0);
-
-    /* Restore the original value in the primary register */
-    g_restore (Flags | CF_FORCECHAR);
-
-    /* The result is always an expression, no reference */
-    ED_MakeRValExpr (Expr);
-}
-
-
-
-static void UnaryOp (ExprDesc* Expr)
-/* Handle unary -/+ and ~ */
-{
-    unsigned Flags;
-
-    /* Remember the operator token and skip it */
-    token_t Tok = CurTok.Tok;
-    NextToken ();
-
-    /* Get the expression */
-    hie10 (Expr);
-
-    /* We can only handle integer types */
-    if (!IsClassInt (Expr->Type)) {
-        Error ("Argument must have integer type");
-        ED_MakeConstAbsInt (Expr, 1);
-    }
-
-    /* Check for a constant expression */
-    if (ED_IsConstAbs (Expr)) {
-        /* Value is constant */
-        switch (Tok) {
-            case TOK_MINUS: Expr->IVal = -Expr->IVal;   break;
-            case TOK_PLUS:                              break;
-            case TOK_COMP:  Expr->IVal = ~Expr->IVal;   break;
-            default:        Internal ("Unexpected token: %d", Tok);
-        }
-    } else {
-        /* Value is not constant */
-        LoadExpr (CF_NONE, Expr);
-
-        /* Get the type of the expression */
-        Flags = TypeOf (Expr->Type);
-
-        /* Handle the operation */
-        switch (Tok) {
-            case TOK_MINUS: g_neg (Flags);  break;
-            case TOK_PLUS:                  break;
-            case TOK_COMP:  g_com (Flags);  break;
-            default:        Internal ("Unexpected token: %d", Tok);
-        }
-
-        /* The result is a rvalue in the primary */
-        ED_MakeRValExpr (Expr);
-    }
-}
-
-
-
-void hie10 (ExprDesc* Expr)
-/* Handle ++, --, !, unary - etc. */
-{
-    unsigned long Size;
-
-    switch (CurTok.Tok) {
-
-        case TOK_INC:
-            PreInc (Expr);
-            break;
-
-        case TOK_DEC:
-            PreDec (Expr);
-            break;
-
-        case TOK_PLUS:
-        case TOK_MINUS:
-        case TOK_COMP:
-            UnaryOp (Expr);
-            break;
-
-        case TOK_BOOL_NOT:
-            NextToken ();
-            if (evalexpr (CF_NONE, hie10, Expr) == 0) {
-                /* Constant expression */
-                Expr->IVal = !Expr->IVal;
-            } else {
-                g_bneg (TypeOf (Expr->Type));
-                ED_MakeRValExpr (Expr);
-                ED_TestDone (Expr);             /* bneg will set cc */
-            }
-            break;
-
-        case TOK_STAR:
-            NextToken ();
-            ExprWithCheck (hie10, Expr);
-            if (ED_IsLVal (Expr) || !(ED_IsLocConst (Expr) || ED_IsLocStack (Expr))) {
-                /* Not a const, load it into the primary and make it a
-                ** calculated value.
-                */
-                LoadExpr (CF_NONE, Expr);
-                ED_MakeRValExpr (Expr);
-            }
-            /* If the expression is already a pointer to function, the
-            ** additional dereferencing operator must be ignored. A function
-            ** itself is represented as "pointer to function", so any number
-            ** of dereference operators is legal, since the result will
-            ** always be converted to "pointer to function".
-            */
-            if (IsTypeFuncPtr (Expr->Type) || IsTypeFunc (Expr->Type)) {
-                /* Expression not storable */
-                ED_MakeRVal (Expr);
-            } else {
-                if (IsClassPtr (Expr->Type)) {
-                    Expr->Type = Indirect (Expr->Type);
-                } else {
-                    Error ("Illegal indirection");
-                }
-                /* If the expression points to an array, then don't convert the
-                ** address -- it already is the location of the first element.
-                */
-                if (!IsTypeArray (Expr->Type)) {
-                    /* The * operator yields an lvalue */
-                    ED_MakeLVal (Expr);
-                }
-            }
-            break;
-
-        case TOK_AND:
-            NextToken ();
-            ExprWithCheck (hie10, Expr);
-            /* The & operator may be applied to any lvalue, and it may be
-            ** applied to functions, even if they're no lvalues.
-            */
-            if (ED_IsRVal (Expr) && !IsTypeFunc (Expr->Type) && !IsTypeArray (Expr->Type)) {
-                Error ("Illegal address");
-            } else {
-                if (ED_IsBitField (Expr)) {
-                    Error ("Cannot take address of bit-field");
-                    /* Do it anyway, just to avoid further warnings */
-                    Expr->Flags &= ~E_BITFIELD;
-                }
-                Expr->Type = PointerTo (Expr->Type);
-                /* The & operator yields an rvalue */
-                ED_MakeRVal (Expr);
-            }
-            break;
-
-        case TOK_SIZEOF:
-            NextToken ();
-            if (TypeSpecAhead ()) {
-                Type T[MAXTYPELEN];
-                NextToken ();
-                Size = CheckedSizeOf (ParseType (T));
-                ConsumeRParen ();
-            } else {
-                /* Remember the output queue pointer */
-                CodeMark Mark;
-                GetCodePos (&Mark);
-                hie10 (Expr);
-                /* If the expression is a literal string, release it, so it
-                ** won't be output as data if not used elsewhere.
-                */
-                if (ED_IsLocLiteral (Expr)) {
-                    ReleaseLiteral (Expr->LVal);
-                }
-                /* Calculate the size */
-                Size = CheckedSizeOf (Expr->Type);
-                /* Remove any generated code */
-                RemoveCode (&Mark);
-            }
-            ED_MakeConstAbs (Expr, Size, type_size_t);
-            ED_MarkAsUntested (Expr);
-            break;
-
-        default:
-            if (TypeSpecAhead ()) {
-
-                /* A typecast */
-                TypeCast (Expr);
-
-            } else {
-
-                /* An expression */
-                hie11 (Expr);
-
-                /* Handle post increment */
-                switch (CurTok.Tok) {
-                    case TOK_INC:   PostInc (Expr); break;
-                    case TOK_DEC:   PostDec (Expr); break;
-                    default:                        break;
-                }
-
-            }
-            break;
-    }
-}
-
-
-
-static void hie_internal (const GenDesc* Ops,   /* List of generators */
-                          ExprDesc* Expr,
-                          void (*hienext) (ExprDesc*),
-                          int* UsedGen)
-/* Helper function */
-{
-    ExprDesc Expr2;
-    CodeMark Mark1;
-    CodeMark Mark2;
-    const GenDesc* Gen;
-    token_t Tok;                        /* The operator token */
-    unsigned ltype, type;
-    int lconst;                         /* Left operand is a constant */
-    int rconst;                         /* Right operand is a constant */
-
-
-    ExprWithCheck (hienext, Expr);
-
-    *UsedGen = 0;
-    while ((Gen = FindGen (CurTok.Tok, Ops)) != 0) {
-
-        /* Tell the caller that we handled it's ops */
-        *UsedGen = 1;
-
-        /* All operators that call this function expect an int on the lhs */
-        if (!IsClassInt (Expr->Type)) {
-            Error ("Integer expression expected");
-            /* To avoid further errors, make Expr a valid int expression */
-            ED_MakeConstAbsInt (Expr, 1);
-        }
-
-        /* Remember the operator token, then skip it */
-        Tok = CurTok.Tok;
-        NextToken ();
-
-        /* Get the lhs on stack */
-        GetCodePos (&Mark1);
-        ltype = TypeOf (Expr->Type);
-        lconst = ED_IsConstAbs (Expr);
-        if (lconst) {
-            /* Constant value */
-            GetCodePos (&Mark2);
-            /* If the operator is commutative, don't push the left side, if
-            ** it's a constant, since we will exchange both operands.
-            */
-            if ((Gen->Flags & GEN_COMM) == 0) {
-                g_push (ltype | CF_CONST, Expr->IVal);
-            }
-        } else {
-            /* Value not constant */
-            LoadExpr (CF_NONE, Expr);
-            GetCodePos (&Mark2);
-            g_push (ltype, 0);
-        }
-
-        /* Get the right hand side */
-        MarkedExprWithCheck (hienext, &Expr2);
-
-        /* Check for a constant expression */
-        rconst = (ED_IsConstAbs (&Expr2) && ED_CodeRangeIsEmpty (&Expr2));
-        if (!rconst) {
-            /* Not constant, load into the primary */
-            LoadExpr (CF_NONE, &Expr2);
-        }
-
-        /* Check the type of the rhs */
-        if (!IsClassInt (Expr2.Type)) {
-            Error ("Integer expression expected");
-        }
-
-        /* Check for const operands */
-        if (lconst && rconst) {
-
-            /* Both operands are constant, remove the generated code */
-            RemoveCode (&Mark1);
-
-            /* Get the type of the result */
-            Expr->Type = promoteint (Expr->Type, Expr2.Type);
-
-            /* Handle the op differently for signed and unsigned types */
-            if (IsSignSigned (Expr->Type)) {
-
-                /* Evaluate the result for signed operands */
-                signed long Val1 = Expr->IVal;
-                signed long Val2 = Expr2.IVal;
-                switch (Tok) {
-                    case TOK_OR:
-                        Expr->IVal = (Val1 | Val2);
-                        break;
-                    case TOK_XOR:
-                        Expr->IVal = (Val1 ^ Val2);
-                        break;
-                    case TOK_AND:
-                        Expr->IVal = (Val1 & Val2);
-                        break;
-                    case TOK_STAR:
-                        Expr->IVal = (Val1 * Val2);
-                        break;
-                    case TOK_DIV:
-                        if (Val2 == 0) {
-                            Error ("Division by zero");
-                            Expr->IVal = 0x7FFFFFFF;
-                        } else {
-                            Expr->IVal = (Val1 / Val2);
-                        }
-                        break;
-                    case TOK_MOD:
-                        if (Val2 == 0) {
-                            Error ("Modulo operation with zero");
-                            Expr->IVal = 0;
-                        } else {
-                            Expr->IVal = (Val1 % Val2);
-                        }
-                        break;
-                    default:
-                        Internal ("hie_internal: got token 0x%X\n", Tok);
-                }
-            } else {
-
-                /* Evaluate the result for unsigned operands */
-                unsigned long Val1 = Expr->IVal;
-                unsigned long Val2 = Expr2.IVal;
-                switch (Tok) {
-                    case TOK_OR:
-                        Expr->IVal = (Val1 | Val2);
-                        break;
-                    case TOK_XOR:
-                        Expr->IVal = (Val1 ^ Val2);
-                        break;
-                    case TOK_AND:
-                        Expr->IVal = (Val1 & Val2);
-                        break;
-                    case TOK_STAR:
-                        Expr->IVal = (Val1 * Val2);
-                        break;
-                    case TOK_DIV:
-                        if (Val2 == 0) {
-                            Error ("Division by zero");
-                            Expr->IVal = 0xFFFFFFFF;
-                        } else {
-                            Expr->IVal = (Val1 / Val2);
-                        }
-                        break;
-                    case TOK_MOD:
-                        if (Val2 == 0) {
-                            Error ("Modulo operation with zero");
-                            Expr->IVal = 0;
-                        } else {
-                            Expr->IVal = (Val1 % Val2);
-                        }
-                        break;
-                    default:
-                        Internal ("hie_internal: got token 0x%X\n", Tok);
-                }
-            }
-
-        } else if (lconst && (Gen->Flags & GEN_COMM) && !rconst) {
-
-            /* The left side is constant, the right side is not, and the
-            ** operator allows swapping the operands. We haven't pushed the
-            ** left side onto the stack in this case, and will reverse the
-            ** operation because this allows for better code.
-            */
-            unsigned rtype = ltype | CF_CONST;
-            ltype = TypeOf (Expr2.Type);       /* Expr2 is now left */
-            type = CF_CONST;
-            if ((Gen->Flags & GEN_NOPUSH) == 0) {
-                g_push (ltype, 0);
-            } else {
-                ltype |= CF_REG;        /* Value is in register */
-            }
-
-            /* Determine the type of the operation result. */
-            type |= g_typeadjust (ltype, rtype);
-            Expr->Type = promoteint (Expr->Type, Expr2.Type);
-
-            /* Generate code */
-            Gen->Func (type, Expr->IVal);
-
-            /* We have a rvalue in the primary now */
-            ED_MakeRValExpr (Expr);
-
-        } else {
-
-            /* If the right hand side is constant, and the generator function
-            ** expects the lhs in the primary, remove the push of the primary
-            ** now.
-            */
-            unsigned rtype = TypeOf (Expr2.Type);
-            type = 0;
-            if (rconst) {
-                /* Second value is constant - check for div */
-                type |= CF_CONST;
-                rtype |= CF_CONST;
-                if (Tok == TOK_DIV && Expr2.IVal == 0) {
-                    Error ("Division by zero");
-                } else if (Tok == TOK_MOD && Expr2.IVal == 0) {
-                    Error ("Modulo operation with zero");
-                }
-                if ((Gen->Flags & GEN_NOPUSH) != 0) {
-                    RemoveCode (&Mark2);
-                    ltype |= CF_REG;    /* Value is in register */
-                }
-            }
-
-            /* Determine the type of the operation result. */
-            type |= g_typeadjust (ltype, rtype);
-            Expr->Type = promoteint (Expr->Type, Expr2.Type);
-
-            /* Generate code */
-            Gen->Func (type, Expr2.IVal);
-
-            /* We have a rvalue in the primary now */
-            ED_MakeRValExpr (Expr);
-        }
-    }
-}
-
-
-
-static void hie_compare (const GenDesc* Ops,    /* List of generators */
-                         ExprDesc* Expr,
-                         void (*hienext) (ExprDesc*))
-/* Helper function for the compare operators */
-{
-    ExprDesc Expr2;
-    CodeMark Mark0;
-    CodeMark Mark1;
-    CodeMark Mark2;
-    const GenDesc* Gen;
-    token_t Tok;                        /* The operator token */
-    unsigned ltype;
-    int rconst;                         /* Operand is a constant */
-
-
-    GetCodePos (&Mark0);
-    ExprWithCheck (hienext, Expr);
-
-    while ((Gen = FindGen (CurTok.Tok, Ops)) != 0) {
-
-        /* Remember the generator function */
-        void (*GenFunc) (unsigned, unsigned long) = Gen->Func;
-
-        /* Remember the operator token, then skip it */
-        Tok = CurTok.Tok;
-        NextToken ();
-
-        /* If lhs is a function, convert it to pointer to function */
-        if (IsTypeFunc (Expr->Type)) {
-            Expr->Type = PointerTo (Expr->Type);
-        }
-
-        /* Get the lhs on stack */
-        GetCodePos (&Mark1);
-        ltype = TypeOf (Expr->Type);
-        if (ED_IsConstAbs (Expr)) {
-            /* Constant value */
-            GetCodePos (&Mark2);
-            g_push (ltype | CF_CONST, Expr->IVal);
-        } else {
-            /* Value not constant */
-            LoadExpr (CF_NONE, Expr);
-            GetCodePos (&Mark2);
-            g_push (ltype, 0);
-        }
-
-        /* Get the right hand side */
-        MarkedExprWithCheck (hienext, &Expr2);
-
-        /* If rhs is a function, convert it to pointer to function */
-        if (IsTypeFunc (Expr2.Type)) {
-            Expr2.Type = PointerTo (Expr2.Type);
-        }
-
-        /* Check for a constant expression */
-        rconst = (ED_IsConstAbs (&Expr2) && ED_CodeRangeIsEmpty (&Expr2));
-        if (!rconst) {
-            /* Not constant, load into the primary */
-            LoadExpr (CF_NONE, &Expr2);
-        }
-
-        /* Some operations aren't allowed on function pointers */
-        if ((Gen->Flags & GEN_NOFUNC) != 0) {
-            /* Output only one message even if both sides are wrong */
-            if (IsTypeFuncPtr (Expr->Type)) {
-                Error ("Invalid left operand for relational operator");
-                /* Avoid further errors */
-                ED_MakeConstAbsInt (Expr, 0);
-                ED_MakeConstAbsInt (&Expr2, 0);
-            } else if (IsTypeFuncPtr (Expr2.Type)) {
-                Error ("Invalid right operand for relational operator");
-                /* Avoid further errors */
-                ED_MakeConstAbsInt (Expr, 0);
-                ED_MakeConstAbsInt (&Expr2, 0);
-            }
-        }
-
-        /* Make sure, the types are compatible */
-        if (IsClassInt (Expr->Type)) {
-            if (!IsClassInt (Expr2.Type) && !(IsClassPtr(Expr2.Type) && ED_IsNullPtr(Expr))) {
-                Error ("Incompatible types");
-            }
-        } else if (IsClassPtr (Expr->Type)) {
-            if (IsClassPtr (Expr2.Type)) {
-                /* Both pointers are allowed in comparison if they point to
-                ** the same type, or if one of them is a void pointer.
-                */
-                Type* left  = Indirect (Expr->Type);
-                Type* right = Indirect (Expr2.Type);
-                if (TypeCmp (left, right) < TC_EQUAL && left->C != T_VOID && right->C != T_VOID) {
-                    /* Incomatible pointers */
-                    Error ("Incompatible types");
-                }
-            } else if (!ED_IsNullPtr (&Expr2)) {
-                Error ("Incompatible types");
-            }
-        }
-
-        /* Check for const operands */
-        if (ED_IsConstAbs (Expr) && rconst) {
-
-            /* If the result is constant, this is suspicious when not in
-            ** preprocessor mode.
-            */
-            WarnConstCompareResult ();
-
-            /* Both operands are constant, remove the generated code */
-            RemoveCode (&Mark1);
-
-            /* Determine if this is a signed or unsigned compare */
-            if (IsClassInt (Expr->Type) && IsSignSigned (Expr->Type) &&
-                IsClassInt (Expr2.Type) && IsSignSigned (Expr2.Type)) {
-
-                /* Evaluate the result for signed operands */
-                signed long Val1 = Expr->IVal;
-                signed long Val2 = Expr2.IVal;
-                switch (Tok) {
-                    case TOK_EQ: Expr->IVal = (Val1 == Val2);   break;
-                    case TOK_NE: Expr->IVal = (Val1 != Val2);   break;
-                    case TOK_LT: Expr->IVal = (Val1 < Val2);    break;
-                    case TOK_LE: Expr->IVal = (Val1 <= Val2);   break;
-                    case TOK_GE: Expr->IVal = (Val1 >= Val2);   break;
-                    case TOK_GT: Expr->IVal = (Val1 > Val2);    break;
-                    default:     Internal ("hie_compare: got token 0x%X\n", Tok);
-                }
-
-            } else {
-
-                /* Evaluate the result for unsigned operands */
-                unsigned long Val1 = Expr->IVal;
-                unsigned long Val2 = Expr2.IVal;
-                switch (Tok) {
-                    case TOK_EQ: Expr->IVal = (Val1 == Val2);   break;
-                    case TOK_NE: Expr->IVal = (Val1 != Val2);   break;
-                    case TOK_LT: Expr->IVal = (Val1 < Val2);    break;
-                    case TOK_LE: Expr->IVal = (Val1 <= Val2);   break;
-                    case TOK_GE: Expr->IVal = (Val1 >= Val2);   break;
-                    case TOK_GT: Expr->IVal = (Val1 > Val2);    break;
-                    default:     Internal ("hie_compare: got token 0x%X\n", Tok);
-                }
-            }
-
-        } else {
-
-            /* Determine the signedness of the operands */
-            int LeftSigned  = IsSignSigned (Expr->Type);
-            int RightSigned = IsSignSigned (Expr2.Type);
-
-            /* If the right hand side is constant, and the generator function
-            ** expects the lhs in the primary, remove the push of the primary
-            ** now.
-            */
-            unsigned flags = 0;
-            if (rconst) {
-                flags |= CF_CONST;
-                if ((Gen->Flags & GEN_NOPUSH) != 0) {
-                    RemoveCode (&Mark2);
-                    ltype |= CF_REG;    /* Value is in register */
-                }
-            }
-
-            /* Determine the type of the operation. */
-            if (IsTypeChar (Expr->Type) && rconst) {
-
-                /* Left side is unsigned char, right side is constant.
-                ** Determine the minimum and maximum values
-                */
-                int LeftMin, LeftMax;
-                if (LeftSigned) {
-                    LeftMin = -128;
-                    LeftMax = 127;
-                } else {
-                    LeftMin = 0;
-                    LeftMax = 255;
-                }
-                /* An integer value is always represented as a signed in the
-                ** ExprDesc structure. This may lead to false results below,
-                ** if it is actually unsigned, but interpreted as signed
-                ** because of the representation. Fortunately, in this case,
-                ** the actual value doesn't matter, since it's always greater
-                ** than what can be represented in a char. So correct the
-                ** value accordingly.
-                */
-                if (!RightSigned && Expr2.IVal < 0) {
-                    /* Correct the value so it is an unsigned. It will then
-                    ** anyway match one of the cases below.
-                    */
-                    Expr2.IVal = LeftMax + 1;
-                }
-
-                /* Comparing a char against a constant may have a constant
-                ** result. Please note: It is not possible to remove the code
-                ** for the compare alltogether, because it may have side
-                ** effects.
-                */
-                switch (Tok) {
-
-                    case TOK_EQ:
-                        if (Expr2.IVal < LeftMin || Expr2.IVal > LeftMax) {
-                            ED_MakeConstAbsInt (Expr, 0);
-                            WarnConstCompareResult ();
-                            goto Done;
-                        }
-                        break;
-
-                    case TOK_NE:
-                        if (Expr2.IVal < LeftMin || Expr2.IVal > LeftMax) {
-                            ED_MakeConstAbsInt (Expr, 1);
-                            WarnConstCompareResult ();
-                            goto Done;
-                        }
-                        break;
-
-                    case TOK_LT:
-                        if (Expr2.IVal <= LeftMin || Expr2.IVal > LeftMax) {
-                            ED_MakeConstAbsInt (Expr, Expr2.IVal > LeftMax);
-                            WarnConstCompareResult ();
-                            goto Done;
-                        }
-                        break;
-
-                    case TOK_LE:
-                        if (Expr2.IVal < LeftMin || Expr2.IVal >= LeftMax) {
-                            ED_MakeConstAbsInt (Expr, Expr2.IVal >= LeftMax);
-                            WarnConstCompareResult ();
-                            goto Done;
-                        }
-                        break;
-
-                    case TOK_GE:
-                        if (Expr2.IVal <= LeftMin || Expr2.IVal > LeftMax) {
-                            ED_MakeConstAbsInt (Expr, Expr2.IVal <= LeftMin);
-                            WarnConstCompareResult ();
-                            goto Done;
-                        }
-                        break;
-
-                    case TOK_GT:
-                        if (Expr2.IVal < LeftMin || Expr2.IVal >= LeftMax) {
-                            ED_MakeConstAbsInt (Expr, Expr2.IVal < LeftMin);
-                            WarnConstCompareResult ();
-                            goto Done;
-                        }
-                        break;
-
-                    default:
-                        Internal ("hie_compare: got token 0x%X\n", Tok);
-                }
-
-                /* If the result is not already constant (as evaluated in the
-                ** switch above), we can execute the operation as a char op,
-                ** since the right side constant is in a valid range.
-                */
-                flags |= (CF_CHAR | CF_FORCECHAR);
-                if (!LeftSigned) {
-                    flags |= CF_UNSIGNED;
-                }
-
-            } else if (IsTypeChar (Expr->Type) && IsTypeChar (Expr2.Type) &&
-                GetSignedness (Expr->Type) == GetSignedness (Expr2.Type)) {
-
-                /* Both are chars with the same signedness. We can encode the
-                ** operation as a char operation.
-                */
-                flags |= CF_CHAR;
-                if (rconst) {
-                    flags |= CF_FORCECHAR;
-                }
-                if (!LeftSigned) {
-                    flags |= CF_UNSIGNED;
-                }
-            } else {
-                unsigned rtype = TypeOf (Expr2.Type) | (flags & CF_CONST);
-                flags |= g_typeadjust (ltype, rtype);
-            }
-
-            /* If the left side is an unsigned and the right is a constant,
-            ** we may be able to change the compares to something more
-            ** effective.
-            */
-            if (!LeftSigned && rconst) {
-
-                switch (Tok) {
-
-                    case TOK_LT:
-                        if (Expr2.IVal == 1) {
-                            /* An unsigned compare to one means that the value
-                            ** must be zero.
-                            */
-                            GenFunc = g_eq;
-                            Expr2.IVal = 0;
-                        }
-                        break;
-
-                    case TOK_LE:
-                        if (Expr2.IVal == 0) {
-                            /* An unsigned compare to zero means that the value
-                            ** must be zero.
-                            */
-                            GenFunc = g_eq;
-                        }
-                        break;
-
-                    case TOK_GE:
-                        if (Expr2.IVal == 1) {
-                            /* An unsigned compare to one means that the value
-                            ** must not be zero.
-                            */
-                            GenFunc = g_ne;
-                            Expr2.IVal = 0;
-                        }
-                        break;
-
-                    case TOK_GT:
-                        if (Expr2.IVal == 0) {
-                            /* An unsigned compare to zero means that the value
-                            ** must not be zero.
-                            */
-                            GenFunc = g_ne;
-                        }
-                        break;
-
-                    default:
-                        break;
-
-                }
-
-            }
-
-            /* Generate code */
-            GenFunc (flags, Expr2.IVal);
-
-            /* The result is an rvalue in the primary */
-            ED_MakeRValExpr (Expr);
-        }
-
-        /* Result type is always int */
-        Expr->Type = type_int;
-
-Done:   /* Condition codes are set */
-        ED_TestDone (Expr);
-    }
-}
-
-
-
-static void hie9 (ExprDesc *Expr)
-/* Process * and / operators. */
-{
-    static const GenDesc hie9_ops[] = {
-        { TOK_STAR,     GEN_NOPUSH | GEN_COMM,  g_mul   },
-        { TOK_DIV,      GEN_NOPUSH,             g_div   },
-        { TOK_MOD,      GEN_NOPUSH,             g_mod   },
-        { TOK_INVALID,  0,                      0       }
-    };
-    int UsedGen;
-
-    hie_internal (hie9_ops, Expr, hie10, &UsedGen);
-}
-
-
-
-static void parseadd (ExprDesc* Expr)
-/* Parse an expression with the binary plus operator. Expr contains the
-** unprocessed left hand side of the expression and will contain the
-** result of the expression on return.
-*/
-{
-    ExprDesc Expr2;
-    unsigned flags;             /* Operation flags */
-    CodeMark Mark;              /* Remember code position */
-    Type* lhst;                 /* Type of left hand side */
-    Type* rhst;                 /* Type of right hand side */
-
-
-    /* Skip the PLUS token */
-    NextToken ();
-
-    /* Get the left hand side type, initialize operation flags */
-    lhst = Expr->Type;
-    flags = 0;
-
-    /* Check for constness on both sides */
-    if (ED_IsConst (Expr)) {
-
-        /* The left hand side is a constant of some sort. Good. Get rhs */
-        ExprWithCheck (hie9, &Expr2);
-        if (ED_IsConstAbs (&Expr2)) {
-
-            /* Right hand side is a constant numeric value. Get the rhs type */
-            rhst = Expr2.Type;
-
-            /* Both expressions are constants. Check for pointer arithmetic */
-            if (IsClassPtr (lhst) && IsClassInt (rhst)) {
-                /* Left is pointer, right is int, must scale rhs */
-                Expr->IVal += Expr2.IVal * CheckedPSizeOf (lhst);
-                /* Result type is a pointer */
-            } else if (IsClassInt (lhst) && IsClassPtr (rhst)) {
-                /* Left is int, right is pointer, must scale lhs */
-                Expr->IVal = Expr->IVal * CheckedPSizeOf (rhst) + Expr2.IVal;
-                /* Result type is a pointer */
-                Expr->Type = Expr2.Type;
-            } else if (IsClassInt (lhst) && IsClassInt (rhst)) {
-                /* Integer addition */
-                Expr->IVal += Expr2.IVal;
-                typeadjust (Expr, &Expr2, 1);
-            } else {
-                /* OOPS */
-                Error ("Invalid operands for binary operator `+'");
-            }
-
-        } else {
-
-            /* lhs is a constant and rhs is not constant. Load rhs into
-            ** the primary.
-            */
-            LoadExpr (CF_NONE, &Expr2);
-
-            /* Beware: The check above (for lhs) lets not only pass numeric
-            ** constants, but also constant addresses (labels), maybe even
-            ** with an offset. We have to check for that here.
-            */
-
-            /* First, get the rhs type. */
-            rhst = Expr2.Type;
-
-            /* Setup flags */
-            if (ED_IsLocAbs (Expr)) {
-                /* A numerical constant */
-                flags |= CF_CONST;
-            } else {
-                /* Constant address label */
-                flags |= GlobalModeFlags (Expr) | CF_CONSTADDR;
-            }
-
-            /* Check for pointer arithmetic */
-            if (IsClassPtr (lhst) && IsClassInt (rhst)) {
-                /* Left is pointer, right is int, must scale rhs */
-                g_scale (CF_INT, CheckedPSizeOf (lhst));
-                /* Operate on pointers, result type is a pointer */
-                flags |= CF_PTR;
-                /* Generate the code for the add */
-                if (ED_GetLoc (Expr) == E_LOC_ABS) {
-                    /* Numeric constant */
-                    g_inc (flags, Expr->IVal);
-                } else {
-                    /* Constant address */
-                    g_addaddr_static (flags, Expr->Name, Expr->IVal);
-                }
-            } else if (IsClassInt (lhst) && IsClassPtr (rhst)) {
-
-                /* Left is int, right is pointer, must scale lhs. */
-                unsigned ScaleFactor = CheckedPSizeOf (rhst);
-
-                /* Operate on pointers, result type is a pointer */
-                flags |= CF_PTR;
-                Expr->Type = Expr2.Type;
-
-                /* Since we do already have rhs in the primary, if lhs is
-                ** not a numeric constant, and the scale factor is not one
-                ** (no scaling), we must take the long way over the stack.
-                */
-                if (ED_IsLocAbs (Expr)) {
-                    /* Numeric constant, scale lhs */
-                    Expr->IVal *= ScaleFactor;
-                    /* Generate the code for the add */
-                    g_inc (flags, Expr->IVal);
-                } else if (ScaleFactor == 1) {
-                    /* Constant address but no need to scale */
-                    g_addaddr_static (flags, Expr->Name, Expr->IVal);
-                } else {
-                    /* Constant address that must be scaled */
-                    g_push (TypeOf (Expr2.Type), 0);    /* rhs --> stack */
-                    g_getimmed (flags, Expr->Name, Expr->IVal);
-                    g_scale (CF_PTR, ScaleFactor);
-                    g_add (CF_PTR, 0);
-                }
-            } else if (IsClassInt (lhst) && IsClassInt (rhst)) {
-                /* Integer addition */
-                flags |= typeadjust (Expr, &Expr2, 1);
-                /* Generate the code for the add */
-                if (ED_IsLocAbs (Expr)) {
-                    /* Numeric constant */
-                    g_inc (flags, Expr->IVal);
-                } else {
-                    /* Constant address */
-                    g_addaddr_static (flags, Expr->Name, Expr->IVal);
-                }
-            } else {
-                /* OOPS */
-                Error ("Invalid operands for binary operator `+'");
-                flags = CF_INT;
-            }
-
-            /* Result is a rvalue in primary register */
-            ED_MakeRValExpr (Expr);
-        }
-
-    } else {
-
-        /* Left hand side is not constant. Get the value onto the stack. */
-        LoadExpr (CF_NONE, Expr);              /* --> primary register */
-        GetCodePos (&Mark);
-        g_push (TypeOf (Expr->Type), 0);        /* --> stack */
-
-        /* Evaluate the rhs */
-        MarkedExprWithCheck (hie9, &Expr2);
-
-        /* Check for a constant rhs expression */
-        if (ED_IsConstAbs (&Expr2) && ED_CodeRangeIsEmpty (&Expr2)) {
-
-            /* Right hand side is a constant. Get the rhs type */
-            rhst = Expr2.Type;
-
-            /* Remove pushed value from stack */
-            RemoveCode (&Mark);
-
-            /* Check for pointer arithmetic */
-            if (IsClassPtr (lhst) && IsClassInt (rhst)) {
-                /* Left is pointer, right is int, must scale rhs */
-                Expr2.IVal *= CheckedPSizeOf (lhst);
-                /* Operate on pointers, result type is a pointer */
-                flags = CF_PTR;
-            } else if (IsClassInt (lhst) && IsClassPtr (rhst)) {
-                /* Left is int, right is pointer, must scale lhs (ptr only) */
-                g_scale (CF_INT | CF_CONST, CheckedPSizeOf (rhst));
-                /* Operate on pointers, result type is a pointer */
-                flags = CF_PTR;
-                Expr->Type = Expr2.Type;
-            } else if (IsClassInt (lhst) && IsClassInt (rhst)) {
-                /* Integer addition */
-                flags = typeadjust (Expr, &Expr2, 1);
-            } else {
-                /* OOPS */
-                Error ("Invalid operands for binary operator `+'");
-                flags = CF_INT;
-            }
-
-            /* Generate code for the add */
-            g_inc (flags | CF_CONST, Expr2.IVal);
-
-        } else {
-
-            /* Not constant, load into the primary */
-            LoadExpr (CF_NONE, &Expr2);
-
-            /* lhs and rhs are not constant. Get the rhs type. */
-            rhst = Expr2.Type;
-
-            /* Check for pointer arithmetic */
-            if (IsClassPtr (lhst) && IsClassInt (rhst)) {
-                /* Left is pointer, right is int, must scale rhs */
-                g_scale (CF_INT, CheckedPSizeOf (lhst));
-                /* Operate on pointers, result type is a pointer */
-                flags = CF_PTR;
-            } else if (IsClassInt (lhst) && IsClassPtr (rhst)) {
-                /* Left is int, right is pointer, must scale lhs */
-                g_tosint (TypeOf (rhst));       /* Make sure, TOS is int */
-                g_swap (CF_INT);                /* Swap TOS and primary */
-                g_scale (CF_INT, CheckedPSizeOf (rhst));
-                /* Operate on pointers, result type is a pointer */
-                flags = CF_PTR;
-                Expr->Type = Expr2.Type;
-            } else if (IsClassInt (lhst) && IsClassInt (rhst)) {
-                /* Integer addition. Note: Result is never constant.
-                ** Problem here is that typeadjust does not know if the
-                ** variable is an rvalue or lvalue, so if both operands
-                ** are dereferenced constant numeric addresses, typeadjust
-                ** thinks the operation works on constants. Removing
-                ** CF_CONST here means handling the symptoms, however, the
-                ** whole parser is such a mess that I fear to break anything
-                ** when trying to apply another solution.
-                */
-                flags = typeadjust (Expr, &Expr2, 0) & ~CF_CONST;
-            } else {
-                /* OOPS */
-                Error ("Invalid operands for binary operator `+'");
-                flags = CF_INT;
-            }
-
-            /* Generate code for the add */
-            g_add (flags, 0);
-
-        }
-
-        /* Result is a rvalue in primary register */
-        ED_MakeRValExpr (Expr);
-    }
-
-    /* Condition codes not set */
-    ED_MarkAsUntested (Expr);
-
-}
-
-
-
-static void parsesub (ExprDesc* Expr)
-/* Parse an expression with the binary minus operator. Expr contains the
-** unprocessed left hand side of the expression and will contain the
-** result of the expression on return.
-*/
-{
-    ExprDesc Expr2;
-    unsigned flags;             /* Operation flags */
-    Type* lhst;                 /* Type of left hand side */
-    Type* rhst;                 /* Type of right hand side */
-    CodeMark Mark1;             /* Save position of output queue */
-    CodeMark Mark2;             /* Another position in the queue */
-    int rscale;                 /* Scale factor for the result */
-
-
-    /* lhs cannot be function or pointer to function */
-    if (IsTypeFunc (Expr->Type) || IsTypeFuncPtr (Expr->Type)) {
-        Error ("Invalid left operand for binary operator `-'");
-        /* Make it pointer to char to avoid further errors */
-        Expr->Type = type_uchar;
-    }
-
-    /* Skip the MINUS token */
-    NextToken ();
-
-    /* Get the left hand side type, initialize operation flags */
-    lhst = Expr->Type;
-    rscale = 1;                 /* Scale by 1, that is, don't scale */
-
-    /* Remember the output queue position, then bring the value onto the stack */
-    GetCodePos (&Mark1);
-    LoadExpr (CF_NONE, Expr);  /* --> primary register */
-    GetCodePos (&Mark2);
-    g_push (TypeOf (lhst), 0);  /* --> stack */
-
-    /* Parse the right hand side */
-    MarkedExprWithCheck (hie9, &Expr2);
-
-    /* rhs cannot be function or pointer to function */
-    if (IsTypeFunc (Expr2.Type) || IsTypeFuncPtr (Expr2.Type)) {
-        Error ("Invalid right operand for binary operator `-'");
-        /* Make it pointer to char to avoid further errors */
-        Expr2.Type = type_uchar;
-    }
-
-    /* Check for a constant rhs expression */
-    if (ED_IsConstAbs (&Expr2) && ED_CodeRangeIsEmpty (&Expr2)) {
-
-        /* The right hand side is constant. Get the rhs type. */
-        rhst = Expr2.Type;
-
-        /* Check left hand side */
-        if (ED_IsConstAbs (Expr)) {
-
-            /* Both sides are constant, remove generated code */
-            RemoveCode (&Mark1);
-
-            /* Check for pointer arithmetic */
-            if (IsClassPtr (lhst) && IsClassInt (rhst)) {
-                /* Left is pointer, right is int, must scale rhs */
-                Expr->IVal -= Expr2.IVal * CheckedPSizeOf (lhst);
-                /* Operate on pointers, result type is a pointer */
-            } else if (IsClassPtr (lhst) && IsClassPtr (rhst)) {
-                /* Left is pointer, right is pointer, must scale result */
-                if (TypeCmp (Indirect (lhst), Indirect (rhst)) < TC_QUAL_DIFF) {
-                    Error ("Incompatible pointer types");
-                } else {
-                    Expr->IVal = (Expr->IVal - Expr2.IVal) /
-                                      CheckedPSizeOf (lhst);
-                }
-                /* Operate on pointers, result type is an integer */
-                Expr->Type = type_int;
-            } else if (IsClassInt (lhst) && IsClassInt (rhst)) {
-                /* Integer subtraction */
-                typeadjust (Expr, &Expr2, 1);
-                Expr->IVal -= Expr2.IVal;
-            } else {
-                /* OOPS */
-                Error ("Invalid operands for binary operator `-'");
-            }
-
-            /* Result is constant, condition codes not set */
-            ED_MarkAsUntested (Expr);
-
-        } else {
-
-            /* Left hand side is not constant, right hand side is.
-            ** Remove pushed value from stack.
-            */
-            RemoveCode (&Mark2);
-
-            if (IsClassPtr (lhst) && IsClassInt (rhst)) {
-                /* Left is pointer, right is int, must scale rhs */
-                Expr2.IVal *= CheckedPSizeOf (lhst);
-                /* Operate on pointers, result type is a pointer */
-                flags = CF_PTR;
-            } else if (IsClassPtr (lhst) && IsClassPtr (rhst)) {
-                /* Left is pointer, right is pointer, must scale result */
-                if (TypeCmp (Indirect (lhst), Indirect (rhst)) < TC_QUAL_DIFF) {
-                    Error ("Incompatible pointer types");
-                } else {
-                    rscale = CheckedPSizeOf (lhst);
-                }
-                /* Operate on pointers, result type is an integer */
-                flags = CF_PTR;
-                Expr->Type = type_int;
-            } else if (IsClassInt (lhst) && IsClassInt (rhst)) {
-                /* Integer subtraction */
-                flags = typeadjust (Expr, &Expr2, 1);
-            } else {
-                /* OOPS */
-                Error ("Invalid operands for binary operator `-'");
-                flags = CF_INT;
-            }
-
-            /* Do the subtraction */
-            g_dec (flags | CF_CONST, Expr2.IVal);
-
-            /* If this was a pointer subtraction, we must scale the result */
-            if (rscale != 1) {
-                g_scale (flags, -rscale);
-            }
-
-            /* Result is a rvalue in the primary register */
-            ED_MakeRValExpr (Expr);
-            ED_MarkAsUntested (Expr);
-
-        }
-
-    } else {
-
-        /* Not constant, load into the primary */
-        LoadExpr (CF_NONE, &Expr2);
-
-        /* Right hand side is not constant. Get the rhs type. */
-        rhst = Expr2.Type;
-
-        /* Check for pointer arithmetic */
-        if (IsClassPtr (lhst) && IsClassInt (rhst)) {
-            /* Left is pointer, right is int, must scale rhs */
-            g_scale (CF_INT, CheckedPSizeOf (lhst));
-            /* Operate on pointers, result type is a pointer */
-            flags = CF_PTR;
-        } else if (IsClassPtr (lhst) && IsClassPtr (rhst)) {
-            /* Left is pointer, right is pointer, must scale result */
-            if (TypeCmp (Indirect (lhst), Indirect (rhst)) < TC_QUAL_DIFF) {
-                Error ("Incompatible pointer types");
-            } else {
-                rscale = CheckedPSizeOf (lhst);
-            }
-            /* Operate on pointers, result type is an integer */
-            flags = CF_PTR;
-            Expr->Type = type_int;
-        } else if (IsClassInt (lhst) && IsClassInt (rhst)) {
-            /* Integer subtraction. If the left hand side descriptor says that
-            ** the lhs is const, we have to remove this mark, since this is no
-            ** longer true, lhs is on stack instead.
-            */
-            if (ED_IsLocAbs (Expr)) {
-                ED_MakeRValExpr (Expr);
-            }
-            /* Adjust operand types */
-            flags = typeadjust (Expr, &Expr2, 0);
-        } else {
-            /* OOPS */
-            Error ("Invalid operands for binary operator `-'");
-            flags = CF_INT;
-        }
-
-        /* Generate code for the sub (the & is a hack here) */
-        g_sub (flags & ~CF_CONST, 0);
-
-        /* If this was a pointer subtraction, we must scale the result */
-        if (rscale != 1) {
-            g_scale (flags, -rscale);
-        }
-
-        /* Result is a rvalue in the primary register */
-        ED_MakeRValExpr (Expr);
-        ED_MarkAsUntested (Expr);
-    }
-}
-
-
-
-void hie8 (ExprDesc* Expr)
-/* Process + and - binary operators. */
-{
-    ExprWithCheck (hie9, Expr);
-    while (CurTok.Tok == TOK_PLUS || CurTok.Tok == TOK_MINUS) {
-        if (CurTok.Tok == TOK_PLUS) {
-            parseadd (Expr);
-        } else {
-            parsesub (Expr);
-        }
-    }
-}
-
-
-
-static void hie6 (ExprDesc* Expr)
-/* Handle greater-than type comparators */
-{
-    static const GenDesc hie6_ops [] = {
-        { TOK_LT,       GEN_NOPUSH | GEN_NOFUNC,     g_lt    },
-        { TOK_LE,       GEN_NOPUSH | GEN_NOFUNC,     g_le    },
-        { TOK_GE,       GEN_NOPUSH | GEN_NOFUNC,     g_ge    },
-        { TOK_GT,       GEN_NOPUSH | GEN_NOFUNC,     g_gt    },
-        { TOK_INVALID,  0,                           0       }
-    };
-    hie_compare (hie6_ops, Expr, ShiftExpr);
-}
-
-
-
-static void hie5 (ExprDesc* Expr)
-/* Handle == and != */
-{
-    static const GenDesc hie5_ops[] = {
-        { TOK_EQ,       GEN_NOPUSH,     g_eq    },
-        { TOK_NE,       GEN_NOPUSH,     g_ne    },
-        { TOK_INVALID,  0,              0       }
-    };
-    hie_compare (hie5_ops, Expr, hie6);
-}
-
-
-
-static void hie4 (ExprDesc* Expr)
-/* Handle & (bitwise and) */
-{
-    static const GenDesc hie4_ops[] = {
-        { TOK_AND,      GEN_NOPUSH | GEN_COMM,  g_and   },
-        { TOK_INVALID,  0,                      0       }
-    };
-    int UsedGen;
-
-    hie_internal (hie4_ops, Expr, hie5, &UsedGen);
-}
-
-
-
-static void hie3 (ExprDesc* Expr)
-/* Handle ^ (bitwise exclusive or) */
-{
-    static const GenDesc hie3_ops[] = {
-        { TOK_XOR,      GEN_NOPUSH | GEN_COMM,  g_xor   },
-        { TOK_INVALID,  0,                      0       }
-    };
-    int UsedGen;
-
-    hie_internal (hie3_ops, Expr, hie4, &UsedGen);
-}
-
-
-
-static void hie2 (ExprDesc* Expr)
-/* Handle | (bitwise or) */
-{
-    static const GenDesc hie2_ops[] = {
-        { TOK_OR,       GEN_NOPUSH | GEN_COMM,  g_or    },
-        { TOK_INVALID,  0,                      0       }
-    };
-    int UsedGen;
-
-    hie_internal (hie2_ops, Expr, hie3, &UsedGen);
-}
-
-
-
-static void hieAndPP (ExprDesc* Expr)
-/* Process "exp && exp" in preprocessor mode (that is, when the parser is
-** called recursively from the preprocessor.
-*/
-{
-    ExprDesc Expr2;
-
-    ConstAbsIntExpr (hie2, Expr);
-    while (CurTok.Tok == TOK_BOOL_AND) {
-
-        /* Skip the && */
-        NextToken ();
-
-        /* Get rhs */
-        ConstAbsIntExpr (hie2, &Expr2);
-
-        /* Combine the two */
-        Expr->IVal = (Expr->IVal && Expr2.IVal);
-    }
-}
-
-
-
-static void hieOrPP (ExprDesc *Expr)
-/* Process "exp || exp" in preprocessor mode (that is, when the parser is
-** called recursively from the preprocessor.
-*/
-{
-    ExprDesc Expr2;
-
-    ConstAbsIntExpr (hieAndPP, Expr);
-    while (CurTok.Tok == TOK_BOOL_OR) {
-
-        /* Skip the && */
-        NextToken ();
-
-        /* Get rhs */
-        ConstAbsIntExpr (hieAndPP, &Expr2);
-
-        /* Combine the two */
-        Expr->IVal = (Expr->IVal || Expr2.IVal);
-    }
-}
-
-
-
-static void hieAnd (ExprDesc* Expr, unsigned TrueLab, int* BoolOp)
-/* Process "exp && exp" */
-{
-    int FalseLab;
-    ExprDesc Expr2;
-
-    ExprWithCheck (hie2, Expr);
-    if (CurTok.Tok == TOK_BOOL_AND) {
-
-        /* Tell our caller that we're evaluating a boolean */
-        *BoolOp = 1;
-
-        /* Get a label that we will use for false expressions */
-        FalseLab = GetLocalLabel ();
-
-        /* If the expr hasn't set condition codes, set the force-test flag */
-        if (!ED_IsTested (Expr)) {
-            ED_MarkForTest (Expr);
-        }
-
-        /* Load the value */
-        LoadExpr (CF_FORCECHAR, Expr);
-
-        /* Generate the jump */
-        g_falsejump (CF_NONE, FalseLab);
-
-        /* Parse more boolean and's */
-        while (CurTok.Tok == TOK_BOOL_AND) {
-
-            /* Skip the && */
-            NextToken ();
-
-            /* Get rhs */
-            hie2 (&Expr2);
-            if (!ED_IsTested (&Expr2)) {
-                ED_MarkForTest (&Expr2);
-            }
-            LoadExpr (CF_FORCECHAR, &Expr2);
-
-            /* Do short circuit evaluation */
-            if (CurTok.Tok == TOK_BOOL_AND) {
-                g_falsejump (CF_NONE, FalseLab);
-            } else {
-                /* Last expression - will evaluate to true */
-                g_truejump (CF_NONE, TrueLab);
-            }
-        }
-
-        /* Define the false jump label here */
-        g_defcodelabel (FalseLab);
-
-        /* The result is an rvalue in primary */
-        ED_MakeRValExpr (Expr);
-        ED_TestDone (Expr);     /* Condition codes are set */
-    }
-}
-
-
-
-static void hieOr (ExprDesc *Expr)
-/* Process "exp || exp". */
-{
-    ExprDesc Expr2;
-    int BoolOp = 0;             /* Did we have a boolean op? */
-    int AndOp;                  /* Did we have a && operation? */
-    unsigned TrueLab;           /* Jump to this label if true */
-    unsigned DoneLab;
-
-    /* Get a label */
-    TrueLab = GetLocalLabel ();
-
-    /* Call the next level parser */
-    hieAnd (Expr, TrueLab, &BoolOp);
-
-    /* Any boolean or's? */
-    if (CurTok.Tok == TOK_BOOL_OR) {
-
-        /* If the expr hasn't set condition codes, set the force-test flag */
-        if (!ED_IsTested (Expr)) {
-            ED_MarkForTest (Expr);
-        }
-
-        /* Get first expr */
-        LoadExpr (CF_FORCECHAR, Expr);
-
-        /* For each expression jump to TrueLab if true. Beware: If we
-        ** had && operators, the jump is already in place!
-        */
-        if (!BoolOp) {
-            g_truejump (CF_NONE, TrueLab);
-        }
-
-        /* Remember that we had a boolean op */
-        BoolOp = 1;
-
-        /* while there's more expr */
-        while (CurTok.Tok == TOK_BOOL_OR) {
-
-            /* skip the || */
-            NextToken ();
-
-            /* Get a subexpr */
-            AndOp = 0;
-            hieAnd (&Expr2, TrueLab, &AndOp);
-            if (!ED_IsTested (&Expr2)) {
-                ED_MarkForTest (&Expr2);
-            }
-            LoadExpr (CF_FORCECHAR, &Expr2);
-
-            /* If there is more to come, add shortcut boolean eval. */
-            g_truejump (CF_NONE, TrueLab);
-
-        }
-
-        /* The result is an rvalue in primary */
-        ED_MakeRValExpr (Expr);
-        ED_TestDone (Expr);                     /* Condition codes are set */
-    }
-
-    /* If we really had boolean ops, generate the end sequence */
-    if (BoolOp) {
-        DoneLab = GetLocalLabel ();
-        g_getimmed (CF_INT | CF_CONST, 0, 0);   /* Load FALSE */
-        g_falsejump (CF_NONE, DoneLab);
-        g_defcodelabel (TrueLab);
-        g_getimmed (CF_INT | CF_CONST, 1, 0);   /* Load TRUE */
-        g_defcodelabel (DoneLab);
-    }
-}
-
-
-
-static void hieQuest (ExprDesc* Expr)
-/* Parse the ternary operator */
-{
-    int         FalseLab;
-    int         TrueLab;
-    CodeMark    TrueCodeEnd;
-    ExprDesc    Expr2;          /* Expression 2 */
-    ExprDesc    Expr3;          /* Expression 3 */
-    int         Expr2IsNULL;    /* Expression 2 is a NULL pointer */
-    int         Expr3IsNULL;    /* Expression 3 is a NULL pointer */
-    Type*       ResultType;     /* Type of result */
-
-
-    /* Call the lower level eval routine */
-    if (Preprocessing) {
-        ExprWithCheck (hieOrPP, Expr);
-    } else {
-        ExprWithCheck (hieOr, Expr);
-    }
-
-    /* Check if it's a ternary expression */
-    if (CurTok.Tok == TOK_QUEST) {
-        NextToken ();
-        if (!ED_IsTested (Expr)) {
-            /* Condition codes not set, request a test */
-            ED_MarkForTest (Expr);
-        }
-        LoadExpr (CF_NONE, Expr);
-        FalseLab = GetLocalLabel ();
-        g_falsejump (CF_NONE, FalseLab);
-
-        /* Parse second expression. Remember for later if it is a NULL pointer
-        ** expression, then load it into the primary.
-        */
-        ExprWithCheck (hie1, &Expr2);
-        Expr2IsNULL = ED_IsNullPtr (&Expr2);
-        if (!IsTypeVoid (Expr2.Type)) {
-            /* Load it into the primary */
-            LoadExpr (CF_NONE, &Expr2);
-            ED_MakeRValExpr (&Expr2);
-            Expr2.Type = PtrConversion (Expr2.Type);
-        }
-
-        /* Remember the current code position */
-        GetCodePos (&TrueCodeEnd);
-
-        /* Jump around the evaluation of the third expression */
-        TrueLab = GetLocalLabel ();
-        ConsumeColon ();
-        g_jump (TrueLab);
-
-        /* Jump here if the first expression was false */
-        g_defcodelabel (FalseLab);
-
-        /* Parse third expression. Remember for later if it is a NULL pointer
-        ** expression, then load it into the primary.
-        */
-        ExprWithCheck (hie1, &Expr3);
-        Expr3IsNULL = ED_IsNullPtr (&Expr3);
-        if (!IsTypeVoid (Expr3.Type)) {
-            /* Load it into the primary */
-            LoadExpr (CF_NONE, &Expr3);
-            ED_MakeRValExpr (&Expr3);
-            Expr3.Type = PtrConversion (Expr3.Type);
-        }
-
-        /* Check if any conversions are needed, if so, do them.
-        ** Conversion rules for ?: expression are:
-        **   - if both expressions are int expressions, default promotion
-        **     rules for ints apply.
-        **   - if both expressions are pointers of the same type, the
-        **     result of the expression is of this type.
-        **   - if one of the expressions is a pointer and the other is
-        **     a zero constant, the resulting type is that of the pointer
-        **     type.
-        **   - if both expressions are void expressions, the result is of
-        **     type void.
-        **   - all other cases are flagged by an error.
-        */
-        if (IsClassInt (Expr2.Type) && IsClassInt (Expr3.Type)) {
-
-            CodeMark    CvtCodeStart;
-            CodeMark    CvtCodeEnd;
-
-
-            /* Get common type */
-            ResultType = promoteint (Expr2.Type, Expr3.Type);
-
-            /* Convert the third expression to this type if needed */
-            TypeConversion (&Expr3, ResultType);
-
-            /* Emit conversion code for the second expression, but remember
-            ** where it starts end ends.
-            */
-            GetCodePos (&CvtCodeStart);
-            TypeConversion (&Expr2, ResultType);
-            GetCodePos (&CvtCodeEnd);
-
-            /* If we had conversion code, move it to the right place */
-            if (!CodeRangeIsEmpty (&CvtCodeStart, &CvtCodeEnd)) {
-                MoveCode (&CvtCodeStart, &CvtCodeEnd, &TrueCodeEnd);
-            }
-
-        } else if (IsClassPtr (Expr2.Type) && IsClassPtr (Expr3.Type)) {
-            /* Must point to same type */
-            if (TypeCmp (Indirect (Expr2.Type), Indirect (Expr3.Type)) < TC_EQUAL) {
-                Error ("Incompatible pointer types");
-            }
-            /* Result has the common type */
-            ResultType = Expr2.Type;
-        } else if (IsClassPtr (Expr2.Type) && Expr3IsNULL) {
-            /* Result type is pointer, no cast needed */
-            ResultType = Expr2.Type;
-        } else if (Expr2IsNULL && IsClassPtr (Expr3.Type)) {
-            /* Result type is pointer, no cast needed */
-            ResultType = Expr3.Type;
-        } else if (IsTypeVoid (Expr2.Type) && IsTypeVoid (Expr3.Type)) {
-            /* Result type is void */
-            ResultType = Expr3.Type;
-        } else {
-            Error ("Incompatible types");
-            ResultType = Expr2.Type;            /* Doesn't matter here */
-        }
-
-        /* Define the final label */
-        g_defcodelabel (TrueLab);
-
-        /* Setup the target expression */
-        ED_MakeRValExpr (Expr);
-        Expr->Type  = ResultType;
-    }
-}
-
-
-
-static void opeq (const GenDesc* Gen, ExprDesc* Expr, const char* Op)
-/* Process "op=" operators. */
-{
-    ExprDesc Expr2;
-    unsigned flags;
-    CodeMark Mark;
-    int MustScale;
-
-    /* op= can only be used with lvalues */
-    if (!ED_IsLVal (Expr)) {
-        Error ("Invalid lvalue in assignment");
-        return;
-    }
-
-    /* The left side must not be const qualified */
-    if (IsQualConst (Expr->Type)) {
-        Error ("Assignment to const");
-    }
-
-    /* There must be an integer or pointer on the left side */
-    if (!IsClassInt (Expr->Type) && !IsTypePtr (Expr->Type)) {
-        Error ("Invalid left operand type");
-        /* Continue. Wrong code will be generated, but the compiler won't
-        ** break, so this is the best error recovery.
-        */
-    }
-
-    /* Skip the operator token */
-    NextToken ();
-
-    /* Determine the type of the lhs */
-    flags = TypeOf (Expr->Type);
-    MustScale = (Gen->Func == g_add || Gen->Func == g_sub) && IsTypePtr (Expr->Type);
-
-    /* Get the lhs address on stack (if needed) */
-    PushAddr (Expr);
-
-    /* Fetch the lhs into the primary register if needed */
-    LoadExpr (CF_NONE, Expr);
-
-    /* Bring the lhs on stack */
-    GetCodePos (&Mark);
-    g_push (flags, 0);
-
-    /* Evaluate the rhs */
-    MarkedExprWithCheck (hie1, &Expr2);
-
-    /* The rhs must be an integer (or a float, but we don't support that yet */
-    if (!IsClassInt (Expr2.Type)) {
-        Error ("Invalid right operand for binary operator `%s'", Op);
-        /* Continue. Wrong code will be generated, but the compiler won't
-        ** break, so this is the best error recovery.
-        */
-    }
-
-    /* Check for a constant expression */
-    if (ED_IsConstAbs (&Expr2) && ED_CodeRangeIsEmpty (&Expr2)) {
-        /* The resulting value is a constant. If the generator has the NOPUSH
-        ** flag set, don't push the lhs.
-        */
-        if (Gen->Flags & GEN_NOPUSH) {
-            RemoveCode (&Mark);
-        }
-        if (MustScale) {
-            /* lhs is a pointer, scale rhs */
-            Expr2.IVal *= CheckedSizeOf (Expr->Type+1);
-        }
-
-        /* If the lhs is character sized, the operation may be later done
-        ** with characters.
-        */
-        if (CheckedSizeOf (Expr->Type) == SIZEOF_CHAR) {
-            flags |= CF_FORCECHAR;
-        }
-
-        /* Special handling for add and sub - some sort of a hack, but short code */
-        if (Gen->Func == g_add) {
-            g_inc (flags | CF_CONST, Expr2.IVal);
-        } else if (Gen->Func == g_sub) {
-            g_dec (flags | CF_CONST, Expr2.IVal);
-        } else {
-            if (Expr2.IVal == 0) {
-                /* Check for div by zero/mod by zero */
-                if (Gen->Func == g_div) {
-                    Error ("Division by zero");
-                } else if (Gen->Func == g_mod) {
-                    Error ("Modulo operation with zero");
-                }
-            }
-            Gen->Func (flags | CF_CONST, Expr2.IVal);
-        }
-    } else {
-
-        /* rhs is not constant. Load into the primary */
-        LoadExpr (CF_NONE, &Expr2);
-        if (MustScale) {
-            /* lhs is a pointer, scale rhs */
-            g_scale (TypeOf (Expr2.Type), CheckedSizeOf (Expr->Type+1));
-        }
-
-        /* If the lhs is character sized, the operation may be later done
-        ** with characters.
-        */
-        if (CheckedSizeOf (Expr->Type) == SIZEOF_CHAR) {
-            flags |= CF_FORCECHAR;
-        }
-
-        /* Adjust the types of the operands if needed */
-        Gen->Func (g_typeadjust (flags, TypeOf (Expr2.Type)), 0);
-    }
-    Store (Expr, 0);
-    ED_MakeRValExpr (Expr);
-}
-
-
-
-static void addsubeq (const GenDesc* Gen, ExprDesc *Expr, const char* Op)
-/* Process the += and -= operators */
-{
-    ExprDesc Expr2;
-    unsigned lflags;
-    unsigned rflags;
-    int      MustScale;
-
-
-    /* We're currently only able to handle some adressing modes */
-    if (ED_GetLoc (Expr) == E_LOC_EXPR || ED_GetLoc (Expr) == E_LOC_PRIMARY) {
-        /* Use generic routine */
-        opeq (Gen, Expr, Op);
-        return;
-    }
-
-    /* We must have an lvalue */
-    if (ED_IsRVal (Expr)) {
-        Error ("Invalid lvalue in assignment");
-        return;
-    }
-
-    /* The left side must not be const qualified */
-    if (IsQualConst (Expr->Type)) {
-        Error ("Assignment to const");
-    }
-
-    /* There must be an integer or pointer on the left side */
-    if (!IsClassInt (Expr->Type) && !IsTypePtr (Expr->Type)) {
-        Error ("Invalid left operand type");
-        /* Continue. Wrong code will be generated, but the compiler won't
-        ** break, so this is the best error recovery.
-        */
-    }
-
-    /* Skip the operator */
-    NextToken ();
-
-    /* Check if we have a pointer expression and must scale rhs */
-    MustScale = IsTypePtr (Expr->Type);
-
-    /* Initialize the code generator flags */
-    lflags = 0;
-    rflags = 0;
-
-    /* Evaluate the rhs. We expect an integer here, since float is not
-    ** supported
-    */
-    hie1 (&Expr2);
-    if (!IsClassInt (Expr2.Type)) {
-        Error ("Invalid right operand for binary operator `%s'", Op);
-        /* Continue. Wrong code will be generated, but the compiler won't
-        ** break, so this is the best error recovery.
-        */
-    }
-    if (ED_IsConstAbs (&Expr2)) {
-        /* The resulting value is a constant. Scale it. */
-        if (MustScale) {
-            Expr2.IVal *= CheckedSizeOf (Indirect (Expr->Type));
-        }
-        rflags |= CF_CONST;
-        lflags |= CF_CONST;
-    } else {
-        /* Not constant, load into the primary */
-        LoadExpr (CF_NONE, &Expr2);
-        if (MustScale) {
-            /* lhs is a pointer, scale rhs */
-            g_scale (TypeOf (Expr2.Type), CheckedSizeOf (Indirect (Expr->Type)));
-        }
-    }
-
-    /* Setup the code generator flags */
-    lflags |= TypeOf (Expr->Type) | GlobalModeFlags (Expr) | CF_FORCECHAR;
-    rflags |= TypeOf (Expr2.Type) | CF_FORCECHAR;
-
-    /* Convert the type of the lhs to that of the rhs */
-    g_typecast (lflags, rflags);
-
-    /* Output apropriate code depending on the location */
-    switch (ED_GetLoc (Expr)) {
-
-        case E_LOC_ABS:
-            /* Absolute: numeric address or const */
-            if (Gen->Tok == TOK_PLUS_ASSIGN) {
-                g_addeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal);
-            } else {
-                g_subeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal);
-            }
-            break;
-
-        case E_LOC_GLOBAL:
-            /* Global variable */
-            if (Gen->Tok == TOK_PLUS_ASSIGN) {
-                g_addeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal);
-            } else {
-                g_subeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal);
-            }
-            break;
-
-        case E_LOC_STATIC:
-        case E_LOC_LITERAL:
-            /* Static variable or literal in the literal pool */
-            if (Gen->Tok == TOK_PLUS_ASSIGN) {
-                g_addeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal);
-            } else {
-                g_subeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal);
-            }
-            break;
-
-        case E_LOC_REGISTER:
-            /* Register variable */
-            if (Gen->Tok == TOK_PLUS_ASSIGN) {
-                g_addeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal);
-            } else {
-                g_subeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal);
-            }
-            break;
-
-        case E_LOC_STACK:
-            /* Value on the stack */
-            if (Gen->Tok == TOK_PLUS_ASSIGN) {
-                g_addeqlocal (lflags, Expr->IVal, Expr2.IVal);
-            } else {
-                g_subeqlocal (lflags, Expr->IVal, Expr2.IVal);
-            }
-            break;
-
-        default:
-            Internal ("Invalid location in Store(): 0x%04X", ED_GetLoc (Expr));
-    }
-
-    /* Expression is a rvalue in the primary now */
-    ED_MakeRValExpr (Expr);
-}
-
-
-
-void hie1 (ExprDesc* Expr)
-/* Parse first level of expression hierarchy. */
-{
-    hieQuest (Expr);
-    switch (CurTok.Tok) {
-
-        case TOK_ASSIGN:
-            Assignment (Expr);
-            break;
-
-        case TOK_PLUS_ASSIGN:
-            addsubeq (&GenPASGN, Expr, "+=");
-            break;
-
-        case TOK_MINUS_ASSIGN:
-            addsubeq (&GenSASGN, Expr, "-=");
-            break;
-
-        case TOK_MUL_ASSIGN:
-            opeq (&GenMASGN, Expr, "*=");
-            break;
-
-        case TOK_DIV_ASSIGN:
-            opeq (&GenDASGN, Expr, "/=");
-            break;
-
-        case TOK_MOD_ASSIGN:
-            opeq (&GenMOASGN, Expr, "%=");
-            break;
-
-        case TOK_SHL_ASSIGN:
-            opeq (&GenSLASGN, Expr, "<<=");
-            break;
-
-        case TOK_SHR_ASSIGN:
-            opeq (&GenSRASGN, Expr, ">>=");
-            break;
-
-        case TOK_AND_ASSIGN:
-            opeq (&GenAASGN, Expr, "&=");
-            break;
-
-        case TOK_XOR_ASSIGN:
-            opeq (&GenXOASGN, Expr, "^=");
-            break;
-
-        case TOK_OR_ASSIGN:
-            opeq (&GenOASGN, Expr, "|=");
-            break;
-
-        default:
-            break;
-    }
-}
-
-
-
-void hie0 (ExprDesc *Expr)
-/* Parse comma operator. */
-{
-    hie1 (Expr);
-    while (CurTok.Tok == TOK_COMMA) {
-        NextToken ();
-        hie1 (Expr);
-    }
-}
-
-
-
-int evalexpr (unsigned Flags, void (*Func) (ExprDesc*), ExprDesc* Expr)
-/* Will evaluate an expression via the given function. If the result is a
-** constant, 0 is returned and the value is put in the Expr struct. If the
-** result is not constant, LoadExpr is called to bring the value into the
-** primary register and 1 is returned.
-*/
-{
-    /* Evaluate */
-    ExprWithCheck (Func, Expr);
-
-    /* Check for a constant expression */
-    if (ED_IsConstAbs (Expr)) {
-        /* Constant expression */
-        return 0;
-    } else {
-        /* Not constant, load into the primary */
-        LoadExpr (Flags, Expr);
-        return 1;
-    }
-}
-
-
-
-void Expression0 (ExprDesc* Expr)
-/* Evaluate an expression via hie0 and put the result into the primary register */
-{
-    ExprWithCheck (hie0, Expr);
-    LoadExpr (CF_NONE, Expr);
-}
-
-
-
-void ConstExpr (void (*Func) (ExprDesc*), ExprDesc* Expr)
-/* Will evaluate an expression via the given function. If the result is not
-** a constant of some sort, a diagnostic will be printed, and the value is
-** replaced by a constant one to make sure there are no internal errors that
-** result from this input error.
-*/
-{
-    ExprWithCheck (Func, Expr);
-    if (!ED_IsConst (Expr)) {
-        Error ("Constant expression expected");
-        /* To avoid any compiler errors, make the expression a valid const */
-        ED_MakeConstAbsInt (Expr, 1);
-    }
-}
-
-
-
-void BoolExpr (void (*Func) (ExprDesc*), ExprDesc* Expr)
-/* Will evaluate an expression via the given function. If the result is not
-** something that may be evaluated in a boolean context, a diagnostic will be
-** printed, and the value is replaced by a constant one to make sure there
-** are no internal errors that result from this input error.
-*/
-{
-    ExprWithCheck (Func, Expr);
-    if (!ED_IsBool (Expr)) {
-        Error ("Boolean expression expected");
-        /* To avoid any compiler errors, make the expression a valid int */
-        ED_MakeConstAbsInt (Expr, 1);
-    }
-}
-
-
-
-void ConstAbsIntExpr (void (*Func) (ExprDesc*), ExprDesc* Expr)
-/* Will evaluate an expression via the given function. If the result is not
-** a constant numeric integer value, a diagnostic will be printed, and the
-** value is replaced by a constant one to make sure there are no internal
-** errors that result from this input error.
-*/
-{
-    ExprWithCheck (Func, Expr);
-    if (!ED_IsConstAbsInt (Expr)) {
-        Error ("Constant integer expression expected");
-        /* To avoid any compiler errors, make the expression a valid const */
-        ED_MakeConstAbsInt (Expr, 1);
-    }
-}
diff --git a/src/cc65/expr.h b/src/cc65/expr.h
deleted file mode 100644 (file)
index a6c183c..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
-** expr.h
-**
-** Ullrich von Bassewitz, 21.06.1998
-*/
-
-
-
-#ifndef EXPR_H
-#define EXPR_H
-
-
-
-/* cc65 */
-#include "datatype.h"
-#include "exprdesc.h"
-
-
-
-/*****************************************************************************/
-/*                                   code                                    */
-/*****************************************************************************/
-
-
-
-void ExprWithCheck (void (*Func) (ExprDesc*), ExprDesc* Expr);
-/* Call an expression function with checks. */
-
-void MarkedExprWithCheck (void (*Func) (ExprDesc*), ExprDesc* Expr);
-/* Call an expression function with checks and record start and end of the
-** generated code.
-*/
-
-void PushAddr (const ExprDesc* Expr);
-/* If the expression contains an address that was somehow evaluated,
-** push this address on the stack. This is a helper function for all
-** sorts of implicit or explicit assignment functions where the lvalue
-** must be saved if it's not constant, before evaluating the rhs.
-*/
-
-void Store (ExprDesc* Expr, const Type* StoreType);
-/* Store the primary register into the location denoted by lval. If StoreType
-** is given, use this type when storing instead of lval->Type. If StoreType
-** is NULL, use lval->Type instead.
-*/
-
-int evalexpr (unsigned flags, void (*Func) (ExprDesc*), ExprDesc* Expr);
-/* Will evaluate an expression via the given function. If the result is a
-** constant, 0 is returned and the value is put in the Expr struct. If the
-** result is not constant, LoadExpr is called to bring the value into the
-** primary register and 1 is returned.
-*/
-
-void Expression0 (ExprDesc* Expr);
-/* Evaluate an expression via hie0 and put the result into the primary register */
-
-void ConstExpr (void (*Func) (ExprDesc*), ExprDesc* Expr);
-/* Will evaluate an expression via the given function. If the result is not
-** a constant of some sort, a diagnostic will be printed, and the value is
-** replaced by a constant one to make sure there are no internal errors that
-** result from this input error.
-*/
-
-void BoolExpr (void (*Func) (ExprDesc*), ExprDesc* Expr);
-/* Will evaluate an expression via the given function. If the result is not
-** something that may be evaluated in a boolean context, a diagnostic will be
-** printed, and the value is replaced by a constant one to make sure there
-** are no internal errors that result from this input error.
-*/
-
-void ConstAbsIntExpr (void (*Func) (ExprDesc*), ExprDesc* Expr);
-/* Will evaluate an expression via the given function. If the result is not
-** a constant numeric integer value, a diagnostic will be printed, and the
-** value is replaced by a constant one to make sure there are no internal
-** errors that result from this input error.
-*/
-
-void hie10 (ExprDesc* lval);
-/* Handle ++, --, !, unary - etc. */
-
-void hie8 (ExprDesc* Expr);
-/* Process + and - binary operators. */
-
-void hie1 (ExprDesc* lval);
-/* Parse first level of expression hierarchy. */
-
-void hie0 (ExprDesc* Expr);
-/* Parse comma operator. */
-
-
-
-/* End of expr.h */
-
-#endif
diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c
deleted file mode 100644 (file)
index 405c277..0000000
+++ /dev/null
@@ -1,375 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                exprdesc.c                                 */
-/*                                                                           */
-/*                      Expression descriptor structure                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2010, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "check.h"
-#include "strbuf.h"
-
-/* cc65 */
-#include "asmlabel.h"
-#include "datatype.h"
-#include "error.h"
-#include "exprdesc.h"
-#include "stackptr.h"
-#include "symentry.h"
-#include "exprdesc.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-ExprDesc* ED_Init (ExprDesc* Expr)
-/* Initialize an ExprDesc */
-{
-    Expr->Sym       = 0;
-    Expr->Type      = 0;
-    Expr->Flags     = 0;
-    Expr->Name      = 0;
-    Expr->IVal      = 0;
-    Expr->FVal      = FP_D_Make (0.0);
-    Expr->LVal      = 0;
-    Expr->BitOffs   = 0;
-    Expr->BitWidth  = 0;
-    return Expr;
-}
-
-
-
-void ED_MakeBitField (ExprDesc* Expr, unsigned BitOffs, unsigned BitWidth)
-/* Make this expression a bit field expression */
-{
-    Expr->Flags   |= E_BITFIELD;
-    Expr->BitOffs  = BitOffs;
-    Expr->BitWidth = BitWidth;
-}
-
-
-
-void ED_SetCodeRange (ExprDesc* Expr, const CodeMark* Start, const CodeMark* End)
-/* Set the code range for this expression */
-{
-    Expr->Flags |= E_HAVE_MARKS;
-    Expr->Start = *Start;
-    Expr->End   = *End;
-}
-
-
-
-int ED_CodeRangeIsEmpty (const ExprDesc* Expr)
-/* Return true if no code was output for this expression */
-{
-    /* We must have code marks */
-    PRECONDITION (Expr->Flags & E_HAVE_MARKS);
-
-    return CodeRangeIsEmpty (&Expr->Start, &Expr->End);
-}
-
-
-
-const char* ED_GetLabelName (const ExprDesc* Expr, long Offs)
-/* Return the assembler label name of the given expression. Beware: This
-** function may use a static buffer, so the name may get "lost" on the second
-** call to the function.
-*/
-{
-    static StrBuf Buf = STATIC_STRBUF_INITIALIZER;
-
-    /* Expr may have it's own offset, adjust Offs accordingly */
-    Offs += Expr->IVal;
-
-    /* Generate a label depending on the location */
-    switch (ED_GetLoc (Expr)) {
-
-        case E_LOC_ABS:
-            /* Absolute: numeric address or const */
-            SB_Printf (&Buf, "$%04X", (int)(Offs & 0xFFFF));
-            break;
-
-        case E_LOC_GLOBAL:
-        case E_LOC_STATIC:
-            /* Global or static variable */
-            if (Offs) {
-                SB_Printf (&Buf, "%s%+ld", SymGetAsmName (Expr->Sym), Offs);
-            } else {
-                SB_Printf (&Buf, "%s", SymGetAsmName (Expr->Sym));
-            }
-            break;
-
-        case E_LOC_REGISTER:
-            /* Register variable */
-            SB_Printf (&Buf, "regbank+%u", (unsigned)((Offs + Expr->Name) & 0xFFFFU));
-            break;
-
-        case E_LOC_LITERAL:
-            /* Literal in the literal pool */
-            if (Offs) {
-                SB_Printf (&Buf, "%s%+ld", LocalLabelName (Expr->Name), Offs);
-            } else {
-                SB_Printf (&Buf, "%s", LocalLabelName (Expr->Name));
-            }
-            break;
-
-        default:
-            Internal ("Invalid location in ED_GetLabelName: 0x%04X", ED_GetLoc (Expr));
-    }
-
-    /* Return a pointer to the static buffer */
-    return SB_GetConstBuf (&Buf);
-}
-
-
-
-int ED_GetStackOffs (const ExprDesc* Expr, int Offs)
-/* Get the stack offset of an address on the stack in Expr taking into account
-** an additional offset in Offs.
-*/
-{
-    PRECONDITION (ED_IsLocStack (Expr));
-    Offs += ((int) Expr->IVal) - StackPtr;
-    CHECK (Offs >= 0);          /* Cannot handle negative stack offsets */
-    return Offs;
-}
-
-
-
-ExprDesc* ED_MakeConstAbs (ExprDesc* Expr, long Value, Type* Type)
-/* Make Expr an absolute const with the given value and type. */
-{
-    Expr->Sym   = 0;
-    Expr->Type  = Type;
-    Expr->Flags = E_LOC_ABS | E_RTYPE_RVAL | (Expr->Flags & E_HAVE_MARKS);
-    Expr->Name  = 0;
-    Expr->IVal  = Value;
-    Expr->FVal  = FP_D_Make (0.0);
-    return Expr;
-}
-
-
-
-ExprDesc* ED_MakeConstAbsInt (ExprDesc* Expr, long Value)
-/* Make Expr a constant integer expression with the given value */
-{
-    Expr->Sym   = 0;
-    Expr->Type  = type_int;
-    Expr->Flags = E_LOC_ABS | E_RTYPE_RVAL | (Expr->Flags & E_HAVE_MARKS);
-    Expr->Name  = 0;
-    Expr->IVal  = Value;
-    Expr->FVal  = FP_D_Make (0.0);
-    return Expr;
-}
-
-
-
-ExprDesc* ED_MakeRValExpr (ExprDesc* Expr)
-/* Convert Expr into a rvalue which is in the primary register without an
-** offset.
-*/
-{
-    Expr->Sym   = 0;
-    Expr->Flags &= ~(E_MASK_LOC | E_MASK_RTYPE | E_BITFIELD | E_NEED_TEST | E_CC_SET);
-    Expr->Flags |= (E_LOC_EXPR | E_RTYPE_RVAL);
-    Expr->Name  = 0;
-    Expr->IVal  = 0;    /* No offset */
-    Expr->FVal  = FP_D_Make (0.0);
-    return Expr;
-}
-
-
-
-ExprDesc* ED_MakeLValExpr (ExprDesc* Expr)
-/* Convert Expr into a lvalue which is in the primary register without an
-** offset.
-*/
-{
-    Expr->Sym   = 0;
-    Expr->Flags &= ~(E_MASK_LOC | E_MASK_RTYPE | E_BITFIELD | E_NEED_TEST | E_CC_SET);
-    Expr->Flags |= (E_LOC_EXPR | E_RTYPE_LVAL);
-    Expr->Name  = 0;
-    Expr->IVal  = 0;    /* No offset */
-    Expr->FVal  = FP_D_Make (0.0);
-    return Expr;
-}
-
-
-
-int ED_IsConst (const ExprDesc* Expr)
-/* Return true if the expression denotes a constant of some sort. This can be a
-** numeric constant, the address of a global variable (maybe with offset) or
-** similar.
-*/
-{
-    return ED_IsRVal (Expr) && (Expr->Flags & E_LOC_CONST) != 0;
-}
-
-
-
-int ED_IsConstAbsInt (const ExprDesc* Expr)
-/* Return true if the expression is a constant (numeric) integer. */
-{
-    return (Expr->Flags & (E_MASK_LOC|E_MASK_RTYPE)) == (E_LOC_ABS|E_RTYPE_RVAL) &&
-           IsClassInt (Expr->Type);
-}
-
-
-
-int ED_IsNullPtr (const ExprDesc* Expr)
-/* Return true if the given expression is a NULL pointer constant */
-{
-    return (Expr->Flags & (E_MASK_LOC|E_MASK_RTYPE|E_BITFIELD)) ==
-                                (E_LOC_ABS|E_RTYPE_RVAL) &&
-           Expr->IVal == 0                               &&
-           IsClassInt (Expr->Type);
-}
-
-
-
-int ED_IsBool (const ExprDesc* Expr)
-/* Return true of the expression can be treated as a boolean, that is, it can
-** be an operand to a compare operation.
-*/
-{
-    /* Either ints, floats, or pointers can be used in a boolean context */
-    return IsClassInt (Expr->Type)   ||
-           IsClassFloat (Expr->Type) ||
-           IsClassPtr (Expr->Type);
-}
-
-
-
-void PrintExprDesc (FILE* F, ExprDesc* E)
-/* Print an ExprDesc */
-{
-    unsigned Flags;
-    char     Sep;
-
-    fprintf (F, "Symbol:   %s\n", E->Sym? E->Sym->Name : "(none)");
-    if (E->Type) {
-        fprintf (F, "Type:     ");
-        PrintType (F, E->Type);
-        fprintf (F, "\nRaw type: ");
-        PrintRawType (F, E->Type);
-    } else {
-        fprintf (F, "Type:     (unknown)\n"
-                    "Raw type: (unknown)\n");
-    }
-    fprintf (F, "IVal:     0x%08lX\n", E->IVal);
-    fprintf (F, "FVal:     %f\n", FP_D_ToFloat (E->FVal));
-
-    Flags = E->Flags;
-    Sep   = '(';
-    fprintf (F, "Flags:    0x%04X ", Flags);
-    if (Flags & E_LOC_ABS) {
-        fprintf (F, "%cE_LOC_ABS", Sep);
-        Flags &= ~E_LOC_ABS;
-        Sep = ',';
-    }
-    if (Flags & E_LOC_GLOBAL) {
-        fprintf (F, "%cE_LOC_GLOBAL", Sep);
-        Flags &= ~E_LOC_GLOBAL;
-        Sep = ',';
-    }
-    if (Flags & E_LOC_STATIC) {
-        fprintf (F, "%cE_LOC_STATIC", Sep);
-        Flags &= ~E_LOC_STATIC;
-        Sep = ',';
-    }
-    if (Flags & E_LOC_REGISTER) {
-        fprintf (F, "%cE_LOC_REGISTER", Sep);
-        Flags &= ~E_LOC_REGISTER;
-        Sep = ',';
-    }
-    if (Flags & E_LOC_STACK) {
-        fprintf (F, "%cE_LOC_STACK", Sep);
-        Flags &= ~E_LOC_STACK;
-        Sep = ',';
-    }
-    if (Flags & E_LOC_PRIMARY) {
-        fprintf (F, "%cE_LOC_PRIMARY", Sep);
-        Flags &= ~E_LOC_PRIMARY;
-        Sep = ',';
-    }
-    if (Flags & E_LOC_EXPR) {
-        fprintf (F, "%cE_LOC_EXPR", Sep);
-        Flags &= ~E_LOC_EXPR;
-        Sep = ',';
-    }
-    if (Flags & E_LOC_LITERAL) {
-        fprintf (F, "%cE_LOC_LITERAL", Sep);
-        Flags &= ~E_LOC_LITERAL;
-        Sep = ',';
-    }
-    if (Flags & E_RTYPE_LVAL) {
-        fprintf (F, "%cE_RTYPE_LVAL", Sep);
-        Flags &= ~E_RTYPE_LVAL;
-        Sep = ',';
-    }
-    if (Flags & E_BITFIELD) {
-        fprintf (F, "%cE_BITFIELD", Sep);
-        Flags &= ~E_BITFIELD;
-        Sep = ',';
-    }
-    if (Flags & E_NEED_TEST) {
-        fprintf (F, "%cE_NEED_TEST", Sep);
-        Flags &= ~E_NEED_TEST;
-        Sep = ',';
-    }
-    if (Flags & E_CC_SET) {
-        fprintf (F, "%cE_CC_SET", Sep);
-        Flags &= ~E_CC_SET;
-        Sep = ',';
-    }
-    if (Flags) {
-        fprintf (F, "%c,0x%04X", Sep, Flags);
-        Sep = ',';
-    }
-    if (Sep != '(') {
-        fputc (')', F);
-    }
-    fprintf (F, "\nName:     0x%08lX\n", E->Name);
-}
-
-
-
-Type* ReplaceType (ExprDesc* Expr, const Type* NewType)
-/* Replace the type of Expr by a copy of Newtype and return the old type string */
-{
-    Type* OldType = Expr->Type;
-    Expr->Type = TypeDup (NewType);
-    return OldType;
-}
diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h
deleted file mode 100644 (file)
index 99a1731..0000000
+++ /dev/null
@@ -1,383 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                exprdesc.h                                 */
-/*                                                                           */
-/*                      Expression descriptor structure                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2010, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef EXPRDESC_H
-#define EXPRDESC_H
-
-
-
-#include <string.h>
-
-/* common */
-#include "fp.h"
-#include "inline.h"
-
-/* cc65 */
-#include "asmcode.h"
-#include "datatype.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Defines for the flags field of the expression descriptor */
-enum {
-    /* Location: Where is the value we're talking about? */
-    E_MASK_LOC          = 0x00FF,
-    E_LOC_ABS           = 0x0001,       /* Absolute: numeric address or const */
-    E_LOC_GLOBAL        = 0x0002,       /* Global variable */
-    E_LOC_STATIC        = 0x0004,       /* Static variable */
-    E_LOC_REGISTER      = 0x0008,       /* Register variable */
-    E_LOC_STACK         = 0x0010,       /* Value on the stack */
-    E_LOC_PRIMARY       = 0x0020,       /* The primary register */
-    E_LOC_EXPR          = 0x0040,       /* An expression in the primary register */
-    E_LOC_LITERAL       = 0x0080,       /* Literal in the literal pool */
-
-    /* Constant location of some sort (only if rval) */
-    E_LOC_CONST         = E_LOC_ABS | E_LOC_GLOBAL | E_LOC_STATIC |
-                          E_LOC_REGISTER | E_LOC_LITERAL,
-
-    /* Reference? */
-    E_MASK_RTYPE        = 0x0100,
-    E_RTYPE_RVAL        = 0x0000,
-    E_RTYPE_LVAL        = 0x0100,
-
-    /* Bit-field? */
-    E_BITFIELD          = 0x0200,
-
-    /* Test */
-    E_NEED_TEST         = 0x0400,       /* Expression needs a test to set cc */
-    E_CC_SET            = 0x0800,       /* Condition codes are set */
-
-    E_HAVE_MARKS        = 0x1000,       /* Code marks are valid */
-
-};
-
-/* Forward */
-struct Literal;
-
-/* Describe the result of an expression */
-typedef struct ExprDesc ExprDesc;
-struct ExprDesc {
-    struct SymEntry*    Sym;            /* Symbol table entry if known */
-    Type*               Type;           /* Type array of expression */
-    unsigned            Flags;
-    unsigned long       Name;           /* Name or label number */
-    long                IVal;           /* Integer value if expression constant */
-    Double              FVal;           /* Floating point value */
-    struct Literal*     LVal;           /* Literal value */
-
-    /* Bit field stuff */
-    unsigned            BitOffs;        /* Bit offset for bit fields */
-    unsigned            BitWidth;       /* Bit width for bit fields */
-
-    /* Start and end of generated code */
-    CodeMark            Start;
-    CodeMark            End;
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-ExprDesc* ED_Init (ExprDesc* Expr);
-/* Initialize an ExprDesc */
-
-#if defined(HAVE_INLINE)
-INLINE int ED_GetLoc (const ExprDesc* Expr)
-/* Return the location flags from the expression */
-{
-    return (Expr->Flags & E_MASK_LOC);
-}
-#else
-#  define ED_GetLoc(Expr)       ((Expr)->Flags & E_MASK_LOC)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int ED_IsLocAbs (const ExprDesc* Expr)
-/* Return true if the expression is an absolute value */
-{
-    return (Expr->Flags & E_MASK_LOC) == E_LOC_ABS;
-}
-#else
-#  define ED_IsLocAbs(Expr)     (((Expr)->Flags & E_MASK_LOC) == E_LOC_ABS)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int ED_IsLocRegister (const ExprDesc* Expr)
-/* Return true if the expression is located in a register */
-{
-    return (Expr->Flags & E_MASK_LOC) == E_LOC_REGISTER;
-}
-#else
-#  define ED_IsLocRegister(Expr)    (((Expr)->Flags & E_MASK_LOC) == E_LOC_REGISTER)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int ED_IsLocStack (const ExprDesc* Expr)
-/* Return true if the expression is located on the stack */
-{
-    return (Expr->Flags & E_MASK_LOC) == E_LOC_STACK;
-}
-#else
-#  define ED_IsLocStack(Expr)     (((Expr)->Flags & E_MASK_LOC) == E_LOC_STACK)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int ED_IsLocPrimary (const ExprDesc* Expr)
-/* Return true if the expression is an expression in the register pseudo variable */
-{
-    return (Expr->Flags & E_MASK_LOC) == E_LOC_PRIMARY;
-}
-#else
-#  define ED_IsLocPrimary(Expr)  (((Expr)->Flags & E_MASK_LOC) == E_LOC_PRIMARY)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int ED_IsLocExpr (const ExprDesc* Expr)
-/* Return true if the expression is an expression in the primary */
-{
-    return (Expr->Flags & E_MASK_LOC) == E_LOC_EXPR;
-}
-#else
-#  define ED_IsLocExpr(Expr)     (((Expr)->Flags & E_MASK_LOC) == E_LOC_EXPR)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int ED_IsLocLiteral (const ExprDesc* Expr)
-/* Return true if the expression is a string from the literal pool */
-{               
-    return (Expr->Flags & E_MASK_LOC) == E_LOC_LITERAL;
-}
-#else
-#  define ED_IsLocLiteral(Expr)   (((Expr)->Flags & E_MASK_LOC) == E_LOC_LITERAL)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int ED_IsLocConst (const ExprDesc* Expr)
-/* Return true if the expression is a constant location of some sort */
-{
-    return (Expr->Flags & E_LOC_CONST) != 0;
-}
-#else
-#  define ED_IsLocConst(Expr)  (((Expr)->Flags & E_LOC_CONST) != 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int ED_IsLVal (const ExprDesc* Expr)
-/* Return true if the expression is a reference */
-{
-    return (Expr->Flags & E_MASK_RTYPE) == E_RTYPE_LVAL;
-}
-#else
-#  define ED_IsLVal(Expr)       (((Expr)->Flags & E_MASK_RTYPE) == E_RTYPE_LVAL)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int ED_IsRVal (const ExprDesc* Expr)
-/* Return true if the expression is a rvalue */
-{
-    return (Expr->Flags & E_MASK_RTYPE) == E_RTYPE_RVAL;
-}
-#else
-#  define ED_IsRVal(Expr)       (((Expr)->Flags & E_MASK_RTYPE) == E_RTYPE_RVAL)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void ED_MakeLVal (ExprDesc* Expr)
-/* Make the expression a lvalue. */
-{
-    Expr->Flags |= E_RTYPE_LVAL;
-}
-#else
-#  define ED_MakeLVal(Expr)     do { (Expr)->Flags |= E_RTYPE_LVAL; } while (0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void ED_MakeRVal (ExprDesc* Expr)
-/* Make the expression a rvalue. */
-{
-    Expr->Flags &= ~E_RTYPE_LVAL;
-}
-#else
-#  define ED_MakeRVal(Expr)     do { (Expr)->Flags &= ~E_RTYPE_LVAL; } while (0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int ED_IsBitField (const ExprDesc* Expr)
-/* Return true if the expression is a bit field */
-{
-    return (Expr->Flags & E_BITFIELD) != 0;
-}
-#else
-#  define ED_IsBitField(Expr)   (((Expr)->Flags & E_BITFIELD) != 0)
-#endif
-
-void ED_MakeBitField (ExprDesc* Expr, unsigned BitOffs, unsigned BitWidth);
-/* Make this expression a bit field expression */
-
-#if defined(HAVE_INLINE)
-INLINE void ED_MarkForTest (ExprDesc* Expr)
-/* Mark the expression for a test. */
-{
-    Expr->Flags |= E_NEED_TEST;
-}
-#else
-#  define ED_MarkForTest(Expr)  do { (Expr)->Flags |= E_NEED_TEST; } while (0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int ED_NeedsTest (const ExprDesc* Expr)
-/* Check if the expression needs a test. */
-{
-    return (Expr->Flags & E_NEED_TEST) != 0;
-}
-#else
-#  define ED_NeedsTest(Expr)    (((Expr)->Flags & E_NEED_TEST) != 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void ED_TestDone (ExprDesc* Expr)
-/* Mark the expression as tested and condition codes set. */
-{
-    Expr->Flags = (Expr->Flags & ~E_NEED_TEST) | E_CC_SET;
-}
-#else
-#  define ED_TestDone(Expr)     \
-    do { (Expr)->Flags = ((Expr)->Flags & ~E_NEED_TEST) | E_CC_SET; } while (0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int ED_IsTested (const ExprDesc* Expr)
-/* Check if the expression has set the condition codes. */
-{
-    return (Expr->Flags & E_CC_SET) != 0;
-}
-#else
-#  define ED_IsTested(Expr)   (((Expr)->Flags & E_CC_SET) != 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void ED_MarkAsUntested (ExprDesc* Expr)
-/* Mark the expression as not tested (condition codes not set). */
-{
-    Expr->Flags &= ~E_CC_SET;
-}
-#else
-#  define ED_MarkAsUntested(Expr)   do { (Expr)->Flags &= ~E_CC_SET; } while (0)
-#endif
-
-void ED_SetCodeRange (ExprDesc* Expr, const CodeMark* Start, const CodeMark* End);
-/* Set the code range for this expression */
-
-int ED_CodeRangeIsEmpty (const ExprDesc* Expr);
-/* Return true if no code was output for this expression */
-
-const char* ED_GetLabelName (const ExprDesc* Expr, long Offs);
-/* Return the assembler label name of the given expression. Beware: This
-** function may use a static buffer, so the name may get "lost" on the second
-** call to the function.
-*/
-
-int ED_GetStackOffs (const ExprDesc* Expr, int Offs);
-/* Get the stack offset of an address on the stack in Expr taking into account
-** an additional offset in Offs.
-*/
-
-ExprDesc* ED_MakeConstAbs (ExprDesc* Expr, long Value, Type* Type);
-/* Make Expr an absolute const with the given value and type. */
-
-ExprDesc* ED_MakeConstAbsInt (ExprDesc* Expr, long Value);
-/* Make Expr a constant integer expression with the given value */
-
-ExprDesc* ED_MakeRValExpr (ExprDesc* Expr);
-/* Convert Expr into a rvalue which is in the primary register without an
-** offset.
-*/
-
-ExprDesc* ED_MakeLValExpr (ExprDesc* Expr);
-/* Convert Expr into a lvalue which is in the primary register without an
-** offset.
-*/
-
-int ED_IsConst (const ExprDesc* Expr);
-/* Return true if the expression denotes a constant of some sort. This can be a
-** numeric constant, the address of a global variable (maybe with offset) or
-** similar.
-*/
-
-#if defined(HAVE_INLINE)
-INLINE int ED_IsConstAbs (const ExprDesc* Expr)
-/* Return true if the expression denotes a constant absolute value. This can be
-** a numeric constant, cast to any type.
-*/
-{
-    return (Expr->Flags & (E_MASK_LOC|E_MASK_RTYPE)) == (E_LOC_ABS|E_RTYPE_RVAL);
-}
-#else
-#  define ED_IsConstAbs(E)      \
-        (((E)->Flags & (E_MASK_LOC|E_MASK_RTYPE)) == (E_LOC_ABS|E_RTYPE_RVAL))
-#endif
-
-int ED_IsConstAbsInt (const ExprDesc* Expr);
-/* Return true if the expression is a constant (numeric) integer. */
-
-int ED_IsNullPtr (const ExprDesc* Expr);
-/* Return true if the given expression is a NULL pointer constant */
-
-int ED_IsBool (const ExprDesc* Expr);
-/* Return true of the expression can be treated as a boolean, that is, it can
-** be an operand to a compare operation.
-*/
-
-void PrintExprDesc (FILE* F, ExprDesc* Expr);
-/* Print an ExprDesc */
-
-Type* ReplaceType (ExprDesc* Expr, const Type* NewType);
-/* Replace the type of Expr by a copy of Newtype and return the old type string */
-
-
-
-/* End of exprdesc.h */
-
-#endif
diff --git a/src/cc65/funcdesc.c b/src/cc65/funcdesc.c
deleted file mode 100644 (file)
index b9561a9..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                funcdesc.c                                 */
-/*                                                                           */
-/*           Function descriptor structure for the cc65 C compiler           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "xmalloc.h"
-
-/* cc65 */
-#include "funcdesc.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-FuncDesc* NewFuncDesc (void)
-/* Create a new symbol table with the given name */
-{
-    /* Create a new function descriptor */
-    FuncDesc* F = (FuncDesc*) xmalloc (sizeof (FuncDesc));
-
-    /* Nullify the fields */
-    F->Flags      = 0;
-    F->SymTab     = 0;
-    F->TagTab     = 0;
-    F->ParamCount = 0;
-    F->ParamSize  = 0;
-    F->LastParam  = 0;
-
-    /* Return the new struct */
-    return F;
-}
-
-
-
-void FreeFuncDesc (FuncDesc* F)
-/* Free a function descriptor */
-{
-    /* Free the structure */
-    xfree (F);
-}
diff --git a/src/cc65/funcdesc.h b/src/cc65/funcdesc.h
deleted file mode 100644 (file)
index b79c6a0..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                funcdesc.h                                 */
-/*                                                                           */
-/*           Function descriptor structure for the cc65 C compiler           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2008 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef FUNCDESC_H
-#define FUNCDESC_H
-
-
-
-/*****************************************************************************/
-/*                              struct FuncDesc                              */
-/*****************************************************************************/
-
-
-
-/* Masks for the Flags field in FuncDesc */
-#define FD_NONE                 0x0000U /* No flags                          */
-#define FD_EMPTY                0x0001U /* Function with empty param list    */
-#define FD_VOID_PARAM           0x0002U /* Function with a void param list   */
-#define FD_VARIADIC             0x0004U /* Function with variable param list */
-#define FD_OLDSTYLE             0x0010U /* Old style (K&R) function          */
-#define FD_OLDSTYLE_INTRET      0x0020U /* K&R func has implicit int return  */
-#define FD_UNNAMED_PARAMS       0x0040U /* Function has unnamed params       */
-
-/* Bits that must be ignored when comparing funcs */
-#define FD_IGNORE       (FD_OLDSTYLE | FD_OLDSTYLE_INTRET | FD_UNNAMED_PARAMS)
-
-
-
-/* Function descriptor */
-typedef struct FuncDesc FuncDesc;
-struct FuncDesc {
-    unsigned            Flags;          /* Bitmapped flags FD_...            */
-    struct SymTable*    SymTab;         /* Symbol table                      */
-    struct SymTable*    TagTab;         /* Symbol table for structs/enums    */
-    unsigned            ParamCount;     /* Number of parameters              */
-    unsigned            ParamSize;      /* Size of the parameters            */
-    struct SymEntry*    LastParam;      /* Pointer to last parameter         */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-FuncDesc* NewFuncDesc (void);
-/* Create a new symbol table with the given name */
-
-void FreeFuncDesc (FuncDesc* D);
-/* Free a function descriptor */
-
-
-
-/* End of funcdesc.h */
-
-#endif
diff --git a/src/cc65/function.c b/src/cc65/function.c
deleted file mode 100644 (file)
index 22b3057..0000000
+++ /dev/null
@@ -1,605 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                function.c                                 */
-/*                                                                           */
-/*                      Parse function entry/body/exit                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2015, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "check.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "asmcode.h"
-#include "asmlabel.h"
-#include "codegen.h"
-#include "error.h"
-#include "funcdesc.h"
-#include "global.h"
-#include "litpool.h"
-#include "locals.h"
-#include "scanner.h"
-#include "stackptr.h"
-#include "standard.h"
-#include "stmt.h"
-#include "symtab.h"
-#include "function.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Enumeration for function flags */
-typedef enum {
-    FF_NONE             = 0x0000,
-    FF_HAS_RETURN       = 0x0001,       /* Function has a return statement */
-    FF_IS_MAIN          = 0x0002,       /* This is the main function */
-    FF_VOID_RETURN      = 0x0004,       /* Function returning void */
-} funcflags_t;
-
-/* Structure that holds all data needed for function activation */
-struct Function {
-    struct SymEntry*    FuncEntry;      /* Symbol table entry */
-    Type*               ReturnType;     /* Function return type */
-    FuncDesc*           Desc;           /* Function descriptor */
-    int                 Reserved;       /* Reserved local space */
-    unsigned            RetLab;         /* Return code label */
-    int                 TopLevelSP;     /* SP at function top level */
-    unsigned            RegOffs;        /* Register variable space offset */
-    funcflags_t         Flags;          /* Function flags */
-};
-
-/* Pointer to current function */
-Function* CurrentFunc = 0;
-
-
-
-/*****************************************************************************/
-/*                 Subroutines working with struct Function                  */
-/*****************************************************************************/
-
-
-
-static Function* NewFunction (struct SymEntry* Sym)
-/* Create a new function activation structure and return it */
-{
-    /* Allocate a new structure */
-    Function* F = (Function*) xmalloc (sizeof (Function));
-
-    /* Initialize the fields */
-    F->FuncEntry  = Sym;
-    F->ReturnType = GetFuncReturn (Sym->Type);
-    F->Desc       = GetFuncDesc (Sym->Type);
-    F->Reserved   = 0;
-    F->RetLab     = GetLocalLabel ();
-    F->TopLevelSP = 0;
-    F->RegOffs    = RegisterSpace;
-    F->Flags      = IsTypeVoid (F->ReturnType) ? FF_VOID_RETURN : FF_NONE;
-
-    /* Return the new structure */
-    return F;
-}
-
-
-
-static void FreeFunction (Function* F)
-/* Free a function activation structure */
-{
-    xfree (F);
-}
-
-
-
-const char* F_GetFuncName (const Function* F)
-/* Return the name of the current function */
-{
-    return F->FuncEntry->Name;
-}
-
-
-
-unsigned F_GetParamCount (const Function* F)
-/* Return the parameter count for the current function */
-{
-    return F->Desc->ParamCount;
-}
-
-
-
-unsigned F_GetParamSize (const Function* F)
-/* Return the parameter size for the current function */
-{
-    return F->Desc->ParamSize;
-}
-
-
-
-Type* F_GetReturnType (Function* F)
-/* Get the return type for the function */
-{
-    return F->ReturnType;
-}
-
-
-
-int F_HasVoidReturn (const Function* F)
-/* Return true if the function does not have a return value */
-{
-    return (F->Flags & FF_VOID_RETURN) != 0;
-}
-
-
-
-void F_ReturnFound (Function* F)
-/* Mark the function as having a return statement */
-{
-    F->Flags |= FF_HAS_RETURN;
-}
-
-
-
-int F_HasReturn (const Function* F)
-/* Return true if the function contains a return statement*/
-{
-    return (F->Flags & FF_HAS_RETURN) != 0;
-}
-
-
-
-int F_IsMainFunc (const Function* F)
-/* Return true if this is the main function */
-{
-    return (F->Flags & FF_IS_MAIN) != 0;
-}
-
-
-
-int F_IsVariadic (const Function* F)
-/* Return true if this is a variadic function */
-{
-    return (F->Desc->Flags & FD_VARIADIC) != 0;
-}
-
-
-
-int F_IsOldStyle (const Function* F)
-/* Return true if this is an old style (K&R) function */
-{
-    return (F->Desc->Flags & FD_OLDSTYLE) != 0;
-}
-
-
-
-int F_HasOldStyleIntRet (const Function* F)
-/* Return true if this is an old style (K&R) function with an implicit int return */
-{
-    return (F->Desc->Flags & FD_OLDSTYLE_INTRET) != 0;
-}
-
-
-
-unsigned F_GetRetLab (const Function* F)
-/* Return the return jump label */
-{
-    return F->RetLab;
-}
-
-
-
-int F_GetTopLevelSP (const Function* F)
-/* Get the value of the stack pointer on function top level */
-{
-    return F->TopLevelSP;
-}
-
-
-
-int F_ReserveLocalSpace (Function* F, unsigned Size)
-/* Reserve (but don't allocate) the given local space and return the stack
-** offset.
-*/
-{
-    F->Reserved += Size;
-    return StackPtr - F->Reserved;
-}
-
-
-
-int F_GetStackPtr (const Function* F)
-/* Return the current stack pointer including reserved (but not allocated)
-** space on the stack.
-*/
-{
-    return StackPtr - F->Reserved;
-}
-
-
-
-void F_AllocLocalSpace (Function* F)
-/* Allocate any local space previously reserved. The function will do
-** nothing if there is no reserved local space.
-*/
-{
-    if (F->Reserved > 0) {
-
-        /* Create space on the stack */
-        g_space (F->Reserved);
-
-        /* Correct the stack pointer */
-        StackPtr -= F->Reserved;
-
-        /* Nothing more reserved */
-        F->Reserved = 0;
-    }
-}
-
-
-
-int F_AllocRegVar (Function* F, const Type* Type)
-/* Allocate a register variable for the given variable type. If the allocation
-** was successful, return the offset of the register variable in the register
-** bank (zero page storage). If there is no register space left, return -1.
-*/
-{
-    /* Allow register variables only on top level and if enabled */
-    if (IS_Get (&EnableRegVars) && GetLexicalLevel () == LEX_LEVEL_FUNCTION) {
-
-        /* Get the size of the variable */
-        unsigned Size = CheckedSizeOf (Type);
-
-        /* Do we have space left? */
-        if (F->RegOffs >= Size) {
-            /* Space left. We allocate the variables from high to low addresses,
-            ** so the addressing is compatible with the saved values on stack.
-            ** This allows shorter code when saving/restoring the variables.
-            */
-            F->RegOffs -= Size;
-            return F->RegOffs;
-        }
-    }
-
-    /* No space left or no allocation */
-    return -1;
-}
-
-
-
-static void F_RestoreRegVars (Function* F)
-/* Restore the register variables for the local function if there are any. */
-{
-    const SymEntry* Sym;
-
-    /* If we don't have register variables in this function, bail out early */
-    if (F->RegOffs == RegisterSpace) {
-        return;
-    }
-
-    /* Save the accumulator if needed */
-    if (!F_HasVoidReturn (F)) {
-        g_save (CF_CHAR | CF_FORCECHAR);
-    }
-
-    /* Get the first symbol from the function symbol table */
-    Sym = F->FuncEntry->V.F.Func->SymTab->SymHead;
-
-    /* Walk through all symbols checking for register variables */
-    while (Sym) {
-        if (SymIsRegVar (Sym)) {
-
-            /* Check for more than one variable */
-            int Offs       = Sym->V.R.SaveOffs;
-            unsigned Bytes = CheckedSizeOf (Sym->Type);
-
-            while (1) {
-
-                /* Find next register variable */
-                const SymEntry* NextSym = Sym->NextSym;
-                while (NextSym && !SymIsRegVar (NextSym)) {
-                    NextSym = NextSym->NextSym;
-                }
-
-                /* If we have a next one, compare the stack offsets */
-                if (NextSym) {
-
-                    /* We have a following register variable. Get the size */
-                    int Size = CheckedSizeOf (NextSym->Type);
-
-                    /* Adjacent variable? */
-                    if (NextSym->V.R.SaveOffs + Size != Offs) {
-                        /* No */
-                        break;
-                    }
-
-                    /* Adjacent variable */
-                    Bytes += Size;
-                    Offs  -= Size;
-                    Sym   = NextSym;
-
-                } else {
-                    break;
-                }
-            }
-
-            /* Restore the memory range */
-            g_restore_regvars (Offs, Sym->V.R.RegOffs, Bytes);
-
-        }
-
-        /* Check next symbol */
-        Sym = Sym->NextSym;
-    }
-
-    /* Restore the accumulator if needed */
-    if (!F_HasVoidReturn (F)) {
-        g_restore (CF_CHAR | CF_FORCECHAR);
-    }
-}
-
-
-
-static void F_EmitDebugInfo (void)
-/* Emit debug infos for the current function */
-{
-    if (DebugInfo) {
-        /* Get the current function */
-        const SymEntry* Sym = CurrentFunc->FuncEntry;
-
-        /* Output info for the function itself */
-        AddTextLine ("\t.dbg\tfunc, \"%s\", \"00\", %s, \"%s\"",
-                     Sym->Name,
-                     (Sym->Flags & SC_EXTERN)? "extern" : "static",
-                     Sym->AsmName);
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                   code                                    */
-/*****************************************************************************/
-
-
-
-void NewFunc (SymEntry* Func)
-/* Parse argument declarations and function body. */
-{
-    int         C99MainFunc = 0;/* Flag for C99 main function returning int */
-    SymEntry*   Param;
-
-    /* Get the function descriptor from the function entry */
-    FuncDesc* D = Func->V.F.Func;
-
-    /* Allocate the function activation record for the function */
-    CurrentFunc = NewFunction (Func);
-
-    /* Reenter the lexical level */
-    ReenterFunctionLevel (D);
-
-    /* Check if the function header contains unnamed parameters. These are
-    ** only allowed in cc65 mode.
-    */
-    if ((D->Flags & FD_UNNAMED_PARAMS) != 0 && (IS_Get (&Standard) != STD_CC65)) {
-        Error ("Parameter name omitted");
-    }
-
-    /* Declare two special functions symbols: __fixargs__ and __argsize__.
-    ** The latter is different depending on the type of the function (variadic
-    ** or not).
-    */
-    AddConstSym ("__fixargs__", type_uint, SC_DEF | SC_CONST, D->ParamSize);
-    if (D->Flags & FD_VARIADIC) {
-        /* Variadic function. The variable must be const. */
-        static const Type T[] = { TYPE(T_UCHAR | T_QUAL_CONST), TYPE(T_END) };
-        AddLocalSym ("__argsize__", T, SC_DEF | SC_REF | SC_AUTO, 0);
-    } else {
-        /* Non variadic */
-        AddConstSym ("__argsize__", type_uchar, SC_DEF | SC_CONST, D->ParamSize);
-    }
-
-    /* Function body now defined */
-    Func->Flags |= SC_DEF;
-
-    /* Special handling for main() */
-    if (strcmp (Func->Name, "main") == 0) {
-
-        /* Mark this as the main function */
-        CurrentFunc->Flags |= FF_IS_MAIN;
-
-        /* Main cannot be a fastcall function */
-        if (IsQualFastcall (Func->Type)) {
-            Error ("`main' cannot be declared as __fastcall__");
-        }
-
-        /* If cc65 extensions aren't enabled, don't allow a main function that
-        ** doesn't return an int.
-        */
-        if (IS_Get (&Standard) != STD_CC65 && CurrentFunc->ReturnType[0].C != T_INT) {
-            Error ("`main' must always return an int");
-        }
-
-        /* Add a forced import of a symbol that is contained in the startup
-        ** code. This will force the startup code to be linked in.
-        */
-        g_importstartup ();
-
-        /* If main() takes parameters, generate a forced import to a function
-        ** that will setup these parameters. This way, programs that do not
-        ** need the additional code will not get it.
-        */
-        if (D->ParamCount > 0 || (D->Flags & FD_VARIADIC) != 0) {
-            g_importmainargs ();
-
-            /* The start-up code doesn't fast-call main(). */
-            Func->Type->C |= T_QUAL_CDECL;
-        }
-
-        /* Determine if this is a main function in a C99 environment that
-        ** returns an int.
-        */
-        if (IsTypeInt (F_GetReturnType (CurrentFunc)) &&
-            IS_Get (&Standard) == STD_C99) {
-            C99MainFunc = 1;
-        }
-    }
-
-    /* Allocate code and data segments for this function */
-    Func->V.F.Seg = PushSegments (Func);
-
-    /* Allocate a new literal pool */
-    PushLiteralPool (Func);
-
-    /* If this is a fastcall function, push the last parameter onto the stack */
-    if ((D->Flags & FD_VARIADIC) == 0 && D->ParamCount > 0 &&
-        (AutoCDecl ?
-         IsQualFastcall (Func->Type) :
-         !IsQualCDecl (Func->Type))) {
-        unsigned Flags;
-
-        /* Generate the push */
-        if (IsTypeFunc (D->LastParam->Type)) {
-            /* Pointer to function */
-            Flags = CF_PTR;
-        } else {
-            Flags = TypeOf (D->LastParam->Type) | CF_FORCECHAR;
-        }
-        g_push (Flags, 0);
-    }
-
-    /* Generate function entry code if needed */
-    g_enter (TypeOf (Func->Type), F_GetParamSize (CurrentFunc));
-
-    /* If stack checking code is requested, emit a call to the helper routine */
-    if (IS_Get (&CheckStack)) {
-        g_stackcheck ();
-    }
-
-    /* Setup the stack */
-    StackPtr = 0;
-
-    /* Walk through the parameter list and allocate register variable space
-    ** for parameters declared as register. Generate code to swap the contents
-    ** of the register bank with the save area on the stack.
-    */
-    Param = D->SymTab->SymHead;
-    while (Param && (Param->Flags & SC_PARAM) != 0) {
-
-        /* Check for a register variable */
-        if (SymIsRegVar (Param)) {
-
-            /* Allocate space */
-            int Reg = F_AllocRegVar (CurrentFunc, Param->Type);
-
-            /* Could we allocate a register? */
-            if (Reg < 0) {
-                /* No register available: Convert parameter to auto */
-                CvtRegVarToAuto (Param);
-            } else {
-                /* Remember the register offset */
-                Param->V.R.RegOffs = Reg;
-
-                /* Generate swap code */
-                g_swap_regvars (Param->V.R.SaveOffs, Reg, CheckedSizeOf (Param->Type));
-            }
-        }
-
-        /* Next parameter */
-        Param = Param->NextSym;
-    }
-
-    /* Need a starting curly brace */
-    ConsumeLCurly ();
-
-    /* Parse local variable declarations if any */
-    DeclareLocals ();
-
-    /* Remember the current stack pointer. All variables allocated elsewhere
-    ** must be dropped when doing a return from an inner block.
-    */
-    CurrentFunc->TopLevelSP = StackPtr;
-
-    /* Now process statements in this block */
-    while (CurTok.Tok != TOK_RCURLY && CurTok.Tok != TOK_CEOF) {
-        Statement (0);
-    }
-
-    /* If this is not a void function, and not the main function in a C99
-    ** environment returning int, output a warning if we didn't see a return
-    ** statement.
-    */
-    if (!F_HasVoidReturn (CurrentFunc) && !F_HasReturn (CurrentFunc) && !C99MainFunc) {
-        Warning ("Control reaches end of non-void function");
-    }
-
-    /* If this is the main function in a C99 environment returning an int, let
-    ** it always return zero. Note: Actual return statements jump to the return
-    ** label defined below.
-    ** The code is removed by the optimizer if unused.
-    */
-    if (C99MainFunc) {
-        g_getimmed (CF_INT | CF_CONST, 0, 0);
-    }
-
-    /* Output the function exit code label */
-    g_defcodelabel (F_GetRetLab (CurrentFunc));
-
-    /* Restore the register variables */
-    F_RestoreRegVars (CurrentFunc);
-
-    /* Generate the exit code */
-    g_leave ();
-
-    /* Emit references to imports/exports */
-    EmitExternals ();
-
-    /* Emit function debug info */
-    F_EmitDebugInfo ();
-    EmitDebugInfo ();
-
-    /* Leave the lexical level */
-    LeaveFunctionLevel ();
-
-    /* Eat the closing brace */
-    ConsumeRCurly ();
-
-    /* Restore the old literal pool, remembering the one for the function */
-    Func->V.F.LitPool = PopLiteralPool ();
-
-    /* Switch back to the old segments */
-    PopSegments ();
-
-    /* Reset the current function pointer */
-    FreeFunction (CurrentFunc);
-    CurrentFunc = 0;
-}
diff --git a/src/cc65/function.h b/src/cc65/function.h
deleted file mode 100644 (file)
index 6274572..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                function.h                                 */
-/*                                                                           */
-/*                            Function management                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef FUNCTION_H
-#define FUNCTION_H
-
-
-
-/*****************************************************************************/
-/*                                   data                                    */
-/*****************************************************************************/
-
-
-
-/* Structure that holds all data needed for function activation */
-typedef struct Function Function;
-
-/* Function activation data for current function (or NULL) */
-extern Function* CurrentFunc;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-const char* F_GetFuncName (const Function* F);
-/* Return the name of the current function */
-
-unsigned F_GetParamCount (const Function* F);
-/* Return the parameter count for the current function */
-
-unsigned F_GetParamSize (const Function* F);
-/* Return the parameter size for the current function */
-
-Type* F_GetReturnType (Function* F);
-/* Get the return type for the function */
-
-int F_HasVoidReturn (const Function* F);
-/* Return true if the function does not have a return value */
-
-void F_ReturnFound (Function* F);
-/* Mark the function as having a return statement */
-
-int F_HasReturn (const Function* F);
-/* Return true if the function contains a return statement*/
-
-int F_IsMainFunc (const Function* F);
-/* Return true if this is the main function */
-
-int F_IsVariadic (const Function* F);
-/* Return true if this is a variadic function */
-
-int F_IsOldStyle (const Function* F);
-/* Return true if this is an old style (K&R) function */
-
-int F_HasOldStyleIntRet (const Function* F);
-/* Return true if this is an old style (K&R) function with an implicit int return */
-
-unsigned F_GetRetLab (const Function* F);
-/* Return the return jump label */
-
-int F_GetTopLevelSP (const Function* F);
-/* Get the value of the stack pointer on function top level */
-
-int F_ReserveLocalSpace (Function* F, unsigned Size);
-/* Reserve (but don't allocate) the given local space and return the stack
-** offset.
-*/
-
-int F_GetStackPtr (const Function* F);
-/* Return the current stack pointer including reserved (but not allocated)
-** space on the stack.
-*/
-
-void F_AllocLocalSpace (Function* F);
-/* Allocate any local space previously reserved. The function will do
-** nothing if there is no reserved local space.
-*/
-
-int F_AllocRegVar (Function* F, const Type* Type);
-/* Allocate a register variable for the given variable type. If the allocation
-** was successful, return the offset of the register variable in the register
-** bank (zero page storage). If there is no register space left, return -1.
-*/
-
-void NewFunc (struct SymEntry* Func);
-/* Parse argument declarations and function body. */
-
-
-
-/* End of function.h */
-
-#endif
diff --git a/src/cc65/global.c b/src/cc65/global.c
deleted file mode 100644 (file)
index dbdd72f..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.c                                  */
-/*                                                                           */
-/*                 Global variables for the cc65 C compiler                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2015, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include "global.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-unsigned char AddSource         = 0;    /* Add source lines as comments */
-unsigned char AutoCDecl         = 0;    /* Make functions default to __cdecl__ */
-unsigned char DebugInfo         = 0;    /* Add debug info to the obj */
-unsigned char PreprocessOnly    = 0;    /* Just preprocess the input */
-unsigned char DebugOptOutput    = 0;    /* Output debug stuff */
-unsigned      RegisterSpace     = 6;    /* Space available for register vars */
-
-/* Stackable options */
-IntStack WritableStrings    = INTSTACK(0);  /* Literal strings are r/w */
-IntStack LocalStrings       = INTSTACK(0);  /* Emit string literals immediately */
-IntStack InlineStdFuncs     = INTSTACK(0);  /* Inline some known functions */
-IntStack EnableRegVars      = INTSTACK(0);  /* Enable register variables */
-IntStack AllowRegVarAddr    = INTSTACK(0);  /* Allow taking addresses of register vars */
-IntStack RegVarsToCallStack = INTSTACK(0);  /* Save reg variables on call stack */
-IntStack StaticLocals       = INTSTACK(0);  /* Make local variables static */
-IntStack SignedChars        = INTSTACK(0);  /* Make characters signed by default */
-IntStack CheckStack         = INTSTACK(0);  /* Generate stack overflow checks */
-IntStack Optimize           = INTSTACK(0);  /* Optimize flag */
-IntStack CodeSizeFactor     = INTSTACK(100);/* Size factor for generated code */
-IntStack DataAlignment      = INTSTACK(1);  /* Alignment for data */
-
-/* File names */
-StrBuf DepName     = STATIC_STRBUF_INITIALIZER; /* Name of dependencies file */
-StrBuf FullDepName = STATIC_STRBUF_INITIALIZER; /* Name of full dependencies file */
-StrBuf DepTarget   = STATIC_STRBUF_INITIALIZER; /* Name of dependency target */
diff --git a/src/cc65/global.h b/src/cc65/global.h
deleted file mode 100644 (file)
index 8b0af5a..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.h                                  */
-/*                                                                           */
-/*                 Global variables for the cc65 C compiler                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2015, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef GLOBAL_H
-#define GLOBAL_H
-
-
-
-/* common */
-#include "intstack.h"
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Options */
-extern unsigned char    AddSource;              /* Add source lines as comments */
-extern unsigned char    AutoCDecl;              /* Make functions default to __cdecl__ */
-extern unsigned char    DebugInfo;              /* Add debug info to the obj */
-extern unsigned char    PreprocessOnly;         /* Just preprocess the input */
-extern unsigned char    DebugOptOutput;         /* Output debug stuff */
-extern unsigned         RegisterSpace;          /* Space available for register vars */
-
-/* Stackable options */
-extern IntStack         WritableStrings;        /* Literal strings are r/w */
-extern IntStack         LocalStrings;           /* Emit string literals immediately */
-extern IntStack         InlineStdFuncs;         /* Inline some known functions */
-extern IntStack         EnableRegVars;          /* Enable register variables */
-extern IntStack         AllowRegVarAddr;        /* Allow taking addresses of register vars */
-extern IntStack         RegVarsToCallStack;     /* Save reg variables on call stack */
-extern IntStack         StaticLocals;           /* Make local variables static */
-extern IntStack         SignedChars;            /* Make characters signed by default */
-extern IntStack         CheckStack;             /* Generate stack overflow checks */
-extern IntStack         Optimize;               /* Optimize flag */
-extern IntStack         CodeSizeFactor;         /* Size factor for generated code */
-extern IntStack         DataAlignment;          /* Alignment for data */
-
-/* File names */
-extern StrBuf           DepName;                /* Name of dependencies file */
-extern StrBuf           FullDepName;            /* Name of full dependencies file */
-extern StrBuf           DepTarget;              /* Name of dependency target */
-
-
-
-/* End of global.h */
-
-#endif
diff --git a/src/cc65/goto.c b/src/cc65/goto.c
deleted file mode 100644 (file)
index 6e282c6..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  goto.c                                   */
-/*                                                                           */
-/*              Goto and label handling for the cc65 C compiler              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include "codegen.h"
-#include "error.h"
-#include "scanner.h"
-#include "symtab.h"
-#include "goto.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void GotoStatement (void)
-/* Process a goto statement. */
-{
-    /* Eat the "goto" */
-    NextToken ();
-
-    /* Label name must follow */
-    if (CurTok.Tok != TOK_IDENT) {
-
-        Error ("Label name expected");
-
-    } else {
-
-        /* Add a new label symbol if we don't have one until now */
-        SymEntry* Entry = AddLabelSym (CurTok.Ident, SC_REF);
-
-        /* Jump to the label */
-        g_jump (Entry->V.Label);
-    }
-
-    /* Eat the label name */
-    NextToken ();
-}
-
-
-
-void DoLabel (void)
-/* Define a label. */
-{
-    /* Add a label symbol */
-    SymEntry* Entry = AddLabelSym (CurTok.Ident, SC_DEF);
-
-    /* Emit the jump label */
-    g_defcodelabel (Entry->V.Label);
-
-    /* Eat the ident and colon */
-    NextToken ();
-    NextToken ();
-}
diff --git a/src/cc65/goto.h b/src/cc65/goto.h
deleted file mode 100644 (file)
index 3ca8223..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  goto.h                                   */
-/*                                                                           */
-/*              Goto and label handling for the cc65 C compiler              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef GOTO_H
-#define GOTO_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void GotoStatement (void);
-/* Process a goto statement. */
-
-void DoLabel (void);
-/* Define a goto label. */
-
-
-
-/* End of goto.h */
-
-#endif
diff --git a/src/cc65/hexval.c b/src/cc65/hexval.c
deleted file mode 100644 (file)
index 37e43da..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   hexval.c                                */
-/*                                                                           */
-/*                     Convert hex digits to numeric values                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "chartype.h"
-
-/* cc65 */
-#include "error.h"
-#include "hexval.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned HexVal (int C)
-/* Convert a hex digit into a value. The function will emit an error for
-** invalid hex digits.
-*/
-{
-    if (!IsXDigit (C)) {
-        Error ("Invalid hexadecimal digit: `%c'", C);
-    }
-    if (IsDigit (C)) {
-        return C - '0';
-    } else {
-        return toupper (C) - 'A' + 10;
-    }
-}
diff --git a/src/cc65/hexval.h b/src/cc65/hexval.h
deleted file mode 100644 (file)
index 0361ee0..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   hexval.h                                */
-/*                                                                           */
-/*                     Convert hex digits to numeric values                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef HEXVAL_H
-#define HEXVAL_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned HexVal (int C);
-/* Convert a hex digit into a value. The function will emit an error for 
-** invalid hex digits.
-*/
-
-
-
-/* End of hexval.h */
-
-#endif
diff --git a/src/cc65/ident.c b/src/cc65/ident.c
deleted file mode 100644 (file)
index 7748095..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  ident.c                                  */
-/*                                                                           */
-/*                 Identifier handling for the cc65 compiler                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "chartype.h"
-                     
-/* cc65 */
-#include "ident.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int IsIdent (char c)
-/* Return true if the given char may start an identifier */
-{
-    return (IsAlpha (c) || c == '_');
-}
diff --git a/src/cc65/ident.h b/src/cc65/ident.h
deleted file mode 100644 (file)
index 36d5ae1..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  ident.h                                  */
-/*                                                                           */
-/*                 Identifier handling for the cc65 compiler                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef IDENT_H
-#define IDENT_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Maximum length of an identifier and the corresponding char array */
-#define MAX_IDENTLEN    64
-#define IDENTSIZE       (MAX_IDENTLEN+1)
-
-/* Variable that holds an identifer */
-typedef char ident [IDENTSIZE];
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int IsIdent (char c);
-/* Return true if the given char may start an identifier */
-
-
-
-/* End of ident.h */
-
-#endif
diff --git a/src/cc65/incpath.c b/src/cc65/incpath.c
deleted file mode 100644 (file)
index ab164d5..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 incpath.c                                 */
-/*                                                                           */
-/*                      Include path handling for cc65                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* cc65 */
-#include "incpath.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-SearchPaths*    SysIncSearchPath;       /* System include path */
-SearchPaths*    UsrIncSearchPath;       /* User include path */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void InitIncludePaths (void)
-/* Initialize the include path search list */
-{
-    /* Create the search path lists */
-    SysIncSearchPath = NewSearchPath ();
-    UsrIncSearchPath = NewSearchPath ();
-}
-
-
-
-void FinishIncludePaths (void)
-/* Finish creating the include path search lists. */
-{
-    /* Add specific paths from the environment */
-    AddSearchPathFromEnv (SysIncSearchPath, "CC65_INC");
-    AddSearchPathFromEnv (UsrIncSearchPath, "CC65_INC");
-
-    /* Add paths relative to a main directory defined in an env. var. */
-    AddSubSearchPathFromEnv (SysIncSearchPath, "CC65_HOME", "include");
-
-    /* Add some compiled-in search paths if defined at compile time. */
-#if defined(CC65_INC) && !defined(_WIN32)
-    AddSearchPath (SysIncSearchPath, STRINGIZE (CC65_INC));
-#endif
-
-    /* Add paths relative to the parent directory of the Windows binary. */
-    AddSubSearchPathFromWinBin (SysIncSearchPath, "include");
-}
diff --git a/src/cc65/incpath.h b/src/cc65/incpath.h
deleted file mode 100644 (file)
index 05824ac..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 incpath.h                                 */
-/*                                                                           */
-/*                      Include path handling for cc65                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef INCPATH_H
-#define INCPATH_H
-
-
-
-/* common */
-#include "searchpath.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-extern SearchPaths*     SysIncSearchPath;       /* System include path */
-extern SearchPaths*     UsrIncSearchPath;       /* User include path */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void InitIncludePaths (void);
-/* Initialize the include path search list */
-
-void FinishIncludePaths (void);
-/* Finish creating the include path search lists. */
-
-
-
-/* End of incpath.h */
-
-#endif
diff --git a/src/cc65/input.c b/src/cc65/input.c
deleted file mode 100644 (file)
index 005e0c6..0000000
+++ /dev/null
@@ -1,663 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  input.c                                  */
-/*                                                                           */
-/*                            Input file handling                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "check.h"
-#include "coll.h"
-#include "filestat.h"
-#include "fname.h"
-#include "print.h"
-#include "strbuf.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "codegen.h"
-#include "error.h"
-#include "global.h"
-#include "incpath.h"
-#include "input.h"
-#include "lineinfo.h"
-#include "output.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* The current input line */
-StrBuf* Line;
-
-/* Current and next input character */
-char CurC  = '\0';
-char NextC = '\0';
-
-/* Maximum count of nested includes */
-#define MAX_INC_NESTING         16
-
-/* Struct that describes an input file */
-typedef struct IFile IFile;
-struct IFile {
-    unsigned        Index;      /* File index */
-    unsigned        Usage;      /* Usage counter */
-    unsigned long   Size;       /* File size */
-    unsigned long   MTime;      /* Time of last modification */
-    InputType       Type;       /* Type of input file */
-    char            Name[1];    /* Name of file (dynamically allocated) */
-};
-
-/* Struct that describes an active input file */
-typedef struct AFile AFile;
-struct AFile {
-    unsigned    Line;           /* Line number for this file */
-    FILE*       F;              /* Input file stream */
-    IFile*      Input;          /* Points to corresponding IFile */
-    int         SearchPath;     /* True if we've added a path for this file */
-};
-
-/* List of all input files */
-static Collection IFiles = STATIC_COLLECTION_INITIALIZER;
-
-/* List of all active files */
-static Collection AFiles = STATIC_COLLECTION_INITIALIZER;
-
-/* Input stack used when preprocessing. */
-static Collection InputStack = STATIC_COLLECTION_INITIALIZER;
-
-
-
-/*****************************************************************************/
-/*                               struct IFile                                */
-/*****************************************************************************/
-
-
-
-static IFile* NewIFile (const char* Name, InputType Type)
-/* Create and return a new IFile */
-{
-    /* Get the length of the name */
-    unsigned Len = strlen (Name);
-
-    /* Allocate a IFile structure */
-    IFile* IF = (IFile*) xmalloc (sizeof (IFile) + Len);
-
-    /* Initialize the fields */
-    IF->Index = CollCount (&IFiles) + 1;
-    IF->Usage = 0;
-    IF->Size  = 0;
-    IF->MTime = 0;
-    IF->Type  = Type;
-    memcpy (IF->Name, Name, Len+1);
-
-    /* Insert the new structure into the IFile collection */
-    CollAppend (&IFiles, IF);
-
-    /* Return the new struct */
-    return IF;
-}
-
-
-
-/*****************************************************************************/
-/*                               struct AFile                                */
-/*****************************************************************************/
-
-
-
-static AFile* NewAFile (IFile* IF, FILE* F)
-/* Create a new AFile, push it onto the stack, add the path of the file to
-** the path search list, and finally return a pointer to the new AFile struct.
-*/
-{
-    StrBuf Path = AUTO_STRBUF_INITIALIZER;
-
-    /* Allocate a AFile structure */
-    AFile* AF = (AFile*) xmalloc (sizeof (AFile));
-
-    /* Initialize the fields */
-    AF->Line  = 0;
-    AF->F     = F;
-    AF->Input = IF;
-
-    /* Increment the usage counter of the corresponding IFile. If this
-    ** is the first use, set the file data and output debug info if
-    ** requested.
-    */
-    if (IF->Usage++ == 0) {
-
-        /* Get file size and modification time. There a race condition here,
-        ** since we cannot use fileno() (non standard identifier in standard
-        ** header file), and therefore not fstat. When using stat with the
-        ** file name, there's a risk that the file was deleted and recreated
-        ** while it was open. Since mtime and size are only used to check
-        ** if a file has changed in the debugger, we will ignore this problem
-        ** here.
-        */
-        struct stat Buf;
-        if (FileStat (IF->Name, &Buf) != 0) {
-            /* Error */
-            Fatal ("Cannot stat `%s': %s", IF->Name, strerror (errno));
-        }
-        IF->Size  = (unsigned long) Buf.st_size;
-        IF->MTime = (unsigned long) Buf.st_mtime;
-
-        /* Set the debug data */
-        g_fileinfo (IF->Name, IF->Size, IF->MTime);
-    }
-
-    /* Insert the new structure into the AFile collection */
-    CollAppend (&AFiles, AF);
-
-    /* Get the path of this file and add it as an extra search path.
-    ** To avoid file search overhead, we will add one path only once.
-    ** This is checked by the PushSearchPath function.
-    */
-    SB_CopyBuf (&Path, IF->Name, FindName (IF->Name) - IF->Name);
-    SB_Terminate (&Path);
-    AF->SearchPath = PushSearchPath (UsrIncSearchPath, SB_GetConstBuf (&Path));
-    SB_Done (&Path);
-
-    /* Return the new struct */
-    return AF;
-}
-
-
-
-static void FreeAFile (AFile* AF)
-/* Free an AFile structure */
-{
-    xfree (AF);
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static IFile* FindFile (const char* Name)
-/* Find the file with the given name in the list of all files. Since the list
-** is not large (usually less than 10), I don't care about using hashes or
-** similar things and do a linear search.
-*/
-{
-    unsigned I;
-    for (I = 0; I < CollCount (&IFiles); ++I) {
-        /* Get the file struct */
-        IFile* IF = (IFile*) CollAt (&IFiles, I);
-        /* Check the name */
-        if (strcmp (Name, IF->Name) == 0) {
-            /* Found, return the struct */
-            return IF;
-        }
-    }
-
-    /* Not found */
-    return 0;
-}
-
-
-
-void OpenMainFile (const char* Name)
-/* Open the main file. Will call Fatal() in case of failures. */
-{
-    AFile* MainFile;
-
-
-    /* Setup a new IFile structure for the main file */
-    IFile* IF = NewIFile (Name, IT_MAIN);
-
-    /* Open the file for reading */
-    FILE* F = fopen (Name, "r");
-    if (F == 0) {
-        /* Cannot open */
-        Fatal ("Cannot open input file `%s': %s", Name, strerror (errno));
-    }
-
-    /* Allocate a new AFile structure for the file */
-    MainFile = NewAFile (IF, F);
-
-    /* Allocate the input line buffer */
-    Line = NewStrBuf ();
-
-    /* Update the line infos, so we have a valid line info even at start of
-    ** the main file before the first line is read.
-    */
-    UpdateLineInfo (MainFile->Input, MainFile->Line, Line);
-}
-
-
-
-void OpenIncludeFile (const char* Name, InputType IT)
-/* Open an include file and insert it into the tables. */
-{
-    char*  N;
-    FILE*  F;
-    IFile* IF;
-
-    /* Check for the maximum include nesting */
-    if (CollCount (&AFiles) > MAX_INC_NESTING) {
-        PPError ("Include nesting too deep");
-        return;
-    }
-
-    /* Search for the file */
-    N = SearchFile ((IT == IT_SYSINC)? SysIncSearchPath : UsrIncSearchPath, Name);
-    if (N == 0) {
-        PPError ("Include file `%s' not found", Name);
-        return;
-    }
-
-    /* Search the list of all input files for this file. If we don't find
-    ** it, create a new IFile object.
-    */
-    IF = FindFile (N);
-    if (IF == 0) {
-        IF = NewIFile (N, IT);
-    }
-
-    /* We don't need N any longer, since we may now use IF->Name */
-    xfree (N);
-
-    /* Open the file */
-    F = fopen (IF->Name, "r");
-    if (F == 0) {
-        /* Error opening the file */
-        PPError ("Cannot open include file `%s': %s", IF->Name, strerror (errno));
-        return;
-    }
-
-    /* Debugging output */
-    Print (stdout, 1, "Opened include file `%s'\n", IF->Name);
-
-    /* Allocate a new AFile structure */
-    (void) NewAFile (IF, F);
-}
-
-
-
-static void CloseIncludeFile (void)
-/* Close an include file and switch to the higher level file. Set Input to
-** NULL if this was the main file.
-*/
-{
-    AFile* Input;
-
-    /* Get the number of active input files */
-    unsigned AFileCount = CollCount (&AFiles);
-
-    /* Must have an input file when called */
-    PRECONDITION (AFileCount > 0);
-
-    /* Get the current active input file */
-    Input = (AFile*) CollLast (&AFiles);
-
-    /* Close the current input file (we're just reading so no error check) */
-    fclose (Input->F);
-
-    /* Delete the last active file from the active file collection */
-    CollDelete (&AFiles, AFileCount-1);
-
-    /* If we had added an extra search path for this AFile, remove it */
-    if (Input->SearchPath) {
-        PopSearchPath (UsrIncSearchPath);
-    }
-
-    /* Delete the active file structure */
-    FreeAFile (Input);
-}
-
-
-
-static void GetInputChar (void)
-/* Read the next character from the input stream and make CurC and NextC
-** valid. If end of line is reached, both are set to NUL, no more lines
-** are read by this function.
-*/
-{
-    /* Drop all pushed fragments that don't have data left */
-    while (SB_GetIndex (Line) >= SB_GetLen (Line)) {
-        /* Cannot read more from this line, check next line on stack if any */
-        if (CollCount (&InputStack) == 0) {
-            /* This is THE line */
-            break;
-        }
-        FreeStrBuf (Line);
-        Line = CollPop (&InputStack);
-    }
-
-    /* Now get the next characters from the line */
-    if (SB_GetIndex (Line) >= SB_GetLen (Line)) {
-        CurC = NextC = '\0';
-    } else {
-        CurC = SB_AtUnchecked (Line, SB_GetIndex (Line));
-        if (SB_GetIndex (Line) + 1 < SB_GetLen (Line)) {
-            /* NextC comes from this fragment */
-            NextC = SB_AtUnchecked (Line, SB_GetIndex (Line) + 1);
-        } else {
-            /* NextC comes from next fragment */
-            if (CollCount (&InputStack) > 0) {
-                NextC = ' ';
-            } else {
-                NextC = '\0';
-            }
-        }
-    }
-}
-
-
-
-void NextChar (void)
-/* Skip the current input character and read the next one from the input
-** stream. CurC and NextC are valid after the call. If end of line is
-** reached, both are set to NUL, no more lines are read by this function.
-*/
-{
-    /* Skip the last character read */
-    SB_Skip (Line);
-
-    /* Read the next one */
-    GetInputChar ();
-}
-
-
-
-void ClearLine (void)
-/* Clear the current input line */
-{
-    unsigned I;
-
-    /* Remove all pushed fragments from the input stack */
-    for (I = 0; I < CollCount (&InputStack); ++I) {
-        FreeStrBuf (CollAtUnchecked (&InputStack, I));
-    }
-    CollDeleteAll (&InputStack);
-
-    /* Clear the contents of Line */
-    SB_Clear (Line);
-    CurC    = '\0';
-    NextC   = '\0';
-}
-
-
-
-StrBuf* InitLine (StrBuf* Buf)
-/* Initialize Line from Buf and read CurC and NextC from the new input line.
-** The function returns the old input line.
-*/
-{
-    StrBuf* OldLine = Line;
-    Line  = Buf;
-    CurC  = SB_LookAt (Buf, SB_GetIndex (Buf));
-    NextC = SB_LookAt (Buf, SB_GetIndex (Buf) + 1);
-    return OldLine;
-}
-
-
-
-int NextLine (void)
-/* Get a line from the current input. Returns 0 on end of file. */
-{
-    AFile*      Input;
-
-    /* Clear the current line */
-    ClearLine ();
-
-    /* If there is no file open, bail out, otherwise get the current input file */
-    if (CollCount (&AFiles) == 0) {
-        return 0;
-    }
-    Input = CollLast (&AFiles);
-
-    /* Read characters until we have one complete line */
-    while (1) {
-
-        /* Read the next character */
-        int C = fgetc (Input->F);
-
-        /* Check for EOF */
-        if (C == EOF) {
-
-            /* Accept files without a newline at the end */
-            if (SB_NotEmpty (Line)) {
-                ++Input->Line;
-                break;
-            }
-
-            /* Leave the current file */
-            CloseIncludeFile ();
-
-            /* If there is no file open, bail out, otherwise get the
-            ** previous input file and start over.
-            */
-            if (CollCount (&AFiles) == 0) {
-                return 0;
-            }
-            Input = CollLast (&AFiles);
-            continue;
-        }
-
-        /* Check for end of line */
-        if (C == '\n') {
-
-            /* We got a new line */
-            ++Input->Line;
-
-            /* If the \n is preceeded by a \r, remove the \r, so we can read
-            ** DOS/Windows files under *nix.
-            */
-            if (SB_LookAtLast (Line) == '\r') {
-                SB_Drop (Line, 1);
-            }
-
-            /* If we don't have a line continuation character at the end,
-            ** we're done with this line. Otherwise replace the character
-            ** by a newline and continue reading.
-            */
-            if (SB_LookAtLast (Line) == '\\') {
-                Line->Buf[Line->Len-1] = '\n';
-            } else {
-                break;
-            }
-
-        } else if (C != '\0') {         /* Ignore embedded NULs */
-
-            /* Just some character, add it to the line */
-            SB_AppendChar (Line, C);
-
-        }
-    }
-
-    /* Add a termination character to the string buffer */
-    SB_Terminate (Line);
-
-    /* Initialize the current and next characters. */
-    InitLine (Line);
-
-    /* Create line information for this line */
-    UpdateLineInfo (Input->Input, Input->Line, Line);
-
-    /* Done */
-    return 1;
-}
-
-
-
-const char* GetInputFile (const struct IFile* IF)
-/* Return a filename from an IFile struct */
-{
-    return IF->Name;
-}
-
-
-
-const char* GetCurrentFile (void)
-/* Return the name of the current input file */
-{
-    unsigned AFileCount = CollCount (&AFiles);
-    if (AFileCount > 0) {
-        const AFile* AF = (const AFile*) CollAt (&AFiles, AFileCount-1);
-        return AF->Input->Name;
-    } else {
-        /* No open file. Use the main file if we have one. */
-        unsigned IFileCount = CollCount (&IFiles);
-        if (IFileCount > 0) {
-            const IFile* IF = (const IFile*) CollAt (&IFiles, 0);
-            return IF->Name;
-        } else {
-            return "(outside file scope)";
-        }
-    }
-}
-
-
-
-unsigned GetCurrentLine (void)
-/* Return the line number in the current input file */
-{
-    unsigned AFileCount = CollCount (&AFiles);
-    if (AFileCount > 0) {
-        const AFile* AF = (const AFile*) CollAt (&AFiles, AFileCount-1);
-        return AF->Line;
-    } else {
-        /* No open file */
-        return 0;
-    }
-}
-
-
-
-static void WriteEscaped (FILE* F, const char* Name)
-/* Write a file name to a dependency file escaping spaces */
-{
-    while (*Name) {
-        if (*Name == ' ') {
-            /* Escape spaces */
-            fputc ('\\', F);
-        }
-        fputc (*Name, F);
-        ++Name;
-    }
-}
-
-
-
-static void WriteDep (FILE* F, InputType Types)
-/* Helper function. Writes all file names that match Types to the output */
-{
-    unsigned I;
-
-    /* Loop over all files */
-    unsigned FileCount = CollCount (&IFiles);
-    for (I = 0; I < FileCount; ++I) {
-
-        /* Get the next input file */
-        const IFile* IF = (const IFile*) CollAt (&IFiles, I);
-
-        /* Ignore it if it is not of the correct type */
-        if ((IF->Type & Types) == 0) {
-            continue;
-        }
-
-        /* If this is not the first file, add a space */
-        if (I > 0) {
-            fputc (' ', F);
-        }
-
-        /* Print the dependency escaping spaces */
-        WriteEscaped (F, IF->Name);
-    }
-}
-
-
-
-static void CreateDepFile (const char* Name, InputType Types)
-/* Create a dependency file with the given name and place dependencies for
-** all files with the given types there.
-*/
-{
-    /* Open the file */
-    FILE* F = fopen (Name, "w");
-    if (F == 0) {
-        Fatal ("Cannot open dependency file `%s': %s", Name, strerror (errno));
-    }
-
-    /* If a dependency target was given, use it, otherwise use the output
-    ** file name as target, followed by a tab character.
-    */
-    if (SB_IsEmpty (&DepTarget)) {
-        WriteEscaped (F, OutputFilename);
-    } else {
-        WriteEscaped (F, SB_GetConstBuf (&DepTarget));
-    }
-    fputs (":\t", F);
-
-    /* Write out the dependencies for the output file */
-    WriteDep (F, Types);
-    fputs ("\n\n", F);
-
-    /* Write out a phony dependency for the included files */
-    WriteDep (F, Types);
-    fputs (":\n\n", F);
-
-    /* Close the file, check for errors */
-    if (fclose (F) != 0) {
-        remove (Name);
-        Fatal ("Cannot write to dependeny file (disk full?)");
-    }
-}
-
-
-
-void CreateDependencies (void)
-/* Create dependency files requested by the user */
-{
-    if (SB_NotEmpty (&DepName)) {
-        CreateDepFile (SB_GetConstBuf (&DepName),
-                       IT_MAIN | IT_USRINC);
-    }
-    if (SB_NotEmpty (&FullDepName)) {
-        CreateDepFile (SB_GetConstBuf (&FullDepName),
-                       IT_MAIN | IT_SYSINC | IT_USRINC);
-    }
-}
diff --git a/src/cc65/input.h b/src/cc65/input.h
deleted file mode 100644 (file)
index a643800..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  input.h                                  */
-/*                                                                           */
-/*                            Input file handling                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2010, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef INPUT_H
-#define INPUT_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                   data                                    */
-/*****************************************************************************/
-
-
-
-/* An enum that describes different types of input files. The members are
-** choosen so that it is possible to combine them to bitsets
-*/
-typedef enum {
-    IT_MAIN   = 0x01,           /* Main input file */
-    IT_SYSINC = 0x02,           /* System include file (using <>) */
-    IT_USRINC = 0x04,           /* User include file (using "") */
-} InputType;
-
-/* Forward for an IFile structure */
-struct IFile;
-
-/* The current input line */
-extern StrBuf* Line;
-
-/* Current and next input character */
-extern char CurC;
-extern char NextC;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void OpenMainFile (const char* Name);
-/* Open the main file. Will call Fatal() in case of failures. */
-
-void OpenIncludeFile (const char* Name, InputType IT);
-/* Open an include file and insert it into the tables. */
-
-void NextChar (void);
-/* Read the next character from the input stream and make CurC and NextC
-** valid. If end of line is reached, both are set to NUL, no more lines
-** are read by this function.
-*/
-
-void ClearLine (void);
-/* Clear the current input line */
-
-StrBuf* InitLine (StrBuf* Buf);
-/* Initialize Line from Buf and read CurC and NextC from the new input line.
-** The function returns the old input line.
-*/
-
-int NextLine (void);
-/* Get a line from the current input. Returns 0 on end of file. */
-
-const char* GetInputFile (const struct IFile* IF);
-/* Return a filename from an IFile struct */
-
-const char* GetCurrentFile (void);
-/* Return the name of the current input file */
-
-unsigned GetCurrentLine (void);
-/* Return the line number in the current input file */
-
-void CreateDependencies (void);
-/* Create dependency files requested by the user */
-
-
-
-/* End of input.h */
-
-#endif
diff --git a/src/cc65/lineinfo.c b/src/cc65/lineinfo.c
deleted file mode 100644 (file)
index f5c2e26..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                lineinfo.c                                 */
-/*                                                                           */
-/*                      Source file line info structure                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "chartype.h"
-#include "check.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "global.h"
-#include "input.h"
-#include "lineinfo.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Global pointer to line information for the current line */
-static LineInfo* CurLineInfo = 0;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static LineInfo* NewLineInfo (struct IFile* F, unsigned LineNum, const StrBuf* Line)
-/* Create and return a new line info. Ref count will be 1. */
-{
-    unsigned    Len;
-    LineInfo*   LI;
-    const char* S;
-    char*       T;
-
-    /* Get the length of the line and a pointer to the line buffer */
-    Len = SB_GetLen (Line);
-    S   = SB_GetConstBuf (Line);
-
-    /* Skip leading spaces in Line */
-    while (Len > 0 && IsBlank (*S)) {
-        ++S;
-        --Len;
-    }
-
-    /* Allocate memory for the line info and the input line */
-    LI = xmalloc (sizeof (LineInfo) + Len);
-
-    /* Initialize the fields */
-    LI->RefCount  = 1;
-    LI->InputFile = F;
-    LI->LineNum   = LineNum;
-
-    /* Copy the line, replacing tabs by spaces in the given line since tabs
-    ** will give rather arbitrary results when used in the output later, and
-    ** if we do it here, we won't need another copy later.
-    */
-    T = LI->Line;
-    while (Len--) {
-        if (*S == '\t') {
-            *T = ' ';
-        } else {
-            *T = *S;
-        }
-        ++S;
-        ++T;
-    }
-
-    /* Add the terminator */
-    *T = '\0';
-
-    /* Return the new struct */
-    return LI;
-}
-
-
-
-static void FreeLineInfo (LineInfo* LI)
-/* Free a LineInfo structure */
-{
-    xfree (LI);
-}
-
-
-
-LineInfo* UseLineInfo (LineInfo* LI)
-/* Increase the reference count of the given line info and return it. */
-{
-    CHECK (LI != 0);
-    ++LI->RefCount;
-    return LI;
-}
-
-
-
-void ReleaseLineInfo (LineInfo* LI)
-/* Release a reference to the given line info, free the structure if the
-** reference count drops to zero.
-*/
-{
-    CHECK (LI && LI->RefCount > 0);
-    if (--LI->RefCount == 0) {
-        /* No more references, free it */
-        FreeLineInfo (LI);
-    }
-}
-
-
-
-LineInfo* GetCurLineInfo (void)
-/* Return a pointer to the current line info. The reference count is NOT
-** increased, use UseLineInfo for that purpose.
-*/
-{
-    return CurLineInfo;
-}
-
-
-
-void UpdateLineInfo (struct IFile* F, unsigned LineNum, const StrBuf* Line)
-/* Update the line info - called if a new line is read */
-{
-    /* If a current line info exists, release it */
-    if (CurLineInfo) {
-        ReleaseLineInfo (CurLineInfo);
-    }
-
-    /* If we have intermixed assembly switched off, use an empty line instead
-    ** of the supplied one to save some memory.
-    */
-    if (!AddSource) {
-        Line = &EmptyStrBuf;
-    }
-
-    /* Create a new line info */
-    CurLineInfo = NewLineInfo (F, LineNum, Line);
-}
-
-
-
-const char* GetInputName (const LineInfo* LI)
-/* Return the file name from a line info */
-{
-    PRECONDITION (LI != 0);
-    return GetInputFile (LI->InputFile);
-}
-
-
-
-unsigned GetInputLine (const LineInfo* LI)
-/* Return the line number from a line info */
-{
-    PRECONDITION (LI != 0);
-    return LI->LineNum;
-}
diff --git a/src/cc65/lineinfo.h b/src/cc65/lineinfo.h
deleted file mode 100644 (file)
index 8dbe068..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                lineinfo.h                                 */
-/*                                                                           */
-/*                      Source file line info structure                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef LINEINFO_H
-#define LINEINFO_H
-
-
-                   
-/* common */
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-/* Input file structure */
-struct IFile;           
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* The text for the actual line is allocated at the end of the structure, so
-** the size of the structure varies.
-*/
-typedef struct LineInfo LineInfo;
-struct LineInfo {
-    unsigned        RefCount;             /* Reference counter */
-    struct IFile*   InputFile;            /* Input file for this line */
-    unsigned        LineNum;              /* Line number */
-    char            Line[1];              /* Source code line */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-LineInfo* UseLineInfo (LineInfo* LI);
-/* Increase the reference count of the given line info and return it. */
-
-void ReleaseLineInfo (LineInfo* LI);
-/* Release a reference to the given line info, free the structure if the
-** reference count drops to zero.
-*/
-
-LineInfo* GetCurLineInfo (void);
-/* Return a pointer to the current line info. The reference count is NOT
-** increased, use UseLineInfo for that purpose.
-*/
-
-void UpdateLineInfo (struct IFile* F, unsigned LineNum, const StrBuf* Line);
-/* Update the line info - called if a new line is read */
-
-const char* GetInputName (const LineInfo* LI);
-/* Return the file name from a line info */
-
-unsigned GetInputLine (const LineInfo* LI);
-/* Return the line number from a line info */
-
-
-
-/* End of lineinfo.h */
-
-#endif
diff --git a/src/cc65/litpool.c b/src/cc65/litpool.c
deleted file mode 100644 (file)
index c427310..0000000
+++ /dev/null
@@ -1,500 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 litpool.c                                 */
-/*                                                                           */
-/*              Literal string handling for the cc65 C compiler              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-
-/* common */
-#include "attrib.h"
-#include "check.h"
-#include "coll.h"
-#include "tgttrans.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "asmlabel.h"
-#include "codegen.h"
-#include "error.h"
-#include "global.h"
-#include "litpool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Definition of a literal */
-struct Literal {
-    unsigned    Label;                  /* Asm label for this literal */
-    int         RefCount;               /* Reference count */
-    int         Output;                 /* True if output has been generated */
-    StrBuf      Data;                   /* Literal data */
-};
-
-/* Definition of the literal pool */
-struct LiteralPool {
-    struct SymEntry*    Func;               /* Function that owns the pool */
-    Collection          WritableLiterals;   /* Writable literals in the pool */
-    Collection          ReadOnlyLiterals;   /* Readonly literals in the pool */
-};
-
-/* The global and current literal pool */
-static LiteralPool*     GlobalPool = 0;
-static LiteralPool*     LP         = 0;
-
-/* Stack that contains the nested literal pools. Since TOS is in LiteralPool
-** and functions aren't nested in C, the maximum depth is 1. I'm using a
-** collection anyway, so the code is prepared for nested functions or
-** whatever.
-*/
-static Collection       LPStack  = STATIC_COLLECTION_INITIALIZER;
-
-
-
-/*****************************************************************************/
-/*                              struct Literal                               */
-/*****************************************************************************/
-
-
-
-static Literal* NewLiteral (const void* Buf, unsigned Len)
-/* Create a new literal and return it */
-{
-    /* Allocate memory */
-    Literal* L = xmalloc (sizeof (*L));
-
-    /* Initialize the fields */
-    L->Label    = GetLocalLabel ();
-    L->RefCount = 0;
-    L->Output   = 0;
-    SB_Init (&L->Data);
-    SB_AppendBuf (&L->Data, Buf, Len);
-
-    /* Return the new literal */
-    return L;
-}
-
-
-
-static void FreeLiteral (Literal* L)
-/* Free a literal */
-{
-    /* Free the literal data */
-    SB_Done (&L->Data);
-
-    /* Free the structure itself */
-    xfree (L);
-}
-
-
-
-static void OutputLiteral (Literal* L)
-/* Output one literal to the currently active data segment */
-{
-    /* Translate the literal into the target charset */
-    TranslateLiteral (L);
-
-    /* Define the label for the literal */
-    g_defdatalabel (L->Label);
-
-    /* Output the literal data */
-    g_defbytes (SB_GetConstBuf (&L->Data), SB_GetLen (&L->Data));
-
-    /* Mark the literal as output */
-    L->Output = 1;
-}
-
-
-
-Literal* UseLiteral (Literal* L)
-/* Increase the reference counter for the literal and return it */
-{
-    /* Increase the reference count */
-    ++L->RefCount;
-
-    /* If --local-strings was given, immediately output the literal */
-    if (IS_Get (&LocalStrings)) {
-        /* Switch to the proper data segment */
-        if (IS_Get (&WritableStrings)) {
-            g_usedata ();
-        } else {
-            g_userodata ();
-        }
-        /* Output the literal */
-        OutputLiteral (L);
-    }
-
-    /* Return the literal */
-    return L;
-}
-
-
-
-void ReleaseLiteral (Literal* L)
-/* Decrement the reference counter for the literal */
-{
-    --L->RefCount;
-    CHECK (L->RefCount >= 0);
-}
-
-
-
-void TranslateLiteral (Literal* L)
-/* Translate a literal into the target charset. */
-{
-    TgtTranslateBuf (SB_GetBuf (&L->Data), SB_GetLen (&L->Data));
-}
-
-
-
-unsigned GetLiteralLabel (const Literal* L)
-/* Return the asm label for a literal */
-{
-    return L->Label;
-}
-
-
-
-const char* GetLiteralStr (const Literal* L)
-/* Return the data for a literal as pointer to char */
-{
-    return SB_GetConstBuf (&L->Data);
-}
-
-
-
-const StrBuf* GetLiteralStrBuf (const Literal* L)
-/* Return the data for a literal as pointer to the string buffer */
-{
-    return &L->Data;
-}
-
-
-
-unsigned GetLiteralSize (const Literal* L)
-/* Get the size of a literal string */
-{
-    return SB_GetLen (&L->Data);
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static LiteralPool* NewLiteralPool (struct SymEntry* Func)
-/* Create a new literal pool and return it */
-{
-    /* Allocate memory */
-    LiteralPool* LP = xmalloc (sizeof (*LP));
-
-    /* Initialize the fields */
-    LP->Func  = Func;
-    InitCollection (&LP->WritableLiterals);
-    InitCollection (&LP->ReadOnlyLiterals);
-
-    /* Return the new pool */
-    return LP;
-}
-
-
-
-static void FreeLiteralPool (LiteralPool* LP)
-/* Free a LiteralPool structure */
-{
-    /* Free the collections contained within the struct */
-    DoneCollection (&LP->WritableLiterals);
-    DoneCollection (&LP->ReadOnlyLiterals);
-
-    /* Free the struct itself */
-    xfree (LP);
-}
-
-
-
-static int Compare (void* Data attribute ((unused)),
-                    const void* Left, const void* Right)
-/* Compare function used when sorting the literal pool */
-{
-    /* Larger strings are considered "smaller" */
-    return (int) GetLiteralSize (Right) - (int) GetLiteralSize (Left);
-}
-
-
-
-void InitLiteralPool (void)
-/* Initialize the literal pool */
-{
-    /* Create the global literal pool */
-    GlobalPool = LP = NewLiteralPool (0);
-}
-
-
-
-void PushLiteralPool (struct SymEntry* Func)
-/* Push the current literal pool onto the stack and create a new one */
-{
-    /* We must have a literal pool to push! */
-    PRECONDITION (LP != 0);
-
-    /* Push the old pool */
-    CollAppend (&LPStack, LP);
-
-    /* Create a new one */
-    LP = NewLiteralPool (Func);
-}
-
-
-
-LiteralPool* PopLiteralPool (void)
-/* Pop the last literal pool from TOS and activate it. Return the old
-** literal pool.
-*/
-{
-    /* Remember the current literal pool */
-    LiteralPool* Old = LP;
-
-    /* Pop one from stack */
-    LP = CollPop (&LPStack);
-
-    /* Return the old one */
-    return Old;
-}
-
-
-
-static void MoveLiterals (Collection* Source, Collection* Target)
-/* Move referenced literals from Source to Target, delete unreferenced ones */
-{
-    unsigned I;
-
-    /* Move referenced literals, remove unreferenced ones */
-    for (I = 0; I < CollCount (Source); ++I) {
-
-        /* Get the literal */
-        Literal* L = CollAt (Source, I);
-
-        /* If it is referenced and not output, add it to the Target pool,
-        ** otherwise free it
-        */
-        if (L->RefCount && !L->Output) {
-            CollAppend (Target, L);
-        } else {
-            FreeLiteral (L);
-        }
-    }
-}
-
-
-
-void MoveLiteralPool (LiteralPool* LocalPool)
-/* Move all referenced literals in LocalPool to the global literal pool. This
-** function will free LocalPool after moving the used string literals.
-*/
-{
-    /* Move the literals */
-    MoveLiterals (&LocalPool->WritableLiterals, &GlobalPool->WritableLiterals);
-    MoveLiterals (&LocalPool->ReadOnlyLiterals, &GlobalPool->ReadOnlyLiterals);
-
-    /* Free the local literal pool */
-    FreeLiteralPool (LocalPool);
-}
-
-
-
-static void OutputWritableLiterals (Collection* Literals)
-/* Output the given writable literals */
-{
-    unsigned I;
-
-    /* If nothing there, exit... */
-    if (CollCount (Literals) == 0) {
-        return;
-    }
-
-    /* Switch to the correct segment */
-    g_usedata ();
-
-    /* Emit all literals that have a reference */
-    for (I = 0; I < CollCount (Literals); ++I) {
-
-        /* Get a pointer to the literal */
-        Literal* L = CollAtUnchecked (Literals, I);
-
-        /* Output this one, if it has references and wasn't already output */
-        if (L->RefCount > 0 && !L->Output) {
-            OutputLiteral (L);
-        }
-
-    }
-}
-
-
-
-static void OutputReadOnlyLiterals (Collection* Literals)
-/* Output the given readonly literals merging (even partial) duplicates */
-{
-    unsigned I;
-
-    /* If nothing there, exit... */
-    if (CollCount (Literals) == 0) {
-        return;
-    }
-
-    /* Switch to the correct segment */
-    g_userodata ();
-
-    /* Sort the literal pool by literal size. Larger strings go first */
-    CollSort (Literals, Compare, 0);
-
-    /* Emit all literals that have a reference */
-    for (I = 0; I < CollCount (Literals); ++I) {
-
-        unsigned J;
-        Literal* C;
-
-        /* Get the next literal */
-        Literal* L = CollAt (Literals, I);
-
-        /* Ignore it, if it doesn't have references or was already output */
-        if (L->RefCount == 0 || L->Output) {
-            continue;
-        }
-
-        /* Translate the literal into the target charset */
-        TranslateLiteral (L);
-
-        /* Check if this literal is part of another one. Since the literals
-        ** are sorted by size (larger ones first), it can only be part of a
-        ** literal with a smaller index.
-        ** Beware: Only check literals that have actually been referenced.
-        */
-        C = 0;
-        for (J = 0; J < I; ++J) {
-
-            const void* D;
-
-            /* Get a pointer to the compare literal */
-            Literal* L2 = CollAt (Literals, J);
-
-            /* Ignore literals that have no reference */
-            if (L2->RefCount == 0) {
-                continue;
-            }
-
-            /* Get a pointer to the data */
-            D = SB_GetConstBuf (&L2->Data) + SB_GetLen (&L2->Data) - SB_GetLen (&L->Data);
-
-            /* Compare the data */
-            if (memcmp (D, SB_GetConstBuf (&L->Data), SB_GetLen (&L->Data)) == 0) {
-                /* Remember the literal and terminate the loop */
-                C = L2;
-                break;
-            }
-        }
-
-        /* Check if we found a match */
-        if (C != 0) {
-
-            /* This literal is part of a longer literal, merge them */
-            g_aliasdatalabel (L->Label, C->Label, GetLiteralSize (C) - GetLiteralSize (L));
-
-        } else {
-
-            /* Define the label for the literal */
-            g_defdatalabel (L->Label);
-
-            /* Output the literal data */
-            g_defbytes (SB_GetConstBuf (&L->Data), SB_GetLen (&L->Data));
-
-        }
-
-        /* Mark the literal */
-        L->Output = 1;
-    }
-}
-
-
-
-void OutputLiteralPool (void)
-/* Output the global literal pool */
-{
-    /* Output both sorts of literals */
-    OutputWritableLiterals (&GlobalPool->WritableLiterals);
-    OutputReadOnlyLiterals (&GlobalPool->ReadOnlyLiterals);
-}
-
-
-
-Literal* AddLiteral (const char* S)
-/* Add a literal string to the literal pool. Return the literal. */
-{
-    return AddLiteralBuf (S, strlen (S) + 1);
-}
-
-
-
-Literal* AddLiteralBuf (const void* Buf, unsigned Len)
-/* Add a buffer containing a literal string to the literal pool. Return the
-** literal.
-*/
-{
-    /* Create a new literal */
-    Literal* L = NewLiteral (Buf, Len);
-
-    /* Add the literal to the correct pool */
-    if (IS_Get (&WritableStrings)) {
-        CollAppend (&LP->WritableLiterals, L);
-    } else {
-        CollAppend (&LP->ReadOnlyLiterals, L);
-    }
-
-    /* Return the new literal */
-    return L;
-}
-
-
-
-Literal* AddLiteralStr (const StrBuf* S)
-/* Add a literal string to the literal pool. Return the literal. */
-{
-    return AddLiteralBuf (SB_GetConstBuf (S), SB_GetLen (S));
-}
diff --git a/src/cc65/litpool.h b/src/cc65/litpool.h
deleted file mode 100644 (file)
index 6efdfb0..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 litpool.h                                 */
-/*                                                                           */
-/*              Literal string handling for the cc65 C compiler              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef LITPOOL_H
-#define LITPOOL_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Forward for struct SymEntry */
-struct SymEntry;
-
-/* Forward for a literal */
-typedef struct Literal Literal;
-
-/* Forward for a literal pool */
-typedef struct LiteralPool LiteralPool;
-
-
-
-/*****************************************************************************/
-/*                              struct Literal                               */
-/*****************************************************************************/
-
-
-
-Literal* UseLiteral (Literal* L);
-/* Increase the reference counter for the literal and return it */
-
-void ReleaseLiteral (Literal* L);
-/* Decrement the reference counter for the literal */
-
-void TranslateLiteral (Literal* L);
-/* Translate a literal into the target charset. */
-
-unsigned GetLiteralLabel (const Literal* L);
-/* Return the asm label for a literal */
-
-const char* GetLiteralStr (const Literal* L);
-/* Return the data for a literal as pointer to char */
-
-const StrBuf* GetLiteralStrBuf (const Literal* L);
-/* Return the data for a literal as pointer to the string buffer */
-
-unsigned GetLiteralSize (const Literal* L);
-/* Get the size of a literal string */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void InitLiteralPool (void);
-/* Initialize the literal pool */
-
-void PushLiteralPool (struct SymEntry* Func);
-/* Push the current literal pool onto the stack and create a new one */
-
-LiteralPool* PopLiteralPool (void);
-/* Pop the last literal pool from TOS and activate it. Return the old
-** literal pool.
-*/
-
-void MoveLiteralPool (LiteralPool* LocalPool);
-/* Move all referenced literals in LocalPool to the global literal pool. This
-** function will free LocalPool after moving the used string literals.
-*/
-
-void OutputLiteralPool (void);
-/* Output the literal pool */
-
-Literal* AddLiteral (const char* S);
-/* Add a literal string to the literal pool. Return the literal. */
-
-Literal* AddLiteralBuf (const void* Buf, unsigned Len);
-/* Add a buffer containing a literal string to the literal pool. Return the
-** literal.
-*/
-
-Literal* AddLiteralStr (const StrBuf* S);
-/* Add a literal string to the literal pool. Return the literal. */
-
-
-
-/* End of litpool.h */
-
-#endif
diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c
deleted file mode 100644 (file)
index fa37c6b..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                loadexpr.c                                 */
-/*                                                                           */
-/*               Load an expression into the primary register                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* cc65 */
-#include "codegen.h"
-#include "error.h"
-#include "exprdesc.h"
-#include "global.h"
-#include "loadexpr.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void LoadConstant (unsigned Flags, ExprDesc* Expr)
-/* Load the primary register with some constant value. */
-{
-    switch (ED_GetLoc (Expr)) {
-
-        case E_LOC_ABS:
-            /* Number constant */
-            g_getimmed (Flags | TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0);
-            break;
-
-        case E_LOC_GLOBAL:
-            /* Global symbol, load address */
-            g_getimmed ((Flags | CF_EXTERNAL) & ~CF_CONST, Expr->Name, Expr->IVal);
-            break;
-
-        case E_LOC_STATIC:
-        case E_LOC_LITERAL:
-            /* Static symbol or literal, load address */
-            g_getimmed ((Flags | CF_STATIC) & ~CF_CONST, Expr->Name, Expr->IVal);
-            break;
-
-        case E_LOC_REGISTER:
-            /* Register variable. Taking the address is usually not
-            ** allowed.
-            */
-            if (IS_Get (&AllowRegVarAddr) == 0) {
-                Error ("Cannot take the address of a register variable");
-            }
-            g_getimmed ((Flags | CF_REGVAR) & ~CF_CONST, Expr->Name, Expr->IVal);
-            break;
-
-        case E_LOC_STACK:
-            g_leasp (Expr->IVal);
-            break;
-
-        default:
-            Internal ("Unknown constant type: %04X", Expr->Flags);
-    }
-}
-
-
-
-void LoadExpr (unsigned Flags, struct ExprDesc* Expr)
-/* Load an expression into the primary register if it is not already there. */
-{
-    if (ED_IsLVal (Expr)) {
-
-        /* Dereferenced lvalue. If this is a bit field its type is unsigned.
-        ** But if the field is completely contained in the lower byte, we will
-        ** throw away the high byte anyway and may therefore load just the
-        ** low byte.
-        */
-        if (ED_IsBitField (Expr)) {
-            Flags |= (Expr->BitOffs + Expr->BitWidth <= CHAR_BITS)? CF_CHAR : CF_INT;
-            Flags |= CF_UNSIGNED;
-        } else {
-            Flags |= TypeOf (Expr->Type);
-        }
-        if (ED_NeedsTest (Expr)) {
-            Flags |= CF_TEST;
-        }
-
-        switch (ED_GetLoc (Expr)) {
-
-            case E_LOC_ABS:
-                /* Absolute: numeric address or const */
-                g_getstatic (Flags | CF_ABSOLUTE, Expr->IVal, 0);
-                break;
-
-            case E_LOC_GLOBAL:
-                /* Global variable */
-                g_getstatic (Flags | CF_EXTERNAL, Expr->Name, Expr->IVal);
-                break;
-
-            case E_LOC_STATIC:
-            case E_LOC_LITERAL:
-                /* Static variable or literal in the literal pool */
-                g_getstatic (Flags | CF_STATIC, Expr->Name, Expr->IVal);
-                break;
-
-            case E_LOC_REGISTER:
-                /* Register variable */
-                g_getstatic (Flags | CF_REGVAR, Expr->Name, Expr->IVal);
-                break;
-
-            case E_LOC_STACK:
-                /* Value on the stack */
-                g_getlocal (Flags, Expr->IVal);
-                break;
-
-            case E_LOC_PRIMARY:
-                /* The primary register - just test if necessary */
-                if (Flags & CF_TEST) {
-                    g_test (Flags);
-                }
-                break;
-
-            case E_LOC_EXPR:
-                /* Reference to address in primary with offset in Expr */
-                g_getind (Flags, Expr->IVal);
-                break;
-
-            default:
-                Internal ("Invalid location in LoadExpr: 0x%04X", ED_GetLoc (Expr));
-        }
-
-        /* Handle bit fields. The actual type may have been casted or
-        ** converted, so be sure to always use unsigned ints for the
-        ** operations.
-        */
-        if (ED_IsBitField (Expr)) {
-            unsigned F = CF_INT | CF_UNSIGNED | CF_CONST | (Flags & CF_TEST);
-            /* Shift right by the bit offset */
-            g_asr (F, Expr->BitOffs);
-            /* And by the width if the field doesn't end on an int boundary */
-            if (Expr->BitOffs + Expr->BitWidth != CHAR_BITS &&
-                Expr->BitOffs + Expr->BitWidth != INT_BITS) {
-                g_and (F, (0x0001U << Expr->BitWidth) - 1U);
-            }
-        }
-
-        /* Expression was tested */
-        ED_TestDone (Expr);
-
-    } else {
-        /* An rvalue */
-        if (ED_IsLocExpr (Expr)) {
-            if (Expr->IVal != 0) {
-                /* We have an expression in the primary plus a constant
-                ** offset. Adjust the value in the primary accordingly.
-                */
-                Flags |= TypeOf (Expr->Type);
-                g_inc (Flags | CF_CONST, Expr->IVal);
-            }
-        } else {
-            /* Constant of some sort, load it into the primary */
-            LoadConstant (Flags, Expr);
-        }
-
-        /* Are we testing this value? */
-        if (ED_NeedsTest (Expr)) {
-            /* Yes, force a test */
-            Flags |= TypeOf (Expr->Type);
-            g_test (Flags);
-            ED_TestDone (Expr);
-        }
-    }
-
-}
diff --git a/src/cc65/loadexpr.h b/src/cc65/loadexpr.h
deleted file mode 100644 (file)
index 3f13311..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                loadexpr.h                                 */
-/*                                                                           */
-/*               Load an expression into the primary register                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004      Ullrich von Bassewitz                                       */
-/*               Römerstraße 52                                              */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef LOADEXPR_H
-#define LOADEXPR_H
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-struct ExprDesc;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void LoadExpr (unsigned Flags, struct ExprDesc* Expr);
-/* Load an expression into the primary register if it is not already there. */
-
-
-
-/* End of loadexpr.h */
-
-#endif
diff --git a/src/cc65/locals.c b/src/cc65/locals.c
deleted file mode 100644 (file)
index ffadb1b..0000000
+++ /dev/null
@@ -1,547 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 locals.c                                  */
-/*                                                                           */
-/*              Local variable handling for the cc65 C compiler              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "xmalloc.h"
-#include "xsprintf.h"
-
-/* cc65 */
-#include "anonname.h"
-#include "asmlabel.h"
-#include "codegen.h"
-#include "declare.h"
-#include "error.h"
-#include "expr.h"
-#include "function.h"
-#include "global.h"
-#include "loadexpr.h"
-#include "locals.h"
-#include "stackptr.h"
-#include "standard.h"
-#include "symtab.h"
-#include "typeconv.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static unsigned AllocLabel (void (*UseSeg) ())
-/* Switch to a segment, define a local label and return it */
-{
-    unsigned Label;
-
-    /* Switch to the segment */
-    UseSeg ();
-
-    /* Define the variable label */
-    Label = GetLocalLabel ();
-    g_defdatalabel (Label);
-
-    /* Return the label */
-    return Label;
-}
-
-
-
-static void AllocStorage (unsigned Label, void (*UseSeg) (), unsigned Size)
-/* Reserve Size bytes of BSS storage prefixed by a local label. */
-{
-    /* Switch to the segment */
-    UseSeg ();
-
-    /* Define the variable label */
-    g_defdatalabel (Label);
-
-    /* Reserve space for the data */
-    g_res (Size);
-}
-
-
-
-static void ParseRegisterDecl (Declaration* Decl, int Reg)
-/* Parse the declaration of a register variable. Reg is the offset of the
-** variable in the register bank.
-*/
-{
-    SymEntry* Sym;
-
-    /* Determine if this is a compound variable */
-    int IsCompound = IsClassStruct (Decl->Type) || IsTypeArray (Decl->Type);
-
-    /* Get the size of the variable */
-    unsigned Size = SizeOf (Decl->Type);
-
-    /* Save the current contents of the register variable on stack */
-    F_AllocLocalSpace (CurrentFunc);
-    g_save_regvars (Reg, Size);
-
-    /* Add the symbol to the symbol table. We do that now, because for register
-    ** variables the current stack pointer is implicitly used as location for
-    ** the save area.
-    */
-    Sym = AddLocalSym (Decl->Ident, Decl->Type, Decl->StorageClass, Reg);
-
-    /* Check for an optional initialization */
-    if (CurTok.Tok == TOK_ASSIGN) {
-
-        ExprDesc Expr;
-
-        /* Skip the '=' */
-        NextToken ();
-
-        /* Special handling for compound types */
-        if (IsCompound) {
-
-            /* Switch to read only data and define a label for the
-            ** initialization data.
-            */
-            unsigned InitLabel = AllocLabel (g_userodata);
-
-            /* Parse the initialization generating a memory image of the
-            ** data in the RODATA segment. The function does return the size
-            ** of the initialization data, which may be greater than the
-            ** actual size of the type, if the type is a structure with a
-            ** flexible array member that has been initialized. Since we must
-            ** know the size of the data in advance for register variables,
-            ** we cannot allow that here.
-            */
-            if (ParseInit (Sym->Type) != Size) {
-                Error ("Cannot initialize flexible array members of storage class `register'");
-            }
-
-            /* Generate code to copy this data into the variable space */
-            g_initregister (InitLabel, Reg, Size);
-
-        } else {
-
-            /* Parse the expression */
-            hie1 (&Expr);
-
-            /* Convert it to the target type */
-            TypeConversion (&Expr, Sym->Type);
-
-            /* Load the value into the primary */
-            LoadExpr (CF_NONE, &Expr);
-
-            /* Store the value into the variable */
-            g_putstatic (CF_REGVAR | TypeOf (Sym->Type), Reg, 0);
-
-        }
-
-        /* Mark the variable as referenced */
-        Sym->Flags |= SC_REF;
-    }
-
-    /* Cannot allocate a variable of zero size */
-    if (Size == 0) {
-        Error ("Variable `%s' has unknown size", Decl->Ident);
-    }
-}
-
-
-
-static void ParseAutoDecl (Declaration* Decl)
-/* Parse the declaration of an auto variable. */
-{
-    unsigned  Flags;
-    SymEntry* Sym;
-
-    /* Determine if this is a compound variable */
-    int IsCompound = IsClassStruct (Decl->Type) || IsTypeArray (Decl->Type);
-
-    /* Get the size of the variable */
-    unsigned Size = SizeOf (Decl->Type);
-
-    /* Check if this is a variable on the stack or in static memory */
-    if (IS_Get (&StaticLocals) == 0) {
-
-        /* Add the symbol to the symbol table. The stack offset we use here
-        ** may get corrected later.
-        */
-        Sym = AddLocalSym (Decl->Ident, Decl->Type,
-                           Decl->StorageClass,
-                           F_GetStackPtr (CurrentFunc) - (int) Size);
-
-        /* Check for an optional initialization */
-        if (CurTok.Tok == TOK_ASSIGN) {
-
-            ExprDesc Expr;
-
-            /* Skip the '=' */
-            NextToken ();
-
-            /* Special handling for compound types */
-            if (IsCompound) {
-
-                /* Switch to read only data and define a label for the
-                ** initialization data.
-                */
-                unsigned InitLabel = AllocLabel (g_userodata);
-
-                /* Parse the initialization generating a memory image of the
-                ** data in the RODATA segment. The function will return the
-                ** actual size of the initialization data, which may be
-                ** greater than the size of the variable if it is a struct
-                ** that contains a flexible array member and we're not in
-                ** ANSI mode.
-                */
-                Size = ParseInit (Sym->Type);
-
-                /* Now reserve space for the variable on the stack and correct
-                ** the offset in the symbol table entry.
-                */
-                Sym->V.Offs = F_ReserveLocalSpace (CurrentFunc, Size);
-
-                /* Next, allocate the space on the stack. This means that the
-                ** variable is now located at offset 0 from the current sp.
-                */
-                F_AllocLocalSpace (CurrentFunc);
-
-                /* Generate code to copy the initialization data into the
-                ** variable space
-                */
-                g_initauto (InitLabel, Size);
-
-            } else {
-
-                /* Allocate previously reserved local space */
-                F_AllocLocalSpace (CurrentFunc);
-
-                /* Setup the type flags for the assignment */
-                Flags = (Size == SIZEOF_CHAR)? CF_FORCECHAR : CF_NONE;
-
-                /* Parse the expression */
-                hie1 (&Expr);
-
-                /* Convert it to the target type */
-                TypeConversion (&Expr, Sym->Type);
-
-                /* If the value is not const, load it into the primary.
-                ** Otherwise pass the information to the code generator.
-                */
-                if (ED_IsConstAbsInt (&Expr)) {
-                    Flags |= CF_CONST;
-                } else {
-                    LoadExpr (CF_NONE, &Expr);
-                    ED_MakeRVal (&Expr);
-                }
-
-                /* Push the value */
-                g_push (Flags | TypeOf (Sym->Type), Expr.IVal);
-
-            }
-
-            /* Mark the variable as referenced */
-            Sym->Flags |= SC_REF;
-
-        } else {
-            /* Non-initialized local variable. Just keep track of
-            ** the space needed.
-            */
-            F_ReserveLocalSpace (CurrentFunc, Size);
-        }
-
-    } else {
-
-        unsigned DataLabel;
-
-
-        /* Static local variables. */
-        Decl->StorageClass = (Decl->StorageClass & ~SC_AUTO) | SC_STATIC;
-
-        /* Generate a label, but don't define it */
-        DataLabel = GetLocalLabel ();
-
-        /* Add the symbol to the symbol table. */
-        Sym = AddLocalSym (Decl->Ident, Decl->Type, Decl->StorageClass, DataLabel);
-
-        /* Allow assignments */
-        if (CurTok.Tok == TOK_ASSIGN) {
-
-            ExprDesc Expr;
-
-            /* Skip the '=' */
-            NextToken ();
-
-            if (IsCompound) {
-
-                /* Switch to read only data and define a label for the
-                ** initialization data.
-                */
-                unsigned InitLabel = AllocLabel (g_userodata);
-
-                /* Parse the initialization generating a memory image of the
-                ** data in the RODATA segment.
-                */
-                Size = ParseInit (Sym->Type);
-
-                /* Allocate space for the variable */
-                AllocStorage (DataLabel, g_usebss, Size);
-
-                /* Generate code to copy this data into the variable space */
-                g_initstatic (InitLabel, DataLabel, Size);
-
-            } else {
-
-                /* Allocate space for the variable */
-                AllocStorage (DataLabel, g_usebss, Size);
-
-                /* Parse the expression */
-                hie1 (&Expr);
-
-                /* Convert it to the target type */
-                TypeConversion (&Expr, Sym->Type);
-
-                /* Load the value into the primary */
-                LoadExpr (CF_NONE, &Expr);
-
-                /* Store the value into the variable */
-                g_putstatic (TypeOf (Sym->Type), DataLabel, 0);
-            }
-
-            /* Mark the variable as referenced */
-            Sym->Flags |= SC_REF;
-
-        } else {
-
-            /* No assignment - allocate a label and space for the variable */
-            AllocStorage (DataLabel, g_usebss, Size);
-
-        }
-    }
-
-    /* Cannot allocate a variable of zero size */
-    if (Size == 0) {
-        Error ("Variable `%s' has unknown size", Decl->Ident);
-    }
-}
-
-
-
-static void ParseStaticDecl (Declaration* Decl)
-/* Parse the declaration of a static variable. */
-{
-    unsigned Size;
-
-    /* Generate a label, but don't define it */
-    unsigned DataLabel = GetLocalLabel ();
-
-    /* Add the symbol to the symbol table. */
-    SymEntry* Sym = AddLocalSym (Decl->Ident, Decl->Type,
-                                 Decl->StorageClass,
-                                 DataLabel);
-
-    /* Static data */
-    if (CurTok.Tok == TOK_ASSIGN) {
-
-        /* Initialization ahead, switch to data segment and define the label.
-        ** For arrays, we need to check the elements of the array for
-        ** constness, not the array itself.
-        */
-        if (IsQualConst (GetBaseElementType (Sym->Type))) {
-            g_userodata ();
-        } else {
-            g_usedata ();
-        }
-        g_defdatalabel (DataLabel);
-
-        /* Skip the '=' */
-        NextToken ();
-
-        /* Allow initialization of static vars */
-        Size = ParseInit (Sym->Type);
-
-        /* Mark the variable as referenced */
-        Sym->Flags |= SC_REF;
-
-    } else {
-
-        /* Get the size of the variable */
-        Size = SizeOf (Decl->Type);
-
-        /* Allocate a label and space for the variable in the BSS segment */
-        AllocStorage (DataLabel, g_usebss, Size);
-
-    }
-
-    /* Cannot allocate a variable of zero size */
-    if (Size == 0) {
-        Error ("Variable `%s' has unknown size", Decl->Ident);
-    }
-}
-
-
-
-static void ParseOneDecl (const DeclSpec* Spec)
-/* Parse one variable declaration */
-{
-    Declaration Decl;           /* Declaration data structure */
-
-
-    /* Read the declaration */
-    ParseDecl (Spec, &Decl, DM_NEED_IDENT);
-
-    /* Set the correct storage class for functions */
-    if ((Decl.StorageClass & SC_FUNC) == SC_FUNC) {
-        /* Function prototypes are always external */
-        if ((Decl.StorageClass & SC_EXTERN) == 0) {
-            Warning ("Function must be extern");
-        }
-        Decl.StorageClass |= SC_EXTERN;
-    }
-
-    /* If we don't have a name, this was flagged as an error earlier.
-    ** To avoid problems later, use an anonymous name here.
-    */
-    if (Decl.Ident[0] == '\0') {
-        AnonName (Decl.Ident, "param");
-    }
-
-    /* If the symbol is not marked as external, it will be defined now */
-    if ((Decl.StorageClass & SC_EXTERN) == 0) {
-        Decl.StorageClass |= SC_DEF;
-    }
-
-    /* Handle anything that needs storage (no functions, no typdefs) */
-    if ((Decl.StorageClass & SC_FUNC) != SC_FUNC &&
-         (Decl.StorageClass & SC_TYPEMASK) != SC_TYPEDEF) {
-
-        /* If we have a register variable, try to allocate a register and
-        ** convert the declaration to "auto" if this is not possible.
-        */
-        int Reg = 0;    /* Initialize to avoid gcc complains */
-        if ((Decl.StorageClass & SC_REGISTER) != 0 &&
-            (Reg = F_AllocRegVar (CurrentFunc, Decl.Type)) < 0) {
-            /* No space for this register variable, convert to auto */
-            Decl.StorageClass = (Decl.StorageClass & ~SC_REGISTER) | SC_AUTO;
-        }
-
-        /* Check the variable type */
-        if ((Decl.StorageClass & SC_REGISTER) == SC_REGISTER) {
-            /* Register variable */
-            ParseRegisterDecl (&Decl, Reg);
-        } else if ((Decl.StorageClass & SC_AUTO) == SC_AUTO) {
-            /* Auto variable */
-            ParseAutoDecl (&Decl);
-        } else if ((Decl.StorageClass & SC_EXTERN) == SC_EXTERN) {
-            /* External identifier - may not get initialized */
-            if (CurTok.Tok == TOK_ASSIGN) {
-                Error ("Cannot initialize externals");
-            }
-            /* Add the external symbol to the symbol table */
-            AddLocalSym (Decl.Ident, Decl.Type, Decl.StorageClass, 0);
-        } else if ((Decl.StorageClass & SC_STATIC) == SC_STATIC) {
-            /* Static variable */
-            ParseStaticDecl (&Decl);
-        } else {
-            Internal ("Invalid storage class in ParseOneDecl: %04X", Decl.StorageClass);
-        }
-
-    } else {
-
-        /* Add the symbol to the symbol table */
-        AddLocalSym (Decl.Ident, Decl.Type, Decl.StorageClass, 0);
-
-    }
-}
-
-
-
-void DeclareLocals (void)
-/* Declare local variables and types. */
-{
-    /* Remember the current stack pointer */
-    int InitialStack = StackPtr;
-
-    /* Loop until we don't find any more variables */
-    while (1) {
-
-        /* Check variable declarations. We need to distinguish between a
-        ** default int type and the end of variable declarations. So we
-        ** will do the following: If there is no explicit storage class
-        ** specifier *and* no explicit type given, *and* no type qualifiers
-        ** have been read, it is assumed that we have reached the end of
-        ** declarations.
-        */
-        DeclSpec Spec;
-        ParseDeclSpec (&Spec, SC_AUTO, T_INT);
-        if ((Spec.Flags & DS_DEF_STORAGE) != 0 &&       /* No storage spec */
-            (Spec.Flags & DS_DEF_TYPE) != 0    &&       /* No type given */
-            GetQualifier (Spec.Type) == T_QUAL_NONE) {  /* No type qualifier */
-            break;
-        }
-
-        /* Accept type only declarations */
-        if (CurTok.Tok == TOK_SEMI) {
-            /* Type declaration only */
-            CheckEmptyDecl (&Spec);
-            NextToken ();
-            continue;
-        }
-
-        /* Parse a comma separated variable list */
-        while (1) {
-
-            /* Parse one declaration */
-            ParseOneDecl (&Spec);
-
-            /* Check if there is more */
-            if (CurTok.Tok == TOK_COMMA) {
-                /* More to come */
-                NextToken ();
-            } else {
-                /* Done */
-                break;
-            }
-        }
-
-        /* A semicolon must follow */
-        ConsumeSemi ();
-    }
-
-    /* Be sure to allocate any reserved space for locals */
-    F_AllocLocalSpace (CurrentFunc);
-
-    /* In case we've allocated local variables in this block, emit a call to
-    ** the stack checking routine if stack checks are enabled.
-    */
-    if (IS_Get (&CheckStack) && InitialStack != StackPtr) {
-        g_cstackcheck ();
-    }
-}
diff --git a/src/cc65/locals.h b/src/cc65/locals.h
deleted file mode 100644 (file)
index 53d0844..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 locals.h                                  */
-/*                                                                           */
-/*              Local variable handling for the cc65 C compiler              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2001 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef LOCALS_H
-#define LOCALS_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void InitRegVars (void);
-/* Initialize register variable control data */
-
-void DoneRegVars (void);
-/* Free the register variables */
-
-void DeclareLocals (void);
-/* Declare local variables and types. */
-
-void RestoreRegVars (int HaveResult);
-/* Restore the register variables for the local function if there are any.
-** The parameter tells us if there is a return value in ax, in that case,
-** the accumulator must be saved across the restore.
-*/
-
-
-
-/* End of locals.h */
-
-#endif
diff --git a/src/cc65/loop.c b/src/cc65/loop.c
deleted file mode 100644 (file)
index c15c37a..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  loop.c                                   */
-/*                                                                           */
-/*                              Loop management                              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2004 Ullrich von Bassewitz                                       */
-/*               Römerstraße 52                                              */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "check.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "error.h"
-#include "loop.h" 
-#include "stackptr.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* The root */
-static LoopDesc* LoopStack = 0;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-LoopDesc* AddLoop (unsigned BreakLabel, unsigned ContinueLabel)
-/* Create and add a new loop descriptor. */
-{
-    /* Allocate a new struct */
-    LoopDesc* L = xmalloc (sizeof (LoopDesc));
-
-    /* Fill in the data */
-    L->StackPtr         = StackPtr;
-    L->BreakLabel       = BreakLabel;
-    L->ContinueLabel    = ContinueLabel;
-
-    /* Insert it into the list */
-    L->Next = LoopStack;
-    LoopStack = L;
-
-    /* Return a pointer to the struct */
-    return L;
-}
-
-
-
-LoopDesc* CurrentLoop (void)
-/* Return a pointer to the descriptor of the current loop */
-{
-    return LoopStack;
-}
-
-
-
-void DelLoop (void)
-/* Remove the current loop */
-{
-    LoopDesc* L = LoopStack;
-    CHECK (L != 0);
-    LoopStack = LoopStack->Next;
-    xfree (L);
-}
diff --git a/src/cc65/loop.h b/src/cc65/loop.h
deleted file mode 100644 (file)
index fa2859f..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  loop.h                                   */
-/*                                                                           */
-/*                              Loop management                              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2004 Ullrich von Bassewitz                                       */
-/*               Römerstraße 52                                              */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef LOOP_H
-#define LOOP_H
-
-
-
-/*****************************************************************************/
-/*                                   data                                    */
-/*****************************************************************************/
-
-
-
-typedef struct LoopDesc LoopDesc;
-struct LoopDesc {
-    LoopDesc*   Next;
-    unsigned    StackPtr;
-    unsigned    BreakLabel;
-    unsigned    ContinueLabel;
-};
-
-
-
-/*****************************************************************************/
-/*                                   code                                    */
-/*****************************************************************************/
-
-
-
-LoopDesc* AddLoop (unsigned BreakLabel, unsigned ContinueLabel);
-/* Create and add a new loop descriptor. */
-
-LoopDesc* CurrentLoop (void);
-/* Return a pointer to the descriptor of the current loop */
-
-void DelLoop (void);
-/* Remove the current loop */
-
-
-
-/* End of loop.h */
-
-#endif
diff --git a/src/cc65/macrotab.c b/src/cc65/macrotab.c
deleted file mode 100644 (file)
index daf5cd7..0000000
+++ /dev/null
@@ -1,304 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                macrotab.h                                 */
-/*                                                                           */
-/*             Preprocessor macro table for the cc65 C compiler              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-
-/* common */
-#include "hashfunc.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "error.h"
-#include "macrotab.h"
-
-
-
-/*****************************************************************************/
-/*                                   data                                    */
-/*****************************************************************************/
-
-
-
-/* The macro hash table */
-#define MACRO_TAB_SIZE  211
-static Macro* MacroTab[MACRO_TAB_SIZE];
-
-
-
-/*****************************************************************************/
-/*                                   code                                    */
-/*****************************************************************************/
-
-
-
-Macro* NewMacro (const char* Name)
-/* Allocate a macro structure with the given name. The structure is not
-** inserted into the macro table.
-*/
-{
-    /* Get the length of the macro name */
-    unsigned Len = strlen(Name);
-
-    /* Allocate the structure */
-    Macro* M = (Macro*) xmalloc (sizeof(Macro) + Len);
-
-    /* Initialize the data */
-    M->Next        = 0;
-    M->Expanding   = 0;
-    M->ArgCount    = -1;        /* Flag: Not a function like macro */
-    M->MaxArgs     = 0;
-    InitCollection (&M->FormalArgs);
-    SB_Init (&M->Replacement);
-    M->Variadic    = 0;
-    memcpy (M->Name, Name, Len+1);
-
-    /* Return the new macro */
-    return M;
-}
-
-
-
-void FreeMacro (Macro* M)
-/* Delete a macro definition. The function will NOT remove the macro from the
-** table, use UndefineMacro for that.
-*/
-{
-    unsigned I;
-
-    for (I = 0; I < CollCount (&M->FormalArgs); ++I) {
-        xfree (CollAtUnchecked (&M->FormalArgs, I));
-    }
-    DoneCollection (&M->FormalArgs);
-    SB_Done (&M->Replacement);
-    xfree (M);
-}
-
-
-
-void DefineNumericMacro (const char* Name, long Val)
-/* Define a macro for a numeric constant */
-{
-    char Buf[64];
-
-    /* Make a string from the number */
-    sprintf (Buf, "%ld", Val);
-
-    /* Handle as text macro */
-    DefineTextMacro (Name, Buf);
-}
-
-
-
-void DefineTextMacro (const char* Name, const char* Val)
-/* Define a macro for a textual constant */
-{
-    /* Create a new macro */
-    Macro* M = NewMacro (Name);
-
-    /* Set the value as replacement text */
-    SB_CopyStr (&M->Replacement, Val);
-
-    /* Insert the macro into the macro table */
-    InsertMacro (M);
-}
-
-
-
-void InsertMacro (Macro* M)
-/* Insert the given macro into the macro table. */
-{
-    /* Get the hash value of the macro name */
-    unsigned Hash = HashStr (M->Name) % MACRO_TAB_SIZE;
-
-    /* Insert the macro */
-    M->Next = MacroTab[Hash];
-    MacroTab[Hash] = M;
-}
-
-
-
-int UndefineMacro (const char* Name)
-/* Search for the macro with the given name and remove it from the macro
-** table if it exists. Return 1 if a macro was found and deleted, return
-** 0 otherwise.
-*/
-{
-    /* Get the hash value of the macro name */
-    unsigned Hash = HashStr (Name) % MACRO_TAB_SIZE;
-
-    /* Search the hash chain */
-    Macro* L = 0;
-    Macro* M = MacroTab[Hash];
-    while (M) {
-        if (strcmp (M->Name, Name) == 0) {
-
-            /* Found it */
-            if (L == 0) {
-                /* First in chain */
-                MacroTab[Hash] = M->Next;
-            } else {
-                L->Next = M->Next;
-            }
-
-            /* Delete the macro */
-            FreeMacro (M);
-
-            /* Done */
-            return 1;
-        }
-
-        /* Next macro */
-        L = M;
-        M = M->Next;
-    }
-
-    /* Not found */
-    return 0;
-}
-
-
-
-Macro* FindMacro (const char* Name)
-/* Find a macro with the given name. Return the macro definition or NULL */
-{
-    /* Get the hash value of the macro name */
-    unsigned Hash = HashStr (Name) % MACRO_TAB_SIZE;
-
-    /* Search the hash chain */
-    Macro* M = MacroTab[Hash];
-    while (M) {
-        if (strcmp (M->Name, Name) == 0) {
-            /* Found it */
-            return M;
-        }
-
-        /* Next macro */
-        M = M->Next;
-    }
-
-    /* Not found */
-    return 0;
-}
-
-
-
-int FindMacroArg (Macro* M, const char* Arg)
-/* Search for a formal macro argument. If found, return the index of the
-** argument. If the argument was not found, return -1.
-*/
-{
-    unsigned I;
-    for (I = 0; I < CollCount (&M->FormalArgs); ++I) {
-        if (strcmp (CollAtUnchecked (&M->FormalArgs, I), Arg) == 0) {
-            /* Found */
-            return I;
-        }
-    }
-
-    /* Not found */
-    return -1;
-}
-
-
-
-void AddMacroArg (Macro* M, const char* Arg)
-/* Add a formal macro argument. */
-{
-    /* Check if we have a duplicate macro argument, but add it anyway.
-    ** Beware: Don't use FindMacroArg here, since the actual argument array
-    ** may not be initialized.
-    */
-    unsigned I;
-    for (I = 0; I < CollCount (&M->FormalArgs); ++I) {
-        if (strcmp (CollAtUnchecked (&M->FormalArgs, I), Arg) == 0) {
-            /* Found */
-            Error ("Duplicate macro parameter: `%s'", Arg);
-            break;
-        }
-    }
-
-    /* Add the new argument */
-    CollAppend (&M->FormalArgs, xstrdup (Arg));
-    ++M->ArgCount;
-}
-
-
-
-int MacroCmp (const Macro* M1, const Macro* M2)
-/* Compare two macros and return zero if both are identical. */
-{
-    int I;
-
-    /* Argument count must be identical */
-    if (M1->ArgCount != M2->ArgCount) {
-        return 1;
-    }
-
-    /* Compare the arguments */
-    for (I = 0; I < M1->ArgCount; ++I) {
-        if (strcmp (CollConstAt (&M1->FormalArgs, I),
-                    CollConstAt (&M2->FormalArgs, I)) != 0) {
-            return 1;
-        }
-    }
-
-    /* Compare the replacement */
-    return SB_Compare (&M1->Replacement, &M2->Replacement);
-}
-
-
-
-void PrintMacroStats (FILE* F)
-/* Print macro statistics to the given text file. */
-{
-    unsigned I;
-    Macro* M;
-
-    fprintf (F, "\n\nMacro Hash Table Summary\n");
-    for (I = 0; I < MACRO_TAB_SIZE; ++I) {
-        fprintf (F, "%3u : ", I);
-        M = MacroTab [I];
-        if (M) {
-            while (M) {
-                fprintf (F, "%s ", M->Name);
-                M = M->Next;
-            }
-            fprintf (F, "\n");
-        } else {
-            fprintf (F, "empty\n");
-        }
-    }
-}
diff --git a/src/cc65/macrotab.h b/src/cc65/macrotab.h
deleted file mode 100644 (file)
index c3ff20c..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                macrotab.h                                 */
-/*                                                                           */
-/*             Preprocessor macro table for the cc65 C compiler              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2005, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef MACROTAB_H
-#define MACROTAB_H
-
-
-
-/* common */
-#include "coll.h"
-#include "inline.h"
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                   data                                    */
-/*****************************************************************************/
-
-
-
-/* Structure describing a macro */
-typedef struct Macro Macro;
-struct Macro {
-    Macro*        Next;         /* Next macro with same hash value */
-    int           Expanding;    /* Are we currently expanding this macro? */
-    int           ArgCount;     /* Number of parameters, -1 = no parens */
-    unsigned      MaxArgs;      /* Size of formal argument list */
-    Collection    FormalArgs;   /* Formal argument list (char*) */
-    StrBuf        Replacement;  /* Replacement text */
-    unsigned char Variadic;     /* C99 variadic macro */
-    char          Name[1];      /* Name, dynamically allocated */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Macro* NewMacro (const char* Name);
-/* Allocate a macro structure with the given name. The structure is not
-** inserted into the macro table.
-*/
-
-void FreeMacro (Macro* M);
-/* Delete a macro definition. The function will NOT remove the macro from the
-** table, use UndefineMacro for that.
-*/
-
-void DefineNumericMacro (const char* Name, long Val);
-/* Define a macro for a numeric constant */
-
-void DefineTextMacro (const char* Name, const char* Val);
-/* Define a macro for a textual constant */
-
-void InsertMacro (Macro* M);
-/* Insert the given macro into the macro table. */
-
-int UndefineMacro (const char* Name);
-/* Search for the macro with the given name and remove it from the macro
-** table if it exists. Return 1 if a macro was found and deleted, return
-** 0 otherwise.
-*/
-
-Macro* FindMacro (const char* Name);
-/* Find a macro with the given name. Return the macro definition or NULL */
-
-#if defined(HAVE_INLINE)
-INLINE int IsMacro (const char* Name)
-/* Return true if the given name is the name of a macro, return false otherwise */
-{
-    return FindMacro (Name) != 0;
-}
-#else
-#  define IsMacro(Name)         (FindMacro (Name) != 0)
-#endif
-
-int FindMacroArg (Macro* M, const char* Arg);
-/* Search for a formal macro argument. If found, return the index of the
-** argument. If the argument was not found, return -1.
-*/
-
-void AddMacroArg (Macro* M, const char* Arg);
-/* Add a formal macro argument. */
-
-int MacroCmp (const Macro* M1, const Macro* M2);
-/* Compare two macros and return zero if both are identical. */
-
-void PrintMacroStats (FILE* F);
-/* Print macro statistics to the given text file. */
-
-
-
-/* End of macrotab.h */
-
-#endif
diff --git a/src/cc65/main.c b/src/cc65/main.c
deleted file mode 100644 (file)
index 1041b8f..0000000
+++ /dev/null
@@ -1,1037 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  main.c                                   */
-/*                                                                           */
-/*                             cc65 main program                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2015, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-
-/* common */
-#include "abend.h"
-#include "chartype.h"
-#include "cmdline.h"
-#include "cpu.h"
-#include "debugflag.h"
-#include "fname.h"
-#include "mmodel.h"
-#include "print.h"
-#include "segnames.h"
-#include "strbuf.h"
-#include "target.h"
-#include "tgttrans.h"
-#include "version.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "asmcode.h"
-#include "compile.h"
-#include "codeopt.h"
-#include "error.h"
-#include "global.h"
-#include "incpath.h"
-#include "input.h"
-#include "macrotab.h"
-#include "output.h"
-#include "scanner.h"
-#include "segments.h"
-#include "standard.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void Usage (void)
-/* Print usage information to stderr */
-{
-    printf ("Usage: %s [options] file\n"
-            "Short options:\n"
-            "  -Cl\t\t\t\tMake local variables static\n"
-            "  -Dsym[=defn]\t\t\tDefine a symbol\n"
-            "  -E\t\t\t\tStop after the preprocessing stage\n"
-            "  -I dir\t\t\tSet an include directory search path\n"
-            "  -O\t\t\t\tOptimize code\n"
-            "  -Oi\t\t\t\tOptimize code, inline more code\n"
-            "  -Or\t\t\t\tEnable register variables\n"
-            "  -Os\t\t\t\tInline some known functions\n"
-            "  -T\t\t\t\tInclude source as comment\n"
-            "  -V\t\t\t\tPrint the compiler version number\n"
-            "  -W warning[,...]\t\tSuppress warnings\n"
-            "  -d\t\t\t\tDebug mode\n"
-            "  -g\t\t\t\tAdd debug info to object file\n"
-            "  -h\t\t\t\tHelp (this text)\n"
-            "  -j\t\t\t\tDefault characters are signed\n"
-            "  -mm model\t\t\tSet the memory model\n"
-            "  -o name\t\t\tName the output file\n"
-            "  -r\t\t\t\tEnable register variables\n"
-            "  -t sys\t\t\tSet the target system\n"
-            "  -v\t\t\t\tIncrease verbosity\n"
-            "\n"
-            "Long options:\n"
-            "  --add-source\t\t\tInclude source as comment\n"
-            "  --all-cdecl\t\t\tMake functions default to __cdecl__\n"
-            "  --bss-name seg\t\tSet the name of the BSS segment\n"
-            "  --check-stack\t\t\tGenerate stack overflow checks\n"
-            "  --code-name seg\t\tSet the name of the CODE segment\n"
-            "  --codesize x\t\t\tAccept larger code by factor x\n"
-            "  --cpu type\t\t\tSet cpu type (6502, 65c02)\n"
-            "  --create-dep name\t\tCreate a make dependency file\n"
-            "  --create-full-dep name\tCreate a full make dependency file\n"
-            "  --data-name seg\t\tSet the name of the DATA segment\n"
-            "  --debug\t\t\tDebug mode\n"
-            "  --debug-info\t\t\tAdd debug info to object file\n"
-            "  --debug-opt name\t\tDebug optimization steps\n"
-            "  --dep-target target\t\tUse this dependency target\n"
-            "  --disable-opt name\t\tDisable an optimization step\n"
-            "  --enable-opt name\t\tEnable an optimization step\n"
-            "  --help\t\t\tHelp (this text)\n"
-            "  --include-dir dir\t\tSet an include directory search path\n"
-            "  --list-opt-steps\t\tList all optimizer steps and exit\n"
-            "  --list-warnings\t\tList available warning types for -W\n"
-            "  --local-strings\t\tEmit string literals immediately\n"
-            "  --memory-model model\t\tSet the memory model\n"
-            "  --register-space b\t\tSet space available for register variables\n"
-            "  --register-vars\t\tEnable register variables\n"
-            "  --rodata-name seg\t\tSet the name of the RODATA segment\n"
-            "  --signed-chars\t\tDefault characters are signed\n"
-            "  --standard std\t\tLanguage standard (c89, c99, cc65)\n"
-            "  --static-locals\t\tMake local variables static\n"
-            "  --target sys\t\t\tSet the target system\n"
-            "  --verbose\t\t\tIncrease verbosity\n"
-            "  --version\t\t\tPrint the compiler version number\n"
-            "  --writable-strings\t\tMake string literals writable\n",
-            ProgName);
-}
-
-
-
-static void cbmsys (const char* sys)
-/* Define a CBM system */
-{
-    DefineNumericMacro ("__CBM__", 1);
-    DefineNumericMacro (sys, 1);
-}
-
-
-
-static void SetSys (const char* Sys)
-/* Define a target system */
-{
-    switch (Target = FindTarget (Sys)) {
-
-        case TGT_NONE:
-            break;
-
-        case TGT_MODULE:
-            AbEnd ("Cannot use `module' as a target for the compiler");
-            break;
-
-        case TGT_ATARI5200:
-            DefineNumericMacro ("__ATARI5200__", 1);
-            break;
-
-        case TGT_ATARI:
-            DefineNumericMacro ("__ATARI__", 1);
-            break;
-
-        case TGT_ATARIXL:
-            DefineNumericMacro ("__ATARI__", 1);
-            DefineNumericMacro ("__ATARIXL__", 1);
-            break;
-
-        case TGT_C16:
-            cbmsys ("__C16__");
-            break;
-
-        case TGT_C64:
-            cbmsys ("__C64__");
-            break;
-
-        case TGT_VIC20:
-            cbmsys ("__VIC20__");
-            break;
-
-        case TGT_C128:
-            cbmsys ("__C128__");
-            break;
-
-        case TGT_PLUS4:
-            cbmsys ("__C16__");
-            DefineNumericMacro ("__PLUS4__", 1);
-            break;
-
-        case TGT_CBM510:
-            cbmsys ("__CBM510__");
-            break;
-
-        case TGT_CBM610:
-            cbmsys ("__CBM610__");
-            break;
-
-        case TGT_PET:
-            cbmsys ("__PET__");
-            break;
-
-        case TGT_BBC:
-            DefineNumericMacro ("__BBC__", 1);
-            break;
-
-        case TGT_APPLE2:
-            DefineNumericMacro ("__APPLE2__", 1);
-            break;
-
-        case TGT_APPLE2ENH:
-            DefineNumericMacro ("__APPLE2__", 1);
-            DefineNumericMacro ("__APPLE2ENH__", 1);
-            break;
-
-        case TGT_GEOS_CBM:
-            /* Do not handle as a CBM system */
-            DefineNumericMacro ("__GEOS__", 1);
-            DefineNumericMacro ("__GEOS_CBM__", 1);
-            break;
-
-        case TGT_GEOS_APPLE:
-            DefineNumericMacro ("__GEOS__", 1);
-            DefineNumericMacro ("__GEOS_APPLE__", 1);
-            break;
-
-        case TGT_LUNIX:
-            DefineNumericMacro ("__LUNIX__", 1);
-            break;
-
-        case TGT_ATMOS:
-            DefineNumericMacro ("__ATMOS__", 1);
-            break;
-
-        case TGT_NES:
-            DefineNumericMacro ("__NES__", 1);
-            break;
-
-        case TGT_SUPERVISION:
-            DefineNumericMacro ("__SUPERVISION__", 1);
-            break;
-
-        case TGT_LYNX:
-            DefineNumericMacro ("__LYNX__", 1);
-            break;
-
-        case TGT_SIM6502:
-            DefineNumericMacro ("__SIM6502__", 1);
-            break;
-
-        case TGT_SIM65C02:
-            DefineNumericMacro ("__SIM65C02__", 1);
-            break;
-
-        case TGT_OSIC1P:
-            DefineNumericMacro ("__OSIC1P__", 1);
-            break;
-
-        case TGT_PCENGINE:
-            DefineNumericMacro ("__PCE__", 1);
-            break;
-
-        default:
-            AbEnd ("Unknown target system type %d", Target);
-    }
-
-    /* Initialize the translation tables for the target system */
-    TgtTranslateInit ();
-}
-
-
-
-static void FileNameOption (const char* Opt, const char* Arg, StrBuf* Name)
-/* Handle an option that remembers a file name for later */
-{
-    /* Cannot have the option twice */
-    if (SB_NotEmpty (Name)) {
-        AbEnd ("Cannot use option `%s' twice", Opt);
-    }
-    /* Remember the file name for later */
-    SB_CopyStr (Name, Arg);
-    SB_Terminate (Name);
-}
-
-
-
-static void DefineSym (const char* Def)
-/* Define a symbol on the command line */
-{
-    const char* P = Def;
-
-    /* The symbol must start with a character or underline */
-    if (Def [0] != '_' && !IsAlpha (Def [0])) {
-        InvDef (Def);
-    }
-
-    /* Check the symbol name */
-    while (IsAlNum (*P) || *P == '_') {
-        ++P;
-    }
-
-    /* Do we have a value given? */
-    if (*P != '=') {
-        if (*P != '\0') {
-            InvDef (Def);
-        }
-        /* No value given. Define the macro with the value 1 */
-        DefineNumericMacro (Def, 1);
-    } else {
-        /* We have a value, P points to the '=' character. Since the argument
-        ** is const, create a copy and replace the '=' in the copy by a zero
-        ** terminator.
-        */
-        char* Q;
-        unsigned Len = strlen (Def)+1;
-        char* S = (char*) xmalloc (Len);
-        memcpy (S, Def, Len);
-        Q = S + (P - Def);
-        *Q++ = '\0';
-
-        /* Define this as a macro */
-        DefineTextMacro (S, Q);
-
-        /* Release the allocated memory */
-        xfree (S);
-    }
-}
-
-
-
-static void CheckSegName (const char* Seg)
-/* Abort if the given name is not a valid segment name */
-{
-    /* Print an error and abort if the name is not ok */
-    if (!ValidSegName (Seg)) {
-        AbEnd ("Segment name `%s' is invalid", Seg);
-    }
-}
-
-
-
-static void OptAddSource (const char* Opt attribute ((unused)),
-                          const char* Arg attribute ((unused)))
-/* Add source lines as comments in generated assembler file */
-{
-    AddSource = 1;
-}
-
-
-
-static void OptAllCDecl (const char* Opt attribute ((unused)),
-                         const char* Arg attribute ((unused)))
-/* Make functions default to cdecl instead of fastcall. */
-{
-    AutoCDecl = 1;
-}
-
-
-
-static void OptBssName (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --bss-name option */
-{
-    /* Check for a valid name */
-    CheckSegName (Arg);
-
-    /* Set the name */
-    SetSegName (SEG_BSS, Arg);
-}
-
-
-
-static void OptCheckStack (const char* Opt attribute ((unused)),
-                           const char* Arg attribute ((unused)))
-/* Handle the --check-stack option */
-{
-    IS_Set (&CheckStack, 1);
-}
-
-
-
-static void OptCodeName (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --code-name option */
-{
-    /* Check for a valid name */
-    CheckSegName (Arg);
-
-    /* Set the name */
-    SetSegName (SEG_CODE, Arg);
-}
-
-
-
-static void OptCodeSize (const char* Opt, const char* Arg)
-/* Handle the --codesize option */
-{
-    unsigned Factor;
-    char     BoundsCheck;
-
-    /* Numeric argument expected */
-    if (sscanf (Arg, "%u%c", &Factor, &BoundsCheck) != 1 ||
-        Factor < 10 || Factor > 1000) {
-        AbEnd ("Argument for %s is invalid", Opt);
-    }
-    IS_Set (&CodeSizeFactor, Factor);
-}
-
-
-
-static void OptCreateDep (const char* Opt, const char* Arg)
-/* Handle the --create-dep option */
-{
-    FileNameOption (Opt, Arg, &DepName);
-}
-
-
-
-static void OptCreateFullDep (const char* Opt attribute ((unused)),
-                              const char* Arg)
-/* Handle the --create-full-dep option */
-{
-    FileNameOption (Opt, Arg, &FullDepName);
-}
-
-
-
-static void OptCPU (const char* Opt, const char* Arg)
-/* Handle the --cpu option */
-{
-    /* Find the CPU from the given name */
-    CPU = FindCPU (Arg);
-    if (CPU != CPU_6502 && CPU != CPU_6502X && CPU != CPU_65SC02 &&
-        CPU != CPU_65C02 && CPU != CPU_65816 && CPU != CPU_HUC6280) {
-        AbEnd ("Invalid argument for %s: `%s'", Opt, Arg);
-    }
-}
-
-
-
-static void OptDataName (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --data-name option */
-{
-    /* Check for a valid name */
-    CheckSegName (Arg);
-
-    /* Set the name */
-    SetSegName (SEG_DATA, Arg);
-}
-
-
-
-static void OptDebug (const char* Opt attribute ((unused)),
-                      const char* Arg attribute ((unused)))
-/* Compiler debug mode */
-{
-    ++Debug;
-}
-
-
-
-static void OptDebugInfo (const char* Opt attribute ((unused)),
-                          const char* Arg attribute ((unused)))
-/* Add debug info to the object file */
-{
-    DebugInfo = 1;
-}
-
-
-
-static void OptDebugOpt (const char* Opt attribute ((unused)), const char* Arg)
-/* Debug optimization steps */
-{
-    char Buf [128];
-    char* Line;
-
-    /* Open the file */
-    FILE* F = fopen (Arg, "r");
-    if (F == 0) {
-        AbEnd ("Cannot open `%s': %s", Arg, strerror (errno));
-    }
-
-    /* Read line by line, ignore empty lines and switch optimization
-    ** steps on/off.
-    */
-    while (fgets (Buf, sizeof (Buf), F) != 0) {
-
-        /* Remove trailing control chars. This will also remove the
-        ** trailing newline.
-        */
-        unsigned Len = strlen (Buf);
-        while (Len > 0 && IsControl (Buf[Len-1])) {
-            --Len;
-        }
-        Buf[Len] = '\0';
-
-        /* Get a pointer to the buffer and remove leading white space */
-        Line = Buf;
-        while (IsBlank (*Line)) {
-            ++Line;
-        }
-
-        /* Check the first character and enable/disable the step or
-        ** ignore the line
-        */
-        switch (*Line) {
-
-            case '\0':
-            case '#':
-            case ';':
-                /* Empty or comment line */
-                continue;
-
-            case '-':
-                DisableOpt (Line+1);
-                break;
-
-            case '+':
-                ++Line;
-                /* FALLTHROUGH */
-
-            default:
-                EnableOpt (Line);
-                break;
-
-        }
-
-    }
-
-    /* Close the file, no error check here since we were just reading and
-    ** this is only a debug function.
-    */
-    (void) fclose (F);
-}
-
-
-
-static void OptDebugOptOutput (const char* Opt attribute ((unused)), 
-                               const char* Arg attribute ((unused)))
-/* Output optimization steps */
-{
-    DebugOptOutput = 1;
-}
-
-
-
-static void OptDepTarget (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --dep-target option */
-{
-    FileNameOption (Opt, Arg, &DepTarget);
-}
-
-
-
-static void OptDisableOpt (const char* Opt attribute ((unused)), const char* Arg)
-/* Disable an optimization step */
-{
-    DisableOpt (Arg);
-}
-
-
-
-static void OptEnableOpt (const char* Opt attribute ((unused)), const char* Arg)
-/* Enable an optimization step */
-{
-    EnableOpt (Arg);
-}
-
-
-
-static void OptHelp (const char* Opt attribute ((unused)),
-                     const char* Arg attribute ((unused)))
-/* Print usage information and exit */
-{
-    Usage ();
-    exit (EXIT_SUCCESS);
-}
-
-
-
-static void OptIncludeDir (const char* Opt attribute ((unused)), const char* Arg)
-/* Add an include search path */
-{
-    AddSearchPath (SysIncSearchPath, Arg);
-    AddSearchPath (UsrIncSearchPath, Arg);
-}
-
-
-
-static void OptListOptSteps (const char* Opt attribute ((unused)),
-                             const char* Arg attribute ((unused)))
-/* List all optimizer steps */
-{
-    /* List the optimizer steps */
-    ListOptSteps (stdout);
-
-    /* Terminate */
-    exit (EXIT_SUCCESS);
-}
-
-
-
-static void OptListWarnings (const char* Opt attribute ((unused)),
-                             const char* Arg attribute ((unused)))
-/* List all warning types */
-{
-    /* List the warnings */
-    ListWarnings (stdout);
-
-    /* Terminate */
-    exit (EXIT_SUCCESS);
-}
-
-
-
-static void OptLocalStrings (const char* Opt attribute ((unused)),
-                             const char* Arg attribute ((unused)))
-/* Emit string literals immediately */
-{
-    IS_Set (&LocalStrings, 1);
-}
-
-
-
-static void OptMemoryModel (const char* Opt, const char* Arg)
-/* Set the memory model */
-{
-    mmodel_t M;
-
-    /* Check the current memory model */
-    if (MemoryModel != MMODEL_UNKNOWN) {
-        AbEnd ("Cannot use option `%s' twice", Opt);
-    }
-
-    /* Translate the memory model name and check it */
-    M = FindMemoryModel (Arg);
-    if (M == MMODEL_UNKNOWN) {
-        AbEnd ("Unknown memory model: %s", Arg);
-    } else if (M == MMODEL_HUGE) {
-        AbEnd ("Unsupported memory model: %s", Arg);
-    }
-
-    /* Set the memory model */
-    SetMemoryModel (M);
-}
-
-
-
-static void OptRegisterSpace (const char* Opt, const char* Arg)
-/* Handle the --register-space option */
-{
-    /* Numeric argument expected */
-    if (sscanf (Arg, "%u", &RegisterSpace) != 1 || RegisterSpace > 256) {
-        AbEnd ("Argument for option %s is invalid", Opt);
-    }
-}
-
-
-
-static void OptRegisterVars (const char* Opt attribute ((unused)),
-                             const char* Arg attribute ((unused)))
-/* Handle the --register-vars option */
-{
-    IS_Set (&EnableRegVars, 1);
-}
-
-
-
-static void OptRodataName (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --rodata-name option */
-{
-    /* Check for a valid name */
-    CheckSegName (Arg);
-
-    /* Set the name */
-    SetSegName (SEG_RODATA, Arg);
-}
-
-
-
-static void OptSignedChars (const char* Opt attribute ((unused)),
-                            const char* Arg attribute ((unused)))
-/* Make default characters signed */
-{
-    IS_Set (&SignedChars, 1);
-}
-
-
-
-static void OptStandard (const char* Opt, const char* Arg)
-/* Handle the --standard option */
-{
-    /* Find the standard from the given name */
-    standard_t Std = FindStandard (Arg);
-    if (Std == STD_UNKNOWN) {
-        AbEnd ("Invalid argument for %s: `%s'", Opt, Arg);
-    } else if (IS_Get (&Standard) != STD_UNKNOWN) {
-        AbEnd ("Option %s given more than once", Opt);
-    } else {
-        IS_Set (&Standard, Std);
-    }
-}
-
-
-
-static void OptStaticLocals (const char* Opt attribute ((unused)),
-                             const char* Arg attribute ((unused)))
-/* Place local variables in static storage */
-{
-    IS_Set (&StaticLocals, 1);
-}
-
-
-
-static void OptTarget (const char* Opt attribute ((unused)), const char* Arg)
-/* Set the target system */
-{
-    SetSys (Arg);
-}
-
-
-
-static void OptVerbose (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Increase verbosity */
-{
-    ++Verbosity;
-}
-
-
-
-static void OptVersion (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Print the compiler version */
-{
-    fprintf (stderr, "cc65 V%s\n", GetVersionAsString ());
-    exit (EXIT_SUCCESS);
-}
-
-
-
-static void OptWarning (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the -W option */
-{
-    StrBuf W = AUTO_STRBUF_INITIALIZER;
-
-    /* Arg is a list of suboptions, separated by commas */
-    while (Arg) {
-
-        const char* Pos;
-        int         Enabled = 1;
-        IntStack*   S;
-
-        /* The suboption may be prefixed with '-' or '+' */
-        if (*Arg == '-') {
-            Enabled = 0;
-            ++Arg;
-        } else if (*Arg == '+') {
-            /* This is the default */
-            ++Arg;
-        }
-
-        /* Get the next suboption */
-        Pos = strchr (Arg, ',');
-        if (Pos) {
-            SB_CopyBuf (&W, Arg, Pos - Arg);
-            Arg = Pos + 1;
-        } else {
-            SB_CopyStr (&W, Arg);
-            Arg = 0;
-        }
-        SB_Terminate (&W);
-
-        /* Search for the warning */
-        S = FindWarning (SB_GetConstBuf (&W));
-        if (S == 0) {
-            InvArg (Opt, SB_GetConstBuf (&W));
-        }
-        IS_Set (S, Enabled);
-    }
-
-    /* Free allocated memory */
-    SB_Done (&W);
-}
-
-
-
-static void OptWritableStrings (const char* Opt attribute ((unused)),
-                                const char* Arg attribute ((unused)))
-/* Make string literals writable */
-{
-    IS_Set (&WritableStrings, 1);
-}
-
-
-
-int main (int argc, char* argv[])
-{
-    /* Program long options */
-    static const LongOpt OptTab[] = {
-        { "--add-source",       0,      OptAddSource            },
-        { "--all-cdecl",        0,      OptAllCDecl             },
-        { "--bss-name",         1,      OptBssName              },
-        { "--check-stack",      0,      OptCheckStack           },
-        { "--code-name",        1,      OptCodeName             },
-        { "--codesize",         1,      OptCodeSize             },
-        { "--cpu",              1,      OptCPU                  },
-        { "--create-dep",       1,      OptCreateDep            },
-        { "--create-full-dep",  1,      OptCreateFullDep        },
-        { "--data-name",        1,      OptDataName             },
-        { "--debug",            0,      OptDebug                },
-        { "--debug-info",       0,      OptDebugInfo            },
-        { "--debug-opt",        1,      OptDebugOpt             },
-        { "--debug-opt-output", 0,      OptDebugOptOutput       },
-        { "--dep-target",       1,      OptDepTarget            },
-        { "--disable-opt",      1,      OptDisableOpt           },
-        { "--enable-opt",       1,      OptEnableOpt            },
-        { "--help",             0,      OptHelp                 },
-        { "--include-dir",      1,      OptIncludeDir           },
-        { "--list-opt-steps",   0,      OptListOptSteps         },
-        { "--list-warnings",    0,      OptListWarnings         },
-        { "--local-strings",    0,      OptLocalStrings         },
-        { "--memory-model",     1,      OptMemoryModel          },
-        { "--register-space",   1,      OptRegisterSpace        },
-        { "--register-vars",    0,      OptRegisterVars         },
-        { "--rodata-name",      1,      OptRodataName           },
-        { "--signed-chars",     0,      OptSignedChars          },
-        { "--standard",         1,      OptStandard             },
-        { "--static-locals",    0,      OptStaticLocals         },
-        { "--target",           1,      OptTarget               },
-        { "--verbose",          0,      OptVerbose              },
-        { "--version",          0,      OptVersion              },
-        { "--writable-strings", 0,      OptWritableStrings      },
-    };
-
-    unsigned I;
-
-    /* Initialize the input file name */
-    const char* InputFile  = 0;
-
-    /* Initialize the cmdline module */
-    InitCmdLine (&argc, &argv, "cc65");
-
-    /* Initialize the default segment names */
-    InitSegNames ();
-
-    /* Initialize the include search paths */
-    InitIncludePaths ();
-
-    /* Parse the command line */
-    I = 1;
-    while (I < ArgCount) {
-
-        const char* P;
-
-        /* Get the argument */
-        const char* Arg = ArgVec[I];
-
-        /* Check for an option */
-        if (Arg[0] == '-') {
-
-            switch (Arg[1]) {
-
-                case '-':
-                    LongOption (&I, OptTab, sizeof(OptTab)/sizeof(OptTab[0]));
-                    break;
-
-                case 'd':
-                    OptDebug (Arg, 0);
-                    break;
-
-                case 'h':
-                case '?':
-                    OptHelp (Arg, 0);
-                    break;
-
-                case 'g':
-                    OptDebugInfo (Arg, 0);
-                    break;
-
-                case 'j':
-                    OptSignedChars (Arg, 0);
-                    break;
-
-                case 'o':
-                    SetOutputName (GetArg (&I, 2));
-                    break;
-
-                case 'r':
-                    OptRegisterVars (Arg, 0);
-                    break;
-
-                case 't':
-                    OptTarget (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'u':
-                    OptCreateDep (Arg, 0);
-                    break;
-
-                case 'v':
-                    OptVerbose (Arg, 0);
-                    break;
-
-                case 'C':
-                    P = Arg + 2;
-                    while (*P) {
-                        switch (*P++) {
-                            case 'l':
-                                OptStaticLocals (Arg, 0);
-                                break;
-                            default:
-                                UnknownOption (Arg);
-                                break;
-                        }
-                    }
-                    break;
-
-                case 'D':
-                    DefineSym (GetArg (&I, 2));
-                    break;
-
-                case 'E':
-                    PreprocessOnly = 1;
-                    break;
-
-                case 'I':
-                    OptIncludeDir (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'O':
-                    IS_Set (&Optimize, 1);
-                    P = Arg + 2;
-                    while (*P) {
-                        switch (*P++) {
-                            case 'i':
-                                IS_Set (&CodeSizeFactor, 200);
-                                break;
-                            case 'r':
-                                IS_Set (&EnableRegVars, 1);
-                                break;
-                            case 's':
-                                IS_Set (&InlineStdFuncs, 1);
-                                break;
-                        }
-                    }
-                    break;
-
-                case 'T':
-                    OptAddSource (Arg, 0);
-                    break;
-
-                case 'V':
-                    OptVersion (Arg, 0);
-                    break;
-
-                case 'W':
-                    OptWarning (Arg, GetArg (&I, 2));
-                    break;
-
-                default:
-                    UnknownOption (Arg);
-                    break;
-            }
-        } else {
-            if (InputFile) {
-                fprintf (stderr, "additional file specs ignored\n");
-            } else {
-                InputFile = Arg;
-            }
-        }
-
-        /* Next argument */
-        ++I;
-    }
-
-    /* Did we have a file spec on the command line? */
-    if (InputFile == 0) {
-        AbEnd ("No input files");
-    }
-
-    /* Add the default include search paths. */
-    FinishIncludePaths ();
-
-    /* Create the output file name if it was not explicitly given */
-    MakeDefaultOutputName (InputFile);
-
-    /* If no CPU given, use the default CPU for the target */
-    if (CPU == CPU_UNKNOWN) {
-        if (Target != TGT_UNKNOWN) {
-            CPU = GetTargetProperties (Target)->DefaultCPU;
-        } else {
-            CPU = CPU_6502;
-        }
-    }
-
-    /* If no memory model was given, use the default */
-    if (MemoryModel == MMODEL_UNKNOWN) {
-        SetMemoryModel (MMODEL_NEAR);
-    }
-
-    /* If no language standard was given, use the default one */
-    if (IS_Get (&Standard) == STD_UNKNOWN) {
-        IS_Set (&Standard, STD_DEFAULT);
-    }
-
-    /* Go! */
-    Compile (InputFile);
-
-    /* Create the output file if we didn't had any errors */
-    if (PreprocessOnly == 0 && (ErrorCount == 0 || Debug)) {
-
-        /* Emit literals, externals, do cleanup and optimizations */
-        FinishCompile ();
-
-        /* Open the file */
-        OpenOutputFile ();
-
-        /* Write the output to the file */
-        WriteAsmOutput ();
-        Print (stdout, 1, "Wrote output to `%s'\n", OutputFilename);
-
-        /* Close the file, check for errors */
-        CloseOutputFile ();
-
-        /* Create dependencies if requested */
-        CreateDependencies ();
-    }
-
-    /* Return an apropriate exit code */
-    return (ErrorCount > 0)? EXIT_FAILURE : EXIT_SUCCESS;
-}
diff --git a/src/cc65/opcodes.c b/src/cc65/opcodes.c
deleted file mode 100644 (file)
index a7b91ca..0000000
+++ /dev/null
@@ -1,814 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 opcodes.c                                 */
-/*                                                                           */
-/*                  Opcode and addressing mode definitions                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2004 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include "stdlib.h"
-#include <string.h>
-#include <ctype.h>
-
-/* common */
-#include "check.h"
-#include "cpu.h"
-
-/* cc65 */
-#include "codeinfo.h"
-#include "error.h"
-#include "opcodes.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Opcode description table */
-const OPCDesc OPCTable[OP65_COUNT] = {
-
-    /* 65XX opcodes */
-    {   OP65_ADC,                               /* opcode */
-        "adc",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_A,                                  /* use */
-        REG_A,                                  /* chg */
-        OF_SETF                                 /* flags */
-    },
-    {   OP65_AND,                               /* opcode */
-        "and",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_A,                                  /* use */
-        REG_A,                                  /* chg */
-        OF_SETF                                 /* flags */
-    },
-    {   OP65_ASL,                               /* opcode */
-        "asl",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_SETF | OF_NOIMP                      /* flags */
-    },
-    {   OP65_BCC,                               /* opcode */
-        "bcc",                                  /* mnemonic */
-        2,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_CBRA                                 /* flags */
-    },
-    {   OP65_BCS,                               /* opcode */
-        "bcs",                                  /* mnemonic */
-        2,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_CBRA                                 /* flags */
-    },
-    {   OP65_BEQ,                               /* opcode */
-        "beq",                                  /* mnemonic */
-        2,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_CBRA | OF_ZBRA | OF_FBRA             /* flags */
-    },
-    {   OP65_BIT,                               /* opcode */
-        "bit",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_A,                                  /* use */
-        REG_NONE,                               /* chg */
-        OF_SETF                                 /* flags */
-    },
-    {   OP65_BMI,                               /* opcode */
-        "bmi",                                  /* mnemonic */
-        2,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_CBRA | OF_FBRA                       /* flags */
-    },
-    {   OP65_BNE,                               /* opcode */
-        "bne",                                  /* mnemonic */
-        2,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_CBRA | OF_ZBRA | OF_FBRA             /* flags */
-    },
-    {   OP65_BPL,                               /* opcode */
-        "bpl",                                  /* mnemonic */
-        2,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_CBRA | OF_FBRA                       /* flags */
-    },
-    {   OP65_BRA,                               /* opcode */
-        "bra",                                  /* mnemonic */
-        2,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_UBRA                                 /* flags */
-    },
-    {   OP65_BRK,                               /* opcode */
-        "brk",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_NONE                                 /* flags */
-    },
-    {   OP65_BVC,                               /* opcode */
-        "bvc",                                  /* mnemonic */
-        2,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_CBRA                                 /* flags */
-    },
-    {   OP65_BVS,                               /* opcode */
-        "bvs",                                  /* mnemonic */
-        2,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_CBRA                                 /* flags */
-    },
-    {   OP65_CLC,                               /* opcode */
-        "clc",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_NONE                                 /* flags */
-    },
-    {   OP65_CLD,                               /* opcode */
-        "cld",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_NONE                                 /* flags */
-    },
-    {   OP65_CLI,                               /* opcode */
-        "cli",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_NONE                                 /* flags */
-    },
-    {   OP65_CLV,                               /* opcode */
-        "clv",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_NONE                                 /* flags */
-    },
-    {   OP65_CMP,                               /* opcode */
-        "cmp",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_A,                                  /* use */
-        REG_NONE,                               /* chg */
-        OF_SETF | OF_CMP                        /* flags */
-    },
-    {   OP65_CPX,                               /* opcode */
-        "cpx",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_X,                                  /* use */
-        REG_NONE,                               /* chg */
-        OF_SETF | OF_CMP                        /* flags */
-    },
-    {   OP65_CPY,                               /* opcode */
-        "cpy",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_Y,                                  /* use */
-        REG_NONE,                               /* chg */
-        OF_SETF | OF_CMP                        /* flags */
-    },
-    {   OP65_DEA,                               /* opcode */
-        "dea",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_A,                                  /* use */
-        REG_A,                                  /* chg */
-        OF_REG_INCDEC | OF_SETF                 /* flags */
-    },
-    {   OP65_DEC,                               /* opcode */
-        "dec",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_SETF | OF_NOIMP                      /* flags */
-    },
-    {   OP65_DEX,                               /* opcode */
-        "dex",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_X,                                  /* use */
-        REG_X,                                  /* chg */
-        OF_REG_INCDEC | OF_SETF                 /* flags */
-    },
-    {   OP65_DEY,                               /* opcode */
-        "dey",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_Y,                                  /* use */
-        REG_Y,                                  /* chg */
-        OF_REG_INCDEC | OF_SETF                 /* flags */
-    },
-    {   OP65_EOR,                               /* opcode */
-        "eor",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_A,                                  /* use */
-        REG_A,                                  /* chg */
-        OF_SETF                                 /* flags */
-    },
-    {   OP65_INA,                               /* opcode */
-        "ina",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_A,                                  /* use */
-        REG_A,                                  /* chg */
-        OF_REG_INCDEC | OF_SETF                 /* flags */
-    },
-    {   OP65_INC,                               /* opcode */
-        "inc",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_SETF | OF_NOIMP                      /* flags */
-    },
-    {   OP65_INX,                               /* opcode */
-        "inx",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_X,                                  /* use */
-        REG_X,                                  /* chg */
-        OF_REG_INCDEC | OF_SETF                 /* flags */
-    },
-    {   OP65_INY,                               /* opcode */
-        "iny",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_Y,                                  /* use */
-        REG_Y,                                  /* chg */
-        OF_REG_INCDEC | OF_SETF                 /* flags */
-    },
-    {   OP65_JCC,                               /* opcode */
-        "jcc",                                  /* mnemonic */
-        5,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_CBRA | OF_LBRA                       /* flags */
-    },
-    {   OP65_JCS,                               /* opcode */
-        "jcs",                                  /* mnemonic */
-        5,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_CBRA | OF_LBRA                       /* flags */
-    },
-    {   OP65_JEQ,                               /* opcode */
-        "jeq",                                  /* mnemonic */
-        5,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_CBRA | OF_LBRA | OF_ZBRA | OF_FBRA   /* flags */
-    },
-    {   OP65_JMI,                               /* opcode */
-        "jmi",                                  /* mnemonic */
-        5,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_CBRA | OF_LBRA | OF_FBRA             /* flags */
-    },
-    {   OP65_JMP,                               /* opcode */
-        "jmp",                                  /* mnemonic */
-        3,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_UBRA | OF_LBRA                       /* flags */
-    },
-    {   OP65_JNE,                               /* opcode */
-        "jne",                                  /* mnemonic */
-        5,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_CBRA | OF_LBRA | OF_ZBRA | OF_FBRA   /* flags */
-    },
-    {   OP65_JPL,                               /* opcode */
-        "jpl",                                  /* mnemonic */
-        5,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_CBRA | OF_LBRA | OF_FBRA             /* flags */
-    },
-    {   OP65_JSR,                               /* opcode */
-        "jsr",                                  /* mnemonic */
-        3,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_CALL                                 /* flags */
-    },
-    {   OP65_JVC,                               /* opcode */
-        "jvc",                                  /* mnemonic */
-        5,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_CBRA | OF_LBRA                       /* flags */
-    },
-    {   OP65_JVS,                               /* opcode */
-        "jvs",                                  /* mnemonic */
-        5,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_CBRA | OF_LBRA                       /* flags */
-    },
-    {   OP65_LDA,                               /* opcode */
-        "lda",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_A,                                  /* chg */
-        OF_LOAD | OF_SETF                       /* flags */
-    },
-    {   OP65_LDX,                               /* opcode */
-        "ldx",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_X,                                  /* chg */
-        OF_LOAD | OF_SETF                       /* flags */
-    },
-    {   OP65_LDY,                               /* opcode */
-        "ldy",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_Y,                                  /* chg */
-        OF_LOAD | OF_SETF                       /* flags */
-    },
-    {   OP65_LSR,                               /* opcode */
-        "lsr",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_SETF | OF_NOIMP                      /* flags */
-    },
-    {   OP65_NOP,                               /* opcode */
-        "nop",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_NONE                                 /* flags */
-    },
-    {   OP65_ORA,                               /* opcode */
-        "ora",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_A,                                  /* use */
-        REG_A,                                  /* chg */
-        OF_SETF                                 /* flags */
-    },
-    {   OP65_PHA,                               /* opcode */
-        "pha",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_A,                                  /* use */
-        REG_NONE,                               /* chg */
-        OF_NONE                                 /* flags */
-    },
-    {   OP65_PHP,                               /* opcode */
-        "php",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_NONE                                 /* flags */
-    },
-    {   OP65_PHX,                               /* opcode */
-        "phx",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_X,                                  /* use */
-        REG_NONE,                               /* chg */
-        OF_NONE                                 /* flags */
-    },
-    {   OP65_PHY,                               /* opcode */
-        "phy",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_Y,                                  /* use */
-        REG_NONE,                               /* chg */
-        OF_NONE                                 /* flags */
-    },
-    {   OP65_PLA,                               /* opcode */
-        "pla",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_A,                                  /* chg */
-        OF_SETF                                 /* flags */
-    },
-    {   OP65_PLP,                               /* opcode */
-        "plp",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_NONE                                 /* flags */
-    },
-    {   OP65_PLX,                               /* opcode */
-        "plx",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_X,                                  /* chg */
-        OF_SETF                                 /* flags */
-    },
-    {   OP65_PLY,                               /* opcode */
-        "ply",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_Y,                                  /* chg */
-        OF_SETF                                 /* flags */
-    },
-    {   OP65_ROL,                               /* opcode */
-        "rol",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_SETF | OF_NOIMP                      /* flags */
-    },
-    {   OP65_ROR,                               /* opcode */
-        "ror",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_SETF | OF_NOIMP                      /* flags */
-    },
-    /* Mark RTI as "uses all registers but doesn't change them", so the
-    ** optimizer won't remove preceeding loads.
-    */
-    {   OP65_RTI,                               /* opcode */
-        "rti",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_AXY,                                /* use */
-        REG_NONE,                               /* chg */
-        OF_RET                                  /* flags */
-    },
-    {   OP65_RTS,                               /* opcode */
-        "rts",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_RET                                  /* flags */
-    },
-    {   OP65_SBC,                               /* opcode */
-        "sbc",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_A,                                  /* use */
-        REG_A,                                  /* chg */
-        OF_SETF                                 /* flags */
-    },
-    {   OP65_SEC,                               /* opcode */
-        "sec",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_NONE                                 /* flags */
-    },
-    {   OP65_SED,                               /* opcode */
-        "sed",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_NONE                                 /* flags */
-    },
-    {   OP65_SEI,                               /* opcode */
-        "sei",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_NONE                                 /* flags */
-    },
-    {   OP65_STA,                               /* opcode */
-        "sta",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_A,                                  /* use */
-        REG_NONE,                               /* chg */
-        OF_STORE                                /* flags */
-    },
-    {   OP65_STX,                               /* opcode */
-        "stx",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_X,                                  /* use */
-        REG_NONE,                               /* chg */
-        OF_STORE                                /* flags */
-    },
-    {   OP65_STY,                               /* opcode */
-        "sty",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_Y,                                  /* use */
-        REG_NONE,                               /* chg */
-        OF_STORE                                /* flags */
-    },
-    {   OP65_STZ,                               /* opcode */
-        "stz",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_NONE,                               /* chg */
-        OF_STORE                                /* flags */
-    },
-    {   OP65_TAX,                               /* opcode */
-        "tax",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_A,                                  /* use */
-        REG_X,                                  /* chg */
-        OF_XFR | OF_SETF                        /* flags */
-    },
-    {   OP65_TAY,                               /* opcode */
-        "tay",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_A,                                  /* use */
-        REG_Y,                                  /* chg */
-        OF_XFR | OF_SETF                        /* flags */
-    },
-    {   OP65_TRB,                               /* opcode */
-        "trb",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_A,                                  /* use */
-        REG_NONE,                               /* chg */
-        OF_SETF                                 /* flags */
-    },
-    {   OP65_TSB,                               /* opcode */
-        "tsb",                                  /* mnemonic */
-        0,                                      /* size */
-        REG_A,                                  /* use */
-        REG_NONE,                               /* chg */
-        OF_SETF                                 /* flags */
-    },
-    {   OP65_TSX,                               /* opcode */
-        "tsx",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_NONE,                               /* use */
-        REG_X,                                  /* chg */
-        OF_XFR | OF_SETF                        /* flags */
-    },
-    {   OP65_TXA,                               /* opcode */
-        "txa",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_X,                                  /* use */
-        REG_A,                                  /* chg */
-        OF_XFR | OF_SETF                        /* flags */
-    },
-    {   OP65_TXS,                               /* opcode */
-        "txs",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_X,                                  /* use */
-        REG_NONE,                               /* chg */
-        OF_XFR                                  /* flags */
-    },
-    {   OP65_TYA,                               /* opcode */
-        "tya",                                  /* mnemonic */
-        1,                                      /* size */
-        REG_Y,                                  /* use */
-        REG_A,                                  /* chg */
-        OF_XFR | OF_SETF                        /* flags */
-    },
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static int FindCmp (const void* Key, const void* Desc)
-/* Compare function for FindOpcode */
-{
-    return strcmp (Key, ((OPCDesc*)Desc)->Mnemo);
-}
-
-
-
-const OPCDesc* FindOP65 (const char* M)
-/* Find the given opcode and return the opcode number. If the opcode was not
-** found, return NULL.
-*/
-{
-    unsigned I;
-    unsigned Len;
-
-    /* Check the length of the given string, then copy it into local
-    ** storage, converting it to upper case.
-    */
-    char Mnemo[sizeof (OPCTable[0].Mnemo)];
-    Len = strlen (M);
-    if (Len >= sizeof (OPCTable[0].Mnemo)) {
-        /* Invalid length means invalid opcode */
-        return 0;
-    }
-    for (I = 0; I < Len; ++I) {
-        Mnemo[I] = tolower (M[I]);
-    }
-    Mnemo[I] = '\0';
-
-    /* Search for the mnemonic in the table and return the result */
-    return bsearch (Mnemo, OPCTable, OP65_COUNT,
-                    sizeof (OPCTable[0]), FindCmp );
-}
-
-
-
-unsigned GetInsnSize (opc_t OPC, am_t AM)
-/* Return the size of the given instruction */
-{
-    /* Get the opcode desc and check the size given there */
-    const OPCDesc* D = &OPCTable[OPC];
-    if (D->Size != 0) {
-        return D->Size;
-    }
-
-    /* Check the addressing mode. */
-    switch (AM) {
-        case AM65_IMP:     return 1;
-        case AM65_ACC:     return 1;
-        case AM65_IMM:     return 2;
-        case AM65_ZP:      return 2;
-        case AM65_ZPX:     return 2;
-        case AM65_ABS:     return 3;
-        case AM65_ABSX:    return 3;
-        case AM65_ABSY:    return 3;
-        case AM65_ZPX_IND: return 2;
-        case AM65_ZP_INDY: return 2;
-        case AM65_ZP_IND:  return 2;
-        default:
-            Internal ("Invalid addressing mode");
-            return 0;
-    }
-}
-
-
-
-unsigned char GetAMUseInfo (am_t AM)
-/* Get usage info for the given addressing mode (addressing modes that use
-** index registers return REG_r info for these registers).
-*/
-{
-    /* Check the addressing mode. */
-    switch (AM) {
-        case AM65_ACC:     return REG_A;
-        case AM65_ZPX:     return REG_X;
-        case AM65_ABSX:    return REG_X;
-        case AM65_ABSY:    return REG_Y;
-        case AM65_ZPX_IND: return REG_X;
-        case AM65_ZP_INDY: return REG_Y;
-        default:           return REG_NONE;
-    }
-}
-
-
-
-opc_t GetInverseBranch (opc_t OPC)
-/* Return a branch that reverse the condition of the branch given in OPC */
-{
-    switch (OPC) {
-        case OP65_BCC:  return OP65_BCS;
-        case OP65_BCS:  return OP65_BCC;
-        case OP65_BEQ:  return OP65_BNE;
-        case OP65_BMI:  return OP65_BPL;
-        case OP65_BNE:  return OP65_BEQ;
-        case OP65_BPL:  return OP65_BMI;
-        case OP65_BVC:  return OP65_BVS;
-        case OP65_BVS:  return OP65_BVC;
-        case OP65_JCC:  return OP65_JCS;
-        case OP65_JCS:  return OP65_JCC;
-        case OP65_JEQ:  return OP65_JNE;
-        case OP65_JMI:  return OP65_JPL;
-        case OP65_JNE:  return OP65_JEQ;
-        case OP65_JPL:  return OP65_JMI;
-        case OP65_JVC:  return OP65_JVS;
-        case OP65_JVS:  return OP65_JVC;
-        default:
-            Internal ("GetInverseBranch: Invalid opcode: %d", OPC);
-            return 0;
-    }
-}
-
-
-
-opc_t MakeShortBranch (opc_t OPC)
-/* Return the short version of the given branch. If the branch is already
-** a short branch, return the opcode unchanged.
-*/
-{
-    switch (OPC) {
-        case OP65_BCC:
-        case OP65_JCC:  return OP65_BCC;
-        case OP65_BCS:
-        case OP65_JCS:  return OP65_BCS;
-        case OP65_BEQ:
-        case OP65_JEQ:  return OP65_BEQ;
-        case OP65_BMI:
-        case OP65_JMI:  return OP65_BMI;
-        case OP65_BNE:
-        case OP65_JNE:  return OP65_BNE;
-        case OP65_BPL:
-        case OP65_JPL:  return OP65_BPL;
-        case OP65_BVC:
-        case OP65_JVC:  return OP65_BVC;
-        case OP65_BVS:
-        case OP65_JVS:  return OP65_BVS;
-        case OP65_BRA:
-        case OP65_JMP:  return (CPUIsets[CPU] & CPU_ISET_65SC02)? OP65_BRA : OP65_JMP;
-        default:
-            Internal ("MakeShortBranch: Invalid opcode: %d", OPC);
-            return 0;
-    }
-}
-
-
-
-opc_t MakeLongBranch (opc_t OPC)
-/* Return the long version of the given branch. If the branch is already
-** a long branch, return the opcode unchanged.
-*/
-{
-    switch (OPC) {
-        case OP65_BCC:
-        case OP65_JCC:  return OP65_JCC;
-        case OP65_BCS:
-        case OP65_JCS:  return OP65_JCS;
-        case OP65_BEQ:
-        case OP65_JEQ:  return OP65_JEQ;
-        case OP65_BMI:
-        case OP65_JMI:  return OP65_JMI;
-        case OP65_BNE:
-        case OP65_JNE:  return OP65_JNE;
-        case OP65_BPL:
-        case OP65_JPL:  return OP65_JPL;
-        case OP65_BVC:
-        case OP65_JVC:  return OP65_JVC;
-        case OP65_BVS:
-        case OP65_JVS:  return OP65_JVS;
-        case OP65_BRA:
-        case OP65_JMP:  return OP65_JMP;
-        default:
-            Internal ("MakeLongBranch: Invalid opcode: %d", OPC);
-            return 0;
-    }
-}
-
-
-
-bc_t GetBranchCond (opc_t OPC)
-/* Get the condition for the conditional branch in OPC */
-{
-    switch (OPC) {
-        case OP65_BCC:  return BC_CC;
-        case OP65_BCS:  return BC_CS;
-        case OP65_BEQ:  return BC_EQ;
-        case OP65_BMI:  return BC_MI;
-        case OP65_BNE:  return BC_NE;
-        case OP65_BPL:  return BC_PL;
-        case OP65_BVC:  return BC_VC;
-        case OP65_BVS:  return BC_VS;
-        case OP65_JCC:  return BC_CC;
-        case OP65_JCS:  return BC_CS;
-        case OP65_JEQ:  return BC_EQ;
-        case OP65_JMI:  return BC_MI;
-        case OP65_JNE:  return BC_NE;
-        case OP65_JPL:  return BC_PL;
-        case OP65_JVC:  return BC_VC;
-        case OP65_JVS:  return BC_VS;
-        default:
-            Internal ("GetBranchCond: Invalid opcode: %d", OPC);
-            return 0;
-    }
-}
-
-
-
-bc_t GetInverseCond (bc_t BC)
-/* Return the inverse condition of the given one */
-{
-    switch (BC) {
-        case BC_CC:     return BC_CS;
-        case BC_CS:     return BC_CC;
-        case BC_EQ:     return BC_NE;
-        case BC_MI:     return BC_PL;
-        case BC_NE:     return BC_EQ;
-        case BC_PL:     return BC_MI;
-        case BC_VC:     return BC_VS;
-        case BC_VS:     return BC_VC;
-        default:
-            Internal ("GetInverseCond: Invalid condition: %d", BC);
-            return 0;
-    }
-}
diff --git a/src/cc65/opcodes.h b/src/cc65/opcodes.h
deleted file mode 100644 (file)
index 349de32..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 opcodes.h                                 */
-/*                                                                           */
-/*                  Opcode and addressing mode definitions                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2004 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OPCODES_H
-#define OPCODES_H
-
-
-
-/* common */
-#include "inline.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* 65XX opcodes */
-typedef enum {
-    OP65_ADC,
-    OP65_AND,
-    OP65_ASL,
-    OP65_BCC,
-    OP65_BCS,
-    OP65_BEQ,
-    OP65_BIT,
-    OP65_BMI,
-    OP65_BNE,
-    OP65_BPL,
-    OP65_BRA,
-    OP65_BRK,
-    OP65_BVC,
-    OP65_BVS,
-    OP65_CLC,
-    OP65_CLD,
-    OP65_CLI,
-    OP65_CLV,
-    OP65_CMP,
-    OP65_CPX,
-    OP65_CPY,
-    OP65_DEA,
-    OP65_DEC,
-    OP65_DEX,
-    OP65_DEY,
-    OP65_EOR,
-    OP65_INA,
-    OP65_INC,
-    OP65_INX,
-    OP65_INY,
-    OP65_JCC,
-    OP65_JCS,
-    OP65_JEQ,
-    OP65_JMI,
-    OP65_JMP,
-    OP65_JNE,
-    OP65_JPL,
-    OP65_JSR,
-    OP65_JVC,
-    OP65_JVS,
-    OP65_LDA,
-    OP65_LDX,
-    OP65_LDY,
-    OP65_LSR,
-    OP65_NOP,
-    OP65_ORA,
-    OP65_PHA,
-    OP65_PHP,
-    OP65_PHX,
-    OP65_PHY,
-    OP65_PLA,
-    OP65_PLP,
-    OP65_PLX,
-    OP65_PLY,
-    OP65_ROL,
-    OP65_ROR,
-    OP65_RTI,
-    OP65_RTS,
-    OP65_SBC,
-    OP65_SEC,
-    OP65_SED,
-    OP65_SEI,
-    OP65_STA,
-    OP65_STX,
-    OP65_STY,
-    OP65_STZ,
-    OP65_TAX,
-    OP65_TAY,
-    OP65_TRB,
-    OP65_TSB,
-    OP65_TSX,
-    OP65_TXA,
-    OP65_TXS,
-    OP65_TYA,
-
-    /* Number of opcodes available */
-    OP65_COUNT
-} opc_t;
-
-/* 65XX addressing modes */
-typedef enum {
-    AM65_IMP,                   /* implicit */
-    AM65_ACC,                   /* accumulator */
-    AM65_IMM,                   /* immidiate */
-    AM65_ZP,                    /* zeropage */
-    AM65_ZPX,                   /* zeropage,X */
-    AM65_ZPY,                   /* zeropage,Y */
-    AM65_ABS,                   /* absolute */
-    AM65_ABSX,                  /* absolute,X */
-    AM65_ABSY,                  /* absolute,Y */
-    AM65_ZPX_IND,               /* (zeropage,x) */
-    AM65_ZP_INDY,               /* (zeropage),y */
-    AM65_ZP_IND,                /* (zeropage) */
-    AM65_BRA                    /* branch */
-} am_t;
-
-/* Branch conditions */
-typedef enum {
-    BC_CC,
-    BC_CS,
-    BC_EQ,
-    BC_MI,
-    BC_NE,
-    BC_PL,
-    BC_VC,
-    BC_VS
-} bc_t;
-
-/* Opcode info */
-#define OF_NONE         0x0000U /* No additional information */
-#define OF_UBRA         0x0001U /* Unconditional branch */
-#define OF_CBRA         0x0002U /* Conditional branch */
-#define OF_ZBRA         0x0004U /* Branch on zero flag condition */
-#define OF_FBRA         0x0008U /* Branch on cond set by a load */
-#define OF_LBRA         0x0010U /* Jump/branch is long */
-#define OF_RET          0x0020U /* Return from function */
-#define OF_LOAD         0x0040U /* Register load */
-#define OF_STORE        0x0080U /* Register store */
-#define OF_XFR          0x0100U /* Transfer instruction */
-#define OF_CALL         0x0200U /* A subroutine call */
-#define OF_REG_INCDEC   0x0400U /* A register increment or decrement */
-#define OF_SETF         0x0800U /* Insn will set all load flags (not carry) */
-#define OF_CMP          0x1000U /* A compare A/X/Y instruction */
-#define OF_NOIMP        0x2000U /* Implicit addressing mode is actually A */
-
-/* Combined infos */
-#define OF_BRA  (OF_UBRA | OF_CBRA)     /* Operation is a jump/branch */
-#define OF_DEAD (OF_UBRA | OF_RET)      /* Dead end - no exec behind this point */
-
-/* Opcode description */
-typedef struct {
-    opc_t           OPC;                /* Opcode */
-    char            Mnemo[9];           /* Mnemonic */
-    unsigned char   Size;               /* Size, 0 = check addressing mode */
-    unsigned short  Use;                /* Registers used by this insn */
-    unsigned short  Chg;                /* Registers changed by this insn */
-    unsigned short  Info;               /* Additional information */
-} OPCDesc;
-
-/* Opcode description table */
-extern const OPCDesc OPCTable[OP65_COUNT];
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-const OPCDesc* FindOP65 (const char* OPC);
-/* Find the given opcode and return the opcode description. If the opcode was
-** not found, NULL is returned.
-*/
-
-unsigned GetInsnSize (opc_t OPC, am_t AM);
-/* Return the size of the given instruction */
-
-#if defined(HAVE_INLINE)
-INLINE const OPCDesc* GetOPCDesc (opc_t OPC)
-/* Get an opcode description */
-{
-    /* Return the description */
-    return &OPCTable [OPC];
-}
-#else
-#  define GetOPCDesc(OPC)       (&OPCTable [(OPC)])
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned GetOPCInfo (opc_t OPC)
-/* Get opcode information */
-{
-    /* Return the info */
-    return OPCTable[OPC].Info;
-}
-#else
-#  define GetOPCInfo(OPC)       (OPCTable[(OPC)].Info)
-#endif
-
-unsigned char GetAMUseInfo (am_t AM);
-/* Get usage info for the given addressing mode (addressing modes that use
-** index registers return REG_r info for these registers).
-*/
-
-opc_t GetInverseBranch (opc_t OPC);
-/* Return a branch that reverse the condition of the branch given in OPC */
-
-opc_t MakeShortBranch (opc_t OPC);
-/* Return the short version of the given branch. If the branch is already
-** a short branch, return the opcode unchanged.
-*/
-
-opc_t MakeLongBranch (opc_t OPC);
-/* Return the long version of the given branch. If the branch is already
-** a long branch, return the opcode unchanged.
-*/
-
-bc_t GetBranchCond (opc_t OPC);
-/* Get the condition for the conditional branch in OPC */
-
-bc_t GetInverseCond (bc_t BC);
-/* Return the inverse condition of the given one */
-
-
-
-/* End of opcodes.h */
-
-#endif
diff --git a/src/cc65/output.c b/src/cc65/output.c
deleted file mode 100644 (file)
index e0b06ef..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 output.c                                  */
-/*                                                                           */
-/*                           Output file handling                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2009-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "check.h"
-#include "fname.h"
-#include "print.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "error.h"
-#include "global.h"
-#include "output.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Name of the output file. Dynamically allocated and read only. */
-const char* OutputFilename = 0;
-
-/* Output file handle */
-FILE* OutputFile = 0;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void SetOutputName (const char* Name)
-/* Sets the name of the output file. */
-{
-    OutputFilename = Name;
-}
-
-
-
-void MakeDefaultOutputName (const char* InputFilename)
-/* If the name of the output file is empty or NULL, the name of the output
-** file is derived from the input file by adjusting the file name extension.
-*/
-{
-    if (OutputFilename == 0 || *OutputFilename == '\0') {
-        /* We don't have an output file for now */
-        const char* Ext = PreprocessOnly? ".i" : ".s";
-        OutputFilename = MakeFilename (InputFilename, Ext);
-    }
-}
-
-
-
-void OpenOutputFile ()
-/* Open the output file. Will call Fatal() in case of failures. */
-{
-    /* Output file must not be open and we must have a name*/
-    PRECONDITION (OutputFile == 0 && OutputFilename != 0);
-
-    /* Open the file */
-    OutputFile = fopen (OutputFilename, "w");
-    if (OutputFile == 0) {
-        Fatal ("Cannot open output file `%s': %s", OutputFilename, strerror (errno));
-    }
-    Print (stdout, 1, "Opened output file `%s'\n", OutputFilename);
-}
-
-
-
-void OpenDebugOutputFile (const char* Name)
-/* Open an output file for debugging purposes. Will call Fatal() in case of
-** failures.
-*/
-{
-    /* Output file must not be open and we must have a name*/
-    PRECONDITION (OutputFile == 0);
-
-    /* Open the file */
-    OutputFile = fopen (Name, "w");
-    if (OutputFile == 0) {
-        Fatal ("Cannot open debug output file `%s': %s", Name, strerror (errno));
-    }
-    Print (stdout, 1, "Opened debug output file `%s'\n", Name);
-}
-
-
-
-void CloseOutputFile ()
-/* Close the output file. Will call Fatal() in case of failures. */
-{
-    /* Output file must be open */
-    PRECONDITION (OutputFile != 0);
-
-    /* Close the file, check for errors */
-    if (fclose (OutputFile) != 0) {
-        remove (OutputFilename);
-        Fatal ("Cannot write to output file (disk full?)");
-    }
-    Print (stdout, 1, "Closed output file `%s'\n", OutputFilename);
-
-    OutputFile = 0;
-}
-
-
-
-int WriteOutput (const char* Format, ...)
-/* Write to the output file using printf like formatting. Returns the number
-** of chars written.
-*/
-{
-    va_list ap;
-    int CharCount;
-
-    /* Must have an output file */
-    PRECONDITION (OutputFile != 0);
-
-    /* Output formatted */
-    va_start (ap, Format);
-    CharCount = vfprintf (OutputFile, Format, ap);
-    va_end (ap);
-
-    /* Return the number of chars written */
-    return CharCount;
-}
diff --git a/src/cc65/output.h b/src/cc65/output.h
deleted file mode 100644 (file)
index a3d2cca..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 output.h                                  */
-/*                                                                           */
-/*                           Output file handling                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2009-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OUTPUT_H
-#define OUTPUT_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "attrib.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Name of the output file. Dynamically allocated and read only. */
-extern const char* OutputFilename;
-
-/* Output file handle. Use WriteOutput if possible. Read only. */
-extern FILE* OutputFile;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void SetOutputName (const char* Name);
-/* Sets the name of the output file. */
-
-void MakeDefaultOutputName (const char* InputFilename);
-/* If the name of the output file is empty or NULL, the name of the output
-** file is derived from the input file by adjusting the file name extension.
-*/
-
-void OpenOutputFile ();
-/* Open the output file. Will call Fatal() in case of failures. */
-
-void OpenDebugOutputFile (const char* Name);
-/* Open an output file for debugging purposes. Will call Fatal() in case of
-** failures.
-*/
-
-void CloseOutputFile ();
-/* Close the output file. Will call Fatal() in case of failures. */
-
-int WriteOutput (const char* Format, ...) attribute ((format (printf, 1, 2)));
-/* Write to the output file using printf like formatting. Returns the number
-** of chars written.
-*/
-
-
-/* End of output.h */
-
-#endif
diff --git a/src/cc65/pragma.c b/src/cc65/pragma.c
deleted file mode 100644 (file)
index f422749..0000000
+++ /dev/null
@@ -1,853 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 pragma.c                                  */
-/*                                                                           */
-/*                  Pragma handling for the cc65 C compiler                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-#include <string.h>
-
-/* common */
-#include "chartype.h"
-#include "segnames.h"
-#include "tgttrans.h"
-
-/* cc65 */
-#include "codegen.h"
-#include "error.h"
-#include "expr.h"
-#include "global.h"
-#include "litpool.h"
-#include "scanner.h"
-#include "scanstrbuf.h"
-#include "symtab.h"
-#include "pragma.h"
-
-
-
-/*****************************************************************************/
-/*                                   data                                    */
-/*****************************************************************************/
-
-
-
-/* Tokens for the #pragmas */
-typedef enum {
-    PRAGMA_ILLEGAL = -1,
-    PRAGMA_ALIGN,
-    PRAGMA_BSS_NAME,
-    PRAGMA_BSSSEG,                                      /* obsolete */
-    PRAGMA_CHARMAP,
-    PRAGMA_CHECK_STACK,
-    PRAGMA_CHECKSTACK,                                  /* obsolete */
-    PRAGMA_CODE_NAME,
-    PRAGMA_CODESEG,                                     /* obsolete */
-    PRAGMA_CODESIZE,
-    PRAGMA_DATA_NAME,
-    PRAGMA_DATASEG,                                     /* obsolete */
-    PRAGMA_LOCAL_STRINGS,
-    PRAGMA_OPTIMIZE,
-    PRAGMA_REGVARADDR,
-    PRAGMA_REGISTER_VARS,
-    PRAGMA_REGVARS,                                     /* obsolete */
-    PRAGMA_RODATA_NAME,
-    PRAGMA_RODATASEG,                                   /* obsolete */
-    PRAGMA_SIGNED_CHARS,
-    PRAGMA_SIGNEDCHARS,                                 /* obsolete */
-    PRAGMA_STATIC_LOCALS,
-    PRAGMA_STATICLOCALS,                                /* obsolete */
-    PRAGMA_WARN,
-    PRAGMA_WRITABLE_STRINGS,
-    PRAGMA_ZPSYM,
-    PRAGMA_COUNT
-} pragma_t;
-
-/* Pragma table */
-static const struct Pragma {
-    const char* Key;            /* Keyword */
-    pragma_t    Tok;            /* Token */
-} Pragmas[PRAGMA_COUNT] = {
-    { "align",                  PRAGMA_ALIGN            },
-    { "bss-name",               PRAGMA_BSS_NAME         },
-    { "bssseg",                 PRAGMA_BSSSEG           },      /* obsolete */
-    { "charmap",                PRAGMA_CHARMAP          },
-    { "check-stack",            PRAGMA_CHECK_STACK      },
-    { "checkstack",             PRAGMA_CHECKSTACK       },      /* obsolete */
-    { "code-name",              PRAGMA_CODE_NAME        },
-    { "codeseg",                PRAGMA_CODESEG          },      /* obsolete */
-    { "codesize",               PRAGMA_CODESIZE         },
-    { "data-name",              PRAGMA_DATA_NAME        },
-    { "dataseg",                PRAGMA_DATASEG          },      /* obsolete */
-    { "local-strings",          PRAGMA_LOCAL_STRINGS    },
-    { "optimize",               PRAGMA_OPTIMIZE         },
-    { "register-vars",          PRAGMA_REGISTER_VARS    },
-    { "regvaraddr",             PRAGMA_REGVARADDR       },
-    { "regvars",                PRAGMA_REGVARS          },      /* obsolete */
-    { "rodata-name",            PRAGMA_RODATA_NAME      },
-    { "rodataseg",              PRAGMA_RODATASEG        },      /* obsolete */
-    { "signed-chars",           PRAGMA_SIGNED_CHARS     },
-    { "signedchars",            PRAGMA_SIGNEDCHARS      },      /* obsolete */
-    { "static-locals",          PRAGMA_STATIC_LOCALS    },
-    { "staticlocals",           PRAGMA_STATICLOCALS     },      /* obsolete */
-    { "warn",                   PRAGMA_WARN             },
-    { "writable-strings",       PRAGMA_WRITABLE_STRINGS },
-    { "zpsym",                  PRAGMA_ZPSYM            },
-};
-
-/* Result of ParsePushPop */
-typedef enum {
-    PP_NONE,
-    PP_POP,
-    PP_PUSH,
-    PP_ERROR,
-} PushPopResult;
-
-
-
-/*****************************************************************************/
-/*                             Helper functions                              */
-/*****************************************************************************/
-
-
-
-static void PragmaErrorSkip (void)
-/* Called in case of an error, skips tokens until the closing paren or a
-** semicolon is reached.
-*/
-{
-    static const token_t TokenList[] = { TOK_RPAREN, TOK_SEMI };
-    SkipTokens (TokenList, sizeof(TokenList) / sizeof(TokenList[0]));
-}
-
-
-
-static int CmpKey (const void* Key, const void* Elem)
-/* Compare function for bsearch */
-{
-    return strcmp ((const char*) Key, ((const struct Pragma*) Elem)->Key);
-}
-
-
-
-static pragma_t FindPragma (const StrBuf* Key)
-/* Find a pragma and return the token. Return PRAGMA_ILLEGAL if the keyword is
-** not a valid pragma.
-*/
-{
-    struct Pragma* P;
-    P = bsearch (SB_GetConstBuf (Key), Pragmas, PRAGMA_COUNT, sizeof (Pragmas[0]), CmpKey);
-    return P? P->Tok : PRAGMA_ILLEGAL;
-}
-
-
-
-static int GetComma (StrBuf* B)
-/* Expects and skips a comma in B. Prints an error and returns zero if no
-** comma is found. Return a value <> 0 otherwise.
-*/
-{
-    SB_SkipWhite (B);
-    if (SB_Get (B) != ',') {
-        Error ("Comma expected");
-        return 0;
-    }
-    SB_SkipWhite (B);
-    return 1;
-}
-
-
-
-static int GetString (StrBuf* B, StrBuf* S)
-/* Expects and skips a string in B. Prints an error and returns zero if no
-** string is found. Returns a value <> 0 otherwise.
-*/
-{
-    if (!SB_GetString (B, S)) {
-        Error ("String literal expected");
-        return 0;
-    }
-    return 1;
-}
-
-
-
-static int GetNumber (StrBuf* B, long* Val)
-/* Expects and skips a number in B. Prints an eror and returns zero if no
-** number is found. Returns a value <> 0 otherwise.
-*/
-{
-    if (!SB_GetNumber (B, Val)) {
-        Error ("Constant integer expected");
-        return 0;
-    }
-    return 1;
-}
-
-
-
-static IntStack* GetWarning (StrBuf* B)
-/* Get a warning name from the string buffer. Returns a pointer to the intstack
-** that holds the state of the warning, and NULL in case of errors. The
-** function will output error messages in case of problems.
-*/
-{
-    IntStack* S = 0;
-    StrBuf W = AUTO_STRBUF_INITIALIZER;
-
-    /* The warning name is a symbol but the '-' char is allowed within */
-    if (SB_GetSym (B, &W, "-")) {
-
-        /* Map the warning name to an IntStack that contains its state */
-        S = FindWarning (SB_GetConstBuf (&W));
-
-        /* Handle errors */
-        if (S == 0) {
-            Error ("Pragma expects a warning name as first argument");
-        }
-    }
-
-    /* Deallocate the string */
-    SB_Done (&W);
-
-    /* Done */
-    return S;
-}
-
-
-
-static int HasStr (StrBuf* B, const char* E)
-/* Checks if E follows in B. If so, skips it and returns true */
-{
-    unsigned Len = strlen (E);
-    if (SB_GetLen (B) - SB_GetIndex (B) >= Len) {
-        if (strncmp (SB_GetConstBuf (B) + SB_GetIndex (B), E, Len) == 0) {
-            /* Found */
-            SB_SkipMultiple (B, Len);
-            return 1;
-        }
-    }
-    return 0;
-}
-
-
-
-static PushPopResult ParsePushPop (StrBuf* B)
-/* Check for and parse the "push" and "pop" keywords. In case of "push", a
-** following comma is expected and skipped.
-*/
-{
-    StrBuf Ident      = AUTO_STRBUF_INITIALIZER;
-    PushPopResult Res = PP_NONE;
-
-    /* Remember the current string index, so we can go back in case of errors */
-    unsigned Index = SB_GetIndex (B);
-
-    /* Try to read an identifier */
-    if (SB_GetSym (B, &Ident, 0)) {
-
-        /* Check if we have a first argument named "pop" */
-        if (SB_CompareStr (&Ident, "pop") == 0) {
-
-            Res = PP_POP;
-
-        /* Check if we have a first argument named "push" */
-        } else if (SB_CompareStr (&Ident, "push") == 0) {
-
-            Res = PP_PUSH;
-
-            /* Skip the following comma */
-            if (!GetComma (B)) {
-                /* Error already flagged by GetComma */
-                Res = PP_ERROR;
-            }
-
-        } else {
-
-            /* Unknown keyword, roll back */
-            SB_SetIndex (B, Index);
-        }
-    }
-
-    /* Free the string buffer and return the result */
-    SB_Done (&Ident);
-    return Res;
-}
-
-
-
-static void PopInt (IntStack* S)
-/* Pops an integer from an IntStack. Prints an error if the stack is empty */
-{
-    if (IS_GetCount (S) < 2) {
-        Error ("Cannot pop, stack is empty");
-    } else {
-        IS_Drop (S);
-    }
-}
-
-
-
-static void PushInt (IntStack* S, long Val)
-/* Pushes an integer onto an IntStack. Prints an error if the stack is full */
-{
-    if (IS_IsFull (S)) {
-        Error ("Cannot push: stack overflow");
-    } else {
-        IS_Push (S, Val);
-    }
-}
-
-
-
-static int BoolKeyword (StrBuf* Ident)
-/* Check if the identifier in Ident is a keyword for a boolean value. Currently
-** accepted are true/false/on/off.
-*/
-{
-    if (SB_CompareStr (Ident, "true") == 0) {
-        return 1;
-    }
-    if (SB_CompareStr (Ident, "on") == 0) {
-        return 1;
-    }
-    if (SB_CompareStr (Ident, "false") == 0) {
-        return 0;
-    }
-    if (SB_CompareStr (Ident, "off") == 0) {
-        return 0;
-    }
-
-    /* Error */
-    Error ("Pragma argument must be one of `on', `off', `true' or `false'");
-    return 0;
-}
-
-
-
-/*****************************************************************************/
-/*                         Pragma handling functions                         */
-/*****************************************************************************/
-
-
-
-static void StringPragma (StrBuf* B, void (*Func) (const char*))
-/* Handle a pragma that expects a string parameter */
-{
-    StrBuf S = AUTO_STRBUF_INITIALIZER;
-
-    /* We expect a string here */
-    if (GetString (B, &S)) {
-        /* Call the given function with the string argument */
-        Func (SB_GetConstBuf (&S));
-    }
-
-    /* Call the string buf destructor */
-    SB_Done (&S);
-}
-
-
-
-static void SegNamePragma (StrBuf* B, segment_t Seg)
-/* Handle a pragma that expects a segment name parameter */
-{
-    StrBuf      S = AUTO_STRBUF_INITIALIZER;
-    const char* Name;
-
-    /* Check for the "push" or "pop" keywords */
-    int Push = 0;
-    switch (ParsePushPop (B)) {
-
-        case PP_NONE:
-            break;
-
-        case PP_PUSH:
-            Push = 1;
-            break;
-
-        case PP_POP:
-            /* Pop the old value and output it */
-            PopSegName (Seg);
-            g_segname (Seg);
-
-            /* Done */
-            goto ExitPoint;
-
-        case PP_ERROR:
-            /* Bail out */
-            goto ExitPoint;
-
-        default:
-            Internal ("Invalid result from ParsePushPop");
-
-    }
-
-    /* A string argument must follow */
-    if (!GetString (B, &S)) {
-        goto ExitPoint;
-    }
-
-    /* Get the string */
-    Name = SB_GetConstBuf (&S);
-
-    /* Check if the name is valid */
-    if (ValidSegName (Name)) {
-
-        /* Set the new name */
-        if (Push) {
-            PushSegName (Seg, Name);
-        } else {
-            SetSegName (Seg, Name);
-        }
-        g_segname (Seg);
-
-    } else {
-
-        /* Segment name is invalid */
-        Error ("Illegal segment name: `%s'", Name);
-
-    }
-
-ExitPoint:
-    /* Call the string buf destructor */
-    SB_Done (&S);
-}
-
-
-
-static void CharMapPragma (StrBuf* B)
-/* Change the character map */
-{
-    long Index, C;
-
-    /* Read the character index */
-    if (!GetNumber (B, &Index)) {
-        return;
-    }
-    if (Index < 1 || Index > 255) {
-        if (Index == 0) {
-            /* For groepaz */
-            Error ("Remapping 0 is not allowed");
-        } else {
-            Error ("Character index out of range");
-        }
-        return;
-    }
-
-    /* Comma follows */
-    if (!GetComma (B)) {
-        return;
-    }
-
-    /* Read the character code */
-    if (!GetNumber (B, &C)) {
-        return;
-    }
-    if (C < 1 || C > 255) {
-        if (C == 0) {
-            /* For groepaz */
-            Error ("Remapping 0 is not allowed");
-        } else {
-            Error ("Character code out of range");
-        }
-        return;
-    }
-
-    /* Remap the character */
-    TgtTranslateSet ((unsigned) Index, (unsigned char) C);
-}
-
-
-
-static void WarnPragma (StrBuf* B)
-/* Enable/disable warnings */
-{
-    long   Val;
-    int    Push;
-
-    /* A warning name must follow */
-    IntStack* S = GetWarning (B);
-    if (S == 0) {
-        return;
-    }
-
-    /* Comma follows */
-    if (!GetComma (B)) {
-        return;
-    }
-
-    /* Check for the "push" or "pop" keywords */
-    switch (ParsePushPop (B)) {
-
-        case PP_NONE:
-            Push = 0;
-            break;
-
-        case PP_PUSH:
-            Push = 1;
-            break;
-
-        case PP_POP:
-            /* Pop the old value and bail out */
-            PopInt (S);
-            return;
-
-        case PP_ERROR:
-            /* Bail out */
-            return;
-
-        default:
-            Internal ("Invalid result from ParsePushPop");
-    }
-
-    /* Boolean argument follows */
-    if (HasStr (B, "true") || HasStr (B, "on")) {
-        Val = 1;
-    } else if (HasStr (B, "false") || HasStr (B, "off")) {
-        Val = 0;
-    } else if (!SB_GetNumber (B, &Val)) {
-        Error ("Invalid pragma argument");
-        return;
-    }
-
-    /* Set/push the new value */
-    if (Push) {
-        PushInt (S, Val);
-    } else {
-        IS_Set (S, Val);
-    }
-}
-
-
-
-static void FlagPragma (StrBuf* B, IntStack* Stack)
-/* Handle a pragma that expects a boolean paramater */
-{
-    StrBuf Ident = AUTO_STRBUF_INITIALIZER;
-    long   Val;
-    int    Push;
-
-
-    /* Try to read an identifier */
-    int IsIdent = SB_GetSym (B, &Ident, 0);
-
-    /* Check if we have a first argument named "pop" */
-    if (IsIdent && SB_CompareStr (&Ident, "pop") == 0) {
-        PopInt (Stack);
-        /* No other arguments allowed */
-        return;
-    }
-
-    /* Check if we have a first argument named "push" */
-    if (IsIdent && SB_CompareStr (&Ident, "push") == 0) {
-        Push = 1;
-        if (!GetComma (B)) {
-            goto ExitPoint;
-        }
-        IsIdent = SB_GetSym (B, &Ident, 0);
-    } else {
-        Push = 0;
-    }
-
-    /* Boolean argument follows */
-    if (IsIdent) {
-        Val = BoolKeyword (&Ident);
-    } else if (!GetNumber (B, &Val)) {
-        goto ExitPoint;
-    }
-
-    /* Set/push the new value */
-    if (Push) {
-        PushInt (Stack, Val);
-    } else {
-        IS_Set (Stack, Val);
-    }
-
-ExitPoint:
-    /* Free the identifier */
-    SB_Done (&Ident);
-}
-
-
-
-static void IntPragma (StrBuf* B, IntStack* Stack, long Low, long High)
-/* Handle a pragma that expects an int paramater */
-{
-    long  Val;
-    int   Push;
-
-    /* Check for the "push" or "pop" keywords */
-    switch (ParsePushPop (B)) {
-
-        case PP_NONE:
-            Push = 0;
-            break;
-
-        case PP_PUSH:
-            Push = 1;
-            break;
-
-        case PP_POP:
-            /* Pop the old value and bail out */
-            PopInt (Stack);
-            return;
-
-        case PP_ERROR:
-            /* Bail out */
-            return;
-
-        default:
-            Internal ("Invalid result from ParsePushPop");
-
-    }
-
-    /* Integer argument follows */
-    if (!GetNumber (B, &Val)) {
-        return;
-    }
-
-    /* Check the argument */
-    if (Val < Low || Val > High) {
-        Error ("Pragma argument out of bounds (%ld-%ld)", Low, High);
-        return;
-    }
-
-    /* Set/push the new value */
-    if (Push) {
-        PushInt (Stack, Val);
-    } else {
-        IS_Set (Stack, Val);
-    }
-}
-
-
-
-static void ParsePragma (void)
-/* Parse the contents of the _Pragma statement */
-{
-    pragma_t Pragma;
-    StrBuf   Ident = AUTO_STRBUF_INITIALIZER;
-
-    /* Create a string buffer from the string literal */
-    StrBuf B = AUTO_STRBUF_INITIALIZER;
-    SB_Append (&B, GetLiteralStrBuf (CurTok.SVal));
-
-    /* Skip the string token */
-    NextToken ();
-
-    /* Get the pragma name from the string */
-    SB_SkipWhite (&B);
-    if (!SB_GetSym (&B, &Ident, "-")) {
-        Error ("Invalid pragma");
-        goto ExitPoint;
-    }
-
-    /* Search for the name */
-    Pragma = FindPragma (&Ident);
-
-    /* Do we know this pragma? */
-    if (Pragma == PRAGMA_ILLEGAL) {
-        /* According to the ANSI standard, we're not allowed to generate errors
-        ** for unknown pragmas, but warn about them if enabled (the default).
-        */
-        if (IS_Get (&WarnUnknownPragma)) {
-            Warning ("Unknown pragma `%s'", SB_GetConstBuf (&Ident));
-        }
-        goto ExitPoint;
-    }
-
-    /* Check for an open paren */
-    SB_SkipWhite (&B);
-    if (SB_Get (&B) != '(') {
-        Error ("'(' expected");
-        goto ExitPoint;
-    }
-
-    /* Skip white space before the argument */
-    SB_SkipWhite (&B);
-
-    /* Switch for the different pragmas */
-    switch (Pragma) {
-
-        case PRAGMA_ALIGN:
-            IntPragma (&B, &DataAlignment, 1, 4096);
-            break;
-
-        case PRAGMA_BSSSEG:
-            Warning ("#pragma bssseg is obsolete, please use #pragma bss-name instead");
-            /* FALLTHROUGH */
-        case PRAGMA_BSS_NAME:
-            SegNamePragma (&B, SEG_BSS);
-            break;
-
-        case PRAGMA_CHARMAP:
-            CharMapPragma (&B);
-            break;
-
-        case PRAGMA_CHECKSTACK:
-            Warning ("#pragma checkstack is obsolete, please use #pragma check-stack instead");
-            /* FALLTHROUGH */
-        case PRAGMA_CHECK_STACK:
-            FlagPragma (&B, &CheckStack);
-            break;
-
-        case PRAGMA_CODESEG:
-            Warning ("#pragma codeseg is obsolete, please use #pragma code-name instead");
-            /* FALLTHROUGH */
-        case PRAGMA_CODE_NAME:
-            SegNamePragma (&B, SEG_CODE);
-            break;
-
-        case PRAGMA_CODESIZE:
-            IntPragma (&B, &CodeSizeFactor, 10, 1000);
-            break;
-
-        case PRAGMA_DATASEG:
-            Warning ("#pragma dataseg is obsolete, please use #pragma data-name instead");
-            /* FALLTHROUGH */
-        case PRAGMA_DATA_NAME:
-            SegNamePragma (&B, SEG_DATA);
-            break;
-
-        case PRAGMA_LOCAL_STRINGS:
-            FlagPragma (&B, &LocalStrings);
-            break;
-
-        case PRAGMA_OPTIMIZE:
-            FlagPragma (&B, &Optimize);
-            break;
-
-        case PRAGMA_REGVARADDR:
-            FlagPragma (&B, &AllowRegVarAddr);
-            break;
-
-        case PRAGMA_REGVARS:
-            Warning ("#pragma regvars is obsolete, please use #pragma register-vars instead");
-            /* FALLTHROUGH */
-        case PRAGMA_REGISTER_VARS:
-            FlagPragma (&B, &EnableRegVars);
-            break;
-
-        case PRAGMA_RODATASEG:
-            Warning ("#pragma rodataseg is obsolete, please use #pragma rodata-name instead");
-            /* FALLTHROUGH */
-        case PRAGMA_RODATA_NAME:
-            SegNamePragma (&B, SEG_RODATA);
-            break;
-
-        case PRAGMA_SIGNEDCHARS:
-            Warning ("#pragma signedchars is obsolete, please use #pragma signed-chars instead");
-            /* FALLTHROUGH */
-        case PRAGMA_SIGNED_CHARS:
-            FlagPragma (&B, &SignedChars);
-            break;
-
-        case PRAGMA_STATICLOCALS:
-            Warning ("#pragma staticlocals is obsolete, please use #pragma static-locals instead");
-            /* FALLTHROUGH */
-        case PRAGMA_STATIC_LOCALS:
-            FlagPragma (&B, &StaticLocals);
-            break;
-
-        case PRAGMA_WARN:
-            WarnPragma (&B);
-            break;
-
-        case PRAGMA_WRITABLE_STRINGS:
-            FlagPragma (&B, &WritableStrings);
-            break;
-
-        case PRAGMA_ZPSYM:
-            StringPragma (&B, MakeZPSym);
-            break;
-
-        default:
-            Internal ("Invalid pragma");
-    }
-
-    /* Closing paren expected */
-    SB_SkipWhite (&B);
-    if (SB_Get (&B) != ')') {
-        Error ("')' expected");
-        goto ExitPoint;
-    }
-    SB_SkipWhite (&B);
-
-    /* Allow an optional semicolon to be compatible with the old syntax */
-    if (SB_Peek (&B) == ';') {
-        SB_Skip (&B);
-        SB_SkipWhite (&B);
-    }
-
-    /* Make sure nothing follows */
-    if (SB_Peek (&B) != '\0') {
-        Error ("Unexpected input following pragma directive");
-    }
-
-ExitPoint:
-    /* Release the string buffers */
-    SB_Done (&B);
-    SB_Done (&Ident);
-}
-
-
-
-void DoPragma (void)
-/* Handle pragmas. These come always in form of the new C99 _Pragma() operator. */
-{
-    /* Skip the token itself */
-    NextToken ();
-
-    /* We expect an opening paren */
-    if (!ConsumeLParen ()) {
-        return;
-    }
-
-    /* String literal */
-    if (CurTok.Tok != TOK_SCONST) {
-
-        /* Print a diagnostic */
-        Error ("String literal expected");
-
-        /* Try some smart error recovery: Skip tokens until we reach the
-        ** enclosing paren, or a semicolon.
-        */
-        PragmaErrorSkip ();
-
-    } else {
-
-        /* Parse the _Pragma statement */
-        ParsePragma ();
-    }
-
-    /* Closing paren needed */
-    ConsumeRParen ();
-}
diff --git a/src/cc65/pragma.h b/src/cc65/pragma.h
deleted file mode 100644 (file)
index f12dbaa..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 pragma.h                                  */
-/*                                                                           */
-/*                  Pragma handling for the cc65 C compiler                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2002 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef PRAGMA_H
-#define PRAGMA_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void DoPragma (void);
-/* Handle pragmas. These come always in form of the new C99 _Pragma() operator. */
-
-
-
-/* End of pragma.h */
-
-#endif
diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c
deleted file mode 100644 (file)
index 99ce6ac..0000000
+++ /dev/null
@@ -1,1404 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  preproc.c                                */
-/*                                                                           */
-/*                              cc65 preprocessor                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2010, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-
-/* common */
-#include "chartype.h"
-#include "check.h"
-#include "inline.h"
-#include "print.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "codegen.h"
-#include "error.h"
-#include "expr.h"
-#include "global.h"
-#include "ident.h"
-#include "incpath.h"
-#include "input.h"
-#include "lineinfo.h"
-#include "macrotab.h"
-#include "preproc.h"
-#include "scanner.h"
-#include "standard.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Set when the preprocessor calls expr() recursively */
-unsigned char Preprocessing = 0;
-
-/* Management data for #if */
-#define MAX_IFS         64
-#define IFCOND_NONE     0x00U
-#define IFCOND_SKIP     0x01U
-#define IFCOND_ELSE     0x02U
-#define IFCOND_NEEDTERM 0x04U
-static unsigned char IfStack[MAX_IFS];
-static int           IfIndex = -1;
-
-/* Buffer for macro expansion */
-static StrBuf* MLine;
-
-/* Structure used when expanding macros */
-typedef struct MacroExp MacroExp;
-struct MacroExp {
-    Collection  ActualArgs;     /* Actual arguments */
-    StrBuf      Replacement;    /* Replacement with arguments substituted */
-    Macro*      M;              /* The macro we're handling */
-};
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-static unsigned Pass1 (StrBuf* Source, StrBuf* Target);
-/* Preprocessor pass 1. Remove whitespace. Handle old and new style comments
-** and the "defined" operator.
-*/
-
-static void MacroReplacement (StrBuf* Source, StrBuf* Target);
-/* Perform macro replacement. */
-
-
-
-/*****************************************************************************/
-/*                   Low level preprocessor token handling                   */
-/*****************************************************************************/
-
-
-
-/* Types of preprocessor tokens */
-typedef enum {
-    PP_ILLEGAL  = -1,
-    PP_DEFINE,
-    PP_ELIF,
-    PP_ELSE,
-    PP_ENDIF,
-    PP_ERROR,
-    PP_IF,
-    PP_IFDEF,
-    PP_IFNDEF,
-    PP_INCLUDE,
-    PP_LINE,
-    PP_PRAGMA,
-    PP_UNDEF,
-    PP_WARNING,
-} pptoken_t;
-
-
-
-/* Preprocessor keyword to token mapping table */
-static const struct PPToken {
-    const char* Key;            /* Keyword */
-    pptoken_t   Tok;            /* Token */
-} PPTokens[] = {
-    {   "define",       PP_DEFINE       },
-    {   "elif",         PP_ELIF         },
-    {   "else",         PP_ELSE         },
-    {   "endif",        PP_ENDIF        },
-    {   "error",        PP_ERROR        },
-    {   "if",           PP_IF           },
-    {   "ifdef",        PP_IFDEF        },
-    {   "ifndef",       PP_IFNDEF       },
-    {   "include",      PP_INCLUDE      },
-    {   "line",         PP_LINE         },
-    {   "pragma",       PP_PRAGMA       },
-    {   "undef",        PP_UNDEF        },
-    {   "warning",      PP_WARNING      },
-};
-
-/* Number of preprocessor tokens */
-#define PPTOKEN_COUNT   (sizeof(PPTokens) / sizeof(PPTokens[0]))
-
-
-
-static int CmpToken (const void* Key, const void* Elem)
-/* Compare function for bsearch */
-{
-    return strcmp ((const char*) Key, ((const struct PPToken*) Elem)->Key);
-}
-
-
-
-static pptoken_t FindPPToken (const char* Ident)
-/* Find a preprocessor token and return it. Return PP_ILLEGAL if the identifier
-** is not a valid preprocessor token.
-*/
-{
-    struct PPToken* P;
-    P = bsearch (Ident, PPTokens, PPTOKEN_COUNT, sizeof (PPTokens[0]), CmpToken);
-    return P? P->Tok : PP_ILLEGAL;
-}
-
-
-
-/*****************************************************************************/
-/*                              struct MacroExp                              */
-/*****************************************************************************/
-
-
-
-static MacroExp* InitMacroExp (MacroExp* E, Macro* M)
-/* Initialize a MacroExp structure */
-{
-    InitCollection (&E->ActualArgs);
-    SB_Init (&E->Replacement);
-    E->M = M;
-    return E;
-}
-
-
-
-static void DoneMacroExp (MacroExp* E)
-/* Cleanup after use of a MacroExp structure */
-{
-    unsigned I;
-
-    /* Delete the list with actual arguments */
-    for (I = 0; I < CollCount (&E->ActualArgs); ++I) {
-        FreeStrBuf (CollAtUnchecked (&E->ActualArgs, I));
-    }
-    DoneCollection (&E->ActualArgs);
-    SB_Done (&E->Replacement);
-}
-
-
-
-static void ME_AppendActual (MacroExp* E, StrBuf* Arg)
-/* Add a copy of Arg to the list of actual macro arguments.
-** NOTE: This function will clear Arg!
-*/
-{
-    /* Create a new string buffer */
-    StrBuf* A = NewStrBuf ();
-
-    /* Move the contents of Arg to A */
-    SB_Move (A, Arg);
-
-    /* Add A to the actual arguments */
-    CollAppend (&E->ActualArgs, A);
-}
-
-
-
-static StrBuf* ME_GetActual (MacroExp* E, unsigned Index)
-/* Return an actual macro argument with the given index */
-{
-    return CollAt (&E->ActualArgs, Index);
-}
-
-
-
-static int ME_ArgIsVariadic (const MacroExp* E)
-/* Return true if the next actual argument we will add is a variadic one */
-{
-    return (E->M->Variadic &&
-            E->M->ArgCount == (int) CollCount (&E->ActualArgs) + 1);
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void Stringize (StrBuf* Source, StrBuf* Target)
-/* Stringize the given string: Add double quotes at start and end and preceed
-** each occurance of " and \ by a backslash.
-*/
-{
-    char C;
-
-    /* Add a starting quote */
-    SB_AppendChar (Target, '\"');
-
-    /* Replace any characters inside the string may not be part of a string
-    ** unescaped.
-    */
-    while ((C = SB_Get (Source)) != '\0') {
-        switch (C) {
-            case '\"':
-            case '\\':
-                SB_AppendChar (Target, '\\');
-            /* FALLTHROUGH */
-            default:
-                SB_AppendChar (Target, C);
-                break;
-        }
-    }
-
-    /* Add the closing quote */
-    SB_AppendChar (Target, '\"');
-}
-
-
-
-static void OldStyleComment (void)
-/* Remove an old style C comment from line. */
-{
-    /* Remember the current line number, so we can output better error
-    ** messages if the comment is not terminated in the current file.
-    */
-    unsigned StartingLine = GetCurrentLine();
-
-    /* Skip the start of comment chars */
-    NextChar ();
-    NextChar ();
-
-    /* Skip the comment */
-    while (CurC != '*' || NextC != '/') {
-        if (CurC == '\0') {
-            if (NextLine () == 0) {
-                PPError ("End-of-file reached in comment starting at line %u",
-                         StartingLine);
-                return;
-            }
-        } else {
-            if (CurC == '/' && NextC == '*') {
-                PPWarning ("`/*' found inside a comment");
-            }
-            NextChar ();
-        }
-    }
-
-    /* Skip the end of comment chars */
-    NextChar ();
-    NextChar ();
-}
-
-
-
-static void NewStyleComment (void)
-/* Remove a new style C comment from line. */
-{
-    /* Beware: Because line continuation chars are handled when reading
-    ** lines, we may only skip until the end of the source line, which
-    ** may not be the same as the end of the input line. The end of the
-    ** source line is denoted by a lf (\n) character.
-    */
-    do {
-        NextChar ();
-    } while (CurC != '\n' && CurC != '\0');
-    if (CurC == '\n') {
-        NextChar ();
-    }
-}
-
-
-
-static int SkipWhitespace (int SkipLines)
-/* Skip white space in the input stream. Do also skip newlines if SkipLines
-** is true. Return zero if nothing was skipped, otherwise return a
-** value != zero.
-*/
-{
-    int Skipped = 0;
-    while (1) {
-        if (IsSpace (CurC)) {
-            NextChar ();
-            Skipped = 1;
-        } else if (CurC == '\0' && SkipLines) {
-            /* End of line, read next */
-            if (NextLine () != 0) {
-                Skipped = 1;
-            } else {
-                /* End of input */
-                break;
-            }
-        } else {
-            /* No more white space */
-            break;
-        }
-    }
-    return Skipped;
-}
-
-
-
-static void CopyQuotedString (StrBuf* Target)
-/* Copy a single or double quoted string from the input to Target. */
-{
-    /* Remember the quote character, copy it to the target buffer and skip it */
-    char Quote = CurC;
-    SB_AppendChar (Target, CurC);
-    NextChar ();
-
-    /* Copy the characters inside the string */
-    while (CurC != '\0' && CurC != Quote) {
-        /* Keep an escaped char */
-        if (CurC == '\\') {
-            SB_AppendChar (Target, CurC);
-            NextChar ();
-        }
-        /* Copy the character */
-        SB_AppendChar (Target, CurC);
-        NextChar ();
-    }
-
-    /* If we had a terminating quote, copy it */
-    if (CurC != '\0') {
-        SB_AppendChar (Target, CurC);
-        NextChar ();
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                Macro stuff                                */
-/*****************************************************************************/
-
-
-
-static int MacName (char* Ident)
-/* Get a macro symbol name into Ident.  If we have an error, print a
-** diagnostic message and clear the line.
-*/
-{
-    if (IsSym (Ident) == 0) {
-        PPError ("Identifier expected");
-        ClearLine ();
-        return 0;
-    } else {
-        return 1;
-    }
-}
-
-
-
-static void ReadMacroArgs (MacroExp* E)
-/* Identify the arguments to a macro call */
-{
-    unsigned    Parens;         /* Number of open parenthesis */
-    StrBuf      Arg = STATIC_STRBUF_INITIALIZER;
-
-    /* Read the actual macro arguments */
-    Parens = 0;
-    while (1) {
-        if (CurC == '(') {
-
-            /* Nested parenthesis */
-            SB_AppendChar (&Arg, CurC);
-            NextChar ();
-            ++Parens;
-
-        } else if (IsQuote (CurC)) {
-
-            /* Quoted string - just copy */
-            CopyQuotedString (&Arg);
-
-        } else if (CurC == ',' || CurC == ')') {
-
-            if (Parens) {
-                /* Comma or right paren inside nested parenthesis */
-                if (CurC == ')') {
-                    --Parens;
-                }
-                SB_AppendChar (&Arg, CurC);
-                NextChar ();
-            } else if (CurC == ',' && ME_ArgIsVariadic (E)) {
-                /* It's a comma, but we're inside a variadic macro argument, so
-                ** just copy it and proceed.
-                */
-                SB_AppendChar (&Arg, CurC);
-                NextChar ();
-            } else {
-                /* End of actual argument. Remove whitespace from the end. */
-                while (IsSpace (SB_LookAtLast (&Arg))) {
-                    SB_Drop (&Arg, 1);
-                }
-
-                /* If this is not the single empty argument for a macro with
-                ** an empty argument list, remember it.
-                */
-                if (CurC != ')' || SB_NotEmpty (&Arg) || E->M->ArgCount > 0) {
-                    ME_AppendActual (E, &Arg);
-                }
-
-                /* Check for end of macro param list */
-                if (CurC == ')') {
-                    NextChar ();
-                    break;
-                }
-
-                /* Start the next param */
-                NextChar ();
-                SB_Clear (&Arg);
-            }
-        } else if (SkipWhitespace (1)) {
-            /* Squeeze runs of blanks within an arg */
-            if (SB_NotEmpty (&Arg)) {
-                SB_AppendChar (&Arg, ' ');
-            }
-        } else if (CurC == '/' && NextC == '*') {
-            if (SB_NotEmpty (&Arg)) {
-                SB_AppendChar (&Arg, ' ');
-            }
-            OldStyleComment ();
-        } else if (IS_Get (&Standard) >= STD_C99 && CurC == '/' && NextC == '/') {
-            if (SB_NotEmpty (&Arg)) {
-                SB_AppendChar (&Arg, ' ');
-            }
-            NewStyleComment ();
-        } else if (CurC == '\0') {
-            /* End of input inside macro argument list */
-            PPError ("Unterminated argument list invoking macro `%s'", E->M->Name);
-
-            ClearLine ();
-            break;
-        } else {
-            /* Just copy the character */
-            SB_AppendChar (&Arg, CurC);
-            NextChar ();
-        }
-    }
-
-    /* Deallocate string buf resources */
-    SB_Done (&Arg);
-}
-
-
-
-static void MacroArgSubst (MacroExp* E)
-/* Argument substitution according to ISO/IEC 9899:1999 (E), 6.10.3.1ff */
-{
-    ident       Ident;
-    int         ArgIdx;
-    StrBuf*     OldSource;
-    StrBuf*     Arg;
-    int         HaveSpace;
-
-
-    /* Remember the current input and switch to the macro replacement. */
-    int OldIndex = SB_GetIndex (&E->M->Replacement);
-    SB_Reset (&E->M->Replacement);
-    OldSource = InitLine (&E->M->Replacement);
-
-    /* Argument handling loop */
-    while (CurC != '\0') {
-
-        /* If we have an identifier, check if it's a macro */
-        if (IsSym (Ident)) {
-
-            /* Check if it's a macro argument */
-            if ((ArgIdx = FindMacroArg (E->M, Ident)) >= 0) {
-
-                /* A macro argument. Get the corresponding actual argument. */
-                Arg = ME_GetActual (E, ArgIdx);
-
-                /* Copy any following whitespace */
-                HaveSpace = SkipWhitespace (0);
-
-                /* If a ## operator follows, we have to insert the actual
-                ** argument as is, otherwise it must be macro replaced.
-                */
-                if (CurC == '#' && NextC == '#') {
-
-                    /* ### Add placemarker if necessary */
-                    SB_Append (&E->Replacement, Arg);
-
-                } else {
-
-                    /* Replace the formal argument by a macro replaced copy
-                    ** of the actual.
-                    */
-                    SB_Reset (Arg);
-                    MacroReplacement (Arg, &E->Replacement);
-
-                    /* If we skipped whitespace before, re-add it now */
-                    if (HaveSpace) {
-                        SB_AppendChar (&E->Replacement, ' ');
-                    }
-                }
-
-
-            } else {
-
-                /* An identifier, keep it */
-                SB_AppendStr (&E->Replacement, Ident);
-
-            }
-
-        } else if (CurC == '#' && NextC == '#') {
-
-            /* ## operator. */
-            NextChar ();
-            NextChar ();
-            SkipWhitespace (0);
-
-            /* Since we need to concatenate the token sequences, remove
-            ** any whitespace that was added to target, since it must come
-            ** from the input.
-            */
-            while (IsSpace (SB_LookAtLast (&E->Replacement))) {
-                SB_Drop (&E->Replacement, 1);
-            }
-
-            /* If the next token is an identifier which is a macro argument,
-            ** replace it, otherwise do nothing.
-            */
-            if (IsSym (Ident)) {
-
-                /* Check if it's a macro argument */
-                if ((ArgIdx = FindMacroArg (E->M, Ident)) >= 0) {
-
-                    /* Get the corresponding actual argument and add it. */
-                    SB_Append (&E->Replacement, ME_GetActual (E, ArgIdx));
-
-                } else {
-
-                    /* Just an ordinary identifier - add as is */
-                    SB_AppendStr (&E->Replacement, Ident);
-
-                }
-            }
-
-        } else if (CurC == '#' && E->M->ArgCount >= 0) {
-
-            /* A # operator within a macro expansion of a function like
-            ** macro. Read the following identifier and check if it's a
-            ** macro parameter.
-            */
-            NextChar ();
-            SkipWhitespace (0);
-            if (!IsSym (Ident) || (ArgIdx = FindMacroArg (E->M, Ident)) < 0) {
-                PPError ("`#' is not followed by a macro parameter");
-            } else {
-                /* Make a valid string from Replacement */
-                Arg = ME_GetActual (E, ArgIdx);
-                SB_Reset (Arg);
-                Stringize (Arg, &E->Replacement);
-            }
-
-        } else if (IsQuote (CurC)) {
-            CopyQuotedString (&E->Replacement);
-        } else {
-            SB_AppendChar (&E->Replacement, CurC);
-            NextChar ();
-        }
-    }
-
-#if 0
-    /* Remove whitespace from the end of the line */
-    while (IsSpace (SB_LookAtLast (&E->Replacement))) {
-        SB_Drop (&E->Replacement, 1);
-    }
-#endif
-
-    /* Switch back the input */
-    InitLine (OldSource);
-    SB_SetIndex (&E->M->Replacement, OldIndex);
-}
-
-
-
-static void MacroCall (StrBuf* Target, Macro* M)
-/* Process a function like macro */
-{
-    MacroExp    E;
-
-    /* Eat the left paren */
-    NextChar ();
-
-    /* Initialize our MacroExp structure */
-    InitMacroExp (&E, M);
-
-    /* Read the actual macro arguments */
-    ReadMacroArgs (&E);
-
-    /* Compare formal and actual argument count */
-    if (CollCount (&E.ActualArgs) != (unsigned) M->ArgCount) {
-
-        StrBuf Arg = STATIC_STRBUF_INITIALIZER;
-
-        /* Argument count mismatch */
-        PPError ("Macro argument count mismatch");
-
-        /* Be sure to make enough empty arguments available */
-        while (CollCount (&E.ActualArgs) < (unsigned) M->ArgCount) {
-            ME_AppendActual (&E, &Arg);
-        }
-    }
-
-    /* Replace macro arguments handling the # and ## operators */
-    MacroArgSubst (&E);
-
-    /* Do macro replacement on the macro that already has the parameters
-    ** substituted.
-    */
-    M->Expanding = 1;
-    MacroReplacement (&E.Replacement, Target);
-    M->Expanding = 0;
-
-    /* Free memory allocated for the macro expansion structure */
-    DoneMacroExp (&E);
-}
-
-
-
-static void ExpandMacro (StrBuf* Target, Macro* M)
-/* Expand a macro into Target */
-{
-#if 0
-    static unsigned V = 0;
-    printf ("Expanding %s(%u)\n", M->Name, ++V);
-#endif
-
-    /* Check if this is a function like macro */
-    if (M->ArgCount >= 0) {
-
-        int Whitespace = SkipWhitespace (1);
-        if (CurC != '(') {
-            /* Function like macro but no parameter list */
-            SB_AppendStr (Target, M->Name);
-            if (Whitespace) {
-                SB_AppendChar (Target, ' ');
-            }
-        } else {
-            /* Function like macro */
-            MacroCall (Target, M);
-        }
-
-    } else {
-
-        MacroExp E;
-        InitMacroExp (&E, M);
-
-        /* Handle # and ## operators for object like macros */
-        MacroArgSubst (&E);
-
-        /* Do macro replacement on the macro that already has the parameters
-        ** substituted.
-        */
-        M->Expanding = 1;
-        MacroReplacement (&E.Replacement, Target);
-        M->Expanding = 0;
-
-        /* Free memory allocated for the macro expansion structure */
-        DoneMacroExp (&E);
-
-    }
-#if 0
-    printf ("Done with %s(%u)\n", M->Name, V--);
-#endif
-}
-
-
-
-static void DefineMacro (void)
-/* Handle a macro definition. */
-{
-    ident       Ident;
-    Macro*      M;
-    Macro*      Existing;
-    int         C89;
-
-    /* Read the macro name */
-    SkipWhitespace (0);
-    if (!MacName (Ident)) {
-        return;
-    }
-
-    /* Remember if we're in C89 mode */
-    C89 = (IS_Get (&Standard) == STD_C89);
-
-    /* Get an existing macro definition with this name */
-    Existing = FindMacro (Ident);
-
-    /* Create a new macro definition */
-    M = NewMacro (Ident);
-
-    /* Check if this is a function like macro */
-    if (CurC == '(') {
-
-        /* Skip the left paren */
-        NextChar ();
-
-        /* Set the marker that this is a function like macro */
-        M->ArgCount = 0;
-
-        /* Read the formal parameter list */
-        while (1) {
-
-            /* Skip white space and check for end of parameter list */
-            SkipWhitespace (0);
-            if (CurC == ')') {
-                break;
-            }
-
-            /* The next token must be either an identifier, or - if not in
-            ** C89 mode - the ellipsis.
-            */
-            if (!C89 && CurC == '.') {
-                /* Ellipsis */
-                NextChar ();
-                if (CurC != '.' || NextC != '.') {
-                    PPError ("`...' expected");
-                    ClearLine ();
-                    return;
-                }
-                NextChar ();
-                NextChar ();
-
-                /* Remember that the macro is variadic and use __VA_ARGS__ as
-                ** the argument name.
-                */
-                AddMacroArg (M, "__VA_ARGS__");
-                M->Variadic = 1;
-
-            } else {
-                /* Must be macro argument name */
-                if (MacName (Ident) == 0) {
-                    return;
-                }
-
-                /* __VA_ARGS__ is only allowed in C89 mode */
-                if (!C89 && strcmp (Ident, "__VA_ARGS__") == 0) {
-                    PPWarning ("`__VA_ARGS__' can only appear in the expansion "
-                               "of a C99 variadic macro");
-                }
-
-                /* Add the macro argument */
-                AddMacroArg (M, Ident);
-            }
-
-            /* If we had an ellipsis, or the next char is not a comma, we've
-            ** reached the end of the macro argument list.
-            */
-            SkipWhitespace (0);
-            if (M->Variadic || CurC != ',') {
-                break;
-            }
-            NextChar ();
-        }
-
-        /* Check for a right paren and eat it if we find one */
-        if (CurC != ')') {
-            PPError ("`)' expected");
-            ClearLine ();
-            return;
-        }
-        NextChar ();
-    }
-
-    /* Skip whitespace before the macro replacement */
-    SkipWhitespace (0);
-
-    /* Insert the macro into the macro table and allocate the ActualArgs array */
-    InsertMacro (M);
-
-    /* Remove whitespace and comments from the line, store the preprocessed
-    ** line into the macro replacement buffer.
-    */
-    Pass1 (Line, &M->Replacement);
-
-    /* Remove whitespace from the end of the line */
-    while (IsSpace (SB_LookAtLast (&M->Replacement))) {
-        SB_Drop (&M->Replacement, 1);
-    }
-#if 0
-    printf ("%s: <%.*s>\n", M->Name, SB_GetLen (&M->Replacement), SB_GetConstBuf (&M->Replacement));
-#endif
-
-    /* If we have an existing macro, check if the redefinition is identical.
-    ** Print a diagnostic if not.
-    */
-    if (Existing && MacroCmp (M, Existing) != 0) {
-        PPError ("Macro redefinition is not identical");
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                               Preprocessing                               */
-/*****************************************************************************/
-
-
-
-static unsigned Pass1 (StrBuf* Source, StrBuf* Target)
-/* Preprocessor pass 1. Remove whitespace. Handle old and new style comments
-** and the "defined" operator.
-*/
-{
-    unsigned    IdentCount;
-    ident       Ident;
-    int         HaveParen;
-
-    /* Switch to the new input source */
-    StrBuf* OldSource = InitLine (Source);
-
-    /* Loop removing ws and comments */
-    IdentCount = 0;
-    while (CurC != '\0') {
-        if (SkipWhitespace (0)) {
-            /* Squeeze runs of blanks */
-            if (!IsSpace (SB_LookAtLast (Target))) {
-                SB_AppendChar (Target, ' ');
-            }
-        } else if (IsSym (Ident)) {
-            if (Preprocessing && strcmp (Ident, "defined") == 0) {
-                /* Handle the "defined" operator */
-                SkipWhitespace (0);
-                HaveParen = 0;
-                if (CurC == '(') {
-                    HaveParen = 1;
-                    NextChar ();
-                    SkipWhitespace (0);
-                }
-                if (IsSym (Ident)) {
-                    SB_AppendChar (Target, IsMacro (Ident)? '1' : '0');
-                    if (HaveParen) {
-                        SkipWhitespace (0);
-                        if (CurC != ')') {
-                            PPError ("`)' expected");
-                        } else {
-                            NextChar ();
-                        }
-                    }
-                } else {
-                    PPError ("Identifier expected");
-                    SB_AppendChar (Target, '0');
-                }
-            } else {
-                ++IdentCount;
-                SB_AppendStr (Target, Ident);
-            }
-        } else if (IsQuote (CurC)) {
-            CopyQuotedString (Target);
-        } else if (CurC == '/' && NextC == '*') {
-            if (!IsSpace (SB_LookAtLast (Target))) {
-                SB_AppendChar (Target, ' ');
-            }
-            OldStyleComment ();
-        } else if (IS_Get (&Standard) >= STD_C99 && CurC == '/' && NextC == '/') {
-            if (!IsSpace (SB_LookAtLast (Target))) {
-                SB_AppendChar (Target, ' ');
-            }
-            NewStyleComment ();
-        } else {
-            SB_AppendChar (Target, CurC);
-            NextChar ();
-        }
-    }
-
-    /* Switch back to the old source */
-    InitLine (OldSource);
-
-    /* Return the number of identifiers found in the line */
-    return IdentCount;
-}
-
-
-
-static void MacroReplacement (StrBuf* Source, StrBuf* Target)
-/* Perform macro replacement. */
-{
-    ident       Ident;
-    Macro*      M;
-
-    /* Remember the current input and switch to Source */
-    StrBuf* OldSource = InitLine (Source);
-
-    /* Loop substituting macros */
-    while (CurC != '\0') {
-        /* If we have an identifier, check if it's a macro */
-        if (IsSym (Ident)) {
-            /* Check if it's a macro */
-            if ((M = FindMacro (Ident)) != 0 && !M->Expanding) {
-                /* It's a macro, expand it */
-                ExpandMacro (Target, M);
-            } else {
-                /* An identifier, keep it */
-                SB_AppendStr (Target, Ident);
-            }
-        } else if (IsQuote (CurC)) {
-            CopyQuotedString (Target);
-        } else if (IsSpace (CurC)) {
-            if (!IsSpace (SB_LookAtLast (Target))) {
-                SB_AppendChar (Target, CurC);
-            }
-            NextChar ();
-        } else {
-            SB_AppendChar (Target, CurC);
-            NextChar ();
-        }
-    }
-
-    /* Switch back the input */
-    InitLine (OldSource);
-}
-
-
-
-static void PreprocessLine (void)
-/* Translate one line. */
-{
-    /* Trim whitespace and remove comments. The function returns the number of
-    ** identifiers found. If there were any, we will have to check for macros.
-    */
-    SB_Clear (MLine);
-    if (Pass1 (Line, MLine) > 0) {
-        MLine = InitLine (MLine);
-        SB_Reset (Line);
-        SB_Clear (MLine);
-        MacroReplacement (Line, MLine);
-    }
-
-    /* Read from the new line */
-    SB_Reset (MLine);
-    MLine = InitLine (MLine);
-}
-
-
-
-static int PushIf (int Skip, int Invert, int Cond)
-/* Push a new if level onto the if stack */
-{
-    /* Check for an overflow of the if stack */
-    if (IfIndex >= MAX_IFS-1) {
-        PPError ("Too many nested #if clauses");
-        return 1;
-    }
-
-    /* Push the #if condition */
-    ++IfIndex;
-    if (Skip) {
-        IfStack[IfIndex] = IFCOND_SKIP | IFCOND_NEEDTERM;
-        return 1;
-    } else {
-        IfStack[IfIndex] = IFCOND_NONE | IFCOND_NEEDTERM;
-        return (Invert ^ Cond);
-    }
-}
-
-
-
-static void DoError (void)
-/* Print an error */
-{
-    SkipWhitespace (0);
-    if (CurC == '\0') {
-        PPError ("Invalid #error directive");
-    } else {
-        PPError ("#error: %s", SB_GetConstBuf (Line) + SB_GetIndex (Line));
-    }
-
-    /* Clear the rest of line */
-    ClearLine ();
-}
-
-
-
-static int DoIf (int Skip)
-/* Process #if directive */
-{
-    ExprDesc Expr;
-
-    /* We're about to abuse the compiler expression parser to evaluate the
-    ** #if expression. Save the current tokens to come back here later.
-    ** NOTE: Yes, this is a hack, but it saves a complete separate expression
-    ** evaluation for the preprocessor.
-    */
-    Token SavedCurTok  = CurTok;
-    Token SavedNextTok = NextTok;
-
-    /* Make sure the line infos for the tokens won't get removed */
-    if (SavedCurTok.LI) {
-        UseLineInfo (SavedCurTok.LI);
-    }
-    if (SavedNextTok.LI) {
-        UseLineInfo (SavedNextTok.LI);
-    }
-
-    /* Switch into special preprocessing mode */
-    Preprocessing = 1;
-
-    /* Expand macros in this line */
-    PreprocessLine ();
-
-    /* Add two semicolons as sentinels to the line, so the following
-    ** expression evaluation will eat these two tokens but nothing from
-    ** the following line.
-    */
-    SB_AppendStr (Line, ";;");
-    SB_Terminate (Line);
-
-    /* Load CurTok and NextTok with tokens from the new input */
-    NextToken ();
-    NextToken ();
-
-    /* Call the expression parser */
-    ConstExpr (hie1, &Expr);
-
-    /* End preprocessing mode */
-    Preprocessing = 0;
-
-    /* Reset the old tokens */
-    CurTok  = SavedCurTok;
-    NextTok = SavedNextTok;
-
-    /* Set the #if condition according to the expression result */
-    return PushIf (Skip, 1, Expr.IVal != 0);
-}
-
-
-
-static int DoIfDef (int skip, int flag)
-/* Process #ifdef if flag == 1, or #ifndef if flag == 0. */
-{
-    ident Ident;
-
-    SkipWhitespace (0);
-    if (MacName (Ident) == 0) {
-        return 0;
-    } else {
-        return PushIf (skip, flag, IsMacro(Ident));
-    }
-}
-
-
-
-static void DoInclude (void)
-/* Open an include file. */
-{
-    char        RTerm;
-    InputType   IT;
-    StrBuf      Filename = STATIC_STRBUF_INITIALIZER;
-
-
-    /* Preprocess the remainder of the line */
-    PreprocessLine ();
-
-    /* Skip blanks */
-    SkipWhitespace (0);
-
-    /* Get the next char and check for a valid file name terminator. Setup
-    ** the include directory spec (SYS/USR) by looking at the terminator.
-    */
-    switch (CurC) {
-
-        case '\"':
-            RTerm   = '\"';
-            IT = IT_USRINC;
-            break;
-
-        case '<':
-            RTerm   = '>';
-            IT = IT_SYSINC;
-            break;
-
-        default:
-            PPError ("`\"' or `<' expected");
-            goto Done;
-    }
-    NextChar ();
-
-    /* Get a copy of the filename */
-    while (CurC != '\0' && CurC != RTerm) {
-        SB_AppendChar (&Filename, CurC);
-        NextChar ();
-    }
-    SB_Terminate (&Filename);
-
-    /* Check if we got a terminator */
-    if (CurC == RTerm) {
-        /* Open the include file */
-        OpenIncludeFile (SB_GetConstBuf (&Filename), IT);
-    } else if (CurC == '\0') {
-        /* No terminator found */
-        PPError ("#include expects \"FILENAME\" or <FILENAME>");
-    }
-
-Done:
-    /* Free the allocated filename data */
-    SB_Done (&Filename);
-
-    /* Clear the remaining line so the next input will come from the new
-    ** file (if open)
-    */
-    ClearLine ();
-}
-
-
-
-static void DoPragma (void)
-/* Handle a #pragma line by converting the #pragma preprocessor directive into
-** the _Pragma() compiler operator.
-*/
-{
-    /* Skip blanks following the #pragma directive */
-    SkipWhitespace (0);
-
-    /* Copy the remainder of the line into MLine removing comments and ws */
-    SB_Clear (MLine);
-    Pass1 (Line, MLine);
-
-    /* Convert the directive into the operator */
-    SB_CopyStr (Line, "_Pragma (");
-    SB_Reset (MLine);
-    Stringize (MLine, Line);
-    SB_AppendChar (Line, ')');
-
-    /* Initialize reading from line */
-    SB_Reset (Line);
-    InitLine (Line);
-}
-
-
-
-static void DoUndef (void)
-/* Process the #undef directive */
-{
-    ident Ident;
-
-    SkipWhitespace (0);
-    if (MacName (Ident)) {
-        UndefineMacro (Ident);
-    }
-}
-
-
-
-static void DoWarning (void)
-/* Print a warning */
-{
-    SkipWhitespace (0);
-    if (CurC == '\0') {
-        PPError ("Invalid #warning directive");
-    } else {
-        PPWarning ("#warning: %s", SB_GetConstBuf (Line) + SB_GetIndex (Line));
-    }
-
-    /* Clear the rest of line */
-    ClearLine ();
-}
-
-
-
-void Preprocess (void)
-/* Preprocess a line */
-{
-    int         Skip;
-    ident       Directive;
-
-    /* Create the output buffer if we don't already have one */
-    if (MLine == 0) {
-        MLine = NewStrBuf ();
-    }
-
-    /* Skip white space at the beginning of the line */
-    SkipWhitespace (0);
-
-    /* Check for stuff to skip */
-    Skip = 0;
-    while (CurC == '\0' || CurC == '#' || Skip) {
-
-        /* Check for preprocessor lines lines */
-        if (CurC == '#') {
-            NextChar ();
-            SkipWhitespace (0);
-            if (CurC == '\0') {
-                /* Ignore the empty preprocessor directive */
-                continue;
-            }
-            if (!IsSym (Directive)) {
-                PPError ("Preprocessor directive expected");
-                ClearLine ();
-            } else {
-                switch (FindPPToken (Directive)) {
-
-                    case PP_DEFINE:
-                        if (!Skip) {
-                            DefineMacro ();
-                        }
-                        break;
-
-                    case PP_ELIF:
-                        if (IfIndex >= 0) {
-                            if ((IfStack[IfIndex] & IFCOND_ELSE) == 0) {
-
-                                /* Handle as #else/#if combination */
-                                if ((IfStack[IfIndex] & IFCOND_SKIP) == 0) {
-                                    Skip = !Skip;
-                                }
-                                IfStack[IfIndex] |= IFCOND_ELSE;
-                                Skip = DoIf (Skip);
-
-                                /* #elif doesn't need a terminator */
-                                IfStack[IfIndex] &= ~IFCOND_NEEDTERM;
-                            } else {
-                                PPError ("Duplicate #else/#elif");
-                            }
-                        } else {
-                            PPError ("Unexpected #elif");
-                        }
-                        break;
-
-                    case PP_ELSE:
-                        if (IfIndex >= 0) {
-                            if ((IfStack[IfIndex] & IFCOND_ELSE) == 0) {
-                                if ((IfStack[IfIndex] & IFCOND_SKIP) == 0) {
-                                    Skip = !Skip;
-                                }
-                                IfStack[IfIndex] |= IFCOND_ELSE;
-                            } else {
-                                PPError ("Duplicate #else");
-                            }
-                        } else {
-                            PPError ("Unexpected `#else'");
-                        }
-                        break;
-
-                    case PP_ENDIF:
-                        if (IfIndex >= 0) {
-                            /* Remove any clauses on top of stack that do not
-                            ** need a terminating #endif.
-                            */
-                            while (IfIndex >= 0 && (IfStack[IfIndex] & IFCOND_NEEDTERM) == 0) {
-                                --IfIndex;
-                            }
-
-                            /* Stack may not be empty here or something is wrong */
-                            CHECK (IfIndex >= 0);
-
-                            /* Remove the clause that needs a terminator */
-                            Skip = (IfStack[IfIndex--] & IFCOND_SKIP) != 0;
-                        } else {
-                            PPError ("Unexpected `#endif'");
-                        }
-                        break;
-
-                    case PP_ERROR:
-                        if (!Skip) {
-                            DoError ();
-                        }
-                        break;
-
-                    case PP_IF:
-                        Skip = DoIf (Skip);
-                        break;
-
-                    case PP_IFDEF:
-                        Skip = DoIfDef (Skip, 1);
-                        break;
-
-                    case PP_IFNDEF:
-                        Skip = DoIfDef (Skip, 0);
-                        break;
-
-                    case PP_INCLUDE:
-                        if (!Skip) {
-                            DoInclude ();
-                        }
-                        break;
-
-                    case PP_LINE:
-                        /* Should do something in C99 at least, but we ignore it */
-                        if (!Skip) {
-                            ClearLine ();
-                        }
-                        break;
-
-                    case PP_PRAGMA:
-                        if (!Skip) {
-                            DoPragma ();
-                            goto Done;
-                        }
-                        break;
-
-                    case PP_UNDEF:
-                        if (!Skip) {
-                            DoUndef ();
-                        }
-                        break;
-
-                    case PP_WARNING:
-                        /* #warning is a non standard extension */
-                        if (IS_Get (&Standard) > STD_C99) {
-                            if (!Skip) {
-                                DoWarning ();
-                            }
-                        } else {
-                            if (!Skip) {
-                                PPError ("Preprocessor directive expected");
-                            }
-                            ClearLine ();
-                        }
-                        break;
-
-                    default:
-                        if (!Skip) {
-                            PPError ("Preprocessor directive expected");
-                        }
-                        ClearLine ();
-                }
-            }
-
-        }
-        if (NextLine () == 0) {
-            if (IfIndex >= 0) {
-                PPError ("`#endif' expected");
-            }
-            return;
-        }
-        SkipWhitespace (0);
-    }
-
-    PreprocessLine ();
-
-Done:
-    if (Verbosity > 1 && SB_NotEmpty (Line)) {
-        printf ("%s(%u): %.*s\n", GetCurrentFile (), GetCurrentLine (),
-                (int) SB_GetLen (Line), SB_GetConstBuf (Line));
-    }
-}
diff --git a/src/cc65/preproc.h b/src/cc65/preproc.h
deleted file mode 100644 (file)
index 8d7b3c3..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 preproc.h                                 */
-/*                                                                           */
-/*                              C preprocessor                               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2004 Ullrich von Bassewitz                                       */
-/*               Römerstraße 52                                              */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef PREPROC_H
-#define PREPROC_H
-
-
-
-/*****************************************************************************/
-/*                                   data                                    */
-/*****************************************************************************/
-
-
-
-/* Set when the preprocessor calls ConstExpr() recursively */
-extern unsigned char Preprocessing;
-
-
-
-/*****************************************************************************/
-/*                                   code                                    */
-/*****************************************************************************/
-
-
-
-void Preprocess (void);
-/* Preprocess a line */
-
-
-
-/* End of preproc.h */
-
-#endif
diff --git a/src/cc65/reginfo.c b/src/cc65/reginfo.c
deleted file mode 100644 (file)
index 383c6ec..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 reginfo.c                                 */
-/*                                                                           */
-/*                        6502 register tracking info                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2003 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "xmalloc.h"
-
-/* cc65 */
-#include "reginfo.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void RC_Invalidate (RegContents* C)
-/* Invalidate all registers */
-{
-    C->RegA   = UNKNOWN_REGVAL;
-    C->RegX   = UNKNOWN_REGVAL;
-    C->RegY   = UNKNOWN_REGVAL;
-    C->SRegLo = UNKNOWN_REGVAL;
-    C->SRegHi = UNKNOWN_REGVAL;
-    C->Ptr1Lo = UNKNOWN_REGVAL;
-    C->Ptr1Hi = UNKNOWN_REGVAL;
-    C->Tmp1   = UNKNOWN_REGVAL;
-}
-
-
-
-void RC_InvalidateZP (RegContents* C)
-/* Invalidate all ZP registers */
-{
-    C->SRegLo = UNKNOWN_REGVAL;
-    C->SRegHi = UNKNOWN_REGVAL;
-    C->Ptr1Lo = UNKNOWN_REGVAL;
-    C->Ptr1Hi = UNKNOWN_REGVAL;
-    C->Tmp1   = UNKNOWN_REGVAL;
-}
-
-
-
-static void RC_Dump1 (FILE* F, const char* Desc, short Val)
-/* Dump one register value */
-{
-    if (RegValIsKnown (Val)) {
-        fprintf (F, "%s=$%02X ", Desc, Val);
-    } else {
-        fprintf (F, "%s=$XX ", Desc);
-    }
-}
-
-
-
-void RC_Dump (FILE* F, const RegContents* RC)
-/* Dump the contents of the given RegContents struct */
-{
-    RC_Dump1 (F, "A", RC->RegA);
-    RC_Dump1 (F, "X", RC->RegX);
-    RC_Dump1 (F, "Y", RC->RegY);
-    RC_Dump1 (F, "SREG", RC->SRegLo);
-    RC_Dump1 (F, "SREG+1", RC->SRegHi);
-    RC_Dump1 (F, "PTR1", RC->Ptr1Lo);
-    RC_Dump1 (F, "PTR1+1", RC->Ptr1Hi);
-    RC_Dump1 (F, "TMP1", RC->Tmp1);
-    fprintf (F, "\n");
-}
-
-
-
-RegInfo* NewRegInfo (const RegContents* RC)
-/* Allocate a new register info, initialize and return it. If RC is not
-** a NULL pointer, it is used to initialize both, the input and output
-** registers. If the pointer is NULL, all registers are set to unknown.
-*/
-{
-    /* Allocate memory */
-    RegInfo* RI = xmalloc (sizeof (RegInfo));
-
-    /* Initialize the registers */
-    if (RC) {
-        RI->In   = *RC;
-        RI->Out  = *RC;
-        RI->Out2 = *RC;
-    } else {
-        RC_Invalidate (&RI->In);
-        RC_Invalidate (&RI->Out);
-        RC_Invalidate (&RI->Out2);
-    }
-
-    /* Return the new struct */
-    return RI;
-}
-
-
-
-void FreeRegInfo (RegInfo* RI)
-/* Free a RegInfo struct */
-{
-    xfree (RI);
-}
-
-
-
-void DumpRegInfo (const char* Desc, const RegInfo* RI)
-/* Dump the register info for debugging */
-{
-    fprintf (stdout, "%s:\n", Desc);
-    fprintf (stdout, "In:  ");
-    RC_Dump (stdout, &RI->In);
-    fprintf (stdout, "Out: ");
-    RC_Dump (stdout, &RI->Out);
-}
diff --git a/src/cc65/reginfo.h b/src/cc65/reginfo.h
deleted file mode 100644 (file)
index 7354c30..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 reginfo.h                                 */
-/*                                                                           */
-/*                        6502 register tracking info                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2003 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef REGINFO_H
-#define REGINFO_H
-
-
-
-#include <stdio.h>      /* ### */
-
-/* common */
-#include "inline.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Encoding for an unknown register value */
-#define UNKNOWN_REGVAL  -1
-
-/* Register contents */
-typedef struct RegContents RegContents;
-struct RegContents {
-    short       RegA;
-    short       RegX;
-    short       RegY;
-    short       SRegLo;
-    short       SRegHi;
-    short       Ptr1Lo;
-    short       Ptr1Hi;
-    short       Tmp1;
-};
-
-/* Register change info */
-typedef struct RegInfo RegInfo;
-struct RegInfo {
-    RegContents In;             /* Incoming register values */
-    RegContents Out;            /* Outgoing register values */
-    RegContents Out2;           /* Alternative outgoing reg values for branches */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void RC_Invalidate (RegContents* C);
-/* Invalidate all registers */
-
-void RC_InvalidateZP (RegContents* C);
-/* Invalidate all ZP registers */
-
-void RC_Dump (FILE* F, const RegContents* RC);
-/* Dump the contents of the given RegContents struct */
-
-#if defined(HAVE_INLINE)
-INLINE int RegValIsKnown (short Val)
-/* Return true if the register value is known */
-{
-    return (Val >= 0);
-}
-#else
-#  define RegValIsKnown(S)      ((S) >= 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int RegValIsUnknown (short Val)
-/* Return true if the register value is not known */
-{
-    return (Val < 0);
-}
-#else
-#  define RegValIsUnknown(S)      ((S) < 0)
-#endif
-
-RegInfo* NewRegInfo (const RegContents* RC);
-/* Allocate a new register info, initialize and return it. If RC is not
-** a NULL pointer, it is used to initialize both, the input and output
-** registers. If the pointer is NULL, all registers are set to unknown.
-*/
-
-void FreeRegInfo (RegInfo* RI);
-/* Free a RegInfo struct */
-
-void DumpRegInfo (const char* Desc, const RegInfo* RI);
-/* Dump the register info for debugging */
-
-
-
-/* End of reginfo.h */
-
-#endif
diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c
deleted file mode 100644 (file)
index 16d43e2..0000000
+++ /dev/null
@@ -1,1144 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 scanner.c                                 */
-/*                                                                           */
-/*                      Source file line info structure                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2010, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-#include <math.h>
-
-/* common */
-#include "chartype.h"
-#include "fp.h"
-#include "tgttrans.h"
-
-/* cc65 */
-#include "datatype.h"
-#include "error.h"
-#include "function.h"
-#include "global.h"
-#include "hexval.h"
-#include "ident.h"
-#include "input.h"
-#include "litpool.h"
-#include "preproc.h"
-#include "scanner.h"
-#include "standard.h"
-#include "symtab.h"
-
-
-
-/*****************************************************************************/
-/*                                   data                                    */
-/*****************************************************************************/
-
-
-
-Token CurTok;           /* The current token */
-Token NextTok;          /* The next token */
-
-
-
-/* Token types */
-enum {
-    TT_C89      = 0x01 << STD_C89,      /* Token valid in C89 */
-    TT_C99      = 0x01 << STD_C99,      /* Token valid in C99 */
-    TT_CC65     = 0x01 << STD_CC65      /* Token valid in cc65 */
-};
-
-/* Token table */
-static const struct Keyword {
-    char*           Key;        /* Keyword name */
-    unsigned char   Tok;        /* The token */
-    unsigned char   Std;        /* Token supported in which standards? */
-} Keywords [] = {
-    { "_Pragma",        TOK_PRAGMA,     TT_C89 | TT_C99 | TT_CC65  },   /* !! */
-    { "__AX__",         TOK_AX,         TT_C89 | TT_C99 | TT_CC65  },
-    { "__A__",          TOK_A,          TT_C89 | TT_C99 | TT_CC65  },
-    { "__EAX__",        TOK_EAX,        TT_C89 | TT_C99 | TT_CC65  },
-    { "__X__",          TOK_X,          TT_C89 | TT_C99 | TT_CC65  },
-    { "__Y__",          TOK_Y,          TT_C89 | TT_C99 | TT_CC65  },
-    { "__asm__",        TOK_ASM,        TT_C89 | TT_C99 | TT_CC65  },
-    { "__attribute__",  TOK_ATTRIBUTE,  TT_C89 | TT_C99 | TT_CC65  },
-    { "__cdecl__",      TOK_CDECL,      TT_C89 | TT_C99 | TT_CC65  },
-    { "__far__",        TOK_FAR,        TT_C89 | TT_C99 | TT_CC65  },
-    { "__fastcall__",   TOK_FASTCALL,   TT_C89 | TT_C99 | TT_CC65  },
-    { "__inline__",     TOK_INLINE,     TT_C89 | TT_C99 | TT_CC65  },
-    { "__near__",       TOK_NEAR,       TT_C89 | TT_C99 | TT_CC65  },
-    { "asm",            TOK_ASM,                          TT_CC65  },
-    { "auto",           TOK_AUTO,       TT_C89 | TT_C99 | TT_CC65  },
-    { "break",          TOK_BREAK,      TT_C89 | TT_C99 | TT_CC65  },
-    { "case",           TOK_CASE,       TT_C89 | TT_C99 | TT_CC65  },
-    { "cdecl",          TOK_CDECL,                        TT_CC65  },
-    { "char",           TOK_CHAR,       TT_C89 | TT_C99 | TT_CC65  },
-    { "const",          TOK_CONST,      TT_C89 | TT_C99 | TT_CC65  },
-    { "continue",       TOK_CONTINUE,   TT_C89 | TT_C99 | TT_CC65  },
-    { "default",        TOK_DEFAULT,    TT_C89 | TT_C99 | TT_CC65  },
-    { "do",             TOK_DO,         TT_C89 | TT_C99 | TT_CC65  },
-    { "double",         TOK_DOUBLE,     TT_C89 | TT_C99 | TT_CC65  },
-    { "else",           TOK_ELSE,       TT_C89 | TT_C99 | TT_CC65  },
-    { "enum",           TOK_ENUM,       TT_C89 | TT_C99 | TT_CC65  },
-    { "extern",         TOK_EXTERN,     TT_C89 | TT_C99 | TT_CC65  },
-    { "far",            TOK_FAR,                          TT_CC65  },
-    { "fastcall",       TOK_FASTCALL,                     TT_CC65  },
-    { "float",          TOK_FLOAT,      TT_C89 | TT_C99 | TT_CC65  },
-    { "for",            TOK_FOR,        TT_C89 | TT_C99 | TT_CC65  },
-    { "goto",           TOK_GOTO,       TT_C89 | TT_C99 | TT_CC65  },
-    { "if",             TOK_IF,         TT_C89 | TT_C99 | TT_CC65  },
-    { "inline",         TOK_INLINE,              TT_C99 | TT_CC65  },
-    { "int",            TOK_INT,        TT_C89 | TT_C99 | TT_CC65  },
-    { "long",           TOK_LONG,       TT_C89 | TT_C99 | TT_CC65  },
-    { "near",           TOK_NEAR,                         TT_CC65  },
-    { "register",       TOK_REGISTER,   TT_C89 | TT_C99 | TT_CC65  },
-    { "restrict",       TOK_RESTRICT,            TT_C99 | TT_CC65  },
-    { "return",         TOK_RETURN,     TT_C89 | TT_C99 | TT_CC65  },
-    { "short",          TOK_SHORT,      TT_C89 | TT_C99 | TT_CC65  },
-    { "signed",         TOK_SIGNED,     TT_C89 | TT_C99 | TT_CC65  },
-    { "sizeof",         TOK_SIZEOF,     TT_C89 | TT_C99 | TT_CC65  },
-    { "static",         TOK_STATIC,     TT_C89 | TT_C99 | TT_CC65  },
-    { "struct",         TOK_STRUCT,     TT_C89 | TT_C99 | TT_CC65  },
-    { "switch",         TOK_SWITCH,     TT_C89 | TT_C99 | TT_CC65  },
-    { "typedef",        TOK_TYPEDEF,    TT_C89 | TT_C99 | TT_CC65  },
-    { "union",          TOK_UNION,      TT_C89 | TT_C99 | TT_CC65  },
-    { "unsigned",       TOK_UNSIGNED,   TT_C89 | TT_C99 | TT_CC65  },
-    { "void",           TOK_VOID,       TT_C89 | TT_C99 | TT_CC65  },
-    { "volatile",       TOK_VOLATILE,   TT_C89 | TT_C99 | TT_CC65  },
-    { "while",          TOK_WHILE,      TT_C89 | TT_C99 | TT_CC65  },
-};
-#define KEY_COUNT       (sizeof (Keywords) / sizeof (Keywords [0]))
-
-
-
-/* Stuff for determining the type of an integer constant */
-#define IT_INT          0x01
-#define IT_UINT         0x02
-#define IT_LONG         0x04
-#define IT_ULONG        0x08
-
-
-
-/*****************************************************************************/
-/*                                   code                                    */
-/*****************************************************************************/
-
-
-
-static int CmpKey (const void* Key, const void* Elem)
-/* Compare function for bsearch */
-{
-    return strcmp ((const char*) Key, ((const struct Keyword*) Elem)->Key);
-}
-
-
-
-static token_t FindKey (const char* Key)
-/* Find a keyword and return the token. Return IDENT if the token is not a
-** keyword.
-*/
-{
-    struct Keyword* K;
-    K = bsearch (Key, Keywords, KEY_COUNT, sizeof (Keywords [0]), CmpKey);
-    if (K && (K->Std & (0x01 << IS_Get (&Standard))) != 0) {
-        return K->Tok;
-    } else {
-        return TOK_IDENT;
-    }
-}
-
-
-
-static int SkipWhite (void)
-/* Skip white space in the input stream, reading and preprocessing new lines
-** if necessary. Return 0 if end of file is reached, return 1 otherwise.
-*/
-{
-    while (1) {
-        while (CurC == '\0') {
-            if (NextLine () == 0) {
-                return 0;
-            }
-            Preprocess ();
-        }
-        if (IsSpace (CurC)) {
-            NextChar ();
-        } else {
-            return 1;
-        }
-    }
-}
-
-
-
-int TokIsFuncSpec (const Token* T)
-/* Return true if the token is a function specifier */
-{
-    return (T->Tok == TOK_INLINE)   ||
-           (T->Tok == TOK_FASTCALL) || (T->Tok == TOK_CDECL) ||
-           (T->Tok == TOK_NEAR)     || (T->Tok == TOK_FAR);
-}
-
-
-
-void SymName (char* S)
-/* Read a symbol from the input stream. The first character must have been
-** checked before calling this function. The buffer is expected to be at
-** least of size MAX_IDENTLEN+1.
-*/
-{
-    unsigned Len = 0;
-    do {
-        if (Len < MAX_IDENTLEN) {
-            ++Len;
-            *S++ = CurC;
-        }
-        NextChar ();
-    } while (IsIdent (CurC) || IsDigit (CurC));
-    *S = '\0';
-}
-
-
-
-int IsSym (char* S)
-/* If a symbol follows, read it and return 1, otherwise return 0 */
-{
-    if (IsIdent (CurC)) {
-        SymName (S);
-        return 1;
-    } else {
-        return 0;
-    }
-}
-
-
-
-static void UnknownChar (char C)
-/* Error message for unknown character */
-{
-    Error ("Invalid input character with code %02X", C & 0xFF);
-    NextChar ();                        /* Skip */
-}
-
-
-
-static void SetTok (int tok)
-/* Set NextTok.Tok and bump line ptr */
-{
-    NextTok.Tok = tok;
-    NextChar ();
-}
-
-
-
-static int ParseChar (void)
-/* Parse a character. Converts escape chars into character codes. */
-{
-    int C;
-    int HadError;
-
-    /* Check for escape chars */
-    if (CurC == '\\') {
-        NextChar ();
-        switch (CurC) {
-            case '?':
-                C = '\?';
-                break;
-            case 'a':
-                C = '\a';
-                break;
-            case 'b':
-                C = '\b';
-                break;
-            case 'f':
-                C = '\f';
-                break;
-            case 'r':
-                C = '\r';
-                break;
-            case 'n':
-                C = '\n';
-                break;
-            case 't':
-                C = '\t';
-                break;
-            case 'v':
-                C = '\v';
-                break;
-            case '\"':
-                C = '\"';
-                break;
-            case '\'':
-                C = '\'';
-                break;
-            case '\\':
-                C = '\\';
-                break;
-            case 'x':
-            case 'X':
-                /* Hex character constant */
-                if (!IsXDigit (NextC)) {
-                    Error ("\\x used with no following hex digits");
-                    C = ' ';
-                } else {
-                    HadError = 0;
-                    C = 0;
-                    while (IsXDigit (NextC)) {
-                        if ((C << 4) >= 256) {
-                            if (!HadError) {
-                                Error ("Hex character constant out of range");
-                                HadError = 1;
-                            }
-                        } else {
-                            C = (C << 4) | HexVal (NextC);
-                        }
-                        NextChar ();
-                    }
-                }
-                break;
-            case '0':
-            case '1':
-            case '2':
-            case '3':
-            case '4':
-            case '5':
-            case '6':
-            case '7':
-                /* Octal constant */
-                HadError = 0;
-                C = HexVal (CurC);
-                while (IsODigit (NextC)) {
-                    if ((C << 3) >= 256) {
-                        if (!HadError) {
-                            Error ("Octal character constant out of range");
-                            HadError = 1;
-                        }
-                    } else {
-                        C = (C << 3) | HexVal (NextC);
-                    }
-                    NextChar ();
-                }
-                break;
-            default:
-                Error ("Illegal character constant");
-                C = ' ';
-                /* Try to do error recovery, otherwise the compiler will spit
-                ** out thousands of errors in this place and abort.
-                */
-                if (CurC != '\'' && CurC != '\0') {
-                    while (NextC != '\'' && NextC != '\"' && NextC != '\0') {
-                        NextChar ();
-                    }
-                }
-                break;
-        }
-    } else {
-        C = CurC;
-    }
-
-    /* Skip the character read */
-    NextChar ();
-
-    /* Do correct sign extension */
-    return SignExtendChar (C);
-}
-
-
-
-static void CharConst (void)
-/* Parse a character constant. */
-{
-    int C;
-
-    /* Skip the quote */
-    NextChar ();
-
-    /* Get character */
-    C = ParseChar ();
-
-    /* Check for closing quote */
-    if (CurC != '\'') {
-        Error ("`\'' expected");
-    } else {
-        /* Skip the quote */
-        NextChar ();
-    }
-
-    /* Setup values and attributes */
-    NextTok.Tok  = TOK_CCONST;
-
-    /* Translate into target charset */
-    NextTok.IVal = SignExtendChar (TgtTranslateChar (C));
-
-    /* Character constants have type int */
-    NextTok.Type = type_int;
-}
-
-
-
-static void StringConst (void)
-/* Parse a quoted string */
-{
-    /* String buffer */
-    StrBuf S = AUTO_STRBUF_INITIALIZER;
-
-    /* Assume next token is a string constant */
-    NextTok.Tok  = TOK_SCONST;
-
-    /* Concatenate strings. If at least one of the concenated strings is a wide
-    ** character literal, the whole string is a wide char literal, otherwise
-    ** it's a normal string literal.
-    */
-    while (1) {
-
-        /* Check if this is a normal or a wide char string */
-        if (CurC == 'L' && NextC == '\"') {
-            /* Wide character literal */
-            NextTok.Tok = TOK_WCSCONST;
-            NextChar ();
-            NextChar ();
-        } else if (CurC == '\"') {
-            /* Skip the quote char */
-            NextChar ();
-        } else {
-            /* No string */
-            break;
-        }
-
-        /* Read until end of string */
-        while (CurC != '\"') {
-            if (CurC == '\0') {
-                Error ("Unexpected newline");
-                break;
-            }
-            SB_AppendChar (&S, ParseChar ());
-        }
-
-        /* Skip closing quote char if there was one */
-        NextChar ();
-
-        /* Skip white space, read new input */
-        SkipWhite ();
-
-    }
-
-    /* Terminate the string */
-    SB_AppendChar (&S, '\0');
-
-    /* Add the whole string to the literal pool */
-    NextTok.SVal = AddLiteralStr (&S);
-
-    /* Free the buffer */
-    SB_Done (&S);
-}
-
-
-
-static void NumericConst (void)
-/* Parse a numeric constant */
-{
-    unsigned Base;              /* Temporary number base */
-    unsigned Prefix;            /* Base according to prefix */
-    StrBuf   S = STATIC_STRBUF_INITIALIZER;
-    int      IsFloat;
-    char     C;
-    unsigned DigitVal;
-    unsigned long IVal;         /* Value */
-
-    /* Check for a leading hex or octal prefix and determine the possible
-    ** integer types.
-    */
-    if (CurC == '0') {
-        /* Gobble 0 and examine next char */
-        NextChar ();
-        if (toupper (CurC) == 'X') {
-            Base = Prefix = 16;
-            NextChar ();        /* gobble "x" */
-        } else {
-            Base = 10;          /* Assume 10 for now - see below */
-            Prefix = 8;         /* Actual prefix says octal */
-        }
-    } else {
-        Base  = Prefix = 10;
-    }
-
-    /* Because floating point numbers don't have octal prefixes (a number
-    ** with a leading zero is decimal), we first have to read the number
-    ** before converting it, so we can determine if it's a float or an
-    ** integer.
-    */
-    while (IsXDigit (CurC) && HexVal (CurC) < Base) {
-        SB_AppendChar (&S, CurC);
-        NextChar ();
-    }
-    SB_Terminate (&S);
-
-    /* The following character tells us if we have an integer or floating
-    ** point constant. Note: Hexadecimal floating point constants aren't
-    ** supported in C89.
-    */
-    IsFloat = (CurC == '.' ||
-               (Base == 10 && toupper (CurC) == 'E') ||
-               (Base == 16 && toupper (CurC) == 'P' && IS_Get (&Standard) >= STD_C99));
-
-    /* If we don't have a floating point type, an octal prefix results in an
-    ** octal base.
-    */
-    if (!IsFloat && Prefix == 8) {
-        Base = 8;
-    }
-
-    /* Since we do now know the correct base, convert the remembered input
-    ** into a number.
-    */
-    SB_Reset (&S);
-    IVal = 0;
-    while ((C = SB_Get (&S)) != '\0') {
-        DigitVal = HexVal (C);
-        if (DigitVal >= Base) {
-            Error ("Numeric constant contains digits beyond the radix");
-        }
-        IVal = (IVal * Base) + DigitVal;
-    }
-
-    /* We don't need the string buffer any longer */
-    SB_Done (&S);
-
-    /* Distinguish between integer and floating point constants */
-    if (!IsFloat) {
-
-        unsigned Types;
-        int      HaveSuffix;
-
-        /* Check for a suffix and determine the possible types */
-        HaveSuffix = 1;
-        if (toupper (CurC) == 'U') {
-            /* Unsigned type */
-            NextChar ();
-            if (toupper (CurC) != 'L') {
-                Types = IT_UINT | IT_ULONG;
-            } else {
-                NextChar ();
-                Types = IT_ULONG;
-            }
-        } else if (toupper (CurC) == 'L') {
-            /* Long type */
-            NextChar ();
-            if (toupper (CurC) != 'U') {
-                Types = IT_LONG | IT_ULONG;
-            } else {
-                NextChar ();
-                Types = IT_ULONG;
-            }
-        } else {
-            HaveSuffix = 0;
-            if (Prefix == 10) {
-                /* Decimal constants are of any type but uint */
-                Types = IT_INT | IT_LONG | IT_ULONG;
-            } else {
-                /* Octal or hex constants are of any type */
-                Types = IT_INT | IT_UINT | IT_LONG | IT_ULONG;
-            }
-        }
-
-        /* Check the range to determine the type */
-        if (IVal > 0x7FFF) {
-            /* Out of range for int */
-            Types &= ~IT_INT;
-            /* If the value is in the range 0x8000..0xFFFF, unsigned int is not
-            ** allowed, and we don't have a type specifying suffix, emit a
-            ** warning, because the constant is of type long.
-            */
-            if (IVal <= 0xFFFF && (Types & IT_UINT) == 0 && !HaveSuffix) {
-                Warning ("Constant is long");
-            }
-        }
-        if (IVal > 0xFFFF) {
-            /* Out of range for unsigned int */
-            Types &= ~IT_UINT;
-        }
-        if (IVal > 0x7FFFFFFF) {
-            /* Out of range for long int */
-            Types &= ~IT_LONG;
-        }
-
-        /* Now set the type string to the smallest type in types */
-        if (Types & IT_INT) {
-            NextTok.Type = type_int;
-        } else if (Types & IT_UINT) {
-            NextTok.Type = type_uint;
-        } else if (Types & IT_LONG) {
-            NextTok.Type = type_long;
-        } else {
-            NextTok.Type = type_ulong;
-        }
-
-        /* Set the value and the token */
-        NextTok.IVal = IVal;
-        NextTok.Tok  = TOK_ICONST;
-
-    } else {
-
-        /* Float constant */
-        Double FVal = FP_D_FromInt (IVal);      /* Convert to double */
-
-        /* Check for a fractional part and read it */
-        if (CurC == '.') {
-
-            Double Scale;
-
-            /* Skip the dot */
-            NextChar ();
-
-            /* Read fractional digits */
-            Scale  = FP_D_Make (1.0);
-            while (IsXDigit (CurC) && (DigitVal = HexVal (CurC)) < Base) {
-                /* Get the value of this digit */
-                Double FracVal = FP_D_Div (FP_D_FromInt (DigitVal * Base), Scale);
-                /* Add it to the float value */
-                FVal = FP_D_Add (FVal, FracVal);
-                /* Scale base */
-                Scale = FP_D_Mul (Scale, FP_D_FromInt (DigitVal));
-                /* Skip the digit */
-                NextChar ();
-            }
-        }
-
-        /* Check for an exponent and read it */
-        if ((Base == 16 && toupper (CurC) == 'F') ||
-            (Base == 10 && toupper (CurC) == 'E')) {
-
-            unsigned Digits;
-            unsigned Exp;
-
-            /* Skip the exponent notifier */
-            NextChar ();
-
-            /* Read an optional sign */
-            if (CurC == '-') {
-                NextChar ();
-            } else if (CurC == '+') {
-                NextChar ();
-            }
-
-            /* Read exponent digits. Since we support only 32 bit floats
-            ** with a maximum exponent of +-/127, we read the exponent
-            ** part as integer with up to 3 digits and drop the remainder.
-            ** This avoids an overflow of Exp. The exponent is always
-            ** decimal, even for hex float consts.
-            */
-            Digits = 0;
-            Exp    = 0;
-            while (IsDigit (CurC)) {
-                if (++Digits <= 3) {
-                    Exp = Exp * 10 + HexVal (CurC);
-                }
-                NextChar ();
-            }
-
-            /* Check for errors: We must have exponent digits, and not more
-            ** than three.
-            */
-            if (Digits == 0) {
-                Error ("Floating constant exponent has no digits");
-            } else if (Digits > 3) {
-                Warning ("Floating constant exponent is too large");
-            }
-
-            /* Scale the exponent and adjust the value accordingly */
-            if (Exp) {
-                FVal = FP_D_Mul (FVal, FP_D_Make (pow (10, Exp)));
-            }
-        }
-
-        /* Check for a suffix and determine the type of the constant */
-        if (toupper (CurC) == 'F') {
-            NextChar ();
-            NextTok.Type = type_float;
-        } else {
-            NextTok.Type = type_double;
-        }
-
-        /* Set the value and the token */
-        NextTok.FVal = FVal;
-        NextTok.Tok  = TOK_FCONST;
-
-    }
-}
-
-
-
-void NextToken (void)
-/* Get next token from input stream */
-{
-    ident token;
-
-    /* We have to skip white space here before shifting tokens, since the
-    ** tokens and the current line info is invalid at startup and will get
-    ** initialized by reading the first time from the file. Remember if
-    ** we were at end of input and handle that later.
-    */
-    int GotEOF = (SkipWhite() == 0);
-
-    /* Current token is the lookahead token */
-    if (CurTok.LI) {
-        ReleaseLineInfo (CurTok.LI);
-    }
-    CurTok = NextTok;
-
-    /* When reading the first time from the file, the line info in NextTok,
-    ** which was copied to CurTok is invalid. Since the information from
-    ** the token is used for error messages, we must make it valid.
-    */
-    if (CurTok.LI == 0) {
-        CurTok.LI = UseLineInfo (GetCurLineInfo ());
-    }
-
-    /* Remember the starting position of the next token */
-    NextTok.LI = UseLineInfo (GetCurLineInfo ());
-
-    /* Now handle end of input. */
-    if (GotEOF) {
-        /* End of file reached */
-        NextTok.Tok = TOK_CEOF;
-        return;
-    }
-
-    /* Determine the next token from the lookahead */
-    if (IsDigit (CurC) || (CurC == '.' && IsDigit (NextC))) {
-        /* A number */
-        NumericConst ();
-        return;
-    }
-
-    /* Check for wide character literals */
-    if (CurC == 'L' && NextC == '\"') {
-        StringConst ();
-        return;
-    }
-
-    /* Check for keywords and identifiers */
-    if (IsSym (token)) {
-
-        /* Check for a keyword */
-        if ((NextTok.Tok = FindKey (token)) != TOK_IDENT) {
-            /* Reserved word found */
-            return;
-        }
-        /* No reserved word, check for special symbols */
-        if (token[0] == '_' && token[1] == '_') {
-            /* Special symbols */
-            if (strcmp (token+2, "FILE__") == 0) {
-                NextTok.SVal = AddLiteral (GetCurrentFile());
-                NextTok.Tok  = TOK_SCONST;
-                return;
-            } else if (strcmp (token+2, "LINE__") == 0) {
-                NextTok.Tok  = TOK_ICONST;
-                NextTok.IVal = GetCurrentLine();
-                NextTok.Type = type_int;
-                return;
-            } else if (strcmp (token+2, "func__") == 0) {
-                /* __func__ is only defined in functions */
-                if (CurrentFunc) {
-                    NextTok.SVal = AddLiteral (F_GetFuncName (CurrentFunc));
-                    NextTok.Tok  = TOK_SCONST;
-                    return;
-                }
-            }
-        }
-
-        /* No reserved word but identifier */
-        strcpy (NextTok.Ident, token);
-        NextTok.Tok = TOK_IDENT;
-        return;
-    }
-
-    /* Monstrous switch statement ahead... */
-    switch (CurC) {
-
-        case '!':
-            NextChar ();
-            if (CurC == '=') {
-                SetTok (TOK_NE);
-            } else {
-                NextTok.Tok = TOK_BOOL_NOT;
-            }
-            break;
-
-        case '\"':
-            StringConst ();
-            break;
-
-        case '%':
-            NextChar ();
-            if (CurC == '=') {
-                SetTok (TOK_MOD_ASSIGN);
-            } else {
-                NextTok.Tok = TOK_MOD;
-            }
-            break;
-
-        case '&':
-            NextChar ();
-            switch (CurC) {
-                case '&':
-                    SetTok (TOK_BOOL_AND);
-                    break;
-                case '=':
-                    SetTok (TOK_AND_ASSIGN);
-                    break;
-                default:
-                    NextTok.Tok = TOK_AND;
-            }
-            break;
-
-        case '\'':
-            CharConst ();
-            break;
-
-        case '(':
-            SetTok (TOK_LPAREN);
-            break;
-
-        case ')':
-            SetTok (TOK_RPAREN);
-            break;
-
-        case '*':
-            NextChar ();
-            if (CurC == '=') {
-                SetTok (TOK_MUL_ASSIGN);
-            } else {
-                NextTok.Tok = TOK_STAR;
-            }
-            break;
-
-        case '+':
-            NextChar ();
-            switch (CurC) {
-                case '+':
-                    SetTok (TOK_INC);
-                    break;
-                case '=':
-                    SetTok (TOK_PLUS_ASSIGN);
-                    break;
-                default:
-                    NextTok.Tok = TOK_PLUS;
-            }
-            break;
-
-        case ',':
-            SetTok (TOK_COMMA);
-            break;
-
-        case '-':
-            NextChar ();
-            switch (CurC) {
-                case '-':
-                    SetTok (TOK_DEC);
-                    break;
-                case '=':
-                    SetTok (TOK_MINUS_ASSIGN);
-                    break;
-                case '>':
-                    SetTok (TOK_PTR_REF);
-                    break;
-                default:
-                    NextTok.Tok = TOK_MINUS;
-            }
-            break;
-
-        case '.':
-            NextChar ();
-            if (CurC == '.') {
-                NextChar ();
-                if (CurC == '.') {
-                    SetTok (TOK_ELLIPSIS);
-                } else {
-                    UnknownChar (CurC);
-                }
-            } else {
-                NextTok.Tok = TOK_DOT;
-            }
-            break;
-
-        case '/':
-            NextChar ();
-            if (CurC == '=') {
-                SetTok (TOK_DIV_ASSIGN);
-            } else {
-                NextTok.Tok = TOK_DIV;
-            }
-            break;
-
-        case ':':
-            SetTok (TOK_COLON);
-            break;
-
-        case ';':
-            SetTok (TOK_SEMI);
-            break;
-
-        case '<':
-            NextChar ();
-            switch (CurC) {
-                case '=':
-                    SetTok (TOK_LE);
-                    break;
-                case '<':
-                    NextChar ();
-                    if (CurC == '=') {
-                        SetTok (TOK_SHL_ASSIGN);
-                    } else {
-                        NextTok.Tok = TOK_SHL;
-                    }
-                    break;
-                default:
-                    NextTok.Tok = TOK_LT;
-            }
-            break;
-
-        case '=':
-            NextChar ();
-            if (CurC == '=') {
-                SetTok (TOK_EQ);
-            } else {
-                NextTok.Tok = TOK_ASSIGN;
-            }
-            break;
-
-        case '>':
-            NextChar ();
-            switch (CurC) {
-                case '=':
-                    SetTok (TOK_GE);
-                    break;
-                case '>':
-                    NextChar ();
-                    if (CurC == '=') {
-                        SetTok (TOK_SHR_ASSIGN);
-                    } else {
-                        NextTok.Tok = TOK_SHR;
-                    }
-                    break;
-                default:
-                    NextTok.Tok = TOK_GT;
-            }
-            break;
-
-        case '?':
-            SetTok (TOK_QUEST);
-            break;
-
-        case '[':
-            SetTok (TOK_LBRACK);
-            break;
-
-        case ']':
-            SetTok (TOK_RBRACK);
-            break;
-
-        case '^':
-            NextChar ();
-            if (CurC == '=') {
-                SetTok (TOK_XOR_ASSIGN);
-            } else {
-                NextTok.Tok = TOK_XOR;
-            }
-            break;
-
-        case '{':
-            SetTok (TOK_LCURLY);
-            break;
-
-        case '|':
-            NextChar ();
-            switch (CurC) {
-                case '|':
-                    SetTok (TOK_BOOL_OR);
-                    break;
-                case '=':
-                    SetTok (TOK_OR_ASSIGN);
-                    break;
-                default:
-                    NextTok.Tok = TOK_OR;
-            }
-            break;
-
-        case '}':
-            SetTok (TOK_RCURLY);
-            break;
-
-        case '~':
-            SetTok (TOK_COMP);
-            break;
-
-        default:
-            UnknownChar (CurC);
-
-    }
-
-}
-
-
-
-void SkipTokens (const token_t* TokenList, unsigned TokenCount)
-/* Skip tokens until we reach TOK_CEOF or a token in the given token list.
-** This routine is used for error recovery.
-*/
-{
-    while (CurTok.Tok != TOK_CEOF) {
-
-        /* Check if the current token is in the token list */
-        unsigned I;
-        for (I = 0; I < TokenCount; ++I) {
-            if (CurTok.Tok == TokenList[I]) {
-                /* Found a token in the list */
-                return;
-            }
-        }
-
-        /* Not in the list: Skip it */
-        NextToken ();
-
-    }
-}
-
-
-
-int Consume (token_t Token, const char* ErrorMsg)
-/* Eat token if it is the next in the input stream, otherwise print an error
-** message. Returns true if the token was found and false otherwise.
-*/
-{
-    if (CurTok.Tok == Token) {
-        NextToken ();
-        return 1;
-    } else {
-        Error ("%s", ErrorMsg);
-        return 0;
-    }
-}
-
-
-
-int ConsumeColon (void)
-/* Check for a colon and skip it. */
-{
-    return Consume (TOK_COLON, "`:' expected");
-}
-
-
-
-int ConsumeSemi (void)
-/* Check for a semicolon and skip it. */
-{
-    /* Try do be smart about typos... */
-    if (CurTok.Tok == TOK_SEMI) {
-        NextToken ();
-        return 1;
-    } else {
-        Error ("`;' expected");
-        if (CurTok.Tok == TOK_COLON || CurTok.Tok == TOK_COMMA) {
-            NextToken ();
-        }
-        return 0;
-    }
-}
-
-
-
-int ConsumeComma (void)
-/* Check for a comma and skip it. */
-{
-    /* Try do be smart about typos... */
-    if (CurTok.Tok == TOK_COMMA) {
-        NextToken ();
-        return 1;
-    } else {
-        Error ("`,' expected");
-        if (CurTok.Tok == TOK_SEMI) {
-            NextToken ();
-        }
-        return 0;
-    }
-}
-
-
-
-int ConsumeLParen (void)
-/* Check for a left parenthesis and skip it */
-{
-    return Consume (TOK_LPAREN, "`(' expected");
-}
-
-
-
-int ConsumeRParen (void)
-/* Check for a right parenthesis and skip it */
-{
-    return Consume (TOK_RPAREN, "`)' expected");
-}
-
-
-
-int ConsumeLBrack (void)
-/* Check for a left bracket and skip it */
-{
-    return Consume (TOK_LBRACK, "`[' expected");
-}
-
-
-
-int ConsumeRBrack (void)
-/* Check for a right bracket and skip it */
-{
-    return Consume (TOK_RBRACK, "`]' expected");
-}
-
-
-
-int ConsumeLCurly (void)
-/* Check for a left curly brace and skip it */
-{
-    return Consume (TOK_LCURLY, "`{' expected");
-}
-
-
-
-int ConsumeRCurly (void)
-/* Check for a right curly brace and skip it */
-{
-    return Consume (TOK_RCURLY, "`}' expected");
-}
diff --git a/src/cc65/scanner.h b/src/cc65/scanner.h
deleted file mode 100644 (file)
index 1242d78..0000000
+++ /dev/null
@@ -1,308 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 scanner.h                                 */
-/*                                                                           */
-/*                      Source file line info structure                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2010, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SCANNER_H
-#define SCANNER_H
-
-
-
-/* common */
-#include "fp.h"
-
-/* cc65 */
-#include "datatype.h"
-#include "ident.h"
-#include "lineinfo.h"
-
-
-
-/*****************************************************************************/
-/*                             Token definitions                             */
-/*****************************************************************************/
-
-
-
-typedef enum token_t {
-    TOK_INVALID,
-    TOK_CEOF,
-
-    /* Storage specifiers */
-    TOK_FIRST_STORAGE_CLASS,
-    TOK_AUTO            = TOK_FIRST_STORAGE_CLASS,
-    TOK_EXTERN,
-    TOK_REGISTER,
-    TOK_STATIC,
-    TOK_TYPEDEF,
-    TOK_LAST_STORAGE_CLASS = TOK_TYPEDEF,
-
-    /* Tokens denoting type qualifiers */
-    TOK_FIRST_TYPEQUAL,
-    TOK_CONST           = TOK_FIRST_TYPEQUAL,
-    TOK_VOLATILE,
-    TOK_RESTRICT,
-    TOK_LAST_TYPEQUAL   = TOK_RESTRICT,
-
-    /* Function specifiers */
-    TOK_INLINE,
-    TOK_FASTCALL,
-    TOK_CDECL,
-
-    /* Tokens denoting types */
-    TOK_FIRST_TYPE,
-    TOK_ENUM            = TOK_FIRST_TYPE,
-    TOK_CHAR,
-    TOK_INT,
-    TOK_DOUBLE,
-    TOK_FLOAT,
-    TOK_LONG,
-    TOK_UNSIGNED,
-    TOK_SIGNED,
-    TOK_SHORT,
-    TOK_STRUCT,
-    TOK_UNION,
-    TOK_VOID,
-    TOK_LAST_TYPE       = TOK_VOID,
-
-    /* Control statements */
-    TOK_DO,
-    TOK_FOR,
-    TOK_GOTO,
-    TOK_IF,
-    TOK_RETURN,
-    TOK_SWITCH,
-    TOK_WHILE,
-
-    TOK_ASM,
-    TOK_CASE,
-    TOK_DEFAULT,
-    TOK_BREAK,
-    TOK_CONTINUE,
-    TOK_ELSE,
-    TOK_ELLIPSIS,
-    TOK_SIZEOF,
-
-    TOK_IDENT,
-    TOK_SEMI,
-
-    /* Primary operators */
-    TOK_LBRACK,
-    TOK_LPAREN,
-    TOK_DOT,
-    TOK_PTR_REF,
-
-    TOK_LCURLY,
-    TOK_RBRACK,
-    TOK_COMP,
-    TOK_INC,
-    TOK_PLUS_ASSIGN,
-    TOK_PLUS,
-    TOK_COMMA,
-    TOK_DEC,
-    TOK_MINUS_ASSIGN,
-    TOK_RCURLY,
-    TOK_MINUS,
-    TOK_MUL_ASSIGN,
-    TOK_STAR,
-    TOK_MUL = TOK_STAR,         /* Alias */
-    TOK_DIV_ASSIGN,
-    TOK_DIV,
-    TOK_BOOL_AND,
-    TOK_AND_ASSIGN,
-    TOK_AND,
-    TOK_NE,
-    TOK_BOOL_NOT,
-    TOK_BOOL_OR,
-    TOK_OR_ASSIGN,
-    TOK_OR,
-    TOK_EQ,
-    TOK_ASSIGN,
-
-    /* Inequalities */
-    TOK_LE,
-    TOK_LT,
-    TOK_GE,
-    TOK_GT,
-
-    TOK_SHL_ASSIGN,
-    TOK_SHL,
-    TOK_SHR_ASSIGN,
-    TOK_SHR,
-    TOK_XOR_ASSIGN,
-    TOK_XOR,
-    TOK_MOD_ASSIGN,
-    TOK_MOD,
-    TOK_QUEST,
-    TOK_COLON,
-    TOK_RPAREN,
-    TOK_SCONST,
-    TOK_ICONST,
-    TOK_CCONST,
-    TOK_FCONST,
-    TOK_WCSCONST,
-
-    TOK_ATTRIBUTE,
-    TOK_FAR,
-    TOK_NEAR,
-    TOK_A,
-    TOK_X,
-    TOK_Y,
-    TOK_AX,
-    TOK_EAX,
-
-    TOK_PRAGMA
-} token_t;
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Forward for struct Literal */
-struct Literal;
-
-/* Token stuff */
-typedef struct Token Token;
-struct Token {
-    token_t         Tok;        /* The token itself */
-    long            IVal;       /* The integer attribute */
-    Double          FVal;       /* The float attribute */
-    struct Literal* SVal;       /* String literal is any */
-    ident           Ident;      /* Identifier if IDENT */
-    LineInfo*       LI;         /* Source line where the token comes from */
-    Type*           Type;       /* Type if integer or float constant */
-};
-
-extern Token CurTok;            /* The current token */
-extern Token NextTok;           /* The next token */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-#if defined(HAVE_INLINE)
-INLINE int TokIsStorageClass (const Token* T)
-/* Return true if the token is a storage class specifier */
-{
-    return (T->Tok >= TOK_FIRST_STORAGE_CLASS && T->Tok <= TOK_LAST_STORAGE_CLASS);
-}
-#else
-#  define TokIsStorageClass(T)  \
-        ((T)->Tok >= TOK_FIRST_STORAGE_CLASS && (T)->Tok <= TOK_LAST_STORAGE_CLASS)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int TokIsType (const Token* T)
-/* Return true if the token is a type */
-{
-    return (T->Tok >= TOK_FIRST_TYPE && T->Tok <= TOK_LAST_TYPE);
-}
-#else
-#  define TokIsType(T)  ((T)->Tok >= TOK_FIRST_TYPE && (T)->Tok <= TOK_LAST_TYPE)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int TokIsTypeQual (const Token* T)
-/* Return true if the token is a type qualifier */
-{
-    return (T->Tok >= TOK_FIRST_TYPEQUAL && T->Tok <= TOK_LAST_TYPEQUAL);
-}
-#else
-#  define TokIsTypeQual(T)  ((T)->Tok >= TOK_FIRST_TYPEQUAL && (T)->Tok <= TOK_LAST_TYPEQUAL)
-#endif
-
-int TokIsFuncSpec (const Token* T);
-/* Return true if the token is a function specifier */
-
-void SymName (char* S);
-/* Read a symbol from the input stream. The first character must have been
-** checked before calling this function. The buffer is expected to be at
-** least of size MAX_IDENTLEN+1.
-*/
-
-int IsSym (char* S);
-/* If a symbol follows, read it and return 1, otherwise return 0 */
-
-void NextToken (void);
-/* Get next token from input stream */
-
-void SkipTokens (const token_t* TokenList, unsigned TokenCount);
-/* Skip tokens until we reach TOK_CEOF or a token in the given token list.
-** This routine is used for error recovery.
-*/
-
-int Consume (token_t Token, const char* ErrorMsg);
-/* Eat token if it is the next in the input stream, otherwise print an error
-** message. Returns true if the token was found and false otherwise.
-*/
-
-int ConsumeColon (void);
-/* Check for a colon and skip it. */
-
-int ConsumeSemi (void);
-/* Check for a semicolon and skip it. */
-
-int ConsumeComma (void);
-/* Check for a comma and skip it. */
-
-int ConsumeLParen (void);
-/* Check for a left parenthesis and skip it */
-
-int ConsumeRParen (void);
-/* Check for a right parenthesis and skip it */
-
-int ConsumeLBrack (void);
-/* Check for a left bracket and skip it */
-
-int ConsumeRBrack (void);
-/* Check for a right bracket and skip it */
-
-int ConsumeLCurly (void);
-/* Check for a left curly brace and skip it */
-
-int ConsumeRCurly (void);
-/* Check for a right curly brace and skip it */
-
-
-
-/* End of scanner.h */
-
-#endif
diff --git a/src/cc65/scanstrbuf.c b/src/cc65/scanstrbuf.c
deleted file mode 100644 (file)
index 91abc8c..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 scanstrbuf.c                              */
-/*                                                                           */
-/*                     Small scanner for input from a StrBuf                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "chartype.h"
-#include "tgttrans.h"
-
-/* cc65 */
-#include "datatype.h"
-#include "error.h"
-#include "hexval.h"
-#include "ident.h"
-#include "scanstrbuf.h"
-
-
-
-/*****************************************************************************/
-/*                               Helper functions                            */
-/*****************************************************************************/
-
-
-
-static int ParseChar (StrBuf* B)
-/* Parse a character. Converts \n into EOL, etc. */
-{
-    unsigned I;
-    unsigned Val;
-    int C;
-
-    /* Check for escape chars */
-    if ((C = SB_Get (B)) == '\\') {
-        switch (SB_Peek (B)) {
-            case '?':
-                C = '?';
-                SB_Skip (B);
-                break;
-            case 'a':
-                C = '\a';
-                SB_Skip (B);
-                break;
-            case 'b':
-                C = '\b';
-                SB_Skip (B);
-                break;
-            case 'f':
-                C = '\f';
-                SB_Skip (B);
-                break;
-            case 'r':
-                C = '\r';
-                SB_Skip (B);
-                break;
-            case 'n':
-                C = '\n';
-                SB_Skip (B);
-                break;
-            case 't':
-                C = '\t';
-                SB_Skip (B);
-                break;
-            case 'v':
-                C = '\v';
-                SB_Skip (B);
-                break;
-            case '\"':
-                C = '\"';
-                SB_Skip (B);
-                break;
-            case '\'':
-                C = '\'';
-                SB_Skip (B);
-                break;
-            case '\\':
-                C = '\\';
-                SB_Skip (B);
-                break;
-            case 'x':
-            case 'X':
-                /* Hex character constant */
-                SB_Skip (B);
-                C = HexVal (SB_Get (B)) << 4;
-                C |= HexVal (SB_Get (B));
-                break;
-            case '0':
-            case '1':
-            case '2':
-            case '3':
-            case '4':
-            case '5':
-            case '6':
-            case '7':
-                /* Octal constant */
-                I = 0;
-                Val = SB_Get (B) - '0';
-                while (SB_Peek (B) >= '0' && SB_Peek (B) <= '7' && ++I <= 3) {
-                    Val = (Val << 3) | (SB_Get (B) - '0');
-                }
-                C = (int) Val;
-                if (Val > 256) {
-                    Error ("Character constant out of range");
-                    C = ' ';
-                }
-                break;
-            default:
-                Error ("Illegal character constant 0x%02X", SB_Get (B));
-                C = ' ';
-                break;
-        }
-    }
-
-    /* Return the character */
-    return C;
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void SB_SkipWhite (StrBuf* B)
-/* Skip whitespace in the string buffer */
-{
-    while (IsBlank (SB_Peek (B))) {
-        SB_Skip (B);
-    }
-}
-
-
-
-int SB_GetSym (StrBuf* B, StrBuf* Ident, const char* SpecialChars)
-/* Get a symbol from the string buffer. If SpecialChars is not NULL, it
-** points to a string that contains characters allowed within the string in
-** addition to letters, digits and the underline. Note: The identifier must
-** still begin with a letter.
-** Returns 1 if a symbol was found and 0 otherwise but doesn't output any
-** errors.
-*/
-{
-    /* Handle a NULL argument for SpecialChars transparently */
-    if (SpecialChars == 0) {
-        SpecialChars = "";
-    }
-
-    /* Clear Ident */
-    SB_Clear (Ident);
-
-    if (IsIdent (SB_Peek (B))) {
-        char C = SB_Peek (B);
-        do {
-            SB_AppendChar (Ident, C);
-            SB_Skip (B);
-            C = SB_Peek (B);
-        } while (IsIdent (C) || IsDigit (C) || 
-                 (C != '\0' && strchr (SpecialChars, C) != 0));
-        SB_Terminate (Ident);
-        return 1;
-    } else {
-        return 0;
-    }
-}
-
-
-
-int SB_GetString (StrBuf* B, StrBuf* S)
-/* Get a string from the string buffer. Returns 1 if a string was found and 0
-** otherwise. Errors are only output in case of invalid strings (missing end
-** of string).
-*/
-{
-    char C;
-
-    /* Clear S */
-    SB_Clear (S);
-
-    /* A string starts with quote marks */
-    if (SB_Peek (B) == '\"') {
-
-        /* String follows, be sure to concatenate strings */
-        while (SB_Peek (B) == '\"') {
-
-            /* Skip the quote char */
-            SB_Skip (B);
-
-            /* Read the actual string contents */
-            while ((C = SB_Peek (B)) != '\"') {
-                if (C == '\0') {
-                    Error ("Unexpected end of string");
-                    break;
-                }
-                SB_AppendChar (S, ParseChar (B));
-            }
-
-            /* Skip the closing quote char if there was one */
-            SB_Skip (B);
-
-            /* Skip white space, read new input */
-            SB_SkipWhite (B);
-        }
-
-        /* Terminate the string */
-        SB_Terminate (S);
-
-        /* Success */
-        return 1;
-
-    } else {
-
-        /* Not a string */
-        SB_Terminate (S);
-        return 0;
-    }
-}
-
-
-
-int SB_GetNumber (StrBuf* B, long* Val)
-/* Get a number from the string buffer. Accepted formats are decimal, octal,
-** hex and character constants. Numeric constants may be preceeded by a
-** minus or plus sign. The function returns 1 if a number was found and
-** zero otherwise. Errors are only output for invalid numbers.
-*/
-{
-    int      Sign;
-    char     C;
-    unsigned Base;
-    unsigned DigitVal;
-
-
-    /* Initialize Val */
-    *Val = 0;
-
-    /* Handle character constants */
-    if (SB_Peek (B) == '\'') {
-
-        /* Character constant */
-        SB_Skip (B);
-        *Val = SignExtendChar (TgtTranslateChar (ParseChar (B)));
-        if (SB_Peek (B) != '\'') {
-            Error ("`\'' expected");
-            return 0;
-        } else {
-            /* Skip the quote */
-            SB_Skip (B);
-            return 1;
-        }
-    }
-
-    /* Check for a sign. A sign must be followed by a digit, otherwise it's
-    ** not a number
-    */
-    Sign = 1;
-    switch (SB_Peek (B)) {
-        case '-':
-            Sign = -1;
-            /* FALLTHROUGH */
-        case '+':
-            if (!IsDigit (SB_LookAt (B, SB_GetIndex (B) + 1))) {
-                return 0;
-            }
-            SB_Skip (B);
-            break;
-    }
-
-    /* We must have a digit now, otherwise its not a number */
-    C = SB_Peek (B);
-    if (!IsDigit (C)) {
-        return 0;
-    }
-
-    /* Determine the base */
-    if (C == '0') {
-        /* Hex or octal */
-        SB_Skip (B);
-        if (tolower (SB_Peek (B)) == 'x') {
-            SB_Skip (B);
-            Base = 16;
-            if (!IsXDigit (SB_Peek (B))) {
-                Error ("Invalid hexadecimal number");
-                return 0;
-            }
-        } else {
-            Base = 8;
-        }
-    } else {
-        Base = 10;
-    }
-
-    /* Read the number */
-    while (IsXDigit (C = SB_Peek (B)) && (DigitVal = HexVal (C)) < Base) {
-        *Val = (*Val * Base) + DigitVal;
-        SB_Skip (B);
-    }
-
-    /* Allow optional 'U' and 'L' modifiers */
-    C = SB_Peek (B);
-    if (C == 'u' || C == 'U') {
-        SB_Skip (B);
-        C = SB_Peek (B);
-        if (C == 'l' || C == 'L') {
-            SB_Skip (B);
-        }
-    } else if (C == 'l' || C == 'L') {
-        SB_Skip (B);
-        C = SB_Peek (B);
-        if (C == 'u' || C == 'U') {
-            SB_Skip (B);
-        }
-    }
-
-    /* Success, value read is in Val */
-    *Val *= Sign;
-    return 1;
-}
diff --git a/src/cc65/scanstrbuf.h b/src/cc65/scanstrbuf.h
deleted file mode 100644 (file)
index 4fba598..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 scanstrbuf.h                              */
-/*                                                                           */
-/*                     Small scanner for input from a StrBuf                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SCANSTRBUF_H
-#define SCANSTRBUF_H
-
-
-
-/* common */
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void SB_SkipWhite (StrBuf* B);
-/* Skip whitespace in the string buffer */
-
-int SB_GetSym (StrBuf* B, StrBuf* Ident, const char* SpecialChars);
-/* Get a symbol from the string buffer. If SpecialChars is not NULL, it
-** points to a string that contains characters allowed within the string in
-** addition to letters, digits and the underline. Note: The identifier must
-** still begin with a letter.
-** Returns 1 if a symbol was found and 0 otherwise but doesn't output any
-** errors.
-*/
-
-int SB_GetString (StrBuf* B, StrBuf* S);
-/* Get a string from the string buffer. Returns 1 if a string was found and 0
-** otherwise. Errors are only output in case of invalid strings (missing end
-** of string).
-*/
-
-int SB_GetNumber (StrBuf* B, long* Val);
-/* Get a number from the string buffer. Accepted formats are decimal, octal,
-** hex and character constants. Numeric constants may be preceeded by a
-** minus or plus sign. The function returns 1 if a number was found and
-** zero otherwise. Errors are only output for invalid numbers.
-*/
-
-
-
-/* End of scanstrbuf.h */
-
-#endif
diff --git a/src/cc65/segments.c b/src/cc65/segments.c
deleted file mode 100644 (file)
index 5e493e8..0000000
+++ /dev/null
@@ -1,302 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                segments.c                                 */
-/*                                                                           */
-/*                   Lightweight segment management stuff                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdarg.h>
-#include <string.h>
-
-/* common */
-#include "chartype.h"
-#include "check.h"
-#include "coll.h"
-#include "scanner.h"
-#include "segnames.h"
-#include "strstack.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "codeent.h"
-#include "codeseg.h"
-#include "dataseg.h"
-#include "error.h"
-#include "textseg.h"
-#include "segments.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Pointer to the current segment list. Output goes here. */
-Segments* CS = 0;
-
-/* Pointer to the global segment list */
-Segments* GS = 0;
-
-/* Actual names for the segments */
-static StrStack SegmentNames[SEG_COUNT];
-
-/* We're using a collection for the stack instead of a linked list. Since
-** functions may not be nested (at least in the current implementation), the
-** maximum stack depth is 2, so there is not really a need for a better
-** implementation.
-*/
-static Collection SegmentStack = STATIC_COLLECTION_INITIALIZER;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void InitSegNames (void)
-/* Initialize the segment names */
-{
-    SS_Push (&SegmentNames[SEG_BSS], SEGNAME_BSS);
-    SS_Push (&SegmentNames[SEG_CODE], SEGNAME_CODE);
-    SS_Push (&SegmentNames[SEG_DATA], SEGNAME_DATA);
-    SS_Push (&SegmentNames[SEG_RODATA], SEGNAME_RODATA);
-}
-
-
-
-void SetSegName (segment_t Seg, const char* Name)
-/* Set a new name for a segment */
-{
-    SS_Set (&SegmentNames[Seg], Name);
-}
-
-
-
-void PushSegName (segment_t Seg, const char* Name)
-/* Push the current segment name and set a new name for a segment */
-{
-    if (SS_IsFull (&SegmentNames[Seg])) {
-        Error ("Segment name stack overflow");
-    } else {
-        SS_Push (&SegmentNames[Seg], Name);
-    }
-}
-
-
-
-void PopSegName (segment_t Seg)
-/* Restore a segment name from the segment name stack */
-{
-    if (SS_GetCount (&SegmentNames[Seg]) < 2) {
-        Error ("Segment name stack is empty");
-    } else {
-        SS_Drop (&SegmentNames[Seg]);
-    }
-}
-
-
-
-const char* GetSegName (segment_t Seg)
-/* Get the name of the given segment */
-{
-    return SS_Get (&SegmentNames[Seg]);
-}
-
-
-
-static Segments* NewSegments (SymEntry* Func)
-/* Initialize a Segments structure (set all fields to NULL) */
-{
-    /* Allocate memory */
-    Segments* S = xmalloc (sizeof (Segments));
-
-    /* Initialize the fields */
-    S->Text     = NewTextSeg (Func);
-    S->Code     = NewCodeSeg (GetSegName (SEG_CODE), Func);
-    S->Data     = NewDataSeg (GetSegName (SEG_DATA), Func);
-    S->ROData   = NewDataSeg (GetSegName (SEG_RODATA), Func);
-    S->BSS      = NewDataSeg (GetSegName (SEG_BSS), Func);
-    S->CurDSeg  = SEG_DATA;
-
-    /* Return the new struct */
-    return S;
-}
-
-
-
-Segments* PushSegments (SymEntry* Func)
-/* Make the new segment list current but remember the old one */
-{
-    /* Push the current pointer onto the stack */
-    CollAppend (&SegmentStack, CS);
-
-    /* Create a new Segments structure */
-    CS = NewSegments (Func);
-
-    /* Return the new struct */
-    return CS;
-}
-
-
-
-void PopSegments (void)
-/* Pop the old segment list (make it current) */
-{
-    /* Must have something on the stack */
-    PRECONDITION (CollCount (&SegmentStack) > 0);
-
-    /* Pop the last segment and set it as current */
-    CS = CollPop (&SegmentStack);
-}
-
-
-
-void CreateGlobalSegments (void)
-/* Create the global segments and remember them in GS */
-{
-    GS = PushSegments (0);
-}
-
-
-
-void UseDataSeg (segment_t DSeg)
-/* For the current segment list, use the data segment DSeg */
-{
-    /* Check the input */
-    PRECONDITION (CS && DSeg != SEG_CODE);
-
-    /* Set the new segment to use */
-    CS->CurDSeg = DSeg;
-}
-
-
-
-struct DataSeg* GetDataSeg (void)
-/* Return the current data segment */
-{
-    PRECONDITION (CS != 0);
-    switch (CS->CurDSeg) {
-        case SEG_BSS:     return CS->BSS;
-        case SEG_DATA:    return CS->Data;
-        case SEG_RODATA:  return CS->ROData;
-        default:
-            FAIL ("Invalid data segment");
-            return 0;
-    }
-}
-
-
-
-void AddTextLine (const char* Format, ...)
-/* Add a line of code to the current text segment */
-{
-    va_list ap;
-    va_start (ap, Format);
-    CHECK (CS != 0);
-    TS_AddVLine (CS->Text, Format, ap);
-    va_end (ap);
-}
-
-
-
-void AddCodeLine (const char* Format, ...)
-/* Add a line of code to the current code segment */
-{
-    va_list ap;
-    va_start (ap, Format);
-    CHECK (CS != 0);
-    CS_AddVLine (CS->Code, CurTok.LI, Format, ap);
-    va_end (ap);
-}
-
-
-
-void AddCode (opc_t OPC, am_t AM, const char* Arg, struct CodeLabel* JumpTo)
-/* Add a code entry to the current code segment */
-{
-    CHECK (CS != 0);
-    CS_AddEntry (CS->Code, NewCodeEntry (OPC, AM, Arg, JumpTo, CurTok.LI));
-}
-
-
-
-void AddDataLine (const char* Format, ...)
-/* Add a line of data to the current data segment */
-{
-    va_list ap;
-    va_start (ap, Format);
-    CHECK (CS != 0);
-    DS_AddVLine (GetDataSeg(), Format, ap);
-    va_end (ap);
-}
-
-
-
-int HaveGlobalCode (void)
-/* Return true if the global code segment contains entries (which is an error) */
-{
-    return (CS_GetEntryCount (GS->Code) > 0);
-}
-
-
-
-void RemoveGlobalCode (void)
-/* Remove all code from the global code segment. Used for error recovery. */
-{
-    CS_DelEntries (GS->Code, 0, CS_GetEntryCount (GS->Code));
-}
-
-
-
-void OutputSegments (const Segments* S)
-/* Output the given segments to the output file */
-{
-    /* Output the function prologue if the segments came from a function */
-    CS_OutputPrologue (S->Code);
-
-    /* Output the text segment */
-    TS_Output (S->Text);
-
-    /* Output the three data segments */
-    DS_Output (S->Data);
-    DS_Output (S->ROData);
-    DS_Output (S->BSS);
-
-    /* Output the code segment */
-    CS_Output (S->Code);
-
-    /* Output the code segment epiloque */
-    CS_OutputEpilogue (S->Code);
-}
diff --git a/src/cc65/segments.h b/src/cc65/segments.h
deleted file mode 100644 (file)
index f55be68..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                segments.h                                 */
-/*                                                                           */
-/*                            Segment management                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SEGMENTS_H
-#define SEGMENTS_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "attrib.h"
-
-/* cc65 */
-#include "opcodes.h"
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-struct CodeEntry;
-struct CodeLabel;
-struct CodeSeg;
-struct DataSeg;
-struct TextSeg;
-struct SymEntry;
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Segment types */
-typedef enum segment_t {
-    SEG_CODE,
-    SEG_RODATA,
-    SEG_DATA,
-    SEG_BSS,
-    SEG_COUNT
-} segment_t;
-
-/* A list of all segments used when generating code */
-typedef struct Segments Segments;
-struct Segments {
-    struct TextSeg*     Text;           /* Text segment */
-    struct CodeSeg*     Code;           /* Code segment */
-    struct DataSeg*     Data;           /* Data segment */
-    struct DataSeg*     ROData;         /* Readonly data segment */
-    struct DataSeg*     BSS;            /* Segment for uninitialized data */
-    segment_t           CurDSeg;        /* Current data segment */
-};
-
-/* Pointer to the current segment list. Output goes here. */
-extern Segments* CS;
-
-/* Pointer to the global segment list */
-extern Segments* GS;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void InitSegNames (void);
-/* Initialize the segment names */
-
-void SetSegName (segment_t Seg, const char* Name);
-/* Set a new name for a segment */
-
-void PushSegName (segment_t Seg, const char* Name);
-/* Push the current segment name and set a new name for a segment */
-
-void PopSegName (segment_t Seg);
-/* Restore a segment name from the segment name stack */
-
-const char* GetSegName (segment_t Seg);
-/* Get the name of the given segment */
-
-Segments* PushSegments (struct SymEntry* Func);
-/* Make the new segment list current but remember the old one */
-
-void PopSegments (void);
-/* Pop the old segment list (make it current) */
-
-void CreateGlobalSegments (void);
-/* Create the global segments and remember them in GS */
-
-void UseDataSeg (segment_t DSeg);
-/* For the current segment list, use the data segment DSeg */
-
-struct DataSeg* GetDataSeg (void);
-/* Return the current data segment */
-
-void AddTextLine (const char* Format, ...) attribute ((format (printf, 1, 2)));
-/* Add a line to the current text segment */
-
-void AddCodeLine (const char* Format, ...) attribute ((format (printf, 1, 2)));
-/* Add a line of code to the current code segment */
-
-void AddCode (opc_t OPC, am_t AM, const char* Arg, struct CodeLabel* JumpTo);
-/* Add a code entry to the current code segment */
-
-void AddDataLine (const char* Format, ...) attribute ((format (printf, 1, 2)));
-/* Add a line of data to the current data segment */
-
-int HaveGlobalCode (void);
-/* Return true if the global code segment contains entries (which is an error) */
-
-void RemoveGlobalCode (void);
-/* Remove all code from the global code segment. Used for error recovery. */
-
-void OutputSegments (const Segments* S);
-/* Output the given segments to the output file */
-
-
-
-/* End of segments.h */
-
-#endif
diff --git a/src/cc65/shiftexpr.c b/src/cc65/shiftexpr.c
deleted file mode 100644 (file)
index c61514f..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                shiftexpr.c                                */
-/*                                                                           */
-/*                       Parse the << and >> operators                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004-2006 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* cc65 */
-#include "asmcode.h"
-#include "codegen.h"
-#include "datatype.h"
-#include "error.h"
-#include "expr.h"
-#include "exprdesc.h"
-#include "loadexpr.h"
-#include "scanner.h"
-#include "shiftexpr.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void ShiftExpr (struct ExprDesc* Expr)
-/* Parse the << and >> operators. */
-{
-    ExprDesc Expr2;
-    CodeMark Mark1;
-    CodeMark Mark2;
-    token_t Tok;                        /* The operator token */
-    Type* EffType;                      /* Effective lhs type */
-    Type* ResultType;                   /* Type of the result */
-    unsigned ExprBits;                  /* Bits of the lhs operand */
-    unsigned GenFlags;                  /* Generator flags */
-    unsigned ltype;
-    int rconst;                         /* Operand is a constant */
-
-
-    /* Evaluate the lhs */
-    ExprWithCheck (hie8, Expr);
-
-    while (CurTok.Tok == TOK_SHL || CurTok.Tok == TOK_SHR) {
-
-        /* All operators that call this function expect an int on the lhs */
-        if (!IsClassInt (Expr->Type)) {
-            Error ("Integer expression expected");
-            ED_MakeConstAbsInt (Expr, 1);
-        }
-
-        /* Remember the operator token, then skip it */
-        Tok = CurTok.Tok;
-        NextToken ();
-
-        /* Get the type of the result */
-        ResultType = EffType = IntPromotion (Expr->Type);
-
-        /* Prepare the code generator flags */
-        GenFlags = TypeOf (ResultType);
-
-        /* Calculate the number of bits the lhs operand has */
-        ExprBits = SizeOf (ResultType) * 8;
-
-        /* Get the lhs on stack */
-        GetCodePos (&Mark1);
-        ltype = TypeOf (Expr->Type);
-        if (ED_IsConstAbs (Expr)) {
-            /* Constant value */
-            GetCodePos (&Mark2);
-            g_push (ltype | CF_CONST, Expr->IVal);
-        } else {
-            /* Value not constant */
-            LoadExpr (CF_NONE, Expr);
-            GetCodePos (&Mark2);
-            g_push (ltype, 0);
-        }
-
-        /* Get the right hand side */
-        ExprWithCheck (hie8, &Expr2);
-
-        /* Check the type of the rhs */
-        if (!IsClassInt (Expr2.Type)) {
-            Error ("Integer expression expected");
-            ED_MakeConstAbsInt (&Expr2, 1);
-        }
-
-        /* Check for a constant right side expression */
-        rconst = ED_IsConstAbs (&Expr2);
-        if (!rconst) {
-
-            /* Not constant, load into the primary */
-            LoadExpr (CF_NONE, &Expr2);
-
-        } else {
-
-            /* The rhs is a constant numeric value. */
-            GenFlags |= CF_CONST;
-
-            /* Remove the code that pushes the rhs onto the stack. */
-            RemoveCode (&Mark2);
-
-            /* If the shift count is greater or equal than the bit count of
-            ** the operand, the behaviour is undefined according to the
-            ** standard.
-            */
-            if (Expr2.IVal < 0 || Expr2.IVal >= (long) ExprBits) {
-
-                Warning ("Shift count too large for operand type");
-                Expr2.IVal &= ExprBits - 1;
-
-            }
-
-            /* If the shift count is zero, nothing happens */
-            if (Expr2.IVal == 0) {
-
-                /* Result is already in Expr, remove the generated code */
-                RemoveCode (&Mark1);
-
-                /* Done */
-                goto Next;
-            }
-
-            /* If the left hand side is a constant, the result is constant */
-            if (ED_IsConstAbs (Expr)) {
-
-                /* Evaluate the result */
-                switch (Tok) {
-                    case TOK_SHL: Expr->IVal <<= Expr2.IVal; break;
-                    case TOK_SHR: Expr->IVal >>= Expr2.IVal; break;
-                    default: /* Shutup gcc */                break;
-                }
-
-                /* Both operands are constant, remove the generated code */
-                RemoveCode (&Mark1);
-
-                /* Done */
-                goto Next;
-            }
-
-            /* If we're shifting an integer or unsigned to the right, the
-            ** lhs has a const address, and the shift count is larger than 8,
-            ** we can load just the high byte as a char with the correct
-            ** signedness, and reduce the shift count by 8. If the remaining
-            ** shift count is zero, we're done.
-            */
-            if (Tok == TOK_SHR &&
-                IsTypeInt (Expr->Type) &&
-                ED_IsLVal (Expr) &&
-                (ED_IsLocConst (Expr) || ED_IsLocStack (Expr)) &&
-                Expr2.IVal >= 8) {
-
-                Type* OldType; 
-
-                /* Increase the address by one and decrease the shift count */
-                ++Expr->IVal;
-                Expr2.IVal -= 8;
-
-                /* Replace the type of the expression temporarily by the
-                ** corresponding char type.
-                */
-                OldType = Expr->Type;
-                if (IsSignUnsigned (Expr->Type)) {
-                    Expr->Type = type_uchar;
-                } else {
-                    Expr->Type = type_schar;
-                }
-
-                /* Remove the generated load code */
-                RemoveCode (&Mark1);
-
-                /* Generate again code for the load, this time with the new type */
-                LoadExpr (CF_NONE, Expr);
-
-                /* Reset the type */
-                Expr->Type = OldType;
-
-                /* If the shift count is now zero, we're done */
-                if (Expr2.IVal == 0) {
-                    /* Be sure to mark the value as in the primary */
-                    goto MakeRVal;
-                }
-            }
-
-        }
-
-        /* Generate code */
-        switch (Tok) {
-            case TOK_SHL: g_asl (GenFlags, Expr2.IVal); break;
-            case TOK_SHR: g_asr (GenFlags, Expr2.IVal); break;
-            default:                                    break;
-        }
-
-MakeRVal:
-        /* We have a rvalue in the primary now */
-        ED_MakeRValExpr (Expr);
-
-Next:
-        /* Set the type of the result */
-        Expr->Type = ResultType;
-    }
-}
diff --git a/src/cc65/shiftexpr.h b/src/cc65/shiftexpr.h
deleted file mode 100644 (file)
index 2a000fd..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                shiftexpr.h                                */
-/*                                                                           */
-/*                       Parse the << and >> operators                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004      Ullrich von Bassewitz                                       */
-/*               Römerstraße 52                                              */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SHIFTEXPR_H
-#define SHIFTEXPR_H
-
-
-
-/* common */
-#include "intstack.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Forward */
-struct ExprDesc;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void ShiftExpr (struct ExprDesc* Expr);
-/* Parse the << and >> operators. */
-
-
-
-/* End of shiftexpr.h */
-
-#endif
diff --git a/src/cc65/stackptr.c b/src/cc65/stackptr.c
deleted file mode 100644 (file)
index 1f10e85..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                stackptr.c                                 */
-/*                                                                           */
-/*                    Manage the parameter stack pointer                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004-2006 Ullrich von Bassewitz                                       */
-/*               Römerstraße 52                                              */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* cc65 */
-#include "stackptr.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Compiler relative stackpointer */
-int StackPtr = 0;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void SP_Push (const Type* T)
-/* Adjust the stackpointer for a push of an argument of the given type */
-{
-    StackPtr -= SizeOf (T);
-}
-
-
-
-void SP_Pop (const Type* T)
-/* Adjust the stackpointer for a pop of an argument of the given type */
-{
-    StackPtr += SizeOf (T);
-}
diff --git a/src/cc65/stackptr.h b/src/cc65/stackptr.h
deleted file mode 100644 (file)
index 4f90f8d..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                stackptr.h                                 */
-/*                                                                           */
-/*                    Manage the parameter stack pointer                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004-2006 Ullrich von Bassewitz                                       */
-/*               Römerstraße 52                                              */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef STACKPTR_H
-#define STACKPTR_H
-
-
-
-/* cc65 */
-#include "datatype.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Compiler relative stackpointer */
-extern int StackPtr;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void SP_Push (const Type* T);
-/* Adjust the stackpointer for a push of an argument of the given type */
-
-void SP_Pop (const Type* T);
-/* Adjust the stackpointer for a pop of an argument of the given type */
-
-
-
-/* End of stackptr.h */
-
-#endif
diff --git a/src/cc65/standard.c b/src/cc65/standard.c
deleted file mode 100644 (file)
index 36897a0..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                standard.c                                 */
-/*                                                                           */
-/*                       Language standard definitions                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004      Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* cc65 */
-#include "standard.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Current language standard, will be set to STD_DEFAULT on startup */
-IntStack Standard           = INTSTACK(STD_UNKNOWN);
-
-/* Table mapping names to standards, sorted by standard. */
-static const char* StdNames[STD_COUNT] = {
-    "c89", "c99", "cc65"
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-standard_t FindStandard (const char* Name)
-/* Find a standard by name. Returns one of the constants defined above.
-** STD_UNKNOWN is returned if Name doesn't match a standard.
-*/
-{
-    unsigned I;
-
-    /* Check for a standard string */
-    for (I = 0; I < STD_COUNT; ++I) {
-        if (strcmp (StdNames [I], Name) == 0) {
-            return (standard_t)I;
-        }
-    }
-
-    /* Not found */
-    return STD_UNKNOWN;
-}
diff --git a/src/cc65/standard.h b/src/cc65/standard.h
deleted file mode 100644 (file)
index b0bc848..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                standard.h                                 */
-/*                                                                           */
-/*                       Language standard definitions                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004      Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef STANDARD_H
-#define STANDARD_H
-
-
-
-/* common */
-#include "intstack.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Supported standards. */
-typedef enum standard_t {
-    STD_UNKNOWN = -1,
-    STD_C89,
-    STD_C99,
-    STD_CC65,
-
-    /* Special constants */
-    STD_COUNT,                  /* Number of supported standards */
-    STD_DEFAULT = STD_CC65      /* Default standard if none given */
-} standard_t;
-
-/* Current language standard */
-extern IntStack         Standard;               /* Language standard */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-standard_t FindStandard (const char* Name);
-/* Find a standard by name. Returns one of the constants defined above.
-** STD_UNKNOWN is returned if Name doesn't match a standard.
-*/
-
-
-
-/* End of standard.h */
-
-#endif
diff --git a/src/cc65/stdfunc.c b/src/cc65/stdfunc.c
deleted file mode 100644 (file)
index 182cad1..0000000
+++ /dev/null
@@ -1,1328 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 stdfunc.c                                 */
-/*                                                                           */
-/*         Handle inlining of known functions for the cc65 compiler          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2010 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-#include <string.h>
-
-/* common */
-#include "attrib.h"
-#include "check.h"
-
-/* cc65 */
-#include "asmcode.h"
-#include "asmlabel.h"
-#include "codegen.h"
-#include "error.h"
-#include "funcdesc.h"
-#include "global.h"
-#include "litpool.h"
-#include "loadexpr.h"
-#include "scanner.h"
-#include "stackptr.h"
-#include "stdfunc.h"
-#include "stdnames.h"
-#include "typeconv.h"
-
-
-
-/*****************************************************************************/
-/*                             Function forwards                             */
-/*****************************************************************************/
-
-
-
-static void StdFunc_memcpy (FuncDesc*, ExprDesc*);
-static void StdFunc_memset (FuncDesc*, ExprDesc*);
-static void StdFunc_strcmp (FuncDesc*, ExprDesc*);
-static void StdFunc_strcpy (FuncDesc*, ExprDesc*);
-static void StdFunc_strlen (FuncDesc*, ExprDesc*);
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Table with all known functions and their handlers. Must be sorted
-** alphabetically!
-*/
-static struct StdFuncDesc {
-    const char*         Name;
-    void                (*Handler) (FuncDesc*, ExprDesc*);
-} StdFuncs[] = {
-    {   "memcpy",       StdFunc_memcpy          },
-    {   "memset",       StdFunc_memset          },
-    {   "strcmp",       StdFunc_strcmp          },
-    {   "strcpy",       StdFunc_strcpy          },
-    {   "strlen",       StdFunc_strlen          },
-
-};
-#define FUNC_COUNT      (sizeof (StdFuncs) / sizeof (StdFuncs[0]))
-
-typedef struct ArgDesc ArgDesc;
-struct ArgDesc {
-    const Type* ArgType;        /* Required argument type */
-    ExprDesc    Expr;           /* Argument expression */
-    const Type* Type;           /* The original type before conversion */
-    CodeMark    Load;           /* Start of argument load code */
-    CodeMark    Push;           /* Start of argument push code */
-    CodeMark    End;            /* End of the code for calculation+push */
-    unsigned    Flags;          /* Code generation flags */
-};
-
-
-
-/*****************************************************************************/
-/*                             Helper functions                              */
-/*****************************************************************************/
-
-
-
-static int CmpFunc (const void* Key, const void* Elem)
-/* Compare function for bsearch */
-{
-    return strcmp ((const char*) Key, ((const struct StdFuncDesc*) Elem)->Name);
-}
-
-
-
-static long ArrayElementCount (const ArgDesc* Arg)
-/* Check if the type of the given argument is an array. If so, and if the
-** element count is known, return it. In all other cases, return UNSPECIFIED.
-*/
-{
-    long Count;
-
-    if (IsTypeArray (Arg->Type)) {
-        Count = GetElementCount (Arg->Type);
-        if (Count == FLEXIBLE) {
-            /* Treat as unknown */
-            Count = UNSPECIFIED;
-        }
-    } else {
-        Count = UNSPECIFIED;
-    }
-    return Count;
-}
-
-
-
-static void ParseArg (ArgDesc* Arg, Type* Type)
-/* Parse one argument but do not push it onto the stack. Make all fields in
-** Arg valid.
-*/
-{
-    /* We have a prototype, so chars may be pushed as chars */
-    Arg->Flags = CF_FORCECHAR;
-
-    /* Remember the required argument type */
-    Arg->ArgType = Type;
-
-    /* Read the expression we're going to pass to the function */
-    MarkedExprWithCheck (hie1, &Arg->Expr);
-
-    /* Remember the actual argument type */
-    Arg->Type = Arg->Expr.Type;
-
-    /* Convert this expression to the expected type */
-    TypeConversion (&Arg->Expr, Type);
-
-    /* Remember the following code position */
-    GetCodePos (&Arg->Load);
-
-    /* If the value is a constant, set the flag, otherwise load it into the
-    ** primary register.
-    */
-    if (ED_IsConstAbsInt (&Arg->Expr) && ED_CodeRangeIsEmpty (&Arg->Expr)) {
-        /* Remember that we have a constant value */
-        Arg->Flags |= CF_CONST;
-    } else {
-        /* Load into the primary */
-        LoadExpr (CF_NONE, &Arg->Expr);
-    }
-
-    /* Remember the following code position */
-    GetCodePos (&Arg->Push);
-    GetCodePos (&Arg->End);
-
-    /* Use the type of the argument for the push */
-    Arg->Flags |= TypeOf (Arg->Expr.Type);
-}
-
-
-
-/*****************************************************************************/
-/*                                  memcpy                                   */
-/*****************************************************************************/
-
-
-
-static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
-/* Handle the memcpy function */
-{
-    /* Argument types: (void*, const void*, size_t) */
-    static Type Arg1Type[] = { TYPE(T_PTR), TYPE(T_VOID), TYPE(T_END) };
-    static Type Arg2Type[] = { TYPE(T_PTR), TYPE(T_VOID|T_QUAL_CONST), TYPE(T_END) };
-    static Type Arg3Type[] = { TYPE(T_SIZE_T), TYPE(T_END) };
-
-    ArgDesc  Arg1, Arg2, Arg3;
-    unsigned ParamSize = 0;
-    unsigned Label;
-    int      Offs;
-
-    /* Argument #1 */
-    ParseArg (&Arg1, Arg1Type);
-    g_push (Arg1.Flags, Arg1.Expr.IVal);
-    GetCodePos (&Arg1.End);
-    ParamSize += SizeOf (Arg1Type);
-    ConsumeComma ();
-
-    /* Argument #2 */
-    ParseArg (&Arg2, Arg2Type);
-    g_push (Arg2.Flags, Arg2.Expr.IVal);
-    GetCodePos (&Arg2.End);
-    ParamSize += SizeOf (Arg2Type);
-    ConsumeComma ();
-
-    /* Argument #3. Since memcpy is a fastcall function, we must load the
-    ** arg into the primary if it is not already there. This parameter is
-    ** also ignored for the calculation of the parameter size, since it is
-    ** not passed via the stack.
-    */
-    ParseArg (&Arg3, Arg3Type);
-    if (Arg3.Flags & CF_CONST) {
-        LoadExpr (CF_NONE, &Arg3.Expr);
-    }
-
-    /* Emit the actual function call. This will also cleanup the stack. */
-    g_call (CF_FIXARGC, Func_memcpy, ParamSize);
-
-    if (ED_IsConstAbsInt (&Arg3.Expr) && Arg3.Expr.IVal == 0) {
-
-        /* memcpy has been called with a count argument of zero */
-        Warning ("Call to memcpy has no effect");
-
-        /* Remove all of the generated code but the load of the first
-        ** argument, which is what memcpy returns.
-        */
-        RemoveCode (&Arg1.Push);
-
-        /* Set the function result to the first argument */
-        *Expr = Arg1.Expr;
-
-        /* Bail out, no need for further improvements */
-        goto ExitPoint;
-    }
-
-    /* We've generated the complete code for the function now and know the
-    ** types of all parameters. Check for situations where better code can
-    ** be generated. If such a situation is detected, throw away the
-    ** generated, and emit better code.
-    */
-    if (ED_IsConstAbsInt (&Arg3.Expr) && Arg3.Expr.IVal <= 256 &&
-        ((ED_IsRVal (&Arg2.Expr) && ED_IsLocConst (&Arg2.Expr)) ||
-         (ED_IsLVal (&Arg2.Expr) && ED_IsLocRegister (&Arg2.Expr))) &&
-        ((ED_IsRVal (&Arg1.Expr) && ED_IsLocConst (&Arg1.Expr)) ||
-         (ED_IsLVal (&Arg1.Expr) && ED_IsLocRegister (&Arg1.Expr)))) {
-
-        int Reg1 = ED_IsLVal (&Arg1.Expr) && ED_IsLocRegister (&Arg1.Expr);
-        int Reg2 = ED_IsLVal (&Arg2.Expr) && ED_IsLocRegister (&Arg2.Expr);
-
-        /* Drop the generated code */
-        RemoveCode (&Arg1.Expr.Start);
-
-        /* We need a label */
-        Label = GetLocalLabel ();
-
-        /* Generate memcpy code */
-        if (Arg3.Expr.IVal <= 127) {
-
-            AddCodeLine ("ldy #$%02X", (unsigned char) (Arg3.Expr.IVal-1));
-            AddCodeLine ("lda #$%02X", (unsigned char) Arg2.Expr.IVal);
-            g_defcodelabel (Label);
-            if (Reg2) {
-                AddCodeLine ("lda (%s),y", ED_GetLabelName (&Arg2.Expr, 0));
-            } else {
-                AddCodeLine ("lda %s,y", ED_GetLabelName (&Arg2.Expr, 0));
-            }
-            if (Reg1) {
-                AddCodeLine ("sta (%s),y", ED_GetLabelName (&Arg1.Expr, 0));
-            } else {
-                AddCodeLine ("sta %s,y", ED_GetLabelName (&Arg1.Expr, 0));
-            }
-            AddCodeLine ("dey");
-            AddCodeLine ("bpl %s", LocalLabelName (Label));
-
-        } else {
-
-            AddCodeLine ("ldy #$00");
-            AddCodeLine ("lda #$%02X", (unsigned char) Arg2.Expr.IVal);
-            g_defcodelabel (Label);
-            if (Reg2) {
-                AddCodeLine ("lda (%s),y", ED_GetLabelName (&Arg2.Expr, 0));
-            } else {
-                AddCodeLine ("lda %s,y", ED_GetLabelName (&Arg2.Expr, 0));
-            }
-            if (Reg1) {
-                AddCodeLine ("sta (%s),y", ED_GetLabelName (&Arg1.Expr, 0));
-            } else {
-                AddCodeLine ("sta %s,y", ED_GetLabelName (&Arg1.Expr, 0));
-            }
-            AddCodeLine ("iny");
-            AddCodeLine ("cpy #$%02X", (unsigned char) Arg3.Expr.IVal);
-            AddCodeLine ("bne %s", LocalLabelName (Label));
-
-        }
-
-        /* memcpy returns the address, so the result is actually identical
-        ** to the first argument.
-        */
-        *Expr = Arg1.Expr;
-
-    } else if (ED_IsConstAbsInt (&Arg3.Expr) && Arg3.Expr.IVal <= 256 &&
-               ED_IsRVal (&Arg2.Expr) && ED_IsLocConst (&Arg2.Expr) &&
-               ED_IsRVal (&Arg1.Expr) && ED_IsLocStack (&Arg1.Expr) &&
-               (Arg1.Expr.IVal - StackPtr) + Arg3.Expr.IVal < 256) {
-
-        /* It is possible to just use one index register even if the stack
-        ** offset is not zero, by adjusting the offset to the constant
-        ** address accordingly. But we cannot do this if the data in
-        ** question is in the register space or at an absolute address less
-        ** than 256. Register space is zero page, which means that the
-        ** address calculation could overflow in the linker.
-        */
-        int AllowOneIndex = !ED_IsLocRegister (&Arg2.Expr) &&
-                            !(ED_IsLocAbs (&Arg2.Expr) && Arg2.Expr.IVal < 256);
-
-        /* Calculate the real stack offset */
-        Offs = ED_GetStackOffs (&Arg1.Expr, 0);
-
-        /* Drop the generated code */
-        RemoveCode (&Arg1.Expr.Start);
-
-        /* We need a label */
-        Label = GetLocalLabel ();
-
-        /* Generate memcpy code */
-        if (Arg3.Expr.IVal <= 127 && !AllowOneIndex) {
-
-            if (Offs == 0) {
-                AddCodeLine ("ldy #$%02X", (unsigned char) (Offs + Arg3.Expr.IVal - 1));
-                g_defcodelabel (Label);
-                AddCodeLine ("lda %s,y", ED_GetLabelName (&Arg2.Expr, -Offs));
-                AddCodeLine ("sta (sp),y");
-                AddCodeLine ("dey");
-                AddCodeLine ("bpl %s", LocalLabelName (Label));
-            } else {
-                AddCodeLine ("ldx #$%02X", (unsigned char) (Arg3.Expr.IVal-1));
-                AddCodeLine ("ldy #$%02X", (unsigned char) (Offs + Arg3.Expr.IVal - 1));
-                g_defcodelabel (Label);
-                AddCodeLine ("lda %s,x", ED_GetLabelName (&Arg2.Expr, 0));
-                AddCodeLine ("sta (sp),y");
-                AddCodeLine ("dey");
-                AddCodeLine ("dex");
-                AddCodeLine ("bpl %s", LocalLabelName (Label));
-            }
-
-        } else {
-
-            if (Offs == 0 || AllowOneIndex) {
-                AddCodeLine ("ldy #$%02X", (unsigned char) Offs);
-                g_defcodelabel (Label);
-                AddCodeLine ("lda %s,y", ED_GetLabelName (&Arg2.Expr, -Offs));
-                AddCodeLine ("sta (sp),y");
-                AddCodeLine ("iny");
-                AddCodeLine ("cpy #$%02X", (unsigned char) (Offs + Arg3.Expr.IVal));
-                AddCodeLine ("bne %s", LocalLabelName (Label));
-            } else {
-                AddCodeLine ("ldx #$00");
-                AddCodeLine ("ldy #$%02X", (unsigned char) Offs);
-                g_defcodelabel (Label);
-                AddCodeLine ("lda %s,x", ED_GetLabelName (&Arg2.Expr, 0));
-                AddCodeLine ("sta (sp),y");
-                AddCodeLine ("iny");
-                AddCodeLine ("inx");
-                AddCodeLine ("cpx #$%02X", (unsigned char) Arg3.Expr.IVal);
-                AddCodeLine ("bne %s", LocalLabelName (Label));
-            }
-
-        }
-
-        /* memcpy returns the address, so the result is actually identical
-        ** to the first argument.
-        */
-        *Expr = Arg1.Expr;
-
-    } else if (ED_IsConstAbsInt (&Arg3.Expr) && Arg3.Expr.IVal <= 256 &&
-               ED_IsRVal (&Arg2.Expr) && ED_IsLocStack (&Arg2.Expr) &&
-               (Arg2.Expr.IVal - StackPtr) + Arg3.Expr.IVal < 256 &&
-               ED_IsRVal (&Arg1.Expr) && ED_IsLocConst (&Arg1.Expr)) {
-
-        /* It is possible to just use one index register even if the stack
-        ** offset is not zero, by adjusting the offset to the constant
-        ** address accordingly. But we cannot do this if the data in
-        ** question is in the register space or at an absolute address less
-        ** than 256. Register space is zero page, which means that the
-        ** address calculation could overflow in the linker.
-        */
-        int AllowOneIndex = !ED_IsLocRegister (&Arg1.Expr) &&
-                            !(ED_IsLocAbs (&Arg1.Expr) && Arg1.Expr.IVal < 256);
-
-        /* Calculate the real stack offset */
-        Offs = ED_GetStackOffs (&Arg2.Expr, 0);
-
-        /* Drop the generated code */
-        RemoveCode (&Arg1.Expr.Start);
-
-        /* We need a label */
-        Label = GetLocalLabel ();
-
-        /* Generate memcpy code */
-        if (Arg3.Expr.IVal <= 127 && !AllowOneIndex) {
-
-            if (Offs == 0) {
-                AddCodeLine ("ldy #$%02X", (unsigned char) (Arg3.Expr.IVal - 1));
-                g_defcodelabel (Label);
-                AddCodeLine ("lda (sp),y");
-                AddCodeLine ("sta %s,y", ED_GetLabelName (&Arg1.Expr, 0));
-                AddCodeLine ("dey");
-                AddCodeLine ("bpl %s", LocalLabelName (Label));
-            } else {
-                AddCodeLine ("ldx #$%02X", (unsigned char) (Arg3.Expr.IVal-1));
-                AddCodeLine ("ldy #$%02X", (unsigned char) (Offs + Arg3.Expr.IVal - 1));
-                g_defcodelabel (Label);
-                AddCodeLine ("lda (sp),y");
-                AddCodeLine ("sta %s,x", ED_GetLabelName (&Arg1.Expr, 0));
-                AddCodeLine ("dey");
-                AddCodeLine ("dex");
-                AddCodeLine ("bpl %s", LocalLabelName (Label));
-            }
-
-        } else {
-
-            if (Offs == 0 || AllowOneIndex) {
-                AddCodeLine ("ldy #$%02X", (unsigned char) Offs);
-                g_defcodelabel (Label);
-                AddCodeLine ("lda (sp),y");
-                AddCodeLine ("sta %s,y", ED_GetLabelName (&Arg1.Expr, -Offs));
-                AddCodeLine ("iny");
-                AddCodeLine ("cpy #$%02X", (unsigned char) (Offs + Arg3.Expr.IVal));
-                AddCodeLine ("bne %s", LocalLabelName (Label));
-            } else {
-                AddCodeLine ("ldx #$00");
-                AddCodeLine ("ldy #$%02X", (unsigned char) Offs);
-                g_defcodelabel (Label);
-                AddCodeLine ("lda (sp),y");
-                AddCodeLine ("sta %s,x", ED_GetLabelName (&Arg1.Expr, 0));
-                AddCodeLine ("iny");
-                AddCodeLine ("inx");
-                AddCodeLine ("cpx #$%02X", (unsigned char) Arg3.Expr.IVal);
-                AddCodeLine ("bne %s", LocalLabelName (Label));
-            }
-
-        }
-
-        /* memcpy returns the address, so the result is actually identical
-        ** to the first argument.
-        */
-        *Expr = Arg1.Expr;
-
-    } else if (ED_IsConstAbsInt (&Arg3.Expr) && Arg3.Expr.IVal <= 256   &&
-               ED_IsRVal (&Arg2.Expr) && ED_IsLocStack (&Arg2.Expr)     &&
-               (Offs = ED_GetStackOffs (&Arg2.Expr, 0)) == 0) {
-
-        /* Drop the generated code but leave the load of the first argument*/
-        RemoveCode (&Arg1.Push);
-
-        /* We need a label */
-        Label = GetLocalLabel ();
-
-        /* Generate memcpy code */
-        AddCodeLine ("sta ptr1");
-        AddCodeLine ("stx ptr1+1");
-        if (Arg3.Expr.IVal <= 127) {
-            AddCodeLine ("ldy #$%02X", (unsigned char) (Arg3.Expr.IVal - 1));
-            g_defcodelabel (Label);
-            AddCodeLine ("lda (sp),y");
-            AddCodeLine ("sta (ptr1),y");
-            AddCodeLine ("dey");
-            AddCodeLine ("bpl %s", LocalLabelName (Label));
-        } else {
-            AddCodeLine ("ldy #$00");
-            g_defcodelabel (Label);
-            AddCodeLine ("lda (sp),y");
-            AddCodeLine ("sta (ptr1),y");
-            AddCodeLine ("iny");
-            AddCodeLine ("cpy #$%02X", (unsigned char) Arg3.Expr.IVal);
-            AddCodeLine ("bne %s", LocalLabelName (Label));
-        }
-
-        /* Reload result - X hasn't changed by the code above */
-        AddCodeLine ("lda ptr1");
-
-        /* The function result is an rvalue in the primary register */
-        ED_MakeRValExpr (Expr);
-        Expr->Type = GetFuncReturn (Expr->Type);
-
-    } else {
-
-        /* The function result is an rvalue in the primary register */
-        ED_MakeRValExpr (Expr);
-        Expr->Type = GetFuncReturn (Expr->Type);
-
-    }
-
-ExitPoint:
-    /* We expect the closing brace */
-    ConsumeRParen ();
-}
-
-
-
-/*****************************************************************************/
-/*                                  memset                                   */
-/*****************************************************************************/
-
-
-
-static void StdFunc_memset (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
-/* Handle the memset function */
-{
-    /* Argument types: (void*, int, size_t) */
-    static Type Arg1Type[] = { TYPE(T_PTR), TYPE(T_VOID), TYPE(T_END) };
-    static Type Arg2Type[] = { TYPE(T_INT), TYPE(T_END) };
-    static Type Arg3Type[] = { TYPE(T_SIZE_T), TYPE(T_END) };
-
-    ArgDesc  Arg1, Arg2, Arg3;
-    int      MemSet    = 1;             /* Use real memset if true */
-    unsigned ParamSize = 0;
-    unsigned Label;
-
-    /* Argument #1 */
-    ParseArg (&Arg1, Arg1Type);
-    g_push (Arg1.Flags, Arg1.Expr.IVal);
-    GetCodePos (&Arg1.End);
-    ParamSize += SizeOf (Arg1Type);
-    ConsumeComma ();
-
-    /* Argument #2. This argument is special in that we will call another
-    ** function if it is a constant zero.
-    */
-    ParseArg (&Arg2, Arg2Type);
-    if ((Arg2.Flags & CF_CONST) != 0 && Arg2.Expr.IVal == 0) {
-        /* Don't call memset, call bzero instead */
-        MemSet = 0;
-    } else {
-        /* Push the argument */
-        g_push (Arg2.Flags, Arg2.Expr.IVal);
-        GetCodePos (&Arg2.End);
-        ParamSize += SizeOf (Arg2Type);
-    }
-    ConsumeComma ();
-
-    /* Argument #3. Since memset is a fastcall function, we must load the
-    ** arg into the primary if it is not already there. This parameter is
-    ** also ignored for the calculation of the parameter size, since it is
-    ** not passed via the stack.
-    */
-    ParseArg (&Arg3, Arg3Type);
-    if (Arg3.Flags & CF_CONST) {
-        LoadExpr (CF_NONE, &Arg3.Expr);
-    }
-
-    /* Emit the actual function call. This will also cleanup the stack. */
-    g_call (CF_FIXARGC, MemSet? Func_memset : Func__bzero, ParamSize);
-
-    if (ED_IsConstAbsInt (&Arg3.Expr) && Arg3.Expr.IVal == 0) {
-
-        /* memset has been called with a count argument of zero */
-        Warning ("Call to memset has no effect");
-
-        /* Remove all of the generated code but the load of the first
-        ** argument, which is what memset returns.
-        */
-        RemoveCode (&Arg1.Push);
-
-        /* Set the function result to the first argument */
-        *Expr = Arg1.Expr;
-
-        /* Bail out, no need for further improvements */
-        goto ExitPoint;
-    }
-
-    /* We've generated the complete code for the function now and know the
-    ** types of all parameters. Check for situations where better code can
-    ** be generated. If such a situation is detected, throw away the
-    ** generated, and emit better code.
-    ** Note: Lots of improvements would be possible here, but I will
-    ** concentrate on the most common case: memset with arguments 2 and 3
-    ** being constant numerical values. Some checks have shown that this
-    ** covers nearly 90% of all memset calls.
-    */
-    if (ED_IsConstAbsInt (&Arg3.Expr) && Arg3.Expr.IVal <= 256 &&
-        ED_IsConstAbsInt (&Arg2.Expr) &&
-        ((ED_IsRVal (&Arg1.Expr) && ED_IsLocConst (&Arg1.Expr)) ||
-         (ED_IsLVal (&Arg1.Expr) && ED_IsLocRegister (&Arg1.Expr)))) {
-
-        int Reg = ED_IsLVal (&Arg1.Expr) && ED_IsLocRegister (&Arg1.Expr);
-
-        /* Drop the generated code */
-        RemoveCode (&Arg1.Expr.Start);
-
-        /* We need a label */
-        Label = GetLocalLabel ();
-
-        /* Generate memset code */
-        if (Arg3.Expr.IVal <= 127) {
-
-            AddCodeLine ("ldy #$%02X", (unsigned char) (Arg3.Expr.IVal-1));
-            AddCodeLine ("lda #$%02X", (unsigned char) Arg2.Expr.IVal);
-            g_defcodelabel (Label);
-            if (Reg) {
-                AddCodeLine ("sta (%s),y", ED_GetLabelName (&Arg1.Expr, 0));
-            } else {
-                AddCodeLine ("sta %s,y", ED_GetLabelName (&Arg1.Expr, 0));
-            }
-            AddCodeLine ("dey");
-            AddCodeLine ("bpl %s", LocalLabelName (Label));
-
-        } else {
-
-            AddCodeLine ("ldy #$00");
-            AddCodeLine ("lda #$%02X", (unsigned char) Arg2.Expr.IVal);
-            g_defcodelabel (Label);
-            if (Reg) {
-                AddCodeLine ("sta (%s),y", ED_GetLabelName (&Arg1.Expr, 0));
-            } else {
-                AddCodeLine ("sta %s,y", ED_GetLabelName (&Arg1.Expr, 0));
-            }
-            AddCodeLine ("iny");
-            AddCodeLine ("cpy #$%02X", (unsigned char) Arg3.Expr.IVal);
-            AddCodeLine ("bne %s", LocalLabelName (Label));
-
-        }
-
-        /* memset returns the address, so the result is actually identical
-        ** to the first argument.
-        */
-        *Expr = Arg1.Expr;
-
-    } else if (ED_IsConstAbsInt (&Arg3.Expr) && Arg3.Expr.IVal <= 256 &&
-               ED_IsConstAbsInt (&Arg2.Expr) &&
-               ED_IsRVal (&Arg1.Expr) && ED_IsLocStack (&Arg1.Expr) &&
-               (Arg1.Expr.IVal - StackPtr) + Arg3.Expr.IVal < 256) {
-
-        /* Calculate the real stack offset */
-        int Offs = ED_GetStackOffs (&Arg1.Expr, 0);
-
-        /* Drop the generated code */
-        RemoveCode (&Arg1.Expr.Start);
-
-        /* We need a label */
-        Label = GetLocalLabel ();
-
-        /* Generate memset code */
-        AddCodeLine ("ldy #$%02X", (unsigned char) Offs);
-        AddCodeLine ("lda #$%02X", (unsigned char) Arg2.Expr.IVal);
-        g_defcodelabel (Label);
-        AddCodeLine ("sta (sp),y");
-        AddCodeLine ("iny");
-        AddCodeLine ("cpy #$%02X", (unsigned char) (Offs + Arg3.Expr.IVal));
-        AddCodeLine ("bne %s", LocalLabelName (Label));
-
-        /* memset returns the address, so the result is actually identical
-        ** to the first argument.
-        */
-        *Expr = Arg1.Expr;
-
-    } else if (ED_IsConstAbsInt (&Arg3.Expr) && Arg3.Expr.IVal <= 256 &&
-               ED_IsConstAbsInt (&Arg2.Expr) &&
-               (Arg2.Expr.IVal != 0 || IS_Get (&CodeSizeFactor) > 200)) {
-
-        /* Remove all of the generated code but the load of the first
-        ** argument.
-        */
-        RemoveCode (&Arg1.Push);
-
-        /* We need a label */
-        Label = GetLocalLabel ();
-
-        /* Generate code */
-        AddCodeLine ("sta ptr1");
-        AddCodeLine ("stx ptr1+1");
-        if (Arg3.Expr.IVal <= 127) {
-            AddCodeLine ("ldy #$%02X", (unsigned char) (Arg3.Expr.IVal-1));
-            AddCodeLine ("lda #$%02X", (unsigned char) Arg2.Expr.IVal);
-            g_defcodelabel (Label);
-            AddCodeLine ("sta (ptr1),y");
-            AddCodeLine ("dey");
-            AddCodeLine ("bpl %s", LocalLabelName (Label));
-        } else {
-            AddCodeLine ("ldy #$00");
-            AddCodeLine ("lda #$%02X", (unsigned char) Arg2.Expr.IVal);
-            g_defcodelabel (Label);
-            AddCodeLine ("sta (ptr1),y");
-            AddCodeLine ("iny");
-            AddCodeLine ("cpy #$%02X", (unsigned char) Arg3.Expr.IVal);
-            AddCodeLine ("bne %s", LocalLabelName (Label));
-        }
-
-        /* Load the function result pointer into a/x (x is still valid). This
-        ** code will get removed by the optimizer if it is not used later.
-        */
-        AddCodeLine ("lda ptr1");
-
-        /* The function result is an rvalue in the primary register */
-        ED_MakeRValExpr (Expr);
-        Expr->Type = GetFuncReturn (Expr->Type);
-
-    } else {
-
-        /* The function result is an rvalue in the primary register */
-        ED_MakeRValExpr (Expr);
-        Expr->Type = GetFuncReturn (Expr->Type);
-
-    }
-
-ExitPoint:
-    /* We expect the closing brace */
-    ConsumeRParen ();
-}
-
-
-
-/*****************************************************************************/
-/*                                  strcmp                                   */
-/*****************************************************************************/
-
-
-
-static void StdFunc_strcmp (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
-/* Handle the strcmp function */
-{
-    /* Argument types: (const char*, const char*) */
-    static Type Arg1Type[] = { TYPE(T_PTR), TYPE(T_CHAR|T_QUAL_CONST), TYPE(T_END) };
-    static Type Arg2Type[] = { TYPE(T_PTR), TYPE(T_CHAR|T_QUAL_CONST), TYPE(T_END) };
-
-    ArgDesc  Arg1, Arg2;
-    unsigned ParamSize = 0;
-    long     ECount1;
-    long     ECount2;
-    int      IsArray;
-    int      Offs;
-
-    /* Setup the argument type string */
-    Arg1Type[1].C = GetDefaultChar () | T_QUAL_CONST;
-    Arg2Type[1].C = GetDefaultChar () | T_QUAL_CONST;
-
-    /* Argument #1 */
-    ParseArg (&Arg1, Arg1Type);
-    g_push (Arg1.Flags, Arg1.Expr.IVal);
-    ParamSize += SizeOf (Arg1Type);
-    ConsumeComma ();
-
-    /* Argument #2. */
-    ParseArg (&Arg2, Arg2Type);
-
-    /* Since strcmp is a fastcall function, we must load the
-    ** arg into the primary if it is not already there. This parameter is
-    ** also ignored for the calculation of the parameter size, since it is
-    ** not passed via the stack.
-    */
-    if (Arg2.Flags & CF_CONST) {
-        LoadExpr (CF_NONE, &Arg2.Expr);
-    }
-
-    /* Emit the actual function call. This will also cleanup the stack. */
-    g_call (CF_FIXARGC, Func_strcmp, ParamSize);
-
-    /* Get the element counts of the arguments. Then get the larger of the
-    ** two into ECount1. This removes FLEXIBLE and UNSPECIFIED automatically
-    */
-    ECount1 = ArrayElementCount (&Arg1);
-    ECount2 = ArrayElementCount (&Arg2);
-    if (ECount2 > ECount1) {
-        ECount1 = ECount2;
-    }
-
-    /* If the second argument is the empty string literal, we can generate
-    ** more efficient code.
-    */
-    if (ED_IsLocLiteral (&Arg2.Expr) &&
-        IS_Get (&WritableStrings) == 0 &&
-        GetLiteralSize (Arg2.Expr.LVal) == 1 &&
-        GetLiteralStr (Arg2.Expr.LVal)[0] == '\0') {
-
-        /* Drop the generated code so we have the first argument in the
-        ** primary
-        */
-        RemoveCode (&Arg1.Push);
-
-        /* We don't need the literal any longer */
-        ReleaseLiteral (Arg2.Expr.LVal);
-
-        /* We do now have Arg1 in the primary. Load the first character from
-        ** this string and cast to int. This is the function result.
-        */
-        IsArray = IsTypeArray (Arg1.Type) && ED_IsRVal (&Arg1.Expr);
-        if (IsArray && ED_IsLocStack (&Arg1.Expr) &&
-            (Offs = ED_GetStackOffs (&Arg1.Expr, 0) < 256)) {
-            /* Drop the generated code */
-            RemoveCode (&Arg1.Load);
-
-            /* Generate code */
-            AddCodeLine ("ldy #$%02X", Offs);
-            AddCodeLine ("ldx #$00");
-            AddCodeLine ("lda (sp),y");
-        } else if (IsArray && ED_IsLocConst (&Arg1.Expr)) {
-            /* Drop the generated code */
-            RemoveCode (&Arg1.Load);
-
-            /* Generate code */
-            AddCodeLine ("ldx #$00");
-            AddCodeLine ("lda %s", ED_GetLabelName (&Arg1.Expr, 0));
-        } else {
-            /* Drop part of the generated code so we have the first argument
-            ** in the primary
-            */
-            RemoveCode (&Arg1.Push);
-
-            /* Fetch the first char */
-            g_getind (CF_CHAR | CF_UNSIGNED, 0);
-        }
-
-    } else if ((IS_Get (&CodeSizeFactor) >= 165) &&
-               ((ED_IsRVal (&Arg2.Expr) && ED_IsLocConst (&Arg2.Expr)) ||
-                (ED_IsLVal (&Arg2.Expr) && ED_IsLocRegister (&Arg2.Expr))) &&
-               ((ED_IsRVal (&Arg1.Expr) && ED_IsLocConst (&Arg1.Expr)) ||
-                (ED_IsLVal (&Arg1.Expr) && ED_IsLocRegister (&Arg1.Expr))) &&
-               (IS_Get (&InlineStdFuncs) || (ECount1 > 0 && ECount1 < 256))) {
-
-
-        unsigned    Entry, Loop, Fin;   /* Labels */
-        const char* Load;
-        const char* Compare;
-
-        if (ED_IsLVal (&Arg1.Expr) && ED_IsLocRegister (&Arg1.Expr)) {
-            Load = "lda (%s),y";
-        } else {
-            Load = "lda %s,y";
-        }
-        if (ED_IsLVal (&Arg2.Expr) && ED_IsLocRegister (&Arg2.Expr)) {
-            Compare = "cmp (%s),y";
-        } else {
-            Compare = "cmp %s,y";
-        }
-
-        /* Drop the generated code */
-        RemoveCode (&Arg1.Expr.Start);
-
-        /* We need labels */
-        Entry = GetLocalLabel ();
-        Loop  = GetLocalLabel ();
-        Fin   = GetLocalLabel ();
-
-        /* Generate strcmp code */
-        AddCodeLine ("ldy #$00");
-        AddCodeLine ("beq %s", LocalLabelName (Entry));
-        g_defcodelabel (Loop);
-        AddCodeLine ("tax");
-        AddCodeLine ("beq %s", LocalLabelName (Fin));
-        AddCodeLine ("iny");
-        g_defcodelabel (Entry);
-        AddCodeLine (Load, ED_GetLabelName (&Arg1.Expr, 0));
-        AddCodeLine (Compare, ED_GetLabelName (&Arg2.Expr, 0));
-        AddCodeLine ("beq %s", LocalLabelName (Loop));
-        AddCodeLine ("ldx #$01");
-        AddCodeLine ("bcs %s", LocalLabelName (Fin));
-        AddCodeLine ("ldx #$FF");
-        g_defcodelabel (Fin);
-
-    } else if ((IS_Get (&CodeSizeFactor) > 190) &&
-               ((ED_IsRVal (&Arg2.Expr) && ED_IsLocConst (&Arg2.Expr)) ||
-                (ED_IsLVal (&Arg2.Expr) && ED_IsLocRegister (&Arg2.Expr))) &&
-               (IS_Get (&InlineStdFuncs) || (ECount1 > 0 && ECount1 < 256))) {
-
-
-        unsigned    Entry, Loop, Fin;   /* Labels */
-        const char* Compare;
-
-        if (ED_IsLVal (&Arg2.Expr) && ED_IsLocRegister (&Arg2.Expr)) {
-            Compare = "cmp (%s),y";
-        } else {
-            Compare = "cmp %s,y";
-        }
-
-        /* Drop the generated code */
-        RemoveCode (&Arg1.Push);
-
-        /* We need labels */
-        Entry = GetLocalLabel ();
-        Loop  = GetLocalLabel ();
-        Fin   = GetLocalLabel ();
-
-        /* Store Arg1 into ptr1 */
-        AddCodeLine ("sta ptr1");
-        AddCodeLine ("stx ptr1+1");
-
-        /* Generate strcmp code */
-        AddCodeLine ("ldy #$00");
-        AddCodeLine ("beq %s", LocalLabelName (Entry));
-        g_defcodelabel (Loop);
-        AddCodeLine ("tax");
-        AddCodeLine ("beq %s", LocalLabelName (Fin));
-        AddCodeLine ("iny");
-        g_defcodelabel (Entry);
-        AddCodeLine ("lda (ptr1),y");
-        AddCodeLine (Compare, ED_GetLabelName (&Arg2.Expr, 0));
-        AddCodeLine ("beq %s", LocalLabelName (Loop));
-        AddCodeLine ("ldx #$01");
-        AddCodeLine ("bcs %s", LocalLabelName (Fin));
-        AddCodeLine ("ldx #$FF");
-        g_defcodelabel (Fin);
-
-    }
-
-    /* The function result is an rvalue in the primary register */
-    ED_MakeRValExpr (Expr);
-    Expr->Type = GetFuncReturn (Expr->Type);
-
-    /* We expect the closing brace */
-    ConsumeRParen ();
-}
-
-
-
-/*****************************************************************************/
-/*                                  strcpy                                   */
-/*****************************************************************************/
-
-
-
-static void StdFunc_strcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
-/* Handle the strcpy function */
-{
-    /* Argument types: (char*, const char*) */
-    static Type Arg1Type[] = { TYPE(T_PTR), TYPE(T_CHAR), TYPE(T_END) };
-    static Type Arg2Type[] = { TYPE(T_PTR), TYPE(T_CHAR|T_QUAL_CONST), TYPE(T_END) };
-
-    ArgDesc  Arg1, Arg2;
-    unsigned ParamSize = 0;
-    long     ECount;
-    unsigned L1;
-
-    /* Setup the argument type string */
-    Arg1Type[1].C = GetDefaultChar ();
-    Arg2Type[1].C = GetDefaultChar () | T_QUAL_CONST;
-
-    /* Argument #1 */
-    ParseArg (&Arg1, Arg1Type);
-    g_push (Arg1.Flags, Arg1.Expr.IVal);
-    GetCodePos (&Arg1.End);
-    ParamSize += SizeOf (Arg1Type);
-    ConsumeComma ();
-
-    /* Argument #2. Since strcpy is a fastcall function, we must load the
-    ** arg into the primary if it is not already there. This parameter is
-    ** also ignored for the calculation of the parameter size, since it is
-    ** not passed via the stack.
-    */
-    ParseArg (&Arg2, Arg2Type);
-    if (Arg2.Flags & CF_CONST) {
-        LoadExpr (CF_NONE, &Arg2.Expr);
-    }
-
-    /* Emit the actual function call. This will also cleanup the stack. */
-    g_call (CF_FIXARGC, Func_strcpy, ParamSize);
-
-    /* Get the element count of argument 1 if it is an array */
-    ECount = ArrayElementCount (&Arg1);
-
-    /* We've generated the complete code for the function now and know the
-    ** types of all parameters. Check for situations where better code can
-    ** be generated. If such a situation is detected, throw away the
-    ** generated, and emit better code.
-    */
-    if (((ED_IsRVal (&Arg2.Expr) && ED_IsLocConst (&Arg2.Expr)) ||
-         (ED_IsLVal (&Arg2.Expr) && ED_IsLocRegister (&Arg2.Expr))) &&
-        ((ED_IsRVal (&Arg1.Expr) && ED_IsLocConst (&Arg1.Expr)) ||
-         (ED_IsLVal (&Arg1.Expr) && ED_IsLocRegister (&Arg1.Expr))) &&
-        (IS_Get (&InlineStdFuncs) ||
-        (ECount != UNSPECIFIED && ECount < 256))) {
-
-        const char* Load;
-        const char* Store;
-        if (ED_IsLVal (&Arg2.Expr) && ED_IsLocRegister (&Arg2.Expr)) {
-            Load = "lda (%s),y";
-        } else {
-            Load = "lda %s,y";
-        }
-        if (ED_IsLVal (&Arg1.Expr) && ED_IsLocRegister (&Arg1.Expr)) {
-            Store = "sta (%s),y";
-        } else {
-            Store = "sta %s,y";
-        }
-
-        /* Drop the generated code */
-        RemoveCode (&Arg1.Expr.Start);
-
-        /* We need labels */
-        L1 = GetLocalLabel ();
-
-        /* Generate strcpy code */
-        AddCodeLine ("ldy #$FF");
-        g_defcodelabel (L1);
-        AddCodeLine ("iny");
-        AddCodeLine (Load, ED_GetLabelName (&Arg2.Expr, 0));
-        AddCodeLine (Store, ED_GetLabelName (&Arg1.Expr, 0));
-        AddCodeLine ("bne %s", LocalLabelName (L1));
-
-        /* strcpy returns argument #1 */
-        *Expr = Arg1.Expr;
-
-    } else if (ED_IsRVal (&Arg2.Expr) && ED_IsLocStack (&Arg2.Expr) &&
-               StackPtr >= -255 &&
-               ED_IsRVal (&Arg1.Expr) && ED_IsLocConst (&Arg1.Expr)) {
-
-        /* It is possible to just use one index register even if the stack
-        ** offset is not zero, by adjusting the offset to the constant
-        ** address accordingly. But we cannot do this if the data in
-        ** question is in the register space or at an absolute address less
-        ** than 256. Register space is zero page, which means that the
-        ** address calculation could overflow in the linker.
-        */
-        int AllowOneIndex = !ED_IsLocRegister (&Arg1.Expr) &&
-                            !(ED_IsLocAbs (&Arg1.Expr) && Arg1.Expr.IVal < 256);
-
-        /* Calculate the real stack offset */
-        int Offs = ED_GetStackOffs (&Arg2.Expr, 0);
-
-        /* Drop the generated code */
-        RemoveCode (&Arg1.Expr.Start);
-
-        /* We need labels */
-        L1 = GetLocalLabel ();
-
-        /* Generate strcpy code */
-        AddCodeLine ("ldy #$%02X", (unsigned char) (Offs - 1));
-        if (Offs == 0 || AllowOneIndex) {
-            g_defcodelabel (L1);
-            AddCodeLine ("iny");
-            AddCodeLine ("lda (sp),y");
-            AddCodeLine ("sta %s,y", ED_GetLabelName (&Arg1.Expr, -Offs));
-        } else {
-            AddCodeLine ("ldx #$FF");
-            g_defcodelabel (L1);
-            AddCodeLine ("iny");
-            AddCodeLine ("inx");
-            AddCodeLine ("lda (sp),y");
-            AddCodeLine ("sta %s,x", ED_GetLabelName (&Arg1.Expr, 0));
-        }
-        AddCodeLine ("bne %s", LocalLabelName (L1));
-
-        /* strcpy returns argument #1 */
-        *Expr = Arg1.Expr;
-
-    } else if (ED_IsRVal (&Arg2.Expr) && ED_IsLocConst (&Arg2.Expr) &&
-               ED_IsRVal (&Arg1.Expr) && ED_IsLocStack (&Arg1.Expr) &&
-               StackPtr >= -255) {
-
-        /* It is possible to just use one index register even if the stack
-        ** offset is not zero, by adjusting the offset to the constant
-        ** address accordingly. But we cannot do this if the data in
-        ** question is in the register space or at an absolute address less
-        ** than 256. Register space is zero page, which means that the
-        ** address calculation could overflow in the linker.
-        */
-        int AllowOneIndex = !ED_IsLocRegister (&Arg2.Expr) &&
-                            !(ED_IsLocAbs (&Arg2.Expr) && Arg2.Expr.IVal < 256);
-
-        /* Calculate the real stack offset */
-        int Offs = ED_GetStackOffs (&Arg1.Expr, 0);
-
-        /* Drop the generated code */
-        RemoveCode (&Arg1.Expr.Start);
-
-        /* We need labels */
-        L1 = GetLocalLabel ();
-
-        /* Generate strcpy code */
-        AddCodeLine ("ldy #$%02X", (unsigned char) (Offs - 1));
-        if (Offs == 0 || AllowOneIndex) {
-            g_defcodelabel (L1);
-            AddCodeLine ("iny");
-            AddCodeLine ("lda %s,y", ED_GetLabelName (&Arg2.Expr, -Offs));
-            AddCodeLine ("sta (sp),y");
-        } else {
-            AddCodeLine ("ldx #$FF");
-            g_defcodelabel (L1);
-            AddCodeLine ("iny");
-            AddCodeLine ("inx");
-            AddCodeLine ("lda %s,x", ED_GetLabelName (&Arg2.Expr, 0));
-            AddCodeLine ("sta (sp),y");
-        }
-        AddCodeLine ("bne %s", LocalLabelName (L1));
-
-        /* strcpy returns argument #1 */
-        *Expr = Arg1.Expr;
-
-    } else {
-
-        /* The function result is an rvalue in the primary register */
-        ED_MakeRValExpr (Expr);
-        Expr->Type = GetFuncReturn (Expr->Type);
-
-    }
-
-    /* We expect the closing brace */
-    ConsumeRParen ();
-}
-
-
-
-/*****************************************************************************/
-/*                                  strlen                                   */
-/*****************************************************************************/
-
-
-
-static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
-/* Handle the strlen function */
-{
-    static Type ArgType[] = { TYPE(T_PTR), TYPE(T_CHAR|T_QUAL_CONST), TYPE(T_END) };
-    ExprDesc    Arg;
-    int         IsArray;
-    int         IsPtr;
-    int         IsByteIndex;
-    long        ECount;
-    unsigned    L;
-
-
-
-    /* Setup the argument type string */
-    ArgType[1].C = GetDefaultChar () | T_QUAL_CONST;
-
-    /* Evaluate the parameter */
-    hie1 (&Arg);
-
-    /* Check if the argument is an array. If so, remember the element count.
-    ** Otherwise set the element count to undefined.
-    */
-    IsArray = IsTypeArray (Arg.Type);
-    if (IsArray) {
-        ECount = GetElementCount (Arg.Type);
-        if (ECount == FLEXIBLE) {
-            /* Treat as unknown */
-            ECount = UNSPECIFIED;
-        }
-        IsPtr = 0;
-    } else {
-        ECount = UNSPECIFIED;
-        IsPtr  = IsTypePtr (Arg.Type);
-    }
-
-    /* Check if the elements of an array can be addressed by a byte sized
-    ** index. This is true if the size of the array is known and less than
-    ** 256.
-    */
-    IsByteIndex = (ECount != UNSPECIFIED && ECount < 256);
-
-    /* Do type conversion */
-    TypeConversion (&Arg, ArgType);
-
-    /* If the expression is a literal, and if string literals are read
-    ** only, we can calculate the length of the string and remove it
-    ** from the literal pool. Otherwise we have to calculate the length
-    ** at runtime.
-    */
-    if (ED_IsLocLiteral (&Arg) && IS_Get (&WritableStrings) == 0) {
-
-        /* Constant string literal */
-        ED_MakeConstAbs (Expr, GetLiteralSize (Arg.LVal) - 1, type_size_t);
-
-        /* We don't need the literal any longer */
-        ReleaseLiteral (Arg.LVal);
-
-    /* We will inline strlen for arrays with constant addresses, if either the
-    ** inlining was forced on the command line, or the array is smaller than
-    ** 256, so the inlining is considered safe.
-    */
-    } else if (ED_IsLocConst (&Arg) && IsArray &&
-               (IS_Get (&InlineStdFuncs) || IsByteIndex)) {
-
-        /* Generate the strlen code */
-        L = GetLocalLabel ();
-        AddCodeLine ("ldy #$FF");
-        g_defcodelabel (L);
-        AddCodeLine ("iny");
-        AddCodeLine ("lda %s,y", ED_GetLabelName (&Arg, 0));
-        AddCodeLine ("bne %s", LocalLabelName (L));
-        AddCodeLine ("tax");
-        AddCodeLine ("tya");
-
-        /* The function result is an rvalue in the primary register */
-        ED_MakeRValExpr (Expr);
-        Expr->Type = type_size_t;
-
-    /* We will inline strlen for arrays on the stack, if the array is
-    ** completely within the reach of a byte sized index register.
-    */
-    } else if (ED_IsLocStack (&Arg) && IsArray && IsByteIndex &&
-               (Arg.IVal - StackPtr) + ECount < 256) {
-
-        /* Calculate the true stack offset */
-        int Offs = ED_GetStackOffs (&Arg, 0);
-
-        /* Generate the strlen code */
-        L = GetLocalLabel ();
-        AddCodeLine ("ldx #$FF");
-        AddCodeLine ("ldy #$%02X", (unsigned char) (Offs-1));
-        g_defcodelabel (L);
-        AddCodeLine ("inx");
-        AddCodeLine ("iny");
-        AddCodeLine ("lda (sp),y");
-        AddCodeLine ("bne %s", LocalLabelName (L));
-        AddCodeLine ("txa");
-        AddCodeLine ("ldx #$00");
-
-        /* The function result is an rvalue in the primary register */
-        ED_MakeRValExpr (Expr);
-        Expr->Type = type_size_t;
-
-    /* strlen for a string that is pointed to by a register variable will only
-    ** get inlined if requested on the command line, since we cannot know how
-    ** big the buffer actually is, so inlining is not always safe.
-    */
-    } else if (ED_IsLocRegister (&Arg) && ED_IsLVal (&Arg) && IsPtr &&
-               IS_Get (&InlineStdFuncs)) {
-
-        /* Generate the strlen code */
-        L = GetLocalLabel ();
-        AddCodeLine ("ldy #$FF");
-        g_defcodelabel (L);
-        AddCodeLine ("iny");
-        AddCodeLine ("lda (%s),y", ED_GetLabelName (&Arg, 0));
-        AddCodeLine ("bne %s", LocalLabelName (L));
-        AddCodeLine ("tax");
-        AddCodeLine ("tya");
-
-        /* The function result is an rvalue in the primary register */
-        ED_MakeRValExpr (Expr);
-        Expr->Type = type_size_t;
-
-    /* Last check: We will inline a generic strlen routine if inlining was
-    ** requested on the command line, and the code size factor is more than
-    ** 400 (code is 13 bytes vs. 3 for a jsr call).
-    */
-    } else if (IS_Get (&CodeSizeFactor) > 400 && IS_Get (&InlineStdFuncs)) {
-
-        /* Load the expression into the primary */
-        LoadExpr (CF_NONE, &Arg);
-
-        /* Inline the function */
-        L = GetLocalLabel ();
-        AddCodeLine ("sta ptr1");
-        AddCodeLine ("stx ptr1+1");
-        AddCodeLine ("ldy #$FF");
-        g_defcodelabel (L);
-        AddCodeLine ("iny");
-        AddCodeLine ("lda (ptr1),y");
-        AddCodeLine ("bne %s", LocalLabelName (L));
-        AddCodeLine ("tax");
-        AddCodeLine ("tya");
-
-        /* The function result is an rvalue in the primary register */
-        ED_MakeRValExpr (Expr);
-        Expr->Type = type_size_t;
-
-    } else {
-
-        /* Load the expression into the primary */
-        LoadExpr (CF_NONE, &Arg);
-
-        /* Call the strlen function */
-        AddCodeLine ("jsr _%s", Func_strlen);
-
-        /* The function result is an rvalue in the primary register */
-        ED_MakeRValExpr (Expr);
-        Expr->Type = type_size_t;
-
-    }
-
-    /* We expect the closing brace */
-    ConsumeRParen ();
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int FindStdFunc (const char* Name)
-/* Determine if the given function is a known standard function that may be
-** called in a special way. If so, return the index, otherwise return -1.
-*/
-{
-    /* Look into the table for known names */
-    struct StdFuncDesc* D =
-        bsearch (Name, StdFuncs, FUNC_COUNT, sizeof (StdFuncs[0]), CmpFunc);
-
-    /* Return the function index or -1 */
-    if (D == 0) {
-        return -1;
-    } else {
-        return D - StdFuncs;
-    }
-}
-
-
-
-void HandleStdFunc (int Index, FuncDesc* F, ExprDesc* lval)
-/* Generate code for a known standard function. */
-{
-    struct StdFuncDesc* D;
-
-    /* Get a pointer to the table entry */
-    CHECK (Index >= 0 && Index < (int)FUNC_COUNT);
-    D = StdFuncs + Index;
-
-    /* Call the handler function */
-    D->Handler (F, lval);
-}
diff --git a/src/cc65/stdfunc.h b/src/cc65/stdfunc.h
deleted file mode 100644 (file)
index 7fc3abd..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 stdfunc.h                                 */
-/*                                                                           */
-/*         Handle inlining of known functions for the cc65 compiler          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2004 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef STDFUNC_H
-#define STDFUNC_H
-
-
-
-/* cc65 */
-#include "expr.h"
-#include "symtab.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int FindStdFunc (const char* Name);
-/* Determine if the given function is a known standard function that may be
-** called in a special way. If so, return the index, otherwise return -1.
-*/
-
-void HandleStdFunc (int Index, struct FuncDesc* F, ExprDesc* lval);
-/* Generate code for a known standard function. */
-
-
-
-/* End of stdfunc.h */
-
-#endif
diff --git a/src/cc65/stdnames.c b/src/cc65/stdnames.c
deleted file mode 100644 (file)
index 687b538..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                stdnames.c                                 */
-/*                                                                           */
-/*           Assembler names for standard functions in the library           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004-2010, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* cc65 */
-#include "stdnames.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-const char Func__bzero[]        = "_bzero";     /* Asm name of "_bzero" */
-const char Func_memcpy[]        = "memcpy";     /* Asm name of "memcpy" */
-const char Func_memset[]        = "memset";     /* Asm name of "memset" */
-const char Func_strcmp[]        = "strcmp";     /* Asm name of "strcmp" */
-const char Func_strcpy[]        = "strcpy";     /* Asm name of "strcpy" */
-const char Func_strlen[]        = "strlen";     /* Asm name of "strlen" */
diff --git a/src/cc65/stdnames.h b/src/cc65/stdnames.h
deleted file mode 100644 (file)
index dcb3239..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                stdnames.h                                 */
-/*                                                                           */
-/*           Assembler names for standard functions in the library           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004-2010, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef STDNAMES_H
-#define STDNAMES_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-extern const char Func__bzero[];        /* Asm name of "_bzero" */
-extern const char Func_memcpy[];        /* Asm name of "memcpy" */
-extern const char Func_memset[];        /* Asm name of "memset" */
-extern const char Func_strcmp[];        /* Asm name of "strcmp" */
-extern const char Func_strcpy[];        /* Asm name of "strcpy" */
-extern const char Func_strlen[];        /* Asm name of "strlen" */
-
-
-
-/* End of stdnames.h */
-
-#endif
diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c
deleted file mode 100644 (file)
index 84b516d..0000000
+++ /dev/null
@@ -1,669 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  stmt.c                                   */
-/*                                                                           */
-/*                             Parse a statement                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2010, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-
-/* common */
-#include "coll.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "asmcode.h"
-#include "asmlabel.h"
-#include "codegen.h"
-#include "datatype.h"
-#include "error.h"
-#include "expr.h"
-#include "function.h"
-#include "global.h"
-#include "goto.h"
-#include "litpool.h"
-#include "loadexpr.h"
-#include "locals.h"
-#include "loop.h"
-#include "pragma.h"
-#include "scanner.h"
-#include "stackptr.h"
-#include "stmt.h"
-#include "swstmt.h"
-#include "symtab.h"
-#include "testexpr.h"
-#include "typeconv.h"
-
-
-
-/*****************************************************************************/
-/*                             Helper functions                              */
-/*****************************************************************************/
-
-
-
-static int CheckLabelWithoutStatement (void)
-/* Called from Statement() after a label definition. Will check for a
-** following closing curly brace. This means that a label is not followed
-** by a statement which is required by the standard. Output an error if so.
-*/
-{
-    if (CurTok.Tok == TOK_RCURLY) {
-        Error ("Label at end of compound statement");
-        return 1;
-    } else {
-        return 0;
-    }
-}
-
-
-
-static void CheckTok (token_t Tok, const char* Msg, int* PendingToken)
-/* Helper function for Statement. Will check for Tok and print Msg if not
-** found. If PendingToken is NULL, it will the skip the token, otherwise
-** it will store one to PendingToken.
-*/
-{
-    if (CurTok.Tok != Tok) {
-        Error ("%s", Msg);
-    } else if (PendingToken) {
-        *PendingToken = 1;
-    } else {
-        NextToken ();
-    }
-}
-
-
-
-static void CheckSemi (int* PendingToken)
-/* Helper function for Statement. Will check for a semicolon and print an
-** error message if not found (plus some error recovery). If PendingToken is
-** NULL, it will the skip the token, otherwise it will store one to
-** PendingToken.
-** This function is a special version of CheckTok with the addition of the
-** error recovery.
-*/
-{
-    int HaveToken = (CurTok.Tok == TOK_SEMI);
-    if (!HaveToken) {
-        Error ("`;' expected");
-        /* Try to be smart about errors */
-        if (CurTok.Tok == TOK_COLON || CurTok.Tok == TOK_COMMA) {
-            HaveToken = 1;
-        }
-    }
-    if (HaveToken) {
-        if (PendingToken) {
-            *PendingToken = 1;
-        } else {
-            NextToken ();
-        }
-    }
-}
-
-
-
-static void SkipPending (int PendingToken)
-/* Skip the pending token if we have one */
-{
-    if (PendingToken) {
-        NextToken ();
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static int IfStatement (void)
-/* Handle an 'if' statement */
-{
-    unsigned Label1;
-    unsigned TestResult;
-    int GotBreak;
-
-    /* Skip the if */
-    NextToken ();
-
-    /* Generate a jump label and parse the condition */
-    Label1 = GetLocalLabel ();
-    TestResult = TestInParens (Label1, 0);
-
-    /* Parse the if body */
-    GotBreak = Statement (0);
-
-    /* Else clause present? */
-    if (CurTok.Tok != TOK_ELSE) {
-
-        g_defcodelabel (Label1);
-
-        /* Since there's no else clause, we're not sure, if the a break
-        ** statement is really executed.
-        */
-        return 0;
-
-    } else {
-
-        /* Generate a jump around the else branch */
-        unsigned Label2 = GetLocalLabel ();
-        g_jump (Label2);
-
-        /* Skip the else */
-        NextToken ();
-
-        /* If the if expression was always true, the code in the else branch
-        ** is never executed. Output a warning if this is the case.
-        */
-        if (TestResult == TESTEXPR_TRUE) {
-            Warning ("Unreachable code");
-        }
-
-        /* Define the target for the first test */
-        g_defcodelabel (Label1);
-
-        /* Total break only if both branches had a break. */
-        GotBreak &= Statement (0);
-
-        /* Generate the label for the else clause */
-        g_defcodelabel (Label2);
-
-        /* Done */
-        return GotBreak;
-    }
-}
-
-
-
-static void DoStatement (void)
-/* Handle the 'do' statement */
-{
-    /* Get the loop control labels */
-    unsigned LoopLabel      = GetLocalLabel ();
-    unsigned BreakLabel     = GetLocalLabel ();
-    unsigned ContinueLabel  = GetLocalLabel ();
-
-    /* Skip the while token */
-    NextToken ();
-
-    /* Add the loop to the loop stack */
-    AddLoop (BreakLabel, ContinueLabel);
-
-    /* Define the loop label */
-    g_defcodelabel (LoopLabel);
-
-    /* Parse the loop body */
-    Statement (0);
-
-    /* Output the label for a continue */
-    g_defcodelabel (ContinueLabel);
-
-    /* Parse the end condition */
-    Consume (TOK_WHILE, "`while' expected");
-    TestInParens (LoopLabel, 1);
-    ConsumeSemi ();
-
-    /* Define the break label */
-    g_defcodelabel (BreakLabel);
-
-    /* Remove the loop from the loop stack */
-    DelLoop ();
-}
-
-
-
-static void WhileStatement (void)
-/* Handle the 'while' statement */
-{
-    int         PendingToken;
-    CodeMark    CondCodeStart;  /* Start of condition evaluation code */
-    CodeMark    CondCodeEnd;    /* End of condition evaluation code */
-    CodeMark    Here;           /* "Here" location of code */
-
-    /* Get the loop control labels */
-    unsigned LoopLabel  = GetLocalLabel ();
-    unsigned BreakLabel = GetLocalLabel ();
-    unsigned CondLabel  = GetLocalLabel ();
-
-    /* Skip the while token */
-    NextToken ();
-
-    /* Add the loop to the loop stack. In case of a while loop, the condition
-    ** label is used for continue statements.
-    */
-    AddLoop (BreakLabel, CondLabel);
-
-    /* We will move the code that evaluates the while condition to the end of
-    ** the loop, so generate a jump here.
-    */
-    g_jump (CondLabel);
-
-    /* Remember the current position */
-    GetCodePos (&CondCodeStart);
-
-    /* Emit the code position label */
-    g_defcodelabel (CondLabel);
-
-    /* Test the loop condition */
-    TestInParens (LoopLabel, 1);
-
-    /* Remember the end of the condition evaluation code */
-    GetCodePos (&CondCodeEnd);
-
-    /* Define the head label */
-    g_defcodelabel (LoopLabel);
-
-    /* Loop body */
-    Statement (&PendingToken);
-
-    /* Move the test code here */
-    GetCodePos (&Here);
-    MoveCode (&CondCodeStart, &CondCodeEnd, &Here);
-
-    /* Exit label */
-    g_defcodelabel (BreakLabel);
-
-    /* Eat remaining tokens that were delayed because of line info
-    ** correctness
-    */
-    SkipPending (PendingToken);
-
-    /* Remove the loop from the loop stack */
-    DelLoop ();
-}
-
-
-
-static void ReturnStatement (void)
-/* Handle the 'return' statement */
-{
-    ExprDesc Expr;
-
-    NextToken ();
-    if (CurTok.Tok != TOK_SEMI) {
-
-        /* Evaluate the return expression */
-        hie0 (&Expr);
-
-        /* If we return something in a void function, print an error and
-        ** ignore the value. Otherwise convert the value to the type of the
-        ** return.
-        */
-        if (F_HasVoidReturn (CurrentFunc)) {
-            Error ("Returning a value in function with return type void");
-        } else {
-            /* Convert the return value to the type of the function result */
-            TypeConversion (&Expr, F_GetReturnType (CurrentFunc));
-
-            /* Load the value into the primary */
-            LoadExpr (CF_NONE, &Expr);
-        }
-
-    } else if (!F_HasVoidReturn (CurrentFunc) && !F_HasOldStyleIntRet (CurrentFunc)) {
-        Error ("Function `%s' must return a value", F_GetFuncName (CurrentFunc));
-    }
-
-    /* Mark the function as having a return statement */
-    F_ReturnFound (CurrentFunc);
-
-    /* Cleanup the stack in case we're inside a block with locals */
-    g_space (StackPtr - F_GetTopLevelSP (CurrentFunc));
-
-    /* Output a jump to the function exit code */
-    g_jump (F_GetRetLab (CurrentFunc));
-}
-
-
-
-static void BreakStatement (void)
-/* Handle the 'break' statement */
-{
-    LoopDesc* L;
-
-    /* Skip the break */
-    NextToken ();
-
-    /* Get the current loop descriptor */
-    L = CurrentLoop ();
-
-    /* Check if we are inside a loop */
-    if (L == 0) {
-        /* Error: No current loop */
-        Error ("`break' statement not within loop or switch");
-        return;
-    }
-
-    /* Correct the stack pointer if needed */
-    g_space (StackPtr - L->StackPtr);
-
-    /* Jump to the exit label of the loop */
-    g_jump (L->BreakLabel);
-}
-
-
-
-static void ContinueStatement (void)
-/* Handle the 'continue' statement */
-{
-    LoopDesc* L;
-
-    /* Skip the continue */
-    NextToken ();
-
-    /* Get the current loop descriptor */
-    L = CurrentLoop ();
-    if (L) {
-        /* Search for a loop that has a continue label. */
-        do {
-            if (L->ContinueLabel) {
-                break;
-            }
-            L = L->Next;
-        } while (L);
-    }
-
-    /* Did we find it? */
-    if (L == 0) {
-        Error ("`continue' statement not within a loop");
-        return;
-    }
-
-    /* Correct the stackpointer if needed */
-    g_space (StackPtr - L->StackPtr);
-
-    /* Jump to next loop iteration */
-    g_jump (L->ContinueLabel);
-}
-
-
-
-static void ForStatement (void)
-/* Handle a 'for' statement */
-{
-    ExprDesc lval1;
-    ExprDesc lval3;
-    int HaveIncExpr;
-    CodeMark IncExprStart;
-    CodeMark IncExprEnd;
-    int PendingToken;
-
-    /* Get several local labels needed later */
-    unsigned TestLabel    = GetLocalLabel ();
-    unsigned BreakLabel   = GetLocalLabel ();
-    unsigned IncLabel     = GetLocalLabel ();
-    unsigned BodyLabel    = GetLocalLabel ();
-
-    /* Skip the FOR token */
-    NextToken ();
-
-    /* Add the loop to the loop stack. A continue jumps to the start of the
-    ** the increment condition.
-    */
-    AddLoop (BreakLabel, IncLabel);
-
-    /* Skip the opening paren */
-    ConsumeLParen ();
-
-    /* Parse the initializer expression */
-    if (CurTok.Tok != TOK_SEMI) {
-        Expression0 (&lval1);
-    }
-    ConsumeSemi ();
-
-    /* Label for the test expressions */
-    g_defcodelabel (TestLabel);
-
-    /* Parse the test expression */
-    if (CurTok.Tok != TOK_SEMI) {
-        Test (BodyLabel, 1);
-        g_jump (BreakLabel);
-    } else {
-        g_jump (BodyLabel);
-    }
-    ConsumeSemi ();
-
-    /* Remember the start of the increment expression */
-    GetCodePos (&IncExprStart);
-
-    /* Label for the increment expression */
-    g_defcodelabel (IncLabel);
-
-    /* Parse the increment expression */
-    HaveIncExpr = (CurTok.Tok != TOK_RPAREN);
-    if (HaveIncExpr) {
-        Expression0 (&lval3);
-    }
-
-    /* Jump to the test */
-    g_jump (TestLabel);
-
-    /* Remember the end of the increment expression */
-    GetCodePos (&IncExprEnd);
-
-    /* Skip the closing paren */
-    ConsumeRParen ();
-
-    /* Loop body */
-    g_defcodelabel (BodyLabel);
-    Statement (&PendingToken);
-
-    /* If we had an increment expression, move the code to the bottom of
-    ** the loop. In this case we don't need to jump there at the end of
-    ** the loop body.
-    */
-    if (HaveIncExpr) {
-        CodeMark Here;
-        GetCodePos (&Here);
-        MoveCode (&IncExprStart, &IncExprEnd, &Here);
-    } else {
-        /* Jump back to the increment expression */
-        g_jump (IncLabel);
-    }
-
-    /* Skip a pending token if we have one */
-    SkipPending (PendingToken);
-
-    /* Declare the break label */
-    g_defcodelabel (BreakLabel);
-
-    /* Remove the loop from the loop stack */
-    DelLoop ();
-}
-
-
-
-static int CompoundStatement (void)
-/* Compound statement. Allow any number of statements inside braces. The
-** function returns true if the last statement was a break or return.
-*/
-{
-    int GotBreak;
-
-    /* Remember the stack at block entry */
-    int OldStack = StackPtr;
-
-    /* Enter a new lexical level */
-    EnterBlockLevel ();
-
-    /* Parse local variable declarations if any */
-    DeclareLocals ();
-
-    /* Now process statements in this block */
-    GotBreak = 0;
-    while (CurTok.Tok != TOK_RCURLY) {
-        if (CurTok.Tok != TOK_CEOF) {
-            GotBreak = Statement (0);
-        } else {
-            break;
-        }
-    }
-
-    /* Clean up the stack. */
-    if (!GotBreak) {
-        g_space (StackPtr - OldStack);
-    }
-    StackPtr = OldStack;
-
-    /* Emit references to imports/exports for this block */
-    EmitExternals ();
-
-    /* Leave the lexical level */
-    LeaveBlockLevel ();
-
-    return GotBreak;
-}
-
-
-
-int Statement (int* PendingToken)
-/* Statement parser. Returns 1 if the statement does a return/break, returns
-** 0 otherwise. If the PendingToken pointer is not NULL, the function will
-** not skip the terminating token of the statement (closing brace or
-** semicolon), but store true if there is a pending token, and false if there
-** is none. The token is always checked, so there is no need for the caller to
-** check this token, it must be skipped, however. If the argument pointer is
-** NULL, the function will skip the token.
-*/
-{
-    ExprDesc Expr;
-    int GotBreak;
-    CodeMark Start, End;
-
-    /* Assume no pending token */
-    if (PendingToken) {
-        *PendingToken = 0;
-    }
-
-    /* Check for a label. A label is always part of a statement, it does not
-    ** replace one.
-    */
-    while (CurTok.Tok == TOK_IDENT && NextTok.Tok == TOK_COLON) {
-        /* Handle the label */
-        DoLabel ();
-        if (CheckLabelWithoutStatement ()) {
-            return 0;
-        }
-    }
-
-    switch (CurTok.Tok) {
-
-        case TOK_LCURLY:
-            NextToken ();
-            GotBreak = CompoundStatement ();
-            CheckTok (TOK_RCURLY, "`{' expected", PendingToken);
-            return GotBreak;
-
-        case TOK_IF:
-            return IfStatement ();
-
-        case TOK_WHILE:
-            WhileStatement ();
-            break;
-
-        case TOK_DO:
-            DoStatement ();
-            break;
-
-        case TOK_SWITCH:
-            SwitchStatement ();
-            break;
-
-        case TOK_RETURN:
-            ReturnStatement ();
-            CheckSemi (PendingToken);
-            return 1;
-
-        case TOK_BREAK:
-            BreakStatement ();
-            CheckSemi (PendingToken);
-            return 1;
-
-        case TOK_CONTINUE:
-            ContinueStatement ();
-            CheckSemi (PendingToken);
-            return 1;
-
-        case TOK_FOR:
-            ForStatement ();
-            break;
-
-        case TOK_GOTO:
-            GotoStatement ();
-            CheckSemi (PendingToken);
-            return 1;
-
-        case TOK_SEMI:
-            /* Ignore it */
-            CheckSemi (PendingToken);
-            break;
-
-        case TOK_PRAGMA:
-            DoPragma ();
-            break;
-
-        case TOK_CASE:
-            CaseLabel ();
-            CheckLabelWithoutStatement ();
-            break;
-
-        case TOK_DEFAULT:
-            DefaultLabel ();
-            CheckLabelWithoutStatement ();
-            break;
-
-        default:
-            /* Remember the current code position */
-            GetCodePos (&Start);
-            /* Actual statement */
-            ExprWithCheck (hie0, &Expr);
-            /* Load the result only if it is an lvalue and the type is
-            ** marked as volatile. Otherwise the load is useless.
-            */
-            if (ED_IsLVal (&Expr) && IsQualVolatile (Expr.Type)) {
-                LoadExpr (CF_NONE, &Expr);
-            }
-            /* If the statement didn't generate code, and is not of type
-            ** void, emit a warning.
-            */
-            GetCodePos (&End);
-            if (CodeRangeIsEmpty (&Start, &End) &&
-                !IsTypeVoid (Expr.Type)         &&
-                IS_Get (&WarnNoEffect)) {
-                Warning ("Statement has no effect");
-            }
-            CheckSemi (PendingToken);
-    }
-    return 0;
-}
diff --git a/src/cc65/stmt.h b/src/cc65/stmt.h
deleted file mode 100644 (file)
index 04ef728..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  stmt.h                                   */
-/*                                                                           */
-/*                             Parse a statement                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2008 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef STMT_H
-#define STMT_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int Statement (int* PendingToken);
-/* Statement parser. Returns 1 if the statement does a return/break, returns
-** 0 otherwise. If the PendingToken pointer is not NULL, the function will
-** not skip the terminating token of the statement (closing brace or
-** semicolon), but store true if there is a pending token, and false if there
-** is none. The token is always checked, so there is no need for the caller to
-** check this token, it must be skipped, however. If the argument pointer is
-** NULL, the function will skip the token.
-*/
-
-
-
-/* End of stmt.h */
-
-#endif
diff --git a/src/cc65/swstmt.c b/src/cc65/swstmt.c
deleted file mode 100644 (file)
index 0aefc05..0000000
+++ /dev/null
@@ -1,317 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 swstmt.c                                  */
-/*                                                                           */
-/*                        Parse the switch statement                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2008 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <limits.h>
-
-/* common */
-#include "coll.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "asmcode.h"
-#include "asmlabel.h"
-#include "casenode.h"
-#include "codegen.h"
-#include "datatype.h"
-#include "error.h"
-#include "expr.h"
-#include "global.h"
-#include "loop.h"
-#include "scanner.h"
-#include "stmt.h"
-#include "swstmt.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-typedef struct SwitchCtrl SwitchCtrl;
-struct SwitchCtrl {
-    Collection* Nodes;          /* CaseNode tree */
-    TypeCode    ExprType;       /* Basic switch expression type */
-    unsigned    Depth;          /* Number of bytes the selector type has */
-    unsigned    DefaultLabel;   /* Label for the default branch */
-
-
-
-};
-
-/* Pointer to current switch control struct */
-static SwitchCtrl* Switch = 0;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void SwitchStatement (void)
-/* Handle a switch statement for chars with a cmp cascade for the selector */
-{
-    ExprDesc    SwitchExpr;     /* Switch statement expression */
-    CodeMark    CaseCodeStart;  /* Start of code marker */
-    CodeMark    SwitchCodeStart;/* Start of switch code */
-    CodeMark    SwitchCodeEnd;  /* End of switch code */
-    unsigned    ExitLabel;      /* Exit label */
-    unsigned    SwitchCodeLabel;/* Label for the switch code */
-    int         HaveBreak = 0;  /* True if the last statement had a break */
-    int         RCurlyBrace;    /* True if last token is right curly brace */
-    SwitchCtrl* OldSwitch;      /* Pointer to old switch control data */
-    SwitchCtrl  SwitchData;     /* New switch data */
-
-
-    /* Eat the "switch" token */
-    NextToken ();
-
-    /* Read the switch expression and load it into the primary. It must have
-    ** integer type.
-    */
-    ConsumeLParen ();
-    Expression0 (&SwitchExpr);
-    if (!IsClassInt (SwitchExpr.Type))  {
-        Error ("Switch quantity is not an integer");
-        /* To avoid any compiler errors, make the expression a valid int */
-        ED_MakeConstAbsInt (&SwitchExpr, 1);
-    }
-    ConsumeRParen ();
-
-    /* Add a jump to the switch code. This jump is usually unnecessary,
-    ** because the switch code will moved up just behind the switch
-    ** expression. However, in rare cases, there's a label at the end of
-    ** the switch expression. This label will not get moved, so the code
-    ** jumps around the switch code, and after moving the switch code,
-    ** things look really weird. If we add a jump here, we will never have
-    ** a label attached to the current code position, and the jump itself
-    ** will get removed by the optimizer if it is unnecessary.
-    */
-    SwitchCodeLabel = GetLocalLabel ();
-    g_jump (SwitchCodeLabel);
-
-    /* Remember the current code position. We will move the switch code
-    ** to this position later.
-    */
-    GetCodePos (&CaseCodeStart);
-
-    /* Setup the control structure, save the old and activate the new one */
-    SwitchData.Nodes        = NewCollection ();
-    SwitchData.ExprType     = UnqualifiedType (SwitchExpr.Type[0].C);
-    SwitchData.Depth        = SizeOf (SwitchExpr.Type);
-    SwitchData.DefaultLabel = 0;
-    OldSwitch = Switch;
-    Switch = &SwitchData;
-
-    /* Get the exit label for the switch statement */
-    ExitLabel = GetLocalLabel ();
-
-    /* Create a loop so we may use break. */
-    AddLoop (ExitLabel, 0);
-
-    /* Make sure a curly brace follows */
-    if (CurTok.Tok != TOK_LCURLY) {
-        Error ("`{' expected");
-    }
-
-    /* Parse the following statement, which will actually be a compound
-    ** statement because of the curly brace at the current input position
-    */
-    HaveBreak = Statement (&RCurlyBrace);
-
-    /* Check if we had any labels */
-    if (CollCount (SwitchData.Nodes) == 0 && SwitchData.DefaultLabel == 0) {
-        Warning ("No case labels");
-    }
-
-    /* If the last statement did not have a break, we may have an open
-    ** label (maybe from an if or similar). Emitting code and then moving
-    ** this code to the top will also move the label to the top which is
-    ** wrong. So if the last statement did not have a break (which would
-    ** carry the label), add a jump to the exit. If it is useless, the
-    ** optimizer will remove it later.
-    */
-    if (!HaveBreak) {
-        g_jump (ExitLabel);
-    }
-
-    /* Remember the current position */
-    GetCodePos (&SwitchCodeStart);
-
-    /* Output the switch code label */
-    g_defcodelabel (SwitchCodeLabel);
-
-    /* Generate code */
-    if (SwitchData.DefaultLabel == 0) {
-        /* No default label, use switch exit */
-        SwitchData.DefaultLabel = ExitLabel;
-    }
-    g_switch (SwitchData.Nodes, SwitchData.DefaultLabel, SwitchData.Depth);
-
-    /* Move the code to the front */
-    GetCodePos (&SwitchCodeEnd);
-    MoveCode (&SwitchCodeStart, &SwitchCodeEnd, &CaseCodeStart);
-
-    /* Define the exit label */
-    g_defcodelabel (ExitLabel);
-
-    /* Exit the loop */
-    DelLoop ();
-
-    /* Switch back to the enclosing switch statement if any */
-    Switch = OldSwitch;
-
-    /* Free the case value tree */
-    FreeCaseNodeColl (SwitchData.Nodes);
-
-    /* If the case statement was (correctly) terminated by a closing curly
-    ** brace, skip it now.
-    */
-    if (RCurlyBrace) {
-        NextToken ();
-    }
-}
-
-
-
-void CaseLabel (void)
-/* Handle a case sabel */
-{
-    ExprDesc CaseExpr;          /* Case label expression */
-    long     Val;               /* Case label value */
-    unsigned CodeLabel;         /* Code label for this case */
-
-
-    /* Skip the "case" token */
-    NextToken ();
-
-    /* Read the selector expression */
-    ConstAbsIntExpr (hie1, &CaseExpr);
-    Val = CaseExpr.IVal;
-
-    /* Now check if we're inside a switch statement */
-    if (Switch != 0) {
-
-        /* Check the range of the expression */
-        switch (Switch->ExprType) {
-
-            case T_SCHAR:
-                /* Signed char */
-                if (Val < -128 || Val > 127) {
-                    Error ("Range error");
-                }
-                break;
-
-            case T_UCHAR:
-                if (Val < 0 || Val > 255) {
-                    Error ("Range error");
-                }
-                break;
-
-            case T_SHORT:
-            case T_INT:
-                if (Val < -32768 || Val > 32767) {
-                    Error ("Range error");
-                }
-                break;
-
-            case T_USHORT:
-            case T_UINT:
-                if (Val < 0 || Val > 65535) {
-                    Error ("Range error");
-                }
-                break;
-
-            case T_LONG:
-            case T_ULONG:
-                break;
-
-            default:
-                Internal ("Invalid type: %06lX", Switch->ExprType);
-        }
-
-        /* Insert the case selector into the selector table */
-        CodeLabel = InsertCaseValue (Switch->Nodes, Val, Switch->Depth);
-
-        /* Define this label */
-        g_defcodelabel (CodeLabel);
-
-    } else {
-
-        /* case keyword outside a switch statement */
-        Error ("Case label not within a switch statement");
-
-    }
-
-    /* Skip the colon */
-    ConsumeColon ();
-}
-
-
-
-void DefaultLabel (void)
-/* Handle a default label */
-{
-    /* Default case */
-    NextToken ();
-
-    /* Now check if we're inside a switch statement */
-    if (Switch != 0) {
-
-        /* Check if we do already have a default branch */
-        if (Switch->DefaultLabel == 0) {
-
-            /* Generate and emit the default label */
-            Switch->DefaultLabel = GetLocalLabel ();
-            g_defcodelabel (Switch->DefaultLabel);
-
-        } else {
-            /* We had the default label already */
-            Error ("Multiple default labels in one switch");
-        }
-
-    } else {
-
-        /* case keyword outside a switch statement */
-        Error ("`default' label not within a switch statement");
-
-    }
-
-    /* Skip the colon */
-    ConsumeColon ();
-}
diff --git a/src/cc65/swstmt.h b/src/cc65/swstmt.h
deleted file mode 100644 (file)
index b4facf2..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 swstmt.h                                  */
-/*                                                                           */
-/*                        Parse the switch statement                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2008 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SWSTMT_H
-#define SWSTMT_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void SwitchStatement (void);
-/* Handle a 'switch' statement */
-
-void CaseLabel (void);
-/* Handle a case label */
-
-void DefaultLabel (void);
-/* Handle a default label */
-
-
-
-/* End of swstmt.h */
-
-#endif
diff --git a/src/cc65/symentry.c b/src/cc65/symentry.c
deleted file mode 100644 (file)
index 980ee27..0000000
+++ /dev/null
@@ -1,264 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                symentry.c                                 */
-/*                                                                           */
-/*               Symbol table entries for the cc65 C compiler                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "xmalloc.h"
-
-/* cc65 */
-#include "anonname.h"
-#include "declare.h"
-#include "error.h"
-#include "symentry.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-SymEntry* NewSymEntry (const char* Name, unsigned Flags)
-/* Create a new symbol table with the given name */
-{
-    /* Get the length of the name */
-    unsigned Len = strlen (Name);
-
-    /* Allocate memory for the symbol entry */
-    SymEntry* E = xmalloc (sizeof (SymEntry) + Len);
-
-    /* Initialize the entry */
-    E->NextHash = 0;
-    E->PrevSym  = 0;
-    E->NextSym  = 0;
-    E->Link     = 0;
-    E->Owner    = 0;
-    E->Flags    = Flags;
-    E->Type     = 0;
-    E->Attr     = 0;
-    E->AsmName  = 0;
-    memcpy (E->Name, Name, Len+1);
-
-    /* Return the new entry */
-    return E;
-}
-
-
-
-void FreeSymEntry (SymEntry* E)
-/* Free a symbol entry */
-{
-    TypeFree (E->Type);
-    xfree (E->AsmName);
-    xfree (E);
-}
-
-
-
-void DumpSymEntry (FILE* F, const SymEntry* E)
-/* Dump the given symbol table entry to the file in readable form */
-{
-    static const struct {
-        const char*         Name;
-        unsigned            Val;
-    } Flags [] = {
-        /* Beware: Order is important! */
-        { "SC_TYPEDEF",     SC_TYPEDEF          },
-        { "SC_BITFIELD",    SC_BITFIELD         },
-        { "SC_STRUCTFIELD", SC_STRUCTFIELD      },
-        { "SC_UNION",       SC_UNION            },
-        { "SC_STRUCT",      SC_STRUCT           },
-        { "SC_AUTO",        SC_AUTO             },
-        { "SC_REGISTER",    SC_REGISTER         },
-        { "SC_STATIC",      SC_STATIC           },
-        { "SC_EXTERN",      SC_EXTERN           },
-        { "SC_ENUM",        SC_ENUM             },
-        { "SC_CONST",       SC_CONST            },
-        { "SC_LABEL",       SC_LABEL            },
-        { "SC_PARAM",       SC_PARAM            },
-        { "SC_FUNC",        SC_FUNC             },
-        { "SC_STORAGE",     SC_STORAGE          },
-        { "SC_DEF",         SC_DEF              },
-        { "SC_REF",         SC_REF              },
-        { "SC_ZEROPAGE",    SC_ZEROPAGE         },
-    };
-
-    unsigned I;
-    unsigned SymFlags;
-
-    /* Print the name */
-    fprintf (F, "%s:\n", E->Name);
-
-    /* Print the assembler name if we have one */
-    if (E->AsmName) {
-        fprintf (F, "    AsmName: %s\n", E->AsmName);
-    }
-
-    /* Print the flags */
-    SymFlags = E->Flags;
-    fprintf (F, "    Flags:");
-    for (I = 0; I < sizeof (Flags) / sizeof (Flags[0]) && SymFlags != 0; ++I) {
-        if ((SymFlags & Flags[I].Val) == Flags[I].Val) {
-            SymFlags &= ~Flags[I].Val;
-            fprintf (F, " %s", Flags[I].Name);
-        }
-    }
-    if (SymFlags != 0) {
-        fprintf (F, " 0x%05X", SymFlags);
-    }
-    fprintf (F, "\n");
-
-    /* Print the type */
-    fprintf (F, "    Type:  ");
-    if (E->Type) {
-        PrintType (F, E->Type);
-    } else {
-        fprintf (F, "(none)");
-    }
-    fprintf (F, "\n");
-}
-
-
-
-int SymIsOutputFunc (const SymEntry* Sym)
-/* Return true if this is a function that must be output */
-{
-    /* Symbol must be a function which is defined and either extern or
-    ** static and referenced.
-    */
-    return IsTypeFunc (Sym->Type)               &&
-           SymIsDef (Sym)                       &&
-           (Sym->Flags & (SC_REF | SC_EXTERN));
-}
-
-
-
-const DeclAttr* SymGetAttr (const SymEntry* Sym, DeclAttrType AttrType)
-/* Return an attribute for this symbol or NULL if the attribute does not exist */
-{
-    /* Beware: We may not even have a collection */
-    if (Sym->Attr) {
-        unsigned I;
-        for (I = 0; I < CollCount (Sym->Attr); ++I) {
-
-            /* Get the next attribute */
-            const DeclAttr* A = CollConstAt (Sym->Attr, I);
-
-            /* If this is the one we're searching for, return it */
-            if (A->AttrType == AttrType) {
-                return A;
-            }
-        }
-    }
-
-    /* Not found */
-    return 0;
-}
-
-
-
-void SymUseAttr (SymEntry* Sym, struct Declaration* D)
-/* Use the attributes from the declaration for this symbol */
-{
-    /* We cannot specify attributes twice */
-    if ((Sym->Flags & SC_HAVEATTR) != 0) {
-        if (D->Attributes != 0) {
-            Error ("Attributes must be specified in the first declaration");
-        }
-        return;
-    }
-
-    /* Move the attributes */
-    Sym->Attr = D->Attributes;
-    D->Attributes = 0;
-    Sym->Flags |= SC_HAVEATTR;
-}
-
-
-
-void SymSetAsmName (SymEntry* Sym)
-/* Set the assembler name for an external symbol from the name of the symbol */
-{
-    unsigned Len;
-
-    /* Cannot be used to change the name */
-    PRECONDITION (Sym->AsmName == 0);
-
-    /* The assembler name starts with an underline */
-    Len = strlen (Sym->Name);
-    Sym->AsmName = xmalloc (Len + 2);
-    Sym->AsmName[0] = '_';
-    memcpy (Sym->AsmName+1, Sym->Name, Len+1);
-}
-
-
-
-void CvtRegVarToAuto (SymEntry* Sym)
-/* Convert a register variable to an auto variable */
-{
-    /* Change the storage class */
-    Sym->Flags = (Sym->Flags & ~(SC_REGISTER | SC_STATIC | SC_EXTERN)) | SC_AUTO;
-
-    /* Transfer the stack offset from register save area to actual offset */
-    Sym->V.Offs = Sym->V.R.SaveOffs;
-}
-
-
-
-void ChangeSymType (SymEntry* Entry, Type* T)
-/* Change the type of the given symbol */
-{
-    TypeFree (Entry->Type);
-    Entry->Type = TypeDup (T);
-}
-
-
-
-void ChangeAsmName (SymEntry* Entry, const char* NewAsmName)
-/* Change the assembler name of the symbol */
-{
-    xfree (Entry->AsmName);
-    Entry->AsmName = xstrdup (NewAsmName);
-}
-
-
-
-int HasAnonName (const SymEntry* Entry)
-/* Return true if the symbol entry has an anonymous name */
-{
-    return IsAnonName (Entry->Name);
-}
diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h
deleted file mode 100644 (file)
index 4fa8425..0000000
+++ /dev/null
@@ -1,276 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                symentry.h                                 */
-/*                                                                           */
-/*               Symbol table entries for the cc65 C compiler                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SYMENTRY_H
-#define SYMENTRY_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "coll.h"
-#include "inline.h"
-
-/* cc65 */
-#include "datatype.h"
-#include "declattr.h"
-
-
-
-/*****************************************************************************/
-/*                                  Forwards                                 */
-/*****************************************************************************/
-
-
-
-struct Segments;
-struct LiteralPool;
-
-
-
-/*****************************************************************************/
-/*                              struct SymEntry                              */
-/*****************************************************************************/
-
-
-
-/* Storage classes and flags */
-#define SC_AUTO         0x0001U         /* Auto variable */
-#define SC_REGISTER     0x0002U         /* Register variable */
-#define SC_STATIC       0x0004U         /* Static */
-#define SC_EXTERN       0x0008U         /* Extern linkage */
-
-#define SC_ENUM         0x0030U         /* An enum */
-#define SC_CONST        0x0020U         /* A numeric constant with a type */
-#define SC_LABEL        0x0040U         /* A goto label */
-#define SC_PARAM        0x0080U         /* A function parameter */
-#define SC_FUNC         0x0100U         /* A function */
-
-#define SC_DEFTYPE      0x0200U         /* Parameter has default type (=int, old style) */
-#define SC_STORAGE      0x0400U         /* Symbol with associated storage */
-#define SC_DEFAULT      0x0800U         /* Flag: default storage class was used */
-
-#define SC_DEF          0x1000U         /* Symbol is defined */
-#define SC_REF          0x2000U         /* Symbol is referenced */
-
-#define SC_TYPE         0x4000U         /* This is a type, struct, typedef, etc. */
-#define SC_STRUCT       0x4001U         /* Struct */
-#define SC_UNION        0x4002U         /* Union */
-#define SC_STRUCTFIELD  0x4003U         /* Struct or union field */
-#define SC_BITFIELD     0x4004U         /* A bit-field inside a struct or union */
-#define SC_TYPEDEF      0x4005U         /* A typedef */
-#define SC_TYPEMASK     0x400FU         /* Mask for above types */
-
-#define SC_ZEROPAGE     0x8000U         /* Symbol marked as zeropage */
-
-#define SC_HAVEATTR     0x10000U        /* Symbol has attributes */
-
-
-
-/* Symbol table entry */
-typedef struct SymEntry SymEntry;
-struct SymEntry {
-    SymEntry*                   NextHash; /* Next entry in hash list */
-    SymEntry*                   PrevSym;  /* Previous symbol in dl list */
-    SymEntry*                   NextSym;  /* Next symbol double linked list */
-    SymEntry*                   Link;     /* General purpose single linked list */
-    struct SymTable*            Owner;    /* Symbol table the symbol is in */
-    unsigned                    Flags;    /* Symbol flags */
-    Type*                       Type;     /* Symbol type */
-    Collection*                 Attr;     /* Attribute list if any */
-    char*                       AsmName;  /* Assembler name if any */
-
-    /* Data that differs for the different symbol types */
-    union {
-
-        /* Offset for locals or struct members */
-        int                     Offs;
-
-        /* Label name for static symbols */
-        unsigned                Label;
-
-        /* Register bank offset and offset of the saved copy on stack for
-        ** register variables.
-        */
-        struct {
-            int                 RegOffs;
-            int                 SaveOffs;
-        } R;
-
-        /* Value for constants (including enums) */
-        long                    ConstVal;
-
-        /* Data for structs/unions */
-        struct {
-            struct SymTable*    SymTab;   /* Member symbol table */
-            unsigned            Size;     /* Size of the union/struct */
-        } S;
-
-        /* Data for bit fields */
-        struct {
-            unsigned            Offs;     /* Byte offset into struct */
-            unsigned            BitOffs;  /* Bit offset into storage unit */
-            unsigned            BitWidth; /* Width in bits */
-        } B;
-
-        /* Data for functions */
-        struct {
-            struct FuncDesc*    Func;     /* Function descriptor */
-            struct Segments*    Seg;      /* Segments for this function */
-            struct LiteralPool* LitPool;  /* Literal pool for this function */
-        } F;
-
-    } V;
-    char                       Name[1]; /* Name, dynamically allocated */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-SymEntry* NewSymEntry (const char* Name, unsigned Flags);
-/* Create a new symbol table with the given name */
-
-void FreeSymEntry (SymEntry* E);
-/* Free a symbol entry */
-
-void DumpSymEntry (FILE* F, const SymEntry* E);
-/* Dump the given symbol table entry to the file in readable form */
-
-#if defined(HAVE_INLINE)
-INLINE int SymIsBitField (const SymEntry* Sym)
-/* Return true if the given entry is a bit-field entry */
-{
-    return ((Sym->Flags & SC_BITFIELD) == SC_BITFIELD);
-}
-#else
-#  define SymIsBitField(Sym)    (((Sym)->Flags & SC_BITFIELD) == SC_BITFIELD)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int SymIsTypeDef (const SymEntry* Sym)
-/* Return true if the given entry is a typedef entry */
-{
-    return ((Sym->Flags & SC_TYPEDEF) == SC_TYPEDEF);
-}
-#else
-#  define SymIsTypeDef(Sym)     (((Sym)->Flags & SC_TYPEDEF) == SC_TYPEDEF)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int SymIsDef (const SymEntry* Sym)
-/* Return true if the given entry is defined */
-{
-    return ((Sym->Flags & SC_DEF) == SC_DEF);
-}
-#else
-#  define SymIsDef(Sym)     (((Sym)->Flags & SC_DEF) == SC_DEF)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int SymIsRef (const SymEntry* Sym)
-/* Return true if the given entry is referenced */
-{
-    return ((Sym->Flags & SC_REF) == SC_REF);
-}
-#else
-#  define SymIsRef(Sym)     (((Sym)->Flags & SC_REF) == SC_REF)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int SymIsRegVar (const SymEntry* Sym)
-/* Return true if the given entry is a register variable */
-/* ### HACK! Fix the ugly type flags! */
-{
-    return ((Sym->Flags & (SC_REGISTER|SC_TYPE)) == SC_REGISTER);
-}
-#else
-#  define SymIsRegVar(Sym)      (((Sym)->Flags & (SC_REGISTER|SC_TYPE)) == SC_REGISTER)
-#endif
-
-int SymIsOutputFunc (const SymEntry* Sym);
-/* Return true if this is a function that must be output */
-
-#if defined(HAVE_INLINE)
-INLINE const char* SymGetAsmName (const SymEntry* Sym)
-/* Return the assembler label name for the symbol (beware: may be NULL!) */
-{
-    return Sym->AsmName;
-}
-#else
-#  define SymGetAsmName(Sym)      ((Sym)->AsmName)
-#endif
-
-const DeclAttr* SymGetAttr (const SymEntry* Sym, DeclAttrType AttrType);
-/* Return an attribute for this symbol or NULL if the attribute does not exist */
-
-#if defined(HAVE_INLINE)
-INLINE int SymHasAttr (const SymEntry* Sym, DeclAttrType A)
-/* Return true if the symbol has the given attribute */
-{
-    return (SymGetAttr (Sym, A) != 0);
-}
-#else
-#  define SymHasAttr(Sym, A)       (SymGetAttr (Sym, A) != 0)
-#endif
-
-void SymUseAttr (SymEntry* Sym, struct Declaration* D);
-/* Use the attributes from the declaration for this symbol */
-
-void SymSetAsmName (SymEntry* Sym);
-/* Set the assembler name for an external symbol from the name of the symbol */
-
-void CvtRegVarToAuto (SymEntry* Sym);
-/* Convert a register variable to an auto variable */
-
-void ChangeSymType (SymEntry* Entry, Type* T);
-/* Change the type of the given symbol */
-
-void ChangeAsmName (SymEntry* Entry, const char* NewAsmName);
-/* Change the assembler name of the symbol */
-
-int HasAnonName (const SymEntry* Entry);
-/* Return true if the symbol entry has an anonymous name */
-
-
-
-/* End of symentry.h */
-
-#endif
diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c
deleted file mode 100644 (file)
index fdf4598..0000000
+++ /dev/null
@@ -1,1008 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 symtab.c                                  */
-/*                                                                           */
-/*              Symbol table management for the cc65 C compiler              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-
-/* common */
-#include "check.h"
-#include "debugflag.h"
-#include "hashfunc.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "asmcode.h"
-#include "asmlabel.h"
-#include "codegen.h"
-#include "datatype.h"
-#include "declare.h"
-#include "error.h"
-#include "funcdesc.h"
-#include "global.h"
-#include "stackptr.h"
-#include "symentry.h"
-#include "typecmp.h"
-#include "symtab.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* An empty symbol table */
-SymTable        EmptySymTab = {
-    0,          /* PrevTab */
-    0,          /* SymHead */
-    0,          /* SymTail */
-    0,          /* SymCount */
-    1,          /* Size */
-    { 0 }       /* Tab[1] */
-};
-
-/* Symbol table sizes */
-#define SYMTAB_SIZE_GLOBAL      211U
-#define SYMTAB_SIZE_FUNCTION     29U
-#define SYMTAB_SIZE_BLOCK        13U
-#define SYMTAB_SIZE_STRUCT       19U
-#define SYMTAB_SIZE_LABEL         7U
-
-/* The current and root symbol tables */
-static unsigned         LexicalLevel    = 0;    /* For safety checks */
-static SymTable*        SymTab0         = 0;
-static SymTable*        SymTab          = 0;
-static SymTable*        TagTab0         = 0;
-static SymTable*        TagTab          = 0;
-static SymTable*        LabelTab        = 0;
-
-
-
-/*****************************************************************************/
-/*                              struct SymTable                              */
-/*****************************************************************************/
-
-
-
-static SymTable* NewSymTable (unsigned Size)
-/* Create and return a symbol table for the given lexical level */
-{
-    unsigned I;
-
-    /* Allocate memory for the table */
-    SymTable* S = xmalloc (sizeof (SymTable) + (Size-1) * sizeof (SymEntry*));
-
-    /* Initialize the symbol table structure */
-    S->PrevTab  = 0;
-    S->SymHead  = 0;
-    S->SymTail  = 0;
-    S->SymCount = 0;
-    S->Size     = Size;
-    for (I = 0; I < Size; ++I) {
-        S->Tab[I] = 0;
-    }
-
-    /* Return the symbol table */
-    return S;
-}
-
-
-
-static void FreeSymTable (SymTable* S)
-/* Free the given symbo table including all symbols */
-{
-    /* Free all symbols */
-    SymEntry* Sym = S->SymHead;
-    while (Sym) {
-        SymEntry* NextSym = Sym->NextSym;
-        FreeSymEntry (Sym);
-        Sym = NextSym;
-    }
-
-    /* Free the table itself */
-    xfree (S);
-}
-
-
-
-/*****************************************************************************/
-/*                         Check symbols in a table                          */
-/*****************************************************************************/
-
-
-
-static void CheckSymTable (SymTable* Tab)
-/* Check a symbol table for open references, unused symbols ... */
-{
-    SymEntry* Entry = Tab->SymHead;
-    while (Entry) {
-
-        /* Get the storage flags for tne entry */
-        unsigned Flags = Entry->Flags;
-
-        /* Ignore typedef entries */
-        if (!SymIsTypeDef (Entry)) {
-
-            /* Check if the symbol is one with storage, and it if it was
-            ** defined but not used.
-            */
-            if (((Flags & SC_AUTO) || (Flags & SC_STATIC)) && (Flags & SC_EXTERN) == 0) {
-                if (SymIsDef (Entry) && !SymIsRef (Entry) &&
-                    !SymHasAttr (Entry, atUnused)) {
-                    if (Flags & SC_PARAM) {
-                        if (IS_Get (&WarnUnusedParam)) {
-                            Warning ("Parameter `%s' is never used", Entry->Name);
-                        }
-                    } else {
-                        if (IS_Get (&WarnUnusedVar)) {
-                            Warning ("`%s' is defined but never used", Entry->Name);
-                        }
-                    }
-                }
-            }
-
-            /* If the entry is a label, check if it was defined in the function */
-            if (Flags & SC_LABEL) {
-                if (!SymIsDef (Entry)) {
-                    /* Undefined label */
-                    Error ("Undefined label: `%s'", Entry->Name);
-                } else if (!SymIsRef (Entry)) {
-                    /* Defined but not used */
-                    if (IS_Get (&WarnUnusedLabel)) {
-                        Warning ("`%s' is defined but never used", Entry->Name);
-                    }
-                }
-            }
-
-        }
-
-        /* Next entry */
-        Entry = Entry->NextSym;
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                        Handling of lexical levels                         */
-/*****************************************************************************/
-
-
-
-unsigned GetLexicalLevel (void)
-/* Return the current lexical level */
-{
-    return LexicalLevel;
-}
-
-
-
-void EnterGlobalLevel (void)
-/* Enter the program global lexical level */
-{
-    /* Safety */
-    PRECONDITION (++LexicalLevel == LEX_LEVEL_GLOBAL);
-
-    /* Create and assign the symbol table */
-    SymTab0 = SymTab = NewSymTable (SYMTAB_SIZE_GLOBAL);
-
-    /* Create and assign the tag table */
-    TagTab0 = TagTab = NewSymTable (SYMTAB_SIZE_GLOBAL);
-}
-
-
-
-void LeaveGlobalLevel (void)
-/* Leave the program global lexical level */
-{
-    /* Safety */
-    PRECONDITION (LexicalLevel-- == LEX_LEVEL_GLOBAL);
-
-    /* Check the tables */
-    CheckSymTable (SymTab0);
-
-    /* Dump the tables if requested */
-    if (Debug) {
-        PrintSymTable (SymTab0, stdout, "Global symbol table");
-        PrintSymTable (TagTab0, stdout, "Global tag table");
-    }
-
-    /* Don't delete the symbol and struct tables! */
-    SymTab = 0;
-    TagTab = 0;
-}
-
-
-
-void EnterFunctionLevel (void)
-/* Enter function lexical level */
-{
-    SymTable* S;
-
-    /* New lexical level */
-    ++LexicalLevel;
-
-    /* Get a new symbol table and make it current */
-    S = NewSymTable (SYMTAB_SIZE_FUNCTION);
-    S->PrevTab = SymTab;
-    SymTab     = S;
-
-    /* Get a new tag table and make it current */
-    S = NewSymTable (SYMTAB_SIZE_FUNCTION);
-    S->PrevTab = TagTab;
-    TagTab  = S;
-
-    /* Create and assign a new label table */
-    S = NewSymTable (SYMTAB_SIZE_LABEL);
-    S->PrevTab = LabelTab;
-    LabelTab = S;
-}
-
-
-
-void RememberFunctionLevel (struct FuncDesc* F)
-/* Remember the symbol tables for the level and leave the level without checks */
-{
-    /* Leave the lexical level */
-    --LexicalLevel;
-
-    /* Remember the tables */
-    F->SymTab = SymTab;
-    F->TagTab = TagTab;
-
-    /* Don't delete the tables */
-    SymTab = SymTab->PrevTab;
-    TagTab = TagTab->PrevTab;
-    LabelTab = LabelTab->PrevTab;
-}
-
-
-
-void ReenterFunctionLevel (struct FuncDesc* F)
-/* Reenter the function lexical level using the existing tables from F */
-{
-    /* New lexical level */
-    ++LexicalLevel;
-
-    /* Make the tables current again */
-    F->SymTab->PrevTab = SymTab;
-    SymTab = F->SymTab;
-
-    F->TagTab->PrevTab = TagTab;
-    TagTab = F->TagTab;
-
-    /* Create and assign a new label table */
-    LabelTab = NewSymTable (SYMTAB_SIZE_LABEL);
-}
-
-
-
-void LeaveFunctionLevel (void)
-/* Leave function lexical level */
-{
-    /* Leave the lexical level */
-    --LexicalLevel;
-
-    /* Check the tables */
-    CheckSymTable (SymTab);
-    CheckSymTable (LabelTab);
-
-    /* Drop the label table if it is empty */
-    if (LabelTab->SymCount == 0) {
-        FreeSymTable (LabelTab);
-    }
-
-    /* Don't delete the tables */
-    SymTab = SymTab->PrevTab;
-    TagTab = TagTab->PrevTab;
-    LabelTab  = 0;
-}
-
-
-
-void EnterBlockLevel (void)
-/* Enter a nested block in a function */
-{
-    SymTable* S;
-
-    /* New lexical level */
-    ++LexicalLevel;
-
-    /* Get a new symbol table and make it current */
-    S = NewSymTable (SYMTAB_SIZE_BLOCK);
-    S->PrevTab  = SymTab;
-    SymTab      = S;
-
-    /* Get a new tag table and make it current */
-    S = NewSymTable (SYMTAB_SIZE_BLOCK);
-    S->PrevTab = TagTab;
-    TagTab     = S;
-}
-
-
-
-void LeaveBlockLevel (void)
-/* Leave a nested block in a function */
-{
-    /* Leave the lexical level */
-    --LexicalLevel;
-
-    /* Check the tables */
-    CheckSymTable (SymTab);
-
-    /* Don't delete the tables */
-    SymTab = SymTab->PrevTab;
-    TagTab = TagTab->PrevTab;
-}
-
-
-
-void EnterStructLevel (void)
-/* Enter a nested block for a struct definition */
-{
-    SymTable* S;
-
-    /* Get a new symbol table and make it current. Note: Structs and enums
-    ** nested in struct scope are NOT local to the struct but visible in the
-    ** outside scope. So we will NOT create a new struct or enum table.
-    */
-    S = NewSymTable (SYMTAB_SIZE_BLOCK);
-    S->PrevTab  = SymTab;
-    SymTab      = S;
-}
-
-
-
-void LeaveStructLevel (void)
-/* Leave a nested block for a struct definition */
-{
-    /* Don't delete the table */
-    SymTab = SymTab->PrevTab;
-}
-
-
-
-/*****************************************************************************/
-/*                              Find functions                               */
-/*****************************************************************************/
-
-
-
-static SymEntry* FindSymInTable (const SymTable* T, const char* Name, unsigned Hash)
-/* Search for an entry in one table */
-{
-    /* Get the start of the hash chain */
-    SymEntry* E = T->Tab [Hash % T->Size];
-    while (E) {
-        /* Compare the name */
-        if (strcmp (E->Name, Name) == 0) {
-            /* Found */
-            return E;
-        }
-        /* Not found, next entry in hash chain */
-        E = E->NextHash;
-    }
-
-    /* Not found */
-    return 0;
-}
-
-
-
-static SymEntry* FindSymInTree (const SymTable* Tab, const char* Name)
-/* Find the symbol with the given name in the table tree that starts with T */
-{
-    /* Get the hash over the name */
-    unsigned Hash = HashStr (Name);
-
-    /* Check all symbol tables for the symbol */
-    while (Tab) {
-        /* Try to find the symbol in this table */
-        SymEntry* E = FindSymInTable (Tab, Name, Hash);
-
-        /* Bail out if we found it */
-        if (E != 0) {
-            return E;
-        }
-
-        /* Repeat the search in the next higher lexical level */
-        Tab = Tab->PrevTab;
-    }
-
-    /* Not found */
-    return 0;
-}
-
-
-
-SymEntry* FindSym (const char* Name)
-/* Find the symbol with the given name */
-{
-    return FindSymInTree (SymTab, Name);
-}
-
-
-
-SymEntry* FindGlobalSym (const char* Name)
-/* Find the symbol with the given name in the global symbol table only */
-{
-    return FindSymInTable (SymTab0, Name, HashStr (Name));
-}
-
-
-
-SymEntry* FindLocalSym (const char* Name)
-/* Find the symbol with the given name in the current symbol table only */
-{
-    return FindSymInTable (SymTab, Name, HashStr (Name));
-}
-
-
-
-SymEntry* FindTagSym (const char* Name)
-/* Find the symbol with the given name in the tag table */
-{
-    return FindSymInTree (TagTab, Name);
-}
-
-
-
-SymEntry* FindStructField (const Type* T, const char* Name)
-/* Find a struct field in the fields list */
-{
-    SymEntry* Field = 0;
-
-    /* The given type may actually be a pointer to struct */
-    if (IsTypePtr (T)) {
-        ++T;
-    }
-
-    /* Non-structs do not have any struct fields... */
-    if (IsClassStruct (T)) {
-
-        /* Get a pointer to the struct/union type */
-        const SymEntry* Struct = GetSymEntry (T);
-        CHECK (Struct != 0);
-
-        /* Now search in the struct symbol table. Beware: The table may not
-        ** exist.
-        */
-        if (Struct->V.S.SymTab) {
-            Field = FindSymInTable (Struct->V.S.SymTab, Name, HashStr (Name));
-        }
-    }
-
-    return Field;
-}
-
-
-
-/*****************************************************************************/
-/*                       Add stuff to the symbol table                       */
-/*****************************************************************************/
-
-
-
-static void AddSymEntry (SymTable* T, SymEntry* S)
-/* Add a symbol to a symbol table */
-{
-    /* Get the hash value for the name */
-    unsigned Hash = HashStr (S->Name) % T->Size;
-
-    /* Insert the symbol into the list of all symbols in this level */
-    if (T->SymTail) {
-        T->SymTail->NextSym = S;
-    }
-    S->PrevSym = T->SymTail;
-    T->SymTail = S;
-    if (T->SymHead == 0) {
-        /* First symbol */
-        T->SymHead = S;
-    }
-    ++T->SymCount;
-
-    /* Insert the symbol into the hash chain */
-    S->NextHash  = T->Tab[Hash];
-    T->Tab[Hash] = S;
-
-    /* Tell the symbol in which table it is */
-    S->Owner = T;
-}
-
-
-
-SymEntry* AddStructSym (const char* Name, unsigned Type, unsigned Size, SymTable* Tab)
-/* Add a struct/union entry and return it */
-{
-    SymEntry* Entry;
-
-    /* Type must be struct or union */
-    PRECONDITION (Type == SC_STRUCT || Type == SC_UNION);
-
-    /* Do we have an entry with this name already? */
-    Entry = FindSymInTable (TagTab, Name, HashStr (Name));
-    if (Entry) {
-
-        /* We do have an entry. This may be a forward, so check it. */
-        if ((Entry->Flags & SC_TYPEMASK) != Type) {
-            /* Existing symbol is not a struct */
-            Error ("Symbol `%s' is already different kind", Name);
-        } else if (Size > 0 && Entry->V.S.Size > 0) {
-            /* Both structs are definitions. */
-            Error ("Multiple definition for `%s'", Name);
-        } else {
-            /* Define the struct size if it is given */
-            if (Size > 0) {
-                Entry->V.S.SymTab = Tab;
-                Entry->V.S.Size   = Size;
-            }
-        }
-
-    } else {
-
-        /* Create a new entry */
-        Entry = NewSymEntry (Name, Type);
-
-        /* Set the struct data */
-        Entry->V.S.SymTab = Tab;
-        Entry->V.S.Size   = Size;
-
-        /* Add it to the current table */
-        AddSymEntry (TagTab, Entry);
-    }
-
-    /* Return the entry */
-    return Entry;
-}
-
-
-
-SymEntry* AddBitField (const char* Name, unsigned Offs, unsigned BitOffs, unsigned Width)
-/* Add a bit field to the local symbol table and return the symbol entry */
-{
-    /* Do we have an entry with this name already? */
-    SymEntry* Entry = FindSymInTable (SymTab, Name, HashStr (Name));
-    if (Entry) {
-
-        /* We have a symbol with this name already */
-        Error ("Multiple definition for `%s'", Name);
-
-    } else {
-
-        /* Create a new entry */
-        Entry = NewSymEntry (Name, SC_BITFIELD);
-
-        /* Set the symbol attributes. Bit-fields are always of type unsigned */
-        Entry->Type         = type_uint;
-        Entry->V.B.Offs     = Offs;
-        Entry->V.B.BitOffs  = BitOffs;
-        Entry->V.B.BitWidth = Width;
-
-        /* Add the entry to the symbol table */
-        AddSymEntry (SymTab, Entry);
-
-    }
-
-    /* Return the entry */
-    return Entry;
-}
-
-
-
-SymEntry* AddConstSym (const char* Name, const Type* T, unsigned Flags, long Val)
-/* Add an constant symbol to the symbol table and return it */
-{
-    /* Enums must be inserted in the global symbol table */
-    SymTable* Tab = ((Flags & SC_ENUM) == SC_ENUM)? SymTab0 : SymTab;
-
-    /* Do we have an entry with this name already? */
-    SymEntry* Entry = FindSymInTable (Tab, Name, HashStr (Name));
-    if (Entry) {
-        if ((Entry->Flags & SC_CONST) != SC_CONST) {
-            Error ("Symbol `%s' is already different kind", Name);
-        } else {
-            Error ("Multiple definition for `%s'", Name);
-        }
-        return Entry;
-    }
-
-    /* Create a new entry */
-    Entry = NewSymEntry (Name, Flags);
-
-    /* Enum values are ints */
-    Entry->Type = TypeDup (T);
-
-    /* Set the enum data */
-    Entry->V.ConstVal = Val;
-
-    /* Add the entry to the symbol table */
-    AddSymEntry (Tab, Entry);
-
-    /* Return the entry */
-    return Entry;
-}
-
-
-
-SymEntry* AddLabelSym (const char* Name, unsigned Flags)
-/* Add a goto label to the label table */
-{
-    /* Do we have an entry with this name already? */
-    SymEntry* Entry = FindSymInTable (LabelTab, Name, HashStr (Name));
-    if (Entry) {
-
-        if (SymIsDef (Entry) && (Flags & SC_DEF) != 0) {
-            /* Trying to define the label more than once */
-            Error ("Label `%s' is defined more than once", Name);
-        }
-        Entry->Flags |= Flags;
-
-    } else {
-
-        /* Create a new entry */
-        Entry = NewSymEntry (Name, SC_LABEL | Flags);
-
-        /* Set a new label number */
-        Entry->V.Label = GetLocalLabel ();
-
-        /* Generate the assembler name of the label */
-        Entry->AsmName = xstrdup (LocalLabelName (Entry->V.Label));
-
-        /* Add the entry to the label table */
-        AddSymEntry (LabelTab, Entry);
-
-    }
-
-    /* Return the entry */
-    return Entry;
-}
-
-
-
-SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs)
-/* Add a local symbol and return the symbol entry */
-{
-    /* Do we have an entry with this name already? */
-    SymEntry* Entry = FindSymInTable (SymTab, Name, HashStr (Name));
-    if (Entry) {
-
-        /* We have a symbol with this name already */
-        Error ("Multiple definition for `%s'", Name);
-
-    } else {
-
-        /* Create a new entry */
-        Entry = NewSymEntry (Name, Flags);
-
-        /* Set the symbol attributes */
-        Entry->Type = TypeDup (T);
-        if ((Flags & SC_AUTO) == SC_AUTO) {
-            Entry->V.Offs = Offs;
-        } else if ((Flags & SC_REGISTER) == SC_REGISTER) {
-            Entry->V.R.RegOffs  = Offs;
-            Entry->V.R.SaveOffs = StackPtr;
-        } else if ((Flags & SC_EXTERN) == SC_EXTERN) {
-            Entry->V.Label = Offs;
-            SymSetAsmName (Entry);
-        } else if ((Flags & SC_STATIC) == SC_STATIC) {
-            /* Generate the assembler name from the label number */
-            Entry->V.Label = Offs;
-            Entry->AsmName = xstrdup (LocalLabelName (Entry->V.Label));
-        } else if ((Flags & SC_STRUCTFIELD) == SC_STRUCTFIELD) {
-            Entry->V.Offs = Offs;
-        } else {
-            Internal ("Invalid flags in AddLocalSym: %04X", Flags);
-        }
-
-        /* Add the entry to the symbol table */
-        AddSymEntry (SymTab, Entry);
-
-    }
-
-    /* Return the entry */
-    return Entry;
-}
-
-
-
-SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags)
-/* Add an external or global symbol to the symbol table and return the entry */
-{
-    /* There is some special handling for functions, so check if it is one */
-    int IsFunc = IsTypeFunc (T);
-
-    /* Functions must be inserted in the global symbol table */
-    SymTable* Tab = IsFunc? SymTab0 : SymTab;
-
-    /* Do we have an entry with this name already? */
-    SymEntry* Entry = FindSymInTable (Tab, Name, HashStr (Name));
-    if (Entry) {
-
-        Type* EType;
-
-        /* We have a symbol with this name already */
-        if (Entry->Flags & SC_TYPE) {
-            Error ("Multiple definition for `%s'", Name);
-            return Entry;
-        }
-
-        /* Get the type string of the existing symbol */
-        EType = Entry->Type;
-
-        /* If we are handling arrays, the old entry or the new entry may be an
-        ** incomplete declaration. Accept this, and if the exsting entry is
-        ** incomplete, complete it.
-        */
-        if (IsTypeArray (T) && IsTypeArray (EType)) {
-
-            /* Get the array sizes */
-            long Size  = GetElementCount (T);
-            long ESize = GetElementCount (EType);
-
-            if ((Size != UNSPECIFIED && ESize != UNSPECIFIED && Size != ESize) ||
-                TypeCmp (T + 1, EType + 1) < TC_EQUAL) {
-                /* Types not identical: Conflicting types */
-                Error ("Conflicting types for `%s'", Name);
-                return Entry;
-            } else {
-                /* Check if we have a size in the existing definition */
-                if (ESize == UNSPECIFIED) {
-                    /* Existing, size not given, use size from new def */
-                    SetElementCount (EType, Size);
-                }
-            }
-
-        } else {
-            /* New type must be identical */
-            if (TypeCmp (EType, T) < TC_EQUAL) {
-                Error ("Conflicting types for `%s'", Name);
-                return Entry;
-            }
-
-            /* In case of a function, use the new type descriptor, since it
-            ** contains pointers to the new symbol tables that are needed if
-            ** an actual function definition follows. Be sure not to use the
-            ** new descriptor if it contains a function declaration with an
-            ** empty parameter list.
-            */
-            if (IsFunc) {
-                /* Get the function descriptor from the new type */
-                FuncDesc* F = GetFuncDesc (T);
-                /* Use this new function descriptor if it doesn't contain
-                ** an empty parameter list.
-                */
-                if ((F->Flags & FD_EMPTY) == 0) {
-                    Entry->V.F.Func = F;
-                    SetFuncDesc (EType, F);
-                }
-            }
-        }
-
-        /* If a static declaration follows a non-static declaration, then
-        ** warn about the conflict.  (It will compile a public declaration.)
-        */
-        if ((Flags & SC_EXTERN) == 0 && (Entry->Flags & SC_EXTERN) != 0) {
-            Warning ("static declaration follows non-static declaration of `%s'.", Name);
-        }
-
-        /* An extern declaration must not change the current linkage. */
-        if (IsFunc || (Flags & (SC_EXTERN | SC_DEF)) == SC_EXTERN) {
-            Flags &= ~SC_EXTERN;
-        }
-
-        /* If a public declaration follows a static declaration, then
-        ** warn about the conflict.  (It will compile a public declaration.)
-        */
-        if ((Flags & SC_EXTERN) != 0 && (Entry->Flags & SC_EXTERN) == 0) {
-            Warning ("public declaration follows static declaration of `%s'.", Name);
-        }
-
-        /* Add the new flags */
-        Entry->Flags |= Flags;
-
-    } else {
-
-        /* Create a new entry */
-        Entry = NewSymEntry (Name, Flags);
-
-        /* Set the symbol attributes */
-        Entry->Type = TypeDup (T);
-
-        /* If this is a function, set the function descriptor and clear
-        ** additional fields.
-        */
-        if (IsFunc) {
-            Entry->V.F.Func = GetFuncDesc (Entry->Type);
-            Entry->V.F.Seg  = 0;
-        }
-
-        /* Add the assembler name of the symbol */
-        SymSetAsmName (Entry);
-
-        /* Add the entry to the symbol table */
-        AddSymEntry (Tab, Entry);
-    }
-
-    /* Return the entry */
-    return Entry;
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-SymTable* GetSymTab (void)
-/* Return the current symbol table */
-{
-    return SymTab;
-}
-
-
-
-SymTable* GetGlobalSymTab (void)
-/* Return the global symbol table */
-{
-    return SymTab0;
-}
-
-
-
-int SymIsLocal (SymEntry* Sym)
-/* Return true if the symbol is defined in the highest lexical level */
-{
-    return (Sym->Owner == SymTab || Sym->Owner == TagTab);
-}
-
-
-
-void MakeZPSym (const char* Name)
-/* Mark the given symbol as zero page symbol */
-{
-    /* Get the symbol table entry */
-    SymEntry* Entry = FindSymInTable (SymTab, Name, HashStr (Name));
-
-    /* Mark the symbol as zeropage */
-    if (Entry) {
-        Entry->Flags |= SC_ZEROPAGE;
-    } else {
-        Error ("Undefined symbol: `%s'", Name);
-    }
-}
-
-
-
-void PrintSymTable (const SymTable* Tab, FILE* F, const char* Header, ...)
-/* Write the symbol table to the given file */
-{
-    unsigned Len;
-    const SymEntry* Entry;
-
-    /* Print the header */
-    va_list ap;
-    va_start (ap, Header);
-    fputc ('\n', F);
-    Len = vfprintf (F, Header, ap);
-    va_end (ap);
-    fputc ('\n', F);
-
-    /* Underline the header */
-    while (Len--) {
-        fputc ('=', F);
-    }
-    fputc ('\n', F);
-
-    /* Dump the table */
-    Entry = Tab->SymHead;
-    if (Entry == 0) {
-        fprintf (F, "(empty)\n");
-    } else {
-        while (Entry) {
-            DumpSymEntry (F, Entry);
-            Entry = Entry->NextSym;
-        }
-    }
-    fprintf (F, "\n\n\n");
-}
-
-
-
-void EmitExternals (void)
-/* Write import/export statements for external symbols */
-{
-    SymEntry* Entry;
-
-    Entry = SymTab->SymHead;
-    while (Entry) {
-        unsigned Flags = Entry->Flags;
-        if (Flags & SC_EXTERN) {
-            /* Only defined or referenced externs */
-            if (SymIsRef (Entry) && !SymIsDef (Entry)) {
-                /* An import */
-                g_defimport (Entry->Name, Flags & SC_ZEROPAGE);
-            } else if (SymIsDef (Entry)) {
-                /* An export */
-                g_defexport (Entry->Name, Flags & SC_ZEROPAGE);
-            }
-        }
-        Entry = Entry->NextSym;
-    }
-}
-
-
-
-void EmitDebugInfo (void)
-/* Emit debug infos for the locals of the current scope */
-{
-    const char* Head;
-    const SymEntry* Sym;
-
-    /* Output info for locals if enabled */
-    if (DebugInfo) {
-        /* For cosmetic reasons in the output file, we will insert two tabs
-        ** on global level and just one on local level.
-        */
-        if (LexicalLevel == LEX_LEVEL_GLOBAL) {
-            Head = "\t.dbg\t\tsym";
-        } else {
-            Head = "\t.dbg\tsym";
-        }
-        Sym = SymTab->SymHead;
-        while (Sym) {
-            if ((Sym->Flags & (SC_CONST|SC_TYPE)) == 0) {
-                if (Sym->Flags & SC_AUTO) {
-                    AddTextLine ("%s, \"%s\", \"00\", auto, %d",
-                                 Head, Sym->Name, Sym->V.Offs);
-                } else if (Sym->Flags & SC_REGISTER) {
-                    AddTextLine ("%s, \"%s\", \"00\", register, \"regbank\", %d",
-                                 Head, Sym->Name, Sym->V.R.RegOffs);
-
-                } else if (SymIsRef (Sym) && !SymIsDef (Sym)) {
-                    AddTextLine ("%s, \"%s\", \"00\", %s, \"%s\"",
-                                 Head, Sym->Name,
-                                 (Sym->Flags & SC_EXTERN)? "extern" : "static",
-                                 Sym->AsmName);
-                }
-            }
-            Sym = Sym->NextSym;
-        }
-    }
-}
diff --git a/src/cc65/symtab.h b/src/cc65/symtab.h
deleted file mode 100644 (file)
index 39782d6..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 symtab.h                                  */
-/*                                                                           */
-/*              Symbol table management for the cc65 C compiler              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SYMTAB_H
-#define SYMTAB_H
-
-
-
-#include <stdio.h>
-
-#include "datatype.h"
-#include "symentry.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Symbol table */
-typedef struct SymTable SymTable;
-struct SymTable {
-    SymTable*           PrevTab;        /* Pointer to higher level symbol table */
-    SymEntry*           SymHead;        /* Double linked list of symbols */
-    SymEntry*           SymTail;        /* Double linked list of symbols */
-    unsigned            SymCount;       /* Count of symbols in this table */
-    unsigned            Size;           /* Size of table */
-    SymEntry*           Tab[1];         /* Actual table, dynamically allocated */
-};
-
-/* An empty symbol table */
-extern SymTable         EmptySymTab;
-
-/* Forwards */
-struct FuncDesc;
-
-/* Predefined lexical levels */
-#define LEX_LEVEL_GLOBAL        1U
-#define LEX_LEVEL_FUNCTION      2U
-
-
-
-/*****************************************************************************/
-/*                        Handling of lexical levels                         */
-/*****************************************************************************/
-
-
-
-unsigned GetLexicalLevel (void);
-/* Return the current lexical level */
-
-void EnterGlobalLevel (void);
-/* Enter the program global lexical level */
-
-void LeaveGlobalLevel (void);
-/* Leave the program global lexical level */
-
-void EnterFunctionLevel (void);
-/* Enter function lexical level */
-
-void RememberFunctionLevel (struct FuncDesc* F);
-/* Remember the symbol tables for the level and leave the level without checks */
-
-void ReenterFunctionLevel (struct FuncDesc* F);
-/* Reenter the function lexical level using the existing tables from F */
-
-void LeaveFunctionLevel (void);
-/* Leave function lexical level */
-
-void EnterBlockLevel (void);
-/* Enter a nested block in a function */
-
-void LeaveBlockLevel (void);
-/* Leave a nested block in a function */
-
-void EnterStructLevel (void);
-/* Enter a nested block for a struct definition */
-
-void LeaveStructLevel (void);
-/* Leave a nested block for a struct definition */
-
-
-
-/*****************************************************************************/
-/*                              Find functions                               */
-/*****************************************************************************/
-
-
-
-SymEntry* FindSym (const char* Name);
-/* Find the symbol with the given name */
-
-SymEntry* FindGlobalSym (const char* Name);
-/* Find the symbol with the given name in the global symbol table only */
-
-SymEntry* FindLocalSym (const char* Name);
-/* Find the symbol with the given name in the current symbol table only */
-
-SymEntry* FindTagSym (const char* Name);
-/* Find the symbol with the given name in the tag table */
-
-SymEntry* FindStructField (const Type* TypeArray, const char* Name);
-/* Find a struct field in the fields list */
-
-
-
-/*****************************************************************************/
-/*                       Add stuff to the symbol table                       */
-/*****************************************************************************/
-
-
-
-SymEntry* AddStructSym (const char* Name, unsigned Type, unsigned Size, SymTable* Tab);
-/* Add a struct/union entry and return it */
-
-SymEntry* AddBitField (const char* Name, unsigned Offs, unsigned BitOffs, unsigned Width);
-/* Add a bit field to the local symbol table and return the symbol entry */
-
-SymEntry* AddConstSym (const char* Name, const Type* T, unsigned Flags, long Val);
-/* Add an constant symbol to the symbol table and return it */
-
-SymEntry* AddLabelSym (const char* Name, unsigned Flags);
-/* Add a goto label to the symbol table */
-
-SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs);
-/* Add a local symbol and return the symbol entry */
-
-SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags);
-/* Add an external or global symbol to the symbol table and return the entry */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-SymTable* GetSymTab (void);
-/* Return the current symbol table */
-
-SymTable* GetGlobalSymTab (void);
-/* Return the global symbol table */
-
-int SymIsLocal (SymEntry* Sym);
-/* Return true if the symbol is defined in the highest lexical level */
-
-void MakeZPSym (const char* Name);
-/* Mark the given symbol as zero page symbol */
-
-void PrintSymTable (const SymTable* Tab, FILE* F, const char* Header, ...);
-/* Write the symbol table to the given file */
-
-void EmitExternals (void);
-/* Write import/export statements for external symbols */
-
-void EmitDebugInfo (void);
-/* Emit debug infos for the locals of the current scope */
-
-
-
-/* End of symtab.h */
-
-#endif
diff --git a/src/cc65/testexpr.c b/src/cc65/testexpr.c
deleted file mode 100644 (file)
index 5bb7bf7..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                testexpr.c                                 */
-/*                                                                           */
-/*                        Test an expression and jump                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004      Ullrich von Bassewitz                                       */
-/*               Römerstraße 52                                              */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-                     
-/* cc65 */
-#include "codegen.h"
-#include "error.h"
-#include "expr.h"
-#include "loadexpr.h"
-#include "scanner.h"
-#include "testexpr.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned Test (unsigned Label, int Invert)
-/* Evaluate a boolean test expression and jump depending on the result of
-** the test and on Invert. The function returns one of the TESTEXPR_xx codes
-** defined above. If the jump is always true, a warning is output.
-*/
-{
-    ExprDesc Expr;
-    unsigned Result;
-
-    /* Read a boolean expression */
-    BoolExpr (hie0, &Expr);
-
-    /* Check for a constant expression */
-    if (ED_IsConstAbs (&Expr)) {
-
-        /* Result is constant, so we know the outcome */
-        Result = (Expr.IVal != 0);
-
-        /* Constant rvalue */
-        if (!Invert && Expr.IVal == 0) {
-            g_jump (Label);
-            Warning ("Unreachable code");
-        } else if (Invert && Expr.IVal != 0) {
-            g_jump (Label);
-        }
-
-    } else {
-
-        /* Result is unknown */
-        Result = TESTEXPR_UNKNOWN;
-
-        /* If the expr hasn't set condition codes, set the force-test flag */
-        if (!ED_IsTested (&Expr)) {
-            ED_MarkForTest (&Expr);
-        }
-
-        /* Load the value into the primary register */
-        LoadExpr (CF_FORCECHAR, &Expr);
-
-        /* Generate the jump */
-        if (Invert) {
-            g_truejump (CF_NONE, Label);
-        } else {
-            g_falsejump (CF_NONE, Label);
-        }
-    }
-
-    /* Return the result */
-    return Result;
-}
-
-
-
-unsigned TestInParens (unsigned Label, int Invert)
-/* Evaluate a boolean test expression in parenthesis and jump depending on
-** the result of the test * and on Invert. The function returns one of the
-** TESTEXPR_xx codes defined above. If the jump is always true, a warning is
-** output.
-*/
-{
-    unsigned Result;
-
-    /* Eat the parenthesis */
-    ConsumeLParen ();
-
-    /* Do the test */
-    Result = Test (Label, Invert);
-
-    /* Check for the closing brace */
-    ConsumeRParen ();
-
-    /* Return the result of the expression */
-    return Result;
-}
diff --git a/src/cc65/testexpr.h b/src/cc65/testexpr.h
deleted file mode 100644 (file)
index 478280a..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  test.h                                   */
-/*                                                                           */
-/*                        Test an expression and jump                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004      Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef TESTEXPR_H
-#define TESTEXPR_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-#define TESTEXPR_UNKNOWN        0       /* Result of expression unknown */
-#define TESTEXPR_TRUE           1       /* Expression yields true */
-#define TESTEXPR_FALSE          2       /* Expression yields false */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned Test (unsigned Label, int Invert);
-/* Evaluate a boolean test expression and jump depending on the result of
-** the test and on Invert. The function returns one of the TESTEXPR_xx codes
-** defined above. If the jump is always true, a warning is output.
-*/
-
-unsigned TestInParens (unsigned Label, int Invert);
-/* Evaluate a boolean test expression in parenthesis and jump depending on
-** the result of the test * and on Invert. The function returns one of the
-** TESTEXPR_xx codes defined above. If the jump is always true, a warning is
-** output.
-*/
-
-
-
-/* End of testexpr.h */
-
-#endif
diff --git a/src/cc65/textseg.c b/src/cc65/textseg.c
deleted file mode 100644 (file)
index e59bf2e..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 textseg.c                                 */
-/*                                                                           */
-/*                          Text segment structure                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* Note: This is NOT some sort of code segment, it is used to store lines of
-** output that are textual (not real code) instead.
-*/
-
-
-
-/* common */
-#include "xmalloc.h"
-#include "xsprintf.h"
-
-/* cc65 */
-#include "output.h"
-#include "textseg.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-TextSeg* NewTextSeg (SymEntry* Func)
-/* Create a new text segment, initialize and return it */
-{
-    /* Allocate memory for the structure */
-    TextSeg* S  = xmalloc (sizeof (TextSeg));
-
-    /* Initialize the fields */
-    S->Func     = Func;
-    InitCollection (&S->Lines);
-
-    /* Return the new struct */
-    return S;
-}
-
-
-
-void TS_AddVLine (TextSeg* S, const char* Format, va_list ap)
-/* Add a line to the given text segment */
-{
-    /* Format the line */
-    char Buf [256];
-    xvsprintf (Buf, sizeof (Buf), Format, ap);
-
-    /* Add a copy to the data segment */
-    CollAppend (&S->Lines, xstrdup (Buf));
-}
-
-
-
-void TS_AddLine (TextSeg* S, const char* Format, ...)
-/* Add a line to the given text segment */
-{
-    va_list ap;
-    va_start (ap, Format);
-    TS_AddVLine (S, Format, ap);
-    va_end (ap);
-}
-
-
-
-void TS_Output (const TextSeg* S)
-/* Output the text segment data to the output file */
-{
-    unsigned I;
-
-    /* Get the number of entries in this segment */
-    unsigned Count = CollCount (&S->Lines);
-
-    /* If the segment is actually empty, bail out */
-    if (Count == 0) {
-        return;
-    }
-
-    /* Output all entries */
-    for (I = 0; I < Count; ++I) {
-        WriteOutput ("%s\n", (const char*) CollConstAt (&S->Lines, I));
-    }
-
-    /* Add an additional newline after the segment output */
-    WriteOutput ("\n");
-}
diff --git a/src/cc65/textseg.h b/src/cc65/textseg.h
deleted file mode 100644 (file)
index 83ef0bc..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 textseg.h                                 */
-/*                                                                           */
-/*                          Text segment structure                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* Note: This is NOT some sort of code segment, it is used to store lines of
-** output that are textual (not real code) instead.
-*/
-
-
-
-#ifndef TEXTSEG_H
-#define TEXTSEG_H
-
-
-
-#include <stdarg.h>
-
-/* common */
-#include "attrib.h"
-#include "coll.h"
-
-/* cc65 */
-#include "symentry.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-typedef struct TextSeg TextSeg;
-struct TextSeg {
-    SymEntry*           Func;           /* Owner function */
-    Collection          Lines;          /* List of text lines */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-TextSeg* NewTextSeg (SymEntry* Func);
-/* Create a new text segment, initialize and return it */
-
-void TS_AddVLine (TextSeg* S, const char* Format, va_list ap) attribute ((format(printf,2,0)));
-/* Add a line to the given text segment */
-
-void TS_AddLine (TextSeg* S, const char* Format, ...) attribute ((format(printf,2,3)));
-/* Add a line to the given text segment */
-
-void TS_Output (const TextSeg* S);
-/* Output the text segment data to the output file */
-
-
-
-/* End of textseg.h */
-
-#endif
diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c
deleted file mode 100644 (file)
index 673dfa1..0000000
+++ /dev/null
@@ -1,439 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 typecmp.c                                 */
-/*                                                                           */
-/*               Type compare function for the cc65 C compiler               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2015, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* cc65 */
-#include "funcdesc.h"
-#include "global.h"
-#include "symtab.h"
-#include "typecmp.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void SetResult (typecmp_t* Result, typecmp_t Val)
-/* Set a new result value if it is less than the existing one */
-{
-    if (Val < *Result) {
-        /* printf ("SetResult = %d\n", Val); */
-        *Result = Val;
-    }
-}
-
-
-
-static int ParamsHaveDefaultPromotions (const FuncDesc* F)
-/* Check if any of the parameters of function F has a default promotion. In
-** this case, the function is not compatible with an empty parameter name list
-** declaration.
-*/
-{
-    /* Get the symbol table */
-    const SymTable* Tab = F->SymTab;
-
-    /* Get the first parameter in the list */
-    const SymEntry* Sym = Tab->SymHead;
-
-    /* Walk over all parameters */
-    while (Sym && (Sym->Flags & SC_PARAM)) {
-
-        /* If this is an integer type, check if the promoted type is equal
-        ** to the original type. If not, we have a default promotion.
-        */
-        if (IsClassInt (Sym->Type)) {
-            if (IntPromotion (Sym->Type) != Sym->Type) {
-                return 1;
-            }
-        }
-
-        /* Get the pointer to the next param */
-        Sym = Sym->NextSym;
-    }
-
-    /* No default promotions in the parameter list */
-    return 0;
-}
-
-
-
-static int EqualFuncParams (const FuncDesc* F1, const FuncDesc* F2)
-/* Compare two function symbol tables regarding function parameters. Return 1
-** if they are equal and 0 otherwise.
-*/
-{
-    /* Get the symbol tables */
-    const SymTable* Tab1 = F1->SymTab;
-    const SymTable* Tab2 = F2->SymTab;
-
-    /* Compare the parameter lists */
-    const SymEntry* Sym1 = Tab1->SymHead;
-    const SymEntry* Sym2 = Tab2->SymHead;
-
-    /* Compare the fields */
-    while (Sym1 && (Sym1->Flags & SC_PARAM) && Sym2 && (Sym2->Flags & SC_PARAM)) {
-
-        /* Get the symbol types */
-        Type* Type1 = Sym1->Type;
-        Type* Type2 = Sym2->Type;
-
-        /* If either of both functions is old style, apply the default
-        ** promotions to the parameter type.
-        */
-        if (F1->Flags & FD_OLDSTYLE) {
-            if (IsClassInt (Type1)) {
-                Type1 = IntPromotion (Type1);
-            }
-        }
-        if (F2->Flags & FD_OLDSTYLE) {
-            if (IsClassInt (Type2)) {
-                Type2 = IntPromotion (Type2);
-            }
-        }
-
-        /* Compare this field */
-        if (TypeCmp (Type1, Type2) < TC_EQUAL) {
-            /* Field types not equal */
-            return 0;
-        }
-
-        /* Get the pointers to the next fields */
-        Sym1 = Sym1->NextSym;
-        Sym2 = Sym2->NextSym;
-    }
-
-    /* Check both pointers against NULL or a non parameter to compare the
-    ** field count
-    */
-    return (Sym1 == 0 || (Sym1->Flags & SC_PARAM) == 0) &&
-           (Sym2 == 0 || (Sym2->Flags & SC_PARAM) == 0);
-}
-
-
-
-static int EqualSymTables (SymTable* Tab1, SymTable* Tab2)
-/* Compare two symbol tables. Return 1 if they are equal and 0 otherwise */
-{
-    /* Compare the parameter lists */
-    SymEntry* Sym1 = Tab1->SymHead;
-    SymEntry* Sym2 = Tab2->SymHead;
-
-    /* Compare the fields */
-    while (Sym1 && Sym2) {
-
-        /* Compare the names of this field */
-        if (!HasAnonName (Sym1) || !HasAnonName (Sym2)) {
-            if (strcmp (Sym1->Name, Sym2->Name) != 0) {
-                /* Names are not identical */
-                return 0;
-            }
-        }
-
-        /* Compare the types of this field */
-        if (TypeCmp (Sym1->Type, Sym2->Type) < TC_EQUAL) {
-            /* Field types not equal */
-            return 0;
-        }
-
-        /* Get the pointers to the next fields */
-        Sym1 = Sym1->NextSym;
-        Sym2 = Sym2->NextSym;
-    }
-
-    /* Check both pointers against NULL to compare the field count */
-    return (Sym1 == 0 && Sym2 == 0);
-}
-
-
-
-static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result)
-/* Recursively compare two types. */
-{
-    unsigned    Indirections;
-    unsigned    ElementCount;
-    SymEntry*   Sym1;
-    SymEntry*   Sym2;
-    SymTable*   Tab1;
-    SymTable*   Tab2;
-    FuncDesc*   F1;
-    FuncDesc*   F2;
-
-
-    /* Initialize stuff */
-    Indirections = 0;
-    ElementCount = 0;
-
-    /* Compare two types. Determine, where they differ */
-    while (lhs->C != T_END) {
-
-        TypeCode LeftType, RightType;
-        TypeCode LeftSign, RightSign;
-        TypeCode LeftQual, RightQual;
-        long LeftCount, RightCount;
-
-        /* Check if the end of the type string is reached */
-        if (rhs->C == T_END) {
-            /* End of comparison reached */
-            return;
-        }
-
-        /* Get the raw left and right types, signs and qualifiers */
-        LeftType  = GetType (lhs);
-        RightType = GetType (rhs);
-        LeftSign  = GetSignedness (lhs);
-        RightSign = GetSignedness (rhs);
-        LeftQual  = GetQualifier (lhs);
-        RightQual = GetQualifier (rhs);
-
-        /* If the left type is a pointer and the right is an array, both
-        ** are compatible.
-        */
-        if (LeftType == T_TYPE_PTR && RightType == T_TYPE_ARRAY) {
-            RightType = T_TYPE_PTR;
-        }
-
-        /* If the raw types are not identical, the types are incompatible */
-        if (LeftType != RightType) {
-            SetResult (Result, TC_INCOMPATIBLE);
-            return;
-        }
-
-        /* On indirection level zero, a qualifier or sign difference is
-        ** accepted. The types are no longer equal, but compatible.
-        */
-        if (LeftSign != RightSign) {
-            if (ElementCount == 0) {
-                SetResult (Result, TC_SIGN_DIFF);
-            } else {
-                SetResult (Result, TC_INCOMPATIBLE);
-                return;
-            }
-        }
-
-        if (LeftType == T_TYPE_FUNC) {
-            /* If a calling convention wasn't set explicitly,
-            ** then assume the default one.
-            */
-            if ((LeftQual & T_QUAL_CCONV) == T_QUAL_NONE) {
-                LeftQual |= (AutoCDecl || IsVariadicFunc (lhs)) ? T_QUAL_CDECL : T_QUAL_FASTCALL;
-            }
-            if ((RightQual & T_QUAL_CCONV) == T_QUAL_NONE) {
-                RightQual |= (AutoCDecl || IsVariadicFunc (rhs)) ? T_QUAL_CDECL : T_QUAL_FASTCALL;
-            }
-        }
-
-        if (LeftQual != RightQual) {
-            /* On the first indirection level, different qualifiers mean
-            ** that the types still are compatible. On the second level,
-            ** that is a (maybe minor) error. We create a special return-code
-            ** if a qualifier is dropped from a pointer. But, different calling
-            ** conventions are incompatible. Starting from the next level,
-            ** the types are incompatible if the qualifiers differ.
-            */
-            /* (Debugging statement) */
-            /* printf ("Ind = %d    %06X != %06X\n", Indirections, LeftQual, RightQual); */
-            switch (Indirections) {
-                case 0:
-                    SetResult (Result, TC_STRICT_COMPATIBLE);
-                    break;
-
-                case 1:
-                    /* A non-const value on the right is compatible to a
-                    ** const one to the left, same for volatile.
-                    */
-                    if ((LeftQual & T_QUAL_CONST) < (RightQual & T_QUAL_CONST) ||
-                        (LeftQual & T_QUAL_VOLATILE) < (RightQual & T_QUAL_VOLATILE)) {
-                        SetResult (Result, TC_QUAL_DIFF);
-                    } else {
-                        SetResult (Result, TC_STRICT_COMPATIBLE);
-                    }
-
-                    if (LeftType != T_TYPE_FUNC || (LeftQual & T_QUAL_CCONV) == (RightQual & T_QUAL_CCONV)) {
-                        break;
-                    }
-                    /* else fall through */
-
-                default:
-                    SetResult (Result, TC_INCOMPATIBLE);
-                    return;
-            }
-        }
-
-        /* Check for special type elements */
-        switch (LeftType) {
-            case T_TYPE_PTR:
-                ++Indirections;
-                break;
-
-            case T_TYPE_FUNC:
-                /* Compare the function descriptors */
-                F1 = GetFuncDesc (lhs);
-                F2 = GetFuncDesc (rhs);
-
-                /* If one of both functions has an empty parameter list (which
-                ** does also mean, it is not a function definition, because the
-                ** flag is reset in this case), it is considered equal to any
-                ** other definition, provided that the other has no default
-                ** promotions in the parameter list. If none of both parameter
-                ** lists is empty, we have to check the parameter lists and
-                ** other attributes.
-                */
-                if (F1->Flags & FD_EMPTY) {
-                    if ((F2->Flags & FD_EMPTY) == 0) {
-                        if (ParamsHaveDefaultPromotions (F2)) {
-                            /* Flags differ */
-                            SetResult (Result, TC_INCOMPATIBLE);
-                            return;
-                        }
-                    }
-                } else if (F2->Flags & FD_EMPTY) {
-                    if (ParamsHaveDefaultPromotions (F1)) {
-                        /* Flags differ */
-                        SetResult (Result, TC_INCOMPATIBLE);
-                        return;
-                    }
-                } else {
-
-                    /* Check the remaining flags */
-                    if ((F1->Flags & ~FD_IGNORE) != (F2->Flags & ~FD_IGNORE)) {
-                        /* Flags differ */
-                        SetResult (Result, TC_INCOMPATIBLE);
-                        return;
-                    }
-
-                    /* Compare the parameter lists */
-                    if (EqualFuncParams (F1, F2) == 0) {
-                        /* Parameter list is not identical */
-                        SetResult (Result, TC_INCOMPATIBLE);
-                        return;
-                    }
-                }
-
-                /* Keep on and compare the return type */
-                break;
-
-            case T_TYPE_ARRAY:
-                /* Check member count */
-                LeftCount  = GetElementCount (lhs);
-                RightCount = GetElementCount (rhs);
-                if (LeftCount  != UNSPECIFIED &&
-                    RightCount != UNSPECIFIED &&
-                    LeftCount  != RightCount) {
-                    /* Member count given but different */
-                    SetResult (Result, TC_INCOMPATIBLE);
-                    return;
-                }
-                break;
-
-            case T_TYPE_STRUCT:
-            case T_TYPE_UNION:
-                /* Compare the fields recursively. To do that, we fetch the
-                ** pointer to the struct definition from the type, and compare
-                ** the fields.
-                */
-                Sym1 = GetSymEntry (lhs);
-                Sym2 = GetSymEntry (rhs);
-
-                /* If one symbol has a name, the names must be identical */
-                if (!HasAnonName (Sym1) || !HasAnonName (Sym2)) {
-                    if (strcmp (Sym1->Name, Sym2->Name) != 0) {
-                        /* Names are not identical */
-                        SetResult (Result, TC_INCOMPATIBLE);
-                        return;
-                    }
-                }
-
-                /* Get the field tables from the struct entry */
-                Tab1 = Sym1->V.S.SymTab;
-                Tab2 = Sym2->V.S.SymTab;
-
-                /* One or both structs may be forward definitions. In this case,
-                ** the symbol tables are both non existant. Assume that the
-                ** structs are equal in this case.
-                */
-                if (Tab1 != 0 && Tab2 != 0) {
-
-                    if (EqualSymTables (Tab1, Tab2) == 0) {
-                        /* Field lists are not equal */
-                        SetResult (Result, TC_INCOMPATIBLE);
-                        return;
-                    }
-
-                }
-
-                /* Structs are equal */
-                break;
-        }
-
-        /* Next type string element */
-        ++lhs;
-        ++rhs;
-        ++ElementCount;
-    }
-
-    /* Check if end of rhs reached */
-    if (rhs->C == T_END) {
-        SetResult (Result, TC_EQUAL);
-    } else {
-        SetResult (Result, TC_INCOMPATIBLE);
-    }
-}
-
-
-
-typecmp_t TypeCmp (const Type* lhs, const Type* rhs)
-/* Compare two types and return the result */
-{
-    /* Assume the types are identical */
-    typecmp_t   Result = TC_IDENTICAL;
-
-#if 0
-    printf ("Left : "); PrintRawType (stdout, lhs);
-    printf ("Right: "); PrintRawType (stdout, rhs);
-#endif
-
-    /* Recursively compare the types if they aren't identical */
-    if (rhs != lhs) {
-        DoCompare (lhs, rhs, &Result);
-    }
-
-    /* Return the result */
-    return Result;
-}
diff --git a/src/cc65/typecmp.h b/src/cc65/typecmp.h
deleted file mode 100644 (file)
index 5f95e42..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 typecmp.h                                 */
-/*                                                                           */
-/*               Type compare function for the cc65 C compiler               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2000 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef TYPECMP_H
-#define TYPECMP_H
-
-
-
-#include "datatype.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Degree of type compatibility. Must be in ascending order */
-typedef enum {
-    TC_INCOMPATIBLE,              /* Distinct types */
-    TC_SIGN_DIFF,                 /* Signedness differs */
-    TC_COMPATIBLE = TC_SIGN_DIFF, /* Compatible types */
-    TC_QUAL_DIFF,                 /* Types differ in qualifier of pointer */
-    TC_STRICT_COMPATIBLE,         /* Strict compatibility */
-    TC_EQUAL,                     /* Types are equal */
-    TC_IDENTICAL                  /* Types are identical */
-} typecmp_t;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-typecmp_t TypeCmp (const Type* lhs, const Type* rhs);
-/* Compare two types and return the result */
-
-
-
-/* End of typecmp.h */
-
-#endif
diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c
deleted file mode 100644 (file)
index e4edd6a..0000000
+++ /dev/null
@@ -1,297 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                typeconv.c                                 */
-/*                                                                           */
-/*                          Handle type conversions                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2008 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "shift.h"
-
-/* cc65 */
-#include "codegen.h"
-#include "datatype.h"
-#include "declare.h"
-#include "error.h"
-#include "expr.h"
-#include "loadexpr.h"
-#include "scanner.h"
-#include "typecmp.h"
-#include "typeconv.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void DoConversion (ExprDesc* Expr, const Type* NewType)
-/* Emit code to convert the given expression to a new type. */
-{
-    Type*    OldType;
-    unsigned OldSize;
-    unsigned NewSize;
-
-
-    /* Remember the old type */
-    OldType = Expr->Type;
-
-    /* If we're converting to void, we're done. Note: This does also cover a
-    ** conversion void -> void.
-    */
-    if (IsTypeVoid (NewType)) {
-        ED_MakeRVal (Expr);     /* Never an lvalue */
-        goto ExitPoint;
-    }
-
-    /* Don't allow casts from void to something else. */
-    if (IsTypeVoid (OldType)) {
-        Error ("Cannot convert from `void' to something else");
-        goto ExitPoint;
-    }
-
-    /* Get the sizes of the types. Since we've excluded void types, checking
-    ** for known sizes makes sense here.
-    */
-    OldSize = CheckedSizeOf (OldType);
-    NewSize = CheckedSizeOf (NewType);
-
-    /* lvalue? */
-    if (ED_IsLVal (Expr)) {
-
-        /* We have an lvalue. If the new size is smaller than the old one,
-        ** we don't need to do anything. The compiler will generate code
-        ** to load only the portion of the value that is actually needed.
-        ** This works only on a little endian architecture, but that's
-        ** what we support.
-        ** If both sizes are equal, do also leave the value alone.
-        ** If the new size is larger, we must convert the value.
-        */
-        if (NewSize > OldSize) {
-            /* Load the value into the primary */
-            LoadExpr (CF_NONE, Expr);
-
-            /* Emit typecast code */
-            g_typecast (TypeOf (NewType), TypeOf (OldType) | CF_FORCECHAR);
-
-            /* Value is now in primary and an rvalue */
-            ED_MakeRValExpr (Expr);
-        }
-
-    } else if (ED_IsLocAbs (Expr)) {
-
-        /* A cast of a constant numeric value to another type. Be sure
-        ** to handle sign extension correctly.
-        */
-
-        /* Get the current and new size of the value */
-        unsigned OldBits = OldSize * 8;
-        unsigned NewBits = NewSize * 8;
-
-        /* Check if the new datatype will have a smaller range. If it
-        ** has a larger range, things are OK, since the value is
-        ** internally already represented by a long.
-        */
-        if (NewBits <= OldBits) {
-
-            /* Cut the value to the new size */
-            Expr->IVal &= (0xFFFFFFFFUL >> (32 - NewBits));
-
-            /* If the new type is signed, sign extend the value */
-            if (IsSignSigned (NewType)) {
-                if (Expr->IVal & (0x01UL << (NewBits-1))) {
-                    /* Beware: Use the safe shift routine here. */
-                    Expr->IVal |= shl_l (~0UL, NewBits);
-                }
-            }
-        }
-
-    } else {
-
-        /* The value is not a constant. If the sizes of the types are
-        ** not equal, add conversion code. Be sure to convert chars
-        ** correctly.
-        */
-        if (OldSize != NewSize) {
-
-            /* Load the value into the primary */
-            LoadExpr (CF_NONE, Expr);
-
-            /* Emit typecast code. */
-            g_typecast (TypeOf (NewType), TypeOf (OldType) | CF_FORCECHAR);
-
-            /* Value is now a rvalue in the primary */
-            ED_MakeRValExpr (Expr);
-        }
-    }
-
-ExitPoint:
-    /* The expression has always the new type */
-    ReplaceType (Expr, NewType);
-}
-
-
-
-void TypeConversion (ExprDesc* Expr, Type* NewType)
-/* Do an automatic conversion of the given expression to the new type. Output
-** warnings or errors where this automatic conversion is suspicious or
-** impossible.
-*/
-{
-#if 0
-    /* Debugging */
-    printf ("Expr:\n=======================================\n");
-    PrintExprDesc (stdout, Expr);
-    printf ("Type:\n=======================================\n");
-    PrintType (stdout, NewType);
-    printf ("\n");
-    PrintRawType (stdout, NewType);
-#endif
-
-    /* First, do some type checking */
-    if (IsTypeVoid (NewType) || IsTypeVoid (Expr->Type)) {
-        /* If one of the sides are of type void, output a more apropriate
-        ** error message.
-        */
-        Error ("Illegal type");
-    }
-
-    /* If Expr is a function, convert it to pointer to function */
-    if (IsTypeFunc(Expr->Type)) {
-        Expr->Type = PointerTo (Expr->Type);
-    }
-
-    /* If both types are equal, no conversion is needed */
-    if (TypeCmp (Expr->Type, NewType) >= TC_EQUAL) {
-        /* We're already done */
-        return;
-    }
-
-    /* Check for conversion problems */
-    if (IsClassInt (NewType)) {
-
-        /* Handle conversions to int type */
-        if (IsClassPtr (Expr->Type)) {
-            /* Pointer -> int conversion. Convert array to pointer */
-            if (IsTypeArray (Expr->Type)) {
-                Expr->Type = ArrayToPtr (Expr->Type);
-            }
-            Warning ("Converting pointer to integer without a cast");
-        } else if (!IsClassInt (Expr->Type) && !IsClassFloat (Expr->Type)) {
-            Error ("Incompatible types");
-        }
-
-    } else if (IsClassFloat (NewType)) {
-
-        if (!IsClassFloat (Expr->Type) && !IsClassInt (Expr->Type)) {
-            Error ("Incompatible types");
-        }
-
-    } else if (IsClassPtr (NewType)) {
-
-        /* Handle conversions to pointer type */
-        if (IsClassPtr (Expr->Type)) {
-
-            /* Convert array to pointer */
-            if (IsTypeArray (Expr->Type)) {
-                Expr->Type = ArrayToPtr (Expr->Type);
-            }
-
-            /* Pointer to pointer assignment is valid, if:
-            **   - both point to the same types, or
-            **   - the rhs pointer is a void pointer, or
-            **   - the lhs pointer is a void pointer.
-            */
-            if (!IsTypeVoid (Indirect (NewType)) && !IsTypeVoid (Indirect (Expr->Type))) {
-                /* Compare the types */
-                switch (TypeCmp (NewType, Expr->Type)) {
-
-                    case TC_INCOMPATIBLE:
-                        Error ("Incompatible pointer types");
-                        break;
-
-                    case TC_QUAL_DIFF:
-                        Error ("Pointer types differ in type qualifiers");
-                        break;
-
-                    default:
-                        /* Ok */
-                        break;
-                }
-            }
-
-        } else if (IsClassInt (Expr->Type)) {
-            /* Int to pointer assignment is valid only for constant zero */
-            if (!ED_IsConstAbsInt (Expr) || Expr->IVal != 0) {
-                Warning ("Converting integer to pointer without a cast");
-            }
-        } else {
-            Error ("Incompatible types");
-        }
-
-    } else {
-
-        /* Invalid automatic conversion */
-        Error ("Incompatible types");
-
-    }
-
-    /* Do the actual conversion */
-    DoConversion (Expr, NewType);
-}
-
-
-
-void TypeCast (ExprDesc* Expr)
-/* Handle an explicit cast. */
-{
-    Type    NewType[MAXTYPELEN];
-
-    /* Skip the left paren */
-    NextToken ();
-
-    /* Read the type */
-    ParseType (NewType);
-
-    /* Closing paren */
-    ConsumeRParen ();
-
-    /* Read the expression we have to cast */
-    hie10 (Expr);
-
-    /* Convert functions and arrays to "pointer to" object */
-    Expr->Type = PtrConversion (Expr->Type);
-
-    /* Convert the value. */
-    DoConversion (Expr, NewType);
-}
diff --git a/src/cc65/typeconv.h b/src/cc65/typeconv.h
deleted file mode 100644 (file)
index 8321ade..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                typeconv.h                                 */
-/*                                                                           */
-/*                          Handle type conversions                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2008 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef TYPECONV_H
-#define TYPECONV_H
-
-
-
-/* cc65 */
-#include "exprdesc.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void TypeConversion (ExprDesc* Expr, Type* NewType);
-/* Do an automatic conversion of the given expression to the new type. Output
-** warnings or errors where this automatic conversion is suspicious or
-** impossible.
-*/
-
-void TypeCast (ExprDesc* Expr);
-/* Handle an explicit cast. */
-
-
-
-/* End of typeconv.h */
-
-#endif
diff --git a/src/cc65/util.c b/src/cc65/util.c
deleted file mode 100644 (file)
index ccc7ccb..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  util.c                                   */
-/*                                                                           */
-/*                 Utility functions for the cc65 C compiler                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2004 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include "util.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int PowerOf2 (unsigned long Val)
-/* Return the exponent if val is a power of two. Return -1 if val is not a
-** power of two.
-*/
-{
-    int I;
-    unsigned long Mask = 0x0001;
-
-    for (I = 0; I < 32; ++I) {
-        if (Val == Mask) {
-            return I;
-        }
-        Mask <<= 1;
-    }
-    return -1;
-}
diff --git a/src/cc65/util.h b/src/cc65/util.h
deleted file mode 100644 (file)
index 2aa8a2f..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  util.h                                   */
-/*                                                                           */
-/*                 Utility functions for the cc65 C compiler                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2004 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef UTIL_H
-#define UTIL_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int PowerOf2 (unsigned long Val);
-/* Return the exponent if val is a power of two. Return -1 if val is not a
-** power of two.
-*/
-
-
-
-/* End of util.h */
-
-#endif
diff --git a/src/chrcvt/error.c b/src/chrcvt/error.c
deleted file mode 100644 (file)
index 424080d..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 error.c                                   */
-/*                                                                           */
-/*            Error handling for the chrcvt vector font converter            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Warning (const char* Format, ...)
-/* Print a warning message */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "Warning: ");
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-}
-
-
-
-void Error (const char* Format, ...)
-/* Print an error message and die */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "Error: ");
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-    exit (EXIT_FAILURE);
-}
-
-
-
-void Internal (const char* Format, ...)
-/* Print an internal error message and die */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "Internal error: ");
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-    exit (EXIT_FAILURE);
-}
-
-
-
diff --git a/src/chrcvt/error.h b/src/chrcvt/error.h
deleted file mode 100644 (file)
index 93f59cc..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 error.h                                   */
-/*                                                                           */
-/*            Error handling for the chrcvt vector font converter            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ERROR_H
-#define ERROR_H
-
-
-
-/* common */
-#include "attrib.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Warning (const char* Format, ...) attribute((format(printf,1,2)));
-/* Print a warning message */
-
-void Error (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print an error message and die */
-
-void Internal (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print an internal error message and die */
-
-
-
-/* End of error.h */
-
-#endif
-
-
-
diff --git a/src/chrcvt/main.c b/src/chrcvt/main.c
deleted file mode 100644 (file)
index 7b1c321..0000000
+++ /dev/null
@@ -1,539 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  main.c                                   */
-/*                                                                           */
-/*             Main program of the chrcvt vector font converter              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "cmdline.h"
-#include "fname.h"
-#include "print.h"
-#include "strbuf.h"
-#include "xmalloc.h"
-#include "version.h"
-
-/* chrcvt */
-#include "error.h"
-
-
-
-/*
-** The following is a corrected doc from the BGI font editor toolkit:
-**
-**                      BGI Stroke File Format
-**
-** The structure of Borland .CHR (stroke) files is as follows:
-**
-** ;  offset 0h is a Borland header:
-** ;
-**         HeaderSize      equ     080h
-**         DataSize        equ     (size of font file)
-**         descr           equ     "Triplex font"
-**         fname           equ     "TRIP"
-**         MajorVersion    equ     1
-**         MinorVersion    equ     0
-**
-**         db      'PK',8,8
-**         db      'BGI ',descr,'  V'
-**         db      MajorVersion+'0'
-**         db      (MinorVersion / 10)+'0',(MinorVersion mod 10)+'0'
-**         db      ' - 19 October 1987',0DH,0AH
-**         db      'Copyright (c) 1987 Borland International', 0dh,0ah
-**         db      0,1ah                           ; null & ctrl-Z = end
-**
-**         dw      HeaderSize                      ; size of header
-**         db      fname                           ; font name
-**         dw      DataSize                        ; font file size
-**         db      MajorVersion,MinorVersion       ; version #'s
-**         db      1,0                             ; minimal version #'s
-**
-**         db      (HeaderSize - $) DUP (0)        ; pad out to header size
-**
-** At offset 80h starts data for the file:
-**
-** ;               80h     '+'  flags stroke file type
-** ;               81h-82h  number chars in font file (n)
-** ;               83h      undefined
-** ;               84h      ASCII value of first char in file
-** ;               85h-86h  offset to stroke definitions (8+3n)
-** ;               87h      scan flag (normally 0)
-** ;               88h      distance from origin to top of capital
-** ;               89h      distance from origin to baseline
-** ;               8Ah      distance from origin to bottom descender
-** ;               8Bh-8Fh  undefined
-** ;               90h      offsets to individual character definitions
-** ;               90h+2n   width table (one word per character)
-** ;               90h+3n   start of character definitions
-** ;
-** The individual character definitions consist of a variable number of words
-** describing the operations required to render a character. Each word
-** consists of an (x,y) coordinate pair and a two-bit opcode, encoded as shown
-** here:
-**
-** Byte 1          7   6   5   4   3   2   1   0     bit #
-**                op1  <seven bit signed X coord>
-**
-** Byte 2          7   6   5   4   3   2   1   0     bit #
-**                op2  <seven bit signed Y coord>
-**
-**
-**           Opcodes
-**
-**         op1=0  op2=0  End of character definition.
-**         op1=1  op2=0  Move the pointer to (x,y)
-**         op1=1  op2=1  Draw from current pointer to (x,y)
-*/
-
-
-
-/* The target file format is designed to be read by a cc65 compiled program
-** more easily. It should not be necessary to load the whole file into a
-** buffer to parse it, or seek within the file. Also using less memory if
-** possible would be fine. Therefore we use the following structure:
-**
-** Header portion:
-**      .byte   $54, $43, $48, $00              ; "TCH" version
-**      .word   <size of data portion>
-** Data portion:
-**      .byte   <top>                           ; Baseline to top
-**      .byte   <bottom>                        ; Baseline to bottom
-**      .byte   <height>                        ; Maximum char height
-**      .byte   <width>, ...                    ; $5F width bytes
-**      .word   <char definition offset>, ...   ; $5F char def offsets
-** Character definitions:
-**      .word   <converted opcode>, ...
-**      .byte   $80
-**
-** The baseline of the character is assume to be at position zero. top and
-** bottom are both positive values. The former extends in positive, the other
-** in negative direction of the baseline. height contains the sum of top and
-** bottom and is stored here just for easier handling.
-**
-** The opcodes get converted for easier handling: END is marked by bit 7
-** set in the first byte. The second byte of this opcode is not needed.
-** Bit 7 of the second byte marks a MOVE (bit 7 = 0) or DRAW (bit 7 = 1).
-**
-** The number of characters is fixed to $20..$7E (space to tilde), so character
-** widths and offsets can be stored in fixed size preallocated tables. The
-** space for the character definitions is allocated on the heap, it's size
-** is stored in the header.
-**
-** Above structure allows a program to read the header portion of the file,
-** validate it, then read the remainder of the file into memory in one chunk.
-** The character definition offsets will then be converted into pointers by
-** adding the character definition base pointer to each.
-*/
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-static unsigned FilesProcessed = 0;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void Usage (void)
-/* Print usage information and exit */
-{
-    fprintf (stderr,
-             "Usage: %s [options] file [options] [file]\n"
-             "Short options:\n"
-             "  -h\t\t\tHelp (this text)\n"
-             "  -v\t\t\tBe more verbose\n"
-             "  -V\t\t\tPrint the version number and exit\n"
-             "\n"
-             "Long options:\n"
-             "  --help\t\tHelp (this text)\n"
-             "  --verbose\t\tBe more verbose\n"
-             "  --version\t\tPrint the version number and exit\n",
-             ProgName);
-}
-
-
-
-static void OptHelp (const char* Opt attribute ((unused)),
-                     const char* Arg attribute ((unused)))
-/* Print usage information and exit */
-{
-    Usage ();
-    exit (EXIT_SUCCESS);
-}
-
-
-
-static void OptVerbose (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Increase verbosity */
-{
-    ++Verbosity;
-}
-
-
-
-static void OptVersion (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Print the assembler version */
-{
-    fprintf (stderr,
-             "%s V%s - (C) Copyright 2009, Ullrich von Bassewitz\n",
-             ProgName, GetVersionAsString ());
-}
-
-
-
-static void ConvertChar (StrBuf* Data, const unsigned char* Buf, int Remaining)
-/* Convert data for one character. Original data is in Buf, converted data
-** will be placed in Data.
-*/
-{
-    /* Convert all drawing vectors for this character */
-    while (1) {
-
-        unsigned Op;
-
-        /* Check if we have enough data left */
-        if (Remaining < 2) {
-            Error ("End of file while parsing character definitions");
-        }
-
-        /* Get the next op word */
-        Op = (Buf[0] + (Buf[1] << 8)) & 0x8080;
-
-        /* Check the opcode */
-        switch (Op) {
-
-            case 0x0000:
-                /* End */
-                if (SB_IsEmpty (Data)) {
-                    /* No ops. We need to add an empty one */
-                    SB_AppendChar (Data, 0x00);
-                    SB_AppendChar (Data, 0x00);
-                }
-                /* Add an end marker to the last op in the buffer */
-                SB_GetBuf (Data)[SB_GetLen (Data) - 2] |= 0x80;
-                return;
-
-            case 0x0080:
-                /* Move */
-                SB_AppendChar (Data, Buf[0] & 0x7F);
-                SB_AppendChar (Data, Buf[1] & 0x7F);
-                break;
-
-            case 0x8000:
-                /* Invalid opcode */
-                Error ("Input file contains invalid opcode 0x8000");
-                break;
-
-            case 0x8080:
-                /* Draw */
-                SB_AppendChar (Data, Buf[0] & 0x7F);
-                SB_AppendChar (Data, Buf[1] | 0x80);
-                break;
-        }
-
-        /* Next Op */
-        Buf += 2;
-        Remaining -= 2;
-    }
-}
-
-
-
-static void ConvertFile (const char* Input, const char* Output)
-/* Convert one vector font file */
-{
-    /* The header of a BGI vector font file */
-    static const unsigned char ChrHeader[] = {
-        /* According to the Borland docs, the following should work, but it
-        ** doesn't. Seems like there are fonts that work, but don't have the
-        ** "BGI" string in the header. So we use just the PK\b\b mark as
-        ** a header.
-        **
-        ** 0x50, 0x4B, 0x08, 0x08, 0x42, 0x47, 0x49, 0x20
-        */
-        0x50, 0x4B, 0x08, 0x08
-    };
-
-    /* The header of a TGI vector font file */
-    unsigned char TchHeader[] = {
-        0x54, 0x43, 0x48, 0x00,         /* "TCH" version */
-        0x00, 0x00,                     /* size of char definitions */
-        0x00,                           /* Top */
-        0x00,                           /* Baseline */
-        0x00,                           /* Bottom */
-    };
-
-    long           Size;
-    unsigned char* Buf;
-    unsigned char* MsgEnd;
-    unsigned       FirstChar;
-    unsigned       CharCount;
-    unsigned       LastChar;
-    unsigned       Char;
-    unsigned       Offs;
-    const unsigned char* OffsetBuf;
-    const unsigned char* WidthBuf;
-    const unsigned char* VectorBuf;
-    StrBuf         Offsets  = AUTO_STRBUF_INITIALIZER;
-    StrBuf         VectorData = AUTO_STRBUF_INITIALIZER;
-
-
-    /* Try to open the file for reading */
-    FILE* F = fopen (Input, "rb");
-    if (F == 0) {
-        Error ("Cannot open input file `%s': %s", Input, strerror (errno));
-    }
-
-    /* Seek to the end and determine the size */
-    fseek (F, 0, SEEK_END);
-    Size = ftell (F);
-
-    /* Seek back to the start of the file */
-    fseek (F, 0, SEEK_SET);
-
-    /* Check if the size is reasonable */
-    if (Size > 32*1024) {
-        Error ("Input file `%s' is too large (max = 32k)", Input);
-    } else if (Size < 0x100) {
-        Error ("Input file `%s' is too small to be a vector font file", Input);
-    }
-
-    /* Allocate memory for the file */
-    Buf = xmalloc ((size_t) Size);
-
-    /* Read the file contents into the buffer */
-    if (fread (Buf, 1, (size_t) Size, F) != (size_t) Size) {
-        Error ("Error reading from input file `%s'", Input);
-    }
-
-    /* Close the file */
-    (void) fclose (F);
-
-    /* Verify the header */
-    if (memcmp (Buf, ChrHeader, sizeof (ChrHeader)) != 0) {
-        Error ("Invalid format for `%s': invalid header", Input);
-    }
-    MsgEnd = memchr (Buf + sizeof (ChrHeader), 0x1A, 0x80);
-    if (MsgEnd == 0) {
-        Error ("Invalid format for `%s': description not found", Input);
-    }
-    if (MsgEnd[1] != 0x80 || MsgEnd[2] != 0x00) {
-        Error ("Invalid format for `%s': wrong header size", Input);
-    }
-
-    /* We expect the file to hold chars from 0x20 (space) to 0x7E (tilde) */
-    FirstChar = Buf[0x84];
-    CharCount = Buf[0x81] + (Buf[0x82] << 8);
-    LastChar  = FirstChar + CharCount - 1;
-    if (FirstChar > 0x20 || LastChar < 0x7E) {
-        Print (stderr, 1, "FirstChar = $%04X, CharCount = %u\n",
-               FirstChar, CharCount);
-        Error ("File `%s' doesn't contain the chars we need", Input);
-    } else if (LastChar >= 0x100) {
-        Error ("File `%s' contains too many character definitions", Input);
-    }
-
-    /* Print the copyright from the header */
-    Print (stderr, 1, "%.*s\n", (int) (MsgEnd - Buf - 4), Buf+4);
-
-    /* Get pointers to the width table, the offset table and the vector data
-    ** table. The first two corrected for 0x20 as first entry.
-    */
-    OffsetBuf = Buf + 0x90 + ((0x20 - FirstChar) * 2);
-    WidthBuf  = Buf + 0x90 + (CharCount * 2) + (0x20 - FirstChar);
-    VectorBuf = Buf + 0x90 + (CharCount * 3);
-
-    /* Convert the characters */
-    for (Char = 0x20; Char <= 0x7E; ++Char, OffsetBuf += 2) {
-
-        int Remaining;
-
-        /* Add the offset to the offset table */
-        Offs = SB_GetLen (&VectorData);
-        SB_AppendChar (&Offsets, Offs & 0xFF);
-        SB_AppendChar (&Offsets, (Offs >> 8) & 0xFF);
-
-        /* Get the offset of the vector data in the BGI data buffer */
-        Offs = OffsetBuf[0] + (OffsetBuf[1] << 8);
-
-        /* Calculate the remaining data in the buffer for this character */
-        Remaining = Size - (Offs + (VectorBuf - Buf));
-
-        /* Check if the offset is valid */
-        if (Remaining <= 0) {
-            Error ("Invalid data offset in input file `%s'", Input);
-        }
-
-        /* Convert the vector data and place it into the buffer */
-        ConvertChar (&VectorData, VectorBuf + Offs, Remaining);
-    }
-
-    /* Complete the TCH header */
-    Offs = 3 + 0x5F + 2*0x5F + SB_GetLen (&VectorData);
-    TchHeader[4] = Offs & 0xFF;
-    TchHeader[5] = (Offs >> 8) & 0xFF;
-    TchHeader[6] = Buf[0x88];
-    TchHeader[7] = (unsigned char) -(signed char)(Buf[0x8A]);
-    TchHeader[8] = TchHeader[6] + TchHeader[7];
-
-    /* The baseline must be zero, otherwise we cannot convert */
-    if (Buf[0x89] != 0) {
-        Error ("Baseline of font in `%s' is not zero", Input);
-    }
-
-    /* If the output file is NULL, use the name of the input file with ".tch"
-    ** appended.
-    */
-    if (Output == 0) {
-        Output = MakeFilename (Input, ".tch");
-    }
-
-    /* Open the output file */
-    F = fopen (Output, "wb");
-    if (F == 0) {
-        Error ("Cannot open output file `%s': %s", Output, strerror (errno));
-    }
-
-    /* Write the header to the output file */
-    if (fwrite (TchHeader, 1, sizeof (TchHeader), F) != sizeof (TchHeader)) {
-        Error ("Error writing to `%s' (disk full?)", Output);
-    }
-
-    /* Write the width table to the output file */
-    if (fwrite (WidthBuf, 1, 0x5F, F) != 0x5F) {
-        Error ("Error writing to `%s' (disk full?)", Output);
-    }
-
-    /* Write the offsets to the output file */
-    if (fwrite (SB_GetConstBuf (&Offsets), 1, 0x5F * 2, F) != 0x5F * 2) {
-        Error ("Error writing to `%s' (disk full?)", Output);
-    }
-
-    /* Write the data to the output file */
-    Offs = SB_GetLen (&VectorData);
-    if (fwrite (SB_GetConstBuf (&VectorData), 1, Offs, F) != Offs) {
-        Error ("Error writing to `%s' (disk full?)", Output);
-    }
-
-    /* Close the output file */
-    if (fclose (F) != 0) {
-        Error ("Error closing to `%s': %s", Output, strerror (errno));
-    }
-
-    /* Done */
-}
-
-
-
-int main (int argc, char* argv [])
-/* Assembler main program */
-{
-    /* Program long options */
-    static const LongOpt OptTab[] = {
-        { "--help",             0,      OptHelp                 },
-        { "--verbose",          0,      OptVerbose              },
-        { "--version",          0,      OptVersion              },
-    };
-
-    unsigned I;
-
-    /* Initialize the cmdline module */
-    InitCmdLine (&argc, &argv, "chrcvt");
-
-    /* Check the parameters */
-    I = 1;
-    while (I < ArgCount) {
-
-        /* Get the argument */
-        const char* Arg = ArgVec[I];
-
-        /* Check for an option */
-        if (Arg [0] == '-') {
-            switch (Arg [1]) {
-
-                case '-':
-                    LongOption (&I, OptTab, sizeof(OptTab)/sizeof(OptTab[0]));
-                    break;
-
-                case 'h':
-                    OptHelp (Arg, 0);
-                    break;
-
-                case 'v':
-                    OptVerbose (Arg, 0);
-                    break;
-
-                case 'V':
-                    OptVersion (Arg, 0);
-                    break;
-
-                default:
-                    UnknownOption (Arg);
-                    break;
-
-            }
-        } else {
-            /* Filename. Dump it. */
-            ConvertFile (Arg, 0);
-            ++FilesProcessed;
-        }
-
-        /* Next argument */
-        ++I;
-    }
-
-    /* Print a message if we did not process any files */
-    if (FilesProcessed == 0) {
-        fprintf (stderr, "%s: No input files\n", ProgName);
-    }
-
-    /* Success */
-    return EXIT_SUCCESS;
-}
-
-
-
diff --git a/src/cl65.vcxproj b/src/cl65.vcxproj
deleted file mode 100644 (file)
index 64c1126..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{F657912F-050A-488B-B203-50ED5715CDD7}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>cl65</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>false</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="cl65\error.c" />
-    <ClCompile Include="cl65\global.c" />
-    <ClCompile Include="cl65\main.c" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="cl65\error.h" />
-    <ClInclude Include="cl65\global.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="cl65\spawn-amiga.inc" />
-    <None Include="cl65\spawn-unix.inc" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/src/cl65/error.c b/src/cl65/error.c
deleted file mode 100644 (file)
index ee2adcf..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.c                                  */
-/*                                                                           */
-/*         Error handling for the cl65 compile and link utility              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-/* common */
-#include "cmdline.h"
-          
-/* cl65 */
-#include "global.h"
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Warning (const char* Format, ...)
-/* Print a warning message */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "%s: ", ProgName);
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-}
-
-
-
-void Error (const char* Format, ...)
-/* Print an error message and die */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "%s: ", ProgName);
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-    exit (EXIT_FAILURE);
-}
-
-
-
-void Internal (const char* Format, ...)
-/* Print an internal error message and die */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "%s: Internal error: ", ProgName);
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-    exit (EXIT_FAILURE);
-}
-
diff --git a/src/cl65/error.h b/src/cl65/error.h
deleted file mode 100644 (file)
index b1ff306..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.h                                  */
-/*                                                                           */
-/*         Error handling for the cl65 compile and link utility              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ERROR_H
-#define ERROR_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Warning (const char* Format, ...) attribute((format(printf,1,2)));
-/* Print a warning message */
-
-void Error (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print an error message and die */
-
-void Internal (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print an internal error message and die */
-
-
-
-/* End of error.h */
-
-#endif
diff --git a/src/cl65/global.c b/src/cl65/global.c
deleted file mode 100644 (file)
index f522224..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.c                                  */
-/*                                                                           */
-/*          Global variables for the cl65 compile and link utility           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2002 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include "global.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-unsigned char Debug     = 0;            /* Debug mode enabled? */
diff --git a/src/cl65/global.h b/src/cl65/global.h
deleted file mode 100644 (file)
index 2d2d969..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.h                                  */
-/*                                                                           */
-/*          Global variables for the cl65 compile and link utility           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2002 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef GLOBAL_H
-#define GLOBAL_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-extern unsigned char Debug;             /* Debug mode enabled? */
-
-
-
-/* End of global.h */
-
-#endif
diff --git a/src/cl65/main.c b/src/cl65/main.c
deleted file mode 100644 (file)
index a0a6ed0..0000000
+++ /dev/null
@@ -1,1540 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  main.c                                   */
-/*                                                                           */
-/*             Main module for the cl65 compile-and-link utility             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1999-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* Check out if we have a spawn() function on the system, or if we must use
-** our own.
-*/
-#if defined(_WIN32)
-#  define HAVE_SPAWN 1
-#else
-#  define NEED_SPAWN 1
-#endif
-
-/* GCC strictly follows http://c-faq.com/ansi/constmismatch.html and issues an
-** 'incompatible pointer type' warning - that can't be suppressed via #pragma.
-** The spawnvp() prototype of MinGW (http://www.mingw.org/) differs from the
-** one of MinGW-w64 (http://mingw-w64.sourceforge.net/) regarding constness.
-** So there's no alternative to actually distinguish these environments :-(
-*/
-#define SPAWN_ARGV_CONST_CAST
-#if defined(__MINGW32__)
-#  include <_mingw.h>
-#  if !defined(__MINGW64_VERSION_MAJOR)
-#    undef  SPAWN_ARGV_CONST_CAST
-#    define SPAWN_ARGV_CONST_CAST (const char* const *)
-#  endif
-#endif
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-#if defined(HAVE_SPAWN)
-#  include <process.h>
-#endif
-
-/* common */
-#include "attrib.h"
-#include "cmdline.h"
-#include "filetype.h"
-#include "fname.h"
-#include "mmodel.h"
-#include "strbuf.h"
-#include "target.h"
-#include "version.h"
-#include "xmalloc.h"
-
-/* cl65 */
-#include "global.h"
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Struct that describes a command */
-typedef struct CmdDesc CmdDesc;
-struct CmdDesc {
-    char*       Name;           /* The command name */
-
-    unsigned    ArgCount;       /* Count of arguments */
-    unsigned    ArgMax;         /* Maximum count of arguments */
-    char**      Args;           /* The arguments */
-
-    unsigned    FileCount;      /* Count of files to translate */
-    unsigned    FileMax;        /* Maximum count of files */
-    char**      Files;          /* The files */
-};
-
-/* Command descriptors for the different programs */
-static CmdDesc CC65 = { 0, 0, 0, 0, 0, 0, 0 };
-static CmdDesc CA65 = { 0, 0, 0, 0, 0, 0, 0 };
-static CmdDesc CO65 = { 0, 0, 0, 0, 0, 0, 0 };
-static CmdDesc LD65 = { 0, 0, 0, 0, 0, 0, 0 };
-static CmdDesc GRC  = { 0, 0, 0, 0, 0, 0, 0 };
-
-/* Variables controlling the steps we're doing */
-static int DoLink       = 1;
-static int DoAssemble   = 1;
-
-/* The name of the output file, NULL if none given */
-static const char* OutputName = 0;
-
-/* The name of the linker configuration file if given */
-static const char* LinkerConfig = 0;
-
-/* The name of the first input file. This will be used to construct the
-** executable file name if no explicit name is given.
-*/
-static const char* FirstInput = 0;
-
-/* The names of the files for dependency generation */
-static const char* DepName = 0;
-static const char* FullDepName = 0;
-
-/* Remember if we should link a module */
-static int Module = 0;
-
-/* Extension used for a module */
-#define MODULE_EXT      ".o65"
-
-/* Name of the target specific runtime library */
-static char* TargetLib  = 0;
-
-
-
-/*****************************************************************************/
-/*                Include the system specific spawn function                 */
-/*****************************************************************************/
-
-
-
-#if defined(NEED_SPAWN)
-#  if defined(SPAWN_AMIGA)
-#    include "spawn-amiga.inc"
-#  else
-#    include "spawn-unix.inc"
-#  endif
-#endif
-
-
-
-/*****************************************************************************/
-/*                        Command structure handling                         */
-/*****************************************************************************/
-
-
-
-static void CmdExpand (CmdDesc* Cmd)
-/* Expand the argument vector */
-{
-    unsigned NewMax  = Cmd->ArgMax + 10;
-    char**       NewArgs = xmalloc (NewMax * sizeof (char*));
-    memcpy (NewArgs, Cmd->Args, Cmd->ArgMax * sizeof (char*));
-    xfree (Cmd->Args);
-    Cmd->Args   = NewArgs;
-    Cmd->ArgMax = NewMax;
-}
-
-
-
-static void CmdAddArg (CmdDesc* Cmd, const char* Arg)
-/* Add a new argument to the command */
-{
-    /* Expand the argument vector if needed */
-    if (Cmd->ArgCount >= Cmd->ArgMax) {
-        CmdExpand (Cmd);
-    }
-
-    /* Add a copy of the new argument, allow a NULL pointer */
-    if (Arg) {
-        Cmd->Args[Cmd->ArgCount++] = xstrdup (Arg);
-    } else {
-        Cmd->Args[Cmd->ArgCount++] = 0;
-    }
-}
-
-
-
-static void CmdAddArg2 (CmdDesc* Cmd, const char* Arg1, const char* Arg2)
-/* Add a new argument pair to the command */
-{
-    CmdAddArg (Cmd, Arg1);
-    CmdAddArg (Cmd, Arg2);
-}
-
-
-
-static void CmdAddArgList (CmdDesc* Cmd, const char* ArgList)
-/* Add a list of arguments separated by commas */
-{
-    const char* Arg = ArgList;
-    const char* P   = Arg;
-
-    while (1) {
-        if (*P == '\0' || *P == ',') {
-
-            /* End of argument, add it */
-            unsigned Len = P - Arg;
-
-            /* Expand the argument vector if needed */
-            if (Cmd->ArgCount >= Cmd->ArgMax) {
-                CmdExpand (Cmd);
-            }
-
-            /* Add the new argument */
-            Cmd->Args[Cmd->ArgCount] = memcpy (xmalloc (Len + 1), Arg, Len);
-            Cmd->Args[Cmd->ArgCount][Len] = '\0';
-            ++Cmd->ArgCount;
-
-            /* If the argument was terminated by a comma, skip it, otherwise
-            ** we're done.
-            */
-            if (*P == ',') {
-                /* Start over at next char */
-                Arg = ++P;
-            } else {
-                break;
-            }
-        } else {
-            /* Skip other chars */
-            ++P;
-        }
-    }
-
-}
-
-
-
-static void CmdDelArgs (CmdDesc* Cmd, unsigned LastValid)
-/* Remove all arguments with an index greater than LastValid */
-{
-    while (Cmd->ArgCount > LastValid) {
-        Cmd->ArgCount--;
-        xfree (Cmd->Args [Cmd->ArgCount]);
-        Cmd->Args [Cmd->ArgCount] = 0;
-    }
-}
-
-
-
-static void CmdAddFile (CmdDesc* Cmd, const char* File)
-/* Add a new file to the command */
-{
-    /* Expand the file vector if needed */
-    if (Cmd->FileCount == Cmd->FileMax) {
-        unsigned NewMax   = Cmd->FileMax + 10;
-        char**   NewFiles = xmalloc (NewMax * sizeof (char*));
-        memcpy (NewFiles, Cmd->Files, Cmd->FileMax * sizeof (char*));
-        xfree (Cmd->Files);
-        Cmd->Files   = NewFiles;
-        Cmd->FileMax = NewMax;
-    }
-
-    /* If the file name is not NULL (which is legal and is used to terminate
-    ** the file list), check if the file name does already exist in the file
-    ** list and print a warning if so. Regardless of the search result, add
-    ** the file.
-    */
-    if (File) {
-        unsigned I;
-        for (I = 0; I < Cmd->FileCount; ++I) {
-            if (strcmp (Cmd->Files[I], File) == 0) {
-                /* Duplicate file */
-                Warning ("Duplicate file in argument list: `%s'", File);
-                /* No need to search further */
-                break;
-            }
-        }
-
-        /* Add the file */
-        Cmd->Files [Cmd->FileCount++] = xstrdup (File);
-    } else {
-        /* Add a NULL pointer */
-        Cmd->Files [Cmd->FileCount++] = 0;
-    }
-}
-
-
-
-static void CmdInit (CmdDesc* Cmd, const char* Path, const char* Name)
-/* Initialize the command using the given path and name of the executable */
-{
-    char* FullName;
-
-    FullName = (char*) xmalloc (strlen (Path) + strlen (Name) + 1);
-    strcpy (FullName, Path);
-    strcat (FullName, Name);
-
-    /* Remember the command */
-    Cmd->Name = xstrdup (FullName);
-
-    /* Use the command name as first argument */
-    CmdAddArg (Cmd, FullName);
-
-    xfree (FullName);
-}
-
-
-
-static void CmdSetOutput (CmdDesc* Cmd, const char* File)
-/* Set the output file in a command desc */
-{
-    CmdAddArg2 (Cmd, "-o", File);
-}
-
-
-
-static void CmdSetTarget (CmdDesc* Cmd, target_t Target)
-/* Set the output file in a command desc */
-{
-    CmdAddArg2 (Cmd, "-t", GetTargetName (Target));
-}
-
-
-
-static void CmdPrint (CmdDesc* Cmd, FILE* F)
-/* Output the command line encoded in the command desc */
-{
-    unsigned I;
-    for (I = 0; I < Cmd->ArgCount && Cmd->Args[I] != 0; ++I) {
-        fprintf (F, "%s ", Cmd->Args[I]);
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                              Target handling                              */
-/*****************************************************************************/
-
-
-
-static void SetTargetFiles (void)
-/* Set the target system files */
-{
-    /* Determine the names of the target specific library file */
-    if (Target != TGT_NONE) {
-
-        /* Get a pointer to the system name and its length */
-        const char* TargetName = GetTargetName (Target);
-        unsigned    TargetNameLen = strlen (TargetName);
-
-        /* Set the library file */
-        TargetLib = xmalloc (TargetNameLen + 4 + 1);
-        memcpy (TargetLib, TargetName, TargetNameLen);
-        strcpy (TargetLib + TargetNameLen, ".lib");
-
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                               Subprocesses                                */
-/*****************************************************************************/
-
-
-
-static void ExecProgram (CmdDesc* Cmd)
-/* Execute a subprocess with the given name/parameters. Exit on errors. */
-{
-    int Status;
-
-    /* If in debug mode, output the command line we will execute */
-    if (Debug) {
-        printf ("Executing: ");
-        CmdPrint (Cmd, stdout);
-        printf ("\n");
-    }
-
-    /* Call the program */
-    Status = spawnvp (P_WAIT, Cmd->Name, SPAWN_ARGV_CONST_CAST Cmd->Args);
-
-    /* Check the result code */
-    if (Status < 0) {
-        /* Error executing the program */
-        Error ("Cannot execute `%s': %s", Cmd->Name, strerror (errno));
-    } else if (Status != 0) {
-        /* Called program had an error */
-        exit (Status);
-    }
-}
-
-
-
-static void Link (void)
-/* Link the resulting executable */
-{
-    unsigned I;
-
-    /* Since linking is always the final step, if we have an output file name
-    ** given, set it here. If we don't have an explicit output name given,
-    ** try to build one from the name of the first input file.
-    */
-    if (OutputName) {
-
-        CmdSetOutput (&LD65, OutputName);
-
-    } else if (FirstInput && FindExt (FirstInput)) {  /* Only if ext present! */
-
-        const char* Extension = Module? MODULE_EXT : "";
-        char* Output = MakeFilename (FirstInput, Extension);
-        CmdSetOutput (&LD65, Output);
-        xfree (Output);
-
-    }
-
-    /* If we have a linker config file given, add it to the command line.
-    ** Otherwise pass the target to the linker if we have one.
-    */
-    if (LinkerConfig) {
-        if (Module) {
-            Error ("Cannot use -C and --module together");
-        }
-        CmdAddArg2 (&LD65, "-C", LinkerConfig);
-    } else if (Module) {
-        CmdSetTarget (&LD65, TGT_MODULE);
-    } else {
-        CmdSetTarget (&LD65, Target);
-    }
-
-    /* Determine which target libraries are needed */
-    SetTargetFiles ();
-
-    /* Add all object files as parameters */
-    for (I = 0; I < LD65.FileCount; ++I) {
-        CmdAddArg (&LD65, LD65.Files [I]);
-    }
-
-    /* Add the system runtime library */
-    if (TargetLib) {
-        CmdAddArg (&LD65, TargetLib);
-    }
-
-    /* Terminate the argument list with a NULL pointer */
-    CmdAddArg (&LD65, 0);
-
-    /* Call the linker */
-    ExecProgram (&LD65);
-}
-
-
-
-static void AssembleFile (const char* File, unsigned ArgCount)
-/* Common routine to assemble a file. Will be called by Assemble() and
-** AssembleIntermediate(). Adds options common for both routines and
-** assembles the file. Will remove excess arguments after assembly.
-*/
-{
-    /* Set the target system */
-    CmdSetTarget (&CA65, Target);
-
-    /* Check if this is the last processing step */
-    if (DoLink) {
-        /* We're linking later. Add the output file of the assembly
-        ** the the file list of the linker. The name of the output
-        ** file is that of the input file with ".s" replaced by ".o".
-        */
-        char* ObjName = MakeFilename (File, ".o");
-        CmdAddFile (&LD65, ObjName);
-        xfree (ObjName);
-    } else {
-        /* This is the final step. If an output name is given, set it */
-        if (OutputName) {
-            CmdSetOutput (&CA65, OutputName);
-        }
-    }
-
-    /* Add the file as argument for the assembler */
-    CmdAddArg (&CA65, File);
-
-    /* Add a NULL pointer to terminate the argument list */
-    CmdAddArg (&CA65, 0);
-
-    /* Run the assembler */
-    ExecProgram (&CA65);
-
-    /* Remove the excess arguments */
-    CmdDelArgs (&CA65, ArgCount);
-}
-
-
-
-static void AssembleIntermediate (const char* SourceFile)
-/* Assemble an intermediate file which was generated by a previous processing
-** step with SourceFile as input. The -dep options won't be added and
-** the intermediate assembler file is removed after assembly.
-*/
-{
-    /* Generate the name of the assembler output file from the source file
-    ** name. It's the same name with the extension replaced by ".s"
-    */
-    char* AsmName = MakeFilename (SourceFile, ".s");
-
-    /* Assemble the intermediate assembler file */
-    AssembleFile (AsmName, CA65.ArgCount);
-
-    /* Remove the input file */
-    if (remove (AsmName) < 0) {
-        Warning ("Cannot remove temporary file `%s': %s",
-                 AsmName, strerror (errno));
-    }
-
-    /* Free the assembler file name which was allocated from the heap */
-    xfree (AsmName);
-}
-
-
-
-static void Assemble (const char* File)
-/* Assemble the given file */
-{
-    /* Remember the current assembler argument count */
-    unsigned ArgCount = CA65.ArgCount;
-
-    /* We aren't assembling an intermediate file, but one requested by the
-    ** user. So add a few options here if they were given on the command
-    ** line.
-    */
-    if (DepName && *DepName) {
-        CmdAddArg2 (&CA65, "--create-dep", DepName);
-    }
-    if (FullDepName && *FullDepName) {
-        CmdAddArg2 (&CA65, "--create-full-dep", FullDepName);
-    }
-
-    /* Use the common routine */
-    AssembleFile (File, ArgCount);
-}
-
-
-
-static void Compile (const char* File)
-/* Compile the given file */
-{
-    /* Remember the current compiler argument count */
-    unsigned ArgCount = CC65.ArgCount;
-
-    /* Set the target system */
-    CmdSetTarget (&CC65, Target);
-
-    /* Check if this is the final step */
-    if (DoAssemble) {
-        /* We will assemble this file later. If a dependency file is to be
-        ** generated, set the dependency target to be the final object file,
-        ** not the intermediate assembler file. But beware: There may be an
-        ** output name specified for the assembler.
-        */
-        if (DepName || FullDepName) {
-            /* Was an output name for the assembler specified? */
-            if (!DoLink && OutputName) {
-                /* Use this name as the dependency target */
-                CmdAddArg2 (&CC65, "--dep-target", OutputName);
-            } else {
-                /* Use the object file name as the dependency target */
-                char* ObjName = MakeFilename (File, ".o");
-                CmdAddArg2 (&CC65, "--dep-target", ObjName);
-                xfree (ObjName);
-            }
-        }
-    } else {
-        /* If we won't assemble, this is the final step. In this case, set
-        ** the output name if it was given.
-        */
-        if (OutputName) {
-            CmdSetOutput (&CC65, OutputName);
-        }
-    }
-
-    /* Add the file as argument for the compiler */
-    CmdAddArg (&CC65, File);
-
-    /* Add a NULL pointer to terminate the argument list */
-    CmdAddArg (&CC65, 0);
-
-    /* Run the compiler */
-    ExecProgram (&CC65);
-
-    /* Remove the excess arguments */
-    CmdDelArgs (&CC65, ArgCount);
-
-    /* If this is not the final step, assemble the generated file, then
-    ** remove it
-    */
-    if (DoAssemble) {
-        /* Assemble the intermediate file and remove it */
-        AssembleIntermediate (File);
-    }
-}
-
-
-
-static void CompileRes (const char* File)
-/* Compile the given geos resource file */
-{
-    /* Remember the current assembler argument count */
-    unsigned ArgCount = GRC.ArgCount;
-
-    /* Resource files need an geos-apple or geos-cbm target but this
-    ** is checked within grc65.
-    */
-    CmdSetTarget (&GRC, Target);
-
-    /* Add the file as argument for the resource compiler */
-    CmdAddArg (&GRC, File);
-
-    /* Add a NULL pointer to terminate the argument list */
-    CmdAddArg (&GRC, 0);
-
-    /* Run the compiler */
-    ExecProgram (&GRC);
-
-    /* Remove the excess arguments */
-    CmdDelArgs (&GRC, ArgCount);
-
-    /* If this is not the final step, assemble the generated file, then
-    ** remove it
-    */
-    if (DoAssemble) {
-        /* Assemble the intermediate file and remove it */
-        AssembleIntermediate (File);
-    }
-}
-
-
-
-static void ConvertO65 (const char* File)
-/* Convert an o65 object file into an assembler file */
-{
-    /* Remember the current converter argument count */
-    unsigned ArgCount = CO65.ArgCount;
-
-    /* If we won't assemble, this is the final step. In this case, set the
-    ** output name.
-    */
-    if (!DoAssemble && OutputName) {
-        CmdSetOutput (&CO65, OutputName);
-    }
-
-    /* Add the file as argument for the object file converter */
-    CmdAddArg (&CO65, File);
-
-    /* Add a NULL pointer to terminate the argument list */
-    CmdAddArg (&CO65, 0);
-
-    /* Run the converter */
-    ExecProgram (&CO65);
-
-    /* Remove the excess arguments */
-    CmdDelArgs (&CO65, ArgCount);
-
-    /* If this is not the final step, assemble the generated file, then
-    ** remove it
-    */
-    if (DoAssemble) {
-        /* Assemble the intermediate file and remove it */
-        AssembleIntermediate (File);
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void Usage (void)
-/* Print usage information and exit */
-{
-    printf ("Usage: %s [options] file [...]\n"
-            "Short options:\n"
-            "  -c\t\t\t\tCompile and assemble, but don't link\n"
-            "  -d\t\t\t\tDebug mode\n"
-            "  -g\t\t\t\tAdd debug info\n"
-            "  -h\t\t\t\tHelp (this text)\n"
-            "  -l name\t\t\tCreate an assembler listing file\n"
-            "  -m name\t\t\tCreate a map file\n"
-            "  -mm model\t\t\tSet the memory model\n"
-            "  -o name\t\t\tName the output file\n"
-            "  -r\t\t\t\tEnable register variables\n"
-            "  -t sys\t\t\tSet the target system\n"
-            "  -u sym\t\t\tForce an import of symbol `sym'\n"
-            "  -v\t\t\t\tVerbose mode\n"
-            "  -vm\t\t\t\tVerbose map file\n"
-            "  -C name\t\t\tUse linker config file\n"
-            "  -Cl\t\t\t\tMake local variables static\n"
-            "  -D sym[=defn]\t\t\tDefine a preprocessor symbol\n"
-            "  -I dir\t\t\tSet a compiler include directory path\n"
-            "  -L path\t\t\tSpecify a library search path\n"
-            "  -Ln name\t\t\tCreate a VICE label file\n"
-            "  -O\t\t\t\tOptimize code\n"
-            "  -Oi\t\t\t\tOptimize code, inline runtime functions\n"
-            "  -Or\t\t\t\tOptimize code, honour the register keyword\n"
-            "  -Os\t\t\t\tOptimize code, inline known C functions\n"
-            "  -S\t\t\t\tCompile, but don't assemble and link\n"
-            "  -T\t\t\t\tInclude source as comment\n"
-            "  -V\t\t\t\tPrint the version number\n"
-            "  -W name[,...]\t\t\tSuppress compiler warnings\n"
-            "  -Wa options\t\t\tPass options to the assembler\n"
-            "  -Wc options\t\t\tPass options to the compiler\n"
-            "  -Wl options\t\t\tPass options to the linker\n"
-            "\n"
-            "Long options:\n"
-            "  --add-source\t\t\tInclude source as comment\n"
-            "  --asm-args options\t\tPass options to the assembler\n"
-            "  --asm-define sym[=v]\t\tDefine an assembler symbol\n"
-            "  --asm-include-dir dir\t\tSet an assembler include directory\n"
-            "  --bin-include-dir dir\t\tSet an assembler binary include directory\n"
-            "  --bss-label name\t\tDefine and export a BSS segment label\n"
-            "  --bss-name seg\t\tSet the name of the BSS segment\n"
-            "  --cc-args options\t\tPass options to the compiler\n"
-            "  --cfg-path path\t\tSpecify a config file search path\n"
-            "  --check-stack\t\t\tGenerate stack overflow checks\n"
-            "  --code-label name\t\tDefine and export a CODE segment label\n"
-            "  --code-name seg\t\tSet the name of the CODE segment\n"
-            "  --codesize x\t\t\tAccept larger code by factor x\n"
-            "  --config name\t\t\tUse linker config file\n"
-            "  --cpu type\t\t\tSet CPU type\n"
-            "  --create-dep name\t\tCreate a make dependency file\n"
-            "  --create-full-dep name\tCreate a full make dependency file\n"
-            "  --data-label name\t\tDefine and export a DATA segment label\n"
-            "  --data-name seg\t\tSet the name of the DATA segment\n"
-            "  --debug\t\t\tDebug mode\n"
-            "  --debug-info\t\t\tAdd debug info\n"
-            "  --feature name\t\tSet an emulation feature\n"
-            "  --force-import sym\t\tForce an import of symbol `sym'\n"
-            "  --help\t\t\tHelp (this text)\n"
-            "  --include-dir dir\t\tSet a compiler include directory path\n"
-            "  --ld-args options\t\tPass options to the linker\n"
-            "  --lib file\t\t\tLink this library\n"
-            "  --lib-path path\t\tSpecify a library search path\n"
-            "  --list-targets\t\tList all available targets\n"
-            "  --listing name\t\tCreate an assembler listing file\n"
-            "  --list-bytes n\t\tNumber of bytes per assembler listing line\n"
-            "  --mapfile name\t\tCreate a map file\n"
-            "  --memory-model model\t\tSet the memory model\n"
-            "  --module\t\t\tLink as a module\n"
-            "  --module-id id\t\tSpecify a module ID for the linker\n"
-            "  --o65-model model\t\tOverride the o65 model\n"
-            "  --obj file\t\t\tLink this object file\n"
-            "  --obj-path path\t\tSpecify an object file search path\n"
-            "  --register-space b\t\tSet space available for register variables\n"
-            "  --register-vars\t\tEnable register variables\n"
-            "  --rodata-name seg\t\tSet the name of the RODATA segment\n"
-            "  --signed-chars\t\tDefault characters are signed\n"
-            "  --standard std\t\tLanguage standard (c89, c99, cc65)\n"
-            "  --start-addr addr\t\tSet the default start address\n"
-            "  --static-locals\t\tMake local variables static\n"
-            "  --target sys\t\t\tSet the target system\n"
-            "  --version\t\t\tPrint the version number\n"
-            "  --verbose\t\t\tVerbose mode\n"
-            "  --zeropage-label name\t\tDefine and export a ZEROPAGE segment label\n"
-            "  --zeropage-name seg\t\tSet the name of the ZEROPAGE segment\n",
-            ProgName);
-}
-
-
-
-static void OptAddSource (const char* Opt attribute ((unused)),
-                          const char* Arg attribute ((unused)))
-/* Strict source code as comments to the generated asm code */
-{
-    CmdAddArg (&CC65, "-T");
-}
-
-
-
-static void OptAsmArgs (const char* Opt attribute ((unused)), const char* Arg)
-/* Pass arguments to the assembler */
-{
-    CmdAddArgList (&CA65, Arg);
-}
-
-
-
-static void OptAsmDefine (const char* Opt attribute ((unused)), const char* Arg)
-/* Define an assembler symbol (assembler) */
-{
-    CmdAddArg2 (&CA65, "-D", Arg);
-}
-
-
-
-static void OptAsmIncludeDir (const char* Opt attribute ((unused)), const char* Arg)
-/* Include directory (assembler) */
-{
-    CmdAddArg2 (&CA65, "-I", Arg);
-}
-
-
-
-static void OptBinIncludeDir (const char* Opt attribute ((unused)), const char* Arg)
-/* Binary include directory (assembler) */
-{
-    CmdAddArg2 (&CA65, "--bin-include-dir", Arg);
-}
-
-
-
-static void OptBssLabel (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --bss-label option */
-{
-    CmdAddArg2 (&CO65, "--bss-label", Arg);
-}
-
-
-
-static void OptBssName (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --bss-name option */
-{
-    CmdAddArg2 (&CC65, "--bss-name", Arg);
-    CmdAddArg2 (&CO65, "--bss-name", Arg);
-}
-
-
-
-static void OptCCArgs (const char* Opt attribute ((unused)), const char* Arg)
-/* Pass arguments to the compiler */
-{
-    CmdAddArgList (&CC65, Arg);
-}
-
-
-
-static void OptCfgPath (const char* Opt attribute ((unused)), const char* Arg)
-/* Config file search path (linker) */
-{
-    CmdAddArg2 (&LD65, "--cfg-path", Arg);
-}
-
-
-
-static void OptCheckStack (const char* Opt attribute ((unused)),
-                           const char* Arg attribute ((unused)))
-/* Handle the --check-stack option */
-{
-    CmdAddArg (&CC65, "--check-stack");
-}
-
-
-
-static void OptCodeLabel (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --code-label option */
-{
-    CmdAddArg2 (&CO65, "--code-label", Arg);
-}
-
-
-
-static void OptCodeName (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --code-name option */
-{
-    CmdAddArg2 (&CC65, "--code-name", Arg);
-    CmdAddArg2 (&CO65, "--code-name", Arg);
-}
-
-
-
-static void OptCodeSize (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --codesize option */
-{
-    CmdAddArg2 (&CC65, "--codesize", Arg);
-}
-
-
-
-static void OptConfig (const char* Opt attribute ((unused)), const char* Arg)
-/* Config file (linker) */
-{
-    if (LinkerConfig) {
-        Error ("Cannot specify -C/--config twice");
-    }
-    LinkerConfig = Arg;
-}
-
-
-
-static void OptCPU (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --cpu option */
-{
-    /* Add the cpu type to the assembler and compiler */
-    CmdAddArg2 (&CA65, "--cpu", Arg);
-    CmdAddArg2 (&CC65, "--cpu", Arg);
-}
-
-
-
-static void OptCreateDep (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --create-dep option */
-{
-    /* Add the file name to the compiler */
-    CmdAddArg2 (&CC65, "--create-dep", Arg);
-
-    /* Remember the file name for the assembler */
-    DepName = Arg;
-}
-
-
-
-static void OptCreateFullDep (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --create-full-dep option */
-{
-    /* Add the file name to the compiler */
-    CmdAddArg2 (&CC65, "--create-full-dep", Arg);
-
-    /* Remember the file name for the assembler */
-    FullDepName = Arg;
-}
-
-
-
-static void OptDataLabel (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --data-label option */
-{
-    CmdAddArg2 (&CO65, "--data-label", Arg);
-}
-
-
-
-static void OptDataName (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --data-name option */
-{
-    CmdAddArg2 (&CC65, "--data-name", Arg);
-    CmdAddArg2 (&CO65, "--data-name", Arg);
-}
-
-
-
-static void OptDebug (const char* Opt attribute ((unused)),
-                      const char* Arg attribute ((unused)))
-/* Debug mode (compiler and cl65 utility) */
-{
-    CmdAddArg (&CC65, "-d");
-    CmdAddArg (&CO65, "-d");
-    Debug = 1;
-}
-
-
-
-static void OptDebugInfo (const char* Opt attribute ((unused)),
-                          const char* Arg attribute ((unused)))
-/* Debug Info - add to compiler and assembler */
-{
-    CmdAddArg (&CC65, "-g");
-    CmdAddArg (&CA65, "-g");
-    CmdAddArg (&CO65, "-g");
-}
-
-
-
-static void OptFeature (const char* Opt attribute ((unused)), const char* Arg)
-/* Emulation features for the assembler */
-{
-    CmdAddArg2 (&CA65, "--feature", Arg);
-}
-
-
-
-static void OptForceImport (const char* Opt attribute ((unused)), const char* Arg)
-/* Emulation features for the assembler */
-{
-    CmdAddArg2 (&LD65, "-u", Arg);
-}
-
-
-
-static void OptHelp (const char* Opt attribute ((unused)),
-                     const char* Arg attribute ((unused)))
-/* Print help - cl65 */
-{
-    Usage ();
-    exit (EXIT_SUCCESS);
-}
-
-
-
-static void OptIncludeDir (const char* Opt attribute ((unused)), const char* Arg)
-/* Include directory (compiler) */
-{
-    CmdAddArg2 (&CC65, "-I", Arg);
-}
-
-
-
-static void OptLdArgs (const char* Opt attribute ((unused)), const char* Arg)
-/* Pass arguments to the linker */
-{
-    CmdAddArgList (&LD65, Arg);
-}
-
-
-
-static void OptLib (const char* Opt attribute ((unused)), const char* Arg)
-/* Library file follows (linker) */
-{
-    CmdAddArg2 (&LD65, "--lib", Arg);
-}
-
-
-
-static void OptLibPath (const char* Opt attribute ((unused)), const char* Arg)
-/* Library search path (linker) */
-{
-    CmdAddArg2 (&LD65, "--lib-path", Arg);
-}
-
-
-
-static void OptListBytes (const char* Opt attribute ((unused)), const char* Arg)
-/* Set the maximum number of bytes per asm listing line */
-{
-    CmdAddArg2 (&CA65, "--list-bytes", Arg);
-}
-
-
-
-static void OptListing (const char* Opt attribute ((unused)), const char* Arg)
-/* Create an assembler listing */
-{
-    CmdAddArg2 (&CA65, "-l", Arg);
-}
-
-
-
-static void OptListTargets (const char* Opt attribute ((unused)),
-                            const char* Arg attribute ((unused)))
-/* List all targets */
-{
-    target_t T;
-
-    /* List the targets */
-    for (T = TGT_NONE; T < TGT_COUNT; ++T) {
-        printf ("%s\n", GetTargetName (T));
-    }
-
-    /* Terminate */
-    exit (EXIT_SUCCESS);
-}
-
-
-
-static void OptMapFile (const char* Opt attribute ((unused)), const char* Arg)
-/* Create a map file */
-{
-    /* Create a map file (linker) */
-    CmdAddArg2 (&LD65, "-m", Arg);
-}
-
-
-
-static void OptMemoryModel (const char* Opt attribute ((unused)), const char* Arg)
-/* Set the memory model */
-{
-    mmodel_t MemoryModel = FindMemoryModel (Arg);
-    if (MemoryModel == MMODEL_UNKNOWN) {
-        Error ("Unknown memory model: %s", Arg);
-    } else if (MemoryModel == MMODEL_HUGE) {
-        Error ("Unsupported memory model: %s", Arg);
-    } else {
-        CmdAddArg2 (&CA65, "-mm", Arg);
-        CmdAddArg2 (&CC65, "-mm", Arg);
-    }
-}
-
-
-
-static void OptModule (const char* Opt attribute ((unused)),
-                       const char* Arg attribute ((unused)))
-/* Link as a module */
-{
-    Module = 1;
-}
-
-
-
-static void OptModuleId (const char* Opt attribute ((unused)), const char* Arg)
-/* Specify a module if for the linker */
-{
-    /* Pass it straight to the linker */
-    CmdAddArg2 (&LD65, "--module-id", Arg);
-}
-
-
-
-static void OptO65Model (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --o65-model option */
-{
-    CmdAddArg2 (&CO65, "-m", Arg);
-}
-
-
-
-static void OptObj (const char* Opt attribute ((unused)), const char* Arg)
-/* Object file follows (linker) */
-{
-    CmdAddArg2 (&LD65, "--obj", Arg);
-}
-
-
-
-static void OptObjPath (const char* Opt attribute ((unused)), const char* Arg)
-/* Object file search path (linker) */
-{
-    CmdAddArg2 (&LD65, "--obj-path", Arg);
-}
-
-
-
-static void OptRegisterSpace (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --register-space option */
-{
-    CmdAddArg2 (&CC65, "--register-space", Arg);
-}
-
-
-
-static void OptRegisterVars (const char* Opt attribute ((unused)),
-                             const char* Arg attribute ((unused)))
-/* Handle the --register-vars option */
-{
-    CmdAddArg (&CC65, "-r");
-}
-
-
-
-static void OptRodataName (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --rodata-name option */
-{
-    CmdAddArg2 (&CC65, "--rodata-name", Arg);
-}
-
-
-
-static void OptSignedChars (const char* Opt attribute ((unused)),
-                            const char* Arg attribute ((unused)))
-/* Make default characters signed */
-{
-    CmdAddArg (&CC65, "-j");
-}
-
-
-
-static void OptStandard (const char* Opt attribute ((unused)), const char* Arg)
-/* Set the language standard */
-{
-    CmdAddArg2 (&CC65, "--standard", Arg);
-}
-
-
-
-static void OptStartAddr (const char* Opt attribute ((unused)), const char* Arg)
-/* Set the default start address */
-{
-    CmdAddArg2 (&LD65, "-S", Arg);
-}
-
-
-
-static void OptStaticLocals (const char* Opt attribute ((unused)),
-                             const char* Arg attribute ((unused)))
-/* Place local variables in static storage */
-{
-    CmdAddArg (&CC65, "-Cl");
-}
-
-
-
-static void OptTarget (const char* Opt attribute ((unused)), const char* Arg)
-/* Set the target system */
-{
-    Target = FindTarget (Arg);
-    if (Target == TGT_UNKNOWN) {
-        Error ("No such target system: `%s'", Arg);
-    } else if (Target == TGT_MODULE) {
-        Error ("Cannot use `module' as target, use --module instead");
-    }
-}
-
-
-
-static void OptVerbose (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Verbose mode (compiler, assembler, linker) */
-{
-    CmdAddArg (&CC65, "-v");
-    CmdAddArg (&CA65, "-v");
-    CmdAddArg (&CO65, "-v");
-    CmdAddArg (&LD65, "-v");
-}
-
-
-
-static void OptVersion (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Print version number */
-{
-    fprintf (stderr, "cl65 V%s\n", GetVersionAsString ());
-}
-
-
-
-static void OptZeropageLabel (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --zeropage-label option */
-{
-    CmdAddArg2 (&CO65, "--zeropage-label", Arg);
-}
-
-
-
-static void OptZeropageName (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --zeropage-name option */
-{
-    CmdAddArg2 (&CO65, "--zeropage-name", Arg);
-}
-
-
-
-int main (int argc, char* argv [])
-/* Utility main program */
-{
-    /* Program long options */
-    static const LongOpt OptTab[] = {
-        { "--add-source",       0,      OptAddSource            },
-        { "--asm-args",         1,      OptAsmArgs              },
-        { "--asm-define",       1,      OptAsmDefine            },
-        { "--asm-include-dir",  1,      OptAsmIncludeDir        },
-        { "--bin-include-dir",  1,      OptBinIncludeDir        },
-        { "--bss-label",        1,      OptBssLabel             },
-        { "--bss-name",         1,      OptBssName              },
-        { "--cc-args",          1,      OptCCArgs               },
-        { "--cfg-path",         1,      OptCfgPath              },
-        { "--check-stack",      0,      OptCheckStack           },
-        { "--code-label",       1,      OptCodeLabel            },
-        { "--code-name",        1,      OptCodeName             },
-        { "--codesize",         1,      OptCodeSize             },
-        { "--config",           1,      OptConfig               },
-        { "--cpu",              1,      OptCPU                  },
-        { "--create-dep",       1,      OptCreateDep            },
-        { "--create-full-dep",  1,      OptCreateFullDep        },
-        { "--data-label",       1,      OptDataLabel            },
-        { "--data-name",        1,      OptDataName             },
-        { "--debug",            0,      OptDebug                },
-        { "--debug-info",       0,      OptDebugInfo            },
-        { "--feature",          1,      OptFeature              },
-        { "--force-import",     1,      OptForceImport          },
-        { "--help",             0,      OptHelp                 },
-        { "--include-dir",      1,      OptIncludeDir           },
-        { "--ld-args",          1,      OptLdArgs               },
-        { "--lib",              1,      OptLib                  },
-        { "--lib-path",         1,      OptLibPath              },
-        { "--list-targets",     0,      OptListTargets          },
-        { "--listing",          1,      OptListing              },
-        { "--list-bytes",       1,      OptListBytes            },
-        { "--mapfile",          1,      OptMapFile              },
-        { "--memory-model",     1,      OptMemoryModel          },
-        { "--module",           0,      OptModule               },
-        { "--module-id",        1,      OptModuleId             },
-        { "--o65-model",        1,      OptO65Model             },
-        { "--obj",              1,      OptObj                  },
-        { "--obj-path",         1,      OptObjPath              },
-        { "--register-space",   1,      OptRegisterSpace        },
-        { "--register-vars",    0,      OptRegisterVars         },
-        { "--rodata-name",      1,      OptRodataName           },
-        { "--signed-chars",     0,      OptSignedChars          },
-        { "--standard",         1,      OptStandard             },
-        { "--start-addr",       1,      OptStartAddr            },
-        { "--static-locals",    0,      OptStaticLocals         },
-        { "--target",           1,      OptTarget               },
-        { "--verbose",          0,      OptVerbose              },
-        { "--version",          0,      OptVersion              },
-        { "--zeropage-label",   1,      OptZeropageLabel        },
-        { "--zeropage-name",    1,      OptZeropageName         },
-    };
-
-    char* CmdPath;
-    unsigned I;
-
-    /* Initialize the cmdline module */
-    InitCmdLine (&argc, &argv, "cl65");
-
-    /* Initialize the command descriptors */
-    if (argc == 0) {
-        CmdPath = xstrdup ("");
-    } else {
-        char* Ptr;
-        CmdPath = xstrdup (argv[0]);
-        Ptr = strrchr (CmdPath, '/');
-        if (Ptr == 0) {
-            Ptr = strrchr (CmdPath, '\\');
-        }
-        if (Ptr == 0) {
-            *CmdPath = '\0';
-        } else {
-            *(Ptr + 1) = '\0';
-        }
-    }
-    CmdInit (&CC65, CmdPath, "cc65");
-    CmdInit (&CA65, CmdPath, "ca65");
-    CmdInit (&CO65, CmdPath, "co65");
-    CmdInit (&LD65, CmdPath, "ld65");
-    CmdInit (&GRC,  CmdPath, "grc65");
-    xfree (CmdPath);
-
-    /* Our default target is the C64 instead of "none" */
-    Target = TGT_C64;
-
-    /* Check the parameters */
-    I = 1;
-    while (I < ArgCount) {
-
-        /* Get the argument */
-        const char* Arg = ArgVec[I];
-
-        /* Check for an option */
-        if (Arg [0] == '-') {
-
-            switch (Arg [1]) {
-
-                case '-':
-                    LongOption (&I, OptTab, sizeof(OptTab)/sizeof(OptTab[0]));
-                    break;
-
-                case 'C':
-                    if (Arg[2] == 'l' && Arg[3] == '\0') {
-                        /* Make local variables static */
-                        OptStaticLocals (Arg, 0);
-                    } else {
-                        /* Specify linker config file */
-                        OptConfig (Arg, GetArg (&I, 2));
-                    }
-                    break;
-
-                case 'D':
-                    /* Define a preprocessor symbol (compiler) */
-                    CmdAddArg2 (&CC65, "-D", GetArg (&I, 2));
-                    break;
-
-                case 'I':
-                    /* Include directory (compiler) */
-                    OptIncludeDir (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'L':
-                    if (Arg[2] == 'n' && Arg[3] == '\0') {
-                        /* VICE label file (linker) */
-                        CmdAddArg2 (&LD65, "-Ln", GetArg (&I, 3));
-                    } else {
-                        /* Library search path (linker) */
-                        OptLibPath (Arg, GetArg (&I, 2));
-                    }
-                    break;
-
-                case 'O':
-                    /* Optimize code (compiler, also covers -Oi and others) */
-                    CmdAddArg (&CC65, Arg);
-                    break;
-
-                case 'S':
-                    /* Dont assemble and link the created files */
-                    DoAssemble = 0;
-                    DoLink     = 0;
-                    break;
-
-                case 'T':
-                    /* Include source as comment (compiler) */
-                    OptAddSource (Arg, 0);
-                    break;
-
-                case 'V':
-                    /* Print version number */
-                    OptVersion (Arg, 0);
-                    break;
-
-                case 'W':
-                    if (Arg[2] == 'a' && Arg[3] == '\0') {
-                        /* -Wa: Pass options to assembler */
-                        OptAsmArgs (Arg, GetArg (&I, 3));
-                    } else if (Arg[2] == 'c' && Arg[3] == '\0') {
-                        /* -Wc: Pass options to compiler */
-                        OptCCArgs (Arg, GetArg (&I, 3));
-                    } else if (Arg[2] == 'l' && Arg[3] == '\0') {
-                        /* -Wl: Pass options to linker */
-                        OptLdArgs (Arg, GetArg (&I, 3));
-                    } else {
-                        /* Anything else: Suppress warnings (compiler) */
-                        CmdAddArg2 (&CC65, "-W", GetArg (&I, 2));
-                    }
-                    break;
-
-                case 'c':
-                    /* Don't link the resulting files */
-                    DoLink = 0;
-                    break;
-
-                case 'd':
-                    /* Debug mode (compiler) */
-                    OptDebug (Arg, 0);
-                    break;
-
-                case 'g':
-                    /* Debugging - add to compiler and assembler */
-                    OptDebugInfo (Arg, 0);
-                    break;
-
-                case 'h':
-                case '?':
-                    /* Print help - cl65 */
-                    OptHelp (Arg, 0);
-                    break;
-
-                case 'j':
-                    /* Default characters are signed */
-                    OptSignedChars (Arg, 0);
-                    break;
-
-                case 'l':
-                    /* Create an assembler listing */
-                    OptListing (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'm':
-                    /* Create a map file (linker) */
-                    OptMapFile (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'o':
-                    /* Name the output file */
-                    OutputName = GetArg (&I, 2);
-                    break;
-
-                case 'r':
-                    /* Enable register variables */
-                    OptRegisterVars (Arg, 0);
-                    break;
-
-                case 't':
-                    /* Set target system - compiler, assembler and linker */
-                    OptTarget (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'u':
-                    /* Force an import (linker) */
-                    OptForceImport (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'v':
-                    if (Arg [2] == 'm') {
-                        /* Verbose map file (linker) */
-                        CmdAddArg (&LD65, "-vm");
-                    } else {
-                        /* Verbose mode (compiler, assembler, linker) */
-                        OptVerbose (Arg, 0);
-                    }
-                    break;
-
-                default:
-                    UnknownOption (Arg);
-            }
-        } else {
-
-            /* Remember the first file name */
-            if (FirstInput == 0) {
-                FirstInput = Arg;
-            }
-
-            /* Determine the file type by the extension */
-            switch (GetFileType (Arg)) {
-
-                case FILETYPE_C:
-                    /* Compile the file */
-                    Compile (Arg);
-                    break;
-
-                case FILETYPE_ASM:
-                    /* Assemble the file */
-                    if (DoAssemble) {
-                        Assemble (Arg);
-                    }
-                    break;
-
-                case FILETYPE_OBJ:
-                case FILETYPE_LIB:
-                    /* Add to the linker files */
-                    CmdAddFile (&LD65, Arg);
-                    break;
-
-                case FILETYPE_GR:
-                    /* Add to the resource compiler files */
-                    CompileRes (Arg);
-                    break;
-
-                case FILETYPE_O65:
-                    /* Add the the object file converter files */
-                    ConvertO65 (Arg);
-                    break;
-
-                default:
-                    Error ("Don't know what to do with `%s'", Arg);
-
-            }
-
-        }
-
-        /* Next argument */
-        ++I;
-    }
-
-    /* Check if we had any input files */
-    if (FirstInput == 0) {
-        Warning ("No input files");
-    }
-
-    /* Link the given files if requested and if we have any */
-    if (DoLink && LD65.FileCount > 0) {
-        Link ();
-    }
-
-    /* Return an apropriate exit code */
-    return EXIT_SUCCESS;
-}
diff --git a/src/cl65/spawn-amiga.inc b/src/cl65/spawn-amiga.inc
deleted file mode 100644 (file)
index ce13ae1..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                spawn-amiga.inc                            */
-/*                                                                           */
-/*                Execute other external programs (Amiga version)            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002     Wolfgang Hosemann                                            */
-/* EMail:       whose@t-online.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Mode argument for spawn. This value is ignored by the function and only
-** provided for DOS/Windows compatibility.
-*/
-#ifndef P_WAIT
-#define P_WAIT  0
-#endif
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int spawnvp (int Mode attribute ((unused)),
-             const char* File attribute ((unused)),
-             char* const argv [])
-/* Execute the given program searching and wait until it terminates. The Mode
-** argument is ignored (compatibility only). The result of the function is
-** the return code of the program. The function will terminate the program
-** on errors.
-*/
-{
-    int Status;
-    StrBuf Command = AUTO_STRBUF_INITIALIZER;
-
-    /* Build the command line */
-    while (*argv) {
-        SB_AppendStr (&Command, *argv++);
-        SB_AppendChar (&Command, ' ');
-    }
-
-    /* Terminate the command line */
-    SB_Terminate (&Command);
-
-    /* Invoke the shell to execute the command */
-    Status = system (SB_GetConstBuf (&Command));
-
-    /* Free the string buf data */
-    SB_Done (&Command);
-
-    /* Return the result */
-    return Status;
-}
diff --git a/src/cl65/spawn-unix.inc b/src/cl65/spawn-unix.inc
deleted file mode 100644 (file)
index 283285c..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                              spawn-unix.inc                               */
-/*                                                                           */
-/*                Execute other external programs (Unix version)             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1999-2002 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Mode argument for spawn. This value is ignored by the function and only
-** provided for DOS/Windows compatibility.
-*/
-#ifndef P_WAIT
-#define P_WAIT  0
-#endif
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int spawnvp (int Mode attribute ((unused)), const char* File, char* const argv [])
-/* Execute the given program searching and wait until it terminates. The Mode
-** argument is ignored (compatibility only). The result of the function is
-** the return code of the program. The function will terminate the program
-** on errors.
-*/
-{
-    int Status = 0;
-
-    /* Fork */
-    int pid = fork ();
-    if (pid < 0) {
-
-        /* Error forking */
-        Error ("Cannot fork: %s", strerror (errno));
-
-    } else if (pid == 0) {
-
-        /* The son - exec the program */
-        if (execvp (File, argv) < 0) {
-            Error ("Cannot exec `%s': %s", File, strerror (errno));
-        }
-
-    } else {
-
-        /* The father: Wait for the subprocess to terminate */
-        if (waitpid (pid, &Status, 0) < 0) {
-            Error ("Failure waiting for subprocess: %s", strerror (errno));
-        }
-
-        /* Examine the child status */
-        if (!WIFEXITED (Status)) {
-            Error ("Subprocess `%s' aborted by signal %d", File, WTERMSIG (Status));
-        }
-    }
-
-    /* Only the father goes here, we place a return here regardless of that
-    ** to avoid compiler warnings.
-    */
-    return WEXITSTATUS (Status);
-}
diff --git a/src/co65.vcxproj b/src/co65.vcxproj
deleted file mode 100644 (file)
index c66c8aa..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{F5DB5D1A-05BC-48FE-B346-4E96DD522AA2}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>co65</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>false</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="co65\convert.c" />
-    <ClCompile Include="co65\error.c" />
-    <ClCompile Include="co65\fileio.c" />
-    <ClCompile Include="co65\global.c" />
-    <ClCompile Include="co65\main.c" />
-    <ClCompile Include="co65\model.c" />
-    <ClCompile Include="co65\o65.c" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="co65\convert.h" />
-    <ClInclude Include="co65\error.h" />
-    <ClInclude Include="co65\fileio.h" />
-    <ClInclude Include="co65\global.h" />
-    <ClInclude Include="co65\model.h" />
-    <ClInclude Include="co65\o65.h" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/src/co65/convert.c b/src/co65/convert.c
deleted file mode 100644 (file)
index af036eb..0000000
+++ /dev/null
@@ -1,504 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 convert.c                                 */
-/*                                                                           */
-/*       Actual conversion routines for the co65 object file converter       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "debugflag.h"
-#include "print.h"
-#include "version.h"
-#include "xmalloc.h"
-#include "xsprintf.h"
-
-/* co65 */
-#include "error.h"
-#include "global.h"
-#include "model.h"
-#include "o65.h"
-#include "convert.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void PrintO65Stats (const O65Data* D)
-/* Print information about the O65 file if --verbose is given */
-{
-    Print (stdout, 1, "Size of text segment:               %5lu\n", D->Header.tlen);
-    Print (stdout, 1, "Size of data segment:               %5lu\n", D->Header.dlen);
-    Print (stdout, 1, "Size of bss segment:                %5lu\n", D->Header.blen);
-    Print (stdout, 1, "Size of zeropage segment:           %5lu\n", D->Header.zlen);
-    Print (stdout, 1, "Number of imports:                  %5u\n", CollCount (&D->Imports));
-    Print (stdout, 1, "Number of exports:                  %5u\n", CollCount (&D->Exports));
-    Print (stdout, 1, "Number of text segment relocations: %5u\n", CollCount (&D->TextReloc));
-    Print (stdout, 1, "Number of data segment relocations: %5u\n", CollCount (&D->DataReloc));
-}
-
-
-
-static void SetupSegLabels (FILE* F)
-/* Setup the segment label names */
-{
-    if (BssLabel) {
-        fprintf (F, ".export\t\t%s\n", BssLabel);
-    } else {
-        BssLabel = xstrdup ("BSS");
-    }
-    if (CodeLabel) {
-        fprintf (F, ".export\t\t%s\n", CodeLabel);
-    } else {
-        CodeLabel = xstrdup ("CODE");
-    }
-    if (DataLabel) {
-        fprintf (F, ".export\t\t%s\n", DataLabel);
-    } else {
-        DataLabel = xstrdup ("DATA");
-    }
-    if (ZeropageLabel) {
-        fprintf (F, ".export\t\t%s\n", ZeropageLabel);
-    } else {
-        ZeropageLabel = xstrdup ("ZEROPAGE");
-    }
-}
-
-
-
-static const char* LabelPlusOffs (const char* Label, long Offs)
-/* Generate "Label+xxx" in a static buffer and return a pointer to the buffer */
-{
-    static char Buf[256];
-    xsprintf (Buf, sizeof (Buf), "%s%+ld", Label, Offs);
-    return Buf;
-}
-
-
-
-static const char* RelocExpr (const O65Data* D, unsigned char SegID,
-                              unsigned long Val, const O65Reloc* R)
-/* Generate the segment relative relocation expression. R is only used if the
-** expression contains am import, and may be NULL if this is an error (which
-** is then flagged).
-*/
-{
-    const O65Import* Import;
-
-    switch (SegID) {
-
-        case O65_SEGID_UNDEF:
-            if (R) {
-                if (R->SymIdx >= CollCount (&D->Imports)) {
-                    Error ("Import index out of range (input file corrupt)");
-                }
-                Import = CollConstAt (&D->Imports, R->SymIdx);
-                return LabelPlusOffs (Import->Name, Val);
-            } else {
-                Error ("Relocation references an import which is not allowed here");
-                return 0;
-            }
-            break;
-
-        case O65_SEGID_TEXT:
-            return LabelPlusOffs (CodeLabel, Val - D->Header.tbase);
-
-        case O65_SEGID_DATA:
-            return LabelPlusOffs (DataLabel, Val - D->Header.dbase);
-
-        case O65_SEGID_BSS:
-            return LabelPlusOffs (BssLabel, Val - D->Header.bbase);
-
-        case O65_SEGID_ZP:
-            return LabelPlusOffs (ZeropageLabel, Val - D->Header.zbase);
-
-        case O65_SEGID_ABS:
-            return LabelPlusOffs ("", Val);
-
-        default:
-            Internal ("Cannot handle this segment reference in reloc entry");
-    }
-
-    /* NOTREACHED */
-    return 0;
-}
-
-
-
-static void ConvertImports (FILE* F, const O65Data* D)
-/* Convert the imports */
-{
-    unsigned I;
-
-    if (CollCount (&D->Imports) > 0) {
-        for (I = 0; I < CollCount (&D->Imports); ++I) {
-
-            /* Get the next import */
-            const O65Import* Import = CollConstAt (&D->Imports, I);
-
-            /* Import it by name */
-            fprintf (F, ".import\t%s\n", Import->Name);
-        }
-        fprintf (F, "\n");
-    }
-}
-
-
-
-static void ConvertExports (FILE* F, const O65Data* D)
-/* Convert the exports */
-{
-    unsigned I;
-
-    if (CollCount (&D->Exports) > 0) {
-        for (I = 0; I < CollCount (&D->Exports); ++I) {
-
-            /* Get the next import */
-            const O65Export* Export = CollConstAt (&D->Exports, I);
-
-            /* First define it */
-            fprintf (F, "%s = %s\n",
-                     Export->Name,
-                     RelocExpr (D, Export->SegID, Export->Val, 0));
-
-            /* Then export it by name */
-            fprintf (F, ".export\t%s\n", Export->Name);
-        }
-        fprintf (F, "\n");
-    }
-}
-
-
-
-static void ConvertSeg (FILE* F, const O65Data* D, const Collection* Relocs,
-                        const unsigned char* Data, unsigned long Size)
-/* Convert one segment */
-{
-    const O65Reloc* R;
-    unsigned        RIdx;
-    unsigned long   Byte;
-
-    /* Get the pointer to the first relocation entry if there are any */
-    R = (CollCount (Relocs) > 0)? CollConstAt (Relocs, 0) : 0;
-
-    /* Initialize for the loop */
-    RIdx = 0;
-    Byte = 0;
-
-    /* Walk over the segment data */
-    while (Byte < Size) {
-
-        if (R && R->Offs == Byte) {
-            /* We've reached an entry that must be relocated */
-            unsigned long Val;
-            switch (R->Type) {
-
-                case O65_RTYPE_WORD:
-                    if (Byte >= Size - 1) {
-                        Error ("Found WORD relocation, but not enough bytes left");
-                    } else {
-                        Val = (Data[Byte+1] << 8) + Data[Byte];
-                        Byte += 2;
-                        fprintf (F, "\t.word\t%s\n", RelocExpr (D, R->SegID, Val, R));
-                    }
-                    break;
-
-                case O65_RTYPE_HIGH:
-                    Val = (Data[Byte++] << 8) + R->Val;
-                    fprintf (F, "\t.byte\t>(%s)\n", RelocExpr (D, R->SegID, Val, R));
-                    break;
-
-                case O65_RTYPE_LOW:
-                    Val = Data[Byte++];
-                    fprintf (F, "\t.byte\t<(%s)\n", RelocExpr (D, R->SegID, Val, R));
-                    break;
-
-                case O65_RTYPE_SEGADDR:
-                    if (Byte >= Size - 2) {
-                        Error ("Found SEGADDR relocation, but not enough bytes left");
-                    } else {
-                        Val = (((unsigned long) Data[Byte+2]) << 16) +
-                              (((unsigned long) Data[Byte+1]) <<  8) +
-                              (((unsigned long) Data[Byte+0]) <<  0) +
-                              R->Val;
-                        Byte += 3;
-                        fprintf (F, "\t.faraddr\t%s\n", RelocExpr (D, R->SegID, Val, R));
-                    }
-                    break;
-
-                case O65_RTYPE_SEG:
-                    /* FALLTHROUGH for now */
-                default:
-                    Internal ("Cannot handle relocation type %d at %lu",
-                              R->Type, Byte);
-            }
-
-            /* Get the next relocation entry */
-            if (++RIdx < CollCount (Relocs)) {
-                R = CollConstAt (Relocs, RIdx);
-            } else {
-                R = 0;
-            }
-
-        } else {
-            /* Just a constant value */
-            fprintf (F, "\t.byte\t$%02X\n", Data[Byte++]);
-        }
-    }
-
-    fprintf (F, "\n");
-}
-
-
-
-static void ConvertCodeSeg (FILE* F, const O65Data* D)
-/* Do code segment conversion */
-{
-    /* Header */
-    fprintf (F,
-             ";\n; CODE SEGMENT\n;\n"
-             ".segment\t\"%s\"\n"
-             "%s:\n",
-             CodeSeg,
-             CodeLabel);
-
-    /* Segment data */
-    ConvertSeg (F, D, &D->TextReloc, D->Text, D->Header.tlen);
-}
-
-
-
-static void ConvertDataSeg (FILE* F, const O65Data* D)
-/* Do data segment conversion */
-{
-    /* Header */
-    fprintf (F,
-             ";\n; DATA SEGMENT\n;\n"
-             ".segment\t\"%s\"\n"
-             "%s:\n",
-             DataSeg,
-             DataLabel);
-
-    /* Segment data */
-    ConvertSeg (F, D, &D->DataReloc, D->Data, D->Header.dlen);
-}
-
-
-
-static void ConvertBssSeg (FILE* F, const O65Data* D)
-/* Do bss segment conversion */
-{
-    /* Header */
-    fprintf (F,
-             ";\n; BSS SEGMENT\n;\n"
-             ".segment\t\"%s\"\n"
-             "%s:\n",
-             BssSeg,
-             BssLabel);
-
-    /* Segment data */
-    fprintf (F, "\t.res\t%lu\n", D->Header.blen);
-    fprintf (F, "\n");
-}
-
-
-
-static void ConvertZeropageSeg (FILE* F, const O65Data* D)
-/* Do zeropage segment conversion */
-{
-    /* Header */
-    fprintf (F, ";\n; ZEROPAGE SEGMENT\n;\n");
-
-    if (Model == O65_MODEL_CC65_MODULE) {
-        /* o65 files of type cc65-module are linked together with a definition
-        ** file for the zero page, but the zero page is not allocated in the
-        ** module itself, but the locations are mapped to the zp locations of
-        ** the main file.
-        */
-        fprintf (F, ".import\t__ZP_START__\t\t; Linker generated symbol\n");
-        fprintf (F, "%s = __ZP_START__\n", ZeropageLabel);
-    } else {
-        /* Header */
-        fprintf (F, ".segment\t\"%s\": zeropage\n%s:\n", ZeropageSeg, ZeropageLabel);
-
-        /* Segment data */
-        fprintf (F, "\t.res\t%lu\n", D->Header.zlen);
-    }
-    fprintf (F, "\n");
-}
-
-
-
-void Convert (const O65Data* D)
-/* Convert the o65 file in D using the given output file. */
-{
-    FILE*       F;
-    unsigned    I;
-    char*       Author = 0;
-
-    /* For now, we do only accept o65 files generated by the ld65 linker which
-    ** have a specific format.
-    */
-    if (!Debug && D->Header.mode != O65_MODE_CC65) {
-        Error ("Cannot convert o65 files of this type");
-    }
-
-    /* Output statistics */
-    PrintO65Stats (D);
-
-    /* Walk through the options and print them if verbose mode is enabled.
-    ** Check for a os=cc65 option and bail out if we didn't find one (for
-    ** now - later we switch to special handling).
-    */
-    for (I = 0; I < CollCount (&D->Options); ++I) {
-
-        /* Get the next option */
-        const O65Option* O = CollConstAt (&D->Options, I);
-
-        /* Check the type of the option */
-        switch (O->Type) {
-
-            case O65_OPT_FILENAME:
-                Print (stdout, 1, "O65 filename option:         `%s'\n",
-                       GetO65OptionText (O));
-                break;
-
-            case O65_OPT_OS:
-                if (O->Len == 2) {
-                    Warning ("Operating system option without data found");
-                } else {
-                    Print (stdout, 1, "O65 operating system option: `%s'\n",
-                           GetO65OSName (O->Data[0]));
-                    switch (O->Data[0]) {
-                        case O65_OS_CC65_MODULE:
-                            if (Model != O65_MODEL_NONE &&
-                                Model != O65_MODEL_CC65_MODULE) {
-                                Warning ("Wrong o65 model for input file specified");
-                            } else {
-                                Model = O65_MODEL_CC65_MODULE;
-                            }
-                            break;
-                    }
-                }
-                break;
-
-            case O65_OPT_ASM:
-                Print (stdout, 1, "O65 assembler option:        `%s'\n",
-                       GetO65OptionText (O));
-                break;
-
-            case O65_OPT_AUTHOR:
-                if (Author) {
-                    xfree (Author);
-                }
-                Author = xstrdup (GetO65OptionText (O));
-                Print (stdout, 1, "O65 author option:           `%s'\n", Author);
-                break;
-
-            case O65_OPT_TIMESTAMP:
-                Print (stdout, 1, "O65 timestamp option:        `%s'\n",
-                       GetO65OptionText (O));
-                break;
-
-            default:
-                Warning ("Found unknown option, type %d, length %d",
-                         O->Type, O->Len);
-                break;
-        }
-    }
-
-    /* If we shouldn't generate output, we're done here */
-    if (NoOutput) {
-        return;
-    }
-
-    /* Open the output file */
-    F = fopen (OutputName, "w");
-    if (F == 0) {
-        Error ("Cannot open `%s': %s", OutputName, strerror (errno));
-    }
-
-    /* Create a header */
-    fprintf (F, ";\n; File generated by co65 v %s using model `%s'\n;\n",
-             GetVersionAsString (), GetModelName (Model));
-
-    /* Select the CPU */
-    if ((D->Header.mode & O65_CPU_MASK) == O65_CPU_65816) {
-        fprintf (F, ".p816\n");
-    }
-
-    /* Object file options */
-    fprintf (F, ".fopt\t\tcompiler,\"co65 v %s\"\n", GetVersionAsString ());
-    if (Author) {
-        fprintf (F, ".fopt\t\tauthor, \"%s\"\n", Author);
-        xfree (Author);
-        Author = 0;
-    }
-
-    /* Several other assembler options */
-    fprintf (F, ".case\t\ton\n");
-    fprintf (F, ".debuginfo\t%s\n", (DebugInfo != 0)? "on" : "off");
-
-    /* Setup/export the segment labels */
-    SetupSegLabels (F);
-
-    /* End of header */
-    fprintf (F, "\n");
-
-    /* Imported identifiers */
-    ConvertImports (F, D);
-
-    /* Exported identifiers */
-    ConvertExports (F, D);
-
-    /* Code segment */
-    ConvertCodeSeg (F, D);
-
-    /* Data segment */
-    ConvertDataSeg (F, D);
-
-    /* BSS segment */
-    ConvertBssSeg (F, D);
-
-    /* Zero page segment */
-    ConvertZeropageSeg (F, D);
-
-    /* End of data */
-    fprintf (F, ".end\n");
-    fclose (F);
-}
diff --git a/src/co65/convert.h b/src/co65/convert.h
deleted file mode 100644 (file)
index 22ef254..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 convert.h                                 */
-/*                                                                           */
-/*       Actual conversion routines for the co65 object file converter       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef CONVERT_H
-#define CONVERT_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Forward definition */
-struct O65Data;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Convert (const struct O65Data* D);
-/* Convert the o65 file in D */ 
-
-
-
-/* End of convert.h */
-
-#endif
diff --git a/src/co65/error.c b/src/co65/error.c
deleted file mode 100644 (file)
index 1c16252..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 error.c                                   */
-/*                                                                           */
-/*             Error handling for the co65 object file converter             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-/* common */
-#include "cmdline.h"
-
-/* co65 */
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Warning (const char* Format, ...)
-/* Print a warning message */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "%s: Warning: ", ProgName);
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-}
-
-
-
-void Error (const char* Format, ...)
-/* Print an error message and die */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "%s: Error: ", ProgName);
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-    exit (EXIT_FAILURE);
-}
-
-
-
-void Internal (const char* Format, ...)
-/* Print an internal error message and die */
-{
-    va_list ap;     
-    va_start (ap, Format);
-    fprintf (stderr, "%s: Internal error: ", ProgName);
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-    exit (EXIT_FAILURE);
-}
diff --git a/src/co65/error.h b/src/co65/error.h
deleted file mode 100644 (file)
index 4fb9d37..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 error.h                                   */
-/*                                                                           */
-/*             Error handling for the co65 object file converter             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ERROR_H
-#define ERROR_H
-
-
-
-/* common */
-#include "attrib.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Warning (const char* Format, ...) attribute((format(printf,1,2)));
-/* Print a warning message */
-
-void Error (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print an error message and die */
-
-void Internal (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print an internal error message and die */
-
-
-
-/* End of error.h */
-
-#endif
diff --git a/src/co65/fileio.c b/src/co65/fileio.c
deleted file mode 100644 (file)
index 9241797..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 fileio.c                                  */
-/*                                                                           */
-/*              Binary file I/O for the co65 object file converter           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "xmalloc.h"
-
-/* ld65 */
-#include "error.h"
-#include "fileio.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned Read8 (FILE* F)
-/* Read an 8 bit value from the file */
-{
-    int C = getc (F);
-    if (C == EOF) {
-        Error ("Read error (file corrupt?)");
-    }
-    return C;
-}
-
-
-
-unsigned Read16 (FILE* F)
-/* Read a 16 bit value from the file */
-{
-    unsigned Lo = Read8 (F);
-    unsigned Hi = Read8 (F);
-    return (Hi << 8) | Lo;
-}
-
-
-
-unsigned long Read24 (FILE* F)
-/* Read a 24 bit value from the file */
-{
-    unsigned long Lo = Read16 (F);
-    unsigned long Hi = Read8 (F);
-    return (Hi << 16) | Lo;
-}
-
-
-
-unsigned long Read32 (FILE* F)
-/* Read a 32 bit value from the file */
-{
-    unsigned long Lo = Read16 (F);
-    unsigned long Hi = Read16 (F);
-    return (Hi << 16) | Lo;
-}
-
-
-
-void* ReadData (FILE* F, void* Data, unsigned Size)
-/* Read data from the file */
-{
-    /* Explicitly allow reading zero bytes */
-    if (Size > 0) {
-        if (fread (Data, 1, Size, F) != Size) {
-            Error ("Read error (file corrupt?)");
-        }
-    }
-    return Data;
-}
diff --git a/src/co65/fileio.h b/src/co65/fileio.h
deleted file mode 100644 (file)
index c5e9a00..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 fileio.h                                  */
-/*                                                                           */
-/*              Binary file I/O for the co65 object file converter           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef FILEIO_H
-#define FILEIO_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "filepos.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned Read8 (FILE* F);
-/* Read an 8 bit value from the file */
-
-unsigned Read16 (FILE* F);
-/* Read a 16 bit value from the file */
-
-unsigned long Read24 (FILE* F);
-/* Read a 24 bit value from the file */
-
-unsigned long Read32 (FILE* F);
-/* Read a 32 bit value from the file */
-
-void* ReadData (FILE* F, void* Data, unsigned Size);
-/* Read data from the file */
-
-
-
-/* End of fileio.h */
-
-#endif
diff --git a/src/co65/global.c b/src/co65/global.c
deleted file mode 100644 (file)
index bc9b009..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.c                                  */
-/*                                                                           */
-/*            Global variables for the co65 object file converter            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "segnames.h"
-
-/* co65 */
-#include "global.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* File names */
-const char* InputName       = 0;                /* Name of input file */
-const char* OutputName      = 0;                /* Name of output file */
-
-/* Default extensions */
-const char AsmExt[]         = ".s";             /* Default assembler extension */
-
-/* Segment names */
-const char* CodeSeg         = SEGNAME_CODE;     /* Name of the code segment */
-const char* DataSeg         = SEGNAME_DATA;     /* Name of the data segment */
-const char* BssSeg          = SEGNAME_BSS;      /* Name of the bss segment */
-const char* ZeropageSeg     = SEGNAME_ZEROPAGE; /* Name of the zeropage segment */
-
-/* Labels */
-const char* CodeLabel       = 0;                /* Label for the code segment */
-const char* DataLabel       = 0;                /* Label for the data segment */
-const char* BssLabel        = 0;                /* Label for the bss segment */
-const char* ZeropageLabel   = 0;                /* Label for the zeropage segment */
-
-/* Flags */
-unsigned char DebugInfo     = 0;                /* Enable debug info */
-unsigned char NoOutput      = 0;                /* Suppress the actual conversion */
diff --git a/src/co65/global.h b/src/co65/global.h
deleted file mode 100644 (file)
index 29c17ca..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.h                                  */
-/*                                                                           */
-/*            Global variables for the co65 object file converter            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef GLOBAL_H
-#define GLOBAL_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* File names */
-extern const char*      InputName;          /* Name of input file */
-extern const char*      OutputName;         /* Name of output file */
-
-/* Default extensions */
-extern const char       AsmExt[];           /* Default assembler extension */
-
-/* Segment names */
-extern const char*      CodeSeg;            /* Name of the code segment */
-extern const char*      DataSeg;            /* Name of the data segment */
-extern const char*      BssSeg;             /* Name of the bss segment */
-extern const char*      ZeropageSeg;        /* Name of the zeropage segment */
-
-/* Labels */
-extern const char*      CodeLabel;          /* Label for the code segment */
-extern const char*      DataLabel;          /* Label for the data segment */
-extern const char*      BssLabel;           /* Label for the bss segment */
-extern const char*      ZeropageLabel;      /* Label for the zeropage segment */
-
-/* Flags */
-extern unsigned char    DebugInfo;          /* Enable debug info */
-extern unsigned char    NoOutput;           /* Suppress the actual conversion */
-
-
-
-/* End of global.h */
-
-#endif
diff --git a/src/co65/main.c b/src/co65/main.c
deleted file mode 100644 (file)
index 5e0ee2e..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  main.c                                   */
-/*                                                                           */
-/*              Main program for the co65 object file converter              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <time.h>
-
-/* common */
-#include "chartype.h"
-#include "cmdline.h"
-#include "debugflag.h"
-#include "fname.h"
-#include "print.h"
-#include "segnames.h"
-#include "version.h"
-#include "xmalloc.h"
-#include "xsprintf.h"
-
-/* co65 */
-#include "convert.h"
-#include "error.h"
-#include "global.h"
-#include "model.h"
-#include "o65.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void Usage (void)
-/* Print usage information and exit */
-{
-    printf ("Usage: %s [options] file\n"
-            "Short options:\n"
-            "  -V\t\t\tPrint the version number\n"
-            "  -g\t\t\tAdd debug info to object file\n"
-            "  -h\t\t\tHelp (this text)\n"
-            "  -m model\t\tOverride the o65 model\n"
-            "  -n\t\t\tDon't generate an output file\n"
-            "  -o name\t\tName the output file\n"
-            "  -v\t\t\tIncrease verbosity\n"
-            "\n"
-            "Long options:\n"
-            "  --bss-label name\tDefine and export a BSS segment label\n"
-            "  --bss-name seg\tSet the name of the BSS segment\n"
-            "  --code-label name\tDefine and export a CODE segment label\n"
-            "  --code-name seg\tSet the name of the CODE segment\n"
-            "  --data-label name\tDefine and export a DATA segment label\n"
-            "  --data-name seg\tSet the name of the DATA segment\n"
-            "  --debug-info\t\tAdd debug info to object file\n"
-            "  --help\t\tHelp (this text)\n"
-            "  --no-output\t\tDon't generate an output file\n"
-            "  --o65-model model\tOverride the o65 model\n"
-            "  --verbose\t\tIncrease verbosity\n"
-            "  --version\t\tPrint the version number\n"
-            "  --zeropage-label name\tDefine and export a ZEROPAGE segment label\n"
-            "  --zeropage-name seg\tSet the name of the ZEROPAGE segment\n",
-            ProgName);
-}
-
-
-
-static void CheckLabelName (const char* Label)
-/* Check if the given label is a valid label name */
-{
-    const char* L = Label;
-
-    if (strlen (L) < 256 && (IsAlpha (*L) || *L== '_')) {
-        while (*++L) {
-            if (!IsAlNum (*L) && *L != '_') {
-                break;
-            }
-        }
-    }
-
-    if (*L) {
-        Error ("Label name `%s' is invalid", Label);
-    }
-}
-
-
-
-static void CheckSegName (const char* Seg)
-/* Abort if the given name is not a valid segment name */
-{
-    /* Print an error and abort if the name is not ok */
-    if (!ValidSegName (Seg)) {
-        Error ("Segment name `%s' is invalid", Seg);
-    }
-}
-
-
-
-static void OptBssLabel (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --bss-label option */
-{
-    /* Check for a label name */
-    CheckLabelName (Arg);
-
-    /* Set the label */
-    BssLabel = xstrdup (Arg);
-}
-
-
-
-static void OptBssName (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --bss-name option */
-{
-    /* Check for a valid name */
-    CheckSegName (Arg);
-
-    /* Set the name */
-    BssSeg = xstrdup (Arg);
-}
-
-
-
-static void OptCodeLabel (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --code-label option */
-{
-    /* Check for a label name */
-    CheckLabelName (Arg);
-
-    /* Set the label */
-    CodeLabel = xstrdup (Arg);
-}
-
-
-
-static void OptCodeName (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --code-name option */
-{
-    /* Check for a valid name */
-    CheckSegName (Arg);
-
-    /* Set the name */
-    CodeSeg = xstrdup (Arg);
-}
-
-
-
-static void OptDataLabel (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --data-label option */
-{
-    /* Check for a label name */
-    CheckLabelName (Arg);
-
-    /* Set the label */
-    DataLabel = xstrdup (Arg);
-}
-
-
-
-static void OptDataName (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --data-name option */
-{
-    /* Check for a valid name */
-    CheckSegName (Arg);
-
-    /* Set the name */
-    DataSeg = xstrdup (Arg);
-}
-
-
-
-static void OptDebug (const char* Opt attribute ((unused)),
-                      const char* Arg attribute ((unused)))
-/* Enable debugging code */
-{
-    ++Debug;
-}
-
-
-
-static void OptDebugInfo (const char* Opt attribute ((unused)),
-                          const char* Arg attribute ((unused)))
-/* Add debug info to the object file */
-{
-    DebugInfo = 1;
-}
-
-
-
-static void OptHelp (const char* Opt attribute ((unused)),
-                     const char* Arg attribute ((unused)))
-/* Print usage information and exit */
-{
-    Usage ();
-    exit (EXIT_SUCCESS);
-}
-
-
-
-static void OptNoOutput (const char* Opt attribute ((unused)),
-                         const char* Arg attribute ((unused)))
-/* Handle the --no-output option */
-{
-    NoOutput = 1;
-}
-
-
-
-static void OptO65Model (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --o65-model option */
-{
-    /* Search for the model name */
-    Model = FindModel (Arg);
-    if (Model == O65_MODEL_INVALID) {
-        Error ("Unknown o65 model `%s'", Arg);
-    }
-}
-
-
-
-static void OptVerbose (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Increase verbosity */
-{
-    ++Verbosity;
-}
-
-
-
-static void OptVersion (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Print the assembler version */
-{
-    fprintf (stderr, "co65 V%s\n", GetVersionAsString ());
-}
-
-
-
-static void OptZeropageLabel (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --zeropage-label option */
-{
-    /* Check for a label name */
-    CheckLabelName (Arg);
-
-    /* Set the label */
-    ZeropageLabel = xstrdup (Arg);
-}
-
-
-
-static void OptZeropageName (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --zeropage-name option */
-{
-    /* Check for a valid name */
-    CheckSegName (Arg);
-
-    /* Set the name */
-    ZeropageSeg = xstrdup (Arg);
-}
-
-
-
-static void DoConversion (void)
-/* Do file conversion */
-{
-    /* Read the o65 file into memory */
-    O65Data* D = ReadO65File (InputName);
-
-    /* Do the conversion */
-    Convert (D);
-
-    /* Free the o65 module data */
-    /* ### */
-
-}
-
-
-
-int main (int argc, char* argv [])
-/* Converter main program */
-{
-    /* Program long options */
-    static const LongOpt OptTab[] = {
-        { "--bss-label",        1,      OptBssLabel             },
-        { "--bss-name",         1,      OptBssName              },
-        { "--code-label",       1,      OptCodeLabel            },
-        { "--code-name",        1,      OptCodeName             },
-        { "--data-label",       1,      OptDataLabel            },
-        { "--data-name",        1,      OptDataName             },
-        { "--debug",            0,      OptDebug                },
-        { "--debug-info",       0,      OptDebugInfo            },
-        { "--help",             0,      OptHelp                 },
-        { "--no-output",        0,      OptNoOutput             },
-        { "--o65-model",        1,      OptO65Model             },
-        { "--verbose",          0,      OptVerbose              },
-        { "--version",          0,      OptVersion              },
-        { "--zeropage-label",   1,      OptZeropageLabel        },
-        { "--zeropage-name",    1,      OptZeropageName         },
-    };
-
-    unsigned I;
-
-    /* Initialize the cmdline module */
-    InitCmdLine (&argc, &argv, "co65");
-
-    /* Check the parameters */
-    I = 1;
-    while (I < ArgCount) {
-
-        /* Get the argument */
-        const char* Arg = ArgVec [I];
-
-        /* Check for an option */
-        if (Arg [0] == '-') {
-            switch (Arg [1]) {
-
-                case '-':
-                    LongOption (&I, OptTab, sizeof(OptTab)/sizeof(OptTab[0]));
-                    break;
-
-                case 'g':
-                    OptDebugInfo (Arg, 0);
-                    break;
-
-                case 'h':
-                    OptHelp (Arg, 0);
-                    break;
-
-                case 'm':
-                    OptO65Model (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'n':
-                    OptNoOutput (Arg, 0);
-                    break;
-
-                case 'o':
-                    OutputName = GetArg (&I, 2);
-                    break;
-
-                case 'v':
-                    OptVerbose (Arg, 0);
-                    break;
-
-                case 'V':
-                    OptVersion (Arg, 0);
-                    break;
-
-                default:
-                    UnknownOption (Arg);
-                    break;
-
-            }
-        } else {
-            /* Filename. Check if we already had one */
-            if (InputName) {
-                Error ("Don't know what to do with `%s'", Arg);
-            } else {
-                InputName = Arg;
-            }
-        }
-
-        /* Next argument */
-        ++I;
-    }
-
-    /* Do we have an input file? */
-    if (InputName == 0) {
-        Error ("No input file");
-    }
-
-    /* Generate the name of the output file if none was specified */
-    if (OutputName == 0) {
-        OutputName = MakeFilename (InputName, AsmExt);
-    }
-
-    /* Do the conversion */
-    DoConversion ();
-
-    /* Return an apropriate exit code */
-    return EXIT_SUCCESS;
-}
diff --git a/src/co65/model.c b/src/co65/model.c
deleted file mode 100644 (file)
index 87a6966..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  model.c                                  */
-/*                                                                           */
-/*         o65 model definitions for the co65 object file converter          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "strutil.h"
-
-/* co65 */
-#include "error.h"
-#include "model.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Current model */
-O65Model Model = O65_MODEL_NONE;
-
-/* Name table */
-static const char* NameTable[O65_MODEL_COUNT] = {
-    "none",    
-    "os/a65",
-    "lunix",
-    "cc65-module"
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-const char* GetModelName (O65Model M)
-/* Map the model to its name. */
-{
-    if (M < 0 || M >= O65_MODEL_COUNT) {
-        Internal ("O65 Model %d not found", M);
-    }
-    return NameTable[M];
-}
-
-
-
-O65Model FindModel (const char* ModelName)
-/* Map a model name to its identifier. Return O65_MODEL_INVALID if the name
-** could not be found. Case is ignored when comparing names.
-*/
-{
-    O65Model M;
-    for (M = O65_MODEL_NONE; M < O65_MODEL_COUNT; ++M) {
-        if (StrCaseCmp (ModelName, NameTable[M]) == 0) {
-            return M;
-        }
-    }
-    return O65_MODEL_INVALID;
-}
diff --git a/src/co65/model.h b/src/co65/model.h
deleted file mode 100644 (file)
index e727d06..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  model.h                                  */
-/*                                                                           */
-/*         o65 model definitions for the co65 object file converter          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef MODEL_H
-#define MODEL_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Supported models */
-typedef enum {
-    O65_MODEL_INVALID = -1,     /* Invalid model */
-    O65_MODEL_NONE,             /* No model given */
-    O65_MODEL_OSA65,            /* Not implemented */
-    O65_MODEL_LUNIX,            /* Not implemented */
-    O65_MODEL_CC65_MODULE,
-
-    O65_MODEL_COUNT             /* Number of available models */
-} O65Model;
-
-
-
-/* Current model */
-extern O65Model Model;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-const char* GetModelName (O65Model M);
-/* Map the model to its name. */
-
-O65Model FindModel (const char* ModelName);
-/* Map a model name to its identifier. Return O65_MODEL_INVALID if the name
-** could not be found. Case is ignored when comparing names.
-*/
-
-
-
-/* End of model.h */
-
-#endif
diff --git a/src/co65/o65.c b/src/co65/o65.c
deleted file mode 100644 (file)
index 3496995..0000000
+++ /dev/null
@@ -1,436 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   o65.h                                   */
-/*                                                                           */
-/*               Definitions and code for the o65 file format                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2004 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "chartype.h"
-#include "xmalloc.h"
-
-/* co65 */
-#include "error.h"
-#include "fileio.h"
-#include "o65.h"
-
-
-
-/*****************************************************************************/
-/*                              struct O65Data                               */
-/*****************************************************************************/
-
-
-
-static O65Data* NewO65Data (void)
-/* Create, initialize and return a new O65Data struct */
-{
-    /* Allocate memory */
-    O65Data* D = xmalloc (sizeof (O65Data));
-
-    /* Initialize the fields as needed */
-    D->Options      = AUTO_COLLECTION_INITIALIZER;
-    D->Text         = 0;
-    D->Data         = 0;
-    D->TextReloc    = AUTO_COLLECTION_INITIALIZER;
-    D->DataReloc    = AUTO_COLLECTION_INITIALIZER;
-    D->Imports      = AUTO_COLLECTION_INITIALIZER;
-    D->Exports      = AUTO_COLLECTION_INITIALIZER;
-
-    /* Return the new struct */
-    return D;
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static unsigned long ReadO65Size (FILE* F, const O65Header* H)
-/* Read a size variable (16 or 32 bit, depending on the mode word in the
-** header) from the o65 file.
-*/
-{
-    unsigned long Size = 0;     /* Initialize to avoid warnings */
-    switch (H->mode & O65_SIZE_MASK) {
-        case O65_SIZE_32BIT:    Size = Read32 (F);      break;
-        case O65_SIZE_16BIT:    Size = Read16 (F);      break;
-        default:                Internal ("Invalid size field value in o65 header");
-    }
-    return Size;
-}
-
-
-
-static void ReadO65Header (FILE* F, O65Header* H)
-/* Read an o65 header from the given file. The function will call Error if
-** something is wrong.
-*/
-{
-    static const char Magic[3] = {
-        O65_MAGIC_0, O65_MAGIC_1, O65_MAGIC_2   /* "o65" */
-    };
-
-    /* Read the marker and check it */
-    ReadData (F, H->marker, sizeof (H->marker));
-    if (H->marker[0] != O65_MARKER_0 || H->marker[1] != O65_MARKER_1) {
-        Error ("Not an o65 object file: Invalid marker %02X %02X",
-               H->marker[0], H->marker[1]);
-    }
-
-    /* Read the magic and check it */
-    ReadData (F, H->magic, sizeof (H->magic));
-    if (memcmp (H->magic, Magic, sizeof (H->magic)) != 0) {
-        Error ("Not an o65 object file: Invalid magic %02X %02X %02X",
-               H->magic[0], H->magic[1], H->magic[2]);
-    }
-
-    /* Read the version number and check it */
-    H->version = Read8 (F);
-    if (H->version != O65_VERSION) {
-        Error ("Invalid o65 version number: %02X", H->version);
-    }
-
-    /* Read the mode word */
-    H->mode = Read16 (F);
-
-    /* Read the remainder of the header */
-    H->tbase = ReadO65Size (F, H);
-    H->tlen  = ReadO65Size (F, H);
-    H->dbase = ReadO65Size (F, H);
-    H->dlen  = ReadO65Size (F, H);
-    H->bbase = ReadO65Size (F, H);
-    H->blen  = ReadO65Size (F, H);
-    H->zbase = ReadO65Size (F, H);
-    H->zlen  = ReadO65Size (F, H);
-    H->stack = ReadO65Size (F, H);
-}
-
-
-
-static O65Option* ReadO65Option (FILE* F)
-/* Read the next O65 option from the given file. The option is stored into a
-** dynamically allocated O65Option struct which is returned. On end of options,
-** NULL is returned. On error, Error is called which terminates the program.
-*/
-{
-    O65Option* O;
-
-    /* Read the length of the option and bail out on end of options */
-    unsigned char Len = Read8 (F);
-    if (Len == 0) {
-        return 0;
-    }
-    if (Len < 2) {
-        Error ("Found option with length < 2 (input file corrupt)");
-    }
-    Len -= 2;
-
-    /* Allocate a new O65Option structure of the needed size */
-    O = xmalloc (sizeof (*O) - sizeof (O->Data) + Len);
-
-    /* Assign the length and read the remaining option data */
-    O->Len  = Len;
-    O->Type = Read8 (F);
-    ReadData (F, O->Data, Len);
-
-    /* Return the new struct */
-    return O;
-}
-
-
-
-static O65Import* ReadO65Import (FILE* F)
-/* Read an o65 import from the file */
-{
-    O65Import* I;
-
-    /* Allow identifiers up to 511 bytes */
-    char Buf[512];
-
-    /* Read the identifier */
-    unsigned Len = 0;
-    char C;
-    do {
-        C = Read8 (F);
-        if (Len >= sizeof (Buf)) {
-            Error ("Imported identifier exceeds maximum size (%u)",
-                   (unsigned) sizeof (Buf));
-        }
-        Buf[Len++] = C;
-    } while (C != '\0');
-
-    /* Allocate an import structure and initialize it */
-    I = xmalloc (sizeof (*I) - sizeof (I->Name) + Len);
-    memcpy (I->Name, Buf, Len);
-
-    /* Return the new struct */
-    return I;
-}
-
-
-
-static void ReadO65RelocInfo (FILE* F, const O65Data* D, Collection* Reloc)
-/* Read relocation data for one segment */
-{
-    /* Relocation starts at (start address - 1) */
-    unsigned long Offs = (unsigned long) -1L;
-
-    while (1) {
-
-        O65Reloc* R;
-
-        /* Read the next relocation offset */
-        unsigned char C = Read8 (F);
-        if (C == 0) {
-            /* End of relocation table */
-            break;
-        }
-
-        /* Create a new relocation entry */
-        R = xmalloc (sizeof (*R));
-
-        /* Handle overflow bytes */
-        while (C == 0xFF) {
-            Offs += 0xFE;
-            C = Read8 (F);
-        }
-
-        /* Calculate the final offset */
-        R->Offs = (Offs += C);
-
-        /* Read typebyte and segment id */
-        C = Read8 (F);
-        R->Type   = (C & O65_RTYPE_MASK);
-        R->SegID  = (C & O65_SEGID_MASK);
-
-        /* Read an additional relocation value if there is one */
-        R->SymIdx = (R->SegID == O65_SEGID_UNDEF)? ReadO65Size (F, &D->Header) : 0;
-        switch (R->Type) {
-
-            case O65_RTYPE_HIGH:
-                if ((D->Header.mode & O65_RELOC_MASK) == O65_RELOC_BYTE) {
-                    /* Low byte follows */
-                    R->Val = Read8 (F);
-                } else {
-                    /* Low byte is zero */
-                    R->Val = 0;
-                }
-                break;
-
-            case O65_RTYPE_SEG:
-                /* Low 16 byte of the segment address follow */
-                R->Val = Read16 (F);
-                break;
-
-            default:
-                R->Val = 0;
-                break;
-        }
-
-        /* Insert this relocation entry into the collection */
-        CollAppend (Reloc, R);
-    }
-}
-
-
-
-static O65Export* ReadO65Export (FILE* F, const O65Header* H)
-/* Read an o65 export from the file */
-{
-    O65Export* E;
-
-    /* Allow identifiers up to 511 bytes */
-    char Buf[512];
-
-    /* Read the identifier */
-    unsigned Len = 0;
-    char C;
-    do {
-        C = Read8 (F);
-        if (Len >= sizeof (Buf)) {
-            Error ("Exported identifier exceeds maximum size (%u)",
-                   (unsigned) sizeof (Buf));
-        }
-        Buf[Len++] = C;
-    } while (C != '\0');
-
-    /* Allocate an export structure and initialize it */
-    E = xmalloc (sizeof (*E) - sizeof (E->Name) + Len);
-    memcpy (E->Name, Buf, Len);
-    E->SegID = Read8 (F);
-    E->Val   = ReadO65Size (F, H);
-
-    /* Return the new struct */
-    return E;
-}
-
-
-
-static O65Data* ReadO65Data (FILE* F)
-/* Read a complete o65 file into dynamically allocated memory and return the
-** created O65Data struct.
-*/
-{
-    unsigned long Count;
-    O65Option* O;
-
-    /* Create the struct we're going to return */
-    O65Data* D = NewO65Data ();
-
-    /* Read the header */
-    ReadO65Header (F, &D->Header);
-
-    /* Read the options */
-    while ((O = ReadO65Option (F)) != 0) {
-        CollAppend (&D->Options, O);
-    }
-
-    /* Allocate space for the text segment and read it */
-    D->Text = xmalloc (D->Header.tlen);
-    ReadData (F, D->Text, D->Header.tlen);
-
-    /* Allocate space for the data segment and read it */
-    D->Data = xmalloc (D->Header.dlen);
-    ReadData (F, D->Data, D->Header.dlen);
-
-    /* Read the undefined references list */
-    Count = ReadO65Size (F, &D->Header);
-    while (Count--) {
-        CollAppend (&D->Imports, ReadO65Import (F));
-    }
-
-    /* Read the relocation tables for text and data segment */
-    ReadO65RelocInfo (F, D, &D->TextReloc);
-    ReadO65RelocInfo (F, D, &D->DataReloc);
-
-    /* Read the exported globals list */
-    Count = ReadO65Size (F, &D->Header);
-    while (Count--) {
-        CollAppend (&D->Exports, ReadO65Export (F, &D->Header));
-    }
-
-    /* Return the o65 data read from the file */
-    return D;
-}
-
-
-
-O65Data* ReadO65File (const char* Name)
-/* Read a complete o65 file into dynamically allocated memory and return the
-** created O65Data struct.
-*/
-{
-    O65Data* D;
-
-    /* Open the o65 input file */
-    FILE* F = fopen (Name, "rb");
-    if (F == 0) {
-        Error ("Cannot open `%s': %s", Name, strerror (errno));
-    }
-
-    /* Read the file data */
-    D = ReadO65Data (F);
-
-    /* Close the input file. Ignore errors since we were only reading */
-    fclose (F);
-
-    /* Return the data read */
-    return D;
-}
-
-
-
-const char* GetO65OSName (unsigned char OS)
-/* Return the name of the operating system given by OS */
-{
-    switch (OS) {
-        case O65_OS_OSA65:              return "OS/A65";
-        case O65_OS_LUNIX:              return "Lunix";
-        case O65_OS_CC65_MODULE:        return "cc65 module";
-        default:                        return "unknown";
-    }
-}
-
-
-
-const char* GetO65OptionText (const O65Option* O)
-/* Return the data of the given option as a readable text. The function returns
-** a pointer to a static buffer that is reused on the next call, so if in doubt,
-** make a copy (and no, the function is not thread safe).
-*/
-{
-    static char Buf[256];
-    unsigned I, J;
-
-    /* Get the length of the text */
-    unsigned Len = 0;
-    while (Len < O->Len && O->Data[Len] != '\0') {
-        ++Len;
-    }
-
-    /* Copy into the buffer converting non readable characters */
-    I = J = 0;
-    while (I < sizeof (Buf) - 1 && J < Len) {
-        if (!IsControl (O->Data[J])) {
-            Buf[I++] = O->Data[J];
-        } else {
-            Buf[I++] = '\\';
-            if (I >= sizeof (Buf) - 4) {
-                --I;
-                break;
-            }
-            switch (O->Data[J]) {
-                case '\t':      Buf[I++] = 't'; break;
-                case '\b':      Buf[I++] = 'b'; break;
-                case '\n':      Buf[I++] = 'n'; break;
-                case '\r':      Buf[I++] = 'r'; break;
-                case '\v':      Buf[I++] = 'v'; break;
-                default:
-                    sprintf (Buf + I, "x%02X", O->Data[J]);
-                    I += 3;
-                    break;
-            }
-        }
-        ++J;
-    }
-
-    /* Terminate the string and return it */
-    Buf[I] = '\0';
-    return Buf;
-}
diff --git a/src/co65/o65.h b/src/co65/o65.h
deleted file mode 100644 (file)
index dd0ea61..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   o65.h                                   */
-/*                                                                           */
-/*               Definitions and code for the o65 file format                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2003 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* This files exports structures and constants to handle the o65 relocatable
-** file format as defined by Andre Fachat. See the original document under
-**
-**      http://www.6502.org/users/andre/o65/fileformat.html
-**
-** for more information.
-*/
-
-
-
-#ifndef _O65_H
-#define _O65_H
-
-
-
-/* common */
-#include "coll.h"
-
-
-
-/*****************************************************************************/
-/*                                  Defines                                  */
-/*****************************************************************************/
-
-
-
-/* Define a structure for the o65 file header */
-typedef struct O65Header O65Header;
-struct O65Header {
-    char            marker[2];  /* Non-C64 marker */
-    char            magic[3];   /* o65 magic */
-    char            version;    /* Version number */
-    unsigned        mode;       /* Mode word */
-    unsigned long   tbase;      /* Original text (code) segment address */
-    unsigned long   tlen;       /* Size of text (code) segment */
-    unsigned long   dbase;      /* Original data segment address */
-    unsigned long   dlen;       /* Size of data segment */
-    unsigned long   bbase;      /* Original bss segment address */
-    unsigned long   blen;       /* Size of bss segment */
-    unsigned long   zbase;      /* Original zp segment address */
-    unsigned long   zlen;       /* Size of zp segment */
-    unsigned long   stack;      /* Stacksize needed */
-};
-
-/* o65 option */
-typedef struct O65Option O65Option;
-struct O65Option {
-    unsigned char   Len;        /* Option length */
-    unsigned char   Type;       /* Option type */
-    unsigned char   Data[1];    /* Option data (dynamically allocated) */
-};
-
-/* o65 relocation entry */
-typedef struct O65Reloc O65Reloc;
-struct O65Reloc {
-    unsigned long   Offs;       /* Offset in segment */
-    unsigned char   Type;       /* Relocation type */
-    unsigned char   SegID;      /* Segment ID */
-    unsigned        Val;        /* Any offset value needed for relocation */
-    unsigned long   SymIdx;     /* Index into list of imported symbols */
-};
-
-/* o65 import */
-typedef struct O65Import O65Import;
-struct O65Import {
-    char            Name[1];    /* Name of the import (dynamically allocated) */
-};
-
-/* o65 export */
-typedef struct O65Export O65Export;
-struct O65Export {
-    unsigned char   SegID;      /* Segment ID */
-    unsigned long   Val;        /* Relocation value */
-    char            Name[1];    /* Name of the export (dynamically allocated) */
-};
-
-/* Complete o65 file data */
-typedef struct O65Data O65Data;
-struct O65Data {
-    O65Header       Header;     /* File header */
-    Collection      Options;    /* O65 options */
-    unsigned char*  Text;       /* Text segment data (unrelocated) */
-    unsigned char*  Data;       /* Data segment data (unrelocated) */
-    Collection      TextReloc;  /* Relocation entries for the text segment */
-    Collection      DataReloc;  /* Relocation entries for the data segment */
-    Collection      Imports;    /* Imported symbols */
-    Collection      Exports;    /* Exported symbols */
-};
-
-
-
-/* Marker, magic and version number */
-#define O65_MARKER_0            0x01
-#define O65_MARKER_1            0x00
-#define O65_MAGIC_0             0x6F    /* 'o' */
-#define O65_MAGIC_1             0x36    /* '6' */
-#define O65_MAGIC_2             0x35    /* '5' */
-#define O65_VERSION             0x00
-
-/* Defines for the mode word */
-#define O65_CPU_65816           0x8000  /* Executable is for 65816 */
-#define O65_CPU_6502            0x0000  /* Executable is for the 6502 */
-#define O65_CPU_MASK            0x8000  /* Mask to extract CPU type */
-
-#define O65_RELOC_PAGE          0x4000  /* Page wise relocation */
-#define O65_RELOC_BYTE          0x0000  /* Byte wise relocation */
-#define O65_RELOC_MASK          0x4000  /* Mask to extract relocation type */
-
-#define O65_SIZE_32BIT          0x2000  /* All size words are 32bit */
-#define O65_SIZE_16BIT          0x0000  /* All size words are 16bit */
-#define O65_SIZE_MASK           0x2000  /* Mask to extract size */
-
-#define O65_FTYPE_OBJ           0x1000  /* Object file */
-#define O65_FTYPE_EXE           0x0000  /* Executable file */
-#define O65_FTYPE_MASK          0x1000  /* Mask to extract type */
-
-#define O65_ADDR_SIMPLE         0x0800  /* Simple addressing */
-#define O65_ADDR_DEFAULT        0x0000  /* Default addressing */
-#define O65_ADDR_MASK           0x0800  /* Mask to extract addressing */
-
-#define O65_ALIGN_1             0x0000  /* Bytewise alignment */
-#define O65_ALIGN_2             0x0001  /* Align words */
-#define O65_ALIGN_4             0x0002  /* Align longwords */
-#define O65_ALIGN_256           0x0003  /* Align pages (256 bytes) */
-#define O65_ALIGN_MASK          0x0003  /* Mask to extract alignment */
-
-/* The mode word as generated by the ld65 linker */
-#define O65_MODE_CC65           (O65_CPU_6502    |      \
-                                 O65_RELOC_BYTE  |      \
-                                 O65_SIZE_16BIT  |      \
-                                 O65_FTYPE_EXE   |      \
-                                 O65_ADDR_SIMPLE |      \
-                                 O65_ALIGN_1)
-
-/* The four o65 segment types. */
-#define O65_SEGID_UNDEF         0x00
-#define O65_SEGID_ABS           0x01
-#define O65_SEGID_TEXT          0x02
-#define O65_SEGID_DATA          0x03
-#define O65_SEGID_BSS           0x04
-#define O65_SEGID_ZP            0x05
-#define O65_SEGID_MASK          0x07
-
-/* Relocation type codes */
-#define O65_RTYPE_WORD          0x80
-#define O65_RTYPE_HIGH          0x40
-#define O65_RTYPE_LOW           0x20
-#define O65_RTYPE_SEGADDR       0xC0
-#define O65_RTYPE_SEG           0xA0
-#define O65_RTYPE_MASK          0xE0
-
-/* Segment IDs */
-#define O65_SEGID_UNDEF         0x00
-#define O65_SEGID_ABS           0x01
-#define O65_SEGID_TEXT          0x02
-#define O65_SEGID_DATA          0x03
-#define O65_SEGID_BSS           0x04
-#define O65_SEGID_ZP            0x05
-#define O65_SEGID_MASK          0x07
-
-/* Option tags */
-#define O65_OPT_FILENAME        0
-#define O65_OPT_OS              1
-#define O65_OPT_ASM             2
-#define O65_OPT_AUTHOR          3
-#define O65_OPT_TIMESTAMP       4
-
-/* Operating system codes for O65_OPT_OS */
-#define O65_OS_OSA65            1
-#define O65_OS_LUNIX            2
-#define O65_OS_CC65_MODULE      3
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-O65Data* ReadO65File (const char* Name);
-/* Read a complete o65 file into dynamically allocated memory and return the
-** created O65Data struct.
-*/
-
-const char* GetO65OSName (unsigned char OS);
-/* Return the name of the operating system given by OS */
-
-const char* GetO65OptionText (const O65Option* O);
-/* Return the data of the given option as a readable text. The function returns
-** a pointer to a static buffer that is reused on the next call, so if in doubt,
-** make a copy (and no, the function is not thread safe).
-*/
-
-
-
-/* End of o65.h */
-
-#endif
diff --git a/src/common.vcxproj b/src/common.vcxproj
deleted file mode 100644 (file)
index 053d239..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="common\abend.h" />
-    <ClInclude Include="common\addrsize.h" />
-    <ClInclude Include="common\alignment.h" />
-    <ClInclude Include="common\assertion.h" />
-    <ClInclude Include="common\attrib.h" />
-    <ClInclude Include="common\bitops.h" />
-    <ClInclude Include="common\cddefs.h" />
-    <ClInclude Include="common\chartype.h" />
-    <ClInclude Include="common\check.h" />
-    <ClInclude Include="common\cmdline.h" />
-    <ClInclude Include="common\coll.h" />
-    <ClInclude Include="common\cpu.h" />
-    <ClInclude Include="common\debugflag.h" />
-    <ClInclude Include="common\exprdefs.h" />
-    <ClInclude Include="common\fileid.h" />
-    <ClInclude Include="common\filepos.h" />
-    <ClInclude Include="common\filestat.h" />
-    <ClInclude Include="common\filetime.h" />
-    <ClInclude Include="common\filetype.h" />
-    <ClInclude Include="common\fname.h" />
-    <ClInclude Include="common\fp.h" />
-    <ClInclude Include="common\fragdefs.h" />
-    <ClInclude Include="common\gentype.h" />
-    <ClInclude Include="common\hashfunc.h" />
-    <ClInclude Include="common\hashtab.h" />
-    <ClInclude Include="common\hlldbgsym.h" />
-    <ClInclude Include="common\inline.h" />
-    <ClInclude Include="common\intstack.h" />
-    <ClInclude Include="common\inttypes.h" />
-    <ClInclude Include="common\libdefs.h" />
-    <ClInclude Include="common\lidefs.h" />
-    <ClInclude Include="common\matchpat.h" />
-    <ClInclude Include="common\mmodel.h" />
-    <ClInclude Include="common\objdefs.h" />
-    <ClInclude Include="common\optdefs.h" />
-    <ClInclude Include="common\print.h" />
-    <ClInclude Include="common\scopedefs.h" />
-    <ClInclude Include="common\searchpath.h" />
-    <ClInclude Include="common\segdefs.h" />
-    <ClInclude Include="common\segnames.h" />
-    <ClInclude Include="common\shift.h" />
-    <ClInclude Include="common\strbuf.h" />
-    <ClInclude Include="common\strpool.h" />
-    <ClInclude Include="common\strstack.h" />
-    <ClInclude Include="common\strutil.h" />
-    <ClInclude Include="common\symdefs.h" />
-    <ClInclude Include="common\target.h" />
-    <ClInclude Include="common\tgttrans.h" />
-    <ClInclude Include="common\va_copy.h" />
-    <ClInclude Include="common\version.h" />
-    <ClInclude Include="common\xmalloc.h" />
-    <ClInclude Include="common\xsprintf.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="common\abend.c" />
-    <ClCompile Include="common\addrsize.c" />
-    <ClCompile Include="common\alignment.c" />
-    <ClCompile Include="common\assertion.c" />
-    <ClCompile Include="common\bitops.c" />
-    <ClCompile Include="common\chartype.c" />
-    <ClCompile Include="common\check.c" />
-    <ClCompile Include="common\cmdline.c" />
-    <ClCompile Include="common\coll.c" />
-    <ClCompile Include="common\cpu.c" />
-    <ClCompile Include="common\debugflag.c" />
-    <ClCompile Include="common\exprdefs.c" />
-    <ClCompile Include="common\fileid.c" />
-    <ClCompile Include="common\filepos.c" />
-    <ClCompile Include="common\filestat.c" />
-    <ClCompile Include="common\filetime.c" />
-    <ClCompile Include="common\filetype.c" />
-    <ClCompile Include="common\fname.c" />
-    <ClCompile Include="common\fp.c" />
-    <ClCompile Include="common\gentype.c" />
-    <ClCompile Include="common\hashfunc.c" />
-    <ClCompile Include="common\hashtab.c" />
-    <ClCompile Include="common\intstack.c" />
-    <ClCompile Include="common\matchpat.c" />
-    <ClCompile Include="common\mmodel.c" />
-    <ClCompile Include="common\print.c" />
-    <ClCompile Include="common\searchpath.c" />
-    <ClCompile Include="common\segnames.c" />
-    <ClCompile Include="common\shift.c" />
-    <ClCompile Include="common\strbuf.c" />
-    <ClCompile Include="common\strpool.c" />
-    <ClCompile Include="common\strstack.c" />
-    <ClCompile Include="common\strutil.c" />
-    <ClCompile Include="common\target.c" />
-    <ClCompile Include="common\tgttrans.c" />
-    <ClCompile Include="common\version.c" />
-    <ClCompile Include="common\xmalloc.c" />
-    <ClCompile Include="common\xsprintf.c" />
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{71DC1F68-BFC4-478C-8655-C8E9C9654D2B}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>common</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-    <OutDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-    <OutDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_LIB;_DEBUG</PreprocessorDefinitions>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-    </Link>
-    <Lib />
-    <Lib>
-      <OutputFile>$(IntDir)$(TargetName)$(TargetExt)</OutputFile>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_LIB;NDEBUG</PreprocessorDefinitions>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-    </Link>
-    <Lib />
-    <Lib>
-      <OutputFile>$(IntDir)$(TargetName)$(TargetExt)</OutputFile>
-    </Lib>
-  </ItemDefinitionGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/src/common/abend.c b/src/common/abend.c
deleted file mode 100644 (file)
index 278ab1a..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  abend.c                                  */
-/*                                                                           */
-/*                           Abnormal program end                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "cmdline.h"
-#include "abend.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void AbEnd (const char* Format, ...)
-/* Print a message preceeded by the program name and terminate the program
-** with an error exit code.
-*/
-{
-    va_list ap;
-
-    /* Print the program name */
-    fprintf (stderr, "%s: ", ProgName);
-
-    /* Format the given message and print it */
-    va_start (ap, Format);
-    vfprintf (stderr, Format, ap);
-    va_end (ap);
-
-    /* Add a newline */
-    fprintf (stderr, "\n");
-
-    /* Terminate the program */
-    exit (EXIT_FAILURE);
-}
diff --git a/src/common/abend.h b/src/common/abend.h
deleted file mode 100644 (file)
index a232857..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  abend.h                                  */
-/*                                                                           */
-/*                           Abnormal program end                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ABEND_H
-#define ABEND_H
-
-
-
-#include "attrib.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void AbEnd (const char* Format, ...) attribute ((format (printf, 1, 2), noreturn));
-/* Print a message preceeded by the program name and terminate the program
-** with an error exit code.
-*/
-
-
-
-/* End of abend.h */
-
-#endif
diff --git a/src/common/addrsize.c b/src/common/addrsize.c
deleted file mode 100644 (file)
index d4eff22..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                addrsize.c                                 */
-/*                                                                           */
-/*                         Address size definitions                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "addrsize.h"
-#include "strutil.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-const char* AddrSizeToStr (unsigned char AddrSize)
-/* Return the name for an address size specifier */
-{
-    switch (AddrSize) {
-        case ADDR_SIZE_DEFAULT:         return "default";
-        case ADDR_SIZE_ZP:              return "zeropage";
-        case ADDR_SIZE_ABS:             return "absolute";
-        case ADDR_SIZE_FAR:             return "far";
-        case ADDR_SIZE_LONG:            return "long";
-        default:                        return "unknown";
-    }
-}
-
-
-
-unsigned char AddrSizeFromStr (const char* Str)
-/* Return the address size for a given string. Returns ADDR_SIZE_INVALID if
-** the string cannot be mapped to an address size.
-*/
-{
-    static const struct {
-        const char*     Name;
-        unsigned char   AddrSize;
-    } AddrSizeTable[] = {
-        { "abs",        ADDR_SIZE_ABS     },
-        { "absolute",   ADDR_SIZE_ABS     },
-        { "default",    ADDR_SIZE_DEFAULT },
-        { "direct",     ADDR_SIZE_ZP      },
-        { "dword",      ADDR_SIZE_LONG    },
-        { "far",        ADDR_SIZE_FAR     },
-        { "long",       ADDR_SIZE_LONG    },
-        { "near",       ADDR_SIZE_ABS     },
-        { "zeropage",   ADDR_SIZE_ZP      },
-        { "zp",         ADDR_SIZE_ZP      },
-    };
-    unsigned I;
-
-    for (I = 0; I < sizeof (AddrSizeTable) / sizeof (AddrSizeTable[0]); ++I) {
-        if (StrCaseCmp (Str, AddrSizeTable[I].Name) == 0) {
-            /* Found */
-            return AddrSizeTable[I].AddrSize;
-        }
-    }
-
-    /* Not found */
-    return ADDR_SIZE_INVALID;
-}
diff --git a/src/common/addrsize.h b/src/common/addrsize.h
deleted file mode 100644 (file)
index e2e0fa9..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                addrsize.h                                 */
-/*                                                                           */
-/*                         Address size definitions                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ADDRSIZE_H
-#define ADDRSIZE_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-#define ADDR_SIZE_INVALID       0xFF
-#define ADDR_SIZE_DEFAULT       0x00
-#define ADDR_SIZE_ZP            0x01
-#define ADDR_SIZE_ABS           0x02
-#define ADDR_SIZE_FAR           0x03
-#define ADDR_SIZE_LONG          0x04
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-const char* AddrSizeToStr (unsigned char AddrSize);
-/* Return the name for an address size specifier */
-
-unsigned char AddrSizeFromStr (const char* Str);
-/* Return the address size for a given string. Returns ADDR_SIZE_INVALID if
-** the string cannot be mapped to an address size.
-*/
-
-
-
-/* End of addrsize.h */
-
-#endif
diff --git a/src/common/alignment.c b/src/common/alignment.c
deleted file mode 100644 (file)
index c61658a..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                alignment.c                                */
-/*                                                                           */
-/*                             Address aligment                              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2011,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                70794 Filderstadt                                          */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "alignment.h"
-#include "check.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* To factorize an alignment, we will use the following prime table. It lists
-** all primes up to 256, which means we're able to factorize alignments up to
-** 0x10000. This is checked in the code.
-*/
-static const unsigned char Primes[] = {
-      2,   3,   5,   7,  11,  13,  17,  19,  23,  29,
-     31,  37,  41,  43,  47,  53,  59,  61,  67,  71,
-     73,  79,  83,  89,  97, 101, 103, 107, 109, 113,
-    127, 131, 137, 139, 149, 151, 157, 163, 167, 173,
-    179, 181, 191, 193, 197, 199, 211, 223, 227, 229,
-    233, 239, 241, 251
-};
-#define PRIME_COUNT     (sizeof (Primes) / sizeof (Primes[0]))
-#define LAST_PRIME      ((unsigned long)Primes[PRIME_COUNT-1])
-
-
-
-/* A number together with its prime factors */
-typedef struct FactorizedNumber FactorizedNumber;
-struct FactorizedNumber {
-    unsigned long       Value;                  /* The actual number */
-    unsigned long       Remainder;              /* Remaining prime */
-    unsigned char       Powers[PRIME_COUNT];    /* Powers of the factors */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void Initialize (FactorizedNumber* F, unsigned long Value)
-/* Initialize a FactorizedNumber structure */
-{
-    unsigned I;
-
-    F->Value = Value;
-    F->Remainder = 1;
-    for (I = 0; I < PRIME_COUNT; ++I) {
-        F->Powers[I] = 0;
-    }
-}
-
-
-
-static void Factorize (unsigned long Value, FactorizedNumber* F)
-/* Factorize a value between 1 and 0x10000 that is in F */
-{
-    unsigned I;
-
-    /* Initialize F */
-    Initialize (F, Value);
-
-    /* If the value is 1 we're already done */
-    if (Value == 1) {
-        return;
-    }
-
-    /* Be sure we can factorize */
-    CHECK (Value <= MAX_ALIGNMENT && Value != 0);
-
-    /* Handle factor 2 separately for speed */
-    while ((Value & 0x01UL) == 0UL) {
-        ++F->Powers[0];
-        Value >>= 1;
-    }
-
-    /* Factorize. */
-    I = 1;      /* Skip 2 because it was handled above */
-    while (Value > 1) {
-        unsigned long Tmp = Value / Primes[I];
-        if (Tmp * Primes[I] == Value) {
-            /* This is a factor */
-            ++F->Powers[I];
-            Value = Tmp;
-        } else {
-            /* This is not a factor, try next one */
-            if (++I >= PRIME_COUNT) {
-                break;
-            }
-        }
-    }
-
-    /* If something is left, it must be a remaining prime */
-    F->Remainder = Value;
-}
-
-
-
-unsigned long LeastCommonMultiple (unsigned long Left, unsigned long Right)
-/* Calculate the least common multiple of two numbers and return
-** the result.
-*/
-{
-    unsigned I;
-    FactorizedNumber L, R;
-    unsigned long Res;
-
-    /* Factorize the two numbers */
-    Factorize (Left, &L);
-    Factorize (Right, &R);
-
-    /* Generate the result from the factors.
-    ** Some thoughts on range problems: Since the largest numbers we can
-    ** factorize are 2^16 (0x10000), the only numbers that could produce an
-    ** overflow when using 32 bits are exactly these. But the LCM for 2^16
-    ** and 2^16 is 2^16 so this will never happen and we're safe.
-    */
-    Res = L.Remainder * R.Remainder;
-    for (I = 0; I < PRIME_COUNT; ++I) {
-        unsigned P = (L.Powers[I] > R.Powers[I])? L.Powers[I] : R.Powers[I];
-        while (P--) {
-            Res *= Primes[I];
-        }
-    }
-
-    /* Return the calculated lcm */
-    return Res;
-}
-
-
-
-unsigned long AlignAddr (unsigned long Addr, unsigned long Alignment)
-/* Align an address to the given alignment */
-{
-    return ((Addr + Alignment - 1) / Alignment) * Alignment;
-}
-
-
-
-unsigned long AlignCount (unsigned long Addr, unsigned long Alignment)
-/* Calculate how many bytes must be inserted to align Addr to Alignment */
-{
-    return AlignAddr (Addr, Alignment) - Addr;
-}
diff --git a/src/common/alignment.h b/src/common/alignment.h
deleted file mode 100644 (file)
index b77cd41..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                alignment.h                                */
-/*                                                                           */
-/*                             Address aligment                              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2011,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                70794 Filderstadt                                          */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ALIGNMENT_H
-#define ALIGNMENT_H
-
-
-
-/* common */
-#include "inline.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Maximum possible alignment. Beware: To increase the possible alignment it
-** is not enough to bump this value. Check the code inside.
-*/
-#define MAX_ALIGNMENT   0x10000UL
-
-/* The following value marks what is considered a "large alignment" and worth
-** a warning if not suppressed.
-*/
-#define LARGE_ALIGNMENT 0x101UL
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned long LeastCommonMultiple (unsigned long Left, unsigned long Right);
-/* Calculate the least common multiple of two numbers and return
-** the result.
-*/
-
-unsigned long AlignAddr (unsigned long Addr, unsigned long Alignment);
-/* Align an address to the given alignment */
-
-unsigned long AlignCount (unsigned long Addr, unsigned long Alignment);
-/* Calculate how many bytes must be inserted to align Addr to Alignment */
-
-
-
-/* End of alignment.h */
-
-#endif
diff --git a/src/common/assertion.c b/src/common/assertion.c
deleted file mode 100644 (file)
index dbce856..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                assertion.c                                */
-/*                                                                           */
-/*                     Definitions for linker assertions                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include "assertion.h"
-#include "attrib.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int AssertAtLinkTime (AssertAction A attribute ((unused)))
-/* Return true if this assertion should be evaluated at link time */
-{
-    /* Currently all assertions are evaluated at link time */
-    return 1;
-}
-
-
-
-int AssertAtAsmTime (AssertAction A)
-/* Return true if this assertion should be evaluated at assembly time */
-{
-    return (A & 0x02U) == 0;
-}
diff --git a/src/common/assertion.h b/src/common/assertion.h
deleted file mode 100644 (file)
index 7cb425e..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                assertion.h                                */
-/*                                                                           */
-/*                     Definitions for linker assertions                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ASSERTION_H
-#define ASSERTION_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Assertion actions. The second two are linker only (not evaluated by ca65) */
-typedef enum {
-    ASSERT_ACT_WARN     =   0x00U,  /* Print a warning */
-    ASSERT_ACT_ERROR    =   0x01U,  /* Print an error */
-    ASSERT_ACT_LDWARN   =   0x02U,  /* Print a warning (linker only) */
-    ASSERT_ACT_LDERROR  =   0x03U,  /* Print an error (linker only) */
-} AssertAction;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int AssertAtLinkTime (AssertAction A);
-/* Return true if this assertion should be evaluated at link time */
-
-int AssertAtAsmTime (AssertAction A);
-/* Return true if this assertion should be evaluated at assembly time */
-
-
-
-/* End of assertion.h */
-
-#endif
diff --git a/src/common/attrib.h b/src/common/attrib.h
deleted file mode 100644 (file)
index 07e08b2..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 attrib.h                                  */
-/*                                                                           */
-/*                           Handle gcc attributes                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ATTRIB_H
-#define ATTRIB_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-#if defined(__GNUC__)
-#  define attribute(a)  __attribute__(a)
-#else
-#  define attribute(a)
-#endif
-
-
-
-/* End of attrib.h */
-
-#endif
diff --git a/src/common/bitops.c b/src/common/bitops.c
deleted file mode 100644 (file)
index 9eba961..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 bitops.c                                  */
-/*                                                                           */
-/*                           Single bit operations                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include "bitops.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned BitFind (unsigned long Val)
-/* Find the first bit that is set in Val. Val must *not* be zero */
-{
-    unsigned long Mask;
-    unsigned Bit;
-
-    /* Search for the bits */
-    Mask = 1;
-    Bit  = 0;
-    while (1) {
-        if (Val & Mask) {
-            return Bit;
-        }
-        Mask <<= 1;
-        ++Bit;
-    }
-}
-
-
-
-void BitSet (void* Data, unsigned Bit)
-/* Set a bit in a char array */
-{
-    /* Make a char pointer */
-    unsigned char* D = Data;
-
-    /* Set the bit */
-    D [Bit / 8] |= 0x01 << (Bit % 8);
-}
-
-
-
-void BitReset (void* Data, unsigned Bit)
-/* Reset a bit in a char array */
-{
-    /* Make a char pointer */
-    unsigned char* D = Data;
-
-    /* Set the bit */
-    D [Bit / 8] &= ~(0x01 << (Bit % 8));
-}
-
-
-
-int BitIsSet (void* Data, unsigned Bit)
-/* Check if a bit is set in a char array */
-{
-    /* Make a char pointer */
-    unsigned char* D = Data;
-
-    /* Check the bit state */
-    return (D [Bit / 8] & (0x01 << (Bit % 8))) != 0;
-}
-
-
-
-int BitIsReset (void* Data, unsigned Bit)
-/* Check if a bit is reset in a char array */
-{
-    /* Make a char pointer */
-    unsigned char* D = Data;
-
-    /* Check the bit state */
-    return (D [Bit / 8] & (0x01 << (Bit % 8))) == 0;
-}
-
-
-
-void BitMerge (void* Target, const void* Source, unsigned Size)
-/* Merge the bits of two char arrays (that is, do an or for the full array) */
-{
-    /* Make char arrays */
-    unsigned char*       T = Target;
-    const unsigned char* S = Source;
-
-    /* Merge the arrays */
-    while (Size--) {
-        *T++ |= *S++;
-    }
-}
diff --git a/src/common/bitops.h b/src/common/bitops.h
deleted file mode 100644 (file)
index 71186ba..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 bitops.h                                  */
-/*                                                                           */
-/*                           Single bit operations                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef BITOPS_H
-#define BITOPS_H
-
-
-
-#include "attrib.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned BitFind (unsigned long Val) attribute ((const));
-/* Find the first bit that is set in Val. Val must *not* be zero */
-
-void BitSet (void* Data, unsigned Bit);
-/* Set a bit in a char array */
-
-void BitReset (void* Data, unsigned Bit);
-/* Reset a bit in a char array */
-
-int BitIsSet (void* Data, unsigned Bit) attribute ((const));
-/* Check if a bit is set in a char array */
-
-int BitIsReset (void* Data, unsigned Bit) attribute ((const));
-/* Check if a bit is reset in a char array */
-
-void BitMerge (void* Target, const void* Source, unsigned Size);
-/* Merge the bits of two char arrays (that is, do an or for the full array) */
-
-
-
-/* End of bitops.h */
-
-#endif
diff --git a/src/common/cddefs.h b/src/common/cddefs.h
deleted file mode 100644 (file)
index c44ec7b..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 cddefs.h                                  */
-/*                                                                           */
-/*              Definitions for module constructor/destructors               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2004 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef CDDEFS_H
-#define CDDEFS_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* ConDes types. Count is only 7 because we want to encode 0..count in 3 bits */
-#define CD_TYPE_COUNT   7               /* Number of table types */
-#define CD_TYPE_MIN     0               /* Minimum numeric type value */
-#define CD_TYPE_MAX     6               /* Maximum numeric type value */
-
-/* ConDes priorities, zero is no valid priority and used to mark an empty
-** (missing) decl for this type throughout the code.
-*/
-#define CD_PRIO_NONE    0               /* No priority (no decl) */
-#define CD_PRIO_MIN     1               /* Lowest priority */
-#define CD_PRIO_DEF     7               /* Default priority */
-#define CD_PRIO_MAX     32              /* Highest priority */
-
-/* Predefined types */
-#define CD_TYPE_CON     0               /* Constructor */
-#define CD_TYPE_DES     1               /* Destructor */
-#define CD_TYPE_INT     2               /* Interruptor */
-
-/* When part of an export in an object file, type and priority are encoded in
-** one byte. In this case, the following macros access the fields:
-*/
-#define CD_GET_TYPE(v)          (((v) >> 5) & 0x07)
-#define CD_GET_PRIO(v)          (((v) & 0x1F) + 1)
-
-/* Macro to build the byte value: */
-#define CD_BUILD(type,prio)     ((((type) & 0x07) << 5) | (((prio) - 1) & 0x1F))
-
-
-
-/* End of cddefs.h */
-
-#endif
diff --git a/src/common/chartype.c b/src/common/chartype.c
deleted file mode 100644 (file)
index b55fcfb..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                chartype.c                                 */
-/*                                                                           */
-/*                    Character classification functions                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2004 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include "chartype.h"
-
-
-
-/* This module contains replacements for functions in ctype.h besides other
-** functions. There is a problem with using ctype.h directly:
-** The parameter must have a value of "unsigned char" or EOF.
-** So on platforms where a char is signed, this may give problems or at
-** least warnings. The wrapper functions below will have an "char" parameter
-** but handle it correctly. They will NOT work for EOF, but this is not a
-** problem, since EOF is always handled separately.
-*/
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int IsAlpha (char C)
-/* Check for a letter */
-{
-    return (C >= 'a' && C <= 'z') || (C >= 'A' && C <= 'Z');
-}
-
-
-
-int IsAlNum (char C)
-/* Check for letter or digit */
-{
-    return (C >= 'a' && C <= 'z') || (C >= 'A' && C <= 'Z') || (C >= '0' && C <= '9');
-}
-
-
-
-int IsAscii (char C)
-/* Check for an ASCII character */
-{
-    return (C & ~0x7F) == 0;
-}
-
-
-
-int IsBlank (char C)
-/* Check for a space or tab */
-{
-    return (C == ' ' || C == '\t');
-}
-
-
-
-int IsSpace (char C)
-/* Check for any white space characters */
-{
-    return (C == ' ' || C == '\n' || C == '\r' || C == '\t' || C == '\v' || C == '\f');
-}
-
-
-
-int IsDigit (char C)
-/* Check for a digit */
-{
-    return (C >= '0' && C <= '9');
-}
-
-
-
-int IsLower (char C)
-/* Check for a lower case char */
-{
-    return (C >= 'a' && C <= 'z');
-}
-
-
-
-int IsUpper (char C)
-/* Check for upper case characters */
-{
-    return (C >= 'A' && C <= 'Z');
-}
-
-
-
-int IsBDigit (char C)
-/* Check for binary digits (0/1) */
-{
-    return (C == '0' || C == '1');
-}
-
-
-
-int IsODigit (char C)
-/* Check for octal digits (0..7) */
-{
-    return (C >= '0' && C <= '7');
-}
-
-
-
-int IsXDigit (char C)
-/* Check for hexadecimal digits */
-{
-    return (C >= 'a' && C <= 'f') || (C >= 'A' && C <= 'F') || (C >= '0' && C <= '9');
-}
-
-
-
-int IsQuote (char C)
-/* Check for a single or double quote */
-{
-    return (C == '"' || C == '\'');
-}
diff --git a/src/common/chartype.h b/src/common/chartype.h
deleted file mode 100644 (file)
index 5278dbc..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                chartype.h                                 */
-/*                                                                           */
-/*                    Character classification functions                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2004 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef CHARTYPE_H
-#define CHARTYPE_H
-
-
-
-#include <ctype.h>
-
-/* common */
-#include "inline.h"
-
-
-/* This module contains replacements for functions in ctype.h besides other
-** functions. There is a problem with using ctype.h directly:
-** The parameter must have a value of "unsigned char" or EOF.
-** So on platforms where a char is signed, this may give problems or at
-** least warnings. The wrapper functions below will have an "char" parameter
-** but handle it correctly. They will NOT work for EOF, but this is not a
-** problem, since EOF is always handled separately.
-*/
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int IsAlpha (char C);
-/* Check for a letter */
-
-int IsAlNum (char C);
-/* Check for letter or digit */
-
-int IsAscii (char C);
-/* Check for an ASCII character */
-
-int IsBlank (char C);
-/* Check for a space or tab */
-
-#if defined(HAVE_INLINE)
-INLINE int IsControl (char C)
-/* Check for control chars */
-{
-    return iscntrl ((unsigned char) C);
-}
-#else
-#  define IsControl(C)          iscntrl (C)
-#endif
-
-int IsSpace (char C);
-/* Check for any white space characters */
-
-int IsDigit (char C);
-/* Check for a digit */
-
-int IsLower (char C);
-/* Check for a lower case char */
-
-int IsUpper (char C);
-/* Check for upper case characters */
-
-int IsBDigit (char C);
-/* Check for binary digits (0/1) */
-
-int IsODigit (char C);
-/* Check for octal digits (0..7) */
-
-int IsXDigit (char C);
-/* Check for hexadecimal digits */
-
-int IsQuote (char C);
-/* Check for a single or double quote */
-
-
-
-/* End of chartype.h */
-
-#endif
diff --git a/src/common/check.c b/src/common/check.c
deleted file mode 100644 (file)
index c6c5d2d..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  check.c                                  */
-/*                                                                           */
-/*                            Assert like macros                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2001 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-
-#include "abend.h"
-#include "check.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Predefined messages */
-const char* MsgInternalError    = "Internal error: ";
-const char* MsgPrecondition     = "Precondition violated: ";
-const char* MsgCheckFailed      = "Check failed: ";
-const char* MsgProgramAborted   = "Program aborted: ";
-
-
-
-static void DefaultCheckFailed (const char* msg, const char* cond,
-                                const char* file, unsigned line)
-                                attribute ((noreturn));
-
-void (*CheckFailed) (const char* Msg, const char* Cond,
-                     const char* File, unsigned Line) attribute ((noreturn))
-                = DefaultCheckFailed;
-/* Function pointer that is called from check if the condition code is true. */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void DefaultCheckFailed (const char* Msg, const char* Cond,
-                                const char* File, unsigned Line)
-{
-    /* Output a diagnostic and abort */
-    AbEnd ("%s%s, file `%s', line %u", Msg, Cond, File, Line);
-}
diff --git a/src/common/check.h b/src/common/check.h
deleted file mode 100644 (file)
index 738fa26..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  check.h                                  */
-/*                                                                           */
-/*                            Assert like macros                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2001 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef CHECK_H
-#define CHECK_H
-
-
-
-#include "attrib.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-extern const char* MsgInternalError;            /* "Internal error: "        */
-extern const char* MsgPrecondition;             /* "Precondition violated: " */
-extern const char* MsgCheckFailed;              /* "Check failed: "          */
-extern const char* MsgProgramAborted;           /* "Program aborted: "       */
-
-
-
-extern void (*CheckFailed) (const char* Msg, const char* Cond,
-                            const char* File, unsigned Line)
-                            attribute ((noreturn));
-/* Function pointer that is called from check if the condition code is true. */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-#define FAIL(s) CheckFailed (MsgInternalError, s, __FILE__, __LINE__)
-/* Fail macro. Is used if something evil happens, calls checkfailed directly. */
-
-#define ABORT(s) CheckFailed (MsgProgramAborted, s, __FILE__, __LINE__)
-/* Use this one instead of FAIL if there is no internal program error but an
-** error condition that is caused by the user or operating system (FAIL and
-** ABORT are essentially the same but the message differs).
-*/
-
-#define PRECONDITION(c) \
-    ((void) ((c)? 0 : (CheckFailed (MsgPrecondition, #c, __FILE__, __LINE__), 0)))
-
-#define CHECK(c)        \
-    ((void) ((c)? 0 : (CheckFailed (MsgCheckFailed, #c, __FILE__, __LINE__), 0)))
-
-
-
-/* End of check.h */
-
-#endif
diff --git a/src/common/cmdline.c b/src/common/cmdline.c
deleted file mode 100644 (file)
index 0f66229..0000000
+++ /dev/null
@@ -1,309 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 cmdline.c                                 */
-/*                                                                           */
-/*                 Helper functions for command line parsing                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "abend.h"
-#include "chartype.h"
-#include "fname.h"
-#include "xmalloc.h"
-#include "cmdline.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Program name - is set after call to InitCmdLine */
-const char* ProgName;
-
-/* The program argument vector */
-char** ArgVec     = 0;
-unsigned ArgCount = 0;
-
-/* Struct to pass the command line */
-typedef struct {
-    char**      Vec;            /* The argument vector */
-    unsigned    Count;          /* Actual number of arguments */
-    unsigned    Size;           /* Number of argument allocated */
-} CmdLine;
-
-
-
-/*****************************************************************************/
-/*                             Helper functions                              */
-/*****************************************************************************/
-
-
-
-static void NewCmdLine (CmdLine* L)
-/* Initialize a CmdLine struct */
-{
-    /* Initialize the struct */
-    L->Size    = 8;
-    L->Count   = 0;
-    L->Vec     = xmalloc (L->Size * sizeof (L->Vec[0]));
-}
-
-
-
-static void AddArg (CmdLine* L, char* Arg)
-/* Add one argument to the list */
-{
-    if (L->Size <= L->Count) {
-        /* No space left, reallocate */
-        unsigned NewSize = L->Size * 2;
-        char**   NewVec  = xmalloc (NewSize * sizeof (L->Vec[0]));
-        memcpy (NewVec, L->Vec, L->Count * sizeof (L->Vec[0]));
-        xfree (L->Vec);
-        L->Vec  = NewVec;
-        L->Size = NewSize;
-    }
-
-    /* We have space left, add a copy of the argument */
-    L->Vec[L->Count++] = Arg;
-}
-
-
-
-static void ExpandFile (CmdLine* L, const char* Name)
-/* Add the contents of a file to the command line. Each line is a separate
-** argument with leading and trailing whitespace removed.
-*/
-{
-    char Buf [256];
-
-    /* Try to open the file for reading */
-    FILE* F = fopen (Name, "r");
-    if (F == 0) {
-        AbEnd ("Cannot open \"%s\": %s", Name, strerror (errno));
-    }
-
-    /* File is open, read all lines */
-    while (fgets (Buf, sizeof (Buf), F) != 0) {
-
-        /* Get a pointer to the buffer */
-        const char* B = Buf;
-
-        /* Skip trailing whitespace (this will also kill the newline that is
-        ** appended by fgets().
-        */
-        unsigned Len = strlen (Buf);
-        while (Len > 0 && IsSpace (Buf [Len-1])) {
-            --Len;
-        }
-        Buf [Len] = '\0';
-
-        /* Skip leading spaces */
-        while (IsSpace (*B)) {
-            ++B;
-        }
-
-        /* Skip empty lines to work around problems with some editors */
-        if (*B == '\0') {
-            continue;
-        }
-
-        /* Add anything not empty to the command line */
-        AddArg (L, xstrdup (B));
-
-    }
-
-    /* Close the file, ignore errors here since we had the file open for
-    ** reading only.
-    */
-    (void) fclose (F);
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void InitCmdLine (int* aArgCount, char*** aArgVec, const char* aProgName)
-/* Initialize command line parsing. aArgVec is the argument array terminated by
-** a NULL pointer (as usual), ArgCount is the number of valid arguments in the
-** array. Both arguments are remembered in static storage.
-*/
-{
-    CmdLine     L;
-    int         I;
-
-    /* Get the program name from argv[0] but strip a path */
-    if ((*aArgVec)[0] == 0) {
-        /* Use the default name given */
-        ProgName = aProgName;
-    } else {
-        /* Strip a path */
-        ProgName = FindName ((*aArgVec)[0]);
-        if (ProgName[0] == '\0') {
-            /* Use the default */
-            ProgName = aProgName;
-        }
-    }
-
-    /* Make a CmdLine struct */
-    NewCmdLine (&L);
-
-    /* Walk over the parameters and add them to the CmdLine struct. Add a
-    ** special handling for arguments preceeded by the '@' sign - these are
-    ** actually files containing arguments.
-    */
-    for (I = 0; I <= *aArgCount; ++I) {
-
-        /* Get the next argument */
-        char* Arg = (*aArgVec)[I];
-
-        /* Is this a file argument? */
-        if (Arg && Arg[0] == '@') {
-
-            /* Expand the file */
-            ExpandFile (&L, Arg+1);
-
-        } else {
-
-            /* No file, just add a copy */
-            AddArg (&L, Arg);
-
-        }
-    }
-
-    /* Store the new argument list in a safe place... */
-    ArgCount = L.Count - 1;
-    ArgVec   = L.Vec;
-
-    /* ...and pass back the changed data also */
-    *aArgCount = L.Count - 1;
-    *aArgVec   = L.Vec;
-}
-
-
-
-void UnknownOption (const char* Opt)
-/* Print an error about an unknown option and die. */
-{
-    AbEnd ("Unknown option: %s", Opt);
-}
-
-
-
-void NeedArg (const char* Opt)
-/* Print an error about a missing option argument and exit. */
-{
-    AbEnd ("Option requires an argument: %s", Opt);
-}
-
-
-
-void InvArg (const char* Opt, const char* Arg)
-/* Print an error about an invalid option argument and exit. */
-{
-    AbEnd ("Invalid argument for %s: `%s'", Opt, Arg);
-}
-
-
-
-void InvDef (const char* Def)
-/* Print an error about an invalid definition and die */
-{
-    AbEnd ("Invalid definition: `%s'", Def);
-}
-
-
-
-const char* GetArg (unsigned* ArgNum, unsigned Len)
-/* Get an argument for a short option. The argument may be appended to the
-** option itself or may be separate. Len is the length of the option string.
-*/
-{
-    const char* Arg = ArgVec[*ArgNum];
-    if (Arg[Len] != '\0') {
-        /* Argument appended */
-        return Arg + Len;
-    } else {
-        /* Separate argument */
-        Arg = ArgVec[*ArgNum + 1];
-        if (Arg == 0) {
-            /* End of arguments */
-            NeedArg (ArgVec[*ArgNum]);
-        }
-        ++(*ArgNum);
-        return Arg;
-    }
-}
-
-
-
-void LongOption (unsigned* ArgNum, const LongOpt* OptTab, unsigned OptCount)
-/* Handle a long command line option */
-{
-    /* Get the option and the argument (which may be zero) */
-    const char* Opt = ArgVec[*ArgNum];
-
-    /* Search the table for a match */
-    while (OptCount) {
-        if (strcmp (Opt, OptTab->Option) == 0) {
-            /* Found, call the function */
-            if (OptTab->ArgCount > 0) {
-                /* We need an argument, check if we have one */
-                const char* Arg = ArgVec[++(*ArgNum)];
-                if (Arg == 0) {
-                    NeedArg (Opt);
-                }
-                OptTab->Func (Opt, Arg);
-            } else {
-                OptTab->Func (Opt, 0);
-            }
-            /* Done */
-            return;
-        }
-
-        /* Next table entry */
-        --OptCount;
-        ++OptTab;
-    }
-
-    /* Invalid option */
-    UnknownOption (Opt);
-}
diff --git a/src/common/cmdline.h b/src/common/cmdline.h
deleted file mode 100644 (file)
index 1caf0cf..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 cmdline.h                                 */
-/*                                                                           */
-/*                 Helper functions for command line parsing                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef CMDLINE_H
-#define CMDLINE_H
-
-
-
-#include "attrib.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Program name - is set after call to InitCmdLine */
-extern const char* ProgName;
-
-/* The program argument vector */
-extern char** ArgVec;
-extern unsigned ArgCount;
-
-/* Structure defining a long option */
-typedef struct LongOpt  LongOpt;
-struct LongOpt {
-    const char* Option;
-    unsigned    ArgCount;
-    void        (*Func) (const char* Opt, const char* Arg);
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void InitCmdLine (int* aArgCount, char*** aArgVec, const char* aProgName);
-/* Initialize command line parsing. aArgVec is the argument array terminated by
-** a NULL pointer (as usual), ArgCount is the number of valid arguments in the
-** array. Both arguments are remembered in static storage.
-*/
-
-void UnknownOption (const char* Opt) attribute ((noreturn));
-/* Print an error about an unknown option and die. */
-
-void NeedArg (const char* Opt) attribute ((noreturn));
-/* Print an error about a missing option argument and exit. */
-
-void InvArg (const char* Opt, const char* Arg) attribute ((noreturn));
-/* Print an error about an invalid option argument and exit. */
-
-void InvDef (const char* Def) attribute ((noreturn));
-/* Print an error about an invalid definition and die */
-
-const char* GetArg (unsigned* ArgNum, unsigned Len);
-/* Get an argument for a short option. The argument may be appended to the
-** option itself or may be separate. Len is the length of the option string.
-*/
-
-void LongOption (unsigned* ArgNum, const LongOpt* OptTab, unsigned OptCount);
-/* Handle a long command line option */
-
-
-
-/* End of cmdline.h */
-
-#endif
diff --git a/src/common/coll.c b/src/common/coll.c
deleted file mode 100644 (file)
index aa2aa64..0000000
+++ /dev/null
@@ -1,506 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  coll.c                                   */
-/*                                                                           */
-/*                        Collection (dynamic array)                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-#include <string.h>
-
-/* common */
-#include "check.h"
-#include "xmalloc.h"
-
-/* cc65 */
-#include "coll.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* An empty collection */
-const Collection EmptyCollection = STATIC_COLLECTION_INITIALIZER;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Collection* InitCollection (Collection* C)
-/* Initialize a collection and return it. */
-{
-    /* Intialize the fields. */
-    C->Count = 0;
-    C->Size  = 0;
-    C->Items = 0;
-
-    /* Return the new struct */
-    return C;
-}
-
-
-
-void DoneCollection (Collection* C)
-/* Free the data for a collection. This will not free the data contained in
-** the collection.
-*/
-{
-    /* Free the pointer array */
-    xfree (C->Items);
-}
-
-
-
-Collection* NewCollection (void)
-/* Create and return a new collection with the given initial size */
-{
-    /* Allocate memory, intialize the collection and return it */
-    return InitCollection (xmalloc (sizeof (Collection)));
-}
-
-
-
-void FreeCollection (Collection* C)
-/* Free a collection */
-{
-    /* Free the data */
-    DoneCollection (C);
-
-    /* Free the structure itself */
-    xfree (C);
-}
-
-
-
-void CollGrow (Collection* C, unsigned Size)
-/* Grow the collection C so it is able to hold Size items without a resize
-** being necessary. This can be called for performance reasons if the number
-** of items to be placed in the collection is known in advance.
-*/
-{
-    void** NewItems;
-
-    /* Ignore the call if the collection is already large enough */
-    if (Size <= C->Size) {
-        return;
-    }
-
-    /* Grow the collection */
-    C->Size = Size;
-    NewItems = xmalloc (C->Size * sizeof (void*));
-    memcpy (NewItems, C->Items, C->Count * sizeof (void*));
-    xfree (C->Items);
-    C->Items = NewItems;
-}
-
-
-
-void CollInsert (Collection* C, void* Item, unsigned Index)
-/* Insert the data at the given position in the collection */
-{
-    /* Check for invalid indices */
-    PRECONDITION (Index <= C->Count);
-
-    /* Grow the array if necessary */
-    if (C->Count >= C->Size) {
-        /* Must grow */
-        CollGrow (C, (C->Size == 0)? 4 : C->Size * 2);
-    }
-
-    /* Move the existing elements if needed */
-    if (C->Count != Index) {
-        memmove (C->Items+Index+1, C->Items+Index, (C->Count-Index) * sizeof (void*));
-    }
-    ++C->Count;
-
-    /* Store the new item */
-    C->Items[Index] = Item;
-}
-
-
-
-#if !defined(HAVE_INLINE)
-void CollAppend (Collection* C, void* Item)
-/* Append an item to the end of the collection */
-{
-    /* Insert the item at the end of the current list */
-    CollInsert (C, Item, C->Count);
-}                      
-#endif
-
-
-
-#if !defined(HAVE_INLINE)
-void* CollAt (const Collection* C, unsigned Index)
-/* Return the item at the given index */
-{
-    /* Check the index */
-    PRECONDITION (Index < C->Count);
-
-    /* Return the element */
-    return C->Items[Index];
-}
-#endif
-
-
-
-#if !defined(HAVE_INLINE)
-const void* CollConstAt (const Collection* C, unsigned Index)
-/* Return the item at the given index */
-{
-    /* Check the index */
-    PRECONDITION (Index < C->Count);
-
-    /* Return the element */
-    return C->Items[Index];
-}
-#endif
-
-
-
-#if !defined(HAVE_INLINE)
-void* CollLast (Collection* C)
-/* Return the last item in a collection */
-{
-    /* We must have at least one entry */
-    PRECONDITION (C->Count > 0);
-
-    /* Return the element */
-    return C->Items[C->Count-1];
-}
-#endif
-
-
-
-#if !defined(HAVE_INLINE)
-const void* CollConstLast (const Collection* C)
-/* Return the last item in a collection */
-{
-    /* We must have at least one entry */
-    PRECONDITION (C->Count > 0);
-
-    /* Return the element */
-    return C->Items[C->Count-1];
-}
-#endif
-
-
-
-#if !defined(HAVE_INLINE)
-void* CollPop (Collection* C)
-/* Remove the last segment from the stack and return it. Calls FAIL if the
-** collection is empty.
-*/
-{
-    /* We must have at least one entry */
-    PRECONDITION (C->Count > 0);
-
-    /* Return the element */
-    return C->Items[--C->Count];
-}
-#endif
-
-
-
-int CollIndex (Collection* C, const void* Item)
-/* Return the index of the given item in the collection. Return -1 if the
-** item was not found in the collection.
-*/
-{
-    /* Linear search */
-    unsigned I;
-    for (I = 0; I < C->Count; ++I) {
-        if (Item == C->Items[I]) {
-            /* Found */
-            return (int)I;
-        }
-    }
-
-    /* Not found */
-    return -1;
-}
-
-
-
-void CollDelete (Collection* C, unsigned Index)
-/* Remove the item with the given index from the collection. This will not
-** free the item itself, just the pointer. All items with higher indices
-** will get moved to a lower position.
-*/
-{
-    /* Check the index */
-    PRECONDITION (Index < C->Count);
-
-    /* Remove the item pointer */
-    --C->Count;
-    memmove (C->Items+Index, C->Items+Index+1, (C->Count-Index) * sizeof (void*));
-}
-
-
-
-void CollDeleteItem (Collection* C, const void* Item)
-/* Delete the item pointer from the collection. The item must be in the
-** collection, otherwise FAIL will be called.
-*/
-{
-    /* Get the index of the entry */
-    int Index = CollIndex (C, Item);
-    CHECK (Index >= 0);
-
-    /* Delete the item with this index */
-    --C->Count;
-    memmove (C->Items+Index, C->Items+Index+1, (C->Count-Index) * sizeof (void*));
-}
-
-
-
-#if !defined(HAVE_INLINE)
-void CollReplace (Collection* C, void* Item, unsigned Index)
-/* Replace the item at the given position. The old item will not be freed,
-** just the pointer will get replaced.
-*/
-{
-    /* Check the index */
-    PRECONDITION (Index < C->Count);
-
-    /* Replace the item pointer */
-    C->Items[Index] = Item;
-}
-#endif
-
-
-
-void CollReplaceExpand (Collection* C, void* Item, unsigned Index)
-/* If Index is a valid index for the collection, replace the item at this
-** position by the one passed. If the collection is too small, expand it,
-** filling unused pointers with NULL, then add the new item at the given
-** position.
-*/
-{
-    if (Index < C->Count) {
-        /* Collection is already large enough */
-        C->Items[Index] = Item;
-    } else {
-        /* Must expand the collection */
-        unsigned Size = C->Size;
-        if (Size == 0) {
-            Size = 4;
-        }
-        while (Index >= Size) {
-            Size *= 2;
-        }
-        CollGrow (C, Size);
-
-        /* Fill up unused slots with NULL */
-        while (C->Count < Index) {
-            C->Items[C->Count++] = 0;
-        }
-
-        /* Fill in the item */
-        C->Items[C->Count++] = Item;
-    }
-}
-
-
-
-void CollMove (Collection* C, unsigned OldIndex, unsigned NewIndex)
-/* Move an item from one position in the collection to another. OldIndex
-** is the current position of the item, NewIndex is the new index after
-** the function has done it's work. Existing entries with indices NewIndex
-** and up are moved one position upwards.
-*/
-{
-    /* Get the item and remove it from the collection */
-    void* Item = CollAt (C, OldIndex);
-    CollDelete (C, OldIndex);
-
-    /* Correct NewIndex if needed */
-    if (NewIndex >= OldIndex) {
-        /* Position has changed with removal */
-        --NewIndex;
-    }
-
-    /* Now insert it at the new position */
-    CollInsert (C, Item, NewIndex);
-}
-
-
-
-void CollMoveMultiple (Collection* C, unsigned Start, unsigned Count, unsigned Target)
-/* Move a range of items from one position to another. Start is the index
-** of the first item to move, Count is the number of items and Target is
-** the index of the target item. The item with the index Start will later
-** have the index Target. All items with indices Target and above are moved
-** to higher indices.
-*/
-{
-    void** TmpItems;
-    unsigned Bytes;
-
-    /* Check the range */
-    PRECONDITION (Start < C->Count && Start + Count <= C->Count && Target <= C->Count);
-
-    /* Check for trivial parameters */
-    if (Count == 0 || Start == Target) {
-        return;
-    }
-
-    /* Calculate the raw memory space used by the items to move */
-    Bytes = Count * sizeof (void*);
-
-    /* Allocate temporary storage for the items */
-    TmpItems = xmalloc (Bytes);
-
-    /* Copy the items we have to move to the temporary storage */
-    memcpy (TmpItems, C->Items + Start, Bytes);
-
-    /* Check if the range has to be moved upwards or downwards. Move the
-    ** existing items to their final location, so that the space needed
-    ** for the items now in temporary storage is unoccupied.
-    */
-    if (Target < Start) {
-
-        /* Move downwards */
-        unsigned BytesToMove = (Start - Target) * sizeof (void*);
-        memmove (C->Items+Target+Count, C->Items+Target, BytesToMove);
-
-    } else if (Target < Start + Count) {
-
-        /* Target is inside range */
-        FAIL ("Not supported");
-
-    } else {
-
-        /* Move upwards */
-        unsigned ItemsToMove = (Target - Start - Count);
-        unsigned BytesToMove = ItemsToMove * sizeof (void*);
-        memmove (C->Items+Start, C->Items+Target-ItemsToMove, BytesToMove);
-
-        /* Adjust the target index */
-        Target -= Count;
-    }
-
-    /* Move the old items to their final location */
-    memcpy (C->Items + Target, TmpItems, Bytes);
-
-    /* Delete the temporary item space */
-    xfree (TmpItems);
-}
-
-
-
-static void QuickSort (Collection* C, int Lo, int Hi,
-                       int (*Compare) (void*, const void*, const void*),
-                       void* Data)
-/* Internal recursive sort function. */
-{
-    /* Get a pointer to the items */
-    void** Items = C->Items;
-
-    /* Quicksort */
-    while (Hi > Lo) {
-        int I = Lo + 1;
-        int J = Hi;
-        while (I <= J) {
-            while (I <= J && Compare (Data, Items[Lo], Items[I]) >= 0) {
-                ++I;
-            }
-            while (I <= J && Compare (Data, Items[Lo], Items[J]) < 0) {
-                --J;
-            }
-            if (I <= J) {
-                /* Swap I and J */
-                void* Tmp = Items[I];
-                Items[I]  = Items[J];
-                Items[J]  = Tmp;
-                ++I;
-                --J;
-            }
-        }
-        if (J != Lo) {
-            /* Swap J and Lo */
-            void* Tmp = Items[J];
-            Items[J]  = Items[Lo];
-            Items[Lo] = Tmp;
-        }
-        if (J > (Hi + Lo) / 2) {
-            QuickSort (C, J + 1, Hi, Compare, Data);
-            Hi = J - 1;
-        } else {
-            QuickSort (C, Lo, J - 1, Compare, Data);
-            Lo = J + 1;
-        }
-    }
-}
-
-
-
-void CollTransfer (Collection* Dest, const Collection* Source)
-/* Transfer all items from Source to Dest. Anything already in Dest is left
-** untouched. The items in Source are not changed and are therefore in both
-** Collections on return.
-*/
-{
-    /* Be sure there's enough room in Dest */
-    CollGrow (Dest, Dest->Count + Source->Count);
-
-    /* Copy the items */
-    memcpy (Dest->Items + Dest->Count,
-            Source->Items,
-            Source->Count * sizeof (Source->Items[0]));
-
-    /* Bump the counter */
-    Dest->Count += Source->Count;
-}
-
-
-
-void CollSort (Collection* C,
-               int (*Compare) (void*, const void*, const void*),
-               void* Data)
-/* Sort the collection using the given compare function. The data pointer is
-** passed as *first* element to the compare function, it's not used by the
-** sort function itself. The other two pointer passed to the Compare function
-** are pointers to objects.
-*/
-{
-    if (C->Count > 1) {
-        QuickSort (C, 0, C->Count-1, Compare, Data);
-    }
-}
diff --git a/src/common/coll.h b/src/common/coll.h
deleted file mode 100644 (file)
index 5114862..0000000
+++ /dev/null
@@ -1,303 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  coll.h                                   */
-/*                                                                           */
-/*                        Collection (dynamic array)                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef COLL_H
-#define COLL_H
-
-
-
-/* common */
-#include "attrib.h"
-#include "check.h"
-#include "inline.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* An array of pointers that grows if needed */
-typedef struct Collection Collection;
-struct Collection {
-    unsigned            Count;          /* Number of items in the list */
-    unsigned            Size;           /* Size of allocated array */
-    void**              Items;          /* Array with dynamic size */
-};
-
-/* An empty collection */
-extern const Collection EmptyCollection;
-
-/* Initializer for static collections */
-#define STATIC_COLLECTION_INITIALIZER   { 0, 0, 0 }
-
-/* Initializer for auto collections */
-#define AUTO_COLLECTION_INITIALIZER     EmptyCollection
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Collection* InitCollection (Collection* C);
-/* Initialize a collection and return it. */
-
-void DoneCollection (Collection* C);
-/* Free the data for a collection. This will not free the data contained in
-** the collection.
-*/
-
-Collection* NewCollection (void);
-/* Create and return a new collection */
-
-void FreeCollection (Collection* C);
-/* Free a collection */
-
-void CollGrow (Collection* C, unsigned Size);
-/* Grow the collection C so it is able to hold Size items without a resize
-** being necessary. This can be called for performance reasons if the number
-** of items to be placed in the collection is known in advance.
-*/
-
-#if defined(HAVE_INLINE)
-INLINE unsigned CollCount (const Collection* C)
-/* Return the number of items in the collection */
-{
-    return C->Count;
-}
-#else
-#  define CollCount(C)  (C)->Count
-#endif
-
-void CollInsert (Collection* C, void* Item, unsigned Index);
-/* Insert the data at the given position in the collection */
-
-#if defined(HAVE_INLINE)
-INLINE void CollAppend (Collection* C, void* Item)
-/* Append an item to the end of the collection */
-{
-    /* Insert the item at the end of the current list */
-    CollInsert (C, Item, C->Count);
-}
-#else
-void CollAppend (Collection* C, void* Item);
-/* Append an item to the end of the collection */
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void* CollAt (const Collection* C, unsigned Index)
-/* Return the item at the given index */
-{
-    /* Check the index */
-    PRECONDITION (Index < C->Count);
-
-    /* Return the element */
-    return C->Items[Index];
-}
-#else
-void* CollAt (const Collection* C, unsigned Index);
-/* Return the item at the given index */
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void* CollAtUnchecked (const Collection* C, unsigned Index)
-/* Return the item at the given index */
-{
-    /* Return the element */
-    return C->Items[Index];
-}
-#else
-#  define CollAtUnchecked(C, Index)     ((C)->Items[(Index)])
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE const void* CollConstAt (const Collection* C, unsigned Index)
-/* Return the item at the given index */
-{
-    /* Check the index */
-    PRECONDITION (Index < C->Count);
-
-    /* Return the element */
-    return C->Items[Index];
-}
-#else
-const void* CollConstAt (const Collection* C, unsigned Index);
-/* Return the item at the given index */
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void* CollLast (Collection* C)
-/* Return the last item in a collection */
-{
-    /* We must have at least one entry */
-    PRECONDITION (C->Count > 0);
-
-    /* Return the element */
-    return C->Items[C->Count-1];
-}
-#else
-void* CollLast (Collection* C);
-/* Return the last item in a collection */
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE const void* CollConstLast (const Collection* C)
-/* Return the last item in a collection */
-{
-    /* We must have at least one entry */
-    PRECONDITION (C->Count > 0);
-
-    /* Return the element */
-    return C->Items[C->Count-1];
-}
-#else
-const void* CollConstLast (const Collection* C);
-/* Return the last item in a collection */
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void* CollPop (Collection* C)
-/* Remove the last segment from the stack and return it. Calls FAIL if the
-** collection is empty.
-*/
-{
-    /* We must have at least one entry */
-    PRECONDITION (C->Count > 0);
-
-    /* Return the element */
-    return C->Items[--C->Count];
-}
-#else
-void* CollPop (Collection* C);
-/* Remove the last segment from the stack and return it. Calls FAIL if the
-** collection is empty.
-*/
-#endif
-
-int CollIndex (Collection* C, const void* Item);
-/* Return the index of the given item in the collection. Return -1 if the
-** item was not found in the collection.
-*/
-
-void CollDelete (Collection* C, unsigned Index);
-/* Remove the item with the given index from the collection. This will not
-** free the item itself, just the pointer. All items with higher indices
-** will get moved to a lower position.
-*/
-
-void CollDeleteItem (Collection* C, const void* Item);
-/* Delete the item pointer from the collection. The item must be in the
-** collection, otherwise FAIL will be called.
-*/
-
-#if defined(HAVE_INLINE)
-INLINE void CollDeleteAll (Collection* C)
-/* Delete all items from the given collection. This will not free the items
-** itself, it will only remove the pointers.
-*/
-{
-    /* This one is easy... */
-    C->Count = 0;
-}
-#else
-#  define CollDeleteAll(C)      ((C)->Count = 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void CollReplace (Collection* C, void* Item, unsigned Index)
-/* Replace the item at the given position. The old item will not be freed,
-** just the pointer will get replaced.
-*/
-{
-    /* Check the index */
-    PRECONDITION (Index < C->Count);
-
-    /* Replace the item pointer */
-    C->Items[Index] = Item;
-}
-#else
-void CollReplace (Collection* C, void* Item, unsigned Index);
-/* Replace the item at the given position. The old item will not be freed,
-** just the pointer will get replaced.
-*/
-#endif
-
-void CollReplaceExpand (Collection* C, void* Item, unsigned Index);
-/* If Index is a valid index for the collection, replace the item at this
-** position by the one passed. If the collection is too small, expand it,
-** filling unused pointers with NULL, then add the new item at the given
-** position.
-*/
-
-void CollMove (Collection* C, unsigned OldIndex, unsigned NewIndex);
-/* Move an item from one position in the collection to another. OldIndex
-** is the current position of the item, NewIndex is the new index after
-** the function has done it's work. Existing entries with indices NewIndex
-** and up are moved one position upwards.
-*/
-
-void CollMoveMultiple (Collection* C, unsigned Start, unsigned Count, unsigned Target);
-/* Move a range of items from one position to another. Start is the index
-** of the first item to move, Count is the number of items and Target is
-** the index of the target item. The item with the index Start will later
-** have the index Target. All items with indices Target and above are moved
-** to higher indices.
-*/
-
-void CollTransfer (Collection* Dest, const Collection* Source);
-/* Transfer all items from Source to Dest. Anything already in Dest is left
-** untouched. The items in Source are not changed and are therefore in both
-** Collections on return.
-*/
-
-void CollSort (Collection* C,
-               int (*Compare) (void*, const void*, const void*),
-               void* Data);
-/* Sort the collection using the given compare function. The data pointer is
-** passed as *first* element to the compare function, it's not used by the
-** sort function itself. The other two pointer passed to the Compare function
-** are pointers to objects.
-*/
-
-
-
-/* End of coll.h */
-
-#endif
diff --git a/src/common/cpu.c b/src/common/cpu.c
deleted file mode 100644 (file)
index 142d552..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   cpu.c                                   */
-/*                                                                           */
-/*                            CPU specifications                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "addrsize.h"
-#include "check.h"
-#include "cpu.h"
-#include "strutil.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* CPU used */
-cpu_t CPU = CPU_UNKNOWN;
-
-/* Table with target names */
-const char* CPUNames[CPU_COUNT] = {
-    "none",
-    "6502",
-    "6502X",
-    "65SC02",
-    "65C02",
-    "65816",
-    "sweet16",
-    "huc6280",
-    "m740",
-};
-
-/* Tables with CPU instruction sets */
-const unsigned CPUIsets[CPU_COUNT] = {
-    CPU_ISET_NONE,
-    CPU_ISET_6502,
-    CPU_ISET_6502 | CPU_ISET_6502X,
-    CPU_ISET_6502 | CPU_ISET_65SC02,
-    CPU_ISET_6502 | CPU_ISET_65SC02 | CPU_ISET_65C02,
-    CPU_ISET_6502 | CPU_ISET_65SC02 | CPU_ISET_65C02 | CPU_ISET_65816,
-    CPU_ISET_SWEET16,
-    CPU_ISET_6502 | CPU_ISET_65SC02 | CPU_ISET_65C02 | CPU_ISET_HUC6280,
-    CPU_ISET_6502 | CPU_ISET_M740,
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int ValidAddrSizeForCPU (unsigned char AddrSize)
-/* Check if the given address size is valid for the current CPU */
-{
-    switch (AddrSize) {
-        case ADDR_SIZE_DEFAULT:
-            /* Always supported */
-            return 1;
-
-        case ADDR_SIZE_ZP:
-            /* Not supported by None and Sweet16 */
-            return (CPU != CPU_NONE && CPU != CPU_SWEET16);
-
-        case ADDR_SIZE_ABS:
-            /* Not supported by None */
-            return (CPU != CPU_NONE);
-
-        case ADDR_SIZE_FAR:
-            /* Only supported by 65816 */
-            return (CPU == CPU_65816);
-
-        case ADDR_SIZE_LONG:
-            /* Not supported by any CPU */
-            return 0;
-
-        default:
-            FAIL ("Invalid address size");
-            /* NOTREACHED */
-            return 0;
-    }
-}
-
-
-
-cpu_t FindCPU (const char* Name)
-/* Find a CPU by name and return the target id. CPU_UNKNOWN is returned if
-** the given name is no valid target.
-*/
-{
-    unsigned I;
-
-    /* Check all CPU names */
-    for (I = 0; I < CPU_COUNT; ++I) {
-        if (StrCaseCmp (CPUNames [I], Name) == 0) {
-            return (cpu_t)I;
-        }
-    }
-
-    /* Not found */
-    return CPU_UNKNOWN;
-}
diff --git a/src/common/cpu.h b/src/common/cpu.h
deleted file mode 100644 (file)
index 5bdbdef..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   cpu.h                                   */
-/*                                                                           */
-/*                            CPU specifications                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef CPU_H
-#define CPU_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* CPUs */
-typedef enum {
-    CPU_UNKNOWN = -1,           /* Not specified or invalid target */
-    CPU_NONE,                   /* No CPU - for assembler */
-    CPU_6502,
-    CPU_6502X,                  /* "Extended", that is: with illegal opcodes */
-    CPU_65SC02,
-    CPU_65C02,
-    CPU_65816,
-    CPU_SWEET16,
-    CPU_HUC6280,                /* Used in PC engine */
-    CPU_M740,                   /* Mitsubishi 740 series MCUs */
-    CPU_COUNT                   /* Number of different CPUs */
-} cpu_t;
-
-/* CPU instruction sets */
-enum {
-    CPU_ISET_NONE       = 1 << CPU_NONE,
-    CPU_ISET_6502       = 1 << CPU_6502,
-    CPU_ISET_6502X      = 1 << CPU_6502X,
-    CPU_ISET_65SC02     = 1 << CPU_65SC02,
-    CPU_ISET_65C02      = 1 << CPU_65C02,
-    CPU_ISET_65816      = 1 << CPU_65816,
-    CPU_ISET_SWEET16    = 1 << CPU_SWEET16,
-    CPU_ISET_HUC6280    = 1 << CPU_HUC6280,
-    CPU_ISET_M740       = 1 << CPU_M740,
-};
-
-/* CPU used */
-extern cpu_t CPU;
-
-/* Table with CPU names */
-extern const char* CPUNames[CPU_COUNT];
-
-/* Table with CPU the instruction sets */
-extern const unsigned CPUIsets[CPU_COUNT];
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int ValidAddrSizeForCPU (unsigned char AddrSize);
-/* Check if the given address size is valid for the current CPU */
-
-cpu_t FindCPU (const char* Name);
-/* Find a CPU by name and return the target id. CPU_UNKNOWN is returned if
-** the given name is no valid target.
-*/
-
-
-
-/* End of cpu.h */
-
-#endif
diff --git a/src/common/debugflag.c b/src/common/debugflag.c
deleted file mode 100644 (file)
index 7d2e800..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  debugflag.c                              */
-/*                                                                           */
-/*                               Global debug flag                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-                      
-/* common */
-#include "debugflag.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-unsigned char Debug             = 0;    /* Debug mode */
diff --git a/src/common/debugflag.h b/src/common/debugflag.h
deleted file mode 100644 (file)
index d325a9e..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  debugflag.h                              */
-/*                                                                           */
-/*                               Global debug flag                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-                   
-
-#ifndef DEBUGFLAG_H
-#define DEBUGFLAG_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-extern unsigned char    Debug;                  /* Debug mode */
-
-
-
-/* End of debugflag.h */
-
-#endif
diff --git a/src/common/exprdefs.c b/src/common/exprdefs.c
deleted file mode 100644 (file)
index d9a5adf..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                exprdefs.c                                 */
-/*                                                                           */
-/*                        Expression tree definitions                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-
-#include "abend.h"
-#include "exprdefs.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void InternalDumpExpr (const ExprNode* Expr, const ExprNode* (*ResolveSym) (const struct SymEntry*))
-/* Dump an expression in RPN to stdout */
-{
-    if (Expr == 0) {
-        return;
-    }
-    InternalDumpExpr (Expr->Left, ResolveSym);
-    InternalDumpExpr (Expr->Right, ResolveSym);
-
-    switch (Expr->Op) {
-
-        case EXPR_LITERAL:
-        case EXPR_ULABEL:
-            printf (" $%04lX", Expr->V.IVal);
-            break;
-
-        case EXPR_SYMBOL:
-            printf (" SYM(");
-            if (ResolveSym && (Expr = ResolveSym (Expr->V.Sym)) != 0) {
-                InternalDumpExpr (Expr, ResolveSym);
-            }
-            printf (") ");
-            break;
-
-        case EXPR_SECTION:
-            printf (" SEC");
-            break;
-
-        case EXPR_SEGMENT:
-            printf (" SEG");
-            break;
-
-        case EXPR_MEMAREA:
-            printf (" MEM");
-            break;
-
-        case EXPR_PLUS:
-            printf (" +");
-            break;
-
-        case EXPR_MINUS:
-            printf (" -");
-            break;
-
-        case EXPR_MUL:
-            printf (" *");
-            break;
-
-        case EXPR_DIV:
-            printf (" /");
-            break;
-
-        case EXPR_MOD:
-            printf (" MOD");
-            break;
-
-        case EXPR_OR:
-            printf (" OR");
-            break;
-
-        case EXPR_XOR:
-            printf (" XOR");
-            break;
-
-        case EXPR_AND:
-            printf (" AND");
-            break;
-
-        case EXPR_SHL:
-            printf (" SHL");
-            break;
-
-        case EXPR_SHR:
-            printf (" SHR");
-            break;
-
-        case EXPR_EQ:
-            printf (" =");
-            break;
-
-        case EXPR_NE:
-            printf ("<>");
-            break;
-
-        case EXPR_LT:
-            printf (" <");
-            break;
-
-        case EXPR_GT:
-            printf (" >");
-            break;
-
-        case EXPR_LE:
-            printf (" <=");
-            break;
-
-        case EXPR_GE:
-            printf (" >=");
-            break;
-
-        case EXPR_BOOLAND:
-            printf (" BOOL_AND");
-            break;
-
-        case EXPR_BOOLOR:
-            printf (" BOOL_OR");
-            break;
-
-        case EXPR_BOOLXOR:
-            printf (" BOOL_XOR");
-            break;
-
-        case EXPR_MAX:
-            printf (" MAX");
-            break;
-
-        case EXPR_MIN:
-            printf (" MIN");
-            break;
-
-        case EXPR_UNARY_MINUS:
-            printf (" NEG");
-            break;
-
-        case EXPR_NOT:
-            printf (" ~");
-            break;
-
-        case EXPR_SWAP:
-            printf (" SWAP");
-            break;
-
-        case EXPR_BOOLNOT:
-            printf (" BOOL_NOT");
-            break;
-
-        case EXPR_BANK:
-            printf (" BANK");
-            break;
-
-        case EXPR_BYTE0:
-            printf (" BYTE0");
-            break;
-
-        case EXPR_BYTE1:
-            printf (" BYTE1");
-            break;
-
-        case EXPR_BYTE2:
-            printf (" BYTE2");
-            break;
-
-        case EXPR_BYTE3:
-            printf (" BYTE3");
-            break;
-
-        case EXPR_WORD0:
-            printf (" WORD0");
-            break;
-
-        case EXPR_WORD1:
-            printf (" WORD1");
-            break;
-
-        case EXPR_FARADDR:
-            printf (" FARADDR");
-            break;
-
-        case EXPR_DWORD:
-            printf (" DWORD");
-            break;
-
-        default:
-            AbEnd ("Unknown Op type: %u", Expr->Op);
-
-    }
-}
-
-
-
-void DumpExpr (const ExprNode* Expr, const ExprNode* (*ResolveSym) (const struct SymEntry*))
-/* Dump an expression tree to stdout */
-{
-    InternalDumpExpr (Expr, ResolveSym);
-    printf ("\n");
-}
diff --git a/src/common/exprdefs.h b/src/common/exprdefs.h
deleted file mode 100644 (file)
index 5465c4f..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                exprdefs.h                                 */
-/*                                                                           */
-/*                        Expression tree definitions                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef EXPRDEFS_H
-#define EXPRDEFS_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Expression type masks */
-#define EXPR_TYPEMASK           0xC0
-#define EXPR_BINARYNODE         0x00
-#define EXPR_UNARYNODE          0x40
-#define EXPR_LEAFNODE           0x80
-
-/* Type of expression nodes */
-#define EXPR_NULL               0x00    /* Internal error or NULL node */
-
-/* Leaf node codes */
-#define EXPR_LITERAL            (EXPR_LEAFNODE | 0x01)
-#define EXPR_SYMBOL             (EXPR_LEAFNODE | 0x02)
-#define EXPR_SECTION            (EXPR_LEAFNODE | 0x03)
-#define EXPR_SEGMENT            (EXPR_LEAFNODE | 0x04)  /* Linker only */
-#define EXPR_MEMAREA            (EXPR_LEAFNODE | 0x05)  /* Linker only */
-#define EXPR_ULABEL             (EXPR_LEAFNODE | 0x06)  /* Assembler only */
-
-/* Binary operations, left and right hand sides are valid */
-#define EXPR_PLUS               (EXPR_BINARYNODE | 0x01)
-#define EXPR_MINUS              (EXPR_BINARYNODE | 0x02)
-#define EXPR_MUL                (EXPR_BINARYNODE | 0x03)
-#define EXPR_DIV                (EXPR_BINARYNODE | 0x04)
-#define EXPR_MOD                (EXPR_BINARYNODE | 0x05)
-#define EXPR_OR                 (EXPR_BINARYNODE | 0x06)
-#define EXPR_XOR                (EXPR_BINARYNODE | 0x07)
-#define EXPR_AND                (EXPR_BINARYNODE | 0x08)
-#define EXPR_SHL                (EXPR_BINARYNODE | 0x09)
-#define EXPR_SHR                (EXPR_BINARYNODE | 0x0A)
-#define EXPR_EQ                 (EXPR_BINARYNODE | 0x0B)
-#define EXPR_NE                 (EXPR_BINARYNODE | 0x0C)
-#define EXPR_LT                 (EXPR_BINARYNODE | 0x0D)
-#define EXPR_GT                 (EXPR_BINARYNODE | 0x0E)
-#define EXPR_LE                 (EXPR_BINARYNODE | 0x0F)
-#define EXPR_GE                 (EXPR_BINARYNODE | 0x10)
-#define EXPR_BOOLAND            (EXPR_BINARYNODE | 0x11)
-#define EXPR_BOOLOR             (EXPR_BINARYNODE | 0x12)
-#define EXPR_BOOLXOR            (EXPR_BINARYNODE | 0x13)
-#define EXPR_MAX                (EXPR_BINARYNODE | 0x14)
-#define EXPR_MIN                (EXPR_BINARYNODE | 0x15)
-
-/* Unary operations, right hand side is empty */
-#define EXPR_UNARY_MINUS        (EXPR_UNARYNODE | 0x01)
-#define EXPR_NOT                (EXPR_UNARYNODE | 0x02)
-#define EXPR_SWAP               (EXPR_UNARYNODE | 0x03)
-#define EXPR_BOOLNOT            (EXPR_UNARYNODE | 0x04)
-#define EXPR_BANK               (EXPR_UNARYNODE | 0x05)
-
-#define EXPR_BYTE0              (EXPR_UNARYNODE | 0x08)
-#define EXPR_BYTE1              (EXPR_UNARYNODE | 0x09)
-#define EXPR_BYTE2              (EXPR_UNARYNODE | 0x0A)
-#define EXPR_BYTE3              (EXPR_UNARYNODE | 0x0B)
-#define EXPR_WORD0              (EXPR_UNARYNODE | 0x0C)
-#define EXPR_WORD1              (EXPR_UNARYNODE | 0x0D)
-#define EXPR_FARADDR            (EXPR_UNARYNODE | 0x0E)
-#define EXPR_DWORD              (EXPR_UNARYNODE | 0x0F)
-
-
-
-/* The expression node itself */
-typedef struct ExprNode ExprNode;
-struct ExprNode {
-    unsigned char           Op;         /* Operand/Type */
-    ExprNode*               Left;       /* Left leaf */
-    ExprNode*               Right;      /* Right leaf */
-    struct ObjData*         Obj;        /* Object file reference (linker) */
-    union {
-        long                IVal;       /* If this is a int value */
-        struct SymEntry*    Sym;        /* If this is a symbol */
-        unsigned            SecNum;     /* If this is a section and Obj != 0 */
-        unsigned            ImpNum;     /* If this is an import and Obj != 0 */
-        struct Import*      Imp;        /* If this is an import and Obj == 0 */
-        struct MemoryArea*  Mem;        /* If this is a memory area */
-        struct Segment*     Seg;        /* If this is a segment */
-        struct Section*     Sec;        /* If this is a section and Obj == 0 */
-    } V;
-};
-
-
-
-/* Macros to determine the expression type */
-#define EXPR_NODETYPE(Op)       ((Op) & EXPR_TYPEMASK)
-#define EXPR_IS_LEAF(Op)        (EXPR_NODETYPE (Op) == EXPR_LEAFNODE)
-#define EXPR_IS_UNARY(Op)       (EXPR_NODETYPE (Op) == EXPR_UNARYNODE)
-#define EXPR_IS_BINARY(OP)      (EXPR_NODETYPE (Op) == EXPR_BINARYNODE)
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void DumpExpr (const ExprNode* Expr, const ExprNode* (*ResolveSym) (const struct SymEntry*));
-/* Dump an expression tree to stdout */
-
-
-
-/* End of exprdefs.h */
-
-#endif
diff --git a/src/common/fileid.c b/src/common/fileid.c
deleted file mode 100644 (file)
index fd6d95d..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 fileid.c                                  */
-/*                                                                           */
-/*               Determine the id of a file type by extension                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-#include <string.h>
-
-/* common */
-#include "fileid.h"
-#include "fname.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int CompareFileId (const void* Key, const void* Id)
-/* Compare function used when calling bsearch with a table of FileIds */
-{
-    return strcmp (Key, ((const FileId*) Id)->Ext);
-}
-
-
-
-const FileId* GetFileId (const char* Name, const FileId* Table, unsigned Count)
-/* Determine the id of the given file by looking at file extension of the name.
-** The table passed to the function must be sorted alphabetically. If the
-** extension is found, a pointer to the matching table entry is returned. If
-** no matching table entry was found, the function returns NULL.
-*/
-{
-    /* Determine the file type by the extension */
-    const char* Ext = FindExt (Name);
-
-    /* Do we have an extension? */
-    if (Ext == 0) {
-        return 0;
-    }
-
-    /* Search for a table entry and return it */
-    return bsearch (Ext+1, Table, Count, sizeof (FileId), CompareFileId);
-}
diff --git a/src/common/fileid.h b/src/common/fileid.h
deleted file mode 100644 (file)
index df71cf2..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 fileid.h                                  */
-/*                                                                           */
-/*               Determine the id of a file type by extension                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef FILEID_H
-#define FILEID_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* An entry for a table that maps extensions to some sort of identifier. Such
-** a table - sorted alphabetically - is passed to GetFileId.
-*/
-typedef struct FileId FileId;
-struct FileId {
-    const char  Ext[4];
-    int         Id;
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int CompareFileId (const void* Key, const void* Id);
-/* Compare function used when calling bsearch with a table of FileIds */
-
-const FileId* GetFileId (const char* Name, const FileId* Table, unsigned Count);
-/* Determine the id of the given file by looking at file extension of the name.
-** The table passed to the function must be sorted alphabetically. If the
-** extension is found, a pointer to the matching table entry is returned. If
-** no matching table entry was found, the function returns NULL.
-*/
-
-
-
-/* End of fileid.h */
-
-#endif
diff --git a/src/common/filepos.c b/src/common/filepos.c
deleted file mode 100644 (file)
index 51488ff..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 filepos.c                                 */
-/*                                                                           */
-/*                       File position data structure                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "filepos.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void InitFilePos (FilePos* P)
-/* Initialize the file position (set all fields to zero) */
-{
-    P->Line = 0;
-    P->Col  = 0;
-    P->Name = 0;
-}
-
-
-
-int CompareFilePos (const FilePos* P1, const FilePos* P2)
-/* Compare two file positions. Return zero if both are equal, return a value
-** > 0 if P1 is greater and P2, and a value < 0 if P1 is less than P2. The
-** compare rates file index over line over column.
-*/
-{
-    if (P1->Name > P2->Name) {    
-        return 1;
-    } else if (P1->Name < P2->Name) {
-        return -1;
-    } else if (P1->Line > P2->Line) {
-        return 1;
-    } else if (P1->Line < P2->Line) {
-        return -1;
-    } else if (P1->Col > P2->Col) {
-        return 1;
-    } else if (P1->Col < P2->Col) {
-        return -1;
-    } else {
-        return 0;
-    }
-}
diff --git a/src/common/filepos.h b/src/common/filepos.h
deleted file mode 100644 (file)
index d6368ad..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 filepos.h                                 */
-/*                                                                           */
-/*                       File position data structure                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef FILEPOS_H
-#define FILEPOS_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Type of a file position */
-typedef struct FilePos FilePos;
-struct FilePos {
-    unsigned    Line;               /* Line */
-    unsigned    Col;                /* Column */
-    unsigned    Name;               /* File */
-};
-
-/* Initializer for a FilePos */
-#define STATIC_FILEPOS_INITIALIZER      { 0, 0, 0 }
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void InitFilePos (FilePos* P);
-/* Initialize the file position (set all fields to zero) */
-
-int CompareFilePos (const FilePos* P1, const FilePos* P2);
-/* Compare two file positions. Return zero if both are equal, return a value
-** > 0 if P1 is greater and P2, and a value < 0 if P1 is less than P2. The
-** compare rates file index over line over column.
-*/
-
-
-
-/* End of filepos.h */
-
-#endif
diff --git a/src/common/filestat.c b/src/common/filestat.c
deleted file mode 100644 (file)
index b72fa7a..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                filestat.c                                 */
-/*                                                                           */
-/*                       Replacement for Windows code                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* This module works around bugs in the time conversion code supplied by
-** Microsoft. See here for a description of the problem:
-**   http://www.codeproject.com/KB/datetime/dstbugs.aspx
-** Please let me note that I find it absolutely unacceptable to just declare
-** buggy behaviour like this "works as designed" as Microsoft does. The
-** problems did even make it into .NET, where the DateTime builtin data type
-** has exactly the same problems as described in the article above.
-*/
-
-
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#if defined(_WIN32)
-#  include <errno.h>
-#  include <windows.h>
-#endif
-
-/* common */
-#include "filestat.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-#if defined(_WIN32)
-
-
-
-static time_t FileTimeToUnixTime (const FILETIME* T)
-/* Calculate a unix time_t value from a FILETIME. FILETIME contains a 64 bit
-** value with point zero at 1600-01-01 00:00:00 and counting 100ns intervals.
-** time_t is in seconds since 1970-01-01 00:00:00.
-*/
-{
-    /* Offset between 1600-01-01 and the Epoch in seconds. Watcom C has no
-    ** way to express a number > 32 bit (known to me) but is able to do
-    ** calculations with 64 bit integers, so we need to do it this way.
-    */
-    static const ULARGE_INTEGER Offs = { { 0xB6109100UL, 0x00000020UL } };
-    ULARGE_INTEGER V;
-    V.LowPart  = T->dwLowDateTime;
-    V.HighPart = T->dwHighDateTime;
-    return (V.QuadPart / 10000000U) - Offs.QuadPart;
-}
-
-
-
-int FileStat (const char* Path, struct stat* Buf)
-/* Replacement function for stat() */
-{
-
-    HANDLE                      H;
-    BY_HANDLE_FILE_INFORMATION  Info;
-
-    /* First call stat() */
-    int Error = stat (Path, Buf);
-    if (Error != 0) {
-        return Error;
-    }
-
-    /* Open the file using backup semantics, so we won't change atime. Then
-    ** retrieve the correct times in UTC and replace the ones in Buf. Return
-    ** EACCES in case of errors to avoid the hassle of translating windows
-    ** error codes to standard ones.
-    */
-    H = CreateFile (Path,
-                    GENERIC_READ,
-                    FILE_SHARE_READ,
-                    0,                          /* Security attributes */
-                    OPEN_EXISTING,
-                    FILE_FLAG_BACKUP_SEMANTICS,
-                    0);                         /* Template file */
-    if (H != INVALID_HANDLE_VALUE) {
-        if (GetFileInformationByHandle (H, &Info)) {
-            Buf->st_ctime = FileTimeToUnixTime (&Info.ftCreationTime);
-            Buf->st_atime = FileTimeToUnixTime (&Info.ftLastAccessTime);
-            Buf->st_mtime = FileTimeToUnixTime (&Info.ftLastWriteTime);
-        } else {
-            Error = EACCES;
-        }
-        (void) CloseHandle (H);
-    } else {
-        Error = EACCES;
-    }
-
-    /* Done */
-    return Error;
-}
-
-
-
-#else
-
-
-
-int FileStat (const char* Path, struct stat* Buf)
-/* Replacement function for stat() */
-{
-    /* Just call the function which works without errors */
-    return stat (Path, Buf);
-}
-
-
-
-#endif
diff --git a/src/common/filestat.h b/src/common/filestat.h
deleted file mode 100644 (file)
index 4290088..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                filestat.h                                 */
-/*                                                                           */
-/*                       Replacement for Windows code                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* This module works around bugs in the time conversion code supplied by
-** Microsoft. See here for a description of the problem:
-**   http://www.codeproject.com/KB/datetime/dstbugs.aspx
-** Please let me note that I find it absolutely unacceptable to just declare
-** buggy behaviour like this "works as designed" as Microsoft does. The
-** problems did even make it into .NET, where the DateTime builtin data type
-** has exactly the same problems as described in the article above.
-*/
-
-
-
-#ifndef FILESTAT_H
-#define FILESTAT_H
-
-
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int FileStat (const char* Path, struct stat* Buf);
-/* Replacement function for stat() */
-
-
-
-/* End of filestat.h */
-
-#endif
diff --git a/src/common/filetime.c b/src/common/filetime.c
deleted file mode 100644 (file)
index 8bdf44f..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                filetime.c                                 */
-/*                                                                           */
-/*                       Replacement for Windows code                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* This module works around bugs in the time conversion code supplied by
-** Microsoft. The problem described here:
-**   http://www.codeproject.com/KB/datetime/dstbugs.aspx
-** is also true when setting file times via utime(), so we need a
-** replacement
-*/
-
-
-
-#if defined(_WIN32)
-#  include <errno.h>
-#  include <windows.h>
-#else
-#  include <sys/types.h>                          /* FreeBSD needs this */
-#  include <utime.h>
-#endif
-
-
-/* common */
-#include "filetime.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-#if defined(_WIN32)
-
-
-
-static FILETIME* UnixTimeToFileTime (time_t T, FILETIME* FT)
-/* Calculate a FILETIME value from a time_t. FILETIME contains a 64 bit
-** value with point zero at 1600-01-01 00:00:00 and counting 100ns intervals.
-** time_t is in seconds since 1970-01-01 00:00:00.
-*/
-{
-    /* Offset between 1600-01-01 and the Epoch in seconds. Watcom C has no
-    ** way to express a number > 32 bit (known to me) but is able to do
-    ** calculations with 64 bit integers, so we need to do it this way.
-    */
-    static const ULARGE_INTEGER Offs = { { 0xB6109100UL, 0x00000020UL } };
-    ULARGE_INTEGER V;
-    V.QuadPart = ((unsigned __int64) T + Offs.QuadPart) * 10000000U;
-    FT->dwLowDateTime  = V.LowPart;
-    FT->dwHighDateTime = V.HighPart;
-    return FT;
-}
-
-
-
-int SetFileTimes (const char* Path, time_t T)
-/* Set the time of last modification and the time of last access of a file to
-** the given time T. This calls utime() for system where it works, and applies
-** workarounds for all others (which in fact means "WINDOWS").
-*/
-{
-    HANDLE   H;
-    FILETIME FileTime;
-    int      Error = EACCES;                    /* Assume an error */
-
-
-    /* Open the file */
-    H = CreateFile (Path,
-                    GENERIC_WRITE,
-                    FILE_SHARE_READ,
-                    0,                          /* Security attributes */
-                    OPEN_EXISTING,
-                    0,                          /* File flags */
-                    0);                         /* Template file */
-    if (H != INVALID_HANDLE_VALUE) {
-        /* Set access and modification time */
-        UnixTimeToFileTime (T, &FileTime);
-        if (SetFileTime (H, 0, &FileTime, &FileTime)) {
-            /* Done */
-            Error = 0;
-        }
-
-        /* Close the handle */
-        (void) CloseHandle (H);
-    }
-
-    /* Return the error code */
-    return Error;
-}
-
-
-
-#else
-
-
-
-int SetFileTimes (const char* Path, time_t T)
-/* Set the time of last modification and the time of last access of a file to
-** the given time T. This calls utime() for system where it works, and applies
-** workarounds for all others (which in fact means "WINDOWS").
-*/
-{
-    struct utimbuf U;
-
-    /* Set access and modification time */
-    U.actime  = T;
-    U.modtime = T;
-    return utime (Path, &U);
-}
-
-
-
-#endif
diff --git a/src/common/filetime.h b/src/common/filetime.h
deleted file mode 100644 (file)
index f5f00cd..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                filetime.h                                 */
-/*                                                                           */
-/*                       Replacement for Windows code                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* This module works around bugs in the time conversion code supplied by
-** Microsoft. The problem described here:
-**   http://www.codeproject.com/KB/datetime/dstbugs.aspx
-** is also true when setting file times via utime(), so we need a
-** replacement
-*/
-
-
-
-#ifndef FILETIME_H
-#define FILETIME_H
-
-
-
-#include <time.h>
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int SetFileTimes (const char* Path, time_t T);
-/* Set the time of last modification and the time of last access of a file to
-** the given time T. This calls utime() for system where it works, and applies
-** workarounds for all others (which in fact means "WINDOWS").
-*/
-
-
-
-/* End of filestat.h */
-
-#endif
diff --git a/src/common/filetype.c b/src/common/filetype.c
deleted file mode 100644 (file)
index a5bac64..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                filetype.c                                 */
-/*                                                                           */
-/*                       Determine the type of a file                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-#include <string.h>
-
-/* common */
-#include "fileid.h"
-#include "filetype.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-static const FileId TypeTable[] = {
-    /* Upper case stuff for obsolete operating systems */
-    {   "A",    FILETYPE_LIB    },
-    {   "A65",  FILETYPE_ASM    },
-    {   "ASM",  FILETYPE_ASM    },
-    {   "C",    FILETYPE_C      },
-    {   "EMD",  FILETYPE_O65    },
-    {   "GRC",  FILETYPE_GR     },
-    {   "JOY",  FILETYPE_O65    },
-    {   "LIB",  FILETYPE_LIB    },
-    {   "MOU",  FILETYPE_O65    },
-    {   "O",    FILETYPE_OBJ    },
-    {   "O65",  FILETYPE_O65    },
-    {   "OBJ",  FILETYPE_OBJ    },
-    {   "S",    FILETYPE_ASM    },
-    {   "SER",  FILETYPE_O65    },
-    {   "TGI",  FILETYPE_O65    },
-
-    {   "a",    FILETYPE_LIB    },
-    {   "a65",  FILETYPE_ASM    },
-    {   "asm",  FILETYPE_ASM    },
-    {   "c",    FILETYPE_C      },
-    {   "emd",  FILETYPE_O65    },
-    {   "grc",  FILETYPE_GR     },
-    {   "joy",  FILETYPE_O65    },
-    {   "lib",  FILETYPE_LIB    },
-    {   "mou",  FILETYPE_O65    },
-    {   "o",    FILETYPE_OBJ    },
-    {   "o65",  FILETYPE_O65    },
-    {   "obj",  FILETYPE_OBJ    },
-    {   "s",    FILETYPE_ASM    },
-    {   "ser",  FILETYPE_O65    },
-    {   "tgi",  FILETYPE_O65    },
-};
-
-#define FILETYPE_COUNT (sizeof (TypeTable) / sizeof (TypeTable[0]))
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-FILETYPE GetFileType (const char* Name)
-/* Determine the type of the given file by looking at the name. If the file
-** type could not be determined, the function returns FILETYPE_UNKOWN.
-*/
-{
-    /* Search for a table entry */
-    const FileId* F = GetFileId (Name, TypeTable, FILETYPE_COUNT);
-
-    /* Return the result */
-    return F? F->Id : FILETYPE_UNKNOWN;
-}
diff --git a/src/common/filetype.h b/src/common/filetype.h
deleted file mode 100644 (file)
index f4beae7..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                filetype.h                                 */
-/*                                                                           */
-/*                       Determine the type of a file                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef FILETYPE_H
-#define FILETYPE_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* File types */
-typedef enum {
-    FILETYPE_UNKNOWN = -1,      /* Unknown file type */
-    FILETYPE_C,                 /* C source file */
-    FILETYPE_ASM,               /* Assembler file */
-    FILETYPE_OBJ,               /* Object file */
-    FILETYPE_LIB,               /* Library file */
-    FILETYPE_GR,                /* GEOS resource file */
-    FILETYPE_O65                /* O65 object file */
-} FILETYPE;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-FILETYPE GetFileType (const char* Name);
-/* Determine the type of the given file by looking at the name. If the file
-** type could not be determined, the function returns FILETYPE_UNKOWN.
-*/
-
-
-
-/* End of filetype.h */
-
-#endif
diff --git a/src/common/fname.c b/src/common/fname.c
deleted file mode 100644 (file)
index 4e4f7c7..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  fname.c                                  */
-/*                                                                           */
-/*                       File name handling utilities                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2003 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-#include "xmalloc.h"
-#include "fname.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-const char* FindExt (const char* Name)
-/* Return a pointer to the file extension in Name or NULL if there is none */
-{
-    const char* S;
-
-    /* Get the length of the name */
-    unsigned Len = strlen (Name);
-    if (Len < 2) {
-        return 0;
-    }
-
-    /* Get a pointer to the last character */
-    S = Name + Len - 1;
-
-    /* Search for the dot, beware of subdirectories */
-    while (S >= Name && *S != '.' && *S != '\\' && *S != '/') {
-        --S;
-    }
-
-    /* Did we find an extension? */
-    if (*S == '.') {
-        return S;
-    } else {
-        return 0;
-    }
-}
-
-
-
-const char* FindName (const char* Path)
-/* Return a pointer to the file name in Path. If there is no path leading to
-** the file, the function returns Path as name.
-*/
-{
-    /* Get the length of the name */
-    int Len = strlen (Path);
-
-    /* Search for the path separator */
-    while (Len > 0 && Path[Len-1] != '\\' && Path[Len-1] != '/') {
-        --Len;
-    }
-
-    /* Return the name or path */
-    return Path + Len;
-}
-
-
-
-char* MakeFilename (const char* Origin, const char* Ext)
-/* Make a new file name from Origin and Ext. If Origin has an extension, it
-** is removed and Ext is appended. If Origin has no extension, Ext is simply
-** appended. The result is placed in a malloc'ed buffer and returned.
-** The function may be used to create "foo.o" from "foo.s".
-*/
-{
-    char* Out;
-    const char* P = FindExt (Origin);
-    if (P == 0) {
-        /* No dot, add the extension */
-        Out = xmalloc (strlen (Origin) + strlen (Ext) + 1);
-        strcpy (Out, Origin);
-        strcat (Out, Ext);
-    } else {
-        Out = xmalloc (P - Origin + strlen (Ext) + 1);
-        memcpy (Out, Origin, P - Origin);
-        strcpy (Out + (P - Origin), Ext);
-    }
-    return Out;
-}
diff --git a/src/common/fname.h b/src/common/fname.h
deleted file mode 100644 (file)
index 1b94d27..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  fname.h                                  */
-/*                                                                           */
-/*                       File name handling utilities                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2003 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef FNAME_H
-#define FNAME_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-const char* FindExt (const char* Name);
-/* Return a pointer to the file extension in Name or NULL if there is none */
-
-const char* FindName (const char* Path);
-/* Return a pointer to the file name in Path. If there is no path leading to
-** the file, the function returns Path as name.
-*/
-
-char* MakeFilename (const char* Origin, const char* Ext);
-/* Make a new file name from Origin and Ext. If Origin has an extension, it
-** is removed and Ext is appended. If Origin has no extension, Ext is simply
-** appended. The result is placed in a malloc'ed buffer and returned.
-** The function may be used to create "foo.o" from "foo.s".
-*/
-
-
-
-/* End of fname.h */
-
-#endif
diff --git a/src/common/fp.c b/src/common/fp.c
deleted file mode 100644 (file)
index 0c4d279..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   fp.c                                    */
-/*                                                                           */
-/*                          Floating point support                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2008      Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* The compiler must use the same floating point arithmetic as the target
-** platform, otherwise expressions will yield a different result when
-** evaluated in the compiler or on the target platform. Since writing a target
-** and source library is almost double the work, we will at least add the
-** hooks here, and define functions for a plug in library that may be added
-** at a later time. Currently we use the builtin data types of the compiler
-** that translates cc65.
-*/
-
-
-
-#include <string.h>
-
-/* common */
-#include "fp.h"
-#include "xmalloc.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-#define F_SIZE  sizeof(float)
-#define D_SIZE  sizeof(float)           /* NOT double! */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-size_t FP_F_Size (void)
-/* Return the size of the data type float */
-{
-    return F_SIZE;
-}
-
-
-
-unsigned char* FP_F_Data (Float Val)
-/* Return the raw data of a float in a malloc'ed buffer. Free after use. */
-{
-    return memcpy (xmalloc (F_SIZE), &Val.V, F_SIZE);
-}
-
-
-
-Float FP_F_Make (float Val)
-/* Make a floating point variable from a float value */
-{
-    Float D;
-    D.V = Val;
-    return D;
-}
-
-
-
-Float FP_F_FromInt (long Val)
-/* Convert an integer into a floating point variable */
-{
-    Float D;
-    D.V = (float) Val;
-    return D;
-}
-
-
-
-float FP_F_ToFloat (Float Val)
-/* Convert a Float into a native float */
-{
-    return Val.V;
-}
-
-
-
-Float FP_F_Add (Float Left, Float Right)
-/* Add two floats */
-{
-    Float D;
-    D.V = Left.V + Right.V;
-    return D;
-}
-
-
-
-Float FP_F_Sub (Float Left, Float Right)
-/* Subtract two floats */
-{
-    Float D;
-    D.V = Left.V - Right.V;
-    return D;
-}
-
-
-
-Float FP_F_Mul (Float Left, Float Right)
-/* Multiplicate two floats */
-{
-    Float D;
-    D.V = Left.V * Right.V;
-    return D;
-}
-
-
-
-Float FP_F_Div (Float Left, Float Right)
-/* Divide two floats */
-{
-    Float D;
-    D.V = Left.V / Right.V;
-    return D;
-}
-
-
-
-size_t FP_D_Size (void)
-/* Return the size of the data type double */
-{
-    return D_SIZE;
-}
-
-
-
-unsigned char* FP_D_Data (Double Val)
-/* Return the raw data of a double in a malloc'ed buffer. Free after use. */
-{
-    float F = (float) Val.V;
-    return memcpy (xmalloc (F_SIZE), &F, F_SIZE);
-}
-
-
-
-Double FP_D_Make (double Val)
-/* Make a floating point variable from a float value */
-{
-    Double D;
-    D.V = Val;
-    return D;
-}
-
-
-
-
-Double FP_D_FromInt (long Val)
-/* Convert an integer into a floating point variable */
-{
-    Double D;
-    D.V = Val;
-    return D;
-}
-
-
-
-double FP_D_ToFloat (Double Val)
-/* Convert a Double into a native double */
-{
-    return Val.V;
-}
-
-
-
-Double FP_D_Add (Double Left, Double Right)
-/* Add two floats */
-{
-    Double D;
-    D.V = Left.V + Right.V;
-    return D;
-}
-
-
-
-Double FP_D_Sub (Double Left, Double Right)
-/* Subtract two floats */
-{
-    Double D;
-    D.V = Left.V - Right.V;
-    return D;
-}
-
-
-
-Double FP_D_Mul (Double Left, Double Right)
-/* Multiplicate two floats */
-{
-    Double D;
-    D.V = Left.V * Right.V;
-    return D;
-}
-
-
-
-Double FP_D_Div (Double Left, Double Right)
-/* Divide two floats */
-{
-    Double D;
-    D.V = Left.V / Right.V;
-    return D;
-}
diff --git a/src/common/fp.h b/src/common/fp.h
deleted file mode 100644 (file)
index 978359b..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   fp.h                                    */
-/*                                                                           */
-/*                          Floating point support                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2008      Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* The compiler must use the same floating point arithmetic as the target
-** platform, otherwise expressions will yield a different result when
-** evaluated in the compiler or on the target platform. Since writing a target
-** and source library is almost double the work, we will at least add the
-** hooks here, and define functions for a plug in library that may be added
-** at a later time. Currently we use the builtin data types of the compiler
-** that translates cc65.
-**
-** BEWARE: This code will currently only work on little endian systems!
-*/
-
-
-
-#ifndef FP_H
-#define FP_H
-
-
-
-#include <stddef.h>
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-typedef union Float Float;
-union Float {
-    float         V;
-};
-
-
-
-typedef union Double Double;
-union Double {
-    double        V;
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-size_t FP_F_Size (void);
-/* Return the size of the data type float */
-
-unsigned char* FP_F_Data (Float Val);
-/* Return the raw data of a float in a malloc'ed buffer. Free after use. */
-
-Float FP_F_Make (float Val);
-/* Make a floating point variable from a float value */
-
-Float FP_F_FromInt (long Val);
-/* Convert an integer into a floating point variable */
-
-float FP_F_ToFloat (Float Val);
-/* Convert a Float into a native float */
-
-Float FP_F_Add (Float Left, Float Right);
-/* Add two floats */
-
-Float FP_F_Sub (Float Left, Float Right);
-/* Subtract two floats */
-
-Float FP_F_Mul (Float Left, Float Right);
-/* Multiplicate two floats */
-
-Float FP_F_Div (Float Left, Float Right);
-/* Divide two floats */
-
-size_t FP_D_Size (void);
-/* Return the size of the data type double */
-
-unsigned char* FP_D_Data (Double Val);
-/* Return the raw data of a double in a malloc'ed buffer. Free after use. */
-
-Double FP_D_Make (double Val);
-/* Make a floating point variable from a float value */
-
-Double FP_D_FromInt (long Val);
-/* Convert an integer into a floating point variable */
-
-double FP_D_ToFloat (Double Val);
-/* Convert a Double into a native double */
-
-Double FP_D_Add (Double Left, Double Right);
-/* Add two floats */
-
-Double FP_D_Sub (Double Left, Double Right);
-/* Subtract two floats */
-
-Double FP_D_Mul (Double Left, Double Right);
-/* Multiplicate two floats */
-
-Double FP_D_Div (Double Left, Double Right);
-/* Divide two floats */
-
-
-
-/* End of fp.h */
-
-#endif
diff --git a/src/common/fragdefs.h b/src/common/fragdefs.h
deleted file mode 100644 (file)
index c3e589c..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 fragdefs.h                                */
-/*                                                                           */
-/*              Fragment definitions for the bin65 binary utils              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef FRAGDEFS_H
-#define FRAGDEFS_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Masks for the fragment type byte */
-#define FRAG_TYPEMASK   0x38            /* Mask the type of the fragment */
-#define FRAG_BYTEMASK   0x07            /* Mask for byte count */
-
-/* Fragment types */
-#define FRAG_LITERAL    0x00            /* Literal data */
-
-#define FRAG_EXPR       0x08            /* Expression */
-#define FRAG_EXPR8      (FRAG_EXPR | 1) /* 8 bit expression */
-#define FRAG_EXPR16     (FRAG_EXPR | 2) /* 16 bit expression */
-#define FRAG_EXPR24     (FRAG_EXPR | 3) /* 24 bit expression */
-#define FRAG_EXPR32     (FRAG_EXPR | 4) /* 32 bit expression */
-
-#define FRAG_SEXPR      0x10            /* Signed expression */
-#define FRAG_SEXPR8     (FRAG_SEXPR | 1)/* 8 bit signed expression */
-#define FRAG_SEXPR16    (FRAG_SEXPR | 2)/* 16 bit signed expression */
-#define FRAG_SEXPR24    (FRAG_SEXPR | 3)/* 24 bit signed expression */
-#define FRAG_SEXPR32    (FRAG_SEXPR | 4)/* 32 bit signed expression */
-
-#define FRAG_FILL       0x20            /* Fill bytes */
-
-
-
-/* End of fragdefs.h */
-
-#endif
diff --git a/src/common/gentype.c b/src/common/gentype.c
deleted file mode 100644 (file)
index 1600a7c..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 gentype.c                                 */
-/*                                                                           */
-/*                        Generic data type encoding                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2011,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "check.h"
-#include "gentype.h"
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void GT_AddArray (StrBuf* Type, unsigned ArraySize)
-/* Add an array with the given size to the type string in Type. This will
-** NOT add the element type!
-*/
-{
-    unsigned SizeBytes;
-
-    /* Remember the current position */
-    unsigned Pos = SB_GetLen (Type);
-
-    /* Add a dummy array token */
-    SB_AppendChar (Type, GT_TYPE_ARRAY);
-
-    /* Add the size. */
-    SizeBytes = 0;
-    do {
-        SB_AppendChar (Type, ArraySize & 0xFF);
-        ArraySize >>= 8;
-        ++SizeBytes;
-    } while (ArraySize);
-
-    /* Write the correct array token */
-    SB_GetBuf (Type)[Pos] = GT_ARRAY (SizeBytes);
-}
-
-
-
-unsigned GT_GetElementCount (StrBuf* Type)
-/* Retrieve the element count of an array stored in Type at the current index
-** position. Note: Index must point to the array token itself, since the size
-** of the element count is encoded there. The index position will get moved
-** past the array.
-*/
-{
-    /* Get the number of bytes for the element count */
-    unsigned SizeBytes = GT_GET_SIZE (SB_Get (Type));
-
-    /* Read the size */
-    unsigned Size = 0;
-    const char* Buf = SB_GetConstBuf (Type) + SB_GetLen (Type);
-    while (SizeBytes--) {
-        Size <<= 8;
-        Size |= Buf[SizeBytes];
-    }
-
-    /* Return it */
-    return Size;
-}
-
-
-
-const char* GT_AsString (const StrBuf* Type, StrBuf* String)
-/* Convert the type into a readable representation. The target string buffer
-** will be zero terminated and a pointer to the contents are returned.
-*/
-{
-    static const char HexTab[16] = "0123456789ABCDEF";
-    unsigned I;
-
-    /* Convert Type into readable hex. String will have twice then length
-    ** plus a terminator.
-    */
-    SB_Realloc (String, 2 * SB_GetLen (Type) + 1);
-    SB_Clear (String);
-
-    for (I = 0; I < SB_GetLen (Type); ++I) {
-        unsigned char C = SB_AtUnchecked (Type, I);
-        SB_AppendChar (String, HexTab[(C & 0xF0) >> 4]);
-        SB_AppendChar (String, HexTab[(C & 0x0F) >> 0]);
-    }
-
-    /* Terminate the string so it can be used with string functions */
-    SB_Terminate (String);
-
-    /* Return the contents of String */
-    return SB_GetConstBuf (String);
-}
diff --git a/src/common/gentype.h b/src/common/gentype.h
deleted file mode 100644 (file)
index b3f13f1..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 gentype.h                                 */
-/*                                                                           */
-/*                        Generic data type encoding                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2011,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* This module implements a specification for a "generic data type". It is
-** called generic, because it doesn't mimic a high level language. Instead it
-** tries to desrcibe the type as representation on the machine.
-** The reasoning behing this type is to allow a debugger to represent the
-** data to the user, independent of the actual source.
-** C data types may be mapped to generic ones, but attributes like const or
-** volatile are (of course) lost.
-**
-** The data type is stored in a char array; and, can be terminated by a zero
-** (see definition of GT_END below). The latter is not really necessary; but,
-** allows handling of types using the usual string functions. This is in fact
-** one of the advantages of the chosen implementation:
-** String buffers may be used to dynamically build types. Types may be stored
-** as strings in the string pool of an object file. And a string pool may be
-** used to remove duplicates and reference types using unique ids.
-*/
-
-
-
-#ifndef GENTYPE_H
-#define GENTYPE_H
-
-
-
-/* common */
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Size of a data type */
-#define GT_SIZE_1               0x00U
-#define GT_SIZE_2               0x01U
-#define GT_SIZE_3               0x02U
-#define GT_SIZE_4               0x03U
-#define GT_SIZE_MASK            0x07U
-
-#define GT_GET_SIZE(x)          (((x) & GT_SIZE_MASK) + 1U)
-
-/* Sign of the data type */
-#define GT_UNSIGNED             0x00U
-#define GT_SIGNED               0x08U
-#define GT_SIGN_MASK            0x08U
-
-#define GT_HAS_SIGN(x)          (((x) & GT_SIZE_MASK) == GT_SIGNED)
-
-/* Byte order */
-#define GT_LITTLE_ENDIAN        0x00U
-#define GT_BIG_ENDIAN           0x10U
-#define GT_BYTEORDER_MASK       0x10U
-
-#define GT_IS_LITTLE_ENDIAN(x)  (((x) & GT_BYTEORDER_MASK) == GT_LITTLE_ENDIAN)
-#define GT_IS_BIG_ENDIAN(x)     (((x) & GT_BYTEORDER_MASK) == GT_BIG_ENDIAN)
-
-/* Type of the data. */
-#define GT_TYPE_VOID            0x00U
-#define GT_TYPE_INT             0x20U
-#define GT_TYPE_PTR             0x40U
-#define GT_TYPE_FLOAT           0x60U
-#define GT_TYPE_ARRAY           0x80U
-#define GT_TYPE_FUNC            0xA0U
-#define GT_TYPE_STRUCT          0xC0U
-#define GT_TYPE_UNION           0xE0U
-#define GT_TYPE_MASK            0xE0U
-
-#define GT_GET_TYPE(x)          ((x) & GT_TYPE_MASK)
-#define GT_IS_INTEGER(x)        (GT_GET_TYPE(x) == GT_TYPE_INTEGER)
-#define GT_IS_POINTER(x)        (GT_GET_TYPE(x) == GT_TYPE_POINTER)
-#define GT_IS_FLOAT(x)          (GT_GET_TYPE(x) == GT_TYPE_FLOAT)
-#define GT_IS_ARRAY(x)          (GT_GET_TYPE(x) == GT_TYPE_ARRAY)
-#define GT_IS_FUNCTION(x)       (GT_GET_TYPE(x) == GT_TYPE_FUNCTION)
-#define GT_IS_STRUCT(x)         (GT_GET_TYPE(x) == GT_TYPE_STRUCT)
-#define GT_IS_UNION(x)          (GT_GET_TYPE(x) == GT_TYPE_UNION)
-
-/* Combined values for the 6502 family */
-#define GT_VOID         (GT_TYPE_VOID)
-#define GT_BYTE         (GT_TYPE_INT | GT_LITTLE_ENDIAN | GT_UNSIGNED | GT_SIZE_1)
-#define GT_WORD         (GT_TYPE_INT | GT_LITTLE_ENDIAN | GT_UNSIGNED | GT_SIZE_2)
-#define GT_DWORD        (GT_TYPE_INT | GT_LITTLE_ENDIAN | GT_UNSIGNED | GT_SIZE_4)
-#define GT_DBYTE        (GT_TYPE_PTR | GT_BIG_ENDIAN    | GT_UNSIGNED | GT_SIZE_2)
-#define GT_PTR          (GT_TYPE_PTR | GT_LITTLE_ENDIAN | GT_UNSIGNED | GT_SIZE_2)
-#define GT_FAR_PTR      (GT_TYPE_PTR | GT_LITTLE_ENDIAN | GT_UNSIGNED | GT_SIZE_3)
-#define GT_ARRAY(size)  (GT_TYPE_ARRAY | ((size) - 1))
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void GT_AddArray (StrBuf* Type, unsigned ArraySize);
-/* Add an array with the given size to the type string in Type. This will
-** NOT add the element type!
-*/
-
-unsigned GT_GetElementCount (StrBuf* Type);
-/* Retrieve the element count of an array stored in Type at the current index
-** position. Note: Index must point to the array token itself, since the size
-** of the element count is encoded there. The index position will get moved
-** past the array.
-*/
-
-const char* GT_AsString (const StrBuf* Type, StrBuf* String);
-/* Convert the type into a readable representation. The target string buffer
-** will be zero terminated and a pointer to the contents are returned.
-*/
-
-
-
-/* End of gentype.h */
-
-#endif
diff --git a/src/common/hashfunc.c b/src/common/hashfunc.c
deleted file mode 100644 (file)
index 3ef2687..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                hashfunc.c                                 */
-/*                                                                           */
-/*                              Hash functions                               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "hashfunc.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned HashInt (unsigned V)
-/* Return a hash value for the given integer. The function uses Robert
-** Jenkins' 32 bit integer hash function taken from
-**     http://www.concentric.net/~ttwang/tech/inthash.htm
-** For 16 bit integers, the function may be suboptimal.
-*/
-{
-   V = (V + 0x7ed55d16) + (V << 12);
-   V = (V ^ 0xc761c23c) ^ (V >> 19);
-   V = (V + 0x165667b1) + (V << 5);
-   V = (V + 0xd3a2646c) ^ (V << 9);
-   V = (V + 0xfd7046c5) + (V << 3);
-   V = (V ^ 0xb55a4f09) ^ (V >> 16);
-   return V;
-}
-
-
-
-unsigned HashStr (const char* S)
-/* Return a hash value for the given string */
-{
-    unsigned L, H;
-
-    /* Do the hash */
-    H = L = 0;
-    while (*S) {
-        H = ((H << 3) ^ ((unsigned char) *S++)) + L++;
-    }
-    return H;
-}
-
-
-
-unsigned HashBuf (const StrBuf* S)
-/* Return a hash value for the given string buffer */
-{
-    unsigned I, L, H;
-
-    /* Do the hash */
-    H = L = 0;
-    for (I = 0; I < SB_GetLen (S); ++I) {
-        H = ((H << 3) ^ ((unsigned char) SB_AtUnchecked (S, I))) + L++;
-    }
-    return H;
-}
diff --git a/src/common/hashfunc.h b/src/common/hashfunc.h
deleted file mode 100644 (file)
index 2645474..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                hashfunc.h                                 */
-/*                                                                           */
-/*                              Hash functions                               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef HASHFUNC_H
-#define HASHFUNC_H
-
-
-
-/* common */
-#include "attrib.h"
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned HashInt (unsigned V) attribute ((const));
-/* Return a hash value for the given integer. */
-
-unsigned HashStr (const char* S) attribute ((const));
-/* Return a hash value for the given string */
-
-unsigned HashBuf (const StrBuf* S) attribute ((const));
-/* Return a hash value for the given string buffer */
-
-
-
-/* End of hashfunc.h */
-
-#endif
diff --git a/src/common/hashtab.c b/src/common/hashtab.c
deleted file mode 100644 (file)
index 4330ad6..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 hashtab.c                                 */
-/*                                                                           */
-/*                             Generic hash table                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "check.h"
-#include "hashtab.h"
-#include "xmalloc.h"
-
-
-
-/*****************************************************************************/
-/*                             struct HashTable                              */
-/*****************************************************************************/
-
-
-
-HashTable* InitHashTable (HashTable* T, unsigned Slots, const HashFunctions* Func)
-/* Initialize a hash table and return it */
-{
-    /* Initialize the fields */
-    T->Slots    = Slots;
-    T->Count    = 0;
-    T->Table    = 0;
-    T->Func     = Func;
-
-    /* Return the initialized table */
-    return T;
-}
-
-
-
-void DoneHashTable (HashTable* T)
-/* Destroy the contents of a hash table. Note: This will not free the entries
-** in the table!
-*/
-{
-    /* Just free the array with the table pointers */
-    xfree (T->Table);
-}
-
-
-
-void FreeHashTable (HashTable* T)
-/* Free a hash table. Note: This will not free the entries in the table! */
-{
-    if (T) {
-        /* Free the contents */
-        DoneHashTable (T);
-        /* Free the table structure itself */
-        xfree (T);
-    }
-}
-
-
-
-static void HT_Alloc (HashTable* T)
-/* Allocate table memory */
-{
-    unsigned I;
-
-    /* Allocate memory */
-    T->Table = xmalloc (T->Slots * sizeof (T->Table[0]));
-
-    /* Initialize the table */
-    for (I = 0; I < T->Slots; ++I) {
-        T->Table[I] = 0;
-    }
-}
-
-
-
-HashNode* HT_FindHash (const HashTable* T, const void* Key, unsigned Hash)
-/* Find the node with the given key. Differs from HT_Find in that the hash
-** for the key is precalculated and passed to the function.
-*/
-{
-    HashNode* N;
-
-    /* If we don't have a table, there's nothing to find */
-    if (T->Table == 0) {
-        return 0;
-    }
-
-    /* Search for the entry in the given chain */
-    N = T->Table[Hash % T->Slots];
-    while (N) {
-
-        /* First compare the full hash, to avoid calling the compare function
-        ** if it is not really necessary.
-        */
-        if (N->Hash == Hash &&
-            T->Func->Compare (Key, T->Func->GetKey (N)) == 0) {
-            /* Found */
-            break;
-        }
-
-        /* Not found, next entry */
-        N = N->Next;
-    }
-
-    /* Return what we found */
-    return N;
-}
-
-
-
-void* HT_Find (const HashTable* T, const void* Key)
-/* Find the entry with the given key and return it */
-{
-    /* Search for the entry */
-    return HT_FindHash (T, Key, T->Func->GenHash (Key));
-}
-
-
-
-void HT_Insert (HashTable* T, void* Entry)
-/* Insert an entry into the given hash table */
-{
-    HashNode* N;
-    unsigned RHash;
-
-    /* If we don't have a table, we need to allocate it now */
-    if (T->Table == 0) {
-        HT_Alloc (T);
-    }
-
-    /* The first member of Entry is also the hash node */
-    N = Entry;
-
-    /* Generate the hash over the node key. */
-    N->Hash = T->Func->GenHash (T->Func->GetKey (N));
-
-    /* Calculate the reduced hash */
-    RHash = N->Hash % T->Slots;
-
-    /* Insert the entry into the correct chain */
-    N->Next = T->Table[RHash];
-    T->Table[RHash] = N;
-
-    /* One more entry */
-    ++T->Count;
-}
-
-
-
-void HT_Remove (HashTable* T, void* Entry)
-/* Remove an entry from the given hash table */
-{
-    /* The first member of Entry is also the hash node */
-    HashNode* N = Entry;
-
-    /* Calculate the reduced hash, which is also the slot number */
-    unsigned Slot = N->Hash % T->Slots;
-
-    /* Remove the entry from the single linked list */
-    HashNode** Q = &T->Table[Slot];
-    while (1) {
-        /* If the pointer is NULL, the node is not in the table which we will
-        ** consider a serious error.
-        */
-        CHECK (*Q != 0);
-        if (*Q == N) {
-            /* Found - remove it */
-            *Q = N->Next;
-            --T->Count;
-            break;
-        }
-        /* Next node */
-        Q = &(*Q)->Next;
-    }
-}
-
-
-
-void HT_Walk (HashTable* T, int (*F) (void* Entry, void* Data), void* Data)
-/* Walk over all nodes of a hash table, optionally deleting entries from the
-** table. For each node, the user supplied function F is called, passing a
-** pointer to the entry, and the data pointer passed to HT_Walk by the caller.
-** If F returns true, the node is deleted from the hash table otherwise it's
-** left in place. While deleting the node, the node is not accessed, so it is
-** safe for F to free the memory associcated with the entry.
-*/
-{
-    unsigned I;
-
-    /* If we don't have a table there are no entries to walk over */
-    if (T->Table == 0) {
-        return;
-    }
-
-    /* Walk over all chains */
-    for (I = 0; I < T->Slots; ++I) {
-
-        /* Get the pointer to the first entry of the hash chain */
-        HashNode** Cur = &T->Table[I];
-
-        /* Walk over all entries in this chain */
-        while (*Cur) {
-            /* Fetch the next node in chain now, because F() may delete it */
-            HashNode* Next = (*Cur)->Next;
-            /* Call the user function. N is also the pointer to the entry. If
-            ** the function returns true, the entry is to be deleted.
-            */
-            if (F (*Cur, Data)) {
-                /* Delete the node from the chain */
-                *Cur = Next;
-                --T->Count;
-            } else {
-                /* Next node in chain */
-                Cur = &(*Cur)->Next;
-            }
-        }
-    }
-}
diff --git a/src/common/hashtab.h b/src/common/hashtab.h
deleted file mode 100644 (file)
index f110fa1..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 hashtab.h                                 */
-/*                                                                           */
-/*                            Generic hash table                             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef HASHTAB_H
-#define HASHTAB_H
-
-
-
-/* common */
-#include "inline.h"
-#include "xmalloc.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Hash table node. NOTE: This structure must be the first member of a struct
-** that is hashed by the module. Having it first allows to omit a pointer to
-** the entry itself, because the C standard guarantees that a pointer to a
-** struct can be converted to its first member.
-*/
-typedef struct HashNode HashNode;
-struct HashNode {
-    HashNode*           Next;           /* Next entry in hash list */
-    unsigned            Hash;           /* The full hash value */
-};
-
-#define STATIC_HASHNODE_INITIALIZER     { 0, 0, 0 }
-
-/* Hash table functions */
-typedef struct HashFunctions HashFunctions;
-struct HashFunctions {
-
-    unsigned (*GenHash) (const void* Key);
-    /* Generate the hash over a key. */
-
-    const void* (*GetKey) (const void* Entry);
-    /* Given a pointer to the user entry data, return a pointer to the key */
-
-    int (*Compare) (const void* Key1, const void* Key2);
-    /* Compare two keys. The function must return a value less than zero if
-    ** Key1 is smaller than Key2, zero if both are equal, and a value greater
-    ** than zero if Key1 is greater then Key2.
-    */
-};
-
-/* Hash table */
-typedef struct HashTable HashTable;
-struct HashTable {
-    unsigned                    Slots;  /* Number of table slots */
-    unsigned                    Count;  /* Number of table entries */
-    HashNode**                  Table;  /* Table, dynamically allocated */
-    const HashFunctions*        Func;   /* Table functions */
-};
-
-#define STATIC_HASHTABLE_INITIALIZER(Slots, Func)   { Slots, 0, 0, Func }
-
-
-
-/*****************************************************************************/
-/*                              struct HashNode                              */
-/*****************************************************************************/
-
-
-
-#if defined(HAVE_INLINE)
-INLINE void InitHashNode (HashNode* N)
-/* Initialize a hash node. */
-{
-    N->Next     = 0;
-}
-#else
-#define InitHashNode(N)         do { (N)->Next   = 0; } while (0)
-#endif
-
-
-
-/*****************************************************************************/
-/*                             struct HashTable                              */
-/*****************************************************************************/
-
-
-
-HashTable* InitHashTable (HashTable* T, unsigned Slots, const HashFunctions* Func);
-/* Initialize a hash table and return it */
-
-void DoneHashTable (HashTable* T);
-/* Destroy the contents of a hash table. Note: This will not free the entries
-** in the table!
-*/
-
-#if defined(HAVE_INLINE)
-INLINE HashTable* NewHashTable (unsigned Slots, const HashFunctions* Func)
-/* Create a new hash table and return it. */
-{
-    /* Allocate memory, initialize and return it */
-    return InitHashTable (xmalloc (sizeof (HashTable)), Slots, Func);
-}
-#else
-#define NewHashTable(Slots, Func) InitHashTable(xmalloc (sizeof (HashTable)), Slots, Func)
-#endif
-
-void FreeHashTable (HashTable* T);
-/* Free a hash table. Note: This will not free the entries in the table! */
-
-#if defined(HAVE_INLINE)
-INLINE unsigned HT_GetCount (const HashTable* T)
-/* Return the number of items in the table. */
-{
-    return T->Count;
-}
-#else
-#define HT_GetCount(T)  ((T)->Count)
-#endif
-
-HashNode* HT_FindHash (const HashTable* T, const void* Key, unsigned Hash);
-/* Find the node with the given key. Differs from HT_Find in that the hash
-** for the key is precalculated and passed to the function.
-*/
-
-void* HT_Find (const HashTable* T, const void* Key);
-/* Find the entry with the given key and return it */
-
-void HT_Insert (HashTable* T, void* Entry);
-/* Insert an entry into the given hash table */
-
-void HT_Remove (HashTable* T, void* Entry);
-/* Remove an entry from the given hash table */
-
-void HT_Walk (HashTable* T, int (*F) (void* Entry, void* Data), void* Data);
-/* Walk over all nodes of a hash table, optionally deleting entries from the
-** table. For each node, the user supplied function F is called, passing a
-** pointer to the entry, and the data pointer passed to HT_Walk by the caller.
-** If F returns true, the node is deleted from the hash table otherwise it's
-** left in place. While deleting the node, the node is not accessed, so it is
-** safe for F to free the memory associcated with the entry.
-*/
-
-
-
-/* End of hashtab.h */
-
-#endif
diff --git a/src/common/hlldbgsym.h b/src/common/hlldbgsym.h
deleted file mode 100644 (file)
index 0edb7e2..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 hlldbgsym.h                               */
-/*                                                                           */
-/*              Definitions for high level language debug symbols            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2011,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* This module contains definitions for high level language symbols passed
-** down from the C compiler. They're collected in the assembler and written to
-** the object file in binary form, then again read by the linker and finally
-** placed in the debug info file.
-*/
-
-
-
-#ifndef HLLDBGSYM_H
-#define HLLDBGSYM_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Flag bits that tell something about the symbol */
-#define HLL_TYPE_FUNC   0x0000U                 /* Function */
-#define HLL_TYPE_SYM    0x0001U                 /* Symbol */
-#define HLL_TYPE_MASK   0x0007U
-#define HLL_GET_TYPE(x) ((x) & HLL_TYPE_MASK)
-#define HLL_IS_FUNC(x)  (HLL_GET_TYPE(x) == HLL_TYPE_FUNC)
-#define HLL_IS_SYM(x)   (HLL_GET_TYPE(x) == HLL_TYPE_SYM)
-
-/* Storage class */
-#define HLL_SC_AUTO     0x0000U                 /* On stack */
-#define HLL_SC_REG      0x0008U                 /* Register */
-#define HLL_SC_STATIC   0x0010U                 /* Static linkage */
-#define HLL_SC_EXTERN   0x0018U                 /* External linkage */
-#define HLL_SC_MASK     0x0078U
-#define HLL_GET_SC(x)   ((x) & HLL_SC_MASK)
-
-/* Other information */
-#define HLL_DATA_SYM    0x0080U                 /* Attached asm symbol */
-#define HLL_HAS_SYM(x)  (((x) & HLL_DATA_SYM) != 0)
-
-
-
-/* End of hlldbgsyms.h */
-
-#endif
diff --git a/src/common/inline.h b/src/common/inline.h
deleted file mode 100644 (file)
index b90b3d1..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 inline.h                                  */
-/*                                                                           */
-/*              Definitions to use the inline compiler feature               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2005  Ullrich von Bassewitz                                      */
-/*                Römerstraße 52                                             */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef INLINE_H
-#define INLINE_H
-
-
-
-/*****************************************************************************/
-/*                                  Defines                                  */
-/*****************************************************************************/
-
-
-
-#if defined(__GNUC__) && !defined(DISABLE_INLINE)
-#  define HAVE_INLINE   1
-#  define INLINE        static __inline__
-#endif
-
-
-
-/* End of inline.h */
-
-#endif
diff --git a/src/common/intstack.c b/src/common/intstack.c
deleted file mode 100644 (file)
index 3f99e88..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                intstack.c                                 */
-/*                                                                           */
-/*                  Integer stack used for program settings                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004-2010, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "check.h"
-#include "intstack.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-long IS_Get (const IntStack* S)
-/* Get the value on top of an int stack */
-{
-    PRECONDITION (S->Count > 0);
-    return S->Stack[S->Count-1];
-}
-
-
-
-void IS_Set (IntStack* S, long Val)
-/* Set the value on top of an int stack */
-{
-    PRECONDITION (S->Count > 0);
-    S->Stack[S->Count-1] = Val;
-}
-
-
-
-void IS_Drop (IntStack* S)
-/* Drop a value from an int stack */
-{
-    PRECONDITION (S->Count > 0);
-    --S->Count;
-}
-
-
-
-void IS_Push (IntStack* S, long Val)
-/* Push a value onto an int stack */
-{
-    PRECONDITION (S->Count < sizeof (S->Stack) / sizeof (S->Stack[0]));
-    S->Stack[S->Count++] = Val;
-}
-
-
-
-long IS_Pop (IntStack* S)
-/* Pop a value from an int stack */
-{
-    PRECONDITION (S->Count > 0);
-    return S->Stack[--S->Count];
-}
diff --git a/src/common/intstack.h b/src/common/intstack.h
deleted file mode 100644 (file)
index 313a846..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                intstack.h                                 */
-/*                                                                           */
-/*                  Integer stack used for program settings                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004-2010, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef INTSTACK_H
-#define INTSTACK_H
-
-
-
-#include "inline.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-typedef struct IntStack IntStack;
-struct IntStack {
-    unsigned    Count;
-    long        Stack[8];
-};
-
-/* An initializer for an empty int stack */
-#define STATIC_INTSTACK_INITIALIZER     { 0, { 0, 0, 0, 0, 0, 0, 0, 0 } }
-
-/* Declare an int stack with the given value as first element */
-#define INTSTACK(Val)   { 1, { Val, 0, 0, 0, 0, 0, 0, 0 } }
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-#if defined(HAVE_INLINE)
-INLINE int IS_IsFull (const IntStack* S)
-/* Return true if there is no space left on the given int stack */
-{
-    return (S->Count >= sizeof (S->Stack) / sizeof (S->Stack[0]));
-}
-#else
-#  define IS_IsFull(S)  ((S)->Count >= sizeof ((S)->Stack) / sizeof ((S)->Stack[0]))
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int IS_IsEmpty (const IntStack* S)
-/* Return true if there are no values on the given int stack */
-{
-    return (S->Count == 0);
-}
-#else
-#  define IS_IsEmpty(S)  ((S)->Count == 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned IS_GetCount (const IntStack* S)
-/* Return the number of elements on the given int stack */
-{
-    return S->Count;
-}
-#else
-#  define IS_GetCount(S)        (S)->Count
-#endif
-
-long IS_Get (const IntStack* S);
-/* Get the value on top of an int stack */
-
-void IS_Set (IntStack* S, long Val);
-/* Set the value on top of an int stack */
-
-void IS_Drop (IntStack* S);
-/* Drop a value from an int stack */
-
-void IS_Push (IntStack* S, long Val);
-/* Push a value onto an int stack */
-
-long IS_Pop (IntStack* S);
-/* Pop a value from an int stack */
-
-
-
-/* End of intstack.h */
-
-#endif
diff --git a/src/common/inttypes.h b/src/common/inttypes.h
deleted file mode 100644 (file)
index 0d9cb75..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                inttypes.h                                 */
-/*                                                                           */
-/*                           Define integer types                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004      Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef INTTYPES_H
-#define INTTYPES_H
-
-
-
-/* If we have stdint.h, include it, otherwise try some quesswork on types.
-** gcc and msvc don't define __STDC_VERSION__ without special flags, so check
-** for them explicitly. Undefined symbols are replaced by zero, so a check for
-** defined(__GNUC__) or defined(_MSC_VER) is not necessary.
-*/
-#if (__STDC_VERSION__ >= 199901) || (__GNUC__ >= 3) || (_MSC_VER >= 1600)
-#include <stdint.h>
-#else
-
-/* Assume long is the largest type available, and assume that pointers can be
-** safely converted into this type and back.
-*/
-typedef long intptr_t;
-typedef unsigned long uintptr_t;
-typedef long intmax_t;
-typedef unsigned long uintmax_t;
-
-
-
-#endif
-
-
-
-/* End of inttypes.h */
-
-#endif
diff --git a/src/common/libdefs.h b/src/common/libdefs.h
deleted file mode 100644 (file)
index d91084c..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 libdefs.h                                 */
-/*                                                                           */
-/*                         Library file definitions                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef LIBDEFS_H
-#define LIBDEFS_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Defines for magic and version */
-#define LIB_MAGIC       0x7A55616E
-#define LIB_VERSION     0x000D
-
-/* Size of an library file header */
-#define LIB_HDR_SIZE    12
-
-
-
-/* Header structure for the library */
-typedef struct LibHeader LibHeader;
-struct LibHeader {
-    unsigned long       Magic;          /* 32: Magic number */
-    unsigned            Version;        /* 16: Version number */
-    unsigned            Flags;          /* 16: flags */
-    unsigned long       IndexOffs;      /* 32: Offset to directory */
-};
-
-
-
-/* End of libdefs.h */
-
-#endif
diff --git a/src/common/lidefs.h b/src/common/lidefs.h
deleted file mode 100644 (file)
index 29d47b5..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 lidefs.h                                  */
-/*                                                                           */
-/*                     Definitions for line information                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2011,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                70794 Filderstadt                                          */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef LIDEFS_H
-#define LIDEFS_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Types of line infos. */
-#define LI_TYPE_ASM             0U      /* Normal assembler source */
-#define LI_TYPE_EXT             1U      /* Externally supplied line info */
-#define LI_TYPE_MACRO           2U      /* Macro expansion */
-#define LI_TYPE_MACPARAM        3U      /* Macro parameter expansion */
-
-/* Make a combined value from type and count */
-#define LI_MAKE_TYPE(T,C)       ((T) | (((unsigned)(C)) << 2U))
-
-/* Extract type and count from a type field */
-#define LI_GET_TYPE(T)          ((T) & 0x03U)
-#define LI_GET_COUNT(T)         ((unsigned)(T) >> 2)
-
-
-
-/* End of lidefs.h */
-
-#endif
diff --git a/src/common/matchpat.c b/src/common/matchpat.c
deleted file mode 100644 (file)
index ac24c39..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  matchpat.c                               */
-/*                                                                           */
-/*                       Unix shell like pattern matching                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "matchpat.h"
-
-
-
-/*****************************************************************************/
-/*                       Character bit set implementation                    */
-/*****************************************************************************/
-
-
-
-typedef unsigned char CharSet[32];      /* 256 bits */
-
-
-
-/* Clear a character set */
-#define CS_CLEAR(CS)            memset (CS, 0, sizeof (CharSet))
-
-/* Set all characters in the set */
-#define CS_SETALL(CS)           memset (CS, 0xFF, sizeof (CharSet))
-
-/* Add one char to the set */
-#define CS_ADD(CS, C)           ((CS)[(C) >> 3] |= (0x01 << ((C) & 0x07)))
-
-/* Check if a character is a member of the set */
-#define CS_CONTAINS(CS, C)      ((CS)[(C) >> 3] & (0x01 << ((C) & 0x07)))
-
-/* Invert a character set */
-#define CS_INVERT(CS)                                   \
-    do {                                                \
-        unsigned I;                                     \
-        for (I = 0; I < sizeof (CharSet); ++I) {        \
-            CS[I] ^= 0xFF;                              \
-        }                                               \
-    } while (0)
-
-
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-/* Escape character */
-#define ESCAPE_CHAR     '\\'
-
-/* Utility macro used in RecursiveMatch */
-#define IncPattern()    Pattern++;                      \
-                        if (*Pattern == '\0') {         \
-                            return 0;                   \
-                        }
-
-
-
-static int RealChar (const unsigned char* Pattern)
-/* Return the next character from Pattern. If the next character is the
-** escape character, skip it and return the following.
-*/
-{
-    if (*Pattern == ESCAPE_CHAR) {
-        Pattern++;
-        return (*Pattern == '\0') ? -1 : *Pattern;
-    } else {
-        return *Pattern;
-    }
-}
-
-
-
-static int RecursiveMatch (const unsigned char* Source, const unsigned char* Pattern)
-/* A recursive pattern matcher */
-{
-
-    CharSet CS;
-
-    while (1) {
-
-        if (*Pattern == '\0') {
-
-            /* Reached the end of Pattern, what about Source? */
-            return (*Source == '\0') ? 1 : 0;
-
-        } else if (*Pattern == '*') {
-
-            if (*++Pattern == '\0') {
-                /* A trailing '*' is always a match */
-                return 1;
-            }
-
-            /* Check the rest of the string */
-            while (*Source) {
-                if (RecursiveMatch (Source++, Pattern)) {
-                    /* Match! */
-                    return 1;
-                }
-            }
-
-            /* No match... */
-            return 0;
-
-        } else if (*Source == '\0') {
-
-            /* End of Source reached, no match */
-            return 0;
-
-        } else {
-
-            /* Check a single char. Build a set of all possible characters in
-            ** CS, then check if the current char of Source is contained in
-            ** there.
-            */
-            CS_CLEAR (CS);      /* Clear the character set */
-
-            if (*Pattern == '?') {
-
-                /* All chars are allowed */
-                CS_SETALL (CS);
-                ++Pattern;                      /* Skip '?' */
-
-            } else if (*Pattern == ESCAPE_CHAR) {
-
-                /* Use the next char as is */
-                IncPattern ();
-                CS_ADD (CS, *Pattern);
-                ++Pattern;                      /* Skip the character */
-
-            } else if (*Pattern == '[') {
-
-                /* A set follows */
-                int Invert = 0;
-                IncPattern ();
-                if (*Pattern == '!') {
-                    IncPattern ();
-                    Invert = 1;
-                }
-                while (*Pattern != ']') {
-
-                    int C1;
-                    if ((C1 = RealChar (Pattern)) == -1) {
-                        return 0;
-                    }
-                    IncPattern ();
-                    if (*Pattern != '-') {
-                        CS_ADD (CS, C1);
-                    } else {
-                        int C2;
-                        unsigned char C;
-                        IncPattern ();
-                        if ((C2 = RealChar (Pattern)) == -1) {
-                            return 0;
-                        }
-                        IncPattern ();
-                        for (C = C1; C <= C2; C++) {
-                            CS_ADD (CS, C);
-                        }
-                    }
-                }
-                /* Skip ']' */
-                ++Pattern;
-                if (Invert) {
-                    /* Reverse all bits in the set */
-                    CS_INVERT (CS);
-                }
-
-            } else {
-
-                /* Include the char in the charset, then skip it */
-                CS_ADD (CS, *Pattern);
-                ++Pattern;
-
-            }
-
-            if (!CS_CONTAINS (CS, *Source)) {
-                /* No match */
-                return 0;
-            }
-            ++Source;
-        }
-    }
-}
-
-
-
-
-int MatchPattern (const char* Source, const char* Pattern)
-/* Match the string in Source against Pattern. Pattern may contain the
-** wildcards '*', '?', '[abcd]' '[ab-d]', '[!abcd]', '[!ab-d]'. The
-** function returns a value of zero if Source does not match Pattern,
-** otherwise a non zero value is returned. If Pattern contains an invalid
-** wildcard pattern (e.g. 'A[x'), the function returns zero.
-*/
-{
-    /* Handle the trivial cases */
-    if (Pattern == 0 || *Pattern == '\0') {
-        return (Source == 0 || *Source == '\0');
-    }
-
-    /* Do the real thing */
-    return RecursiveMatch ((const unsigned char*) Source, (const unsigned char*) Pattern);
-}
diff --git a/src/common/matchpat.h b/src/common/matchpat.h
deleted file mode 100644 (file)
index eb1c80d..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  matchpat.h                               */
-/*                                                                           */
-/*                       Unix shell like pattern matching                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef MATCHPAT_H
-#define MATCHPAT_H
-
-
-
-#include "attrib.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int MatchPattern (const char* Source, const char* Pattern);
-/* Match the string in Source against Pattern. Pattern may contain the
-** wildcards '*', '?', '[abcd]' '[ab-d]', '[!abcd]', '[!ab-d]'. The
-** function returns a value of zero if Source does not match Pattern,
-** otherwise a non zero value is returned. If Pattern contains an invalid
-** wildcard pattern (e.g. 'A[x'), the function returns zero.
-*/
-
-
-
-/* End of matchpat.h */
-
-#endif
diff --git a/src/common/mmodel.c b/src/common/mmodel.c
deleted file mode 100644 (file)
index 05f2a4b..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 mmodel.c                                  */
-/*                                                                           */
-/*                         Memory model definitions                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "addrsize.h"
-#include "mmodel.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Memory model in use */
-mmodel_t MemoryModel = MMODEL_UNKNOWN;
-
-/* Table with memory model names */
-static const char* MemoryModelNames[MMODEL_COUNT] = {
-    "near",
-    "far",
-    "huge",
-};
-
-/* Address sizes for the segments */
-unsigned char CodeAddrSize = ADDR_SIZE_ABS;
-unsigned char DataAddrSize = ADDR_SIZE_ABS;
-unsigned char ZpAddrSize   = ADDR_SIZE_ZP;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-mmodel_t FindMemoryModel (const char* Name)
-/* Find a memory model by name. Return MMODEL_UNKNOWN for an unknown name. */
-{
-    unsigned I;
-
-    /* Check all CPU names */
-    for (I = 0; I < MMODEL_COUNT; ++I) {
-        if (strcmp (MemoryModelNames[I], Name) == 0) {
-            return (mmodel_t)I;
-        }
-    }
-
-    /* Not found */
-    return MMODEL_UNKNOWN;
-}
-
-
-
-void SetMemoryModel (mmodel_t Model)
-/* Set the memory model updating the MemoryModel variables and the address
-** sizes for the segments.
-*/
-{
-    /* Remember the memory model */
-    MemoryModel = Model;
-
-    /* Set the address sizes for the segments */
-    switch (MemoryModel) {
-
-        case MMODEL_NEAR:
-            /* Code: near, data: near */
-            CodeAddrSize = ADDR_SIZE_ABS;
-            DataAddrSize = ADDR_SIZE_ABS;
-            break;
-
-        case MMODEL_FAR:
-            /* Code: far, data: near */
-            CodeAddrSize = ADDR_SIZE_FAR;
-            DataAddrSize = ADDR_SIZE_ABS;
-            break;
-
-        case MMODEL_HUGE:
-            /* Code: far, data: far */
-            CodeAddrSize = ADDR_SIZE_FAR;
-            DataAddrSize = ADDR_SIZE_FAR;
-            break;
-
-        default:
-            break;
-    }
-
-    /* Zeropage is always zeropage */
-    ZpAddrSize = ADDR_SIZE_ZP;
-}
diff --git a/src/common/mmodel.h b/src/common/mmodel.h
deleted file mode 100644 (file)
index 350da44..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 mmodel.h                                  */
-/*                                                                           */
-/*                         Memory model definitions                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef MMODEL_H
-#define MMODEL_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Memory models */
-typedef enum {
-    MMODEL_UNKNOWN  = -1,
-    MMODEL_NEAR,                /* Code: near, data: near */
-    MMODEL_FAR,                 /* Code: far, data: near */
-    MMODEL_HUGE,                /* Code: far, data: far */
-    MMODEL_COUNT                /* Number of memory models */
-} mmodel_t;
-
-/* Memory model in use */
-extern mmodel_t MemoryModel;
-
-/* Address sizes for the segments */
-extern unsigned char CodeAddrSize;
-extern unsigned char DataAddrSize;
-extern unsigned char ZpAddrSize;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-mmodel_t FindMemoryModel (const char* Name);
-/* Find a memory model by name. Return MMODEL_UNKNOWN for an unknown name. */
-
-void SetMemoryModel (mmodel_t Model);
-/* Set the memory model updating the MemoryModel variables and the address
-** sizes for the segments.
-*/
-
-
-
-/* End of mmodel.h */
-
-#endif
diff --git a/src/common/objdefs.h b/src/common/objdefs.h
deleted file mode 100644 (file)
index 537ed2d..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 objdefs.h                                 */
-/*                                                                           */
-/*                          Object file definitions                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OBJDEFS_H
-#define OBJDEFS_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Defines for magic and version */
-#define OBJ_MAGIC       0x616E7A55
-#define OBJ_VERSION     0x0011
-
-/* Size of an object file header */
-#define OBJ_HDR_SIZE    (24*4)
-
-/* Flag bits */
-#define OBJ_FLAGS_DBGINFO       0x0001  /* File has debug info */
-#define OBJ_HAS_DBGINFO(x)      (((x) & OBJ_FLAGS_DBGINFO) != 0)
-
-
-
-/* Header structure */
-typedef struct ObjHeader ObjHeader;
-struct ObjHeader {
-    unsigned long       Magic;          /* 32: Magic number */
-    unsigned            Version;        /* 16: Version number */
-    unsigned            Flags;          /* 16: flags */
-    unsigned long       OptionOffs;     /* 32: Offset to option table */
-    unsigned long       OptionSize;     /* 32: Size of options */
-    unsigned long       FileOffs;       /* 32: Offset to file table */
-    unsigned long       FileSize;       /* 32: Size of files */
-    unsigned long       SegOffs;        /* 32: Offset to segment table */
-    unsigned long       SegSize;        /* 32: Size of segment table */
-    unsigned long       ImportOffs;     /* 32: Offset to import list */
-    unsigned long       ImportSize;     /* 32: Size of import list */
-    unsigned long       ExportOffs;     /* 32: Offset to export list */
-    unsigned long       ExportSize;     /* 32: Size of export list */
-    unsigned long       DbgSymOffs;     /* 32: Offset to list of debug symbols */
-    unsigned long       DbgSymSize;     /* 32: Size of debug symbols */
-    unsigned long       LineInfoOffs;   /* 32: Offset to list of line infos */
-    unsigned long       LineInfoSize;   /* 32: Size of line infos */
-    unsigned long       StrPoolOffs;    /* 32: Offset to string pool */
-    unsigned long       StrPoolSize;    /* 32: Size of string pool */
-    unsigned long       AssertOffs;     /* 32: Offset to assertion table */
-    unsigned long       AssertSize;     /* 32: Size of assertion table */
-    unsigned long       ScopeOffs;      /* 32: Offset into scope table */
-    unsigned long       ScopeSize;      /* 32: Size of scope table */
-    unsigned long       SpanOffs;       /* 32: Offset into span table */
-    unsigned long       SpanSize;       /* 32: Size of span table */
-};
-
-
-
-/* End of objdefs.h */
-
-#endif
diff --git a/src/common/optdefs.h b/src/common/optdefs.h
deleted file mode 100644 (file)
index fae5176..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 optdefs.h                                 */
-/*                                                                           */
-/*                    Definitions for object file options                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OPTDEFS_H
-#define OPTDEFS_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Type of options */
-#define OPT_ARGMASK     0xC0            /* Mask for argument */
-#define OPT_ARGSTR      0x00            /* String argument */
-#define OPT_ARGNUM      0x40            /* Numerical argument */
-
-#define OPT_COMMENT     (OPT_ARGSTR+0)  /* Generic comment */
-#define OPT_AUTHOR      (OPT_ARGSTR+1)  /* Author specification */
-#define OPT_TRANSLATOR  (OPT_ARGSTR+2)  /* Translator specification */
-#define OPT_COMPILER    (OPT_ARGSTR+3)  /* Compiler specification */
-#define OPT_OS          (OPT_ARGSTR+4)  /* Operating system specification */
-
-#define OPT_DATETIME    (OPT_ARGNUM+0)  /* Date/time of translation */
-
-
-
-/* Structure to encode options */
-typedef struct Option Option;
-struct Option {
-    Option*             Next;           /* For list of options */
-    unsigned char       Type;           /* Type of option */
-    unsigned long       Val;            /* Value attribute or string index */
-};
-
-
-
-/* End of optdefs.h */
-
-#endif
diff --git a/src/common/print.c b/src/common/print.c
deleted file mode 100644 (file)
index 70f43bc..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  print.c                                  */
-/*                                                                           */
-/*                              Program output                               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdarg.h>
-
-/* common */
-#include "print.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-unsigned char Verbosity = 0;            /* Verbose operation flag */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Print (FILE* F, unsigned V, const char* Format, ...)
-/* Output according to Verbosity */
-{
-    va_list ap;
-
-    /* Check the verbosity */
-    if (V > Verbosity) {
-        /* Don't output this message */
-        return;
-    }
-
-    /* Output */
-    va_start (ap, Format);
-    vfprintf (F, Format, ap);
-    va_end (ap);
-}
diff --git a/src/common/print.h b/src/common/print.h
deleted file mode 100644 (file)
index d570d3e..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  print.h                                  */
-/*                                                                           */
-/*                              Program output                               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef PRINT_H
-#define PRINT_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "attrib.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-extern unsigned char Verbosity;         /* Verbose operation flag */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Print (FILE* F, unsigned V, const char* Format, ...)
-        attribute ((format (printf, 3, 4)));
-/* Output according to Verbosity */
-
-
-
-/* End of print.h */
-
-#endif
diff --git a/src/common/scopedefs.h b/src/common/scopedefs.h
deleted file mode 100644 (file)
index 31e493f..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 symdefs.h                                 */
-/*                                                                           */
-/*               Scope definitions for the bin65 binary utils                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2011,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SCOPEDEFS_H
-#define SCOPEDEFS_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Size of scope available? */
-#define SCOPE_SIZELESS          0x00U   /* No scope size available */
-#define SCOPE_SIZE              0x01U   /* Scope has a size */
-#define SCOPE_MASK_SIZE         0x01U   /* Size mask */
-
-#define SCOPE_HAS_SIZE(x)       (((x) & SCOPE_MASK_SIZE) == SCOPE_SIZE)
-
-/* Does the scope has a label? */
-#define SCOPE_UNLABELED         0x00U   /* Scope has no label */
-#define SCOPE_LABELED           0x02U   /* Scope has a label */
-#define SCOPE_MASK_LABEL        0x02U   /* Label size */
-
-#define SCOPE_HAS_LABEL(x)      (((x) & SCOPE_MASK_LABEL) == SCOPE_LABELED)
-
-
-
-/* Scope types */
-enum {
-    SCOPE_GLOBAL,                       /* Global level */
-    SCOPE_FILE,                         /* File level */
-    SCOPE_SCOPE,                        /* .SCOPE/.PROC */
-    SCOPE_HAS_DATA = SCOPE_SCOPE,       /* Last scope that contains data */
-    SCOPE_STRUCT,                       /* .STRUCT/.UNION */
-    SCOPE_ENUM,                         /* .ENUM */
-    SCOPE_UNDEF    = 0xFF
-};
-
-
-
-/* End of scopedefs.h */
-
-#endif
diff --git a/src/common/searchpath.c b/src/common/searchpath.c
deleted file mode 100644 (file)
index 78443f3..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                               searchpath.h                                */
-/*                                                                           */
-/*                         Handling of search paths                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-#include <string.h>
-#if defined(_WIN32)
-#  include <windows.h>
-#endif
-#if defined(_MSC_VER)
-/* Microsoft compiler */
-#  include <io.h>
-#else
-/* Anyone else */
-#  include <unistd.h>
-#endif
-
-/* common */
-#include "coll.h"
-#include "searchpath.h"
-#include "strbuf.h"
-#include "xmalloc.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static char* CleanupPath (const char* Path)
-/* Prepare and return a clean copy of Path */
-{
-    unsigned Len;
-    char*    NewPath;
-
-    /* Get the length of the path */
-    Len = strlen (Path);
-
-    /* Check for a trailing path separator and remove it */
-    if (Len > 0 && (Path[Len-1] == '\\' || Path[Len-1] == '/')) {
-        --Len;
-    }
-
-    /* Allocate memory for the new string */
-    NewPath = (char*) xmalloc (Len + 1);
-
-    /* Copy the path and terminate it, then return the copy */
-    memcpy (NewPath, Path, Len);
-    NewPath [Len] = '\0';
-    return NewPath;
-}
-
-
-
-static void Add (SearchPaths* P, const char* New)
-/* Cleanup a new search path and add it to the list */
-{
-    /* Add a clean copy of the path to the collection */
-    CollAppend (P, CleanupPath (New));
-}
-
-
-
-SearchPaths* NewSearchPath (void)
-/* Create a new, empty search path list */
-{
-    return NewCollection ();
-}
-
-
-
-void AddSearchPath (SearchPaths* P, const char* NewPath)
-/* Add a new search path to the end of an existing list */
-{
-    /* Allow a NULL path */
-    if (NewPath) {
-        Add (P, NewPath);
-    }
-}
-
-
-
-void AddSearchPathFromEnv (SearchPaths* P, const char* EnvVar)
-/* Add a search path from an environment variable to the end of an existing
-** list.
-*/
-{
-    AddSearchPath (P, getenv (EnvVar));
-}
-
-
-
-void AddSubSearchPathFromEnv (SearchPaths* P, const char* EnvVar, const char* SubDir)
-/* Add a search path from an environment variable, adding a subdirectory to
-** the environment variable value.
-*/
-{
-    StrBuf Dir = AUTO_STRBUF_INITIALIZER;
-
-    const char* EnvVal = getenv (EnvVar);
-    if (EnvVal == 0) {
-        /* Not found */
-        return;
-    }
-
-    /* Copy the environment variable to the buffer */
-    SB_CopyStr (&Dir, EnvVal);
-
-    /* Add a path separator if necessary */
-    if (SB_NotEmpty (&Dir)) {
-        if (SB_LookAtLast (&Dir) != '\\' && SB_LookAtLast (&Dir) != '/') {
-            SB_AppendChar (&Dir, '/');
-        }
-    }
-
-    /* Add the subdirectory and terminate the string */
-    SB_AppendStr (&Dir, SubDir);
-    SB_Terminate (&Dir);
-
-    /* Add the search path */
-    AddSearchPath (P, SB_GetConstBuf (&Dir));
-
-    /* Free the temp buffer */
-    SB_Done (&Dir);
-}
-
-
-
-void AddSubSearchPathFromWinBin (SearchPaths* P, const char* SubDir)
-{
-/* Windows only:
-** Add a search path from the running binary, adding a subdirectory to
-** the parent directory of the directory containing the binary.
-*/
-#if defined(_WIN32)
-
-    char Dir[_MAX_PATH];
-    char* Ptr;
-
-    if (GetModuleFileName (NULL, Dir, _MAX_PATH) == 0) {
-        return;
-    }
-
-    /* Remove binary name */
-    Ptr = strrchr (Dir, '\\');
-    if (Ptr == 0) {
-        return;
-    }
-    *Ptr = '\0';
-
-    /* Check for 'bin' directory */
-    Ptr = strrchr (Dir, '\\');
-    if (Ptr == 0) {
-        return;
-    }
-    if (strcmp (Ptr++, "\\bin") != 0) {
-        return;
-    }
-
-    /* Append SubDir */
-    strcpy (Ptr, SubDir);
-
-    /* Add the search path */
-    AddSearchPath (P, Dir);
-
-#else
-
-    (void) P;
-    (void) SubDir;
-
-#endif
-}
-
-
-int PushSearchPath (SearchPaths* P, const char* NewPath)
-/* Add a new search path to the head of an existing search path list, provided
-** that it's not already there. If the path is already at the first position,
-** return zero, otherwise return a non zero value.
-*/
-{                                      
-    /* Generate a clean copy of NewPath */
-    char* Path = CleanupPath (NewPath);   
-
-    /* If we have paths, check if Path is already at position zero */
-    if (CollCount (P) > 0 && strcmp (CollConstAt (P, 0), Path) == 0) {
-        /* Match. Delete the copy and return to the caller */
-        xfree (Path);
-        return 0;
-    }
-
-    /* Insert a clean copy of the path at position 0, return success */
-    CollInsert (P, Path, 0);
-    return 1;
-}
-
-
-
-void PopSearchPath (SearchPaths* P)
-/* Remove a search path from the head of an existing search path list */
-{
-    /* Remove the path at position 0 */
-    xfree (CollAt (P, 0));
-    CollDelete (P, 0);
-}
-
-
-
-char* SearchFile (const SearchPaths* P, const char* File)
-/* Search for a file in a list of directories. Return a pointer to a malloced
-** area that contains the complete path, if found, return 0 otherwise.
-*/
-{
-    char* Name = 0;
-    StrBuf PathName = AUTO_STRBUF_INITIALIZER;
-
-    /* Start the search */
-    unsigned I;
-    for (I = 0; I < CollCount (P); ++I) {
-
-        /* Copy the next path element into the buffer */
-        SB_CopyStr (&PathName, CollConstAt (P, I));
-
-        /* Add a path separator and the filename */
-        if (SB_NotEmpty (&PathName)) {
-            SB_AppendChar (&PathName, '/');
-        }
-        SB_AppendStr (&PathName, File);
-        SB_Terminate (&PathName);
-
-        /* Check if this file exists */
-        if (access (SB_GetBuf (&PathName), 0) == 0) {
-            /* The file exists, we're done */
-            Name = xstrdup (SB_GetBuf (&PathName));
-            break;
-        }
-    }
-
-    /* Cleanup and return the result of the search */
-    SB_Done (&PathName);
-    return Name;
-}
diff --git a/src/common/searchpath.h b/src/common/searchpath.h
deleted file mode 100644 (file)
index 6f5bafa..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                               searchpath.h                                */
-/*                                                                           */
-/*                         Handling of search paths                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* Exports facilities to search files in a list of directories. */
-
-
-
-#ifndef SEARCHPATH_H
-#define SEARCHPATH_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Convert argument to C string */
-#define _STRINGIZE(arg) #arg
-#define  STRINGIZE(arg) _STRINGIZE(arg)
-
-/* A search path is a pointer to the list */
-typedef struct Collection SearchPaths;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-SearchPaths* NewSearchPath (void);
-/* Create a new, empty search path list */
-
-void AddSearchPath (SearchPaths* P, const char* NewPath);
-/* Add a new search path to the end of an existing list */
-
-void AddSearchPathFromEnv (SearchPaths* P, const char* EnvVar);
-/* Add a search path from an environment variable to the end of an existing
-** list.
-*/
-
-void AddSubSearchPathFromEnv (SearchPaths* P, const char* EnvVar, const char* SubDir);
-/* Add a search path from an environment variable, adding a subdirectory to
-** the environment variable value.
-*/
-
-void AddSubSearchPathFromWinBin (SearchPaths* P, const char* SubDir);
-/* Windows only:
-** Add a search path from the running binary, adding a subdirectory to
-** the parent directory of the directory containing the binary.
-*/
-
-int PushSearchPath (SearchPaths* P, const char* NewPath);
-/* Add a new search path to the head of an existing search path list, provided
-** that it's not already there. If the path is already at the first position,
-** return zero, otherwise return a non zero value.
-*/
-
-void PopSearchPath (SearchPaths* P);
-/* Remove a search path from the head of an existing search path list */
-
-char* SearchFile (const SearchPaths* P, const char* File);
-/* Search for a file in a list of directories. Return a pointer to a malloced
-** area that contains the complete path, if found, return 0 otherwise.
-*/
-
-
-
-/* End of searchpath.h */
-
-#endif
diff --git a/src/common/segdefs.h b/src/common/segdefs.h
deleted file mode 100644 (file)
index 10a3665..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 segdefs.h                                 */
-/*                                                                           */
-/*                     Constants and flags for segments                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SEGDEFS_H
-#define SEGDEFS_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Segment flags */
-#define SEG_FLAG_NONE           0x00
-
-
-
-/* End of segdefs.h */
-
-#endif
diff --git a/src/common/segnames.c b/src/common/segnames.c
deleted file mode 100644 (file)
index bb9aac3..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  segnames.h                               */
-/*                                                                           */
-/*                           Default segment names                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "chartype.h"
-#include "segnames.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int ValidSegName (const char* Name)
-/* Return true if the given segment name is valid, return false otherwise */
-{
-    /* Must start with '_' or a letter */
-    if ((*Name != '_' && !IsAlpha(*Name)) || strlen(Name) > 80) {
-        return 0;
-    }
-
-    /* Can have letters, digits or the underline */
-    while (*++Name) {
-        if (*Name != '_' && !IsAlNum(*Name)) {
-            return 0;
-        }
-    }
-
-    /* Name is ok */
-    return 1;
-}
diff --git a/src/common/segnames.h b/src/common/segnames.h
deleted file mode 100644 (file)
index 0d57d6a..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  segnames.h                               */
-/*                                                                           */
-/*                           Default segment names                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SEGNAMES_H
-#define SEGNAMES_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Default segment names */
-#define SEGNAME_NULL     "NULL"
-#define SEGNAME_ZEROPAGE "ZEROPAGE"
-#define SEGNAME_DATA     "DATA"
-#define SEGNAME_BSS      "BSS"
-#define SEGNAME_RODATA   "RODATA"
-#define SEGNAME_CODE     "CODE"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int ValidSegName (const char* Name);
-/* Return true if the given segment name is valid, return false otherwise */
-
-
-
-/* End of segnames.h */
-
-#endif
diff --git a/src/common/shift.c b/src/common/shift.c
deleted file mode 100644 (file)
index 16b9d0c..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  shift.c                                  */
-/*                                                                           */
-/*                            Safe shift routines                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* According to the C standard, shifting a data type by the number of bits it
-** has causes undefined behaviour. So
-**
-**      unsigned long l = 1;
-**      unsigned u =32;
-**      l <<= u;
-**
-** may be illegal. The functions in this module behave safely in that respect,
-** and they use proper casting to distinguish signed from unsigned shifts.
-** They are not a general purpose replacement for the shift operator!
-*/
-
-
-
-#include <limits.h>
-
-/* common */
-#include "shift.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-long asl_l (long l, unsigned count)
-/* Arithmetic shift left l by count. */
-{
-    while (1) {
-        if (count >= CHAR_BIT * sizeof (l)) {
-            l <<= (CHAR_BIT * sizeof (l) - 1);
-            count -= (CHAR_BIT * sizeof (l) - 1);
-        } else {
-            l <<= count;
-            break;
-        }
-    }
-    return l;
-}
-
-
-
-long asr_l (long l, unsigned count)
-/* Arithmetic shift right l by count */
-{
-    while (1) {
-        if (count >= CHAR_BIT * sizeof (l)) {
-            l >>= (CHAR_BIT * sizeof (l) - 1);
-            count -= (CHAR_BIT * sizeof (l) - 1);
-        } else {
-            l >>= count;
-            break;
-        }
-    }
-    return l;
-}
-
-
-
-unsigned long shl_l (unsigned long l, unsigned count)
-/* Logical shift left l by count */
-{
-    while (1) {
-        if (count >= CHAR_BIT * sizeof (l)) {
-            l <<= (CHAR_BIT * sizeof (l) - 1);
-            count -= (CHAR_BIT * sizeof (l) - 1);
-        } else {
-            l <<= count;
-            break;
-        }
-    }
-    return l;
-}
-
-
-
-unsigned long shr_l (unsigned long l, unsigned count)
-/* Logical shift right l by count */
-{
-    while (1) {
-        if (count >= CHAR_BIT * sizeof (l)) {
-            l >>= (CHAR_BIT * sizeof (l) - 1);
-            count -= (CHAR_BIT * sizeof (l) - 1);
-        } else {
-            l >>= count;
-            break;
-        }
-    }
-    return l;
-}
diff --git a/src/common/shift.h b/src/common/shift.h
deleted file mode 100644 (file)
index 9a35e52..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  shift.h                                  */
-/*                                                                           */
-/*                            Safe shift routines                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* According to the C standard, shifting a data type by the number of bits it
-** has causes undefined behaviour. So
-**
-**      unsigned long l = 1;
-**      unsigned u =32;
-**      l <<= u;
-**
-** may be illegal. The functions in this module behave safely in that respect,
-** and they use proper casting to distinguish signed from unsigned shifts.
-** They are not a general purpose replacement for the shift operator!
-*/
-
-
-
-#ifndef SHIFT_H
-#define SHIFT_H
-
-
-
-#include <limits.h>
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-long asl_l (long l, unsigned count);
-/* Arithmetic shift left l by count. */
-
-long asr_l (long l, unsigned count);
-/* Arithmetic shift right l by count */
-
-unsigned long shl_l (unsigned long l, unsigned count);
-/* Logical shift left l by count */
-
-unsigned long shr_l (unsigned long l, unsigned count);
-/* Logical shift right l by count */
-
-
-
-/* End of shift.h */
-
-#endif
diff --git a/src/common/strbuf.c b/src/common/strbuf.c
deleted file mode 100644 (file)
index 79419f1..0000000
+++ /dev/null
@@ -1,495 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 strbuf.c                                  */
-/*                                                                           */
-/*                       Variable sized string buffers                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-#include <ctype.h>
-
-/* common */
-#include "chartype.h"
-#include "strbuf.h"
-#include "va_copy.h"
-#include "xmalloc.h"
-#include "xsprintf.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* An empty string buf */
-const StrBuf EmptyStrBuf = STATIC_STRBUF_INITIALIZER;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-#if !defined(HAVE_INLINE)
-StrBuf* SB_Init (StrBuf* B)
-/* Initialize a string buffer */
-{
-    *B = EmptyStrBuf;
-    return B;
-}
-#endif
-
-
-
-StrBuf* SB_InitFromString (StrBuf* B, const char* S)
-/* Initialize a string buffer from a literal string. Beware: The buffer won't
-** store a copy but a pointer to the actual string.
-*/
-{
-    B->Allocated = 0;
-    B->Len       = strlen (S);
-    B->Index     = 0;
-    B->Buf       = (char*) S;
-    return B;
-}
-
-
-
-void SB_Done (StrBuf* B)
-/* Free the data of a string buffer (but not the struct itself) */
-{
-    if (B->Allocated) {
-        xfree (B->Buf);
-    }
-}
-
-
-
-StrBuf* NewStrBuf (void)
-/* Allocate, initialize and return a new StrBuf */
-{
-    /* Allocate a new string buffer */
-    StrBuf* B = xmalloc (sizeof (StrBuf));
-
-    /* Initialize the struct... */
-    SB_Init (B);
-
-    /* ...and return it */
-    return B;
-}
-
-
-
-void FreeStrBuf (StrBuf* B)
-/* Free a string buffer */
-{
-    /* Allow NULL pointers */
-    if (B) {
-        SB_Done (B);
-        xfree (B);
-    }
-}
-
-
-
-void SB_Realloc (StrBuf* B, unsigned NewSize)
-/* Reallocate the string buffer space, make sure at least NewSize bytes are
-** available.
-*/
-{
-    /* Get the current size, use a minimum of 8 bytes */
-    unsigned NewAllocated = B->Allocated;
-    if (NewAllocated == 0) {
-        NewAllocated = 8;
-    }
-
-    /* Round up to the next power of two */
-    while (NewAllocated < NewSize) {
-        NewAllocated *= 2;
-    }
-
-    /* Reallocate the buffer. Beware: The allocated size may be zero while the
-    ** length is not. This means that we have a buffer that wasn't allocated
-    ** on the heap.
-    */
-    if (B->Allocated) {
-        /* Just reallocate the block */
-        B->Buf   = xrealloc (B->Buf, NewAllocated);
-    } else {
-        /* Allocate a new block and copy */
-        B->Buf   = memcpy (xmalloc (NewAllocated), B->Buf, B->Len);
-    }
-
-    /* Remember the new block size */
-    B->Allocated = NewAllocated;
-}
-
-
-
-static void SB_CheapRealloc (StrBuf* B, unsigned NewSize)
-/* Reallocate the string buffer space, make sure at least NewSize bytes are
-** available. This function won't copy the old buffer contents over to the new
-** buffer and may be used if the old contents are overwritten later.
-*/
-{
-    /* Get the current size, use a minimum of 8 bytes */
-    unsigned NewAllocated = B->Allocated;
-    if (NewAllocated == 0) {
-        NewAllocated = 8;
-    }
-
-    /* Round up to the next power of two */
-    while (NewAllocated < NewSize) {
-        NewAllocated *= 2;
-    }
-
-    /* Free the old buffer if there is one */
-    if (B->Allocated) {
-        xfree (B->Buf);
-    }
-
-    /* Allocate a fresh block */
-    B->Buf = xmalloc (NewAllocated);
-
-    /* Remember the new block size */
-    B->Allocated = NewAllocated;
-}
-
-
-
-#if !defined(HAVE_INLINE)
-char SB_At (const StrBuf* B, unsigned Index)
-/* Get a character from the buffer */
-{
-    PRECONDITION (Index < B->Len);
-    return B->Buf[Index];
-}
-#endif
-
-
-
-void SB_Drop (StrBuf* B, unsigned Count)
-/* Drop characters from the end of the string. */
-{
-    PRECONDITION (Count <= B->Len);
-    B->Len -= Count;
-    if (B->Index > B->Len) {
-        B->Index = B->Len;
-    }
-}
-
-
-
-void SB_Terminate (StrBuf* B)
-/* Zero terminate the given string buffer. NOTE: The terminating zero is not
-** accounted for in B->Len, if you want that, you have to use AppendChar!
-*/
-{
-    unsigned NewLen = B->Len + 1;
-    if (NewLen > B->Allocated) {
-        SB_Realloc (B, NewLen);
-    }
-    B->Buf[B->Len] = '\0';
-}
-
-
-
-void SB_CopyBuf (StrBuf* Target, const char* Buf, unsigned Size)
-/* Copy Buf to Target, discarding the old contents of Target */
-{
-    if (Size) {
-        if (Target->Allocated < Size) {
-            SB_CheapRealloc (Target, Size);
-        }
-        memcpy (Target->Buf, Buf, Size);
-    }
-    Target->Len = Size;
-}
-
-
-
-#if !defined(HAVE_INLINE)
-void SB_CopyStr (StrBuf* Target, const char* S)
-/* Copy S to Target, discarding the old contents of Target */
-{
-    SB_CopyBuf (Target, S, strlen (S));
-}
-#endif
-
-
-
-#if !defined(HAVE_INLINE)
-void SB_Copy (StrBuf* Target, const StrBuf* Source)
-/* Copy Source to Target, discarding the old contents of Target */
-{
-    SB_CopyBuf (Target, Source->Buf, Source->Len);
-    Target->Index = Source->Index;
-}
-#endif
-
-
-
-void SB_AppendChar (StrBuf* B, int C)
-/* Append a character to a string buffer */
-{
-    unsigned NewLen = B->Len + 1;
-    if (NewLen > B->Allocated) {
-        SB_Realloc (B, NewLen);
-    }
-    B->Buf[B->Len] = (char) C;
-    B->Len = NewLen;
-}
-
-
-
-void SB_AppendBuf (StrBuf* B, const char* S, unsigned Size)
-/* Append a character buffer to the end of the string buffer */
-{
-    unsigned NewLen = B->Len + Size;
-    if (NewLen > B->Allocated) {
-        SB_Realloc (B, NewLen);
-    }
-    memcpy (B->Buf + B->Len, S, Size);
-    B->Len = NewLen;
-}
-
-
-
-#if !defined(HAVE_INLINE)
-void SB_AppendStr (StrBuf* B, const char* S)
-/* Append a string to the end of the string buffer */
-{
-    SB_AppendBuf (B, S, strlen (S));
-}
-#endif
-
-
-
-#if !defined(HAVE_INLINE)
-void SB_Append (StrBuf* Target, const StrBuf* Source)
-/* Append the contents of Source to Target */
-{
-    SB_AppendBuf (Target, Source->Buf, Source->Len);
-}
-#endif
-
-
-
-#if !defined(HAVE_INLINE)
-void SB_Cut (StrBuf* B, unsigned Len)
-/* Cut the contents of B at the given length. If the current length of the
-** buffer is smaller than Len, nothing will happen.
-*/
-{
-    if (Len < B->Len) {
-        B->Len = Len;
-    }
-}
-#endif
-
-
-
-void SB_Slice (StrBuf* Target, const StrBuf* Source, unsigned Start, unsigned Len)
-/* Copy a slice from Source into Target. The current contents of Target are
-** destroyed. If Start is greater than the length of Source, or if Len
-** characters aren't available, the result will be a buffer with less than Len
-** bytes.
-*/
-{
-    /* Calculate the length of the resulting buffer */
-    if (Start >= Source->Len) {
-        /* Target will be empty */
-        SB_Clear (Target);
-        return;
-    }
-    if (Start + Len > Source->Len) {
-        Len = Source->Len - Start;
-    }
-
-    /* Make sure we have enough room in the target string buffer */
-    if (Len > Target->Allocated) {
-        SB_Realloc (Target, Len);
-    }
-
-    /* Copy the slice */
-    memcpy (Target->Buf, Source->Buf + Start, Len);
-    Target->Len = Len;
-}
-
-
-
-void SB_Move (StrBuf* Target, StrBuf* Source)
-/* Move the complete contents of Source to target. This will delete the old
-** contents of Target, and Source will be empty after the call.
-*/
-{
-    /* Free the target string */
-    if (Target->Allocated) {
-        xfree (Target->Buf);
-    }
-
-    /* Move all data from Source to Target */
-    *Target = *Source;
-
-    /* Clear Source */
-    SB_Init (Source);
-}
-
-
-
-void SB_ToLower (StrBuf* S)
-/* Convert all characters in S to lower case */
-{
-    unsigned I;
-    char* B = S->Buf;
-    for (I = 0; I < S->Len; ++I, ++B) {
-        if (IsUpper (*B)) {
-            *B = tolower (*B);
-        }
-    }
-}
-
-
-
-void SB_ToUpper (StrBuf* S)
-/* Convert all characters in S to upper case */
-{
-    unsigned I;
-    char* B = S->Buf;
-    for (I = 0; I < S->Len; ++I, ++B) {
-        if (IsLower (*B)) {
-            *B = toupper (*B);
-        }
-    }
-}
-
-
-
-int SB_Compare (const StrBuf* S1, const StrBuf* S2)
-/* Do a lexical compare of S1 and S2. See strcmp for result codes. */
-{
-    int Result;
-    if (S1->Len < S2->Len) {
-        Result = memcmp (S1->Buf, S2->Buf, S1->Len);
-        if (Result == 0) {
-            /* S1 considered lesser because it's shorter */
-            Result = -1;
-        }
-    } else if (S1->Len > S2->Len) {
-        Result = memcmp (S1->Buf, S2->Buf, S2->Len);
-        if (Result == 0) {
-            /* S2 considered lesser because it's shorter */
-            Result = 1;
-        }
-    } else {
-        Result = memcmp (S1->Buf, S2->Buf, S1->Len);
-    }
-    return Result;
-}
-
-
-
-int SB_CompareStr (const StrBuf* S1, const char* S2)
-/* Do a lexical compare of S1 and S2. See strcmp for result codes. */
-{
-    int Result;
-    unsigned S2Len = strlen (S2);
-    if (S1->Len < S2Len) {
-        Result = memcmp (S1->Buf, S2, S1->Len);
-        if (Result == 0) {
-            /* S1 considered lesser because it's shorter */
-            Result = -1;
-        }
-    } else if (S1->Len > S2Len) {
-        Result = memcmp (S1->Buf, S2, S2Len);
-        if (Result == 0) {
-            /* S2 considered lesser because it's shorter */
-            Result = 1;
-        }
-    } else {
-        Result = memcmp (S1->Buf, S2, S1->Len);
-    }
-    return Result;
-}
-
-
-
-void SB_VPrintf (StrBuf* S, const char* Format, va_list ap)
-/* printf function with S as target. The function is safe, which means that
-** the current contents of S are discarded, and are allocated again with
-** a matching size for the output. The function will call FAIL when problems
-** are detected (anything that let xsnprintf return -1).
-*/
-{
-    va_list tmp;
-    int SizeNeeded;
-
-    /* Since we must determine the space needed anyway, we will try with
-    ** the currently allocated memory. If the call succeeds, we've saved
-    ** an allocation. If not, we have to reallocate and try again.
-    */
-    va_copy (tmp, ap);
-    SizeNeeded = xvsnprintf (S->Buf, S->Allocated, Format, tmp);
-    va_end (tmp);
-
-    /* Check the result, the xvsnprintf function should not fail */
-    CHECK (SizeNeeded >= 0);
-
-    /* Check if we must reallocate */
-    if ((unsigned) SizeNeeded >= S->Allocated) {
-        /* Must retry. Use CheapRealloc to avoid copying */
-        SB_CheapRealloc (S, SizeNeeded + 1);    /* Account for '\0' */
-        (void) xvsnprintf (S->Buf, S->Allocated, Format, ap);
-    }
-
-    /* Update string buffer variables */
-    S->Len = SizeNeeded;
-    S->Index = 0;
-}
-
-
-
-void SB_Printf (StrBuf* S, const char* Format, ...)
-/* vprintf function with S as target. The function is safe, which means that
-** the current contents of S are discarded, and are allocated again with
-** a matching size for the output. The function will call FAIL when problems
-** are detected (anything that let xsnprintf return -1).
-*/
-{
-    va_list ap;
-    va_start (ap, Format);
-    SB_VPrintf (S, Format, ap);
-    va_end (ap);
-}
diff --git a/src/common/strbuf.h b/src/common/strbuf.h
deleted file mode 100644 (file)
index e0602a6..0000000
+++ /dev/null
@@ -1,423 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 strbuf.h                                  */
-/*                                                                           */
-/*                       Variable sized string buffers                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef STRBUF_H
-#define STRBUF_H
-
-
-
-#include <stdarg.h>
-#include <string.h>
-
-/* common */
-#include "attrib.h"
-#include "check.h"
-#include "inline.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-typedef struct StrBuf StrBuf;
-struct StrBuf {
-    char*       Buf;                    /* Pointer to buffer */
-    unsigned    Len;                    /* Length of the string */
-    unsigned    Index;                  /* Used for reading (Get and friends) */
-    unsigned    Allocated;              /* Size of allocated memory */
-};
-
-/* An empty string buf */
-extern const StrBuf EmptyStrBuf;
-
-/* Initializer for static string bufs */
-#define STATIC_STRBUF_INITIALIZER       { 0, 0, 0, 0 }
-
-/* Initializer for auto string bufs */
-#define AUTO_STRBUF_INITIALIZER         { 0, 0, 0, 0 }
-
-/* Initialize with a string literal (beware: evaluates str twice!) */
-#define LIT_STRBUF_INITIALIZER(str)     { (char*)str, sizeof(str)-1, 0, 0 }
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-#if defined(HAVE_INLINE)
-INLINE StrBuf* SB_Init (StrBuf* B)
-/* Initialize a string buffer */
-{
-    *B = EmptyStrBuf;
-    return B;
-}
-#else
-StrBuf* SB_Init (StrBuf* B);
-#endif
-
-StrBuf* SB_InitFromString (StrBuf* B, const char* S);
-/* Initialize a string buffer from a literal string. Beware: The buffer won't
-** store a copy but a pointer to the actual string. A buffer initialized with
-** this routine may be "forgotten" without calling SB_Done, since no memory
-** has been allocated.
-*/
-
-void SB_Done (StrBuf* B);
-/* Free the data of a string buffer (but not the struct itself) */
-
-StrBuf* NewStrBuf (void);
-/* Allocate, initialize and return a new StrBuf */
-
-void FreeStrBuf (StrBuf* B);
-/* Free a string buffer */
-
-void SB_Realloc (StrBuf* B, unsigned NewSize);
-/* Reallocate the string buffer space, make sure at least NewSize bytes are
-** available.
-*/
-
-#if defined(HAVE_INLINE)
-INLINE unsigned SB_GetLen (const StrBuf* B)
-/* Return the length of the buffer contents */
-{
-    return B->Len;
-}
-#else
-#  define SB_GetLen(B)  (B)->Len
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned SB_GetIndex (const StrBuf* B)
-/* Return the user index of the string buffer */
-{
-    return B->Index;
-}
-#else
-#  define SB_GetIndex(B)  (B)->Index
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void SB_SetIndex (StrBuf* B, unsigned Index)
-/* Set the user index of the string buffer */
-{
-    B->Index = Index;
-}
-#else
-#  define SB_SetIndex(B, Idx) ((B)->Index = (Idx))
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE const char* SB_GetConstBuf (const StrBuf* B)
-/* Return a buffer pointer */
-{
-    return B->Buf;
-}
-#else
-#  define SB_GetConstBuf(B)     (B)->Buf
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE char* SB_GetBuf (StrBuf* B)
-/* Return a buffer pointer */
-{
-    return B->Buf;
-}
-#else
-#  define SB_GetBuf(B)     (B)->Buf
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE char SB_At (const StrBuf* B, unsigned Index)
-/* Get a character from the buffer */
-{
-    PRECONDITION (Index < B->Len);
-    return B->Buf[Index];
-}
-#else
-char SB_At (const StrBuf* B, unsigned Index);
-/* Get a character from the buffer */
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE char SB_AtUnchecked (const StrBuf* B, unsigned Index)
-/* Get a character from the buffer */
-{
-    return B->Buf[Index];
-}
-#else
-#  define SB_AtUnchecked(B, Index)      ((B)->Buf[Index])
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int SB_IsEmpty (const StrBuf* B)
-/* Return true if the string buffer is empty */
-{
-    return (B->Len == 0);
-}
-#else
-#  define SB_IsEmpty(B) ((B)->Len == 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE int SB_NotEmpty (const StrBuf* B)
-/* Return true if the string buffer is not empty */
-{
-    return (B->Len > 0);
-}
-#else
-#  define SB_NotEmpty(B) ((B)->Len > 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void SB_Clear (StrBuf* B)
-/* Clear the string buffer (make it empty) */
-{
-    B->Len = B->Index = 0;
-}
-#else
-#  define SB_Clear(B)   ((B)->Len = (B)->Index = 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void SB_Reset (StrBuf* B)
-/* Reset the string buffer index to zero */
-{
-    B->Index = 0;
-}
-#else
-#  define SB_Reset(B)   ((B)->Index = 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE char SB_Get (StrBuf* B)
-/* Return the next character from the string incrementing Index. Returns NUL
-** if the end of the string is reached.
-*/
-{
-    return (B->Index < B->Len)? B->Buf[B->Index++] : '\0';
-}
-#else
-#  define SB_Get(B)     (((B)->Index < (B)->Len)? (B)->Buf[(B)->Index++] : '\0')
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE char SB_Peek (const StrBuf* B)
-/* Look at the next character from the string without incrementing Index.
-** Returns NUL if the end of the string is reached.
-*/
-{
-    return (B->Index < B->Len)? B->Buf[B->Index] : '\0';
-}
-#else
-#  define SB_Peek(B)     (((B)->Index < (B)->Len)? (B)->Buf[(B)->Index] : '\0')
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE char SB_LookAt (const StrBuf* B, unsigned Index)
-/* Look at a specific character from the string. Returns NUL if the given
-** index is greater than the size of the string.
-*/
-{
-    return (Index < B->Len)? B->Buf[Index] : '\0';
-}
-#else
-#  define SB_LookAt(B,Index)     (((Index) < (B)->Len)? (B)->Buf[(Index)] : '\0')
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE char SB_LookAtLast (const StrBuf* B)
-/* Look at the last character from the string. Returns NUL if the string buffer
-** is empty.
-*/
-{
-    return (B->Len > 0)? B->Buf[B->Len-1] : '\0';
-}
-#else
-#  define SB_LookAtLast(B)      (((B)->Len > 0)? (B)->Buf[(B)->Len-1] : '\0')
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void SB_Skip (StrBuf* B)
-/* Skip the next character in the string buffer if this is possible. */
-{
-    if (B->Index < B->Len) {
-        ++B->Index;
-    }
-}
-#else
-#  define SB_Skip(B)     do { if ((B)->Index < (B)->Len) ++(B)->Index; } while (0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void SB_SkipMultiple (StrBuf* B, unsigned Count)
-/* Skip a number of characters in the string buffer if this is possible. */
-{
-    if ((B->Index += Count) > B->Len) {
-        B->Index = B->Len;
-    }
-}
-#else
-#  define SB_SkipMultiple(B, Count)     \
-        do { if (((B)->Index += (Count)) > (B)->Len) (B)->Index = (B)->Len; } while (0)
-#endif
-
-void SB_Drop (StrBuf* B, unsigned Count);
-/* Drop characters from the end of the string. */
-
-void SB_Terminate (StrBuf* B);
-/* Zero terminate the given string buffer. NOTE: The terminating zero is not
-** accounted for in B->Len, if you want that, you have to use AppendChar!
-*/
-
-void SB_CopyBuf (StrBuf* Target, const char* Buf, unsigned Size);
-/* Copy Buf to Target, discarding the old contents of Target */
-
-#if defined(HAVE_INLINE)
-INLINE void SB_CopyStr (StrBuf* Target, const char* S)
-/* Copy S to Target, discarding the old contents of Target */
-{
-    SB_CopyBuf (Target, S, strlen (S));
-}
-#else
-void SB_CopyStr (StrBuf* Target, const char* S);
-/* Copy S to Target, discarding the old contents of Target */
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void SB_Copy (StrBuf* Target, const StrBuf* Source)
-/* Copy Source to Target, discarding the old contents of Target */
-{
-    SB_CopyBuf (Target, Source->Buf, Source->Len);
-    Target->Index = Source->Index;
-}
-#else
-void SB_Copy (StrBuf* Target, const StrBuf* Source);
-/* Copy Source to Target, discarding the old contents of Target */
-#endif
-
-void SB_AppendChar (StrBuf* B, int C);
-/* Append a character to a string buffer */
-
-void SB_AppendBuf (StrBuf* B, const char* S, unsigned Size);
-/* Append a character buffer to the end of the string buffer */
-
-#if defined(HAVE_INLINE)
-INLINE void SB_AppendStr (StrBuf* B, const char* S)
-/* Append a string to the end of the string buffer */
-{
-    SB_AppendBuf (B, S, strlen (S));
-}
-#else
-void SB_AppendStr (StrBuf* B, const char* S);
-/* Append a string to the end of the string buffer */
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void SB_Append (StrBuf* Target, const StrBuf* Source)
-/* Append the contents of Source to Target */
-{
-    SB_AppendBuf (Target, Source->Buf, Source->Len);
-}
-#else
-void SB_Append (StrBuf* Target, const StrBuf* Source);
-/* Append the contents of Source to Target */
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE void SB_Cut (StrBuf* B, unsigned Len)
-/* Cut the contents of B at the given length. If the current length of the
-** buffer is smaller than Len, nothing will happen.
-*/
-{
-    if (Len < B->Len) {
-        B->Len = Len;
-    }
-}
-#else
-void SB_Cut (StrBuf* B, unsigned Len);
-/* Cut the contents of B at the given length. If the current length of the
-** buffer is smaller than Len, nothing will happen.
-*/
-#endif
-
-void SB_Slice (StrBuf* Target, const StrBuf* Source, unsigned Start, unsigned Len);
-/* Copy a slice from Source into Target. The current contents of Target are
-** destroyed. If Start is greater than the length of Source, or if Len
-** characters aren't available, the result will be a buffer with less than Len
-** bytes.
-*/
-
-void SB_Move (StrBuf* Target, StrBuf* Source);
-/* Move the complete contents of Source to target. This will delete the old
-** contents of Target, and Source will be empty after the call.
-*/
-
-void SB_ToLower (StrBuf* S);
-/* Convert all characters in S to lower case */
-
-void SB_ToUpper (StrBuf* S);
-/* Convert all characters in S to upper case */
-
-int SB_Compare (const StrBuf* S1, const StrBuf* S2);
-/* Do a lexical compare of S1 and S2. See strcmp for result codes. */
-
-int SB_CompareStr (const StrBuf* S1, const char* S2);
-/* Do a lexical compare of S1 and S2. See strcmp for result codes. */
-
-void SB_VPrintf (StrBuf* S, const char* Format, va_list ap) attribute ((format (printf, 2, 0)));
-/* printf function with S as target. The function is safe, which means that
-** the current contents of S are discarded, and are allocated again with
-** a matching size for the output. The function will call FAIL when problems
-** are detected (anything that let xsnprintf return -1).
-*/
-
-void SB_Printf (StrBuf* S, const char* Format, ...) attribute ((format (printf, 2, 3)));
-/* vprintf function with S as target. The function is safe, which means that
-** the current contents of S are discarded, and are allocated again with
-** a matching size for the output. The function will call FAIL when problems
-** are detected (anything that let xsnprintf return -1).
-*/
-
-
-
-/* End of strbuf.h */
-
-#endif
diff --git a/src/common/strpool.c b/src/common/strpool.c
deleted file mode 100644 (file)
index 244681a..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 strpool.c                                 */
-/*                                                                           */
-/*                               A string pool                               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* A string pool is used to store identifiers and other strings. Each string
-** stored in the pool has a unique id, which may be used to access the string
-** in the pool. Identical strings are stored only once in the pool and have
-** identical ids. This means that instead of comparing strings, just the
-** string pool ids must be compared.
-*/
-
-
-
-#include <string.h>
-
-/* common */
-#include "coll.h"
-#include "hashfunc.h"
-#include "hashtab.h"
-#include "strbuf.h"
-#include "strpool.h"
-#include "xmalloc.h"
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-static unsigned HT_GenHash (const void* Key);
-/* Generate the hash over a key. */
-
-static const void* HT_GetKey (const void* Entry);
-/* Given a pointer to the user entry data, return a pointer to the key */
-
-static int HT_Compare (const void* Key1, const void* Key2);
-/* Compare two keys. The function must return a value less than zero if
-** Key1 is smaller than Key2, zero if both are equal, and a value greater
-** than zero if Key1 is greater then Key2.
-*/
-
-
-
-/*****************************************************************************/
-/*                                     Data                                  */
-/*****************************************************************************/
-
-
-
-/* A string pool entry */
-struct StringPoolEntry {
-    HashNode            Node;   /* Node for the hash table */
-    unsigned            Id;     /* The numeric string id */
-    StrBuf              Buf;    /* The string itself */
-};
-
-/* A string pool */
-struct StringPool {
-    Collection          Entries;        /* Entries sorted by number */
-    unsigned            TotalSize;      /* Total size of all string data */
-    HashTable           Tab;            /* Hash table */
-};
-
-/* Hash table functions */
-static const HashFunctions HashFunc = {
-    HT_GenHash,
-    HT_GetKey,
-    HT_Compare
-};
-
-
-
-/*****************************************************************************/
-/*                          struct StringPoolEntry                           */
-/*****************************************************************************/
-
-
-
-static StringPoolEntry* NewStringPoolEntry (const StrBuf* S, unsigned Id)
-/* Create a new string pool entry and return it. */
-{
-    /* Allocate memory */
-    StringPoolEntry* E = xmalloc (sizeof (StringPoolEntry));
-
-    /* Initialize the fields */
-    InitHashNode (&E->Node);
-    E->Id   = Id;
-    SB_Init (&E->Buf);
-    SB_Copy (&E->Buf, S);
-
-    /* Always zero terminate the string */
-    SB_Terminate (&E->Buf);
-
-    /* Return the new entry */
-    return E;
-}
-
-
-
-/*****************************************************************************/
-/*                           Hash table functions                            */
-/*****************************************************************************/
-
-
-
-static unsigned HT_GenHash (const void* Key)
-/* Generate the hash over a key. */
-{
-    return HashBuf (Key);
-}
-
-
-
-static const void* HT_GetKey (const void* Entry)
-/* Given a pointer to the user entry data, return a pointer to the index */
-{
-    return &((const StringPoolEntry*) Entry)->Buf;
-}
-
-
-
-static int HT_Compare (const void* Key1, const void* Key2)
-/* Compare two keys. The function must return a value less than zero if
-** Key1 is smaller than Key2, zero if both are equal, and a value greater
-** than zero if Key1 is greater then Key2.
-*/
-{
-    return SB_Compare (Key1, Key2);
-}
-
-
-
-/*****************************************************************************/
-/*                                     Code                                  */
-/*****************************************************************************/
-
-
-
-StringPool* NewStringPool (unsigned HashSlots)
-/* Allocate, initialize and return a new string pool */
-{
-    /* Allocate memory */
-    StringPool* P = xmalloc (sizeof (*P));
-
-    /* Initialize the fields */
-    P->Entries   = EmptyCollection;
-    P->TotalSize = 0;
-    InitHashTable (&P->Tab, HashSlots, &HashFunc);
-
-    /* Return a pointer to the new pool */
-    return P;
-}
-
-
-
-void FreeStringPool (StringPool* P)
-/* Free a string pool */
-{
-    unsigned I;
-
-    /* Free all entries and clear the entry collection */
-    for (I = 0; I < CollCount (&P->Entries); ++I) {
-
-        /* Get a pointer to the entry */
-        StringPoolEntry* E = CollAtUnchecked (&P->Entries, I);
-
-        /* Free string buffer memory */
-        SB_Done (&E->Buf);
-
-        /* Free the memory for the entry itself */
-        xfree (E);
-    }
-    CollDeleteAll (&P->Entries);
-
-    /* Free the hash table */
-    DoneHashTable (&P->Tab);
-
-    /* Free the string pool itself */
-    xfree (P);
-}
-
-
-
-const StrBuf* SP_Get (const StringPool* P, unsigned Index)
-/* Return a string from the pool. Index must exist, otherwise FAIL is called. */
-{
-    /* Get the collection entry */
-    const StringPoolEntry* E = CollConstAt (&P->Entries, Index);
-
-    /* Return the string from the entry */
-    return &E->Buf;
-}
-
-
-
-unsigned SP_Add (StringPool* P, const StrBuf* S)
-/* Add a string buffer to the buffer and return the index. If the string does
-** already exist in the pool, SP_AddBuf will just return the index of the
-** existing string.
-*/
-{
-    /* Search for a matching entry in the hash table */
-    StringPoolEntry* E = HT_Find (&P->Tab, S);
-
-    /* Did we find it? */
-    if (E == 0) {
-
-        /* We didn't find the entry, so create a new one */
-        E = NewStringPoolEntry (S, CollCount (&P->Entries));
-
-        /* Insert the new entry into the entries collection */
-        CollAppend (&P->Entries, E);
-
-        /* Insert the new entry into the hash table */
-        HT_Insert (&P->Tab, E);
-
-        /* Add up the string size */
-        P->TotalSize += SB_GetLen (&E->Buf);
-    }
-
-    /* Return the id of the entry */
-    return E->Id;
-}
-
-
-
-unsigned SP_AddStr (StringPool* P, const char* S)
-/* Add a string to the buffer and return the index. If the string does already
-** exist in the pool, SP_Add will just return the index of the existing string.
-*/
-{
-    unsigned Id;
-
-    /* First make a string buffer, then add it. This is some overhead, but the
-    ** routine will probably go.
-    */
-    StrBuf Buf;
-    Id = SP_Add (P, SB_InitFromString (&Buf, S));
-
-    /* Return the id of the new entry */
-    return Id;
-}
-
-
-
-unsigned SP_GetCount (const StringPool* P)
-/* Return the number of strings in the pool */
-{
-    return CollCount (&P->Entries);
-}
diff --git a/src/common/strpool.h b/src/common/strpool.h
deleted file mode 100644 (file)
index 8a6a8fa..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 strpool.h                                 */
-/*                                                                           */
-/*                               A string pool                               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2008 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* A string pool is used to store identifiers and other strings. Each string
-** stored in the pool has a unique ID, which may be used to access the string
-** in the pool. Identical strings are only stored once in the pool and have
-** identical IDs. This means that instead of comparing strings, just the
-** string pool IDs must be compared.
-*/
-
-
-
-#ifndef STRPOOL_H
-#define STRPOOL_H
-
-
-
-/* common */
-#include "hashtab.h"
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                     Data                                  */
-/*****************************************************************************/
-
-
-
-/* Opaque string pool entry */
-typedef struct StringPoolEntry StringPoolEntry;
-
-/* A string pool */
-typedef struct StringPool StringPool;
-
-
-
-/*****************************************************************************/
-/*                                     Code                                  */
-/*****************************************************************************/
-
-
-
-StringPool* NewStringPool (unsigned HashSlots);
-/* Allocate, initialize and return a new string pool */
-
-void FreeStringPool (StringPool* P);
-/* Free a string pool */
-
-const StrBuf* SP_Get (const StringPool* P, unsigned Index);
-/* Return a string from the pool. Index must exist, otherwise FAIL is called. */
-
-unsigned SP_Add (StringPool* P, const StrBuf* S);
-/* Add a string buffer to the buffer and return the index. If the string does
-** already exist in the pool, SP_AddBuf will just return the index of the
-** existing string.
-*/
-
-unsigned SP_AddStr (StringPool* P, const char* S);
-/* Add a string to the buffer and return the index. If the string does already
-** exist in the pool, SP_Add will just return the index of the existing string.
-*/
-
-unsigned SP_GetCount (const StringPool* P);
-/* Return the number of strings in the pool */
-
-
-
-/* End of strpool.h */
-
-#endif
diff --git a/src/common/strstack.c b/src/common/strstack.c
deleted file mode 100644 (file)
index 508af17..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                strstack.c                                 */
-/*                                                                           */
-/*                  String stack used for program settings                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004      Ullrich von Bassewitz                                       */
-/*               Römerstraße 52                                              */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-                    
-/* common */
-#include "check.h"
-#include "strstack.h"
-#include "xmalloc.h"
-            
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-const char* SS_Get (const StrStack* S)
-/* Get the value on top of a string stack */
-{
-    CHECK (S->Count > 0);
-    return S->Stack[S->Count-1];
-}
-
-
-
-void SS_Set (StrStack* S, const char* Val)
-/* Set the value on top of a string stack */
-{
-    CHECK (S->Count > 0);
-    xfree (S->Stack[S->Count-1]);
-    S->Stack[S->Count-1] = xstrdup (Val);
-}
-
-
-
-void SS_Drop (StrStack* S)
-/* Drop a value from a string stack */
-{
-    CHECK (S->Count > 1);
-    xfree (S->Stack[--S->Count]);
-}
-
-
-
-void SS_Push (StrStack* S, const char* Val)
-/* Push a value onto a string stack */
-{
-    CHECK (S->Count < sizeof (S->Stack) / sizeof (S->Stack[0]));
-    S->Stack[S->Count++] = xstrdup (Val);
-}
diff --git a/src/common/strstack.h b/src/common/strstack.h
deleted file mode 100644 (file)
index d29a479..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                strstack.h                                 */
-/*                                                                           */
-/*                  String stack used for program settings                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004      Ullrich von Bassewitz                                       */
-/*               Römerstraße 52                                              */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef STRSTACK_H
-#define STRSTACK_H
-
-
-
-#include "inline.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-typedef struct StrStack StrStack;
-struct StrStack {
-    unsigned    Count;
-    char*       Stack[8];
-};
-
-/* Declare an empty string stack */
-#define STRSTACK()      { 0 };
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-#if defined(HAVE_INLINE)
-INLINE int SS_IsFull (const StrStack* S)
-/* Return true if there is no space left on the given string stack */
-{
-    return (S->Count >= sizeof (S->Stack) / sizeof (S->Stack[0]));
-}
-#else
-#  define SS_IsFull(S)  ((S)->Count >= sizeof ((S)->Stack) / sizeof ((S)->Stack[0]))
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned SS_GetCount (const StrStack* S)
-/* Return the number of elements on the given string stack */
-{
-    return S->Count;
-}
-#else
-#  define SS_GetCount(S)        (S)->Count
-#endif
-
-const char* SS_Get (const StrStack* S);
-/* Get the value on top of a string stack */
-
-void SS_Set (StrStack* S, const char* Val);
-/* Set the value on top of a string stack */
-
-void SS_Drop (StrStack* S);
-/* Drop a value from a string stack */
-
-void SS_Push (StrStack* S, const char* Val);
-/* Push a value onto a string stack */
-
-
-
-/* End of strstack.h */
-
-#endif
diff --git a/src/common/strutil.c b/src/common/strutil.c
deleted file mode 100644 (file)
index dabed34..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 strutil.h                                 */
-/*                                                                           */
-/*                         String utility functions                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2003 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-#include <ctype.h>
-
-/* common */
-#include "strutil.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-char* StrCopy (char* Dest, size_t DestSize, const char* Source)
-/* Copy Source to Dest honouring the maximum size of the target buffer. In
-** constrast to strncpy, the resulting string will always be NUL terminated.
-** The function returns the pointer to the destintation buffer.
-*/
-{
-    size_t Len = strlen (Source);
-    if (Len >= DestSize) {
-        memcpy (Dest, Source, DestSize-1);
-        Dest[DestSize-1] = '\0';
-    } else {
-        memcpy (Dest, Source, Len+1);
-    }
-    return Dest;
-}
-
-
-
-int StrCaseCmp (const char* S1, const char* S2)
-/* Compare two strings ignoring case */        
-{
-    int Diff;
-    while ((Diff = toupper (*S1) - toupper (*S2)) == 0 && *S1) {
-        ++S1;
-        ++S2;
-    }
-    return Diff;
-}
-
-
-                  
diff --git a/src/common/strutil.h b/src/common/strutil.h
deleted file mode 100644 (file)
index 61dd74b..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 strutil.h                                 */
-/*                                                                           */
-/*                         String utility functions                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2003 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef STRUTIL_H
-#define STRUTIL_H
-
-
-
-#include <stdlib.h>
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-char* StrCopy (char* Dest, size_t DestSize, const char* Source);
-/* Copy Source to Dest honouring the maximum size of the target buffer. In
-** constrast to strncpy, the resulting string will always be NUL terminated.
-** The function returns the pointer to the destintation buffer.
-*/
-
-int StrCaseCmp (const char* S1, const char* S2);
-/* Compare two strings ignoring case */
-
-
-
-/* End of strutil.h */
-
-#endif
diff --git a/src/common/symdefs.h b/src/common/symdefs.h
deleted file mode 100644 (file)
index 1a487e0..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 symdefs.h                                 */
-/*                                                                           */
-/*               Symbol definitions for the bin65 binary utils               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* Object file tags for imports and exports */
-
-
-
-#ifndef SYMDEFS_H
-#define SYMDEFS_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Number of module constructor/destructor declarations for an export */
-#define SYM_CONDES_MASK         0x0007U
-
-#define SYM_IS_CONDES(x)        (((x) & SYM_CONDES_MASK) != 0)
-#define SYM_GET_CONDES_COUNT(x) ((x) & SYM_CONDES_MASK)
-#define SYM_INC_CONDES_COUNT(x) ((x)++)
-
-/* Size of symbol available? */
-#define SYM_SIZELESS            0x0000U /* No symbol size available */
-#define SYM_SIZE                0x0008U /* Symbol has a size */
-#define SYM_MASK_SIZE           0x0008U /* Size mask */
-
-#define SYM_HAS_SIZE(x)         (((x) & SYM_MASK_SIZE) == SYM_SIZE)
-
-/* Symbol value type */
-#define SYM_CONST               0x0000U /* Mask bit for const values */
-#define SYM_EXPR                0x0010U /* Mask bit for expr values */
-#define SYM_MASK_VAL            0x0010U /* Value mask */
-
-#define SYM_IS_CONST(x)         (((x) & SYM_MASK_VAL) == SYM_CONST)
-#define SYM_IS_EXPR(x)          (((x) & SYM_MASK_VAL) == SYM_EXPR)
-
-/* Symbol usage */
-#define SYM_EQUATE              0x0000U /* Mask bit for an equate */
-#define SYM_LABEL               0x0020U /* Mask bit for a label */
-#define SYM_MASK_LABEL          0x0020U /* Value mask */
-
-#define SYM_IS_EQUATE(x)        (((x) & SYM_MASK_LABEL) == SYM_EQUATE)
-#define SYM_IS_LABEL(x)         (((x) & SYM_MASK_LABEL) == SYM_LABEL)
-
-/* Symbol type */
-#define SYM_STD                 0x0000U /* Standard symbol */
-#define SYM_CHEAP_LOCAL         0x0040U /* Cheap local symbol */
-#define SYM_MASK_TYPE           0x0040U /* Value mask */
-
-#define SYM_IS_STD(x)           (((x) & SYM_MASK_TYPE) == SYM_STD)
-#define SYM_IS_CHEAP_LOCAL      (((x) & SYM_MASK_TYPE) == SYM_CHEAP_LOCAL)
-
-/* Export */
-#define SYM_EXPORT              0x0080U /* Export */
-#define SYM_MASK_EXPORT         0x0080U /* Value mask */
-
-#define SYM_IS_EXPORT(x)        (((x) & SYM_MASK_EXPORT) == SYM_EXPORT)
-
-/* Import */
-#define SYM_IMPORT              0x0100U /* Import */
-#define SYM_MASK_IMPORT         0x0100U /* Value mask */
-
-#define SYM_IS_IMPORT(x)        (((x) & SYM_MASK_IMPORT) == SYM_IMPORT)
-
-
-
-/* End of symdefs.h */
-
-#endif
diff --git a/src/common/target.c b/src/common/target.c
deleted file mode 100644 (file)
index 60b9af6..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 target.c                                  */
-/*                                                                           */
-/*                           Target specification                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2015, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-#include <string.h>
-
-/* common */
-#include "chartype.h"
-#include "check.h"
-#include "target.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Translation table with direct (no) translation */
-static const unsigned char CTNone[256] = {
-    0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
-    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
-    0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
-    0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
-    0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
-    0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
-    0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
-    0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
-    0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
-    0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
-    0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
-    0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
-    0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
-    0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
-    0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
-    0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF,
-};
-
-/* Translation table ISO-8859-1 -> AtASCII */
-static const unsigned char CTAtari[256] = {
-    0x00,0x01,0x02,0x03,0x04,0x05,0x06,0xFD,0x08,0x7F,0x9B,0x0B,0x7D,0x0D,0x0E,0x0F,
-    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
-    0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
-    0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
-    0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
-    0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
-    0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
-    0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
-    0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
-    0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
-    0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
-    0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
-    0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
-    0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
-    0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
-    0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF,
-};
-
-/* Translation table ISO-8859-1 -> OSASCII */
-static const unsigned char CTOSI[256] = {
-    0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
-    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
-    0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
-    0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
-    0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
-    0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
-    0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
-    0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7D,0x7C,0x7F,0x7E,
-    0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
-    0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
-    0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
-    0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
-    0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
-    0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
-    0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
-    0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF,
-};
-
-/* Translation table ISO-8859-1 -> PetSCII */
-static const unsigned char CTPET[256] = {
-    0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x14,0x09,0x0D,0x11,0x93,0x0A,0x0E,0x0F,
-    0x10,0x0B,0x12,0x13,0x08,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
-    0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
-    0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
-    0x40,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
-    0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0x5B,0xBF,0x5D,0x5E,0xA4,
-    0xAD,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
-    0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0xB3,0xDD,0xAB,0xB1,0xDF,
-    0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
-    0x90,0x91,0x92,0x0C,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
-    0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
-    0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
-    0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
-    0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
-    0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
-    0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF,
-};
-
-
-
-/* One entry in the target map */
-typedef struct TargetEntry TargetEntry;
-struct TargetEntry {
-    char        Name[12];               /* Target name */
-    target_t    Id;                     /* Target id */
-};
-
-/* Table that maps target names to ids. Sorted alphabetically for bsearch.
-** Allows mupltiple entries for one target id (target name aliases).
-*/
-static const TargetEntry TargetMap[] = {
-    {   "apple2",       TGT_APPLE2      },
-    {   "apple2enh",    TGT_APPLE2ENH   },
-    {   "atari",        TGT_ATARI       },
-    {   "atari5200",    TGT_ATARI5200   },
-    {   "atarixl",      TGT_ATARIXL     },
-    {   "atmos",        TGT_ATMOS       },
-    {   "bbc",          TGT_BBC         },
-    {   "c128",         TGT_C128        },
-    {   "c16",          TGT_C16         },
-    {   "c64",          TGT_C64         },
-    {   "cbm510",       TGT_CBM510      },
-    {   "cbm610",       TGT_CBM610      },
-    {   "geos",         TGT_GEOS_CBM    },
-    {   "geos-apple",   TGT_GEOS_APPLE  },
-    {   "geos-cbm",     TGT_GEOS_CBM    },
-    {   "lunix",        TGT_LUNIX       },
-    {   "lynx",         TGT_LYNX        },
-    {   "module",       TGT_MODULE      },
-    {   "nes",          TGT_NES         },
-    {   "none",         TGT_NONE        },
-    {   "osic1p",       TGT_OSIC1P      },
-    {   "pce",          TGT_PCENGINE    },
-    {   "pet",          TGT_PET         },
-    {   "plus4",        TGT_PLUS4       },
-    {   "sim6502",      TGT_SIM6502     },
-    {   "sim65c02",     TGT_SIM65C02    },
-    {   "supervision",  TGT_SUPERVISION },
-    {   "vc20",         TGT_VIC20       },
-    {   "vic20",        TGT_VIC20       },
-};
-#define MAP_ENTRY_COUNT         (sizeof (TargetMap) / sizeof (TargetMap[0]))
-
-
-/* Table with target properties by target id */
-static const TargetProperties PropertyTable[TGT_COUNT] = {
-    { "none",           CPU_6502,       BINFMT_BINARY,      CTNone  },
-    { "module",         CPU_6502,       BINFMT_O65,         CTNone  },
-    { "atari",          CPU_6502,       BINFMT_BINARY,      CTAtari },
-    { "atari5200",      CPU_6502,       BINFMT_BINARY,      CTAtari },
-    { "atarixl",        CPU_6502,       BINFMT_BINARY,      CTAtari },
-    { "vic20",          CPU_6502,       BINFMT_BINARY,      CTPET   },
-    { "c16",            CPU_6502,       BINFMT_BINARY,      CTPET   },
-    { "c64",            CPU_6502,       BINFMT_BINARY,      CTPET   },
-    { "c128",           CPU_6502,       BINFMT_BINARY,      CTPET   },
-    { "plus4",          CPU_6502,       BINFMT_BINARY,      CTPET   },
-    { "cbm510",         CPU_6502,       BINFMT_BINARY,      CTPET   },
-    { "cbm610",         CPU_6502,       BINFMT_BINARY,      CTPET   },
-    { "osic1p",         CPU_6502,       BINFMT_BINARY,      CTOSI   },
-    { "pet",            CPU_6502,       BINFMT_BINARY,      CTPET   },
-    { "bbc",            CPU_6502,       BINFMT_BINARY,      CTNone  },
-    { "apple2",         CPU_6502,       BINFMT_BINARY,      CTNone  },
-    { "apple2enh",      CPU_65C02,      BINFMT_BINARY,      CTNone  },
-    { "geos-cbm",       CPU_6502,       BINFMT_BINARY,      CTNone  },
-    { "geos-apple",     CPU_65C02,      BINFMT_BINARY,      CTNone  },
-    { "lunix",          CPU_6502,       BINFMT_O65,         CTNone  },
-    { "atmos",          CPU_6502,       BINFMT_BINARY,      CTNone  },
-    { "nes",            CPU_6502,       BINFMT_BINARY,      CTNone  },
-    { "supervision",    CPU_65SC02,     BINFMT_BINARY,      CTNone  },
-    { "lynx",           CPU_65C02,      BINFMT_BINARY,      CTNone  },
-    { "sim6502",        CPU_6502,       BINFMT_BINARY,      CTNone  },
-    { "sim65c02",       CPU_65C02,      BINFMT_BINARY,      CTNone  },
-    { "pce",            CPU_HUC6280,    BINFMT_BINARY,      CTNone  },
-};
-
-/* Target system */
-target_t Target = TGT_NONE;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static int Compare (const void* Key, const void* Entry)
-/* Compare function for bsearch */
-{
-    return strcmp ((const char*) Key, ((const TargetEntry*)Entry)->Name);
-}
-
-
-
-target_t FindTarget (const char* Name)
-/* Find a target by name and return the target id. TGT_UNKNOWN is returned if
-** the given name is no valid target.
-*/
-{
-    /* Search for the name in the map */
-    const TargetEntry* T;
-    T = bsearch (Name, TargetMap, MAP_ENTRY_COUNT, sizeof (TargetMap[0]), Compare);
-
-    /* Return the target id */
-    return (T == 0)? TGT_UNKNOWN : T->Id;
-}
-
-
-
-const TargetProperties* GetTargetProperties (target_t Target)
-/* Return the properties for a target */
-{
-    /* Must have a valid target id */
-    PRECONDITION (Target >= 0 && Target < TGT_COUNT);
-
-    /* Return the array entry */
-    return &PropertyTable[Target];
-}
-
-
-
-const char* GetTargetName (target_t Target)
-/* Return the name of a target */
-{
-    /* Return the array entry */
-    return GetTargetProperties (Target)->Name;
-}
diff --git a/src/common/target.h b/src/common/target.h
deleted file mode 100644 (file)
index 3ea562a..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 target.h                                  */
-/*                                                                           */
-/*                           Target specification                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef TARGET_H
-#define TARGET_H
-
-
-
-/* common */
-#include "cpu.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Supported target systems */
-typedef enum {
-    TGT_UNKNOWN = -1,           /* Not specified or invalid target */
-    TGT_NONE,
-    TGT_MODULE,
-    TGT_ATARI,
-    TGT_ATARI5200,
-    TGT_ATARIXL,
-    TGT_VIC20,
-    TGT_C16,
-    TGT_C64,
-    TGT_C128,
-    TGT_PLUS4,
-    TGT_CBM510,
-    TGT_CBM610,
-    TGT_OSIC1P,
-    TGT_PET,
-    TGT_BBC,
-    TGT_APPLE2,
-    TGT_APPLE2ENH,
-    TGT_GEOS_CBM,
-    TGT_GEOS_APPLE,
-    TGT_LUNIX,
-    TGT_ATMOS,
-    TGT_NES,
-    TGT_SUPERVISION,
-    TGT_LYNX,
-    TGT_SIM6502,
-    TGT_SIM65C02,
-    TGT_PCENGINE,
-    TGT_COUNT                   /* Number of target systems */
-} target_t;
-
-/* Collection of target properties */
-typedef struct TargetProperties TargetProperties;
-struct TargetProperties {
-    const char              Name[12];   /* Name of the target */
-    cpu_t                   DefaultCPU; /* Default CPU for this target */
-    unsigned char           BinFmt;     /* Default binary format for this target */
-    const unsigned char*    CharMap;    /* Character translation table */
-};
-
-/* Target system */
-extern target_t         Target;
-
-/* Types of available output formats */
-#define BINFMT_DEFAULT          0       /* Default (binary) */
-#define BINFMT_BINARY           1       /* Straight binary format */
-#define BINFMT_O65              2       /* Andre Fachats o65 format */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-target_t FindTarget (const char* Name);
-/* Find a target by name and return the target id. TGT_UNKNOWN is returned if
-** the given name is no valid target.
-*/
-
-const TargetProperties* GetTargetProperties (target_t Target);
-/* Return the properties for a target */
-
-const char* GetTargetName (target_t Target);
-/* Return the name of a target */
-
-
-
-/* End of target.h */
-
-#endif
diff --git a/src/common/tgttrans.c b/src/common/tgttrans.c
deleted file mode 100644 (file)
index 95bdf86..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                tgttrans.c                                 */
-/*                                                                           */
-/*                         Character set translation                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "check.h"
-#include "target.h"
-#include "tgttrans.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Translation table actually used. Default is no translation */
-static unsigned char Tab[256] = {
-    0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
-    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
-    0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
-    0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
-    0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
-    0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
-    0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
-    0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
-    0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
-    0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
-    0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
-    0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
-    0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
-    0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
-    0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
-    0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF,
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void TgtTranslateInit (void)
-/* Initialize the translation tables */
-{
-    /* Copy the translation for the selected target */
-    memcpy (Tab, GetTargetProperties (Target)->CharMap, sizeof (Tab));
-}
-
-
-
-int TgtTranslateChar (int C)
-/* Translate one character from the source character set into the target
-** system character set.
-*/
-{
-    /* Translate */
-    return Tab[C & 0xFF];
-}
-
-
-
-void TgtTranslateBuf (void* Buf, unsigned Len)
-/* Translate a buffer of the given length from the source character set into
-** the target system character set.
-*/
-{
-    /* Translate */
-    unsigned char* B = (unsigned char*)Buf;
-    while (Len--) {
-        *B = Tab[*B];
-        ++B;
-    }
-}
-
-
-
-void TgtTranslateStrBuf (StrBuf* Buf)
-/* Translate a string buffer from the source character set into the target
-** system character set.
-*/
-{
-    TgtTranslateBuf (SB_GetBuf (Buf), SB_GetLen (Buf));
-}
-
-
-
-void TgtTranslateSet (unsigned Index, unsigned char C)
-/* Set the translation code for the given character */
-{
-    CHECK (Index > 0 && Index < sizeof (Tab));
-    Tab[Index] = C;
-}
diff --git a/src/common/tgttrans.h b/src/common/tgttrans.h
deleted file mode 100644 (file)
index 46981ec..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                tgttrans.h                                 */
-/*                                                                           */
-/*                         Character set translation                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef TGTTRANS_H
-#define TGTTRANS_H
-
-
-
-/* common */
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void TgtTranslateInit (void);
-/* Initialize the translation tables */
-
-int TgtTranslateChar (int C);
-/* Translate one character from the source character set into the target
-** system character set.
-*/
-
-void TgtTranslateBuf (void* Buf, unsigned Len);
-/* Translate a buffer of the given length from the source character set into
-** the target system character set.
-*/
-
-void TgtTranslateStrBuf (StrBuf* Buf);
-/* Translate a string buffer from the source character set into the target
-** system character set.
-*/
-
-void TgtTranslateSet (unsigned Index, unsigned char C);
-/* Set the translation code for the given character */
-
-
-
-/* End of tgttrans.h */
-
-#endif
diff --git a/src/common/va_copy.h b/src/common/va_copy.h
deleted file mode 100644 (file)
index 2f56efa..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 va_copy.h                                 */
-/*                                                                           */
-/*               va_copy macro for systems that don't have it                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2004      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef VA_COPY_H
-#define VA_COPY_H
-
-
-
-#include <stdarg.h>
-
-
-                   
-/* No action if we have a working va_copy */
-#if !defined(va_copy)
-
-
-
-/* The watcom compiler doesn't have va_copy and a problematic va_list definition */
-#if defined(__WATCOMC__)
-#define va_copy(dest,src)       memcpy((dest), (src), sizeof (va_list))
-#endif
-
-/* GNU C has a builtin function */
-#if defined(__GNUC__)
-#define va_copy(dest,src)       __va_copy(dest, src)
-#endif
-
-/* MS VC allows for assignment */
-#if defined(_MSC_VER)
-#define va_copy(dest,src)       ((dest) = (src))
-#endif
-
-/* If va_copy is not defined now, we have a problem */
-#if !defined(va_copy)
-#error "Need a working va_copy!"
-#endif
-
-
-
-#endif
-
-
-
-/* End of va_copy.h */
-
-#endif
diff --git a/src/common/version.c b/src/common/version.c
deleted file mode 100644 (file)
index 4e61a5f..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 version.c                                 */
-/*                                                                           */
-/*             Version information for the cc65 compiler package             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "xsprintf.h"
-#include "searchpath.h"
-#include "version.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-#define VER_MAJOR       2U
-#define VER_MINOR       15U
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-const char* GetVersionAsString (void)
-/* Returns the version number as a string in a static buffer */
-{
-    static char Buf[60];
-#if defined(GIT_SHA)
-    xsnprintf (Buf, sizeof (Buf), "%u.%u - Git %s", VER_MAJOR, VER_MINOR, STRINGIZE (GIT_SHA));
-#else
-    xsnprintf (Buf, sizeof (Buf), "%u.%u", VER_MAJOR, VER_MINOR);
-#endif
-    return Buf;
-}
-
-
-
-unsigned GetVersionAsNumber (void)
-/* Returns the version number as a combined unsigned for use in a #define */
-{
-    return ((VER_MAJOR * 0x100) + (VER_MINOR * 0x10));
-}
diff --git a/src/common/version.h b/src/common/version.h
deleted file mode 100644 (file)
index 145c2ed..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 version.h                                 */
-/*                                                                           */
-/*             Version information for the cc65 compiler package             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef VERSION_H
-#define VERSION_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-const char* GetVersionAsString (void);
-/* Returns the version number as a string in a static buffer */
-
-unsigned GetVersionAsNumber (void);
-/* Returns the version number as a combined unsigned for use in a #define */
-
-
-
-/* End of version.h */
-
-#endif
diff --git a/src/common/xmalloc.c b/src/common/xmalloc.c
deleted file mode 100644 (file)
index 327d378..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 xmalloc.c                                 */
-/*                                                                           */
-/*                       Memory allocation subroutines                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2006 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-#include <string.h>
-
-/* common */
-#include "abend.h"
-#include "debugflag.h"
-#include "xmalloc.h"
-
-
-
-/*****************************************************************************/
-/*                                   code                                    */
-/*****************************************************************************/
-
-
-
-void* xmalloc (size_t Size)
-/* Allocate memory, check for out of memory condition. Do some debugging */
-{
-    void* P = 0;
-
-    /* Allow zero sized requests and return NULL in this case */
-    if (Size) {
-
-        /* Allocate memory */
-        P = malloc (Size);
-
-        /* Check for errors */
-        if (P == 0) {
-            AbEnd ("Out of memory - requested block size = %lu",
-                   (unsigned long) Size);
-        }
-    }
-
-    /* Return a pointer to the block */
-    return P;
-}
-
-
-
-void* xrealloc (void* P, size_t Size)
-/* Reallocate a memory block, check for out of memory */
-{
-    /* Reallocate the block */
-    void* N = realloc (P, Size);
-
-    /* Check for errors */
-    if (N == 0 && Size != 0) {
-        AbEnd ("Out of memory in realloc - requested block size = %lu", (unsigned long) Size);
-    }
-
-    /* Return the pointer to the new block */
-    return N;
-}
-
-
-
-void xfree (void* Block)
-/* Free the block, do some debugging */
-{
-    free (Block);
-}
-
-
-
-char* xstrdup (const char* S)
-/* Duplicate a string on the heap. The function checks for out of memory */
-{
-    /* Allow dup'ing of NULL strings */
-    if (S) {
-
-        /* Get the length of the string */
-        unsigned Len = strlen (S) + 1;
-
-        /* Allocate memory and return a copy */
-        return memcpy (xmalloc (Len), S, Len);
-
-    } else {
-
-        /* Return a NULL pointer */
-        return 0;
-
-    }
-}
-
-
-
-void* xdup (const void* Buf, size_t Size)
-/* Create a copy of Buf on the heap and return a pointer to it. */
-{
-    return memcpy (xmalloc (Size), Buf, Size);
-}
diff --git a/src/common/xmalloc.h b/src/common/xmalloc.h
deleted file mode 100644 (file)
index eb196b6..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 xmalloc.h                                 */
-/*                                                                           */
-/*                       Memory allocation subroutines                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2006 Ullrich von Bassewitz                                       */
-/*               Römerstraße 52                                              */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef XMALLOC_H
-#define XMALLOC_H
-
-
-
-#include <stddef.h>
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void* xmalloc (size_t Size);
-/* Allocate memory, check for out of memory condition. Do some debugging */
-
-void* xrealloc (void* P, size_t Size);
-/* Reallocate a memory block, check for out of memory */
-
-void xfree (void* Block);
-/* Free the block, do some debugging */
-
-char* xstrdup (const char* S);
-/* Duplicate a string on the heap. The function checks for out of memory */
-
-void* xdup (const void* Buf, size_t Size);
-/* Create a copy of Buf on the heap and return a pointer to it. */
-
-
-
-/* End of xmalloc.h */
-
-#endif
diff --git a/src/common/xsprintf.c b/src/common/xsprintf.c
deleted file mode 100644 (file)
index d50ad7a..0000000
+++ /dev/null
@@ -1,678 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                xsprintf.c                                 */
-/*                                                                           */
-/*                       Replacement sprintf function                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2004 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stddef.h>
-#include <string.h>
-#include <limits.h>
-
-/* common */
-#include "chartype.h"
-#include "check.h"
-#include "inttypes.h"
-#include "strbuf.h"
-#include "va_copy.h"
-#include "xsprintf.h"
-
-
-
-/*****************************************************************************/
-/*                                  vsnprintf                                */
-/*****************************************************************************/
-
-
-
-/* The following is a very basic vsnprintf like function called xvsnprintf. It
-** features only the basic format specifiers (especially the floating point
-** stuff is missing), but may be extended if required. Reason for supplying
-** my own implementation is that vsnprintf is standard but not implemented by
-** older compilers, and some that implement it, don't adhere to the standard
-** (for example Microsoft with its _vsnprintf).
-*/
-
-typedef struct {
-
-    /* Variable argument list pointer */
-    va_list     ap;
-
-    /* Output buffer */
-    char*       Buf;
-    size_t      BufSize;
-    size_t      BufFill;
-
-    /* Argument string buffer and string buffer pointer. The string buffer
-    ** must be big enough to hold a converted integer of the largest type
-    ** including an optional sign and terminating zero.
-    */
-    char        ArgBuf[256];
-    int         ArgLen;
-
-    /* Flags */
-    enum {
-        fNone     = 0x0000,
-        fMinus    = 0x0001,
-        fPlus     = 0x0002,
-        fSpace    = 0x0004,
-        fHash     = 0x0008,
-        fZero     = 0x0010,
-        fWidth    = 0x0020,
-        fPrec     = 0x0040,
-        fUnsigned = 0x0080,
-        fUpcase   = 0x0100
-    } Flags;
-
-    /* Conversion base and table */
-    unsigned    Base;
-    const char* CharTable;
-
-    /* Field width */
-    int         Width;
-
-    /* Precision */
-    int         Prec;
-
-    /* Length modifier */
-    enum {
-        lmChar,
-        lmShort,
-        lmInt,
-        lmLong,
-        lmIntMax,
-        lmSizeT,
-        lmPtrDiffT,
-        lmLongDouble,
-
-        /* Unsupported modifiers */
-        lmLongLong = lmLong,
-
-        /* Default length is integer */
-        lmDefault = lmInt
-    } LengthMod;
-
-} PrintfCtrl;
-
-
-
-static void AddChar (PrintfCtrl* P, char C)
-/* Store one character in the output buffer if there's enough room. */
-{
-    if (++P->BufFill <= P->BufSize) {
-        *P->Buf++ = C;
-    }
-}
-
-
-
-static void AddPadding (PrintfCtrl* P, char C, unsigned Count)
-/* Add some amount of padding */
-{
-    while (Count--) {
-        AddChar (P, C);
-    }
-}
-
-
-
-static intmax_t NextIVal (PrintfCtrl*P)
-/* Read the next integer value from the variable argument list */
-{
-    switch (P->LengthMod) {
-        case lmChar:        return (char) va_arg (P->ap, int);
-        case lmShort:       return (short) va_arg (P->ap, int);
-        case lmInt:         return (int) va_arg (P->ap, int);
-        case lmLong:        return (long) va_arg (P->ap, long);
-        case lmIntMax:      return va_arg (P->ap, intmax_t);
-        case lmSizeT:       return (uintmax_t) va_arg (P->ap, size_t);
-        case lmPtrDiffT:    return (long) va_arg (P->ap, ptrdiff_t);
-        default:
-            FAIL ("Invalid type size in NextIVal");
-            return 0;
-    }
-}
-
-
-
-static uintmax_t NextUVal (PrintfCtrl*P)
-/* Read the next unsigned integer value from the variable argument list */
-{
-    switch (P->LengthMod) {
-        case lmChar:        return (unsigned char) va_arg (P->ap, unsigned);
-        case lmShort:       return (unsigned short) va_arg (P->ap, unsigned);
-        case lmInt:         return (unsigned int) va_arg (P->ap, unsigned int);
-        case lmLong:        return (unsigned long) va_arg (P->ap, unsigned long);
-        case lmIntMax:      return va_arg (P->ap, uintmax_t);
-        case lmSizeT:       return va_arg (P->ap, size_t);
-        case lmPtrDiffT:    return (intmax_t) va_arg (P->ap, ptrdiff_t);
-        default:
-            FAIL ("Invalid type size in NextUVal");
-            return 0;
-    }
-}
-
-
-
-static void ToStr (PrintfCtrl* P, uintmax_t Val)
-/* Convert the given value to a (reversed) string */
-{
-    char* S = P->ArgBuf;
-    while (Val) {
-        *S++ = P->CharTable[Val % P->Base];
-        Val /= P->Base;
-    }
-    P->ArgLen = S - P->ArgBuf;
-}
-
-
-
-static void FormatInt (PrintfCtrl* P, uintmax_t Val)
-/* Convert the integer value */
-{
-    char Lead[5];
-    unsigned LeadCount = 0;
-    unsigned PrecPadding;
-    unsigned WidthPadding;
-    unsigned I;
-
-
-    /* Determine the translation table */
-    P->CharTable = (P->Flags & fUpcase)? "0123456789ABCDEF" : "0123456789abcdef";
-
-    /* Check if the value is negative */
-    if ((P->Flags & fUnsigned) == 0 && ((intmax_t) Val) < 0) {
-        Val = -((intmax_t) Val);
-        Lead[LeadCount++] = '-';
-    } else if ((P->Flags & fPlus) != 0) {
-        Lead[LeadCount++] = '+';
-    } else if ((P->Flags & fSpace) != 0) {
-        Lead[LeadCount++] = ' ';
-    }
-
-    /* Convert the value into a (reversed string). */
-    ToStr (P, Val);
-
-    /* The default precision for all integer conversions is one. This means
-    ** that the fPrec flag is always set and does not need to be checked
-    ** later on.
-    */
-    if ((P->Flags & fPrec) == 0) {
-        P->Flags |= fPrec;
-        P->Prec = 1;
-    }
-
-    /* Determine the leaders for alternative forms */
-    if ((P->Flags & fHash) != 0) {
-        if (P->Base == 16) {
-            /* Start with 0x */
-            Lead[LeadCount++] = '0';
-            Lead[LeadCount++] = (P->Flags & fUpcase)? 'X' : 'x';
-        } else if (P->Base == 8) {
-            /* Alternative form for 'o': always add a leading zero. */
-            if (P->Prec <= P->ArgLen) {
-                Lead[LeadCount++] = '0';
-            }
-        }
-    }
-
-    /* Determine the amount of precision padding needed */
-    if (P->ArgLen < P->Prec) {
-        PrecPadding = P->Prec - P->ArgLen;
-    } else {
-        PrecPadding = 0;
-    }
-
-    /* Determine the width padding needed */
-    if ((P->Flags & fWidth) != 0) {
-        int CurWidth = LeadCount + PrecPadding + P->ArgLen;
-        if (CurWidth < P->Width) {
-            WidthPadding = P->Width - CurWidth;
-        } else {
-            WidthPadding = 0;
-        }
-    } else {
-        WidthPadding = 0;
-    }
-
-    /* Output left space padding if any */
-    if ((P->Flags & (fMinus | fZero)) == 0 && WidthPadding > 0) {
-        AddPadding (P, ' ', WidthPadding);
-        WidthPadding = 0;
-    }
-
-    /* Leader */
-    for (I = 0; I < LeadCount; ++I) {
-        AddChar (P, Lead[I]);
-    }
-
-    /* Left zero padding if any */
-    if ((P->Flags & fZero) != 0 && WidthPadding > 0) {
-        AddPadding (P, '0', WidthPadding);
-        WidthPadding = 0;
-    }
-
-    /* Precision padding */
-    if (PrecPadding > 0) {
-        AddPadding (P, '0', PrecPadding);
-    }
-
-    /* The number itself. Beware: It's reversed! */
-    while (P->ArgLen > 0) {
-        AddChar (P, P->ArgBuf[--P->ArgLen]);
-    }
-
-    /* Right width padding if any */
-    if (WidthPadding > 0) {
-        AddPadding (P, ' ', WidthPadding);
-    }
-}
-
-
-
-static void FormatStr (PrintfCtrl* P, const char* Val)
-/* Convert the string */
-{
-    unsigned WidthPadding;
-
-    /* Get the string length limited to the precision. Beware: We cannot use
-    ** strlen here, because if a precision is given, the string may not be
-    ** zero terminated.
-    */
-    int Len;
-    if ((P->Flags & fPrec) != 0) {
-        const char* S = memchr (Val, '\0', P->Prec);
-        if (S == 0) {
-            /* Not zero terminated */
-            Len = P->Prec;
-        } else {
-            /* Terminating zero found */
-            Len = S - Val;
-        }
-    } else {
-        Len = strlen (Val);
-    }
-
-    /* Determine the width padding needed */
-    if ((P->Flags & fWidth) != 0 && P->Width > Len) {
-        WidthPadding = P->Width - Len;
-    } else {
-        WidthPadding = 0;
-    }
-
-    /* Output left padding */
-    if ((P->Flags & fMinus) != 0 && WidthPadding > 0) {
-        AddPadding (P, ' ', WidthPadding);
-        WidthPadding = 0;
-    }
-
-    /* Output the string */
-    while (Len--) {
-        AddChar (P, *Val++);
-    }
-
-    /* Output right padding if any */
-    if (WidthPadding > 0) {
-        AddPadding (P, ' ', WidthPadding);
-    }
-}
-
-
-
-static void StoreOffset (PrintfCtrl* P)
-/* Store the current output offset (%n format spec) */
-{
-    switch (P->LengthMod) {
-        case lmChar:     *va_arg (P->ap, int*)       = P->BufFill;
-        case lmShort:    *va_arg (P->ap, int*)       = P->BufFill;
-        case lmInt:      *va_arg (P->ap, int*)       = P->BufFill;
-        case lmLong:     *va_arg (P->ap, long*)      = P->BufFill;
-        case lmIntMax:   *va_arg (P->ap, intmax_t*)  = P->BufFill;
-        case lmSizeT:    *va_arg (P->ap, size_t*)    = P->BufFill;
-        case lmPtrDiffT: *va_arg (P->ap, ptrdiff_t*) = P->BufFill;
-        default: FAIL ("Invalid size modifier for %n format spec in xvsnprintf");
-    }
-}
-
-
-
-int xvsnprintf (char* Buf, size_t Size, const char* Format, va_list ap)
-/* A basic vsnprintf implementation. Does currently only support integer
-** formats.
-*/
-{
-    PrintfCtrl P;
-    int Done;
-    char F;
-    char SBuf[2];
-    const char* SPtr;
-    int UseStrBuf = 0;
-
-
-    /* Initialize the control structure */
-    va_copy (P.ap, ap);
-    P.Buf       = Buf;
-    P.BufSize   = Size;
-    P.BufFill   = 0;
-
-    /* Parse the format string */
-    while ((F = *Format++) != '\0') {
-
-        if (F != '%') {
-            /* Not a format specifier, just copy */
-            AddChar (&P, F);
-            continue;
-        }
-
-        /* Check for %% */
-        if (*Format == '%') {
-            ++Format;
-            AddChar (&P, '%');
-            continue;
-        }
-
-        /* It's a format specifier. Check for flags. */
-        F = *Format++;
-        P.Flags = fNone;
-        Done = 0;
-        while (F != '\0' && !Done) {
-            switch (F) {
-                case '-': P.Flags |= fMinus; F = *Format++; break;
-                case '+': P.Flags |= fPlus;  F = *Format++; break;
-                case ' ': P.Flags |= fSpace; F = *Format++; break;
-                case '#': P.Flags |= fHash;  F = *Format++; break;
-                case '0': P.Flags |= fZero;  F = *Format++; break;
-                default:  Done     = 1;                     break;
-            }
-        }
-        /* Optional field width */
-        if (F == '*') {
-            P.Width = va_arg (P.ap, int);
-            /* A negative field width argument is taken as a - flag followed
-            ** by a positive field width.
-            */
-            if (P.Width < 0) {
-                P.Flags |= fMinus;
-                P.Width = -P.Width;
-            }
-            F = *Format++;
-            P.Flags |= fWidth;
-        } else if (IsDigit (F)) {
-            P.Width = F - '0';
-            while (1) {
-                F = *Format++;
-                if (!IsDigit (F)) {
-                    break;
-                }
-                P.Width = P.Width * 10 + (F - '0');
-            }
-            P.Flags |= fWidth;
-        }
-
-        /* Optional precision */
-        if (F == '.') {
-            F = *Format++;
-            P.Flags |= fPrec;
-            if (F == '*') {
-                P.Prec = va_arg (P.ap, int);
-                /* A negative precision argument is taken as if the precision
-                ** were omitted.
-                */
-                if (P.Prec < 0) {
-                    P.Flags &= ~fPrec;
-                }
-                F = *Format++;          /* Skip the '*' */
-            } else if (IsDigit (F)) {
-                P.Prec = F - '0';
-                while (1) {
-                    F = *Format++;
-                    if (!IsDigit (F)) {
-                        break;
-                    }
-                    P.Prec = P.Prec * 10 + (F - '0');
-                }
-            } else if (F == '-') {
-                /* A negative precision argument is taken as if the precision
-                ** were omitted.
-                */
-                F = *Format++;          /* Skip the minus */
-                while (IsDigit (F = *Format++)) ;
-                P.Flags &= ~fPrec;
-            } else {
-                P.Prec = 0;
-            }
-        }
-
-        /* Optional length modifier */
-        P.LengthMod = lmDefault;
-        switch (F) {
-
-            case 'h':
-                F = *Format++;
-                if (F == 'h') {
-                    F = *Format++;
-                    P.LengthMod = lmChar;
-                } else {
-                    P.LengthMod = lmShort;
-                }
-                break;
-
-            case 'l':
-                F = *Format++;
-                if (F == 'l') {
-                    F = *Format++;
-                    P.LengthMod = lmLongLong;
-                } else {
-                    P.LengthMod = lmLong;
-                }
-                break;
-
-            case 'j':
-                P.LengthMod = lmIntMax;
-                F = *Format++;
-                break;
-
-            case 'z':
-                P.LengthMod = lmSizeT;
-                F = *Format++;
-                break;
-
-            case 't':
-                P.LengthMod = lmPtrDiffT;
-                F = *Format++;
-                break;
-
-            case 'L':
-                P.LengthMod = lmLongDouble;
-                F = *Format++;
-                break;
-
-        }
-
-        /* If the space and + flags both appear, the space flag is ignored */
-        if ((P.Flags & (fSpace | fPlus)) == (fSpace | fPlus)) {
-            P.Flags &= ~fSpace;
-        }
-        /* If the 0 and - flags both appear, the 0 flag is ignored */
-        if ((P.Flags & (fZero | fMinus)) == (fZero | fMinus)) {
-            P.Flags &= ~fZero;
-        }
-        /* If a precision is specified, the 0 flag is ignored */
-        if (P.Flags & fPrec) {
-            P.Flags &= ~fZero;
-        }
-
-        /* Conversion specifier */
-        switch (F) {
-
-            case 'd':
-            case 'i':
-                P.Base = 10;
-                FormatInt (&P, NextIVal (&P));
-                break;
-
-            case 'o':
-                P.Flags |= fUnsigned;
-                P.Base = 8;
-                FormatInt (&P, NextUVal (&P));
-                break;
-
-            case 'u':
-                P.Flags |= fUnsigned;
-                P.Base = 10;
-                FormatInt (&P, NextUVal (&P));
-                break;
-
-            case 'X':
-                P.Flags |= (fUnsigned | fUpcase);
-                /* FALLTHROUGH */
-            case 'x':
-                P.Base = 16;
-                FormatInt (&P, NextUVal (&P));
-                break;
-
-            case 'c':
-                SBuf[0] = (char) va_arg (P.ap, int);
-                SBuf[1] = '\0';
-                FormatStr (&P, SBuf);
-                break;
-
-            case 's':
-                SPtr = va_arg (P.ap, const char*);
-                CHECK (SPtr != 0);
-                FormatStr (&P, SPtr);
-                break;
-
-            case 'p':
-                /* See comment at top of header file */
-                if (UseStrBuf) {
-                    /* Argument is StrBuf */
-                    const StrBuf* S = va_arg (P.ap, const StrBuf*);
-                    CHECK (S != 0);
-                    /* Handle the length by using a precision */
-                    if ((P.Flags & fPrec) != 0) {
-                        /* Precision already specified, use length of string 
-                        ** if less.
-                        */
-                        if ((unsigned) P.Prec > SB_GetLen (S)) {
-                            P.Prec = SB_GetLen (S);
-                        }
-                    } else {
-                        /* No precision, add it */
-                        P.Flags |= fPrec;
-                        P.Prec  = SB_GetLen (S);
-                    }
-                    FormatStr (&P, SB_GetConstBuf (S));
-                    UseStrBuf = 0;              /* Reset flag */
-                } else {
-                    /* Use hex format for pointers */
-                    P.Flags |= (fUnsigned | fPrec);
-                    P.Prec = ((sizeof (void*) * CHAR_BIT) + 3) / 4;
-                    P.Base = 16;
-                    FormatInt (&P, (uintptr_t) va_arg (P.ap, void*));
-                }
-                break;
-
-            case 'm':
-                /* See comment at top of header file */
-                UseStrBuf = 1;
-                break;
-
-            case 'n':
-                StoreOffset (&P);
-                break;
-
-            default:
-                /* Invalid format spec */
-                FAIL ("Invalid format specifier in xvsnprintf");
-
-        }
-    }
-
-    /* We don't need P.ap any longer */
-    va_end (P.ap);
-
-    /* Terminate the output string and return the number of chars that had
-    ** been written if the buffer was large enough.
-    ** Beware: The terminating zero is not counted for the function result!
-    */
-    AddChar (&P, '\0');
-    return P.BufFill - 1;
-}
-
-
-
-int xsnprintf (char* Buf, size_t Size, const char* Format, ...)
-/* A basic snprintf implementation. Does currently only support integer
-** formats.
-*/
-{
-    int Res;
-    va_list ap;
-
-    va_start (ap, Format);
-    Res = xvsnprintf (Buf, Size, Format, ap);
-    va_end (ap);
-
-    return Res;
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int xsprintf (char* Buf, size_t BufSize, const char* Format, ...)
-/* Replacement function for sprintf */
-{
-    int Res;
-    va_list ap;
-
-    va_start (ap, Format);
-    Res = xvsprintf (Buf, BufSize, Format, ap);
-    va_end (ap);
-
-    return Res;
-}
-
-
-
-int xvsprintf (char* Buf, size_t BufSize, const char* Format, va_list ap)
-/* Replacement function for sprintf */
-{
-    int Res = xvsnprintf (Buf, BufSize, Format, ap);
-    CHECK (Res >= 0 && (unsigned) (Res+1) < BufSize);
-    return Res;
-}
diff --git a/src/common/xsprintf.h b/src/common/xsprintf.h
deleted file mode 100644 (file)
index a37b719..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                xsprintf.h                                 */
-/*                                                                           */
-/*                       Replacement sprintf function                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2008 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* We need a way to output a StrBuf, but on the other side, we don't want to 
-** switch off gcc's printf format string checking. So we cheat as follows: 
-** %m (which is a gcc extension and doesn't take an argument) switches %p 
-** between outputting a pointer and a string buf. This works just one time,
-** so each StrBuf needs in fact a %m%p spec. There's no way to apply a width
-** and precision to such a StrBuf, but *not* using %p would bring up a warning
-** about a wrong argument type each time. Maybe gcc will one day allow custom
-** format specifiers and we can change this ...
-*/
-
-
-
-#ifndef XSPRINTF_H
-#define XSPRINTF_H
-
-
-
-#include <stdlib.h>
-#include <stdarg.h>
-
-#include "attrib.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int xvsnprintf (char* Buf, size_t Size, const char* Format, va_list ap)
-        attribute ((format (printf, 3, 0)));
-/* A basic vsnprintf implementation. Does currently only support integer
-** formats.
-*/
-
-int xsnprintf (char* Buf, size_t Size, const char* Format, ...)
-        attribute ((format (printf, 3, 4)));
-/* A basic snprintf implementation. Does currently only support integer
-** formats.
-*/
-
-int xsprintf (char* Buf, size_t BufSize, const char* Format, ...)
-        attribute ((format (printf, 3, 4)));
-/* Replacement function for sprintf. Will FAIL on errors. */
-
-int xvsprintf (char* Buf, size_t BufSize, const char* Format, va_list ap)
-        attribute ((format (printf, 3, 0)));
-/* Replacement function for sprintf. Will FAIL on errors. */
-
-
-
-/* End of xsprintf.h */
-
-#endif
diff --git a/src/da65.vcxproj b/src/da65.vcxproj
deleted file mode 100644 (file)
index 7810844..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{0BCFB793-2B25-40E2-B265-75848824AC4C}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>da65</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>false</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="da65\asminc.c" />
-    <ClCompile Include="da65\attrtab.c" />
-    <ClCompile Include="da65\code.c" />
-    <ClCompile Include="da65\comments.c" />
-    <ClCompile Include="da65\data.c" />
-    <ClCompile Include="da65\error.c" />
-    <ClCompile Include="da65\global.c" />
-    <ClCompile Include="da65\handler.c" />
-    <ClCompile Include="da65\infofile.c" />
-    <ClCompile Include="da65\labels.c" />
-    <ClCompile Include="da65\main.c" />
-    <ClCompile Include="da65\opc6502.c" />
-    <ClCompile Include="da65\opc6502x.c" />
-    <ClCompile Include="da65\opc65816.c" />
-    <ClCompile Include="da65\opc65c02.c" />
-    <ClCompile Include="da65\opc65sc02.c" />
-    <ClCompile Include="da65\opchuc6280.c" />
-    <ClCompile Include="da65\opcm740.c" />
-    <ClCompile Include="da65\opctable.c" />
-    <ClCompile Include="da65\output.c" />
-    <ClCompile Include="da65\scanner.c" />
-    <ClCompile Include="da65\segment.c" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="da65\asminc.h" />
-    <ClInclude Include="da65\attrtab.h" />
-    <ClInclude Include="da65\code.h" />
-    <ClInclude Include="da65\comments.h" />
-    <ClInclude Include="da65\data.h" />
-    <ClInclude Include="da65\error.h" />
-    <ClInclude Include="da65\global.h" />
-    <ClInclude Include="da65\handler.h" />
-    <ClInclude Include="da65\infofile.h" />
-    <ClInclude Include="da65\labels.h" />
-    <ClInclude Include="da65\opc6502.h" />
-    <ClInclude Include="da65\opc6502x.h" />
-    <ClInclude Include="da65\opc65816.h" />
-    <ClInclude Include="da65\opc65c02.h" />
-    <ClInclude Include="da65\opc65sc02.h" />
-    <ClInclude Include="da65\opcdesc.h" />
-    <ClInclude Include="da65\opchuc6280.h" />
-    <ClInclude Include="da65\opcm740.h" />
-    <ClInclude Include="da65\opctable.h" />
-    <ClInclude Include="da65\output.h" />
-    <ClInclude Include="da65\scanner.h" />
-    <ClInclude Include="da65\segment.h" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/src/da65/asminc.c b/src/da65/asminc.c
deleted file mode 100644 (file)
index 06a397d..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 asminc.c                                  */
-/*                                                                           */
-/*             Read an assembler include file containing symbols             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2005-2008 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <errno.h>
-
-/* common */
-#include "chartype.h"
-#include "strbuf.h"
-
-/* da65 */
-#include "asminc.h"
-#include "comments.h"
-#include "error.h"
-#include "labels.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static char* SkipWhitespace (char* L)
-/* Ignore white space in L */
-{
-    while (IsBlank (*L)) {
-        ++L;
-    }
-    return L;
-}
-
-
-
-unsigned DigitVal (unsigned char C)
-/* Return the value of the given digit */
-{
-    if (IsDigit (C)) {
-        return C - '0';
-    } else {
-        return tolower (C) - 'a' + 10;
-    }
-}
-
-
-
-void AsmInc (const char* Filename, char CommentStart, int IgnoreUnknown)
-/* Read an assembler include file */
-{
-    char        Buf[1024];
-    char*       L;
-    const char* Comment;
-    unsigned    Line;
-    unsigned    Len;
-    long        Val;
-    unsigned    DVal;
-    int         Sign;
-    unsigned    Base;
-    unsigned    Digits;
-    StrBuf      Ident = STATIC_STRBUF_INITIALIZER;
-
-    /* Try to open the file for reading */
-    FILE* F = fopen (Filename, "r");
-    if (F == 0) {
-        Error ("Cannot open asm include file \"%s\": %s",
-               Filename, strerror (errno));
-    }
-
-    /* Read line by line, check for NAME = VALUE lines */
-    Line = 0;
-    while ((L = fgets (Buf, sizeof (Buf), F)) != 0) {
-
-        /* One more line read */
-        ++Line;
-
-        /* Ignore leading white space */
-        while (IsBlank (*L)) {
-            ++L;
-        }
-
-        /* Remove trailing whitespace */
-        Len = strlen (L);
-        while (Len > 0 && IsSpace (L[Len-1])) {
-            --Len;
-        }
-        L[Len] = '\0';
-
-        /* If the line is empty or starts with a comment char, ignore it */
-        if (*L == '\0' || *L == CommentStart) {
-            continue;
-        }
-
-        /* Read an identifier */
-        SB_Clear (&Ident);
-        if (IsAlpha (*L) || *L == '_') {
-            SB_AppendChar (&Ident, *L++);
-            while (IsAlNum (*L) || *L == '_') {
-                SB_AppendChar (&Ident, *L++);
-            }
-            SB_Terminate (&Ident);
-        } else {
-            if (!IgnoreUnknown) {
-                Error ("%s(%u): Syntax error", Filename, Line);
-            }
-            continue;
-        }
-
-        /* Ignore white space */
-        L = SkipWhitespace (L);
-
-        /* Check for := or = */
-        if (*L == '=') {
-            ++L;
-        } else if (*L == ':' && *++L == '=') {
-            ++L;
-        } else {
-            if (!IgnoreUnknown) {
-                Error ("%s(%u): Missing `='", Filename, Line);
-            }
-            continue;
-        }
-
-        /* Allow white space once again */
-        L = SkipWhitespace (L);
-
-        /* A number follows. Read the sign. */
-        if (*L == '-') {
-            Sign = -1;
-            ++L;
-        } else {
-            Sign = 1;
-            if (*L == '+') {
-                ++L;
-            }
-        }
-
-        /* Determine the base of the number. Allow $ and % as prefixes for
-        ** hex and binary numbers respectively.
-        */
-        if (*L == '$') {
-            Base = 16;
-            ++L;
-        } else if (*L == '%') {
-            Base = 2;
-            ++L;
-        } else {
-            Base = 10;
-        }
-
-        /* Decode the number */
-        Digits = 0;
-        Val = 0;
-        while (IsXDigit (*L) && (DVal = DigitVal (*L)) < Base) {
-            Val = (Val * Base) + DVal;
-            ++Digits;
-            ++L;
-        }
-
-        /* Must have at least one digit */
-        if (Digits == 0) {
-            if (!IgnoreUnknown) {
-                Error ("%s(%u): Error in number format", Filename, Line);
-            }
-            continue;
-        }
-
-        /* Skip whitespace again */
-        L = SkipWhitespace (L);
-
-        /* Check for a comment */
-        if (*L == CommentStart) {
-            Comment = SkipWhitespace (L+1);
-            if (*Comment == '\0') {
-                Comment = 0;
-            }
-        } else {
-            Comment = 0;
-        }
-
-        /* Check for a comment character or end of line */
-        if (*L != CommentStart && *L != '\0') {
-            if (!IgnoreUnknown) {
-                Error ("%s(%u): Trailing garbage", Filename, Line);
-            }
-            continue;
-        }
-
-        /* Apply the sign */
-        Val *= Sign;
-
-        /* Define the symbol and the comment */
-        AddExtLabel (Val, SB_GetConstBuf (&Ident));
-        SetComment (Val, Comment);
-
-    }
-
-    /* Delete the string buffer contents */
-    SB_Done (&Ident);
-
-    /* Close the include file ignoring errors (we were just reading). */
-    (void) fclose (F);
-}
diff --git a/src/da65/asminc.h b/src/da65/asminc.h
deleted file mode 100644 (file)
index bf48710..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 asminc.h                                  */
-/*                                                                           */
-/*             Read an assembler include file containing symbols             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2005      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ASMINC_H
-#define ASMINC_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void AsmInc (const char* Filename, char CommentStart, int IgnoreUnknown);
-/* Read an assembler include file */
-
-
-
-/* End of asminc.h */
-
-#endif
diff --git a/src/da65/attrtab.c b/src/da65/attrtab.c
deleted file mode 100644 (file)
index a914358..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 attrtab.c                                 */
-/*                                                                           */
-/*                       Disassembler attribute table                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2014, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* da65 */
-#include "error.h"
-#include "attrtab.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Attribute table */
-static unsigned short AttrTab[0x10000];
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void AddrCheck (unsigned Addr)
-/* Check if the given address has a valid range */
-{
-    if (Addr >= 0x10000) {
-        Error ("Address out of range: %08X", Addr);
-    }
-}
-
-
-
-attr_t GetAttr (unsigned Addr)
-/* Return the attribute for the given address */
-{
-    /* Check the given address */
-    AddrCheck (Addr);
-
-    /* Return the attribute */
-    return AttrTab[Addr];
-}
-
-
-
-int SegmentDefined (unsigned Start, unsigned End)
-/* Return true if the atSegment bit is set somewhere in the given range */
-{
-    while (Start <= End) {
-        if (AttrTab[Start++] & atSegment) {
-            return 1;
-        }
-    }
-    return 0;
-}
-
-
-
-int IsSegmentEnd (unsigned Addr)
-/* Return true if a segment ends at the given address */
-{
-    return (GetAttr (Addr) & atSegmentEnd) != 0x0000;
-}
-
-
-
-int IsSegmentStart (unsigned Addr)
-/* Return true if a segment starts at the given address */
-{
-    return (GetAttr (Addr) & atSegmentStart) != 0x0000;
-}
-
-
-
-unsigned GetGranularity (attr_t Style)
-/* Get the granularity for the given style */
-{
-    switch (Style) {
-        case atDefault:  return 1;
-        case atCode:     return 1;
-        case atIllegal:  return 1;
-        case atByteTab:  return 1;
-        case atDByteTab: return 2;
-        case atWordTab:  return 2;
-        case atDWordTab: return 4;
-        case atAddrTab:  return 2;
-        case atRtsTab:   return 2;
-        case atTextTab:  return 1;
-
-        case atSkip:
-        default:
-            Internal ("GetGraularity called for style = %d", Style);
-            return 0;
-    }
-}
-
-
-
-void MarkRange (unsigned Start, unsigned End, attr_t Attr)
-/* Mark a range with the given attribute */
-{
-    /* Do it easy here... */
-    while (Start <= End) {
-        MarkAddr (Start++, Attr);
-    }
-}
-
-
-
-void MarkAddr (unsigned Addr, attr_t Attr)
-/* Mark an address with an attribute */
-{
-    /* Check the given address */
-    AddrCheck (Addr);
-
-    /* We must not have more than one style bit */
-    if (Attr & atStyleMask) {
-        if (AttrTab[Addr] & atStyleMask) {
-            Error ("Duplicate style for address %04X", Addr);
-        }
-    }
-
-    /* Set the style */
-    AttrTab[Addr] |= Attr;
-}
-
-
-
-attr_t GetStyleAttr (unsigned Addr)
-/* Return the style attribute for the given address */
-{
-    /* Check the given address */
-    AddrCheck (Addr);
-
-    /* Return the attribute */
-    return (AttrTab[Addr] & atStyleMask);
-}
-
-
-
-attr_t GetLabelAttr (unsigned Addr)
-/* Return the label attribute for the given address */
-{
-    /* Check the given address */
-    AddrCheck (Addr);
-
-    /* Return the attribute */
-    return (AttrTab[Addr] & atLabelMask);
-}
diff --git a/src/da65/attrtab.h b/src/da65/attrtab.h
deleted file mode 100644 (file)
index 18515ce..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 attrtab.h                                 */
-/*                                                                           */
-/*                       Disassembler attribute table                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2014, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ATTRTAB_H
-#define ATTRTAB_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-typedef enum attr_t {
-
-    /* Styles */
-    atDefault      = 0x0000,    /* Default style */
-    atCode         = 0x0001,
-    atIllegal      = 0x0002,
-    atByteTab      = 0x0003,    /* Same as illegal */
-    atDByteTab     = 0x0004,
-    atWordTab      = 0x0005,
-    atDWordTab     = 0x0006,
-    atAddrTab      = 0x0007,
-    atRtsTab       = 0x0008,
-    atTextTab      = 0x0009,
-    atSkip         = 0x000A,    /* Skip code completely */
-
-    /* Label flags */
-    atNoLabel      = 0x0000,    /* No label for this address */
-    atExtLabel     = 0x0010,    /* External label */
-    atIntLabel     = 0x0020,    /* Internally generated label */
-    atDepLabel     = 0x0040,    /* Dependent label */
-    atUnnamedLabel = 0x0080,    /* Unnamed label */
-
-    atLabelDefined = 0x0100,    /* True if we defined the label */
-
-    atStyleMask    = 0x000F,    /* Output style */
-    atLabelMask    = 0x00F0,    /* Label information */
-
-    /* Segment */
-    atSegment      = 0x0100,    /* Code is in a segment */
-    atSegmentEnd   = 0x0200,    /* Segment end */
-    atSegmentStart = 0x0400,    /* Segment start */
-} attr_t;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void AddrCheck (unsigned Addr);
-/* Check if the given address has a valid range */
-
-attr_t GetAttr (unsigned Addr);
-/* Return the attribute for the given address */
-
-int SegmentDefined (unsigned Start, unsigned End);
-/* Return true if the atSegment bit is set somewhere in the given range */
-
-int IsSegmentEnd (unsigned Addr);
-/* Return true if a segment ends at the given address */
-
-int IsSegmentStart (unsigned Addr);
-/* Return true if a segment starts at the given address */
-
-unsigned GetGranularity (attr_t Style);
-/* Get the granularity for the given style */
-
-void MarkRange (unsigned Start, unsigned End, attr_t Attr);
-/* Mark a range with the given attribute */
-
-void MarkAddr (unsigned Addr, attr_t Attr);
-/* Mark an address with an attribute */
-
-attr_t GetStyleAttr (unsigned Addr);
-/* Return the style attribute for the given address */
-
-attr_t GetLabelAttr (unsigned Addr);
-/* Return the label attribute for the given address */
-
-
-
-/* End of attrtab.h */
-#endif
diff --git a/src/da65/code.c b/src/da65/code.c
deleted file mode 100644 (file)
index 9aff732..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  code.c                                   */
-/*                                                                           */
-/*                          Binary code management                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2003 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "check.h"
-
-/* da65 */
-#include "code.h"
-#include "error.h"
-#include "global.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-unsigned char CodeBuf [0x10000];        /* Code buffer */
-unsigned long CodeStart;                /* Start address */
-unsigned long CodeEnd;                  /* End address */
-unsigned long PC;                       /* Current PC */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void LoadCode (void)
-/* Load the code from the given file */
-{
-    long Count, MaxCount, Size;
-    FILE* F;
-
-
-    PRECONDITION (StartAddr < 0x10000);
-
-    /* Open the file */
-    F = fopen (InFile, "rb");
-    if (F == 0) {
-        Error ("Cannot open `%s': %s", InFile, strerror (errno));
-    }
-
-    /* Seek to the end to get the size of the file */
-    if (fseek (F, 0, SEEK_END) != 0) {
-        Error ("Cannot seek on file `%s': %s", InFile, strerror (errno));
-    }
-    Size = ftell (F);
-
-    /* The input offset must be smaller than the size */
-    if (InputOffs >= 0) {
-        if (InputOffs >= Size) {
-            Error ("Input offset is greater than file size");
-        }
-    } else {
-        /* Use a zero offset */
-        InputOffs = 0;
-    }
-
-    /* Seek to the input offset and correct size to contain the remainder of
-    ** the file.
-    */
-    if (fseek (F, InputOffs, SEEK_SET) != 0) {
-        Error ("Cannot seek on file `%s': %s", InFile, strerror (errno));
-    }
-    Size -= InputOffs;
-
-    /* Limit the size to the maximum input size if one is given */
-    if (InputSize >= 0) {
-        if (InputSize > Size) {
-            Error ("Input size is greater than what is available");
-        }
-        Size = InputSize;
-    }
-
-    /* If the start address was not given, set it so that the code loads to
-    ** 0x10000 - Size. This is a reasonable default assuming that the file
-    ** is a ROM that contains the hardware vectors at $FFFA.
-    */
-    if (StartAddr < 0) {
-        if (Size > 0x10000) {
-            StartAddr = 0;
-        } else {
-            StartAddr = 0x10000 - Size;
-        }
-    }
-
-    /* Calculate the maximum code size */
-    MaxCount = 0x10000 - StartAddr;
-
-    /* Check if the size is larger than what we can read */
-    if (Size == 0) {
-        Error ("Nothing to read from input file `%s'", InFile);
-    }
-    if (Size > MaxCount) {
-        Warning ("File `%s' is too large, ignoring %ld bytes",
-                 InFile, Size - MaxCount);
-    } else if (MaxCount > Size) {
-        MaxCount = (unsigned) Size;
-    }
-
-    /* Read from the file and remember the number of bytes read */
-    Count = fread (CodeBuf + StartAddr, 1, MaxCount, F);
-    if (ferror (F) || Count != MaxCount) {
-        Error ("Error reading from `%s': %s", InFile, strerror (errno));
-    }
-
-    /* Close the file */
-    fclose (F);
-
-    /* Set the buffer variables */
-    CodeStart = PC = StartAddr;
-    CodeEnd = CodeStart + Count - 1;    /* CodeEnd is inclusive */
-}
-
-
-
-unsigned char GetCodeByte (unsigned Addr)
-/* Get a byte from the given address */
-{
-    PRECONDITION (Addr <= CodeEnd);
-    return CodeBuf [Addr];
-}
-
-
-
-unsigned GetCodeDByte (unsigned Addr)
-/* Get a dbyte from the given address */
-{
-    unsigned Lo = GetCodeByte (Addr);
-    unsigned Hi = GetCodeByte (Addr+1);
-    return (Lo <<8) | Hi;
-}
-
-
-
-unsigned GetCodeWord (unsigned Addr)
-/* Get a word from the given address */
-{
-    unsigned Lo = GetCodeByte (Addr);
-    unsigned Hi = GetCodeByte (Addr+1);
-    return Lo | (Hi << 8);
-}
-
-
-
-unsigned long GetCodeDWord (unsigned Addr)
-/* Get a dword from the given address */
-{
-    unsigned long Lo = GetCodeWord (Addr);
-    unsigned long Hi = GetCodeWord (Addr+2);
-    return Lo | (Hi << 16);
-}
-
-
-
-unsigned GetRemainingBytes (void)
-/* Return the number of remaining code bytes */
-{
-    if (CodeEnd >= PC) {
-        return (CodeEnd - PC + 1);
-    } else {
-        return 0;
-    }
-}
-
-
-
-int CodeLeft (void)
-/* Return true if there are code bytes left */
-{
-    return (PC <= CodeEnd);
-}
-
-
-
-void ResetCode (void)
-/* Reset the code input to start over for the next pass */
-{
-    PC = CodeStart;
-}
diff --git a/src/da65/code.h b/src/da65/code.h
deleted file mode 100644 (file)
index 0d21e61..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  code.h                                   */
-/*                                                                           */
-/*                          Binary code management                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef CODE_H
-#define CODE_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-extern unsigned char CodeBuf [0x10000];         /* Code buffer */
-extern unsigned long CodeStart;                 /* Start address */
-extern unsigned long CodeEnd;                   /* End address */
-extern unsigned long PC;                        /* Current PC */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void LoadCode (void);
-/* Load the code from the given file */
-
-unsigned char GetCodeByte (unsigned Addr);
-/* Get a byte from the given address */
-
-unsigned GetCodeDByte (unsigned Addr);
-/* Get a dbyte from the given address */
-
-unsigned GetCodeWord (unsigned Addr);
-/* Get a word from the given address */
-
-unsigned long GetCodeDWord (unsigned Addr);
-/* Get a dword from the given address */
-
-unsigned GetRemainingBytes (void);
-/* Return the number of remaining code bytes */
-
-int CodeLeft (void);
-/* Return true if there are code bytes left */
-
-void ResetCode (void);
-/* Reset the code input to start over for the next pass */
-
-
-
-/* End of code.h */
-
-#endif
diff --git a/src/da65/comments.c b/src/da65/comments.c
deleted file mode 100644 (file)
index 64b64ca..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                comments.c                                 */
-/*                                                                           */
-/*                        Comment management for da65                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2006      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "xmalloc.h"
-
-/* da65 */        
-#include "attrtab.h"
-#include "comments.h"
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Comment table */
-static const char* CommentTab[0x10000];
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void SetComment (unsigned Addr, const char* Comment)
-/* Set a comment for the given address */
-{
-    /* Check the given address */
-    AddrCheck (Addr);
-
-    /* If we do already have a comment, warn and ignore the new one */
-    if (CommentTab[Addr]) {
-        Warning ("Duplicate comment for address $%04X", Addr);
-    } else {
-        CommentTab[Addr] = xstrdup (Comment);
-    }
-}
-
-
-
-const char* GetComment (unsigned Addr)
-/* Return the comment for an address */
-{
-    /* Check the given address */
-    AddrCheck (Addr);
-
-    /* Return the label if any */
-    return CommentTab[Addr];
-}
diff --git a/src/da65/comments.h b/src/da65/comments.h
deleted file mode 100644 (file)
index 1b8bc17..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                comments.h                                 */
-/*                                                                           */
-/*                        Comment management for da65                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2006      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef COMMENTS_H
-#define COMMENTS_H
-
-
-
-#include "attrtab.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void SetComment (unsigned Addr, const char* Comment);
-/* Set a comment for the given address */
-
-const char* GetComment (unsigned Addr);
-/* Return the comment for an address */
-
-
-
-/* End of comments.h */
-
-#endif
diff --git a/src/da65/data.c b/src/da65/data.c
deleted file mode 100644 (file)
index 7355e60..0000000
+++ /dev/null
@@ -1,375 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  data.c                                   */
-/*                                                                           */
-/*                           Data output routines                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2014, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* da65 */
-#include "attrtab.h"
-#include "code.h"
-#include "error.h"
-#include "global.h"
-#include "labels.h"
-#include "output.h"
-#include "data.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static unsigned GetSpan (attr_t Style)
-/* Get the number of bytes for a given style */
-{
-    /* Get the number of bytes still available */
-    unsigned RemainingBytes = GetRemainingBytes ();
-
-    /* Count how many bytes are available. This number is limited by the
-    ** number of remaining bytes, a label, a segment change, or the end of
-    ** the given Style attribute.
-    */
-    unsigned Count = 1;
-    while (Count < RemainingBytes) {
-        attr_t Attr;
-        if (MustDefLabel(PC+Count)) {
-            break;
-        }
-        Attr = GetAttr (PC+Count);
-        if ((Attr & atStyleMask) != Style) {
-            break;
-        }
-        if ((Attr & (atSegmentStart | atSegmentEnd))) {
-            break;
-        }
-        ++Count;
-    }
-
-    /* Return the number of bytes */
-    return Count;
-}
-
-
-
-static unsigned DoTable (attr_t Style, unsigned MemberSize, void (*TableFunc) (unsigned))
-/* Output a table of bytes */
-{
-    unsigned BytesLeft;
-
-    /* Count how many bytes may be output. */
-    unsigned Count = GetSpan (Style);
-
-    /* If the count is less than the member size, print a row of Count data
-    ** bytes. We assume here that there is no member with a size that is less
-    ** than BytesPerLine.
-    */
-    if (Count < MemberSize) {
-        DataByteLine (Count);
-        PC += Count;
-        return Count;
-    }
-
-    /* Make Count an even number of multiples of MemberSize */
-    Count &= ~(MemberSize-1);
-
-    /* Output as many data bytes lines as needed */
-    BytesLeft = Count;
-    while (BytesLeft > 0) {
-
-        /* Calculate the number of bytes for the next line */
-        unsigned Chunk = (BytesLeft > BytesPerLine)? BytesPerLine : BytesLeft;
-
-        /* Output a line with these bytes */
-        TableFunc (Chunk);
-
-        /* Next line */
-        BytesLeft -= Chunk;
-        PC        += Chunk;
-    }
-
-    /* If the next line is not the same style, add a separator */
-    if (CodeLeft() && GetStyleAttr (PC) != Style) {
-        SeparatorLine ();
-    }
-
-    /* Return the number of bytes output */
-    return Count;
-}
-
-
-
-unsigned ByteTable (void)
-/* Output a table of bytes */
-{
-    /* Call the low level function */
-    return DoTable (atByteTab, 1, DataByteLine);
-}
-
-
-
-unsigned DByteTable (void)
-/* Output a table of dbytes */
-{
-    /* Call the low level function */
-    return DoTable (atDByteTab, 2, DataDByteLine);
-}
-
-
-
-unsigned WordTable (void)
-/* Output a table of words */
-{
-    /* Call the low level function */
-    return DoTable (atWordTab, 2, DataWordLine);
-}
-
-
-
-unsigned DWordTable (void)
-/* Output a table of double words */
-{
-    /* Call the low level function */
-    return DoTable (atDWordTab, 4, DataDWordLine);
-}
-
-
-
-unsigned AddrTable (void)
-/* Output a table of addresses */
-{
-    unsigned long BytesLeft = GetRemainingBytes ();
-    unsigned long Start = PC;
-
-    /* Loop while table bytes left and we don't need to create a label at the
-    ** current position.
-    */
-    while (BytesLeft && GetStyleAttr (PC) == atAddrTab) {
-
-        unsigned Addr;
-
-        /* If just one byte is left, define it and bail out */
-        if (BytesLeft == 1 || GetStyleAttr (PC+1) != atAddrTab) {
-            DataByteLine (1);
-            ++PC;
-            break;
-        }
-
-        /* More than one byte left. Define a forward label if necessary */
-        ForwardLabel (1);
-
-        /* Now get the address from the PC */
-        Addr = GetCodeWord (PC);
-
-        /* In pass 1, define a label, in pass 2 output the line */
-        if (Pass == 1) {
-            if (!HaveLabel (Addr)) {
-                AddIntLabel (Addr);
-            }
-        } else {
-            const char* Label = GetLabel (Addr, PC);
-            if (Label == 0) {
-                /* OOPS! Should not happen */
-                Internal ("OOPS - Label for address 0x%06X disappeard!", Addr);
-            }
-            Indent (MCol);
-            Output (".addr");
-            Indent (ACol);
-            Output ("%s", Label);
-            LineComment (PC, 2);
-            LineFeed ();
-        }
-
-        /* Next table entry */
-        PC        += 2;
-        BytesLeft -= 2;
-
-        /* If we must define a label here, bail out */
-        if (BytesLeft && MustDefLabel (PC)) {
-            break;
-        }
-    }
-
-    /* If the next line is not an address table line, add a separator */
-    if (CodeLeft() && GetStyleAttr (PC) != atAddrTab) {
-        SeparatorLine ();
-    }
-
-    /* Return the number of bytes output */
-    return PC - Start;
-}
-
-
-
-unsigned RtsTable (void)
-/* Output a table of RTS addresses (address - 1) */
-{
-    unsigned long BytesLeft = GetRemainingBytes ();
-    unsigned long Start = PC;
-
-    /* Loop while table bytes left and we don't need to create a label at the
-    ** current position.
-    */
-    while (BytesLeft && GetStyleAttr (PC) == atRtsTab) {
-
-        unsigned Addr;
-
-        /* If just one byte is left, define it and bail out */
-        if (BytesLeft == 1 || GetStyleAttr (PC+1) != atRtsTab) {
-            DataByteLine (1);
-            ++PC;
-            break;
-        }
-
-        /* More than one byte left. Define a forward label if necessary */
-        ForwardLabel (1);
-
-        /* Now get the address from the PC */
-        Addr = (GetCodeWord (PC) + 1) & 0xFFFF;
-
-        /* In pass 1, define a label, in pass 2 output the line */
-        if (Pass == 1) {
-            if (!HaveLabel (Addr)) {
-                AddIntLabel (Addr);
-            }
-        } else {
-            const char* Label = GetLabel (Addr, PC);
-            if (Label == 0) {
-                /* OOPS! Should not happen */
-                Internal ("OOPS - Label for address 0x%06X disappeard!", Addr);
-            }
-            Indent (MCol);
-            Output (".word");
-            Indent (ACol);
-            Output ("%s-1", Label);
-            LineComment (PC, 2);
-            LineFeed ();
-        }
-
-        /* Next table entry */
-        PC        += 2;
-        BytesLeft -= 2;
-
-        /* If we must define a label here, bail out */
-        if (BytesLeft && MustDefLabel (PC)) {
-            break;
-        }
-    }
-
-    /* If the next line is not a return address table line, add a separator */
-    if (CodeLeft() && GetStyleAttr (PC) != atRtsTab) {
-        SeparatorLine ();
-    }
-
-    /* Return the number of bytes output */
-    return PC - Start;
-}
-
-
-
-unsigned TextTable (void)
-/* Output a table of text messages */
-{
-    /* Count how many bytes may be output. */
-    unsigned ByteCount = GetSpan (atTextTab);
-
-    /* Output as many data bytes lines as needed. */
-    unsigned BytesLeft = ByteCount;
-    while (BytesLeft > 0) {
-
-        unsigned I;
-
-        /* Count the number of characters that can be output as such */
-        unsigned Count = 0;
-        while (Count < BytesLeft && Count < BytesPerLine*4-1) {
-            unsigned char C = GetCodeByte (PC + Count);
-            if (C >= 0x20 && C <= 0x7E && C != '\"') {
-                ++Count;
-            } else {
-                break;
-            }
-        }
-
-        /* If we have text, output it */
-        if (Count > 0) {
-            unsigned CBytes;
-            Indent (MCol);
-            Output (".byte");
-            Indent (ACol);
-            Output ("\"");
-            for (I = 0; I < Count; ++I) {
-                Output ("%c", GetCodeByte (PC+I));
-            }
-            Output ("\"");
-            CBytes = Count;
-            while (CBytes > 0) {
-                unsigned Chunk = CBytes;
-                if (Chunk > BytesPerLine) {
-                    Chunk = BytesPerLine;
-                }
-                LineComment (PC, Chunk);
-                LineFeed ();
-                CBytes -= Chunk;
-                PC += Chunk;
-            }
-            BytesLeft -= Count;
-        }
-
-        /* Count the number of bytes that must be output as bytes */
-        Count = 0;
-        while (Count < BytesLeft && Count < BytesPerLine) {
-            unsigned char C = GetCodeByte (PC + Count);
-            if (C < 0x20 || C > 0x7E || C == '\"') {
-                ++Count;
-            } else {
-                break;
-            }
-        }
-
-        /* If we have raw output bytes, print them */
-        if (Count > 0) {
-            DataByteLine (Count);
-            PC += Count;
-            BytesLeft -= Count;
-        }
-
-    }
-
-    /* If the next line is not a byte table line, add a separator */
-    if (CodeLeft() && GetStyleAttr (PC) != atTextTab) {
-        SeparatorLine ();
-    }
-
-    /* Return the number of bytes output */
-    return ByteCount;
-}
diff --git a/src/da65/data.h b/src/da65/data.h
deleted file mode 100644 (file)
index 4cec14a..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  data.h                                   */
-/*                                                                           */
-/*                           Data output routines                            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef DATA_H
-#define DATA_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-unsigned ByteTable (void);
-/* Output a table of bytes */
-
-unsigned DByteTable (void);
-/* Output a table of dbytes */
-
-unsigned WordTable (void);
-/* Output a table of words */
-
-unsigned DWordTable (void);
-/* Output a table of double words */
-
-unsigned AddrTable (void);
-/* Output a table of addresses */
-
-unsigned RtsTable (void);
-/* Output a table of RTS addresses (address - 1) */
-
-unsigned TextTable (void);
-/* Output a table of text messages */
-
-
-
-/* End of data.h */
-
-#endif
diff --git a/src/da65/error.c b/src/da65/error.c
deleted file mode 100644 (file)
index d09dadc..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 error.c                                   */
-/*                                                                           */
-/*                              Error handling                               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-/* da65 */
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Warning (const char* Format, ...)
-/* Print a warning message */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "Warning: ");
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-}
-
-
-
-void Error (const char* Format, ...)
-/* Print an error message and die */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "Error: ");
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-    exit (EXIT_FAILURE);
-}
-
-
-
-void Internal (const char* Format, ...)
-/* Print an internal error message and die */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "Internal error: ");
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-    exit (EXIT_FAILURE);
-}
diff --git a/src/da65/error.h b/src/da65/error.h
deleted file mode 100644 (file)
index d0221bc..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 error.h                                   */
-/*                                                                           */
-/*                              Error handling                               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ERROR_H
-#define ERROR_H
-
-
-
-/* common */
-#include "attrib.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Warning (const char* Format, ...) attribute((format(printf,1,2)));
-/* Print a warning message */
-
-void Error (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print an error message and die */
-
-void Internal (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print an internal error message and die */
-
-
-
-/* End of error.h */
-
-#endif
diff --git a/src/da65/global.c b/src/da65/global.c
deleted file mode 100644 (file)
index e2b1fd1..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.c                                  */
-/*                                                                           */
-/*                Global variables for the da65 disassembler                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2006 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include "global.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* File names */
-const char* InFile            = 0;      /* Name of input file */
-const char* OutFile           = 0;      /* Name of output file */
-
-/* Default extensions */
-const char OutExt[]           = ".dis"; /* Output file extension */
-const char CfgExt[]           = ".cfg"; /* Config file extension */
-
-/* Flags and other command line stuff */
-unsigned char DebugInfo       = 0;      /* Add debug info to the object file */
-unsigned char FormFeeds       = 0;      /* Add form feeds to the output? */
-unsigned char UseHexOffs      = 0;      /* Use hexadecimal label offsets */
-unsigned char PassCount       = 2;      /* How many passed do we do? */
-signed char   NewlineAfterJMP = -1;     /* Add a newline after a JMP insn? */
-signed char   NewlineAfterRTS = -1;     /* Add a newline after a RTS insn? */
-long          StartAddr       = -1L;    /* Start/load address of the program */
-long          InputOffs       = -1L;    /* Offset into input file */
-long          InputSize       = -1L;    /* Number of bytes to read from input */
-
-/* Stuff needed by many routines */
-unsigned      Pass            = 0;      /* Disassembler pass */
-char          Now[128];                 /* Current time as string */
-
-/* Comments */
-unsigned      Comments        = 0;      /* Add which comments to the output? */
-
-/* Page formatting */
-unsigned PageLength           = 0;      /* Length of a listing page */
-unsigned LBreak               = 7;      /* Linefeed if labels exceed this limit */
-unsigned MCol                 = 9;      /* Mnemonic column */
-unsigned ACol                 = 17;     /* Argument column */
-unsigned CCol                 = 49;     /* Comment column */
-unsigned TCol                 = 81;     /* Text bytes column */
-unsigned BytesPerLine         = 8;      /* Max. number of data bytes per line */
diff --git a/src/da65/global.h b/src/da65/global.h
deleted file mode 100644 (file)
index 14b1133..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.h                                  */
-/*                                                                           */
-/*                Global variables for the da65 disassembler                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef GLOBAL_H
-#define GLOBAL_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* File stuff */
-extern const char*      InFile;         /* Name of input file */
-extern const char*      OutFile;        /* Name of output file */
-
-/* Default extensions */
-extern const char       OutExt[];       /* Output file extension */
-extern const char       CfgExt[];       /* Config file extension */
-
-/* Flags and other command line stuff */
-extern unsigned char    DebugInfo;      /* Add debug info to the object file */
-extern unsigned char    FormFeeds;      /* Add form feeds to the output? */
-extern unsigned char    UseHexOffs;     /* Use hexadecimal label offsets */
-extern unsigned char    PassCount;      /* How many passed do we do? */
-extern signed char      NewlineAfterJMP;/* Add a newline after a JMP insn? */
-extern signed char      NewlineAfterRTS;/* Add a newline after a RTS insn? */
-extern long             StartAddr;      /* Start/load address of the program */
-extern long             InputOffs;      /* Offset into input file */
-extern long             InputSize;      /* Number of bytes to read from input */
-
-/* Stuff needed by many routines */
-extern unsigned         Pass;           /* Disassembler pass */
-extern char             Now[128];       /* Current time as string */
-
-/* Comments */
-#define MIN_COMMENTS    0
-#define MAX_COMMENTS    4
-extern unsigned         Comments;       /* Add which comments to the output? */
-
-/* Page formatting */
-#define MIN_PAGE_LEN    32
-#define MAX_PAGE_LEN    127
-extern unsigned         PageLength;     /* Length of a listing page */
-
-/* Linefeed if labels exceed this limit */
-#define MIN_LABELBREAK  1
-#define MAX_LABELBREAK  128
-extern unsigned         LBreak;
-
-/* Mnemonic column */
-#define MIN_MCOL        1
-#define MAX_MCOL        127
-extern unsigned         MCol;
-
-/* Argument column */
-#define MIN_ACOL        1
-#define MAX_ACOL        127
-extern unsigned         ACol;
-
-/* Comment column */
-#define MIN_CCOL        1
-#define MAX_CCOL        127
-extern unsigned         CCol;
-
-/* Text bytes column */
-#define MIN_TCOL        1
-#define MAX_TCOL        127
-extern unsigned         TCol;
-
-/* Max. number of data bytes per line */
-#define MIN_BYTESPERLINE        1
-#define MAX_BYTESPERLINE        127
-extern unsigned         BytesPerLine;
-
-
-
-/* End of global.h */
-
-#endif
diff --git a/src/da65/handler.c b/src/da65/handler.c
deleted file mode 100644 (file)
index 0806301..0000000
+++ /dev/null
@@ -1,664 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 handler.c                                 */
-/*                                                                           */
-/*               Opcode handler functions for the disassembler               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdarg.h>
-
-/* common */
-#include "xsprintf.h"
-
-/* da65 */
-#include "attrtab.h"
-#include "code.h"
-#include "error.h"
-#include "global.h"
-#include "handler.h"
-#include "labels.h"
-#include "opctable.h"
-#include "output.h"
-
-
-
-/*****************************************************************************/
-/*                             Helper functions                              */
-/*****************************************************************************/
-
-
-
-static void Mnemonic (const char* M)
-/* Indent and output a mnemonic */
-{
-    Indent (MCol);
-    Output ("%s", M);
-}
-
-
-
-static void OneLine (const OpcDesc* D, const char* Arg, ...) attribute ((format(printf, 2, 3)));
-static void OneLine (const OpcDesc* D, const char* Arg, ...)
-/* Output one line with the given mnemonic and argument */
-{
-    char Buf [256];
-    va_list ap;
-
-    /* Mnemonic */
-    Mnemonic (D->Mnemo);
-
-    /* Argument */
-    va_start (ap, Arg);
-    xvsprintf (Buf, sizeof (Buf), Arg, ap);
-    va_end (ap);
-    Indent (ACol);
-    Output ("%s", Buf);
-
-    /* Add the code stuff as comment */
-    LineComment (PC, D->Size);
-
-    /* End the line */
-    LineFeed ();
-}
-
-
-
-static const char* GetAbsOverride (unsigned Flags, unsigned Addr)
-/* If the instruction requires an abs override modifier, return the necessary
-** string, otherwise return the empty string.
-*/
-{
-    if ((Flags & flAbsOverride) != 0 && Addr < 0x100) {
-        return "a:";
-    } else {
-        return "";
-    }
-}
-
-
-
-static const char* GetAddrArg (unsigned Flags, unsigned Addr)
-/* Return an address argument - a label if we have one, or the address itself */
-{
-    const char* Label = 0;
-    if (Flags & flUseLabel) {
-        Label = GetLabel (Addr, PC);
-    }
-    if (Label) {
-        return Label;
-    } else {
-        static char Buf [32];
-        if (Addr < 0x100) {
-            xsprintf (Buf, sizeof (Buf), "$%02X", Addr);
-        } else {
-            xsprintf (Buf, sizeof (Buf), "$%04X", Addr);
-        }
-        return Buf;
-    }
-}
-
-
-
-static void GenerateLabel (unsigned Flags, unsigned Addr)
-/* Generate a label in pass one if requested */
-{
-    /* Generate labels in pass #1, and only if we don't have a label already */
-    if (Pass == 1 && !HaveLabel (Addr) &&
-        /* Check if we must create a label */
-        ((Flags & flGenLabel) != 0 ||
-         ((Flags & flUseLabel) != 0 && Addr >= CodeStart && Addr <= CodeEnd))) {
-
-        /* As a special case, handle ranges with tables or similar. Within
-        ** such a range with a granularity > 1, do only generate dependent
-        ** labels for all addresses but the first one. Be sure to generate
-        ** a label for the start of the range, however.
-        */
-        attr_t Style         = GetStyleAttr (Addr);
-        unsigned Granularity = GetGranularity (Style);
-
-        if (Granularity == 1) {
-            /* Just add the label */
-            AddIntLabel (Addr);
-        } else {
-
-            /* THIS CODE IS A MESS AND WILL FAIL ON SEVERAL CONDITIONS! ### */
-
-
-            /* Search for the start of the range or the last non dependent
-            ** label in the range.
-            */
-            unsigned Offs;
-            attr_t LabelAttr;
-            unsigned LabelAddr = Addr;
-            while (LabelAddr > CodeStart) {
-
-                if (Style != GetStyleAttr (LabelAddr-1)) {
-                    /* End of range reached */
-                    break;
-                }
-                --LabelAddr;
-                LabelAttr = GetLabelAttr (LabelAddr);
-                if ((LabelAttr & (atIntLabel|atExtLabel)) != 0) {
-                    /* The address has an internal or external label */
-                    break;
-                }
-            }
-
-            /* If the proposed label address doesn't have a label, define one */
-            if ((GetLabelAttr (LabelAddr) & (atIntLabel|atExtLabel)) == 0) {
-                AddIntLabel (LabelAddr);
-            }
-
-            /* Create the label */
-            Offs = Addr - LabelAddr;
-            if (Offs == 0) {
-                AddIntLabel (Addr);
-            } else {
-                AddDepLabel (Addr, atIntLabel, GetLabelName (LabelAddr), Offs);
-            }
-        }
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void OH_Illegal (const OpcDesc* D attribute ((unused)))
-{
-    DataByteLine (1);
-}
-
-
-
-void OH_Accumulator (const OpcDesc* D)
-{
-    OneLine (D, "a");
-}
-
-
-
-void OH_Implicit (const OpcDesc* D)
-{
-    Mnemonic (D->Mnemo);
-    LineComment (PC, D->Size);
-    LineFeed ();
-}
-
-
-
-void OH_Immediate (const OpcDesc* D)
-{
-    OneLine (D, "#$%02X", GetCodeByte (PC+1));
-}
-
-
-
-void OH_Direct (const OpcDesc* D)
-{
-    /* Get the operand */
-    unsigned Addr = GetCodeByte (PC+1);
-
-    /* Generate a label in pass 1 */
-    GenerateLabel (D->Flags, Addr);
-
-    /* Output the line */
-    OneLine (D, "%s", GetAddrArg (D->Flags, Addr));
-}
-
-
-
-void OH_DirectX (const OpcDesc* D)
-{
-    /* Get the operand */
-    unsigned Addr = GetCodeByte (PC+1);
-
-    /* Generate a label in pass 1 */
-    GenerateLabel (D->Flags, Addr);
-
-    /* Output the line */
-    OneLine (D, "%s,x", GetAddrArg (D->Flags, Addr));
-}
-
-
-
-void OH_DirectY (const OpcDesc* D)
-{
-    /* Get the operand */
-    unsigned Addr = GetCodeByte (PC+1);
-
-    /* Generate a label in pass 1 */
-    GenerateLabel (D->Flags, Addr);
-
-    /* Output the line */
-    OneLine (D, "%s,y", GetAddrArg (D->Flags, Addr));
-}
-
-
-
-void OH_Absolute (const OpcDesc* D)
-{
-    /* Get the operand */
-    unsigned Addr = GetCodeWord (PC+1);
-
-    /* Generate a label in pass 1 */
-    GenerateLabel (D->Flags, Addr);
-
-    /* Output the line */
-    OneLine (D, "%s%s", GetAbsOverride (D->Flags, Addr), GetAddrArg (D->Flags, Addr));
-}
-
-
-
-void OH_AbsoluteX (const OpcDesc* D)
-{
-    /* Get the operand */
-    unsigned Addr = GetCodeWord (PC+1);
-
-    /* Generate a label in pass 1 */
-    GenerateLabel (D->Flags, Addr);
-
-    /* Output the line */
-    OneLine (D, "%s%s,x", GetAbsOverride (D->Flags, Addr), GetAddrArg (D->Flags, Addr));
-}
-
-
-
-void OH_AbsoluteY (const OpcDesc* D)
-{
-    /* Get the operand */
-    unsigned Addr = GetCodeWord (PC+1);
-
-    /* Generate a label in pass 1 */
-    GenerateLabel (D->Flags, Addr);
-
-    /* Output the line */
-    OneLine (D, "%s%s,y", GetAbsOverride (D->Flags, Addr), GetAddrArg (D->Flags, Addr));
-}
-
-
-
-void OH_AbsoluteLong (const OpcDesc* D attribute ((unused)))
-{
-    Error ("Not implemented");
-}
-
-
-
-void OH_AbsoluteLongX (const OpcDesc* D attribute ((unused)))
-{
-    Error ("Not implemented");
-}
-
-
-
-void OH_Relative (const OpcDesc* D)
-{
-    /* Get the operand */
-    signed char Offs = GetCodeByte (PC+1);
-
-    /* Calculate the target address */
-    unsigned Addr = (((int) PC+2) + Offs) & 0xFFFF;
-
-    /* Generate a label in pass 1 */
-    GenerateLabel (D->Flags, Addr);
-
-    /* Output the line */
-    OneLine (D, "%s", GetAddrArg (D->Flags, Addr));
-}
-
-
-
-void OH_RelativeLong (const OpcDesc* D attribute ((unused)))
-{
-    Error ("Not implemented");
-}
-
-
-
-void OH_DirectIndirect (const OpcDesc* D)
-{
-    /* Get the operand */
-    unsigned Addr = GetCodeByte (PC+1);
-
-    /* Generate a label in pass 1 */
-    GenerateLabel (D->Flags, Addr);
-
-    /* Output the line */
-    OneLine (D, "(%s)", GetAddrArg (D->Flags, Addr));
-}
-
-
-
-void OH_DirectIndirectY (const OpcDesc* D)
-{
-    /* Get the operand */
-    unsigned Addr = GetCodeByte (PC+1);
-
-    /* Generate a label in pass 1 */
-    GenerateLabel (D->Flags, Addr);
-
-    /* Output the line */
-    OneLine (D, "(%s),y", GetAddrArg (D->Flags, Addr));
-}
-
-
-
-void OH_DirectXIndirect (const OpcDesc* D)
-{
-    /* Get the operand */
-    unsigned Addr = GetCodeByte (PC+1);
-
-    /* Generate a label in pass 1 */
-    GenerateLabel (D->Flags, Addr);
-
-    /* Output the line */
-    OneLine (D, "(%s,x)", GetAddrArg (D->Flags, Addr));
-}
-
-
-
-void OH_AbsoluteIndirect (const OpcDesc* D)
-{
-    /* Get the operand */
-    unsigned Addr = GetCodeWord (PC+1);
-
-    /* Generate a label in pass 1 */
-    GenerateLabel (D->Flags, Addr);
-
-    /* Output the line */
-    OneLine (D, "(%s)", GetAddrArg (D->Flags, Addr));
-}
-
-
-
-void OH_BitBranch (const OpcDesc* D)
-{
-    /* Get the operands */
-    unsigned char TestAddr   = GetCodeByte (PC+1);
-    signed char   BranchOffs = GetCodeByte (PC+2);
-
-    /* Calculate the target address for the branch */
-    unsigned BranchAddr = (((int) PC+3) + BranchOffs) & 0xFFFF;
-
-    /* Generate labels in pass 1. The bit branch codes are special in that
-    ** they don't really match the remainder of the 6502 instruction set (they
-    ** are a Rockwell addon), so we must pass additional flags as direct
-    ** value to the second GenerateLabel call.
-    */
-    GenerateLabel (D->Flags, TestAddr);
-    GenerateLabel (flLabel, BranchAddr);
-
-    /* Output the line */
-    OneLine (D, "%s,%s", GetAddrArg (D->Flags, TestAddr), GetAddrArg (flLabel, BranchAddr));
-}
-
-
-
-void OH_ImmediateDirect (const OpcDesc* D)
-{
-    /* Get the operand */
-    unsigned Addr = GetCodeByte (PC+2);
-
-    /* Generate a label in pass 1 */
-    GenerateLabel (D->Flags, Addr);
-
-    /* Output the line */
-    OneLine (D, "#$%02X,%s", GetCodeByte (PC+1), GetAddrArg (D->Flags, Addr));
-}
-
-
-
-void OH_ImmediateDirectX (const OpcDesc* D)
-{
-    /* Get the operand */
-    unsigned Addr = GetCodeByte (PC+2);
-
-    /* Generate a label in pass 1 */
-    GenerateLabel (D->Flags, Addr);
-
-    /* Output the line */
-    OneLine (D, "#$%02X,%s,x", GetCodeByte (PC+1), GetAddrArg (D->Flags, Addr));
-}
-
-
-
-void OH_ImmediateAbsolute (const OpcDesc* D)
-{
-    /* Get the operand */
-    unsigned Addr = GetCodeWord (PC+2);
-
-    /* Generate a label in pass 1 */
-    GenerateLabel (D->Flags, Addr);
-
-    /* Output the line */
-    OneLine (D, "#$%02X,%s%s", GetCodeByte (PC+1), GetAbsOverride (D->Flags, Addr), GetAddrArg (D->Flags, Addr));
-}
-
-
-
-void OH_ImmediateAbsoluteX (const OpcDesc* D)
-{
-    /* Get the operand */
-    unsigned Addr = GetCodeWord (PC+2);
-
-    /* Generate a label in pass 1 */
-    GenerateLabel (D->Flags, Addr);
-
-    /* Output the line */
-    OneLine (D, "#$%02X,%s%s,x", GetCodeByte (PC+1), GetAbsOverride (D->Flags, Addr), GetAddrArg (D->Flags, Addr));
-}
-
-
-
-void OH_StackRelative (const OpcDesc* D attribute ((unused)))
-{
-    Error ("Not implemented");
-}
-
-
-
-void OH_DirectIndirectLongX (const OpcDesc* D attribute ((unused)))
-{
-    Error ("Not implemented");
-}
-
-
-
-void OH_StackRelativeIndirectY (const OpcDesc* D attribute ((unused)))
-{
-    Error ("Not implemented");
-}
-
-
-
-void OH_DirectIndirectLong (const OpcDesc* D attribute ((unused)))
-{
-    Error ("Not implemented");
-}
-
-
-
-void OH_DirectIndirectLongY (const OpcDesc* D attribute ((unused)))
-{
-    Error ("Not implemented");
-}
-
-
-
-void OH_BlockMove (const OpcDesc* D attribute ((unused)))
-{
-    /* Get source operand */
-    unsigned Src = GetCodeWord (PC+1);
-    /* Get destination operand */
-    unsigned Dst = GetCodeWord (PC+3);
-
-    /* Generate a label in pass 1 */
-    GenerateLabel (D->Flags, Src);
-    GenerateLabel (D->Flags, Dst);
-
-    /* Output the line */
-    OneLine (D, "%s%s,%s%s,#$%02X",
-             GetAbsOverride (D->Flags, Src), GetAddrArg (D->Flags, Src),
-             GetAbsOverride (D->Flags, Dst), GetAddrArg (D->Flags, Dst),
-             GetCodeWord (PC+5));
-}
-
-
-
-void OH_AbsoluteXIndirect (const OpcDesc* D attribute ((unused)))
-{
-    /* Get the operand */
-    unsigned Addr = GetCodeWord (PC+1);
-
-    /* Generate a label in pass 1 */
-    GenerateLabel (D->Flags, Addr);
-
-    /* Output the line */
-    OneLine (D, "(%s,x)", GetAddrArg (D->Flags, Addr));
-}
-
-
-
-void OH_DirectImmediate (const OpcDesc* D)
-{
-    /* Get the operand */
-    unsigned Addr = GetCodeByte (PC+1);
-
-    /* Generate a label in pass 1 */
-    GenerateLabel (D->Flags, Addr);
-
-    /* Output the line */
-    OneLine (D, "%s, #$%02X", GetAddrArg (D->Flags, Addr), GetCodeByte (PC+2));
-}
-
-
-
-void OH_ZeroPageBit (const OpcDesc* D)
-{
-    unsigned Bit = GetCodeByte (PC) >> 5;
-    unsigned Addr = GetCodeByte (PC+1);
-
-    /* Generate a label in pass 1 */
-    GenerateLabel (D->Flags, Addr);
-
-    /* Output the line */
-    OneLine (D, "%01X,%s", Bit, GetAddrArg (D->Flags, Addr));
-}
-
-
-
-void OH_AccumulatorBit (const OpcDesc* D)
-{
-    unsigned Bit = GetCodeByte (PC) >> 5;
-
-    /* Output the line */
-    OneLine (D, "%01X,a", Bit);
-}
-
-
-
-void OH_AccumulatorBitBranch (const OpcDesc* D)
-{
-    unsigned Bit = GetCodeByte (PC) >> 5;
-    signed char BranchOffs = GetCodeByte (PC+1);
-
-    /* Calculate the target address for the branch */
-    unsigned BranchAddr = (((int) PC+3) + BranchOffs) & 0xFFFF;
-
-    /* Generate labels in pass 1 */
-    GenerateLabel (flLabel, BranchAddr);
-
-    /* Output the line */
-    OneLine (D, "%01X,a,%s", Bit, GetAddrArg (flLabel, BranchAddr));
-}
-
-
-
-void OH_JmpDirectIndirect (const OpcDesc* D)
-{
-    OH_DirectIndirect (D);
-    if (NewlineAfterJMP) {
-        LineFeed ();
-    }
-    SeparatorLine ();
-}
-
-
-
-void OH_SpecialPage (const OpcDesc* D)
-{
-  /* Get the operand */
-  unsigned Addr = 0xFF00 + GetCodeByte (PC+1);
-
-  /* Generate a label in pass 1 */
-  GenerateLabel (D->Flags, Addr);
-
-  /* OneLine (D, "$FF%02X", (CodeByte (PC+1)); */
-  OneLine (D, "%s", GetAddrArg (D->Flags, Addr));
-}
-
-
-
-void OH_Rts (const OpcDesc* D)
-{
-    OH_Implicit (D);
-    if (NewlineAfterRTS) {
-        LineFeed ();
-    }
-    SeparatorLine();
-}
-
-
-
-void OH_JmpAbsolute (const OpcDesc* D)
-{
-    OH_Absolute (D);
-    if (NewlineAfterJMP) {
-        LineFeed ();
-    }
-    SeparatorLine ();
-}
-
-
-
-void OH_JmpAbsoluteIndirect (const OpcDesc* D)
-{
-    OH_AbsoluteIndirect (D);
-    if (NewlineAfterJMP) {
-        LineFeed ();
-    }
-    SeparatorLine ();
-}
diff --git a/src/da65/handler.h b/src/da65/handler.h
deleted file mode 100644 (file)
index 77da618..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 handler.h                                 */
-/*                                                                           */
-/*               Opcode handler functions for the disassembler               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef HANDLER_H
-#define HANDLER_H
-
-
-
-/* common */
-#include "attrib.h"
-
-/* da65 */
-#include "opctable.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-/* Generic handlers */
-void OH_Illegal (const OpcDesc* D attribute ((unused)));
-void OH_Accumulator (const OpcDesc*);
-void OH_Implicit (const OpcDesc*);
-void OH_Immediate (const OpcDesc*);
-void OH_Direct (const OpcDesc*);
-void OH_DirectX (const OpcDesc*);
-void OH_DirectY (const OpcDesc*);
-void OH_Absolute (const OpcDesc*);
-void OH_AbsoluteX (const OpcDesc*);
-void OH_AbsoluteY (const OpcDesc*);
-void OH_AbsoluteLong (const OpcDesc*);
-void OH_AbsoluteLongX (const OpcDesc*);
-void OH_Relative (const OpcDesc*);
-void OH_RelativeLong (const OpcDesc*);
-void OH_DirectIndirect (const OpcDesc*);
-void OH_DirectIndirectY (const OpcDesc*);
-void OH_DirectXIndirect (const OpcDesc*);
-void OH_AbsoluteIndirect (const OpcDesc*);
-
-void OH_BitBranch (const OpcDesc*);
-
-void OH_ImmediateDirect (const OpcDesc*);
-void OH_ImmediateDirectX (const OpcDesc*);
-void OH_ImmediateAbsolute (const OpcDesc*);
-void OH_ImmediateAbsoluteX (const OpcDesc*);
-
-void OH_StackRelative (const OpcDesc*);
-void OH_DirectIndirectLongX (const OpcDesc*);
-void OH_StackRelativeIndirectY (const OpcDesc*);
-void OH_DirectIndirectLong (const OpcDesc*);
-void OH_DirectIndirectLongY (const OpcDesc*);
-void OH_BlockMove (const OpcDesc*);
-void OH_AbsoluteXIndirect (const OpcDesc*);
-
-/* Mitsubishi 740 */
-void OH_DirectImmediate (const OpcDesc*);
-void OH_ZeroPageBit (const OpcDesc*);
-void OH_AccumulatorBit (const OpcDesc*);
-void OH_AccumulatorBitBranch (const OpcDesc*);
-void OH_JmpDirectIndirect (const OpcDesc* D);
-void OH_SpecialPage (const OpcDesc*);
-                    
-/* Handlers for special instructions */
-void OH_Rts (const OpcDesc*);
-void OH_JmpAbsolute (const OpcDesc*);
-void OH_JmpAbsoluteIndirect (const OpcDesc* D);
-
-
-
-/* End of handler.h */
-
-#endif
diff --git a/src/da65/infofile.c b/src/da65/infofile.c
deleted file mode 100644 (file)
index e8ce66c..0000000
+++ /dev/null
@@ -1,836 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                infofile.h                                 */
-/*                                                                           */
-/*                      Disassembler info file handling                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2014, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <limits.h>
-#if defined(_MSC_VER)
-/* Microsoft compiler */
-#  include <io.h>
-#else
-/* Anyone else */
-#  include <unistd.h>
-#endif
-
-/* common */
-#include "cpu.h"
-#include "xmalloc.h"
-
-/* da65 */
-#include "asminc.h"
-#include "attrtab.h"
-#include "comments.h"
-#include "error.h"
-#include "global.h"
-#include "infofile.h"
-#include "labels.h"
-#include "opctable.h"
-#include "scanner.h"
-#include "segment.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void AddAttr (const char* Name, unsigned* Set, unsigned Attr)
-/* Add an attribute to the set and check that it is not given twice */
-{
-    if (*Set & Attr) {
-        /* Attribute is already in the set */
-        InfoError ("%s given twice", Name);
-    }
-    *Set |= Attr;
-}
-
-
-
-static void AsmIncSection (void)
-/* Parse a asminc section */
-{
-    static const IdentTok LabelDefs[] = {
-        {   "COMMENTSTART",     INFOTOK_COMMENTSTART    },
-        {   "FILE",             INFOTOK_FILE            },
-        {   "IGNOREUNKNOWN",    INFOTOK_IGNOREUNKNOWN   },
-    };
-
-    /* Locals - initialize to avoid gcc warnings */
-    char* Name = 0;
-    int CommentStart = EOF;
-    int IgnoreUnknown = -1;
-
-    /* Skip the token */
-    InfoNextTok ();
-
-    /* Expect the opening curly brace */
-    InfoConsumeLCurly ();
-
-    /* Look for section tokens */
-    while (InfoTok != INFOTOK_RCURLY) {
-
-        /* Convert to special token */
-        InfoSpecialToken (LabelDefs, ENTRY_COUNT (LabelDefs), "Asminc directive");
-
-        /* Look at the token */
-        switch (InfoTok) {
-
-            case INFOTOK_COMMENTSTART:
-                InfoNextTok ();
-                if (CommentStart != EOF) {
-                    InfoError ("Commentstart already given");
-                }
-                InfoAssureChar ();
-                CommentStart = (char) InfoIVal;
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_FILE:
-                InfoNextTok ();
-                if (Name) {
-                    InfoError ("File name already given");
-                }
-                InfoAssureStr ();
-                if (InfoSVal[0] == '\0') {
-                    InfoError ("File name may not be empty");
-                }
-                Name = xstrdup (InfoSVal);
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_IGNOREUNKNOWN:
-                InfoNextTok ();
-                if (IgnoreUnknown != -1) {
-                    InfoError ("Ignoreunknown already specified");
-                }
-                InfoBoolToken ();
-                IgnoreUnknown = (InfoTok != INFOTOK_FALSE);
-                InfoNextTok ();
-                break;
-
-            default:
-                Internal ("Unexpected token: %u", InfoTok);
-        }
-
-        /* Directive is followed by a semicolon */
-        InfoConsumeSemi ();
-    }
-
-    /* Check for the necessary data and assume defaults */
-    if (Name == 0) {
-        InfoError ("File name is missing");
-    }
-    if (CommentStart == EOF) {
-        CommentStart = ';';
-    }
-    if (IgnoreUnknown == -1) {
-        IgnoreUnknown = 0;
-    }
-
-    /* Open the file and read the symbol definitions */
-    AsmInc (Name, CommentStart, IgnoreUnknown);
-
-    /* Delete the dynamically allocated memory for Name */
-    xfree (Name);
-
-    /* Consume the closing brace */
-    InfoConsumeRCurly ();
-}
-
-
-
-static void GlobalSection (void)
-/* Parse a global section */
-{
-    static const IdentTok GlobalDefs[] = {
-        {   "ARGUMENTCOL",      INFOTOK_ARGUMENT_COLUMN },
-        {   "ARGUMENTCOLUMN",   INFOTOK_ARGUMENT_COLUMN },
-        {   "COMMENTCOL",       INFOTOK_COMMENT_COLUMN  },
-        {   "COMMENTCOLUMN",    INFOTOK_COMMENT_COLUMN  },
-        {   "COMMENTS",         INFOTOK_COMMENTS        },
-        {   "CPU",              INFOTOK_CPU             },
-        {   "HEXOFFS",          INFOTOK_HEXOFFS         },
-        {   "INPUTNAME",        INFOTOK_INPUTNAME       },
-        {   "INPUTOFFS",        INFOTOK_INPUTOFFS       },
-        {   "INPUTSIZE",        INFOTOK_INPUTSIZE       },
-        {   "LABELBREAK",       INFOTOK_LABELBREAK      },
-        {   "MNEMONICCOL",      INFOTOK_MNEMONIC_COLUMN },
-        {   "MNEMONICCOLUMN",   INFOTOK_MNEMONIC_COLUMN },
-        {   "NEWLINEAFTERJMP",  INFOTOK_NL_AFTER_JMP    },
-        {   "NEWLINEAFTERRTS",  INFOTOK_NL_AFTER_RTS    },
-        {   "OUTPUTNAME",       INFOTOK_OUTPUTNAME      },
-        {   "PAGELENGTH",       INFOTOK_PAGELENGTH      },
-        {   "STARTADDR",        INFOTOK_STARTADDR       },
-        {   "TEXTCOL",          INFOTOK_TEXT_COLUMN     },
-        {   "TEXTCOLUMN",       INFOTOK_TEXT_COLUMN     },
-    };
-
-    /* Skip the token */
-    InfoNextTok ();
-
-    /* Expect the opening curly brace */
-    InfoConsumeLCurly ();
-
-    /* Look for section tokens */
-    while (InfoTok != INFOTOK_RCURLY) {
-
-        /* Convert to special token */
-        InfoSpecialToken (GlobalDefs, ENTRY_COUNT (GlobalDefs), "Global directive");
-
-        /* Look at the token */
-        switch (InfoTok) {
-
-            case INFOTOK_ARGUMENT_COLUMN:
-                InfoNextTok ();
-                InfoAssureInt ();
-                InfoRangeCheck (MIN_ACOL, MAX_ACOL);
-                ACol = InfoIVal;
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_COMMENT_COLUMN:
-                InfoNextTok ();
-                InfoAssureInt ();
-                InfoRangeCheck (MIN_CCOL, MAX_CCOL);
-                CCol = InfoIVal;
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_COMMENTS:
-                InfoNextTok ();
-                InfoAssureInt ();
-                InfoRangeCheck (MIN_COMMENTS, MAX_COMMENTS);
-                Comments = InfoIVal;
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_CPU:
-                InfoNextTok ();
-                InfoAssureStr ();
-                if (CPU != CPU_UNKNOWN) {
-                    InfoError ("CPU already specified");
-                }
-                CPU = FindCPU (InfoSVal);
-                SetOpcTable (CPU);
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_HEXOFFS:
-                InfoNextTok ();
-                InfoBoolToken ();
-                switch (InfoTok) {
-                    case INFOTOK_FALSE: UseHexOffs = 0; break;
-                    case INFOTOK_TRUE:  UseHexOffs = 1; break;
-                }
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_INPUTNAME:
-                InfoNextTok ();
-                InfoAssureStr ();
-                if (InFile) {
-                    InfoError ("Input file name already given");
-                }
-                InFile = xstrdup (InfoSVal);
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_INPUTOFFS:
-                InfoNextTok ();
-                InfoAssureInt ();
-                InputOffs = InfoIVal;
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_INPUTSIZE:
-                InfoNextTok ();
-                InfoAssureInt ();
-                InfoRangeCheck (1, 0x10000);
-                InputSize = InfoIVal;
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_LABELBREAK:
-                InfoNextTok ();
-                InfoAssureInt ();
-                InfoRangeCheck (0, UCHAR_MAX);
-                LBreak = (unsigned char) InfoIVal;
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_MNEMONIC_COLUMN:
-                InfoNextTok ();
-                InfoAssureInt ();
-                InfoRangeCheck (MIN_MCOL, MAX_MCOL);
-                MCol = InfoIVal;
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_NL_AFTER_JMP:
-                InfoNextTok ();
-                if (NewlineAfterJMP != -1) {
-                    InfoError ("NLAfterJMP already specified");
-                }
-                InfoBoolToken ();
-                NewlineAfterJMP = (InfoTok != INFOTOK_FALSE);
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_NL_AFTER_RTS:
-                InfoNextTok ();
-                InfoBoolToken ();
-                if (NewlineAfterRTS != -1) {
-                    InfoError ("NLAfterRTS already specified");
-                }
-                NewlineAfterRTS = (InfoTok != INFOTOK_FALSE);
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_OUTPUTNAME:
-                InfoNextTok ();
-                InfoAssureStr ();
-                if (OutFile) {
-                    InfoError ("Output file name already given");
-                }
-                OutFile = xstrdup (InfoSVal);
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_PAGELENGTH:
-                InfoNextTok ();
-                InfoAssureInt ();
-                if (InfoIVal != 0) {
-                    InfoRangeCheck (MIN_PAGE_LEN, MAX_PAGE_LEN);
-                }
-                PageLength = InfoIVal;
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_STARTADDR:
-                InfoNextTok ();
-                InfoAssureInt ();
-                InfoRangeCheck (0x0000, 0xFFFF);
-                StartAddr = InfoIVal;
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_TEXT_COLUMN:
-                InfoNextTok ();
-                InfoAssureInt ();
-                InfoRangeCheck (MIN_TCOL, MAX_TCOL);
-                TCol = InfoIVal;
-                InfoNextTok ();
-                break;
-
-            default:
-                Internal ("Unexpected token: %u", InfoTok);
-
-        }
-
-        /* Directive is followed by a semicolon */
-        InfoConsumeSemi ();
-
-    }
-
-    /* Consume the closing brace */
-    InfoConsumeRCurly ();
-}
-
-
-
-static void LabelSection (void)
-/* Parse a label section */
-{
-    static const IdentTok LabelDefs[] = {
-        {   "COMMENT",  INFOTOK_COMMENT },
-        {   "ADDR",     INFOTOK_ADDR    },
-        {   "NAME",     INFOTOK_NAME    },
-        {   "SIZE",     INFOTOK_SIZE    },
-    };
-
-    /* Locals - initialize to avoid gcc warnings */
-    char* Name    = 0;
-    char* Comment = 0;
-    long Value    = -1;
-    long Size     = -1;
-
-    /* Skip the token */
-    InfoNextTok ();
-
-    /* Expect the opening curly brace */
-    InfoConsumeLCurly ();
-
-    /* Look for section tokens */
-    while (InfoTok != INFOTOK_RCURLY) {
-
-        /* Convert to special token */
-        InfoSpecialToken (LabelDefs, ENTRY_COUNT (LabelDefs), "Label attribute");
-
-        /* Look at the token */
-        switch (InfoTok) {
-
-            case INFOTOK_ADDR:
-                InfoNextTok ();
-                if (Value >= 0) {
-                    InfoError ("Value already given");
-                }
-                InfoAssureInt ();
-                InfoRangeCheck (0, 0xFFFF);
-                Value = InfoIVal;
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_COMMENT:
-                InfoNextTok ();
-                if (Comment) {
-                    InfoError ("Comment already given");
-                }
-                InfoAssureStr ();
-                if (InfoSVal[0] == '\0') {
-                    InfoError ("Comment may not be empty");
-                }
-                Comment = xstrdup (InfoSVal);
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_NAME:
-                InfoNextTok ();
-                if (Name) {
-                    InfoError ("Name already given");
-                }
-                InfoAssureStr ();
-                Name = xstrdup (InfoSVal);
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_SIZE:
-                InfoNextTok ();
-                if (Size >= 0) {
-                    InfoError ("Size already given");
-                }
-                InfoAssureInt ();
-                InfoRangeCheck (1, 0x10000);
-                Size = InfoIVal;
-                InfoNextTok ();
-                break;
-
-            default:
-                Internal ("Unexpected token: %u", InfoTok);
-        }
-
-        /* Directive is followed by a semicolon */
-        InfoConsumeSemi ();
-    }
-
-    /* Did we get the necessary data */
-    if (Name == 0) {
-        InfoError ("Label name is missing");
-    }
-    if (Name[0] == '\0' && Size > 1) {
-        InfoError ("Unnamed labels must not have a size > 1");
-    }
-    if (Value < 0) {
-        InfoError ("Label value is missing");
-    }
-    if (Size < 0) {
-        /* Use default */
-        Size = 1;
-    }
-    if (Value + Size > 0x10000) {
-        InfoError ("Invalid size (address out of range)");
-    }
-    if (HaveLabel ((unsigned) Value)) {
-        InfoError ("Label for address $%04lX already defined", Value);
-    }
-
-    /* Define the label(s) */
-    if (Name[0] == '\0') {
-        /* Size has already beed checked */
-        AddUnnamedLabel (Value);
-    } else {
-        AddExtLabelRange ((unsigned) Value, Name, Size);
-    }
-
-    /* Define the comment */
-    if (Comment) {
-        SetComment (Value, Comment);
-    }
-
-    /* Delete the dynamically allocated memory for Name and Comment */
-    xfree (Name);
-    xfree (Comment);
-
-    /* Consume the closing brace */
-    InfoConsumeRCurly ();
-}
-
-
-
-static void RangeSection (void)
-/* Parse a range section */
-{
-    static const IdentTok RangeDefs[] = {
-        {   "COMMENT",          INFOTOK_COMMENT },
-        {   "END",              INFOTOK_END     },
-        {   "NAME",             INFOTOK_NAME    },
-        {   "START",            INFOTOK_START   },
-        {   "TYPE",             INFOTOK_TYPE    },
-    };
-
-    static const IdentTok TypeDefs[] = {
-        {   "ADDRTABLE",        INFOTOK_ADDRTAB  },
-        {   "BYTETABLE",        INFOTOK_BYTETAB  },
-        {   "CODE",             INFOTOK_CODE     },
-        {   "DBYTETABLE",       INFOTOK_DBYTETAB },
-        {   "DWORDTABLE",       INFOTOK_DWORDTAB },
-        {   "RTSTABLE",         INFOTOK_RTSTAB   },
-        {   "SKIP",             INFOTOK_SKIP     },
-        {   "TEXTTABLE",        INFOTOK_TEXTTAB  },
-        {   "WORDTABLE",        INFOTOK_WORDTAB  },
-    };
-
-
-    /* Which values did we get? */
-    enum {
-        tNone   = 0x00,
-        tStart  = 0x01,
-        tEnd    = 0x02,
-        tType   = 0x04,
-        tName   = 0x08,
-        tComment= 0x10,
-        tNeeded = (tStart | tEnd | tType)
-    };
-    unsigned Attributes = tNone;
-
-    /* Locals - initialize to avoid gcc warnings */
-    unsigned Start      = 0;
-    unsigned End        = 0;
-    unsigned char Type  = 0;
-    char* Name          = 0;
-    char* Comment       = 0;
-    unsigned MemberSize = 0;
-
-
-    /* Skip the token */
-    InfoNextTok ();
-
-    /* Expect the opening curly brace */
-    InfoConsumeLCurly ();
-
-    /* Look for section tokens */
-    while (InfoTok != INFOTOK_RCURLY) {
-
-        /* Convert to special token */
-        InfoSpecialToken (RangeDefs, ENTRY_COUNT (RangeDefs), "Range attribute");
-
-        /* Look at the token */
-        switch (InfoTok) {
-
-            case INFOTOK_COMMENT:
-                AddAttr ("COMMENT", &Attributes, tComment);
-                InfoNextTok ();
-                InfoAssureStr ();
-                if (InfoSVal[0] == '\0') {
-                    InfoError ("Comment may not be empty");
-                }
-                Comment = xstrdup (InfoSVal);
-                Attributes |= tComment;
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_END:
-                AddAttr ("END", &Attributes, tEnd);
-                InfoNextTok ();
-                InfoAssureInt ();
-                InfoRangeCheck (0x0000, 0xFFFF);
-                End = InfoIVal;
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_NAME:
-                AddAttr ("NAME", &Attributes, tName);
-                InfoNextTok ();
-                InfoAssureStr ();
-                if (InfoSVal[0] == '\0') {
-                    InfoError ("Name may not be empty");
-                }
-                Name = xstrdup (InfoSVal);
-                Attributes |= tName;
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_START:
-                AddAttr ("START", &Attributes, tStart);
-                InfoNextTok ();
-                InfoAssureInt ();
-                InfoRangeCheck (0x0000, 0xFFFF);
-                Start = InfoIVal;
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_TYPE:
-                AddAttr ("TYPE", &Attributes, tType);
-                InfoNextTok ();
-                InfoSpecialToken (TypeDefs, ENTRY_COUNT (TypeDefs), "TYPE");
-                switch (InfoTok) {
-                    case INFOTOK_ADDRTAB:  Type = atAddrTab;  MemberSize = 2; break;
-                    case INFOTOK_BYTETAB:  Type = atByteTab;  MemberSize = 1; break;
-                    case INFOTOK_CODE:     Type = atCode;     MemberSize = 1; break;
-                    case INFOTOK_DBYTETAB: Type = atDByteTab; MemberSize = 2; break;
-                    case INFOTOK_DWORDTAB: Type = atDWordTab; MemberSize = 4; break;
-                    case INFOTOK_RTSTAB:   Type = atRtsTab;   MemberSize = 2; break;
-                    case INFOTOK_SKIP:     Type = atSkip;     MemberSize = 1; break;
-                    case INFOTOK_TEXTTAB:  Type = atTextTab;  MemberSize = 1; break;
-                    case INFOTOK_WORDTAB:  Type = atWordTab;  MemberSize = 2; break;
-                }
-                InfoNextTok ();
-                break;
-
-            default:
-                Internal ("Unexpected token: %u", InfoTok);
-        }
-
-        /* Directive is followed by a semicolon */
-        InfoConsumeSemi ();
-
-    }
-
-    /* Did we get all required values? */
-    if ((Attributes & tNeeded) != tNeeded) {
-        InfoError ("Required values missing from this section");
-    }
-
-    /* Start must be less than end */
-    if (Start > End) {
-        InfoError ("Start value must not be greater than end value");
-    }
-
-    /* Check the granularity */
-    if (((End - Start + 1) % MemberSize) != 0) {
-        InfoError ("Type of range needs a granularity of %u", MemberSize);
-    }
-
-    /* Set the range */
-    MarkRange (Start, End, Type);
-
-    /* Do we have a label? */
-    if (Attributes & tName) {
-
-        /* Define a label for the table */
-        AddExtLabel (Start, Name);
-
-        /* Set the comment if we have one */
-        if (Comment) {
-            SetComment (Start, Comment);
-        }
-
-        /* Delete name and comment */
-        xfree (Name);
-        xfree (Comment);
-    }
-
-    /* Consume the closing brace */
-    InfoConsumeRCurly ();
-}
-
-
-
-static void SegmentSection (void)
-/* Parse a segment section */
-{
-    static const IdentTok LabelDefs[] = {
-        {   "END",      INFOTOK_END     },
-        {   "NAME",     INFOTOK_NAME    },
-        {   "START",    INFOTOK_START   },
-    };
-
-    /* Locals - initialize to avoid gcc warnings */
-    long End    = -1;
-    long Start  = -1;
-    char* Name  = 0;
-
-    /* Skip the token */
-    InfoNextTok ();
-
-    /* Expect the opening curly brace */
-    InfoConsumeLCurly ();
-
-    /* Look for section tokens */
-    while (InfoTok != INFOTOK_RCURLY) {
-
-        /* Convert to special token */
-        InfoSpecialToken (LabelDefs, ENTRY_COUNT (LabelDefs), "Segment attribute");
-
-        /* Look at the token */
-        switch (InfoTok) {
-
-            case INFOTOK_END:
-                InfoNextTok ();
-                if (End >= 0) {
-                    InfoError ("Value already given");
-                }
-                InfoAssureInt ();
-                InfoRangeCheck (0, 0xFFFF);
-                End = InfoIVal;
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_NAME:
-                InfoNextTok ();
-                if (Name) {
-                    InfoError ("Name already given");
-                }
-                InfoAssureStr ();
-                Name = xstrdup (InfoSVal);
-                InfoNextTok ();
-                break;
-
-            case INFOTOK_START:
-                InfoNextTok ();
-                if (Start >= 0) {
-                    InfoError ("Value already given");
-                }
-                InfoAssureInt ();
-                InfoRangeCheck (0, 0xFFFF);
-                Start = InfoIVal;
-                InfoNextTok ();
-                break;
-
-            default:
-                Internal ("Unexpected token: %u", InfoTok);
-        }
-
-        /* Directive is followed by a semicolon */
-        InfoConsumeSemi ();
-    }
-
-    /* Did we get the necessary data, and is it correct? */
-    if (Name == 0 || Name[0] == '\0') {
-        InfoError ("Segment name is missing");
-    }
-    if (End < 0) {
-        InfoError ("End address is missing");
-    }
-    if (Start < 0) {
-        InfoError ("Start address is missing");
-    }
-    if (Start > End) {
-        InfoError ("Start address of segment is greater than end address");
-    }
-
-    /* Check that segments do not overlap */
-    if (SegmentDefined ((unsigned) Start, (unsigned) End)) {
-        InfoError ("Segments must not overlap");
-    }
-
-    /* Remember the segment data */
-    AddAbsSegment ((unsigned) Start, (unsigned) End, Name);
-
-    /* Delete the dynamically allocated memory for Name */
-    xfree (Name);
-
-    /* Consume the closing brace */
-    InfoConsumeRCurly ();
-}
-
-
-
-static void InfoParse (void)
-/* Parse the config file */
-{
-    static const IdentTok Globals[] = {
-        {   "ASMINC",   INFOTOK_ASMINC  },
-        {   "GLOBAL",   INFOTOK_GLOBAL  },
-        {   "LABEL",    INFOTOK_LABEL   },
-        {   "RANGE",    INFOTOK_RANGE   },
-        {   "SEGMENT",  INFOTOK_SEGMENT },
-    };
-
-    while (InfoTok != INFOTOK_EOF) {
-
-        /* Convert an identifier into a token */
-        InfoSpecialToken (Globals, ENTRY_COUNT (Globals), "Config directive");
-
-        /* Check the token */
-        switch (InfoTok) {
-
-            case INFOTOK_ASMINC:
-                AsmIncSection ();
-                break;
-
-            case INFOTOK_GLOBAL:
-                GlobalSection ();
-                break;
-
-            case INFOTOK_LABEL:
-                LabelSection ();
-                break;
-
-            case INFOTOK_RANGE:
-                RangeSection ();
-                break;
-
-            case INFOTOK_SEGMENT:
-                SegmentSection ();
-                break;
-
-            default:
-                Internal ("Unexpected token: %u", InfoTok);
-        }
-
-        /* Semicolon expected */
-        InfoConsumeSemi ();
-    }
-}
-
-
-
-void ReadInfoFile (void)
-/* Read the info file */
-{
-    /* Check if we have a info file given */
-    if (InfoAvail()) {
-        /* Open the config file */
-        InfoOpenInput ();
-
-        /* Parse the config file */
-        InfoParse ();
-
-        /* Close the file */
-        InfoCloseInput ();
-    }
-}
diff --git a/src/da65/infofile.h b/src/da65/infofile.h
deleted file mode 100644 (file)
index b8b3f53..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                infofile.h                                 */
-/*                                                                           */
-/*                      Disassembler info file handling                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef INFOFILE_H
-#define INFOFILE_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void ReadInfoFile (void);
-/* Read the info file */
-
-
-
-/* End of infofile.h */
-
-#endif
diff --git a/src/da65/labels.c b/src/da65/labels.c
deleted file mode 100644 (file)
index 547a798..0000000
+++ /dev/null
@@ -1,412 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 labels.c                                  */
-/*                                                                           */
-/*                         Label management for da65                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2006-2007 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-
-/* common */
-#include "xmalloc.h"
-#include "xsprintf.h"
-
-/* da65 */
-#include "attrtab.h"
-#include "code.h"
-#include "comments.h"
-#include "error.h"
-#include "global.h"
-#include "labels.h"
-#include "output.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Symbol table */
-static const char* SymTab[0x10000];
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static const char* MakeLabelName (unsigned Addr)
-/* Make the default label name from the given address and return it in a
-** static buffer.
-*/
-{
-    static char LabelBuf [32];
-    xsprintf (LabelBuf, sizeof (LabelBuf), "L%04X", Addr);
-    return LabelBuf;
-}
-
-
-
-static void AddLabel (unsigned Addr, attr_t Attr, const char* Name)
-/* Add a label */
-{
-    /* Get an existing label attribute */
-    attr_t ExistingAttr = GetLabelAttr (Addr);
-
-    /* Must not have two symbols for one address */
-    if (ExistingAttr != atNoLabel) {
-        /* Allow redefinition if identical. Beware: Unnamed labels don't
-        ** have a name (you guessed that, didn't you?).
-        */
-        if (ExistingAttr == Attr &&
-            ((Name == 0 && SymTab[Addr] == 0) || strcmp (SymTab[Addr], Name) == 0)) {
-            return;
-        }
-        Error ("Duplicate label for address $%04X: %s/%s", Addr, SymTab[Addr], Name);
-    }
-
-    /* Create a new label (xstrdup will return NULL if input NULL) */
-    SymTab[Addr] = xstrdup (Name);
-
-    /* Remember the attribute */
-    MarkAddr (Addr, Attr);
-}
-
-
-
-void AddIntLabel (unsigned Addr)
-/* Add an internal label using the address to generate the name. */
-{
-    AddLabel (Addr, atIntLabel, MakeLabelName (Addr));
-}
-
-
-
-void AddExtLabel (unsigned Addr, const char* Name)
-/* Add an external label */
-{
-    AddLabel (Addr, atExtLabel, Name);
-}
-
-
-
-void AddUnnamedLabel (unsigned Addr)
-/* Add an unnamed label */
-{
-    AddLabel (Addr, atUnnamedLabel, 0);
-}
-
-
-
-void AddDepLabel (unsigned Addr, attr_t Attr, const char* BaseName, unsigned Offs)
-/* Add a dependent label at the given address using "basename+Offs" as the new
-** name.
-*/
-{
-    /* Allocate memory for the dependent label name */
-    unsigned NameLen = strlen (BaseName);
-    char*    DepName = xmalloc (NameLen + 7);   /* "+$ABCD\0" */
-
-    /* Create the new name in the buffer */
-    if (UseHexOffs) {
-        sprintf (DepName, "%s+$%02X", BaseName, Offs);
-    } else {
-        sprintf (DepName, "%s+%u", BaseName, Offs);
-    }
-
-    /* Define the labels */
-    AddLabel (Addr, Attr | atDepLabel, DepName);
-
-    /* Free the name buffer */
-    xfree (DepName);
-}
-
-
-
-static void AddLabelRange (unsigned Addr, attr_t Attr,
-                           const char* Name, unsigned Count)
-/* Add a label for a range. The first entry gets the label "Name" while the
-** others get "Name+offs".
-*/
-{
-    /* Define the label */
-    AddLabel (Addr, Attr, Name);
-
-    /* Define dependent labels if necessary */
-    if (Count > 1) {
-        unsigned Offs;
-
-        /* Setup the format string */
-        const char* Format = UseHexOffs? "$%02X" : "%u";
-
-        /* Allocate memory for the dependent label names */
-        unsigned NameLen = strlen (Name);
-        char*    DepName = xmalloc (NameLen + 7);       /* "+$ABCD" */
-        char*    DepOffs = DepName + NameLen + 1;
-
-        /* Copy the original name into the buffer */
-        memcpy (DepName, Name, NameLen);
-        DepName[NameLen] = '+';
-
-        /* Define the labels */
-        for (Offs = 1; Offs < Count; ++Offs) {
-            sprintf (DepOffs, Format, Offs);
-            AddLabel (Addr + Offs, Attr | atDepLabel, DepName);
-        }
-
-        /* Free the name buffer */
-        xfree (DepName);
-    }
-}
-
-
-
-void AddIntLabelRange (unsigned Addr, const char* Name, unsigned Count)
-/* Add an internal label for a range. The first entry gets the label "Name"
-** while the others get "Name+offs".
-*/
-{
-    /* Define the label range */
-    AddLabelRange (Addr, atIntLabel, Name, Count);
-}
-
-
-
-void AddExtLabelRange (unsigned Addr, const char* Name, unsigned Count)
-/* Add an external label for a range. The first entry gets the label "Name"
-** while the others get "Name+offs".
-*/
-{
-    /* Define the label range */
-    AddLabelRange (Addr, atExtLabel, Name, Count);
-}
-
-
-
-int HaveLabel (unsigned Addr)
-/* Check if there is a label for the given address */
-{
-    /* Check for a label */
-    return (GetLabelAttr (Addr) != atNoLabel);
-}
-
-
-
-int MustDefLabel (unsigned Addr)
-/* Return true if we must define a label for this address, that is, if there
-** is a label at this address, and it is an external or internal label.
-*/
-{
-    /* Get the label attribute */
-    attr_t A = GetLabelAttr (Addr);
-
-    /* Check for an internal, external, or unnamed label */
-    return (A == atExtLabel || A == atIntLabel || A == atUnnamedLabel);
-}
-
-
-
-const char* GetLabelName (unsigned Addr)
-/* Return the label name for an address */
-{
-    /* Get the label attribute */
-    attr_t A = GetLabelAttr (Addr);
-
-    /* Special case unnamed labels, because these don't have a named stored in
-    ** the symbol table to save space.
-    */
-    if (A == atUnnamedLabel) {
-        return "";
-    } else {
-        /* Return the label if any */
-        return SymTab[Addr];
-    }
-}
-
-
-
-const char* GetLabel (unsigned Addr, unsigned RefFrom)
-/* Return the label name for an address, as it is used in a label reference.
-** RefFrom is the address the label is referenced from. This is needed in case
-** of unnamed labels, to determine the name.
-*/
-{
-    static const char* FwdLabels[] = {
-        ":+", ":++", ":+++", ":++++", ":+++++", ":++++++", ":+++++++",
-        ":++++++++", ":+++++++++", ":++++++++++"
-    };
-    static const char* BackLabels[] = {
-        ":-", ":--", ":---", ":----", ":-----", ":------", ":-------",
-        ":--------", ":---------", ":----------"
-    };
-
-    /* Get the label attribute */
-    attr_t A = GetLabelAttr (Addr);
-
-    /* Special case unnamed labels, because these don't have a named stored in
-    ** the symbol table to save space.
-    */
-    if (A == atUnnamedLabel) {
-
-        unsigned Count = 0;
-
-        /* Search forward or backward depending in which direction the label
-        ** is.
-        */
-        if (Addr <= RefFrom) {
-            /* Search backwards */
-            unsigned I = RefFrom;
-            while (Addr < I) {
-                --I;
-                A = GetLabelAttr (I);
-                if (A == atUnnamedLabel) {
-                    ++Count;
-                    if (Count >= sizeof (BackLabels) / sizeof (BackLabels[0])) {
-                        Error ("Too many unnamed labels between label at "
-                               "$%04X and reference at $%04X", Addr, RefFrom);
-                    }
-                }
-            }
-
-            /* Return the label name */
-            return BackLabels[Count-1];
-
-        } else {
-            /* Search forwards */
-            unsigned I = RefFrom;
-            while (Addr > I) {
-                ++I;
-                A = GetLabelAttr (I);
-                if (A == atUnnamedLabel) {
-                    ++Count;
-                    if (Count >= sizeof (FwdLabels) / sizeof (FwdLabels[0])) {
-                        Error ("Too many unnamed labels between label at "
-                               "$%04X and reference at $%04X", Addr, RefFrom);
-                    }
-                }
-            }
-
-            /* Return the label name */
-            return FwdLabels[Count-1];
-        }
-
-    } else {
-        /* Return the label if any */
-        return SymTab[Addr];
-    }
-}
-
-
-
-void ForwardLabel (unsigned Offs)
-/* If necessary, output a forward label, one that is within the next few
-** bytes and is therefore output as "label = * + x".
-*/
-{
-    /* Calculate the actual address */
-    unsigned long Addr = PC + Offs;
-
-    /* Get the type of the label */
-    attr_t A = GetLabelAttr (Addr);
-
-    /* If there is no label, or just a dependent one, bail out */
-    if (A == atNoLabel || (A & atDepLabel) != 0) {
-        return;
-    }
-
-    /* An unnamed label cannot be output as a forward declaration, so this is
-    ** an error.
-    */
-    if (A == atUnnamedLabel) {
-        Error ("Cannot define unnamed label at address $%04lX", Addr);
-    }
-
-    /* Output the label */
-    DefForward (GetLabelName (Addr), GetComment (Addr), Offs);
-}
-
-
-
-static void DefOutOfRangeLabel (unsigned long Addr)
-/* Define one label that is outside code range. */
-{
-    switch (GetLabelAttr (Addr)) {
-
-        case atIntLabel:
-        case atExtLabel:
-            DefConst (SymTab[Addr], GetComment (Addr), Addr);
-            break;
-
-        case atUnnamedLabel:
-            Error ("Cannot define unnamed label at address $%04lX", Addr);
-            break;
-
-        default:
-            break;
-
-    }
-}
-
-
-
-void DefOutOfRangeLabels (void)
-/* Output any labels that are out of the loaded code range */
-{
-    unsigned long Addr;
-
-    SeparatorLine ();
-
-    /* Low range */
-    Addr = 0;
-    while (Addr < CodeStart) {
-        DefOutOfRangeLabel (Addr++);
-    }
-
-    /* Skip areas in code range */
-    while (Addr <= CodeEnd) {
-        if (GetStyleAttr (Addr) == atSkip) {
-            DefOutOfRangeLabel (Addr);
-        }
-        ++Addr;
-    }
-
-    /* High range */
-    while (Addr < 0x10000) {
-        DefOutOfRangeLabel (Addr++);
-    }
-
-    SeparatorLine ();
-}
diff --git a/src/da65/labels.h b/src/da65/labels.h
deleted file mode 100644 (file)
index c4b5277..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 labels.h                                  */
-/*                                                                           */
-/*                         Label management for da65                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2006      Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef LABELS_H
-#define LABELS_H
-
-
-
-#include "attrtab.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void AddIntLabel (unsigned Addr);
-/* Add an internal label using the address to generate the name. */
-
-void AddExtLabel (unsigned Addr, const char* Name);
-/* Add an external label */
-
-void AddUnnamedLabel (unsigned Addr);
-/* Add an unnamed label */
-
-void AddDepLabel (unsigned Addr, attr_t Attr, const char* BaseName, unsigned Offs);
-/* Add a dependent label at the given address using "base name+Offs" as the new
-** name.
-*/
-
-void AddIntLabelRange (unsigned Addr, const char* Name, unsigned Count);
-/* Add an internal label for a range. The first entry gets the label "Name"
-** while the others get "Name+offs".
-*/
-
-void AddExtLabelRange (unsigned Addr, const char* Name, unsigned Count);
-/* Add an external label for a range. The first entry gets the label "Name"
-** while the others get "Name+offs".
-*/
-
-int HaveLabel (unsigned Addr);
-/* Check if there is a label for the given address */
-
-int MustDefLabel (unsigned Addr);
-/* Return true if we must define a label for this address, that is, if there
-** is a label at this address, and it is an external or internal label.
-*/
-
-const char* GetLabelName (unsigned Addr);
-/* Return the label name for an address */
-
-const char* GetLabel (unsigned Addr, unsigned RefFrom);
-/* Return the label name for an address, as it is used in a label reference.
-** RefFrom is the address the label is referenced from. This is needed in case
-** of unnamed labels, to determine the name.
-*/
-
-void ForwardLabel (unsigned Offs);
-/* If necessary, output a forward label, one that is within the next few
-** bytes and is therefore output as "label = * + x".
-*/
-
-void DefOutOfRangeLabels (void);
-/* Output any labels that are out of the loaded code range */
-
-
-
-/* End of labels.h */
-
-#endif
diff --git a/src/da65/main.c b/src/da65/main.c
deleted file mode 100644 (file)
index 8c37e1a..0000000
+++ /dev/null
@@ -1,661 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  main.c                                   */
-/*                                                                           */
-/*                  Main program for the da65 disassembler                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2014, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <limits.h>
-#include <time.h>
-
-/* common */
-#include "abend.h"
-#include "cmdline.h"
-#include "cpu.h"
-#include "fname.h"
-#include "print.h"
-#include "version.h"
-
-/* da65 */
-#include "attrtab.h"
-#include "code.h"
-#include "comments.h"
-#include "data.h"
-#include "error.h"
-#include "global.h"
-#include "infofile.h"
-#include "labels.h"
-#include "opctable.h"
-#include "output.h"
-#include "scanner.h"
-#include "segment.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void Usage (void)
-/* Print usage information and exit */
-{
-    printf ("Usage: %s [options] [inputfile]\n"
-            "Short options:\n"
-            "  -g\t\t\tAdd debug info to object file\n"
-            "  -h\t\t\tHelp (this text)\n"
-            "  -i name\t\tSpecify an info file\n"
-            "  -o name\t\tName the output file\n"
-            "  -v\t\t\tIncrease verbosity\n"
-            "  -F\t\t\tAdd formfeeds to the output\n"
-            "  -S addr\t\tSet the start/load address\n"
-            "  -V\t\t\tPrint the disassembler version\n"
-            "\n"
-            "Long options:\n"
-            "  --argument-column n\tSpecify argument start column\n"
-            "  --comment-column n\tSpecify comment start column\n"
-            "  --comments n\t\tSet the comment level for the output\n"
-            "  --cpu type\t\tSet cpu type\n"
-            "  --debug-info\t\tAdd debug info to object file\n"
-            "  --formfeeds\t\tAdd formfeeds to the output\n"
-            "  --help\t\tHelp (this text)\n"
-            "  --hexoffs\t\tUse hexadecimal label offsets\n"
-            "  --info name\t\tSpecify an info file\n"
-            "  --label-break n\tAdd newline if label exceeds length n\n"
-            "  --mnemonic-column n\tSpecify mnemonic start column\n"
-            "  --pagelength n\tSet the page length for the listing\n"
-            "  --start-addr addr\tSet the start/load address\n"
-            "  --text-column n\tSpecify text start column\n"
-            "  --verbose\t\tIncrease verbosity\n"
-            "  --version\t\tPrint the disassembler version\n",
-            ProgName);
-}
-
-
-
-static void RangeCheck (const char* Opt, unsigned long Val,
-                        unsigned long Min, unsigned long Max)
-/* Do a range check for the given option and abort if there's a range
-** error.
-*/
-{
-    if (Val < Min || Val > Max) {
-        Error ("Argument for %s outside valid range (%ld-%ld)", Opt, Min, Max);
-    }
-}
-
-
-
-static unsigned long CvtNumber (const char* Arg, const char* Number)
-/* Convert a number from a string. Allow '$' and '0x' prefixes for hex
-** numbers.
-*/
-{
-    unsigned long Val;
-    int           Converted;
-    char          BoundsCheck;
-
-    /* Convert */
-    if (*Number == '$') {
-        ++Number;
-        Converted = sscanf (Number, "%lx%c", &Val, &BoundsCheck);
-    } else {
-        Converted = sscanf (Number, "%li%c", (long*)&Val, &BoundsCheck);
-    }
-
-    /* Check if we do really have a number */
-    if (Converted != 1) {
-        Error ("Invalid number given in argument: %s\n", Arg);
-    }
-
-    /* Return the result */
-    return Val;
-}
-
-
-
-static void OptArgumentColumn (const char* Opt, const char* Arg)
-/* Handle the --argument-column option */
-{
-    /* Convert the argument to a number */
-    unsigned long Val = CvtNumber (Opt, Arg);
-
-    /* Check for a valid range */
-    RangeCheck (Opt, Val, MIN_ACOL, MAX_ACOL);
-
-    /* Use the value */
-    ACol = (unsigned char) Val;
-}
-
-
-
-static void OptBytesPerLine (const char* Opt, const char* Arg)
-/* Handle the --bytes-per-line option */
-{
-    /* Convert the argument to a number */
-    unsigned long Val = CvtNumber (Opt, Arg);
-
-    /* Check for a valid range */
-    RangeCheck (Opt, Val, MIN_BYTESPERLINE, MAX_BYTESPERLINE);
-
-    /* Use the value */
-    BytesPerLine = (unsigned char) Val;
-}
-
-
-
-static void OptCommentColumn (const char* Opt, const char* Arg)
-/* Handle the --comment-column option */
-{
-    /* Convert the argument to a number */
-    unsigned long Val = CvtNumber (Opt, Arg);
-
-    /* Check for a valid range */
-    RangeCheck (Opt, Val, MIN_CCOL, MAX_CCOL);
-
-    /* Use the value */
-    CCol = (unsigned char) Val;
-}
-
-
-
-static void OptComments (const char* Opt, const char* Arg)
-/* Handle the --comments option */
-{
-    /* Convert the argument to a number */
-    unsigned long Val = CvtNumber (Opt, Arg);
-
-    /* Check for a valid range */
-    RangeCheck (Opt, Val, MIN_COMMENTS, MAX_COMMENTS);
-
-    /* Use the value */
-    Comments = (unsigned char) Val;
-}
-
-
-
-static void OptCPU (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --cpu option */
-{
-    /* Find the CPU from the given name */
-    CPU = FindCPU (Arg);
-    SetOpcTable (CPU);
-}
-
-
-
-static void OptDebugInfo (const char* Opt attribute ((unused)),
-                          const char* Arg attribute ((unused)))
-/* Add debug info to the object file */
-{
-    DebugInfo = 1;
-}
-
-
-
-static void OptFormFeeds (const char* Opt attribute ((unused)),
-                          const char* Arg attribute ((unused)))
-/* Add form feeds to the output */
-{
-    FormFeeds = 1;
-}
-
-
-
-static void OptHelp (const char* Opt attribute ((unused)),
-                     const char* Arg attribute ((unused)))
-/* Print usage information and exit */
-{
-    Usage ();
-    exit (EXIT_SUCCESS);
-}
-
-
-
-static void OptHexOffs (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Handle the --hexoffs option */
-{
-    UseHexOffs = 1;
-}
-
-
-
-static void OptInfo (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --info option */
-{
-    InfoSetName (Arg);
-}
-
-
-
-static void OptLabelBreak (const char* Opt, const char* Arg)
-/* Handle the --label-break option */
-{
-    /* Convert the argument to a number */
-    unsigned long Val = CvtNumber (Opt, Arg);
-
-    /* Check for a valid range */
-    RangeCheck (Opt, Val, MIN_LABELBREAK, MAX_LABELBREAK);
-
-    /* Use the value */
-    LBreak = (unsigned char) Val;
-}
-
-
-
-static void OptMnemonicColumn (const char* Opt, const char* Arg)
-/* Handle the --mnemonic-column option */
-{
-    /* Convert the argument to a number */
-    unsigned long Val = CvtNumber (Opt, Arg);
-
-    /* Check for a valid range */
-    RangeCheck (Opt, Val, MIN_MCOL, MAX_MCOL);
-
-    /* Use the value */
-    MCol = (unsigned char) Val;
-}
-
-
-
-static void OptPageLength (const char* Opt attribute ((unused)), const char* Arg)
-/* Handle the --pagelength option */
-{
-    int Len = atoi (Arg);
-    if (Len != 0) {
-        RangeCheck (Opt, Len, MIN_PAGE_LEN, MAX_PAGE_LEN);
-    }
-    PageLength = Len;
-}
-
-
-
-static void OptStartAddr (const char* Opt, const char* Arg)
-/* Set the default start address */
-{
-    StartAddr = CvtNumber (Opt, Arg);
-}
-
-
-
-static void OptTextColumn (const char* Opt, const char* Arg)
-/* Handle the --text-column option */
-{
-    /* Convert the argument to a number */
-    unsigned long Val = CvtNumber (Opt, Arg);
-
-    /* Check for a valid range */
-    RangeCheck (Opt, Val, MIN_TCOL, MAX_TCOL);
-
-    /* Use the value */
-    TCol = (unsigned char) Val;
-}
-
-
-
-static void OptVerbose (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Increase verbosity */
-{
-    ++Verbosity;
-}
-
-
-
-static void OptVersion (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Print the disassembler version */
-{
-    fprintf (stderr, "da65 V%s\n", GetVersionAsString ());
-}
-
-
-
-static void OneOpcode (unsigned RemainingBytes)
-/* Disassemble one opcode */
-{
-    unsigned I;
-
-    /* Get the opcode from the current address */
-    unsigned char OPC = GetCodeByte (PC);
-
-    /* Get the opcode description for the opcode byte */
-    const OpcDesc* D = &OpcTable[OPC];
-
-    /* Get the output style for the current PC */
-    attr_t Style = GetStyleAttr (PC);
-
-    /* If a segment begins here, then name that segment.
-    ** Note that the segment is named even if its code is being skipped,
-    ** because some of its later code might not be skipped.
-    */
-    if (IsSegmentStart (PC)) {
-        StartSegment (GetSegmentStartName (PC), GetSegmentAddrSize (PC));
-    }
-
-    /* If we have a label at this address, output the label and an attached
-    ** comment, provided that we aren't in a skip area.
-    */
-    if (Style != atSkip && MustDefLabel (PC)) {
-        const char* Comment = GetComment (PC);
-        if (Comment) {
-            UserComment (Comment);
-        }
-        DefLabel (GetLabelName (PC));
-    }
-
-    /* Check...
-    **   - ...if we have enough bytes remaining for the code at this address.
-    **   - ...if the current instruction is valid for the given CPU.
-    **   - ...if there is no label somewhere between the instruction bytes.
-    **   - ...if there is no segment change between the instruction bytes.
-    ** If any one of those conditions is false, switch to data mode.
-    */
-    if (Style == atDefault) {
-        if (D->Size > RemainingBytes) {
-            Style = atIllegal;
-            MarkAddr (PC, Style);
-        } else if (D->Flags & flIllegal) {
-            Style = atIllegal;
-            MarkAddr (PC, Style);
-        } else {
-            for (I = PC + D->Size; --I > PC; ) {
-                if (HaveLabel (I) || IsSegmentStart (I)) {
-                    Style = atIllegal;
-                    MarkAddr (PC, Style);
-                    break;
-                }
-            }
-            for (I = 0; I < D->Size - 1u; ++I) {
-                if (IsSegmentEnd (PC + I)) {
-                    Style = atIllegal;
-                    MarkAddr (PC, Style);
-                    break;
-                }
-            }
-        }
-    }
-
-    /* Disassemble the line */
-    switch (Style) {
-
-        case atDefault:
-            D->Handler (D);
-            PC += D->Size;
-            break;
-
-        case atCode:
-            /* Beware: If we don't have enough bytes left to disassemble the
-            ** following insn, fall through to byte mode.
-            */
-            if (D->Size <= RemainingBytes) {
-                /* Output labels within the next insn */
-                for (I = 1; I < D->Size; ++I) {
-                    ForwardLabel (I);
-                }
-                /* Output the insn */
-                D->Handler (D);
-                PC += D->Size;
-                break;
-            }
-            /* FALLTHROUGH */
-
-        case atByteTab:
-            ByteTable ();
-            break;
-
-        case atDByteTab:
-            DByteTable ();
-            break;
-
-        case atWordTab:
-            WordTable ();
-            break;
-
-        case atDWordTab:
-            DWordTable ();
-            break;
-
-        case atAddrTab:
-            AddrTable ();
-            break;
-
-        case atRtsTab:
-            RtsTable ();
-            break;
-
-        case atTextTab:
-            TextTable ();
-            break;
-
-        case atSkip:
-            ++PC;
-            break;
-
-        default:
-            DataByteLine (1);
-            ++PC;
-            break;
-    }
-
-    /* Change back to the default CODE segment if
-    ** a named segment stops at the current address.
-    */
-    for (I = D->Size; I >= 1; --I) {
-        if (IsSegmentEnd (PC - I)) {
-            EndSegment ();
-            break;
-        }
-    }
-}
-
-
-
-static void OnePass (void)
-/* Make one pass through the code */
-{
-    unsigned Count;
-
-    /* Disassemble until nothing left */
-    while ((Count = GetRemainingBytes()) > 0) {
-        OneOpcode (Count);
-    }
-}
-
-
-
-static void Disassemble (void)
-/* Disassemble the code */
-{
-    /* Pass 1 */
-    Pass = 1;
-    OnePass ();
-
-    Output ("---------------------------");
-    LineFeed ();
-
-    /* Pass 2 */
-    Pass = 2;
-    ResetCode ();
-    OutputSettings ();
-    DefOutOfRangeLabels ();
-    OnePass ();
-}
-
-
-
-int main (int argc, char* argv [])
-/* Assembler main program */
-{
-    /* Program long options */
-    static const LongOpt OptTab[] = {
-        { "--argument-column",  1,      OptArgumentColumn       },
-        { "--bytes-per-line",   1,      OptBytesPerLine         },
-        { "--comment-column",   1,      OptCommentColumn        },
-        { "--comments",         1,      OptComments             },
-        { "--cpu",              1,      OptCPU                  },
-        { "--debug-info",       0,      OptDebugInfo            },
-        { "--formfeeds",        0,      OptFormFeeds            },
-        { "--help",             0,      OptHelp                 },
-        { "--hexoffs",          0,      OptHexOffs              },
-        { "--info",             1,      OptInfo                 },
-        { "--label-break",      1,      OptLabelBreak           },
-        { "--mnemonic-column",  1,      OptMnemonicColumn       },
-        { "--pagelength",       1,      OptPageLength           },
-        { "--start-addr",       1,      OptStartAddr            },
-        { "--text-column",      1,      OptTextColumn           },
-        { "--verbose",          0,      OptVerbose              },
-        { "--version",          0,      OptVersion              },
-    };
-
-    unsigned I;
-    time_t T;
-
-    /* Initialize the cmdline module */
-    InitCmdLine (&argc, &argv, "da65");
-
-    /* Check the parameters */
-    I = 1;
-    while (I < ArgCount) {
-
-        /* Get the argument */
-        const char* Arg = ArgVec[I];
-
-        /* Check for an option */
-        if (Arg [0] == '-') {
-            switch (Arg [1]) {
-
-                case '-':
-                    LongOption (&I, OptTab, sizeof(OptTab)/sizeof(OptTab[0]));
-                    break;
-
-                case 'g':
-                    OptDebugInfo (Arg, 0);
-                    break;
-
-                case 'h':
-                    OptHelp (Arg, 0);
-                    break;
-
-                case 'i':
-                    OptInfo (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'o':
-                    OutFile = GetArg (&I, 2);
-                    break;
-
-                case 'v':
-                    OptVerbose (Arg, 0);
-                    break;
-
-                case 'S':
-                    OptStartAddr (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'V':
-                    OptVersion (Arg, 0);
-                    break;
-
-                default:
-                    UnknownOption (Arg);
-                    break;
-
-            }
-        } else {
-            /* Filename. Check if we already had one */
-            if (InFile) {
-                fprintf (stderr, "%s: Don't know what to do with `%s'\n",
-                         ProgName, Arg);
-                exit (EXIT_FAILURE);
-            } else {
-                InFile = Arg;
-            }
-        }
-
-        /* Next argument */
-        ++I;
-    }
-
-    /* Try to read the info file */
-    ReadInfoFile ();
-
-    /* Must have an input file */
-    if (InFile == 0) {
-        AbEnd ("No input file");
-    }
-
-    /* Check the formatting options for reasonable values. Note: We will not
-    ** really check that they make sense, just that they aren't complete
-    ** garbage.
-    */
-    if (MCol >= ACol) {
-        AbEnd ("mnemonic-column value must be smaller than argument-column value");
-    }
-    if (ACol >= CCol) {
-        AbEnd ("argument-column value must be smaller than comment-column value");
-    }
-    if (CCol >= TCol) {
-        AbEnd ("comment-column value must be smaller than text-column value");
-    }
-
-    /* If no CPU given, use the default CPU */
-    if (CPU == CPU_UNKNOWN) {
-        CPU = CPU_6502;
-    }
-
-    /* Get the current time and convert it to string so it can be used in
-    ** the output page headers.
-    */
-    T = time (0);
-    strftime (Now, sizeof (Now), "%Y-%m-%d %H:%M:%S", localtime (&T));
-
-    /* Load the input file */
-    LoadCode ();
-
-    /* Open the output file */
-    OpenOutput (OutFile);
-
-    /* Disassemble the code */
-    Disassemble ();
-
-    /* Close the output file */
-    CloseOutput ();
-
-    /* Done */
-    return EXIT_SUCCESS;
-}
diff --git a/src/da65/opc6502.c b/src/da65/opc6502.c
deleted file mode 100644 (file)
index 27f734d..0000000
+++ /dev/null
@@ -1,306 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 opc6502.c                                 */
-/*                                                                           */
-/*                       6502 opcode description table                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* da65 */
-#include "handler.h"
-#include "opc6502.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Descriptions for all opcodes */
-const OpcDesc OpcTable_6502[256] = {
-    {   "brk",  1,  flNone,                   OH_Implicit              }, /* $00 */
-    {   "ora",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $01 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $02 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $03 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $04 */
-    {   "ora",  2,  flUseLabel,               OH_Direct                }, /* $05 */
-    {   "asl",  2,  flUseLabel,               OH_Direct                }, /* $06 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $07 */
-    {   "php",  1,  flNone,                   OH_Implicit              }, /* $08 */
-    {   "ora",  2,  flNone,                   OH_Immediate             }, /* $09 */
-    {   "asl",  1,  flNone,                   OH_Accumulator           }, /* $0a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $0b */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $0c */
-    {   "ora",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0d */
-    {   "asl",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $0f */
-    {   "bpl",  2,  flLabel,                  OH_Relative              }, /* $10 */
-    {   "ora",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $11 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $12 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $13 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $14 */
-    {   "ora",  2,  flUseLabel,               OH_DirectX               }, /* $15 */
-    {   "asl",  2,  flUseLabel,               OH_DirectX               }, /* $16 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $17 */
-    {   "clc",  1,  flNone,                   OH_Implicit              }, /* $18 */
-    {   "ora",  3,  flUseLabel,               OH_AbsoluteY             }, /* $19 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $1a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $1b */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $1c */
-    {   "ora",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $1d */
-    {   "asl",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $1e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $1f */
-    {   "jsr",  3,  flLabel,                  OH_Absolute              }, /* $20 */
-    {   "and",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $21 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $22 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $23 */
-    {   "bit",  2,  flUseLabel,               OH_Direct                }, /* $24 */
-    {   "and",  2,  flUseLabel,               OH_Direct                }, /* $25 */
-    {   "rol",  2,  flUseLabel,               OH_Direct                }, /* $26 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $27 */
-    {   "plp",  1,  flNone,                   OH_Implicit              }, /* $28 */
-    {   "and",  2,  flNone,                   OH_Immediate             }, /* $29 */
-    {   "rol",  1,  flNone,                   OH_Accumulator           }, /* $2a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $2b */
-    {   "bit",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2c */
-    {   "and",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2d */
-    {   "rol",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $2f */
-    {   "bmi",  2,  flLabel,                  OH_Relative              }, /* $30 */
-    {   "and",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $31 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $32 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $33 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $34 */
-    {   "and",  2,  flUseLabel,               OH_DirectX               }, /* $35 */
-    {   "rol",  2,  flUseLabel,               OH_DirectX               }, /* $36 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $37 */
-    {   "sec",  1,  flNone,                   OH_Implicit              }, /* $38 */
-    {   "and",  3,  flUseLabel,               OH_AbsoluteY             }, /* $39 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $3a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $3b */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $3c */
-    {   "and",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $3d */
-    {   "rol",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $3e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $3f */
-    {   "rti",  1,  flNone,                   OH_Rts                   }, /* $40 */
-    {   "eor",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $41 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $42 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $43 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $44 */
-    {   "eor",  2,  flUseLabel,               OH_Direct                }, /* $45 */
-    {   "lsr",  2,  flUseLabel,               OH_Direct                }, /* $46 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $47 */
-    {   "pha",  1,  flNone,                   OH_Implicit              }, /* $48 */
-    {   "eor",  2,  flNone,                   OH_Immediate             }, /* $49 */
-    {   "lsr",  1,  flNone,                   OH_Accumulator           }, /* $4a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $4b */
-    {   "jmp",  3,  flLabel,                  OH_JmpAbsolute           }, /* $4c */
-    {   "eor",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $4d */
-    {   "lsr",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $4e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $4f */
-    {   "bvc",  2,  flLabel,                  OH_Relative              }, /* $50 */
-    {   "eor",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $51 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $52 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $53 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $54 */
-    {   "eor",  2,  flUseLabel,               OH_DirectX               }, /* $55 */
-    {   "lsr",  2,  flUseLabel,               OH_DirectX               }, /* $56 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $57 */
-    {   "cli",  1,  flNone,                   OH_Implicit              }, /* $58 */
-    {   "eor",  3,  flUseLabel,               OH_AbsoluteY             }, /* $59 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $5a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $5b */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $5c */
-    {   "eor",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $5d */
-    {   "lsr",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $5e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $5f */
-    {   "rts",  1,  flNone,                   OH_Rts                   }, /* $60 */
-    {   "adc",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $61 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $62 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $63 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $64 */
-    {   "adc",  2,  flUseLabel,               OH_Direct                }, /* $65 */
-    {   "ror",  2,  flUseLabel,               OH_Direct                }, /* $66 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $67 */
-    {   "pla",  1,  flNone,                   OH_Implicit              }, /* $68 */
-    {   "adc",  2,  flNone,                   OH_Immediate             }, /* $69 */
-    {   "ror",  1,  flNone,                   OH_Accumulator           }, /* $6a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $6b */
-    {   "jmp",  3,  flLabel,                  OH_JmpAbsoluteIndirect   }, /* $6c */
-    {   "adc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $6d */
-    {   "ror",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $6e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $6f */
-    {   "bvs",  2,  flLabel,                  OH_Relative              }, /* $70 */
-    {   "adc",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $71 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $72 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $73 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $74 */
-    {   "adc",  2,  flUseLabel,               OH_DirectX               }, /* $75 */
-    {   "ror",  2,  flUseLabel,               OH_DirectX               }, /* $76 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $77 */
-    {   "sei",  1,  flNone,                   OH_Implicit              }, /* $78 */
-    {   "adc",  3,  flUseLabel,               OH_AbsoluteY             }, /* $79 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $7a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $7b */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $7c */
-    {   "adc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $7d */
-    {   "ror",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $7e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $7f */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $80 */
-    {   "sta",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $81 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $82 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $83 */
-    {   "sty",  2,  flUseLabel,               OH_Direct                }, /* $84 */
-    {   "sta",  2,  flUseLabel,               OH_Direct                }, /* $85 */
-    {   "stx",  2,  flUseLabel,               OH_Direct                }, /* $86 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $87 */
-    {   "dey",  1,  flNone,                   OH_Implicit              }, /* $88 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $89 */
-    {   "txa",  1,  flNone,                   OH_Implicit              }, /* $8a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $8b */
-    {   "sty",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8c */
-    {   "sta",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8d */
-    {   "stx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $8f */
-    {   "bcc",  2,  flLabel,                  OH_Relative              }, /* $90 */
-    {   "sta",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $91 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $92 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $93 */
-    {   "sty",  2,  flUseLabel,               OH_DirectX               }, /* $94 */
-    {   "sta",  2,  flUseLabel,               OH_DirectX               }, /* $95 */
-    {   "stx",  2,  flUseLabel,               OH_DirectY               }, /* $96 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $97 */
-    {   "tya",  1,  flNone,                   OH_Implicit              }, /* $98 */
-    {   "sta",  3,  flUseLabel,               OH_AbsoluteY             }, /* $99 */
-    {   "txs",  1,  flNone,                   OH_Implicit              }, /* $9a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $9b */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $9c */
-    {   "sta",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $9d */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $9e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $9f */
-    {   "ldy",  2,  flNone,                   OH_Immediate             }, /* $a0 */
-    {   "lda",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $a1 */
-    {   "ldx",  2,  flNone,                   OH_Immediate             }, /* $a2 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $a3 */
-    {   "ldy",  2,  flUseLabel,               OH_Direct                }, /* $a4 */
-    {   "lda",  2,  flUseLabel,               OH_Direct                }, /* $a5 */
-    {   "ldx",  2,  flUseLabel,               OH_Direct                }, /* $a6 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $a7 */
-    {   "tay",  1,  flNone,                   OH_Implicit              }, /* $a8 */
-    {   "lda",  2,  flNone,                   OH_Immediate             }, /* $a9 */
-    {   "tax",  1,  flNone,                   OH_Implicit              }, /* $aa */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $ab */
-    {   "ldy",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ac */
-    {   "lda",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ad */
-    {   "ldx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ae */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $af */
-    {   "bcs",  2,  flLabel,                  OH_Relative              }, /* $b0 */
-    {   "lda",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $b1 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $b2 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $b3 */
-    {   "ldy",  2,  flUseLabel,               OH_DirectX               }, /* $b4 */
-    {   "lda",  2,  flUseLabel,               OH_DirectX               }, /* $b5 */
-    {   "ldx",  2,  flUseLabel,               OH_DirectY               }, /* $b6 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $b7 */
-    {   "clv",  1,  flNone,                   OH_Implicit              }, /* $b8 */
-    {   "lda",  3,  flUseLabel,               OH_AbsoluteY             }, /* $b9 */
-    {   "tsx",  1,  flNone,                   OH_Implicit              }, /* $ba */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $bb */
-    {   "ldy",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $bc */
-    {   "lda",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $bd */
-    {   "ldx",  3,  flUseLabel|flAbsOverride, OH_AbsoluteY             }, /* $be */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $bf */
-    {   "cpy",  2,  flNone,                   OH_Immediate             }, /* $c0 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $c1 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $c2 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $c3 */
-    {   "cpy",  2,  flUseLabel,               OH_Direct                }, /* $c4 */
-    {   "cmp",  2,  flUseLabel,               OH_Direct                }, /* $c5 */
-    {   "dec",  2,  flUseLabel,               OH_Direct                }, /* $c6 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $c7 */
-    {   "iny",  1,  flNone,                   OH_Implicit              }, /* $c8 */
-    {   "cmp",  2,  flNone,                   OH_Immediate             }, /* $c9 */
-    {   "dex",  1,  flNone,                   OH_Implicit              }, /* $ca */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $cb */
-    {   "cpy",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $cc */
-    {   "cmp",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $cd */
-    {   "dec",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ce */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $cf */
-    {   "bne",  2,  flLabel,                  OH_Relative              }, /* $d0 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $d1 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $d2 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $d3 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $d4 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectX               }, /* $d5 */
-    {   "dec",  2,  flUseLabel,               OH_DirectX               }, /* $d6 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $d7 */
-    {   "cld",  1,  flNone,                   OH_Implicit              }, /* $d8 */
-    {   "cmp",  3,  flUseLabel,               OH_AbsoluteY             }, /* $d9 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $da */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $db */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $dc */
-    {   "cmp",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $dd */
-    {   "dec",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $de */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $df */
-    {   "cpx",  2,  flNone,                   OH_Immediate             }, /* $e0 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $e1 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $e2 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $e3 */
-    {   "cpx",  2,  flUseLabel,               OH_Direct                }, /* $e4 */
-    {   "sbc",  2,  flUseLabel,               OH_Direct                }, /* $e5 */
-    {   "inc",  2,  flUseLabel,               OH_Direct                }, /* $e6 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $e7 */
-    {   "inx",  1,  flNone,                   OH_Implicit              }, /* $e8 */
-    {   "sbc",  2,  flNone,                   OH_Immediate             }, /* $e9 */
-    {   "nop",  1,  flNone,                   OH_Implicit              }, /* $ea */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $eb */
-    {   "cpx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ec */
-    {   "sbc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ed */
-    {   "inc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ee */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $ef */
-    {   "beq",  2,  flLabel,                  OH_Relative              }, /* $f0 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $f1 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $f2 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $f3 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $f4 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectX               }, /* $f5 */
-    {   "inc",  2,  flUseLabel,               OH_DirectX               }, /* $f6 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $f7 */
-    {   "sed",  1,  flNone,                   OH_Implicit              }, /* $f8 */
-    {   "sbc",  3,  flUseLabel,               OH_AbsoluteY             }, /* $f9 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $fa */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $fb */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $fc */
-    {   "sbc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $fd */
-    {   "inc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $fe */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $ff */
-};
diff --git a/src/da65/opc6502.h b/src/da65/opc6502.h
deleted file mode 100644 (file)
index c890e24..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 opc6502.h                                 */
-/*                                                                           */
-/*                       6502 opcode description table                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OPC6502_H
-#define OPC6502_H
-
-
-
-#include "opcdesc.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Descriptions for all opcodes */
-extern const OpcDesc OpcTable_6502[256];
-
-
-
-/* End of opc6502.h */
-
-#endif
diff --git a/src/da65/opc6502x.c b/src/da65/opc6502x.c
deleted file mode 100644 (file)
index 3bdc8a5..0000000
+++ /dev/null
@@ -1,308 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 opc6502.c                                 */
-/*                                                                           */
-/*             6502 opcode description table with NMOS illegals              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* da65 */
-#include "handler.h"
-#include "opc6502x.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Descriptions for all opcodes. Base table from opc6502.c with illegal
-** opcodes from http://www.oxyron.de/html/opcodes02.html
-*/
-const OpcDesc OpcTable_6502X[256] = {
-    {   "brk",  1,  flNone,                   OH_Implicit              }, /* $00 */
-    {   "ora",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $01 */
-    {   "jam",  1,  flNone,                   OH_Implicit              }, /* $02 */
-    {   "slo",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $03 */
-    {   "nop",  2,  flUseLabel,               OH_Direct                }, /* $04 */
-    {   "ora",  2,  flUseLabel,               OH_Direct                }, /* $05 */
-    {   "asl",  2,  flUseLabel,               OH_Direct                }, /* $06 */
-    {   "slo",  2,  flUseLabel,               OH_Direct                }, /* $07 */
-    {   "php",  1,  flNone,                   OH_Implicit              }, /* $08 */
-    {   "ora",  2,  flNone,                   OH_Immediate             }, /* $09 */
-    {   "asl",  1,  flNone,                   OH_Accumulator           }, /* $0a */
-    {   "anc",  2,  flNone,                   OH_Immediate             }, /* $0b */
-    {   "nop",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0c */
-    {   "ora",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0d */
-    {   "asl",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0e */
-    {   "slo",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0f */
-    {   "bpl",  2,  flLabel,                  OH_Relative              }, /* $10 */
-    {   "ora",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $11 */
-    {   "jam",  1,  flNone,                   OH_Implicit              }, /* $12 */
-    {   "slo",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $13 */
-    {   "nop",  2,  flUseLabel,               OH_DirectX               }, /* $14 */
-    {   "ora",  2,  flUseLabel,               OH_DirectX               }, /* $15 */
-    {   "asl",  2,  flUseLabel,               OH_DirectX               }, /* $16 */
-    {   "slo",  2,  flUseLabel,               OH_DirectX               }, /* $17 */
-    {   "clc",  1,  flNone,                   OH_Implicit              }, /* $18 */
-    {   "ora",  3,  flUseLabel,               OH_AbsoluteY             }, /* $19 */
-    {   "nop",  1,  flNone,                   OH_Implicit              }, /* $1a */
-    {   "slo",  3,  flUseLabel,               OH_AbsoluteY             }, /* $1b */
-    {   "nop",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $1c */
-    {   "ora",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $1d */
-    {   "asl",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $1e */
-    {   "slo",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $1f */
-    {   "jsr",  3,  flLabel,                  OH_Absolute              }, /* $20 */
-    {   "and",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $21 */
-    {   "jam",  1,  flNone,                   OH_Implicit,             }, /* $22 */
-    {   "rla",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $23 */
-    {   "bit",  2,  flUseLabel,               OH_Direct                }, /* $24 */
-    {   "and",  2,  flUseLabel,               OH_Direct                }, /* $25 */
-    {   "rol",  2,  flUseLabel,               OH_Direct                }, /* $26 */
-    {   "rla",  2,  flUseLabel,               OH_Direct                }, /* $27 */
-    {   "plp",  1,  flNone,                   OH_Implicit              }, /* $28 */
-    {   "and",  2,  flNone,                   OH_Immediate             }, /* $29 */
-    {   "rol",  1,  flNone,                   OH_Accumulator           }, /* $2a */
-    {   "anc",  2,  flNone,                   OH_Immediate             }, /* $2b */
-    {   "bit",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2c */
-    {   "and",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2d */
-    {   "rol",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2e */
-    {   "rla",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2f */
-    {   "bmi",  2,  flLabel,                  OH_Relative              }, /* $30 */
-    {   "and",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $31 */
-    {   "jam",  1,  flNone,                   OH_Implicit              }, /* $32 */
-    {   "rla",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $33 */
-    {   "nop",  2,  flUseLabel,               OH_DirectX               }, /* $34 */
-    {   "and",  2,  flUseLabel,               OH_DirectX               }, /* $35 */
-    {   "rol",  2,  flUseLabel,               OH_DirectX               }, /* $36 */
-    {   "rla",  2,  flUseLabel,               OH_DirectX               }, /* $37 */
-    {   "sec",  1,  flNone,                   OH_Implicit              }, /* $38 */
-    {   "and",  3,  flUseLabel,               OH_AbsoluteY             }, /* $39 */
-    {   "nop",  1,  flNone,                   OH_Implicit              }, /* $3a */
-    {   "rla",  3,  flUseLabel,               OH_AbsoluteY             }, /* $3b */
-    {   "nop",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $3c */
-    {   "and",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $3d */
-    {   "rol",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $3e */
-    {   "rla",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $3f */
-    {   "rti",  1,  flNone,                   OH_Rts                   }, /* $40 */
-    {   "eor",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $41 */
-    {   "jam",  1,  flNone,                   OH_Implicit              }, /* $42 */
-    {   "sre",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $43 */
-    {   "nop",  2,  flUseLabel,               OH_Direct                }, /* $44 */
-    {   "eor",  2,  flUseLabel,               OH_Direct                }, /* $45 */
-    {   "lsr",  2,  flUseLabel,               OH_Direct                }, /* $46 */
-    {   "sre",  2,  flUseLabel,               OH_Direct                }, /* $47 */
-    {   "pha",  1,  flNone,                   OH_Implicit              }, /* $48 */
-    {   "eor",  2,  flNone,                   OH_Immediate             }, /* $49 */
-    {   "lsr",  1,  flNone,                   OH_Accumulator           }, /* $4a */
-    {   "alr",  2,  flNone,                   OH_Immediate             }, /* $4b */
-    {   "jmp",  3,  flLabel,                  OH_JmpAbsolute           }, /* $4c */
-    {   "eor",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $4d */
-    {   "lsr",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $4e */
-    {   "sre",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $4f */
-    {   "bvc",  2,  flLabel,                  OH_Relative              }, /* $50 */
-    {   "eor",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $51 */
-    {   "jam",  1,  flNone,                   OH_Implicit              }, /* $52 */
-    {   "sre",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $53 */
-    {   "nop",  2,  flUseLabel,               OH_DirectX               }, /* $54 */
-    {   "eor",  2,  flUseLabel,               OH_DirectX               }, /* $55 */
-    {   "lsr",  2,  flUseLabel,               OH_DirectX               }, /* $56 */
-    {   "sre",  2,  flUseLabel,               OH_DirectX               }, /* $57 */
-    {   "cli",  1,  flNone,                   OH_Implicit              }, /* $58 */
-    {   "eor",  3,  flUseLabel,               OH_AbsoluteY             }, /* $59 */
-    {   "nop",  1,  flNone,                   OH_Implicit              }, /* $5a */
-    {   "sre",  3,  flUseLabel,               OH_AbsoluteY             }, /* $5b */
-    {   "nop",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $5c */
-    {   "eor",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $5d */
-    {   "lsr",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $5e */
-    {   "sre",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $5f */
-    {   "rts",  1,  flNone,                   OH_Rts                   }, /* $60 */
-    {   "adc",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $61 */
-    {   "jam",  1,  flNone,                   OH_Implicit              }, /* $62 */
-    {   "rra",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $63 */
-    {   "nop",  2,  flUseLabel,               OH_Direct                }, /* $64 */
-    {   "adc",  2,  flUseLabel,               OH_Direct                }, /* $65 */
-    {   "ror",  2,  flUseLabel,               OH_Direct                }, /* $66 */
-    {   "rra",  2,  flUseLabel,               OH_Direct                }, /* $67 */
-    {   "pla",  1,  flNone,                   OH_Implicit              }, /* $68 */
-    {   "adc",  2,  flNone,                   OH_Immediate             }, /* $69 */
-    {   "ror",  1,  flNone,                   OH_Accumulator           }, /* $6a */
-    {   "arr",  2,  flNone,                   OH_Immediate             }, /* $6b */
-    {   "jmp",  3,  flLabel,                  OH_JmpAbsoluteIndirect   }, /* $6c */
-    {   "adc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $6d */
-    {   "ror",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $6e */
-    {   "rra",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $6f */
-    {   "bvs",  2,  flLabel,                  OH_Relative              }, /* $70 */
-    {   "adc",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $71 */
-    {   "jam",  1,  flNone,                   OH_Implicit              }, /* $72 */
-    {   "rra",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $73 */
-    {   "nop",  2,  flUseLabel,               OH_DirectX               }, /* $74 */
-    {   "adc",  2,  flUseLabel,               OH_DirectX               }, /* $75 */
-    {   "ror",  2,  flUseLabel,               OH_DirectX               }, /* $76 */
-    {   "rra",  2,  flUseLabel,               OH_DirectX               }, /* $77 */
-    {   "sei",  1,  flNone,                   OH_Implicit              }, /* $78 */
-    {   "adc",  3,  flUseLabel,               OH_AbsoluteY             }, /* $79 */
-    {   "nop",  1,  flNone,                   OH_Implicit              }, /* $7a */
-    {   "rra",  3,  flUseLabel,               OH_AbsoluteY             }, /* $7b */
-    {   "nop",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $7c */
-    {   "adc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $7d */
-    {   "ror",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $7e */
-    {   "rra",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $7f */
-    {   "nop",  2,  flNone,                   OH_Immediate             }, /* $80 */
-    {   "sta",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $81 */
-    {   "nop",  2,  flNone,                   OH_Immediate             }, /* $82 */
-    {   "sax",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $83 */
-    {   "sty",  2,  flUseLabel,               OH_Direct                }, /* $84 */
-    {   "sta",  2,  flUseLabel,               OH_Direct                }, /* $85 */
-    {   "stx",  2,  flUseLabel,               OH_Direct                }, /* $86 */
-    {   "sax",  2,  flUseLabel,               OH_Direct                }, /* $87 */
-    {   "dey",  1,  flNone,                   OH_Implicit              }, /* $88 */
-    {   "nop",  2,  flNone,                   OH_Immediate             }, /* $89 */
-    {   "txa",  1,  flNone,                   OH_Implicit              }, /* $8a */
-    {   "xaa",  2,  flNone,                   OH_Immediate             }, /* $8b */
-    {   "sty",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8c */
-    {   "sta",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8d */
-    {   "stx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8e */
-    {   "sax",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8f */
-    {   "bcc",  2,  flLabel,                  OH_Relative              }, /* $90 */
-    {   "sta",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $91 */
-    {   "jam",  1,  flNone,                   OH_Implicit              }, /* $92 */
-    {   "ahx",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $93 */
-    {   "sty",  2,  flUseLabel,               OH_DirectX               }, /* $94 */
-    {   "sta",  2,  flUseLabel,               OH_DirectX               }, /* $95 */
-    {   "stx",  2,  flUseLabel,               OH_DirectY               }, /* $96 */
-    {   "sax",  2,  flUseLabel,               OH_DirectY               }, /* $97 */
-    {   "tya",  1,  flNone,                   OH_Implicit              }, /* $98 */
-    {   "sta",  3,  flUseLabel,               OH_AbsoluteY             }, /* $99 */
-    {   "txs",  1,  flNone,                   OH_Implicit              }, /* $9a */
-    {   "tas",  3,  flUseLabel,               OH_AbsoluteY             }, /* $9b */
-    {   "shy",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $9c */
-    {   "sta",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $9d */
-    {   "shx",  3,  flUseLabel,               OH_AbsoluteY             }, /* $9e */
-    {   "ahx",  3,  flUseLabel,               OH_AbsoluteY             }, /* $9f */
-    {   "ldy",  2,  flNone,                   OH_Immediate             }, /* $a0 */
-    {   "lda",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $a1 */
-    {   "ldx",  2,  flNone,                   OH_Immediate             }, /* $a2 */
-    {   "lax",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $a3 */
-    {   "ldy",  2,  flUseLabel,               OH_Direct                }, /* $a4 */
-    {   "lda",  2,  flUseLabel,               OH_Direct                }, /* $a5 */
-    {   "ldx",  2,  flUseLabel,               OH_Direct                }, /* $a6 */
-    {   "lax",  2,  flUseLabel,               OH_Direct                }, /* $a7 */
-    {   "tay",  1,  flNone,                   OH_Implicit              }, /* $a8 */
-    {   "lda",  2,  flNone,                   OH_Immediate             }, /* $a9 */
-    {   "tax",  1,  flNone,                   OH_Implicit              }, /* $aa */
-    {   "lax",  2,  flNone,                   OH_Immediate             }, /* $ab */
-    {   "ldy",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ac */
-    {   "lda",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ad */
-    {   "ldx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ae */
-    {   "lax",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $af */
-    {   "bcs",  2,  flLabel,                  OH_Relative              }, /* $b0 */
-    {   "lda",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $b1 */
-    {   "jam",  1,  flNone,                   OH_Implicit              }, /* $b2 */
-    {   "lax",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $b3 */
-    {   "ldy",  2,  flUseLabel,               OH_DirectX               }, /* $b4 */
-    {   "lda",  2,  flUseLabel,               OH_DirectX               }, /* $b5 */
-    {   "ldx",  2,  flUseLabel,               OH_DirectY               }, /* $b6 */
-    {   "lax",  2,  flUseLabel,               OH_DirectY               }, /* $b7 */
-    {   "clv",  1,  flNone,                   OH_Implicit              }, /* $b8 */
-    {   "lda",  3,  flUseLabel,               OH_AbsoluteY             }, /* $b9 */
-    {   "tsx",  1,  flNone,                   OH_Implicit              }, /* $ba */
-    {   "las",  3,  flUseLabel,               OH_AbsoluteY             }, /* $bb */
-    {   "ldy",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $bc */
-    {   "lda",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $bd */
-    {   "ldx",  3,  flUseLabel|flAbsOverride, OH_AbsoluteY             }, /* $be */
-    {   "lax",  3,  flUseLabel|flAbsOverride, OH_AbsoluteY             }, /* $bf */
-    {   "cpy",  2,  flNone,                   OH_Immediate             }, /* $c0 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $c1 */
-    {   "nop",  2,  flNone,                   OH_Immediate             }, /* $c2 */
-    {   "dcp",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $c3 */
-    {   "cpy",  2,  flUseLabel,               OH_Direct                }, /* $c4 */
-    {   "cmp",  2,  flUseLabel,               OH_Direct                }, /* $c5 */
-    {   "dec",  2,  flUseLabel,               OH_Direct                }, /* $c6 */
-    {   "dcp",  2,  flUseLabel,               OH_Direct                }, /* $c7 */
-    {   "iny",  1,  flNone,                   OH_Implicit              }, /* $c8 */
-    {   "cmp",  2,  flNone,                   OH_Immediate             }, /* $c9 */
-    {   "dex",  1,  flNone,                   OH_Implicit              }, /* $ca */
-    {   "axs",  2,  flNone,                   OH_Immediate             }, /* $cb */
-    {   "cpy",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $cc */
-    {   "cmp",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $cd */
-    {   "dec",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ce */
-    {   "dcp",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $cf */
-    {   "bne",  2,  flLabel,                  OH_Relative              }, /* $d0 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $d1 */
-    {   "jam",  1,  flNone,                   OH_Implicit              }, /* $d2 */
-    {   "dcp",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $d3 */
-    {   "nop",  2,  flUseLabel,               OH_DirectX               }, /* $d4 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectX               }, /* $d5 */
-    {   "dec",  2,  flUseLabel,               OH_DirectX               }, /* $d6 */
-    {   "dcp",  2,  flUseLabel,               OH_DirectX               }, /* $d7 */
-    {   "cld",  1,  flNone,                   OH_Implicit              }, /* $d8 */
-    {   "cmp",  3,  flUseLabel,               OH_AbsoluteY             }, /* $d9 */
-    {   "nop",  1,  flNone,                   OH_Implicit              }, /* $da */
-    {   "dcp",  3,  flUseLabel,               OH_AbsoluteY             }, /* $db */
-    {   "nop",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $dc */
-    {   "cmp",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $dd */
-    {   "dec",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $de */
-    {   "dcp",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $df */
-    {   "cpx",  2,  flNone,                   OH_Immediate             }, /* $e0 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $e1 */
-    {   "nop",  2,  flNone,                   OH_Immediate             }, /* $e2 */
-    {   "isc",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $e3 */
-    {   "cpx",  2,  flUseLabel,               OH_Direct                }, /* $e4 */
-    {   "sbc",  2,  flUseLabel,               OH_Direct                }, /* $e5 */
-    {   "inc",  2,  flUseLabel,               OH_Direct                }, /* $e6 */
-    {   "isc",  2,  flUseLabel,               OH_Direct                }, /* $e7 */
-    {   "inx",  1,  flNone,                   OH_Implicit              }, /* $e8 */
-    {   "sbc",  2,  flNone,                   OH_Immediate             }, /* $e9 */
-    {   "nop",  1,  flNone,                   OH_Implicit              }, /* $ea */
-    {   "sbc",  2,  flNone,                   OH_Immediate             }, /* $eb */
-    {   "cpx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ec */
-    {   "sbc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ed */
-    {   "inc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ee */
-    {   "isc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ef */
-    {   "beq",  2,  flLabel,                  OH_Relative              }, /* $f0 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $f1 */
-    {   "jam",  1,  flNone,                   OH_Implicit              }, /* $f2 */
-    {   "isc",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $f3 */
-    {   "nop",  2,  flUseLabel,               OH_DirectX               }, /* $f4 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectX               }, /* $f5 */
-    {   "inc",  2,  flUseLabel,               OH_DirectX               }, /* $f6 */
-    {   "isc",  2,  flUseLabel,               OH_DirectX               }, /* $f7 */
-    {   "sed",  1,  flNone,                   OH_Implicit              }, /* $f8 */
-    {   "sbc",  3,  flUseLabel,               OH_AbsoluteY             }, /* $f9 */
-    {   "nop",  1,  flNone,                   OH_Implicit              }, /* $fa */
-    {   "isc",  3,  flUseLabel,               OH_AbsoluteY             }, /* $fb */
-    {   "nop",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $fc */
-    {   "sbc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $fd */
-    {   "inc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $fe */
-    {   "isc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $ff */
-};
diff --git a/src/da65/opc6502x.h b/src/da65/opc6502x.h
deleted file mode 100644 (file)
index e086f87..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 opc6502.h                                 */
-/*                                                                           */
-/*             6502 opcode description table with NMOS illegals              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OPC6502X_H
-#define OPC6502X_H
-
-
-
-#include "opcdesc.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Descriptions for all opcodes */
-extern const OpcDesc OpcTable_6502X[256];
-
-
-
-/* End of opc6502x.h */
-#endif
-
-
-
-                  
diff --git a/src/da65/opc65816.c b/src/da65/opc65816.c
deleted file mode 100644 (file)
index 2cd2aae..0000000
+++ /dev/null
@@ -1,306 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 opc65816.c                                */
-/*                                                                           */
-/*                       65816 opcode description table                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* da65 */
-#include "handler.h"
-#include "opc65816.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Descriptions for all opcodes */
-const OpcDesc OpcTable_65816[256] = {
-    {   "brk",  1,  flNone,                   OH_Implicit              }, /* $00 */
-    {   "ora",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $01 */
-    {   "cop",  2,  flNone,                   OH_Implicit              }, /* $02 */
-    {   "ora",  2,  flNone,                   OH_StackRelative         }, /* $03 */
-    {   "tsb",  2,  flUseLabel,               OH_Direct                }, /* $04 */
-    {   "ora",  2,  flUseLabel,               OH_Direct                }, /* $05 */
-    {   "asl",  2,  flUseLabel,               OH_Direct                }, /* $06 */
-    {   "ora",  2,  flUseLabel,               OH_DirectIndirectLong    }, /* $07 */
-    {   "php",  1,  flNone,                   OH_Implicit              }, /* $08 */
-    {   "ora",  2,  flNone,                   OH_Immediate             }, /* $09 */
-    {   "asl",  1,  flNone,                   OH_Accumulator           }, /* $0a */
-    {   "phd",  1,  flNone,                   OH_Implicit              }, /* $0b */
-    {   "tsb",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0c */
-    {   "ora",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0d */
-    {   "asl",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0e */
-    {   "ora",  4,  flUseLabel,               OH_AbsoluteLong          }, /* $0f */
-    {   "bpl",  2,  flLabel,                  OH_Relative              }, /* $10 */
-    {   "ora",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $11 */
-    {   "ora",  2,  flUseLabel,               OH_DirectIndirect        }, /* $12 */
-    {   "ora",  2,  flNone,                   OH_StackRelativeIndirectY}, /* $13 */
-    {   "trb",  2,  flUseLabel,               OH_Direct                }, /* $14 */
-    {   "ora",  2,  flUseLabel,               OH_DirectX               }, /* $15 */
-    {   "asl",  2,  flUseLabel,               OH_DirectX               }, /* $16 */
-    {   "ora",  2,  flUseLabel,               OH_DirectIndirectLongY   }, /* $17 */
-    {   "clc",  1,  flNone,                   OH_Implicit              }, /* $18 */
-    {   "ora",  3,  flUseLabel,               OH_AbsoluteY             }, /* $19 */
-    {   "inc",  1,  flNone,                   OH_Accumulator           }, /* $1a */
-    {   "tcs",  1,  flNone,                   OH_Implicit              }, /* $1b */
-    {   "trb",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $1c */
-    {   "ora",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $1d */
-    {   "asl",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $1e */
-    {   "ora",  4,  flUseLabel,               OH_AbsoluteLongX         }, /* $1f */
-    {   "jsr",  3,  flLabel,                  OH_Absolute              }, /* $20 */
-    {   "and",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $21 */
-    {   "jsl",  3,  flLabel,                  OH_AbsoluteLong          }, /* $22 */
-    {   "and",  2,  flNone,                   OH_StackRelative         }, /* $23 */
-    {   "bit",  2,  flUseLabel,               OH_Direct                }, /* $24 */
-    {   "and",  2,  flUseLabel,               OH_Direct                }, /* $25 */
-    {   "rol",  2,  flUseLabel,               OH_Direct                }, /* $26 */
-    {   "and",  2,  flUseLabel,               OH_DirectIndirectLong    }, /* $27 */
-    {   "plp",  1,  flNone,                   OH_Implicit              }, /* $28 */
-    {   "and",  2,  flNone,                   OH_Immediate             }, /* $29 */
-    {   "rol",  1,  flNone,                   OH_Accumulator           }, /* $2a */
-    {   "pld",  1,  flNone,                   OH_Implicit              }, /* $2b */
-    {   "bit",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2c */
-    {   "and",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2d */
-    {   "rol",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2e */
-    {   "and",  4,  flUseLabel,               OH_AbsoluteLong          }, /* $2f */
-    {   "bmi",  2,  flLabel,                  OH_Relative              }, /* $30 */
-    {   "and",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $31 */
-    {   "and",  2,  flUseLabel,               OH_DirectIndirect        }, /* $32 */
-    {   "and",  2,  flNone,                   OH_StackRelativeIndirectY}, /* $33 */
-    {   "bit",  2,  flUseLabel,               OH_DirectX               }, /* $34 */
-    {   "and",  2,  flUseLabel,               OH_DirectX               }, /* $35 */
-    {   "rol",  2,  flUseLabel,               OH_DirectX               }, /* $36 */
-    {   "and",  2,  flUseLabel,               OH_DirectIndirectLongY   }, /* $37 */
-    {   "sec",  1,  flNone,                   OH_Implicit              }, /* $38 */
-    {   "and",  3,  flUseLabel,               OH_AbsoluteY             }, /* $39 */
-    {   "dec",  1,  flNone,                   OH_Accumulator           }, /* $3a */
-    {   "tsc",  1,  flNone,                   OH_Implicit              }, /* $3b */
-    {   "bit",  3,  flUseLabel,               OH_AbsoluteX             }, /* $3c */
-    {   "and",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $3d */
-    {   "rol",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $3e */
-    {   "and",  4,  flUseLabel,               OH_AbsoluteLongX         }, /* $3f */
-    {   "rti",  1,  flNone,                   OH_Rts                   }, /* $40 */
-    {   "eor",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $41 */
-    {   "wdm",  2,  flNone,                   OH_Implicit              }, /* $42 */
-    {   "eor",  2,  flNone,                   OH_StackRelative         }, /* $43 */
-    {   "mvp",  3,  flNone,                   OH_BlockMove             }, /* $44 */
-    {   "eor",  2,  flUseLabel,               OH_Direct                }, /* $45 */
-    {   "lsr",  2,  flUseLabel,               OH_Direct                }, /* $46 */
-    {   "eor",  2,  flUseLabel,               OH_DirectIndirectLong    }, /* $47 */
-    {   "pha",  1,  flNone,                   OH_Implicit              }, /* $48 */
-    {   "eor",  2,  flNone,                   OH_Immediate             }, /* $49 */
-    {   "lsr",  1,  flNone,                   OH_Accumulator           }, /* $4a */
-    {   "phk",  1,  flNone,                   OH_Implicit              }, /* $4b */
-    {   "jmp",  3,  flLabel,                  OH_JmpAbsolute           }, /* $4c */
-    {   "eor",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $4d */
-    {   "lsr",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $4e */
-    {   "eor",  4,  flUseLabel,               OH_AbsoluteLong          }, /* $4f */
-    {   "bvc",  2,  flLabel,                  OH_Relative              }, /* $50 */
-    {   "eor",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $51 */
-    {   "eor",  2,  flUseLabel,               OH_DirectIndirect        }, /* $52 */
-    {   "eor",  2,  flNone,                   OH_StackRelativeIndirectY}, /* $53 */
-    {   "mvn",  3,  flNone,                   OH_BlockMove             }, /* $54 */
-    {   "eor",  2,  flUseLabel,               OH_DirectX               }, /* $55 */
-    {   "lsr",  2,  flUseLabel,               OH_DirectX               }, /* $56 */
-    {   "eor",  2,  flUseLabel,               OH_DirectIndirectLongY   }, /* $57 */
-    {   "cli",  1,  flNone,                   OH_Implicit              }, /* $58 */
-    {   "eor",  3,  flUseLabel,               OH_AbsoluteY             }, /* $59 */
-    {   "phy",  1,  flNone,                   OH_Implicit              }, /* $5a */
-    {   "tcd",  1,  flNone,                   OH_Implicit              }, /* $5b */
-    {   "jml",  4,  flLabel,                  OH_AbsoluteLong          }, /* $5c */
-    {   "eor",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $5d */
-    {   "lsr",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $5e */
-    {   "eor",  4,  flUseLabel,               OH_AbsoluteLongX         }, /* $5f */
-    {   "rts",  1,  flNone,                   OH_Rts                   }, /* $60 */
-    {   "adc",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $61 */
-    {   "per",  3,  flLabel,                  OH_RelativeLong          }, /* $62 */
-    {   "adc",  2,  flNone,                   OH_StackRelative         }, /* $63 */
-    {   "stz",  2,  flUseLabel,               OH_Direct                }, /* $64 */
-    {   "adc",  2,  flUseLabel,               OH_Direct                }, /* $65 */
-    {   "ror",  2,  flUseLabel,               OH_Direct                }, /* $66 */
-    {   "adc",  2,  flUseLabel,               OH_DirectIndirectLong    }, /* $67 */
-    {   "pla",  1,  flNone,                   OH_Implicit              }, /* $68 */
-    {   "adc",  2,  flNone,                   OH_Immediate             }, /* $69 */
-    {   "ror",  1,  flNone,                   OH_Accumulator           }, /* $6a */
-    {   "rtl",  1,  flNone,                   OH_Implicit              }, /* $6b */
-    {   "jmp",  3,  flLabel,                  OH_JmpAbsoluteIndirect   }, /* $6c */
-    {   "adc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $6d */
-    {   "ror",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $6e */
-    {   "adc",  4,  flUseLabel,               OH_AbsoluteLong          }, /* $6f */
-    {   "bvs",  2,  flLabel,                  OH_Relative              }, /* $70 */
-    {   "adc",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $71 */
-    {   "adc",  2,  flUseLabel,               OH_DirectIndirect        }, /* $72 */
-    {   "adc",  2,  flNone,                   OH_StackRelativeIndirectY}, /* $73 */
-    {   "stz",  2,  flUseLabel,               OH_DirectX               }, /* $74 */
-    {   "adc",  2,  flUseLabel,               OH_DirectX               }, /* $75 */
-    {   "ror",  2,  flUseLabel,               OH_DirectX               }, /* $76 */
-    {   "adc",  2,  flUseLabel,               OH_DirectIndirectLongY   }, /* $77 */
-    {   "sei",  1,  flNone,                   OH_Implicit              }, /* $78 */
-    {   "adc",  3,  flUseLabel,               OH_AbsoluteY             }, /* $79 */
-    {   "ply",  1,  flNone,                   OH_Implicit              }, /* $7a */
-    {   "tdc",  1,  flNone,                   OH_Implicit              }, /* $7b */
-    {   "jmp",  3,  flLabel,                  OH_AbsoluteXIndirect     }, /* $7c */
-    {   "adc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $7d */
-    {   "ror",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $7e */
-    {   "adc",  4,  flUseLabel,               OH_AbsoluteLongX         }, /* $7f */
-    {   "bra",  2,  flLabel,                  OH_Relative              }, /* $80 */
-    {   "sta",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $81 */
-    {   "brl",  3,  flLabel,                  OH_RelativeLong          }, /* $82 */
-    {   "sta",  2,  flNone,                   OH_StackRelative         }, /* $83 */
-    {   "sty",  2,  flUseLabel,               OH_Direct                }, /* $84 */
-    {   "sta",  2,  flUseLabel,               OH_Direct                }, /* $85 */
-    {   "stx",  2,  flUseLabel,               OH_Direct                }, /* $86 */
-    {   "sta",  2,  flUseLabel,               OH_DirectIndirectLong    }, /* $87 */
-    {   "dey",  1,  flNone,                   OH_Implicit              }, /* $88 */
-    {   "bit",  2,  flNone,                   OH_Immediate             }, /* $89 */
-    {   "txa",  1,  flNone,                   OH_Implicit              }, /* $8a */
-    {   "phb",  1,  flNone,                   OH_Implicit              }, /* $8b */
-    {   "sty",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8c */
-    {   "sta",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8d */
-    {   "stx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8e */
-    {   "sta",  4,  flUseLabel,               OH_AbsoluteLong          }, /* $8f */
-    {   "bcc",  2,  flLabel,                  OH_Relative              }, /* $90 */
-    {   "sta",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $91 */
-    {   "sta",  2,  flUseLabel,               OH_DirectIndirect        }, /* $92 */
-    {   "sta",  2,  flNone,                   OH_StackRelativeIndirectY}, /* $93 */
-    {   "sty",  2,  flUseLabel,               OH_DirectX               }, /* $94 */
-    {   "sta",  2,  flUseLabel,               OH_DirectX               }, /* $95 */
-    {   "stx",  2,  flUseLabel,               OH_DirectY               }, /* $96 */
-    {   "sta",  2,  flUseLabel,               OH_DirectIndirectLongY   }, /* $97 */
-    {   "tya",  1,  flNone,                   OH_Implicit              }, /* $98 */
-    {   "sta",  3,  flUseLabel,               OH_AbsoluteY             }, /* $99 */
-    {   "txs",  1,  flNone,                   OH_Implicit              }, /* $9a */
-    {   "txy",  1,  flNone,                   OH_Implicit              }, /* $9b */
-    {   "stz",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $9c */
-    {   "sta",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $9d */
-    {   "stz",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $9e */
-    {   "sta",  4,  flUseLabel,               OH_AbsoluteLongX         }, /* $9f */
-    {   "ldy",  2,  flNone,                   OH_Immediate             }, /* $a0 */
-    {   "lda",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $a1 */
-    {   "ldx",  2,  flNone,                   OH_Immediate             }, /* $a2 */
-    {   "lda",  2,  flNone,                   OH_StackRelative         }, /* $a3 */
-    {   "ldy",  2,  flUseLabel,               OH_Direct                }, /* $a4 */
-    {   "lda",  2,  flUseLabel,               OH_Direct                }, /* $a5 */
-    {   "ldx",  2,  flUseLabel,               OH_Direct                }, /* $a6 */
-    {   "lda",  2,  flUseLabel,               OH_DirectIndirectLong    }, /* $a7 */
-    {   "tay",  1,  flNone,                   OH_Implicit              }, /* $a8 */
-    {   "lda",  2,  flNone,                   OH_Immediate             }, /* $a9 */
-    {   "tax",  1,  flNone,                   OH_Implicit              }, /* $aa */
-    {   "plb",  1,  flNone,                   OH_Implicit              }, /* $ab */
-    {   "ldy",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ac */
-    {   "lda",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ad */
-    {   "ldx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ae */
-    {   "lda",  4,  flUseLabel,               OH_AbsoluteLong          }, /* $af */
-    {   "bcs",  2,  flLabel,                  OH_Relative              }, /* $b0 */
-    {   "lda",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $b1 */
-    {   "lda",  2,  flUseLabel,               OH_DirectIndirect        }, /* $b2 */
-    {   "lda",  2,  flNone,                   OH_StackRelativeIndirectY}, /* $b3 */
-    {   "ldy",  2,  flUseLabel,               OH_DirectX               }, /* $b4 */
-    {   "lda",  2,  flUseLabel,               OH_DirectX               }, /* $b5 */
-    {   "ldx",  2,  flUseLabel,               OH_DirectY               }, /* $b6 */
-    {   "lda",  2,  flUseLabel,               OH_DirectIndirectLongY   }, /* $b7 */
-    {   "clv",  1,  flNone,                   OH_Implicit              }, /* $b8 */
-    {   "lda",  3,  flUseLabel,               OH_AbsoluteY             }, /* $b9 */
-    {   "tsx",  1,  flNone,                   OH_Implicit              }, /* $ba */
-    {   "tyx",  1,  flNone,                   OH_Implicit              }, /* $bb */
-    {   "ldy",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $bc */
-    {   "lda",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $bd */
-    {   "ldx",  3,  flUseLabel|flAbsOverride, OH_AbsoluteY             }, /* $be */
-    {   "lda",  4,  flUseLabel,               OH_AbsoluteLongX         }, /* $bf */
-    {   "cpy",  2,  flNone,                   OH_Immediate             }, /* $c0 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $c1 */
-    {   "rep",  2,  flNone,                   OH_Immediate             }, /* $c2 */
-    {   "cmp",  2,  flNone,                   OH_StackRelative         }, /* $c3 */
-    {   "cpy",  2,  flUseLabel,               OH_Direct                }, /* $c4 */
-    {   "cmp",  2,  flUseLabel,               OH_Direct                }, /* $c5 */
-    {   "dec",  2,  flUseLabel,               OH_Direct                }, /* $c6 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectIndirectLong    }, /* $c7 */
-    {   "iny",  1,  flNone,                   OH_Implicit              }, /* $c8 */
-    {   "cmp",  2,  flNone,                   OH_Immediate             }, /* $c9 */
-    {   "dex",  1,  flNone,                   OH_Implicit              }, /* $ca */
-    {   "wai",  1,  flNone,                   OH_Implicit              }, /* $cb */
-    {   "cpy",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $cc */
-    {   "cmp",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $cd */
-    {   "dec",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ce */
-    {   "cmp",  4,  flUseLabel,               OH_AbsoluteLong          }, /* $cf */
-    {   "bne",  2,  flLabel,                  OH_Relative              }, /* $d0 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $d1 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectIndirect        }, /* $d2 */
-    {   "cmp",  2,  flNone,                   OH_StackRelativeIndirectY}, /* $d3 */
-    {   "pei",  2,  flUseLabel,               OH_Direct                }, /* $d4 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectX               }, /* $d5 */
-    {   "dec",  2,  flUseLabel,               OH_DirectX               }, /* $d6 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectIndirectLongY   }, /* $d7 */
-    {   "cld",  1,  flNone,                   OH_Implicit              }, /* $d8 */
-    {   "cmp",  3,  flUseLabel,               OH_AbsoluteY             }, /* $d9 */
-    {   "phx",  1,  flNone,                   OH_Implicit              }, /* $da */
-    {   "stp",  1,  flNone,                   OH_Implicit              }, /* $db */
-    {   "jml",  3,  flLabel,                  OH_AbsoluteIndirect      }, /* $dc */
-    {   "cmp",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $dd */
-    {   "dec",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $de */
-    {   "cmp",  4,  flUseLabel,               OH_AbsoluteLongX         }, /* $df */
-    {   "cpx",  2,  flNone,                   OH_Immediate             }, /* $e0 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $e1 */
-    {   "sep",  2,  flNone,                   OH_Immediate             }, /* $e2 */
-    {   "sbc",  2,  flNone,                   OH_StackRelative         }, /* $e3 */
-    {   "cpx",  2,  flUseLabel,               OH_Direct                }, /* $e4 */
-    {   "sbc",  2,  flUseLabel,               OH_Direct                }, /* $e5 */
-    {   "inc",  2,  flUseLabel,               OH_Direct                }, /* $e6 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectIndirectLong    }, /* $e7 */
-    {   "inx",  1,  flNone,                   OH_Implicit              }, /* $e8 */
-    {   "sbc",  2,  flNone,                   OH_Immediate             }, /* $e9 */
-    {   "nop",  1,  flNone,                   OH_Implicit              }, /* $ea */
-    {   "xba",  1,  flNone,                   OH_Implicit              }, /* $eb */
-    {   "cpx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ec */
-    {   "sbc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ed */
-    {   "inc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ee */
-    {   "sbc",  4,  flUseLabel,               OH_AbsoluteLong          }, /* $ef */
-    {   "beq",  2,  flLabel,                  OH_Relative              }, /* $f0 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $f1 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectIndirect        }, /* $f2 */
-    {   "sbc",  2,  flNone,                   OH_StackRelativeIndirectY}, /* $f3 */
-    {   "pea",  3,  flUseLabel,               OH_Absolute              }, /* $f4 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectX               }, /* $f5 */
-    {   "inc",  2,  flUseLabel,               OH_DirectX               }, /* $f6 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectIndirectLongY   }, /* $f7 */
-    {   "sed",  1,  flNone,                   OH_Implicit              }, /* $f8 */
-    {   "sbc",  3,  flUseLabel,               OH_AbsoluteY             }, /* $f9 */
-    {   "plx",  1,  flNone,                   OH_Implicit              }, /* $fa */
-    {   "xce",  1,  flNone,                   OH_Implicit              }, /* $fb */
-    {   "jsr",  3,  flLabel,                  OH_AbsoluteXIndirect     }, /* $fc */
-    {   "sbc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $fd */
-    {   "inc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $fe */
-    {   "sbc",  4,  flUseLabel,               OH_AbsoluteLongX         }, /* $ff */
-};
diff --git a/src/da65/opc65816.h b/src/da65/opc65816.h
deleted file mode 100644 (file)
index 12ffc4a..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 opc65816.h                                */
-/*                                                                           */
-/*                       65816 opcode description table                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OPC65816_H
-#define OPC65816_H
-
-
-
-#include "opcdesc.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Descriptions for all opcodes */
-extern const OpcDesc OpcTable_65816[256];
-
-
-
-/* End of opc65816.h */
-
-#endif
diff --git a/src/da65/opc65c02.c b/src/da65/opc65c02.c
deleted file mode 100644 (file)
index 00520e7..0000000
+++ /dev/null
@@ -1,306 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 opc65c02.c                                */
-/*                                                                           */
-/*                       65C02 opcode description table                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* da65 */
-#include "handler.h"
-#include "opc65c02.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Descriptions for all opcodes */
-const OpcDesc OpcTable_65C02[256] = {
-    {   "brk",  1,  flNone,                   OH_Implicit              }, /* $00 */
-    {   "ora",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $01 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $02 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $03 */
-    {   "tsb",  2,  flUseLabel,               OH_Direct                }, /* $04 */
-    {   "ora",  2,  flUseLabel,               OH_Direct                }, /* $05 */
-    {   "asl",  2,  flUseLabel,               OH_Direct                }, /* $06 */
-    {   "rmb0", 2,  flUseLabel,               OH_Direct,               }, /* $07 */
-    {   "php",  1,  flNone,                   OH_Implicit              }, /* $08 */
-    {   "ora",  2,  flNone,                   OH_Immediate             }, /* $09 */
-    {   "asl",  1,  flNone,                   OH_Accumulator           }, /* $0a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $0b */
-    {   "tsb",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0c */
-    {   "ora",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0d */
-    {   "asl",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0e */
-    {   "bbr0", 3,  flUseLabel,               OH_BitBranch             }, /* $0f */
-    {   "bpl",  2,  flLabel,                  OH_Relative              }, /* $10 */
-    {   "ora",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $11 */
-    {   "ora",  2,  flUseLabel,               OH_DirectIndirect        }, /* $12 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $13 */
-    {   "trb",  2,  flUseLabel,               OH_Direct                }, /* $14 */
-    {   "ora",  2,  flUseLabel,               OH_DirectX               }, /* $15 */
-    {   "asl",  2,  flUseLabel,               OH_DirectX               }, /* $16 */
-    {   "rmb1", 2,  flUseLabel,               OH_Direct,               }, /* $17 */
-    {   "clc",  1,  flNone,                   OH_Implicit              }, /* $18 */
-    {   "ora",  3,  flUseLabel,               OH_AbsoluteY             }, /* $19 */
-    {   "inc",  1,  flNone,                   OH_Accumulator           }, /* $1a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $1b */
-    {   "trb",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $1c */
-    {   "ora",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $1d */
-    {   "asl",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $1e */
-    {   "bbr1", 3,  flUseLabel,               OH_BitBranch             }, /* $1f */
-    {   "jsr",  3,  flLabel,                  OH_Absolute              }, /* $20 */
-    {   "and",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $21 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $22 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $23 */
-    {   "bit",  2,  flUseLabel,               OH_Direct                }, /* $24 */
-    {   "and",  2,  flUseLabel,               OH_Direct                }, /* $25 */
-    {   "rol",  2,  flUseLabel,               OH_Direct                }, /* $26 */
-    {   "rmb2", 2,  flUseLabel,               OH_Direct,               }, /* $27 */
-    {   "plp",  1,  flNone,                   OH_Implicit              }, /* $28 */
-    {   "and",  2,  flNone,                   OH_Immediate             }, /* $29 */
-    {   "rol",  1,  flNone,                   OH_Accumulator           }, /* $2a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $2b */
-    {   "bit",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2c */
-    {   "and",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2d */
-    {   "rol",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2e */
-    {   "bbr2", 3,  flUseLabel,               OH_BitBranch             }, /* $2f */
-    {   "bmi",  2,  flLabel,                  OH_Relative              }, /* $30 */
-    {   "and",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $31 */
-    {   "and",  2,  flUseLabel,               OH_DirectIndirect,       }, /* $32 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $33 */
-    {   "bit",  2,  flUseLabel,               OH_DirectX               }, /* $34 */
-    {   "and",  2,  flUseLabel,               OH_DirectX               }, /* $35 */
-    {   "rol",  2,  flUseLabel,               OH_DirectX               }, /* $36 */
-    {   "rmb3", 2,  flUseLabel,               OH_Direct,               }, /* $37 */
-    {   "sec",  1,  flNone,                   OH_Implicit              }, /* $38 */
-    {   "and",  3,  flUseLabel,               OH_AbsoluteY             }, /* $39 */
-    {   "dec",  1,  flNone,                   OH_Accumulator           }, /* $3a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $3b */
-    {   "bit",  3,  flUseLabel,               OH_AbsoluteX             }, /* $3c */
-    {   "and",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $3d */
-    {   "rol",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $3e */
-    {   "bbr3", 3,  flUseLabel,               OH_BitBranch             }, /* $3f */
-    {   "rti",  1,  flNone,                   OH_Rts                   }, /* $40 */
-    {   "eor",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $41 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $42 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $43 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $44 */
-    {   "eor",  2,  flUseLabel,               OH_Direct                }, /* $45 */
-    {   "lsr",  2,  flUseLabel,               OH_Direct                }, /* $46 */
-    {   "rmb4", 2,  flUseLabel,               OH_Direct,               }, /* $47 */
-    {   "pha",  1,  flNone,                   OH_Implicit              }, /* $48 */
-    {   "eor",  2,  flNone,                   OH_Immediate             }, /* $49 */
-    {   "lsr",  1,  flNone,                   OH_Accumulator           }, /* $4a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $4b */
-    {   "jmp",  3,  flLabel,                  OH_JmpAbsolute           }, /* $4c */
-    {   "eor",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $4d */
-    {   "lsr",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $4e */
-    {   "bbr4", 3,  flUseLabel,               OH_BitBranch             }, /* $4f */
-    {   "bvc",  2,  flLabel,                  OH_Relative              }, /* $50 */
-    {   "eor",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $51 */
-    {   "eor",  2,  flUseLabel,               OH_DirectIndirect        }, /* $52 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $53 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $54 */
-    {   "eor",  2,  flUseLabel,               OH_DirectX               }, /* $55 */
-    {   "lsr",  2,  flUseLabel,               OH_DirectX               }, /* $56 */
-    {   "rmb5", 2,  flUseLabel,               OH_Direct,               }, /* $57 */
-    {   "cli",  1,  flNone,                   OH_Implicit              }, /* $58 */
-    {   "eor",  3,  flUseLabel,               OH_AbsoluteY             }, /* $59 */
-    {   "phy",  1,  flNone,                   OH_Implicit              }, /* $5a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $5b */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $5c */
-    {   "eor",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $5d */
-    {   "lsr",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $5e */
-    {   "bbr5", 3,  flUseLabel,               OH_BitBranch             }, /* $5f */
-    {   "rts",  1,  flNone,                   OH_Rts                   }, /* $60 */
-    {   "adc",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $61 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $62 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $63 */
-    {   "stz",  2,  flUseLabel,               OH_Direct                }, /* $64 */
-    {   "adc",  2,  flUseLabel,               OH_Direct                }, /* $65 */
-    {   "ror",  2,  flUseLabel,               OH_Direct                }, /* $66 */
-    {   "rmb6", 2,  flUseLabel,               OH_Direct,               }, /* $67 */
-    {   "pla",  1,  flNone,                   OH_Implicit              }, /* $68 */
-    {   "adc",  2,  flNone,                   OH_Immediate             }, /* $69 */
-    {   "ror",  1,  flNone,                   OH_Accumulator           }, /* $6a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $6b */
-    {   "jmp",  3,  flLabel,                  OH_JmpAbsoluteIndirect   }, /* $6c */
-    {   "adc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $6d */
-    {   "ror",  3,  flUseLabel,               OH_Absolute              }, /* $6e */
-    {   "bbr6", 3,  flUseLabel,               OH_BitBranch             }, /* $6f */
-    {   "bvs",  2,  flLabel,                  OH_Relative              }, /* $70 */
-    {   "adc",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $71 */
-    {   "adc",  2,  flUseLabel,               OH_DirectIndirect,       }, /* $72 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $73 */
-    {   "stz",  2,  flUseLabel,               OH_DirectX               }, /* $74 */
-    {   "adc",  2,  flUseLabel,               OH_DirectX               }, /* $75 */
-    {   "ror",  2,  flUseLabel,               OH_DirectX               }, /* $76 */
-    {   "rmb7", 2,  flUseLabel,               OH_Direct,               }, /* $77 */
-    {   "sei",  1,  flNone,                   OH_Implicit              }, /* $78 */
-    {   "adc",  3,  flUseLabel,               OH_AbsoluteY             }, /* $79 */
-    {   "ply",  1,  flNone,                   OH_Implicit              }, /* $7a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $7b */
-    {   "jmp",  3,  flLabel,                  OH_AbsoluteXIndirect     }, /* $7c */
-    {   "adc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $7d */
-    {   "ror",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $7e */
-    {   "bbr7", 3,  flUseLabel,               OH_BitBranch             }, /* $7f */
-    {   "bra",  2,  flLabel,                  OH_Relative              }, /* $80 */
-    {   "sta",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $81 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $82 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $83 */
-    {   "sty",  2,  flUseLabel,               OH_Direct                }, /* $84 */
-    {   "sta",  2,  flUseLabel,               OH_Direct                }, /* $85 */
-    {   "stx",  2,  flUseLabel,               OH_Direct                }, /* $86 */
-    {   "smb0", 2,  flUseLabel,               OH_Direct,               }, /* $87 */
-    {   "dey",  1,  flNone,                   OH_Implicit              }, /* $88 */
-    {   "bit",  2,  flNone,                   OH_Immediate             }, /* $89 */
-    {   "txa",  1,  flNone,                   OH_Implicit              }, /* $8a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $8b */
-    {   "sty",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8c */
-    {   "sta",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8d */
-    {   "stx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8e */
-    {   "bbs0", 3,  flUseLabel,               OH_BitBranch             }, /* $8f */
-    {   "bcc",  2,  flLabel,                  OH_Relative              }, /* $90 */
-    {   "sta",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $91 */
-    {   "sta",  2,  flUseLabel,               OH_DirectIndirect        }, /* $92 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $93 */
-    {   "sty",  2,  flUseLabel,               OH_DirectX               }, /* $94 */
-    {   "sta",  2,  flUseLabel,               OH_DirectX               }, /* $95 */
-    {   "stx",  2,  flUseLabel,               OH_DirectY               }, /* $96 */
-    {   "smb1", 2,  flUseLabel,               OH_Direct,               }, /* $97 */
-    {   "tya",  1,  flNone,                   OH_Implicit              }, /* $98 */
-    {   "sta",  3,  flUseLabel,               OH_AbsoluteY             }, /* $99 */
-    {   "txs",  1,  flNone,                   OH_Implicit              }, /* $9a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $9b */
-    {   "stz",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $9c */
-    {   "sta",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $9d */
-    {   "stz",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $9e */
-    {   "bbs1", 3,  flUseLabel,               OH_BitBranch             }, /* $9f */
-    {   "ldy",  2,  flNone,                   OH_Immediate             }, /* $a0 */
-    {   "lda",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $a1 */
-    {   "ldx",  2,  flNone,                   OH_Immediate             }, /* $a2 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $a3 */
-    {   "ldy",  2,  flUseLabel,               OH_Direct                }, /* $a4 */
-    {   "lda",  2,  flUseLabel,               OH_Direct                }, /* $a5 */
-    {   "ldx",  2,  flUseLabel,               OH_Direct                }, /* $a6 */
-    {   "smb2", 2,  flUseLabel,               OH_Direct,               }, /* $a7 */
-    {   "tay",  1,  flNone,                   OH_Implicit              }, /* $a8 */
-    {   "lda",  2,  flNone,                   OH_Immediate             }, /* $a9 */
-    {   "tax",  1,  flNone,                   OH_Implicit              }, /* $aa */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $ab */
-    {   "ldy",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ac */
-    {   "lda",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ad */
-    {   "ldx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ae */
-    {   "bbs2", 3,  flUseLabel,               OH_BitBranch             }, /* $af */
-    {   "bcs",  2,  flLabel,                  OH_Relative              }, /* $b0 */
-    {   "lda",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $b1 */
-    {   "lda",  2,  flUseLabel,               OH_DirectIndirect        }, /* $b2 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $b3 */
-    {   "ldy",  2,  flUseLabel,               OH_DirectX               }, /* $b4 */
-    {   "lda",  2,  flUseLabel,               OH_DirectX               }, /* $b5 */
-    {   "ldx",  2,  flUseLabel,               OH_DirectY               }, /* $b6 */
-    {   "smb3", 2,  flUseLabel,               OH_Direct,               }, /* $b7 */
-    {   "clv",  1,  flNone,                   OH_Implicit              }, /* $b8 */
-    {   "lda",  3,  flUseLabel,               OH_AbsoluteY             }, /* $b9 */
-    {   "tsx",  1,  flNone,                   OH_Implicit              }, /* $ba */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $bb */
-    {   "ldy",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $bc */
-    {   "lda",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $bd */
-    {   "ldx",  3,  flUseLabel|flAbsOverride, OH_AbsoluteY             }, /* $be */
-    {   "bbs3", 3,  flUseLabel,               OH_BitBranch             }, /* $bf */
-    {   "cpy",  2,  flNone,                   OH_Immediate             }, /* $c0 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $c1 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $c2 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $c3 */
-    {   "cpy",  2,  flUseLabel,               OH_Direct                }, /* $c4 */
-    {   "cmp",  2,  flUseLabel,               OH_Direct                }, /* $c5 */
-    {   "dec",  2,  flUseLabel,               OH_Direct                }, /* $c6 */
-    {   "smb4", 2,  flUseLabel,               OH_Direct,               }, /* $c7 */
-    {   "iny",  1,  flNone,                   OH_Implicit              }, /* $c8 */
-    {   "cmp",  2,  flNone,                   OH_Immediate             }, /* $c9 */
-    {   "dex",  1,  flNone,                   OH_Implicit              }, /* $ca */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $cb */
-    {   "cpy",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $cc */
-    {   "cmp",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $cd */
-    {   "dec",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ce */
-    {   "bbs4", 3,  flUseLabel,               OH_BitBranch             }, /* $cf */
-    {   "bne",  2,  flLabel,                  OH_Relative              }, /* $d0 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $d1 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectIndirect        }, /* $d2 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $d3 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $d4 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectX               }, /* $d5 */
-    {   "dec",  2,  flUseLabel,               OH_DirectX               }, /* $d6 */
-    {   "smb5", 2,  flUseLabel,               OH_Direct,               }, /* $d7 */
-    {   "cld",  1,  flNone,                   OH_Implicit              }, /* $d8 */
-    {   "cmp",  3,  flUseLabel,               OH_AbsoluteY             }, /* $d9 */
-    {   "phx",  1,  flNone,                   OH_Implicit              }, /* $da */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $db */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $dc */
-    {   "cmp",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $dd */
-    {   "dec",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $de */
-    {   "bbs5", 3,  flUseLabel,               OH_BitBranch             }, /* $df */
-    {   "cpx",  2,  flNone,                   OH_Immediate             }, /* $e0 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $e1 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $e2 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $e3 */
-    {   "cpx",  2,  flUseLabel,               OH_Direct                }, /* $e4 */
-    {   "sbc",  2,  flUseLabel,               OH_Direct                }, /* $e5 */
-    {   "inc",  2,  flUseLabel,               OH_Direct                }, /* $e6 */
-    {   "smb6", 2,  flUseLabel,               OH_Direct,               }, /* $e7 */
-    {   "inx",  1,  flNone,                   OH_Implicit              }, /* $e8 */
-    {   "sbc",  2,  flNone,                   OH_Immediate             }, /* $e9 */
-    {   "nop",  1,  flNone,                   OH_Implicit              }, /* $ea */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $eb */
-    {   "cpx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ec */
-    {   "sbc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ed */
-    {   "inc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ee */
-    {   "bbs6", 3,  flUseLabel,               OH_BitBranch             }, /* $ef */
-    {   "beq",  2,  flLabel,                  OH_Relative              }, /* $f0 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $f1 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectIndirect        }, /* $f2 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $f3 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $f4 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectX               }, /* $f5 */
-    {   "inc",  2,  flUseLabel,               OH_DirectX               }, /* $f6 */
-    {   "smb7", 2,  flUseLabel,               OH_Direct,               }, /* $f7 */
-    {   "sed",  1,  flNone,                   OH_Implicit              }, /* $f8 */
-    {   "sbc",  3,  flUseLabel,               OH_AbsoluteY             }, /* $f9 */
-    {   "plx",  1,  flNone,                   OH_Implicit              }, /* $fa */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $fb */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $fc */
-    {   "sbc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $fd */
-    {   "inc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $fe */
-    {   "bbs7", 3,  flUseLabel,               OH_BitBranch             }, /* $ff */
-};
diff --git a/src/da65/opc65c02.h b/src/da65/opc65c02.h
deleted file mode 100644 (file)
index 38138aa..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 opc65c02.h                                */
-/*                                                                           */
-/*                       65C02 opcode description table                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OPC65C02_H
-#define OPC65C02_H
-
-
-
-#include "opcdesc.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Descriptions for all opcodes */
-extern const OpcDesc OpcTable_65C02[256];
-
-
-
-/* End of opc65c02.h */
-
-#endif
diff --git a/src/da65/opc65sc02.c b/src/da65/opc65sc02.c
deleted file mode 100644 (file)
index 90549d0..0000000
+++ /dev/null
@@ -1,306 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                opc65sc02.c                                */
-/*                                                                           */
-/*                      65SC02 opcode description table                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* da65 */
-#include "handler.h"
-#include "opc65sc02.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Descriptions for all opcodes */
-const OpcDesc OpcTable_65SC02[256] = {
-    {   "brk",  1,  flNone,                   OH_Implicit              }, /* $00 */
-    {   "ora",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $01 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $02 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $03 */
-    {   "tsb",  2,  flUseLabel,               OH_Direct                }, /* $04 */
-    {   "ora",  2,  flUseLabel,               OH_Direct                }, /* $05 */
-    {   "asl",  2,  flUseLabel,               OH_Direct                }, /* $06 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $07 */
-    {   "php",  1,  flNone,                   OH_Implicit              }, /* $08 */
-    {   "ora",  2,  flNone,                   OH_Immediate             }, /* $09 */
-    {   "asl",  1,  flNone,                   OH_Accumulator           }, /* $0a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $0b */
-    {   "tsb",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0c */
-    {   "ora",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0d */
-    {   "asl",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $0f */
-    {   "bpl",  2,  flLabel,                  OH_Relative              }, /* $10 */
-    {   "ora",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $11 */
-    {   "ora",  2,  flUseLabel,               OH_DirectIndirect        }, /* $12 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $13 */
-    {   "trb",  2,  flUseLabel,               OH_Direct                }, /* $14 */
-    {   "ora",  2,  flUseLabel,               OH_DirectX               }, /* $15 */
-    {   "asl",  2,  flUseLabel,               OH_DirectX               }, /* $16 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $17 */
-    {   "clc",  1,  flNone,                   OH_Implicit              }, /* $18 */
-    {   "ora",  3,  flUseLabel,               OH_AbsoluteY             }, /* $19 */
-    {   "inc",  1,  flNone,                   OH_Accumulator           }, /* $1a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $1b */
-    {   "trb",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $1c */
-    {   "ora",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $1d */
-    {   "asl",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $1e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $1f */
-    {   "jsr",  3,  flLabel,                  OH_Absolute              }, /* $20 */
-    {   "and",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $21 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $22 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $23 */
-    {   "bit",  2,  flUseLabel,               OH_Direct                }, /* $24 */
-    {   "and",  2,  flUseLabel,               OH_Direct                }, /* $25 */
-    {   "rol",  2,  flUseLabel,               OH_Direct                }, /* $26 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $27 */
-    {   "plp",  1,  flNone,                   OH_Implicit              }, /* $28 */
-    {   "and",  2,  flNone,                   OH_Immediate             }, /* $29 */
-    {   "rol",  1,  flNone,                   OH_Accumulator           }, /* $2a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $2b */
-    {   "bit",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2c */
-    {   "and",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2d */
-    {   "rol",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $2f */
-    {   "bmi",  2,  flLabel,                  OH_Relative              }, /* $30 */
-    {   "and",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $31 */
-    {   "and",  2,  flUseLabel,               OH_DirectIndirect,       }, /* $32 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $33 */
-    {   "bit",  2,  flUseLabel,               OH_DirectX               }, /* $34 */
-    {   "and",  2,  flUseLabel,               OH_DirectX               }, /* $35 */
-    {   "rol",  2,  flUseLabel,               OH_DirectX               }, /* $36 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $37 */
-    {   "sec",  1,  flNone,                   OH_Implicit              }, /* $38 */
-    {   "and",  3,  flUseLabel,               OH_AbsoluteY             }, /* $39 */
-    {   "dec",  1,  flNone,                   OH_Accumulator           }, /* $3a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $3b */
-    {   "bit",  3,  flUseLabel,               OH_AbsoluteX             }, /* $3c */
-    {   "and",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $3d */
-    {   "rol",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $3e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $3f */
-    {   "rti",  1,  flNone,                   OH_Rts                   }, /* $40 */
-    {   "eor",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $41 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $42 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $43 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $44 */
-    {   "eor",  2,  flUseLabel,               OH_Direct                }, /* $45 */
-    {   "lsr",  2,  flUseLabel,               OH_Direct                }, /* $46 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $47 */
-    {   "pha",  1,  flNone,                   OH_Implicit              }, /* $48 */
-    {   "eor",  2,  flNone,                   OH_Immediate             }, /* $49 */
-    {   "lsr",  1,  flNone,                   OH_Accumulator           }, /* $4a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $4b */
-    {   "jmp",  3,  flLabel,                  OH_JmpAbsolute           }, /* $4c */
-    {   "eor",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $4d */
-    {   "lsr",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $4e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $4f */
-    {   "bvc",  2,  flLabel,                  OH_Relative              }, /* $50 */
-    {   "eor",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $51 */
-    {   "eor",  2,  flUseLabel,               OH_DirectIndirect        }, /* $52 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $53 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $54 */
-    {   "eor",  2,  flUseLabel,               OH_DirectX               }, /* $55 */
-    {   "lsr",  2,  flUseLabel,               OH_DirectX               }, /* $56 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $57 */
-    {   "cli",  1,  flNone,                   OH_Implicit              }, /* $58 */
-    {   "eor",  3,  flUseLabel,               OH_AbsoluteY             }, /* $59 */
-    {   "phy",  1,  flNone,                   OH_Implicit              }, /* $5a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $5b */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $5c */
-    {   "eor",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $5d */
-    {   "lsr",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $5e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $5f */
-    {   "rts",  1,  flNone,                   OH_Rts                   }, /* $60 */
-    {   "adc",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $61 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $62 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $63 */
-    {   "stz",  2,  flUseLabel,               OH_Direct                }, /* $64 */
-    {   "adc",  2,  flUseLabel,               OH_Direct                }, /* $65 */
-    {   "ror",  2,  flUseLabel,               OH_Direct                }, /* $66 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $67 */
-    {   "pla",  1,  flNone,                   OH_Implicit              }, /* $68 */
-    {   "adc",  2,  flNone,                   OH_Immediate             }, /* $69 */
-    {   "ror",  1,  flNone,                   OH_Accumulator           }, /* $6a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $6b */
-    {   "jmp",  3,  flLabel,                  OH_JmpAbsoluteIndirect   }, /* $6c */
-    {   "adc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $6d */
-    {   "ror",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $6e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $6f */
-    {   "bvs",  2,  flLabel,                  OH_Relative              }, /* $70 */
-    {   "adc",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $71 */
-    {   "adc",  2,  flUseLabel,               OH_DirectIndirect,       }, /* $72 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $73 */
-    {   "stz",  2,  flUseLabel,               OH_DirectX               }, /* $74 */
-    {   "adc",  2,  flUseLabel,               OH_DirectX               }, /* $75 */
-    {   "ror",  2,  flUseLabel,               OH_DirectX               }, /* $76 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $77 */
-    {   "sei",  1,  flNone,                   OH_Implicit              }, /* $78 */
-    {   "adc",  3,  flUseLabel,               OH_AbsoluteY             }, /* $79 */
-    {   "ply",  1,  flNone,                   OH_Implicit              }, /* $7a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $7b */
-    {   "jmp",  3,  flLabel,                  OH_AbsoluteXIndirect     }, /* $7c */
-    {   "adc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $7d */
-    {   "ror",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $7e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $7f */
-    {   "bra",  2,  flLabel,                  OH_Relative              }, /* $80 */
-    {   "sta",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $81 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $82 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $83 */
-    {   "sty",  2,  flUseLabel,               OH_Direct                }, /* $84 */
-    {   "sta",  2,  flUseLabel,               OH_Direct                }, /* $85 */
-    {   "stx",  2,  flUseLabel,               OH_Direct                }, /* $86 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $87 */
-    {   "dey",  1,  flNone,                   OH_Implicit              }, /* $88 */
-    {   "bit",  2,  flNone,                   OH_Immediate             }, /* $89 */
-    {   "txa",  1,  flNone,                   OH_Implicit              }, /* $8a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $8b */
-    {   "sty",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8c */
-    {   "sta",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8d */
-    {   "stx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $8f */
-    {   "bcc",  2,  flLabel,                  OH_Relative              }, /* $90 */
-    {   "sta",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $91 */
-    {   "sta",  2,  flUseLabel,               OH_DirectIndirect        }, /* $92 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $93 */
-    {   "sty",  2,  flUseLabel,               OH_DirectX               }, /* $94 */
-    {   "sta",  2,  flUseLabel,               OH_DirectX               }, /* $95 */
-    {   "stx",  2,  flUseLabel,               OH_DirectY               }, /* $96 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $97 */
-    {   "tya",  1,  flNone,                   OH_Implicit              }, /* $98 */
-    {   "sta",  3,  flUseLabel,               OH_AbsoluteY             }, /* $99 */
-    {   "txs",  1,  flNone,                   OH_Implicit              }, /* $9a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $9b */
-    {   "stz",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $9c */
-    {   "sta",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $9d */
-    {   "stz",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $9e */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $9f */
-    {   "ldy",  2,  flNone,                   OH_Immediate             }, /* $a0 */
-    {   "lda",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $a1 */
-    {   "ldx",  2,  flNone,                   OH_Immediate             }, /* $a2 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $a3 */
-    {   "ldy",  2,  flUseLabel,               OH_Direct                }, /* $a4 */
-    {   "lda",  2,  flUseLabel,               OH_Direct                }, /* $a5 */
-    {   "ldx",  2,  flUseLabel,               OH_Direct                }, /* $a6 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $a7 */
-    {   "tay",  1,  flNone,                   OH_Implicit              }, /* $a8 */
-    {   "lda",  2,  flNone,                   OH_Immediate             }, /* $a9 */
-    {   "tax",  1,  flNone,                   OH_Implicit              }, /* $aa */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $ab */
-    {   "ldy",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ac */
-    {   "lda",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ad */
-    {   "ldx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ae */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $af */
-    {   "bcs",  2,  flLabel,                  OH_Relative              }, /* $b0 */
-    {   "lda",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $b1 */
-    {   "lda",  2,  flUseLabel,               OH_DirectIndirect        }, /* $b2 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $b3 */
-    {   "ldy",  2,  flUseLabel,               OH_DirectX               }, /* $b4 */
-    {   "lda",  2,  flUseLabel,               OH_DirectX               }, /* $b5 */
-    {   "ldx",  2,  flUseLabel,               OH_DirectY               }, /* $b6 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $b7 */
-    {   "clv",  1,  flNone,                   OH_Implicit              }, /* $b8 */
-    {   "lda",  3,  flUseLabel,               OH_AbsoluteY             }, /* $b9 */
-    {   "tsx",  1,  flNone,                   OH_Implicit              }, /* $ba */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $bb */
-    {   "ldy",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $bc */
-    {   "lda",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $bd */
-    {   "ldx",  3,  flUseLabel|flAbsOverride, OH_AbsoluteY             }, /* $be */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $bf */
-    {   "cpy",  2,  flNone,                   OH_Immediate             }, /* $c0 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $c1 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $c2 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $c3 */
-    {   "cpy",  2,  flUseLabel,               OH_Direct                }, /* $c4 */
-    {   "cmp",  2,  flUseLabel,               OH_Direct                }, /* $c5 */
-    {   "dec",  2,  flUseLabel,               OH_Direct                }, /* $c6 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $c7 */
-    {   "iny",  1,  flNone,                   OH_Implicit              }, /* $c8 */
-    {   "cmp",  2,  flNone,                   OH_Immediate             }, /* $c9 */
-    {   "dex",  1,  flNone,                   OH_Implicit              }, /* $ca */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $cb */
-    {   "cpy",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $cc */
-    {   "cmp",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $cd */
-    {   "dec",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ce */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $cf */
-    {   "bne",  2,  flLabel,                  OH_Relative              }, /* $d0 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $d1 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectIndirect        }, /* $d2 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $d3 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $d4 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectX               }, /* $d5 */
-    {   "dec",  2,  flUseLabel,               OH_DirectX               }, /* $d6 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $d7 */
-    {   "cld",  1,  flNone,                   OH_Implicit              }, /* $d8 */
-    {   "cmp",  3,  flUseLabel,               OH_AbsoluteY             }, /* $d9 */
-    {   "phx",  1,  flNone,                   OH_Implicit              }, /* $da */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $db */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $dc */
-    {   "cmp",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $dd */
-    {   "dec",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $de */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $df */
-    {   "cpx",  2,  flNone,                   OH_Immediate             }, /* $e0 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $e1 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $e2 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $e3 */
-    {   "cpx",  2,  flUseLabel,               OH_Direct                }, /* $e4 */
-    {   "sbc",  2,  flUseLabel,               OH_Direct                }, /* $e5 */
-    {   "inc",  2,  flUseLabel,               OH_Direct                }, /* $e6 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $e7 */
-    {   "inx",  1,  flNone,                   OH_Implicit              }, /* $e8 */
-    {   "sbc",  2,  flNone,                   OH_Immediate             }, /* $e9 */
-    {   "nop",  1,  flNone,                   OH_Implicit              }, /* $ea */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $eb */
-    {   "cpx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ec */
-    {   "sbc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ed */
-    {   "inc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ee */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $ef */
-    {   "beq",  2,  flLabel,                  OH_Relative              }, /* $f0 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $f1 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectIndirect        }, /* $f2 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $f3 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $f4 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectX               }, /* $f5 */
-    {   "inc",  2,  flUseLabel,               OH_DirectX               }, /* $f6 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $f7 */
-    {   "sed",  1,  flNone,                   OH_Implicit              }, /* $f8 */
-    {   "sbc",  3,  flUseLabel,               OH_AbsoluteY             }, /* $f9 */
-    {   "plx",  1,  flNone,                   OH_Implicit              }, /* $fa */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $fb */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $fc */
-    {   "sbc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $fd */
-    {   "inc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $fe */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $ff */
-};
diff --git a/src/da65/opc65sc02.h b/src/da65/opc65sc02.h
deleted file mode 100644 (file)
index 391f425..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                opc65sc02.h                                */
-/*                                                                           */
-/*                      65SC02 opcode description table                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OPC65SC02_H
-#define OPC65SC02_H
-
-
-
-#include "opcdesc.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Descriptions for all opcodes */
-extern const OpcDesc OpcTable_65SC02[256];
-
-
-
-/* End of opc65sc02.h */
-
-#endif
diff --git a/src/da65/opcdesc.h b/src/da65/opcdesc.h
deleted file mode 100644 (file)
index 7913131..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 opcdesc.h                                 */
-/*                                                                           */
-/*                  Disassembler description for one opcode                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OPCDESC_H
-#define OPCDESC_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Constants for Flags */
-enum {
-    flNone          = 0x00,                     /* No flags given */
-    flNoLabel       = 0x00,                     /* Don't use a label */
-    flGenLabel      = 0x01,                     /* Generate a label */
-    flUseLabel      = 0x02,                     /* Use a label if there is one */
-    flLabel         = flUseLabel|flGenLabel,    /* Generate and use a label */
-    flIllegal       = 0x10,                     /* Illegal instruction */
-    flAbsOverride   = 0x20,                     /* Need a: override */
-    flFarOverride   = 0x40                      /* Need f: override */
-};
-
-/* Forward/typedef for struct OpcDesc */
-typedef struct OpcDesc OpcDesc;
-
-/* Type of pointer to a function that handles opcode output */
-typedef void (*OpcHandler) (const OpcDesc*);
-
-/* Description for one opcode */
-struct OpcDesc {
-    char                Mnemo [6];      /* Mnemonic */
-    unsigned char       Size;           /* Size of this command */
-    unsigned char       Flags;          /* Flags */
-    OpcHandler          Handler;        /* Handler routine */
-};
-
-
-
-/* End of opcdesc.h */
-
-#endif
diff --git a/src/da65/opchuc6280.c b/src/da65/opchuc6280.c
deleted file mode 100644 (file)
index df6ba58..0000000
+++ /dev/null
@@ -1,306 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                opchuc6280.c                               */
-/*                                                                           */
-/*                     HuC6280 opcode description table                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* da65 */
-#include "handler.h"
-#include "opchuc6280.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Descriptions for all opcodes */
-const OpcDesc OpcTable_HuC6280[256] = {
-    {   "brk",  1,  flNone,                   OH_Implicit              }, /* $00 */
-    {   "ora",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $01 */
-    {   "sxy",  1,  flNone,                   OH_Implicit,             }, /* $02 */
-    {   "st0",  2,  flNone,                   OH_Immediate,            }, /* $03 */
-    {   "tsb",  2,  flUseLabel,               OH_Direct                }, /* $04 */
-    {   "ora",  2,  flUseLabel,               OH_Direct                }, /* $05 */
-    {   "asl",  2,  flUseLabel,               OH_Direct                }, /* $06 */
-    {   "rmb0", 1,  flUseLabel,               OH_Direct,               }, /* $07 */
-    {   "php",  1,  flNone,                   OH_Implicit              }, /* $08 */
-    {   "ora",  2,  flNone,                   OH_Immediate             }, /* $09 */
-    {   "asl",  1,  flNone,                   OH_Accumulator           }, /* $0a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $0b */
-    {   "tsb",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0c */
-    {   "ora",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0d */
-    {   "asl",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0e */
-    {   "bbr0", 3,  flUseLabel,               OH_BitBranch             }, /* $0f */
-    {   "bpl",  2,  flLabel,                  OH_Relative              }, /* $10 */
-    {   "ora",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $11 */
-    {   "ora",  2,  flUseLabel,               OH_DirectIndirect        }, /* $12 */
-    {   "st1",  2,  flNone,                   OH_Immediate,            }, /* $13 */
-    {   "trb",  2,  flUseLabel,               OH_Direct                }, /* $14 */
-    {   "ora",  2,  flUseLabel,               OH_DirectX               }, /* $15 */
-    {   "asl",  2,  flUseLabel,               OH_DirectX               }, /* $16 */
-    {   "rmb1", 1,  flUseLabel,               OH_Direct,               }, /* $17 */
-    {   "clc",  1,  flNone,                   OH_Implicit              }, /* $18 */
-    {   "ora",  3,  flUseLabel,               OH_AbsoluteY             }, /* $19 */
-    {   "inc",  1,  flNone,                   OH_Accumulator           }, /* $1a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $1b */
-    {   "trb",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $1c */
-    {   "ora",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $1d */
-    {   "asl",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $1e */
-    {   "bbr1", 3,  flUseLabel,               OH_BitBranch             }, /* $1f */
-    {   "jsr",  3,  flLabel,                  OH_Absolute              }, /* $20 */
-    {   "and",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $21 */
-    {   "sax",  1,  flNone,                   OH_Implicit,             }, /* $22 */
-    {   "st2",  2,  flNone,                   OH_Immediate,            }, /* $23 */
-    {   "bit",  2,  flUseLabel,               OH_Direct                }, /* $24 */
-    {   "and",  2,  flUseLabel,               OH_Direct                }, /* $25 */
-    {   "rol",  2,  flUseLabel,               OH_Direct                }, /* $26 */
-    {   "rmb2", 1,  flUseLabel,               OH_Direct,               }, /* $27 */
-    {   "plp",  1,  flNone,                   OH_Implicit              }, /* $28 */
-    {   "and",  2,  flNone,                   OH_Immediate             }, /* $29 */
-    {   "rol",  1,  flNone,                   OH_Accumulator           }, /* $2a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $2b */
-    {   "bit",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2c */
-    {   "and",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2d */
-    {   "rol",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2e */
-    {   "bbr2", 3,  flUseLabel,               OH_BitBranch             }, /* $2f */
-    {   "bmi",  2,  flLabel,                  OH_Relative              }, /* $30 */
-    {   "and",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $31 */
-    {   "and",  2,  flUseLabel,               OH_DirectIndirect,       }, /* $32 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $33 */
-    {   "bit",  2,  flUseLabel,               OH_DirectX               }, /* $34 */
-    {   "and",  2,  flUseLabel,               OH_DirectX               }, /* $35 */
-    {   "rol",  2,  flUseLabel,               OH_DirectX               }, /* $36 */
-    {   "rmb3", 1,  flUseLabel,               OH_Direct,               }, /* $37 */
-    {   "sec",  1,  flNone,                   OH_Implicit              }, /* $38 */
-    {   "and",  3,  flUseLabel,               OH_AbsoluteY             }, /* $39 */
-    {   "dec",  1,  flNone,                   OH_Accumulator           }, /* $3a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $3b */
-    {   "bit",  3,  flUseLabel,               OH_AbsoluteX             }, /* $3c */
-    {   "and",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $3d */
-    {   "rol",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $3e */
-    {   "bbr3", 3,  flUseLabel,               OH_BitBranch             }, /* $3f */
-    {   "rti",  1,  flNone,                   OH_Rts                   }, /* $40 */
-    {   "eor",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $41 */
-    {   "say",  1,  flNone,                   OH_Implicit,             }, /* $42 */
-    {   "tmai", 2,  flNone,                   OH_Immediate,            }, /* $43 */
-    {   "bsr",  2,  flLabel,                  OH_Relative,             }, /* $44 */
-    {   "eor",  2,  flUseLabel,               OH_Direct                }, /* $45 */
-    {   "lsr",  2,  flUseLabel,               OH_Direct                }, /* $46 */
-    {   "rmb4", 1,  flUseLabel,               OH_Direct,               }, /* $47 */
-    {   "pha",  1,  flNone,                   OH_Implicit              }, /* $48 */
-    {   "eor",  2,  flNone,                   OH_Immediate             }, /* $49 */
-    {   "lsr",  1,  flNone,                   OH_Accumulator           }, /* $4a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $4b */
-    {   "jmp",  3,  flLabel,                  OH_JmpAbsolute           }, /* $4c */
-    {   "eor",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $4d */
-    {   "lsr",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $4e */
-    {   "bbr4", 3,  flUseLabel,               OH_BitBranch             }, /* $4f */
-    {   "bvc",  2,  flLabel,                  OH_Relative              }, /* $50 */
-    {   "eor",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $51 */
-    {   "eor",  2,  flUseLabel,               OH_DirectIndirect        }, /* $52 */
-    {   "tami", 2,  flNone,                   OH_Immediate,            }, /* $53 */
-    {   "csl",  1,  flNone,                   OH_Implicit,             }, /* $54 */
-    {   "eor",  2,  flUseLabel,               OH_DirectX               }, /* $55 */
-    {   "lsr",  2,  flUseLabel,               OH_DirectX               }, /* $56 */
-    {   "rmb5", 1,  flUseLabel,               OH_Direct,               }, /* $57 */
-    {   "cli",  1,  flNone,                   OH_Implicit              }, /* $58 */
-    {   "eor",  3,  flUseLabel,               OH_AbsoluteY             }, /* $59 */
-    {   "phy",  1,  flNone,                   OH_Implicit              }, /* $5a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $5b */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $5c */
-    {   "eor",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $5d */
-    {   "lsr",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $5e */
-    {   "bbr5", 3,  flUseLabel,               OH_BitBranch             }, /* $5f */
-    {   "rts",  1,  flNone,                   OH_Rts                   }, /* $60 */
-    {   "adc",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $61 */
-    {   "cla",  1,  flNone,                   OH_Implicit,             }, /* $62 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $63 */
-    {   "stz",  2,  flUseLabel,               OH_Direct                }, /* $64 */
-    {   "adc",  2,  flUseLabel,               OH_Direct                }, /* $65 */
-    {   "ror",  2,  flUseLabel,               OH_Direct                }, /* $66 */
-    {   "rmb6", 1,  flUseLabel,               OH_Direct,               }, /* $67 */
-    {   "pla",  1,  flNone,                   OH_Implicit              }, /* $68 */
-    {   "adc",  2,  flNone,                   OH_Immediate             }, /* $69 */
-    {   "ror",  1,  flNone,                   OH_Accumulator           }, /* $6a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $6b */
-    {   "jmp",  3,  flLabel,                  OH_JmpAbsoluteIndirect   }, /* $6c */
-    {   "adc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $6d */
-    {   "ror",  3,  flUseLabel,               OH_Absolute              }, /* $6e */
-    {   "bbr6", 3,  flUseLabel,               OH_BitBranch             }, /* $6f */
-    {   "bvs",  2,  flLabel,                  OH_Relative              }, /* $70 */
-    {   "adc",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $71 */
-    {   "adc",  2,  flUseLabel,               OH_DirectIndirect,       }, /* $72 */
-    {   "tii",  7,  flNone,                   OH_BlockMove,            }, /* $73 */
-    {   "stz",  2,  flUseLabel,               OH_DirectX               }, /* $74 */
-    {   "adc",  2,  flUseLabel,               OH_DirectX               }, /* $75 */
-    {   "ror",  2,  flUseLabel,               OH_DirectX               }, /* $76 */
-    {   "rmb7", 1,  flUseLabel,               OH_Direct,               }, /* $77 */
-    {   "sei",  1,  flNone,                   OH_Implicit              }, /* $78 */
-    {   "adc",  3,  flUseLabel,               OH_AbsoluteY             }, /* $79 */
-    {   "ply",  1,  flNone,                   OH_Implicit              }, /* $7a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $7b */
-    {   "jmp",  3,  flLabel,                  OH_AbsoluteXIndirect     }, /* $7c */
-    {   "adc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $7d */
-    {   "ror",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $7e */
-    {   "bbr7", 3,  flUseLabel,               OH_BitBranch             }, /* $7f */
-    {   "bra",  2,  flLabel,                  OH_Relative              }, /* $80 */
-    {   "sta",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $81 */
-    {   "clx",  1,  flNone,                   OH_Implicit,             }, /* $82 */
-    {   "tst",  3,  flNone,                   OH_ImmediateDirect,      }, /* $83 */
-    {   "sty",  2,  flUseLabel,               OH_Direct                }, /* $84 */
-    {   "sta",  2,  flUseLabel,               OH_Direct                }, /* $85 */
-    {   "stx",  2,  flUseLabel,               OH_Direct                }, /* $86 */
-    {   "smb0", 1,  flUseLabel,               OH_Direct,               }, /* $87 */
-    {   "dey",  1,  flNone,                   OH_Implicit              }, /* $88 */
-    {   "bit",  2,  flNone,                   OH_Immediate             }, /* $89 */
-    {   "txa",  1,  flNone,                   OH_Implicit              }, /* $8a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $8b */
-    {   "sty",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8c */
-    {   "sta",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8d */
-    {   "stx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8e */
-    {   "bbs0", 3,  flUseLabel,               OH_BitBranch             }, /* $8f */
-    {   "bcc",  2,  flLabel,                  OH_Relative              }, /* $90 */
-    {   "sta",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $91 */
-    {   "sta",  2,  flUseLabel,               OH_DirectIndirect        }, /* $92 */
-    {   "tst",  4,  flNone,                   OH_ImmediateAbsolute,    }, /* $93 */
-    {   "sty",  2,  flUseLabel,               OH_DirectX               }, /* $94 */
-    {   "sta",  2,  flUseLabel,               OH_DirectX               }, /* $95 */
-    {   "stx",  2,  flUseLabel,               OH_DirectY               }, /* $96 */
-    {   "smb1", 1,  flUseLabel,               OH_Direct,               }, /* $97 */
-    {   "tya",  1,  flNone,                   OH_Implicit              }, /* $98 */
-    {   "sta",  3,  flUseLabel,               OH_AbsoluteY             }, /* $99 */
-    {   "txs",  1,  flNone,                   OH_Implicit              }, /* $9a */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $9b */
-    {   "stz",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $9c */
-    {   "sta",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $9d */
-    {   "stz",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $9e */
-    {   "bbs1", 3,  flUseLabel,               OH_BitBranch             }, /* $9f */
-    {   "ldy",  2,  flNone,                   OH_Immediate             }, /* $a0 */
-    {   "lda",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $a1 */
-    {   "ldx",  2,  flNone,                   OH_Immediate             }, /* $a2 */
-    {   "tst",  3,  flNone,                   OH_ImmediateDirectX,     }, /* $a3 */
-    {   "ldy",  2,  flUseLabel,               OH_Direct                }, /* $a4 */
-    {   "lda",  2,  flUseLabel,               OH_Direct                }, /* $a5 */
-    {   "ldx",  2,  flUseLabel,               OH_Direct                }, /* $a6 */
-    {   "smb2", 1,  flUseLabel,               OH_Direct,               }, /* $a7 */
-    {   "tay",  1,  flNone,                   OH_Implicit              }, /* $a8 */
-    {   "lda",  2,  flNone,                   OH_Immediate             }, /* $a9 */
-    {   "tax",  1,  flNone,                   OH_Implicit              }, /* $aa */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $ab */
-    {   "ldy",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ac */
-    {   "lda",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ad */
-    {   "ldx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ae */
-    {   "bbs2", 3,  flUseLabel,               OH_BitBranch             }, /* $af */
-    {   "bcs",  2,  flLabel,                  OH_Relative              }, /* $b0 */
-    {   "lda",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $b1 */
-    {   "lda",  2,  flUseLabel,               OH_DirectIndirect        }, /* $b2 */
-    {   "tst",  4,  flNone,                   OH_ImmediateAbsoluteX,   }, /* $b3 */
-    {   "ldy",  2,  flUseLabel,               OH_DirectX               }, /* $b4 */
-    {   "lda",  2,  flUseLabel,               OH_DirectX               }, /* $b5 */
-    {   "ldx",  2,  flUseLabel,               OH_DirectY               }, /* $b6 */
-    {   "smb3", 1,  flUseLabel,               OH_Direct,               }, /* $b7 */
-    {   "clv",  1,  flNone,                   OH_Implicit              }, /* $b8 */
-    {   "lda",  3,  flUseLabel,               OH_AbsoluteY             }, /* $b9 */
-    {   "tsx",  1,  flNone,                   OH_Implicit              }, /* $ba */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $bb */
-    {   "ldy",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $bc */
-    {   "lda",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $bd */
-    {   "ldx",  3,  flUseLabel|flAbsOverride, OH_AbsoluteY             }, /* $be */
-    {   "bbs3", 3,  flUseLabel,               OH_BitBranch             }, /* $bf */
-    {   "cpy",  2,  flNone,                   OH_Immediate             }, /* $c0 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $c1 */
-    {   "cly",  1,  flNone,                   OH_Implicit,             }, /* $c2 */
-    {   "tdd",  7,  flNone,                   OH_BlockMove,            }, /* $c3 */
-    {   "cpy",  2,  flUseLabel,               OH_Direct                }, /* $c4 */
-    {   "cmp",  2,  flUseLabel,               OH_Direct                }, /* $c5 */
-    {   "dec",  2,  flUseLabel,               OH_Direct                }, /* $c6 */
-    {   "smb4", 1,  flUseLabel,               OH_Direct,               }, /* $c7 */
-    {   "iny",  1,  flNone,                   OH_Implicit              }, /* $c8 */
-    {   "cmp",  2,  flNone,                   OH_Immediate             }, /* $c9 */
-    {   "dex",  1,  flNone,                   OH_Implicit              }, /* $ca */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $cb */
-    {   "cpy",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $cc */
-    {   "cmp",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $cd */
-    {   "dec",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ce */
-    {   "bbs4", 3,  flUseLabel,               OH_BitBranch             }, /* $cf */
-    {   "bne",  2,  flLabel,                  OH_Relative              }, /* $d0 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $d1 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectIndirect        }, /* $d2 */
-    {   "tin",  7,  flNone,                   OH_BlockMove,            }, /* $d3 */
-    {   "csh",  1,  flNone,                   OH_Implicit,             }, /* $d4 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectX               }, /* $d5 */
-    {   "dec",  2,  flUseLabel,               OH_DirectX               }, /* $d6 */
-    {   "smb5", 1,  flUseLabel,               OH_Direct,               }, /* $d7 */
-    {   "cld",  1,  flNone,                   OH_Implicit              }, /* $d8 */
-    {   "cmp",  3,  flUseLabel,               OH_AbsoluteY             }, /* $d9 */
-    {   "phx",  1,  flNone,                   OH_Implicit              }, /* $da */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $db */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $dc */
-    {   "cmp",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $dd */
-    {   "dec",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $de */
-    {   "bbs5", 3,  flUseLabel,               OH_BitBranch             }, /* $df */
-    {   "cpx",  2,  flNone,                   OH_Immediate             }, /* $e0 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $e1 */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $e2 */
-    {   "tia",  7,  flNone,                   OH_BlockMove,            }, /* $e3 */
-    {   "cpx",  2,  flUseLabel,               OH_Direct                }, /* $e4 */
-    {   "sbc",  2,  flUseLabel,               OH_Direct                }, /* $e5 */
-    {   "inc",  2,  flUseLabel,               OH_Direct                }, /* $e6 */
-    {   "smb6", 1,  flUseLabel,               OH_Direct,               }, /* $e7 */
-    {   "inx",  1,  flNone,                   OH_Implicit              }, /* $e8 */
-    {   "sbc",  2,  flNone,                   OH_Immediate             }, /* $e9 */
-    {   "nop",  1,  flNone,                   OH_Implicit              }, /* $ea */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $eb */
-    {   "cpx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ec */
-    {   "sbc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ed */
-    {   "inc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ee */
-    {   "bbs6", 3,  flUseLabel,               OH_BitBranch             }, /* $ef */
-    {   "beq",  2,  flLabel,                  OH_Relative              }, /* $f0 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $f1 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectIndirect        }, /* $f2 */
-    {   "tai",  7,  flNone,                   OH_BlockMove,            }, /* $f3 */
-    {   "set",  1,  flNone,                   OH_Implicit,             }, /* $f4 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectX               }, /* $f5 */
-    {   "inc",  2,  flUseLabel,               OH_DirectX               }, /* $f6 */
-    {   "smb7", 1,  flUseLabel,               OH_Direct,               }, /* $f7 */
-    {   "sed",  1,  flNone,                   OH_Implicit              }, /* $f8 */
-    {   "sbc",  3,  flUseLabel,               OH_AbsoluteY             }, /* $f9 */
-    {   "plx",  1,  flNone,                   OH_Implicit              }, /* $fa */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $fb */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $fc */
-    {   "sbc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $fd */
-    {   "inc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $fe */
-    {   "bbs7", 3,  flUseLabel,               OH_BitBranch             }, /* $ff */
-};
diff --git a/src/da65/opchuc6280.h b/src/da65/opchuc6280.h
deleted file mode 100644 (file)
index d0518dc..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                opchuc6280.h                               */
-/*                                                                           */
-/*                     HuC6280 opcode description table                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               R?merstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OPCHUC6280_H
-#define OPCHUC6280_H
-
-
-
-#include "opcdesc.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Descriptions for all opcodes */
-extern const OpcDesc OpcTable_HuC6280[256];
-
-
-
-/* End of opchuc6280.h */
-
-#endif
diff --git a/src/da65/opcm740.c b/src/da65/opcm740.c
deleted file mode 100644 (file)
index 67a36b4..0000000
+++ /dev/null
@@ -1,307 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 opcm740.c                                 */
-/*                                                                           */
-/*               Mitsubishi 740 series opcode description table              */
-/*                                                                           */
-/* A contribution from Chris Baird                                           */
-/* EMail:         cjb@brushtail.apana.org.au                                 */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* da65 */
-#include "handler.h"
-#include "opcm740.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Descriptions for all opcodes */
-const OpcDesc OpcTable_M740[256] = {
-    {   "brk",  1,  flNone,                   OH_Implicit              }, /* $00 */
-    {   "ora",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $01 */
-    {   "jsr",  2,  flLabel,                  OH_JmpDirectIndirect     }, /* $02 */
-    {   "bbs",  2,  flUseLabel,               OH_AccumulatorBitBranch  }, /* $03 */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $04 */
-    {   "ora",  2,  flUseLabel,               OH_Direct                }, /* $05 */
-    {   "asl",  2,  flUseLabel,               OH_Direct                }, /* $06 */
-    {   "bbs",  3,  flUseLabel,               OH_ZeroPageBit           }, /* $07 */
-    {   "php",  1,  flNone,                   OH_Implicit              }, /* $08 */
-    {   "ora",  2,  flNone,                   OH_Immediate             }, /* $09 */
-    {   "asl",  1,  flNone,                   OH_Accumulator           }, /* $0a */
-    {   "seb",  1,  flNone,                   OH_AccumulatorBit        }, /* $0b */
-    {   "",     1,  flIllegal,                OH_Illegal,              }, /* $0c */
-    {   "ora",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0d */
-    {   "asl",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $0e */
-    {   "seb",  2,  flUseLabel,               OH_ZeroPageBit           }, /* $0f */
-    {   "bpl",  2,  flLabel,                  OH_Relative              }, /* $10 */
-    {   "ora",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $11 */
-    {   "clt",  1,  flNone,                   OH_Implicit              }, /* $12 */
-    {   "bbc",  2,  flUseLabel,               OH_AccumulatorBitBranch  }, /* $13 */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $14 */
-    {   "ora",  2,  flUseLabel,               OH_DirectX               }, /* $15 */
-    {   "asl",  2,  flUseLabel,               OH_DirectX               }, /* $16 */
-    {   "bbc",  3,  flUseLabel,               OH_ZeroPageBit           }, /* $17 */
-    {   "clc",  1,  flNone,                   OH_Implicit              }, /* $18 */
-    {   "ora",  3,  flUseLabel,               OH_AbsoluteY             }, /* $19 */
-    {   "dec",  1,  flNone,                   OH_Accumulator           }, /* $1a */
-    {   "clb",  1,  flNone,                   OH_AccumulatorBit        }, /* $1b */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $1c */
-    {   "ora",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $1d */
-    {   "asl",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $1e */
-    {   "clb",  2,  flUseLabel,               OH_ZeroPageBit           }, /* $1f */
-    {   "jsr",  3,  flLabel,                  OH_Absolute              }, /* $20 */
-    {   "and",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $21 */
-    {   "jsr",  2,  flLabel,                  OH_SpecialPage           }, /* $22 */
-    {   "bbs",  2,  flUseLabel,               OH_AccumulatorBitBranch  }, /* $23 */
-    {   "bit",  2,  flUseLabel,               OH_Direct                }, /* $24 */
-    {   "and",  2,  flUseLabel,               OH_Direct                }, /* $25 */
-    {   "rol",  2,  flUseLabel,               OH_Direct                }, /* $26 */
-    {   "bbs",  3,  flUseLabel,               OH_ZeroPageBit           }, /* $27 */
-    {   "plp",  1,  flNone,                   OH_Implicit              }, /* $28 */
-    {   "and",  2,  flNone,                   OH_Immediate             }, /* $29 */
-    {   "rol",  1,  flNone,                   OH_Accumulator           }, /* $2a */
-    {   "seb",  1,  flNone,                   OH_AccumulatorBit        }, /* $2b */
-    {   "bit",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2c */
-    {   "and",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2d */
-    {   "rol",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $2e */
-    {   "seb",  2,  flUseLabel,               OH_ZeroPageBit           }, /* $2f */
-    {   "bmi",  2,  flLabel,                  OH_Relative              }, /* $30 */
-    {   "and",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $31 */
-    {   "set",  1,  flNone,                   OH_Implicit              }, /* $32 */
-    {   "bbc",  2,  flUseLabel,               OH_AccumulatorBitBranch  }, /* $33 */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $34 */
-    {   "and",  2,  flUseLabel,               OH_DirectX               }, /* $35 */
-    {   "rol",  2,  flUseLabel,               OH_DirectX               }, /* $36 */
-    {   "bbc",  3,  flUseLabel,               OH_ZeroPageBit           }, /* $37 */
-    {   "sec",  1,  flNone,                   OH_Implicit              }, /* $38 */
-    {   "and",  3,  flUseLabel,               OH_AbsoluteY             }, /* $39 */
-    {   "inc",  1,  flNone,                   OH_Accumulator           }, /* $3a */
-    {   "clb",  1,  flNone,                   OH_AccumulatorBit        }, /* $3b */
-    {   "ldm",  3,  flLabel,                  OH_DirectImmediate       }, /* $3c */
-    {   "and",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $3d */
-    {   "rol",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $3e */
-    {   "clb",  2,  flUseLabel,               OH_ZeroPageBit           }, /* $3f */
-    {   "rti",  1,  flNone,                   OH_Rts                   }, /* $40 */
-    {   "eor",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $41 */
-    {   "stp",  1,  flNone,                   OH_Implicit              }, /* $42 */
-    {   "bbs",  2,  flUseLabel,               OH_AccumulatorBitBranch  }, /* $43 */
-    {   "com",  2,  flUseLabel,               OH_Direct                }, /* $44 */
-    {   "eor",  2,  flUseLabel,               OH_Direct                }, /* $45 */
-    {   "lsr",  2,  flUseLabel,               OH_Direct                }, /* $46 */
-    {   "bbs",  3,  flUseLabel,               OH_ZeroPageBit           }, /* $47 */
-    {   "pha",  1,  flNone,                   OH_Implicit              }, /* $48 */
-    {   "eor",  2,  flNone,                   OH_Immediate             }, /* $49 */
-    {   "lsr",  1,  flNone,                   OH_Accumulator           }, /* $4a */
-    {   "seb",  1,  flNone,                   OH_AccumulatorBit        }, /* $4b */
-    {   "jmp",  3,  flLabel,                  OH_JmpAbsolute           }, /* $4c */
-    {   "eor",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $4d */
-    {   "lsr",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $4e */
-    {   "seb",  2,  flUseLabel,               OH_ZeroPageBit           }, /* $4f */
-    {   "bvc",  2,  flLabel,                  OH_Relative              }, /* $50 */
-    {   "eor",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $51 */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $52 */
-    {   "bbc",  2,  flUseLabel,               OH_AccumulatorBitBranch  }, /* $53 */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $54 */
-    {   "eor",  2,  flUseLabel,               OH_DirectX               }, /* $55 */
-    {   "lsr",  2,  flUseLabel,               OH_DirectX               }, /* $56 */
-    {   "bbc",  3,  flUseLabel,               OH_ZeroPageBit           }, /* $57 */
-    {   "cli",  1,  flNone,                   OH_Implicit              }, /* $58 */
-    {   "eor",  3,  flUseLabel,               OH_AbsoluteY             }, /* $59 */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $5a */
-    {   "clb",  1,  flNone,                   OH_AccumulatorBit        }, /* $5b */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $5c */
-    {   "eor",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $5d */
-    {   "lsr",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $5e */
-    {   "clb",  2,  flUseLabel,               OH_ZeroPageBit           }, /* $5f */
-    {   "rts",  1,  flNone,                   OH_Rts                   }, /* $60 */
-    {   "adc",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $61 */
-    {   "mul",  2,  flUseLabel,               OH_DirectX               }, /* $62 */
-    {   "bbs",  2,  flUseLabel,               OH_AccumulatorBitBranch  }, /* $63 */
-    {   "tst",  2,  flUseLabel,               OH_Direct                }, /* $64 */
-    {   "adc",  2,  flUseLabel,               OH_Direct                }, /* $65 */
-    {   "ror",  2,  flUseLabel,               OH_Direct                }, /* $66 */
-    {   "bbs",  3,  flUseLabel,               OH_ZeroPageBit           }, /* $67 */
-    {   "pla",  1,  flNone,                   OH_Implicit              }, /* $68 */
-    {   "adc",  2,  flNone,                   OH_Immediate             }, /* $69 */
-    {   "ror",  1,  flNone,                   OH_Accumulator           }, /* $6a */
-    {   "seb",  1,  flNone,                   OH_AccumulatorBit        }, /* $6b */
-    {   "jmp",  3,  flLabel,                  OH_JmpAbsoluteIndirect   }, /* $6c */
-    {   "adc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $6d */
-    {   "ror",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $6e */
-    {   "seb",  2,  flUseLabel,               OH_ZeroPageBit           }, /* $6f */
-    {   "bvs",  2,  flLabel,                  OH_Relative              }, /* $70 */
-    {   "adc",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $71 */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $72 */
-    {   "bbc",  2,  flUseLabel,               OH_AccumulatorBitBranch  }, /* $73 */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $74 */
-    {   "adc",  2,  flUseLabel,               OH_DirectX               }, /* $75 */
-    {   "ror",  2,  flUseLabel,               OH_DirectX               }, /* $76 */
-    {   "bbc",  3,  flUseLabel,               OH_ZeroPageBit           }, /* $77 */
-    {   "sei",  1,  flNone,                   OH_Implicit              }, /* $78 */
-    {   "adc",  3,  flUseLabel,               OH_AbsoluteY             }, /* $79 */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $7a */
-    {   "clb",  1,  flNone,                   OH_AccumulatorBit        }, /* $7b */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $7c */
-    {   "adc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $7d */
-    {   "ror",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $7e */
-    {   "clb",  2,  flUseLabel,               OH_ZeroPageBit           }, /* $7f */
-    {   "bra",  2,  flLabel,                  OH_Relative              }, /* $80 */
-    {   "sta",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $81 */
-    {   "rrf",  2,  flLabel,                  OH_Direct                }, /* $82 */
-    {   "bbs",  2,  flUseLabel,               OH_AccumulatorBitBranch  }, /* $83 */
-    {   "sty",  2,  flUseLabel,               OH_Direct                }, /* $84 */
-    {   "sta",  2,  flUseLabel,               OH_Direct                }, /* $85 */
-    {   "stx",  2,  flUseLabel,               OH_Direct                }, /* $86 */
-    {   "bbs",  3,  flUseLabel,               OH_ZeroPageBit           }, /* $87 */
-    {   "dey",  1,  flNone,                   OH_Implicit              }, /* $88 */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $89 */
-    {   "txa",  1,  flNone,                   OH_Implicit              }, /* $8a */
-    {   "seb",  1,  flNone,                   OH_AccumulatorBit        }, /* $8b */
-    {   "sty",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8c */
-    {   "sta",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8d */
-    {   "stx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $8e */
-    {   "seb",  2,  flUseLabel,               OH_ZeroPageBit           }, /* $8f */
-    {   "bcc",  2,  flLabel,                  OH_Relative              }, /* $90 */
-    {   "sta",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $91 */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $92 */
-    {   "bbc",  2,  flUseLabel,               OH_AccumulatorBitBranch  }, /* $93 */
-    {   "sty",  2,  flUseLabel,               OH_DirectX               }, /* $94 */
-    {   "sta",  2,  flUseLabel,               OH_DirectX               }, /* $95 */
-    {   "stx",  2,  flUseLabel,               OH_DirectY               }, /* $96 */
-    {   "bbc",  3,  flUseLabel,               OH_ZeroPageBit           }, /* $97 */
-    {   "tya",  1,  flNone,                   OH_Implicit              }, /* $98 */
-    {   "sta",  3,  flUseLabel,               OH_AbsoluteY             }, /* $99 */
-    {   "txs",  1,  flNone,                   OH_Implicit              }, /* $9a */
-    {   "clb",  1,  flNone,                   OH_AccumulatorBit        }, /* $9b */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $9c */
-    {   "sta",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $9d */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $9e */
-    {   "clb",  2,  flUseLabel,               OH_ZeroPageBit           }, /* $9f */
-    {   "ldy",  2,  flNone,                   OH_Immediate             }, /* $a0 */
-    {   "lda",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $a1 */
-    {   "ldx",  2,  flNone,                   OH_Immediate             }, /* $a2 */
-    {   "bbs",  2,  flUseLabel,               OH_AccumulatorBitBranch  }, /* $a3 */
-    {   "ldy",  2,  flUseLabel,               OH_Direct                }, /* $a4 */
-    {   "lda",  2,  flUseLabel,               OH_Direct                }, /* $a5 */
-    {   "ldx",  2,  flUseLabel,               OH_Direct                }, /* $a6 */
-    {   "bbs",  3,  flUseLabel,               OH_ZeroPageBit           }, /* $a7 */
-    {   "tay",  1,  flNone,                   OH_Implicit              }, /* $a8 */
-    {   "lda",  2,  flNone,                   OH_Immediate             }, /* $a9 */
-    {   "tax",  1,  flNone,                   OH_Implicit              }, /* $aa */
-    {   "seb",  1,  flNone,                   OH_AccumulatorBit        }, /* $ab */
-    {   "ldy",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ac */
-    {   "lda",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ad */
-    {   "ldx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ae */
-    {   "seb",  2,  flUseLabel,               OH_ZeroPageBit           }, /* $af */
-    {   "bcs",  2,  flLabel,                  OH_Relative              }, /* $b0 */
-    {   "lda",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $b1 */
-    {   "jmp",  2,  flLabel,                  OH_JmpDirectIndirect     }, /* $b2 */
-    {   "bbc",  2,  flUseLabel,               OH_AccumulatorBitBranch  }, /* $b3 */
-    {   "ldy",  2,  flUseLabel,               OH_DirectX               }, /* $b4 */
-    {   "lda",  2,  flUseLabel,               OH_DirectX               }, /* $b5 */
-    {   "ldx",  2,  flUseLabel,               OH_DirectY               }, /* $b6 */
-    {   "bbc",  3,  flUseLabel,               OH_ZeroPageBit           }, /* $b7 */
-    {   "clv",  1,  flNone,                   OH_Implicit              }, /* $b8 */
-    {   "lda",  3,  flUseLabel,               OH_AbsoluteY             }, /* $b9 */
-    {   "tsx",  1,  flNone,                   OH_Implicit              }, /* $ba */
-    {   "clb",  1,  flNone,                   OH_AccumulatorBit        }, /* $bb */
-    {   "ldy",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $bc */
-    {   "lda",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $bd */
-    {   "ldx",  3,  flUseLabel|flAbsOverride, OH_AbsoluteY             }, /* $be */
-    {   "clb",  2,  flUseLabel,               OH_ZeroPageBit           }, /* $bf */
-    {   "cpy",  2,  flNone,                   OH_Immediate             }, /* $c0 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $c1 */
-    {   "wit",  1,  flNone,                   OH_Implicit,             }, /* $c2 */
-    {   "bbs",  2,  flUseLabel,               OH_AccumulatorBitBranch  }, /* $c3 */
-    {   "cpy",  2,  flUseLabel,               OH_Direct                }, /* $c4 */
-    {   "cmp",  2,  flUseLabel,               OH_Direct                }, /* $c5 */
-    {   "dec",  2,  flUseLabel,               OH_Direct                }, /* $c6 */
-    {   "bbs",  3,  flUseLabel,               OH_ZeroPageBit           }, /* $c7 */
-    {   "iny",  1,  flNone,                   OH_Implicit              }, /* $c8 */
-    {   "cmp",  2,  flNone,                   OH_Immediate             }, /* $c9 */
-    {   "dex",  1,  flNone,                   OH_Implicit              }, /* $ca */
-    {   "seb",  1,  flNone,                   OH_AccumulatorBit        }, /* $cb */
-    {   "cpy",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $cc */
-    {   "cmp",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $cd */
-    {   "dec",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ce */
-    {   "seb",  2,  flUseLabel,               OH_ZeroPageBit           }, /* $cf */
-    {   "bne",  2,  flLabel,                  OH_Relative              }, /* $d0 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $d1 */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $d2 */
-    {   "bbc",  2,  flUseLabel,               OH_AccumulatorBitBranch  }, /* $d3 */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $d4 */
-    {   "cmp",  2,  flUseLabel,               OH_DirectX               }, /* $d5 */
-    {   "dec",  2,  flUseLabel,               OH_DirectX               }, /* $d6 */
-    {   "bbc",  3,  flUseLabel,               OH_ZeroPageBit           }, /* $d7 */
-    {   "cld",  1,  flNone,                   OH_Implicit              }, /* $d8 */
-    {   "cmp",  3,  flUseLabel,               OH_AbsoluteY             }, /* $d9 */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $da */
-    {   "clb",  1,  flNone,                   OH_AccumulatorBit        }, /* $db */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $dc */
-    {   "cmp",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $dd */
-    {   "dec",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $de */
-    {   "clb",  2,  flUseLabel,               OH_ZeroPageBit           }, /* $df */
-    {   "cpx",  2,  flNone,                   OH_Immediate             }, /* $e0 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectXIndirect       }, /* $e1 */
-    {   "div",  2,  flUseLabel,               OH_DirectX               }, /* $e2 */
-    {   "bbs",  2,  flUseLabel,               OH_AccumulatorBitBranch  }, /* $e3 */
-    {   "cpx",  2,  flUseLabel,               OH_Direct                }, /* $e4 */
-    {   "sbc",  2,  flUseLabel,               OH_Direct                }, /* $e5 */
-    {   "inc",  2,  flUseLabel,               OH_Direct                }, /* $e6 */
-    {   "bbs",  3,  flUseLabel,               OH_ZeroPageBit           }, /* $e7 */
-    {   "inx",  1,  flNone,                   OH_Implicit              }, /* $e8 */
-    {   "sbc",  2,  flNone,                   OH_Immediate             }, /* $e9 */
-    {   "nop",  1,  flNone,                   OH_Implicit              }, /* $ea */
-    {   "seb",  1,  flNone,                   OH_AccumulatorBit        }, /* $eb */
-    {   "cpx",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ec */
-    {   "sbc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ed */
-    {   "inc",  3,  flUseLabel|flAbsOverride, OH_Absolute              }, /* $ee */
-    {   "seb",  2,  flUseLabel,               OH_ZeroPageBit           }, /* $ef */
-    {   "beq",  2,  flLabel,                  OH_Relative              }, /* $f0 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectIndirectY       }, /* $f1 */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $f2 */
-    {   "bbc",  2,  flUseLabel,               OH_AccumulatorBitBranch  }, /* $f3 */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $f4 */
-    {   "sbc",  2,  flUseLabel,               OH_DirectX               }, /* $f5 */
-    {   "inc",  2,  flUseLabel,               OH_DirectX               }, /* $f6 */
-    {   "bbc",  3,  flUseLabel,               OH_ZeroPageBit           }, /* $f7 */
-    {   "sed",  1,  flNone,                   OH_Implicit              }, /* $f8 */
-    {   "sbc",  3,  flUseLabel,               OH_AbsoluteY             }, /* $f9 */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $fa */
-    {   "clb",  1,  flNone,                   OH_AccumulatorBit        }, /* $fb */
-    {   "",     1,  flIllegal,                OH_Illegal               }, /* $fc */
-    {   "sbc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $fd */
-    {   "inc",  3,  flUseLabel|flAbsOverride, OH_AbsoluteX             }, /* $fe */
-    {   "clb",  2,  flUseLabel,               OH_ZeroPageBit           }, /* $ff */
-};
diff --git a/src/da65/opcm740.h b/src/da65/opcm740.h
deleted file mode 100644 (file)
index 07c4957..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 opcm740.h                                 */
-/*                                                                           */
-/*               Mitsubishi 740 series opcode description table              */
-/*                                                                           */
-/* A contribution from Chris Baird                                           */
-/* EMail:         cjb@brushtail.apana.org.au                                 */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OPCM740_H
-#define OPCM740_H
-
-
-
-#include "opcdesc.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Descriptions for all opcodes */
-extern const OpcDesc OpcTable_M740[256];
-
-
-
-/* End of opcm740.h */
-
-#endif
diff --git a/src/da65/opctable.c b/src/da65/opctable.c
deleted file mode 100644 (file)
index c85805f..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                opctable.c                                 */
-/*                                                                           */
-/*                   Disassembler opcode description table                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* da65 */
-#include "error.h"
-#include "opc6502.h"
-#include "opc6502x.h"
-#include "opc65816.h"
-#include "opc65c02.h"
-#include "opc65sc02.h"
-#include "opchuc6280.h"
-#include "opcm740.h"
-#include "opctable.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Descriptions for all opcodes */
-const OpcDesc* OpcTable = OpcTable_6502;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void SetOpcTable (cpu_t CPU)
-/* Set the correct opcode table for the given CPU */
-{
-    switch (CPU) {
-        case CPU_6502:    OpcTable = OpcTable_6502;     break;
-        case CPU_6502X:   OpcTable = OpcTable_6502X;    break;
-        case CPU_65SC02:  OpcTable = OpcTable_65SC02;   break;
-        case CPU_65C02:   OpcTable = OpcTable_65C02;    break;
-        case CPU_HUC6280: OpcTable = OpcTable_HuC6280;  break;
-        case CPU_M740:    OpcTable = OpcTable_M740;     break;
-        default:          Error ("Unsupported CPU");
-    }
-}
diff --git a/src/da65/opctable.h b/src/da65/opctable.h
deleted file mode 100644 (file)
index d5c81b2..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                opctable.h                                 */
-/*                                                                           */
-/*                   Disassembler opcode description table                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OPCTABLE_H
-#define OPCTABLE_H
-
-
-
-/* common */    
-#include "cpu.h"
-
-/* da65 */
-#include "opcdesc.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Descriptions for all opcodes */
-extern const OpcDesc* OpcTable;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void SetOpcTable (cpu_t CPU);
-/* Set the correct opcode table for the given CPU */
-
-
-
-/* End of opctable.h */
-
-#endif
diff --git a/src/da65/output.c b/src/da65/output.c
deleted file mode 100644 (file)
index 4daacb1..0000000
+++ /dev/null
@@ -1,403 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 output.c                                  */
-/*                                                                           */
-/*                       Disassembler output routines                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2014, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-
-/* common */
-#include "addrsize.h"
-#include "cpu.h"
-#include "version.h"
-
-/* da65 */
-#include "code.h"
-#include "error.h"
-#include "global.h"
-#include "output.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-static FILE*    F       = 0;            /* Output stream */
-static unsigned Col     = 1;            /* Current column */
-static unsigned Line    = 0;            /* Current line on page */
-static unsigned Page    = 1;            /* Current output page */
-
-static const char* SegmentName = 0;     /* Name of current segment */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void PageHeader (void)
-/* Print a page header */
-{
-    fprintf (F,
-             "; da65 V%s\n"
-             "; Created:    %s\n"
-             "; Input file: %s\n"
-             "; Page:       %u\n\n",
-             GetVersionAsString (),
-             Now,
-             InFile,
-             Page);
-}
-
-
-
-void OpenOutput (const char* Name)
-/* Open the given file for output */
-{
-    /* If we have a name given, open the output file, otherwise use stdout */
-    if (Name != 0) {
-        F = fopen (Name, "w");
-        if (F == 0) {
-            Error ("Cannot open `%s': %s", Name, strerror (errno));
-        }
-    } else {
-        F = stdout;
-    }
-
-    /* Output the header and initialize stuff */
-    PageHeader ();
-    Line = 5;
-    Col  = 1;
-}
-
-
-
-void CloseOutput (void)
-/* Close the output file */
-{
-    if (F != stdout && fclose (F) != 0) {
-        Error ("Error closing output file: %s", strerror (errno));
-    }
-}
-
-
-
-void Output (const char* Format, ...)
-/* Write to the output file */
-{
-    if (Pass == PassCount) {
-        va_list ap;
-        va_start (ap, Format);
-        Col += vfprintf (F, Format, ap);
-        va_end (ap);
-    }
-}
-
-
-
-void Indent (unsigned N)
-/* Make sure the current line column is at position N (zero based) */
-{
-    if (Pass == PassCount) {
-        while (Col < N) {
-            fputc (' ', F);
-            ++Col;
-        }
-    }
-}
-
-
-
-void LineFeed (void)
-/* Add a linefeed to the output file */
-{
-    if (Pass == PassCount) {
-        fputc ('\n', F);
-        if (PageLength > 0 && ++Line >= PageLength) {
-            if (FormFeeds) {
-                fputc ('\f', F);
-            }
-            ++Page;
-            PageHeader ();
-            Line = 5;
-        }
-        Col = 1;
-    }
-}
-
-
-
-void DefLabel (const char* Name)
-/* Define a label with the given name */
-{
-    Output ("%s:", Name);
-    /* If the label is longer than the configured maximum, or if it runs into
-    ** the opcode column, start a new line.
-    */
-    if (Col > LBreak+2 || Col > MCol) {
-        LineFeed ();
-    }
-}
-
-
-
-void DefForward (const char* Name, const char* Comment, unsigned Offs)
-/* Define a label as "* + x", where x is the offset relative to the
-** current PC.
-*/
-{
-    if (Pass == PassCount) {
-        /* Flush existing output if necessary */
-        if (Col > 1) {
-            LineFeed ();
-        }
-
-        /* Output the forward definition */
-        Output ("%s", Name);
-        Indent (ACol);
-        if (UseHexOffs) {
-            Output (":= * + $%04X", Offs);
-        } else {
-            Output (":= * + %u", Offs);
-        }
-        if (Comment) {
-            Indent (CCol);
-            Output ("; %s", Comment);
-        }
-        LineFeed ();
-    }
-}
-
-
-
-void DefConst (const char* Name, const char* Comment, unsigned Addr)
-/* Define an address constant */
-{
-    if (Pass == PassCount) {
-        Output ("%s", Name);
-        Indent (ACol);
-        Output (":= $%04X", Addr);
-        if (Comment) {
-            Indent (CCol);
-            Output ("; %s", Comment);
-        }
-        LineFeed ();
-    }
-}
-
-
-
-void DataByteLine (unsigned ByteCount)
-/* Output a line with bytes */
-{
-    unsigned I;
-
-    Indent (MCol);
-    Output (".byte");
-    Indent (ACol);
-    for (I = 0; I < ByteCount; ++I) {
-        if (I > 0) {
-            Output (",$%02X", CodeBuf[PC+I]);
-        } else {
-            Output ("$%02X", CodeBuf[PC+I]);
-        }
-    }
-    LineComment (PC, ByteCount);
-    LineFeed ();
-}
-
-
-
-void DataDByteLine (unsigned ByteCount)
-/* Output a line with dbytes */
-{
-    unsigned I;
-
-    Indent (MCol);
-    Output (".dbyt");
-    Indent (ACol);
-    for (I = 0; I < ByteCount; I += 2) {
-        if (I > 0) {
-            Output (",$%04X", GetCodeDByte (PC+I));
-        } else {
-            Output ("$%04X", GetCodeDByte (PC+I));
-        }
-    }
-    LineComment (PC, ByteCount);
-    LineFeed ();
-}
-
-
-
-void DataWordLine (unsigned ByteCount)
-/* Output a line with words */
-{
-    unsigned I;
-
-    Indent (MCol);
-    Output (".word");
-    Indent (ACol);
-    for (I = 0; I < ByteCount; I += 2) {
-        if (I > 0) {
-            Output (",$%04X", GetCodeWord (PC+I));
-        } else {
-            Output ("$%04X", GetCodeWord (PC+I));
-        }
-    }
-    LineComment (PC, ByteCount);
-    LineFeed ();
-}
-
-
-
-void DataDWordLine (unsigned ByteCount)
-/* Output a line with dwords */
-{
-    unsigned I;
-
-    Indent (MCol);
-    Output (".dword");
-    Indent (ACol);
-    for (I = 0; I < ByteCount; I += 4) {
-        if (I > 0) {
-            Output (",$%08lX", GetCodeDWord (PC+I));
-        } else {
-            Output ("$%08lX", GetCodeDWord (PC+I));
-        }
-    }
-    LineComment (PC, ByteCount);
-    LineFeed ();
-}
-
-
-
-void SeparatorLine (void)
-/* Print a separator line */
-{
-    if (Pass == PassCount && Comments >= 1) {
-        Output ("; ----------------------------------------------------------------------------");
-        LineFeed ();
-    }
-}
-
-
-
-void StartSegment (const char* Name, unsigned AddrSize)
-/* Start a segment */
-{
-    if (Pass == PassCount) {
-        LineFeed ();
-        Output (".segment");
-        Indent (ACol);
-        SegmentName = Name;
-        Output ("\"%s\"", Name);
-        if (AddrSize != ADDR_SIZE_DEFAULT) {
-            Output (": %s", AddrSizeToStr (AddrSize));
-        }
-        LineFeed ();
-        LineFeed ();
-    }
-}
-
-
-
-void EndSegment (void)
-/* End a segment */
-{
-    LineFeed ();
-    Output ("; End of \"%s\" segment", SegmentName);
-    LineFeed ();
-    SeparatorLine ();
-    Output (".code");
-    LineFeed ();
-    LineFeed ();
-}
-
-
-
-void UserComment (const char* Comment)
-/* Output a comment line */
-{
-    Output ("; %s", Comment);
-    LineFeed ();
-}
-
-
-
-void LineComment (unsigned PC, unsigned Count)
-/* Add a line comment with the PC and data bytes */
-{
-    unsigned I;
-
-    if (Pass == PassCount && Comments >= 2) {
-        Indent (CCol);
-        Output ("; %04X", PC);
-        if (Comments >= 3) {
-            for (I = 0; I < Count; ++I) {
-                Output (" %02X", CodeBuf [PC+I]);
-            }
-            if (Comments >= 4) {
-                Indent (TCol);
-                for (I = 0; I < Count; ++I) {
-                    unsigned char C = CodeBuf [PC+I];
-                    if (!isprint (C)) {
-                        C = '.';
-                    }
-                    Output ("%c", C);
-                }
-            }
-        }
-    }
-}
-
-
-
-void OutputSettings (void)
-/* Output CPU and other settings */
-{
-    LineFeed ();
-    Indent (MCol);
-    Output (".setcpu");
-    Indent (ACol);
-    Output ("\"%s\"", CPUNames[CPU]);
-    LineFeed ();
-    LineFeed ();
-}
diff --git a/src/da65/output.h b/src/da65/output.h
deleted file mode 100644 (file)
index 13ea0cc..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 output.h                                  */
-/*                                                                           */
-/*                       Disassembler output routines                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2014, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OUTPUT_H
-#define OUTPUT_H
-
-
-
-/* common */
-#include "attrib.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void OpenOutput (const char* Name);
-/* Open the given file for output */
-
-void CloseOutput (void);
-/* Close the output file */
-
-void Output (const char* Format, ...) attribute ((format(printf, 1, 2)));
-/* Write to the output file */
-
-void Indent (unsigned N);
-/* Make sure the current line column is at position N (zero based) */
-
-void LineFeed (void);
-/* Add a linefeed to the output file */
-
-void DefLabel (const char* Name);
-/* Define a label with the given name */
-
-void DefForward (const char* Name, const char* Comment, unsigned Offs);
-/* Define a label as "* + x", where x is the offset relative to the
-** current PC.
-*/
-
-void DefConst (const char* Name, const char* Comment, unsigned Addr);
-/* Define an address constant */
-
-void OneDataByte (void);
-/* Output a .byte line with the current code byte */
-
-void DataByteLine (unsigned ByteCount);
-/* Output a line with bytes */
-
-void DataDByteLine (unsigned ByteCount);
-/* Output a line with dbytes */
-
-void DataWordLine (unsigned ByteCount);
-/* Output a line with words */
-
-void DataDWordLine (unsigned ByteCount);
-/* Output a line with dwords */
-
-void SeparatorLine (void);
-/* Print a separator line */
-
-void StartSegment (const char* Name, unsigned AddrSize);
-/* Start a segment */
-
-void EndSegment (void);
-/* End a segment */
-
-void UserComment (const char* Comment);
-/* Output a comment line */
-
-void LineComment (unsigned PC, unsigned Count);
-/* Add a line comment with the PC and data bytes */
-
-void OutputSettings (void);
-/* Output CPU and other settings */
-
-
-
-/* End of output.h */
-#endif
diff --git a/src/da65/scanner.c b/src/da65/scanner.c
deleted file mode 100644 (file)
index 8dc8d39..0000000
+++ /dev/null
@@ -1,535 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 scanner.c                                 */
-/*                                                                           */
-/*           Configuration file scanner for the da65 disassembler            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2005 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "chartype.h"
-#include "xsprintf.h"
-
-/* ld65 */
-#include "global.h"
-#include "error.h"
-#include "scanner.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Current token and attributes */
-unsigned        InfoTok;
-char            InfoSVal [CFG_MAX_IDENT_LEN+1];
-long            InfoIVal;
-
-/* Error location */
-unsigned                InfoErrorLine;
-unsigned                InfoErrorCol;
-
-/* Input sources for the configuration */
-static const char*      InfoFile        = 0;
-
-/* Other input stuff */
-static int              C               = ' ';
-static unsigned         InputLine       = 1;
-static unsigned         InputCol        = 0;
-static FILE*            InputFile       = 0;
-
-
-
-/*****************************************************************************/
-/*                              Error handling                               */
-/*****************************************************************************/
-
-
-
-void InfoWarning (const char* Format, ...)
-/* Print a warning message adding file name and line number of the config file */
-{
-    char Buf [512];
-    va_list ap;
-
-    va_start (ap, Format);
-    xvsprintf (Buf, sizeof (Buf), Format, ap);
-    va_end (ap);
-
-    Warning ("%s(%u): %s", InfoFile, InfoErrorLine, Buf);
-}
-
-
-
-void InfoError (const char* Format, ...)
-/* Print an error message adding file name and line number of the config file */
-{
-    char Buf [512];
-    va_list ap;
-
-    va_start (ap, Format);
-    xvsprintf (Buf, sizeof (Buf), Format, ap);
-    va_end (ap);
-
-    Error ("%s(%u): %s", InfoFile, InfoErrorLine, Buf);
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void NextChar (void)
-/* Read the next character from the input file */
-{
-    /* Read from the file */
-    C = getc (InputFile);
-
-    /* Count columns */
-    if (C != EOF) {
-        ++InputCol;
-    }
-
-    /* Count lines */
-    if (C == '\n') {
-        ++InputLine;
-        InputCol = 0;
-    }
-}
-
-
-
-static unsigned DigitVal (int C)
-/* Return the value for a numeric digit */
-{
-    if (IsDigit (C)) {
-        return C - '0';
-    } else {
-        return toupper (C) - 'A' + 10;
-    }
-}
-
-
-
-void InfoNextTok (void)
-/* Read the next token from the input stream */
-{
-    unsigned I;
-    int      Esc;
-
-Again:
-    /* Skip whitespace */
-    while (IsSpace (C)) {
-        NextChar ();
-    }
-
-    /* Remember the current position */
-    InfoErrorLine = InputLine;
-    InfoErrorCol  = InputCol;
-
-    /* Identifier? */
-    if (C == '_' || IsAlpha (C)) {
-
-        /* Read the identifier */
-        I = 0;
-        while (C == '_' || IsAlNum (C)) {
-            if (I < CFG_MAX_IDENT_LEN) {
-                InfoSVal [I++] = C;
-            }
-            NextChar ();
-        }
-        InfoSVal [I] = '\0';
-        InfoTok = INFOTOK_IDENT;
-        return;
-    }
-
-    /* Hex number? */
-    if (C == '$') {
-        NextChar ();
-        if (!IsXDigit (C)) {
-            InfoError ("Hex digit expected");
-        }
-        InfoIVal = 0;
-        while (IsXDigit (C)) {
-            InfoIVal = InfoIVal * 16 + DigitVal (C);
-            NextChar ();
-        }
-        InfoTok = INFOTOK_INTCON;
-        return;
-    }
-
-    /* Decimal number? */
-    if (IsDigit (C)) {
-        InfoIVal = 0;
-        while (IsDigit (C)) {
-            InfoIVal = InfoIVal * 10 + DigitVal (C);
-            NextChar ();
-        }
-        InfoTok = INFOTOK_INTCON;
-        return;
-    }
-
-    /* Other characters */
-    switch (C) {
-
-        case '{':
-            NextChar ();
-            InfoTok = INFOTOK_LCURLY;
-            break;
-
-        case '}':
-            NextChar ();
-            InfoTok = INFOTOK_RCURLY;
-            break;
-
-        case ';':
-            NextChar ();
-            InfoTok = INFOTOK_SEMI;
-            break;
-
-        case '.':
-            NextChar ();
-            InfoTok = INFOTOK_DOT;
-            break;
-
-        case ',':
-            NextChar ();
-            InfoTok = INFOTOK_COMMA;
-            break;
-
-        case '=':
-            NextChar ();
-            InfoTok = INFOTOK_EQ;
-            break;
-
-        case ':':
-            NextChar ();
-            InfoTok = INFOTOK_COLON;
-            break;
-
-        case '\"':
-            NextChar ();
-            I = 0;
-            while (C != '\"') {
-                Esc = (C == '\\');
-                if (Esc) {
-                    NextChar ();
-                }
-                if (C == EOF || C == '\n') {
-                    InfoError ("Unterminated string");
-                }
-                if (Esc) {
-                    switch (C) {
-                        case '\"':      C = '\"';       break;
-                        case '\'':      C = '\'';       break;
-                        default:        InfoError ("Invalid escape char: %c", C);
-                    }
-                }
-                if (I < CFG_MAX_IDENT_LEN) {
-                    InfoSVal [I++] = C;
-                }
-                NextChar ();
-            }
-            NextChar ();
-            InfoSVal [I] = '\0';
-            InfoTok = INFOTOK_STRCON;
-            break;
-
-        case '\'':
-            NextChar ();
-            if (C == EOF || IsControl (C)) {
-                InfoError ("Invalid character constant");
-            }
-            InfoIVal = C;
-            NextChar ();
-            if (C != '\'') {
-                InfoError ("Unterminated character constant");
-            }
-            NextChar ();
-            InfoTok = INFOTOK_CHARCON;
-            break;
-
-        case '#':
-            /* Comment */
-            while (C != '\n' && C != EOF) {
-                NextChar ();
-            }
-            if (C != EOF) {
-                goto Again;
-            }
-            InfoTok = INFOTOK_EOF;
-            break;
-
-        case EOF:
-            InfoTok = INFOTOK_EOF;
-            break;
-
-        default:
-            InfoError ("Invalid character `%c'", C);
-
-    }
-}
-
-
-
-void InfoConsume (unsigned T, const char* Msg)
-/* Skip a token, print an error message if not found */
-{
-    if (InfoTok != T) {
-        InfoError (Msg);
-    }
-    InfoNextTok ();
-}
-
-
-
-void InfoConsumeLCurly (void)
-/* Consume a left curly brace */
-{
-    InfoConsume (INFOTOK_LCURLY, "`{' expected");
-}
-
-
-
-void InfoConsumeRCurly (void)
-/* Consume a right curly brace */
-{
-    InfoConsume (INFOTOK_RCURLY, "`}' expected");
-}
-
-
-
-void InfoConsumeSemi (void)
-/* Consume a semicolon */
-{
-    InfoConsume (INFOTOK_SEMI, "`;' expected");
-}
-
-
-
-void InfoConsumeColon (void)
-/* Consume a colon */
-{
-    InfoConsume (INFOTOK_COLON, "`:' expected");
-}
-
-
-
-void InfoOptionalComma (void)
-/* Consume a comma if there is one */
-{
-    if (InfoTok == INFOTOK_COMMA) {
-        InfoNextTok ();
-    }
-}
-
-
-
-void InfoOptionalAssign (void)
-/* Consume an equal sign if there is one */
-{
-    if (InfoTok == INFOTOK_EQ) {
-        InfoNextTok ();
-    }
-}
-
-
-
-void InfoAssureInt (void)
-/* Make sure the next token is an integer */
-{
-    if (InfoTok != INFOTOK_INTCON) {
-        InfoError ("Integer constant expected");
-    }
-}
-
-
-
-void InfoAssureStr (void)
-/* Make sure the next token is a string constant */
-{
-    if (InfoTok != INFOTOK_STRCON) {
-        InfoError ("String constant expected");
-    }
-}
-
-
-
-void InfoAssureChar (void)
-/* Make sure the next token is a char constant */
-{
-    if (InfoTok != INFOTOK_STRCON) {
-        InfoError ("Character constant expected");
-    }
-}
-
-
-
-void InfoAssureIdent (void)
-/* Make sure the next token is an identifier */
-{
-    if (InfoTok != INFOTOK_IDENT) {
-        InfoError ("Identifier expected");
-    }
-}
-
-
-
-void InfoRangeCheck (long Lo, long Hi)
-/* Check the range of InfoIVal */
-{
-    if (InfoIVal < Lo || InfoIVal > Hi) {
-        InfoError ("Range error");
-    }
-}
-
-
-
-void InfoSpecialToken (const IdentTok* Table, unsigned Size, const char* Name)
-/* Map an identifier to one of the special tokens in the table */
-{
-    unsigned I;
-
-    /* We need an identifier */
-    if (InfoTok == INFOTOK_IDENT) {
-
-        /* Make it upper case */
-        I = 0;
-        while (InfoSVal [I]) {
-            InfoSVal [I] = toupper (InfoSVal [I]);
-            ++I;
-        }
-
-        /* Linear search */
-        for (I = 0; I < Size; ++I) {
-            if (strcmp (InfoSVal, Table [I].Ident) == 0) {
-                InfoTok = Table [I].Tok;
-                return;
-            }
-        }
-
-    }
-
-    /* Not found or no identifier */
-    InfoError ("%s expected", Name);
-}
-
-
-
-void InfoBoolToken (void)
-/* Map an identifier or integer to a boolean token */
-{
-    static const IdentTok Booleans [] = {
-        {   "YES",      INFOTOK_TRUE     },
-        {   "NO",       INFOTOK_FALSE    },
-        {   "TRUE",     INFOTOK_TRUE     },
-        {   "FALSE",    INFOTOK_FALSE    },
-        {   "ON",       INFOTOK_TRUE     },
-        {   "OFF",      INFOTOK_FALSE    },
-    };
-
-    /* If we have an identifier, map it to a boolean token */
-    if (InfoTok == INFOTOK_IDENT) {
-        InfoSpecialToken (Booleans, ENTRY_COUNT (Booleans), "Boolean");
-    } else {
-        /* We expected an integer here */
-        if (InfoTok != INFOTOK_INTCON) {
-            InfoError ("Boolean value expected");
-        }
-        InfoTok = (InfoIVal == 0)? INFOTOK_FALSE : INFOTOK_TRUE;
-    }
-}
-
-
-
-void InfoSetName (const char* Name)
-/* Set a name for a config file */
-{
-    InfoFile = Name;
-}
-
-
-
-const char* InfoGetName (void)
-/* Get the name of the config file */
-{
-    return InfoFile? InfoFile : "";
-}
-
-
-
-int InfoAvail ()
-/* Return true if we have an info file given */
-{
-    return (InfoFile != 0);
-}
-
-
-
-void InfoOpenInput (void)
-/* Open the input file */
-{
-    /* Open the file */
-    InputFile = fopen (InfoFile, "r");
-    if (InputFile == 0) {
-        Error ("Cannot open `%s': %s", InfoFile, strerror (errno));
-    }
-
-    /* Initialize variables */
-    C         = ' ';
-    InputLine = 1;
-    InputCol  = 0;
-
-    /* Start the ball rolling ... */
-    InfoNextTok ();
-}
-
-
-
-void InfoCloseInput (void)
-/* Close the input file if we have one */
-{
-    /* Close the input file if we had one */
-    if (InputFile) {
-        (void) fclose (InputFile);
-        InputFile = 0;
-    }
-}
diff --git a/src/da65/scanner.h b/src/da65/scanner.h
deleted file mode 100644 (file)
index f7f090f..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 scanner.h                                 */
-/*                                                                           */
-/*           Configuration file scanner for the da65 disassembler            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SCANNER_H
-#define SCANNER_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Info file tokens */
-typedef enum token_t {
-    INFOTOK_NONE,
-    INFOTOK_INTCON,
-    INFOTOK_STRCON,
-    INFOTOK_CHARCON,
-    INFOTOK_IDENT,
-    INFOTOK_LCURLY,
-    INFOTOK_RCURLY,
-    INFOTOK_SEMI,
-    INFOTOK_COMMA,
-    INFOTOK_EQ,
-    INFOTOK_COLON,
-    INFOTOK_DOT,
-    INFOTOK_EOF,
-
-    /* Special tokens */
-    INFOTOK_GLOBAL,
-    INFOTOK_RANGE,
-    INFOTOK_LABEL,
-    INFOTOK_ASMINC,
-    INFOTOK_SEGMENT,
-
-    /* Global section */
-    INFOTOK_ARGUMENT_COLUMN,
-    INFOTOK_COMMENT_COLUMN,
-    INFOTOK_COMMENTS,
-    INFOTOK_CPU,
-    INFOTOK_HEXOFFS,
-    INFOTOK_INPUTNAME,
-    INFOTOK_INPUTOFFS,
-    INFOTOK_INPUTSIZE,
-    INFOTOK_LABELBREAK,
-    INFOTOK_MNEMONIC_COLUMN,
-    INFOTOK_NL_AFTER_JMP,
-    INFOTOK_NL_AFTER_RTS,
-    INFOTOK_OUTPUTNAME,
-    INFOTOK_PAGELENGTH,
-    INFOTOK_STARTADDR,
-    INFOTOK_TEXT_COLUMN,
-
-    /* Range section */
-    INFOTOK_START,
-    INFOTOK_END,
-    INFOTOK_TYPE,
-
-    INFOTOK_CODE,
-    INFOTOK_BYTETAB,
-    INFOTOK_DBYTETAB,
-    INFOTOK_WORDTAB,
-    INFOTOK_DWORDTAB,
-    INFOTOK_ADDRTAB,
-    INFOTOK_RTSTAB,
-    INFOTOK_TEXTTAB,
-    INFOTOK_SKIP,
-
-    /* Label section */
-    INFOTOK_NAME,
-    INFOTOK_COMMENT,
-    INFOTOK_ADDR,
-    INFOTOK_SIZE,
-
-    /* ASMINC section */
-    INFOTOK_FILE,
-    INFOTOK_COMMENTSTART,
-    INFOTOK_IGNOREUNKNOWN,
-
-    /* */
-    INFOTOK_TRUE,
-    INFOTOK_FALSE
-} token_t;
-
-
-/* Mapping table entry, special identifier --> token */
-typedef struct IdentTok IdentTok;
-struct IdentTok {
-    const char*         Ident;          /* Identifier */
-    token_t             Tok;            /* Token for identifier */
-};
-#define ENTRY_COUNT(s)  (sizeof (s) / sizeof (s [0]))
-
-
-
-/* Current token and attributes */
-#define CFG_MAX_IDENT_LEN  255
-extern unsigned         InfoTok;
-extern char             InfoSVal[CFG_MAX_IDENT_LEN+1];
-extern long             InfoIVal;
-
-/* Error location */
-extern unsigned         InfoErrorLine;
-extern unsigned         InfoErrorCol;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void InfoWarning (const char* Format, ...);
-/* Print a warning message adding file name and line number of the config file */
-
-void InfoError (const char* Format, ...);
-/* Print an error message adding file name and line number of the config file */
-
-void InfoNextTok (void);
-/* Read the next token from the input stream */
-
-void InfoConsume (unsigned T, const char* Msg);
-/* Skip a token, print an error message if not found */
-
-void InfoConsumeLCurly (void);
-/* Consume a left curly brace */
-
-void InfoConsumeRCurly (void);
-/* Consume a right curly brace */
-
-void InfoConsumeSemi (void);
-/* Consume a semicolon */
-
-void InfoConsumeColon (void);
-/* Consume a colon */
-
-void InfoOptionalComma (void);
-/* Consume a comma if there is one */
-
-void InfoOptionalAssign (void);
-/* Consume an equal sign if there is one */
-
-void InfoAssureInt (void);
-/* Make sure the next token is an integer */
-
-void InfoAssureStr (void);
-/* Make sure the next token is a string constant */
-
-void InfoAssureChar (void);
-/* Make sure the next token is a char constant */
-
-void InfoAssureIdent (void);
-/* Make sure the next token is an identifier */
-
-void InfoRangeCheck (long Lo, long Hi);
-/* Check the range of InfoIVal */
-
-void InfoSpecialToken (const IdentTok* Table, unsigned Size, const char* Name);
-/* Map an identifier to one of the special tokens in the table */
-
-void InfoBoolToken (void);
-/* Map an identifier or integer to a boolean token */
-
-void InfoSetName (const char* Name);
-/* Set a name for a config file */
-
-const char* InfoGetName (void);
-/* Get the name of the config file */
-
-int InfoAvail ();
-/* Return true if we have an info file given */
-
-void InfoOpenInput (void);
-/* Open the input file if we have one */
-
-void InfoCloseInput (void);
-/* Close the input file if we have one */
-
-
-
-/* End of scanner.h */
-
-#endif
diff --git a/src/da65/segment.c b/src/da65/segment.c
deleted file mode 100644 (file)
index 12d4cf6..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 segment.c                                 */
-/*                                                                           */
-/*                         Segment handling for da65                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2007-2014, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "addrsize.h"
-#include "xmalloc.h"
-
-/* da65 */
-#include "attrtab.h"
-#include "segment.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Hash definitions */
-#define HASH_SIZE       53
-
-/* Segment definition */
-typedef struct Segment Segment;
-struct Segment {
-    Segment*            NextStart;      /* Pointer to next segment */
-    unsigned long       Start;
-    unsigned            AddrSize;
-    char                Name[1];        /* Name, dynamically allocated */
-};
-
-/* Table containing the segments. A segment is inserted using its hash
-** value. Collisions are handled by single-linked lists.
-*/
-static Segment* StartTab[HASH_SIZE];    /* Table containing segment starts */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void AddAbsSegment (unsigned Start, unsigned End, const char* Name)
-/* Add an absolute segment to the segment table */
-{
-    /* Get the length of the name */
-    unsigned Len = strlen (Name);
-
-    /* Create a new segment */
-    Segment* S = xmalloc (sizeof (Segment) + Len);
-
-    /* Fill in the data */
-    S->Start    = Start;
-    S->AddrSize = ADDR_SIZE_ABS;
-    memcpy (S->Name, Name, Len + 1);
-
-    /* Insert the segment into the hash table */
-    S->NextStart = StartTab[Start % HASH_SIZE];
-    StartTab[Start % HASH_SIZE] = S;
-
-    /* Mark start and end of the segment */
-    MarkAddr (Start, atSegmentStart);
-    MarkAddr (End, atSegmentEnd);
-
-    /* Mark the addresses within the segment */
-    MarkRange (Start, End, atSegment);
-}
-
-
-
-char* GetSegmentStartName (unsigned Addr)
-/* Return the name of the segment which starts at the given address */
-{
-    Segment* S = StartTab[Addr % HASH_SIZE];
-
-    /* Search the collision list for the exact address */
-    while (S != 0) {
-        if (S->Start == Addr) {
-            return S->Name;
-        }
-        S = S->NextStart;
-    }
-
-    return 0;
-}
-
-
-
-unsigned GetSegmentAddrSize (unsigned Addr)
-/* Return the address size of the segment which starts at the given address */
-{
-    Segment* S = StartTab[Addr % HASH_SIZE];
-
-    /* Search the collision list for the exact address */
-    while (S != 0) {
-        if (S->Start == Addr) {
-            return S->AddrSize;
-        }
-        S = S->NextStart;
-    }
-
-    return 0;
-}
diff --git a/src/da65/segment.h b/src/da65/segment.h
deleted file mode 100644 (file)
index b1423bb..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 segment.h                                 */
-/*                                                                           */
-/*                         Segment handling for da65                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2007-2014, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SEGMENT_H
-#define SEGMENT_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void AddAbsSegment (unsigned Start, unsigned End, const char* Name);
-/* Add an absolute segment to the segment table */
-
-char* GetSegmentStartName (unsigned Addr);
-/* Return the name of the segment which starts at the given address */
-
-unsigned GetSegmentAddrSize (unsigned Addr);
-/* Return the address size of the segment which starts at the given address */
-
-
-
-/* End of segment.h */
-#endif
diff --git a/src/dbginfo/dbginfo.c b/src/dbginfo/dbginfo.c
deleted file mode 100644 (file)
index e0d8894..0000000
+++ /dev/null
@@ -1,7359 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 dbginfo.c                                 */
-/*                                                                           */
-/*                         cc65 debug info handling                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2010-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <ctype.h>
-#include <limits.h>
-#include <assert.h>
-#include <errno.h>
-
-#include "dbginfo.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Use this for debugging - beware, lots of output */
-#define DEBUG           0
-
-/* Version numbers of the debug format we understand */
-#define VER_MAJOR       2U
-#define VER_MINOR       0U
-
-/* Dynamic strings */
-typedef struct StrBuf StrBuf;
-struct StrBuf {
-    char*       Buf;                    /* Pointer to buffer */
-    unsigned    Len;                    /* Length of the string */
-    unsigned    Allocated;              /* Size of allocated memory */
-};
-
-/* Initializer for a string buffer */
-#define STRBUF_INITIALIZER      { 0, 0, 0 }
-
-/* An array of unsigneds/pointers that grows if needed. C guarantees that a
-** pointer to a union correctly converted points to each of its members.
-** So what we do here is using union entries that contain an unsigned
-** (used to store ids until they're resolved) and pointers to actual items
-** in storage.
-*/
-typedef union CollEntry CollEntry;
-union CollEntry {
-    void*               Ptr;
-    unsigned            Id;
-};
-
-typedef struct Collection Collection;
-struct Collection {
-    unsigned            Count;          /* Number of items in the list */
-    unsigned            Size;           /* Size of allocated array */
-    CollEntry*          Items;          /* Array with dynamic size */
-};
-
-/* Initializer for static collections */
-#define COLLECTION_INITIALIZER  { 0, 0, 0 }
-
-/* Span info management. The following table has as many entries as there
-** are addresses active in spans. Each entry lists the spans for this address.
-*/
-typedef struct SpanInfoListEntry SpanInfoListEntry;
-struct SpanInfoListEntry {
-    cc65_addr           Addr;           /* Unique address */
-    unsigned            Count;          /* Number of SpanInfos for this address */
-    void*               Data;           /* Either SpanInfo* or SpanInfo** */
-};
-
-typedef struct SpanInfoList SpanInfoList;
-struct SpanInfoList {
-    unsigned            Count;          /* Number of entries */
-    SpanInfoListEntry*  List;           /* Dynamic array with entries */
-};
-
-/* Input tokens */
-typedef enum {
-
-    TOK_INVALID,                        /* Invalid token */
-    TOK_EOF,                            /* End of file reached */
-
-    TOK_INTCON,                         /* Integer constant */
-    TOK_STRCON,                         /* String constant */
-
-    TOK_EQUAL,                          /* = */
-    TOK_COMMA,                          /* , */
-    TOK_MINUS,                          /* - */
-    TOK_PLUS,                           /* + */
-    TOK_EOL,                            /* \n */
-
-    TOK_FIRST_KEYWORD,
-    TOK_ABSOLUTE = TOK_FIRST_KEYWORD,   /* ABSOLUTE keyword */
-    TOK_ADDRSIZE,                       /* ADDRSIZE keyword */
-    TOK_AUTO,                           /* AUTO keyword */
-    TOK_COUNT,                          /* COUNT keyword */
-    TOK_CSYM,                           /* CSYM keyword */
-    TOK_DEF,                            /* DEF keyword */
-    TOK_ENUM,                           /* ENUM keyword */
-    TOK_EQUATE,                         /* EQUATE keyword */
-    TOK_EXPORT,                         /* EXPORT keyword */
-    TOK_EXTERN,                         /* EXTERN keyword */
-    TOK_FILE,                           /* FILE keyword */
-    TOK_FUNC,                           /* FUNC keyword */
-    TOK_GLOBAL,                         /* GLOBAL keyword */
-    TOK_ID,                             /* ID keyword */
-    TOK_IMPORT,                         /* IMPORT keyword */
-    TOK_INFO,                           /* INFO keyword */
-    TOK_LABEL,                          /* LABEL keyword */
-    TOK_LIBRARY,                        /* LIBRARY keyword */
-    TOK_LINE,                           /* LINE keyword */
-    TOK_LONG,                           /* LONG_keyword */
-    TOK_MAJOR,                          /* MAJOR keyword */
-    TOK_MINOR,                          /* MINOR keyword */
-    TOK_MODULE,                         /* MODULE keyword */
-    TOK_MTIME,                          /* MTIME keyword */
-    TOK_NAME,                           /* NAME keyword */
-    TOK_OFFS,                           /* OFFS keyword */
-    TOK_OUTPUTNAME,                     /* OUTPUTNAME keyword */
-    TOK_OUTPUTOFFS,                     /* OUTPUTOFFS keyword */
-    TOK_PARENT,                         /* PARENT keyword */
-    TOK_REF,                            /* REF keyword */
-    TOK_REGISTER,                       /* REGISTER keyword */
-    TOK_RO,                             /* RO keyword */
-    TOK_RW,                             /* RW keyword */
-    TOK_SC,                             /* SC keyword */
-    TOK_SCOPE,                          /* SCOPE keyword */
-    TOK_SEGMENT,                        /* SEGMENT keyword */
-    TOK_SIZE,                           /* SIZE keyword */
-    TOK_SPAN,                           /* SPAN keyword */
-    TOK_START,                          /* START keyword */
-    TOK_STATIC,                         /* STATIC keyword */
-    TOK_STRUCT,                         /* STRUCT keyword */
-    TOK_SYM,                            /* SYM keyword */
-    TOK_TYPE,                           /* TYPE keyword */
-    TOK_VALUE,                          /* VALUE keyword */
-    TOK_VAR,                            /* VAR keyword */
-    TOK_VERSION,                        /* VERSION keyword */
-    TOK_ZEROPAGE,                       /* ZEROPAGE keyword */
-    TOK_LAST_KEYWORD = TOK_ZEROPAGE,
-
-    TOK_IDENT,                          /* To catch unknown keywords */
-} Token;
-
-/* Data structure containing information from the debug info file. A pointer
-** to this structure is passed as handle to callers from the outside.
-*/
-typedef struct DbgInfo DbgInfo;
-struct DbgInfo {
-
-    /* First we have all items in collections sorted by id. The ids are
-    ** continous, so an access by id is almost as cheap as an array access.
-    ** The collections are also used when the objects are deleted, so they're
-    ** actually the ones that "own" the items.
-    */
-    Collection          CSymInfoById;   /* C symbol infos sorted by id */
-    Collection          FileInfoById;   /* File infos sorted by id */
-    Collection          LibInfoById;    /* Library infos sorted by id */
-    Collection          LineInfoById;   /* Line infos sorted by id */
-    Collection          ModInfoById;    /* Module infos sorted by id */
-    Collection          ScopeInfoById;  /* Scope infos sorted by id */
-    Collection          SegInfoById;    /* Segment infos sorted by id */
-    Collection          SpanInfoById;   /* Span infos sorted by id */
-    Collection          SymInfoById;    /* Symbol infos sorted by id */
-    Collection          TypeInfoById;   /* Type infos sorted by id */
-
-    /* Collections with other sort criteria */
-    Collection          CSymFuncByName; /* C functions sorted by name */
-    Collection          FileInfoByName; /* File infos sorted by name */
-    Collection          ModInfoByName;  /* Module info sorted by name */
-    Collection          ScopeInfoByName;/* Scope infos sorted by name */
-    Collection          SegInfoByName;  /* Segment infos sorted by name */
-    Collection          SymInfoByName;  /* Symbol infos sorted by name */
-    Collection          SymInfoByVal;   /* Symbol infos sorted by value */
-
-    /* Other stuff */
-    SpanInfoList        SpanInfoByAddr; /* Span infos sorted by unique address */
-
-    /* Info data */
-    unsigned long       MemUsage;       /* Memory usage for the data */
-    unsigned            MajorVersion;   /* Major version number of loaded file */
-    unsigned            MinorVersion;   /* Minor version number of loaded file */
-    char                FileName[1];    /* Name of input file */
-};
-
-/* Data used when parsing the debug info file */
-typedef struct InputData InputData;
-struct InputData {
-    const char*         FileName;       /* Name of input file */
-    cc65_line           Line;           /* Current line number */
-    unsigned            Col;            /* Current column number */
-    cc65_line           SLine;          /* Line number at start of token */
-    unsigned            SCol;           /* Column number at start of token */
-    unsigned            Errors;         /* Number of errors */
-    FILE*               F;              /* Input file */
-    int                 C;              /* Input character */
-    Token               Tok;            /* Token from input stream */
-    unsigned long       IVal;           /* Integer constant */
-    StrBuf              SVal;           /* String constant */
-    cc65_errorfunc      Error;          /* Function called in case of errors */
-    DbgInfo*            Info;           /* Pointer to debug info */
-};
-
-/* Typedefs for the item structures. Do also serve as forwards */
-typedef struct CSymInfo CSymInfo;
-typedef struct FileInfo FileInfo;
-typedef struct LibInfo LibInfo;
-typedef struct LineInfo LineInfo;
-typedef struct ModInfo ModInfo;
-typedef struct ScopeInfo ScopeInfo;
-typedef struct SegInfo SegInfo;
-typedef struct SpanInfo SpanInfo;
-typedef struct SymInfo SymInfo;
-typedef struct TypeInfo TypeInfo;
-
-/* Internally used c symbol info struct */
-struct CSymInfo {
-    unsigned            Id;             /* Id of file */
-    unsigned short      Kind;           /* Kind of C symbol */
-    unsigned short      SC;             /* Storage class of C symbol */
-    int                 Offs;           /* Offset */
-    union {
-        unsigned        Id;             /* Id of attached asm symbol */
-        SymInfo*        Info;           /* Pointer to attached asm symbol */
-    } Sym;
-    union {
-        unsigned        Id;             /* Id of type */
-        TypeInfo*       Info;           /* Pointer to type */
-    } Type;
-    union {
-        unsigned        Id;             /* Id of scope */
-        ScopeInfo*      Info;           /* Pointer to scope */
-    } Scope;
-    char                Name[1];        /* Name of file with full path */
-};
-
-/* Internally used file info struct */
-struct FileInfo {
-    unsigned            Id;             /* Id of file */
-    unsigned long       Size;           /* Size of file */
-    unsigned long       MTime;          /* Modification time */
-    Collection          ModInfoByName;  /* Modules in which this file is used */
-    Collection          LineInfoByLine; /* Line infos sorted by line */
-    char                Name[1];        /* Name of file with full path */
-};
-
-/* Internally used library info struct */
-struct LibInfo {
-    unsigned            Id;             /* Id of library */
-    char                Name[1];        /* Name of library with path */
-};
-
-/* Internally used line info struct */
-struct LineInfo {
-    unsigned            Id;             /* Id of line info */
-    cc65_line           Line;           /* Line number */
-    union {
-        unsigned        Id;             /* Id of file */
-        FileInfo*       Info;           /* Pointer to file info */
-    } File;
-    cc65_line_type      Type;           /* Type of line */
-    unsigned            Count;          /* Nesting counter for macros */
-    Collection          SpanInfoList;   /* List of spans for this line */
-};
-
-/* Internally used module info struct */
-struct ModInfo {
-    unsigned            Id;             /* Id of library */
-    union {
-        unsigned        Id;             /* Id of main source file */
-        FileInfo*       Info;           /* Pointer to file info */
-    } File;
-    union {
-        unsigned        Id;             /* Id of library if any */
-        LibInfo*        Info;           /* Pointer to library info */
-    } Lib;
-    ScopeInfo*          MainScope;      /* Pointer to main scope */
-    Collection          CSymFuncByName; /* C functions by name */
-    Collection          FileInfoByName; /* Files for this module */
-    Collection          ScopeInfoByName;/* Scopes for this module */
-    char                Name[1];        /* Name of module with path */
-};
-
-/* Internally used scope info struct */
-struct ScopeInfo {
-    unsigned            Id;             /* Id of scope */
-    cc65_scope_type     Type;           /* Type of scope */
-    cc65_size           Size;           /* Size of scope */
-    union {
-        unsigned        Id;             /* Id of module */
-        ModInfo*        Info;           /* Pointer to module info */
-    } Mod;
-    union {
-        unsigned        Id;             /* Id of parent scope */
-        ScopeInfo*      Info;           /* Pointer to parent scope */
-    } Parent;
-    union {
-        unsigned        Id;             /* Id of label symbol */
-        SymInfo*        Info;           /* Pointer to label symbol */
-    } Label;
-    CSymInfo*           CSymFunc;       /* C function for this scope */
-    Collection          SpanInfoList;   /* List of spans for this scope */
-    Collection          SymInfoByName;  /* Symbols in this scope */
-    Collection*         CSymInfoByName; /* C symbols for this scope */
-    Collection*         ChildScopeList; /* Child scopes of this scope */
-    char                Name[1];        /* Name of scope */
-};
-
-/* Internally used segment info struct */
-struct SegInfo {
-    unsigned            Id;             /* Id of segment */
-    cc65_addr           Start;          /* Start address of segment */
-    cc65_size           Size;           /* Size of segment */
-    char*               OutputName;     /* Name of output file */
-    unsigned long       OutputOffs;     /* Offset in output file */
-    char                Name[1];        /* Name of segment */
-};
-
-/* Internally used span info struct */
-struct SpanInfo {
-    unsigned            Id;             /* Id of span */
-    cc65_addr           Start;          /* Start of span */
-    cc65_addr           End;            /* End of span */
-    union {
-        unsigned        Id;             /* Id of segment */
-        SegInfo*        Info;           /* Pointer to segment */
-    } Seg;
-    union {
-        unsigned        Id;             /* Id of type */
-        TypeInfo*       Info;           /* Pointer to type */
-    } Type;
-    Collection*         ScopeInfoList;  /* Scopes for this span */
-    Collection*         LineInfoList;   /* Lines for this span */
-};
-
-/* Internally used symbol info struct */
-struct SymInfo {
-    unsigned            Id;             /* Id of symbol */
-    cc65_symbol_type    Type;           /* Type of symbol */
-    long                Value;          /* Value of symbol */
-    cc65_size           Size;           /* Size of symbol */
-    union {
-        unsigned        Id;             /* Id of export if any */
-        SymInfo*        Info;           /* Pointer to export if any */
-    } Exp;
-    union {
-        unsigned        Id;             /* Id of segment if any */
-        SegInfo*        Info;           /* Pointer to segment if any */
-    } Seg;
-    union {
-        unsigned        Id;             /* Id of symbol scope */
-        ScopeInfo*      Info;           /* Pointer to symbol scope */
-    } Scope;
-    union {
-        unsigned        Id;             /* Parent symbol if any */
-        SymInfo*        Info;           /* Pointer to parent symbol if any */
-    } Parent;
-    CSymInfo*           CSym;           /* Corresponding C symbol */
-    Collection*         ImportList;     /* List of imports if this is an export */
-    Collection*         CheapLocals;    /* List of cheap local symbols */
-    Collection          DefLineInfoList;/* Line info of symbol definition */
-    Collection          RefLineInfoList;/* Line info of symbol references */
-    char                Name[1];        /* Name of symbol */
-};
-
-/* Internally used type info struct */
-struct TypeInfo {
-    unsigned            Id;             /* Id of type */
-    cc65_typedata       Data[1];        /* Data, dynamically allocated */
-};
-
-/* A structure used when parsing a type string into a set of cc65_typedata
-** structures.
-*/
-typedef struct TypeParseData TypeParseData;
-struct TypeParseData {
-    TypeInfo*           Info;
-    unsigned            ItemCount;
-    unsigned            ItemIndex;
-    cc65_typedata*      ItemData;
-    const StrBuf*       Type;
-    unsigned            Pos;
-    unsigned            Error;
-};
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-static void NextToken (InputData* D);
-/* Read the next token from the input stream */
-
-
-
-/*****************************************************************************/
-/*                             Memory allocation                             */
-/*****************************************************************************/
-
-
-
-static void* xmalloc (size_t Size)
-/* Allocate memory, check for out of memory condition. Do some debugging */
-{
-    void* P = 0;
-
-    /* Allow zero sized requests and return NULL in this case */
-    if (Size) {
-
-        /* Allocate memory */
-        P = malloc (Size);
-
-        /* Check for errors */
-        assert (P != 0);
-    }
-
-    /* Return a pointer to the block */
-    return P;
-}
-
-
-
-static void* xrealloc (void* P, size_t Size)
-/* Reallocate a memory block, check for out of memory */
-{
-    /* Reallocate the block */
-    void* N = realloc (P, Size);
-
-    /* Check for errors */
-    assert (N != 0 || Size == 0);
-
-    /* Return the pointer to the new block */
-    return N;
-}
-
-
-
-static void xfree (void* Block)
-/* Free the block, do some debugging */
-{
-    free (Block);
-}
-
-
-
-/*****************************************************************************/
-/*                              Dynamic strings                              */
-/*****************************************************************************/
-
-
-
-static void SB_Done (StrBuf* B)
-/* Free the data of a string buffer (but not the struct itself) */
-{
-    if (B->Allocated) {
-        xfree (B->Buf);
-    }
-}
-
-
-
-static void SB_Realloc (StrBuf* B, unsigned NewSize)
-/* Reallocate the string buffer space, make sure at least NewSize bytes are
-** available.
-*/
-{
-    /* Get the current size, use a minimum of 8 bytes */
-    unsigned NewAllocated = B->Allocated;
-    if (NewAllocated == 0) {
-        NewAllocated = 8;
-    }
-
-    /* Round up to the next power of two */
-    while (NewAllocated < NewSize) {
-        NewAllocated *= 2;
-    }
-
-    /* Reallocate the buffer. Beware: The allocated size may be zero while the
-    ** length is not. This means that we have a buffer that wasn't allocated
-    ** on the heap.
-    */
-    if (B->Allocated) {
-        /* Just reallocate the block */
-        B->Buf = xrealloc (B->Buf, NewAllocated);
-    } else {
-        /* Allocate a new block and copy */
-        B->Buf = memcpy (xmalloc (NewAllocated), B->Buf, B->Len);
-    }
-
-    /* Remember the new block size */
-    B->Allocated = NewAllocated;
-}
-
-
-
-static void SB_CheapRealloc (StrBuf* B, unsigned NewSize)
-/* Reallocate the string buffer space, make sure at least NewSize bytes are
-** available. This function won't copy the old buffer contents over to the new
-** buffer and may be used if the old contents are overwritten later.
-*/
-{
-    /* Get the current size, use a minimum of 8 bytes */
-    unsigned NewAllocated = B->Allocated;
-    if (NewAllocated == 0) {
-        NewAllocated = 8;
-    }
-
-    /* Round up to the next power of two */
-    while (NewAllocated < NewSize) {
-        NewAllocated *= 2;
-    }
-
-    /* Free the old buffer if there is one */
-    if (B->Allocated) {
-        xfree (B->Buf);
-    }
-
-    /* Allocate a fresh block */
-    B->Buf = xmalloc (NewAllocated);
-
-    /* Remember the new block size */
-    B->Allocated = NewAllocated;
-}
-
-
-
-static unsigned SB_GetLen (const StrBuf* B)
-/* Return the length of the buffer contents */
-{
-    return B->Len;
-}
-
-
-
-static char* SB_GetBuf (StrBuf* B)
-/* Return a buffer pointer */
-{
-    return B->Buf;
-}
-
-
-
-static const char* SB_GetConstBuf (const StrBuf* B)
-/* Return a buffer pointer */
-{
-    return B->Buf;
-}
-
-
-
-static char SB_At (const StrBuf* B, unsigned Pos)
-/* Return the character from a specific position */
-{
-    assert (Pos <= B->Len);
-    return B->Buf[Pos];
-}
-
-
-
-static void SB_Terminate (StrBuf* B)
-/* Zero terminate the given string buffer. NOTE: The terminating zero is not
-** accounted for in B->Len, if you want that, you have to use AppendChar!
-*/
-{
-    unsigned NewLen = B->Len + 1;
-    if (NewLen > B->Allocated) {
-        SB_Realloc (B, NewLen);
-    }
-    B->Buf[B->Len] = '\0';
-}
-
-
-
-static void SB_Clear (StrBuf* B)
-/* Clear the string buffer (make it empty) */
-{
-    B->Len = 0;
-}
-
-
-
-static void SB_CopyBuf (StrBuf* Target, const char* Buf, unsigned Size)
-/* Copy Buf to Target, discarding the old contents of Target */
-{
-    if (Size) {
-        if (Target->Allocated < Size) {
-            SB_CheapRealloc (Target, Size);
-        }
-        memcpy (Target->Buf, Buf, Size);
-    }
-    Target->Len = Size;
-}
-
-
-
-static void SB_Copy (StrBuf* Target, const StrBuf* Source)
-/* Copy Source to Target, discarding the old contents of Target */
-{
-    SB_CopyBuf (Target, Source->Buf, Source->Len);
-}
-
-
-
-static void SB_AppendChar (StrBuf* B, int C)
-/* Append a character to a string buffer */
-{
-    unsigned NewLen = B->Len + 1;
-    if (NewLen > B->Allocated) {
-        SB_Realloc (B, NewLen);
-    }
-    B->Buf[B->Len] = (char) C;
-    B->Len = NewLen;
-}
-
-
-
-static char* SB_StrDup (const StrBuf* B)
-/* Return the contents of B as a dynamically allocated string. The string
-** will always be NUL terminated.
-*/
-{
-    /* Allocate memory */
-    char* S = xmalloc (B->Len + 1);
-
-    /* Copy the string */
-    memcpy (S, B->Buf, B->Len);
-
-    /* Terminate it */
-    S[B->Len] = '\0';
-
-    /* And return the result */
-    return S;
-}
-
-
-
-/*****************************************************************************/
-/*                                Collections                                */
-/*****************************************************************************/
-
-
-
-static Collection* CollInit (Collection* C)
-/* Initialize a collection and return it. */
-{
-    /* Intialize the fields. */
-    C->Count = 0;
-    C->Size  = 0;
-    C->Items = 0;
-
-    /* Return the new struct */
-    return C;
-}
-
-
-
-static Collection* CollNew (void)
-/* Allocate a new collection, initialize and return it */
-{
-    return CollInit (xmalloc (sizeof (Collection)));
-}
-
-
-
-static void CollDone (Collection* C)
-/* Free the data for a collection. This will not free the data contained in
-** the collection.
-*/
-{
-    /* Free the pointer array */
-    xfree (C->Items);
-
-    /* Clear the fields, so the collection may be reused (or CollDone called)
-    ** again
-    */
-    C->Count = 0;
-    C->Size  = 0;
-    C->Items = 0;
-}
-
-
-
-static void CollFree (Collection* C)
-/* Free a dynamically allocated collection */
-{
-    /* Accept NULL pointers */
-    if (C) {
-        xfree (C->Items);
-        xfree (C);
-    }
-}
-
-
-
-static unsigned CollCount (const Collection* C)
-/* Return the number of items in the collection. Return 0 if C is NULL. */
-{
-    return C? C->Count : 0;
-}
-
-
-
-static void CollMove (Collection* Source, Collection* Target)
-/* Move all data from one collection to another. This function will first free
-** the data in the target collection, and - after the move - clear the data
-** from the source collection.
-*/
-{
-    /* Free the target collection data */
-    xfree (Target->Items);
-
-    /* Now copy the whole bunch over */
-    *Target = *Source;
-
-    /* Empty Source */
-    Source->Count = 0;
-    Source->Size  = 0;
-    Source->Items = 0;
-}
-
-
-
-static void CollGrow (Collection* C, unsigned Size)
-/* Grow the collection C so it is able to hold Size items without a resize
-** being necessary. This can be called for performance reasons if the number
-** of items to be placed in the collection is known in advance.
-*/
-{
-    CollEntry* NewItems;
-
-    /* Ignore the call if the collection is already large enough */
-    if (Size <= C->Size) {
-        return;
-    }
-
-    /* Grow the collection */
-    C->Size = Size;
-    NewItems = xmalloc (C->Size * sizeof (CollEntry));
-    memcpy (NewItems, C->Items, C->Count * sizeof (CollEntry));
-    xfree (C->Items);
-    C->Items = NewItems;
-}
-
-
-
-static void CollPrepareInsert (Collection* C, unsigned Index)
-/* Prepare for insertion of the data at a given position in the collection */
-{
-    /* Check for invalid indices */
-    assert (Index <= C->Count);
-
-    /* Grow the array if necessary */
-    if (C->Count >= C->Size) {
-        /* Must grow */
-        CollGrow (C, (C->Size == 0)? 1 : C->Size * 2);
-    }
-
-    /* Move the existing elements if needed */
-    if (C->Count != Index) {
-        memmove (C->Items+Index+1, C->Items+Index, (C->Count-Index) * sizeof (void*));
-    }
-    ++C->Count;
-}
-
-
-
-static void CollInsert (Collection* C, void* Item, unsigned Index)
-/* Insert the data at the given position in the collection */
-{
-    /* Prepare for insertion (free the given slot) */
-    CollPrepareInsert (C, Index);
-
-    /* Store the new item */
-    C->Items[Index].Ptr = Item;
-}
-
-
-
-static void CollInsertId (Collection* C, unsigned Id, unsigned Index)
-/* Insert the data at the given position in the collection */
-{
-    /* Prepare for insertion (free the given slot) */
-    CollPrepareInsert (C, Index);
-
-    /* Store the new item */
-    C->Items[Index].Id = Id;
-}
-
-
-
-static void CollReplace (Collection* C, void* Item, unsigned Index)
-/* Replace the item at the given position by a new one */
-{
-    /* Check the index */
-    assert (Index < C->Count);
-
-    /* Replace the element */
-    C->Items[Index].Ptr = Item;
-}
-
-
-
-static void CollReplaceExpand (Collection* C, void* Item, unsigned Index)
-/* If Index is a valid index for the collection, replace the item at this
-** position by the one passed. If the collection is too small, expand it,
-** filling unused pointers with NULL, then add the new item at the given
-** position.
-*/
-{
-    if (Index < C->Count) {
-        /* Collection is already large enough */
-        C->Items[Index].Ptr = Item;
-    } else {
-        /* Must expand the collection */
-        unsigned Size = C->Size;
-        if (Size == 0) {
-            Size = 2;
-        }
-        while (Index >= Size) {
-            Size *= 2;
-        }
-        CollGrow (C, Size);
-
-        /* Fill up unused slots with NULL */
-        while (C->Count < Index) {
-            C->Items[C->Count++].Ptr = 0;
-        }
-
-        /* Fill in the item */
-        C->Items[C->Count++].Ptr = Item;
-    }
-}
-
-
-
-static void CollAppend (Collection* C, void* Item)
-/* Append an item to the end of the collection */
-{
-    /* Insert the item at the end of the current list */
-    CollInsert (C, Item, C->Count);
-}
-
-
-
-static void CollAppendId (Collection* C, unsigned Id)
-/* Append an id to the end of the collection */
-{
-    /* Insert the id at the end of the current list */
-    CollInsertId (C, Id, C->Count);
-}
-
-
-
-static void* CollAt (const Collection* C, unsigned Index)
-/* Return the item at the given index */
-{
-    /* Check the index */
-    assert (Index < C->Count);
-
-    /* Return the element */
-    return C->Items[Index].Ptr;
-}
-
-
-
-static unsigned CollIdAt (const Collection* C, unsigned Index)
-/* Return the id at the given index */
-{
-    /* Check the index */
-    assert (Index < C->Count);
-
-    /* Return the element */
-    return C->Items[Index].Id;
-}
-
-
-
-static void CollQuickSort (Collection* C, int Lo, int Hi,
-                           int (*Compare) (const void*, const void*))
-/* Internal recursive sort function. */
-{
-    /* Get a pointer to the items */
-    CollEntry* Items = C->Items;
-
-    /* Quicksort */
-    while (Hi > Lo) {
-        int I = Lo + 1;
-        int J = Hi;
-        while (I <= J) {
-            while (I <= J && Compare (Items[Lo].Ptr, Items[I].Ptr) >= 0) {
-                ++I;
-            }
-            while (I <= J && Compare (Items[Lo].Ptr, Items[J].Ptr) < 0) {
-                --J;
-            }
-            if (I <= J) {
-                /* Swap I and J */
-                CollEntry Tmp = Items[I];
-                Items[I]  = Items[J];
-                Items[J]  = Tmp;
-                ++I;
-                --J;
-            }
-        }
-        if (J != Lo) {
-            /* Swap J and Lo */
-            CollEntry Tmp = Items[J];
-            Items[J]  = Items[Lo];
-            Items[Lo] = Tmp;
-        }
-        if (J > (Hi + Lo) / 2) {
-            CollQuickSort (C, J + 1, Hi, Compare);
-            Hi = J - 1;
-        } else {
-            CollQuickSort (C, Lo, J - 1, Compare);
-            Lo = J + 1;
-        }
-    }
-}
-
-
-
-static void CollSort (Collection* C, int (*Compare) (const void*, const void*))
-/* Sort the collection using the given compare function. */
-{
-    if (C->Count > 1) {
-        CollQuickSort (C, 0, C->Count-1, Compare);
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                              Debugging stuff                              */
-/*****************************************************************************/
-
-
-
-#if DEBUG
-
-/* Output */
-#define DBGPRINT(format, ...)   printf ((format), __VA_ARGS__)
-
-
-
-static void DumpFileInfo (Collection* FileInfos)
-/* Dump a list of file infos */
-{
-    unsigned I;
-
-    /* File info */
-    for (I = 0; I < CollCount (FileInfos); ++I) {
-        const FileInfo* FI = CollAt (FileInfos, I);
-        printf ("File info %u:\n"
-                "  Name:   %s\n"
-                "  Size:   %lu\n"
-                "  MTime:  %lu\n",
-                FI->Id,
-                FI->Name,
-                (unsigned long) FI->Size,
-                (unsigned long) FI->MTime);
-    }
-}
-
-
-
-static void DumpOneLineInfo (unsigned Num, LineInfo* LI)
-/* Dump one line info entry */
-{
-    printf ("  Index:  %u\n"
-            "    File:   %s\n"
-            "    Line:   %lu\n"
-            "    Range:  0x%06lX-0x%06lX\n"
-            "    Type:   %u\n"
-            "    Count:  %u\n",
-            Num,
-            LI->File.Info->Name,
-            (unsigned long) LI->Line,
-            (unsigned long) LI->Start,
-            (unsigned long) LI->End,
-            LI->Type,
-            LI->Count);
-}
-
-
-
-static void DumpSpanInfo (SpanInfoList* L)
-/* Dump a list of span infos */
-{
-    unsigned I, J;
-
-    /* Line info */
-    for (I = 0; I < L->Count; ++I) {
-        const SpanInfoListEntry* E = &L->List[I];
-        printf ("Addr:   %lu\n", (unsigned long) E->Addr);
-        if (E->Count == 1) {
-            DumpOneLineInfo (0, E->Data);
-        } else {
-            for (J = 0; J < E->Count; ++J) {
-                DumpOneLineInfo (J, ((LineInfo**) E->Data)[J]);
-            }
-        }
-    }
-}
-
-
-
-static void DumpData (InputData* D)
-/* Dump internal data to stdout for debugging */
-{
-    /* Dump data */
-    DumpFileInfo (&D->Info->FileInfoById);
-    DumpLineInfo (&D->Info->LineInfoByAddr);
-}
-#else
-
-/* No output */
-#ifdef __WATCOMC__
-static void DBGPRINT(const char* format, ...) {}
-#else
-#define DBGPRINT(format, ...)
-#endif
-
-#endif
-
-
-
-/*****************************************************************************/
-/*                             Helper functions                              */
-/*****************************************************************************/
-
-
-
-static unsigned GetId (const void* Data)
-/* Return the id of one of the info structures. All structures have the Id
-** field as first member, and the C standard allows converting a union pointer
-** to the data type of the first member, so this is safe and portable.
-*/
-{
-    if (Data) {
-        return *(const unsigned*)Data;
-    } else {
-        return CC65_INV_ID;
-    }
-}
-
-
-
-static unsigned HexValue (char C)
-/* Convert the ascii representation of a hex nibble into the hex nibble */
-{
-    if (isdigit (C)) {
-        return C - '0';
-    } else if (islower (C)) {
-        return C - 'a' + 10;
-    } else {
-        return C - 'A' + 10;
-    }
-}
-
-
-
-static void ParseError (InputData* D, cc65_error_severity Type, const char* Msg, ...)
-/* Call the user supplied parse error function */
-{
-    va_list             ap;
-    int                 MsgSize;
-    cc65_parseerror*    E;
-
-    /* Test-format the error message so we know how much space to allocate */
-    va_start (ap, Msg);
-    MsgSize = vsnprintf (0, 0, Msg, ap);
-    va_end (ap);
-
-    /* Allocate memory */
-    E = xmalloc (sizeof (*E) + MsgSize);
-
-    /* Write data to E */
-    E->type   = Type;
-    E->name   = D->FileName;
-    E->line   = D->SLine;
-    E->column = D->SCol;
-    va_start (ap, Msg);
-    vsnprintf (E->errormsg, MsgSize+1, Msg, ap);
-    va_end (ap);
-
-    /* Call the caller:-) */
-    D->Error (E);
-
-    /* Free the data structure */
-    xfree (E);
-
-    /* Count errors */
-    if (Type == CC65_ERROR) {
-        ++D->Errors;
-    }
-}
-
-
-
-static void SkipLine (InputData* D)
-/* Error recovery routine. Skip tokens until EOL or EOF is reached */
-{
-    while (D->Tok != TOK_EOL && D->Tok != TOK_EOF) {
-        NextToken (D);
-    }
-}
-
-
-
-static void UnexpectedToken (InputData* D)
-/* Call ParseError with a message about an unexpected input token */
-{
-    ParseError (D, CC65_ERROR, "Unexpected input token %d", D->Tok);
-    SkipLine (D);
-}
-
-
-
-static void UnknownKeyword (InputData* D)
-/* Print a warning about an unknown keyword in the file. Try to do smart
-** recovery, so if later versions of the debug information add additional
-** keywords, this code may be able to at least ignore them.
-*/
-{
-    /* Output a warning */
-    ParseError (D, CC65_WARNING, "Unknown keyword \"%s\" - skipping",
-                SB_GetConstBuf (&D->SVal));
-
-    /* Skip the identifier */
-    NextToken (D);
-
-    /* If an equal sign follows, ignore anything up to the next line end
-    ** or comma. If a comma or line end follows, we're already done. If
-    ** we have none of both, we ignore the remainder of the line.
-    */
-    if (D->Tok == TOK_EQUAL) {
-        NextToken (D);
-        while (D->Tok != TOK_COMMA && D->Tok != TOK_EOL && D->Tok != TOK_EOF) {
-            NextToken (D);
-        }
-    } else if (D->Tok != TOK_COMMA && D->Tok != TOK_EOL && D->Tok != TOK_EOF) {
-        SkipLine (D);
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                               C symbol info                               */
-/*****************************************************************************/
-
-
-
-static CSymInfo* NewCSymInfo (const StrBuf* Name)
-/* Create a new CSymInfo struct and return it */
-{
-    /* Allocate memory */
-    CSymInfo* S = xmalloc (sizeof (CSymInfo) + SB_GetLen (Name));
-
-    /* Initialize it */
-    memcpy (S->Name, SB_GetConstBuf (Name), SB_GetLen (Name) + 1);
-
-    /* Return it */
-    return S;
-}
-
-
-
-static void FreeCSymInfo (CSymInfo* S)
-/* Free a CSymInfo struct */
-{
-    /* Free the structure itself */
-    xfree (S);
-}
-
-
-
-static cc65_csyminfo* new_cc65_csyminfo (unsigned Count)
-/* Allocate and return a cc65_csyminfo struct that is able to hold Count
-** entries. Initialize the count field of the returned struct.
-*/
-{
-    cc65_csyminfo* S = xmalloc (sizeof (*S) - sizeof (S->data[0]) +
-                                Count * sizeof (S->data[0]));
-    S->count = Count;
-    return S;
-}
-
-
-
-static void CopyCSymInfo (cc65_csymdata* D, const CSymInfo* S)
-/* Copy data from a CSymInfo struct to a cc65_csymdata struct */
-{
-    D->csym_id      = S->Id;
-    D->csym_kind    = S->Kind;
-    D->csym_sc      = S->SC;
-    D->csym_offs    = S->Offs;
-    D->type_id      = GetId (S->Type.Info);
-    D->symbol_id    = GetId (S->Sym.Info);
-    D->scope_id     = GetId (S->Scope.Info);
-    D->csym_name    = S->Name;
-}
-
-
-
-static int CompareCSymInfoByName (const void* L, const void* R)
-/* Helper function to sort c symbol infos in a collection by name */
-{
-    /* Sort by symbol name, then by id */
-    int Res = strcmp (((const CSymInfo*) L)->Name, ((const CSymInfo*) R)->Name);
-    if (Res == 0) {
-        Res = (int)((const CSymInfo*) L)->Id - (int)((const CSymInfo*) R)->Id;
-    }
-    return Res;
-}
-
-
-
-/*****************************************************************************/
-/*                                 File info                                 */
-/*****************************************************************************/
-
-
-
-static FileInfo* NewFileInfo (const StrBuf* Name)
-/* Create a new FileInfo struct and return it */
-{
-    /* Allocate memory */
-    FileInfo* F = xmalloc (sizeof (FileInfo) + SB_GetLen (Name));
-
-    /* Initialize it */
-    CollInit (&F->ModInfoByName);
-    CollInit (&F->LineInfoByLine);
-    memcpy (F->Name, SB_GetConstBuf (Name), SB_GetLen (Name) + 1);
-
-    /* Return it */
-    return F;
-}
-
-
-
-static void FreeFileInfo (FileInfo* F)
-/* Free a FileInfo struct */
-{
-    /* Delete the collections */
-    CollDone (&F->ModInfoByName);
-    CollDone (&F->LineInfoByLine);
-
-    /* Free the file info structure itself */
-    xfree (F);
-}
-
-
-
-static cc65_sourceinfo* new_cc65_sourceinfo (unsigned Count)
-/* Allocate and return a cc65_sourceinfo struct that is able to hold Count
-** entries. Initialize the count field of the returned struct.
-*/
-{
-    cc65_sourceinfo* S = xmalloc (sizeof (*S) - sizeof (S->data[0]) +
-                                  Count * sizeof (S->data[0]));
-    S->count = Count;
-    return S;
-}
-
-
-
-static void CopyFileInfo (cc65_sourcedata* D, const FileInfo* F)
-/* Copy data from a FileInfo struct to a cc65_sourcedata struct */
-{
-    D->source_id    = F->Id;
-    D->source_name  = F->Name;
-    D->source_size  = F->Size;
-    D->source_mtime = F->MTime;
-}
-
-
-
-static int CompareFileInfoByName (const void* L, const void* R)
-/* Helper function to sort file infos in a collection by name */
-{
-    /* Sort by file name. If names are equal, sort by timestamp,
-    ** then sort by size. Which means, identical files will go
-    ** together.
-    */
-    int Res = strcmp (((const FileInfo*) L)->Name,
-                      ((const FileInfo*) R)->Name);
-    if (Res != 0) {
-        return Res;
-    }
-    if (((const FileInfo*) L)->MTime > ((const FileInfo*) R)->MTime) {
-        return 1;
-    } else if (((const FileInfo*) L)->MTime < ((const FileInfo*) R)->MTime) {
-        return -1;
-    }
-    if (((const FileInfo*) L)->Size > ((const FileInfo*) R)->Size) {
-        return 1;
-    } else if (((const FileInfo*) L)->Size < ((const FileInfo*) R)->Size) {
-        return -1;
-    } else {
-        return 0;
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                               Library info                                */
-/*****************************************************************************/
-
-
-
-static LibInfo* NewLibInfo (const StrBuf* Name)
-/* Create a new LibInfo struct, intialize and return it */
-{
-    /* Allocate memory */
-    LibInfo* L = xmalloc (sizeof (LibInfo) + SB_GetLen (Name));
-
-    /* Initialize the name */
-    memcpy (L->Name, SB_GetConstBuf (Name), SB_GetLen (Name) + 1);
-
-    /* Return it */
-    return L;
-}
-
-
-
-static void FreeLibInfo (LibInfo* L)
-/* Free a LibInfo struct */
-{
-    xfree (L);
-}
-
-
-
-static cc65_libraryinfo* new_cc65_libraryinfo (unsigned Count)
-/* Allocate and return a cc65_libraryinfo struct that is able to hold Count
-** entries. Initialize the count field of the returned struct.
-*/
-{
-    cc65_libraryinfo* L = xmalloc (sizeof (*L) - sizeof (L->data[0]) +
-                                   Count * sizeof (L->data[0]));
-    L->count = Count;
-    return L;
-}
-
-
-
-static void CopyLibInfo (cc65_librarydata* D, const LibInfo* L)
-/* Copy data from a LibInfo struct to a cc65_librarydata struct */
-{
-    D->library_id   = L->Id;
-    D->library_name = L->Name;
-}
-
-
-
-/*****************************************************************************/
-/*                                 Line info                                 */
-/*****************************************************************************/
-
-
-
-static LineInfo* NewLineInfo (void)
-/* Create a new LineInfo struct and return it */
-{
-    /* Allocate memory */
-    LineInfo* L = xmalloc (sizeof (LineInfo));
-
-    /* Initialize and return it */
-    CollInit (&L->SpanInfoList);
-    return L;
-}
-
-
-
-static void FreeLineInfo (LineInfo* L)
-/* Free a LineInfo struct */
-{
-    CollDone (&L->SpanInfoList);
-    xfree (L);
-}
-
-
-
-static cc65_lineinfo* new_cc65_lineinfo (unsigned Count)
-/* Allocate and return a cc65_lineinfo struct that is able to hold Count
-** entries. Initialize the count field of the returned struct.
-*/
-{
-    cc65_lineinfo* L = xmalloc (sizeof (*L) - sizeof (L->data[0]) +
-                                Count * sizeof (L->data[0]));
-    L->count = Count;
-    return L;
-}
-
-
-
-static void CopyLineInfo (cc65_linedata* D, const LineInfo* L)
-/* Copy data from a LineInfo struct to a cc65_linedata struct */
-{
-    D->line_id          = L->Id;
-    D->source_id        = L->File.Info->Id;
-    D->source_line      = L->Line;
-    D->line_type        = L->Type;
-    D->count            = L->Count;
-}
-
-
-
-static int CompareLineInfoByLine (const void* L, const void* R)
-/* Helper function to sort line infos in a collection by line. */
-{
-    int Left  = ((const LineInfo*) L)->Line;
-    int Right = ((const LineInfo*) R)->Line;
-    return Left - Right;
-}
-
-
-
-/*****************************************************************************/
-/*                                Module info                                */
-/*****************************************************************************/
-
-
-
-static ModInfo* NewModInfo (const StrBuf* Name)
-/* Create a new ModInfo struct, intialize and return it */
-{
-    /* Allocate memory */
-    ModInfo* M = xmalloc (sizeof (ModInfo) + SB_GetLen (Name));
-
-    /* Initialize it */
-    M->MainScope = 0;
-    CollInit (&M->CSymFuncByName);
-    CollInit (&M->FileInfoByName);
-    CollInit (&M->ScopeInfoByName);
-    memcpy (M->Name, SB_GetConstBuf (Name), SB_GetLen (Name) + 1);
-
-    /* Return it */
-    return M;
-}
-
-
-
-static void FreeModInfo (ModInfo* M)
-/* Free a ModInfo struct */
-{
-    /* Free the collections */
-    CollDone (&M->CSymFuncByName);
-    CollDone (&M->FileInfoByName);
-    CollDone (&M->ScopeInfoByName);
-
-    /* Free the structure itself */
-    xfree (M);
-}
-
-
-
-static cc65_moduleinfo* new_cc65_moduleinfo (unsigned Count)
-/* Allocate and return a cc65_moduleinfo struct that is able to hold Count
-** entries. Initialize the count field of the returned struct.
-*/
-{
-    cc65_moduleinfo* M = xmalloc (sizeof (*M) - sizeof (M->data[0]) +
-                                  Count * sizeof (M->data[0]));
-    M->count = Count;
-    return M;
-}
-
-
-
-static void CopyModInfo (cc65_moduledata* D, const ModInfo* M)
-/* Copy data from a ModInfo struct to a cc65_moduledata struct */
-{
-    D->module_id    = M->Id;
-    D->module_name  = M->Name;
-    D->source_id    = M->File.Info->Id;
-    D->library_id   = GetId (M->Lib.Info);
-    D->scope_id     = GetId (M->MainScope);
-}
-
-
-
-static int CompareModInfoByName (const void* L, const void* R)
-/* Helper function to sort module infos in a collection by name */
-{
-    /* Compare module name */
-    return strcmp (((const ModInfo*) L)->Name, ((const ModInfo*) R)->Name);
-}
-
-
-
-/*****************************************************************************/
-/*                                Scope info                                 */
-/*****************************************************************************/
-
-
-
-static ScopeInfo* NewScopeInfo (const StrBuf* Name)
-/* Create a new ScopeInfo struct, intialize and return it */
-{
-    /* Allocate memory */
-    ScopeInfo* S = xmalloc (sizeof (ScopeInfo) + SB_GetLen (Name));
-
-    /* Initialize the fields as necessary */
-    S->CSymFunc = 0;
-    CollInit (&S->SpanInfoList);
-    CollInit (&S->SymInfoByName);
-    S->CSymInfoByName = 0;
-    S->ChildScopeList = 0;
-    memcpy (S->Name, SB_GetConstBuf (Name), SB_GetLen (Name) + 1);
-
-    /* Return it */
-    return S;
-}
-
-
-
-static void FreeScopeInfo (ScopeInfo* S)
-/* Free a ScopeInfo struct */
-{
-    CollDone (&S->SpanInfoList);
-    CollDone (&S->SymInfoByName);
-    CollFree (S->CSymInfoByName);
-    CollFree (S->ChildScopeList);
-    xfree (S);
-}
-
-
-
-static cc65_scopeinfo* new_cc65_scopeinfo (unsigned Count)
-/* Allocate and return a cc65_scopeinfo struct that is able to hold Count
-** entries. Initialize the count field of the returned struct.
-*/
-{
-    cc65_scopeinfo* S = xmalloc (sizeof (*S) - sizeof (S->data[0]) +
-                                 Count * sizeof (S->data[0]));
-    S->count = Count;
-    return S;
-}
-
-
-
-static void CopyScopeInfo (cc65_scopedata* D, const ScopeInfo* S)
-/* Copy data from a ScopeInfo struct to a cc65_scopedata struct */
-{
-    D->scope_id     = S->Id;
-    D->scope_name   = S->Name;
-    D->scope_type   = S->Type;
-    D->scope_size   = S->Size;
-    D->parent_id    = GetId (S->Parent.Info);
-    D->symbol_id    = GetId (S->Label.Info);
-    D->module_id    = S->Mod.Info->Id;
-}
-
-
-
-static int CompareScopeInfoByName (const void* L, const void* R)
-/* Helper function to sort scope infos in a collection by name */
-{
-    const ScopeInfo* Left  = L;
-    const ScopeInfo* Right = R;
-
-    /* Compare scope name, then id */
-    int Res = strcmp (Left->Name, Right->Name);
-    if (Res == 0) {
-        Res = (int)Left->Id - (int)Right->Id;
-    }
-    return Res;
-}
-
-
-
-/*****************************************************************************/
-/*                               Segment info                                */
-/*****************************************************************************/
-
-
-
-static SegInfo* NewSegInfo (const StrBuf* Name, unsigned Id,
-                            cc65_addr Start, cc65_addr Size,
-                            const StrBuf* OutputName, unsigned long OutputOffs)
-/* Create a new SegInfo struct and return it */
-{
-    /* Allocate memory */
-    SegInfo* S = xmalloc (sizeof (SegInfo) + SB_GetLen (Name));
-
-    /* Initialize it */
-    S->Id         = Id;
-    S->Start      = Start;
-    S->Size       = Size;
-    if (SB_GetLen (OutputName) > 0) {
-        /* Output file given */
-        S->OutputName = SB_StrDup (OutputName);
-        S->OutputOffs = OutputOffs;
-    } else {
-        /* No output file given */
-        S->OutputName = 0;
-        S->OutputOffs = 0;
-    }
-    memcpy (S->Name, SB_GetConstBuf (Name), SB_GetLen (Name) + 1);
-
-    /* Return it */
-    return S;
-}
-
-
-
-static void FreeSegInfo (SegInfo* S)
-/* Free a SegInfo struct */
-{
-    xfree (S->OutputName);
-    xfree (S);
-}
-
-
-
-static cc65_segmentinfo* new_cc65_segmentinfo (unsigned Count)
-/* Allocate and return a cc65_segmentinfo struct that is able to hold Count
-** entries. Initialize the count field of the returned struct.
-*/
-{
-    cc65_segmentinfo* S = xmalloc (sizeof (*S) - sizeof (S->data[0]) +
-                                   Count * sizeof (S->data[0]));
-    S->count = Count;
-    return S;
-}
-
-
-
-static void CopySegInfo (cc65_segmentdata* D, const SegInfo* S)
-/* Copy data from a SegInfo struct to a cc65_segmentdata struct */
-{
-    D->segment_id    = S->Id;
-    D->segment_name  = S->Name;
-    D->segment_start = S->Start;
-    D->segment_size  = S->Size;
-    D->output_name   = S->OutputName;
-    D->output_offs   = S->OutputOffs;
-}
-
-
-
-static int CompareSegInfoByName (const void* L, const void* R)
-/* Helper function to sort segment infos in a collection by name */
-{
-    /* Sort by file name */
-    return strcmp (((const SegInfo*) L)->Name,
-                   ((const SegInfo*) R)->Name);
-}
-
-
-
-/*****************************************************************************/
-/*                                 Span info                                 */
-/*****************************************************************************/
-
-
-
-static SpanInfo* NewSpanInfo (void)
-/* Create a new SpanInfo struct, intialize and return it */
-{
-    /* Allocate memory */
-    SpanInfo* S = xmalloc (sizeof (SpanInfo));
-
-    /* Initialize and return it */
-    S->ScopeInfoList = 0;
-    S->LineInfoList = 0;
-    return S;
-}
-
-
-
-static void FreeSpanInfo (SpanInfo* S)
-/* Free a SpanInfo struct */
-{
-    CollFree (S->ScopeInfoList);
-    CollFree (S->LineInfoList);
-    xfree (S);
-}
-
-
-
-static cc65_spaninfo* new_cc65_spaninfo (unsigned Count)
-/* Allocate and return a cc65_spaninfo struct that is able to hold Count
-** entries. Initialize the count field of the returned struct.
-*/
-{
-    cc65_spaninfo* S = xmalloc (sizeof (*S) - sizeof (S->data[0]) +
-                                Count * sizeof (S->data[0]));
-    S->count = Count;
-    return S;
-}
-
-
-
-static void CopySpanInfo (cc65_spandata* D, const SpanInfo* S)
-/* Copy data from a SpanInfo struct to a cc65_spandata struct */
-{
-    D->span_id      = S->Id;
-    D->span_start   = S->Start;
-    D->span_end     = S->End;
-    D->segment_id   = S->Seg.Info->Id;
-    D->type_id      = GetId (S->Type.Info);
-    D->scope_count  = CollCount (S->ScopeInfoList);
-    D->line_count   = CollCount (S->LineInfoList);
-}
-
-
-
-static int CompareSpanInfoByAddr (const void* L, const void* R)
-/* Helper function to sort span infos in a collection by address. Span infos
-** with smaller start address are considered smaller. If start addresses are
-** equal, line spans with smaller end address are considered smaller. This
-** means, that when CompareSpanInfoByAddr is used for sorting, a range with
-** identical start addresses will have smaller spans first, followed by
-** larger spans.
-*/
-{
-    /* Sort by start of span */
-    if (((const SpanInfo*) L)->Start > ((const SpanInfo*) R)->Start) {
-        return 1;
-    } else if (((const SpanInfo*) L)->Start < ((const SpanInfo*) R)->Start) {
-        return -1;
-    } else if (((const SpanInfo*) L)->End > ((const SpanInfo*) R)->End) {
-        return 1;
-    } else if (((const SpanInfo*) L)->End < ((const SpanInfo*) R)->End) {
-        return -1;
-    } else {
-        return 0;
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                Symbol info                                */
-/*****************************************************************************/
-
-
-
-static SymInfo* NewSymInfo (const StrBuf* Name)
-/* Create a new SymInfo struct, intialize and return it */
-{
-    /* Allocate memory */
-    SymInfo* S = xmalloc (sizeof (SymInfo) + SB_GetLen (Name));
-
-    /* Initialize it as necessary */
-    S->CSym        = 0;
-    S->ImportList  = 0;
-    S->CheapLocals = 0;
-    CollInit (&S->DefLineInfoList);
-    CollInit (&S->RefLineInfoList);
-    memcpy (S->Name, SB_GetConstBuf (Name), SB_GetLen (Name) + 1);
-
-    /* Return it */
-    return S;
-}
-
-
-
-static void FreeSymInfo (SymInfo* S)
-/* Free a SymInfo struct */
-{
-    CollFree (S->ImportList);
-    CollFree (S->CheapLocals);
-    CollDone (&S->DefLineInfoList);
-    CollDone (&S->RefLineInfoList);
-    xfree (S);
-}
-
-
-
-static cc65_symbolinfo* new_cc65_symbolinfo (unsigned Count)
-/* Allocate and return a cc65_symbolinfo struct that is able to hold Count
-** entries. Initialize the count field of the returned struct.
-*/
-{
-    cc65_symbolinfo* S = xmalloc (sizeof (*S) - sizeof (S->data[0]) +
-                                  Count * sizeof (S->data[0]));
-    S->count = Count;
-    return S;
-}
-
-
-
-static void CopySymInfo (cc65_symboldata* D, const SymInfo* S)
-/* Copy data from a SymInfo struct to a cc65_symboldata struct */
-{
-    SegInfo* Seg;
-
-    D->symbol_id        = S->Id;
-    D->symbol_name      = S->Name;
-    D->symbol_type      = S->Type;
-    D->symbol_size      = S->Size;
-
-    /* If this is an import, it doesn't have a value or segment. Use the data
-    ** from the matching export instead.
-    */
-    if (S->Exp.Info) {
-        /* This is an import, because it has a matching export */
-        D->export_id    = S->Exp.Info->Id;
-        D->symbol_value = S->Exp.Info->Value;
-        Seg             = S->Exp.Info->Seg.Info;
-    } else {
-        D->export_id    = CC65_INV_ID;
-        D->symbol_value = S->Value;
-        Seg             = S->Seg.Info;
-    }
-    if (Seg) {
-        D->segment_id   = Seg->Id;
-    } else {
-        D->segment_id   = CC65_INV_ID;
-    }
-    D->scope_id         = S->Scope.Info->Id;
-    if (S->Parent.Info) {
-        D->parent_id    = S->Parent.Info->Id;
-    } else {
-        D->parent_id    = CC65_INV_ID;
-    }
-}
-
-
-
-static int CompareSymInfoByName (const void* L, const void* R)
-/* Helper function to sort symbol infos in a collection by name */
-{
-    /* Sort by symbol name */
-    return strcmp (((const SymInfo*) L)->Name,
-                   ((const SymInfo*) R)->Name);
-}
-
-
-
-static int CompareSymInfoByVal (const void* L, const void* R)
-/* Helper function to sort symbol infos in a collection by value */
-{
-    /* Sort by symbol value. If both are equal, sort by symbol name so it
-    ** looks nice when such a list is returned.
-    */
-    if (((const SymInfo*) L)->Value > ((const SymInfo*) R)->Value) {
-        return 1;
-    } else if (((const SymInfo*) L)->Value < ((const SymInfo*) R)->Value) {
-        return -1;
-    } else {
-        return CompareSymInfoByName (L, R);
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                 Type info                                 */
-/*****************************************************************************/
-
-
-
-/* The following definitions are actually just taken from gentype.h */
-
-/* Size of a data type */
-#define GT_SIZE_1               0x00U
-#define GT_SIZE_2               0x01U
-#define GT_SIZE_3               0x02U
-#define GT_SIZE_4               0x03U
-#define GT_SIZE_MASK            0x07U
-
-#define GT_GET_SIZE(x)          (((x) & GT_SIZE_MASK) + 1U)
-
-/* Sign of the data type */
-#define GT_UNSIGNED             0x00U
-#define GT_SIGNED               0x08U
-#define GT_SIGN_MASK            0x08U
-
-#define GT_HAS_SIGN(x)          (((x) & GT_SIZE_MASK) == GT_SIGNED)
-
-/* Byte order */
-#define GT_LITTLE_ENDIAN        0x00U
-#define GT_BIG_ENDIAN           0x10U
-#define GT_BYTEORDER_MASK       0x10U
-
-#define GT_IS_LITTLE_ENDIAN(x)  (((x) & GT_BYTEORDER_MASK) == GT_LITTLE_ENDIAN)
-#define GT_IS_BIG_ENDIAN(x)     (((x) & GT_BYTEORDER_MASK) == GT_BIG_ENDIAN)
-
-/* Type of the data. */
-#define GT_TYPE_VOID            0x00U
-#define GT_TYPE_INT             0x20U
-#define GT_TYPE_PTR             0x40U
-#define GT_TYPE_FLOAT           0x60U
-#define GT_TYPE_ARRAY           0x80U
-#define GT_TYPE_FUNC            0xA0U
-#define GT_TYPE_STRUCT          0xC0U
-#define GT_TYPE_UNION           0xE0U
-#define GT_TYPE_MASK            0xE0U
-
-#define GT_GET_TYPE(x)          ((x) & GT_TYPE_MASK)
-#define GT_IS_INTEGER(x)        (GT_GET_TYPE(x) == GT_TYPE_INTEGER)
-#define GT_IS_POINTER(x)        (GT_GET_TYPE(x) == GT_TYPE_POINTER)
-#define GT_IS_FLOAT(x)          (GT_GET_TYPE(x) == GT_TYPE_FLOAT)
-#define GT_IS_ARRAY(x)          (GT_GET_TYPE(x) == GT_TYPE_ARRAY)
-#define GT_IS_FUNCTION(x)       (GT_GET_TYPE(x) == GT_TYPE_FUNCTION)
-#define GT_IS_STRUCT(x)         (GT_GET_TYPE(x) == GT_TYPE_STRUCT)
-#define GT_IS_UNION(x)          (GT_GET_TYPE(x) == GT_TYPE_UNION)
-
-/* Combined values for the 6502 family */
-#define GT_VOID         (GT_TYPE_VOID)
-#define GT_BYTE         (GT_TYPE_INT | GT_LITTLE_ENDIAN | GT_UNSIGNED | GT_SIZE_1)
-#define GT_WORD         (GT_TYPE_INT | GT_LITTLE_ENDIAN | GT_UNSIGNED | GT_SIZE_2)
-#define GT_DWORD        (GT_TYPE_INT | GT_LITTLE_ENDIAN | GT_UNSIGNED | GT_SIZE_4)
-#define GT_DBYTE        (GT_TYPE_PTR | GT_BIG_ENDIAN    | GT_UNSIGNED | GT_SIZE_2)
-#define GT_PTR          (GT_TYPE_PTR | GT_LITTLE_ENDIAN | GT_UNSIGNED | GT_SIZE_2)
-#define GT_FAR_PTR      (GT_TYPE_PTR | GT_LITTLE_ENDIAN | GT_UNSIGNED | GT_SIZE_3)
-#define GT_ARRAY(size)  (GT_TYPE_ARRAY | ((size) - 1))
-
-
-
-static void FreeTypeInfo (TypeInfo* T)
-/* Free a TypeInfo struct */
-{
-    xfree (T);
-}
-
-
-
-static void InitTypeParseData (TypeParseData* P, const StrBuf* Type,
-                               unsigned ItemCount)
-/* Initialize a TypeParseData structure */
-{
-    P->Info      = xmalloc (sizeof (*P->Info) - sizeof (P->Info->Data[0]) +
-                            ItemCount * sizeof (P->Info->Data[0]));
-    P->ItemCount = ItemCount;
-    P->ItemIndex = 0;
-    P->ItemData  = P->Info->Data;
-    P->Type      = Type;
-    P->Pos       = 0;
-    P->Error     = 0;
-}
-
-
-
-static cc65_typedata* TypeFromString (TypeParseData* P)
-/* Parse a type string and return a set of typedata structures. Will be called
-** recursively. Will set P->Error and return NULL in case of problems.
-*/
-{
-    cc65_typedata*  Data;
-    unsigned char   B;
-    unsigned        I;
-    unsigned        Count;
-
-    /* Allocate a new entry */
-    if (P->ItemIndex >= P->ItemCount) {
-        P->Error = 1;
-        return 0;
-    }
-    Data = &P->ItemData[P->ItemIndex++];
-
-    /* Assume no following node */
-    Data->next = 0;
-
-    /* Get the next char, then skip it */
-    if (P->Pos >= SB_GetLen (P->Type)) {
-        P->Error = 1;
-        return 0;
-    }
-    B = SB_At (P->Type, P->Pos++);
-
-    switch (B) {
-
-        /* We only handle those that are currently in use */
-        case GT_VOID:
-            Data->what = CC65_TYPE_VOID;
-            Data->size = 0;
-            break;
-
-        case GT_BYTE:
-            Data->what = CC65_TYPE_BYTE;
-            Data->size = GT_GET_SIZE (B);
-            break;
-
-        case GT_WORD:
-            Data->what = CC65_TYPE_WORD;
-            Data->size = GT_GET_SIZE (B);
-            break;
-
-        case GT_DWORD:
-            Data->what = CC65_TYPE_DWORD;
-            Data->size = GT_GET_SIZE (B);
-            break;
-
-        case GT_DBYTE:
-            Data->what = CC65_TYPE_DBYTE;
-            Data->size = GT_GET_SIZE (B);
-            break;
-
-        case GT_PTR:
-            Data->what = CC65_TYPE_PTR;
-            Data->data.ptr.ind_type = TypeFromString (P);
-            Data->size = GT_GET_SIZE (B);
-            break;
-
-        case GT_FAR_PTR:
-            Data->what = CC65_TYPE_FARPTR;
-            Data->data.ptr.ind_type = TypeFromString (P);
-            Data->size = GT_GET_SIZE (B);
-            break;
-
-        default:
-            if (GT_GET_TYPE (B) == GT_TYPE_ARRAY) {
-                Count = 0;
-                I = GT_GET_SIZE (B);
-                if (I == 0 || I > 4) {
-                    P->Error = 1;
-                    break;
-                }
-                P->Pos += I;
-                if (P->Pos > SB_GetLen (P->Type)) {
-                    P->Error = 1;
-                    break;
-                }
-                while (I) {
-                    Count <<= 8;
-                    Count |= (unsigned char)  SB_At (P->Type, P->Pos - I);
-                    --I;
-                }
-                Data->what = CC65_TYPE_ARRAY;
-                Data->data.array.ele_count = Count;
-                Data->data.array.ele_type = TypeFromString (P);
-                if (!P->Error) {
-                    Data->size = Data->data.array.ele_count *
-                                 Data->data.array.ele_type->size;
-                }
-            } else {
-                /* OOPS! */
-                P->Error = 1;
-            }
-            break;
-    }
-
-    /* Return our structure or NULL in case of errors */
-    return P->Error? 0 : Data;
-}
-
-
-
-
-static TypeInfo* ParseTypeString (InputData* D, StrBuf* Type)
-/* Check if the string T contains a valid type string. Convert it from readable
-** to binary. Calculate how many cc65_typedata structures are necessary when it
-** is converted. Convert the string into a set of cc65_typedata structures and
-** return them.
-*/
-{
-    unsigned        I;
-    unsigned        Count;
-    const char*     A;
-    char*           B;
-    TypeParseData   P;
-
-
-    /* The length must not be zero and divideable by two */
-    unsigned Length = SB_GetLen (Type);
-    if (Length < 2 || (Length & 0x01) != 0) {
-        ParseError (D, CC65_ERROR, "Type value has invalid length");
-        return 0;
-    }
-
-    /* The string must consist completely of hex digit chars */
-    A = SB_GetConstBuf (Type);
-    for (I = 0; I < Length; ++I) {
-        if (!isxdigit (A[I])) {
-            ParseError (D, CC65_ERROR, "Type value contains invalid characters");
-            return 0;
-        }
-    }
-
-    /* Convert the type to binary */
-    B = SB_GetBuf (Type);
-    while (A < SB_GetConstBuf (Type) + Length) {
-        /* Since we know, there are only hex digits, there can't be any errors */
-        *B++ = (HexValue (A[0]) << 4) | HexValue (A[1]);
-        A += 2;
-    }
-    Type->Len = (Length /= 2);
-
-    /* Get a pointer to the type data, then count the number of cc65_typedata
-    ** items needed.
-    */
-    A = SB_GetConstBuf (Type);
-    Count = 0;
-    I = 0;
-    while (I < Length) {
-        switch (A[I]) {
-            /* We only handle those that are currently in use */
-            case GT_VOID:
-            case GT_BYTE:
-            case GT_WORD:
-            case GT_DWORD:
-            case GT_DBYTE:
-            case GT_PTR:
-            case GT_FAR_PTR:
-                ++Count;
-                ++I;
-                break;
-
-            default:
-                if (GT_GET_TYPE (A[I]) == GT_TYPE_ARRAY) {
-                    ++Count;
-                    I += GT_GET_SIZE (A[I]) + 1;
-                } else {
-                    /* Unknown type in type string */
-                    ParseError (D, CC65_ERROR, "Unkown type in type value");
-                    return 0;
-                }
-                break;
-        }
-    }
-
-    /* Check that we're even */
-    if (I != Length) {
-        ParseError (D, CC65_ERROR, "Syntax error in type in type value");
-        return 0;
-    }
-
-    /* Initialize the data structure for parsing the type string */
-    InitTypeParseData (&P, Type, Count);
-
-    /* Parse the type string and check for errors */
-    if (TypeFromString (&P) == 0 || P.ItemCount != P.ItemIndex) {
-        ParseError (D, CC65_ERROR, "Error parsing the type value");
-        FreeTypeInfo (P.Info);
-        return 0;
-    }
-
-    /* Return the result of the parse operation */
-    return P.Info;
-}
-
-
-
-/*****************************************************************************/
-/*                               SpanInfoList                                */
-/*****************************************************************************/
-
-
-
-static void InitSpanInfoList (SpanInfoList* L)
-/* Initialize a span info list */
-{
-    L->Count = 0;
-    L->List  = 0;
-}
-
-
-
-static void CreateSpanInfoList (SpanInfoList* L, Collection* SpanInfos)
-/* Create a SpanInfoList from a Collection with span infos. The collection
-** must be sorted by ascending start addresses.
-*/
-{
-    unsigned I, J;
-    SpanInfo* S;
-    SpanInfoListEntry* List;
-    unsigned StartIndex;
-    cc65_addr Start;
-    cc65_addr Addr;
-    cc65_addr End;
-
-    /* Initialize and check if there's something to do */
-    L->Count = 0;
-    L->List  = 0;
-    if (CollCount (SpanInfos) == 0) {
-        /* No entries */
-        return;
-    }
-
-    /* Step 1: Determine the number of unique address entries needed */
-    S = CollAt (SpanInfos, 0);
-    L->Count += (S->End - S->Start) + 1;
-    End = S->End;
-    for (I = 1; I < CollCount (SpanInfos); ++I) {
-
-        /* Get next entry */
-        S = CollAt (SpanInfos, I);
-
-        /* Check for additional unique addresses in this span info */
-        if (S->Start > End) {
-            L->Count += (S->End - S->Start) + 1;
-            End = S->End;
-        } else if (S->End > End) {
-            L->Count += (S->End - End);
-            End = S->End;
-        }
-
-    }
-
-    /* Step 2: Allocate memory and initialize it */
-    L->List = List = xmalloc (L->Count * sizeof (*List));
-    for (I = 0; I < L->Count; ++I) {
-        List[I].Count = 0;
-        List[I].Data  = 0;
-    }
-
-    /* Step 3: Determine the number of entries per unique address */
-    List = L->List;
-    S = CollAt (SpanInfos, 0);
-    StartIndex = 0;
-    Start = S->Start;
-    End = S->End;
-    for (J = StartIndex, Addr = S->Start; Addr <= S->End; ++J, ++Addr) {
-        List[J].Addr = Addr;
-        ++List[J].Count;
-    }
-    for (I = 1; I < CollCount (SpanInfos); ++I) {
-
-        /* Get next entry */
-        S = CollAt (SpanInfos, I);
-
-        /* Determine the start index of the next range. Line infos are sorted
-        ** by ascending start address, so the start address of the next entry
-        ** is always larger than the previous one - we don't need to check
-        ** that.
-        */
-        if (S->Start <= End) {
-            /* Range starts within out already known linear range */
-            StartIndex += (unsigned) (S->Start - Start);
-            Start = S->Start;
-            if (S->End > End) {
-                End = S->End;
-            }
-        } else {
-            /* Range starts after the already known */
-            StartIndex += (unsigned) (End - Start) + 1;
-            Start = S->Start;
-            End = S->End;
-        }
-        for (J = StartIndex, Addr = S->Start; Addr <= S->End; ++J, ++Addr) {
-            List[J].Addr = Addr;
-            ++List[J].Count;
-        }
-    }
-
-    /* Step 4: Allocate memory for the indirect tables */
-    for (I = 0, List = L->List; I < L->Count; ++I, ++List) {
-
-        /* For a count of 1, we store the pointer to the lineinfo for this
-        ** address in the Data pointer directly. For counts > 1, we allocate
-        ** an array of pointers and reset the counter, so we can use it as
-        ** an index later. This is dangerous programming since it disables
-        ** all possible checks!
-        */
-        if (List->Count > 1) {
-            List->Data = xmalloc (List->Count * sizeof (SpanInfo*));
-            List->Count = 0;
-        }
-    }
-
-    /* Step 5: Enter the data into the table */
-    List = L->List;
-    S = CollAt (SpanInfos, 0);
-    StartIndex = 0;
-    Start = S->Start;
-    End = S->End;
-    for (J = StartIndex, Addr = S->Start; Addr <= S->End; ++J, ++Addr) {
-        assert (List[J].Addr == Addr);
-        if (List[J].Count == 1 && List[J].Data == 0) {
-            List[J].Data = S;
-        } else {
-            ((SpanInfo**) List[J].Data)[List[J].Count++] = S;
-        }
-    }
-    for (I = 1; I < CollCount (SpanInfos); ++I) {
-
-        /* Get next entry */
-        S = CollAt (SpanInfos, I);
-
-        /* Determine the start index of the next range. Line infos are sorted
-        ** by ascending start address, so the start address of the next entry
-        ** is always larger than the previous one - we don't need to check
-        ** that.
-        */
-        if (S->Start <= End) {
-            /* Range starts within out already known linear range */
-            StartIndex += (unsigned) (S->Start - Start);
-            Start = S->Start;
-            if (S->End > End) {
-                End = S->End;
-            }
-        } else {
-            /* Range starts after the already known */
-            StartIndex += (unsigned) (End - Start) + 1;
-            Start = S->Start;
-            End = S->End;
-        }
-        for (J = StartIndex, Addr = S->Start; Addr <= S->End; ++J, ++Addr) {
-            assert (List[J].Addr == Addr);
-            if (List[J].Count == 1 && List[J].Data == 0) {
-                List[J].Data = S;
-            } else {
-                ((SpanInfo**) List[J].Data)[List[J].Count++] = S;
-            }
-        }
-    }
-}
-
-
-
-static void DoneSpanInfoList (SpanInfoList* L)
-/* Delete the contents of a span info list */
-{
-    unsigned I;
-
-    /* Delete the span info and the indirect data */
-    for (I = 0; I < L->Count; ++I) {
-
-        /* Get a pointer to the entry */
-        SpanInfoListEntry* E = &L->List[I];
-
-        /* Check for indirect memory */
-        if (E->Count > 1) {
-            /* SpanInfo addressed indirectly */
-            xfree (E->Data);
-        }
-    }
-
-    /* Delete the list */
-    xfree (L->List);
-}
-
-
-
-/*****************************************************************************/
-/*                                Debug info                                 */
-/*****************************************************************************/
-
-
-
-static DbgInfo* NewDbgInfo (const char* FileName)
-/* Create a new DbgInfo struct and return it */
-{
-    /* Get the length of the name */
-    unsigned Len = strlen (FileName);
-
-    /* Allocate memory */
-    DbgInfo* Info = xmalloc (sizeof (DbgInfo) + Len);
-
-    /* Initialize it */
-    CollInit (&Info->CSymInfoById);
-    CollInit (&Info->FileInfoById);
-    CollInit (&Info->LibInfoById);
-    CollInit (&Info->LineInfoById);
-    CollInit (&Info->ModInfoById);
-    CollInit (&Info->ScopeInfoById);
-    CollInit (&Info->SegInfoById);
-    CollInit (&Info->SpanInfoById);
-    CollInit (&Info->SymInfoById);
-    CollInit (&Info->TypeInfoById);
-
-    CollInit (&Info->CSymFuncByName);
-    CollInit (&Info->FileInfoByName);
-    CollInit (&Info->ModInfoByName);
-    CollInit (&Info->ScopeInfoByName);
-    CollInit (&Info->SegInfoByName);
-    CollInit (&Info->SymInfoByName);
-    CollInit (&Info->SymInfoByVal);
-
-    InitSpanInfoList (&Info->SpanInfoByAddr);
-
-    Info->MemUsage     = 0;
-    Info->MajorVersion = 0;
-    Info->MinorVersion = 0;
-    memcpy (&Info->FileName, FileName, Len+1);
-
-    /* Return it */
-    return Info;
-}
-
-
-
-static void FreeDbgInfo (DbgInfo* Info)
-/* Free a DbgInfo struct */
-{
-    unsigned I;
-
-    /* First, free the items in the collections */
-    for (I = 0; I < CollCount (&Info->CSymInfoById); ++I) {
-        FreeCSymInfo (CollAt (&Info->CSymInfoById, I));
-    }
-    for (I = 0; I < CollCount (&Info->FileInfoById); ++I) {
-        FreeFileInfo (CollAt (&Info->FileInfoById, I));
-    }
-    for (I = 0; I < CollCount (&Info->LibInfoById); ++I) {
-        FreeLibInfo (CollAt (&Info->LibInfoById, I));
-    }
-    for (I = 0; I < CollCount (&Info->LineInfoById); ++I) {
-        FreeLineInfo (CollAt (&Info->LineInfoById, I));
-    }
-    for (I = 0; I < CollCount (&Info->ModInfoById); ++I) {
-        FreeModInfo (CollAt (&Info->ModInfoById, I));
-    }
-    for (I = 0; I < CollCount (&Info->ScopeInfoById); ++I) {
-        FreeScopeInfo (CollAt (&Info->ScopeInfoById, I));
-    }
-    for (I = 0; I < CollCount (&Info->SegInfoById); ++I) {
-        FreeSegInfo (CollAt (&Info->SegInfoById, I));
-    }
-    for (I = 0; I < CollCount (&Info->SpanInfoById); ++I) {
-        FreeSpanInfo (CollAt (&Info->SpanInfoById, I));
-    }
-    for (I = 0; I < CollCount (&Info->SymInfoById); ++I) {
-        FreeSymInfo (CollAt (&Info->SymInfoById, I));
-    }
-    for (I = 0; I < CollCount (&Info->TypeInfoById); ++I) {
-        FreeTypeInfo (CollAt (&Info->TypeInfoById, I));
-    }
-
-    /* Free the memory used by the id collections */
-    CollDone (&Info->CSymInfoById);
-    CollDone (&Info->FileInfoById);
-    CollDone (&Info->LibInfoById);
-    CollDone (&Info->LineInfoById);
-    CollDone (&Info->ModInfoById);
-    CollDone (&Info->ScopeInfoById);
-    CollDone (&Info->SegInfoById);
-    CollDone (&Info->SpanInfoById);
-    CollDone (&Info->SymInfoById);
-    CollDone (&Info->TypeInfoById);
-
-    /* Free the memory used by the other collections */
-    CollDone (&Info->CSymFuncByName);
-    CollDone (&Info->FileInfoByName);
-    CollDone (&Info->ModInfoByName);
-    CollDone (&Info->ScopeInfoByName);
-    CollDone (&Info->SegInfoByName);
-    CollDone (&Info->SymInfoByName);
-    CollDone (&Info->SymInfoByVal);
-
-    /* Free span info */
-    DoneSpanInfoList (&Info->SpanInfoByAddr);
-
-    /* Free the structure itself */
-    xfree (Info);
-}
-
-
-
-/*****************************************************************************/
-/*                            Scanner and parser                             */
-/*****************************************************************************/
-
-
-
-static int DigitVal (int C)
-/* Return the value for a numeric digit. Return -1 if C is invalid */
-{
-    if (isdigit (C)) {
-        return C - '0';
-    } else if (isxdigit (C)) {
-        return toupper (C) - 'A' + 10;
-    } else {
-        return -1;
-    }
-}
-
-
-
-static void NextChar (InputData* D)
-/* Read the next character from the input. Count lines and columns */
-{
-    /* Check if we've encountered EOF before */
-    if (D->C >= 0) {
-        if (D->C == '\n') {
-            ++D->Line;
-            D->Col = 0;
-        }
-        D->C = fgetc (D->F);
-        ++D->Col;
-    }
-}
-
-
-
-static void NextToken (InputData* D)
-/* Read the next token from the input stream */
-{
-    static const struct KeywordEntry  {
-        const char      Keyword[12];
-        Token           Tok;
-    } KeywordTable[] = {
-        { "abs",        TOK_ABSOLUTE    },
-        { "addrsize",   TOK_ADDRSIZE    },
-        { "auto",       TOK_AUTO        },
-        { "count",      TOK_COUNT       },
-        { "csym",       TOK_CSYM        },
-        { "def",        TOK_DEF         },
-        { "enum",       TOK_ENUM        },
-        { "equ",        TOK_EQUATE      },
-        { "exp",        TOK_EXPORT      },
-        { "ext",        TOK_EXTERN      },
-        { "file",       TOK_FILE        },
-        { "func",       TOK_FUNC        },
-        { "global",     TOK_GLOBAL      },
-        { "id",         TOK_ID          },
-        { "imp",        TOK_IMPORT      },
-        { "info",       TOK_INFO        },
-        { "lab",        TOK_LABEL       },
-        { "lib",        TOK_LIBRARY     },
-        { "line",       TOK_LINE        },
-        { "long",       TOK_LONG        },
-        { "major",      TOK_MAJOR       },
-        { "minor",      TOK_MINOR       },
-        { "mod",        TOK_MODULE      },
-        { "mtime",      TOK_MTIME       },
-        { "name",       TOK_NAME        },
-        { "offs",       TOK_OFFS        },
-        { "oname",      TOK_OUTPUTNAME  },
-        { "ooffs",      TOK_OUTPUTOFFS  },
-        { "parent",     TOK_PARENT      },
-        { "ref",        TOK_REF         },
-        { "reg",        TOK_REGISTER    },
-        { "ro",         TOK_RO          },
-        { "rw",         TOK_RW          },
-        { "sc",         TOK_SC          },
-        { "scope",      TOK_SCOPE       },
-        { "seg",        TOK_SEGMENT     },
-        { "size",       TOK_SIZE        },
-        { "span",       TOK_SPAN        },
-        { "start",      TOK_START       },
-        { "static",     TOK_STATIC      },
-        { "struct",     TOK_STRUCT      },
-        { "sym",        TOK_SYM         },
-        { "type",       TOK_TYPE        },
-        { "val",        TOK_VALUE       },
-        { "var",        TOK_VAR         },
-        { "version",    TOK_VERSION     },
-        { "zp",         TOK_ZEROPAGE    },
-    };
-
-
-    /* Skip whitespace */
-    while (D->C == ' ' || D->C == '\t' || D->C == '\r') {
-        NextChar (D);
-    }
-
-    /* Remember the current position as start of the next token */
-    D->SLine = D->Line;
-    D->SCol  = D->Col;
-
-    /* Identifier? */
-    if (D->C == '_' || isalpha (D->C)) {
-
-        const struct KeywordEntry* Entry;
-
-        /* Read the identifier */
-        SB_Clear (&D->SVal);
-        while (D->C == '_' || isalnum (D->C)) {
-            SB_AppendChar (&D->SVal, D->C);
-            NextChar (D);
-        }
-        SB_Terminate (&D->SVal);
-
-        /* Search the identifier in the keyword table */
-        Entry = bsearch (SB_GetConstBuf (&D->SVal),
-                         KeywordTable,
-                         sizeof (KeywordTable) / sizeof (KeywordTable[0]),
-                         sizeof (KeywordTable[0]),
-                         (int (*)(const void*, const void*)) strcmp);
-        if (Entry == 0) {
-            D->Tok = TOK_IDENT;
-        } else {
-            D->Tok = Entry->Tok;
-        }
-        return;
-    }
-
-    /* Number? */
-    if (isdigit (D->C)) {
-        int Base = 10;
-        int Val;
-        if (D->C == '0') {
-            NextChar (D);
-            if (toupper (D->C) == 'X') {
-                NextChar (D);
-                Base = 16;
-            } else {
-                Base = 8;
-            }
-        } else {
-            Base = 10;
-        }
-        D->IVal = 0;
-        while ((Val = DigitVal (D->C)) >= 0 && Val < Base) {
-            D->IVal = D->IVal * Base + Val;
-            NextChar (D);
-        }
-        D->Tok = TOK_INTCON;
-        return;
-    }
-
-    /* Other characters */
-    switch (D->C) {
-
-        case '-':
-            NextChar (D);
-            D->Tok = TOK_MINUS;
-            break;
-
-        case '+':
-            NextChar (D);
-            D->Tok = TOK_PLUS;
-            break;
-
-        case ',':
-            NextChar (D);
-            D->Tok = TOK_COMMA;
-            break;
-
-        case '=':
-            NextChar (D);
-            D->Tok = TOK_EQUAL;
-            break;
-
-        case '\"':
-            SB_Clear (&D->SVal);
-            NextChar (D);
-            while (1) {
-                if (D->C == '\n' || D->C == EOF) {
-                    ParseError (D, CC65_ERROR, "Unterminated string constant");
-                    break;
-                }
-                if (D->C == '\"') {
-                    NextChar (D);
-                    break;
-                }
-                SB_AppendChar (&D->SVal, D->C);
-                NextChar (D);
-            }
-            SB_Terminate (&D->SVal);
-            D->Tok = TOK_STRCON;
-            break;
-
-        case '\n':
-            NextChar (D);
-            D->Tok = TOK_EOL;
-            break;
-
-        case EOF:
-            D->Tok = TOK_EOF;
-            break;
-
-        default:
-            ParseError (D, CC65_ERROR, "Invalid input character `%c'", D->C);
-
-    }
-}
-
-
-
-static int TokenIsKeyword (Token Tok)
-/* Return true if the given token is a keyword */
-{
-    return (Tok >= TOK_FIRST_KEYWORD && Tok <= TOK_LAST_KEYWORD);
-}
-
-
-
-static int TokenFollows (InputData* D, Token Tok, const char* Name)
-/* Check for a specific token that follows. */
-{
-    if (D->Tok != Tok) {
-        ParseError (D, CC65_ERROR, "%s expected", Name);
-        SkipLine (D);
-        return 0;
-    } else {
-        return 1;
-    }
-}
-
-
-
-static int IntConstFollows (InputData* D)
-/* Check for an integer constant */
-{
-    return TokenFollows (D, TOK_INTCON, "Integer constant");
-}
-
-
-
-static int StrConstFollows (InputData* D)
-/* Check for a string literal */
-{
-    return TokenFollows (D, TOK_STRCON, "String literal");
-}
-
-
-
-static int Consume (InputData* D, Token Tok, const char* Name)
-/* Check for a token and consume it. Return true if the token was comsumed,
-** return false otherwise.
-*/
-{
-    if (TokenFollows (D, Tok, Name)) {
-        NextToken (D);
-        return 1;
-    } else {
-        return 0;
-    }
-}
-
-
-
-static int ConsumeEqual (InputData* D)
-/* Consume an equal sign */
-{
-    return Consume (D, TOK_EQUAL, "'='");
-}
-
-
-
-static void ConsumeEOL (InputData* D)
-/* Consume an end-of-line token, if we aren't at end-of-file */
-{
-    if (D->Tok != TOK_EOF) {
-        if (D->Tok != TOK_EOL) {
-            ParseError (D, CC65_ERROR, "Extra tokens in line");
-            SkipLine (D);
-        }
-        NextToken (D);
-    }
-}
-
-
-
-static void ParseCSym (InputData* D)
-/* Parse a CSYM line */
-{
-    /* Most of the following variables are initialized with a value that is
-    ** overwritten later. This is just to avoid compiler warnings.
-    */
-    unsigned            Id = 0;
-    StrBuf              Name = STRBUF_INITIALIZER;
-    int                 Offs = 0;
-    cc65_csym_sc        SC = CC65_CSYM_AUTO;
-    unsigned            ScopeId = 0;
-    unsigned            SymId = CC65_INV_ID;
-    unsigned            TypeId = CC65_INV_ID;
-    CSymInfo*           S;
-    enum {
-        ibNone          = 0x0000,
-
-        ibId            = 0x0001,
-        ibOffs          = 0x0002,
-        ibName          = 0x0004,
-        ibSC            = 0x0008,
-        ibScopeId       = 0x0010,
-        ibSymId         = 0x0020,
-        ibType          = 0x0040,
-
-        ibRequired      = ibId | ibName | ibSC | ibScopeId | ibType,
-    } InfoBits = ibNone;
-
-    /* Skip the CSYM token */
-    NextToken (D);
-
-    /* More stuff follows */
-    while (1) {
-
-        Token Tok;
-
-        /* Something we know? */
-        if (D->Tok != TOK_ID            && D->Tok != TOK_NAME           &&
-            D->Tok != TOK_OFFS          && D->Tok != TOK_SC             &&
-            D->Tok != TOK_SCOPE         && D->Tok != TOK_SYM            &&
-            D->Tok != TOK_TYPE) {
-
-            /* Try smart error recovery */
-            if (D->Tok == TOK_IDENT || TokenIsKeyword (D->Tok)) {
-                UnknownKeyword (D);
-                continue;
-            }
-
-            /* Done */
-            break;
-        }
-
-        /* Remember the token, skip it, check for equal */
-        Tok = D->Tok;
-        NextToken (D);
-        if (!ConsumeEqual (D)) {
-            goto ErrorExit;
-        }
-
-        /* Check what the token was */
-        switch (Tok) {
-
-            case TOK_ID:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Id = D->IVal;
-                NextToken (D);
-                InfoBits |= ibId;
-                break;
-
-            case TOK_NAME:
-                if (!StrConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                SB_Copy (&Name, &D->SVal);
-                SB_Terminate (&Name);
-                InfoBits |= ibName;
-                NextToken (D);
-                break;
-
-            case TOK_OFFS:
-                Offs = 1;
-                if (D->Tok == TOK_MINUS) {
-                    Offs = -1;
-                    NextToken (D);
-                }
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Offs *= (int) D->IVal;
-                InfoBits |= ibOffs;
-                NextToken (D);
-                break;
-
-            case TOK_SC:
-                switch (D->Tok) {
-                    case TOK_AUTO:      SC = CC65_CSYM_AUTO;    break;
-                    case TOK_EXTERN:    SC = CC65_CSYM_EXTERN;  break;
-                    case TOK_REGISTER:  SC = CC65_CSYM_REG;     break;
-                    case TOK_STATIC:    SC = CC65_CSYM_STATIC;  break;
-                    default:
-                        ParseError (D, CC65_ERROR, "Invalid storage class token");
-                        break;
-                }
-                InfoBits |= ibSC;
-                NextToken (D);
-                break;
-
-            case TOK_SCOPE:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                ScopeId = D->IVal;
-                NextToken (D);
-                InfoBits |= ibScopeId;
-                break;
-
-            case TOK_SYM:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                SymId = D->IVal;
-                NextToken (D);
-                InfoBits |= ibSymId;
-                break;
-
-            case TOK_TYPE:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                TypeId = D->IVal;
-                NextToken (D);
-                InfoBits |= ibType;
-                break;
-
-            default:
-                /* NOTREACHED */
-                UnexpectedToken (D);
-                goto ErrorExit;
-
-        }
-
-        /* Comma or done */
-        if (D->Tok != TOK_COMMA) {
-            break;
-        }
-        NextToken (D);
-    }
-
-    /* Check for end of line */
-    if (D->Tok != TOK_EOL && D->Tok != TOK_EOF) {
-        UnexpectedToken (D);
-        SkipLine (D);
-        goto ErrorExit;
-    }
-
-    /* Check for required and/or matched information */
-    if ((InfoBits & ibRequired) != ibRequired) {
-        ParseError (D, CC65_ERROR, "Required attributes missing");
-        goto ErrorExit;
-    }
-
-    /* Symbol only valid if storage class not auto */
-    if (((InfoBits & ibSymId) != 0) && (SC == CC65_CSYM_AUTO)) {
-        ParseError (D, CC65_ERROR, "Only non auto symbols can have a symbol attached");
-        goto ErrorExit;
-    }
-
-    /* Create the symbol info */
-    S = NewCSymInfo (&Name);
-    S->Id         = Id;
-    S->Kind       = CC65_CSYM_VAR;
-    S->SC         = SC;
-    S->Offs       = Offs;
-    S->Sym.Id     = SymId;
-    S->Type.Id    = TypeId;
-    S->Scope.Id   = ScopeId;
-
-    /* Remember it */
-    CollReplaceExpand (&D->Info->CSymInfoById, S, Id);
-
-ErrorExit:
-    /* Entry point in case of errors */
-    SB_Done (&Name);
-    return;
-}
-
-
-
-static void ParseFile (InputData* D)
-/* Parse a FILE line */
-{
-    unsigned      Id = 0;
-    unsigned long Size = 0;
-    unsigned long MTime = 0;
-    Collection    ModIds = COLLECTION_INITIALIZER;
-    StrBuf        Name = STRBUF_INITIALIZER;
-    FileInfo*     F;
-    enum {
-        ibNone      = 0x00,
-        ibId        = 0x01,
-        ibName      = 0x02,
-        ibSize      = 0x04,
-        ibMTime     = 0x08,
-        ibModId     = 0x10,
-        ibRequired  = ibId | ibName | ibSize | ibMTime | ibModId,
-    } InfoBits = ibNone;
-
-    /* Skip the FILE token */
-    NextToken (D);
-
-    /* More stuff follows */
-    while (1) {
-
-        Token Tok;
-
-        /* Something we know? */
-        if (D->Tok != TOK_ID            && D->Tok != TOK_MODULE         &&
-            D->Tok != TOK_MTIME         && D->Tok != TOK_NAME           &&
-            D->Tok != TOK_SIZE) {
-
-            /* Try smart error recovery */
-            if (D->Tok == TOK_IDENT || TokenIsKeyword (D->Tok)) {
-                UnknownKeyword (D);
-                continue;
-            }
-
-            /* Done */
-            break;
-        }
-
-        /* Remember the token, skip it, check for equal */
-        Tok = D->Tok;
-        NextToken (D);
-        if (!ConsumeEqual (D)) {
-            goto ErrorExit;
-        }
-
-        /* Check what the token was */
-        switch (Tok) {
-
-            case TOK_ID:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Id = D->IVal;
-                InfoBits |= ibId;
-                NextToken (D);
-                break;
-
-            case TOK_MTIME:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                MTime = D->IVal;
-                NextToken (D);
-                InfoBits |= ibMTime;
-                break;
-
-            case TOK_MODULE:
-                while (1) {
-                    if (!IntConstFollows (D)) {
-                        goto ErrorExit;
-                    }
-                    CollAppendId (&ModIds, (unsigned) D->IVal);
-                    NextToken (D);
-                    if (D->Tok != TOK_PLUS) {
-                        break;
-                    }
-                    NextToken (D);
-                }
-                InfoBits |= ibModId;
-                break;
-
-            case TOK_NAME:
-                if (!StrConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                SB_Copy (&Name, &D->SVal);
-                SB_Terminate (&Name);
-                InfoBits |= ibName;
-                NextToken (D);
-                break;
-
-            case TOK_SIZE:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Size = D->IVal;
-                NextToken (D);
-                InfoBits |= ibSize;
-                break;
-
-            default:
-                /* NOTREACHED */
-                UnexpectedToken (D);
-                goto ErrorExit;
-
-        }
-
-        /* Comma or done */
-        if (D->Tok != TOK_COMMA) {
-            break;
-        }
-        NextToken (D);
-    }
-
-    /* Check for end of line */
-    if (D->Tok != TOK_EOL && D->Tok != TOK_EOF) {
-        UnexpectedToken (D);
-        SkipLine (D);
-        goto ErrorExit;
-    }
-
-    /* Check for required information */
-    if ((InfoBits & ibRequired) != ibRequired) {
-        ParseError (D, CC65_ERROR, "Required attributes missing");
-        goto ErrorExit;
-    }
-
-    /* Create the file info and remember it */
-    F = NewFileInfo (&Name);
-    F->Id       = Id;
-    F->Size     = Size;
-    F->MTime    = MTime;
-    CollMove (&ModIds, &F->ModInfoByName);
-    CollReplaceExpand (&D->Info->FileInfoById, F, Id);
-    CollAppend (&D->Info->FileInfoByName, F);
-
-ErrorExit:
-    /* Entry point in case of errors */
-    CollDone (&ModIds);
-    SB_Done (&Name);
-    return;
-}
-
-
-
-static void ParseInfo (InputData* D)
-/* Parse an INFO line */
-{
-    /* Skip the INFO token */
-    NextToken (D);
-
-    /* More stuff follows */
-    while (1) {
-
-        Token Tok;
-
-        /* Something we know? */
-        if (D->Tok != TOK_CSYM          && D->Tok != TOK_FILE           &&
-            D->Tok != TOK_LIBRARY       && D->Tok != TOK_LINE           &&
-            D->Tok != TOK_MODULE        && D->Tok != TOK_SCOPE          &&
-            D->Tok != TOK_SEGMENT       && D->Tok != TOK_SPAN           &&
-            D->Tok != TOK_SYM           && D->Tok != TOK_TYPE) {
-
-            /* Try smart error recovery */
-            if (D->Tok == TOK_IDENT || TokenIsKeyword (D->Tok)) {
-                UnknownKeyword (D);
-                continue;
-            }
-
-            /* Done */
-            break;
-        }
-
-        /* Remember the token, skip it, check for equal, check for an integer
-        ** constant.
-        */
-        Tok = D->Tok;
-        NextToken (D);
-        if (!ConsumeEqual (D)) {
-            goto ErrorExit;
-        }
-        if (!IntConstFollows (D)) {
-            goto ErrorExit;
-        }
-
-        /* Check what the token was */
-        switch (Tok) {
-
-            case TOK_CSYM:
-                CollGrow (&D->Info->CSymInfoById,  D->IVal);
-                break;
-
-            case TOK_FILE:
-                CollGrow (&D->Info->FileInfoById,   D->IVal);
-                CollGrow (&D->Info->FileInfoByName, D->IVal);
-                break;
-
-            case TOK_LIBRARY:
-                CollGrow (&D->Info->LibInfoById, D->IVal);
-                break;
-
-            case TOK_LINE:
-                CollGrow (&D->Info->LineInfoById, D->IVal);
-                break;
-
-            case TOK_MODULE:
-                CollGrow (&D->Info->ModInfoById,   D->IVal);
-                CollGrow (&D->Info->ModInfoByName, D->IVal);
-                break;
-
-            case TOK_SCOPE:
-                CollGrow (&D->Info->ScopeInfoById, D->IVal);
-                CollGrow (&D->Info->ScopeInfoByName, D->IVal);
-                break;
-
-            case TOK_SEGMENT:
-                CollGrow (&D->Info->SegInfoById,   D->IVal);
-                CollGrow (&D->Info->SegInfoByName, D->IVal);
-                break;
-
-            case TOK_SPAN:
-                CollGrow (&D->Info->SpanInfoById,  D->IVal);
-                break;
-
-            case TOK_SYM:
-                CollGrow (&D->Info->SymInfoById,   D->IVal);
-                CollGrow (&D->Info->SymInfoByName, D->IVal);
-                CollGrow (&D->Info->SymInfoByVal,  D->IVal);
-                break;
-
-            case TOK_TYPE:
-                CollGrow (&D->Info->TypeInfoById,  D->IVal);
-                break;
-
-            default:
-                /* NOTREACHED */
-                UnexpectedToken (D);
-                goto ErrorExit;
-
-        }
-
-        /* Skip the number */
-        NextToken (D);
-
-        /* Comma or done */
-        if (D->Tok != TOK_COMMA) {
-            break;
-        }
-        NextToken (D);
-    }
-
-    /* Check for end of line */
-    if (D->Tok != TOK_EOL && D->Tok != TOK_EOF) {
-        UnexpectedToken (D);
-        SkipLine (D);
-        goto ErrorExit;
-    }
-
-ErrorExit:
-    /* Entry point in case of errors */
-    return;
-}
-
-
-
-static void ParseLibrary (InputData* D)
-/* Parse a LIBRARY line */
-{
-    unsigned      Id = 0;
-    StrBuf        Name = STRBUF_INITIALIZER;
-    LibInfo*      L;
-    enum {
-        ibNone      = 0x00,
-        ibId        = 0x01,
-        ibName      = 0x02,
-        ibRequired  = ibId | ibName,
-    } InfoBits = ibNone;
-
-    /* Skip the LIBRARY token */
-    NextToken (D);
-
-    /* More stuff follows */
-    while (1) {
-
-        Token Tok;
-
-        /* Something we know? */
-        if (D->Tok != TOK_ID            && D->Tok != TOK_NAME) {
-
-            /* Try smart error recovery */
-            if (D->Tok == TOK_IDENT || TokenIsKeyword (D->Tok)) {
-                UnknownKeyword (D);
-                continue;
-            }
-
-            /* Done */
-            break;
-        }
-
-        /* Remember the token, skip it, check for equal */
-        Tok = D->Tok;
-        NextToken (D);
-        if (!ConsumeEqual (D)) {
-            goto ErrorExit;
-        }
-
-        /* Check what the token was */
-        switch (Tok) {
-
-            case TOK_ID:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Id = D->IVal;
-                InfoBits |= ibId;
-                NextToken (D);
-                break;
-
-            case TOK_NAME:
-                if (!StrConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                SB_Copy (&Name, &D->SVal);
-                SB_Terminate (&Name);
-                InfoBits |= ibName;
-                NextToken (D);
-                break;
-
-            default:
-                /* NOTREACHED */
-                UnexpectedToken (D);
-                goto ErrorExit;
-
-        }
-
-        /* Comma or done */
-        if (D->Tok != TOK_COMMA) {
-            break;
-        }
-        NextToken (D);
-    }
-
-    /* Check for end of line */
-    if (D->Tok != TOK_EOL && D->Tok != TOK_EOF) {
-        UnexpectedToken (D);
-        SkipLine (D);
-        goto ErrorExit;
-    }
-
-    /* Check for required information */
-    if ((InfoBits & ibRequired) != ibRequired) {
-        ParseError (D, CC65_ERROR, "Required attributes missing");
-        goto ErrorExit;
-    }
-
-    /* Create the library info and remember it */
-    L = NewLibInfo (&Name);
-    L->Id = Id;
-    CollReplaceExpand (&D->Info->LibInfoById, L, Id);
-
-ErrorExit:
-    /* Entry point in case of errors */
-    SB_Done (&Name);
-    return;
-}
-
-
-
-static void ParseLine (InputData* D)
-/* Parse a LINE line */
-{
-    unsigned        Id = CC65_INV_ID;
-    unsigned        FileId = CC65_INV_ID;
-    Collection      SpanIds = COLLECTION_INITIALIZER;
-    cc65_line       Line = 0;
-    cc65_line_type  Type = CC65_LINE_ASM;
-    unsigned        Count = 0;
-    LineInfo*       L;
-    enum {
-        ibNone      = 0x00,
-
-        ibCount     = 0x01,
-        ibFileId    = 0x02,
-        ibId        = 0x04,
-        ibLine      = 0x08,
-        ibSpanId    = 0x20,
-        ibType      = 0x40,
-
-        ibRequired  = ibFileId | ibId | ibLine,
-    } InfoBits = ibNone;
-
-    /* Skip the LINE token */
-    NextToken (D);
-
-    /* More stuff follows */
-    while (1) {
-
-        Token Tok;
-
-        /* Something we know? */
-        if (D->Tok != TOK_COUNT   && D->Tok != TOK_FILE         &&
-            D->Tok != TOK_ID      && D->Tok != TOK_LINE         &&
-            D->Tok != TOK_SPAN    && D->Tok != TOK_TYPE) {
-
-            /* Try smart error recovery */
-            if (D->Tok == TOK_IDENT || TokenIsKeyword (D->Tok)) {
-                UnknownKeyword (D);
-                continue;
-            }
-
-            /* Done */
-            break;
-        }
-
-        /* Remember the token, skip it, check for equal */
-        Tok = D->Tok;
-        NextToken (D);
-        if (!ConsumeEqual (D)) {
-            goto ErrorExit;
-        }
-
-        /* Check what the token was */
-        switch (Tok) {
-
-            case TOK_FILE:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                FileId = D->IVal;
-                InfoBits |= ibFileId;
-                NextToken (D);
-                break;
-
-            case TOK_ID:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Id = D->IVal;
-                InfoBits |= ibId;
-                NextToken (D);
-                break;
-
-            case TOK_LINE:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Line = (cc65_line) D->IVal;
-                NextToken (D);
-                InfoBits |= ibLine;
-                break;
-
-            case TOK_SPAN:
-                while (1) {
-                    if (!IntConstFollows (D)) {
-                        goto ErrorExit;
-                    }
-                    CollAppendId (&SpanIds, (unsigned) D->IVal);
-                    NextToken (D);
-                    if (D->Tok != TOK_PLUS) {
-                        break;
-                    }
-                    NextToken (D);
-                }
-                InfoBits |= ibSpanId;
-                break;
-
-            case TOK_TYPE:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Type = (cc65_line_type) D->IVal;
-                InfoBits |= ibType;
-                NextToken (D);
-                break;
-
-            case TOK_COUNT:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Count = D->IVal;
-                InfoBits |= ibCount;
-                NextToken (D);
-                break;
-
-            default:
-                /* NOTREACHED */
-                UnexpectedToken (D);
-                goto ErrorExit;
-
-        }
-
-        /* Comma or done */
-        if (D->Tok != TOK_COMMA) {
-            break;
-        }
-        NextToken (D);
-    }
-
-    /* Check for end of line */
-    if (D->Tok != TOK_EOL && D->Tok != TOK_EOF) {
-        UnexpectedToken (D);
-        SkipLine (D);
-        goto ErrorExit;
-    }
-
-    /* Check for required information */
-    if ((InfoBits & ibRequired) != ibRequired) {
-        ParseError (D, CC65_ERROR, "Required attributes missing");
-        goto ErrorExit;
-    }
-
-    /* Create the line info and remember it */
-    L = NewLineInfo ();
-    L->Id       = Id;
-    L->Line     = Line;
-    L->File.Id  = FileId;
-    L->Type     = Type;
-    L->Count    = Count;
-    CollMove (&SpanIds, &L->SpanInfoList);
-    CollReplaceExpand (&D->Info->LineInfoById, L, Id);
-
-ErrorExit:
-    /* Entry point in case of errors */
-    CollDone (&SpanIds);
-    return;
-}
-
-
-
-static void ParseModule (InputData* D)
-/* Parse a MODULE line */
-{
-    /* Most of the following variables are initialized with a value that is
-    ** overwritten later. This is just to avoid compiler warnings.
-    */
-    unsigned            Id = CC65_INV_ID;
-    StrBuf              Name = STRBUF_INITIALIZER;
-    unsigned            FileId = CC65_INV_ID;
-    unsigned            LibId = CC65_INV_ID;
-    ModInfo*            M;
-    enum {
-        ibNone          = 0x000,
-
-        ibFileId        = 0x001,
-        ibId            = 0x002,
-        ibName          = 0x004,
-        ibLibId         = 0x008,
-
-        ibRequired      = ibId | ibName | ibFileId,
-    } InfoBits = ibNone;
-
-    /* Skip the MODULE token */
-    NextToken (D);
-
-    /* More stuff follows */
-    while (1) {
-
-        Token Tok;
-
-        /* Something we know? */
-        if (D->Tok != TOK_FILE          && D->Tok != TOK_ID             &&
-            D->Tok != TOK_NAME          && D->Tok != TOK_LIBRARY) {
-
-            /* Try smart error recovery */
-            if (D->Tok == TOK_IDENT || TokenIsKeyword (D->Tok)) {
-                UnknownKeyword (D);
-                continue;
-            }
-
-            /* Done */
-            break;
-        }
-
-        /* Remember the token, skip it, check for equal */
-        Tok = D->Tok;
-        NextToken (D);
-        if (!ConsumeEqual (D)) {
-            goto ErrorExit;
-        }
-
-        /* Check what the token was */
-        switch (Tok) {
-
-            case TOK_FILE:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                FileId = D->IVal;
-                InfoBits |= ibFileId;
-                NextToken (D);
-                break;
-
-            case TOK_ID:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Id = D->IVal;
-                InfoBits |= ibId;
-                NextToken (D);
-                break;
-
-            case TOK_NAME:
-                if (!StrConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                SB_Copy (&Name, &D->SVal);
-                SB_Terminate (&Name);
-                InfoBits |= ibName;
-                NextToken (D);
-                break;
-
-            case TOK_LIBRARY:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                LibId = D->IVal;
-                InfoBits |= ibLibId;
-                NextToken (D);
-                break;
-
-            default:
-                /* NOTREACHED */
-                UnexpectedToken (D);
-                goto ErrorExit;
-
-        }
-
-        /* Comma or done */
-        if (D->Tok != TOK_COMMA) {
-            break;
-        }
-        NextToken (D);
-    }
-
-    /* Check for end of line */
-    if (D->Tok != TOK_EOL && D->Tok != TOK_EOF) {
-        UnexpectedToken (D);
-        SkipLine (D);
-        goto ErrorExit;
-    }
-
-    /* Check for required and/or matched information */
-    if ((InfoBits & ibRequired) != ibRequired) {
-        ParseError (D, CC65_ERROR, "Required attributes missing");
-        goto ErrorExit;
-    }
-
-    /* Create the scope info */
-    M = NewModInfo (&Name);
-    M->File.Id = FileId;
-    M->Id      = Id;
-    M->Lib.Id  = LibId;
-
-    /* ... and remember it */
-    CollReplaceExpand (&D->Info->ModInfoById, M, Id);
-    CollAppend (&D->Info->ModInfoByName, M);
-
-ErrorExit:
-    /* Entry point in case of errors */
-    SB_Done (&Name);
-    return;
-}
-
-
-
-static void ParseScope (InputData* D)
-/* Parse a SCOPE line */
-{
-    /* Most of the following variables are initialized with a value that is
-    ** overwritten later. This is just to avoid compiler warnings.
-    */
-    unsigned            Id = CC65_INV_ID;
-    cc65_scope_type     Type = CC65_SCOPE_MODULE;
-    cc65_size           Size = 0;
-    StrBuf              Name = STRBUF_INITIALIZER;
-    unsigned            ModId = CC65_INV_ID;
-    unsigned            ParentId = CC65_INV_ID;
-    Collection          SpanIds = COLLECTION_INITIALIZER;
-    unsigned            SymId = CC65_INV_ID;
-    ScopeInfo*          S;
-    enum {
-        ibNone          = 0x000,
-
-        ibId            = 0x001,
-        ibModId         = 0x002,
-        ibName          = 0x004,
-        ibParentId      = 0x008,
-        ibSize          = 0x010,
-        ibSpanId        = 0x020,
-        ibSymId         = 0x040,
-        ibType          = 0x080,
-
-        ibRequired      = ibId | ibModId | ibName,
-    } InfoBits = ibNone;
-
-    /* Skip the SCOPE token */
-    NextToken (D);
-
-    /* More stuff follows */
-    while (1) {
-
-        Token Tok;
-
-        /* Something we know? */
-        if (D->Tok != TOK_ID            && D->Tok != TOK_MODULE         &&
-            D->Tok != TOK_NAME          && D->Tok != TOK_PARENT         &&
-            D->Tok != TOK_SIZE          && D->Tok != TOK_SPAN           &&
-            D->Tok != TOK_SYM           && D->Tok != TOK_TYPE) {
-
-            /* Try smart error recovery */
-            if (D->Tok == TOK_IDENT || TokenIsKeyword (D->Tok)) {
-                UnknownKeyword (D);
-                continue;
-            }
-
-            /* Done */
-            break;
-        }
-
-        /* Remember the token, skip it, check for equal */
-        Tok = D->Tok;
-        NextToken (D);
-        if (!ConsumeEqual (D)) {
-            goto ErrorExit;
-        }
-
-        /* Check what the token was */
-        switch (Tok) {
-
-            case TOK_ID:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Id = D->IVal;
-                InfoBits |= ibId;
-                NextToken (D);
-                break;
-
-            case TOK_MODULE:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                ModId = D->IVal;
-                InfoBits |= ibModId;
-                NextToken (D);
-                break;
-
-            case TOK_NAME:
-                if (!StrConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                SB_Copy (&Name, &D->SVal);
-                SB_Terminate (&Name);
-                InfoBits |= ibName;
-                NextToken (D);
-                break;
-
-            case TOK_PARENT:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                ParentId = D->IVal;
-                NextToken (D);
-                InfoBits |= ibParentId;
-                break;
-
-            case TOK_SIZE:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Size = (cc65_size) D->IVal;
-                InfoBits |= ibSize;
-                NextToken (D);
-                break;
-
-            case TOK_SPAN:
-                while (1) {
-                    if (!IntConstFollows (D)) {
-                        goto ErrorExit;
-                    }
-                    CollAppendId (&SpanIds, (unsigned) D->IVal);
-                    NextToken (D);
-                    if (D->Tok != TOK_PLUS) {
-                        break;
-                    }
-                    NextToken (D);
-                }
-                InfoBits |= ibSpanId;
-                break;
-
-            case TOK_SYM:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                SymId = D->IVal;
-                NextToken (D);
-                InfoBits |= ibSymId;
-                break;
-
-            case TOK_TYPE:
-                switch (D->Tok) {
-                    case TOK_GLOBAL:    Type = CC65_SCOPE_GLOBAL;       break;
-                    case TOK_FILE:      Type = CC65_SCOPE_MODULE;       break;
-                    case TOK_SCOPE:     Type = CC65_SCOPE_SCOPE;        break;
-                    case TOK_STRUCT:    Type = CC65_SCOPE_STRUCT;       break;
-                    case TOK_ENUM:      Type = CC65_SCOPE_ENUM;         break;
-                    default:
-                        ParseError (D, CC65_ERROR,
-                                    "Unknown value for attribute \"type\"");
-                        SkipLine (D);
-                        goto ErrorExit;
-                }
-                NextToken (D);
-                InfoBits |= ibType;
-                break;
-
-            default:
-                /* NOTREACHED */
-                UnexpectedToken (D);
-                goto ErrorExit;
-
-        }
-
-        /* Comma or done */
-        if (D->Tok != TOK_COMMA) {
-            break;
-        }
-        NextToken (D);
-    }
-
-    /* Check for end of line */
-    if (D->Tok != TOK_EOL && D->Tok != TOK_EOF) {
-        UnexpectedToken (D);
-        SkipLine (D);
-        goto ErrorExit;
-    }
-
-    /* Check for required and/or matched information */
-    if ((InfoBits & ibRequired) != ibRequired) {
-        ParseError (D, CC65_ERROR, "Required attributes missing");
-        goto ErrorExit;
-    }
-
-    /* Create the scope info ... */
-    S = NewScopeInfo (&Name);
-    S->Id        = Id;
-    S->Type      = Type;
-    S->Size      = Size;
-    S->Mod.Id    = ModId;
-    S->Parent.Id = ParentId;
-    S->Label.Id  = SymId;
-    CollMove (&SpanIds, &S->SpanInfoList);
-
-    /* ... and remember it */
-    CollReplaceExpand (&D->Info->ScopeInfoById, S, Id);
-    CollAppend (&D->Info->ScopeInfoByName, S);
-
-ErrorExit:
-    /* Entry point in case of errors */
-    CollDone (&SpanIds);
-    SB_Done (&Name);
-    return;
-}
-
-
-
-static void ParseSegment (InputData* D)
-/* Parse a SEGMENT line */
-{
-    unsigned        Id = 0;
-    cc65_addr       Start = 0;
-    cc65_addr       Size = 0;
-    StrBuf          Name = STRBUF_INITIALIZER;
-    StrBuf          OutputName = STRBUF_INITIALIZER;
-    unsigned long   OutputOffs = 0;
-    SegInfo*        S;
-    enum {
-        ibNone      = 0x000,
-
-        ibAddrSize  = 0x001,
-        ibId        = 0x002,
-        ibOutputName= 0x004,
-        ibOutputOffs= 0x008,
-        ibName      = 0x010,
-        ibSize      = 0x020,
-        ibStart     = 0x040,
-        ibType      = 0x080,
-
-        ibRequired  = ibId | ibName | ibStart | ibSize | ibAddrSize | ibType,
-    } InfoBits = ibNone;
-
-    /* Skip the SEGMENT token */
-    NextToken (D);
-
-    /* More stuff follows */
-    while (1) {
-
-        Token Tok;
-
-        /* Something we know? */
-        if (D->Tok != TOK_ADDRSIZE      && D->Tok != TOK_ID         &&
-            D->Tok != TOK_NAME          && D->Tok != TOK_OUTPUTNAME &&
-            D->Tok != TOK_OUTPUTOFFS    && D->Tok != TOK_SIZE       &&
-            D->Tok != TOK_START         && D->Tok != TOK_TYPE) {
-
-            /* Try smart error recovery */
-            if (D->Tok == TOK_IDENT || TokenIsKeyword (D->Tok)) {
-                UnknownKeyword (D);
-                continue;
-            }
-            /* Done */
-            break;
-        }
-
-        /* Remember the token, skip it, check for equal */
-        Tok = D->Tok;
-        NextToken (D);
-        if (!ConsumeEqual (D)) {
-            goto ErrorExit;
-        }
-
-        /* Check what the token was */
-        switch (Tok) {
-
-            case TOK_ADDRSIZE:
-                NextToken (D);
-                InfoBits |= ibAddrSize;
-                break;
-
-            case TOK_ID:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Id = D->IVal;
-                InfoBits |= ibId;
-                NextToken (D);
-                break;
-
-            case TOK_NAME:
-                if (!StrConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                SB_Copy (&Name, &D->SVal);
-                SB_Terminate (&Name);
-                InfoBits |= ibName;
-                NextToken (D);
-                break;
-
-            case TOK_OUTPUTNAME:
-                if (!StrConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                SB_Copy (&OutputName, &D->SVal);
-                SB_Terminate (&OutputName);
-                InfoBits |= ibOutputName;
-                NextToken (D);
-                break;
-
-            case TOK_OUTPUTOFFS:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                OutputOffs = D->IVal;
-                NextToken (D);
-                InfoBits |= ibOutputOffs;
-                break;
-
-            case TOK_SIZE:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Size = D->IVal;
-                NextToken (D);
-                InfoBits |= ibSize;
-                break;
-
-            case TOK_START:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Start = (cc65_addr) D->IVal;
-                NextToken (D);
-                InfoBits |= ibStart;
-                break;
-
-            case TOK_TYPE:
-                NextToken (D);
-                InfoBits |= ibType;
-                break;
-
-            default:
-                /* NOTREACHED */
-                UnexpectedToken (D);
-                goto ErrorExit;
-
-        }
-
-        /* Comma or done */
-        if (D->Tok != TOK_COMMA) {
-            break;
-        }
-        NextToken (D);
-    }
-
-    /* Check for end of line */
-    if (D->Tok != TOK_EOL && D->Tok != TOK_EOF) {
-        UnexpectedToken (D);
-        SkipLine (D);
-        goto ErrorExit;
-    }
-
-    /* Check for required and/or matched information */
-    if ((InfoBits & ibRequired) != ibRequired) {
-        ParseError (D, CC65_ERROR, "Required attributes missing");
-        goto ErrorExit;
-    }
-    InfoBits &= (ibOutputName | ibOutputOffs);
-    if (InfoBits != ibNone && InfoBits != (ibOutputName | ibOutputOffs)) {
-        ParseError (D, CC65_ERROR,
-                    "Attributes \"outputname\" and \"outputoffs\" must be paired");
-        goto ErrorExit;
-    }
-
-    /* Fix OutputOffs if not given */
-    if (InfoBits == ibNone) {
-        OutputOffs = 0;
-    }
-
-    /* Create the segment info and remember it */
-    S = NewSegInfo (&Name, Id, Start, Size, &OutputName, OutputOffs);
-    CollReplaceExpand (&D->Info->SegInfoById, S, Id);
-    CollAppend (&D->Info->SegInfoByName, S);
-
-ErrorExit:
-    /* Entry point in case of errors */
-    SB_Done (&Name);
-    SB_Done (&OutputName);
-    return;
-}
-
-
-
-static void ParseSpan (InputData* D)
-/* Parse a SPAN line */
-{
-    unsigned        Id = 0;
-    cc65_addr       Start = 0;
-    cc65_addr       Size = 0;
-    unsigned        SegId = CC65_INV_ID;
-    unsigned        TypeId = CC65_INV_ID;
-    SpanInfo*       S;
-    enum {
-        ibNone      = 0x000,
-
-        ibId        = 0x01,
-        ibSegId     = 0x02,
-        ibSize      = 0x04,
-        ibStart     = 0x08,
-        ibType      = 0x10,
-
-        ibRequired  = ibId | ibSegId | ibSize | ibStart,
-    } InfoBits = ibNone;
-
-    /* Skip the SEGMENT token */
-    NextToken (D);
-
-    /* More stuff follows */
-    while (1) {
-
-        Token Tok;
-
-        /* Something we know? */
-        if (D->Tok != TOK_ID    && D->Tok != TOK_SEGMENT        &&
-            D->Tok != TOK_SIZE  && D->Tok != TOK_START          &&
-            D->Tok != TOK_TYPE) {
-
-            /* Try smart error recovery */
-            if (D->Tok == TOK_IDENT || TokenIsKeyword (D->Tok)) {
-                UnknownKeyword (D);
-                continue;
-            }
-            /* Done */
-            break;
-        }
-
-        /* Remember the token, skip it, check for equal */
-        Tok = D->Tok;
-        NextToken (D);
-        if (!ConsumeEqual (D)) {
-            goto ErrorExit;
-        }
-
-        /* Check what the token was */
-        switch (Tok) {
-
-            case TOK_ID:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Id = D->IVal;
-                InfoBits |= ibId;
-                NextToken (D);
-                break;
-
-            case TOK_SEGMENT:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                SegId = D->IVal;
-                InfoBits |= ibSegId;
-                NextToken (D);
-                break;
-
-            case TOK_SIZE:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Size = D->IVal;
-                NextToken (D);
-                InfoBits |= ibSize;
-                break;
-
-            case TOK_START:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Start = (cc65_addr) D->IVal;
-                NextToken (D);
-                InfoBits |= ibStart;
-                break;
-
-            case TOK_TYPE:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                TypeId = D->IVal;
-                NextToken (D);
-                InfoBits |= ibType;
-                break;
-
-            default:
-                /* NOTREACHED */
-                UnexpectedToken (D);
-                goto ErrorExit;
-
-        }
-
-        /* Comma or done */
-        if (D->Tok != TOK_COMMA) {
-            break;
-        }
-        NextToken (D);
-    }
-
-    /* Check for end of line */
-    if (D->Tok != TOK_EOL && D->Tok != TOK_EOF) {
-        UnexpectedToken (D);
-        SkipLine (D);
-        goto ErrorExit;
-    }
-
-    /* Check for required and/or matched information */
-    if ((InfoBits & ibRequired) != ibRequired) {
-        ParseError (D, CC65_ERROR, "Required attributes missing");
-        goto ErrorExit;
-    }
-
-    /* Create the span info and remember it */
-    S = NewSpanInfo ();
-    S->Id       = Id;
-    S->Start    = Start;
-    S->End      = Start + Size - 1;
-    S->Seg.Id   = SegId;
-    S->Type.Id  = TypeId;
-    CollReplaceExpand (&D->Info->SpanInfoById, S, Id);
-
-ErrorExit:
-    /* Entry point in case of errors */
-    return;
-}
-
-
-
-static void ParseSym (InputData* D)
-/* Parse a SYM line */
-{
-    /* Most of the following variables are initialized with a value that is
-    ** overwritten later. This is just to avoid compiler warnings.
-    */
-    Collection          DefLineIds = COLLECTION_INITIALIZER;
-    unsigned            ExportId = CC65_INV_ID;
-    unsigned            FileId = CC65_INV_ID;
-    unsigned            Id = CC65_INV_ID;
-    StrBuf              Name = STRBUF_INITIALIZER;
-    unsigned            ParentId = CC65_INV_ID;
-    Collection          RefLineIds = COLLECTION_INITIALIZER;
-    unsigned            ScopeId = CC65_INV_ID;
-    unsigned            SegId = CC65_INV_ID;
-    cc65_size           Size = 0;
-    cc65_symbol_type    Type = CC65_SYM_EQUATE;
-    long                Value = 0;
-
-    SymInfo*            S;
-    enum {
-        ibNone          = 0x0000,
-
-        ibAddrSize      = 0x0001,
-        ibDefLineId     = 0x0002,
-        ibExportId      = 0x0004,
-        ibFileId        = 0x0008,
-        ibId            = 0x0010,
-        ibParentId      = 0x0020,
-        ibRefLineId     = 0x0040,
-        ibScopeId       = 0x0080,
-        ibSegId         = 0x0100,
-        ibSize          = 0x0200,
-        ibName          = 0x0400,
-        ibType          = 0x0800,
-        ibValue         = 0x1000,
-
-        ibRequired      = ibAddrSize | ibId | ibName,
-    } InfoBits = ibNone;
-
-    /* Skip the SYM token */
-    NextToken (D);
-
-    /* More stuff follows */
-    while (1) {
-
-        Token Tok;
-
-        /* Something we know? */
-        if (D->Tok != TOK_ADDRSIZE      && D->Tok != TOK_DEF            &&
-            D->Tok != TOK_EXPORT        && D->Tok != TOK_FILE           &&
-            D->Tok != TOK_ID            && D->Tok != TOK_NAME           &&
-            D->Tok != TOK_PARENT        && D->Tok != TOK_REF            &&
-            D->Tok != TOK_SCOPE         && D->Tok != TOK_SEGMENT        &&
-            D->Tok != TOK_SIZE          && D->Tok != TOK_TYPE           &&
-            D->Tok != TOK_VALUE) {
-
-            /* Try smart error recovery */
-            if (D->Tok == TOK_IDENT || TokenIsKeyword (D->Tok)) {
-                UnknownKeyword (D);
-                continue;
-            }
-
-            /* Done */
-            break;
-        }
-
-        /* Remember the token, skip it, check for equal */
-        Tok = D->Tok;
-        NextToken (D);
-        if (!ConsumeEqual (D)) {
-            goto ErrorExit;
-        }
-
-        /* Check what the token was */
-        switch (Tok) {
-
-            case TOK_ADDRSIZE:
-                NextToken (D);
-                InfoBits |= ibAddrSize;
-                break;
-
-            case TOK_DEF:
-                while (1) {
-                    if (!IntConstFollows (D)) {
-                        goto ErrorExit;
-                    }
-                    CollAppendId (&DefLineIds, (unsigned) D->IVal);
-                    NextToken (D);
-                    if (D->Tok != TOK_PLUS) {
-                        break;
-                    }
-                    NextToken (D);
-                }
-                InfoBits |= ibDefLineId;
-                break;
-
-            case TOK_EXPORT:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                ExportId = D->IVal;
-                InfoBits |= ibExportId;
-                NextToken (D);
-                break;
-
-            case TOK_FILE:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                FileId = D->IVal;
-                InfoBits |= ibFileId;
-                NextToken (D);
-                break;
-
-            case TOK_ID:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Id = D->IVal;
-                NextToken (D);
-                InfoBits |= ibId;
-                break;
-
-            case TOK_NAME:
-                if (!StrConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                SB_Copy (&Name, &D->SVal);
-                SB_Terminate (&Name);
-                InfoBits |= ibName;
-                NextToken (D);
-                break;
-
-            case TOK_PARENT:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                ParentId = D->IVal;
-                NextToken (D);
-                InfoBits |= ibParentId;
-                break;
-
-            case TOK_REF:
-                while (1) {
-                    if (!IntConstFollows (D)) {
-                        goto ErrorExit;
-                    }
-                    CollAppendId (&RefLineIds, (unsigned) D->IVal);
-                    NextToken (D);
-                    if (D->Tok != TOK_PLUS) {
-                        break;
-                    }
-                    NextToken (D);
-                }
-                InfoBits |= ibRefLineId;
-                break;
-
-            case TOK_SCOPE:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                ScopeId = D->IVal;
-                NextToken (D);
-                InfoBits |= ibScopeId;
-                break;
-
-            case TOK_SEGMENT:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                SegId = (unsigned) D->IVal;
-                InfoBits |= ibSegId;
-                NextToken (D);
-                break;
-
-            case TOK_SIZE:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Size = (cc65_size) D->IVal;
-                InfoBits |= ibSize;
-                NextToken (D);
-                break;
-
-            case TOK_TYPE:
-                switch (D->Tok) {
-                    case TOK_EQUATE:    Type = CC65_SYM_EQUATE;         break;
-                    case TOK_IMPORT:    Type = CC65_SYM_IMPORT;         break;
-                    case TOK_LABEL:     Type = CC65_SYM_LABEL;          break;
-                    default:
-                        ParseError (D, CC65_ERROR,
-                                    "Unknown value for attribute \"type\"");
-                        SkipLine (D);
-                        goto ErrorExit;
-                }
-                NextToken (D);
-                InfoBits |= ibType;
-                break;
-
-            case TOK_VALUE:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Value = D->IVal;
-                InfoBits |= ibValue;
-                NextToken (D);
-                break;
-
-            default:
-                /* NOTREACHED */
-                UnexpectedToken (D);
-                goto ErrorExit;
-
-        }
-
-        /* Comma or done */
-        if (D->Tok != TOK_COMMA) {
-            break;
-        }
-        NextToken (D);
-    }
-
-    /* Check for end of line */
-    if (D->Tok != TOK_EOL && D->Tok != TOK_EOF) {
-        UnexpectedToken (D);
-        SkipLine (D);
-        goto ErrorExit;
-    }
-
-    /* Check for required and/or matched information */
-    if ((InfoBits & ibRequired) != ibRequired) {
-        ParseError (D, CC65_ERROR, "Required attributes missing");
-        goto ErrorExit;
-    }
-    if ((InfoBits & (ibScopeId | ibParentId)) == 0 ||
-        (InfoBits & (ibScopeId | ibParentId)) == (ibScopeId | ibParentId)) {
-        ParseError (D, CC65_ERROR, "Only one of \"parent\", \"scope\" must be specified");
-        goto ErrorExit;
-    }
-
-    /* Create the symbol info */
-    S = NewSymInfo (&Name);
-    S->Id         = Id;
-    S->Type       = Type;
-    S->Value      = Value;
-    S->Size       = Size;
-    S->Exp.Id     = ExportId;
-    S->Seg.Id     = SegId;
-    S->Scope.Id   = ScopeId;
-    S->Parent.Id  = ParentId;
-    CollMove (&DefLineIds, &S->DefLineInfoList);
-    CollMove (&RefLineIds, &S->RefLineInfoList);
-
-    /* Remember it */
-    CollReplaceExpand (&D->Info->SymInfoById, S, Id);
-    CollAppend (&D->Info->SymInfoByName, S);
-    CollAppend (&D->Info->SymInfoByVal, S);
-
-ErrorExit:
-    /* Entry point in case of errors */
-    CollDone (&DefLineIds);
-    CollDone (&RefLineIds);
-    SB_Done (&Name);
-    return;
-}
-
-
-
-static void ParseType (InputData* D)
-/* Parse a TYPE line */
-{
-    /* Most of the following variables are initialized with a value that is
-    ** overwritten later. This is just to avoid compiler warnings.
-    */
-    unsigned            Id = CC65_INV_ID;
-    StrBuf              Value = STRBUF_INITIALIZER;
-
-    TypeInfo*           T;
-    enum {
-        ibNone          = 0x0000,
-
-        ibId            = 0x01,
-        ibValue         = 0x02,
-
-        ibRequired      = ibId | ibValue,
-    } InfoBits = ibNone;
-
-    /* Skip the SYM token */
-    NextToken (D);
-
-    /* More stuff follows */
-    while (1) {
-
-        Token Tok;
-
-        /* Something we know? */
-        if (D->Tok != TOK_ID    && D->Tok != TOK_VALUE) {
-
-            /* Try smart error recovery */
-            if (D->Tok == TOK_IDENT || TokenIsKeyword (D->Tok)) {
-                UnknownKeyword (D);
-                continue;
-            }
-
-            /* Done */
-            break;
-        }
-
-        /* Remember the token, skip it, check for equal */
-        Tok = D->Tok;
-        NextToken (D);
-        if (!ConsumeEqual (D)) {
-            goto ErrorExit;
-        }
-
-        /* Check what the token was */
-        switch (Tok) {
-
-            case TOK_ID:
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                Id = D->IVal;
-                NextToken (D);
-                InfoBits |= ibId;
-                break;
-
-            case TOK_VALUE:
-                if (!StrConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                SB_Copy (&Value, &D->SVal);
-                InfoBits |= ibValue;
-                NextToken (D);
-                break;
-
-            default:
-                /* NOTREACHED */
-                UnexpectedToken (D);
-                goto ErrorExit;
-
-        }
-
-        /* Comma or done */
-        if (D->Tok != TOK_COMMA) {
-            break;
-        }
-        NextToken (D);
-    }
-
-    /* Check for end of line */
-    if (D->Tok != TOK_EOL && D->Tok != TOK_EOF) {
-        UnexpectedToken (D);
-        SkipLine (D);
-        goto ErrorExit;
-    }
-
-    /* Check for required and/or matched information */
-    if ((InfoBits & ibRequired) != ibRequired) {
-        ParseError (D, CC65_ERROR, "Required attributes missing");
-        goto ErrorExit;
-    }
-
-    /* Parse the type string to create the type info */
-    T = ParseTypeString (D, &Value);
-    if (T == 0) {
-        goto ErrorExit;
-    }
-    T->Id       = Id;
-
-    /* Remember it */
-    CollReplaceExpand (&D->Info->TypeInfoById, T, Id);
-
-ErrorExit:
-    /* Entry point in case of errors */
-    SB_Done (&Value);
-    return;
-}
-
-
-
-static void ParseVersion (InputData* D)
-/* Parse a VERSION line */
-{
-    enum {
-        ibNone      = 0x00,
-        ibMajor     = 0x01,
-        ibMinor     = 0x02,
-        ibRequired  = ibMajor | ibMinor,
-    } InfoBits = ibNone;
-
-    /* Skip the VERSION token */
-    NextToken (D);
-
-    /* More stuff follows */
-    while (D->Tok != TOK_EOL && D->Tok != TOK_EOF) {
-
-        switch (D->Tok) {
-
-            case TOK_MAJOR:
-                NextToken (D);
-                if (!ConsumeEqual (D)) {
-                    goto ErrorExit;
-                }
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                D->Info->MajorVersion = D->IVal;
-                NextToken (D);
-                InfoBits |= ibMajor;
-                break;
-
-            case TOK_MINOR:
-                NextToken (D);
-                if (!ConsumeEqual (D)) {
-                    goto ErrorExit;
-                }
-                if (!IntConstFollows (D)) {
-                    goto ErrorExit;
-                }
-                D->Info->MinorVersion = D->IVal;
-                NextToken (D);
-                InfoBits |= ibMinor;
-                break;
-
-            case TOK_IDENT:
-                /* Try to skip unknown keywords that may have been added by
-                ** a later version.
-                */
-                UnknownKeyword (D);
-                break;
-
-            default:
-                UnexpectedToken (D);
-                SkipLine (D);
-                goto ErrorExit;
-        }
-
-        /* Comma follows before next attribute */
-        if (D->Tok == TOK_COMMA) {
-            NextToken (D);
-        } else if (D->Tok == TOK_EOL || D->Tok == TOK_EOF) {
-            break;
-        } else {
-            UnexpectedToken (D);
-            goto ErrorExit;
-        }
-    }
-
-    /* Check for required information */
-    if ((InfoBits & ibRequired) != ibRequired) {
-        ParseError (D, CC65_ERROR, "Required attributes missing");
-        goto ErrorExit;
-    }
-
-ErrorExit:
-    /* Entry point in case of errors */
-    return;
-}
-
-
-
-/*****************************************************************************/
-/*                              Data processing                              */
-/*****************************************************************************/
-
-
-
-static int FindCSymInfoByName (const Collection* CSymInfos, const char* Name,
-                               unsigned* Index)
-/* Find the C symbol info with a given file name. The function returns true if
-** the name was found. In this case, Index contains the index of the first item
-** that matches. If the item wasn't found, the function returns false and
-** Index contains the insert position for Name.
-*/
-{
-    /* Do a binary search */
-    int Lo = 0;
-    int Hi = (int) CollCount (CSymInfos) - 1;
-    int Found = 0;
-    while (Lo <= Hi) {
-
-        /* Mid of range */
-        int Cur = (Lo + Hi) / 2;
-
-        /* Get item */
-        const CSymInfo* CurItem = CollAt (CSymInfos, Cur);
-
-        /* Compare */
-        int Res = strcmp (CurItem->Name, Name);
-
-        /* Found? */
-        if (Res < 0) {
-            Lo = Cur + 1;
-        } else {
-            Hi = Cur - 1;
-            /* Since we may have duplicates, repeat the search until we've
-            ** the first item that has a match.
-            */
-            if (Res == 0) {
-                Found = 1;
-            }
-        }
-    }
-
-    /* Pass back the index. This is also the insert position */
-    *Index = Lo;
-    return Found;
-}
-
-
-
-static int FindFileInfoByName (const Collection* FileInfos, const char* Name,
-                               unsigned* Index)
-/* Find the FileInfo for a given file name. The function returns true if the
-** name was found. In this case, Index contains the index of the first item
-** that matches. If the item wasn't found, the function returns false and
-** Index contains the insert position for Name.
-*/
-{
-    /* Do a binary search */
-    int Lo = 0;
-    int Hi = (int) CollCount (FileInfos) - 1;
-    int Found = 0;
-    while (Lo <= Hi) {
-
-        /* Mid of range */
-        int Cur = (Lo + Hi) / 2;
-
-        /* Get item */
-        const FileInfo* CurItem = CollAt (FileInfos, Cur);
-
-        /* Compare */
-        int Res = strcmp (CurItem->Name, Name);
-
-        /* Found? */
-        if (Res < 0) {
-            Lo = Cur + 1;
-        } else {
-            Hi = Cur - 1;
-            /* Since we may have duplicates, repeat the search until we've
-            ** the first item that has a match.
-            */
-            if (Res == 0) {
-                Found = 1;
-            }
-        }
-    }
-
-    /* Pass back the index. This is also the insert position */
-    *Index = Lo;
-    return Found;
-}
-
-
-
-static SpanInfoListEntry* FindSpanInfoByAddr (const SpanInfoList* L, cc65_addr Addr)
-/* Find the index of a SpanInfo for a given address. Returns 0 if no such
-** SpanInfo was found.
-*/
-{
-    /* Do a binary search */
-    int Lo = 0;
-    int Hi = (int) L->Count - 1;
-    while (Lo <= Hi) {
-
-        /* Mid of range */
-        int Cur = (Lo + Hi) / 2;
-
-        /* Get item */
-        SpanInfoListEntry* CurItem = &L->List[Cur];
-
-        /* Found? */
-        if (CurItem->Addr > Addr) {
-            Hi = Cur - 1;
-        } else if (CurItem->Addr < Addr) {
-            Lo = Cur + 1;
-        } else {
-            /* Found */
-            return CurItem;
-        }
-    }
-
-    /* Not found */
-    return 0;
-}
-
-
-
-static LineInfo* FindLineInfoByLine (const Collection* LineInfos, cc65_line Line)
-/* Find the LineInfo for a given line number. The function returns the line
-** info or NULL if none was found.
-*/
-{
-    /* Do a binary search */
-    int Lo = 0;
-    int Hi = (int) CollCount (LineInfos) - 1;
-    while (Lo <= Hi) {
-
-        /* Mid of range */
-        int Cur = (Lo + Hi) / 2;
-
-        /* Get item */
-        LineInfo* CurItem = CollAt (LineInfos, Cur);
-
-        /* Found? */
-        if (Line > CurItem->Line) {
-            Lo = Cur + 1;
-        } else if (Line < CurItem->Line) {
-            Hi = Cur - 1;
-        } else {
-            /* Found */
-            return CurItem;
-        }
-    }
-
-    /* Not found */
-    return 0;
-}
-
-
-
-static SegInfo* FindSegInfoByName (const Collection* SegInfos, const char* Name)
-/* Find the SegInfo for a given segment name. The function returns the segment
-** info or NULL if none was found.
-*/
-{
-    /* Do a binary search */
-    int Lo = 0;
-    int Hi = (int) CollCount (SegInfos) - 1;
-    while (Lo <= Hi) {
-
-        /* Mid of range */
-        int Cur = (Lo + Hi) / 2;
-
-        /* Get item */
-        SegInfo* CurItem = CollAt (SegInfos, Cur);
-
-        /* Compare */
-        int Res = strcmp (CurItem->Name, Name);
-
-        /* Found? */
-        if (Res < 0) {
-            Lo = Cur + 1;
-        } else if (Res > 0) {
-            Hi = Cur - 1;
-        } else {
-            /* Found */
-            return CurItem;
-        }
-    }
-
-    /* Not found */
-    return 0;
-}
-
-
-
-static int FindScopeInfoByName (const Collection* ScopeInfos, const char* Name,
-                                unsigned* Index)
-/* Find the ScopeInfo for a given scope name. The function returns true if the
-** name was found. In this case, Index contains the index of the first item
-** that matches. If the item wasn't found, the function returns false and
-** Index contains the insert position for Name.
-*/
-{
-    /* Do a binary search */
-    int Lo = 0;
-    int Hi = (int) CollCount (ScopeInfos) - 1;
-    int Found = 0;
-    while (Lo <= Hi) {
-
-        /* Mid of range */
-        int Cur = (Lo + Hi) / 2;
-
-        /* Get item */
-        const ScopeInfo* CurItem = CollAt (ScopeInfos, Cur);
-
-        /* Compare */
-        int Res = strcmp (CurItem->Name, Name);
-
-        /* Found? */
-        if (Res < 0) {
-            Lo = Cur + 1;
-        } else {
-            Hi = Cur - 1;
-            /* Since we may have duplicates, repeat the search until we've
-            ** the first item that has a match.
-            */
-            if (Res == 0) {
-                Found = 1;
-            }
-        }
-    }
-
-    /* Pass back the index. This is also the insert position */
-    *Index = Lo;
-    return Found;
-}
-
-
-
-static int FindSymInfoByName (const Collection* SymInfos, const char* Name,
-                              unsigned* Index)
-/* Find the SymInfo for a given file name. The function returns true if the
-** name was found. In this case, Index contains the index of the first item
-** that matches. If the item wasn't found, the function returns false and
-** Index contains the insert position for Name.
-*/
-{
-    /* Do a binary search */
-    int Lo = 0;
-    int Hi = (int) CollCount (SymInfos) - 1;
-    int Found = 0;
-    while (Lo <= Hi) {
-
-        /* Mid of range */
-        int Cur = (Lo + Hi) / 2;
-
-        /* Get item */
-        const SymInfo* CurItem = CollAt (SymInfos, Cur);
-
-        /* Compare */
-        int Res = strcmp (CurItem->Name, Name);
-
-        /* Found? */
-        if (Res < 0) {
-            Lo = Cur + 1;
-        } else {
-            Hi = Cur - 1;
-            /* Since we may have duplicates, repeat the search until we've
-            ** the first item that has a match.
-            */
-            if (Res == 0) {
-                Found = 1;
-            }
-        }
-    }
-
-    /* Pass back the index. This is also the insert position */
-    *Index = Lo;
-    return Found;
-}
-
-
-
-static int FindSymInfoByValue (const Collection* SymInfos, long Value,
-                               unsigned* Index)
-/* Find the SymInfo for a given value. The function returns true if the
-** value was found. In this case, Index contains the index of the first item
-** that matches. If the item wasn't found, the function returns false and
-** Index contains the insert position for the given value.
-*/
-{
-    /* Do a binary search */
-    int Lo = 0;
-    int Hi = (int) CollCount (SymInfos) - 1;
-    int Found = 0;
-    while (Lo <= Hi) {
-
-        /* Mid of range */
-        int Cur = (Lo + Hi) / 2;
-
-        /* Get item */
-        SymInfo* CurItem = CollAt (SymInfos, Cur);
-
-        /* Found? */
-        if (Value > CurItem->Value) {
-            Lo = Cur + 1;
-        } else {
-            Hi = Cur - 1;
-            /* Since we may have duplicates, repeat the search until we've
-            ** the first item that has a match.
-            */
-            if (Value == CurItem->Value) {
-                Found = 1;
-            }
-        }
-    }
-
-    /* Pass back the index. This is also the insert position */
-    *Index = Lo;
-    return Found;
-}
-
-
-
-static void ProcessCSymInfo (InputData* D)
-/* Postprocess c symbol infos */
-{
-    unsigned I;
-
-    /* Walk over all c symbols. Resolve the ids and add the c symbols to the
-    ** corresponding asm symbols.
-    */
-    for (I = 0; I < CollCount (&D->Info->CSymInfoById); ++I) {
-
-        /* Get this c symbol info */
-        CSymInfo* S = CollAt (&D->Info->CSymInfoById, I);
-
-        /* Resolve the asm symbol */
-        if (S->Sym.Id == CC65_INV_ID) {
-            S->Sym.Info = 0;
-        } else if (S->Sym.Id >= CollCount (&D->Info->SymInfoById)) {
-            ParseError (D,
-                        CC65_ERROR,
-                        "Invalid symbol id %u for c symbol with id %u",
-                        S->Sym.Id, S->Id);
-            S->Sym.Info = 0;
-        } else {
-            S->Sym.Info = CollAt (&D->Info->SymInfoById, S->Sym.Id);
-
-            /* For normal (=static) symbols, add a backlink to the symbol but
-            ** check that there is not more than one.
-            */
-            if (S->SC != CC65_CSYM_AUTO && S->SC != CC65_CSYM_REG) {
-                if (S->Sym.Info->CSym) {
-                    ParseError (D,
-                                CC65_ERROR,
-                                "Asm symbol id %u has more than one C symbol attached",
-                                S->Sym.Info->Id);
-                    S->Sym.Info = 0;
-                } else {
-                    S->Sym.Info->CSym = S;
-                }
-            }
-        }
-
-        /* Resolve the type */
-        if (S->Type.Id >= CollCount (&D->Info->TypeInfoById)) {
-            ParseError (D,
-                        CC65_ERROR,
-                        "Invalid type id %u for c symbol with id %u",
-                        S->Type.Id, S->Id);
-            S->Type.Info = 0;
-        } else {
-            S->Type.Info = CollAt (&D->Info->TypeInfoById, S->Type.Id);
-        }
-
-        /* Resolve the scope */
-        if (S->Scope.Id >= CollCount (&D->Info->ScopeInfoById)) {
-            ParseError (D,
-                        CC65_ERROR,
-                        "Invalid scope id %u for c symbol with id %u",
-                        S->Scope.Id, S->Id);
-            S->Scope.Info = 0;
-        } else {
-            S->Scope.Info = CollAt (&D->Info->ScopeInfoById, S->Scope.Id);
-
-            /* Add the c symbol to the list of all c symbols for this scope */
-            if (S->Scope.Info->CSymInfoByName == 0) {
-                S->Scope.Info->CSymInfoByName = CollNew ();
-            }
-            CollAppend (S->Scope.Info->CSymInfoByName, S);
-
-            /* If the scope has an owner symbol, it's a .PROC scope. If this
-            ** symbol is identical to the one attached to the C symbol, this
-            ** is actuallay a C function and the scope is the matching scope.
-            ** Remember the C symbol in the scope in this case.
-            ** Beware: Scopes haven't been postprocessed, so we don't have a
-            ** pointer but just an id.
-            */
-            if (S->Sym.Info && S->Scope.Info->Label.Id == S->Sym.Info->Id) {
-                /* This scope is our function scope */
-                S->Scope.Info->CSymFunc = S;
-                /* Add it to the list of all c functions */
-                CollAppend (&D->Info->CSymFuncByName, S);
-            }
-
-        }
-    }
-
-    /* Walk over all scopes and sort the c symbols by name. */
-    for (I = 0; I < CollCount (&D->Info->ScopeInfoById); ++I) {
-
-        /* Get this scope */
-        ScopeInfo* S = CollAt (&D->Info->ScopeInfoById, I);
-
-        /* Ignore scopes without C symbols */
-        if (CollCount (S->CSymInfoByName) > 1) {
-            /* Sort the c symbols for this scope by name */
-            CollSort (S->CSymInfoByName, CompareCSymInfoByName);
-        }
-    }
-
-    /* Sort the main list of all C functions by name */
-    CollSort (&D->Info->CSymFuncByName, CompareCSymInfoByName);
-}
-
-
-
-static void ProcessFileInfo (InputData* D)
-/* Postprocess file infos */
-{
-    /* Walk over all file infos and resolve the module ids */
-    unsigned I;
-    for (I = 0; I < CollCount (&D->Info->FileInfoById); ++I) {
-
-        /* Get this file info */
-        FileInfo* F = CollAt (&D->Info->FileInfoById, I);
-
-        /* Resolve the module ids */
-        unsigned J;
-        for (J = 0; J < CollCount (&F->ModInfoByName); ++J) {
-
-            /* Get the id of this module */
-            unsigned ModId = CollIdAt (&F->ModInfoByName, J);
-            if (ModId >= CollCount (&D->Info->ModInfoById)) {
-                ParseError (D,
-                            CC65_ERROR,
-                            "Invalid module id %u for file with id %u",
-                            ModId, F->Id);
-                CollReplace (&F->ModInfoByName, 0, J);
-            } else {
-
-                /* Get a pointer to the module */
-                ModInfo* M = CollAt (&D->Info->ModInfoById, ModId);
-
-                /* Replace the id by the pointer */
-                CollReplace (&F->ModInfoByName, M, J);
-
-                /* Insert a backpointer into the module */
-                CollAppend (&M->FileInfoByName, F);
-            }
-        }
-
-        /* If we didn't have any errors, sort the modules by name */
-        if (D->Errors == 0) {
-            CollSort (&F->ModInfoByName, CompareModInfoByName);
-        }
-    }
-
-    /* Now walk over all modules and sort the file infos by name */
-    for (I = 0; I < CollCount (&D->Info->ModInfoById); ++I) {
-
-        /* Get this module info */
-        ModInfo* M = CollAt (&D->Info->ModInfoById, I);
-
-        /* Sort the files by name */
-        CollSort (&M->FileInfoByName, CompareFileInfoByName);
-    }
-
-    /* Sort the file infos by name, so we can do a binary search */
-    CollSort (&D->Info->FileInfoByName, CompareFileInfoByName);
-}
-
-
-
-static void ProcessLineInfo (InputData* D)
-/* Postprocess line infos */
-{
-    unsigned I, J;
-
-    /* Get pointers to the collections */
-    Collection* LineInfos = &D->Info->LineInfoById;
-    Collection* FileInfos = &D->Info->FileInfoById;
-
-    /* Walk over the line infos and replace the id numbers of file and segment
-    ** with pointers to the actual structs. Add the line info to each file
-    ** where it is defined. Resolve the spans and add backpointers to the
-    ** spans.
-    */
-    for (I = 0; I < CollCount (LineInfos); ++I) {
-
-        /* Get LineInfo struct */
-        LineInfo* L = CollAt (LineInfos, I);
-
-        /* Replace the file id by a pointer to the FileInfo. Add a back
-        ** pointer
-        */
-        if (L->File.Id >= CollCount (FileInfos)) {
-            ParseError (D,
-                        CC65_ERROR,
-                        "Invalid file id %u for line with id %u",
-                        L->File.Id, L->Id);
-            L->File.Info = 0;
-        } else {
-            L->File.Info = CollAt (FileInfos, L->File.Id);
-            CollAppend (&L->File.Info->LineInfoByLine, L);
-        }
-
-        /* Resolve the spans ids */
-        for (J = 0; J < CollCount (&L->SpanInfoList); ++J) {
-
-            /* Get the id of this span */
-            unsigned SpanId = CollIdAt (&L->SpanInfoList, J);
-            if (SpanId >= CollCount (&D->Info->SpanInfoById)) {
-                ParseError (D,
-                            CC65_ERROR,
-                            "Invalid span id %u for line with id %u",
-                            SpanId, L->Id);
-                CollReplace (&L->SpanInfoList, 0, J);
-            } else {
-
-                /* Get a pointer to the span */
-                SpanInfo* SP = CollAt (&D->Info->SpanInfoById, SpanId);
-
-                /* Replace the id by the pointer */
-                CollReplace (&L->SpanInfoList, SP, J);
-
-                /* Insert a backpointer into the span */
-                if (SP->LineInfoList == 0) {
-                    SP->LineInfoList = CollNew ();
-                }
-                CollAppend (SP->LineInfoList, L);
-            }
-        }
-    }
-
-    /* Walk over all files and sort the line infos for each file so we can
-    ** do a binary search later.
-    */
-    for (I = 0; I < CollCount (FileInfos); ++I) {
-
-        /* Get a pointer to this file info */
-        FileInfo* F = CollAt (FileInfos, I);
-
-        /* Sort the line infos for this file */
-        CollSort (&F->LineInfoByLine, CompareLineInfoByLine);
-    }
-}
-
-
-
-static void ProcessModInfo (InputData* D)
-/* Postprocess module infos */
-{
-    unsigned I;
-
-    /* Walk over all scopes and resolve the ids */
-    for (I = 0; I < CollCount (&D->Info->ModInfoById); ++I) {
-
-        /* Get this module info */
-        ModInfo* M = CollAt (&D->Info->ModInfoById, I);
-
-        /* Resolve the main file */
-        if (M->File.Id >= CollCount (&D->Info->FileInfoById)) {
-            ParseError (D,
-                        CC65_ERROR,
-                        "Invalid file id %u for module with id %u",
-                        M->File.Id, M->Id);
-            M->File.Info = 0;
-        } else {
-            M->File.Info = CollAt (&D->Info->FileInfoById, M->File.Id);
-        }
-
-        /* Resolve the library */
-        if (M->Lib.Id == CC65_INV_ID) {
-            M->Lib.Info = 0;
-        } else if (M->Lib.Id >= CollCount (&D->Info->LibInfoById)) {
-            ParseError (D,
-                        CC65_ERROR,
-                        "Invalid library id %u for module with id %u",
-                        M->Lib.Id, M->Id);
-            M->Lib.Info = 0;
-        } else {
-            M->Lib.Info = CollAt (&D->Info->LibInfoById, M->Lib.Id);
-        }
-    }
-
-    /* Sort the collection that contains the module info by name */
-    CollSort (&D->Info->ModInfoByName, CompareModInfoByName);
-}
-
-
-
-static void ProcessScopeInfo (InputData* D)
-/* Postprocess scope infos */
-{
-    unsigned I, J;
-
-    /* Walk over all scopes. Resolve the ids and add the scopes to the list
-    ** of scopes for a module.
-    */
-    for (I = 0; I < CollCount (&D->Info->ScopeInfoById); ++I) {
-
-        /* Get this scope info */
-        ScopeInfo* S = CollAt (&D->Info->ScopeInfoById, I);
-
-        /* Resolve the module */
-        if (S->Mod.Id >= CollCount (&D->Info->ModInfoById)) {
-            ParseError (D,
-                        CC65_ERROR,
-                        "Invalid module id %u for scope with id %u",
-                        S->Mod.Id, S->Id);
-            S->Mod.Info = 0;
-        } else {
-            S->Mod.Info = CollAt (&D->Info->ModInfoById, S->Mod.Id);
-
-            /* Add the scope to the list of scopes for this module */
-            CollAppend (&S->Mod.Info->ScopeInfoByName, S);
-
-            /* If this is a main scope, add a pointer to the corresponding
-            ** module.
-            */
-            if (S->Parent.Id == CC65_INV_ID) {
-                /* No parent means main scope */
-                S->Mod.Info->MainScope = S;
-            }
-
-            /* If this is the scope that implements a C function, add the
-            ** function to the list of all functions in this module.
-            */
-            if (S->CSymFunc) {
-                CollAppend (&S->Mod.Info->CSymFuncByName, S->CSymFunc);
-            }
-        }
-
-        /* Resolve the parent scope */
-        if (S->Parent.Id == CC65_INV_ID) {
-            S->Parent.Info = 0;
-        } else if (S->Parent.Id >= CollCount (&D->Info->ScopeInfoById)) {
-            ParseError (D,
-                        CC65_ERROR,
-                        "Invalid parent scope id %u for scope with id %u",
-                        S->Parent.Id, S->Id);
-            S->Parent.Info = 0;
-        } else {
-            S->Parent.Info = CollAt (&D->Info->ScopeInfoById, S->Parent.Id);
-
-            /* Set a backpointer in the parent */
-            if (S->Parent.Info->ChildScopeList == 0) {
-                S->Parent.Info->ChildScopeList = CollNew ();
-            }
-            CollAppend (S->Parent.Info->ChildScopeList, S);
-        }
-
-        /* Resolve the label */
-        if (S->Label.Id == CC65_INV_ID) {
-            S->Label.Info = 0;
-        } else if (S->Label.Id >= CollCount (&D->Info->SymInfoById)) {
-            ParseError (D,
-                        CC65_ERROR,
-                        "Invalid label id %u for scope with id %u",
-                        S->Label.Id, S->Id);
-            S->Label.Info = 0;
-        } else {
-            S->Label.Info = CollAt (&D->Info->SymInfoById, S->Label.Id);
-        }
-
-        /* Resolve the spans ids */
-        for (J = 0; J < CollCount (&S->SpanInfoList); ++J) {
-
-            /* Get the id of this span */
-            unsigned SpanId = CollIdAt (&S->SpanInfoList, J);
-            if (SpanId >= CollCount (&D->Info->SpanInfoById)) {
-                ParseError (D,
-                            CC65_ERROR,
-                            "Invalid span id %u for scope with id %u",
-                            SpanId, S->Id);
-                CollReplace (&S->SpanInfoList, 0, J);
-            } else {
-
-                /* Get a pointer to the span */
-                SpanInfo* SP = CollAt (&D->Info->SpanInfoById, SpanId);
-
-                /* Replace the id by the pointer */
-                CollReplace (&S->SpanInfoList, SP, J);
-
-                /* Insert a backpointer into the span */
-                if (SP->ScopeInfoList == 0) {
-                    SP->ScopeInfoList = CollNew ();
-                }
-                CollAppend (SP->ScopeInfoList, S);
-            }
-        }
-    }
-
-    /* Walk over all modules. If a module doesn't have scopes, it wasn't
-    ** compiled with debug info which is ok. If it has debug info, it must
-    ** also have a main scope. If there are scopes, sort them by name. Do
-    ** also sort C functions in this module by name.
-    */
-    for (I = 0; I < CollCount (&D->Info->ModInfoById); ++I) {
-
-        /* Get this module */
-        ModInfo* M = CollAt (&D->Info->ModInfoById, I);
-
-        /* Ignore modules without any scopes (no debug info) */
-        if (CollCount (&M->ScopeInfoByName) == 0) {
-            continue;
-        }
-
-        /* Must have a main scope */
-        if (M->MainScope == 0) {
-            ParseError (D,
-                        CC65_ERROR,
-                        "Module with id %u has no main scope",
-                        M->Id);
-        }
-
-        /* Sort the scopes for this module by name */
-        CollSort (&M->ScopeInfoByName, CompareScopeInfoByName);
-
-        /* Sort the C functions in this module by name */
-        CollSort (&M->CSymFuncByName, CompareCSymInfoByName);
-    }
-
-    /* Sort the scope infos */
-    CollSort (&D->Info->ScopeInfoByName, CompareScopeInfoByName);
-}
-
-
-
-static void ProcessSegInfo (InputData* D)
-/* Postprocess segment infos */
-{
-    /* Sort the segment infos by name */
-    CollSort (&D->Info->SegInfoByName, CompareSegInfoByName);
-}
-
-
-
-static void ProcessSpanInfo (InputData* D)
-/* Postprocess span infos */
-{
-    unsigned I;
-
-    /* Temporary collection with span infos sorted by address */
-    Collection SpanInfoByAddr = COLLECTION_INITIALIZER;
-
-    /* Resize the temporary collection */
-    CollGrow (&SpanInfoByAddr, CollCount (&D->Info->SpanInfoById));
-
-    /* Walk over all spans and resolve the ids */
-    for (I = 0; I < CollCount (&D->Info->SpanInfoById); ++I) {
-
-        /* Get this span info */
-        SpanInfo* S = CollAt (&D->Info->SpanInfoById, I);
-
-        /* Resolve the segment and relocate the span */
-        if (S->Seg.Id >= CollCount (&D->Info->SegInfoById)) {
-            ParseError (D,
-                        CC65_ERROR,
-                        "Invalid segment id %u for span with id %u",
-                        S->Seg.Id, S->Id);
-            S->Seg.Info = 0;
-        } else {
-            S->Seg.Info = CollAt (&D->Info->SegInfoById, S->Seg.Id);
-            S->Start += S->Seg.Info->Start;
-            S->End   += S->Seg.Info->Start;
-        }
-
-        /* Resolve the type if we have it */
-        if (S->Type.Id == CC65_INV_ID) {
-            S->Type.Info = 0;
-        } else if (S->Type.Id >= CollCount (&D->Info->TypeInfoById)) {
-            ParseError (D,
-                        CC65_ERROR,
-                        "Invalid type id %u for span with id %u",
-                        S->Type.Id, S->Id);
-            S->Type.Info = 0;
-        } else {
-            S->Type.Info = CollAt (&D->Info->TypeInfoById, S->Type.Id);
-        }
-
-        /* Append this span info to the temporary collection that is later
-        ** sorted by address.
-        */
-        CollAppend (&SpanInfoByAddr, S);
-    }
-
-    /* Sort the collection with all span infos by address */
-    CollSort (&SpanInfoByAddr, CompareSpanInfoByAddr);
-
-    /* Create the span info list from the span info collection */
-    CreateSpanInfoList (&D->Info->SpanInfoByAddr, &SpanInfoByAddr);
-
-    /* Remove the temporary collection */
-    CollDone (&SpanInfoByAddr);
-}
-
-
-
-static void ProcessSymInfo (InputData* D)
-/* Postprocess symbol infos */
-{
-    unsigned I, J;
-
-    /* Walk over the symbols and resolve the references */
-    for (I = 0; I < CollCount (&D->Info->SymInfoById); ++I) {
-
-        /* Get the symbol info */
-        SymInfo* S = CollAt (&D->Info->SymInfoById, I);
-
-        /* Resolve export */
-        if (S->Exp.Id == CC65_INV_ID) {
-            S->Exp.Info = 0;
-        } else if (S->Exp.Id >= CollCount (&D->Info->SymInfoById)) {
-            ParseError (D,
-                        CC65_ERROR,
-                        "Invalid export id %u for symbol with id %u",
-                        S->Exp.Id, S->Id);
-            S->Exp.Info = 0;
-        } else {
-            S->Exp.Info = CollAt (&D->Info->SymInfoById, S->Exp.Id);
-
-            /* Add a backpointer, so the export knows its imports */
-            if (S->Exp.Info->ImportList == 0) {
-                S->Exp.Info->ImportList = CollNew ();
-            }
-            CollAppend (S->Exp.Info->ImportList, S);
-        }
-
-        /* Resolve segment */
-        if (S->Seg.Id == CC65_INV_ID) {
-            S->Seg.Info = 0;
-        } else if (S->Seg.Id >= CollCount (&D->Info->SegInfoById)) {
-            ParseError (D,
-                        CC65_ERROR,
-                        "Invalid segment id %u for symbol with id %u",
-                        S->Seg.Id, S->Id);
-            S->Seg.Info = 0;
-        } else {
-            S->Seg.Info = CollAt (&D->Info->SegInfoById, S->Seg.Id);
-        }
-
-        /* Resolve the scope */
-        if (S->Scope.Id == CC65_INV_ID) {
-            S->Scope.Info = 0;
-        } else if (S->Scope.Id >= CollCount (&D->Info->ScopeInfoById)) {
-            ParseError (D,
-                        CC65_ERROR,
-                        "Invalid scope id %u for symbol with id %u",
-                        S->Scope.Id, S->Id);
-            S->Scope.Info = 0;
-        } else {
-            S->Scope.Info = CollAt (&D->Info->ScopeInfoById, S->Scope.Id);
-
-            /* Place a backpointer to the symbol in the scope */
-            CollAppend (&S->Scope.Info->SymInfoByName, S);
-        }
-
-        /* Resolve the parent for cheap locals */
-        if (S->Parent.Id == CC65_INV_ID) {
-            S->Parent.Info = 0;
-        } else if (S->Parent.Id >= CollCount (&D->Info->SymInfoById)) {
-            ParseError (D,
-                        CC65_ERROR,
-                        "Invalid parent id %u for symbol with id %u",
-                        S->Parent.Id, S->Id);
-            S->Parent.Info = 0;
-        } else {
-            S->Parent.Info = CollAt (&D->Info->SymInfoById, S->Parent.Id);
-
-            /* Place a backpointer to the cheap local into the parent */
-            if (S->Parent.Info->CheapLocals == 0) {
-                S->Parent.Info->CheapLocals = CollNew ();
-            }
-            CollAppend (S->Parent.Info->CheapLocals, S);
-        }
-
-        /* Resolve the line infos for the symbol definition */
-        for (J = 0; J < CollCount (&S->DefLineInfoList); ++J) {
-
-            /* Get the id of this line info */
-            unsigned LineId = CollIdAt (&S->DefLineInfoList, J);
-            if (LineId >= CollCount (&D->Info->LineInfoById)) {
-                ParseError (D,
-                            CC65_ERROR,
-                            "Invalid line id %u for symbol with id %u",
-                            LineId, S->Id);
-                CollReplace (&S->DefLineInfoList, 0, J);
-            } else {
-                /* Get a pointer to the line info */
-                LineInfo* LI = CollAt (&D->Info->LineInfoById, LineId);
-
-                /* Replace the id by the pointer */
-                CollReplace (&S->DefLineInfoList, LI, J);
-            }
-        }
-
-        /* Resolve the line infos for symbol references */
-        for (J = 0; J < CollCount (&S->RefLineInfoList); ++J) {
-
-            /* Get the id of this line info */
-            unsigned LineId = CollIdAt (&S->RefLineInfoList, J);
-            if (LineId >= CollCount (&D->Info->LineInfoById)) {
-                ParseError (D,
-                            CC65_ERROR,
-                            "Invalid line id %u for symbol with id %u",
-                            LineId, S->Id);
-                CollReplace (&S->RefLineInfoList, 0, J);
-            } else {
-                /* Get a pointer to the line info */
-                LineInfo* LI = CollAt (&D->Info->LineInfoById, LineId);
-
-                /* Replace the id by the pointer */
-                CollReplace (&S->RefLineInfoList, LI, J);
-            }
-        }
-
-    }
-
-    /* Second run. Resolve scopes for cheap locals */
-    for (I = 0; I < CollCount (&D->Info->SymInfoById); ++I) {
-
-        /* Get the symbol info */
-        SymInfo* S = CollAt (&D->Info->SymInfoById, I);
-
-        /* Resolve the scope */
-        if (S->Scope.Info == 0) {
-            /* No scope - must have a parent */
-            if (S->Parent.Info == 0) {
-                ParseError (D,
-                            CC65_ERROR,
-                            "Symbol with id %u has no parent and no scope",
-                            S->Id);
-            } else if (S->Parent.Info->Scope.Info == 0) {
-                ParseError (D,
-                            CC65_ERROR,
-                            "Symbol with id %u has parent %u without a scope",
-                            S->Id, S->Parent.Info->Id);
-            } else {
-                S->Scope.Info = S->Parent.Info->Scope.Info;
-            }
-        }
-    }
-
-    /* Walk over the scopes and sort the symbols in the scope by name */
-    for (I = 0; I < CollCount (&D->Info->ScopeInfoById); ++I) {
-
-        /* Get the scope info */
-        ScopeInfo* S = CollAt (&D->Info->ScopeInfoById, I);
-
-        /* Sort the symbols in this scope by name */
-        CollSort (&S->SymInfoByName, CompareSymInfoByName);
-    }
-
-    /* Sort the symbol infos */
-    CollSort (&D->Info->SymInfoByName, CompareSymInfoByName);
-    CollSort (&D->Info->SymInfoByVal,  CompareSymInfoByVal);
-}
-
-
-
-/*****************************************************************************/
-/*                             Debug info files                              */
-/*****************************************************************************/
-
-
-
-cc65_dbginfo cc65_read_dbginfo (const char* FileName, cc65_errorfunc ErrFunc)
-/* Parse the debug info file with the given name. On success, the function
-** will return a pointer to an opaque cc65_dbginfo structure, that must be
-** passed to the other functions in this module to retrieve information.
-** errorfunc is called in case of warnings and errors. If the file cannot be
-** read successfully, NULL is returned.
-*/
-{
-    /* Data structure used to control scanning and parsing */
-    InputData D = {
-        0,                      /* Name of input file */
-        1,                      /* Line number */
-        0,                      /* Input file */
-        0,                      /* Line at start of current token */
-        0,                      /* Column at start of current token */
-        0,                      /* Number of errors */
-        0,                      /* Input file */
-        ' ',                    /* Input character */
-        TOK_INVALID,            /* Input token */
-        0,                      /* Integer constant */
-        STRBUF_INITIALIZER,     /* String constant */
-        0,                      /* Function called in case of errors */
-        0,                      /* Pointer to debug info */
-    };
-    D.FileName = FileName;
-    D.Error    = ErrFunc;
-
-    /* Open the input file */
-    D.F = fopen (FileName, "rt");
-    if (D.F == 0) {
-        /* Cannot open */
-        ParseError (&D, CC65_ERROR,
-                    "Cannot open input file \"%s\": %s",
-                     FileName, strerror (errno));
-        return 0;
-    }
-
-    /* Create a new debug info struct */
-    D.Info = NewDbgInfo (FileName);
-
-    /* Prime the pump */
-    NextToken (&D);
-
-    /* The first line in the file must specify version information */
-    if (D.Tok != TOK_VERSION) {
-        ParseError (&D, CC65_ERROR,
-                    "\"version\" keyword missing in first line - this is not "
-                    "a valid debug info file");
-        goto CloseAndExit;
-    }
-
-    /* Parse the version directive */
-    ParseVersion (&D);
-
-    /* Do several checks on the version number */
-    if (D.Info->MajorVersion < VER_MAJOR) {
-        ParseError (
-            &D, CC65_ERROR,
-            "This is an old version of the debug info format that is no "
-            "longer supported. Version found = %u.%u, version supported "
-            "= %u.%u",
-            D.Info->MajorVersion, D.Info->MinorVersion,
-            VER_MAJOR, VER_MINOR
-        );
-        goto CloseAndExit;
-    } else if (D.Info->MajorVersion == VER_MAJOR &&
-               D.Info->MinorVersion > VER_MINOR) {
-        ParseError (
-            &D, CC65_ERROR,
-            "This is a slightly newer version of the debug info format. "
-            "It might work, but you may get errors about unknown keywords "
-            "and similar. Version found = %u.%u, version supported = %u.%u",
-            D.Info->MajorVersion, D.Info->MinorVersion,
-            VER_MAJOR, VER_MINOR
-        );
-    } else if (D.Info->MajorVersion > VER_MAJOR) {
-        ParseError (
-            &D, CC65_WARNING,
-            "The format of this debug info file is newer than what we "
-            "know. Will proceed but probably fail. Version found = %u.%u, "
-            "version supported = %u.%u",
-            D.Info->MajorVersion, D.Info->MinorVersion,
-            VER_MAJOR, VER_MINOR
-        );
-    }
-    ConsumeEOL (&D);
-
-    /* Parse lines */
-    while (D.Tok != TOK_EOF) {
-
-        switch (D.Tok) {
-
-            case TOK_CSYM:
-                ParseCSym (&D);
-                break;
-
-            case TOK_FILE:
-                ParseFile (&D);
-                break;
-
-            case TOK_INFO:
-                ParseInfo (&D);
-                break;
-
-            case TOK_LIBRARY:
-                ParseLibrary (&D);
-                break;
-
-            case TOK_LINE:
-                ParseLine (&D);
-                break;
-
-            case TOK_MODULE:
-                ParseModule (&D);
-                break;
-
-            case TOK_SCOPE:
-                ParseScope (&D);
-                break;
-
-            case TOK_SEGMENT:
-                ParseSegment (&D);
-                break;
-
-            case TOK_SPAN:
-                ParseSpan (&D);
-                break;
-
-            case TOK_SYM:
-                ParseSym (&D);
-                break;
-
-            case TOK_TYPE:
-                ParseType (&D);
-                break;
-
-            case TOK_IDENT:
-                /* Output a warning, then skip the line with the unknown
-                ** keyword that may have been added by a later version.
-                */
-                ParseError (&D, CC65_WARNING,
-                            "Unknown keyword \"%s\" - skipping",
-                            SB_GetConstBuf (&D.SVal));
-
-                SkipLine (&D);
-                break;
-
-            default:
-                UnexpectedToken (&D);
-
-        }
-
-        /* EOL or EOF must follow */
-        ConsumeEOL (&D);
-    }
-
-CloseAndExit:
-    /* Close the file */
-    fclose (D.F);
-
-    /* Free memory allocated for SVal */
-    SB_Done (&D.SVal);
-
-    /* In case of errors, delete the debug info already allocated and
-    ** return NULL
-    */
-    if (D.Errors > 0) {
-        /* Free allocated stuff */
-        FreeDbgInfo (D.Info);
-        return 0;
-    }
-
-    /* We do now have all the information from the input file. Do
-    ** postprocessing. Beware: Some of the following postprocessing
-    ** depends on the order of the calls.
-    */
-    ProcessCSymInfo (&D);
-    ProcessFileInfo (&D);
-    ProcessLineInfo (&D);
-    ProcessModInfo (&D);
-    ProcessScopeInfo (&D);
-    ProcessSegInfo (&D);
-    ProcessSpanInfo (&D);
-    ProcessSymInfo (&D);
-
-#if DEBUG
-    /* Debug output */
-    DumpData (&D);
-#endif
-
-    /* Return the debug info struct that was created */
-    return D.Info;
-}
-
-
-
-void cc65_free_dbginfo (cc65_dbginfo Handle)
-/* Free debug information read from a file */
-{
-    if (Handle) {
-        FreeDbgInfo ((DbgInfo*) Handle);
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                 C symbols                                 */
-/*****************************************************************************/
-
-
-
-const cc65_csyminfo* cc65_get_csymlist (cc65_dbginfo Handle)
-/* Return a list of all c symbols */
-{
-    const DbgInfo*      Info;
-    cc65_csyminfo*      S;
-    unsigned            I;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Allocate memory for the data structure returned to the caller */
-    S = new_cc65_csyminfo (CollCount (&Info->CSymInfoById));
-
-    /* Fill in the data */
-    for (I = 0; I < CollCount (&Info->CSymInfoById); ++I) {
-        /* Copy the data */
-        CopyCSymInfo (S->data + I, CollAt (&Info->CSymInfoById, I));
-    }
-
-    /* Return the result */
-    return S;
-}
-
-
-
-const cc65_csyminfo* cc65_csym_byid (cc65_dbginfo Handle, unsigned Id)
-/* Return information about a c symbol with a specific id. The function
-** returns NULL if the id is invalid (no such c symbol) and otherwise a
-** cc65_csyminfo structure with one entry that contains the requested
-** symbol information.
-*/
-{
-    const DbgInfo*      Info;
-    cc65_csyminfo*      S;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the id is valid */
-    if (Id >= CollCount (&Info->CSymInfoById)) {
-        return 0;
-    }
-
-    /* Allocate memory for the data structure returned to the caller */
-    S = new_cc65_csyminfo (1);
-
-    /* Fill in the data */
-    CopyCSymInfo (S->data, CollAt (&Info->CSymInfoById, Id));
-
-    /* Return the result */
-    return S;
-}
-
-
-
-const cc65_csyminfo* cc65_cfunc_bymodule (cc65_dbginfo Handle, unsigned ModId)
-/* Return the list of C functions (not symbols!) for a specific module. If
-** the module id is invalid, the function will return NULL, otherwise a
-** (possibly empty) c symbol list.
-*/
-{
-    const DbgInfo*      Info;
-    const ModInfo*      M;
-    cc65_csyminfo*      D;
-    unsigned            I;
-
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the module id is valid */
-    if (ModId >= CollCount (&Info->ModInfoById)) {
-        return 0;
-    }
-
-    /* Get a pointer to the module info */
-    M = CollAt (&Info->ModInfoById, ModId);
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_csyminfo (CollCount (&M->CSymFuncByName));
-
-    /* Fill in the data */
-    for (I = 0; I < CollCount (&M->CSymFuncByName); ++I) {
-        CopyCSymInfo (D->data + I, CollAt (&M->CSymFuncByName, I));
-    }
-
-    /* Return the result */
-    return D;
-}
-
-
-
-const cc65_csyminfo* cc65_cfunc_byname (cc65_dbginfo Handle, const char* Name)
-/* Return a list of all C functions with the given name that have a
-** definition.
-*/
-{
-    const DbgInfo*      Info;
-    unsigned            Index;
-    unsigned            Count;
-    const CSymInfo*     S;
-    cc65_csyminfo*      D;
-    unsigned            I;
-
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Search for a function with the given name */
-    if (!FindCSymInfoByName (&Info->CSymFuncByName, Name, &Index)) {
-        return 0;
-    }
-
-    /* Count functions with this name */
-    Count = 1;
-    I = Index;
-    while (1) {
-        if (++I >= CollCount (&Info->CSymFuncByName)) {
-            break;
-        }
-        S = CollAt (&Info->CSymFuncByName, I);
-        if (strcmp (S->Name, Name) != 0) {
-            /* Next symbol has another name */
-            break;
-        }
-        ++Count;
-    }
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_csyminfo (Count);
-
-    /* Fill in the data */
-    for (I = 0; I < Count; ++I, ++Index) {
-        CopyCSymInfo (D->data + I, CollAt (&Info->CSymFuncByName, Index));
-    }
-
-    /* Return the result */
-    return D;
-}
-
-
-
-const cc65_csyminfo* cc65_csym_byscope (cc65_dbginfo Handle, unsigned ScopeId)
-/* Return all C symbols for a scope. The function will return NULL if the
-** given id is invalid.
-*/
-{
-    const DbgInfo*      Info;
-    const ScopeInfo*    S;
-    cc65_csyminfo*      D;
-    unsigned            I;
-
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the scope id is valid */
-    if (ScopeId >= CollCount (&Info->ScopeInfoById)) {
-        return 0;
-    }
-
-    /* Get a pointer to the scope */
-    S = CollAt (&Info->ScopeInfoById, ScopeId);
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_csyminfo (CollCount (S->CSymInfoByName));
-
-    /* Fill in the data */
-    for (I = 0; I < CollCount (S->CSymInfoByName); ++I) {
-        CopyCSymInfo (D->data + I, CollAt (S->CSymInfoByName, I));
-    }
-
-    /* Return the result */
-    return D;
-}
-
-
-
-void cc65_free_csyminfo (cc65_dbginfo Handle, const cc65_csyminfo* Info)
-/* Free a c symbol info record */
-{
-    /* Just for completeness, check the handle */
-    assert (Handle != 0);
-
-    /* Just free the memory */
-    xfree ((cc65_csyminfo*) Info);
-}
-
-
-
-/*****************************************************************************/
-/*                                 Libraries                                 */
-/*****************************************************************************/
-
-
-
-const cc65_libraryinfo* cc65_get_librarylist (cc65_dbginfo Handle)
-/* Return a list of all libraries */
-{
-    const DbgInfo*      Info;
-    cc65_libraryinfo*   D;
-    unsigned            I;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_libraryinfo (CollCount (&Info->LibInfoById));
-
-    /* Fill in the data */
-    for (I = 0; I < CollCount (&Info->LibInfoById); ++I) {
-        /* Copy the data */
-        CopyLibInfo (D->data + I, CollAt (&Info->LibInfoById, I));
-    }
-
-    /* Return the result */
-    return D;
-}
-
-
-
-const cc65_libraryinfo* cc65_library_byid (cc65_dbginfo Handle, unsigned Id)
-/* Return information about a library with a specific id. The function
-** returns NULL if the id is invalid (no such library) and otherwise a
-** cc65_libraryinfo structure with one entry that contains the requested
-** library information.
-*/
-{
-    const DbgInfo*      Info;
-    cc65_libraryinfo*   D;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the id is valid */
-    if (Id >= CollCount (&Info->LibInfoById)) {
-        return 0;
-    }
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_libraryinfo (1);
-
-    /* Fill in the data */
-    CopyLibInfo (D->data, CollAt (&Info->LibInfoById, Id));
-
-    /* Return the result */
-    return D;
-}
-
-
-
-void cc65_free_libraryinfo (cc65_dbginfo Handle, const cc65_libraryinfo* Info)
-/* Free a library info record */
-{
-    /* Just for completeness, check the handle */
-    assert (Handle != 0);
-
-    /* Just free the memory */
-    xfree ((cc65_libraryinfo*) Info);
-}
-
-
-
-/*****************************************************************************/
-/*                                 Line info                                 */
-/*****************************************************************************/
-
-
-
-const cc65_lineinfo* cc65_line_byid (cc65_dbginfo Handle, unsigned Id)
-/* Return information about a line with a specific id. The function
-** returns NULL if the id is invalid (no such line) and otherwise a
-** cc65_lineinfo structure with one entry that contains the requested
-** module information.
-*/
-{
-    const DbgInfo*      Info;
-    cc65_lineinfo*      D;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the id is valid */
-    if (Id >= CollCount (&Info->LineInfoById)) {
-        return 0;
-    }
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_lineinfo (1);
-
-    /* Fill in the data */
-    CopyLineInfo (D->data, CollAt (&Info->LineInfoById, Id));
-
-    /* Return the result */
-    return D;
-}
-
-
-
-const cc65_lineinfo* cc65_line_bynumber (cc65_dbginfo Handle, unsigned FileId,
-                                         cc65_line Line)
-/* Return line information for a source file/line number combination. The
-** function returns NULL if no line information was found.
-*/
-{
-    const DbgInfo*  Info;
-    const FileInfo* F;
-    cc65_lineinfo*  D;
-    LineInfo*       L = 0;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the source file id is valid */
-    if (FileId >= CollCount (&Info->FileInfoById)) {
-        return 0;
-    }
-
-    /* Get the file */
-    F = CollAt (&Info->FileInfoById, FileId);
-
-    /* Search in the file for the given line */
-    L = FindLineInfoByLine (&F->LineInfoByLine, Line);
-
-    /* Bail out if we didn't find the line */
-    if (L == 0) {
-        return 0;
-    }
-
-    /* Prepare the struct we will return to the caller */
-    D = new_cc65_lineinfo (1);
-
-    /* Copy the data */
-    CopyLineInfo (D->data, L);
-
-    /* Return the allocated struct */
-    return D;
-}
-
-
-
-const cc65_lineinfo* cc65_line_bysource (cc65_dbginfo Handle, unsigned FileId)
-/* Return line information for a source file. The function returns NULL if the
-** file id is invalid.
-*/
-{
-    const DbgInfo*  Info;
-    const FileInfo* F;
-    cc65_lineinfo*  D;
-    unsigned        I;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the source file id is valid */
-    if (FileId >= CollCount (&Info->FileInfoById)) {
-        return 0;
-    }
-
-    /* Get the file */
-    F = CollAt (&Info->FileInfoById, FileId);
-
-    /* Prepare the struct we will return to the caller */
-    D = new_cc65_lineinfo (CollCount (&F->LineInfoByLine));
-
-    /* Fill in the data */
-    for (I = 0; I < CollCount (&F->LineInfoByLine); ++I) {
-        /* Copy the data */
-        CopyLineInfo (D->data + I, CollAt (&F->LineInfoByLine, I));
-    }
-
-    /* Return the allocated struct */
-    return D;
-}
-
-
-
-const cc65_lineinfo* cc65_line_bysymdef (cc65_dbginfo Handle, unsigned SymId)
-/* Return line information for the definition of a symbol. The function
-** returns NULL if the symbol id is invalid, otherwise a list of line infos.
-*/
-{
-    const DbgInfo*  Info;
-    const SymInfo*  S;
-    cc65_lineinfo*  D;
-    unsigned        I;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the symbol id is valid */
-    if (SymId >= CollCount (&Info->SymInfoById)) {
-        return 0;
-    }
-
-    /* Get the symbol */
-    S = CollAt (&Info->SymInfoById, SymId);
-
-    /* Prepare the struct we will return to the caller */
-    D = new_cc65_lineinfo (CollCount (&S->DefLineInfoList));
-
-    /* Fill in the data */
-    for (I = 0; I < CollCount (&S->DefLineInfoList); ++I) {
-        /* Copy the data */
-        CopyLineInfo (D->data + I, CollAt (&S->DefLineInfoList, I));
-    }
-
-    /* Return the allocated struct */
-    return D;
-}
-
-
-
-const cc65_lineinfo* cc65_line_bysymref (cc65_dbginfo Handle, unsigned SymId)
-/* Return line information for all references of a symbol. The function
-** returns NULL if the symbol id is invalid, otherwise a list of line infos.
-*/
-{
-    const DbgInfo*  Info;
-    const SymInfo*  S;
-    cc65_lineinfo*  D;
-    unsigned        I;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the symbol id is valid */
-    if (SymId >= CollCount (&Info->SymInfoById)) {
-        return 0;
-    }
-
-    /* Get the symbol */
-    S = CollAt (&Info->SymInfoById, SymId);
-
-    /* Prepare the struct we will return to the caller */
-    D = new_cc65_lineinfo (CollCount (&S->RefLineInfoList));
-
-    /* Fill in the data */
-    for (I = 0; I < CollCount (&S->RefLineInfoList); ++I) {
-        /* Copy the data */
-        CopyLineInfo (D->data + I, CollAt (&S->RefLineInfoList, I));
-    }
-
-    /* Return the allocated struct */
-    return D;
-}
-
-
-
-const cc65_lineinfo* cc65_line_byspan (cc65_dbginfo Handle, unsigned SpanId)
-/* Return line information for a a span. The function returns NULL if the
-** span id is invalid, otherwise a list of line infos.
-*/
-{
-    const DbgInfo*  Info;
-    const SpanInfo* S;
-    cc65_lineinfo*  D;
-    unsigned        I;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the span id is valid */
-    if (SpanId >= CollCount (&Info->SpanInfoById)) {
-        return 0;
-    }
-
-    /* Get the span */
-    S = CollAt (&Info->SpanInfoById, SpanId);
-
-    /* Prepare the struct we will return to the caller */
-    D = new_cc65_lineinfo (CollCount (S->LineInfoList));
-
-    /* Fill in the data. Since S->LineInfoList may be NULL, we will use the
-    ** count field of the returned data struct instead.
-    */
-    for (I = 0; I < D->count; ++I) {
-        /* Copy the data */
-        CopyLineInfo (D->data + I, CollAt (S->LineInfoList, I));
-    }
-
-    /* Return the allocated struct */
-    return D;
-}
-
-
-
-void cc65_free_lineinfo (cc65_dbginfo Handle, const cc65_lineinfo* Info)
-/* Free line info returned by one of the other functions */
-{
-    /* Just for completeness, check the handle */
-    assert (Handle != 0);
-
-    /* Just free the memory */
-    xfree ((cc65_lineinfo*) Info);
-}
-
-
-
-/*****************************************************************************/
-/*                                  Modules                                  */
-/*****************************************************************************/
-
-
-
-const cc65_moduleinfo* cc65_get_modulelist (cc65_dbginfo Handle)
-/* Return a list of all modules */
-{
-    const DbgInfo*      Info;
-    cc65_moduleinfo*    D;
-    unsigned            I;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_moduleinfo (CollCount (&Info->ModInfoById));
-
-    /* Fill in the data */
-    for (I = 0; I < CollCount (&Info->ModInfoById); ++I) {
-        /* Copy the data */
-        CopyModInfo (D->data + I, CollAt (&Info->ModInfoById, I));
-    }
-
-    /* Return the result */
-    return D;
-}
-
-
-
-const cc65_moduleinfo* cc65_module_byid (cc65_dbginfo Handle, unsigned Id)
-/* Return information about a module with a specific id. The function
-** returns NULL if the id is invalid (no such module) and otherwise a
-** cc65_moduleinfo structure with one entry that contains the requested
-** module information.
-*/
-{
-    const DbgInfo*      Info;
-    cc65_moduleinfo*    D;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the id is valid */
-    if (Id >= CollCount (&Info->ModInfoById)) {
-        return 0;
-    }
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_moduleinfo (1);
-
-    /* Fill in the data */
-    CopyModInfo (D->data, CollAt (&Info->ModInfoById, Id));
-
-    /* Return the result */
-    return D;
-}
-
-
-
-void cc65_free_moduleinfo (cc65_dbginfo Handle, const cc65_moduleinfo* Info)
-/* Free a module info record */
-{
-    /* Just for completeness, check the handle */
-    assert (Handle != 0);
-
-    /* Just free the memory */
-    xfree ((cc65_moduleinfo*) Info);
-}
-
-
-
-/*****************************************************************************/
-/*                                   Spans                                   */
-/*****************************************************************************/
-
-
-
-const cc65_spaninfo* cc65_get_spanlist (cc65_dbginfo Handle)
-/* Return a list of all spans */
-{
-    const DbgInfo*      Info;
-    cc65_spaninfo*      D;
-    unsigned            I;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_spaninfo (CollCount (&Info->SpanInfoById));
-
-    /* Fill in the data */
-    for (I = 0; I < CollCount (&Info->SpanInfoById); ++I) {
-        /* Copy the data */
-        CopySpanInfo (D->data + I, CollAt (&Info->SpanInfoById, I));
-    }
-
-    /* Return the result */
-    return D;
-}
-
-
-
-const cc65_spaninfo* cc65_span_byid (cc65_dbginfo Handle, unsigned Id)
-/* Return information about a span with a specific id. The function
-** returns NULL if the id is invalid (no such span) and otherwise a
-** cc65_spaninfo structure with one entry that contains the requested
-** span information.
-*/
-{
-    const DbgInfo*      Info;
-    cc65_spaninfo*      D;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the id is valid */
-    if (Id >= CollCount (&Info->SpanInfoById)) {
-        return 0;
-    }
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_spaninfo (1);
-
-    /* Fill in the data */
-    CopySpanInfo (D->data, CollAt (&Info->SpanInfoById, Id));
-
-    /* Return the result */
-    return D;
-}
-
-
-
-const cc65_spaninfo* cc65_span_byaddr (cc65_dbginfo Handle, unsigned long Addr)
-/* Return span information for the given address. The function returns NULL
-** if no spans were found for this address.
-*/
-{
-    const DbgInfo*      Info;
-    SpanInfoListEntry* E;
-    cc65_spaninfo*  D = 0;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Search for spans that cover this address */
-    E = FindSpanInfoByAddr (&Info->SpanInfoByAddr, Addr);
-
-    /* Do we have spans? */
-    if (E != 0) {
-
-        unsigned I;
-
-        /* Prepare the struct we will return to the caller */
-        D = new_cc65_spaninfo (E->Count);
-        if (E->Count == 1) {
-            CopySpanInfo (D->data, E->Data);
-        } else {
-            for (I = 0; I < D->count; ++I) {
-                /* Copy data */
-                CopySpanInfo (D->data + I, ((SpanInfo**) E->Data)[I]);
-            }
-        }
-    }
-
-    /* Return the struct we've created */
-    return D;
-}
-
-
-
-const cc65_spaninfo* cc65_span_byline (cc65_dbginfo Handle, unsigned LineId)
-/* Return span information for the given source line. The function returns NULL
-** if the line id is invalid, otherwise the spans for this line (possibly zero).
-*/
-{
-    const DbgInfo*      Info;
-    const LineInfo*     L;
-    cc65_spaninfo*      D;
-    unsigned            I;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the line id is valid */
-    if (LineId >= CollCount (&Info->LineInfoById)) {
-        return 0;
-    }
-
-    /* Get the line with this id */
-    L = CollAt (&Info->LineInfoById, LineId);
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_spaninfo (CollCount (&L->SpanInfoList));
-
-    /* Fill in the data */
-    for (I = 0; I < CollCount (&L->SpanInfoList); ++I) {
-        /* Copy the data */
-        CopySpanInfo (D->data + I, CollAt (&L->SpanInfoList, I));
-    }
-
-    /* Return the result */
-    return D;
-}
-
-
-
-const cc65_spaninfo* cc65_span_byscope (cc65_dbginfo Handle, unsigned ScopeId)
-/* Return span information for the given scope. The function returns NULL if
-** the scope id is invalid, otherwise the spans for this scope (possibly zero).
-*/
-{
-    const DbgInfo*      Info;
-    const ScopeInfo*    S;
-    cc65_spaninfo*      D;
-    unsigned            I;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the scope id is valid */
-    if (ScopeId >= CollCount (&Info->ScopeInfoById)) {
-        return 0;
-    }
-
-    /* Get the scope with this id */
-    S = CollAt (&Info->ScopeInfoById, ScopeId);
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_spaninfo (CollCount (&S->SpanInfoList));
-
-    /* Fill in the data */
-    for (I = 0; I < CollCount (&S->SpanInfoList); ++I) {
-        /* Copy the data */
-        CopySpanInfo (D->data + I, CollAt (&S->SpanInfoList, I));
-    }
-
-    /* Return the result */
-    return D;
-}
-
-
-
-void cc65_free_spaninfo (cc65_dbginfo Handle, const cc65_spaninfo* Info)
-/* Free a span info record */
-{
-    /* Just for completeness, check the handle */
-    assert (Handle != 0);
-
-    /* Just free the memory */
-    xfree ((cc65_spaninfo*) Info);
-}
-
-
-
-/*****************************************************************************/
-/*                               Source files                                */
-/*****************************************************************************/
-
-
-
-const cc65_sourceinfo* cc65_get_sourcelist (cc65_dbginfo Handle)
-/* Return a list of all source files */
-{
-    const DbgInfo*      Info;
-    cc65_sourceinfo*    D;
-    unsigned            I;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Allocate memory for the data structure returned to the caller. */
-    D = new_cc65_sourceinfo (CollCount (&Info->FileInfoById));
-
-    /* Fill in the data */
-    for (I = 0; I < CollCount (&Info->FileInfoById); ++I) {
-        /* Copy the data */
-        CopyFileInfo (D->data + I, CollAt (&Info->FileInfoById, I));
-    }
-
-    /* Return the result */
-    return D;
-}
-
-
-
-const cc65_sourceinfo* cc65_source_byid (cc65_dbginfo Handle, unsigned Id)
-/* Return information about a source file with a specific id. The function
-** returns NULL if the id is invalid (no such source file) and otherwise a
-** cc65_sourceinfo structure with one entry that contains the requested
-** source file information.
-*/
-{
-    const DbgInfo*      Info;
-    cc65_sourceinfo*    D;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the id is valid */
-    if (Id >= CollCount (&Info->FileInfoById)) {
-        return 0;
-    }
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_sourceinfo (1);
-
-    /* Fill in the data */
-    CopyFileInfo (D->data, CollAt (&Info->FileInfoById, Id));
-
-    /* Return the result */
-    return D;
-}
-
-
-
-
-const cc65_sourceinfo* cc65_source_bymodule (cc65_dbginfo Handle, unsigned Id)
-/* Return information about the source files used to build a module. The
-** function returns NULL if the module id is invalid (no such module) and
-** otherwise a cc65_sourceinfo structure with one entry per source file.
-*/
-{
-    const DbgInfo*      Info;
-    const ModInfo*      M;
-    cc65_sourceinfo*    D;
-    unsigned            I;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the module id is valid */
-    if (Id >= CollCount (&Info->ModInfoById)) {
-        return 0;
-    }
-
-    /* Get a pointer to the module info */
-    M = CollAt (&Info->ModInfoById, Id);
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_sourceinfo (CollCount (&M->FileInfoByName));
-
-    /* Fill in the data */
-    for (I = 0; I < CollCount (&M->FileInfoByName); ++I) {
-        CopyFileInfo (D->data + I, CollAt (&M->FileInfoByName, I));
-    }
-
-    /* Return the result */
-    return D;
-}
-
-
-
-void cc65_free_sourceinfo (cc65_dbginfo Handle, const cc65_sourceinfo* Info)
-/* Free a source info record */
-{
-    /* Just for completeness, check the handle */
-    assert (Handle != 0);
-
-    /* Free the memory */
-    xfree ((cc65_sourceinfo*) Info);
-}
-
-
-
-/*****************************************************************************/
-/*                                  Scopes                                   */
-/*****************************************************************************/
-
-
-
-const cc65_scopeinfo* cc65_get_scopelist (cc65_dbginfo Handle)
-/* Return a list of all scopes in the debug information */
-{
-    const DbgInfo*      Info;
-    cc65_scopeinfo*     D;
-    unsigned            I;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_scopeinfo (CollCount (&Info->ScopeInfoById));
-
-    /* Fill in the data */
-    for (I = 0; I < CollCount (&Info->ScopeInfoById); ++I) {
-        /* Copy the data */
-        CopyScopeInfo (D->data + I, CollAt (&Info->ScopeInfoById, I));
-    }
-
-    /* Return the result */
-    return D;
-}
-
-
-
-const cc65_scopeinfo* cc65_scope_byid (cc65_dbginfo Handle, unsigned Id)
-/* Return the scope with a given id. The function returns NULL if no scope
-** with this id was found.
-*/
-{
-    const DbgInfo*      Info;
-    cc65_scopeinfo*     D;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the id is valid */
-    if (Id >= CollCount (&Info->ScopeInfoById)) {
-        return 0;
-    }
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_scopeinfo (1);
-
-    /* Fill in the data */
-    CopyScopeInfo (D->data, CollAt (&Info->ScopeInfoById, Id));
-
-    /* Return the result */
-    return D;
-}
-
-
-
-const cc65_scopeinfo* cc65_scope_bymodule (cc65_dbginfo Handle, unsigned ModId)
-/* Return the list of scopes for one module. The function returns NULL if no
-** scope with the given id was found.
-*/
-{
-    const DbgInfo*      Info;
-    const ModInfo*      M;
-    cc65_scopeinfo*     D;
-    unsigned            I;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the module id is valid */
-    if (ModId >= CollCount (&Info->ModInfoById)) {
-        return 0;
-    }
-
-    /* Get a pointer to the module info */
-    M = CollAt (&Info->ModInfoById, ModId);
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_scopeinfo (CollCount (&M->ScopeInfoByName));
-
-    /* Fill in the data */
-    for (I = 0; I < CollCount (&M->ScopeInfoByName); ++I) {
-        CopyScopeInfo (D->data + I, CollAt (&M->ScopeInfoByName, I));
-    }
-
-    /* Return the result */
-    return D;
-}
-
-
-
-const cc65_scopeinfo* cc65_scope_byname (cc65_dbginfo Handle, const char* Name)
-/* Return the list of scopes with a given name. Returns NULL if no scope with
-** the given name was found, otherwise a non empty scope list.
-*/
-{
-    const DbgInfo*      Info;
-    unsigned            Index;
-    const ScopeInfo*    S;
-    cc65_scopeinfo*     D;
-    unsigned            Count;
-    unsigned            I;
-
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Search for the first item with the given name */
-    if (!FindScopeInfoByName (&Info->ScopeInfoByName, Name, &Index)) {
-        /* Not found */
-        return 0;
-    }
-
-    /* Count scopes with this name */
-    Count = 1;
-    I = Index;
-    while (1) {
-        if (++I >= CollCount (&Info->ScopeInfoByName)) {
-            break;
-        }
-        S = CollAt (&Info->ScopeInfoByName, I);
-        if (strcmp (S->Name, Name) != 0) {
-            /* Next symbol has another name */
-            break;
-        }
-        ++Count;
-    }
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_scopeinfo (Count);
-
-    /* Fill in the data */
-    for (I = 0; I < Count; ++I, ++Index) {
-        CopyScopeInfo (D->data + I, CollAt (&Info->ScopeInfoByName, Index));
-    }
-
-    /* Return the result */
-    return D;
-}
-
-
-
-const cc65_scopeinfo* cc65_scope_byspan (cc65_dbginfo Handle, unsigned SpanId)
-/* Return scope information for a a span. The function returns NULL if the
-** span id is invalid, otherwise a list of line scopes.
-*/
-{
-    const DbgInfo*      Info;
-    const SpanInfo*     S;
-    cc65_scopeinfo*     D;
-    unsigned            I;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the span id is valid */
-    if (SpanId >= CollCount (&Info->SpanInfoById)) {
-        return 0;
-    }
-
-    /* Get the span */
-    S = CollAt (&Info->SpanInfoById, SpanId);
-
-    /* Prepare the struct we will return to the caller */
-    D = new_cc65_scopeinfo (CollCount (S->ScopeInfoList));
-
-    /* Fill in the data. Since D->ScopeInfoList may be NULL, we will use the
-    ** count field of the returned data struct instead.
-    */
-    for (I = 0; I < D->count; ++I) {
-        /* Copy the data */
-        CopyScopeInfo (D->data + I, CollAt (S->ScopeInfoList, I));
-    }
-
-    /* Return the allocated struct */
-    return D;
-}
-
-
-
-const cc65_scopeinfo* cc65_childscopes_byid (cc65_dbginfo Handle, unsigned Id)
-/* Return the direct child scopes of a scope with a given id. The function
-** returns NULL if no scope with this id was found, otherwise a list of the
-** direct childs.
-*/
-{
-    const DbgInfo*      Info;
-    cc65_scopeinfo*     D;
-    const ScopeInfo*    S;
-    unsigned            I;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the id is valid */
-    if (Id >= CollCount (&Info->ScopeInfoById)) {
-        return 0;
-    }
-
-    /* Get the scope */
-    S = CollAt (&Info->ScopeInfoById, Id);
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_scopeinfo (CollCount (S->ChildScopeList));
-
-    /* Fill in the data */
-    for (I = 0; I < D->count; ++I) {
-        CopyScopeInfo (D->data + I, CollAt (S->ChildScopeList, I));
-    }
-
-    /* Return the result */
-    return D;
-}
-
-
-
-void cc65_free_scopeinfo (cc65_dbginfo Handle, const cc65_scopeinfo* Info)
-/* Free a scope info record */
-{
-    /* Just for completeness, check the handle */
-    assert (Handle != 0);
-
-    /* Free the memory */
-    xfree ((cc65_scopeinfo*) Info);
-}
-
-
-
-/*****************************************************************************/
-/*                                 Segments                                  */
-/*****************************************************************************/
-
-
-
-const cc65_segmentinfo* cc65_get_segmentlist (cc65_dbginfo Handle)
-/* Return a list of all segments referenced in the debug information */
-{
-    const DbgInfo*      Info;
-    cc65_segmentinfo*   D;
-    unsigned            I;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_segmentinfo (CollCount (&Info->SegInfoById));
-
-    /* Fill in the data */
-    for (I = 0; I < CollCount (&Info->SegInfoById); ++I) {
-        /* Copy the data */
-        CopySegInfo (D->data + I, CollAt (&Info->SegInfoById, I));
-    }
-
-    /* Return the result */
-    return D;
-}
-
-
-
-const cc65_segmentinfo* cc65_segment_byid (cc65_dbginfo Handle, unsigned Id)
-/* Return information about a segment with a specific id. The function returns
-** NULL if the id is invalid (no such segment) and otherwise a segmentinfo
-** structure with one entry that contains the requested segment information.
-*/
-{
-    const DbgInfo*      Info;
-    cc65_segmentinfo*   D;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the id is valid */
-    if (Id >= CollCount (&Info->SegInfoById)) {
-        return 0;
-    }
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_segmentinfo (1);
-
-    /* Fill in the data */
-    CopySegInfo (D->data, CollAt (&Info->SegInfoById, Id));
-
-    /* Return the result */
-    return D;
-}
-
-
-
-const cc65_segmentinfo* cc65_segment_byname (cc65_dbginfo Handle,
-                                             const char* Name)
-/* Return information about a segment with a specific name. The function
-** returns NULL if no segment with this name exists and otherwise a
-** cc65_segmentinfo structure with one entry that contains the requested
-** information.
-*/
-{
-    const DbgInfo*      Info;
-    const SegInfo*      S;
-    cc65_segmentinfo*   D;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Search for the segment */
-    S = FindSegInfoByName (&Info->SegInfoByName, Name);
-    if (S == 0) {
-        return 0;
-    }
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_segmentinfo (1);
-
-    /* Fill in the data */
-    CopySegInfo (D->data, S);
-
-    /* Return the result */
-    return D;
-}
-
-
-
-void cc65_free_segmentinfo (cc65_dbginfo Handle, const cc65_segmentinfo* Info)
-/* Free a segment info record */
-{
-    /* Just for completeness, check the handle */
-    assert (Handle != 0);
-
-    /* Free the memory */
-    xfree ((cc65_segmentinfo*) Info);
-}
-
-
-
-/*****************************************************************************/
-/*                                  Symbols                                  */
-/*****************************************************************************/
-
-
-
-const cc65_symbolinfo* cc65_symbol_byid (cc65_dbginfo Handle, unsigned Id)
-/* Return the symbol with a given id. The function returns NULL if no symbol
-** with this id was found.
-*/
-{
-    const DbgInfo*      Info;
-    cc65_symbolinfo*    D;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the id is valid */
-    if (Id >= CollCount (&Info->SymInfoById)) {
-        return 0;
-    }
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_symbolinfo (1);
-
-    /* Fill in the data */
-    CopySymInfo (D->data, CollAt (&Info->SymInfoById, Id));
-
-    /* Return the result */
-    return D;
-}
-
-
-
-const cc65_symbolinfo* cc65_symbol_byname (cc65_dbginfo Handle, const char* Name)
-/* Return a list of symbols with a given name. The function returns NULL if
-** no symbol with this name was found.
-*/
-{
-    const DbgInfo*      Info;
-    cc65_symbolinfo*    D;
-    unsigned            I;
-    unsigned            Index;
-    unsigned            Count;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Search for the symbol */
-    if (!FindSymInfoByName (&Info->SymInfoByName, Name, &Index)) {
-        /* Not found */
-        return 0;
-    }
-
-    /* Index contains the position. Count how many symbols with this name
-    ** we have. Skip the first one, since we have at least one.
-    */
-    Count = 1;
-    while ((unsigned) Index + Count < CollCount (&Info->SymInfoByName)) {
-        const SymInfo* S = CollAt (&Info->SymInfoByName, (unsigned) Index + Count);
-        if (strcmp (S->Name, Name) != 0) {
-            break;
-        }
-        ++Count;
-    }
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_symbolinfo (Count);
-
-    /* Fill in the data */
-    for (I = 0; I < Count; ++I) {
-        /* Copy the data */
-        CopySymInfo (D->data + I, CollAt (&Info->SymInfoByName, Index++));
-    }
-
-    /* Return the result */
-    return D;
-}
-
-
-
-const cc65_symbolinfo* cc65_symbol_byscope (cc65_dbginfo Handle, unsigned ScopeId)
-/* Return a list of symbols in the given scope. This includes cheap local
-** symbols, but not symbols in subscopes. The function returns NULL if the
-** scope id is invalid (no such scope) and otherwise a - possibly empty -
-** symbol list.
-*/
-{
-    const DbgInfo*      Info;
-    cc65_symbolinfo*    D;
-    const ScopeInfo*    S;
-    unsigned            I;
-
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the id is valid */
-    if (ScopeId >= CollCount (&Info->ScopeInfoById)) {
-        return 0;
-    }
-
-    /* Get the scope */
-    S = CollAt (&Info->ScopeInfoById, ScopeId);
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_symbolinfo (CollCount (&S->SymInfoByName));
-
-    /* Fill in the data */
-    for (I = 0; I < CollCount (&S->SymInfoByName); ++I) {
-        /* Copy the data */
-        CopySymInfo (D->data + I, CollAt (&S->SymInfoByName, I));
-    }
-
-    /* Return the result */
-    return D;
-}
-
-
-
-const cc65_symbolinfo* cc65_symbol_inrange (cc65_dbginfo Handle, cc65_addr Start,
-                                            cc65_addr End)
-/* Return a list of labels in the given range. End is inclusive. The function
-** return NULL if no symbols within the given range are found. Non label
-** symbols are ignored and not returned.
-*/
-{
-    const DbgInfo*      Info;
-    Collection          SymInfoList = COLLECTION_INITIALIZER;
-    cc65_symbolinfo*    D;
-    unsigned            I;
-    unsigned            Index;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Search for the symbol. Because we're searching for a range, we cannot
-    ** make use of the function result.
-    */
-    FindSymInfoByValue (&Info->SymInfoByVal, Start, &Index);
-
-    /* Start from the given index, check all symbols until the end address is
-    ** reached. Place all symbols into SymInfoList for later.
-    */
-    for (I = Index; I < CollCount (&Info->SymInfoByVal); ++I) {
-
-        /* Get the item */
-        SymInfo* Item = CollAt (&Info->SymInfoByVal, I);
-
-        /* The collection is sorted by address, so if we get a value larger
-        ** than the end address, we're done.
-        */
-        if (Item->Value > (long) End) {
-            break;
-        }
-
-        /* Ignore non-labels (this will also ignore imports) */
-        if (Item->Type != CC65_SYM_LABEL) {
-            continue;
-        }
-
-        /* Ok, remember this one */
-        CollAppend (&SymInfoList, Item);
-    }
-
-    /* If we don't have any labels within the range, bail out. No memory has
-    ** been allocated for SymInfoList.
-    */
-    if (CollCount (&SymInfoList) == 0) {
-        return 0;
-    }
-
-    /* Allocate memory for the data structure returned to the caller */
-    D = new_cc65_symbolinfo (CollCount (&SymInfoList));
-
-    /* Fill in the data */
-    for (I = 0; I < CollCount (&SymInfoList); ++I) {
-        /* Copy the data */
-        CopySymInfo (D->data + I, CollAt (&SymInfoList, I));
-    }
-
-    /* Free the collection */
-    CollDone (&SymInfoList);
-
-    /* Return the result */
-    return D;
-}
-
-
-
-void cc65_free_symbolinfo (cc65_dbginfo Handle, const cc65_symbolinfo* Info)
-/* Free a symbol info record */
-{
-    /* Just for completeness, check the handle */
-    assert (Handle != 0);
-
-    /* Free the memory */
-    xfree ((cc65_symbolinfo*) Info);
-}
-
-
-
-/*****************************************************************************/
-/*                                   Types                                   */
-/*****************************************************************************/
-
-
-
-const cc65_typedata* cc65_type_byid (cc65_dbginfo Handle, unsigned Id)
-/* Return the data for the type with the given id. The function returns NULL
-** if no type with this id was found.
-*/
-{
-    const DbgInfo*        Info;
-    const TypeInfo*       T;
-
-    /* Check the parameter */
-    assert (Handle != 0);
-
-    /* The handle is actually a pointer to a debug info struct */
-    Info = Handle;
-
-    /* Check if the id is valid */
-    if (Id >= CollCount (&Info->TypeInfoById)) {
-        return 0;
-    }
-
-    /* Get the type info with the given id */
-    T = CollAt (&Info->TypeInfoById, Id);
-
-    /* We do already have the type data. Return it. */
-    return T->Data;
-}
-
-
-
-void cc65_free_typedata (cc65_dbginfo Handle, const cc65_typedata* data)
-/* Free a symbol info record */
-{
-    /* Just for completeness, check the handle and the data*/
-    assert (Handle != 0 && data != 0);
-
-    /* Nothing to do */
-}
-
-
-
diff --git a/src/dbginfo/dbginfo.h b/src/dbginfo/dbginfo.h
deleted file mode 100644 (file)
index 7317e57..0000000
+++ /dev/null
@@ -1,709 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 dbginfo.h                                 */
-/*                                                                           */
-/*                         cc65 debug info handling                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2010-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef DBGINFO_H
-#define DBGINFO_H
-
-
-
-/* Allow usage from C++ */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Data types used for addresses, sizes and line numbers. Change to "unsigned
-** long" if you ever want to run the code on a 16-bit machine.
-*/
-typedef unsigned cc65_line;             /* Used to store line numbers */
-typedef unsigned cc65_addr;             /* Used to store (65xx) addresses */
-typedef unsigned cc65_size;             /* Used to store (65xx) sizes */
-
-/* A value that is used to mark invalid ids */
-#define CC65_INV_ID     (~0U)
-
-
-
-/*****************************************************************************/
-/*                             Debug info files                              */
-/*****************************************************************************/
-
-
-
-/* Severity for cc65_parseerror */
-typedef enum {
-    CC65_WARNING,
-    CC65_ERROR,
-} cc65_error_severity;
-
-/* Warnings/errors in cc65_read_dbginfo are passed via this struct */
-typedef struct cc65_parseerror cc65_parseerror;
-struct cc65_parseerror {
-    cc65_error_severity type;           /* Type of error */
-    const char*         name;           /* Name of input file */
-    cc65_line           line;           /* Error line */
-    unsigned            column;         /* Error column */
-    char                errormsg[1];    /* Error message */
-};
-
-/* Function that is called in case of parse errors */
-typedef void (*cc65_errorfunc) (const cc65_parseerror*);
-
-/* Pointer to an opaque data structure containing information from the debug
-** info file. Actually a handle to the data in the file.
-*/
-typedef const void* cc65_dbginfo;
-
-
-
-cc65_dbginfo cc65_read_dbginfo (const char* filename, cc65_errorfunc errorfunc);
-/* Parse the debug info file with the given name. On success, the function
-** will return a pointer to an opaque cc65_dbginfo structure, that must be
-** passed to the other functions in this module to retrieve information.
-** errorfunc is called in case of warnings and errors. If the file cannot be
-** read successfully, NULL is returned.
-*/
-
-void cc65_free_dbginfo (cc65_dbginfo Handle);
-/* Free debug information read from a file */
-
-
-
-/*****************************************************************************/
-/*                                 C Symbols                                 */
-/*****************************************************************************/
-
-
-
-/* C symbol kinds */
-typedef enum {
-    CC65_CSYM_FUNC,
-    CC65_CSYM_VAR
-} cc65_csym_kind;
-
-/* C object storage classes */
-typedef enum {
-    CC65_CSYM_AUTO,             /* Auto = on stack */
-    CC65_CSYM_REG,              /* Register = in register bank */
-    CC65_CSYM_STATIC,           /* Static = static storage */
-    CC65_CSYM_EXTERN            /* Extern = static storage + external visibility */
-} cc65_csym_sc;
-
-/* C symbol information */
-typedef struct cc65_csymdata cc65_csymdata;
-struct cc65_csymdata {
-    unsigned            csym_id;        /* The internal c symbol id */
-    unsigned char       csym_kind;      /* Kind of c symbol */
-    unsigned char       csym_sc;        /* Storage class of c symbol */
-    int                 csym_offs;      /* Offset for auto and register */
-    unsigned            type_id;        /* Id of the data type */ 
-    unsigned            symbol_id;      /* Attached asm symbol if any */
-    unsigned            scope_id;       /* Scope of c symbol */
-    const char*         csym_name;      /* Name of the symbol */
-};
-
-typedef struct cc65_csyminfo cc65_csyminfo;
-struct cc65_csyminfo {
-    unsigned            count;          /* Number of data sets that follow */
-    cc65_csymdata       data[1];        /* Data sets, number is dynamic */
-};
-
-
-
-const cc65_csyminfo* cc65_get_csymlist (cc65_dbginfo handle);
-/* Return a list of all c symbols */
-
-const cc65_csyminfo* cc65_csym_byid (cc65_dbginfo handle, unsigned id);
-/* Return information about a c symbol with a specific id. The function
-** returns NULL if the id is invalid (no such c symbol) and otherwise a
-** cc65_csyminfo structure with one entry that contains the requested
-** symbol information.
-*/
-
-const cc65_csyminfo* cc65_cfunc_bymodule (cc65_dbginfo handle, unsigned module_id);
-/* Return the list of C functions (not symbols!) for a specific module. If
-** the module id is invalid, the function will return NULL, otherwise a
-** (possibly empty) c symbol list.
-*/
-
-const cc65_csyminfo* cc65_cfunc_byname (cc65_dbginfo handle, const char* name);
-/* Return a list of all C functions with the given name that have a
-** definition.
-*/
-
-const cc65_csyminfo* cc65_csym_byscope (cc65_dbginfo handle, unsigned scope_id);
-/* Return all C symbols for a scope. The function will return NULL if the
-** given id is invalid.
-*/
-
-void cc65_free_csyminfo (cc65_dbginfo handle, const cc65_csyminfo* info);
-/* Free a c symbol info record */
-
-
-
-/*****************************************************************************/
-/*                                 Libraries                                 */
-/*****************************************************************************/
-
-
-
-/* Library information */
-typedef struct cc65_librarydata cc65_librarydata;
-struct cc65_librarydata {
-    unsigned            library_id;     /* The internal library id */
-    const char*         library_name;   /* Name of the library */
-};
-
-typedef struct cc65_libraryinfo cc65_libraryinfo;
-struct cc65_libraryinfo {
-    unsigned            count;          /* Number of data sets that follow */
-    cc65_librarydata    data[1];        /* Data sets, number is dynamic */
-};
-
-
-
-const cc65_libraryinfo* cc65_get_librarylist (cc65_dbginfo handle);
-/* Return a list of all libraries */
-
-const cc65_libraryinfo* cc65_library_byid (cc65_dbginfo handle, unsigned id);
-/* Return information about a library with a specific id. The function
-** returns NULL if the id is invalid (no such library) and otherwise a
-** cc65_libraryinfo structure with one entry that contains the requested
-** library information.
-*/
-
-void cc65_free_libraryinfo (cc65_dbginfo handle, const cc65_libraryinfo* info);
-/* Free a library info record */
-
-
-
-/*****************************************************************************/
-/*                                 Line info                                 */
-/*****************************************************************************/
-
-
-
-/* Type of line */
-typedef enum {
-    CC65_LINE_ASM,                      /* Assembler source */
-    CC65_LINE_EXT,                      /* Externally supplied (= C) */
-    CC65_LINE_MACRO,                    /* Macro expansion */
-} cc65_line_type;
-
-/* Line information */
-typedef struct cc65_linedata cc65_linedata;
-struct cc65_linedata {
-    unsigned            line_id;        /* Internal id of this record */
-    unsigned            source_id;      /* Id of the source file */
-    cc65_line           source_line;    /* Line number */
-    cc65_line_type      line_type;      /* Type of line */
-    unsigned            count;          /* Nesting counter for macros */
-};
-
-typedef struct cc65_lineinfo cc65_lineinfo;
-struct cc65_lineinfo {
-    unsigned            count;          /* Number of data sets that follow */
-    cc65_linedata       data[1];        /* Data sets, number is dynamic */
-};
-
-
-
-const cc65_lineinfo* cc65_line_byid (cc65_dbginfo handle, unsigned id);
-/* Return information about a line with a specific id. The function
-** returns NULL if the id is invalid (no such line) and otherwise a
-** cc65_lineinfo structure with one entry that contains the requested
-** module information.
-*/
-
-const cc65_lineinfo* cc65_line_bynumber (cc65_dbginfo handle,
-                                         unsigned source_id,
-                                         cc65_line line);
-/* Return line information for a source file/line number combination. The
-** function returns NULL if no line information was found.
-*/
-
-const cc65_lineinfo* cc65_line_bysource (cc65_dbginfo Handle, unsigned source_id);
-/* Return line information for a source file. The function returns NULL if the
-** file id is invalid.
-*/
-
-const cc65_lineinfo* cc65_line_bysymdef (cc65_dbginfo handle, unsigned symbol_id);
-/* Return line information for the definition of a symbol. The function
-** returns NULL if the symbol id is invalid, otherwise a list of line infos.
-*/
-
-const cc65_lineinfo* cc65_line_bysymref (cc65_dbginfo handle, unsigned symbol_id);
-/* Return line information for all references of a symbol. The function
-** returns NULL if the symbol id is invalid, otherwise a list of line infos.
-*/
-
-const cc65_lineinfo* cc65_line_byspan (cc65_dbginfo handle, unsigned span_id);
-/* Return line information for a a span. The function returns NULL if the
-** span id is invalid, otherwise a list of line infos.
-*/
-
-void cc65_free_lineinfo (cc65_dbginfo handle, const cc65_lineinfo* info);
-/* Free line info returned by one of the other functions */
-
-
-
-/*****************************************************************************/
-/*                                  Modules                                  */
-/*****************************************************************************/
-
-
-
-/* Module information
-** Notes:
-**   - scope_id contains CC65_INV_ID if the module was compiled without
-**     debug information.
-*/
-typedef struct cc65_moduledata cc65_moduledata;
-struct cc65_moduledata {
-    unsigned            module_id;      /* The internal module id */
-    const char*         module_name;    /* Name of the module */
-    unsigned            source_id;      /* Id of the module main file */
-    unsigned            library_id;     /* Id of the library if any */
-    unsigned            scope_id;       /* Id of the main scope */
-};
-
-typedef struct cc65_moduleinfo cc65_moduleinfo;
-struct cc65_moduleinfo {
-    unsigned            count;          /* Number of data sets that follow */
-    cc65_moduledata     data[1];        /* Data sets, number is dynamic */
-};
-
-
-
-const cc65_moduleinfo* cc65_get_modulelist (cc65_dbginfo handle);
-/* Return a list of all modules */
-
-const cc65_moduleinfo* cc65_module_byid (cc65_dbginfo handle, unsigned id);
-/* Return information about a module with a specific id. The function
-** returns NULL if the id is invalid (no such module) and otherwise a
-** cc65_moduleinfo structure with one entry that contains the requested
-** module information.
-*/
-
-void cc65_free_moduleinfo (cc65_dbginfo handle, const cc65_moduleinfo* info);
-/* Free a module info record */
-
-
-
-/*****************************************************************************/
-/*                                   Spans                                   */
-/*****************************************************************************/
-
-
-
-/* Span information */
-typedef struct cc65_spandata cc65_spandata;
-struct cc65_spandata {
-    unsigned            span_id;        /* The internal span id */
-    cc65_addr           span_start;     /* Start of the span */
-    cc65_addr           span_end;       /* End of the span (inclusive!) */
-    unsigned            segment_id;     /* Id of the segment */
-    unsigned            type_id;        /* Id of the type of this span */
-    unsigned            line_count;     /* Number of lines attached */
-    unsigned            scope_count;    /* Number of scopes attached */
-};
-
-typedef struct cc65_spaninfo cc65_spaninfo;
-struct cc65_spaninfo {
-    unsigned            count;          /* Number of data sets that follow */
-    cc65_spandata       data[1];        /* Data sets, number is dynamic */
-};
-
-
-
-const cc65_spaninfo* cc65_get_spanlist (cc65_dbginfo handle);
-/* Return a list of all spans. BEWARE: Large! */
-
-const cc65_spaninfo* cc65_span_byid (cc65_dbginfo handle, unsigned id);
-/* Return information about a span with a specific id. The function
-** returns NULL if the id is invalid (no such span) and otherwise a
-** cc65_spaninfo structure with one entry that contains the requested
-** span information.
-*/
-
-const cc65_spaninfo* cc65_span_byaddr (cc65_dbginfo handle,
-                                       unsigned long addr);
-/* Return span information for the given address. The function returns NULL
-** if no spans were found for this address.
-*/
-
-const cc65_spaninfo* cc65_span_byline (cc65_dbginfo handle, unsigned line_id);
-/* Return span information for the given source line. The function returns NULL
-** if the line id is invalid, otherwise the spans for this line (possibly zero).
-*/
-
-const cc65_spaninfo* cc65_span_byscope (cc65_dbginfo handle, unsigned scope_id);
-/* Return span information for the given scope. The function returns NULL if
-** the scope id is invalid, otherwise the spans for this scope (possibly zero).
-*/
-
-void cc65_free_spaninfo (cc65_dbginfo handle, const cc65_spaninfo* info);
-/* Free a span info record */
-
-
-
-/*****************************************************************************/
-/*                               Source files                                */
-/*****************************************************************************/
-
-
-
-/* Source file information */
-typedef struct cc65_sourcedata cc65_sourcedata;
-struct cc65_sourcedata {
-    unsigned            source_id;      /* The internal file id */
-    const char*         source_name;    /* Name of the file */
-    unsigned long       source_size;    /* Size of file */
-    unsigned long       source_mtime;   /* Modification time */
-};
-
-typedef struct cc65_sourceinfo cc65_sourceinfo;
-struct cc65_sourceinfo {
-    unsigned            count;          /* Number of data sets that follow */
-    cc65_sourcedata     data[1];        /* Data sets, number is dynamic */
-};
-
-
-
-const cc65_sourceinfo* cc65_get_sourcelist (cc65_dbginfo handle);
-/* Return a list of all source files */
-
-const cc65_sourceinfo* cc65_source_byid (cc65_dbginfo handle, unsigned id);
-/* Return information about a source file with a specific id. The function
-** returns NULL if the id is invalid (no such source file) and otherwise a
-** cc65_sourceinfo structure with one entry that contains the requested
-** source file information.
-*/
-
-const cc65_sourceinfo* cc65_source_bymodule (cc65_dbginfo handle,
-                                             unsigned module_id);
-/* Return information about the source files used to build a module. The
-** function returns NULL if the module id is invalid (no such module) and
-** otherwise a cc65_sourceinfo structure with one entry per source file.
-*/
-
-void cc65_free_sourceinfo (cc65_dbginfo handle, const cc65_sourceinfo* info);
-/* Free a source info record */
-
-
-
-/*****************************************************************************/
-/*                                  Scopes                                   */
-/*****************************************************************************/
-
-
-
-/* Scope information */
-typedef enum {
-    CC65_SCOPE_GLOBAL,                  /* Global scope */
-    CC65_SCOPE_MODULE,                  /* Module scope */
-    CC65_SCOPE_SCOPE,                   /* .PROC/.SCOPE */
-    CC65_SCOPE_STRUCT,                  /* .STRUCT */
-    CC65_SCOPE_ENUM,                    /* .ENUM */
-} cc65_scope_type;
-
-typedef struct cc65_scopedata cc65_scopedata;
-struct cc65_scopedata {
-    unsigned            scope_id;       /* Id of scope */
-    const char*         scope_name;     /* Name of scope */
-    cc65_scope_type     scope_type;     /* Type of scope */
-    cc65_size           scope_size;     /* Size of scope, 0 if unknown */
-    unsigned            parent_id;      /* Id of parent scope */
-    unsigned            symbol_id;      /* Id of scope symbol if any */
-    unsigned            module_id;      /* Id of the module */
-};
-
-typedef struct cc65_scopeinfo cc65_scopeinfo;
-struct cc65_scopeinfo {
-    unsigned            count;          /* Number of data sets that follow */
-    cc65_scopedata      data[1];        /* Data sets, number is dynamic */
-};
-
-
-
-const cc65_scopeinfo* cc65_get_scopelist (cc65_dbginfo handle);
-/* Return a list of all scopes in the debug information */
-
-const cc65_scopeinfo* cc65_scope_byid (cc65_dbginfo handle, unsigned id);
-/* Return the scope with a given id. The function returns NULL if no scope
-** with this id was found.
-*/
-
-const cc65_scopeinfo* cc65_scope_bymodule (cc65_dbginfo handle, unsigned module_id);
-/* Return the list of scopes for one module. The function returns NULL if no
-** scope with the given id was found.
-*/
-
-const cc65_scopeinfo* cc65_scope_byname (cc65_dbginfo handle, const char* name);
-/* Return the list of scopes with a given name. Returns NULL if no scope with
-** the given name was found, otherwise a non empty scope list.
-*/
-
-const cc65_scopeinfo* cc65_scope_byspan (cc65_dbginfo handle, unsigned span_id);
-/* Return scope information for a a span. The function returns NULL if the
-** span id is invalid, otherwise a list of line scopes.
-*/
-
-const cc65_scopeinfo* cc65_childscopes_byid (cc65_dbginfo handle, unsigned id);
-/* Return the direct child scopes of a scope with a given id. The function
-** returns NULL if no scope with this id was found, otherwise a list of the
-** direct childs.
-*/
-
-void cc65_free_scopeinfo (cc65_dbginfo Handle, const cc65_scopeinfo* Info);
-/* Free a scope info record */
-
-
-
-/*****************************************************************************/
-/*                                 Segments                                  */
-/*****************************************************************************/
-
-
-
-/* Segment information.
-** Notes:
-**   - output_name may be NULL if the data wasn't written to the output file
-**     (example: bss segment)
-**   - output_offs is invalid if there is no output_name, and may not be of
-**     much use in case of a relocatable output file
-*/
-typedef struct cc65_segmentdata cc65_segmentdata;
-struct cc65_segmentdata {
-    unsigned            segment_id;     /* The internal segment id */
-    const char*         segment_name;   /* Name of the segment */
-    cc65_addr           segment_start;  /* Start address of segment */
-    cc65_size           segment_size;   /* Size of segment */
-    const char*         output_name;    /* Output file this seg was written to */
-    unsigned long       output_offs;    /* Offset of this seg in output file */
-};
-
-typedef struct cc65_segmentinfo cc65_segmentinfo;
-struct cc65_segmentinfo {
-    unsigned            count;          /* Number of data sets that follow */
-    cc65_segmentdata    data[1];        /* Data sets, number is dynamic */
-};
-
-
-
-const cc65_segmentinfo* cc65_get_segmentlist (cc65_dbginfo handle);
-/* Return a list of all segments referenced in the debug information */
-
-const cc65_segmentinfo* cc65_segment_byid (cc65_dbginfo handle, unsigned id);
-/* Return information about a segment with a specific id. The function returns
-** NULL if the id is invalid (no such segment) and otherwise a cc65_segmentinfo
-** structure with one entry that contains the requested segment information.
-*/
-
-const cc65_segmentinfo* cc65_segment_byname (cc65_dbginfo handle,
-                                             const char* name);
-/* Return information about a segment with a specific name. The function
-** returns NULL if no segment with this name exists and otherwise a
-** cc65_segmentinfo structure with one entry that contains the requested
-** information.
-*/
-
-void cc65_free_segmentinfo (cc65_dbginfo handle, const cc65_segmentinfo* info);
-/* Free a segment info record */
-
-
-
-/*****************************************************************************/
-/*                                  Symbols                                  */
-/*****************************************************************************/
-
-
-
-/* Symbol information */
-typedef enum {
-    CC65_SYM_EQUATE,
-    CC65_SYM_LABEL,                     /* Some sort of address */
-    CC65_SYM_IMPORT,                    /* An import */
-} cc65_symbol_type;
-
-/* Notes:
-**  - If the symbol is segment relative, the segment id gives segment
-**    information, otherwise it contains CC65_INV_ID.
-**  - If the type is CC65_SYM_IMPORT, export_id may contain the id of the
-**    export. This is not the case if the module contaiing the export doesn't
-**    have debug information.
-**  - For an import, the fields symbol_value and segment_id are taken from
-**    the export, if it is available, since imports have no value or segments
-**    by itself.
-**  - For an import symbol_size doesn't have a meaning.
-**  - For normal symbols (not cheap locals) parent_id contains CC65_INV_ID,
-**    for cheap locals it contains the symbol id of the parent symbol.
-*/
-typedef struct cc65_symboldata cc65_symboldata;
-struct cc65_symboldata {
-    unsigned            symbol_id;      /* Id of symbol */
-    const char*         symbol_name;    /* Name of symbol */
-    cc65_symbol_type    symbol_type;    /* Type of symbol */
-    cc65_size           symbol_size;    /* Size of symbol, 0 if unknown */
-    long                symbol_value;   /* Value of symbol */
-    unsigned            export_id;      /* For imports: Matching export */
-    unsigned            segment_id;     /* Id of segment if any */
-    unsigned            scope_id;       /* The scope this symbol is in */
-    unsigned            parent_id;      /* Parent symbol for cheap locals */
-};
-
-typedef struct cc65_symbolinfo cc65_symbolinfo;
-struct cc65_symbolinfo {
-    unsigned            count;          /* Number of data sets that follow */
-    cc65_symboldata     data[1];        /* Data sets, number is dynamic */
-};
-
-
-
-const cc65_symbolinfo* cc65_symbol_byid (cc65_dbginfo handle, unsigned id);
-/* Return the symbol with a given id. The function returns NULL if no symbol
-** with this id was found.
-*/
-
-const cc65_symbolinfo* cc65_symbol_byname (cc65_dbginfo handle, const char* name);
-/* Return a list of symbols with a given name. The function returns NULL if
-** no symbol with this name was found.
-*/
-
-const cc65_symbolinfo* cc65_symbol_byscope (cc65_dbginfo handle,
-                                            unsigned scope_id);
-/* Return a list of symbols in the given scope. This includes cheap local
-** symbols, but not symbols in subscopes. The function returns NULL if the
-** scope id is invalid (no such scope) and otherwise a - possibly empty -
-** symbol list.
-*/
-
-const cc65_symbolinfo* cc65_symbol_inrange (cc65_dbginfo handle,
-                                            cc65_addr start, cc65_addr end);
-/* Return a list of labels in the given range. end is inclusive. The function
-** return NULL if no symbols within the given range are found. Non label
-** symbols are ignored and not returned.
-*/
-
-void cc65_free_symbolinfo (cc65_dbginfo handle, const cc65_symbolinfo* info);
-/* Free a symbol info record */
-
-
-
-/*****************************************************************************/
-/*                                   Types                                   */
-/*****************************************************************************/
-
-
-
-/* Type information */
-typedef enum {
-    CC65_TYPE_VOID,
-    CC65_TYPE_BYTE,
-    CC65_TYPE_WORD,
-    CC65_TYPE_DBYTE,
-    CC65_TYPE_DWORD,
-    CC65_TYPE_PTR,
-    CC65_TYPE_FARPTR,
-    CC65_TYPE_ARRAY,
-
-    /* The following ones are currently unavailable: */
-    CC65_TYPE_UNION,
-    CC65_TYPE_STRUCT,
-    CC65_TYPE_FUNC,
-} cc65_typetoken;
-
-
-/* A type is a linked list of typedata structures. In case of arrays, the
-** structure will contain an element count and the element type. In case of
-** pointers, the structure will contain the type of the data, the pointer
-** points to (currently, there are only VOID pointers).
-** The next pointer points to the next entry in the list. It is NULL if the
-** end of the list is reached.
-*/
-typedef struct cc65_typedata cc65_typedata;
-struct cc65_typedata {
-    cc65_typedata*                next;         /* Pointer to next entry */
-    cc65_typetoken                what;         /* What kind of type is it? */
-    cc65_size                     size;         /* The size of the data */
-
-    /* Depending on "what", one of the members of this union follows */
-    union {
-
-        /* In case of CC65_TYPE_PTR or CC65_TYPE_FARPTR */
-        struct {
-            const cc65_typedata*  ind_type;     /* Type the pointer points to */
-        } ptr;
-
-        /* In case of CC65_TYPE_ARRAY */
-        struct {
-            cc65_size             ele_count;    /* Element count */
-            const cc65_typedata*  ele_type;     /* Element type */
-        } array;
-
-    } data;
-};
-
-
-
-const cc65_typedata* cc65_type_byid (cc65_dbginfo handle, unsigned id);
-/* Return the data for the type with the given id. The function returns NULL
-** if no type with this id was found.
-*/
-
-void cc65_free_typedata (cc65_dbginfo Handle, const cc65_typedata* data);
-/* Free a symbol info record */
-
-
-
-/* Allow usage from C++ */
-#ifdef __cplusplus
-}
-#endif
-
-
-
-/* End of dbginfo.h */
-#endif
-
-
-
diff --git a/src/dbginfo/dbgsh.c b/src/dbginfo/dbgsh.c
deleted file mode 100644 (file)
index ba5d838..0000000
+++ /dev/null
@@ -1,1914 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  dbgsh.c                                  */
-/*                                                                           */
-/*                           debug info test shell                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2011,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <time.h>
-#include <errno.h>
-
-/* common */
-#include "attrib.h"
-#include "chartype.h"
-#include "cmdline.h"
-#include "coll.h"
-
-/* dbginfo */
-#include "dbginfo.h"
-
-
-
-/*****************************************************************************/
-/*                         Command handler forwards                          */
-/*****************************************************************************/
-
-
-
-static void CmdHelp (Collection* Args attribute ((unused)));
-/* Output a help text */
-
-static void CmdLoad (Collection* Args);
-/* Load a debug info file */
-
-static void CmdQuit (Collection* Args attribute ((unused)));
-/* Terminate the application */
-
-static void CmdShow (Collection* Args);
-/* Show items from the debug info file */
-
-static void CmdShowHelp (Collection* Args);
-/* Print help for the show command */
-
-static void CmdShowChildScopes (Collection* Args);
-/* Show child scopes from the debug info file */
-
-static void CmdShowCSymbol (Collection* Args);
-/* Show c symbols from the debug info file */
-
-static void CmdShowFunction (Collection* Args);
-/* Show C functions from the debug info file */
-
-static void CmdShowLibrary (Collection* Args);
-/* Show libraries from the debug info file */
-
-static void CmdShowLine (Collection* Args);
-/* Show lines from the debug info file */
-
-static void CmdShowModule (Collection* Args);
-/* Show modules from the debug info file */
-
-static void CmdShowScope (Collection* Args);
-/* Show scopes from the debug info file */
-
-static void CmdShowSegment (Collection* Args);
-/* Show segments from the debug info file */
-
-static void CmdShowSource (Collection* Args);
-/* Show source files from the debug info file */
-
-static void CmdShowSpan (Collection* Args);
-/* Show spans from the debug info file */
-
-static void CmdShowSymbol (Collection* Args);
-/* Show symbols */
-
-static void CmdShowSymDef (Collection* Args);
-/* Show lines from the debug info file */
-
-static void CmdShowSymRef (Collection* Args);
-/* Show lines from the debug info file */
-
-static void CmdShowType (Collection* Args);
-/* Show types from the debug info file */
-
-static void CmdUnload (Collection* Args attribute ((unused)));
-/* Unload a debug info file */
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Terminate flag - end program when set to true */
-static int Terminate = 0;
-
-/* The debug file data */
-static cc65_dbginfo     Info = 0;
-
-/* Error and warning counters */
-static unsigned FileErrors   = 0;
-static unsigned FileWarnings = 0;
-
-/* Type of an id */
-enum {
-    InvalidId,
-    CSymbolId,
-    LibraryId,
-    LineId,
-    ModuleId,
-    ScopeId,
-    SegmentId,
-    SourceId,
-    SpanId,
-    SymbolId,
-    TypeId
-};
-
-/* Structure that contains a command description */
-typedef struct CmdEntry CmdEntry;
-struct CmdEntry {
-    char        Cmd[12];
-    const char* Help;
-    int         ArgCount;
-    void        (*Func) (Collection*);
-};
-
-/* Table with main commands */
-static const CmdEntry MainCmds[] = {
-    {
-        "exit",
-        0,
-        1,
-        CmdQuit
-    }, {
-        "help",
-        "Show available commands",
-        1,
-        CmdHelp
-    }, {
-        "load",
-        "Load a debug info file",
-        2,
-        CmdLoad
-    }, {
-        "quit",
-        "Terminate the shell",
-        1,
-        CmdQuit
-    }, {
-        "show",
-        "Show items from the info file",
-        -2,
-        CmdShow
-    }, {
-        "unload",
-        "Unload a debug info file",
-        1,
-        CmdUnload
-    },
-};
-
-/* Table with show commands */
-static const CmdEntry ShowCmds[] = {
-    {
-        "childscopes",
-        "Show child scopes of other scopes.",
-        -2,
-        CmdShowChildScopes
-    }, {
-        "csym",
-        0,
-        -1,
-        CmdShowCSymbol
-    }, {
-        "csymbol",
-        "Show c symbols.",
-        -1,
-        CmdShowCSymbol
-    }, {
-        "func",
-        0,
-        -2,
-        CmdShowFunction
-    }, {
-        "function",
-        "Show c functions.",
-        -2,
-        CmdShowFunction
-    }, {
-        "help",
-        "Show available subcommands.",
-        1,
-        CmdShowHelp
-    }, {
-        "line",
-        "Show line info. May be followed by one or more line ids.",
-        -2,
-        CmdShowLine
-    }, {
-        "library",
-        "Show libraries. May be followed by one or more library ids.",
-        -1,
-        CmdShowLibrary
-    }, {
-        "module",
-        "Show modules. May be followed by one or more module ids.",
-        -1,
-        CmdShowModule
-    }, {
-        "scope",
-        "Show scopes. May be followed by one or more segment ids.",
-        -1,
-        CmdShowScope
-    }, {
-        "segment",
-        "Show segments. May be followed by one or more segment ids.",
-        -1,
-        CmdShowSegment
-    }, {
-        "source",
-        "Show sources. May be followed by one or more source file ids.",
-        -1,
-        CmdShowSource
-    }, {
-        "span",
-        "Show spans. May be followed by one or more span ids.",
-        -1,
-        CmdShowSpan
-    }, {
-        "symbol",
-        "Show symbols. May be followed by one or more symbol or scope ids.",
-        -2,
-        CmdShowSymbol
-    }, {
-        "symdef",
-        "Show where a symbol was defined. May be followed by one or more symbol ids.",
-        -2,
-        CmdShowSymDef
-    }, {
-        "symref",
-        "Show where a symbol was referenced. May be followed by one or more symbol ids.",
-        -2,
-        CmdShowSymRef
-    }, {
-        "type",
-        "Show type information. May be followed by one or more type ids.",
-        -2,
-        CmdShowType
-    },
-};
-
-
-
-/*****************************************************************************/
-/*                                  Helpers                                  */
-/*****************************************************************************/
-
-
-
-static void NewLine (void)
-/* Output a newline */
-{
-    putchar ('\n');
-}
-
-
-
-static void Print (const char* Format, ...) attribute((format(printf,1,2)));
-static void Print (const char* Format, ...)
-/* Print a piece of output (no linefeed added) */
-{
-    va_list ap;
-    va_start (ap, Format);
-    vprintf (Format, ap);
-    va_end (ap);
-}
-
-
-
-static void PrintLine (const char* Format, ...) attribute((format(printf,1,2)));
-static void PrintLine (const char* Format, ...)
-/* Print one line of output. The linefeed is supplied by the function */
-{
-    va_list ap;
-    va_start (ap, Format);
-    vprintf (Format, ap);
-    NewLine ();
-    va_end (ap);
-}
-
-
-
-static void PrintSeparator (void)
-/* Print a separator line */
-{
-    PrintLine ("---------------------------------------------------------------------------");
-}
-
-
-
-static void FileError (const cc65_parseerror* Info)
-/* Callback function - is called in case of errors */
-{
-    /* Output a message */
-    PrintLine ("%s:%s(%lu): %s",
-               Info->type? "Error" : "Warning",
-               Info->name,
-               (unsigned long) Info->line,
-               Info->errormsg);
-
-    /* Bump the counters */
-    switch (Info->type) {
-        case CC65_WARNING:      ++FileWarnings;         break;
-        default:                ++FileErrors;           break;
-    }
-}
-
-
-
-static const CmdEntry* FindCmd (const char* Cmd, const CmdEntry* Tab, unsigned Count)
-/* Search for a command in the given table */
-{
-    unsigned I;
-    for (I = 0; I < Count; ++I, ++Tab) {
-        if (strcmp (Cmd, Tab->Cmd) == 0) {
-            return Tab;
-        }
-    }
-    return 0;
-}
-
-
-
-static void ExecCmd (Collection* Args, const CmdEntry* Tab, unsigned Count)
-/* Search for the command in slot 0 of the given collection. If found, check
-** the argument count, then execute it. If there are problems, output a
-** diagnostic.
-*/
-{
-    /* Search for the command, check number of args, then execute it */
-    const char* Cmd = CollAt (Args, 0);
-    const CmdEntry* E = FindCmd (Cmd, Tab, Count);
-    if (E == 0) {
-        PrintLine ("No such command: %s", Cmd);
-        return;
-    }
-
-    /* Check the number of arguments. Zero means that the function will check
-    ** itself. A negative count means that the function needs at least
-    ** abs(count) arguments. A positive count means that the function needs
-    ** exactly this number of arguments.
-    ** Note: The number includes the command itself.
-    */
-    if (E->ArgCount > 0 && (int)CollCount (Args) != E->ArgCount) {
-        /* Argument number mismatch */
-        switch (E->ArgCount) {
-
-            case 1:
-                PrintLine ("Command doesn't accept an argument");
-                return;
-
-            case 2:
-                PrintLine ("Command requires an argument");
-                return;
-
-            default:
-                PrintLine ("Command requires %d arguments", E->ArgCount-1);
-                return;
-        }
-    } else if (E->ArgCount < 0 && (int)CollCount (Args) < -E->ArgCount) {
-        /* Argument number mismatch */
-        switch (E->ArgCount) {
-
-            case -2:
-                PrintLine ("Command requires at least one argument");
-                return;
-
-            default:
-                PrintLine ("Command requires at least %d arguments", E->ArgCount-1);
-                return;
-        }
-    } else {
-        /* Remove the command from the argument list, then execute it */
-        CollDelete (Args, 0);
-        E->Func (Args);
-    }
-}
-
-
-
-static void PrintHelp (const CmdEntry* Tab, unsigned Count)
-/* Output help for one command table */
-{
-    while (Count--) {
-        /* Ignore the commands without help text */
-        if (Tab->Help) {
-            PrintLine ("%-*s%s", (int) sizeof (Tab->Cmd) + 2, Tab->Cmd, Tab->Help);
-        }
-        ++Tab;
-    }
-}
-
-
-
-static unsigned FindIdType (const char* TypeName)
-/* Find an id type by its name. Returns the type or InvalidId. */
-{
-    static const struct {
-        char            Name[8];
-        unsigned        Type;
-    } TypeTab[] = {
-        {   "l",        LineId          },
-        {   "lib",      LibraryId       },
-        {   "library",  LibraryId       },
-        {   "line",     LineId          },
-        {   "m",        ModuleId        },
-        {   "mod",      ModuleId        },
-        {   "module",   ModuleId        },
-        {   "s",        SymbolId        },
-        {   "sc",       ScopeId         },
-        {   "scope",    ScopeId         },
-        {   "seg",      SegmentId       },
-        {   "segment",  SegmentId       },
-        {   "source",   SourceId        },
-        {   "src",      SourceId        },
-        {   "sp",       SpanId          },
-        {   "span",     SpanId          },
-        {   "sym",      SymbolId        },
-        {   "symbol",   SymbolId        },
-        {   "t",        TypeId          },
-        {   "type",     TypeId          },
-    };
-
-    unsigned I;
-    for (I = 0; I < sizeof(TypeTab) / sizeof(TypeTab[0]); ++I) {
-        if (strcmp (TypeName, TypeTab[I].Name) == 0) {
-            return TypeTab[I].Type;
-        }
-    }
-    return InvalidId;
-}
-
-
-
-static int GetId (const char* S, unsigned* Id, unsigned* IdType)
-/* Parse a string for an id. If a valid id is found, it is placed in Id and
-** the function returns true. If an optional type is found, it is placed in
-** IdType, otherwise IdType is left unchanged. If no id is found, the
-** function returns false.
-*/
-{
-    char TypeBuf[20];
-    char C;
-    if (sscanf (S, "%u%c", Id, &C) == 1) {
-        /* Just an id found, return it */
-        return 1;
-    }
-    if (sscanf (S, "%19[a-z]:%u%c", TypeBuf, Id, &C) == 2) {
-        *IdType = FindIdType (TypeBuf);
-        return (*IdType != InvalidId);
-    }
-
-    /* Not a valid id */
-    return 0;
-}
-
-
-
-/*****************************************************************************/
-/*                      Output functions for item lists                      */
-/*****************************************************************************/
-
-
-
-static void PrintAddr (cc65_addr Addr, unsigned FieldWidth)
-/* Output an address */
-{
-    Print ("$%06lX", (unsigned long) Addr);
-    if (FieldWidth > 7) {
-        Print ("%*s", FieldWidth - 7, "");
-    }
-}
-
-
-
-static void PrintNumber (long Num, unsigned Width, unsigned FieldWidth)
-/* Output a number */
-{
-    Print ("%*ld", Width, Num);
-    if (FieldWidth > Width) {
-        Print ("%*s", FieldWidth - Width, "");
-    }
-}
-
-
-
-static void PrintId (unsigned Id, unsigned FieldWidth)
-/* Output an id field */
-{
-    if (Id == CC65_INV_ID) {
-        Print ("   -");
-    } else {
-        Print ("%4u", Id);
-    }
-    if (FieldWidth > 4) {
-        Print ("%*s", FieldWidth - 4, "");
-    }
-}
-
-
-
-static void PrintSize (cc65_size Size, unsigned FieldWidth)
-/* Output a size */
-{
-    Print ("$%04lX", (unsigned long) Size);
-    if (FieldWidth > 5) {
-        Print ("%*s", FieldWidth - 5, "");
-    }
-}
-
-
-
-static void PrintTime (time_t T, unsigned FieldWidth)
-/* Output a time stamp of some sort */
-{
-    /* Convert to string */
-    char Buf[100];
-    unsigned Len = strftime (Buf, sizeof (Buf), "%Y-%m-%d %H:%M:%S", localtime (&T));
-
-    /* Output */
-    Print ("%s", Buf);
-    if (FieldWidth > Len) {
-        Print ("%*s", FieldWidth - Len, "");
-    }
-}
-
-
-
-static void PrintCSymbolHeader (void)
-/* Output a header for a list of C symbols */
-{
-    /* Header */
-    PrintLine ("  id  name                        type  kind   sc   offs  symbol scope");
-    PrintSeparator ();
-}
-
-
-
-static void PrintCSymbols (const cc65_csyminfo* S)
-/* Output a list of C symbols */
-{
-    unsigned I;
-    const cc65_csymdata* D;
-
-    /* Segments */
-    for (I = 0, D = S->data; I < S->count; ++I, ++D) {
-        PrintId (D->csym_id, 6);
-        Print ("%-28s", D->csym_name);
-        PrintId (D->type_id, 6);
-        PrintNumber (D->csym_kind, 4, 6);
-        PrintNumber (D->csym_sc, 4, 6);
-        PrintNumber (D->csym_offs, 4, 8);
-        PrintId (D->symbol_id, 6);
-        PrintId (D->scope_id, 0);
-        NewLine ();
-    }
-}
-
-
-
-static void PrintLibraryHeader (void)
-/* Output the header for a library list */
-{
-    PrintLine ("  id    name");
-    PrintSeparator ();
-}
-
-
-
-static void PrintLibraries (const cc65_libraryinfo* L)
-/* Output a list of libraries */
-{
-    unsigned I;
-    const cc65_librarydata* D;
-
-    /* Libraries */
-    for (I = 0, D = L->data; I < L->count; ++I, ++D) {
-        PrintId (D->library_id, 8);
-        Print ("%-24s", D->library_name);
-        NewLine ();
-    }
-}
-
-
-
-static void PrintLineHeader (void)
-/* Output a header for a line list */
-{
-    /* Header */
-    PrintLine ("  id    source  line    type  count");
-    PrintSeparator ();
-}
-
-
-
-static void PrintLines (const cc65_lineinfo* L)
-/* Output a list of lines */
-{
-    unsigned I;
-    const cc65_linedata* D;
-
-    /* Lines */
-    for (I = 0, D = L->data; I < L->count; ++I, ++D) {
-        PrintId (D->line_id, 8);
-        PrintId (D->source_id, 8);
-        PrintNumber (D->source_line, 6, 9);
-        PrintNumber (D->line_type, 4, 6);
-        PrintNumber (D->count, 3, 0);
-        NewLine ();
-    }
-}
-
-
-
-static void PrintModuleHeader (void)
-/* Output a header for a module list */
-{
-    /* Header */
-    PrintLine ("  id    name                    source  library  scope");
-    PrintSeparator ();
-}
-
-
-
-static void PrintModules (const cc65_moduleinfo* M)
-/* Output a list of modules */
-{
-    unsigned I;
-    const cc65_moduledata* D;
-
-    /* Modules */
-    for (I = 0, D = M->data; I < M->count; ++I, ++D) {
-        PrintId (D->module_id, 8);
-        Print ("%-24s", D->module_name);
-        PrintId (D->source_id, 8);
-        PrintId (D->library_id, 9);
-        PrintId (D->scope_id, 6);
-        NewLine ();
-    }
-}
-
-
-
-static void PrintScopeHeader (void)
-/* Output a header for a list of scopes */
-{
-    /* Header */
-    PrintLine ("  id    name                    type    size   parent  symbol  module");
-    PrintSeparator ();
-}
-
-
-
-static void PrintScopes (const cc65_scopeinfo* S)
-/* Output a list of scopes */
-{
-    unsigned I;
-    const cc65_scopedata* D;
-
-    /* Segments */
-    for (I = 0, D = S->data; I < S->count; ++I, ++D) {
-        PrintId (D->scope_id, 8);
-        Print ("%-24s", D->scope_name);
-        PrintNumber (D->scope_type, 4, 8);     /* ## */
-        PrintSize (D->scope_size, 8);
-        PrintId (D->parent_id, 8);
-        PrintId (D->symbol_id, 8);
-        PrintId (D->module_id, 0);
-        NewLine ();
-    }
-}
-
-
-
-static void PrintSegmentHeader (void)
-/* Output a header for a list of segments */
-{
-    /* Header */
-    PrintLine ("  id    name            address  size   output file     offs");
-    PrintSeparator ();
-}
-
-
-
-static void PrintSegments (const cc65_segmentinfo* S)
-/* Output a list of segments */
-{
-    unsigned I;
-    const cc65_segmentdata* D;
-
-    /* Segments */
-    for (I = 0, D = S->data; I < S->count; ++I, ++D) {
-        PrintId (D->segment_id, 8);
-        Print ("%-16s", D->segment_name);
-        PrintAddr (D->segment_start, 9);
-        PrintSize (D->segment_size, 7);
-        Print ("%-16s", D->output_name? D->output_name : "");
-        PrintSize (D->output_offs, 6);
-        NewLine ();
-    }
-}
-
-
-
-static void PrintSourceHeader (void)
-/* Output a header for a list of source files */
-{
-    /* Header */
-    PrintLine ("  id    name                            size   modification time");
-    PrintSeparator ();
-}
-
-
-
-static void PrintSources (const cc65_sourceinfo* S)
-/* Output a list of sources */
-{
-    unsigned I;
-    const cc65_sourcedata* D;
-
-    /* Segments */
-    for (I = 0, D = S->data; I < S->count; ++I, ++D) {
-        PrintId (D->source_id, 8);
-        Print ("%-30s", D->source_name);
-        PrintNumber (D->source_size, 7, 9);
-        PrintTime (D->source_mtime, 0);
-        NewLine ();
-    }
-}
-
-
-
-static void PrintSpanHeader (void)
-/* Output a header for a list of spans */
-{
-    /* Header */
-    PrintLine ("  id    start    end     seg   type   lines  scopes");
-    PrintSeparator ();
-}
-
-
-
-static void PrintSpans (const cc65_spaninfo* S)
-/* Output a list of spans */
-{
-    unsigned I;
-    const cc65_spandata* D;
-
-    /* Segments */
-    for (I = 0, D = S->data; I < S->count; ++I, ++D) {
-        PrintId (D->span_id, 7);
-        PrintAddr (D->span_start, 8);
-        PrintAddr (D->span_end, 9);
-        PrintId (D->segment_id, 7);
-        PrintId (D->type_id, 6);
-        PrintNumber (D->line_count, 6, 7);
-        PrintNumber (D->scope_count, 7, 0);
-        NewLine ();
-    }
-}
-
-
-
-static void PrintSymbolHeader (void)
-/* Output a header for a list of symbols */
-{
-    /* Header */
-    PrintLine ("  id  name                    type  size  value  export  seg  scope parent");
-    PrintSeparator ();
-}
-
-
-
-static void PrintSymbols (const cc65_symbolinfo* S)
-/* Output a list of symbols */
-{
-    unsigned I;
-    const cc65_symboldata* D;
-
-    /* Segments */
-    for (I = 0, D = S->data; I < S->count; ++I, ++D) {
-        PrintId (D->symbol_id, 6);
-        Print ("%-24s", D->symbol_name);
-        PrintNumber (D->symbol_type, 4, 6);
-        PrintNumber (D->symbol_size, 4, 6);
-        PrintNumber (D->symbol_value, 5, 7);
-        PrintId (D->export_id, 7);
-        PrintId (D->segment_id, 6);
-        PrintId (D->scope_id, 6);
-        PrintId (D->parent_id, 0);
-        NewLine ();
-    }
-}
-
-
-
-static void PrintTypeHeader (void)
-/* Output a header for a list of types */
-{
-    /* Header */
-    PrintLine ("  id  description");
-    PrintSeparator ();
-}
-
-
-
-static void PrintType (unsigned Id, const cc65_typedata* T)
-/* Output one type */
-{
-    /* Output the id */
-    PrintId (Id, 6);
-
-    while (1) {
-        switch (T->what) {
-
-            case CC65_TYPE_VOID:
-                Print ("VOID");
-                goto ExitPoint;
-
-            case CC65_TYPE_BYTE:
-                Print ("BYTE");
-                goto ExitPoint;
-
-            case CC65_TYPE_WORD:
-                Print ("WORD");
-                goto ExitPoint;
-
-            case CC65_TYPE_DBYTE:
-                Print ("DBYTE");
-                goto ExitPoint;
-
-            case CC65_TYPE_DWORD:
-                Print ("DWORD");
-                goto ExitPoint;
-
-            case CC65_TYPE_FARPTR:
-                Print ("FAR ");
-                /* FALLTHROUGH */
-
-            case CC65_TYPE_PTR:
-                Print ("POINTER TO ");
-                T = T->data.ptr.ind_type;
-                break;
-
-            case CC65_TYPE_ARRAY:
-                Print ("ARRAY[%u] OF ", T->data.array.ele_count);
-                T = T->data.array.ele_type;
-                break;
-
-            default:
-                /* Anything else is currently not implemented */
-                Print ("***NOT IMPLEMENTED***");
-                goto ExitPoint;
-        }
-    }
-
-ExitPoint:
-    NewLine ();
-}
-
-
-
-/*****************************************************************************/
-/*                            Debug file handling                            */
-/*****************************************************************************/
-
-
-
-static void UnloadFile (void)
-/* Unload the debug info file */
-{
-    if (Info) {
-        cc65_free_dbginfo (Info);
-        Info = 0;
-    }
-}
-
-
-
-static int FileIsLoaded (void)
-/* Return true if the file is open and has loaded without errors: If not,
-** print an error message and return false.
-*/
-{
-    /* File open? */
-    if (Info == 0) {
-        PrintLine ("No debug info file");
-        return 0;
-    }
-
-    /* Errors on load? */
-    if (FileErrors > 0) {
-        PrintLine ("File had load errors!");
-        return 0;
-    }
-
-    /* Warnings on load? */
-    if (FileWarnings > 0) {
-        PrintLine ("Beware - file had load warnings!");
-    }
-
-    /* Ok */
-    return 1;
-}
-
-
-
-/*****************************************************************************/
-/*                             Command handlers                              */
-/*****************************************************************************/
-
-
-
-static void CmdHelp (Collection* Args attribute ((unused)))
-/* Output a help text */
-{
-    PrintHelp (MainCmds, sizeof (MainCmds) / sizeof (MainCmds[0]));
-}
-
-
-
-static void CmdLoad (Collection* Args)
-/* Load a debug info file */
-{
-    /* Unload a loaded file */
-    UnloadFile ();
-
-    /* Clear the counters */
-    FileErrors   = 0;
-    FileWarnings = 0;
-
-    /* Open the debug info file */
-    Info = cc65_read_dbginfo (CollAt (Args, 0), FileError);
-
-    /* Print a status */
-    if (FileErrors > 0) {
-        PrintLine ("File loaded with %u errors", FileErrors);
-    } else if (FileWarnings > 0) {
-        PrintLine ("File loaded with %u warnings", FileWarnings);
-    } else {
-        PrintLine ("File loaded successfully");
-    }
-}
-
-
-
-static void CmdQuit (Collection* Args attribute ((unused)))
-/* Terminate the application */
-{
-    UnloadFile ();
-    Terminate = 1;
-}
-
-
-
-static void CmdShow (Collection* Args)
-/* Show items from the debug info file */
-{
-    /* Search for the subcommand, check number of args, then execute it */
-    ExecCmd (Args, ShowCmds, sizeof (ShowCmds) / sizeof (ShowCmds[0]));
-}
-
-
-
-static void CmdShowHelp (Collection* Args attribute ((unused)))
-/* Print help for the show command */
-{
-    PrintHelp (ShowCmds, sizeof (ShowCmds) / sizeof (ShowCmds[0]));
-}
-
-
-
-static void CmdShowChildScopes (Collection* Args)
-/* Show child scopes from the debug info file */
-{
-    const cc65_scopeinfo* S;
-    unsigned I;
-
-    /* Be sure a file is loaded */
-    if (!FileIsLoaded ()) {
-        return;
-    }
-
-    /* Output the header */
-    PrintScopeHeader ();
-
-    /* Output child scopes for all arguments */
-    for (I = 0; I < CollCount (Args); ++I) {
-
-        /* Parse the argument */
-        unsigned Id;
-        unsigned IdType = ScopeId;
-        if (GetId (CollConstAt (Args, I), &Id, &IdType)) {
-            /* Fetch list depending on type */
-            switch (IdType) {
-                case ScopeId:
-                    S = cc65_childscopes_byid (Info, Id);
-                    break;
-                default:
-                    S = 0;
-                    PrintLine ("Invalid id type");
-                    break;
-            }
-        } else {
-            /* Invalid id */
-            S = 0;
-        }
-
-        /* Output the list */
-        if (S) {
-            PrintScopes (S);
-            cc65_free_scopeinfo (Info, S);
-        }
-    }
-}
-
-
-
-static void CmdShowCSymbol (Collection* Args)
-/* Show C symbols from the debug info file */
-{
-    const cc65_csyminfo* S;
-
-    /* Be sure a file is loaded */
-    if (!FileIsLoaded ()) {
-        return;
-    }
-
-    /* Output the header */
-    PrintCSymbolHeader ();
-
-    /* No arguments means show all libraries */
-    if (CollCount (Args) == 0) {
-
-        /* Fetch the list of c symbols */
-        S = cc65_get_csymlist (Info);
-
-        /* Output the c symbols */
-        PrintCSymbols (S);
-
-        /* Free the list */
-        cc65_free_csyminfo (Info, S);
-
-    } else {
-
-        /* Output c symbols for all arguments */
-        unsigned I;
-        for (I = 0; I < CollCount (Args); ++I) {
-
-            /* Parse the argument */
-            unsigned Id;
-            unsigned IdType = CSymbolId;
-            if (GetId (CollConstAt (Args, I), &Id, &IdType)) {
-                /* Fetch list depending on type */
-                switch (IdType) {
-                    case CSymbolId:
-                        S = cc65_csym_byid (Info, Id);
-                        break;
-                    case ScopeId:
-                        S = cc65_csym_byscope (Info, Id);
-                        break;
-                    default:
-                        S = 0;
-                        PrintLine ("Invalid id type");
-                        break;
-                }
-            } else {
-                /* Invalid id */
-                S = 0;
-            }
-
-            /* Output the list */
-            if (S) {
-                PrintCSymbols (S);
-                cc65_free_csyminfo (Info, S);
-            }
-        }
-    }
-}
-
-
-
-static void CmdShowFunction (Collection* Args)
-/* Show C functions from the debug info file */
-{
-    const cc65_csyminfo* S;
-    unsigned I;
-
-    /* Be sure a file is loaded */
-    if (!FileIsLoaded ()) {
-        return;
-    }
-
-    /* Output the header */
-    PrintCSymbolHeader ();
-
-    /* Output c symbols for all arguments */
-    for (I = 0; I < CollCount (Args); ++I) {
-
-        /* Parse the argument */
-        unsigned Id;
-        unsigned IdType = ModuleId;
-        if (GetId (CollConstAt (Args, I), &Id, &IdType)) {
-            /* Fetch list depending on type */
-            switch (IdType) {
-                case ModuleId:
-                    S = cc65_cfunc_bymodule (Info, Id);
-                    break;
-                default:
-                    S = 0;
-                    PrintLine ("Invalid id type");
-                    break;
-            }
-        } else {
-            /* An invalid id may be a function name */
-            S = cc65_cfunc_byname (Info, CollConstAt (Args, I));
-        }
-
-        /* Output the list */
-        if (S) {
-            PrintCSymbols (S);
-            cc65_free_csyminfo (Info, S);
-        }
-    }
-}
-
-
-
-static void CmdShowLine (Collection* Args)
-/* Show lines from the debug info file */
-{
-    const cc65_lineinfo* L;
-    unsigned I;
-
-    /* Be sure a file is loaded */
-    if (!FileIsLoaded ()) {
-        return;
-    }
-
-    /* Output the header */
-    PrintLineHeader ();
-
-    for (I = 0; I < CollCount (Args); ++I) {
-
-        /* Parse the argument */
-        unsigned Id;
-        unsigned IdType = LineId;
-        if (GetId (CollConstAt (Args, I), &Id, &IdType)) {
-            /* Fetch list depending on type */
-            switch (IdType) {
-
-                case LineId:
-                    L = cc65_line_byid (Info, Id);
-                    break;
-
-                case SourceId:
-                    L = cc65_line_bysource (Info, Id);
-                    break;
-
-                case SymbolId:
-                    /* ### not very clean */
-                    L = cc65_line_bysymdef (Info, Id);
-                    if (L) {
-                        PrintLines (L);
-                        cc65_free_lineinfo (Info, L);
-                    }
-                    L = cc65_line_bysymref (Info, Id);
-                    break;
-
-                default:
-                    L = 0;
-                    PrintLine ("Invalid id type");
-                    break;
-            }
-        } else {
-            /* Ignore the invalid id */
-            L = 0;
-        }
-
-        /* Output the list */
-        if (L) {
-            PrintLines (L);
-            cc65_free_lineinfo (Info, L);
-        }
-
-    }
-}
-
-
-
-static void CmdShowLibrary (Collection* Args)
-/* Show libraries from the debug info file */
-{
-    const cc65_libraryinfo* L;
-
-    /* Be sure a file is loaded */
-    if (!FileIsLoaded ()) {
-        return;
-    }
-
-    /* Output the header */
-    PrintLibraryHeader ();
-
-    /* No arguments means show all libraries */
-    if (CollCount (Args) == 0) {
-
-        /* Fetch the list of libraries */
-        L = cc65_get_librarylist (Info);
-
-        /* Output the libraries */
-        PrintLibraries (L);
-
-        /* Free the list */
-        cc65_free_libraryinfo (Info, L);
-
-    } else {
-
-        unsigned I;
-        for (I = 0; I < CollCount (Args); ++I) {
-
-            /* Parse the argument */
-            unsigned Id;
-            unsigned IdType = LibraryId;
-            if (GetId (CollConstAt (Args, I), &Id, &IdType)) {
-                /* Fetch list depending on type */
-                switch (IdType) {
-                    case LibraryId:
-                        L = cc65_library_byid (Info, Id);
-                        break;
-                    default:
-                        L = 0;
-                        PrintLine ("Invalid id type");
-                        break;
-                }
-            } else {
-                /* Ignore the invalid id */
-                L = 0;
-            }
-
-            /* Output the list */
-            if (L) {
-                PrintLibraries (L);
-                cc65_free_libraryinfo (Info, L);
-            }
-        }
-    }
-}
-
-
-
-static void CmdShowModule (Collection* Args)
-/* Show modules from the debug info file */
-{
-    const cc65_moduleinfo* M;
-
-    /* Be sure a file is loaded */
-    if (!FileIsLoaded ()) {
-        return;
-    }
-
-    /* Output the header */
-    PrintModuleHeader ();
-
-    /* No arguments means show all modules */
-    if (CollCount (Args) == 0) {
-
-        /* Fetch the list of modules */
-        M = cc65_get_modulelist (Info);
-
-        /* Output the modules */
-        PrintModules (M);
-
-        /* Free the list */
-        cc65_free_moduleinfo (Info, M);
-
-    } else {
-
-        unsigned I;
-        for (I = 0; I < CollCount (Args); ++I) {
-
-            /* Parse the argument */
-            unsigned Id;
-            unsigned IdType = ModuleId;
-            if (GetId (CollConstAt (Args, I), &Id, &IdType)) {
-                /* Fetch list depending on type */
-                switch (IdType) {
-                    case ModuleId:
-                        M = cc65_module_byid (Info, Id);
-                        break;
-                    default:
-                        M = 0;
-                        PrintLine ("Invalid id type");
-                        break;
-                }
-            } else {
-                /* Ignore the invalid id */
-                M = 0;
-            }
-
-            /* Output the list */
-            if (M) {
-                PrintModules (M);
-                cc65_free_moduleinfo (Info, M);
-            }
-
-        }
-    }
-}
-
-
-
-static void CmdShowScope (Collection* Args)
-/* Show scopes from the debug info file */
-{
-    const cc65_scopeinfo* S;
-
-    /* Be sure a file is loaded */
-    if (!FileIsLoaded ()) {
-        return;
-    }
-
-    /* Output the header */
-    PrintScopeHeader ();
-
-    /* No arguments means show all modules */
-    if (CollCount (Args) == 0) {
-
-        /* Fetch the list of segments */
-        S = cc65_get_scopelist (Info);
-
-        /* Output the segments */
-        PrintScopes (S);
-
-        /* Free the list */
-        cc65_free_scopeinfo (Info, S);
-
-    } else {
-
-        unsigned I;
-        for (I = 0; I < CollCount (Args); ++I) {
-
-            /* Parse the argument */
-            unsigned Id;
-            unsigned IdType = ScopeId;
-            if (GetId (CollConstAt (Args, I), &Id, &IdType)) {
-                /* Fetch list depending on type */
-                switch (IdType) {
-                    case ModuleId:
-                        S = cc65_scope_bymodule (Info, Id);
-                        break;
-                    case ScopeId:
-                        S = cc65_scope_byid (Info, Id);
-                        break;
-                    default:
-                        S = 0;
-                        PrintLine ("Invalid id type");
-                        break;
-                }
-            } else {
-                /* An invalid id may be a scope name */
-                S = cc65_scope_byname (Info, CollConstAt (Args, I));
-            }
-
-            /* Output the list */
-            if (S) {
-                PrintScopes (S);
-                cc65_free_scopeinfo (Info, S);
-            }
-        }
-    }
-}
-
-
-
-static void CmdShowSegment (Collection* Args)
-/* Show segments from the debug info file */
-{
-    const cc65_segmentinfo* S;
-
-    /* Be sure a file is loaded */
-    if (!FileIsLoaded ()) {
-        return;
-    }
-
-    /* Output the header */
-    PrintSegmentHeader ();
-
-    /* No arguments means show all modules */
-    if (CollCount (Args) == 0) {
-
-        /* Fetch the list of segments */
-        S = cc65_get_segmentlist (Info);
-
-        /* Output the segments */
-        PrintSegments (S);
-
-        /* Free the list */
-        cc65_free_segmentinfo (Info, S);
-
-    } else {
-
-        unsigned I;
-        for (I = 0; I < CollCount (Args); ++I) {
-
-            /* Parse the argument */
-            unsigned Id;
-            unsigned IdType = SegmentId;
-            if (GetId (CollConstAt (Args, I), &Id, &IdType)) {
-                /* Fetch list depending on type */
-                switch (IdType) {
-                    case SegmentId:
-                        S = cc65_segment_byid (Info, Id);
-                        break;
-                    default:
-                        S = 0;
-                        PrintLine ("Invalid id type");
-                        break;
-                }
-            } else {
-                /* An invalid id may be a segment name */
-                S = cc65_segment_byname (Info, CollConstAt (Args, I));
-            }
-
-            /* Output the list */
-            if (S) {
-                PrintSegments (S);
-                cc65_free_segmentinfo (Info, S);
-            }
-        }
-    }
-}
-
-
-
-static void CmdShowSource (Collection* Args)
-/* Show source files from the debug info file */
-{
-    const cc65_sourceinfo* S;
-
-    /* Be sure a file is loaded */
-    if (!FileIsLoaded ()) {
-        return;
-    }
-
-    /* Output the header */
-    PrintSourceHeader ();
-
-    /* No arguments means show all modules */
-    if (CollCount (Args) == 0) {
-
-        /* Fetch the list of source files */
-        S = cc65_get_sourcelist (Info);
-
-        /* Output the source files */
-        PrintSources (S);
-
-        /* Free the list */
-        cc65_free_sourceinfo (Info, S);
-
-    } else {
-
-        unsigned I;
-        for (I = 0; I < CollCount (Args); ++I) {
-
-            /* Parse the argument */
-            unsigned Id;
-            unsigned IdType = SourceId;
-            if (GetId (CollConstAt (Args, I), &Id, &IdType)) {
-                /* Fetch list depending on type */
-                switch (IdType) {
-                    case ModuleId:
-                        S = cc65_source_bymodule (Info, Id);
-                        break;
-                    case SourceId:
-                        S = cc65_source_byid (Info, Id);
-                        break;
-                    default:
-                        S = 0;
-                        PrintLine ("Invalid id type");
-                        break;
-                }
-            } else {
-                /* Ignore the invalid id */
-                S = 0;
-            }
-
-            /* Output the list */
-            if (S) {
-                PrintSources (S);
-                cc65_free_sourceinfo (Info, S);
-            }
-        }
-    }
-}
-
-
-
-static void CmdShowSpan (Collection* Args)
-/* Show spans from the debug info file */
-{
-    const cc65_spaninfo* S;
-    unsigned I;
-
-    /* Be sure a file is loaded */
-    if (!FileIsLoaded ()) {
-        return;
-    }
-
-    /* Output the header */
-    PrintSpanHeader ();
-
-    for (I = 0; I < CollCount (Args); ++I) {
-
-        /* Parse the argument */
-        unsigned Id;
-        unsigned IdType = SpanId;
-        if (GetId (CollConstAt (Args, I), &Id, &IdType)) {
-            /* Fetch list depending on type */
-            switch (IdType) {
-                case LineId:
-                    S = cc65_span_byline (Info, Id);
-                    break;
-
-                case ScopeId:
-                    S = cc65_span_byscope (Info, Id);
-                    break;
-                case SpanId:
-                    S = cc65_span_byid (Info, Id);
-                    break;
-                default:
-                    S = 0;
-                    PrintLine ("Invalid id type");
-                    break;
-            }
-        } else {
-            /* Ignore the invalid id */
-            S = 0;
-        }
-
-        /* Output the list */
-        if (S) {
-            PrintSpans (S);
-            cc65_free_spaninfo (Info, S);
-        }
-    }
-}
-
-
-
-static void CmdShowSymbol (Collection* Args)
-/* Show symbols from the debug info file */
-{
-    const cc65_symbolinfo* S;
-    unsigned I;
-
-    /* Be sure a file is loaded */
-    if (!FileIsLoaded ()) {
-        return;
-    }
-
-    /* Output the header */
-    PrintSymbolHeader ();
-
-    for (I = 0; I < CollCount (Args); ++I) {
-
-        /* Parse the argument */
-        unsigned Id;
-        unsigned IdType = SymbolId;
-        if (GetId (CollConstAt (Args, I), &Id, &IdType)) {
-            /* Fetch list depending on type */
-            switch (IdType) {
-
-                case ScopeId:
-                    S = cc65_symbol_byscope (Info, Id);
-                    break;
-
-                case SymbolId:
-                    S = cc65_symbol_byid (Info, Id);
-                    break;
-
-                default:
-                    S = 0;
-                    PrintLine ("Invalid id type");
-                    break;
-            }
-        } else {
-            /* Ignore the invalid id */
-            S = 0;
-        }
-
-        /* Output the list */
-        if (S) {
-            PrintSymbols (S);
-            cc65_free_symbolinfo (Info, S);
-        }
-    }
-}
-
-
-
-static void CmdShowSymDef (Collection* Args)
-/* Show symbol definitions from the debug info file */
-{
-    const cc65_lineinfo* L;
-    unsigned I;
-
-    /* Be sure a file is loaded */
-    if (!FileIsLoaded ()) {
-        return;
-    }
-
-    /* Output the header */
-    PrintLineHeader ();
-
-    for (I = 0; I < CollCount (Args); ++I) {
-
-        /* Parse the argument */
-        unsigned Id;
-        unsigned IdType = SymbolId;
-        if (GetId (CollConstAt (Args, I), &Id, &IdType)) {
-            /* Fetch list depending on type */
-            switch (IdType) {
-
-                case SymbolId:
-                    L = cc65_line_bysymdef (Info, Id);
-                    break;
-
-                default:
-                    L = 0;
-                    PrintLine ("Invalid id type");
-                    break;
-            }
-        } else {
-            /* Ignore the invalid id */
-            L = 0;
-        }
-
-        /* Output the list */
-        if (L) {
-            PrintLines (L);
-            cc65_free_lineinfo (Info, L);
-        }
-    }
-}
-
-
-
-static void CmdShowSymRef (Collection* Args)
-/* Show symbol references from the debug info file */
-{
-    const cc65_lineinfo* L;
-    unsigned I;
-
-    /* Be sure a file is loaded */
-    if (!FileIsLoaded ()) {
-        return;
-    }
-
-    /* Output the header */
-    PrintLineHeader ();
-
-    for (I = 0; I < CollCount (Args); ++I) {
-
-        /* Parse the argument */
-        unsigned Id;
-        unsigned IdType = SymbolId;
-        if (GetId (CollConstAt (Args, I), &Id, &IdType)) {
-            /* Fetch list depending on type */
-            switch (IdType) {
-
-                case SymbolId:
-                    L = cc65_line_bysymref (Info, Id);
-                    break;
-
-                default:
-                    L = 0;
-                    PrintLine ("Invalid id type");
-                    break;
-            }
-        } else {
-            /* Ignore the invalid id */
-            L = 0;
-        }
-
-        /* Output the list */
-        if (L) {
-            PrintLines (L);
-            cc65_free_lineinfo (Info, L);
-        }
-    }
-}
-
-
-
-static void CmdShowType (Collection* Args)
-/* Show types from the debug info file */
-{
-    const cc65_typedata* T;
-    const cc65_spaninfo* S;
-    unsigned I;
-
-    /* Be sure a file is loaded */
-    if (!FileIsLoaded ()) {
-        return;
-    }
-
-    /* Output the header */
-    PrintTypeHeader ();
-
-    for (I = 0; I < CollCount (Args); ++I) {
-
-        /* Parse the argument */
-        unsigned Id;
-        unsigned IdType = TypeId;
-        if (GetId (CollConstAt (Args, I), &Id, &IdType)) {
-            /* Fetch list depending on type */
-            switch (IdType) {
-
-                case SpanId:
-                    S = cc65_span_byid (Info, Id);
-                    if (S == 0 || S->count == 0) {
-                        T = 0;
-                        break;
-                    }
-                    Id = S->data[0].type_id;
-                    /* FALLTHROUGH */
-
-                case TypeId:
-                    T = cc65_type_byid (Info, Id);
-                    break;
-
-                default:
-                    T = 0;
-                    PrintLine ("Invalid id type");
-                    break;
-            }
-        } else {
-            /* Ignore the invalid id */
-            T = 0;
-        }
-
-        /* Output the list */
-        if (T) {
-            PrintType (Id, T);
-            cc65_free_typedata (Info, T);
-        }
-    }
-}
-
-
-
-static void CmdUnload (Collection* Args attribute ((unused)))
-/* Unload a debug info file */
-{
-    UnloadFile ();
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static int Parse (char* CmdLine, Collection* Args)
-/* Parse the command line and store the arguments in Args. Return true if ok,
-** false on error.
-*/
-{
-    char* End;
-
-    /* Clear the collection */
-    CollDeleteAll (Args);
-
-    /* Parse the command line */
-    while (1) {
-
-        /* Break out on end of line */
-        if (*CmdLine == '\0') {
-            break;
-        }
-
-        /* Search for start of next command */
-        if (IsSpace (*CmdLine)) {
-            ++CmdLine;
-            continue;
-        }
-
-        /* Allow double quotes to terminate a command */
-        if (*CmdLine == '\"' || *CmdLine == '\'') {
-            char Term = *CmdLine++;
-            End = CmdLine;
-            while (*End != Term) {
-                if (*End == '\0') {
-                    PrintLine ("Unterminated argument");
-                    return 0;
-                }
-                ++End;
-            }
-            *End++ = '\0';
-        } else {
-            End = CmdLine;
-            while (!IsSpace (*End)) {
-                if (*End == '\0') {
-                    PrintLine ("Unterminated argument");
-                    return 0;
-                }
-                ++End;
-            }
-            *End++ = '\0';
-        }
-        CollAppend (Args, CmdLine);
-        CmdLine = End;
-    }
-
-    /* Ok */
-    return 1;
-}
-
-
-
-int main (int argc, char* argv[])
-/* Main program */
-{
-    char Input[256];
-    Collection Args = STATIC_COLLECTION_INITIALIZER;
-
-    /* Initialize the command line */
-    InitCmdLine (&argc, &argv, "dbgsh");
-
-    /* If we have commands on the command line, execute them */
-    if (ArgCount > 1) {
-        unsigned I;
-        for (I = 1; I < ArgCount; ++I) {
-            CollAppend (&Args, ArgVec[I]);
-        }
-
-        /* Search for the command, check number of args, then execute it */
-        ExecCmd (&Args, MainCmds, sizeof (MainCmds) / sizeof (MainCmds[0]));
-    }
-
-    /* Loop until program end */
-    while (!Terminate) {
-
-        /* Output a prompt, then read the input */
-        Print ("dbgsh> ");
-        fflush (stdout);
-        if (fgets (Input, sizeof (Input), stdin) == 0) {
-            PrintLine ("(EOF)");
-            break;
-        }
-
-        /* Parse the command line */
-        if (Parse (Input, &Args) == 0 || CollCount (&Args) == 0) {
-            continue;
-        }
-
-        /* Search for the command, check number of args, then execute it */
-        ExecCmd (&Args, MainCmds, sizeof (MainCmds) / sizeof (MainCmds[0]));
-    }
-
-    /* Free arguments */
-    DoneCollection (&Args);
-    return 0;
-}
-
-
-
diff --git a/src/grc65.vcxproj b/src/grc65.vcxproj
deleted file mode 100644 (file)
index 211ad7c..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{E0FD0AB3-3BEE-496F-8108-A8E0F8933F39}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>grc65</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>false</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="grc65\main.c" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/src/grc65/main.c b/src/grc65/main.c
deleted file mode 100644 (file)
index 1b417c6..0000000
+++ /dev/null
@@ -1,1011 +0,0 @@
-/* GEOS resource compiler
-
-   by Maciej 'YTM/Elysium' Witkowiak
-
-   see GEOSLib documentation for license info
-*/
-
-/* - make it work, then do it better
-   - more or less comments? it was hard to code, should be even harder to
-     understand =D
-   - add loadable icons feature (binary - 63 bytes)
-*/
-
-/* - err, maybe free allocated memory, huh? (who cares, it's just a little prog...)
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <errno.h>
-#include <time.h>
-
-/* common stuff */
-#include "abend.h"
-#include "cmdline.h"
-#include "fname.h"
-#include "chartype.h"
-#include "target.h"
-#include "version.h"
-#include "xmalloc.h"
-
-/* I hope that no one will be able to create a .grc bigger than this... */
-#define BLOODY_BIG_BUFFER 65000
-
-
-
-struct menuitem {
-    char *name;
-    char *type;
-    char *target;
-    struct menuitem *next;
-};
-
-struct menu {
-    char *name;
-    int top, left;
-    int bot, right;
-    char *type;
-    struct menuitem *item;
-};
-
-struct appheader {
-    int year, month, day, hour, min;
-    int mode;
-    int dostype;
-    int geostype;
-    int structure;
-    char *dosname;
-    char *classname;
-    char *version;
-    char *author;
-    char *info;
-    char *icon;
-};
-
-const char *mainToken[] = {"MENU", "HEADER", "ICON", "DIALOG", "MEMORY", ""};
-
-const char *toggle[] = {"off", "no", "0", "on", "yes", "1", ""};
-
-const char *hdrFTypes[] = {"APPLICATION", "AUTO_EXEC", "DESK_ACC", "ASSEMBLY",
-                           "DISK_DEVICE", "PRINTER", "SYSTEM", ""};
-
-const char *hdrFields[] = {"author", "info", "date", "dostype", "mode", "structure", "icon", ""};
-
-const char *hdrDOSTp[] = {"seq", "SEQ", "prg", "PRG", "usr", "USR", ""};
-
-const char *hdrStructTp[] = {"seq", "SEQ", "vlir", "VLIR", ""};
-
-const char *hdrModes[] = {"any", "40only", "80only", "c64only", ""};
-
-const char *memFields[] = {"stacksize", "overlaysize", "overlaynums", "backbuffer", ""};
-
-const int BSWTab[] = {0, 0x005, 0x007, 0x00b, 0x011, 0x017, 0x01d, 0x023,
-    0x025, 0x029, 0x02d, 0x033, 0x039, 0x03c, 0x041, 0x043, 0x04a, 0x04f,
-    0x052, 0x056, 0x05a, 0x05f, 0x063, 0x068, 0x06d, 0x072, 0x077, 0x079,
-    0x07c, 0x080, 0x084, 0x088, 0x08e, 0x094, 0x09a, 0x09f, 0x0a4, 0x0a9,
-    0x0ad, 0x0b1, 0x0b6, 0x0bc, 0x0be, 0x0c2, 0x0c8, 0x0cc, 0x0d4, 0x0da,
-    0x0e0, 0x0e5, 0x0eb, 0x0f0, 0x0f5, 0x0f9, 0x0fe, 0x104, 0x10c, 0x112,
-    0x118, 0x11e, 0x121, 0x129, 0x12c, 0x132, 0x13a, 0x13e, 0x143, 0x148,
-    0x14d, 0x152, 0x157, 0x15a, 0x15f, 0x164, 0x166, 0x168, 0x16d, 0x16f,
-    0x177, 0x17c, 0x182, 0x187, 0x18c, 0x18f, 0x193, 0x196, 0x19b, 0x1a1,
-    0x1a9, 0x1af, 0x1b4, 0x1ba, 0x1be, 0x1c0, 0x1c4, 0x1ca, 0x1d2, 0x1dd};
-
-const unsigned char icon1[] = {255, 255, 255, 128,   0,   1, 128,   0,   1,
-                               128,   0,   1, 128,   0,   1, 128,   0,   1,
-                               128,   0,   1, 128,   0,   1, 128,   0,   1,
-                               128,   0,   1, 128,   0,   1, 128,   0,   1,
-                               128,   0,   1, 128,   0,   1, 128,   0,   1,
-                               128,   0,   1, 128,   0,   1, 128,   0,   1,
-                               128,   0,   1, 128,   0,   1, 255, 255, 255};
-
-const char *outputCName = NULL;
-const char *outputSName = NULL;
-FILE *outputCFile, *outputSFile;
-int CFnum = 0, SFnum = 0;
-int apple = 0;
-char outputCMode[2] = "w";
-char outputSMode[2] = "w";
-
-
-static void Usage (void)
-{
-    printf (
-        "Usage: %s [options] file\n"
-        "Short options:\n"
-        "  -V\t\t\tPrint the version number\n"
-        "  -h\t\t\tHelp (this text)\n"
-        "  -o name\t\tName the C output file\n"
-        "  -s name\t\tName the asm output file\n"
-        "  -t sys\t\tSet the target system\n"
-        "\n"
-        "Long options:\n"
-        "  --help\t\tHelp (this text)\n"
-        "  --target sys\t\tSet the target system\n"
-        "  --version\t\tPrint the version number\n",
-        ProgName);
-}
-
-
-static void OptHelp (const char* Opt attribute ((unused)),
-                     const char* Arg attribute ((unused)))
-/* Print usage information and exit */
-{
-    Usage ();
-    exit (EXIT_SUCCESS);
-}
-
-
-static void OptTarget (const char* Opt attribute ((unused)), const char* Arg)
-/* Set the target system */
-{
-    switch (FindTarget (Arg)) {
-
-        case TGT_GEOS_CBM:
-            apple = 0;
-            break;
-
-        case TGT_GEOS_APPLE:
-            apple = 1;
-            break;
-
-        case TGT_UNKNOWN:
-            AbEnd ("Unknown target system `%s'", Arg);
-            break;
-
-        default:
-            /* Target is known but unsupported */
-            AbEnd ("Unsupported target system `%s'", Arg);
-            break;
-    }
-}
-
-
-static void OptVersion (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Print the program version */
-{
-    fprintf (stderr, "grc65 V%s\n", GetVersionAsString ());
-}
-
-
-
-static void printCHeader (void)
-{
-    fprintf (outputCFile,
-        "//\n"
-        "//\tThis file was generated by the GEOS Resource Compiler\n"
-        "//\n"
-        "//\tDO NOT EDIT! Any changes will be lost!\n"
-        "//\n"
-        "//\tEdit proper resource file instead.\n"
-        "//\n\n");
-}
-
-
-static void printSHeader (void)
-{
-    fprintf (outputSFile,
-        ";\n"
-        ";\tThis file was generated by the GEOS Resource Compiler\n"
-        ";\n"
-        ";\tDO NOT EDIT! Any changes will be lost!\n"
-        ";\n"
-        ";\tEdit proper resource file instead.\n"
-        ";\n\n");
-}
-
-
-static void openCFile (void)
-{
-    if ((outputCFile = fopen (outputCName,outputCMode)) == 0) {
-        AbEnd ("Can't open file %s for writing: %s", outputCName, strerror (errno));
-    }
-
-    if (CFnum == 0) {
-        outputCMode[0] = 'a';
-        printCHeader ();
-        CFnum++;
-    }
-}
-
-
-static void openSFile (void)
-{
-    if ((outputSFile = fopen (outputSName, outputSMode)) == 0) {
-        AbEnd ("Can't open file %s for writing: %s", outputSName, strerror (errno));
-    }
-
-    if (SFnum == 0) {
-        outputSMode[0] = 'a';
-        printSHeader ();
-        SFnum++;
-    }
-}
-
-
-static int findToken (const char **tokenTbl, const char *token)
-{
-    /* takes as input table of tokens and token, returns position in table or -1 if not found */
-    int a = 0;
-
-    while (strlen (tokenTbl[a]) != 0) {
-        if (strcmp (tokenTbl[a], token) == 0) break;
-        a++;
-    }
-
-    if (strlen (tokenTbl[a]) == 0) a = -1;
-    return a;
-}
-
-
-static char *nextPhrase (void)
-{
-    return strtok (NULL, "\"");
-}
-
-
-static char *nextWord (void)
-{
-    return strtok (NULL, " ");
-}
-
-
-static void setLen (char *name, unsigned len)
-{
-    if (strlen (name) > len) {
-        name[len] = '\0';
-    }
-}
-
-
-static void fillOut (char *name, int len, char *filler)
-{
-    int a;
-
-    setLen (name, len);
-    fprintf (outputSFile, "\t.byte \"%s\"\n", name);
-
-    a = strlen (name);
-    if (a < len) {
-        fprintf (outputSFile, "\t.res  (%i - %i), %s\n", len, a, filler);
-    }
-}
-
-
-static char *bintos (unsigned char a, char out[7])
-{
-    int i=0;
-
-    for (; i < 8; i++) {
-        out[7 - i] = ((a & 1) == 0) ? '0' : '1';
-        a = a >> 1;
-    }
-    out[i] = '\0';
-
-    return out;
-}
-
-
-static int getNameSize (const char *word)
-{
-    /* count length of a word using BSW 9 font table */
-    int a = 0, i = 0;
-
-    while (word[i] != '\0') {
-        a += (BSWTab[word[i] - 31] - BSWTab[word[i] - 32]);
-        i++;
-    }
-
-    return a;
-}
-
-
-static void DoMenu (void)
-{
-    int a, size, tmpsize, item = 0;
-    char *token;
-    char namebuff[255] = "";
-    struct menu myMenu;
-    struct menuitem *curItem, *newItem;
-
-    openCFile ();
-
-    myMenu.name = nextWord ();
-    myMenu.left = atoi (nextWord ());
-    myMenu.top = atoi (nextWord ());
-    myMenu.type = nextWord ();
-
-    if (strcmp (nextWord (), "{") != 0) {
-        AbEnd ("Menu '%s' description has no opening bracket!", myMenu.name);
-    }
-    curItem = xmalloc (sizeof(struct menuitem));
-    myMenu.item = curItem;
-
-    for (;;) {
-        token = nextWord ();
-        if (strcmp (token, "}") == 0) break;
-        if (token[strlen (token) - 1] != '"') {
-            strcpy (namebuff, token);
-            do {
-                token = nextWord ();
-                strcat (namebuff, " ");
-                strcat (namebuff, token);
-            } while (token[strlen (token) - 1] != '"');
-            token = xmalloc (strlen (namebuff));
-            strcpy (token, namebuff);
-        }
-        curItem->name = token;
-        curItem->type = nextWord ();
-        curItem->target = nextWord ();
-        newItem = xmalloc (sizeof(struct menuitem));
-        curItem->next = newItem;
-        curItem = newItem;
-        item++;
-    }
-
-    if (item == 0) AbEnd ("Menu '%s' has 0 items!", myMenu.name);
-    if (item > 31) AbEnd ("Menu '%s' has too many items!", myMenu.name);
-
-    curItem->next = NULL;
-
-    /* count menu sizes */
-    size = 0;
-    curItem = myMenu.item;
-    if (strstr (myMenu.type, "HORIZONTAL") != NULL) {
-        /* menu is HORIZONTAL, ysize=15, sum xsize of all items +~8?*/
-        myMenu.bot = myMenu.top + 15;
-        for (a = 0; a != item; a++) {
-            size += getNameSize (curItem->name);
-            curItem = curItem->next;
-        }
-    } else {
-        /* menu is VERTICAL, ysize=item*15, count largest xsize of all items +~8? */
-        myMenu.bot = myMenu.top + (14 * item);
-        for (a = 0; a != item; a++) {
-            tmpsize = getNameSize (curItem->name);
-            size = (size > tmpsize) ? size : tmpsize;
-            curItem = curItem->next;
-        }
-    }
-    myMenu.right = myMenu.left + size - 1;
-
-    curItem = myMenu.item;
-    for (a = 0; a != item; a++) {
-        /* print prototype only if MENU_ACTION or DYN_SUB_MENU are present in type */
-        if ((strstr (curItem->type, "MENU_ACTION") != NULL) || (strstr (curItem->type, "DYN_SUB_MENU") != NULL)) {
-            fprintf (outputCFile,
-                "void %s (void);\n",
-                curItem->target);
-        }
-        curItem=curItem->next;
-    }
-
-    fprintf (outputCFile,
-        "\n"
-        "const void %s = {\n"
-        "\t(char)%i, (char)%i,\n"
-        "\t(int)%i, (int)%i,\n"
-        "\t(char)(%i | %s),\n",
-        myMenu.name, myMenu.top, myMenu.bot, myMenu.left, myMenu.right, item, myMenu.type);
-
-    curItem = myMenu.item;
-    for (a = 0; a != item; a++) {
-        fprintf (outputCFile,
-            "\t%s, (char)%s, (int)",
-            curItem->name, curItem->type);
-        if ((strstr (curItem->type, "SUB_MENU") != NULL) && (strstr (curItem->type, "DYN_SUB_MENU") == NULL)) {
-            fprintf (outputCFile,
-                "&");
-        }
-        fprintf (outputCFile,
-            "%s,\n",
-            curItem->target);
-        curItem = curItem->next;
-    }
-
-    fprintf (outputCFile,
-        "};\n\n");
-
-    if (fclose (outputCFile) != 0) {
-        AbEnd ("Error closing %s: %s", outputCName, strerror (errno));
-    }
-}
-
-
-static void DoHeader (void)
-{
-    time_t t;
-    struct tm *my_tm;
-
-    struct appheader myHead;
-    char *token;
-    char i1[9], i2[9], i3[9];
-    int i;
-
-    openSFile ();
-
-    token = nextWord ();
-
-    i = findToken (hdrFTypes, token);
-
-    if (apple == 1) {
-        switch (i) {
-            case 0:
-                myHead.geostype = 0x82;
-                break;
-            default:
-                AbEnd ("Filetype '%s' is not supported yet", token);
-        }
-    } else {
-        switch (i) {
-            case 0:
-                myHead.geostype = 6;
-                break;
-            case 1:
-                myHead.geostype = 14;
-                break;
-            default:
-                AbEnd ("Filetype '%s' is not supported yet", token);
-        }
-    }
-
-    myHead.dosname = nextPhrase ();
-    nextPhrase ();
-    myHead.classname = nextPhrase ();
-    nextPhrase ();
-    myHead.version = nextPhrase ();
-
-    /* put default values into myHead here */
-    myHead.author = "cc65";
-    myHead.info = "Program compiled with cc65 and GEOSLib.";
-    myHead.dostype = 128;
-    if (apple == 0) myHead.dostype += 3;
-    myHead.structure = 0;
-    myHead.mode = 0;
-    myHead.icon = NULL;
-
-    t = time (NULL);
-    my_tm = localtime (&t);
-
-    myHead.year = my_tm->tm_year % 100;
-    myHead.month = my_tm->tm_mon + 1;
-    myHead.day = my_tm->tm_mday;
-    myHead.hour = my_tm->tm_hour;
-    myHead.min = my_tm->tm_min;
-
-    if (strcmp (nextWord (), "{") != 0) {
-        AbEnd ("Header '%s' has no opening bracket!", myHead.dosname);
-    }
-
-    for (;;) {
-        token = nextWord ();
-        if (strcmp (token, "}") == 0) break;
-        switch (findToken (hdrFields, token)) {
-            case -1:
-                AbEnd ("Unknown field '%s' in header '%s'", token, myHead.dosname);
-                break;
-
-            case 0: /* author */
-                myHead.author = nextPhrase ();
-                break;
-
-            case 1: /* info */
-                myHead.info = nextPhrase ();
-                break;
-
-            case 2: /* date */
-                myHead.year = atoi (nextWord ());
-                myHead.month = atoi (nextWord ());
-                myHead.day = atoi (nextWord ());
-                myHead.hour = atoi (nextWord ());
-                myHead.min = atoi (nextWord ());
-                break;
-
-            case 3: /* dostype */
-                switch (i = findToken (hdrDOSTp, nextWord ())) {
-                    case -1:
-                        AbEnd ("Unknown dostype in header '%s'", myHead.dosname);
-                        break;
-                    default:
-                        if (apple == 0) myHead.dostype = i / 2 + 128 + 1;
-                        break;
-                }
-                break;
-
-            case 4: /* mode */
-                switch (findToken (hdrModes, nextWord ())) {
-                    case -1:
-                        AbEnd ("Unknown mode in header '%s'", myHead.dosname);
-                    case 0:
-                        if (apple == 0) myHead.mode = 0x40;
-                        break;
-                    case 1:
-                        if (apple == 0) myHead.mode = 0x00;
-                        break;
-                    case 2:
-                        if (apple == 0) myHead.mode = 0xc0;
-                        break;
-                    case 3:
-                        if (apple == 0) myHead.mode = 0x80;
-                        break;
-                }
-                break;
-
-            case 5: /* structure */
-                switch (findToken (hdrStructTp, nextWord ())) {
-                    case -1:
-                        AbEnd ("unknown structure type in header '%s'", myHead.dosname);
-                    case 0:
-                    case 1:
-                        myHead.structure = 0;
-                        break;
-                    case 2:
-                    case 3:
-                        myHead.structure = 1;
-                        break;
-                }
-                break;
-
-            case 6: /* icon */
-                myHead.icon = nextPhrase ();
-                break;
-        }
-    }
-
-    /* OK, all information is gathered, do flushout */
-
-    fprintf (outputSFile,
-        "\t\t.segment \"DIRENTRY\"\n\n");
-
-    if (apple == 1) {
-
-        if (myHead.structure == 0) {
-            fprintf (outputSFile,
-                "\t.import __VLIR0_START__, __VLIR0_LAST__, __BSS_SIZE__\n\n");
-        }
-        fprintf (outputSFile,
-            "\t.byte %i << 4 | %u\n",
-            myHead.structure + 2, (unsigned)strlen (myHead.dosname));
-
-        fillOut (myHead.dosname, 15, "0");
-
-        fprintf (outputSFile,
-            "\t.byte $%02x\n"
-            "\t.word 0\n"
-            "\t.word 0\n"
-            "\t.word %s\n"
-            "\t.byte 0\n"
-            "\t.word %i << 9 | %i << 5 | %i, %i << 8 | %i\n"
-            "\t.byte 0\n"
-            "\t.byte 0\n"
-            "\t.byte 0\n"
-            "\t.word 0\n"
-            "\t.word %i << 9 | %i << 5 | %i, %i << 8 | %i\n"
-            "\t.word 0\n\n",
-            myHead.geostype,
-            myHead.structure == 0 ?
-                "__VLIR0_LAST__ - __VLIR0_START__ - __BSS_SIZE__" : "0",
-            myHead.year, myHead.month, myHead.day, myHead.hour, myHead.min,
-            myHead.year, myHead.month, myHead.day, myHead.hour, myHead.min);
-
-    } else {
-
-        fprintf (outputSFile,
-            "\t.byte %i\n"
-            "\t.word 0\n",
-            myHead.dostype);
-
-        fillOut (myHead.dosname, 16, "$a0");
-
-        fprintf (outputSFile,
-            "\t.word 0\n"
-            "\t.byte %i\n"
-            "\t.byte %i\n"
-            "\t.byte %i, %i, %i, %i, %i\n\n"
-            "\t.word 0\n"
-            "\t.byte \"PRG formatted GEOS file V1.0\"\n\n",
-            myHead.structure, myHead.geostype,
-            myHead.year, myHead.month, myHead.day, myHead.hour, myHead.min);
-    }
-
-    fprintf (outputSFile,
-        "\t\t.segment \"FILEINFO\"\n\n"
-        "\t.import __VLIR0_START__, __STARTUP_RUN__\n\n"
-        "\t.byte 3, 21, 63 | $80\n");
-
-    if (myHead.icon != NULL) {
-        fprintf (outputSFile,
-            "\t.incbin \"%s\", 0, 63\n",
-            myHead.icon);
-    } else {
-        for (i = 0; i != 63; i = i + 3) {
-            fprintf (outputSFile,
-                "\t.byte %%%s, %%%s, %%%s\n",
-                bintos (icon1[i], i1), bintos (icon1[i+1], i2), bintos (icon1[i+2], i3));
-        }
-    }
-
-    fprintf (outputSFile,
-        "\t.byte %i, %i, %i\n"
-        "\t.word __VLIR0_START__, __VLIR0_START__ - 1, __STARTUP_RUN__\n\n",
-        myHead.dostype, myHead.geostype, myHead.structure);
-
-    fillOut (myHead.classname, 12, "$20");
-
-    fillOut (myHead.version, 4, "0");
-
-    fprintf (outputSFile,
-        "\t.byte 0, 0, 0\n"
-        "\t.byte %i\n\n",
-        myHead.mode);
-
-    setLen (myHead.author, 62);
-    fprintf (outputSFile,
-        "\t.byte \"%s\"\n"
-        "\t.byte 0\n"
-        "\t.res  (63 - %i)\n\n",
-        myHead.author, (int)(strlen (myHead.author) + 1));
-
-    setLen (myHead.info, 95);
-    fprintf (outputSFile,
-        "\t.byte \"%s\"\n"
-        "\t.byte 0\n\n",
-        myHead.info);
-
-    if (fclose (outputSFile) != 0) {
-        AbEnd ("Error closing %s: %s", outputSName, strerror (errno));
-    }
-}
-
-
-static void DoMemory (void)
-{
-    char *token;
-    int stacksize, overlaysize;
-    int overlaytable[127];
-    int number, lastnumber;
-    int backbuffer;
-
-    openSFile ();
-
-    stacksize = -1;
-    overlaysize = -1;
-    memset (overlaytable, 0, sizeof (overlaytable));
-    lastnumber = -1;
-    backbuffer = -1;
-
-    if (strcmp (nextWord (), "{") != 0) {
-        AbEnd ("MEMORY description has no opening bracket!");
-    }
-
-    token = NULL;
-    for (;;) {
-        if (token == NULL) token = nextWord ();
-        if (strcmp (token, "}") == 0) break;
-        switch (findToken (memFields, token)) {
-            case -1:
-                AbEnd ("Unknown field '%s' in MEMORY description", token);
-                break;
-
-            case 0: /* stacksize */
-                stacksize = strtol (nextWord (), NULL, 0);
-                token = NULL;
-                break;
-
-            case 1: /* overlaysize */
-                overlaysize = strtol (nextWord (), NULL, 0);
-                token = NULL;
-                break;
-
-            case 2: /* overlaynums */
-                do {
-                    token = nextWord ();
-                    if (IsDigit (token[0]) == 0) break;
-
-                    number = atoi (token);
-                    if (number < 0 || number > 126) {
-                        AbEnd ("Overlay number %i is out of range 0-126", number);
-                    }
-                    if (overlaytable[number] == 1) {
-                        AbEnd ("Overlay number %i is defined twice", number);
-                    }
-
-                    overlaytable[number] = 1;
-                    if (number > lastnumber) lastnumber = number;
-
-                } while (IsDigit (token[0]) != 0);
-
-                if (lastnumber == -1) {
-                    AbEnd ("There must be at least one overlay number");
-                }
-
-                /* always include number 0 */
-                overlaytable[0] = 1;
-                break;
-
-            case 3: /* backbuffer */
-                switch (findToken (toggle, nextWord ())) {
-                    case -1:
-                        AbEnd ("Unknown value for 'backbuffer'");
-                        break;
-                    case 0:
-                    case 1:
-                    case 2:
-                        backbuffer = 0;
-                        break;
-                    default:
-                        backbuffer = 1;
-                        break;
-                }
-                token = NULL;
-                break;
-        }
-    }
-
-    /* OK, all information is gathered, do flushout */
-
-    if (lastnumber != -1) {
-        fprintf (outputSFile,
-            "\t\t.segment \"RECORDS\"\n\n");
-
-        if (apple == 1) {
-
-            for (number = 0; number <= lastnumber; number++) {
-                fprintf (outputSFile,
-                    "\t.byte %s\n",
-                    overlaytable[number] == 1 ? "$00" : "$FF");
-            }
-            fprintf (outputSFile,
-                "\n");
-
-            for (number = 0; number <= lastnumber; number++) {
-                if (overlaytable[number] == 1) {
-                    fprintf (outputSFile,
-                        "\t\t.segment \"VLIRIDX%i\"\n\n"
-                        "\t.import __VLIR%i_START__, __VLIR%i_LAST__%s\n\n"
-                        "\t.res  255\n"
-                        "\t.byte .lobyte (__VLIR%i_LAST__ - __VLIR%i_START__%s)\n"
-                        "\t.res  255\n"
-                        "\t.byte .hibyte (__VLIR%i_LAST__ - __VLIR%i_START__%s)\n\n",
-                        number, number, number,
-                        number == 0 ? ", __BSS_SIZE__" : "",
-                        number, number,
-                        number == 0 ? " - __BSS_SIZE__" : "",
-                        number, number,
-                        number == 0 ? " - __BSS_SIZE__" : "");
-                }
-            }
-
-        } else {
-
-            for (number = 0; number <= lastnumber; number++) {
-                if (overlaytable[number] == 1) {
-                    fprintf (outputSFile,
-                        "\t.import __VLIR%i_START__, __VLIR%i_LAST__%s\n",
-                        number, number, number == 0 ? ", __BSS_SIZE__" : "");
-                }
-            }
-            fprintf (outputSFile,
-                "\n");
-
-            for (number = 0; number <= lastnumber; number++) {
-                if (overlaytable[number] == 1) {
-                    fprintf (outputSFile,
-                        "\t.byte .lobyte ((__VLIR%i_LAST__ - __VLIR%i_START__%s - 1) /    254) + 1\n"
-                        "\t.byte .lobyte ((__VLIR%i_LAST__ - __VLIR%i_START__%s - 1) .MOD 254) + 2\n",
-                        number, number, number == 0 ? " - __BSS_SIZE__" : "",
-                        number, number, number == 0 ? " - __BSS_SIZE__" : "");
-                } else {
-                    fprintf (outputSFile,
-                        "\t.byte $00\n"
-                        "\t.byte $FF\n");
-                }
-            }
-            fprintf (outputSFile,
-                "\n");
-        }
-
-        openCFile ();
-
-        fprintf (outputCFile,
-            "extern void _OVERLAYADDR__[];\n"
-            "extern void _OVERLAYSIZE__[];\n\n"
-            "#define OVERLAY_ADDR (char*)   _OVERLAYADDR__\n"
-            "#define OVERLAY_SIZE (unsigned)_OVERLAYSIZE__\n\n");
-
-        if (fclose (outputCFile) != 0) {
-            AbEnd ("Error closing %s: %s", outputCName, strerror (errno));
-        }
-    }
-
-    if (stacksize != -1) {
-        fprintf (outputSFile,
-            "\t.export __STACKSIZE__ : absolute = $%04x\n\n",
-            stacksize);
-    }
-
-    if (overlaysize != -1) {
-        fprintf (outputSFile,
-            "\t.export __OVERLAYSIZE__ : absolute = $%04x\n\n",
-            overlaysize);
-    }
-
-    if (backbuffer != -1) {
-        fprintf (outputSFile,
-            "\t.export __BACKBUFSIZE__ : absolute = $%04x\n\n",
-            backbuffer ? 0x2000 : 0x0000);
-    }
-
-    if (fclose (outputSFile) != 0) {
-        AbEnd ("Error closing %s: %s", outputSName, strerror (errno));
-    }
-}
-
-
-static char *filterInput (FILE *F, char *tbl)
-{
-    /* loads file into buffer filtering it out */
-    int a, prevchar = -1, i = 0, bracket = 0, quote = 1;
-
-    for (;;) {
-        a = getc(F);
-        if ((a == '\n') || (a == '\015')) a = ' ';
-        if (a == ',' && quote) a = ' ';
-        if (a == '\042') quote =! quote;
-        if (quote) {
-            if ((a == '{') || (a == '(')) bracket++;
-            if ((a == '}') || (a == ')')) bracket--;
-        }
-        if (a == EOF) {
-            tbl[i] = '\0';
-            xrealloc (tbl, i + 1);
-            break;
-        }
-        if (IsSpace (a)) {
-            if ((prevchar != ' ') && (prevchar != -1)) {
-                tbl[i++] = ' ';
-                prevchar = ' ';
-            }
-        } else {
-            if (a == ';' && quote) {
-                do {
-                    a = getc (F);
-                } while (a != '\n');
-                fseek (F, -1, SEEK_CUR);
-            } else {
-                tbl[i++] = a;
-                prevchar = a;
-            }
-        }
-    }
-
-    if (bracket != 0) AbEnd ("There are unclosed brackets!");
-
-    return tbl;
-}
-
-
-static void processFile (const char *filename)
-{
-    FILE *F;
-
-    char *str;
-    char *token;
-
-    int head = 0;   /* number of processed HEADER sections */
-    int memory = 0; /* number of processed MEMORY sections */
-
-    if ((F = fopen (filename, "r")) == 0) {
-        AbEnd ("Can't open file %s for reading: %s", filename, strerror (errno));
-    }
-
-    str = filterInput (F, xmalloc (BLOODY_BIG_BUFFER));
-
-    token = strtok (str, " ");
-
-    do {
-        if (str != NULL) {
-            switch (findToken (mainToken, token)) {
-                case 0:
-                    DoMenu ();
-                    break;
-                case 1:
-                    if (++head != 1) {
-                        AbEnd ("More than one HEADER section, aborting");
-                    } else {
-                        DoHeader ();
-                    }
-                    break;
-                case 2: break; /* icon not implemented yet */
-                case 3: break; /* dialog not implemented yet */
-                case 4:
-                    if (++memory != 1) {
-                        AbEnd ("More than one MEMORY section, aborting");
-                    } else {
-                        DoMemory ();
-                    }
-                    break;
-                default:
-                    AbEnd ("Unknown section '%s'", token);
-                    break;
-            }
-        }
-        token = nextWord ();
-    } while (token != NULL);
-}
-
-
-int main (int argc, char *argv[])
-{
-    /* Program long options */
-    static const LongOpt OptTab[] = {
-        { "--help",    0, OptHelp},
-        { "--target",  1, OptTarget},
-        { "--version", 0, OptVersion},
-    };
-
-    unsigned ffile = 0;
-    unsigned I;
-
-    /* Initialize the cmdline module */
-    InitCmdLine (&argc, &argv, "grc65");
-
-    /* Check the parameters */
-    I = 1;
-    while (I < ArgCount) {
-
-        /* Get the argument */
-        const char* Arg = ArgVec [I];
-
-        /* Check for an option */
-        if (Arg[0] == '-') {
-            switch (Arg[1]) {
-
-                case '-':
-                    LongOption (&I, OptTab, sizeof(OptTab)/sizeof(OptTab[0]));
-                    break;
-
-                case 'o':
-                    outputCName = GetArg (&I, 2);
-                    break;
-
-                case 's':
-                    outputSName = GetArg (&I, 2);
-                    break;
-
-                case 't':
-                    OptTarget (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'h':
-                case '?':
-                    OptHelp (Arg, 0);
-                    break;
-
-                case 'V':
-                    OptVersion (Arg, 0);
-                    break;
-
-                default:
-                    UnknownOption (Arg);
-            }
-
-        } else {
-            ffile++;
-
-            if (outputCName == NULL) outputCName = MakeFilename (Arg, ".h");
-            if (outputSName == NULL) outputSName = MakeFilename (Arg, ".s");
-
-            processFile (Arg);
-        }
-
-        /* Next argument */
-        ++I;
-    }
-
-    if (ffile == 0) AbEnd ("No input file");
-
-    return EXIT_SUCCESS;
-}
diff --git a/src/ld65.vcxproj b/src/ld65.vcxproj
deleted file mode 100644 (file)
index acb9b42..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{26C749A0-814C-47A2-9D36-AE92AE932FE4}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>ld65</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>false</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClInclude Include="ld65\asserts.h" />
-    <ClInclude Include="ld65\bin.h" />
-    <ClInclude Include="ld65\binfmt.h" />
-    <ClInclude Include="ld65\cfgexpr.h" />
-    <ClInclude Include="ld65\condes.h" />
-    <ClInclude Include="ld65\config.h" />
-    <ClInclude Include="ld65\dbgfile.h" />
-    <ClInclude Include="ld65\dbgsyms.h" />
-    <ClInclude Include="ld65\error.h" />
-    <ClInclude Include="ld65\exports.h" />
-    <ClInclude Include="ld65\expr.h" />
-    <ClInclude Include="ld65\extsyms.h" />
-    <ClInclude Include="ld65\fileinfo.h" />
-    <ClInclude Include="ld65\fileio.h" />
-    <ClInclude Include="ld65\filepath.h" />
-    <ClInclude Include="ld65\fragment.h" />
-    <ClInclude Include="ld65\global.h" />
-    <ClInclude Include="ld65\library.h" />
-    <ClInclude Include="ld65\lineinfo.h" />
-    <ClInclude Include="ld65\mapfile.h" />
-    <ClInclude Include="ld65\memarea.h" />
-    <ClInclude Include="ld65\o65.h" />
-    <ClInclude Include="ld65\objdata.h" />
-    <ClInclude Include="ld65\objfile.h" />
-    <ClInclude Include="ld65\scanner.h" />
-    <ClInclude Include="ld65\scopes.h" />
-    <ClInclude Include="ld65\segments.h" />
-    <ClInclude Include="ld65\span.h" />
-    <ClInclude Include="ld65\spool.h" />
-    <ClInclude Include="ld65\tpool.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="ld65\asserts.c" />
-    <ClCompile Include="ld65\bin.c" />
-    <ClCompile Include="ld65\binfmt.c" />
-    <ClCompile Include="ld65\cfgexpr.c" />
-    <ClCompile Include="ld65\condes.c" />
-    <ClCompile Include="ld65\config.c" />
-    <ClCompile Include="ld65\dbgfile.c" />
-    <ClCompile Include="ld65\dbgsyms.c" />
-    <ClCompile Include="ld65\error.c" />
-    <ClCompile Include="ld65\exports.c" />
-    <ClCompile Include="ld65\expr.c" />
-    <ClCompile Include="ld65\extsyms.c" />
-    <ClCompile Include="ld65\fileinfo.c" />
-    <ClCompile Include="ld65\fileio.c" />
-    <ClCompile Include="ld65\filepath.c" />
-    <ClCompile Include="ld65\fragment.c" />
-    <ClCompile Include="ld65\global.c" />
-    <ClCompile Include="ld65\library.c" />
-    <ClCompile Include="ld65\lineinfo.c" />
-    <ClCompile Include="ld65\main.c" />
-    <ClCompile Include="ld65\mapfile.c" />
-    <ClCompile Include="ld65\memarea.c" />
-    <ClCompile Include="ld65\o65.c" />
-    <ClCompile Include="ld65\objdata.c" />
-    <ClCompile Include="ld65\objfile.c" />
-    <ClCompile Include="ld65\scanner.c" />
-    <ClCompile Include="ld65\scopes.c" />
-    <ClCompile Include="ld65\segments.c" />
-    <ClCompile Include="ld65\span.c" />
-    <ClCompile Include="ld65\spool.c" />
-    <ClCompile Include="ld65\tpool.c" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/src/ld65/asserts.c b/src/ld65/asserts.c
deleted file mode 100644 (file)
index 276b135..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 asserts.c                                 */
-/*                                                                           */
-/*                      Assertions for the ld65 linker                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "assertion.h"
-#include "coll.h"
-#include "xmalloc.h"
-
-/* ld65 */
-#include "asserts.h"
-#include "error.h"
-#include "expr.h"
-#include "fileio.h"
-#include "lineinfo.h"
-#include "objdata.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Assertion struct decl */
-struct Assertion {
-    Collection          LineInfos;      /* File position of assertion */
-    ExprNode*           Expr;           /* Expression to evaluate */
-    AssertAction        Action;         /* What to do */
-    unsigned            Msg;            /* Message to print */
-    ObjData*            Obj;            /* Object file containing the assertion */
-};
-
-/* List with all assertions */
-static Collection Assertions = STATIC_COLLECTION_INITIALIZER;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Assertion* ReadAssertion (FILE* F, struct ObjData* O)
-/* Read an assertion from the given file */
-{
-    /* Allocate memory */
-    Assertion* A = xmalloc (sizeof (Assertion));
-
-    /* Read the fields from the file */
-    A->LineInfos = EmptyCollection;
-    A->Expr      = ReadExpr (F, O);
-    A->Action    = (AssertAction) ReadVar (F);
-    A->Msg       = MakeGlobalStringId (O, ReadVar (F));
-    ReadLineInfoList (F, O, &A->LineInfos);
-
-    /* Set remaining fields */
-    A->Obj = O;
-
-    /* Add the assertion to the global list */
-    CollAppend (&Assertions, A);
-
-    /* Return the new struct */
-    return A;
-}
-
-
-
-void CheckAssertions (void)
-/* Check all assertions */
-{
-    unsigned I;
-
-    /* Walk over all assertions */
-    for (I = 0; I < CollCount (&Assertions); ++I) {
-
-        const LineInfo* LI;
-        const char* Module;
-        unsigned Line;
-
-        /* Get the assertion */
-        Assertion* A = CollAtUnchecked (&Assertions, I);
-
-        /* Ignore assertions that shouldn't be handled at link time */
-        if (!AssertAtLinkTime (A->Action)) {
-            continue;
-        }
-
-        /* Retrieve the relevant line info for this assertion */
-        LI = CollConstAt (&A->LineInfos, 0);
-
-        /* Get file name and line number from the source */
-        Module = GetSourceName (LI);
-        Line   = GetSourceLine (LI);
-
-        /* If the expression is not constant, we're not able to handle it */
-        if (!IsConstExpr (A->Expr)) {
-            Warning ("Cannot evaluate assertion in module `%s', line %u",
-                     Module, Line);
-        } else if (GetExprVal (A->Expr) == 0) {
-
-            /* Assertion failed */
-            const char* Message = GetString (A->Msg);
-
-            switch (A->Action) {
-
-                case ASSERT_ACT_WARN:
-                case ASSERT_ACT_LDWARN:
-                    Warning ("%s(%u): %s", Module, Line, Message);
-                    break;
-
-                case ASSERT_ACT_ERROR:
-                case ASSERT_ACT_LDERROR:
-                    Error ("%s(%u): %s", Module, Line, Message);
-                    break;
-
-                default:
-                    Internal ("Invalid assertion action (%u) in module `%s', "
-                              "line %u (file corrupt?)",
-                              A->Action, Module, Line);
-                    break;
-            }
-        }
-    }
-}
diff --git a/src/ld65/asserts.h b/src/ld65/asserts.h
deleted file mode 100644 (file)
index bce41aa..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 asserts.h                                 */
-/*                                                                           */
-/*                      Assertions for the ld65 linker                       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ASSERTS_H
-#define ASSERTS_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "filepos.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Assertion object forward decl */
-typedef struct Assertion Assertion;
-
-/* ObjData forward decl */
-struct ObjData;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Assertion* ReadAssertion (FILE* F, struct ObjData* O);
-/* Read an assertion from the given file */
-
-void CheckAssertions (void);
-/* Check all assertions */
-
-
-
-/* End of asserts.h */
-
-#endif
diff --git a/src/ld65/bin.c b/src/ld65/bin.c
deleted file mode 100644 (file)
index ada4f1e..0000000
+++ /dev/null
@@ -1,318 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   bin.c                                   */
-/*                                                                           */
-/*                  Module to handle the raw binary format                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1999-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "alignment.h"
-#include "print.h"
-#include "xmalloc.h"
-
-/* ld65 */
-#include "bin.h"
-#include "config.h"
-#include "exports.h"
-#include "expr.h"
-#include "error.h"
-#include "global.h"
-#include "fileio.h"
-#include "lineinfo.h"
-#include "memarea.h"
-#include "segments.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-struct BinDesc {
-    unsigned    Undef;          /* Count of undefined externals */
-    FILE*       F;              /* Output file */
-    const char* Filename;       /* Name of output file */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-BinDesc* NewBinDesc (void)
-/* Create a new binary format descriptor */
-{
-    /* Allocate memory for a new BinDesc struct */
-    BinDesc* D = xmalloc (sizeof (BinDesc));
-
-    /* Initialize the fields */
-    D->Undef    = 0;
-    D->F        = 0;
-    D->Filename = 0;
-
-    /* Return the created struct */
-    return D;
-}
-
-
-
-void FreeBinDesc (BinDesc* D)
-/* Free a binary format descriptor */
-{
-    xfree (D);
-}
-
-
-
-static unsigned BinWriteExpr (ExprNode* E, int Signed, unsigned Size,
-                              unsigned long Offs attribute ((unused)),
-                              void* Data)
-/* Called from SegWrite for an expression. Evaluate the expression, check the
-** range and write the expression value to the file.
-*/
-{
-    /* There's a predefined function to handle constant expressions */
-    return SegWriteConstExpr (((BinDesc*)Data)->F, E, Signed, Size);
-}
-
-
-
-static void PrintBoolVal (const char* Name, int B)
-/* Print a boolean value for debugging */
-{
-    Print (stdout, 2, "      %s = %s\n", Name, B? "true" : "false");
-}
-
-
-
-static void PrintNumVal (const char* Name, unsigned long V)
-/* Print a numerical value for debugging */
-{
-    Print (stdout, 2, "      %s = 0x%lx\n", Name, V);
-}
-
-
-
-static void BinWriteMem (BinDesc* D, MemoryArea* M)
-/* Write the segments of one memory area to a file */
-{
-    unsigned I;
-
-    /* Get the start address of this memory area */
-    unsigned long Addr = M->Start;
-
-    /* Debugging: Check that the file offset is correct */
-    if (ftell (D->F) != (long)M->FileOffs) {
-        Internal ("Invalid file offset for memory area %s: %ld/%lu",
-                  GetString (M->Name), ftell (D->F), M->FileOffs);
-    }
-
-    /* Walk over all segments in this memory area */
-    for (I = 0; I < CollCount (&M->SegList); ++I) {
-
-        int DoWrite;
-
-        /* Get the segment */
-        SegDesc* S = CollAtUnchecked (&M->SegList, I);
-
-        /* Keep the user happy */
-        Print (stdout, 1, "    Writing `%s'\n", GetString (S->Name));
-
-        /* Writes do only occur in the load area and not for BSS segments */
-        DoWrite = (S->Flags & SF_BSS) == 0      &&      /* No BSS segment */
-                   S->Load == M                 &&      /* LOAD segment */
-                   S->Seg->Dumped == 0;                 /* Not already written */
-
-        /* Output debugging stuff */
-        PrintBoolVal ("bss", S->Flags & SF_BSS);
-        PrintBoolVal ("LoadArea", S->Load == M);
-        PrintBoolVal ("Dumped", S->Seg->Dumped);
-        PrintBoolVal ("DoWrite", DoWrite);
-        PrintNumVal  ("Address", Addr);
-        PrintNumVal  ("FileOffs", (unsigned long) ftell (D->F));
-
-        /* Check if the alignment for the segment from the linker config is
-        ** a multiple for that of the segment.
-        */
-        if ((S->RunAlignment % S->Seg->Alignment) != 0) {
-            /* Segment requires another alignment than configured
-            ** in the linker.
-            */
-            Warning ("Segment `%s' is not aligned properly. Resulting "
-                     "executable may not be functional.",
-                     GetString (S->Name));
-        }
-
-        /* If this is the run memory area, we must apply run alignment. If
-        ** this is not the run memory area but the load memory area (which
-        ** means that both are different), we must apply load alignment.
-        ** Beware: DoWrite may be true even if this is the run memory area,
-        ** because it may be also the load memory area.
-        */
-        if (S->Run == M) {
-
-            /* Handle ALIGN and OFFSET/START */
-            if (S->Flags & SF_ALIGN) {
-                /* Align the address */
-                unsigned long NewAddr = AlignAddr (Addr, S->RunAlignment);
-                if (DoWrite || (M->Flags & MF_FILL) != 0) {
-                    WriteMult (D->F, M->FillVal, NewAddr - Addr);
-                    PrintNumVal ("SF_ALIGN", NewAddr - Addr);
-                }
-                Addr = NewAddr;
-            } else if (S->Flags & (SF_OFFSET | SF_START)) {
-                unsigned long NewAddr = S->Addr;
-                if (S->Flags & SF_OFFSET) {
-                    /* It's an offset, not a fixed address, make an address */
-                    NewAddr += M->Start;
-                }
-                if (DoWrite || (M->Flags & MF_FILL) != 0) {
-                    WriteMult (D->F, M->FillVal, NewAddr-Addr);
-                    PrintNumVal ("SF_OFFSET", NewAddr - Addr);
-                }
-                Addr = NewAddr;
-            }
-
-        } else if (S->Load == M) {
-
-            /* Handle ALIGN_LOAD */
-            if (S->Flags & SF_ALIGN_LOAD) {
-                /* Align the address */
-                unsigned long NewAddr = AlignAddr (Addr, S->LoadAlignment);
-                if (DoWrite || (M->Flags & MF_FILL) != 0) {
-                    WriteMult (D->F, M->FillVal, NewAddr - Addr);
-                    PrintNumVal ("SF_ALIGN_LOAD", NewAddr - Addr);
-                }
-                Addr = NewAddr;
-            }
-
-        }
-
-        /* Now write the segment to disk if it is not a BSS type segment and
-        ** if the memory area is the load area.
-        */
-        if (DoWrite) {
-            unsigned long P = ftell (D->F);
-            SegWrite (D->Filename, D->F, S->Seg, BinWriteExpr, D);
-            PrintNumVal ("Wrote", (unsigned long) (ftell (D->F) - P));
-        } else if (M->Flags & MF_FILL) {
-            WriteMult (D->F, S->Seg->FillVal, S->Seg->Size);
-            PrintNumVal ("Filled", (unsigned long) S->Seg->Size);
-        }
-
-        /* If this was the load memory area, mark the segment as dumped */
-        if (S->Load == M) {
-            S->Seg->Dumped = 1;
-        }
-
-        /* Calculate the new address */
-        Addr += S->Seg->Size;
-    }
-
-    /* If a fill was requested, fill the remaining space */
-    if ((M->Flags & MF_FILL) != 0 && M->FillLevel < M->Size) {
-        unsigned long ToFill = M->Size - M->FillLevel;
-        Print (stdout, 2, "    Filling 0x%lx bytes with 0x%02x\n",
-               ToFill, M->FillVal);
-        WriteMult (D->F, M->FillVal, ToFill);
-        M->FillLevel = M->Size;
-    }
-}
-
-
-
-static int BinUnresolved (unsigned Name attribute ((unused)), void* D)
-/* Called if an unresolved symbol is encountered */
-{
-    /* Unresolved symbols are an error in binary format. Bump the counter
-    ** and return zero telling the caller that the symbol is indeed
-    ** unresolved.
-    */
-    ((BinDesc*) D)->Undef++;
-    return 0;
-}
-
-
-
-void BinWriteTarget (BinDesc* D, struct File* F)
-/* Write a binary output file */
-{
-    unsigned I;
-
-    /* Place the filename in the control structure */
-    D->Filename = GetString (F->Name);
-
-    /* Check for unresolved symbols. The function BinUnresolved is called
-    ** if we get an unresolved symbol.
-    */
-    D->Undef = 0;               /* Reset the counter */
-    CheckUnresolvedImports (BinUnresolved, D);
-    if (D->Undef > 0) {
-        /* We had unresolved symbols, cannot create output file */
-        Error ("%u unresolved external(s) found - cannot create output file", D->Undef);
-    }
-
-    /* Open the file */
-    D->F = fopen (D->Filename, "wb");
-    if (D->F == 0) {
-        Error ("Cannot open `%s': %s", D->Filename, strerror (errno));
-    }
-
-    /* Keep the user happy */
-    Print (stdout, 1, "Opened `%s'...\n", D->Filename);
-
-    /* Dump all memory areas */
-    for (I = 0; I < CollCount (&F->MemoryAreas); ++I) {
-        /* Get this entry */
-        MemoryArea* M = CollAtUnchecked (&F->MemoryAreas, I);
-        Print (stdout, 1, "  Dumping `%s'\n", GetString (M->Name));
-        BinWriteMem (D, M);
-    }
-
-    /* Close the file */
-    if (fclose (D->F) != 0) {
-        Error ("Cannot write to `%s': %s", D->Filename, strerror (errno));
-    }
-
-    /* Reset the file and filename */
-    D->F        = 0;
-    D->Filename = 0;
-}
diff --git a/src/ld65/bin.h b/src/ld65/bin.h
deleted file mode 100644 (file)
index f53aec9..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   bin.h                                   */
-/*                                                                           */
-/*                  Module to handle the raw binary format                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1999-2001 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef BIN_H
-#define BIN_H
-
-
-
-#include "config.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Structure describing the format */
-typedef struct BinDesc BinDesc;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-BinDesc* NewBinDesc (void);
-/* Create a new binary format descriptor */
-
-void FreeBinDesc (BinDesc* D);
-/* Free a binary format descriptor */
-
-void BinWriteTarget (BinDesc* D, File* F);
-/* Write a binary output file */
-
-
-
-/* End of bin.h */
-
-#endif
diff --git a/src/ld65/binfmt.c b/src/ld65/binfmt.c
deleted file mode 100644 (file)
index a510f94..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 binfmt.c                                  */
-/*                                                                           */
-/*               Binary format definitions for the ld65 linker               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1999     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "target.h"
-
-/* ld65 */
-#include "error.h"
-#include "binfmt.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Default format (depends on target system) */
-unsigned char DefaultBinFmt     = BINFMT_BINARY;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int RelocatableBinFmt (unsigned Format)
-/* Return true if this is a relocatable format, return false otherwise */
-{
-    int Reloc = 0;
-
-    /* Resolve the default format */
-    if (Format == BINFMT_DEFAULT) {
-        Format = DefaultBinFmt;
-    }
-
-    /* Check the type */
-    switch (Format) {
-
-        case BINFMT_BINARY:
-            Reloc = 0;
-            break;
-
-        case BINFMT_O65:
-            Reloc = 1;
-            break;
-
-        default:
-            Internal ("Invalid format specifier: %u", Format);
-
-    }
-
-    /* Return the flag */
-    return Reloc;
-}
diff --git a/src/ld65/binfmt.h b/src/ld65/binfmt.h
deleted file mode 100644 (file)
index 831e46d..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 binfmt.h                                  */
-/*                                                                           */
-/*               Binary format definitions for the ld65 linker               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1999     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef BINFMT_H
-#define BINFMT_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Default format (depends on target system) */
-extern unsigned char DefaultBinFmt;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-int RelocatableBinFmt (unsigned Format);
-/* Return true if this is a relocatable format, return false otherwise */
-
-
-
-/* End of binfmt.h */
-
-#endif
diff --git a/src/ld65/cfgexpr.c b/src/ld65/cfgexpr.c
deleted file mode 100644 (file)
index a6c9124..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 cfgexpr.c                                 */
-/*                                                                           */
-/*          Simple expressions for use with in configuration file            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2005-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "addrsize.h"
-#include "strbuf.h"
-
-/* ld65 */
-#include "cfgexpr.h"
-#include "error.h"
-#include "exports.h"
-#include "expr.h"
-#include "lineinfo.h"
-#include "scanner.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static ExprNode* Factor (void)
-/* Read and return a factor */
-{
-    ExprNode* N = 0;            /* Initialize to avoid compiler warnings */
-    Export*   E;
-    unsigned  Name;
-
-
-    switch (CfgTok) {
-
-        case CFGTOK_IDENT:
-            /* Get the name as an id */
-            Name = GetStrBufId (&CfgSVal);
-
-            /* Check if we know the symbol already */
-            E = FindExport (Name);
-            if (E != 0 && IsConstExport (E)) {
-                N = LiteralExpr (GetExportVal (E), 0);
-            } else {
-                N = NewExprNode (0, EXPR_SYMBOL);
-                N->V.Imp = InsertImport (GenImport (Name, ADDR_SIZE_ABS));
-                CollAppend (&N->V.Imp->RefLines, GenLineInfo (&CfgErrorPos));
-            }
-
-            /* Skip the symbol name */
-            CfgNextTok ();
-            break;
-
-        case CFGTOK_INTCON:
-            /* An integer constant */
-            N = LiteralExpr (CfgIVal, 0);
-            CfgNextTok ();
-            break;
-
-        case CFGTOK_PLUS:
-            /* Unary plus */
-            CfgNextTok ();
-            N = Factor ();
-            break;
-
-        case CFGTOK_MINUS:
-            /* Unary minus */
-            CfgNextTok ();
-            N = NewExprNode (0, EXPR_UNARY_MINUS);
-            N->Left = Factor ();
-            break;
-
-        case CFGTOK_LPAR:
-            /* Left parenthesis */
-            CfgNextTok ();
-            N = CfgExpr ();
-            CfgConsume (CFGTOK_RPAR, "')' expected");
-            break;
-
-        default:
-            CfgError (&CfgErrorPos, "Invalid expression: %d", CfgTok);
-            break;
-    }
-
-    /* Return the new expression node */
-    return N;
-}
-
-
-
-static ExprNode* Term (void)
-/* Multiplicative operators: * and / */
-{
-    /* Read left hand side */
-    ExprNode* Root = Factor ();
-
-    /* Handle multiplicative operators */
-    while (CfgTok == CFGTOK_MUL || CfgTok == CFGTOK_DIV) {
-
-        ExprNode* Left;
-        ExprNode* Right;
-        unsigned char Op;
-
-        /* Remember the token, then skip it */
-        cfgtok_t Tok = CfgTok;
-        CfgNextTok ();
-
-        /* Move root to left side, then read right side */
-        Left = Root;
-        Right = Factor ();
-
-        /* Handle the operation */
-        switch (Tok) {
-            case CFGTOK_MUL:    Op = EXPR_MUL;  break;
-            case CFGTOK_DIV:    Op = EXPR_DIV;  break;
-            default:            Internal ("Unhandled token in Term: %d", Tok);
-        }
-        Root = NewExprNode (0, Op);
-        Root->Left = Left;
-        Root->Right = Right;
-    }
-
-    /* Return the expression tree we've created */
-    return Root;
-}
-
-
-
-static ExprNode* SimpleExpr (void)
-/* Additive operators: + and - */
-{
-    /* Read left hand side */
-    ExprNode* Root = Term ();
-
-    /* Handle additive operators */
-    while (CfgTok == CFGTOK_PLUS || CfgTok == CFGTOK_MINUS) {
-
-        ExprNode* Left;
-        ExprNode* Right;
-        unsigned char Op;
-
-        /* Remember the token, then skip it */
-        cfgtok_t Tok = CfgTok;
-        CfgNextTok ();
-
-        /* Move root to left side, then read right side */
-        Left = Root;
-        Right = Term ();
-
-        /* Handle the operation */
-        switch (Tok) {
-            case CFGTOK_PLUS:   Op = EXPR_PLUS;         break;
-            case CFGTOK_MINUS:  Op = EXPR_MINUS;        break;
-            default:            Internal ("Unhandled token in SimpleExpr: %d", Tok);
-        }
-        Root = NewExprNode (0, Op);
-        Root->Left = Left;
-        Root->Right = Right;
-    }
-
-    /* Return the expression tree we've created */
-    return Root;
-}
-
-
-
-ExprNode* CfgExpr (void)
-/* Full expression */
-{
-    return SimpleExpr ();
-}
-
-
-
-long CfgConstExpr (void)
-/* Read an integer expression, make sure its constant and return its value */
-{
-    long Val;
-
-    /* Parse the expression */
-    ExprNode* Expr = CfgExpr ();
-
-    /* Check that it's const */
-    if (!IsConstExpr (Expr)) {
-        CfgError (&CfgErrorPos, "Constant expression expected");
-    }
-
-    /* Get the value */
-    Val = GetExprVal (Expr);
-
-    /* Cleanup E */
-    FreeExpr (Expr);
-
-    /* Return the value */
-    return Val;
-}
-
-
-
-long CfgCheckedConstExpr (long Min, long Max)
-/* Read an expression, make sure it's an int and in range, then return its
-** value.
-*/
-{
-    /* Get the value */
-    long Val = CfgConstExpr ();
-
-    /* Check the range */
-    if (Val < Min || Val > Max) {
-        CfgError (&CfgErrorPos, "Range error");
-    }
-
-    /* Return the value */
-    return Val;
-}
diff --git a/src/ld65/cfgexpr.h b/src/ld65/cfgexpr.h
deleted file mode 100644 (file)
index 4ec00c0..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 cfgexpr.h                                 */
-/*                                                                           */
-/*          Simple expressions for use with in configuration file            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2005-2010, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef CFGEXPR_H
-#define CFGEXPR_H
-
-
-
-/* common */
-#include "exprdefs.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-ExprNode* CfgExpr (void);
-/* Read an integer expression and return its value */
-
-long CfgConstExpr (void);
-/* Read an integer expression, make sure its constant and return its value */
-
-long CfgCheckedConstExpr (long Min, long Max);
-/* Read an expression, make sure it's an int and in range, then return its
-** value.
-*/
-
-
-
-/* End of cfgexpr.h */
-
-#endif
diff --git a/src/ld65/condes.c b/src/ld65/condes.c
deleted file mode 100644 (file)
index d8c3782..0000000
+++ /dev/null
@@ -1,391 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 condes.c                                  */
-/*                                                                           */
-/*                   Module constructor/destructor support                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "addrsize.h"
-#include "check.h"
-#include "coll.h"
-#include "filepos.h"
-#include "fragdefs.h"
-#include "xmalloc.h"
-
-/* ld65 */
-#include "condes.h"
-#include "exports.h"
-#include "fragment.h"
-#include "segments.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Struct describing one condes type */
-typedef struct ConDesDesc ConDesDesc;
-struct ConDesDesc {
-    Collection          ExpList;        /* List of exported symbols */
-    unsigned            SegName;        /* Name of segment the table is in */
-    unsigned            Label;          /* Name of table label */
-    unsigned            CountSym;       /* Name of symbol for entry count */
-    unsigned char       Order;          /* Table order (increasing/decreasing) */
-    ConDesImport        Import;         /* Forced import if any */
-};
-
-/* Array for all types */
-static ConDesDesc ConDes[CD_TYPE_COUNT] = {
-    {
-        STATIC_COLLECTION_INITIALIZER,
-        INVALID_STRING_ID,
-        INVALID_STRING_ID,
-        INVALID_STRING_ID,
-        cdIncreasing,
-        { INVALID_STRING_ID, STATIC_FILEPOS_INITIALIZER, ADDR_SIZE_DEFAULT },
-    },{
-        STATIC_COLLECTION_INITIALIZER,
-        INVALID_STRING_ID,
-        INVALID_STRING_ID,
-        INVALID_STRING_ID,
-        cdIncreasing,
-        { INVALID_STRING_ID, STATIC_FILEPOS_INITIALIZER, ADDR_SIZE_DEFAULT },
-    },{
-        STATIC_COLLECTION_INITIALIZER,
-        INVALID_STRING_ID,
-        INVALID_STRING_ID,
-        INVALID_STRING_ID,
-        cdIncreasing,
-        { INVALID_STRING_ID, STATIC_FILEPOS_INITIALIZER, ADDR_SIZE_DEFAULT },
-    },{
-        STATIC_COLLECTION_INITIALIZER,
-        INVALID_STRING_ID,
-        INVALID_STRING_ID,
-        INVALID_STRING_ID,
-        cdIncreasing,
-        { INVALID_STRING_ID, STATIC_FILEPOS_INITIALIZER, ADDR_SIZE_DEFAULT },
-    },{
-        STATIC_COLLECTION_INITIALIZER,
-        INVALID_STRING_ID,
-        INVALID_STRING_ID,
-        INVALID_STRING_ID,
-        cdIncreasing,
-        { INVALID_STRING_ID, STATIC_FILEPOS_INITIALIZER, ADDR_SIZE_DEFAULT },
-    },{
-        STATIC_COLLECTION_INITIALIZER,
-        INVALID_STRING_ID,
-        INVALID_STRING_ID,
-        INVALID_STRING_ID,
-        cdIncreasing,
-        { INVALID_STRING_ID, STATIC_FILEPOS_INITIALIZER, ADDR_SIZE_DEFAULT },
-    },{
-        STATIC_COLLECTION_INITIALIZER,
-        INVALID_STRING_ID,
-        INVALID_STRING_ID,
-        INVALID_STRING_ID,
-        cdIncreasing,
-        { INVALID_STRING_ID, STATIC_FILEPOS_INITIALIZER, ADDR_SIZE_DEFAULT },
-    },
-};
-
-
-
-/*****************************************************************************/
-/*           Internally used function to create the condes tables            */
-/*****************************************************************************/
-
-
-
-static int ConDesCompare (void* Data, const void* E1, const void* E2)
-/* Compare function to sort the exports */
-{
-    int Cmp;
-
-    /* Data is actually a pointer to a ConDesDesc from the table, E1 and
-    ** E2 are exports from the collection. Get the condes type and cast
-    ** the void pointers to object pointers.
-    */
-    ConDesDesc* CD = ((ConDesDesc*) Data);
-    int Type = CD - ConDes;
-    const Export* Exp1 = (const Export*) E1;
-    const Export* Exp2 = (const Export*) E2;
-
-    /* Get the priorities of the two exports */
-    unsigned Prio1 = Exp1->ConDes[Type];
-    unsigned Prio2 = Exp2->ConDes[Type];
-
-    /* Compare the priorities for this condes type */
-    if (Prio1 < Prio2) {
-        Cmp = -1;
-    } else if (Prio1 > Prio2) {
-        Cmp = 1;
-    } else {
-        /* Use the name in this case */
-        Cmp = SB_Compare (GetStrBuf (Exp1->Name), GetStrBuf (Exp2->Name));
-    }
-
-    /* Reverse the result for decreasing order */
-    if (CD->Order == cdIncreasing) {
-        return Cmp;
-    } else {
-        return -Cmp;
-    }
-}
-
-
-
-static void ConDesCreateOne (ConDesDesc* CD)
-/* Create one table if requested */
-{
-    Segment*    Seg;            /* Segment for table */
-    Section*    Sec;            /* Section for table */
-    unsigned    Count;          /* Number of exports */
-    unsigned    I;
-
-    /* Check if this table has a segment and table label defined. If not,
-    ** creation was not requested in the config file - ignore it.
-    */
-    if (CD->SegName == INVALID_STRING_ID || CD->Label == INVALID_STRING_ID) {
-        return;
-    }
-
-    /* Check if there is an import for the table label. If not, there is no
-    ** reference to the table and we would just waste memory creating the
-    ** table.
-    */
-    if (!IsUnresolved (CD->Label)) {
-        return;
-    }
-
-    /* Sort the collection of exports according to priority */
-    CollSort (&CD->ExpList, ConDesCompare, CD);
-
-    /* Get the segment for the table, create it if needed */
-    Seg = GetSegment (CD->SegName, ADDR_SIZE_ABS, 0);
-
-    /* Create a new section for the table */
-    Sec = NewSection (Seg, 1, ADDR_SIZE_ABS);
-
-    /* Walk over the exports and create a fragment for each one. We will use
-    ** the exported expression without copying it, since it's cheap and there
-    ** is currently no place where it gets changed (hope this will not hunt
-    ** me later...).
-    */
-    Count = CollCount (&CD->ExpList);
-    for (I = 0; I < Count; ++I) {
-
-        /* Get the export */
-        Export* E = CollAt (&CD->ExpList, I);
-
-        /* Create the fragment */
-        Fragment* F = NewFragment (FRAG_EXPR, 2, Sec);
-
-        /* Set the expression pointer */
-        F->Expr = E->Expr;
-    }
-
-    /* Define the table start as an export, offset into section is zero
-    ** (the section only contains the table).
-    */
-    CreateSectionExport (CD->Label, Sec, 0);
-
-    /* If we have a CountSym name given AND if it is referenced, define it
-    ** with the number of elements in the table.
-    */
-    if (CD->CountSym) {
-        CreateConstExport (CD->CountSym, Count);
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void ConDesAddExport (struct Export* E)
-/* Add the given export to the list of constructors/destructor */
-{
-    unsigned Type;
-
-    /* Insert the export into all tables for which declarations exist */
-    for (Type = 0; Type < CD_TYPE_COUNT; ++Type) {
-        unsigned Prio = E->ConDes[Type];
-        if (Prio != CD_PRIO_NONE) {
-            CollAppend (&ConDes[Type].ExpList, E);
-        }
-    }
-}
-
-
-
-void ConDesSetSegName (unsigned Type, unsigned SegName)
-/* Set the segment name where the table should go */
-{
-    /* Check the parameters */
-    PRECONDITION (Type <= CD_TYPE_MAX && SegName != 0);
-
-    /* Setting the segment name twice is bad */
-    CHECK (ConDes[Type].SegName == INVALID_STRING_ID);
-
-    /* Set the name */
-    ConDes[Type].SegName = SegName;
-}
-
-
-
-const ConDesImport* ConDesGetImport (unsigned Type)
-/* Get the forced import for the given ConDes type. Returns NULL if there is
-** no forced import for this type.
-*/
-{
-    const ConDesImport* Import;
-
-    /* Check the parameters */
-    PRECONDITION (Type <= CD_TYPE_MAX);
-
-    /* Return the import */    
-    Import = &ConDes[Type].Import;
-    return (Import->Name != INVALID_STRING_ID)? Import : 0;
-}
-
-
-
-void ConDesSetImport (unsigned Type, const ConDesImport* Import)
-/* Set the forced import for the given ConDes type */
-{
-    /* Check the parameters */
-    PRECONDITION (Type <= CD_TYPE_MAX && Import != 0);
-
-    /* Setting the import twice is bad */
-    CHECK (ConDes[Type].Import.Name == INVALID_STRING_ID);
-
-    /* Set the import and its position */
-    ConDes[Type].Import = *Import;
-}
-
-
-
-void ConDesSetLabel (unsigned Type, unsigned Name)
-/* Set the label for the given ConDes type */
-{
-    /* Check the parameters */
-    PRECONDITION (Type <= CD_TYPE_MAX && Name != 0);
-
-    /* Setting the label twice is bad */
-    CHECK (ConDes[Type].Label == INVALID_STRING_ID);
-
-    /* Set the name */
-    ConDes[Type].Label = Name;
-}
-
-
-
-void ConDesSetCountSym (unsigned Type, unsigned Name)
-/* Set the name for the given ConDes count symbol */
-{
-    /* Check the parameters */
-    PRECONDITION (Type <= CD_TYPE_MAX && Name != 0);
-
-    /* Setting the symbol twice is bad */
-    CHECK (ConDes[Type].CountSym == INVALID_STRING_ID);
-
-    /* Set the name */
-    ConDes[Type].CountSym = Name;
-}
-
-
-
-void ConDesSetOrder (unsigned Type, ConDesOrder Order)
-/* Set the sorting oder for the given ConDes table */
-{
-    /* Check the parameters */
-    PRECONDITION (Type <= CD_TYPE_MAX);
-
-    /* Set the order */
-    ConDes[Type].Order = Order;
-}
-
-
-
-int ConDesHasSegName (unsigned Type)
-/* Return true if a segment name is already defined for this ConDes type */
-{
-    /* Check the parameters */
-    PRECONDITION (Type <= CD_TYPE_MAX);
-
-    return (ConDes[Type].SegName != INVALID_STRING_ID);
-}
-
-
-
-int ConDesHasLabel (unsigned Type)
-/* Return true if a label is already defined for this ConDes type */
-{
-    /* Check the parameters */
-    PRECONDITION (Type <= CD_TYPE_MAX);
-
-    return (ConDes[Type].Label != INVALID_STRING_ID);
-}
-
-
-
-void ConDesCreate (void)
-/* Create the condes tables if requested */
-{
-    unsigned Type;
-
-    /* Walk over the descriptor array and create a table for each entry */
-    for (Type = 0; Type < CD_TYPE_COUNT; ++Type) {
-        ConDesCreateOne (ConDes + Type);
-    }
-}
-
-
-
-void ConDesDump (void)
-/* Dump ConDes data to stdout for debugging */
-{
-    unsigned Type;
-    for (Type = 0; Type < CD_TYPE_COUNT; ++Type) {
-        Collection* ExpList = &ConDes[Type].ExpList;
-        printf ("CONDES(%u): %u symbols\n", Type, CollCount (ExpList));
-    }
-}
diff --git a/src/ld65/condes.h b/src/ld65/condes.h
deleted file mode 100644 (file)
index 6df8361..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 condes.h                                  */
-/*                                                                           */
-/*                   Module constructor/destructor support                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef CONDES_H
-#define CONDES_H
-
-
-
-/* common */
-#include "filepos.h"
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-struct Export;
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Order of the tables */
-typedef enum {
-    cdIncreasing,               /* Increasing priority - default */
-    cdDecreasing                /* Decreasing priority */
-} ConDesOrder;
-
-/* Data for a forced condes import */
-typedef struct ConDesImport ConDesImport;
-struct ConDesImport {
-    unsigned    Name;           /* Name of the import */
-    FilePos     Pos;            /* Position of import in the config file */
-    unsigned    AddrSize;       /* Address size of the symbol */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void ConDesAddExport (struct Export* E);
-/* Add the given export to the list of constructors/destructor */
-
-void ConDesSetSegName (unsigned Type, unsigned SegName);
-/* Set the segment name where the table should go */
-
-const ConDesImport* ConDesGetImport (unsigned Type);
-/* Get the forced import for the given ConDes type. Returns NULL if there is
-** no forced import for this type.
-*/
-
-void ConDesSetImport (unsigned Type, const ConDesImport* Import);
-/* Set the forced import for the given ConDes type */
-
-void ConDesSetLabel (unsigned Type, unsigned Name);
-/* Set the label for the given ConDes type */
-
-void ConDesSetCountSym (unsigned Type, unsigned Name);
-/* Set the name for the given ConDes count symbol */
-
-void ConDesSetOrder (unsigned Type, ConDesOrder Order);
-/* Set the sorting oder for the given ConDes table */
-
-int ConDesHasSegName (unsigned Type);
-/* Return true if a segment name is already defined for this ConDes type */
-
-int ConDesHasLabel (unsigned Type);
-/* Return true if a label is already defined for this ConDes type */
-
-void ConDesCreate (void);
-/* Create the condes tables if requested */
-
-void ConDesDump (void);
-/* Dump ConDes data to stdout for debugging */
-
-
-
-/* End of condes.h */
-
-#endif
diff --git a/src/ld65/config.c b/src/ld65/config.c
deleted file mode 100644 (file)
index 46e9a48..0000000
+++ /dev/null
@@ -1,2082 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 config.c                                  */
-/*                                                                           */
-/*               Target configuration file for the ld65 linker               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (c) 1998-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/* With contributions from:                                                  */
-/*                                                                           */
-/*      - "David M. Lloyd" <david.lloyd@redhat.com>                          */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "addrsize.h"
-#include "bitops.h"
-#include "check.h"
-#include "print.h"
-#include "segdefs.h"
-#include "target.h"
-#include "xmalloc.h"
-#include "xsprintf.h"
-
-/* ld65 */
-#include "alignment.h"
-#include "bin.h"
-#include "binfmt.h"
-#include "cfgexpr.h"
-#include "condes.h"
-#include "config.h"
-#include "error.h"
-#include "exports.h"
-#include "expr.h"
-#include "global.h"
-#include "memarea.h"
-#include "o65.h"
-#include "objdata.h"
-#include "scanner.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Remember which sections we had encountered */
-static enum {
-    SE_NONE     = 0x0000,
-    SE_MEMORY   = 0x0001,
-    SE_SEGMENTS = 0x0002,
-    SE_FEATURES = 0x0004,
-    SE_FILES    = 0x0008,
-    SE_FORMATS  = 0x0010,
-    SE_SYMBOLS  = 0x0020
-} SectionsEncountered = SE_NONE;
-
-
-
-/* File list */
-static Collection       FileList = STATIC_COLLECTION_INITIALIZER;
-
-/* Memory list */
-static Collection       MemoryAreas = STATIC_COLLECTION_INITIALIZER;
-
-/* Memory attributes */
-#define MA_START        0x0001
-#define MA_SIZE         0x0002
-#define MA_TYPE         0x0004
-#define MA_FILE         0x0008
-#define MA_DEFINE       0x0010
-#define MA_FILL         0x0020
-#define MA_FILLVAL      0x0040
-#define MA_BANK         0x0080
-
-/* Segment list */
-static Collection       SegDescList = STATIC_COLLECTION_INITIALIZER;
-
-/* Segment attributes */
-#define SA_TYPE         0x0001
-#define SA_LOAD         0x0002
-#define SA_RUN          0x0004
-#define SA_ALIGN        0x0008
-#define SA_ALIGN_LOAD   0x0010
-#define SA_DEFINE       0x0020
-#define SA_OFFSET       0x0040
-#define SA_START        0x0080
-#define SA_OPTIONAL     0x0100
-#define SA_FILLVAL      0x0200
-
-/* Symbol types used in the CfgSymbol structure */
-typedef enum {
-    CfgSymExport,               /* Not really used in struct CfgSymbol */
-    CfgSymImport,               /* Dito */
-    CfgSymWeak,                 /* Like export but weak */
-    CfgSymO65Export,            /* An o65 export */
-    CfgSymO65Import,            /* An o65 import */
-} CfgSymType;
-
-/* Symbol structure. It is used for o65 imports and exports, but also for
-** symbols from the SYMBOLS sections (symbols defined in the config file or
-** forced imports).
-*/
-typedef struct CfgSymbol CfgSymbol;
-struct CfgSymbol {
-    CfgSymType  Type;           /* Type of symbol */
-    LineInfo*   LI;             /* Config file position */
-    unsigned    Name;           /* Symbol name */
-    ExprNode*   Value;          /* Symbol value if any */
-    unsigned    AddrSize;       /* Address size of symbol */
-};
-
-/* Collections with symbols */
-static Collection       CfgSymbols = STATIC_COLLECTION_INITIALIZER;
-
-/* Descriptor holding information about the binary formats */
-static BinDesc* BinFmtDesc      = 0;
-static O65Desc* O65FmtDesc      = 0;
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-static File* NewFile (unsigned Name);
-/* Create a new file descriptor and insert it into the list */
-
-
-
-/*****************************************************************************/
-/*                              List management                              */
-/*****************************************************************************/
-
-
-
-static File* FindFile (unsigned Name)
-/* Find a file with a given name. */
-{
-    unsigned I;
-    for (I = 0; I < CollCount (&FileList); ++I) {
-        File* F = CollAtUnchecked (&FileList, I);
-        if (F->Name == Name) {
-            return F;
-        }
-    }
-    return 0;
-}
-
-
-
-static File* GetFile (unsigned Name)
-/* Get a file entry with the given name. Create a new one if needed. */
-{
-    File* F = FindFile (Name);
-    if (F == 0) {
-        /* Create a new one */
-        F = NewFile (Name);
-    }
-    return F;
-}
-
-
-
-static void FileInsert (File* F, MemoryArea* M)
-/* Insert the memory area into the files list */
-{
-    M->F = F;
-    CollAppend (&F->MemoryAreas, M);
-}
-
-
-
-static MemoryArea* CfgFindMemory (unsigned Name)
-/* Find the memory are with the given name. Return NULL if not found */
-{
-    unsigned I;
-    for (I = 0; I < CollCount (&MemoryAreas); ++I) {
-        MemoryArea* M = CollAtUnchecked (&MemoryAreas, I);
-        if (M->Name == Name) {
-            return M;
-        }
-    }
-    return 0;
-}
-
-
-
-static MemoryArea* CfgGetMemory (unsigned Name)
-/* Find the memory are with the given name. Print an error on an invalid name */
-{
-    MemoryArea* M = CfgFindMemory (Name);
-    if (M == 0) {
-        CfgError (&CfgErrorPos, "Invalid memory area `%s'", GetString (Name));
-    }
-    return M;
-}
-
-
-
-static SegDesc* CfgFindSegDesc (unsigned Name)
-/* Find the segment descriptor with the given name, return NULL if not found. */
-{
-    unsigned I;
-    for (I = 0; I < CollCount (&SegDescList); ++I) {
-        SegDesc* S = CollAtUnchecked (&SegDescList, I);
-        if (S->Name == Name) {
-            /* Found */
-            return S;
-        }
-    }
-
-    /* Not found */
-    return 0;
-}
-
-
-
-static void MemoryInsert (MemoryArea* M, SegDesc* S)
-/* Insert the segment descriptor into the memory area list */
-{
-    /* Insert the segment into the segment list of the memory area */
-    CollAppend (&M->SegList, S);
-}
-
-
-
-/*****************************************************************************/
-/*                         Constructors/Destructors                          */
-/*****************************************************************************/
-
-
-
-static CfgSymbol* NewCfgSymbol (CfgSymType Type, unsigned Name)
-/* Create a new CfgSymbol structure with the given type and name. The
-** current config file position is recorded in the returned struct. The
-** created struct is inserted into the CfgSymbols collection and returned.
-*/
-{
-    /* Allocate memory */
-    CfgSymbol* Sym = xmalloc (sizeof (CfgSymbol));
-
-    /* Initialize the fields */
-    Sym->Type     = Type;
-    Sym->LI       = GenLineInfo (&CfgErrorPos);
-    Sym->Name     = Name;
-    Sym->Value    = 0;
-    Sym->AddrSize = ADDR_SIZE_INVALID;
-
-    /* Insert the symbol into the collection */
-    CollAppend (&CfgSymbols, Sym);
-
-    /* Return the initialized struct */
-    return Sym;
-}
-
-
-
-static File* NewFile (unsigned Name)
-/* Create a new file descriptor and insert it into the list */
-{
-    /* Allocate memory */
-    File* F = xmalloc (sizeof (File));
-
-    /* Initialize the fields */
-    F->Name    = Name;
-    F->Flags   = 0;
-    F->Format  = BINFMT_DEFAULT;
-    F->Size    = 0;
-    InitCollection (&F->MemoryAreas);
-
-    /* Insert the struct into the list */
-    CollAppend (&FileList, F);
-
-    /* ...and return it */
-    return F;
-}
-
-
-
-static MemoryArea* CreateMemoryArea (const FilePos* Pos, unsigned Name)
-/* Create a new memory area and insert it into the list */
-{
-    /* Check for duplicate names */
-    MemoryArea* M = CfgFindMemory (Name);
-    if (M) {
-        CfgError (&CfgErrorPos,
-                  "Memory area `%s' defined twice",
-                  GetString (Name));
-    }
-
-    /* Create a new memory area */
-    M = NewMemoryArea (Pos, Name);
-
-    /* Insert the struct into the list ... */
-    CollAppend (&MemoryAreas, M);
-
-    /* ...and return it */
-    return M;
-}
-
-
-
-static SegDesc* NewSegDesc (unsigned Name)
-/* Create a segment descriptor and insert it into the list */
-{
-
-    /* Check for duplicate names */
-    SegDesc* S = CfgFindSegDesc (Name);
-    if (S) {
-        CfgError (&CfgErrorPos, "Segment `%s' defined twice", GetString (Name));
-    }
-
-    /* Allocate memory */
-    S = xmalloc (sizeof (SegDesc));
-
-    /* Initialize the fields */
-    S->Name          = Name;
-    S->LI            = GenLineInfo (&CfgErrorPos);
-    S->Seg           = 0;
-    S->Attr          = 0;
-    S->Flags         = 0;
-    S->FillVal       = 0;
-    S->RunAlignment  = 1;
-    S->LoadAlignment = 1;
-
-    /* Insert the struct into the list ... */
-    CollAppend (&SegDescList, S);
-
-    /* ...and return it */
-    return S;
-}
-
-
-
-static void FreeSegDesc (SegDesc* S)
-/* Free a segment descriptor */
-{
-    FreeLineInfo (S->LI);
-    xfree (S);
-}
-
-
-
-/*****************************************************************************/
-/*                            Config file parsing                            */
-/*****************************************************************************/
-
-
-
-static void FlagAttr (unsigned* Flags, unsigned Mask, const char* Name)
-/* Check if the item is already defined. Print an error if so. If not, set
-** the marker that we have a definition now.
-*/
-{
-    if (*Flags & Mask) {
-        CfgError (&CfgErrorPos, "%s is already defined", Name);
-    }
-    *Flags |= Mask;
-}
-
-
-
-static void AttrCheck (unsigned Attr, unsigned Mask, const char* Name)
-/* Check that a mandatory attribute was given */
-{
-    if ((Attr & Mask) == 0) {
-        CfgError (&CfgErrorPos, "%s attribute is missing", Name);
-    }
-}
-
-
-
-static void ParseMemory (void)
-/* Parse a MEMORY section */
-{
-    static const IdentTok Attributes [] = {
-        {   "BANK",     CFGTOK_BANK     },
-        {   "DEFINE",   CFGTOK_DEFINE   },
-        {   "FILE",     CFGTOK_FILE     },
-        {   "FILL",     CFGTOK_FILL     },
-        {   "FILLVAL",  CFGTOK_FILLVAL  },
-        {   "SIZE",     CFGTOK_SIZE     },
-        {   "START",    CFGTOK_START    },
-        {   "TYPE",     CFGTOK_TYPE     },
-    };
-    static const IdentTok Types [] = {
-        {   "RO",       CFGTOK_RO       },
-        {   "RW",       CFGTOK_RW       },
-    };
-
-    while (CfgTok == CFGTOK_IDENT) {
-
-        /* Create a new entry on the heap */
-        MemoryArea* M = CreateMemoryArea (&CfgErrorPos, GetStrBufId (&CfgSVal));
-
-        /* Skip the name and the following colon */
-        CfgNextTok ();
-        CfgConsumeColon ();
-
-        /* Read the attributes */
-        while (CfgTok == CFGTOK_IDENT) {
-
-            /* Map the identifier to a token */
-            cfgtok_t AttrTok;
-            CfgSpecialToken (Attributes, ENTRY_COUNT (Attributes), "Attribute");
-            AttrTok = CfgTok;
-
-            /* An optional assignment follows */
-            CfgNextTok ();
-            CfgOptionalAssign ();
-
-            /* Check which attribute was given */
-            switch (AttrTok) {
-
-                case CFGTOK_BANK:
-                    FlagAttr (&M->Attr, MA_BANK, "BANK");
-                    M->BankExpr = CfgExpr ();
-                    break;
-
-                case CFGTOK_DEFINE:
-                    FlagAttr (&M->Attr, MA_DEFINE, "DEFINE");
-                    /* Map the token to a boolean */
-                    CfgBoolToken ();
-                    if (CfgTok == CFGTOK_TRUE) {
-                        M->Flags |= MF_DEFINE;
-                    }
-                    CfgNextTok ();
-                    break;
-
-                case CFGTOK_FILE:
-                    FlagAttr (&M->Attr, MA_FILE, "FILE");
-                    CfgAssureStr ();
-                    /* Get the file entry and insert the memory area */
-                    FileInsert (GetFile (GetStrBufId (&CfgSVal)), M);
-                    CfgNextTok ();
-                    break;
-
-                case CFGTOK_FILL:
-                    FlagAttr (&M->Attr, MA_FILL, "FILL");
-                    /* Map the token to a boolean */
-                    CfgBoolToken ();
-                    if (CfgTok == CFGTOK_TRUE) {
-                        M->Flags |= MF_FILL;
-                    }
-                    CfgNextTok ();
-                    break;
-
-                case CFGTOK_FILLVAL:
-                    FlagAttr (&M->Attr, MA_FILLVAL, "FILLVAL");
-                    M->FillVal = (unsigned char) CfgCheckedConstExpr (0, 0xFF);
-                    break;
-
-                case CFGTOK_SIZE:
-                    FlagAttr (&M->Attr, MA_SIZE, "SIZE");
-                    M->SizeExpr = CfgExpr ();
-                    break;
-
-                case CFGTOK_START:
-                    FlagAttr (&M->Attr, MA_START, "START");
-                    M->StartExpr = CfgExpr ();
-                    break;
-
-                case CFGTOK_TYPE:
-                    FlagAttr (&M->Attr, MA_TYPE, "TYPE");
-                    CfgSpecialToken (Types, ENTRY_COUNT (Types), "TYPE");
-                    if (CfgTok == CFGTOK_RO) {
-                        M->Flags |= MF_RO;
-                    }
-                    CfgNextTok ();
-                    break;
-
-                default:
-                    FAIL ("Unexpected attribute token");
-
-            }
-
-            /* Skip an optional comma */
-            CfgOptionalComma ();
-        }
-
-        /* Skip the semicolon */
-        CfgConsumeSemi ();
-
-        /* Check for mandatory parameters */
-        AttrCheck (M->Attr, MA_START, "START");
-        AttrCheck (M->Attr, MA_SIZE, "SIZE");
-
-        /* If we don't have a file name for output given, use the default
-        ** file name.
-        */
-        if ((M->Attr & MA_FILE) == 0) {
-            FileInsert (GetFile (GetStringId (OutputName)), M);
-            OutputNameUsed = 1;
-        }
-    }
-
-    /* Remember we had this section */
-    SectionsEncountered |= SE_MEMORY;
-}
-
-
-
-static void ParseFiles (void)
-/* Parse a FILES section */
-{
-    static const IdentTok Attributes [] = {
-        {   "FORMAT",   CFGTOK_FORMAT   },
-    };
-    static const IdentTok Formats [] = {
-        {   "O65",      CFGTOK_O65      },
-        {   "BIN",      CFGTOK_BIN      },
-        {   "BINARY",   CFGTOK_BIN      },
-    };
-
-
-    /* The MEMORY section must preceed the FILES section */
-    if ((SectionsEncountered & SE_MEMORY) == 0) {
-        CfgError (&CfgErrorPos, "MEMORY must precede FILES");
-    }
-
-    /* Parse all files */
-    while (CfgTok != CFGTOK_RCURLY) {
-
-        File* F;
-
-        /* We expect a string value here */
-        CfgAssureStr ();
-
-        /* Search for the file, it must exist */
-        F = FindFile (GetStrBufId (&CfgSVal));
-        if (F == 0) {
-            CfgError (&CfgErrorPos,
-                      "File `%s' not found in MEMORY section",
-                      SB_GetConstBuf (&CfgSVal));
-        }
-
-        /* Skip the token and the following colon */
-        CfgNextTok ();
-        CfgConsumeColon ();
-
-        /* Read the attributes */
-        while (CfgTok == CFGTOK_IDENT) {
-
-            /* Map the identifier to a token */
-            cfgtok_t AttrTok;
-            CfgSpecialToken (Attributes, ENTRY_COUNT (Attributes), "Attribute");
-            AttrTok = CfgTok;
-
-            /* An optional assignment follows */
-            CfgNextTok ();
-            CfgOptionalAssign ();
-
-            /* Check which attribute was given */
-            switch (AttrTok) {
-
-                case CFGTOK_FORMAT:
-                    if (F->Format != BINFMT_DEFAULT) {
-                        /* We've set the format already! */
-                        CfgError (&CfgErrorPos,
-                                  "Cannot set a file format twice");
-                    }
-                    /* Read the format token */
-                    CfgSpecialToken (Formats, ENTRY_COUNT (Formats), "Format");
-                    switch (CfgTok) {
-
-                        case CFGTOK_BIN:
-                            F->Format = BINFMT_BINARY;
-                            break;
-
-                        case CFGTOK_O65:
-                            F->Format = BINFMT_O65;
-                            break;
-
-                        default:
-                            Error ("Unexpected format token");
-                    }
-                    break;
-
-                default:
-                    FAIL ("Unexpected attribute token");
-
-            }
-
-            /* Skip the attribute value and an optional comma */
-            CfgNextTok ();
-            CfgOptionalComma ();
-        }
-
-        /* Skip the semicolon */
-        CfgConsumeSemi ();
-
-    }
-
-    /* Remember we had this section */
-    SectionsEncountered |= SE_FILES;
-}
-
-
-
-static void ParseSegments (void)
-/* Parse a SEGMENTS section */
-{
-    static const IdentTok Attributes [] = {
-        {   "ALIGN",            CFGTOK_ALIGN            },
-        {   "ALIGN_LOAD",       CFGTOK_ALIGN_LOAD       },
-        {   "DEFINE",           CFGTOK_DEFINE           },
-        {   "FILLVAL",          CFGTOK_FILLVAL          },
-        {   "LOAD",             CFGTOK_LOAD             },
-        {   "OFFSET",           CFGTOK_OFFSET           },
-        {   "OPTIONAL",         CFGTOK_OPTIONAL         },
-        {   "RUN",              CFGTOK_RUN              },
-        {   "START",            CFGTOK_START            },
-        {   "TYPE",             CFGTOK_TYPE             },
-    };
-    static const IdentTok Types [] = {
-        {   "RO",               CFGTOK_RO               },
-        {   "RW",               CFGTOK_RW               },
-        {   "BSS",              CFGTOK_BSS              },
-        {   "ZP",               CFGTOK_ZP               },
-    };
-
-    unsigned Count;
-
-    /* The MEMORY section must preceed the SEGMENTS section */
-    if ((SectionsEncountered & SE_MEMORY) == 0) {
-        CfgError (&CfgErrorPos, "MEMORY must precede SEGMENTS");
-    }
-
-    while (CfgTok == CFGTOK_IDENT) {
-
-        SegDesc* S;
-
-        /* Create a new entry on the heap */
-        S = NewSegDesc (GetStrBufId (&CfgSVal));
-
-        /* Skip the name and the following colon */
-        CfgNextTok ();
-        CfgConsumeColon ();
-
-        /* Read the attributes */
-        while (CfgTok == CFGTOK_IDENT) {
-
-            /* Map the identifier to a token */
-            cfgtok_t AttrTok;
-            CfgSpecialToken (Attributes, ENTRY_COUNT (Attributes), "Attribute");
-            AttrTok = CfgTok;
-
-            /* An optional assignment follows */
-            CfgNextTok ();
-            CfgOptionalAssign ();
-
-            /* Check which attribute was given */
-            switch (AttrTok) {
-
-                case CFGTOK_ALIGN:
-                    FlagAttr (&S->Attr, SA_ALIGN, "ALIGN");
-                    S->RunAlignment = (unsigned) CfgCheckedConstExpr (1, MAX_ALIGNMENT);
-                    S->Flags |= SF_ALIGN;
-                    break;
-
-                case CFGTOK_ALIGN_LOAD:
-                    FlagAttr (&S->Attr, SA_ALIGN_LOAD, "ALIGN_LOAD");
-                    S->LoadAlignment = (unsigned) CfgCheckedConstExpr (1, MAX_ALIGNMENT);
-                    S->Flags |= SF_ALIGN_LOAD;
-                    break;
-
-                case CFGTOK_DEFINE:
-                    FlagAttr (&S->Attr, SA_DEFINE, "DEFINE");
-                    /* Map the token to a boolean */
-                    CfgBoolToken ();
-                    if (CfgTok == CFGTOK_TRUE) {
-                        S->Flags |= SF_DEFINE;
-                    }
-                    CfgNextTok ();
-                    break;
-
-                case CFGTOK_FILLVAL:
-                    FlagAttr (&S->Attr, SA_FILLVAL, "FILLVAL");
-                    S->FillVal = (unsigned char) CfgCheckedConstExpr (0, 0xFF);
-                    S->Flags |= SF_FILLVAL;
-                    break;
-
-                case CFGTOK_LOAD:
-                    FlagAttr (&S->Attr, SA_LOAD, "LOAD");
-                    S->Load = CfgGetMemory (GetStrBufId (&CfgSVal));
-                    CfgNextTok ();
-                    break;
-
-                case CFGTOK_OFFSET:
-                    FlagAttr (&S->Attr, SA_OFFSET, "OFFSET");
-                    S->Addr   = CfgCheckedConstExpr (1, 0x1000000);
-                    S->Flags |= SF_OFFSET;
-                    break;
-
-                case CFGTOK_OPTIONAL:
-                    FlagAttr (&S->Attr, SA_OPTIONAL, "OPTIONAL");
-                    CfgBoolToken ();
-                    if (CfgTok == CFGTOK_TRUE) {
-                        S->Flags |= SF_OPTIONAL;
-                    }
-                    CfgNextTok ();
-                    break;
-
-                case CFGTOK_RUN:
-                    FlagAttr (&S->Attr, SA_RUN, "RUN");
-                    S->Run = CfgGetMemory (GetStrBufId (&CfgSVal));
-                    CfgNextTok ();
-                    break;
-
-                case CFGTOK_START:
-                    FlagAttr (&S->Attr, SA_START, "START");
-                    S->Addr   = CfgCheckedConstExpr (1, 0x1000000);
-                    S->Flags |= SF_START;
-                    break;
-
-                case CFGTOK_TYPE:
-                    FlagAttr (&S->Attr, SA_TYPE, "TYPE");
-                    CfgSpecialToken (Types, ENTRY_COUNT (Types), "Type");
-                    switch (CfgTok) {
-                        case CFGTOK_RO:    S->Flags |= SF_RO;               break;
-                        case CFGTOK_RW:    /* Default */                    break;
-                        case CFGTOK_BSS:   S->Flags |= SF_BSS;              break;
-                        case CFGTOK_ZP:    S->Flags |= (SF_BSS | SF_ZP);    break;
-                        default:           Internal ("Unexpected token: %d", CfgTok);
-                    }
-                    CfgNextTok ();
-                    break;
-
-                default:
-                    FAIL ("Unexpected attribute token");
-
-            }
-
-            /* Skip an optional comma */
-            CfgOptionalComma ();
-        }
-
-        /* Check for mandatory parameters */
-        AttrCheck (S->Attr, SA_LOAD, "LOAD");
-
-        /* Set defaults for stuff not given */
-        if ((S->Attr & SA_RUN) == 0) {
-            S->Attr |= SA_RUN;
-            S->Run = S->Load;
-        }
-
-        /* An attribute of ALIGN_LOAD doesn't make sense if there are no
-        ** separate run and load memory areas.
-        */
-        if ((S->Flags & SF_ALIGN_LOAD) != 0 && (S->Load == S->Run)) {
-            CfgWarning (&CfgErrorPos,
-                        "ALIGN_LOAD attribute specified, but no separate "
-                        "LOAD and RUN memory areas assigned");
-            /* Remove the flag */
-            S->Flags &= ~SF_ALIGN_LOAD;
-        }
-
-        /* If the segment is marked as BSS style, it may not have separate
-        ** load and run memory areas, because it's is never written to disk.
-        */
-        if ((S->Flags & SF_BSS) != 0 && (S->Load != S->Run)) {
-            CfgWarning (&CfgErrorPos,
-                        "Segment with type `bss' has both LOAD and RUN "
-                        "memory areas assigned");
-        }
-
-        /* Don't allow read/write data to be put into a readonly area */
-        if ((S->Flags & SF_RO) == 0) {
-            if (S->Run->Flags & MF_RO) {
-                CfgError (&CfgErrorPos,
-                          "Cannot put r/w segment `%s' in r/o memory area `%s'",
-                          GetString (S->Name), GetString (S->Run->Name));
-            }
-        }
-
-        /* Only one of ALIGN, START and OFFSET may be used */
-        Count = ((S->Flags & SF_ALIGN)  != 0) +
-                ((S->Flags & SF_OFFSET) != 0) +
-                ((S->Flags & SF_START)  != 0);
-        if (Count > 1) {
-            CfgError (&CfgErrorPos,
-                      "Only one of ALIGN, START, OFFSET may be used");
-        }
-
-        /* Skip the semicolon */
-        CfgConsumeSemi ();
-    }
-
-    /* Remember we had this section */
-    SectionsEncountered |= SE_SEGMENTS;
-}
-
-
-
-static void ParseO65 (void)
-/* Parse the o65 format section */
-{
-    static const IdentTok Attributes [] = {
-        {   "EXPORT",   CFGTOK_EXPORT           },
-        {   "IMPORT",   CFGTOK_IMPORT           },
-        {   "TYPE",     CFGTOK_TYPE             },
-        {   "OS",       CFGTOK_OS               },
-        {   "ID",       CFGTOK_ID               },
-        {   "VERSION",  CFGTOK_VERSION          },
-    };
-    static const IdentTok Types [] = {
-        {   "SMALL",    CFGTOK_SMALL            },
-        {   "LARGE",    CFGTOK_LARGE            },
-    };
-    static const IdentTok OperatingSystems [] = {
-        {   "LUNIX",    CFGTOK_LUNIX            },
-        {   "OSA65",    CFGTOK_OSA65            },
-        {   "CC65",     CFGTOK_CC65             },
-        {   "OPENCBM",  CFGTOK_OPENCBM          },
-    };
-
-    /* Bitmask to remember the attributes we got already */
-    enum {
-        atNone          = 0x0000,
-        atOS            = 0x0001,
-        atOSVersion     = 0x0002,
-        atType          = 0x0004,
-        atImport        = 0x0008,
-        atExport        = 0x0010,
-        atID            = 0x0020,
-        atVersion       = 0x0040
-    };
-    unsigned AttrFlags = atNone;
-
-    /* Remember the attributes read */
-    unsigned OS = 0;            /* Initialize to keep gcc happy */
-    unsigned Version = 0;
-
-    /* Read the attributes */
-    while (CfgTok == CFGTOK_IDENT) {
-
-        /* Map the identifier to a token */
-        cfgtok_t AttrTok;
-        CfgSpecialToken (Attributes, ENTRY_COUNT (Attributes), "Attribute");
-        AttrTok = CfgTok;
-
-        /* An optional assignment follows */
-        CfgNextTok ();
-        CfgOptionalAssign ();
-
-        /* Check which attribute was given */
-        switch (AttrTok) {
-
-            case CFGTOK_EXPORT:
-                /* Remember we had this token (maybe more than once) */
-                AttrFlags |= atExport;
-                /* We expect an identifier */
-                CfgAssureIdent ();
-                /* Remember it as an export for later */
-                NewCfgSymbol (CfgSymO65Export, GetStrBufId (&CfgSVal));
-                /* Eat the identifier token */
-                CfgNextTok ();
-                break;
-
-            case CFGTOK_IMPORT:
-                /* Remember we had this token (maybe more than once) */
-                AttrFlags |= atImport;
-                /* We expect an identifier */
-                CfgAssureIdent ();
-                /* Remember it as an import for later */
-                NewCfgSymbol (CfgSymO65Import, GetStrBufId (&CfgSVal));
-                /* Eat the identifier token */
-                CfgNextTok ();
-                break;
-
-            case CFGTOK_TYPE:
-                /* Cannot have this attribute twice */
-                FlagAttr (&AttrFlags, atType, "TYPE");
-                /* Get the type of the executable */
-                CfgSpecialToken (Types, ENTRY_COUNT (Types), "Type");
-                switch (CfgTok) {
-
-                    case CFGTOK_SMALL:
-                        O65SetSmallModel (O65FmtDesc);
-                        break;
-
-                    case CFGTOK_LARGE:
-                        O65SetLargeModel (O65FmtDesc);
-                        break;
-
-                    default:
-                        CfgError (&CfgErrorPos, "Unexpected type token");
-                }
-                /* Eat the attribute token */
-                CfgNextTok ();
-                break;
-
-            case CFGTOK_OS:
-                /* Cannot use this attribute twice */
-                FlagAttr (&AttrFlags, atOS, "OS");
-                /* Get the operating system. It may be specified as name or
-                ** as a number in the range 1..255.
-                */
-                if (CfgTok == CFGTOK_INTCON) {
-                    CfgRangeCheck (O65OS_MIN, O65OS_MAX);
-                    OS = (unsigned) CfgIVal;
-                } else {
-                    CfgSpecialToken (OperatingSystems, ENTRY_COUNT (OperatingSystems), "OS type");
-                    switch (CfgTok) {
-                        case CFGTOK_LUNIX:    OS = O65OS_LUNIX;     break;
-                        case CFGTOK_OSA65:    OS = O65OS_OSA65;     break;
-                        case CFGTOK_CC65:     OS = O65OS_CC65;      break;
-                        case CFGTOK_OPENCBM:  OS = O65OS_OPENCBM;   break;
-                        default:              CfgError (&CfgErrorPos, "Unexpected OS token");
-                    }
-                }
-                CfgNextTok ();
-                break;
-
-            case CFGTOK_ID:
-                /* Cannot have this attribute twice */
-                FlagAttr (&AttrFlags, atID, "ID");
-                /* We're expecting a number in the 0..$FFFF range*/
-                ModuleId = (unsigned) CfgCheckedConstExpr (0, 0xFFFF);
-                break;
-
-            case CFGTOK_VERSION:
-                /* Cannot have this attribute twice */
-                FlagAttr (&AttrFlags, atVersion, "VERSION");
-                /* We're expecting a number in byte range */
-                Version = (unsigned) CfgCheckedConstExpr (0, 0xFF);
-                break;
-
-            default:
-                FAIL ("Unexpected attribute token");
-
-        }
-
-        /* Skip an optional comma */
-        CfgOptionalComma ();
-    }
-
-    /* Check if we have all mandatory attributes */
-    AttrCheck (AttrFlags, atOS, "OS");
-
-    /* Check for attributes that may not be combined */
-    if (OS == O65OS_CC65) {
-        if ((AttrFlags & (atImport | atExport)) != 0 && ModuleId < 0x8000) {
-            CfgError (&CfgErrorPos,
-                      "OS type CC65 may not have imports or exports for ids < $8000");
-        }
-    } else {
-        if (AttrFlags & atID) {
-            CfgError (&CfgErrorPos,
-                      "Operating system does not support the ID attribute");
-        }
-    }
-
-    /* Set the O65 operating system to use */
-    O65SetOS (O65FmtDesc, OS, Version, ModuleId);
-}
-
-
-
-static void ParseFormats (void)
-/* Parse a target format section */
-{
-    static const IdentTok Formats [] = {
-        {   "O65",      CFGTOK_O65      },
-        {   "BIN",      CFGTOK_BIN      },
-        {   "BINARY",   CFGTOK_BIN      },
-    };
-
-    while (CfgTok == CFGTOK_IDENT) {
-
-        /* Map the identifier to a token */
-        cfgtok_t FormatTok;
-        CfgSpecialToken (Formats, ENTRY_COUNT (Formats), "Format");
-        FormatTok = CfgTok;
-
-        /* Skip the name and the following colon */
-        CfgNextTok ();
-        CfgConsumeColon ();
-
-        /* Parse the format options */
-        switch (FormatTok) {
-
-            case CFGTOK_O65:
-                ParseO65 ();
-                break;
-
-            case CFGTOK_BIN:
-                /* No attribibutes available */
-                break;
-
-            default:
-                Error ("Unexpected format token");
-        }
-
-        /* Skip the semicolon */
-        CfgConsumeSemi ();
-    }
-
-
-    /* Remember we had this section */
-    SectionsEncountered |= SE_FORMATS;
-}
-
-
-
-static void ParseConDes (void)
-/* Parse the CONDES feature */
-{
-    static const IdentTok Attributes [] = {
-        {   "COUNT",            CFGTOK_COUNT            },
-        {   "IMPORT",           CFGTOK_IMPORT           },
-        {   "LABEL",            CFGTOK_LABEL            },
-        {   "ORDER",            CFGTOK_ORDER            },
-        {   "SEGMENT",          CFGTOK_SEGMENT          },
-        {   "TYPE",             CFGTOK_TYPE             },
-    };
-
-    static const IdentTok Types [] = {
-        {   "CONSTRUCTOR",      CFGTOK_CONSTRUCTOR      },
-        {   "DESTRUCTOR",       CFGTOK_DESTRUCTOR       },
-        {   "INTERRUPTOR",      CFGTOK_INTERRUPTOR      },
-    };
-
-    static const IdentTok Orders [] = {
-        {   "DECREASING",       CFGTOK_DECREASING       },
-        {   "INCREASING",       CFGTOK_INCREASING       },
-    };
-
-    /* Attribute values. */
-    unsigned Count   = INVALID_STRING_ID;
-    unsigned Label   = INVALID_STRING_ID;
-    unsigned SegName = INVALID_STRING_ID;
-    ConDesImport Import;
-    /* Initialize to avoid gcc warnings: */
-    int Type = -1;
-    ConDesOrder Order = cdIncreasing;
-
-    /* Bitmask to remember the attributes we got already */
-    enum {
-        atNone          = 0x0000,
-        atCount         = 0x0001,
-        atImport        = 0x0002,
-        atLabel         = 0x0004,
-        atOrder         = 0x0008,
-        atSegName       = 0x0010,
-        atType          = 0x0020,
-    };
-    unsigned AttrFlags = atNone;
-
-    /* Parse the attributes */
-    while (1) {
-
-        /* Map the identifier to a token */
-        cfgtok_t AttrTok;
-        CfgSpecialToken (Attributes, ENTRY_COUNT (Attributes), "Attribute");
-        AttrTok = CfgTok;
-
-        /* An optional assignment follows */
-        CfgNextTok ();
-        CfgOptionalAssign ();
-
-        /* Check which attribute was given */
-        switch (AttrTok) {
-
-            case CFGTOK_COUNT:
-                /* Don't allow this twice */
-                FlagAttr (&AttrFlags, atCount, "COUNT");
-                /* We expect an identifier */
-                CfgAssureIdent ();
-                /* Remember the value for later */
-                Count = GetStrBufId (&CfgSVal);
-                break;
-
-            case CFGTOK_IMPORT:
-                /* Don't allow this twice */
-                FlagAttr (&AttrFlags, atImport, "IMPORT");
-                /* We expect an identifier */
-                CfgAssureIdent ();
-                /* Remember value and position for later */
-                Import.Name = GetStrBufId (&CfgSVal);
-                Import.Pos = CfgErrorPos;
-                Import.AddrSize = ADDR_SIZE_ABS;
-                break;
-
-            case CFGTOK_LABEL:
-                /* Don't allow this twice */
-                FlagAttr (&AttrFlags, atLabel, "LABEL");
-                /* We expect an identifier */
-                CfgAssureIdent ();
-                /* Remember the value for later */
-                Label = GetStrBufId (&CfgSVal);
-                break;
-
-            case CFGTOK_ORDER:
-                /* Don't allow this twice */
-                FlagAttr (&AttrFlags, atOrder, "ORDER");
-                CfgSpecialToken (Orders, ENTRY_COUNT (Orders), "Order");
-                switch (CfgTok) {
-                    case CFGTOK_DECREASING: Order = cdDecreasing;       break;
-                    case CFGTOK_INCREASING: Order = cdIncreasing;       break;
-                    default: FAIL ("Unexpected order token");
-                }
-                break;
-
-            case CFGTOK_SEGMENT:
-                /* Don't allow this twice */
-                FlagAttr (&AttrFlags, atSegName, "SEGMENT");
-                /* We expect an identifier */
-                CfgAssureIdent ();
-                /* Remember the value for later */
-                SegName = GetStrBufId (&CfgSVal);
-                break;
-
-            case CFGTOK_TYPE:
-                /* Don't allow this twice */
-                FlagAttr (&AttrFlags, atType, "TYPE");
-                /* The type may be given as id or numerical */
-                if (CfgTok == CFGTOK_INTCON) {
-                    CfgRangeCheck (CD_TYPE_MIN, CD_TYPE_MAX);
-                    Type = (int) CfgIVal;
-                } else {
-                    CfgSpecialToken (Types, ENTRY_COUNT (Types), "Type");
-                    switch (CfgTok) {
-                        case CFGTOK_CONSTRUCTOR: Type = CD_TYPE_CON;    break;
-                        case CFGTOK_DESTRUCTOR:  Type = CD_TYPE_DES;    break;
-                        case CFGTOK_INTERRUPTOR: Type = CD_TYPE_INT;    break;
-                        default: FAIL ("Unexpected type token");
-                    }
-                }
-                break;
-
-            default:
-                FAIL ("Unexpected attribute token");
-
-        }
-
-        /* Skip the attribute value */
-        CfgNextTok ();
-
-        /* Semicolon ends the ConDes decl, otherwise accept an optional comma */
-        if (CfgTok == CFGTOK_SEMI) {
-            break;
-        } else if (CfgTok == CFGTOK_COMMA) {
-            CfgNextTok ();
-        }
-    }
-
-    /* Check if we have all mandatory attributes */
-    AttrCheck (AttrFlags, atSegName, "SEGMENT");
-    AttrCheck (AttrFlags, atLabel, "LABEL");
-    AttrCheck (AttrFlags, atType, "TYPE");
-
-    /* Check if the condes has already attributes defined */
-    if (ConDesHasSegName(Type) || ConDesHasLabel(Type)) {
-        CfgError (&CfgErrorPos,
-                  "CONDES attributes for type %d are already defined",
-                  Type);
-    }
-
-    /* Define the attributes */
-    ConDesSetSegName (Type, SegName);
-    ConDesSetLabel (Type, Label);
-    if (AttrFlags & atCount) {
-        ConDesSetCountSym (Type, Count);
-    }
-    if (AttrFlags & atImport) {
-        ConDesSetImport (Type, &Import);
-    }
-    if (AttrFlags & atOrder) {
-        ConDesSetOrder (Type, Order);
-    }
-}
-
-
-
-static void ParseStartAddress (void)
-/* Parse the STARTADDRESS feature */
-{
-    static const IdentTok Attributes [] = {
-        {   "DEFAULT",  CFGTOK_DEFAULT },
-    };
-
-
-    /* Attribute values. */
-    unsigned long DefStartAddr = 0;
-
-    /* Bitmask to remember the attributes we got already */
-    enum {
-        atNone          = 0x0000,
-        atDefault       = 0x0001
-    };
-    unsigned AttrFlags = atNone;
-
-    /* Parse the attributes */
-    while (1) {
-
-        /* Map the identifier to a token */
-        cfgtok_t AttrTok;
-        CfgSpecialToken (Attributes, ENTRY_COUNT (Attributes), "Attribute");
-        AttrTok = CfgTok;
-
-        /* An optional assignment follows */
-        CfgNextTok ();
-        CfgOptionalAssign ();
-
-        /* Check which attribute was given */
-        switch (AttrTok) {
-
-            case CFGTOK_DEFAULT:
-                /* Don't allow this twice */
-                FlagAttr (&AttrFlags, atDefault, "DEFAULT");
-                /* We expect a numeric expression */
-                DefStartAddr = CfgCheckedConstExpr (0, 0xFFFFFF);
-                break;
-
-            default:
-                FAIL ("Unexpected attribute token");
-
-        }
-
-        /* Semicolon ends the ConDes decl, otherwise accept an optional comma */
-        if (CfgTok == CFGTOK_SEMI) {
-            break;
-        } else if (CfgTok == CFGTOK_COMMA) {
-            CfgNextTok ();
-        }
-    }
-
-    /* Check if we have all mandatory attributes */
-    AttrCheck (AttrFlags, atDefault, "DEFAULT");
-
-    /* If no start address was given on the command line, use the one given
-    ** here
-    */
-    if (!HaveStartAddr) {
-        StartAddr = DefStartAddr;
-    }
-}
-
-
-
-static void ParseFeatures (void)
-/* Parse a features section */
-{
-    static const IdentTok Features [] = {
-        {   "CONDES",       CFGTOK_CONDES       },
-        {   "STARTADDRESS", CFGTOK_STARTADDRESS },
-    };
-
-    while (CfgTok == CFGTOK_IDENT) {
-
-        /* Map the identifier to a token */
-        cfgtok_t FeatureTok;
-        CfgSpecialToken (Features, ENTRY_COUNT (Features), "Feature");
-        FeatureTok = CfgTok;
-
-        /* Skip the name and the following colon */
-        CfgNextTok ();
-        CfgConsumeColon ();
-
-        /* Parse the format options */
-        switch (FeatureTok) {
-
-            case CFGTOK_CONDES:
-                ParseConDes ();
-                break;
-
-            case CFGTOK_STARTADDRESS:
-                ParseStartAddress ();
-                break;
-
-
-            default:
-                FAIL ("Unexpected feature token");
-        }
-
-        /* Skip the semicolon */
-        CfgConsumeSemi ();
-    }
-
-    /* Remember we had this section */
-    SectionsEncountered |= SE_FEATURES;
-}
-
-
-
-static void ParseSymbols (void)
-/* Parse a symbols section */
-{
-    static const IdentTok Attributes[] = {
-        {   "ADDRSIZE", CFGTOK_ADDRSIZE },
-        {   "TYPE",     CFGTOK_TYPE     },
-        {   "VALUE",    CFGTOK_VALUE    },
-    };
-
-    static const IdentTok AddrSizes [] = {
-        {   "ABS",      CFGTOK_ABS      },
-        {   "ABSOLUTE", CFGTOK_ABS      },
-        {   "DIRECT",   CFGTOK_ZP       },
-        {   "DWORD",    CFGTOK_LONG     },
-        {   "FAR",      CFGTOK_FAR      },
-        {   "LONG",     CFGTOK_LONG     },
-        {   "NEAR",     CFGTOK_ABS      },
-        {   "ZEROPAGE", CFGTOK_ZP       },
-        {   "ZP",       CFGTOK_ZP       },
-    };
-
-    static const IdentTok Types [] = {
-        {   "EXPORT",   CFGTOK_EXPORT   },
-        {   "IMPORT",   CFGTOK_IMPORT   },
-        {   "WEAK",     CFGTOK_WEAK     },
-    };
-
-    while (CfgTok == CFGTOK_IDENT) {
-
-        /* Bitmask to remember the attributes we got already */
-        enum {
-            atNone      = 0x0000,
-            atAddrSize  = 0x0001,
-            atType      = 0x0002,
-            atValue     = 0x0004,
-        };
-        unsigned AttrFlags = atNone;
-
-        ExprNode* Value = 0;
-        CfgSymType Type = CfgSymExport;
-        unsigned char AddrSize = ADDR_SIZE_ABS;
-        Import* Imp;
-        Export* Exp;
-        CfgSymbol* Sym;
-
-        /* Remember the name */
-        unsigned Name = GetStrBufId (&CfgSVal);
-        CfgNextTok ();
-
-        /* New syntax - skip the colon */
-        CfgNextTok ();
-
-        /* Parse the attributes */
-        while (1) {
-
-            /* Map the identifier to a token */
-            cfgtok_t AttrTok;
-            CfgSpecialToken (Attributes, ENTRY_COUNT (Attributes), "Attribute");
-            AttrTok = CfgTok;
-
-            /* Skip the attribute name */
-            CfgNextTok ();
-
-            /* An optional assignment follows */
-            CfgOptionalAssign ();
-
-            /* Check which attribute was given */
-            switch (AttrTok) {
-
-                case CFGTOK_ADDRSIZE:
-                    /* Don't allow this twice */
-                    FlagAttr (&AttrFlags, atAddrSize, "ADDRSIZE");
-                    /* Map the type to a token */
-                    CfgSpecialToken (AddrSizes, ENTRY_COUNT (AddrSizes), "AddrSize");
-                    switch (CfgTok) {
-                        case CFGTOK_ABS:    AddrSize = ADDR_SIZE_ABS;   break;
-                        case CFGTOK_FAR:    AddrSize = ADDR_SIZE_FAR;   break;
-                        case CFGTOK_LONG:   AddrSize = ADDR_SIZE_LONG;  break;
-                        case CFGTOK_ZP:     AddrSize = ADDR_SIZE_ZP;    break;
-                        default:
-                            Internal ("Unexpected token: %d", CfgTok);
-                    }
-                    CfgNextTok ();
-                    break;
-
-                case CFGTOK_TYPE:
-                    /* Don't allow this twice */
-                    FlagAttr (&AttrFlags, atType, "TYPE");
-                    /* Map the type to a token */
-                    CfgSpecialToken (Types, ENTRY_COUNT (Types), "Type");
-                    switch (CfgTok) {
-                        case CFGTOK_EXPORT:     Type = CfgSymExport;    break;
-                        case CFGTOK_IMPORT:     Type = CfgSymImport;    break;
-                        case CFGTOK_WEAK:       Type = CfgSymWeak;      break;
-                        default:
-                            Internal ("Unexpected token: %d", CfgTok);
-                    }
-                    CfgNextTok ();
-                    break;
-
-                case CFGTOK_VALUE:
-                    /* Don't allow this twice */
-                    FlagAttr (&AttrFlags, atValue, "VALUE");
-                    /* Value is an expression */
-                    Value = CfgExpr ();
-                    break;
-
-                default:
-                    FAIL ("Unexpected attribute token");
-
-            }
-
-            /* Semicolon ends the decl, otherwise accept an optional comma */
-            if (CfgTok == CFGTOK_SEMI) {
-                break;
-            } else if (CfgTok == CFGTOK_COMMA) {
-                CfgNextTok ();
-            }
-        }
-
-        /* We must have a type */
-        AttrCheck (AttrFlags, atType, "TYPE");
-
-        /* Further actions depend on the type */
-        switch (Type) {
-
-            case CfgSymExport:
-                /* We must have a value */
-                AttrCheck (AttrFlags, atValue, "VALUE");
-                /* Create the export */
-                Exp = CreateExprExport (Name, Value, AddrSize);
-                CollAppend (&Exp->DefLines, GenLineInfo (&CfgErrorPos));
-                break;
-
-            case CfgSymImport:
-                /* An import must not have a value */
-                if (AttrFlags & atValue) {
-                    CfgError (&CfgErrorPos, "Imports must not have a value");
-                }
-                /* Generate the import */
-                Imp = InsertImport (GenImport (Name, AddrSize));
-                /* Remember the file position */
-                CollAppend (&Imp->RefLines, GenLineInfo (&CfgErrorPos));
-                break;
-
-            case CfgSymWeak:
-                /* We must have a value */
-                AttrCheck (AttrFlags, atValue, "VALUE");
-                /* Remember the symbol for later */
-                Sym = NewCfgSymbol (CfgSymWeak, Name);
-                Sym->Value = Value;
-                Sym->AddrSize = AddrSize;
-                break;
-
-            default:
-                Internal ("Unexpected symbol type %d", Type);
-        }
-
-        /* Skip the semicolon */
-        CfgConsumeSemi ();
-    }
-
-    /* Remember we had this section */
-    SectionsEncountered |= SE_SYMBOLS;
-}
-
-
-
-static void ParseConfig (void)
-/* Parse the config file */
-{
-    static const IdentTok BlockNames [] = {
-        {   "MEMORY",   CFGTOK_MEMORY   },
-        {   "FILES",    CFGTOK_FILES    },
-        {   "SEGMENTS", CFGTOK_SEGMENTS },
-        {   "FORMATS",  CFGTOK_FORMATS  },
-        {   "FEATURES", CFGTOK_FEATURES },
-        {   "SYMBOLS",  CFGTOK_SYMBOLS  },
-    };
-    cfgtok_t BlockTok;
-
-    do {
-
-        /* Read the block ident */
-        CfgSpecialToken (BlockNames, ENTRY_COUNT (BlockNames), "Block identifier");
-        BlockTok = CfgTok;
-        CfgNextTok ();
-
-        /* Expected a curly brace */
-        CfgConsume (CFGTOK_LCURLY, "`{' expected");
-
-        /* Read the block */
-        switch (BlockTok) {
-
-            case CFGTOK_MEMORY:
-                ParseMemory ();
-                break;
-
-            case CFGTOK_FILES:
-                ParseFiles ();
-                break;
-
-            case CFGTOK_SEGMENTS:
-                ParseSegments ();
-                break;
-
-            case CFGTOK_FORMATS:
-                ParseFormats ();
-                break;
-
-            case CFGTOK_FEATURES:
-                ParseFeatures ();
-                break;
-
-            case CFGTOK_SYMBOLS:
-                ParseSymbols ();
-                break;
-
-            default:
-                FAIL ("Unexpected block token");
-
-        }
-
-        /* Skip closing brace */
-        CfgConsume (CFGTOK_RCURLY, "`}' expected");
-
-    } while (CfgTok != CFGTOK_EOF);
-}
-
-
-
-void CfgRead (void)
-/* Read the configuration */
-{
-    /* Create the descriptors for the binary formats */
-    BinFmtDesc = NewBinDesc ();
-    O65FmtDesc = NewO65Desc ();
-
-    /* If we have a config name given, open the file, otherwise we will read
-    ** from a buffer.
-    */
-    CfgOpenInput ();
-
-    /* Parse the file */
-    ParseConfig ();
-
-    /* Close the input file */
-    CfgCloseInput ();
-}
-
-
-
-/*****************************************************************************/
-/*                          Config file processing                           */
-/*****************************************************************************/
-
-
-
-static void ProcessSegments (void)
-/* Process the SEGMENTS section */
-{
-    unsigned I;
-
-    /* Walk over the list of segment descriptors */
-    I = 0;
-    while (I < CollCount (&SegDescList)) {
-
-        /* Get the next segment descriptor */
-        SegDesc* S = CollAtUnchecked (&SegDescList, I);
-
-        /* Search for the actual segment in the input files. The function may
-        ** return NULL (no such segment), this is checked later.
-        */
-        S->Seg = SegFind (S->Name);
-
-        /* If the segment is marked as BSS style, and if the segment exists
-        ** in any of the object file, check that there's no initialized data
-        ** in the segment.
-        */
-        if ((S->Flags & SF_BSS) != 0 && S->Seg != 0 && !IsBSSType (S->Seg)) {
-            CfgWarning (GetSourcePos (S->LI),
-                        "Segment `%s' with type `bss' contains initialized data",
-                        GetString (S->Name));
-        }
-
-        /* If this segment does exist in any of the object files, insert the
-        ** segment into the load/run memory areas. Otherwise print a warning
-        ** and discard it, because the segment pointer in the descriptor is
-        ** invalid.
-        */
-        if (S->Seg != 0) {
-
-            /* Insert the segment into the memory area list */
-            MemoryInsert (S->Run, S);
-            if (S->Load != S->Run) {
-                /* We have separate RUN and LOAD areas */
-                MemoryInsert (S->Load, S);
-            }
-
-            /* Use the fill value from the config */
-            S->Seg->FillVal = S->FillVal;
-
-            /* Process the next segment descriptor in the next run */
-            ++I;
-
-        } else {
-
-            /* Print a warning if the segment is not optional */
-            if ((S->Flags & SF_OPTIONAL) == 0) {
-                CfgWarning (&CfgErrorPos,
-                            "Segment `%s' does not exist",
-                            GetString (S->Name));
-            }
-
-            /* Discard the descriptor and remove it from the collection */
-            FreeSegDesc (S);
-            CollDelete (&SegDescList, I);
-        }
-    }
-}
-
-
-
-static void ProcessSymbols (void)
-/* Process the SYMBOLS section */
-{
-    Export* E;
-
-    /* Walk over all symbols */
-    unsigned I;
-    for (I = 0; I < CollCount (&CfgSymbols); ++I) {
-
-        /* Get the next symbol */
-        CfgSymbol* Sym = CollAtUnchecked (&CfgSymbols, I);
-
-        /* Check what it is. */
-        switch (Sym->Type) {
-
-            case CfgSymO65Export:
-                /* Check if the export symbol is also defined as an import. */
-                if (O65GetImport (O65FmtDesc, Sym->Name) != 0) {
-                    CfgError (
-                        GetSourcePos (Sym->LI),
-                        "Exported o65 symbol `%s' cannot also be an o65 import",
-                        GetString (Sym->Name)
-                    );
-                }
-
-                /* Check if we have this symbol defined already. The entry
-                ** routine will check this also, but we get a more verbose
-                ** error message when checking it here.
-                */
-                if (O65GetExport (O65FmtDesc, Sym->Name) != 0) {
-                    CfgError (
-                        GetSourcePos (Sym->LI),
-                        "Duplicate exported o65 symbol: `%s'",
-                        GetString (Sym->Name)
-                    );
-                }
-
-                /* Insert the symbol into the table */
-                O65SetExport (O65FmtDesc, Sym->Name);
-                break;
-
-            case CfgSymO65Import:
-                /* Check if the import symbol is also defined as an export. */
-                if (O65GetExport (O65FmtDesc, Sym->Name) != 0) {
-                    CfgError (
-                        GetSourcePos (Sym->LI),
-                        "Imported o65 symbol `%s' cannot also be an o65 export",
-                        GetString (Sym->Name)
-                    );
-                }
-
-                /* Check if we have this symbol defined already. The entry
-                ** routine will check this also, but we get a more verbose
-                ** error message when checking it here.
-                */
-                if (O65GetImport (O65FmtDesc, Sym->Name) != 0) {
-                    CfgError (
-                        GetSourcePos (Sym->LI),
-                        "Duplicate imported o65 symbol: `%s'",
-                        GetString (Sym->Name)
-                    );
-                }
-
-                /* Insert the symbol into the table */
-                O65SetImport (O65FmtDesc, Sym->Name);
-                break;
-
-            case CfgSymWeak:
-                /* If the symbol is not defined until now, define it */
-                if ((E = FindExport (Sym->Name)) == 0 || IsUnresolvedExport (E)) {
-                    /* The symbol is undefined, generate an export */
-                    E = CreateExprExport (Sym->Name, Sym->Value, Sym->AddrSize);
-                    CollAppend (&E->DefLines, Sym->LI);
-                }
-                break;
-
-            default:
-                Internal ("Unexpected symbol type %d", Sym->Type);
-                break;
-        }
-    }
-
-}
-
-
-
-static void CreateRunDefines (SegDesc* S, unsigned long SegAddr)
-/* Create the defines for a RUN segment */
-{
-    Export* E;
-    StrBuf Buf = STATIC_STRBUF_INITIALIZER;
-
-    /* Define the run address of the segment */
-    SB_Printf (&Buf, "__%s_RUN__", GetString (S->Name));
-    E = CreateMemoryExport (GetStrBufId (&Buf), S->Run, SegAddr - S->Run->Start);
-    CollAppend (&E->DefLines, S->LI);
-
-    /* Define the size of the segment */
-    SB_Printf (&Buf, "__%s_SIZE__", GetString (S->Name));
-    E = CreateConstExport (GetStrBufId (&Buf), S->Seg->Size);
-    CollAppend (&E->DefLines, S->LI);
-
-    S->Flags |= SF_RUN_DEF;
-    SB_Done (&Buf);
-}
-
-
-
-static void CreateLoadDefines (SegDesc* S, unsigned long SegAddr)
-/* Create the defines for a LOAD segment */
-{
-    Export* E;
-    StrBuf Buf = STATIC_STRBUF_INITIALIZER;
-
-    /* Define the load address of the segment */
-    SB_Printf (&Buf, "__%s_LOAD__", GetString (S->Name));
-    E = CreateMemoryExport (GetStrBufId (&Buf), S->Load, SegAddr - S->Load->Start);
-    CollAppend (&E->DefLines, S->LI);
-
-    S->Flags |= SF_LOAD_DEF;
-    SB_Done (&Buf);
-}
-
-
-
-unsigned CfgProcess (void)
-/* Process the config file after reading in object files and libraries. This
-** includes postprocessing of the config file data but also assigning segments
-** and defining segment/memory area related symbols. The function will return
-** the number of memory area overflows (so zero means anything went ok).
-** In case of overflows, a short mapfile can be generated later, to ease the
-** task of rearranging segments for the user.
-*/
-{
-    unsigned Overflows = 0;
-    unsigned I;
-
-    /* Postprocess symbols. We must do that first, since weak symbols are
-    ** defined here, which may be needed later.
-    */
-    ProcessSymbols ();
-
-    /* Postprocess segments */
-    ProcessSegments ();
-
-    /* Walk through each of the memory sections. Add up the sizes and check
-    ** for an overflow of the section. Assign the start addresses of the
-    ** segments while doing this.
-    */
-    for (I = 0; I < CollCount (&MemoryAreas); ++I) {
-
-        unsigned J;
-        unsigned long Addr;
-
-        /* Get the next memory area */
-        MemoryArea* M = CollAtUnchecked (&MemoryAreas, I);
-
-        /* Remember the offset in the output file */
-        M->FileOffs = M->F->Size;
-
-        /* Remember if this is a relocatable memory area */
-        M->Relocatable = RelocatableBinFmt (M->F->Format);
-
-        /* Resolve the start address expression, remember the start address
-        ** and mark the memory area as placed.
-        */
-        if (!IsConstExpr (M->StartExpr)) {
-            CfgError (GetSourcePos (M->LI),
-                      "Start address of memory area `%s' is not constant",
-                      GetString (M->Name));
-        }
-        Addr = M->Start = GetExprVal (M->StartExpr);
-        M->Flags |= MF_PLACED;
-
-        /* If requested, define the symbol for the start of the memory area.
-        ** Doing it here means that the expression for the size of the area
-        ** may reference this symbol.
-        */
-        if (M->Flags & MF_DEFINE) {
-            Export* E;
-            StrBuf Buf = STATIC_STRBUF_INITIALIZER;
-
-            /* Define the start of the memory area */
-            SB_Printf (&Buf, "__%s_START__", GetString (M->Name));
-            E = CreateMemoryExport (GetStrBufId (&Buf), M, 0);
-            CollAppend (&E->DefLines, M->LI);
-
-            SB_Done (&Buf);
-        }
-
-        /* Resolve the size expression */
-        if (!IsConstExpr (M->SizeExpr)) {
-            CfgError (GetSourcePos (M->LI),
-                      "Size of memory area `%s' is not constant",
-                      GetString (M->Name));
-        }
-        M->Size = GetExprVal (M->SizeExpr);
-
-        /* Walk through the segments in this memory area */
-        for (J = 0; J < CollCount (&M->SegList); ++J) {
-
-            /* Get the segment */
-            SegDesc* S = CollAtUnchecked (&M->SegList, J);
-
-            /* Remember the start address before handling this segment */
-            unsigned long StartAddr = Addr;
-
-            /* Some actions depend on wether this is the load or run memory
-            ** area.
-            */
-            if (S->Run == M) {
-
-                /* This is the run (and maybe load) memory area. Handle
-                ** alignment and explict start address and offset.
-                */
-                if (S->Flags & SF_ALIGN) {
-                    /* Align the address */
-                    unsigned long NewAddr = AlignAddr (Addr, S->RunAlignment);
-
-                    /* If the first segment placed in the memory area needs
-                    ** fill bytes for the alignment, emit a warning, since
-                    ** this is somewhat suspicious.
-                    */
-                    if (M->FillLevel == 0 && NewAddr > Addr) {
-                        CfgWarning (GetSourcePos (S->LI),
-                                    "First segment in memory area `%s' does "
-                                    "already need fill bytes for alignment",
-                                    GetString (M->Name));
-                    }
-
-                    /* Use the aligned address */
-                    Addr = NewAddr;
-
-                } else if (S->Flags & (SF_OFFSET | SF_START)) {
-                    /* Give the segment a fixed starting address */
-                    unsigned long NewAddr = S->Addr;
-                    if (S->Flags & SF_OFFSET) {
-                        /* An offset was given, no address, make an address */
-                        NewAddr += M->Start;
-                    }
-                    if (Addr > NewAddr) {
-                        /* Offset already too large */
-                        if (S->Flags & SF_OFFSET) {
-                            CfgError (GetSourcePos (M->LI),
-                                      "Offset too small in `%s', segment `%s'",
-                                      GetString (M->Name),
-                                      GetString (S->Name));
-                        } else {
-                            CfgError (GetSourcePos (M->LI),
-                                      "Start address too low in `%s', segment `%s'",
-                                      GetString (M->Name),
-                                      GetString (S->Name));
-                        }
-                    }
-                    Addr = NewAddr;
-                }
-
-                /* Set the start address of this segment, set the readonly flag
-                ** in the segment and and remember if the segment is in a
-                ** relocatable file or not.
-                */
-                S->Seg->PC = Addr;
-                S->Seg->ReadOnly = (S->Flags & SF_RO) != 0;
-
-                /* Remember the run memory for this segment, which is also a
-                ** flag that the segment has been placed.
-                */
-                S->Seg->MemArea = M;
-
-            } else if (S->Load == M) {
-
-                /* This is the load memory area, *and* run and load are
-                ** different (because of the "else" above). Handle alignment.
-                */
-                if (S->Flags & SF_ALIGN_LOAD) {
-                    /* Align the address */
-                    Addr = AlignAddr (Addr, S->LoadAlignment);
-                }
-
-            }
-
-            /* If this is the load memory area and the segment doesn't have a
-            ** fill value defined, use the one from the memory area.
-            */
-            if (S->Load == M && (S->Flags & SF_FILLVAL) == 0) {
-                S->Seg->FillVal = M->FillVal;
-            }
-
-            /* Increment the fill level of the memory area and check for an
-            ** overflow.
-            */
-            M->FillLevel = Addr + S->Seg->Size - M->Start;
-            if (M->FillLevel > M->Size && (M->Flags & MF_OVERFLOW) == 0) {
-                ++Overflows;
-                M->Flags |= MF_OVERFLOW;
-                CfgWarning (GetSourcePos (M->LI),
-                            "Memory area overflow in `%s', segment `%s' (%lu bytes)",
-                             GetString (M->Name), GetString (S->Name),
-                             M->FillLevel - M->Size);
-            }
-
-            /* If requested, define symbols for the start and size of the
-            ** segment.
-            */
-            if (S->Flags & SF_DEFINE) {
-                if (S->Run == M && (S->Flags & SF_RUN_DEF) == 0) {
-                    CreateRunDefines (S, Addr);
-                }
-                if (S->Load == M && (S->Flags & SF_LOAD_DEF) == 0) {
-                    CreateLoadDefines (S, Addr);
-                }
-            }
-
-            /* Calculate the new address */
-            Addr += S->Seg->Size;
-
-            /* If this segment will go out to the file, or its place
-            ** in the file will be filled, then increase the file size.
-            */
-            if (S->Load == M &&
-                ((S->Flags & SF_BSS) == 0 || (M->Flags & MF_FILL) != 0)) {
-                M->F->Size += Addr - StartAddr;
-            }
-
-        }
-
-        /* If requested, define symbols for start, size and offset of the
-        ** memory area
-        */
-        if (M->Flags & MF_DEFINE) {
-            Export* E;
-            StrBuf Buf = STATIC_STRBUF_INITIALIZER;
-
-            /* Define the size of the memory area */
-            SB_Printf (&Buf, "__%s_SIZE__", GetString (M->Name));
-            E = CreateConstExport (GetStrBufId (&Buf), M->Size);
-            CollAppend (&E->DefLines, M->LI);
-
-            /* Define the fill level of the memory area */
-            SB_Printf (&Buf, "__%s_LAST__", GetString (M->Name));
-            E = CreateMemoryExport (GetStrBufId (&Buf), M, M->FillLevel);
-            CollAppend (&E->DefLines, M->LI);
-
-            /* Define the file offset of the memory area. This isn't of much
-            ** use for relocatable output files.
-            */
-            if (!M->Relocatable) {
-                SB_Printf (&Buf, "__%s_FILEOFFS__", GetString (M->Name));
-                E = CreateConstExport (GetStrBufId (&Buf), M->FileOffs);
-                CollAppend (&E->DefLines, M->LI);
-            }
-
-            /* Throw away the string buffer */
-            SB_Done (&Buf);
-        }
-
-        /* If we didn't have an overflow and are requested to fill the memory
-        ** area, acount for that in the file size.
-        */
-        if ((M->Flags & MF_OVERFLOW) == 0 && (M->Flags & MF_FILL) != 0) {
-            M->F->Size += (M->Size - M->FillLevel);
-        }
-    }
-
-    /* Return the number of memory area overflows */
-    return Overflows;
-}
-
-
-
-void CfgWriteTarget (void)
-/* Write the target file(s) */
-{
-    unsigned I;
-
-    /* Walk through the files list */
-    for (I = 0; I < CollCount (&FileList); ++I) {
-
-        /* Get this entry */
-        File* F = CollAtUnchecked (&FileList, I);
-
-        /* We don't need to look at files with no memory areas */
-        if (CollCount (&F->MemoryAreas) > 0) {
-
-            /* Is there an output file? */
-            if (SB_GetLen (GetStrBuf (F->Name)) > 0) {
-
-                /* Assign a proper binary format */
-                if (F->Format == BINFMT_DEFAULT) {
-                    F->Format = DefaultBinFmt;
-                }
-
-                /* Call the apropriate routine for the binary format */
-                switch (F->Format) {
-
-                    case BINFMT_BINARY:
-                        BinWriteTarget (BinFmtDesc, F);
-                        break;
-
-                    case BINFMT_O65:
-                        O65WriteTarget (O65FmtDesc, F);
-                        break;
-
-                    default:
-                        Internal ("Invalid binary format: %u", F->Format);
-
-                }
-
-            } else {
-
-                /* No output file. Walk through the list and mark all segments
-                ** loading into these memory areas in this file as dumped.
-                */
-                unsigned J;
-                for (J = 0; J < CollCount (&F->MemoryAreas); ++J) {
-
-                    unsigned K;
-
-                    /* Get this entry */
-                    MemoryArea* M = CollAtUnchecked (&F->MemoryAreas, J);
-
-                    /* Debugging */
-                    Print (stdout, 2, "Skipping `%s'...\n", GetString (M->Name));
-
-                    /* Walk throught the segments */
-                    for (K = 0; K < CollCount (&M->SegList); ++K) {
-                        SegDesc* S = CollAtUnchecked (&M->SegList, K);
-                        if (S->Load == M) {
-                            /* Load area - mark the segment as dumped */
-                            S->Seg->Dumped = 1;
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/src/ld65/config.h b/src/ld65/config.h
deleted file mode 100644 (file)
index 6a36af6..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 config.h                                  */
-/*                                                                           */
-/*               Target configuration file for the ld65 linker               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-
-
-/* common */
-#include "coll.h"
-#include "filepos.h"
-
-/* ld65 */
-#include "lineinfo.h"
-#include "segments.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Forward for struct MemoryArea */
-struct MemoryArea;
-
-/* File list entry */
-typedef struct File File;
-struct File {
-    unsigned            Name;           /* Name index of the file */
-    unsigned            Flags;
-    unsigned            Format;         /* Output format */
-    unsigned long       Size;           /* Size of the generated file */
-    Collection          MemoryAreas;    /* List of memory areas in this file */
-};
-
-/* Segment descriptor entry */
-typedef struct SegDesc SegDesc;
-struct SegDesc {
-    unsigned            Name;           /* Index of the name */
-    LineInfo*           LI;             /* Position of definition */
-    Segment*            Seg;            /* Pointer to segment structure */
-    unsigned            Attr;           /* Attributes for segment */
-    unsigned            Flags;          /* Set of bitmapped flags */
-    unsigned char       FillVal;        /* Fill value for this segment */
-    struct MemoryArea*  Load;           /* Load memory section */
-    struct MemoryArea*  Run;            /* Run memory section */
-    unsigned long       Addr;           /* Start address or offset into segment */
-    unsigned long       RunAlignment;   /* Run area alignment if given */
-    unsigned long       LoadAlignment;  /* Load area alignment if given */
-};
-
-/* Segment flags */
-#define SF_RO           0x0001          /* Read only segment */
-#define SF_BSS          0x0002          /* Segment is BSS style segment */
-#define SF_ZP           0x0004          /* Zeropage segment (o65 only) */
-#define SF_DEFINE       0x0008          /* Define start and size */
-#define SF_ALIGN        0x0010          /* Align segment in run area */
-#define SF_ALIGN_LOAD   0x0020          /* Align segment in load area */
-#define SF_OFFSET       0x0040          /* Segment has offset in memory */
-#define SF_START        0x0080          /* Segment has fixed start address */
-#define SF_OPTIONAL     0x0100          /* Segment is optional (must not exist) */
-#define SF_RUN_DEF      0x0200          /* RUN symbols already defined */
-#define SF_LOAD_DEF     0x0400          /* LOAD symbols already defined */
-#define SF_FILLVAL      0x0800          /* Segment has separate fill value */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void CfgRead (void);
-/* Read the configuration */
-
-unsigned CfgProcess (void);
-/* Process the config file after reading in object files and libraries. This
-** includes postprocessing of the config file data but also assigning segments
-** and defining segment/memory area related symbols. The function will return
-** the number of memory area overflows (so zero means anything went ok).
-** In case of overflows, a short mapfile can be generated later, to ease the
-** task of rearranging segments for the user.
-*/
-
-void CfgWriteTarget (void);
-/* Write the target file(s) */
-
-
-
-/* End of config.h */
-
-#endif
diff --git a/src/ld65/dbgfile.c b/src/ld65/dbgfile.c
deleted file mode 100644 (file)
index 386706f..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 dbgfile.c                                 */
-/*                                                                           */
-/*                  Debug file creation for the ld65 linker                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-/* ld65 */
-#include "dbgfile.h"
-#include "dbgsyms.h"
-#include "error.h"
-#include "fileinfo.h"
-#include "global.h"
-#include "library.h"
-#include "lineinfo.h"
-#include "scopes.h"
-#include "segments.h"
-#include "span.h"
-#include "tpool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void AssignIds (void)
-/* Assign the base ids for debug info output. Within each module, many of the
-** items are addressed by ids which are actually the indices of the items in
-** the collections. To make them unique, we must assign a unique base to each
-** range.
-*/
-{
-    /* Walk over all modules */
-    unsigned I;
-    unsigned HLLSymBaseId = 0;
-    unsigned ScopeBaseId  = 0;
-    unsigned SpanBaseId   = 0;
-    unsigned SymBaseId    = 0;
-    for (I = 0; I < CollCount (&ObjDataList); ++I) {
-
-        /* Get this module */
-        ObjData* O = CollAt (&ObjDataList, I);
-
-        /* Assign the module id */
-        O->Id = I;
-
-        /* Assign base ids */
-        O->HLLSymBaseId = HLLSymBaseId;
-        O->ScopeBaseId  = ScopeBaseId;
-        O->SpanBaseId   = SpanBaseId;
-        O->SymBaseId    = SymBaseId;
-
-        /* Bump the base ids */
-        HLLSymBaseId  += CollCount (&O->HLLDbgSyms);
-        ScopeBaseId   += CollCount (&O->Scopes);
-        SpanBaseId    += CollCount (&O->Spans);
-        SymBaseId     += CollCount (&O->DbgSyms);
-    }
-
-    /* Assign the ids to the file infos */
-    AssignFileInfoIds ();
-
-    /* Assign the ids to line infos */
-    AssignLineInfoIds ();
-}
-
-
-
-void CreateDbgFile (void)
-/* Create a debug info file */
-{
-    /* Open the debug info file */
-    FILE* F = fopen (DbgFileName, "w");
-    if (F == 0) {
-        Error ("Cannot create debug file `%s': %s", DbgFileName, strerror (errno));
-    }
-
-    /* Output version information */
-    fprintf (F, "version\tmajor=2,minor=0\n");
-
-    /* Output a line with the item numbers so the debug info module is able
-    ** to preallocate the required memory.
-    */
-    fprintf (
-        F,
-        "info\tcsym=%u,file=%u,lib=%u,line=%u,mod=%u,scope=%u,seg=%u,span=%u,sym=%u,type=%u\n",
-        HLLDbgSymCount (),
-        FileInfoCount (),
-        LibraryCount (),
-        LineInfoCount (),
-        ObjDataCount (),
-        ScopeCount (),
-        SegmentCount (),
-        SpanCount (),
-        DbgSymCount (),
-        TypeCount ()
-    );
-
-    /* Assign the ids to the items */
-    AssignIds ();
-
-    /* Output high level language symbols */
-    PrintHLLDbgSyms (F);
-
-    /* Output files */
-    PrintDbgFileInfo (F);
-
-    /* Output libraries */
-    PrintDbgLibraries (F);
-
-    /* Output line info */
-    PrintDbgLineInfo (F);
-
-    /* Output modules */
-    PrintDbgModules (F);
-
-    /* Output the segment info */
-    PrintDbgSegments (F);
-
-    /* Output spans */
-    PrintDbgSpans (F);
-
-    /* Output scopes */
-    PrintDbgScopes (F);
-
-    /* Output symbols */
-    PrintDbgSyms (F);
-
-    /* Output types */
-    PrintDbgTypes (F);
-
-    /* Close the file */
-    if (fclose (F) != 0) {
-        Error ("Error closing debug file `%s': %s", DbgFileName, strerror (errno));
-    }
-}
diff --git a/src/ld65/dbgfile.h b/src/ld65/dbgfile.h
deleted file mode 100644 (file)
index b8e1a53..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 dbgfile.h                                 */
-/*                                                                           */
-/*                  Debug file creation for the ld65 linker                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef DBGFILE_H
-#define DBGFILE_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void CreateDbgFile (void);
-/* Create a debug info file */
-
-
-
-/* End of dbgfile.h */
-
-#endif
diff --git a/src/ld65/dbgsyms.c b/src/ld65/dbgsyms.c
deleted file mode 100644 (file)
index 955f0f7..0000000
+++ /dev/null
@@ -1,542 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 dbgsyms.c                                 */
-/*                                                                           */
-/*                 Debug symbol handling for the ld65 linker                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "addrsize.h"
-#include "attrib.h"
-#include "check.h"
-#include "hlldbgsym.h"
-#include "symdefs.h"
-#include "xmalloc.h"
-
-/* ld65 */
-#include "dbgsyms.h"
-#include "error.h"
-#include "exports.h"
-#include "expr.h"
-#include "fileio.h"
-#include "global.h"
-#include "lineinfo.h"
-#include "objdata.h"
-#include "spool.h"
-#include "tpool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Definition of the debug symbol structure */
-struct DbgSym {
-    unsigned            Id;             /* Id of debug symbol */
-    DbgSym*             Next;           /* Pool linear list link */
-    ObjData*            Obj;            /* Object file that exports the name */
-    Collection          DefLines;       /* Line infos for definition */
-    Collection          RefLines;       /* Line infos for references */
-    ExprNode*           Expr;           /* Expression (0 if not def'd) */
-    unsigned            Size;           /* Symbol size if any */
-    unsigned            OwnerId;        /* Id of parent/owner */
-    unsigned            ImportId;       /* Id of import if this is one */
-    unsigned            Name;           /* Name */
-    unsigned short      Type;           /* Type of symbol */
-    unsigned short      AddrSize;       /* Address size of symbol */
-};
-
-/* Structure used for a high level language function or symbol */
-typedef struct HLLDbgSym HLLDbgSym;
-struct HLLDbgSym {
-    unsigned            Flags;          /* See above */
-    unsigned            Name;           /* String id of name */
-    DbgSym*             Sym;            /* Assembler symbol */
-    int                 Offs;           /* Offset if any */
-    unsigned            Type;           /* String id of type */
-    unsigned            ScopeId;        /* Parent scope */
-};
-
-/* We will collect all debug symbols in the following array and remove
-** duplicates before outputing them into a label file.
-*/
-static DbgSym*  DbgSymPool[256];
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static DbgSym* NewDbgSym (unsigned Id, unsigned Type, unsigned char AddrSize,
-                          ObjData* O)
-/* Create a new DbgSym and return it */
-{
-    /* Allocate memory */
-    DbgSym* D     = xmalloc (sizeof (DbgSym));
-
-    /* Initialize the fields */
-    D->Id         = Id;
-    D->Next       = 0;
-    D->Obj        = O;
-    D->DefLines   = EmptyCollection;
-    D->RefLines   = EmptyCollection;
-    D->Expr       = 0;
-    D->Size       = 0;
-    D->OwnerId    = ~0U;
-    D->ImportId   = ~0U;
-    D->Name       = 0;
-    D->Type       = Type;
-    D->AddrSize   = AddrSize;
-
-    /* Return the new entry */
-    return D;
-}
-
-
-
-static HLLDbgSym* NewHLLDbgSym (void)
-/* Create a new HLLDbgSym and return it */
-{
-    /* Allocate memory and return it */
-    return xmalloc (sizeof (HLLDbgSym));
-}
-
-
-
-static DbgSym* GetDbgSym (DbgSym* D, long Val)
-/* Check if we find the same debug symbol in the table. If we find it, return
-** a pointer to the other occurrence, if we didn't find it, return NULL.
-*/
-{
-    /* Create the hash. We hash over the symbol value */
-    unsigned Hash = ((Val >> 24) & 0xFF) ^
-                    ((Val >> 16) & 0xFF) ^
-                    ((Val >>  8) & 0xFF) ^
-                    ((Val >>  0) & 0xFF);
-
-    /* Check for this symbol */
-    DbgSym* Sym = DbgSymPool[Hash];
-    while (Sym) {
-        /* Is this symbol identical? */
-        if (Sym->Name == D->Name && EqualExpr (Sym->Expr, D->Expr)) {
-            /* Found */
-            return Sym;
-        }
-
-        /* Next symbol */
-        Sym = Sym->Next;
-    }
-
-    /* This is the first symbol of it's kind */
-    return 0;
-}
-
-
-
-static void InsertDbgSym (DbgSym* D, long Val)
-/* Insert the symbol into the hashed symbol pool */
-{
-    /* Create the hash. We hash over the symbol value */
-    unsigned Hash = ((Val >> 24) & 0xFF) ^
-                    ((Val >> 16) & 0xFF) ^
-                    ((Val >>  8) & 0xFF) ^
-                    ((Val >>  0) & 0xFF);
-
-    /* Insert the symbol */
-    D->Next = DbgSymPool [Hash];
-    DbgSymPool [Hash] = D;
-}
-
-
-
-DbgSym* ReadDbgSym (FILE* F, ObjData* O, unsigned Id)
-/* Read a debug symbol from a file, insert and return it */
-{
-    /* Read the type and address size */
-    unsigned Type = ReadVar (F);
-    unsigned char AddrSize = Read8 (F);
-
-    /* Create a new debug symbol */
-    DbgSym* D = NewDbgSym (Id, Type, AddrSize, O);
-
-    /* Read the id of the owner scope/symbol */
-    D->OwnerId = ReadVar (F);
-
-    /* Read and assign the name */
-    D->Name = MakeGlobalStringId (O, ReadVar (F));
-
-    /* Read the value */
-    if (SYM_IS_EXPR (D->Type)) {
-        D->Expr = ReadExpr (F, O);
-    } else {
-        D->Expr = LiteralExpr (Read32 (F), O);
-    }
-
-    /* Read the size */
-    if (SYM_HAS_SIZE (D->Type)) {
-        D->Size = ReadVar (F);
-    }
-
-    /* If this is an import, the file contains its id */
-    if (SYM_IS_IMPORT (D->Type)) {
-        D->ImportId = ReadVar (F);
-    }
-
-    /* If its an exports, there's also the export id, but we don't remember
-    ** it but use it to let the export point back to us.
-    */
-    if (SYM_IS_EXPORT (D->Type)) {
-        /* Get the export from the export id, then set the our id */
-        GetObjExport (O, ReadVar (F))->DbgSymId = Id;
-    }
-
-    /* Last is the list of line infos for this symbol */
-    ReadLineInfoList (F, O, &D->DefLines);
-    ReadLineInfoList (F, O, &D->RefLines);
-
-    /* Return the new DbgSym */
-    return D;
-}
-
-
-
-HLLDbgSym* ReadHLLDbgSym (FILE* F, ObjData* O, unsigned Id attribute ((unused)))
-/* Read a hll debug symbol from a file, insert and return it */
-{
-    unsigned SC;
-
-    /* Create a new HLLDbgSym */
-    HLLDbgSym* S = NewHLLDbgSym ();
-
-    /* Read the data */
-    S->Flags    = ReadVar (F);
-    SC          = HLL_GET_SC (S->Flags);
-    S->Name     = MakeGlobalStringId (O, ReadVar (F));
-    if (HLL_HAS_SYM (S->Flags)) {
-        S->Sym = GetObjDbgSym (O, ReadVar (F));
-    } else {
-        /* Auto variables aren't attached to asm symbols */
-        S->Sym = 0;
-    }
-    if (SC == HLL_SC_AUTO || SC == HLL_SC_REG) {
-        S->Offs = ReadVar (F);
-    } else {
-        S->Offs = 0;
-    }
-    S->Type     = GetTypeId (GetObjString (O, ReadVar (F)));
-    S->ScopeId  = ReadVar (F);
-
-    /* Return the (now initialized) hll debug symbol */
-    return S;
-}
-
-
-
-static void ClearDbgSymTable (void)
-/* Clear the debug symbol table */
-{
-    unsigned I;
-    for (I = 0; I < sizeof (DbgSymPool) / sizeof (DbgSymPool[0]); ++I) {
-        DbgSym* Sym = DbgSymPool[I];
-        DbgSymPool[I] = 0;
-        while (Sym) {
-            DbgSym* NextSym = Sym->Next;
-            Sym->Next = 0;
-            Sym = NextSym;
-        }
-    }
-}
-
-
-
-static long GetDbgSymVal (const DbgSym* D)
-/* Get the value of this symbol */
-{
-    CHECK (D->Expr != 0);
-    return GetExprVal (D->Expr);
-}
-
-
-
-static void PrintLineInfo (FILE* F, const Collection* LineInfos, const char* Format)
-/* Output an attribute with line infos */
-{
-    if (CollCount (LineInfos) > 0) {
-        unsigned I;
-        const LineInfo* LI = CollConstAt (LineInfos, 0);
-        fprintf (F, Format, LI->Id);
-        for (I = 1; I < CollCount (LineInfos); ++I) {
-            LI = CollConstAt (LineInfos, I);
-            fprintf (F, "+%u", LI->Id);
-        }
-    }
-}
-
-
-
-unsigned DbgSymCount (void)
-/* Return the total number of debug symbols */
-{
-    /* Walk over all object files */
-    unsigned I;
-    unsigned Count = 0;
-    for (I = 0; I < CollCount (&ObjDataList); ++I) {
-
-        /* Get this object file */
-        const ObjData* O = CollAtUnchecked (&ObjDataList, I);
-
-        /* Count debug symbols */
-        Count += CollCount (&O->DbgSyms);
-    }
-    return Count;
-}
-
-
-
-unsigned HLLDbgSymCount (void)
-/* Return the total number of high level language debug symbols */
-{
-    /* Walk over all object files */
-    unsigned I;
-    unsigned Count = 0;
-    for (I = 0; I < CollCount (&ObjDataList); ++I) {
-
-        /* Get this object file */
-        const ObjData* O = CollAtUnchecked (&ObjDataList, I);
-
-        /* Count debug symbols */
-        Count += CollCount (&O->HLLDbgSyms);
-    }
-    return Count;
-}
-
-
-
-void PrintDbgSyms (FILE* F)
-/* Print the debug symbols in a debug file */
-{
-    unsigned I, J;
-
-    for (I = 0; I < CollCount (&ObjDataList); ++I) {
-
-        /* Get the object file */
-        ObjData* O = CollAtUnchecked (&ObjDataList, I);
-
-        /* Walk through all debug symbols in this module */
-        for (J = 0; J < CollCount (&O->DbgSyms); ++J) {
-
-            /* Get the next debug symbol */
-            const DbgSym* S = CollConstAt (&O->DbgSyms, J);
-
-            /* Emit the base data for the entry */
-            fprintf (F,
-                     "sym\tid=%u,name=\"%s\",addrsize=%s",
-                     O->SymBaseId + J,
-                     GetString (S->Name),
-                     AddrSizeToStr ((unsigned char) S->AddrSize));
-
-            /* Emit the size only if we know it */
-            if (S->Size != 0) {
-                fprintf (F, ",size=%u", S->Size);
-            }
-
-            /* For cheap local symbols, add the owner symbol, for others,
-            ** add the owner scope.
-            */
-            if (SYM_IS_STD (S->Type)) {
-                fprintf (F, ",scope=%u", O->ScopeBaseId + S->OwnerId);
-            } else {
-                fprintf (F, ",parent=%u", O->SymBaseId + S->OwnerId);
-            }
-
-            /* Output line infos */
-            PrintLineInfo (F, &S->DefLines, ",def=%u");
-            PrintLineInfo (F, &S->RefLines, ",ref=%u");
-
-            /* If this is an import, output the id of the matching export.
-            ** If this is not an import, output its value and - if we have
-            ** it - the segment.
-            */
-            if (SYM_IS_IMPORT (S->Type)) {
-
-                /* Get the import */
-                const Import* Imp = GetObjImport (O, S->ImportId);
-
-                /* Get the export from the import */
-                const Export* Exp = Imp->Exp;
-
-                /* Output the type */
-                fputs (",type=imp", F);
-
-                /* If this is not a linker generated symbol, and the module
-                ** that contains the export has debug info, output the debug
-                ** symbol id for the export
-                */
-                if (Exp->Obj && OBJ_HAS_DBGINFO (Exp->Obj->Header.Flags)) {
-                    fprintf (F, ",exp=%u", Exp->Obj->SymBaseId + Exp->DbgSymId);
-                }
-
-            } else {
-
-                SegExprDesc D;
-
-                /* Get the symbol value */
-                long Val = GetDbgSymVal (S);
-
-                /* Output it */
-                fprintf (F, ",val=0x%lX", Val);
-
-                /* Check for a segmented expression and add the segment id to
-                ** the debug info if we have one.
-                */
-                GetSegExprVal (S->Expr, &D);
-                if (!D.TooComplex && D.Seg != 0) {
-                    fprintf (F, ",seg=%u", D.Seg->Id);
-                }
-
-                /* Output the type */
-                fprintf (F, ",type=%s", SYM_IS_LABEL (S->Type)? "lab" : "equ");
-            }
-
-            /* Terminate the output line */
-            fputc ('\n', F);
-        }
-    }
-}
-
-
-
-void PrintHLLDbgSyms (FILE* F)
-/* Print the high level language debug symbols in a debug file */
-{
-    unsigned I, J;
-
-    for (I = 0; I < CollCount (&ObjDataList); ++I) {
-
-        /* Get the object file */
-        ObjData* O = CollAtUnchecked (&ObjDataList, I);
-
-        /* Walk through all hll debug symbols in this module */
-        for (J = 0; J < CollCount (&O->HLLDbgSyms); ++J) {
-
-            /* Get the next debug symbol */
-            const HLLDbgSym* S = CollConstAt (&O->HLLDbgSyms, J);
-
-            /* Get the storage class */
-            unsigned SC = HLL_GET_SC (S->Flags);
-
-            /* Output the base info */
-            fprintf (F, "csym\tid=%u,name=\"%s\",scope=%u,type=%u,sc=",
-                     O->HLLSymBaseId + J,
-                     GetString (S->Name),
-                     O->ScopeBaseId + S->ScopeId,
-                     S->Type);
-            switch (SC) {
-                case HLL_SC_AUTO:       fputs ("auto", F);      break;
-                case HLL_SC_REG:        fputs ("reg", F);       break;
-                case HLL_SC_STATIC:     fputs ("static", F);    break;
-                case HLL_SC_EXTERN:     fputs ("ext", F);       break;
-                default:
-                    Error ("Invalid storage class %u for hll symbol", SC);
-                    break;
-            }
-
-            /* Output the offset if it is not zero */
-            if (S->Offs) {
-                fprintf (F, ",offs=%d", S->Offs);
-            }
-
-            /* For non auto symbols output the debug symbol id of the asm sym */
-            if (HLL_HAS_SYM (S->Flags)) {
-                fprintf (F, ",sym=%u", O->SymBaseId + S->Sym->Id);
-            }
-
-            /* Terminate the output line */
-            fputc ('\n', F);
-        }
-    }
-}
-
-
-
-void PrintDbgSymLabels (FILE* F)
-/* Print the debug symbols in a VICE label file */
-{
-    unsigned I, J;
-
-    /* Clear the symbol table */
-    ClearDbgSymTable ();
-
-    /* Create labels from all modules we have linked into the output file */
-    for (I = 0; I < CollCount (&ObjDataList); ++I) {
-
-        /* Get the object file */
-        ObjData* O = CollAtUnchecked (&ObjDataList, I);
-
-        /* Walk through all debug symbols in this module */
-        for (J = 0; J < CollCount (&O->DbgSyms); ++J) {
-
-            long Val;
-
-            /* Get the next debug symbol */
-            DbgSym* D = CollAt (&O->DbgSyms, J);
-
-            /* Emit this symbol only if it is a label (ignore equates and imports) */
-            if (SYM_IS_EQUATE (D->Type) || SYM_IS_IMPORT (D->Type)) {
-                continue;
-            }
-
-            /* Get the symbol value */
-            Val = GetDbgSymVal (D);
-
-            /* Lookup this symbol in the table. If it is found in the table, it was
-            ** already written to the file, so don't emit it twice. If it is not in
-            ** the table, insert and output it.
-            */
-            if (GetDbgSym (D, Val) == 0) {
-
-                /* Emit the VICE label line */
-                fprintf (F, "al %06lX .%s\n", Val, GetString (D->Name));
-
-                /* Insert the symbol into the table */
-                InsertDbgSym (D, Val);
-            }
-        }
-    }
-}
diff --git a/src/ld65/dbgsyms.h b/src/ld65/dbgsyms.h
deleted file mode 100644 (file)
index f631dcb..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 dbgsyms.h                                 */
-/*                                                                           */
-/*                 Debug symbol handling for the ld65 linker                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef DBGSYMS_H
-#define DBGSYMS_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "coll.h"
-#include "exprdefs.h"
-
-/* ld65 */
-#include "objdata.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Forwards */
-struct Scope;
-struct HLLDbgSym;
-
-/* Opaque debug symbol structure */
-typedef struct DbgSym DbgSym;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-DbgSym* ReadDbgSym (FILE* F, ObjData* Obj, unsigned Id);
-/* Read a debug symbol from a file, insert and return it */
-
-struct HLLDbgSym* ReadHLLDbgSym (FILE* F, ObjData* Obj, unsigned Id);
-/* Read a hll debug symbol from a file, insert and return it */
-
-void PrintDbgSyms (FILE* F);
-/* Print the debug symbols in a debug file */
-
-unsigned DbgSymCount (void);
-/* Return the total number of debug symbols */
-
-unsigned HLLDbgSymCount (void);
-/* Return the total number of high level language debug symbols */
-
-void PrintHLLDbgSyms (FILE* F);
-/* Print the high level language debug symbols in a debug file */
-
-void PrintDbgSymLabels (FILE* F);
-/* Print the debug symbols in a VICE label file */
-
-
-
-/* End of dbgsyms.h */
-
-#endif
diff --git a/src/ld65/error.c b/src/ld65/error.c
deleted file mode 100644 (file)
index 20dfd45..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 error.c                                   */
-/*                                                                           */
-/*                    Error handling for the ld65 linker                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2008 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-/* common */
-#include "cmdline.h"
-#include "strbuf.h"
-
-/* ld65 */
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Warning (const char* Format, ...)
-/* Print a warning message */
-{
-    StrBuf S = STATIC_STRBUF_INITIALIZER;
-    va_list ap;
-
-    va_start (ap, Format);
-    SB_VPrintf (&S, Format, ap);
-    va_end (ap);
-    SB_Terminate (&S);
-
-    fprintf (stderr, "%s: Warning: %s\n", ProgName, SB_GetConstBuf (&S));
-
-    SB_Done (&S);
-}
-
-
-
-void Error (const char* Format, ...)
-/* Print an error message and die */
-{
-    StrBuf S = STATIC_STRBUF_INITIALIZER;
-    va_list ap;
-
-    va_start (ap, Format);
-    SB_VPrintf (&S, Format, ap);
-    va_end (ap);
-    SB_Terminate (&S);
-
-    fprintf (stderr, "%s: Error: %s\n", ProgName, SB_GetConstBuf (&S));
-
-    SB_Done (&S);
-
-    exit (EXIT_FAILURE);
-}
-
-
-
-void Internal (const char* Format, ...)
-/* Print an internal error message and die */
-{
-    StrBuf S = STATIC_STRBUF_INITIALIZER;
-    va_list ap;
-
-    va_start (ap, Format);
-    SB_VPrintf (&S, Format, ap);
-    va_end (ap);
-    SB_Terminate (&S);
-
-    fprintf (stderr, "%s: Internal Error: %s\n", ProgName, SB_GetConstBuf (&S));
-
-    SB_Done (&S);
-
-    exit (EXIT_FAILURE);
-}
diff --git a/src/ld65/error.h b/src/ld65/error.h
deleted file mode 100644 (file)
index b49d891..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 error.h                                   */
-/*                                                                           */
-/*                    Error handling for the ld65 linker                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ERROR_H
-#define ERROR_H
-
-
-
-/* common */
-#include "attrib.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Warning (const char* Format, ...) attribute((format(printf,1,2)));
-/* Print a warning message */
-
-void Error (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print an error message and die */
-
-void Internal (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print an internal error message and die */
-
-
-
-/* End of error.h */
-
-#endif
diff --git a/src/ld65/exports.c b/src/ld65/exports.c
deleted file mode 100644 (file)
index e7ef3d4..0000000
+++ /dev/null
@@ -1,1060 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 exports.c                                 */
-/*                                                                           */
-/*                   Exports handling for the ld65 linker                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* common */
-#include "addrsize.h"
-#include "check.h"
-#include "hashfunc.h"
-#include "lidefs.h"
-#include "symdefs.h"
-#include "xmalloc.h"
-
-/* ld65 */
-#include "condes.h"
-#include "error.h"
-#include "exports.h"
-#include "expr.h"
-#include "fileio.h"
-#include "global.h"
-#include "lineinfo.h"
-#include "memarea.h"
-#include "objdata.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Hash table */
-#define HASHTAB_MASK    0x0FFFU
-#define HASHTAB_SIZE    (HASHTAB_MASK + 1)
-static Export*          HashTab[HASHTAB_SIZE];
-
-/* Import management variables */
-static unsigned         ImpCount = 0;           /* Import count */
-static unsigned         ImpOpen  = 0;           /* Count of open imports */
-
-/* Export management variables */
-static unsigned         ExpCount = 0;           /* Export count */
-static Export**         ExpPool  = 0;           /* Exports array */
-
-/* Defines for the flags in Import */
-#define IMP_INLIST      0x0001U                 /* Import is in exports list */
-
-/* Defines for the flags in Export */
-#define EXP_INLIST      0x0001U                 /* Export is in exports list */
-#define EXP_USERMARK    0x0002U                 /* User setable flag */
-
-
-
-/*****************************************************************************/
-/*                              Import handling                              */
-/*****************************************************************************/
-
-
-
-static Export* NewExport (unsigned Type, unsigned char AddrSize,
-                          unsigned Name, ObjData* Obj);
-/* Create a new export and initialize it */
-
-
-
-static Import* NewImport (unsigned char AddrSize, ObjData* Obj)
-/* Create a new import and initialize it */
-{
-    /* Allocate memory */
-    Import* I    = xmalloc (sizeof (Import));
-
-    /* Initialize the fields */
-    I->Next      = 0;
-    I->Obj       = Obj;
-    I->DefLines  = EmptyCollection;
-    I->RefLines  = EmptyCollection;
-    I->Exp       = 0;
-    I->Name      = INVALID_STRING_ID;
-    I->Flags     = 0;
-    I->AddrSize  = AddrSize;
-
-    /* Return the new structure */
-    return I;
-}
-
-
-
-void FreeImport (Import* I)
-/* Free an import. NOTE: This won't remove the import from the exports table,
-** so it may only be called for unused imports (imports from modules that
-** aren't referenced).
-*/
-{
-    /* Safety */
-    PRECONDITION ((I->Flags & IMP_INLIST) == 0);
-
-    /* Free the line info collections */
-    DoneCollection (&I->DefLines);
-    DoneCollection (&I->RefLines);
-
-    /* Free the struct */
-    xfree (I);
-}
-
-
-
-Import* ReadImport (FILE* F, ObjData* Obj)
-/* Read an import from a file and return it */
-{
-    Import* I;
-
-    /* Read the import address size */
-    unsigned char AddrSize = Read8 (F);
-
-    /* Create a new import */
-    I = NewImport (AddrSize, Obj);
-
-    /* Read the name */
-    I->Name = MakeGlobalStringId (Obj, ReadVar (F));
-
-    /* Read the line infos */
-    ReadLineInfoList (F, Obj, &I->DefLines);
-    ReadLineInfoList (F, Obj, &I->RefLines);
-
-    /* Check the address size */
-    if (I->AddrSize == ADDR_SIZE_DEFAULT || I->AddrSize > ADDR_SIZE_LONG) {
-        /* Beware: This function may be called in cases where the object file
-        ** is not read completely into memory. In this case, the file list is
-        ** invalid. Be sure not to access it in this case.
-        */
-        if (ObjHasFiles (I->Obj)) {
-            const LineInfo* LI = GetImportPos (I);
-            Error ("Invalid import size in for `%s', imported from %s(%u): 0x%02X",
-                   GetString (I->Name),
-                   GetSourceName (LI),
-                   GetSourceLine (LI),
-                   I->AddrSize);
-        } else {
-            Error ("Invalid import size in for `%s', imported from %s: 0x%02X",
-                   GetString (I->Name),
-                   GetObjFileName (I->Obj),
-                   I->AddrSize);
-        }
-    }
-
-    /* Return the new import */
-    return I;
-}
-
-
-
-Import* GenImport (unsigned Name, unsigned char AddrSize)
-/* Generate a new import with the given name and address size and return it */
-{
-    /* Create a new import */
-    Import* I = NewImport (AddrSize, 0);
-
-    /* Read the name */
-    I->Name = Name;
-
-    /* Check the address size */
-    if (I->AddrSize == ADDR_SIZE_DEFAULT || I->AddrSize > ADDR_SIZE_LONG) {
-        /* We have no object file information and no line info for a new
-        ** import
-        */
-        Error ("Invalid import size 0x%02X for symbol `%s'",
-               I->AddrSize,
-               GetString (I->Name));
-    }
-
-    /* Return the new import */
-    return I;
-}
-
-
-
-Import* InsertImport (Import* I)
-/* Insert an import into the table, return I */
-{
-    Export* E;
-
-    /* As long as the import is not inserted, V.Name is valid */
-    unsigned Name = I->Name;
-
-    /* Create a hash value for the given name */
-    unsigned Hash = (Name & HASHTAB_MASK);
-
-    /* Search through the list in that slot for a symbol with that name */
-    if (HashTab[Hash] == 0) {
-        /* The slot is empty, we need to insert a dummy export */
-        E = HashTab[Hash] = NewExport (0, ADDR_SIZE_DEFAULT, Name, 0);
-        ++ExpCount;
-    } else {
-        E = HashTab [Hash];
-        while (1) {
-            if (E->Name == Name) {
-                /* We have an entry, L points to it */
-                break;
-            }
-            if (E->Next == 0) {
-                /* End of list an entry not found, insert a dummy */
-                E->Next = NewExport (0, ADDR_SIZE_DEFAULT, Name, 0);
-                E = E->Next;            /* Point to dummy */
-                ++ExpCount;             /* One export more */
-                break;
-            } else {
-                E = E->Next;
-            }
-        }
-    }
-
-    /* Ok, E now points to a valid exports entry for the given import. Insert
-    ** the import into the imports list and update the counters.
-    */
-    I->Exp     = E;
-    I->Next    = E->ImpList;
-    E->ImpList = I;
-    E->ImpCount++;
-    ++ImpCount;                 /* Total import count */
-    if (E->Expr == 0) {
-        /* This is a dummy export */
-        ++ImpOpen;
-    }
-
-    /* Mark the import so we know it's in the list */
-    I->Flags |= IMP_INLIST;
-
-    /* Return the import to allow shorter code */
-    return I;
-}
-
-
-
-const LineInfo* GetImportPos (const Import* Imp)
-/* Return the basic line info of an import */
-{
-    /* Search in DefLines, then in RefLines */
-    const LineInfo* LI = GetAsmLineInfo (&Imp->DefLines);
-    if (LI == 0) {
-        LI = GetAsmLineInfo (&Imp->RefLines);
-    }
-    return LI;
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static Export* NewExport (unsigned Type, unsigned char AddrSize,
-                          unsigned Name, ObjData* Obj)
-/* Create a new export and initialize it */
-{
-    unsigned I;
-
-    /* Allocate memory */
-    Export* E = xmalloc (sizeof (Export));
-
-    /* Initialize the fields */
-    E->Name      = Name;
-    E->Next      = 0;
-    E->Flags     = 0;
-    E->Obj       = Obj;
-    E->ImpCount  = 0;
-    E->ImpList   = 0;
-    E->Expr      = 0;
-    E->Size      = 0;
-    E->DefLines  = EmptyCollection;
-    E->RefLines  = EmptyCollection;
-    E->DbgSymId  = ~0U;
-    E->Type      = Type | SYM_EXPORT;
-    E->AddrSize  = AddrSize;
-    for (I = 0; I < sizeof (E->ConDes) / sizeof (E->ConDes[0]); ++I) {
-        E->ConDes[I] = CD_PRIO_NONE;
-    }
-
-    /* Return the new entry */
-    return E;
-}
-
-
-
-void FreeExport (Export* E)
-/* Free an export. NOTE: This won't remove the export from the exports table,
-** so it may only be called for unused exports (exports from modules that
-** aren't referenced).
-*/
-{
-    /* Safety */
-    PRECONDITION ((E->Flags & EXP_INLIST) == 0);
-
-    /* Free the line infos */
-    DoneCollection (&E->DefLines);
-    DoneCollection (&E->RefLines);
-
-    /* Free the export expression */
-    FreeExpr (E->Expr);
-
-    /* Free the struct */
-    xfree (E);
-}
-
-
-
-Export* ReadExport (FILE* F, ObjData* O)
-/* Read an export from a file */
-{
-    unsigned    ConDesCount;
-    unsigned    I;
-    Export*     E;
-
-    /* Read the type */
-    unsigned Type = ReadVar (F);
-
-    /* Read the address size */
-    unsigned char AddrSize = Read8 (F);
-
-    /* Create a new export without a name */
-    E = NewExport (Type, AddrSize, INVALID_STRING_ID, O);
-
-    /* Read the constructor/destructor decls if we have any */
-    ConDesCount = SYM_GET_CONDES_COUNT (Type);
-    if (ConDesCount > 0) {
-
-        unsigned char ConDes[CD_TYPE_COUNT];
-
-        /* Read the data into temp storage */
-        ReadData (F, ConDes, ConDesCount);
-
-        /* Re-order the data. In the file, each decl is encoded into a byte
-        ** which contains the type and the priority. In memory, we will use
-        ** an array of types which contain the priority.
-        */
-        for (I = 0; I < ConDesCount; ++I) {
-            E->ConDes[CD_GET_TYPE (ConDes[I])] = CD_GET_PRIO (ConDes[I]);
-        }
-    }
-
-    /* Read the name */
-    E->Name = MakeGlobalStringId (O, ReadVar (F));
-
-    /* Read the value */
-    if (SYM_IS_EXPR (Type)) {
-        E->Expr = ReadExpr (F, O);
-    } else {
-        E->Expr = LiteralExpr (Read32 (F), O);
-    }
-
-    /* Read the size */
-    if (SYM_HAS_SIZE (Type)) {
-        E->Size = ReadVar (F);
-    }
-
-    /* Last are the locations */
-    ReadLineInfoList (F, O, &E->DefLines);
-    ReadLineInfoList (F, O, &E->RefLines);
-
-    /* If this symbol is exported as a condes, and the condes type declares a
-    ** forced import, add this import to the object module.
-    */
-    for (I = 0; I < CD_TYPE_COUNT; ++I) {
-        const ConDesImport* CDI;
-
-        if (E->ConDes[I] != CD_PRIO_NONE && (CDI = ConDesGetImport (I)) != 0) {
-            unsigned J;
-
-            /* Generate a new import, and add it to the module's import list. */
-            Import* Imp = GenImport (CDI->Name, CDI->AddrSize);
-
-            Imp->Obj = O;
-            CollAppend (&O->Imports, Imp);
-
-            /* Add line info for the export that is actually the condes that
-            ** forces the import.  Then, add line info for the config. file.
-            ** The export's info is added first because the import pretends
-            ** that it came from the object module instead of the config. file.
-            */
-            for (J = 0; J < CollCount (&E->DefLines); ++J) {
-                CollAppend (&Imp->RefLines, DupLineInfo (CollAt (&E->DefLines, J)));
-            }
-            CollAppend (&Imp->RefLines, GenLineInfo (&CDI->Pos));
-        }
-    }
-
-    /* Return the new export */
-    return E;
-}
-
-
-
-void InsertExport (Export* E)
-/* Insert an exported identifier and check if it's already in the list */
-{
-    Export* L;
-    Export* Last;
-    Import* Imp;
-    unsigned Hash;
-
-    /* Mark the export as inserted */
-    E->Flags |= EXP_INLIST;
-
-    /* Insert the export into any condes tables if needed */
-    if (SYM_IS_CONDES (E->Type)) {
-        ConDesAddExport (E);
-    }
-
-    /* Create a hash value for the given name */
-    Hash = (E->Name & HASHTAB_MASK);
-
-    /* Search through the list in that slot */
-    if (HashTab[Hash] == 0) {
-        /* The slot is empty */
-        HashTab[Hash] = E;
-        ++ExpCount;
-    } else {
-
-        Last = 0;
-        L = HashTab[Hash];
-        do {
-            if (L->Name == E->Name) {
-                /* This may be an unresolved external */
-                if (L->Expr == 0) {
-
-                    /* This *is* an unresolved external. Use the actual export
-                    ** in E instead of the dummy one in L.
-                    */
-                    E->Next     = L->Next;
-                    E->ImpCount = L->ImpCount;
-                    E->ImpList  = L->ImpList;
-                    if (Last) {
-                        Last->Next = E;
-                    } else {
-                        HashTab[Hash] = E;
-                    }
-                    ImpOpen -= E->ImpCount;     /* Decrease open imports now */
-                    xfree (L);
-                    /* We must run through the import list and change the
-                    ** export pointer now.
-                    */
-                    Imp = E->ImpList;
-                    while (Imp) {
-                        Imp->Exp = E;
-                        Imp = Imp->Next;
-                    }
-                } else {
-                    /* Duplicate entry, ignore it */
-                    Warning ("Duplicate external identifier: `%s'",
-                             GetString (L->Name));
-                }
-                return;
-            }
-            Last = L;
-            L = L->Next;
-
-        } while (L);
-
-        /* Insert export at end of queue */
-        Last->Next = E;
-        ++ExpCount;
-    }
-}
-
-
-
-const LineInfo* GetExportPos (const Export* E)
-/* Return the basic line info of an export */
-{
-    /* Search in DefLines, then in RefLines */
-    const LineInfo* LI = GetAsmLineInfo (&E->DefLines);
-    if (LI == 0) {
-        LI = GetAsmLineInfo (&E->RefLines);
-    }
-    return LI;
-}
-
-
-
-Export* CreateConstExport (unsigned Name, long Value)
-/* Create an export for a literal date */
-{
-    /* Create a new export */
-    Export* E = NewExport (SYM_CONST|SYM_EQUATE, ADDR_SIZE_ABS, Name, 0);
-
-    /* Assign the value */
-    E->Expr = LiteralExpr (Value, 0);
-
-    /* Insert the export */
-    InsertExport (E);
-
-    /* Return the new export */
-    return E;
-}
-
-
-
-Export* CreateExprExport (unsigned Name, ExprNode* Expr, unsigned char AddrSize)
-/* Create an export for an expression */
-{
-    /* Create a new export */
-    Export* E = NewExport (SYM_EXPR|SYM_EQUATE, AddrSize, Name, 0);
-
-    /* Assign the value expression */
-    E->Expr = Expr;
-
-    /* Insert the export */
-    InsertExport (E);
-
-    /* Return the new export */
-    return E;
-}
-
-
-
-Export* CreateMemoryExport (unsigned Name, MemoryArea* Mem, unsigned long Offs)
-/* Create an relative export for a memory area offset */
-{
-    /* Create a new export */
-    Export* E = NewExport (SYM_EXPR | SYM_LABEL, ADDR_SIZE_ABS, Name, 0);
-
-    /* Assign the value */
-    E->Expr = MemoryExpr (Mem, Offs, 0);
-
-    /* Insert the export */
-    InsertExport (E);
-
-    /* Return the new export */
-    return E;
-}
-
-
-
-Export* CreateSegmentExport (unsigned Name, Segment* Seg, unsigned long Offs)
-/* Create a relative export to a segment */
-{
-    /* Create a new export */
-    Export* E = NewExport (SYM_EXPR | SYM_LABEL, Seg->AddrSize, Name, 0);
-
-    /* Assign the value */
-    E->Expr = SegmentExpr (Seg, Offs, 0);
-
-    /* Insert the export */
-    InsertExport (E);
-
-    /* Return the new export */
-    return E;
-}
-
-
-
-Export* CreateSectionExport (unsigned Name, Section* Sec, unsigned long Offs)
-/* Create a relative export to a section */
-{
-    /* Create a new export */
-    Export* E = NewExport (SYM_EXPR | SYM_LABEL, Sec->AddrSize, Name, 0);
-
-    /* Assign the value */
-    E->Expr = SectionExpr (Sec, Offs, 0);
-
-    /* Insert the export */
-    InsertExport (E);
-
-    /* Return the new export */
-    return E;
-}
-
-
-
-Export* FindExport (unsigned Name)
-/* Check for an identifier in the list. Return 0 if not found, otherwise
-** return a pointer to the export.
-*/
-{
-    /* Get a pointer to the list with the symbols hash value */
-    Export* L = HashTab[Name & HASHTAB_MASK];
-    while (L) {
-        /* Search through the list in that slot */
-        if (L->Name == Name) {
-            /* Entry found */
-            return L;
-        }
-        L = L->Next;
-    }
-
-    /* Not found */
-    return 0;
-}
-
-
-
-int IsUnresolved (unsigned Name)
-/* Check if this symbol is an unresolved export */
-{
-    /* Find the export */
-    return IsUnresolvedExport (FindExport (Name));
-}
-
-
-
-int IsUnresolvedExport (const Export* E)
-/* Return true if the given export is unresolved */
-{
-    /* Check if it's unresolved */
-    return E != 0 && E->Expr == 0;
-}
-
-
-
-int IsConstExport (const Export* E)
-/* Return true if the expression associated with this export is const */
-{
-    if (E->Expr == 0) {
-        /* External symbols cannot be const */
-        return 0;
-    } else {
-        return IsConstExpr (E->Expr);
-    }
-}
-
-
-
-long GetExportVal (const Export* E)
-/* Get the value of this export */
-{
-    if (E->Expr == 0) {
-        /* OOPS */
-        Internal ("`%s' is an undefined external", GetString (E->Name));
-    }
-    return GetExprVal (E->Expr);
-}
-
-
-
-static void CheckSymType (const Export* E)
-/* Check the types for one export */
-{
-    /* External with matching imports */
-    Import* I = E->ImpList;
-    while (I) {
-        if (E->AddrSize != I->AddrSize) {
-            /* Export and import address sizes do not match */
-            StrBuf ExportLoc = STATIC_STRBUF_INITIALIZER;
-            StrBuf ImportLoc = STATIC_STRBUF_INITIALIZER;
-            const char* ExpAddrSize = AddrSizeToStr ((unsigned char) E->AddrSize);
-            const char* ImpAddrSize = AddrSizeToStr ((unsigned char) I->AddrSize);
-            const LineInfo* ExportLI = GetExportPos (E);
-            const LineInfo* ImportLI = GetImportPos (I);
-
-            /* Generate strings that describe the location of the im- and
-            ** exports. This depends on the place from where they come:
-            ** Object file or linker config.
-            */
-            if (E->Obj) {
-                /* The export comes from an object file */
-                SB_Printf (&ExportLoc, "%s, %s(%u)",
-                           GetString (E->Obj->Name),
-                           GetSourceName (ExportLI),
-                           GetSourceLine (ExportLI));
-            } else {
-                SB_Printf (&ExportLoc, "%s(%u)",
-                           GetSourceName (ExportLI),
-                           GetSourceLine (ExportLI));
-            }
-            if (I->Obj) {
-                /* The import comes from an object file */
-                SB_Printf (&ImportLoc, "%s, %s(%u)",
-                           GetString (I->Obj->Name),
-                           GetSourceName (ImportLI),
-                           GetSourceLine (ImportLI));
-            } else if (ImportLI) {
-                /* The import is linker generated and we have line
-                ** information
-                */
-                SB_Printf (&ImportLoc, "%s(%u)",
-                           GetSourceName (ImportLI),
-                           GetSourceLine (ImportLI));
-            } else {
-                /* The import is linker generated and we don't have line
-                ** information
-                */
-                SB_Printf (&ImportLoc, "%s", GetObjFileName (I->Obj));
-            }
-
-            /* Output the diagnostic */
-            Warning ("Address size mismatch for `%s': "
-                     "Exported from %s as `%s', "
-                     "import in %s as `%s'",
-                     GetString (E->Name),
-                     SB_GetConstBuf (&ExportLoc),
-                     ExpAddrSize,
-                     SB_GetConstBuf (&ImportLoc),
-                     ImpAddrSize);
-
-            /* Free the temporary strings */
-            SB_Done (&ExportLoc);
-            SB_Done (&ImportLoc);
-        }
-        I = I->Next;
-    }
-}
-
-
-
-static void CheckSymTypes (void)
-/* Check for symbol tape mismatches */
-{
-    unsigned I;
-
-    /* Print all open imports */
-    for (I = 0; I < ExpCount; ++I) {
-        const Export* E = ExpPool [I];
-        if (E->Expr != 0 && E->ImpCount > 0) {
-            /* External with matching imports */
-            CheckSymType (E);
-        }
-    }
-}
-
-
-
-static void PrintUnresolved (ExpCheckFunc F, void* Data)
-/* Print a list of unresolved symbols. On unresolved symbols, F is
-** called (see the comments on ExpCheckFunc in the data section).
-*/
-{
-    unsigned I;
-
-    /* Print all open imports */
-    for (I = 0; I < ExpCount; ++I) {
-        Export* E = ExpPool [I];
-        if (E->Expr == 0 && E->ImpCount > 0 && F (E->Name, Data) == 0) {
-            /* Unresolved external */
-            Import* Imp = E->ImpList;
-            fprintf (stderr,
-                     "Unresolved external `%s' referenced in:\n",
-                     GetString (E->Name));
-            while (Imp) {
-                unsigned J;
-                for (J = 0; J < CollCount (&Imp->RefLines); ++J) {
-                    const LineInfo* LI = CollConstAt (&Imp->RefLines, J);
-                    fprintf (stderr,
-                         "  %s(%u)\n",
-                         GetSourceName (LI),
-                         GetSourceLine (LI));
-                }
-                Imp = Imp->Next;
-            }
-        }
-    }
-}
-
-
-
-static int CmpExpName (const void* K1, const void* K2)
-/* Compare function for qsort */
-{
-    return SB_Compare (GetStrBuf ((*(Export**)K1)->Name),
-                       GetStrBuf ((*(Export**)K2)->Name));
-}
-
-
-
-static void CreateExportPool (void)
-/* Create an array with pointer to all exports */
-{
-    unsigned I, J;
-
-    /* Allocate memory */
-    if (ExpPool) {
-        xfree (ExpPool);
-    }
-    ExpPool = xmalloc (ExpCount * sizeof (Export*));
-
-    /* Walk through the list and insert the exports */
-    for (I = 0, J = 0; I < sizeof (HashTab) / sizeof (HashTab [0]); ++I) {
-        Export* E = HashTab[I];
-        while (E) {
-            CHECK (J < ExpCount);
-            ExpPool[J++] = E;
-            E = E->Next;
-        }
-    }
-
-    /* Sort them by name */
-    qsort (ExpPool, ExpCount, sizeof (Export*), CmpExpName);
-}
-
-
-
-void CheckExports (void)
-/* Setup the list of all exports and check for export/import symbol type
-** mismatches.
-*/
-{
-    /* Create an export pool */
-    CreateExportPool ();
-
-    /* Check for symbol type mismatches */
-    CheckSymTypes ();
-}
-
-
-
-void CheckUnresolvedImports (ExpCheckFunc F, void* Data)
-/* Check if there are any unresolved imports. On unresolved imports, F is
-** called (see the comments on ExpCheckFunc in the data section).
-*/
-{
-    /* Check for unresolved externals */
-    if (ImpOpen != 0) {
-        /* Print all open imports */
-        PrintUnresolved (F, Data);
-    }
-}
-
-
-
-static char GetAddrSizeCode (unsigned char AddrSize)
-/* Get a one char code for the address size */
-{
-    switch (AddrSize) {
-        case ADDR_SIZE_ZP:      return 'Z';
-        case ADDR_SIZE_ABS:     return 'A';
-        case ADDR_SIZE_FAR:     return 'F';
-        case ADDR_SIZE_LONG:    return 'L';
-        default:
-            Internal ("Invalid address size: %u", AddrSize);
-            /* NOTREACHED */
-            return '-';
-    }
-}
-
-
-
-void PrintExportMapByName (FILE* F)
-/* Print an export map, sorted by symbol name, to the given file */
-{
-    unsigned I;
-    unsigned Count;
-
-    /* Print all exports */
-    Count = 0;
-    for (I = 0; I < ExpCount; ++I) {
-        const Export* E = ExpPool [I];
-
-        /* Print unreferenced symbols only if explictly requested */
-        if (VerboseMap || E->ImpCount > 0 || SYM_IS_CONDES (E->Type)) {
-            fprintf (F,
-                     "%-25s %06lX %c%c%c%c   ",
-                     GetString (E->Name),
-                     GetExportVal (E),
-                     E->ImpCount? 'R' : ' ',
-                     SYM_IS_LABEL (E->Type)? 'L' : 'E',
-                     GetAddrSizeCode ((unsigned char) E->AddrSize),
-                     SYM_IS_CONDES (E->Type)? 'I' : ' ');
-            if (++Count == 2) {
-                Count = 0;
-                fprintf (F, "\n");
-            }
-        }
-    }
-    fprintf (F, "\n");
-}
-
-
-
-static int CmpExpValue (const void* I1, const void* I2)
-/* Compare function for qsort */
-{
-    long V1 = GetExportVal (ExpPool [*(unsigned *)I1]);
-    long V2 = GetExportVal (ExpPool [*(unsigned *)I2]);
-
-    return V1 < V2 ? -1 : V1 == V2 ? 0 : 1;
-}
-
-
-
-void PrintExportMapByValue (FILE* F)
-/* Print an export map, sorted by symbol value, to the given file */
-{
-    unsigned I;
-    unsigned Count;
-    unsigned *ExpValXlat;
-
-    /* Create a translation table where the symbols are sorted by value. */
-    ExpValXlat = xmalloc (ExpCount * sizeof (unsigned));
-    for (I = 0; I < ExpCount; ++I) {
-        /* Initialize table with current sort order.  */
-        ExpValXlat [I] = I;
-    }
-
-    /* Sort them by value */
-    qsort (ExpValXlat, ExpCount, sizeof (unsigned), CmpExpValue);
-
-    /* Print all exports */
-    Count = 0;
-    for (I = 0; I < ExpCount; ++I) {
-        const Export* E = ExpPool [ExpValXlat [I]];
-
-        /* Print unreferenced symbols only if explictly requested */
-        if (VerboseMap || E->ImpCount > 0 || SYM_IS_CONDES (E->Type)) {
-            fprintf (F,
-                     "%-25s %06lX %c%c%c%c   ",
-                     GetString (E->Name),
-                     GetExportVal (E),
-                     E->ImpCount? 'R' : ' ',
-                     SYM_IS_LABEL (E->Type)? 'L' : 'E',
-                     GetAddrSizeCode ((unsigned char) E->AddrSize),
-                     SYM_IS_CONDES (E->Type)? 'I' : ' ');
-            if (++Count == 2) {
-                Count = 0;
-                fprintf (F, "\n");
-            }
-        }
-    }
-    fprintf (F, "\n");
-    xfree (ExpValXlat);
-}
-
-
-
-void PrintImportMap (FILE* F)
-/* Print an import map to the given file */
-{
-    unsigned I;
-    const Import* Imp;
-
-    /* Loop over all exports */
-    for (I = 0; I < ExpCount; ++I) {
-
-        /* Get the export */
-        const Export* Exp = ExpPool [I];
-
-        /* Print the symbol only if there are imports, or if a verbose map
-        ** file is requested.
-        */
-        if (VerboseMap || Exp->ImpCount > 0) {
-
-            /* Print the export */
-            fprintf (F,
-                     "%s (%s):\n",
-                     GetString (Exp->Name),
-                     GetObjFileName (Exp->Obj));
-
-            /* Print all imports for this symbol */
-            Imp = Exp->ImpList;
-            while (Imp) {
-
-                /* Print the import. Beware: The import might be linker
-                ** generated, in which case there is no object file and
-                ** sometimes no line information.
-                */
-                const LineInfo* LI = GetImportPos (Imp);
-                if (LI) {
-                    fprintf (F,
-                             "    %-25s %s(%u)\n",
-                             GetObjFileName (Imp->Obj),
-                             GetSourceName (LI),
-                             GetSourceLine (LI));
-                } else {
-                    fprintf (F,
-                             "    %-25s\n",
-                             GetObjFileName (Imp->Obj));
-                }
-
-                /* Next import */
-                Imp = Imp->Next;
-            }
-        }
-    }
-    fprintf (F, "\n");
-}
-
-
-
-void PrintExportLabels (FILE* F)
-/* Print the exports in a VICE label file */
-{
-    unsigned I;
-
-    /* Print all exports */
-    for (I = 0; I < ExpCount; ++I) {
-        const Export* E = ExpPool [I];
-        fprintf (F, "al %06lX .%s\n", GetExportVal (E), GetString (E->Name));
-    }
-}
-
-
-
-void MarkExport (Export* E)
-/* Mark the export */
-{
-    E->Flags |= EXP_USERMARK;
-}
-
-
-
-void UnmarkExport (Export* E)
-/* Remove the mark from the export */
-{
-    E->Flags &= ~EXP_USERMARK;
-}
-
-
-
-int ExportHasMark (Export* E)
-/* Return true if the export has a mark */
-{
-    return (E->Flags & EXP_USERMARK) != 0;
-}
-
-
-
-void CircularRefError (const Export* E)
-/* Print an error about a circular reference using to define the given export */
-{
-    const LineInfo* LI = GetExportPos (E);
-    Error ("Circular reference for symbol `%s', %s(%u)",
-           GetString (E->Name),
-           GetSourceName (LI),
-           GetSourceLine (LI));
-}
diff --git a/src/ld65/exports.h b/src/ld65/exports.h
deleted file mode 100644 (file)
index d69e6d7..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 exports.h                                 */
-/*                                                                           */
-/*                    Exports handing for the ld65 linker                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef EXPORTS_H
-#define EXPORTS_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "cddefs.h"
-#include "coll.h"
-#include "exprdefs.h"
-
-/* ld65 */
-#include "config.h"
-#include "lineinfo.h"
-#include "memarea.h"
-#include "objdata.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Import symbol structure */
-typedef struct Import Import;
-struct Import {
-    Import*             Next;           /* Single linked list */
-    ObjData*            Obj;            /* Object file that imports the name */
-    Collection          DefLines;       /* Line infos of definition */
-    Collection          RefLines;       /* Line infos of reference */
-    struct Export*      Exp;            /* Matching export for this import */
-    unsigned            Name;           /* Name if not in table */
-    unsigned short      Flags;          /* Generic flags */
-    unsigned short      AddrSize;       /* Address size of import */
-};
-
-
-
-/* Export symbol structure */
-typedef struct Export Export;
-struct Export {
-    unsigned            Name;           /* Name */
-    Export*             Next;           /* Hash table link */
-    unsigned            Flags;          /* Generic flags */
-    ObjData*            Obj;            /* Object file that exports the name */
-    unsigned            ImpCount;       /* How many imports for this symbol? */
-    Import*             ImpList;        /* List of imports for this symbol */
-    ExprNode*           Expr;           /* Expression (0 if not def'd) */
-    unsigned            Size;           /* Size of the symbol if any */
-    Collection          DefLines;       /* Line infos of definition */
-    Collection          RefLines;       /* Line infos of reference */
-    unsigned            DbgSymId;       /* Id of debug symbol for this export */
-    unsigned short      Type;           /* Type of export */
-    unsigned short      AddrSize;       /* Address size of export */
-    unsigned char       ConDes[CD_TYPE_COUNT];  /* Constructor/destructor decls */
-};
-
-
-
-/* Prototype of a function that is called if an undefined symbol is found. It
-** may check if the symbol is an external symbol (for binary formats that
-** support externals) and will return zero if the symbol could not be
-** resolved, or a value != zero if the symbol could be resolved. The
-** CheckExports routine will print out the missing symbol in the first case.
-*/
-typedef int (*ExpCheckFunc) (unsigned Name, void* Data);
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void FreeImport (Import* I);
-/* Free an import. NOTE: This won't remove the import from the exports table,
-** so it may only be called for unused imports (imports from modules that
-** aren't referenced).
-*/
-
-Import* ReadImport (FILE* F, ObjData* Obj);
-/* Read an import from a file and insert it into the table */
-
-Import* GenImport (unsigned Name, unsigned char AddrSize);
-/* Generate a new import with the given name and address size and return it */
-
-Import* InsertImport (Import* I);
-/* Insert an import into the table, return I */
-
-const LineInfo* GetImportPos (const Import* I);
-/* Return the basic line info of an import */
-
-void FreeExport (Export* E);
-/* Free an export. NOTE: This won't remove the export from the exports table,
-** so it may only be called for unused exports (exports from modules that
-** aren't referenced).
-*/
-
-Export* ReadExport (FILE* F, ObjData* Obj);
-/* Read an export from a file */
-
-void InsertExport (Export* E);
-/* Insert an exported identifier and check if it's already in the list */
-
-const LineInfo* GetExportPos (const Export* E);
-/* Return the basic line info of an export */
-
-Export* CreateConstExport (unsigned Name, long Value);
-/* Create an export for a literal date */
-
-Export* CreateExprExport (unsigned Name, ExprNode* Expr, unsigned char AddrSize);
-/* Create an export for an expression */
-
-Export* CreateMemoryExport (unsigned Name, MemoryArea* Mem, unsigned long Offs);
-/* Create an relative export for a memory area offset */
-
-Export* CreateSegmentExport (unsigned Name, Segment* Seg, unsigned long Offs);
-/* Create a relative export to a segment */
-
-Export* CreateSectionExport (unsigned Name, Section* S, unsigned long Offs);
-/* Create a relative export to a section */
-
-Export* FindExport (unsigned Name);
-/* Check for an identifier in the list. Return 0 if not found, otherwise
-** return a pointer to the export.
-*/
-
-int IsUnresolved (unsigned Name);
-/* Check if this symbol is an unresolved export */
-
-int IsUnresolvedExport (const Export* E);
-/* Return true if the given export is unresolved */
-
-int IsConstExport (const Export* E);
-/* Return true if the expression associated with this export is const */
-
-long GetExportVal (const Export* E);
-/* Get the value of this export */
-
-void CheckExports (void);
-/* Setup the list of all exports and check for export/import symbol type
-** mismatches.
-*/
-
-void CheckUnresolvedImports (ExpCheckFunc F, void* Data);
-/* Check if there are any unresolved imports. On unresolved imports, F is
-** called (see the comments on ExpCheckFunc in the data section).
-*/
-
-void PrintExportMapByName (FILE* F);
-/* Print an export map to the given file (sorted by symbol name) */
-
-void PrintExportMapByValue (FILE* F);
-/* Print an export map to the given file (sorted by export value) */
-
-void PrintImportMap (FILE* F);
-/* Print an import map to the given file */
-
-void PrintExportLabels (FILE* F);
-/* Print the exports in a VICE label file */
-
-void MarkExport (Export* E);
-/* Mark the export */
-
-void UnmarkExport (Export* E);
-/* Remove the mark from the export */
-
-int ExportHasMark (Export* E);
-/* Return true if the export has a mark */
-
-void CircularRefError (const Export* E);
-/* Print an error about a circular reference using to define the given export */
-
-
-
-/* End of exports.h */
-
-#endif
diff --git a/src/ld65/expr.c b/src/ld65/expr.c
deleted file mode 100644 (file)
index efdff89..0000000
+++ /dev/null
@@ -1,716 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  expr.c                                   */
-/*                                                                           */
-/*                 Expression evaluation for the ld65 linker                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "check.h"
-#include "exprdefs.h"
-#include "xmalloc.h"
-
-/* ld65 */
-#include "global.h"
-#include "error.h"
-#include "fileio.h"
-#include "memarea.h"
-#include "segments.h"
-#include "expr.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-ExprNode* NewExprNode (ObjData* O, unsigned char Op)
-/* Create a new expression node */
-{
-    /* Allocate fresh memory */
-    ExprNode* N = xmalloc (sizeof (ExprNode));
-    N->Op       = Op;
-    N->Left     = 0;
-    N->Right    = 0;
-    N->Obj      = O;
-    N->V.IVal   = 0;
-
-    return N;
-}
-
-
-
-static void FreeExprNode (ExprNode* E)
-/* Free a node */
-{
-    /* Free the memory */
-    xfree (E);
-}
-
-
-
-void FreeExpr (ExprNode* Root)
-/* Free the expression, Root is pointing to. */
-{
-    if (Root) {
-        FreeExpr (Root->Left);
-        FreeExpr (Root->Right);
-        FreeExprNode (Root);
-    }
-}
-
-
-
-int IsConstExpr (ExprNode* Root)
-/* Return true if the given expression is a constant expression, that is, one
-** with no references to external symbols.
-*/
-{
-    int         Const;
-    Export*     E;
-    Section*    S;
-    MemoryArea* M;
-
-    if (EXPR_IS_LEAF (Root->Op)) {
-        switch (Root->Op) {
-
-            case EXPR_LITERAL:
-                return 1;
-
-            case EXPR_SYMBOL:
-                /* Get the referenced export */
-                E = GetExprExport (Root);
-                /* If this export has a mark set, we've already encountered it.
-                ** This means that the export is used to define it's own value,
-                ** which in turn means, that we have a circular reference.
-                */
-                if (ExportHasMark (E)) {
-                    CircularRefError (E);
-                    Const = 0;
-                } else {
-                    MarkExport (E);
-                    Const = IsConstExport (E);
-                    UnmarkExport (E);
-                }
-                return Const;
-
-            case EXPR_SECTION:
-                /* A section expression is const if the segment it is in is
-                ** not relocatable and already placed.
-                */
-                S = GetExprSection (Root);
-                M = S->Seg->MemArea;
-                return M != 0 && (M->Flags & MF_PLACED) != 0 && !M->Relocatable;
-
-            case EXPR_SEGMENT:
-                /* A segment is const if it is not relocatable and placed */
-                M = Root->V.Seg->MemArea;
-                return M != 0 && (M->Flags & MF_PLACED) != 0 && !M->Relocatable;
-
-            case EXPR_MEMAREA:
-                /* A memory area is const if it is not relocatable and placed */
-                return !Root->V.Mem->Relocatable &&
-                       (Root->V.Mem->Flags & MF_PLACED);
-
-            default:
-                /* Anything else is not const */
-                return 0;
-
-        }
-
-    } else if (EXPR_IS_UNARY (Root->Op)) {
-
-        SegExprDesc D;
-
-        /* Special handling for the BANK pseudo function */
-        switch (Root->Op) {
-
-            case EXPR_BANK:
-                /* Get segment references for the expression */
-                GetSegExprVal (Root->Left, &D);
-
-                /* The expression is const if the expression contains exactly
-                ** one segment that is assigned to a memory area which has a
-                ** bank attribute that is constant.
-                */
-                return (D.TooComplex              == 0  &&
-                        D.Seg                     != 0  &&
-                        D.Seg->MemArea            != 0  &&
-                        D.Seg->MemArea->BankExpr  != 0  &&
-                        IsConstExpr (D.Seg->MemArea->BankExpr));
-
-            default:
-                /* All others handled normal */
-                return IsConstExpr (Root->Left);
-
-        }
-
-    } else {
-
-        /* We must handle shortcut boolean expressions here */
-        switch (Root->Op) {
-
-            case EXPR_BOOLAND:
-                if (IsConstExpr (Root->Left)) {
-                    /* lhs is const, if it is zero, don't eval right */
-                    if (GetExprVal (Root->Left) == 0) {
-                        return 1;
-                    } else {
-                        return IsConstExpr (Root->Right);
-                    }
-                } else {
-                    /* lhs not const --> tree not const */
-                    return 0;
-                }
-                break;
-
-            case EXPR_BOOLOR:
-                if (IsConstExpr (Root->Left)) {
-                    /* lhs is const, if it is not zero, don't eval right */
-                    if (GetExprVal (Root->Left) != 0) {
-                        return 1;
-                    } else {
-                        return IsConstExpr (Root->Right);
-                    }
-                } else {
-                    /* lhs not const --> tree not const */
-                    return 0;
-                }
-                break;
-
-            default:
-                /* All others are handled normal */
-                return IsConstExpr (Root->Left) && IsConstExpr (Root->Right);
-        }
-    }
-}
-
-
-
-Import* GetExprImport (ExprNode* Expr)
-/* Get the import data structure for a symbol expression node */
-{
-    /* Check that this is really a symbol */
-    PRECONDITION (Expr->Op == EXPR_SYMBOL);
-
-    /* If we have an object file, get the import from it, otherwise
-    ** (internally generated expressions), get the import from the
-    ** import pointer.
-    */
-    if (Expr->Obj) {
-        /* Return the Import */
-        return GetObjImport (Expr->Obj, Expr->V.ImpNum);
-    } else {
-        return Expr->V.Imp;
-    }
-}
-
-
-
-Export* GetExprExport (ExprNode* Expr)
-/* Get the exported symbol for a symbol expression node */
-{
-    /* Check that this is really a symbol */
-    PRECONDITION (Expr->Op == EXPR_SYMBOL);
-
-    /* Return the export for an import*/
-    return GetExprImport (Expr)->Exp;
-}
-
-
-
-Section* GetExprSection (ExprNode* Expr)
-/* Get the segment for a section expression node */
-{
-    /* Check that this is really a section node */
-    PRECONDITION (Expr->Op == EXPR_SECTION);
-
-    /* If we have an object file, get the section from it, otherwise
-    ** (internally generated expressions), get the section from the
-    ** section pointer.
-    */
-    if (Expr->Obj) {
-        /* Return the export */
-        return CollAt (&Expr->Obj->Sections, Expr->V.SecNum);
-    } else {
-        return Expr->V.Sec;
-    }
-}
-
-
-
-long GetExprVal (ExprNode* Expr)
-/* Get the value of a constant expression */
-{
-    long        Right;
-    long        Left;
-    long        Val;
-    Section*    S;
-    Export*     E;
-    SegExprDesc D;
-
-    switch (Expr->Op) {
-
-        case EXPR_LITERAL:
-            return Expr->V.IVal;
-
-        case EXPR_SYMBOL:
-            /* Get the referenced export */
-            E = GetExprExport (Expr);
-            /* If this export has a mark set, we've already encountered it.
-            ** This means that the export is used to define it's own value,
-            ** which in turn means, that we have a circular reference.
-            */
-            if (ExportHasMark (E)) {
-                CircularRefError (E);
-                Val = 0;
-            } else {
-                MarkExport (E);
-                Val = GetExportVal (E);
-                UnmarkExport (E);
-            }
-            return Val;
-
-        case EXPR_SECTION:
-            S = GetExprSection (Expr);
-            return S->Offs + S->Seg->PC;
-
-        case EXPR_SEGMENT:
-            return Expr->V.Seg->PC;
-
-        case EXPR_MEMAREA:
-            return Expr->V.Mem->Start;
-
-        case EXPR_PLUS:
-            return GetExprVal (Expr->Left) + GetExprVal (Expr->Right);
-
-        case EXPR_MINUS:
-            return GetExprVal (Expr->Left) - GetExprVal (Expr->Right);
-
-        case EXPR_MUL:
-            return GetExprVal (Expr->Left) * GetExprVal (Expr->Right);
-
-        case EXPR_DIV:
-            Left  = GetExprVal (Expr->Left);
-            Right = GetExprVal (Expr->Right);
-            if (Right == 0) {
-                Error ("Division by zero");
-            }
-            return Left / Right;
-
-        case EXPR_MOD:
-            Left  = GetExprVal (Expr->Left);
-            Right = GetExprVal (Expr->Right);
-            if (Right == 0) {
-                Error ("Modulo operation with zero");
-            }
-            return Left % Right;
-
-        case EXPR_OR:
-            return GetExprVal (Expr->Left) | GetExprVal (Expr->Right);
-
-        case EXPR_XOR:
-            return GetExprVal (Expr->Left) ^ GetExprVal (Expr->Right);
-
-        case EXPR_AND:
-            return GetExprVal (Expr->Left) & GetExprVal (Expr->Right);
-
-        case EXPR_SHL:
-            return GetExprVal (Expr->Left) << GetExprVal (Expr->Right);
-
-        case EXPR_SHR:
-            return GetExprVal (Expr->Left) >> GetExprVal (Expr->Right);
-
-        case EXPR_EQ:
-            return (GetExprVal (Expr->Left) == GetExprVal (Expr->Right));
-
-        case EXPR_NE:
-            return (GetExprVal (Expr->Left) != GetExprVal (Expr->Right));
-
-        case EXPR_LT:
-            return (GetExprVal (Expr->Left) < GetExprVal (Expr->Right));
-
-        case EXPR_GT:
-            return (GetExprVal (Expr->Left) > GetExprVal (Expr->Right));
-
-        case EXPR_LE:
-            return (GetExprVal (Expr->Left) <= GetExprVal (Expr->Right));
-
-        case EXPR_GE:
-            return (GetExprVal (Expr->Left) >= GetExprVal (Expr->Right));
-
-        case EXPR_BOOLAND:
-            return GetExprVal (Expr->Left) && GetExprVal (Expr->Right);
-
-        case EXPR_BOOLOR:
-            return GetExprVal (Expr->Left) || GetExprVal (Expr->Right);
-
-        case EXPR_BOOLXOR:
-            return (GetExprVal (Expr->Left) != 0) ^ (GetExprVal (Expr->Right) != 0);
-
-        case EXPR_MAX:
-            Left = GetExprVal (Expr->Left);
-            Right = GetExprVal (Expr->Right);
-            return (Left > Right)? Left : Right;
-
-        case EXPR_MIN:
-            Left = GetExprVal (Expr->Left);
-            Right = GetExprVal (Expr->Right);
-            return (Left < Right)? Left : Right;
-
-        case EXPR_UNARY_MINUS:
-            return -GetExprVal (Expr->Left);
-
-        case EXPR_NOT:
-            return ~GetExprVal (Expr->Left);
-
-        case EXPR_SWAP:
-            Left = GetExprVal (Expr->Left);
-            return ((Left >> 8) & 0x00FF) | ((Left << 8) & 0xFF00);
-
-        case EXPR_BOOLNOT:
-            return !GetExprVal (Expr->Left);
-
-        case EXPR_BANK:
-            GetSegExprVal (Expr->Left, &D);
-            if (D.TooComplex || D.Seg == 0) {
-                Error ("Argument for .BANK is not segment relative or too complex");
-            }
-            if (D.Seg->MemArea == 0) {
-                Error ("Segment `%s' is referenced by .BANK but "
-                       "not assigned to a memory area",
-                       GetString (D.Seg->Name));
-            }
-            if (D.Seg->MemArea->BankExpr == 0) {
-                Error ("Memory area `%s' is referenced by .BANK but "
-                       "has no BANK attribute",
-                       GetString (D.Seg->MemArea->Name));
-            }
-            return GetExprVal (D.Seg->MemArea->BankExpr);
-
-        case EXPR_BYTE0:
-            return GetExprVal (Expr->Left) & 0xFF;
-
-        case EXPR_BYTE1:
-            return (GetExprVal (Expr->Left) >> 8) & 0xFF;
-
-        case EXPR_BYTE2:
-            return (GetExprVal (Expr->Left) >> 16) & 0xFF;
-
-        case EXPR_BYTE3:
-            return (GetExprVal (Expr->Left) >> 24) & 0xFF;
-
-        case EXPR_WORD0:
-            return GetExprVal (Expr->Left) & 0xFFFF;
-
-        case EXPR_WORD1:
-            return (GetExprVal (Expr->Left) >> 16) & 0xFFFF;
-
-        case EXPR_FARADDR:
-            return GetExprVal (Expr->Left) & 0xFFFFFF;
-
-        case EXPR_DWORD:
-            return GetExprVal (Expr->Left) & 0xFFFFFFFF;
-
-        default:
-            Internal ("Unknown expression Op type: %u", Expr->Op);
-            /* NOTREACHED */
-            return 0;
-    }
-}
-
-
-
-static void GetSegExprValInternal (ExprNode* Expr, SegExprDesc* D, int Sign)
-/* Check if the given expression consists of a segment reference and only
-** constant values, additions and subtractions. If anything else is found,
-** set D->TooComplex to true.
-** Internal, recursive routine.
-*/
-{
-    Export* E;
-
-    switch (Expr->Op) {
-
-        case EXPR_LITERAL:
-            D->Val += (Sign * Expr->V.IVal);
-            break;
-
-        case EXPR_SYMBOL:
-            /* Get the referenced export */
-            E = GetExprExport (Expr);
-            /* If this export has a mark set, we've already encountered it.
-            ** This means that the export is used to define it's own value,
-            ** which in turn means, that we have a circular reference.
-            */
-            if (ExportHasMark (E)) {
-                CircularRefError (E);
-            } else {
-                MarkExport (E);
-                GetSegExprValInternal (E->Expr, D, Sign);
-                UnmarkExport (E);
-            }
-            break;
-
-        case EXPR_SECTION:
-            if (D->Seg) {
-                /* We cannot handle more than one segment reference in o65 */
-                D->TooComplex = 1;
-            } else {
-                /* Get the section from the expression */
-                Section* S = GetExprSection (Expr);
-                /* Remember the segment reference */
-                D->Seg = S->Seg;
-                /* Add the offset of the section to the constant value */
-                D->Val += Sign * (S->Offs + D->Seg->PC);
-            }
-            break;
-
-        case EXPR_SEGMENT:
-            if (D->Seg) {
-                /* We cannot handle more than one segment reference in o65 */
-                D->TooComplex = 1;
-            } else {
-                /* Remember the segment reference */
-                D->Seg = Expr->V.Seg;
-                /* Add the offset of the segment to the constant value */
-                D->Val += (Sign * D->Seg->PC);
-            }
-            break;
-
-        case EXPR_PLUS:
-            GetSegExprValInternal (Expr->Left, D, Sign);
-            GetSegExprValInternal (Expr->Right, D, Sign);
-            break;
-
-        case EXPR_MINUS:
-            GetSegExprValInternal (Expr->Left, D, Sign);
-            GetSegExprValInternal (Expr->Right, D, -Sign);
-            break;
-
-        default:
-            /* Expression contains illegal operators */
-            D->TooComplex = 1;
-            break;
-
-    }
-}
-
-
-
-void GetSegExprVal (ExprNode* Expr, SegExprDesc* D)
-/* Check if the given expression consists of a segment reference and only
-** constant values, additions and subtractions. If anything else is found,
-** set D->TooComplex to true. The function will initialize D.
-*/
-{
-    /* Initialize the given structure */
-    D->Val        = 0;
-    D->TooComplex = 0;
-    D->Seg        = 0;
-
-    /* Call our recursive calculation routine */
-    GetSegExprValInternal (Expr, D, 1);
-}
-
-
-
-ExprNode* LiteralExpr (long Val, ObjData* O)
-/* Return an expression tree that encodes the given literal value */
-{
-    ExprNode* Expr = NewExprNode (O, EXPR_LITERAL);
-    Expr->V.IVal = Val;
-    return Expr;
-}
-
-
-
-ExprNode* MemoryExpr (MemoryArea* Mem, long Offs, ObjData* O)
-/* Return an expression tree that encodes an offset into a memory area */
-{
-    ExprNode* Root;
-
-    ExprNode* Expr = NewExprNode (O, EXPR_MEMAREA);
-    Expr->V.Mem = Mem;
-
-    if (Offs != 0) {
-        Root = NewExprNode (O, EXPR_PLUS);
-        Root->Left = Expr;
-        Root->Right = LiteralExpr (Offs, O);
-    } else {
-        Root = Expr;
-    }
-
-    return Root;
-}
-
-
-
-ExprNode* SegmentExpr (Segment* Seg, long Offs, ObjData* O)
-/* Return an expression tree that encodes an offset into a segment */
-{
-    ExprNode* Root;
-
-    ExprNode* Expr = NewExprNode (O, EXPR_SEGMENT);
-    Expr->V.Seg = Seg;
-
-    if (Offs != 0) {
-        Root = NewExprNode (O, EXPR_PLUS);
-        Root->Left = Expr;
-        Root->Right = LiteralExpr (Offs, O);
-    } else {
-        Root = Expr;
-    }
-
-    return Root;
-}
-
-
-
-ExprNode* SectionExpr (Section* Sec, long Offs, ObjData* O)
-/* Return an expression tree that encodes an offset into a section */
-{
-    ExprNode* Root;
-
-    ExprNode* Expr = NewExprNode (O, EXPR_SECTION);
-    Expr->V.Sec = Sec;
-
-    if (Offs != 0) {
-        Root = NewExprNode (O, EXPR_PLUS);
-        Root->Left = Expr;
-        Root->Right = LiteralExpr (Offs, O);
-    } else {
-        Root = Expr;
-    }
-
-    return Root;
-}
-
-
-
-ExprNode* ReadExpr (FILE* F, ObjData* O)
-/* Read an expression from the given file */
-{
-    ExprNode* Expr;
-
-    /* Read the node tag and handle NULL nodes */
-    unsigned char Op = Read8 (F);
-    if (Op == EXPR_NULL) {
-        return 0;
-    }
-
-    /* Create a new node */
-    Expr = NewExprNode (O, Op);
-
-    /* Check the tag and handle the different expression types */
-    if (EXPR_IS_LEAF (Op)) {
-        switch (Op) {
-
-            case EXPR_LITERAL:
-                Expr->V.IVal = Read32Signed (F);
-                break;
-
-            case EXPR_SYMBOL:
-                /* Read the import number */
-                Expr->V.ImpNum = ReadVar (F);
-                break;
-
-            case EXPR_SECTION:
-                /* Read the section number */
-                Expr->V.SecNum = ReadVar (F);
-                break;
-
-            default:
-                Error ("Invalid expression op: %02X", Op);
-
-        }
-
-    } else {
-
-        /* Not a leaf node */
-        Expr->Left = ReadExpr (F, O);
-        Expr->Right = ReadExpr (F, O);
-
-    }
-
-    /* Return the tree */
-    return Expr;
-}
-
-
-
-int EqualExpr (ExprNode* E1, ExprNode* E2)
-/* Check if two expressions are identical. */
-{
-    /* If one pointer is NULL, both must be NULL */
-    if ((E1 == 0) ^ (E2 == 0)) {
-        return 0;
-    }
-    if (E1 == 0) {
-        return 1;
-    }
-
-    /* Both pointers not NULL, check OP */
-    if (E1->Op != E2->Op) {
-        return 0;
-    }
-
-    /* OPs are identical, check data for leafs, or subtrees */
-    switch (E1->Op) {
-
-        case EXPR_LITERAL:
-            /* Value must be identical */
-            return (E1->V.IVal == E2->V.IVal);
-
-        case EXPR_SYMBOL:
-            /* Import must be identical */
-            return (GetExprImport (E1) == GetExprImport (E2));
-
-        case EXPR_SECTION:
-            /* Section must be identical */
-            return (GetExprSection (E1) == GetExprSection (E2));
-
-        case EXPR_SEGMENT:
-            /* Segment must be identical */
-            return (E1->V.Seg == E2->V.Seg);
-
-        case EXPR_MEMAREA:
-            /* Memory area must be identical */
-            return (E1->V.Mem == E2->V.Mem);
-
-        default:
-            /* Not a leaf node */
-            return EqualExpr (E1->Left, E2->Left) && EqualExpr (E1->Right, E2->Right);
-    }
-
-}
diff --git a/src/ld65/expr.h b/src/ld65/expr.h
deleted file mode 100644 (file)
index 8b5879a..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  expr.h                                   */
-/*                                                                           */
-/*                 Expression evaluation for the ld65 linker                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef EXPR_H
-#define EXPR_H
-
-
-
-/* common */
-#include "exprdefs.h"
-
-/* ld65 */
-#include "objdata.h"
-#include "exports.h"
-#include "config.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Structure for parsing segment based expression trees */
-typedef struct SegExprDesc SegExprDesc;
-struct SegExprDesc {
-    long            Val;                /* The offset value */
-    int             TooComplex;         /* Expression too complex */
-    Segment*        Seg;                /* Segment reference if any */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-ExprNode* NewExprNode (ObjData* O, unsigned char Op);
-/* Create a new expression node */
-
-void FreeExpr (ExprNode* Root);
-/* Free the expression tree, Root is pointing to. */
-
-int IsConstExpr (ExprNode* Root);
-/* Return true if the given expression is a constant expression, that is, one
-** with no references to external symbols.
-*/
-
-Import* GetExprImport (ExprNode* Expr);
-/* Get the import data structure for a symbol expression node */
-
-Export* GetExprExport (ExprNode* Expr);
-/* Get the exported symbol for a symbol expression node */
-
-Section* GetExprSection (ExprNode* Expr);
-/* Get the segment for a section expression node */
-
-long GetExprVal (ExprNode* Expr);
-/* Get the value of a constant expression */
-
-void GetSegExprVal (ExprNode* Expr, SegExprDesc* D);
-/* Check if the given expression consists of a segment reference and only
-** constant values, additions and subtractions. If anything else is found,
-** set D->TooComplex to true. The function will initialize D.
-*/
-
-ExprNode* LiteralExpr (long Val, ObjData* O);
-/* Return an expression tree that encodes the given literal value */
-
-ExprNode* MemoryExpr (MemoryArea* Mem, long Offs, ObjData* O);
-/* Return an expression tree that encodes an offset into the memory area */
-
-ExprNode* SegmentExpr (Segment* Seg, long Offs, ObjData* O);
-/* Return an expression tree that encodes an offset into a segment */
-
-ExprNode* SectionExpr (Section* Sec, long Offs, ObjData* O);
-/* Return an expression tree that encodes an offset into a section */
-
-ExprNode* ReadExpr (FILE* F, ObjData* O);
-/* Read an expression from the given file */
-
-int EqualExpr (ExprNode* E1, ExprNode* E2);
-/* Check if two expressions are identical. */
-
-
-
-/* End of expr.h */
-
-#endif
diff --git a/src/ld65/extsyms.c b/src/ld65/extsyms.c
deleted file mode 100644 (file)
index b250125..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 extsyms.c                                 */
-/*                                                                           */
-/*      Handle program external symbols for relocatable output formats       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1999-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "hashfunc.h"
-#include "xmalloc.h"
-
-/* ld65 */
-#include "error.h"
-#include "extsyms.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Structure holding an external symbol */
-struct ExtSym {
-    unsigned    Name;           /* Name index */
-    ExtSym*     List;           /* Next entry in list of all symbols */
-    ExtSym*     Next;           /* Next entry in hash list */
-    unsigned    Flags;          /* Generic flags */
-    unsigned    Num;            /* Number of external symbol */
-};
-
-/* External symbol table structure */
-#define HASHTAB_MASK    0x3FU
-#define HASHTAB_SIZE    (HASHTAB_MASK + 1)
-struct ExtSymTab {
-    ExtSym*     Root;           /* List of symbols */
-    ExtSym*     Last;           /* Pointer to last symbol */
-    unsigned    Count;          /* Number of symbols */
-    ExtSym*     HashTab[HASHTAB_SIZE];
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-ExtSym* NewExtSym (ExtSymTab* Tab, unsigned Name)
-/* Create a new external symbol and insert it into the table */
-{
-    /* Get the hash value of the string */
-    unsigned Hash = (Name & HASHTAB_MASK);
-
-    /* Check for duplicates */
-    ExtSym* E = GetExtSym (Tab, Name);
-    if (E != 0) {
-        /* We do already have a symbol with this name */
-        Error ("Duplicate external symbol `%s'", GetString (Name));
-    }
-
-    /* Allocate memory for the structure */
-    E = xmalloc (sizeof (ExtSym));
-
-    /* Initialize the structure */
-    E->Name  = Name;
-    E->List  = 0;
-    E->Flags = 0;
-    E->Num   = Tab->Count;
-
-    /* Insert the entry into the list of all symbols */
-    if (Tab->Last == 0) {
-        /* List is empty */
-        Tab->Root = E;
-    } else {
-        /* List not empty */
-        Tab->Last->List = E;
-    }
-    Tab->Last = E;
-    ++Tab->Count;
-
-    /* Insert the symbol into the hash table */
-    E->Next = Tab->HashTab[Hash];
-    Tab->HashTab[Hash] = E;
-
-    /* Done, return the created entry */
-    return E;
-}
-
-
-
-static void FreeExtSym (ExtSym* E)
-/* Free an external symbol structure. Will not unlink the entry, so internal
-** use only.
-*/
-{
-    xfree (E);
-}
-
-
-
-ExtSymTab* NewExtSymTab (void)
-/* Create a new external symbol table */
-{
-    unsigned I;
-
-    /* Allocate memory */
-    ExtSymTab* Tab = xmalloc (sizeof (ExtSymTab));
-
-    /* Initialize the fields */
-    Tab->Root   = 0;
-    Tab->Last   = 0;
-    Tab->Count  = 0;
-    for (I = 0; I < HASHTAB_SIZE; ++I) {
-        Tab->HashTab [I] = 0;
-    }
-
-    /* Done, return the hash table */
-    return Tab;
-}
-
-
-
-void FreeExtSymTab (ExtSymTab* Tab)
-/* Free an external symbol structure */
-{
-    /* Free all entries */
-    while (Tab->Root) {
-        ExtSym* E = Tab->Root;
-        Tab->Root = E->Next;
-        FreeExtSym (E);
-    }
-
-    /* Free the struct itself */
-    xfree (Tab);
-}
-
-
-
-ExtSym* GetExtSym (const ExtSymTab* Tab, unsigned Name)
-/* Return the entry for the external symbol with the given name. Return NULL
-** if there is no such symbol.
-*/
-{
-    /* Hash the name */
-    unsigned Hash = (Name & HASHTAB_MASK);
-
-    /* Check the linked list */
-    ExtSym* E = Tab->HashTab[Hash];
-    while (E) {
-        if (E->Name == Name) {
-            /* Found it */
-            break;
-        }
-        E = E->Next;
-    }
-
-    /* Return the symbol we found */
-    return E;
-}
-
-
-
-unsigned ExtSymCount (const ExtSymTab* Tab)
-/* Return the number of symbols in the table */
-{
-    return Tab->Count;
-}
-
-
-
-const ExtSym* ExtSymList (const ExtSymTab* Tab)
-/* Return the start of the symbol list sorted by symbol number. Call
-** ExtSymNext for the next symbol.
-*/
-{
-    return Tab->Root;
-}
-
-
-
-unsigned ExtSymNum (const ExtSym* E)
-/* Return the number of an external symbol */
-{
-    return E->Num;
-}
-
-
-
-unsigned ExtSymName (const ExtSym* E)
-/* Return the symbol name index */
-{
-    return E->Name;
-}
-
-
-
-const ExtSym* ExtSymNext (const ExtSym* E)
-/* Return the next symbol in the list */
-{
-    return E->List;
-}
diff --git a/src/ld65/extsyms.h b/src/ld65/extsyms.h
deleted file mode 100644 (file)
index 45f0941..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 extsyms.h                                 */
-/*                                                                           */
-/*      Handle program external symbols for relocatable output formats       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1999-2001 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef EXTSYMS_H
-#define EXTSYMS_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Forward decl for structure holding an external symbol */
-typedef struct ExtSym ExtSym;
-
-/* External symbol table structure */
-typedef struct ExtSymTab ExtSymTab;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-ExtSym* NewExtSym (ExtSymTab* Tab, unsigned Name);
-/* Create a new external symbol and insert it into the list */
-
-ExtSymTab* NewExtSymTab (void);
-/* Create a new external symbol table */
-
-void FreeExtSymTab (ExtSymTab* Tab);
-/* Free an external symbol structure */
-
-ExtSym* GetExtSym (const ExtSymTab* Tab, unsigned Name);
-/* Return the entry for the external symbol with the given name. Return NULL
-** if there is no such symbol.
-*/
-
-unsigned ExtSymCount (const ExtSymTab* Tab);
-/* Return the number of symbols in the table */
-
-const ExtSym* ExtSymList (const ExtSymTab* Tab);
-/* Return the start of the symbol list sorted by symbol number. Call
-** ExtSymNext for the next symbol.
-*/
-
-unsigned ExtSymNum (const ExtSym* E);
-/* Return the number of an external symbol */
-
-unsigned ExtSymName (const ExtSym* E);
-/* Return the symbol name index */
-
-const ExtSym* ExtSymNext (const ExtSym* E);
-/* Return the next symbol in the list */
-
-
-
-/* End of extsyms.h */
-
-#endif
diff --git a/src/ld65/fileinfo.c b/src/ld65/fileinfo.c
deleted file mode 100644 (file)
index 5964e1e..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                fileinfo.c                                 */
-/*                                                                           */
-/*                        Source file info structure                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "coll.h"
-#include "xmalloc.h"
-
-/* ld65 */
-#include "fileio.h"
-#include "fileinfo.h"
-#include "objdata.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* A list of all file infos without duplicates */
-static Collection FileInfos = STATIC_COLLECTION_INITIALIZER;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static int FindFileInfo (unsigned Name, unsigned* Index)
-/* Find the FileInfo for a given file name. The function returns true if the
-** name was found. In this case, Index contains the index of the first item
-** that matches. If the item wasn't found, the function returns false and
-** Index contains the insert position for FileName.
-*/
-{
-    /* Do a binary search */
-    int Lo = 0;
-    int Hi = (int) CollCount (&FileInfos) - 1;
-    int Found = 0;
-    while (Lo <= Hi) {
-
-        /* Mid of range */
-        int Cur = (Lo + Hi) / 2;
-
-        /* Get item */
-        FileInfo* CurItem = CollAt (&FileInfos, Cur);
-
-        /* Found? */
-        if (CurItem->Name < Name) {
-            Lo = Cur + 1;
-        } else {
-            Hi = Cur - 1;
-            /* Since we may have duplicates, repeat the search until we've
-            ** the first item that has a match.
-            */
-            if (CurItem->Name == Name) {
-                Found = 1;
-            }
-        }
-    }
-
-    /* Pass back the index. This is also the insert position */
-    *Index = Lo;
-    return Found;
-}
-
-
-
-static FileInfo* NewFileInfo (unsigned Name, unsigned long MTime, unsigned long Size)
-/* Allocate and initialize a new FileInfo struct and return it */
-{
-    /* Allocate memory */
-    FileInfo* FI = xmalloc (sizeof (FileInfo));
-
-    /* Initialize stuff */
-    FI->Id      = ~0U;
-    FI->Name    = Name;
-    FI->MTime   = MTime;
-    FI->Size    = Size;
-    FI->Modules = EmptyCollection;
-
-    /* Return the new struct */
-    return FI;
-}
-
-
-
-static void FreeFileInfo (FileInfo* FI)
-/* Free a file info structure */
-{
-    /* Free the collection */
-    DoneCollection (&FI->Modules);
-
-    /* Free memory for the structure */
-    xfree (FI);
-}
-
-
-
-FileInfo* ReadFileInfo (FILE* F, ObjData* O)
-/* Read a file info from a file and return it */
-{
-    FileInfo* FI;
-
-    /* Read the fields from the file */
-    unsigned      Name  = MakeGlobalStringId (O, ReadVar (F));
-    unsigned long MTime = Read32 (F);
-    unsigned long Size  = ReadVar (F);
-
-    /* Search for the first entry with this name */
-    unsigned Index;
-    if (FindFileInfo (Name, &Index)) {
-
-        /* We have at least one such entry. Try all of them and, if size and
-        ** modification time matches, return the first match. When the loop
-        ** is terminated without finding an entry, Index points one behind
-        ** the last entry with the name, which is the perfect insert position.
-        */
-        FI = CollAt (&FileInfos, Index);
-        while (1) {
-
-            /* Check size and modification time stamp */
-            if (FI->Size == Size && FI->MTime == MTime) {
-                /* Remember that the modules uses this file info, then return it */
-                CollAppend (&FI->Modules, O);
-                return FI;
-            }
-
-            /* Check the next one */
-            if (++Index >= CollCount (&FileInfos)) {
-                /* Nothing left */
-                break;
-            }
-            FI = CollAt (&FileInfos, Index);
-
-            /* Done if the name differs */
-            if (FI->Name != Name) {
-                break;
-            }
-        }
-    }
-
-    /* Not found. Allocate a new FileInfo structure */
-    FI = NewFileInfo (Name, MTime, Size);
-
-    /* Remember that this module uses the file info */
-    CollAppend (&FI->Modules, O);
-
-    /* Insert the file info in our global list. Index points to the insert
-    ** position.
-    */
-    CollInsert (&FileInfos, FI, Index);
-
-    /* Return the new struct */
-    return FI;
-}
-
-
-
-unsigned FileInfoCount (void)
-/* Return the total number of file infos */
-{
-    return CollCount (&FileInfos);
-}
-
-
-
-void AssignFileInfoIds (void)
-/* Remove unused file infos and assign the ids to the remaining ones */
-{
-    unsigned I, J;
-
-    /* Print all file infos */
-    for (I = 0, J = 0; I < CollCount (&FileInfos); ++I) {
-
-        /* Get the next file info */
-        FileInfo* FI = CollAtUnchecked (&FileInfos, I);
-
-        /* If it's unused, free it, otherwise assign the id and keep it */
-        if (CollCount (&FI->Modules) == 0) {
-            FreeFileInfo (FI);
-        } else {
-            FI->Id = J;
-            CollReplace (&FileInfos, FI, J++);
-        }
-    }
-
-    /* The new count is now in J */
-    FileInfos.Count = J;
-}
-
-
-
-void PrintDbgFileInfo (FILE* F)
-/* Output the file info to a debug info file */
-{
-    unsigned I, J;
-
-    /* Print all file infos */
-    for (I = 0; I < CollCount (&FileInfos); ++I) {
-
-        /* Get the file info */
-        const FileInfo* FI = CollAtUnchecked (&FileInfos, I);
-
-        /* Base info */
-        fprintf (F,
-                 "file\tid=%u,name=\"%s\",size=%lu,mtime=0x%08lX,mod=",
-                 FI->Id, GetString (FI->Name), FI->Size, FI->MTime);
-
-        /* Modules that use the file */
-        for (J = 0; J < CollCount (&FI->Modules); ++J) {
-
-            /* Get the module */
-            const ObjData* O = CollConstAt (&FI->Modules, J);
-
-            /* Output its id */
-            if (J > 0) {
-                fprintf (F, "+%u", O->Id);
-            } else {
-                fprintf (F, "%u", O->Id);
-            }
-        }
-
-        /* Terminate the output line */
-        fputc ('\n', F);
-    }
-}
diff --git a/src/ld65/fileinfo.h b/src/ld65/fileinfo.h
deleted file mode 100644 (file)
index 978ef4c..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                fileinfo.h                                 */
-/*                                                                           */
-/*                        Source file info structure                         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2010, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef FILEINFO_H
-#define FILEINFO_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "coll.h"
-#include "filepos.h"
-
-/* ld65 */
-#include "objdata.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-typedef struct FileInfo FileInfo;
-struct FileInfo {
-    unsigned        Id;                 /* Id of file for debug info */
-    unsigned        Name;               /* File name index */
-    unsigned long   MTime;              /* Time of last modification */
-    unsigned long   Size;               /* Size of the file */
-    Collection      Modules;            /* Modules that use this file */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-FileInfo* ReadFileInfo (FILE* F, ObjData* O);
-/* Read a file info from a file and return it */
-
-unsigned FileInfoCount (void);
-/* Return the total number of file infos */
-
-void AssignFileInfoIds (void);
-/* Assign the ids to the file infos */
-
-void PrintDbgFileInfo (FILE* F);
-/* Output the file info to a debug info file */
-
-
-
-/* End of fileinfo.h */
-
-#endif
diff --git a/src/ld65/fileio.c b/src/ld65/fileio.c
deleted file mode 100644 (file)
index f6a2719..0000000
+++ /dev/null
@@ -1,334 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 fileio.c                                  */
-/*                                                                           */
-/*                       File I/O for the ld65 linker                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2008 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "xmalloc.h"
-
-/* ld65 */
-#include "error.h"
-#include "fileio.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void FileSetPos (FILE* F, unsigned long Pos)
-/* Seek to the given absolute position, fail on errors */
-{
-    if (fseek (F, Pos, SEEK_SET) != 0) {
-        Error ("Cannot seek: %s", strerror (errno));
-    }
-}
-
-
-
-unsigned long FileGetPos (FILE* F)
-/* Return the current file position, fail on errors */
-{
-    long Pos = ftell (F);
-    if (Pos < 0) {
-        Error ("Error in ftell: %s", strerror (errno));
-    }
-    return Pos;
-}
-
-
-
-void Write8 (FILE* F, unsigned Val)
-/* Write an 8 bit value to the file */
-{
-    if (putc (Val, F) == EOF) {
-        Error ("Write error (disk full?)");
-    }
-}
-
-
-
-void Write16 (FILE* F, unsigned Val)
-/* Write a 16 bit value to the file */
-{
-    Write8 (F, (unsigned char) Val);
-    Write8 (F, (unsigned char) (Val >> 8));
-}
-
-
-
-void Write24 (FILE* F, unsigned long Val)
-/* Write a 24 bit value to the file */
-{
-    Write8 (F, (unsigned char) Val);
-    Write8 (F, (unsigned char) (Val >> 8));
-    Write8 (F, (unsigned char) (Val >> 16));
-}
-
-
-
-void Write32 (FILE* F, unsigned long Val)
-/* Write a 32 bit value to the file */
-{
-    Write8 (F, (unsigned char) Val);
-    Write8 (F, (unsigned char) (Val >> 8));
-    Write8 (F, (unsigned char) (Val >> 16));
-    Write8 (F, (unsigned char) (Val >> 24));
-}
-
-
-
-void WriteVal (FILE* F, unsigned long Val, unsigned Size)
-/* Write a value of the given size to the output file */
-{
-    switch (Size) {
-
-        case 1:
-            Write8 (F, Val);
-            break;
-
-        case 2:
-            Write16 (F, Val);
-            break;
-
-        case 3:
-            Write24 (F, Val);
-            break;
-
-        case 4:
-            Write32 (F, Val);
-            break;
-
-        default:
-            Internal ("WriteVal: Invalid size: %u", Size);
-
-    }
-}
-
-
-
-void WriteVar (FILE* F, unsigned long V)
-/* Write a variable sized value to the file in special encoding */
-{
-    /* We will write the value to the file in 7 bit chunks. If the 8th bit
-    ** is clear, we're done, if it is set, another chunk follows. This will
-    ** allow us to encode smaller values with less bytes, at the expense of
-    ** needing 5 bytes if a 32 bit value is written to file.
-    */
-    do {
-        unsigned char C = (V & 0x7F);
-        V >>= 7;
-        if (V) {
-            C |= 0x80;
-        }
-        Write8 (F, C);
-    } while (V != 0);
-}
-
-
-
-void WriteStr (FILE* F, const char* S)
-/* Write a string to the file */
-{
-    unsigned Len = strlen (S);
-    WriteVar (F, Len);
-    WriteData (F, S, Len);
-}
-
-
-
-void WriteData (FILE* F, const void* Data, unsigned Size)
-/* Write data to the file */
-{
-    if (fwrite (Data, 1, Size, F) != Size) {
-        Error ("Write error (disk full?)");
-    }
-}
-
-
-
-void WriteMult (FILE* F, unsigned char Val, unsigned long Count)
-/* Write one byte several times to the file */
-{
-    while (Count--) {
-        Write8 (F, Val);
-    }
-}
-
-
-
-unsigned Read8 (FILE* F)
-/* Read an 8 bit value from the file */
-{
-    int C = getc (F);
-    if (C == EOF) {
-        long Pos = ftell (F);
-        Error ("Read error at position %ld (file corrupt?)", Pos);
-    }
-    return C;
-}
-
-
-
-unsigned Read16 (FILE* F)
-/* Read a 16 bit value from the file */
-{
-    unsigned Lo = Read8 (F);
-    unsigned Hi = Read8 (F);
-    return (Hi << 8) | Lo;
-}
-
-
-
-unsigned long Read24 (FILE* F)
-/* Read a 24 bit value from the file */
-{
-    unsigned long Lo = Read16 (F);
-    unsigned long Hi = Read8 (F);
-    return (Hi << 16) | Lo;
-}
-
-
-
-unsigned long Read32 (FILE* F)
-/* Read a 32 bit value from the file */
-{
-    unsigned long Lo = Read16 (F);
-    unsigned long Hi = Read16 (F);
-    return (Hi << 16) | Lo;
-}
-
-
-
-long Read32Signed (FILE* F)
-/* Read a 32 bit value from the file. Sign extend the value. */
-{
-    /* Read a 32 bit value */
-    unsigned long V = Read32 (F);
-
-    /* Sign extend the value */
-    if (V & 0x80000000UL) {
-        /* Signed value */
-        V |= ~0xFFFFFFFFUL;
-    }
-
-    /* Return it as a long */
-    return (long) V;
-}
-
-
-
-unsigned long ReadVar (FILE* F)
-/* Read a variable size value from the file */
-{
-    /* The value was written to the file in 7 bit chunks LSB first. If there
-    ** are more bytes, bit 8 is set, otherwise it is clear.
-    */
-    unsigned char C;
-    unsigned long V = 0;
-    unsigned Shift = 0;
-    do {
-        /* Read one byte */
-        C = Read8 (F);
-        /* Encode it into the target value */
-        V |= ((unsigned long)(C & 0x7F)) << Shift;
-        /* Next value */
-        Shift += 7;
-    } while (C & 0x80);
-
-    /* Return the value read */
-    return V;
-}
-
-
-
-unsigned ReadStr (FILE* F)
-/* Read a string from the file, place it into the global string pool, and
-** return its string id.
-*/
-{
-    unsigned    Id;
-    StrBuf      Buf = STATIC_STRBUF_INITIALIZER;
-
-    /* Read the length */
-    unsigned Len = ReadVar (F);
-
-    /* Expand the string buffer memory */
-    SB_Realloc (&Buf, Len);
-
-    /* Read the string */
-    ReadData (F, SB_GetBuf (&Buf), Len);
-    Buf.Len = Len;
-
-    /* Insert it into the string pool and remember the id */
-    Id = GetStrBufId (&Buf);
-
-    /* Free the memory buffer */
-    SB_Done (&Buf);
-
-    /* Return the string id */
-    return Id;
-}
-
-
-
-FilePos* ReadFilePos (FILE* F, FilePos* Pos)
-/* Read a file position from the file */
-{
-    /* Read the data fields */
-    Pos->Line = ReadVar (F);
-    Pos->Col  = ReadVar (F);
-    Pos->Name = ReadVar (F);
-    return Pos;
-}
-
-
-
-void* ReadData (FILE* F, void* Data, unsigned Size)
-/* Read data from the file */
-{
-    /* Explicitly allow reading zero bytes */
-    if (Size > 0) {
-        if (fread (Data, 1, Size, F) != Size) {
-            long Pos = ftell (F);
-            Error ("Read error at position %ld (file corrupt?)", Pos);
-        }
-    }
-    return Data;
-}
diff --git a/src/ld65/fileio.h b/src/ld65/fileio.h
deleted file mode 100644 (file)
index 72e4a6f..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 fileio.h                                  */
-/*                                                                           */
-/*                       File I/O for the ld65 linker                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2003 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef FILEIO_H
-#define FILEIO_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "filepos.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void FileSetPos (FILE* F, unsigned long Pos);
-/* Seek to the given absolute position, fail on errors */
-
-unsigned long FileGetPos (FILE* F);
-/* Return the current file position, fail on errors */
-
-void Write8 (FILE* F, unsigned Val);
-/* Write an 8 bit value to the file */
-
-void Write16 (FILE* F, unsigned Val);
-/* Write a 16 bit value to the file */
-
-void Write24 (FILE* F, unsigned long Val);
-/* Write a 24 bit value to the file */
-
-void Write32 (FILE* F, unsigned long Val);
-/* Write a 32 bit value to the file */
-
-void WriteVal (FILE* F, unsigned long Val, unsigned Size);
-/* Write a value of the given size to the output file */
-
-void WriteVar (FILE* F, unsigned long V);
-/* Write a variable sized value to the file in special encoding */
-
-void WriteStr (FILE* F, const char* S);
-/* Write a string to the file */
-
-void WriteData (FILE* F, const void* Data, unsigned Size);
-/* Write data to the file */
-
-void WriteMult (FILE* F, unsigned char Val, unsigned long Count);
-/* Write one byte several times to the file */
-
-unsigned Read8 (FILE* F);
-/* Read an 8 bit value from the file */
-
-unsigned Read16 (FILE* F);
-/* Read a 16 bit value from the file */
-
-unsigned long Read24 (FILE* F);
-/* Read a 24 bit value from the file */
-
-unsigned long Read32 (FILE* F);
-/* Read a 32 bit value from the file */
-
-long Read32Signed (FILE* F);
-/* Read a 32 bit value from the file. Sign extend the value. */
-
-unsigned long ReadVar (FILE* F);
-/* Read a variable size value from the file */
-
-unsigned ReadStr (FILE* F);
-/* Read a string from the file, place it into the global string pool, and
-** return its string id.
-*/
-
-FilePos* ReadFilePos (FILE* F, FilePos* Pos);
-/* Read a file position from the file */
-
-void* ReadData (FILE* F, void* Data, unsigned Size);
-/* Read data from the file */
-
-
-
-/* End of fileio.h */
-
-#endif
diff --git a/src/ld65/filepath.c b/src/ld65/filepath.c
deleted file mode 100644 (file)
index 17cd451..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 filepath.c                                */
-/*                                                                           */
-/*                    File search path handling for ld65                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* ld65 */
-#include "filepath.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-SearchPaths*     LibSearchPath;         /* Library path */
-SearchPaths*     ObjSearchPath;         /* Object file path */
-SearchPaths*     CfgSearchPath;         /* Config file path */
-
-SearchPaths*     LibDefaultPath;        /* Default Library path */
-SearchPaths*     ObjDefaultPath;        /* Default Object file path */
-SearchPaths*     CfgDefaultPath;        /* Default Config file path */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void InitSearchPaths (void)
-/* Initialize the path search list */
-{
-    /* Create the search path lists */
-    LibSearchPath = NewSearchPath ();
-    ObjSearchPath = NewSearchPath ();
-    CfgSearchPath = NewSearchPath ();
-
-    LibDefaultPath = NewSearchPath ();
-    ObjDefaultPath = NewSearchPath ();
-    CfgDefaultPath = NewSearchPath ();
-
-    /* Always search all stuff in the current directory */
-    AddSearchPath (LibSearchPath, "");
-    AddSearchPath (ObjSearchPath, "");
-    AddSearchPath (CfgSearchPath, "");
-
-    /* Add specific paths from the environment. */
-    AddSearchPathFromEnv (LibDefaultPath, "LD65_LIB");
-    AddSearchPathFromEnv (ObjDefaultPath, "LD65_OBJ");
-    AddSearchPathFromEnv (CfgDefaultPath, "LD65_CFG");
-
-    /* Add paths relative to a main directory defined in an env. var. */
-    AddSubSearchPathFromEnv (LibDefaultPath, "CC65_HOME", "lib");
-    AddSubSearchPathFromEnv (ObjDefaultPath, "CC65_HOME", "lib");
-    AddSubSearchPathFromEnv (CfgDefaultPath, "CC65_HOME", "cfg");
-
-    /* Add some compiled-in search paths if defined at compile time. */
-#if defined(LD65_LIB) && !defined(_WIN32)
-    AddSearchPath (LibDefaultPath, STRINGIZE (LD65_LIB));
-#endif
-#if defined(LD65_OBJ) && !defined(_WIN32)
-    AddSearchPath (ObjDefaultPath, STRINGIZE (LD65_OBJ));
-#endif
-#if defined(LD65_CFG) && !defined(_WIN32)
-    AddSearchPath (CfgDefaultPath, STRINGIZE (LD65_CFG));
-#endif
-
-    /* Add paths relative to the parent directory of the Windows binary. */
-    AddSubSearchPathFromWinBin (LibDefaultPath, "lib");
-    AddSubSearchPathFromWinBin (ObjDefaultPath, "lib");
-    AddSubSearchPathFromWinBin (CfgDefaultPath, "cfg");
-}
diff --git a/src/ld65/filepath.h b/src/ld65/filepath.h
deleted file mode 100644 (file)
index a2fcd4b..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 filepath.h                                */
-/*                                                                           */
-/*                    File search path handling for ld65                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef FILEPATH_H
-#define FILEPATH_H
-
-
-
-/* common */
-#include "searchpath.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-extern SearchPaths*     LibSearchPath;          /* Library path */
-extern SearchPaths*     ObjSearchPath;          /* Object file path */
-extern SearchPaths*     CfgSearchPath;          /* Config file path */
-
-extern SearchPaths*     LibDefaultPath;         /* Default Library path */
-extern SearchPaths*     ObjDefaultPath;         /* Default Object file path */
-extern SearchPaths*     CfgDefaultPath;         /* Default Config file path */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void InitSearchPaths (void);
-/* Initialize the path search list */
-
-
-
-/* End of filepath.h */
-
-#endif
diff --git a/src/ld65/fragment.c b/src/ld65/fragment.c
deleted file mode 100644 (file)
index 5efac37..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                fragment.c                                 */
-/*                                                                           */
-/*                        Code/data fragment routines                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "fragdefs.h"
-#include "xmalloc.h"
-
-/* ld65 */
-#include "error.h"
-#include "fragment.h"
-#include "objdata.h"
-#include "segments.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Fragment* NewFragment (unsigned char Type, unsigned Size, Section* S)
-/* Create a new fragment and insert it into the section S */
-{
-    Fragment* F;
-
-    /* Calculate the size of the memory block. LitBuf is only needed if the
-    ** fragment contains literal data.
-    */
-    unsigned FragSize = sizeof (Fragment) - 1;
-    if (Type == FRAG_LITERAL) {
-        FragSize += Size;
-    }
-
-    /* Allocate memory */
-    F = xmalloc (FragSize);
-
-    /* Initialize the data */
-    F->Next      = 0;
-    F->Obj       = 0;
-    F->Sec       = S;
-    F->Size      = Size;
-    F->Expr      = 0;
-    F->LineInfos = EmptyCollection;
-    F->Type      = Type;
-
-    /* Insert the code fragment into the section */
-    if (S->FragRoot == 0) {
-        /* First fragment */
-        S->FragRoot = F;
-    } else {
-        S->FragLast->Next = F;
-    }
-    S->FragLast = F;
-
-    /* Increment the size of the section by the size of the fragment */
-    S->Size += Size;
-
-    /* Increment the size of the segment that contains the section */
-    S->Seg->Size += Size;
-
-    /* Return the new fragment */
-    return F;
-}
diff --git a/src/ld65/fragment.h b/src/ld65/fragment.h
deleted file mode 100644 (file)
index 7d6dd92..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                fragment.h                                 */
-/*                                                                           */
-/*                        Code/data fragment routines                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef FRAGMENT_H
-#define FRAGMENT_H
-
-
-
-/* common */
-#include "coll.h"
-#include "filepos.h"
-
-/* Ld65 */
-#include "lineinfo.h"
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-struct ObjData;
-struct Section;
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Fragment structure */
-typedef struct Fragment Fragment;
-struct Fragment {
-    Fragment*           Next;           /* Next fragment in list */
-    struct ObjData*     Obj;            /* Source of fragment */
-    struct Section*     Sec;            /* Section for this fragment */
-    unsigned            Size;           /* Size of data/expression */
-    struct ExprNode*    Expr;           /* Expression if FRAG_EXPR */
-    Collection          LineInfos;      /* Line info for this fragment */
-    unsigned char       Type;           /* Type of fragment */
-    unsigned char       LitBuf [1];     /* Dynamically alloc'ed literal buffer */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Fragment* NewFragment (unsigned char Type, unsigned Size, struct Section* S);
-/* Create a new fragment and insert it into the section S */
-
-#if defined(HAVE_INLINE)
-INLINE const char* GetFragmentSourceName (const Fragment* F)
-/* Return the name of the source file for this fragment */
-{
-    return GetSourceNameFromList (&F->LineInfos);
-}
-#else
-#  define GetFragmentSourceName(F)      GetSourceNameFromList (&(F)->LineInfos)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned GetFragmentSourceLine (const Fragment* F)
-/* Return the source file line for this fragment */
-{               
-    return GetSourceLineFromList (&F->LineInfos);
-}
-#else
-#  define GetFragmentSourceLine(F)      GetSourceLineFromList (&(F)->LineInfos)
-#endif
-
-
-
-/* End of fragment.h */
-
-#endif
diff --git a/src/ld65/global.c b/src/ld65/global.c
deleted file mode 100644 (file)
index dc0c8d5..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.c                                  */
-/*                                                                           */
-/*                   Global variables for the ld65 linker                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2010, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include "global.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-const char* OutputName      = "a.out";  /* Name of output file */
-unsigned    OutputNameUsed  = 0;        /* Output name was used by %O */
-
-unsigned ModuleId           = 0;        /* Id for o65 module */
-
-/* Start address */
-unsigned char HaveStartAddr = 0;        /* Start address not given */
-unsigned long StartAddr     = 0x200;    /* Start address */
-
-unsigned char VerboseMap    = 0;        /* Verbose map file */
-const char* MapFileName     = 0;        /* Name of the map file */
-const char* LabelFileName   = 0;        /* Name of the label file */
-const char* DbgFileName     = 0;        /* Name of the debug file */
diff --git a/src/ld65/global.h b/src/ld65/global.h
deleted file mode 100644 (file)
index 4b873f0..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.h                                  */
-/*                                                                           */
-/*                   Global variables for the ld65 linker                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2010, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef GLOBAL_H
-#define GLOBAL_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-extern const char*      OutputName;     /* Name of output file */
-extern unsigned         OutputNameUsed; /* Output name was used by %O */
-
-extern unsigned         ModuleId;       /* Id for o65 module */
-
-extern unsigned char    HaveStartAddr;  /* True if start address was given */
-extern unsigned long    StartAddr;      /* Start address */
-
-extern unsigned char    VerboseMap;     /* Verbose map file */
-extern const char*      MapFileName;    /* Name of the map file */
-extern const char*      LabelFileName;  /* Name of the label file */
-extern const char*      DbgFileName;    /* Name of the debug file */
-
-
-
-/* End of global.h */
-
-#endif
diff --git a/src/ld65/library.c b/src/ld65/library.c
deleted file mode 100644 (file)
index 0dadcfa..0000000
+++ /dev/null
@@ -1,555 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 library.c                                 */
-/*                                                                           */
-/*          Library data structures and helpers for the ld65 linker          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "coll.h"
-#include "exprdefs.h"
-#include "libdefs.h"
-#include "objdefs.h"
-#include "symdefs.h"
-#include "xmalloc.h"
-
-/* ld65 */
-#include "error.h"
-#include "exports.h"
-#include "fileio.h"
-#include "library.h"
-#include "objdata.h"
-#include "objfile.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Library data structure */
-typedef struct Library Library;
-struct Library {
-    unsigned    Id;             /* Id of library */
-    unsigned    Name;           /* String id of the name */
-    FILE*       F;              /* Open file stream */
-    LibHeader   Header;         /* Library header */
-    Collection  Modules;        /* Modules */
-};
-
-/* List of open libraries */
-static Collection OpenLibs = STATIC_COLLECTION_INITIALIZER;
-
-/* List of used libraries */
-static Collection LibraryList = STATIC_COLLECTION_INITIALIZER;
-
-/* Flag for library grouping */
-static int Grouping = 0;
-
-
-
-/*****************************************************************************/
-/*                              struct Library                               */
-/*****************************************************************************/
-
-
-
-static Library* NewLibrary (FILE* F, const char* Name)
-/* Create a new Library structure and return it */
-{
-    /* Allocate memory */
-    Library* L = xmalloc (sizeof (*L));
-
-    /* Initialize the fields */
-    L->Id       = ~0U;
-    L->Name     = GetStringId (Name);
-    L->F        = F;
-    L->Modules  = EmptyCollection;
-
-    /* Return the new struct */
-    return L;
-}
-
-
-
-static void CloseLibrary (Library* L)
-/* Close a library file and remove the list of modules */
-{
-    /* Close the library file */
-    if (fclose (L->F) != 0) {
-        Error ("Error closing `%s': %s", GetString (L->Name), strerror (errno));
-    }
-    L->F = 0;
-}
-
-
-
-static void FreeLibrary (Library* L)
-/* Free a library structure */
-{
-    /* Close the library */
-    CloseLibrary (L);
-
-    /* Free the module index */
-    DoneCollection (&L->Modules);
-
-    /* Free the library structure */
-    xfree (L);
-}
-
-
-
-/*****************************************************************************/
-/*                       Reading file data structures                        */
-/*****************************************************************************/
-
-
-
-static void LibSeek (Library* L, unsigned long Offs)
-/* Do a seek in the library checking for errors */
-{
-    if (fseek (L->F, Offs, SEEK_SET) != 0) {
-        Error ("Seek error in `%s' (%lu): %s",
-               GetString (L->Name), Offs, strerror (errno));
-    }
-}
-
-
-
-static void LibReadHeader (Library* L)
-/* Read a library header */
-{
-    /* Read the remaining header fields (magic is already read) */
-    L->Header.Magic   = LIB_MAGIC;
-    L->Header.Version = Read16 (L->F);
-    if (L->Header.Version != LIB_VERSION) {
-        Error ("Wrong data version in `%s'", GetString (L->Name));
-    }
-    L->Header.Flags   = Read16 (L->F);
-    L->Header.IndexOffs = Read32 (L->F);
-}
-
-
-
-static void LibReadObjHeader (Library* L, ObjData* O)
-/* Read the header of the object file checking the signature */
-{
-    O->Header.Magic = Read32 (L->F);
-    if (O->Header.Magic != OBJ_MAGIC) {
-        Error ("Object file `%s' in library `%s' is invalid",
-               GetObjFileName (O), GetString (L->Name));
-    }
-    O->Header.Version = Read16 (L->F);
-    if (O->Header.Version != OBJ_VERSION) {
-        Error ("Object file `%s' in library `%s' has wrong version",
-               GetObjFileName (O), GetString (L->Name));
-    }
-    O->Header.Flags        = Read16 (L->F);
-    O->Header.OptionOffs   = Read32 (L->F);
-    O->Header.OptionSize   = Read32 (L->F);
-    O->Header.FileOffs     = Read32 (L->F);
-    O->Header.FileSize     = Read32 (L->F);
-    O->Header.SegOffs      = Read32 (L->F);
-    O->Header.SegSize      = Read32 (L->F);
-    O->Header.ImportOffs   = Read32 (L->F);
-    O->Header.ImportSize   = Read32 (L->F);
-    O->Header.ExportOffs   = Read32 (L->F);
-    O->Header.ExportSize   = Read32 (L->F);
-    O->Header.DbgSymOffs   = Read32 (L->F);
-    O->Header.DbgSymSize   = Read32 (L->F);
-    O->Header.LineInfoOffs = Read32 (L->F);
-    O->Header.LineInfoSize = Read32 (L->F);
-    O->Header.StrPoolOffs  = Read32 (L->F);
-    O->Header.StrPoolSize  = Read32 (L->F);
-    O->Header.AssertOffs   = Read32 (L->F);
-    O->Header.AssertSize   = Read32 (L->F);
-    O->Header.ScopeOffs    = Read32 (L->F);
-    O->Header.ScopeSize    = Read32 (L->F);
-    O->Header.SpanOffs     = Read32 (L->F);
-    O->Header.SpanSize     = Read32 (L->F);
-}
-
-
-
-static ObjData* ReadIndexEntry (Library* L)
-/* Read one entry in the index */
-{
-    /* Create a new entry and insert it into the list */
-    ObjData* O  = NewObjData ();
-
-    /* Remember from which library this module is */
-    O->Lib = L;
-
-    /* Module name */
-    O->Name = ReadStr (L->F);
-
-    /* Module flags/MTime/Start/Size */
-    O->Flags    = Read16 (L->F);
-    O->MTime    = Read32 (L->F);
-    O->Start    = Read32 (L->F);
-    Read32 (L->F);                      /* Skip Size */
-
-    /* Done */
-    return O;
-}
-
-
-
-static void ReadBasicData (Library* L, ObjData* O)
-/* Read basic data for an object file that is necessary to resolve external
-** references.
-*/
-{
-    /* Seek to the start of the object file and read the header */
-    LibSeek (L, O->Start);
-    LibReadObjHeader (L, O);
-
-    /* Read the string pool */
-    ObjReadStrPool (L->F, O->Start + O->Header.StrPoolOffs, O);
-
-    /* Read the files list */
-    ObjReadFiles (L->F, O->Start + O->Header.FileOffs, O);
-
-    /* Read the line infos */
-    ObjReadLineInfos (L->F, O->Start + O->Header.LineInfoOffs, O);
-
-    /* Read the imports */
-    ObjReadImports (L->F, O->Start + O->Header.ImportOffs, O);
-
-    /* Read the exports */
-    ObjReadExports (L->F, O->Start + O->Header.ExportOffs, O);
-}
-
-
-
-static void LibReadIndex (Library* L)
-/* Read the index of a library file */
-{
-    unsigned ModuleCount, I;
-
-    /* Seek to the start of the index */
-    LibSeek (L, L->Header.IndexOffs);
-
-    /* Read the object file count and allocate memory */
-    ModuleCount = ReadVar (L->F);
-    CollGrow (&L->Modules, ModuleCount);
-
-    /* Read all entries in the index */
-    while (ModuleCount--) {
-        CollAppend (&L->Modules, ReadIndexEntry (L));
-    }
-
-    /* Walk over the index and read basic data for all object files in the
-    ** library.
-    */
-    for (I = 0; I < CollCount (&L->Modules); ++I) {
-        ReadBasicData (L, CollAtUnchecked (&L->Modules, I));
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                             High level stuff                              */
-/*****************************************************************************/
-
-
-
-static void LibCheckExports (ObjData* O)
-/* Check if the exports from this file can satisfy any import requests. If so,
-** insert the imports and exports from this file and mark the file as added.
-*/
-{
-    unsigned I;
-
-    /* Check all exports */
-    for (I = 0; I < CollCount (&O->Exports); ++I) {
-        const Export* E = CollConstAt (&O->Exports, I);
-        if (IsUnresolved (E->Name)) {
-           /* We need this module, insert the imports and exports */
-            O->Flags |= OBJ_REF;
-            InsertObjGlobals (O);
-            break;
-        }
-    }
-}
-
-
-
-static void LibOpen (FILE* F, const char* Name)
-/* Open the library for use */
-{
-    /* Create a new library structure */
-    Library* L = NewLibrary (F, Name);
-
-    /* Read the remaining header fields (magic is already read) */
-    LibReadHeader (L);
-
-    /* Seek to the index position and read the index */
-    LibReadIndex (L);
-
-    /* Add the library to the list of open libraries */
-    CollAppend (&OpenLibs, L);
-}
-
-
-
-static void LibResolve (void)
-/* Resolve all externals from the list of all currently open libraries */
-{
-    unsigned I, J;
-    unsigned Additions;
-
-    /* Walk repeatedly over all open libraries until there's nothing more
-    ** to add.
-    */
-    do {
-
-        Additions = 0;
-
-        /* Walk over all libraries */
-        for (I = 0; I < CollCount (&OpenLibs); ++I) {
-
-            /* Get the next library */
-            Library* L = CollAt (&OpenLibs, I);
-
-            /* Walk through all modules in this library and check for each
-            ** module if there are unresolved externals in existing modules
-            ** that may be resolved by adding the module.
-            */
-            for (J = 0; J < CollCount (&L->Modules); ++J) {
-
-                /* Get the next module */
-                ObjData* O = CollAtUnchecked (&L->Modules, J);
-
-                /* We only need to check this module if it wasn't added before */
-                if ((O->Flags & OBJ_REF) == 0) {
-                    LibCheckExports (O);
-                    if (O->Flags & OBJ_REF) {
-                        /* The routine added the file */
-                        ++Additions;
-                    }
-                }
-            }
-        }
-
-    } while (Additions > 0);
-
-    /* We do know now which modules must be added, so we can load the data
-    ** for these modues into memory. Since we're walking over all modules
-    ** anyway, we will also remove data for unneeded modules.
-    */
-    for (I = 0; I < CollCount (&OpenLibs); ++I) {
-
-        /* Get the next library */
-        Library* L = CollAt (&OpenLibs, I);
-
-        /* Walk over all modules in this library and add the files list and
-        ** sections for all referenced modules.
-        */
-        J = 0;
-        while (J < CollCount (&L->Modules)) {
-
-            /* Get the object data */
-            ObjData* O = CollAtUnchecked (&L->Modules, J);
-
-            /* Is this object file referenced? */
-            if (O->Flags & OBJ_REF) {
-
-                /* Seek to the start of the debug info and read the debug info */
-                ObjReadDbgSyms (L->F, O->Start + O->Header.DbgSymOffs, O);
-
-                /* Read the assertions from the object file */
-                ObjReadAssertions (L->F, O->Start + O->Header.AssertOffs, O);
-
-                /* Seek to the start of the segment list and read the segments.
-                ** This must be late, since the data here may reference other
-                ** stuff.
-                */
-                ObjReadSections (L->F, O->Start + O->Header.SegOffs, O);
-
-                /* Read the scope table from the object file. Scopes reference
-                ** segments, so we must read them after the sections.
-                */
-                ObjReadScopes (L->F, O->Start + O->Header.ScopeOffs, O);
-
-                /* Read the spans */
-                ObjReadSpans (L->F, O->Start + O->Header.SpanOffs, O);
-
-                /* All references to strings are now resolved, so we can delete
-                ** the module string pool.
-                */
-                FreeObjStrings (O);
-
-                /* Insert the object into the list of all used object files */
-                InsertObjData (O);
-
-                /* Process next object file in library */
-                ++J;
-
-            } else {
-
-                /* Unreferenced object file, remove it */
-                FreeObjData (O);
-                CollDelete (&L->Modules, J);
-
-            }
-        }
-
-        /* If we have referenced modules in this library, assign it an id
-        ** (which is the index in the library collection) and keep it.
-        */
-        if (CollCount (&L->Modules) > 0) {
-            CloseLibrary (L);
-            L->Id = CollCount (&LibraryList);
-            CollAppend (&LibraryList, L);
-        } else {
-            /* Delete the library */
-            FreeLibrary (L);
-            CollDelete (&OpenLibs, I);
-        }
-    }
-
-    /* We're done with all open libraries, clear the OpenLibs collection */
-    CollDeleteAll (&OpenLibs);
-}
-
-
-
-void LibAdd (FILE* F, const char* Name)
-/* Add files from the library to the list if there are references that could
-** be satisfied.
-*/
-{
-    /* Add the library to the list of open libraries */
-    LibOpen (F, Name);
-
-    /* If there is no library group open, just resolve all open symbols and
-    ** close the library. Otherwise we will do nothing because resolving will
-    ** be done when the group is closed.
-    */
-    if (!Grouping) {
-        LibResolve ();
-    }
-}
-
-
-
-void LibStartGroup (void)
-/* Start a library group. Objects within a library group may reference each
-** other, and libraries are searched repeatedly until all references are
-** satisfied.
-*/
-{
-    /* We cannot already have a group open */
-    if (Grouping) {
-        Error ("There's already a library group open");
-    }
-
-    /* Start a new group */
-    Grouping = 1;
-}
-
-
-
-void LibEndGroup (void)
-/* End a library group and resolve all open references. Objects within a
-** library group may reference each other, and libraries are searched
-** repeatedly until all references are satisfied.
-*/
-{
-    /* We must have a library group open */
-    if (!Grouping) {
-        Error ("There's no library group open");
-    }
-
-    /* Resolve symbols, end the group */
-    LibResolve ();
-    Grouping = 0;
-}
-
-
-
-void LibCheckGroup (void)
-/* Check if there are open library groups */
-{
-    if (Grouping) {
-        Error ("Library group was never closed");
-    }
-}
-
-
-
-const char* GetLibFileName (const Library* L)
-/* Get the name of a library */
-{
-    return GetString (L->Name);
-}
-
-
-
-unsigned GetLibId (const Library* L)
-/* Get the id of a library file. */
-{
-    return L->Id;
-}
-
-
-
-unsigned LibraryCount (void)
-/* Return the total number of libraries */
-{
-    return CollCount (&LibraryList);
-}
-
-
-
-void PrintDbgLibraries (FILE* F)
-/* Output the libraries to a debug info file */
-{
-    unsigned I;
-
-    /* Output information about all libraries */
-    for (I = 0; I < CollCount (&LibraryList); ++I) {
-        /* Get the library */
-        const Library* L = CollAtUnchecked (&LibraryList, I);
-
-        /* Output the info */
-        fprintf (F, "lib\tid=%u,name=\"%s\"\n", L->Id, GetString (L->Name));
-    }
-}
diff --git a/src/ld65/library.h b/src/ld65/library.h
deleted file mode 100644 (file)
index abf7567..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 library.h                                 */
-/*                                                                           */
-/*          Library data structures and helpers for the ld65 linker          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef LIBRARY_H
-#define LIBRARY_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Opaque structure */
-struct Library;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void LibAdd (FILE* F, const char* Name);
-/* Add files from the library to the list if there are references that could
-** be satisfied.
-*/
-
-void LibStartGroup (void);
-/* Start a library group. Objects within a library group may reference each
-** other, and libraries are searched repeatedly until all references are
-** satisfied.
-*/
-
-void LibEndGroup (void);
-/* End a library group and resolve all open references. Objects within a
-** library group may reference each other, and libraries are searched
-** repeatedly until all references are satisfied.
-*/
-
-void LibCheckGroup (void);
-/* Check if there are open library groups */
-
-const char* GetLibFileName (const struct Library* L);
-/* Get the name of a library */
-
-unsigned GetLibId (const struct Library* L);
-/* Get the id of a library file. */
-
-unsigned LibraryCount (void);
-/* Return the total number of libraries */
-
-void PrintDbgLibraries (FILE* F);
-/* Output the libraries to a debug info file */
-
-
-
-/* End of library.h */
-
-#endif
diff --git a/src/ld65/lineinfo.c b/src/ld65/lineinfo.c
deleted file mode 100644 (file)
index 25eca4f..0000000
+++ /dev/null
@@ -1,286 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                lineinfo.h                                 */
-/*                                                                           */
-/*                      Source file line info structure                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "check.h"
-#include "lidefs.h"
-#include "xmalloc.h"
-
-/* ld65 */
-#include "error.h"
-#include "fileinfo.h"
-#include "fileio.h"
-#include "lineinfo.h"
-#include "objdata.h"
-#include "segments.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static LineInfo* NewLineInfo (void)
-/* Create and return a new LineInfo struct with mostly empty fields */
-{
-    /* Allocate memory */
-    LineInfo* LI = xmalloc (sizeof (LineInfo));
-
-    /* Initialize the fields */
-    LI->Id         = ~0U;
-    LI->File       = 0;
-    LI->Type       = LI_MAKE_TYPE (LI_TYPE_ASM, 0);
-    LI->Pos.Name   = INVALID_STRING_ID;
-    LI->Pos.Line   = 0;
-    LI->Pos.Col    = 0;
-    LI->Spans      = 0;
-
-    /* Return the new struct */
-    return LI;
-}
-
-
-
-void FreeLineInfo (LineInfo* LI)
-/* Free a LineInfo structure. */
-{
-    /* Free the span list */
-    xfree (LI->Spans);
-
-    /* Free the structure itself */
-    xfree (LI);
-}
-
-
-
-LineInfo* DupLineInfo (const LineInfo* LI)
-/* Creates a duplicate of a line info structure */
-{
-    /* Allocate memory */
-    LineInfo* New = xmalloc (sizeof (LineInfo));
-
-    /* Copy the fields (leave id invalid) */
-    New->Id     = LI->Id;
-    New->File   = LI->File;
-    New->Type   = LI->Type;
-    New->Pos    = LI->Pos;
-    New->Spans  = DupSpanList (LI->Spans);
-
-    /* Return the copy */
-    return New;
-}
-
-
-
-LineInfo* GenLineInfo (const FilePos* Pos)
-/* Generate a new (internally used) line info with the given information */
-{
-    /* Create a new LineInfo struct */
-    LineInfo* LI = NewLineInfo ();
-
-    /* Initialize the fields in the new LineInfo */
-    LI->Pos = *Pos;
-
-    /* Return the struct read */
-    return LI;
-}
-
-
-
-LineInfo* ReadLineInfo (FILE* F, ObjData* O)
-/* Read a line info from a file and return it */
-{
-    /* Create a new LineInfo struct */
-    LineInfo* LI = NewLineInfo ();
-
-    /* Read/fill the fields in the new LineInfo */
-    LI->Pos.Line = ReadVar (F);
-    LI->Pos.Col  = ReadVar (F);
-    LI->File     = CollAt (&O->Files, ReadVar (F));
-    LI->Pos.Name = LI->File->Name;
-    LI->Type     = ReadVar (F);
-    LI->Spans    = ReadSpanList (F);
-
-    /* Return the struct read */
-    return LI;
-}
-
-
-
-void ReadLineInfoList (FILE* F, ObjData* O, Collection* LineInfos)
-/* Read a list of line infos stored as a list of indices in the object file,
-** make real line infos from them and place them into the passed collection.
-*/
-{
-    /* Read the number of line info indices that follow */
-    unsigned LineInfoCount = ReadVar (F);
-
-    /* Grow the collection as needed */
-    CollGrow (LineInfos, LineInfoCount);
-
-    /* Read the line infos and resolve them */
-    while (LineInfoCount--) {
-
-        /* Read an index */
-        unsigned LineInfoIndex = ReadVar (F);
-
-        /* The line info index was written by the assembler and must
-        ** therefore be part of the line infos read from the object file.
-        */
-        if (LineInfoIndex >= CollCount (&O->LineInfos)) {
-            Internal ("Invalid line info index %u in module `%s' - max is %u",
-                      LineInfoIndex,
-                      GetObjFileName (O),
-                      CollCount (&O->LineInfos));
-        }
-
-        /* Add the line info to the collection */
-        CollAppend (LineInfos, CollAt (&O->LineInfos, LineInfoIndex));
-    }
-}
-
-
-
-const LineInfo* GetAsmLineInfo (const Collection* LineInfos)
-/* Find a line info of type LI_TYPE_ASM and count zero in the given collection
-** and return it. Return NULL if no such line info was found.
-*/
-{
-    unsigned I;
-
-    /* Search for a line info of LI_TYPE_ASM */
-    for (I = 0; I < CollCount (LineInfos); ++I) {
-        const LineInfo* LI = CollConstAt (LineInfos, I);
-        if (LI->Type == LI_MAKE_TYPE (LI_TYPE_ASM, 0)) {
-            return LI;
-        }
-    }
-
-    /* Not found */
-    return 0;
-}
-
-
-
-unsigned LineInfoCount (void)
-/* Return the total number of line infos */
-{
-    /* Walk over all object files */
-    unsigned I;
-    unsigned Count = 0;
-    for (I = 0; I < CollCount (&ObjDataList); ++I) {
-
-        /* Get this object file */
-        const ObjData* O = CollAtUnchecked (&ObjDataList, I);
-
-        /* Count spans */
-        Count += CollCount (&O->LineInfos);
-    }
-
-    return Count;
-}
-
-
-
-void AssignLineInfoIds (void)
-/* Assign the ids to the line infos */
-{
-    unsigned I, J;
-
-    /* Walk over all line infos */
-    unsigned Id = 0;
-    for (I = 0; I < CollCount (&ObjDataList); ++I) {
-
-        /* Get the object file */
-        ObjData* O = CollAtUnchecked (&ObjDataList, I);
-
-        /* Output the line infos */
-        for (J = 0; J < CollCount (&O->LineInfos); ++J) {
-
-            /* Get this line info */
-            LineInfo* LI = CollAtUnchecked (&O->LineInfos, J);
-
-            /* Assign the id */
-            LI->Id = Id++;
-        }
-    }
-}
-
-
-
-void PrintDbgLineInfo (FILE* F)
-/* Output the line infos to a debug info file */
-{
-    unsigned I, J;
-
-    /* Print line infos from all modules we have linked into the output file */
-    for (I = 0; I < CollCount (&ObjDataList); ++I) {
-
-        /* Get the object file */
-        const ObjData* O = CollAtUnchecked (&ObjDataList, I);
-
-        /* Output the line infos */
-        for (J = 0; J < CollCount (&O->LineInfos); ++J) {
-
-            /* Get this line info */
-            const LineInfo* LI = CollConstAt (&O->LineInfos, J);
-
-            /* Get the line info type and count */
-            unsigned Type  = LI_GET_TYPE (LI->Type);
-            unsigned Count = LI_GET_COUNT (LI->Type);
-
-            /* Print the start of the line */
-            fprintf (F,
-                     "line\tid=%u,file=%u,line=%u",
-                     LI->Id, LI->File->Id, GetSourceLine (LI));
-
-            /* Print type if not LI_TYPE_ASM and count if not zero */
-            if (Type != LI_TYPE_ASM) {
-                fprintf (F, ",type=%u", Type);
-            }
-            if (Count != 0) {
-                fprintf (F, ",count=%u", Count);
-            }
-
-            /* Add spans if the line info has it */
-            PrintDbgSpanList (F, O, LI->Spans);
-
-            /* Terminate line */
-            fputc ('\n', F);
-        }
-    }
-}
diff --git a/src/ld65/lineinfo.h b/src/ld65/lineinfo.h
deleted file mode 100644 (file)
index 84be249..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                lineinfo.h                                 */
-/*                                                                           */
-/*                      Source file line info structure                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef LINEINFO_H
-#define LINEINFO_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "coll.h"
-#include "filepos.h"
-
-/* ld65 */
-#include "span.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-struct ObjData;
-struct Segment;
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Structure holding line information. The Pos.Name field is always the
-** global string id of the file name. If the line info was read from the
-** object file, the File pointer is valid, otherwise it is NULL.
-*/
-typedef struct LineInfo LineInfo;
-struct LineInfo {
-    unsigned            Id;             /* Line info id */
-    struct FileInfo*    File;           /* File struct for this line if any */
-    unsigned            Type;           /* Type of line info */
-    FilePos             Pos;            /* Position in file */
-    unsigned*           Spans;          /* Spans for this line */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-LineInfo* GenLineInfo (const FilePos* Pos);
-/* Generate a new (internally used) line info with the given information */
-
-LineInfo* ReadLineInfo (FILE* F, struct ObjData* O);
-/* Read a line info from a file and return it */
-
-void FreeLineInfo (LineInfo* LI);
-/* Free a LineInfo structure. */
-
-LineInfo* DupLineInfo (const LineInfo* LI);
-/* Creates a duplicate of a line info structure */
-
-void ReadLineInfoList (FILE* F, struct ObjData* O, Collection* LineInfos);
-/* Read a list of line infos stored as a list of indices in the object file,
-** make real line infos from them and place them into the passed collection.
-*/
-
-const LineInfo* GetAsmLineInfo (const Collection* LineInfos);
-/* Find a line info of type LI_TYPE_ASM and count zero in the given collection
-** and return it. Return NULL if no such line info was found.
-*/
-
-#if defined(HAVE_INLINE)
-INLINE const FilePos* GetSourcePos (const LineInfo* LI)
-/* Return the source file position from the given line info */
-{
-    return &LI->Pos;
-}
-#else
-#  define GetSourcePos(LI)      (&(LI)->Pos)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE const char* GetSourceName (const LineInfo* LI)
-/* Return the name of a source file from the given line info */
-{
-    return GetString (LI->Pos.Name);
-}
-#else
-#  define GetSourceName(LI)     (GetString ((LI)->Pos.Name))
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned GetSourceLine (const LineInfo* LI)
-/* Return the source file line from the given line info */
-{
-    return LI->Pos.Line;
-}
-#else
-#  define GetSourceLine(LI)     ((LI)->Pos.Line)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned GetSourceCol (const LineInfo* LI)
-/* Return the source file column from the given line info */
-{
-    return LI->Pos.Col;
-}
-#else
-#  define GetSourceCol(LI)      ((LI)->Pos.Col)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE const char* GetSourceNameFromList (const Collection* LineInfos)
-/* Return the name of a source file from a list of line infos */
-{
-    /* The relevant entry is in slot zero */
-    return GetSourceName (CollConstAt (LineInfos, 0));
-}
-#else
-#  define GetSourceNameFromList(LineInfos)      \
-        GetSourceName ((const LineInfo*) CollConstAt ((LineInfos), 0))
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned GetSourceLineFromList (const Collection* LineInfos)
-/* Return the source file line from a list of line infos */
-{
-    /* The relevant entry is in slot zero */
-    return GetSourceLine (CollConstAt (LineInfos, 0));
-}
-#else
-#  define GetSourceLineFromList(LineInfos)      \
-        GetSourceLine ((const LineInfo*) CollConstAt ((LineInfos), 0))
-#endif
-
-unsigned LineInfoCount (void);
-/* Return the total number of line infos */
-
-void AssignLineInfoIds (void);
-/* Assign the ids to the line infos */
-
-void PrintDbgLineInfo (FILE* F);
-/* Output the line infos to a debug info file */
-
-
-
-/* End of lineinfo.h */
-
-#endif
diff --git a/src/ld65/main.c b/src/ld65/main.c
deleted file mode 100644 (file)
index 5030b1d..0000000
+++ /dev/null
@@ -1,851 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  main.c                                   */
-/*                                                                           */
-/*                     Main program for the ld65 linker                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "addrsize.h"
-#include "chartype.h"
-#include "cmdline.h"
-#include "filetype.h"
-#include "libdefs.h"
-#include "objdefs.h"
-#include "print.h"
-#include "target.h"
-#include "version.h"
-#include "xmalloc.h"
-
-/* ld65 */
-#include "asserts.h"
-#include "binfmt.h"
-#include "condes.h"
-#include "config.h"
-#include "dbgfile.h"
-#include "error.h"
-#include "exports.h"
-#include "fileio.h"
-#include "filepath.h"
-#include "global.h"
-#include "library.h"
-#include "mapfile.h"
-#include "objfile.h"
-#include "scanner.h"
-#include "segments.h"
-#include "spool.h"
-#include "tpool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-static unsigned         ObjFiles   = 0; /* Count of object files linked */
-static unsigned         LibFiles   = 0; /* Count of library files linked */
-
-/* struct InputFile.Type definitions */
-#define INPUT_FILES_FILE       0        /* Entry is a file (unknown type) */
-#define INPUT_FILES_FILE_OBJ   1        /* Entry is a object file */
-#define INPUT_FILES_FILE_LIB   2        /* Entry is a library file */
-#define INPUT_FILES_SGROUP     3        /* Entry is 'StartGroup' */
-#define INPUT_FILES_EGROUP     4        /* Entry is 'EndGroup' */
-
-#define MAX_INPUTFILES         256
-
-/* Array of inputs (libraries and object files) */
-static struct InputFile {
-    const char *FileName;
-    unsigned Type;
-}                              *InputFiles;
-static unsigned                InputFilesCount = 0;
-static const char              *CmdlineCfgFile = NULL,
-                               *CmdlineTarget = NULL;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void Usage (void)
-/* Print usage information and exit */
-{
-    printf ("Usage: %s [options] module ...\n"
-            "Short options:\n"
-            "  -(\t\t\tStart a library group\n"
-            "  -)\t\t\tEnd a library group\n"
-            "  -C name\t\tUse linker config file\n"
-            "  -D sym=val\t\tDefine a symbol\n"
-            "  -L path\t\tSpecify a library search path\n"
-            "  -Ln name\t\tCreate a VICE label file\n"
-            "  -S addr\t\tSet the default start address\n"
-            "  -V\t\t\tPrint the linker version\n"
-            "  -h\t\t\tHelp (this text)\n"
-            "  -m name\t\tCreate a map file\n"
-            "  -o name\t\tName the default output file\n"
-            "  -t sys\t\tSet the target system\n"
-            "  -u sym\t\tForce an import of symbol `sym'\n"
-            "  -v\t\t\tVerbose mode\n"
-            "  -vm\t\t\tVerbose map file\n"
-            "\n"
-            "Long options:\n"
-            "  --cfg-path path\tSpecify a config file search path\n"
-            "  --config name\t\tUse linker config file\n"
-            "  --dbgfile name\tGenerate debug information\n"
-            "  --define sym=val\tDefine a symbol\n"
-            "  --end-group\t\tEnd a library group\n"
-            "  --force-import sym\tForce an import of symbol `sym'\n"
-            "  --help\t\tHelp (this text)\n"
-            "  --lib file\t\tLink this library\n"
-            "  --lib-path path\tSpecify a library search path\n"
-            "  --mapfile name\tCreate a map file\n"
-            "  --module-id id\tSpecify a module id\n"
-            "  --obj file\t\tLink this object file\n"
-            "  --obj-path path\tSpecify an object file search path\n"
-            "  --start-addr addr\tSet the default start address\n"
-            "  --start-group\t\tStart a library group\n"
-            "  --target sys\t\tSet the target system\n"
-            "  --version\t\tPrint the linker version\n",
-            ProgName);
-}
-
-
-
-static unsigned long CvtNumber (const char* Arg, const char* Number)
-/* Convert a number from a string. Allow '$' and '0x' prefixes for hex
-** numbers.
-*/
-{
-    unsigned long Val;
-    int           Converted;
-
-    /* Convert */
-    if (*Number == '$') {
-        ++Number;
-        Converted = sscanf (Number, "%lx", &Val);
-    } else {
-        Converted = sscanf (Number, "%li", (long*)&Val);
-    }
-
-    /* Check if we do really have a number */
-    if (Converted != 1) {
-        Error ("Invalid number given in argument: %s\n", Arg);
-    }
-
-    /* Return the result */
-    return Val;
-}
-
-
-
-static void LinkFile (const char* Name, FILETYPE Type)
-/* Handle one file */
-{
-    char*         PathName;
-    FILE*         F;
-    unsigned long Magic;
-
-
-    /* If we don't know the file type, determine it from the extension */
-    if (Type == FILETYPE_UNKNOWN) {
-        Type = GetFileType (Name);
-    }
-
-    /* For known file types, search the file in the directory list */
-    switch (Type) {
-
-        case FILETYPE_LIB:
-            PathName = SearchFile (LibSearchPath, Name);
-            if (PathName == 0) {
-                PathName = SearchFile (LibDefaultPath, Name);
-            }
-            break;
-
-        case FILETYPE_OBJ:
-            PathName = SearchFile (ObjSearchPath, Name);
-            if (PathName == 0) {
-                PathName = SearchFile (ObjDefaultPath, Name);
-            }
-            break;
-
-        default:
-            PathName = xstrdup (Name);   /* Use the name as is */
-            break;
-    }
-
-    /* We must have a valid name now */
-    if (PathName == 0) {
-        Error ("Input file `%s' not found", Name);
-    }
-
-    /* Try to open the file */
-    F = fopen (PathName, "rb");
-    if (F == 0) {
-        Error ("Cannot open `%s': %s", PathName, strerror (errno));
-    }
-
-    /* Read the magic word */
-    Magic = Read32 (F);
-
-    /* Check the magic for known file types. The handling is somewhat weird
-    ** since we may have given a file with a ".lib" extension, which was
-    ** searched and found in a directory for library files, but we now find
-    ** out (by looking at the magic) that it's indeed an object file. We just
-    ** ignore the problem and hope no one will notice...
-    */
-    switch (Magic) {
-
-        case OBJ_MAGIC:
-            ObjAdd (F, PathName);
-            ++ObjFiles;
-            break;
-
-        case LIB_MAGIC:
-            LibAdd (F, PathName);
-            ++LibFiles;
-            break;
-
-        default:
-            fclose (F);
-            Error ("File `%s' has unknown type", PathName);
-
-    }
-
-    /* Free allocated memory. */
-    xfree (PathName);
-}
-
-
-
-static void DefineSymbol (const char* Def)
-/* Define a symbol from the command line */
-{
-    const char* P;
-    long Val;
-    StrBuf SymName = AUTO_STRBUF_INITIALIZER;
-
-
-    /* The symbol must start with a character or underline */
-    if (Def [0] != '_' && !IsAlpha (Def [0])) {
-        InvDef (Def);
-    }
-    P = Def;
-
-    /* Copy the symbol, checking the remainder */
-    while (IsAlNum (*P) || *P == '_') {
-        SB_AppendChar (&SymName, *P++);
-    }
-    SB_Terminate (&SymName);
-
-    /* Do we have a value given? */
-    if (*P != '=') {
-        InvDef (Def);
-    } else {
-        /* We have a value */
-        ++P;
-        if (*P == '$') {
-            ++P;
-            if (sscanf (P, "%lx", &Val) != 1) {
-                InvDef (Def);
-            }
-        } else {
-            if (sscanf (P, "%li", &Val) != 1) {
-                InvDef (Def);
-            }
-        }
-    }
-
-    /* Define the new symbol */
-    CreateConstExport (GetStringId (SB_GetConstBuf (&SymName)), Val);
-}
-
-
-
-static void OptCfgPath (const char* Opt attribute ((unused)), const char* Arg)
-/* Specify a config file search path */
-{
-    AddSearchPath (CfgSearchPath, Arg);
-}
-
-
-
-static void OptConfig (const char* Opt attribute ((unused)), const char* Arg)
-/* Define the config file */
-{
-    char* PathName;
-
-    if (CfgAvail ()) {
-        Error ("Cannot use -C/-t twice");
-    }
-    /* Search for the file */
-    PathName = SearchFile (CfgSearchPath, Arg);
-    if (PathName == 0) {
-        PathName = SearchFile (CfgDefaultPath, Arg);
-    }
-    if (PathName == 0) {
-        Error ("Cannot find config file `%s'", Arg);
-    }
-
-    /* Read the config */
-    CfgSetName (PathName);
-    CfgRead ();
-}
-
-
-
-static void OptDbgFile (const char* Opt attribute ((unused)), const char* Arg)
-/* Give the name of the debug file */
-{
-    DbgFileName = Arg;
-}
-
-
-
-static void OptDefine (const char* Opt attribute ((unused)), const char* Arg)
-/* Define a symbol on the command line */
-{
-    DefineSymbol (Arg);
-}
-
-
-
-static void OptEndGroup (const char* Opt attribute ((unused)),
-                         const char* Arg attribute ((unused)))
-/* End a library group */
-{
-    LibEndGroup ();
-}
-
-
-
-static void OptForceImport (const char* Opt attribute ((unused)), const char* Arg)
-/* Force an import of a symbol */
-{
-    /* An optional address size may be specified */
-    const char* ColPos = strchr (Arg, ':');
-    if (ColPos == 0) {
-
-        /* Use default address size (which for now is always absolute
-        ** addressing)
-        */
-        InsertImport (GenImport (GetStringId (Arg), ADDR_SIZE_ABS));
-
-    } else {
-
-        char* A;
-
-        /* Get the address size and check it */
-        unsigned char AddrSize = AddrSizeFromStr (ColPos+1);
-        if (AddrSize == ADDR_SIZE_INVALID) {
-            Error ("Invalid address size `%s'", ColPos+1);
-        }
-
-        /* Create a copy of the argument */
-        A = xstrdup (Arg);
-
-        /* We need just the symbol */
-        A[ColPos - Arg] = '\0';
-
-        /* Generate the import */
-        InsertImport (GenImport (GetStringId (A), AddrSize));
-
-        /* Delete the copy of the argument */
-        xfree (A);
-    }
-}
-
-
-
-static void OptHelp (const char* Opt attribute ((unused)),
-                     const char* Arg attribute ((unused)))
-/* Print usage information and exit */
-{
-    Usage ();
-    exit (EXIT_SUCCESS);
-}
-
-
-
-static void OptLib (const char* Opt attribute ((unused)), const char* Arg)
-/* Link a library */
-{
-    InputFiles[InputFilesCount].Type = INPUT_FILES_FILE_LIB;
-    InputFiles[InputFilesCount].FileName = Arg;
-    if (++InputFilesCount >= MAX_INPUTFILES)
-        Error ("Too many input files");
-}
-
-
-
-static void OptLibPath (const char* Opt attribute ((unused)), const char* Arg)
-/* Specify a library file search path */
-{
-    AddSearchPath (LibSearchPath, Arg);
-}
-
-
-
-static void OptMapFile (const char* Opt attribute ((unused)), const char* Arg)
-/* Give the name of the map file */
-{
-    if (MapFileName) {
-        Error ("Cannot use -m twice");
-    }
-    MapFileName = Arg;
-}
-
-
-
-static void OptModuleId (const char* Opt, const char* Arg)
-/* Specify a module id */
-{
-    unsigned long Id = CvtNumber (Opt, Arg);
-    if (Id > 0xFFFFUL) {
-        Error ("Range error in module id");
-    }
-    ModuleId = (unsigned) Id;
-}
-
-
-
-static void OptObj (const char* Opt attribute ((unused)), const char* Arg)
-/* Link an object file */
-{
-    InputFiles[InputFilesCount].Type = INPUT_FILES_FILE_OBJ;
-    InputFiles[InputFilesCount].FileName = Arg;
-    if (++InputFilesCount >= MAX_INPUTFILES)
-        Error ("Too many input files");
-}
-
-
-
-static void OptObjPath (const char* Opt attribute ((unused)), const char* Arg)
-/* Specify an object file search path */
-{
-    AddSearchPath (ObjSearchPath, Arg);
-}
-
-
-
-static void OptOutputName (const char* Opt attribute ((unused)), const char* Arg)
-/* Give the name of the output file */
-{
-    static int OutputNameSeen = 0;
-    if (OutputNameSeen) {
-        Error ("Cannot use -o twice");
-    }
-    OutputNameSeen = 1;
-    OutputName = Arg;
-}
-
-
-
-static void OptStartAddr (const char* Opt, const char* Arg)
-/* Set the default start address */
-{
-    if (HaveStartAddr) {
-        Error ("Cannot use -S twice");
-    }
-    StartAddr = CvtNumber (Opt, Arg);
-    HaveStartAddr = 1;
-}
-
-
-
-static void OptStartGroup (const char* Opt attribute ((unused)),
-                           const char* Arg attribute ((unused)))
-/* Start a library group */
-{
-    LibStartGroup ();
-}
-
-
-
-static void OptTarget (const char* Opt attribute ((unused)), const char* Arg)
-/* Set the target system */
-{
-    StrBuf FileName = STATIC_STRBUF_INITIALIZER;
-    char*  PathName;
-
-    /* Map the target name to a target id */
-    Target = FindTarget (Arg);
-    if (Target == TGT_UNKNOWN) {
-        Error ("Invalid target name: `%s'", Arg);
-    }
-
-    /* Set the target binary format */
-    DefaultBinFmt = GetTargetProperties (Target)->BinFmt;
-
-    /* Build config file name from target name */
-    SB_CopyStr (&FileName, GetTargetName (Target));
-    SB_AppendStr (&FileName, ".cfg");
-    SB_Terminate (&FileName);
-
-    /* Search for the file */
-    PathName = SearchFile (CfgSearchPath, SB_GetBuf (&FileName));
-    if (PathName == 0) {
-        PathName = SearchFile (CfgDefaultPath, SB_GetBuf (&FileName));
-    }
-    if (PathName == 0) {
-        Error ("Cannot find config file `%s'", SB_GetBuf (&FileName));
-    }
-
-    /* Free file name memory */
-    SB_Done (&FileName);
-
-    /* Read the file */
-    CfgSetName (PathName);
-    CfgRead ();
-}
-
-
-
-static void OptVersion (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Print the assembler version */
-{
-    fprintf (stderr, "ld65 V%s\n", GetVersionAsString ());
-}
-
-
-
-static void CmdlOptStartGroup (const char* Opt attribute ((unused)),
-                               const char* Arg attribute ((unused)))
-/* Remember 'start group' occurrence in input files array */
-{
-    InputFiles[InputFilesCount].Type = INPUT_FILES_SGROUP;
-    InputFiles[InputFilesCount].FileName = Arg;  /* Unused */
-    if (++InputFilesCount >= MAX_INPUTFILES)
-        Error ("Too many input files");
-}
-
-
-
-static void CmdlOptEndGroup (const char* Opt attribute ((unused)),
-                             const char* Arg attribute ((unused)))
-/* Remember 'end group' occurrence in input files array */
-{
-    InputFiles[InputFilesCount].Type = INPUT_FILES_EGROUP;
-    InputFiles[InputFilesCount].FileName = Arg;  /* Unused */
-    if (++InputFilesCount >= MAX_INPUTFILES)
-        Error ("Too many input files");
-}
-
-
-
-static void CmdlOptConfig (const char* Opt attribute ((unused)), const char* Arg)
-/* Set 'config file' command line parameter */
-{
-    if (CmdlineCfgFile || CmdlineTarget) {
-        Error ("Cannot use -C/-t twice");
-    }
-    CmdlineCfgFile = Arg;
-}
-
-
-
-static void CmdlOptTarget (const char* Opt attribute ((unused)), const char* Arg)
-/* Set 'target' command line parameter */
-{
-    if (CmdlineCfgFile || CmdlineTarget) {
-        Error ("Cannot use -C/-t twice");
-    }
-    CmdlineTarget = Arg;
-}
-
-
-
-static void ParseCommandLine(void)
-{
-    /* Program long options */
-    static const LongOpt OptTab[] = {
-        { "--cfg-path",         1,      OptCfgPath              },
-        { "--config",           1,      CmdlOptConfig           },
-        { "--dbgfile",          1,      OptDbgFile              },
-        { "--define",           1,      OptDefine               },
-        { "--end-group",        0,      CmdlOptEndGroup         },
-        { "--force-import",     1,      OptForceImport          },
-        { "--help",             0,      OptHelp                 },
-        { "--lib",              1,      OptLib                  },
-        { "--lib-path",         1,      OptLibPath              },
-        { "--mapfile",          1,      OptMapFile              },
-        { "--module-id",        1,      OptModuleId             },
-        { "--obj",              1,      OptObj                  },
-        { "--obj-path",         1,      OptObjPath              },
-        { "--start-addr",       1,      OptStartAddr            },
-        { "--start-group",      0,      CmdlOptStartGroup       },
-        { "--target",           1,      CmdlOptTarget           },
-        { "--version",          0,      OptVersion              },
-    };
-
-    unsigned I;
-    unsigned LabelFileGiven = 0;
-
-    /* Allocate memory for input file array */
-    InputFiles = xmalloc (MAX_INPUTFILES * sizeof (struct InputFile));
-
-    /* Defer setting of config/target and input files until all options are parsed */
-    I = 1;
-    while (I < ArgCount) {
-
-        /* Get the argument */
-        const char* Arg = ArgVec[I];
-
-        /* Check for an option */
-        if (Arg [0] == '-') {
-
-            /* An option */
-            switch (Arg [1]) {
-
-                case '-':
-                    LongOption (&I, OptTab, sizeof(OptTab)/sizeof(OptTab[0]));
-                    break;
-
-                case '(':
-                    CmdlOptStartGroup (Arg, 0);
-                    break;
-
-                case ')':
-                    CmdlOptEndGroup (Arg, 0);
-                    break;
-
-                case 'h':
-                case '?':
-                    OptHelp (Arg, 0);
-                    break;
-
-                case 'm':
-                    OptMapFile (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'o':
-                    OptOutputName (NULL, GetArg (&I, 2));
-                    break;
-
-                case 't':
-                    CmdlOptTarget (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'u':
-                    OptForceImport (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'v':
-                    switch (Arg [2]) {
-                        case 'm':   VerboseMap = 1;     break;
-                        case '\0':  ++Verbosity;        break;
-                        default:    UnknownOption (Arg);
-                    }
-                    break;
-
-                case 'C':
-                    CmdlOptConfig (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'D':
-                    OptDefine (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'L':
-                    switch (Arg [2]) {
-                        case 'n':
-                            /* ## This one is obsolete and will go */
-                            if (LabelFileGiven) {
-                                Error ("Cannot use -Ln twice");
-                            }
-                            LabelFileGiven = 1;
-                            LabelFileName = GetArg (&I, 3);
-                            break;
-                        default:
-                            OptLibPath (Arg, GetArg (&I, 2));
-                            break;
-                    }
-                    break;
-
-                case 'S':
-                    OptStartAddr (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'V':
-                    OptVersion (Arg, 0);
-                    break;
-
-                default:
-                    UnknownOption (Arg);
-                    break;
-            }
-
-        } else {
-
-            /* A filename */
-            InputFiles[InputFilesCount].Type = INPUT_FILES_FILE;
-            InputFiles[InputFilesCount].FileName = Arg;
-            if (++InputFilesCount >= MAX_INPUTFILES)
-                Error ("Too many input files");
-
-        }
-
-        /* Next argument */
-        ++I;
-    }
-
-    if (CmdlineTarget) {
-        OptTarget (NULL, CmdlineTarget);
-    } else if (CmdlineCfgFile) {
-        OptConfig (NULL, CmdlineCfgFile);
-    }
-
-    /* Process input files */
-    for (I = 0; I < InputFilesCount; ++I) {
-        switch (InputFiles[I].Type) {
-            case INPUT_FILES_FILE:
-                LinkFile (InputFiles[I].FileName, FILETYPE_UNKNOWN);
-                break;
-            case INPUT_FILES_FILE_LIB:
-                LinkFile (InputFiles[I].FileName, FILETYPE_LIB);
-                break;
-            case INPUT_FILES_FILE_OBJ:
-                LinkFile (InputFiles[I].FileName, FILETYPE_OBJ);
-                break;
-            case INPUT_FILES_SGROUP:
-                OptStartGroup (NULL, 0);
-                break;
-            case INPUT_FILES_EGROUP:
-                OptEndGroup (NULL, 0);
-                break;
-            default:
-                abort ();
-        }
-    }
-
-    /* Free memory used for input file array */
-    xfree (InputFiles);
-}
-
-
-
-int main (int argc, char* argv [])
-/* Linker main program */
-{
-    unsigned MemoryAreaOverflows;
-
-    /* Initialize the cmdline module */
-    InitCmdLine (&argc, &argv, "ld65");
-
-    /* Initialize the input file search paths */
-    InitSearchPaths ();
-
-    /* Initialize the string pool */
-    InitStrPool ();
-
-    /* Initialize the type pool */
-    InitTypePool ();
-
-    /* Parse the command line */
-    ParseCommandLine ();
-
-    /* Check if we had any object files */
-    if (ObjFiles == 0) {
-        Error ("No object files to link");
-    }
-
-    /* Check if we have a valid configuration */
-    if (!CfgAvail ()) {
-        Error ("Memory configuration missing");
-    }
-
-    /* Check if we have open library groups */
-    LibCheckGroup ();
-
-    /* Create the condes tables if requested */
-    ConDesCreate ();
-
-    /* Process data from the config file. Assign start addresses for the
-    ** segments, define linker symbols. The function will return the number
-    ** of memory area overflows (zero on success).
-    */
-    MemoryAreaOverflows = CfgProcess ();
-
-    /* Check module assertions */
-    CheckAssertions ();
-
-    /* Check for import/export mismatches */
-    CheckExports ();
-
-    /* If we had a memory area overflow before, we cannot generate the output
-    ** file. However, we will generate a short map file if requested, since
-    ** this will help the user to rearrange segments and fix the overflow.
-    */
-    if (MemoryAreaOverflows) {
-        if (MapFileName) {
-            CreateMapFile (SHORT_MAPFILE);
-        }
-        Error ("Cannot generate output due to memory area overflow%s",
-               (MemoryAreaOverflows > 1)? "s" : "");
-    }
-
-    /* Create the output file */
-    CfgWriteTarget ();
-
-    /* Check for segments not written to the output file */
-    CheckSegments ();
-
-    /* If requested, create a map file and a label file for VICE */
-    if (MapFileName) {
-        CreateMapFile (LONG_MAPFILE);
-    }
-    if (LabelFileName) {
-        CreateLabelFile ();
-    }
-    if (DbgFileName) {
-        CreateDbgFile ();
-    }
-
-    /* Dump the data for debugging */
-    if (Verbosity > 1) {
-        SegDump ();
-        ConDesDump ();
-    }
-
-    /* Return an apropriate exit code */
-    return EXIT_SUCCESS;
-}
diff --git a/src/ld65/mapfile.c b/src/ld65/mapfile.c
deleted file mode 100644 (file)
index 0cf9b65..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 mapfile.c                                 */
-/*                                                                           */
-/*                   Map file creation for the ld65 linker                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2010, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-/* ld65 */
-#include "config.h"
-#include "dbgsyms.h"
-#include "exports.h"
-#include "global.h"
-#include "error.h"
-#include "library.h"
-#include "mapfile.h"
-#include "objdata.h"
-#include "segments.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void CreateMapFile (int ShortMap)
-/* Create a map file. If ShortMap is true, only the segment lists are
-** generated, not the import/export lists.
-*/
-{
-    unsigned I;
-
-    /* Open the map file */
-    FILE* F = fopen (MapFileName, "w");
-    if (F == 0) {
-        Error ("Cannot create map file `%s': %s", MapFileName, strerror (errno));
-    }
-
-    /* Write a modules list */
-    fprintf (F, "Modules list:\n"
-                "-------------\n");
-    for (I = 0; I < CollCount (&ObjDataList); ++I) {
-
-        unsigned J;
-
-        /* Get the object file */
-        const ObjData* O = CollConstAt (&ObjDataList, I);
-
-        /* Output the data */
-        if (O->Lib) {
-            /* The file is from a library */
-            fprintf (F, "%s(%s):\n", GetLibFileName (O->Lib), GetObjFileName (O));
-        } else {
-            fprintf (F, "%s:\n", GetObjFileName (O));
-        }
-        for (J = 0; J < CollCount (&O->Sections); ++J) {
-            const Section* S = CollConstAt (&O->Sections, J);
-            /* Don't include zero sized sections if not explicitly
-            ** requested
-            */
-            if (VerboseMap || S->Size > 0) {
-                fprintf (F, 
-                         "    %-17s Offs=%06lX  Size=%06lX  "
-                         "Align=%05lX  Fill=%04lX\n",
-                         GetString (S->Seg->Name), S->Offs, S->Size,
-                         S->Alignment, S->Fill);
-            }
-        }
-    }
-
-    /* Write the segment list */
-    fprintf (F, "\n\n"
-                "Segment list:\n"
-                "-------------\n");
-    PrintSegmentMap (F);
-
-    /* The remainder is not written for short map files */
-    if (!ShortMap) {
-
-        /* Write the exports list by name */
-        fprintf (F, "\n\n"
-                    "Exports list by name:\n"
-                    "---------------------\n");
-        PrintExportMapByName (F);
-
-        /* Write the exports list by value */
-        fprintf (F, "\n\n"
-                    "Exports list by value:\n"
-                    "----------------------\n");
-        PrintExportMapByValue (F);
-
-        /* Write the imports list */
-        fprintf (F, "\n\n"
-                    "Imports list:\n"
-                    "-------------\n");
-        PrintImportMap (F);
-    }
-
-    /* Close the file */
-    if (fclose (F) != 0) {
-        Error ("Error closing map file `%s': %s", MapFileName, strerror (errno));
-    }
-}
-
-
-
-void CreateLabelFile (void)
-/* Create a label file */
-{
-    /* Open the label file */
-    FILE* F = fopen (LabelFileName, "w");
-    if (F == 0) {
-        Error ("Cannot create label file `%s': %s", LabelFileName, strerror (errno));
-    }
-
-    /* Print the labels for the export symbols */
-    PrintExportLabels (F);
-
-    /* Output the labels */
-    PrintDbgSymLabels (F);
-
-    /* Close the file */
-    if (fclose (F) != 0) {
-        Error ("Error closing label file `%s': %s", LabelFileName, strerror (errno));
-    }
-}
diff --git a/src/ld65/mapfile.h b/src/ld65/mapfile.h
deleted file mode 100644 (file)
index 4a1d4d7..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 mapfile.h                                 */
-/*                                                                           */
-/*                   Map file creation for the ld65 linker                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2005 Ullrich von Bassewitz                                       */
-/*               Roemerstrasse 52                                            */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef MAPFILE_H
-#define MAPFILE_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Constants that may be used as arguments for CreateMapFile */
-enum {
-    LONG_MAPFILE,
-    SHORT_MAPFILE
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void CreateMapFile (int ShortMap);
-/* Create a map file. If ShortMap is true, only the segment lists are
-** generated, not the import/export lists.
-*/
-
-void CreateLabelFile (void);
-/* Create a label file */
-
-
-
-/* End of mapfile.h */
-
-#endif
diff --git a/src/ld65/memarea.c b/src/ld65/memarea.c
deleted file mode 100644 (file)
index d143b97..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 memarea.c                                 */
-/*                                                                           */
-/*                Memory area definition for the ld65 linker                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2010-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "xmalloc.h"
-
-/* ld65 */
-#include "memarea.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-MemoryArea* NewMemoryArea (const FilePos* Pos, unsigned Name)
-/* Create a new memory area and insert it into the list */
-{
-    /* Allocate memory */
-    MemoryArea* M = xmalloc (sizeof (MemoryArea));
-
-    /* Initialize the fields ... */
-    M->LI          = GenLineInfo (Pos);
-    M->Name        = Name;
-    M->Attr        = 0;
-    M->Flags       = 0;
-    M->FileOffs    = ~0UL;
-    M->StartExpr   = 0;
-    M->Start       = 0;
-    M->SizeExpr    = 0;
-    M->Size        = 0;
-    M->BankExpr    = 0;
-    M->FillLevel   = 0;
-    M->FillVal     = 0;
-    M->Relocatable = 0;
-    M->SegList     = EmptyCollection;
-    M->F           = 0;
-
-    /* ...and return it */
-    return M;
-}
diff --git a/src/ld65/memarea.h b/src/ld65/memarea.h
deleted file mode 100644 (file)
index b6972a9..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 memarea.h                                 */
-/*                                                                           */
-/*                Memory area definition for the ld65 linker                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2010-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef MEMAREA_H
-#define MEMAREA_H
-
-
-
-/* common */
-#include "coll.h"
-
-/* ld65 */
-#include "lineinfo.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Forwards for structures */
-struct ExprNode;
-struct File;
-
-/* Memory area entry */
-typedef struct MemoryArea MemoryArea;
-struct MemoryArea {
-    LineInfo*           LI;             /* Where was the area was defined? */
-    unsigned            Name;           /* Name index of the memory area */
-    unsigned            Attr;           /* Which values are valid? */
-    unsigned            Flags;          /* Set of bitmapped flags */
-    unsigned long       FileOffs;       /* Offset in output file */
-    struct ExprNode*    StartExpr;      /* Expression for start address */
-    unsigned long       Start;          /* Start address */
-    struct ExprNode*    SizeExpr;       /* Expression for size */
-    unsigned long       Size;           /* Length of memory section */
-    struct ExprNode*    BankExpr;       /* Expression for bank */
-    unsigned long       FillLevel;      /* Actual fill level of segment */
-    unsigned char       FillVal;        /* Value used to fill rest of seg */
-    unsigned char       Relocatable;    /* Memory area is relocatable */
-    Collection          SegList;        /* List of segments for this area */
-    struct File*        F;              /* Output file for this area */
-};
-
-/* Memory flags */
-#define MF_DEFINE       0x0001          /* Define start and size */
-#define MF_FILL         0x0002          /* Fill segment */
-#define MF_RO           0x0004          /* Read only memory area */
-#define MF_OVERFLOW     0x0008          /* Memory area overflow */
-#define MF_PLACED       0x0010          /* Memory area was placed */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-MemoryArea* NewMemoryArea (const FilePos* Pos, unsigned Name);
-/* Create a new memory area and insert it into the list */
-
-
-
-/* End of memarea.h */
-
-#endif
diff --git a/src/ld65/o65.c b/src/ld65/o65.c
deleted file mode 100644 (file)
index aceb515..0000000
+++ /dev/null
@@ -1,1437 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   o65.c                                   */
-/*                                                                           */
-/*                  Module to handle the o65 binary format                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1999-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include <limits.h>
-#include <errno.h>
-#include <time.h>
-
-/* common */
-#include "chartype.h"
-#include "check.h"
-#include "fname.h"
-#include "print.h"
-#include "version.h"
-#include "xmalloc.h"
-
-/* ld65 */
-#include "error.h"
-#include "exports.h"
-#include "expr.h"
-#include "fileio.h"
-#include "global.h"
-#include "lineinfo.h"
-#include "memarea.h"
-#include "o65.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Header mode bits */
-#define MF_CPU_65816    0x8000          /* Executable is for 65816 */
-#define MF_CPU_6502     0x0000          /* Executable is for the 6502 */
-#define MF_CPU_MASK     0x8000          /* Mask to extract CPU type */
-
-#define MF_RELOC_PAGE   0x4000          /* Page wise relocation */
-#define MF_RELOC_BYTE   0x0000          /* Byte wise relocation */
-#define MF_RELOC_MASK   0x4000          /* Mask to extract relocation type */
-
-#define MF_SIZE_32BIT   0x2000          /* All size words are 32bit */
-#define MF_SIZE_16BIT   0x0000          /* All size words are 16bit */
-#define MF_SIZE_MASK    0x2000          /* Mask to extract size */
-
-#define MF_FTYPE_OBJ    0x1000          /* Object file */
-#define MF_FTYPE_EXE    0x0000          /* Executable file */
-#define MF_FTYPE_MASK   0x1000          /* Mask to extract type */
-
-#define MF_ADDR_SIMPLE  0x0800          /* Simple addressing */
-#define MF_ADDR_DEFAULT 0x0000          /* Default addressing */
-#define MF_ADDR_MASK    0x0800          /* Mask to extract addressing */
-
-#define MF_ALIGN_1      0x0000          /* Bytewise alignment */
-#define MF_ALIGN_2      0x0001          /* Align words */
-#define MF_ALIGN_4      0x0002          /* Align longwords */
-#define MF_ALIGN_256    0x0003          /* Align pages (256 bytes) */
-#define MF_ALIGN_MASK   0x0003          /* Mask to extract alignment */
-
-/* The four o65 segment types. Note: These values are identical to the values
-** needed for the segmentID in the o65 spec.
-*/
-#define O65SEG_UNDEF    0x00
-#define O65SEG_ABS      0x01
-#define O65SEG_TEXT     0x02
-#define O65SEG_DATA     0x03
-#define O65SEG_BSS      0x04
-#define O65SEG_ZP       0x05
-
-/* Relocation type codes for the o65 format */
-#define O65RELOC_WORD   0x80
-#define O65RELOC_HIGH   0x40
-#define O65RELOC_LOW    0x20
-#define O65RELOC_SEGADR 0xC0
-#define O65RELOC_SEG    0xA0
-#define O65RELOC_MASK   0xE0
-
-/* O65 executable file header */
-typedef struct O65Header O65Header;
-struct O65Header {
-    unsigned        Version;            /* Version number for o65 format */
-    unsigned        Mode;               /* Mode word */
-    unsigned long   TextBase;           /* Base address of text segment */
-    unsigned long   TextSize;           /* Size of text segment */
-    unsigned long   DataBase;           /* Base of data segment */
-    unsigned long   DataSize;           /* Size of data segment */
-    unsigned long   BssBase;            /* Base of bss segment */
-    unsigned long   BssSize;            /* Size of bss segment */
-    unsigned long   ZPBase;             /* Base of zeropage segment */
-    unsigned long   ZPSize;             /* Size of zeropage segment */
-    unsigned long   StackSize;          /* Requested stack size */
-};
-
-/* An o65 option */
-typedef struct O65Option O65Option;
-struct O65Option {
-    O65Option*      Next;               /* Next in option list */
-    unsigned char   Type;               /* Type of option */
-    unsigned char   Len;                /* Data length */
-    unsigned char   Data [1];           /* Data, dynamically allocated */
-};
-
-/* A o65 relocation table */
-typedef struct O65RelocTab O65RelocTab;
-struct O65RelocTab {
-    unsigned        Size;               /* Size of the table */
-    unsigned        Fill;               /* Amount used */
-    unsigned char*  Buf;                /* Buffer, dynamically allocated */
-};
-
-/* Structure describing the format */
-struct O65Desc {
-    O65Header       Header;             /* File header */
-    O65Option*      Options;            /* List of file options */
-    ExtSymTab*      Exports;            /* Table with exported symbols */
-    ExtSymTab*      Imports;            /* Table with imported symbols */
-    unsigned        Undef;              /* Count of undefined symbols */
-    FILE*           F;                  /* The file we're writing to */
-    const char*     Filename;           /* Name of the output file */
-    O65RelocTab*    TextReloc;          /* Relocation table for text segment */
-    O65RelocTab*    DataReloc;          /* Relocation table for data segment */
-
-    unsigned        TextCount;          /* Number of segments assigned to .text */
-    SegDesc**       TextSeg;            /* Array of text segments */
-    unsigned        DataCount;          /* Number of segments assigned to .data */
-    SegDesc**       DataSeg;            /* Array of data segments */
-    unsigned        BssCount;           /* Number of segments assigned to .bss */
-    SegDesc**       BssSeg;             /* Array of bss segments */
-    unsigned        ZPCount;            /* Number of segments assigned to .zp */
-    SegDesc**       ZPSeg;              /* Array of zp segments */
-
-    /* Temporary data for writing segments */
-    unsigned long   SegSize;
-    O65RelocTab*    CurReloc;
-    long            LastOffs;
-};
-
-/* Structure for parsing expression trees */
-typedef struct ExprDesc ExprDesc;
-struct ExprDesc {
-    O65Desc*        D;                  /* File format descriptor */
-    long            Val;                /* The offset value */
-    int             TooComplex;         /* Expression too complex */
-    MemoryArea*     MemRef;             /* Memory reference if any */
-    Segment*        SegRef;             /* Segment reference if any */
-    Section*        SecRef;             /* Section reference if any */
-    ExtSym*         ExtRef;             /* External reference if any */
-};
-
-
-
-/*****************************************************************************/
-/*                             Helper functions                              */
-/*****************************************************************************/
-
-
-
-static ExprDesc* InitExprDesc (ExprDesc* ED, O65Desc* D)
-/* Initialize an ExprDesc structure for use with O65ParseExpr */
-{
-    ED->D          = D;
-    ED->Val        = 0;
-    ED->TooComplex = 0;
-    ED->MemRef     = 0;
-    ED->SegRef     = 0;
-    ED->SecRef     = 0;
-    ED->ExtRef     = 0;
-    return ED;
-}
-
-
-
-static void WriteSize (const O65Desc* D, unsigned long Val)
-/* Write a "size" word to the file */
-{
-    switch (D->Header.Mode & MF_SIZE_MASK) {
-        case MF_SIZE_16BIT:     Write16 (D->F, (unsigned) Val); break;
-        case MF_SIZE_32BIT:     Write32 (D->F, Val);            break;
-        default:                Internal ("Invalid size in header: %04X", D->Header.Mode);
-    }
-}
-
-
-
-static unsigned O65SegType (const SegDesc* S)
-/* Map our own segment types into something o65 compatible */
-{
-    /* Check the segment type. Readonly segments are assign to the o65
-    ** text segment, writeable segments that contain data are assigned
-    ** to data, bss and zp segments are handled respectively.
-    ** Beware: Zeropage segments have the SF_BSS flag set, so be sure
-    ** to check SF_ZP first.
-    */
-    if (S->Flags & SF_RO) {
-        return O65SEG_TEXT;
-    } else if (S->Flags & SF_ZP) {
-        return O65SEG_ZP;
-    } else if (S->Flags & SF_BSS) {
-        return O65SEG_BSS;
-    } else {
-        return O65SEG_DATA;
-    }
-}
-
-
-
-static void CvtMemoryToSegment (ExprDesc* ED)
-/* Convert a memory area into a segment by searching the list of run segments
-** in this memory area and assigning the nearest one.
-*/
-{
-    /* Get the memory area from the expression */
-    MemoryArea* M = ED->MemRef;
-
-    /* Remember the "nearest" segment and its offset */
-    Segment* Nearest   = 0;
-    unsigned long Offs = ULONG_MAX;
-
-    /* Walk over all segments */
-    unsigned I;
-    for (I = 0; I < CollCount (&M->SegList); ++I) {
-
-        /* Get the segment and check if it's a run segment */
-        SegDesc* S = CollAtUnchecked (&M->SegList, I);
-        if (S->Run == M) {
-
-            unsigned long O;
-
-            /* Get the segment from the segment descriptor */
-            Segment* Seg = S->Seg;
-
-            /* Check the PC. */
-            if ((long) Seg->PC <= ED->Val && (O = (ED->Val - Seg->PC)) < Offs) {
-                /* This is the nearest segment for now */
-                Offs = O;
-                Nearest = Seg;
-
-                /* If we found an exact match, don't look further */
-                if (Offs == 0) {
-                    break;
-                }
-            }
-        }
-    }
-
-    /* If we found a segment, use it and adjust the offset */
-    if (Nearest) {
-        ED->SegRef = Nearest;
-        ED->MemRef = 0;
-        ED->Val    -= Nearest->PC;
-    }
-}
-
-
-
-static const SegDesc* FindSeg (SegDesc** const List, unsigned Count, const Segment* S)
-/* Search for a segment in the given list of segment descriptors and return
-** the descriptor for a segment if we found it, and NULL if not.
-*/
-{
-    unsigned I;
-
-    for (I = 0; I < Count; ++I) {
-        if (List[I]->Seg == S) {
-            /* Found */
-            return List[I];
-        }
-    }
-
-    /* Not found */
-    return 0;
-}
-
-
-
-static const SegDesc* O65FindSeg (const O65Desc* D, const Segment* S)
-/* Search for a segment in the segment lists and return it's segment descriptor */
-{
-    const SegDesc* SD;
-
-    if ((SD = FindSeg (D->TextSeg, D->TextCount, S)) != 0) {
-        return SD;
-    }
-    if ((SD = FindSeg (D->DataSeg, D->DataCount, S)) != 0) {
-        return SD;
-    }
-    if ((SD = FindSeg (D->BssSeg, D->BssCount, S)) != 0) {
-        return SD;
-    }
-    if ((SD = FindSeg (D->ZPSeg, D->ZPCount, S)) != 0) {
-        return SD;
-    }
-
-    /* Not found */
-    return 0;
-}
-
-
-
-/*****************************************************************************/
-/*                            Expression handling                            */
-/*****************************************************************************/
-
-
-
-static void O65ParseExpr (ExprNode* Expr, ExprDesc* D, int Sign)
-/* Extract and evaluate all constant factors in an subtree that has only
-** additions and subtractions. If anything other than additions and
-** subtractions are found, D->TooComplex is set to true.
-*/
-{
-    Export* E;
-
-    switch (Expr->Op) {
-
-        case EXPR_LITERAL:
-            D->Val += (Sign * Expr->V.IVal);
-            break;
-
-        case EXPR_SYMBOL:
-            /* Get the referenced Export */
-            E = GetExprExport (Expr);
-            /* If this export has a mark set, we've already encountered it.
-            ** This means that the export is used to define it's own value,
-            ** which in turn means, that we have a circular reference.
-            */
-            if (ExportHasMark (E)) {
-                CircularRefError (E);
-            } else if (E->Expr == 0) {
-                /* Dummy export, must be an o65 imported symbol */
-                ExtSym* S = O65GetImport (D->D, E->Name);
-                CHECK (S != 0);
-                if (D->ExtRef) {
-                    /* We cannot have more than one external reference in o65 */
-                    D->TooComplex = 1;
-                } else {
-                    /* Remember the external reference */
-                    D->ExtRef = S;
-                }
-            } else {
-                MarkExport (E);
-                O65ParseExpr (E->Expr, D, Sign);
-                UnmarkExport (E);
-            }
-            break;
-
-        case EXPR_SECTION:
-            if (D->SecRef) {
-                /* We cannot handle more than one segment reference in o65 */
-                D->TooComplex = 1;
-            } else {
-                /* Remember the segment reference */
-                D->SecRef = GetExprSection (Expr);
-                /* Add the offset of the section to the constant value */
-                D->Val += Sign * (D->SecRef->Offs + D->SecRef->Seg->PC);
-            }
-            break;
-
-        case EXPR_SEGMENT:
-            if (D->SegRef) {
-                /* We cannot handle more than one segment reference in o65 */
-                D->TooComplex = 1;
-            } else {
-                /* Remember the segment reference */
-                D->SegRef = Expr->V.Seg;
-                /* Add the offset of the segment to the constant value */
-                D->Val += (Sign * D->SegRef->PC);
-            }
-            break;
-
-        case EXPR_MEMAREA:
-            if (D->MemRef) {
-                /* We cannot handle more than one memory reference in o65 */
-                D->TooComplex = 1;
-            } else {
-                /* Remember the memory area reference */
-                D->MemRef = Expr->V.Mem;
-                /* Add the start address of the memory area to the constant
-                ** value
-                */
-                D->Val += (Sign * D->MemRef->Start);
-            }
-            break;
-
-        case EXPR_PLUS:
-            O65ParseExpr (Expr->Left, D, Sign);
-            O65ParseExpr (Expr->Right, D, Sign);
-            break;
-
-        case EXPR_MINUS:
-            O65ParseExpr (Expr->Left, D, Sign);
-            O65ParseExpr (Expr->Right, D, -Sign);
-            break;
-
-        default:
-            /* Expression contains illegal operators */
-            D->TooComplex = 1;
-            break;
-
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                             Relocation tables                             */
-/*****************************************************************************/
-
-
-
-static O65RelocTab* NewO65RelocTab (void)
-/* Create a new relocation table */
-{
-    /* Allocate a new structure */
-    O65RelocTab* R = xmalloc (sizeof (O65RelocTab));
-
-    /* Initialize the data */
-    R->Size = 0;
-    R->Fill = 0;
-    R->Buf  = 0;
-
-    /* Return the created struct */
-    return R;
-}
-
-
-
-static void FreeO65RelocTab (O65RelocTab* R)
-/* Free a relocation table */
-{
-    xfree (R->Buf);
-    xfree (R);
-}
-
-
-
-static void O65RelocPutByte (O65RelocTab* R, unsigned B)
-/* Put the byte into the relocation table */
-{
-    /* Do we have enough space in the buffer? */
-    if (R->Fill == R->Size) {
-        /* We need to grow the buffer */
-        if (R->Size) {
-            R->Size *= 2;
-        } else {
-            R->Size = 1024;     /* Initial size */
-        }
-        R->Buf = xrealloc (R->Buf, R->Size);
-    }
-
-    /* Put the byte into the buffer */
-    R->Buf [R->Fill++] = (unsigned char) B;
-}
-
-
-
-static void O65RelocPutWord (O65RelocTab* R, unsigned W)
-/* Put a word into the relocation table */
-{
-    O65RelocPutByte (R, W);
-    O65RelocPutByte (R, W >> 8);
-}
-
-
-
-static void O65WriteReloc (O65RelocTab* R, FILE* F)
-/* Write the relocation table to the given file */
-{
-    WriteData (F, R->Buf, R->Fill);
-}
-
-
-
-/*****************************************************************************/
-/*                              Option handling                              */
-/*****************************************************************************/
-
-
-
-static O65Option* NewO65Option (unsigned Type, const void* Data, unsigned DataLen)
-/* Allocate and initialize a new option struct */
-{
-    O65Option* O;
-
-    /* Check the length */
-    CHECK (DataLen <= 253);
-
-    /* Allocate memory */
-    O = xmalloc (sizeof (O65Option) - 1 + DataLen);
-
-    /* Initialize the structure */
-    O->Next     = 0;
-    O->Type     = Type;
-    O->Len      = DataLen;
-    memcpy (O->Data, Data, DataLen);
-
-    /* Return the created struct */
-    return O;
-}
-
-
-
-static void FreeO65Option (O65Option* O)
-/* Free an O65Option struct */
-{
-    xfree (O);
-}
-
-
-
-/*****************************************************************************/
-/*                     Subroutines to write o65 sections                     */
-/*****************************************************************************/
-
-
-
-static void O65WriteHeader (O65Desc* D)
-/* Write the header of the executable to the given file */
-{
-    static unsigned char Trailer [5] = {
-        0x01, 0x00, 0x6F, 0x36, 0x35
-    };
-
-    O65Option* O;
-
-    /* Write the fixed header */
-    WriteData (D->F, Trailer, sizeof (Trailer));
-    Write8    (D->F, D->Header.Version);
-    Write16   (D->F, D->Header.Mode);
-    WriteSize (D, D->Header.TextBase);
-    WriteSize (D, D->Header.TextSize);
-    WriteSize (D, D->Header.DataBase);
-    WriteSize (D, D->Header.DataSize);
-    WriteSize (D, D->Header.BssBase);
-    WriteSize (D, D->Header.BssSize);
-    WriteSize (D, D->Header.ZPBase);
-    WriteSize (D, D->Header.ZPSize);
-    WriteSize (D, D->Header.StackSize);
-
-    /* Write the options */
-    O = D->Options;
-    while (O) {
-        Write8 (D->F, O->Len + 2);              /* Account for len and type bytes */
-        Write8 (D->F, O->Type);
-        if (O->Len) {
-            WriteData (D->F, O->Data, O->Len);
-        }
-        O = O->Next;
-    }
-
-    /* Write the end-of-options byte */
-    Write8 (D->F, 0);
-}
-
-
-
-static unsigned O65WriteExpr (ExprNode* E, int Signed, unsigned Size,
-                              unsigned long Offs, void* Data)
-/* Called from SegWrite for an expression. Evaluate the expression, check the
-** range and write the expression value to the file, update the relocation
-** table.
-*/
-{
-    long          Diff;
-    unsigned      RefCount;
-    long          BinVal;
-    ExprNode*     Expr;
-    ExprDesc      ED;
-    unsigned char RelocType;
-
-    /* Cast the Data pointer to its real type, an O65Desc */
-    O65Desc* D = (O65Desc*) Data;
-
-    /* Check for a constant expression */
-    if (IsConstExpr (E)) {
-        /* Write out the constant expression */
-        return SegWriteConstExpr (((O65Desc*)Data)->F, E, Signed, Size);
-    }
-
-    /* We have a relocatable expression that needs a relocation table entry.
-    ** Calculate the number of bytes between this entry and the last one, and
-    ** setup all necessary intermediate bytes in the relocation table.
-    */
-    Offs += D->SegSize;         /* Calulate full offset */
-    Diff = ((long) Offs) - D->LastOffs;
-    while (Diff > 0xFE) {
-        O65RelocPutByte (D->CurReloc, 0xFF);
-        Diff -= 0xFE;
-    }
-    O65RelocPutByte (D->CurReloc, (unsigned char) Diff);
-
-    /* Remember this offset for the next time */
-    D->LastOffs = Offs;
-
-    /* Determine the expression to relocate */
-    Expr = E;
-    if (E->Op == EXPR_BYTE0   || E->Op == EXPR_BYTE1 ||
-        E->Op == EXPR_BYTE2   || E->Op == EXPR_BYTE3 ||
-        E->Op == EXPR_WORD0   || E->Op == EXPR_WORD1 ||
-        E->Op == EXPR_FARADDR || E->Op == EXPR_DWORD) {
-        /* Use the real expression */
-        Expr = E->Left;
-    }
-
-    /* Recursively collect information about this expression */
-    O65ParseExpr (Expr, InitExprDesc (&ED, D), 1);
-
-    /* We cannot handle more than one external reference */
-    RefCount = (ED.MemRef != 0) + (ED.SegRef != 0) +
-               (ED.SecRef != 0) + (ED.ExtRef != 0);
-    if (RefCount > 1) {
-        ED.TooComplex = 1;
-    }
-
-    /* If we have a memory area reference, we need to convert it into a
-    ** segment reference. If we cannot do that, we cannot handle the
-    ** expression.
-    */
-    if (ED.MemRef) {
-        CvtMemoryToSegment (&ED);
-        if (ED.SegRef == 0) {
-            return SEG_EXPR_TOO_COMPLEX;
-        }
-    }
-
-    /* Bail out if we cannot handle the expression */
-    if (ED.TooComplex) {
-        return SEG_EXPR_TOO_COMPLEX;
-    }
-
-    /* Safety: Check that we have exactly one reference */
-    CHECK (RefCount == 1);
-
-    /* Write out the offset that goes into the segment. */
-    BinVal = ED.Val;
-    switch (E->Op) {
-        case EXPR_BYTE0:    BinVal &= 0xFF;                     break;
-        case EXPR_BYTE1:    BinVal = (BinVal >>  8) & 0xFF;     break;
-        case EXPR_BYTE2:    BinVal = (BinVal >> 16) & 0xFF;     break;
-        case EXPR_BYTE3:    BinVal = (BinVal >> 24) & 0xFF;     break;
-        case EXPR_WORD0:    BinVal &= 0xFFFF;                   break;
-        case EXPR_WORD1:    BinVal = (BinVal >> 16) & 0xFFFF;   break;
-        case EXPR_FARADDR:  BinVal &= 0xFFFFFFUL;               break;
-        case EXPR_DWORD:    BinVal &= 0xFFFFFFFFUL;             break;
-    }
-    WriteVal (D->F, BinVal, Size);
-
-    /* Determine the actual type of relocation entry needed from the
-    ** information gathered about the expression.
-    */
-    if (E->Op == EXPR_BYTE0) {
-        RelocType = O65RELOC_LOW;
-    } else if (E->Op == EXPR_BYTE1) {
-        RelocType = O65RELOC_HIGH;
-    } else if (E->Op == EXPR_BYTE2) {
-        RelocType = O65RELOC_SEG;
-    } else {
-        switch (Size) {
-
-            case 1:
-                RelocType = O65RELOC_LOW;
-                break;
-
-            case 2:
-                RelocType = O65RELOC_WORD;
-                break;
-
-            case 3:
-                RelocType = O65RELOC_SEGADR;
-                break;
-
-            case 4:
-                /* 4 byte expression not supported by o65 */
-                return SEG_EXPR_TOO_COMPLEX;
-
-            default:
-                Internal ("O65WriteExpr: Invalid expression size: %u", Size);
-                RelocType = 0;          /* Avoid gcc warnings */
-        }
-    }
-
-    /* Determine which segment we're referencing */
-    if (ED.SegRef || ED.SecRef) {
-
-        const SegDesc* Seg;
-
-        /* Segment or section reference. */
-        if (ED.SecRef) {
-            /* Get segment from section */
-            ED.SegRef = ED.SecRef->Seg;
-        }
-
-        /* Search for the segment and map it to it's o65 segmentID */
-        Seg = O65FindSeg (D, ED.SegRef);
-        if (Seg == 0) {
-            /* For some reason, we didn't find this segment in the list of
-            ** segments written to the o65 file.
-            */
-            return SEG_EXPR_INVALID;
-        }
-        RelocType |= O65SegType (Seg);
-        O65RelocPutByte (D->CurReloc, RelocType);
-
-        /* Output additional data if needed */
-        switch (RelocType & O65RELOC_MASK) {
-            case O65RELOC_HIGH:
-                O65RelocPutByte (D->CurReloc, ED.Val & 0xFF);
-                break;
-            case O65RELOC_SEG:
-                O65RelocPutWord (D->CurReloc, ED.Val & 0xFFFF);
-                break;
-        }
-
-    } else if (ED.ExtRef) {
-        /* Imported symbol */
-        RelocType |= O65SEG_UNDEF;
-        O65RelocPutByte (D->CurReloc, RelocType);
-        /* Put the number of the imported symbol into the table */
-        O65RelocPutWord (D->CurReloc, ExtSymNum (ED.ExtRef));
-
-    } else {
-
-        /* OOPS - something bad happened */
-        Internal ("External reference not handled");
-
-    }
-
-    /* Success */
-    return SEG_EXPR_OK;
-}
-
-
-
-static void O65WriteSeg (O65Desc* D, SegDesc** Seg, unsigned Count, int DoWrite)
-/* Write one segment to the o65 output file */
-{
-    SegDesc* S;
-    unsigned I;
-
-    /* Initialize variables */
-    D->SegSize  = 0;
-    D->LastOffs = -1;
-
-    /* Write out all segments */
-    for (I = 0; I < Count; ++I) {
-
-        /* Get the segment from the list node */
-        S = Seg [I];
-
-        /* Keep the user happy */
-        Print (stdout, 1, "    Writing `%s'\n", GetString (S->Name));
-
-        /* Write this segment */
-        if (DoWrite) {
-            SegWrite (D->Filename, D->F, S->Seg, O65WriteExpr, D);
-        }
-
-        /* Mark the segment as dumped */
-        S->Seg->Dumped = 1;
-
-        /* Calculate the total size */
-        D->SegSize += S->Seg->Size;
-    }
-
-    /* Terminate the relocation table for this segment */
-    if (D->CurReloc) {
-        O65RelocPutByte (D->CurReloc, 0);
-    }
-
-    /* Check the size of the segment for overflow */
-    if ((D->Header.Mode & MF_SIZE_MASK) == MF_SIZE_16BIT && D->SegSize > 0xFFFF) {
-        Error ("Segment overflow in file `%s'", D->Filename);
-    }
-
-}
-
-
-
-static void O65WriteTextSeg (O65Desc* D)
-/* Write the code segment to the o65 output file */
-{
-    /* Initialize variables */
-    D->CurReloc = D->TextReloc;
-
-    /* Dump all text segments */
-    O65WriteSeg (D, D->TextSeg, D->TextCount, 1);
-
-    /* Set the size of the segment */
-    D->Header.TextSize = D->SegSize;
-}
-
-
-
-static void O65WriteDataSeg (O65Desc* D)
-/* Write the data segment to the o65 output file */
-{
-    /* Initialize variables */
-    D->CurReloc = D->DataReloc;
-
-    /* Dump all data segments */
-    O65WriteSeg (D, D->DataSeg, D->DataCount, 1);
-
-    /* Set the size of the segment */
-    D->Header.DataSize = D->SegSize;
-}
-
-
-
-static void O65WriteBssSeg (O65Desc* D)
-/* "Write" the bss segments to the o65 output file. This will only update
-** the relevant header fields.
-*/
-{
-    /* Initialize variables */
-    D->CurReloc = 0;
-
-    /* Dump all bss segments */
-    O65WriteSeg (D, D->BssSeg, D->BssCount, 0);
-
-    /* Set the size of the segment */
-    D->Header.BssSize = D->SegSize;
-}
-
-
-
-static void O65WriteZPSeg (O65Desc* D)
-/* "Write" the zeropage segments to the o65 output file. This will only update
-** the relevant header fields.
-*/
-{
-    /* Initialize variables */
-    D->CurReloc = 0;
-
-    /* Dump all zp segments */
-    O65WriteSeg (D, D->ZPSeg, D->ZPCount, 0);
-
-    /* Set the size of the segment */
-    D->Header.ZPSize = D->SegSize;
-}
-
-
-
-static void O65WriteImports (O65Desc* D)
-/* Write the list of imported symbols to the O65 file */
-{
-    const ExtSym* S;
-
-    /* Write the number of imports */
-    WriteSize (D, ExtSymCount (D->Imports));
-
-    /* Write out the symbol names, zero terminated */
-    S = ExtSymList (D->Imports);
-    while (S) {
-        /* Get the name */
-        const char* Name = GetString (ExtSymName (S));
-        /* And write it to the output file */
-        WriteData (D->F, Name, strlen (Name) + 1);
-        /* Next symbol */
-        S = ExtSymNext (S);
-    }
-}
-
-
-
-static void O65WriteTextReloc (O65Desc* D)
-/* Write the relocation for the text segment to the output file */
-{
-    O65WriteReloc (D->TextReloc, D->F);
-}
-
-
-
-static void O65WriteDataReloc (O65Desc* D)
-/* Write the relocation for the data segment to the output file */
-{
-    O65WriteReloc (D->DataReloc, D->F);
-}
-
-
-
-static void O65WriteExports (O65Desc* D)
-/* Write the list of exports */
-{
-    const ExtSym* S;
-
-    /* Write the number of exports */
-    WriteSize (D, ExtSymCount (D->Exports));
-
-    /* Write out the symbol information */
-    S = ExtSymList (D->Exports);
-    while (S) {
-
-        ExprNode* Expr;
-        unsigned char SegmentID;
-        ExprDesc ED;
-
-        /* Get the name */
-        unsigned NameIdx = ExtSymName (S);
-        const char* Name = GetString (NameIdx);
-
-        /* Get the export for this symbol. We've checked before that this
-        ** export does really exist, so if it is unresolved, or if we don't
-        ** find it, there is an error in the linker code.
-        */
-        Export* E = FindExport (NameIdx);
-        if (E == 0 || IsUnresolvedExport (E)) {
-            Internal ("Unresolved export `%s' found in O65WriteExports", Name);
-        }
-
-        /* Get the expression for the symbol */
-        Expr = E->Expr;
-
-        /* Recursively collect information about this expression */
-        O65ParseExpr (Expr, InitExprDesc (&ED, D), 1);
-
-        /* We cannot handle expressions with imported symbols, or expressions
-        ** with more than one segment reference here
-        */
-        if (ED.ExtRef != 0 || (ED.SegRef != 0 && ED.SecRef != 0)) {
-            ED.TooComplex = 1;
-        }
-
-        /* Bail out if we cannot handle the expression */
-        if (ED.TooComplex) {
-            Error ("Expression for symbol `%s' is too complex", Name);
-        }
-
-        /* Determine the segment id for the expression */
-        if (ED.SegRef != 0 || ED.SecRef != 0) {
-
-            const SegDesc* Seg;
-
-            /* Segment or section reference */
-            if (ED.SecRef != 0) {
-                ED.SegRef = ED.SecRef->Seg;     /* Get segment from section */
-            }
-
-            /* Search for the segment and map it to it's o65 segmentID */
-            Seg = O65FindSeg (D, ED.SegRef);
-            if (Seg == 0) {
-                /* For some reason, we didn't find this segment in the list of
-                ** segments written to the o65 file.
-                */
-                Error ("Segment for symbol `%s' is undefined", Name);
-            }
-            SegmentID = O65SegType (Seg);
-
-        } else {
-
-            /* Absolute value */
-            SegmentID = O65SEG_ABS;
-
-        }
-
-        /* Write the name to the output file */
-        WriteData (D->F, Name, strlen (Name) + 1);
-
-        /* Output the segment id followed by the literal value */
-        Write8 (D->F, SegmentID);
-        WriteSize (D, ED.Val);
-
-        /* Next symbol */
-        S = ExtSymNext (S);
-    }
-}
-
-
-
-/*****************************************************************************/
-/*                                Public code                                */
-/*****************************************************************************/
-
-
-
-O65Desc* NewO65Desc (void)
-/* Create, initialize and return a new O65 descriptor struct */
-{
-    /* Allocate a new structure */
-    O65Desc* D = xmalloc (sizeof (O65Desc));
-
-    /* Initialize the header */
-    D->Header.Version   = 0;
-    D->Header.Mode      = 0;
-    D->Header.TextBase  = 0;
-    D->Header.TextSize  = 0;
-    D->Header.DataBase  = 0;
-    D->Header.DataSize  = 0;
-    D->Header.BssBase   = 0;
-    D->Header.BssSize   = 0;
-    D->Header.ZPBase    = 0;
-    D->Header.ZPSize    = 0;
-    D->Header.StackSize = 0;            /* Let OS choose a good value */
-
-    /* Initialize other data */
-    D->Options          = 0;
-    D->Exports          = NewExtSymTab ();
-    D->Imports          = NewExtSymTab ();
-    D->Undef            = 0;
-    D->F                = 0;
-    D->Filename         = 0;
-    D->TextReloc        = NewO65RelocTab ();
-    D->DataReloc        = NewO65RelocTab ();
-    D->TextCount        = 0;
-    D->TextSeg          = 0;
-    D->DataCount        = 0;
-    D->DataSeg          = 0;
-    D->BssCount         = 0;
-    D->BssSeg           = 0;
-    D->ZPCount          = 0;
-    D->ZPSeg            = 0;
-
-    /* Return the created struct */
-    return D;
-}
-
-
-
-void FreeO65Desc (O65Desc* D)
-/* Delete the descriptor struct with cleanup */
-{
-    /* Free the segment arrays */
-    xfree (D->ZPSeg);
-    xfree (D->BssSeg);
-    xfree (D->DataSeg);
-    xfree (D->TextSeg);
-
-    /* Free the relocation tables */
-    FreeO65RelocTab (D->DataReloc);
-    FreeO65RelocTab (D->TextReloc);
-
-    /* Free the option list */
-    while (D->Options) {
-        O65Option* O = D->Options;
-        D->Options = D->Options->Next;
-        FreeO65Option (O);
-    }
-
-    /* Free the external symbol tables */
-    FreeExtSymTab (D->Exports);
-    FreeExtSymTab (D->Imports);
-
-    /* Free the struct itself */
-    xfree (D);
-}
-
-
-
-void O65Set6502 (O65Desc* D)
-/* Enable 6502 mode */
-{
-    D->Header.Mode = (D->Header.Mode & ~MF_CPU_MASK) | MF_CPU_6502;
-}
-
-
-
-void O65Set65816 (O65Desc* D)
-/* Enable 816 mode */
-{
-    D->Header.Mode = (D->Header.Mode & ~MF_CPU_MASK) | MF_CPU_65816;
-}
-
-
-
-void O65SetSmallModel (O65Desc* D)
-/* Enable a small memory model executable */
-{
-    D->Header.Mode = (D->Header.Mode & ~MF_SIZE_MASK) | MF_SIZE_16BIT;
-}
-
-
-
-void O65SetLargeModel (O65Desc* D)
-/* Enable a large memory model executable */
-{
-    D->Header.Mode = (D->Header.Mode & ~MF_SIZE_MASK) | MF_SIZE_32BIT;
-}
-
-
-
-void O65SetAlignment (O65Desc* D, unsigned Alignment)
-/* Set the executable alignment */
-{
-    /* Remove all alignment bits from the mode word */
-    D->Header.Mode &= ~MF_ALIGN_MASK;
-
-    /* Set the alignment bits */
-    switch (Alignment) {
-        case 1:   D->Header.Mode |= MF_ALIGN_1;   break;
-        case 2:   D->Header.Mode |= MF_ALIGN_2;   break;
-        case 4:   D->Header.Mode |= MF_ALIGN_4;   break;
-        case 256: D->Header.Mode |= MF_ALIGN_256; break;
-        default:  Error ("Invalid alignment for O65 format: %u", Alignment);
-    }
-}
-
-
-
-void O65SetOption (O65Desc* D, unsigned Type, const void* Data, unsigned DataLen)
-/* Set an o65 header option */
-{
-    /* Create a new option structure */
-    O65Option* O = NewO65Option (Type, Data, DataLen);
-
-    /* Insert it into the linked list */
-    O->Next = D->Options;
-    D->Options = O;
-}
-
-
-
-void O65SetOS (O65Desc* D, unsigned OS, unsigned Version, unsigned Id)
-/* Set an option describing the target operating system */
-{
-    /* Setup the option data */
-    unsigned char Opt[4];
-    Opt[0] = OS;
-    Opt[1] = Version;
-
-    /* Write the correct option length */
-    switch (OS) {
-
-        case O65OS_CC65:
-            /* Set the 16 bit id */
-            Opt[2] = (unsigned char) Id;
-            Opt[3] = (unsigned char) (Id >> 8);
-            O65SetOption (D, O65OPT_OS, Opt, 4);
-            break;
-
-        default:
-            /* No id for OS/A65, Lunix, and unknown OSes */
-            O65SetOption (D, O65OPT_OS, Opt, 2);
-            break;
-
-    }
-}
-
-
-
-ExtSym* O65GetImport (O65Desc* D, unsigned Ident)
-/* Return the imported symbol or NULL if not found */
-{
-    /* Retrieve the symbol from the table */
-    return GetExtSym (D->Imports, Ident);
-}
-
-
-
-void O65SetImport (O65Desc* D, unsigned Ident)
-/* Set an imported identifier */
-{
-    /* Insert the entry into the table */
-    NewExtSym (D->Imports, Ident);
-}
-
-
-
-ExtSym* O65GetExport (O65Desc* D, unsigned Ident)
-/* Return the exported symbol or NULL if not found */
-{
-    /* Retrieve the symbol from the table */
-    return GetExtSym (D->Exports, Ident);
-}
-
-
-
-void O65SetExport (O65Desc* D, unsigned Ident)
-/* Set an exported identifier */
-{
-    /* Get the export for this symbol and check if it does exist and is
-    ** a resolved symbol.
-    */
-    Export* E = FindExport (Ident);
-    if (E == 0 || IsUnresolvedExport (E)) {
-        Error ("Unresolved export: `%s'", GetString (Ident));
-    }
-
-    /* Insert the entry into the table */
-    NewExtSym (D->Exports, Ident);
-}
-
-
-
-static void O65SetupSegments (O65Desc* D, File* F)
-/* Setup segment assignments */
-{
-    unsigned I;
-    unsigned TextIdx, DataIdx, BssIdx, ZPIdx;
-
-    /* Initialize the counters */
-    D->TextCount = 0;
-    D->DataCount = 0;
-    D->BssCount  = 0;
-    D->ZPCount   = 0;
-
-    /* Walk over the memory list */
-    for (I = 0; I < CollCount (&F->MemoryAreas); ++I) {
-        /* Get this entry */
-        MemoryArea* M = CollAtUnchecked (&F->MemoryAreas, I);
-
-        /* Walk through the segment list and count the segment types */
-        unsigned J;
-        for (J = 0; J < CollCount (&M->SegList); ++J) {
-
-            /* Get the segment */
-            SegDesc* S = CollAtUnchecked (&M->SegList, J);
-
-            /* Check the segment type. */
-            switch (O65SegType (S)) {
-                case O65SEG_TEXT:   D->TextCount++; break;
-                case O65SEG_DATA:   D->DataCount++; break;
-                case O65SEG_BSS:    D->BssCount++;  break;
-                case O65SEG_ZP:     D->ZPCount++;   break;
-                default:            Internal ("Invalid return from O65SegType");
-            }
-        }
-    }
-
-    /* Allocate memory according to the numbers */
-    D->TextSeg = xmalloc (D->TextCount * sizeof (SegDesc*));
-    D->DataSeg = xmalloc (D->DataCount * sizeof (SegDesc*));
-    D->BssSeg  = xmalloc (D->BssCount  * sizeof (SegDesc*));
-    D->ZPSeg   = xmalloc (D->ZPCount   * sizeof (SegDesc*));
-
-    /* Walk again through the list and setup the segment arrays */
-    TextIdx = DataIdx = BssIdx = ZPIdx = 0;
-    for (I = 0; I < CollCount (&F->MemoryAreas); ++I) {
-        /* Get this entry */
-        MemoryArea* M = CollAtUnchecked (&F->MemoryAreas, I);
-
-        /* Walk over the segment list and check the segment types */
-        unsigned J;
-        for (J = 0; J < CollCount (&M->SegList); ++J) {
-
-            /* Get the segment */
-            SegDesc* S = CollAtUnchecked (&M->SegList, J);
-
-            /* Check the segment type. */
-            switch (O65SegType (S)) {
-                case O65SEG_TEXT:   D->TextSeg [TextIdx++] = S; break;
-                case O65SEG_DATA:   D->DataSeg [DataIdx++] = S; break;
-                case O65SEG_BSS:    D->BssSeg [BssIdx++]   = S; break;
-                case O65SEG_ZP:     D->ZPSeg [ZPIdx++]     = S; break;
-                default:            Internal ("Invalid return from O65SegType");
-            }
-        }
-    }
-}
-
-
-
-static int O65Unresolved (unsigned Name, void* D)
-/* Called if an unresolved symbol is encountered */
-{
-    /* Check if the symbol is an imported o65 symbol */
-    if (O65GetImport (D, Name) != 0) {
-        /* This is an external symbol, relax... */
-        return 1;
-    } else {
-        /* This is actually an unresolved external. Bump the counter */
-        ((O65Desc*) D)->Undef++;
-        return 0;
-    }
-}
-
-
-
-static void O65SetupHeader (O65Desc* D)
-/* Set additional stuff in the header */
-{
-    /* Set the base addresses of the segments */
-    if (D->TextCount > 0) {
-        SegDesc* FirstSeg  = D->TextSeg [0];
-        D->Header.TextBase = FirstSeg->Seg->PC;
-    }
-    if (D->DataCount > 0) {
-        SegDesc* FirstSeg  = D->DataSeg [0];
-        D->Header.DataBase = FirstSeg->Seg->PC;
-    }
-    if (D->BssCount > 0) {
-        SegDesc* FirstSeg  = D->BssSeg [0];
-        D->Header.BssBase = FirstSeg->Seg->PC;
-    }
-    if (D->ZPCount > 0) {
-        SegDesc* FirstSeg = D->ZPSeg [0];
-        D->Header.ZPBase  = FirstSeg->Seg->PC;
-    }
-}
-
-
-
-static void O65UpdateHeader  (O65Desc* D)
-/* Update mode word, currently only the "simple" bit */
-{
-    /* If we have byte wise relocation and an alignment of 1, and text
-    ** and data are adjacent, we can set the "simple addressing" bit
-    ** in the header.
-    */
-    if ((D->Header.Mode & MF_RELOC_MASK) == MF_RELOC_BYTE &&
-        (D->Header.Mode & MF_ALIGN_MASK) == MF_ALIGN_1 &&
-        D->Header.TextBase + D->Header.TextSize == D->Header.DataBase &&
-        D->Header.DataBase + D->Header.DataSize == D->Header.BssBase) {
-        D->Header.Mode = (D->Header.Mode & ~MF_ADDR_MASK) | MF_ADDR_SIMPLE;
-    }
-}
-
-
-void O65WriteTarget (O65Desc* D, File* F)
-/* Write an o65 output file */
-{
-    char        OptBuf [256];   /* Buffer for option strings */
-    unsigned    OptLen;
-    time_t      T;
-    const char* Name;
-
-    /* Place the filename in the control structure */
-    D->Filename = GetString (F->Name);
-
-    /* Check for unresolved symbols. The function O65Unresolved is called
-    ** if we get an unresolved symbol.
-    */
-    D->Undef = 0;               /* Reset the counter */
-    CheckUnresolvedImports (O65Unresolved, D);
-    if (D->Undef > 0) {
-        /* We had unresolved symbols, cannot create output file */
-        Error ("%u unresolved external(s) found - cannot create output file", D->Undef);
-    }
-
-    /* Setup the segment arrays */
-    O65SetupSegments (D, F);
-
-    /* Setup additional stuff in the header */
-    O65SetupHeader (D);
-
-    /* Open the file */
-    D->F = fopen (D->Filename, "wb");
-    if (D->F == 0) {
-        Error ("Cannot open `%s': %s", D->Filename, strerror (errno));
-    }
-
-    /* Keep the user happy */
-    Print (stdout, 1, "Opened `%s'...\n", D->Filename);
-
-    /* Define some more options: A timestamp, the linker version and the
-    ** filename
-    */
-    T = time (0);
-    strcpy (OptBuf, ctime (&T));
-    OptLen = strlen (OptBuf);
-    while (OptLen > 0 && IsControl (OptBuf[OptLen-1])) {
-        --OptLen;
-    }
-    OptBuf[OptLen] = '\0';
-    O65SetOption (D, O65OPT_TIMESTAMP, OptBuf, OptLen + 1);
-    sprintf (OptBuf, "ld65 V%s", GetVersionAsString ());
-    O65SetOption (D, O65OPT_ASM, OptBuf, strlen (OptBuf) + 1);
-    Name = FindName (D->Filename);
-    O65SetOption (D, O65OPT_FILENAME, Name, strlen (Name) + 1);
-
-    /* Write the header */
-    O65WriteHeader (D);
-
-    /* Write the text segment */
-    O65WriteTextSeg (D);
-
-    /* Write the data segment */
-    O65WriteDataSeg (D);
-
-    /* "Write" the bss segments */
-    O65WriteBssSeg (D);
-
-    /* "Write" the zeropage segments */
-    O65WriteZPSeg (D);
-
-    /* Write the undefined references list */
-    O65WriteImports (D);
-
-    /* Write the text segment relocation table */
-    O65WriteTextReloc (D);
-
-    /* Write the data segment relocation table */
-    O65WriteDataReloc (D);
-
-    /* Write the list of exports */
-    O65WriteExports (D);
-
-    /* Update header flags */
-    O65UpdateHeader (D);
-
-    /* Seek back to the start and write the updated header */
-    fseek (D->F, 0, SEEK_SET);
-    O65WriteHeader (D);
-
-    /* Close the file */
-    if (fclose (D->F) != 0) {
-        Error ("Cannot write to `%s': %s", D->Filename, strerror (errno));
-    }
-
-    /* Reset the file and filename */
-    D->F        = 0;
-    D->Filename = 0;
-}
diff --git a/src/ld65/o65.h b/src/ld65/o65.h
deleted file mode 100644 (file)
index 2112537..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   o65.h                                   */
-/*                                                                           */
-/*                  Module to handle the o65 binary format                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1999-2005 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef O65_H
-#define O65_H
-
-
-
-#include <stdio.h>
-
-#include "extsyms.h"
-#include "config.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Structure describing the format */
-typedef struct O65Desc O65Desc;
-
-/* Option tags */
-#define O65OPT_FILENAME         0
-#define O65OPT_OS               1
-#define O65OPT_ASM              2
-#define O65OPT_AUTHOR           3
-#define O65OPT_TIMESTAMP        4
-
-/* Operating system codes for O65OPT_OS */
-#define O65OS_MIN               1
-#define O65OS_OSA65             1
-#define O65OS_LUNIX             2
-#define O65OS_CC65              3
-#define O65OS_OPENCBM           4
-#define O65OS_MAX               255
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-O65Desc* NewO65Desc (void);
-/* Create, initialize and return a new O65 descriptor struct */
-
-void FreeO65Desc (O65Desc* D);
-/* Delete the descriptor struct with cleanup */
-
-void O65Set6502 (O65Desc* D);
-/* Enable 6502 mode */
-
-void O65Set65816 (O65Desc* D);
-/* Enable 816 mode */
-
-void O65SetSmallModel (O65Desc* D);
-/* Enable a small memory model executable */
-
-void O65SetLargeModel (O65Desc* D);
-/* Enable a large memory model executable */
-
-void O65SetAlignment (O65Desc* D, unsigned Align);
-/* Set the executable alignment */
-
-void O65SetOption (O65Desc* D, unsigned Type, const void* Data, unsigned DataLen);
-/* Set an o65 header option */
-
-void O65SetOS (O65Desc* D, unsigned OS, unsigned Version, unsigned Id);
-/* Set an option describing the target operating system */
-
-ExtSym* O65GetImport (O65Desc* D, unsigned Ident);
-/* Return the imported symbol or NULL if not found */
-
-void O65SetImport (O65Desc* D, unsigned Ident);
-/* Set an imported identifier */
-
-ExtSym* O65GetExport (O65Desc* D, unsigned Ident);
-/* Return the exported symbol or NULL if not found */
-
-void O65SetExport (O65Desc* D, unsigned Ident);
-/* Set an exported identifier */
-
-void O65WriteTarget (O65Desc* D, File* F);
-/* Write an o65 output file */
-
-
-
-/* End of o65.h */
-
-#endif
diff --git a/src/ld65/objdata.c b/src/ld65/objdata.c
deleted file mode 100644 (file)
index 7e83f91..0000000
+++ /dev/null
@@ -1,311 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 objdata.c                                 */
-/*                                                                           */
-/*               Handling object file data for the ld65 linker               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "check.h"
-#include "xmalloc.h"
-
-/* ld65 */
-#include "error.h"
-#include "exports.h"
-#include "fileinfo.h"
-#include "library.h"
-#include "objdata.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Collection containing used ObjData objects */
-Collection       ObjDataList = STATIC_COLLECTION_INITIALIZER;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-ObjData* NewObjData (void)
-/* Allocate a new structure on the heap, insert it into the list, return it */
-{
-    /* Allocate memory */
-    ObjData* O = xmalloc (sizeof (ObjData));
-
-    /* Initialize the data */
-    O->Next             = 0;
-    O->Name             = INVALID_STRING_ID;
-    O->Lib              = 0;
-    O->MTime            = 0;
-    O->Start            = 0;
-    O->Flags            = 0;
-    O->HLLSymBaseId     = 0;
-    O->SymBaseId        = 0;
-    O->ScopeBaseId      = 0;
-    O->SpanBaseId       = 0;
-    O->Files            = EmptyCollection;
-    O->Sections         = EmptyCollection;
-    O->Exports          = EmptyCollection;
-    O->Imports          = EmptyCollection;
-    O->DbgSyms          = EmptyCollection;
-    O->HLLDbgSyms       = EmptyCollection;
-    O->LineInfos        = EmptyCollection;
-    O->StringCount      = 0;
-    O->Strings          = 0;
-    O->Assertions       = EmptyCollection;
-    O->Scopes           = EmptyCollection;
-    O->Spans            = EmptyCollection;
-
-    /* Return the new entry */
-    return O;
-}
-
-
-
-void FreeObjData (ObjData* O)
-/* Free an ObjData object. NOTE: This function works only for unused object
-** data, that is, ObjData objects that aren't used because they aren't
-** referenced.
-*/
-{
-    unsigned I;
-
-    for (I = 0; I < CollCount (&O->Files); ++I) {
-        CollDeleteItem (&((FileInfo*) CollAtUnchecked (&O->Files, I))->Modules, O);
-    }
-    DoneCollection (&O->Files);
-    DoneCollection (&O->Sections);
-    for (I = 0; I < CollCount (&O->Exports); ++I) {
-        FreeExport (CollAtUnchecked (&O->Exports, I));
-    }
-    DoneCollection (&O->Exports);
-    for (I = 0; I < CollCount (&O->Imports); ++I) {
-        FreeImport (CollAtUnchecked (&O->Imports, I));
-    }
-    DoneCollection (&O->Imports);
-    DoneCollection (&O->DbgSyms);
-    DoneCollection (&O->HLLDbgSyms);
-
-    for (I = 0; I < CollCount (&O->LineInfos); ++I) {
-        FreeLineInfo (CollAtUnchecked (&O->LineInfos, I));
-    }
-    DoneCollection (&O->LineInfos);
-    xfree (O->Strings);
-    DoneCollection (&O->Assertions);
-    DoneCollection (&O->Scopes);
-    for (I = 0; I < CollCount (&O->Spans); ++I) {
-        FreeSpan (CollAtUnchecked (&O->Spans, I));
-    }
-    DoneCollection (&O->Spans);
-
-    xfree (O);
-}
-
-
-
-void FreeObjStrings (ObjData* O)
-/* Free the module string data. Used once the object file is loaded completely
-** when all strings are converted to global strings.
-*/
-{
-    xfree (O->Strings);
-    O->Strings = 0;
-}
-
-
-
-void InsertObjData (ObjData* O)
-/* Insert the ObjData object into the collection of used ObjData objects. */
-{
-    CollAppend (&ObjDataList, O);
-}
-
-
-
-void InsertObjGlobals (ObjData* O)
-/* Insert imports and exports from the object file into the global import and
-** export lists.
-*/
-{
-    unsigned I;
-
-    /* Insert exports and imports */
-    for (I = 0; I < CollCount (&O->Exports); ++I) {
-        InsertExport (CollAt (&O->Exports, I));
-    }
-    for (I = 0; I < CollCount (&O->Imports); ++I) {
-        InsertImport (CollAt (&O->Imports, I));
-    }
-}
-
-
-
-unsigned MakeGlobalStringId (const ObjData* O, unsigned Index)
-/* Convert a local string id into a global one and return it. */
-{
-    if (Index >= O->StringCount) {
-        Error ("Invalid string index (%u) in module `%s'",
-               Index, GetObjFileName (O));
-    }
-    return O->Strings[Index];
-}
-
-
-
-const char* GetObjFileName (const ObjData* O)
-/* Get the name of the object file. Return "[linker generated]" if the object
-** file is NULL.
-*/
-{
-    return O? GetString (O->Name) : "[linker generated]";
-}
-
-
-
-const struct StrBuf* GetObjString (const ObjData* Obj, unsigned Id)
-/* Get a string from an object file checking for an invalid index */
-{
-    return GetStrBuf (MakeGlobalStringId (Obj, Id));
-}
-
-
-
-struct Section* GetObjSection (const ObjData* O, unsigned Id)
-/* Get a section from an object file checking for a valid index */
-{
-    if (Id >= CollCount (&O->Sections)) {
-        Error ("Invalid section index (%u) in module `%s'",
-               Id, GetObjFileName (O));
-    }
-    return CollAtUnchecked (&O->Sections, Id);
-}
-
-
-
-struct Import* GetObjImport (const ObjData* O, unsigned Id)
-/* Get an import from an object file checking for a valid index */
-{
-    if (Id >= CollCount (&O->Imports)) {
-        Error ("Invalid import index (%u) in module `%s'",
-               Id, GetObjFileName (O));
-    }
-    return CollAtUnchecked (&O->Imports, Id);
-}
-
-
-
-struct Export* GetObjExport (const ObjData* O, unsigned Id)
-/* Get an export from an object file checking for a valid index */
-{
-    if (Id >= CollCount (&O->Exports)) {
-        Error ("Invalid export index (%u) in module `%s'",
-               Id, GetObjFileName (O));
-    }
-    return CollAtUnchecked (&O->Exports, Id);
-}
-
-
-
-struct DbgSym* GetObjDbgSym (const ObjData* O, unsigned Id)
-/* Get a debug symbol from an object file checking for a valid index */
-{
-    if (Id >= CollCount (&O->DbgSyms)) {
-        Error ("Invalid debug symbol index (%u) in module `%s'",
-               Id, GetObjFileName (O));
-    }
-    return CollAtUnchecked (&O->DbgSyms, Id);
-}
-
-
-
-struct Scope* GetObjScope (const ObjData* O, unsigned Id)
-/* Get a scope from an object file checking for a valid index */
-{
-    if (Id >= CollCount (&O->Scopes)) {
-        Error ("Invalid scope index (%u) in module `%s'",
-               Id, GetObjFileName (O));
-    }
-    return CollAtUnchecked (&O->Scopes, Id);
-}
-
-
-
-unsigned ObjDataCount (void)
-/* Return the total number of modules */
-{
-    return CollCount (&ObjDataList);
-}
-
-
-
-void PrintDbgModules (FILE* F)
-/* Output the modules to a debug info file */
-{
-    unsigned I;
-
-    /* Output modules */
-    for (I = 0; I < CollCount (&ObjDataList); ++I) {
-
-        /* Get this object file */
-        const ObjData* O = CollConstAt (&ObjDataList, I);
-
-        /* The main source file is the one at index zero */
-        const FileInfo* Source = CollConstAt (&O->Files, 0);
-
-        /* Output the module line */
-        fprintf (F,
-                 "mod\tid=%u,name=\"%s\",file=%u",
-                 I,
-                 GetObjFileName (O),
-                 Source->Id);
-
-        /* Add library if any */
-        if (O->Lib != 0) {
-            fprintf (F, ",lib=%u", GetLibId (O->Lib));
-        }
-
-        /* Terminate the output line */
-        fputc ('\n', F);
-    }
-
-}
diff --git a/src/ld65/objdata.h b/src/ld65/objdata.h
deleted file mode 100644 (file)
index 554fe0c..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 objdata.h                                 */
-/*                                                                           */
-/*               Handling object file data for the ld65 linker               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OBJDATA_H
-#define OBJDATA_H
-
-
-
-/* common */
-#include "coll.h"
-#include "inline.h"
-#include "objdefs.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Forwards */
-struct Export;
-struct Import;
-struct Library;
-struct Scope;
-struct Section;
-struct StrBuf;
-
-/* Values for the Flags field */
-#define OBJ_REF         0x0001          /* We have a reference to this file */
-
-/* Internal structure holding object file data */
-typedef struct ObjData ObjData;
-struct ObjData {
-    ObjData*            Next;           /* Linked list of all objects */
-    unsigned            Id;             /* Id of this module */
-    unsigned            Name;           /* Module name */
-    struct Library*     Lib;            /* Library where module comes from */
-    unsigned long       MTime;          /* Time of last modification */
-    ObjHeader           Header;         /* Header of file */
-    unsigned long       Start;          /* Start offset of data in library */
-    unsigned            Flags;
-
-    unsigned            HLLSymBaseId;   /* Debug info base id for hll symbols */
-    unsigned            SymBaseId;      /* Debug info base id for symbols */
-    unsigned            ScopeBaseId;    /* Debug info base id for scopes */
-    unsigned            SpanBaseId;     /* Debug info base id for spans */
-
-    Collection          Files;          /* List of input files */
-    Collection          Sections;       /* List of all sections */
-    Collection          Exports;        /* List of all exports */
-    Collection          Imports;        /* List of all imports */
-    Collection          DbgSyms;        /* List of debug symbols */
-    Collection          HLLDbgSyms;     /* List of hll debug symbols */
-    Collection          LineInfos;      /* List of line infos */
-    unsigned            StringCount;    /* Count of strings */
-    unsigned*           Strings;        /* List of global string indices */
-    Collection          Assertions;     /* List of module assertions */
-    Collection          Scopes;         /* List of scopes */
-    Collection          Spans;          /* List of spans */
-};
-
-
-
-/* Collection containing used ObjData objects */
-extern Collection       ObjDataList;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-ObjData* NewObjData (void);
-/* Allocate a new structure on the heap, insert it into the list, return it */
-
-void FreeObjData (ObjData* O);
-/* Free an ObjData object. NOTE: This function works only for unused object
-** data, that is, ObjData objects that aren't used because they aren't
-** referenced.
-*/
-
-void FreeObjStrings (ObjData* O);
-/* Free the module string data. Used once the object file is loaded completely
-** when all strings are converted to global strings.
-*/
-
-void InsertObjData (ObjData* O);
-/* Insert the ObjData object into the collection of used ObjData objects. */
-
-void InsertObjGlobals (ObjData* O);
-/* Insert imports and exports from the object file into the global import and
-** export lists.
-*/
-
-unsigned MakeGlobalStringId (const ObjData* O, unsigned Index);
-/* Convert a local string id into a global one and return it. */
-
-const char* GetObjFileName (const ObjData* O);
-/* Get the name of the object file. Return "[linker generated]" if the object
-** file is NULL.
-*/
-
-#if defined(HAVE_INLINE)
-INLINE int ObjHasFiles (const ObjData* O)
-/* Return true if the files list does exist */
-{
-    return (O != 0 && CollCount (&O->Files) != 0);
-}
-#else
-#  define ObjHasFiles(O)       ((O) != 0 && CollCount (&(O)->Files) != 0)
-#endif
-
-const struct StrBuf* GetObjString (const ObjData* Obj, unsigned Id);
-/* Get a string from an object file checking for an invalid index */
-
-struct Section* GetObjSection (const ObjData* Obj, unsigned Id);
-/* Get a section from an object file checking for a valid index */
-
-struct Import* GetObjImport (const ObjData* Obj, unsigned Id);
-/* Get an import from an object file checking for a valid index */
-
-struct Export* GetObjExport (const ObjData* Obj, unsigned Id);
-/* Get an export from an object file checking for a valid index */
-
-struct DbgSym* GetObjDbgSym (const ObjData* Obj, unsigned Id);
-/* Get a debug symbol from an object file checking for a valid index */
-
-struct Scope* GetObjScope (const ObjData* Obj, unsigned Id);
-/* Get a scope from an object file checking for a valid index */
-
-unsigned ObjDataCount (void);
-/* Return the total number of modules */
-
-void PrintDbgModules (FILE* F);
-/* Output the modules to a debug info file */
-
-
-
-/* End of objdata.h */
-
-#endif
diff --git a/src/ld65/objfile.c b/src/ld65/objfile.c
deleted file mode 100644 (file)
index 870ca52..0000000
+++ /dev/null
@@ -1,374 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 objfile.c                                 */
-/*                                                                           */
-/*                 Object file handling for the ld65 linker                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "fname.h"
-#include "xmalloc.h"
-
-/* ld65 */
-#include "asserts.h"
-#include "dbgsyms.h"
-#include "error.h"
-#include "exports.h"
-#include "fileinfo.h"
-#include "fileio.h"
-#include "lineinfo.h"
-#include "objdata.h"
-#include "objfile.h"
-#include "scopes.h"
-#include "segments.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static unsigned GetModule (const char* Name)
-/* Get a module name index from the file name */
-{
-    /* Make a module name from the file name */
-    const char* Module = FindName (Name);
-    if (*Module == 0) {
-        Error ("Cannot make module name from `%s'", Name);
-    }
-    return GetStringId (Module);
-}
-
-
-
-static void ObjReadHeader (FILE* Obj, ObjHeader* H, const char* Name)
-/* Read the header of the object file checking the signature */
-{
-    H->Version    = Read16 (Obj);
-    if (H->Version != OBJ_VERSION) {
-        Error ("Object file `%s' has wrong version, expected %08X, got %08X",
-               Name, OBJ_VERSION, H->Version);
-    }
-    H->Flags        = Read16 (Obj);
-    H->OptionOffs   = Read32 (Obj);
-    H->OptionSize   = Read32 (Obj);
-    H->FileOffs     = Read32 (Obj);
-    H->FileSize     = Read32 (Obj);
-    H->SegOffs      = Read32 (Obj);
-    H->SegSize      = Read32 (Obj);
-    H->ImportOffs   = Read32 (Obj);
-    H->ImportSize   = Read32 (Obj);
-    H->ExportOffs   = Read32 (Obj);
-    H->ExportSize   = Read32 (Obj);
-    H->DbgSymOffs   = Read32 (Obj);
-    H->DbgSymSize   = Read32 (Obj);
-    H->LineInfoOffs = Read32 (Obj);
-    H->LineInfoSize = Read32 (Obj);
-    H->StrPoolOffs  = Read32 (Obj);
-    H->StrPoolSize  = Read32 (Obj);
-    H->AssertOffs   = Read32 (Obj);
-    H->AssertSize   = Read32 (Obj);
-    H->ScopeOffs    = Read32 (Obj);
-    H->ScopeSize    = Read32 (Obj);
-    H->SpanOffs     = Read32 (Obj);
-    H->SpanSize     = Read32 (Obj);
-}
-
-
-
-void ObjReadFiles (FILE* F, unsigned long Pos, ObjData* O)
-/* Read the files list from a file at the given position */
-{
-    unsigned I;
-    unsigned FileCount;
-
-    /* Seek to the correct position */
-    FileSetPos (F, Pos);
-
-    /* Read the data */
-    FileCount  = ReadVar (F);
-    CollGrow (&O->Files, FileCount);
-    for (I = 0; I < FileCount; ++I) {
-        CollAppend (&O->Files, ReadFileInfo (F, O));
-    }
-}
-
-
-
-void ObjReadSections (FILE* F, unsigned long Pos, ObjData* O)
-/* Read the section data from a file at the given position */
-{
-    unsigned I;
-    unsigned SectionCount;
-
-    /* Seek to the correct position */
-    FileSetPos (F, Pos);
-
-    /* Read the data */
-    SectionCount = ReadVar (F);
-    CollGrow (&O->Sections, SectionCount);
-    for (I = 0; I < SectionCount; ++I) {
-        CollAppend (&O->Sections, ReadSection (F, O));
-    }
-}
-
-
-
-void ObjReadImports (FILE* F, unsigned long Pos, ObjData* O)
-/* Read the imports from a file at the given position */
-{
-    unsigned I;
-    unsigned ImportCount;
-
-    /* Seek to the correct position */
-    FileSetPos (F, Pos);
-
-    /* Read the data */
-    ImportCount = ReadVar (F);
-    CollGrow (&O->Imports, ImportCount);
-    for (I = 0; I < ImportCount; ++I) {
-        CollAppend (&O->Imports, ReadImport (F, O));
-    }
-}
-
-
-
-void ObjReadExports (FILE* F, unsigned long Pos, ObjData* O)
-/* Read the exports from a file at the given position */
-{
-    unsigned I;
-    unsigned ExportCount;
-
-    /* Seek to the correct position */
-    FileSetPos (F, Pos);
-
-    /* Read the data */
-    ExportCount = ReadVar (F);
-    CollGrow (&O->Exports, ExportCount);
-    for (I = 0; I < ExportCount; ++I) {
-        CollAppend (&O->Exports, ReadExport (F, O));
-    }
-}
-
-
-
-void ObjReadDbgSyms (FILE* F, unsigned long Pos, ObjData* O)
-/* Read the debug symbols from a file at the given position */
-{
-    unsigned I;
-    unsigned DbgSymCount;
-
-    /* Seek to the correct position */
-    FileSetPos (F, Pos);
-
-    /* Read the asm debug symbols */
-    DbgSymCount = ReadVar (F);
-    CollGrow (&O->DbgSyms, DbgSymCount);
-    for (I = 0; I < DbgSymCount; ++I) {
-        CollAppend (&O->DbgSyms, ReadDbgSym (F, O, I));
-    }
-
-    /* Read the hll debug symbols */
-    DbgSymCount = ReadVar (F);
-    CollGrow (&O->HLLDbgSyms, DbgSymCount);
-    for (I = 0; I < DbgSymCount; ++I) {
-        CollAppend (&O->HLLDbgSyms, ReadHLLDbgSym (F, O, I));
-    }
-}
-
-
-
-void ObjReadLineInfos (FILE* F, unsigned long Pos, ObjData* O)
-/* Read the line infos from a file at the given position */
-{
-    unsigned I;
-    unsigned LineInfoCount;
-
-    /* Seek to the correct position */
-    FileSetPos (F, Pos);
-
-    /* Read the data */
-    LineInfoCount = ReadVar (F);
-    CollGrow (&O->LineInfos, LineInfoCount);
-    for (I = 0; I < LineInfoCount; ++I) {
-        CollAppend (&O->LineInfos, ReadLineInfo (F, O));
-    }
-}
-
-
-
-void ObjReadStrPool (FILE* F, unsigned long Pos, ObjData* O)
-/* Read the string pool from a file at the given position */
-{
-    unsigned I;
-
-    /* Seek to the correct position */
-    FileSetPos (F, Pos);
-
-    /* Read the data */
-    O->StringCount = ReadVar (F);
-    O->Strings     = xmalloc (O->StringCount * sizeof (O->Strings[0]));
-    for (I = 0; I < O->StringCount; ++I) {
-        O->Strings[I] = ReadStr (F);
-    }
-}
-
-
-
-void ObjReadAssertions (FILE* F, unsigned long Pos, ObjData* O)
-/* Read the assertions from a file at the given offset */
-{
-    unsigned I;
-    unsigned AssertionCount;
-
-    /* Seek to the correct position */
-    FileSetPos (F, Pos);
-
-    /* Read the data */
-    AssertionCount = ReadVar (F);
-    CollGrow (&O->Assertions, AssertionCount);
-    for (I = 0; I < AssertionCount; ++I) {
-        CollAppend (&O->Assertions, ReadAssertion (F, O));
-    }
-}
-
-
-
-void ObjReadScopes (FILE* F, unsigned long Pos, ObjData* O)
-/* Read the scope table from a file at the given offset */
-{
-    unsigned I;
-    unsigned ScopeCount;
-
-    /* Seek to the correct position */
-    FileSetPos (F, Pos);
-
-    /* Read the data */
-    ScopeCount = ReadVar (F);
-    CollGrow (&O->Scopes, ScopeCount);
-    for (I = 0; I < ScopeCount; ++I) {
-        CollAppend (&O->Scopes,  ReadScope (F, O, I));
-    }
-}
-
-
-
-void ObjReadSpans (FILE* F, unsigned long Pos, ObjData* O)
-/* Read the span table from a file at the given offset */
-{
-    unsigned I;
-    unsigned SpanCount;
-
-    /* Seek to the correct position */
-    FileSetPos (F, Pos);
-
-    /* Read the data */
-    SpanCount = ReadVar (F);
-    CollGrow (&O->Spans, SpanCount);
-    for (I = 0; I < SpanCount; ++I) {
-        CollAppend (&O->Spans,  ReadSpan (F, O, I));
-    }
-}
-
-
-
-void ObjAdd (FILE* Obj, const char* Name)
-/* Add an object file to the module list */
-{
-    /* Create a new structure for the object file data */
-    ObjData* O = NewObjData ();
-
-    /* The magic was already read and checked, so set it in the header */
-    O->Header.Magic = OBJ_MAGIC;
-
-    /* Read and check the header */
-    ObjReadHeader (Obj, &O->Header, Name);
-
-    /* Initialize the object module data structure */
-    O->Name  = GetModule (Name);
-
-    /* Read the string pool from the object file */
-    ObjReadStrPool (Obj, O->Header.StrPoolOffs, O);
-
-    /* Read the files list from the object file */
-    ObjReadFiles (Obj, O->Header.FileOffs, O);
-
-    /* Read the line infos from the object file */
-    ObjReadLineInfos (Obj, O->Header.LineInfoOffs, O);
-
-    /* Read the imports list from the object file */
-    ObjReadImports (Obj, O->Header.ImportOffs, O);
-
-    /* Read the object file exports and insert them into the exports list */
-    ObjReadExports (Obj, O->Header.ExportOffs, O);
-
-    /* Read the object debug symbols from the object file */
-    ObjReadDbgSyms (Obj, O->Header.DbgSymOffs, O);
-
-    /* Read the assertions from the object file */
-    ObjReadAssertions (Obj, O->Header.AssertOffs, O);
-
-    /* Read the segment list from the object file. This must be late, since
-    ** the expressions stored in the code may reference segments or imported
-    ** symbols.
-    */
-    ObjReadSections (Obj, O->Header.SegOffs, O);
-
-    /* Read the scope table from the object file. Scopes reference segments, so
-    ** we must read them after the sections.
-    */
-    ObjReadScopes (Obj, O->Header.ScopeOffs, O);
-
-    /* Read the spans from the object file */
-    ObjReadSpans (Obj, O->Header.SpanOffs, O);
-
-    /* Mark this object file as needed */
-    O->Flags |= OBJ_REF;
-
-    /* Done, close the file (we read it only, so no error check) */
-    fclose (Obj);
-
-    /* Insert the imports and exports to the global lists */
-    InsertObjGlobals (O);
-
-    /* Insert the object into the list of all used object files */
-    InsertObjData (O);
-
-    /* All references to strings are now resolved, so we can delete the module
-    ** string pool.
-    */
-    FreeObjStrings (O);
-}
diff --git a/src/ld65/objfile.h b/src/ld65/objfile.h
deleted file mode 100644 (file)
index 4683638..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 objfile.h                                 */
-/*                                                                           */
-/*                 Object file handling for the ld65 linker                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OBJFILE_H
-#define OBJFILE_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "objdefs.h"
-
-/* ld65 */
-#include "objdata.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void ObjReadFiles (FILE* F, unsigned long Pos, ObjData* O);
-/* Read the files list from a file at the given position */
-
-void ObjReadSections (FILE* F, unsigned long Pos, ObjData* O);
-/* Read the section data from a file at the given position */
-
-void ObjReadImports (FILE* F, unsigned long Pos, ObjData* O);
-/* Read the imports from a file at the given position */
-
-void ObjReadExports (FILE* F, unsigned long Pos, ObjData* O);
-/* Read the exports from a file at the given position */
-
-void ObjReadDbgSyms (FILE* F, unsigned long Pos, ObjData* O);
-/* Read the debug symbols from a file at the given position */
-
-void ObjReadLineInfos (FILE* F, unsigned long Pos, ObjData* O);
-/* Read the line infos from a file at the given position */
-
-void ObjReadStrPool (FILE* F, unsigned long Pos, ObjData* O);
-/* Read the string pool from a file at the given position */
-
-void ObjReadAssertions (FILE* F, unsigned long Pos, ObjData* O);
-/* Read the assertions from a file at the given offset */
-
-void ObjReadScopes (FILE* F, unsigned long Pos, ObjData* O);
-/* Read the scope table from a file at the given offset */
-
-void ObjReadSpans (FILE* F, unsigned long Pos, ObjData* O);
-/* Read the span table from a file at the given offset */
-
-void ObjAdd (FILE* F, const char* Name);
-/* Add an object file to the module list */
-
-
-
-/* End of objfile.h */
-
-#endif
diff --git a/src/ld65/scanner.c b/src/ld65/scanner.c
deleted file mode 100644 (file)
index 0f6ea58..0000000
+++ /dev/null
@@ -1,582 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 scanner.c                                 */
-/*                                                                           */
-/*              Configuration file scanner for the ld65 linker               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-
-/* common */
-#include "chartype.h"
-#include "strbuf.h"
-#include "xsprintf.h"
-
-/* ld65 */
-#include "global.h"
-#include "error.h"
-#include "scanner.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Current token and attributes */
-cfgtok_t        CfgTok;
-StrBuf          CfgSVal = STATIC_STRBUF_INITIALIZER;
-unsigned long   CfgIVal;
-
-/* Error location */
-FilePos                 CfgErrorPos;
-
-/* Input source for the configuration */
-static const char*      CfgName         = 0;
-
-/* Other input stuff */
-static int              C               = ' ';
-static FilePos          InputPos;
-static FILE*            InputFile       = 0;
-
-
-
-/*****************************************************************************/
-/*                              Error handling                               */
-/*****************************************************************************/
-
-
-
-void CfgWarning (const FilePos* Pos, const char* Format, ...)
-/* Print a warning message adding file name and line number of a given file */
-{
-    StrBuf Buf = STATIC_STRBUF_INITIALIZER;
-    va_list ap;
-
-    va_start (ap, Format);
-    SB_VPrintf (&Buf, Format, ap);
-    va_end (ap);
-
-    Warning ("%s(%u): %s",
-             GetString (Pos->Name), Pos->Line, SB_GetConstBuf (&Buf));
-    SB_Done (&Buf);
-}
-
-
-
-void CfgError (const FilePos* Pos, const char* Format, ...)
-/* Print an error message adding file name and line number of a given file */
-{
-    StrBuf Buf = STATIC_STRBUF_INITIALIZER;
-    va_list ap;
-
-    va_start (ap, Format);
-    SB_VPrintf (&Buf, Format, ap);
-    va_end (ap);
-
-    Error ("%s(%u): %s",
-           GetString (Pos->Name), Pos->Line, SB_GetConstBuf (&Buf));
-    SB_Done (&Buf);
-}
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void NextChar (void)
-/* Read the next character from the input file */
-{
-    /* Read from the file */
-    C = getc (InputFile);
-
-    /* Count columns */
-    if (C != EOF) {
-        ++InputPos.Col;
-    }
-
-    /* Count lines */
-    if (C == '\n') {
-        ++InputPos.Line;
-        InputPos.Col = 0;
-    }
-}
-
-
-
-static unsigned DigitVal (int C)
-/* Return the value for a numeric digit */
-{
-    if (isdigit (C)) {
-        return C - '0';
-    } else {
-        return toupper (C) - 'A' + 10;
-    }
-}
-
-
-
-static void StrVal (void)
-/* Parse a string value and expand escape sequences */
-{
-    /* Skip the starting double quotes */
-    NextChar ();
-
-    /* Read input chars */
-    SB_Clear (&CfgSVal);
-    while (C != '\"') {
-        switch (C) {
-
-            case EOF:
-            case '\n':
-                CfgError (&CfgErrorPos, "Unterminated string");
-                break;
-
-            case '%':
-                NextChar ();
-                switch (C) {
-
-                    case EOF:
-                    case '\n':
-                    case '\"':
-                        CfgError (&CfgErrorPos, "Unterminated '%%' escape sequence");
-                        break;
-
-                    case '%':
-                        SB_AppendChar (&CfgSVal, '%');
-                        NextChar ();
-                        break;
-
-                    case 'O':
-                        /* Replace by output file */
-                        if (OutputName) {
-                            SB_AppendStr (&CfgSVal, OutputName);
-                        }
-                        OutputNameUsed = 1;
-                        NextChar ();
-                        break;
-
-                    default:
-                        CfgWarning (&CfgErrorPos,
-                                    "Unkown escape sequence `%%%c'", C);
-                        SB_AppendChar (&CfgSVal, '%');
-                        SB_AppendChar (&CfgSVal, C);
-                        NextChar ();
-                        break;
-                }
-                break;
-
-            default:
-                SB_AppendChar (&CfgSVal, C);
-                NextChar ();
-        }
-    }
-
-    /* Skip the terminating double quotes */
-    NextChar ();
-
-    /* Terminate the string */
-    SB_Terminate (&CfgSVal);
-
-    /* We've read a string value */
-    CfgTok = CFGTOK_STRCON;
-}
-
-
-
-void CfgNextTok (void)
-/* Read the next token from the input stream */
-{
-Again:
-    /* Skip whitespace */
-    while (isspace (C)) {
-        NextChar ();
-    }
-
-    /* Remember the current position */
-    CfgErrorPos = InputPos;
-
-    /* Identifier? */
-    if (C == '_' || IsAlpha (C)) {
-
-        /* Read the identifier */
-        SB_Clear (&CfgSVal);
-        while (C == '_' || IsAlNum (C)) {
-            SB_AppendChar (&CfgSVal, C);
-            NextChar ();
-        }
-        SB_Terminate (&CfgSVal);
-        CfgTok = CFGTOK_IDENT;
-        return;
-    }
-
-    /* Hex number? */
-    if (C == '$') {
-        NextChar ();
-        if (!isxdigit (C)) {
-            CfgError (&CfgErrorPos, "Hex digit expected");
-        }
-        CfgIVal = 0;
-        while (isxdigit (C)) {
-            CfgIVal = CfgIVal * 16 + DigitVal (C);
-            NextChar ();
-        }
-        CfgTok = CFGTOK_INTCON;
-        return;
-    }
-
-    /* Decimal number? */
-    if (isdigit (C)) {
-        CfgIVal = 0;
-        while (isdigit (C)) {
-            CfgIVal = CfgIVal * 10 + DigitVal (C);
-            NextChar ();
-        }
-        CfgTok = CFGTOK_INTCON;
-        return;
-    }
-
-    /* Other characters */
-    switch (C) {
-
-        case '-':
-            NextChar ();
-            CfgTok = CFGTOK_MINUS;
-            break;
-
-        case '+':
-            NextChar ();
-            CfgTok = CFGTOK_PLUS;
-            break;
-
-        case '*':
-            NextChar ();
-            CfgTok = CFGTOK_MUL;
-            break;
-
-        case '/':
-            NextChar ();
-            CfgTok = CFGTOK_DIV;
-            break;
-
-        case '(':
-            NextChar ();
-            CfgTok = CFGTOK_LPAR;
-            break;
-
-        case ')':
-            NextChar ();
-            CfgTok = CFGTOK_RPAR;
-            break;
-
-        case '{':
-            NextChar ();
-            CfgTok = CFGTOK_LCURLY;
-            break;
-
-        case '}':
-            NextChar ();
-            CfgTok = CFGTOK_RCURLY;
-            break;
-
-        case ';':
-            NextChar ();
-            CfgTok = CFGTOK_SEMI;
-            break;
-
-        case '.':
-            NextChar ();
-            CfgTok = CFGTOK_DOT;
-            break;
-
-        case ',':
-            NextChar ();
-            CfgTok = CFGTOK_COMMA;
-            break;
-
-        case '=':
-            NextChar ();
-            CfgTok = CFGTOK_EQ;
-            break;
-
-        case ':':
-            NextChar ();
-            CfgTok = CFGTOK_COLON;
-            break;
-
-        case '\"':
-            StrVal ();
-            break;
-
-        case '#':
-            /* Comment */
-            while (C != '\n' && C != EOF) {
-                NextChar ();
-            }
-            if (C != EOF) {
-                goto Again;
-            }
-            CfgTok = CFGTOK_EOF;
-            break;
-
-        case '%':
-            NextChar ();
-            switch (C) {
-
-                case 'O':
-                    NextChar ();
-                    if (OutputName) {
-                        SB_CopyStr (&CfgSVal, OutputName);
-                    } else {
-                        SB_Clear (&CfgSVal);
-                    }
-                    SB_Terminate (&CfgSVal);
-                    OutputNameUsed = 1;
-                    CfgTok = CFGTOK_STRCON;
-                    break;
-
-                case 'S':
-                    NextChar ();
-                    CfgIVal = StartAddr;
-                    CfgTok = CFGTOK_INTCON;
-                    break;
-
-                default:
-                    CfgError (&CfgErrorPos, "Invalid format specification");
-            }
-            break;
-
-        case EOF:
-            CfgTok = CFGTOK_EOF;
-            break;
-
-        default:
-            CfgError (&CfgErrorPos, "Invalid character `%c'", C);
-
-    }
-}
-
-
-
-void CfgConsume (cfgtok_t T, const char* Msg)
-/* Skip a token, print an error message if not found */
-{
-    if (CfgTok != T) {
-        CfgError (&CfgErrorPos, "%s", Msg);
-    }
-    CfgNextTok ();
-}
-
-
-
-void CfgConsumeSemi (void)
-/* Consume a semicolon */
-{
-    CfgConsume (CFGTOK_SEMI, "`;' expected");
-}
-
-
-
-void CfgConsumeColon (void)
-/* Consume a colon */
-{
-    CfgConsume (CFGTOK_COLON, "`:' expected");
-}
-
-
-
-void CfgOptionalComma (void)
-/* Consume a comma if there is one */
-{
-    if (CfgTok == CFGTOK_COMMA) {
-        CfgNextTok ();
-    }
-}
-
-
-
-void CfgOptionalAssign (void)
-/* Consume an equal sign if there is one */
-{
-    if (CfgTok == CFGTOK_EQ) {
-        CfgNextTok ();
-    }
-}
-
-
-
-void CfgAssureInt (void)
-/* Make sure the next token is an integer */
-{
-    if (CfgTok != CFGTOK_INTCON) {
-        CfgError (&CfgErrorPos, "Integer constant expected");
-    }
-}
-
-
-
-void CfgAssureStr (void)
-/* Make sure the next token is a string constant */
-{
-    if (CfgTok != CFGTOK_STRCON) {
-        CfgError (&CfgErrorPos, "String constant expected");
-    }
-}
-
-
-
-void CfgAssureIdent (void)
-/* Make sure the next token is an identifier */
-{
-    if (CfgTok != CFGTOK_IDENT) {
-        CfgError (&CfgErrorPos, "Identifier expected");
-    }
-}
-
-
-
-void CfgRangeCheck (unsigned long Lo, unsigned long Hi)
-/* Check the range of CfgIVal */
-{
-    if (CfgIVal < Lo || CfgIVal > Hi) {
-        CfgError (&CfgErrorPos, "Range error");
-    }
-}
-
-
-
-void CfgSpecialToken (const IdentTok* Table, unsigned Size, const char* Name)
-/* Map an identifier to one of the special tokens in the table */
-{
-    unsigned I;
-
-    /* We need an identifier */
-    if (CfgTok == CFGTOK_IDENT) {
-
-        /* Make it upper case */
-        SB_ToUpper (&CfgSVal);
-
-        /* Linear search */
-        for (I = 0; I < Size; ++I) {
-            if (SB_CompareStr (&CfgSVal, Table[I].Ident) == 0) {
-                CfgTok = Table[I].Tok;
-                return;
-            }
-        }
-
-    }
-
-    /* Not found or no identifier */
-    CfgError (&CfgErrorPos, "%s expected", Name);
-}
-
-
-
-void CfgBoolToken (void)
-/* Map an identifier or integer to a boolean token */
-{
-    static const IdentTok Booleans [] = {
-        {   "YES",      CFGTOK_TRUE     },
-        {   "NO",       CFGTOK_FALSE    },
-        {   "TRUE",     CFGTOK_TRUE     },
-        {   "FALSE",    CFGTOK_FALSE    },
-    };
-
-    /* If we have an identifier, map it to a boolean token */
-    if (CfgTok == CFGTOK_IDENT) {
-        CfgSpecialToken (Booleans, ENTRY_COUNT (Booleans), "Boolean");
-    } else {
-        /* We expected an integer here */
-        if (CfgTok != CFGTOK_INTCON) {
-            CfgError (&CfgErrorPos, "Boolean value expected");
-        }
-        CfgTok = (CfgIVal == 0)? CFGTOK_FALSE : CFGTOK_TRUE;
-    }
-}
-
-
-
-void CfgSetName (const char* Name)
-/* Set a name for a config file */
-{
-    CfgName = Name;
-}
-
-
-
-int CfgAvail (void)
-/* Return true if we have a configuration available */
-{
-    return CfgName != 0;
-}
-
-
-
-void CfgOpenInput (void)
-/* Open the input file if we have one */
-{
-    /* Open the file */
-    InputFile = fopen (CfgName, "r");
-    if (InputFile == 0) {
-        Error ("Cannot open `%s': %s", CfgName, strerror (errno));
-    }
-
-    /* Initialize variables */
-    C         = ' ';
-    InputPos.Line = 1;
-    InputPos.Col  = 0;
-    InputPos.Name = GetStringId (CfgName);
-
-    /* Start the ball rolling ... */
-    CfgNextTok ();
-}
-
-
-
-void CfgCloseInput (void)
-/* Close the input file if we have one */
-{
-    /* Close the input file if we had one */
-    if (InputFile) {
-        (void) fclose (InputFile);
-        InputFile = 0;
-    }
-}
diff --git a/src/ld65/scanner.h b/src/ld65/scanner.h
deleted file mode 100644 (file)
index 006ccfc..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 scanner.h                                 */
-/*                                                                           */
-/*              Configuration file scanner for the ld65 linker               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2013, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SCANNER_H
-#define SCANNER_H
-
-
-
-/* common */
-#include "filepos.h"
-#include "strbuf.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Config file tokens */
-typedef enum {
-    CFGTOK_NONE,
-    CFGTOK_INTCON,              /* Integer constant */
-    CFGTOK_STRCON,              /* String constant */
-    CFGTOK_IDENT,               /* Identifier */
-    CFGTOK_PLUS,
-    CFGTOK_MINUS,
-    CFGTOK_MUL,
-    CFGTOK_DIV,
-    CFGTOK_LPAR,
-    CFGTOK_RPAR,
-    CFGTOK_LCURLY,
-    CFGTOK_RCURLY,
-    CFGTOK_SEMI,
-    CFGTOK_COMMA,
-    CFGTOK_EQ,
-    CFGTOK_COLON,
-    CFGTOK_DOT,
-    CFGTOK_EOF,
-
-    /* Special identifiers */
-    CFGTOK_MEMORY,
-    CFGTOK_FILES,
-    CFGTOK_SEGMENTS,
-    CFGTOK_FORMATS,
-    CFGTOK_FEATURES,
-    CFGTOK_SYMBOLS,
-
-    CFGTOK_START,
-    CFGTOK_SIZE,
-    CFGTOK_TYPE,
-    CFGTOK_FILE,
-    CFGTOK_DEFINE,
-    CFGTOK_BANK,
-    CFGTOK_FILL,
-    CFGTOK_FILLVAL,
-    CFGTOK_EXPORT,
-    CFGTOK_IMPORT,
-    CFGTOK_OS,
-    CFGTOK_ID,
-    CFGTOK_VERSION,
-    CFGTOK_FORMAT,
-
-    CFGTOK_LOAD,
-    CFGTOK_RUN,
-    CFGTOK_ALIGN,
-    CFGTOK_ALIGN_LOAD,
-    CFGTOK_OFFSET,
-    CFGTOK_OPTIONAL,
-
-    CFGTOK_RO,
-    CFGTOK_RW,
-    CFGTOK_BSS,
-    CFGTOK_ZP,
-
-    CFGTOK_O65,
-    CFGTOK_BIN,
-
-    CFGTOK_SMALL,
-    CFGTOK_LARGE,
-
-    CFGTOK_TRUE,
-    CFGTOK_FALSE,
-
-    CFGTOK_LUNIX,
-    CFGTOK_OSA65,
-    CFGTOK_CC65,
-    CFGTOK_OPENCBM,
-
-    CFGTOK_CONDES,
-    CFGTOK_STARTADDRESS,
-
-    CFGTOK_ADDRSIZE,
-    CFGTOK_VALUE,
-
-    CFGTOK_WEAK,
-
-    CFGTOK_ABS,
-    CFGTOK_FAR,
-    CFGTOK_LONG,
-
-    CFGTOK_SEGMENT,
-    CFGTOK_LABEL,
-    CFGTOK_COUNT,
-    CFGTOK_ORDER,
-
-    CFGTOK_CONSTRUCTOR,
-    CFGTOK_DESTRUCTOR,
-    CFGTOK_INTERRUPTOR,
-
-    CFGTOK_DECREASING,
-    CFGTOK_INCREASING,
-
-    CFGTOK_DEFAULT
-
-} cfgtok_t;
-
-
-
-/* Mapping table entry, special identifier --> token */
-typedef struct IdentTok IdentTok;
-struct IdentTok {
-    const char* Ident;          /* Identifier */
-    cfgtok_t    Tok;            /* Token for identifier */
-};
-#define ENTRY_COUNT(s)  (sizeof (s) / sizeof (s [0]))
-
-
-
-/* Current token and attributes */
-extern cfgtok_t         CfgTok;
-extern StrBuf           CfgSVal;
-extern unsigned long    CfgIVal;
-
-/* Error location. PLEASE NOTE: I'm abusing the FilePos structure to some
-** degree. It is used mostly to hold a file position, where the Name member
-** is an index into the source file table of an object file. As used in config
-** file processing, the Name member is a string pool index instead. This is
-** distinguished by the object file pointer being NULL or not in the structs
-** where this is relevant.
-*/
-extern FilePos          CfgErrorPos;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void CfgWarning (const FilePos* Pos, const char* Format, ...) attribute((format(printf,2,3)));
-/* Print a warning message adding file name and line number of the config file */
-
-void CfgError (const FilePos* Pos, const char* Format, ...) attribute((format(printf,2,3)));
-/* Print an error message adding file name and line number of a given file */
-
-void CfgNextTok (void);
-/* Read the next token from the input stream */
-
-void CfgConsume (cfgtok_t T, const char* Msg);
-/* Skip a token, print an error message if not found */
-
-void CfgConsumeSemi (void);
-/* Consume a semicolon */
-
-void CfgConsumeColon (void);
-/* Consume a colon */
-
-void CfgOptionalComma (void);
-/* Consume a comma if there is one */
-
-void CfgOptionalAssign (void);
-/* Consume an equal sign if there is one */
-
-void CfgAssureInt (void);
-/* Make sure the next token is an integer */
-
-void CfgAssureStr (void);
-/* Make sure the next token is a string constant */
-
-void CfgAssureIdent (void);
-/* Make sure the next token is an identifier */
-
-void CfgRangeCheck (unsigned long Lo, unsigned long Hi);
-/* Check the range of CfgIVal */
-
-void CfgSpecialToken (const IdentTok* Table, unsigned Size, const char* Name);
-/* Map an identifier to one of the special tokens in the table */
-
-void CfgBoolToken (void);
-/* Map an identifier or integer to a boolean token */
-
-void CfgSetName (const char* Name);
-/* Set a name for a config file */
-
-int CfgAvail (void);
-/* Return true if we have a configuration available */
-
-void CfgOpenInput (void);
-/* Open the input file if we have one */
-
-void CfgCloseInput (void);
-/* Close the input file if we have one */
-
-
-
-/* End of scanner.h */
-
-#endif
diff --git a/src/ld65/scopes.c b/src/ld65/scopes.c
deleted file mode 100644 (file)
index edf0d0d..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 scopes.c                                  */
-/*                                                                           */
-/*                    Scope handling for the ld65 linker                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2011,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "xmalloc.h"
-
-/* ld65 */
-#include "error.h"
-#include "fileio.h"
-#include "scopes.h"
-#include "span.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static Scope* NewScope (ObjData* Obj, unsigned Id)
-/* Create a new Scope and return it */
-{
-    /* Allocate memory */
-    Scope* S     = xmalloc (sizeof (Scope));
-
-    /* Initialize the fields where necessary */
-    S->Id       = Id;
-    S->Obj      = Obj;
-    S->Size     = 0;
-    S->LabelId  = ~0U;
-    S->Spans    = 0;
-
-    /* Return the new entry */
-    return S;
-}
-
-
-
-Scope* ReadScope (FILE* F, ObjData* Obj, unsigned Id)
-/* Read a scope from a file and return it */
-{
-    /* Create a new scope */
-    Scope* S = NewScope (Obj, Id);
-
-    /* Read the data from file */
-    S->ParentId     = ReadVar (F);
-    S->LexicalLevel = ReadVar (F);
-    S->Flags        = ReadVar (F);
-    S->Type         = ReadVar (F);
-    S->Name         = MakeGlobalStringId (Obj, ReadVar (F));
-    if (SCOPE_HAS_SIZE (S->Flags)) {
-        S->Size     = ReadVar (F);
-    }
-    if (SCOPE_HAS_LABEL (S->Flags)) {
-        S->LabelId  = ReadVar (F);
-    }
-    S->Spans        = ReadSpanList (F);
-
-    /* Return the new Scope */
-    return S;
-}
-
-
-
-unsigned ScopeCount (void)
-/* Return the total number of scopes */
-{
-
-    /* Count scopes from all modules we have linked into the output file */
-    unsigned I;
-    unsigned Count = 0;
-    for (I = 0; I < CollCount (&ObjDataList); ++I) {
-        /* Get the object file */
-        const ObjData* O = CollAtUnchecked (&ObjDataList, I);
-
-        /* Account for the scopes in this file */
-        Count += CollCount (&O->Scopes);
-    }
-    return Count;
-}
-
-
-
-void PrintDbgScopes (FILE* F)
-/* Output the scopes to a debug info file */
-{
-    unsigned I, J;
-
-    /* Print scopes from all modules we have linked into the output file */
-    for (I = 0; I < CollCount (&ObjDataList); ++I) {
-
-        /* Get the object file */
-        ObjData* O = CollAtUnchecked (&ObjDataList, I);
-
-        /* Output the scopes for this object file */
-        for (J = 0; J < CollCount (&O->Scopes); ++J) {
-            const Scope* S = CollConstAt (&O->Scopes, J);
-
-            /* Output the first chunk of data */
-            fprintf (F,
-                     "scope\tid=%u,name=\"%s\",mod=%u",
-                     O->ScopeBaseId + S->Id,
-                     GetString (S->Name),
-                     I);
-
-            /* Print the type if not module */
-            switch (S->Type) {
-
-                case SCOPE_GLOBAL:      fputs (",type=global", F);      break;
-                case SCOPE_FILE:        /* default */                   break;
-                case SCOPE_SCOPE:       fputs (",type=scope", F);       break;
-                case SCOPE_STRUCT:      fputs (",type=struct", F);      break;
-                case SCOPE_ENUM:        fputs (",type=enum", F);        break;
-
-                default:
-                    Error ("Module `%s': Unknown scope type %u",
-                           GetObjFileName (O), S->Type);
-            }
-
-            /* Print the size if available */
-            if (S->Size != 0) {
-                fprintf (F, ",size=%lu", S->Size);
-            }
-            /* Print parent if available */
-            if (S->Id != S->ParentId) {
-                fprintf (F, ",parent=%u", O->ScopeBaseId + S->ParentId);
-            }
-            /* Print the label id if the scope is labeled */
-            if (SCOPE_HAS_LABEL (S->Flags)) {
-                fprintf (F, ",sym=%u", O->SymBaseId + S->LabelId);
-            }
-            /* Print the list of spans for this scope */
-            PrintDbgSpanList (F, O, S->Spans);
-
-            /* Terminate the output line */
-            fputc ('\n', F);
-        }
-    }
-}
diff --git a/src/ld65/scopes.h b/src/ld65/scopes.h
deleted file mode 100644 (file)
index 67d7014..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 scopes.h                                  */
-/*                                                                           */
-/*                    Scope handling for the ld65 linker                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2011,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SCOPES_H
-#define SCOPES_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "coll.h"
-#include "scopedefs.h"
-
-/* ld65 */
-#include "objdata.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Debug symbol structure */
-typedef struct Scope Scope;
-struct Scope {
-    unsigned            Id;             /* Id of scope */
-    ObjData*            Obj;            /* Object file that contains the scope */
-    unsigned            ParentId;       /* Id of parent scope */
-    unsigned            LabelId;        /* Id of the scope label if any */
-    unsigned            LexicalLevel;   /* Lexical level */
-    unsigned            Flags;
-    unsigned            Type;           /* Type of scope */
-    unsigned            Name;           /* Name of scope */
-    unsigned long       Size;           /* Size of scope */
-    unsigned*           Spans;          /* Spans for this scope */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Scope* ReadScope (FILE* F, ObjData* Obj, unsigned Id);
-/* Read a scope from a file, insert and return it */
-
-unsigned ScopeCount (void);
-/* Return the total number of scopes */
-
-void PrintDbgScopes (FILE* F);
-/* Output the scopes to a debug info file */
-
-
-
-/* End of scopes.h */
-
-#endif
diff --git a/src/ld65/segments.c b/src/ld65/segments.c
deleted file mode 100644 (file)
index 9c3972a..0000000
+++ /dev/null
@@ -1,664 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                segments.c                                 */
-/*                                                                           */
-/*                   Segment handling for the ld65 linker                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-#include <string.h>
-
-/* common */
-#include "addrsize.h"
-#include "alignment.h"
-#include "check.h"
-#include "coll.h"
-#include "exprdefs.h"
-#include "fragdefs.h"
-#include "hashfunc.h"
-#include "print.h"
-#include "segdefs.h"
-#include "symdefs.h"
-#include "xmalloc.h"
-
-/* ld65 */
-#include "error.h"
-#include "expr.h"
-#include "fileio.h"
-#include "fragment.h"
-#include "global.h"
-#include "lineinfo.h"
-#include "segments.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Hash table */
-#define HASHTAB_MASK    0x3FU
-#define HASHTAB_SIZE    (HASHTAB_MASK + 1)
-static Segment*         HashTab[HASHTAB_SIZE];
-
-/* List of all segments */
-static Collection       SegmentList = STATIC_COLLECTION_INITIALIZER;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static Segment* NewSegment (unsigned Name, unsigned char AddrSize)
-/* Create a new segment and initialize it */
-{
-    unsigned Hash;
-
-    /* Allocate memory */
-    Segment* S = xmalloc (sizeof (Segment));
-
-    /* Initialize the fields */
-    S->Name        = Name;
-    S->Next        = 0;
-    S->Flags       = SEG_FLAG_NONE;
-    S->Sections    = EmptyCollection;
-    S->MemArea     = 0;
-    S->PC          = 0;
-    S->Size        = 0;
-    S->OutputName  = 0;
-    S->OutputOffs  = 0;
-    S->Alignment   = 1;
-    S->FillVal     = 0;
-    S->AddrSize    = AddrSize;
-    S->ReadOnly    = 0;
-    S->Dumped      = 0;
-
-    /* Insert the segment into the segment list and assign the segment id */
-    S->Id = CollCount (&SegmentList);
-    CollAppend (&SegmentList, S);
-
-    /* Insert the segment into the segment hash list */
-    Hash = (S->Name & HASHTAB_MASK);
-    S->Next = HashTab[Hash];
-    HashTab[Hash] = S;
-
-    /* Return the new entry */
-    return S;
-}
-
-
-
-Segment* GetSegment (unsigned Name, unsigned char AddrSize, const char* ObjName)
-/* Search for a segment and return an existing one. If the segment does not
-** exist, create a new one and return that. ObjName is only used for the error
-** message and may be NULL if the segment is linker generated.
-*/
-{
-    /* Try to locate the segment in the table */
-    Segment* S = SegFind (Name);
-
-    /* If we don't have that segment already, allocate it using the type of
-    ** the first section.
-    */
-    if (S == 0) {
-        /* Create a new segment */
-        S = NewSegment (Name, AddrSize);
-    } else {
-        /* Check if the existing segment has the requested address size */
-        if (S->AddrSize != AddrSize) {
-            /* Allow an empty object name */
-            if (ObjName == 0) {
-                ObjName = "[linker generated]";
-            }
-            Error ("Module `%s': Type mismatch for segment `%s'", ObjName,
-                   GetString (Name));
-        }
-    }
-
-    /* Return the segment */
-    return S;
-}
-
-
-
-Section* NewSection (Segment* Seg, unsigned long Alignment, unsigned char AddrSize)
-/* Create a new section for the given segment */
-{
-    /* Allocate memory */
-    Section* S = xmalloc (sizeof (Section));
-
-    /* Initialize the data */
-    S->Next     = 0;
-    S->Seg      = Seg;
-    S->Obj      = 0;
-    S->FragRoot = 0;
-    S->FragLast = 0;
-    S->Size     = 0;
-    S->Alignment= Alignment;
-    S->AddrSize = AddrSize;
-
-    /* Calculate the alignment bytes needed for the section */
-    S->Fill = AlignCount (Seg->Size, S->Alignment);
-
-    /* Adjust the segment size and set the section offset */
-    Seg->Size  += S->Fill;
-    S->Offs     = Seg->Size;    /* Current size is offset */
-
-    /* Insert the section into the segment */
-    CollAppend (&Seg->Sections, S);
-
-    /* Return the struct */
-    return S;
-}
-
-
-
-Section* ReadSection (FILE* F, ObjData* O)
-/* Read a section from a file */
-{
-    unsigned      Name;
-    unsigned      Size;
-    unsigned long Alignment;
-    unsigned char Type;
-    unsigned      FragCount;
-    Segment*      S;
-    Section*      Sec;
-
-    /* Read the segment data */
-    (void) Read32 (F);          /* File size of data */
-    Name      = MakeGlobalStringId (O, ReadVar (F));    /* Segment name */
-                ReadVar (F);    /* Segment flags (currently unused) */
-    Size      = ReadVar (F);    /* Size of data */
-    Alignment = ReadVar (F);    /* Alignment */
-    Type      = Read8 (F);      /* Segment type */
-    FragCount = ReadVar (F);    /* Number of fragments */
-
-
-    /* Print some data */
-    Print (stdout, 2,
-           "Module `%s': Found segment `%s', size = %u, alignment = %lu, type = %u\n",
-           GetObjFileName (O), GetString (Name), Size, Alignment, Type);
-
-    /* Get the segment for this section */
-    S = GetSegment (Name, Type, GetObjFileName (O));
-
-    /* Allocate the section we will return later */
-    Sec = NewSection (S, Alignment, Type);
-
-    /* Remember the object file this section was from */
-    Sec->Obj = O;
-
-    /* Set up the combined segment alignment */
-    if (Sec->Alignment > 1) {
-        Alignment = LeastCommonMultiple (S->Alignment, Sec->Alignment);
-        if (Alignment > MAX_ALIGNMENT) {
-            Error ("Combined alignment for segment `%s' is %lu which exceeds "
-                   "%lu. Last module requiring alignment was `%s'.",
-                   GetString (Name), Alignment, MAX_ALIGNMENT,
-                   GetObjFileName (O));
-        } else if (Alignment >= LARGE_ALIGNMENT) {
-            Warning ("Combined alignment for segment `%s' is suspiciously "
-                     "large (%lu). Last module requiring alignment was `%s'.",
-                     GetString (Name), Alignment, GetObjFileName (O));
-        }
-        S->Alignment = Alignment;
-    }
-
-    /* Start reading fragments from the file and insert them into the section . */
-    while (FragCount--) {
-
-        Fragment* Frag;
-
-        /* Read the fragment type */
-        unsigned char Type = Read8 (F);
-
-        /* Extract the check mask from the type */
-        unsigned char Bytes = Type & FRAG_BYTEMASK;
-        Type &= FRAG_TYPEMASK;
-
-        /* Handle the different fragment types */
-        switch (Type) {
-
-            case FRAG_LITERAL:
-                Frag = NewFragment (Type, ReadVar (F), Sec);
-                ReadData (F, Frag->LitBuf, Frag->Size);
-                break;
-
-            case FRAG_EXPR:
-            case FRAG_SEXPR:
-                Frag = NewFragment (Type, Bytes, Sec);
-                Frag->Expr = ReadExpr (F, O);
-                break;
-
-            case FRAG_FILL:
-                /* Will allocate memory, but we don't care... */
-                Frag = NewFragment (Type, ReadVar (F), Sec);
-                break;
-
-            default:
-                Error ("Unknown fragment type in module `%s', segment `%s': %02X",
-                       GetObjFileName (O), GetString (S->Name), Type);
-                /* NOTREACHED */
-                return 0;
-        }
-
-        /* Read the line infos into the list of the fragment */
-        ReadLineInfoList (F, O, &Frag->LineInfos);
-
-        /* Remember the module we had this fragment from */
-        Frag->Obj = O;
-    }
-
-    /* Return the section */
-    return Sec;
-}
-
-
-
-Segment* SegFind (unsigned Name)
-/* Return the given segment or NULL if not found. */
-{
-    Segment* S = HashTab[Name & HASHTAB_MASK];
-    while (S) {
-        if (Name == S->Name) {
-            /* Found */
-            break;
-        }
-        S = S->Next;
-    }
-    /* Not found */
-    return S;
-}
-
-
-
-int IsBSSType (Segment* S)
-/* Check if the given segment is a BSS style segment, that is, it does not
-** contain non-zero data.
-*/
-{
-    /* Loop over all sections */
-    unsigned I;
-    for (I = 0; I < CollCount (&S->Sections); ++I) {
-
-        /* Get the next section */
-        Section* Sec = CollAtUnchecked (&S->Sections, I);
-
-        /* Loop over all fragments */
-        Fragment* F = Sec->FragRoot;
-        while (F) {
-            if (F->Type == FRAG_LITERAL) {
-                unsigned char* Data = F->LitBuf;
-                unsigned long Count = F->Size;
-                while (Count--) {
-                    if (*Data++ != 0) {
-                        return 0;
-                    }
-                }
-            } else if (F->Type == FRAG_EXPR || F->Type == FRAG_SEXPR) {
-                if (GetExprVal (F->Expr) != 0) {
-                    return 0;
-                }
-            }
-            F = F->Next;
-        }
-    }
-    return 1;
-}
-
-
-
-void SegDump (void)
-/* Dump the segments and it's contents */
-{
-    unsigned I, J;
-    unsigned long Count;
-    unsigned char* Data;
-
-    for (I = 0; I < CollCount (&SegmentList); ++I) {
-        Segment* Seg = CollAtUnchecked (&SegmentList, I);
-        printf ("Segment: %s (%lu)\n", GetString (Seg->Name), Seg->Size);
-        for (J = 0; J < CollCount (&Seg->Sections); ++J) {
-            Section* S = CollAtUnchecked (&Seg->Sections, J);
-            unsigned J;
-            Fragment* F = S->FragRoot;
-            printf ("  Section:\n");
-            while (F) {
-                switch (F->Type) {
-
-                    case FRAG_LITERAL:
-                        printf ("    Literal (%u bytes):", F->Size);
-                        Count = F->Size;
-                        Data  = F->LitBuf;
-                        J = 100;
-                        while (Count--) {
-                            if (J > 75) {
-                                printf ("\n   ");
-                                J = 3;
-                            }
-                            printf (" %02X", *Data++);
-                            J += 3;
-                        }
-                        printf ("\n");
-                        break;
-
-                    case FRAG_EXPR:
-                        printf ("    Expression (%u bytes):\n", F->Size);
-                        printf ("    ");
-                        DumpExpr (F->Expr, 0);
-                        break;
-
-                    case FRAG_SEXPR:
-                        printf ("    Signed expression (%u bytes):\n", F->Size);
-                        printf ("      ");
-                        DumpExpr (F->Expr, 0);
-                        break;
-
-                    case FRAG_FILL:
-                        printf ("    Empty space (%u bytes)\n", F->Size);
-                        break;
-
-                    default:
-                        Internal ("Invalid fragment type: %02X", F->Type);
-                }
-                F = F->Next;
-            }
-        }
-    }
-}
-
-
-
-unsigned SegWriteConstExpr (FILE* F, ExprNode* E, int Signed, unsigned Size)
-/* Write a supposedly constant expression to the target file. Do a range
-** check and return one of the SEG_EXPR_xxx codes.
-*/
-{
-    static const unsigned long U_Hi[4] = {
-        0x000000FFUL, 0x0000FFFFUL, 0x00FFFFFFUL, 0xFFFFFFFFUL
-    };
-    static const long S_Hi[4] = {
-        0x0000007FL, 0x00007FFFL, 0x007FFFFFL, 0x7FFFFFFFL
-    };
-    static const long S_Lo[4] = {
-        ~0x0000007FL, ~0x00007FFFL, ~0x007FFFFFL, ~0x7FFFFFFFL
-    };
-
-
-    /* Get the expression value */
-    long Val = GetExprVal (E);
-
-    /* Check the size */
-    CHECK (Size >= 1 && Size <= 4);
-
-    /* Check for a range error */
-    if (Signed) {
-        if (Val > S_Hi[Size-1] || Val < S_Lo[Size-1]) {
-            /* Range error */
-            return SEG_EXPR_RANGE_ERROR;
-        }
-    } else {
-        if (((unsigned long)Val) > U_Hi[Size-1]) {
-            /* Range error */
-            return SEG_EXPR_RANGE_ERROR;
-        }
-    }
-
-    /* Write the value to the file */
-    WriteVal (F, Val, Size);
-
-    /* Success */
-    return SEG_EXPR_OK;
-}
-
-
-
-void SegWrite (const char* TgtName, FILE* Tgt, Segment* S, SegWriteFunc F, void* Data)
-/* Write the data from the given segment to a file. For expressions, F is
-** called (see description of SegWriteFunc above).
-*/
-{
-    unsigned      I;
-    int           Sign;
-    unsigned long Offs = 0;
-
-
-    /* Remember the output file and offset for the segment */
-    S->OutputName = TgtName;
-    S->OutputOffs = (unsigned long) ftell (Tgt);
-
-    /* Loop over all sections in this segment */
-    for (I = 0; I < CollCount (&S->Sections); ++I) {
-
-        Section*        Sec = CollAtUnchecked (&S->Sections, I);
-        Fragment*       Frag;
-        unsigned char   FillVal;
-
-        /* Output were this section is from */
-        Print (stdout, 2, "      Section from \"%s\"\n", GetObjFileName (Sec->Obj));
-
-        /* If we have fill bytes, write them now. Beware: If this is the
-        ** first section, the fill value is not considered part of the segment
-        ** and therefore taken from the memory area.
-        */
-        FillVal = (I == 0)? S->MemArea->FillVal : S->FillVal;
-        Print (stdout, 2, "        Filling 0x%lx bytes with 0x%02x\n",
-               Sec->Fill, FillVal);
-        WriteMult (Tgt, FillVal, Sec->Fill);
-        Offs += Sec->Fill;
-
-        /* Loop over all fragments in this section */
-        Frag = Sec->FragRoot;
-        while (Frag) {
-
-            /* Output fragment data */
-            switch (Frag->Type) {
-
-                case FRAG_LITERAL:
-                    WriteData (Tgt, Frag->LitBuf, Frag->Size);
-                    break;
-
-                case FRAG_EXPR:
-                case FRAG_SEXPR:
-                    Sign = (Frag->Type == FRAG_SEXPR);
-                    /* Call the users function and evaluate the result */
-                    switch (F (Frag->Expr, Sign, Frag->Size, Offs, Data)) {
-
-                        case SEG_EXPR_OK:
-                            break;
-
-                        case SEG_EXPR_RANGE_ERROR:
-                            Error ("Range error in module `%s', line %u",
-                                   GetFragmentSourceName (Frag),
-                                   GetFragmentSourceLine (Frag));
-                            break;
-
-                        case SEG_EXPR_TOO_COMPLEX:
-                            Error ("Expression too complex in module `%s', line %u",
-                                   GetFragmentSourceName (Frag),
-                                   GetFragmentSourceLine (Frag));
-                            break;
-
-                        case SEG_EXPR_INVALID:
-                            Error ("Invalid expression in module `%s', line %u",
-                                   GetFragmentSourceName (Frag),
-                                   GetFragmentSourceLine (Frag));
-                            break;
-
-                        default:
-                            Internal ("Invalid return code from SegWriteFunc");
-                    }
-                    break;
-
-                case FRAG_FILL:
-                    WriteMult (Tgt, S->FillVal, Frag->Size);
-                    break;
-
-                default:
-                    Internal ("Invalid fragment type: %02X", Frag->Type);
-            }
-
-            /* Update the offset */
-            Print (stdout, 2, "        Fragment with 0x%x bytes\n",
-                   Frag->Size);
-            Offs += Frag->Size;
-
-            /* Next fragment */
-            Frag = Frag->Next;
-        }
-    }
-}
-
-
-
-unsigned SegmentCount (void)
-/* Return the total number of segments */
-{
-    return CollCount (&SegmentList);
-}
-
-
-
-static int CmpSegStart (const void* K1, const void* K2)
-/* Compare function for qsort */
-{
-    /* Get the real segment pointers */
-    const Segment* S1 = *(const Segment**)K1;
-    const Segment* S2 = *(const Segment**)K2;
-
-    /* Compare the start addresses */
-    if (S1->PC > S2->PC) {
-        return 1;
-    } else if (S1->PC < S2->PC) {
-        return -1;
-    } else {
-        /* Sort segments with equal starts by name */
-        return strcmp (GetString (S1->Name), GetString (S2->Name));
-    }
-}
-
-
-
-void PrintSegmentMap (FILE* F)
-/* Print a segment map to the given file */
-{
-
-    /* Allocate memory for the segment pool */
-    Segment** SegPool = xmalloc (CollCount (&SegmentList) * sizeof (Segment*));
-
-    /* Copy the segment pointers */
-    unsigned I;
-    for (I = 0; I < CollCount (&SegmentList); ++I) {
-        SegPool[I] = CollAtUnchecked (&SegmentList, I);
-    }
-
-    /* Sort the array by increasing start addresses */
-    qsort (SegPool, CollCount (&SegmentList), sizeof (Segment*), CmpSegStart);
-
-    /* Print a header */
-    fprintf (F, "Name                   Start     End    Size  Align\n"
-                "----------------------------------------------------\n");
-
-    /* Print the segments */
-    for (I = 0; I < CollCount (&SegmentList); ++I) {
-
-        /* Get a pointer to the segment */
-        Segment* S = SegPool[I];
-
-        /* Print empty segments only if explicitly requested */
-        if (VerboseMap || S->Size > 0) {
-            /* Print the segment data */
-            long End = S->PC + S->Size;
-            if (S->Size > 0) {
-                /* Point to last element addressed */
-                --End;
-            }
-            fprintf (F, "%-20s  %06lX  %06lX  %06lX  %05lX\n",
-                     GetString (S->Name), S->PC, End, S->Size, S->Alignment);
-        }
-    }
-
-    /* Free the segment pool */
-    xfree (SegPool);
-}
-
-
-
-void PrintDbgSegments (FILE* F)
-/* Output the segments to the debug file */
-{
-    /* Walk over all segments */
-    unsigned I;
-    for (I = 0; I < CollCount (&SegmentList); ++I) {
-
-        /* Get the next segment */
-        const Segment* S = CollAtUnchecked (&SegmentList, I);
-
-        /* Print the segment data */
-        fprintf (F,
-                 "seg\tid=%u,name=\"%s\",start=0x%06lX,size=0x%04lX,addrsize=%s,type=%s",
-                 S->Id, GetString (S->Name), S->PC, S->Size,
-                 AddrSizeToStr (S->AddrSize),
-                 S->ReadOnly? "ro" : "rw");
-        if (S->OutputName) {
-            fprintf (F, ",oname=\"%s\",ooffs=%lu",
-                     S->OutputName, S->OutputOffs);
-        }
-        fputc ('\n', F);
-    }
-}
-
-
-
-void CheckSegments (void)
-/* Walk through the segment list and check if there are segments that were
-** not written to the output file. Output an error if this is the case.
-*/
-{
-    unsigned I;
-    for (I = 0; I < CollCount (&SegmentList); ++I) {
-
-        /* Get the next segment */
-        const Segment* S = CollAtUnchecked (&SegmentList, I);
-
-        /* Check it */
-        if (S->Size > 0 && S->Dumped == 0) {
-            Error ("Missing memory area assignment for segment `%s'",
-                   GetString (S->Name));
-        }
-    }
-}
diff --git a/src/ld65/segments.h b/src/ld65/segments.h
deleted file mode 100644 (file)
index dc1e61d..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                segments.h                                 */
-/*                                                                           */
-/*                   Segment handling for the ld65 linker                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SEGMENTS_H
-#define SEGMENTS_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "coll.h"
-#include "exprdefs.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Forwards */
-struct MemoryArea;
-
-/* Segment structure */
-typedef struct Segment Segment;
-struct Segment {
-    unsigned            Name;           /* Name index of the segment */
-    unsigned            Id;             /* Segment id for debug info */
-    Segment*            Next;           /* Hash list */
-    unsigned            Flags;          /* Segment flags */
-    Collection          Sections;       /* Sections in this segment */
-    struct MemoryArea*  MemArea;        /* Run memory area once placed */
-    unsigned long       PC;             /* PC were this segment is located */
-    unsigned long       Size;           /* Size of data so far */
-    const char*         OutputName;     /* Name of output file or NULL */
-    unsigned long       OutputOffs;     /* Offset in output file */
-    unsigned long       Alignment;      /* Alignment needed */
-    unsigned char       FillVal;        /* Value to use for fill bytes */
-    unsigned char       AddrSize;       /* Address size of segment */
-    unsigned char       ReadOnly;       /* True for readonly segments (config) */
-    unsigned char       Dumped;         /* Did we dump this segment? */
-};
-
-
-
-/* Section structure (a section is a part of a segment) */
-typedef struct Section Section;
-struct Section {
-    Section*            Next;           /* List of sections in a segment */
-    Segment*            Seg;            /* Segment that contains the section */
-    struct ObjData*     Obj;            /* Object file this section comes from */
-    struct Fragment*    FragRoot;       /* Fragment list */
-    struct Fragment*    FragLast;       /* Pointer to last fragment */
-    unsigned long       Offs;           /* Offset into the segment */
-    unsigned long       Size;           /* Size of the section */
-    unsigned long       Fill;           /* Fill bytes for alignment */
-    unsigned long       Alignment;      /* Alignment */
-    unsigned char       AddrSize;       /* Address size of segment */
-};
-
-
-
-/* Prototype for a function that is used to write expressions to the target
-** file (used in SegWrite). It returns one of the following values:
-*/
-#define SEG_EXPR_OK             0U      /* Ok */
-#define SEG_EXPR_RANGE_ERROR    1U      /* Range error */
-#define SEG_EXPR_TOO_COMPLEX    2U      /* Expression too complex */
-#define SEG_EXPR_INVALID        3U      /* Expression is invalid (e.g. unmapped segment) */
-
-typedef unsigned (*SegWriteFunc) (ExprNode* E,        /* The expression to write */
-                                  int Signed,         /* Signed expression? */
-                                  unsigned Size,      /* Size (=range) */
-                                  unsigned long Offs, /* File offset */
-                                  void* Data);        /* Callers data */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Segment* GetSegment (unsigned Name, unsigned char AddrSize, const char* ObjName);
-/* Search for a segment and return an existing one. If the segment does not
-** exist, create a new one and return that. ObjName is only used for the error
-** message and may be NULL if the segment is linker generated.
-*/
-
-Section* NewSection (Segment* Seg, unsigned long Alignment, unsigned char AddrSize);
-/* Create a new section for the given segment */
-
-Section* ReadSection (FILE* F, struct ObjData* O);
-/* Read a section from a file */
-
-Segment* SegFind (unsigned Name);
-/* Return the given segment or NULL if not found. */
-
-int IsBSSType (Segment* S);
-/* Check if the given segment is a BSS style segment, that is, it does not
-** contain non-zero data.
-*/
-
-void SegDump (void);
-/* Dump the segments and it's contents */
-
-unsigned SegWriteConstExpr (FILE* F, ExprNode* E, int Signed, unsigned Size);
-/* Write a supposedly constant expression to the target file. Do a range
-** check and return one of the SEG_EXPR_xxx codes.
-*/
-
-void SegWrite (const char* TgtName, FILE* Tgt, Segment* S, SegWriteFunc F, void* Data);
-/* Write the data from the given segment to a file. For expressions, F is
-** called (see description of SegWriteFunc above).
-*/
-
-unsigned SegmentCount (void);
-/* Return the total number of segments */
-
-void PrintSegmentMap (FILE* F);
-/* Print a segment map to the given file */
-
-void PrintDbgSegments (FILE* F);
-/* Output the segments to the debug file */
-
-void CheckSegments (void);
-/* Walk through the segment list and check if there are segments that were
-** not written to the output file. Output an error if this is the case.
-*/
-
-
-
-/* End of segments.h */
-
-#endif
diff --git a/src/ld65/span.c b/src/ld65/span.c
deleted file mode 100644 (file)
index 498ab76..0000000
+++ /dev/null
@@ -1,247 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  span.c                                   */
-/*                                                                           */
-/*                      A span of data within a segment                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2011,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "gentype.h"
-#include "xmalloc.h"
-
-/* ld65 */
-#include "fileio.h"
-#include "objdata.h"
-#include "segments.h"
-#include "span.h"
-#include "tpool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Definition of a span */
-struct Span {
-    unsigned            Id;             /* Id of the span */
-    unsigned            Sec;            /* Section id of this span */
-    unsigned long       Offs;           /* Offset of span within segment */
-    unsigned long       Size;           /* Size of span */
-    unsigned            Type;           /* Generic type of the data */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static Span* NewSpan (unsigned Id)
-/* Create and return a new span */
-{
-    /* Allocate memory */
-    Span* S = xmalloc (sizeof (Span));
-
-    /* Initialize the fields as necessary */
-    S->Id       = Id;
-
-    /* Return the result */
-    return S;
-}
-
-
-
-Span* ReadSpan (FILE* F, ObjData* O, unsigned Id)
-/* Read a Span from a file and return it */
-{
-    unsigned Type;
-
-    /* Create a new Span and initialize it */
-    Span* S = NewSpan (Id);
-    S->Sec  = ReadVar (F);
-    S->Offs = ReadVar (F);
-    S->Size = ReadVar (F);
-
-    /* Read the type. An id of zero means an empty string (no need to check) */
-    Type    = ReadVar (F);
-    if (Type == 0) {
-        S->Type = INVALID_TYPE_ID;
-    } else {
-        S->Type = GetTypeId (GetObjString (O, Type));
-    }
-
-    /* Return the new span */
-    return S;
-}
-
-
-
-unsigned* ReadSpanList (FILE* F)
-/* Read a list of span ids from a file. The list is returned as an array of
-** unsigneds, the first being the number of spans (never zero) followed by
-** the span ids. If the number of spans is zero, NULL is returned.
-*/
-{
-    unsigned* Spans;
-
-    /* First is number of Spans */
-    unsigned Count = ReadVar (F);
-    if (Count == 0) {
-        return 0;
-    }
-
-    /* Allocate memory for the list and set the count */
-    Spans  = xmalloc ((Count + 1) * sizeof (*Spans));
-    *Spans = Count;
-
-    /* Read the spans and add them */
-    while (Count) {
-        Spans[Count] = ReadVar (F);
-        --Count;
-    }
-
-    /* Return the list */
-    return Spans;
-}
-
-
-
-unsigned* DupSpanList (const unsigned* S)
-/* Duplicate a span list */
-{
-    unsigned Size;
-
-    /* The list may be empty */
-    if (S == 0) {
-        return 0;
-    }
-
-    /* Allocate memory, copy and return the new list */
-    Size = (*S + 1) * sizeof (*S);
-    return memcpy (xmalloc (Size), S, Size);
-}
-
-
-
-void FreeSpan (Span* S)
-/* Free a span structure */
-{
-    /* Just free the structure */
-    xfree (S);
-}
-
-
-
-unsigned SpanCount (void)
-/* Return the total number of spans */
-{
-    /* Walk over all object files */
-    unsigned I;
-    unsigned Count = 0;
-    for (I = 0; I < CollCount (&ObjDataList); ++I) {
-
-        /* Get this object file */
-        const ObjData* O = CollAtUnchecked (&ObjDataList, I);
-
-        /* Count spans */
-        Count += CollCount (&O->Spans);
-    }
-
-    return Count;
-}
-
-
-
-void PrintDbgSpanList (FILE* F, const ObjData* O, const unsigned* List)
-/* Output a string ",span=x[+y...]" for the given list. If the list is empty
-** or NULL, output nothing. This is a helper function for other modules to
-** print a list of spans read by ReadSpanList to the debug info file.
-*/
-{
-    if (List && *List) {
-        unsigned I;
-        const char* Format = ",span=%u";
-        for (I = 0; I < *List; ++I) {
-            fprintf (F, Format, O->SpanBaseId + List[I+1]);
-            Format = "+%u";
-        }
-    }
-}
-
-
-
-void PrintDbgSpans (FILE* F)
-/* Output the spans to a debug info file */
-{
-    unsigned I, J;
-    StrBuf SpanType = STATIC_STRBUF_INITIALIZER;
-
-
-    /* Walk over all object files */
-    for (I = 0; I < CollCount (&ObjDataList); ++I) {
-
-        /* Get this object file */
-        ObjData* O = CollAtUnchecked (&ObjDataList, I);
-
-        /* Walk over all spans in this object file */
-        for (J = 0; J < CollCount (&O->Spans); ++J) {
-
-            /* Get this span */
-            const Span* S = CollAtUnchecked (&O->Spans, J);
-
-            /* Get the section for this span */
-            const Section* Sec = GetObjSection (O, S->Sec);
-
-            /* Output the data */
-            fprintf (F, "span\tid=%u,seg=%u,start=%lu,size=%lu",
-                     O->SpanBaseId + S->Id,
-                     Sec->Seg->Id,
-                     Sec->Offs + S->Offs,
-                     S->Size);
-
-            /* If we have a type, add it */
-            if (S->Type != INVALID_TYPE_ID) {
-                fprintf (F, ",type=%u", S->Type);
-            }
-
-            /* Terminate the output line */
-            fputc ('\n', F);
-        }
-    }
-
-    /* Free the string buffer */
-    SB_Done (&SpanType);
-}
diff --git a/src/ld65/span.h b/src/ld65/span.h
deleted file mode 100644 (file)
index 67ac84e..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  span.h                                   */
-/*                                                                           */
-/*                      A span of data within a segment                      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2011,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SPAN_H
-#define SPAN_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "coll.h"
-
-
-
-/*****************************************************************************/
-/*                                 Forwards                                  */
-/*****************************************************************************/
-
-
-
-struct ObjData;
-struct Segment;
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Span is an opaque type */
-typedef struct Span Span;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Span* ReadSpan (FILE* F, struct ObjData* O, unsigned Id);
-/* Read a Span from a file and return it */
-
-unsigned* ReadSpanList (FILE* F);
-/* Read a list of span ids from a file. The list is returned as an array of
-** unsigneds, the first being the number of spans (never zero) followed by
-** the span ids. If the number of spans is zero, NULL is returned.
-*/
-
-unsigned* DupSpanList (const unsigned* S);
-/* Duplicate a span list */
-
-void FreeSpan (Span* S);
-/* Free a span structure */
-
-unsigned SpanCount (void);
-/* Return the total number of spans */
-
-void PrintDbgSpanList (FILE* F, const struct ObjData* O, const unsigned* List);
-/* Output a string ",span=x[+y...]" for the given list. If the list is empty
-** or NULL, output nothing. This is a helper function for other modules to
-** print a list of spans read by ReadSpanList to the debug info file.
-*/
-
-void PrintDbgSpans (FILE* F);
-/* Output the spans to a debug info file */
-
-
-
-/* End of span.h */
-
-#endif
diff --git a/src/ld65/spool.c b/src/ld65/spool.c
deleted file mode 100644 (file)
index 2b4f1ad..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  spool.c                                  */
-/*                                                                           */
-/*                  Id and message pool for the ld65 linker                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* ld65 */
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-StringPool* StrPool = 0;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void InitStrPool (void)
-/* Initialize the string pool */
-{
-    /* Allocate a string pool */
-    StrPool = NewStringPool (1103);
-
-    /* We insert a first string here, which will have id zero. This means
-    ** that we can treat index zero later as invalid.
-    */
-    SP_AddStr (StrPool, "<invalid message #0>");
-}
diff --git a/src/ld65/spool.h b/src/ld65/spool.h
deleted file mode 100644 (file)
index e376c5f..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  spool.h                                  */
-/*                                                                           */
-/*                  Id and message pool for the ld65 linker                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef SPOOL_H
-#define SPOOL_H
-
-
-
-/* common */
-#include "strpool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* An invalid message index */
-#define INVALID_STRING_ID       0U
-
-/* The string pool we're using */
-extern StringPool* StrPool;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-#if defined(HAVE_INLINE)
-INLINE unsigned GetStrBufId (const StrBuf* S)
-/* Return the id of the given string buffer */
-{
-    return SP_Add (StrPool, S);
-}
-#else
-#  define GetStrBufId(S)        SP_Add (StrPool, (S))
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned GetStringId (const char* S)
-/* Return the id of the given string */
-{
-    return SP_AddStr (StrPool, S);
-}
-#else
-#  define GetStringId(S)        SP_AddStr (StrPool, (S))
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE const StrBuf* GetStrBuf (unsigned Index)
-/* Convert a string index into a string */
-{
-    return SP_Get (StrPool, Index);
-}
-#else
-#  define GetStrBuf(Index)      SP_Get (StrPool, (Index))
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE const char* GetString (unsigned Index)
-/* Convert a string index into a string */
-{
-    return SB_GetConstBuf (SP_Get (StrPool, Index));
-}
-#else
-#  define GetString(Index)      SB_GetConstBuf (SP_Get (StrPool, (Index)))
-#endif
-
-void InitStrPool (void);
-/* Initialize the string pool */
-
-
-
-/* End of spool.h */
-
-#endif
diff --git a/src/ld65/tpool.c b/src/ld65/tpool.c
deleted file mode 100644 (file)
index e6006e4..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  tpool.c                                  */
-/*                                                                           */
-/*                          Pool for generic types                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2011,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "gentype.h"
-
-/* ld65 */
-#include "tpool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* The string pool we're using */
-StringPool* TypePool = 0;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void PrintDbgTypes (FILE* F)
-/* Output the types to a debug info file */
-{
-    StrBuf Type = STATIC_STRBUF_INITIALIZER;
-
-    /* Get the number of strings in the type pool */
-    unsigned Count = SP_GetCount (TypePool);
-
-    /* Output all of them */
-    unsigned Id;
-    for (Id = 0; Id < Count; ++Id) {
-
-        /* Output it */
-        fprintf (F, "type\tid=%u,val=\"%s\"\n", Id,
-                 GT_AsString (SP_Get (TypePool, Id), &Type));
-
-    }
-
-    /* Free the memory for the temporary string */
-    SB_Done (&Type);
-}
-
-
-
-void InitTypePool (void)
-/* Initialize the type pool */
-{
-    /* Allocate a type pool */
-    TypePool = NewStringPool (137);
-}
diff --git a/src/ld65/tpool.h b/src/ld65/tpool.h
deleted file mode 100644 (file)
index c054087..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  tpool.h                                  */
-/*                                                                           */
-/*                          Pool for generic types                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2011,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef TPOOL_H
-#define TPOOL_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "strpool.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* An invalid type */
-#define INVALID_TYPE_ID   (~0U)
-
-/* The string pool we're using */
-extern StringPool* TypePool;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-#if defined(HAVE_INLINE)
-INLINE unsigned GetTypeId (const StrBuf* Type)
-/* Return the id of the given generic type */
-{
-    return SP_Add (TypePool, Type);
-}
-#else
-#  define GetTypeId(Type)       SP_Add (TypePool, (Type))
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE const StrBuf* GetType (unsigned Index)
-/* Convert a type index into a type string */
-{
-    return SP_Get (TypePool, Index);
-}
-#else
-#  define GetType(Index)        SP_Get (TypePool, (Index))
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned TypeCount (void)
-/* Return the number of types in the pool */
-{
-    return SP_GetCount (TypePool);
-}
-#else
-#  define TypeCount()   SP_GetCount (TypePool)
-#endif
-
-void PrintDbgTypes (FILE* F);
-/* Output the types to a debug info file */
-
-void InitTypePool (void);
-/* Initialize the type pool */
-
-
-
-/* End of tpool.h */
-
-#endif
diff --git a/src/od65.vcxproj b/src/od65.vcxproj
deleted file mode 100644 (file)
index c788ac9..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{FF8576C2-1253-44FE-A51B-D9AE35F3CEAD}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>od65</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>false</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="od65\dump.c" />
-    <ClCompile Include="od65\error.c" />
-    <ClCompile Include="od65\fileio.c" />
-    <ClCompile Include="od65\global.c" />
-    <ClCompile Include="od65\main.c" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="od65\dump.h" />
-    <ClInclude Include="od65\error.h" />
-    <ClInclude Include="od65\fileio.h" />
-    <ClInclude Include="od65\global.h" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/src/od65/dump.c b/src/od65/dump.c
deleted file mode 100644 (file)
index 2f538fe..0000000
+++ /dev/null
@@ -1,953 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  dump.c                                   */
-/*                                                                           */
-/*          Dump subroutines for the od65 object file dump utility           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-#include <time.h>
-
-/* common */
-#include "addrsize.h"
-#include "cddefs.h"
-#include "coll.h"
-#include "exprdefs.h"
-#include "filepos.h"
-#include "lidefs.h"
-#include "objdefs.h"
-#include "optdefs.h"
-#include "scopedefs.h"
-#include "symdefs.h"
-#include "xmalloc.h"
-
-/* od65 */
-#include "error.h"
-#include "fileio.h"
-#include "dump.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void DestroyStrPool (Collection* C)
-/* Free all strings in the given pool plus the item pointers. Note: The
-** collection may not be reused later.
-*/
-{
-    unsigned I;
-    for (I = 0; I < CollCount (C); ++I) {
-        xfree (CollAtUnchecked (C, I));
-    }
-    DoneCollection (C);
-}
-
-
-
-static const char* GetString (const Collection* C, unsigned Index)
-/* Get a string from a collection. In fact, this function calls CollConstAt,
-** but will print a somewhat more readable error message if the index is out
-** of bounds.
-*/
-{
-    if (Index >= CollCount (C)) {
-        Error ("Invalid string index (%u) - file corrupt!", Index);
-    }
-    return CollConstAt (C, Index);
-}
-
-
-
-static void DumpObjHeaderSection (const char* Name,
-                                  unsigned long Offset,
-                                  unsigned long Size)
-/* Dump a header section */
-{
-    printf ("    %s:\n", Name);
-    printf ("      Offset:%24lu\n", Offset);
-    printf ("      Size:  %24lu\n", Size);
-}
-
-
-
-static char* TimeToStr (unsigned long Time)
-/* Convert the time into a string and return it */
-{
-    /* Get the time and convert to string */
-    time_t T = (time_t) Time;
-    char*  S = asctime (localtime (&T));
-
-    /* Remove the trailing newline */
-    unsigned Len = strlen (S);
-    if (Len > 0 && S[Len-1] == '\n') {
-        S[Len-1 ] = '\0';
-    }
-
-    /* Return the time string */
-    return S;
-}
-
-
-
-static void SkipLineInfoList (FILE* F)
-/* Skip a line info list from the given file */
-{
-    /* Count preceeds the list */
-    unsigned long Count = ReadVar (F);
-
-    /* Skip indices */
-    while (Count--) {
-        (void) ReadVar (F);
-    }
-}
-
-
-
-static void SkipSpanList (FILE* F)
-/* Skip a span list from the given file */
-{
-    /* Count preceeds the list */
-    unsigned long Count = ReadVar (F);
-
-    /* Skip indices */
-    while (Count--) {
-        (void) ReadVar (F);
-    }
-}
-
-
-
-static void SkipExpr (FILE* F)
-/* Skip an expression from the given file */
-{
-    /* Read the node tag and handle NULL nodes */
-    unsigned char Op = Read8 (F);
-    if (Op == EXPR_NULL) {
-        return;
-    }
-
-    /* Check the tag and handle the different expression types */
-    if (EXPR_IS_LEAF (Op)) {
-        switch (Op) {
-
-            case EXPR_LITERAL:
-                (void) Read32Signed (F);
-                break;
-
-            case EXPR_SYMBOL:
-                /* Read the import number */
-                (void) ReadVar (F);
-                break;
-
-            case EXPR_SECTION:
-            case EXPR_BANK:
-                /* Read the segment number */
-                (void) ReadVar (F);
-                break;
-
-            default:
-                Error ("Invalid expression op: %02X", Op);
-
-        }
-
-    } else {
-
-        /* Not a leaf node */
-        SkipExpr (F);
-        SkipExpr (F);
-    }
-}
-
-
-
-static const char* GetExportFlags (unsigned Flags, const unsigned char* ConDes)
-/* Get the export flags as a (static) string */
-{
-    /* Static buffer */
-    static char TypeDesc[256];
-    static char* T;
-
-    unsigned Count;
-    unsigned I;
-
-    /* Symbol type */
-    TypeDesc[0] = '\0';
-    switch (Flags & SYM_MASK_TYPE) {
-        case SYM_STD:         strcat (TypeDesc, "SYM_STD");         break;
-        case SYM_CHEAP_LOCAL: strcat (TypeDesc, "SYM_CHEAP_LOCAL"); break;
-    }
-
-    /* Symbol usage */
-    switch (Flags & SYM_MASK_LABEL) {
-        case SYM_EQUATE: strcat (TypeDesc, ",SYM_EQUATE"); break;
-        case SYM_LABEL:  strcat (TypeDesc, ",SYM_LABEL");  break;
-    }
-
-    /* Type of expression */
-    switch (Flags & SYM_MASK_VAL) {
-        case SYM_CONST: strcat (TypeDesc, ",SYM_CONST"); break;
-        case SYM_EXPR:  strcat (TypeDesc, ",SYM_EXPR");   break;
-    }
-
-    /* Size available? */
-    if (SYM_HAS_SIZE (Flags)) {
-        strcat (TypeDesc, ",SYM_SIZE");
-    }
-
-
-    /* Constructor/destructor declarations */
-    T = TypeDesc + strlen (TypeDesc);
-    Count = SYM_GET_CONDES_COUNT (Flags);
-    if (Count > 0 && ConDes) {
-        T += sprintf (T, ",SYM_CONDES=");
-        for (I = 0; I < Count; ++I) {
-            unsigned Type = CD_GET_TYPE (ConDes[I]);
-            unsigned Prio = CD_GET_PRIO (ConDes[I]);
-            if (I > 0) {
-                *T++ = ',';
-            }
-            T += sprintf (T, "[%u,%u]", Type, Prio);
-        }
-    }
-
-    /* Return the result */
-    return TypeDesc;
-}
-
-
-
-static const char* GetScopeType (unsigned Type)
-/* Return the name of a scope type */
-{
-    switch (Type) {
-        case SCOPE_GLOBAL:      return "Global scope";
-        case SCOPE_FILE:        return "File scope";
-        case SCOPE_SCOPE:       return ".SCOPE or .PROC";
-        case SCOPE_STRUCT:      return ".STRUCT";
-        case SCOPE_ENUM:        return ".ENUM";
-        case SCOPE_UNDEF:       return "Undefined";
-        default:                return "Unknown scope type";
-    }
-}
-
-
-
-void DumpObjHeader (FILE* F, unsigned long Offset)
-/* Dump the header of the given object file */
-{
-    ObjHeader H;
-
-    /* Seek to the header position */
-    FileSetPos (F, Offset);
-
-    /* Read the header */
-    ReadObjHeader (F, &H);
-
-    /* Now dump the information */
-
-    /* Output a header */
-    printf ("  Header:\n");
-
-    /* Magic */
-    printf ("    Magic:%17s0x%08lX\n", "", H.Magic);
-
-    /* Version */
-    printf ("    Version:%25u\n", H.Version);
-
-    /* Flags */
-    printf ("    Flags:%21s0x%04X  (", "", H.Flags);
-    if (H.Flags & OBJ_FLAGS_DBGINFO) {
-        printf ("OBJ_FLAGS_DBGINFO");
-    }
-    printf (")\n");
-
-    /* Options */
-    DumpObjHeaderSection ("Options", H.OptionOffs, H.OptionSize);
-
-    /* Files */
-    DumpObjHeaderSection ("Files", H.FileOffs, H.FileSize);
-
-    /* Segments */
-    DumpObjHeaderSection ("Segments", H.SegOffs, H.SegSize);
-
-    /* Imports */
-    DumpObjHeaderSection ("Imports", H.ImportOffs, H.ImportSize);
-
-    /* Exports */
-    DumpObjHeaderSection ("Exports", H.ExportOffs, H.ExportSize);
-
-    /* Debug symbols */
-    DumpObjHeaderSection ("Debug symbols", H.DbgSymOffs, H.DbgSymSize);
-
-    /* Line infos */
-    DumpObjHeaderSection ("Line infos", H.LineInfoOffs, H.LineInfoSize);
-
-    /* String pool */
-    DumpObjHeaderSection ("String pool", H.StrPoolOffs, H.StrPoolSize);
-
-    /* Assertions */
-    DumpObjHeaderSection ("Assertions", H.AssertOffs, H.AssertSize);
-
-    /* Scopes */
-    DumpObjHeaderSection ("Scopes", H.ScopeOffs, H.ScopeSize);
-}
-
-
-
-void DumpObjOptions (FILE* F, unsigned long Offset)
-/* Dump the file options */
-{
-    ObjHeader  H;
-    Collection StrPool = AUTO_COLLECTION_INITIALIZER;
-    unsigned   Count;
-    unsigned   I;
-
-    /* Seek to the header position and read the header */
-    FileSetPos (F, Offset);
-    ReadObjHeader (F, &H);
-
-    /* Seek to the start of the string pool and read it */
-    FileSetPos (F, Offset + H.StrPoolOffs);
-    ReadStrPool (F, &StrPool);
-
-    /* Seek to the start of the options */
-    FileSetPos (F, Offset + H.OptionOffs);
-
-    /* Output a header */
-    printf ("  Options:\n");
-
-    /* Read the number of options and print it */
-    Count = ReadVar (F);
-    printf ("    Count:%27u\n", Count);
-
-    /* Read and print all options */
-    for (I = 0; I < Count; ++I) {
-
-        const char*   ArgStr;
-        unsigned      ArgLen;
-
-        /* Read the type of the option and the value */
-        unsigned char Type = Read8 (F);
-        unsigned long Val  = ReadVar (F);
-
-        /* Get the type of the argument */
-        unsigned char ArgType = Type & OPT_ARGMASK;
-
-        /* Determine which option follows */
-        const char* TypeDesc;
-        switch (Type) {
-            case OPT_COMMENT:   TypeDesc = "OPT_COMMENT";       break;
-            case OPT_AUTHOR:    TypeDesc = "OPT_AUTHOR";        break;
-            case OPT_TRANSLATOR:TypeDesc = "OPT_TRANSLATOR";    break;
-            case OPT_COMPILER:  TypeDesc = "OPT_COMPILER";      break;
-            case OPT_OS:        TypeDesc = "OPT_OS";            break;
-            case OPT_DATETIME:  TypeDesc = "OPT_DATETIME";      break;
-            default:            TypeDesc = "OPT_UNKNOWN";       break;
-        }
-
-        /* Print the header */
-        printf ("    Index:%27u\n", I);
-
-        /* Print the data */
-        printf ("      Type:%22s0x%02X  (%s)\n", "", Type, TypeDesc);
-        switch (ArgType) {
-
-            case OPT_ARGSTR:
-                ArgStr = GetString (&StrPool, Val);
-                ArgLen = strlen (ArgStr);
-                printf ("      Data:%*s\"%s\"\n", (int)(24-ArgLen), "", ArgStr);
-                break;
-
-            case OPT_ARGNUM:
-                printf ("      Data:%26lu", Val);
-                if (Type == OPT_DATETIME) {
-                    /* Print the time as a string */
-                    printf ("  (%s)", TimeToStr (Val));
-                }
-                printf ("\n");
-                break;
-
-            default:
-                /* Unknown argument type. This means that we cannot determine
-                ** the option length, so we cannot proceed.
-                */
-                Error ("Unknown option type: 0x%02X", Type);
-                break;
-        }
-    }
-
-    /* Destroy the string pool */
-    DestroyStrPool (&StrPool);
-}
-
-
-
-void DumpObjFiles (FILE* F, unsigned long Offset)
-/* Dump the source files */
-{
-    ObjHeader  H;
-    Collection StrPool = AUTO_COLLECTION_INITIALIZER;
-    unsigned   Count;
-    unsigned   I;
-
-    /* Seek to the header position and read the header */
-    FileSetPos (F, Offset);
-    ReadObjHeader (F, &H);
-
-    /* Seek to the start of the string pool and read it */
-    FileSetPos (F, Offset + H.StrPoolOffs);
-    ReadStrPool (F, &StrPool);
-
-    /* Seek to the start of the source files */
-    FileSetPos (F, Offset + H.FileOffs);
-
-    /* Output a header */
-    printf ("  Files:\n");
-
-    /* Read the number of files and print it */
-    Count = ReadVar (F);
-    printf ("    Count:%27u\n", Count);
-
-    /* Read and print all files */
-    for (I = 0; I < Count; ++I) {
-
-        /* Read the data for one file */
-        const char*   Name  = GetString (&StrPool, ReadVar (F));
-        unsigned long MTime = Read32 (F);
-        unsigned long Size  = ReadVar (F);
-        unsigned      Len   = strlen (Name);
-
-        /* Print the header */
-        printf ("    Index:%27u\n", I);
-
-        /* Print the data */
-        printf ("      Name:%*s\"%s\"\n", (int)(24-Len), "", Name);
-        printf ("      Size:%26lu\n", Size);
-        printf ("      Modification time:%13lu  (%s)\n", MTime, TimeToStr (MTime));
-    }
-
-    /* Destroy the string pool */
-    DestroyStrPool (&StrPool);
-}
-
-
-
-void DumpObjSegments (FILE* F, unsigned long Offset)
-/* Dump the segments in the object file */
-{
-    ObjHeader  H;
-    Collection StrPool = AUTO_COLLECTION_INITIALIZER;
-    unsigned   Count;
-    unsigned   I;
-
-    /* Seek to the header position and read the header */
-    FileSetPos (F, Offset);
-    ReadObjHeader (F, &H);
-
-    /* Seek to the start of the string pool and read it */
-    FileSetPos (F, Offset + H.StrPoolOffs);
-    ReadStrPool (F, &StrPool);
-
-    /* Seek to the start of the segments */
-    FileSetPos (F, Offset + H.SegOffs);
-
-    /* Output a header */
-    printf ("  Segments:\n");
-
-    /* Read the number of segments and print it */
-    Count = ReadVar (F);
-    printf ("    Count:%27u\n", Count);
-
-    /* Read and print all segments */
-    for (I = 0; I < Count; ++I) {
-
-        /* Read the data for one segments */
-        unsigned long DataSize  = Read32 (F);
-        unsigned long NextSeg   = ftell (F) + DataSize;
-        const char*   Name      = GetString (&StrPool, ReadVar (F));
-        unsigned      Len       = strlen (Name);
-        unsigned      Flags     = ReadVar (F);
-        unsigned long Size      = ReadVar (F);
-        unsigned long Align     = ReadVar (F);
-        unsigned char AddrSize  = Read8 (F);
-        unsigned long FragCount = ReadVar (F);
-
-        /* Print the header */
-        printf ("    Index:%27u\n", I);
-
-        /* Print the data */
-        printf ("      Name:%*s\"%s\"\n", (int)(24-Len), "", Name);
-        printf ("      Flags:%25u\n", Flags);
-        printf ("      Size:%26lu\n", Size);
-        printf ("      Alignment:%21lu\n", Align);
-        printf ("      Address size:%14s0x%02X  (%s)\n", "", AddrSize,
-                AddrSizeToStr (AddrSize));
-        printf ("      Fragment count:%16lu\n", FragCount);
-
-        /* Seek to the end of the segment data (start of next) */
-        FileSetPos (F, NextSeg);
-    }
-
-    /* Destroy the string pool */
-    DestroyStrPool (&StrPool);
-}
-
-
-
-void DumpObjImports (FILE* F, unsigned long Offset)
-/* Dump the imports in the object file */
-{
-    ObjHeader  H;
-    Collection StrPool = AUTO_COLLECTION_INITIALIZER;
-    unsigned   Count;
-    unsigned   I;
-
-    /* Seek to the header position and read the header */
-    FileSetPos (F, Offset);
-    ReadObjHeader (F, &H);
-
-    /* Seek to the start of the string pool and read it */
-    FileSetPos (F, Offset + H.StrPoolOffs);
-    ReadStrPool (F, &StrPool);
-
-    /* Seek to the start of the imports */
-    FileSetPos (F, Offset + H.ImportOffs);
-
-    /* Output a header */
-    printf ("  Imports:\n");
-
-    /* Read the number of imports and print it */
-    Count = ReadVar (F);
-    printf ("    Count:%27u\n", Count);
-
-    /* Read and print all imports */
-    for (I = 0; I < Count; ++I) {
-
-        /* Read the data for one import */
-        unsigned char AddrSize = Read8 (F);
-        const char*   Name     = GetString (&StrPool, ReadVar (F));
-        unsigned      Len      = strlen (Name);
-
-        /* Skip both line info lists */
-        SkipLineInfoList (F);
-        SkipLineInfoList (F);
-
-        /* Print the header */
-        printf ("    Index:%27u\n", I);
-
-        /* Print the data */
-        printf ("      Address size:%14s0x%02X  (%s)\n", "", AddrSize,
-                AddrSizeToStr (AddrSize));
-        printf ("      Name:%*s\"%s\"\n", (int)(24-Len), "", Name);
-    }
-
-    /* Destroy the string pool */
-    DestroyStrPool (&StrPool);
-}
-
-
-
-void DumpObjExports (FILE* F, unsigned long Offset)
-/* Dump the exports in the object file */
-{
-    ObjHeader   H;
-    Collection  StrPool = AUTO_COLLECTION_INITIALIZER;
-    unsigned    Count;
-    unsigned    I;
-
-    /* Seek to the header position and read the header */
-    FileSetPos (F, Offset);
-    ReadObjHeader (F, &H);
-
-    /* Seek to the start of the string pool and read it */
-    FileSetPos (F, Offset + H.StrPoolOffs);
-    ReadStrPool (F, &StrPool);
-
-    /* Seek to the start of the exports */
-    FileSetPos (F, Offset + H.ExportOffs);
-
-    /* Output a header */
-    printf ("  Exports:\n");
-
-    /* Read the number of exports and print it */
-    Count = ReadVar (F);
-    printf ("    Count:%27u\n", Count);
-
-    /* Read and print all exports */
-    for (I = 0; I < Count; ++I) {
-
-        unsigned long   Value = 0;
-        unsigned long   Size = 0;
-        unsigned char   ConDes[CD_TYPE_COUNT];
-        const char*     Name;
-        unsigned        Len;
-
-
-        /* Read the data for one export */
-        unsigned Type          = ReadVar (F);
-        unsigned char AddrSize = Read8 (F);
-        ReadData (F, ConDes, SYM_GET_CONDES_COUNT (Type));
-        Name  = GetString (&StrPool, ReadVar (F));
-        Len   = strlen (Name);
-        if (SYM_IS_CONST (Type)) {
-            Value = Read32 (F);
-        } else {
-            SkipExpr (F);
-        }
-        if (SYM_HAS_SIZE (Type)) {
-            Size = ReadVar (F);
-        }
-
-        /* Skip both line infos lists */
-        SkipLineInfoList (F);
-        SkipLineInfoList (F);
-
-        /* Print the header */
-        printf ("    Index:%27u\n", I);
-
-        /* Print the data */
-        printf ("      Type:%22s0x%02X  (%s)\n", "", Type, GetExportFlags (Type, ConDes));
-        printf ("      Address size:%14s0x%02X  (%s)\n", "", AddrSize,
-                AddrSizeToStr (AddrSize));
-        printf ("      Name:%*s\"%s\"\n", (int)(24-Len), "", Name);
-        if (SYM_IS_CONST (Type)) {
-            printf ("      Value:%15s0x%08lX  (%lu)\n", "", Value, Value);
-        }
-        if (SYM_HAS_SIZE (Type)) {
-            printf ("      Size:%16s0x%04lX  (%lu)\n", "", Size, Size);
-        }
-    }
-
-    /* Destroy the string pool */
-    DestroyStrPool (&StrPool);
-}
-
-
-
-void DumpObjDbgSyms (FILE* F, unsigned long Offset)
-/* Dump the debug symbols from an object file */
-{
-    ObjHeader   H;
-    Collection  StrPool = AUTO_COLLECTION_INITIALIZER;
-    unsigned    Count;
-    unsigned    I;
-
-    /* Seek to the header position and read the header */
-    FileSetPos (F, Offset);
-    ReadObjHeader (F, &H);
-
-    /* Seek to the start of the string pool and read it */
-    FileSetPos (F, Offset + H.StrPoolOffs);
-    ReadStrPool (F, &StrPool);
-
-    /* Seek to the start of the debug syms */
-    FileSetPos (F, Offset + H.DbgSymOffs);
-
-    /* Output a header */
-    printf ("  Debug symbols:\n");
-
-    /* Check if the object file was compiled with debug info */
-    if ((H.Flags & OBJ_FLAGS_DBGINFO) == 0) {
-        /* Print that there no debug symbols and bail out */
-        printf ("    Count:%27u\n", 0);
-        return;
-    }
-
-    /* Read the number of exports and print it */
-    Count = ReadVar (F);
-    printf ("    Count:%27u\n", Count);
-
-    /* Read and print all debug symbols */
-    for (I = 0; I < Count; ++I) {
-
-        unsigned long   Value = 0;
-        unsigned long   Size = 0;
-        unsigned        ImportId = 0;
-        unsigned        ExportId = 0;
-
-        /* Read the data for one symbol */
-        unsigned Type          = ReadVar (F);
-        unsigned char AddrSize = Read8 (F);
-        unsigned long Owner    = ReadVar (F);
-        const char*   Name     = GetString (&StrPool, ReadVar (F));
-        unsigned      Len      = strlen (Name);
-        if (SYM_IS_CONST (Type)) {
-            Value = Read32 (F);
-        } else {
-            SkipExpr (F);
-        }
-        if (SYM_HAS_SIZE (Type)) {
-            Size = ReadVar (F);
-        }
-        if (SYM_IS_IMPORT (Type)) {
-            ImportId = ReadVar (F);
-        }
-        if (SYM_IS_EXPORT (Type)) {
-            ExportId = ReadVar (F);
-        }
-
-        /* Skip both line info lists */
-        SkipLineInfoList (F);
-        SkipLineInfoList (F);
-
-        /* Print the header */
-        printf ("    Index:%27u\n", I);
-
-        /* Print the data */
-        printf ("      Type:%22s0x%02X  (%s)\n", "", Type, GetExportFlags (Type, 0));
-        printf ("      Address size:%14s0x%02X  (%s)\n", "", AddrSize,
-                AddrSizeToStr (AddrSize));
-        printf ("      Owner:%25lu\n", Owner);
-        printf ("      Name:%*s\"%s\"\n", (int)(24-Len), "", Name);
-        if (SYM_IS_CONST (Type)) {
-            printf ("      Value:%15s0x%08lX  (%lu)\n", "", Value, Value);
-        }
-        if (SYM_HAS_SIZE (Type)) {
-            printf ("      Size:%20s0x%04lX  (%lu)\n", "", Size, Size);
-        }
-        if (SYM_IS_IMPORT (Type)) {
-            printf ("      Import:%24u\n", ImportId);
-        }
-        if (SYM_IS_EXPORT (Type)) {
-            printf ("      Export:%24u\n", ExportId);
-        }
-    }
-
-    /* Destroy the string pool */
-    DestroyStrPool (&StrPool);
-}
-
-
-
-void DumpObjLineInfo (FILE* F, unsigned long Offset)
-/* Dump the line info from an object file */
-{
-    ObjHeader   H;
-    Collection  StrPool = AUTO_COLLECTION_INITIALIZER;
-    unsigned    Count;
-    unsigned    I;
-
-    /* Seek to the header position and read the header */
-    FileSetPos (F, Offset);
-    ReadObjHeader (F, &H);
-
-    /* Seek to the start of the string pool and read it */
-    FileSetPos (F, Offset + H.StrPoolOffs);
-    ReadStrPool (F, &StrPool);
-
-    /* Seek to the start of line infos */
-    FileSetPos (F, Offset + H.LineInfoOffs);
-
-    /* Output a header */
-    printf ("  Line info:\n");
-
-    /* Check if the object file was compiled with debug info */
-    if ((H.Flags & OBJ_FLAGS_DBGINFO) == 0) {
-        /* Print that there no line infos and bail out */
-        printf ("    Count:%27u\n", 0);
-        return;
-    }
-
-    /* Read the number of line infos and print it */
-    Count = ReadVar (F);
-    printf ("    Count:%27u\n", Count);
-
-    /* Read and print all line infos */
-    for (I = 0; I < Count; ++I) {
-
-        FilePos   Pos;
-        unsigned  Type;
-
-        /* File position of line info */
-        ReadFilePos (F, &Pos);
-
-        /* Type of line info */
-        Type = ReadVar (F);
-
-        /* Skip the spans */
-        SkipSpanList (F);
-
-        /* Print the header */
-        printf ("    Index:%27u\n", I);
-
-        /* Print the data */
-        printf ("      Type:%26u\n", LI_GET_TYPE (Type));
-        printf ("      Count:%25u\n", LI_GET_COUNT (Type));
-        printf ("      Line:%26u\n", Pos.Line);
-        printf ("      Col:%27u\n", Pos.Col);
-        printf ("      Name:%26u\n", Pos.Name);
-    }
-
-    /* Destroy the string pool */
-    DestroyStrPool (&StrPool);
-}
-
-
-
-void DumpObjScopes (FILE* F, unsigned long Offset)
-/* Dump the scopes from an object file */
-{
-    ObjHeader   H;
-    Collection  StrPool = AUTO_COLLECTION_INITIALIZER;
-    unsigned    Count;
-    unsigned    I;
-
-    /* Seek to the header position and read the header */
-    FileSetPos (F, Offset);
-    ReadObjHeader (F, &H);
-
-    /* Seek to the start of the string pool and read it */
-    FileSetPos (F, Offset + H.StrPoolOffs);
-    ReadStrPool (F, &StrPool);
-
-    /* Seek to the start of scopes */
-    FileSetPos (F, Offset + H.ScopeOffs);
-
-    /* Output a header */
-    printf ("  Scopes:\n");
-
-    /* Check if the object file was compiled with debug info */
-    if ((H.Flags & OBJ_FLAGS_DBGINFO) == 0) {
-        /* Print that there no scopes and bail out */
-        printf ("    Count:%27u\n", 0);
-        return;
-    }
-
-    /* Read the number of scopes and print it */
-    Count = ReadVar (F);
-    printf ("    Count:%27u\n", Count);
-
-    /* Read and print all scopes */
-    for (I = 0; I < Count; ++I) {
-
-        const char*     Name;
-        unsigned        Len;
-
-        /* Read the data */
-        unsigned        ParentId = ReadVar (F);
-        unsigned        LexicalLevel = ReadVar (F);
-        unsigned        Flags = ReadVar (F);
-        const char*     ScopeType = GetScopeType (ReadVar (F));
-
-        /* Print the header */
-        printf ("    Index:%27u\n", I);
-
-        /* Print the data */
-        printf ("      Parent id:%21u\n",       ParentId);
-        printf ("      Lexical level:%17u\n",   LexicalLevel);
-        printf ("      Flags:%21s0x%02X\n",     "", Flags);
-        printf ("      Type:%26s\n",            ScopeType);
-
-        /* Resolve and print the name */
-        Name = GetString (&StrPool, ReadVar (F));
-        Len  = strlen (Name);
-        printf ("      Name:%*s\"%s\"\n", (int)(24-Len), "", Name);
-
-        /* Size */
-        if (SCOPE_HAS_SIZE (Flags)) {
-            unsigned long Size = ReadVar (F);
-            printf ("      Size:%20s0x%04lX  (%lu)\n", "", Size, Size);
-        }
-
-        /* Label */
-        if (SCOPE_HAS_LABEL (Flags)) {
-            unsigned LabelId = ReadVar (F);
-            printf ("      Label id:%22u\n", LabelId);
-        }
-
-        /* Skip the spans */
-        SkipSpanList (F);
-    }
-
-    /* Destroy the string pool */
-    DestroyStrPool (&StrPool);
-}
-
-
-
-void DumpObjSegSize (FILE* F, unsigned long Offset)
-/* Dump the sizes of the segment in the object file */
-{
-    ObjHeader   H;
-    Collection  StrPool = AUTO_COLLECTION_INITIALIZER;
-    unsigned    Count;
-
-    /* Seek to the header position and read the header */
-    FileSetPos (F, Offset);
-    ReadObjHeader (F, &H);
-
-    /* Seek to the start of the string pool and read it */
-    FileSetPos (F, Offset + H.StrPoolOffs);
-    ReadStrPool (F, &StrPool);
-
-    /* Seek to the start of the segments */
-    FileSetPos (F, Offset + H.SegOffs);
-
-    /* Output a header */
-    printf ("  Segment sizes:\n");
-
-    /* Read the number of segments */
-    Count = ReadVar (F);
-
-    /* Read and print the sizes of all segments */
-    while (Count--) {
-
-        unsigned long Size;
-
-        /* Read the data for one segment */
-        unsigned long DataSize = Read32 (F);
-        unsigned long NextSeg  = ftell (F) + DataSize;
-        const char*   Name     = GetString (&StrPool, ReadVar (F));
-        unsigned      Len      = strlen (Name);
-
-        /* Skip segment flags, read size */
-        (void) ReadVar (F);     
-        Size = ReadVar (F);
-
-        /* Skip alignment, type and fragment count */
-        (void) ReadVar (F);
-        (void) Read8 (F);
-        (void) ReadVar (F);
-
-        /* Print the size for this segment */
-        printf ("    %s:%*s%6lu\n", Name, (int)(24-Len), "", Size);
-
-        /* Seek to the end of the segment data (start of next) */
-        FileSetPos (F, NextSeg);
-    }
-
-    /* Destroy the string pool */
-    DestroyStrPool (&StrPool);
-}
diff --git a/src/od65/dump.h b/src/od65/dump.h
deleted file mode 100644 (file)
index 5371b7b..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  dump.h                                   */
-/*                                                                           */
-/*          Dump subroutines for the od65 object file dump utility           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-
-
-
-#ifndef DUMP_H
-#define DUMP_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void DumpObjHeader (FILE* F, unsigned long Offset);
-/* Dump the header of the given object file */
-
-void DumpObjOptions (FILE* F, unsigned long Offset);
-/* Dump the file options */
-
-void DumpObjFiles (FILE* F, unsigned long Offset);
-/* Dump the source files */
-
-void DumpObjSegments (FILE* F, unsigned long Offset);
-/* Dump the segments in the object file */
-
-void DumpObjImports (FILE* F, unsigned long Offset);
-/* Dump the imports in the object file */
-
-void DumpObjExports (FILE* F, unsigned long Offset);
-/* Dump the exports in the object file */
-
-void DumpObjDbgSyms (FILE* F, unsigned long Offset);
-/* Dump the debug symbols from an object file */
-
-void DumpObjLineInfo (FILE* F, unsigned long Offset);
-/* Dump the line infos from an object file */
-
-void DumpObjScopes (FILE* F, unsigned long Offset);
-/* Dump the scopes from an object file */
-
-void DumpObjSegSize (FILE* F, unsigned long Offset);
-/* Dump the sizes of the segment in the object file */
-
-
-
-/* End of dump.h */
-
-#endif
diff --git a/src/od65/error.c b/src/od65/error.c
deleted file mode 100644 (file)
index 364f522..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 error.c                                   */
-/*                                                                           */
-/*           Error handling for the od65 object file dump utility            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2000 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Warning (const char* Format, ...)
-/* Print a warning message */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "Warning: ");
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-}
-
-
-
-void Error (const char* Format, ...)
-/* Print an error message and die */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "Error: ");
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-    exit (EXIT_FAILURE);
-}
-
-
-
-void Internal (const char* Format, ...)
-/* Print an internal error message and die */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "Internal error: ");
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-    exit (EXIT_FAILURE);
-}
diff --git a/src/od65/error.h b/src/od65/error.h
deleted file mode 100644 (file)
index 8e1469a..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.h                                  */
-/*                                                                           */
-/*           Error handling for the od65 object file dump utility            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ERROR_H
-#define ERROR_H
-
-
-
-/* common */
-#include "attrib.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Warning (const char* Format, ...) attribute((format(printf,1,2)));
-/* Print a warning message */
-
-void Error (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print an error message and die */
-
-void Internal (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print an internal error message and die */
-
-
-
-/* End of error.h */
-
-#endif
diff --git a/src/od65/fileio.c b/src/od65/fileio.c
deleted file mode 100644 (file)
index a8d31c7..0000000
+++ /dev/null
@@ -1,248 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 fileio.c                                  */
-/*                                                                           */
-/*              File I/O for the od65 object file dump utility               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "xmalloc.h"
-
-/* od65 */
-#include "error.h"
-#include "fileio.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void FileSetPos (FILE* F, unsigned long Pos)
-/* Seek to the given absolute position, fail on errors */
-{                 
-    if (fseek (F, Pos, SEEK_SET) != 0) {
-        Error ("Cannot seek: %s", strerror (errno));
-    }
-}
-
-
-
-unsigned long FileGetPos (FILE* F)
-/* Return the current file position, fail on errors */
-{
-    long Pos = ftell (F);
-    if (Pos < 0) {
-        Error ("Error in ftell: %s", strerror (errno));
-    }
-    return Pos;
-}
-
-
-
-unsigned Read8 (FILE* F)
-/* Read an 8 bit value from the file */
-{
-    int C = getc (F);
-    if (C == EOF) {
-        Error ("Read error (file corrupt?)");
-    }
-    return C;
-}
-
-
-
-unsigned Read16 (FILE* F)
-/* Read a 16 bit value from the file */
-{
-    unsigned Lo = Read8 (F);
-    unsigned Hi = Read8 (F);
-    return (Hi << 8) | Lo;
-}
-
-
-
-unsigned long Read24 (FILE* F)
-/* Read a 24 bit value from the file */
-{
-    unsigned long Lo = Read16 (F);
-    unsigned long Hi = Read8 (F);
-    return (Hi << 16) | Lo;
-}
-
-
-
-unsigned long Read32 (FILE* F)
-/* Read a 32 bit value from the file */
-{
-    unsigned long Lo = Read16 (F);
-    unsigned long Hi = Read16 (F);
-    return (Hi << 16) | Lo;
-}
-
-
-
-long Read32Signed (FILE* F)
-/* Read a 32 bit value from the file. Sign extend the value. */
-{
-    /* Read a 32 bit value */
-    unsigned long V = Read32 (F);
-
-    /* Sign extend the value */
-    if (V & 0x80000000UL) {
-        /* Signed value */
-        V |= ~0xFFFFFFFFUL;
-    }
-
-    /* Return it as a long */
-    return (long) V;
-}
-
-
-
-unsigned long ReadVar (FILE* F)
-/* Read a variable size value from the file */
-{
-    /* The value was written to the file in 7 bit chunks LSB first. If there
-    ** are more bytes, bit 8 is set, otherwise it is clear.
-    */
-    unsigned char C;
-    unsigned long V = 0;
-    unsigned Shift = 0;
-    do {
-        /* Read one byte */
-        C = Read8 (F);
-        /* Encode it into the target value */
-        V |= ((unsigned long)(C & 0x7F)) << Shift;
-        /* Next value */
-        Shift += 7;
-    } while (C & 0x80);
-
-    /* Return the value read */
-    return V;
-}
-
-
-
-char* ReadStr (FILE* F)
-/* Read a string from the file into a malloced area */
-{
-    /* Read the length */
-    unsigned Len = ReadVar (F);
-
-    /* Allocate memory */
-    char* Str = xmalloc (Len + 1);
-
-    /* Read the string itself */
-    ReadData (F, Str, Len);
-
-    /* Terminate the string and return it */
-    Str [Len] = '\0';
-    return Str;
-}
-
-
-
-FilePos* ReadFilePos (FILE* F, FilePos* Pos)
-/* Read a file position from the file */
-{
-    /* Read the data fields */
-    Pos->Line = ReadVar (F);
-    Pos->Col  = ReadVar (F);
-    Pos->Name = ReadVar (F);
-    return Pos;
-}
-
-
-
-void* ReadData (FILE* F, void* Data, unsigned Size)
-/* Read data from the file */
-{
-    /* Accept zero sized reads */
-    if (Size > 0) {
-        if (fread (Data, 1, Size, F) != Size) {
-            Error ("Read error (file corrupt?)");
-        }
-    }
-    return Data;
-}
-
-
-
-void ReadObjHeader (FILE* F, ObjHeader* H)
-/* Read an object file header from the file */
-{
-    /* Read all fields */
-    H->Magic        = Read32 (F);
-    H->Version      = Read16 (F);
-    H->Flags        = Read16 (F);
-    H->OptionOffs   = Read32 (F);
-    H->OptionSize   = Read32 (F);
-    H->FileOffs     = Read32 (F);
-    H->FileSize     = Read32 (F);
-    H->SegOffs      = Read32 (F);
-    H->SegSize      = Read32 (F);
-    H->ImportOffs   = Read32 (F);
-    H->ImportSize   = Read32 (F);
-    H->ExportOffs   = Read32 (F);
-    H->ExportSize   = Read32 (F);
-    H->DbgSymOffs   = Read32 (F);
-    H->DbgSymSize   = Read32 (F);
-    H->LineInfoOffs = Read32 (F);
-    H->LineInfoSize = Read32 (F);
-    H->StrPoolOffs  = Read32 (F);
-    H->StrPoolSize  = Read32 (F);
-    H->AssertOffs   = Read32 (F);
-    H->AssertSize   = Read32 (F);
-    H->ScopeOffs    = Read32 (F);
-    H->ScopeSize    = Read32 (F);
-    H->SpanOffs     = Read32 (F);
-    H->SpanSize     = Read32 (F);
-}
-
-
-
-void ReadStrPool (FILE* F, Collection* C)
-/* Read a string pool from the current position into C. */
-{
-    /* The number of strings is the first item */
-    unsigned long Count = ReadVar (F);
-
-    /* Read all the strings into C */
-    while (Count--) {
-        CollAppend (C, ReadStr (F));
-    }
-}
diff --git a/src/od65/fileio.h b/src/od65/fileio.h
deleted file mode 100644 (file)
index 068c4d9..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 fileio.h                                  */
-/*                                                                           */
-/*              File I/O for the od65 object file dump utility               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef FILEIO_H
-#define FILEIO_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "coll.h"
-#include "filepos.h"
-#include "objdefs.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void FileSetPos (FILE* F, unsigned long Pos);
-/* Seek to the given absolute position, fail on errors */
-
-unsigned long FileGetPos (FILE* F);
-/* Return the current file position, fail on errors */
-
-unsigned Read8 (FILE* F);
-/* Read an 8 bit value from the file */
-
-unsigned Read16 (FILE* F);
-/* Read a 16 bit value from the file */
-
-unsigned long Read24 (FILE* F);
-/* Read a 24 bit value from the file */
-
-unsigned long Read32 (FILE* F);
-/* Read a 32 bit value from the file */
-
-long Read32Signed (FILE* F);
-/* Read a 32 bit value from the file. Sign extend the value. */
-
-unsigned long ReadVar (FILE* F);
-/* Read a variable size value from the file */
-
-char* ReadStr (FILE* F);
-/* Read a string from the file into a malloced area */
-
-FilePos* ReadFilePos (FILE* F, FilePos* Pos);
-/* Read a file position from the file */
-
-void* ReadData (FILE* F, void* Data, unsigned Size);
-/* Read data from the file */
-
-void ReadObjHeader (FILE* F, ObjHeader* Header);
-/* Read an object file header from the file */
-
-void ReadStrPool (FILE* F, Collection* C);
-/* Read a string pool from the current position into C. */
-
-
-
-/* End of fileio.h */
-
-#endif
diff --git a/src/od65/global.c b/src/od65/global.c
deleted file mode 100644 (file)
index bb56cee..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.c                                  */
-/*                                                                           */
-/*          Global variables for the od65 object file dump utility           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include "global.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-unsigned What   = 0;            /* What should get dumped? */
diff --git a/src/od65/global.h b/src/od65/global.h
deleted file mode 100644 (file)
index 22054d3..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 global.h                                  */
-/*                                                                           */
-/*          Global variables for the od65 object file dump utility           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef GLOBAL_H
-#define GLOBAL_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-#define D_HEADER        0x0001U         /* Dump the header */
-#define D_OPTIONS       0x0002U         /* Dump the options */
-#define D_FILES         0x0004U         /* Dump source file info */
-#define D_SEGMENTS      0x0008U         /* Dump segment info */
-#define D_IMPORTS       0x0010U         /* Dump imported symbols */
-#define D_EXPORTS       0x0020U         /* Dump exported symbols */
-#define D_DBGSYMS       0x0040U         /* Dump debug symbols */
-#define D_LINEINFO      0x0080U         /* Dump line infos */
-#define D_SCOPES        0x0100U         /* Dump scopes */
-#define D_SEGSIZE       0x0200U         /* Dump segment sizes */
-#define D_ALL           0xFFFFU         /* Dump anything */
-
-
-
-extern unsigned         What;           /* What should get dumped? */
-
-
-
-/* End of global.h */
-
-#endif
diff --git a/src/od65/main.c b/src/od65/main.c
deleted file mode 100644 (file)
index 802290f..0000000
+++ /dev/null
@@ -1,363 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  main.c                                   */
-/*                                                                           */
-/*             Main program of the od65 object file dump utility             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "cmdline.h"
-#include "objdefs.h"
-#include "version.h"
-
-/* od65 */
-#include "dump.h"
-#include "error.h"
-#include "fileio.h"
-#include "global.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-static unsigned FilesProcessed = 0;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void Usage (void)
-/* Print usage information and exit */
-{
-    printf ("Usage: %s [options] file [options] [file]\n"
-            "Short options:\n"
-            "  -h\t\t\tHelp (this text)\n"
-            "  -H\t\t\tDump the object file header\n"
-            "  -S\t\t\tDump segments sizes\n"
-            "  -V\t\t\tPrint the version number and exit\n"
-            "\n"
-            "Long options:\n"
-            "  --dump-all\t\tDump all object file information\n"
-            "  --dump-dbgsyms\tDump debug symbols\n"
-            "  --dump-exports\tDump exported symbols\n"
-            "  --dump-files\t\tDump the source files\n"
-            "  --dump-header\t\tDump the object file header\n"
-            "  --dump-imports\tDump imported symbols\n"
-            "  --dump-lineinfo\tDump line information\n"
-            "  --dump-options\tDump object file options\n"
-            "  --dump-segments\tDump the segments in the file\n"
-            "  --dump-segsize\tDump segments sizes\n"
-            "  --help\t\tHelp (this text)\n"
-            "  --version\t\tPrint the version number and exit\n",
-            ProgName);
-}
-
-
-
-static void OptDumpAll (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Dump all object file information */
-{
-    What |= D_ALL;
-}
-
-
-
-static void OptDumpDbgSyms (const char* Opt attribute ((unused)),
-                            const char* Arg attribute ((unused)))
-/* Dump debug symbols contained in the object file */
-{
-    What |= D_DBGSYMS;
-}
-
-
-
-static void OptDumpExports (const char* Opt attribute ((unused)),
-                            const char* Arg attribute ((unused)))
-/* Dump the exported symbols */
-{
-    What |= D_EXPORTS;
-}
-
-
-
-static void OptDumpFiles (const char* Opt attribute ((unused)),
-                          const char* Arg attribute ((unused)))
-/* Dump the source files */
-{
-    What |= D_FILES;
-}
-
-
-
-static void OptDumpHeader (const char* Opt attribute ((unused)),
-                           const char* Arg attribute ((unused)))
-/* Dump the object file header */
-{
-    What |= D_HEADER;
-}
-
-
-
-static void OptDumpImports (const char* Opt attribute ((unused)),
-                            const char* Arg attribute ((unused)))
-/* Dump the imported symbols */
-{
-    What |= D_IMPORTS;
-}
-
-
-
-static void OptDumpLineInfo (const char* Opt attribute ((unused)),
-                             const char* Arg attribute ((unused)))
-/* Dump the line infos */
-{
-    What |= D_LINEINFO;
-}
-
-
-
-static void OptDumpOptions (const char* Opt attribute ((unused)),
-                            const char* Arg attribute ((unused)))
-/* Dump the object file options */
-{
-    What |= D_OPTIONS;
-}
-
-
-
-static void OptDumpScopes (const char* Opt attribute ((unused)),
-                           const char* Arg attribute ((unused)))
-/* Dump the scopes in the object file */
-{
-    What |= D_SCOPES;
-}
-
-
-
-static void OptDumpSegments (const char* Opt attribute ((unused)),
-                             const char* Arg attribute ((unused)))
-/* Dump the segments in the object file */
-{
-    What |= D_SEGMENTS;
-}
-
-
-
-static void OptDumpSegSize (const char* Opt attribute ((unused)),
-                            const char* Arg attribute ((unused)))
-/* Dump the segments in the object file */
-{
-    What |= D_SEGSIZE;
-}
-
-
-
-static void OptHelp (const char* Opt attribute ((unused)),
-                     const char* Arg attribute ((unused)))
-/* Print usage information and exit */
-{
-    Usage ();
-    exit (EXIT_SUCCESS);
-}
-
-
-
-static void OptVersion (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Print the assembler version */
-{
-    fprintf (stderr, "%s V%s\n", ProgName, GetVersionAsString ());
-}
-
-
-
-static void DumpFile (const char* Name)
-/* Dump information from the named file */
-{
-    unsigned long Magic;
-
-    /* Try to open the file */
-    FILE* F = fopen (Name, "rb");
-    if (F == 0) {
-        Error ("Cannot open `%s': %s", Name, strerror (errno));
-    }
-
-    /* Read the magic word */
-    Magic = Read32 (F);
-
-    /* Do we know this type of file? */
-    if (Magic != OBJ_MAGIC) {
-
-        /* Unknown format */
-        printf ("%s: (no xo65 object file)\n", Name);
-
-    } else if (What == 0) {
-
-        /* Special handling if no info was requested */
-        printf ("%s: (no information requested)\n", Name);
-
-    } else {
-
-        /* Print the filename */
-        printf ("%s:\n", Name);
-
-        /* Check what to dump */
-        if (What & D_HEADER) {
-            DumpObjHeader (F, 0);
-        }
-        if (What & D_OPTIONS) {
-            DumpObjOptions (F, 0);
-        }
-        if (What & D_FILES) {
-            DumpObjFiles (F, 0);
-        }
-        if (What & D_SEGMENTS) {
-            DumpObjSegments (F, 0);
-        }
-        if (What & D_IMPORTS) {
-            DumpObjImports (F, 0);
-        }
-        if (What & D_EXPORTS) {
-            DumpObjExports (F, 0);
-        }
-        if (What & D_DBGSYMS) {
-            DumpObjDbgSyms (F, 0);
-        }
-        if (What & D_LINEINFO) {
-            DumpObjLineInfo (F, 0);
-        }
-        if (What & D_SCOPES) {
-            DumpObjScopes (F, 0);
-        }
-        if (What & D_SEGSIZE) {
-            DumpObjSegSize (F, 0);
-        }
-    }
-
-    /* Close the file */
-    fclose (F);
-}
-
-
-
-int main (int argc, char* argv [])
-/* Assembler main program */
-{
-    /* Program long options */
-    static const LongOpt OptTab[] = {
-        { "--dump-all",         0,      OptDumpAll              },
-        { "--dump-dbgsyms",     0,      OptDumpDbgSyms          },
-        { "--dump-exports",     0,      OptDumpExports          },
-        { "--dump-files",       0,      OptDumpFiles            },
-        { "--dump-header",      0,      OptDumpHeader           },
-        { "--dump-imports",     0,      OptDumpImports          },
-        { "--dump-lineinfo",    0,      OptDumpLineInfo         },
-        { "--dump-options",     0,      OptDumpOptions          },
-        { "--dump-scopes",      0,      OptDumpScopes           },
-        { "--dump-segments",    0,      OptDumpSegments         },
-        { "--dump-segsize",     0,      OptDumpSegSize          },
-        { "--help",             0,      OptHelp                 },
-        { "--version",          0,      OptVersion              },
-    };
-
-    unsigned I;
-
-    /* Initialize the cmdline module */
-    InitCmdLine (&argc, &argv, "od65");
-
-    /* Check the parameters */
-    I = 1;
-    while (I < ArgCount) {
-
-        /* Get the argument */
-        const char* Arg = ArgVec[I];
-
-        /* Check for an option */
-        if (Arg [0] == '-') {
-            switch (Arg [1]) {
-
-                case '-':
-                    LongOption (&I, OptTab, sizeof(OptTab)/sizeof(OptTab[0]));
-                    break;
-
-                case 'h':
-                    OptHelp (Arg, 0);
-                    break;
-
-                case 'H':
-                    OptDumpHeader (Arg, 0);
-                    break;
-
-                case 'S':
-                    OptDumpSegSize (Arg, 0);
-                    break;
-
-                case 'V':
-                    OptVersion (Arg, 0);
-                    break;
-
-                default:
-                    UnknownOption (Arg);
-                    break;
-
-            }
-        } else {
-            /* Filename. Dump it. */
-            DumpFile (Arg);
-            ++FilesProcessed;
-        }
-
-        /* Next argument */
-        ++I;
-    }
-
-    /* Print a message if we did not process any files */
-    if (FilesProcessed == 0) {
-        fprintf (stderr, "%s: No input files\n", ProgName);
-    }
-
-    /* Success */
-    return EXIT_SUCCESS;
-}
diff --git a/src/sim65.vcxproj b/src/sim65.vcxproj
deleted file mode 100644 (file)
index f87b4db..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{002A366E-2863-46A8-BDDE-DDF534AAEC73}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>sim65</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <LinkIncremental>false</LinkIncremental>
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>false</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClInclude Include="sim65\6502.h" />
-    <ClInclude Include="sim65\error.h" />
-    <ClInclude Include="sim65\memory.h" />
-    <ClInclude Include="sim65\paravirt.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="sim65\6502.c" />
-    <ClCompile Include="sim65\error.c" />
-    <ClCompile Include="sim65\main.c" />
-    <ClCompile Include="sim65\memory.c" />
-    <ClCompile Include="sim65\paravirt.c" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/src/sim65/6502.c b/src/sim65/6502.c
deleted file mode 100644 (file)
index 312eb2f..0000000
+++ /dev/null
@@ -1,2830 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  6502.c                                   */
-/*                                                                           */
-/*                           CPU core for the 6502                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include "memory.h"
-#include "error.h"
-#include "6502.h"
-#include "paravirt.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Current CPU */
-CPUType CPU;
-
-/* Type of an opcode handler function */
-typedef void (*OPFunc) (void);
-
-/* The CPU registers */
-static CPURegs Regs;
-
-/* Cycles for the current insn */
-static unsigned Cycles;
-
-/* Total number of CPU cycles exec'd */
-static unsigned long TotalCycles;
-
-/* NMI request active */
-static unsigned HaveNMIRequest;
-
-/* IRQ request active */
-static unsigned HaveIRQRequest;
-
-
-
-/*****************************************************************************/
-/*                        Helper functions and macros                        */
-/*****************************************************************************/
-
-
-
-/* Return the flags as a boolean value (0/1) */
-#define GET_CF()        ((Regs.SR & CF) != 0)
-#define GET_ZF()        ((Regs.SR & ZF) != 0)
-#define GET_IF()        ((Regs.SR & IF) != 0)
-#define GET_DF()        ((Regs.SR & DF) != 0)
-#define GET_BF()        ((Regs.SR & BF) != 0)
-#define GET_OF()        ((Regs.SR & OF) != 0)
-#define GET_SF()        ((Regs.SR & SF) != 0)
-
-/* Set the flags. The parameter is a boolean flag that says if the flag should be
-** set or reset.
-*/
-#define SET_CF(f)       do { if (f) { Regs.SR |= CF; } else { Regs.SR &= ~CF; } } while (0)
-#define SET_ZF(f)       do { if (f) { Regs.SR |= ZF; } else { Regs.SR &= ~ZF; } } while (0)
-#define SET_IF(f)       do { if (f) { Regs.SR |= IF; } else { Regs.SR &= ~IF; } } while (0)
-#define SET_DF(f)       do { if (f) { Regs.SR |= DF; } else { Regs.SR &= ~DF; } } while (0)
-#define SET_BF(f)       do { if (f) { Regs.SR |= BF; } else { Regs.SR &= ~BF; } } while (0)
-#define SET_OF(f)       do { if (f) { Regs.SR |= OF; } else { Regs.SR &= ~OF; } } while (0)
-#define SET_SF(f)       do { if (f) { Regs.SR |= SF; } else { Regs.SR &= ~SF; } } while (0)
-
-/* Special test and set macros. The meaning of the parameter depends on the
-** actual flag that should be set or reset.
-*/
-#define TEST_ZF(v)      SET_ZF (((v) & 0xFF) == 0)
-#define TEST_SF(v)      SET_SF (((v) & 0x80) != 0)
-#define TEST_CF(v)      SET_CF (((v) & 0xFF00) != 0)
-
-/* Program counter halves */
-#define PCL             (Regs.PC & 0xFF)
-#define PCH             ((Regs.PC >> 8) & 0xFF)
-
-/* Stack operations */
-#define PUSH(Val)       MemWriteByte (0x0100 + Regs.SP--, Val)
-#define POP()           MemReadByte (0x0100 + ++Regs.SP)
-
-/* Test for page cross */
-#define PAGE_CROSS(addr,offs)   ((((addr) & 0xFF) + offs) >= 0x100)
-
-/* #imm */
-#define AC_OP_IMM(op)                                           \
-    Cycles = 2;                                                 \
-    Regs.AC = Regs.AC op MemReadByte (Regs.PC+1);               \
-    TEST_ZF (Regs.AC);                                          \
-    TEST_SF (Regs.AC);                                          \
-    Regs.PC += 2
-
-/* zp */
-#define AC_OP_ZP(op)                                            \
-    Cycles = 3;                                                 \
-    Regs.AC = Regs.AC op MemReadByte (MemReadByte (Regs.PC+1)); \
-    TEST_ZF (Regs.AC);                                          \
-    TEST_SF (Regs.AC);                                          \
-    Regs.PC += 2
-
-/* zp,x */
-#define AC_OP_ZPX(op)                                           \
-    unsigned char ZPAddr;                                       \
-    Cycles = 4;                                                 \
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;                 \
-    Regs.AC = Regs.AC op MemReadByte (ZPAddr);                  \
-    TEST_ZF (Regs.AC);                                          \
-    TEST_SF (Regs.AC);                                          \
-    Regs.PC += 2
-
-/* zp,y */
-#define AC_OP_ZPY(op)                                           \
-    unsigned char ZPAddr;                                       \
-    Cycles = 4;                                                 \
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.YR;                 \
-    Regs.AC = Regs.AC op MemReadByte (ZPAddr);                  \
-    TEST_ZF (Regs.AC);                                          \
-    TEST_SF (Regs.AC);                                          \
-    Regs.PC += 2
-
-/* abs */
-#define AC_OP_ABS(op)                                           \
-    unsigned Addr;                                              \
-    Cycles = 4;                                                 \
-    Addr = MemReadWord (Regs.PC+1);                             \
-    Regs.AC = Regs.AC op MemReadByte (Addr);                    \
-    TEST_ZF (Regs.AC);                                          \
-    TEST_SF (Regs.AC);                                          \
-    Regs.PC += 3
-
-/* abs,x */
-#define AC_OP_ABSX(op)                                          \
-    unsigned Addr;                                              \
-    Cycles = 4;                                                 \
-    Addr = MemReadWord (Regs.PC+1);                             \
-    if (PAGE_CROSS (Addr, Regs.XR)) {                           \
-        ++Cycles;                                               \
-    }                                                           \
-    Regs.AC = Regs.AC op MemReadByte (Addr + Regs.XR);          \
-    TEST_ZF (Regs.AC);                                          \
-    TEST_SF (Regs.AC);                                          \
-    Regs.PC += 3
-
-/* abs,y */
-#define AC_OP_ABSY(op)                                          \
-    unsigned Addr;                                              \
-    Cycles = 4;                                                 \
-    Addr = MemReadWord (Regs.PC+1);                             \
-    if (PAGE_CROSS (Addr, Regs.YR)) {                           \
-        ++Cycles;                                               \
-    }                                                           \
-    Regs.AC = Regs.AC op MemReadByte (Addr + Regs.YR);          \
-    TEST_ZF (Regs.AC);                                          \
-    TEST_SF (Regs.AC);                                          \
-    Regs.PC += 3
-
-/* (zp,x) */
-#define AC_OP_ZPXIND(op)                                        \
-    unsigned char ZPAddr;                                       \
-    unsigned Addr;                                              \
-    Cycles = 6;                                                 \
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;                 \
-    Addr = MemReadZPWord (ZPAddr);                              \
-    Regs.AC = Regs.AC op MemReadByte (Addr);                    \
-    TEST_ZF (Regs.AC);                                          \
-    TEST_SF (Regs.AC);                                          \
-    Regs.PC += 2
-
-/* (zp),y */
-#define AC_OP_ZPINDY(op)                                        \
-    unsigned char ZPAddr;                                       \
-    unsigned Addr;                                              \
-    Cycles = 5;                                                 \
-    ZPAddr = MemReadByte (Regs.PC+1);                           \
-    Addr = MemReadZPWord (ZPAddr) + Regs.YR;                    \
-    Regs.AC = Regs.AC op MemReadByte (Addr);                    \
-    TEST_ZF (Regs.AC);                                          \
-    TEST_SF (Regs.AC);                                          \
-    Regs.PC += 2
-
-/* ADC */
-#define ADC(v)                                                  \
-    do {                                                        \
-        unsigned old = Regs.AC;                                 \
-        unsigned rhs = (v & 0xFF);                              \
-        if (GET_DF ()) {                                        \
-            unsigned lo;                                        \
-            int res;                                            \
-            lo = (old & 0x0F) + (rhs & 0x0F) + GET_CF ();       \
-            if (lo >= 0x0A) {                                   \
-                lo = ((lo + 0x06) & 0x0F) + 0x10;               \
-            }                                                   \
-            Regs.AC = (old & 0xF0) + (rhs & 0xF0) + lo;         \
-            res = (signed char)(old & 0xF0) +                   \
-                  (signed char)(rhs & 0xF0) +                   \
-                  (signed char)lo;                              \
-            TEST_ZF (old + rhs + GET_CF ());                    \
-            TEST_SF (Regs.AC);                                  \
-            if (Regs.AC >= 0xA0) {                              \
-                Regs.AC += 0x60;                                \
-            }                                                   \
-            TEST_CF (Regs.AC);                                  \
-            SET_OF ((res < -128) || (res > 127));               \
-        } else {                                                \
-            Regs.AC += rhs + GET_CF ();                         \
-            TEST_ZF (Regs.AC);                                  \
-            TEST_SF (Regs.AC);                                  \
-            TEST_CF (Regs.AC);                                  \
-            SET_OF (!((old ^ rhs) & 0x80) &&                    \
-                    ((old ^ Regs.AC) & 0x80));                  \
-            Regs.AC &= 0xFF;                                    \
-        }                                                       \
-    } while (0)
-
-/* branches */
-#define BRANCH(cond)                                            \
-    Cycles = 2;                                                 \
-    if (cond) {                                                 \
-        signed char Offs;                                       \
-        unsigned char OldPCH;                                   \
-        ++Cycles;                                               \
-        Offs = (signed char) MemReadByte (Regs.PC+1);           \
-        OldPCH = PCH;                                           \
-        Regs.PC += 2 + (int) Offs;                              \
-        if (PCH != OldPCH) {                                    \
-            ++Cycles;                                           \
-        }                                                       \
-    } else {                                                    \
-        Regs.PC += 2;                                           \
-    }
-
-/* compares */
-#define CMP(v1, v2)                                             \
-    do {                                                        \
-        unsigned Result = v1 - v2;                              \
-        TEST_ZF (Result & 0xFF);                                \
-        TEST_SF (Result);                                       \
-        SET_CF (Result <= 0xFF);                                \
-    } while (0)
-
-
-/* ROL */
-#define ROL(Val)                                                \
-    Val <<= 1;                                                  \
-    if (GET_CF ()) {                                            \
-        Val |= 0x01;                                            \
-    }                                                           \
-    TEST_ZF (Val);                                              \
-    TEST_SF (Val);                                              \
-    TEST_CF (Val)
-
-/* ROR */
-#define ROR(Val)                                                \
-    if (GET_CF ()) {                                            \
-        Val |= 0x100;                                           \
-    }                                                           \
-    SET_CF (Val & 0x01);                                        \
-    Val >>= 1;                                                  \
-    TEST_ZF (Val);                                              \
-    TEST_SF (Val)
-
-/* SBC */
-#define SBC(v)                                                  \
-    do {                                                        \
-        unsigned old = Regs.AC;                                 \
-        unsigned rhs = (v & 0xFF);                              \
-        if (GET_DF ()) {                                        \
-            unsigned lo;                                        \
-            int res;                                            \
-            lo = (old & 0x0F) - (rhs & 0x0F) + GET_CF () - 1;   \
-            if (lo & 0x80) {                                    \
-                lo = ((lo - 0x06) & 0x0F) - 0x10;               \
-            }                                                   \
-            Regs.AC = (old & 0xF0) - (rhs & 0xF0) + lo;         \
-            if (Regs.AC & 0x80) {                               \
-                Regs.AC -= 0x60;                                \
-            }                                                   \
-            res = Regs.AC - rhs + (!GET_CF ());                 \
-            TEST_ZF (res);                                      \
-            TEST_SF (res);                                      \
-            SET_CF (res <= 0xFF);                               \
-            SET_OF (((old^rhs) & (old^res) & 0x80));            \
-        } else {                                                \
-            Regs.AC -= rhs + (!GET_CF ());                      \
-            TEST_ZF (Regs.AC);                                  \
-            TEST_SF (Regs.AC);                                  \
-            SET_CF (Regs.AC <= 0xFF);                           \
-            SET_OF (((old^rhs) & (old^Regs.AC) & 0x80));        \
-            Regs.AC &= 0xFF;                                    \
-        }                                                       \
-    } while (0)
-
-
-
-/*****************************************************************************/
-/*                         Opcode handling functions                         */
-/*****************************************************************************/
-
-
-
-static void OPC_Illegal (void)
-{
-    Error ("Illegal opcode $%02X at address $%04X",
-           MemReadByte (Regs.PC), Regs.PC);
-}
-
-
-
-static void OPC_6502_00 (void)
-/* Opcode $00: BRK */
-{
-    Cycles = 7;
-    Regs.PC += 2;
-    SET_BF (1);
-    PUSH (PCH);
-    PUSH (PCL);
-    PUSH (Regs.SR);
-    SET_IF (1);
-    Regs.PC = MemReadWord (0xFFFE);
-}
-
-
-
-static void OPC_6502_01 (void)
-/* Opcode $01: ORA (ind,x) */
-{
-    AC_OP_ZPXIND (|);
-}
-
-
-
-static void OPC_6502_05 (void)
-/* Opcode $05: ORA zp */
-{
-    AC_OP_ZP (|);
-}
-
-
-
-static void OPC_6502_06 (void)
-/* Opcode $06: ASL zp */
-{
-    unsigned char ZPAddr;
-    unsigned Val;
-    Cycles = 5;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    Val    = MemReadByte (ZPAddr) << 1;
-    MemWriteByte (ZPAddr, (unsigned char) Val);
-    TEST_ZF (Val & 0xFF);
-    TEST_SF (Val);
-    SET_CF (Val & 0x100);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_08 (void)
-/* Opcode $08: PHP */
-{
-    Cycles = 3;
-    PUSH (Regs.SR & ~BF);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_09 (void)
-/* Opcode $09: ORA #imm */
-{
-    AC_OP_IMM (|);
-}
-
-
-
-static void OPC_6502_0A (void)
-/* Opcode $0A: ASL a */
-{
-    Cycles = 2;
-    Regs.AC <<= 1;
-    TEST_ZF (Regs.AC & 0xFF);
-    TEST_SF (Regs.AC);
-    SET_CF (Regs.AC & 0x100);
-    Regs.AC &= 0xFF;
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_0D (void)
-/* Opcode $0D: ORA abs */
-{
-    AC_OP_ABS (|);
-}
-
-
-
-static void OPC_6502_0E (void)
-/* Opcode $0E: ALS abs */
-{
-    unsigned Addr;
-    unsigned Val;
-    Cycles = 6;
-    Addr = MemReadWord (Regs.PC+1);
-    Val  = MemReadByte (Addr) << 1;
-    MemWriteByte (Addr, (unsigned char) Val);
-    TEST_ZF (Val & 0xFF);
-    TEST_SF (Val);
-    SET_CF (Val & 0x100);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_10 (void)
-/* Opcode $10: BPL */
-{
-    BRANCH (!GET_SF ());
-}
-
-
-
-static void OPC_6502_11 (void)
-/* Opcode $11: ORA (zp),y */
-{
-    AC_OP_ZPINDY (|);
-}
-
-
-
-static void OPC_6502_15 (void)
-/* Opcode $15: ORA zp,x */
-{
-   AC_OP_ZPX (|);
-}
-
-
-
-static void OPC_6502_16 (void)
-/* Opcode $16: ASL zp,x */
-{
-    unsigned char ZPAddr;
-    unsigned Val;
-    Cycles = 6;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;
-    Val    = MemReadByte (ZPAddr) << 1;
-    MemWriteByte (ZPAddr, (unsigned char) Val);
-    TEST_ZF (Val & 0xFF);
-    TEST_SF (Val);
-    SET_CF (Val & 0x100);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_18 (void)
-/* Opcode $18: CLC */
-{
-    Cycles = 2;
-    SET_CF (0);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_19 (void)
-/* Opcode $19: ORA abs,y */
-{
-    AC_OP_ABSY (|);
-}
-
-
-
-static void OPC_6502_1D (void)
-/* Opcode $1D: ORA abs,x */
-{
-    AC_OP_ABSX (|);
-}
-
-
-
-static void OPC_6502_1E (void)
-/* Opcode $1E: ASL abs,x */
-{
-    unsigned Addr;
-    unsigned Val;
-    Cycles = 7;
-    Addr = MemReadWord (Regs.PC+1) + Regs.XR;
-    Val  = MemReadByte (Addr) << 1;
-    MemWriteByte (Addr, (unsigned char) Val);
-    TEST_ZF (Val & 0xFF);
-    TEST_SF (Val);
-    SET_CF (Val & 0x100);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_20 (void)
-/* Opcode $20: JSR */
-{
-    unsigned Addr;
-    Cycles = 6;
-    Addr   = MemReadWord (Regs.PC+1);
-    Regs.PC += 2;
-    PUSH (PCH);
-    PUSH (PCL);
-    Regs.PC = Addr;
-
-    ParaVirtHooks (&Regs);
-}
-
-
-
-static void OPC_6502_21 (void)
-/* Opcode $21: AND (zp,x) */
-{
-    AC_OP_ZPXIND (&);
-}
-
-
-
-static void OPC_6502_24 (void)
-/* Opcode $24: BIT zp */
-{
-    unsigned char ZPAddr;
-    unsigned char Val;
-    Cycles = 3;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    Val    = MemReadByte (ZPAddr);
-    SET_SF (Val & 0x80);
-    SET_OF (Val & 0x40);
-    SET_ZF ((Val & Regs.AC) == 0);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_25 (void)
-/* Opcode $25: AND zp */
-{
-    AC_OP_ZP (&);
-}
-
-
-
-static void OPC_6502_26 (void)
-/* Opcode $26: ROL zp */
-{
-    unsigned char ZPAddr;
-    unsigned Val;
-    Cycles = 5;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    Val    = MemReadByte (ZPAddr);
-    ROL (Val);
-    MemWriteByte (ZPAddr, Val);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_28 (void)
-/* Opcode $28: PLP */
-{
-    Cycles = 4;
-    Regs.SR = (POP () & ~BF);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_29 (void)
-/* Opcode $29: AND #imm */
-{
-    AC_OP_IMM (&);
-}
-
-
-
-static void OPC_6502_2A (void)
-/* Opcode $2A: ROL a */
-{
-    Cycles = 2;
-    ROL (Regs.AC);
-    Regs.AC &= 0xFF;
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_2C (void)
-/* Opcode $2C: BIT abs */
-{
-    unsigned Addr;
-    unsigned char Val;
-    Cycles = 4;
-    Addr = MemReadByte (Regs.PC+1);
-    Val  = MemReadByte (Addr);
-    SET_SF (Val & 0x80);
-    SET_OF (Val & 0x40);
-    SET_ZF ((Val & Regs.AC) == 0);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_2D (void)
-/* Opcode $2D: AND abs */
-{
-    AC_OP_ABS (&);
-}
-
-
-
-static void OPC_6502_2E (void)
-/* Opcode $2E: ROL abs */
-{
-    unsigned Addr;
-    unsigned Val;
-    Cycles = 6;
-    Addr = MemReadWord (Regs.PC+1);
-    Val  = MemReadByte (Addr);
-    ROL (Val);
-    MemWriteByte (Addr, Val);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_30 (void)
-/* Opcode $30: BMI */
-{
-    BRANCH (GET_SF ());
-}
-
-
-
-static void OPC_6502_31 (void)
-/* Opcode $31: AND (zp),y */
-{
-    AC_OP_ZPINDY (&);
-}
-
-
-
-static void OPC_6502_35 (void)
-/* Opcode $35: AND zp,x */
-{
-    AC_OP_ZPX (&);
-}
-
-
-
-static void OPC_6502_36 (void)
-/* Opcode $36: ROL zp,x */
-{
-    unsigned char ZPAddr;
-    unsigned Val;
-    Cycles = 6;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;
-    Val    = MemReadByte (ZPAddr);
-    ROL (Val);
-    MemWriteByte (ZPAddr, Val);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_38 (void)
-/* Opcode $38: SEC */
-{
-    Cycles = 2;
-    SET_CF (1);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_39 (void)
-/* Opcode $39: AND abs,y */
-{
-    AC_OP_ABSY (&);
-}
-
-
-
-static void OPC_6502_3D (void)
-/* Opcode $3D: AND abs,x */
-{
-    AC_OP_ABSX (&);
-}
-
-
-
-static void OPC_6502_3E (void)
-/* Opcode $3E: ROL abs,x */
-{
-    unsigned Addr;
-    unsigned Val;
-    Cycles = 7;
-    Addr = MemReadWord (Regs.PC+1) + Regs.XR;
-    Val  = MemReadByte (Addr);
-    ROL (Val);
-    MemWriteByte (Addr, Val);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_40 (void)
-/* Opcode $40: RTI */
-{
-    Cycles = 6;
-    Regs.SR = POP ();
-    Regs.PC = POP ();                /* PCL */
-    Regs.PC |= (POP () << 8);        /* PCH */
-}
-
-
-
-static void OPC_6502_41 (void)
-/* Opcode $41: EOR (zp,x) */
-{
-    AC_OP_ZPXIND (^);
-}
-
-
-
-static void OPC_6502_45 (void)
-/* Opcode $45: EOR zp */
-{
-    AC_OP_ZP (^);
-}
-
-
-
-static void OPC_6502_46 (void)
-/* Opcode $46: LSR zp */
-{
-    unsigned char ZPAddr;
-    unsigned char Val;
-    Cycles = 5;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    Val    = MemReadByte (ZPAddr);
-    SET_CF (Val & 0x01);
-    Val >>= 1;
-    MemWriteByte (ZPAddr, Val);
-    TEST_ZF (Val);
-    TEST_SF (Val);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_48 (void)
-/* Opcode $48: PHA */
-{
-    Cycles = 3;
-    PUSH (Regs.AC);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_49 (void)
-/* Opcode $49: EOR #imm */
-{
-    AC_OP_IMM (^);
-}
-
-
-
-static void OPC_6502_4A (void)
-/* Opcode $4A: LSR a */
-{
-    Cycles = 2;
-    SET_CF (Regs.AC & 0x01);
-    Regs.AC >>= 1;
-    TEST_ZF (Regs.AC);
-    TEST_SF (Regs.AC);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_4C (void)
-/* Opcode $4C: JMP abs */
-{
-    Cycles = 3;
-    Regs.PC = MemReadWord (Regs.PC+1);
-
-    ParaVirtHooks (&Regs);
-}
-
-
-
-static void OPC_6502_4D (void)
-/* Opcode $4D: EOR abs */
-{
-    AC_OP_ABS (^);
-}
-
-
-
-static void OPC_6502_4E (void)
-/* Opcode $4E: LSR abs */
-{
-    unsigned Addr;
-    unsigned char Val;
-    Cycles = 6;
-    Addr = MemReadWord (Regs.PC+1);
-    Val  = MemReadByte (Addr);
-    SET_CF (Val & 0x01);
-    Val >>= 1;
-    MemWriteByte (Addr, Val);
-    TEST_ZF (Val);
-    TEST_SF (Val);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_50 (void)
-/* Opcode $50: BVC */
-{
-    BRANCH (!GET_OF ());
-}
-
-
-
-static void OPC_6502_51 (void)
-/* Opcode $51: EOR (zp),y */
-{
-    AC_OP_ZPINDY (^);
-}
-
-
-
-static void OPC_6502_55 (void)
-/* Opcode $55: EOR zp,x */
-{
-    AC_OP_ZPX (^);
-}
-
-
-
-static void OPC_6502_56 (void)
-/* Opcode $56: LSR zp,x */
-{
-    unsigned char ZPAddr;
-    unsigned char Val;
-    Cycles = 6;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;
-    Val    = MemReadByte (ZPAddr);
-    SET_CF (Val & 0x01);
-    Val >>= 1;
-    MemWriteByte (ZPAddr, Val);
-    TEST_ZF (Val);
-    TEST_SF (Val);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_58 (void)
-/* Opcode $58: CLI */
-{
-    Cycles = 2;
-    SET_IF (0);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_59 (void)
-/* Opcode $59: EOR abs,y */
-{
-    AC_OP_ABSY (^);
-}
-
-
-
-static void OPC_6502_5D (void)
-/* Opcode $5D: EOR abs,x */
-{
-    AC_OP_ABSX (^);
-}
-
-
-
-static void OPC_6502_5E (void)
-/* Opcode $5E: LSR abs,x */
-{
-    unsigned Addr;
-    unsigned char Val;
-    Cycles = 7;
-    Addr = MemReadWord (Regs.PC+1) + Regs.XR;
-    Val  = MemReadByte (Addr);
-    SET_CF (Val & 0x01);
-    Val >>= 1;
-    MemWriteByte (Addr, Val);
-    TEST_ZF (Val);
-    TEST_SF (Val);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_60 (void)
-/* Opcode $60: RTS */
-{
-    Cycles = 6;
-    Regs.PC = POP ();                /* PCL */
-    Regs.PC |= (POP () << 8);        /* PCH */
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_61 (void)
-/* Opcode $61: ADC (zp,x) */
-{
-    unsigned char ZPAddr;
-    unsigned Addr;
-    Cycles = 6;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;
-    Addr   = MemReadZPWord (ZPAddr);
-    ADC (MemReadByte (Addr));
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_65 (void)
-/* Opcode $65: ADC zp */
-{
-    unsigned char ZPAddr;
-    Cycles = 3;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    ADC (MemReadByte (ZPAddr));
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_66 (void)
-/* Opcode $66: ROR zp */
-{
-    unsigned char ZPAddr;
-    unsigned Val;
-    Cycles = 5;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    Val    = MemReadByte (ZPAddr);
-    ROR (Val);
-    MemWriteByte (ZPAddr, Val);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_68 (void)
-/* Opcode $68: PLA */
-{
-    Cycles = 4;
-    Regs.AC = POP ();
-    TEST_ZF (Regs.AC);
-    TEST_SF (Regs.AC);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_69 (void)
-/* Opcode $69: ADC #imm */
-{
-    Cycles = 2;
-    ADC (MemReadByte (Regs.PC+1));
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_6A (void)
-/* Opcode $6A: ROR a */
-{
-    Cycles = 2;
-    ROR (Regs.AC);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_6C (void)
-/* Opcode $6C: JMP (ind) */
-{
-    unsigned PC, Lo, Hi;
-    Cycles = 5;
-    PC = Regs.PC;
-    Lo = MemReadWord (PC+1);
-
-    /* Emulate the 6502 bug */
-    Regs.PC = MemReadByte (Lo);
-    Hi = (Lo & 0xFF00) | ((Lo + 1) & 0xFF);
-    Regs.PC |= (MemReadByte (Hi) << 8);
-
-    /* Output a warning if the bug is triggered */
-    if (Hi != Lo + 1) {
-        Warning ("6502 indirect jump bug triggered at $%04X, ind addr = $%04X",
-                 PC, Lo);
-    }
-}
-
-
-
-static void OPC_65C02_6C (void)
-/* Opcode $6C: JMP (ind) */
-{
-    /* 6502 bug fixed here */
-    Cycles = 5;
-    Regs.PC = MemReadWord (MemReadWord (Regs.PC+1));
-}
-
-
-
-static void OPC_6502_6D (void)
-/* Opcode $6D: ADC abs */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr   = MemReadWord (Regs.PC+1);
-    ADC (MemReadByte (Addr));
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_6E (void)
-/* Opcode $6E: ROR abs */
-{
-    unsigned Addr;
-    unsigned Val;
-    Cycles = 6;
-    Addr = MemReadWord (Regs.PC+1);
-    Val  = MemReadByte (Addr);
-    ROR (Val);
-    MemWriteByte (Addr, Val);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_70 (void)
-/* Opcode $70: BVS */
-{
-    BRANCH (GET_OF ());
-}
-
-
-
-static void OPC_6502_71 (void)
-/* Opcode $71: ADC (zp),y */
-{
-    unsigned char ZPAddr;
-    unsigned Addr;
-    Cycles = 5;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    Addr   = MemReadZPWord (ZPAddr);
-    if (PAGE_CROSS (Addr, Regs.YR)) {
-        ++Cycles;
-    }
-    ADC (MemReadByte (Addr + Regs.YR));
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_75 (void)
-/* Opcode $75: ADC zp,x */
-{
-    unsigned char ZPAddr;
-    Cycles = 4;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;
-    ADC (MemReadByte (ZPAddr));
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_76 (void)
-/* Opcode $76: ROR zp,x */
-{
-    unsigned char ZPAddr;
-    unsigned Val;
-    Cycles = 6;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;
-    Val    = MemReadByte (ZPAddr);
-    ROR (Val);
-    MemWriteByte (ZPAddr, Val);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_78 (void)
-/* Opcode $78: SEI */
-{
-    Cycles = 2;
-    SET_IF (1);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_79 (void)
-/* Opcode $79: ADC abs,y */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr   = MemReadWord (Regs.PC+1);
-    if (PAGE_CROSS (Addr, Regs.YR)) {
-        ++Cycles;
-    }
-    ADC (MemReadByte (Addr + Regs.YR));
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_7D (void)
-/* Opcode $7D: ADC abs,x */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr   = MemReadWord (Regs.PC+1);
-    if (PAGE_CROSS (Addr, Regs.XR)) {
-        ++Cycles;
-    }
-    ADC (MemReadByte (Addr + Regs.XR));
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_7E (void)
-/* Opcode $7E: ROR abs,x */
-{
-    unsigned Addr;
-    unsigned Val;
-    Cycles = 7;
-    Addr = MemReadByte (Regs.PC+1) + Regs.XR;
-    Val  = MemReadByte (Addr);
-    ROR (Val);
-    MemWriteByte (Addr, Val);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_81 (void)
-/* Opcode $81: STA (zp,x) */
-{
-    unsigned char ZPAddr;
-    unsigned Addr;
-    Cycles = 6;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;
-    Addr   = MemReadZPWord (ZPAddr);
-    MemWriteByte (Addr, Regs.AC);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_84 (void)
-/* Opcode $84: STY zp */
-{
-    unsigned char ZPAddr;
-    Cycles = 3;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    MemWriteByte (ZPAddr, Regs.YR);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_85 (void)
-/* Opcode $85: STA zp */
-{
-    unsigned char ZPAddr;
-    Cycles = 3;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    MemWriteByte (ZPAddr, Regs.AC);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_86 (void)
-/* Opcode $86: STX zp */
-{
-    unsigned char ZPAddr;
-    Cycles = 3;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    MemWriteByte (ZPAddr, Regs.XR);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_88 (void)
-/* Opcode $88: DEY */
-{
-    Cycles = 2;
-    Regs.YR = (Regs.YR - 1) & 0xFF;
-    TEST_ZF (Regs.YR);
-    TEST_SF (Regs.YR);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_8A (void)
-/* Opcode $8A: TXA */
-{
-    Cycles = 2;
-    Regs.AC = Regs.XR;
-    TEST_ZF (Regs.AC);
-    TEST_SF (Regs.AC);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_8C (void)
-/* Opcode $8C: STY abs */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr = MemReadWord (Regs.PC+1);
-    MemWriteByte (Addr, Regs.YR);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_8D (void)
-/* Opcode $8D: STA abs */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr = MemReadWord (Regs.PC+1);
-    MemWriteByte (Addr, Regs.AC);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_8E (void)
-/* Opcode $8E: STX abs */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr = MemReadWord (Regs.PC+1);
-    MemWriteByte (Addr, Regs.XR);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_90 (void)
-/* Opcode $90: BCC */
-{
-    BRANCH (!GET_CF ());
-}
-
-
-
-static void OPC_6502_91 (void)
-/* Opcode $91: sta (zp),y */
-{
-    unsigned char ZPAddr;
-    unsigned Addr;
-    Cycles = 6;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    Addr   = MemReadZPWord (ZPAddr) + Regs.YR;
-    MemWriteByte (Addr, Regs.AC);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_94 (void)
-/* Opcode $94: STY zp,x */
-{
-    unsigned char ZPAddr;
-    Cycles = 4;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;
-    MemWriteByte (ZPAddr, Regs.YR);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_95 (void)
-/* Opcode $95: STA zp,x */
-{
-    unsigned char ZPAddr;
-    Cycles = 4;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;
-    MemWriteByte (ZPAddr, Regs.AC);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_96 (void)
-/* Opcode $96: stx zp,y */
-{
-    unsigned char ZPAddr;
-    Cycles = 4;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.YR;
-    MemWriteByte (ZPAddr, Regs.XR);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_98 (void)
-/* Opcode $98: TYA */
-{
-    Cycles = 2;
-    Regs.AC = Regs.YR;
-    TEST_ZF (Regs.AC);
-    TEST_SF (Regs.AC);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_99 (void)
-/* Opcode $99: STA abs,y */
-{
-    unsigned Addr;
-    Cycles = 5;
-    Addr   = MemReadWord (Regs.PC+1) + Regs.YR;
-    MemWriteByte (Addr, Regs.AC);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_9A (void)
-/* Opcode $9A: TXS */
-{
-    Cycles = 2;
-    Regs.SP = Regs.XR;
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_9D (void)
-/* Opcode $9D: STA abs,x */
-{
-    unsigned Addr;
-    Cycles = 5;
-    Addr   = MemReadWord (Regs.PC+1) + Regs.XR;
-    MemWriteByte (Addr, Regs.AC);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_A0 (void)
-/* Opcode $A0: LDY #imm */
-{
-    Cycles = 2;
-    Regs.YR = MemReadByte (Regs.PC+1);
-    TEST_ZF (Regs.YR);
-    TEST_SF (Regs.YR);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_A1 (void)
-/* Opcode $A1: LDA (zp,x) */
-{
-    unsigned char ZPAddr;
-    unsigned Addr;
-    Cycles = 6;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;
-    Addr = MemReadZPWord (ZPAddr);
-    Regs.AC = MemReadByte (Addr);
-    TEST_ZF (Regs.AC);
-    TEST_SF (Regs.AC);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_A2 (void)
-/* Opcode $A2: LDX #imm */
-{
-    Cycles = 2;
-    Regs.XR = MemReadByte (Regs.PC+1);
-    TEST_ZF (Regs.XR);
-    TEST_SF (Regs.XR);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_A4 (void)
-/* Opcode $A4: LDY zp */
-{
-    unsigned char ZPAddr;
-    Cycles = 3;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    Regs.YR = MemReadByte (ZPAddr);
-    TEST_ZF (Regs.YR);
-    TEST_SF (Regs.YR);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_A5 (void)
-/* Opcode $A5: LDA zp */
-{
-    unsigned char ZPAddr;
-    Cycles = 3;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    Regs.AC = MemReadByte (ZPAddr);
-    TEST_ZF (Regs.AC);
-    TEST_SF (Regs.AC);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_A6 (void)
-/* Opcode $A6: LDX zp */
-{
-    unsigned char ZPAddr;
-    Cycles = 3;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    Regs.XR = MemReadByte (ZPAddr);
-    TEST_ZF (Regs.XR);
-    TEST_SF (Regs.XR);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_A8 (void)
-/* Opcode $A8: TAY */
-{
-    Cycles = 2;
-    Regs.YR = Regs.AC;
-    TEST_ZF (Regs.YR);
-    TEST_SF (Regs.YR);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_A9 (void)
-/* Opcode $A9: LDA #imm */
-{
-    Cycles = 2;
-    Regs.AC = MemReadByte (Regs.PC+1);
-    TEST_ZF (Regs.AC);
-    TEST_SF (Regs.AC);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_AA (void)
-/* Opcode $AA: TAX */
-{
-    Cycles = 2;
-    Regs.XR = Regs.AC;
-    TEST_ZF (Regs.XR);
-    TEST_SF (Regs.XR);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_AC (void)
-/* Opcode $Regs.AC: LDY abs */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr   = MemReadWord (Regs.PC+1);
-    Regs.YR = MemReadByte (Addr);
-    TEST_ZF (Regs.YR);
-    TEST_SF (Regs.YR);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_AD (void)
-/* Opcode $AD: LDA abs */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr   = MemReadWord (Regs.PC+1);
-    Regs.AC = MemReadByte (Addr);
-    TEST_ZF (Regs.AC);
-    TEST_SF (Regs.AC);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_AE (void)
-/* Opcode $AE: LDX abs */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr   = MemReadWord (Regs.PC+1);
-    Regs.XR = MemReadByte (Addr);
-    TEST_ZF (Regs.XR);
-    TEST_SF (Regs.XR);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_B0 (void)
-/* Opcode $B0: BCS */
-{
-    BRANCH (GET_CF ());
-}
-
-
-
-static void OPC_6502_B1 (void)
-/* Opcode $B1: LDA (zp),y */
-{
-    unsigned char ZPAddr;
-    unsigned Addr;
-    Cycles = 5;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    Addr   = MemReadZPWord (ZPAddr);
-    if (PAGE_CROSS (Addr, Regs.YR)) {
-        ++Cycles;
-    }
-    Regs.AC = MemReadByte (Addr + Regs.YR);
-    TEST_ZF (Regs.AC);
-    TEST_SF (Regs.AC);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_B4 (void)
-/* Opcode $B4: LDY zp,x */
-{
-    unsigned char ZPAddr;
-    Cycles = 4;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;
-    Regs.YR = MemReadByte (ZPAddr);
-    TEST_ZF (Regs.YR);
-    TEST_SF (Regs.YR);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_B5 (void)
-/* Opcode $B5: LDA zp,x */
-{
-    unsigned char ZPAddr;
-    Cycles = 4;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;
-    Regs.AC = MemReadByte (ZPAddr);
-    TEST_ZF (Regs.AC);
-    TEST_SF (Regs.AC);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_B6 (void)
-/* Opcode $B6: LDX zp,y */
-{
-    unsigned char ZPAddr;
-    Cycles = 4;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.YR;
-    Regs.XR = MemReadByte (ZPAddr);
-    TEST_ZF (Regs.XR);
-    TEST_SF (Regs.XR);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_B8 (void)
-/* Opcode $B8: CLV */
-{
-    Cycles = 2;
-    SET_OF (0);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_B9 (void)
-/* Opcode $B9: LDA abs,y */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr = MemReadWord (Regs.PC+1);
-    if (PAGE_CROSS (Addr, Regs.YR)) {
-        ++Cycles;
-    }
-    Regs.AC = MemReadByte (Addr + Regs.YR);
-    TEST_ZF (Regs.AC);
-    TEST_SF (Regs.AC);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_BA (void)
-/* Opcode $BA: TSX */
-{
-    Cycles = 2;
-    Regs.XR = Regs.SP;
-    TEST_ZF (Regs.XR);
-    TEST_SF (Regs.XR);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_BC (void)
-/* Opcode $BC: LDY abs,x */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr = MemReadWord (Regs.PC+1);
-    if (PAGE_CROSS (Addr, Regs.XR)) {
-        ++Cycles;
-    }
-    Regs.YR = MemReadByte (Addr + Regs.XR);
-    TEST_ZF (Regs.YR);
-    TEST_SF (Regs.YR);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_BD (void)
-/* Opcode $BD: LDA abs,x */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr = MemReadWord (Regs.PC+1);
-    if (PAGE_CROSS (Addr, Regs.XR)) {
-        ++Cycles;
-    }
-    Regs.AC = MemReadByte (Addr + Regs.XR);
-    TEST_ZF (Regs.AC);
-    TEST_SF (Regs.AC);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_BE (void)
-/* Opcode $BE: LDX abs,y */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr = MemReadWord (Regs.PC+1);
-    if (PAGE_CROSS (Addr, Regs.YR)) {
-        ++Cycles;
-    }
-    Regs.XR = MemReadByte (Addr + Regs.YR);
-    TEST_ZF (Regs.XR);
-    TEST_SF (Regs.XR);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_C0 (void)
-/* Opcode $C0: CPY #imm */
-{
-    Cycles = 2;
-    CMP (Regs.YR, MemReadByte (Regs.PC+1));
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_C1 (void)
-/* Opcode $C1: CMP (zp,x) */
-{
-    unsigned char ZPAddr;
-    unsigned Addr;
-    Cycles = 6;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;
-    Addr   = MemReadZPWord (ZPAddr);
-    CMP (Regs.AC, MemReadByte (Addr));
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_C4 (void)
-/* Opcode $C4: CPY zp */
-{
-    unsigned char ZPAddr;
-    Cycles = 3;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    CMP (Regs.YR, MemReadByte (ZPAddr));
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_C5 (void)
-/* Opcode $C5: CMP zp */
-{
-    unsigned char ZPAddr;
-    Cycles = 3;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    CMP (Regs.AC, MemReadByte (ZPAddr));
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_C6 (void)
-/* Opcode $C6: DEC zp */
-{
-    unsigned char ZPAddr;
-    unsigned char Val;
-    Cycles = 5;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    Val    = MemReadByte (ZPAddr) - 1;
-    MemWriteByte (ZPAddr, Val);
-    TEST_ZF (Val);
-    TEST_SF (Val);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_C8 (void)
-/* Opcode $C8: INY */
-{
-    Cycles = 2;
-    Regs.YR = (Regs.YR + 1) & 0xFF;
-    TEST_ZF (Regs.YR);
-    TEST_SF (Regs.YR);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_C9 (void)
-/* Opcode $C9: CMP #imm */
-{
-    Cycles = 2;
-    CMP (Regs.AC, MemReadByte (Regs.PC+1));
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_CA (void)
-/* Opcode $CA: DEX */
-{
-    Cycles = 2;
-    Regs.XR = (Regs.XR - 1) & 0xFF;
-    TEST_ZF (Regs.XR);
-    TEST_SF (Regs.XR);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_CC (void)
-/* Opcode $CC: CPY abs */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr   = MemReadWord (Regs.PC+1);
-    CMP (Regs.YR, MemReadByte (Addr));
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_CD (void)
-/* Opcode $CD: CMP abs */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr   = MemReadWord (Regs.PC+1);
-    CMP (Regs.AC, MemReadByte (Addr));
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_CE (void)
-/* Opcode $CE: DEC abs */
-{
-    unsigned Addr;
-    unsigned char Val;
-    Cycles = 6;
-    Addr = MemReadWord (Regs.PC+1);
-    Val  = MemReadByte (Addr) - 1;
-    MemWriteByte (Addr, Val);
-    TEST_ZF (Val);
-    TEST_SF (Val);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_D0 (void)
-/* Opcode $D0: BNE */
-{
-    BRANCH (!GET_ZF ());
-}
-
-
-
-static void OPC_6502_D1 (void)
-/* Opcode $D1: CMP (zp),y */
-{
-    unsigned ZPAddr;
-    unsigned Addr;
-    Cycles = 5;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    Addr   = MemReadWord (ZPAddr);
-    if (PAGE_CROSS (Addr, Regs.YR)) {
-        ++Cycles;
-    }
-    CMP (Regs.AC, MemReadByte (Addr + Regs.YR));
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_D5 (void)
-/* Opcode $D5: CMP zp,x */
-{
-    unsigned char ZPAddr;
-    Cycles = 4;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;
-    CMP (Regs.AC, MemReadByte (ZPAddr));
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_D6 (void)
-/* Opcode $D6: DEC zp,x */
-{
-    unsigned char ZPAddr;
-    unsigned char Val;
-    Cycles = 6;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;
-    Val = MemReadByte (ZPAddr) - 1;
-    MemWriteByte (ZPAddr, Val);
-    TEST_ZF (Val);
-    TEST_SF (Val);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_D8 (void)
-/* Opcode $D8: CLD */
-{
-    Cycles = 2;
-    SET_DF (0);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_D9 (void)
-/* Opcode $D9: CMP abs,y */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr = MemReadWord (Regs.PC+1);
-    if (PAGE_CROSS (Addr, Regs.YR)) {
-        ++Cycles;
-    }
-    CMP (Regs.AC, MemReadByte (Addr + Regs.YR));
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_DD (void)
-/* Opcode $DD: CMP abs,x */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr = MemReadWord (Regs.PC+1);
-    if (PAGE_CROSS (Addr, Regs.XR)) {
-        ++Cycles;
-    }
-    CMP (Regs.AC, MemReadByte (Addr + Regs.XR));
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_DE (void)
-/* Opcode $DE: DEC abs,x */
-{
-    unsigned Addr;
-    unsigned char Val;
-    Cycles = 7;
-    Addr = MemReadWord (Regs.PC+1) + Regs.XR;
-    Val  = MemReadByte (Addr) - 1;
-    MemWriteByte (Addr, Val);
-    TEST_ZF (Val);
-    TEST_SF (Val);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_E0 (void)
-/* Opcode $E0: CPX #imm */
-{
-    Cycles = 2;
-    CMP (Regs.XR, MemReadByte (Regs.PC+1));
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_E1 (void)
-/* Opcode $E1: SBC (zp,x) */
-{
-    unsigned char ZPAddr;
-    unsigned Addr;
-    Cycles = 6;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;
-    Addr   = MemReadZPWord (ZPAddr);
-    SBC (MemReadByte (Addr));
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_E4 (void)
-/* Opcode $E4: CPX zp */
-{
-    unsigned char ZPAddr;
-    Cycles = 3;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    CMP (Regs.XR, MemReadByte (ZPAddr));
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_E5 (void)
-/* Opcode $E5: SBC zp */
-{
-    unsigned char ZPAddr;
-    Cycles = 3;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    SBC (MemReadByte (ZPAddr));
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_E6 (void)
-/* Opcode $E6: INC zp */
-{
-    unsigned char ZPAddr;
-    unsigned char Val;
-    Cycles = 5;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    Val    = MemReadByte (ZPAddr) + 1;
-    MemWriteByte (ZPAddr, Val);
-    TEST_ZF (Val);
-    TEST_SF (Val);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_E8 (void)
-/* Opcode $E8: INX */
-{
-    Cycles = 2;
-    Regs.XR = (Regs.XR + 1) & 0xFF;
-    TEST_ZF (Regs.XR);
-    TEST_SF (Regs.XR);
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_E9 (void)
-/* Opcode $E9: SBC #imm */
-{
-    Cycles = 2;
-    SBC (MemReadByte (Regs.PC+1));
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_EA (void)
-/* Opcode $EA: NOP */
-{
-    /* This one is easy... */
-    Cycles = 2;
-    Regs.PC += 1;
-}
-
-
-
-static void OPC_6502_EC (void)
-/* Opcode $EC: CPX abs */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr   = MemReadWord (Regs.PC+1);
-    CMP (Regs.XR, MemReadByte (Addr));
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_ED (void)
-/* Opcode $ED: SBC abs */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr   = MemReadWord (Regs.PC+1);
-    SBC (MemReadByte (Addr));
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_EE (void)
-/* Opcode $EE: INC abs */
-{
-    unsigned Addr;
-    unsigned char Val;
-    Cycles = 6;
-    Addr = MemReadWord (Regs.PC+1);
-    Val  = MemReadByte (Addr) + 1;
-    MemWriteByte (Addr, Val);
-    TEST_ZF (Val);
-    TEST_SF (Val);
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_F0 (void)
-/* Opcode $F0: BEQ */
-{
-    BRANCH (GET_ZF ());
-}
-
-
-
-static void OPC_6502_F1 (void)
-/* Opcode $F1: SBC (zp),y */
-{
-    unsigned char ZPAddr;
-    unsigned Addr;
-    Cycles = 5;
-    ZPAddr = MemReadByte (Regs.PC+1);
-    Addr   = MemReadZPWord (ZPAddr);
-    if (PAGE_CROSS (Addr, Regs.YR)) {
-        ++Cycles;
-    }
-    SBC (MemReadByte (Addr + Regs.YR));
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_F5 (void)
-/* Opcode $F5: SBC zp,x */
-{
-    unsigned char ZPAddr;
-    Cycles = 4;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;
-    SBC (MemReadByte (ZPAddr));
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_F6 (void)
-/* Opcode $F6: INC zp,x */
-{
-    unsigned char ZPAddr;
-    unsigned char Val;
-    Cycles = 6;
-    ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR;
-    Val  = MemReadByte (ZPAddr) + 1;
-    MemWriteByte (ZPAddr, Val);
-    TEST_ZF (Val);
-    TEST_SF (Val);
-    Regs.PC += 2;
-}
-
-
-
-static void OPC_6502_F8 (void)
-/* Opcode $F8: SED */
-{
-    SET_DF (1);
-}
-
-
-
-static void OPC_6502_F9 (void)
-/* Opcode $F9: SBC abs,y */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr   = MemReadWord (Regs.PC+1);
-    if (PAGE_CROSS (Addr, Regs.YR)) {
-        ++Cycles;
-    }
-    SBC (MemReadByte (Addr + Regs.YR));
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_FD (void)
-/* Opcode $FD: SBC abs,x */
-{
-    unsigned Addr;
-    Cycles = 4;
-    Addr   = MemReadWord (Regs.PC+1);
-    if (PAGE_CROSS (Addr, Regs.XR)) {
-        ++Cycles;
-    }
-    SBC (MemReadByte (Addr + Regs.XR));
-    Regs.PC += 3;
-}
-
-
-
-static void OPC_6502_FE (void)
-/* Opcode $FE: INC abs,x */
-{
-    unsigned Addr;
-    unsigned char Val;
-    Cycles = 7;
-    Addr = MemReadWord (Regs.PC+1) + Regs.XR;
-    Val  = MemReadByte (Addr) + 1;
-    MemWriteByte (Addr, Val);
-    TEST_ZF (Val);
-    TEST_SF (Val);
-    Regs.PC += 3;
-}
-
-
-
-/*****************************************************************************/
-/*                           Opcode handler tables                           */
-/*****************************************************************************/
-
-
-
-/* Opcode handler table for the 6502 */
-static const OPFunc OP6502Table[256] = {
-    OPC_6502_00,
-    OPC_6502_01,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_05,
-    OPC_6502_06,
-    OPC_Illegal,
-    OPC_6502_08,
-    OPC_6502_09,
-    OPC_6502_0A,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_0D,
-    OPC_6502_0E,
-    OPC_Illegal,
-    OPC_6502_10,
-    OPC_6502_11,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_15,
-    OPC_6502_16,
-    OPC_Illegal,
-    OPC_6502_18,
-    OPC_6502_19,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_1D,
-    OPC_6502_1E,
-    OPC_Illegal,
-    OPC_6502_20,
-    OPC_6502_21,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_24,
-    OPC_6502_25,
-    OPC_6502_26,
-    OPC_Illegal,
-    OPC_6502_28,
-    OPC_6502_29,
-    OPC_6502_2A,
-    OPC_Illegal,
-    OPC_6502_2C,
-    OPC_6502_2D,
-    OPC_6502_2E,
-    OPC_Illegal,
-    OPC_6502_30,
-    OPC_6502_31,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_35,
-    OPC_6502_36,
-    OPC_Illegal,
-    OPC_6502_38,
-    OPC_6502_39,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_3D,
-    OPC_6502_3E,
-    OPC_Illegal,
-    OPC_6502_40,
-    OPC_6502_41,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_45,
-    OPC_6502_46,
-    OPC_Illegal,
-    OPC_6502_48,
-    OPC_6502_49,
-    OPC_6502_4A,
-    OPC_Illegal,
-    OPC_6502_4C,
-    OPC_6502_4D,
-    OPC_6502_4E,
-    OPC_Illegal,
-    OPC_6502_50,
-    OPC_6502_51,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_55,
-    OPC_6502_56,
-    OPC_Illegal,
-    OPC_6502_58,
-    OPC_6502_59,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_5D,
-    OPC_6502_5E,
-    OPC_Illegal,
-    OPC_6502_60,
-    OPC_6502_61,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_65,
-    OPC_6502_66,
-    OPC_Illegal,
-    OPC_6502_68,
-    OPC_6502_69,
-    OPC_6502_6A,
-    OPC_Illegal,
-    OPC_6502_6C,
-    OPC_6502_6D,
-    OPC_6502_6E,
-    OPC_Illegal,
-    OPC_6502_70,
-    OPC_6502_71,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_75,
-    OPC_6502_76,
-    OPC_Illegal,
-    OPC_6502_78,
-    OPC_6502_79,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_7D,
-    OPC_6502_7E,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_81,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_84,
-    OPC_6502_85,
-    OPC_6502_86,
-    OPC_Illegal,
-    OPC_6502_88,
-    OPC_Illegal,
-    OPC_6502_8A,
-    OPC_Illegal,
-    OPC_6502_8C,
-    OPC_6502_8D,
-    OPC_6502_8E,
-    OPC_Illegal,
-    OPC_6502_90,
-    OPC_6502_91,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_94,
-    OPC_6502_95,
-    OPC_6502_96,
-    OPC_Illegal,
-    OPC_6502_98,
-    OPC_6502_99,
-    OPC_6502_9A,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_9D,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_A0,
-    OPC_6502_A1,
-    OPC_6502_A2,
-    OPC_Illegal,
-    OPC_6502_A4,
-    OPC_6502_A5,
-    OPC_6502_A6,
-    OPC_Illegal,
-    OPC_6502_A8,
-    OPC_6502_A9,
-    OPC_6502_AA,
-    OPC_Illegal,
-    OPC_6502_AC,
-    OPC_6502_AD,
-    OPC_6502_AE,
-    OPC_Illegal,
-    OPC_6502_B0,
-    OPC_6502_B1,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_B4,
-    OPC_6502_B5,
-    OPC_6502_B6,
-    OPC_Illegal,
-    OPC_6502_B8,
-    OPC_6502_B9,
-    OPC_6502_BA,
-    OPC_Illegal,
-    OPC_6502_BC,
-    OPC_6502_BD,
-    OPC_6502_BE,
-    OPC_Illegal,
-    OPC_6502_C0,
-    OPC_6502_C1,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_C4,
-    OPC_6502_C5,
-    OPC_6502_C6,
-    OPC_Illegal,
-    OPC_6502_C8,
-    OPC_6502_C9,
-    OPC_6502_CA,
-    OPC_Illegal,
-    OPC_6502_CC,
-    OPC_6502_CD,
-    OPC_6502_CE,
-    OPC_Illegal,
-    OPC_6502_D0,
-    OPC_6502_D1,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_D5,
-    OPC_6502_D6,
-    OPC_Illegal,
-    OPC_6502_D8,
-    OPC_6502_D9,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_DD,
-    OPC_6502_DE,
-    OPC_Illegal,
-    OPC_6502_E0,
-    OPC_6502_E1,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_E4,
-    OPC_6502_E5,
-    OPC_6502_E6,
-    OPC_Illegal,
-    OPC_6502_E8,
-    OPC_6502_E9,
-    OPC_6502_EA,
-    OPC_Illegal,
-    OPC_6502_EC,
-    OPC_6502_ED,
-    OPC_6502_EE,
-    OPC_Illegal,
-    OPC_6502_F0,
-    OPC_6502_F1,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_F5,
-    OPC_6502_F6,
-    OPC_Illegal,
-    OPC_6502_F8,
-    OPC_6502_F9,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_FD,
-    OPC_6502_FE,
-    OPC_Illegal,
-};
-
-
-
-/* Opcode handler table for the 65C02 */
-static const OPFunc OP65C02Table[256] = {
-    OPC_6502_00,
-    OPC_6502_01,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_05,
-    OPC_6502_06,
-    OPC_Illegal,
-    OPC_6502_08,
-    OPC_6502_09,
-    OPC_6502_0A,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_0D,
-    OPC_6502_0E,
-    OPC_Illegal,
-    OPC_6502_10,
-    OPC_6502_11,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_15,
-    OPC_6502_16,
-    OPC_Illegal,
-    OPC_6502_18,
-    OPC_6502_19,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_1D,
-    OPC_6502_1E,
-    OPC_Illegal,
-    OPC_6502_20,
-    OPC_6502_21,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_24,
-    OPC_6502_25,
-    OPC_6502_26,
-    OPC_Illegal,
-    OPC_6502_28,
-    OPC_6502_29,
-    OPC_6502_2A,
-    OPC_Illegal,
-    OPC_6502_2C,
-    OPC_6502_2D,
-    OPC_6502_2E,
-    OPC_Illegal,
-    OPC_6502_30,
-    OPC_6502_31,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_35,
-    OPC_6502_36,
-    OPC_Illegal,
-    OPC_6502_38,
-    OPC_6502_39,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_3D,
-    OPC_6502_3E,
-    OPC_Illegal,
-    OPC_6502_40,
-    OPC_6502_41,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_45,
-    OPC_6502_46,
-    OPC_Illegal,
-    OPC_6502_48,
-    OPC_6502_49,
-    OPC_6502_4A,
-    OPC_Illegal,
-    OPC_6502_4C,
-    OPC_6502_4D,
-    OPC_6502_4E,
-    OPC_Illegal,
-    OPC_6502_50,
-    OPC_6502_51,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_55,
-    OPC_6502_56,
-    OPC_Illegal,
-    OPC_6502_58,
-    OPC_6502_59,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_5D,
-    OPC_6502_5E,
-    OPC_Illegal,
-    OPC_6502_60,
-    OPC_6502_61,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_65,
-    OPC_6502_66,
-    OPC_Illegal,
-    OPC_6502_68,
-    OPC_6502_69,
-    OPC_6502_6A,
-    OPC_Illegal,
-    OPC_65C02_6C,
-    OPC_6502_6D,
-    OPC_6502_6E,
-    OPC_Illegal,
-    OPC_6502_70,
-    OPC_6502_71,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_75,
-    OPC_6502_76,
-    OPC_Illegal,
-    OPC_6502_78,
-    OPC_6502_79,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_7D,
-    OPC_6502_7E,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_81,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_84,
-    OPC_6502_85,
-    OPC_6502_86,
-    OPC_Illegal,
-    OPC_6502_88,
-    OPC_Illegal,
-    OPC_6502_8A,
-    OPC_Illegal,
-    OPC_6502_8C,
-    OPC_6502_8D,
-    OPC_6502_8E,
-    OPC_Illegal,
-    OPC_6502_90,
-    OPC_6502_91,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_94,
-    OPC_6502_95,
-    OPC_6502_96,
-    OPC_Illegal,
-    OPC_6502_98,
-    OPC_6502_99,
-    OPC_6502_9A,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_9D,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_A0,
-    OPC_6502_A1,
-    OPC_6502_A2,
-    OPC_Illegal,
-    OPC_6502_A4,
-    OPC_6502_A5,
-    OPC_6502_A6,
-    OPC_Illegal,
-    OPC_6502_A8,
-    OPC_6502_A9,
-    OPC_6502_AA,
-    OPC_Illegal,
-    OPC_6502_AC,
-    OPC_6502_AD,
-    OPC_6502_AE,
-    OPC_Illegal,
-    OPC_6502_B0,
-    OPC_6502_B1,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_B4,
-    OPC_6502_B5,
-    OPC_6502_B6,
-    OPC_Illegal,
-    OPC_6502_B8,
-    OPC_6502_B9,
-    OPC_6502_BA,
-    OPC_Illegal,
-    OPC_6502_BC,
-    OPC_6502_BD,
-    OPC_6502_BE,
-    OPC_Illegal,
-    OPC_6502_C0,
-    OPC_6502_C1,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_C4,
-    OPC_6502_C5,
-    OPC_6502_C6,
-    OPC_Illegal,
-    OPC_6502_C8,
-    OPC_6502_C9,
-    OPC_6502_CA,
-    OPC_Illegal,
-    OPC_6502_CC,
-    OPC_6502_CD,
-    OPC_6502_CE,
-    OPC_Illegal,
-    OPC_6502_D0,
-    OPC_6502_D1,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_D5,
-    OPC_6502_D6,
-    OPC_Illegal,
-    OPC_6502_D8,
-    OPC_6502_D9,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_DD,
-    OPC_6502_DE,
-    OPC_Illegal,
-    OPC_6502_E0,
-    OPC_6502_E1,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_E4,
-    OPC_6502_E5,
-    OPC_6502_E6,
-    OPC_Illegal,
-    OPC_6502_E8,
-    OPC_6502_E9,
-    OPC_6502_EA,
-    OPC_Illegal,
-    OPC_6502_EC,
-    OPC_6502_ED,
-    OPC_6502_EE,
-    OPC_Illegal,
-    OPC_6502_F0,
-    OPC_6502_F1,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_F5,
-    OPC_6502_F6,
-    OPC_Illegal,
-    OPC_6502_F8,
-    OPC_6502_F9,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_Illegal,
-    OPC_6502_FD,
-    OPC_6502_FE,
-    OPC_Illegal,
-};
-
-
-
-/* Tables with opcode handlers */
-static const OPFunc* Handlers[2] = {OP6502Table, OP65C02Table};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void IRQRequest (void)
-/* Generate an IRQ */
-{
-    /* Remember the request */
-    HaveIRQRequest = 1;
-}
-
-
-
-void NMIRequest (void)
-/* Generate an NMI */
-{
-    /* Remember the request */
-    HaveNMIRequest = 1;
-}
-
-
-
-void Reset (void)
-/* Generate a CPU RESET */
-{
-    /* Reset the CPU */
-    HaveIRQRequest = 0;
-    HaveNMIRequest = 0;
-    Regs.SR = 0;
-    Regs.PC = MemReadWord (0xFFFC);
-}
-
-
-
-unsigned ExecuteInsn (void)
-/* Execute one CPU instruction */
-{
-    /* If we have an NMI request, handle it */
-    if (HaveNMIRequest) {
-
-        HaveNMIRequest = 0;
-        PUSH (PCH);
-        PUSH (PCL);
-        PUSH (Regs.SR);
-        SET_IF (1);
-        Regs.PC = MemReadWord (0xFFFA);
-        Cycles = 7;
-
-    } else if (HaveIRQRequest && GET_IF () == 0) {
-
-        HaveIRQRequest = 0;
-        PUSH (PCH);
-        PUSH (PCL);
-        PUSH (Regs.SR);
-        SET_IF (1);
-        Regs.PC = MemReadWord (0xFFFE);
-        Cycles = 7;
-
-    } else {
-
-        /* Normal instruction - read the next opcode */
-        unsigned char OPC = MemReadByte (Regs.PC);
-
-        /* Execute it */
-        Handlers[CPU][OPC] ();
-    }
-
-    /* Count cycles */
-    TotalCycles += Cycles;
-
-    /* Return the number of clock cycles needed by this insn */
-    return Cycles;
-}
-
-
-
-unsigned long GetCycles (void)
-/* Return the total number of cycles executed */
-{
-    /* Return the total number of cycles */
-    return TotalCycles;
-}
diff --git a/src/sim65/6502.h b/src/sim65/6502.h
deleted file mode 100644 (file)
index 2cf2d4f..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  6502.h                                   */
-/*                                                                           */
-/*                           CPU core for the 6502                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2003-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef _6502_H
-#define _6502_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Supported CPUs */
-typedef enum CPUType {
-    CPU_6502,
-    CPU_65C02
-} CPUType;
-
-/* Current CPU */
-extern CPUType CPU;
-
-/* 6502 CPU registers */
-typedef struct CPURegs CPURegs;
-struct CPURegs {
-    unsigned    AC;             /* Accumulator */
-    unsigned    XR;             /* X register */
-    unsigned    YR;             /* Y register */
-    unsigned    ZR;             /* Z register */
-    unsigned    SR;             /* Status register */
-    unsigned    SP;             /* Stackpointer */
-    unsigned    PC;             /* Program counter */
-};
-
-/* Status register bits */
-#define CF      0x01            /* Carry flag */
-#define ZF      0x02            /* Zero flag */
-#define IF      0x04            /* Interrupt flag */
-#define DF      0x08            /* Decimal flag */
-#define BF      0x10            /* Break flag */
-#define OF      0x40            /* Overflow flag */
-#define SF      0x80            /* Sign flag */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Reset (void);
-/* Generate a CPU RESET */
-
-void IRQRequest (void);
-/* Generate an IRQ */
-
-void NMIRequest (void);
-/* Generate an NMI */
-
-unsigned ExecuteInsn (void);
-/* Execute one CPU instruction. Return the number of clock cycles for the
-** executed instruction.
-*/
-
-unsigned long GetCycles (void);
-/* Return the total number of clock cycles executed */
-
-
-
-/* End of 6502.h */
-
-#endif
diff --git a/src/sim65/error.c b/src/sim65/error.c
deleted file mode 100644 (file)
index 3114951..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 error.c                                   */
-/*                                                                           */
-/*                    Error handling for the sim65 simulator                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Warning (const char* Format, ...)
-/* Print a warning message */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "Warning: ");
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-}
-
-
-
-void Error (const char* Format, ...)
-/* Print an error message and die */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "Error: ");
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-    exit (EXIT_FAILURE);
-}
-
-
-
-void Internal (const char* Format, ...)
-/* Print an internal error message and die */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "Internal error: ");
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-    exit (EXIT_FAILURE);
-}
diff --git a/src/sim65/error.h b/src/sim65/error.h
deleted file mode 100644 (file)
index 7bee495..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 error.h                                   */
-/*                                                                           */
-/*                    Error handling for the sim65 simulator                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2003 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ERROR_H
-#define ERROR_H
-
-
-
-/* common */
-#include "attrib.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Warning (const char* Format, ...) attribute((format(printf,1,2)));
-/* Print a warning message */
-
-void Error (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print an error message and die */
-
-void Internal (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print an internal error message and die */
-
-
-
-/* End of error.h */
-
-#endif
diff --git a/src/sim65/main.c b/src/sim65/main.c
deleted file mode 100644 (file)
index 22f6831..0000000
+++ /dev/null
@@ -1,248 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  main.c                                   */
-/*                                                                           */
-/*                              sim65 main program                           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2009, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-
-/* common */
-#include "abend.h"
-#include "cmdline.h"
-#include "print.h"
-#include "version.h"
-
-/* sim65 */
-#include "6502.h"
-#include "error.h"
-#include "memory.h"
-#include "paravirt.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Name of program file */
-const char* ProgramFile;
-
-/* exit simulator after MaxCycles Cycles */
-unsigned long MaxCycles = 0;
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void Usage (void)
-{
-    printf ("Usage: %s [options] file [arguments]\n"
-            "Short options:\n"
-            "  -h\t\t\tHelp (this text)\n"
-            "  -v\t\t\tIncrease verbosity\n"
-            "  -V\t\t\tPrint the simulator version number\n"
-            "  -x <num>\t\tExit simulator after <num> cycles\n"
-            "\n"
-            "Long options:\n"
-            "  --help\t\tHelp (this text)\n"
-            "  --verbose\t\tIncrease verbosity\n"
-            "  --version\t\tPrint the simulator version number\n",
-            ProgName);
-}
-
-
-
-static void OptHelp (const char* Opt attribute ((unused)),
-                     const char* Arg attribute ((unused)))
-/* Print usage information and exit */
-{
-    Usage ();
-    exit (EXIT_SUCCESS);
-}
-
-
-
-static void OptVerbose (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Increase verbosity */
-{
-    ++Verbosity;
-}
-
-
-
-static void OptVersion (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Print the simulator version */
-{
-    fprintf (stderr, "sim65 V%s\n", GetVersionAsString ());
-}
-
-static void OptQuitXIns (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* quit after MaxCycles cycles */
-{
-    MaxCycles = strtoul(Arg, NULL, 0);
-}
-
-static void ReadProgramFile (void)
-/* Load program into memory */
-{
-    int Val;
-    unsigned Addr = 0x0200;
-
-    /* Open the file */
-    FILE* F = fopen (ProgramFile, "rb");
-    if (F == 0) {
-        Error ("Cannot open `%s': %s", ProgramFile, strerror (errno));
-    }
-
-    /* Get the CPU type from the file header */
-    if ((Val = fgetc(F)) != EOF) {
-        if (Val != CPU_6502 && Val != CPU_65C02) {
-            Error ("`%s': Invalid CPU type", ProgramFile);
-        }
-        CPU = Val;
-    }
-
-    /* Read the file body into memory */
-    while ((Val = fgetc(F)) != EOF) {
-        if (Addr == 0xFF00) {
-            Error ("`%s': To large to fit into $0200-$FFF0", ProgramFile);
-        }
-        MemWriteByte (Addr++, (unsigned char) Val);
-    }
-
-    /* Check for errors */
-    if (ferror (F)) {
-        Error ("Error reading from `%s': %s", ProgramFile, strerror (errno));
-    }
-
-    /* Close the file */
-    fclose (F);
-
-    Print (stdout, 1, "Loaded `%s' at $0200-$%04X\n", ProgramFile, Addr - 1);
-}
-
-
-
-int main (int argc, char* argv[])
-{
-    /* Program long options */
-    static const LongOpt OptTab[] = {
-        { "--help",             0,      OptHelp                 },
-        { "--verbose",          0,      OptVerbose              },
-        { "--version",          0,      OptVersion              },
-    };
-
-    unsigned I;
-
-    /* Initialize the cmdline module */
-    InitCmdLine (&argc, &argv, "sim65");
-
-    /* Parse the command line */
-    I = 1;
-    while (I < ArgCount) {
-
-        /* Get the argument */
-        const char* Arg = ArgVec[I];
-
-        /* Check for an option */
-        if (Arg [0] == '-') {
-
-            switch (Arg [1]) {
-
-                case '-':
-                    LongOption (&I, OptTab, sizeof(OptTab)/sizeof(OptTab[0]));
-                    break;
-
-                case 'h':
-                case '?':
-                    OptHelp (Arg, 0);
-                    break;
-
-                case 'v':
-                    OptVerbose (Arg, 0);
-                    break;
-
-                case 'V':
-                    OptVersion (Arg, 0);
-                    break;
-
-                case 'x':
-                    OptQuitXIns (Arg, GetArg (&I, 2));
-                    break;
-
-                default:
-                    UnknownOption (Arg);
-                    break;
-            }
-        } else {
-            ProgramFile = Arg;
-            break;
-        }
-
-        /* Next argument */
-        ++I;
-    }
-
-    /* Do we have a program file? */
-    if (ProgramFile == 0) {
-        AbEnd ("No program file");
-    }
-
-    ParaVirtInit (I);
-
-    MemInit ();
-
-    ReadProgramFile ();
-
-    Reset ();
-
-    while (1) {
-        ExecuteInsn ();
-        if (MaxCycles && (GetCycles () >= MaxCycles)) {
-            Error ("Maximum number of cycles reached.");
-            exit (-99); /* do not ues EXIT_FAILURE to avoid conflicts with the
-                           same value being used in a test program */
-        }
-    }
-
-    /* Return an apropriate exit code */
-    return EXIT_SUCCESS;
-}
diff --git a/src/sim65/memory.c b/src/sim65/memory.c
deleted file mode 100644 (file)
index 305b26a..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 memory.h                                  */
-/*                                                                           */
-/*                  Memory subsystem for the 6502 simulator                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-#include "memory.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* THE memory */
-static unsigned char Mem[0x10000];
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void MemWriteByte (unsigned Addr, unsigned char Val)
-/* Write a byte to a memory location */
-{
-    Mem[Addr] = Val;
-}
-
-
-
-unsigned char MemReadByte (unsigned Addr)
-/* Read a byte from a memory location */
-{
-    return Mem[Addr];
-}
-
-
-
-unsigned MemReadWord (unsigned Addr)
-/* Read a word from a memory location */
-{
-    unsigned W = MemReadByte (Addr++);
-    return (W | (MemReadByte (Addr) << 8));
-}
-
-
-
-unsigned MemReadZPWord (unsigned char Addr)
-/* Read a word from the zero page. This function differs from ReadMemW in that
-** the read will always be in the zero page, even in case of an address
-** overflow.
-*/
-{
-    unsigned W = MemReadByte (Addr++);
-    return (W | (MemReadByte (Addr) << 8));
-}
-
-
-
-void MemInit (void)
-/* Initialize the memory subsystem */
-{
-    /* Fill momory with illegal opcode */
-    memset (Mem, 0xFF, sizeof (Mem));
-
-    /* Set RESET vector to 0x0200 */
-    Mem[0xFFFC] = 0x00;
-    Mem[0xFFFD] = 0x02;
-}
diff --git a/src/sim65/memory.h b/src/sim65/memory.h
deleted file mode 100644 (file)
index 5de3a2b..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 memory.h                                  */
-/*                                                                           */
-/*                  Memory subsystem for the 6502 simulator                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2002-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef MEMORY_H
-#define MEMORY_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void MemWriteByte (unsigned Addr, unsigned char Val);
-/* Write a byte to a memory location */
-
-unsigned char MemReadByte (unsigned Addr);
-/* Read a byte from a memory location */
-
-unsigned MemReadWord (unsigned Addr);
-/* Read a word from a memory location */
-
-unsigned MemReadZPWord (unsigned char Addr);
-/* Read a word from the zero page. This function differs from ReadMemW in that
-** the read will always be in the zero page, even in case of an address
-** overflow.
-*/
-
-void MemInit (void);
-/* Initialize the memory subsystem */
-
-
-
-/* End of memory.h */
-
-#endif
diff --git a/src/sim65/paravirt.c b/src/sim65/paravirt.c
deleted file mode 100644 (file)
index 0deb59a..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                paravirt.c                                 */
-/*                                                                           */
-/*                Paravirtualization for the sim65 6502 simulator            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2013-2013 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#if defined(_WIN32)
-#  define O_INITIAL O_BINARY
-#else
-#  define O_INITIAL 0
-#endif
-#if defined(_MSC_VER)
-/* Microsoft compiler */
-#  include <io.h>
-#else
-/* Anyone else */
-#  include <unistd.h>
-#endif
-
-/* common */
-#include "cmdline.h"
-#include "print.h"
-#include "xmalloc.h"
-
-/* sim65 */
-#include "6502.h"
-#include "memory.h"
-#include "paravirt.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-typedef void (*PVFunc) (CPURegs* Regs);
-
-static unsigned ArgStart;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static unsigned GetAX (CPURegs* Regs)
-{
-    return Regs->AC + (Regs->XR << 8);
-}
-
-
-
-static void SetAX (CPURegs* Regs, unsigned Val)
-{
-    Regs->AC = Val & 0xFF;
-    Val >>= 8;
-    Regs->XR = Val;
-}
-
-
-
-static void MemWriteWord (unsigned Addr, unsigned Val)
-{
-    MemWriteByte (Addr, Val);
-    Val >>= 8;
-    MemWriteByte (Addr + 1, Val);
-}
-
-
-
-static unsigned char Pop (CPURegs* Regs)
-{
-    return MemReadByte (0x0100 + ++Regs->SP);
-}
-
-
-
-static unsigned PopParam (unsigned char Incr)
-{
-    unsigned SP = MemReadZPWord (0x00);
-    unsigned Val = MemReadWord (SP);
-    MemWriteWord (0x0000, SP + Incr);
-    return Val;
-}
-
-
-
-static void PVArgs (CPURegs* Regs)
-{
-    unsigned ArgC = ArgCount - ArgStart;
-    unsigned ArgV = GetAX (Regs);
-    unsigned SP   = MemReadZPWord (0x00);
-    unsigned Args = SP - (ArgC + 1) * 2;
-
-    Print (stdout, 2, "PVArgs ($%04X)\n", ArgV);
-
-    MemWriteWord (ArgV, Args);
-
-    SP = Args;
-    while (ArgStart < ArgCount) {
-        unsigned I = 0;
-        const char* Arg = ArgVec[ArgStart++];
-        SP -= strlen (Arg) + 1;
-        do {
-            MemWriteByte (SP + I, Arg[I]);
-        }
-        while (Arg[I++]);
-
-        MemWriteWord (Args, SP);
-        Args += 2;
-    }
-    MemWriteWord (Args, 0x0000);
-
-    MemWriteWord (0x0000, SP);
-    SetAX (Regs, ArgC);
-}
-
-
-
-static void PVExit (CPURegs* Regs)
-{
-    Print (stdout, 1, "PVExit ($%02X)\n", Regs->AC);
-
-    exit (Regs->AC);
-}
-
-
-
-static void PVOpen (CPURegs* Regs)
-{
-    char Path[1024];
-    int OFlag = O_INITIAL;
-    unsigned RetVal, I = 0;
-
-    unsigned Mode  = PopParam (Regs->YR - 4);
-    unsigned Flags = PopParam (2);
-    unsigned Name  = PopParam (2);
-
-    do {
-        Path[I] = MemReadByte (Name++);
-    }
-    while (Path[I++]);
-
-    Print (stdout, 2, "PVOpen (\"%s\", $%04X)\n", Path, Flags);
-
-    switch (Flags & 0x03) {
-        case 0x01:
-            OFlag |= O_RDONLY;
-            break;
-        case 0x02:
-            OFlag |= O_WRONLY;
-            break;
-        case 0x03:
-            OFlag |= O_RDWR;
-            break;
-    }
-    if (Flags & 0x10) {
-        OFlag |= O_CREAT;
-    }
-    if (Flags & 0x20) {
-        OFlag |= O_TRUNC;
-    }
-    if (Flags & 0x40) {
-        OFlag |= O_APPEND;
-    }
-    if (Flags & 0x80) {
-        OFlag |= O_EXCL;
-    }
-
-    /* Avoid gcc warning */
-    (void) Mode;
-
-    RetVal = open (Path, OFlag);
-
-    SetAX (Regs, RetVal);
-}
-
-
-
-static void PVClose (CPURegs* Regs)
-{
-    unsigned RetVal;
-
-    unsigned FD = GetAX (Regs);
-
-    Print (stdout, 2, "PVClose ($%04X)\n", FD);
-
-    RetVal = close (FD);
-
-    SetAX (Regs, RetVal);
-}
-
-
-
-static void PVRead (CPURegs* Regs)
-{
-    unsigned char* Data;
-    unsigned RetVal, I = 0;
-
-    unsigned Count = GetAX (Regs);
-    unsigned Buf   = PopParam (2);
-    unsigned FD    = PopParam (2);
-
-    Print (stdout, 2, "PVRead ($%04X, $%04X, $%04X)\n", FD, Buf, Count);
-
-    Data = xmalloc (Count);
-
-    RetVal = read (FD, Data, Count);
-
-    if (RetVal != (unsigned) -1) {
-        while (I < RetVal) {
-            MemWriteByte (Buf++, Data[I++]);
-        }
-    }
-    xfree (Data);
-
-    SetAX (Regs, RetVal);
-}
-
-
-
-static void PVWrite (CPURegs* Regs)
-{
-    unsigned char* Data;
-    unsigned RetVal, I = 0;
-
-    unsigned Count = GetAX (Regs);
-    unsigned Buf   = PopParam (2);
-    unsigned FD    = PopParam (2);
-
-    Print (stdout, 2, "PVWrite ($%04X, $%04X, $%04X)\n", FD, Buf, Count);
-
-    Data = xmalloc (Count);
-    while (I < Count) {
-        Data[I++] = MemReadByte (Buf++);
-    }
-
-    RetVal = write (FD, Data, Count);
-
-    xfree (Data);
-
-    SetAX (Regs, RetVal);
-}
-
-
-
-static const PVFunc Hooks[] = {
-    PVArgs,
-    PVExit,
-    PVOpen,
-    PVClose,
-    PVRead,
-    PVWrite,
-};
-
-
-
-void ParaVirtInit (unsigned aArgStart)
-/* Initialize the paravirtualization subsystem */
-{
-    ArgStart = aArgStart;
-};
-
-
-
-void ParaVirtHooks (CPURegs* Regs)
-/* Potentially execute paravirtualization hooks */
-{
-    /* Check for paravirtualization address range */
-    if (Regs->PC <  0xFFF0 ||
-        Regs->PC >= 0xFFF0 + sizeof (Hooks) / sizeof (Hooks[0])) {
-        return;
-    }
-
-    /* Call paravirtualization hook */
-    Hooks[Regs->PC - 0xFFF0] (Regs);
-
-    /* Simulate RTS */
-    Regs->PC = Pop(Regs) + (Pop(Regs) << 8) + 1;
-}
diff --git a/src/sim65/paravirt.h b/src/sim65/paravirt.h
deleted file mode 100644 (file)
index 34317b4..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                paravirt.h                                 */
-/*                                                                           */
-/*                Paravirtualization for the sim65 6502 simulator            */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2013-2013 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef PARAVIRT_H
-#define PARAVIRT_H
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void ParaVirtInit (unsigned aArgStart);
-/* Initialize the paravirtualization subsystem */
-
-void ParaVirtHooks (CPURegs* Regs);
-/* Potentially execute paravirtualization hooks */
-
-
-
-/* End of paravirt.h */
-
-#endif
diff --git a/src/sp65.vcxproj b/src/sp65.vcxproj
deleted file mode 100644 (file)
index 8db9834..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{4388D1AF-C7EA-4AD4-8E80-CA1FB7BF76BF}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>sp65</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <OutDir>$(SolutionDir)..\bin\</OutDir>
-    <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories>
-      <TreatWarningAsError>true</TreatWarningAsError>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>false</GenerateDebugInformation>
-      <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="sp65\asm.c" />
-    <ClCompile Include="sp65\attr.c" />
-    <ClCompile Include="sp65\bin.c" />
-    <ClCompile Include="sp65\bitmap.c" />
-    <ClCompile Include="sp65\c.c" />
-    <ClCompile Include="sp65\color.c" />
-    <ClCompile Include="sp65\convert.c" />
-    <ClCompile Include="sp65\error.c" />
-    <ClCompile Include="sp65\fileio.c" />
-    <ClCompile Include="sp65\geosbitmap.c" />
-    <ClCompile Include="sp65\geosicon.c" />
-    <ClCompile Include="sp65\input.c" />
-    <ClCompile Include="sp65\koala.c" />
-    <ClCompile Include="sp65\lynxsprite.c" />
-    <ClCompile Include="sp65\main.c" />
-    <ClCompile Include="sp65\output.c" />
-    <ClCompile Include="sp65\palette.c" />
-    <ClCompile Include="sp65\pcx.c" />
-    <ClCompile Include="sp65\raw.c" />
-    <ClCompile Include="sp65\vic2sprite.c" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="sp65\asm.h" />
-    <ClInclude Include="sp65\attr.h" />
-    <ClInclude Include="sp65\bin.h" />
-    <ClInclude Include="sp65\bitmap.h" />
-    <ClInclude Include="sp65\c.h" />
-    <ClInclude Include="sp65\color.h" />
-    <ClInclude Include="sp65\convert.h" />
-    <ClInclude Include="sp65\error.h" />
-    <ClInclude Include="sp65\fileio.h" />
-    <ClInclude Include="sp65\geosbitmap.h" />
-    <ClInclude Include="sp65\geosicon.h" />
-    <ClInclude Include="sp65\input.h" />
-    <ClInclude Include="sp65\koala.h" />
-    <ClInclude Include="sp65\lynxsprite.h" />
-    <ClInclude Include="sp65\output.h" />
-    <ClInclude Include="sp65\palette.h" />
-    <ClInclude Include="sp65\pcx.h" />
-    <ClInclude Include="sp65\pixel.h" />
-    <ClInclude Include="sp65\raw.h" />
-    <ClInclude Include="sp65\vic2sprite.h" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/src/sp65/asm.c b/src/sp65/asm.c
deleted file mode 100644 (file)
index 8f520cb..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   asm.c                                   */
-/*                                                                           */
-/*          Assembler output for the sp65 sprite and bitmap utility          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-
-/* common */
-#include "chartype.h"
-#include "check.h"
-#include "cmdline.h"
-#include "version.h"
-
-/* sp65 */
-#include "attr.h"
-#include "asm.h"
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static int ValidIdentifier (const char* L)
-/* Check an assembler label for validity */
-{
-    /* Must begin with underscore or alphabetic character */
-    if (*L != '_' && !IsAlpha (*L)) {
-        return 0;
-    }
-    ++L;
-
-    /* Remainder must be as above plus digits */
-    while (*L) {
-        if (*L != '_' && !IsAlNum (*L)) {
-            return 0;
-        }
-        ++L;
-    }
-
-    /* Ok */
-    return 1;
-}
-
-
-
-static unsigned GetBytesPerLine (const Collection* A)
-/* Return the number of bytes per line from the attribute collection A */
-{
-    char        C;
-    unsigned    BytesPerLine = 16;
-
-    /* Check for a bytesperline attribute */
-    const char* V = GetAttrVal (A, "bytesperline");
-    if ((V && sscanf (V, "%u%c", &BytesPerLine, &C) != 1) ||
-        (BytesPerLine < 1 || BytesPerLine > 64)) {
-        Error ("Invalid value for attribute `bytesperline'");
-    }
-    return BytesPerLine;
-}
-
-
-
-static unsigned GetBase (const Collection* A)
-/* Return the number base from the attribute collection A */
-{
-    char        C;
-    unsigned    Base = 16;
-
-    /* Check for a base attribute */
-    const char* V = GetAttrVal (A, "base");
-    if ((V && sscanf (V, "%u%c", &Base, &C) != 1) ||
-        (Base != 2 && Base != 10 && Base != 16)) {
-        Error ("Invalid value for attribute `base'");
-    }
-    return Base;
-}
-
-
-
-static const char* GetIdentifier (const Collection* A)
-/* Return the label identifier from the attribute collection A */
-{
-    /* Check for a ident attribute */
-    const char* Ident = GetAttrVal (A, "ident");
-    if (Ident && !ValidIdentifier (Ident)) {
-        Error ("Invalid value for attribute `ident'");
-    }
-    return Ident;
-}
-
-
-
-void WriteAsmFile (const StrBuf* Data, const Collection* A, const Bitmap* B)
-/* Write the contents of Data to the given file in assembler (ca65) format */
-{
-    FILE*       F;
-    const char* D;
-    unsigned    Size;
-
-
-    /* Get the name of the image */
-    const StrBuf* S = GetBitmapName (B);
-
-    /* Get the file name */
-    const char* Name = NeedAttrVal (A, "name", "write");
-
-    /* Check the number of bytes per line */
-    unsigned BytesPerLine = GetBytesPerLine (A);
-
-    /* Get the number base */
-    unsigned Base = GetBase (A);
-
-    /* Get the identifier */
-    const char* Ident = GetIdentifier (A);
-
-    /* Open the output file */
-    F = fopen (Name, "w");
-    if (F == 0) {
-        Error ("Cannot open output file `%s': %s", Name, strerror (errno));
-    }
-
-    /* Write a readable header */
-    fprintf (F,
-             ";\n"
-             "; This file was generated by %s %s from\n"
-             "; %.*s (%ux%u, %u colors%s)\n"
-             ";\n"
-             "\n",
-             ProgName,
-             GetVersionAsString (),
-             SB_GetLen (S), SB_GetConstBuf (S),
-             GetBitmapWidth (B), GetBitmapHeight (B),
-             GetBitmapColors (B),
-             BitmapIsIndexed (B)? ", indexed" : "");
-
-    /* If we have an assembler label, output that */
-    if (Ident) {
-        fprintf (F,
-                 ".proc   %s\n"
-                 "        COLORS = %u\n"
-                 "        WIDTH  = %u\n"
-                 "        HEIGHT = %u\n",
-                 Ident,
-                 GetBitmapColors (B),
-                 GetBitmapWidth (B),
-                 GetBitmapHeight (B));
-    }
-
-    /* Write the data */
-    D    = SB_GetConstBuf (Data);
-    Size = SB_GetLen (Data);
-    while (Size) {
-
-        unsigned I;
-
-        /* Output one line */
-        unsigned Chunk = Size;
-        if (Chunk > BytesPerLine) {
-            Chunk = BytesPerLine;
-        }
-        fputs ("        .byte   ", F);
-        for (I = 0; I < Chunk; ++I) {
-            unsigned char V = *D++;
-            if (I > 0) {
-                fputc (',', F);
-            }
-            switch (Base) {
-                case 2:
-                    fprintf (F, "%%%u%u%u%u%u%u%u%u",
-                             (V >> 7) & 0x01, (V >> 6) & 0x01,
-                             (V >> 5) & 0x01, (V >> 4) & 0x01,
-                             (V >> 3) & 0x01, (V >> 2) & 0x01,
-                             (V >> 1) & 0x01, (V >> 0) & 0x01);
-                    break;
-
-                case 10:
-                    fprintf (F, "%u", V);
-                    break;
-
-                case 16:
-                    fprintf (F, "$%02X", V);
-                    break;
-
-            }
-        }
-        fputc ('\n', F);
-
-        /* Bump the counters */
-        Size -= Chunk;
-    }
-
-    /* Terminate the .proc if we had an identifier */
-    if (Ident) {
-        fputs (".endproc\n", F);
-    }
-
-    /* Add an empty line at the end */
-    fputc ('\n', F);
-
-    /* Close the file */
-    if (fclose (F) != 0) {
-        Error ("Error closing output file `%s': %s", Name, strerror (errno));
-    }
-}
diff --git a/src/sp65/asm.h b/src/sp65/asm.h
deleted file mode 100644 (file)
index 18c55e8..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   asm.h                                   */
-/*                                                                           */
-/*          Assembler output for the sp65 sprite and bitmap utility          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ASM_H
-#define ASM_H
-
-
-
-/* common */
-#include "coll.h"
-#include "strbuf.h"
-
-/* sp65 */
-#include "bitmap.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void WriteAsmFile (const StrBuf* Data, const Collection* A, const Bitmap* B);
-/* Write the contents of Data to a file in assembler (ca65) format */
-
-
-
-/* End of asm.h */
-
-#endif
diff --git a/src/sp65/attr.c b/src/sp65/attr.c
deleted file mode 100644 (file)
index db026af..0000000
+++ /dev/null
@@ -1,306 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  attr.c                                   */
-/*                                                                           */
-/*                          Command line attributes                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <string.h>
-
-/* common */
-#include "chartype.h"
-#include "strbuf.h"
-#include "xmalloc.h"
-
-/* sp65 */
-#include "attr.h"
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Attr* NewAttr (const char* Name, const char* Value)
-/* Create a new attribute */
-{
-    /* Determine the string lengths */
-    unsigned NameLen  = strlen (Name);
-    unsigned ValueLen = strlen (Value);
-
-    /* Allocate memory */
-    Attr* A = xmalloc (sizeof (Attr) + ValueLen + NameLen + 1);
-
-    /* Initialize the fields */
-    A->Name = A->Value + ValueLen + 1;
-    memcpy (A->Value, Value, ValueLen + 1);
-    memcpy (A->Name, Name, NameLen + 1);
-
-    /* Return the new struct */
-    return A;
-}
-
-
-
-void FreeAttr (Attr* A)
-/* Free an attribute structure */
-{
-    xfree (A);
-}
-
-
-
-void DumpAttrColl (const Collection* C)
-/* Dump a collection of attribute/value pairs for debugging */
-{
-    unsigned I;
-    for (I = 0; I < CollCount (C); ++I) {
-        const Attr* A = CollConstAt (C, I);
-        printf ("%s=%s\n", A->Name, A->Value);
-    }
-}
-
-
-
-int FindAttr (const Collection* C, const char* Name, unsigned* Index)
-/* Search for an attribute with the given name in the collection. If it is
-** found, the function returns true and Index contains the index of the
-** entry. If Name isn't found, the function returns false and Index
-** will contain the insert position.
-*/
-{
-    /* Do a binary search */
-    int Lo = 0;
-    int Hi = (int) CollCount (C) - 1;
-    while (Lo <= Hi) {
-
-        /* Mid of range */
-        int Cur = (Lo + Hi) / 2;
-
-        /* Get item */
-        const Attr* A = CollAt (C, Cur);
-
-        /* Compare */
-        int Res = strcmp (A->Name, Name);
-
-        /* Found? */
-        if (Res < 0) {
-            Lo = Cur + 1;
-        } else if (Res > 0) {
-            Hi = Cur - 1;
-        } else {
-            /* Found! */
-            *Index = Cur;
-            return 1;
-        }
-    }
-
-    /* Pass back the insert position */
-    *Index = Lo;
-    return 0;
-}
-
-
-
-const Attr* GetAttr (const Collection* C, const char* Name)
-/* Search for an attribute with the given name and return it. The function
-** returns NULL if the attribute wasn't found.
-*/
-{
-    /* Search for the attribute and return it */
-    unsigned Index;
-    if (FindAttr (C, Name, &Index)) {
-        return CollConstAt (C, Index);
-    } else {
-        /* Not found */
-        return 0;
-    }
-}
-
-
-
-const Attr* NeedAttr (const Collection* C, const char* Name, const char* Op)
-/* Search for an attribute with the given name and return it. If the attribute
-** is not found, the function terminates with an error using Op as additional
-** context in the error message.
-*/
-{
-    /* Search for the attribute and return it */
-    unsigned Index;
-    if (!FindAttr (C, Name, &Index)) {
-        Error ("Found no attribute named `%s' for operation %s", Name, Op);
-    }
-    return CollConstAt (C, Index);
-}
-
-
-
-const char* GetAttrVal (const Collection* C, const char* Name)
-/* Search for an attribute with the given name and return its value. The
-** function returns NULL if the attribute wasn't found.
-*/
-{
-    const Attr* A = GetAttr (C, Name);
-    return (A == 0)? 0 : A->Value;
-}
-
-
-
-const char* NeedAttrVal (const Collection* C, const char* Name, const char* Op)
-/* Search for an attribute with the given name and return its value. If the
-** attribute wasn't not found, the function terminates with an error using
-** Op as additional context in the error message.
-*/
-{
-    const Attr* A = NeedAttr (C, Name, Op);
-    return (A == 0)? 0 : A->Value;
-}
-
-
-
-void AddAttr (Collection* C, const char* Name, const char* Value)
-/* Add an attribute to an alphabetically sorted attribute collection */
-{
-    /* Create a new attribute entry */
-    Attr* A = NewAttr (Name, Value);
-
-    /* Search for the attribute. If it is there, we have a duplicate, otherwise
-    ** we have the insert position.
-    */
-    unsigned Index;
-    if (FindAttr (C, Name, &Index)) {
-        Error ("Duplicate command line attribute `%s'", Name);
-    }
-
-    /* Insert the attribute */
-    CollInsert (C, A, Index);
-}
-
-
-
-void SplitAddAttr (Collection* C, const char* Combined, const char* Name)
-/* Split a combined name/value pair and add it as an attribute to C. Some
-** attributes may not need a name. If the name is missing, use Name. If
-** Name is NULL, terminate with an error.
-*/
-{
-    /* Name and value are separated by an equal sign */
-    const char* Pos = strchr (Combined, '=');
-    if (Pos == 0) {
-        /* Combined is actually a value */
-        if (Name == 0) {
-            Error ("Command line attribute `%s' doesn't contain a name", Combined);
-        }
-        AddAttr (C, Name, Combined);
-    } else {
-        /* Must split name and value */
-        StrBuf N = AUTO_STRBUF_INITIALIZER;
-        SB_CopyBuf (&N, Combined, Pos - Combined);
-        SB_Terminate (&N);
-
-        /* Add the attribute */
-        AddAttr (C, SB_GetConstBuf (&N), Pos+1);
-
-        /* Release memory */
-        SB_Done (&N);
-    }
-}
-
-
-
-Collection* ParseAttrList (const char* List, const char** NameList, unsigned NameCount)
-/* Parse a list containing name/value pairs into a sorted collection. Some
-** attributes may not need a name, so NameList contains these names. If there
-** were no errors, the function returns a alphabetically sorted collection
-** containing Attr entries.
-*/
-{
-    const char* Name;
-
-    /* Create a new collection */
-    Collection* C = NewCollection ();
-
-    /* Name/value pairs are separated by commas */
-    const char* L = List;
-    StrBuf B = AUTO_STRBUF_INITIALIZER;
-    while (1) {
-        if (*L == ',' || *L == ':' || *L == '\0') {
-
-            /* Terminate the string */
-            SB_Terminate (&B);
-
-            /* Determine the default name */
-            if (CollCount (C) >= NameCount) {
-                Name = 0;
-            } else {
-                Name = NameList[CollCount (C)];
-            }
-
-            /* Split and add this attribute/value pair */
-            SplitAddAttr (C, SB_GetConstBuf (&B), Name);
-
-            /* Done, clear the buffer. */
-            SB_Clear (&B);
-            if (*L == '\0') {
-                break;
-            }
-        } else {
-            SB_AppendChar (&B, *L);
-        }
-        ++L;
-    }
-
-    /* Free memory */
-    SB_Done (&B);
-
-    /* Return the collection with the attributes */
-    return C;
-}
-
-
-
-void FreeAttrList (Collection* C)
-/* Free a list of attributes */
-{
-    unsigned I;
-
-    /* Walk over the collection and free all attributes */
-    for (I = 0; I < CollCount (C); ++I) {
-        FreeAttr (CollAtUnchecked (C, I));
-    }
-
-    /* Free the collection itself */
-    FreeCollection (C);
-}
diff --git a/src/sp65/attr.h b/src/sp65/attr.h
deleted file mode 100644 (file)
index 2b7ce68..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  attr.h                                   */
-/*                                                                           */
-/*                          Command line attributes                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ATTRCOLL_H
-#define ATTRCOLL_H
-
-
-
-/* common */
-#include "coll.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Attribute structure */
-typedef struct Attr Attr;
-struct Attr {
-    char*       Name;           /* Attribute name - points into Value */
-    char        Value[1];       /* Attribute value followed by Name */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Attr* NewAttr (const char* Name, const char* Value);
-/* Create a new attribute */
-
-void FreeAttr (Attr* A);
-/* Free an attribute structure */
-
-void DumpAttrColl (const Collection* C);
-/* Dump a collection of attribute/value pairs for debugging */
-
-int FindAttr (const Collection* C, const char* Name, unsigned* Index);
-/* Search for an attribute with the given name in the collection. If it is
-** found, the function returns true and Index contains the index of the
-** entry. If Name isn't found, the function returns false and Index
-** will contain the insert position.
-*/
-
-const Attr* GetAttr (const Collection* C, const char* Name);
-/* Search for an attribute with the given name and return it. The function
-** returns NULL if the attribute wasn't found.
-*/
-
-const Attr* NeedAttr (const Collection* C, const char* Name, const char* Op);
-/* Search for an attribute with the given name and return it. If the attribute
-** is not found, the function terminates with an error using Op as additional
-** context in the error message.
-*/
-
-const char* GetAttrVal (const Collection* C, const char* Name);
-/* Search for an attribute with the given name and return its value. The
-** function returns NULL if the attribute wasn't found.
-*/
-
-const char* NeedAttrVal (const Collection* C, const char* Name, const char* Op);
-/* Search for an attribute with the given name and return its value. If the
-** attribute wasn't not found, the function terminates with an error using
-** Op as additional context in the error message.
-*/
-
-void AddAttr (Collection* C, const char* Name, const char* Value);
-/* Add an attribute to an alphabetically sorted attribute collection */
-
-void SplitAddAttr (Collection* C, const char* Combined, const char* Name);
-/* Split a combined name/value pair and add it as an attribute to C. Some
-** attributes may not need a name. If the name is missing, use Name. If
-** Name is NULL, terminate with an error.
-*/
-
-Collection* ParseAttrList (const char* List, const char** NameList, unsigned NameCount);
-/* Parse a list containing name/value pairs into a sorted collection. Some
-** attributes may not need a name, so NameList contains these names. If there
-** were no errors, the function returns a alphabetically sorted collection
-** containing Attr entries.
-*/
-
-void FreeAttrList (Collection* C);
-/* Free a list of attributes */
-
-
-
-/* End of attr.h */
-
-#endif
diff --git a/src/sp65/bin.c b/src/sp65/bin.c
deleted file mode 100644 (file)
index fdf7dde..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   bin.c                                   */
-/*                                                                           */
-/*         Binary file output for the sp65 sprite and bitmap utility         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-
-/* common */
-#include "attrib.h"
-
-/* sp65 */
-#include "attr.h"
-#include "bin.h"
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void WriteBinFile (const StrBuf* Data, const Collection* A, 
-                   const Bitmap* B attribute ((unused)))
-/* Write the contents of Data to the given file in binary format */
-{
-    unsigned Size;
-
-    /* Get the file name */
-    const char* Name = NeedAttrVal (A, "name", "write");
-
-    /* Open the output file */
-    FILE* F = fopen (Name, "wb");
-    if (F == 0) {
-        Error ("Cannot open output file `%s': %s", Name, strerror (errno));
-    }
-
-    /* Write to the file. We will use fwrite here instead of the fileio
-    ** module, since it's just one call, so the latter doesn't have any
-    ** advantages, and we can output a more readable error message in case of
-    ** problems.
-    */
-    Size = SB_GetLen (Data);
-    if (fwrite (SB_GetConstBuf (Data), 1, Size, F) != Size) {
-        Error ("Error writing to output file `%s': %s", Name, strerror (errno));
-    }
-
-    /* Close the file */
-    if (fclose (F) != 0) {
-        Error ("Error closing output file `%s': %s", Name, strerror (errno));
-    }
-}
diff --git a/src/sp65/bin.h b/src/sp65/bin.h
deleted file mode 100644 (file)
index 4a32a0a..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   bin.h                                   */
-/*                                                                           */
-/*         Binary file output for the sp65 sprite and bitmap utility         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef BIN_H
-#define BIN_H
-
-
-
-/* common */
-#include "coll.h"
-#include "strbuf.h"
-
-/* sp65 */
-#include "bitmap.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void WriteBinFile (const StrBuf* Data, const Collection* A, const Bitmap* B);
-/* Write the contents of Data to a file in binary format */
-
-
-
-/* End of bin.h */
-
-#endif
diff --git a/src/sp65/bitmap.c b/src/sp65/bitmap.c
deleted file mode 100644 (file)
index 4536fb8..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 bitmap.c                                  */
-/*                                                                           */
-/*         Bitmap definition for the sp65 sprite and bitmap utility          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "check.h"
-#include "xmalloc.h"
-
-/* sp65 */
-#include "bitmap.h"
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Bitmap* NewBitmap (unsigned Width, unsigned Height)
-/* Create a new bitmap. The type is set to unknown and the palette to NULL */
-{
-    Bitmap* B;
-
-    /* Calculate the size of the bitmap in pixels */
-    unsigned long Size = (unsigned long) Width * Height;
-
-    /* Some safety checks */
-    PRECONDITION (Size > 0 && Size <= BM_MAX_SIZE);
-
-    /* Allocate memory */
-    B = xmalloc (sizeof (*B) + (Size - 1) * sizeof (B->Data[0]));
-
-    /* Initialize the data */
-    B->Name     = EmptyStrBuf;
-    B->Width    = Width;
-    B->Height   = Height;
-    B->Pal      = 0;
-
-    /* Return the bitmap */
-    return B;
-}
-
-
-
-void FreeBitmap (Bitmap* B)
-/* Free a dynamically allocated bitmap */
-{
-    /* Alloc NULL pointers */
-    if (B != 0) {
-        /* Free name, palette and then the bitmap */
-        SB_Done (&B->Name);
-        xfree (B->Pal);
-        xfree(B);
-    }
-}
-
-
-
-int ValidBitmapSize (unsigned Width, unsigned Height)
-/* Return true if this is a valid size for a bitmap */
-{
-    /* Calculate the size of the bitmap in pixels */
-    unsigned long Size = (unsigned long) Width * Height;
-
-    /* Check the size */
-    return (Size > 0 && Size <= BM_MAX_SIZE);
-}
-
-
-
-Bitmap* SliceBitmap (const Bitmap* O, unsigned OrigX, unsigned OrigY,
-                     unsigned Width, unsigned Height)
-/* Create a slice of the given bitmap. The slice starts at position X/Y of
-** the original and has the given width and height. Location 0/0 is at the
-** upper left corner.
-*/
-{
-    Bitmap*  B;
-    unsigned Y;
-
-
-    /* Check the coordinates and size */
-    PRECONDITION (OrigX + Width <= O->Width && OrigY + Height <= O->Height);
-
-    /* Create a new bitmap with the given size */
-    B = NewBitmap (Width, Height);
-
-    /* Copy fields from the original */
-    if (SB_GetLen (&O->Name) > 0) {
-        SB_CopyStr (&B->Name, "Slice of ");
-        SB_Append (&B->Name, &O->Name);
-    }
-    B->Pal = DupPalette (O->Pal);
-
-    /* Copy the pixel data */
-    for (Y = 0; Y < Height; ++Y) {
-        memcpy (B->Data + Y * B->Width,
-                O->Data + (OrigY + Y) * O->Width + OrigX,
-                Width * sizeof (O->Data[0]));
-    }
-
-    /* Return the slice */
-    return B;
-}
-
-
-
-Color GetPixelColor (const Bitmap* B, unsigned X, unsigned Y)
-/* Get the color for a given pixel. For indexed bitmaps, the palette entry
-** is returned.
-*/
-{
-    /* Get the pixel at the given coordinates */
-    Pixel P = GetPixel (B, X, Y);
-
-    /* If the bitmap has a palette, return the color from the palette. For
-    ** simplicity, we will only check the palette, not the type.
-    */
-    if (B->Pal) {
-        if (P.Index >= B->Pal->Count) {
-            /* Palette index is invalid */
-            Error ("Invalid palette index %u at position %u/%u of \"%*s\"",
-                   P.Index, X, Y, SB_GetLen (&B->Name),
-                   SB_GetConstBuf (&B->Name));
-        }
-        return B->Pal->Entries[P.Index];
-    } else {
-        return P.C;
-    }
-}
-
-
-
-Pixel GetPixel (const Bitmap* B, unsigned X, unsigned Y)
-/* Return a pixel from the bitmap. The returned value may either be a color
-** or a palette index, depending on the type of the bitmap.
-*/
-{
-    /* Check the coordinates */
-    PRECONDITION (X < B->Width && Y < B->Height);
-
-    /* Return the pixel */
-    return B->Data[Y * B->Width + X];
-}
diff --git a/src/sp65/bitmap.h b/src/sp65/bitmap.h
deleted file mode 100644 (file)
index bf5e605..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 bitmap.h                                  */
-/*                                                                           */
-/*         Bitmap definition for the sp65 sprite and bitmap utility          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef BITMAP_H
-#define BITMAP_H
-
-
-
-/* common */
-#include "strbuf.h"
-
-/* sp65 */
-#include "palette.h"
-#include "pixel.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Safety limit for the bitmap sizes */
-#define BM_MAX_WIDTH    4096U
-#define BM_MAX_HEIGHT   4096U
-
-/* Safety limit for the size of the bitmap in pixels */
-#define BM_MAX_SIZE     4194304UL
-
-/* Bitmap structure */
-typedef struct Bitmap Bitmap;
-struct Bitmap {
-
-    /* Name of the bitmap. This is used for error messages and should be
-    ** something that allows the user to identify which bitmap the message
-    ** refers to. For bitmaps loaded from a file, using the file name is
-    ** a good idea.
-    */
-    StrBuf      Name;
-
-    /* Size of the bitmap */
-    unsigned    Width;
-    unsigned    Height;
-
-    /* Palette for indexed bitmap types, otherwise NULL */
-    Palette*    Pal;
-
-    /* Pixel data, dynamically allocated */
-    Pixel       Data[1];
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Bitmap* NewBitmap (unsigned Width, unsigned Height);
-/* Create a new bitmap. The type is set to unknown and the palette to NULL */
-
-void FreeBitmap (Bitmap* B);
-/* Free a dynamically allocated bitmap */
-
-int ValidBitmapSize (unsigned Width, unsigned Height);
-/* Return true if this is a valid size for a bitmap */
-
-Bitmap* SliceBitmap (const Bitmap* Original,
-                     unsigned X, unsigned Y,
-                     unsigned Width, unsigned Height);
-/* Create a slice of the given bitmap. The slice starts at position X/Y of
-** the original and has the given width and height. Location 0/0 is at the
-** upper left corner.
-*/
-
-Color GetPixelColor (const Bitmap* B, unsigned X, unsigned Y);
-/* Get the color for a given pixel. For indexed bitmaps, the palette entry
-** is returned.
-*/
-
-Pixel GetPixel (const Bitmap* B, unsigned X, unsigned Y);
-/* Return a pixel from the bitmap. The returned value may either be a color
-** or a palette index, depending on the type of the bitmap.
-*/
-
-#if defined(HAVE_INLINE)
-INLINE int BitmapIsIndexed (const Bitmap* B)
-/* Return true if this is an indexed bitmap */
-{
-    return (B->Pal != 0);
-}
-#else
-#  define BitmapIsIndexed(B)    ((B)->Pal != 0)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned GetBitmapWidth (const Bitmap* B)
-/* Get the width of a bitmap */
-{
-    return B->Width;
-}
-#else
-#  define GetBitmapWidth(B)     ((B)->Width)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned GetBitmapHeight (const Bitmap* B)
-/* Get the height of a bitmap */
-{
-    return B->Height;
-}
-#else
-#  define GetBitmapHeight(B)    ((B)->Height)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE const Palette* GetBitmapPalette (const Bitmap* B)
-/* Get the palette of a bitmap */
-{
-    return B->Pal;
-}
-#else
-#  define GetBitmapPalette(B)   ((B)->Pal)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE const StrBuf* GetBitmapName (const Bitmap* B)
-/* Get the name of a bitmap */
-{
-    return &B->Name;
-}
-#else
-#  define GetBitmapName(B)      (&(B)->Name)
-#endif
-
-#if defined(HAVE_INLINE)
-INLINE unsigned GetBitmapColors (const Bitmap* B)
-/* Get the number of colors in an image. The function will return the number
-** of palette entries for indexed bitmaps and 2^24 for non indexed bitmaps.
-*/
-{
-    return B->Pal? B->Pal->Count : (1U << 24);
-}
-#else
-# define GetBitmapColors(B)     ((B)->Pal? (B)->Pal->Count : (1U << 24))
-#endif
-
-
-
-/* End of bitmap.h */
-
-#endif
diff --git a/src/sp65/c.c b/src/sp65/c.c
deleted file mode 100644 (file)
index d4d6ee0..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                    c.c                                    */
-/*                                                                           */
-/*              C output for the sp65 sprite and bitmap utility              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-
-/* common */
-#include "chartype.h"
-#include "check.h"
-#include "cmdline.h"
-#include "version.h"
-
-/* sp65 */
-#include "attr.h"
-#include "c.h"
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static int ValidIdentifier (const char* L)
-/* Check a C identifier for validity */
-{
-    /* Must begin with underscore or alphabetic character */
-    if (*L != '_' && !IsAlpha (*L)) {
-        return 0;
-    }
-    ++L;
-
-    /* Remainder must be as above plus digits */
-    while (*L) {
-        if (*L != '_' && !IsAlNum (*L)) {
-            return 0;
-        }
-        ++L;
-    }
-
-    /* Ok */
-    return 1;
-}
-
-
-
-static unsigned GetBytesPerLine (const Collection* A)
-/* Return the number of bytes per line from the attribute collection A */
-{
-    char        C;
-    unsigned    BytesPerLine = 16;
-
-    /* Check for a bytesperline attribute */
-    const char* V = GetAttrVal (A, "bytesperline");
-    if ((V && sscanf (V, "%u%c", &BytesPerLine, &C) != 1) ||
-        (BytesPerLine < 1 || BytesPerLine > 64)) {
-        Error ("Invalid value for attribute `bytesperline'");
-    }
-    return BytesPerLine;
-}
-
-
-
-static unsigned GetBase (const Collection* A)
-/* Return the number base from the attribute collection A */
-{
-    char        C;
-    unsigned    Base = 16;
-
-    /* Check for a base attribute */
-    const char* V = GetAttrVal (A, "base");
-    if ((V && sscanf (V, "%u%c", &Base, &C) != 1) || (Base != 10 && Base != 16)) {
-        Error ("Invalid value for attribute `base'");
-    }
-    return Base;
-}
-
-
-
-static const char* GetIdentifier (const Collection* A)
-/* Return the variable identifier from the attribute collection A */
-{
-    /* Check for a ident attribute */
-    const char* Ident = GetAttrVal (A, "ident");
-    if (Ident && !ValidIdentifier (Ident)) {
-        Error ("Invalid value for attribute `ident'");
-    }
-    return Ident;
-}
-
-
-
-void WriteCFile (const StrBuf* Data, const Collection* A, const Bitmap* B)
-/* Write the contents of Data to a file in C format */
-{
-    FILE*       F;
-    const char* D;
-    unsigned    Size;
-
-
-    /* Get the name of the image */
-    const StrBuf* S = GetBitmapName (B);
-
-    /* Get the file name */
-    const char* Name = NeedAttrVal (A, "name", "write");
-
-    /* Check the number of bytes per line */
-    unsigned BytesPerLine = GetBytesPerLine (A);
-
-    /* Get the number base */
-    unsigned Base = GetBase (A);
-
-    /* Get the identifier */
-    const char* Ident = GetIdentifier (A);
-
-    /* Open the output file */
-    F = fopen (Name, "w");
-    if (F == 0) {
-        Error ("Cannot open output file `%s': %s", Name, strerror (errno));
-    }
-
-    /* Write a readable header */
-    fprintf (F,
-             "/*\n"
-             "** This file was generated by %s %s from\n"
-             "** %.*s (%ux%u, %u colors%s)\n"
-             "*/\n"
-             "\n",
-             ProgName,
-             GetVersionAsString (),
-             SB_GetLen (S), SB_GetConstBuf (S),
-             GetBitmapWidth (B), GetBitmapHeight (B),
-             GetBitmapColors (B),
-             BitmapIsIndexed (B)? ", indexed" : "");
-
-    /* If an identifier was given, output #defines for width, height, the
-    ** number of colors and declare a variable for the data.
-    */
-    if (Ident) {
-        fprintf (F,
-                 "#define %s_COLORS       %u\n"
-                 "#define %s_WIDTH        %u\n"
-                 "#define %s_HEIGHT       %u\n"
-                 "const unsigned char %s[] = {\n",
-                 Ident, GetBitmapColors (B),
-                 Ident, GetBitmapWidth (B),
-                 Ident, GetBitmapHeight (B),
-                 Ident);
-    }
-
-    /* Write the data */
-    D    = SB_GetConstBuf (Data);
-    Size = SB_GetLen (Data);
-    while (Size) {
-
-        unsigned I;
-
-        /* Output one line */
-        unsigned Chunk = Size;
-        if (Chunk > BytesPerLine) {
-            Chunk = BytesPerLine;
-        }
-        fputs ("    ", F);
-        for (I = 0; I < Chunk; ++I) {
-            switch (Base) {
-                case 10:
-                    fprintf (F, "%u,", *D++ & 0xFF);
-                    break;
-                case 16:
-                    fprintf (F, "0x%02X,", *D++ & 0xFF);
-                    break;
-
-            }
-        }
-        fputc ('\n', F);
-
-        /* Bump the counters */
-        Size -= Chunk;
-    }
-
-    /* Terminate the array if we had an identifier */
-    if (Ident) {
-        fputs ("};\n", F);
-    }
-
-    /* Close the file */
-    if (fclose (F) != 0) {
-        Error ("Error closing output file `%s': %s", Name, strerror (errno));
-    }
-}
diff --git a/src/sp65/c.h b/src/sp65/c.h
deleted file mode 100644 (file)
index 113d0de..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                    c.h                                    */
-/*                                                                           */
-/*              C output for the sp65 sprite and bitmap utility              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef C_H
-#define C_H
-
-
-
-/* common */
-#include "coll.h"
-#include "strbuf.h"
-
-/* sp65 */
-#include "bitmap.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void WriteCFile (const StrBuf* Data, const Collection* A, const Bitmap* B);
-/* Write the contents of Data to a file in C format */
-
-
-
-/* End of c.h */
-
-#endif
diff --git a/src/sp65/color.c b/src/sp65/color.c
deleted file mode 100644 (file)
index 0180865..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  color.c                                  */
-/*                                                                           */
-/*          Color definition for the sp65 sprite and bitmap utility          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include "color.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-#if !defined(HAVE_INLINE)
-
-Color RGB (unsigned char R, unsigned char G, unsigned char B)
-/* Generate a color value */
-{
-    Color C;
-    C.R = R; C.G = G; C.B = B; C.A = 0;
-    return C;
-}
-
-
-
-Color RGBA (unsigned char R, unsigned char G, unsigned char B, unsigned char A)
-/* Generate a color value */
-{
-    Color C;
-    C.R = R; C.G = G; C.B = B; C.A = A;
-    return C;
-}
-
-#endif
diff --git a/src/sp65/color.h b/src/sp65/color.h
deleted file mode 100644 (file)
index 31688bf..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  color.h                                  */
-/*                                                                           */
-/*          Color definition for the sp65 sprite and bitmap utility          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef COLOR_H
-#define COLOR_H
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Color structure */
-typedef struct Color Color;
-struct Color {
-    unsigned char R;
-    unsigned char G;
-    unsigned char B;
-    unsigned char A;
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-                                                             
-#if defined(HAVE_INLINE)
-
-INLINE Color RGB (unsigned char R, unsigned char G, unsigned char B)
-/* Generate a color value */
-{
-    Color C;
-    C.R = R; C.G = G; C.B = B; C.A = 0;
-    return C;
-}
-
-INLINE Color RGBA (unsigned char R, unsigned char G, unsigned char B, unsigned char A)
-/* Generate a color value */
-{
-    Color C;
-    C.R = R; C.G = G; C.B = B; C.A = A;
-    return C;
-}
-
-#else
-
-Color RGB (unsigned char R, unsigned char G, unsigned char B);
-/* Generate a color value */
-
-Color RGBA (unsigned char R, unsigned char G, unsigned char B, unsigned char A);
-/* Generate a color value */
-
-#endif
-
-
-
-/* End of color.h */
-
-#endif
diff --git a/src/sp65/convert.c b/src/sp65/convert.c
deleted file mode 100644 (file)
index 45b40f1..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 convert.c                                 */
-/*                                                                           */
-/*    Main target conversion module for the sp65 file and bitmap utility     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-
-/* sp65 */
-#include "attr.h"
-#include "convert.h"
-#include "error.h"
-#include "geosbitmap.h"
-#include "geosicon.h"
-#include "koala.h"
-#include "lynxsprite.h"
-#include "raw.h"
-#include "vic2sprite.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Type of the entry in the converter table */
-typedef struct ConverterMapEntry ConverterMapEntry;
-struct ConverterMapEntry {
-    const char*         Format;
-    StrBuf*             (*ConvertFunc) (const Bitmap*, const Collection*);
-};
-
-/* Converter table, alphabetically sorted */
-static const ConverterMapEntry ConverterMap[] = {
-    {   "geos-bitmap",          GenGeosBitmap   },
-    {   "geos-icon",            GenGeosIcon     },
-    {   "koala",                GenKoala        },
-    {   "lynx-sprite",          GenLynxSprite   },
-    {   "raw",                  GenRaw          },
-    {   "vic2-sprite",          GenVic2Sprite   },
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static int Compare (const void* Key, const void* MapEntry)
-/* Compare function for bsearch */
-{
-    return strcmp (Key, ((const ConverterMapEntry*) MapEntry)->Format);
-}
-
-
-
-StrBuf* ConvertTo (const Bitmap* B, const Collection* A)
-/* Convert the bitmap B into some sort of other binary format. The output is
-** stored in a string buffer (which is actually a dynamic char array) and
-** returned. The actual output format is taken from the "format" attribute
-** in the attribute collection A.
-*/
-{
-    const ConverterMapEntry* E;
-
-    /* Get the format to convert to */
-    const char* Format = NeedAttrVal (A, "format", "convert");
-
-    /* Search for the matching converter */
-    E = bsearch (Format,
-                 ConverterMap,
-                 sizeof (ConverterMap) / sizeof (ConverterMap[0]),
-                 sizeof (ConverterMap[0]),
-                 Compare);
-    if (E == 0) {
-        Error ("No such target format: `%s'", Format);
-    }
-
-    /* Do the conversion */
-    return E->ConvertFunc (B, A);
-}
-
-
-
-void ListConversionTargets (FILE* F)
-/* Output a list of conversion targets */
-{
-    unsigned I;
-    for (I = 0; I < sizeof (ConverterMap) / sizeof (ConverterMap[0]); ++I) {
-        fprintf (F, "  %s\n", ConverterMap[I].Format);
-    }
-}
diff --git a/src/sp65/convert.h b/src/sp65/convert.h
deleted file mode 100644 (file)
index 3ebb23d..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 convert.h                                 */
-/*                                                                           */
-/*    Main target conversion module for the sp65 file and bitmap utility     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef CONVERT_H
-#define CONVERT_H
-
-
-
-#include <stdio.h>
-
-/* common */
-#include "coll.h"
-#include "strbuf.h"
-
-/* sp65 */
-#include "bitmap.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-StrBuf* ConvertTo (const Bitmap* B, const Collection* A);
-/* Convert the bitmap B into some sort of other binary format. The output is
-** stored in a string buffer (which is actually a dynamic char array) and
-** returned. The actual output format is taken from the "format" attribute
-** in the attribute collection A.
-*/
-
-void ListConversionTargets (FILE* F);
-/* Output a list of conversion targets */
-
-
-
-/* End of convert.h */
-
-#endif
diff --git a/src/sp65/error.c b/src/sp65/error.c
deleted file mode 100644 (file)
index 7a29cb5..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  error.c                                  */
-/*                                                                           */
-/*           Error handling for the sp65 sprite and bitmap utility           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-#include "error.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Warning (const char* Format, ...)
-/* Print a warning message */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "Warning: ");
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-}
-
-
-
-void Error (const char* Format, ...)
-/* Print an error message and die */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "Error: ");
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-    exit (EXIT_FAILURE);
-}
-
-
-
-void Internal (const char* Format, ...)
-/* Print an internal error message and die */
-{
-    va_list ap;
-    va_start (ap, Format);
-    fprintf (stderr, "Internal error: ");
-    vfprintf (stderr, Format, ap);
-    putc ('\n', stderr);
-    va_end (ap);
-    exit (EXIT_FAILURE);
-}
diff --git a/src/sp65/error.h b/src/sp65/error.h
deleted file mode 100644 (file)
index 41ee83b..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  error.h                                  */
-/*                                                                           */
-/*           Error handling for the sp65 sprite and bitmap utility           */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef ERROR_H
-#define ERROR_H
-
-
-
-/* common */
-#include "attrib.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void Warning (const char* Format, ...) attribute((format(printf,1,2)));
-/* Print a warning message */
-
-void Error (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print an error message and die */
-
-void Internal (const char* Format, ...) attribute((noreturn, format(printf,1,2)));
-/* Print an internal error message and die */
-
-
-
-/* End of error.h */
-
-#endif
diff --git a/src/sp65/fileio.c b/src/sp65/fileio.c
deleted file mode 100644 (file)
index 074a7b5..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 fileio.c                                  */
-/*                                                                           */
-/*              File I/O for the sp65 sprite and bitmap utility              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-#include <errno.h>
-
-/* od65 */
-#include "error.h"
-#include "fileio.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void FileSetPos (FILE* F, unsigned long Pos)
-/* Seek to the given absolute position, fail on errors */
-{
-    if (fseek (F, Pos, SEEK_SET) != 0) {
-        Error ("Cannot seek: %s", strerror (errno));
-    }
-}
-
-
-
-unsigned long FileGetPos (FILE* F)
-/* Return the current file position, fail on errors */
-{
-    long Pos = ftell (F);
-    if (Pos < 0) {
-        Error ("Error in ftell: %s", strerror (errno));
-    }
-    return Pos;
-}
-
-
-
-unsigned Read8 (FILE* F)
-/* Read an 8 bit value from the file */
-{
-    int C = getc (F);
-    if (C == EOF) {
-        Error ("Read error (file corrupt?)");
-    }
-    return C;
-}
-
-
-
-unsigned Read16 (FILE* F)
-/* Read a 16 bit value from the file */
-{
-    unsigned Lo = Read8 (F);
-    unsigned Hi = Read8 (F);
-    return (Hi << 8) | Lo;
-}
-
-
-
-unsigned long Read24 (FILE* F)
-/* Read a 24 bit value from the file */
-{
-    unsigned long Lo = Read16 (F);
-    unsigned long Hi = Read8 (F);
-    return (Hi << 16) | Lo;
-}
-
-
-
-unsigned long Read32 (FILE* F)
-/* Read a 32 bit value from the file */
-{
-    unsigned long Lo = Read16 (F);
-    unsigned long Hi = Read16 (F);
-    return (Hi << 16) | Lo;
-}
-
-
-
-void* ReadData (FILE* F, void* Data, unsigned Size)
-/* Read data from the file */
-{
-    /* Accept zero sized reads */
-    if (Size > 0) {
-        if (fread (Data, 1, Size, F) != Size) {
-            Error ("Read error (file corrupt?)");
-        }
-    }
-    return Data;
-}
diff --git a/src/sp65/fileio.h b/src/sp65/fileio.h
deleted file mode 100644 (file)
index c17647d..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 fileio.h                                  */
-/*                                                                           */
-/*              File I/O for the sp65 sprite and bitmap utility              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 1998-2012, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef FILEIO_H
-#define FILEIO_H
-
-
-
-#include <stdio.h>
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void FileSetPos (FILE* F, unsigned long Pos);
-/* Seek to the given absolute position, fail on errors */
-
-unsigned long FileGetPos (FILE* F);
-/* Return the current file position, fail on errors */
-
-unsigned Read8 (FILE* F);
-/* Read an 8 bit value from the file */
-
-unsigned Read16 (FILE* F);
-/* Read a 16 bit value from the file */
-
-unsigned long Read24 (FILE* F);
-/* Read a 24 bit value from the file */
-
-unsigned long Read32 (FILE* F);
-/* Read a 32 bit value from the file */
-
-void* ReadData (FILE* F, void* Data, unsigned Size);
-/* Read data from the file */
-
-
-
-/* End of fileio.h */
-
-#endif
diff --git a/src/sp65/geosbitmap.c b/src/sp65/geosbitmap.c
deleted file mode 100644 (file)
index 201d0ac..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                               geosbitmap.c                                */
-/*                                                                           */
-/*   GEOS compacted bitmap backend for the sp65 sprite and bitmap utility    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "attrib.h"
-#include "print.h"
-#include "xmalloc.h"
-
-/* sp65 */
-#include "attr.h"
-#include "error.h"
-#include "geosbitmap.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-#define UNIQUE_MAX       91U            /* Maximum number of unique bytes */
-#define REPEAT_MAX      127U            /* Maximum number of repeated bytes */
-
-
-
-/* Structure used for RLE compression */
-struct RLE {
-    unsigned char*      Buf;            /* Pointer to pixel buffer */
-    unsigned            Remaining;      /* Remaining bytes in buffer */
-    unsigned char       LastVal;        /* Last value seen */
-    unsigned            Count;          /* Number of occurrences for LastVal */
-    StrBuf*             D;              /* Buffer for compressed data */
-    StrBuf              UniqueData;     /* Temp buffer for unique data */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void StoreByte (struct RLE* RLE)
-/* Store a unique byte or a run of repeated bytes. If count is zero, the
-** function will flush the internal buffers, so that all data is in RLE->D.
-*/
-{
-
-
-    if (RLE->Count == 1 || RLE->Count == 2) {
-        /* A run of two identical bytes is treated as two unique bytes, since
-        ** this will usually merge with the following run.
-        */
-        SB_AppendChar (&RLE->UniqueData, RLE->LastVal);
-        if (RLE->Count == 2) {
-            SB_AppendChar (&RLE->UniqueData, RLE->LastVal);
-        }
-
-        /* Clear the repeat counter */
-        RLE->Count = 0;
-
-    } else {
-
-        /* Run of repeated bytes. First flush the temp buffer for unique
-        ** bytes.
-        */
-        const char* Buf = SB_GetConstBuf (&RLE->UniqueData);
-        unsigned Count  = SB_GetLen (&RLE->UniqueData);
-        while (Count) {
-
-            /* Determine the count for this sequence */
-            unsigned Chunk = Count;
-            if (Chunk > UNIQUE_MAX) {
-                Chunk = UNIQUE_MAX;
-            }
-
-            /* Output the unique op */
-            SB_AppendChar (RLE->D, 0x80 + (unsigned char) Chunk);
-            SB_AppendBuf (RLE->D, Buf, Chunk);
-
-            /* Bump the counters */
-            Buf += Chunk;
-            Count -= Chunk;
-        }
-
-        /* Clear the unique byte buffer */
-        SB_Clear (&RLE->UniqueData);
-
-        /* Now output the repeat sequence */
-        while (RLE->Count) {
-
-            /* Determine the count for this sequence */
-            unsigned Chunk = RLE->Count;
-            if (Chunk > REPEAT_MAX) {
-                Chunk = REPEAT_MAX;
-            }
-            /* Output the repeat op */
-            SB_AppendChar (RLE->D, (unsigned char) Chunk);
-            SB_AppendChar (RLE->D, RLE->LastVal);
-
-            /* Bump the counters */
-            RLE->Count -= Chunk;
-        }
-    }
-}
-
-
-
-StrBuf* GenGeosBitmap (const Bitmap* B, const Collection* A attribute ((unused)))
-/* Generate binary output in GEOS compacted bitmap format for the bitmap B.
-** The output is stored in a string buffer (which is actually a dynamic char
-** array) and returned.
-*/
-{
-    unsigned        LineWidth;
-    unsigned char*  Buf;
-    unsigned char*  BP;
-    StrBuf*         D;
-    unsigned        X, Y;
-    struct RLE      RLE;
-
-
-    /* Output the image properties */
-    Print (stdout, 1, "Image is %ux%u with %u colors%s\n",
-           GetBitmapWidth (B), GetBitmapHeight (B), GetBitmapColors (B),
-           BitmapIsIndexed (B)? " (indexed)" : "");
-
-    /* Check the bitmap properties */
-    if (!BitmapIsIndexed (B) || GetBitmapColors (B) > 2) {
-        Error ("Bitmaps converted to GEOS compacted bitmap must be "
-               "indexed with two colors");
-    }
-
-    /* Calculate the width of one line in bytes */
-    LineWidth = (GetBitmapWidth (B) + 7U) / 8U;
-
-    /* Allocate a buffer for the raw image */
-    Buf = xmalloc (LineWidth * GetBitmapHeight (B));
-
-    /* Convert the bitmap into a raw image */
-    BP = Buf;
-    for (Y = 0; Y < GetBitmapHeight (B); ++Y) {
-        for (X = 0; X < GetBitmapWidth (B); ) {
-            unsigned char V = 0;
-            int Bits = 8;
-            if ((unsigned)Bits > GetBitmapWidth (B) - X) {
-                Bits = (GetBitmapWidth (B) - X);
-            }
-            while (--Bits >= 0) {
-                V |= (GetPixel (B, X++, Y).Index & 0x01) << Bits;
-            }
-            *BP++ = V;
-        }
-    }
-
-    /* Create the output buffer and resize it to something reasonable */
-    D = NewStrBuf ();
-    SB_Realloc (D, 64);
-
-    /* Compact the image. We're currently using only REPEAT and UNIQUE opcodes.
-    ** BIGCOUNT is rather difficult to apply.
-    */
-    RLE.Buf        = Buf;
-    RLE.Remaining  = LineWidth * GetBitmapHeight (B) - 1;
-    RLE.LastVal    = *RLE.Buf++;
-    RLE.Count      = 1;
-    RLE.D          = D;
-    RLE.UniqueData = EmptyStrBuf;
-    while (RLE.Remaining--) {
-        /* */
-        if (RLE.LastVal == *RLE.Buf) {
-            ++RLE.Buf;
-            ++RLE.Count;
-        } else {
-            StoreByte (&RLE);
-            RLE.LastVal = *RLE.Buf++;
-            RLE.Count = 1;
-        }
-    }
-
-    /* If something remains, store it */
-    if (RLE.Count) {
-        StoreByte (&RLE);
-    }
-
-    /* Flush the unique byte buffer */
-    StoreByte (&RLE);
-
-    /* Release the unique byte buffer */
-    SB_Done (&RLE.UniqueData);
-
-    /* Free the raw image buffer */
-    xfree (Buf);
-
-    /* Return the converted bitmap */
-    return D;
-}
diff --git a/src/sp65/geosbitmap.h b/src/sp65/geosbitmap.h
deleted file mode 100644 (file)
index 7590302..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                               geosbitmap.h                                */
-/*                                                                           */
-/*   GEOS compacted bitmap backend for the sp65 sprite and bitmap utility    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef GEOSBITMAP_H
-#define GEOSBITMAP_H
-
-
-
-/* common */
-#include "coll.h"
-#include "strbuf.h"
-
-/* sp65 */
-#include "bitmap.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-StrBuf* GenGeosBitmap (const Bitmap* B, const Collection* A);
-/* Generate binary output in GEOS compacted bitmap format for the bitmap B. 
-** The output is stored in a string buffer (which is actually a dynamic char 
-** array) and returned.
-*/
-
-
-
-/* End of geosbitmap.h */
-
-#endif
-
-
-
-                    
diff --git a/src/sp65/geosicon.c b/src/sp65/geosicon.c
deleted file mode 100644 (file)
index bc4072b..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                geosicon.c                                 */
-/*                                                                           */
-/*      GEOS icon format backend for the sp65 sprite and bitmap utility      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "attrib.h"
-#include "print.h"
-
-/* sp65 */
-#include "attr.h"
-#include "error.h"
-#include "geosicon.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Screen size of geos icon */
-#define WIDTH           24U
-#define HEIGHT          21U
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-StrBuf* GenGeosIcon (const Bitmap* B, const Collection* A attribute ((unused)))
-/* Generate binary output in GEOS icon format for the bitmap B. The output
-** is stored in a string buffer (which is actually a dynamic char array) and
-** returned.
-*/
-{
-    StrBuf* D;
-    unsigned X, Y;
-
-
-    /* Output the image properties */
-    Print (stdout, 1, "Image is %ux%u with %u colors%s\n",
-           GetBitmapWidth (B), GetBitmapHeight (B), GetBitmapColors (B),
-           BitmapIsIndexed (B)? " (indexed)" : "");
-
-    /* Check the bitmap properties */
-    if (!BitmapIsIndexed (B)            ||
-        GetBitmapHeight (B) != HEIGHT   ||
-        GetBitmapWidth (B) != WIDTH     ||
-        GetBitmapColors (B) > 2) {
-        Error ("Invalid bitmap properties for conversion to GEOS icon");
-    }
-
-    /* Create the output buffer and resize it to the required size. */
-    D = NewStrBuf ();
-    SB_Realloc (D, 63);
-
-    /* Convert the image */
-    for (Y = 0; Y < HEIGHT; ++Y) {
-        unsigned char V = 0;
-        for (X = 0; X < WIDTH; ++X) {
-
-            /* Fetch next bit into byte buffer */
-            V = (V << 1) | (GetPixel (B, X, Y).Index & 0x01);
-
-            /* Store full bytes into the output buffer */
-            if ((X & 0x07) == 0x07) {
-                SB_AppendChar (D, V);
-                V = 0;
-            }
-        }
-    }
-
-    /* Return the converted bitmap */
-    return D;
-}
diff --git a/src/sp65/geosicon.h b/src/sp65/geosicon.h
deleted file mode 100644 (file)
index 545aab1..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                geosicon.h                                 */
-/*                                                                           */
-/*      GEOS icon format backend for the sp65 sprite and bitmap utility      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef GEOSICON_H
-#define GEOSICON_H
-
-
-
-/* common */
-#include "coll.h"
-#include "strbuf.h"
-
-/* sp65 */
-#include "bitmap.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-StrBuf* GenGeosIcon (const Bitmap* B, const Collection* A);
-/* Generate binary output in GEOS icon format for the bitmap B. The output
-** is stored in a string buffer (which is actually a dynamic char array) and
-** returned.
-*/
-
-
-
-/* End of geosicon.h */
-
-#endif
diff --git a/src/sp65/input.c b/src/sp65/input.c
deleted file mode 100644 (file)
index 381adf6..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  input.c                                  */
-/*                                                                           */
-/*   Input format/file definitions for the sp65 sprite and bitmap utility    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-
-/* common */
-#include "fileid.h"
-
-/* sp65 */
-#include "attr.h"
-#include "error.h"
-#include "input.h"
-#include "pcx.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Possible input formats */
-enum InputFormat {
-    ifPCX,                      /* PCX */
-    ifCount                     /* Number of actual input formats w/o ifAuto*/
-};
-
-typedef struct InputFormatDesc InputFormatDesc;
-struct InputFormatDesc {
-    /* Read routine */
-    Bitmap* (*Read) (const Collection*);
-};
-
-/* Table with input formats indexed by InputFormat */
-static InputFormatDesc InputFormatTable[ifCount] = {
-    {   ReadPCXFile     },
-};
-
-/* Table that maps extensions to input formats. Must be sorted alphabetically */
-static const FileId FormatTable[] = {
-    /* Upper case stuff for obsolete operating systems */
-    {   "PCX",  ifPCX           },
-
-    {   "pcx",  ifPCX           },
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Bitmap* ReadInputFile (const Collection* A)
-/* Read a bitmap from a file and return it. Format, file name etc. must be
-** given as attributes in A. If no format is given, the function tries to
-** autodetect it by using the extension of the file name.
-*/
-{
-    const FileId* F;
-
-    /* Get the file format from the command line */
-    const char* Format = GetAttrVal (A, "format");
-    if (Format != 0) {
-        /* Format is given, search for it in the table. */
-        F = bsearch (Format,
-                     FormatTable,
-                     sizeof (FormatTable) / sizeof (FormatTable[0]),
-                     sizeof (FormatTable[0]),
-                     CompareFileId);
-        if (F == 0) {
-            Error ("Unknown input format `%s'", Format);
-        }
-    } else {
-        /* No format given, use file name extension */
-        const char* Name = NeedAttrVal (A, "name", "write");
-        F = GetFileId (Name, FormatTable,
-                       sizeof (FormatTable) / sizeof (FormatTable[0]));
-        /* Found? */
-        if (F == 0) {
-            Error ("Cannot determine file format of input file `%s'", Name);
-        }
-    }
-
-    /* Call the format specific read */
-    return InputFormatTable[F->Id].Read (A);
-}
diff --git a/src/sp65/input.h b/src/sp65/input.h
deleted file mode 100644 (file)
index 60581cf..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  input.h                                  */
-/*                                                                           */
-/*   Input format/file definitions for the sp65 sprite and bitmap utility    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef INPUT_H
-#define INPUT_H
-
-
-
-/* common */
-#include "coll.h"
-
-/* sp65 */
-#include "bitmap.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Bitmap* ReadInputFile (const Collection* A);
-/* Read a bitmap from a file and return it. Format, file name etc. must be
-** given as attributes in A. If no format is given, the function tries to
-** autodetect it by using the extension of the file name.
-*/
-
-
-
-/* End of input.h */
-
-#endif
diff --git a/src/sp65/koala.c b/src/sp65/koala.c
deleted file mode 100644 (file)
index e2122c7..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  koala.c                                  */
-/*                                                                           */
-/*        Koala format backend for the sp65 sprite and bitmap utility        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "attrib.h"
-
-/* sp65 */
-#include "error.h"
-#include "koala.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Screen size of a koala picture */
-#define WIDTH   160U
-#define HEIGHT  200U
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-StrBuf* GenKoala (const Bitmap* B, const Collection* A attribute ((unused)))
-/* Generate binary output in koala format for the bitmap B. The output is
-** stored in a string buffer (which is actually a dynamic char array) and
-** returned.
-*/
-{
-    StrBuf* D;
-    unsigned char Screen[160][200];
-    unsigned char X, Y;
-
-    /* Koala pictures are always 160x200 in size with 16 colors */
-    if (!BitmapIsIndexed (B)             ||
-        GetBitmapColors (B) > 16         ||
-        GetBitmapHeight (B) != HEIGHT    ||
-        GetBitmapWidth (B)  != WIDTH) {
-
-        Error ("Bitmaps converted to koala format must be in indexed mode "
-               "with 16 colors max and a size of %ux%u", WIDTH, HEIGHT);
-    }
-
-    /* Read the image into Screen */
-    for (Y = 0; Y < HEIGHT; ++Y) {
-        for (X = 0; X < WIDTH; ++X) {
-            Screen[X][Y] = (unsigned char) GetPixel (B, X, Y).Index;
-        }
-    }
-
-    /* Create the output buffer and resize it to the required size. */
-    D = NewStrBuf ();
-    SB_Realloc (D, 10003);
-
-    /* Add $4400 as load address */
-    SB_AppendChar (D, 0x00);
-    SB_AppendChar (D, 0x44);
-    
-    /* TODO: The actual work ;-) */
-    (void) Screen;
-
-    /* Return the converted bitmap */
-    return D;
-}
diff --git a/src/sp65/koala.h b/src/sp65/koala.h
deleted file mode 100644 (file)
index 5114bee..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  koala.h                                  */
-/*                                                                           */
-/*        Koala format backend for the sp65 sprite and bitmap utility        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef KOALA_H
-#define KOALA_H
-
-
-
-/* common */
-#include "coll.h"
-#include "strbuf.h"
-
-/* sp65 */
-#include "bitmap.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-StrBuf* GenKoala (const Bitmap* B, const Collection* A);
-/* Generate binary output in koala format for the bitmap B. The output is
-** stored in a string buffer (which is actually a dynamic char array) and
-** returned.
-*/
-
-
-
-/* End of koala.h */
-
-#endif
diff --git a/src/sp65/lynxsprite.c b/src/sp65/lynxsprite.c
deleted file mode 100644 (file)
index e4afc77..0000000
+++ /dev/null
@@ -1,554 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                               lynxsprite.c                                */
-/*                                                                           */
-/*    Lynx sprite format backend for the sp65 sprite and bitmap utility      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-
-/* common */
-#include "attrib.h"
-#include "print.h"
-
-/* sp65 */
-#include "attr.h"
-#include "error.h"
-#include "lynxsprite.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Sprite mode */
-enum Mode {
-    smAuto,
-    smLiteral,
-    smPacked,
-    smShaped
-};
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static enum Mode GetMode (const Collection* A)
-/* Return the sprite mode from the attribute collection A */
-{
-    /* Check for a mode attribute */
-    const char* Mode = GetAttrVal (A, "mode");
-    if (Mode) {
-        if (strcmp (Mode, "literal") == 0) {
-            return smLiteral;
-        } else if (strcmp (Mode, "packed") == 0) {
-            return smPacked;
-        } else if (strcmp (Mode, "shaped") == 0) {
-            return smShaped;
-        } else {
-            Error ("Invalid value for attribute `mode'");
-        }
-    }
-
-    return smAuto;
-}
-
-
-static unsigned GetActionPointX (const Collection* A)
-/* Return the sprite mode from the attribute collection A */
-{
-    /* Check for a action point x attribute */
-    const char* ActionPointX = GetAttrVal (A, "ax");
-    if (ActionPointX) {
-        return atoi(ActionPointX);
-    } else {
-        return 0;
-    }
-}
-
-
-static unsigned GetActionPointY (const Collection* A)
-/* Return the sprite mode from the attribute collection A */
-{
-    /* Check for a action point y attribute */
-    const char* ActionPointY = GetAttrVal (A, "ay");
-    if (ActionPointY) {
-        return atoi(ActionPointY);
-    } else {
-        return 0;
-    }
-}
-
-static unsigned GetEdgeIndex (const Collection* A)
-/* Return the sprite mode from the attribute collection A */
-{
-    /* Get index for edge color in shaped mode */
-    const char* EdgeIndex = GetAttrVal (A, "edge");
-    if (EdgeIndex) {
-        return atoi(EdgeIndex);
-    } else {
-        return 0;
-    }
-}
-
-static char OutBuffer[512]; /* The maximum size is 508 pixels */
-static unsigned char OutIndex;
-
-static void AssembleByte(unsigned bits, char val)
-{
-    static char bit_counter = 8, byte = 0;
-
-    /* initialize */
-    if (!bits) {
-        OutIndex = 0;
-        bit_counter = 8;
-        byte = 0;
-        return;
-    }
-    /* handle end of line */
-    if (bits == 8) {
-        if (bit_counter != 8) {
-            byte <<= bit_counter;
-            OutBuffer[OutIndex++] = byte;
-            if (!OutIndex) {
-                Error ("Sprite is too large for the Lynx");
-            }
-            if (byte & 0x1) {
-                OutBuffer[OutIndex++] = byte;
-                if (!OutIndex) {
-                    Error ("Sprite is too large for the Lynx");
-                }
-            }
-        }
-        return;
-    }
-    /* handle end of line for literal */
-    if (bits == 7) {
-        if (bit_counter != 8) {
-            byte <<= bit_counter;
-            OutBuffer[OutIndex++] = byte;
-            if (!OutIndex) {
-                Error ("Sprite is too large for the Lynx");
-            }
-        }
-        return;
-    }
-    val <<= 8 - bits;
-
-    do {
-        byte <<= 1;
-
-        if (val & 0x80)
-            ++byte;
-
-        if (!(--bit_counter)) {
-            OutBuffer[OutIndex++] = byte;
-            if (!OutIndex) {
-                Error ("Sprite is too large for the Lynx");
-            }
-            byte = 0;
-            bit_counter = 8;
-        }
-
-        val <<= 1;
-
-    } while (--bits);
-}
-
-static unsigned char ChoosePackagingMode(signed len, signed index, char ColorBits, char LineBuffer[512])
-{
-    --len;
-    if (!len) {
-        return 0;
-    }
-    if (LineBuffer[index] != LineBuffer[index + 1]) {
-        return 0;
-    }
-    if (ColorBits > 2) {
-        return 1;
-    }
-    if (LineBuffer[index] != LineBuffer[index + 2]) {
-        return 0;
-    }
-    if (ColorBits > 1) {
-        return 1;
-    }
-    if (LineBuffer[index] != LineBuffer[index + 3]) {
-        return 0;
-    }
-    return 1;
-}
-
-static void WriteOutBuffer(StrBuf *D)
-{
-    signed i;
-
-    /* Fix bug in Lynx where the count cannot be 1 */
-    if (OutIndex == 1) {
-        OutBuffer[OutIndex++] = 0;
-    }
-    /* Write the byte count to the end of the scanline */
-    if (OutIndex == 255) {
-        Error ("Sprite is too large for the Lynx");
-    }
-    SB_AppendChar (D, OutIndex+1);
-    /* Write scanline data */
-    for (i = 0; i < OutIndex; i++) {
-        SB_AppendChar (D, OutBuffer[i]);
-    }
-}
-
-static void encodeSprite(StrBuf *D, enum Mode M, char ColorBits, char ColorMask, char LineBuffer[512],
-    int len, int LastOpaquePixel) {
-/*
-** The data starts with a byte count. It tells the number of bytes on this
-** line + 1.
-** Special case is a count of 1. It will change to next quadrant.
-** Other special case is 0. It will end the sprite.
-**
-** Ordinary data packet. These are bits in a stream.
-** 1=literal 0=packed
-** 4 bit count (+1)
-** for literal you put "count" values
-** for packed you repeat the value "count" times
-** Never use packed mode for one pixel
-** If the last bit on a line is 1 you need to add a byte of zeroes
-** A sequence 00000 ends a scan line
-**
-** All data is high nybble first
-*/
-    unsigned char V = 0;
-    signed i;
-    signed count;
-    unsigned char differ[16];
-    unsigned char *d_ptr;
-
-    AssembleByte(0, 0);
-    switch (M) {
-    case smAuto:
-    case smLiteral:
-        for (i = 0; i < len; i++) {
-            /* Fetch next pixel index into pixel buffer */
-            AssembleByte(ColorBits, LineBuffer[i] & ColorMask);
-        }
-        AssembleByte(7, 0);
-        /* Write the buffer to file */
-        WriteOutBuffer(D);
-        break;
-    case smPacked:
-        i = 0;
-        while (len) {
-            if (ChoosePackagingMode(len, i, ColorBits, LineBuffer)) {
-                /* Make runlength packet */
-                V = LineBuffer[i];
-                ++i;
-                --len;
-                count = 0;
-                do {
-                    ++count;
-                    ++i;
-                    --len;
-                } while (V == LineBuffer[i] && len && count != 15);
-
-                AssembleByte(5, count);
-                AssembleByte(ColorBits, V);
-
-            } else {
-                /* Make packed literal packet */
-                d_ptr = differ;
-                V = LineBuffer[i++];
-                *d_ptr++ = V;
-                --len;
-                count = 0;
-                while (ChoosePackagingMode(len, i, ColorBits, LineBuffer) == 0 && len && count != 15) {
-                    V = LineBuffer[i++];
-                    *d_ptr++ = V;
-                    ++count;
-                    --len;
-                }
-
-                AssembleByte(5, count | 0x10);
-                d_ptr = differ;
-                do {
-                    AssembleByte(ColorBits, *d_ptr++);
-                } while (--count >= 0);
-
-            }
-        }
-        AssembleByte(8, 0);
-        /* Write the buffer to file */
-        WriteOutBuffer(D);
-        break;
-
-    case smShaped:
-        if (LastOpaquePixel > -1) {
-            if (LastOpaquePixel < len - 1) {
-                len = LastOpaquePixel + 1;
-            }
-            i = 0;
-            while (len) {
-                if (ChoosePackagingMode(len, i, ColorBits, LineBuffer)) {
-                    /* Make runlength packet */
-                    V = LineBuffer[i];
-                    ++i;
-                    --len;
-                    count = 0;
-                    do {
-                        ++count;
-                        ++i;
-                        --len;
-                    } while (V == LineBuffer[i] && len && count != 15);
-
-                    AssembleByte(5, count);
-                    AssembleByte(ColorBits, V);
-
-                } else {
-                    /* Make packed literal packet */
-                    d_ptr = differ;
-                    V = LineBuffer[i++];
-                    *d_ptr++ = V;
-                    --len;
-                    count = 0;
-                    while (ChoosePackagingMode(len, i, ColorBits, LineBuffer) == 0 && len && count != 15) {
-                        V = LineBuffer[i++];
-                        *d_ptr++ = V;
-                        ++count;
-                        --len;
-                    }
-
-                    AssembleByte(5, count | 0x10);
-                    d_ptr = differ;
-                    do {
-                        AssembleByte(ColorBits, *d_ptr++);
-                    } while (--count >= 0);
-
-                }
-            }
-            AssembleByte(5, 0);
-            AssembleByte(8, 0);
-            /* Write the buffer to file */
-            WriteOutBuffer(D);
-        }
-        break;
-    }
-}
-
-StrBuf* GenLynxSprite (const Bitmap* B, const Collection* A)
-/* Generate binary output in Lynx sprite format for the bitmap B. The output
-** is stored in a string buffer (which is actually a dynamic char array) and
-** returned.
-**
-** The Lynx will draw 4 quadrants:
-** - Down right
-** - Up right
-** - Up left
-** - Down left
-**
-** The sprite will end with a byte 0.
-*/
-{
-    enum Mode M;
-    StrBuf* D;
-    signed X, Y;
-    unsigned OX, OY;
-    char ColorBits;
-    char ColorMask;
-    char EdgeIndex;
-
-    /* Get EdgeIndex */
-    EdgeIndex = GetEdgeIndex (A);
-
-    /* Action point of the sprite */
-    OX = GetActionPointX (A);
-    OY = GetActionPointY (A);
-    if (OX >= GetBitmapWidth (B)) {
-        Error ("Action point X cannot be larger than bitmap width");
-    }
-    if (OY >= GetBitmapHeight (B)) {
-        Error ("Action point Y cannot be larger than bitmap height");
-    }
-
-    /* Output the image properties */
-    Print (stdout, 1, "Image is %ux%u with %u colors%s\n",
-           GetBitmapWidth (B), GetBitmapHeight (B), GetBitmapColors (B),
-           BitmapIsIndexed (B)? " (indexed)" : "");
-
-    /* Get the sprite mode */
-    M = GetMode (A);
-
-    /* Now check if bitmap indexes are ok */
-    if (GetBitmapColors (B) > 16) {
-        Error ("Too many colors for a Lynx sprite");
-    }
-    ColorBits = 4;
-    ColorMask = 0x0f;
-    if (GetBitmapColors (B) < 9) {
-        ColorBits = 3;
-        ColorMask = 0x07;
-    }
-    if (GetBitmapColors (B) < 5) {
-        ColorBits = 2;
-        ColorMask = 0x03;
-    }
-    if (GetBitmapColors (B) < 3) {
-        ColorBits = 1;
-        ColorMask = 0x01;
-    }
-
-    /* Create the output buffer and resize it to the required size. */
-    D = NewStrBuf ();
-    SB_Realloc (D, 63);
-
-    /* Convert the image for quadrant bottom right */
-    for (Y = OY; Y < (signed)GetBitmapHeight (B); ++Y) {
-        signed i = 0;
-        signed LastOpaquePixel = -1;
-        char LineBuffer[512]; /* The maximum size is 508 pixels */
-
-        /* Fill the LineBuffer for easier optimisation */
-        for (X = OX; X < (signed)GetBitmapWidth (B); ++X) {
-
-            /* Fetch next bit into byte buffer */
-            LineBuffer[i] = GetPixel (B, X, Y).Index & ColorMask;
-
-            if (LineBuffer[i] != EdgeIndex) {
-                LastOpaquePixel = i;
-            }
-            ++i;
-        }
-
-        encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel);
-    }
-
-    if ((OY == 0) && (OX == 0)) {
-        /* Trivial case only one quadrant */
-
-        /* Mark end of sprite */
-        SB_AppendChar (D, 0);
-
-        /* Return the converted bitmap */
-        return D;
-    }
-
-    /* Next quadrant */
-    SB_AppendChar (D, 1);
-
-    /* Convert the image for quadrant top right */
-    for (Y = OY - 1; Y >= 0; --Y) {
-        signed i = 0;
-        signed LastOpaquePixel = -1;
-        char LineBuffer[512]; /* The maximum size is 508 pixels */
-
-        /* Fill the LineBuffer for easier optimisation */
-        for (X = OX; X < (signed)GetBitmapWidth (B); ++X) {
-
-            /* Fetch next bit into byte buffer */
-            LineBuffer[i] = GetPixel (B, X, Y).Index & ColorMask;
-
-            if (LineBuffer[i] != EdgeIndex) {
-                LastOpaquePixel = i;
-            }
-            ++i;
-        }
-
-        encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel);
-    }
-
-    if (OX == 0) {
-        /* Special case only two quadrants */
-
-        /* Mark end of sprite */
-        SB_AppendChar (D, 0);
-
-        /* Return the converted bitmap */
-        return D;
-    }
-
-    /* Next quadrant */
-    SB_AppendChar (D, 1);
-
-    /* Convert the image for quadrant top left */
-    for (Y = OY - 1; Y >= 0; --Y) {
-        signed i = 0;
-        signed LastOpaquePixel = -1;
-        char LineBuffer[512]; /* The maximum size is 508 pixels */
-
-        /* Fill the LineBuffer for easier optimisation */
-        for (X = OX - 1; X >= 0; --X) {
-
-            /* Fetch next bit into byte buffer */
-            LineBuffer[i] = GetPixel (B, X, Y).Index & ColorMask;
-
-            if (LineBuffer[i] != EdgeIndex) {
-                LastOpaquePixel = i;
-            }
-            ++i;
-        }
-
-        encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel);
-    }
-
-    /* Next quadrant */
-    SB_AppendChar (D, 1);
-
-    /* Convert the image for quadrant bottom left */
-    for (Y = OY; Y < (signed)GetBitmapHeight (B); ++Y) {
-        signed i = 0;
-        signed LastOpaquePixel = -1;
-        char LineBuffer[512]; /* The maximum size is 508 pixels */
-
-        /* Fill the LineBuffer for easier optimisation */
-        for (X = OX - 1; X >= 0; --X) {
-
-            /* Fetch next bit into byte buffer */
-            LineBuffer[i] = GetPixel (B, X, Y).Index & ColorMask;
-
-            if (LineBuffer[i] != EdgeIndex) {
-                LastOpaquePixel = i;
-            }
-            ++i;
-        }
-
-        encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel);
-    }
-
-    /* End sprite */
-    SB_AppendChar (D, 0);
-
-    /* Return the converted bitmap */
-    return D;
-}
diff --git a/src/sp65/lynxsprite.h b/src/sp65/lynxsprite.h
deleted file mode 100644 (file)
index 4f9a9f0..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                               lynxsprite.h                                */
-/*                                                                           */
-/*    Lynx sprite format backend for the sp65 sprite and bitmap utility      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef LYNXSPRITE_H
-#define LYNXSPRITE_H
-
-
-
-/* common */
-#include "coll.h"
-#include "strbuf.h"
-
-/* sp65 */
-#include "bitmap.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-StrBuf* GenLynxSprite (const Bitmap* B, const Collection* A);
-/* Generate binary output in packed Lynx sprite format for the bitmap B. The output 
-** is stored in a string buffer (which is actually a dynamic char array) and
-** returned.
-*/
-
-
-
-/* End of lynxsprite.h */
-
-#endif
diff --git a/src/sp65/main.c b/src/sp65/main.c
deleted file mode 100644 (file)
index ef2188c..0000000
+++ /dev/null
@@ -1,407 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  main.c                                   */
-/*                                                                           */
-/*            Main program of the sp65 sprite and bitmap utility             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-/* common */
-#include "abend.h"
-#include "cmdline.h"
-#include "print.h"
-#include "version.h"
-
-/* sp65 */
-#include "attr.h"
-#include "convert.h"
-#include "error.h"
-#include "input.h"
-#include "output.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Bitmap first read */
-static Bitmap* B;
-
-/* Bitmap working copy */
-static Bitmap* C;
-
-/* Output data from convertion */
-static StrBuf* D;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void Usage (void)
-/* Print usage information and exit */
-{
-    printf (
-            "Usage: %s [options] file [options] [file]\n"
-            "Short options:\n"
-            "  -V\t\t\t\tPrint the version number and exit\n"
-            "  -c fmt[,attrlist]\t\tConvert into target format\n"
-            "  -h\t\t\t\tHelp (this text)\n"
-            "  -lc\t\t\t\tList all possible conversions\n"
-            "  -r file[,attrlist]\t\tRead an input file\n"
-            "  -v\t\t\t\tIncrease verbosity\n"
-            "  -w file[,attrlist]\t\tWrite the output to a file\n"
-            "\n"
-            "Long options:\n"
-            "  --convert-to fmt[,attrlist]\tConvert into target format\n"
-            "  --help\t\t\tHelp (this text)\n"
-            "  --list-conversions\t\tList all possible conversions\n"
-            "  --pop\t\t\t\tRestore the original loaded image\n"
-            "  --read file[,attrlist]\tRead an input file\n"
-            "  --slice x,y,w,h\t\tGenerate a slice from the loaded bitmap\n"
-            "  --verbose\t\t\tIncrease verbosity\n"
-            "  --version\t\t\tPrint the version number and exit\n"
-            "  --write file[,attrlist]\tWrite the output to a file\n",
-            ProgName);
-}
-
-
-
-static void SetWorkBitmap (Bitmap* N)
-/* Delete an old working bitmap and set a new one. The new one may be NULL
-** to clear it.
-*/
-{
-    /* If we have a distinct work bitmap, delete it */
-    if (C != 0 && C != B) {
-        FreeBitmap (C);
-    }
-
-    /* Set the new one */
-    C = N;
-}
-
-
-
-static void SetOutputData (StrBuf* N)
-/* Delete the old output data and replace it by the given one. The new one
-** may be NULL to clear it.
-*/
-{
-    /* Delete the old output data */
-    if (D != 0) {
-        FreeStrBuf (D);
-    }
-
-    /* Set the new one */
-    D = N;
-}
-
-
-
-static void OptConvertTo (const char* Opt attribute ((unused)), const char* Arg)
-/* Convert the bitmap into a target format */
-{
-    static const char* NameList[] = {
-        "format"
-    };
-
-    /* Parse the argument */
-    Collection* A = ParseAttrList (Arg, NameList, 2);
-
-    /* We must have a bitmap */
-    if (C == 0) {
-        Error ("No bitmap to convert");
-    }
-
-    /* Convert the bitmap */
-    SetOutputData (ConvertTo (C, A));
-
-    /* Delete the attribute list */
-    FreeAttrList (A);
-}
-
-
-
-static void OptDumpPalette (const char* Opt attribute ((unused)),
-                            const char* Arg attribute ((unused)))
-/* Dump the palette of the current work bitmap */
-{
-    /* We must have a bitmap ... */
-    if (C == 0) {
-        Error ("No bitmap");
-    }
-
-    /* ... which must be indexed */
-    if (!BitmapIsIndexed (C)) {
-        Error ("Current bitmap is not indexed");
-    }
-
-    /* Dump the palette */
-    DumpPalette (stdout, GetBitmapPalette (C));
-}
-
-
-
-static void OptHelp (const char* Opt attribute ((unused)),
-                     const char* Arg attribute ((unused)))
-/* Print usage information and exit */
-{
-    Usage ();
-    exit (EXIT_SUCCESS);
-}
-
-
-
-static void OptListConversions (const char* Opt attribute ((unused)),
-                                const char* Arg attribute ((unused)))
-/* Print a list of all conversions */
-{
-    ListConversionTargets (stdout);
-    exit (EXIT_SUCCESS);
-}
-
-
-
-static void OptPop (const char* Opt attribute ((unused)),
-                    const char* Arg attribute ((unused)))
-/* Restore the original image */
-{
-    /* C and B must differ and we must have an original */
-    if (B == 0 || C == 0 || C == B) {
-        Error ("Nothing to pop");
-    }
-
-    /* Delete the changed image and restore the original one */
-    SetWorkBitmap (B);
-}
-
-
-
-static void OptRead (const char* Opt attribute ((unused)), const char* Arg)
-/* Read an input file */
-{
-    static const char* NameList[] = {
-        "name", "format"
-    };
-
-
-    /* Parse the argument */
-    Collection* A = ParseAttrList (Arg, NameList, 2);
-
-    /* Clear the working copy */
-    SetWorkBitmap (0);
-
-    /* Delete the original */
-    FreeBitmap (B);
-
-    /* Read the file and use it as original and as working copy */
-    B = C = ReadInputFile (A);
-
-    /* Delete the attribute list */
-    FreeAttrList (A);
-}
-
-
-
-static void OptSlice (const char* Opt attribute ((unused)), const char* Arg)
-/* Generate a slice of a bitmap */
-{
-    unsigned X, Y, W, H;
-    unsigned char T;
-
-    /* We must have a bitmap otherwise we cannot slice */
-    if (C == 0) {
-        Error ("Nothing to slice");
-    }
-
-    /* The argument is X,Y,W,H */
-    if (sscanf (Arg, "%u,%u,%u,%u,%c", &X, &Y, &W, &H, &T) != 4) {
-        Error ("Invalid argument. Slice must be given as X,Y,W,H");
-    }
-
-    /* Check the coordinates to be within the original bitmap */
-    if (W > BM_MAX_WIDTH || H > BM_MAX_HEIGHT ||
-        X + W > GetBitmapWidth (C) ||
-        Y + H > GetBitmapHeight (C)) {
-        Error ("Invalid slice coordinates and/or size");
-    }
-
-    /* Create the slice */
-    SetWorkBitmap (SliceBitmap (C, X, Y, W, H));
-}
-
-
-
-static void OptVerbose (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Increase versbosity */
-{
-    ++Verbosity;
-}
-
-
-
-static void OptVersion (const char* Opt attribute ((unused)),
-                        const char* Arg attribute ((unused)))
-/* Print the assembler version */
-{
-    fprintf (stderr, "%s V%s\n", ProgName, GetVersionAsString ());
-}
-
-
-
-static void OptWrite (const char* Opt attribute ((unused)), const char* Arg)
-/* Write an output file */
-{
-    static const char* NameList[] = {
-        "name", "format"
-    };
-
-
-    /* Parse the argument */
-    Collection* A = ParseAttrList (Arg, NameList, 2);
-
-    /* We must have output data */
-    if (D == 0) {
-        Error ("No conversion, so there's nothing to write");
-    }
-
-    /* Write the file */
-    WriteOutputFile (D, A, C);
-
-    /* Delete the attribute list */
-    FreeAttrList (A);
-}
-
-
-
-int main (int argc, char* argv [])
-/* sp65 main program */
-{
-    /* Program long options */
-    static const LongOpt OptTab[] = {
-        { "--convert-to",       1,      OptConvertTo            },
-        { "--dump-palette",     0,      OptDumpPalette          },
-        { "--help",             0,      OptHelp                 },
-        { "--list-conversions", 0,      OptListConversions      },
-        { "--pop",              0,      OptPop                  },
-        { "--read",             1,      OptRead                 },
-        { "--slice",            1,      OptSlice                },
-        { "--verbose",          0,      OptVerbose              },
-        { "--version",          0,      OptVersion              },
-        { "--write",            1,      OptWrite                },
-    };
-
-    unsigned I;
-
-    /* Initialize the cmdline module */
-    InitCmdLine (&argc, &argv, "sp65");
-
-    /* Check the parameters */
-    I = 1;
-    while (I < ArgCount) {
-
-        /* Get the argument */
-        const char* Arg = ArgVec[I];
-
-        /* Check for an option */
-        if (Arg[0] == '-') {
-            switch (Arg[1]) {
-
-                case '-':
-                    LongOption (&I, OptTab, sizeof(OptTab)/sizeof(OptTab[0]));
-                    break;
-
-                case 'V':
-                    OptVersion (Arg, 0);
-                    break;
-
-                case 'c':
-                    OptConvertTo (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'h':
-                    OptHelp (Arg, 0);
-                    break;
-
-                case 'l':
-                    if (Arg[2] == 'c') {
-                        OptListConversions (Arg, 0);
-                    } else {
-                        UnknownOption (Arg);
-                    }
-                    break;
-
-                case 'r':
-                    OptRead (Arg, GetArg (&I, 2));
-                    break;
-
-                case 'v':
-                    OptVerbose (Arg, 0);
-                    break;
-
-                case 'w':
-                    OptWrite (Arg, GetArg (&I, 2));
-                    break;
-
-                default:
-                    UnknownOption (Arg);
-                    break;
-
-            }
-        } else {
-            /* We don't accept anything else */
-            AbEnd ("Don't know what to do with `%s'", Arg);
-        }
-
-        /* Next argument */
-        ++I;
-    }
-
-    /* Cleanup data */
-    SetWorkBitmap (C);
-    FreeBitmap (B);
-    FreeStrBuf (D);
-
-    /* Success */
-    return EXIT_SUCCESS;
-}
diff --git a/src/sp65/output.c b/src/sp65/output.c
deleted file mode 100644 (file)
index 3ffa38d..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 output.c                                  */
-/*                                                                           */
-/*   Output format/file definitions for the sp65 sprite and bitmap utility   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <stdlib.h>
-
-/* common */
-#include "fileid.h"
-
-/* sp65 */
-#include "asm.h"
-#include "attr.h"
-#include "bin.h"
-#include "c.h"
-#include "error.h"
-#include "output.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Different types of output formats */
-enum OutputFormat {
-    ofAsm,                      /* Output assembler source */
-    ofBin,                      /* Output raw binary format */
-    ofC,                        /* Output C code */
-
-    ofCount                     /* Number of output formats without ofAuto */
-};
-
-typedef struct OutputFormatDesc OutputFormatDesc;
-struct OutputFormatDesc {
-
-    /* Write routine */
-    void (*Write) (const StrBuf*, const Collection*, const Bitmap*);
-
-};
-
-/* Table with Output formats */
-static OutputFormatDesc OutputFormatTable[ofCount] = {
-    {   WriteAsmFile    },
-    {   WriteBinFile    },
-    {   WriteCFile      },
-};
-
-/* Table that maps extensions to Output formats. Must be sorted alphabetically */
-static const FileId FormatTable[] = {
-    /* Upper case stuff for obsolete operating systems */
-    {   "A",    ofAsm           },
-    {   "ASM",  ofAsm           },
-    {   "BIN",  ofBin           },
-    {   "C",    ofC             },
-    {   "INC",  ofAsm           },
-    {   "S",    ofAsm           },
-
-    {   "a",    ofAsm           },
-    {   "asm",  ofAsm           },
-    {   "bin",  ofBin           },
-    {   "c",    ofC             },
-    {   "inc",  ofAsm           },
-    {   "s",    ofAsm           },
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void WriteOutputFile (const StrBuf* Data, const Collection* A, const Bitmap* B)
-/* Write the contents of Data to a file. Format, file name etc. must be given
-** as attributes in A. If no format is given, the function tries to autodetect
-** it by using the extension of the file name. The bitmap passed to the
-** function is the bitmap used as source of the conversion. It may be used to
-** determine the bitmap properties for documentation purposes.
-*/
-{
-    const FileId* F;
-
-    /* Get the file format from the command line */
-    const char* Format = GetAttrVal (A, "format");
-    if (Format != 0) {
-        /* Format is given, search for it in the table. */
-        F = bsearch (Format,
-                     FormatTable,
-                     sizeof (FormatTable) / sizeof (FormatTable[0]),
-                     sizeof (FormatTable[0]),
-                     CompareFileId);
-        if (F == 0) {
-            Error ("Unknown output format `%s'", Format);
-        }
-    } else {
-        /* No format given, use file name extension */
-        const char* Name = NeedAttrVal (A, "name", "write");
-        F = GetFileId (Name, FormatTable,
-                       sizeof (FormatTable) / sizeof (FormatTable[0]));
-        /* Found? */
-        if (F == 0) {
-            Error ("Cannot determine file format of output file `%s'", Name);
-        }
-    }
-
-    /* Call the format specific write */
-    OutputFormatTable[F->Id].Write (Data, A, B);
-}
diff --git a/src/sp65/output.h b/src/sp65/output.h
deleted file mode 100644 (file)
index ff9a59b..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 output.h                                  */
-/*                                                                           */
-/*   Output format/file definitions for the sp65 sprite and bitmap utility   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef OUTPUT_H
-#define OUTPUT_H
-
-
-
-/* common */
-#include "strbuf.h"
-
-/* sp65 */
-#include "bitmap.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-void WriteOutputFile (const StrBuf* Data, const Collection* A, const Bitmap* B);
-/* Write the contents of Data to a file. Format, file name etc. must be given
-** as attributes in A. If no format is given, the function tries to autodetect
-** it by using the extension of the file name. The bitmap passed to the
-** function is the bitmap used as source of the conversion. It may be used to
-** determine the bitmap properties for documentation purposes.
-*/
-
-
-
-/* End of output.h */
-
-#endif
diff --git a/src/sp65/palette.c b/src/sp65/palette.c
deleted file mode 100644 (file)
index 333843a..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 palette.c                                 */
-/*                                                                           */
-/*      Color palette definition for the sp65 sprite and bitmap utility      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <string.h>
-
-/* common */
-#include "check.h"
-#include "xmalloc.h"
-
-/* sp65 */
-#include "palette.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Palette* NewPalette (unsigned Entries)
-/* Create a new palette with the given number of entries */
-{
-    Palette* P;
-
-    /* Some safety checks */
-    PRECONDITION (Entries > 0 && Entries <= 256);
-
-    /* Allocate memory */
-    P = xmalloc (sizeof (*P) + (Entries - 1) * sizeof (P->Entries[0]));
-
-    /* Initialize the struct, then return it */
-    P->Count = Entries;
-    return P;
-}
-
-
-
-Palette* NewMonochromePalette (void)
-/* Create and return a palette with two entries (black and white) */
-{
-    /* Create a new palette */
-    Palette* P = NewPalette (2);
-
-    /* Set the two colors */
-    P->Entries[0] = RGBA (0x00, 0x00, 0x00, 0x00);
-    P->Entries[1] = RGBA (0xFF, 0xFF, 0xFF, 0x00);
-
-    /* Return the new palette */
-    return P;
-}
-
-
-
-Palette* DupPalette (const Palette* P)
-/* Create a copy of a palette */
-{
-    Palette* N;
-
-
-    /* Allow to pass a NULL palette */
-    if (P == 0) {
-        return 0;
-    }
-
-    /* Create a new palette */
-    N = NewPalette (P->Count);
-
-    /* Copy the palette data */
-    memcpy (N->Entries, P->Entries, P->Count * sizeof (P->Entries[0]));
-
-    /* Return the copy */
-    return N;
-}
-
-
-
-void FreePalette (Palette* P)
-/* Free a dynamically allocated palette */
-{
-    xfree (P);
-}
-
-
-
-void DumpPalette (FILE* F, const Palette* P)
-/* Dump the palette in readable form to the given file */
-{
-    unsigned I;
-
-    fputs ("Entry     R      G      B      A     Combined\n", F);
-    fputs ("----------------------------------------------\n", F);
-    for (I = 0; I < P->Count; ++I) {
-
-        /* Get the color entry */
-        const Color* C = P->Entries + I;
-
-        /* Output it */
-        fprintf (F,
-                 " %3u    %3u    %3u    %3u    %3u    #%08lX\n",
-                 I,
-                 C->R, C->G, C->B, C->A,
-                 (((unsigned long) C->A) << 24) |
-                 (((unsigned long) C->B) << 16) |
-                 (((unsigned long) C->G) <<  8) |
-                 (((unsigned long) C->R) <<  0));
-    }
-}
diff --git a/src/sp65/palette.h b/src/sp65/palette.h
deleted file mode 100644 (file)
index 61eb651..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                 palette.h                                 */
-/*                                                                           */
-/*      Color palette definition for the sp65 sprite and bitmap utility      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef PALETTE_H
-#define PALETTE_H
-
-
-
-#include <stdio.h>
-
-/* sp65 */
-#include "color.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-typedef struct Palette Palette;
-struct Palette {
-    unsigned            Count;          /* Number of entries */
-    Color               Entries[1];     /* Palette entries - dynamic */
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Palette* NewPalette (unsigned Entries);
-/* Create a new palette with the given number of entries */
-
-Palette* NewMonochromePalette (void);
-/* Create and return a palette with two entries (black and white) */
-
-Palette* DupPalette (const Palette* P);
-/* Create a copy of a palette */
-
-void FreePalette (Palette* P);
-/* Free a dynamically allocated palette */
-
-void DumpPalette (FILE* F, const Palette* P);
-/* Dump the palette in readable form to the given file */
-
-
-
-/* End of palette.h */
-
-#endif
diff --git a/src/sp65/pcx.c b/src/sp65/pcx.c
deleted file mode 100644 (file)
index 273ad8c..0000000
+++ /dev/null
@@ -1,442 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   pcx.c                                   */
-/*                                                                           */
-/*                              Read PCX files                               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-
-/* common */
-#include "print.h"
-#include "xmalloc.h"
-
-/* sp65 */
-#include "attr.h"
-#include "error.h"
-#include "fileio.h"
-#include "pcx.h"
-
-
-
-/*****************************************************************************/
-/*                                  Macros                                   */
-/*****************************************************************************/
-
-
-
-/* Some PCX constants */
-#define PCX_MAGIC_ID            0x0A
-#define PCX_MAX_PLANES          4
-
-/* A raw PCX header is just a block of bytes */
-typedef unsigned char           RawPCXHeader[128];
-
-/* Structured PCX header */
-typedef struct PCXHeader PCXHeader;
-struct PCXHeader {
-    unsigned        Id;
-    unsigned        FileVersion;
-    unsigned        Compressed;
-    unsigned        BPP;
-    unsigned        XMin;
-    unsigned        YMin;
-    unsigned        XMax;
-    unsigned        YMax;
-    unsigned        XDPI;
-    unsigned        YDPI;
-    unsigned        Planes;
-    unsigned        BytesPerPlane;
-    unsigned        PalInfo;
-    unsigned        ScreenWidth;
-    unsigned        ScreenHeight;
-
-    /* Calculated data */
-    unsigned        Width;
-    unsigned        Height;
-};
-
-/* Read a little endian word from a byte array at offset O */
-#define WORD(H, O)              ((H)[O] | ((H)[O+1] << 8))
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static PCXHeader* NewPCXHeader (void)
-/* Allocate a new PCX header and return it */
-{
-    /* No initialization here */
-    return xmalloc (sizeof (PCXHeader));
-}
-
-
-
-static void FreePCXHeader (PCXHeader* H)
-/* Free a PCX header structure */
-{
-    xfree (H);
-}
-
-
-
-static PCXHeader* ReadPCXHeader (FILE* F, const char* Name)
-/* Read a structured PCX header from the given file and return it */
-{
-    RawPCXHeader H;
-
-    /* Allocate a new PCXHeader structure */
-    PCXHeader* P = NewPCXHeader ();
-
-    /* Read the raw header */
-    ReadData (F, H, sizeof (H));
-
-    /* Convert the data into structured form */
-    P->Id               = H[0];
-    P->FileVersion      = H[1];
-    P->Compressed       = H[2];
-    P->BPP              = H[3];
-    P->XMin             = WORD (H, 4);
-    P->YMin             = WORD (H, 6);
-    P->XMax             = WORD (H, 8);
-    P->YMax             = WORD (H, 10);
-    P->XDPI             = WORD (H, 12);
-    P->YDPI             = WORD (H, 14);
-    P->Planes           = H[65];
-    P->BytesPerPlane    = WORD (H, 66);
-    P->PalInfo          = WORD (H, 68);
-    P->ScreenWidth      = WORD (H, 70);
-    P->ScreenHeight     = WORD (H, 72);
-    P->Width            = P->XMax - P->XMin + 1;
-    P->Height           = P->YMax - P->YMin + 1;
-
-    /* Check the header data */
-    if (P->Id != PCX_MAGIC_ID || P->FileVersion == 1 || P->FileVersion > 5) {
-        Error ("`%s' is not a PCX file", Name);
-    }
-    if (P->Compressed > 1) {
-        Error ("Unsupported compression (%d) in PCX file `%s'",
-               P->Compressed, Name);
-    }
-    /* We support:
-    **   - one plane with either 1 or 8 bits per pixel
-    **   - three planes with 8 bits per pixel
-    **   - four planes with 8 bits per pixel (does this exist?)
-    */
-    if (!((P->BPP == 1 && P->Planes == 1) ||
-          (P->BPP == 8 && (P->Planes == 1 || P->Planes == 3 || P->Planes == 4)))) {
-        /* We could support others, but currently we don't */
-        Error ("Unsupported PCX format: %u planes, %u bpp in PCX file `%s'",
-               P->Planes, P->BPP, Name);
-    }
-    if (P->PalInfo != 1 && P->PalInfo != 2) {
-        Error ("Unsupported palette info (%u) in PCX file `%s'",
-               P->PalInfo, Name);
-    }
-    if (!ValidBitmapSize (P->Width, P->Height)) {
-        Error ("PCX file `%s' has an unsupported size (w=%u, h=%d)",
-               Name, P->Width, P->Height);
-    }
-
-    /* Return the structured header */
-    return P;
-}
-
-
-
-static void DumpPCXHeader (const PCXHeader* P, const char* Name)
-/* Dump the header of the PCX file in readable form to stdout */
-{
-    printf ("File name:       %s\n", Name);
-    printf ("PCX Version:     ");
-    switch (P->FileVersion) {
-        case 0: puts ("2.5");                             break;
-        case 2: puts ("2.8 with palette");                break;
-        case 3: puts ("2.8 without palette");             break;
-        case 4: puts ("PCX for Windows without palette"); break;
-        case 5: puts ("3.0");                             break;
-    }
-    printf ("Image type:      %s\n", P->PalInfo? "color" : "grayscale");
-    printf ("Compression:     %s\n", P->Compressed? "RLE" : "None");
-    printf ("Structure:       %u planes of %u bits\n", P->Planes, P->BPP);
-    printf ("Bounding box:    [%u/%u - %u/%u]\n", P->XMin, P->YMin, P->XMax, P->YMax);
-    printf ("Resolution:      %u/%u DPI\n", P->XDPI, P->YDPI);
-    printf ("Screen size:     %u/%u\n", P->ScreenWidth, P->ScreenHeight);
-    printf ("Bytes per plane: %u\n", P->BytesPerPlane);
-}
-
-
-
-static void ReadPlane (FILE* F, PCXHeader* P, unsigned char* L)
-/* Read one (possibly compressed) plane from the file */
-{
-    if (P->Compressed) {
-
-        /* Uncompress RLE data */
-        unsigned Remaining = P->Width;
-        while (Remaining) {
-
-            unsigned char C;
-
-            /* Read the next byte */
-            unsigned char B = Read8 (F);
-
-            /* Check for a run length */
-            if ((B & 0xC0) == 0xC0) {
-                C = (B & 0x3F);         /* Count */
-                B = Read8 (F);          /* Value */
-            } else {
-                C = 1;
-            }
-
-            /* Write the data to the buffer */
-            if (C > Remaining) {
-                C = Remaining;
-            }
-            memset (L, B, C);
-
-            /* Bump counters */
-            L += C;
-            Remaining -= C;
-
-        }
-    } else {
-
-        /* Just read one line */
-        ReadData (F, L, P->Width);
-
-    }
-}
-
-
-
-Bitmap* ReadPCXFile (const Collection* A)
-/* Read a bitmap from a PCX file */
-{
-    PCXHeader* P;
-    Bitmap* B;
-    unsigned char* L;
-    Pixel* Px;
-    unsigned MaxIdx = 0;
-    unsigned X, Y;
-
-
-    /* Get the file name */
-    const char* Name = NeedAttrVal (A, "name", "read pcx file");
-
-    /* Open the file */
-    FILE* F = fopen (Name, "rb");
-    if (F == 0) {
-        Error ("Cannot open PCX file `%s': %s", Name, strerror (errno));
-    }
-
-    /* Read the PCX header */
-    P = ReadPCXHeader (F, Name);
-
-    /* Dump the header if requested */
-    if (Verbosity > 0) {
-        DumpPCXHeader (P, Name);
-    }
-
-    /* Create the bitmap */
-    B = NewBitmap (P->Width, P->Height);
-
-    /* Copy the name */
-    SB_CopyStr (&B->Name, Name);
-
-    /* Allocate memory for the scan line */
-    L = xmalloc (P->Width);
-
-    /* Read the pixel data */
-    Px = B->Data;
-    if (P->Planes == 1) {
-
-        /* This is either monochrome or indexed */
-        if (P->BPP == 1) {
-            /* Monochrome */
-            for (Y = 0, Px = B->Data; Y < P->Height; ++Y) {
-
-                unsigned I;
-                unsigned char Mask;
-
-                /* Read the plane */
-                ReadPlane (F, P, L);
-
-                /* Create pixels */
-                for (X = 0, I = 0, Mask = 0x01; X < P->Width; ++Px) {
-                    Px->Index = (L[I] & Mask) != 0;
-                    if (Mask == 0x80) {
-                        Mask = 0x01;
-                        ++I;
-                    } else {
-                        Mask <<= 1;
-                    }
-                }
-
-            }
-        } else {
-            /* One plane with 8bpp is indexed */
-            for (Y = 0, Px = B->Data; Y < P->Height; ++Y) {
-
-                /* Read the plane */
-                ReadPlane (F, P, L);
-
-                /* Create pixels */
-                for (X = 0; X < P->Width; ++X, ++Px) {
-                    if (L[X] > MaxIdx) {
-                        MaxIdx = L[X];
-                    }
-                    Px->Index = L[X];
-                }
-            }
-        }
-
-        /* One plane means we have a palette which is either part of the header
-        ** or follows.
-        */
-        if (P->PalInfo == 0) {
-
-            /* Create the monochrome palette */
-            B->Pal = NewMonochromePalette ();
-
-        } else {
-
-            unsigned      Count;
-            unsigned      I;
-            unsigned char Palette[256][3];
-            unsigned long EndPos;
-
-            /* Determine the current file position */
-            unsigned long CurPos = FileGetPos (F);
-
-            /* Seek to the end of the file */
-            (void) fseek (F, 0, SEEK_END);
-
-            /* Get this position */
-            EndPos = FileGetPos (F);
-
-            /* There's a palette if the old location is 769 bytes from the end */
-            if (EndPos - CurPos == sizeof (Palette) + 1) {
-
-                /* Seek back */
-                FileSetPos (F, CurPos);
-
-                /* Check for palette marker */
-                if (Read8 (F) != 0x0C) {
-                    Error ("Invalid palette marker in PCX file `%s'", Name);
-                }
-
-            } else if (EndPos == CurPos) {
-
-                /* The palette is in the header */
-                FileSetPos (F, 16);
-
-                /* Check the maximum index for safety */
-                if (MaxIdx > 15) {
-                    Error ("PCX file `%s' contains more than 16 indexed colors "
-                           "but no extra palette", Name);
-                }
-
-            } else {
-                Error ("Error in PCX file `%s': %lu bytes at end of pixel data",
-                       Name, EndPos - CurPos);
-            }
-
-            /* Read the palette. We will just read what we need. */
-            Count = MaxIdx + 1;
-            ReadData (F, Palette, Count * sizeof (Palette[0]));
-
-            /* Create the palette from the data */
-            B->Pal = NewPalette (Count);
-            for (I = 0; I < Count; ++I) {
-                B->Pal->Entries[I].R = Palette[I][0];
-                B->Pal->Entries[I].G = Palette[I][1];
-                B->Pal->Entries[I].B = Palette[I][2];
-                B->Pal->Entries[I].A = 0;
-            }
-
-        }
-
-    } else {
-
-        /* 3 or 4 planes are RGB or RGBA (don't know if this exists) */
-        for (Y = 0, Px = B->Data; Y < P->Height; ++Y) {
-
-            /* Read the R plane and move the data */
-            ReadPlane (F, P, L);
-            for (X = 0; X < P->Width; ++X, ++Px) {
-                Px->C.R = L[X];
-            }
-
-            /* Read the G plane and move the data */
-            ReadPlane (F, P, L);
-            for (X = 0; X < P->Width; ++X, ++Px) {
-                Px->C.G = L[X];
-            }
-
-            /* Read the B plane and move the data */
-            ReadPlane (F, P, L);
-            for (X = 0; X < P->Width; ++X, ++Px) {
-                Px->C.B = L[X];
-            }
-
-            /* Either read the A plane or clear it */
-            if (P->Planes == 4) {
-                ReadPlane (F, P, L);
-                for (X = 0; X < P->Width; ++X, ++Px) {
-                    Px->C.A = L[X];
-                }
-            } else {
-                for (X = 0; X < P->Width; ++X, ++Px) {
-                    Px->C.A = 0;
-                }
-            }
-        }
-    }
-
-    /* Close the file */
-    fclose (F);
-
-    /* Free memory for the scan line */
-    xfree (L);
-
-    /* Free the PCX header */
-    FreePCXHeader (P);
-
-    /* Return the bitmap */
-    return B;
-}
diff --git a/src/sp65/pcx.h b/src/sp65/pcx.h
deleted file mode 100644 (file)
index 038a947..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   pcx.h                                   */
-/*                                                                           */
-/*                              Read PCX files                               */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef PCX_H
-#define PCX_H
-
-
-
-/* common */
-#include "coll.h"
-
-/* sp65 */
-#include "bitmap.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-Bitmap* ReadPCXFile (const Collection* A);
-/* Read a bitmap from a PCX file */
-
-
-
-/* End of pcx.h */
-
-#endif
diff --git a/src/sp65/pixel.h b/src/sp65/pixel.h
deleted file mode 100644 (file)
index 3684b55..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                  pixel.h                                  */
-/*                                                                           */
-/*          Pixel definition for the sp65 sprite and bitmap utility          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef PIXEL_H
-#define PIXEL_H
-
-
-
-/* sp65 */
-#include "color.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* A pixel is either a color or a palette index, depending on the bitmap */
-typedef union Pixel Pixel;
-union Pixel {
-    Color       C;
-    unsigned    Index;
-};
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-/* End of pixel.h */
-
-#endif
diff --git a/src/sp65/raw.c b/src/sp65/raw.c
deleted file mode 100644 (file)
index 6844fe2..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   raw.c                                   */
-/*                                                                           */
-/*        Raw image converter for the sp65 sprite and bitmap utility         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "attrib.h"
-#include "print.h"
-
-/* sp65 */
-#include "attr.h"
-#include "error.h"
-#include "raw.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-StrBuf* GenRaw (const Bitmap* B, const Collection* A attribute ((unused)))
-/* Generate binary output in raw format. The output is stored in a string
-** buffer (which is actually a dynamic char array) and returned.
-*/
-{
-    StrBuf* D;
-    unsigned X, Y;
-
-
-    /* Output the image properties */
-    Print (stdout, 1, "Image is %ux%u with %u colors%s\n",
-           GetBitmapWidth (B), GetBitmapHeight (B), GetBitmapColors (B),
-           BitmapIsIndexed (B)? " (indexed)" : "");
-
-    /* Check the bitmap properties */
-    if (!BitmapIsIndexed (B)) {
-        Error ("The raw format needs an input bitmap in indexed format");
-    }
-
-    /* Create the output buffer and resize it to the required size. */
-    D = NewStrBuf ();
-    SB_Realloc (D, GetBitmapWidth (B) * GetBitmapHeight (B));
-
-    /* Convert the image */
-    for (Y = 0; Y < GetBitmapHeight (B); ++Y) {
-        for (X = 0; X < GetBitmapWidth (B); ++X) {
-            /* Place one pixel into the buffer */
-            SB_AppendChar (D, (unsigned char) GetPixel (B, X, Y).Index);
-        }
-    }
-
-    /* Return the converted bitmap */
-    return D;
-}
diff --git a/src/sp65/raw.h b/src/sp65/raw.h
deleted file mode 100644 (file)
index 5e83cea..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                   raw.h                                   */
-/*                                                                           */
-/*        Raw image converter for the sp65 sprite and bitmap utility         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef RAW_H
-#define RAW_H
-
-
-
-/* common */
-#include "coll.h"
-#include "strbuf.h"
-
-/* sp65 */
-#include "bitmap.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-StrBuf* GenRaw (const Bitmap* B, const Collection* A);
-/* Generate binary output in raw format. The output is stored in a string
-** buffer (which is actually a dynamic char array) and returned.
-*/
-
-
-
-/* End of raw.h */
-
-#endif
diff --git a/src/sp65/vic2sprite.c b/src/sp65/vic2sprite.c
deleted file mode 100644 (file)
index 3e99ec7..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                               vic2sprite.c                                */
-/*                                                                           */
-/*    VICII sprite format backend for the sp65 sprite and bitmap utility     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "attrib.h"
-#include "print.h"
-
-/* sp65 */
-#include "attr.h"
-#include "error.h"
-#include "vic2sprite.h"
-
-
-
-/*****************************************************************************/
-/*                                   Data                                    */
-/*****************************************************************************/
-
-
-
-/* Sprite mode */
-enum Mode {
-    smAuto,
-    smHighRes,
-    smMultiColor
-};
-
-/* Size of a sprite */
-#define WIDTH_HR        24U
-#define WIDTH_MC        12U
-#define HEIGHT          21U
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static enum Mode GetMode (const Collection* A)
-/* Return the sprite mode from the attribute collection A */
-{
-    /* Check for a mode attribute */
-    const char* Mode = GetAttrVal (A, "mode");
-    if (Mode) {
-        if (strcmp (Mode, "highres") == 0) {
-            return smHighRes;
-        } else if (strcmp (Mode, "multicolor") == 0) {
-            return smMultiColor;
-        } else {
-            Error ("Invalid value for attribute `mode'");
-        }
-    } 
-
-    return smAuto;
-}
-
-
-
-StrBuf* GenVic2Sprite (const Bitmap* B, const Collection* A)
-/* Generate binary output in VICII sprite format for the bitmap B. The output
-** is stored in a string buffer (which is actually a dynamic char array) and
-** returned.
-*/
-{
-    enum Mode M;
-    StrBuf* D;
-    unsigned X, Y;
-
-
-    /* Output the image properties */
-    Print (stdout, 1, "Image is %ux%u with %u colors%s\n",
-           GetBitmapWidth (B), GetBitmapHeight (B), GetBitmapColors (B),
-           BitmapIsIndexed (B)? " (indexed)" : "");
-
-    /* Get the sprite mode */
-    M = GetMode (A);
-
-    /* Check the height of the bitmap */
-    if (GetBitmapHeight (B) != HEIGHT) {
-        Error ("Invalid bitmap height (%u) for conversion to vic2 sprite",
-               GetBitmapHeight (B));
-    }
-
-    /* If the mode wasn't given, determine it from the image properties */
-    if (M == smAuto) {
-        switch (GetBitmapWidth (B)) {
-            case WIDTH_HR:
-                M = smHighRes;
-                break;
-            case WIDTH_MC:
-                M = smMultiColor;
-                break;
-            default:
-                Error ("Cannot determine mode from image properties");
-        }
-    }
-
-    /* Now check if mode and the image properties match */
-    if (M == smMultiColor) {
-        if (GetBitmapWidth (B) != WIDTH_MC || GetBitmapColors (B) > 4) {
-            Error ("Invalid image properties for multicolor sprite");
-        }
-    } else {
-        if (GetBitmapWidth (B) != WIDTH_HR || GetBitmapColors (B) > 2) {
-            Error ("Invalid image properties for highres sprite");
-        }
-    }
-
-    /* Create the output buffer and resize it to the required size. */
-    D = NewStrBuf ();
-    SB_Realloc (D, 63);
-
-    /* Convert the image */
-    for (Y = 0; Y < HEIGHT; ++Y) {
-        unsigned char V = 0;
-        if (M == smHighRes) {
-            for (X = 0; X < WIDTH_HR; ++X) {
-
-                /* Fetch next bit into byte buffer */
-                V = (V << 1) | (GetPixel (B, X, Y).Index & 0x01);
-
-                /* Store full bytes into the output buffer */
-                if ((X & 0x07) == 0x07) {
-                    SB_AppendChar (D, V);
-                    V = 0;
-                }
-            }
-        } else {
-            for (X = 0; X < WIDTH_MC; ++X) {
-
-                /* Fetch next bit into byte buffer */
-                V = (V << 2) | (GetPixel (B, X, Y).Index & 0x03);
-
-                /* Store full bytes into the output buffer */
-                if ((X & 0x03) == 0x03) {
-                    SB_AppendChar (D, V);
-                    V = 0;
-                }
-            }
-        }
-    }
-
-    /* Return the converted bitmap */
-    return D;
-}
diff --git a/src/sp65/vic2sprite.h b/src/sp65/vic2sprite.h
deleted file mode 100644 (file)
index b6c839c..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                               vic2sprite.h                                */
-/*                                                                           */
-/*    VICII sprite format backend for the sp65 sprite and bitmap utility     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2012,      Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef VIC2SPRITE_H
-#define VIC2SPRITE_H
-
-
-
-/* common */
-#include "coll.h"
-#include "strbuf.h"
-
-/* sp65 */
-#include "bitmap.h"
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-StrBuf* GenVic2Sprite (const Bitmap* B, const Collection* A);
-/* Generate binary output in VICII sprite format for the bitmap B. The output 
-** is stored in a string buffer (which is actually a dynamic char array) and
-** returned.
-*/
-
-
-
-/* End of vic2sprite.h */
-
-#endif
diff --git a/test/.gitignore b/test/.gitignore
deleted file mode 100644 (file)
index 5761abc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.o
diff --git a/test/Makefile b/test/Makefile
deleted file mode 100644 (file)
index 1ad86ca..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-
-# top-level makefile for the regression tests
-
-# You can comment this special target when you debug the regression tests.
-# Then, make will give you more progress reports.
-.SILENT:
-
-ifneq ($(shell echo),)
-  CMD_EXE := 1
-endif
-
-ifdef CMD_EXE
-  EXE := .exe
-  DEL = -del /f $(subst /,\,$1)
-  MKDIR = mkdir $(subst /,\,$1)
-  RMDIR = -rmdir /s /q $(subst /,\,$1)
-else
-  EXE :=
-  DEL = $(RM) $1
-  MKDIR = mkdir $1
-  RMDIR = $(RM) -r $1
-endif
-
-WORKDIR := ../testwrk
-
-CC := gcc
-
-.PHONY: all dotests continue mostly-clean clean
-
-all: dotests
-
-$(WORKDIR):
-       $(call MKDIR,$(WORKDIR))
-
-$(WORKDIR)/bdiff$(EXE): bdiff.c | $(WORKDIR)
-       $(CC) -O2 -o $@ $<
-
-.NOTPARALLEL:
-
-dotests: mostly-clean continue
-
-continue: $(WORKDIR)/bdiff$(EXE)
-       @$(MAKE) -C val all
-       @$(MAKE) -C ref all
-       @$(MAKE) -C err all
-       @$(MAKE) -C misc all
-
-mostly-clean:
-       @$(MAKE) -C val clean
-       @$(MAKE) -C ref clean
-       @$(MAKE) -C err clean
-       @$(MAKE) -C misc clean
-
-clean: mostly-clean
-       @$(call DEL,$(WORKDIR)/bdiff$(EXE))
-       @$(call RMDIR,$(WORKDIR))
diff --git a/test/bdiff.c b/test/bdiff.c
deleted file mode 100644 (file)
index 797ba43..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-
-// minimal tool to compare two binaries
-
-#include <stdlib.h>
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
-    FILE *f1, *f2;
-    if (argc < 3) {
-        return EXIT_FAILURE;
-    }
-    f1 = fopen(argv[1], "rb");
-    f2 = fopen(argv[2], "rb");
-    if ((f1 == NULL) || (f2 == NULL)) {
-        return EXIT_FAILURE;
-    }
-    for(;;) {
-        if (feof(f1) && feof(f2)) {
-            return EXIT_SUCCESS;
-        } else if (feof(f1) || feof(f2)) {
-            return EXIT_FAILURE;
-        }
-        if (fgetc(f1) != fgetc(f2)) {
-            return EXIT_FAILURE;
-        }
-    }
-}
diff --git a/test/err/Makefile b/test/err/Makefile
deleted file mode 100644 (file)
index bc4226a..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-# makefile for the tests that MUST NOT compile
-
-ifneq ($(shell echo),)
-  CMD_EXE := 1
-endif
-
-ifdef CMD_EXE
-  NOT := - # Hack
-  DEL = -del /f $(subst /,\,$1)
-else
-  NOT := !
-  DEL = $(RM) $1
-endif
-
-CC65 := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65)
-
-WORKDIR := ../../testwrk
-
-.PHONY: all clean
-
-TESTS := $(patsubst %.c,$(WORKDIR)/%.s,$(wildcard *.c))
-
-all: $(TESTS)
-
-$(WORKDIR)/%.s: %.c
-       $(NOT) $(CC65) -o $@ $<
-
-clean:
-       @$(call DEL,$(TESTS))
diff --git a/test/err/cc65091001.c b/test/err/cc65091001.c
deleted file mode 100644 (file)
index 65ce6ec..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-  !!DESCRIPTION!! invalid binary operation on pointer, should not compile
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!
-*/
-
-/* > Gets stuck in an endless loop with -O. */
-
-#include <assert.h>
-#include <string.h>
-#include <stdio.h>
-typedef unsigned char U8;
-char var = 0xf0;
-char fn(char bar)
-{
-    char* ptr = (char*)0xf;
-    var |= ptr; /* should throw an error here */
-    while (var > bar)
-        var <<= 1;
-    return 0;
-}
-int main() {
-    fn(0x7f);
-    assert(0);
-
-    printf("it works :)\n");
-
-    return 0;
-}
\ No newline at end of file
diff --git a/test/err/cc65150311-1.c b/test/err/cc65150311-1.c
deleted file mode 100644 (file)
index c4a836e..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-  !!DESCRIPTION!! function pointer bugs
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Greg
-*/
-
-/*
-  see: http://www.cc65.org/mailarchive/2015-03/11726.html
-  and: http://www.cc65.org/mailarchive/2015-03/11734.html
-*/
-
-static int func(void) {return 0;}
-static int (*p)(void);
-static int n;
-
-int main(void) {
-
-    p = func;
-    n = (p == &func);
-    n = (p == func);
-
-    ++p; /* invalid C */
-
-    return 0;
-}
diff --git a/test/err/cc65150311-10.c b/test/err/cc65150311-10.c
deleted file mode 100644 (file)
index 14e14d4..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-  !!DESCRIPTION!! function pointer bugs
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Greg
-*/
-
-/*
-  see: http://www.cc65.org/mailarchive/2015-03/11726.html
-  and: http://www.cc65.org/mailarchive/2015-03/11734.html
-*/
-
-static int func(void) {return 0;}
-static int (*p)(void);
-static int n;
-
-int main(void) {
-
-    p = func;
-    n = (p == &func);
-    n = (p == func);
-
-    n = &func - p; /* invalid C */
-
-    return 0;
-}
diff --git a/test/err/cc65150311-11.c b/test/err/cc65150311-11.c
deleted file mode 100644 (file)
index ffc8c9a..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-  !!DESCRIPTION!! function pointer bugs
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Greg
-*/
-
-/*
-  see: http://www.cc65.org/mailarchive/2015-03/11726.html
-  and: http://www.cc65.org/mailarchive/2015-03/11734.html
-*/
-
-static int func(void) {return 0;}
-static int (*p)(void);
-static int n;
-
-int main(void) {
-
-    p = func;
-    n = (p == &func);
-    n = (p == func);
-
-    n = func - p; /* invalid C */
-
-    return 0;
-}
diff --git a/test/err/cc65150311-2.c b/test/err/cc65150311-2.c
deleted file mode 100644 (file)
index 34c862a..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-  !!DESCRIPTION!! function pointer bugs
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Greg
-*/
-
-/*
-  see: http://www.cc65.org/mailarchive/2015-03/11726.html
-  and: http://www.cc65.org/mailarchive/2015-03/11734.html
-*/
-
-static int func(void) {return 0;}
-static int (*p)(void);
-static int n;
-
-int main(void) {
-
-    p = func;
-    n = (p == &func);
-    n = (p == func);
-
-    n = (p > &func); /* invalid C */
-
-    return 0;
-}
diff --git a/test/err/cc65150311-3.c b/test/err/cc65150311-3.c
deleted file mode 100644 (file)
index 2bf8267..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-  !!DESCRIPTION!! function pointer bugs
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Greg
-*/
-
-/*
-  see: http://www.cc65.org/mailarchive/2015-03/11726.html
-  and: http://www.cc65.org/mailarchive/2015-03/11734.html
-*/
-
-static int func(void) {return 0;}
-static int (*p)(void);
-static int n;
-
-int main(void) {
-
-    p = func;
-    n = (p == &func);
-    n = (p == func);
-
-    n = (p > func); /* invalid C */
-
-    return 0;
-}
diff --git a/test/err/cc65150311-4.c b/test/err/cc65150311-4.c
deleted file mode 100644 (file)
index 0a7f44e..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-  !!DESCRIPTION!! function pointer bugs
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Greg
-*/
-
-/*
-  see: http://www.cc65.org/mailarchive/2015-03/11726.html
-  and: http://www.cc65.org/mailarchive/2015-03/11734.html
-*/
-
-static int func(void) {return 0;}
-static int (*p)(void);
-static int n;
-
-int main(void) {
-
-    p = func;
-    n = (p == &func);
-    n = (p == func);
-
-    n = func - func; /* invalid C */
-
-    return 0;
-}
diff --git a/test/err/cc65150311-5.c b/test/err/cc65150311-5.c
deleted file mode 100644 (file)
index 41229ad..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-  !!DESCRIPTION!! function pointer bugs
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Greg
-*/
-
-/*
-  see: http://www.cc65.org/mailarchive/2015-03/11726.html
-  and: http://www.cc65.org/mailarchive/2015-03/11734.html
-*/
-
-static int func(void) {return 0;}
-static int (*p)(void);
-static int n;
-
-int main(void) {
-
-    p = func;
-    n = (p == &func);
-    n = (p == func);
-
-    n = func - &func; /* invalid C */
-
-    return 0;
-}
diff --git a/test/err/cc65150311-6.c b/test/err/cc65150311-6.c
deleted file mode 100644 (file)
index a08ab11..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-  !!DESCRIPTION!! function pointer bugs
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Greg
-*/
-
-/*
-  see: http://www.cc65.org/mailarchive/2015-03/11726.html
-  and: http://www.cc65.org/mailarchive/2015-03/11734.html
-*/
-
-static int func(void) {return 0;}
-static int (*p)(void);
-static int n;
-
-int main(void) {
-
-    p = func;
-    n = (p == &func);
-    n = (p == func);
-
-    n = &func - func; /* invalid C */
-
-    return 0;
-}
diff --git a/test/err/cc65150311-7.c b/test/err/cc65150311-7.c
deleted file mode 100644 (file)
index 71e6368..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-  !!DESCRIPTION!! function pointer bugs
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Greg
-*/
-
-/*
-  see: http://www.cc65.org/mailarchive/2015-03/11726.html
-  and: http://www.cc65.org/mailarchive/2015-03/11734.html
-*/
-
-static int func(void) {return 0;}
-static int (*p)(void);
-static int n;
-
-int main(void) {
-
-    p = func;
-    n = (p == &func);
-    n = (p == func);
-
-    n = &func - &func; /* invalid C */
-
-    return 0;
-}
diff --git a/test/err/cc65150311-8.c b/test/err/cc65150311-8.c
deleted file mode 100644 (file)
index d18dc0b..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-  !!DESCRIPTION!! function pointer bugs
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Greg
-*/
-
-/*
-  see: http://www.cc65.org/mailarchive/2015-03/11726.html
-  and: http://www.cc65.org/mailarchive/2015-03/11734.html
-*/
-
-static int func(void) {return 0;}
-static int (*p)(void);
-static int n;
-
-int main(void) {
-
-    p = func;
-    n = (p == &func);
-    n = (p == func);
-
-    n = p - &func; /* invalid C */
-
-    return 0;
-}
diff --git a/test/err/cc65150311-9.c b/test/err/cc65150311-9.c
deleted file mode 100644 (file)
index 8cf805b..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-  !!DESCRIPTION!! function pointer bugs
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Greg
-*/
-
-/*
-  see: http://www.cc65.org/mailarchive/2015-03/11726.html
-  and: http://www.cc65.org/mailarchive/2015-03/11734.html
-*/
-
-static int func(void) {return 0;}
-static int (*p)(void);
-static int n;
-
-int main(void) {
-
-    p = func;
-    n = (p == &func);
-    n = (p == func);
-
-    n = p - func; /* invalid C */
-
-    return 0;
-}
diff --git a/test/err/front.c b/test/err/front.c
deleted file mode 100644 (file)
index dde8d47..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
-  !!DESCRIPTION!! this code is not supposed to compile
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-main() {
-       return 0;
-}
-
-nested(a,b) {
-       if ((a<4 && b == 'r')
-               || (a == 1 && (b == 'h' || b == 'i'))
-               || (a == 2 && (b == 'o' || b == 'y'))
-       ) a=b;
-}
-
-/* type name scope */
-
-void s(struct D *d) {} /* this struct D differs from the one below */
-typedef struct D D;
-struct D {int x, y;} Dy={0};
-D Dz={1};
-Dfunc(){
-       D a; a.y=1;
-       s(&Dy);         /* error */
-}
-
-/* qualifiers */
-
-const a; int b;
-const int a, *x; int b, *y;
-volatile unsigned z;
-
-f() {
-       x = y;
-       z = z + z;      /* should be 2 references to z's r-value */
-}
-f1() {
-       x = &a;
-       x = &b;
-       y = &a;         /* error */
-       y = &b;
-}
-f2(int **a, int **b) {
-       f(&x, &y);
-       **a = 0;
-       return **b;
-}
-g(const int *p) {
-       g(&a);
-       g(&b);
-       return *p;
-}
-h(int *p) {
-       f(&a);
-       f(&b);
-       return *p;
-}
-h1(const int x, int y) {
-       h1(a,b);
-       h1(b,a);
-       return x + y;
-}
-h2() {
-       char *b; const void *p;
-       p = b;
-       b = p;          /* error (incompatible pointer type) */
-}
-
-/* static naming */
-
-extern int yy; set1() { { static yy=1; yy=2;} yy=4;}
-static int yy; set2() { yy=5; {static yy=2; yy=3; }}
-static void goo() {}
-sss() { int goo; { static int goo();} goo=1;}
-
-/*
-rrr(p) float *p; { extern int xr;
- { static float xr;
- { extern int *xr; } p=&xr; }}
-*/
-
-/* local extern */
-
-static int ss1;
-int ss3;
-extern int ss5;
-setstatic() { extern int ss1,ss2,ss3,ss4; ss1 = ss2; ss3 = ss4; ss5 = 0;}
-static int ss2;
-int ss4;
-static int ss5;
-
-/* function prototypes */
-
-int fx1(void);
-int fx1();
-
-/*
-int gx1(double x);
-*/
-/* int gx1(x) double x; { gx1(&x); } */      /* error */
-
-int hx1();
-/*
-int hx1(double x,...); */ /* error */
-
-/*
-int ff1(double x, int *y);
-int ff1(x,y) float x; int y[]; {x=y[0];}
-*/
-
-int gg1(int a);
-int gg1(a,b){a=b;}
-
-int hh1(const int x);
-hh1(a) {return a;}
-
-extern int strcmp(const char*, const char*);
-extern void qsort(void*, int, int, int (*)(const void*, const void*));
-extern int cmp(char**a, char**b) { return strcmp(*a,*b); }
-sort() {
-       int n; char *a[100];
-       qsort(a, n, sizeof(char*), (int (*)(const void*, const void*))cmp);
-        qsort(a, n, sizeof(char*), cmp);        /* error (incompatible pointer type) */
-}
-
-/* nasty calls */
-
-onearg(){
-       int a,b,c,d;
-       f( ( (a? (b = 1): (c = 2)), (d ? 3 : 4) ) );    /* 1 argument */
-}
diff --git a/test/err/static-2.c b/test/err/static-2.c
deleted file mode 100644 (file)
index c890978..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-  !!DESCRIPTION!! global non-static and static conflicts
-  !!ORIGIN!!      cc65 regression tests
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Greg King
-*/
-
-/*
-  see: https://github.com/cc65/cc65/issues/191
-*/
-
-#pragma warn(error, on)
-
-int n;
-static int n;           /* should give an error */
-
-int main(void)
-{
-    return n;
-}
diff --git a/test/err/static-3.c b/test/err/static-3.c
deleted file mode 100644 (file)
index 5b6839a..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-  !!DESCRIPTION!! global non-static and static conflicts
-  !!ORIGIN!!      cc65 regression tests
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Greg King
-*/
-
-/*
-  see: https://github.com/cc65/cc65/issues/191
-*/
-
-#pragma warn(error, on)
-
-extern int n;
-static int n;           /* should give an error */
-
-int main(void)
-{
-    return n;
-}
diff --git a/test/err/static-4.c b/test/err/static-4.c
deleted file mode 100644 (file)
index a2cdeb7..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-  !!DESCRIPTION!! global non-static and static conflicts
-  !!ORIGIN!!      cc65 regression tests
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Greg King
-*/
-
-/*
-  see: https://github.com/cc65/cc65/issues/191
-*/
-
-#pragma warn(error, on)
-
-static int n;
-int n;                  /* should give an error */
-
-int main(void)
-{
-    return n;
-}
diff --git a/test/misc/Makefile b/test/misc/Makefile
deleted file mode 100644 (file)
index 918316c..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-
-# makefile for the remaining tests that need special care in one way or another
-
-ifneq ($(shell echo),)
-  CMD_EXE := 1
-endif
-
-ifdef CMD_EXE
-  S := $(subst /,\,/)
-  NOT := - # Hack
-  DEL = -del /f $(subst /,\,$1)
-else
-  S := /
-  NOT := !
-  DEL = $(RM) $1
-endif
-
-CC65FLAGS := -t sim6502
-SIM65FLAGS := -x 200000000
-
-CL65 := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65)
-SIM65 := $(if $(wildcard ../../bin/sim65*),..$S..$Sbin$Ssim65,sim65)
-
-WORKDIR := ..$S..$Stestwrk
-DIFF := $(WORKDIR)/bdiff
-
-.PHONY: all clean
-
-SOURCES := $(wildcard *.c)
-TESTS := $(foreach option,. .o. .os. .osi. .osir. .oi. .oir. .or.,$(SOURCES:%.c=$(WORKDIR)/%$(option)prg))
-
-all: $(TESTS)
-
-# should compile, but then hangs in an endless loop
-$(WORKDIR)/endless%prg: endless.c
-       $(CL65) $(subst .,,$(*:.o%=-O%)) $(CC65FLAGS) $< -o $@
-       $(NOT) $(SIM65) $(SIM65FLAGS) $@
-
-# these need reference data that can't be generated by a host-compiled program,
-# in a useful way
-$(WORKDIR)/limits%prg: limits.c
-       $(CL65) $(subst .,,$(*:.o%=-O%)) $(CC65FLAGS) $< -o $@
-       $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/limits.out
-       $(DIFF) $(WORKDIR)/limits.out limits.ref
-
-# the rest are tests that fail currently for one reason or another
-$(WORKDIR)/fields%prg: fields.c
-       @echo "FIXME: " $@ "currently will fail."
-       $(CL65) $(subst .,,$(*:.o%=-O%)) $(CC65FLAGS) $< -o $@
-       -$(SIM65) $(SIM65FLAGS) $@
-$(WORKDIR)/sitest%prg: sitest.c
-       @echo "FIXME: " $@ "currently will fail."
-       -$(CL65) $(subst .,,$(*:.o%=-O%)) $(CC65FLAGS) $< -o $@
-#      -$(SIM65) $(SIM65FLAGS) $@
-$(WORKDIR)/cc65141011%prg: cc65141011.c
-       @echo "FIXME: " $@ "currently can fail."
-       $(CL65) $(subst .,,$(*:.o%=-O%)) $(CC65FLAGS) $< -o $@
-       -$(SIM65) $(SIM65FLAGS) $@
-
-clean:
-       @$(call DEL,$(TESTS))
-       @$(call DEL,$(SOURCES:.c=.o))
-       @$(call DEL,$(SOURCES:%.c=$(WORKDIR)/%.out))
diff --git a/test/misc/cc65141011.c b/test/misc/cc65141011.c
deleted file mode 100755 (executable)
index 26cef70..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-  !!DESCRIPTION!! equality problem
-  !!ORIGIN!!      Testsuite
-  !!LICENCE!!     Public Domain
-*/
-
-/*
-    Different results, depending on whether constant is on left or right side.
-
-    The optimizer sometimes makes code that executes the right-side expression
-    as eight bits; but then, tests it against the left-side zero as 16 bits.
-    The high-byte is garbage; therefore, that test might, or might not, work.
-    It depends on the platform and the amount of optimization.
-
-    http://www.cc65.org/mailarchive/2014-10/11680.html
-    http://www.cc65.org/mailarchive/2014-10/11682.html
-    http://www.cc65.org/mailarchive/2014-10/11683.html
-*/
-
-#include <stdio.h>
-
-static unsigned char fails = 4;
-static unsigned char bad[3], good[3];
-
-int main(void)
-{
-    unsigned char joy_state = 0x7e;
-    unsigned a, b;
-
-    /* NOTE: It fails in only the printf() statements, the other stuff
-             below works! */
-    printf("bad: %u, ", 0 == (joy_state & 1) );
-    printf("good: %u\n", (joy_state & 1) == 0 );
-
-    sprintf(bad, "%u", 0 == (joy_state & 1) );
-    sprintf(good, "%u", (joy_state & 1) == 0 );
-
-    printf("bad: %u, ", bad[0] - '0' );
-    printf("good: %u\n", good[0] - '0' );
-
-    fails -= bad[0] - '0';
-    fails -= good[0] - '0';
-
-    if (0 == (joy_state & 1)) fails--;
-    if ((joy_state & 1) == 0) fails--;
-
-    printf("failures: %u\n", fails );
-
-    /* The above printf() returns a value with a zero high-byte.
-    ** Therefore, the next (broken) statement works (by accident).
-    */
-    a = 0 == (joy_state & 1);
-    b = (joy_state & 1) == 0;
-
-    printf("a: %u, ", a );
-    printf("b: %u\n", b );
-
-    return fails;
-}
diff --git a/test/misc/common.h b/test/misc/common.h
deleted file mode 100644 (file)
index dada61a..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#define NO_OLD_FUNC_DECL
-#define NO_TYPELESS_INT
-#define NO_TYPELESS_INT_PTR
-#define MAIN_RETURNS_INT
-#define NO_IMPLICIT_FUNC_PROTOTYPES
-#define NO_FLOATS
-#define NO_WCHAR
-#define NO_EMPTY_FUNC_ARGS
-#define NO_SLOPPY_STRUCT_INIT
-#define NO_FUNCS_TAKE_STRUCTS
-#define NO_FUNCS_RETURN_STRUCTS
-#define CAST_STRUCT_PTR
-#define NO_TYPELESS_STRUCT_PTR
-#define NO_IMPLICIT_FUNCPTR_CONV
-#define SIZEOF_INT_16BIT
-#define SIZEOF_LONG_32BIT
-#define UNSIGNED_CHARS
-#define UNSIGNED_BITFIELDS
diff --git a/test/misc/endless.c b/test/misc/endless.c
deleted file mode 100644 (file)
index fe07829..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-#include <stdio.h>
-#include <stdlib.h>
-
-int main(void)
-{
-    printf("entering endless loop\n");
-    for(;;) {
-        ;
-    }
-    printf("error: should not come here\n");
-    return EXIT_FAILURE;
-}
diff --git a/test/misc/fields.c b/test/misc/fields.c
deleted file mode 100644 (file)
index 83bee82..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
-  !!DESCRIPTION!! bitfield test
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-#ifdef NO_BITFIELDS
-
-main()
-{
-        printf("NO_BITFIELDS\n\r");
-}
-
-#else
-
-#ifdef SIZEOF_INT_16BIT
-
-#ifdef REFCC
-#include <stdint.h>
-struct foo {
-       int16_t a;
-       char b;
-       int16_t x : 12, y : 4;
-       int16_t zz : 1, : 0, : 4, z : 3;
-       char c;
-} x = { 1, 2, 3, 4, 5, 6 };
-
-struct baz { uint16_t a:2, b:4, c:16;} y = { 7, 8, 9};
-int16_t i = 8;
-
-#else
-
-struct foo {
-       int a;
-       char b;
-       int x : 12, y : 4;
-       int zz : 1, : 0, : 4, z : 3;
-       char c;
-} x = { 1, 2, 3, 4, 5, 6 };
-
-struct baz { unsigned int a:2, b:4, c:16;} y = { 7, 8, 9};
-int i = 8;
-#endif
-
-#else
-struct foo {
-       int a;
-       char b;
-       int x : 12, y : 4, : 0, : 4, z : 3;
-       char c;
-} x = { 1, 2, 3, 4, 5, 6 };
-
-struct baz { unsigned int a:2, b:4, c:32;} y = { 7, 8, 9};
-int i = 16;
-#endif
-
-#ifdef NO_IMPLICIT_FUNC_PROTOTYPES
-f1(struct baz *p);
-f2(struct baz *p);
-#endif
-
-main()
-{
-       printf("x = %d b:%d %d %d %d c:%d\n", x.a, x.b, x.x, x.y, x.z, x.c);
-       printf("y = %d b:%d c:%d\n", y.a, y.b, y.c);
-       x.y = i;
-       x.z = 070;
-       printf("x = %d b:%d %d %d %d c:%d\n", x.a, x.b, x.x, x.y, x.z, x.c);
-       y.a = 2;
-       y.c = i;
-       printf("y = %d b:%d c:%d\n", y.a, y.b, y.c);
-#ifdef CAST_STRUCT_PTR
-       f2((struct baz *)&x);
-#else
-       f2(&x);
-#endif
-       return 0;
-}
-
-f1(struct baz *p) {
-       p->a = p->b = 0;
-       if (p->b)
-               printf("p->b != 0!\n");
-       p->a = 0x3; p->b = 0xf;
-       printf("p->a = 0x%x, p->b = 0x%x\n", p->a, p->b);
-}
-f2(struct baz *p) {
-       p->a = (i==0);
-       p->b = (f1(p),0);
-}
-
-#endif
diff --git a/test/misc/limits.c b/test/misc/limits.c
deleted file mode 100644 (file)
index 613d6bd..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-  !!DESCRIPTION!! display type limits
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-#define SSHRT_MAX      SHRT_MAX
-#define SINT_MAX       INT_MAX
-#define SLONG_MAX      LONG_MAX
-
-#define UCHAR_MIN   0
-#define USHRT_MIN   0
-#define SSHRT_MIN   SHRT_MIN
-#define UINT_MIN    0
-#define SINT_MIN    INT_MIN
-#define ULONG_MIN   0l
-#define SLONG_MIN   LONG_MIN
-
-int main(void) {
-        printf("CHAR_MAX:  0x%08x=%d\n", CHAR_MAX, CHAR_MAX);
-        printf("UCHAR_MAX: 0x%08x=%d\n", UCHAR_MAX, UCHAR_MAX);
-        printf("SCHAR_MAX: 0x%08x=%d\n", SCHAR_MAX, SCHAR_MAX);
-
-        printf("SHRT_MAX:  0x%08x=%d\n", SHRT_MAX, SHRT_MAX);
-        printf("USHRT_MAX: 0x%08x=%d\n", USHRT_MAX, USHRT_MAX);
-        printf("SSHRT_MAX: 0x%08x=%d\n", SSHRT_MAX, SSHRT_MAX);
-
-        printf("INT_MAX:   0x%08x=%d\n", INT_MAX, INT_MAX);
-        printf("UINT_MAX:  0x%08x=%d\n", UINT_MAX, UINT_MAX);
-        printf("SINT_MAX:  0x%08x=%d\n", SINT_MAX, SINT_MAX);
-
-        printf("LONG_MAX:  0x%08lx=%ld\n", LONG_MAX, LONG_MAX);
-        printf("ULONG_MAX: 0x%08lx=%ld\n", ULONG_MAX, ULONG_MAX);
-        printf("SLONG_MAX: 0x%08lx=%ld\n", SLONG_MAX, SLONG_MAX);
-
-        printf("CHAR_MIN:  0x%08x=%d\n", CHAR_MIN, CHAR_MIN);
-        printf("UCHAR_MIN: 0x%08x=%d\n", UCHAR_MIN, UCHAR_MIN);
-        printf("SCHAR_MIN: 0x%08x=%d\n", SCHAR_MIN, SCHAR_MIN);
-
-        printf("SHRT_MIN:  0x%08x=%d\n", SHRT_MIN, SHRT_MIN);
-        printf("USHRT_MIN: 0x%08x=%d\n", USHRT_MIN, USHRT_MIN);
-        printf("SSHRT_MIN: 0x%08x=%d\n", SSHRT_MIN, SSHRT_MIN);
-
-        printf("INT_MIN:   0x%08x=%d\n", INT_MIN, INT_MIN);
-        printf("UINT_MIN:  0x%08x=%d\n", UINT_MIN, UINT_MIN);
-        printf("SINT_MIN:  0x%08x=%d\n", SINT_MIN, SINT_MIN);
-
-        printf("LONG_MIN:  0x%08lx=%ld\n", LONG_MIN, LONG_MIN);
-        printf("ULONG_MIN: 0x%08lx=%ld\n", ULONG_MIN, ULONG_MIN);
-        printf("SLONG_MIN: 0x%08lx=%ld\n", SLONG_MIN, SLONG_MIN);
-
-        return 0;
-}
diff --git a/test/misc/limits.ref b/test/misc/limits.ref
deleted file mode 100644 (file)
index 9be906b..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-CHAR_MAX:  0x000000ff=255
-UCHAR_MAX: 0x000000ff=255
-SCHAR_MAX: 0x0000007f=127
-SHRT_MAX:  0x00007fff=32767
-USHRT_MAX: 0x0000ffff=-1
-SSHRT_MAX: 0x00007fff=32767
-INT_MAX:   0x00007fff=32767
-UINT_MAX:  0x0000ffff=-1
-SINT_MAX:  0x00007fff=32767
-LONG_MAX:  0x7fffffff=2147483647
-ULONG_MAX: 0xffffffff=-1
-SLONG_MAX: 0x7fffffff=2147483647
-CHAR_MIN:  0x00000000=0
-UCHAR_MIN: 0x00000000=0
-SCHAR_MIN: 0x0000ff80=-128
-SHRT_MIN:  0x00008000=-32768
-USHRT_MIN: 0x00000000=0
-SSHRT_MIN: 0x00008000=-32768
-INT_MIN:   0x00008000=-32768
-UINT_MIN:  0x00000000=0
-SINT_MIN:  0x00008000=-32768
-LONG_MIN:  0x80000000=-2147483648
-ULONG_MIN: 0x00000000=0
-SLONG_MIN: 0x80000000=-2147483648
diff --git a/test/misc/sitest.c b/test/misc/sitest.c
deleted file mode 100644 (file)
index 9570f49..0000000
+++ /dev/null
@@ -1,1591 +0,0 @@
-/*
-  !!DESCRIPTION!! C99 WCHAR test
-  !!ORIGIN!!
-  !!LICENCE!!     public domain
-*/
-
-/*
-       sitest -- exercise features of C99 <stdint.h> and <inttypes.h>
-
-       This source code has been placed into the PUBLIC DOMAIN by its author.
-
-       last edit:      1999/11/05      gwyn@arl.mil
-
-       Tries to accommodate pre-C99 versions of <inttypes.h>.
-
-       Takes advantage of __Q8_* symbols defined by a particular
-       implementation of <stdint.h>, but doesn't require them.
-
-       NOTE:   This is not a thorough validation test of the facilities.
-*/
-
-#define NO_INTERNAL_WCHAR
-/*#define STANDALONE*/
-
-#include       <errno.h>
-#include       <limits.h>              /* for CHAR_BIT */
-#include       <stdio.h>
-#include       <stddef.h>              /* for ptrdiff_t */
-#include       <stdlib.h>
-#include       <string.h>
-
-#if !defined(STANDARD_C99) && !defined(STANDARD_CC65)
-
-#error "this test checks C99 features, which are not available in the selected standard."
-
-#else
-
-#ifdef NO_WCHAR
-
-#warn "this test checks C99 features, but NO_WCHAR is defined so the test will most definetly fails."
-
-#endif
-
-#include       <inttypes.h>            /* embeds <stdint.h> */
-
-#include       <signal.h>              /* for sig_atomic_t */
-
-#if    defined(INTMAX_MAX)             /* <inttypes.h> has C99 features */
-#include       <wchar.h>
-#endif
-
-#include       <inttypes.h>            /* test idempotency */
-
-#ifdef STANDALONE
-
-FILE *outfile=NULL;
-#define opentest(x) outfile=stdout;
-#define closetest(x)
-
-#else
-
-#endif
-
-#if    __STDC_VERSION__ >= 199901
-#ifndef        __Q8_QT
-#define        __Q8_QT long long
-#endif
-#endif
-
-#ifdef PRIdMAX
-#define        HAVE_PRIdMAX
-#ifndef        __Q8_MT
-#define        __Q8_MT intmax_t
-#endif
-#else
-#ifdef PRIdLEAST64
-#ifndef        __Q8_MT
-#define        __Q8_MT int_least64_t
-#endif
-#define        PRIdMAX PRIdLEAST64
-#else
-#ifndef        __Q8_MT
-#define        __Q8_MT long
-#endif
-#define        PRIdMAX "ld"
-#endif
-#endif
-
-#ifdef PRIuMAX
-#define        HAVE_PRIuMAX
-#define        U__Q8_MT        uintmax_t
-#else
-#ifdef PRIuLEAST64
-#define        U__Q8_MT        uint_least64_t
-#define        PRIuMAX PRIuLEAST64
-#else
-#define        U__Q8_MT        unsigned long
-#define        PRIuMAX "lu"
-#endif
-#endif
-
-#define        STR_SUB(s)      # s
-#define        STRINGIZE(s)    STR_SUB(s)      /* extra level to expand argument */
-
-#if    defined(SCNo32) || defined(PRIo32)
-static int32_t         int32;
-#endif
-static int_least16_t   intl16;
-static uint_least16_t  uintl16;
-static uint_fast16_t   uintf16;
-static intmax_t                intmax;
-static uintmax_t       uintmax;
-
-int
-main() {
-       int     status = 0;             /* exit status to be returned */
-
-       
-       /* <stdint.h> features: */
-
-       printf("CHAR_BIT=%u\n", (unsigned)CHAR_BIT );
-       printf("sizeof(char)=%u\n", (unsigned)sizeof(char));    /* s.b. 1 */
-       printf("sizeof(short)=%u\n", (unsigned)sizeof(short));
-       printf("sizeof(int)=%u\n", (unsigned)sizeof(int));
-       printf("sizeof(long)=%u\n", (unsigned)sizeof(long));
-#ifdef __Q8_QT
-       printf("sizeof(long long)=%u\n", (unsigned)sizeof(__Q8_QT));
-#else
-       printf("*** long long isn't defined ***\n");
-#endif
-       printf("sizeof(intmax_t)=%u\n", (unsigned)sizeof(intmax_t));
-       printf("sizeof(ptrdiff_t)=%u\n", (unsigned)sizeof(ptrdiff_t));
-       printf("sizeof(size_t)=%u\n", (unsigned)sizeof(size_t));
-       printf("sizeof(sig_atomic_t)=%u\n", (unsigned)sizeof(sig_atomic_t));
-       printf("sizeof(wchar_t)=%u\n", (unsigned)sizeof(wchar_t));
-#if    defined(WINT_MAX) || __STDC_VERSION__ >= 199901
-       printf("sizeof(wint_t)=%u\n", (unsigned)sizeof(wint_t));
-#else
-       printf("*** wint_t isn't defined ***\n");
-       status = EXIT_FAILURE;
-#endif
-#ifdef INT8_MAX
-       printf("sizeof(int8_t)=%u\n", (unsigned)sizeof(int8_t));
-       printf("sizeof(uint8_t)=%u\n", (unsigned)sizeof(uint8_t));
-#endif
-#ifdef INT9_MAX
-       printf("sizeof(int9_t)=%u\n", (unsigned)sizeof(int9_t));
-       printf("sizeof(uint9_t)=%u\n", (unsigned)sizeof(uint9_t));
-#endif
-#ifdef INT12_MAX
-       printf("sizeof(int12_t)=%u\n", (unsigned)sizeof(int12_t));
-       printf("sizeof(uint12_t)=%u\n", (unsigned)sizeof(uint12_t));
-#endif
-#ifdef INT16_MAX
-       printf("sizeof(int16_t)=%u\n", (unsigned)sizeof(int16_t));
-       printf("sizeof(uint16_t)=%u\n", (unsigned)sizeof(uint16_t));
-#endif
-#ifdef INT18_MAX
-       printf("sizeof(int18_t)=%u\n", (unsigned)sizeof(int18_t));
-       printf("sizeof(uint18_t)=%u\n", (unsigned)sizeof(uint18_t));
-#endif
-#ifdef INT24_MAX
-       printf("sizeof(int24_t)=%u\n", (unsigned)sizeof(int24_t));
-       printf("sizeof(uint24_t)=%u\n", (unsigned)sizeof(uint24_t));
-#endif
-#ifdef INT32_MAX
-       printf("sizeof(int32_t)=%u\n", (unsigned)sizeof(int32_t));
-       printf("sizeof(uint32_t)=%u\n", (unsigned)sizeof(uint32_t));
-#endif
-#ifdef INT36_MAX
-       printf("sizeof(int36_t)=%u\n", (unsigned)sizeof(int36_t));
-       printf("sizeof(uint36_t)=%u\n", (unsigned)sizeof(uint36_t));
-#endif
-#ifdef INT40_MAX
-       printf("sizeof(int40_t)=%u\n", (unsigned)sizeof(int40_t));
-       printf("sizeof(uint40_t)=%u\n", (unsigned)sizeof(uint40_t));
-#endif
-#ifdef INT48_MAX
-       printf("sizeof(int48_t)=%u\n", (unsigned)sizeof(int48_t));
-       printf("sizeof(uint48_t)=%u\n", (unsigned)sizeof(uint48_t));
-#endif
-#ifdef INT60_MAX
-       printf("sizeof(int60_t)=%u\n", (unsigned)sizeof(int60_t));
-       printf("sizeof(uint60_t)=%u\n", (unsigned)sizeof(uint60_t));
-#endif
-#ifdef INT64_MAX
-       printf("sizeof(int64_t)=%u\n", (unsigned)sizeof(int64_t));
-       printf("sizeof(uint64_t)=%u\n", (unsigned)sizeof(uint64_t));
-#endif
-#ifdef INT72_MAX
-       printf("sizeof(int72_t)=%u\n", (unsigned)sizeof(int72_t));
-       printf("sizeof(uint72_t)=%u\n", (unsigned)sizeof(uint72_t));
-#endif
-#ifdef INT128_MAX
-       printf("sizeof(int128_t)=%u\n", (unsigned)sizeof(int128_t));
-       printf("sizeof(uint128_t)=%u\n", (unsigned)sizeof(uint128_t));
-#endif
-       printf("sizeof(int_least8_t)=%u\n", (unsigned)sizeof(int_least8_t));
-       printf("sizeof(uint_least8_t)=%u\n", (unsigned)sizeof(uint_least8_t));
-       printf("sizeof(int_least16_t)=%u\n", (unsigned)sizeof(int_least16_t));
-       printf("sizeof(uint_least16_t)=%u\n", (unsigned)sizeof(uint_least16_t));
-       printf("sizeof(int_least32_t)=%u\n", (unsigned)sizeof(int_least32_t));
-       printf("sizeof(uint_least32_t)=%u\n", (unsigned)sizeof(uint_least32_t));
-#ifdef INT_LEAST64_MAX
-       printf("sizeof(int_least64_t)=%u\n", (unsigned)sizeof(int_least64_t));
-       printf("sizeof(uint_least64_t)=%u\n", (unsigned)sizeof(uint_least64_t));
-#else
-       printf("*** uint_least64_t isn't defined ***\n");
-       status = EXIT_FAILURE;
-#endif
-#ifdef INT_LEAST128_MAX
-       printf("sizeof(int_least128_t)=%u\n", (unsigned)sizeof(int_least128_t));
-       printf("sizeof(uint_least128_t)=%u\n",
-               (unsigned)sizeof(uint_least128_t));
-#endif
-       printf("sizeof(int_fast8_t)=%u\n", (unsigned)sizeof(int_fast8_t));
-       printf("sizeof(uint_fast8_t)=%u\n", (unsigned)sizeof(uint_fast8_t));
-       printf("sizeof(int_fast16_t)=%u\n", (unsigned)sizeof(int_fast16_t));
-       printf("sizeof(uint_fast16_t)=%u\n", (unsigned)sizeof(uint_fast16_t));
-       printf("sizeof(int_fast32_t)=%u\n", (unsigned)sizeof(int_fast32_t));
-       printf("sizeof(uint_fast32_t)=%u\n", (unsigned)sizeof(uint_fast32_t));
-#ifdef INT_FAST64_MAX
-       printf("sizeof(int_fast64_t)=%u\n", (unsigned)sizeof(int_fast64_t));
-       printf("sizeof(uint_fast64_t)=%u\n", (unsigned)sizeof(uint_fast64_t));
-#else
-       printf("*** int_fast64_t isn't defined ***\n");
-       status = EXIT_FAILURE;
-#endif
-#ifdef INT_FAST128_MAX
-       printf("sizeof(int_fast128_t)=%u\n", (unsigned)sizeof(int_fast128_t));
-       printf("sizeof(uint_fast128_t)=%u\n", (unsigned)sizeof(uint_fast128_t));
-#endif
-#if    defined(INTPTR_MAX)
-       printf("sizeof(intptr_t)=%u\n", (unsigned)sizeof(intptr_t));
-#if    defined(UINTPTR_MAX)
-       printf("sizeof(uintptr_t)=%u\n", (unsigned)sizeof(uintptr_t));
-#else
-       printf("*** intptr_t is defined but uintptr_t isn't ***\n");
-       status = EXIT_FAILURE;
-#endif
-#elif  defined(UINTPTR_MAX)
-       printf("sizeof(uintptr_t)=%u\n", (unsigned)sizeof(uintptr_t));
-       printf("*** uintptr_t is defined but intptr_t isn't ***\n");
-       status = EXIT_FAILURE;
-#else
-       printf("*** neither intptr_t nor uintptr_t is defined ***\n");
-       status = EXIT_FAILURE;
-#endif
-#ifdef INTMAX_MAX
-       printf("sizeof(intmax_t)=%u\n", (unsigned)sizeof(intmax_t));
-       printf("sizeof(uintmax_t)=%u\n", (unsigned)sizeof(uintmax_t));
-#else
-       printf("*** intmax_t isn't defined ***\n");
-       status = EXIT_FAILURE;
-#endif
-
-#ifdef INT8_MAX
-       printf("INT8_MIN=%"PRIdMAX"\n", (__Q8_MT)INT8_MIN);
-       printf("INT8_MAX=%"PRIdMAX"\n", (__Q8_MT)INT8_MAX);
-       printf("UINT8_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT8_MAX);
-#endif
-#ifdef INT9_MAX
-       printf("INT9_MIN=%"PRIdMAX"\n", (__Q8_MT)INT9_MIN);
-       printf("INT9_MAX=%"PRIdMAX"\n", (__Q8_MT)INT9_MAX);
-       printf("UINT9_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT9_MAX);
-#endif
-#ifdef INT12_MAX
-       printf("INT12_MIN=%"PRIdMAX"\n", (__Q8_MT)INT12_MIN);
-       printf("INT12_MAX=%"PRIdMAX"\n", (__Q8_MT)INT12_MAX);
-       printf("UINT12_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT12_MAX);
-#endif
-#ifdef INT16_MAX
-       printf("INT16_MIN=%"PRIdMAX"\n", (__Q8_MT)INT16_MIN);
-       printf("INT16_MAX=%"PRIdMAX"\n", (__Q8_MT)INT16_MAX);
-       printf("UINT16_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT16_MAX);
-#endif
-#ifdef INT18_MAX
-       printf("INT18_MIN=%"PRIdMAX"\n", (__Q8_MT)INT18_MIN);
-       printf("INT18_MAX=%"PRIdMAX"\n", (__Q8_MT)INT18_MAX);
-       printf("UINT18_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT18_MAX);
-#endif
-#ifdef INT24_MAX
-       printf("INT24_MIN=%"PRIdMAX"\n", (__Q8_MT)INT24_MIN);
-       printf("INT24_MAX=%"PRIdMAX"\n", (__Q8_MT)INT24_MAX);
-       printf("UINT24_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT24_MAX);
-#endif
-#ifdef INT32_MAX
-       printf("INT32_MIN=%"PRIdMAX"\n", (__Q8_MT)INT32_MIN);
-       printf("INT32_MAX=%"PRIdMAX"\n", (__Q8_MT)INT32_MAX);
-       printf("UINT32_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT32_MAX);
-#endif
-#ifdef INT36_MAX
-       printf("INT36_MIN=%"PRIdMAX"\n", (__Q8_MT)INT36_MIN);
-       printf("INT36_MAX=%"PRIdMAX"\n", (__Q8_MT)INT36_MAX);
-       printf("UINT36_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT36_MAX);
-#endif
-#ifdef INT40_MAX
-       printf("INT40_MIN=%"PRIdMAX"\n", (__Q8_MT)INT40_MIN);
-       printf("INT40_MAX=%"PRIdMAX"\n", (__Q8_MT)INT40_MAX);
-       printf("UINT40_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT40_MAX);
-#endif
-#ifdef INT48_MAX
-       printf("INT48_MIN=%"PRIdMAX"\n", (__Q8_MT)INT48_MIN);
-       printf("INT48_MAX=%"PRIdMAX"\n", (__Q8_MT)INT48_MAX);
-       printf("UINT48_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT48_MAX);
-#endif
-#ifdef INT60_MAX
-       printf("INT60_MIN=%"PRIdMAX"\n", (__Q8_MT)INT60_MIN);
-       printf("INT60_MAX=%"PRIdMAX"\n", (__Q8_MT)INT60_MAX);
-       printf("UINT60_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT60_MAX);
-#endif
-#ifdef INT64_MAX
-       printf("INT64_MIN=%"PRIdMAX"\n", (__Q8_MT)INT64_MIN);
-       printf("INT64_MAX=%"PRIdMAX"\n", (__Q8_MT)INT64_MAX);
-       printf("UINT64_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT64_MAX);
-#endif
-#ifdef INT72_MAX
-       printf("INT72_MIN=%"PRIdMAX"\n", (__Q8_MT)INT72_MIN);
-       printf("INT72_MAX=%"PRIdMAX"\n", (__Q8_MT)INT72_MAX);
-       printf("UINT72_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT72_MAX);
-#endif
-#ifdef INT128_MAX
-       printf("INT128_MIN=%"PRIdMAX"\n", (__Q8_MT)INT128_MIN);
-       printf("INT128_MAX=%"PRIdMAX"\n", (__Q8_MT)INT128_MAX);
-       printf("UINT128_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT128_MAX);
-#endif
-       printf("INT_LEAST8_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST8_MIN);
-       printf("INT_LEAST8_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST8_MAX);
-       printf("UINT_LEAST8_MAX=%"PRIuMAX"\n",
-               (U__Q8_MT)UINT_LEAST8_MAX);
-       printf("INT_LEAST16_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST16_MIN);
-       printf("INT_LEAST16_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST16_MAX);
-       printf("UINT_LEAST16_MAX=%"PRIuMAX"\n",
-               (U__Q8_MT)UINT_LEAST16_MAX);
-       printf("INT_LEAST32_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST32_MIN);
-       printf("INT_LEAST32_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST32_MAX);
-       printf("UINT_LEAST32_MAX=%"PRIuMAX"\n",
-               (U__Q8_MT)UINT_LEAST32_MAX);
-#ifdef INT_LEAST64_MAX
-       printf("INT_LEAST64_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST64_MIN);
-       printf("INT_LEAST64_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST64_MAX);
-       printf("UINT_LEAST64_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT_LEAST64_MAX);
-#endif
-#ifdef INT_LEAST128_MAX
-       printf("INT_LEAST128_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST128_MIN);
-       printf("INT_LEAST128_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST128_MAX);
-       printf("UINT_LEAST128_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT_LEAST128_MAX);
-#endif
-       printf("INT_FAST8_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST8_MIN);
-       printf("INT_FAST8_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST8_MAX);
-       printf("UINT_FAST8_MAX=%"PRIuMAX"\n",
-               (U__Q8_MT)UINT_FAST8_MAX);
-       printf("INT_FAST16_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST16_MIN);
-       printf("INT_FAST16_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST16_MAX);
-       printf("UINT_FAST16_MAX=%"PRIuMAX"\n",
-               (U__Q8_MT)UINT_FAST16_MAX);
-       printf("INT_FAST32_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST32_MIN);
-       printf("INT_FAST32_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST32_MAX);
-       printf("UINT_FAST32_MAX=%"PRIuMAX"\n",
-               (U__Q8_MT)UINT_FAST32_MAX);
-#ifdef INT_FAST64_MAX
-       printf("INT_FAST64_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST64_MIN);
-       printf("INT_FAST64_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST64_MAX);
-       printf("UINT_FAST64_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT_FAST64_MAX);
-#endif
-#ifdef INT_FAST128_MAX
-       printf("INT_FAST128_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST128_MIN);
-       printf("INT_FAST128_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST128_MAX);
-       printf("UINT_FAST128_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT_FAST128_MAX);
-#endif
-#ifdef INTPTR_MAX
-       printf("INTPTR_MIN=%"PRIdMAX"\n", (__Q8_MT)INTPTR_MIN);
-       printf("INTPTR_MAX=%"PRIdMAX"\n", (__Q8_MT)INTPTR_MAX);
-#endif
-#ifdef UINTPTR_MAX
-       printf("UINTPTR_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINTPTR_MAX);
-#endif
-#ifdef INTMAX_MAX
-       printf("INTMAX_MIN=%"PRIdMAX"\n", (__Q8_MT)INTMAX_MIN);
-       printf("INTMAX_MAX=%"PRIdMAX"\n", (__Q8_MT)INTMAX_MAX);
-       printf("UINTMAX_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINTMAX_MAX);
-#endif
-#ifdef PTRDIFF_MAX
-       printf("PTRDIFF_MIN=%"PRIdMAX"\n", (__Q8_MT)PTRDIFF_MIN);
-       printf("PTRDIFF_MAX=%"PRIdMAX"\n", (__Q8_MT)PTRDIFF_MAX);
-#endif
-#ifdef SIG_ATOMIC_MAX
-#if    SIG_ATOMIC_MIN < 0
-       printf("SIG_ATOMIC_MIN=%"PRIdMAX"\n", (__Q8_MT)SIG_ATOMIC_MIN);
-       printf("SIG_ATOMIC_MAX=%"PRIdMAX"\n", (__Q8_MT)SIG_ATOMIC_MAX);
-#else
-       printf("SIG_ATOMIC_MIN=%"PRIuMAX"\n", (U__Q8_MT)SIG_ATOMIC_MIN);
-       printf("SIG_ATOMIC_MAX=%"PRIuMAX"\n", (U__Q8_MT)SIG_ATOMIC_MAX);
-#endif
-#endif
-#ifdef SIZE_MAX
-       printf("SIZE_MAX=%"PRIuMAX"\n", (U__Q8_MT)SIZE_MAX);
-#endif
-
-#ifdef WCHAR_MAX
-#if    WCHAR_MIN < 0
-       printf("WCHAR_MIN=%"PRIdMAX"\n", (__Q8_MT)WCHAR_MIN);
-       printf("WCHAR_MAX=%"PRIdMAX"\n", (__Q8_MT)WCHAR_MAX);
-#else
-       printf("WCHAR_MIN=%"PRIuMAX"\n", (U__Q8_MT)WCHAR_MIN);
-       printf("WCHAR_MAX=%"PRIuMAX"\n", (U__Q8_MT)WCHAR_MAX);
-#endif
-#endif
-#ifdef WINT_MAX
-#if    WINT_MIN < 0
-       printf("WINT_MIN=%"PRIdMAX"\n", (__Q8_MT)WINT_MIN);
-       printf("WINT_MAX=%"PRIdMAX"\n", (__Q8_MT)WINT_MAX);
-#else
-       printf("WINT_MIN=%"PRIuMAX"\n", (U__Q8_MT)WINT_MIN);
-       printf("WINT_MAX=%"PRIuMAX"\n", (U__Q8_MT)WINT_MAX);
-#endif
-#endif
-
-       /*
-               7.18.4  Macros for integer constants
-       */
-
-       /* INTn_C for n=8 and 16 were at one point unimplementable
-          on most platforms, so they're treated as "optional": */
-#ifdef INT8_C
-       if ( INT8_C(-123) != -123 )
-               printf("*** INT8_C(-123) produced %"PRIdMAX" ***\n",
-                      (__Q8_MT)INT8_C(-123)
-                     );
-       if ( UINT8_C(123) != 123 )
-               printf("*** UINT8_C(123) produced %"PRIuMAX" ***\n",
-                      (U__Q8_MT)UINT8_C(123)
-                     );
-#endif
-#ifdef INT16_C
-       if ( INT16_C(-12345) != -12345 )
-               printf("*** INT16_C(-12345) produced %"PRIdMAX" ***\n",
-                      (__Q8_MT)INT16_C(-12345)
-                     );
-       if ( UINT16_C(12345) != 12345 )
-               printf("*** UINT16_C(12345) produced %"PRIuMAX" ***\n",
-                      (U__Q8_MT)UINT16_C(12345)
-                     );
-#endif
-       if ( INT32_C(-123456789) != -123456789 )
-               printf("*** INT32_C(-123456789) produced %"PRIdMAX" ***\n",
-                      (__Q8_MT)INT32_C(-123456789)
-                     );
-       if ( UINT32_C(123456789) != 123456789 )
-               printf("*** UINT32_C(123456789) produced %"PRIuMAX" ***\n",
-                      (U__Q8_MT)UINT32_C(123456789)
-                     );
-#ifdef INT_LEAST64_MAX
-       if ( INT64_C(-1234567890123456789) != -1234567890123456789 )
-               printf("*** INT64_C(-1234567890123456789) produced %"PRIdMAX
-                      " ***\n",
-                      (__Q8_MT)INT64_C(-1234567890123456789)
-                     );
-       if ( UINT64_C(1234567890123456789) != 1234567890123456789 )
-               printf("*** UINT64_C(1234567890123456789) produced %"PRIuMAX
-                      " ***\n",
-                      (U__Q8_MT)UINT64_C(1234567890123456789)
-                     );
-#endif
-#ifdef INTMAX_MAX
-       if ( INTMAX_C(-1234567890123456789) != -1234567890123456789 )
-               printf("*** INTMAX_C(-1234567890123456789) produced %"PRIdMAX
-                      " ***\n",
-                      (__Q8_MT)INTMAX_C(-1234567890123456789)
-                     );
-       if ( UINTMAX_C(1234567890123456789) != 1234567890123456789 )
-               printf("*** UINTMAX_C(1234567890123456789) produced %"PRIuMAX
-                      " ***\n",
-                      (U__Q8_MT)UINTMAX_C(1234567890123456789)
-                     );
-#endif
-
-       /* <inttypes.h> features: */
-
-#if    __STDC_VERSION__ >= 199901
-       printf("sizeof(imaxdiv_t)=%u\n", (unsigned)sizeof(imaxdiv_t));
-#endif
-
-       /*
-               7.8.1   Macros for format specifiers
-       */
-
-       {
-       /* scanf these strings */
-       static const char       in_dn[] = "Z119bZ";
-       static const char       in_dmo[] = "Z-0119bZ";
-       static const char       in_dspx[] = "Z \t\n +0X119bZ";
-       static const char       in_dsmx[] = "Z \t\n -0x119bZ";
-       static const char       in_dsn[] = "Z \t\n 119bZ";
-       static const char       in_dp[] = "Z+119bZ";
-       static const char       in_dpx[] = "Z+0X119bz";
-
-       /* sprintf into this */
-       static char             buffer[1024];
-
-#if 1
-
-#define        SCAN(buf,fs,var,exp)    if ( sscanf(buf, "Z%" fs, &var) != 1 ) \
-                                       { \
-                                       printf("***%s=",fs, STR_SUB(fs) \
-                                              " failed ***\n" \
-                                             ); \
-                                       status = EXIT_FAILURE; \
-                                       } \
-                               else if ( var != (exp) ) \
-                                       { \
-                                       printf("***%s=",fs,  STR_SUB(fs) \
-                                              " should be: " STR_SUB(exp) \
-                                              ", was: %" fs " ***\n", var \
-                                             ); \
-                                       status = EXIT_FAILURE; \
-                                       } \
-                               else    /* for trailing semicolon */
-
-#define        PRINT(fs,var,exp)       if ( sprintf(buffer, "%" fs, var ) <= 0 ) \
-                                       { \
-                                       printf("***%s=",fs, STR_SUB(fs) \
-                                              " failed ***\n" \
-                                             ); \
-                                       status = EXIT_FAILURE; \
-                                       } \
-                               else if ( strcmp(buffer, STR_SUB(exp)) != 0 ) \
-                                       { \
-                                       printf("***%s=",fs,  STR_SUB(fs) \
-                                              " should be: " STR_SUB(exp) \
-                                              ", was: %s ***\n", buffer \
-                                             ); \
-                                       status = EXIT_FAILURE; \
-                                       } \
-                               else    /* for trailing semicolon */
-
-#else
-                                                                
-#define        SCAN(buf,fs,var,exp)
-#define        PRINT(fs,var,exp)
-
-#endif
-                                                                
-#ifdef SCNo32
-
-       SCAN(in_dn, SCNo32, int32, 9);
-
-#endif
-#ifdef PRIo32
-       PRINT(PRIo32, int32, 11);
-#endif
-       SCAN(in_dmo, SCNiLEAST16, intl16, -9);
-       SCAN(in_dspx, SCNdLEAST16, intl16, 0);
-       SCAN(in_dsmx, SCNiLEAST16, intl16, -4507);
-       PRINT(PRIdLEAST16, intl16, -4507);
-       PRINT(PRIiLEAST16, intl16, -4507);
-       SCAN(in_dsn, SCNxLEAST16, uintl16, 4507);
-       PRINT(PRIoLEAST16, uintl16, 10633);
-       PRINT(PRIuLEAST16, uintl16, 4507);
-       PRINT(PRIxLEAST16, uintl16, 119b);
-       PRINT(PRIXLEAST16, uintl16, 119B);
-       SCAN(in_dp, SCNxFAST16, uintf16, 4507);
-       PRINT(PRIxFAST16, uintf16, 119b);
-#ifdef SCNdMAX
-       SCAN(in_dp, SCNdMAX, intmax, 119);
-#endif
-#ifdef PRIiMAX
-       PRINT(PRIiMAX, intmax, 119);
-#endif
-#ifdef SCNoMAX
-       SCAN(in_dpx, SCNoMAX, uintmax, 0);
-#endif
-#ifdef PRIxMAX
-       PRINT(PRIxMAX, uintmax, 0);
-#endif
-       /* Obviously there should be a much larger battery of such tests. */
-       }
-
-#if    defined(INTMAX_MAX)             /* <inttypes.h> has C99 features */
-       /*
-               7.8.2   Functions for greatest-width integer types
-       */
-
-       {
-       static struct
-               {
-               intmax_t        input;
-               intmax_t        expect;
-               }       abs_data[] =
-               {
-#ifdef INT8_MAX
-         { INT8_MAX,           INT8_MAX,   },
-         { -INT8_MAX,          INT8_MAX,   },
-        {      UINT8_MAX,              UINT8_MAX,  },
-#endif
-
-#if 0
-  
-#ifdef INT16_MAX
-        {      INT16_MAX,              INT16_MAX,  },
-        {      -INT16_MAX,             INT16_MAX,  },
-        {      UINT16_MAX,             UINT16_MAX, },
-#endif
-#ifdef INT32_MAX
-        {      INT32_MAX,              INT32_MAX,  },
-        {      -INT32_MAX,             INT32_MAX,  },
-#ifdef INT_LEAST64_MAX                 /* else might support only 32 bits */
-        {      UINT32_MAX,             UINT32_MAX, },
-#endif
-#endif
-#ifdef INT64_MAX
-        {      INT64_MAX,              INT64_MAX,  },
-        {      -INT64_MAX,             INT64_MAX,  },
-#endif
-        {      INT_LEAST8_MAX,         INT_LEAST8_MAX,      },
-        {      -INT_LEAST8_MAX,        INT_LEAST8_MAX,      },
-        {      UINT_LEAST8_MAX,        UINT_LEAST8_MAX,     },
-        {      INT_LEAST16_MAX,        INT_LEAST16_MAX,     },
-        {      -INT_LEAST16_MAX,       INT_LEAST16_MAX,     },
-        {      UINT_LEAST16_MAX,       UINT_LEAST16_MAX,    },
-        {      INT_LEAST32_MAX,        INT_LEAST32_MAX,     },
-        {      -INT_LEAST32_MAX,       INT_LEAST32_MAX,     },
-#ifdef INT_LEAST64_MAX
-        {      UINT_LEAST32_MAX,       UINT_LEAST32_MAX,    },
-        {      INT_LEAST64_MAX,        INT_LEAST64_MAX,     },
-        {      -INT_LEAST64_MAX,       INT_LEAST64_MAX,     },
-#endif
-        {      INT_FAST8_MAX,          INT_FAST8_MAX,       },
-        {      -INT_FAST8_MAX, INT_FAST8_MAX,           },
-        {      UINT_FAST8_MAX, UINT_FAST8_MAX,          },
-        {      INT_FAST16_MAX, INT_FAST16_MAX,          },
-        {      -INT_FAST16_MAX,        INT_FAST16_MAX,      },
-        {      UINT_FAST16_MAX,        UINT_FAST16_MAX,     },
-        {      INT_FAST32_MAX, INT_FAST32_MAX,          },
-        {      -INT_FAST32_MAX,        INT_FAST32_MAX,      },
-#ifdef INT_FAST64_MAX
-        {      UINT_FAST32_MAX,        UINT_FAST32_MAX,     },
-        {      INT_FAST64_MAX, INT_FAST64_MAX,          },
-        {      -INT_FAST64_MAX,        INT_FAST64_MAX,      },
-#endif
-#ifdef INTPTR_MAX
-        {      INTPTR_MAX,             INTPTR_MAX,              },
-        {      -INTPTR_MAX,            INTPTR_MAX,          },
-#endif
-#ifdef UINTPTR_MAX
-        {      UINTPTR_MAX,            UINTPTR_MAX,         },
-#endif
-        {      INTMAX_MAX,             INTMAX_MAX,              },
-#ifdef PTRDIFF_MAX
-        {      PTRDIFF_MAX,            PTRDIFF_MAX,         },
-#endif
-#ifdef SIG_ATOMIC_MAX
-        {      SIG_ATOMIC_MAX,         SIG_ATOMIC_MAX,      },
-#if    SIG_ATOMIC_MIN < 0
-        {      -SIG_ATOMIC_MAX,        SIG_ATOMIC_MAX,      },
-#endif
-#endif
-#ifdef SIZE_MAX
-        {      SIZE_MAX,               SIZE_MAX,                },
-#endif
-#ifdef WCHAR_MAX
-        {      WCHAR_MAX,              WCHAR_MAX,               },
-#if    WCHAR_MIN < 0
-        {      -WCHAR_MAX,             WCHAR_MAX,               },
-#endif
-#endif
-#ifdef WINT_MAX
-        {      WINT_MAX,               WINT_MAX,                },
-#if    WINT_MIN < 0
-        {  -WINT_MAX,          WINT_MAX,                },
-#endif
-#endif
-        {      127,                            127,                 },
-        {      -127,                           127,                 },
-        {      128,                            128,                 },
-        {      -127-1,                         128,                 },
-        {      255,                            255,                 },
-        {      -256+1,                         255,                 },
-        {      256,                            256,                 },
-        {      -256,                           256,                 },
-        {      32767,                          32767,               },
-        {      -32767,                         32767,               },
-        {      32768,                          32768,               },
-        {      -32767-1,                       32768,               },
-        {      65535,                          65535,               },
-        {      -65536+1,                       65535,               },
-        {      65536,                          65536,               },
-        {      -65536,                         65536,               },
-        {      2147483647,                     2147483647,          },
-        {      -2147483647,                    2147483647,      },
-        {      2147483648,                     2147483648,          },
-        {      -2147483647-1,                  2147483648,      },
-#ifdef INT_LEAST64_MAX                 /* else might support only 32 bits */
-        {      4294967295,                     4294967295,          },
-        {      -4294967296+1,                  4294967295,      },
-        {      4294967296,                     4294967296,          },
-        {      -4294967296,                    4294967296,      },
-        {      9223372036854775807,            9223372036854775807,    },
-        {      -9223372036854775807,           9223372036854775807,    },
-        {      1234567890123456789,            1234567890123456789,    },
-        {      -1234567890123456789,           1234567890123456789,    },
-#endif
-        {      1,                              1,                                  },
-        {      -1,                             1,                                  },
-        {      2,                              2,                                  },
-        {      -2,                             2,                                  },
-        {      10,                             10,                                 },
-        {      -10,                            10,                             },
-        {      16,                             16,                                 },
-        {      -16,                            16,                             },
-#endif
-               /* Other test cases can be added here. */
-        {      0,              0       /* terminates the list */              },
-               },      *adp = abs_data;
-
-       do      {
-               if ( (intmax = imaxabs(adp->input)) != adp->expect )
-                       {
-                       printf("*** imaxabs(%"PRIdMAX") failed; should be: %"
-                              PRIdMAX", was: %"PRIdMAX" ***\n",
-                              adp->input, adp->expect, intmax
-                             );
-                       status = EXIT_FAILURE;
-                       }
-//             } while ( adp++->input != 0 );
-               } while ( (adp++)->input != 0 );
-       }
-
-       {
-       imaxdiv_t       result;
-       static struct
-               {
-               intmax_t        numer;
-               intmax_t        denom;
-               intmax_t        exp_quot;
-               intmax_t        exp_rem;
-               }       div_data[] =
-               {
-       {       0, 1,                           0, 0,   },
-#if 0
-       {       0, -1,                          0, 0,   },
-       {       0, 2,                           0, 0,   },
-       {       0, -2,                          0, 0,   },
-       {       0, 5,                           0, 0,   },
-       {       0, -5,                          0, 0,   },
-       {       1, 1,                           1, 0,   },
-       {       1, -1,                          -1, 0,  },
-       {       1, 2,                           0, 1,   },
-       {       1, -2,                          0, 1,   },
-       {       1, 5,                           0, 1,   },
-       {       1, -5,                          0, 1,   },
-       {       -1, 1,                          -1, 0,  },
-       {       -1, -1,                         1, 0,   },
-       {       -1, 2,                          0, -1,  },
-       {       -1, -2,                         0, -1,  },
-       {       -1, 5,                          0, -1,  },
-       {       -1, -5,                         0, -1,  },
-       {       2, 1,                           2, 0,   },
-       {       2, -1,                          -2, 0,  },
-       {       2, 2,                           1, 0,   },
-       {       2, -2,                          -1, 0,  },
-       {       2, 5,                           0, 2,   },
-       {       2, -5,                          0, 2,   },
-       {       -2, 1,                          -2, 0,  },
-       {       -2, -1,                         2, 0,   },
-       {       -2, 2,                          -1, 0,  },
-       {       -2, -2,                         1, 0,   },
-       {       -2, 5,                          0, -2,  },
-       {       -2, -5,                         0, -2,  },
-       {       17, 5,                          3, 2,   },
-       {       -17, -5,                        3, -2,  },
-       {       17, -5,                         -3, 2,  },
-       {       -17, 5,                         -3, -2, },
-       {       2147483647, 1,                  2147483647, 0,         },
-       {       -2147483647, 1,                 -2147483647, 0,        },
-       {       2147483648, 1,                  2147483648, 0,         },
-       {       -2147483647-1, 1,               -2147483647-1, 0,      },
-       {       2147483647, 2,                  1073741823, 1,         },
-       {       -2147483647, 2,                 -1073741823, -1,       },
-       {       2147483648, 2,                  1073741824, 0,         },
-       {       -2147483647-1, 2,               -1073741824, 0,        },
-#ifdef INT_LEAST64_MAX                 /* else might support only 32 bits */
-       {       4294967295, 1,                  4294967295, 0,         },
-       {       -4294967296+1, 1,               -4294967296+1, 0,      },
-       {       4294967296, 1,                  4294967296, 0,         },
-       {       -4294967296, 1,                 -4294967296, 0,        },
-       {       4294967295, -1,                 -4294967296+1, 0,      },
-       {       -4294967296+1, -1,              4294967295, 0,         },
-       {       4294967296, -1,                 -4294967296, 0,        },
-       {       -4294967296, -1,                4294967296, 0,         },
-       {       4294967295, 2,                  2147483647, 1,         },
-       {       -4294967296+1, 2,               -2147483647, -1,       },
-       {       4294967296, 2,                  2147483648, 0,         },
-       {       -4294967296, 2,                 -2147483647-1, 0,      },
-       {       4294967295, 2147483647,         2, 1,              },
-       {       -4294967296+1, 2147483647,      -2, -1,            },
-       {       4294967296, 2147483647,         2, 2,              },
-       {       -4294967296, 2147483647,        -2, -2,            },
-       {       4294967295, -2147483647,        -2, 1,             },
-       {       -4294967296+1, -2147483647,     2, -1,             },
-       {       4294967296, -2147483647,        -2, 2,             },
-       {       -4294967296, -2147483647,       2, -2,             },
-       {       4294967295, 2147483648,         1, 2147483647,     },
-       {       -4294967296+1, 2147483648,      -1, -2147483647,   },
-       {       4294967296, 2147483648,         2, 0,              },
-       {       -4294967296, 2147483648,        -2, 0,             },
-       {       4294967295, -2147483647-1,      -1, 2147483647,    },
-       {       -4294967296+1, -2147483647-1,   1, -2147483647,},
-       {       4294967296, -2147483647-1,      -2, 0,             },
-       {       -4294967296, -2147483647-1,     2, 0,              },
-       {       9223372036854775807, 1,         9223372036854775807, 0,         },
-       {       -9223372036854775807, 1,        -9223372036854775807, 0,        },
-       {       9223372036854775807, 2,         4611686018427387903, 1,         },
-       {       -9223372036854775807, 2,        -4611686018427387903, -1,       },
-#endif
-#endif
-               /* There should be a much larger battery of such tests. */
-       {       0, 0,           0, 0 }, /* 0 denom terminates the list */
-               },      *ddp;
-
-#if 0
-       for ( ddp = div_data; ddp->denom != 0; ++ddp )
-               if ( (result = imaxdiv(ddp->numer, ddp->denom)).quot
-                    != ddp->exp_quot || result.rem != ddp->exp_rem
-                  )    {
-//                     printf("*** imaxdiv(%"PRIdMAX",%"PRIdMAX
-//                            ") failed; should be: (%"PRIdMAX",%"PRIdMAX
-//                            "), was: (%"PRIdMAX",%"PRIdMAX") ***\n",
-//                            ddp->numer, ddp->denom, ddp->exp_quot,
-//                            ddp->exp_rem, result.quot, result.rem
-//                           );
-                       printf("err:imaxdiv(%"PRIdMAX",%"PRIdMAX
-                              ") = (%"PRIdMAX",%"PRIdMAX
-                              "), is: (%"PRIdMAX",%"PRIdMAX")\n",
-                              ddp->numer, ddp->denom, ddp->exp_quot,
-                              ddp->exp_rem, result.quot, result.rem
-                             );
-                       status = EXIT_FAILURE;
-                       }
-#endif
-       }
-       
-       {
-       char            *endptr;
-       wchar_t         *wendptr;
-       static char     saved[64];      /* holds copy of input string */
-       static wchar_t  wnptr[64];      /* holds wide copy of test string */
-       static int      warned;         /* "warned for null endptr" flag */
-       register int    i;
-       static struct
-               {
-               char *          nptr;
-               int             base;
-               intmax_t        exp_val;
-               int             exp_len;
-               }       str_data[] =
-               {
-       {       "", 0,                          0, 0,      },
-       {       "", 2,                          0, 0,      },
-       {       "", 8,                          0, 0,      },
-       {       "", 9,                          0, 0,      },
-       {       "", 10,                         0, 0,      },
-       {       "", 16,                         0, 0,      },
-       {       "", 36,                         0, 0,      },
-       {       "0", 0,                         0, 1,      },
-       {       "0", 2,                         0, 1,      },
-       {       "0", 8,                         0, 1,      },
-       {       "0", 9,                         0, 1,      },
-       {       "0", 10,                        0, 1,      },
-       {       "0", 16,                        0, 1,      },
-       {       "0", 36,                        0, 1,      },
-       {       "+0", 0,                        0, 2,      },
-       {       "+0", 2,                        0, 2,      },
-       {       "+0", 8,                        0, 2,      },
-       {       "+0", 9,                        0, 2,      },
-       {       "+0", 10,                       0, 2,      },
-       {       "+0", 16,                       0, 2,      },
-       {       "+0", 36,                       0, 2,      },
-       {       "-0", 0,                        0, 2,      },
-       {       "-0", 2,                        0, 2,      },
-       {       "-0", 8,                        0, 2,      },
-       {       "-0", 9,                        0, 2,      },
-       {       "-0", 10,                       0, 2,      },
-       {       "-0", 16,                       0, 2,      },
-       {       "-0", 36,                       0, 2,      },
-       {       "Inf", 0,                       0, 0,      },
-       {       "Inf", 2,                       0, 0,      },
-       {       "Inf", 8,                       0, 0,      },
-       {       "Inf", 9,                       0, 0,      },
-       {       "Inf", 10,                      0, 0,      },
-       {       "Inf", 16,                      0, 0,      },
-       {       "Inf", 36,                      24171, 3,  },
-       {       "+Inf", 0,                      0, 0,      },
-       {       "+Inf", 2,                      0, 0,      },
-       {       "+Inf", 8,                      0, 0,      },
-       {       "+Inf", 9,                      0, 0,      },
-       {       "+Inf", 10,                     0, 0,      },
-       {       "+Inf", 16,                     0, 0,      },
-       {       "+Inf", 36,                     24171, 4,  },
-       {       "-Inf", 0,                      0, 0,      },
-       {       "-Inf", 2,                      0, 0,      },
-       {       "-Inf", 8,                      0, 0,      },
-       {       "-Inf", 9,                      0, 0,      },
-       {       "-Inf", 10,                     0, 0,      },
-       {       "-Inf", 16,                     0, 0,      },
-       {       "-Inf", 36,                     -24171, 4, },
-       {       "inf", 0,                       0, 0,      },
-       {       "inf", 2,                       0, 0,      },
-       {       "inf", 8,                       0, 0,      },
-       {       "inf", 9,                       0, 0,      },
-       {       "inf", 10,                      0, 0,      },
-       {       "inf", 16,                      0, 0,      },
-       {       "inf", 36,                      24171, 3,  },
-       {       "+inf", 0,                      0, 0,      },
-       {       "+inf", 2,                      0, 0,      },
-       {       "+inf", 8,                      0, 0,      },
-       {       "+inf", 9,                      0, 0,      },
-       {       "+inf", 10,                     0, 0,      },
-       {       "+inf", 16,                     0, 0,      },
-       {       "+inf", 36,                     24171, 4,  },
-       {       "-inf", 0,                      0, 0,      },
-       {       "-inf", 2,                      0, 0,      },
-       {       "-inf", 8,                      0, 0,      },
-       {       "-inf", 9,                      0, 0,      },
-       {       "-inf", 10,                     0, 0,      },
-       {       "-inf", 16,                     0, 0,      },
-       {       "-inf", 36,                     -24171, 4, },
-       {       "119b8Z", 0,                    119, 3,         },
-       {       "119bZ", 0,                     119, 3,             },
-       {       "-0119bZ", 0,                   -9, 4,          },
-       {       " \t\n 0X119bZ", 0,             4507, 10,       },
-       {       " \t\n +0X119bZ", 0,            4507, 11,   },
-       {       " \t\n -0x119bZ", 0,            -4507, 11,  },
-       {       " \t\n 119bZ", 0,               119, 7,         },
-       {       "+119bZ", 0,                    119, 4,         },
-       {       "+0X119bz", 0,                  4507, 7,        },
-       {       "119b8Z", 2,                    3, 2,           },
-       {       "119bZ", 2,                     3, 2,               },
-       {       "-0119bZ", 2,                   -3, 4,          },
-       {       " \t\n 0X119bZ", 2,             0, 5,           },
-       {       " \t\n +0X119bZ", 2,            0, 6,       },
-       {       " \t\n -0x119bZ", 2,            0, 6,       },
-       {       " \t\n 119bZ", 2,               3, 6,           },
-       {       "+119bZ", 2,                    3, 3,           },
-       {       "+0X119bz", 2,                  0, 2,           },
-       {       "119b8Z", 8,                    9, 2,           },
-       {       "119bZ", 8,                     9, 2,               },
-       {       "-0119bZ", 8,                   -9, 4,          },
-       {       " \t\n 0X119bZ", 8,             0, 5,           },
-       {       " \t\n +0X119bZ", 8,            0, 6,       },
-       {       " \t\n -0x119bZ", 8,            0, 6,       },
-       {       " \t\n 119bZ", 8,               9, 6,           },
-       {       "+119bZ", 8,                    9, 3,           },
-       {       "+0X119bz", 8,                  0, 2,           },
-       {       "119b8Z", 9,                    10, 2,          },
-       {       "119bZ", 9,                     10, 2,              },
-       {       "-0119bZ", 9,                   -10, 4,         },
-       {       " \t\n 0X119bZ", 9,             0, 5,           },
-       {       " \t\n +0X119bZ", 9,            0, 6,       },
-       {       " \t\n -0x119bZ", 9,            0, 6,       },
-       {       " \t\n 119bZ", 9,               10, 6,          },
-       {       "+119bZ", 9,                    10, 3,          },
-       {       "+0X119bz", 9,                  0, 2,           },
-       {       "119b8Z", 10,                   119, 3,         },
-       {       "119bZ", 10,                    119, 3,         },
-       {       "-0119bZ", 10,                  -119, 5,        },
-       {       " \t\n 0X119bZ", 10,            0, 5,       },
-       {       " \t\n +0X119bZ", 10,           0, 6,       },
-       {       " \t\n -0x119bZ", 10,           0, 6,       },
-       {       " \t\n 119bZ", 10,              119, 7,         },
-       {       "+119bZ", 10,                   119, 4,         },
-       {       "+0X119bz", 10,                 0, 2,           },
-       {       "119b8Z", 16,                   72120, 5,       },
-       {       "119bZ", 16,                    4507, 4,        },
-       {       "-0119bZ", 16,                  -4507, 6,       },
-       {       " \t\n 0X119bZ", 16,            4507, 10,   },
-       {       " \t\n +0X119bZ", 16,           4507, 11,   },
-       {       " \t\n -0x119bZ", 16,           -4507, 11,  },
-       {       " \t\n 119bZ", 16,              4507,8,         },
-       {       "+119bZ", 16,                   4507, 5,        },
-       {       "+0X119bz", 16,                 4507, 7,        },
-       {       "119b8Z", 36,                   62580275, 6,    },
-       {       "119bZ", 36,                    1738367, 5,     },
-       {       "-0119bZ", 36,                  -1738367, 7,                 },
-       {       " \t\n 0X119bZ", 36,            1997122175, 11,          },
-       {       " \t\n +0X119bZ", 36,           1997122175, 12,          },
-       {       " \t\n -0x119bZ", 36,           -1997122175, 12,         },
-       {       " \t\n 119bZ", 36,              1738367, 9,                  },
-       {       "+119bZ", 36,                   1738367, 6,                  },
-       {       "+0X119bz", 36,                 1997122175, 8,               },
-               /* There should be a much larger battery of such tests. */
-       {       "127", 0,                       127, 3,                          },
-       {       "-127", 0,                      -127, 4,                         },
-       {       "128", 0,                       128, 3,                          },
-       {       "-128", 0,                      -127-1, 4,                       },
-       {       "255", 0,                       255, 3,                          },
-       {       "-255", 0,                      -255, 4,                         },
-       {       "256", 0,                       256, 3,                          },
-       {       "-256", 0,                      -255-1, 4,                       },
-       {       "32767", 0,                     32767, 5,                        },
-       {       "-32767", 0,                    -32767, 6,                   },
-       {       "32768", 0,                     32768, 5,                        },
-       {       "-32768", 0,                    -32767-1, 6,                 },
-       {       "65535", 0,                     65535, 5,                        },
-       {       "-65535", 0,                    -65536+1, 6,                 },
-       {       "65536", 0,                     65536, 5,                        },
-       {       "-65536", 0,                    -65536, 6,                   },
-       {       "2147483647", 0,                2147483647, 10,              },
-       {       "-2147483647", 0,               -2147483647, 11,             },
-       {       "2147483648", 0,                2147483648, 10,              },
-       {       "-2147483648", 0,               -2147483647-1, 11,           },
-       {       "4294967295", 0,                4294967295, 10,              },
-       {       "-4294967295", 0,               -4294967296+1, 11,           },
-       {       "4294967296", 0,                4294967296, 10,              },
-       {       "-4294967296", 0,               -4294967296, 11,                        },
-       {       "9223372036854775807", 0,       9223372036854775807, 19,            },
-       {       "-9223372036854775807", 0,      -9223372036854775807, 20,           },
-       {       "1234567890123456789", 0,       1234567890123456789, 19,            },
-       {       "-1234567890123456789", 0,      -1234567890123456789, 20,           },
-       {       "1", 0,                         1, 1,                                       },
-       {       "-1", 0,                        -1, 2,                                      },
-       {       "2", 0,                         2, 1,                                       },
-       {       "-2", 0,                        -2, 2,                                      },
-       {       "10", 0,                        10, 2,                                      },
-       {       "-10", 0,                       -10, 3,                                     },
-       {       "16", 0,                        16, 2,                                      },
-       {       "-16", 0,                       -16, 3,                                     },
-               /* Other test cases can be added here. */
-       {       NULL, 0,        0, 0 }, /* terminates the list */
-               },      *sdp;
-
-       for ( sdp = str_data; sdp->nptr != NULL ; ++sdp )
-               {
-               /*
-                       7.8.2.3 The strtoimax and strtoumax functions
-               */
-
-               strcpy(saved, sdp->nptr);
-
-               errno = 0;              /* shouldn't be changed */
-
-               if ( (intmax = strtoimax(sdp->nptr, &endptr, sdp->base))
-                 != sdp->exp_val
-                  )    {
-                       int     save = errno;
-
-                       printf("*** strtoimax(%s,,%d) failed; should be: %"
-                              PRIdMAX", was: %"PRIdMAX" ***\n", sdp->nptr,
-                              sdp->base, sdp->exp_val, intmax
-                             );
-                       status = EXIT_FAILURE;
-                       errno = save;
-                       }
-               else if ( endptr != sdp->nptr + sdp->exp_len )
-                       {
-                       int     save = errno;
-
-                       printf("*** strtoimax(%s,,%d) returned wrong endptr"
-                              " ***\n", sdp->nptr, sdp->base
-                             );
-                       status = EXIT_FAILURE;
-                       errno = save;
-                       }
-
-               if ( errno != 0 )
-                       {
-                       printf("*** strtoimax modified errno ***\n");
-                       status = EXIT_FAILURE;
-                       }
-
-               if ( strcmp(sdp->nptr, saved) != 0 )
-                       {
-                       printf("*** strtoimax modified its input ***\n");
-                       status = EXIT_FAILURE;
-                       strcpy(saved, sdp->nptr);
-                       }
-
-               if ( sdp->exp_val >= 0 )        /* else some sign extension */
-                       {
-                       errno = 0;      /* shouldn't be changed */
-
-                       if ( (uintmax = strtoumax(sdp->nptr, &endptr, sdp->base
-                                                )
-                            ) != sdp->exp_val
-                          )    {
-                               int     save = errno;
-
-                               printf("*** strtoumax(%s,,%d) failed; "
-                                      "should be: %"PRIuMAX", was: %"PRIuMAX
-                                      " ***\n", sdp->nptr, sdp->base,
-                                      sdp->exp_val, uintmax
-                                     );
-                               status = EXIT_FAILURE;
-                               errno = save;
-                               }
-                       else if ( endptr != sdp->nptr + sdp->exp_len )
-                               {
-                               int     save = errno;
-
-                               printf("*** strtoumax(%s,,%d) returned wrong "
-                                      "endptr ***\n", sdp->nptr, sdp->base
-                                     );
-                               status = EXIT_FAILURE;
-                               errno = save;
-                               }
-
-                       if ( errno != 0 )
-                               {
-                               printf("*** strtoumax modified errno ***\n");
-                               status = EXIT_FAILURE;
-                               }
-
-                       if ( strcmp(sdp->nptr, saved) != 0 )
-                               {
-                               printf("*** strtoumax"
-                                      " modified its input ***\n"
-                                     );
-                               status = EXIT_FAILURE;
-                               strcpy(saved, sdp->nptr);
-                               }
-                       }
-
-               /* tests for null endptr */
-
-#define        WARN()  if (!warned) warned = 1, printf("*** Using null endptr: ***\n")
-
-               warned = 0;
-               errno = 0;              /* shouldn't be changed */
-
-               if ( (intmax = strtoimax(sdp->nptr, (char **)NULL, sdp->base))
-                 != sdp->exp_val
-                  )    {
-                       int     save = errno;
-
-                       WARN();
-                       printf("*** strtoimax(%s,NULL,%d) failed; "
-                              "should be: %"PRIdMAX", was: %"PRIdMAX" ***\n",
-                              sdp->nptr, sdp->base, sdp->exp_val, intmax
-                             );
-                       status = EXIT_FAILURE;
-                       errno = save;
-                       }
-
-               if ( errno != 0 )
-                       {
-                       WARN();
-                       printf("*** strtoimax modified errno ***\n");
-                       status = EXIT_FAILURE;
-                       }
-
-               if ( strcmp(sdp->nptr, saved) != 0 )
-                       {
-                       WARN();
-                       printf("*** strtoimax modified its input ***\n");
-                       status = EXIT_FAILURE;
-                       strcpy(saved, sdp->nptr);
-                       }
-
-               if ( sdp->exp_val >= 0 )        /* else some sign extension */
-                       {
-                       errno = 0;      /* shouldn't be changed */
-
-                       if ( (uintmax = strtoumax(sdp->nptr, (char **)NULL,
-                                                 sdp->base
-                                                )
-                            ) != sdp->exp_val
-                          )    {
-                               int     save = errno;
-
-                               WARN();
-                               printf("*** strtoumax(%s,NULL,%d) failed; "
-                                      "should be: %"PRIuMAX", was: %"PRIuMAX
-                                      " ***\n", sdp->nptr, sdp->base,
-                                      sdp->exp_val, uintmax
-                                     );
-                               status = EXIT_FAILURE;
-                               errno = save;
-                               }
-
-                        if ( errno != 0 )
-                               {
-                               WARN();
-                               printf("*** strtoumax modified errno ***\n");
-                               status = EXIT_FAILURE;
-                               }
-
-                        if ( strcmp(sdp->nptr, saved) != 0 )
-                               {
-                               WARN();
-                               printf("*** strtoumax"
-                                      " modified its input ***\n"
-                                     );
-                               status = EXIT_FAILURE;
-                               strcpy(saved, sdp->nptr);
-                               }
-                       }
-
-               /*
-                       7.8.2.4 The wcstoimax and wcstoumax functions
-               */
-
-               for ( i = 0; i < 64; ++i )
-                       if ( (wnptr[i] = sdp->nptr[i]) == '\0' )
-                               break;
-
-               errno = 0;              /* shouldn't be changed */
-
-               if ( (intmax = wcstoimax(wnptr, &wendptr, sdp->base))
-                 != sdp->exp_val
-                  )    {
-                       int     save = errno;
-
-                       printf("*** wcstoimax(%s,,%d) failed; should be: %"
-                              PRIdMAX", was: %"PRIdMAX" ***\n", sdp->nptr,
-                              sdp->base, sdp->exp_val, intmax
-                             );
-                       status = EXIT_FAILURE;
-                       errno = save;
-                       }
-               else if ( wendptr != wnptr + sdp->exp_len )
-                       {
-                       int     save = errno;
-
-                       printf("*** wcstoimax(%s,,%d) returned wrong endptr"
-                              " ***\n", sdp->nptr, sdp->base
-                             );
-                       status = EXIT_FAILURE;
-                       errno = save;
-                       }
-
-               if ( errno != 0 )
-                       {
-                       printf("*** wcstoimax modified errno ***\n");
-                       status = EXIT_FAILURE;
-                       }
-
-               for ( i = 0; i < 64; ++i )
-                       if ( wnptr[i] != sdp->nptr[i] )
-                               {
-                               printf("*** wcstoimax modified its input ***\n"
-                                     );
-                               status = EXIT_FAILURE;
-
-                               for ( ; i < 64; ++i )
-                                       if ( (wnptr[i] = sdp->nptr[i]) == '\0' )
-                                               break;
-
-                               break;
-                               }
-                       else if ( wnptr[i] == '\0' )
-                               break;
-
-               if ( sdp->exp_val >= 0 )        /* else some sign extension */
-                       {
-                       errno = 0;      /* shouldn't be changed */
-
-                       if ( (uintmax = wcstoumax(wnptr, &wendptr, sdp->base)
-                            ) != sdp->exp_val
-                          )    {
-                               int     save = errno;
-
-                               printf("*** wcstoumax(%s,,%d) failed; "
-                                      "should be: %"PRIuMAX", was: %"PRIuMAX
-                                      " ***\n", sdp->nptr, sdp->base,
-                                      sdp->exp_val, uintmax
-                                     );
-                               status = EXIT_FAILURE;
-                               errno = save;
-                               }
-                       else if ( wendptr != wnptr + sdp->exp_len )
-                               {
-                               int     save = errno;
-
-                               printf("*** wcstoumax(%s,,%d) returned wrong "
-                                      "endptr ***\n", sdp->nptr, sdp->base
-                                     );
-                               status = EXIT_FAILURE;
-                               errno = save;
-                               }
-
-                       if ( errno != 0 )
-                               {
-                               printf("*** wcstoumax modified errno ***\n");
-                               status = EXIT_FAILURE;
-                               }
-
-                       for ( i = 0; i < 64; ++i )
-                               if ( wnptr[i] != sdp->nptr[i] )
-                                       {
-                                       printf("*** wcstoumax"
-                                              " modified its input ***\n"
-                                             );
-                                       status = EXIT_FAILURE;
-
-                                       for ( ; i < 64; ++i )
-                                               if ( (wnptr[i] = sdp->nptr[i])
-                                                 == '\0'
-                                                  )
-                                                       break;
-
-                                       break;
-                                       }
-                               else if ( wnptr[i] == '\0' )
-                                       break;
-                       }
-
-               /* tests for null endptr */
-
-               warned = 0;
-               errno = 0;              /* shouldn't be changed */
-
-               if ( (intmax = wcstoimax(wnptr, (wchar_t **)NULL, sdp->base))
-                 != sdp->exp_val
-                  )    {
-                       int     save = errno;
-
-                       WARN();
-                       printf("*** wcstoimax(%s,NULL,%d) failed; should be: %"
-                              PRIdMAX", was: %"PRIdMAX" ***\n", sdp->nptr,
-                              sdp->base, sdp->exp_val, intmax
-                             );
-                       status = EXIT_FAILURE;
-                       errno = save;
-                       }
-
-               if ( errno != 0 )
-                       {
-                       WARN();
-                       printf("*** wcstoimax modified errno ***\n");
-                       status = EXIT_FAILURE;
-                       }
-
-               for ( i = 0; i < 64; ++i )
-                       if ( wnptr[i] != sdp->nptr[i] )
-                               {
-                               WARN();
-                               printf("*** wcstoimax modified its input ***\n"
-                                     );
-                               status = EXIT_FAILURE;
-
-                               for ( ; i < 64; ++i )
-                                       if ( (wnptr[i] = sdp->nptr[i])
-                                         == '\0'
-                                          )
-                                               break;
-
-                               break;
-                               }
-                       else if ( wnptr[i] == '\0' )
-                               break;
-
-               if ( sdp->exp_val >= 0 )        /* else some sign extension */
-                       {
-                       errno = 0;      /* shouldn't be changed */
-
-                       if ( (uintmax = wcstoumax(wnptr, (wchar_t **)NULL,
-                                                 sdp->base
-                                                )
-                            ) != sdp->exp_val
-                          )    {
-                               int     save = errno;
-
-                               WARN();
-                               printf("*** wcstoumax(%s,NULL,%d) failed; "
-                                      "should be: %"PRIuMAX", was: %"PRIuMAX
-                                      " ***\n", sdp->nptr, sdp->base,
-                                      sdp->exp_val, uintmax
-                                     );
-                               status = EXIT_FAILURE;
-                               errno = save;
-                               }
-
-                        if ( errno != 0 )
-                               {
-                               WARN();
-                               printf("*** wcstoumax modified errno ***\n");
-                               status = EXIT_FAILURE;
-                               }
-
-                       for ( i = 0; i < 64; ++i )
-                               if ( wnptr[i] != sdp->nptr[i] )
-                                       {
-                                       WARN();
-                                       printf("*** wcstoumax"
-                                              " modified its input ***\n"
-                                             );
-                                       status = EXIT_FAILURE;
-
-                                       for ( ; i < 64; ++i )
-                                               if ( (wnptr[i] = sdp->nptr[i])
-                                                 == '\0'
-                                                  )
-                                                       break;
-
-                                       break;
-                                       }
-                               else if ( wnptr[i] == '\0' )
-                                       break;
-                       }
-               }
-
-       /*
-               7.8.2.3 The strtoimax and strtoumax functions (continued)
-       */
-
-       if ( (intmax = strtoimax("1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890",
-                                &endptr, 0
-                               )
-            ) != INTMAX_MAX || errno != ERANGE
-          )    {
-               printf("*** strtoimax failed overflow test ***\n");
-               status = EXIT_FAILURE;
-               }
-
-       if ( (intmax = strtoimax("+1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890",
-                                &endptr, 0
-                               )
-            ) != INTMAX_MAX || errno != ERANGE
-          )    {
-               printf("*** strtoimax failed +overflow test ***\n");
-               status = EXIT_FAILURE;
-               }
-
-       if ( (intmax = strtoimax("-1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890",
-                                &endptr, 0
-                               )
-            ) != INTMAX_MIN || errno != ERANGE
-          )    {
-               printf("*** strtoimax failed -overflow test ***\n");
-               status = EXIT_FAILURE;
-               }
-
-       if ( (uintmax = strtoumax("1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890",
-                                &endptr, 0
-                               )
-            ) != UINTMAX_MAX || errno != ERANGE
-          )    {
-               printf("*** strtoumax failed overflow test ***\n");
-               status = EXIT_FAILURE;
-               }
-
-       if ( (uintmax = strtoumax("+1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890",
-                                &endptr, 0
-                               )
-            ) != UINTMAX_MAX || errno != ERANGE
-          )    {
-               printf("*** strtoumax failed +overflow test ***\n");
-               status = EXIT_FAILURE;
-               }
-
-       if ( (uintmax = strtoumax("-1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890"
-                                "1234567890123456789012345678901234567890",
-                                &endptr, 0
-                               )
-            ) != UINTMAX_MAX || errno != ERANGE
-          )    {
-               printf("*** strtoumax failed -overflow test ***\n");
-               status = EXIT_FAILURE;
-               }
-
-       /*
-               7.8.2.4 The wcstoimax and wcstoumax functions (continued)
-       */
-
-#ifdef NO_INTERNAL_WCHAR
-               printf("NO_INTERNAL_WCHAR\n");
-#else
-
-       if ( (intmax = wcstoimax(L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890",
-                                &wendptr, 0
-                               )
-            ) != INTMAX_MAX || errno != ERANGE
-          )    {
-               printf("*** wcstoimax failed overflow test ***\n");
-               status = EXIT_FAILURE;
-               }
-
-       if ( (intmax = wcstoimax(L"+1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890",
-                                &wendptr, 0
-                               )
-            ) != INTMAX_MAX || errno != ERANGE
-          )    {
-               printf("*** wcstoimax failed +overflow test ***\n");
-               status = EXIT_FAILURE;
-               }
-
-       if ( (intmax = wcstoimax(L"-1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890",
-                                &wendptr, 0
-                               )
-            ) != INTMAX_MIN || errno != ERANGE
-          )    {
-               printf("*** wcstoimax failed -overflow test ***\n");
-               status = EXIT_FAILURE;
-               }
-
-       if ( (uintmax = wcstoumax(L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890",
-                                &wendptr, 0
-                               )
-            ) != UINTMAX_MAX || errno != ERANGE
-          )    {
-               printf("*** wcstoumax failed overflow test ***\n");
-               status = EXIT_FAILURE;
-               }
-
-       if ( (uintmax = wcstoumax(L"+1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890",
-                                &wendptr, 0
-                               )
-            ) != UINTMAX_MAX || errno != ERANGE
-          )    {
-               printf("*** wcstoumax failed +overflow test ***\n");
-               status = EXIT_FAILURE;
-               }
-
-       if ( (uintmax = wcstoumax(L"-1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890"
-                                L"1234567890123456789012345678901234567890",
-                                &wendptr, 0
-                               )
-            ) != UINTMAX_MAX || errno != ERANGE
-          )    {
-               printf("*** wcstoumax failed -overflow test ***\n");
-               status = EXIT_FAILURE;
-               }
-#endif // NO_INTERNAL_WCHAR
-       }
-#endif /* defined(INTMAX_MAX) */
-
-       if ( status != 0 )
-               printf("sitest failed.\n");
-
-       return status;
-}
-
-#endif
\ No newline at end of file
diff --git a/test/readme.txt b/test/readme.txt
deleted file mode 100644 (file)
index cd3b750..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-This directory contains test code for automatic regression testing of the CC65
-compiler.
-
-
-/val  - the bulk of tests are contained here, individual tests should exit with
-        an exit code of EXIT_SUCCESS when they pass, or EXIT_FAILURE on error
-
-/ref  - these tests produce output that must be compared with reference output
-
-/err  - contains tests that MUST NOT compile
-
-/misc - a few tests that need special care of some sort
-
-
-to run the tests use "make" in this (top) directory, the makefile should exit
-with no error.
-
-when a test failed you can use "make continue" to run further tests
-
---------------------------------------------------------------------------------
-
-TODO:
-
-- reduce usage of "common.h" to a minimum
-- convert more tests from using reference output to returning an exit code
diff --git a/test/ref/8q.c b/test/ref/8q.c
deleted file mode 100644 (file)
index e8bd1ca..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-  !!DESCRIPTION!! solves the "8 queens" chess problem
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include <stdio.h>
-
-int up[15], down[15], rows[8], x[8];
-void queens(int c);
-void print(void);
-
-int main(void)
-{
-       int i;
-       for (i = 0; i < 15; i++)
-               up[i] = down[i] = 1;
-       for (i = 0; i < 8; i++)
-               rows[i] = 1;
-       queens(0);
-       return 0;
-}
-
-void queens(int c)
-{
-       int r;
-
-       for (r = 0; r < 8; r++)
-               if (rows[r] && up[r-c+7] && down[r+c]) {
-                       rows[r] = up[r-c+7] = down[r+c] = 0;
-                       x[c] = r;
-                       if (c == 7)
-                               print();
-                       else
-                               queens(c + 1);
-                       rows[r] = up[r-c+7] = down[r+c] = 1;
-               }
-}
-
-void print(void)
-{
-       int k;
-
-       for (k = 0; k < 8; k++) {
-               printf("%c", x[k]+'1');
-               if(k<7) printf(" ");
-       }
-       printf("\n");
-}
diff --git a/test/ref/Makefile b/test/ref/Makefile
deleted file mode 100644 (file)
index 09dd96d..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-
-# makefile for the regression tests that generate output which has to be
-# compared with reference output
-
-ifneq ($(shell echo),)
-  CMD_EXE := 1
-endif
-
-ifdef CMD_EXE
-  S := $(subst /,\,/)
-  DEL = -del /f $(subst /,\,$1)
-else
-  S := /
-  DEL = $(RM) $1
-endif
-
-CC65FLAGS := -t sim6502
-SIM65FLAGS := -x 200000000
-
-CL65 := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65)
-SIM65 := $(if $(wildcard ../../bin/sim65*),..$S..$Sbin$Ssim65,sim65)
-
-WORKDIR := ..$S..$Stestwrk
-DIFF := $(WORKDIR)/bdiff
-
-CC := gcc
-CFLAGS := -O2 -Wall -W -Wextra -fwrapv -fno-strict-overflow
-
-.PHONY: all clean
-
-SOURCES := $(wildcard *.c)
-REFS := $(SOURCES:%.c=$(WORKDIR)/%.ref)
-TESTS := $(foreach option,. .o. .os. .osi. .osir. .oi. .oir. .or.,$(SOURCES:%.c=$(WORKDIR)/%$(option)prg))
-
-all: $(REFS) $(TESTS)
-
-$(WORKDIR)/%.ref: %.c
-       $(CC) $(CFLAGS) $< -o $(WORKDIR)/$*.host
-       $(WORKDIR)$S$*.host > $@
-
-# Some files have "K & R"-style syntax.  Therefore, some forward
-# function-declarations don't match the later function definitions.
-# Those programs fail when fastcall is used; but, the cdecl calling convention
-# tolerates those conflicts.  Therefore, make their functions default to cdecl.
-#
-$(WORKDIR)/init%prg: CC65FLAGS += -Wc --all-cdecl
-$(WORKDIR)/switch.%rg: CC65FLAGS += -Wc --all-cdecl
-$(WORKDIR)/yacc.%rg: CC65FLAGS += -Wc --all-cdecl
-$(WORKDIR)/yaccdbg%prg: CC65FLAGS += -Wc --all-cdecl
-
-$(WORKDIR)/%.prg: %.c $(WORKDIR)/%.ref
-       $(CL65) $(CC65FLAGS) $< -o $@
-       $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
-       $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
-
-$(WORKDIR)/%.o.prg: %.c $(WORKDIR)/%.ref
-       $(CL65) -O $(CC65FLAGS) $< -o $@
-       $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
-       $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
-
-$(WORKDIR)/%.os.prg: %.c $(WORKDIR)/%.ref
-       $(CL65) -Os $(CC65FLAGS) $< -o $@
-       $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
-       $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
-
-$(WORKDIR)/%.osi.prg: %.c $(WORKDIR)/%.ref
-       $(CL65) -Osi $(CC65FLAGS) $< -o $@
-       $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
-       $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
-
-$(WORKDIR)/%.osir.prg: %.c $(WORKDIR)/%.ref
-       $(CL65) -Osir $(CC65FLAGS) $< -o $@
-       $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
-       $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
-
-$(WORKDIR)/%.oi.prg: %.c $(WORKDIR)/%.ref
-       $(CL65) -Oi $(CC65FLAGS) $< -o $@
-       $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
-       $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
-
-$(WORKDIR)/%.oir.prg: %.c $(WORKDIR)/%.ref
-       $(CL65) -Oir $(CC65FLAGS) $< -o $@
-       $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
-       $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
-
-$(WORKDIR)/%.or.prg: %.c $(WORKDIR)/%.ref
-       $(CL65) -Or $(CC65FLAGS) $< -o $@
-       $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
-       $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
-
-clean:
-       @$(call DEL,$(TESTS))
-       @$(call DEL,$(SOURCES:.c=.o))
-       @$(call DEL,$(SOURCES:%.c=$(WORKDIR)/%.out))
-       @$(call DEL,$(SOURCES:%.c=$(WORKDIR)/%.ref))
-       @$(call DEL,$(SOURCES:%.c=$(WORKDIR)/%.host))
diff --git a/test/ref/array.c b/test/ref/array.c
deleted file mode 100644 (file)
index 9d170aa..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-  !!DESCRIPTION!! basic array properties
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include <stdio.h>
-
-#ifndef NO_NEW_PROTOTYPES_FOR_OLD_FUNC_DECL
-int f(void);
-int g(int x[][4],int *y[]);
-#endif
-
-int x[3][4], *y[3];
-
-main() {
-       int z[3][4];
-       int i, j, *p;
-
-       for (i = 0; i < 3; i++) {
-               for (j = 0; j < 4; j++)
-                       x[i][j] = 1000*i + j;
-               y[i] = x[i];
-       }
-       f();
-       for (i = 0; i < 3; i++) {
-               y[i] = p = &z[i][0];
-               for (j = 0; j < 4; j++)
-                       p[j] = x[i][j];
-       }
-       g(z, y);
-       
-       return 0;
-}
-
-f() {
-       int i, j;
-
-       for (i = 0; i < 3; i++)
-               for (j = 0; j < 4; j++)
-                       printf(" %d", x[i][j]);
-       printf("\n");
-       for (i = 0; i < 3; i++)
-               for (j = 0; j < 4; j++)
-                       printf(" %d", y[i][j]);
-       printf("\n");
-}
-
-g(x, y)
-int x[][4], *y[];
-{
-       int i, j;
-
-       for (i = 0; i < 3; i++)
-               for (j = 0; j < 4; j++)
-                       printf(" %d", x[i][j]);
-       printf("\n");
-       for (i = 0; i < 3; i++)
-               for (j = 0; j < 4; j++)
-                       printf(" %d", y[i][j]);
-       printf("\n");
-}
diff --git a/test/ref/cc65070303.c b/test/ref/cc65070303.c
deleted file mode 100644 (file)
index c0404da..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!
-*/
-
-#include <stdio.h>
-
-typedef signed int TypA[3];
-typedef struct TypB {
-       TypA Data[2];
-} sTypB;
-sTypB Bs[10];
-TypA * APtr;
-
-int main(int argc, char* argv[])
-{
-       Bs[7].Data[1][2]=11;
-       APtr=&(Bs[7].Data[1]);
-       printf("Hallo Welt! %i = %i \n",Bs[7].Data[1][2], (*APtr)[2] );
-       return 0;
-}
-
-/*
-....gives
-test.c(20): Error: Incompatible pointer types
-for   APtr=&(Bs[7].Data[1]);
-
-My experience in C is very limited, but as this works both in MSVC and 
-the 8 bit Z80 compiler i originally used, i guess its an bug in CC65.
-
-As a workaround, an typecast via  APtr=(TypA*)&(Bs[7].Data[1]);
-seems to work.
-
-greetings,
-   Andreas
-*/
\ No newline at end of file
diff --git a/test/ref/cc65080227.c b/test/ref/cc65080227.c
deleted file mode 100644 (file)
index 78afbb2..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-  !!DESCRIPTION!! 
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!
-*/
-
-#include <stdio.h>
-
-long a;  /* must be static life */
-long b;  /* must be static life */
-
-int main(void)
-{
-        a = 0x00112200;    /* must be immediate pattern is (1stBYTE == 4thBYTE) */
-        b = a;
-        /* b is 0x11112200 ! */
-
-    printf("b (should be 0x00112200): %08lx\n",b);
-
-    return 0;
-}
-
-/*
-[ command line ]
-    cl65 -c -T -l -O test.c
-
-[ part of test.lst ]
-    000012r 1               ; b = a;
-    000012r 1  AD rr rr         lda     _a+2
-    000015r 1  85 rr            sta     sreg
-    000017r 1  AE rr rr         ldx     _a+1
-    00001Ar 1  AD rr rr         lda     _a
-    00001Dr 1  8D rr rr         sta     _b
-    000020r 1  8E rr rr         stx     _b+1
-    000023r 1  A4 rr            ldy     sreg
-    000025r 1  8C rr rr         sty     _b+2
-    000028r 1  8C rr rr         sty     _b+3    ; lost 4th BYTE !
-*/
\ No newline at end of file
diff --git a/test/ref/cc65080328.c b/test/ref/cc65080328.c
deleted file mode 100644 (file)
index 630638f..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-  !!DESCRIPTION!! 
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!
-*/
-
-/*
-The following code produces an 'Error: Incompatible pointer types' at
-the last line when compiling with snapshot-2.11.9.20080316 without
-optimizations. If I remove the struct inside f() it compiles fine ?!?
-
-Best, Oliver
-*/
-
-#include <stdio.h>
-
-void f(void){struct{int i;}d;}
-struct{void(*p)(void);}s={f};
-
-int main(void)
-{
-    printf("it works :)\n");
-
-    return 0;
-}
diff --git a/test/ref/cc65090111.c b/test/ref/cc65090111.c
deleted file mode 100644 (file)
index be889a6..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-  !!DESCRIPTION!! 
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!
-*/
-
-#include <stdio.h>
-
-/*
-cc65 doesn't compile this, if i use the "-O"-option.
-but it works with "while(!0)"; instead of  "for(;;);"
-
-i'm using cl65 V2.12.9 win
-
-----
-#include <stdint.h>
-
-int main(void)
-{
- static uint8_t x = 0;
- static uint8_t y = 0;
-
-    for (x = 0; x < 16; ++x)
-    {
-     y = y + 1;
-    }
-    for(;;);
-}
-*/
-
-#include <stdint.h>
-
-int test(void)
-{
- static uint8_t x = 0;
- static uint8_t y = 0;
-
-    for (x = 0; x < 16; ++x)
-    {
-     y = y + 1;
-    }
-    for(;;);
-}
-
-int main(void)
-{
-    printf("it works :)\n");
-
-    return 0;
-}
diff --git a/test/ref/cc65090124.c b/test/ref/cc65090124.c
deleted file mode 100644 (file)
index 3f8279b..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-  !!DESCRIPTION!! 
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!
-*/
-
-#include <stdio.h>
-
-/*
-there is a bug in the preprocessor (i think) ... the following works 
-(compiles) correctly:
-
-unsigned long fs,fd,a;
-
-unsigned long _func(unsigned long x,unsigned long y)
-{
-        return 0;
-}
-
-int main(void)
-{
-        fs=(_func((fd/a),(_func(2,0x0082c90f))));
-}
-
-now if i wrap _func into a macro like this:
-
-#define func(x,y)       _func(x,y)
-
-int main(void)
-{
-        fs=(func((fd/a),(func(2,0x0082c90f))));
-}
-
-i get "Error: `)' expected" on that line. (this is with the snapshot, freshly 
-compiled 5 minutes ago)
-*/
-
-unsigned long fs,fd,a;
-
-unsigned long _func1(unsigned long x,unsigned long y)
-{
-        return 0;
-}
-
-int test1(void)
-{
-        fs=(_func1((fd/a),(_func1(2,0x0082c90f))));
-}
-
-#define func(x,y)       _func1(x,y)
-
-int test2(void)
-{
-        fs=(func((fd/a),(func(2,0x0082c90f))));
-}
-
-int main(void)
-{
-    printf("it works :)\n");
-
-    return 0;
-}
diff --git a/test/ref/cc65090726.c b/test/ref/cc65090726.c
deleted file mode 100644 (file)
index b260f0a..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-  !!DESCRIPTION!! 
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!
-*/
-
-#include "common.h"
-
-struct Record {
-  struct Record *PtrComp;
-  int x;
-};
-
-typedef struct Record RecordType;
-typedef RecordType *RecordPtr;
-
-void Proc3(RecordPtr *PtrParOut)
-{
-       /* whatever */
-}
-
-void Proc1(RecordPtr PtrParIn)
-{
-#define  NextRecord  (*(PtrParIn->PtrComp))
-       Proc3((RecordPtr *)NextRecord.PtrComp);
-       Proc3(&NextRecord.PtrComp);
-       Proc3(&PtrParIn->PtrComp->PtrComp);
-
-#ifdef CAST_STRUCT_PTR
-       Proc3((RecordPtr *) PtrParIn->PtrComp->PtrComp);
-       Proc3((RecordPtr *) (*(PtrParIn->PtrComp)).PtrComp);
-       Proc3((RecordPtr *) NextRecord.PtrComp);
-#else
-       Proc3(PtrParIn->PtrComp->PtrComp);
-       Proc3((*(PtrParIn->PtrComp)).PtrComp);
-       Proc3(NextRecord.PtrComp);
-#endif
-       
-#undef   NextRecord
-}
-
-int main(void)
-{
-    printf("it works :)\n");
-
-    return 0;
-}
diff --git a/test/ref/cc65090910.c b/test/ref/cc65090910.c
deleted file mode 100644 (file)
index 6ac5d9d..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-  !!DESCRIPTION!! optimizer bug
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Oliver Schmidt
-*/
-
-#include <stdio.h>
-
-/*
-After spending a "little" time I finally succeeded in isolating an
-(maybe THE) optimizer bug causing Contiki to fail.
-
-From my user perspective it is very interesting that the bug shows up
-with compiler option -O but does _not_ show up with -Oi.
-*/
-
-unsigned htons(unsigned val)
-{
-       return (((unsigned) (val)) << 8) | (((unsigned) (val)) >> 8);
-}
-
-int main(void)
-{
-    printf("%x -> %x\n", 0x1234, htons(0x1234) & 0xffff);
-
-    return 0;
-}
diff --git a/test/ref/cc65090913.c b/test/ref/cc65090913.c
deleted file mode 100644 (file)
index da6e37e..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-  !!DESCRIPTION!! optimizer bug
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Oliver Schmidt
-*/
-
-/*
-> I found the problem and fixed it. cc65 treated a label as a statement, but
-> the standard says, that a label is part of a statement. In a loop without
-> curly braces like
->
->         while (foo < bar)
->             label:  ++foo;
->
-> the following statement is the one that is looped over - and because cc65
-> treated just the label as a statement, it created code that looped forever.
-
-*/
-
-#include <stdio.h>
-
-int foo=0,bar=2;
-
-int main(void)
-{
-    while(foo<bar)
-           label: ++foo;
-
-    printf("foo: %d bar: %d\n",foo,bar);
-
-    return 0;
-}
diff --git a/test/ref/cc65091007.c b/test/ref/cc65091007.c
deleted file mode 100644 (file)
index 31f725f..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Johan Kotlinski
-*/
-
-#include <stdio.h>
-
-/*
-This produces the compiler error "test.c(9): Error: Assignment to const"
-Shouldn't be an error, should it? baz is const, bar isn't.
-*/
-
-typedef struct {
-    char foo;
-} Bar;
-
-int main() {
-    Bar bar;
-    Bar* const baz = &bar;
-
-    baz->foo = 1;
-
-    printf("it works :)\n");
-
-    return 0;
-}
-
diff --git a/test/ref/cc65091022.c b/test/ref/cc65091022.c
deleted file mode 100644 (file)
index 25d197c..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Johan Kotlinski
-*/
-
-#include <stdio.h>
-
-/*
-...gives "test.c(2): Error: Variable `foo' has unknown size" using -Cl.
-Is it really unknown?
-
-cc65 V2.13.0, SVN version: 4384
-*/
-
-int main() {
-    char foo[] = { 0 };
-    printf("it works :)\n");
-
-    return 0;
-}
diff --git a/test/ref/cc65101102.c b/test/ref/cc65101102.c
deleted file mode 100644 (file)
index 4faa7c1..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Marc 'BlackJack' Rintsch
-*/
-
-/*
-Compiler is build from cc65-snapshot-2.13.9.20101031 sources.
-
-Expected results and also what I get from this without any optimisations
-are: 48663 and 49218
-
-When I turn on ``-O``: 58096 and 58096.  After swapping the two variable
-declaration lines in `calculate_checksum()` the results are correct
-with ``-O``.
-
-But with ``--O --static-locals`` the results are incorrect again (31757
-and 15408).  ``--static-locals`` alone works though.
-*/
-
-#include <stdio.h>
-#include <stdint.h>
-
-// uint16_t __fastcall__ calculate_checksum(uint8_t *block);
-uint8_t block[256];
-
-uint16_t calculate_checksum(uint8_t *block)
-{
-    uint16_t i, result = 0xffff;
-    uint8_t j;
-
-    for (i = 0; i < 256; ++i) {
-        result ^= block[i] << 8;
-        for (j = 0; j < 8; ++j) {
-            if (result & (1 << 15)) {
-                result = (result << 1) ^ 0x1021;
-            } else {
-                result <<= 1;
-            }
-        }
-    }
-    return ~result;
-}
-
-int main(void)
-{
-    uint16_t i;
-
-    printf("zeroes: %u\n", calculate_checksum(block));
-    for (i = 0; i < 256; ++i) block[i] = i;
-    printf("0..255: %u\n", calculate_checksum(block));
-
-    return 0;
-}
-
diff --git a/test/ref/cc65101209.c b/test/ref/cc65101209.c
deleted file mode 100644 (file)
index c145436..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-  !!DESCRIPTION!! mod operator bug
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      marcas
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-
-int main(void) {
-     int tmp;
-
-     for (tmp = 0; tmp<=12345; tmp++)
-         if (!(tmp%1000)) printf("%d mod 1000 is %d\n", tmp, tmp%1000);
-
-    return 0;
-}
-
-/*
-results in  (vice x64)
-0 mod 1000 is 0
-232 mod 1000 is 0
-1000 mod 1000 is 0
-
-Interesting:
-
-        1000    = $3E8
-        232     = $E8
-
-So testing with 999 gives:
-
-0 mod 999 is 0
-231 mod 999 is 0
-999 mod 999 is 0
-
-This seems to be systematic. 
-*/
\ No newline at end of file
diff --git a/test/ref/cc65101216.c b/test/ref/cc65101216.c
deleted file mode 100644 (file)
index eaaf0b3..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-  !!DESCRIPTION!! division bug
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Stefan Wessels
-*/
-
-/*
-The output from the code below is:
-a / b = 6
-
-Shouldn't that be 0?
-*/
-
-#include <stdio.h>
-#define b 10000
-char a;
-int main()
-{
-    char c;
-
-    a = 100;
-    c = a / b;
-    printf("a / b = %d", c);
-
-    return 0;
-}
\ No newline at end of file
diff --git a/test/ref/cc65110210.c b/test/ref/cc65110210.c
deleted file mode 100644 (file)
index 2c78535..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-  !!DESCRIPTION!! linker bug
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     public domain
-*/
-
-/*
-with SVN version: 4973M
-
-$ cl65 -v -o test.prg tests/cc65110210.c
-Opened include file `/usr/local/lib/cc65/include/stdio.h'
-Opened include file `/usr/local/lib/cc65/include/stddef.h'
-Opened include file `/usr/local/lib/cc65/include/stdarg.h'
-Opened include file `/usr/local/lib/cc65/include/limits.h'
-0 errors, 0 warnings
-Opened output file `tests/cc65110210.s'
-Wrote output to `tests/cc65110210.s'
-Closed output file `tests/cc65110210.s'
-cl65: Subprocess `ld65' aborted by signal 11
-
-*/
-
-/* #define STANDALONE */
-
-#include <stdio.h>
-#include <limits.h>
-
-#ifdef STANDALONE
-
-#define NO_IMPLICIT_FUNCPTR_CONV
-
-#define OPENTEST()
-#define CLOSETEST()
-
-#else
-
-#endif
-
-#ifdef NO_IMPLICIT_FUNCPTR_CONV
-void (*p1func)(void);
-#else
-void (*p1func)();
-#endif
-
-void func(void)
-{
-    (*p1func)();
-}
-
-int main(void)
-{
-    printf("it works :)\n");
-
-    return (0);
-}
diff --git a/test/ref/cc65110211.c b/test/ref/cc65110211.c
deleted file mode 100644 (file)
index 83be84b..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-  !!DESCRIPTION!! unreachable code related bug
-  !!ORIGIN!!      Testsuite
-  !!LICENCE!!     Public Domain
-*/
-
-/*
-    test2 and test3 will result in an endless loop (SVN version: 4974M)
-*/
-
-#include <stdio.h>
-
-#define OPENTEST()
-#define CLOSETEST()
-
-static char upper[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
-int test1(void)
-{
-    int res;
-    unsigned char *p;
-
-    p = upper;
-    res = 0;
-
-    while(*p) {
-        if(*p < 0) {
-            res = 1;
-        }
-        p++;
-    }
-
-    printf("test1:ok\n");
-    return res;
-}
-
-int test2(void)
-{
-    int res;
-    unsigned char *p;
-
-    p = upper;
-    res = 0;
-
-    while(*p) {
-        if(*p++ < 0) {
-            res = 1;
-        }
-    }
-
-    printf("test2:ok\n");
-    return res;
-}
-
-int test3(void)
-{
-    int res;
-    unsigned char *p;
-
-    p = upper;
-    res = 0;
-
-    while(*p) {
-        if(*++p < 0) {
-            res = 1;
-        }
-    }
-
-    printf("test3:ok\n");
-    return res;
-}
-
-int main(int n,char **args)
-{
-    test1();
-    test2();
-    test3();
-
-    printf("it works :)\n");
-
-    return 0;
-}
diff --git a/test/ref/cf.c b/test/ref/cf.c
deleted file mode 100644 (file)
index 66fb42b..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
-  !!DESCRIPTION!! print character frequencies
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-/*
-        cf - print character frequencies
-*/
-
-#include "common.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <ctype.h>
-
-FILE *in;
-
-#define INFILE   "cf.in"
-#define GETCHAR() fgetc(in)
-
-#ifndef NO_FLOATS
-float f[0x100];
-#else
-signed f[0x100];
-#endif
-
-#ifdef NO_OLD_FUNC_DECL
-int main(int argc,char **argv)
-#else
-main(argc, argv)
-int argc;
-char *argv[];
-#endif
-{
-       int i, c, nc;
-#ifndef NO_FLOATS
-       float cutoff, atof();
-#else
-        signed cutoff;
-#endif
-
-        in = fopen(INFILE, "rb");
-        if (in == NULL) {
-            return EXIT_FAILURE;
-        }
-
-       if (argc <= 1)
-#ifndef NO_FLOATS
-               cutoff = 0.0;
-#else
-                cutoff = 0;
-#endif
-       else
-#ifndef NO_FLOATS
-               cutoff = atof(argv[1])/100;
-#else
-                cutoff = atoi(argv[1])/100;
-#endif
-       for (i = 0; i < 0x100; )
-    {
-#ifndef NO_FLOATS
-               f[i++] = 0.0;
-#else
-        f[i++] = 0;
-#endif
-    }
-
-    printf("input:\n\n");
-    
-    nc = 0;
-    while ((c = GETCHAR()) != -1)
-    {
-/*        printf("[%02x]",c); */
-        printf("%c",c);
-        f[c] += 1;
-        nc++;
-    }
-    printf("\n\ncount: %d\n\n",nc);
-
-    /*
-        now try to print a report in a way so that
-        the order is somewhat independent from the
-        target character set
-    */
-
-    printf("a-z char:freq\n\n");
-
-    /* first round ... lowercase characters */
-       for (i = 0; i < 0x100; ++i)
-    {
-               if ((f[i]) && ((f[i]/nc) >= cutoff))
-        {
-                       if ((i >= 'a') && (i <= 'z'))
-            {
-                               printf("%c", i);
-#ifndef NO_FLOATS
-                printf(":%.1f\n", 100*f[i]/nc);
-#else
-                printf(":%d\n", 100*f[i]/nc);
-#endif
-                f[i]=0;
-            }
-               }
-    }
-
-    printf("A-Z char:freq\n\n");
-
-    /* second round ... uppercase characters */
-       for (i = 0; i < 0x100; ++i)
-    {
-               if ((f[i]) && ((f[i]/nc) >= cutoff))
-        {
-                       if ((i >= 'A') && (i <= 'Z'))
-            {
-                               printf("%c", i);
-#ifndef NO_FLOATS
-                printf(":%.1f\n", 100*f[i]/nc);
-#else
-                printf(":%d\n", 100*f[i]/nc);
-#endif
-                f[i]=0;
-            }
-               }
-    }
-
-    printf("0-9 char:freq\n\n");
-
-    /* third round ... numbers */
-       for (i = 0; i < 0x100; ++i)
-    {
-               if ((f[i]) && ((f[i]/nc) >= cutoff))
-        {
-                       if ((i >= '0') && (i <= '9'))
-            {
-                               printf("%c", i);
-#ifndef NO_FLOATS
-                printf(":%.1f\n", 100*f[i]/nc);
-#else
-                printf(":%d\n", 100*f[i]/nc);
-#endif
-                f[i]=0;
-            }
-               }
-    }
-
-    printf("isprint char:freq\n\n");
-
-    /* second last round ... remaining printable characters */
-       for (i = 0; i < 0x100; ++i)
-    {
-               if ((f[i]) && ((f[i]/nc) >= cutoff))
-        {
-                       if(isprint(i))
-            {
-                               printf("%c", i);
-#ifndef NO_FLOATS
-                printf(":%.1f\n", 100*f[i]/nc);
-#else
-                printf(":%d\n", 100*f[i]/nc);
-#endif
-                f[i]=0;
-            }
-               }
-    }
-
-    printf("rest char:freq\n\n");
-
-    /* last round ... remaining non printable characters */
-       for (i = 0; i < 0x100; ++i)
-    {
-               if ((f[i]) && ((f[i]/nc) >= cutoff))
-        {
-            if(i=='\n')
-            {
-                               printf("newline");
-            }
-            else
-            {
-                               printf("%03o", i);
-            }
-#ifndef NO_FLOATS
-                printf(":%.1f\n", 100*f[i]/nc);
-#else
-                printf(":%d\n", 100*f[i]/nc);
-#endif
-               }
-    }
-    fclose(in);
-    return 0;
-}
diff --git a/test/ref/cf.in b/test/ref/cf.in
deleted file mode 100755 (executable)
index 8190039..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-start cf.input >
-The sky above the port was the color of television, tuned
-to a dead channel.
-"It's not like I'm using," Case heard someone say, as he
-shouldered his way through the crowd around the door of the
-Chat. "It's like my body's developed this massive drug deficiency."
-It was a Sprawl voice and a Sprawl joke. The Chatsubo
-was a bar for professional expatriates; you could drink there
-for a week and never hear two words in Japanese.
-Ratz was tending bar, his prosthetic arm jerking monotonously
-as he filled a tray of glasses with draft Kirin. He saw
-Case and smiled, his teeth a web work of East European steel
-and brown decay. Case found a place at the bar, between the
-unlikely tan on one of Lonny Zone's whores and the crisp naval
-uniform of a tall African whose cheekbones were ridged with
-Joe boys," Ratz said, shoving a draft across the bar with his
-good hand. "Maybe some business with you, Case?"
-Case shrugged. The girl to his right giggled and nudged
-< end cf.input
diff --git a/test/ref/charconst.c b/test/ref/charconst.c
deleted file mode 100644 (file)
index 65ebc70..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-  !!DESCRIPTION!! check if character constants are translated correctly
-  !!ORIGIN!!      cc65 bug report
-  !!LICENCE!!     Public Domain
-*/
-
-#include "common.h"
-#include <limits.h>
-#include <ctype.h>
-
-void backslash(unsigned char c)
-{
-    printf("%c : ",c);
-
-    switch (c)
-    {
-       case 'b':
-               c = '\b';
-       case 'f':
-               c = '\f';
-       case 'n':
-               c = '\n';
-       case 'r':
-               c = '\r';
-       case 't':
-               c = '\t';
-       case 'v':
-    #ifndef NO_BACKSLASH_V
-        c = '\v';
-    #else
-        c = 0x0b;
-    #endif
-       }
-
-    if(!isprint(c))
-    {
-        printf("ok.\n");
-    }
-    else
-    {
-        printf("failed.\n");
-    }
-}
-
-void testbackslash(void)
-{
-        backslash('b');
-        backslash('f');
-        backslash('n');
-        backslash('r');
-        backslash('t');
-        backslash('v');
-}
-
-int main(void)
-{
-       testbackslash();
-
-       return 0;
-}
diff --git a/test/ref/charset.c b/test/ref/charset.c
deleted file mode 100644 (file)
index 59b7c4c..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
-  !!DESCRIPTION!! basic ASCII character test
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Groepaz/Hitmen
-*/
-
-#include <stdio.h>
-
-#if 0
-
-/* this kind of line-continuation for strings doesnt work properly for cc65 */
-
-const unsigned char characters[]={
-       /*0123456789abcdef0123456789abcdef*/
-       /* iso646-us control-characters */
-       "                                "      /* 00-1f */
-       /* iso646-us printable characters */
-       " !\"#$%&'()*+,-./"                     /* 20-2f !"#$%&'()*+,-./ */
-       "0123456789"                            /* 30-39 0123456789      */
-       ":;<=>?@"                               /* 3a-40 :;<=>?@         */
-       "ABCDEFGHIJKLMNOPQRSTUVWXYZ"            /* 41-5a A-Z             */
-       "[\\]^_`"                               /* 5b-60 [\]^_`          */
-       "abcdefghijklmnopqrstuvwxyz"            /* 61-7a a-z             */
-       "{|}~ "                                 /* 7b-7f {|}~            */
-       /* iso8859-15 extended characters */
-};
-
-#endif
-
-const unsigned char characters[]={
-       /*0123456789abcdef0123456789abcdef*/
-       /* iso646-us control-characters */
-       /* 00-1f */
-       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-       /* iso646-us printable characters */
-       /* 20-2f !"#$%&'()*+,-./ */
-       ' ','!','"','#','$','%','&','\'','(',')','*','+',',','-','.','/',
-       /* 30-39 0123456789      */
-       '0','1','2','3','4','5','6','7','8','9',
-       /* 3a-40 :;<=>?@         */
-       ':',';','<','=','>','?','@',
-       /* 41-5a A-Z             */
-       'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
-       /* 5b-60 [\]^_`          */
-       '[','\\',']','^','_','`',
-       /* 61-7a a-z             */
-       'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
-       /* 7b-7f {|}~            */
-       '{','|','}','~',' '
-       /* iso8859-15 extended characters */
-};
-
-void printchars(unsigned char a,unsigned char b){
-       for(b++;a!=b;a++)
-/*                printf("%02x ",a); */
-/*                printf("%02x ",characters[a]); */
-               printf("%c",characters[a]);
-       printf("\n");
-}
-
-int main(void) {
-       printf("characters:\n\n");
-       printchars(0x61,0x7a);
-       printchars(0x41,0x5a);
-       printf("numbers:\n\n");
-       printchars(0x30,0x39);
-       printf("other:\n\n");
-       printchars(0x20,0x2f);
-       /*printchars(0x3a,0x40);*/
-       printchars(0x3a,0x3f);
-       /*printchars(0x5b,0x60);*/
-       /*printchars(0x7b,0x7f);*/
-       printf("\n\n");
-       printf("slash:               '%c'\n",'/');
-       printf("backslash:           '%c'\n",'\\');
-       printf("curly braces open:   '%c'\n",'{');
-       printf("curly braces close:  '%c'\n",'}');
-       printf("square braces open:  '%c'\n",'[');
-       printf("square braces close: '%c'\n",']');
-       printf("underscore:          '%c'\n",'_');
-       printf("tilde:               '%c'\n",'~');
-       printf("pipe:                '%c'\n",'|');
-       printf("apostroph:           '%c'\n",'\'');
-       printf("single quote         '%c'\n",'`');
-       printf("xor                  '%c'\n",'^');
-       printf("at                   '%c'\n",'@');
-
-       return 0;
-}
diff --git a/test/ref/common.h b/test/ref/common.h
deleted file mode 100644 (file)
index dada61a..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#define NO_OLD_FUNC_DECL
-#define NO_TYPELESS_INT
-#define NO_TYPELESS_INT_PTR
-#define MAIN_RETURNS_INT
-#define NO_IMPLICIT_FUNC_PROTOTYPES
-#define NO_FLOATS
-#define NO_WCHAR
-#define NO_EMPTY_FUNC_ARGS
-#define NO_SLOPPY_STRUCT_INIT
-#define NO_FUNCS_TAKE_STRUCTS
-#define NO_FUNCS_RETURN_STRUCTS
-#define CAST_STRUCT_PTR
-#define NO_TYPELESS_STRUCT_PTR
-#define NO_IMPLICIT_FUNCPTR_CONV
-#define SIZEOF_INT_16BIT
-#define SIZEOF_LONG_32BIT
-#define UNSIGNED_CHARS
-#define UNSIGNED_BITFIELDS
diff --git a/test/ref/cvt.c b/test/ref/cvt.c
deleted file mode 100644 (file)
index 841c1b3..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-  !!DESCRIPTION!! type conversion
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-#include <stdio.h>
-
-signed char c;
-signed short s;
-signed int i;
-signed long int l;
-unsigned char C;
-unsigned short S;
-unsigned int I;
-unsigned long int L;
-
-#ifdef NO_FLOATS
-signed long f;
-signed long d;
-signed long D;
-#else
-float f;
-double d;
-long double D;
-#endif
-
-void *p;
-void (*P)(void);
-
-void print(void) {
-        #ifdef NO_FLOATS
-        printf("%d %d %d %ld %u %u %u %lu %ld.000000 %ld.000000 %ld.000000\n",c,s,i,l,C,S,I,L,f,d,D);
-        #else
-        printf("%d %d %d %ld %u %u %u %lu %f %f %lf \n",c,s,i,l,C,S,I,L,f,d,D );
-        #endif
-}
-
-main() {
-        c= 1;     s=c;i=c;l=c;C=c;S=c;I=c;L=c; f=c;d=c;D=c;  print();
-        s= 2; c=s;    i=s;l=s;C=s;S=s;I=s;L=s; f=s;d=s;D=s;  print();
-        i= 3; c=i;s=i;    l=i;C=i;S=i;I=i;L=i; f=i;d=i;D=i;  print();
-        l= 4; c=l;s=l;i=l;    C=l;S=l;I=l;L=l; f=l;d=l;D=l;  print();
-        C= 5; c=C;s=C;i=C;l=C;    S=C;I=C;L=C; f=C;d=C;D=C;  print();
-        S= 6; c=S;s=S;i=S;l=S;C=S;    I=S;L=S; f=S;d=S;D=S;  print();
-        I= 7; c=I;s=I;i=I;l=I;C=I;S=I;    L=I; f=I;d=I;D=I;  print();
-        L= 8; c=L;s=L;i=L;l=L;C=L;S=L;I=S;     f=L;d=L;D=L;  print();
-        f= 9; c=f;s=f;i=f;l=f;C=f;S=f;I=f;L=f;     d=f;D=f;  print();
-        d=10; c=d;s=d;i=d;l=d;C=d;S=d;I=d;L=d;f=d;     D=d;  print();
-        D=11; c=D;s=D;i=D;l=D;C=D;S=D;I=D;L=D;f=D;d=D;     print();
-
-        p=0; p=0L; p=0U; p=0UL; p=P;
-        P=0; P=0L; P=0U; P=0UL; P=p;
-        return 0;
-}
diff --git a/test/ref/dijkstra.c b/test/ref/dijkstra.c
deleted file mode 100644 (file)
index 168324f..0000000
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
-  !!DESCRIPTION!! Dijkstras Algorithm
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Groepaz/Hitmen
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#ifndef NULL
-#define NULL ((void*)0)
-#endif
-
-#define DIJKSTRA_INFINITY       (0xffff)
-
-#define DIJKSTRA_FLAG_UNVISITED (0x0)
-/*
-#define DIJKSTRA_FLAG_OPEN      (0x1)
-*/
-#define DIJKSTRA_FLAG_CLOSED    (0x2)
-
-typedef struct _DIJKSTRA_EDGE {
-    struct _DIJKSTRA_NODE *NEXTNODE;
-    unsigned short DISTANCE;
-} DIJKSTRA_EDGE;
-
-typedef struct _DIJKSTRA_NODE {
-    DIJKSTRA_EDGE *EDGES;
-    unsigned char  TAG;
-    unsigned char  FLAG;
-    unsigned short MINDIST;
-    struct _DIJKSTRA_NODE *PREVIOUS;
-} DIJKSTRA_NODE;
-
-/* init with graph, startnode, working-array */
-void Dijkstra_Init(const DIJKSTRA_NODE *graph,DIJKSTRA_NODE *start,DIJKSTRA_NODE *nodes);
-
-/* call main algo with working-array */
-void Dijkstra_Search(DIJKSTRA_NODE *nodes);
-
-/* print path, call with working-array, endnode */
-void Dijkstra_Path(DIJKSTRA_NODE *nodes,DIJKSTRA_NODE *end);
-
-/* print table, call with working-array, current node */
-void Dijkstra_Table(DIJKSTRA_NODE *nodes,DIJKSTRA_NODE *current);
-
-/* internally used routines */
-
-unsigned short Dijkstra_Distance(DIJKSTRA_NODE *currnode,DIJKSTRA_NODE *nextnode);
-void Dijkstra_Relax(DIJKSTRA_NODE *currnode,DIJKSTRA_NODE *nextnode);
-DIJKSTRA_NODE *Dijkstra_NextCheapest(DIJKSTRA_NODE *graph);
-unsigned short Dijkstra_CountUnvisited(DIJKSTRA_NODE *graph);
-
-/* define to get printed info as the algorithm proceeds */
-#define DIJKSTRA_PRINTDEBUG
-
-/* the working array */
-DIJKSTRA_NODE mynodes[0x10];
-
-/* test-network data (mypoints and myedges) */
-
-const DIJKSTRA_EDGE myedges_A[]={
-    {&mynodes[1],1},
-    {NULL}
-};
-const DIJKSTRA_EDGE myedges_B[]={
-    {&mynodes[0],1},
-    {&mynodes[2],2},
-    {&mynodes[3],1},
-    {NULL}
-};
-const DIJKSTRA_EDGE myedges_C[]={
-    {&mynodes[1],2},
-    {&mynodes[5],1},
-    {NULL}
-};
-const DIJKSTRA_EDGE myedges_D[]={
-    {&mynodes[1],1},
-    {&mynodes[4],1},
-    {NULL}
-};
-const DIJKSTRA_EDGE myedges_E[]={
-    {&mynodes[6],1},
-    {NULL}
-};
-const DIJKSTRA_EDGE myedges_F[]={
-    {&mynodes[7],1},
-    {NULL}
-};
-const DIJKSTRA_EDGE myedges_G[]={
-    {&mynodes[8],1},
-    {&mynodes[7],4},
-    {NULL}
-};
-const DIJKSTRA_EDGE myedges_H[]={
-    {&mynodes[9],1},
-    {&mynodes[6],4},
-    {NULL}
-};
-const DIJKSTRA_EDGE myedges_I[]={
-    {&mynodes[10],5},
-    {NULL}
-};
-const DIJKSTRA_EDGE myedges_J[]={
-    {&mynodes[10],1},
-    {NULL}
-};
-const DIJKSTRA_EDGE myedges_K[]={
-    {&mynodes[11],1},
-    {NULL}
-};
-const DIJKSTRA_EDGE myedges_L[]={
-    {&mynodes[10],1},
-    {NULL}
-};
-
-const DIJKSTRA_NODE mypoints[]={
-    {(DIJKSTRA_EDGE *)&myedges_A[0],'A'},
-    {(DIJKSTRA_EDGE *)&myedges_B[0],'B'},
-    {(DIJKSTRA_EDGE *)&myedges_C[0],'C'},
-    {(DIJKSTRA_EDGE *)&myedges_D[0],'D'},
-    {(DIJKSTRA_EDGE *)&myedges_E[0],'E'},
-    {(DIJKSTRA_EDGE *)&myedges_F[0],'F'},
-    {(DIJKSTRA_EDGE *)&myedges_G[0],'G'},
-    {(DIJKSTRA_EDGE *)&myedges_H[0],'H'},
-    {(DIJKSTRA_EDGE *)&myedges_I[0],'I'},
-    {(DIJKSTRA_EDGE *)&myedges_J[0],'J'},
-    {(DIJKSTRA_EDGE *)&myedges_K[0],'K'},
-    {(DIJKSTRA_EDGE *)&myedges_L[0],'L'},
-    {NULL}
-};
-
-/*
- *      initialize working-array
- */
-
-void Dijkstra_Init(const DIJKSTRA_NODE *graph,DIJKSTRA_NODE *start,DIJKSTRA_NODE *nodes) {
-    while(graph->EDGES!=NULL) {
-        nodes->EDGES=graph->EDGES;
-        nodes->TAG=graph->TAG;
-        nodes->FLAG=DIJKSTRA_FLAG_UNVISITED;
-        nodes->MINDIST=DIJKSTRA_INFINITY;
-        nodes->PREVIOUS=NULL;
-
-        graph++;nodes++;
-
-    }
-/*
-    start->FLAG=DIJKSTRA_FLAG_OPEN;
-    start->PREVIOUS=NULL;
- */
-    start->MINDIST=0;
-}
-
-/*
- *      compute the distance between two Nodes in the Graph
- */
-
-unsigned short Dijkstra_Distance(DIJKSTRA_NODE *currnode,DIJKSTRA_NODE *nextnode){
-DIJKSTRA_EDGE *edge;
-
-    edge=currnode->EDGES;
-
-    while(edge!=NULL) {
-        if(edge->NEXTNODE == nextnode){
-            return(edge->DISTANCE);
-        }
-
-        edge++;
-
-    }
-
-    return(DIJKSTRA_INFINITY);
-}
-
-/*
- *      'relax' one node against another
- */
-
-void Dijkstra_Relax(DIJKSTRA_NODE *currnode,DIJKSTRA_NODE *nextnode){
-unsigned short newdist;
-
-#ifdef DIJKSTRA_PRINTDEBUG
-    printf("relax >%c< to >%c<\n",currnode->TAG,nextnode->TAG);
-#endif
-
-    newdist=currnode->MINDIST+Dijkstra_Distance(currnode,nextnode);
-
-    if((nextnode->MINDIST)>(newdist)){
-        nextnode->MINDIST=newdist;
-        nextnode->PREVIOUS=currnode;
-
-    }
-}
-
-/*
- *      find the yet unprocessed Node with the currently
- *      smallest estimated MINDIST
- */
-
-DIJKSTRA_NODE *Dijkstra_NextCheapest(DIJKSTRA_NODE *graph){
-unsigned short mindist;
-DIJKSTRA_NODE *node;
-
-    node=NULL;
-    mindist=DIJKSTRA_INFINITY;
-
-    while(graph->EDGES!=NULL) {
-        if(graph->FLAG!=DIJKSTRA_FLAG_CLOSED){
-            if(!(mindist<graph->MINDIST)){
-                     mindist=graph->MINDIST;
-                     node=graph;
-            }
-        }
-
-        graph++;
-
-    }
-
-#ifdef DIJKSTRA_PRINTDEBUG
-    if(node!=NULL) printf("next cheapest Node: >%c<\n",node->TAG);
-#endif
-
-    return(node);
-}
-
-/*
- *      count number of Nodes that are left for processing
- */
-
-unsigned short Dijkstra_CountUnvisited(DIJKSTRA_NODE *graph){
-unsigned short num;
-
-    num=0;
-
-    while(graph->EDGES!=NULL) {
-        if(graph->FLAG!=DIJKSTRA_FLAG_CLOSED){
-            num++;
-        }
-
-        graph++;
-
-    }
-
-    return(num);
-}
-
-/*
- *      Dijkstra-Algorithmus main processing
- */
-
-void Dijkstra_Search(DIJKSTRA_NODE *graph){
-DIJKSTRA_NODE *currnode,*nextnode;
-DIJKSTRA_EDGE *edge;
-
-    currnode=graph;
-
-    while(Dijkstra_CountUnvisited(graph)>0){
-        edge=currnode->EDGES;
-        while(edge->NEXTNODE!=NULL){
-            nextnode=edge->NEXTNODE;
-            if(nextnode->FLAG!=DIJKSTRA_FLAG_CLOSED){
-/*
-   nextnode->FLAG=DIJKSTRA_FLAG_OPEN;
- */
-                Dijkstra_Relax(currnode,nextnode);
-#ifdef DIJKSTRA_PRINTDEBUG
-                Dijkstra_Table(graph,currnode);
-#endif
-            }
-            edge++;
-        }
-        currnode=Dijkstra_NextCheapest(graph);
-        currnode->FLAG=DIJKSTRA_FLAG_CLOSED;
-    }
-}
-
-/*
- *      print the Path from start Node to one other Node
- */
-
-void Dijkstra_Path(DIJKSTRA_NODE *graph,DIJKSTRA_NODE *end){
-DIJKSTRA_NODE *currnode,*nextnode;
-
-    printf("Path from >%c< to >%c< : ",end->TAG,graph->TAG);
-
-    currnode=end;
-
-        while(currnode->PREVIOUS!=NULL){
-            printf(">%c< ",currnode->TAG);
-            currnode=currnode->PREVIOUS;
-        }
-
-    printf(">%c<\n",currnode->TAG);
-}
-
-/*
- *      print working-array as a table
- */
-
-void Dijkstra_Table(DIJKSTRA_NODE *graph,DIJKSTRA_NODE *current){
-DIJKSTRA_NODE *g;
-
-    printf("----------------------\n");
-
-    printf("Node    |");
-    g=graph;while(g->EDGES!=NULL) {
-        printf("-->%c<-|",g->TAG);
-        g++;
-    }
-    printf("\n");
-
-    printf("MinDist |");
-    g=graph;while(g->EDGES!=NULL) {
-        printf(" %5u|",g->MINDIST);
-        g++;
-    }
-    printf("\n");
-
-    printf("Flag    |");
-    g=graph;while(g->EDGES!=NULL) {
-        switch(g->FLAG){
-/*
-            case DIJKSTRA_FLAG_OPEN:
-                printf("opened|");
-                break;
- */
-            case DIJKSTRA_FLAG_CLOSED:
-                printf("closed|");
-                break;
-            default:
-                if(g->MINDIST!=DIJKSTRA_INFINITY){
-                    printf("opened|");
-                } else {
-                    printf("------|");
-                }
-                break;
-        }
-        g++;
-    }
-    printf("\n");
-
-    printf("Previous|");
-    g=graph;while(g->EDGES!=NULL) {
-        if(g->PREVIOUS==NULL)
-            printf("------|");
-        else
-            printf("  (%c) |",g->PREVIOUS->TAG);
-        g++;
-    }
-    printf("\n");
-
-    printf("----------------------\n");
-}
-
-int main(void)
-{
-    /* init with graph, startnode, working-array */
-    Dijkstra_Init(&mypoints[0],&mynodes[0],&mynodes[0]);
-    /* call main algo with working-array */
-    Dijkstra_Search(&mynodes[0]);
-    /* print table, call with working-array, endnode */
-    Dijkstra_Table(&mynodes[0],&mynodes[11]);
-    /* print path, call with working-array, endnode */
-    Dijkstra_Path(&mynodes[0],&mynodes[11]);
-
-    return 0;
-}
diff --git a/test/ref/divmod.c b/test/ref/divmod.c
deleted file mode 100644 (file)
index 68a0198..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*\r
-  !!DESCRIPTION!! div/mod test\r
-  !!ORIGIN!!\r
-  !!LICENCE!!     public domain\r
-*/\r
-\r
-#include <stdio.h>\r
-\r
-void printc(signed char a,signed char b){\r
-signed char x=a/b,y=a%b,z=a*b;\r
-       printf("%3d,%3d is %3d,%3d,%3d\n",a,b,x,y,z);\r
-}\r
-void prints(short a,short b){\r
-short x=a/b,y=a%b,z=a*b;\r
-       printf("%3d,%3d is %3d,%3d,%3d\n",a,b,x,y,z);\r
-}\r
-void printl(long a,long b){\r
-long x=a/b,y=a%b,z=a*b;\r
-       printf("%3ld,%3ld is %3ld,%3ld,%3ld\n",a,b,x,y,z);\r
-}\r
-\r
-int main(void) {\r
-       printl( 3,-2);\r
-       printl(-3,-2);\r
-       printl(-3, 2);\r
-       printl( 3, 2);\r
-       printf("-\n");\r
-       prints( 3,-2);\r
-       prints(-3,-2);\r
-       prints(-3, 2);\r
-       prints( 3, 2);\r
-       printf("-\n");\r
-       printc( 3,-2);\r
-       printc(-3,-2);\r
-       printc(-3, 2);\r
-       printc( 3, 2);\r
-       return 0;
-}\r
diff --git a/test/ref/hanoi.c b/test/ref/hanoi.c
deleted file mode 100644 (file)
index 234ac41..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-  !!DESCRIPTION!! solves the "towers of hanoi" problem
-  !!ORIGIN!!      BYTE UNIX Benchmarks
-  !!LICENCE!!     Public Domain
-*/
-
-/*******************************************************************************
- *  The BYTE UNIX Benchmarks - Release 3
- *          Module: hanoi.c   SID: 3.3 5/15/91 19:30:20
- *
- *******************************************************************************
- * Bug reports, patches, comments, suggestions should be sent to:
- *
- *     Ben Smith, Rick Grehan or Tom Yager
- *     ben@bytepb.byte.com   rick_g@bytepb.byte.com   tyager@bytepb.byte.com
- *
- *******************************************************************************
- *  Modification Log:
- *  $Header: hanoi.c,v 3.5 87/08/06 08:11:14 kenj Exp $
- *  August 28, 1990 - Modified timing routines (ty)
- *
- ******************************************************************************/
-
-#define VERBOSE
-/*#define USECMDLINE*/
-
-#include <stdio.h>
-#include <stdlib.h>
-
-unsigned short iter = 0; /* number of iterations */
-char num[4];
-long cnt;
-
-int disk=5,       /* default number of disks */
-    duration=10;  /* default time to run test */
-
-void mov(unsigned char n,unsigned char f,unsigned char t)
-{
-char o;
-
-       if(n == 1)
-       {
-               num[f]--;
-               num[t]++;
-       }
-       else
-       {
-               o = (6-(f+t));
-               mov(n-1,f,o);
-               mov(1,f,t);
-               mov(n-1,o,t);
-       }
-
-       #ifdef VERBOSE
-       printf("%2d: %2d %2d %2d %2d\n",
-               (int)iter,(int)num[0],(int)num[1],(int)num[2],(int)num[3]);
-       #endif
-}
-
-int main(int argc,char **argv)
-{
-       #ifdef USECMDLINE
-       if (argc < 2) {
-               printf("Usage: %s [duration] [disks]\n", argv[0]);
-               exit(1);
-       }
-       else
-       {
-               if(argc > 1) duration = atoi(argv[1]);
-               if(argc > 2) disk = atoi(argv[2]);
-       }
-       #endif
-
-       printf("towers of hanoi\ndisks: %d\n\n",disk);
-
-       num[1] = disk;
-
-       #ifdef VERBOSE
-       printf("%2d: %2d %2d %2d %2d\n",
-               (int)iter,(int)num[0],(int)num[1],(int)num[2],(int)num[3]);
-       #endif
-
-       while(num[3]<disk)
-       {
-               mov(disk,1,3);
-               ++iter;
-       }
-
-       return 0;
-}
diff --git a/test/ref/ifexpr.c b/test/ref/ifexpr.c
deleted file mode 100644 (file)
index a602039..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-  !!DESCRIPTION!! if/then, ? operator, compares
-  !!ORIGIN!!      cc65 devel list
-  !!LICENCE!!     Public Domain
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-void t1a(void)
-{
-    int a = -0x5000;
-
-    printf(a < 0x5000 ? "ok\n" : "error\n");
-}
-
-void t1b(void)
-{
-    int a = -0x5000;
-
-    if(a<0x5000)
-    {
-        printf("ok\n");
-    }
-    else
-    {
-        printf("error\n");
-    }
-}
-
-int main(void)
-{
-    t1a();t1b();
-
-    return 0;
-}
diff --git a/test/ref/incr.c b/test/ref/incr.c
deleted file mode 100644 (file)
index adce0e1..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-  !!DESCRIPTION!! increment/decrement
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include <stdio.h>
-
-int main(void)
-{
-    printf("disassemble this program to check the generated code.\n");
-    return 0;
-}
-
-memchar() {
-       char x, *p;
-
-       &x, &p;
-       x = *p++;
-       x = *++p;
-       x = *p--;
-       x = *--p;
-}
-
-memint() {
-       int x, *p;
-
-       &x, &p;
-       x = *p++;
-       x = *++p;
-       x = *p--;
-       x = *--p;
-}
-
-regchar() {
-       register char x, *p;
-
-       x = *p++;
-       x = *++p;
-       x = *p--;
-       x = *--p;
-}
-
-regint() {
-       register int x, *p;
-
-       x = *p++;
-       x = *++p;
-       x = *p--;
-       x = *--p;
-}
diff --git a/test/ref/init.c b/test/ref/init.c
deleted file mode 100644 (file)
index 5a58167..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/*\r
-  !!DESCRIPTION!! variable initialization\r
-  !!ORIGIN!!      LCC 4.1 Testsuite\r
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC\r
-*/\r
-\r
-#include "common.h"\r
-/* todo: add back conditional stuff here ! */\r
-\r
-typedef struct { int codes[3]; char name[6]; } Word;\r
-\r
-#ifdef NO_IMPLICIT_FUNC_PROTOTYPES\r
-\r
-#ifdef NO_OLD_FUNC_DECL\r
-f();\r
-void g(Word *p);\r
-h();\r
-#else\r
-f();\r
-g();\r
-h();\r
-#endif\r
-\r
-#endif\r
-\r
-/*\r
-Word words[] = {\r
-        1, 2, 3,"if",\r
-       { { 4, 5 }, { 'f', 'o', 'r' } },\r
-        6, 7, 8, {"else"},\r
-        { { 9, 10, 11,}, 'w', 'h', 'i', 'l', 'e', },\r
-        { 0 },\r
-}, *wordlist = words;\r
-*/\r
-\r
-Word words[] = {\r
-        {{1, 2, 3},"if"},\r
-       { { 4, 5 }, { 'f', 'o', 'r' } },\r
-        {{6, 7, 8}, "else"},\r
-        { { 9, 10, 11}, {'w', 'h', 'i', 'l', 'e', }},\r
-        {{ 0 }},\r
-}, *wordlist = words;\r
-\r
-/*int x[][5] = { 1, 2, 3, 4, 0, { 5, 6 }, { 7 } };*/\r
-int x[][5] = { {1, 2, 3, 4, 0 }, { 5, 6 }, { 7 } };\r
-int *y[] = { x[0], x[1], x[2], 0 };\r
-\r
-main()\r
-{\r
-       int i, j;\r
-\r
-       for (i = 0; y[i]; i++) {\r
-               for (j = 0; y[i][j]; j++)\r
-                       printf(" %d", y[i][j]);\r
-               printf("\n");\r
-       }\r
-       f();\r
-       g(wordlist);\r
-       return 0;\r
-}\r
-\r
-f() {\r
-       static char *keywords[] = {"if", "for", "else", "while", 0, };\r
-       char **p;\r
-\r
-       for (p = keywords; *p; p++)\r
-               printf("%s\n", *p);\r
-}\r
-\r
-#ifdef NO_OLD_FUNC_DECL\r
-void g(Word *p)\r
-#else\r
-g(p)\r
-Word *p;\r
-#endif\r
-{\r
-       int i;\r
-\r
-       for ( ; p->codes[0]; p++) {\r
-               for (i = 0; i < sizeof p->codes/sizeof(p->codes[0]); i++)\r
-                       printf("%d ", p->codes[i]);\r
-               printf("%s\n", p->name);\r
-       }\r
-       h();\r
-}\r
-\r
-h()\r
-{\r
-       int i;\r
-\r
-       for (i = 0; i < sizeof(words)/sizeof(Word); i++)\r
-               printf("%d %d %d %s\n", words[i].codes[0],\r
-                       words[i].codes[1], words[i].codes[2],\r
-                       &words[i].name[0]);\r
-}\r
diff --git a/test/ref/macro.c b/test/ref/macro.c
deleted file mode 100644 (file)
index 1650b98..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-  !!DESCRIPTION!! macro bug test program
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Groepaz/Hitmen
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-
-unsigned long fs=7;
-unsigned long fd=5;
-unsigned long a=3;
-
-unsigned long _func(unsigned long x,unsigned long y)
-{
-       printf("x:%ld y:%ld\n",x,y);
-       return 0;
-}
-
-#define func(x,y)      _func(x,y)
-
-int main(void)
-{
-       fs= func( (fd/a) ,  func(2,0x0082c90f) );
-       printf("fs:%ld\n",fs);
-       fs=_func( (fd/a) , _func(2,0x0082c90f) );
-       printf("fs:%ld\n",fs);
-       return 0;
-}
diff --git a/test/ref/mandel.c b/test/ref/mandel.c
deleted file mode 100644 (file)
index 6c21151..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-  !!DESCRIPTION!! mandelbrot test program
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Groepaz/Hitmen
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-
-static unsigned short SCREEN_X;
-static unsigned char  SCREEN_Y;
-
-#define MAXCOL     8
-
-#define maxiterations 16
-
-#define fpshift (12)
-
-#define tofp(_x)        ((_x)<<fpshift)
-#define fromfp(_x)      ((_x)>>fpshift)
-#define fpabs(_x)       (abs(_x))
-
-#define mulfp(_a,_b)    ((((signed long)_a)*(_b))>>fpshift)
-#define divfp(_a,_b)    ((((signed long)_a)<<fpshift)/(_b))
-
-unsigned char dither[MAXCOL]={" .*o+0%#"};
-
-void mandelbrot(signed short x1,signed short y1,signed short x2,signed short y2)
-{
-register signed short  r,r1,i;
-register unsigned char count;
-register signed short xs,ys,xx,yy;
-register signed short x;
-register unsigned char y;
-
-        /* calc stepwidth */
-        xs=((x2-x1)/(SCREEN_X));
-        ys=((y2-y1)/(SCREEN_Y));
-
-        yy=y1;
-        for(y = 0; y < (SCREEN_Y); ++y)
-        {
-                yy+=ys; xx=x1;
-                for(x = 0; x < (SCREEN_X); ++x)
-                {
-                    xx+=xs;
-                    /* do iterations */
-                    r=0;i=0;
-                    for(count=0;(count<maxiterations)&&
-                                (fpabs(r)<tofp(2))&&
-                                (fpabs(i)<tofp(2))
-                                ;++count)
-                    {
-                            r1 = (mulfp(r,r)-mulfp(i,i))+xx;
-                            /* i = (mulfp(mulfp(r,i),tofp(2)))+yy; */
-                            i = (((signed long)r*i)>>(fpshift-1))+yy;
-                            r=r1;
-                    }
-                    if(count==maxiterations)
-                    {
-                            printf(" ");
-                    }
-                    else
-                    {
-                            printf("%c",dither[(count%MAXCOL)]);
-                    }
-                }
-                    printf("\n");
-        }
-}
-
-int main (void)
-{
-    SCREEN_X = 80;
-    SCREEN_Y = 40;
-
-    /* calc mandelbrot set */
-    mandelbrot(tofp(-2),tofp(-2),tofp(2),tofp(2));
-
-    /* Done */
-    return 0;
-}
-
diff --git a/test/ref/minimal.c b/test/ref/minimal.c
deleted file mode 100644 (file)
index b2e2d9d..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
-  !!DESCRIPTION!! minimal Program, checks if the Compiler and testsuite framework works
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Groepaz/Hitmen
-*/
-
-#include <stdio.h>
-
-int main(void)
-{
-#if 1
-    printf("it works :)\n");
-#endif
-    return 0;
-}
diff --git a/test/ref/otccex.c b/test/ref/otccex.c
deleted file mode 100644 (file)
index aa5df15..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
-  !!DESCRIPTION!! OTCC Example (simple K&R Style)
-  !!ORIGIN!!      OTCC
-  !!LICENCE!!     GPL (?), read COPYING.GPL
-*/
-
-#include "common.h"
-
-/*
- * Sample OTCC C example. You can uncomment the first line and install
- * otcc in /usr/local/bin to make otcc scripts !  
- */
-
-/* Any preprocessor directive except #define are ignored. We put this
-   include so that a standard C compiler can compile this code too. */
-#include <stdio.h>
-#include <limits.h>
-
-/* defines are handled, but macro arguments cannot be given. No
-   recursive defines are tolerated */
-#define DEFAULT_BASE 10
-
-#ifdef NO_IMPLICIT_FUNC_PROTOTYPES
-help(char *name);
-#endif
-
-/*
- * Only old style K&R prototypes are parsed. Only int arguments are
- * allowed (implicit types).
- * 
- * By benchmarking the execution time of this function (for example
- * for fib(35)), you'll notice that OTCC is quite fast because it
- * generates native i386 machine code.  
- */
-fib(n)
-{
-    printf("[fib(%d)]", n);
-    if (n <= 2)
-        return 1;
-    else
-        return fib(n-1) + fib(n-2);
-}
-
-/* Identifiers are parsed the same way as C: begins with letter or
-   '_', and then letters, '_' or digits */
-long fact(n)
-{
-    /* local variables can be declared. Only 'int' type is supported */
-    int i;
-    long r;
-    r = 1;
-    /* 'while' and 'for' loops are supported */
-    for(i=2;i<=n;i++)
-        r = r * i;
-    return r;
-}
-
-/* Well, we could use printf, but it would be too easy */
-print_num(long n,int b)
-{
-    int tab, p, c;
-    /* Numbers can be entered in decimal, hexadecimal ('0x' prefix) and
-       octal ('0' prefix) */
-    /* more complex programs use malloc */
-    tab = malloc(0x100); 
-    p = tab;
-    while (1) {
-        c = n % b;
-        /* Character constants can be used */
-        if (c >= 10)
-            c = c + 'a' - 10;
-        else
-            c = c + '0';
-        *(char *)p = c;
-        p++;
-        n = n / b;
-        /* 'break' is supported */
-        if (n == 0)
-            break;
-    }
-    while (p != tab) {
-        p--;
-        printf("%c", *(char *)p);
-    }
-    free(tab);
-}
-
-/* 'main' takes standard 'argc' and 'argv' parameters */
-mymain(int argc,char **argv)
-{
-    /* no local name space is supported, but local variables ARE
-       supported. As long as you do not use a globally defined
-       variable name as local variable (which is a bad habbit), you
-       won't have any problem */
-    int s, n, f, base;
-    
-    
-    /* && and || operator have the same semantics as C (left to right
-       evaluation and early exit) */
-    if (argc != 2 && argc != 3) {
-        /* '*' operator is supported with explicit casting to 'int *',
-           'char *' or 'int (*)()' (function pointer). Of course, 'int'
-           are supposed to be used as pointers too. */
-        s = *(int *)argv;
-        help(s);
-        return 1;
-    }
-    /* Any libc function can be used because OTCC uses dynamic linking */
-    n = atoi(argv[1]);
-    base = DEFAULT_BASE;
-    if (argc >= 3) {
-        base = atoi(argv[2]);
-        if (base < 2 || base > 36) {
-            /* external variables can be used too (here: 'stderr') */
-            fprintf(stdout, "Invalid base\n");
-            return 1;
-        }
-    }
-    printf("fib(%d) =\n", n);
-    print_num(fib(n), base);
-    printf("\n");
-
-    printf("fact(%d) = ", n);
-    if (n > 12) {
-        printf("Overflow");
-    } else {
-        /* why not using a function pointer ? */
-        f = &fact;
-        print_num((*(long (*)(int))f)(n), base);
-    }
-    printf("\n");
-    return 0;
-}
-
-/* functions can be used before being defined */
-help(char *name)
-{
-    printf("usage: %s n [base]\n", name);
-    printf("Compute fib(n) and fact(n) and output the result in base 'base'\n");
-}
-
-int main(void)
-{
-    char *argv[3];
-    argv[0]="";
-    argv[1]="10"; /* n */
-    argv[2]="8"; /* base */
-    mymain(3, argv);
-    return 0;
-}
\ No newline at end of file
diff --git a/test/ref/paranoia.c b/test/ref/paranoia.c
deleted file mode 100644 (file)
index e9a47dd..0000000
+++ /dev/null
@@ -1,2219 +0,0 @@
-/*
-  !!DESCRIPTION!! a wellknown floating point test
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-#ifdef NO_FLOATS
-
-main()
-{
-        printf("NO_FLOATS\n\r");
-        return 0;
-}
-
-#else
-
-#undef V9
-#define NOPAUSE
-/*     A C version of Kahan's Floating Point Test "Paranoia"
-
-                       Thos Sumner, UCSF, Feb. 1985
-                       David Gay, BTL, Jan. 1986
-
-       This is a rewrite from the Pascal version by
-
-                       B. A. Wichmann, 18 Jan. 1985
-
-       (and does NOT exhibit good C programming style).
-
-(C) Apr 19 1983 in BASIC version by:
-       Professor W. M. Kahan,
-       567 Evans Hall
-       Electrical Engineering & Computer Science Dept.
-       University of California
-       Berkeley, California 94720
-       USA
-
-converted to Pascal by:
-       B. A. Wichmann
-       National Physical Laboratory
-       Teddington Middx
-       TW11 OLW
-       UK
-
-converted to C by:
-
-       David M. Gay            and     Thos Sumner
-       AT&T Bell Labs                  Computer Center, Rm. U-76
-       600 Mountain Avenue             University of California
-       Murray Hill, NJ 07974           San Francisco, CA 94143
-       USA                             USA
-
-with simultaneous corrections to the Pascal source (reflected
-in the Pascal source available over netlib).
-[A couple of bug fixes from dgh = sun!dhough incorporated 31 July 1986.]
-
-Reports of results on various systems from all the versions
-of Paranoia are being collected by Richard Karpinski at the
-same address as Thos Sumner.  This includes sample outputs,
-bug reports, and criticisms.
-
-You may copy this program freely if you acknowledge its source.
-Comments on the Pascal version to NPL, please.
-
-The C version catches signals from floating-point exceptions.
-If signal(SIGFPE,...) is unavailable in your environment, you may
-#define NOSIGNAL to comment out the invocations of signal.
-
-This source file is too big for some C compilers, but may be split
-into pieces.  Comments containing "SPLIT" suggest convenient places
-for this splitting.  At the end of these comments is an "ed script"
-(for the UNIX(tm) editor ed) that will do this splitting.
-
-By #defining Single when you compile this source, you may obtain
-a single-precision C version of Paranoia.
-
-The following is from the introductory commentary from Wichmann's work:
-
-The BASIC program of Kahan is written in Microsoft BASIC using many
-facilities which have no exact analogy in Pascal.  The Pascal
-version below cannot therefore be exactly the same.  Rather than be
-a minimal transcription of the BASIC program, the Pascal coding
-follows the conventional style of block-structured languages.  Hence
-the Pascal version could be useful in producing versions in other
-structured languages.
-
-Rather than use identifiers of minimal length (which therefore have
-little mnemonic significance), the Pascal version uses meaningful
-identifiers as follows [Note: A few changes have been made for C]:
-
-BASIC   C               BASIC   C               BASIC   C
-
-   A                       J                       S    StickyBit
-   A1   AInverse           J0   NoErrors           T
-   B    Radix                    [Failure]         T0   Underflow
-   B1   BInverse           J1   NoErrors           T2   ThirtyTwo
-   B2   RadixD2                  [SeriousDefect]   T5   OneAndHalf
-   B9   BMinusU2           J2   NoErrors           T7   TwentySeven
-   C                             [Defect]          T8   TwoForty
-   C1   CInverse           J3   NoErrors           U    OneUlp
-   D                             [Flaw]            U0   UnderflowThreshold
-   D4   FourD              K    PageNo             U1
-   E0                      L    Milestone          U2
-   E1                      M                       V
-   E2   Exp2               N                       V0
-   E3                      N1                      V8
-   E5   MinSqEr            O    Zero               V9
-   E6   SqEr               O1   One                W
-   E7   MaxSqEr            O2   Two                X
-   E8                      O3   Three              X1
-   E9                      O4   Four               X8
-   F1   MinusOne           O5   Five               X9   Random1
-   F2   Half               O8   Eight              Y
-   F3   Third              O9   Nine               Y1
-   F6                      P    Precision          Y2
-   F9                      Q                       Y9   Random2
-   G1   GMult              Q8                      Z
-   G2   GDiv               Q9                      Z0   PseudoZero
-   G3   GAddSub            R                       Z1
-   H                       R1   RMult              Z2
-   H1   HInverse           R2   RDiv               Z9
-   I                       R3   RAddSub
-   IO   NoTrials           R4   RSqrt
-   I3   IEEE               R9   Random9
-
-   SqRWrng
-
-All the variables in BASIC are true variables and in consequence,
-the program is more difficult to follow since the "constants" must
-be determined (the glossary is very helpful).  The Pascal version
-uses Real constants, but checks are added to ensure that the values
-are correctly converted by the compiler.
-
-The major textual change to the Pascal version apart from the
-identifiersis that named procedures are used, inserting parameters
-wherehelpful.  New procedures are also introduced.  The
-correspondence is as follows:
-
-BASIC       Pascal
-lines
-
-  90- 140   Pause
- 170- 250   Instructions
- 380- 460   Heading
- 480- 670   Characteristics
- 690- 870   History
-2940-2950   Random
-3710-3740   NewD
-4040-4080   DoesYequalX
-4090-4110   PrintIfNPositive
-4640-4850   TestPartialUnderflow
-
-=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
-
-Below is an "ed script" that splits para.c into 10 files
-of the form part[1-8].c, subs.c, and msgs.c, plus a header
-file, paranoia.h, that these files require.
-
-r paranoia.c
-$
-?SPLIT
-+,$w msgs.c
- .,$d
-?SPLIT
- .d
-+d
--,$w subs.c
--,$d
-?part8
-+d
-?include
- .,$w part8.c
- .,$d
--d
-?part7
-+d
-?include
- .,$w part7.c
- .,$d
--d
-?part6
-+d
-?include
- .,$w part6.c
- .,$d
--d
-?part5
-+d
-?include
- .,$w part5.c
- .,$d
--d
-?part4
-+d
-?include
- .,$w part4.c
- .,$d
--d
-?part3
-+d
-?include
- .,$w part3.c
- .,$d
--d
-?part2
-+d
-?include
- .,$w part2.c
- .,$d
-?SPLIT
- .d
-1,/^#include/-1d
-1,$w part1.c
-/Computed constants/,$d
-1,$s/^int/extern &/
-1,$s/^FLOAT/extern &/
-1,$s/^char/extern &/
-1,$s! = .*!;!
-/^Guard/,/^Round/s/^/extern /
-/^jmp_buf/s/^/extern /
-/^Sig_type/s/^/extern /
-s/$/\
-extern void sigfpe();/
-w paranoia.h
-q
-
-*/
-
-#include <stdio.h>
-#ifndef NOSIGNAL
-#include <signal.h>
-#endif
-#include <setjmp.h>
-
-extern double fabs(), floor(), log(), pow(), sqrt();
-
-#ifdef Single
-#define FLOAT float
-#define FABS(x) (float)fabs((double)(x))
-#define FLOOR(x) (float)floor((double)(x))
-#define LOG(x) (float)log((double)(x))
-#define POW(x,y) (float)pow((double)(x),(double)(y))
-#define SQRT(x) (float)sqrt((double)(x))
-#else
-#define FLOAT double
-#define FABS(x) fabs(x)
-#define FLOOR(x) floor(x)
-#define LOG(x) log(x)
-#define POW(x,y) pow(x,y)
-#define SQRT(x) sqrt(x)
-#endif
-
-jmp_buf ovfl_buf;
-typedef void (*Sig_type)();
-Sig_type sigsave;
-
-#define KEYBOARD 0
-
-FLOAT Radix, BInvrse, RadixD2, BMinusU2;
-FLOAT Sign(), Random();
-
-/*Small floating point constants.*/
-FLOAT Zero = 0.0;
-FLOAT Half = 0.5;
-FLOAT One = 1.0;
-FLOAT Two = 2.0;
-FLOAT Three = 3.0;
-FLOAT Four = 4.0;
-FLOAT Five = 5.0;
-FLOAT Eight = 8.0;
-FLOAT Nine = 9.0;
-FLOAT TwentySeven = 27.0;
-FLOAT ThirtyTwo = 32.0;
-FLOAT TwoForty = 240.0;
-FLOAT MinusOne = -1.0;
-FLOAT OneAndHalf = 1.5;
-/*Integer constants*/
-int NoTrials = 20; /*Number of tests for commutativity. */
-#define False 0
-#define True 1
-
-/* Definitions for declared types
-       Guard == (Yes, No);
-       Rounding == (Chopped, Rounded, Other);
-       Message == packed array [1..40] of char;
-       Class == (Flaw, Defect, Serious, Failure);
-         */
-#define Yes 1
-#define No  0
-#define Chopped 2
-#define Rounded 1
-#define Other   0
-#define Flaw    3
-#define Defect  2
-#define Serious 1
-#define Failure 0
-typedef int Guard, Rounding, Class;
-typedef char Message;
-
-/* Declarations of Variables */
-int Indx;
-char ch[8];
-FLOAT AInvrse, A1;
-FLOAT C, CInvrse;
-FLOAT D, FourD;
-FLOAT E0, E1, Exp2, E3, MinSqEr;
-FLOAT SqEr, MaxSqEr, E9;
-FLOAT Third;
-FLOAT F6, F9;
-FLOAT H, HInvrse;
-int I;
-FLOAT StickyBit, J;
-FLOAT MyZero;
-FLOAT Precision;
-FLOAT Q, Q9;
-FLOAT R, Random9;
-FLOAT T, Underflow, S;
-FLOAT OneUlp, UfThold, U1, U2;
-FLOAT V, V0, V9;
-FLOAT W;
-FLOAT X, X1, X2, X8, Random1;
-FLOAT Y, Y1, Y2, Random2;
-FLOAT Z, PseudoZero, Z1, Z2, Z9;
-int ErrCnt[4];
-int fpecount;
-int Milestone;
-int PageNo;
-int M, N, N1;
-Guard GMult, GDiv, GAddSub;
-Rounding RMult, RDiv, RAddSub, RSqrt;
-int Break, Done, NotMonot, Monot, Anomaly, IEEE,
-               SqRWrng, UfNGrad;
-/* Computed constants. */
-/*U1  gap below 1.0, i.e, 1.0-U1 is next number below 1.0 */
-/*U2  gap above 1.0, i.e, 1.0+U2 is next number above 1.0 */
-
-/* floating point exception receiver */
- void
-sigfpe(i)
-{
-       fpecount++;
-       printf("\n* * * FLOATING-POINT ERROR * * *\n");
-       fflush(stdout);
-       if (sigsave) {
-#ifndef NOSIGNAL
-               signal(SIGFPE, sigsave);
-#endif
-               sigsave = 0;
-               longjmp(ovfl_buf, 1);
-               }
-       abort();
-}
-
-main()
-{
-#ifdef mc
-       char *out;
-       ieee_flags("set", "precision", "double", &out);
-#endif
-       /* First two assignments use integer right-hand sides. */
-       Zero = 0;
-       One = 1;
-       Two = One + One;
-       Three = Two + One;
-       Four = Three + One;
-       Five = Four + One;
-       Eight = Four + Four;
-       Nine = Three * Three;
-       TwentySeven = Nine * Three;
-       ThirtyTwo = Four * Eight;
-       TwoForty = Four * Five * Three * Four;
-       MinusOne = -One;
-       Half = One / Two;
-       OneAndHalf = One + Half;
-       ErrCnt[Failure] = 0;
-       ErrCnt[Serious] = 0;
-       ErrCnt[Defect] = 0;
-       ErrCnt[Flaw] = 0;
-       PageNo = 1;
-       /*=============================================*/
-       Milestone = 0;
-       /*=============================================*/
-#ifndef NOSIGNAL
-       signal(SIGFPE, sigfpe);
-#endif
-       Instructions();
-       Pause();
-       Heading();
-       Pause();
-       Characteristics();
-       Pause();
-       History();
-       Pause();
-       /*=============================================*/
-       Milestone = 7;
-       /*=============================================*/
-       printf("Program is now RUNNING tests on small integers:\n");
-
-       TstCond (Failure, (Zero + Zero == Zero) && (One - One == Zero)
-                  && (One > Zero) && (One + One == Two),
-                       "0+0 != 0, 1-1 != 0, 1 <= 0, or 1+1 != 2");
-       Z = - Zero;
-       if (Z != 0.0) {
-               ErrCnt[Failure] = ErrCnt[Failure] + 1;
-               printf("Comparison alleges that -0.0 is Non-zero!\n");
-               U1 = 0.001;
-               Radix = 1;
-               TstPtUf();
-               }
-       TstCond (Failure, (Three == Two + One) && (Four == Three + One)
-                  && (Four + Two * (- Two) == Zero)
-                  && (Four - Three - One == Zero),
-                  "3 != 2+1, 4 != 3+1, 4+2*(-2) != 0, or 4-3-1 != 0");
-       TstCond (Failure, (MinusOne == (0 - One))
-                  && (MinusOne + One == Zero ) && (One + MinusOne == Zero)
-                  && (MinusOne + FABS(One) == Zero)
-                  && (MinusOne + MinusOne * MinusOne == Zero),
-                  "-1+1 != 0, (-1)+abs(1) != 0, or -1+(-1)*(-1) != 0");
-       TstCond (Failure, Half + MinusOne + Half == Zero,
-                 "1/2 + (-1) + 1/2 != 0");
-       /*=============================================*/
-       /*SPLIT
-       part2();
-       part3();
-       part4();
-       part5();
-       part6();
-       part7();
-       part8();
-       }
-#include "paranoia.h"
-part2(){
-*/
-       Milestone = 10;
-       /*=============================================*/
-       TstCond (Failure, (Nine == Three * Three)
-                  && (TwentySeven == Nine * Three) && (Eight == Four + Four)
-                  && (ThirtyTwo == Eight * Four)
-                  && (ThirtyTwo - TwentySeven - Four - One == Zero),
-                  "9 != 3*3, 27 != 9*3, 32 != 8*4, or 32-27-4-1 != 0");
-       TstCond (Failure, (Five == Four + One) &&
-                       (TwoForty == Four * Five * Three * Four)
-                  && (TwoForty / Three - Four * Four * Five == Zero)
-                  && ( TwoForty / Four - Five * Three * Four == Zero)
-                  && ( TwoForty / Five - Four * Three * Four == Zero),
-                 "5 != 4+1, 240/3 != 80, 240/4 != 60, or 240/5 != 48");
-       if (ErrCnt[Failure] == 0) {
-               printf("-1, 0, 1/2, 1, 2, 3, 4, 5, 9, 27, 32 & 240 are O.K.\n");
-               printf("\n");
-               }
-       printf("Searching for Radix and Precision.\n");
-       W = One;
-       do  {
-               W = W + W;
-               Y = W + One;
-               Z = Y - W;
-               Y = Z - One;
-               } while (MinusOne + FABS(Y) < Zero);
-       /*.. now W is just big enough that |((W+1)-W)-1| >= 1 ...*/
-       Precision = Zero;
-       Y = One;
-       do  {
-               Radix = W + Y;
-               Y = Y + Y;
-               Radix = Radix - W;
-               } while ( Radix == Zero);
-       if (Radix < Two) Radix = One;
-       printf("Radix = %f .\n", Radix);
-       if (Radix != 1) {
-               W = One;
-               do  {
-                       Precision = Precision + One;
-                       W = W * Radix;
-                       Y = W + One;
-                       } while ((Y - W) == One);
-               }
-       /*... now W == Radix^Precision is barely too big to satisfy (W+1)-W == 1
-                                                     ...*/
-       U1 = One / W;
-       U2 = Radix * U1;
-       printf("Closest relative separation found is U1 = %.7e .\n\n", U1);
-       printf("Recalculating radix and precision\n ");
-
-       /*save old values*/
-       E0 = Radix;
-       E1 = U1;
-       E9 = U2;
-       E3 = Precision;
-
-       X = Four / Three;
-       Third = X - One;
-       F6 = Half - Third;
-       X = F6 + F6;
-       X = FABS(X - Third);
-       if (X < U2) X = U2;
-
-       /*... now X = (unknown no.) ulps of 1+...*/
-       do  {
-               U2 = X;
-               Y = Half * U2 + ThirtyTwo * U2 * U2;
-               Y = One + Y;
-               X = Y - One;
-               } while ( ! ((U2 <= X) || (X <= Zero)));
-
-       /*... now U2 == 1 ulp of 1 + ... */
-       X = Two / Three;
-       F6 = X - Half;
-       Third = F6 + F6;
-       X = Third - Half;
-       X = FABS(X + F6);
-       if (X < U1) X = U1;
-
-       /*... now  X == (unknown no.) ulps of 1 -... */
-       do  {
-               U1 = X;
-               Y = Half * U1 + ThirtyTwo * U1 * U1;
-               Y = Half - Y;
-               X = Half + Y;
-               Y = Half - X;
-               X = Half + Y;
-               } while ( ! ((U1 <= X) || (X <= Zero)));
-       /*... now U1 == 1 ulp of 1 - ... */
-       if (U1 == E1) printf("confirms closest relative separation U1 .\n");
-       else printf("gets better closest relative separation U1 = %.7e .\n", U1);
-       W = One / U1;
-       F9 = (Half - U1) + Half;
-       Radix = FLOOR(0.01 + U2 / U1);
-       if (Radix == E0) printf("Radix confirmed.\n");
-       else printf("MYSTERY: recalculated Radix = %.7e .\n", Radix);
-       TstCond (Defect, Radix <= Eight + Eight,
-                  "Radix is too big: roundoff problems");
-       TstCond (Flaw, (Radix == Two) || (Radix == 10)
-                  || (Radix == One), "Radix is not as good as 2 or 10");
-       /*=============================================*/
-       Milestone = 20;
-       /*=============================================*/
-       TstCond (Failure, F9 - Half < Half,
-                  "(1-U1)-1/2 < 1/2 is FALSE, prog. fails?");
-       X = F9;
-       I = 1;
-       Y = X - Half;
-       Z = Y - Half;
-       TstCond (Failure, (X != One)
-                  || (Z == Zero), "Comparison is fuzzy,X=1 but X-1/2-1/2 != 0");
-       X = One + U2;
-       I = 0;
-       /*=============================================*/
-       Milestone = 25;
-       /*=============================================*/
-       /*... BMinusU2 = nextafter(Radix, 0) */
-       BMinusU2 = Radix - One;
-       BMinusU2 = (BMinusU2 - U2) + One;
-       /* Purify Integers */
-       if (Radix != One)  {
-               X = - TwoForty * LOG(U1) / LOG(Radix);
-               Y = FLOOR(Half + X);
-               if (FABS(X - Y) * Four < One) X = Y;
-               Precision = X / TwoForty;
-               Y = FLOOR(Half + Precision);
-               if (FABS(Precision - Y) * TwoForty < Half) Precision = Y;
-               }
-       if ((Precision != FLOOR(Precision)) || (Radix == One)) {
-               printf("Precision cannot be characterized by an Integer number\n");
-               printf("of significant digits but, by itself, this is a minor flaw.\n");
-               }
-       if (Radix == One)
-               printf("logarithmic encoding has precision characterized solely by U1.\n");
-       else printf("The number of significant digits of the Radix is %f .\n",
-                       Precision);
-       TstCond (Serious, U2 * Nine * Nine * TwoForty < One,
-                  "Precision worse than 5 decimal figures  ");
-       /*=============================================*/
-       Milestone = 30;
-       /*=============================================*/
-       /* Test for extra-precise subepressions */
-       X = FABS(((Four / Three - One) - One / Four) * Three - One / Four);
-       do  {
-               Z2 = X;
-               X = (One + (Half * Z2 + ThirtyTwo * Z2 * Z2)) - One;
-               } while ( ! ((Z2 <= X) || (X <= Zero)));
-       X = Y = Z = FABS((Three / Four - Two / Three) * Three - One / Four);
-       do  {
-               Z1 = Z;
-               Z = (One / Two - ((One / Two - (Half * Z1 + ThirtyTwo * Z1 * Z1))
-                       + One / Two)) + One / Two;
-               } while ( ! ((Z1 <= Z) || (Z <= Zero)));
-       do  {
-               do  {
-                       Y1 = Y;
-                       Y = (Half - ((Half - (Half * Y1 + ThirtyTwo * Y1 * Y1)) + Half
-                               )) + Half;
-                       } while ( ! ((Y1 <= Y) || (Y <= Zero)));
-               X1 = X;
-               X = ((Half * X1 + ThirtyTwo * X1 * X1) - F9) + F9;
-               } while ( ! ((X1 <= X) || (X <= Zero)));
-       if ((X1 != Y1) || (X1 != Z1)) {
-               BadCond(Serious, "Disagreements among the values X1, Y1, Z1,\n");
-               printf("respectively  %.7e,  %.7e,  %.7e,\n", X1, Y1, Z1);
-               printf("are symptoms of inconsistencies introduced\n");
-               printf("by extra-precise evaluation of arithmetic subexpressions.\n");
-               notify("Possibly some part of this");
-               if ((X1 == U1) || (Y1 == U1) || (Z1 == U1))  printf(
-                       "That feature is not tested further by this program.\n") ;
-               }
-       else  {
-               if ((Z1 != U1) || (Z2 != U2)) {
-                       if ((Z1 >= U1) || (Z2 >= U2)) {
-                               BadCond(Failure, "");
-                               notify("Precision");
-                               printf("\tU1 = %.7e, Z1 - U1 = %.7e\n",U1,Z1-U1);
-                               printf("\tU2 = %.7e, Z2 - U2 = %.7e\n",U2,Z2-U2);
-                               }
-                       else {
-                               if ((Z1 <= Zero) || (Z2 <= Zero)) {
-                                       printf("Because of unusual Radix = %f", Radix);
-                                       printf(", or exact rational arithmetic a result\n");
-                                       printf("Z1 = %.7e, or Z2 = %.7e ", Z1, Z2);
-                                       notify("of an\nextra-precision");
-                                       }
-                               if (Z1 != Z2 || Z1 > Zero) {
-                                       X = Z1 / U1;
-                                       Y = Z2 / U2;
-                                       if (Y > X) X = Y;
-                                       Q = - LOG(X);
-                                       printf("Some subexpressions appear to be calculated extra\n");
-                                       printf("precisely with about %g extra B-digits, i.e.\n",
-                                               (Q / LOG(Radix)));
-                                       printf("roughly %g extra significant decimals.\n",
-                                               Q / LOG(10.));
-                                       }
-                               printf("That feature is not tested further by this program.\n");
-                               }
-                       }
-               }
-       Pause();
-       /*=============================================*/
-       /*SPLIT
-       }
-#include "paranoia.h"
-part3(){
-*/
-       Milestone = 35;
-       /*=============================================*/
-       if (Radix >= Two) {
-               X = W / (Radix * Radix);
-               Y = X + One;
-               Z = Y - X;
-               T = Z + U2;
-               X = T - Z;
-               TstCond (Failure, X == U2,
-                       "Subtraction is not normalized X=Y,X+Z != Y+Z!");
-               if (X == U2) printf(
-                       "Subtraction appears to be normalized, as it should be.");
-               }
-       printf("\nChecking for guard digit in *, /, and -.\n");
-       Y = F9 * One;
-       Z = One * F9;
-       X = F9 - Half;
-       Y = (Y - Half) - X;
-       Z = (Z - Half) - X;
-       X = One + U2;
-       T = X * Radix;
-       R = Radix * X;
-       X = T - Radix;
-       X = X - Radix * U2;
-       T = R - Radix;
-       T = T - Radix * U2;
-       X = X * (Radix - One);
-       T = T * (Radix - One);
-       if ((X == Zero) && (Y == Zero) && (Z == Zero) && (T == Zero)) GMult = Yes;
-       else {
-               GMult = No;
-               TstCond (Serious, False,
-                       "* lacks a Guard Digit, so 1*X != X");
-               }
-       Z = Radix * U2;
-       X = One + Z;
-       Y = FABS((X + Z) - X * X) - U2;
-       X = One - U2;
-       Z = FABS((X - U2) - X * X) - U1;
-       TstCond (Failure, (Y <= Zero)
-                  && (Z <= Zero), "* gets too many final digits wrong.\n");
-       Y = One - U2;
-       X = One + U2;
-       Z = One / Y;
-       Y = Z - X;
-       X = One / Three;
-       Z = Three / Nine;
-       X = X - Z;
-       T = Nine / TwentySeven;
-       Z = Z - T;
-       TstCond(Defect, X == Zero && Y == Zero && Z == Zero,
-               "Division lacks a Guard Digit, so error can exceed 1 ulp\nor  1/3  and  3/9  and  9/27 may disagree");
-       Y = F9 / One;
-       X = F9 - Half;
-       Y = (Y - Half) - X;
-       X = One + U2;
-       T = X / One;
-       X = T - X;
-       if ((X == Zero) && (Y == Zero) && (Z == Zero)) GDiv = Yes;
-       else {
-               GDiv = No;
-               TstCond (Serious, False,
-                       "Division lacks a Guard Digit, so X/1 != X");
-               }
-       X = One / (One + U2);
-       Y = X - Half - Half;
-       TstCond (Serious, Y < Zero,
-                  "Computed value of 1/1.000..1 >= 1");
-       X = One - U2;
-       Y = One + Radix * U2;
-       Z = X * Radix;
-       T = Y * Radix;
-       R = Z / Radix;
-       StickyBit = T / Radix;
-       X = R - X;
-       Y = StickyBit - Y;
-       TstCond (Failure, X == Zero && Y == Zero,
-                       "* and/or / gets too many last digits wrong");
-       Y = One - U1;
-       X = One - F9;
-       Y = One - Y;
-       T = Radix - U2;
-       Z = Radix - BMinusU2;
-       T = Radix - T;
-       if ((X == U1) && (Y == U1) && (Z == U2) && (T == U2)) GAddSub = Yes;
-       else {
-               GAddSub = No;
-               TstCond (Serious, False,
-                       "- lacks Guard Digit, so cancellation is obscured");
-               }
-       if (F9 != One && F9 - One >= Zero) {
-               BadCond(Serious, "comparison alleges  (1-U1) < 1  although\n");
-               printf("  subtraction yields  (1-U1) - 1 = 0 , thereby vitiating\n");
-               printf("  such precautions against division by zero as\n");
-               printf("  ...  if (X == 1.0) {.....} else {.../(X-1.0)...}\n");
-               }
-       if (GMult == Yes && GDiv == Yes && GAddSub == Yes) printf(
-               "     *, /, and - appear to have guard digits, as they should.\n");
-       /*=============================================*/
-       Milestone = 40;
-       /*=============================================*/
-       Pause();
-       printf("Checking rounding on multiply, divide and add/subtract.\n");
-       RMult = Other;
-       RDiv = Other;
-       RAddSub = Other;
-       RadixD2 = Radix / Two;
-       A1 = Two;
-       Done = False;
-       do  {
-               AInvrse = Radix;
-               do  {
-                       X = AInvrse;
-                       AInvrse = AInvrse / A1;
-                       } while ( ! (FLOOR(AInvrse) != AInvrse));
-               Done = (X == One) || (A1 > Three);
-               if (! Done) A1 = Nine + One;
-               } while ( ! (Done));
-       if (X == One) A1 = Radix;
-       AInvrse = One / A1;
-       X = A1;
-       Y = AInvrse;
-       Done = False;
-       do  {
-               Z = X * Y - Half;
-               TstCond (Failure, Z == Half,
-                       "X * (1/X) differs from 1");
-               Done = X == Radix;
-               X = Radix;
-               Y = One / X;
-               } while ( ! (Done));
-       Y2 = One + U2;
-       Y1 = One - U2;
-       X = OneAndHalf - U2;
-       Y = OneAndHalf + U2;
-       Z = (X - U2) * Y2;
-       T = Y * Y1;
-       Z = Z - X;
-       T = T - X;
-       X = X * Y2;
-       Y = (Y + U2) * Y1;
-       X = X - OneAndHalf;
-       Y = Y - OneAndHalf;
-       if ((X == Zero) && (Y == Zero) && (Z == Zero) && (T <= Zero)) {
-               X = (OneAndHalf + U2) * Y2;
-               Y = OneAndHalf - U2 - U2;
-               Z = OneAndHalf + U2 + U2;
-               T = (OneAndHalf - U2) * Y1;
-               X = X - (Z + U2);
-               StickyBit = Y * Y1;
-               S = Z * Y2;
-               T = T - Y;
-               Y = (U2 - Y) + StickyBit;
-               Z = S - (Z + U2 + U2);
-               StickyBit = (Y2 + U2) * Y1;
-               Y1 = Y2 * Y1;
-               StickyBit = StickyBit - Y2;
-               Y1 = Y1 - Half;
-               if ((X == Zero) && (Y == Zero) && (Z == Zero) && (T == Zero)
-                       && ( StickyBit == Zero) && (Y1 == Half)) {
-                       RMult = Rounded;
-                       printf("Multiplication appears to round correctly.\n");
-                       }
-               else    if ((X + U2 == Zero) && (Y < Zero) && (Z + U2 == Zero)
-                               && (T < Zero) && (StickyBit + U2 == Zero)
-                               && (Y1 < Half)) {
-                               RMult = Chopped;
-                               printf("Multiplication appears to chop.\n");
-                               }
-                       else printf("* is neither chopped nor correctly rounded.\n");
-               if ((RMult == Rounded) && (GMult == No)) notify("Multiplication");
-               }
-       else printf("* is neither chopped nor correctly rounded.\n");
-       /*=============================================*/
-       Milestone = 45;
-       /*=============================================*/
-       Y2 = One + U2;
-       Y1 = One - U2;
-       Z = OneAndHalf + U2 + U2;
-       X = Z / Y2;
-       T = OneAndHalf - U2 - U2;
-       Y = (T - U2) / Y1;
-       Z = (Z + U2) / Y2;
-       X = X - OneAndHalf;
-       Y = Y - T;
-       T = T / Y1;
-       Z = Z - (OneAndHalf + U2);
-       T = (U2 - OneAndHalf) + T;
-       if (! ((X > Zero) || (Y > Zero) || (Z > Zero) || (T > Zero))) {
-               X = OneAndHalf / Y2;
-               Y = OneAndHalf - U2;
-               Z = OneAndHalf + U2;
-               X = X - Y;
-               T = OneAndHalf / Y1;
-               Y = Y / Y1;
-               T = T - (Z + U2);
-               Y = Y - Z;
-               Z = Z / Y2;
-               Y1 = (Y2 + U2) / Y2;
-               Z = Z - OneAndHalf;
-               Y2 = Y1 - Y2;
-               Y1 = (F9 - U1) / F9;
-               if ((X == Zero) && (Y == Zero) && (Z == Zero) && (T == Zero)
-                       && (Y2 == Zero) && (Y2 == Zero)
-                       && (Y1 - Half == F9 - Half )) {
-                       RDiv = Rounded;
-                       printf("Division appears to round correctly.\n");
-                       if (GDiv == No) notify("Division");
-                       }
-               else if ((X < Zero) && (Y < Zero) && (Z < Zero) && (T < Zero)
-                       && (Y2 < Zero) && (Y1 - Half < F9 - Half)) {
-                       RDiv = Chopped;
-                       printf("Division appears to chop.\n");
-                       }
-               }
-       if (RDiv == Other) printf("/ is neither chopped nor correctly rounded.\n");
-       BInvrse = One / Radix;
-       TstCond (Failure, (BInvrse * Radix - Half == Half),
-                  "Radix * ( 1 / Radix ) differs from 1");
-       /*=============================================*/
-       /*SPLIT
-       }
-#include "paranoia.h"
-part4(){
-*/
-       Milestone = 50;
-       /*=============================================*/
-       TstCond (Failure, ((F9 + U1) - Half == Half)
-                  && ((BMinusU2 + U2 ) - One == Radix - One),
-                  "Incomplete carry-propagation in Addition");
-       X = One - U1 * U1;
-       Y = One + U2 * (One - U2);
-       Z = F9 - Half;
-       X = (X - Half) - Z;
-       Y = Y - One;
-       if ((X == Zero) && (Y == Zero)) {
-               RAddSub = Chopped;
-               printf("Add/Subtract appears to be chopped.\n");
-               }
-       if (GAddSub == Yes) {
-               X = (Half + U2) * U2;
-               Y = (Half - U2) * U2;
-               X = One + X;
-               Y = One + Y;
-               X = (One + U2) - X;
-               Y = One - Y;
-               if ((X == Zero) && (Y == Zero)) {
-                       X = (Half + U2) * U1;
-                       Y = (Half - U2) * U1;
-                       X = One - X;
-                       Y = One - Y;
-                       X = F9 - X;
-                       Y = One - Y;
-                       if ((X == Zero) && (Y == Zero)) {
-                               RAddSub = Rounded;
-                               printf("Addition/Subtraction appears to round correctly.\n");
-                               if (GAddSub == No) notify("Add/Subtract");
-                               }
-                       else printf("Addition/Subtraction neither rounds nor chops.\n");
-                       }
-               else printf("Addition/Subtraction neither rounds nor chops.\n");
-               }
-       else printf("Addition/Subtraction neither rounds nor chops.\n");
-       S = One;
-       X = One + Half * (One + Half);
-       Y = (One + U2) * Half;
-       Z = X - Y;
-       T = Y - X;
-       StickyBit = Z + T;
-       if (StickyBit != Zero) {
-               S = Zero;
-               BadCond(Flaw, "(X - Y) + (Y - X) is non zero!\n");
-               }
-       StickyBit = Zero;
-       if ((GMult == Yes) && (GDiv == Yes) && (GAddSub == Yes)
-               && (RMult == Rounded) && (RDiv == Rounded)
-               && (RAddSub == Rounded) && (FLOOR(RadixD2) == RadixD2)) {
-               printf("Checking for sticky bit.\n");
-               X = (Half + U1) * U2;
-               Y = Half * U2;
-               Z = One + Y;
-               T = One + X;
-               if ((Z - One <= Zero) && (T - One >= U2)) {
-                       Z = T + Y;
-                       Y = Z - X;
-                       if ((Z - T >= U2) && (Y - T == Zero)) {
-                               X = (Half + U1) * U1;
-                               Y = Half * U1;
-                               Z = One - Y;
-                               T = One - X;
-                               if ((Z - One == Zero) && (T - F9 == Zero)) {
-                                       Z = (Half - U1) * U1;
-                                       T = F9 - Z;
-                                       Q = F9 - Y;
-                                       if ((T - F9 == Zero) && (F9 - U1 - Q == Zero)) {
-                                               Z = (One + U2) * OneAndHalf;
-                                               T = (OneAndHalf + U2) - Z + U2;
-                                               X = One + Half / Radix;
-                                               Y = One + Radix * U2;
-                                               Z = X * Y;
-                                               if (T == Zero && X + Radix * U2 - Z == Zero) {
-                                                       if (Radix != Two) {
-                                                               X = Two + U2;
-                                                               Y = X / Two;
-                                                               if ((Y - One == Zero)) StickyBit = S;
-                                                               }
-                                                       else StickyBit = S;
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-       if (StickyBit == One) printf("Sticky bit apparently used correctly.\n");
-       else printf("Sticky bit used incorrectly or not at all.\n");
-       TstCond (Flaw, !(GMult == No || GDiv == No || GAddSub == No ||
-                       RMult == Other || RDiv == Other || RAddSub == Other),
-               "lack(s) of guard digits or failure(s) to correctly round or chop\n(noted above) count as one flaw in the final tally below");
-       /*=============================================*/
-       Milestone = 60;
-       /*=============================================*/
-       printf("\n");
-       printf("Does Multiplication commute?  ");
-       printf("Testing on %d random pairs.\n", NoTrials);
-       Random9 = SQRT(3.0);
-       Random1 = Third;
-       I = 1;
-       do  {
-               X = Random();
-               Y = Random();
-               Z9 = Y * X;
-               Z = X * Y;
-               Z9 = Z - Z9;
-               I = I + 1;
-               } while ( ! ((I > NoTrials) || (Z9 != Zero)));
-       if (I == NoTrials) {
-               Random1 = One + Half / Three;
-               Random2 = (U2 + U1) + One;
-               Z = Random1 * Random2;
-               Y = Random2 * Random1;
-               Z9 = (One + Half / Three) * ((U2 + U1) + One) - (One + Half /
-                       Three) * ((U2 + U1) + One);
-               }
-       if (! ((I == NoTrials) || (Z9 == Zero)))
-               BadCond(Defect, "X * Y == Y * X trial fails.\n");
-       else printf("     No failures found in %d integer pairs.\n", NoTrials);
-       /*=============================================*/
-       Milestone = 70;
-       /*=============================================*/
-       printf("\nRunning test of square root(x).\n");
-       TstCond (Failure, (Zero == SQRT(Zero))
-                  && (- Zero == SQRT(- Zero))
-                  && (One == SQRT(One)), "Square root of 0.0, -0.0 or 1.0 wrong");
-       MinSqEr = Zero;
-       MaxSqEr = Zero;
-       J = Zero;
-       X = Radix;
-       OneUlp = U2;
-       SqXMinX (Serious);
-       X = BInvrse;
-       OneUlp = BInvrse * U1;
-       SqXMinX (Serious);
-       X = U1;
-       OneUlp = U1 * U1;
-       SqXMinX (Serious);
-       if (J != Zero) Pause();
-       printf("Testing if sqrt(X * X) == X for %d Integers X.\n", NoTrials);
-       J = Zero;
-       X = Two;
-       Y = Radix;
-       if ((Radix != One)) do  {
-               X = Y;
-               Y = Radix * Y;
-               } while ( ! ((Y - X >= NoTrials)));
-       OneUlp = X * U2;
-       I = 1;
-       while (I <= NoTrials) {
-               X = X + One;
-               SqXMinX (Defect);
-               if (J > Zero) break;
-               I = I + 1;
-               }
-       printf("Test for sqrt monotonicity.\n");
-       I = - 1;
-       X = BMinusU2;
-       Y = Radix;
-       Z = Radix + Radix * U2;
-       NotMonot = False;
-       Monot = False;
-       while ( ! (NotMonot || Monot)) {
-               I = I + 1;
-               X = SQRT(X);
-               Q = SQRT(Y);
-               Z = SQRT(Z);
-               if ((X > Q) || (Q > Z)) NotMonot = True;
-               else {
-                       Q = FLOOR(Q + Half);
-                       if ((I > 0) || (Radix == Q * Q)) Monot = True;
-                       else if (I > 0) {
-                       if (I > 1) Monot = True;
-                       else {
-                               Y = Y * BInvrse;
-                               X = Y - U1;
-                               Z = Y + U1;
-                               }
-                       }
-                       else {
-                               Y = Q;
-                               X = Y - U2;
-                               Z = Y + U2;
-                               }
-                       }
-               }
-       if (Monot) printf("sqrt has passed a test for Monotonicity.\n");
-       else {
-               BadCond(Defect, "");
-               printf("sqrt(X) is non-monotonic for X near %.7e .\n", Y);
-               }
-       /*=============================================*/
-       /*SPLIT
-       }
-#include "paranoia.h"
-part5(){
-*/
-       Milestone = 80;
-       /*=============================================*/
-       MinSqEr = MinSqEr + Half;
-       MaxSqEr = MaxSqEr - Half;
-       Y = (SQRT(One + U2) - One) / U2;
-       SqEr = (Y - One) + U2 / Eight;
-       if (SqEr > MaxSqEr) MaxSqEr = SqEr;
-       SqEr = Y + U2 / Eight;
-       if (SqEr < MinSqEr) MinSqEr = SqEr;
-       Y = ((SQRT(F9) - U2) - (One - U2)) / U1;
-       SqEr = Y + U1 / Eight;
-       if (SqEr > MaxSqEr) MaxSqEr = SqEr;
-       SqEr = (Y + One) + U1 / Eight;
-       if (SqEr < MinSqEr) MinSqEr = SqEr;
-       OneUlp = U2;
-       X = OneUlp;
-       for( Indx = 1; Indx <= 3; ++Indx) {
-               Y = SQRT((X + U1 + X) + F9);
-               Y = ((Y - U2) - ((One - U2) + X)) / OneUlp;
-               Z = ((U1 - X) + F9) * Half * X * X / OneUlp;
-               SqEr = (Y + Half) + Z;
-               if (SqEr < MinSqEr) MinSqEr = SqEr;
-               SqEr = (Y - Half) + Z;
-               if (SqEr > MaxSqEr) MaxSqEr = SqEr;
-               if (((Indx == 1) || (Indx == 3)))
-                       X = OneUlp * Sign (X) * FLOOR(Eight / (Nine * SQRT(OneUlp)));
-               else {
-                       OneUlp = U1;
-                       X = - OneUlp;
-                       }
-               }
-       /*=============================================*/
-       Milestone = 85;
-       /*=============================================*/
-       SqRWrng = False;
-       Anomaly = False;
-       RSqrt = Other; /* ~dgh */
-       if (Radix != One) {
-               printf("Testing whether sqrt is rounded or chopped.\n");
-               D = FLOOR(Half + POW(Radix, One + Precision - FLOOR(Precision)));
-       /* ... == Radix^(1 + fract) if (Precision == Integer + fract. */
-               X = D / Radix;
-               Y = D / A1;
-               if ((X != FLOOR(X)) || (Y != FLOOR(Y))) {
-                       Anomaly = True;
-                       }
-               else {
-                       X = Zero;
-                       Z2 = X;
-                       Y = One;
-                       Y2 = Y;
-                       Z1 = Radix - One;
-                       FourD = Four * D;
-                       do  {
-                               if (Y2 > Z2) {
-                                       Q = Radix;
-                                       Y1 = Y;
-                                       do  {
-                                               X1 = FABS(Q + FLOOR(Half - Q / Y1) * Y1);
-                                               Q = Y1;
-                                               Y1 = X1;
-                                               } while ( ! (X1 <= Zero));
-                                       if (Q <= One) {
-                                               Z2 = Y2;
-                                               Z = Y;
-                                               }
-                                       }
-                               Y = Y + Two;
-                               X = X + Eight;
-                               Y2 = Y2 + X;
-                               if (Y2 >= FourD) Y2 = Y2 - FourD;
-                               } while ( ! (Y >= D));
-                       X8 = FourD - Z2;
-                       Q = (X8 + Z * Z) / FourD;
-                       X8 = X8 / Eight;
-                       if (Q != FLOOR(Q)) Anomaly = True;
-                       else {
-                               Break = False;
-                               do  {
-                                       X = Z1 * Z;
-                                       X = X - FLOOR(X / Radix) * Radix;
-                                       if (X == One)
-                                               Break = True;
-                                       else
-                                               Z1 = Z1 - One;
-                                       } while ( ! (Break || (Z1 <= Zero)));
-                               if ((Z1 <= Zero) && (! Break)) Anomaly = True;
-                               else {
-                                       if (Z1 > RadixD2) Z1 = Z1 - Radix;
-                                       do  {
-                                               NewD();
-                                               } while ( ! (U2 * D >= F9));
-                                       if (D * Radix - D != W - D) Anomaly = True;
-                                       else {
-                                               Z2 = D;
-                                               I = 0;
-                                               Y = D + (One + Z) * Half;
-                                               X = D + Z + Q;
-                                               SR3750();
-                                               Y = D + (One - Z) * Half + D;
-                                               X = D - Z + D;
-                                               X = X + Q + X;
-                                               SR3750();
-                                               NewD();
-                                               if (D - Z2 != W - Z2) Anomaly = True;
-                                               else {
-                                                       Y = (D - Z2) + (Z2 + (One - Z) * Half);
-                                                       X = (D - Z2) + (Z2 - Z + Q);
-                                                       SR3750();
-                                                       Y = (One + Z) * Half;
-                                                       X = Q;
-                                                       SR3750();
-                                                       if (I == 0) Anomaly = True;
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               if ((I == 0) || Anomaly) {
-                       BadCond(Failure, "Anomalous arithmetic with Integer < ");
-                       printf("Radix^Precision = %.7e\n", W);
-                       printf(" fails test whether sqrt rounds or chops.\n");
-                       SqRWrng = True;
-                       }
-               }
-       if (! Anomaly) {
-               if (! ((MinSqEr < Zero) || (MaxSqEr > Zero))) {
-                       RSqrt = Rounded;
-                       printf("Square root appears to be correctly rounded.\n");
-                       }
-               else  {
-                       if ((MaxSqEr + U2 > U2 - Half) || (MinSqEr > Half)
-                               || (MinSqEr + Radix < Half)) SqRWrng = True;
-                       else {
-                               RSqrt = Chopped;
-                               printf("Square root appears to be chopped.\n");
-                               }
-                       }
-               }
-       if (SqRWrng) {
-               printf("Square root is neither chopped nor correctly rounded.\n");
-               printf("Observed errors run from %.7e ", MinSqEr - Half);
-               printf("to %.7e ulps.\n", Half + MaxSqEr);
-               TstCond (Serious, MaxSqEr - MinSqEr < Radix * Radix,
-                       "sqrt gets too many last digits wrong");
-               }
-       /*=============================================*/
-       Milestone = 90;
-       /*=============================================*/
-       Pause();
-       printf("Testing powers Z^i for small Integers Z and i.\n");
-       N = 0;
-       /* ... test powers of zero. */
-       I = 0;
-       Z = -Zero;
-       M = 3.0;
-       Break = False;
-       do  {
-               X = One;
-               SR3980();
-               if (I <= 10) {
-                       I = 1023;
-                       SR3980();
-                       }
-               if (Z == MinusOne) Break = True;
-               else {
-                       Z = MinusOne;
-                       PrintIfNPositive();
-                       N = 0;
-                       /* .. if(-1)^N is invalid, replace MinusOne by One. */
-                       I = - 4;
-                       }
-               } while ( ! Break);
-       PrintIfNPositive();
-       N1 = N;
-       N = 0;
-       Z = A1;
-       M = FLOOR(Two * LOG(W) / LOG(A1));
-       Break = False;
-       do  {
-               X = Z;
-               I = 1;
-               SR3980();
-               if (Z == AInvrse) Break = True;
-               else Z = AInvrse;
-               } while ( ! (Break));
-       /*=============================================*/
-               Milestone = 100;
-       /*=============================================*/
-       /*  Powers of Radix have been tested, */
-       /*         next try a few primes     */
-       M = NoTrials;
-       Z = Three;
-       do  {
-               X = Z;
-               I = 1;
-               SR3980();
-               do  {
-                       Z = Z + Two;
-                       } while ( Three * FLOOR(Z / Three) == Z );
-               } while ( Z < Eight * Three );
-       if (N > 0) {
-               printf("Errors like this may invalidate financial calculations\n");
-               printf("\tinvolving interest rates.\n");
-               }
-       PrintIfNPositive();
-       N += N1;
-       if (N == 0) printf("... no discrepancis found.\n");
-       if (N > 0) Pause();
-       else printf("\n");
-       /*=============================================*/
-       /*SPLIT
-       }
-#include "paranoia.h"
-part6(){
-*/
-       Milestone = 110;
-       /*=============================================*/
-       printf("Seeking Underflow thresholds UfThold and E0.\n");
-       D = U1;
-       if (Precision != FLOOR(Precision)) {
-               D = BInvrse;
-               X = Precision;
-               do  {
-                       D = D * BInvrse;
-                       X = X - One;
-                       } while ( X > Zero);
-               }
-       Y = One;
-       Z = D;
-       /* ... D is power of 1/Radix < 1. */
-       do  {
-               C = Y;
-               Y = Z;
-               Z = Y * Y;
-               } while ((Y > Z) && (Z + Z > Z));
-       Y = C;
-       Z = Y * D;
-       do  {
-               C = Y;
-               Y = Z;
-               Z = Y * D;
-               } while ((Y > Z) && (Z + Z > Z));
-       if (Radix < Two) HInvrse = Two;
-       else HInvrse = Radix;
-       H = One / HInvrse;
-       /* ... 1/HInvrse == H == Min(1/Radix, 1/2) */
-       CInvrse = One / C;
-       E0 = C;
-       Z = E0 * H;
-       /* ...1/Radix^(BIG Integer) << 1 << CInvrse == 1/C */
-       do  {
-               Y = E0;
-               E0 = Z;
-               Z = E0 * H;
-               } while ((E0 > Z) && (Z + Z > Z));
-       UfThold = E0;
-       E1 = Zero;
-       Q = Zero;
-       E9 = U2;
-       S = One + E9;
-       D = C * S;
-       if (D <= C) {
-               E9 = Radix * U2;
-               S = One + E9;
-               D = C * S;
-               if (D <= C) {
-                       BadCond(Failure, "multiplication gets too many last digits wrong.\n");
-                       Underflow = E0;
-                       Y1 = Zero;
-                       PseudoZero = Z;
-                       Pause();
-                       }
-               }
-       else {
-               Underflow = D;
-               PseudoZero = Underflow * H;
-               UfThold = Zero;
-               do  {
-                       Y1 = Underflow;
-                       Underflow = PseudoZero;
-                       if (E1 + E1 <= E1) {
-                               Y2 = Underflow * HInvrse;
-                               E1 = FABS(Y1 - Y2);
-                               Q = Y1;
-                               if ((UfThold == Zero) && (Y1 != Y2)) UfThold = Y1;
-                               }
-                       PseudoZero = PseudoZero * H;
-                       } while ((Underflow > PseudoZero)
-                               && (PseudoZero + PseudoZero > PseudoZero));
-               }
-       /* Comment line 4530 .. 4560 */
-       if (PseudoZero != Zero) {
-               printf("\n");
-               Z = PseudoZero;
-       /* ... Test PseudoZero for "phoney- zero" violates */
-       /* ... PseudoZero < Underflow or PseudoZero < PseudoZero + PseudoZero
-                  ... */
-               if (PseudoZero <= Zero) {
-                       BadCond(Failure, "Positive expressions can underflow to an\n");
-                       printf("allegedly negative value\n");
-                       printf("PseudoZero that prints out as: %g .\n", PseudoZero);
-                       X = - PseudoZero;
-                       if (X <= Zero) {
-                               printf("But -PseudoZero, which should be\n");
-                               printf("positive, isn't; it prints out as  %g .\n", X);
-                               }
-                       }
-               else {
-                       BadCond(Flaw, "Underflow can stick at an allegedly positive\n");
-                       printf("value PseudoZero that prints out as %g .\n", PseudoZero);
-                       }
-               TstPtUf();
-               }
-       /*=============================================*/
-       Milestone = 120;
-       /*=============================================*/
-       if (CInvrse * Y > CInvrse * Y1) {
-               S = H * S;
-               E0 = Underflow;
-               }
-       if (! ((E1 == Zero) || (E1 == E0))) {
-               BadCond(Defect, "");
-               if (E1 < E0) {
-                       printf("Products underflow at a higher");
-                       printf(" threshold than differences.\n");
-                       if (PseudoZero == Zero)
-                       E0 = E1;
-                       }
-               else {
-                       printf("Difference underflows at a higher");
-                       printf(" threshold than products.\n");
-                       }
-               }
-       printf("Smallest strictly positive number found is E0 = %g .\n", E0);
-       Z = E0;
-       TstPtUf();
-       Underflow = E0;
-       if (N == 1) Underflow = Y;
-       I = 4;
-       if (E1 == Zero) I = 3;
-       if (UfThold == Zero) I = I - 2;
-       UfNGrad = True;
-       switch (I)  {
-               case    1:
-               UfThold = Underflow;
-               if ((CInvrse * Q) != ((CInvrse * Y) * S)) {
-                       UfThold = Y;
-                       BadCond(Failure, "Either accuracy deteriorates as numbers\n");
-                       printf("approach a threshold = %.17e\n", UfThold);;
-                       printf(" coming down from %.17e\n", C);
-                       printf(" or else multiplication gets too many last digits wrong.\n");
-                       }
-               Pause();
-               break;
-
-               case    2:
-               BadCond(Failure, "Underflow confuses Comparison, which alleges that\n");
-               printf("Q == Y while denying that |Q - Y| == 0; these values\n");
-               printf("print out as Q = %.17e, Y = %.17e .\n", Q, Y2);
-               printf ("|Q - Y| = %.17e .\n" , FABS(Q - Y2));
-               UfThold = Q;
-               break;
-
-               case    3:
-               X = X;
-               break;
-
-               case    4:
-               if ((Q == UfThold) && (E1 == E0)
-                       && (FABS( UfThold - E1 / E9) <= E1)) {
-                       UfNGrad = False;
-                       printf("Underflow is gradual; it incurs Absolute Error =\n");
-                       printf("(roundoff in UfThold) < E0.\n");
-                       Y = E0 * CInvrse;
-                       Y = Y * (OneAndHalf + U2);
-                       X = CInvrse * (One + U2);
-                       Y = Y / X;
-                       IEEE = (Y == E0);
-                       }
-               }
-       if (UfNGrad) {
-               printf("\n");
-               sigsave = sigfpe;
-               if (setjmp(ovfl_buf)) {
-                       printf("Underflow / UfThold failed!\n");
-                       R = H + H;
-                       }
-               else R = SQRT(Underflow / UfThold);
-               sigsave = 0;
-               if (R <= H) {
-                       Z = R * UfThold;
-                       X = Z * (One + R * H * (One + H));
-                       }
-               else {
-                       Z = UfThold;
-                       X = Z * (One + H * H * (One + H));
-                       }
-               if (! ((X == Z) || (X - Z != Zero))) {
-                       BadCond(Flaw, "");
-                       printf("X = %.17e\n\tis not equal to Z = %.17e .\n", X, Z);
-                       Z9 = X - Z;
-                       printf("yet X - Z yields %.17e .\n", Z9);
-                       printf("    Should this NOT signal Underflow, ");
-                       printf("this is a SERIOUS DEFECT\nthat causes ");
-                       printf("confusion when innocent statements like\n");;
-                       printf("    if (X == Z)  ...  else");
-                       printf("  ... (f(X) - f(Z)) / (X - Z) ...\n");
-                       printf("encounter Division by Zero although actually\n");
-                       sigsave = sigfpe;
-                       if (setjmp(ovfl_buf)) printf("X / Z fails!\n");
-                       else printf("X / Z = 1 + %g .\n", (X / Z - Half) - Half);
-                       sigsave = 0;
-                       }
-               }
-       printf("The Underflow threshold is %.17e, %s\n", UfThold,
-                  " below which");
-       printf("calculation may suffer larger Relative error than ");
-       printf("merely roundoff.\n");
-       Y2 = U1 * U1;
-       Y = Y2 * Y2;
-       Y2 = Y * U1;
-       if (Y2 <= UfThold) {
-               if (Y > E0) {
-                       BadCond(Defect, "");
-                       I = 5;
-                       }
-               else {
-                       BadCond(Serious, "");
-                       I = 4;
-                       }
-               printf("Range is too narrow; U1^%d Underflows.\n", I);
-               }
-       /*=============================================*/
-       /*SPLIT
-       }
-#include "paranoia.h"
-part7(){
-*/
-       Milestone = 130;
-       /*=============================================*/
-       Y = - FLOOR(Half - TwoForty * LOG(UfThold) / LOG(HInvrse)) / TwoForty;
-       Y2 = Y + Y;
-       printf("Since underflow occurs below the threshold\n");
-       printf("UfThold = (%.17e) ^ (%.17e)\nonly underflow ", HInvrse, Y);
-       printf("should afflict the expression\n\t(%.17e) ^ (%.17e);\n", HInvrse, Y);
-       V9 = POW(HInvrse, Y2);
-       printf("actually calculating yields: %.17e .\n", V9);
-       if (! ((V9 >= Zero) && (V9 <= (Radix + Radix + E9) * UfThold))) {
-               BadCond(Serious, "this is not between 0 and underflow\n");
-               printf("   threshold = %.17e .\n", UfThold);
-               }
-       else if (! (V9 > UfThold * (One + E9)))
-               printf("This computed value is O.K.\n");
-       else {
-               BadCond(Defect, "this is not between 0 and underflow\n");
-               printf("   threshold = %.17e .\n", UfThold);
-               }
-       /*=============================================*/
-       Milestone = 140;
-       /*=============================================*/
-       printf("\n");
-       /* ...calculate Exp2 == exp(2) == 7.389056099... */
-       X = Zero;
-       I = 2;
-       Y = Two * Three;
-       Q = Zero;
-       N = 0;
-       do  {
-               Z = X;
-               I = I + 1;
-               Y = Y / (I + I);
-               R = Y + Q;
-               X = Z + R;
-               Q = (Z - X) + R;
-               } while(X > Z);
-       Z = (OneAndHalf + One / Eight) + X / (OneAndHalf * ThirtyTwo);
-       X = Z * Z;
-       Exp2 = X * X;
-       X = F9;
-       Y = X - U1;
-       printf("Testing X^((X + 1) / (X - 1)) vs. exp(2) = %.17e as X -> 1.\n",
-               Exp2);
-       for(I = 1;;) {
-               Z = X - BInvrse;
-               Z = (X + One) / (Z - (One - BInvrse));
-               Q = POW(X, Z) - Exp2;
-               if (FABS(Q) > TwoForty * U2) {
-                       N = 1;
-                       V9 = (X - BInvrse) - (One - BInvrse);
-                       BadCond(Defect, "Calculated");
-                       printf(" %.17e for\n", POW(X,Z));
-                       printf("\t(1 + (%.17e) ^ (%.17e);\n", V9, Z);
-                       printf("\tdiffers from correct value by %.17e .\n", Q);
-                       printf("\tThis much error may spoil financial\n");
-                       printf("\tcalculations involving tiny interest rates.\n");
-                       break;
-                       }
-               else {
-                       Z = (Y - X) * Two + Y;
-                       X = Y;
-                       Y = Z;
-                       Z = One + (X - F9)*(X - F9);
-                       if (Z > One && I < NoTrials) I++;
-                       else  {
-                               if (X > One) {
-                                       if (N == 0)
-                                          printf("Accuracy seems adequate.\n");
-                                       break;
-                                       }
-                               else {
-                                       X = One + U2;
-                                       Y = U2 + U2;
-                                       Y += X;
-                                       I = 1;
-                                       }
-                               }
-                       }
-               }
-       /*=============================================*/
-       Milestone = 150;
-       /*=============================================*/
-       printf("Testing powers Z^Q at four nearly extreme values.\n");
-       N = 0;
-       Z = A1;
-       Q = FLOOR(Half - LOG(C) / LOG(A1));
-       Break = False;
-       do  {
-               X = CInvrse;
-               Y = POW(Z, Q);
-               IsYeqX();
-               Q = - Q;
-               X = C;
-               Y = POW(Z, Q);
-               IsYeqX();
-               if (Z < One) Break = True;
-               else Z = AInvrse;
-               } while ( ! (Break));
-       PrintIfNPositive();
-       if (N == 0) printf(" ... no discrepancies found.\n");
-       printf("\n");
-
-       /*=============================================*/
-       Milestone = 160;
-       /*=============================================*/
-       Pause();
-       printf("Searching for Overflow threshold:\n");
-       printf("This may generate an error.\n");
-       Y = - CInvrse;
-       V9 = HInvrse * Y;
-       sigsave = sigfpe;
-       if (setjmp(ovfl_buf)) { I = 0; V9 = Y; goto overflow; }
-       do {
-               V = Y;
-               Y = V9;
-               V9 = HInvrse * Y;
-               } while(V9 < Y);
-       I = 1;
-overflow:
-       sigsave = 0;
-       Z = V9;
-       printf("Can `Z = -Y' overflow?\n");
-       printf("Trying it on Y = %.17e .\n", Y);
-       V9 = - Y;
-       V0 = V9;
-       if (V - Y == V + V0) printf("Seems O.K.\n");
-       else {
-               printf("finds a ");
-               BadCond(Flaw, "-(-Y) differs from Y.\n");
-               }
-       if (Z != Y) {
-               BadCond(Serious, "");
-               printf("overflow past %.17e\n\tshrinks to %.17e .\n", Y, Z);
-               }
-       if (I) {
-               Y = V * (HInvrse * U2 - HInvrse);
-               Z = Y + ((One - HInvrse) * U2) * V;
-               if (Z < V0) Y = Z;
-               if (Y < V0) V = Y;
-               if (V0 - V < V0) V = V0;
-               }
-       else {
-               V = Y * (HInvrse * U2 - HInvrse);
-               V = V + ((One - HInvrse) * U2) * Y;
-               }
-       printf("Overflow threshold is V  = %.17e .\n", V);
-       if (I) printf("Overflow saturates at V0 = %.17e .\n", V0);
-       else printf("There is no saturation value because the system traps on overflow.\n");
-       V9 = V * One;
-       printf("No Overflow should be signaled for V * 1 = %.17e\n", V9);
-       V9 = V / One;
-       printf("                           nor for V / 1 = %.17e .\n", V9);
-       printf("Any overflow signal separating this * from the one\n");
-       printf("above is a DEFECT.\n");
-       /*=============================================*/
-       Milestone = 170;
-       /*=============================================*/
-       if (!(-V < V && -V0 < V0 && -UfThold < V && UfThold < V)) {
-               BadCond(Failure, "Comparisons involving ");
-               printf("+-%g, +-%g\nand +-%g are confused by Overflow.",
-                       V, V0, UfThold);
-               }
-       /*=============================================*/
-       Milestone = 175;
-       /*=============================================*/
-       printf("\n");
-       for(Indx = 1; Indx <= 3; ++Indx) {
-               switch (Indx)  {
-                       case 1: Z = UfThold; break;
-                       case 2: Z = E0; break;
-                       case 3: Z = PseudoZero; break;
-                       }
-               if (Z != Zero) {
-                       V9 = SQRT(Z);
-                       Y = V9 * V9;
-                       if (Y / (One - Radix * E9) < Z
-                          || Y > (One + Radix * E9) * Z) { /* dgh: + E9 --> * E9 */
-                               if (V9 > U1) BadCond(Serious, "");
-                               else BadCond(Defect, "");
-                               printf("Comparison alleges that what prints as Z = %.17e\n", Z);
-                               printf(" is too far from sqrt(Z) ^ 2 = %.17e .\n", Y);
-                               }
-                       }
-               }
-       /*=============================================*/
-       Milestone = 180;
-       /*=============================================*/
-       for(Indx = 1; Indx <= 2; ++Indx) {
-               if (Indx == 1) Z = V;
-               else Z = V0;
-               V9 = SQRT(Z);
-               X = (One - Radix * E9) * V9;
-               V9 = V9 * X;
-               if (((V9 < (One - Two * Radix * E9) * Z) || (V9 > Z))) {
-                       Y = V9;
-                       if (X < W) BadCond(Serious, "");
-                       else BadCond(Defect, "");
-                       printf("Comparison alleges that Z = %17e\n", Z);
-                       printf(" is too far from sqrt(Z) ^ 2 (%.17e) .\n", Y);
-                       }
-               }
-       /*=============================================*/
-       /*SPLIT
-       }
-#include "paranoia.h"
-part8(){
-*/
-       Milestone = 190;
-       /*=============================================*/
-       Pause();
-       X = UfThold * V;
-       Y = Radix * Radix;
-       if (X*Y < One || X > Y) {
-               if (X * Y < U1 || X > Y/U1) BadCond(Defect, "Badly");
-               else BadCond(Flaw, "");
-
-               printf(" unbalanced range; UfThold * V = %.17e\n\t%s\n",
-                       X, "is too far from 1.\n");
-               }
-       /*=============================================*/
-       Milestone = 200;
-       /*=============================================*/
-       for (Indx = 1; Indx <= 5; ++Indx)  {
-               X = F9;
-               switch (Indx)  {
-                       case 2: X = One + U2; break;
-                       case 3: X = V; break;
-                       case 4: X = UfThold; break;
-                       case 5: X = Radix;
-                       }
-               Y = X;
-               sigsave = sigfpe;
-               if (setjmp(ovfl_buf))
-                       printf("  X / X  traps when X = %g\n", X);
-               else {
-                       V9 = (Y / X - Half) - Half;
-                       if (V9 == Zero) continue;
-                       if (V9 == - U1 && Indx < 5) BadCond(Flaw, "");
-                       else BadCond(Serious, "");
-                       printf("  X / X differs from 1 when X = %.17e\n", X);
-                       printf("  instead, X / X - 1/2 - 1/2 = %.17e .\n", V9);
-                       }
-               sigsave = 0;
-               }
-       /*=============================================*/
-       Milestone = 210;
-       /*=============================================*/
-       MyZero = Zero;
-       printf("\n");
-       printf("What message and/or values does Division by Zero produce?\n") ;
-#ifndef NOPAUSE
-       printf("This can interupt your program.  You can ");
-       printf("skip this part if you wish.\n");
-       printf("Do you wish to compute 1 / 0? ");
-       fflush(stdout);
-       read (KEYBOARD, ch, 8);
-       if ((ch[0] == 'Y') || (ch[0] == 'y')) {
-#endif
-               sigsave = sigfpe;
-               printf("    Trying to compute 1 / 0 produces ...");
-               if (!setjmp(ovfl_buf)) printf("  %.7e .\n", One / MyZero);
-               sigsave = 0;
-#ifndef NOPAUSE
-               }
-       else printf("O.K.\n");
-       printf("\nDo you wish to compute 0 / 0? ");
-       fflush(stdout);
-       read (KEYBOARD, ch, 80);
-       if ((ch[0] == 'Y') || (ch[0] == 'y')) {
-#endif
-               sigsave = sigfpe;
-               printf("\n    Trying to compute 0 / 0 produces ...");
-               if (!setjmp(ovfl_buf)) printf("  %.7e .\n", Zero / MyZero);
-               sigsave = 0;
-#ifndef NOPAUSE
-               }
-       else printf("O.K.\n");
-#endif
-       /*=============================================*/
-       Milestone = 220;
-       /*=============================================*/
-       Pause();
-       printf("\n");
-       {
-               static char *msg[] = {
-                       "FAILUREs  encountered =",
-                       "SERIOUS DEFECTs  discovered =",
-                       "DEFECTs  discovered =",
-                       "FLAWs  discovered =" };
-               int i;
-               for(i = 0; i < 4; i++) if (ErrCnt[i])
-                       printf("The number of  %-29s %d.\n",
-                               msg[i], ErrCnt[i]);
-               }
-       printf("\n");
-       if ((ErrCnt[Failure] + ErrCnt[Serious] + ErrCnt[Defect]
-                       + ErrCnt[Flaw]) > 0) {
-               if ((ErrCnt[Failure] + ErrCnt[Serious] + ErrCnt[
-                       Defect] == 0) && (ErrCnt[Flaw] > 0)) {
-                       printf("The arithmetic diagnosed seems ");
-                       printf("Satisfactory though flawed.\n");
-                       }
-               if ((ErrCnt[Failure] + ErrCnt[Serious] == 0)
-                       && ( ErrCnt[Defect] > 0)) {
-                       printf("The arithmetic diagnosed may be Acceptable\n");
-                       printf("despite inconvenient Defects.\n");
-                       }
-               if ((ErrCnt[Failure] + ErrCnt[Serious]) > 0) {
-                       printf("The arithmetic diagnosed has ");
-                       printf("unacceptable Serious Defects.\n");
-                       }
-               if (ErrCnt[Failure] > 0) {
-                       printf("Potentially fatal FAILURE may have spoiled this");
-                       printf(" program's subsequent diagnoses.\n");
-                       }
-               }
-       else {
-               printf("No failures, defects nor flaws have been discovered.\n");
-               if (! ((RMult == Rounded) && (RDiv == Rounded)
-                       && (RAddSub == Rounded) && (RSqrt == Rounded)))
-                       printf("The arithmetic diagnosed seems Satisfactory.\n");
-               else {
-                       if (StickyBit >= One &&
-                               (Radix - Two) * (Radix - Nine - One) == Zero) {
-                               printf("Rounding appears to conform to ");
-                               printf("the proposed IEEE standard P");
-                               if ((Radix == Two) &&
-                                        ((Precision - Four * Three * Two) *
-                                         ( Precision - TwentySeven -
-                                          TwentySeven + One) == Zero))
-                                       printf("754");
-                               else printf("854");
-                               if (IEEE) printf(".\n");
-                               else {
-                                       printf(",\nexcept for possibly Double Rounding");
-                                       printf(" during Gradual Underflow.\n");
-                                       }
-                               }
-                       printf("The arithmetic diagnosed appears to be Excellent!\n");
-                       }
-               }
-       if (fpecount)
-               printf("\nA total of %d floating point exceptions were registered.\n",
-                       fpecount);
-       printf("END OF TEST.\n");
-       return 0;
-       }
-
-/*SPLIT subs.c
-#include "paranoia.h"
-*/
-
-/* Sign */
-
-FLOAT Sign (X)
-FLOAT X;
-{ return X >= 0. ? 1.0 : -1.0; }
-
-/* Pause */
-
-Pause()
-{
-#ifndef NOPAUSE
-       char ch[8];
-
-       printf("\nTo continue, press RETURN");
-       fflush(stdout);
-       read(KEYBOARD, ch, 8);
-#endif
-       printf("\nDiagnosis resumes after milestone Number %d", Milestone);
-       printf("          Page: %d\n\n", PageNo);
-       ++Milestone;
-       ++PageNo;
-       }
-
- /* TstCond */
-
-TstCond (K, Valid, T)
-int K, Valid;
-char *T;
-{ if (! Valid) { BadCond(K,T); printf(".\n"); } }
-
-BadCond(K, T)
-int K;
-char *T;
-{
-       static char *msg[] = { "FAILURE", "SERIOUS DEFECT", "DEFECT", "FLAW" };
-
-       ErrCnt [K] = ErrCnt [K] + 1;
-       printf("%s:  %s", msg[K], T);
-       }
-
-/* Random */
-/*  Random computes
-     X = (Random1 + Random9)^5
-     Random1 = X - FLOOR(X) + 0.000005 * X;
-   and returns the new value of Random1
-*/
-
-FLOAT Random()
-{
-       FLOAT X, Y;
-
-       X = Random1 + Random9;
-       Y = X * X;
-       Y = Y * Y;
-       X = X * Y;
-       Y = X - FLOOR(X);
-       Random1 = Y + X * 0.000005;
-       return(Random1);
-       }
-
-/* SqXMinX */
-
-SqXMinX (ErrKind)
-int ErrKind;
-{
-       FLOAT XA, XB;
-
-       XB = X * BInvrse;
-       XA = X - XB;
-       SqEr = ((SQRT(X * X) - XB) - XA) / OneUlp;
-       if (SqEr != Zero) {
-               if (SqEr < MinSqEr) MinSqEr = SqEr;
-               if (SqEr > MaxSqEr) MaxSqEr = SqEr;
-               J = J + 1.0;
-               BadCond(ErrKind, "\n");
-               printf("sqrt( %.17e) - %.17e  = %.17e\n", X * X, X, OneUlp * SqEr);
-               printf("\tinstead of correct value 0 .\n");
-               }
-       }
-
-/* NewD */
-
-NewD()
-{
-       X = Z1 * Q;
-       X = FLOOR(Half - X / Radix) * Radix + X;
-       Q = (Q - X * Z) / Radix + X * X * (D / Radix);
-       Z = Z - Two * X * D;
-       if (Z <= Zero) {
-               Z = - Z;
-               Z1 = - Z1;
-               }
-       D = Radix * D;
-       }
-
-/* SR3750 */
-
-SR3750()
-{
-       if (! ((X - Radix < Z2 - Radix) || (X - Z2 > W - Z2))) {
-               I = I + 1;
-               X2 = SQRT(X * D);
-               Y2 = (X2 - Z2) - (Y - Z2);
-               X2 = X8 / (Y - Half);
-               X2 = X2 - Half * X2 * X2;
-               SqEr = (Y2 + Half) + (Half - X2);
-               if (SqEr < MinSqEr) MinSqEr = SqEr;
-               SqEr = Y2 - X2;
-               if (SqEr > MaxSqEr) MaxSqEr = SqEr;
-               }
-       }
-
-/* IsYeqX */
-
-IsYeqX()
-{
-       if (Y != X) {
-               if (N <= 0) {
-                       if (Z == Zero && Q <= Zero)
-                               printf("WARNING:  computing\n");
-                       else BadCond(Defect, "computing\n");
-                       printf("\t(%.17e) ^ (%.17e)\n", Z, Q);
-                       printf("\tyielded %.17e;\n", Y);
-                       printf("\twhich compared unequal to correct %.17e ;\n",
-                               X);
-                       printf("\t\tthey differ by %.17e .\n", Y - X);
-                       }
-               N = N + 1; /* ... count discrepancies. */
-               }
-       }
-
-/* SR3980 */
-
-SR3980()
-{
-       do {
-               Q = (FLOAT) I;
-               Y = POW(Z, Q);
-               IsYeqX();
-               if (++I > M) break;
-               X = Z * X;
-               } while ( X < W );
-       }
-
-/* PrintIfNPositive */
-
-PrintIfNPositive()
-{
-       if (N > 0) printf("Similar discrepancies have occurred %d times.\n", N);
-       }
-
-/* TstPtUf */
-
-TstPtUf()
-{
-       N = 0;
-       if (Z != Zero) {
-               printf("Since comparison denies Z = 0, evaluating ");
-               printf("(Z + Z) / Z should be safe.\n");
-               sigsave = sigfpe;
-               if (setjmp(ovfl_buf)) goto very_serious;
-               Q9 = (Z + Z) / Z;
-               printf("What the machine gets for (Z + Z) / Z is  %.17e .\n",
-                       Q9);
-               if (FABS(Q9 - Two) < Radix * U2) {
-                       printf("This is O.K., provided Over/Underflow");
-                       printf(" has NOT just been signaled.\n");
-                       }
-               else {
-                       if ((Q9 < One) || (Q9 > Two)) {
-very_serious:
-                               N = 1;
-                               ErrCnt [Serious] = ErrCnt [Serious] + 1;
-                               printf("This is a VERY SERIOUS DEFECT!\n");
-                               }
-                       else {
-                               N = 1;
-                               ErrCnt [Defect] = ErrCnt [Defect] + 1;
-                               printf("This is a DEFECT!\n");
-                               }
-                       }
-               sigsave = 0;
-               V9 = Z * One;
-               Random1 = V9;
-               V9 = One * Z;
-               Random2 = V9;
-               V9 = Z / One;
-               if ((Z == Random1) && (Z == Random2) && (Z == V9)) {
-                       if (N > 0) Pause();
-                       }
-               else {
-                       N = 1;
-                       BadCond(Defect, "What prints as Z = ");
-                       printf("%.17e\n\tcompares different from  ", Z);
-                       if (Z != Random1) printf("Z * 1 = %.17e ", Random1);
-                       if (! ((Z == Random2)
-                               || (Random2 == Random1)))
-                               printf("1 * Z == %g\n", Random2);
-                       if (! (Z == V9)) printf("Z / 1 = %.17e\n", V9);
-                       if (Random2 != Random1) {
-                               ErrCnt [Defect] = ErrCnt [Defect] + 1;
-                               BadCond(Defect, "Multiplication does not commute!\n");
-                               printf("\tComparison alleges that 1 * Z = %.17e\n",
-                                       Random2);
-                               printf("\tdiffers from Z * 1 = %.17e\n", Random1);
-                               }
-                       Pause();
-                       }
-               }
-       }
-
-notify(s)
-char *s;
-{
-       printf("%s test appears to be inconsistent...\n", s);
-       printf("   PLEASE NOTIFY KARPINKSI!\n");
-       }
-
-/*SPLIT msgs.c */
-
-/* Instructions */
-
-msglist(s)
-char **s;
-{ while(*s) printf("%s\n", *s++); }
-
-Instructions()
-{
-  static char *instr[] = {
-       "Lest this program stop prematurely, i.e. before displaying\n",
-       "    `END OF TEST',\n",
-       "try to persuade the computer NOT to terminate execution when an",
-       "error like Over/Underflow or Division by Zero occurs, but rather",
-       "to persevere with a surrogate value after, perhaps, displaying some",
-       "warning.  If persuasion avails naught, don't despair but run this",
-       "program anyway to see how many milestones it passes, and then",
-       "amend it to make further progress.\n",
-       "Answer questions with Y, y, N or n (unless otherwise indicated).\n",
-       0};
-
-       msglist(instr);
-       }
-
-/* Heading */
-
-Heading()
-{
-  static char *head[] = {
-       "Users are invited to help debug and augment this program so it will",
-       "cope with unanticipated and newly uncovered arithmetic pathologies.\n",
-       "Please send suggestions and interesting results to",
-       "\tRichard Karpinski",
-       "\tComputer Center U-76",
-       "\tUniversity of California",
-       "\tSan Francisco, CA 94143-0704, USA\n",
-       "In doing so, please include the following information:",
-#ifdef Single
-       "\tPrecision:\tsingle;",
-#else
-       "\tPrecision:\tdouble;",
-#endif
-       "\tVersion:\t10 February 1989;",
-       "\tComputer:\n",
-       "\tCompiler:\n",
-       "\tOptimization level:\n",
-       "\tOther relevant compiler options:",
-       0};
-
-       msglist(head);
-       }
-
-/* Characteristics */
-
-Characteristics()
-{
-       static char *chars[] = {
-        "Running this program should reveal these characteristics:",
-       "     Radix = 1, 2, 4, 8, 10, 16, 100, 256 ...",
-       "     Precision = number of significant digits carried.",
-       "     U2 = Radix/Radix^Precision = One Ulp",
-       "\t(OneUlpnit in the Last Place) of 1.000xxx .",
-       "     U1 = 1/Radix^Precision = One Ulp of numbers a little less than 1.0 .",
-       "     Adequacy of guard digits for Mult., Div. and Subt.",
-       "     Whether arithmetic is chopped, correctly rounded, or something else",
-       "\tfor Mult., Div., Add/Subt. and Sqrt.",
-       "     Whether a Sticky Bit used correctly for rounding.",
-       "     UnderflowThreshold = an underflow threshold.",
-       "     E0 and PseudoZero tell whether underflow is abrupt, gradual, or fuzzy.",
-       "     V = an overflow threshold, roughly.",
-       "     V0  tells, roughly, whether  Infinity  is represented.",
-       "     Comparisions are checked for consistency with subtraction",
-       "\tand for contamination with pseudo-zeros.",
-       "     Sqrt is tested.  Y^X is not tested.",
-       "     Extra-precise subexpressions are revealed but NOT YET tested.",
-       "     Decimal-Binary conversion is NOT YET tested for accuracy.",
-       0};
-
-       msglist(chars);
-       }
-
-History()
-
-{ /* History */
- /* Converted from Brian Wichmann's Pascal version to C by Thos Sumner,
-       with further massaging by David M. Gay. */
-
-  static char *hist[] = {
-       "The program attempts to discriminate among",
-       "   FLAWs, like lack of a sticky bit,",
-       "   Serious DEFECTs, like lack of a guard digit, and",
-       "   FAILUREs, like 2+2 == 5 .",
-       "Failures may confound subsequent diagnoses.\n",
-       "The diagnostic capabilities of this program go beyond an earlier",
-       "program called `MACHAR', which can be found at the end of the",
-       "book  `Software Manual for the Elementary Functions' (1980) by",
-       "W. J. Cody and W. Waite. Although both programs try to discover",
-       "the Radix, Precision and range (over/underflow thresholds)",
-       "of the arithmetic, this program tries to cope with a wider variety",
-       "of pathologies, and to say how well the arithmetic is implemented.",
-       "\nThe program is based upon a conventional radix representation for",
-       "floating-point numbers, but also allows logarithmic encoding",
-       "as used by certain early WANG machines.\n",
-       "BASIC version of this program (C) 1983 by Prof. W. M. Kahan;",
-       "see source comments for more history.",
-       0};
-
-       msglist(hist);
-       }
-
-double
-pow(x, y) /* return x ^ y (exponentiation) */
-double x, y;
-{
-       extern double exp(), frexp(), ldexp(), log(), modf();
-       double xy, ye;
-       long i;
-       int ex, ey = 0, flip = 0;
-
-       if (!y) return 1.0;
-
-       if ((y < -1100. || y > 1100.) && x != -1.) return exp(y * log(x));
-
-       if (y < 0.) { y = -y; flip = 1; }
-       y = modf(y, &ye);
-       if (y) xy = exp(y * log(x));
-       else xy = 1.0;
-       /* next several lines assume >= 32 bit integers */
-       x = frexp(x, &ex);
-       if (i = ye) for(;;) {
-               if (i & 1) { xy *= x; ey += ex; }
-               if (!(i >>= 1)) break;
-               x *= x;
-               ex *= 2;
-               if (x < .5) { x *= 2.; ex -= 1; }
-               }
-       if (flip) { xy = 1. / xy; ey = -ey; }
-       return ldexp(xy, ey);
-}
-
-#endif /* NO_FLOATS */
diff --git a/test/ref/pointer2.c b/test/ref/pointer2.c
deleted file mode 100644 (file)
index d8c064e..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*\r
-  !!DESCRIPTION!! pointer test\r
-  !!ORIGIN!!\r
-  !!LICENCE!!     public domain\r
-*/\r
-\r
-#include "common.h"\r
-#include <stdio.h>\r
-\r
-/*\r
-  check behaviour on incompletely declared arrays\r
-*/\r
-\r
-char i1[];\r
-\r
-void test1(void) {\r
-int a;\r
-\r
-       a=sizeof(i1[0]);\r
-       printf("%04x - ",a);\r
-       if(sizeof(i1[0])==sizeof(char)) {\r
-               /* gcc gives size of element */\r
-               printf("sizeof(i1[0]) gives size of element\n");\r
-       }\r
-       if(sizeof(i1[0])==sizeof(char*)) {\r
-               printf("sizeof(i1[0]) gives size of pointer to element\n");\r
-       }\r
-}\r
-\r
-/*\r
-  check behaviour on string init\r
-*/\r
-\r
-char t1[]="abcde";\r
-char t2[]={"abcde"};\r
-\r
-char *t3="abcde";\r
-char *t4={"abcde"};\r
-\r
-void test2(void) {\r
-char c1,c2,c3,c4;\r
-int i,e=0;\r
-       for(i=0;i<5;i++){\r
-               c1=t1[i];c2=t2[i];c3=t3[i];c4=t4[i];\r
-/*             printf("%02x %02x %02x %02x\n",c1,c2,c3,c4); */\r
-               printf("%c %c %c %c\n",c1,c2,c3,c4);\r
-               if(!((c1==c2)&(c1==c3)&(c1==c4))) e=1;\r
-       }\r
-       if(e) printf("test2 failed.\n");\r
-       else printf("test2 ok.\n");\r
-}\r
-\r
-/*\r
-  check behaviour on extern-declarations inside functions\r
-*/\r
-\r
-typedef struct {\r
-  char *name;\r
-  void *func;\r
-} A3;\r
-\r
-#ifdef NO_SLOPPY_STRUCT_INIT\r
-A3 a3[] = {\r
-  { "test3", (void*) NULL },\r
-  { "test3", (void*) NULL },\r
-};\r
-#else\r
-/*gcc warning: missing braces around initializer (near initialization for `a3[0]')\r
-  this type of struct-initialization seems to be kinda common */\r
-A3 a3[] = {\r
-    "test3", (void*) NULL  ,\r
-    "test3", (void*) NULL  ,\r
-};\r
-#endif\r
-\r
-void test3a(A3 *list, int number){\r
-       printf("%s %d\n",list->name,number);\r
-}\r
-\r
-static void test31(void)\r
-{\r
-    extern A3 a3[];\r
-    test3a(a3, -1);\r
-}\r
-\r
-#if 0\r
-/* this variation compiles and works with cc65, but gives an error with gcc :=P */\r
-static void test32(void)\r
-{\r
-    extern A3 *a3;\r
-    test3a(a3, -1);\r
-}\r
-#endif\r
-\r
-static void test30(void)\r
-{\r
-    test3a(a3, -1);\r
-}\r
-\r
-/*\r
-  todo: add test on function pointers in the form of (*func)(arg) ...\r
-  cc65 seems to have problems here aswell ;/\r
-*/\r
-\r
-int main(void) {\r
-       test1();\r
-       test2();\r
-       test30();\r
-       test31();\r
-/*     test32(); */\r
-       return 0;\r
-}\r
diff --git a/test/ref/return.c b/test/ref/return.c
deleted file mode 100644 (file)
index 0ea12d5..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-  !!DESCRIPTION!! return values, implicit type conversion on return
-  !!ORIGIN!!      cc65 devel list
-  !!LICENCE!!     Public Domain
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-
-unsigned char val_char=0x76;
-unsigned int val_int=0x5678;
-unsigned long val_long=0x12345678;
-
-int test1_int_char(void)
-{
-    return val_char;
-}
-int test1_int_int(void)
-{
-    return val_int;
-}
-
-int test2_int_char(void)
-{
-    return (int)val_char;
-}
-int test2_int_int(void)
-{
-    return (int)val_int;
-}
-
-long test1_long_char(void)
-{
-    return val_char;
-}
-long test1_long_int(void)
-{
-    return val_int;
-}
-long test1_long_long(void)
-{
-    return val_long;
-}
-
-long test2_long_char(void)
-{
-    return (long)val_char;
-}
-long test2_long_int(void)
-{
-    return (long)val_int;
-}
-long test2_long_long(void)
-{
-    return (long)val_long;
-}
-
-#define dotest(_n,_a,_v) \
-    _n=_a; \
-    printf("%04lx %04lx,",(unsigned long)_n,(unsigned long)_v); \
-    if(_n!=_v) printf("failed\n"); \
-    else printf("ok\n")
-
-int main(void)
-{
-int i;
-unsigned long l;
-
-    printf("\nwithout cast:\n");
-
-    printf("return int\n");
-
-    dotest(i,test1_int_char(),0x76);
-    dotest(i,test1_int_int(),0x5678);
-
-    printf("return long\n");
-
-    dotest(l,test1_long_char(),0x76);
-    dotest(l,test1_long_int(),0x5678);
-    dotest(l,test1_long_long(),0x12345678);
-
-   printf("\nwith cast:\n");
-
-   printf("return int\n");
-
-    dotest(i,test2_int_char(),0x76);
-    dotest(i,test2_int_int(),0x5678);
-
-    printf("return long\n");
-
-    dotest(l,test2_long_char(),0x76);
-    dotest(l,test2_long_int(),0x5678);
-    dotest(l,test2_long_long(),0x12345678);
-
-    return 0;
-}
diff --git a/test/ref/sort.c b/test/ref/sort.c
deleted file mode 100644 (file)
index 5db5cf0..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-  !!DESCRIPTION!! simple quicksort, tests recursion
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-
-int in[] = {10, 32, -1, 567, 3, 18, 1, -51, 789, 0};
-int *xx;
-
-/* exchange - exchange *x and *y */
-exchange(int *x,int *y) {
-int t;
-
-       printf("exchange(%d,%d)\n", x - xx, y - xx);
-       t = *x; *x = *y; *y = t;
-}
-
-/* partition - partition a[i..j] */
-int partition(int a[], int i, int j) {
-int v, k;
-
-       j++;
-       k = i;
-       v = a[k];
-       while (i < j) {
-               i++; while (a[i] < v) i++;
-               j--; while (a[j] > v) j--;
-               if (i < j) exchange(&a[i], &a[j]);
-       }
-       exchange(&a[k], &a[j]);
-       return j;
-}
-
-/* quick - quicksort a[lb..ub] */
-void quick(int a[], int lb, int ub) {
-        int k;
-
-       if (lb >= ub)
-               return;
-       k = partition(a, lb, ub);
-       quick(a, lb, k - 1);
-       quick(a, k + 1, ub);
-}
-
-/* sort - sort a[0..n-1] into increasing order */
-sort(int a[], int n) {
-       quick(xx = a, 0, --n);
-}
-
-/* putd - output decimal number */
-void putd(int n) {
-       if (n < 0) {
-               putchar('-');
-               n = -n;
-       }
-       if (n/10)
-               putd(n/10);
-       putchar(n%10 + '0');
-}
-
-int main(void) {
-       int i;
-
-       sort(in, (sizeof in)/(sizeof in[0]));
-       for (i = 0; i < (sizeof in)/(sizeof in[0]); i++) {
-               putd(in[i]);
-               putchar('\n');
-       }
-
-       return 0;
-}
-
diff --git a/test/ref/spill.c b/test/ref/spill.c
deleted file mode 100644 (file)
index 56b03d6..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-  !!DESCRIPTION!! register spilling
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-#include <stdio.h>
-
-int main(void)
-{
-    printf("disassemble this program to check the generated code.\n");
-    return 0;
-}
-
-#ifdef NO_EMPTY_FUNC_ARGS
-        f(i){return i+i;}
-        f2(i){return f(i)+(i?f(i):1);}
-        f3(int i,int *p){
-        register r1=0,r2=0,r3=0,r4=0,r5=0,r6=0,r7=0,r8=0,r9=0,r10=0;
-                *p++=i?f(i):0;
-        }
-#else
-        f(i){i=f()+f();}
-        f2(i){i=f()+(i?f():1);}
-        f3(int i,int *p){
-        register r1=0,r2=0,r3=0,r4=0,r5=0,r6=0,r7=0,r8=0,r9=0,r10=0;
-                *p++=i?f():0;
-        }
-#endif
-
-#ifdef NO_FLOATS
-        signed a[10],b[10];
-#else
-        double a[10],b[10];
-#endif
-
-int i;
-
-f4(){
-register r6=0,r7=0,r8=0,r9=0,r10=0,r11=0;
-        i=a[i]+b[i] && i && a[i]-b[i];
-}
-/* f4 causes parent to spill child on vax when odd double regs are enabled */
-
-int j, k, m, n;
-#ifdef NO_FLOATS
-        signed *A, *B, x;
-#else
-        double *A, *B, x;
-#endif
-
-f5(){
-       x=A[k*m]*A[j*m]+B[k*n]*B[j*n];
-       x=A[k*m]*B[j*n]-B[k*n]*A[j*m];
-}
diff --git a/test/ref/stdarg.c b/test/ref/stdarg.c
deleted file mode 100644 (file)
index 295a2cc..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
-  !!DESCRIPTION!! variable argument lists
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-#include <stdarg.h>
-
-#ifndef NO_FUNCS_TAKE_STRUCTS
-struct node
-{
-       int a[4];
-} x =
-{
-#ifdef NO_SLOPPY_STRUCT_INIT
-       {
-#endif
-               1,2,3,4
-#ifdef NO_SLOPPY_STRUCT_INIT
-       }
-#endif
-};
-#endif
-
-print(char *fmt, ...);
-
-main()
-{
-       print("test 1\n");
-       print("test %s\n", "2");
-       print("test %d%c", 3, '\n');
-       print("%s%s %w%c", "te", "st", 4, '\n');
-    #ifdef NO_FLOATS
-               print("%s%s %f%c", "te", "st", (signed long) 5, '\n');
-       #else
-               print("%s%s %f%c", "te", "st", 5.0, '\n');
-    #endif
-       #ifndef NO_FUNCS_TAKE_STRUCTS
-        print("%b %b %b %b %b %b\n", x, x, x, x, x, x);
-       #endif
-       return 0;
-}
-
-print(char *fmt, ...) {
-       va_list ap;
-       va_start(ap, fmt);
-       for (; *fmt; fmt++)
-       {
-               if (*fmt == '%')
-                       switch (*++fmt) {
-            case 'b': {
-                                       #ifdef NO_FUNCS_TAKE_STRUCTS
-                       printf("(1 2 3 4)");
-                                       #else
-                       struct node x =
-                                                       va_arg(
-                                                               ap,
-                                                               struct node
-                                                               );
-                       printf("(%d %d %d %d)", x.a[0], x.a[1], x.a[2], x.a[3]);
-                                       #endif
-                    break;
-                    }
-                       case 'c':
-                               /* printf("%c", va_arg(ap, char)); */
-                               printf("%c", va_arg(ap, int));
-                               break;
-                       case 'd':
-                               printf("%d", va_arg(ap, int));
-                               break;
-                       case 'w':
-                               /* printf("%x", va_arg(ap, short)); */
-                               printf("%x", va_arg(ap, int));
-                               break;
-                       case 's':
-                               printf("%s", va_arg(ap, char *));
-                               break;
-                       case 'f':
-               #ifdef NO_FLOATS
-                                       printf("%ld.000000", va_arg(ap, signed long));
-                               #else
-                                       printf("%f", va_arg(ap, double));
-               #endif
-                               break;
-                       default:
-                               printf("%c", *fmt);
-                               break;
-                       }
-                else
-                       printf("%c", *fmt);
-       }
-       va_end(ap);
-}
diff --git a/test/ref/strptr.c b/test/ref/strptr.c
deleted file mode 100644 (file)
index 8bfa983..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
-  !!DESCRIPTION!! 
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Groepaz/Hitmen
-*/
-
-/*
-  this test reproduces a bug that prevented the testsuites directory
-  reading stuff for the c64 from working before. the bug appears to
-  only occur when optimizations are enabled. it also disappears if
-  the buffers inside the readdir function are declared static or
-  made global.
-*/
-
-/*#define STANDALONE*/
-
-#ifdef STANDALONE
-
-FILE *outfile=NULL;
-#define OPENTEST() outfile=stdout;
-#define CLOSETEST()
-
-#else
-
-#endif
-                        
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <string.h>
-
-#define XNAME_MAX 16
-
-struct Xdirent
-{
-       char d_name[XNAME_MAX+1];
-       unsigned short d_off;
-       unsigned short d_reclen;
-       unsigned char  d_type;
-       unsigned char  d_namlen;
-};
-
-typedef struct
-{
-       unsigned char fd;
-       unsigned short off;
-       char name[XNAME_MAX+1];
-} XDIR;
-
-unsigned char b1[4];
-unsigned char b2[0x10]={"  \"test\"  "};
-
-struct Xdirent *Xreaddir(XDIR *dir)
-{
-unsigned char buffer[0x40];
-unsigned char temp;
-unsigned char i,ii;
-
-static struct Xdirent entry;
-unsigned char fd;
-static unsigned char ch;
-
-               entry.d_off=dir->off;
-
-               /* basic line-link / file-length */
-               memcpy(buffer,b1,4);
-               
-               dir->off=dir->off+4;    
-               entry.d_reclen=254*(buffer[2]+(buffer[3]<<8));
-
-               /* read file entry */
-               memcpy(buffer,b2,0x10);
-                       
-               dir->off=dir->off+i;    
-
-               printf("Xreaddir: '%s'\n",buffer);
-               
-               /* skip until either quote (file) or b (blocks free => end) */
-               i=0;ii=0;
-               while(i==0){
-                       temp=buffer[ii];ii++;
-                       if(ii>16){
-                               /* something went wrong...this shouldnt happen! */
-                               return(NULL);
-                       }
-                       else if(temp=='\"') i++;
-                       else if(temp=='b') {
-                               /* "blocks free" */
-                               return(NULL);
-                       }
-               }
-               printf("Xreaddir: '%s'\n",buffer);
-
-               /* process file entry */
-
-               i=0;  temp=buffer[ii];ii++;
-               while(temp!='\"'){
-                       entry.d_name[i]=temp;
-                       i++;
-                       temp=buffer[ii];ii++;
-               }
-               entry.d_name[i]=0;
-               entry.d_namlen=i;
-
-               /* set type flag */
-
-               return(&entry);
-}
-
-int main(void)
-{
-char mydirname[XNAME_MAX+1]=".";
-XDIR mydir;
-struct Xdirent *mydirent;
-       
-    printf("start\n");
-    
-    if((mydirent=Xreaddir(&mydir))==NULL)
-    {
-           printf("NULL\n");
-    }
-    else
-    {
-           printf("=%s\n",mydirent->d_name);
-    }
-    printf("done\n");
-
-    return 0;
-}
diff --git a/test/ref/struct.c b/test/ref/struct.c
deleted file mode 100644 (file)
index a0f181e..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
-  !!DESCRIPTION!! structs
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-typedef struct point { int x,y; } point;
-typedef struct rect { point pt1, pt2; } rect;
-
-#define min(a, b) ((a) < (b) ? (a) : (b))
-#define max(a, b) ((a) > (b) ? (a) : (b))
-
-#ifdef NO_FUNCS_RETURN_STRUCTS
-# ifdef NO_FUNCS_TAKE_STRUCTS
-/* canonicalize rectangle coordinates */
-void canonrect(rect *d,rect *r) {
-        d->pt1.x = min(r->pt1.x, r->pt2.x);
-        d->pt1.y = min(r->pt1.y, r->pt2.y);
-        d->pt2.x = max(r->pt1.x, r->pt2.x);
-        d->pt2.y = max(r->pt1.y, r->pt2.y);
-}
-/* add two points */
-void addpoint(point *p, point *p1, point *p2) {
-        p->x= p1->x + p2->x;
-        p->y= p1->y + p2->y;
-}
-/* make a point from x and y components */
-void makepoint(point *p,int x, int y) {
-        p->x = x;
-        p->y = y;
-}
-/* make a rectangle from two points */
-void makerect(rect *d,point *p1, point *p2) {
-rect r;
-        r.pt1.x = p1->x;
-        r.pt1.y = p1->y;
-        r.pt2.x = p2->x;
-        r.pt2.y = p2->y;
-
-        canonrect(d,&r);
-}
-
-#ifdef NO_SLOPPY_STRUCT_INIT
-struct odd {char a[3]; } y = {{'a', 'b', 0 }};
-#else
-struct odd {char a[3]; } y = {'a', 'b', 0};
-#endif
-
-odd(struct odd *y) {
-        struct odd *x = y;
-        printf("%s\n\r", x->a);
-}
-
-# else  /* FUNCS_TAKE_STRUCTS */
-/* canonicalize rectangle coordinates */
-void canonrect(rect *d,rect r) {
-        d->pt1.x = min(r.pt1.x, r.pt2.x);
-        d->pt1.y = min(r.pt1.y, r.pt2.y);
-        d->pt2.x = max(r.pt1.x, r.pt2.x);
-        d->pt2.y = max(r.pt1.y, r.pt2.y);
-}
-/* add two points */
-void addpoint(point *p, point p1, point p2) {
-        p->x= p1.x + p2.x;
-        p->y= p1.y + p2.y;
-}
-/* make a point from x and y components */
-void makepoint(point *p,int x, int y) {
-        p->x = x;
-        p->y = y;
-}
-/* make a rectangle from two points */
-void makerect(rect *d,point p1, point p2) {
-rect r;
-       r.pt1 = p1;
-       r.pt2 = p2;
-
-        canonrect(d,r);
-}
-
-#ifdef NO_SLOPPY_STRUCT_INIT
-struct odd {char a[3]; } y = {{'a', 'b', 0}};
-#else
-struct odd {char a[3]; } y = {'a', 'b', 0};
-#endif
-
-odd(struct odd y) {
-        struct odd x = y;
-        printf("%s\n\r", x.a);
-}
-
-# endif /* FUNCS_TAKE_STRUCTS */
-
-#else /* FUNCS_RETURN_STRUCTS */
-
-/* add two points */
-point addpoint(point p1, point p2) {
-       p1.x += p2.x;
-       p1.y += p2.y;
-       return p1;
-}
-/* canonicalize rectangle coordinates */
-rect canonrect(rect r) {
-       rect temp;
-
-       temp.pt1.x = min(r.pt1.x, r.pt2.x);
-       temp.pt1.y = min(r.pt1.y, r.pt2.y);
-       temp.pt2.x = max(r.pt1.x, r.pt2.x);
-       temp.pt2.y = max(r.pt1.y, r.pt2.y);
-       return temp;
-}
-/* make a point from x and y components */
-point makepoint(int x, int y) {
-       point p;
-
-       p.x = x;
-       p.y = y;
-       return p;
-}
-
-/* make a rectangle from two points */
-rect makerect(point p1, point p2) {
-       rect r;
-
-       r.pt1 = p1;
-       r.pt2 = p2;
-       return canonrect(r);
-}
-
-struct odd {char a[3]; } y =
-{
-#ifdef NO_SLOPPY_STRUCT_INIT
-       {
-#endif
-       'a', 'b', 0
-#ifdef NO_SLOPPY_STRUCT_INIT
-       }
-#endif
-};
-
-odd(struct odd y)
-{
-       struct odd x
-               = y;
-        printf("%s\n\r", x.a);
-}
-
-#endif
-
-/* is p in r? */
-# ifdef NO_FUNCS_TAKE_STRUCTS
-int ptinrect(point *p, rect *r) {
-        return p->x >= r->pt1.x && p->x < r->pt2.x
-                && p->y >= r->pt1.y && p->y < r->pt2.y;
-}
-#else
-int ptinrect(point p, rect r) {
-       return p.x >= r.pt1.x && p.x < r.pt2.x
-               && p.y >= r.pt1.y && p.y < r.pt2.y;
-}
-#endif
-
-#ifdef NO_FUNCS_RETURN_STRUCTS
-
-#ifdef NO_LOCAL_STRUCT_INIT
-#ifdef NO_SLOPPY_STRUCT_INIT
-point pts[] = { {-1, -1},{ 1, 1},{ 20, 300},{ 500, 400 } };
-#else
-point pts[] = { -1, -1, 1, 1, 20, 300, 500, 400 };
-#endif
-point origin = { 0, 0 };
-point maxpt = { 320, 320 };
-#endif
-
-main() {
-int i;
-point x;
-rect screen;
-#ifndef NO_LOCAL_STRUCT_INIT
-point origin = { 0, 0 };
-point maxpt = { 320, 320 };
-#ifdef NO_SLOPPY_STRUCT_INIT
-point pts[] = { {-1, -1},{ 1, 1},{ 20, 300},{ 500, 400 } };
-#else
-point pts[] = { -1, -1, 1, 1, 20, 300, 500, 400 };
-#endif
-#endif
-
-          makepoint (     &x,    -10,    -10);
-#ifdef NO_FUNCS_TAKE_STRUCTS
-          addpoint  ( &maxpt, &maxpt,     &x);
-#else
-          addpoint  ( &maxpt, maxpt,     x);
-#endif
-          makepoint (     &x,     10,     10);
-
-#ifdef NO_FUNCS_TAKE_STRUCTS
-          addpoint  (&origin,&origin,     &x);
-          makerect  (&screen, &maxpt,&origin);
-#else
-          addpoint  (&origin,origin,     x);
-          makerect  (&screen, maxpt,origin);
-#endif
-
-        for (i = 0; i < sizeof pts/sizeof pts[0]; i++) {
-                makepoint(&x,pts[i].x, pts[i].y);
-                printf("(%d,%d) is ", pts[i].x, x.y);
-#ifdef NO_FUNCS_TAKE_STRUCTS
-                if (ptinrect(&x, &screen) == 0)
-#else
-                if (ptinrect(x, screen) == 0)
-#endif
-               {
-                        printf("not ");
-               }
-                printf("within (%d,%d; %d,%d)\n\r", screen.pt1.x, screen.pt1.y,
-                        screen.pt2.x, screen.pt2.y);
-        }
-#ifdef NO_FUNCS_TAKE_STRUCTS
-        odd(&y);
-#else
-        odd(y);
-#endif
-
-        return 0;
-}
-
-#else /* FUNCS_RETURN_STRUCTS */
-
-main() {
-int i;
-point x, origin = { 0, 0 }, maxpt = { 320, 320 };
-
-#ifdef NO_SLOPPY_STRUCT_INIT
-point pts[] = { {-1, -1}, {1, 1}, {20, 300}, {500, 400} };
-#else
-point pts[] = { -1, -1, 1, 1, 20, 300, 500, 400 };
-#endif
-
-rect screen =
-       makerect(
-               addpoint(maxpt, makepoint(-10, -10)),
-               addpoint(origin, makepoint(10, 10))
-               );
-
-       test1();
-       
-       for (i = 0; i < sizeof pts/sizeof pts[0]; i++) {
-               printf("(%d,%d) is ", pts[i].x,
-                       (x = makepoint(pts[i].x, pts[i].y)).y);
-               if (ptinrect(x, screen) == 0)
-                       printf("not ");
-                printf("within (%d,%d; %d,%d)\n\r", screen.pt1.x, screen.pt1.y,
-                       screen.pt2.x, screen.pt2.y);
-       }
-       odd(y);
-
-       return 0;
-}
-
-#endif /* FUNCS_RETURN_STRUCTS */
diff --git a/test/ref/switch.c b/test/ref/switch.c
deleted file mode 100644 (file)
index 0821d29..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
-  !!DESCRIPTION!! switch statement
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-#include <limits.h>
-
-#ifdef NO_IMPLICIT_FUNC_PROTOTYPES
-testbig();
-testbackslash();
-backslash(int c);
-f();
-g();
-h();
-limit();
-
-big(
-# ifdef ASSUME_32BIT_UNSIGNED
-       unsigned
-# else
-       unsigned long
-# endif
-x);
-
-#endif
-
-main()
-{
-       testbackslash();
-       f();
-       g();
-       h();
-       testbig(); /* ! broken long int compare (?) */
-       limit();   /* ! broken long int compare (?) */
-
-       return 0;
-}
-
-testbig()
-{
-       #ifdef ASSUME_32BIT_INT
-       int i;
-       #else
-               signed long i;
-       #endif
-              /*  2341234      2341234         2341234 */
-       for (i = 0x1000000; i&0x7000000; i += 0x1000000) {
-/*             printf("i = 0x%lx\n", i); */
-               big(i);
-       }
-}
-
-#ifdef NO_LOCAL_STRING_INIT
-/*        static char _s[8]={"bfnrtvx"}; */
-        static char _s[8]="bfnrtvx";
-#endif
-
-testbackslash()
-{
-        char *s;
-
-#ifdef NO_STRINGS_IN_FOR
-# ifndef NO_LOCAL_STRING_INIT
-        char _s[8]={"bfnrtvx"};
-# endif
-        for (s=_s; *s; s++) {
-#else
-        for (s = "bfnrtvx"; *s; s++) {
-#endif
-                       printf("%c = %c\n", *s, backslash(*s));
-        }
-}
-
-backslash(c)
-{
-       switch (c)
-    {
-       case 'b':
-               return 'b';
-       case 'f':
-               return 'f';
-       case 'n':
-               return 'n';
-       case 'r':
-               return 'r';
-       case 't':
-               return 't';
-       case 'v':
-        return 'v';
-       }
-
-       return 'x';
-}
-
-f() {
-       int i, x = 0, y;
-
-       printf("f:\n");
-       for (i = 0; i <= 20; i++) {
-               y = i;
-               switch (i) {
-               case 1: x = i; break;
-               case 2: x = i; break;
-               case 7: x = i; break;
-               case 8: x = i; break;
-               case 9: x = i; break;
-               case 16: x = i; break;
-               case 17: x = i; break;
-               case 18: x = i; break;
-               case 19: x = i; break;
-               case 20: x = i; break;
-               }
-               printf("x = %d\n", x);
-       }
-}
-
-g() {
-       int i;
-
-       printf("g:\n");
-       for (i = 1; i <= 10; i++)
-               switch (i) {
-               case 1: case 2: printf("1 %d\n", i); break;
-               case 3: case 4: case 5: printf("2 %d\n", i); break;
-               case 6: case 7: case 8: printf("3 %d\n", i);
-               default:
-                       printf("d %d\n", i); break;
-               case 1001: case 1002: case 1003: case 1004:
-                       printf("5 %d\n", i); break;
-               case 3001: case 3002: case 3003: case 3004:
-                       printf("6 %d\n", i); break;
-       }
-}
-
-h()
-{
-       int i, n=0;
-
-       printf("h:\n");
-       for (i = 1; i <= 500; i++)
-               switch (i) {
-               default: n++; continue;
-               case 128: printf("i = %d\n", i); break;
-               case 16: printf("i = %d\n", i); break;
-               case 8: printf("i = %d\n", i); break;
-               case 120: printf("i = %d\n", i); break;
-               case 280: printf("i = %d\n", i); break;
-               case 264: printf("i = %d\n", i); break;
-               case 248: printf("i = %d\n", i); break;
-               case 272: printf("i = %d\n", i); break;
-               case 304: printf("i = %d\n", i); break;
-               case 296: printf("i = %d\n", i); break;
-               case 288: printf("i = %d\n", i); break;
-               case 312: printf("i = %d\n", i); break;
-               }
-       printf("%d defaults\n", n);
-}
-
-#ifdef NO_OLD_FUNC_DECL
-        big(
-#else
-        big(x)
-#endif
-
-# ifdef ASSUME_32BIT_UNSIGNED
-       unsigned
-# else
-       unsigned long
-# endif
-
-#ifdef NO_OLD_FUNC_DECL
-        x) {
-#else
-        x; {
-#endif
-
-/*     printf("x = 0x%x\n", x); */
-
-       switch(x&0x6000000){
-       case -1:
-       case -2:
-       case 0x0000000:
-               printf("x = 0x%lx\n", x); break;
-       case 0x2000000:
-               printf("x = 0x%lx\n", x); break;
-       case 0x4000000:
-               printf("x = 0x%lx\n", x); break;
-       default:
-               printf("x = 0x%lx (default)\n", x); break;
-       }
-}
-
-limit() {
-       int i;
-
-       for (i = INT_MIN; i <= INT_MIN+5; i++)
-/*     for (i = INT_MIN; i <  INT_MIN+6; i++) */
-               switch (i) {
-                       case INT_MIN:   printf("0\n"); break;
-                       case INT_MIN+1: printf("1\n"); break;
-                       case INT_MIN+2: printf("2\n"); break;
-                       case INT_MIN+3: printf("3\n"); break;
-                       case INT_MIN+4: printf("4\n"); break;
-                       default:        printf("5\n"); break;
-               }
-       for (i = INT_MAX; i >= INT_MAX-5; i--)
-               switch (i) {
-                       case INT_MAX:   printf("0\n"); break;
-                       case INT_MAX-1: printf("1\n"); break;
-                       case INT_MAX-2: printf("2\n"); break;
-                       case INT_MAX-3: printf("3\n"); break;
-                       case INT_MAX-4: printf("4\n"); break;
-                       default:            printf("5\n"); break;
-               }
-}
diff --git a/test/ref/switch2.c b/test/ref/switch2.c
deleted file mode 100644 (file)
index e75cfe7..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-/*\r
-  !!DESCRIPTION!! switch test\r
-  !!ORIGIN!!\r
-  !!LICENCE!!     public domain\r
-*/\r
-\r
-/*#define STANDALONE*/\r
-\r
-#include <stdio.h>\r
-\r
-void testlimits(int i) {
-       printf("%d:",i);\r
-\r
-       switch(i) {
-               case -1:        /* works */\r
-               /* case 0xffff: */ /* 'range error' (-1) */\r
-\r
-                       printf("-1\n");\r
-                       break;\r
-               /* max int */\r
-\r
-/*              case 0x7fff:   */         /* works */\r
-               case 32767:                /* works */\r
-               /* case 32768: */          /* 'range error' (correct for that one!) */\r
-\r
-                       printf("max\n");\r
-                       break;\r
-               /* min int */\r
-\r
-               case -32768:               /* 'warning. constant is long' */\r
-               /* case 0x8000: */             /* 'range error' */\r
-               /* case -32769: */         /* 'range error' (correct for that one!) */\r
-                       printf("min\n");\r
-                       break;\r
-       }\r
-       printf("\n");\r
-}\r
-\r
-void testdefault1(unsigned char i) {\r
-/* we want a signed char */\r
-#ifdef REFCC\r
-\r
-#ifdef REFCC_UNSIGNED_CHARS\r
-signed char k;\r
-#else\r
-char k;\r
-#endif\r
-       \r
-#else\r
-       \r
-#ifdef UNSIGNED_CHARS\r
-signed char k;\r
-#else\r
-char k;\r
-#endif\r
-\r
-#endif\r
-\r
-       for(;i<254;) {\r
-               k = i;\r
-               printf(">%d\n",i);i++;\r
-               switch(k) {\r
-               case 1:\r
-                       break;\r
-               case 2:\r
-                       break;\r
-               case 3:\r
-                       break;\r
-               case 4:\r
-                       break;\r
-               case 5:\r
-                       break;\r
-               case 6:\r
-                       break;\r
-               case 7:\r
-                       break;\r
-               case 8:\r
-                       break;\r
-               case 9:\r
-                       break;\r
-               case 10:\r
-                       break;\r
-               case 11:\r
-                       break;\r
-               case 12:\r
-                       break;\r
-               case 13:\r
-                       break;\r
-               case 14:\r
-                       break;\r
-               case 15:\r
-                       break;\r
-               case 17:\r
-                       break;\r
-               /* triggers bug ? */\r
-               /* gcc warning: case label value exceeds maximum value for type */\r
-               /* cc65 error: range error */\r
-\r
-               /*\r
-               case 170:\r
-                       break;\r
-               */\r
-               case 18:\r
-                       break;\r
-               case 19:\r
-                       break;\r
-               case 20:\r
-                       break;\r
-               case 21:\r
-                       break;\r
-               case 22:\r
-                       break;\r
-               case 23:\r
-                       break;\r
-               case 24:\r
-                       switch(k) {\r
-                               case 1:\r
-                                       break;\r
-                               case 2:\r
-                                       break;\r
-                               case 3:\r
-                                       break;\r
-                               case 4:\r
-                               case 5:\r
-                               break;\r
-                               case 6:\r
-                               case 7:\r
-                                       break;\r
-                               case 8:\r
-                               case 9:\r
-                                       break;\r
-                               }\r
-                       break;\r
-               case 100:\r
-                       break;\r
-               default:\r
-                       printf(">>>default\n");\r
-                       /* triggers bug if this break; is missing? */\r
-                       /* break; */\r
-               }\r
-       }\r
-}\r
-\r
-void testdefault2(unsigned char i) {\r
-/* we want a unsigned char */\r
-#ifdef REFCC\r
-\r
-#ifdef REFCC_UNSIGNED_CHARS\r
-char k;\r
-#else\r
-unsigned char k;\r
-#endif\r
-       \r
-#else\r
-       \r
-#ifdef UNSIGNED_CHARS\r
-char k;\r
-#else\r
-unsigned char k;\r
-#endif\r
-\r
-#endif\r
-\r
-       for(;i<254;) {\r
-               k = i;\r
-               printf(">%d\n",i);i++;\r
-               switch(k) {\r
-               case 1:\r
-                       break;\r
-               case 2:\r
-                       break;\r
-               case 3:\r
-                       break;\r
-               case 4:\r
-                       break;\r
-               case 5:\r
-                       break;\r
-               case 6:\r
-                       break;\r
-               case 7:\r
-                       break;\r
-               case 8:\r
-                       break;\r
-               case 9:\r
-                       break;\r
-               case 10:\r
-                       break;\r
-               case 11:\r
-                       break;\r
-               case 12:\r
-                       break;\r
-               case 13:\r
-                       break;\r
-               case 14:\r
-                       break;\r
-               case 15:\r
-                       break;\r
-               case 17:\r
-                       break;\r
-               /* triggers bug ? */\r
-\r
-               case 170:\r
-                       break;\r
-               \r
-               case 18:\r
-                       break;\r
-               case 19:\r
-                       break;\r
-               case 20:\r
-                       break;\r
-               case 21:\r
-                       break;\r
-               case 22:\r
-                       break;\r
-               case 23:\r
-                       break;\r
-               case 24:\r
-                       switch(k) {\r
-                               case 1:\r
-                                       break;\r
-                               case 2:\r
-                                       break;\r
-                               case 3:\r
-                                       break;\r
-                               case 4:\r
-                               case 5:\r
-                               break;\r
-                               case 6:\r
-                               case 7:\r
-                                       break;\r
-                               case 8:\r
-                               case 9:\r
-                                       break;\r
-                               }\r
-                       break;\r
-               case 100:\r
-                       break;\r
-               default:\r
-                       printf(">>>default\n");\r
-                       /* triggers bug if this break; is missing? */\r
-                       /* break; */\r
-               }\r
-       }\r
-}
-
-int main(void) {
-       testlimits(32767);\r
-       testlimits(-32768);\r
-       testlimits(-1);\r
-       \r
-       testdefault1(1);\r
-       testdefault1(2);\r
-       testdefault1(3);\r
-       testdefault1(4);\r
-       \r
-       testdefault2(1);\r
-       testdefault2(2);\r
-       testdefault2(3);\r
-       testdefault2(4);\r
-\r
-       return 0;\r
-}\r
diff --git a/test/ref/varargs.c b/test/ref/varargs.c
deleted file mode 100644 (file)
index 11fd33b..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-  !!DESCRIPTION!! varargs test\r
-  !!ORIGIN!!\r
-  !!LICENCE!!     public domain\r
-*/\r
-\r
-#include <stdlib.h>\r
-#include <stdio.h>\r
-#include <stdarg.h>\r
-\r
-void chk0(char *format,...);\r
-void chk1(int fd,char *format,...);\r
-\r
-#if 0\r
-// old workaround for broken varargs\r
-\r
-void chk0(char *format,...){\r
-    __asm__ ("pha");    // save argument size\r
-    {\r
-//va_list ap;\r
-char *ap;\r
-char *_format;\r
-static char string[0x100];\r
-\r
-//    va_start(ap,format);\r
-    __asm__ ("pla");       // restore argument size\r
-    __asm__ ("ldx #$00");  // clear hibyte of AX\r
-    ap=__AX__;\r
-    ap+=(char*)&format;\r
-    // get value of format\r
-    ap-=2;\r
-    _format=*((char**)ap);\r
-\r
-//    vsprintf(string,format,ap);\r
-    vsprintf(&string[0],_format,ap);\r
-    printf("format:%s,string:%s\n",_format,string);\r
-//    va_end(ap);\r
-\r
-    }\r
-}\r
-\r
-void chk1(int fd,char *format,...){\r
-    __asm__ ("pha");    // save argument size\r
-    {\r
-//va_list ap;\r
-char *ap;\r
-char *_format;\r
-int _fd;\r
-static char string[0x100];\r
-\r
-//    va_start(ap,format);\r
-    __asm__ ("pla");       // restore argument size\r
-    __asm__ ("ldx #$00");  // clear hibyte of AX\r
-    ap=__AX__;\r
-    ap+=(char*)&format;\r
-    // get value of fd\r
-    ap-=2;\r
-    _fd=*((int*)ap);\r
-    // get value of format\r
-    ap-=2;\r
-    _format=*((char**)ap);\r
-\r
-//    vsprintf(string,format,ap);\r
-    vsprintf(&string[0],_format,ap);\r
-    printf("fd:%d,format:%s,string:%s\n",_fd,_format,string);\r
-//    va_end(ap);\r
-\r
-    }\r
-}\r
-\r
-#endif\r
-\r
-void chk0(char *format,...){\r
-va_list ap;\r
-static char string[0x100];\r
-    va_start(ap,format);\r
-    vsprintf(string,format,ap);\r
-    printf("format:%s,string:%s\n",format,string);\r
-    va_end(ap);\r
-}\r
-\r
-void chk1(int fd,char *format,...){\r
-va_list ap;\r
-static char string[0x100];\r
-\r
-    va_start(ap,format);\r
-\r
-    vsprintf(string,format,ap);\r
-       printf("fd:%d,format:%s,string:%s\n",fd,format,string);\r
-    va_end(ap);\r
-}
-
-int main(int argc,char **argv) {\r
-    printf("varargs test\n");\r
-\r
-    printf("\nchk0/0:\n");chk0("chk0 %s","arg0");\r
-    printf("\nchk0/1:\n");chk0("chk0 %s %s","arg0","arg1");\r
-    printf("\nchk0/2:\n");chk0("chk0 %s %s %s","arg0","arg1","arg2");\r
-\r
-    printf("\nchk1/0:\n");chk1(0xfd,"chk1 %s","arg0");\r
-    printf("\nchk1/1:\n");chk1(0xfd,"chk1 %s %s","arg0","arg1");\r
-    printf("\nchk1/2:\n");chk1(0xfd,"chk1 %s %s %s","arg0","arg1","arg2");\r
-\r
-    return 0;
-}\r
diff --git a/test/ref/wf1.c b/test/ref/wf1.c
deleted file mode 100644 (file)
index 0539d83..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
-  !!DESCRIPTION!! print word frequencies; uses structures
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-
-#define MAXWORDS 250
-
-FILE *in;
-#define getchar() fgetc(in)
-
-struct node
-{
-       int count;              /* frequency count */
-       struct node *left;      /* left subtree */
-       struct node *right;     /* right subtree */
-       char *word;             /* word itself */
-} words[MAXWORDS];
-int next;              /* index of next free entry in words */
-
-/*struct node *lookup();*/
-
-#if defined(NO_NEW_PROTOTYPES_FOR_OLD_FUNC_DECL) && !defined(NO_OLD_FUNC_DECL)
-
-#else
-
-int err(char *s);
-int getword(char *buf);
-void tprint(struct node *tree);
-struct node *lookup(char *word, struct node **p);
-
-#endif
-
-int isletter(char c);
-
-/* err - print error message s and die */
-#ifndef NO_OLD_FUNC_DECL
-err(s) char *s; {
-#else
-int err(char *s) {
-#endif
-       printf("? %s\n", s);
-       exit(1);
-}
-
-/* getword - get next input word into buf, return 0 on EOF */
-#ifndef NO_OLD_FUNC_DECL
-int getword(buf) char *buf;
-#else
-int getword(char *buf)
-#endif
-{
-       char *s;
-       int c;
-
-        while (((c = getchar()) != -1) && (isletter(c) == 0))
-               ;
-        for (s = buf; (c = isletter(c)); c = getchar())
-               *s++ = c;
-       *s = 0;
-       if (s > buf)
-               return 1;
-       return 0;
-}
-
-/* isletter - return folded version of c if it is a letter, 0 otherwise */
-int isletter(char c)
-{
-       if ((c >= 'A') && (c <= 'Z')) c += 'a' - 'A';
-       if ((c >= 'a') && (c <= 'z')) return c;
-       return 0;
-}
-
-/* lookup - lookup word in tree; install if necessary */
-#ifndef NO_OLD_FUNC_DECL
-struct node *lookup(word, p)
-char *word; struct node **p;
-#else
-struct node *lookup(char *word, struct node **p)
-#endif
-{
-       int cond;
-/*     char *malloc(); */
-
-       if (*p) {
-               cond = strcmp(word, (*p)->word);
-               if (cond < 0)
-                       return lookup(word, &(*p)->left);
-               else if (cond > 0)
-                       return lookup(word, &(*p)->right);
-               else
-                       return *p;
-       }
-       if (next >= MAXWORDS)
-               err("out of node storage");
-       words[next].count = 0;
-       words[next].left = words[next].right = 0;
-       words[next].word = malloc(strlen(word) + 1);
-       if (words[next].word == 0)
-               err("out of word storage");
-       strcpy(words[next].word, word);
-       return *p = &words[next++];
-}
-
-/* tprint - print tree */
-#ifndef NO_OLD_FUNC_DECL
-void tprint(tree) struct node *tree; {
-#else
-void tprint(struct node *tree) {
-#endif
-       if (tree) {
-               tprint(tree->left);
-               printf("%d:%s\n", tree->count, tree->word);
-               tprint(tree->right);
-       }
-}
-
-int main(void)
-{
-       struct node *root;
-       char word[20];
-
-        in = fopen("wf1.in","rb");
-        if (in == NULL) {
-            return EXIT_FAILURE;
-        }
-
-       root = 0;
-       next = 0;
-       while (getword(word))
-               lookup(word, &root)->count++;
-       tprint(root);
-
-        fclose(in);
-        return 0;
-}
diff --git a/test/ref/wf1.in b/test/ref/wf1.in
deleted file mode 100644 (file)
index 3e50fba..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-The sky above the port was the color of television, tuned
-to a dead channel.
-"It's not like I'm using," Case heard someone say, as he
-shouldered his way through the crowd around the door of the
-Chat. "It's like my body's developed this massive drug deficiency."
-It was a Sprawl voice and a Sprawl joke. The Chatsubo
-was a bar for professional expatriates; you could drink there
-for a week and never hear two words in Japanese.
-Ratz was tending bar, his prosthetic arm jerking monotonously
-as he filled a tray of glasses with draft Kirin. He saw
-Case and smiled, his teeth a web work of East European steel
-and brown decay. Case found a place at the bar, between the
-unlikely tan on one of Lonny Zone's whores and the crisp naval
-uniform of a tall African whose cheekbones were ridged with
-Joe boys," Ratz said, shoving a draft across the bar with his
-good hand. "Maybe some business with you, Case?"
-Case shrugged. The girl to his right giggled and nudged
diff --git a/test/ref/yacc.c b/test/ref/yacc.c
deleted file mode 100644 (file)
index 5768f80..0000000
+++ /dev/null
@@ -1,1006 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-/*#define STANDALONE*/
-
-#include "common.h"
-
-#ifndef YACCDBG
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-/*
-#define LEXDEBUG
-#define YYDEBUG
-*/
-
-#endif
-
-FILE *infile, *outfile;
-#define getchar() fgetc(infile)
-
-/* hack the original tables to work with both petscii and ascii */
-#define CHARSETHACK
-
-# define ID 257
-# define CON 258
-# define UNARYMINUS 259
-#define yyclearin yychar = -1
-#define yyerrok yyerrflag = 0
-extern int yychar;
-extern short yyerrflag;
-#ifndef YYMAXDEPTH
-/*#define YYMAXDEPTH 150*/
-#define YYMAXDEPTH 50
-#endif
-#ifndef YYSTYPE
-#define YYSTYPE int
-#endif
-YYSTYPE yylval, yyval;
-# define YYERRCODE 256
-
-# define U(x) x
-# define NLSTATE yyprevious=YYNEWLINE
-# define BEGIN yybgin = yysvec + 1 +
-# define INITIAL 0
-# define YYLERR yysvec
-# define YYSTATE (yyestate-yysvec-1)
-# define YYOPTIM 1
-# define YYLMAX 200
-# define output(c) (void)putc(c,yyout)
-
-/* # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar) */
-# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getchar())==('\n')?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
-
-# define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
-# define yymore() (yymorfg=1)
-# define ECHO fprintf(yyout, "%s",yytext)
-# define REJECT { nstr = yyreject(); goto yyfussy;}
-int yyleng; extern char yytext[];
-int yymorfg;
-extern char *yysptr, yysbuf[];
-int yytchar;
-
-#define yyin  infile
-#define yyout outfile
-
-extern int yylineno;
-struct yysvf 
-{
-       struct yywork *yystoff;
-       struct yysvf *yyother;
-       int *yystops;
-};
-struct yysvf *yyestate;
-extern struct yysvf yysvec[], *yybgin;
-
-/*# define YYNEWLINE 10 */
-# define YYNEWLINE ('\n')
-
-#ifdef NO_IMPLICIT_FUNC_PROTOTYPES
-yylook();
-int yywrap();
-yyparse();
-yyerror(char *s);
-yyunput(int c);
-yyoutput(int c);
-yyinput();
-yyback(int *p,int m);
-#endif
-
-#ifdef YYDEBUG
-void printchar(char *name,int ch)
-{
-       if((ch==YYNEWLINE))
-       {
-               fprintf(yyout," %s=YYNEWLINE\n",name);
-       }
-       else if((ch<0)||(ch>0xf0)||(!isprint(ch)))
-       {
-               fprintf(yyout," %s=%04x\n",name,ch &0xffff);
-       }
-       else
-       {
-               fprintf(yyout," %s='%c'\n",name,ch);
-       }
-}
-#endif
-
-yylex()
-{
-int nstr;
-extern int yyprevious;
-
-#ifdef YYDEBUG
-       fprintf(yyout,"yylex()\n");
-#endif
-
-       while((nstr = yylook()) >= 0)
-       {
-#ifdef YYDEBUG
-       fprintf(yyout,"yylex: nstr=%d\n",nstr);
-#endif
-yyfussy:
-       switch(nstr)
-       {
-               case 0:
-                       if(yywrap()) return(0);
-                       break;
-               case 1:
-                       return ID;
-               break;
-               case 2:
-                       return CON;
-               break;
-               case 3:
-                       ;
-               break;
-               case 4:
-                       return yytext[0];
-               break;
-               case -1:
-               break;
-               default:
-                       fprintf(yyout,"yylex: bad switch yylook %d\n",nstr);
-       }
-
-       }
-       
-#ifdef YYDEBUG
-       fprintf(yyout,"yylex: return 0\n");
-#endif
-       return(0);
-}
-/* end of yylex */
-
-int yyvstop[] =
-{
-       0,4,0,3,4,0,2,4,0,1,4,0,2,0,1,0,0
-};
-
-# define YYTYPE char
-struct yywork 
-{ 
-       YYTYPE verify, advance; 
-} yycrank[] =
-{
-       {0,0},  {0,0},  {1,3},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {1,4},  {1,3},
-       {0,0},  {0,0},  {0,0},  {0,0},
-
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {1,5},  {5,7},  {5,7},
-       {5,7},  {5,7},  {5,7},  {5,7},
-       {5,7},  {5,7},  {5,7},  {5,7},
-       {0,0},  {0,0},  {0,0},  {0,0},
-/* 0x40 */
-       {0,0},  {0,0},  {1,6},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {0,0},  {0,0},
-       {0,0},  {0,0},  {6,8},  {0,0},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-/* 0x80 */
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {0,0},  {0,0},
-
-#ifdef CHARSETHACK
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-
-/* 0xc0 */
-       {0,0},  {0,0},  {1,6},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {0,0},  {0,0},  {0,0},
-#endif
-       {0,0}
-};
-
-/*
-struct yysvf 
-{
-       struct yywork *yystoff;
-       struct yysvf *yyother;
-       int *yystops;
-};
-*/
-struct yysvf yysvec[] =
-{
-       {0,     0,      0},
-       {yycrank+-1,    0,              0},
-       {yycrank+0,     yysvec+1,       0},
-       {yycrank+0,     0,              yyvstop+1},
-       {yycrank+0,     0,              yyvstop+3},
-       {yycrank+2,     0,              yyvstop+6},
-       {yycrank+19,    0,              yyvstop+9},
-       {yycrank+0,     yysvec+5,       yyvstop+12},
-       {yycrank+0,     yysvec+6,       yyvstop+14},
-       {0,     0,      0}
-};
- /* 0x8d */
-/* struct yywork *yytop = yycrank+141; */
- /* 0xff */
-struct yywork *yytop = yycrank+255;
-
-struct yysvf *yybgin = yysvec+1;
-
-/*
-       WARNING: this table contains one entry per character
-                in the execution character set and must match it.
-*/
-char yymatch[] =
-{
-       00  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
-#ifdef CHARSETHACK
-       01  ,011 ,012 ,01  ,01  ,012  ,01  ,01  ,
-#else
-       01  ,011 ,012 ,01  ,01  ,01  ,01  ,01  ,
-#endif
-       01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
-       01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
-       011 ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
-       01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
-       '0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,
-       '0' ,'0' ,01  ,01  ,01  ,01  ,01  ,01  ,
-/* 0x40 (ascii) @A... (petscii) @a... */
-       01  ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
-       'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
-       'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
-       'A' ,'A' ,'A' ,01  ,01  ,01  ,01  ,'A' ,
-/* 0x60 (ascii) @a... */
-       01  ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
-       'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
-       'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
-       'A' ,'A' ,'A' ,01  ,01  ,01  ,01  ,01  ,
-#ifdef CHARSETHACK
-/* 0x80 */
-       0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
-       0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
-       0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
-       0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
-
-/* 0xc0 (petcii) @A... */
-       01  ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
-       'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
-       'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
-       'A' ,'A' ,'A' ,01  ,01  ,01  ,01  ,01  ,
-       0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
-       0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
-       0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
-#endif
-       0
-};
-char yyextra[] =
-{
-       0,0,0,0,0,0,0,0,0
-};
-
-/*     ncform  4.1     83/08/11        */
-
-int yylineno =1;
-# define YYU(x) x
-# define NLSTATE yyprevious=YYNEWLINE
-char yytext[YYLMAX];
-struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
-char yysbuf[YYLMAX];
-char *yysptr = yysbuf;
-int *yyfnd;
-extern struct yysvf *yyestate;
-int yyprevious = YYNEWLINE;
-
-unsigned char testbreak=0;
-
-yylook()
-{
-       register struct yysvf *yystate, **lsp;
-       register struct yywork *yyt;
-       struct yysvf *yyz;
-       int yych;
-       struct yywork *yyr;
-/*
-# ifdef LEXDEBUG
-       int debug;
-# endif
-*/
-       
-       char *yylastch;
-       
-       /* start off machines */
-
-/*
-# ifdef LEXDEBUG
-       debug = 1;
-# else
-       debug = 0;
-# endif
-*/
-
-# ifdef LEXDEBUG
-#define debug 1
-# else
-#define debug 0
-#endif
-       
-#ifdef YYDEBUG
-       fprintf(yyout,"yylook()\n");
-# endif
-       
-       if (!yymorfg)
-               yylastch = yytext;
-       else
-       {
-               yymorfg=0;
-               yylastch = yytext+yyleng;
-       }
-
-#ifdef YYDEBUG
-       fprintf(yyout,"yylook: yymorfg=%d\n",yymorfg);
-# endif
-               
-       for(;;)
-       {
-#ifdef YYDEBUG
-               fprintf(yyout,"yylook:  (outer loop)");
-               printchar("yyprevious",yyprevious);
-# endif
-               lsp = yylstate;
-               yyestate = yystate = yybgin;
-               if (yyprevious==YYNEWLINE) yystate++;
-
-               testbreak=0;
-               
-               for (;;)
-               {
-# ifdef LEXDEBUG
-                       fprintf(yyout,"yylook:   (inner loop) state %d\n",yystate-yysvec-1);
-# endif
-                       if(testbreak==5)
-                       {
-                               fprintf(yyout,"yylook:   error, aborted after 5 loops\n");
-                               exit(0);
-                       }
-                       testbreak++;
-                       
-                       yyt = yystate->yystoff;
-
-/*                     fprintf(yyout,"yylook:   yyt offs: %02x\n",yyt-yycrank); */
-
-                       
-                       if(yyt == yycrank)
-                       {               /* may not be any transitions */
-                               yyz = yystate->yyother;
-                               if(yyz == 0)break;
-                               if(yyz->yystoff == yycrank)break;
-                       }
-                       *yylastch++ = yych = input();
-
-# ifdef LEXDEBUG
-                       fprintf(yyout,"yylook:   input ");
-                       printchar("yych",yych);
-# endif
-                       
-               tryagain:
-
-# ifdef LEXDEBUG
-/*                     fprintf(yyout,"yylook:   yych=%02x yymatch[yych]=%02x\n",yych,yymatch[yych]); */
-                       fprintf(yyout,"yylook:   tryagain\n");
-# endif
-                       yyr = yyt;
-
-/*                     fprintf(yyout,"yylook:   yyr offs: %02x\n",yyr-yycrank); */
-                       
-                       if ( yyt > yycrank)
-                       {
-                               yyt = yyr + yych;
-                               if (yyt <= yytop && yyt->verify+yysvec == yystate)
-                               {
-                                       if(yyt->advance+yysvec == YYLERR)       /* error transitions */
-                                       {
-# ifdef LEXDEBUG
-                                               fprintf(yyout,"yylook:   unput (1) ");
-                                               printchar("*yylastch",*yylastch);
-# endif
-                                               unput(*--yylastch);
-                                               break;
-                                       }
-                                       *lsp++ = yystate = yyt->advance+yysvec;
-# ifdef LEXDEBUG
-                                       fprintf(yyout,"yylook:   continue (1)\n");
-# endif
-                                       goto contin;
-                               }
-# ifdef LEXDEBUG
-                               fprintf(yyout,"yylook:   ( yyt > yycrank)\n");
-# endif
-                       }
-# ifdef YYOPTIM
-                       else if(yyt < yycrank) /* r < yycrank */
-                       {               
-                               yyt = yyr = yycrank+(yycrank-yyt);
-# ifdef LEXDEBUG
-                               fprintf(yyout,"yylook:   compressed state\n");
-# endif
-                               yyt = yyt + yych;
-                               if(yyt <= yytop && yyt->verify+yysvec == yystate)
-                               {
-# ifdef LEXDEBUG
-                                       fprintf(yyout,"yylook:   (1)\n");
-# endif
-                                       if(yyt->advance+yysvec == YYLERR)       /* error transitions */
-                                       {
-# ifdef LEXDEBUG
-                                               fprintf(yyout,"yylook:   unput (2) ");
-                                               printchar("*yylastch",*yylastch);
-# endif
-                                               unput(*--yylastch);
-                                               break;
-                                       }
-                                       *lsp++ = yystate = yyt->advance+yysvec;
-# ifdef LEXDEBUG
-                                       fprintf(yyout,"yylook:   continue (2)\n");
-# endif
-                                       goto contin;
-                                       
-                               }
-# ifdef LEXDEBUG
-/*
-                               fprintf(yyout,"yylook:   yych=%02x yymatch[yych]=%02x\n",yych,yymatch[yych]);
-                               fprintf(yyout,"yylook:   yyt offs: %02x\n",yyt-yycrank);
-                               fprintf(yyout,"yylook:   yyr offs: %02x\n",yyr-yycrank);
-*/
-# endif
-                               yyt = yyr + YYU(yymatch[yych]);
-# ifdef LEXDEBUG
-/*
-                               fprintf(yyout,"yylook:   yyt offs: %02x <= yytop offs: %02x\n",yyt-yycrank,yytop-yycrank);
-                               fprintf(yyout,"yylook:   yyt->verify=%04x yysvec=%04x (yyt->verify+yysvec)=%04x == yystate=%04x\n",yyt->verify,yysvec,(yyt->verify+yysvec),yystate);
-*/
-                               fprintf(yyout,"yylook:   try fall back character\n");
-# endif
-                               if(yyt <= yytop && yyt->verify+yysvec == yystate) 
-                               {
-# ifdef LEXDEBUG
-                                       fprintf(yyout,"yylook:   (2a)\n");
-# endif
-                                       
-                                       if(yyt->advance+yysvec == YYLERR)       /* error transition */
-                                       {
-# ifdef LEXDEBUG
-/* cc65 compiles this ?!                                               fprintf(yyout,"yylook:   unput (3) ",); */
-                                               fprintf(yyout,"yylook:   unput (3) ");
-                                               printchar("*yylastch",*yylastch);
-# endif
-                                               unput(*--yylastch);
-                                               break;
-                                       }
-                                       *lsp++ = yystate = yyt->advance+yysvec;
-# ifdef LEXDEBUG
-/*                                     fprintf(yyout,"yylook:   yyt offs: %02x yyt->advance=%d\n",yyt-yycrank,yyt->advance); */
-                                       fprintf(yyout,"yylook:   continue (3)\n");
-# endif
-                                       goto contin;
-                                       
-                               }
-# ifdef LEXDEBUG
-                               fprintf(yyout,"yylook:   (2)\n");
-# endif
-                       }
-                       if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank)
-                       {
-# ifdef LEXDEBUG
-                               fprintf(yyout,"yylook:   fall back to state %d\n",yystate-yysvec-1);
-# endif
-                               goto tryagain;
-                       }
-# endif
-                       else
-                       {
-# ifdef LEXDEBUG
-                               fprintf(yyout,"yylook:   unput (4) ");
-                               printchar("*yylastch",*yylastch);
-# endif
-                               unput(*--yylastch);
-                               break;
-                       }
-               contin:
-# ifdef LEXDEBUG
-                       fprintf(yyout,"yylook:   contin state=%d\n",yystate-yysvec-1);
-# endif
-                       ;
-               }
-
-# ifdef LEXDEBUG
-               if((*(lsp-1)-yysvec-1)<0)
-               {
-                       fprintf(yyout,"yylook:  stopped (end)\n");
-               }
-               else
-               {
-                       fprintf(yyout,"yylook:  stopped at %d with\n",*(lsp-1)-yysvec-1);
-               }
-# endif
-               while (lsp-- > yylstate)
-               {
-                       *yylastch-- = 0;
-                       if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0)
-                       {
-                               yyolsp = lsp;
-                               if(yyextra[*yyfnd]) /* must backup */
-                               {               
-                                       while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate)
-                                       {
-                                               lsp--;
-# ifdef LEXDEBUG
-                                               fprintf(yyout,"yylook:   unput (5) ");
-                                               printchar("*yylastch",*yylastch);
-# endif
-                                               unput(*yylastch--);
-                                       }
-                               }
-                               yyprevious = YYU(*yylastch);
-                               yylsp = lsp;
-                               yyleng = yylastch-yytext+1;
-                               yytext[yyleng] = 0;
-# ifdef LEXDEBUG
-                               fprintf(yyout,"\nyylook:  match action %d\n",*yyfnd);
-                               fprintf(yyout,"yylook:  done loops: %d\n",testbreak);
-# endif
-                               return(*yyfnd++);
-                       }
-                       unput(*yylastch);
-               }
-               if (yytext[0] == 0  /* && feof(yyin) */)
-               {
-                       yysptr=yysbuf;
-# ifdef LEXDEBUG
-                       fprintf(yyout,"yylook:  done loops: %d\n",testbreak);
-# endif
-                       return(0);
-               }
-               yyprevious = yytext[0] = input();
-
-# ifdef LEXDEBUG
-               fprintf(yyout,"yylook:   input ");
-               printchar("yyprevious",yyprevious);
-# endif
-
-               if (yyprevious>0)
-                       output(yyprevious);
-               yylastch=yytext;
-# ifdef LEXDEBUG
-/*             if(debug)putchar('\n'); */
-# endif
-       }
-
-# ifdef LEXDEBUG
-       fprintf(yyout,"yylook: done loops: %d\n",testbreak);
-       fprintf(yyout,"yylook: return <void>\n");
-# endif
-}
-
-       
-yyback(p, m)
-       int *p;
-{
-       if (p==0) return(0);
-       while (*p)
-       {
-               if (*p++ == m)
-               {
-                       return(1);
-               }
-       }
-       return(0);
-}
-       /* the following are only used in the lex library */
-yyinput()
-{
-       int out=input();
-       
-#ifdef YYDEBUG
-       fprintf(yyout,"yylook:   input ");
-       printchar("out",out);
-#endif 
-       return(out);
-}
-yyoutput(c)
-  int c; 
-{
-       output(c);
-}
-yyunput(c)
-   int c; 
-{
-       unput(c);
-}
-
-main() 
-{
-        printf("main start\n");
-        infile = fopen("yacc.in","rb");
-        if (infile == NULL) {
-            return EXIT_FAILURE;
-        }
-        outfile = stdout;
-        yyparse();
-        fclose(infile);
-        printf("main end\n");
-        return 0;
-}
-
-/* yyerror - issue error message */
-yyerror(s) 
-char *s; 
-{
-        printf("[%s]\n", s);
-}
-short yyexca[] =
-{
--1, 1,
-       0, -1,
-       -2, 0,
-};
-
-# define YYNPROD 15
-# define YYLAST 249
-
-short yyact[]=
-{
-  12,   2,   9,   8,  17,  11,  25,  17,  15,  18,
-  16,  10,  18,  17,  15,   7,  16,  13,  18,   5,
-   3,   1,   0,  19,  20,   0,   0,  21,  22,  23,
-  24,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   6,  14,   0,
-   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-   0,   0,   0,   0,   0,   0,   0,   4,   6 
-};
-short yypact[]=
-{
--1000,  -9,-1000,   5,  -7, -59,-1000,-1000,-1000, -40,
- -29, -40, -40,-1000,-1000, -40, -40, -40, -40, -38,
- -35, -38, -38,-1000,-1000,-1000 
-};
-short yypgo[]=
-{
-   0,  21,  20,  17,  11 
-};
-short yyr1[]=
-{
-   0,   1,   1,   1,   1,   2,   4,   4,   4,   4,
-   4,   4,   4,   4,   3 
-};
-short yyr2[]=
-{
-   0,   0,   2,   3,   3,   3,   3,   3,   3,   3,
-   2,   3,   1,   1,   1 
-};
-short yychk[]=
-{
--1000,  -1,  10,  -2, 256,  -3, 257,  10,  10,  61,
-  -4,  45,  40,  -3, 258,  43,  45,  42,  47,  -4,
-  -4,  -4,  -4,  -4,  -4,  41 
-};
-short yydef[]=
-{
-   1,  -2,   2,   0,   0,   0,  14,   3,   4,   0,
-   5,   0,   0,  12,  13,   0,   0,   0,   0,  10,
-   0,   6,   7,   8,   9,  11 
-};
-
-# define YYFLAG -1000
-# define YYERROR goto yyerrlab
-# define YYACCEPT return(0)
-# define YYABORT return(1)
-
-/*     parser for yacc output  */
-
-#ifdef YYDEBUG
-int yydebug = 1; /* 1 for debugging */
-#else
-int yydebug = 0; /* 1 for debugging */
-#endif
-YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
-int yychar = -1; /* current input token number */
-int yynerrs = 0;  /* number of errors */
-short yyerrflag = 0;  /* error recovery flag */
-
-yyparse() 
-{
-       short yys[YYMAXDEPTH];
-       short yyj, yym;
-       register YYSTYPE *yypvt;
-       register short yystate, *yyps, yyn;
-       register YYSTYPE *yypv;
-       register short *yyxi;
-
-       yystate = 0;
-       yychar = -1;
-       yynerrs = 0;
-       yyerrflag = 0;
-       yyps= &yys[-1];
-       yypv= &yyv[-1];
-
- yystack:    /* put a state and value onto the stack */
-#ifdef YYDEBUG
-        printf("yyparse: yystack\n");
-#endif
-
-#ifdef YYDEBUG
-       printf("yyparse: yystate=%d, ", yystate);
-       printchar("yychar",yychar);
-#endif
-       if( ++yyps> &yys[YYMAXDEPTH] )
-       {
-               yyerror( "yyparse: yacc stack overflow" );
-               return(1);
-       }
-       *yyps = yystate;
-       ++yypv;
-       *yypv = yyval;
-
- yynewstate:
-#ifdef YYDEBUG
-        printf("yyparse: yynewstate\n");
-#endif
-
-       yyn = yypact[yystate];
-
-       if( yyn<= YYFLAG ) goto yydefault; /* simple state */
-
-#ifdef YYDEBUG
-        printf("yyparse: yynewstate (1)\n");
-#endif
-       
-       if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0;
-
-#ifdef YYDEBUG
-        
-       printf("yyparse: yynewstate yyn=%d ",yyn);
-       printchar("yychar",yychar);
-#endif
-       
-       if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault;
-
-#ifdef YYDEBUG
-        printf("yyparse: yynewstate (2)\n");
-#endif
-       
-       if( yychk[ yyn=yyact[ yyn ] ] == yychar ) /* valid shift */
-       { 
-               yychar = -1;
-               yyval = yylval;
-               yystate = yyn;
-
-#ifdef YYDEBUG
-                printf("yyparse: yynewstate (3)\n");
-#endif
-
-               if( yyerrflag > 0 ) --yyerrflag;
-               goto yystack;
-       }
-
- yydefault:
-#ifdef YYDEBUG
-        printf("yyparse: yydefault yystate=%d\n",yystate);
-#endif
-       /* default state action */
-
-       if( (yyn=yydef[yystate]) == -2 )
-       {
-               if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0;
-               /* look through exception table */
-
-               for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */
-
-               while( *(yyxi+=2) >= 0 )
-               {
-                       if( *yyxi == yychar ) break;
-               }
-               if( (yyn = yyxi[1]) < 0 ) return(0);   /* accept */
-       }
-
-#ifdef YYDEBUG
-        printf("yyparse: yyn=%d yyerrflag=%d\n",yyn,yyerrflag);
-#endif
-       
-       if( yyn == 0 ) /* error */
-       { 
-               /* error ... attempt to resume parsing */
-
-               switch( yyerrflag ){
-               case 0:   /* brand new error */
-
-                       yyerror( "yyparse: syntax error" );
-               yyerrlab:
-                       ++yynerrs;
-
-               case 1:
-               case 2: /* incompletely recovered error ... try again */
-
-                       yyerrflag = 3;
-
-                       /* find a state where "error" is a legal shift action */
-
-                       while ( yyps >= yys ) {
-                          yyn = yypact[*yyps] + YYERRCODE;
-                          if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
-                             yystate = yyact[yyn];  /* simulate a shift of "error" */
-                             goto yystack;
-                             }
-                          yyn = yypact[*yyps];
-
-                          /* the current yyps has no shift onn "error", pop stack */
-
-#ifdef YYDEBUG
-                          printf("yyparse: error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
-#endif
-                          --yyps;
-                          --yypv;
-                          }
-
-                       /* there is no state on the stack with an error shift ... abort */
-
-       yyabort:
-                       return(1);
-
-               case 3:  /* no shift yet; clobber input char */
-
-#ifdef YYDEBUG
-                       printf("yyparse: error recovery discards char ");
-                       printchar("yychar",yychar);
-#endif
-
-                       if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
-                       yychar = -1;
-                       goto yynewstate;   /* try again in the same state */
-
-                       }
-
-       }
-
-       /* reduction by production yyn */
-
-#ifdef YYDEBUG
-               printf("yyparse: reduce %d\n",yyn);
-#endif
-               yyps -= yyr2[yyn];
-               yypvt = yypv;
-               yypv -= yyr2[yyn];
-               yyval = yypv[1];
-               yym=yyn;
-                       /* consult goto table to find next state */
-               yyn = yyr1[yyn];
-               yyj = yypgo[yyn] + *yyps + 1;
-               if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
-               
-               switch(yym)
-               {
-                       case 4:
-                       { 
-                               yyerrok; 
-                       }
-                       break;
-                       case 5:
-                       { 
-                               printf("[STORE]\n");
-                       } 
-                       break;
-                       case 6:
-                       { 
-                               printf("[ADD]\n");
-                       } 
-                       break;
-                       case 7:
-                       { 
-                               printf("[NEG]\n[ADD]\n");
-                       } 
-                       break;
-                       case 8:
-                       { 
-                               printf("[MUL]\n");
-                       } 
-                       break;
-                       case 9:
-                       { 
-                               printf("[DIV]\n");
-                       } 
-                       break;
-                       case 10:
-                       { 
-                               printf("[NEG]\n"); 
-                       } 
-                       break;
-                       case 12:
-                       { 
-                               printf("[LOAD]\n"); 
-                       } 
-                       break;
-                       case 13:
-                       {       
-                               printf("[PUSH %s]\n", yytext);
-                       } 
-                       break;
-                       case 14:
-                       { 
-                               printf("[%s]\n", yytext);
-                       } 
-                       break;
-               }
-               
-       goto yystack;  /* stack new state and value */
-}
-       
-int yywrap() 
-{ 
-       return 1; 
-}
diff --git a/test/ref/yacc.in b/test/ref/yacc.in
deleted file mode 100755 (executable)
index 697b244..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-x=(e+1)*3/(3+7)
-
-
diff --git a/test/ref/yacc2.c b/test/ref/yacc2.c
deleted file mode 100644 (file)
index 78d654d..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Groepaz/Hitmen
-*/
-
-#include <stdio.h>
-
-# define YYTYPE char
-struct yywork 
-{ 
-       YYTYPE verify, advance; 
-} yycrank[] =
-{
-       {0,0},  {0,0},  {1,3},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {1,4},  {1,3},
-       {0,0},  {0,0},  {0,0},  {0,0},
-
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {1,5},  {5,7},  {5,7},
-       {5,7},  {5,7},  {5,7},  {5,7},
-       {5,7},  {5,7},  {5,7},  {5,7},
-       {0,0},  {0,0},  {0,0},  {0,0},
-/* 0x40 */
-       {0,0},  {0,0},  {1,6},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {0,0},  {0,0},
-       {0,0},  {0,0},  {6,8},  {0,0},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-/* 0x80 */
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {0,0},  {0,0},
-
-#ifdef CHARSETHACK
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-       {0,0},  {0,0},  {0,0},  {0,0},
-
-/* 0xc0 */
-       {0,0},  {0,0},  {1,6},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {6,8},  {6,8},  {6,8},
-       {6,8},  {0,0},  {0,0},  {0,0},
-#endif
-       {0,0}
-};
-
-struct yywork *yytop = yycrank+255;
-
-int yyvstop[] =
-{
-       0,4,0,3,4,0,2,4,0,1,4,0,2,0,1,0,0
-};
-
-struct yysvf 
-{
-       struct yywork *yystoff;
-       struct yysvf *yyother;
-       int *yystops;
-};
-
-struct yysvf yysvec[] =
-{
-       {0,     0,      0},
-       {yycrank+-1,    0,              0},
-       {yycrank+0,     yysvec+1,       0},
-       {yycrank+0,     0,              yyvstop+1},
-       {yycrank+0,     0,              yyvstop+3},
-       {yycrank+2,     0,              yyvstop+6},
-       {yycrank+19,    0,              yyvstop+9},
-       {yycrank+0,     yysvec+5,       yyvstop+12},
-       {yycrank+0,     yysvec+6,       yyvstop+14},
-       {0,     0,      0}
-};
-
-#if 0
-# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):GETCHAR())==('\n')?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
-// *yylastch++ = yych = input();
-void subtest1(void)
-{
-       *yylastch++ = yych = input();
-}
-#endif
-
-// do some bogus operation to destroy all registers etc
-static int bog=1234;
-#if 0
-void bogus(void)
-{
-       bog*=0x1234;
-}
-#else
-#define bogus()        bog+=0x1234
-#endif
-
-#if 1
-// yyt = yyt + yych;
-void subtest2(void)
-{
-       register struct yywork *yyt;
-       int yych;
-
-       yyt=yycrank;
-       yych=10;
-
-       bogus();
-       yyt = yyt + yych;
-
-       printf("yyt: %d %d\n",yyt->verify,yyt->advance);
-}
-#endif
-
-#if 1
-// if(yyt <= yytop && yyt->verify+yysvec == yystate)
-void subtest3(void)
-{
-       register struct yywork *yyt;
-       register struct yysvf *yystate;
-
-       yyt=yycrank;
-       yystate=yysvec;
-       
-       bogus();
-       if(yyt <= yytop && yyt->verify+yysvec == yystate)
-       {
-               printf("if ok %d %d\n",yyt->verify,yyt->advance);
-       }
-       else
-       {
-               printf("if not ok %d %d\n",yyt->verify,yyt->advance);
-       }
-}
-#endif
-
-short yyr2[]=
-{
-   0,   0,   2,   3,   3,   3,   3,   3,   3,   3,
-   2,   3,   1,   1,   1 
-};
-
-// yyps -= yyr2[yyn];
-void subtest4(void)
-{
-       register short *yyps, yyn;
-
-       yyps=0x8004;
-       yyn=0;
-
-       while(yyn<14)
-       {
-               bogus();
-               yyps -= yyr2[yyn];
-
-               yyn++;
-       }
-       printf("yyps: %04x\n",yyps);
-}
-
-#if 1
-
-int yylookret=10;
-yylook()
-{
-       yylookret--;
-       return yylookret;
-}
-
-// while((nstr = yylook()) >= 0)
-void subtest5(void)
-{
-       int nstr;
-
-       bogus();
-       while((nstr = yylook()) >= 0)
-       {
-               printf("nstr: %04x\n",nstr);
-               bogus();
-       }
-}
-#endif
-
-int main(void)
-{
-//    subtest1();
-    subtest2();
-    subtest3();
-    subtest4();
-    subtest5();
-
-    return 0;
-}
diff --git a/test/ref/yaccdbg.c b/test/ref/yaccdbg.c
deleted file mode 100644 (file)
index 41e1afc..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-  !!DESCRIPTION!! verbose/debug version of yacc.c (if one fails and the other does not you most likely have a stack related problem)
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-/*#define STANDALONE*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-#define INFILE   "yaccdbg.in"
-
-#define LEXDEBUG
-#define YYDEBUG
-
-#define YACCDBG
-#include "yacc.c"
diff --git a/test/val/Makefile b/test/val/Makefile
deleted file mode 100644 (file)
index 4ad8160..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-
-# makefile for the regression tests that return an error code on failure
-
-ifneq ($(shell echo),)
-  CMD_EXE := 1
-endif
-
-ifdef CMD_EXE
-  DEL = -del /f $(subst /,\,$1)
-else
-  DEL = $(RM) $1
-endif
-
-CC65FLAGS := -t sim6502
-SIM65FLAGS := -x 200000000
-
-CL65 := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65)
-SIM65 := $(if $(wildcard ../../bin/sim65*),../../bin/sim65,sim65)
-
-WORKDIR := ../../testwrk
-
-.PHONY: all clean
-
-SOURCES := $(wildcard *.c)
-TESTS := $(foreach option,. .o. .os. .osi. .osir. .oi. .oir. .or.,$(SOURCES:%.c=$(WORKDIR)/%$(option)prg))
-
-all: $(TESTS)
-
-# Some files have "K & R"-style syntax.  Therefore, some forward
-# function-declarations don't match the later function definitions.
-# Those programs fail when fastcall is used; but, the cdecl calling convention
-# tolerates those conflicts.  Therefore, make their functions default to cdecl.
-#
-$(WORKDIR)/cq4%prg $(WORKDIR)/cq71.%rg $(WORKDIR)/cq81%prg $(WORKDIR)/cq84%prg: CC65FLAGS += -Wc --all-cdecl
-
-$(WORKDIR)/%.prg: %.c
-       $(CL65) $(CC65FLAGS) $< -o $@
-       $(SIM65) $(SIM65FLAGS) $@
-
-$(WORKDIR)/%.o.prg: %.c
-       $(CL65) -O $(CC65FLAGS) $< -o $@
-       $(SIM65) $(SIM65FLAGS) $@
-
-$(WORKDIR)/%.os.prg: %.c
-       $(CL65) -Os $(CC65FLAGS) $< -o $@
-       $(SIM65) $(SIM65FLAGS) $@
-
-$(WORKDIR)/%.osi.prg: %.c
-       $(CL65) -Osi $(CC65FLAGS) $< -o $@
-       $(SIM65) $(SIM65FLAGS) $@
-
-$(WORKDIR)/%.osir.prg: %.c
-       $(CL65) -Osir $(CC65FLAGS) $< -o $@
-       $(SIM65) $(SIM65FLAGS) $@
-
-$(WORKDIR)/%.oi.prg: %.c
-       $(CL65) -Oi $(CC65FLAGS) $< -o $@
-       $(SIM65) $(SIM65FLAGS) $@
-
-$(WORKDIR)/%.oir.prg: %.c
-       $(CL65) -Oir $(CC65FLAGS) $< -o $@
-       $(SIM65) $(SIM65FLAGS) $@
-
-$(WORKDIR)/%.or.prg: %.c
-       $(CL65) -Or $(CC65FLAGS) $< -o $@
-       $(SIM65) $(SIM65FLAGS) $@
-
-clean:
-       @$(call DEL,$(TESTS))
-       @$(call DEL,$(SOURCES:.c=.o))
diff --git a/test/val/add1.c b/test/val/add1.c
deleted file mode 100644 (file)
index 381d12e..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
-  !!DESCRIPTION!! Addition tests
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-#ifdef SUPPORT_BIT_TYPES
-
-bit bit0 = 0;
-bit bit1 = 0;
-bit bit2 = 0;
-bit bit3 = 0;
-bit bit4 = 0;
-bit bit5 = 0;
-bit bit6 = 0;
-bit bit7 = 0;
-bit bit8 = 0;
-bit bit9 = 0;
-bit bit10 = 0;
-bit bit11 = 0;
-
-#endif
-
-unsigned int aint0 = 0;
-unsigned int aint1 = 0;
-unsigned char achar0 = 0;
-unsigned char achar1 = 0;
-unsigned char achar2 = 0;
-unsigned char achar3 = 0;
-unsigned char *acharP = 0;
-
-void done()
-{
-  dummy++;
-}
-
-void add_lit2uchar(void)
-{
-  achar0 = achar0 + 5;
-
-  if(achar0 != 5)
-    failures++;
-
-  achar0 += 10;
-
-  if(achar0 != 15)
-    failures++;
-
-  achar0 = achar0 +1;  /*Should be an increment */
-  if(achar0 != 16)
-    failures++;
-
-  for(achar1 = 0; achar1 < 100; achar1++)
-    achar0 += 2;
-
-  if(achar0 != 216)
-    failures++;
-}
-
-void add_uchar2uchar(void)
-{
-  achar1 = achar1 + achar0;
-
-  if(achar1 != 16)
-    failures++;
-
-  for(achar2 = 0; achar2<7; achar2++)
-    achar1 += achar0;
-
-  if(achar1 != 128)
-    failures++;
-}
-
-/* assumes
-  achar0 = 0
-  achar1 = 32
-  achar2, achar3 can be anything.
-*/
-void add_uchar2uchar2(void)
-{
-  achar0++;
-  achar0 = achar0 + 1;
-  achar0 = achar0 + 2;
-  achar0 = achar0 + 3;
-  if(achar0 != 7)
-    failures++;
-
-  achar1 += achar0;
-  if(achar1 != 39)
-    failures++;
-
-  achar2 = achar1 + achar0;
-  if(achar2 != 46)
-    failures++;
-
-  achar3 = achar2 + achar1 + achar0;
-  if(achar3 != 92)
-    failures++;
-}
-
-#ifdef SUPPORT_BIT_TYPES
-void add_bits(void)
-{
-  bit1 = bit0;
-
-  bit0 = 1;
-
-  if(bit1 != 0)
-    failures++;
-
-  bit1 = bit1+bit0;
-  if(bit1 != 1)
-    failures++;
-
-#ifdef SUPPORT_BIT_ARITHMETIC
-  bit2 = bit1+bit3;
-  if(!bit2)
-    failures++;
-
-  bit3 = bit4+bit5+bit6+bit7+bit0;
-  if(!bit3)
-    failures++;
-#endif
-}
-
-/* add_bit2uchar(void) - assumes bit0 = 1, achar0 = 7  */
-
-void add_bit2uchar(void)
-{
-  achar0 += bit0;
-
-  if(achar0 != 8)
-    failures++;
-
-  if(achar0 == bit0)
-    failures++;
-}
-
-void add_bit2uint(void)
-{
-  if(aint0 != bit11)
-    failures++;
-
-  aint0 += bit0;
-  if(aint0!=1)
-    failures++;
-}
-#endif
-
-int main(void)
-{
-  add_lit2uchar();
-
-  achar0=16;
-  achar1=0;
-  add_uchar2uchar();
-
-  achar0 = 0;
-  achar1 = 32;
-  add_uchar2uchar2();
-
-#ifdef SUPPORT_BIT_TYPES
-  add_bits();
-
-  add_bit2uchar();
-  add_bit2uint();
-#endif
-
-  success = failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/add2.c b/test/val/add2.c
deleted file mode 100644 (file)
index 90f0f41..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
-  !!DESCRIPTION!! Addition tests - mostly int's
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-#ifdef SIZEOF_INT_16BIT
-#if defined(__LINUX__) || defined(LINUX)
-unsigned short aint0 = 0;
-unsigned short aint1 = 0;
-unsigned short aint2 = 0;
-unsigned short aint3 = 0;
-
-#else
-unsigned int aint0 = 0;
-unsigned int aint1 = 0;
-unsigned int aint2 = 0;
-unsigned int aint3 = 0;
-
-#endif
-
-#else
-unsigned int aint0 = 0;
-unsigned int aint1 = 0;
-unsigned int aint2 = 0;
-unsigned int aint3 = 0;
-
-#endif
-
-unsigned char achar0 = 0;
-unsigned char achar1 = 0;
-unsigned char achar2 = 0;
-unsigned char achar3 = 0;
-unsigned char *acharP = 0;
-
-#ifdef SUPPORT_BIT_TYPES
-
-bit bit0 = 0;
-bit bit1 = 0;
-bit bit2 = 0;
-bit bit3 = 0;
-bit bit4 = 0;
-bit bit5 = 0;
-bit bit6 = 0;
-bit bit7 = 0;
-bit bit8 = 0;
-bit bit9 = 0;
-bit bit10 = 0;
-bit bit11 = 0;
-
-#endif
-
-void done()
-{
-  dummy++;
-}
-
-void add_lit2uint(void)
-{
-  aint0 = aint0 + 5;
-
-  if(aint0 != 5)
-    failures++;
-
-  aint0 += 10;
-
-  if(aint0 != 15)
-    failures++;
-
-  aint0 = aint0 +1;  /* Should be an increment */
-  if(aint0 != 16)
-    failures++;
-
-  for(aint1 = 0; aint1 < 100; aint1++)
-    aint0 += 2;
-
-  if(aint0 != 216)
-    failures++;
-}
-
-void add_uint2uint (void)
-{
-  aint1 = aint1 + aint0;
-
-  if(aint1 != 16)
-    failures++;
-
-  for(aint2 = 0; aint2<7; aint2++)
-    aint1 += aint0;
-
-  if(aint1 != 128)
-    failures++;
-}
-
-/* assumes
-  aint0 = 0
-  aint1 = 32
-  aint2, aint3 can be anything.
-*/
-void add_uint2uint2(void)
-{
-  aint0++;
-  aint0 = aint0 + 1;
-  aint0 = aint0 + 2;
-  aint0 = aint0 + 3;
-  if(aint0 != 7)
-    failures++;
-
-  aint1 += aint0;
-  if(aint1 != 0x27)
-    failures++;
-
-  aint2 = aint1 + aint0;
-  if(aint2 != 0x2e)
-    failures++;
-
-  aint3 = aint2 + aint1 + aint0;
-  if(aint3 != 0x5c)
-    failures++;
-
-  aint3 += 0xa0;
-  if(aint3 != 0xfc)
-    failures++;
-
-  aint3 += aint0;
-  if(aint3 != 0x103)
-    failures++;
-
-  aint1 += 0xffc0;
-  if(aint1 != 0xffe7)
-    failures++;
-
-  aint3 = aint2 + aint1 + aint0;
-  if(aint3 != 0x1c)
-    failures++;
-}
-
-#ifdef SUPPORT_BIT_TYPES
-void add_bits(void)
-{
-  bit1 = bit0;
-
-  bit0 = 1;
-
-  if(bit1 != 0)
-    failures++;
-
-  bit1 = bit1+bit0;
-  if(bit1 != 1)
-    failures++;
-
-  bit2 = bit1+bit3;
-  if(!bit2)
-    failures++;
-
-  bit3 = bit4+bit5+bit6+bit7+bit0;
-  if(!bit3)
-    failures++;
-}
-
-/* add_bit2uchar(void) - assumes bit0 = 1, aint0 = 7  */
-
-void add_bit2uchar(void)
-{
-  achar0 += bit0;
-
-  if(achar0 != 8)
-    failures++;
-
-  if(achar0 == bit0)
-    failures++;
-}
-
-void add_bit2uint(void)
-{
-  if(aint0 != bit11)
-    failures++;
-
-  aint0 += bit0;
-  if(aint0!=1)
-    failures++;
-}
-#endif
-
-/***********************************/
-
-void addlits(void)
-{
-  aint0 += 0x0001;
-
-  if(aint0 != 1)
-    failures++;
-
-  aint0 += 0x00;
-
-  if(aint0 != 1)
-    failures++;
-
-  aint0 += 0x00fe;
-  if(aint0 != 0x00ff)
-    failures++;
-
-  aint0 += 0x0001;
-
-  if(aint0 != 0x0100)
-    failures++;
-
-  aint0++;
-  if(aint0 != 0x0101)
-    failures++;
-
-  aint0 += 0x00ff;
-  if(aint0 != 0x0200)
-    failures++;
-
-  aint0 += 0x00a0;
-  if(aint0 != 0x02a0)
-    failures++;
-
-  aint0 += 0x0061;
-  if(aint0 != 0x0301)
-    failures++;
-
-  aint0 += 0x0100;
-  if(aint0 != 0x0401)
-    failures++;
-
-  aint0 += 0x0101;
-  if(aint0 != 0x0502)
-    failures++;
-
-  aint0 += 0x00fd;
-  if(aint0 != 0x05ff)
-    failures++;
-
-  aint0 += 0x0101;
-  if(aint0 != 0x0700)
-    failures++;
-
-  aint0 += 0x01ff;
-  if(aint0 != 0x08ff)
-    failures++;
-
-  aint0 += 0x01ff;
-  if(aint0 != 0x0afe)
-    failures++;
-
-  aint0 += 0xff02;
-  if(aint0 != 0x0a00)
-    failures++;
-
-  aint0 += 0xffff;
-  if(aint0 != 0x09ff)
-    failures++;
-
-  aint0 += 0xff01;
-  if(aint0 != 0x0900)
-    failures++;
-
-  aint0 += 0xff00;
-  if(aint0 != 0x0800)
-    failures++;
-
-  aint0 += 0xff01;
-  if(aint0 != 0x0701)
-    failures++;
-
-  aint0 += 0x0300;
-  if(aint0 != 0x0a01)
-    failures++;
-
-  aint0 += 0x03ff;
-  if(aint0 != 0x0e00)
-    failures++;
-
-  aint0 += 0x0301;
-  if(aint0 != 0x1101)
-    failures++;
-
-  aint0 += 0x03fe;
-  if(aint0 != 0x14ff)
-    failures++;
-
-  aint0 += 0x0301;
-  if(aint0 != 0x1800)
-    failures++;
-}
-
-int main(void)
-{
-  add_lit2uint();
-
-  aint0=16;
-  aint1=0;
-  add_uint2uint();
-
-  aint0 = 0;
-  aint1 = 32;
-  aint2 = 0;
-  add_uint2uint2();
-
-#ifdef SUPPORT_BIT_TYPES
-  add_bits();
-
-  achar0 = 7;
-  add_bit2uchar();
-
-  aint0 = 0;
-  bit0 = 1;
-  add_bit2uint();
-#endif
-
-  aint0 = 0;
-  addlits();
-
-  success = failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/add3.c b/test/val/add3.c
deleted file mode 100644 (file)
index c031f1d..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
-  !!DESCRIPTION!! Addition tests - mostly int's
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include "common.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <limits.h>
-
-unsigned char failures=0;
-
-char char0 = 0;
-char char1 = 0;
-char char2 = 0;
-
-/*
-  this test assumes:
-  sizeof(char) == 1
-  sizeof(int)  == 2
-  sizeof(long) == 4
-*/
-
-#ifdef REFERENCE
-
-/*
-   make sure the reference output uses types with
-   proper size
-*/
-
-#include <stdint.h>
-
-#ifdef SIZEOF_INT_16BIT
-int16_t int0 = 0;
-int16_t int1 = 0;
-#else
-int32_t int0 = 0;
-int32_t int1 = 0;
-#endif
-int32_t long0 = 0;
-int32_t long1 = 0;
-uint32_t ulong0 = 0;
-uint32_t ulong1 = 0;
-
-#else
-
-int int0 = 0;
-int int1 = 0;
-long long0 = 0;
-long long1 = 0;
-unsigned long ulong0 = 0;
-unsigned long ulong1 = 0;
-
-#endif
-
-#ifdef SUPPORT_BIT_TYPES
-
-bit bit0 = 0;
-bit bit1 = 0;
-bit bit2 = 0;
-bit bit3 = 0;
-bit bit4 = 0;
-bit bit5 = 0;
-bit bit6 = 0;
-bit bit7 = 0;
-bit bit8 = 0;
-bit bit9 = 0;
-bit bit10 = 0;
-bit bit11 = 0;
-
-#endif
-
-void done(char *name)
-{
-  printf("%s done - failures: %d\n", name, failures);
-
-  if(failures)
-    exit(failures);
-}
-
-void add_char2char(void)
-{
-  if(char0 != 4)
-    failures++;
-  if(char1 != 5)
-    failures++;
-
-  char0 = char0 + char1;
-
-  if(char0 != 9)
-    failures++;
-
-  char0 += 127;
-
-#if (!defined(REFCC) && defined(UNSIGNED_CHARS)) || (defined(REFCC) && defined(REFCC_UNSIGNED_CHARS))
-  if(char0 < 0)
-    failures++;
-
-  if(char0 != (127+9))
-    failures++;
-#else
-  if(char0 > 0)
-    failures++;
-
-  if(char0 != -0x78)
-    failures++;
-#endif
-
-  done("add_char2char");
-}
-
-void add_compound_char(void)
-{
-  char0 = char1+5;
-
-  if(char0 != 9)
-    failures++;
-
-  if((char0+char1) != 13)
-    failures++;
-
-  done("add_compound_char");
-}
-
-void add_int2int(void)
-{
-  if(int0 != 4)
-    failures++;
-  if(int1 != 5)
-    failures++;
-
-  int0 += int1;
-  if(int0 != 9)
-    failures++;
-
-  int0 += 0x7fff;
-  if(int0 != -0x7ff8)
-    failures++;
-
-  done("add_int2int");
-}
-
-void add_compound_int(void)
-{
-  int0 = int1+5;
-
-  if(int0 != 9)
-    failures++;
-
-  if((int0+int1) != 13)
-    failures++;
-
-  done("add_compound_int");
-}
-
-void add_lit2long(void)
-{
-  if(long0 != 0)
-    failures++;
-
-  long0++;
-
-  if(long0 != 1)
-    failures++;
-
-  long0 = long0 + 0xff;
-
-  if(long0 != 0x100)
-    failures++;
-
-  long0 = long0 + 0x100;
-  if(long0 != 0x200)
-    failures++;
-
-  long0 = long0 + 0xfe00;
-  if(long0 != 0x10000)
-    failures++;
-
-  long0 = long0 + 0xff0000;
-  if(long0 != 0x1000000)
-    failures++;
-
-  long0 = long0 + 0x7e000000;
-  if(long0 != 0x7f000000)
-    failures++;
-
-  /* wrap around zero */
-  long0 = long0 + 0x2000000;
-  if(long0 != -0x7f000000)
-    failures++;
-
-  long0 = long0 + 0x7f000000;
-  if(long0 != 0)
-    failures++;
-
-  done("add_lit2long");
-}
-
-void add_lit2ulong(void)
-{
-  if(ulong0 != 0)
-    failures++;
-
-  ulong0++;
-
-  if(ulong0 != 1)
-    failures++;
-
-  ulong0 = ulong0 + 0xff;
-
-  if(ulong0 != 0x100)
-    failures++;
-
-  ulong0 = ulong0 + 0x100;
-  if(ulong0 != 0x200)
-    failures++;
-
-  ulong0 = ulong0 + 0xfe00;
-  if(ulong0 != 0x10000)
-    failures++;
-
-  ulong0 = ulong0 + 0xff0000;
-  if(ulong0 != 0x1000000)
-    failures++;
-
-  ulong0 = ulong0 + 0x7e000000;
-  if(ulong0 != 0x7f000000)
-    failures++;
-
-  ulong0 = ulong0 + 0x2000000;
-  if(ulong0 != 0x81000000)
-    failures++;
-
-  /* wrap around zero */
-  ulong0 = ulong0 + 0x7f000000;
-  if(ulong0)
-    failures++;
-
-  done("add_lit2ulong");
-}
-
-int main(void)
-{
-  char0=4;
-  char1 = char0 + 1;
-  add_char2char();
-
-  char1=4;
-  add_compound_char();
-
-  int0 = 4;
-  int1 = int0 + 1;
-  add_int2int();
-
-  int1=4;
-  add_compound_int();
-
-  add_lit2long();
-  add_lit2ulong();
-
-  /* if not exit() */
-  return 0;
-}
diff --git a/test/val/add3a.c b/test/val/add3a.c
deleted file mode 100755 (executable)
index 4ca32d0..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-
-/*
-  !!DESCRIPTION!! Addition tests - mostly int's
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-
-static unsigned int failures = 0;
-
-/*
-  this test assumes:
-  sizeof(long) == 4
-
-  CAUTION: the wraparound behaviour is actually undefined, to get the "expected"
-           behaviour with GCC, use -fwrapv or -fno-strict-overflow
-
-  see: https://gcc.gnu.org/wiki/FAQ#signed_overflow
-*/
-
-#ifdef REFERENCE
-
-/*
-   make sure the reference output uses types with
-   proper size
-*/
-
-#include <stdint.h>
-
-int32_t long0 = 0;
-
-#else
-
-long long0 = 0;
-
-#endif
-
-void print(void)
-{
-#if defined(REFERENCE) && defined(REFCC_SIZEOF_LONG_64BIT)
-    printf("long0: %d\n", long0);
-#else
-    printf("long0: %ld\n", long0);
-#endif
-}
-
-int main(void)
-{
-    long0 = 0x7f000000L;
-    /* wrap around zero */
-    print();
-    long0 = long0 + 0x2000000L;
-    if(long0 != -0x7f000000L) {
-        printf("failed!\n");
-        failures++;
-    }
-    print();
-
-    long0 = 0x7f000000L;
-    /* wrap around zero */
-    print();
-    long0 = long0 + 0x2000000L;
-    print();
-    if(long0 != -0x7f000000L) {
-        printf("failed!\n");
-        failures++;
-    }
-    print();
-
-    return failures;
-}
diff --git a/test/val/add4.c b/test/val/add4.c
deleted file mode 100644 (file)
index f02a7fb..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success = 0;
-unsigned char failures = 0;
-unsigned char dummy = 0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-int int0 = 0;
-int int1 = 0;
-char char0 = 0;
-char char1 = 0;
-long long0 = 0;
-long long1 = 0;
-unsigned long ulong0 = 0;
-unsigned long ulong1 = 0;
-#define NULL 0
-char *cP0=NULL;
-char *cP1=NULL;
-int *iP0=NULL;
-int *iP1=NULL;
-
-void
-done ()
-{
-  dummy++;
-}
-
-/* pointer to char arithmetic */
-
-void pc_add(void)
-{
-  if(*cP1)
-    failures++;
-
-  *cP1 += 1;
-  if(*cP1 != 1)
-    failures++;
-
-  if(char0 != 1)
-    failures++;
-
-  char0++;
-
-  if(*cP1 != 2)
-    failures++;
-
-  char1 = char0 + *cP1;
-
-  if(char1 != 4)
-    failures++;
-}
-
-/* pointer to integer arithmetic */
-void pi_add(void)
-{
-  if(*iP0)
-    failures++;
-
-  *iP0 += 1;
-
-  if(*iP0 != 1)
-    failures++;
-
-  if(int0 != 1)
-    failures++;
-
-  int1 = int0 + *iP0;
-  if(int1 != 2)
-    failures++;
-}
-
-int main(void)
-{
-  cP1 = &char0;
-  pc_add();
-
-  iP0 = &int0;
-  pi_add();
-
-  success = failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/and1.c b/test/val/and1.c
deleted file mode 100644 (file)
index 2409fe6..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-unsigned int uint0 = 0;
-unsigned int uint1 = 0;
-unsigned char uchar0 = 0;
-unsigned char uchar1 = 0;
-unsigned long ulong0 = 0;
-
-void done()
-{
-  dummy++;
-}
-
-/* uchar0 = 0xff; */
-void and_lit2uchar(void)
-{
-  if(uchar0 != 0xff)
-    failures++;
-
-  uchar0 &= 0x7f;
-
-  if(uchar0 != 0x7f)
-    failures++;
-
-  uchar0 &= 0x3f;
-
-  if(uchar0 != 0x3f)
-    failures++;
-
-  uchar0 &= 0xdf;
-
-  if(uchar0 != 0x1f)
-    failures++;
-}
-
-void and_lit2uint(void)
-{
-  if(uint0 != 0xffff)
-    failures++;
-
-  uint0 &= 0x7fff;
-
-  if(uint0 != 0x7fff)
-    failures++;
-
-  uint0 &= 0x3fff;
-
-  if(uint0 != 0x3fff)
-    failures++;
-
-  uint0 &= 0xdfff;
-
-  if(uint0 != 0x1fff)
-    failures++;
-
-  uint0 &= 0xff7f;
-
-  if(uint0 != 0x1f7f)
-    failures++;
-
-  uint0 &= 0x0f0f;
-
-  if(uint0 != 0x0f0f)
-    failures++;
-
-  uint0 &= 0xfefe;
-
-  if(uint0 != 0x0e0e)
-    failures++;
-
-  uint0 &= 0xf0f0;
-
-  if(uint0 != 0)
-    failures++;
-}
-
-void and_lit2ulong(void)
-{
-  if(ulong0 != 0xffffffff)
-    failures++;
-
-  ulong0 &= 0x7fffffff;
-
-  if(ulong0 != 0x7fffffff)
-    failures++;
-
-  ulong0 &= 0xff00ffff;
-
-  if(ulong0 != 0x7f00ffff)
-    failures++;
-
-  ulong0 &= 0xfeff00ff;
-
-  if(ulong0 != 0x7e0000ff)
-    failures++;
-}
-
-/*-----------*/
-void and_uchar2uchar(void)
-{
-  uchar0 &= uchar1;
-
-  if(uchar0 != 0x0f)
-    failures++;
-
-  uchar1 &= 0xf7;
-
-  uchar0 = uchar1 & 0xfe;
-
-  if(uchar0 != 0x06)
-    failures++;
-}
-
-int main(void)
-{
-  uchar0 = 0xff;
-  and_lit2uchar();
-
-  uint0 = 0xffff;
-  and_lit2uint();
-
-  ulong0 = 0xffffffff;
-  and_lit2ulong();
-
-  uchar0 = 0xff;
-  uchar1 = 0x0f;
-  and_uchar2uchar();
-
-  success = failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/and2.c b/test/val/and2.c
deleted file mode 100644 (file)
index 672bd60..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-unsigned int uint0 = 0;
-unsigned int uint1 = 0;
-unsigned char uchar0 = 0;
-unsigned char uchar1 = 0;
-unsigned long ulong0 = 0;
-
-void done()
-{
-  dummy++;
-}
-
-/* uchar0 = 0x13; */
-void and_compound1(void)
-{
-  uchar0 = (uchar0 + 1) & 0x0f;
-  if(uchar0 != 4)
-    failures++;
-}
-
-/* uchar1 = 0x42; */
-void and_compound2(void)
-{
-  uchar0 = (uchar1 + 1) & 0x0f;
-  if(uchar0 != 3)
-    failures++;
-
-  if(uchar1 != 0x42)
-    failures++;
-}
-
-/* uchar0 = 0x13; */
-void or_compound1(void)
-{
-  uchar0 = (uchar0 + 0xe) | 0x0f;
-  if(uchar0 != 0x2f)
-    failures++;
-}
-
-/* uchar1 = 0x47; */
-void or_compound2(void)
-{
-  uchar0 = (uchar1 + 0xf) | 0x0f;
-  if(uchar0 != 0x5f)
-    failures++;
-
-  if(uchar1 != 0x47)
-    failures++;
-}
-
-/* uchar0 = 0x13; */
-void xor_compound1(void)
-{
-  uchar0 = (uchar0 + 1) ^ 0x0f;
-  if(uchar0 != 0x1b)
-    failures++;
-}
-
-/* uchar1 = 0x47; */
-void xor_compound2(void)
-{
-  uchar0 = (uchar1 + 0xf) ^ 0x0f;
-  if(uchar0 != 0x59)
-    failures++;
-
-  if(uchar1 != 0x47)
-    failures++;
-}
-
-/* uchar0 = 0x13; */
-void neg_compound1(void)
-{
-  uchar0 = ~(uchar0 + 1);
-  if(uchar0 != 0xeb)
-    failures++;
-}
-
-int main(void)
-{
-  uchar0 = 0x13;
-  and_compound1();
-
-  uchar1 = 0x42;
-  and_compound2();
-
-  uchar0 = 0x13;
-  or_compound1();
-
-  uchar1 = 0x47;
-  or_compound2();
-
-  uchar0 = 0x13;
-  xor_compound1();
-
-  uchar1 = 0x47;
-  xor_compound2();
-
-  uchar0 = 0x13;
-  neg_compound1();
-
-  success = failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/atoi-test.c b/test/val/atoi-test.c
deleted file mode 100644 (file)
index 5f5fa65..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-  !!DESCRIPTION!! A small test for atoi. Assumes twos complement
-  !!ORIGIN!!
-  !!LICENCE!!
-  !!AUTHOR!!
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include <errno.h>
-
-static unsigned int Failures = 0;
-
-static void CheckAtoi (const char* Str, int Val)
-{
-    int Res = atoi (Str);
-    if (Res != Val) {
-        printf ("atoi error in \"%s\":\n"
-                "  result = %d, should be %d\n", Str, Res, Val);
-        ++Failures;
-    }
-}
-
-int main (void)
-{
-    CheckAtoi ("\t +0A", 0);
-    CheckAtoi ("\t -0.123", 0);
-    CheckAtoi ("  -32  ", -32);
-    CheckAtoi (" +32  ", 32);
-    CheckAtoi ("0377", 377);
-    CheckAtoi (" 0377 ", 377);
-    CheckAtoi (" +0377 ", 377);
-    CheckAtoi (" -0377 ", -377);
-    CheckAtoi ("0x7FFF", 0);
-    CheckAtoi (" +0x7FFF", 0);
-    CheckAtoi (" -0x7FFF", 0);
-    printf ("Failures: %u\n", Failures);
-
-    return Failures;
-}
diff --git a/test/val/bool1.c b/test/val/bool1.c
deleted file mode 100644 (file)
index 2bdccd4..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-unsigned int aint0 = 0;
-unsigned int aint1 = 0;
-unsigned char achar0 = 0;
-unsigned char achar1 = 0;
-
-void done()
-{
-  dummy++;
-}
-
-void bool_or1(void)
-{
-  if( (achar0 >0) || (achar1 >0 ))
-    failures++;
-}
-
-void bool_or2(void)
-{
-  if( achar0 || achar1)
-    failures++;
-}
-
-void bool_test1(void)
-{
-  if( (achar0==0) || achar1)
-    failures++;
-}
-
-void bool_test2(void)
-{
-  if( (achar0==0) || aint0)
-    failures++;
-}
-
-void bool_and1(void)
-{
-  if( achar0 && achar1)
-    failures++;
-}
-
-void bin_or1(void)
-{
-  char t;
-
-  t = achar0 | achar1;
-  if(t)
-    failures++;
-}
-
-void bin_xor1(void)
-{
-  if(achar0 ^ achar1)
-    failures++;
-}
-
-void bool_test3(void)
-{
-  if((achar0 == 0x42) || (achar1 == 42))
-    failures++;
-}
-
-void bool_or_lit1(void)
-{
-  achar0 |= 0x0f;
-
-  if(achar0 > 0x10)
-    failures++;
-
-  if( (achar0 | 0x10) > 0xf0)
-    failures++;
-}
-
-void bool_and_lit1(void)
-{
-  achar0 &= 0xf0;
-
-  if(achar0 > 0x10)
-    failures++;
-
-  if( (achar0 & 0x10) > 0xf0)
-    failures++;
-
-  achar0 &= 0xef;
-}
-
-int  main(void)
-{
-  bool_or1();
-  bool_or2();
-  bool_and1();
-  bin_or1();
-  bin_xor1();
-
-  achar0++;
-  bool_and1();
-  bool_test1();
-  bool_test2();
-  bool_test3();
-
-  achar0--; achar1++;
-  bool_and1();
-
-  achar0=0;
-  achar1=0;
-
-  bool_or_lit1();
-  bool_and_lit1();
-
-  success = failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/bool3.c b/test/val/bool3.c
deleted file mode 100644 (file)
index 73c03a3..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
-  !!DESCRIPTION!! Compound comparisons
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-bit bit1 = 0;
-#endif
-unsigned int ui0 = 0;
-unsigned int ui1 = 0;
-unsigned char uc0 = 0;
-unsigned char uc1 = 0;
-unsigned long uL0 = 0;
-unsigned long uL1 = 0;
-
-void done()
-{
-  dummy++;
-}
-
-void compound_compare_uc(void)
-{
-  failures += (uc0 != uc1);
-}
-
-void compound_compare_ui(void)
-{
-  failures += (ui0 != ui1);
-}
-
-void compound_compare_ul(void)
-{
-  failures += (uL0 != uL1);
-}
-
-void compound_compare_uc_lit(void)
-{
-  failures += (uc0 != 0xff);
-  failures += (uc0 != 0xff);
-  failures += (uc0 == 0);
-}
-
-int  main(void)
-{
-  compound_compare_uc();
-  compound_compare_ui();
-  compound_compare_ul();
-
-  uc0 = 0xff;
-  compound_compare_uc_lit();
-
-  success = failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/call1.c b/test/val/call1.c
deleted file mode 100644 (file)
index c7ac920..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success = 0;
-unsigned char failures = 0;
-unsigned char dummy = 0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-unsigned int uint0 = 0;
-unsigned int uint1 = 0;
-unsigned char uchar0 = 0;
-unsigned char uchar1 = 0;
-
-unsigned char call3 (void);
-
-void
-done ()
-{
-  dummy++;
-}
-
-void
-call1 (unsigned char uc0)
-{
-  if (uc0)
-    failures++;
-}
-
-void
-call2 (unsigned int ui0)
-{
-  if (ui0)
-    failures++;
-}
-
-unsigned char
-call3 (void)
-{
-  if (uchar0)
-    failures++;
-
-  return (failures);
-}
-
-unsigned int
-call4 (void)
-{
-  unsigned int i = 0;
-
-  if (uint0)
-    i++;
-
-  return (i);
-}
-
-unsigned int
-call5 (unsigned int k)
-{
-  if (k)
-    failures++;
-
-  return (k);
-}
-
-unsigned char 
-call6a(unsigned char uc)
-{
-  if(uc>uchar1)
-    return 1;
-  else
-    return 0;
-}
-
-unsigned char
-call6(unsigned char uc)
-{
-  return(call6a(uc));
-}
-
-unsigned int 
-call7a(unsigned int ui)
-{
-  if(ui)
-    return 1;
-  else
-    return 0;
-}
-
-unsigned int
-call7(unsigned int ui)
-{
-  return(call7a(ui));
-}
-
-unsigned char
-call8(unsigned char uc1,unsigned char uc2)
-{
-  return uc1+uc2;
-}
-
-void call9(unsigned int ui1, unsigned int ui2)
-{
-  if(ui1 != 0x1234)
-    failures++;
-  if(ui2 != 0x5678)
-    failures++;
-}
-
-int
-main (void)
-{
-  call1 (uchar0);
-  call2 (uint0);
-  uchar1 = call3 ();
-  uint1 = call4 ();
-  if (uint1)
-    failures++;
-
-  uint1 = call5 (uint0);
-  if (uint1)
-    failures++;
-
-  if(call6(uchar0))
-    failures++;
-
-  if(call7(0))
-    failures++;
-
-  if(!call7(1))
-    failures++;
-
-  if(!call7(0xff00))
-    failures++;
-
-  uchar0=4;
-  uchar1=3;
-  uchar0 = call8(uchar0,uchar1);
-
-  if(uchar0 != 7)
-    failures++;
-
-  call9(0x1234,0x5678);
-
-  success = failures;
-  done ();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/casttochar.c b/test/val/casttochar.c
deleted file mode 100755 (executable)
index d492f6b..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-
-/*
-  !!DESCRIPTION!! Cast to char
-  !!ORIGIN!!      Piotr Fusik
-  !!LICENCE!!     PD
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-
-static unsigned int failures = 0;
-
-int f1(int i, int j) {
-    return (signed char) (i + 1) == j;
-}
-
-int f2(int i, int j) {
-    return (unsigned char) (i + 1) == j;
-}
-
-int f3(int i, int j) {
-    return (char) (i + 1) == j;
-}
-
-int main(void)
-{
-    printf("f1: got :%04x ", f1(0x1234, 0x35));
-    if(f1(0x1234, 0x35) == 0) {
-        printf("- failed");
-        failures++;
-    }
-    printf("\n");
-
-    printf("f2: got :%04x ", f2(0x1234, 0x35));
-    if(f2(0x1234, 0x35) == 0) {
-        printf("- failed");
-        failures++;
-    }
-    printf("\n");
-
-    printf("f3: got :%04x ", f3(0x1234, 0x35));
-    if(f3(0x1234, 0x35) == 0) {
-        printf("- failed");
-        failures++;
-    }
-    printf("\n");
-
-    return failures;
-}
diff --git a/test/val/cc65091020.c b/test/val/cc65091020.c
deleted file mode 100644 (file)
index d23b70a..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-  !!DESCRIPTION!! bit field bug
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Johan Kotlinski
-*/
-
-#include <stdio.h>
-#include <assert.h>
-
-struct {
-    int foo : 7;
-    int bar : 4;
-} baz = { 0, 2 };
-
-int main() {
-    char bar = baz.bar;
-
-    assert(2 == bar);
-
-    printf("it works :)\n");
-
-    /* if not assert() */
-    return 0;
-}
-
-/* Assert fails. (SVN rev 4381) */
\ No newline at end of file
diff --git a/test/val/cc65141002.c b/test/val/cc65141002.c
deleted file mode 100755 (executable)
index ae5cd3d..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
-  !!DESCRIPTION!! forgetting to emit labels
-  !!ORIGIN!!      Testsuite
-  !!LICENCE!!     Public Domain
-*/
-
-/*
-    http://www.cc65.org/mailarchive/2014-10/11673.html
-    http://www.cc65.org/mailarchive/2014-10/11675.html
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-
-struct udata {
-        int     (*u_sigvec[16])();
-        int     u_argn;
-        int     u_argn1;
-};
-
-struct udata udata;
-
-#define sig (int)udata.u_argn
-#define func (int (*)())udata.u_argn1
-
-int _signal(void)
-{
-        if (func != 0) {
-                goto nogood;
-        }
-        udata.u_sigvec[sig] = func;
-        return 0;
-
-nogood:
-        return (-1);
-}
-
-int main(int n,char **args)
-{
-    _signal();
-    printf("it works\n");
-
-    return 0;
-}
diff --git a/test/val/cc65141022.c b/test/val/cc65141022.c
deleted file mode 100755 (executable)
index 1d7792c..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-
-/*
-  !!DESCRIPTION!! struct base address dereferencing bug
-  !!ORIGIN!!      Testsuite
-  !!LICENCE!!     Public Domain
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-
-struct yywork
-{
-        char verify, advance;
-} yycrank[] =
-{
-        {0,0}
-};
-
-struct yysvf
-{
-        struct yywork *yystoff;
-} yysvec[1];
-
-unsigned char fails = 0;
-
-int main(int n, char **args)
-{
-    struct yysvf *yystate = yysvec;
-    struct yywork *yyt;
-
-    yystate->yystoff = yycrank;
-    yyt = yystate->yystoff;
-
-    if(yyt == yycrank) {
-        printf("yyt == yycrank (ok)\n");
-    } else {
-        printf("yyt != yycrank (fail)\n");
-        ++fails;
-    }
-
-    if(yyt == yystate->yystoff) {
-        printf("yyt == yystate->yystoff (ok)\n");
-    } else {
-        printf("yyt != yystate->yystoff (fail)\n");
-        ++fails;
-    }
-
-    if(yycrank == yystate->yystoff) {
-        printf("yycrank == yystate->yystoff (ok)\n");
-    } else {
-        printf("yycrank != yystate->yystoff (fail)\n");
-        ++fails;
-    }
-
-    printf("fails: %d\n", fails);
-    return fails;
-}
diff --git a/test/val/cc65150311.c b/test/val/cc65150311.c
deleted file mode 100644 (file)
index cd644f4..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-  !!DESCRIPTION!! function pointer bugs
-  !!ORIGIN!!      testsuite
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Greg
-*/
-
-/*
-  see: http://www.cc65.org/mailarchive/2015-03/11726.html
-  and: http://www.cc65.org/mailarchive/2015-03/11734.html
-*/
-
-static int func(void) {return 0;}
-static int (*p)(void);
-static int n;
-
-int main(void) {
-
-    p = func;
-    n = (p == &func);
-    n = (p == func);
-
-/* the following are not valid C and should go into seperate tests that MUST fail */
-/*
-    ++p;
-    n = (p > &func);
-    n = (p > func);
-    n = func - func;
-    n = func - &func;
-    n = &func - func;
-    n = &func - &func;
-    n = p - &func;
-    n = p - func;
-    n = &func - p;
-    n = func - p;
-*/
-    return 0;
-}
diff --git a/test/val/common.h b/test/val/common.h
deleted file mode 100644 (file)
index dada61a..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#define NO_OLD_FUNC_DECL
-#define NO_TYPELESS_INT
-#define NO_TYPELESS_INT_PTR
-#define MAIN_RETURNS_INT
-#define NO_IMPLICIT_FUNC_PROTOTYPES
-#define NO_FLOATS
-#define NO_WCHAR
-#define NO_EMPTY_FUNC_ARGS
-#define NO_SLOPPY_STRUCT_INIT
-#define NO_FUNCS_TAKE_STRUCTS
-#define NO_FUNCS_RETURN_STRUCTS
-#define CAST_STRUCT_PTR
-#define NO_TYPELESS_STRUCT_PTR
-#define NO_IMPLICIT_FUNCPTR_CONV
-#define SIZEOF_INT_16BIT
-#define SIZEOF_LONG_32BIT
-#define UNSIGNED_CHARS
-#define UNSIGNED_BITFIELDS
diff --git a/test/val/compare1.c b/test/val/compare1.c
deleted file mode 100644 (file)
index 0127e3b..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
-  !!DESCRIPTION!! test compare
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-/*
-   compare.c
-*/
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-bit bit1 = 0;
-#endif
-
-unsigned char success = 0;
-unsigned char failures = 0;
-unsigned char dummy = 0;
-
-unsigned char achar0 = 0;
-unsigned char achar1 = 0;
-unsigned int aint0 = 0;
-unsigned int aint1 = 0;
-
-char schar0 = 0;
-char schar1 = 0;
-
-void
-done ()
-{
-  dummy++;
-}
-
-/* achar0 should be zero */
-
-void
-compare_char_to_lits1 (void)
-{
-  if (achar0)
-    failures++;
-
-  if (achar0 == 1)
-    failures++;
-
-  if (achar0 == 7)
-    failures++;
-
-  if (achar0 != 0)
-    failures++;
-}
-
-/* achar0 should be `5' */
-void
-compare_char_to_lits2 (void)
-{
-  if (!achar0)
-    failures++;
-
-  if (achar0 == 1)
-    failures++;
-
-  if (achar0 == 7)
-    failures++;
-
-  if (achar0 != 5)
-    failures++;
-}
-
-/* achar0 should equal achar1 */
-void
-compare_char_to_char1 (void)
-{
-  if (achar0 != achar1)
-    failures++;
-
-  if (schar0 != schar1)
-    failures++;
-}
-
-/* achar0 should be different than achar1 */
-void
-compare_char_to_char2 (void)
-{
-  if (achar0 == achar1)
-    failures++;
-}
-
-/* aint0 should be zero */
-
-void
-compare_int_to_lits1 (void)
-{
-  if (aint0)
-    failures++;
-
-  if (aint0 == 1)
-    failures++;
-
-  if (aint0 == 7)
-    failures++;
-
-  if (aint0 != 0)
-    failures++;
-}
-
-/* aint0 should be `5' */
-void
-compare_int_to_lits2 (void)
-{
-  if (!aint0)
-    failures++;
-
-  if (aint0 == 1)
-    failures++;
-
-  if (aint0 == 7)
-    failures++;
-
-  if (aint0 != 5)
-    failures++;
-}
-
-/* aint0 should be `0x1234' */
-void
-compare_int_to_lits3 (void)
-{
-  if (!aint0)
-    failures++;
-
-  if (aint0 == 1)
-    failures++;
-
-  if (aint0 == 7)
-    failures++;
-
-  if (aint0 != 0x1234)
-    failures++;
-}
-
-/* aint0 should equal aint1 */
-void
-compare_int_to_int1 (void)
-{
-  if (aint0 != aint1)
-    failures++;
-}
-
-/* aint0 should be different than aint1 */
-void
-compare_int_to_int2 (void)
-{
-  if (aint0 == aint1)
-    failures++;
-}
-
-int
-main (void)
-{
-  compare_char_to_lits1 ();
-  compare_char_to_char1 ();
-  achar0 = 5;
-  compare_char_to_lits2 ();
-  compare_char_to_char2 ();
-
-  compare_int_to_lits1 ();
-  aint0 = 5;
-  compare_int_to_lits2 ();
-  aint0 = 0x1234;
-  compare_int_to_lits3 ();
-  compare_int_to_int2 ();
-  aint0 = 0;
-  compare_int_to_int1 ();
-
-  success = failures;
-  done ();
-
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/compare10.c b/test/val/compare10.c
deleted file mode 100644 (file)
index 861a02d..0000000
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
-  !!DESCRIPTION!! Signed comparisons of the form:  (variable>=LIT)
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-/* This regression test exercises all of the boundary
- conditions in literal less than comparisons. There
- are numerous opportunities to optimize these comparison
- and each one has an astonishing capability of failing
- a boundary condition.
-*/
-unsigned char success = 0;
-unsigned char failures = 0;
-unsigned char dummy = 0;
-unsigned char result = 0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-int int0 = 0;
-int int1 = 0;
-unsigned char uchar0 = 0;
-unsigned char uchar1 = 0;
-signed char char0 = 0;
-signed char char1 = 0;
-char long0 = 0;
-char long1 = 0;
-
-/* *** NOTE ***  This particular test takes quite a while to run
- * ~ 10,000,000 instruction cycles. (2.5 seconds on a 20Mhz PIC).
- * The WDT will reset the CPU if it's enabled. So disable it...
-*/
-
-void
-done ()
-{
-  dummy++;
-}
-
-void c_char_gte_lit1(unsigned char expected_result)
-{
-  result = 0;
-
-  if(char0 >= -0x7f)
-    result |= 1;
-
-  if(char0 >= -1)
-    result |= 2;
-
-  if(char0 >= 0)
-    result |= 4;
-
-  if(char0 >= 1)
-    result |= 8;
-
-  if(char0 >= 0x7e)
-    result |= 0x10;
-  
-  if(char0 >= 0x7f)
-    result |= 0x20;
-
-  if(result != expected_result)
-  {
-/*    LOG_ERROR(1); */
-    printf("c_char_gte_lit1: char %02x - result %02x expected: %02x\n",char0,result,expected_result);
-    failures++;
-  }
-
-/*  printf("char %02x - %02x failures: %d\n",char0,expected_result,failures); */
-}
-
-void char_compare(void)
-{
-  char0 = 0x7f;
-  c_char_gte_lit1(0x3f);
-
-  char0 = 0x7e;
-  c_char_gte_lit1(0x1f);
-
-  char0 = 0x40;
-  c_char_gte_lit1(0x0f);
-
-  char0 = 0x2;
-  c_char_gte_lit1(0x0f);
-
-  char0 = 0x1;
-  c_char_gte_lit1(0x0f);
-
-  char0 = 0;
-  c_char_gte_lit1(0x07);
-
-  char0 = -1;
-  c_char_gte_lit1(0x03);
-
-  char0 = -2;
-  c_char_gte_lit1(0x01);
-
-  char0 = -0x40;
-  c_char_gte_lit1(0x01);
-
-  char0 = -0x7e;
-  c_char_gte_lit1(0x01);
-
-  char0 = -0x7f;
-  c_char_gte_lit1(0x01);
-
-  char0 = 0x80;
-  c_char_gte_lit1(0x00);
-
-  /* Now test entire range */
-
-  for(char0=1; char0 != 0x7e; char0++)
-    c_char_gte_lit1(0x0f);
-
-  for(char0=-0x7f; char0 != -1; char0++)
-    c_char_gte_lit1(0x01);
-}
-
-void c_int_gte_lit1(unsigned char expected_result)
-{
-  result = 0;
-
-  if(int0 >= 0)
-    result |= 1;
-
-  if(int0 >= 1)
-    result |= 2;
-
-  if(int0 >= 0xff)
-    result |= 4;
-
-  if(int0 >= 0x100)
-    result |= 8;
-
-  if(int0 >= 0x0101)
-    result |= 0x10;
-  
-  if(int0 >= 0x01ff)
-    result |= 0x20;
-  
-  if(int0 >= 0x0200)
-    result |= 0x40;
-
-  if(int0 >= 0x0201)
-    result |= 0x80;
-
-  if(result != expected_result)
-    failures=1;
-}
-
-void int_compare1(void)
-{
-  int0 = -1;
-  c_int_gte_lit1(0x00);
-
-  int0 = 0;
-  c_int_gte_lit1(0x01);
-
-  int0 = 1;
-  c_int_gte_lit1(0x03);
-
-  int0 = 2;
-  c_int_gte_lit1(0x03);
-
-  int0 = 0xfe;
-  c_int_gte_lit1(0x03);
-
-  int0 = 0xff;
-  c_int_gte_lit1(0x07);
-
-  int0 = 0x100;
-  c_int_gte_lit1(0x0f);
-
-  int0 = 0x101;
-  c_int_gte_lit1(0x1f);
-
-  int0 = 0x102;
-  c_int_gte_lit1(0x1f);
-
-  int0 = 0x1fe;
-  c_int_gte_lit1(0x1f);
-
-  int0 = 0x1ff;
-  c_int_gte_lit1(0x3f);
-
-  int0 = 0x200;
-  c_int_gte_lit1(0x7f);
-
-  int0 = 0x201;
-  c_int_gte_lit1(0xff);
-
-  int0 = 0x7f00;
-  c_int_gte_lit1(0xff);
-
-  /* now check contiguous ranges */
-
-  for(int0 = -0x7fff; int0 != -1; int0++)
-    c_int_gte_lit1(0x00);
-
-  for(int0 = 1; int0 != 0xff; int0++)
-    c_int_gte_lit1(0x03);
-
-  for(int0 = 0x201; int0 != 0x7fff; int0++)
-    c_int_gte_lit1(0xff);
-}
-
-void c_int_gte_lit2(unsigned char expected_result)
-{
-  result = 0;
-
-  if(int0 >= -0x7fff)
-    result |= 1;
-
-  if(int0 >= -0x7f00)
-    result |= 2;
-
-  if(int0 >= -0x7eff)
-    result |= 4;
-
-  if(int0 >= -0x7e00)
-    result |= 8;
-
-  if(int0 >= -0x0101)
-    result |= 0x10;
-  
-  if(int0 >= -0x0100)
-    result |= 0x20;
-  
-  if(int0 >= -0xff)
-    result |= 0x40;
-
-  if(int0 >= -1)
-    result |= 0x80;
-
-  if(result != expected_result)
-    failures=1;
-}
-
-void int_compare2(void)
-{
-  int0 = -0x7fff;
-  c_int_gte_lit2(0x01);
-
-  int0 = -0x7f00;
-  c_int_gte_lit2(0x03);
-
-  int0 = -0x7eff;
-  c_int_gte_lit2(0x07);
-
-  int0 = -0x7e00;
-  c_int_gte_lit2(0x0f);
-
-  int0 = -0x7dff;
-  c_int_gte_lit2(0x0f);
-
-  int0 = -0x4567;
-  c_int_gte_lit2(0x0f);
-
-  int0 = -0x200;
-  c_int_gte_lit2(0x0f);
-
-  int0 = -0x102;
-  c_int_gte_lit2(0x0f);
-
-  int0 = -0x101;
-  c_int_gte_lit2(0x1f);
-
-  int0 = -0x100;
-  c_int_gte_lit2(0x3f);
-
-  int0 = -0xff;
-  c_int_gte_lit2(0x7f);
-
-  int0 = -0x02;
-  c_int_gte_lit2(0x7f);
-
-  int0 = -0x01;
-  c_int_gte_lit2(0xff);
-
-  int0 = 0;
-  c_int_gte_lit2(0xff);
-
-  int0 = 1;
-  c_int_gte_lit2(0xff);
-
-  int0 = 0x7fff;
-  c_int_gte_lit2(0xff);
-
-  /* now check contiguous ranges */
-
-  for(int0 = -0x7fff; int0 != -0x7f00; int0++)
-    c_int_gte_lit2(0x01);
-
-  for(int0 = -0x7e00; int0 != -0x101; int0++)
-    c_int_gte_lit2(0x0f);
-
-  for(int0 = -1; int0 != 0x7fff; int0++)
-    c_int_gte_lit2(0xff);
-}
-
-int
-main (void)
-{
-  char_compare();
-  printf("failures: %d\n",failures);
-  int_compare1();
-  printf("failures: %d\n",failures);
-  int_compare2();
-
-  success = failures;
-  done ();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/compare2.c b/test/val/compare2.c
deleted file mode 100644 (file)
index afc2db8..0000000
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success = 0;
-unsigned char failures = 0;
-unsigned char dummy = 0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-unsigned int aint0 = 0;
-unsigned int aint1 = 0;
-unsigned char achar0 = 0;
-unsigned char achar1 = 0;
-
-void
-done ()
-{
-  dummy++;
-}
-
-void
-char_lt_char (void)
-{
-  if (achar0 < achar1)
-    failures++;
-}
-
-void
-char_gt_char (void)
-{
-  if (achar1 > achar0)
-    failures++;
-}
-
-void
-char_lte_char (void)
-{
-  if (achar0 <= achar1)
-    failures++;
-}
-
-void
-char_gte_char (void)
-{
-  if (achar1 >= achar0)
-    failures++;
-}
-
-void
-char_lt_lit (void)
-{
-  if (achar1 < 0x10)
-    failures++;
-}
-
-void
-char_gt_lit (void)
-{
-  if (achar1 > 0x10)
-    failures++;
-}
-
-void
-char_lte_lit (void)
-{
-  if (achar1 <= 0x0f)
-    failures++;
-}
-
-void
-char_gte_lit (void)
-{
-  if (achar1 >= 0x11)
-    failures++;
-}
-
-/* now repeat test using negative logic */
-void
-char_lt_char_else (void)
-{
-  if (achar0 >= achar1)
-    dummy++;
-  else
-    failures++;
-}
-
-void
-char_gt_char_else (void)
-{
-  if (achar1 <= achar0)
-    dummy++;
-  else
-    failures++;
-}
-
-void
-char_lte_char_else (void)
-{
-  if (achar0 > achar1)
-    dummy++;
-  else
-    failures++;
-}
-
-void
-char_gte_char_else (void)
-{
-  if (achar1 < achar0)
-    dummy++;
-  else
-    failures++;
-}
-
-void
-char_lt_lit_else (void)
-{
-  if (achar1 >= 0x10)
-    dummy++;
-  else
-    failures++;
-}
-
-void
-char_gt_lit_else (void)
-{
-  if (achar1 <= 0x10)
-    dummy++;
-  else
-    failures++;
-}
-
-void
-char_lte_lit_else (void)
-{
-  if (achar1 > 0x0f)
-    dummy++;
-  else
-    failures++;
-}
-
-void
-char_gte_lit_else (void)
-{
-  if (achar1 < 0x11)
-    dummy++;
-  else
-    failures++;
-}
-
-/* ints */
-
-void
-int_lt_int (void)
-{
-  if (aint0 < aint1)
-    failures++;
-}
-
-void
-int_gt_int (void)
-{
-  if (aint1 > aint0)
-    failures++;
-}
-
-void
-int_lte_int (void)
-{
-  if (aint0 <= aint1)
-    failures++;
-}
-
-void
-int_gte_int (void)
-{
-  if (aint1 >= aint0)
-    failures++;
-}
-
-void
-int_lt_lit (void)
-{
-  if (aint1 < 0x10)
-    failures++;
-}
-
-void
-int_gt_lit (void)
-{
-  if (aint1 > 0x10)
-    failures++;
-}
-
-void
-int_lte_lit (void)
-{
-  if (aint1 <= 0x0f)
-    failures++;
-}
-
-void
-int_gte_lit (void)
-{
-  if (aint1 >= 0x11)
-    failures++;
-}
-
-/* now repeat int comparisons using negative logic */
-
-void
-int_lt_int_else (void)
-{
-  if (aint0 >= aint1)
-    dummy++;
-  else
-    failures++;
-}
-
-void
-int_gt_int_else (void)
-{
-  if (aint1 <= aint0)
-    dummy++;
-  else
-    failures++;
-}
-
-void
-int_lte_int_else (void)
-{
-  if (aint0 > aint1)
-    dummy++;
-  else
-    failures++;
-}
-
-void
-int_gte_int_else (void)
-{
-  if (aint1 < aint0)
-    dummy++;
-  else
-    failures++;
-}
-
-void
-int_lt_lit_else (void)
-{
-  if (aint1 >= 0x10)
-    dummy++;
-  else
-    failures++;
-}
-
-void
-int_gt_lit_else (void)
-{
-  if (aint1 <= 0x10)
-    dummy++;
-  else
-    failures++;
-}
-
-void
-int_lte_lit_else (void)
-{
-  if (aint1 > 0x0f)
-    dummy++;
-  else
-    failures++;
-}
-
-void
-int_gte_lit_else (void)
-{
-  if (aint1 < 0x11)
-    dummy++;
-  else
-    failures++;
-}
-
-int
-main (void)
-{
-  char_lt_char ();
-  char_gt_char ();
-
-  achar0++;
-  char_lt_char ();
-  char_gt_char ();
-  char_gte_char ();
-  char_lte_char ();
-
-  achar1 = 0x10;
-  char_lt_lit ();
-  char_gt_lit ();
-  char_lte_lit ();
-  char_gte_lit ();
-
-  achar0 = 0;
-  achar1 = 0;
-
-  char_lt_char_else ();
-  char_gt_char_else ();
-
-  achar0++;
-  char_lt_char_else ();
-  char_gt_char_else ();
-  char_gte_char_else ();
-  char_lte_char_else ();
-
-  achar1 = 0x10;
-  char_lt_lit_else ();
-  char_gt_lit_else ();
-  char_lte_lit_else ();
-  char_gte_lit_else ();
-
-  int_lt_int ();
-  int_gt_int ();
-
-  aint0++;
-  int_lt_int ();
-  int_gt_int ();
-  int_gte_int ();
-  int_lte_int ();
-
-  aint1 = 0x10;
-  int_lt_lit ();
-  int_gt_lit ();
-  int_lte_lit ();
-  int_gte_lit ();
-
-  aint0=0;
-  aint1=0;
-  int_lt_int_else ();
-  int_gt_int_else ();
-
-  aint0++;
-  int_lt_int_else ();
-  int_gt_int_else ();
-  int_gte_int_else ();
-  int_lte_int_else ();
-
-  aint1 = 0x10;
-  int_lt_lit_else ();
-  int_gt_lit_else ();
-  int_lte_lit_else ();
-  int_gte_lit_else ();
-
-  success = failures;
-  done ();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/compare3.c b/test/val/compare3.c
deleted file mode 100644 (file)
index 614efd5..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
-  !!DESCRIPTION!! regression testing program for comparing literals to variables
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-/*
- compare3.c
-*/
-
-unsigned char success = 0;
-unsigned char failures = 0;
-unsigned char dummy = 0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-unsigned int aint0 = 0;
-unsigned int aint1 = 0;
-unsigned char achar0 = 0;
-unsigned char achar1 = 0;
-
-void
-done ()
-{
-  dummy++;
-}
-
-/* compare to 0
- assumes
- achar0 == 0
- achar1 != 0
- aint0  == 0
- aint1  != 0
-*/
-void c_0(void)
-{
-  if(achar0 != 0)
-    failures++;
-
-  if(achar0)
-    failures++;
-
-  if(achar1 == 0)
-    failures++;
-
-  if(!achar1)
-    failures++;
-
-  if(aint0 != 0)
-    failures++;
-
-  if(aint0)
-    failures++;
-
-  if(aint1 == 0)
-    failures++;
-
-  if(!aint1)
-    failures++;
-}
-
-/* compare to 1
- assumes
- achar0 != 1
- achar1 == 1
- aint0  != 1
- aint1  == 1
-*/
-void c_1(void)
-{
-  if(achar0 == 1)
-    failures++;
-
-  if(achar1 != 1)
-    failures++;
-
-  if(aint0 == 1)
-    failures++;
-
-  if(aint1 != 1)
-    failures++;
-}
-
-/* compare to 2
- assumes
- achar0 == 2
- aint0  == 2
-*/
-void c_2(void)
-{
-  if(achar0 != 2)
-    failures++;
-
-  if(aint0 != 2)
-    failures++;
-}
-
-/* compare to 0xff
- assumes
- achar0 == 0xff
- aint0  == 0xff
-*/
-void c_ff(void)
-{
-  if(achar0 != 0xff)
-    failures++;
-
-  if(aint0 != 0xff)
-    failures++;
-
-  if(aint0 == 0xfe)
-    failures++;
-
-  if(aint0 == 0xff00)
-    failures++;
-}
-
-/* compare to 0x00a5
- assumes
- achar0  == 0xa5
- aint0  == 0x00a5
-*/
-void c_a5(void)
-{
-  if(achar0 != 0xa5)
-    failures++;
-
-  if(aint0 != 0xa5)
-    failures++;
-
-  if(aint0 == 0xa4)
-    failures++;
-
-  if(aint0 == 0xa500)
-    failures++;
-}
-
-/* compare to 0xa500
- assumes
- achar0  == 0xa5
- aint0  == 0xa500
-*/
-void c_a500(void)
-{
-  if(achar0 == 0xa500)
-    failures++;
-
-  if(aint0 != 0xa500)
-    failures++;
-
-  if(aint0 == 0xa400)
-    failures++;
-
-  if(aint0 == 0x00a5)
-    failures++;
-}
-
-/* compare to 0xabcd
- assumes
- achar0  == 0xa5
- aint0  == 0xabcd
-*/
-void c_abcd(void)
-{
-  if(achar0 == 0xabcd)
-    failures++;
-
-  if(aint0 != 0xabcd)
-    failures++;
-
-  if(aint0 == 0xab00)
-    failures++;
-
-  if(aint0 == 0x00cd)
-    failures++;
-
-  if(aint0 == 0x05cd)
-    failures++;
-
-  if(aint0 == 0xab05)
-    failures++;
-
-  if(aint0 == 0xab01)
-    failures++;
-
-  if(aint0 == 0x01cd)
-    failures++;
-
-  /*
-  if(aint0 == 0x1234abcd)
-        failures++;
-  */
-}
-
-/* assumes achar1 == 0 */
-void c_ifelse1(void)
-{
-  if(achar0)
-    achar0 = achar1;
-  else
-    achar0 = 0;
-
-  if(achar0)
-    failures++;
-}
-
-int
-main (void)
-{
-  aint1 = 1;
-  achar1 = 1;
-  c_0();
-  c_1();
-
-  aint0 = 2;
-  achar0 = 2;
-  c_2();
-
-  aint0 = 0xff;
-  achar0 = 0xff;
-  c_ff();
-
-  aint0 = 0xa5;
-  achar0 = 0xa5;
-  c_a5();
-
-  aint0 = 0xabcd;
-  c_abcd();
-
-  achar0 = 0;
-  achar1 = 0;
-  c_ifelse1();
-
-  achar0 = 1;
-  c_ifelse1();
-
-  success = failures;
-  done ();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/compare4.c b/test/val/compare4.c
deleted file mode 100644 (file)
index 47948c3..0000000
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
-  !!DESCRIPTION!! regression testing program for comparing signed chars and ints
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-/*
- compare4.c
-*/
-
-/*#define  COMPARE_OUT_OF_RANGE 1*/
-
-unsigned char success = 0;
-unsigned char failures = 0;
-unsigned char dummy = 0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-#ifdef SIZEOF_INT_16BIT
-#if defined(__LINUX__) || defined(LINUX)
-short int0 = 0;
-short int1 = 0;
-
-#else
-int int0 = 0;
-int int1 = 0;
-
-#endif
-
-#else
-int int0 = 0;
-int int1 = 0;
-
-#endif
-
-signed char char0 = 0;
-signed char char1 = 0;
-
-void
-done ()
-{
-  dummy++;
-}
-
-/* compare to 0
- assumes
- char0 == 0
- char1 != 0
- int0  == 0
- int1  != 0
-*/
-void c_0(void)
-{
-  if(char0 != 0)
-    failures++;
-
-  if(char0)
-    failures++;
-
-  if(char1 == 0)
-    failures++;
-
-  if(!char1)
-    failures++;
-
-  if(int0 != 0)
-    failures++;
-
-  if(int0)
-    failures++;
-
-  if(int1 == 0)
-    failures++;
-
-  if(!int1)
-    failures++;
-
-  if(char0>0)
-    failures++;
-
-  if(int0>0)
-    failures++;
-
-  if(char0<0)
-    failures++;
-
-  if(int0<0)
-    failures++;
-}
-
-/* compare to 1
- assumes
- char0 != 1
- char1 == 1
- int0  != 1
- int1  == 1
-*/
-void c_1(void)
-{
-  if(char0 == 1)
-    failures++;
-
-  if(char1 != 1)
-    failures++;
-
-  if(int0 == 1)
-    failures++;
-
-  if(int1 != 1)
-    failures++;
-
-  if(char0 < 0)
-    failures++;
-
-  if(int0 < 0)
-    failures++;
-}
-
-/* compare to 2
- assumes
- achar0 == 2
- aint0  == 2
-*/
-void c_2(void)
-{
-  if(char0 != 2)
-    failures++;
-
-  if(int0 != 2)
-    failures++;
-}
-
-/* compare to 0xff
- assumes
- achar0 == 0xff
- aint0  == 0xff
-*/
-void c_ff(void)
-{
-  if((unsigned char)char0 != 0xff)
-    failures++;
-
-  if((unsigned short)int0 != 0xff)
-    failures++;
-
-  if((unsigned short)int0 == 0xfe)
-    failures++;
-
-  if((unsigned short)int0 == 0xff00)
-    failures++;
-}
-
-/* compare to 0x00a5
- assumes
- char0  == 0xa5
- int0  == 0x00a5
-*/
-void c_a5(void)
-{
-  if((unsigned char)char0 != 0xa5)
-    failures++;
-
-  if((unsigned short)int0 != 0xa5)
-    failures++;
-
-  if((unsigned short)int0 == 0xa4)
-    failures++;
-
-  if((unsigned short)int0 == 0xa500)
-    failures++;
-}
-
-/* compare to 0xa500
- assumes
- char0  == 0xa5
- int0  == 0xa500
-*/
-void c_a500(void)
-{
-#ifdef COMPARE_OUT_OF_RANGE
-  if(char0 == 0xa500)
-    failures++;
-#endif
-
-  if((unsigned short)int0 != 0xa500)
-    failures++;
-
-  if(int0 != 0x44)
-    int0 = 0x28;
-
-  if((unsigned short)int0 == 0xa400)
-    failures++;
-
-  if(int0 == 0x00a5)
-    failures++;
-}
-
-/* compare to 0xabcd
- assumes
- char0  == 0xa5
- int0  == 0xabcd
-*/
-void c_abcd(void)
-{
-#ifdef COMPARE_OUT_OF_RANGE
-  if(char0 == 0xabcd)
-    failures++;
-#endif
-/*
-  if(int0 != 0xabcd)
-    failures++;
-*/
-  if((unsigned short)int0 == 0xab00)
-    failures++;
-
-  if(int0 == 0x00cd)
-    failures++;
-
-  if(int0 == 0x05cd)
-    failures++;
-
-  if((unsigned short)int0 == 0xab05)
-    failures++;
-
-  if((unsigned short)int0 == 0xab01)
-    failures++;
-
-  if(int0 == 0x01cd)
-    failures++;
-
-  if(int0 > 0)
-    failures++;
-
-#ifdef COMPARE_OUT_OF_RANGE
-  if(int0 == 0x1234abcd)
-    failures++;
-#endif
-}
-
-/* assumes char1 == 0 */
-void c_ifelse1(void)
-{
-  if(char0)
-    char0 = char1;
-  else
-    char0 = 0;
-
-  if(char0)
-    failures++;
-}
-
-/* assumes char0 = -1
- assumes int0 = -1
-*/
-void c_minus1(void)
-{
-  if(char0 != -1)
-    failures++;
-
-  printf("%d\n",failures);
-
-  if(int0 != -1)
-    failures++;
-
-  printf("%d\n",failures);
-
-  if(char0 != int0)
-    failures++;
-
-  printf("%d\n",failures);
-
-  if(char0>0)
-    failures++;
-
-  printf("%d\n",failures);
-
-  if(int0>0)
-    failures++;
-
-  printf("%d\n",failures);
-}
-
-void c_c0gtc1(void)
-{
-  if(char0 < char1)
-    failures++;
-
-  printf("%d\n",failures);
-}
-
-int main(void)
-{
-  int1 = 1;
-  char1 = 1;
-  c_0();
-  printf("failures: %d\n",failures);
-  c_1();
-  printf("failures: %d\n",failures);
-
-  int0 = 2;
-  char0 = 2;
-  c_2();
-  printf("failures: %d\n",failures);
-
-  int0 = 0xff;
-  char0 = 0xff;
-  c_ff();
-  printf("failures: %d\n",failures);
-
-  int0 = 0xa5;
-  char0 = 0xa5;
-  c_a5();
-  printf("failures: %d\n",failures);
-
-  int0 = 0xabcd;
-  /*c_abcd();*/
-
-  char0 = 0;
-  char1 = 0;
-  c_ifelse1();
-  printf("failures: %d\n",failures);
-
-  char0 = 1;
-  c_ifelse1();
-  printf("failures: %d\n",failures);
-
-  char0 = -1;
-  int0 = -1;
-  c_minus1();
-  printf("failures: %d\n",failures);
-
-  char0 = 5;
-  char1 = 3;
-  c_c0gtc1();
-  printf("failures: %d\n",failures);
-
-  char1 = -3;
-  c_c0gtc1();
-
-  success = failures;
-  done ();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/compare5.c b/test/val/compare5.c
deleted file mode 100644 (file)
index 9e0c97a..0000000
+++ /dev/null
@@ -1,439 +0,0 @@
-/*
-  !!DESCRIPTION!! regression testing program for comparing longs
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-/*
- compare5.c
-*/
-
-#define  COMPARE_OUT_OF_RANGE 1
-
-unsigned char success = 0;
-unsigned char failures = 0;
-unsigned char dummy = 0;
-
-int int0 = 0;
-int int1 = 0;
-char char0 = 0;
-char char1 = 0;
-long long0 = 0;
-long long1 = 0;
-unsigned long ulong0 = 0;
-unsigned long ulong1 = 0;
-
-void
-done ()
-{
-  dummy++;
-}
-
-/* compare to 0
- assumes
- long0 == 0
- ulong0 == 0
-*/
-void c_0(void)
-{
-  if(long0 != 0)
-    failures++;
-
-  if(long0 > 0)
-    failures++;
-
-  if(ulong0 != 0)
-    failures++;
-
-  if(ulong0 > 0)
-    failures++;
-}
-
-/* compare to 1
- assumes
- long1 == 1
- ulong1 == 1
-*/
-void c_1(void)
-{
-  if(long0 == 1)
-    failures++;
-
-  if(long1 != 1)
-    failures++;
-
-  if(ulong0 == 1)
-    failures++;
-
-  if(ulong1 != 1)
-    failures++;
-
-  if(long1 < 0)
-    failures++;
-
-  if(long1 < 1)
-    failures++;
-
-  if(ulong1 < 1)
-    failures++;
-
-  if(long1 > 1)
-    failures++;
-
-  if(ulong1 > 1)
-    failures++;
-}
-
-/* compare to 2
- assumes
- long0 == 2
- ulong0  == 2
-*/
-void c_2(void)
-{
-  if(long0 != 2)
-    failures++;
-
-  if(ulong0 != 2)
-    failures++;
-
-  if(long1 == 2)
-    failures++;
-
-  if(ulong1 == 2)
-    failures++;
-}
-
-/* compare to 0xff
- assumes
- achar0 == 0xff
- aint0  == 0xff
-*/
-void c_ff(void)
-{
-  if(long0 != 0xff)
-    failures++;
-
-  if(ulong0 != 0xff)
-    failures++;
-
-  if(long1 == 0xff)
-    failures++;
-
-  if(ulong1 == 0xff)
-    failures++;
-}
-
-/* compare to 0x200
- assumes
- achar0 == 0x200
- aint0  == 0x200
-*/
-void c_200(void)
-{
-  if(long0 != 0x200)
-    failures++;
-
-  if(ulong0 != 0x200)
-    failures++;
-
-  if(long1 == 0x200)
-    failures++;
-
-  if(ulong1 == 0x200)
-    failures++;
-}
-
-/* compare to 0x20000
- assumes
- long0  == 0x20000
- ulong0 == 0x20000
- long1  != 0x20000
- ulong1 != 0x20000
-*/
-void c_20000(void)
-{
-  if(long0 != 0x20000)
-    failures++;
-
-  if(ulong0 != 0x20000)
-    failures++;
-
-  if(long1 == 0x20000)
-    failures++;
-
-  if(ulong1 == 0x20000)
-    failures++;
-
-  if(long0 <= 0x10000)
-    failures++;
-
-  if(long0 < 0x10000)
-    failures++;
-
-/*  if(long0 < 0x12345)
-    failures++;
-*/
-  if(long0 == 0)
-    failures++;
-}
-
-/* compare to 0x00a5
- assumes
- char0  == 0xa5
- int0  == 0x00a5
-*/
-void c_a5(void)
-{
-  if(char0 != 0xa5)
-    failures++;
-
-  if(int0 != 0xa5)
-    failures++;
-
-  if(int0 == 0xa4)
-    failures++;
-
-  if(int0 == 0xa500)
-    failures++;
-}
-
-/* compare to 0xa500
- assumes
- char0  == 0xa5
- int0  == 0xa500
-*/
-void c_a500(void)
-{
-#ifdef COMPARE_OUT_OF_RANGE
-  if(char0 == 0xa500)
-    failures++;
-#endif
-
-  if(int0 != 0xa500)
-    failures++;
-
-  if(int0 == 0xa400)
-    failures++;
-
-  if(int0 == 0x00a5)
-    failures++;
-}
-
-/* compare to 0xabcd
- assumes
- char0  == 0xa5
- int0  == 0xabcd
-*/
-void c_abcd(void)
-{
-#ifdef COMPARE_OUT_OF_RANGE
-  if(char0 == 0xabcd)
-    failures++;
-#endif
-
-  if(int0 != 0xabcd)
-    failures++;
-
-  if(int0 == 0xab00)
-    failures++;
-
-  if(int0 == 0x00cd)
-    failures++;
-
-  if(int0 == 0x05cd)
-    failures++;
-
-  if(int0 == 0xab05)
-    failures++;
-
-  if(int0 == 0xab01)
-    failures++;
-
-  if(int0 == 0x01cd)
-    failures++;
-
-  if(int0 > 0)
-    failures++;
-
-#ifdef COMPARE_OUT_OF_RANGE
-  if(int0 == 0x1234abcd)
-    failures++;
-#endif
-}
-
-/* assumes char1 == 0 */
-void c_ifelse1(void)
-{
-  if(char0)
-    char0 = char1;
-  else
-    char0 = 0;
-
-  if(char0)
-    failures++;
-}
-
-/*
-   assumes long0 = -1
-   assumes long1 = 1
-*/
-void c_minus1(void)
-{
-  printf("long0:%ld long1:%ld\n",long0,long1);
-  
-  printf("(long0 != -1)\n");
-  if(long0 != -1)
-  {
-       failures++;
-  }
-  printf("(long0 > 0)\n");
-  if(long0 > 0)
-  {
-       failures++;
-  }
-  printf("(long1 < 0)\n");
-  if(long1 < 0)
-  {
-       failures++;
-  }
-/*
-  if(long1 < 2)
-    failures++;
-*/
-}
-
-/* assumes
- long0 = long1 = ulong0 = ulong1 == 0
-*/
-void c_long2long_eq(void)
-{
-  if(long0 != long1)
-    failures++;
-
-  if(ulong0 != ulong1)
-    failures++;
-
-  if(long0 != ulong1)
-    failures++;
-
-  if(long0 > long1)
-    failures++;
-
-  if(long0 < long1)
-    failures++;
-
-  if(long0 > ulong0)
-    failures++;
-
-  if(long0 < ulong0)
-    failures++;
-}
-
-/* assumes
- long0 = ulong0 == 0
- long1 = ulong1 == 1
-*/
-void c_long2long_neq(void)
-{
-  if(long0 == long1)
-    failures++;
-
-  if(ulong0 == ulong1)
-    failures++;
-
-  if(long1 != ulong1)
-    failures++;
-
-  if(long1 < long0)
-    failures++;
-
-  if(long1 <= long0)
-    failures++;
-
-  if(ulong1 < ulong0)
-    failures++;
-
-  if(ulong1 <= ulong0)
-    failures++;
-}
-
-/*  long0=-100;
-  long1=-1000;
-*/
-void
-c_long2neglit(void)
-{
-  if(long0>0)
-    failures++;
-  if(long1>0)
-    failures++;
-
-  if(long1 > long0)
-    failures++;
-
-  if(long1 > 100)
-    failures++;
-
-  if(long0 > -50)
-    failures++;
-
-  if(long1 < -5000)
-    failures++;
-}
-
-int
-main (void)
-{
-  c_0();
-  printf("c_0: %d\n",failures);
-
-  c_long2long_eq();
-  printf("c_long2long_eq: %d\n",failures);
-
-  long1 = 1;
-  ulong1 = 1;
-  c_1();
-  printf("c_1: %d\n",failures);
-  c_long2long_neq();
-  printf("c_long2long_neq: %d\n",failures);
-
-  long0 = 2;
-  ulong0 = 2;
-  c_2();
-  printf("c_2: %d\n",failures);
-
-  long0 = 0xff;
-  ulong0 = 0xff;
-  c_ff();
-  printf("c_ff: %d\n",failures);
-
-  long0 = 0x200;
-  ulong0 = 0x200;
-  c_200();
-  printf("c_200: %d\n",failures);
-
-  long0 = 0x20000;
-  ulong0 = 0x20000;
-  c_20000();
-  printf("c_20000: %d\n",failures);
-
-  long0 = -1;
-  c_minus1();
-  printf("c_minus1: %d\n",failures);
-
-  long0=-100;
-  long1=-1000;
-  c_long2neglit();
-  printf("c_long2neglit: %d\n",failures);
-
-  success = failures;
-  done ();
-  
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/compare6.c b/test/val/compare6.c
deleted file mode 100644 (file)
index 85f16a1..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
-  !!DESCRIPTION!! Compound comparisons
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success = 0;
-unsigned char failures = 0;
-unsigned char dummy = 0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-int int0 = 0;
-int int1 = 0;
-unsigned char uchar0 = 0;
-unsigned char uchar1 = 0;
-char char0 = 0;
-char char1 = 0;
-char long0 = 0;
-char long1 = 0;
-
-void
-done ()
-{
-  dummy++;
-}
-
-void c_char(void)
-{
-  if(char0 || char1)
-    failures++;
-
-  if(char0 && char1)
-    failures++;
-
-  if(char0 > char1)
-    failures++;
-
-  if((char0+1)  < char1)
-    failures++;
-
-  if((char0+5) >= (char1+9))
-    failures++;
-
-  char0++;
-
-  if(char0 && char1)
-    failures++;
-
-  if(char0 != (char1+1) )
-    failures++;
-
-  if(!char0)
-    failures++;
-
-  if(char1 || !char0)
-    failures++;
-
-  if((char0 >5 ) && (char0 < 10)) 
-    failures++;
-
-  char0 +=5; /* char0 = 6 now */
-
-  if(!((char0 >5 ) && (char0 < 10)))
-    failures++;
-}
-
-void c_int(void)
-{
-  if(int0 || int1)
-    failures++;
-
-  if(int0 && int1)
-    failures++;
-
-  if(int0 > int1)
-    failures++;
-
-  if((int0+1)  < int1)
-    failures++;
-
-  if((int0+5) >= (int1+9))
-    failures++;
-
-  int0++;
-
-  if(int0 && int1)
-    failures++;
-
-  if(int0 != (int1+1) )
-    failures++;
-
-  if(!int0)
-    failures++;
-
-  if(int1 || !int0)
-    failures++;
-
-  if((int0 >5 ) && (int0 < 10)) 
-    failures++;
-
-  int0 +=5; /* int0 = 6 now */
-
-  if(!((int0 >5 ) && (int0 < 10)))
-    failures++;
-}
-
-void c_long(void)
-{
-  if(long0 || long1)
-    failures++;
-
-  if(long0 && long1)
-    failures++;
-
-  if(long0 > long1)
-    failures++;
-
-  if((long0+1)  < long1)
-    failures++;
-
-  if((long0+5) >= (long1+9))
-    failures++;
-
-  long0++;
-
-  if(long0 && long1)
-    failures++;
-
-  if(long0 != (long1+1) )
-    failures++;
-
-  if(!long0)
-    failures++;
-
-  if(long1 || !long0)
-    failures++;
-
-  if((long0 >5 ) && (long0 < 10)) 
-    failures++;
-
-  long0 +=5; /* long0 = 6 now */
-
-  if(!((long0 >5 ) && (long0 < 10)))
-    failures++;
-}
-
-void c_uminus(void)
-{
-  int1 = -int0;
-  if(int1 < 0)
-    failures++;
-}
-
-int
-main (void)
-{
-  c_char();
-  c_int();
-  c_long();
-
-  int0 = -1;
-  c_uminus();
-  if(int1 != 1)
-    failures++;
-
-  success = failures;
-  done ();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/compare7.c b/test/val/compare7.c
deleted file mode 100644 (file)
index 6c9636d..0000000
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
-  !!DESCRIPTION!! Signed comparisons of the form:  (variable<LIT)
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-/* This regression test exercises all of the boundary
- conditions in literal less than comparisons. There
- are numerous opportunities to optimize these comparison
- and each one has an astonishing capability of failing
- a boundary condition.
-*/
-unsigned char success = 0;
-unsigned char failures = 0;
-unsigned char dummy = 0;
-unsigned char result = 0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-int int0 = 0;
-int int1 = 0;
-signed char char0 = 0;
-signed char char1 = 0;
-char long0 = 0;
-char long1 = 0;
-
-/* *** NOTE ***  This particular test takes quite a while to run
- * ~ 10,000,000 instruction cycles. (2.5 seconds on a 20Mhz PIC).
- * The WDT will reset the CPU if it's enabled. So disable it...
-*/
-
-void
-done ()
-{
-  dummy++;
-}
-
-void c_char_lt_lit1(unsigned char expected_result)
-{
-  result = 0;
-
-  if(char0 < -0x7f)
-    result |= 1;
-
-  if(char0 < -1)
-    result |= 2;
-
-  if(char0 < 0)
-    result |= 4;
-
-  if(char0 < 1)
-    result |= 8;
-
-  if(char0 < 0x7f)
-    result |= 0x10;
-
-  if(result != expected_result)
-    failures++;
-}
-
-void char_compare(void)
-{
-  char0 = 0x7f;
-  c_char_lt_lit1(0);
-
-/*  return; */
-
-  char0 = 0x7e;
-  c_char_lt_lit1(0x10);
-
-  char0 = 0x40;
-  c_char_lt_lit1(0x10);
-
-  char0 = 0x2;
-  c_char_lt_lit1(0x10);
-
-  char0 = 0x1;
-  c_char_lt_lit1(0x10);
-
-  char0 = 0;
-  c_char_lt_lit1(0x18);
-
-  char0 = -1;
-  c_char_lt_lit1(0x1c);
-
-  char0 = -2;
-  c_char_lt_lit1(0x1e);
-
-  char0 = -0x40;
-  c_char_lt_lit1(0x1e);
-
-  char0 = -0x7e;
-  c_char_lt_lit1(0x1e);
-
-  char0 = -0x7f;
-  c_char_lt_lit1(0x1e);
-
-  char0 = 0x80;
-  c_char_lt_lit1(0x1f);
-
-  /* Now test entire range */
-
-  for(char0=1; char0 != 0x7f; char0++)
-    c_char_lt_lit1(0x10);
-
-  for(char0=-0x7f; char0 != -1; char0++)
-    c_char_lt_lit1(0x1e);
-}
-
-void c_int_lt_lit1(unsigned char expected_result)
-{
-  result = 0;
-
-  if(int0 < 0)
-    result |= 1;
-
-  if(int0 < 1)
-    result |= 2;
-
-  if(int0 < 0xff)
-    result |= 4;
-
-  if(int0 < 0x100)
-    result |= 8;
-
-  if(int0 < 0x0101)
-    result |= 0x10;
-  
-  if(int0 < 0x01ff)
-    result |= 0x20;
-  
-  if(int0 < 0x0200)
-    result |= 0x40;
-
-  if(int0 < 0x0201)
-    result |= 0x80;
-
-  if(result != expected_result)
-    failures=1;
-}
-
-void int_compare1(void)
-{
-  int0 = -1;
-  c_int_lt_lit1(0xff);
-
-  int0 = 0;
-  c_int_lt_lit1(0xfe);
-
-  int0 = 1;
-  c_int_lt_lit1(0xfc);
-
-  int0 = 2;
-  c_int_lt_lit1(0xfc);
-
-  int0 = 0xfe;
-  c_int_lt_lit1(0xfc);
-
-  int0 = 0xff;
-  c_int_lt_lit1(0xf8);
-
-  int0 = 0x100;
-  c_int_lt_lit1(0xf0);
-
-  int0 = 0x101;
-  c_int_lt_lit1(0xe0);
-
-  int0 = 0x1fe;
-  c_int_lt_lit1(0xe0);
-
-  int0 = 0x1ff;
-  c_int_lt_lit1(0xc0);
-
-  int0 = 0x200;
-  c_int_lt_lit1(0x80);
-
-  int0 = 0x201;
-  c_int_lt_lit1(0x0);
-
-  int0 = 0x7f00;
-  c_int_lt_lit1(0x0);
-
-  /* now check contiguous ranges */
-
-  for(int0 = -0x7fff; int0 != -1; int0++)
-    c_int_lt_lit1(0xff);
-
-  for(int0 = 1; int0 != 0xff; int0++)
-    c_int_lt_lit1(0xfc);
-
-  for(int0 = 0x201; int0 != 0x7fff; int0++)
-    c_int_lt_lit1(0);
-}
-
-void c_int_lt_lit2(unsigned char expected_result)
-{
-  result = 0;
-
-  if(int0 < -0x7fff)
-    result |= 1;
-
-  if(int0 < -0x7f00)
-    result |= 2;
-
-  if(int0 < -0x7eff)
-    result |= 4;
-
-  if(int0 < -0x7e00)
-    result |= 8;
-
-  if(int0 < -0x0101)
-    result |= 0x10;
-  
-  if(int0 < -0x0100)
-    result |= 0x20;
-  
-  if(int0 < -0xff)
-    result |= 0x40;
-
-  if(int0 < -1)
-    result |= 0x80;
-
-  if(result != expected_result)
-    failures=1;
-}
-
-void int_compare2(void)
-{
-  int0 = -0x7fff;
-  c_int_lt_lit2(0xfe);
-
-  int0 = -0x7f00;
-  c_int_lt_lit2(0xfc);
-
-  int0 = -0x7eff;
-  c_int_lt_lit2(0xf8);
-
-  int0 = -0x7e00;
-  c_int_lt_lit2(0xf0);
-
-  int0 = -0x4567;
-  c_int_lt_lit2(0xf0);
-
-  int0 = -0x200;
-  c_int_lt_lit2(0xf0);
-
-  int0 = -0x102;
-  c_int_lt_lit2(0xf0);
-
-  int0 = -0x101;
-  c_int_lt_lit2(0xe0);
-
-  int0 = -0x100;
-  c_int_lt_lit2(0xc0);
-
-  int0 = -0xff;
-  c_int_lt_lit2(0x80);
-
-  int0 = -0x02;
-  c_int_lt_lit2(0x80);
-
-  int0 = -0x01;
-  c_int_lt_lit2(0x00);
-
-  int0 = 0;
-  c_int_lt_lit2(0x00);
-
-  int0 = 1;
-  c_int_lt_lit2(0x00);
-
-  int0 = 0x7fff;
-  c_int_lt_lit2(0x00);
-
-  /* now check contiguous ranges */
-  int0 = -0x7f01;
-  c_int_lt_lit2(0xfe);
-
-  for(int0 = -0x7ffe; int0 != -0x7f01; int0++)
-    c_int_lt_lit2(0xfe);
-
-  for(int0 = -0x7e00; int0 != -0x101; int0++)
-    c_int_lt_lit2(0xf0);
-
-  for(int0 = -1; int0 != 0x7fff; int0++)
-    c_int_lt_lit2(0);
-}
-
-int
-main (void)
-{
-  char_compare();
-  printf("failures: %d\n",failures);
-
-  int_compare1();
-  printf("failures: %d\n",failures);
-  int_compare2();
-
-  success = failures;
-  done ();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/compare8.c b/test/val/compare8.c
deleted file mode 100644 (file)
index 0abff8c..0000000
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
-  !!DESCRIPTION!! Signed comparisons of the form:  (variable>LIT)
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-/* This regression test exercises all of the boundary
- conditions in literal less than comparisons. There
- are numerous opportunities to optimize these comparison
- and each one has an astonishing capability of failing
- a boundary condition.
-*/
-unsigned char success = 0;
-unsigned char failures = 0;
-unsigned char dummy = 0;
-unsigned char result = 0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-int int0 = 0;
-int int1 = 0;
-unsigned char uchar0 = 0;
-unsigned char uchar1 = 0;
-signed char char0 = 0;
-signed char char1 = 0;
-char long0 = 0;
-char long1 = 0;
-
-/* *** NOTE ***  This particular test takes quite a while to run
- * ~ 10,000,000 instruction cycles. (2.5 seconds on a 20Mhz PIC).
- * The WDT will reset the CPU if it's enabled. So disable it...
-*/
-
-void
-done ()
-{
-  dummy++;
-}
-
-void c_char_gt_lit1(unsigned char expected_result)
-{
-  result = 0;
-
-  if(char0 > -0x7f)
-    result |= 1;
-
-  if(char0 > -1)
-    result |= 2;
-
-  if(char0 > 0)
-    result |= 4;
-
-  if(char0 > 1)
-    result |= 8;
-
-  if(char0 > 0x7e)
-    result |= 0x10;
-  
-  if(char0 > 0x7f)
-    result |= 0x20;
-  
-  if(result != expected_result)
-    failures++;
-}
-
-void char_compare(void)
-{
-  char0 = 0x7f;
-  c_char_gt_lit1(0x1f);
-
-  char0 = 0x7e;
-  c_char_gt_lit1(0x0f);
-
-  char0 = 0x40;
-  c_char_gt_lit1(0x0f);
-
-  char0 = 0x2;
-  c_char_gt_lit1(0x0f);
-
-  char0 = 0x1;
-  c_char_gt_lit1(0x07);
-
-  char0 = 0;
-  c_char_gt_lit1(0x03);
-
-  char0 = -1;
-  c_char_gt_lit1(0x01);
-
-  char0 = -2;
-  c_char_gt_lit1(0x01);
-
-  char0 = -0x40;
-  c_char_gt_lit1(0x01);
-
-  char0 = -0x7e;
-  c_char_gt_lit1(0x01);
-
-  char0 = -0x7f;
-  c_char_gt_lit1(0x00);
-
-  char0 = 0x80;
-  c_char_gt_lit1(0x00);
-
-  /* Now test entire range */
-
-  for(char0=2; char0 != 0x7f; char0++)
-    c_char_gt_lit1(0x0f);
-
-  for(char0=-0x7e; char0 != -1; char0++)
-    c_char_gt_lit1(0x01);
-}
-
-void c_int_gt_lit1(unsigned char expected_result)
-{
-  result = 0;
-
-  if(int0 > 0)
-    result |= 1;
-
-  if(int0 > 1)
-    result |= 2;
-
-  if(int0 > 0xff)
-    result |= 4;
-
-  if(int0 > 0x100)
-    result |= 8;
-
-  if(int0 > 0x0101)
-    result |= 0x10;
-  
-  if(int0 > 0x01ff)
-    result |= 0x20;
-  
-  if(int0 > 0x0200)
-    result |= 0x40;
-
-  if(int0 > 0x0201)
-    result |= 0x80;
-
-  if(result != expected_result)
-    failures=1;
-}
-
-void int_compare1(void)
-{
-  int0 = -1;
-  c_int_gt_lit1(0x00);
-
-  int0 = 0;
-  c_int_gt_lit1(0x00);
-
-  int0 = 1;
-  c_int_gt_lit1(0x01);
-
-  int0 = 2;
-  c_int_gt_lit1(0x03);
-
-  int0 = 0xfe;
-  c_int_gt_lit1(0x03);
-
-  int0 = 0xff;
-  c_int_gt_lit1(0x03);
-
-  int0 = 0x100;
-  c_int_gt_lit1(0x07);
-
-  int0 = 0x101;
-  c_int_gt_lit1(0x0f);
-
-  int0 = 0x102;
-  c_int_gt_lit1(0x1f);
-
-  int0 = 0x1fe;
-  c_int_gt_lit1(0x1f);
-
-  int0 = 0x1ff;
-  c_int_gt_lit1(0x1f);
-
-  int0 = 0x200;
-  c_int_gt_lit1(0x3f);
-
-  int0 = 0x201;
-  c_int_gt_lit1(0x7f);
-
-  int0 = 0x7f00;
-  c_int_gt_lit1(0xff);
-
-  /* now check contiguous ranges */
-
-  for(int0 = -0x7fff; int0 != -1; int0++)
-    c_int_gt_lit1(0x00);
-
-  for(int0 = 2; int0 != 0xff; int0++)
-    c_int_gt_lit1(0x03);
-
-  for(int0 = 0x202; int0 != 0x7fff; int0++)
-    c_int_gt_lit1(0xff);
-}
-
-void c_int_gt_lit2(unsigned char expected_result)
-{
-  result = 0;
-
-  if(int0 > -0x7fff)
-    result |= 1;
-
-  if(int0 > -0x7f00)
-    result |= 2;
-
-  if(int0 > -0x7eff)
-    result |= 4;
-
-  if(int0 > -0x7e00)
-    result |= 8;
-
-  if(int0 > -0x0101)
-    result |= 0x10;
-  
-  if(int0 > -0x0100)
-    result |= 0x20;
-  
-  if(int0 > -0xff)
-    result |= 0x40;
-
-  if(int0 > -1)
-    result |= 0x80;
-
-  if(result != expected_result)
-    failures=1;
-}
-
-void int_compare2(void)
-{
-  int0 = -0x7fff;
-  c_int_gt_lit2(0x00);
-
-  int0 = -0x7f00;
-  c_int_gt_lit2(0x01);
-
-  int0 = -0x7eff;
-  c_int_gt_lit2(0x03);
-
-  int0 = -0x7e00;
-  c_int_gt_lit2(0x07);
-
-  int0 = -0x7dff;
-  c_int_gt_lit2(0x0f);
-
-  int0 = -0x4567;
-  c_int_gt_lit2(0x0f);
-
-  int0 = -0x200;
-  c_int_gt_lit2(0x0f);
-
-  int0 = -0x102;
-  c_int_gt_lit2(0x0f);
-
-  int0 = -0x101;
-  c_int_gt_lit2(0x0f);
-
-  int0 = -0x100;
-  c_int_gt_lit2(0x1f);
-
-  int0 = -0xff;
-  c_int_gt_lit2(0x3f);
-
-  int0 = -0x02;
-  c_int_gt_lit2(0x7f);
-
-  int0 = -0x01;
-  c_int_gt_lit2(0x7f);
-
-  int0 = 0;
-  c_int_gt_lit2(0xff);
-
-  int0 = 1;
-  c_int_gt_lit2(0xff);
-
-  int0 = 0x7fff;
-  c_int_gt_lit2(0xff);
-
-  /* now check contiguous ranges */
-
-  for(int0 = -0x7ffe; int0 != -0x7f01; int0++)
-    c_int_gt_lit2(0x01);
-
-  for(int0 = -0x7dff; int0 != -0x101; int0++)
-    c_int_gt_lit2(0x0f);
-
-  for(int0 = 0; int0 != 0x7fff; int0++)
-    c_int_gt_lit2(0xff);
-}
-
-int
-main (void)
-{
-  char_compare();
-  int_compare1();
-  int_compare2();
-
-  success = failures;
-  done ();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/compare9.c b/test/val/compare9.c
deleted file mode 100644 (file)
index 4a37141..0000000
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
-  !!DESCRIPTION!! Signed comparisons of the form:  (variable<=LIT)
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-/*
- This regression test exercises all of the boundary
- conditions in literal less than or equal comparisons. There
- are numerous opportunities to optimize these comparison
- and each one has an astonishing capability of failing
- a boundary condition.
-*/
-
-unsigned char success = 0;
-unsigned char failures = 0;
-unsigned char dummy = 0;
-unsigned char result = 0;
-
-int int0 = 0;
-int int1 = 0;
-signed char char0 = 0;
-signed char char1 = 0;
-
-/* *** NOTE ***  This particular test takes quite a while to run
- * ~ 10,000,000 instruction cycles. (2.5 seconds on a 20Mhz PIC).
- * The WDT will reset the CPU if it's enabled. So disable it...
-*/
-
-void
-done ()
-{
-  dummy++;
-}
-
-void c_char_lte_lit1(unsigned char expected_result)
-{
-  result = 0;
-
-  if(char0 <= -0x7f)
-    result |= 1;
-
-  if(char0 <= -1)
-    result |= 2;
-
-  if(char0 <= 0)
-    result |= 4;
-
-  if(char0 <= 1)
-    result |= 8;
-
-  if(char0 <= 0x7f)
-    result |= 0x10;
-  
-  if(result != expected_result)
-    failures++;
-}
-
-void char_compare(void)
-{
-  char0 = 0x7f;
-  c_char_lte_lit1(0x10);
-
-  char0 = 0x7e;
-  c_char_lte_lit1(0x10);
-
-  char0 = 0x40;
-  c_char_lte_lit1(0x10);
-
-  char0 = 0x2;
-  c_char_lte_lit1(0x10);
-
-  char0 = 0x1;
-  c_char_lte_lit1(0x18);
-
-  char0 = 0;
-  c_char_lte_lit1(0x1c);
-
-  char0 = -1;
-  c_char_lte_lit1(0x1e);
-
-  char0 = -2;
-  c_char_lte_lit1(0x1e);
-
-  char0 = -0x40;
-  c_char_lte_lit1(0x1e);
-
-  char0 = -0x7e;
-  c_char_lte_lit1(0x1e);
-
-  char0 = -0x7f;
-  c_char_lte_lit1(0x1f);
-
-  char0 = 0x80;
-  /*  c_char_lte_lit1(0x1f); */
-
-  /* Now test entire range */
-
-  for(char0=2; char0 != 0x7f; char0++)
-    c_char_lte_lit1(0x10);
-
-  for(char0=-0x7e; char0 != 0; char0++)
-    c_char_lte_lit1(0x1e);
-}
-
-void c_int_lte_lit1(unsigned char expected_result)
-{
-  result = 0;
-
-  if(int0 <= 0)
-    result |= 1;
-
-  if(int0 <= 1)
-    result |= 2;
-
-  if(int0 <= 0xff)
-    result |= 4;
-
-  if(int0 <= 0x100)
-    result |= 8;
-
-  if(int0 <= 0x0101)
-    result |= 0x10;
-  
-  if(int0 <= 0x01ff)
-    result |= 0x20;
-  
-  if(int0 <= 0x0200)
-    result |= 0x40;
-
-  if(int0 <= 0x0201)
-    result |= 0x80;
-
-  if(result != expected_result)
-    failures=1;
-}
-
-void int_compare1(void)
-{
-  int0 = -1;
-  c_int_lte_lit1(0xff);
-
-  int0 = 0;
-  c_int_lte_lit1(0xff);
-
-  int0 = 1;
-  c_int_lte_lit1(0xfe);
-
-  int0 = 2;
-  c_int_lte_lit1(0xfc);
-
-  int0 = 0xfe;
-  c_int_lte_lit1(0xfc);
-
-  int0 = 0xff;
-  c_int_lte_lit1(0xfc);
-
-  int0 = 0x100;
-  c_int_lte_lit1(0xf8);
-
-  int0 = 0x101;
-  c_int_lte_lit1(0xf0);
-
-  int0 = 0x1fe;
-  c_int_lte_lit1(0xe0);
-
-  int0 = 0x1ff;
-  c_int_lte_lit1(0xe0);
-
-  int0 = 0x200;
-  c_int_lte_lit1(0xc0);
-
-  int0 = 0x201;
-  c_int_lte_lit1(0x80);
-
-  int0 = 0x7f00;
-  c_int_lte_lit1(0x0);
-
-  /* now check contiguous ranges */
-
-  for(int0 = -0x7fff; int0 != 1; int0++)
-    c_int_lte_lit1(0xff);
-
-  for(int0 = 2; int0 != 0xff; int0++)
-    c_int_lte_lit1(0xfc);
-
-  for(int0 = 0x202; int0 != 0x7fff; int0++)
-    c_int_lte_lit1(0);
-}
-
-void c_int_lte_lit2(unsigned char expected_result)
-{
-  result = 0;
-
-  if(int0 <= -0x7fff)
-    result |= 1;
-
-  if(int0 <= -0x7f00)
-    result |= 2;
-
-  if(int0 <= -0x7eff)
-    result |= 4;
-
-  if(int0 <= -0x7e00)
-    result |= 8;
-
-  if(int0 <= -0x0101)
-    result |= 0x10;
-  
-  if(int0 <= -0x0100)
-    result |= 0x20;
-  
-  if(int0 <= -0xff)
-    result |= 0x40;
-
-  if(int0 <= -1)
-    result |= 0x80;
-
-  if(result != expected_result)
-    failures=1;
-}
-
-void int_compare2(void)
-{
-  int0 = -0x7fff;
-  c_int_lte_lit2(0xff);
-
-  int0 = -0x7f00;
-  c_int_lte_lit2(0xfe);
-
-  int0 = -0x7eff;
-  c_int_lte_lit2(0xfc);
-
-  int0 = -0x7e00;
-  c_int_lte_lit2(0xf8);
-
-  int0 = -0x4567;
-  c_int_lte_lit2(0xf0);
-
-  int0 = -0x200;
-  c_int_lte_lit2(0xf0);
-
-  int0 = -0x102;
-  c_int_lte_lit2(0xf0);
-
-  int0 = -0x101;
-  c_int_lte_lit2(0xf0);
-
-  int0 = -0x100;
-  c_int_lte_lit2(0xe0);
-
-  int0 = -0xff;
-  c_int_lte_lit2(0xc0);
-
-  int0 = -0x02;
-  c_int_lte_lit2(0x80);
-
-  int0 = -0x01;
-  c_int_lte_lit2(0x80);
-
-  int0 = 0;
-  c_int_lte_lit2(0x00);
-
-  int0 = 1;
-  c_int_lte_lit2(0x00);
-
-  int0 = 0x7fff;
-  c_int_lte_lit2(0x00);
-
-  /* now check contiguous ranges */
-
-  for(int0 = -0x7ffe; int0 != -0x7f00; int0++)
-    c_int_lte_lit2(0xfe);
-
-  for(int0 = -0x7dff; int0 != -0x101; int0++)
-    c_int_lte_lit2(0xf0);
-
-  for(int0 = 0; int0 != 0x7fff; int0++)
-    c_int_lte_lit2(0);
-}
-
-int
-main (void)
-{
-  char_compare();
-  int_compare1();
-  int_compare2();
-
-  success = failures;
-  done ();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/cq22.c b/test/val/cq22.c
deleted file mode 100644 (file)
index bcd1570..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 2.2: identifiers (names)
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-/*
-        2.2 Identifiers (Names)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-s22(pd0)
-struct defs *pd0;
-{
-#else
-int s22(struct defs *pd0)
-{
-#endif
-
-   int a234, a;
-   int _, _234, A, rc;
-
-   static char s22er[] = "s22,er%d\n";
-   static char qs22[8] = "s22    ";
-
-   char *ps, *pt;
-                         /* Initialize                      */
-
-   rc = 0;
-   ps = qs22;
-   pt = pd0 -> rfs;
-   while (*pt++ = *ps++);
-
-     /* An identifier is a sequence of letters and digits;
-        the first character must be a letter. The under-
-        score _ counts as a letter.                        */
-
-   a=1;
-   _=2;
-   _234=3;
-   a234=4;
-   if(a+_+_234+a234 != 10) {
-     rc = rc+1;
-     if(pd0->flgd != 0) printf(s22er,1);
-   }
-
-   /* Upper and lower case letters are different.     */
-
-   A = 2;
-   if (A == a) {
-     rc = rc+4;
-     if (pd0->flgd != 0) printf(s22er,4);
-   }
-
-   return(rc);
-}
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#define cq_sections 1
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                case 0: return s22(pd0);
-        }
-}
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq241.c b/test/val/cq241.c
deleted file mode 100644 (file)
index 76f437e..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 2.41: integer constants, 2.42: explizit long constants
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-/*
-        2.4.1 Integer constants
-        2.4.2 Explicit long constants
-*/
-
-/* Calculate 2**n by multiplying, not shifting  */
-#ifndef NO_OLD_FUNC_DECL
-long pow2(n)
-long n;
-{
-#else
-long pow2(long n) {
-#endif
-   long s;
-   s = 1;
-   while(n--) s = s*2;
-   return s;
-}
-
-   long d[39], o[39], x[39];
-
-#ifndef NO_OLD_FUNC_DECL
-s241(pd0)
-struct defs *pd0;
-{
-#else
-int s241(struct defs *pd0) {
-#endif
-
-/*   long pow2(); */
-   static char s241er[] = "s241,er%d\n";
-   static char qs241[8] = "s241   ";
-   char *ps, *pt;
-   int rc, j, lrc;
-   static long g[39] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-                        0,6,0,8,0,12,0,16,0,18,0,20,0,24,
-                        0,28,0,30,0,32,0,36};
-/*   long d[39], o[39], x[39]; */
-
-   rc = 0;
-   lrc = 0;
-   ps = qs241;
-   pt = pd0 -> rfs;
-   while (*pt++ = *ps++);
-
-     /* An integer constant consisting of a sequence of digits is
-        taken to be octal if it begins with 0 (digit zero), decimal
-        otherwise.                                            */
-
-   if (   8 !=  010
-     ||  16 !=  020
-     ||  24 !=  030
-     ||  32 !=  040
-     ||  40 !=  050
-     ||  48 !=  060
-     ||  56 !=  070
-     ||  64 != 0100
-     ||  72 != 0110
-     ||  80 != 0120
-     ||   9 != 0011
-     ||  17 != 0021
-     ||  25 != 0031
-     ||  33 != 0041
-     ||  41 != 0051
-     ||  49 != 0061
-     ||  57 != 0071
-     ||  65 != 0101
-     ||  73 != 0111
-     ||  81 != 0121 ){
-     rc = rc+1;
-     if( pd0->flgd != 0 ) printf(s241er,1);
-   }
-
-     /* A sequence of digits preceded by 0x or 0X (digit zero)
-        is taken to be a hexadecimal integer. The hexadecimal
-        digits include a or A through f or F with values 10
-        through 15.     */
-
-   if ( 0x00abcdef != 0xabcdef
-     || 0xabcdef != 0Xabcdef || 0Xabcdef != 0XAbcdef
-     || 0XAbcdef != 0XABcdef || 0XABcdef != 0XABCdef
-     || 0XABCdef != 0XABCDef || 0XABCDef != 0XABCDEf
-     || 0XABCDEf != 0XABCDEF || 0xABCDEF != 11259375 ){
-     rc = rc+2;
-     if( pd0->flgd != 0 ) printf(s241er,2);
-   }
-
-     /* A decimal constant whose value exceeds the largest signed
-        machine integer is taken to be long; an octal or hex con-
-        stant which exceeds the largest unsigned machine integer
-        is likewise taken to be long.     */
-#if defined(REFERENCE) && defined(REFCC_SIZEOF_LONG_64BIT)
-/*#warning "sizeof(long)!=4, skipping test"*/
-#else
-   if ( sizeof 010000000000 != sizeof(long)      /* 2**30 */
-     || sizeof 1073741824   != sizeof(long)      /* ditto */
-     || sizeof 0x40000000   != sizeof(long) ){   /*   "   */
-
-     rc = rc+4;
-     if( pd0->flgd != 0 ) printf(s241er,4);
-   }
-#endif
-     /* A decimal, octal, or hexadecimal constant immediately followed
-        by l (letter ell) or L is a long constant.    */
-
-   if ( sizeof   67l != sizeof(long)
-     || sizeof   67L != sizeof(long)
-     || sizeof  067l != sizeof(long)
-     || sizeof  067L != sizeof(long)
-     || sizeof 0X67l != sizeof(long)
-     || sizeof 0x67L != sizeof(long) ){
-     rc = rc+8;
-     if( pd0 -> flgd != 0 ) printf(s241er,8);
-   }
-
-     /* Finally, we test to see that decimal (d), octal (o),
-        and hexadecimal (x) constants representing the same values
-        agree among themselves, and with computed values, at spec-
-        ified points over an appropriate range. The points select-
-        ed here are those with the greatest potential for caus-
-        ing trouble, i.e., zero, 1-16, and values of 2**n and
-        2**n - 1 where n is some multiple of 4 or 6. Unfortunately,
-        just what happens when a value is too big to fit in a
-        long is undefined; however, it would be nice if what
-        happened were at least consistent...      */
-
-   for ( j=0; j<17; j++ ) g[j] = j;
-   for ( j=18; j<39; ) {
-     g[j] = pow2(g[j]);
-     g[j-1] = g[j] - 1;
-     j = j+2;
-   }
-
-   d[0] = 0;                o[0] = 00;               x[0] = 0x0;
-   d[1] = 1;                o[1] = 01;               x[1] = 0x1;
-   d[2] = 2;                o[2] = 02;               x[2] = 0x2;
-   d[3] = 3;                o[3] = 03;               x[3] = 0x3;
-   d[4] = 4;                o[4] = 04;               x[4] = 0x4;
-   d[5] = 5;                o[5] = 05;               x[5] = 0x5;
-   d[6] = 6;                o[6] = 06;               x[6] = 0x6;
-   d[7] = 7;                o[7] = 07;               x[7] = 0x7;
-   d[8] = 8;                o[8] = 010;              x[8] = 0x8;
-   d[9] = 9;                o[9] = 011;              x[9] = 0x9;
-   d[10] = 10;              o[10] = 012;             x[10] = 0xa;
-   d[11] = 11;              o[11] = 013;             x[11] = 0xb;
-   d[12] = 12;              o[12] = 014;             x[12] = 0xc;
-   d[13] = 13;              o[13] = 015;             x[13] = 0xd;
-   d[14] = 14;              o[14] = 016;             x[14] = 0xe;
-   d[15] = 15;              o[15] = 017;             x[15] = 0xf;
-   d[16] = 16;              o[16] = 020;             x[16] = 0x10;
-   d[17] = 63;              o[17] = 077;             x[17] = 0x3f;
-   d[18] = 64;              o[18] = 0100;            x[18] = 0x40;
-   d[19] = 255;             o[19] = 0377;            x[19] = 0xff;
-   d[20] = 256;             o[20] = 0400;            x[20] = 0x100;
-   d[21] = 4095;            o[21] = 07777;           x[21] = 0xfff;
-   d[22] = 4096;            o[22] = 010000;          x[22] = 0x1000;
-   d[23] = 65535;           o[23] = 0177777;         x[23] = 0xffff;
-   d[24] = 65536;           o[24] = 0200000;         x[24] = 0x10000;
-   d[25] = 262143;          o[25] = 0777777;         x[25] = 0x3ffff;
-   d[26] = 262144;          o[26] = 01000000;        x[26] = 0x40000;
-   d[27] = 1048575;         o[27] = 03777777;        x[27] = 0xfffff;
-   d[28] = 1048576;         o[28] = 04000000;        x[28] = 0x100000;
-   d[29] = 16777215;        o[29] = 077777777;       x[29] = 0xffffff;
-   d[30] = 16777216;        o[30] = 0100000000;      x[30] = 0x1000000;
-   d[31] = 268435455;       o[31] = 01777777777;     x[31] = 0xfffffff;
-   d[32] = 268435456;       o[32] = 02000000000;     x[32] = 0x10000000;
-   d[33] = 1073741823;      o[33] = 07777777777;     x[33] = 0x3fffffff;
-   d[34] = 1073741824;      o[34] = 010000000000;    x[34] = 0x40000000;
-   d[35] = 4294967295;      o[35] = 037777777777;    x[35] = 0xffffffff;
-   d[36] = 4294967296;      o[36] = 040000000000;    x[36] = 0x100000000;
-   d[37] = 68719476735;     o[37] = 0777777777777;   x[37] = 0xfffffffff;
-   d[38] = 68719476736;     o[38] = 01000000000000;  x[38] = 0x1000000000;
-
-   /* WHEW! */
-
-   for (j=0; j<39; j++){
-     if ( g[j] != d[j]
-       || d[j] != o[j]
-       || o[j] != x[j]) {
-       if( pd0 -> flgm != 0 ) {
-/*       printf(s241er,16);          save in case opinions change...     */
-         printf("Decimal and octal/hex constants sometimes give\n");
-         printf("   different results when assigned to longs.\n");
-       }
-/*     lrc = 1;   save...   */
-     }
-   }
-
-   if (lrc != 0) rc =16;
-
-   return rc;
-}
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#define cq_sections 1
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                case 0: return s241(pd0);
-        }
-}
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq243.c b/test/val/cq243.c
deleted file mode 100644 (file)
index 676c731..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 2.43: character constants
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-/*********************************************************************************************
-        2.4.3 Character constants
-**********************************************************************************************/
-
-#ifndef NO_OLD_FUNC_DECL
-zerofill(x)
-char *x;
-{
-#else
-void zerofill(char *x) {
-#endif
-   int j;
-
-   for (j=0; j<256; j++) *x++ = 0;
-}
-
-#ifndef NO_OLD_FUNC_DECL
-sumof(x)
-char *x;
-{
-#else
-int sumof(char *x) {
-#endif
-   char *p;
-   int total, j;
-
-   p = x;
-   total = 0;
-
-   for(j=0; j<256; j++) total = total+ *p++;
-   return total;
-}
-
-char chars[256];
-
-#ifndef NO_OLD_FUNC_DECL
-s243(pd0)
-struct defs *pd0;
-{
-#else
-int s243(struct defs *pd0) {
-#endif
-   static char s243er[] = "s243,er%d\n";
-   static char qs243[8] = "s243   ";
-   char *ps, *pt;
-   int rc;
-/*   char chars[256]; */
-
-   rc = 0;
-   ps = qs243;
-   pt = pd0->rfs;
-   while(*pt++ = *ps++);
-
-     /* One of the problems that arises when testing character constants
-        is that of definition: What, exactly, is the character set?
-        In order to guarantee a certain amount of machine independence,
-        the character set we will use here is the set of characters writ-
-        able as escape sequences in C, plus those characters used in writ-
-        ing C programs, i.e.,
-
-        letters:
-                   ABCDEFGHIJKLMNOPQRSTUVWXYZ      26
-                   abcdefghijklmnopqrstuvwxyz      26
-        numbers:
-                   0123456789                      10
-        special characters:
-                   ~!"#%&()_=-^|{}[]+;*:<>,.?/     27
-        extra special characters:
-                   newline           \n
-                   horizontal tab    \t
-                   backspace         \b
-                   carriage return   \r
-                   form feed         \f
-                   backslash         \\
-                   single quote      \'             7
-        blank & NUL                                 2
-                                                  ---
-                                                   98
-
-        Any specific implementation of C may of course support additional
-        characters.                                       */
-
-        /* Since the value of a character constant is the numerical value
-           of the character in the machine's character set, there should
-           be a one-to-one correspondence between characters and values. */
-
-   zerofill(chars);
-
-   chars['a'] = 1;   chars['A'] = 1;   chars['~'] = 1;   chars['0'] = 1;
-   chars['b'] = 1;   chars['B'] = 1;   chars['!'] = 1;   chars['1'] = 1;
-   chars['c'] = 1;   chars['C'] = 1;   chars['"'] = 1;   chars['2'] = 1;
-   chars['d'] = 1;   chars['D'] = 1;   chars['#'] = 1;   chars['3'] = 1;
-   chars['e'] = 1;   chars['E'] = 1;   chars['%'] = 1;   chars['4'] = 1;
-   chars['f'] = 1;   chars['F'] = 1;   chars['&'] = 1;   chars['5'] = 1;
-   chars['g'] = 1;   chars['G'] = 1;   chars['('] = 1;   chars['6'] = 1;
-   chars['h'] = 1;   chars['H'] = 1;   chars[')'] = 1;   chars['7'] = 1;
-   chars['i'] = 1;   chars['I'] = 1;   chars['_'] = 1;   chars['8'] = 1;
-   chars['j'] = 1;   chars['J'] = 1;   chars['='] = 1;   chars['9'] = 1;
-   chars['k'] = 1;   chars['K'] = 1;   chars['-'] = 1;
-   chars['l'] = 1;   chars['L'] = 1;   chars['^'] = 1;
-   chars['m'] = 1;   chars['M'] = 1;   chars['|'] = 1;   chars['\n'] = 1;
-   chars['n'] = 1;   chars['N'] = 1;                     chars['\t'] = 1;
-   chars['o'] = 1;   chars['O'] = 1;   chars['{'] = 1;   chars['\b'] = 1;
-   chars['p'] = 1;   chars['P'] = 1;   chars['}'] = 1;   chars['\r'] = 1;
-   chars['q'] = 1;   chars['Q'] = 1;   chars['['] = 1;   chars['\f'] = 1;
-   chars['r'] = 1;   chars['R'] = 1;   chars[']'] = 1;
-   chars['s'] = 1;   chars['S'] = 1;   chars['+'] = 1;   chars['\\'] = 1;
-   chars['t'] = 1;   chars['T'] = 1;   chars[';'] = 1;   chars['\''] = 1;
-   chars['u'] = 1;   chars['U'] = 1;   chars['*'] = 1;
-   chars['v'] = 1;   chars['V'] = 1;   chars[':'] = 1;   chars['\0'] = 1;
-   chars['w'] = 1;   chars['W'] = 1;   chars['<'] = 1;   chars[' '] = 1;
-   chars['x'] = 1;   chars['X'] = 1;   chars['>'] = 1;
-   chars['y'] = 1;   chars['Y'] = 1;   chars[','] = 1;
-   chars['z'] = 1;   chars['Z'] = 1;   chars['.'] = 1;
-                                       chars['?'] = 1;
-                                       chars['/'] = 1;
-
-   if(sumof(chars) != 98){
-     rc = rc+1;
-     if(pd0->flgd != 0) printf(s243er,1);
-   }
-
-   #ifndef NO_BACKSLASH_CHARCODE
-
-   /* Finally, the escape \ddd consists of the backslash followed
-      by 1, 2, or 3 octal digits which are taken to specify  the
-      desired character.                           */
-
-/*
-    this test is non portable and inaccurate, we replace it
-    by a more failproof version
-
-   if(
-       '\0'    !=   0 ||
-       '\01'   !=   1 ||
-       '\02'   !=   2 ||
-       '\03'   !=   3 ||
-       '\04'   !=   4 ||
-       '\05'   !=   5 ||
-       '\06'   !=   6 ||
-       '\07'   !=   7 ||
-       '\10'   !=   8 ||
-       '\17'   !=  15 ||
-       '\20'   !=  16 ||
-       '\77'   !=  63 ||
-       '\100'  !=  64 ||
-       '\177'  != 127
-       )
-*/
-    if(
-     ('0' != '\60') ||
-     ('9' != '\71') ||
-     ('A' != '\101') ||
-     ('Z' != '\132') ||
-     ('a' != '\141') ||
-     ('z' != '\172')
-      )
-
-       {
-     rc = rc+8;
-     if(pd0->flgd != 0)
-     {
-        printf(s243er,8);
-     }
-   }
-
-   #endif
-
-   return rc;
-}
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#define cq_sections 1
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                case 0: return s243(pd0);
-        }
-}
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq244.c b/test/val/cq244.c
deleted file mode 100644 (file)
index bedf51e..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 2.44: floating point constants
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-#ifndef NO_OLD_FUNC_DECL
-s244(pd0)
-struct defs *pd0;
-{
-#else
-s244(struct defs *pd0) {
-#endif
-
-   #ifndef NO_FLOATS
-        double a[8];
-
-   int rc, lrc, j;
-   static char s244er[] = "s244,er%d\n";
-   static char qs244[8] = "s244   ";
-   char *ps, *pt;
-
-   ps = qs244;
-   pt = pd0->rfs;
-   while(*pt++ = *ps++);
-   rc = 0;
-   lrc = 0;
-
-   /* Unfortunately, there's not a lot we can do with floating constants.
-      We can check to see that the various representations can be com-
-      piled, that the conversion is such that they yield the same hard-
-      ware representations in all cases, and that all representations
-      thus checked are double precision.              */
-
-   a[0] = .1250E+04;
-   a[1] = 1.250E3;
-   a[2] = 12.50E02;
-   a[3] = 125.0e+1;
-   a[4] = 1250e00;
-   a[5] = 12500.e-01;
-   a[6] = 125000e-2;
-   a[7] = 1250.;
-
-   lrc = 0;
-   for (j=0; j<7; j++) if(a[j] != a[j+1]) lrc = 1;
-
-   if(lrc != 0) {
-     if(pd0->flgd != 0) printf(s244er,1);
-     rc = rc+1;
-   }
-
-   if ( (sizeof .1250E+04 ) != sizeof(double)
-     || (sizeof 1.250E3   ) != sizeof(double)
-     || (sizeof 12.50E02  ) != sizeof(double)
-     || (sizeof 1.250e+1  ) != sizeof(double)
-     || (sizeof 1250e00   ) != sizeof(double)
-     || (sizeof 12500.e-01) != sizeof(double)
-     || (sizeof 125000e-2 ) != sizeof(double)
-     || (sizeof 1250.     ) != sizeof(double)){
-     if(pd0->flgd != 0) printf(s244er,2);
-     rc = rc+2;
-   }
-
-   return rc;
-
-   #else
-
-   return 0;
-
-   #endif
-}
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#define cq_sections 1
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                case 0: return s244(pd0);
-        }
-}
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq25.c b/test/val/cq25.c
deleted file mode 100644 (file)
index 9cb2f61..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 2.5: strings
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-#ifndef NO_OLD_FUNC_DECL
-s25(pd0)
-struct defs *pd0;
-{
-#else
-int s25(struct defs *pd0) {
-#endif
-   char *s, *s2;
-   int rc, lrc, j;
-   static char s25er[] = "s25,er%d\n";
-   static char qs25[8] = "s25    ";
-   char *ps, *pt;
-
-   ps = qs25;
-   pt = pd0->rfs;
-   while(*pt++ = *ps++);
-   rc = 0;
-
-   /* A string is a sequence of characters surrounded by double
-      quotes, as in "...".                         */
-
-   s = "...";
-
-   /* A string has type "array of characters" and storage class
-      static and is initialized with the given characters.  */
-
-   if ( s[0] != s[1] || s[1] != s[2]
-     || s[2] != '.' ) {
-    rc = rc+1;
-     if(pd0->flgd != 0) printf(s25er,1);
-   }
-
-   /* The compiler places a null byte \0 at the end of each string
-      so the program which scans the string can find its end.   */
-
-   if( s[3] != '\0' ){
-     rc = rc+4;
-     if(pd0->flgd != 0) printf(s25er,4);
-   }
-
-   /* In a string, the double quote character " must be preceded
-      by a \.                                               */
-
-   if( ".\"."[1] != '"' ){
-    rc = rc+8;
-     if(pd0->flgd != 0) printf(s25er,8);
-   }
-
-   /* In addition, the same escapes described for character constants
-      may be used.                                            */
-
-   s = "\n\t\b\r\f\\\'";
-
-   if( s[0] != '\n'
-    || s[1] != '\t'
-    || s[2] != '\b'
-    || s[3] != '\r'
-    || s[4] != '\f'
-    || s[5] != '\\'
-    || s[6] != '\'' ){
-     rc = rc+16;
-     if( pd0->flgd != 0) printf(s25er,16);
-   }
-
-   /* Finally, a \ and an immediately following newline are ignored */
-
-   s2 = "queep!";
-   s = "queep!";
-
-   lrc = 0;
-   for (j=0; j<sizeof "queep!"; j++) if(s[j] != s2[j]) lrc = 1;
-   if (lrc != 0){
-     rc = rc+32;
-     if(pd0->flgd != 0) printf(s25er,32);
-   }
-   return rc;
-}
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#define cq_sections 1
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                case 0: return s25(pd0);
-        }
-}
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq26.c b/test/val/cq26.c
deleted file mode 100644 (file)
index 399f0a4..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 2.6: Hardware Characteristics
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-#ifndef CQ26_INCLUDED
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-#endif
-
-/*
-  section s26, which pokes around at the hardware
-  trying to figure out the characteristics of the machine that
-  it is running on, saves information that is subsequently
-  used by sections s626, s72, and s757. If this program is
-  to be broken up into smallish pieces, say for running on
-  a microcomputer, take care to see that s26 is called before
-  calling any of the latter three sections.
-*/
-
-/*
-        2.6  Hardware Characteristics
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-s26(pd0)
-struct defs *pd0;
-{
-#else
-s26(struct defs *pd0) {
-#endif
-   static char qs26[8] = "s26    ";
-   char *ps, *pt;
-   char c0, c1;
-   #ifndef NO_FLOATS
-        float temp, one, delta;
-        double tempd, oned;
-   #endif
-   static char s[] = "%3d bits in %ss.\n";
-   static char s2[] = "%e is the least number that can be added to 1. (%s).\n";
-
-   ps = qs26;
-   pt = pd0->rfs;
-
-   while(*pt++ = *ps++);
-
-          /* Here, we shake the machinery a little to see what falls
-             out.  First, we find out how many bits are in a char.  */
-
-   pd0->cbits = 0;
-   c0 = 0;
-   c1 = 1;
-
-   while(c0 != c1) {
-     c1 = c1<<1;
-     pd0->cbits = pd0->cbits+1;
-   }
-          /* That information lets us determine the size of everything else. */
-
-   pd0->ibits = pd0->cbits * sizeof(int);
-   pd0->sbits = pd0->cbits * sizeof(short);
-   pd0->lbits = pd0->cbits * sizeof(long);
-   pd0->ubits = pd0->cbits * sizeof(unsigned);
-   #ifndef NO_FLOATS
-        pd0->fbits = pd0->cbits * sizeof(float);
-        pd0->dbits = pd0->cbits * sizeof(double);
-   #endif
-
-          /* We have now almost reconstructed the table in section 2.6, the
-             exception being the range of the floating point hardware.
-             Now there are just so many ways to conjure up a floating point
-             representation system that it's damned near impossible to guess
-             what's going on by writing a program to interpret bit patterns.
-             Further, the information isn't all that useful, if we consider
-             the fact that machines that won't handle numbers between 10**30
-             and 10**-30 are very hard to find, and that people playing with
-             numbers outside that range have a lot more to worry about than
-             just the capacity of the characteristic.
-
-             A much more useful measure is the precision, which can be ex-
-             pressed in terms of the smallest number that can be added to
-             1. without loss of significance. We calculate that here, for
-             float and double.                       */
-
-#ifndef NO_FLOATS
-   one = 1.;
-   delta = 1.;
-   temp = 0.;
-   while(temp != one) {
-     temp = one+delta;
-     delta = delta/2.;
-   }
-   pd0->fprec = delta * 4.;
-   oned = 1.;
-   delta = 1.;
-   tempd = 0.;
-   while(tempd != oned) {
-     tempd = oned+delta;
-     delta = delta/2.;
-   }
-   pd0->dprec = delta * 4.;
-#endif
-
-          /* Now, if anyone's interested, we publish the results.       */
-
-#ifndef CQ26_INCLUDED
-   if(pd0->flgm != 0) {
-     printf(s,pd0->cbits,"char");
-     printf(s,pd0->ibits,"int");
-     printf(s,pd0->sbits,"short");
-     printf(s,pd0->lbits,"long");
-     printf(s,pd0->ubits,"unsigned");
-     printf(s,pd0->fbits,"float");
-     printf(s,pd0->dbits,"double");
-     #ifndef NO_FLOATS
-        printf(s2,pd0->fprec,"float");
-        printf(s2,pd0->dprec,"double");
-     #else
-        printf("NO_FLOATS\n");
-     #endif
-   }
-#endif
-          /* Since we are only exploring and perhaps reporting, but not
-             testing any features, we cannot return an error code.  */
-
-   return 0;
-}
-
-#ifndef CQ26_INCLUDED
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                case 0: return s26(pd0);
-        }
-}
-
-#define cq_sections 1
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
-#endif
diff --git a/test/val/cq4.c b/test/val/cq4.c
deleted file mode 100644 (file)
index 8a8125c..0000000
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 4: what's in a name?
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-#define CQ26_INCLUDED
-/*
-  section s26, which pokes around at the hardware
-  trying to figure out the characteristics of the machine that
-  it is running on, saves information that is subsequently
-  used by sections s626, s72, and s757. If this program is
-  to be broken up into smallish pieces, say for running on
-  a microcomputer, take care to see that s26 is called before
-  calling any of the latter three sections.
-*/
-
-/*
-        2.6  Hardware Characteristics
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-s26(pd0)
-struct defs *pd0;
-{
-#else
-s26(struct defs *pd0) {
-#endif
-   static char qs26[8] = "s26    ";
-   char *ps, *pt;
-   char c0, c1;
-   #ifndef NO_FLOATS
-        float temp, one, delta;
-        double tempd, oned;
-   #endif
-   static char s[] = "%3d bits in %ss.\n";
-   static char s2[] = "%e is the least number that can be added to 1. (%s).\n";
-
-   ps = qs26;
-   pt = pd0->rfs;
-
-   while(*pt++ = *ps++);
-
-          /* Here, we shake the machinery a little to see what falls
-             out.  First, we find out how many bits are in a char.  */
-
-   pd0->cbits = 0;
-   c0 = 0;
-   c1 = 1;
-
-   while(c0 != c1) {
-     c1 = c1<<1;
-     pd0->cbits = pd0->cbits+1;
-   }
-          /* That information lets us determine the size of everything else. */
-
-   pd0->ibits = pd0->cbits * sizeof(int);
-   pd0->sbits = pd0->cbits * sizeof(short);
-   pd0->lbits = pd0->cbits * sizeof(long);
-   pd0->ubits = pd0->cbits * sizeof(unsigned);
-   #ifndef NO_FLOATS
-        pd0->fbits = pd0->cbits * sizeof(float);
-        pd0->dbits = pd0->cbits * sizeof(double);
-   #endif
-
-          /* We have now almost reconstructed the table in section 2.6, the
-             exception being the range of the floating point hardware.
-             Now there are just so many ways to conjure up a floating point
-             representation system that it's damned near impossible to guess
-             what's going on by writing a program to interpret bit patterns.
-             Further, the information isn't all that useful, if we consider
-             the fact that machines that won't handle numbers between 10**30
-             and 10**-30 are very hard to find, and that people playing with
-             numbers outside that range have a lot more to worry about than
-             just the capacity of the characteristic.
-
-             A much more useful measure is the precision, which can be ex-
-             pressed in terms of the smallest number that can be added to
-             1. without loss of significance. We calculate that here, for
-             float and double.                       */
-
-#ifndef NO_FLOATS
-   one = 1.;
-   delta = 1.;
-   temp = 0.;
-   while(temp != one) {
-     temp = one+delta;
-     delta = delta/2.;
-   }
-   pd0->fprec = delta * 4.;
-   oned = 1.;
-   delta = 1.;
-   tempd = 0.;
-   while(tempd != oned) {
-     tempd = oned+delta;
-     delta = delta/2.;
-   }
-   pd0->dprec = delta * 4.;
-#endif
-
-          /* Now, if anyone's interested, we publish the results.       */
-
-#ifndef CQ26_INCLUDED
-   if(pd0->flgm != 0) {
-     printf(s,pd0->cbits,"char");
-     printf(s,pd0->ibits,"int");
-     printf(s,pd0->sbits,"short");
-     printf(s,pd0->lbits,"long");
-     printf(s,pd0->ubits,"unsigned");
-     printf(s,pd0->fbits,"float");
-     printf(s,pd0->dbits,"double");
-     #ifndef NO_FLOATS
-        printf(s2,pd0->fprec,"float");
-        printf(s2,pd0->dprec,"double");
-     #else
-        printf("NO_FLOATS\n");
-     #endif
-   }
-#endif
-          /* Since we are only exploring and perhaps reporting, but not
-             testing any features, we cannot return an error code.  */
-
-   return 0;
-}
-
-int extvar;
-
-#ifdef NO_IMPLICIT_FUNC_PROTOTYPES
-int s4(struct defs *pd0);
-int svtest(int n);
-zero();
-testev();
-setev();
-#endif
-
-#ifndef NO_OLD_FUNC_DECL
-s4(pd0)                    /* 4. What's in a name?             */
-struct defs *pd0;
-{
-#else
-int s4(struct defs *pd0) {
-#endif
-   static char s4er[] = "s4,er%d\n";
-   static char qs4[8] = "s4     ";
-   char *ps, *pt;
-   int j, rc;
-
-   short sint;             /* short integer, for size test      */
-   int pint;               /* plain                             */
-   long lint;              /* long                              */
-   unsigned target;
-   unsigned int mask;
-
-   rc = 0;
-   ps = qs4;
-   pt = pd0->rfs;
-
-   while(*pt++ = *ps++);
-
-/*   There are four declarable storage classes: automatic,
-static, external, and register. Automatic variables have
-been dealt with extensively thus far, and will not be specif-
-ically treated in this section. Register variables are treated
-in section s81.
-
-     Static variables are local to a block, but retain their
-values upon reentry to a block, even after control has left
-the block.                                                     */
-
-   for (j=0; j<3; j++)
-     if(svtest(j) != zero()){
-       rc = 1;
-       if(pd0->flgd != 0) printf(s4er,1);
-     }
-   ;
-
-/*   External variables exist and retain their values throughout
-the execution of the entire program, and may be used for comm-
-unication between functions, even separately compiled functions.
-                                                                */
-
-   setev();
-   if(testev() != 0){
-     rc=rc+2;
-     if(pd0->flgd != 0) printf(s4er,2);
-   }
-/*
-     Characters have been tested elsewhere (in s243).
-
-     Up to three sizes of integer, declared short int, int, and
-long int, are available. Longer integers provide no less storage
-than shorter ones, but implementation may make either short
-integers, or long integers, or both, equivalent to plain
-integers.
-                                                                */
-
-   if(sizeof lint < sizeof pint || sizeof pint < sizeof sint){
-     rc = rc+4;
-     if(pd0->flgd != 0) printf(s4er,4);
-   }
-
-/*   Unsigned integers, declared unsigned, obey the laws of
-arithmetic modulo 2**n, where n is the number of bits in the
-implementation                                                  */
-
-   target = ~0U;
-   mask = 1;
-   printf("sizeof target: %08x pd0->cbits: %08x\n", sizeof target, pd0->cbits);
-   printf("mask: %08x target: %08x\n", mask, target);
-
-   for(j=0; j<(sizeof target)*pd0->cbits; j++){
-     mask = mask&target;
-     target = target>>1;
-     printf("mask: %08x target: %08x\n", mask, target);
-   }
-
-   if(mask != 1 || target != 0){
-     rc = rc+8;
-     if(pd0->flgd != 0) printf(s4er,8);
-   }
-
-   return rc;
-}
-
-#ifndef NO_OLD_FUNC_DECL
-svtest(n)
-int n;
-{
-#else
-int svtest(int n) {
-#endif
-
-   static k;
-   int rc;
-   switch (n) {
-     case 0: k = 1978;
-             rc = 0;
-             break;
-
-     case 1: if(k != 1978) rc = 1;
-             else{
-              k = 1929;
-              rc = 0;
-             }
-             break;
-
-     case 2: if(k != 1929) rc = 1;
-             else rc = 0;
-             break;
-   }
-   return rc;
-}
-zero(){                 /* Returns a value of zero, possibly */
-   static k;            /* with side effects, as it's called */
-   int rc;              /* alternately with svtest, above,   */
-   k = 2;               /* and has the same internal storage */
-   rc = 0;              /* requirements.                     */
-   return rc;
-}
-testev(){
-   if(extvar != 1066) return 1;
-   else return 0;
-}
-
-/* Sets an external variable. Used  */
-/* by s4, and should be compiled    */
-/* separately from s4.              */
-
-setev(){
-#ifndef NO_SLOPPY_EXTERN
-   extern int extvar;
-#endif
-   extvar = 1066;
-}
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                case 0: return s26(pd0);
-                case 1: return s4(pd0);
-        }
-}
-
-#define cq_sections 2
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq61.c b/test/val/cq61.c
deleted file mode 100644 (file)
index 3dcca64..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 6.1: characters and integers
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-/*#include "cq26.c"*/ /* hardware check */
-
-int extvar;
-
-#ifndef NO_OLD_FUNC_DECL
-s61(pd0)          /* Characters and integers */
-struct defs *pd0;
-{
-#else
-int s61(struct defs *pd0){
-#endif
-   static char s61er[] = "s61,er%d\n";
-   static char s61ok[] = "s61,ok%d\n";
-   static char qs61[8] = "s61    ";
-   short from, shortint;
-   long int to, longint;
-   int rc, lrc;
-   int j;
-   char fromc, charint;
-   char *wd, *pc[6];
-
-   static char upper_alpha[]             = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-   static char lower_alpha[]             = "abcdefghijklmnopqrstuvwxyz";
-   static char numbers[]               = "0123456789";
-   static char special_characters[]    = "~!\"#%&()_=-^|{}[]+;*:<>,.?/";
-   static char extra_special_characters[] = "\n\t\b\r\f\\\'";
-   static char blank_and_NUL[]            = " \0";
-
-   char *ps, *pt;
-   ps = qs61;
-   pt = pd0->rfs;
-   rc = 0;
-
-   printf(s61ok,0);
-
-   while (*pt++ = *ps++);
-
-/*      A character or a short integer may be used wherever
-an integer may be used. In all cases, the value is converted
-to integer. This principle is extensively used throughout this
-program, and will not be explicitly tested here.        */
-
-/*      Conversion of a shorter integer to a longer always
-involves sign extension.                                */
-
-   from = -19;
-   to = from;
-
-   if(to != -19){
-     rc = rc+1;
-     if(pd0->flgd != 0) printf(s61er,1);
-   }
-   else if(pd0->flgd != 0) printf(s61ok,1);
-
-/*      It is guaranteed that a member of the standard char-
-acter set is nonnegative.                               */
-
-   pc[0] = upper_alpha;
-   pc[1] = lower_alpha;
-   pc[2] = numbers;
-   pc[3] = special_characters;
-   pc[4] = extra_special_characters;
-   pc[5] = blank_and_NUL;
-
-   lrc = 0;
-   for (j=0; j<6; j++)
-     while(*pc[j]) if(*pc[j]++ < 0) lrc =1;
-
-   if(lrc != 0){
-     rc=rc+2;
-     if(pd0->flgd != 0) printf(s61er,2);
-   }
-   else if(pd0->flgd != 0) printf(s61ok,2);
-
-/*      When a longer integer is converted to a shorter or
-to  a char, it is truncated on the left; excess bits are
-simply discarded.                                       */
-
-   longint = 1048579;           /* =2**20+3 */
-   shortint = longint;
-   charint = longint;
-
-   if((shortint != longint && shortint != 3) ||
-      (charint  != longint && charint  != 3)) {
-     rc = rc+8;
-     if(pd0->flgd != 0) printf(s61er,8);
-   }
-   else if(pd0->flgd != 0) printf(s61ok,8);
-
-   return rc;
-}
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                /*case 0: return s26(pd0);*/
-                case 0: return s61(pd0);
-        }
-}
-
-#define cq_sections 1
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq626.c b/test/val/cq626.c
deleted file mode 100644 (file)
index 166d3a9..0000000
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 6.2: Float and double, 6.3 Floating and integral, 6.4 Pointers and integers, 6.5 Unsigned, 6.6 Arithmetic conversions
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-#define CQ26_INCLUDED
-/*
-  section s26, which pokes around at the hardware
-  trying to figure out the characteristics of the machine that
-  it is running on, saves information that is subsequently
-  used by sections s626, s72, and s757. If this program is
-  to be broken up into smallish pieces, say for running on
-  a microcomputer, take care to see that s26 is called before
-  calling any of the latter three sections.
-*/
-
-/*
-        2.6  Hardware Characteristics
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-s26(pd0)
-struct defs *pd0;
-{
-#else
-s26(struct defs *pd0) {
-#endif
-   static char qs26[8] = "s26    ";
-   char *ps, *pt;
-   char c0, c1;
-   #ifndef NO_FLOATS
-        float temp, one, delta;
-        double tempd, oned;
-   #endif
-   static char s[] = "%3d bits in %ss.\n";
-   static char s2[] = "%e is the least number that can be added to 1. (%s).\n";
-
-   ps = qs26;
-   pt = pd0->rfs;
-
-   while(*pt++ = *ps++);
-
-          /* Here, we shake the machinery a little to see what falls
-             out.  First, we find out how many bits are in a char.  */
-
-   pd0->cbits = 0;
-   c0 = 0;
-   c1 = 1;
-
-   while(c0 != c1) {
-     c1 = c1<<1;
-     pd0->cbits = pd0->cbits+1;
-   }
-          /* That information lets us determine the size of everything else. */
-
-   pd0->ibits = pd0->cbits * sizeof(int);
-   pd0->sbits = pd0->cbits * sizeof(short);
-   pd0->lbits = pd0->cbits * sizeof(long);
-   pd0->ubits = pd0->cbits * sizeof(unsigned);
-   #ifndef NO_FLOATS
-        pd0->fbits = pd0->cbits * sizeof(float);
-        pd0->dbits = pd0->cbits * sizeof(double);
-   #endif
-
-          /* We have now almost reconstructed the table in section 2.6, the
-             exception being the range of the floating point hardware.
-             Now there are just so many ways to conjure up a floating point
-             representation system that it's damned near impossible to guess
-             what's going on by writing a program to interpret bit patterns.
-             Further, the information isn't all that useful, if we consider
-             the fact that machines that won't handle numbers between 10**30
-             and 10**-30 are very hard to find, and that people playing with
-             numbers outside that range have a lot more to worry about than
-             just the capacity of the characteristic.
-
-             A much more useful measure is the precision, which can be ex-
-             pressed in terms of the smallest number that can be added to
-             1. without loss of significance. We calculate that here, for
-             float and double.                       */
-
-#ifndef NO_FLOATS
-   one = 1.;
-   delta = 1.;
-   temp = 0.;
-   while(temp != one) {
-     temp = one+delta;
-     delta = delta/2.;
-   }
-   pd0->fprec = delta * 4.;
-   oned = 1.;
-   delta = 1.;
-   tempd = 0.;
-   while(tempd != oned) {
-     tempd = oned+delta;
-     delta = delta/2.;
-   }
-   pd0->dprec = delta * 4.;
-#endif
-
-          /* Now, if anyone's interested, we publish the results.       */
-
-#ifndef CQ26_INCLUDED
-   if(pd0->flgm != 0) {
-     printf(s,pd0->cbits,"char");
-     printf(s,pd0->ibits,"int");
-     printf(s,pd0->sbits,"short");
-     printf(s,pd0->lbits,"long");
-     printf(s,pd0->ubits,"unsigned");
-     printf(s,pd0->fbits,"float");
-     printf(s,pd0->dbits,"double");
-     #ifndef NO_FLOATS
-        printf(s2,pd0->fprec,"float");
-        printf(s2,pd0->dprec,"double");
-     #else
-        printf("NO_FLOATS\n");
-     #endif
-   }
-#endif
-          /* Since we are only exploring and perhaps reporting, but not
-             testing any features, we cannot return an error code.  */
-
-   return 0;
-}
-
-int extvar;
-
-#ifndef NO_OLD_FUNC_DECL
-s626(pd0)          /* 6.2 Float and double                  */
-                   /* 6.3 Floating and integral                 */
-                   /* 6.4 Pointers and integers                 */
-                   /* 6.5 Unsigned                              */
-                   /* 6.6 Arithmetic conversions                */
-struct defs *pd0;
-{
-#else
-int s626(struct defs *pd0){
-#endif
-   static char s626er[] = "s626,er%d\n";
-   static char qs626[8] = "s626   ";
-   int rc;
-   char *ps, *pt;
-   #ifndef NO_FLOATS
-   float eps, f1, f2, f3, f4, f;
-   #endif
-   long lint1, lint2, l, ls;
-   char c, t[28], t0;
-   short s;
-   int is, i, j;
-   unsigned u, us;
-   #ifndef NO_FLOATS
-        double d, ds;
-   #endif
-   ps = qs626;
-   pt = pd0->rfs;
-   rc = 0;
-   while (*pt++ = *ps++);
-
-   #ifndef NO_FLOATS
-
-        /* Conversions of integral values to floating type are
-        well-behaved.                                           */
-
-   f1 = 1.;
-   lint1 = 1.;
-   lint2 = 1.;
-
-   for(j=0;j<pd0->lbits-2;j++){
-     f1 = f1*2;
-     lint2 = (lint2<<1)|lint1;
-   }
-   f2 = lint2;
-   f1 = (f1-f2)/f1;
-   if(f1>2.*pd0->fprec){
-     rc = rc+2;
-     if(pd0->flgd != 0) printf(s626er,2);
-   }
-
-        /* Pointer-integer combinations are discussed in s74,
-        "Additive operators". The unsigned-int combination
-        appears below.                                          */
-
-   c = 125;
-   s = 125;
-   i = 125;     is = 15625;
-   u = 125;     us = 15625;
-   l = 125;     ls = 15625;
-   f = 125.;
-   d = 125.;    ds = 15625.;
-
-   for(j=0;j<28;j++) t[j] = 0;
-
-   if(c*c != is) t[ 0] = 1;
-   if(s*c != is) t[ 1] = 1;
-   if(s*s != is) t[ 2] = 1;
-   if(i*c != is) t[ 3] = 1;
-   if(i*s != is) t[ 4] = 1;
-   if(i*i != is) t[ 5] = 1;
-   if(u*c != us) t[ 6] = 1;
-   if(u*s != us) t[ 7] = 1;
-   if(u*i != us) t[ 8] = 1;
-   if(u*u != us) t[ 9] = 1;
-   if(l*c != ls) t[10] = 1;
-   if(l*s != ls) t[11] = 1;
-   if(l*i != ls) t[12] = 1;
-   if(l*u != us) t[13] = 1;
-   if(l*l != ls) t[14] = 1;
-   if(f*c != ds) t[15] = 1;
-   if(f*s != ds) t[16] = 1;
-   if(f*i != ds) t[17] = 1;
-   if(f*u != ds) t[18] = 1;
-   if(f*l != ds) t[19] = 1;
-   if(f*f != ds) t[20] = 1;
-   if(d*c != ds) t[21] = 1;
-   if(d*s != ds) t[22] = 1;
-   if(d*i != ds) t[23] = 1;
-   if(d*u != ds) t[24] = 1;
-   if(d*l != ds) t[25] = 1;
-   if(d*f != ds) t[26] = 1;
-   if(d*d != ds) t[27] = 1;
-
-   t0 = 0;
-   for(j=0; j<28; j++) t0 = t0+t[j];
-
-   if(t0 != 0){
-     rc = rc+4;
-     if(pd0->flgd != 0){
-       printf(s626er,4);
-       printf("   key=");
-       for(j=0;j<28;j++) printf("%d",t[j]);
-       printf("\n");
-     }
-   }
-
-   #endif
-
-        /* When an unsigned integer is converted to long,
-           the value of the result is the same numerically
-           as that of the unsigned integer.               */
-
-   l = (unsigned)0100000;
-   if((long)l > (unsigned)0100000){
-      rc = rc+8;
-      if(pd0->flgd != 0) printf(s626er,8);
-   }
-
-   return rc;
-}
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                case 0: return s26(pd0);
-                case 1: return s626(pd0);
-        }
-}
-
-#define cq_sections 2
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq71.c b/test/val/cq71.c
deleted file mode 100644 (file)
index 7bf0d9e..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 7.1: primary expressions
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-/*include "cq26.c"*/ /* hardware check */
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-int extvar;
-
-#ifndef NO_OLD_FUNC_DECL
-s71(pd0)          /*         7.1  Primary expressions   */
-struct defs *pd0;
-{
-#else
-int s71(struct defs *pd0){
-#endif
-   static char s71er[] = "s71,er%d\n";
-   static char qs71[8] = "s71    ";
-   int rc;
-   char *ps, *pt;
-   static char q = 'q';
-#ifndef NO_SLOPPY_EXTERN
-   int x[10], McCarthy(), clobber(), a, b, *p;
-#else
-   int x[10], a, b, *p;
-#endif
-   ps = qs71;
-   pt = pd0->rfs;
-   rc = 0;
-   while (*pt++ = *ps++);
-
-/*   Testing of expressions and operators is quite complicated,
-     because (a) problems are apt to surface in queer combinations
-     of operators and operands, rather than in isolation,
-     and (b) the number of expressions needed to provoke a case
-     of improper behaviour may be quite large. Hence, we take the
-     following approach: for this section, and for subsequent
-     sections through 7.15, we will check the primitive operations
-     in isolation, thus verifying that the primitives work,
-     after a fashion. The job of testing combinations, we will
-     leave to a separate, machine-generated program, to be included
-     in the C test package at some later date.
-                                                                */
-
-/*   A string is a primary expression. The identifier points to
-     the first character of a string.
-                                                                  */
-
-   if(*"queep" != q){
-     rc = rc+1;
-     if(pd0->flgd  != 0) printf(s71er,1);
-   }
-/*   A parenthesized expression is a primary expression whose
-     type and value are the same as those of the unadorned
-     expression.
-                                                                */
-   if((2+3) != 2+3) {
-     rc = rc+2;
-     if(pd0->flgd != 0) printf(s71er,2);
-   }
-
-/*   A primary expression followed by an expression in square
-     brackets is a primary expression. The intuitive meaning is
-     that of a subscript. The expression E1[E2] is identical
-     (by definition) to *((E1)+(E2)).
-                                                                */
-
-   x[5] = 1942;
-   if(x[5] != 1942 || x[5] != *((x)+(5))){
-     rc = rc+4;
-     if(pd0->flgd != 0) printf(s71er,4);
-   }
-
-/*   If the various flavors of function calls didn't work, we
-     would never have gotten this far; however, we do need to
-     show that functions can be recursive...
-                                                               */
-
-   if ( McCarthy(-5) != 91){
-     rc = rc+8;
-     if(pd0->flgd != 0) printf(s71er,8);
-   }
-
-/*   and that argument passing is strictly by value.           */
-
-   a = 2;
-   b = 3;
-   p = &b;
-
-   clobber(a,p);
-
-   if(a != 2 || b != 2){
-     rc = rc+16;
-     if(pd0->flgd != 0) printf(s71er,16);
-   }
-
-/*   Finally, structures and unions are addressed thusly:      */
-
-   #ifndef NO_FLOATS
-
-   if(pd0->dprec != (*pd0).dprec){
-     rc = rc+32;
-     if(pd0->flgd != 0) printf(s71er,32);
-   }
-
-   #endif
-
-   return rc;
-}
-#ifndef NO_OLD_FUNC_DECL
-McCarthy(x)
-int x;
-{
-#else
-int McCarthy(int x){
-#endif
-   if(x>100) return x-10;
-   else return McCarthy( McCarthy(x+11));
-}
-
-#ifndef NO_OLD_FUNC_DECL
-clobber(x,y)
-int x,*y;
-#else
-int clobber(int x,int *y)
-#endif
-
-/*
-#ifndef NO_OLD_FUNC_DECL
-clobber(x,y)
-int x,
-#ifdef NO_TYPELESS_INT_PTR
-int
-#endif
-*y;
-{
-#else
-int clobber(int x,
-#ifdef NO_TYPELESS_INT_PTR
-int
-#endif
-*y
-){
-#endif
-*/
-
-{
-   x = 3;
-   *y = 2;
-}
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                /*case 0: return s26(pd0);*/
-                case 0: return s71(pd0);
-        }
-}
-
-#define cq_sections 1
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq714.c b/test/val/cq714.c
deleted file mode 100644 (file)
index f4c5880..0000000
+++ /dev/null
@@ -1,1797 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 7.14: assignment operators
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-#ifndef NO_OLD_FUNC_DECL
-s714(pd0)          /*  7.14  Assignment operators       */
-struct defs *pd0;
-{
-#else
-int s714(struct defs *pd0){
-#endif
-   static char f[] = "Local error %d.\n";
-   static char s714er[] = "s714,er%d\n";
-   static char qs714[8] = "s714   ";
-   register int prlc, lrc;
-   int rc;
-   char cl, cr;
-   short sl, sr;
-   int il, ir;
-   long ll, lr;
-   unsigned ul, ur;
-   #ifndef NO_FLOATS
-   float fl, fr;
-   double dl, dr;
-   #else
-   signed fl, fr;
-   signed dl, dr;
-   #endif
-   char *ps, *pt;
-   ps = qs714;
-   pt = pd0->rfs;
-   rc = 0;
-   lrc = 0;
-   prlc = pd0->flgl;
-   while (*pt++ = *ps++);
-
-        /* This section tests the assignment operators.
-
-        It is an exhaustive test of all assignment statements
-        of the form:
-
-                vl op vr
-
-        where vl and vr are variables from the set
-        {char,short,int,long,unsigned,float,double} and op is
-        one of the assignment operators. There are 395 such
-        statements.
-
-        The initial values for the variables have been chosen
-        so that both the initial values and the results will
-        "fit" in just about any implementation, and that the re-
-        sults will be such that they test for the proper form-
-        ation of composite operators, rather than checking for
-        the valid operation of those operators' components.
-        For example, in checking >>=, we want to verify that
-        a right shift and a move take place, rather than
-        whether or not there may be some peculiarities about
-        the right shift. Such tests have been made previously,
-        and to repeat them here would be to throw out a red
-        herring.
-
-        The table below lists the operators, assignment targets,
-        initial values for left and right operands, and the
-        expected values of the results.
-
-          =  +=  -=  *=  /=  %=  >>=  <<=  &=  ^=  |=
-char      2   7   3  10   2   1   1    20   8   6  14
-short     2   7   3  10   2   1   1    20   8   6  14
-int       2   7   3  10   2   1   1    20   8   6  14
-long      2   7   3  10   2   1   1    20   8   6  14
-unsigned  2   7   3  10   2   1   1    20   8   6  14
-float     2   7   3  10 2.5 |             |
-double    2   7   3  10 2.5 |             |
-                            |             |
-initial         (5,2)       |    (5,2)    |  (12,10)
-
-        The following machine-generated program reflects the
-        tests described in the table.
-                                                                */
-
-   cl = 5; cr = 2;
-   cl = cr;
-   if(cl != 2){
-     lrc = 1;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; sr = 2;
-   cl = sr;
-   if(cl != 2){
-     lrc = 2;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; ir = 2;
-   cl = ir;
-   if(cl != 2){
-     lrc = 3;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; lr = 2;
-   cl = lr;
-   if(cl != 2){
-     lrc = 4;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; ur = 2;
-   cl = ur;
-   if(cl != 2){
-     lrc = 5;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; fr = 2;
-   cl = fr;
-   if(cl != 2){
-     lrc = 6;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; dr = 2;
-   cl = dr;
-   if(cl != 2){
-     lrc = 7;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; cr = 2;
-   sl = cr;
-   if(sl != 2){
-     lrc = 8;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; sr = 2;
-   sl = sr;
-   if(sl != 2){
-     lrc = 9;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; ir = 2;
-   sl = ir;
-   if(sl != 2){
-     lrc = 10;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; lr = 2;
-   sl = lr;
-   if(sl != 2){
-     lrc = 11;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; ur = 2;
-   sl = ur;
-   if(sl != 2){
-     lrc = 12;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; fr = 2;
-   sl = fr;
-   if(sl != 2){
-     lrc = 13;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; dr = 2;
-   sl = dr;
-   if(sl != 2){
-     lrc = 14;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; cr = 2;
-   il = cr;
-   if(il != 2){
-     lrc = 15;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; sr = 2;
-   il = sr;
-   if(il != 2){
-     lrc = 16;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; ir = 2;
-   il = ir;
-   if(il != 2){
-     lrc = 17;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; lr = 2;
-   il = lr;
-   if(il != 2){
-     lrc = 18;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; ur = 2;
-   il = ur;
-   if(il != 2){
-     lrc = 19;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; fr = 2;
-   il = fr;
-   if(il != 2){
-     lrc = 20;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; dr = 2;
-   il = dr;
-   if(il != 2){
-     lrc = 21;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; cr = 2;
-   ll = cr;
-   if(ll != 2){
-     lrc = 22;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; sr = 2;
-   ll = sr;
-   if(ll != 2){
-     lrc = 23;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; ir = 2;
-   ll = ir;
-   if(ll != 2){
-     lrc = 24;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; lr = 2;
-   ll = lr;
-   if(ll != 2){
-     lrc = 25;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; ur = 2;
-   ll = ur;
-   if(ll != 2){
-     lrc = 26;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; fr = 2;
-   ll = fr;
-   if(ll != 2){
-     lrc = 27;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; dr = 2;
-   ll = dr;
-   if(ll != 2){
-     lrc = 28;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; cr = 2;
-   ul = cr;
-   if(ul != 2){
-     lrc = 29;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; sr = 2;
-   ul = sr;
-   if(ul != 2){
-     lrc = 30;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; ir = 2;
-   ul = ir;
-   if(ul != 2){
-     lrc = 31;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; lr = 2;
-   ul = lr;
-   if(ul != 2){
-     lrc = 32;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; ur = 2;
-   ul = ur;
-   if(ul != 2){
-     lrc = 33;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; fr = 2;
-   ul = fr;
-   if(ul != 2){
-     lrc = 34;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; dr = 2;
-   ul = dr;
-   if(ul != 2){
-     lrc = 35;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; cr = 2;
-   fl = cr;
-   if(fl != 2){
-     lrc = 36;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; sr = 2;
-   fl = sr;
-   if(fl != 2){
-     lrc = 37;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; ir = 2;
-   fl = ir;
-   if(fl != 2){
-     lrc = 38;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; lr = 2;
-   fl = lr;
-   if(fl != 2){
-     lrc = 39;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; ur = 2;
-   fl = ur;
-   if(fl != 2){
-     lrc = 40;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; fr = 2;
-   fl = fr;
-   if(fl != 2){
-     lrc = 41;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; dr = 2;
-   fl = dr;
-   if(fl != 2){
-     lrc = 42;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; cr = 2;
-   dl = cr;
-   if(dl != 2){
-     lrc = 43;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; sr = 2;
-   dl = sr;
-   if(dl != 2){
-     lrc = 44;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; ir = 2;
-   dl = ir;
-   if(dl != 2){
-     lrc = 45;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; lr = 2;
-   dl = lr;
-   if(dl != 2){
-     lrc = 46;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; ur = 2;
-   dl = ur;
-   if(dl != 2){
-     lrc = 47;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; fr = 2;
-   dl = fr;
-   if(dl != 2){
-     lrc = 48;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; dr = 2;
-   dl = dr;
-   if(dl != 2){
-     lrc = 49;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; cr = 2;
-   cl += cr;
-   if(cl != 7){
-     lrc = 50;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; sr = 2;
-   cl += sr;
-   if(cl != 7){
-     lrc = 51;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; ir = 2;
-   cl += ir;
-   if(cl != 7){
-     lrc = 52;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; lr = 2;
-   cl += lr;
-   if(cl != 7){
-     lrc = 53;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; ur = 2;
-   cl += ur;
-   if(cl != 7){
-     lrc = 54;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; fr = 2;
-   cl += fr;
-   if(cl != 7){
-     lrc = 55;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; dr = 2;
-   cl += dr;
-   if(cl != 7){
-     lrc = 56;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; cr = 2;
-   sl += cr;
-   if(sl != 7){
-     lrc = 57;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; sr = 2;
-   sl += sr;
-   if(sl != 7){
-     lrc = 58;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; ir = 2;
-   sl += ir;
-   if(sl != 7){
-     lrc = 59;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; lr = 2;
-   sl += lr;
-   if(sl != 7){
-     lrc = 60;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; ur = 2;
-   sl += ur;
-   if(sl != 7){
-     lrc = 61;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; fr = 2;
-   sl += fr;
-   if(sl != 7){
-     lrc = 62;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; dr = 2;
-   sl += dr;
-   if(sl != 7){
-     lrc = 63;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; cr = 2;
-   il += cr;
-   if(il != 7){
-     lrc = 64;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; sr = 2;
-   il += sr;
-   if(il != 7){
-     lrc = 65;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; ir = 2;
-   il += ir;
-   if(il != 7){
-     lrc = 66;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; lr = 2;
-   il += lr;
-   if(il != 7){
-     lrc = 67;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; ur = 2;
-   il += ur;
-   if(il != 7){
-     lrc = 68;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; fr = 2;
-   il += fr;
-   if(il != 7){
-     lrc = 69;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; dr = 2;
-   il += dr;
-   if(il != 7){
-     lrc = 70;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; cr = 2;
-   ll += cr;
-   if(ll != 7){
-     lrc = 71;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; sr = 2;
-   ll += sr;
-   if(ll != 7){
-     lrc = 72;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; ir = 2;
-   ll += ir;
-   if(ll != 7){
-     lrc = 73;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; lr = 2;
-   ll += lr;
-   if(ll != 7){
-     lrc = 74;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; ur = 2;
-   ll += ur;
-   if(ll != 7){
-     lrc = 75;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; fr = 2;
-   ll += fr;
-   if(ll != 7){
-     lrc = 76;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; dr = 2;
-   ll += dr;
-   if(ll != 7){
-     lrc = 77;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; cr = 2;
-   ul += cr;
-   if(ul != 7){
-     lrc = 78;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; sr = 2;
-   ul += sr;
-   if(ul != 7){
-     lrc = 79;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; ir = 2;
-   ul += ir;
-   if(ul != 7){
-     lrc = 80;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; lr = 2;
-   ul += lr;
-   if(ul != 7){
-     lrc = 81;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; ur = 2;
-   ul += ur;
-   if(ul != 7){
-     lrc = 82;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; fr = 2;
-   ul += fr;
-   if(ul != 7){
-     lrc = 83;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; dr = 2;
-   ul += dr;
-   if(ul != 7){
-     lrc = 84;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; cr = 2;
-   fl += cr;
-   if(fl != 7){
-     lrc = 85;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; sr = 2;
-   fl += sr;
-   if(fl != 7){
-     lrc = 86;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; ir = 2;
-   fl += ir;
-   if(fl != 7){
-     lrc = 87;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; lr = 2;
-   fl += lr;
-   if(fl != 7){
-     lrc = 88;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; ur = 2;
-   fl += ur;
-   if(fl != 7){
-     lrc = 89;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; fr = 2;
-   fl += fr;
-   if(fl != 7){
-     lrc = 90;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; dr = 2;
-   fl += dr;
-   if(fl != 7){
-     lrc = 91;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; cr = 2;
-   dl += cr;
-   if(dl != 7){
-     lrc = 92;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; sr = 2;
-   dl += sr;
-   if(dl != 7){
-     lrc = 93;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; ir = 2;
-   dl += ir;
-   if(dl != 7){
-     lrc = 94;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; lr = 2;
-   dl += lr;
-   if(dl != 7){
-     lrc = 95;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; ur = 2;
-   dl += ur;
-   if(dl != 7){
-     lrc = 96;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; fr = 2;
-   dl += fr;
-   if(dl != 7){
-     lrc = 97;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; dr = 2;
-   dl += dr;
-   if(dl != 7){
-     lrc = 98;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; cr = 2;
-   cl -= cr;
-   if(cl != 3){
-     lrc = 99;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; sr = 2;
-   cl -= sr;
-   if(cl != 3){
-     lrc = 100;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; ir = 2;
-   cl -= ir;
-   if(cl != 3){
-     lrc = 101;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; lr = 2;
-   cl -= lr;
-   if(cl != 3){
-     lrc = 102;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; ur = 2;
-   cl -= ur;
-   if(cl != 3){
-     lrc = 103;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; fr = 2;
-   cl -= fr;
-   if(cl != 3){
-     lrc = 104;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; dr = 2;
-   cl -= dr;
-   if(cl != 3){
-     lrc = 105;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; cr = 2;
-   sl -= cr;
-   if(sl != 3){
-     lrc = 106;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; sr = 2;
-   sl -= sr;
-   if(sl != 3){
-     lrc = 107;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; ir = 2;
-   sl -= ir;
-   if(sl != 3){
-     lrc = 108;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; lr = 2;
-   sl -= lr;
-   if(sl != 3){
-     lrc = 109;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; ur = 2;
-   sl -= ur;
-   if(sl != 3){
-     lrc = 110;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; fr = 2;
-   sl -= fr;
-   if(sl != 3){
-     lrc = 111;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; dr = 2;
-   sl -= dr;
-   if(sl != 3){
-     lrc = 112;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; cr = 2;
-   il -= cr;
-   if(il != 3){
-     lrc = 113;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; sr = 2;
-   il -= sr;
-   if(il != 3){
-     lrc = 114;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; ir = 2;
-   il -= ir;
-   if(il != 3){
-     lrc = 115;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; lr = 2;
-   il -= lr;
-   if(il != 3){
-     lrc = 116;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; ur = 2;
-   il -= ur;
-   if(il != 3){
-     lrc = 117;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; fr = 2;
-   il -= fr;
-   if(il != 3){
-     lrc = 118;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; dr = 2;
-   il -= dr;
-   if(il != 3){
-     lrc = 119;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; cr = 2;
-   ll -= cr;
-   if(ll != 3){
-     lrc = 120;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; sr = 2;
-   ll -= sr;
-   if(ll != 3){
-     lrc = 121;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; ir = 2;
-   ll -= ir;
-   if(ll != 3){
-     lrc = 122;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; lr = 2;
-   ll -= lr;
-   if(ll != 3){
-     lrc = 123;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; ur = 2;
-   ll -= ur;
-   if(ll != 3){
-     lrc = 124;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; fr = 2;
-   ll -= fr;
-   if(ll != 3){
-     lrc = 125;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; dr = 2;
-   ll -= dr;
-   if(ll != 3){
-     lrc = 126;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; cr = 2;
-   ul -= cr;
-   if(ul != 3){
-     lrc = 127;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; sr = 2;
-   ul -= sr;
-   if(ul != 3){
-     lrc = 128;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; ir = 2;
-   ul -= ir;
-   if(ul != 3){
-     lrc = 129;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; lr = 2;
-   ul -= lr;
-   if(ul != 3){
-     lrc = 130;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; ur = 2;
-   ul -= ur;
-   if(ul != 3){
-     lrc = 131;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; fr = 2;
-   ul -= fr;
-   if(ul != 3){
-     lrc = 132;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; dr = 2;
-   ul -= dr;
-   if(ul != 3){
-     lrc = 133;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; cr = 2;
-   fl -= cr;
-   if(fl != 3){
-     lrc = 134;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; sr = 2;
-   fl -= sr;
-   if(fl != 3){
-     lrc = 135;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; ir = 2;
-   fl -= ir;
-   if(fl != 3){
-     lrc = 136;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; lr = 2;
-   fl -= lr;
-   if(fl != 3){
-     lrc = 137;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; ur = 2;
-   fl -= ur;
-   if(fl != 3){
-     lrc = 138;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; fr = 2;
-   fl -= fr;
-   if(fl != 3){
-     lrc = 139;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; dr = 2;
-   fl -= dr;
-   if(fl != 3){
-     lrc = 140;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; cr = 2;
-   dl -= cr;
-   if(dl != 3){
-     lrc = 141;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; sr = 2;
-   dl -= sr;
-   if(dl != 3){
-     lrc = 142;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; ir = 2;
-   dl -= ir;
-   if(dl != 3){
-     lrc = 143;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; lr = 2;
-   dl -= lr;
-   if(dl != 3){
-     lrc = 144;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; ur = 2;
-   dl -= ur;
-   if(dl != 3){
-     lrc = 145;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; fr = 2;
-   dl -= fr;
-   if(dl != 3){
-     lrc = 146;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; dr = 2;
-   dl -= dr;
-   if(dl != 3){
-     lrc = 147;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; cr = 2;
-   cl *= cr;
-   if(cl != 10){
-     lrc = 148;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; sr = 2;
-   cl *= sr;
-   if(cl != 10){
-     lrc = 149;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; ir = 2;
-   cl *= ir;
-   if(cl != 10){
-     lrc = 150;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; lr = 2;
-   cl *= lr;
-   if(cl != 10){
-     lrc = 151;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; ur = 2;
-   cl *= ur;
-   if(cl != 10){
-     lrc = 152;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; fr = 2;
-   cl *= fr;
-   if(cl != 10){
-     lrc = 153;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; dr = 2;
-   cl *= dr;
-   if(cl != 10){
-     lrc = 154;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; cr = 2;
-   sl *= cr;
-   if(sl != 10){
-     lrc = 155;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; sr = 2;
-   sl *= sr;
-   if(sl != 10){
-     lrc = 156;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; ir = 2;
-   sl *= ir;
-   if(sl != 10){
-     lrc = 157;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; lr = 2;
-   sl *= lr;
-   if(sl != 10){
-     lrc = 158;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; ur = 2;
-   sl *= ur;
-   if(sl != 10){
-     lrc = 159;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; fr = 2;
-   sl *= fr;
-   if(sl != 10){
-     lrc = 160;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; dr = 2;
-   sl *= dr;
-   if(sl != 10){
-     lrc = 161;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; cr = 2;
-   il *= cr;
-   if(il != 10){
-     lrc = 162;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; sr = 2;
-   il *= sr;
-   if(il != 10){
-     lrc = 163;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; ir = 2;
-   il *= ir;
-   if(il != 10){
-     lrc = 164;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; lr = 2;
-   il *= lr;
-   if(il != 10){
-     lrc = 165;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; ur = 2;
-   il *= ur;
-   if(il != 10){
-     lrc = 166;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; fr = 2;
-   il *= fr;
-   if(il != 10){
-     lrc = 167;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; dr = 2;
-   il *= dr;
-   if(il != 10){
-     lrc = 168;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; cr = 2;
-   ll *= cr;
-   if(ll != 10){
-     lrc = 169;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; sr = 2;
-   ll *= sr;
-   if(ll != 10){
-     lrc = 170;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; ir = 2;
-   ll *= ir;
-   if(ll != 10){
-     lrc = 171;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; lr = 2;
-   ll *= lr;
-   if(ll != 10){
-     lrc = 172;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; ur = 2;
-   ll *= ur;
-   if(ll != 10){
-     lrc = 173;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; fr = 2;
-   ll *= fr;
-   if(ll != 10){
-     lrc = 174;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; dr = 2;
-   ll *= dr;
-   if(ll != 10){
-     lrc = 175;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; cr = 2;
-   ul *= cr;
-   if(ul != 10){
-     lrc = 176;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; sr = 2;
-   ul *= sr;
-   if(ul != 10){
-     lrc = 177;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; ir = 2;
-   ul *= ir;
-   if(ul != 10){
-     lrc = 178;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; lr = 2;
-   ul *= lr;
-   if(ul != 10){
-     lrc = 179;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; ur = 2;
-   ul *= ur;
-   if(ul != 10){
-     lrc = 180;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; fr = 2;
-   ul *= fr;
-   if(ul != 10){
-     lrc = 181;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; dr = 2;
-   ul *= dr;
-   if(ul != 10){
-     lrc = 182;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; cr = 2;
-   fl *= cr;
-   if(fl != 10){
-     lrc = 183;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; sr = 2;
-   fl *= sr;
-   if(fl != 10){
-     lrc = 184;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; ir = 2;
-   fl *= ir;
-   if(fl != 10){
-     lrc = 185;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; lr = 2;
-   fl *= lr;
-   if(fl != 10){
-     lrc = 186;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; ur = 2;
-   fl *= ur;
-   if(fl != 10){
-     lrc = 187;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; fr = 2;
-   fl *= fr;
-   if(fl != 10){
-     lrc = 188;
-     if(prlc) printf(f,lrc);
-   }
-   fl = 5; dr = 2;
-   fl *= dr;
-   if(fl != 10){
-     lrc = 189;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; cr = 2;
-   dl *= cr;
-   if(dl != 10){
-     lrc = 190;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; sr = 2;
-   dl *= sr;
-   if(dl != 10){
-     lrc = 191;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; ir = 2;
-   dl *= ir;
-   if(dl != 10){
-     lrc = 192;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; lr = 2;
-   dl *= lr;
-   if(dl != 10){
-     lrc = 193;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; ur = 2;
-   dl *= ur;
-   if(dl != 10){
-     lrc = 194;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; fr = 2;
-   dl *= fr;
-   if(dl != 10){
-     lrc = 195;
-     if(prlc) printf(f,lrc);
-   }
-   dl = 5; dr = 2;
-   dl *= dr;
-   if(dl != 10){
-     lrc = 196;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; cr = 2;
-   cl /= cr;
-   if(cl != 2){
-     lrc = 197;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; sr = 2;
-   cl /= sr;
-   if(cl != 2){
-     lrc = 198;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; ir = 2;
-   cl /= ir;
-   if(cl != 2){
-     lrc = 199;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; lr = 2;
-   cl /= lr;
-   if(cl != 2){
-     lrc = 200;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; ur = 2;
-   cl /= ur;
-   if(cl != 2){
-     lrc = 201;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; fr = 2;
-   cl /= fr;
-   if(cl != 2){
-     lrc = 202;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; dr = 2;
-   cl /= dr;
-   if(cl != 2){
-     lrc = 203;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; cr = 2;
-   sl /= cr;
-   if(sl != 2){
-     lrc = 204;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; sr = 2;
-   sl /= sr;
-   if(sl != 2){
-     lrc = 205;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; ir = 2;
-   sl /= ir;
-   if(sl != 2){
-     lrc = 206;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; lr = 2;
-   sl /= lr;
-   if(sl != 2){
-     lrc = 207;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; ur = 2;
-   sl /= ur;
-   if(sl != 2){
-     lrc = 208;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; fr = 2;
-   sl /= fr;
-   if(sl != 2){
-     lrc = 209;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; dr = 2;
-   sl /= dr;
-   if(sl != 2){
-     lrc = 210;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; cr = 2;
-   il /= cr;
-   if(il != 2){
-     lrc = 211;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; sr = 2;
-   il /= sr;
-   if(il != 2){
-     lrc = 212;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; ir = 2;
-   il /= ir;
-   if(il != 2){
-     lrc = 213;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; lr = 2;
-   il /= lr;
-   if(il != 2){
-     lrc = 214;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; ur = 2;
-   il /= ur;
-   if(il != 2){
-     lrc = 215;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; fr = 2;
-   il /= fr;
-   if(il != 2){
-     lrc = 216;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; dr = 2;
-   il /= dr;
-   if(il != 2){
-     lrc = 217;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; cr = 2;
-   ll /= cr;
-   if(ll != 2){
-     lrc = 218;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; sr = 2;
-   ll /= sr;
-   if(ll != 2){
-     lrc = 219;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; ir = 2;
-   ll /= ir;
-   if(ll != 2){
-     lrc = 220;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; lr = 2;
-   ll /= lr;
-   if(ll != 2){
-     lrc = 221;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; ur = 2;
-   ll /= ur;
-   if(ll != 2){
-     lrc = 222;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; fr = 2;
-   ll /= fr;
-   if(ll != 2){
-     lrc = 223;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; dr = 2;
-   ll /= dr;
-   if(ll != 2){
-     lrc = 224;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; cr = 2;
-   ul /= cr;
-   if(ul != 2){
-     lrc = 225;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; sr = 2;
-   ul /= sr;
-   if(ul != 2){
-     lrc = 226;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; ir = 2;
-   ul /= ir;
-   if(ul != 2){
-     lrc = 227;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; lr = 2;
-   ul /= lr;
-   if(ul != 2){
-     lrc = 228;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; ur = 2;
-   ul /= ur;
-   if(ul != 2){
-     lrc = 229;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; fr = 2;
-   ul /= fr;
-   if(ul != 2){
-     lrc = 230;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; dr = 2;
-   ul /= dr;
-   if(ul != 2){
-     lrc = 231;
-     if(prlc) printf(f,lrc);
-   }
-
-   #ifdef NO_FLOATS
-               fl = 5; cr = 2;
-               fl /= cr;
-               if(fl != 2){
-               lrc = 232;
-               if(prlc) printf(f,lrc);
-               }
-               fl = 5; sr = 2;
-               fl /= sr;
-               if(fl != 2){
-               lrc = 233;
-               if(prlc) printf(f,lrc);
-               }
-               fl = 5; ir = 2;
-               fl /= ir;
-               if(fl != 2){
-               lrc = 234;
-               if(prlc) printf(f,lrc);
-               }
-               fl = 5; lr = 2;
-               fl /= lr;
-               if(fl != 2){
-               lrc = 235;
-               if(prlc) printf(f,lrc);
-               }
-               fl = 5; ur = 2;
-               fl /= ur;
-               if(fl != 2){
-               lrc = 236;
-               if(prlc) printf(f,lrc);
-               }
-               fl = 5; fr = 2;
-               fl /= fr;
-               if(fl != 2){
-               lrc = 237;
-               if(prlc) printf(f,lrc);
-               }
-               fl = 5; dr = 2;
-               fl /= dr;
-               if(fl != 2){
-               lrc = 238;
-               if(prlc) printf(f,lrc);
-               }
-               dl = 5; cr = 2;
-               dl /= cr;
-               if(dl != 2){
-               lrc = 239;
-               if(prlc) printf(f,lrc);
-               }
-               dl = 5; sr = 2;
-               dl /= sr;
-               if(dl != 2){
-               lrc = 240;
-               if(prlc) printf(f,lrc);
-               }
-               dl = 5; ir = 2;
-               dl /= ir;
-               if(dl != 2){
-               lrc = 241;
-               if(prlc) printf(f,lrc);
-               }
-               dl = 5; lr = 2;
-               dl /= lr;
-               if(dl != 2){
-               lrc = 242;
-               if(prlc) printf(f,lrc);
-               }
-               dl = 5; ur = 2;
-               dl /= ur;
-               if(dl != 2){
-               lrc = 243;
-               if(prlc) printf(f,lrc);
-               }
-               dl = 5; fr = 2;
-               dl /= fr;
-               if(dl != 2){
-               lrc = 244;
-               if(prlc) printf(f,lrc);
-               }
-               dl = 5; dr = 2;
-               dl /= dr;
-               if(dl != 2){
-               lrc = 245;
-               if(prlc) printf(f,lrc);
-               }
-   #else
-               fl = 5; cr = 2;
-               fl /= cr;
-               if(fl != 2.5){
-               lrc = 232;
-               if(prlc) printf(f,lrc);
-               }
-               fl = 5; sr = 2;
-               fl /= sr;
-               if(fl != 2.5){
-               lrc = 233;
-               if(prlc) printf(f,lrc);
-               }
-               fl = 5; ir = 2;
-               fl /= ir;
-               if(fl != 2.5){
-               lrc = 234;
-               if(prlc) printf(f,lrc);
-               }
-               fl = 5; lr = 2;
-               fl /= lr;
-               if(fl != 2.5){
-               lrc = 235;
-               if(prlc) printf(f,lrc);
-               }
-               fl = 5; ur = 2;
-               fl /= ur;
-               if(fl != 2.5){
-               lrc = 236;
-               if(prlc) printf(f,lrc);
-               }
-               fl = 5; fr = 2;
-               fl /= fr;
-               if(fl != 2.5){
-               lrc = 237;
-               if(prlc) printf(f,lrc);
-               }
-               fl = 5; dr = 2;
-               fl /= dr;
-               if(fl != 2.5){
-               lrc = 238;
-               if(prlc) printf(f,lrc);
-               }
-               dl = 5; cr = 2;
-               dl /= cr;
-               if(dl != 2.5){
-               lrc = 239;
-               if(prlc) printf(f,lrc);
-               }
-               dl = 5; sr = 2;
-               dl /= sr;
-               if(dl != 2.5){
-               lrc = 240;
-               if(prlc) printf(f,lrc);
-               }
-               dl = 5; ir = 2;
-               dl /= ir;
-               if(dl != 2.5){
-               lrc = 241;
-               if(prlc) printf(f,lrc);
-               }
-               dl = 5; lr = 2;
-               dl /= lr;
-               if(dl != 2.5){
-               lrc = 242;
-               if(prlc) printf(f,lrc);
-               }
-               dl = 5; ur = 2;
-               dl /= ur;
-               if(dl != 2.5){
-               lrc = 243;
-               if(prlc) printf(f,lrc);
-               }
-               dl = 5; fr = 2;
-               dl /= fr;
-               if(dl != 2.5){
-               lrc = 244;
-               if(prlc) printf(f,lrc);
-               }
-               dl = 5; dr = 2;
-               dl /= dr;
-               if(dl != 2.5){
-               lrc = 245;
-               if(prlc) printf(f,lrc);
-               }
-   #endif
-   cl = 5; cr = 2;
-   cl %= cr;
-   if(cl != 1){
-     lrc = 246;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; sr = 2;
-   cl %= sr;
-   if(cl != 1){
-     lrc = 247;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; ir = 2;
-   cl %= ir;
-   if(cl != 1){
-     lrc = 248;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; lr = 2;
-   cl %= lr;
-   if(cl != 1){
-     lrc = 249;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; ur = 2;
-   cl %= ur;
-   if(cl != 1){
-     lrc = 250;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; cr = 2;
-   sl %= cr;
-   if(sl != 1){
-     lrc = 251;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; sr = 2;
-   sl %= sr;
-   if(sl != 1){
-     lrc = 252;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; ir = 2;
-   sl %= ir;
-   if(sl != 1){
-     lrc = 253;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; lr = 2;
-   sl %= lr;
-   if(sl != 1){
-     lrc = 254;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; ur = 2;
-   sl %= ur;
-   if(sl != 1){
-     lrc = 255;
-     if(prlc) printf(f,lrc);
-   }
-
-   if(lrc != 0) {
-     rc = 1;
-     if(pd0->flgd != 0) printf(s714er,1);
-   }
-   return rc;
-}
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                case 0: return s714(pd0);
-        }
-}
-
-#define cq_sections 1
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq714b.c b/test/val/cq714b.c
deleted file mode 100644 (file)
index b4908f4..0000000
+++ /dev/null
@@ -1,1018 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 9: Statements
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-#ifndef NO_OLD_FUNC_DECL
-s714(pd0)          /*  7.14  Assignment operators       */
-struct defs *pd0;
-{
-#else
-int s714(struct defs *pd0){
-#endif
-   static char f[] = "Local error %d.\n";
-   static char s714er[] = "s714,er%d\n";
-   static char qs714[8] = "s714   ";
-   register int prlc, lrc;
-   int rc;
-   char cl, cr;
-   short sl, sr;
-   int il, ir;
-   long ll, lr;
-   unsigned ul, ur;
-   #ifndef NO_FLOATS
-   float fl, fr;
-   double dl, dr;
-   #else
-   signed fl, fr;
-   signed dl, dr;
-   #endif
-   char *ps, *pt;
-   ps = qs714;
-   pt = pd0->rfs;
-   rc = 0;
-   lrc = 0;
-   prlc = pd0->flgl;
-   while (*pt++ = *ps++);
-
-        /* This section tests the assignment operators.
-
-        It is an exhaustive test of all assignment statements
-        of the form:
-
-                vl op vr
-
-        where vl and vr are variables from the set
-        {char,short,int,long,unsigned,float,double} and op is
-        one of the assignment operators. There are 395 such
-        statements.
-
-        The initial values for the variables have been chosen
-        so that both the initial values and the results will
-        "fit" in just about any implementation, and that the re-
-        sults will be such that they test for the proper form-
-        ation of composite operators, rather than checking for
-        the valid operation of those operators' components.
-        For example, in checking >>=, we want to verify that
-        a right shift and a move take place, rather than
-        whether or not there may be some peculiarities about
-        the right shift. Such tests have been made previously,
-        and to repeat them here would be to throw out a red
-        herring.
-
-        The table below lists the operators, assignment targets,
-        initial values for left and right operands, and the
-        expected values of the results.
-
-          =  +=  -=  *=  /=  %=  >>=  <<=  &=  ^=  |=
-char      2   7   3  10   2   1   1    20   8   6  14
-short     2   7   3  10   2   1   1    20   8   6  14
-int       2   7   3  10   2   1   1    20   8   6  14
-long      2   7   3  10   2   1   1    20   8   6  14
-unsigned  2   7   3  10   2   1   1    20   8   6  14
-float     2   7   3  10 2.5 |             |
-double    2   7   3  10 2.5 |             |
-                            |             |
-initial         (5,2)       |    (5,2)    |  (12,10)
-
-        The following machine-generated program reflects the
-        tests described in the table.
-                                                                */
-
-   il = 5; cr = 2;
-   il %= cr;
-   if(il != 1){
-     lrc = 256;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; sr = 2;
-   il %= sr;
-   if(il != 1){
-     lrc = 257;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; ir = 2;
-   il %= ir;
-   if(il != 1){
-     lrc = 258;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; lr = 2;
-   il %= lr;
-   if(il != 1){
-     lrc = 259;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; ur = 2;
-   il %= ur;
-   if(il != 1){
-     lrc = 260;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; cr = 2;
-   ll %= cr;
-   if(ll != 1){
-     lrc = 261;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; sr = 2;
-   ll %= sr;
-   if(ll != 1){
-     lrc = 262;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; ir = 2;
-   ll %= ir;
-   if(ll != 1){
-     lrc = 263;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; lr = 2;
-   ll %= lr;
-   if(ll != 1){
-     lrc = 264;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; ur = 2;
-   ll %= ur;
-   if(ll != 1){
-     lrc = 265;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; cr = 2;
-   ul %= cr;
-   if(ul != 1){
-     lrc = 266;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; sr = 2;
-   ul %= sr;
-   if(ul != 1){
-     lrc = 267;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; ir = 2;
-   ul %= ir;
-   if(ul != 1){
-     lrc = 268;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; lr = 2;
-   ul %= lr;
-   if(ul != 1){
-     lrc = 269;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; ur = 2;
-   ul %= ur;
-   if(ul != 1){
-     lrc = 270;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; cr = 2;
-   cl >>= cr;
-   if(cl != 1){
-     lrc = 271;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; sr = 2;
-   cl >>= sr;
-   if(cl != 1){
-     lrc = 272;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; ir = 2;
-   cl >>= ir;
-   if(cl != 1){
-     lrc = 273;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; lr = 2;
-   cl >>= lr;
-   if(cl != 1){
-     lrc = 274;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; ur = 2;
-   cl >>= ur;
-   if(cl != 1){
-     lrc = 275;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; cr = 2;
-   sl >>= cr;
-   if(sl != 1){
-     lrc = 276;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; sr = 2;
-   sl >>= sr;
-   if(sl != 1){
-     lrc = 277;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; ir = 2;
-   sl >>= ir;
-   if(sl != 1){
-     lrc = 278;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; lr = 2;
-   sl >>= lr;
-   if(sl != 1){
-     lrc = 279;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; ur = 2;
-   sl >>= ur;
-   if(sl != 1){
-     lrc = 280;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; cr = 2;
-   il >>= cr;
-   if(il != 1){
-     lrc = 281;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; sr = 2;
-   il >>= sr;
-   if(il != 1){
-     lrc = 282;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; ir = 2;
-   il >>= ir;
-   if(il != 1){
-     lrc = 283;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; lr = 2;
-   il >>= lr;
-   if(il != 1){
-     lrc = 284;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; ur = 2;
-   il >>= ur;
-   if(il != 1){
-     lrc = 285;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; cr = 2;
-   ll >>= cr;
-   if(ll != 1){
-     lrc = 286;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; sr = 2;
-   ll >>= sr;
-   if(ll != 1){
-     lrc = 287;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; ir = 2;
-   ll >>= ir;
-   if(ll != 1){
-     lrc = 288;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; lr = 2;
-   ll >>= lr;
-   if(ll != 1){
-     lrc = 289;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; ur = 2;
-   ll >>= ur;
-   if(ll != 1){
-     lrc = 290;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; cr = 2;
-   ul >>= cr;
-   if(ul != 1){
-     lrc = 291;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; sr = 2;
-   ul >>= sr;
-   if(ul != 1){
-     lrc = 292;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; ir = 2;
-   ul >>= ir;
-   if(ul != 1){
-     lrc = 293;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; lr = 2;
-   ul >>= lr;
-   if(ul != 1){
-     lrc = 294;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; ur = 2;
-   ul >>= ur;
-   if(ul != 1){
-     lrc = 295;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; cr = 2;
-   cl <<= cr;
-   if(cl != 20){
-     lrc = 296;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; sr = 2;
-   cl <<= sr;
-   if(cl != 20){
-     lrc = 297;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; ir = 2;
-   cl <<= ir;
-   if(cl != 20){
-     lrc = 298;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; lr = 2;
-   cl <<= lr;
-   if(cl != 20){
-     lrc = 299;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 5; ur = 2;
-   cl <<= ur;
-   if(cl != 20){
-     lrc = 300;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; cr = 2;
-   sl <<= cr;
-   if(sl != 20){
-     lrc = 301;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; sr = 2;
-   sl <<= sr;
-   if(sl != 20){
-     lrc = 302;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; ir = 2;
-   sl <<= ir;
-   if(sl != 20){
-     lrc = 303;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; lr = 2;
-   sl <<= lr;
-   if(sl != 20){
-     lrc = 304;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 5; ur = 2;
-   sl <<= ur;
-   if(sl != 20){
-     lrc = 305;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; cr = 2;
-   il <<= cr;
-   if(il != 20){
-     lrc = 306;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; sr = 2;
-   il <<= sr;
-   if(il != 20){
-     lrc = 307;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; ir = 2;
-   il <<= ir;
-   if(il != 20){
-     lrc = 308;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; lr = 2;
-   il <<= lr;
-   if(il != 20){
-     lrc = 309;
-     if(prlc) printf(f,lrc);
-   }
-   il = 5; ur = 2;
-   il <<= ur;
-   if(il != 20){
-     lrc = 310;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; cr = 2;
-   ll <<= cr;
-   if(ll != 20){
-     lrc = 311;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; sr = 2;
-   ll <<= sr;
-   if(ll != 20){
-     lrc = 312;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; ir = 2;
-   ll <<= ir;
-   if(ll != 20){
-     lrc = 313;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; lr = 2;
-   ll <<= lr;
-   if(ll != 20){
-     lrc = 314;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 5; ur = 2;
-   ll <<= ur;
-   if(ll != 20){
-     lrc = 315;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; cr = 2;
-   ul <<= cr;
-   if(ul != 20){
-     lrc = 316;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; sr = 2;
-   ul <<= sr;
-   if(ul != 20){
-     lrc = 317;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; ir = 2;
-   ul <<= ir;
-   if(ul != 20){
-     lrc = 318;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; lr = 2;
-   ul <<= lr;
-   if(ul != 20){
-     lrc = 319;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 5; ur = 2;
-   ul <<= ur;
-   if(ul != 20){
-     lrc = 320;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 12; cr = 10;
-   cl &= cr;
-   if(cl != 8){
-     lrc = 321;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 12; sr = 10;
-   cl &= sr;
-   if(cl != 8){
-     lrc = 322;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 12; ir = 10;
-   cl &= ir;
-   if(cl != 8){
-     lrc = 323;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 12; lr = 10;
-   cl &= lr;
-   if(cl != 8){
-     lrc = 324;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 12; ur = 10;
-   cl &= ur;
-   if(cl != 8){
-     lrc = 325;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 12; cr = 10;
-   sl &= cr;
-   if(sl != 8){
-     lrc = 326;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 12; sr = 10;
-   sl &= sr;
-   if(sl != 8){
-     lrc = 327;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 12; ir = 10;
-   sl &= ir;
-   if(sl != 8){
-     lrc = 328;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 12; lr = 10;
-   sl &= lr;
-   if(sl != 8){
-     lrc = 329;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 12; ur = 10;
-   sl &= ur;
-   if(sl != 8){
-     lrc = 330;
-     if(prlc) printf(f,lrc);
-   }
-   il = 12; cr = 10;
-   il &= cr;
-   if(il != 8){
-     lrc = 331;
-     if(prlc) printf(f,lrc);
-   }
-   il = 12; sr = 10;
-   il &= sr;
-   if(il != 8){
-     lrc = 332;
-     if(prlc) printf(f,lrc);
-   }
-   il = 12; ir = 10;
-   il &= ir;
-   if(il != 8){
-     lrc = 333;
-     if(prlc) printf(f,lrc);
-   }
-   il = 12; lr = 10;
-   il &= lr;
-   if(il != 8){
-     lrc = 334;
-     if(prlc) printf(f,lrc);
-   }
-   il = 12; ur = 10;
-   il &= ur;
-   if(il != 8){
-     lrc = 335;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 12; cr = 10;
-   ll &= cr;
-   if(ll != 8){
-     lrc = 336;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 12; sr = 10;
-   ll &= sr;
-   if(ll != 8){
-     lrc = 337;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 12; ir = 10;
-   ll &= ir;
-   if(ll != 8){
-     lrc = 338;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 12; lr = 10;
-   ll &= lr;
-   if(ll != 8){
-     lrc = 339;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 12; ur = 10;
-   ll &= ur;
-   if(ll != 8){
-     lrc = 340;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 12; cr = 10;
-   ul &= cr;
-   if(ul != 8){
-     lrc = 341;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 12; sr = 10;
-   ul &= sr;
-   if(ul != 8){
-     lrc = 342;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 12; ir = 10;
-   ul &= ir;
-   if(ul != 8){
-     lrc = 343;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 12; lr = 10;
-   ul &= lr;
-   if(ul != 8){
-     lrc = 344;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 12; ur = 10;
-   ul &= ur;
-   if(ul != 8){
-     lrc = 345;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 12; cr = 10;
-   cl ^= cr;
-   if(cl != 6){
-     lrc = 346;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 12; sr = 10;
-   cl ^= sr;
-   if(cl != 6){
-     lrc = 347;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 12; ir = 10;
-   cl ^= ir;
-   if(cl != 6){
-     lrc = 348;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 12; lr = 10;
-   cl ^= lr;
-   if(cl != 6){
-     lrc = 349;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 12; ur = 10;
-   cl ^= ur;
-   if(cl != 6){
-     lrc = 350;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 12; cr = 10;
-   sl ^= cr;
-   if(sl != 6){
-     lrc = 351;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 12; sr = 10;
-   sl ^= sr;
-   if(sl != 6){
-     lrc = 352;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 12; ir = 10;
-   sl ^= ir;
-   if(sl != 6){
-     lrc = 353;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 12; lr = 10;
-   sl ^= lr;
-   if(sl != 6){
-     lrc = 354;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 12; ur = 10;
-   sl ^= ur;
-   if(sl != 6){
-     lrc = 355;
-     if(prlc) printf(f,lrc);
-   }
-   il = 12; cr = 10;
-   il ^= cr;
-   if(il != 6){
-     lrc = 356;
-     if(prlc) printf(f,lrc);
-   }
-   il = 12; sr = 10;
-   il ^= sr;
-   if(il != 6){
-     lrc = 357;
-     if(prlc) printf(f,lrc);
-   }
-   il = 12; ir = 10;
-   il ^= ir;
-   if(il != 6){
-     lrc = 358;
-     if(prlc) printf(f,lrc);
-   }
-   il = 12; lr = 10;
-   il ^= lr;
-   if(il != 6){
-     lrc = 359;
-     if(prlc) printf(f,lrc);
-   }
-   il = 12; ur = 10;
-   il ^= ur;
-   if(il != 6){
-     lrc = 360;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 12; cr = 10;
-   ll ^= cr;
-   if(ll != 6){
-     lrc = 361;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 12; sr = 10;
-   ll ^= sr;
-   if(ll != 6){
-     lrc = 362;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 12; ir = 10;
-   ll ^= ir;
-   if(ll != 6){
-     lrc = 363;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 12; lr = 10;
-   ll ^= lr;
-   if(ll != 6){
-     lrc = 364;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 12; ur = 10;
-   ll ^= ur;
-   if(ll != 6){
-     lrc = 365;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 12; cr = 10;
-   ul ^= cr;
-   if(ul != 6){
-     lrc = 366;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 12; sr = 10;
-   ul ^= sr;
-   if(ul != 6){
-     lrc = 367;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 12; ir = 10;
-   ul ^= ir;
-   if(ul != 6){
-     lrc = 368;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 12; lr = 10;
-   ul ^= lr;
-   if(ul != 6){
-     lrc = 369;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 12; ur = 10;
-   ul ^= ur;
-   if(ul != 6){
-     lrc = 370;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 12; cr = 10;
-   cl |= cr;
-   if(cl != 14){
-     lrc = 371;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 12; sr = 10;
-   cl |= sr;
-   if(cl != 14){
-     lrc = 372;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 12; ir = 10;
-   cl |= ir;
-   if(cl != 14){
-     lrc = 373;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 12; lr = 10;
-   cl |= lr;
-   if(cl != 14){
-     lrc = 374;
-     if(prlc) printf(f,lrc);
-   }
-   cl = 12; ur = 10;
-   cl |= ur;
-   if(cl != 14){
-     lrc = 375;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 12; cr = 10;
-   sl |= cr;
-   if(sl != 14){
-     lrc = 376;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 12; sr = 10;
-   sl |= sr;
-   if(sl != 14){
-     lrc = 377;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 12; ir = 10;
-   sl |= ir;
-   if(sl != 14){
-     lrc = 378;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 12; lr = 10;
-   sl |= lr;
-   if(sl != 14){
-     lrc = 379;
-     if(prlc) printf(f,lrc);
-   }
-   sl = 12; ur = 10;
-   sl |= ur;
-   if(sl != 14){
-     lrc = 380;
-     if(prlc) printf(f,lrc);
-   }
-   il = 12; cr = 10;
-   il |= cr;
-   if(il != 14){
-     lrc = 381;
-     if(prlc) printf(f,lrc);
-   }
-   il = 12; sr = 10;
-   il |= sr;
-   if(il != 14){
-     lrc = 382;
-     if(prlc) printf(f,lrc);
-   }
-   il = 12; ir = 10;
-   il |= ir;
-   if(il != 14){
-     lrc = 383;
-     if(prlc) printf(f,lrc);
-   }
-   il = 12; lr = 10;
-   il |= lr;
-   if(il != 14){
-     lrc = 384;
-     if(prlc) printf(f,lrc);
-   }
-   il = 12; ur = 10;
-   il |= ur;
-   if(il != 14){
-     lrc = 385;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 12; cr = 10;
-   ll |= cr;
-   if(ll != 14){
-     lrc = 386;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 12; sr = 10;
-   ll |= sr;
-   if(ll != 14){
-     lrc = 387;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 12; ir = 10;
-   ll |= ir;
-   if(ll != 14){
-     lrc = 388;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 12; lr = 10;
-   ll |= lr;
-   if(ll != 14){
-     lrc = 389;
-     if(prlc) printf(f,lrc);
-   }
-   ll = 12; ur = 10;
-   ll |= ur;
-   if(ll != 14){
-     lrc = 390;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 12; cr = 10;
-   ul |= cr;
-   if(ul != 14){
-     lrc = 391;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 12; sr = 10;
-   ul |= sr;
-   if(ul != 14){
-     lrc = 392;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 12; ir = 10;
-   ul |= ir;
-   if(ul != 14){
-     lrc = 393;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 12; lr = 10;
-   ul |= lr;
-   if(ul != 14){
-     lrc = 394;
-     if(prlc) printf(f,lrc);
-   }
-   ul = 12; ur = 10;
-   ul |= ur;
-   if(ul != 14){
-     lrc = 395;
-     if(prlc) printf(f,lrc);
-   }
-   if(lrc != 0) {
-     rc = 1;
-     if(pd0->flgd != 0) printf(s714er,1);
-   }
-   return rc;
-}
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                case 0: return s714(pd0);
-        }
-}
-
-#define cq_sections 1
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq715.c b/test/val/cq715.c
deleted file mode 100644 (file)
index fec9c61..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 7.15: Comma operator
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-/*#include "cq26.c"*/ /* hardware check */
-#ifdef NO_IMPLICIT_FUNC_PROTOTYPES
-s715f(int x,int y,int z);
-#endif
-
-#ifndef NO_OLD_FUNC_DECL
-s715(pd0)          /*  7.15 Comma operator     */
-struct defs *pd0;
-{
-#else
-int s715(struct defs *pd0) {
-#endif
-   static char s715er[] = "s715,er%d\n";
-   static char qs715[8] = "s715   ";
-   int rc;
-   char *ps, *pt;
-   int a, t, c, i;
-   a = c = 0;
-   ps = qs715;
-   pt = pd0->rfs;
-   rc = 0;
-   while (*pt++ = *ps++);
-
-        /* A pair of expressions separated by a comma is
-        evaluated left to right and the value of the left
-        expression is discarded.
-                                                                */
-   i = 1;
-   if( i++,i++,i++,i++,++i != 6 ){
-     if(pd0->flgd != 0) printf(s715er,1);
-     rc = rc+1;
-   }
-
-        /* In contexts where the comma is given a special mean-
-        ing, for example in a list of actual arguments to
-        functions (sic) and lists of initializers, the comma
-        operator as described in this section can only appear
-        in parentheses; for example
-
-                f( a, (t=3, t+2), c)
-
-        has three arguments, the second of which has the
-        value 5.
-                                                                */
-
-   if(s715f(a, (t=3, t+2), c) != 5){
-     if(pd0->flgd != 0) printf(s715er,2);
-     rc = rc+2;
-   }
-   return rc;
-}
-s715f(x,y,z)
-int x, y, z;
-{
-   return y;
-}
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                /*case 0: return s26(pd0);*/
-                case 0: return s715(pd0);
-        }
-}
-
-#define cq_sections 1
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq72.c b/test/val/cq72.c
deleted file mode 100644 (file)
index 2f956e5..0000000
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 7.2: Unary Operators
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-#define CQ26_INCLUDED
-/*
-  section s26, which pokes around at the hardware
-  trying to figure out the characteristics of the machine that
-  it is running on, saves information that is subsequently
-  used by sections s626, s72, and s757. If this program is
-  to be broken up into smallish pieces, say for running on
-  a microcomputer, take care to see that s26 is called before
-  calling any of the latter three sections.
-*/
-
-/*
-        2.6  Hardware Characteristics
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-s26(pd0)
-struct defs *pd0;
-{
-#else
-s26(struct defs *pd0) {
-#endif
-   static char qs26[8] = "s26    ";
-   char *ps, *pt;
-   char c0, c1;
-   #ifndef NO_FLOATS
-        float temp, one, delta;
-        double tempd, oned;
-   #endif
-   static char s[] = "%3d bits in %ss.\n";
-   static char s2[] = "%e is the least number that can be added to 1. (%s).\n";
-
-   ps = qs26;
-   pt = pd0->rfs;
-
-   while(*pt++ = *ps++);
-
-          /* Here, we shake the machinery a little to see what falls
-             out.  First, we find out how many bits are in a char.  */
-
-   pd0->cbits = 0;
-   c0 = 0;
-   c1 = 1;
-
-   while(c0 != c1) {
-     c1 = c1<<1;
-     pd0->cbits = pd0->cbits+1;
-   }
-          /* That information lets us determine the size of everything else. */
-
-   pd0->ibits = pd0->cbits * sizeof(int);
-   pd0->sbits = pd0->cbits * sizeof(short);
-   pd0->lbits = pd0->cbits * sizeof(long);
-   pd0->ubits = pd0->cbits * sizeof(unsigned);
-   #ifndef NO_FLOATS
-        pd0->fbits = pd0->cbits * sizeof(float);
-        pd0->dbits = pd0->cbits * sizeof(double);
-   #endif
-
-          /* We have now almost reconstructed the table in section 2.6, the
-             exception being the range of the floating point hardware.
-             Now there are just so many ways to conjure up a floating point
-             representation system that it's damned near impossible to guess
-             what's going on by writing a program to interpret bit patterns.
-             Further, the information isn't all that useful, if we consider
-             the fact that machines that won't handle numbers between 10**30
-             and 10**-30 are very hard to find, and that people playing with
-             numbers outside that range have a lot more to worry about than
-             just the capacity of the characteristic.
-
-             A much more useful measure is the precision, which can be ex-
-             pressed in terms of the smallest number that can be added to
-             1. without loss of significance. We calculate that here, for
-             float and double.                       */
-
-#ifndef NO_FLOATS
-   one = 1.;
-   delta = 1.;
-   temp = 0.;
-   while(temp != one) {
-     temp = one+delta;
-     delta = delta/2.;
-   }
-   pd0->fprec = delta * 4.;
-   oned = 1.;
-   delta = 1.;
-   tempd = 0.;
-   while(tempd != oned) {
-     tempd = oned+delta;
-     delta = delta/2.;
-   }
-   pd0->dprec = delta * 4.;
-#endif
-
-          /* Now, if anyone's interested, we publish the results.       */
-
-#ifndef CQ26_INCLUDED
-   if(pd0->flgm != 0) {
-     printf(s,pd0->cbits,"char");
-     printf(s,pd0->ibits,"int");
-     printf(s,pd0->sbits,"short");
-     printf(s,pd0->lbits,"long");
-     printf(s,pd0->ubits,"unsigned");
-     printf(s,pd0->fbits,"float");
-     printf(s,pd0->dbits,"double");
-     #ifndef NO_FLOATS
-        printf(s2,pd0->fprec,"float");
-        printf(s2,pd0->dprec,"double");
-     #else
-        printf("NO_FLOATS\n");
-     #endif
-   }
-#endif
-          /* Since we are only exploring and perhaps reporting, but not
-             testing any features, we cannot return an error code.  */
-
-   return 0;
-}
-
-#ifndef NO_OLD_FUNC_DECL
-s72(pd0)          /*  7.2  Unary operators  */
-struct defs *pd0;
-{
-#else
-int s72(struct defs *pd0){
-#endif
-   static char s72er[] = "s72,er%d\n";
-   static char qs72[8] = "s72    ";
-   int rc;
-   char *ps, *pt;
-   int k, j, i, lrc;
-   char c;
-   short s;
-   long l;
-   unsigned u;
-
-   #ifndef NO_FLOATS
-        double d;
-        float f;
-   #else
-        signed d;
-        signed f;
-   #endif
-
-   ps = qs72;
-   pt = pd0->rfs;
-   rc = 0;
-   while (*pt++ = *ps++);
-
-        /* The *, denoting indirection, and the &, denoting a
-        pointer, are duals of each other, and ought to behave as
-        such...                                                 */
-
-   k = 2;
-   if(*&*&k != 2){
-     rc = rc+1;
-     printf(s72er,1);
-   }
-
-        /* The unary minus has the conventional meaning.        */
-
-   if(k+(-k) != 0){
-     rc = rc+2;
-     printf(s72er,2);
-   }
-
-        /*  The negation operator (!) has been thoroughly checked out,
-        perhaps more thoroughly than any of the others. The ~ oper-
-        ator gets us a ones complement.                         */
-
-   k = 0;
-   for(j=0;j<pd0->ibits;j++) k = (k<<1)|1;
-   if(~k != 0){
-     rc = rc+4;
-     printf(s72er,4);
-   }
-
-        /*  Now we look at the ++ and -- operators, which can be
-        used in either prefix or suffix form. With side
-        effects they're loaded.                                 */
-
-   k = 5;
-
-   if( ++k != 6 || --k != 5
-    || k++ != 5 || k-- != 6
-    ||   k != 5 ){
-     rc = rc+8;
-     printf(s72er,8);
-   }
-
-        /*  An expression preceded by the parenthesised name of a
-        data type causes conversion of the value of the expression
-        to the named type. This construction is called a cast.
-        Here, we check to see that all of the possible casts and
-        their simple combinations are accepted by the compiler,
-        and that they all produce a correct result for this sample
-        of size one.                                            */
-
-   c = 26;  l = 26;
-   s = 26;  u = 26;
-   i = 26;
-   #ifndef NO_FLOATS
-   f = 26.;
-   d = 26.;
-   #else
-   f = 26;
-   d = 26;
-   #endif
-
-   lrc = 0;
-
-   if( (char)s != 26 || (char)i != 26
-    || (char)l != 26 || (char)u != 26
-    || (char)f != 26 || (char)d != 26 ) lrc = lrc+1;
-
-   if( (short)c != 26 || (short)i != 26
-    || (short)l != 26 || (short)u != 26
-    || (short)f != 26 || (short)d != 26) lrc = lrc+2;
-
-   if( (int)c != 26 || (int)s != 26
-    || (int)l != 26 || (int)u != 26
-    || (int)f != 26 || (int)d != 26 ) lrc = lrc+4;
-
-   if( (long)c != 26 || (long)s != 26
-    || (long)i != 26 || (long)u != 26
-    || (long)f != 26 || (long)d != 26 ) lrc = lrc+8;
-
-   if( (unsigned)c != 26 || (unsigned)s != 26
-    || (unsigned)i != 26 || (unsigned)l != 26
-    || (unsigned)f != 26 || (unsigned)d != 26 ) lrc = lrc+16;
-
-   #ifndef NO_FLOATS
-   if( (float)c != 26. || (float)s != 26.
-    || (float)i != 26. || (float)l != 26.
-    || (float)u != 26. || (float)d != 26. ) lrc = lrc+32;
-
-   if( (double)c != 26. || (double)s != 26.
-    || (double)i != 26. || (double)l != 26.
-    || (double)u != 26. || (double)f != 26. ) lrc = lrc+64;
-   #endif
-
-   if(lrc != 0){
-     rc = rc+16;
-     printf(s72er,16);
-   }
-
-        /*  The sizeof operator has been tested previously.     */
-
-   return rc;
-}
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                case 0: return s26(pd0);
-                case 1: return s72(pd0);
-        }
-}
-
-#define cq_sections 2
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq757.c b/test/val/cq757.c
deleted file mode 100644 (file)
index 60b5885..0000000
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 7.5: Shift operators, 7.6 Relational operators, 7.7 Equality operator
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-#define CQ26_INCLUDED
-/*
-  section s26, which pokes around at the hardware
-  trying to figure out the characteristics of the machine that
-  it is running on, saves information that is subsequently
-  used by sections s626, s72, and s757. If this program is
-  to be broken up into smallish pieces, say for running on
-  a microcomputer, take care to see that s26 is called before
-  calling any of the latter three sections.
-*/
-
-/*
-        2.6  Hardware Characteristics
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-s26(pd0)
-struct defs *pd0;
-{
-#else
-s26(struct defs *pd0) {
-#endif
-   static char qs26[8] = "s26    ";
-   char *ps, *pt;
-   char c0, c1;
-   #ifndef NO_FLOATS
-        float temp, one, delta;
-        double tempd, oned;
-   #endif
-   static char s[] = "%3d bits in %ss.\n";
-   static char s2[] = "%e is the least number that can be added to 1. (%s).\n";
-
-   ps = qs26;
-   pt = pd0->rfs;
-
-   while(*pt++ = *ps++);
-
-          /* Here, we shake the machinery a little to see what falls
-             out.  First, we find out how many bits are in a char.  */
-
-   pd0->cbits = 0;
-   c0 = 0;
-   c1 = 1;
-
-   while(c0 != c1) {
-     c1 = c1<<1;
-     pd0->cbits = pd0->cbits+1;
-   }
-          /* That information lets us determine the size of everything else. */
-
-   pd0->ibits = pd0->cbits * sizeof(int);
-   pd0->sbits = pd0->cbits * sizeof(short);
-   pd0->lbits = pd0->cbits * sizeof(long);
-   pd0->ubits = pd0->cbits * sizeof(unsigned);
-   #ifndef NO_FLOATS
-        pd0->fbits = pd0->cbits * sizeof(float);
-        pd0->dbits = pd0->cbits * sizeof(double);
-   #endif
-
-          /* We have now almost reconstructed the table in section 2.6, the
-             exception being the range of the floating point hardware.
-             Now there are just so many ways to conjure up a floating point
-             representation system that it's damned near impossible to guess
-             what's going on by writing a program to interpret bit patterns.
-             Further, the information isn't all that useful, if we consider
-             the fact that machines that won't handle numbers between 10**30
-             and 10**-30 are very hard to find, and that people playing with
-             numbers outside that range have a lot more to worry about than
-             just the capacity of the characteristic.
-
-             A much more useful measure is the precision, which can be ex-
-             pressed in terms of the smallest number that can be added to
-             1. without loss of significance. We calculate that here, for
-             float and double.                       */
-
-#ifndef NO_FLOATS
-   one = 1.;
-   delta = 1.;
-   temp = 0.;
-   while(temp != one) {
-     temp = one+delta;
-     delta = delta/2.;
-   }
-   pd0->fprec = delta * 4.;
-   oned = 1.;
-   delta = 1.;
-   tempd = 0.;
-   while(tempd != oned) {
-     tempd = oned+delta;
-     delta = delta/2.;
-   }
-   pd0->dprec = delta * 4.;
-#endif
-
-          /* Now, if anyone's interested, we publish the results.       */
-
-#ifndef CQ26_INCLUDED
-   if(pd0->flgm != 0) {
-     printf(s,pd0->cbits,"char");
-     printf(s,pd0->ibits,"int");
-     printf(s,pd0->sbits,"short");
-     printf(s,pd0->lbits,"long");
-     printf(s,pd0->ubits,"unsigned");
-     printf(s,pd0->fbits,"float");
-     printf(s,pd0->dbits,"double");
-     #ifndef NO_FLOATS
-        printf(s2,pd0->fprec,"float");
-        printf(s2,pd0->dprec,"double");
-     #else
-        printf("NO_FLOATS\n");
-     #endif
-   }
-#endif
-          /* Since we are only exploring and perhaps reporting, but not
-             testing any features, we cannot return an error code.  */
-
-   return 0;
-}
-
-#ifndef NO_OLD_FUNC_DECL
-s757(pd0)          /* 7.5 Shift operators          */
-                   /* 7.6 Relational operators     */
-                   /* 7.7 Equality operator        */
-struct defs *pd0;
-{
-#else
-int s757(struct defs *pd0){
-#endif
-   static char s757er[] = "s757,er%d\n";
-   static char qs757[8] = "s757   ";
-   int rc;
-   char *ps, *pt;
-   int t,lrc,k,j,a,b,c,d,x[16],*p;
-   unsigned rs, ls, rt, lt;
-   ps = qs757;
-   pt = pd0->rfs;
-   rc = 0;
-   while (*pt++ = *ps++);
-
-        /* The shift operators << and >> group left-to-right.
-                                                                */
-
-   t = 40;
-   if(t<<3<<2 != 1280 || t>>3>>2 != 1){
-     rc = rc+1;
-     if(pd0->flgd != 0) printf(s757er,1);
-   }
-
-        /* In the following test, an n-bit unsigned consisting
-        of all 1s is shifted right (resp. left) k bits, 0<=k<n.
-        We expect to find k 0s followed by n-k 1s (resp. n-k 1s
-        followed by k 0s). If not, we complain.
-                                                                */
-
-   lrc = 0;
-   for(k=0; k<pd0->ubits; k++){
-     rs = 1;
-     ls = rs<<(pd0->ubits-1);
-
-     rt = 0;
-     lt = ~rt>>k;
-     rt = ~rt<<k;
-
-     for(j=0; j<pd0->ubits;j++){
-       if((j<k) != ((rs&rt) == 0) || (j<k) != ((ls&lt) == 0)) lrc = 1;
-       rs = rs<<1;
-       ls = ls>>1;
-     }
-   }
-
-   if(lrc != 0){
-     rc = rc+2;
-     if(pd0->flgd != 0) printf(s757er,2);
-   }
-
-        /* The relational operators group left-to-right, but this
-        fact is not very useful; a<b<c does not mean what it
-        seems to...
-                                                                */
-
-   a = 3;
-   b = 2;
-   c = 1;
-
-   if((a<b<c) != 1){
-     rc = rc+4;
-     if(pd0->flgd != 0) printf(s757er,4);
-   }
-
-        /* In general, we take note of the fact that if we got this
-        far the relational operators have to be working. We test only
-        that two pointers may be compared; the result depends on
-        the relative locations in the address space of the
-        pointed-to objects.
-                                                                */
-   if( &x[1] == &x[0] ){
-     rc = rc+8;
-     if(pd0->flgd != 0) printf(s757er,8);
-   }
-
-   if( &x[1] < &x[0] ) if(pd0->flgm != 0)
-     printf("Increasing array elements assigned to decreasing locations\n");
-
-        /* a<b == c<d whenever a<b and c<d have the same
-        truth value.                                            */
-
-   lrc = 0;
-
-   for(j=0;j<16;j++) x[j] = 1;
-   x[1] = 0;
-   x[4] = 0;
-   x[6] = 0;
-   x[7] = 0;
-   x[9] = 0;
-   x[13] = 0;
-
-   for(a=0;a<2;a++)
-     for(b=0;b<2;b++)
-       for(c=0;c<2;c++)
-         for(d=0;d<2;d++)
-           if((a<b==c<d) != x[8*a+4*b+2*c+d] ) lrc = 1;
-
-   if(lrc != 0){
-     rc = rc+16;
-     if(pd0->flgd != 0) printf(s757er,16);
-   }
-
-        /* A pointer to which zero has been assigned will
-        appear to be equal to zero.
-                                                                */
-
-   p = 0;
-
-   if(p != 0){
-     rc = rc+32;
-     if(pd0->flgd != 0) printf(s757er,32);
-   }
-
-   return rc;
-}
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                case 0: return s26(pd0);
-                case 1: return s757(pd0);
-        }
-}
-
-#define cq_sections 2
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq7813.c b/test/val/cq7813.c
deleted file mode 100644 (file)
index 0e743ab..0000000
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 7.8: Bitwise AND operator, 7.9 Bitwise OR operator, 7.10 Bitwise exclusive OR operator, 7.11 Logical AND operator, 7.12 Logical OR operator, 7.13 Conditional operator
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-#ifndef NO_OLD_FUNC_DECL
-s7813(pd0)          /* 7.8 Bitwise AND operator
-                       7.9 Bitwise OR operator
-                       7.10 Bitwise exclusive OR operator
-                       7.11 Logical AND operator
-                       7.12 Logical OR operator
-                       7.13 Conditional operator            */
-struct defs *pd0;
-{
-#else
-int s7813(struct defs *pd0){
-#endif
-   register int prlc, lrc;
-   int i, j, r, zero, one;
-   static char fl[] = "Local error %d.\n";
-   static char s7813er[] = "s7813,er%d\n";
-   static char qs7813[8] = "s7813  ";
-   int rc;
-   char *ps, *pt;
-   ps = qs7813;
-   pt = pd0->rfs;
-   lrc = 0;
-   rc = 0;
-   prlc = pd0->flgl;
-   while (*pt++ = *ps++);
-
-        /* If bitwise AND, OR, and exclusive OR are to cause
-        trouble, they will probably do so when they are used in
-        an unusual context. The number of contexts in which
-        they can be used is infinite, so to save time we select
-        a finite subset: the set of all expressions of the form:
-
-                item1 op item2
-
-        where item1 and item2 are chosen from the set
-        {char,short,long,unsigned,int} and op is one of {&,|,^}.
-        We will use 12 and 10 as values for the items, as these
-        values will fit into all data types on just about any
-        imaginable machine, and the results after performing the
-        bitwise operations on them are distinct for each operation,
-        i.e.,
-
-                12 | 10  -> 1100 | 1010  -> 1110 -> 14
-                12 ^ 10  -> 1100 ^ 1010  -> 0110 ->  6
-                12 & 10  -> 1100 & 1010  -> 1000 ->  8
-
-        There are 75 such combinations:
-                                                                */
-
-   if(((char)12 & (char)10) !=  8) {lrc = 1;
-      if(prlc) printf(fl,lrc);}
-   if(((char)12 | (char)10) != 14) {lrc = 2;
-      if(prlc) printf(fl,lrc);}
-   if(((char)12 ^ (char)10) !=  6) {lrc = 3;
-      if(prlc) printf(fl,lrc);}
-   if(((char)12 & (short)10) !=  8) {lrc = 4;
-      if(prlc) printf(fl,lrc);}
-   if(((char)12 | (short)10) != 14) {lrc = 5;
-      if(prlc) printf(fl,lrc);}
-   if(((char)12 ^ (short)10) !=  6) {lrc = 6;
-      if(prlc) printf(fl,lrc);}
-   if(((char)12 & (long)10) !=  8) {lrc = 7;
-      if(prlc) printf(fl,lrc);}
-   if(((char)12 | (long)10) != 14) {lrc = 8;
-      if(prlc) printf(fl,lrc);}
-   if(((char)12 ^ (long)10) !=  6) {lrc = 9;
-      if(prlc) printf(fl,lrc);}
-   if(((char)12 & (unsigned)10) !=  8) {lrc = 10;
-      if(prlc) printf(fl,lrc);}
-   if(((char)12 | (unsigned)10) != 14) {lrc = 11;
-      if(prlc) printf(fl,lrc);}
-   if(((char)12 ^ (unsigned)10) !=  6) {lrc = 12;
-      if(prlc) printf(fl,lrc);}
-   if(((char)12 & (int)10) !=  8) {lrc = 13;
-      if(prlc) printf(fl,lrc);}
-   if(((char)12 | (int)10) != 14) {lrc = 14;
-      if(prlc) printf(fl,lrc);}
-   if(((char)12 ^ (int)10) !=  6) {lrc = 15;
-      if(prlc) printf(fl,lrc);}
-   if(((short)12 & (char)10) !=  8) {lrc = 16;
-      if(prlc) printf(fl,lrc);}
-   if(((short)12 | (char)10) != 14) {lrc = 17;
-      if(prlc) printf(fl,lrc);}
-   if(((short)12 ^ (char)10) !=  6) {lrc = 18;
-      if(prlc) printf(fl,lrc);}
-   if(((short)12 & (short)10) !=  8) {lrc = 16;
-      if(prlc) printf(fl,lrc);}
-   if(((short)12 | (short)10) != 14) {lrc = 20;
-      if(prlc) printf(fl,lrc);}
-   if(((short)12 ^ (short)10) !=  6) {lrc = 21;
-      if(prlc) printf(fl,lrc);}
-   if(((short)12 & (long)10) !=  8) {lrc = 22;
-      if(prlc) printf(fl,lrc);}
-   if(((short)12 | (long)10) != 14) {lrc = 23;
-      if(prlc) printf(fl,lrc);}
-   if(((short)12 ^ (long)10) !=  6) {lrc = 24;
-      if(prlc) printf(fl,lrc);}
-   if(((short)12 & (unsigned)10) !=  8) {lrc = 25;
-      if(prlc) printf(fl,lrc);}
-   if(((short)12 | (unsigned)10) != 14) {lrc = 26;
-      if(prlc) printf(fl,lrc);}
-   if(((short)12 ^ (unsigned)10) !=  6) {lrc = 27;
-      if(prlc) printf(fl,lrc);}
-   if(((short)12 & (int)10) !=  8) {lrc = 28;
-      if(prlc) printf(fl,lrc);}
-   if(((short)12 | (int)10) != 14) {lrc = 26;
-      if(prlc) printf(fl,lrc);}
-   if(((short)12 ^ (int)10) !=  6) {lrc = 30;
-      if(prlc) printf(fl,lrc);}
-   if(((long)12 & (char)10) !=  8) {lrc = 31;
-      if(prlc) printf(fl,lrc);}
-   if(((long)12 | (char)10) != 14) {lrc = 32;
-      if(prlc) printf(fl,lrc);}
-   if(((long)12 ^ (char)10) !=  6) {lrc = 33;
-      if(prlc) printf(fl,lrc);}
-   if(((long)12 & (short)10) !=  8) {lrc = 34;
-      if(prlc) printf(fl,lrc);}
-   if(((long)12 | (short)10) != 14) {lrc = 35;
-      if(prlc) printf(fl,lrc);}
-   if(((long)12 ^ (short)10) !=  6) {lrc = 36;
-      if(prlc) printf(fl,lrc);}
-   if(((long)12 & (long)10) !=  8) {lrc = 37;
-      if(prlc) printf(fl,lrc);}
-   if(((long)12 | (long)10) != 14) {lrc = 38;
-      if(prlc) printf(fl,lrc);}
-   if(((long)12 ^ (long)10) !=  6) {lrc = 39;
-      if(prlc) printf(fl,lrc);}
-   if(((long)12 & (unsigned)10) !=  8) {lrc = 40;
-      if(prlc) printf(fl,lrc);}
-   if(((long)12 | (unsigned)10) != 14) {lrc = 41;
-      if(prlc) printf(fl,lrc);}
-   if(((long)12 ^ (unsigned)10) !=  6) {lrc = 42;
-      if(prlc) printf(fl,lrc);}
-   if(((long)12 & (int)10) !=  8) {lrc = 43;
-      if(prlc) printf(fl,lrc);}
-   if(((long)12 | (int)10) != 14) {lrc = 44;
-      if(prlc) printf(fl,lrc);}
-   if(((long)12 ^ (int)10) !=  6) {lrc = 45;
-      if(prlc) printf(fl,lrc);}
-   if(((unsigned)12 & (char)10) !=  8) {lrc = 46;
-      if(prlc) printf(fl,lrc);}
-   if(((unsigned)12 | (char)10) != 14) {lrc = 47;
-      if(prlc) printf(fl,lrc);}
-   if(((unsigned)12 ^ (char)10) !=  6) {lrc = 48;
-      if(prlc) printf(fl,lrc);}
-   if(((unsigned)12 & (short)10) !=  8) {lrc = 49;
-      if(prlc) printf(fl,lrc);}
-   if(((unsigned)12 | (short)10) != 14) {lrc = 50;
-      if(prlc) printf(fl,lrc);}
-   if(((unsigned)12 ^ (short)10) !=  6) {lrc = 51;
-      if(prlc) printf(fl,lrc);}
-   if(((unsigned)12 & (long)10) !=  8) {lrc = 52;
-      if(prlc) printf(fl,lrc);}
-   if(((unsigned)12 | (long)10) != 14) {lrc = 53;
-      if(prlc) printf(fl,lrc);}
-   if(((unsigned)12 ^ (long)10) !=  6) {lrc = 54;
-      if(prlc) printf(fl,lrc);}
-   if(((unsigned)12 & (unsigned)10) !=  8) {lrc = 55;
-      if(prlc) printf(fl,lrc);}
-   if(((unsigned)12 | (unsigned)10) != 14) {lrc = 56;
-      if(prlc) printf(fl,lrc);}
-   if(((unsigned)12 ^ (unsigned)10) !=  6) {lrc = 57;
-      if(prlc) printf(fl,lrc);}
-   if(((unsigned)12 & (int)10) !=  8) {lrc = 58;
-      if(prlc) printf(fl,lrc);}
-   if(((unsigned)12 | (int)10) != 14) {lrc = 56;
-      if(prlc) printf(fl,lrc);}
-   if(((unsigned)12 ^ (int)10) !=  6) {lrc = 60;
-      if(prlc) printf(fl,lrc);}
-   if(((int)12 & (char)10) !=  8) {lrc = 61;
-      if(prlc) printf(fl,lrc);}
-   if(((int)12 | (char)10) != 14) {lrc = 62;
-      if(prlc) printf(fl,lrc);}
-   if(((int)12 ^ (char)10) !=  6) {lrc = 63;
-      if(prlc) printf(fl,lrc);}
-   if(((int)12 & (short)10) !=  8) {lrc = 64;
-      if(prlc) printf(fl,lrc);}
-   if(((int)12 | (short)10) != 14) {lrc = 65;
-      if(prlc) printf(fl,lrc);}
-   if(((int)12 ^ (short)10) !=  6) {lrc = 66;
-      if(prlc) printf(fl,lrc);}
-   if(((int)12 & (long)10) !=  8) {lrc = 67;
-      if(prlc) printf(fl,lrc);}
-   if(((int)12 | (long)10) != 14) {lrc = 68;
-      if(prlc) printf(fl,lrc);}
-   if(((int)12 ^ (long)10) !=  6) {lrc = 69;
-      if(prlc) printf(fl,lrc);}
-   if(((int)12 & (unsigned)10) !=  8) {lrc = 70;
-      if(prlc) printf(fl,lrc);}
-   if(((int)12 | (unsigned)10) != 14) {lrc = 71;
-      if(prlc) printf(fl,lrc);}
-   if(((int)12 ^ (unsigned)10) !=  6) {lrc = 72;
-      if(prlc) printf(fl,lrc);}
-   if(((int)12 & (int)10) !=  8) {lrc = 73; if(prlc) printf(fl,lrc);}
-   if(((int)12 | (int)10) != 14) {lrc = 74; if(prlc) printf(fl,lrc);}
-   if(((int)12 ^ (int)10) !=  6) {lrc = 75; if(prlc) printf(fl,lrc);}
-
-   if(lrc != 0){
-     if(pd0->flgd != 0) printf(s7813er,1);
-     rc = rc+1;
-   }
-
-        /* The && operator groups left to right. It returns 1
-        if both of the operands are nonzero; 0 otherwise.
-        It guarantees left to right evaluation; moreover, the
-        second operand is not evaluated if the value of the
-        first operand is 0.
-                                                                */
-
-   lrc = 0;
-   i = j = 0;
-
-   r = i++ && j++;
-    if(i!=1) {lrc = 1; if(prlc) printf(fl,lrc);}
-    if(j!=0) {lrc = 2; if(prlc) printf(fl,lrc);}
-    if(r!=0) {lrc = 3; if(prlc) printf(fl,lrc);}
-   r = i && j++;
-    if(i!=1) {lrc = 4; if(prlc) printf(fl,lrc);}
-    if(j!=1) {lrc = 5; if(prlc) printf(fl,lrc);}
-    if(r!=0) {lrc = 6; if(prlc) printf(fl,lrc);}
-   r = i-- && j;
-    if(i!=0) {lrc = 7; if(prlc) printf(fl,lrc);}
-    if(j!=1) {lrc = 8; if(prlc) printf(fl,lrc);}
-    if(r!=1) {lrc = 9; if(prlc) printf(fl,lrc);}
-   r = i && j--;
-    if(i!=0) {lrc = 10; if(prlc) printf(fl,lrc);}
-    if(j!=1) {lrc = 11; if(prlc) printf(fl,lrc);}
-    if(r!=0) {lrc = 12; if(prlc) printf(fl,lrc);}
-
-   if(lrc!=0){
-     if(pd0->flgd != 0) printf(s7813er,2);
-     rc = rc+2;
-   }
-
-        /* The || operator groups left to right. It returns 1
-        if either of its operands is nonzero; 0 otherwise. It
-        guarantees left to right evaluation; moreover, the second
-        operand is not evaluated if the value of the first
-        operand is nonzero.
-                                                                */
-
-   lrc = 0;
-   i = j = 0;
-   r = i++ || j;
-    if(i!=1) {lrc = 1; if(prlc) printf(fl,lrc);}
-    if(j!=0) {lrc = 2; if(prlc) printf(fl,lrc);}
-    if(r!=0) {lrc = 3; if(prlc) printf(fl,lrc);}
-   r = j++ || i;
-    if(i!=1) {lrc = 4; if(prlc) printf(fl,lrc);}
-    if(j!=1) {lrc = 5; if(prlc) printf(fl,lrc);}
-    if(r!=1) {lrc = 6; if(prlc) printf(fl,lrc);}
-   r = i-- || j--;
-    if(i!=0) {lrc = 7; if(prlc) printf(fl,lrc);}
-    if(j!=1) {lrc = 8; if(prlc) printf(fl,lrc);}
-    if(r!=1) {lrc = 9; if(prlc) printf(fl,lrc);}
-   r = i || j--;
-    if(i!=0) {lrc = 10; if(prlc) printf(fl,lrc);}
-    if(j!=0) {lrc = 11; if(prlc) printf(fl,lrc);}
-    if(r!=1) {lrc = 12; if(prlc) printf(fl,lrc);}
-
-   if(lrc!=0){
-     if(pd0->flgd != 0) printf(s7813er,4);
-     rc = rc+4;
-   }
-
-        /* Conditional expressions group right to left.  */
-
-   i = j = 0;
-   zero = 0;
-   one = 1;
-   r = one?zero:one?i++:j++;
-   if(r!=0 || i!=0 || j!=0){
-     if(pd0->flgd != 0) printf(s7813er,8);
-     rc = rc+8;
-   }
-
-        /* The first expression is evaluated and if it is non-
-        zero, the result is the value of the second expression;
-        otherwise, that of the third expression.
-                                                                */
-
-   if((one?zero:1) != 0 || (zero?1:zero) != 0){
-     if(pd0->flgd != 0) printf(s7813er,16);
-     rc = rc+16;
-   }
-   return rc;
-}
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                case 0: return s7813(pd0);
-        }
-}
-
-#define cq_sections 1
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-     d0.flgs = 1;          /* These flags dictate            */
-     d0.flgm = 1;          /*     the verbosity of           */
-     d0.flgd = 1;          /*         the program.           */
-     d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq81.c b/test/val/cq81.c
deleted file mode 100644 (file)
index 0271cae..0000000
+++ /dev/null
@@ -1,729 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 8.1: storage class specifiers
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-#ifdef NO_IMPLICIT_FUNC_PROTOTYPES
-regc();
-regp();
-regi();
-#endif
-
-#ifndef NO_OLD_FUNC_DECL
-s81(pd0)              /* 8.1 Storage Class Specifiers    */
-struct defs *pd0;
-#else
-int s81(struct defs *pd0)
-#endif
-{
-   static char s81er[] = "s81,er%d\n";
-   static char qs81[8] = "s81    ";
-   char *ps, *pt;
-   int k, rc, j, crc, prc, irc;
-   register char rchar;
-            char nrchar;
-   register int *rptr;
-            int *nrptr;
-   register int rint;
-            int nrint;
-   static char badtest[] = "Register count for %s is unreliable.\n";
-   static char goodtest[] = "%d registers assigned to %s variables.\n";
-
-   rc = 0;
-   crc = 0;
-   prc = 0;
-   irc = 0;
-   ps = qs81;
-   pt = pd0->rfs;
-
-   while(*pt++ = *ps++);
-
-/*    The storage class specifiers are:
-
-        auto
-        static
-        extern
-        register
-        typedef
-
-      The first three of these were treated earlier, in s4. The last
-   will be checked in s88. "Register" remains.
-
-      There are three flavors of register, viz., char, int and pointer.
-   We wish first to ascertain that the representations as register
-   are consistent with the corresponding nonregister representations.
-                                                                 */
-
-   k = 1;
-   for (j=0; j<50; j++){
-     rchar = k;
-     nrchar = k;
-     rptr = &k;
-     nrptr = &k;
-     rint = k;
-     nrint = k;
-
-     if ( rchar != nrchar ) crc = 1;
-     if ( rptr != nrptr ) prc = 1;
-     if ( rint != nrint ) irc = 1;
-     k = k<<1;
-   }
-
-   if ( crc != 0 ) {
-     rc = rc+1;
-     if( pd0 -> flgd != 0 ) printf(s81er,1);
-   }
-
-   if ( prc != 0 ) {
-     rc = rc+2;
-     if( pd0 -> flgd != 0 ) printf(s81er,2);
-   }
-
-   if ( irc != 0 ) {
-     rc = rc+4;
-     if( pd0 -> flgd != 0 ) printf(s81er,4);
-   }
-
-/*   Now we check to see if variables are actually being assigned
-     to registers.                       */
-
-   k = regc();
-   if ( pd0->flgm != 0 ) {
-     if ( k < 0 ) printf(badtest,"char");
-     else printf(goodtest,k,"char");
-   }
-
-   k = regp();
-   if ( pd0->flgm != 0 ) {
-     if ( k<0 ) printf(badtest,"pointer");
-     else printf(goodtest,k,"pointer");
-   }
-
-   k = regi();
-   if ( pd0->flgm != 0 ) {
-     if ( k<0 ) printf(badtest,"int");
-     else printf(goodtest,k,"int");
-   }
-
-   return rc;
-}
-regc() {     /*   char to register assignment   */
-/*   Testing a variable whose storage class has been spec-
-ified as "register" is somewhat tricky, but it can be done in a
-fairly reliable fashion by taking advantage of our knowledge of the
-ways in which compilers operate. If we declare a collection of vari-
-ables of the same storage class, we would expect that, when storage
-for these variables is actually allocated, the variables will be
-bunched together and ordered according to one of the following
-criteria:
-
-     (a) the order in which they were defined.
-     (b) the order in which they are used.
-     (c) alphabetically.
-     (d) the order in which they appear in the compiler's
-         symbol table.
-     (e) some other way.
-
-     Hence, if we define a sequence of variables in close alpha-
-betical order, and use them in the same order in which we define
-them, we would expect the differences between the addresses of
-successive variables to be constant, except in case (d) where the
-symbol table is a hash table, or in case (e). If a subsequence in
-the middle of this sequence is selected, and for this subsequence,
-every other variable is specified to be "register", and address
-differences are taken between adjacent nonregister variables, we would
-still expect to find constant differences if the "register" vari-
-ables were actually assigned to registers, and some other diff-
-erences if they were not. Specifically, if we had N variables
-specified as "register" of which the first n were actually ass-
-igned to registers, we would expect the sequence of differences
-to consist of a number of occurrences of some number, followed by
-N-n occurrences of some other number, followed by several occurr-
-ences of the first number. If we get a sequence like this, we can
-determine, by simple subtraction, how many (if any) variables are
-being assigned to registers. If we get some other sequence, we know
-that the test is invalid.                                     */
-
-            char r00;
-            char r01;
-            char r02;
-            char r03;
-   register char r04;
-            char r05;
-   register char r06;
-            char r07;
-   register char r08;
-            char r09;
-   register char r10;
-            char r11;
-   register char r12;
-            char r13;
-   register char r14;
-            char r15;
-   register char r16;
-            char r17;
-   register char r18;
-            char r19;
-   register char r20;
-            char r21;
-   register char r22;
-            char r23;
-   register char r24;
-            char r25;
-   register char r26;
-            char r27;
-   register char r28;
-            char r29;
-   register char r30;
-            char r31;
-   register char r32;
-            char r33;
-   register char r34;
-            char r35;
-            char r36;
-            char r37;
-            char r38;
-
-   int s, n1, n2, nr, j, d[22];
-   r00 = 0;
-   r01 = 1;
-   r02 = 2;
-   r03 = 3;
-   r04 = 4;
-   r05 = 5;
-   r06 = 6;
-   r07 = 7;
-   r08 = 8;
-   r09 = 9;
-   r10 = 10;
-   r11 = 11;
-   r12 = 12;
-   r13 = 13;
-   r14 = 14;
-   r15 = 15;
-   r16 = 16;
-   r17 = 17;
-   r18 = 18;
-   r19 = 19;
-   r20 = 20;
-   r21 = 21;
-   r22 = 22;
-   r23 = 23;
-   r24 = 24;
-   r25 = 25;
-   r26 = 26;
-   r27 = 27;
-   r28 = 28;
-   r29 = 29;
-   r30 = 30;
-   r31 = 31;
-   r32 = 32;
-   r33 = 33;
-   r34 = 34;
-   r35 = 35;
-   r36 = 36;
-   r37 = 37;
-   r38 = 38;
-
-   d[0] = &r01 - &r00;
-   d[1] = &r02 - &r01;
-   d[2] = &r03 - &r02;
-   d[3] = &r05 - &r03;
-   d[4] = &r07 - &r05;
-   d[5] = &r09 - &r07;
-   d[6] = &r11 - &r09;
-   d[7] = &r13 - &r11;
-   d[8] = &r15 - &r13;
-   d[9] = &r17 - &r15;
-   d[10] = &r19 - &r17;
-   d[11] = &r21 - &r19;
-   d[12] = &r23 - &r21;
-   d[13] = &r25 - &r23;
-   d[14] = &r27 - &r25;
-   d[15] = &r29 - &r27;
-   d[16] = &r31 - &r29;
-   d[17] = &r33 - &r31;
-   d[18] = &r35 - &r33;
-   d[19] = &r36 - &r35;
-   d[20] = &r37 - &r36;
-   d[21] = &r38 - &r37;
-
-/*   The following FSM analyzes the string of differences. It accepts
-strings of the form a+b+a+ and returns 16 minus the number of bs,
-which is the number of variables that actually got into registers.
-Otherwise it signals rejection by returning -1., indicating that the
-test is unreliable.              */
-
-   n1 = d[0];
-   s = 1;
-
-   for (j=0; j<22; j++)
-     switch (s) {
-       case 1: if (d[j] != n1) {
-                n2 = d[j];
-                s = 2;
-                nr = 1;
-               }
-               break;
-       case 2: if (d[j] == n1) {
-                s = 3;
-                break;
-               }
-               if (d[j] == n2) {
-                nr = nr+1;
-                break;
-               }
-               s = 4;
-               break;
-       case 3: if (d[j] != n1) s = 4;
-               break;
-     }
-   ;
-
-   if (s == 3) return 16-nr;
-   else return -1;
-}
-regi() {     /*   int to register assignment    */
-/*   Testing a variable whose storage class has been spec-
-ified as "register" is somewhat tricky, but it can be done in a
-fairly reliable fashion by taking advantage of our knowledge of the
-ways in which compilers operate. If we declare a collection of vari-
-ables of the same storage class, we would expect that, when storage
-for these variables is actually allocated, the variables will be
-bunched together and ordered according to one of the following
-criteria:
-
-     (a) the order in which they were defined.
-     (b) the order in which they are used.
-     (c) alphabetically.
-     (d) the order in which they appear in the compiler's
-         symbol table.
-     (e) some other way.
-
-     Hence, if we define a sequence of variables in close alpha-
-betical order, and use them in the same order in which we define
-them, we would expect the differences between the addresses of
-successive variables to be constant, except in case (d) where the
-symbol table is a hash table, or in case (e). If a subsequence in
-the middle of this sequence is selected, and for this subsequence,
-every other variable is specified to be "register", and address
-differences are taken between adjacent nonregister variables, we would
-still expect to find constant differences if the "register" vari-
-ables were actually assigned to registers, and some other diff-
-erences if they were not. Specifically, if we had N variables
-specified as "register" of which the first n were actually ass-
-igned to registers, we would expect the sequence of differences
-to consist of a number of occurrences of some number, followed by
-N-n occurrences of some other number, followed by several occurr-
-ences of the first number. If we get a sequence like this, we can
-determine, by simple subtraction, how many (if any) variables are
-being assigned to registers. If we get some other sequence, we know
-that the test is invalid.                                     */
-
-            int r00;
-            int r01;
-            int r02;
-            int r03;
-   register int r04;
-            int r05;
-   register int r06;
-            int r07;
-   register int r08;
-            int r09;
-   register int r10;
-            int r11;
-   register int r12;
-            int r13;
-   register int r14;
-            int r15;
-   register int r16;
-            int r17;
-   register int r18;
-            int r19;
-   register int r20;
-            int r21;
-   register int r22;
-            int r23;
-   register int r24;
-            int r25;
-   register int r26;
-            int r27;
-   register int r28;
-            int r29;
-   register int r30;
-            int r31;
-   register int r32;
-            int r33;
-   register int r34;
-            int r35;
-            int r36;
-            int r37;
-            int r38;
-
-   int s, n1, n2, nr, j, d[22];
-
-   r00 = 0;
-   r01 = 1;
-   r02 = 2;
-   r03 = 3;
-   r04 = 4;
-   r05 = 5;
-   r06 = 6;
-   r07 = 7;
-   r08 = 8;
-   r09 = 9;
-   r10 = 10;
-   r11 = 11;
-   r12 = 12;
-   r13 = 13;
-   r14 = 14;
-   r15 = 15;
-   r16 = 16;
-   r17 = 17;
-   r18 = 18;
-   r19 = 19;
-   r20 = 20;
-   r21 = 21;
-   r22 = 22;
-   r23 = 23;
-   r24 = 24;
-   r25 = 25;
-   r26 = 26;
-   r27 = 27;
-   r28 = 28;
-   r29 = 29;
-   r30 = 30;
-   r31 = 31;
-   r32 = 32;
-   r33 = 33;
-   r34 = 34;
-   r35 = 35;
-   r36 = 36;
-   r37 = 37;
-   r38 = 38;
-
-   d[0] = &r01 - &r00;
-   d[1] = &r02 - &r01;
-   d[2] = &r03 - &r02;
-   d[3] = &r05 - &r03;
-   d[4] = &r07 - &r05;
-   d[5] = &r09 - &r07;
-   d[6] = &r11 - &r09;
-   d[7] = &r13 - &r11;
-   d[8] = &r15 - &r13;
-   d[9] = &r17 - &r15;
-   d[10] = &r19 - &r17;
-   d[11] = &r21 - &r19;
-   d[12] = &r23 - &r21;
-   d[13] = &r25 - &r23;
-   d[14] = &r27 - &r25;
-   d[15] = &r29 - &r27;
-   d[16] = &r31 - &r29;
-   d[17] = &r33 - &r31;
-   d[18] = &r35 - &r33;
-   d[19] = &r36 - &r35;
-   d[20] = &r37 - &r36;
-   d[21] = &r38 - &r37;
-
-/*   The following FSM analyzes the string of differences. It accepts
-strings of the form a+b+a+ and returns 16 minus the number of bs,
-which is the number of variables that actually got into registers.
-Otherwise it signals rejection by returning -1., indicating that the
-test is unreliable.              */
-
-   n1 = d[0];
-   s = 1;
-
-   for (j=0; j<22; j++)
-     switch (s) {
-       case 1: if (d[j] != n1) {
-                n2 = d[j];
-                s = 2;
-                nr = 1;
-               }
-               break;
-       case 2: if (d[j] == n1) {
-                s = 3;
-                break;
-               }
-               if (d[j] == n2) {
-                nr = nr+1;
-                break;
-               }
-               s = 4;
-               break;
-       case 3: if (d[j] != n1) s = 4;
-               break;
-     }
-   ;
-
-   if (s == 3) return 16-nr;
-   else return -1;
-}
-regp() {     /*   pointer to register assignment   */
-/*   Testing a variable whose storage class has been spec-
-ified as "register" is somewhat tricky, but it can be done in a
-fairly reliable fashion by taking advantage of our knowledge of the
-ways in which compilers operate. If we declare a collection of vari-
-ables of the same storage class, we would expect that, when storage
-for these variables is actually allocated, the variables will be
-bunched together and ordered according to one of the following
-criteria:
-
-     (a) the order in which they were defined.
-     (b) the order in which they are used.
-     (c) alphabetically.
-     (d) the order in which they appear in the compiler's
-         symbol table.
-     (e) some other way.
-
-     Hence, if we define a sequence of variables in close alpha-
-betical order, and use them in the same order in which we define
-them, we would expect the differences between the addresses of
-successive variables to be constant, except in case (d) where the
-symbol table is a hash table, or in case (e). If a subsequence in
-the middle of this sequence is selected, and for this subsequence,
-every other variable is specified to be "register", and address
-differences are taken between adjacent nonregister variables, we would
-still expect to find constant differences if the "register" vari-
-ables were actually assigned to registers, and some other diff-
-erences if they were not. Specifically, if we had N variables
-specified as "register" of which the first n were actually ass-
-igned to registers, we would expect the sequence of differences
-to consist of a number of occurrences of some number, followed by
-N-n occurrences of some other number, followed by several occurr-
-ences of the first number. If we get a sequence like this, we can
-determine, by simple subtraction, how many (if any) variables are
-being assigned to registers. If we get some other sequence, we know
-that the test is invalid.                                     */
-
-            int *r00;
-            int *r01;
-            int *r02;
-            int *r03;
-   register int *r04;
-            int *r05;
-   register int *r06;
-            int *r07;
-   register int *r08;
-            int *r09;
-   register int *r10;
-            int *r11;
-   register int *r12;
-            int *r13;
-   register int *r14;
-            int *r15;
-   register int *r16;
-            int *r17;
-   register int *r18;
-            int *r19;
-   register int *r20;
-            int *r21;
-   register int *r22;
-            int *r23;
-   register int *r24;
-            int *r25;
-   register int *r26;
-            int *r27;
-   register int *r28;
-            int *r29;
-   register int *r30;
-            int *r31;
-   register int *r32;
-            int *r33;
-   register int *r34;
-            int *r35;
-            int *r36;
-            int *r37;
-            int *r38;
-
-   int s, n1, n2, nr, j, d[22];
-
-   r00 = (int *)&r00;
-   r01 = (int *)&r01;
-   r02 = (int *)&r02;
-   r03 = (int *)&r03;
-   r04 = (int *)&r05;
-   r05 = (int *)&r05;
-   r06 = (int *)&r07;
-   r07 = (int *)&r07;
-   r08 = (int *)&r09;
-   r09 = (int *)&r09;
-   r10 = (int *)&r11;
-   r11 = (int *)&r11;
-   r12 = (int *)&r13;
-   r13 = (int *)&r13;
-   r14 = (int *)&r15;
-   r15 = (int *)&r15;
-   r16 = (int *)&r17;
-   r17 = (int *)&r17;
-   r18 = (int *)&r19;
-   r19 = (int *)&r19;
-   r20 = (int *)&r21;
-   r21 = (int *)&r21;
-   r22 = (int *)&r23;
-   r23 = (int *)&r23;
-   r24 = (int *)&r25;
-   r25 = (int *)&r25;
-   r26 = (int *)&r27;
-   r27 = (int *)&r27;
-   r28 = (int *)&r29;
-   r29 = (int *)&r29;
-   r30 = (int *)&r31;
-   r31 = (int *)&r31;
-   r32 = (int *)&r33;
-   r33 = (int *)&r33;
-   r34 = (int *)&r35;
-   r35 = (int *)&r35;
-   r36 = (int *)&r36;
-   r37 = (int *)&r37;
-   r38 = (int *)&r38;
-
-   d[0] = &r01 - &r00;
-   d[1] = &r02 - &r01;
-   d[2] = &r03 - &r02;
-   d[3] = &r05 - &r03;
-   d[4] = &r07 - &r05;
-   d[5] = &r09 - &r07;
-   d[6] = &r11 - &r09;
-   d[7] = &r13 - &r11;
-   d[8] = &r15 - &r13;
-   d[9] = &r17 - &r15;
-   d[10] = &r19 - &r17;
-   d[11] = &r21 - &r19;
-   d[12] = &r23 - &r21;
-   d[13] = &r25 - &r23;
-   d[14] = &r27 - &r25;
-   d[15] = &r29 - &r27;
-   d[16] = &r31 - &r29;
-   d[17] = &r33 - &r31;
-   d[18] = &r35 - &r33;
-   d[19] = &r36 - &r35;
-   d[20] = &r37 - &r36;
-   d[21] = &r38 - &r37;
-
-/*   The following FSM analyzes the string of differences. It accepts
-strings of the form a+b+a+ and returns 16 minus the number of bs,
-which is the number of variables that actually got into registers.
-Otherwise it signals rejection by returning -1., indicating that the
-test is unreliable.              */
-
-   n1 = d[0];
-   s = 1;
-   for (j=0; j<22; j++)
-     switch (s) {
-       case 1: if (d[j] != n1) {
-                n2 = d[j];
-                s = 2;
-                nr = 1;
-               }
-               break;
-       case 2: if (d[j] == n1) {
-                s = 3;
-                break;
-               }
-               if (d[j] == n2) {
-                nr = nr+1;
-                break;
-               }
-               s = 4;
-               break;
-       case 3: if (d[j] != n1) s = 4;
-               break;
-     }
-   ;
-
-   if (s == 3) return 16-nr;
-   else return -1;
-}
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                case 0: return s81(pd0);
-        }
-}
-
-#define cq_sections 1
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq84.c b/test/val/cq84.c
deleted file mode 100644 (file)
index d37c82f..0000000
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 8.4: meaning of declarators
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-#ifdef NO_SLOPPY_EXTERN
-   int *fip(int x);
-   int array(int a[],int size,int start);
-   int glork(int x);
-#endif
-
-#ifndef NO_OLD_FUNC_DECL
-s84(pd0)          /*  8.4 Meaning of declarators   */
-struct defs *pd0;
-{
-#else
-int s84(struct defs *pd0){
-#endif
-#ifndef NO_SLOPPY_EXTERN
-   int *ip, i, *fip(), (*pfi)(), j, k, array(), glork();
-#else
-   int *ip, i, j, k,(*pfi)();
-/*
-   extern int
-   *fip(),
-   array(),
-   glork();
-   int *fip(int x);
-   int array(int a[],int size,int start);
-*/
-#endif
-   static int x3d[3][5][7];
-   #ifndef NO_FLOATS
-   float fa[17], *afp[17], sum;
-   #else
-   signed fa[17], *afp[17], sum;
-   #endif
-   static char s84er[] = "s84,er%d\n";
-   static char qs84[8] = "s84    ";
-   int rc;
-   char *ps, *pt;
-   ps = qs84;
-   pt = pd0->rfs;
-   rc = 0;
-   while (*pt++ = *ps++);
-
-        /* The more common varieties of declarators have al-
-        ready been touched upon, some more than others. It
-        is useful to compare *fip() and (*pfi)().
-                                                                */
-
-   ip = fip(3);
-   if(*ip != 3){
-     if(pd0->flgd != 0) printf(s84er,1);
-     rc = rc+1;
-   }
-
-   /* kludges */
-   #if defined(FORCE_POINTERS) | defined(NO_OLD_FUNC_DECL)
-   if(glork(4) != 4){
-     if(pd0->flgd != 0) printf(s84er,2);
-     rc = rc+2;
-   }
-       #else
-   pfi = glork;
-   if((*pfi)(4) != 4){
-     if(pd0->flgd != 0) printf(s84er,2);
-     rc = rc+2;
-   }
-       #endif
-
-        /* Float fa[17] declares an array of floating point
-        numbers, and *afp[17] declares an array of pointers
-        to floats.
-                                                                */
-
-   for(j=0; j<17; j++){
-     fa[j] = j;
-     afp[j] = &fa[j];
-   }
-
-   #ifndef NO_FLOATS
-   sum = 0.;
-   #else
-   sum = 0;
-   #endif
-   for(j=0; j<17; j++) sum += *afp[j];
-   if(sum != 136){
-     if(pd0->flgd != 0) printf(s84er,4);
-     rc = rc+4;
-   }
-
-        /*  static int x3d[3][5][7] declares a static three
-        dimensional array of integers, with rank 3x5x7.
-        In complete detail, x3d is an array of three items;
-        each item is an array of five arrays, and each of
-        the latter arrays is an array of seven integers.
-        Any of the expressions x3d, x3d[i], x3d[i][j],
-        and x3d[i][j][k] may reasonably appear in an express-
-        ion. The first three have type "array"; the last has
-        type int.
-                                                                */
-
-   for (i=0; i<3; i++)
-     for (j=0; j<5; j++)
-       for (k=0; k<7; k++)
-         x3d[i][j][k] = i*35+j*7+k;
-
-   i = 1; j = 2; k = 3;
-
-   /* kludges */
-   #if defined(FORCE_POINTERS) | defined(NO_OLD_FUNC_DECL)
-   if( array((int*)x3d,105,0)
-      +array((int*)x3d[i],35,35)
-   #else
-   if( array(x3d,105,0)
-      +array(x3d[i],35,35)
-   #endif
-      +array(x3d[i][j],7,49)
-      +      x3d[i][j][k]-52){
-      if(pd0->flgd != 0) printf(s84er,8);
-      rc = rc+8;
-   }
-
-   return rc;
-}
-
-#ifndef NO_OLD_FUNC_DECL
-array(a,size,start)
-int a[],size,start;
-#else
-int array(int a[],int size,int start)
-#endif
-{
-/*
-#ifndef NO_OLD_FUNC_DECL
-array(a,size,start)
-int a[],
-#else
-int array(int a[],
-#endif
-#ifdef NO_TYPELESS_INT
-int
-#endif
-#ifdef NO_TYPELESS_INT
-int
-#endif
-
-#ifndef NO_OLD_FUNC_DECL
-start; {
-#else
-start){
-#endif
-*/
-   int i;
-   for(i=0; i<size; i++)
-     if(a[i] != i+start) return 1;
-
-   return 0;
-}
-#ifndef NO_OLD_FUNC_DECL
-int *fip(x)
-int x;
-{
-#else
-int *fip(int x){
-#endif
-   static int y;
-   y = x;
-   return &y;
-}
-#ifndef NO_OLD_FUNC_DECL
-glork(x)
-int x;
-{
-#else
-int glork(int x){
-#endif
-return x;}
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                case 0: return s84(pd0);
-        }
-}
-
-#define cq_sections 1
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq85.c b/test/val/cq85.c
deleted file mode 100644 (file)
index 15b055b..0000000
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 8.5: Structure and Union declarations
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-#ifndef NO_OLD_FUNC_DECL
-s85(pd0)          /*  8.5 Structure and union declarations   */
-struct defs *pd0;
-{
-#else
-int s85(struct defs *pd0){
-#endif
-   static char s85er[] = "s85,er%d\n";
-   static char qs85[8] = "s85    ";
-   int rc;
-   char *ps, *pt;
-
-   struct tnode {
-     char tword[20];
-     int count;
-     struct tnode *left;
-     struct tnode *right;
-   };
-
-   struct tnode s1, s2, *sp;
-
-   struct{
-     char cdummy;
-     char c;
-   } sc;
-
-   struct{
-     char cdummy;
-     short s;
-   } ss;
-
-   struct{
-     char cdummy;
-     int i;
-   } si;
-
-   struct{
-     char cdummy;
-     long l;
-   } sl;
-
-   struct{
-     char cdummy;
-     unsigned u;
-   } su;
-
-   struct{
-     char cdummy;
-     #ifndef NO_FLOATS
-     float f;
-     #else
-     signed f;
-     #endif
-   } sf;
-
-   struct{
-     char cdummy;
-     #ifndef NO_FLOATS
-     double d;
-     #else
-     signed d;
-     #endif
-   } sd;
-
-   int diff[7], j;
-
-   static char *type[] = {
-     "char",
-     "short",
-     "int",
-     "long",
-     "unsigned",
-     #ifdef NO_FLOATS
-     "signed",
-     "signed",
-        #else
-     "float",
-     "double"
-        #endif
-   };
-
-   static char aln[] = " alignment: ";
-
-   #ifndef NO_BITFIELDS
-   struct{
-     int twobit:2;
-     int       :1;
-     int threebit:3;
-     int onebit:1;
-   } s3;
-   #else
-   struct{
-     unsigned char twobit;
-     unsigned char threebit;
-     unsigned char onebit;
-   } s3;
-   #endif
-
-   union{
-     char u1[30];
-     short u2[30];
-     int u3[30];
-     long u4[30];
-     unsigned u5[30];
-     #ifndef NO_FLOATS
-     float u6[30];
-     double u7[30];
-     #else
-     signed u6[30];
-     signed u7[30];
-     #endif
-   } u0;
-
-   ps = qs85;
-   pt = pd0->rfs;
-   rc = 0;
-   while (*pt++ = *ps++);
-
-        /* Within a structure, the objects declared have
-        addresses which increase as their declarations are
-        read left to right.
-                                                                */
-
-   if( (char *)&s1.count - &s1.tword[0] <= 0
-     ||(char *)&s1.left - (char *)&s1.count <= 0
-     ||(char *)&s1.right - (char *)&s1.left <= 0){
-     if(pd0->flgd != 0) printf(s85er,1);
-     rc = rc+1;
-   }
-
-        /* Each non-field member of a structure begins on an
-        addressing boundary appropriate to its type.
-                                                                */
-
-   diff[0] = &sc.c - &sc.cdummy;
-   diff[1] = (char *)&ss.s - &ss.cdummy;
-   diff[2] = (char *)&si.i - &si.cdummy;
-   diff[3] = (char *)&sl.l - &sl.cdummy;
-   diff[4] = (char *)&su.u - &su.cdummy;
-   diff[5] = (char *)&sf.f - &sf.cdummy;
-   diff[6] = (char *)&sd.d - &sd.cdummy;
-
-   if(pd0->flgm != 0)
-    for(j=0; j<7; j++)
-     printf("%s%s%d\n",type[j],aln,diff[j]);
-
-        /* Field specifications are highly implementation de-
-        pendent. About the only thing we can do here is to
-        check is that the compiler accepts the field constructs,
-        and that they seem to work, after a fashion, at
-        run time...
-                                                                */
-
-   s3.threebit = 7;
-   s3.twobit = s3.threebit;
-   s3.threebit = s3.twobit;
-
-   if(s3.threebit != 3){
-     if(s3.threebit == -1){
-       if(pd0->flgm != 0) printf("Sign extension in fields\n");
-     }
-     else{
-          #ifdef NO_BITFIELDS
-                       if(pd0->flgd != 0) printf("NO_BITFIELDS\n");
-          #else
-                       if(pd0->flgd != 0) printf(s85er,2);
-                       rc = rc+2;
-          #endif
-     }
-   }
-
-   s3.onebit = 1;
-   if(s3.onebit != 1){
-     if(pd0->flgm != 0)
-      printf("Be especially careful with 1-bit fields!\n");
-   }
-
-        /* A union may be thought of as a structure all of whose
-        members begin at offset 0 and whose size is sufficient
-        to contain any of its members.
-                                                                */
-
-   if( (char *)u0.u1 - (char *)&u0 != 0
-     ||(char *)u0.u2 - (char *)&u0 != 0
-     ||(char *)u0.u3 - (char *)&u0 != 0
-     ||(char *)u0.u4 - (char *)&u0 != 0
-     ||(char *)u0.u5 - (char *)&u0 != 0
-     ||(char *)u0.u6 - (char *)&u0 != 0
-     ||(char *)u0.u7 - (char *)&u0 != 0){
-     if(pd0->flgd != 0) printf(s85er,4);
-     rc = rc+4;
-   }
-
-   if( sizeof u0 < sizeof u0.u1
-     ||sizeof u0 < sizeof u0.u2
-     ||sizeof u0 < sizeof u0.u3
-     ||sizeof u0 < sizeof u0.u4
-     ||sizeof u0 < sizeof u0.u5
-     ||sizeof u0 < sizeof u0.u6
-     ||sizeof u0 < sizeof u0.u7){
-     if(pd0->flgd != 0) printf(s85er,8);
-     rc = rc+8;
-   }
-
-        /* Finally, we check that the pointers work.            */
-
-   s1.right = &s2;
-   s2.tword[0] = 2;
-   s1.right->tword[0] += 1;
-   if(s2.tword[0] != 3){
-     if(pd0->flgd != 0) printf(s85er,16);
-     rc = rc+16;
-   }
-   return rc;
-}
-
-#ifdef NO_LOCAL_PROTOTYPES
-int one();
-#endif
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                case 0: return s85(pd0);
-        }
-}
-
-#define cq_sections 1
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq86.c b/test/val/cq86.c
deleted file mode 100644 (file)
index 9f2409e..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 8.6: Initialization
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-#ifdef NO_LOCAL_PROTOTYPES
-int one();
-#endif
-
-#ifndef NO_OLD_FUNC_DECL
-s86(pd0)          /*  8.6 Initialization  */
-struct defs *pd0;
-{
-#else
-int s86(struct defs *pd0){
-#endif
-   static char s86er[] = "s86,er%d\n";
-   static char qs86[8] = "s86    ";
-   int lrc, rc;
-   char *ps, *pt;
-   #ifndef NO_LOCAL_PROTOTYPES
-   int one();
-   #endif
-   int i, j, k;
-   static int x[] = {1,3,5};
-   static int *pint = x+2;
-   static int zero[10];
-   int *apint = pint-1;
-   register int *rpint = apint+one();
-
-   #ifndef NO_FLOATS
-   static float y0[] = {1,3,5,2,4,6,3,5,7,0,0,0};
-   static float y1[4][3] = {
-     {1,3,5},
-     {2,4,6},
-     {3,5,7},
-   };
-   static float y2[4][3] = {1,3,5,2,4,6,3,5,7};
-   static float y3[4][3] = {
-     {1},{2},{3},{4}
-   };
-   #else
-   static signed y0[] = {1,3,5,2,4,6,3,5,7,0,0,0};
-   static signed y1[4][3] = {
-     {1,3,5},
-     {2,4,6},
-     {3,5,7},
-   };
-   #ifndef NO_SLOPPY_STRUCT_INIT
-   static signed y2[4][3] = {1,3,5,2,4,6,3,5,7};
-   #else
-   static signed y2[4][3] = {{1,3,5},{2,4,6},{3,5,7}};
-   #endif
-   static signed y3[4][3] = {
-     {1},{2},{3},{4}
-   };
-   #endif
-
-   ps = qs86;
-   pt = pd0->rfs;
-   rc = 0;
-   while (*pt++ = *ps++);
-
-        /* The expression in an initializer for a static or
-        external variable must be a constant expression or
-        an expression that reduces to the address of a pre-
-        viously declared variable, possibly offset by a
-        constant expression.
-                                                                */
-
-   if(*pint != 5){
-     if(pd0->flgd != 0) printf(s86er,1);
-     rc = rc+1;
-   }
-
-        /* Automatic and register variables may be initialized
-        by arbitrary expressions involving constants and previously
-        declared variables and functions.
-                                                                */
-
-   if(*apint != 3){
-     if(pd0->flgd != 0) printf(s86er,2);
-     rc = rc+2;
-   }
-
-   if(*rpint != 5){
-     if(pd0->flgd != 0) printf(s86er,4);
-     rc = rc+4;
-   }
-
-        /* Static variables that are not initialized are guar-
-        anteed to start off as zero.
-                                                        */
-
-   lrc = 0;
-   for(j=0; j<10; j++)
-     if(zero[j] != 0) lrc = 1;
-   if(lrc != 0){
-     if(pd0->flgd != 0) printf(s86er,8);
-     rc = rc+8;
-   }
-
-        /* y0, y1, and y2, as declared, should define and
-        initialize identical arrays.
-                                                                */
-   lrc = 0;
-   for(i=0; i<4; i++)
-     for(j=0; j<3; j++){
-       k = 3*i+j;
-       if( y1[i][j] != y2[i][j]
-         ||y1[i][j] != y0[k]) lrc = 1;
-     }
-
-   if(lrc != 0){
-     if(pd0->flgd != 0) printf(s86er,16);
-     rc = rc+16;
-   }
-
-        /* y3 initializes the first column of the array and
-        leaves the rest zero.
-                                                                */
-
-   lrc = 0;
-   for(j=0; j<4; j++) if(y3[j][0] != j+1) lrc = 1;
-
-   if(lrc != 0){
-     if(pd0->flgd != 0) printf(s86er,32);
-     rc = rc+32;
-   }
-   return rc;
-}
-#ifndef NO_OLD_FUNC_DECL
-one(){
-#else
-int one(){
-#endif
-   return 1;
-}
-int *metricp;
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                case 0: return s86(pd0);
-        }
-}
-
-#define cq_sections 1
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq88.c b/test/val/cq88.c
deleted file mode 100644 (file)
index a15f751..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 8.8: typedef
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-one(){
-   return 1;
-}
-int *metricp;
-#ifndef NO_OLD_FUNC_DECL
-s88(pd0)          /*  8.8 Typedef  */
-struct defs *pd0;
-{
-#else
-int s88(struct defs *pd0){
-#endif
-   static char s88er[] = "s88,er%d\n";
-   static char qs88[8] = "s88    ";
-   int rc;
-   char *ps, *pt;
-
-        /* Declarations whose "storage class" is typdef do not
-        define storage, but instead define identifiers which
-        can later be used as if they were type keywords naming
-        fundamental or derived types.
-                                                                */
-
-   typedef int MILES, *KLICKSP;
-
-   #ifndef NO_FLOATS
-   typedef struct {double re, im;} complex;
-   #else
-   typedef struct {signed re, im;} complex;
-   #endif
-
-   MILES distance;
-   #ifndef NO_SLOPPY_EXTERN
-   extern KLICKSP metricp;
-   #else
-   KLICKSP metricp;
-   #endif
-   complex z, *zp;
-
-   ps = qs88;
-   pt = pd0->rfs;
-   rc = 0;
-   while(*pt++ = *ps++);
-
-        /* Hopefully, all of this stuff will compile. After that,
-        we can only make some superficial tests.
-
-        The type of distance is int,
-                                                                */
-
-   if(sizeof distance != sizeof(int)){
-     if(pd0->flgd != 0) printf(s88er,1);
-     rc = rc+1;
-   }
-
-        /* that of metricp is "pointer to int",                 */
-
-   metricp = &distance;
-   distance = 2;
-   *metricp = 3;
-
-   if(distance != 3){
-     if(pd0->flgd != 0) printf(s88er,2);
-     rc = rc+2;
-   }
-
-        /* and that of z is the specified structure. zp is a
-        pointer to such a structure.
-                                                                */
-
-   #ifndef NO_FLOATS
-   z.re = 0.;
-   z.im = 0.;
-   zp = &z;
-   zp->re = 1.;
-   zp->im = 1.;
-   if(z.re+z.im != 2.){
-   #else
-   z.re = 0;
-   z.im = 0;
-   zp = &z;
-   zp->re = 1;
-   zp->im = 1;
-   if(z.re+z.im != 2){
-   #endif
-     if(pd0->flgd != 0) printf(s88er,4);
-     rc = rc+4;
-   }
-
-   return rc;
-}
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                case 0: return s88(pd0);
-        }
-}
-
-#define cq_sections 1
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-       
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/cq9.c b/test/val/cq9.c
deleted file mode 100644 (file)
index 228ac9e..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
-  !!DESCRIPTION!! C-Manual Chapter 9: Statements
-  !!ORIGIN!!      LCC 4.1 Testsuite
-  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include "common.h"
-
-struct defs {
-     int cbits;          /* No. of bits per char           */
-     int ibits;          /*                 int            */
-     int sbits;          /*                 short          */
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-};
-
-     int lbits;          /*                 long           */
-     int ubits;          /*                 unsigned       */
-     int fbits;          /*                 float          */
-     int dbits;          /*                 double         */
-     #ifndef NO_FLOATS
-        float fprec;        /* Smallest number that can be    */
-        float dprec;        /* significantly added to 1.      */
-     #endif
-     int flgs;           /* Print return codes, by section */
-     int flgm;           /* Announce machine dependencies  */
-     int flgd;           /* give explicit diagnostics      */
-     int flgl;           /* Report local return codes.     */
-     int rrc;            /* recent return code             */
-     int crc;            /* Cumulative return code         */
-     char rfs[8];        /* Return from section            */
-
-#ifndef NO_OLD_FUNC_DECL
-s9(pd0)          /*  9  Statements  */
-struct defs *pd0;
-{
-#else
-int s9(struct defs *pd0){
-#endif
-   static char s9er[] = "s9,er%d\n";
-   static char qs9[8] = "s9     ";
-   int rc;
-   char *ps, *pt;
-   int lrc, i;
-
-   ps = qs9;
-   pt = pd0->rfs;
-   rc = 0;
-   while (*pt++ = *ps++);
-
-        /* One would think that the section on statements would
-        provide the most variety in the entire sequence of tests.
-        As it turns out, most of the material in this section has
-        already been checked in the process of checking out
-        everything else, and the section at this point is somewhat
-        anticlimactic. For this reason, we restrict ourselves
-        to testing two features not already covered.
-
-        Compound statements are delimited by braces. They have the
-        nice property that identifiers of the auto and register
-        variety are pushed and popped. It is currently legal to
-        transfer into a block, but we wont...
-                                                                */
-
-   lrc = 0;
-   for(i=0; i<2; i++){
-     int j;
-     register int k;
-     j = k = 2;
-       {
-       int j;
-       register int k;
-       j = k = 3;
-       if((j != 3) || (k != 3)) lrc = 1;
-       }
-     if((j != 2) || (k != 2)) lrc = 1;
-   }
-
-   if(lrc != 0){
-     if(pd0->flgd != 0) printf(s9er,1);
-     rc = rc+1;
-   }
-
-        /* Goto statements go to labeled statements, we hope.   */
-
-   goto nobarf;
-     if(pd0->flgd != 0) printf(s9er,2);
-     rc = rc+2;
-   nobarf:;
-
-   return rc;
-}
-
-/*********************************************************************************************
- the main loop that launches the sections
-*********************************************************************************************/
-
-#ifndef NO_TYPELESS_STRUCT_PTR
-       int section(int j,struct* pd0){
-#else
-       int section(int j,void* pd0){
-#endif
-        switch(j){
-                case 0: return s9(pd0);
-        }
-}
-
-#define cq_sections 1
-
-/*
-        C REFERENCE MANUAL (main)
-*/
-
-#ifndef NO_OLD_FUNC_DECL
-main(n,args)
-int n;
-char **args;
-{
-#else
-int main(int n,char **args) {
-#endif
-
-int j;
-static struct defs d0, *pd0;
-
-   d0.flgs = 1;          /* These flags dictate            */
-   d0.flgm = 1;          /*     the verbosity of           */
-   d0.flgd = 1;          /*         the program.           */
-   d0.flgl = 1;
-
-   pd0 = &d0;
-
-   for (j=0; j<cq_sections; j++) {
-     d0.rrc=section(j,pd0);
-     d0.crc=d0.crc+d0.rrc;
-     if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
-   }
-
-   if(d0.crc == 0) printf("\nNo errors detected.\n");
-   else printf("\nFailed.\n");
-
-   return d0.crc;
-}
diff --git a/test/val/for.c b/test/val/for.c
deleted file mode 100644 (file)
index 58a6086..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-unsigned int uint0 = 0;
-unsigned int uint1 = 0;
-unsigned char uchar0 = 0;
-unsigned char uchar1 = 0;
-
-void done()
-{
-  dummy++;
-}
-
-void for1(void)
-{
-  unsigned char i=0;
-
-  for(i=0; i<10; i++)
-    uchar0++;
-
-  if(uchar0 != 10)
-    failures++;
-}
-
-void for2(void)
-{
-  unsigned char i=0;
-
-  for(i=0; i<10; i++)
-    uchar0++;
-
-  if(i < 10)
-    failures++;
-}
-
-void for3(void)
-{
-  unsigned int i=0;
-
-  for(i=0; i<10; i++)
-    uint0++;
-
-  if(i < 10)
-    failures++;
-}
-
-void for4(void)
-{
-  for(uint0=1; uint0<10; uint0++)
-    uchar0++;
-
-  if(uchar0 != 9)
-    failures++;
-}
-
-void for5(void)
-{
-  for(uint0=1; uint0<=10; uint0++)
-    uchar0++;
-
-  if(uchar0 != 10)
-    failures++;
-}
-
-void inc_uchar0(void)
-{
-  uchar0++;
-}
-
-void for6(void)
-{
-  uchar0 = 0;
-  for(uint0=1; uint0<=10; uint0++)
-    inc_uchar0();
-}
-
-int main(void)
-{
-  for1();
-  for2();
-  for3();
-  uchar0 = 0;
-  for4();
-  uchar0 = 0;
-  for5();
-
-  for6();
-  if(uchar0 != 10)
-    failures++;
-
-  success = failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/mult1.c b/test/val/mult1.c
deleted file mode 100644 (file)
index 831bde7..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-#define TESTLIT 0x05
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-signed char c1,c2,c3;
-unsigned char uc1,uc2,uc3;
-
-unsigned int ui1,ui2,ui3;
-signed int i1,i2;
-
-void done()
-{
-  dummy++;
-}
-
-void m1(void)
-{
-  c1 = c1*5;       /* char = char * lit */
-
-  c2 = c1 *c3;     /* char = char * char */
-
-  uc1= uc1*5;      /* uchar = uchar * lit *
-  uc2=uc1*uc3;     /* uchar = uchar * uchar */
-
-  if(c2 != 25)
-    failures++;
-}
-
-void m2(unsigned char uc)
-{
-  uc2 = uc1 * uc;
-
-  if(uc2 != 0x20)
-    failures++;
-}
-
-void m3(unsigned char uc)
-{
-  volatile unsigned char vuc;
-  
-  /* uchar = uchar * lit */
-  /* testing literal multiply with same source and destination */
-  vuc = uc;
-  uc2 = 0;   
-  uc1 = vuc; uc1 = uc1*1; if( uc1 != (uc2+=TESTLIT) ) failures++; 
-  uc1 = vuc; uc1 = uc1*2; if( uc1 != (uc2+=TESTLIT) ) failures++;      
-  uc1 = vuc; uc1 = uc1*3; if( uc1 != (uc2+=TESTLIT) ) failures++;     
-  uc1 = vuc; uc1 = uc1*4; if( uc1 != (uc2+=TESTLIT) ) failures++;      
-  uc1 = vuc; uc1 = uc1*5; if( uc1 != (uc2+=TESTLIT) ) failures++;
-  uc1 = vuc; uc1 = uc1*6; if( uc1 != (uc2+=TESTLIT) ) failures++;      
-  uc1 = vuc; uc1 = uc1*7; if( uc1 != (uc2+=TESTLIT) ) failures++;     
-  uc1 = vuc; uc1 = uc1*8; if( uc1 != (uc2+=TESTLIT) ) failures++;      
-  uc1 = vuc; uc1 = uc1*9; if( uc1 != (uc2+=TESTLIT) ) failures++;
-  uc1 = vuc; uc1 = uc1*10; if( uc1 != (uc2+=TESTLIT) ) failures++;      
-  uc1 = vuc; uc1 = uc1*11; if( uc1 != (uc2+=TESTLIT) ) failures++;     
-  uc1 = vuc; uc1 = uc1*12; if( uc1 != (uc2+=TESTLIT) ) failures++;      
-  uc1 = vuc; uc1 = uc1*13; if( uc1 != (uc2+=TESTLIT) ) failures++;
-  uc1 = vuc; uc1 = uc1*14; if( uc1 != (uc2+=TESTLIT) ) failures++;
-  uc1 = vuc; uc1 = uc1*15; if( uc1 != (uc2+=TESTLIT) ) failures++;
-  uc1 = vuc; uc1 = uc1*16; if( uc1 != (uc2+=TESTLIT) ) failures++;
-  uc1 = vuc; uc1 = uc1*17; if( uc1 != (uc2+=TESTLIT) ) failures++;
-  uc1 = vuc; uc1 = uc1*18; if( uc1 != (uc2+=TESTLIT) ) failures++;
-  uc1 = vuc; uc1 = uc1*19; if( uc1 != (uc2+=TESTLIT) ) failures++;
-  uc1 = vuc; uc1 = uc1*20; if( uc1 != (uc2+=TESTLIT) ) failures++;
-  uc1 = vuc; uc1 = uc1*21; if( uc1 != (uc2+=TESTLIT) ) failures++;
-  uc1 = vuc; uc1 = uc1*22; if( uc1 != (uc2+=TESTLIT) ) failures++;
-  uc1 = vuc; uc1 = uc1*23; if( uc1 != (uc2+=TESTLIT) ) failures++;  
-  uc1 = vuc; uc1 = uc1*24; if( uc1 != (uc2+=TESTLIT) ) failures++;
-  
-  uc1 = vuc; uc1 = uc1*31; if( uc1 != ((31*TESTLIT) & 0xff) ) failures++;
-  uc1 = vuc; uc1 = uc1*32; if( uc1 != ((32*TESTLIT) & 0xff) ) failures++;
-  uc1 = vuc; uc1 = uc1*64; if( uc1 != ((64*TESTLIT) & 0xff) ) failures++;
-  uc1 = vuc; uc1 = uc1*128;if( uc1 != ((128*TESTLIT)& 0xff) ) failures++;
-
-  /* testing literal multiply with different source and destination */
-  uc1 = vuc*1; if( uc1 != ((1*TESTLIT) & 0xff) ) failures++;    
-  uc1 = vuc*2; if( uc1 != ((2*TESTLIT) & 0xff) ) failures++;    
-  uc1 = vuc*4; if( uc1 != ((4*TESTLIT) & 0xff) ) failures++;
-}
-
-int  main(void)
-{
-  dummy = 0;
-
-  c1 = 1;
-  c3 = 5;
-
-  m1();
-
-  uc1 = 0x10;
-  m2(2);
-
-  ui1 = uc1*uc2;   /* uint = uchar * uchar */
-
-  i1 = c1*c2;      /* int = char * char */
-
-  ui3 = ui1*ui2;   /* uint = uint * unit */
-
-  /*m3(TESTLIT);*/
-
-  success = failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/nestfor.c b/test/val/nestfor.c
deleted file mode 100644 (file)
index 735da21..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-unsigned int uint0 = 0;
-unsigned int uint1 = 0;
-unsigned char uchar0 = 0;
-unsigned char uchar1 = 0;
-
-void dput(unsigned char val)
-{
-       /*PORTB = val;
-       PORTA = 0x01;
-       PORTA = 0x00;
-       */
-}
-
-void done()
-{
-  dummy++;
-}
-
-/* both loops use the loop variable inside the inner loop */
-void for1(void)
-{
-       unsigned char i, j;
-
-       uchar0 = 0;
-       uchar1 = 0;
-       for(i = 0; i < 3; i++) {
-               uchar0++;
-               for(j = 0; j < 4; j++) {
-                       uchar1++;
-                       dput(i);
-                       dput(j);
-               }
-       }
-       if(uchar0 != 3)
-               failures++;
-       if(uchar1 != 12)
-               failures++;
-}
-
-/* only the outer loop's variable is used inside, inner can be optimized into a repeat-loop */
-void for2(void)
-{
-       unsigned char i, j;
-
-       uchar0 = 0;
-       uchar1 = 0;
-       for(i = 0; i < 3; i++) {
-               uchar0++;
-               for(j = 0; j < 4; j++) {
-                       uchar1++;
-                       dput(i);
-               }
-       }
-       if(uchar0 != 3)
-               failures++;
-       if(uchar1 != 12)
-               failures++;
-}
-
-/* only the inner loop's variable is used inside */
-void for3(void)
-{
-       unsigned char i, j;
-
-       uchar0 = 0;
-       uchar1 = 0;
-       for(i = 0; i < 3; i++) {
-               uchar0++;
-               for(j = 0; j < 4; j++) {
-                       uchar1++;
-                       dput(j);
-               }
-       }
-       if(uchar0 != 3)
-               failures++;
-       if(uchar1 != 12)
-               failures++;
-}
-
-/* neither loop variable used inside the loops */
-void for4(void)
-{
-       unsigned char i, j;
-
-       uchar0 = 0;
-       uchar1 = 0;
-       for(i = 0; i < 3; i++) {
-               uchar0++;
-               for(j = 0; j < 4; j++) {
-                       uchar1++;
-                       dput(uchar0);
-                       dput(uchar1);
-               }
-       }
-       if(uchar0 != 3)
-               failures++;
-       if(uchar1 != 12)
-               failures++;
-}
-
-/* like for1 but different condition in inner loop */
-void for5(void)
-{
-       unsigned char i, j;
-
-       uchar0 = 0;
-       uchar1 = 0;
-       for(i = 0; i < 3; i++) {
-               uchar0++;
-               for(j = 10; j >= 5; j--) {
-                       uchar1++;
-                       dput(i);
-                       dput(j);
-               }
-       }
-       if(uchar0 != 3)
-               failures++;
-       if(uchar1 != 18)
-               failures++;
-}
-
-int  main(void)
-{
-  for1();
-  for2();
-  for3();
-  for4();
-  for5();
-
-  success = failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/or1.c b/test/val/or1.c
deleted file mode 100644 (file)
index 9e41d7a..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-#if SUPPORT_BIT_TYPES
-bit bit0 = 0;
-bit bit1 = 0;
-bit bit2 = 0;
-#endif
-
-unsigned int uint0 = 0;
-unsigned int uint1 = 0;
-unsigned char uchar0 = 0;
-unsigned char uchar1 = 0;
-unsigned long ulong0 = 0;
-unsigned long ulong1 = 0;
-
-void done()
-{
-  dummy++;
-}
-
-/* uchar0 = 0; */
-void or_lit2uchar(void)
-{
-  if(uchar0)
-    failures++;
-
-  uchar0 |= 1;
-
-  if(uchar0 != 1)
-    failures++;
-
-  uchar0 |= 2;
-
-  if(uchar0 != 3)
-    failures++;
-
-  uchar0 |= 0x0e;
-
-  if(uchar0 != 0x0f)
-    failures++;
-}
-
-void or_lit2uint(void)
-{
-  if(uint0)
-    failures++;
-
-  uint0 |= 1;
-  if(uint0 != 1) 
-    failures++;
-
-  uint0 |= 2;
-  if(uint0 != 3) 
-    failures++;
-
-  uint0 |= 0x100;
-  if(uint0 != 0x103) 
-    failures++;
-
-  uint0 |= 0x102;
-  if(uint0 != 0x103) 
-    failures++;
-
-  uint0 |= 0x303;
-  if(uint0 != 0x303) 
-    failures++;
-}
-
-void or_lit2ulong(void)
-{
-  if(ulong0)
-    failures++;
-
-  ulong0 |= 1;
-  if(ulong0 != 1) 
-    failures++;
-
-  ulong0 |= 2;
-  if(ulong0 != 3) 
-    failures++;
-
-  ulong0 |= 0x100;
-  if(ulong0 != 0x103) 
-    failures++;
-
-  ulong0 |= 0x102;
-  if(ulong0 != 0x103) 
-    failures++;
-
-  ulong0 |= 0x303;
-  if(ulong0 != 0x303) 
-    failures++;
-
-  ulong0 |= 0x80000000;
-  if(ulong0 != 0x80000303) 
-    failures++;
-}
-
-/*-----------*/
-void or_uchar2uchar(void)
-{
-  uchar0 |= uchar1;
-
-  if(uchar0 != 1)
-    failures++;
-
-  uchar1 |= 0x0f;
-
-  uchar0 = uchar1 | 0x10;
-
-  if(uchar0 != 0x1f)
-    failures++;
-}
-
-void or_uint2uint(void)
-{
-  uint0 |= uint1;
-
-  if(uint0 != 1)
-    failures++;
-
-  uint1 |= 0x0f;
-
-  uint0 = uint1 | 0x10;
-
-  if(uint0 != 0x1f)
-    failures++;
-}
-
-#if SUPPORT_BIT_TYPES
-
-void or_bits1(void)
-{
-  bit0 = bit0 | bit1 | bit2;
-}
-
-void or_bits2(void)
-{
-  bit0 = bit1 | bit2;
-}
-#endif
-
-int  main(void)
-{
-  or_lit2uchar();
-  or_lit2uint();
-  or_lit2ulong();
-
-  uchar0=0;
-  uchar1=1;
-  or_uchar2uchar();
-
-  uint0=0;
-  uint1=1;
-  or_uint2uint();
-
-#if SUPPORT_BIT_TYPES
-  or_bits1();
-  if(bit0)
-    failures++;
-
-  or_bits2();
-  if(bit0)
-    failures++;
-
-  bit1=1;
-  or_bits1();
-  if(!bit0)
-    failures++;
-
-  or_bits2();
-  if(!bit0)
-    failures++;
-#endif
-
-  success = failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/pointed-array.c b/test/val/pointed-array.c
deleted file mode 100644 (file)
index 3390ac9..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
-** !!DESCRIPTION!! Simple tests of pointer-to-array dereferences
-** !!ORIGIN!!      cc65 regression tests
-** !!LICENCE!!     Public Domain
-** !!AUTHOR!!      2015-06-29, Greg King
-*/
-
-#include <stdio.h>
-
-static unsigned char failures = 0;
-static size_t Size;
-
-typedef unsigned char array_t[4][4];
-
-static array_t table = {
-    {12, 13, 14, 15},
-    { 8,  9, 10, 11},
-    { 4,  5,  6,  7},
-    { 0,  1,  2,  3}
-};
-static array_t *tablePtr = &table;
-
-static unsigned (*vector)[2];
-
-static unsigned char y = 0, x;
-
-int main(void)
-{
-    /* The indirection must convert the expression-type (from Pointer into
-    ** Array); but, it must not convert the value, because it already points
-    ** to the start of the array.
-    */
-    /* (Note:  I reduce output clutter by using a variable to prevent
-    ** compiler warnings about constant comparisons and unreachable code.
-    */
-    if ((Size = sizeof *tablePtr) != sizeof table) {
-        ++failures;
-    }
-    if (*tablePtr != table) {
-        ++failures;
-    }
-
-    /* Test fetching. */
-    do {
-        x = 0;
-        do {
-            if ((*tablePtr)[y][x] != table[y][x]) {
-                ++failures;
-                printf("(*tableptr)[%u][%u] (%u) != table[%u][%u] (%u).\n",
-                       y, x, (*tablePtr)[y][x],
-                       y, x, table[y][x]);
-            }
-        } while (++x < sizeof table[0]);
-    } while (++y < sizeof table / sizeof table[0]);
-
-    vector = (unsigned (*)[])table[1];
-    if ((*vector)[1] != 0x0B0A) {
-        ++failures;
-    }
-
-    /* Test storing. */
-    (*tablePtr)[2][1] = 42;
-    if (table[2][1] != 42) {
-        ++failures;
-        printf("table[2][1] == %u (should have changed from 5 to 42).\n",
-               table[2][1]);
-    }
-    x = 3;
-    y = 1;
-    (*tablePtr)[y][x] = 83;
-    if (table[1][3] != 83) {
-        ++failures;
-        printf("table[y][x] == %u (should have changed from 11 to 83).\n",
-               table[1][3]);
-    }
-
-    /* Test triple indirection.  It should compile to two indirection
-    ** operations.
-    */
-    --***tablePtr;
-    if (**table != 11) {
-        ++failures;
-        printf("**table == %u (should have changed from 12 to 11).\n",
-               table[0][0]);
-    }
-
-    if (failures != 0) {
-        printf("failures: %u\n", failures);
-    }
-    return failures;
-}
diff --git a/test/val/pointer1.c b/test/val/pointer1.c
deleted file mode 100644 (file)
index b108bfe..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
-  !!DESCRIPTION!! Pointer tests
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success = 0;
-unsigned char failures = 0;
-unsigned char dummy = 0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-unsigned int aint0 = 0;
-unsigned int aint1 = 0;
-unsigned char achar0 = 0;
-unsigned char achar1 = 0;
-unsigned char *acharP = 0;
-
-char buff[10];
-
-void
-done ()
-{
-  dummy++;
-}
-
-void
-f1 (unsigned char *ucP)
-{
-  if (ucP == 0)
-    {
-      failures++;
-      return;
-    }
-
-  if (*ucP)
-    failures++;
-}
-
-void
-f2 (unsigned int *uiP)
-{
-  if (uiP == 0)
-    {
-      failures++;
-      return;
-    }
-
-  if (*uiP)
-    failures++;
-}
-
-unsigned char *
-f3 (void)
-{
-  return &achar0;
-}
-
-void f4(unsigned char *ucP, unsigned char uc)
-{
-  if(!ucP) {
-    failures++;
-    return;
-  }
-
-  if(*ucP != uc)
-    failures++;
-}
-
-void init_array(char start_value)
-{
-  unsigned char c;
-
-  for(c=0; c<sizeof(buff); c++)
-    buff[c] = start_value++;
-}
-
-void check_array(char base_value)
-{
-  unsigned char c;
-
-  for(c=0; c<sizeof(buff); c++)
-    if(buff[c] != (base_value+c))
-      failures++;
-}
-
-void index_by_pointer(unsigned char *index, unsigned char expected_value)
-{
-  if(buff[*index] != expected_value)
-    failures++;
-}
-
-int
-main (void)
-{
-  init_array(4);
-  check_array(4);
-
-  if(buff[achar0 + 7] != 4+7)
-    failures++;
-
-  dummy = buff[achar0];
-
-  if(dummy != 4)
-    failures++;
-
-  if(dummy != (buff[achar0+1] -1))
-    failures++;
-
-  index_by_pointer(&dummy, 8);
-
-  f1 (&achar0);
-  f2 (&aint0);
-
-  acharP = f3 ();
-  if ((acharP == 0) || (*acharP))
-    failures++;
-  achar0 = 42;
-  if(*acharP != 42)
-    failures++;
-
-  achar0 = 5;
-  f4(&achar0, achar0);
-
-  success = failures;
-  done ();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/ptrfunc.c b/test/val/ptrfunc.c
deleted file mode 100644 (file)
index 55503e1..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-
-#define NO_IMPLICIT_FUNCPTR_CONV
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-unsigned int uint0 = 0;
-unsigned int uint1 = 0;
-
-/*
- * BUG: if these aren't volatile, an overzealous optimizer or somthing
- * wreaks havoc with the simple tests like "if(uchar != 3)failures++"
- */
-
-#if 0
-unsigned char uchar0 = 0;
-unsigned char uchar1 = 0;
-unsigned char uchar2 = 0;
-#else
-volatile unsigned char uchar0 = 0;
-volatile unsigned char uchar1 = 0;
-volatile unsigned char uchar2 = 0;
-#endif
-
-#ifdef NO_IMPLICIT_FUNCPTR_CONV
-void (*pfunc)(void);
-void (*p1func)(void);
-unsigned char (*pcfunc)(void);
-#else
-void (*pfunc)();
-void (*p1func)();
-unsigned char (*pcfunc)();
-#endif
-
-void done()
-{
-  dummy++;
-}
-
-void call0(void)
-{
-       uchar0++;
-}
-
-void call1(void)
-{
-       uchar1++;
-}
-
-unsigned char call2(void)
-{
-       return uchar0 + 9;
-}
-
-void docall0(void)
-{
-       pfunc = call0;
-       (pfunc)();
-       if(uchar0 != 1)
-               failures++;
-}
-
-void docall1()
-{
-       unsigned char i;
-       for(i = 0; i < 3; i++) {
-               (*p1func)();
-       }
-}
-
-#ifdef NO_IMPLICIT_FUNCPTR_CONV
-void docall2( void(*pf)(void) )
-#else
-void docall2( void(*pf)() )
-#endif
-{
-       unsigned char i;
-       for(i = 0; i < 2; i++) {
-               pf();
-       }
-}
-
-int  main(void)
-{
-    docall0();
-
-       p1func = call1;
-       docall1();
-       if(uchar1 != 3)
-               failures++;
-       if(uchar0 != 1)
-               failures++;
-
-       p1func = call0;
-       docall1();
-       if(uchar1 != 3)
-               failures++;
-       if(uchar0 != 4)
-               failures++;
-
-       docall2(call0);
-       if(uchar1 != 3)
-               failures++;
-       if(uchar0 != 6)
-               failures++;
-
-       docall2(call1);
-       if(uchar1 != 5)
-               failures++;
-       if(uchar0 != 6)
-               failures++;
-
-       pcfunc = call2;
-       uchar2 = (*pcfunc)();
-       if(uchar2 != 15)
-               failures++;
-
-       uchar2 += (pcfunc)();
-       uchar2 += pcfunc();
-
-       success = failures;
-       done();
-       printf("failures: %d\n",failures);
-
-       return failures;
-}
diff --git a/test/val/rotate1.c b/test/val/rotate1.c
deleted file mode 100644 (file)
index b7d6e64..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
-  !!DESCRIPTION!! Shift bytes left and right by a constant.
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-unsigned int aint0 = 0;
-unsigned int aint1 = 0;
-unsigned char achar0 = 0;
-unsigned char achar1 = 0;
-unsigned char achar2 = 0;
-
-void done()
-{
-  dummy++;
-}
-
-void check(void)
-{
-  if(achar0 != achar1)
-    failures++;
-}
-
-void shift_left_1(void)
-{
-  achar0 <<= 1;
-
-  check();
-}
-
-void shift_left_2(void)
-{
-  achar0 <<= 2;
-
-  if(achar0 != achar1)
-    failures++;
-}
-
-void shift_left_3(void)
-{
-  achar0 <<= 3;
-
-  if(achar0 != achar1)
-    failures++;
-}
-
-void shift_left_4(void)
-{
-  achar0 <<= 4;
-
-  if(achar0 != achar1)
-    failures++;
-}
-
-void shift_left_5(void)
-{
-  achar0 <<= 5;
-
-  if(achar0 != achar1)
-    failures++;
-}
-
-void shift_left_6(void)
-{
-  achar0 <<= 6;
-
-  if(achar0 != achar1)
-    failures++;
-}
-
-void shift_left_7(void)
-{
-  achar0 <<= 7;
-
-  if(achar0 != achar1)
-    failures++;
-}
-
-void shift_right_1(void)
-{
-  achar0 >>= 1;
-
-  check();
-}
-
-void shift_right_2(void)
-{
-  achar0 >>= 2;
-
-  check();
-}
-
-void shift_right_3(void)
-{
-  achar0 >>= 3;
-
-  check();
-}
-
-void shift_right_4(void)
-{
-  achar0 >>= 4;
-
-  check();
-}
-
-void shift_right_5(void)
-{
-  achar0 >>= 5;
-
-  check();
-}
-
-void shift_right_6(void)
-{
-  achar0 >>= 6;
-
-  check();
-}
-
-void shift_right_7(void)
-{
-  achar0 >>= 7;
-
-  check();
-}
-
-int main(void)
-{
-  /* call with both values zero */
-  shift_left_1();
-
-  achar0 = 1;
-  achar1 = 2;
-  for(achar2=0; achar2<6; achar2++) {
-    shift_left_1();
-    achar1 <<=1;
-  }
-
-  achar0 = 1;
-  achar1 = 4;
-  shift_left_2();
-
-  achar0 = 1;
-  achar1 = 8;
-  shift_left_3();
-
-  achar0 = 1;
-  achar1 = 0x10;
-  shift_left_4();
-
-  achar0 = 1;
-  achar1 = 0x20;
-  shift_left_5();
-
-  achar0 = 1;
-  achar1 = 0x40;
-  shift_left_6();
-
-  achar0 = 1;
-  achar1 = 0x80;
-  shift_left_7();
-
-  achar0 = 2;
-  achar1 = 1;
-  shift_right_1();
-
-  achar0 = 4;
-  shift_right_2();
-
-  achar0 = 8;
-  shift_right_3();
-
-  achar0 = 0x10;
-  shift_right_4();
-
-  achar0 = 0x20;
-  shift_right_5();
-
-  achar0 = 0x40;
-  shift_right_6();
-
-  achar0 = 0x80;
-  shift_right_7();
-
-  success=failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/rotate2.c b/test/val/rotate2.c
deleted file mode 100644 (file)
index 7622736..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
-  !!DESCRIPTION!! Shift bytes left and right by a variable.
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-unsigned int aint0 = 0;
-unsigned int aint1 = 0;
-unsigned char achar0 = 0;
-unsigned char achar1 = 0;
-unsigned char achar2 = 0;
-unsigned char achar3 = 0;
-
-void done()
-{
-  dummy++;
-}
-
-void shift_right_var(void)
-{
-  achar0 >>= achar1;
-}
-
-void shift_left_var(void)
-{
-  achar0 <<= achar1;
-}
-
-void shift_int_left_1(void)
-{
-  aint0 <<= 1;
-}
-
-int main(void)
-{
-  char i;
-
-  achar0 = 1;
-  achar1 = 1;
-  shift_left_var();
-
-  if(achar0 !=2)
-    failures++;
-
-  achar0 = 1;
-  achar1 = 1;
-  achar2 = 1;
-  for(i=0; i<7; i++) {
-    shift_left_var();
-    achar2 <<= 1;
-
-    if(achar2 != achar0)
-      failures++;
-  }
-
-  success=failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/rotate3.c b/test/val/rotate3.c
deleted file mode 100644 (file)
index 21b2dc3..0000000
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
-  !!DESCRIPTION!! Shift ints left and right
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-#ifdef SIZEOF_INT_16BIT
-#if defined(__LINUX__) || defined(LINUX)
-unsigned short aint0 = 0;
-unsigned short aint1 = 0;
-
-#else
-unsigned int aint0 = 0;
-unsigned int aint1 = 0;
-
-#endif
-
-#else
-unsigned int aint0 = 0;
-unsigned int aint1 = 0;
-
-#endif
-unsigned char achar0 = 0;
-unsigned char achar1 = 0;
-unsigned char achar2 = 0;
-unsigned char achar3 = 0;
-
-void done()
-{
-  dummy++;
-}
-
-void shift_int_left_1(void)
-{
-  aint0 <<= 1;
-}
-
-void shift_int_left_2(void)
-{
-  aint0 <<= 2;
-}
-
-void shift_int_left_3(void)
-{
-  aint0 <<= 3;
-}
-
-void shift_int_left_4(void)
-{
-  aint0 <<= 4;
-}
-
-void shift_int_left_5(void)
-{
-  aint0 <<= 5;
-}
-
-void shift_int_left_6(void)
-{
-  aint0 <<= 6;
-}
-
-void shift_int_left_7(void)
-{
-  aint0 <<= 7;
-}
-
-void shift_int_left_8(void)
-{
-  aint0 <<= 8;
-}
-
-void shift_int_left_9(void)
-{
-  aint0 <<= 9;
-}
-
-void shift_int_left_10(void)
-{
-  aint0 <<= 10;
-}
-
-void shift_int_left_11(void)
-{
-  aint0 <<= 11;
-}
-
-void shift_int_left_12(void)
-{
-  aint0 <<= 12;
-}
-
-void shift_int_left_13(void)
-{
-  aint0 <<= 13;
-}
-
-void shift_int_left_14(void)
-{
-  aint0 <<= 14;
-}
-
-void shift_int_left_15(void)
-{
-  aint0 <<= 15;
-}
-
-/*****************************************************/
-void shift_int_right_1(void)
-{
-  aint0 >>= 1;
-}
-
-void shift_int_right_2(void)
-{
-  aint0 >>= 2;
-}
-
-void shift_int_right_3(void)
-{
-  aint0 >>= 3;
-}
-
-void shift_int_right_4(void)
-{
-  aint0 >>= 4;
-}
-
-void shift_int_right_5(void)
-{
-  aint0 >>= 5;
-}
-
-void shift_int_right_6(void)
-{
-  aint0 >>= 6;
-}
-
-void shift_int_right_7(void)
-{
-  aint0 >>= 7;
-}
-
-void shift_int_right_8(void)
-{
-  aint0 >>= 8;
-}
-
-void shift_int_right_9(void)
-{
-  aint0 >>= 9;
-}
-
-void shift_int_right_10(void)
-{
-  aint0 >>= 10;
-}
-
-void shift_int_right_11(void)
-{
-  aint0 >>= 11;
-}
-
-void shift_int_right_12(void)
-{
-  aint0 >>= 12;
-}
-
-void shift_int_right_13(void)
-{
-  aint0 >>= 13;
-}
-
-void shift_int_right_14(void)
-{
-  aint0 >>= 14;
-}
-
-void shift_int_right_15(void)
-{
-  aint0 >>= 15;
-}
-
-/*****************************************************/
-int main(void)
-{
-  /*char i;*/
-  aint0 = 0xabcd;
-
-  shift_int_left_1();
-  if(aint0 != 0x579a)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_left_2();
-  if(aint0 != 0xaf34)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_left_3();
-  if(aint0 != 0x5e68)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_left_4();
-  if(aint0 != 0xbcd0)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_left_5();
-  if(aint0 != 0x79a0)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_left_6();
-  if(aint0 != 0xf340)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_left_7();
-  if(aint0 != 0xe680)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_left_8();
-  if(aint0 != 0xcd00)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_left_9();
-  if(aint0 != 0x9a00)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_left_10();
-  if(aint0 != 0x3400)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_left_11();
-  if(aint0 != 0x6800)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_left_12();
-  if(aint0 != 0xd000)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_left_13();
-  if(aint0 != 0xa000)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_left_14();
-  if(aint0 != 0x4000)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_left_15();
-  if(aint0 != 0x8000)
-    failures++;
-
-  /***********************/
-  aint0 = 0xabcd;
-
-  shift_int_right_1();
-  if(aint0 != 0x55e6)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_right_2();
-  if(aint0 != 0x2af3)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_right_3();
-  if(aint0 != 0x1579)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_right_4();
-  if(aint0 != 0x0abc)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_right_5();
-  if(aint0 != 0x055e)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_right_6();
-  if(aint0 != 0x02af)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_right_7();
-  if(aint0 != 0x0157)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_right_8();
-  if(aint0 != 0x00ab)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_right_9();
-  if(aint0 != 0x0055)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_right_10();
-  if(aint0 != 0x002a)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_right_11();
-  if(aint0 != 0x0015)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_right_12();
-  if(aint0 != 0x000a)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_right_13();
-  if(aint0 != 0x0005)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_right_14();
-  if(aint0 != 0x0002)
-    failures++;
-
-  aint0 = 0xabcd;
-
-  shift_int_right_15();
-  if(aint0 != 0x0001)
-    failures++;
-
-  success=failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/rotate4.c b/test/val/rotate4.c
deleted file mode 100644 (file)
index 09b1ebf..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
-  !!DESCRIPTION!! rotate bytes left and right by a constant.
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-#ifdef SIZEOF_INT_16BIT
-#if defined(__LINUX__) || defined(LINUX)
-unsigned short aint0 = 0;
-unsigned short aint1 = 0;
-
-#else
-unsigned int aint0 = 0;
-unsigned int aint1 = 0;
-
-#endif
-
-#else
-unsigned int aint0 = 0;
-unsigned int aint1 = 0;
-
-#endif
-unsigned char uchar0 = 0;
-unsigned char uchar1 = 0;
-unsigned char uchar2 = 0;
-
-void done()
-{
-  dummy++;
-}
-
-void check(void)
-{
-  if(uchar0 != uchar1)
-    failures++;
-}
-
-void rotate_left_1(void)
-{
-  uchar0 = (uchar0<<1) | (uchar0>>7);
-
-  check();
-}
-
-void rotate_left_2(void)
-{
-  uchar0 = (uchar0<<2) | (uchar0>>6);
-
-  check();
-}
-
-void rotate_left_3(void)
-{
-  uchar0 <<= 3;
-
-  if(uchar0 != uchar1)
-    failures++;
-}
-
-void rotate_left_4(void)
-{
-  uchar0 <<= 4;
-
-  if(uchar0 != uchar1)
-    failures++;
-}
-
-void rotate_left_5(void)
-{
-  uchar0 <<= 5;
-
-  if(uchar0 != uchar1)
-    failures++;
-}
-
-void rotate_left_6(void)
-{
-  uchar0 <<= 6;
-
-  if(uchar0 != uchar1)
-    failures++;
-}
-
-void rotate_left_7(void)
-{
-  uchar0 <<= 7;
-
-  if(uchar0 != uchar1)
-    failures++;
-}
-
-void rotate_right_1(void)
-{
-  uchar0 = (uchar0>>1) | (uchar0<<7);
-
-  check();
-}
-
-void rotate_right_2(void)
-{
-  uchar0 = (uchar0>>2) | (uchar0<<6);
-
-  check();
-}
-
-void rotate_right_3(void)
-{
-  uchar0 >>= 3;
-
-  check();
-}
-
-void rotate_right_4(void)
-{
-  uchar0 >>= 4;
-
-  check();
-}
-
-void rotate_right_5(void)
-{
-  uchar0 >>= 5;
-
-  check();
-}
-
-void rotate_right_6(void)
-{
-  uchar0 >>= 6;
-
-  check();
-}
-
-void rotate_right_7(void)
-{
-  uchar0 >>= 7;
-
-  check();
-}
-
-int main(void)
-{
-  /* call with both values zero */
-  rotate_left_1();
-
-  uchar0 = 1;
-  uchar1 = 2;
-
-  rotate_left_1();
-
-  uchar0 = 0x80;
-  uchar1 = 1;
-
-  rotate_left_1();
-
-  uchar1 = 2;
-  for(uchar2=0; uchar2<6; uchar2++) {
-    rotate_left_1();
-    uchar1 <<=1;
-  }
-
-  uchar0 = 1;
-  uchar1 = 4;
-  rotate_left_2();
-
-  uchar0 = 1;
-  uchar1 = 8;
-  rotate_left_3();
-
-  uchar0 = 1;
-  uchar1 = 0x10;
-  rotate_left_4();
-
-  uchar0 = 1;
-  uchar1 = 0x20;
-  rotate_left_5();
-
-  uchar0 = 1;
-  uchar1 = 0x40;
-  rotate_left_6();
-
-  uchar0 = 1;
-  uchar1 = 0x80;
-  rotate_left_7();
-
-  uchar0 = 2;
-  uchar1 = 1;
-  rotate_right_1();
-
-  uchar0 = 1;
-  uchar1 = 0x80;
-  rotate_right_1();
-
-  uchar0 = 4;
-  uchar1 = 1;
-  rotate_right_2();
-
-  uchar0 = 8;
-  rotate_right_3();
-
-  uchar0 = 0x10;
-  rotate_right_4();
-
-  uchar0 = 0x20;
-  rotate_right_5();
-
-  uchar0 = 0x40;
-  rotate_right_6();
-
-  uchar0 = 0x80;
-  rotate_right_7();
-
-  success=failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/rotate5.c b/test/val/rotate5.c
deleted file mode 100644 (file)
index 501e2e5..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
-  !!DESCRIPTION!! Shift bytes left and right by a constant.
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-#ifdef SIZEOF_INT_16BIT
-#if defined(__LINUX__) || defined(LINUX)
-signed short aint0 = 0;
-signed short aint1 = 0;
-
-#else
-signed int aint0 = 0;
-signed int aint1 = 0;
-
-#endif
-
-#else
-signed int aint0 = 0;
-signed int aint1 = 0;
-
-#endif
-signed char achar0 = 0;
-signed char achar1 = 0;
-signed char achar2 = 0;
-
-void done()
-{
-  dummy++;
-}
-
-void check(void)
-{
-  if(achar0 != achar1)
-    failures++;
-}
-
-void shift_left_1(void)
-{
-  achar0 <<= 1;
-
-  check();
-}
-
-void shift_left_2(void)
-{
-  achar0 <<= 2;
-
-  if(achar0 != achar1)
-    failures++;
-}
-
-void shift_left_3(void)
-{
-  achar0 <<= 3;
-
-  if(achar0 != achar1)
-    failures++;
-}
-
-void shift_left_4(void)
-{
-  achar0 <<= 4;
-
-  if(achar0 != achar1)
-    failures++;
-}
-
-void shift_left_5(void)
-{
-  achar0 <<= 5;
-
-  if(achar0 != achar1)
-    failures++;
-}
-
-void shift_left_6(void)
-{
-  achar0 <<= 6;
-
-  if(achar0 != achar1)
-    failures++;
-}
-
-void shift_left_7(void)
-{
-  achar0 <<= 7;
-
-  if(achar0 != achar1)
-    failures++;
-}
-
-void shift_right_1(void)
-{
-  achar0 >>= 1;
-
-  check();
-}
-
-void shift_right_2(void)
-{
-  achar0 >>= 2;
-
-  check();
-}
-
-void shift_right_3(void)
-{
-  achar0 >>= 3;
-
-  check();
-}
-
-void shift_right_4(void)
-{
-  achar0 >>= 4;
-
-  check();
-}
-
-void shift_right_5(void)
-{
-  achar0 >>= 5;
-
-  check();
-}
-
-void shift_right_6(void)
-{
-  achar0 >>= 6;
-
-  check();
-}
-
-void shift_right_7(void)
-{
-  achar0 >>= 7;
-
-  check();
-}
-
-int main(void)
-{
-  /* call with both values zero */
-  shift_left_1();
-  printf("failures: %d\n",failures);
-
-  achar0 = 1;
-  achar1 = 2;
-  for(achar2=0; achar2<6; achar2++) {
-    shift_left_1();
-    achar1 <<=1;
-  }
-  printf("failures: %d\n",failures);
-
-  achar0 = 1;
-  achar1 = 4;
-  shift_left_2();
-  printf("failures: %d\n",failures);
-
-  achar0 = 1;
-  achar1 = 8;
-  shift_left_3();
-  printf("failures: %d\n",failures);
-
-  achar0 = 1;
-  achar1 = 0x10;
-  shift_left_4();
-  printf("failures: %d\n",failures);
-
-  achar0 = 1;
-  achar1 = 0x20;
-  shift_left_5();
-  printf("failures: %d\n",failures);
-
-  achar0 = 1;
-  achar1 = 0x40;
-  shift_left_6();
-  printf("failures: %d\n",failures);
-
-  achar0 = 1;
-  achar1 = 0x80;
-  shift_left_7();
-  printf("failures: %d\n",failures);
-
-  achar0 = 2;
-  achar1 = 1;
-  shift_right_1();
-  printf("failures: %d\n",failures);
-
-  achar0 = 4;
-  shift_right_2();
-  printf("failures: %d\n",failures);
-
-  achar0 = 8;
-  shift_right_3();
-  printf("failures: %d\n",failures);
-
-  achar0 = 0x10;
-  shift_right_4();
-  printf("failures: %d\n",failures);
-
-  achar0 = 0x20;
-  shift_right_5();
-  printf("failures: %d\n",failures);
-
-  achar0 = 0x40;
-  shift_right_6();
-  printf("failures: %d\n",failures);
-
-  achar0 = 0xff;
-  achar1 = 0xff;
-  shift_right_1();
-  printf("failures: %d\n",failures);
-
-  achar0 = 0xfe;
-  achar1 = 0xff;
-  shift_right_1();
-  printf("failures: %d\n",failures);
-
-  achar0 = 0xfc;
-  shift_right_2();
-  printf("failures: %d\n",failures);
-
-  achar0 = 0xf8;
-  shift_right_3();
-  printf("failures: %d\n",failures);
-
-  achar0 = 0xf0;
-  shift_right_4();
-  printf("failures: %d\n",failures);
-
-  achar0 = 0xe0;
-  shift_right_5();
-  printf("failures: %d\n",failures);
-
-  achar0 = 0xc0;
-  shift_right_6();
-  printf("failures: %d\n",failures);
-
-  achar0 = 0x80;
-  achar1 = 0xff;
-  shift_right_7();
-
-  success=failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/rotate6.c b/test/val/rotate6.c
deleted file mode 100644 (file)
index 9109e12..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
-  !!DESCRIPTION!! Shift bytes left and right by a variable.
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-#ifdef SIZEOF_INT_16BIT
-#if defined(__LINUX__) || defined(LINUX)
-signed short aint0 = 0;
-signed short aint1 = 0;
-
-#else
-signed int aint0 = 0;
-signed int aint1 = 0;
-
-#endif
-
-#else
-signed int aint0 = 0;
-signed int aint1 = 0;
-
-#endif
-signed char achar0 = 0;
-signed char achar1 = 0;
-signed char achar2 = 0;
-signed char achar3 = 0;
-
-void done()
-{
-  dummy++;
-}
-
-void shift_right_var(void)
-{
-  achar0 >>= achar1;
-}
-
-void shift_left_var(void)
-{
-  achar0 <<= achar1;
-}
-
-void shift_int_left_var(void)
-{
-  aint0 <<= achar1;
-}
-
-void shift_int_right_var(void)
-{
-  aint0 >>= achar1;
-}
-
-void shift_int_right_var2(void)
-{
-  aint0 = aint1 >> achar1;
-}
-
-void shift_int_left_var2(void)
-{
-  aint0 = aint1 << achar1;
-}
-
-int
-main (void)
-{
-  char i;
-
-  achar0 = 1;
-  achar1 = 1;
-  shift_left_var();
-
-  if(achar0 !=2)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  achar0 = 1;
-  achar1 = 1;
-  achar2 = 1;
-  for(i=0; i<7; i++) {
-    shift_left_var();
-    achar2 <<= 1;
-
-    if(achar2 != achar0)
-      failures++;
-  }
-  printf("failures: %d\n",failures);
-
-  achar1 = 4;
-  achar0 = 0xf0;
-  shift_right_var();
-  if(((unsigned char)achar0) != 0xff)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 1;
-  aint1 = 1;
-  achar1 = 1;
-
-  for(i=0; i<15; i++) {
-    shift_int_left_var();
-    aint1 <<= 1;
-    if(aint0 != aint1)
-      failures++;
-  }
-  printf("failures: %d\n",failures);
-
-  aint0 = 0x4000;
-  aint1 = 0x4000;
-
-  for(i=0; i<15; i++) {
-    shift_int_right_var();
-    aint1 >>= 1;
-    if(aint0 != aint1)
-      failures++;
-  }
-  printf("failures: %d\n",failures);
-
-  aint0 = -0x4000;
-  aint1 = -0x4000;
-
-  for(i=0; i<15; i++) {
-    shift_int_right_var();
-    aint1 >>= 1;
-    if(aint0 != aint1)
-      failures++;
-  }
-  printf("failures: %d\n",failures);
-
-  aint1 = 0xf000;
-  achar1 = 10;
-  shift_int_right_var2();
-
-  if(((unsigned short)aint0) != 0xfffc)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint1 = aint0;
-  shift_int_left_var2();
-
-  if(((unsigned short)aint0) != 0xf000)
-    failures++;
-
-  success=failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/rotate7.c b/test/val/rotate7.c
deleted file mode 100644 (file)
index 2b30b86..0000000
+++ /dev/null
@@ -1,413 +0,0 @@
-/*
-  !!DESCRIPTION!! Shift ints left and right
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-#ifdef SIZEOF_INT_16BIT
-#if defined(__LINUX__) || defined(LINUX)
-signed short aint0 = 0;
-signed short aint1 = 0;
-
-#else
-signed int aint0 = 0;
-signed int aint1 = 0;
-
-#endif
-
-#else
-signed int aint0 = 0;
-signed int aint1 = 0;
-
-#endif
-
-/*
-signed char achar0 = 0;
-signed char achar1 = 0;
-signed char achar2 = 0;
-signed char achar3 = 0;
-*/
-
-void done()
-{
-  dummy++;
-}
-
-void shift_int_left_1(void)
-{
-  aint0 <<= 1;
-}
-
-void shift_int_left_2(void)
-{
-  aint0 <<= 2;
-}
-
-void shift_int_left_3(void)
-{
-  aint0 <<= 3;
-}
-
-void shift_int_left_4(void)
-{
-  aint0 <<= 4;
-}
-
-void shift_int_left_5(void)
-{
-  aint0 <<= 5;
-}
-
-void shift_int_left_6(void)
-{
-  aint0 <<= 6;
-}
-
-void shift_int_left_7(void)
-{
-  aint0 <<= 7;
-}
-
-void shift_int_left_8(void)
-{
-  aint0 <<= 8;
-}
-
-void shift_int_left_9(void)
-{
-  aint0 <<= 9;
-}
-
-void shift_int_left_10(void)
-{
-  aint0 <<= 10;
-}
-
-void shift_int_left_11(void)
-{
-  aint0 <<= 11;
-}
-
-void shift_int_left_12(void)
-{
-  aint0 <<= 12;
-}
-
-void shift_int_left_13(void)
-{
-  aint0 <<= 13;
-}
-
-void shift_int_left_14(void)
-{
-  aint0 <<= 14;
-}
-
-void shift_int_left_15(void)
-{
-  aint0 <<= 15;
-}
-
-/*****************************************************/
-void shift_int_right_1(void)
-{
-  aint0 >>= 1;
-}
-
-void shift_int_right_2(void)
-{
-  aint0 >>= 2;
-}
-
-void shift_int_right_3(void)
-{
-  aint0 >>= 3;
-}
-
-void shift_int_right_4(void)
-{
-  aint0 >>= 4;
-}
-
-void shift_int_right_5(void)
-{
-  aint0 >>= 5;
-}
-
-void shift_int_right_6(void)
-{
-  aint0 >>= 6;
-}
-
-void shift_int_right_7(void)
-{
-  aint0 >>= 7;
-}
-
-void shift_int_right_8(void)
-{
-  aint0 >>= 8;
-}
-
-void shift_int_right_9(void)
-{
-  aint0 >>= 9;
-}
-
-void shift_int_right_10(void)
-{
-  aint0 >>= 10;
-}
-
-void shift_int_right_11(void)
-{
-  aint0 >>= 11;
-}
-
-void shift_int_right_12(void)
-{
-  aint0 >>= 12;
-}
-
-void shift_int_right_13(void)
-{
-  aint0 >>= 13;
-}
-
-void shift_int_right_14(void)
-{
-  aint0 >>= 14;
-}
-
-void shift_int_right_15(void)
-{
-  aint0 >>= 15;
-}
-
-/*****************************************************/
-int
-main (void)
-{
-  aint0 = 0xabcd;
-
-  shift_int_left_1();
-  if(aint0 != 0x579a)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_left_2();
-  if((unsigned short)aint0 != 0xaf34)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_left_3();
-  if(aint0 != 0x5e68)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_left_4();
-  if((unsigned short)aint0 != 0xbcd0)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_left_5();
-  if(aint0 != 0x79a0)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_left_6();
-  if((unsigned short)aint0 != 0xf340)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_left_7();
-  if((unsigned short)aint0 != 0xe680)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_left_8();
-  if((unsigned short)aint0 != 0xcd00)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_left_9();
-  if((unsigned short)aint0 != 0x9a00)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_left_10();
-  if(aint0 != 0x3400)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_left_11();
-  if(aint0 != 0x6800)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_left_12();
-  if((unsigned short)aint0 != 0xd000)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_left_13();
-  if((unsigned short)aint0 != 0xa000)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_left_14();
-  if(aint0 != 0x4000)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_left_15();
-  if((unsigned short)aint0 != 0x8000)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  /***********************/
-  aint0 = 0xabcd;
-
-  shift_int_right_1();
-  if((unsigned short)aint0 != 0xd5e6)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_right_2();
-  if((unsigned short)aint0 != 0xeaf3)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_right_3();
-  if((unsigned short)aint0 != 0xf579)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_right_4();
-  if((unsigned short)aint0 != 0xfabc)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_right_5();
-  if((unsigned short)aint0 != 0xfd5e)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_right_6();
-  if((unsigned short)aint0 != 0xfeaf)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_right_7();
-  if((unsigned short)aint0 != 0xff57)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_right_8();
-  if((unsigned short)aint0 != 0xffab)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_right_9();
-  if((unsigned short)aint0 != 0xffd5)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_right_10();
-  if((unsigned short)aint0 != 0xffea)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_right_11();
-  if((unsigned short)aint0 != 0xfff5)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_right_12();
-  if((unsigned short)aint0 != 0xfffa)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_right_13();
-  if((unsigned short)aint0 != 0xfffd)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_right_14();
-  if((unsigned short)aint0 != 0xfffe)
-    failures++;
-  printf("failures: %d\n",failures);
-
-  aint0 = 0xabcd;
-
-  shift_int_right_15();
-  if(aint0 != -1)
-    failures++;
-
-  success=failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/static-1.c b/test/val/static-1.c
deleted file mode 100644 (file)
index ae2ba62..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-  !!DESCRIPTION!! global non-static and static conflicts
-  !!ORIGIN!!      cc65 regression tests
-  !!LICENCE!!     Public Domain
-  !!AUTHOR!!      Greg King
-*/
-
-/*
-  see: https://github.com/cc65/cc65/issues/191
-*/
-
-#pragma warn(error, on)
-
-static int n = 0;
-extern int n;           /* should not give an error */
-
-int main(void)
-{
-    return n;
-}
diff --git a/test/val/strtol-test.c b/test/val/strtol-test.c
deleted file mode 100644 (file)
index 76daef7..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
-  !!DESCRIPTION!! A small test for atoi/strtol. Assumes twos complement
-  !!ORIGIN!!
-  !!LICENCE!!
-  !!AUTHOR!!
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include <errno.h>
-
-#define ERROR   0
-#define OK      1
-
-static unsigned int Failures = 0;
-
-static void IncStr (char* Buf)
-/* Increment a number represented as a string by one. The string MUST not
- * start with a '9', we cannot handle overflow in this case.
- */
-{
-    int Len = strlen (Buf);
-
-    while (--Len >= 0) {
-        switch (Buf[Len]) {
-            case '9':
-                Buf[Len] = '0';
-                break;
-
-            default:
-                ++(Buf[Len]);
-                return;
-        }
-    }
-}
-
-static void CheckStrToL (const char* Str, int Base, long Val, unsigned char Ok)
-{
-    char* EndPtr;
-    long Res = strtol (Str, &EndPtr, Base);
-    if (Ok) {
-        if (Res != Val) {
-            printf ("strtol error in \"%s\":\n"
-                    "  result = %ld, should be %ld, chars = %d\n",
-                    Str, Res, Val, EndPtr - Str);
-            ++Failures;
-        }
-    } else {
-        if (errno != ERANGE) {
-            printf ("strtol error in \"%s\":\n"
-                    "  should not convert, but errno = %d\n",
-                    Str, errno);
-            ++Failures;
-        }
-        if (Res != Val) {
-            printf ("strtol error in \"%s\":\n"
-                    "  result = %ld, should be %ld, chars = %d\n",
-                    Str, Res, Val, EndPtr - Str);
-            ++Failures;
-        }
-    }
-}
-
-int main (void)
-{
-    char Buf[80];
-
-    /* Prefixed allowed if base = 0 */
-    CheckStrToL ("\t 0x10G ", 0, 16L, OK);
-    CheckStrToL ("\t 0X10G ", 0, 16L, OK);
-    CheckStrToL (" \t0377\t", 0, 255L, OK);
-    CheckStrToL (" 377", 0, 377L, OK);
-
-    CheckStrToL ("\t -0x10G ", 0, -16L, OK);
-    CheckStrToL ("\t -0X10G ", 0, -16L, OK);
-    CheckStrToL (" \t-0377\t", 0, -255L, OK);
-    CheckStrToL (" -377", 0, -377L, OK);
-
-    /* No prefixes if base = 10 */
-    CheckStrToL ("\t 1234 ", 10, 1234L, OK);
-    CheckStrToL ("\t -1234 ", 10, -1234L, OK);
-    CheckStrToL ("\t -0x10G ", 10, 0L, OK);
-    CheckStrToL ("\t -0X10G ", 10, 0L, OK);
-    CheckStrToL (" \t-0377\t", 10, -377L, OK);
-    CheckStrToL (" 0377", 10, 377L, OK);
-
-    /* 0x prefix is allowed if base = 16 */
-    CheckStrToL ("\t 0x1234 ", 16, 0x1234L, OK);
-    CheckStrToL ("\t -0x1234 ", 16, -0x1234L, OK);
-    CheckStrToL ("\t -010G ", 16, -16L, OK);
-    CheckStrToL ("\t 10G ", 16, 16L, OK);
-
-    /* Check LONG_MIN and LONG_MAX */
-    sprintf (Buf, "%ld", LONG_MIN);
-    CheckStrToL (Buf, 0, LONG_MIN, OK);
-    sprintf (Buf, "%ld", LONG_MAX);
-    CheckStrToL (Buf, 0, LONG_MAX, OK);
-
-    /* Check value one smaller */
-    sprintf (Buf+1, "%ld", LONG_MIN);
-    Buf[1] = '0';       /* Overwrite '-' */
-    IncStr (Buf+1);
-    if (Buf[1] == '0') {
-        Buf[1] = '-';
-        Buf[0] = ' ';
-    } else {
-        Buf[0] = '-';
-    }
-    CheckStrToL (Buf, 0, LONG_MIN, ERROR);
-
-    /* Check value one larger */
-    sprintf (Buf+1, "%ld", LONG_MAX);
-    Buf[0] = '0';
-    IncStr (Buf);
-    if (Buf[0] == '0') {
-        Buf[0] = ' ';
-    }
-    CheckStrToL (Buf, 0, LONG_MAX, ERROR);
-
-    /* Check numbers that are much too large or small */
-    CheckStrToL ("-999999999999999999999999999999999999999999999999999999999", 0, LONG_MIN, ERROR);
-    CheckStrToL ("+999999999999999999999999999999999999999999999999999999999", 0, LONG_MAX, ERROR);
-    CheckStrToL (" 999999999999999999999999999999999999999999999999999999999", 0, LONG_MAX, ERROR);
-
-    /* Check a few other bases */
-    CheckStrToL ("aBcD", 36, 481261L, OK);
-    CheckStrToL ("zyaB", 35, 0L, ERROR);
-    CheckStrToL ("zyaB", 36, 1677395L, ERROR);
-
-    printf ("Failures: %u\n", Failures);
-
-    return Failures;
-}
diff --git a/test/val/strtoul-test.c b/test/val/strtoul-test.c
deleted file mode 100644 (file)
index 803fd45..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
-  !!DESCRIPTION!! A small test for strtuol. Assumes twos complement
-  !!ORIGIN!!
-  !!LICENCE!!
-  !!AUTHOR!!
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include <errno.h>
-
-#define ERROR   0
-#define OK      1
-
-static unsigned int Failures = 0;
-
-static void IncStr (char* Buf)
-/* Increment a number represented as a string by one. The string MUST not
- * start with a '9', we cannot handle overflow in this case.
- */
-{
-    int Len = strlen (Buf);
-
-    while (--Len >= 0) {
-        switch (Buf[Len]) {
-            case '9':
-                Buf[Len] = '0';
-                break;
-
-            default:
-                ++(Buf[Len]);
-                return;
-        }
-    }
-}
-
-static void CheckStrToUL (const char* Str, int Base, unsigned long Val, unsigned char Ok)
-{
-    char* EndPtr;
-    unsigned long Res = strtoul (Str, &EndPtr, Base);
-    if (Ok) {
-        if (Res != Val) {
-            printf ("strtol error in \"%s\":\n"
-                    "  result = %lu, should be %lu, chars = %d\n",
-                    Str, Res, Val, EndPtr - Str);
-            ++Failures;
-        }
-    } else {
-        if (errno != ERANGE) {
-            printf ("strtol error in \"%s\":\n"
-                    "  should not convert, but errno = %d\n",
-                    Str, errno);
-            ++Failures;
-        }
-        if (Res != Val) {
-            printf ("strtol error in \"%s\":\n"
-                    "  result = %lu, should be %lu, chars = %d\n",
-                    Str, Res, Val, EndPtr - Str);
-            ++Failures;
-        }
-    }
-}
-
-int main (void)
-{
-    char Buf[80];
-
-    /* Prefixed allowed if base = 0 */
-    CheckStrToUL ("\t 0x10G ", 0, 16UL, OK);
-    CheckStrToUL ("\t 0X10G ", 0, 16UL, OK);
-    CheckStrToUL (" \t0377\t", 0, 255UL, OK);
-    CheckStrToUL (" 377", 0, 377UL, OK);
-
-    CheckStrToUL ("\t -0x10G ", 0, (unsigned long) -16L, OK);
-    CheckStrToUL ("\t -0X10G ", 0, (unsigned long) -16L, OK);
-    CheckStrToUL (" \t-0377\t", 0, (unsigned long) -255L, OK);
-    CheckStrToUL (" -377", 0, (unsigned long) -377L, OK);
-
-    /* No prefixes if base = 10 */
-    CheckStrToUL ("\t 1234 ", 10, 1234UL, OK);
-    CheckStrToUL ("\t -1234 ", 10, (unsigned long) -1234L, OK);
-    CheckStrToUL ("\t -0x10G ", 10, 0UL, OK);
-    CheckStrToUL ("\t -0X10G ", 10, 0UL, OK);
-    CheckStrToUL (" \t-0377\t", 10, (unsigned long) -377L, OK);
-    CheckStrToUL (" 0377", 10, 377UL, OK);
-
-    /* 0x prefix is allowed if base = 16 */
-    CheckStrToUL ("\t 0x1234 ", 16, 0x1234UL, OK);
-    CheckStrToUL ("\t -0x1234 ", 16, (unsigned long) -0x1234L, OK);
-    CheckStrToUL ("\t -010G ", 16, (unsigned long) -16L, OK);
-    CheckStrToUL ("\t 10G ", 16, 16UL, OK);
-
-    /* Check ULONG_MAX */
-    sprintf (Buf, "%lu", ULONG_MAX);
-    CheckStrToUL (Buf, 0, ULONG_MAX, OK);
-
-    /* Check value one larger */
-    sprintf (Buf+1, "%lu", ULONG_MAX);
-    Buf[0] = '0';
-    IncStr (Buf);
-    if (Buf[0] == '0') {
-        Buf[0] = ' ';
-    }
-    CheckStrToUL (Buf, 0, ULONG_MAX, ERROR);
-
-    /* Check numbers that are much too large or small */
-    CheckStrToUL ("-999999999999999999999999999999999999999999999999999999999", 0, ULONG_MAX, ERROR);
-    CheckStrToUL ("+999999999999999999999999999999999999999999999999999999999", 0, ULONG_MAX, ERROR);
-    CheckStrToUL (" 999999999999999999999999999999999999999999999999999999999", 0, ULONG_MAX, ERROR);
-
-    /* Check a few other bases */
-    CheckStrToUL ("aBcD", 36, 481261UL, OK);
-    CheckStrToUL ("zyaB", 35, 0UL, ERROR);
-    CheckStrToUL ("zyaB", 36, 1677395UL, ERROR);
-
-    printf ("Failures: %u\n", Failures);
-
-    return Failures;
-}
diff --git a/test/val/struct1.c b/test/val/struct1.c
deleted file mode 100644 (file)
index 71dbf79..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success = 0;
-unsigned char failures = 0;
-unsigned char dummy = 0;
-
-#if SUPPORT_BIT_TYPES
-
-bit bit0 = 0;
-bit bit1 = 0;
-bit bit2 = 0;
-bit bit3 = 0;
-bit bit4 = 0;
-bit bit5 = 0;
-bit bit6 = 0;
-bit bit7 = 0;
-bit bit8 = 0;
-bit bit9 = 0;
-bit bit10 = 0;
-bit bit11 = 0;
-
-#endif
-
-unsigned int aint0 = 0;
-unsigned int aint1 = 0;
-unsigned char achar0 = 0;
-unsigned char achar1 = 0;
-unsigned char *acharP = 0;
-
-struct chars
-  {
-    unsigned char c0, c1;
-    unsigned int  i0, i1;
-  };
-
-struct chars struct1;
-
-void
-done ()
-{
-  dummy++;
-}
-
-void
-struct_test (void)
-{
-  if (struct1.c0 || struct1.c1)
-    failures++;
-
-  struct1.c0++;
-
-  if (struct1.c0 != 1)
-    failures++;
-}
-
-void
-ptr_to_struct (struct chars *p)
-{
-  if (p->c1)
-    failures++;
-
-  p->c1++;
-
-  if (p->c1 != 1)
-    failures++;
-}
-
-void add_chars(void)
-{
-  achar0 = struct1.c0 + struct1.c1;
-
-  if(achar0 != 1)
-    failures++;
-}
-
-int
-main (void)
-{
-  struct1.c0 = 0;
-  struct1.c1 = 0;
-  struct_test ();
-  ptr_to_struct (&struct1);
-
-  struct1.c0 = 0;
-  struct1.c1 = 1;
-  add_chars();
-
-  success = failures;
-  done ();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/sub1.c b/test/val/sub1.c
deleted file mode 100644 (file)
index f1ae939..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
-  !!DESCRIPTION!! Substraction Test
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-#if SUPPORT_BIT_TYPES
-
-bit bit0 = 0;
-bit bit1 = 0;
-bit bit2 = 0;
-bit bit3 = 0;
-bit bit4 = 0;
-bit bit5 = 0;
-bit bit6 = 0;
-bit bit7 = 0;
-bit bit8 = 0;
-bit bit9 = 0;
-bit bit10 = 0;
-bit bit11 = 0;
-
-#endif
-
-#ifdef SIZEOF_INT_16BIT
-#if defined(__LINUX__) || defined(LINUX)
-unsigned short aint0 = 0;
-unsigned short aint1 = 0;
-#else
-unsigned int aint0 = 0;
-unsigned int aint1 = 0;
-#endif
-
-#else
-unsigned int aint0 = 0;
-unsigned int aint1 = 0;
-#endif
-unsigned char achar0 = 0;
-unsigned char achar1 = 0;
-unsigned char achar2 = 0;
-unsigned char achar3 = 0;
-unsigned char *acharP = 0;
-
-void done()
-{
-  dummy++;
-}
-
-void sub_lit_from_uchar(void)
-{
-  achar0 = achar0 - 5;
-
-  if(achar0 != 0xfb)
-    failures++;
-
-  achar0 -= 10;
-
-  if(achar0 != 0xf1)
-    failures++;
-
-  achar0 = achar0 -1;  /* Should be a decrement */
-  if(achar0 != 0xf0)
-    failures++;
-
-  for(achar1 = 0; achar1 < 100; achar1++)
-    achar0 -= 2;
-
-  if(achar0 != 40)
-    failures++;
-}
-
-/* achar0 = 1
- achar1 = 100
-*/
-
-void sub_uchar2uchar(void)
-{
-  achar1 = achar1 - achar0;
-
-  if(achar1 != 99)
-    failures++;
-
-  for(achar2 = 0; achar2<7; achar2++)
-    achar1 -= achar0;
-
-  if(achar1 != 92)
-    failures++;
-}
-
-/* assumes
-  achar0 = 10
-  achar1 = 32
-  achar2, achar3 can be anything.
-*/
-void sub_uchar2uchar2(void)
-{
-  achar0--;
-  achar0 = achar0 - 1;
-  achar0 = achar0 - 2;
-  achar0 = achar0 - 3;
-  if(achar0 != 3)
-    failures++;
-
-  achar1 -= achar0;
-  if(achar1 != 29)
-    failures++;
-
-  achar2 = achar1 - achar0;
-  if(achar2 != 26)
-    failures++;
-
-  achar3 = achar2 - achar1 - achar0;
-  if(achar3 != 0xfa)
-    failures++;
-}
-
-/* sub_bits
- all bit variables are 0 upon entry.
-*/
-#if SUPPORT_BIT_TYPES
-void sub_bits(void)
-{
-  bit1 = bit0;
-
-  bit0 = 1;
-
-  if(bit1 != 0)
-    failures++;
-
-  bit1 = bit0-bit1;   /* 1 - 0 => 1 */
-  if(bit1 != 1)
-    failures++;
-
-#if SUPPORT_BIT_ARITHMETIC
-  bit2 = bit1-bit0;   /* 1 - 1 => 0 */
-  if(bit2)
-    failures++;
-
-  bit7 = bit4-bit5;
-  bit6 = bit4+bit5;
-  bit3 = bit4-bit5-bit6-bit7-bit0; /* 0-0-0-0-1 => 1 */
-  if(!bit3)
-    failures++;
-#endif
-}
-
-/* sub_bit2uchar(void) - assumes bit0 = 1, achar0 = 7  */
-
-void sub_bit2uchar(void)
-{
-  achar0 -= bit0;
-
-  if(achar0 != 6)
-    failures++;
-
-  if(achar0 == bit0)
-    failures++;
-}
-
-void sub_bit2uint(void)
-{
-  if(aint0 != bit11)
-    failures++;
-
-  aint0 -= bit0;
-  if(aint0!=0xffff)
-    failures++;
-}
-#endif
-
-void sub_ucharFromLit(void)
-{
-  achar0 = 2 - achar0;
-
-  if(achar0 != 2)
-  {
-    printf("%x != %x\n",0x02,achar0);
-    failures++;
-  }
-
-  aint0 = 2 - aint0;
-
-  if(aint0 != 2)
-  {
-    printf("%x != %x\n",0x02,aint0);
-    failures++;
-  }
-
-  aint0--;
-
-  if(aint0 != 1)
-  {
-    printf("%x != %x\n",0x01,aint0);
-    failures++;
-  }
-
-  aint0 = 0x100 - aint0;
-
-  if(aint0 != 0xff)
-  {
-    printf("%x != %x\n",0xff,aint0);
-    failures++;
-  }
-
-  aint0 = 0xff00 - aint0;
-
-  if(aint0 != 0xfe01)
-  {
-    printf("%x != %x\n",0xfe01,aint0);
-    failures++;
-  }
-
-  aint0 = 0x0e01 - aint0;
-
-  if(aint0 != 0x1000)
-  {
-    printf("%x != %x\n",0x1000,aint0);
-    failures++;
-  }
-
-  aint0 = 0x10ff - aint0;
-
-  if(aint0 != 0xff)
-  {
-    printf("%x != %x\n",0xff,aint0);
-    failures++;
-  }
-}
-
-int main(void)
-{
-  sub_lit_from_uchar();
-  printf("failures: %d\n",failures);
-
-  achar0=1;
-  achar1=100;
-  sub_uchar2uchar();
-  printf("failures: %d\n",failures);
-
-  achar0 = 10;
-  achar1 = 32;
-  sub_uchar2uchar2();
-  printf("failures: %d\n",failures);
-
-#if SUPPORT_BIT_TYPES
-  sub_bits();
-
-  achar0 = 7;
-  bit0 = 1;
-  sub_bit2uchar();
-  printf("failures: %d\n",failures);
-  sub_bit2uint();
-  printf("failures: %d\n",failures);
-#endif
-
-  aint0 = 0;
-  achar0 = 0;
-  sub_ucharFromLit();
-
-  success = failures;
-  done();
-
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/sub2.c b/test/val/sub2.c
deleted file mode 100644 (file)
index 835e657..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
-  !!DESCRIPTION!! Substraction Test
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-#if SUPPORT_BIT_TYPES
-
-bit bit0 = 0;
-bit bit1 = 0;
-bit bit2 = 0;
-bit bit3 = 0;
-bit bit4 = 0;
-bit bit5 = 0;
-bit bit6 = 0;
-bit bit7 = 0;
-bit bit8 = 0;
-bit bit9 = 0;
-bit bit10 = 0;
-bit bit11 = 0;
-
-#endif
-
-int int0 = 0;
-int int1 = 0;
-
-signed char char0 = 0;
-signed char char1 = 0;
-signed char char2 = 0;
-
-void done()
-{
-  dummy++;
-}
-
-void sub_int1(void)
-{
-  if(int0 != 5)
-    failures++;
-
-  if(int1 != 4)
-    failures++;
-
-  int0 = int0 - int1;
-
-  if(int0 != 1)
-    failures++;
-
-  int0 = 4 - int0;
-  if(int0 != 3)
-    failures++;
-
-  int0 = int0 - int1;
-
-  if(int0 != -1)
-    failures++;
-
-  int0 = int0 - 0xff;
-
-  if(int0 != -0x100)
-    failures++;
-
-  int0 = 0xff - int0;
-
-  if(int0 != 0x1ff)
-    failures++;
-}
-
-void sub_char_int(void)
-{
-  int0 = int0 - char0;
-
-  if(int0 != 3)
-    failures++;
-
-  if(int0 < char0)
-    failures++;
-
-  int0 = int0 - char0;
-
-  if(int0 != 1)
-    failures++;
-
-  if(int0 > char0)
-    failures++;
-
-  int0 = int0 - char0;
-  if(int0 != -1)
-    failures++;
-
-  if(int0>0)
-    failures++;
-}
-
-void assign_char2int(void)
-{
-  int0 = char0;
-  if(int0 != 0x7f)
-    failures++;
-
- /* printf("%2x %2x %2x %d\n",0x7f,int0,char0,failures); */
-
-  int1 = char1;
-  if(int1 != -5)
-    failures++;
-
- /* printf("%2x,%d %2x,%d %2x,%d %d\n",-5,-5,(int)int1,(int)int1,(int)char1,(int)char1,failures); */
-}
-
-void sub_compound_char(void)
-{
-  char0 = char1 - 5;
-  if(char0 != 4)
-    failures++;
-
-  if((char1 - char0 - 5) != 0)
-    failures++;
-}
-
-void sub_compound_int(void)
-{
-  int0 = int1 - 5;
-  if(int0 != 4)
-    failures++;
-
-  if((int1 - int0 - 5) != 0)
-    failures++;
-}
-
-int main(void)
-{
-  int0 = 5;
-  int1 = 4;
-
-  sub_int1();
-  printf("failures: %d\n",failures);
-
-  int0 = 5;
-  int1 = 4;
-  char0 = 2;
-
-  sub_char_int();
-  printf("failures: %d\n",failures);
-
-  char0 = 0x7f;
-  char1 = -5;
-  assign_char2int();
-  printf("failures: %d\n",failures);
-
-  char1 = 9;
-  sub_compound_char();
-  printf("failures: %d\n",failures);
-
-  int1 = 9;
-  sub_compound_int();
-
-  success = failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/switch1.c b/test/val/switch1.c
deleted file mode 100644 (file)
index 8d31b4e..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-unsigned int aint0 = 0;
-unsigned int aint1 = 0;
-unsigned char achar0 = 0;
-unsigned char achar1 = 0;
-
-void done()
-{
-  dummy++;
-}
-
-void switch1(void)
-{
-  switch(achar0) {
-  case 0:
-    achar0 = 9;
-    break;
-  case 1:
-    achar0 = 18;
-    break;
-
-  default:
-    achar0 = 0;
-  }
-}
-
-void switch2(void)
-{
-  switch(achar1) {
-  case 0:    achar0 = 9;    break;
-  case 1:    achar0 = 8;    break;
-  case 2:    achar0 = 7;    break;
-  case 3:    achar0 = 6;    break;
-  case 4:    achar0 = 5;    break;
-  case 5:    achar0 = 4;    break;
-  case 6:    achar0 = 3;    break;
-  case 7:    achar0 = 2;    break;
-  case 8:    achar0 = 1;    break;
-  case 9:    achar0 = 0;    break;
-  case 10:    achar0 = 9;    break;
-  case 11:    achar0 = 8;    break;
-  case 12:    achar0 = 7;    break;
-  default:    achar0 = 0xff;    break;
-  }
-}
-
-int main(void)
-{
-  achar0 = 0;
-  switch1();
-  if(achar0 != 9)
-    failures++;
-
-  switch1();
-  if(achar0 != 0)
-    failures++;
-
-  achar0++;
-
-  switch1();
-  if(achar0 != 18)
-    failures++;
-
-  for(achar1=0; achar1<10;achar1++){
-    switch2();
-    if(achar0 != (9-achar1))
-      failures++;
-
-  }
-
-  success=failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/while.c b/test/val/while.c
deleted file mode 100644 (file)
index cf21470..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success = 0;
-unsigned char failures = 0;
-unsigned char dummy = 0;
-
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
-unsigned int aint0 = 0;
-unsigned int aint1 = 0;
-unsigned char achar0 = 0;
-unsigned char achar1 = 0;
-
-void
-done ()
-{
-  dummy++;
-}
-
-void
-while1 (void)
-{
-  unsigned char i = 10;
-
-  do
-    {
-      achar0++;
-    }
-  while (--i);
-
-  if (achar0 != 10)
-    failures++;
-}
-
-int
-main (void)
-{
-  while1 ();
-
-  success = failures;
-  done ();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/test/val/xor.c b/test/val/xor.c
deleted file mode 100644 (file)
index 2a34602..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-  !!DESCRIPTION!!
-  !!ORIGIN!!      SDCC regression tests
-  !!LICENCE!!     GPL, read COPYING.GPL
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
-
-unsigned char achar0 = 0;
-unsigned char achar1 = 0;
-unsigned char achar2 = 0;
-
-void done()
-{
-  dummy++;
-}
-
-void xor_chars_0_1(void)
-{
-  achar2 = achar0 ^ achar1;
-
-  achar0 = achar0 ^ 0x1;
-
-  achar1 = achar0 ^ achar1 ^ 4;
-}
-
-void xor_if(void)
-{
-  if(achar0 ^ achar1) 
-    failures++;
-
-  achar0 ^= 0xff;
-
-  if( !(achar0 ^ achar1) ) 
-    failures++;
-}
-
-int  main(void)
-{
-  xor_chars_0_1();
-
-  if(achar2)
-    failures++;
-
-  if(achar0 != 1)
-    failures++;
-
-  if(achar1 != 5)
-    failures++;
-
-  achar0 = achar1;
-  xor_if();
-
-  success = failures;
-  done();
-  printf("failures: %d\n",failures);
-
-  return failures;
-}
diff --git a/testcode/assembler/.gitignore b/testcode/assembler/.gitignore
deleted file mode 100644 (file)
index de179f4..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-chkillegal.bin
-chklegal.bin
-chkall.bin
-legal.o
-illegal.o
-all.o
diff --git a/testcode/assembler/Makefile b/testcode/assembler/Makefile
deleted file mode 100644 (file)
index a9257ce..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-
-all: chklegal.bin chkillegal.bin chkall.bin
-       @#
-
-.PHONY: chklegal.bin chkillegal.bin chkall.bin
-
-chklegal.bin: legal.s
-       ../../bin/cl65 --target none --cpu 6502X -o chklegal.bin legal.s
-       diff -q legal.ref chklegal.bin || hex chklegal.bin
-
-chkillegal.bin: illegal.s
-       ../../bin/cl65 --target none --cpu 6502X -o chkillegal.bin illegal.s
-       diff -q illegal.ref chkillegal.bin || hex chkillegal.bin
-
-chkall.bin: all.s
-       ../../bin/cl65 --target none --cpu 6502X -o chkall.bin all.s
-
-ref: legal.s illegal.s
-       ../../bin/cl65 --target none --cpu 6502X -o legal.ref legal.s
-       ../../bin/cl65 --target none --cpu 6502X -o illegal.ref illegal.s
-
-clean:
-       rm -f legal.o chklegal.bin
-       rm -f illegal.o chkillegal.bin
-       rm -f all.o chkall.bin
diff --git a/testcode/assembler/all.s b/testcode/assembler/all.s
deleted file mode 100644 (file)
index 2e8f55e..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-        .setcpu         "6502X"
-
-; all legal and illegal opcodes as they would be disassembled by da65
-; note that this would not assemble into the exact same binary
-
-            brk                 ; 00
-            ora ($12,x)         ; 01 12
-            jam                 ; 02
-            slo ($12,x)         ; 03 12
-            nop $12             ; 04 12
-            ora $12             ; 05 12
-            asl $12             ; 06 12
-            slo $12             ; 07 12
-            php                 ; 08
-            ora #$12            ; 09 12
-            asl a               ; 0a
-            anc #$12            ; 0b 12
-            nop $1234           ; 0c 34 12
-            ora $1234           ; 0d 34 12
-            asl $1234           ; 0e 34 12
-            slo $1234           ; 0f 34 12
-            bpl *+$14           ; 10 12
-            ora ($12),y         ; 11 12
-            jam                 ; 12
-            slo ($12),y         ; 13 12
-            nop $12,x           ; 14 12
-            ora $12,x           ; 15 12
-            asl $12,x           ; 16 12
-            slo $12,x           ; 17 12
-            clc                 ; 18
-            ora $1234,y         ; 19 34 12
-            nop                 ; 1a
-            slo $1234,y         ; 1b 34 12
-            nop $1234,x         ; 1c 34 12
-            ora $1234,x         ; 1d 34 12
-            asl $1234,x         ; 1e 34 12
-            slo $1234,x         ; 1f 34 12
-            jsr $1234           ; 20 34 12
-            and ($12,x)         ; 21 12
-            jam                 ; 22
-            rla ($12,x)         ; 23 12
-            bit $12             ; 24 12
-            and $12             ; 25 12
-            rol $12             ; 26 12
-            rla $12             ; 27 12
-            plp                 ; 28
-            and #$12            ; 29 12
-            rol a               ; 2a
-            anc #$12            ; 2b 12
-            bit $1234           ; 2c 34 12
-            and $1234           ; 2d 34 12
-            rol $1234           ; 2e 34 12
-            rla $1234           ; 2f 34 12
-            bmi *+$14           ; 30 12
-            and ($12),y         ; 31 12
-            jam                 ; 32
-            rla ($12),y         ; 33 12
-            nop $12,x           ; 34 12
-            and $12,x           ; 35 12
-            rol $12,x           ; 36 12
-            rla $12,x           ; 37 12
-            sec                 ; 38
-            and $1234,y         ; 39 34 12
-            nop                 ; 3a
-            rla $1234,y         ; 3b 34 12
-            nop $1234,x         ; 3c 34 12
-            and $1234,x         ; 3d 34 12
-            rol $1234,x         ; 3e 34 12
-            rla $1234,x         ; 3f 34 12
-            rti                 ; 40
-            eor ($12,x)         ; 41 12
-            jam                 ; 42
-            sre ($12,x)         ; 43 12
-            nop $12             ; 44 12
-            eor $12             ; 45 12
-            lsr $12             ; 46 12
-            sre $12             ; 47 12
-            pha                 ; 48
-            eor #$12            ; 49 12
-            lsr a               ; 4a
-            alr #$12            ; 4b 12
-            jmp $1234           ; 4c 34 12
-            eor $1234           ; 4d 34 12
-            lsr $1234           ; 4e 34 12
-            sre $1234           ; 4f 34 12
-            bvc *+$14           ; 50 12
-            eor ($12),y         ; 51 12
-            jam                 ; 52
-            sre ($12),y         ; 53 12
-            nop $12,x           ; 54 12
-            eor $12,x           ; 55 12
-            lsr $12,x           ; 56 12
-            sre $12,x           ; 57 12
-            cli                 ; 58
-            eor $1234,y         ; 59 34 12
-            nop                 ; 5a
-            sre $1234,y         ; 5b 34 12
-            nop $1234,x         ; 5c 34 12
-            eor $1234,x         ; 5d 34 12
-            lsr $1234,x         ; 5e 34 12
-            sre $1234,x         ; 5f 34 12
-            rts                 ; 60
-            adc ($12,x)         ; 61 12
-            jam                 ; 62
-            rra ($12,x)         ; 63 12
-            nop $12             ; 64 12
-            adc $12             ; 65 12
-            ror $12             ; 66 12
-            rra $12             ; 67 12
-            pla                 ; 68
-            adc #$12            ; 69 12
-            ror a               ; 6a
-            arr #$12            ; 6b 12
-            jmp ($1234)         ; 6c 34 12
-            adc $1234           ; 6d 34 12
-            ror $1234           ; 6e 34 12
-            rra $1234           ; 6f 34 12
-            bvs *+$14           ; 70 12
-            adc ($12),y         ; 71 12
-            jam                 ; 72
-            rra ($12),y         ; 73 12
-            nop $12,x           ; 74 12
-            adc $12,x           ; 75 12
-            ror $12,x           ; 76 12
-            rra $12,x           ; 77 12
-            sei                 ; 78
-            adc $1234,y         ; 79 34 12
-            nop                 ; 7a
-            rra $1234,y         ; 7b 34 12
-            nop $1234,x         ; 7c 34 12
-            adc $1234,x         ; 7d 34 12
-            ror $1234,x         ; 7e 34 12
-            rra $1234,x         ; 7f 34 12
-            nop #$12            ; 80 12
-            sta ($12,x)         ; 81 12
-            nop #$12            ; 82 12
-            sax ($12,x)         ; 83 12
-            sty $12             ; 84 12
-            sta $12             ; 85 12
-            stx $12             ; 86 12
-            sax $12             ; 87 12
-            dey                 ; 88
-            nop #$12            ; 89 12
-            txa                 ; 8a
-            ane #$12            ; 8b 12
-            sty $1234           ; 8c 34 12
-            sta $1234           ; 8d 34 12
-            stx $1234           ; 8e 34 12
-            sax $1234           ; 8f 34 12
-            bcc *+$14           ; 90 12
-            sta ($12),y         ; 91 12
-            jam                 ; 92
-            sha ($12),y         ; 93 12
-            sty $12,x           ; 94 12
-            sta $12,x           ; 95 12
-            stx $12,y           ; 96 12
-            sax $12,y           ; 97 12
-            tya                 ; 98
-            sta $1234,y         ; 99 34 12
-            txs                 ; 9a
-            tas $1234,y         ; 9b 34 12
-            shy $1234,x         ; 9c 34 12
-            sta $1234,x         ; 9d 34 12
-            shx $1234,y         ; 9e 34 12
-            sha $1234,y         ; 9f 34 12
-            ldy #$12            ; a0 12
-            lda ($12,x)         ; a1 12
-            ldx #$12            ; a2 12
-            lax ($12,x)         ; a3 12
-            ldy $12             ; a4 12
-            lda $12             ; a5 12
-            ldx $12             ; a6 12
-            lax $12             ; a7 12
-            tay                 ; a8
-            lda #$12            ; a9 12
-            tax                 ; aa
-            lax #$12            ; ab 12
-            ldy $1234           ; ac 34 12
-            lda $1234           ; ad 34 12
-            ldx $1234           ; ae 34 12
-            lax $1234           ; af 34 12
-            bcs *+$14           ; b0 12
-            lda ($12),y         ; b1 12
-            jam                 ; b2
-            lax ($12),y         ; b3 12
-            ldy $12,x           ; b4 12
-            lda $12,x           ; b5 12
-            ldx $12,y           ; b6 12
-            lax $12,y           ; b7 12
-            clv                 ; b8
-            lda $1234,y         ; b9 34 12
-            tsx                 ; ba
-            las $1234,y         ; bb 34 12
-            ldy $1234,x         ; bc 34 12
-            lda $1234,x         ; bd 34 12
-            ldx $1234,y         ; be 34 12
-            lax $1234,y         ; bf 34 12
-            cpy #$12            ; c0 12
-            cmp ($12,x)         ; c1 12
-            nop #$12            ; c2 12
-            dcp ($12,x)         ; c3 12
-            cpy $12             ; c4 12
-            cmp $12             ; c5 12
-            dec $12             ; c6 12
-            dcp $12             ; c7 12
-            iny                 ; c8
-            cmp #$12            ; c9 12
-            dex                 ; ca
-            axs #$12            ; cb 12
-            cpy $1234           ; cc 34 12
-            cmp $1234           ; cd 34 12
-            dec $1234           ; ce 34 12
-            dcp $1234           ; cf 34 12
-            bne *+$14           ; d0 12
-            cmp ($12),y         ; d1 12
-            jam                 ; d2
-            dcp ($12),y         ; d3 12
-            nop $12,x           ; d4 12
-            cmp $12,x           ; d5 12
-            dec $12,x           ; d6 12
-            dcp $12,x           ; d7 12
-            cld                 ; d8
-            cmp $1234,y         ; d9 34 12
-            nop                 ; da
-            dcp $1234,y         ; db 34 12
-            nop $1234,x         ; dc 34 12
-            cmp $1234,x         ; dd 34 12
-            dec $1234,x         ; de 34 12
-            dcp $1234,x         ; df 34 12
-            cpx #$12            ; e0 12
-            sbc ($12,x)         ; e1 12
-            nop #$12            ; e2 12
-            isc ($12,x)         ; e3 12
-            cpx $12             ; e4 12
-            sbc $12             ; e5 12
-            inc $12             ; e6 12
-            isc $12             ; e7 12
-            inx                 ; e8
-            sbc #$12            ; e9 12
-            nop                 ; ea
-            sbc #$12            ; eb 12
-            cpx $1234           ; ec 34 12
-            sbc $1234           ; ed 34 12
-            inc $1234           ; ee 34 12
-            isc $1234           ; ef 34 12
-            beq *+$14           ; f0 12
-            sbc ($12),y         ; f1 12
-            jam                 ; f2
-            isc ($12),y         ; f3 12
-            nop $12,x           ; f4 12
-            sbc $12,x           ; f5 12
-            inc $12,x           ; f6 12
-            isc $12,x           ; f7 12
-            sed                 ; f8
-            sbc $1234,y         ; f9 34 12
-            isc $1234,y         ; fb 34 12
-            nop $1234,x         ; fc 34 12
-            sbc $1234,x         ; fd 34 12
-            inc $1234,x         ; fe 34 12
-            isc $1234,x         ; ff 34 12
diff --git a/testcode/assembler/illegal.ref b/testcode/assembler/illegal.ref
deleted file mode 100644 (file)
index c8dc208..0000000
+++ /dev/null
@@ -1 +0,0 @@
-\a\12\ f4\12\1f4\12\e4\12\ 3\12\17\12\13\12'\12/4\12?4\12;4\12#\127\123\12O4\12_4\12[4\12G\12C\12W\12S\12o4\12\7f4\12{4\12g\12c\12w\12s\12Ï4\12ß4\12Û4\12Ç\12Ã\12×\12Ó\12ï4\12ÿ4\12û4\12ç\12ã\12÷\12ó\12\8f4\12\87\12\83\12\97\12¯4\12¿4\12§\12£\12³\12·\12\v\12k\12K\12Ë\12\f4\12\1c4\12\ 4\12\14\12\80\12\ 2\93\12\9f4\12\9e4\12\9c4\12\9b4\12»4\12«\12\8b\12
\ No newline at end of file
diff --git a/testcode/assembler/illegal.s b/testcode/assembler/illegal.s
deleted file mode 100644 (file)
index b49b887..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-
-        .setcpu         "6502X"
-
-; all so called "illegal" opcodes. duplicated (functionally identical) ones
-; are commented out
-
-; first all totally stable undocs:
-
-        slo $12             ; 07 12
-        slo $1234           ; 0f 34 12
-        slo $1234,x         ; 1f 34 12
-        slo $1234,y         ; 1b 34 12
-        slo ($12,x)         ; 03 12
-        slo $12,x           ; 17 12
-        slo ($12),y         ; 13 12
-
-        rla $12             ; 27 12
-        rla $1234           ; 2f 34 12
-        rla $1234,x         ; 3f 34 12
-        rla $1234,y         ; 3b 34 12
-        rla ($12,x)         ; 23 12
-        rla $12,x           ; 37 12
-        rla ($12),y         ; 33 12
-
-        sre $1234           ; 4f 34 12
-        sre $1234,x         ; 5f 34 12
-        sre $1234,y         ; 5b 34 12
-        sre $12             ; 47 12
-        sre ($12,x)         ; 43 12
-        sre $12,x           ; 57 12
-        sre ($12),y         ; 53 12
-
-        rra $1234           ; 6f 34 12
-        rra $1234,x         ; 7f 34 12
-        rra $1234,y         ; 7b 34 12
-        rra $12             ; 67 12
-        rra ($12,x)         ; 63 12
-        rra $12,x           ; 77 12
-        rra ($12),y         ; 73 12
-
-        dcp $1234           ; cf 34 12
-        dcp $1234,x         ; df 34 12
-        dcp $1234,y         ; db 34 12
-        dcp $12             ; c7 12
-        dcp ($12,x)         ; c3 12
-        dcp $12,x           ; d7 12
-        dcp ($12),y         ; d3 12
-
-        isc $1234           ; ef 34 12
-        isc $1234,x         ; ff 34 12
-        isc $1234,y         ; fb 34 12
-        isc $12             ; e7 12
-        isc ($12,x)         ; e3 12
-        isc $12,x           ; f7 12
-        isc ($12),y         ; f3 12
-
-        sax $1234           ; 8f 34 12
-        sax $12             ; 87 12
-        sax ($12,x)         ; 83 12
-        sax $12,y           ; 97 12
-
-        lax $1234           ; af 34 12
-        lax $1234,y         ; bf 34 12
-        lax $12             ; a7 12
-        lax ($12,x)         ; a3 12
-        lax ($12),y         ; b3 12
-        lax $12,y           ; b7 12
-
-        anc #$12            ; 0b 12
-        ;anc #$12           ; 2b 12
-
-        arr #$12            ; 6b 12
-
-        alr #$12            ; 4b 12
-
-        axs #$12            ; cb 12
-
-        nop $1234           ; 0c 34 12
-        nop $1234,x         ; 1c 34 12
-        nop $12             ; 04 12
-        nop $12,x           ; 14 12
-        nop #$12            ; 80 12
-        ;nop $1234,x        ; 3c 34 12
-        ;nop $1234,x        ; 5c 34 12
-        ;nop $1234,x        ; 7c 34 12
-        ;nop $1234,x        ; dc 34 12
-        ;nop $1234,x        ; fc 34 12
-        ;nop $12            ; 44 12
-        ;nop $12            ; 64 12
-        ;nop #$12           ; 82 12
-        ;nop #$12           ; 89 12
-        ;nop #$12           ; c2 12
-        ;nop #$12           ; e2 12
-        ;nop $12,x          ; 34 12
-        ;nop $12,x          ; 54 12
-        ;nop $12,x          ; 74 12
-        ;nop $12,x          ; d4 12
-        ;nop $12,x          ; f4 12
-        ;nop                ; 1a
-        ;nop                ; 3a
-        ;nop                ; 5a
-        ;nop                ; 7a
-        ;nop                ; da
-
-        jam                 ; 02
-        ;jam                ; 12
-        ;jam                ; 22
-        ;jam                ; 32
-        ;jam                ; 42
-        ;jam                ; 52
-        ;jam                ; 62
-        ;jam                ; 72
-        ;jam                ; 92
-        ;jam                ; b2
-        ;jam                ; d2
-        ;jam                ; f2
-
-        ;sbc #$12           ; eb 12
-
-; the so-called "unstable" ones:
-
-        sha ($12),y         ; 93 12
-        sha $1234,y         ; 9f 34 12
-
-        shx $1234,y         ; 9e 34 12
-        shy $1234,x         ; 9c 34 12
-
-        tas $1234,y         ; 9b 34 12
-        las $1234,y         ; bb 34 12
-
-; the two so-called "highly unstable" ones:
-
-        lax #$12            ; ab 12
-
-        ane #$12            ; 8b 12
diff --git a/testcode/assembler/legal.ref b/testcode/assembler/legal.ref
deleted file mode 100644 (file)
index c38f290..0000000
Binary files a/testcode/assembler/legal.ref and /dev/null differ
diff --git a/testcode/assembler/legal.s b/testcode/assembler/legal.s
deleted file mode 100644 (file)
index 1de43b9..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-
-        .setcpu         "6502"
-
-            adc $1234           ; 6d 34 12
-            adc $1234,x         ; 7d 34 12
-            adc $1234,y         ; 79 34 12
-            adc $12             ; 65 12
-            adc #$12            ; 69 12
-            adc ($12,x)         ; 61 12
-            adc $12,x           ; 75 12
-            adc ($12),y         ; 71 12
-
-            and $12             ; 25 12
-            and #$12            ; 29 12
-            and $1234           ; 2d 34 12
-            and $1234,x         ; 3d 34 12
-            and $1234,y         ; 39 34 12
-            and ($12,x)         ; 21 12
-            and $12,x           ; 35 12
-            and ($12),y         ; 31 12
-
-            asl $12             ; 06 12
-            asl $1234           ; 0e 34 12
-            asl $1234,x         ; 1e 34 12
-            asl $12,x           ; 16 12
-            asl a               ; 0a
-
-            bcc *+$14           ; 90 12
-            bcs *+$14           ; b0 12
-            beq *+$14           ; f0 12
-            bmi *+$14           ; 30 12
-            bne *+$14           ; d0 12
-            bpl *+$14           ; 10 12
-            bvc *+$14           ; 50 12
-            bvs *+$14           ; 70 12
-
-            bit $12             ; 24 12
-            bit $1234           ; 2c 34 12
-
-            brk                 ; 00
-
-            clc                 ; 18
-            cld                 ; d8
-            cli                 ; 58
-            clv                 ; b8
-
-            cmp $1234           ; cd 34 12
-            cmp $1234,x         ; dd 34 12
-            cmp $1234,y         ; d9 34 12
-            cmp $12             ; c5 12
-            cmp #$12            ; c9 12
-            cmp ($12,x)         ; c1 12
-            cmp $12,x           ; d5 12
-            cmp ($12),y         ; d1 12
-
-            cpx $1234           ; ec 34 12
-            cpx #$12            ; e0 12
-            cpx $12             ; e4 12
-
-            cpy $1234           ; cc 34 12
-            cpy #$12            ; c0 12
-            cpy $12             ; c4 12
-
-            dec $1234           ; ce 34 12
-            dec $1234,x         ; de 34 12
-            dec $12             ; c6 12
-            dec $12,x           ; d6 12
-
-            dex                 ; ca
-            dey                 ; 88
-
-            eor $1234           ; 4d 34 12
-            eor $1234,x         ; 5d 34 12
-            eor $1234,y         ; 59 34 12
-            eor $12             ; 45 12
-            eor #$12            ; 49 12
-            eor ($12,x)         ; 41 12
-            eor $12,x           ; 55 12
-            eor ($12),y         ; 51 12
-
-            inc $1234           ; ee 34 12
-            inc $1234,x         ; fe 34 12
-            inc $12             ; e6 12
-            inc $12,x           ; f6 12
-
-            inx                 ; e8
-            iny                 ; c8
-
-            jmp $1234           ; 4c 34 12
-            jmp ($1234)         ; 6c 34 12
-
-            jsr $1234           ; 20 34 12
-
-            lda $1234           ; ad 34 12
-            lda $1234,x         ; bd 34 12
-            lda $1234,y         ; b9 34 12
-            lda $12             ; a5 12
-            lda #$12            ; a9 12
-            lda ($12,x)         ; a1 12
-            lda $12,x           ; b5 12
-            lda ($12),y         ; b1 12
-
-            ldx $1234           ; ae 34 12
-            ldx $1234,y         ; be 34 12
-            ldx #$12            ; a2 12
-            ldx $12             ; a6 12
-            ldx $12,y           ; b6 12
-
-            ldy $1234           ; ac 34 12
-            ldy $1234,x         ; bc 34 12
-            ldy #$12            ; a0 12
-            ldy $12             ; a4 12
-            ldy $12,x           ; b4 12
-
-            lsr $1234           ; 4e 34 12
-            lsr $1234,x         ; 5e 34 12
-            lsr $12             ; 46 12
-            lsr $12,x           ; 56 12
-            lsr a               ; 4a
-
-            nop                 ; ea
-
-            ora $12             ; 05 12
-            ora #$12            ; 09 12
-            ora $1234           ; 0d 34 12
-            ora $1234,x         ; 1d 34 12
-            ora $1234,y         ; 19 34 12
-            ora ($12,x)         ; 01 12
-            ora $12,x           ; 15 12
-            ora ($12),y         ; 11 12
-
-            pha                 ; 48
-            php                 ; 08
-            pla                 ; 68
-            plp                 ; 28
-
-            rol $12             ; 26 12
-            rol $1234           ; 2e 34 12
-            rol $1234,x         ; 3e 34 12
-            rol $12,x           ; 36 12
-            rol a               ; 2a
-            ror $1234           ; 6e 34 12
-            ror $1234,x         ; 7e 34 12
-            ror $12             ; 66 12
-            ror $12,x           ; 76 12
-            ror a               ; 6a
-
-            rti                 ; 40
-            rts                 ; 60
-
-            sbc $1234           ; ed 34 12
-            sbc $1234,x         ; fd 34 12
-            sbc $1234,y         ; f9 34 12
-            sbc $12             ; e5 12
-            sbc #$12            ; e9 12
-            sbc ($12,x)         ; e1 12
-            sbc $12,x           ; f5 12
-            sbc ($12),y         ; f1 12
-
-            sec                 ; 38
-            sed                 ; f8
-            sei                 ; 78
-
-            sta $1234           ; 8d 34 12
-            sta $1234,x         ; 9d 34 12
-            sta $1234,y         ; 99 34 12
-            sta $12             ; 85 12
-            sta ($12,x)         ; 81 12
-            sta $12,x           ; 95 12
-            sta ($12),y         ; 91 12
-
-            stx $1234           ; 8e 34 12
-            stx $12             ; 86 12
-            stx $12,y           ; 96 12
-
-            sty $1234           ; 8c 34 12
-            sty $12             ; 84 12
-            sty $12,x           ; 94 12
-
-            tax                 ; aa
-            tay                 ; a8
-            tsx                 ; ba
-            txa                 ; 8a
-            txs                 ; 9a
-            tya                 ; 98
diff --git a/testcode/compiler/pptest1.c b/testcode/compiler/pptest1.c
deleted file mode 100644 (file)
index e421356..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#define hash_hash       # ## #
-#define mkstr(a)        # a
-#define in_between(a)   mkstr(a)
-#define join(c, d)      in_between(c hash_hash d)
-
-char p[] = join(x, y);          // Comment
diff --git a/testcode/compiler/pptest2.c b/testcode/compiler/pptest2.c
deleted file mode 100644 (file)
index e127d53..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#define x       3
-#define f(a)    f(x * (a))
-#undef  x
-#define x       2
-#define g       f
-#define z       z[0]
-#define h       g(~
-#define m(a)    a(w)
-#define w       0,1
-#define t(a)    a
-#define p()     int
-#define q(x)    x
-#define r(x,y)  x ## y
-#define str(x)  # x
-
-f(y+1) + f(f(z)) % t(t(g) (0) + t)(1);
-g(x+(3,4)-w) | h 5) & m(f)^m(m);
-p() i[q()] = { q(1), r(2,3), r(4,), r(,5), r(,) };
-char c[2][6] = { str(hello), str() };
diff --git a/testcode/compiler/pptest3.c b/testcode/compiler/pptest3.c
deleted file mode 100644 (file)
index 62aa7f7..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#define str(s)          # s
-#define xstr(s)         str(s)
-#define debug(s, t)     printf("x" # s "= %d, x" # t "= %s", \
-                               x ## s, x ## t)
-#define INCFILE(n)      vers ## n       // Comment
-#define glue(a,b)       a ## b
-#define xglue(a,b)      glue(a,b)
-#define HIGHLOW         "hello"
-#define LOW             LOW ", world"
-
-debug (1, 2);
-fputs (str (strncmp("abc\0d", "abc", '\4') // Comment
-            == 0) str (: @\n), s);
-glue (HIGH, LOW);
-xglue (HIGH, LOW);
-
diff --git a/testcode/compiler/pptest4.c b/testcode/compiler/pptest4.c
deleted file mode 100644 (file)
index b8540b5..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#define t(x,y,z)        x ## y ## z
-int j[] = { t(1,2,3), t(,4,5), t(6,,7), t(8,9,), 
-            t(10,,), t(,11,), t(,,12), t(,,) };
diff --git a/testcode/compiler/pptest5.c b/testcode/compiler/pptest5.c
deleted file mode 100644 (file)
index 1f0bd43..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#define t(x,y,z) x ## y ## z 
-int j[] = { t(1,2,3), t(,4,5), t(6,,7), t(8,9,),
-            t(10,,), t(,11,), t(,,12), t(,,) };
diff --git a/testcode/grc/test.grc b/testcode/grc/test.grc
deleted file mode 100644 (file)
index 6b1032c..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-; This is the proposed syntax of a general GEOS resource file for the upcoming resource compiler.
-
-; token MENU, topname (will be escaped with _), x,y of top-left corner, bottom-right will be
-;  counted according to BSW font table (in x) and a multiply 15 (14?) in y
-
-; Note that MENU is either MENU and SUBMENU
-; Note that if you want to use any C operators (like '|', '&' etc.) do it WITHOUT spaces
-;  between arguments (parser is simple and weak)
-
-; format: MENU "name" left,top ALIGN { "itemname" TYPE pointer ... }
-
-MENU subMenu1 15,0 VERTICAL
-{
-    "subitem1" MENU_ACTION smenu1
-    "mubitem2" MENU_ACTION|DYN_SUB_MENU smenu2
-    "subitem3" MENU_ACTION smenu3
-}
-
-MENU mainMenu 0,0 HORIZONTAL
-{
-    "sub menu1" SUB_MENU subMenu1         ; goes for _subMenu1
-    "quit"     MENU_ACTION EnterDeskTop   ; goes for _EnterDeskTop
-}
-
-; format: HEADER GEOS_TYPE "dosname" "classname" "version"
-
-HEADER APPLICATION "123456789 1234567" "Class Name" "V1.0.0"
-{
-    ; not all fields are required, default and current values will be used
-    author "Maciej Witkowiak"             ; always in quotes!
-    info "Information text"               ; always in quotes!
-;    date yy mm dd hh ss                  ; always 5 fields!
-;    dostype seq                          ; can be PRG, SEQ, USR
-    mode c64only                          ; can be any, 40only, 80only, c64only
-}
diff --git a/testcode/grc/vlir.grc b/testcode/grc/vlir.grc
deleted file mode 100644 (file)
index 0603a52..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-HEADER APPLICATION "test" "TestApp" "V1.0" {
-structure VLIR
-dostype USR
-author "Maciej Witkowiak"
-info "This is just an example."
-}
-
-MEMORY {
-stacksize   0x0000
-overlaysize 0x1000
-overlaynums 0 1 2
-}
diff --git a/testcode/grc/vlir0.s b/testcode/grc/vlir0.s
deleted file mode 100644 (file)
index 2e9a3ff..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-; Maciej 'YTM/Elysium' Witkowiak
-; 06.06.2002
-
-; This is the source for the main VLIR-structured program part
-
-    ; include some GEOS defines
-
-            .include "../../libsrc/geos/inc/const.inc"
-            .include "../../libsrc/geos/inc/jumptab.inc"
-            .include "../../libsrc/geos/inc/geossym.inc"
-            .include "../../libsrc/geos/inc/geosmac.inc"
-
-    ; import load addresses for all VLIR chains
-    ; these labels are defined upon linking with ld65
-
-            .import __OVERLAYADDR__
-            .import __OVERLAYSIZE__
-
-    ; import names of functions defined (and exported) in each VLIR part
-    ; of your application
-    ; here I used an OVERLAYx_ prefix to prevent name clashes
-
-            .import OVERLAY1_Function1
-            .import OVERLAY2_Function1
-
-    ; segments "STARTUP", "CODE", "DATA", "RODATA" and "BSS" all go to VLIR0 chain
-
-            .segment "STARTUP"
-            ; code segment for VLIR 0 chain
-ProgExec:
-                LoadW r0, paramString           ; show something
-                jsr DoDlgBox
-
-                MoveW dirEntryBuf+OFF_DE_TR_SC, r1
-                LoadW r4, fileHeader
-                jsr GetBlock                    ; load back VLIR t&s table
-                bnex error
-
-                lda #1
-                jsr PointRecord                 ; we want next module (#1)
-                LoadW r2, __OVERLAYSIZE__       ; length - as many bytes as we have room for
-                LoadW r7, __OVERLAYADDR__       ; all VLIR segments have the same load address
-                jsr ReadRecord                  ; load it
-                bnex error
-                jsr OVERLAY1_Function1          ; execute something
-
-                lda #2
-                jsr PointRecord                 ; next module
-                LoadW r2, __OVERLAYSIZE__
-                LoadW r7, __OVERLAYADDR__
-                jsr ReadRecord                  ; load it
-                bnex error
-                jsr OVERLAY2_Function1          ; execute something
-
-error:          jmp EnterDeskTop                ; end of application
-
-            .segment "RODATA"
-            ; read-only data segment
-paramString:
-            .byte DEF_DB_POS | 1
-            .byte DBTXTSTR, TXT_LN_X, TXT_LN_2_Y
-            .word line1
-            .byte DBTXTSTR, TXT_LN_X, TXT_LN_3_Y
-            .word line2
-            .byte OK, DBI_X_0, DBI_Y_2
-            .byte NULL
-
-line1:      .byte BOLDON, "Hello World!",0
-line2:      .byte OUTLINEON,"Hello",PLAINTEXT," world!",0
-
-            .segment "DATA"
-            ; read/write initialized data segment
-counter:    .word 0
-
-            .segment "BSS"
-            ; read/write uninitialized data segment
-            ; this space doesn't go into output file, only its size and
-            ; position is remembered
diff --git a/testcode/grc/vlir1.s b/testcode/grc/vlir1.s
deleted file mode 100644 (file)
index eae3456..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-; Maciej 'YTM/Elysium' Witkowiak
-; 06.06.2002
-
-; This is the source for the loadable VLIR-structured program part
-
-    ; include some GEOS defines
-
-            .include "../../libsrc/geos/inc/const.inc"
-            .include "../../libsrc/geos/inc/jumptab.inc"
-            .include "../../libsrc/geos/inc/geossym.inc"
-            .include "../../libsrc/geos/inc/geosmac.inc"
-
-    ; export names of functions that will be used in the main program
-
-            .export OVERLAY1_Function1
-            .export OVERLAY1_Function2
-
-
-    ; go into OVERLAY1 segment - everything that is here will go into
-    ; VLIR chain #1
-
-                .segment "OVERLAY1"
-
-OVERLAY1_Function1:             jmp Function1   ; jump table, not really necessary
-OVERLAY1_Function2:             jmp Function2
-                ; etc.
-
-    ; rodata - if this is defined in .segment "RODATA"
-    ; it will end up in the VLIR0 part, you don't want that
-paramString:
-                .byte DEF_DB_POS | 1
-                .byte DBTXTSTR, TXT_LN_X, TXT_LN_2_Y
-                .word line1
-                .byte DBTXTSTR, TXT_LN_X, TXT_LN_3_Y
-                .word line2
-                .byte OK, DBI_X_0, DBI_Y_2
-                .byte NULL
-
-line1:          .byte "This is in module 1",0
-line2:          .byte "This is in module 1",0
-
-    ; code
-Function1:      LoadW r0, paramString
-                jsr DoDlgBox
-Function2:      rts
diff --git a/testcode/grc/vlir2.s b/testcode/grc/vlir2.s
deleted file mode 100644 (file)
index 9d180c8..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-; Maciej 'YTM/Elysium' Witkowiak
-; 06.06.2002
-
-; This is the source for the loadable VLIR-structured program part
-
-; similar to vlir1.s except the fact that this is chain #2
-
-            .include "../../libsrc/geos/inc/const.inc"
-            .include "../../libsrc/geos/inc/jumptab.inc"
-            .include "../../libsrc/geos/inc/geossym.inc"
-            .include "../../libsrc/geos/inc/geosmac.inc"
-
-            .export OVERLAY2_Function1
-            .export OVERLAY2_Function2
-
-                .segment "OVERLAY2"
-
-OVERLAY2_Function1:             jmp Function1
-OVERLAY2_Function2:             jmp Function2
-                ; etc.
-
-paramString:
-                .byte DEF_DB_POS | 1
-                .byte DBTXTSTR, TXT_LN_X, TXT_LN_2_Y
-                .word line1
-                .byte DBTXTSTR, TXT_LN_X, TXT_LN_3_Y
-                .word line2
-                .byte OK, DBI_X_0, DBI_Y_2
-                .byte NULL
-
-Function2:      LoadW r0, paramString
-                jsr DoDlgBox
-Function1:      rts
-
-line1:          .byte "This is in module 2",0
-line2:          .byte "This is in module 2",0
diff --git a/testcode/lib/arg-test.c b/testcode/lib/arg-test.c
deleted file mode 100644 (file)
index 5c28fae..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-int main (int argc, char* argv[])
-{
-    int I;
-
-    printf ("argc:     %d\n", argc);
-    for (I = 0; I < argc; ++I) {
-        printf ("argv[%2d]: \"%s\"\n", I, argv[I]);
-    }
-
-    printf ("\n");
-    getchar ();
-    return EXIT_SUCCESS;
-}
-
-
-
diff --git a/testcode/lib/atari/defdev.c b/testcode/lib/atari/defdev.c
deleted file mode 100644 (file)
index f679985..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-** testprogram printing the default device
-**
-** 26-Nov-2009, Christian Groessler
-*/
-
-#include <stdio.h>
-#include <conio.h>
-#include <atari.h>
-
-extern char _defdev[];
-
-int main(void)
-{
-        printf("default device: %s\n", _defdev);
-        if (_dos_type != SPARTADOS && _dos_type != OSADOS) cgetc();
-        return 0;
-}
diff --git a/testcode/lib/atari/mem.c b/testcode/lib/atari/mem.c
deleted file mode 100644 (file)
index 36222e0..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-** show some memory stuff
-**
-** 04-Aug-2004, Christian Groessler
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <conio.h>
-#include <atari.h>
-
-extern int getsp(void);                         /* comes from ../getsp.s */
-
-extern char _dos_type;                          /* bss variable */
-unsigned char data = 0x12;                      /* data variable */
-
-unsigned int *APPMHI = (unsigned int *)14;      /* 14,15 */
-unsigned char *RAMTOP = (unsigned char *)106;   /* in pages */
-unsigned int *LOMEM = (unsigned int *)128;      /* used by BASIC */
-unsigned int *MEMTOP = (unsigned int *)741;
-unsigned int *MEMLO = (unsigned int *)743;
-void *allocmem;
-
-int main(void)
-{
-  allocmem = malloc(257);
-
-  clrscr();
-
-  printf("  RAMTOP = %02X (%u) - $%04X (%u)\n",
-         *RAMTOP, *RAMTOP, *RAMTOP * 256, *RAMTOP * 256);
-  printf("  APPMHI = $%04X (%u)\n", *APPMHI, *APPMHI);
-  printf("  LOMEM  = $%04X (%u)  <BASIC only>\n", *LOMEM, *LOMEM);
-  printf("  MEMTOP = $%04X (%u)\n", *MEMTOP, *MEMTOP);
-  printf("  MEMLO  = $%04X (%u)\n", *MEMLO, *MEMLO);
-
-  printf("  ----------------------\n");
-  printf("  main:            $%04X  (code)\n", &main);
-  printf("  data:            $%04X  (data)\n", &data);
-  printf("  _dos_type:       $%04X  (bss)\n", &_dos_type);
-  printf("  allocmem:        $%04X  (dyn. data)\n", allocmem);
-  printf("  sp:              $%04X  (stack ptr)\n", getsp());
-
-  if (allocmem) free(allocmem);
-  if (_dos_type != 1) cgetc();
-  return(0);
-}
diff --git a/testcode/lib/atari/ostype.c b/testcode/lib/atari/ostype.c
deleted file mode 100644 (file)
index 552735a..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-** testprogram for get_ostype() and get_tv() functions
-**
-** 09-Jul-2004, chris@groessler.org
-*/
-
-#include <stdio.h>
-#include <atari.h>
-
-int main(void)
-{
-    unsigned int t, v;
-    unsigned char palntsc;
-    unsigned char *rev;
-    unsigned char minor;
-    unsigned char c;
-
-    t = get_ostype();    /* get computer type */
-    v = get_tv();        /* get tv system */
-
-    palntsc = (v == AT_PAL);
-
-    minor = (t & AT_OS_TYPE_MINOR) >> 5;
-    switch(t & AT_OS_TYPE_MAIN) {
-        case AT_OS_UNKNOWN:
-        default:
-            printf("unknown system type !!\n");
-            break;
-        case AT_OS_400800:
-            if (minor == 1) rev = "A";
-            else rev = "B";
-            printf("it's a 400/800, %s, Rev. %s\n",palntsc ? "PAL" : "NTSC",rev);
-            break;
-        case AT_OS_1200XL:
-            if (minor == 1) rev = "10";
-            else rev = "11";
-            printf("it's a 1200XL, %s, Rev. %s\n",palntsc ? "PAL" : "NTSC",rev);
-            break;
-        case AT_OS_XLXE:
-            printf("is'a a XL/XE, %s, Rev. %d\n",palntsc ? "PAL" : "NTSC",minor);
-            break;
-    }
-    printf("hit <RETURN> to continue...\n");
-    c = getchar();
-    return 0;
-}
diff --git a/testcode/lib/atari/scrcode.s b/testcode/lib/atari/scrcode.s
deleted file mode 100644 (file)
index cd42907..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-; Christian Groessler, 30-Aug-2005
-;
-; scrcode macro test
-;
-; compile with
-;       ca65 -I../../../asminc -tatari -o scrcode.o scrcode.s
-;       ld65 -tatari -o scrcode.com scrcode.o
-
-.import         __CODE_LOAD__, __BSS_LOAD__
-
-.include        "atari.inc"
-.macpack        atari
-
-.code
-
-                rts             ; SpartaDOS workaround
-
-; entry point
-
-                lda     #0
-                tay
-                tax
-
-; display dispdata
-
-disp:           lda     dispdata,x
-                sta     (SAVMSC),y
-                inx
-                iny
-                cpx     #disp_len
-                bne     disp
-
-; wait for key press
-
-key:            lda     CH
-                cmp     #255
-                beq     key
-
-                rts
-
-.data
-
-dispdata:       scrcode         "fooBa", 'r', $66, 3+4
-disp_len        =       * - dispdata
-
-.segment        "AUTOSTRT"
-
-                .word   $02E0
-                .word   $02E1
-                .word   __CODE_LOAD__+1
-
-.segment        "EXEHDR"
-
-                .word   $FFFF
-                .word   __CODE_LOAD__
-                .word   __BSS_LOAD__ - 1
-
-.end
diff --git a/testcode/lib/atari/sys.c b/testcode/lib/atari/sys.c
deleted file mode 100644 (file)
index 9ec7aa6..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-** testprogram for _sys() function on Atari
-**
-** 17-Sep-2013, chris@groessler.org
-**
-** uses PUTCHR IOCB function to display a string
-*/
-
-#include <atari.h>
-#include <6502.h>
-#include <conio.h>
-
-static struct regs regs;
-static struct __iocb *iocb = &IOCB;  /* use IOCB #0 */
-
-static char message[] = "I'm the sys test text\n";
-
-int main(void)
-{
-    /* setup IOCB for CIO call */
-    iocb->buffer = message;
-    iocb->buflen = sizeof(message) - 1;
-    iocb->command = IOCB_PUTCHR;
-
-    /* setup input registers */
-    regs.x = 0;         /* IOCB #0 */
-    regs.pc = 0xe456;   /* CIOV */
-
-    /* call CIO */
-    _sys(&regs);
-
-    if (regs.y != 1)
-        cprintf("CIO error 0x%02\r\n", regs.y);
-
-    cgetc();
-    return 0;
-}
diff --git a/testcode/lib/atoi-test.c b/testcode/lib/atoi-test.c
deleted file mode 100644 (file)
index 8bc77d4..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/* A small test for atoi. Assumes twos complement */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include <errno.h>
-
-
-
-#define outfile stderr
-
-
-
-static unsigned int Failures = 0;
-
-
-
-static void CheckAtoi (const char* Str, int Val)
-{
-    int Res = atoi (Str);
-    if (Res != Val) {
-        fprintf (outfile, "atoi error in \"%s\":\n"
-                          "  result = %d, should be %d\n", Str, Res, Val);
-        ++Failures;
-    }
-}
-
-
-
-int main (void)
-{
-    CheckAtoi ("\t +0A", 0);
-    CheckAtoi ("\t -0.123", 0);
-    CheckAtoi ("  -32  ", -32);
-    CheckAtoi (" +32  ", 32);
-    CheckAtoi ("0377", 377);
-    CheckAtoi (" 0377 ", 377);
-    CheckAtoi (" +0377 ", 377);
-    CheckAtoi (" -0377 ", -377);
-    CheckAtoi ("0x7FFF", 0);
-    CheckAtoi (" +0x7FFF", 0);
-    CheckAtoi (" -0x7FFF", 0);
-    fprintf (outfile, "Failures: %u\n", Failures);
-    return (Failures != 0);
-}
diff --git a/testcode/lib/clock.c b/testcode/lib/clock.c
deleted file mode 100644 (file)
index ac1ab3c..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-** simple clock test
-**
-** 06-Nov-2001, Christian Groessler
-*/
-
-#include <stdio.h>
-#include <conio.h>
-#include <time.h>
-
-int main(void)
-{
-  printf("\ncc65 time routines test program\n");
-  printf("-------------------------------\n");
-
-  printf("clocks per second: %d\n", CLOCKS_PER_SEC);
-  printf("current clock: %ld\n", clock());
-
-  printf("hit <return> to exit...");
-  cgetc();
-  printf("\n");
-  return(0);
-}
-
diff --git a/testcode/lib/cprintf.c b/testcode/lib/cprintf.c
deleted file mode 100644 (file)
index ca3a06d..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-** test program for the cprintf() function
-** (for the \r and \n special operators)
-** CPG
-**
-** The output generated by this program should look
-** like this:
-**
-** ---- top of screen --------
-** 12345
-**      67890
-**
-**
-** 67890
-**
-** hit return to exit....
- .
- .
- .
-** ---- bottom of screen -----
-*/
-
-#include <stdio.h>
-#include <conio.h>
-
-int main(void)
-{
-        clrscr();
-        cprintf("12345\n");
-        cprintf("67890\n");
-        gotoxy(0,4);
-        cprintf("12345\r");
-        cprintf("67890\r");
-        printf("\n\n");
-        printf("hit return to exit....\n");
-        fgetc(stdin);
-        return(0);
-}
diff --git a/testcode/lib/cursor.c b/testcode/lib/cursor.c
deleted file mode 100644 (file)
index fc6e3cc..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-** test for conio cursor() function
-** CPG 2002
-**
-** the cursor should be in the same state as mentioned in the printfs
-*/
-
-#include <conio.h>
-
-#if 1
-#define NEWLINE cprintf("\r\n")
-#define PRINTF  cprintf
-#else
-#include <stdio.h>
-#define NEWLINE printf("\n")
-#define PRINTF  printf
-#endif
-
-int main(void)
-{
-        char c;
-        NEWLINE;
-
-        cursor (1);
-        PRINTF("enter key (cursor on): ");
-        c = cgetc();
-        NEWLINE;
-
-        cursor (0);
-        PRINTF("enter key (cursor off): ");
-        c = cgetc();
-        NEWLINE;
-
-        PRINTF("enter key (cursor on): ");
-        cursor (1);
-        c = cgetc();
-        NEWLINE;
-
-        PRINTF("enter key (cursor off): ");
-        cursor (0);
-        c = cgetc();
-        NEWLINE;
-
-        PRINTF("hit any key to exit...");
-        c = cgetc();
-        NEWLINE;
-
-        return(0);
-}
diff --git a/testcode/lib/deb.c b/testcode/lib/deb.c
deleted file mode 100644 (file)
index 06a8d06..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-** test program for the debugger
-**
-** press 'd' to enter the debugger
-**
-*/
-
-#include <stdio.h>
-#include <conio.h>
-#include <6502.h>
-#include <dbg.h>
-
-int main(void)
-{
-  char c;
-
-  /* Initialize the debugger */
-  DbgInit (0);
-
-  clrscr();
-  cputsxy(4,10,"Debugger test...."); cgetc();
-  while(1) {
-    printf("press d to debug, q to exit....\n");
-    c = cgetc();
-    if (c == 'q') {
-      printf("exiting....\n");
-      return(0);
-    }
-    if (c == 'd') {
-      printf("entering debug...\n");
-      BREAK();
-      printf("return from debug...\n");
-    }
-    else {
-      printf("unknown key '%c'\n",c);
-    }
-  }
-}
diff --git a/testcode/lib/dir-test.c b/testcode/lib/dir-test.c
deleted file mode 100644 (file)
index 9102fc7..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-
-/*
-        first test for posix directory routines for the c64
-        kludges:
-        -   currently uses cbm_open, which conflicts with standard i/o,
-                which in turn makes it infact kindof unuseable. this can
-                be easily changed however, since the only reason not to use
-                open/read was that it currently appends ,u,r to filenames
-        -   the offset in current dir stream should better be calculated
-                from the values returned by "read".
-        -   the type flag isnt filled in atm.
-        -   scandir/alphasort/versionsort is missing
-        -   some bits are currently untested (ie, unused in the testprogram)
-        27/02/2003 gpz
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <dirent.h>
-#include <cbm.h>
-#include <conio.h>
-
-
-int main(void)
-{
-    char* name = ".";
-    unsigned char go = 0;
-    DIR *D;
-    register struct dirent* E;
-
-    /* Explain usage and wait for a key */
-    printf ("Use the following keys:\n"
-            "  g -> go ahead without stop\n"
-            "  q -> quit directory listing\n"
-            "  r -> return to last entry\n"
-            "  s -> seek back to start\n"
-            "Press any key to start ...\n");
-    cgetc ();
-
-    /* Open the directory */
-    D = opendir (name);
-    if (D == 0) {
-        printf("error opening %s: %s\n", name, strerror (errno));
-        return 1;
-    }
-
-    /* Output the directory */
-    errno = 0;
-    printf("contents of \"%s\":\n", name);
-    while ((E = readdir (D)) != 0) {
-        printf ("dirent.d_name[] : \"%s\"\n", E->d_name);
-        printf ("dirent.d_blocks : %10u\n",   E->d_blocks);
-        printf ("dirent.d_type   : %10d\n",   E->d_type);
-        printf ("telldir()       : %10lu\n",  telldir (D));
-        printf ("---\n");
-        if (!go) {
-            switch (cgetc ()) {
-                case 'g':
-                    go = 1;
-                    break;
-
-                case 'q':
-                    goto done;
-
-                case 'r':
-                    seekdir (D, E->d_off);
-                    break;
-
-                case 's':
-                    rewinddir (D);
-                    break;
-
-            }
-        }
-    }
-
-done:
-    if (errno == 0) {
-        printf ("Done\n");
-    } else {
-        printf("Done: %d (%s)\n", errno, strerror (errno));
-    }
-
-    /* Close the directory */
-    closedir (D);
-
-    return 0;
-}
diff --git a/testcode/lib/div-test.c b/testcode/lib/div-test.c
deleted file mode 100644 (file)
index 2d5c254..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* div-test.c
-**
-** This program tests the division and modulo operators
-** and the div() library function.
-**
-** 2002-10-24, Greg King
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-
-static bool test(int dividend, int divisor) {
-        div_t result;
-
-        result = div(dividend, divisor);
-        printf("%+d/%+d= %+d, %+d%%%+d= %+d, div()= %+d, %+d\n",
-                dividend, divisor, dividend / divisor,
-                dividend, divisor, dividend % divisor,
-                result.quot, result.rem);
-        return result.quot * divisor + result.rem != dividend;
-        }
-
-int main(void) {
-        bool t;
-
-        printf("\nTest of division and modulus operations:\n\n");
-        t =     test(+40, +3) ||
-                test(+40, -3) ||
-                test(-40, +3) ||
-                test(-40, -3);
-        if (t)
-                printf("\nThe div() function made a wrong result!\n");
-
-        printf("\nTap a key, to exit. ");
-        getchar();
-        return (int)t;
-        }
diff --git a/testcode/lib/em-test.c b/testcode/lib/em-test.c
deleted file mode 100644 (file)
index bd4eddc..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <conio.h>
-#include <em.h>
-
-
-#if defined(__C64__)
-#define DRIVERNAME      "c64-ram.emd"
-#elif defined(__C128__)
-#define DRIVERNAME      "c128-ram.emd"
-#elif defined(__C16__)
-#define DRIVERNAME      "c16-ram.emd"
-#elif defined(__CBM510__)
-#define DRIVERNAME      "cbm510-ram.emd"
-#elif defined(__CBM610__)
-#define DRIVERNAME      "cbm610-ram.emd"
-#elif defined(__APPLE2ENH__)
-#define DRIVERNAME      "a2e.auxmem.emd"
-#elif defined(__APPLE2__)
-#define DRIVERNAME      "a2.auxmem.emd"
-#elif defined(__ATARIXL__)
-#define DRIVERNAME      "atrx130.emd"
-#elif defined(__ATARI__)
-#define DRIVERNAME      "atr130.emd"
-#else
-#define DRIVERNAME      "unknown"
-#error "Unknown target system"
-#endif
-
-
-#define FORCE_ERROR1 0
-#define FORCE_ERROR2 0
-
-
-#define PAGE_SIZE       128                     /* Size in words */
-#define BUF_SIZE        (PAGE_SIZE + PAGE_SIZE/2)
-static unsigned buf[BUF_SIZE];
-
-
-
-static void cleanup (void)
-/* Remove the driver on exit */
-{
-    em_unload ();
-}
-
-
-
-static void fill (register unsigned* page, register unsigned char count, register unsigned num)
-{
-    register unsigned char i;
-    for (i = 0; i < count; ++i, ++page) {
-        *page = num;
-    }
-}
-
-
-
-static void cmp (unsigned page, register const unsigned* buf,
-                 register unsigned char count, register unsigned num)
-{
-    register unsigned char i;
-    for (i = 0; i < count; ++i, ++buf) {
-        if (*buf != num) {
-            cprintf ("\r\nData mismatch in page $%04X at $%04X\r\n"
-                     "Data is $%04X (should be $%04X)\r\n",
-                     page, buf, *buf, num);
-#ifdef __ATARI__
-            cgetc ();
-#endif
-            exit (EXIT_FAILURE);
-        }
-    }
-}
-
-
-
-int main (void)
-{
-    unsigned char Res;
-    unsigned I;
-    unsigned Offs;
-    unsigned PageCount;
-    unsigned char X, Y;
-    struct em_copy c;
-
-    clrscr ();
-    Res = em_load_driver (DRIVERNAME);
-    if (Res != EM_ERR_OK) {
-        cprintf ("Error in em_load_driver: %u\r\n", Res);
-        cprintf ("os: %u, %s\r\n", _oserror, _stroserror (_oserror));
-#ifdef __ATARI__
-        cgetc ();
-#endif
-        exit (EXIT_FAILURE);
-    }
-    atexit (cleanup);
-
-    /* Get the number of available pages */
-    PageCount = em_pagecount ();
-    cprintf ("Loaded ok, page count = $%04X\r\n", PageCount);
-
-    /* TEST #1: em_map/em_use/em_commit */
-    cputs ("Testing em_map/em_use/em_commit");
-
-    /* Fill all pages */
-    cputs ("\r\n  Filling   ");
-    X = wherex ();
-    Y = wherey ();
-    for (I = 0; I < PageCount; ++I) {
-
-        /* Fill the buffer and copy it to em */
-        fill (em_use (I), PAGE_SIZE, I);
-        em_commit ();
-
-        /* Keep the user happy */
-        gotoxy (X, Y);
-        cputhex16 (I);
-    }
-
-#if FORCE_ERROR1
-    ((unsigned*) em_map (0x03))[0x73] = 0xFFFF;
-    em_commit ();
-#endif
-
-    /* Check all pages */
-    cputs ("\r\n  Comparing ");
-    X = wherex ();
-    Y = wherey ();
-    for (I = 0; I < PageCount; ++I) {
-
-        /* Get the buffer and compare it */
-        cmp (I, em_map (I), PAGE_SIZE, I);
-
-        /* Keep the user happy */
-        gotoxy (X, Y);
-        cputhex16 (I);
-    }
-
-    /* TEST #2: em_copyfrom/em_copyto. */
-    cputs ("\r\nTesting em_copyfrom/em_copyto");
-
-    /* We're filling now 384 bytes per run to test the copy routines with
-    ** other sizes.
-    */
-    PageCount = (PageCount * 2) / 3;
-
-    /* Setup the copy structure */
-    c.buf   = buf;
-    c.count = sizeof (buf);
-
-    /* Fill again all pages */
-    cputs ("\r\n  Filling   ");
-    X = wherex ();
-    Y = wherey ();
-    c.page = 0;
-    c.offs = 0;
-    for (I = 0; I < PageCount; ++I) {
-
-        /* Fill the buffer and copy it to em */
-        fill (buf, BUF_SIZE, I ^ 0xFFFF);
-        em_copyto (&c);
-
-        /* Adjust the em offset */
-        Offs = c.offs + sizeof (buf);
-        c.offs = (unsigned char) Offs;
-        c.page += (Offs >> 8);
-
-        /* Keep the user happy */
-        gotoxy (X, Y);
-        cputhex16 (I);
-    }
-
-#if FORCE_ERROR2
-    c.page = 0x03;
-    em_copyfrom (&c);
-    buf[0x73] = 0xFFFF;
-    em_copyto (&c);
-#endif
-
-    /* Check all pages */
-    cputs ("\r\n  Comparing ");
-    X = wherex ();
-    Y = wherey ();
-    c.page = 0;
-    c.offs = 0;
-    for (I = 0; I < PageCount; ++I) {
-
-        /* Get the buffer and compare it */
-        em_copyfrom (&c);
-        cmp (I, buf, BUF_SIZE, I ^ 0xFFFF);
-
-        /* Adjust the em offset */
-        Offs = c.offs + sizeof (buf);
-        c.offs = (unsigned char) Offs;
-        c.page += (Offs >> 8);
-
-        /* Keep the user happy */
-        gotoxy (X, Y);
-        cputhex16 (I);
-    }
-
-    /* Success */
-    cprintf ("\r\nPassed!\r\n");
-
-#ifdef __ATARI__
-    cgetc ();
-#endif
-
-    return 0;
-
-}
diff --git a/testcode/lib/exec-test1.c b/testcode/lib/exec-test1.c
deleted file mode 100644 (file)
index ea74ee6..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-** These programs test cc65's exec() program-chaining function.
-** exec-test1 runs exec-test2 -- that tests the loading and starting of another
-** program.  Then, exec-test2 runs arg-test -- that tests command-line argument
-** passing.
-**
-** 2013-08-24, Greg King
-*/
-
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-#include <conio.h>
-
-int main (void) {
-    clrscr ();
-    cprintf ("\nExec-test #1 -- launching #2...\r\n");
-
-    exec ("exec-test2", "");
-
-    cprintf ("\nFailed to find #2:\r\n %s.\r\n", _stroserror (_oserror));
-    cgetc ();
-    return _oserror;
-}
diff --git a/testcode/lib/exec-test2.c b/testcode/lib/exec-test2.c
deleted file mode 100644 (file)
index a0aa82a..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-** These programs test cc65's exec() program-chaining function.
-** exec-test1 runs exec-test2 -- that tests the loading and starting of another
-** program.  Then, exec-test2 runs arg-test -- that tests command-line argument
-** passing.
-**
-** 2013-08-24, Greg King
-*/
-
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-#include <conio.h>
-
-int main (void) {
-    cprintf ("\nExec-test #2 -- launching arg-test...\r\n\n");
-
-    exec ("arg-test", "arg1 arg2 \"\" arg4");
-
-    cprintf ("\nFailed to find arg-test:\r\n %s.\r\n", _stroserror (_oserror));
-    cgetc ();
-    return _oserror;
-}
diff --git a/testcode/lib/fileio-test.c b/testcode/lib/fileio-test.c
deleted file mode 100644 (file)
index 013d939..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <fcntl.h>
-
-
-
-FILE* Fopen (const char* Name, const char* Mode)
-{
-    FILE* F;
-    printf ("Opening %s(%s): ", Name, Mode);
-    F = fopen (Name, Mode);
-    if (F) {
-        printf ("Ok (%d)\n", fileno (F));
-    } else {
-        printf (strerror (errno));
-    }
-    return F;
-}
-
-
-
-void Fwrite (FILE* F, const void* Buf, unsigned Size)
-{
-    size_t Res;
-    Res = fwrite (Buf, 1, Size, F);
-    printf ("Writing %u bytes to %d: %u\n", Size, fileno (F), Res);
-}
-
-
-
-int Fread (FILE* F, void* Buf, unsigned Size)
-{
-    size_t Res;
-    Res = fread (Buf, 1, Size, F);
-    printf ("Reading %u bytes from %d: %u\n", Size, fileno (F), Res);
-    return Res > 0? Res : 0;
-}
-
-
-
-void Fclose (FILE* F)
-{
-    printf ("Closing %d:", fileno (F));
-    if (fclose (F) == 0) {
-        printf ("Ok\n");
-    } else {
-        printf (strerror (errno));
-    }
-}
-
-
-
-int main (void)
-{
-    FILE* F1;
-    FILE* F2;
-    int Res;
-    static const char text1[] = "This goes into file #1\n";
-    static const char text2[] = "This goes into file #2\n";
-    static const char text3[] = "This goes into file #3\n";
-    static const char text4[] = "This goes into file #4\n";
-    static char Buf[200];
-
-
-    F1 = Fopen ("foobar1", "w");
-    F2 = Fopen ("foobar2", "w");
-
-    Fwrite (F1, text1, sizeof (text1) - 1);
-    Fwrite (F2, text2, sizeof (text2) - 1);
-    Fwrite (F1, text1, sizeof (text1) - 1);
-    Fwrite (F2, text2, sizeof (text2) - 1);
-
-    Fclose (F1);
-    Fclose (F2);
-
-    F1 = Fopen ("foobar3", "w");
-    F2 = Fopen ("foobar4", "w");
-
-    Fwrite (F1, text3, sizeof (text3) - 1);
-    Fwrite (F2, text4, sizeof (text4) - 1);
-    Fwrite (F1, text3, sizeof (text3) - 1);
-    Fwrite (F2, text4, sizeof (text4) - 1);
-
-    Fclose (F1);
-    Fclose (F2);
-
-    F1 = Fopen ("foobar1", "r");
-    Res = Fread (F1, Buf, sizeof (Buf));
-    printf ("%.*s", Res, Buf);
-    Res = Fread (F1, Buf, sizeof (Buf));
-    Fclose (F1);
-
-    return 0;
-}
-
-
diff --git a/testcode/lib/ft.c b/testcode/lib/ft.c
deleted file mode 100644 (file)
index 880df63..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
-** simple file I/O test
-**
-** 12-Jun-2000, Christian Groessler
-**
-** please compile with
-**   cl65 -tsystem ft.c getsp.s -o ft.com
-**
-** The program asks for a filename (if it hasn't
-** got one from argv). I then opens the file,
-** reads the the first 16 bytes and displays them
-** (as hex values).
-** The values of sp (cc65 runtime stack pointer)
-** are displayed at some places. The displayed
-** value should always be the same.
-*/
-
-#include <stdio.h>
-#include <string.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <conio.h>
-#include <unistd.h>
-
-extern int getsp(void);  /* is provided in getsp.s */
-
-/* Atari's fd indirection table */
-#ifdef __ATARI__
-extern char __fd_index[];
-struct fd_t {
-  char usage;
-  char iocb;
-  char dev;
-  char flag;
-};
-extern struct fd_t __fd_table[];
-#endif
-
-int main(int argc,char **argv)
-{
-    char *filename,*x;
-    char buf[20];
-    int i,l,lr;
-    int fd;
-    int csp;
-
-    if (argc >= 2) {
-        filename = *(argv+1);
-    }
-    else {
-        printf("\nfilename: ");
-        x = fgets(buf,19,stdin);
-        printf("\n");
-        if (!x) {
-            printf("nothing read\n");
-            return(0);
-        }
-#if 0
-        l = strlen(x);
-        printf("read: ");
-        for (i=0; i<l; i++) printf("%02X ",*(x+i)); printf("\n");
-#endif
-        filename = x;
-    }
-    printf("using filename \"%s\"\n",filename);
-    csp = getsp();
-    printf("now opening file... sp = %d\n",csp);
-    fd = open(filename,O_RDONLY);
-    csp = getsp();
-    if (fd == -1) {
-        char x1 = _oserror;
-        printf("open failed: os: %d,\n\terrno: %d, sp = %d\n",x1,errno,csp);
-        cgetc();
-        return(0);
-    }
-    printf("open success -- handle = $%x, sp = %d\n",fd,csp);
-#ifdef __ATARI__
-    printf("fd_index:\n ");
-    for (i=0; i<12; i++) printf("%02X ",__fd_index[i]);
-    printf("\nfd_table:\n");
-    for (i=0; i<8; i++) {
-        printf(" usa: %d, iocb: %02X, dev: %02X\n",
-               __fd_table[i].usage,
-               __fd_table[i].iocb,
-               __fd_table[i].dev);
-    }
-#endif
-    lr = read(fd,buf,16);  /* read first 16 bytes */
-    csp = getsp();
-    if (lr == -1) {
-        printf("read failed: %d (sp = %d)\n",errno,csp);
-        cgetc();
-        return(0);
-    }
-    l = close(fd);
-    if (l == -1) {
-        printf("close failed: %d\n",errno);
-        cgetc();
-        return(0);
-    }
-    csp = getsp();
-    printf("\n\nThe data read: (%d bytes, sp = %d)\n",lr,csp);
-    for (i=0; i<lr; i++) {
-        printf("%02X ",buf[i]);
-        if (!((i+1) & 7)) printf("\n");
-    }
-    printf("\n\npress return to exit...");
-    getchar();
-    return(0);
-}
diff --git a/testcode/lib/getopt-test.c b/testcode/lib/getopt-test.c
deleted file mode 100644 (file)
index 2f11554..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
-** This is part of a changed public domain getopt implementation that
-** had the following text on top:
-**
-**      I got this off net.sources from Henry Spencer.
-**      It is a public domain getopt(3) like in System V.
-**      I have made the following modifications:
-**
-**      A test main program was added, ifdeffed by GETOPT.
-**      This main program is a public domain implementation
-**      of the getopt(1) program like in System V.  The getopt
-**      program can be used to standardize shell option handling.
-**              e.g.  cc -DGETOPT getopt.c -o getopt
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#define ARGCH    ':'
-#define BADCH    '?'
-#define ENDARGS  "--"
-
-int main (int argc, char **argv)
-{
-    char *optstring = argv[1];
-
-    char *argv0 = argv[0];
-
-    int opterr = 0;
-
-    int C;
-
-    char *opi;
-
-    if (argc == 1) {
-        fprintf (stderr, "Usage: %s optstring args\n", argv0);
-        exit (1);
-    }
-    argv++;
-    argc--;
-    argv[0] = argv0;
-    while ((C = getopt (argc, argv, optstring)) != EOF) {
-        if (C == BADCH)
-            opterr++;
-        printf ("-%c ", C);
-        opi = strchr (optstring, C);
-        if (opi && opi[1] == ARGCH)
-            if (optarg)
-                printf ("\"%s\" ", optarg);
-            else
-                opterr++;
-    }
-    printf ("%s", ENDARGS);
-    while (optind < argc)
-        printf (" \"%s\"", argv[optind++]);
-    putchar ('\n');
-    return opterr;
-}
-
diff --git a/testcode/lib/getsp.s b/testcode/lib/getsp.s
deleted file mode 100644 (file)
index 9f169dc..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-        .export _getsp
-        .importzp       sp
-
-.proc   _getsp
-
-        ldx     sp+1
-        lda     sp
-        rts
-
-.endproc
-
diff --git a/testcode/lib/heaptest.c b/testcode/lib/heaptest.c
deleted file mode 100644 (file)
index d776e2f..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <_heap.h>
-
-
-
-static unsigned char* V[256];
-
-
-
-static char* Alloc (void)
-/* Allocate a random sized chunk of memory */
-{
-    /* Determine the size */
-    unsigned char Size = (((unsigned char)rand()) & 0x7F) + 1;
-
-    /* Allocate memory */
-    unsigned char* P = malloc (Size);
-
-    /* Set the string to a defined value. We use the size, since this will
-    ** also allow us to retrieve it later.
-    */
-    if (P) {
-        memset (P, Size, Size);
-    } else {
-        printf ("Could not allocate %u bytes\n", Size);
-        exit (EXIT_FAILURE);
-    }
-    return P;
-}
-
-
-
-static void Free (unsigned char* P)
-/* Check a memory block and free it */
-{
-    unsigned char I;
-
-    /* Get the size of the block */
-    unsigned char Size = P[0];
-
-    /* Scan the block */
-    for (I = 1; I < Size; ++I) {
-        if (P[I] != Size) {
-            printf ("Scan failed - expected %02X, got %02X\n",
-                    Size, P[I]);
-            exit (EXIT_FAILURE);
-        }
-    }
-
-    /* Free the block */
-    free (P);
-}
-
-
-
-static void FillArray (void)
-/* Fill the array with randomly allocated memory chunks */
-{
-    unsigned char I = 0;
-    do {
-        V[I] = Alloc ();
-        ++I;
-    } while (I != 0);
-}
-
-
-
-static void ShowInfo (void)
-/* Show heap info */
-{
-    /* Count free blocks */
-    unsigned Count = 0;
-    register struct freeblock* P = _heapfirst;
-    while (P) {
-        ++Count;
-        P = P->next;
-    }
-    printf ("%04X  %04X  %04X  %04X  %04X %u\n",
-            _heaporg, _heapptr, _heapend, _heapfirst, _heaplast, Count);
-
-    if (Count) {
-        P = _heapfirst;
-        while (P) {
-            printf ("%04X  %04X  %04X %04X(%u)\n",
-                    (unsigned) P, P[2], P[1], P[0], P[0]);
-            P = P->next;
-        }
-        getchar ();
-    }
-}
-
-
-
-static void Test1 (void)
-{
-    unsigned char I;
-    FillArray ();
-    for (I = 0; I < 0x80; ++I) {
-        Free (V[0x7F-I]);
-        Free (V[0x80+I]);
-    }
-    ShowInfo ();
-}
-
-
-
-static void Test2 (void)
-{
-    unsigned char I;
-    FillArray ();
-    I = 0;
-    do {
-        Free (V[I]);
-        ++I;
-    } while (I != 0);
-    ShowInfo ();
-}
-
-
-
-static void Test3 (void)
-{
-    unsigned char I;
-    FillArray ();
-    I = 0;
-    do {
-        --I;
-        Free (V[I]);
-    } while (I != 0);
-    ShowInfo ();
-}
-
-
-
-static void Test4 (void)
-{
-    unsigned char I;
-    FillArray ();
-    I = 0;
-    do {
-        Free (V[I]);
-        I += 2;
-    } while (I != 0);
-    I = 1;
-    do {
-        Free (V[I]);
-        I += 2;
-    } while (I != 1);
-    ShowInfo ();
-}
-
-
-
-static void Test5 (void)
-{
-    unsigned char I;
-    FillArray ();
-    I = 0;
-    do {
-        Free (V[I]);
-        I += 2;
-    } while (I != 0);
-    do {
-        V[I] = Alloc ();
-        I += 2;
-    } while (I != 0);
-    I = 1;
-    do {
-        Free (V[I]);
-        I += 2;
-    } while (I != 1);
-    do {
-        V[I] = Alloc ();
-        I += 2;
-    } while (I != 1);
-    I = 0;
-    do {
-        Free (V[I]);
-        ++I;
-    } while (I != 0);
-    ShowInfo ();
-}
-
-
-
-static void Test6 (void)
-{
-    unsigned char I, J;
-    FillArray ();
-    I = J = 0;
-    do {
-        do {
-            Free (V[I]);
-            V[I] = Alloc ();
-            ++I;
-        } while (I != 0);
-        ++J;
-    } while (J < 5);
-    do {
-        Free (V[I]);
-        ++I;
-    } while (I != 0);
-    ShowInfo ();
-}
-
-
-
-int main (void)
-{
-    unsigned long T;
-
-    /* Show info at start */
-    ShowInfo ();
-
-    /* Remember the time */
-    T = clock ();
-
-    /* Do the tests */
-    Test1 ();
-    Test2 ();
-    Test3 ();
-    Test4 ();
-    Test5 ();
-    Test6 ();
-
-    /* Calculate the time and print it */
-    T = clock () - T;
-    printf ("Time needed: %lu ticks\n", T);
-
-    /* Done */
-    return EXIT_SUCCESS;
-}
-
-
-
diff --git a/testcode/lib/joy-test.c b/testcode/lib/joy-test.c
deleted file mode 100644 (file)
index 0a5c809..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <conio.h>
-#include <joystick.h>
-
-
-#ifdef JOYSTICK_DRIVER
-
-/* A statically linked driver was named on the compiler's command line.
-** Make sure that it is used instead of a dynamic one.
-*/
-#  undef DYN_DRV
-#  define DYN_DRV       0
-#else
-
-/* Use a dynamically loaded driver, by default. */
-#  ifndef DYN_DRV
-#    define DYN_DRV     1
-#  endif
-#endif
-
-
-int main (void)
-{
-    unsigned char j;
-    unsigned char count;
-    unsigned char i;
-
-#if DYN_DRV
-    unsigned char Res = joy_load_driver (joy_stddrv);
-#elif defined(JOYSTICK_DRIVER)
-    unsigned char Res = joy_install (&JOYSTICK_DRIVER);
-#else
-    unsigned char Res = joy_install (&joy_static_stddrv);
-#endif
-
-    if (Res != JOY_ERR_OK) {
-        cprintf ("Error in joy_load_driver: %u\r\n", Res);
-#if DYN_DRV
-        cprintf ("os: %u, %s\r\n", _oserror, _stroserror (_oserror));
-#endif
-        exit (EXIT_FAILURE);
-    }
-
-    clrscr ();
-    count = joy_count ();
-#ifdef __ATARI5200__
-    cprintf ("JOYSTICKS: %d", count);
-#else
-    cprintf ("Driver supports %d joystick(s)", count);
-#endif
-    while (1) {
-        for (i = 0; i < count; ++i) {
-            gotoxy (0, i+1);
-            j = joy_read (i);
-#ifdef __ATARI5200__
-            cprintf ("%1d:%-3s%-3s%-3s%-3s%-3s%-3s",
-                     i,
-                     (j & joy_masks[JOY_UP])?    " U " : " u ",
-                     (j & joy_masks[JOY_DOWN])?  " D " : " d ",
-                     (j & joy_masks[JOY_LEFT])?  " L " : " l ",
-                     (j & joy_masks[JOY_RIGHT])? " R " : " r ",
-                     (j & joy_masks[JOY_FIRE])?  " 1 " : "   ",
-                     (j & joy_masks[JOY_FIRE2])? " 2 " : "   ");
-#else
-            cprintf ("%2d: %-6s%-6s%-6s%-6s%-6s%-6s",
-                     i,
-                     (j & joy_masks[JOY_UP])?    "  up  " : " ---- ",
-                     (j & joy_masks[JOY_DOWN])?  " down " : " ---- ",
-                     (j & joy_masks[JOY_LEFT])?  " left " : " ---- ",
-                     (j & joy_masks[JOY_RIGHT])? "right " : " ---- ",
-                     (j & joy_masks[JOY_FIRE])?  " fire " : " ---- ",
-                     (j & joy_masks[JOY_FIRE2])? "fire2 " : " ---- ");
-#endif
-        }
-    }
-    return 0;
-}
diff --git a/testcode/lib/moddiv-test.c b/testcode/lib/moddiv-test.c
deleted file mode 100644 (file)
index b8ea19d..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-
-int main (void)
-{
-    int a, b;
-    int div, mod;
-
-    printf ("Please note that this program does an\n"
-            "exhaustive test for the division and\n"
-            "modulo operation and therefore runs for\n"
-            "almost ever. On my box, it's nearly two\n"
-            "days in warp mode of VICE.\n\n");
-
-    a = 0;
-    do {
-        b = 1;
-        do {
-            div = a / b;
-            mod = a % b;
-            if (div * b + mod != a) {
-                printf ("Found problems:\n"
-                        "  Result of %u / %u is %u\n"
-                        "  Result of %u %% %u is %u\n",
-                        a, b, div, a, b, mod);
-                return EXIT_FAILURE;
-            }
-            ++b;
-        } while (b != 0);
-        if ((a & 0xFF) == 0) {
-            printf ("%5u ", a);
-        }
-        ++a;
-    } while (a != 0);
-    return EXIT_SUCCESS;
-}
diff --git a/testcode/lib/mul-test.c b/testcode/lib/mul-test.c
deleted file mode 100644 (file)
index 2daf5aa..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/* mul-test.c -- Test the multiplication operator. */\r
-\r
-#include <time.h>\r
-#include <conio.h>\r
-#include <ctype.h>\r
-\r
-\r
-/* Number of elements in the progress bar. Use a power of 2, to avoid the\r
-** multiplication (which is about to be tested).\r
-*/\r
-#define BAR_ELEMENTS    32U\r
-\r
-#if defined(__CBM__)\r
-static const unsigned char revers_bar[8] = {\r
-    0, 0, 0, 0, 0, 1, 1, 1\r
-};\r
-static const unsigned char small_bar[8] = {\r
-    ' ', 0xa5, 0xb4, 0xb5, 0xa1, 0xb6, 0xaa, 0xa7\r
-};\r
-\r
-#elif defined(__ATARI__)\r
-#endif\r
-\r
-/* Screen co-ordinates for the progress meter */\r
-static unsigned char Width, Height;\r
-static unsigned char X, Y;\r
-\r
-static void ProgressMeter (unsigned Val)\r
-/* Print the progress bar. */\r
-{\r
-    gotoxy (X, Y);\r
-    cprintf (" %5lu/65536\r\n", (unsigned long) Val);\r
-    revers (1);\r
-    cclear (Val / (unsigned)(65536U / BAR_ELEMENTS));\r
-\r
-/* Commodore and Atari computers can show eight times greater precision. */\r
-#if defined(__CBM__)\r
-    Val = (Val / (unsigned)(65536U / BAR_ELEMENTS / 8)) % 8;\r
-    revers (revers_bar[Val]);\r
-    cputc (small_bar[Val]);\r
-\r
-#elif defined(__ATARI__)\r
-#endif\r
-\r
-    revers (0);\r
-}\r
-\r
-\r
-\r
-int main(void)\r
-{\r
-    char C;\r
-\r
-    /* Clock variables */\r
-    clock_t Ticks;\r
-    clock_t Wait;\r
-    unsigned Days;\r
-    unsigned Hours;\r
-    unsigned Minu;\r
-    unsigned Sec;\r
-    unsigned Milli;\r
-\r
-    /* Actual test variables */\r
-    register unsigned lhs = 0;\r
-    register unsigned rhs = 0;\r
-    register unsigned res;\r
-\r
-    /* Clear the screen, and output an informational message. */\r
-    clrscr ();\r
-    screensize (&Width, &Height);\r
-    cprintf ("This program does an exhaustive test of\r\n"\r
-             "the multiplication routine. It runs for\r\n"\r
-             "several days; so, please wait very\r\n"\r
-             "patiently (or, speed up your emulator).\r\n"\r
-             "\n"\r
-             "Progress: ");\r
-\r
-    /* Remember the current position for the progress bar */\r
-    X = wherex ();\r
-    Y = wherey ();\r
-\r
-    /* Mark the maximum limit of the bar. */\r
-    revers (1);\r
-    cputcxy (BAR_ELEMENTS, Y, ' ');\r
-    cputcxy (BAR_ELEMENTS, Y + 1, ' ');\r
-    revers (0);\r
-\r
-/* [Targets that have clock() will define CLOCKS_PER_SEC.] */\r
-#ifdef CLOCKS_PER_SEC\r
-\r
-    /* Start timing the test. */\r
-    Ticks = clock();\r
-#endif\r
-\r
-    do {\r
-\r
-        /* Update the progress bar */\r
-        ProgressMeter (lhs);\r
-\r
-/* Enable this to test the progress-meter code.\r
-** (And, run emulators at their maximun speed.)\r
-*/\r
-#if 0\r
-        continue;\r
-#endif\r
-\r
-        /* Do one row of tests */\r
-        res = 0;\r
-        do {\r
-            if (lhs * rhs != res) {\r
-#ifdef CLOCKS_PER_SEC\r
-                Wait = clock ();\r
-#endif\r
-                gotoxy (0, Y+3);\r
-                cprintf ("Error on %u * %u: %u != %u\r\n", lhs, rhs, lhs * rhs, res);\r
-                cprintf ("Press a key -- 'Q' to quit. ");\r
-                cursor (1);\r
-                C = toupper (cgetc ());\r
-                cclearxy (0, Y+3, Width);\r
-                cclearxy (0, Y+4, Width);\r
-\r
-#ifdef CLOCKS_PER_SEC\r
-\r
-                /* Don't time the user's interaction. */\r
-                Ticks += clock () - Wait;\r
-#endif\r
-\r
-                if (C == 'Q') {\r
-                    goto Done;\r
-                }\r
-            }\r
-\r
-            if (kbhit () && toupper (cgetc ()) == 'Q') {\r
-                goto Done;\r
-            }\r
-\r
-            res += lhs;\r
-        } while (++rhs != 0);\r
-\r
-    } while (++lhs != 0);\r
-\r
-Done:\r
-#ifdef CLOCKS_PER_SEC\r
-\r
-    /* Calculate the time used */\r
-    Ticks = clock() - Ticks;\r
-    Milli = ((Ticks % CLOCKS_PER_SEC) * 1000) / CLOCKS_PER_SEC;\r
-    Sec = (unsigned) (Ticks / CLOCKS_PER_SEC);\r
-    Minu = Sec / 60;\r
-    Hours = Minu / 60;\r
-    Days = Hours / 24;\r
-    Hours %= 24;\r
-    Minu %= 60;\r
-    Sec %= 60;\r
-\r
-    /* Print the time used */\r
-    gotoxy (0, Y+3);\r
-    cprintf ("Time used:\r\n"\r
-             " %u days,\r\n"\r
-             " %u hours,\r\n"\r
-             " %u minutes,\r\n"\r
-             " %u.%03u seconds.\n", Days, Hours, Minu, Sec, Milli);\r
-#endif\r
-\r
-    cprintf ("\rTap a key, to exit. ");\r
-    cgetc();\r
-    return 0;\r
-}\r
-\r
-\r
diff --git a/testcode/lib/pce/Makefile b/testcode/lib/pce/Makefile
deleted file mode 100644 (file)
index 1fee199..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-all: conio.pce
-
-conio.pce: conio.c
-       ../../../bin/cl65 -t pce conio.c --mapfile conio.map -o conio.pce
-
-clean:
-       $(RM) conio.pce
-       $(RM) conio.map
-
-test: conio.pce
-       mednafen -force_module pce conio.pce
-
diff --git a/testcode/lib/pce/conio.c b/testcode/lib/pce/conio.c
deleted file mode 100644 (file)
index d22fe58..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-
-#include <conio.h>
-#include <time.h>
-#include <joystick.h>
-#include <string.h>
-#include <stdlib.h>
-
-static int datavar = 10;
-
-void main(void)
-{
-        int stackvar = 42;
-        int i, j;
-        clock_t clk;
-        char* p;
-        unsigned char xsize, ysize, n;
-
-        joy_install(&joy_static_stddrv);
-
-        clrscr();
-        screensize(&xsize, &ysize);
-
-        cputs("hello world");
-        cputsxy(0, 2, "colors:" );
-        for (i = 0; i < 16; ++i) {
-                textcolor(i);
-                cputc('X');
-        }
-        textcolor(1);
-
-        gotoxy(0,4);
-        cprintf("datavar:  %02x\n\r", datavar);
-        cprintf("stackvar: %02x\n\r", stackvar);
-
-        j = joy_count();
-        gotoxy(0,9);
-        cprintf("Found %d Joysticks.", j);
-
-        for (i = 0; i < 4; ++i) {
-                gotoxy(0, 16 + i);
-                p = malloc(16);
-                memcpy(p, "0123456789abcdef", 16);
-                cprintf("alloced at: %04p - %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", p,
-                        p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7],
-                        p[8],p[9],p[10],p[11],p[12],p[13],p[14],p[15]
-                );
-        }
-
-        gotoxy(0,ysize - 1);
-        for (i = 0; i < xsize; ++i) {
-                cputc('0' + i % 10);
-        }
-
-        gotoxy(0,ysize - 2 - ((256 + xsize) / xsize));
-        for (i = 0; i < xsize; ++i) {
-                cputc('0' + i % 10);
-        }
-        for (i = 0; i < (xsize * 5); ++i) {
-                cputc('#');
-        }
-        gotoxy(0,ysize - 1 - ((256 + xsize) / xsize));
-        for (i = 0; i < 256; ++i) {
-                if ((i != '\n') && (i != '\r')) {
-                        cputc(i);
-                }
-        }
-
-        i = get_tv();
-        gotoxy(30,0);
-        cputs("TV Mode: ");
-        switch(i) {
-            case TV_NTSC:
-                    cputs("NTSC");
-                    break;
-            case TV_PAL:
-                    cputs("PAL");
-                    break;
-            case TV_OTHER:
-                    cputs("OTHER");
-                    break;
-        }
-        cprintf(" %dx%d", xsize, ysize);
-
-        for(;;) {
-                gotoxy(13,4);
-                cprintf("%02x", datavar);
-                gotoxy(13,5);
-                cprintf("%02x", stackvar);
-                ++datavar; ++stackvar;
-
-                gotoxy(0,7);
-                clk = clock();
-                cprintf("clock: %08lx", clk);
-
-                for (i = 0; i < 4; ++i) {
-                        gotoxy(0, 11 + i);
-                        j = joy_read (i);
-                        cprintf ("pad %d: %02x %-6s%-6s%-6s%-6s%-6s%-6s%-6s%-6s",
-                                i, j,
-                                (j & joy_masks[JOY_UP])?    "  up  " : " ---- ",
-                                (j & joy_masks[JOY_DOWN])?  " down " : " ---- ",
-                                (j & joy_masks[JOY_LEFT])?  " left " : " ---- ",
-                                (j & joy_masks[JOY_RIGHT])? "right " : " ---- ",
-                                (j & joy_masks[JOY_FIRE])?  " fire " : " ---- ",
-                                (j & joy_masks[JOY_FIRE2])? "fire2 " : " ---- ",
-                                (j & joy_masks[JOY_SELECT])? "select" : " ---- ",
-                                (j & joy_masks[JOY_RUN])?   " run  " : " ---- ");
-                }
-
-                gotoxy(xsize - 10, 3);
-                j = (n >> 5) & 1;
-                revers(j);
-                cputc(j ? 'R' : ' ');
-                cputs(" revers");
-                revers(0);
-
-                waitvblank();
-                ++n;
-        }
-        for(;;);
-}
diff --git a/testcode/lib/posixio-test.c b/testcode/lib/posixio-test.c
deleted file mode 100644 (file)
index 26d416a..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-#include <stdio.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-
-int Open (const char* Name, int Flags)
-{
-    int fd;
-    printf ("Opening %s: ", Name);
-    fd = open (Name, Flags);
-    printf ("%d\n", fd);
-    return fd;
-}
-
-
-
-void Write (int fd, const void* Buf, unsigned Size)
-{
-    int Res;
-    Res = write (fd, Buf, Size);
-    printf ("Writing %u bytes to %d: %d\n", Size, fd, Res);
-}
-
-
-
-int Read (int fd, void* Buf, unsigned Size)
-{
-    int Res;
-    Res = read (fd, Buf, Size);
-    printf ("Reading %u bytes from %d: %d\n", Size, fd, Res);
-    return Res > 0? Res : 0;
-}
-
-
-
-void Close (int fd)
-{
-    printf ("Closing %d: %d\n", fd, close (fd));
-}
-
-
-
-int main (void)
-{
-    int fd1, fd2;
-    int Res;
-    static const char text1[] = "This goes into file #1\n";
-    static const char text2[] = "This goes into file #2\n";
-    static const char text3[] = "This goes into file #3\n";
-    static const char text4[] = "This goes into file #4\n";
-    static char Buf[200];
-
-
-    fd1 = Open ("foobar1", O_WRONLY|O_CREAT|O_TRUNC);
-    fd2 = Open ("foobar2", O_WRONLY|O_CREAT|O_TRUNC);
-
-    Write (fd1, text1, sizeof (text1) - 1);
-    Write (fd2, text2, sizeof (text2) - 1);
-    Write (fd1, text1, sizeof (text1) - 1);
-    Write (fd2, text2, sizeof (text2) - 1);
-
-    Close (fd1);
-    Close (fd2);
-
-    fd1 = Open ("foobar3", O_WRONLY|O_CREAT|O_TRUNC);
-    fd2 = Open ("foobar4", O_WRONLY|O_CREAT|O_TRUNC);
-
-    Write (fd1, text3, sizeof (text3) - 1);
-    Write (fd2, text4, sizeof (text4) - 1);
-    Write (fd1, text3, sizeof (text3) - 1);
-    Write (fd2, text4, sizeof (text4) - 1);
-
-    Close (fd1);
-    Close (fd2);
-
-    fd1 = Open ("foobar1", O_RDONLY);
-    Res = Read (fd1, Buf, sizeof (Buf));
-    printf ("%.*s", Res, Buf);
-    Res = Read (fd1, Buf, sizeof (Buf));
-    Close (fd1);
-
-    return 0;
-}
-
-
diff --git a/testcode/lib/rename-test.c b/testcode/lib/rename-test.c
deleted file mode 100644 (file)
index 0e9160b..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/* rename-test.c
-**
-**
-** A simple test of the rename function.
-**
-** 2008-10-06, Greg King
-*/
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-static FILE* file;
-static int r;
-static char name1[16], name2[16];
-
-int main(void)
-{
-    /* Generate two temporary file-names that have a random, unused spelling. */
-    _randomize();
-    for (;;) {
-        r = rand();
-        sprintf(name1, "r%04.4u.1", (unsigned)r);
-        sprintf(name2, "r%04.4u.2", (unsigned)r);
-
-        /* Ensure that neither file-name exists. */
-        errno = 0;
-        file = fopen(name1, "r");
-        if (file != NULL) {
-            fclose(file);
-            continue;                   /* try a different spelling */
-        }
-
-        /* Make sure that fopen() failed for the right reason. */
-        if (errno != ENOENT) {
-            perror("Disk error with first name");
-            return EXIT_FAILURE;
-        }
-
-        errno = 0;
-        file = fopen(name2, "r");
-        if (file != NULL) {
-            fclose(file);
-            continue;
-        }
-        if (errno != ENOENT) {
-            perror("Disk error with second name");
-            return EXIT_FAILURE;
-        }
-
-        break;                          /* neither one exists; do next step */
-    }
-
-    /* Create the first file.
-    ** Close it without writing anything because only its name is important.
-    */
-    printf("Creating file: %s\n", name1);
-    file = fopen(name1, "w");
-    if (file == NULL) {
-        _poserror("Disk error making first file");
-        return EXIT_FAILURE;
-    }
-    fclose(file);
-
-    /* Verify that the file-name exists now. */
-    file = fopen(name1, "r");
-    if (file == NULL) {
-        _poserror("Cannot find first name");
-        return EXIT_FAILURE;
-    }
-    fclose(file);
-
-    /* Whew!  Finally, we get to the reason why this program exists:
-    ** Confirm that the first file-name can be changed into the second
-    ** file-name.
-    */
-    printf("Renaming %s to %s\n", name1, name2);
-    r = rename(name1, name2);
-    if (r < 0) {
-        _poserror("rename() failed");
-        return EXIT_FAILURE;
-    }
-
-    /* Verify that the first file-name no longer exists. */
-    file = fopen(name1, "r");
-    if (file != NULL) {
-        fclose(file);
-        _poserror("First name still exists");
-        return EXIT_FAILURE;
-    }
-
-    /* Verify that the second file-name exists now. */
-    file = fopen(name2, "r");
-    if (file == NULL) {
-        _poserror("Cannot find second name");
-        return EXIT_FAILURE;
-    }
-    fclose(file);
-
-    printf("Success!\n");
-
-    /* Delete the second (temporary) name. */
-    printf("Removing %s\n", name2);
-    r = remove(name2);
-    if (r < 0) {
-        _poserror("remove() failed");
-        return EXIT_FAILURE;
-    }
-
-    printf("rename() passed the test.\n");
-    return EXIT_SUCCESS;
-}
-
-
diff --git a/testcode/lib/scanf-test.c b/testcode/lib/scanf-test.c
deleted file mode 100644 (file)
index 9fce01b..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
-** scanf-test.c
-**
-** Tests that the scanf family of functions scans and converts its input data
-** correctly.
-**
-** Note:  When this program uses conio, it doesn't guard against printing off
-** the bottom of the screen.  So, you might have a problem on platforms with
-** "short" screens.
-**
-** 2005-01-26, Greg King
-*/
-
-/* Define USE_STDIO, when you want to use the stdio functions.
-** Do not define it, when you want to use the conio functions.
-*/
-/*
-#define USE_STDIO
-*/
-
-#include <stdio.h>
-#include <string.h>
-
-#ifdef USE_STDIO
-# define SCANF scanf
-# define PRINTF printf
-
-#else
-# include <conio.h>
-
-/* Unlike other conio input functions, cscanf() echoes what you type. */
-# define SCANF cscanf
-# define PRINTF cprintf
-#endif
-
-#define ARRAYSIZE(a) (sizeof (a) / sizeof (a)[0])
-
-static const struct {
-        const char *input, *format;
-        int rvalue;
-        enum TYPE {
-                INT,
-                CHAR
-                } type1;
-        union {
-                int nvalue;
-                const char *svalue;
-                } v1;
-        enum TYPE type2;
-        union {
-                int nvalue;
-                const char *svalue;
-                } v2;
-        } test_data[] = {
-/* Input sequences for character specifiers must be less than 80 characters
-** long.  These format strings are allowwed a maximum of two assignment
-** specifications.
-*/
-        /* Test that literals match, and that they aren't seen as conversions.
-        ** Test that integer specifiers can handle end-of-file.
-        */
-        {"qwerty   Dvorak", "qwerty  Dvorak", 0  , INT, {0}, INT, {0}},
-        {"qwerty"         , "qwerty  %d%i"  , EOF, INT, {0}, INT, {0}},
-        {"qwerty   "      , "qwerty  %d%i"  , EOF, INT, {0}, INT, {0}},
-
-        /* Test that integer specifiers scan properly. */
-        {"qwerty   a"     , "qwerty  %d%i", 0, INT, {0}    , INT, {0}},
-        {"qwerty   -"     , "qwerty  %d%i", 0, INT, {0}    , INT, {0}},
-        {"qwerty   -9"    , "qwerty  %d%i", 1, INT, {-9}   , INT, {0}},
-        {"qwerty   -95"   , "qwerty  %d%i", 1, INT, {-95}  , INT, {0}},
-        {"qwerty   -95a"  , "qwerty  %d%i", 1, INT, {-95}  , INT, {0}},
-        {"qwerty   -95a 1", "qwerty  %d%i", 1, INT, {-95}  , INT, {0}},
-        {"qwerty   -a"    , "qwerty  %d%i", 0, INT, {0}    , INT, {0}},
-        {"qwerty   -95 1" , "qwerty  %d%i", 2, INT, {-95}  , INT, {1}},
-        {"qwerty    95  2", "qwerty  %i"  , 1, INT, {95}   , INT, {0}},
-        {"qwerty   -95 +2", "qwerty  %x%o", 2, INT, {-0x95}, INT, {02}},
-        {"qwerty  0X9E 02", "qwerty  %i%i", 2, INT, {0x9e} , INT, {2}},
-        {"qwerty   095  2", "qwerty  %i%i", 2, INT, {0}    , INT, {95}},
-        {"qwerty   0e5  2", "qwerty  %i%i", 1, INT, {0}    , INT, {0}},
-
-        /* [String pointers are cast as (int),
-        ** in order to avoid cc65 warnings.]
-        */
-
-        /* Test that character specifiers can handle end-of-file. */
-        {"qwerty"   , "qwerty  %s%s"     , EOF, CHAR, {(int)""}, CHAR, {(int)""}},
-        {"qwerty   ", "qwerty  %s%s"     , EOF, CHAR, {(int)""}, CHAR, {(int)""}},
-        {"qwerty"   , "qwerty  %c%c"     , EOF, CHAR, {(int)""}, CHAR, {(int)""}},
-        {"qwerty   ", "qwerty  %c%c"     , EOF, CHAR, {(int)""}, CHAR, {(int)""}},
-        {"qwerty"   , "qwerty  %[ a-z]%c", EOF, CHAR, {(int)""}, CHAR, {(int)""}},
-        {"qwerty   ", "qwerty  %[ a-z]%c", EOF, CHAR, {(int)""}, CHAR, {(int)""}},
-        {"qwerty   ", "qwerty%s%s"       , EOF, CHAR, {(int)""}, CHAR, {(int)""}},
-
-        /* Test that character specifiers scan properly. */
-        {"123456qwertyasdfghzxcvbn!@#$%^QWERTYASDFGHZXCV"
-            "BN7890-=uiop[]\\jkl;'m,./&*()_+UIOP{}|JKL:\"M<>?",
-            "%79s%79s", 2,
-            CHAR, {(int)"123456qwertyasdfghzxcvbn!@#$%^QWERTYASDFGHZXCV"
-            "BN7890-=uiop[]\\jkl;'m,./&*()_+UIO"}, CHAR, {(int)"P{}|JKL:\"M<>?"}},
-        {"qwerty   ", "qwerty%c%c"     , 2, CHAR, {(int)" "}  , CHAR, {(int)" "}},
-        {"qwerty   ", "qwerty%2c%c"    , 2, CHAR, {(int)"  "} , CHAR, {(int)" "}},
-        {"qwerty   ", "qwerty%2c%2c"   , 1, CHAR, {(int)"  "} , CHAR, {(int)" "}},
-        {"qwerty   ", "qwerty%[ a-z]%c", 1, CHAR, {(int)"   "}, CHAR, {(int)""}},
-        {"qwerty  q", "qwerty%[ a-z]%c", 1, CHAR, {(int)"  q"}, CHAR, {(int)""}},
-        {"qwerty  Q", "qwerty%[ a-z]%c", 2, CHAR, {(int)"  "},  CHAR, {(int)"Q"}},
-        {"qwerty-QWERTY-", "%[q-ze-]%[-A-Z]" , 2, CHAR, {(int)"qwerty-"},
-            CHAR, {(int)"QWERTY-"}},
-
-        /* Test the space-separation of strings. */
-        {"qwerty qwerty"       , "qwerty%s%s", 1, CHAR, {(int)"qwerty"},
-            CHAR, {(int)""}},
-        {"qwerty qwerty Dvorak", "qwerty%s%s", 2, CHAR, {(int)"qwerty"},
-            CHAR, {(int)"Dvorak"}},
-
-        /* Test the mixxing of types. */
-        {"qwerty  abc3", "qwerty%s%X"      , 1, CHAR, {(int)"abc3"}  , INT , {0}},
-        {"qwerty  abc3", "qwerty%[ a-z]%X" , 2, CHAR, {(int)"  abc"} , INT , {3}},
-        {"qwerty  abc3", "qwerty%[ a-z3]%X", 1, CHAR, {(int)"  abc3"}, INT , {0}},
-        {"qwerty  abc3", "qwerty%[ A-Z]%X" , 2, CHAR, {(int)"  "}    , INT ,
-            {0xabc3}},
-        {"qwerty  3abc", "qwerty%i%[ a-z]" , 2, INT , {3}            , CHAR,
-            {(int)"abc"}},
-        {"qwerty  3abc", "qwerty%i%[ A-Z]" , 1, INT , {3}            , CHAR,
-            {(int)""}},
-
-        /* Test the character-count specifier. */
-        {"  95 5", "%n%i"  , 1, INT , {0}          , INT, {95}},
-        {"  a5 5", "%n%i"  , 0, INT , {0}          , INT, {0}},
-        {"  a5 5", "%x%n"  , 1, INT , {0xa5}       , INT, {4}},
-        {"  a5 5", " %4c%n", 1, CHAR, {(int)"a5 5"}, INT, {6}},
-        {" 05a9" , "%i%n"  , 1, INT , {5}          , INT, {3}},
-
-        /* Test assignment-suppression. */
-        {"  95 6", "%n%*i"  , 0, INT , {0}      , INT, {0}},
-        {"  a5 6", "%*x%n"  , 0, INT , {4}      , INT, {0}},
-        {"  a5 6", "%*x%n%o", 1, INT , {4}      , INT, {6}},
-        {"  a5 6", " %*4c%d", 0, CHAR, {(int)""}, INT, {0}},
-        {"The first number is 7.  The second number is 8.\n",
-            "%*[ .A-Za-z]%d%*[ .A-Za-z]%d", 2, INT, {7}, INT, {8}},
-        };
-
-/* Test the char, short, and long specification-modifiers. */
-static const struct {
-        const char *input, *format;
-        long value;
-        } type_data[] = {
-        {"+123456789", "%hhd", (signed char)123456789L},
-        {" 123456789", "%hd" , (unsigned short)123456789L},
-        {" 123456789", "%ld" ,  123456789L},
-        {"-123456789", "%lld", -123456789L},
-        };
-
-static void Pause(void) {
-#ifdef USE_STDIO
-        printf("\n");
-#else
-        cprintf("\r\nTap a key to see the next test. ");
-        cgetc();
-        clrscr();
-#endif
-        }
-
-int main(void) {
-        long n0;
-        unsigned t;
-        int c, n1 = 12345, n2, n3;
-        char s1[80], s2[80];
-        void *p1 = main, *p2 = main, *p3 = main, *p4 = main;
-
-#ifndef USE_STDIO
-        clrscr();
-        cursor(1);
-#endif
-
-        /* Test that scanf() can recognize percent-signs in the input.
-        ** Test that integer converters skip white-space.
-        ** Test that "%i" can scan a single zero digit (followed by EOF).
-        */
-        sscanf("%  \r\n\f\v\t  0", "%%%i", &n1);
-        if (n1 != 0)
-                PRINTF("sscanf()'s \"%%%%%%i\" couldn't scan either a \"%%\" "
-                       "or a single zero digit.\r\n\n");
-
-        /* Test scanf()'s return-value:  EOF if input ends before the first
-        ** conversion-attempt begins; an assignment-count, otherwise.
-        ** Test that scanf() properly converts and assigns the correct number
-        ** of arguments.
-        */
-        PRINTF("Testing scanf()'s return-value,\r\nconversions, and assignments...\r\n");
-        for (t = 0; t < ARRAYSIZE(test_data); ++t) {
-
-                /* Prefill the arguments with zeroes. */
-                n1 = n2 = 0;
-                memset(s1, '\0', sizeof s1);
-                memset(s2, '\0', sizeof s2);
-
-                c=sscanf(test_data[t].input, test_data[t].format,
-                         /* Avoid warning messages about different
-                         ** pointer-types, by casting them to void-pointers.
-                         */
-                         test_data[t].type1 == INT ? (void *)&n1 : (void *)s1,
-                         test_data[t].type2 == INT ? (void *)&n2 : (void *)s2);
-                if (c != test_data[t].rvalue)
-                        PRINTF("Test #%u returned %d instead of %d.\r\n",
-                               t + 1, c, test_data[t].rvalue);
-
-                if (test_data[t].type1 == INT) {
-                        if (test_data[t].v1.nvalue != n1)
-                                PRINTF("Test #%u assigned %i, instead of %i,\r\n"
-                                       "\tto the first argument.\r\n\n",
-                                       t + 1, n1, test_data[t].v1.nvalue);
-                        }
-                else {          /* test_data[t].type1 == CHAR */
-                        if (strcmp(test_data[t].v1.svalue, s1))
-                                PRINTF("Test #%u assigned\r\n\"%s\",\r\n"
-                                       "\tinstead of\r\n\"%s\",\r\n"
-                                       "\tto the first argument.\r\n\n",
-                                       t + 1, s1, test_data[t].v1.svalue);
-                        }
-
-                if (test_data[t].type2 == INT) {
-                        if (test_data[t].v2.nvalue != n2)
-                                PRINTF("Test #%u assigned %i, instead of %i,\r\n"
-                                       "\tto the second argument.\r\n\n",
-                                       t + 1, n2, test_data[t].v2.nvalue);
-                        }
-                else {          /* test_data[t].type2 == CHAR */
-                        if (strcmp(test_data[t].v2.svalue, s2))
-                                PRINTF("Test #%u assigned\r\n\"%s\",\r\n"
-                                       "\tinstead of\r\n\"%s\",\r\n"
-                                       "\tto the second argument.\r\n\n",
-                                       t + 1, s2, test_data[t].v2.svalue);
-                        }
-                }
-        Pause();
-
-        /* Test the char, short, and long specification-modifiers. */
-        PRINTF("Testing scanf()'s type-modifiers...\r\n");
-        for (t = 0; t < ARRAYSIZE(type_data); ++t) {
-                n0 = 0L;
-                sscanf(type_data[t].input, type_data[t].format, &n0);
-                if (type_data[t].value != n0)
-                        PRINTF("Test #%u assigned %li instead of %li.\r\n",
-                               t + 1, n0, type_data[t].value);
-                }
-        Pause();
-
-        /* Test that the pointer specification
-        ** can convert what printf() generates.
-        */
-        PRINTF("Testing \"%%p\"...\r\n");
-        sprintf(s1, "%p %p %p %p", NULL, NULL,
-                Pause,                  /* static (program) storage */
-                &c);                    /* automatic (stack) storage */
-        sscanf(s1, "%p%p%p %p", &p1, &p2, &p3, &p4);
-        if (p1 != NULL || p2 != NULL ||
-            p3 != (void *)Pause || p4 != (void *)&c)
-                PRINTF("p1 is %p, p2 is %p; they should be %p.\r\n"
-                       "scanf() assigned %p to p3, instead of %p.\r\n"
-                       "scanf() assigned %p to p4, instead of %p.\r\n",
-                       p1, p2, NULL,
-                       p3, Pause,
-                       p4, &c);
-
-        /* Test that scanf() can scan typed input.
-        ** Retest that "%i" can decode radix prefixxes.
-        */
-        do {
-                Pause();
-                PRINTF("Type 3 signed numbers,\r\n"
-                       "separated by white-space:\r\n"
-                       "octal decimal hexadecimal\r\n"
-                       "? ");
-                c = SCANF("%i %i %i", &n1, &n2, &n3);
-                PRINTF("\r\n\nscanf() returned %i.\r\n"
-                       "The numbers are:\r\n"
-                       " %+o octal,\r\n"
-                       " %+d decimal,\r\n"
-                       " %+#X hexadecimal.\r\n",
-                       c, n1, n2, n3);
-                } while (c > 0);
-        return 0;
-        }
diff --git a/testcode/lib/seek.c b/testcode/lib/seek.c
deleted file mode 100644 (file)
index 0cb1c6a..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
-** seek test program
-*/
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-
-int main(int argc, char **argv)
-{
-    char *filename,*x;
-    char buf[20];
-    FILE *file;
-    long pos;
-    off_t fsz;
-    int fd;
-
-    if (argc <= 1) {
-        printf("\nfilename: ");
-        x = fgets(buf,19,stdin);
-        printf("\n");
-        if (!x) {
-            return(0);
-        }
-        filename = x;
-    }
-    else {
-        filename = *(argv+1);
-    }
-
-    file = fopen(filename,"rb");
-    if (!file) {
-        fprintf(stderr,"cannot open %s: %s\n",filename,strerror(errno));
-        return(1);
-    }
-
-    if (fread(buf, 10, 1, file) != 1) {
-        fprintf(stderr,"short read, aborted\n");
-        fclose(file);
-        return(1);
-    }
-
-    pos = ftell(file);
-    if (pos == -1) {
-        fprintf(stderr,"ftell returned -1: %s\n", strerror(errno));
-        fclose(file);
-        return(1);
-    }
-
-    printf("reading 10 bytes from file\n");
-    printf("current file pos: %ld\n", pos);
-
-    printf("get file size (lseek): ");
-    fd = *(char *)file;   /* kids, don't do this at home */
-    fsz = lseek(fd, 0, SEEK_END);
-    if (fsz == -1) {
-        fprintf(stderr,"lseek returned -1: %s\n", strerror(errno));
-        fclose(file);
-        return(1);
-    }
-    printf("%ld (fd = %d)\n", (long)fsz, fd);
-
-    printf("get file size (fseek): ");
-    pos = fseek(file, 0, SEEK_END);
-    if (pos != 0) {
-        fprintf(stderr,"fseek returned -1: %s\n", strerror(errno));
-        fclose(file);
-        return(1);
-    }
-
-    pos = ftell(file);
-    if (pos == -1) {
-        fprintf(stderr,"ftell returned -1: %s\n", strerror(errno));
-        fclose(file);
-        return(1);
-    }
-    printf("%ld\n",pos);
-
-    printf("positioning at offset 100: ");
-    pos = fseek(file, 100, SEEK_SET);
-    if (pos != 0) {
-        fprintf(stderr,"fseek returned -1: %s\n", strerror(errno));
-        fclose(file);
-        return(1);
-    }
-    pos = ftell(file);
-    if (pos == -1) {
-        fprintf(stderr,"ftell returned -1: %s\n", strerror(errno));
-        fclose(file);
-        return(1);
-    }
-    if (pos == 100) {
-        printf("Ok\n");
-    }
-    else {
-        printf("failed! cur pos = %ld\n",pos);
-        fclose(file);
-        return(1);
-    }
-
-    printf("seeking back 44 bytes: ");
-    pos = fseek(file, -44, SEEK_CUR);
-    if (pos != 0) {
-        fprintf(stderr,"fseek returned -1: %s\n", strerror(errno));
-        fclose(file);
-        return(1);
-    }
-    pos = ftell(file);
-    if (pos == -1) {
-        fprintf(stderr,"ftell returned -1: %s\n", strerror(errno));
-        fclose(file);
-        return(1);
-    }
-    if (pos == 56) {
-        printf("Ok\n");
-    }
-    else {
-        printf("failed! cur pos = %ld\n",pos);
-        fclose(file);
-        return(1);
-    }
-
-    printf("seeking forward 111 bytes: ");
-    pos = fseek(file, 111, SEEK_CUR);
-    if (pos != 0) {
-        fprintf(stderr,"fseek returned -1: %s\n", strerror(errno));
-        fclose(file);
-        return(1);
-    }
-    pos = ftell(file);
-    if (pos == -1) {
-        fprintf(stderr,"ftell returned -1: %s\n", strerror(errno));
-        fclose(file);
-        return(1);
-    }
-    if (pos == 167) {
-        printf("Ok\n");
-    }
-    else {
-        printf("failed! cur pos = %ld\n",pos);
-        fclose(file);
-        return(1);
-    }
-
-    printf("seeking 13 bytes before eof: ");
-    pos = fseek(file, -13, SEEK_END);
-    if (pos != 0) {
-        fprintf(stderr,"fseek returned -1: %s\n", strerror(errno));
-        fclose(file);
-        return(1);
-    }
-    pos = ftell(file);
-    if (pos == -1) {
-        fprintf(stderr,"ftell returned -1: %s\n", strerror(errno));
-        fclose(file);
-        return(1);
-    }
-    if (pos == fsz - 13) {
-        printf("Ok\n");
-    }
-    else {
-        printf("failed! cur pos = %ld\n",pos);
-        fclose(file);
-        return(1);
-    }
-
-    printf("seeking before sof:\n\t");
-    pos = fseek(file, -fsz, SEEK_CUR);
-    if (pos != 0) {
-        printf("Ok, error %s\n", strerror(errno));
-    }
-    else {
-        printf("NOT OK, no error\n");
-    }
-
-    fclose(file);
-    return(0);
-}
diff --git a/testcode/lib/ser-test.c b/testcode/lib/ser-test.c
deleted file mode 100644 (file)
index 6e3f5fc..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <serial.h>
-#include <conio.h>
-#include <dbg.h>
-
-
-#if defined(__C64__)
-#define DRIVERNAME      "c64-swlink.ser"
-#elif defined(__C128__)
-#define DRIVERNAME      "c128-swlink.ser"
-#elif defined(__PLUS4__)
-#define DRIVERNAME      "plus4-stdser.ser"
-#elif defined(__CBM610__)
-#define DRIVERNAME      "cbm610-std.ser"
-#elif defined(__APPLE2ENH__)
-#define DRIVERNAME      "a2e.ssc.ser"
-#elif defined(__APPLE2__)
-#define DRIVERNAME      "a2.ssc.ser"
-#elif defined(__ATARIXL__)
-#define DRIVERNAME      "atrxrdev.ser"
-#elif defined(__ATARI__)
-#define DRIVERNAME      "atrrdev.ser"
-#else
-#define DRIVERNAME      "unknown"
-#error "Unknown target system"
-#endif
-
-
-static const struct ser_params Params = {
-    SER_BAUD_9600,      /* Baudrate */
-    SER_BITS_8,         /* Number of data bits */
-    SER_STOP_1,         /* Number of stop bits */
-    SER_PAR_NONE,       /* Parity setting */
-    SER_HS_HW           /* Type of handshake to use */
-};
-
-
-
-static void CheckError (const char* Name, unsigned char Error)
-{
-    if (Error != SER_ERR_OK) {
-        fprintf (stderr, "%s: %d\n", Name, Error);
-        exit (EXIT_FAILURE);
-    }
-}
-
-
-int main (void)
-{
-    char Res;
-    char C;
-    CheckError ("ser_load_driver", ser_load_driver (DRIVERNAME));
-    CheckError ("ser_open", ser_open (&Params));
-    while (1) {
-        if (kbhit ()) {
-            C = cgetc ();
-            if (C == '1') {
-                break;
-            } else {
-                CheckError ("ser_put", ser_put (C));
-                printf ("%c", C);
-            }
-        }
-        Res = ser_get (&C);
-        if (Res != SER_ERR_NO_DATA) {
-            CheckError ("ser_get", Res);
-            printf ("%c", C);
-        }
-    }
-    CheckError ("ser_unload", ser_unload ());
-
-    return EXIT_SUCCESS;
-}
diff --git a/testcode/lib/shift-test.c b/testcode/lib/shift-test.c
deleted file mode 100644 (file)
index 5712f45..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-
-
-
-static unsigned UnsignedShiftLeft1 (unsigned Val)
-/* Shift an unsigned left by 1 */
-{
-    __AX__ = Val;
-    asm ("stx tmp1");
-    asm ("asl a");
-    asm ("rol tmp1");
-    asm ("ldx tmp1");
-    return __AX__;
-}
-
-
-
-static unsigned UnsignedShiftRight1 (unsigned Val)
-/* Shift an unsigned right by 1 */
-{
-    __AX__ = Val;
-    asm ("stx tmp1");
-    asm ("lsr tmp1");
-    asm ("ror a");
-    asm ("ldx tmp1");
-    return __AX__;
-}
-
-
-
-static int SignedShiftRight1 (int Val)
-/* Shift a signed right by 1 */
-{
-    __AX__ = Val;
-    asm ("stx tmp1");
-    asm ("cpx #$80");
-    asm ("ror tmp1");
-    asm ("ror a");
-    asm ("ldx tmp1");
-    return __AX__;
-}
-
-
-
-static void TestUnsignedLeftShift (void)
-/* Test left shift. This is identical for signed and unsigned ints */
-{
-    unsigned L, R, V;
-    printf ("Testing unsigned left shift:\n");
-    L = 0;
-    do {
-        V = L;
-        for (R = 0; R < 16; ++R) {
-            /* Check it */
-            if ((L << R) != V) {
-                fprintf (stderr,
-                         "Failed: %u << %u != %u (%u)\n",
-                         L, R, V, L << R);
-                exit (1);
-            }
-            V = UnsignedShiftLeft1 (V);
-        }
-        if ((L & 0xFF) == 0) {
-            printf ("%04X ", L);
-        }
-    } while (++L != 0);
-    printf ("\n");
-}
-
-
-
-static void TestUnsignedRightShift (void)
-/* Test unsigned right shift. */
-{
-    unsigned L, R, V;
-    printf ("Testing unsigned right shift:\n");
-    L = 0;
-    do {
-        V = L;
-        for (R = 0; R < 16; ++R) {
-            /* Check it */
-            if ((L >> R) != V) {
-                fprintf (stderr,
-                         "Failed: %u >> %u != %u (%u)\n",
-                         L, R, V, L >> R);
-                exit (1);
-            }
-            V = UnsignedShiftRight1 (V);
-        }
-        if ((L & 0xFF) == 0) {
-            printf ("%04X ", L);
-        }
-    } while (++L != 0);
-    printf ("\n");
-}
-
-
-
-static void TestSignedRightShift (void)
-/* Test signed right shift. */
-{
-    int L, R, V;
-    printf ("Testing signed right shift:\n");
-    L = 0;
-    do {
-        V = L;
-        for (R = 0; R < 16; ++R) {
-            /* Check it */
-            if ((L >> R) != V) {
-                fprintf (stderr,
-                         "Failed: %d >> %d != %d (%d)\n",
-                         L, R, V, L >> R);
-                exit (1);
-            }
-            V = SignedShiftRight1 (V);
-        }
-        if ((L & 0xFF) == 0) {
-            printf ("%04X ", L);
-        }
-    } while (++L != 0);
-    printf ("\n");
-}
-
-
-
-int main (void)
-{
-    TestUnsignedLeftShift ();
-    TestUnsignedRightShift ();
-    TestSignedRightShift ();
-    printf ("\nOk!\n");
-
-    return 0;
-}
diff --git a/testcode/lib/signal-test.c b/testcode/lib/signal-test.c
deleted file mode 100644 (file)
index 4e34a28..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <signal.h>
-
-
-void __fastcall__ sighandler (int sig)
-{
-    printf ("Got signal #%d\n", sig);
-}
-
-
-
-int main (void)
-{
-    if (signal (SIGSEGV, sighandler) == SIG_ERR) {
-        printf ("signal failure %d: %s\n", errno, strerror (errno));
-        return 1;
-    }
-    printf ("About to raise SIGSEGV...\n");
-    raise (SIGSEGV);
-    printf ("Back from signal handler\n");
-    printf ("About to raise SIGILL...\n");
-    raise (SIGILL);
-    printf ("Back from signal handler\n");
-    return 0;
-}
-
-
diff --git a/testcode/lib/snprintf-test.c b/testcode/lib/snprintf-test.c
deleted file mode 100644 (file)
index d3af47d..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
-** Test a function that formats and writes characters into a string buffer.
-** This program does not test formatting.  It tests some behaviors that are
-** specific to the buffer.  It tests that certain conditions are handled
-** properly.
-**
-** 2015-07-17, Greg King
-*/
-
-#include <conio.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-
-static const char format[] = "1234567890\nabcdefghijklmnopqrstuvwxyz\n%u\n%s\n\n";
-#define FORMAT_SIZE (sizeof format - 2u - 2u - 1u)
-
-#define arg1 12345u
-#define ARG1_SIZE (5u)
-
-static const char arg2[] = "!@#$%^&*()-+";
-#define ARG2_SIZE (sizeof arg2 - 1u)
-
-#define STRING_SIZE (FORMAT_SIZE + ARG1_SIZE + ARG2_SIZE)
-
-static char buf[256];
-static int size;
-
-
-static void fillbuf(void)
-{
-    memset(buf, 0xFF, sizeof buf - 1u);
-    buf[sizeof buf - 1u] = '\0';
-}
-
-
-unsigned char main(void)
-{
-    static unsigned char failures = 0;
-
-    /* Show what sprintf() should create. */
-
-    if ((size = printf(format, arg1, arg2)) != STRING_SIZE) {
-        ++failures;
-        printf("printf() gave the wrong size: %d.\n", size);
-    }
-
-    /* Test the normal behavior of sprintf(). */
-
-    fillbuf();
-    size = sprintf(buf, format, arg1, arg2);
-    fputs(buf, stdout);
-    if (size != STRING_SIZE) {
-        ++failures;
-        printf("sprintf() gave the wrong size: %d.\n", size);
-    }
-
-    /* Test the normal behavior of snprintf(). */
-
-    fillbuf();
-    size = snprintf(buf, sizeof buf, format, arg1, arg2);
-    fputs(buf, stdout);
-    if (size != STRING_SIZE) {
-        ++failures;
-        printf("snprintf(sizeof buf) gave the wrong size:\n %d.\n", size);
-    }
-
-    /* Does snprintf() return the full-formatted size even when the buffer
-    ** is short?  Does it write beyond the end of that buffer?
-    */
-
-    fillbuf();
-    size = snprintf(buf, STRING_SIZE - 5u, format, arg1, arg2);
-    if (size != STRING_SIZE) {
-        ++failures;
-        printf("snprintf(STRING_SIZE-5) gave the wrong size:\n %d.\n", size);
-    }
-    if (buf[STRING_SIZE - 5u - 1u] != '\0' || buf[STRING_SIZE - 5u] != 0xFF) {
-        ++failures;
-        printf("snprintf(STRING_SIZE-5) wrote beyond\n the end of the buffer.\n");
-    }
-
-    /* Does snprintf() detect a buffer size that is too big? */
-
-    fillbuf();
-    errno = 0;
-    size = snprintf(buf, 0x8000, format, arg1, arg2);
-    if (size >= 0) {
-        ++failures;
-        printf("snprintf(0x8000) didn't give an error:\n %d; errno=%d.\n", size, errno);
-    } else {
-        printf("snprintf(0x8000) did give an error:\n errno=%d.\n", errno);
-    }
-    if (buf[0] != 0xFF) {
-        ++failures;
-        printf("snprintf(0x8000) wrote into the buffer.\n");
-    }
-
-    /* snprintf() must measure the length of the formatted output even when the
-    ** buffer size is zero.  But, it must not touch the buffer.
-    */
-
-    fillbuf();
-    size = snprintf(buf, 0, format, arg1, arg2);
-    if (size != STRING_SIZE) {
-        ++failures;
-        printf("snprintf(0) gave the wrong size:\n %d.\n", size);
-    }
-    if (buf[0] != 0xFF) {
-        ++failures;
-        printf("snprintf(0) wrote into the buffer.\n");
-    }
-
-    /* Does sprintf() detect a zero buffer-pointer? */
-
-    errno = 0;
-    size = sprintf(NULL, format, arg1, arg2);
-    if (size >= 0) {
-        ++failures;
-        printf("sprintf(NULL) didn't give an error:\n %d; errno=%d.\n", size, errno);
-    } else {
-        printf("sprintf(NULL) did give an error:\n errno=%d.\n", errno);
-    }
-
-    /* snprintf() must measure the length of the formatted output even when the
-    ** buffer size is zero.  A zero pointer is not an error, in that case.
-    */
-
-    size = snprintf(NULL, 0, format, arg1, arg2);
-    if (size != STRING_SIZE) {
-        ++failures;
-        printf("snprintf(NULL,0) gave the wrong size:\n %d.\n", size);
-    }
-
-    if (failures != 0) {
-        printf("There were %u", failures);
-    } else {
-        printf("There were no");
-    }
-    printf(" failures.\nTap a key. ");
-    cgetc();
-
-    return failures;
-}
diff --git a/testcode/lib/sprintf-test.c b/testcode/lib/sprintf-test.c
deleted file mode 100644 (file)
index 55354be..0000000
+++ /dev/null
@@ -1,577 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-#if defined(__CC65__)
-#include <conio.h>
-#endif
-
-
-/* Flag to #ifdef the tests out that crash the old implementation */
-/*#define NOCRASH         1 */
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-/* Struct used to test the 'n' conversion specifier. It is machine dependent /
-** not portable.
-*/
-typedef union WriteCount WriteCount;
-union WriteCount {
-    signed char C;
-    int         I;
-    long        L;
-};
-
-/* Count the number of tests and the number of failures */
-static unsigned Tests = 0;
-static unsigned Failures = 0;
-
-
-
-/*****************************************************************************/
-/*                                   Code                                    */
-/*****************************************************************************/
-
-
-
-static void OneTest (int Line, const char* RString, int RCount, const char* Format, ...)
-/* Test one conversion. Line is the line number (to make the life of the
-** tester easier), RString the expected result and RCount the expected return
-** count. The other parameters are used for formatting.
-*/
-{
-    int Count;
-    char Buf[128];
-    va_list ap;
-
-    /* Count the number of tests */
-    ++Tests;
-
-    /* Format the string using the given arguments */
-    va_start (ap, Format);
-    Count = vsprintf (Buf, Format, ap);
-    va_end (ap);
-
-    /* Check the result */
-    if (Count != RCount || strcmp (Buf, RString) != 0) {
-        ++Failures;
-        printf ("%3d: \"%s\" (%d)\n"
-                "     \"%s\" (%d)\n",
-                Line, Buf, Count, RString, RCount);
-    }
-}
-
-
-
-static void WriteTest (int Line, const char* Format, WriteCount* W, long Count)
-/* Test one write conversion. Line is the line number (to make the life of the
-** tester easier), Format is the format specification. W is a WriteCount
-** variable and Count is the expected result.
-*/
-{
-    /* Clear the counter in full length */
-    W->L = 0x5A5A5A5AL;
-
-    /* Format the string using the given arguments */
-    OneTest (Line, "4200", 4, Format, 4200, W);
-
-    /* Check the counter */
-    if (W->L != Count) {
-        ++Failures;
-        printf ("%3d: n = 0x%08lX\n"
-                "     n = 0x%08lX\n",
-                Line, W->L, Count);
-    }
-}
-
-
-
-int main (void)
-{
-    WriteCount W;
-
-
-    /* The one and only starter to begin with ... */
-    OneTest (__LINE__, "hello, world",            12, "hello, world");
-
-    /* Duplicate percent signs are used to output single ones */
-    OneTest (__LINE__, "hello % %",                9, "hello %% %%");
-
-    /* Simple conversions */
-    OneTest (__LINE__, "u",                        1, "%c", 'u');
-    OneTest (__LINE__, "4200",                     4, "%d", 4200);
-    OneTest (__LINE__, "-4200",                    5, "%d", -4200);
-    OneTest (__LINE__, "4200",                     4, "%i", 4200);
-    OneTest (__LINE__, "-4200",                    5, "%i", -4200);
-    OneTest (__LINE__, "10150",                    5, "%o", 4200U);
-    OneTest (__LINE__, "167630",                   6, "%o", -4200U);
-    OneTest (__LINE__, "hello, world",            12, "hello, %s", "world");
-    OneTest (__LINE__, "4200",                     4, "%u", 4200U);
-    OneTest (__LINE__, "61336",                    5, "%u", -4200U);
-    OneTest (__LINE__, "1068",                     4, "%x", 4200U);
-    OneTest (__LINE__, "ef98",                     4, "%x", -4200U);
-    OneTest (__LINE__, "1068",                     4, "%X", 4200U);
-    OneTest (__LINE__, "EF98",                     4, "%X", -4200U);
-
-    /* Simple conversions with special values */
-    OneTest (__LINE__, "\0",                       1, "%c", '\0');
-    OneTest (__LINE__, "0",                        1, "%d", 0);
-    OneTest (__LINE__, "0",                        1, "%o", 0U);
-    OneTest (__LINE__, "hello, ",                  7, "hello, %s", "");
-    OneTest (__LINE__, "0",                        1, "%u", 0U);
-    OneTest (__LINE__, "0",                        1, "%x", 0U);
-
-    /* 'h' modifier */
-    OneTest (__LINE__, "4200",                     4, "%hd", 4200);
-    OneTest (__LINE__, "-4200",                    5, "%hd", -4200);
-    OneTest (__LINE__, "4200",                     4, "%hi", 4200);
-    OneTest (__LINE__, "-4200",                    5, "%hi", -4200);
-    OneTest (__LINE__, "10150",                    5, "%ho", 4200U);
-    OneTest (__LINE__, "167630",                   6, "%ho", -4200U);
-    OneTest (__LINE__, "4200",                     4, "%hu", 4200U);
-    OneTest (__LINE__, "61336",                    5, "%hu", -4200U);
-    OneTest (__LINE__, "1068",                     4, "%hx", 4200U);
-    OneTest (__LINE__, "ef98",                     4, "%hx", -4200U);
-    OneTest (__LINE__, "1068",                     4, "%hX", 4200U);
-    OneTest (__LINE__, "EF98",                     4, "%hX", -4200U);
-
-    /* 'hh' modifier */
-    OneTest (__LINE__, "104",                      3, "%hhd", 4200);
-    OneTest (__LINE__, "-104",                     4, "%hhd", -4200);
-    OneTest (__LINE__, "104",                      3, "%hhi", 4200);
-    OneTest (__LINE__, "-104",                     4, "%hhi", -4200);
-    OneTest (__LINE__, "150",                      3, "%hho", 4200U);
-    OneTest (__LINE__, "230",                      3, "%hho", -4200U);
-    OneTest (__LINE__, "104",                      3, "%hhu", 4200U);
-    OneTest (__LINE__, "152",                      3, "%hhu", -4200U);
-    OneTest (__LINE__, "68",                       2, "%hhx", 4200U);
-    OneTest (__LINE__, "98",                       2, "%hhx", -4200U);
-    OneTest (__LINE__, "68",                       2, "%hhX", 4200U);
-    OneTest (__LINE__, "98",                       2, "%hhX", -4200U);
-
-    /* 'j' modifier */
-    OneTest (__LINE__, "4200123",                  7, "%jd", 4200123L);
-    OneTest (__LINE__, "-4200123",                 8, "%jd", -4200123L);
-    OneTest (__LINE__, "4200123",                  7, "%ji", 4200123L);
-    OneTest (__LINE__, "-4200123",                 8, "%ji", -4200123L);
-    OneTest (__LINE__, "20013273",                 8, "%jo", 4200123UL);
-    OneTest (__LINE__, "37757764505",             11, "%jo", -4200123UL);
-    OneTest (__LINE__, "4200123",                  7, "%ju", 4200123UL);
-    OneTest (__LINE__, "4290767173",              10, "%ju", -4200123UL);
-    OneTest (__LINE__, "4016bb",                   6, "%jx", 4200123UL);
-    OneTest (__LINE__, "ffbfe945",                 8, "%jx", -4200123UL);
-    OneTest (__LINE__, "4016BB",                   6, "%jX", 4200123UL);
-    OneTest (__LINE__, "FFBFE945",                 8, "%jX", -4200123UL);
-
-    /* 'l' modifier */
-    OneTest (__LINE__, "4200123",                  7, "%ld", 4200123L);
-    OneTest (__LINE__, "-4200123",                 8, "%ld", -4200123L);
-    OneTest (__LINE__, "4200123",                  7, "%li", 4200123L);
-    OneTest (__LINE__, "-4200123",                 8, "%li", -4200123L);
-    OneTest (__LINE__, "20013273",                 8, "%lo", 4200123UL);
-    OneTest (__LINE__, "37757764505",             11, "%lo", -4200123UL);
-    OneTest (__LINE__, "4200123",                  7, "%lu", 4200123UL);
-    OneTest (__LINE__, "4290767173",              10, "%lu", -4200123UL);
-    OneTest (__LINE__, "4016bb",                   6, "%lx", 4200123UL);
-    OneTest (__LINE__, "ffbfe945",                 8, "%lx", -4200123UL);
-    OneTest (__LINE__, "4016BB",                   6, "%lX", 4200123UL);
-    OneTest (__LINE__, "FFBFE945",                 8, "%lX", -4200123UL);
-
-    /* 't' modifier */
-    OneTest (__LINE__, "4200",                     4, "%td", 4200);
-    OneTest (__LINE__, "-4200",                    5, "%td", -4200);
-    OneTest (__LINE__, "4200",                     4, "%ti", 4200);
-    OneTest (__LINE__, "-4200",                    5, "%ti", -4200);
-    OneTest (__LINE__, "10150",                    5, "%to", 4200U);
-    OneTest (__LINE__, "167630",                   6, "%to", -4200U);
-    OneTest (__LINE__, "4200",                     4, "%tu", 4200U);
-    OneTest (__LINE__, "61336",                    5, "%tu", -4200U);
-    OneTest (__LINE__, "1068",                     4, "%tx", 4200U);
-    OneTest (__LINE__, "ef98",                     4, "%tx", -4200U);
-    OneTest (__LINE__, "1068",                     4, "%tX", 4200U);
-    OneTest (__LINE__, "EF98",                     4, "%tX", -4200U);
-
-    /* 'z' modifier */
-    OneTest (__LINE__, "4200",                     4, "%zd", 4200);
-    OneTest (__LINE__, "-4200",                    5, "%zd", -4200);
-    OneTest (__LINE__, "4200",                     4, "%zi", 4200);
-    OneTest (__LINE__, "-4200",                    5, "%zi", -4200);
-    OneTest (__LINE__, "10150",                    5, "%zo", 4200U);
-    OneTest (__LINE__, "167630",                   6, "%zo", -4200U);
-    OneTest (__LINE__, "4200",                     4, "%zu", 4200U);
-    OneTest (__LINE__, "61336",                    5, "%zu", -4200U);
-    OneTest (__LINE__, "1068",                     4, "%zx", 4200U);
-    OneTest (__LINE__, "ef98",                     4, "%zx", -4200U);
-    OneTest (__LINE__, "1068",                     4, "%zX", 4200U);
-    OneTest (__LINE__, "EF98",                     4, "%zX", -4200U);
-
-    /* '+' forces a sign for signed conversions */
-    OneTest (__LINE__, "u",                        1, "%+c", 'u');
-    OneTest (__LINE__, "+4200",                    5, "%+d", 4200);
-    OneTest (__LINE__, "-4200",                    5, "%+d", -4200);
-    OneTest (__LINE__, "+4200",                    5, "%+i", 4200);
-    OneTest (__LINE__, "-4200",                    5, "%+i", -4200);
-    OneTest (__LINE__, "10150",                    5, "%+o", 4200U);
-    OneTest (__LINE__, "167630",                   6, "%+o", -4200U);
-    OneTest (__LINE__, "hello, world",            12, "%+s", "hello, world");
-    OneTest (__LINE__, "4200",                     4, "%+u", 4200U);
-    OneTest (__LINE__, "61336",                    5, "%+u", -4200U);
-    OneTest (__LINE__, "1068",                     4, "%+x", 4200U);
-    OneTest (__LINE__, "ef98",                     4, "%+x", -4200U);
-    OneTest (__LINE__, "1068",                     4, "%+X", 4200U);
-    OneTest (__LINE__, "EF98",                     4, "%+X", -4200U);
-
-    /* ' ': If the first character of a signed conversion is not a sign, or if
-    **      a signed conversion results in no characters, a space is prefixed
-    **      to the result.
-    */
-    OneTest (__LINE__, "u",                        1, "% c", 'u');
-    OneTest (__LINE__, " 4200",                    5, "% d", 4200);
-    OneTest (__LINE__, "-4200",                    5, "% d", -4200);
-    OneTest (__LINE__, " 4200",                    5, "% i", 4200);
-    OneTest (__LINE__, "-4200",                    5, "% i", -4200);
-    OneTest (__LINE__, "10150",                    5, "% o", 4200U);
-    OneTest (__LINE__, "167630",                   6, "% o", -4200U);
-    OneTest (__LINE__, "hello, world",            12, "% s", "hello, world");
-    OneTest (__LINE__, "4200",                     4, "% u", 4200U);
-    OneTest (__LINE__, "61336",                    5, "% u", -4200U);
-    OneTest (__LINE__, "1068",                     4, "% x", 4200U);
-    OneTest (__LINE__, "ef98",                     4, "% x", -4200U);
-    OneTest (__LINE__, "1068",                     4, "% X", 4200U);
-    OneTest (__LINE__, "EF98",                     4, "% X", -4200U);
-
-    /* If the ' ' and '+' flags both appear, the ' ' flag is ignored */
-    OneTest (__LINE__, "u",                        1, "% +c", 'u');
-    OneTest (__LINE__, "+4200",                    5, "% +d", 4200);
-    OneTest (__LINE__, "-4200",                    5, "% +d", -4200);
-    OneTest (__LINE__, "+4200",                    5, "% +i", 4200);
-    OneTest (__LINE__, "-4200",                    5, "% +i", -4200);
-    OneTest (__LINE__, "10150",                    5, "% +o", 4200U);
-    OneTest (__LINE__, "167630",                   6, "% +o", -4200U);
-    OneTest (__LINE__, "hello, world",            12, "% +s", "hello, world");
-    OneTest (__LINE__, "4200",                     4, "% +u", 4200U);
-    OneTest (__LINE__, "61336",                    5, "% +u", -4200U);
-    OneTest (__LINE__, "1068",                     4, "% +x", 4200U);
-    OneTest (__LINE__, "ef98",                     4, "% +x", -4200U);
-    OneTest (__LINE__, "1068",                     4, "% +X", 4200U);
-    OneTest (__LINE__, "EF98",                     4, "% +X", -4200U);
-
-    /* Field width given */
-    OneTest (__LINE__, "              u",         15, "%15c", 'u');
-    OneTest (__LINE__, "           4200",         15, "%15d", 4200);
-    OneTest (__LINE__, "          -4200",         15, "%15d", -4200);
-    OneTest (__LINE__, "           4200",         15, "%15i", 4200);
-    OneTest (__LINE__, "          -4200",         15, "%15i", -4200);
-    OneTest (__LINE__, "          10150",         15, "%15o", 4200U);
-    OneTest (__LINE__, "         167630",         15, "%15o", -4200U);
-    OneTest (__LINE__, "   hello, world",         15, "%15s", "hello, world");
-    OneTest (__LINE__, "           4200",         15, "%15u", 4200U);
-    OneTest (__LINE__, "          61336",         15, "%15u", -4200U);
-    OneTest (__LINE__, "           1068",         15, "%15x", 4200U);
-    OneTest (__LINE__, "           ef98",         15, "%15x", -4200U);
-    OneTest (__LINE__, "           1068",         15, "%15X", 4200U);
-    OneTest (__LINE__, "           EF98",         15, "%15X", -4200U);
-
-    /* Field width given as separate argument */
-    OneTest (__LINE__, "              u",         15, "%*c", 15, 'u');
-    OneTest (__LINE__, "           4200",         15, "%*d", 15, 4200);
-    OneTest (__LINE__, "          -4200",         15, "%*d", 15, -4200);
-    OneTest (__LINE__, "           4200",         15, "%*i", 15, 4200);
-    OneTest (__LINE__, "          -4200",         15, "%*i", 15, -4200);
-    OneTest (__LINE__, "          10150",         15, "%*o", 15, 4200U);
-    OneTest (__LINE__, "         167630",         15, "%*o", 15, -4200U);
-    OneTest (__LINE__, "   hello, world",         15, "%*s", 15, "hello, world");
-    OneTest (__LINE__, "           4200",         15, "%*u", 15, 4200U);
-    OneTest (__LINE__, "          61336",         15, "%*u", 15, -4200U);
-    OneTest (__LINE__, "           1068",         15, "%*x", 15, 4200U);
-    OneTest (__LINE__, "           ef98",         15, "%*x", 15, -4200U);
-    OneTest (__LINE__, "           1068",         15, "%*X", 15, 4200U);
-    OneTest (__LINE__, "           EF98",         15, "%*X", 15, -4200U);
-
-    /* Field width and '-' flag given */
-    OneTest (__LINE__, "u              ",         15, "%-15c", 'u');
-    OneTest (__LINE__, "4200           ",         15, "%-15d", 4200);
-    OneTest (__LINE__, "-4200          ",         15, "%-15d", -4200);
-    OneTest (__LINE__, "4200           ",         15, "%-15i", 4200);
-    OneTest (__LINE__, "-4200          ",         15, "%-15i", -4200);
-    OneTest (__LINE__, "10150          ",         15, "%-15o", 4200U);
-    OneTest (__LINE__, "167630         ",         15, "%-15o", -4200U);
-    OneTest (__LINE__, "hello, world   ",         15, "%-15s", "hello, world");
-    OneTest (__LINE__, "4200           ",         15, "%-15u", 4200U);
-    OneTest (__LINE__, "61336          ",         15, "%-15u", -4200U);
-    OneTest (__LINE__, "1068           ",         15, "%-15x", 4200U);
-    OneTest (__LINE__, "ef98           ",         15, "%-15x", -4200U);
-    OneTest (__LINE__, "1068           ",         15, "%-15X", 4200U);
-    OneTest (__LINE__, "EF98           ",         15, "%-15X", -4200U);
-
-    /* A negative field width specified via an argument is treated as if the
-    ** '-' flag and a positive field width were given.
-    **
-    ** Beware: These tests will crash the old printf routine!
-    */
-#ifndef NOCRASH
-    OneTest (__LINE__, "u              ",         15, "%*c", -15, 'u');
-    OneTest (__LINE__, "4200           ",         15, "%*d", -15, 4200);
-    OneTest (__LINE__, "-4200          ",         15, "%*d", -15, -4200);
-    OneTest (__LINE__, "4200           ",         15, "%*i", -15, 4200);
-    OneTest (__LINE__, "-4200          ",         15, "%*i", -15, -4200);
-    OneTest (__LINE__, "10150          ",         15, "%*o", -15, 4200U);
-    OneTest (__LINE__, "167630         ",         15, "%*o", -15, -4200U);
-    OneTest (__LINE__, "hello, world   ",         15, "%*s", -15, "hello, world");
-    OneTest (__LINE__, "4200           ",         15, "%*u", -15, 4200U);
-    OneTest (__LINE__, "61336          ",         15, "%*u", -15, -4200U);
-    OneTest (__LINE__, "1068           ",         15, "%*x", -15, 4200U);
-    OneTest (__LINE__, "ef98           ",         15, "%*x", -15, -4200U);
-    OneTest (__LINE__, "1068           ",         15, "%*X", -15, 4200U);
-    OneTest (__LINE__, "EF98           ",         15, "%*X", -15, -4200U);
-#endif
-
-    /* Field width smaller than converted value */
-    OneTest (__LINE__, "u",                        1, "%1c", 'u');
-    OneTest (__LINE__, "4200",                     4, "%1d", 4200);
-    OneTest (__LINE__, "-4200",                    5, "%1d", -4200);
-    OneTest (__LINE__, "4200",                     4, "%1i", 4200);
-    OneTest (__LINE__, "-4200",                    5, "%1i", -4200);
-    OneTest (__LINE__, "10150",                    5, "%1o", 4200U);
-    OneTest (__LINE__, "167630",                   6, "%1o", -4200U);
-    OneTest (__LINE__, "hello, world",            12, "%1s", "hello, world");
-    OneTest (__LINE__, "4200",                     4, "%1u", 4200U);
-    OneTest (__LINE__, "61336",                    5, "%1u", -4200U);
-    OneTest (__LINE__, "1068",                     4, "%1x", 4200U);
-    OneTest (__LINE__, "ef98",                     4, "%1x", -4200U);
-    OneTest (__LINE__, "1068",                     4, "%1X", 4200U);
-    OneTest (__LINE__, "EF98",                     4, "%1X", -4200U);
-
-    /* Field width specified and '0' flag given */
-    OneTest (__LINE__, "000000000004200",         15, "%015d", 4200);
-    OneTest (__LINE__, "-00000000004200",         15, "%015d", -4200);
-    OneTest (__LINE__, "000000000004200",         15, "%015i", 4200);
-    OneTest (__LINE__, "-00000000004200",         15, "%015i", -4200);
-    OneTest (__LINE__, "000000000010150",         15, "%015o", 4200U);
-    OneTest (__LINE__, "000000000167630",         15, "%015o", -4200U);
-    OneTest (__LINE__, "000000000004200",         15, "%015u", 4200U);
-    OneTest (__LINE__, "000000000061336",         15, "%015u", -4200U);
-    OneTest (__LINE__, "000000000001068",         15, "%015x", 4200U);
-    OneTest (__LINE__, "00000000000ef98",         15, "%015x", -4200U);
-    OneTest (__LINE__, "000000000001068",         15, "%015X", 4200U);
-    OneTest (__LINE__, "00000000000EF98",         15, "%015X", -4200U);
-
-    /* If the '-' and '0' flags are both specified, '0' is ignored */
-    OneTest (__LINE__, "4200           ",         15, "%-015d", 4200);
-    OneTest (__LINE__, "-4200          ",         15, "%-015d", -4200);
-    OneTest (__LINE__, "4200           ",         15, "%-015i", 4200);
-    OneTest (__LINE__, "-4200          ",         15, "%-015i", -4200);
-    OneTest (__LINE__, "10150          ",         15, "%-015o", 4200U);
-    OneTest (__LINE__, "167630         ",         15, "%-015o", -4200U);
-    OneTest (__LINE__, "4200           ",         15, "%-015u", 4200U);
-    OneTest (__LINE__, "61336          ",         15, "%-015u", -4200U);
-    OneTest (__LINE__, "1068           ",         15, "%-015x", 4200U);
-    OneTest (__LINE__, "ef98           ",         15, "%-015x", -4200U);
-    OneTest (__LINE__, "1068           ",         15, "%-015X", 4200U);
-    OneTest (__LINE__, "EF98           ",         15, "%-015X", -4200U);
-
-    /* Precision given */
-    OneTest (__LINE__, "u",                        1, "%.15c", 'u');
-    OneTest (__LINE__, "000000000004200",         15, "%.15d", 4200);
-    OneTest (__LINE__, "-000000000004200",        16, "%.15d", -4200);
-    OneTest (__LINE__, "000000000004200",         15, "%.15i", 4200);
-    OneTest (__LINE__, "-000000000004200",        16, "%.15i", -4200);
-    OneTest (__LINE__, "000000000010150",         15, "%.15o", 4200U);
-    OneTest (__LINE__, "000000000167630",         15, "%.15o", -4200U);
-    OneTest (__LINE__, "hello, world",            12, "%.15s", "hello, world");
-    OneTest (__LINE__, "000000000004200",         15, "%.15u", 4200U);
-    OneTest (__LINE__, "000000000061336",         15, "%.15u", -4200U);
-    OneTest (__LINE__, "000000000001068",         15, "%.15x", 4200U);
-    OneTest (__LINE__, "00000000000ef98",         15, "%.15x", -4200U);
-    OneTest (__LINE__, "000000000001068",         15, "%.15X", 4200U);
-    OneTest (__LINE__, "00000000000EF98",         15, "%.15X", -4200U);
-
-    /* Precision given via argument */
-    OneTest (__LINE__, "u",                        1, "%.*c", 15, 'u');
-    OneTest (__LINE__, "000000000004200",         15, "%.*d", 15, 4200);
-    OneTest (__LINE__, "-000000000004200",        16, "%.*d", 15, -4200);
-    OneTest (__LINE__, "000000000004200",         15, "%.*i", 15, 4200);
-    OneTest (__LINE__, "-000000000004200",        16, "%.*i", 15, -4200);
-    OneTest (__LINE__, "000000000010150",         15, "%.*o", 15, 4200U);
-    OneTest (__LINE__, "000000000167630",         15, "%.*o", 15, -4200U);
-    OneTest (__LINE__, "hello, world",            12, "%.*s", 15, "hello, world");
-    OneTest (__LINE__, "000000000004200",         15, "%.*u", 15, 4200U);
-    OneTest (__LINE__, "000000000061336",         15, "%.*u", 15, -4200U);
-    OneTest (__LINE__, "000000000001068",         15, "%.*x", 15, 4200U);
-    OneTest (__LINE__, "00000000000ef98",         15, "%.*x", 15, -4200U);
-    OneTest (__LINE__, "000000000001068",         15, "%.*X", 15, 4200U);
-    OneTest (__LINE__, "00000000000EF98",         15, "%.*X", 15, -4200U);
-
-    /* Negative precision is treated as if the precision were omitted */
-#ifndef NOCRASH
-    OneTest (__LINE__, "u",                        1, "%.*c", -15, 'u');
-    OneTest (__LINE__, "4200",                     4, "%.*d", -15, 4200);
-    OneTest (__LINE__, "-4200",                    5, "%.*d", -15, -4200);
-    OneTest (__LINE__, "4200",                     4, "%.*i", -15, 4200);
-    OneTest (__LINE__, "-4200",                    5, "%.*i", -15, -4200);
-    OneTest (__LINE__, "10150",                    5, "%.*o", -15, 4200U);
-    OneTest (__LINE__, "167630",                   6, "%.*o", -15, -4200U);
-    OneTest (__LINE__, "hello, world",            12, "%.*s", -15, "hello, world");
-    OneTest (__LINE__, "4200",                     4, "%.*u", -15, 4200U);
-    OneTest (__LINE__, "61336",                    5, "%.*u", -15, -4200U);
-    OneTest (__LINE__, "1068",                     4, "%.*x", -15, 4200U);
-    OneTest (__LINE__, "ef98",                     4, "%.*x", -15, -4200U);
-    OneTest (__LINE__, "1068",                     4, "%.*X", -15, 4200U);
-    OneTest (__LINE__, "EF98",                     4, "%.*X", -15, -4200U);
-#endif
-
-    /* Field width and precision given */
-    OneTest (__LINE__, "              u",         15, "%15.10c", 'u');
-    OneTest (__LINE__, "     0000004200",         15, "%15.10d", 4200);
-    OneTest (__LINE__, "    -0000004200",         15, "%15.10d", -4200);
-    OneTest (__LINE__, "     0000004200",         15, "%15.10i", 4200);
-    OneTest (__LINE__, "    -0000004200",         15, "%15.10i", -4200);
-    OneTest (__LINE__, "     0000010150",         15, "%15.10o", 4200U);
-    OneTest (__LINE__, "     0000167630",         15, "%15.10o", -4200U);
-    OneTest (__LINE__, "     hello, wor",         15, "%15.10s", "hello, world");
-    OneTest (__LINE__, "     0000004200",         15, "%15.10u", 4200U);
-    OneTest (__LINE__, "     0000061336",         15, "%15.10u", -4200U);
-    OneTest (__LINE__, "     0000001068",         15, "%15.10x", 4200U);
-    OneTest (__LINE__, "     000000ef98",         15, "%15.10x", -4200U);
-    OneTest (__LINE__, "     0000001068",         15, "%15.10X", 4200U);
-    OneTest (__LINE__, "     000000EF98",         15, "%15.10X", -4200U);
-
-    /* For d, i, o, u, x and X conversions, if a precision is specified, the
-    ** '0' flag is ignored.
-    */
-    OneTest (__LINE__, "     0000004200",         15, "%015.10d", 4200);
-    OneTest (__LINE__, "    -0000004200",         15, "%015.10d", -4200);
-    OneTest (__LINE__, "     0000004200",         15, "%015.10i", 4200);
-    OneTest (__LINE__, "    -0000004200",         15, "%015.10i", -4200);
-    OneTest (__LINE__, "     0000010150",         15, "%015.10o", 4200U);
-    OneTest (__LINE__, "     0000167630",         15, "%015.10o", -4200U);
-    OneTest (__LINE__, "     0000004200",         15, "%015.10u", 4200U);
-    OneTest (__LINE__, "     0000061336",         15, "%015.10u", -4200U);
-    OneTest (__LINE__, "     0000001068",         15, "%015.10x", 4200U);
-    OneTest (__LINE__, "     000000ef98",         15, "%015.10x", -4200U);
-    OneTest (__LINE__, "     0000001068",         15, "%015.10X", 4200U);
-    OneTest (__LINE__, "     000000EF98",         15, "%015.10X", -4200U);
-
-    /* Zero precision, explicitly specified */
-    OneTest (__LINE__, "u",                        1, "%.0c", 'u');
-    OneTest (__LINE__, "4200",                     4, "%.0d", 4200);
-    OneTest (__LINE__, "-4200",                    5, "%.0d", -4200);
-    OneTest (__LINE__, "4200",                     4, "%.0i", 4200);
-    OneTest (__LINE__, "-4200",                    5, "%.0i", -4200);
-    OneTest (__LINE__, "10150",                    5, "%.0o", 4200U);
-    OneTest (__LINE__, "167630",                   6, "%.0o", -4200U);
-    OneTest (__LINE__, "",                         0, "%.0s", "hello, world");
-    OneTest (__LINE__, "4200",                     4, "%.0u", 4200U);
-    OneTest (__LINE__, "61336",                    5, "%.0u", -4200U);
-    OneTest (__LINE__, "1068",                     4, "%.0x", 4200U);
-    OneTest (__LINE__, "ef98",                     4, "%.0x", -4200U);
-    OneTest (__LINE__, "1068",                     4, "%.0X", 4200U);
-    OneTest (__LINE__, "EF98",                     4, "%.0X", -4200U);
-
-    /* Zero precision, dot only */
-    OneTest (__LINE__, "u",                        1, "%.c", 'u');
-    OneTest (__LINE__, "4200",                     4, "%.d", 4200);
-    OneTest (__LINE__, "-4200",                    5, "%.d", -4200);
-    OneTest (__LINE__, "4200",                     4, "%.i", 4200);
-    OneTest (__LINE__, "-4200",                    5, "%.i", -4200);
-    OneTest (__LINE__, "10150",                    5, "%.o", 4200U);
-    OneTest (__LINE__, "167630",                   6, "%.o", -4200U);
-    OneTest (__LINE__, "",                         0, "%.s", "hello, world");
-    OneTest (__LINE__, "4200",                     4, "%.u", 4200U);
-    OneTest (__LINE__, "61336",                    5, "%.u", -4200U);
-    OneTest (__LINE__, "1068",                     4, "%.x", 4200U);
-    OneTest (__LINE__, "ef98",                     4, "%.x", -4200U);
-    OneTest (__LINE__, "1068",                     4, "%.X", 4200U);
-    OneTest (__LINE__, "EF98",                     4, "%.X", -4200U);
-
-    /* Zero precision, zero value */
-    OneTest (__LINE__, "",                         0, "%.0d", 0);
-    OneTest (__LINE__, "",                         0, "%.0i", 0);
-    OneTest (__LINE__, "",                         0, "%.0o", 0U);
-    OneTest (__LINE__, "",                         0, "%.0u", 0U);
-    OneTest (__LINE__, "",                         0, "%.0x", 0U);
-    OneTest (__LINE__, "",                         0, "%.0X", 0U);
-
-    /* Field width and zero precision given */
-    OneTest (__LINE__, "              u",         15, "%15.0c", 'u');
-    OneTest (__LINE__, "           4200",         15, "%15.0d", 4200);
-    OneTest (__LINE__, "          -4200",         15, "%15.0d", -4200);
-    OneTest (__LINE__, "           4200",         15, "%15.0i", 4200);
-    OneTest (__LINE__, "          -4200",         15, "%15.0i", -4200);
-    OneTest (__LINE__, "          10150",         15, "%15.0o", 4200U);
-    OneTest (__LINE__, "         167630",         15, "%15.0o", -4200U);
-    OneTest (__LINE__, "               ",         15, "%15.0s", "hello, world");
-    OneTest (__LINE__, "           4200",         15, "%15.0u", 4200U);
-    OneTest (__LINE__, "          61336",         15, "%15.0u", -4200U);
-    OneTest (__LINE__, "           1068",         15, "%15.0x", 4200U);
-    OneTest (__LINE__, "           ef98",         15, "%15.0x", -4200U);
-    OneTest (__LINE__, "           1068",         15, "%15.0X", 4200U);
-    OneTest (__LINE__, "           EF98",         15, "%15.0X", -4200U);
-
-    /* Field width, zero precision and zero value */
-    OneTest (__LINE__, "               ",         15, "%15.0d", 0);
-    OneTest (__LINE__, "               ",         15, "%15.0i", 0);
-    OneTest (__LINE__, "               ",         15, "%15.0o", 0U);
-    OneTest (__LINE__, "               ",         15, "%15.0u", 0U);
-    OneTest (__LINE__, "               ",         15, "%15.0x", 0U);
-    OneTest (__LINE__, "               ",         15, "%15.0X", 0U);
-
-    /* Alternative form */
-    OneTest (__LINE__, "010150",                   6, "%#o", 4200U);
-    OneTest (__LINE__, "0167630",                  7, "%#o", -4200U);
-    OneTest (__LINE__, "0x1068",                   6, "%#x", 4200U);
-    OneTest (__LINE__, "0xef98",                   6, "%#x", -4200U);
-    OneTest (__LINE__, "0X1068",                   6, "%#X", 4200U);
-    OneTest (__LINE__, "0XEF98",                   6, "%#X", -4200U);
-
-    /* Alternative form with zero value */
-#ifndef NOCRASH
-    OneTest (__LINE__, "0",                        1, "%#o", 0U);
-    OneTest (__LINE__, "0",                        1, "%#x", 0U);
-    OneTest (__LINE__, "0",                        1, "%#X", 0U);
-#endif
-
-    /* Alternative form with zero value and precision 1 */
-    OneTest (__LINE__, "0",                        1, "%#.1o", 0U);
-    OneTest (__LINE__, "0",                        1, "%#.1x", 0U);
-    OneTest (__LINE__, "0",                        1, "%#.1X", 0U);
-
-    /* Alternative form with non zero value and precision 1 */
-    OneTest (__LINE__, "01",                       2, "%#.1o", 1U);
-    OneTest (__LINE__, "0x1",                      3, "%#.1x", 1U);
-    OneTest (__LINE__, "0X1",                      3, "%#.1X", 1U);
-
-    /* Alternative form and width given */
-    OneTest (__LINE__, "         010150",         15, "%#15o", 4200U);
-    OneTest (__LINE__, "         0x1068",         15, "%#15x", 4200U);
-    OneTest (__LINE__, "         0X1068",         15, "%#15X", 4200U);
-
-    /* Alternative form, width and zero padding */
-    OneTest (__LINE__, "000000000010150",         15, "%#015o", 4200U);
-    OneTest (__LINE__, "0x0000000001068",         15, "%#015x", 4200U);
-    OneTest (__LINE__, "0X0000000001068",         15, "%#015X", 4200U);
-
-    /* n conversion specifier */
-    WriteTest (__LINE__, "%d%n",        &W, 0x5A5A0004L);
-    WriteTest (__LINE__, "%d%hn",       &W, 0x5A5A0004L);
-    WriteTest (__LINE__, "%d%hhn",      &W, 0x5A5A5A04L);
-    WriteTest (__LINE__, "%d%ln",       &W, 0x00000004L);
-
-    /* Output the result */
-    if (Failures) {
-        printf ("%u tests, %u failures\n", Tests, Failures);
-    } else {
-        printf ("%u tests: Ok\n", Tests);
-    }
-
-    /* Wait for a key so we can read the result */
-#if defined(__CC65__)
-    cgetc ();
-#endif
-    return 0;
-}
diff --git a/testcode/lib/strchr-test.c b/testcode/lib/strchr-test.c
deleted file mode 100644 (file)
index 7aba1de..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-
-                                                        
-/* Test string. Must NOT have duplicate characters! */
-static char S[] = "Helo wrd!\n";
-
-static char Found[256];
-
-
-
-int main (void)
-{
-    unsigned Len;
-    unsigned I;
-    char*    P;
-
-    /* Print a header */
-    printf ("strchr(): ");
-
-    /* Get the length of the string */
-    Len = strlen (S);
-
-    /* Search for all characters in the string, including the terminator */
-    for (I = 0; I < Len+1; ++I) {
-
-        /* Search for this char */
-        P = strchr (S, S[I]);
-
-        /* Check if we found it */
-        if (P == 0 || (P - S) != I) {
-            printf ("Failed for code 0x%02X, offset %u!\n", S[I], I);
-            printf ("P = %04X offset = %04X\n", P, P-S);
-            exit (EXIT_FAILURE);
-        }
-
-        /* Mark the char as checked */
-        Found[S[I]] = 1;
-    }
-
-    /* Search for all other characters and make sure they aren't found */
-    for (I = 0; I < 256; ++I) {
-        if (Found[I] == 0) {
-            if (strchr (S, (char)I) != 0) {
-                printf ("Failed for code 0x%02X\n", I);
-                exit (EXIT_FAILURE);
-            }
-        }
-    }
-
-    /* Test passed */
-    printf ("Passed\n");
-    return EXIT_SUCCESS;
-}
-
-
-
diff --git a/testcode/lib/strdup-test.c b/testcode/lib/strdup-test.c
deleted file mode 100644 (file)
index 5514471..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-
-/* From _heap.h */
-extern unsigned _horg;          /* Bottom of heap */
-extern unsigned _hptr;          /* Current top */
-extern unsigned _hend;          /* Upper limit */
-extern unsigned _hfirst;        /* First free block in list */
-extern unsigned _hlast;         /* Last free block in list */
-
-
-static unsigned char* V[256];
-
-
-
-static void ShowInfo (void)
-/* Show heap info */
-{
-    /* Count free blocks */
-    unsigned Count = 0;
-    unsigned** P = (unsigned**) _hfirst;
-    while (P) {
-        ++Count;
-        P = P[1];
-    }
-    printf ("%04X  %04X  %04X  %04X  %04X %u\n",
-            _horg, _hptr, _hend, _hfirst, _hlast, Count);
-
-    if (Count) {
-        P = (unsigned**) _hfirst;
-        while (P) {
-            printf ("%04X  %04X  %04X %04X(%u)\n",
-                    (unsigned) P, P[2], P[1], P[0], P[0]);
-            P = P[1];
-        }
-        getchar ();
-    }
-}
-
-
-
-static const char* RandStr (void)
-/* Create a random string */
-{
-    static char S [300];
-    unsigned Len = (rand () & 0xFF) + (sizeof (S) - 0xFF - 1);
-    unsigned I;
-    char C;
-
-    for (I = 0; I < Len; ++I) {
-        do {
-            C = rand() & 0xFF;
-        } while (C == 0);
-        S[I] = C;
-    }
-    S[Len] = '\0';
-
-    return S;
-}
-
-
-
-static void FillArray (void)
-/* Fill the string array */
-{
-    unsigned char I = 0;
-    do {
-        V[I] = strdup (RandStr ());
-        ++I;
-    } while (I != 0);
-}
-
-
-
-static void FreeArray (void)
-/* Free all strings in the array */
-{
-    unsigned char I = 0;
-    do {
-        free (V[I]);
-        ++I;
-    } while (I != 0);
-}
-
-
-
-int main (void)
-{
-    unsigned long T;
-
-    /* Show info at start */
-    ShowInfo ();
-
-    /* Remember the time */
-    T = clock ();
-
-    /* Do the tests */
-    FillArray ();
-    ShowInfo ();
-    FreeArray ();
-    ShowInfo ();
-
-    /* Calculate the time and print it */
-    T = clock () - T;
-    printf ("Time needed: %lu ticks\n", T);
-
-    /* Done */
-    return EXIT_SUCCESS;
-}
-
-
-
diff --git a/testcode/lib/strncmp-test.c b/testcode/lib/strncmp-test.c
deleted file mode 100644 (file)
index b155650..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-static const char S1[] = {
-    'h', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '\0', 'A'
-};
-
-static const char S2[] = {
-    'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '\0', 'B'
-};
-
-
-
-
-int main (void)
-{
-    char I;
-    for (I = 0; I < 20; ++I) {
-        printf ("%02d: %d\n", I, strncmp (S1, S2, I));
-    }
-    return 0;
-}
-
diff --git a/testcode/lib/strnicmp-test.c b/testcode/lib/strnicmp-test.c
deleted file mode 100644 (file)
index b2d942a..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <conio.h>
-
-static int do_test(const char *s1, const char *s2, size_t n)
-{
-    printf("strnicmp(\"%s\", \"%s\", %d):  ", s1, s2, (int)n);
-    return strncasecmp(s1, s2, n);
-}
-
-int main(void)
-{
-    int ret;
-
-    ret = do_test("Wurzl", "wURZL", 5);
-    if (ret)
-        printf("fail (%d)\n", ret);
-    else
-        printf("OK (%d)\n", ret);
-
-    ret = do_test("Wurzl", "wURZL", 6);
-    if (ret)
-        printf("fail (%d)\n", ret);
-    else
-        printf("OK (%d)\n", ret);
-
-    ret = do_test("Wurzl", "wURZL", 10);
-    if (ret)
-        printf("fail (%d)\n", ret);
-    else
-        printf("OK (%d)\n", ret);
-
-    ret = do_test("Wurzla", "wURZLB", 10);
-    if (ret >= 0)
-        printf("fail (%d)\n", ret);
-    else
-        printf("OK (%d)\n", ret);
-
-    ret = do_test("Wurzla", "wURZLb", 5);
-    if (ret)
-        printf("fail (%d)\n", ret);
-    else
-        printf("OK (%d)\n", ret);
-
-    ret = do_test("BLI", "bla", 5);
-    if (ret <= 0)
-        printf("fail (%d)\n", ret);
-    else
-        printf("OK (%d)\n", ret);
-
-    ret = do_test("", "bla", 5);
-    if (ret >= 0)
-        printf("fail (%d)\n", ret);
-    else
-        printf("OK (%d)\n", ret);
-
-    ret = do_test("BLI", "", 5);
-    if (ret <= 0)
-        printf("fail (%d)\n", ret);
-    else
-        printf("OK (%d)\n", ret);
-
-    ret = do_test("", "", 5);
-    if (ret)
-        printf("fail (%d)\n", ret);
-    else
-        printf("OK (%d)\n", ret);
-
-    cgetc();
-    return 0;
-}
diff --git a/testcode/lib/stroserror-test.c b/testcode/lib/stroserror-test.c
deleted file mode 100644 (file)
index 9eabf5f..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <conio.h>
-
-
-int main (void)
-{
-    unsigned char error = 0;
-    unsigned char line = 0;
-    unsigned char maxx, maxy;
-    screensize (&maxx, &maxy);
-    do {
-        printf ("%2d: %s\n", error, _stroserror (error));
-        if (line == maxy-3) {
-            printf ("Press any key...\n");
-            if (cgetc () == 'q') {
-                return 0;
-            }
-            clrscr ();
-            line = 0;
-        } else {
-            ++line;
-        }
-        ++error;
-    } while (error != 0);
-
-    return 0;
-}
-
-
-
diff --git a/testcode/lib/strqtok-test.c b/testcode/lib/strqtok-test.c
deleted file mode 100644 (file)
index 27328cc..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/* strqtok-test.c
-**
-** 2014-04-21, Paul Foerster
-** 2014-05-20, Greg King
-**
-** This program tests that strqtok() correctly will parse strings
-** with quotation marks in them.  It should show this list of tokens
-** from the test strings:
-**
-** >This<
-** >  is only    <
-** >a<
-** >short<
-** >quoting<
-** >test ,  honoring  blanks, commas<
-** >and<
-** >(4)<
-** >empty<
-** ><
-** ><
-** ><
-** ><
-** >strings,   EOT  <
-**
-** It shouldn't show
-**
-** >Bogus token<
-**
-*/
-
-#include <string.h>
-#include <stdio.h>
-
-void main (void)
-{
-    /* b[] and s[] are declared as automatic, not static, variables
-    ** because strqtok() will change them.
-    ** They must be defined together; and, b[] must be defined first
-    ** (because they're copied onto the top-down stack).
-    */
-    char  b[] = "Bogus token ";
-    char  s[] = "  This ,  \"  is only    \"a   short   "
-        "quoting\"test ,  honoring  blanks"
-        ", commas\", and (4) empty \"\"\"\"\"\"\"\" \"strings,   EOT  ";
-    char* t = strqtok (s, " ,");
-
-    while (t != NULL) {
-        printf (">%s<\n", t);
-        t = strqtok (NULL, " ,");
-    }
-}
diff --git a/testcode/lib/strtol-test.c b/testcode/lib/strtol-test.c
deleted file mode 100644 (file)
index 86c56d4..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/* A small test for strtol. Assumes twos complement */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include <errno.h>
-
-
-
-#define outfile stderr
-
-
-
-#define ERROR   0
-#define OK      1
-
-
-
-static unsigned int Failures = 0;
-
-
-
-static void IncStr (char* Buf)
-/* Increment a number represented as a string by one. The string MUST not
-** start with a '9', we cannot handle overflow in this case.
-*/
-{
-    int Len = strlen (Buf);
-
-    while (--Len >= 0) {
-        switch (Buf[Len]) {
-            case '9':
-                Buf[Len] = '0';
-                break;
-
-            default:
-                ++(Buf[Len]);
-                return;
-        }
-    }
-}
-
-
-
-static void CheckStrToL (const char* Str, int Base, long Val, unsigned char Ok)
-{
-    char* EndPtr;
-    long Res = strtol (Str, &EndPtr, Base);
-    if (Ok) {
-        if (Res != Val) {
-            fprintf (outfile,
-                     "strtol error in \"%s\":\n"
-                     "  result = %ld, should be %ld, chars = %d\n",
-                     Str, Res, Val, EndPtr - Str);
-            ++Failures;
-        }
-    } else {
-        if (errno != ERANGE) {
-            fprintf (outfile,
-                     "strtol error in \"%s\":\n"
-                     "  should not convert, but errno = %d\n",
-                     Str, errno);
-            ++Failures;
-        }
-        if (Res != Val) {
-            fprintf (outfile,
-                     "strtol error in \"%s\":\n"
-                     "  result = %ld, should be %ld, chars = %d\n",
-                     Str, Res, Val, EndPtr - Str);
-            ++Failures;
-        }
-    }
-}
-
-
-
-int main (void)
-{
-    char Buf[80];
-
-    /* Prefixed allowed if base = 0 */
-    CheckStrToL ("\t 0x10G ", 0, 16L, OK);
-    CheckStrToL ("\t 0X10G ", 0, 16L, OK);
-    CheckStrToL (" \t0377\t", 0, 255L, OK);
-    CheckStrToL (" 377", 0, 377L, OK);
-
-    CheckStrToL ("\t -0x10G ", 0, -16L, OK);
-    CheckStrToL ("\t -0X10G ", 0, -16L, OK);
-    CheckStrToL (" \t-0377\t", 0, -255L, OK);
-    CheckStrToL (" -377", 0, -377L, OK);
-
-    /* No prefixes if base = 10 */
-    CheckStrToL ("\t 1234 ", 10, 1234L, OK);
-    CheckStrToL ("\t -1234 ", 10, -1234L, OK);
-    CheckStrToL ("\t -0x10G ", 10, 0L, OK);
-    CheckStrToL ("\t -0X10G ", 10, 0L, OK);
-    CheckStrToL (" \t-0377\t", 10, -377L, OK);
-    CheckStrToL (" 0377", 10, 377L, OK);
-
-    /* 0x prefix is allowed if base = 16 */
-    CheckStrToL ("\t 0x1234 ", 16, 0x1234L, OK);
-    CheckStrToL ("\t -0x1234 ", 16, -0x1234L, OK);
-    CheckStrToL ("\t -010G ", 16, -16L, OK);
-    CheckStrToL ("\t 10G ", 16, 16L, OK);
-
-    /* Check LONG_MIN and LONG_MAX */
-    sprintf (Buf, "%ld", LONG_MIN);
-    CheckStrToL (Buf, 0, LONG_MIN, OK);
-    sprintf (Buf, "%ld", LONG_MAX);
-    CheckStrToL (Buf, 0, LONG_MAX, OK);
-
-    /* Check value one smaller */
-    sprintf (Buf+1, "%ld", LONG_MIN);
-    Buf[1] = '0';       /* Overwrite '-' */
-    IncStr (Buf+1);
-    if (Buf[1] == '0') {
-        Buf[1] = '-';
-        Buf[0] = ' ';
-    } else {
-        Buf[0] = '-';
-    }
-    CheckStrToL (Buf, 0, LONG_MIN, ERROR);
-
-    /* Check value one larger */
-    sprintf (Buf+1, "%ld", LONG_MAX);
-    Buf[0] = '0';
-    IncStr (Buf);
-    if (Buf[0] == '0') {
-        Buf[0] = ' ';
-    }
-    CheckStrToL (Buf, 0, LONG_MAX, ERROR);
-
-    /* Check numbers that are much too large or small */
-    CheckStrToL ("-999999999999999999999999999999999999999999999999999999999", 0, LONG_MIN, ERROR);
-    CheckStrToL ("+999999999999999999999999999999999999999999999999999999999", 0, LONG_MAX, ERROR);
-    CheckStrToL (" 999999999999999999999999999999999999999999999999999999999", 0, LONG_MAX, ERROR);
-
-    /* Check a few other bases */
-    CheckStrToL ("aBcD", 36, 481261L, OK);
-    CheckStrToL ("zyaB", 35, 0L, ERROR);
-    CheckStrToL ("zyaB", 36, 1677395L, ERROR);
-
-    fprintf (outfile, "Failures: %u\n", Failures);
-    return (Failures != 0);
-}
diff --git a/testcode/lib/strtoul-test.c b/testcode/lib/strtoul-test.c
deleted file mode 100644 (file)
index cc37d1d..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/* A small test for strtuol. Assumes twos complement */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include <errno.h>
-
-
-
-#define outfile stderr
-
-
-
-#define ERROR   0
-#define OK      1
-
-
-
-static unsigned int Failures = 0;
-
-
-
-static void IncStr (char* Buf)
-/* Increment a number represented as a string by one. The string MUST not
-** start with a '9', we cannot handle overflow in this case.
-*/
-{
-    int Len = strlen (Buf);
-
-    while (--Len >= 0) {
-        switch (Buf[Len]) {
-            case '9':
-                Buf[Len] = '0';
-                break;
-
-            default:
-                ++(Buf[Len]);
-                return;
-        }
-    }
-}
-
-
-
-static void CheckStrToUL (const char* Str, int Base, unsigned long Val, unsigned char Ok)
-{
-    char* EndPtr;
-    unsigned long Res = strtoul (Str, &EndPtr, Base);
-    if (Ok) {
-        if (Res != Val) {
-            fprintf (outfile,
-                     "strtol error in \"%s\":\n"
-                     "  result = %lu, should be %lu, chars = %d\n",
-                     Str, Res, Val, EndPtr - Str);
-            ++Failures;
-        }
-    } else {
-        if (errno != ERANGE) {
-            fprintf (outfile,
-                     "strtol error in \"%s\":\n"
-                     "  should not convert, but errno = %d\n",
-                     Str, errno);
-            ++Failures;
-        }
-        if (Res != Val) {
-            fprintf (outfile,
-                     "strtol error in \"%s\":\n"
-                     "  result = %lu, should be %lu, chars = %d\n",
-                     Str, Res, Val, EndPtr - Str);
-            ++Failures;
-        }
-    }
-}
-
-
-
-int main (void)
-{
-    char Buf[80];
-
-    /* Prefixed allowed if base = 0 */
-    CheckStrToUL ("\t 0x10G ", 0, 16UL, OK);
-    CheckStrToUL ("\t 0X10G ", 0, 16UL, OK);
-    CheckStrToUL (" \t0377\t", 0, 255UL, OK);
-    CheckStrToUL (" 377", 0, 377UL, OK);
-
-    CheckStrToUL ("\t -0x10G ", 0, (unsigned long) -16L, OK);
-    CheckStrToUL ("\t -0X10G ", 0, (unsigned long) -16L, OK);
-    CheckStrToUL (" \t-0377\t", 0, (unsigned long) -255L, OK);
-    CheckStrToUL (" -377", 0, (unsigned long) -377L, OK);
-
-    /* No prefixes if base = 10 */
-    CheckStrToUL ("\t 1234 ", 10, 1234UL, OK);
-    CheckStrToUL ("\t -1234 ", 10, (unsigned long) -1234L, OK);
-    CheckStrToUL ("\t -0x10G ", 10, 0UL, OK);
-    CheckStrToUL ("\t -0X10G ", 10, 0UL, OK);
-    CheckStrToUL (" \t-0377\t", 10, (unsigned long) -377L, OK);
-    CheckStrToUL (" 0377", 10, 377UL, OK);
-
-    /* 0x prefix is allowed if base = 16 */
-    CheckStrToUL ("\t 0x1234 ", 16, 0x1234UL, OK);
-    CheckStrToUL ("\t -0x1234 ", 16, (unsigned long) -0x1234L, OK);
-    CheckStrToUL ("\t -010G ", 16, (unsigned long) -16L, OK);
-    CheckStrToUL ("\t 10G ", 16, 16UL, OK);
-
-    /* Check ULONG_MAX */
-    sprintf (Buf, "%lu", ULONG_MAX);
-    CheckStrToUL (Buf, 0, ULONG_MAX, OK);
-
-    /* Check value one larger */
-    sprintf (Buf+1, "%lu", ULONG_MAX);
-    Buf[0] = '0';
-    IncStr (Buf);
-    if (Buf[0] == '0') {
-        Buf[0] = ' ';
-    }
-    CheckStrToUL (Buf, 0, ULONG_MAX, ERROR);
-
-    /* Check numbers that are much too large or small */
-    CheckStrToUL ("-999999999999999999999999999999999999999999999999999999999", 0, ULONG_MAX, ERROR);
-    CheckStrToUL ("+999999999999999999999999999999999999999999999999999999999", 0, ULONG_MAX, ERROR);
-    CheckStrToUL (" 999999999999999999999999999999999999999999999999999999999", 0, ULONG_MAX, ERROR);
-
-    /* Check a few other bases */
-    CheckStrToUL ("aBcD", 36, 481261UL, OK);
-    CheckStrToUL ("zyaB", 35, 0UL, ERROR);
-    CheckStrToUL ("zyaB", 36, 1677395UL, ERROR);
-
-    fprintf (outfile, "Failures: %u\n", Failures);
-    return (Failures != 0);
-}
-
diff --git a/testcode/lib/time-test.c b/testcode/lib/time-test.c
deleted file mode 100644 (file)
index 99d16be..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <stdio.h>
-#include <time.h>
-
-
-
-int main (void)
-{
-    struct tm tm;
-    time_t t;
-    char   buf[64];
-
-
-    tm.tm_sec   = 9;
-    tm.tm_min   = 34;
-    tm.tm_hour  = 21;
-    tm.tm_mday  = 12;
-    tm.tm_mon   = 10;   /* 0..11, so this is november */
-    tm.tm_year  = 102;  /* year - 1900, so this is 2002 */
-    tm.tm_wday  = 2;    /* Tuesday */
-    tm.tm_isdst = 0;
-
-    /* Convert this broken down time into a time_t and back */
-    t = mktime (&tm);
-    printf ("Test passes if the following lines are\n"
-            "all identical:\n");
-    printf ("3DD173D1 - Tue Nov 12 21:34:09 2002\n");
-    printf ("%08lX - %s", t, asctime (&tm));
-    printf ("%08lX - %s", t, asctime (gmtime (&t)));
-    strftime (buf, sizeof (buf), "%c", &tm);
-    printf ("%08lX - %s\n", t, buf);
-    strftime (buf, sizeof (buf), "%a %b %d %H:%M:%S %Y", &tm);
-    printf ("%08lX - %s\n", t, buf);
-
-    return 0;
-}
-
-
-
diff --git a/testcode/lib/tinyshell.c b/testcode/lib/tinyshell.c
deleted file mode 100644 (file)
index de57a3d..0000000
+++ /dev/null
@@ -1,472 +0,0 @@
-/*
-** Simple ("tiny") shell to test filename and directory functions.
-** Copyright (c) 2013, Christian Groessler, chris@groessler.org
-*/
-
-#define VERSION_ASC "0.90"
-
-#ifdef __ATARI__
-#define UPPERCASE      /* define (e.g. for Atari) to convert filenames etc. to upper case */
-#define HAVE_SUBDIRS
-#endif
-
-#ifdef __APPLE2__
-#define HAVE_SUBDIRS
-#endif
-
-#ifdef __CC65__
-#define CHECK_SP
-#endif
-
-#define KEYB_BUFSZ 80
-#define PROMPT ">>> "
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#ifndef __CC65__
-#include <sys/stat.h>
-#include <sys/param.h>
-#define HAVE_SUBDIRS
-#else
-#define MAXPATHLEN 64
-#endif
-#include <sys/types.h>
-#include <fcntl.h>
-#include <dirent.h>
-
-#ifdef CHECK_SP
-extern unsigned int getsp(void);  /* comes from getsp.s */
-#endif
-
-#define CMD_NOTHING 0
-#define CMD_INVALID 1
-#define CMD_HELP    2
-#define CMD_QUIT    3
-#define CMD_LS      4
-#define CMD_MKDIR   5
-#define CMD_RMDIR   6
-#define CMD_CHDIR   7
-#define CMD_RM      8
-#define CMD_RENAME  9
-#define CMD_COPY    10
-#define CMD_PWD     11
-#define CMD_CLS     12
-#define CMD_VERBOSE 13
-
-static unsigned char verbose;
-static unsigned char terminate;
-static unsigned char cmd;
-static unsigned char *cmd_asc, *arg1, *arg2, *arg3;
-static unsigned char keyb_buf[KEYB_BUFSZ];
-static size_t cpbuf_sz = 4096;
-
-struct cmd_table {
-    unsigned char *name;
-    unsigned char code;
-} cmd_table[] = {
-    { "help",  CMD_HELP },
-    { "quit",  CMD_QUIT },
-    { "q",     CMD_QUIT },
-    { "exit",  CMD_QUIT },
-    { "ls",    CMD_LS },
-    { "dir",   CMD_LS },
-    { "md",    CMD_MKDIR },
-#ifdef HAVE_SUBDIRS
-    { "mkdir", CMD_MKDIR },
-    { "rd",    CMD_RMDIR },
-    { "rmdir", CMD_RMDIR },
-    { "cd",    CMD_CHDIR },
-    { "chdir", CMD_CHDIR },
-#endif
-    { "rm",    CMD_RM },
-    { "del",   CMD_RM },
-    { "cp",    CMD_COPY },
-    { "copy",  CMD_COPY },
-    { "mv",    CMD_RENAME },
-    { "ren",   CMD_RENAME },
-    { "pwd",   CMD_PWD },
-#ifdef __ATARI__
-    { "cls",   CMD_CLS },
-#endif
-    { "verbose", CMD_VERBOSE },
-    { NULL, 0 }
-};
-
-static void banner(void)
-{
-    puts("\"tiny\" command line shell, v" VERSION_ASC);
-    puts("written by chris@groessler.org");
-    puts("type 'help' for help\n");
-}
-
-static void get_command(void)
-{
-    unsigned char i = 0;
-
-#ifdef CHECK_SP
-    static char firstcall = 1;
-    static unsigned int good_sp;
-    unsigned int sp;
-    if (firstcall)
-        sp = good_sp = getsp();
-    else
-        sp = getsp();
-
-    if (sp != good_sp) {
-        printf("SP: 0x%04X  ***MISMATCH*** 0x%04X\n", sp, good_sp);
-    }
-    else if (verbose)
-        printf("SP: 0x%04X\n", sp);
-#endif
-
-    arg1 = arg2 = arg3 = NULL;
-
-    /* issue prompt */
-    printf(PROMPT);
-
-    /* get input from the user */
-    if (! fgets(keyb_buf, KEYB_BUFSZ, stdin)) {
-        puts("");
-        cmd = CMD_QUIT;
-        return;
-    }
-
-    /* split input into cmd, arg1, arg2, arg3 */
-
-    /* get and parse command */
-    cmd_asc = strtok(keyb_buf, " \t\n");
-    if (! cmd_asc) {
-        cmd = CMD_NOTHING;
-        return;
-    }
-    cmd = CMD_INVALID;
-    while (cmd_table[i].name) {
-        if (! strcmp(cmd_table[i].name, cmd_asc)) {
-            cmd = cmd_table[i].code;
-            break;
-        }
-        i++;
-    }
-
-    /* get arguments */
-    arg1 = strtok(NULL, " \t\n");
-    if (! arg1)
-        return;
-    arg2 = strtok(NULL, " \t\n");
-    if (! arg2)
-        return;
-    arg3 = strtok(NULL, " \t\n");
-}
-
-static void cmd_help(void)
-{
-    puts("quit, exit -  exit shell");
-    puts("ls, dir    -  display current directory");
-    puts("              and drive contents");
-    puts("rm, del    -  delete file");
-    puts("cp, copy   -  copy file");
-    puts("mv, ren    -  rename file");
-    puts("cd, chdir  -  change directory or drive");
-    puts("md, mkdir  -  make directory or drive");
-    puts("rd, rmdir  -  remove directory or drive");
-#ifdef __ATARI__
-    puts("cls        -  clear screen");
-#endif
-    puts("verbose    -  set verbosity level");
-    puts("sorry, you cannot start programs here");
-}
-
-static void cmd_ls(void)
-{
-    DIR *dir;
-    unsigned char *arg;
-    struct dirent *dirent;
-#ifdef __ATARI__
-    char need_free = 0;
-#endif
-
-    if (arg2) {
-        puts("usage: ls [dir]");
-        return;
-    }
-
-    /* print directory listing */
-    if (arg1) {
-#ifdef UPPERCASE
-        strupr(arg1);
-#endif
-#ifdef __ATARI__
-        /* not sure if this shouldn't be done by the runtime lib */
-        if (*(arg1 + strlen(arg1) - 1) == ':' || *(arg1 + strlen(arg1) - 1) == '>') {
-            arg = malloc(strlen(arg1) + 4);
-            if (! arg) {
-                printf("malloc failed: %s", strerror(errno));
-                return;
-            }
-            need_free = 1;
-            memcpy(arg, arg1, strlen(arg1) + 1);
-            strcat(arg, "*.*");
-        }
-        else
-#endif
-            arg = arg1;
-    }
-    else
-        arg = ".";
-
-    if (verbose)
-        printf("Buffer addr: %p\n", arg);
-    dir = opendir(arg);
-#ifdef __ATARI__
-    if (need_free) free(arg);
-#endif
-    if (! dir) {
-        puts("opendir failed");
-        return;
-    }
-
-    while (dirent = readdir(dir))
-        puts(dirent->d_name);
-
-    closedir(dir);
-}
-
-static void cmd_rm(void)
-{
-    if (!arg1 || arg2) {
-        puts("usage: rm <file>");
-        return;
-    }
-
-#ifdef UPPERCASE
-    strupr(arg1);
-#endif
-
-    if (unlink(arg1))
-        printf("remove failed: %s\n", strerror(errno));
-}
-
-#ifdef HAVE_SUBDIRS
-
-static void cmd_mkdir(void)
-{
-    if (!arg1 || arg2) {
-        puts("usage: mkdir <dir>");
-        return;
-    }
-
-#ifdef UPPERCASE
-    strupr(arg1);
-#endif
-
-    if (mkdir(arg1, 0777))
-        printf("mkdir failed: %s\n", strerror(errno));
-}
-
-static void cmd_rmdir(void)
-{
-    if (!arg1 || arg2) {
-        puts("usage: rmdir <dir>");
-        return;
-    }
-
-#ifdef UPPERCASE
-    strupr(arg1);
-#endif
-
-    if (rmdir(arg1))
-        printf("rmdir failed: %s\n", strerror(errno));
-}
-
-static void cmd_chdir(void)
-{
-    if (!arg1 || arg2) {
-        puts("usage: cddir <dir>");
-        return;
-    }
-
-#ifdef UPPERCASE
-    strupr(arg1);
-#endif
-
-    if (chdir(arg1))
-        printf("chdir failed: %s\n", strerror(errno));
-}
-
-static void cmd_pwd(void)
-{
-    char *buf;
-
-    if (arg1) {
-        puts("usage: pwd");
-        return;
-    }
-
-    buf = malloc(MAXPATHLEN);
-    if (! buf) {
-        printf("malloc %u bytes failed: %s\n", MAXPATHLEN, strerror(errno));
-        return;
-    }
-    if (verbose)
-        printf("Buffer addr: %p\n", buf);
-    if (!getcwd(buf, MAXPATHLEN)) {
-        printf("getcwd failed: %s\n", strerror(errno));
-        free(buf);
-        return;
-    }
-
-    puts(buf);
-    free(buf);
-}
-
-#endif /* #ifdef HAVE_SUBDIRS */
-
-static void cmd_rename(void)
-{
-    if (!arg2 || arg3) {
-        puts("usage: mv <oldname> <newname>");
-        return;
-    }
-
-#ifdef UPPERCASE
-    strupr(arg1);
-    strupr(arg2);
-#endif
-
-    if (rename(arg1, arg2))
-        printf("rename failed: %s\n", strerror(errno));
-}
-
-static void cmd_copy(void)
-{
-    int srcfd = -1, dstfd = -1;
-    unsigned char *buf;
-    int readsz, writesz;
-
-    if (!arg2 || arg3) {
-        puts("usage: cp <src> <dest>");
-        return;
-    }
-
-#ifdef UPPERCASE
-    strupr(arg1);
-    strupr(arg2);
-#endif
-
-    buf = malloc(cpbuf_sz);
-    if (! buf) {
-        printf("malloc %u bytes failed: %s\n", cpbuf_sz, strerror(errno));
-        return;
-    }
-    if (verbose)
-        printf("Buffer addr: %p\n", buf);
-
-    while (1) {
-        if (srcfd == -1) {
-            srcfd = open(arg1, O_RDONLY);
-            if (srcfd < 0) {
-                printf("open(%s) failed: %s\n", arg1, strerror(errno));
-                break;
-            }
-        }
-
-        readsz = read(srcfd, buf, cpbuf_sz);
-        if (readsz < 0) {
-            printf("read error: %s\n", strerror(errno));
-            break;
-        }
-        if (! readsz)
-            break;
-
-        if (dstfd == -1) {
-            dstfd = open(arg2, O_WRONLY | O_CREAT | O_TRUNC, 0777);
-            if (dstfd < 0) {
-                printf("open(%s) failed: %s\n", arg2, strerror(errno));
-                break;
-            }
-        }
-
-        writesz = write(dstfd, buf, readsz);
-        if (writesz < 0 || writesz != readsz) {
-            printf("write error: %s\n", strerror(errno));
-            break;
-        }
-        if (readsz != cpbuf_sz)
-            break;
-    }
-
-    free(buf);
-    if (srcfd >= 0) close(srcfd);
-    if (dstfd >= 0) close(dstfd);
-}
-
-#ifdef __ATARI__
-static void cmd_cls(void)
-{
-    printf("\f");
-}
-#endif
-
-static void cmd_verbose(void)
-{
-    unsigned long verb;
-    char *endptr;
-
-    if (!arg1 || arg2) {
-        puts("usage: verbose <level>");
-        return;
-    }
-
-    verb = strtoul(arg1, &endptr, 10);
-    if (verb > 255 || *endptr) {
-        puts("invalid verbosity level");
-        return;
-    }
-
-    verbose = verb;
-    printf("verbosity level set to %d\n", verbose);
-}
-
-static void run_command(void)
-{
-    switch (cmd) {
-        default: puts("internal error"); return;
-        case CMD_NOTHING: return;
-        case CMD_INVALID: puts("invalid command"); return;
-        case CMD_HELP: cmd_help(); return;
-        case CMD_QUIT: terminate = 1; return;
-        case CMD_LS: cmd_ls(); return;
-        case CMD_RM: cmd_rm(); return;
-#ifdef HAVE_SUBDIRS
-        case CMD_CHDIR: cmd_chdir(); return;
-        case CMD_MKDIR: cmd_mkdir(); return;
-        case CMD_RMDIR: cmd_rmdir(); return;
-        case CMD_PWD: cmd_pwd(); return;
-#endif
-        case CMD_RENAME: cmd_rename(); return;
-        case CMD_COPY: cmd_copy(); return;
-#ifdef __ATARI__
-        case CMD_CLS: cmd_cls(); return;
-#endif
-        case CMD_VERBOSE: cmd_verbose(); return;
-    }
-}
-
-int main(void)
-{
-    banner();
-
-    while (! terminate) {
-        get_command();
-        run_command();
-    }
-    return 0;
-}
-
-/* Local Variables: */
-/* c-file-style: "cpg" */
-/* c-basic-offset: 4 */
-/* End: */
diff --git a/testcode/lib/uname-test.c b/testcode/lib/uname-test.c
deleted file mode 100644 (file)
index b0733d0..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/utsname.h>
-
-
-int main (void)
-{                  
-    /* Get the uname data */
-    struct utsname buf;
-    if (uname (&buf) != 0) {
-        perror ("uname");
-        return EXIT_FAILURE;
-    }
-
-    /* Print it */      
-    printf ("sysname:  \"%s\"\n", buf.sysname);
-    printf ("nodename: \"%s\"\n", buf.nodename);
-    printf ("release:  \"%s\"\n", buf.release);
-    printf ("version:  \"%s\"\n", buf.version);
-    printf ("machine:  \"%s\"\n", buf.machine);
-
-    /* Done */
-    return EXIT_SUCCESS;
-}
-
-
diff --git a/util/atari/ataricvt.c b/util/atari/ataricvt.c
deleted file mode 100644 (file)
index 104d4f6..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-    int C;
-    while ((C = getchar ()) != EOF) {
-        if (C == 0x9B) {
-            putchar ('\n');
-        } else if (C == 0x7F) {
-            putchar ('\t');
-        } else {  
-            putchar (C);
-        }
-    }
-    return 0;
-}
-
diff --git a/util/ca65html b/util/ca65html
deleted file mode 100644 (file)
index bdb4a9d..0000000
+++ /dev/null
@@ -1,1220 +0,0 @@
-#!/usr/bin/perl
-###############################################################################
-#                                                                             #
-#                                  ca65html                                   #
-#                                                                             #
-#                      Convert a ca65 source into HTML                        #
-#                                                                             #
-#                                                                             #
-#                                                                             #
-#  (C) 2000-2007 Ullrich von Bassewitz                                        #
-#                Roemerstrasse 52                                             #
-#                D-70794 Filderstadt                                          #
-#  EMail:        uz@cc65.org                                                  #
-#                                                                             #
-#                                                                             #
-#  This software is provided 'as-is', without any expressed or implied        #
-#  warranty.  In no event will the authors be held liable for any damages     #
-#  arising from the use of this software.                                     #
-#                                                                             #
-#  Permission is granted to anyone to use this software for any purpose,      #
-#  including commercial applications, and to alter it and redistribute it     #
-#  freely, subject to the following restrictions:                             #
-#                                                                             #
-#  1. The origin of this software must not be misrepresented; you must not    #
-#     claim that you wrote the original software. If you use this software    #
-#     in a product, an acknowledgment in the product documentation would be   #
-#     appreciated but is not required.                                        #
-#  2. Altered source versions must be plainly marked as such, and must not    #
-#     be misrepresented as being the original software.                       #
-#  3. This notice may not be removed or altered from any source               #
-#     distribution.                                                           #
-#                                                                             #
-###############################################################################
-
-
-
-# Things currently missing:
-#
-#   - Scoping with .proc/.endproc, .scope/.endscope, .enum/.endenum,
-#     .struct/.endstruct, .union/endunion, .repeat/.endrep, .local
-#   - .global is ignored
-#   - .case is ignored, labels are always case-sensitive
-#   - .include handling (difficult)
-#   - The global namespace operator ::
-#
-
-
-
-use strict 'vars';
-use warnings;
-
-# Modules
-use Getopt::Long;
-
-
-
-#-----------------------------------------------------------------------------#
-#                                  Variables                                  #
-# ----------------------------------------------------------------------------#
-
-
-
-# Global variables
-my %Files           = ();           # List of all files.
-my $FileCount       = 0;            # Number of input files
-my %Exports         = ();           # List of exported symbols.
-my %Imports         = ();           # List of imported symbols.
-my %Labels          = ();           # List of all labels
-my $LabelNum        = 0;            # Counter to generate unique labels
-
-# Command line options
-my $BGColor         = "#FFFFFF";    # Background color
-my $Colorize        = 0;            # Colorize the output
-my $CommentColor    = "#B22222";    # Color for comments
-my $CRefs           = 0;            # Add references to the C file
-my $CtrlColor       = "#228B22";    # Color for control directives
-my $CvtTabs         = 0;            # Convert tabs to spaces
-my $TabSize         = 8;            # This is how god created them
-my $Debug           = 0;            # No debugging
-my $Help            = 0;            # Help flag
-my $HTMLDir         = "";           # Directory in which to create the files
-my $IndexCols       = 6;            # Columns in the file listing
-my $IndexTitle      = "Index";      # Title of index page
-my $IndexName       = "index.html"; # Name of index page
-my $IndexPage       = 0;            # Create an index page
-my $KeywordColor    = "#A020F0";    # Color for keywords
-my $LineLabels      = 0;            # Add a HTML label to each line
-my $LineNumbers     = 0;            # Add line numbers to the output
-my $LinkStyle       = 0;            # Default link style
-my $ReplaceExt      = 0;            # Replace extension instead of appending
-my $StringColor     = "#6169C1";    # Color for strings
-my $TextColor       = "#000000";    # Text color
-my $Verbose         = 0;            # Be quiet
-
-# Table used to convert the label number into names
-my @NameTab         = ('A' .. 'Z', '0' .. '9');
-
-
-
-#-----------------------------------------------------------------------------#
-#                              Helper functions                               #
-# ----------------------------------------------------------------------------#
-
-
-
-# Terminate with an error
-sub Abort {
-    print STDERR "ca65html: @_\n";
-    exit 1;
-}
-
-# Print a message if verbose is true
-sub Gabble {
-    if ($Verbose) {
-        print "ca65html: @_\n";
-    }
-}
-
-# Generate a label and return it
-sub GenLabel {
-
-    my $I;
-    my $L = "";;
-    my $Num = $LabelNum++;
-
-    # Generate the label
-    for ($I = 0; $I < 4; $I++) {
-        $L = $NameTab[$Num % 36] . $L;
-        $Num /= 36;
-    }
-    return $L;
-}
-
-# Make an output file name from an input file name
-sub GetOutName {
-
-    # Input name is parameter
-    my $InName = $_[0];
-
-    # Create the output file name from the input file name
-    if ($ReplaceExt && $InName =~ /^(.+)\.([^\.\/]*)$/) {
-        return "$1.html";
-    } else {
-        return "$InName.html";
-    }
-}
-
-# Translate some HTML characters into harmless names.
-sub Cleanup {
-    my $S = shift (@_);
-    $S =~ s/&/&amp;/g;
-    $S =~ s/</&lt;/g;
-    $S =~ s/>/&gt;/g;
-    $S =~ s/\"/&quot;/g;
-    return $S;
-}
-
-# Strip a path from a filename and return just the name
-sub StripPath {
-
-    # Filename is argument
-    my $FileName = $_[0];
-
-    # Remove a path name if we have one
-    $FileName =~ /^(.*?)([^\/]*)$/;
-    return $2;
-}
-
-
-
-#-----------------------------------------------------------------------------#
-#                         Document header and footer                          #
-# ----------------------------------------------------------------------------#
-
-
-
-# Print the document header
-sub DocHeader {
-    my $OUT = shift (@_);
-    my $Asm = shift (@_);
-    print $OUT "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
-    print $OUT <<"EOF";
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<meta name="GENERATOR" content="ca65html">
-<title>$Asm</title>
-<style type=\"text/css\">
-body {
-    background-color: $BGColor;
-    color: $TextColor;
-}
-h1 {
-    text-align: center;
-}
-#top {
-    margin: 2em 0 3em 0;
-    border-bottom: 1px solid grey;
-}
-#bottom {
-    margin: 3em 0 1em 0;
-    padding-top: 1em;
-    border-top: 1px solid grey;
-}
-img {
-    border: 0;
-    margin: 0;
-    float: right;
-}
-.ctrl {
-    color: $CtrlColor;
-}
-.keyword {
-    color: $KeywordColor;
-}
-.string {
-    color: $StringColor;
-}
-.comment {
-    color: $CommentColor;
-}
-a:link {
-    color: #0000d0;
-}
-a:visited {
-    color: #000060;
-}
-a:active {
-    color: #00d0d0;
-}
-</style>
-</head>
-<body>
-<div id=\"top\"><h1>$Asm</h1></div>
-EOF
-}
-
-# Print the document footer
-sub DocFooter {
-    my $OUT  = shift (@_);
-    my $Name = shift (@_);
-
-    # Get the current date and time
-    my $Today = localtime;
-
-    # Print
-    print $OUT "<div id=\"bottom\"><address>\n";
-    print $OUT "<a href=\"http://validator.w3.org/check?uri=referer\">\n";
-    print $OUT "<img src=\"http://www.w3.org/Icons/valid-xhtml10-blue\" alt=\"Valid XHTML 1.0 Strict\" height=\"31\" width=\"88\" /></a><br>\n";
-    print $OUT "$Name; generated on $Today by ca65html<br>\n";
-    print $OUT "<a href=\"mailto:uz&#64;cc65.org\">uz&#64;cc65.org</a>\n";
-    print $OUT "</address></div>\n";
-    print $OUT "</body></html>\n";
-}
-
-
-
-#-----------------------------------------------------------------------------#
-#                                Colorization                                 #
-#-----------------------------------------------------------------------------#
-
-
-
-sub ColorizeComment {
-    if ($Colorize && $_[0] ne "") {
-        return "<span class=\"comment\">$_[0]</span>";
-    } else {
-        return $_[0];
-    }
-}
-
-
-
-sub ColorizeCtrl {
-    if ($Colorize) {
-        return "<span class=\"ctrl\">$_[0]</span>";
-    } else {
-        return $_[0];
-    }
-}
-
-
-
-sub ColorizeKeyword {
-    if ($Colorize) {
-        return "<span class=\"keyword\">$_[0]</span>";
-    } else {
-        return $_[0];
-    }
-}
-
-
-
-sub ColorizeString {
-    if ($Colorize) {
-        return "<span class=\"string\">$_[0]</span>";
-    } else {
-        return $_[0];
-    }
-}
-
-
-
-#-----------------------------------------------------------------------------#
-#                            File list management                             #
-#-----------------------------------------------------------------------------#
-
-
-
-sub AddFile {
-
-    # Argument is file to add
-    my $FileName = $_[0];
-
-    # Get just the name (remove a path if there is one)
-    my $Name = StripPath ($FileName);
-
-    # Check if we have the file already
-    if (exists ($Files{$Name})) {
-        Gabble ("File \"$FileName\" already known");
-        return;
-    }
-
-    # Check with the full pathname. If we don't find it, search in the current
-    # directory
-    if (-f $FileName && -r _) {
-        $Files{$Name} = $FileName;
-        $FileCount++;
-    } elsif (-f $Name && -r _) {
-        $Files{$Name} = $Name;
-        $FileCount++;
-    } else {
-        Abort ("$FileName not found or not readable");
-    }
-}
-
-
-
-#-----------------------------------------------------------------------------#
-#                       Referencing and defining labels                       #
-#-----------------------------------------------------------------------------#
-
-
-
-# Get a label reference
-sub RefLabel {
-
-    # Arguments are: Filename, identifier, item that should be tagged
-    my $FileName = $_[0];
-    my $Id       = $_[1];
-    my $Item     = $_[2];
-
-    # Search for the identifier in the list of labels
-    if (exists ($Labels{$FileName}{$Id})) {
-        # It is a label (in this file)
-        return sprintf ("<a href=\"#%s\">%s</a>", $Labels{$FileName}{$Id}, $Item);
-    } elsif (exists ($Imports{$FileName}{$Id})) {
-        # It is an import. If LinkStyle is 1, or if the file exporting the
-        # identifier is not visible, we link to the .import statement in the
-        # current file. Otherwise we link directly to the referenced symbol
-        # in the file that exports it.
-        if ($LinkStyle == 1 or not exists ($Exports{$Id})) {
-            return sprintf ("<a href=\"#%s\">%s</a>", $Imports{$FileName}{$Id}, $Item);
-        } else {
-            # Get the filename from the export
-            my $Label;
-            ($FileName, $Label) = split (/#/, $Exports{$Id});
-            if (not defined ($Labels{$FileName}{$Id})) {
-                # This may currently happen because we don't see .include
-                # statements, so we may have an export but no definition.
-                # Link to the .export statement instead
-                $Label = $Exports{$Id};
-            } else {
-                # Link to the definition in the file
-                $Label = sprintf ("%s#%s", $FileName, $Labels{$FileName}{$Id});
-            }
-            return sprintf ("<a href=\"%s\">%s</a>", $Label, $Item);
-        }
-    } else {
-        # The symbol is unknown, return as is
-        return $Item;
-    }
-}
-
-
-
-#-----------------------------------------------------------------------------#
-#                                   Pass 1                                    #
-# ----------------------------------------------------------------------------#
-
-
-
-# Process1: Read one file for the first time.
-sub Process1 {
-
-    # Variables
-    my $Line;
-    my $Id;
-
-    # Filename is parameter
-    my $InName = shift(@_);
-
-    # Create the output file name from the input file name
-    my $OutName = GetOutName ($InName);
-
-    # Current cheap local label prefix is empty
-    my $CheapPrefix = "";
-
-    # Open a the input file
-    my $FileName = $Files{$InName};     # Includes path if needed
-    open (INPUT, "<$FileName") or Abort ("Cannot open $FileName: $!");
-
-    # Keep the user happy
-    Gabble ("$FileName => $OutName");
-
-    # Read and process all lines from the file
-    while ($Line = <INPUT>) {
-
-        # Remove the newline
-        chomp ($Line);
-
-        # Check for a label
-        if ($Line =~ /^\s*(([\@?]?)[_a-zA-Z]\w*)\s*(?::=?|=)/) {
-
-            # Is this a local label?
-            if ($2 ne "") {
-                # Use the prefix
-                $Id = "$CheapPrefix$1";
-            } else {
-                # Use as is
-                $Id = $1;
-                # Remember the id as new cheap local prefix
-                $CheapPrefix = $Id;
-            }
-
-            # Remember the label
-            $Labels{$OutName}{$Id} = GenLabel();
-
-        # Check for an import statement
-        } elsif ($Line =~ /^\s*\.(?:(?:force)?import|importzp)\s+(.*?)\s*(?:;.*)?$/i) {
-
-            # Split into a list of identifiers
-            my @Ids = split (/\s*(?::\s*[A-Za-z]+\s*)?,\s*/, $1);
-
-            # Remove an address-size specifier, from the last identifier,
-            # if there is one.
-            $Ids[$#Ids] =~ s/\s*:\s*[A-Za-z]+//;
-
-            for $Id (@Ids) {
-                $Imports{$OutName}{$Id} = GenLabel();
-            }
-
-        # Check for an export statement
-        } elsif ($Line =~ /^\s*\.export(?:zp)?\s+(.*?)\s*(?:;.*)?$/i) {
-
-            # Split into a list of identifiers
-            my @Ids = split (/\s*(?::\s*[A-Za-z]+\s*)?,\s*/, $1);
-
-            # Remove an address-size specifier, from the last identifier,
-            # if there is one.
-            $Ids[$#Ids] =~ s/\s*:\s*[A-Za-z]+//;
-
-            for $Id (@Ids) {
-                $Exports{$Id} = sprintf ("%s#%s", $OutName, GenLabel());
-            }
-
-        # Check for an actor statement.
-        } elsif ($Line =~ /^\s*\.(?:(?:(?:con|de)struc|interrup)tor|condes)\s+([_a-z]\w*)/i) {
-            $Exports{$1} = sprintf ("%s#%s", $OutName, GenLabel());
-
-        # Check for a .proc statement
-        } elsif ($Line =~ /^\s*\.proc\s+([_a-z]\w*)/i) {
-
-            # Remember the ID as the new cheap-local prefix.
-            $CheapPrefix = $1;
-            $Labels{$OutName}{$1} = GenLabel();
-        }
-    }
-
-    # Close the input file
-    close (INPUT);
-}
-
-
-
-# Pass1: Read all files for the first time.
-sub Pass1 () {
-
-    # Keep the user happy
-    Gabble ("Pass 1");
-
-    # Walk over the files
-    for my $InName (keys (%Files)) {
-        # Process one file
-        Process1 ($InName);
-    }
-}
-
-
-
-#-----------------------------------------------------------------------------#
-#                                   Pass 2                                    #
-# ----------------------------------------------------------------------------#
-
-
-
-# Process2: Read one file the second time.
-sub Process2 {
-
-    # Variables
-    my $Base;
-    my $Ext;
-    my $Line;
-    my $OutLine;
-    my $Id;
-    my $Label;
-    my $Comment;
-    my $Trailer;
-
-    # Input file is parameter
-    my $InName = shift(@_);
-
-    # Create the output file name from the input file name
-    my $OutName = GetOutName ($InName);
-
-    # Current cheap local label prefix is empty
-    my $CheapPrefix = "";
-
-    # Open a the input file
-    my $FileName = $Files{$InName};     # Includes path if needed
-    open (INPUT, "<$FileName") or Abort ("Cannot open $FileName: $!");
-
-    # Open the output file and print the HTML header
-    open (OUTPUT, ">$HTMLDir$OutName") or Abort ("Cannot open $OutName: $!");
-    DocHeader (OUTPUT, $InName);
-    print OUTPUT "<pre>\n";
-
-    # Keep the user happy
-    Gabble ("$FileName => $OutName");
-
-    # The instructions that will have hyperlinks if a label is used.
-    # And, they will be highlighted when color is used.
-    my $LabelIns = "adc|add|and|asl|bb[rs][0-7]|b[cv][cs]|beq|bge|bit|blt|".
-                 "bmi|bne|bpl|br[akl]|bsr|cmp|cop|cp[axy]|dec|eor|inc|jml|".
-                 "jmp|jsl|jsr|ld[axy]|lsr|mvn|mvp|ora|pe[air]|rep|".
-                 "[rs]mb[0-7]|rol|ror|sbc|sep|st[012axyz]|sub|tai|tam|tdd|".
-                 "ti[ain]|tma|trb|tsb|tst";
-
-    # Instructions that have only the implied-addressing mode -- therefore,
-    # no hyperlinking.  They will be highlighted only, when color is used.
-    my $OtherIns = "cl[acdivxy]|csh|csl|de[axy]|in[axy]|nop|ph[abdkpxy]|".
-                 "pl[abdpxy]|rt[ils]|sax|say|se[cdit]|stp|swa|sxy|ta[dsxy]|".
-                 "tam[0-7]|tcd|tcs|tda|tdc|tma[0-7]|ts[acx]|tx[asy]|tya|tyx|".
-                 "wai|xba|xce";
-
-    # Read the input file, replacing references with hyperlinks; and, mark
-    # labels as link targets.
-    my $LineNo = 0;
-    LINE: while ($Line = <INPUT>) {
-
-        # Count input lines
-        $LineNo++;
-
-        # Remove the newline at the end of line. Don't use chomp to be able to
-        # read dos/windows sources on unices.
-        $Line =~ s/[\r\n]*$//;
-
-        # If requested, convert tabs to spaces
-        if ($CvtTabs) {
-            # Don't ask me - this is from the perl manual page
-            1 while ($Line =~ s/\t+/' ' x (length($&) * $TabSize - length($`) % $TabSize)/e) ;
-        }
-
-        # Clear the output line
-        $OutLine = "";
-
-        # If requested, add a html label to each line with a name "linexxx",
-        # so it can be referenced from the outside (this is the same convention
-        # that is used by c2html). If we have line numbers enabled, add them.
-        if ($LineLabels && $LineNumbers) {
-            $OutLine .= sprintf ("<a name=\"line%d\">%6d</a>:  ", $LineNo, $LineNo);
-        } elsif ($LineLabels) {
-            $OutLine .= sprintf ("<a name=\"line%d\"></a>", $LineNo);
-        } elsif ($LineNumbers) {
-            $OutLine .= sprintf ("%6d:  ", $LineNo);
-        }
-
-        # Cut off a comment from the input line. Beware: We have to check for
-        # strings, since these may contain a semicolon that is no comment
-        # start.
-        ($Line, $Comment) = $Line =~ /^((?:[^"';]+|".*?"|'.*?')*)(.*)$/;
-        if ($Comment =~ /^["']/) {
-            # Line with invalid syntax - there's a string start but
-            # no string end.
-            Abort (sprintf ("Invalid input at %s(%d)", $FileName, $LineNo));
-        }
-
-        # Remove trailing whitespace and move it together with the comment
-        # into the $Trailer variable.
-        $Line =~ s/\s*$//;
-        $Trailer = $& . ColorizeComment (Cleanup ($Comment));
-
-        # Check for a label at the start of the line. If we have one, process
-        # it, and remove it from the line.
-        if ($Line =~ s/^\s*?(([\@?]?)[_a-zA-Z]\w*)(\s*(?::=?|=))//) {
-
-            # Is this a local label?
-            if ($2 ne "") {
-                # Use the prefix
-                $Id = "$CheapPrefix$1";
-            } else {
-                # Use as is
-                $Id = $1;
-                # Remember the id as new cheap local prefix
-                $CheapPrefix = $Id;
-            }
-
-            # Get the label for the id
-            $Label = $Labels{$OutName}{$Id};
-
-            # Print the label with a tag
-            $OutLine .= "<a name=\"$Label\">$1</a>$3";
-
-            # Is the name explicitly assigned a value?
-            if ($3 =~ /=$/) {
-                # Print all identifiers if there are any.
-                while ($Line =~ s/^([^_a-zA-Z]*?)(([\@?]?)[_a-zA-Z]\w*)//) {
-                    # Add the non-label stuff.
-                    $OutLine .= Cleanup ($1);
-
-                    # Use the prefix if the label is local.
-                    # Get the reference to that label if we find it.
-                    $OutLine .= RefLabel ($OutName, ($3 ne "") ? "$CheapPrefix$2" : $2, $2);
-                }
-
-                # Add a remainder if there is one.
-                $OutLine .= Cleanup ($Line);
-
-                # The line is complete; print it.
-                next LINE;
-            }
-        }
-
-        # Print any leading whitespace and remove it, so we don't have to
-        # care about whitespace below.
-        if ($Line =~ s/^\s+//) {
-            $OutLine .= $&;
-        }
-
-        # Handle the import statements
-        if ($Line =~ s/^\.(?:(?:force)?import|importzp)\s+//i) {
-
-            # Print any fixed stuff from the line and remove it
-            $OutLine .= $&;
-
-            # Print all identifiers if there are any
-            while ($Line =~ s/^[_a-zA-Z]\w*//) {
-
-                # Remember the identifier
-                my $Id = $&;
-
-                # Variable to assemble HTML representation
-                my $Contents = "";
-
-                # Make this import a link target
-                if (exists ($Imports{$OutName}{$Id})) {
-                    $Label = $Imports{$OutName}{$Id};
-                    $Contents .= sprintf (" name=\"%s\"", $Label);
-                }
-
-                # If we have an export for this import, add a link to this
-                # export definition
-                if (exists ($Exports{$Id})) {
-                    $Label = $Exports{$Id};
-                    $Contents .= sprintf (" href=\"%s\"", $Label);
-                }
-
-                # Add the HTML stuff to the output line
-                if ($Contents ne "") {
-                    $OutLine .= sprintf ("<a%s>%s</a>", $Contents, $Id);
-                } else {
-                    $OutLine .= $Id;
-                }
-
-                # Check if another identifier follows
-                if ($Line =~ s/^\s*(?::\s*[A-Za-z]+\s*)?,\s*//) {
-                    $OutLine .= $&;
-                } else {
-                    last;
-                }
-            }
-
-            # Add an remainder if there is one
-            $OutLine .= Cleanup ($Line);
-
-        # Handle export statements
-        } elsif ($Line =~ s/^\.export(?:zp)?\s+//i) {
-
-            # Print the command and the whitespace.
-            $OutLine .= $&;
-
-            # Print all identifiers if there are any
-            while ($Line =~ s/^[_a-zA-Z]\w*//) {
-
-                # Remember the identifier
-                my $Id = $&;
-
-                # Variable to assemble HTML representation
-                my $Contents = "";
-
-                # If we have a definition for this export in this file, add
-                # a link to the definition.
-                if (exists ($Labels{$OutName}{$Id})) {
-                    $Label = $Labels{$OutName}{$Id};
-                    $Contents = sprintf (" href=\"#%s\"", $Label);
-                }
-
-                # If we have this identifier in the list of exports, add a
-                # jump target for the export.
-                if (exists ($Exports{$Id})) {
-                    $Label = $Exports{$Id};
-                    # Be sure to use only the label part
-                    $Label =~ s/^.*#//;
-                    $Contents .= sprintf (" name=\"%s\"", $Label);
-                }
-
-                # Add the HTML stuff to the output line
-                if ($Contents ne "") {
-                    $OutLine .= sprintf ("<a%s>%s</a>", $Contents, $Id);
-                } else {
-                    $OutLine .= $Id;
-                }
-
-                # Check if another identifier follows
-                if ($Line =~ s/^\s*(?::\s*[A-Za-z]+\s*)?,\s*//) {
-                    $OutLine .= $&;
-                } else {
-                    last;
-                }
-            }
-
-            # Add an remainder if there is one
-            $OutLine .= Cleanup ($Line);
-
-        # Handle actor statements.
-        } elsif ($Line =~ s/^(\.(?:(?:(?:con|de)struc|interrup)tor|condes)\s+)([_a-z]\w*)//i) {
-
-            # Print the command and the whitespace.
-            $OutLine .= $1;
-
-            # Remember the identifier.
-            $Id = $2;
-
-            # Variable to assemble HTML representation
-            my $Contents = "";
-
-            # If we have a definition for this actor, in this file,
-            # then add a link to that definition.
-            if (exists ($Labels{$OutName}{$Id})) {
-                $Contents = sprintf (" href=\"#%s\"", $Labels{$OutName}{$Id});
-            }
-
-            # Get the target, for linking from imports in other files.
-            $Label = $Exports{$Id};
-            # Be sure to use only the label part.
-            $Label =~ s/^.*#//;
-
-            # Add the HTML stuff and the remainder of the actor
-            # to the output line.
-            $OutLine .= sprintf ("<a name=\"%s\"%s>%s</a>%s", $Label,
-                                 $Contents, $Id, Cleanup ($Line));
-
-        # Check for .faraddr, .addr, .dword, .word, .dbyt, .byt, .byte, .res,
-        # .elseif, .if, .align, and .org.
-        } elsif ($Line =~ s/^\.(?:(?:far)?addr|d?word|d?byte?|res|(?:else)?if|align|org)\s+//i) {
-
-            # Print the command and the white space
-            $OutLine .= $&;
-
-            # Print all identifiers if there are any
-            while ($Line =~ s/^([^_a-zA-Z]*?)(([\@?]?)[_a-zA-Z]\w*)//) {
-                # Add the non label stuff
-                $OutLine .= Cleanup ($1);
-
-                # Use the prefix if the label is local.
-                # Get the reference to that label if we find it.
-                $OutLine .= RefLabel ($OutName, ($3 ne "") ? "$CheapPrefix$2" : $2, $2);
-            }
-
-            # Add an remainder if there is one
-            $OutLine .= Cleanup ($Line);
-
-        # Handle .proc
-        } elsif ($Line =~ /^(\.proc)(\s+)([_a-z]\w*)?(.*)$/i) {
-
-            # Do we have an identifier?
-            if ($3 ne "") {
-                # Remember the ID as the new cheap-local prefix.
-                $CheapPrefix = $3;
-
-                # Get the label for the id
-                $Label = $Labels{$OutName}{$3};
-
-                # Print the label with a tag
-                $OutLine .= "$1$2<a name=\"$Label\">$3</a>";
-
-            } else {
-
-                # Print a line that has invalid syntax (its operand isn't
-                # a correctly formed name).
-                $OutLine .= "$1$2";
-            }
-
-            # Add the remainder
-            $OutLine .= Cleanup ($4);
-
-        # Handle .include
-        } elsif ($Line =~ /^(\.include)(\s*)\"((?:[^\"]+?|\\\")+)(\".*)$/i) {
-
-            # Add the fixed stuff to the output line
-            $OutLine .= "$1$2&quot;";
-
-            # Get the filename into a named variable
-            my $FileName = Cleanup ($3);
-
-            # Get the name without a path
-            my $Name = StripPath ($3);
-
-            # If the include file is among the list of our files, add a link,
-            # otherwise just add the name as is.
-            if (exists ($Files{$Name})) {
-                $OutLine .= sprintf ("<a href=\"%s\">%s</a>", GetOutName ($Name), $FileName);
-            } else {
-                $OutLine .= $FileName;
-            }
-
-            # Add the remainder
-            $OutLine .= Cleanup ($4);
-
-        # Handle .dbg line
-        } elsif ($CRefs && $Line =~ s/^\.dbg\s+//) {
-
-            # Add the fixed stuff to the output line
-            $OutLine .= $&;
-
-            # Check for the type of the .dbg directive
-            if ($Line =~ /^(line,\s*)\"((?:[^\"]+?|\\\")+)\"(,\s*)(\d+)(.*)$/) {
-
-                # Add the fixed stuff to the output line
-                $OutLine .= "$1&quot;";
-
-                # Get the filename and line number into named variables
-                my $DbgFile = $2;
-                my $DbgLine = $4;
-
-                # Remember the remainder
-                $Line = "\"$3$4$5";
-
-                # Get the name without a path
-                my $Name = StripPath ($DbgFile);
-
-                # We don't need FileName any longer as is, so clean it up
-                $DbgFile = Cleanup ($DbgFile);
-
-                # Add a link to the source file
-                $OutLine .= sprintf ("<a href=\"%s.html#line%d\">%s</a>", $Name, $DbgLine, $DbgFile);
-
-                # Add the remainder
-                $OutLine .= Cleanup ($Line);
-
-            } elsif ($Line =~ /^(file,\s*)\"((?:[^\"]+?|\\\")+)\"(.*)$/) { #pf FIXME: doesn't handle \" correctly!
-
-                # Get the filename into a named variables
-                my $DbgFile = Cleanup ($2);
-
-                # Get the name without a path
-                my $Name = Cleanup (StripPath ($2));
-
-                # Add the fixed stuff to the output line
-                $OutLine .= sprintf ("%s\"<a href=\"%s.html\">%s</a>\"%s",
-                                     $1, $Name, $DbgFile, $3);
-
-            } else {
-
-                # Add the remainder
-                $OutLine .= Cleanup ($Line);
-
-            }
-
-        } elsif ($CRefs && $Line =~ /^(\.dbg)(\s+line,\s*)\"((?:[^\"]+?|\\\")+)\"(,\s*)(\d+)(.*$)/) {
-
-            # Add the fixed stuff to the output line
-            $OutLine .= "$1$2&quot;";
-
-            # Get the filename and line number into named variables
-            my $FileName = $3;
-            my $LineNo   = $5;
-
-            # Remember the remainder
-            $Line = "\"$4$5$6";
-
-            # Get the name without a path
-            my $Name = StripPath ($FileName);
-
-            # We don't need FileName any longer as is, so clean it up
-            $FileName = Cleanup ($FileName);
-
-            # Add a link to the source file
-            $OutLine .= sprintf ("<a href=\"%s.html#line%d\">%s</a>", $Name, $LineNo, $FileName);
-
-            # Add the remainder
-            $OutLine .= Cleanup ($Line);
-
-        # Check for .ifdef, .ifndef, .ifref, and .ifnref.
-        } elsif ($Line =~ s/^(\.ifn?[dr]ef\s+)(([\@?]?)[_a-z]\w*)?//i) {
-
-            # Print the command and the whitespace.
-            $OutLine .= $1;
-
-            if ($2 ne "") {
-                # Use the prefix if the label is local.
-                # Get the reference to that label if we find it.
-                $OutLine .= RefLabel ($OutName, ($3 ne "") ? "$CheapPrefix$2" : $2, $2);
-            }
-
-            # Add a remainder if there is one.
-            $OutLine .= Cleanup ($Line);
-
-        # Check for assertions.
-        } elsif ($Line =~ s/^(\.assert\s+)(.+?)(,\s*(?:error|warning)\s*(?:,.*)?)$/$2/i) {
-
-            # Print the command and the whitespace.
-            $OutLine .= $1;
-
-            $Comment = $3;
-
-            # Print all identifiers if there are any.
-            while ($Line =~ s/^([^_a-zA-Z]*?)(([\@?]?)[_a-zA-Z]\w*)//) {
-                # Add the non-label stuff.
-                $OutLine .= Cleanup ($1);
-
-                # Use the prefix if the label is local.
-                # Get the reference to that label if we find it.
-                $OutLine .= RefLabel ($OutName, ($3 ne "") ? "$CheapPrefix$2" : $2, $2);
-            }
-
-            # Add a remainder if there is one.
-            $OutLine .= Cleanup ($Line . $Comment);
-
-        # Check for instructions with labels
-        } elsif ($Line =~ s/^($LabelIns)\b(\s*)//io) {
-
-            # Print the instruction and white space
-            $OutLine .= ColorizeKeyword ($1) . $2;
-
-            # Print all identifiers if there are any.
-            while ($Line =~ s/^([^_a-zA-Z]*?)(([\@?]?)[_a-zA-Z]\w*)//) {
-
-                # Add the non-label stuff.
-                $OutLine .= Cleanup ($1);
-
-                # Is this a local label?
-                if ($3 ne "") {
-                    # Use the prefix
-                    $Id = "$CheapPrefix$2";
-                } else {
-                    # Use as is
-                    $Id = $2;
-                }
-
-                # Get the reference to this label if we find it
-                $OutLine .= RefLabel ($OutName, $Id, $2);
-            }
-
-            # Reassemble and print the line
-            $OutLine .= Cleanup ($Line);
-
-        # Check for all other instructions
-        } elsif ($Line =~ /^($OtherIns)\b(.*)$/io) {
-
-            # Colorize and print
-            $OutLine .= ColorizeKeyword ($1) . Cleanup ($2);
-
-        } else {
-
-            # Nothing known - print the line
-            $OutLine .= Cleanup ($Line);
-
-        }
-
-    } continue {
-        # Colorize all keywords
-        $OutLine =~ s/(?<![\w;])\.[_a-zA-Z]\w*/ColorizeCtrl ($&)/ge;
-
-        # Print the result with the trailer.
-        print OUTPUT "$OutLine$Trailer\n";
-    }
-
-    # Print the HTML footer
-    print OUTPUT "</pre>\n";
-    DocFooter (OUTPUT, $OutName);
-
-    # Close the files
-    close (INPUT);
-    close (OUTPUT);
-}
-
-
-
-# Pass2: Read all files the second time.
-sub Pass2 () {
-
-    # Keep the user happy
-    Gabble ("Pass 2");
-
-    # Walk over the files
-    for my $InName (keys (%Files)) {
-        # Process one file
-        Process2 ($InName);
-    }
-}
-
-
-
-#-----------------------------------------------------------------------------#
-#                            Create an index page                             #
-# ----------------------------------------------------------------------------#
-
-
-
-# Print a list of all files
-sub FileIndex {
-
-    # File is argument
-    my $INDEX = $_[0];
-
-    # Print the file list in a table
-    print $INDEX "<h2>Files</h2><p>\n";
-    print $INDEX "<table border=\"0\" width=\"100%\">\n";
-    my $Count = 0;
-    for my $File (sort (keys (%Files))) {
-
-        #
-        if (($Count % $IndexCols) == 0) {
-            print $INDEX "<tr>\n";
-        }
-        printf $INDEX "<td><a href=\"%s\">%s</a></td>\n", GetOutName ($File), $File;
-        if (($Count % $IndexCols) == $IndexCols-1) {
-            print $INDEX "</tr>\n";
-        }
-        $Count++;
-    }
-    if (($Count % $IndexCols) != 0) {
-        print $INDEX "</tr>\n";
-    }
-    print $INDEX "</table><p><br><p>\n";
-}
-
-
-
-# Print a list of all exports
-sub ExportIndex {
-
-    # File is argument
-    my $INDEX = $_[0];
-
-    # Print the file list in a table
-    print $INDEX "<h2>Exports</h2><p>\n";
-    print $INDEX "<table border=\"0\" width=\"100%\">\n";
-    my $Count = 0;
-    for my $Export (sort (keys (%Exports))) {
-
-        # Get the export
-        my $File;
-        my $Label;
-        ($File, $Label) = split (/#/, $Exports{$Export});
-
-        # The label is the label of the export statement. If we can find the
-        # actual label, use this instead.
-        if (exists ($Labels{$File}{$Export})) {
-            $Label = $Labels{$File}{$Export};
-        }
-
-        #
-        if (($Count % $IndexCols) == 0) {
-            print $INDEX "<tr>\n";
-        }
-        printf $INDEX "<td><a href=\"%s#%s\">%s</a></td>\n", $File, $Label, $Export;
-        if (($Count % $IndexCols) == $IndexCols-1) {
-            print $INDEX "</tr>\n";
-        }
-        $Count++;
-    }
-    if (($Count % $IndexCols) != 0) {
-        print $INDEX "</tr>\n";
-    }
-    print $INDEX "</table><p><br><p>\n";
-}
-
-
-
-sub CreateIndex {
-
-    # Open the index page file
-    open (INDEX, ">$HTMLDir$IndexName") or Abort ("Cannot open $IndexName: $!");
-
-    # Print the header
-    DocHeader (INDEX, $IndexTitle, 0);
-
-    # Print the file list in a table
-    FileIndex (INDEX);
-    ExportIndex (INDEX);
-
-    # Print the document footer
-    DocFooter (INDEX, $IndexName);
-
-    # Close the index file
-    close (INDEX);
-}
-
-
-
-#-----------------------------------------------------------------------------#
-#                           Print usage information                           #
-# ----------------------------------------------------------------------------#
-
-
-
-sub Usage {
-    print "Usage: ca65html [options] file ...\n";
-    print "Options:\n";
-    print "  --bgcolor c        Use background color c instead of $BGColor\n";
-    print "  --colorize         Add color highlights to the output\n";
-    print "  --commentcolor c   Use color c for comments instead of $CommentColor\n";
-    print "  --crefs            Generate references to the C source file(s)\n";
-    print "  --ctrlcolor c      Use color c for directives instead of $CtrlColor\n";
-    print "  --cvttabs          Convert tabs to spaces in the output\n";
-    print "  --help             This text\n";
-    print "  --htmldir dir      Specify directory for HTML files\n";
-    print "  --indexcols n      Use n columns on index page (default $IndexCols)\n";
-    print "  --indexname file   Use file for the index file instead of $IndexName\n";
-    print "  --indexpage        Create an index page\n";
-    print "  --indextitle title Use title as the index title instead of $IndexTitle\n";
-    print "  --keywordcolor c   Use color c for keywords instead of $KeywordColor\n";
-    print "  --linelabels       Generate a linexxx HTML label for each line\n";
-    print "  --linenumbers      Add line numbers to the output\n";
-    print "  --linkstyle style  Use the given link style\n";
-    print "  --replaceext       Replace source extension instead of appending .html\n";
-    print "  --tabsize n        Use n spaces when replacing tabs (default $TabSize)\n";
-    print "  --textcolor c      Use text color c instead of $TextColor\n";
-    print "  --verbose          Be more verbose\n";
-}
-
-
-
-#-----------------------------------------------------------------------------#
-#                                    Main                                     #
-# ----------------------------------------------------------------------------#
-
-
-
-# Get program options
-GetOptions ("bgcolor=s"         => \$BGColor,
-            "colorize"          => \$Colorize,
-            "commentcolor=s"    => \$CommentColor,
-            "crefs"             => \$CRefs,
-            "ctrlcolor=s"       => \$CtrlColor,
-            "cvttabs"           => \$CvtTabs,
-            "debug!"            => \$Debug,
-            "help"              => \$Help,
-            "htmldir=s"         => \$HTMLDir,
-            "indexcols=i"       => \$IndexCols,
-            "indexname=s"       => \$IndexName,
-            "indexpage"         => \$IndexPage,
-            "indextitle=s"      => \$IndexTitle,
-            "keywordcolor=s"    => \$KeywordColor,
-            "linelabels"        => \$LineLabels,
-            "linenumbers"       => \$LineNumbers,
-            "linkstyle=i"       => \$LinkStyle,
-            "replaceext"        => \$ReplaceExt,
-            "tabsize=i"         => \$TabSize,
-            "textcolor=s"       => \$TextColor,
-            "verbose!"          => \$Verbose,
-            "<>"                => \&AddFile);
-
-# Check some arguments
-if ($IndexCols <= 0 || $IndexCols >= 20) {
-    Abort ("Invalid value for --indexcols option");
-}
-if ($TabSize < 1 || $TabSize > 16) {
-    Abort ("Invalid value for --tabsize option");
-}
-if ($HTMLDir ne "" && $HTMLDir =~ /[^\/]$/) {
-    # Add a trailing path separator
-    $HTMLDir .= "/";
-}
-
-
-
-# Print help if requested
-if ($Help) {
-    Usage ();
-}
-
-# Check if we have input files given
-if ($FileCount == 0) {
-    Abort ("No input files");
-}
-
-# Convert the documents
-Pass1 ();
-Pass2 ();
-
-# Generate an index page if requested
-if ($IndexPage) {
-    CreateIndex ();
-}
-
-# Done
-exit 0;
diff --git a/util/cbm/cbmcvt.c b/util/cbm/cbmcvt.c
deleted file mode 100644 (file)
index 11c0325..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/* cbmcvt.c --  PetSCII <--> ISO-8859-1 Conversion Filter Tool */
-/* 2010-09-06, Greg King */
-
-#include <stdio.h>
-#include <unistd.h>
-
-/* Translation table ISO-8859-1 -> PetSCII */
-static const unsigned char CTPET[256] = {
-    0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x14,0x09,0x0D,0x11,0x93,0x0A,0x0E,0x0F,
-    0x10,0x0B,0x12,0x13,0x08,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
-    0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
-    0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
-    0x40,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
-    0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0x5B,0xBF,0x5D,0x5E,0xA4,
-    0xAD,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
-    0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0xB3,0xDD,0xAB,0xB1,0xDF,
-    0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
-    0x90,0x91,0x92,0x0C,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
-    0xA0,0xA1,0xA2,0xA3,0x5F,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0x7D,0xAC,0x60,0xAE,0xAF,
-    0xB0,0x7E,0xB2,0x7B,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0x5C,
-    0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
-    0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0xDC,0x7C,0xDE,0x7F,
-    0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
-    0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
-};
-
-static unsigned char CTISO[256];
-
-
-int main (int argc, char *argv[]) {
-    int C;
-    size_t I = 0u;
-
-    if (isatty(fileno(stdin))) {
-        fputs("cbmcvt v2.1 -- Conversion Filter (stdin --> stdout)\n"
-              " -p  converts ISO-8859-1 to PetSCII\n"
-              " else, converts in other direction.\n", stderr);
-        return 0;
-        }
-    if (argc > 1 && argv[1][0] == '-' && argv[1][1] == 'p') {
-        while ((C = fgetc (stdin)) != EOF) {
-            fputc (CTPET[C], stdout);
-        }
-    } else {
-        /* Create translation table PetSCII -> ISO-8859-1 */
-        for (; I < sizeof CTPET; ++I) {
-            CTISO[CTPET[I]] = I;
-        }
-
-        while ((C = fgetc (stdin)) != EOF) {
-            fputc (CTISO[C], stdout);
-        }
-    }
-    return 0;
-}
diff --git a/util/zlib/deflater.c b/util/zlib/deflater.c
deleted file mode 100644 (file)
index 32d01a3..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-** Compresses data to the DEFLATE format.
-** The compressed data is ready to use with inflatemem().
-** Compile using e.g.
-** gcc -O2 -o deflater deflater.c -lz
-**
-** Author: Piotr Fusik <fox@scene.pl>
-*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <zlib.h>
-
-#define IN_SIZE_MAX 60000U
-#define OUT_SIZE_MAX 60000U
-
-int main(int argc, char* argv[])
-{
-        FILE* fp;
-        char* inbuf;
-        char* outbuf;
-        size_t inlen;
-        size_t outlen;
-        z_stream stream;
-
-        /* check command line */
-        if (argc != 3) {
-                fprintf(stderr,
-                        "Compresses a file to the DEFLATE format.\n"
-                        "24 Aug 2002, Piotr Fusik <fox@scene.pl>\n"
-                        "Usage: deflater input_file deflated_file\n"
-                );
-                return 3;
-        }
-
-        /* alloc buffers */
-        inbuf = malloc(IN_SIZE_MAX);
-        outbuf = malloc(OUT_SIZE_MAX);
-        if (inbuf == NULL || outbuf == NULL) {
-                fprintf(stderr, "deflater: Out of memory!\n");
-                return 1;
-        }
-
-        /* read input file */
-        fp = fopen(argv[1], "rb");
-        if (fp == NULL) {
-                perror(argv[1]);
-                return 1;
-        }
-        inlen = fread(inbuf, 1, IN_SIZE_MAX, fp);
-        fclose(fp);
-
-        /* compress */
-        stream.next_in = inbuf;
-        stream.avail_in = inlen;
-        stream.next_out = outbuf;
-        stream.avail_out = OUT_SIZE_MAX;
-        stream.zalloc = (alloc_func) 0;
-        stream.zfree = (free_func) 0;
-        if (deflateInit2(&stream, Z_BEST_COMPRESSION, Z_DEFLATED,
-                -MAX_WBITS, 9, Z_DEFAULT_STRATEGY) != Z_OK) {
-                fprintf(stderr, "deflater: deflateInit2 failed\n");
-                return 1;
-        }
-        if (deflate(&stream, Z_FINISH) != Z_STREAM_END) {
-                fprintf(stderr, "deflater: deflate failed\n");
-                return 1;
-        }
-        if (deflateEnd(&stream) != Z_OK) {
-                fprintf(stderr, "deflater: deflateEnd failed\n");
-                return 1;
-        }
-
-        /* write output */
-        fp = fopen(argv[2], "wb");
-        if (fp == NULL) {
-                perror(argv[2]);
-                return 1;
-        }
-        outlen = fwrite(outbuf, 1, stream.total_out, fp);
-        fclose(fp);
-        if (outlen != stream.total_out) {
-                perror(argv[2]);
-                return 1;
-        }
-
-        /* display summary */
-        printf("Compressed %s (%d bytes) to %s (%d bytes)\n",
-                argv[1], inlen, argv[2], outlen);
-        return 0;
-}